mirror of
https://github.com/stablyai/orca.git
synced 2026-10-03 00:02:19 +00:00
The split silently dropped jira.searchUsers and runtimeEnvironments.retryControlConnection. Neither failed typecheck: the bridge modules carried no satisfies annotation and the composed api object was unannotated, so a missing key was only a runtime TypeError in the renderer. Annotates each module against PreloadApi, the type window.api is already declared as, so the contract supplies the shape rather than a parallel copy. Deleting jira.searchUsers now fails with TS2741 naming the key. Turning this on surfaced 106 places where a bridge locally annotated Promise<unknown> or unknown[] over a contract that declares concrete types -- the bridge was erasing types the renderer relied on. Those annotations are gone. Also exposes app.awaitBeforeUnloadCheckpoint, which was declared and called but never actually on the bridge, so the lazy-chunk recovery reload optional-chained to a no-op and navigated without joining the checkpoint. The missing key was caught by the new annotation rather than by hand.
95 lines
4.0 KiB
TypeScript
95 lines
4.0 KiB
TypeScript
import { ipcRenderer } from 'electron'
|
|
import type { VerifyAndAddRuntimeEnvironmentResult } from '../../shared/remote-pairing-verification'
|
|
import type { RuntimeStatus } from '../../shared/runtime-types'
|
|
import type { RuntimeRpcResponse } from '../../shared/runtime-rpc-envelope'
|
|
import type { PublicKnownRuntimeEnvironment } from '../../shared/runtime-environments'
|
|
import type { RemoteRuntimeSharedConnectionDiagnostics } from '../../shared/remote-runtime-shared-control-types'
|
|
import { RUNTIME_ENVIRONMENT_DIAGNOSTICS_CHANNEL } from '../../shared/runtime-environment-diagnostics'
|
|
import {
|
|
subscribeRuntimeEnvironmentFromPreload,
|
|
type RuntimeEnvironmentSubscriptionHandle
|
|
} from '../runtime-environment-subscriptions'
|
|
import type { PreloadApi } from '../api-types'
|
|
|
|
export const runtimeEnvironmentsApi = {
|
|
list: (): Promise<PublicKnownRuntimeEnvironment[]> =>
|
|
ipcRenderer.invoke('runtimeEnvironments:list'),
|
|
addFromPairingCode: (args: {
|
|
name: string
|
|
pairingCode: string
|
|
}): Promise<{ environment: PublicKnownRuntimeEnvironment }> =>
|
|
ipcRenderer.invoke('runtimeEnvironments:addFromPairingCode', args),
|
|
verifyAndAddFromPairingCode: (args: {
|
|
name: string
|
|
pairingCode: string
|
|
allowLoopback?: boolean
|
|
}): Promise<VerifyAndAddRuntimeEnvironmentResult> =>
|
|
ipcRenderer.invoke('runtimeEnvironments:verifyAndAddFromPairingCode', args),
|
|
resolve: (args: { selector: string }): Promise<PublicKnownRuntimeEnvironment> =>
|
|
ipcRenderer.invoke('runtimeEnvironments:resolve', args),
|
|
remove: (args: { selector: string }): Promise<{ removed: PublicKnownRuntimeEnvironment }> =>
|
|
ipcRenderer.invoke('runtimeEnvironments:remove', args),
|
|
disconnect: (args: {
|
|
selector: string
|
|
}): Promise<{ disconnected: PublicKnownRuntimeEnvironment }> =>
|
|
ipcRenderer.invoke('runtimeEnvironments:disconnect', args),
|
|
connect: (args: {
|
|
selector: string
|
|
timeoutMs?: number
|
|
}): Promise<RuntimeRpcResponse<RuntimeStatus>> =>
|
|
ipcRenderer.invoke('runtimeEnvironments:connect', args),
|
|
getStatus: (args: {
|
|
selector: string
|
|
timeoutMs?: number
|
|
observeOnly?: true
|
|
}): Promise<RuntimeRpcResponse<RuntimeStatus>> =>
|
|
ipcRenderer.invoke('runtimeEnvironments:getStatus', args),
|
|
retryControlConnection: (args: { selector: string }): Promise<void> =>
|
|
ipcRenderer.invoke('runtimeEnvironments:retryControlConnection', args),
|
|
onSharedControlDiagnostics: (
|
|
callback: (event: {
|
|
environmentId: string
|
|
transportGeneration: number
|
|
diagnostics: RemoteRuntimeSharedConnectionDiagnostics
|
|
}) => void
|
|
): (() => void) => {
|
|
const listener = (
|
|
_event: Electron.IpcRendererEvent,
|
|
data: {
|
|
environmentId: string
|
|
transportGeneration: number
|
|
diagnostics: RemoteRuntimeSharedConnectionDiagnostics
|
|
}
|
|
): void => callback(data)
|
|
ipcRenderer.on(RUNTIME_ENVIRONMENT_DIAGNOSTICS_CHANNEL, listener)
|
|
return () => ipcRenderer.removeListener(RUNTIME_ENVIRONMENT_DIAGNOSTICS_CHANNEL, listener)
|
|
},
|
|
prepareBrowserClientHostPlacement: (args) =>
|
|
ipcRenderer.invoke('runtimeEnvironments:prepareBrowserClientHostPlacement', args),
|
|
retryConnectionsNow: (): Promise<void> =>
|
|
ipcRenderer.invoke('runtimeEnvironments:retryConnectionsNow'),
|
|
call: (args: {
|
|
selector: string
|
|
method: string
|
|
params?: unknown
|
|
timeoutMs?: number
|
|
expectedEnvironmentPairingRevision?: number
|
|
}): Promise<RuntimeRpcResponse<unknown>> => ipcRenderer.invoke('runtimeEnvironments:call', args),
|
|
subscribe: async (
|
|
args: {
|
|
selector: string
|
|
method: string
|
|
params?: unknown
|
|
timeoutMs?: number
|
|
expectedEnvironmentPairingRevision?: number
|
|
},
|
|
callbacks: {
|
|
onResponse: (response: RuntimeRpcResponse<unknown>) => void
|
|
onBinary?: (bytes: Uint8Array<ArrayBufferLike>) => void
|
|
onError?: (error: { code: string; message: string }) => void
|
|
onClose?: () => void
|
|
}
|
|
): Promise<RuntimeEnvironmentSubscriptionHandle> =>
|
|
subscribeRuntimeEnvironmentFromPreload(ipcRenderer, args, callbacks)
|
|
} satisfies PreloadApi['runtimeEnvironments']
|