Files
orca/src/main/computer/macos-native-provider-socket.ts
T
2026-05-11 14:20:08 -07:00

38 lines
1.1 KiB
TypeScript

import net from 'net'
import { RuntimeClientError } from './runtime-client-error'
export async function connectMacOSProviderSocket(
socketPath: string,
timeoutMs: number
): Promise<net.Socket> {
const deadline = Date.now() + timeoutMs
let lastError: Error | null = null
while (Date.now() < deadline) {
try {
return await connectSocket(socketPath)
} catch (error) {
lastError = error instanceof Error ? error : new Error(String(error))
await new Promise((resolve) => setTimeout(resolve, 100))
}
}
throw new RuntimeClientError(
'action_timeout',
`native macOS helper app did not open its socket: ${lastError?.message ?? 'timed out'}`
)
}
function connectSocket(socketPath: string): Promise<net.Socket> {
return new Promise((resolve, reject) => {
const socket = net.createConnection(socketPath)
const onError = (error: Error) => {
socket.destroy()
reject(error)
}
socket.once('error', onError)
socket.once('connect', () => {
socket.off('error', onError)
resolve(socket)
})
})
}