diff --git a/cli/src/api/apiMachine.ts b/cli/src/api/apiMachine.ts index c517d9b9..61f15fe1 100644 --- a/cli/src/api/apiMachine.ts +++ b/cli/src/api/apiMachine.ts @@ -8,7 +8,7 @@ import { realpathSync } from 'node:fs' import { basename, dirname, isAbsolute, join, relative, resolve as resolvePath } from 'node:path' import { logger } from '@/ui/logger' import { configuration } from '@/configuration' -import type { Update, UpdateMachineBody } from '@hapi/protocol' +import type { ClientToServerEvents, ServerToClientEvents, Update, UpdateMachineBody } from '@hapi/protocol' import type { MachineDirectoryEntry, MachineListDirectoryResponse, PathExistsResponse } from '@hapi/protocol/apiTypes' import { RPC_METHODS } from '@hapi/protocol/rpcMethods' import type { RunnerState, Machine, MachineMetadata } from './types' @@ -26,40 +26,6 @@ import type { SpawnSessionOptions, SpawnSessionResult } from '../modules/common/ import { applyVersionedAck } from './versionedUpdate' import { buildSocketIoExtraHeaderOptions } from './hubExtraHeaders' -interface ServerToRunnerEvents { - update: (data: Update) => void - 'rpc-request': (data: { method: string; params: string }, callback: (response: string) => void) => void - error: (data: { message: string }) => void -} - -interface RunnerToServerEvents { - 'machine-alive': (data: { machineId: string; time: number }) => void - 'machine-update-metadata': (data: { machineId: string; metadata: unknown; expectedVersion: number }, cb: (answer: { - result: 'error' - } | { - result: 'version-mismatch' - version: number - metadata: unknown | null - } | { - result: 'success' - version: number - metadata: unknown | null - }) => void) => void - 'machine-update-state': (data: { machineId: string; runnerState: unknown | null; expectedVersion: number }, cb: (answer: { - result: 'error' - } | { - result: 'version-mismatch' - version: number - runnerState: unknown | null - } | { - result: 'success' - version: number - runnerState: unknown | null - }) => void) => void - 'rpc-register': (data: { method: string }) => void - 'rpc-unregister': (data: { method: string }) => void -} - type MachineRpcHandlers = { spawnSession: (options: SpawnSessionOptions) => Promise stopSession: (sessionId: string) => boolean @@ -105,7 +71,7 @@ function formatWorkspaceRoots(paths?: string[]): string { } export class ApiMachineClient { - private socket!: Socket + private socket!: Socket private keepAliveInterval: NodeJS.Timeout | null = null private rpcHandlerManager: RpcHandlerManager diff --git a/shared/src/socket.ts b/shared/src/socket.ts index cca6e4e0..37e1b222 100644 --- a/shared/src/socket.ts +++ b/shared/src/socket.ts @@ -137,6 +137,58 @@ export const UpdateSchema = z.object({ export type Update = z.infer +export type UpdateMetadataAck = { + result: 'error' + reason?: SocketErrorReason +} | { + result: 'version-mismatch' + version: number + metadata: unknown | null +} | { + result: 'success' + version: number + metadata: unknown | null +} + +export type UpdateStateAck = { + result: 'error' + reason?: SocketErrorReason +} | { + result: 'version-mismatch' + version: number + agentState: unknown | null +} | { + result: 'success' + version: number + agentState: unknown | null +} + +export type MachineUpdateMetadataAck = { + result: 'error' + reason?: SocketErrorReason +} | { + result: 'version-mismatch' + version: number + metadata: unknown | null +} | { + result: 'success' + version: number + metadata: unknown | null +} + +export type MachineUpdateStateAck = { + result: 'error' + reason?: SocketErrorReason +} | { + result: 'version-mismatch' + version: number + runnerState: unknown | null +} | { + result: 'success' + version: number + runnerState: unknown | null +} + export interface ServerToClientEvents { update: (data: Update, ack?: (response: CancelQueuedMessageAck) => void) => void 'rpc-request': (data: { method: string; params: string }, callback: (response: string) => void) => void @@ -162,55 +214,11 @@ export interface ClientToServerEvents { }) => void 'session-end': (data: { sid: string; time: number; reason?: SessionEndReason }) => void 'messages-consumed': (data: { sid: string; localIds: string[] }) => void - 'update-metadata': (data: { sid: string; expectedVersion: number; metadata: unknown }, cb: (answer: { - result: 'error' - reason?: SocketErrorReason - } | { - result: 'version-mismatch' - version: number - metadata: unknown | null - } | { - result: 'success' - version: number - metadata: unknown | null - }) => void) => void - 'update-state': (data: { sid: string; expectedVersion: number; agentState: unknown | null }, cb: (answer: { - result: 'error' - reason?: SocketErrorReason - } | { - result: 'version-mismatch' - version: number - agentState: unknown | null - } | { - result: 'success' - version: number - agentState: unknown | null - }) => void) => void + 'update-metadata': (data: { sid: string; expectedVersion: number; metadata: unknown }, cb: (answer: UpdateMetadataAck) => void) => void + 'update-state': (data: { sid: string; expectedVersion: number; agentState: unknown | null }, cb: (answer: UpdateStateAck) => void) => void 'machine-alive': (data: { machineId: string; time: number }) => void - 'machine-update-metadata': (data: { machineId: string; expectedVersion: number; metadata: unknown }, cb: (answer: { - result: 'error' - reason?: SocketErrorReason - } | { - result: 'version-mismatch' - version: number - metadata: unknown | null - } | { - result: 'success' - version: number - metadata: unknown | null - }) => void) => void - 'machine-update-state': (data: { machineId: string; expectedVersion: number; runnerState: unknown | null }, cb: (answer: { - result: 'error' - reason?: SocketErrorReason - } | { - result: 'version-mismatch' - version: number - runnerState: unknown | null - } | { - result: 'success' - version: number - runnerState: unknown | null - }) => void) => void + 'machine-update-metadata': (data: { machineId: string; expectedVersion: number; metadata: unknown }, cb: (answer: MachineUpdateMetadataAck) => void) => void + 'machine-update-state': (data: { machineId: string; expectedVersion: number; runnerState: unknown | null }, cb: (answer: MachineUpdateStateAck) => void) => void 'rpc-register': (data: { method: string }) => void 'rpc-unregister': (data: { method: string }) => void 'terminal:ready': (data: TerminalReadyPayload) => void