@bian-womp/spark-remote 0.3.71 → 0.3.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/index.cjs +3 -10
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/RemoteEngine.d.ts.map +1 -1
- package/lib/cjs/src/RemoteGraphLifecycleApi.d.ts.map +1 -1
- package/lib/cjs/src/RemoteRuntimeClient.d.ts.map +1 -1
- package/lib/cjs/src/server/ServerCommandHandler.d.ts.map +1 -1
- package/lib/cjs/src/server/ServerRuntimeAdapter.d.ts.map +1 -1
- package/lib/cjs/src/transport/HttpPollingTransport.d.ts.map +1 -1
- package/lib/cjs/src/transport/Transport.d.ts.map +1 -1
- package/lib/cjs/src/transport/UnixSocketTransport.d.ts.map +1 -1
- package/lib/cjs/src/transport/WebSocketTransport.d.ts.map +1 -1
- package/lib/cjs/src/utils/inputEncoding.d.ts.map +1 -1
- package/lib/esm/index.js +3 -10
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/RemoteEngine.d.ts.map +1 -1
- package/lib/esm/src/RemoteGraphLifecycleApi.d.ts.map +1 -1
- package/lib/esm/src/RemoteRuntimeClient.d.ts.map +1 -1
- package/lib/esm/src/server/ServerCommandHandler.d.ts.map +1 -1
- package/lib/esm/src/server/ServerRuntimeAdapter.d.ts.map +1 -1
- package/lib/esm/src/transport/HttpPollingTransport.d.ts.map +1 -1
- package/lib/esm/src/transport/Transport.d.ts.map +1 -1
- package/lib/esm/src/transport/UnixSocketTransport.d.ts.map +1 -1
- package/lib/esm/src/transport/WebSocketTransport.d.ts.map +1 -1
- package/lib/esm/src/utils/inputEncoding.d.ts.map +1 -1
- package/package.json +5 -3
package/lib/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/transport/Seq.ts","../../src/transport/WebSocketTransport.ts","../../src/transport/HttpPollingTransport.ts","../../src/server/errors.ts","../../src/server/ServerRuntimeAdapter.ts","../../src/utils/inputEncoding.ts","../../src/RemoteEngine.ts","../../src/RemoteGraphLifecycleApi.ts","../../src/transport/UnixSocketTransport.ts","../../src/RemoteRuntimeClient.ts","../../src/server/ServerCommandHandler.ts"],"sourcesContent":["export class SeqGenerator {\n private lastMs = 0;\n private seqInMs = 0;\n\n next(): number {\n const now = Date.now();\n if (now === this.lastMs) {\n this.seqInMs = (this.seqInMs + 1) % 1000;\n } else {\n this.lastMs = now;\n this.seqInMs = 0;\n }\n return now * 1000 + this.seqInMs;\n }\n}\n\n","import { WebSocket } from \"ws\";\nimport type { Envelope } from \"@bian-womp/spark-protocol\";\nimport type { Transport, TransportConnectOptions } from \"./Transport\";\nimport type { WebSocketConnector } from \"./WebSocketConnector\";\nimport { SeqGenerator } from \"./Seq\";\n\n/**\n * WebSocket transport connection options.\n * Allows extensions to pass domain-specific parameters (e.g., flowId).\n */\nexport interface WebSocketTransportConnectOptions\n extends TransportConnectOptions {\n /**\n * Optional WebSocket connector for WebSocketTransport.\n * If provided, WebSocketTransport will use this connector instead of\n * creating WebSocket connections directly. This allows external systems\n * to handle authentication, token refresh, and retry logic.\n */\n connector?: WebSocketConnector;\n}\n\nconst CONNECTING = 0;\nconst OPEN = 1;\nconst CLOSING = 2;\nconst CLOSED = 3;\n\nexport class WebSocketTransport implements Transport {\n private ws?: WebSocket; // Can be browser WebSocket or Node.js WebSocket\n private listeners = new Set<(event: Envelope<any>) => void>();\n private baseUrl: string;\n private seq = new SeqGenerator();\n\n private pingInterval?: NodeJS.Timeout;\n private pongTimeout?: NodeJS.Timeout;\n private isAlive = false;\n private readonly PING_INTERVAL_MS = 30000;\n private readonly PONG_TIMEOUT_MS = 10000;\n private onConnectionLost?: () => void;\n private pongHandler?: () => void;\n private connector?: WebSocketConnector;\n\n constructor(\n url: string,\n options?: {\n onConnectionLost?: () => void;\n connector?: WebSocketConnector;\n }\n ) {\n this.baseUrl = url;\n this.onConnectionLost = options?.onConnectionLost;\n this.connector = options?.connector;\n }\n\n async connect(options?: WebSocketTransportConnectOptions): Promise<void> {\n if (this.ws && this.ws.readyState === OPEN) return;\n\n // Use connector if provided (e.g., from runSocket), otherwise use direct connection\n const connector = options?.connector || this.connector;\n\n if (connector) {\n await this.connectWithConnector(connector, options);\n } else {\n await this.connectDirect(options);\n }\n }\n\n private async connectWithConnector(\n connector: WebSocketConnector,\n options?: WebSocketTransportConnectOptions\n ): Promise<void> {\n // Build base URL\n let url: URL;\n if (this.baseUrl.startsWith(\"ws://\") || this.baseUrl.startsWith(\"wss://\")) {\n url = new URL(this.baseUrl);\n } else {\n const wsBaseUrl = this.baseUrl.replace(/^http/, \"ws\");\n url = new URL(wsBaseUrl);\n }\n\n // Convert params to the format expected by WebSocketConnector\n const params: Record<string, string | number | boolean | null | undefined> =\n {};\n if (options?.params) {\n for (const [key, value] of Object.entries(options.params)) {\n if (value !== undefined && value !== null) {\n params[key] = value;\n }\n }\n }\n\n // Use connector to establish connection\n // The connector handles auth, token refresh, and retries\n const connectedWs = await connector(\n {\n url: url.toString(),\n params,\n noAuth: false,\n },\n {\n onopen: () => {\n // Heartbeat will be started after connection is established\n this.startHeartbeat();\n },\n onmessage: (ev) => {\n // Forward messages to listeners\n try {\n const env = JSON.parse(String(ev.data)) as Envelope<any>;\n for (const l of Array.from(this.listeners)) l(env);\n } catch {}\n },\n onerror: () => {\n // Errors are handled by the connector (retry logic, etc.)\n },\n onclose: () => {\n // Stop heartbeat on close\n this.stopHeartbeat();\n },\n }\n );\n\n if (!connectedWs) {\n throw new Error(\"Connector did not return a WebSocket instance\");\n }\n\n this.ws = connectedWs as WebSocket;\n\n // Ensure heartbeat is started (in case onopen wasn't called)\n if (this.ws && this.ws.readyState === OPEN) {\n this.startHeartbeat();\n }\n }\n\n private async connectDirect(\n options?: TransportConnectOptions\n ): Promise<void> {\n // Original direct connection logic (fallback when no connector provided)\n let url: URL;\n if (this.baseUrl.startsWith(\"ws://\") || this.baseUrl.startsWith(\"wss://\")) {\n url = new URL(this.baseUrl);\n } else {\n const wsBaseUrl = this.baseUrl.replace(/^http/, \"ws\");\n url = new URL(wsBaseUrl);\n }\n\n if (options?.params) {\n for (const [key, value] of Object.entries(options.params)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const wsUrl = url.toString();\n this.ws = window\n ? new (window as any).WebSocket(wsUrl)\n : new WebSocket(wsUrl);\n await new Promise<void>((resolve, reject) => {\n if (!this.ws) return reject(new Error(\"ws init failed\"));\n\n this.ws.onopen = () => {\n this.startHeartbeat();\n resolve();\n };\n\n this.ws.onerror = (e) => reject(e);\n\n this.ws.onmessage = (ev) => {\n try {\n const env = JSON.parse(String(ev.data)) as Envelope<any>;\n for (const l of Array.from(this.listeners)) l(env);\n } catch {}\n };\n\n this.ws.onclose = () => {\n this.stopHeartbeat();\n };\n });\n }\n\n private startHeartbeat(): void {\n this.stopHeartbeat();\n this.isAlive = true;\n\n if (typeof window !== \"undefined\" || !this.ws) return;\n\n this.pongHandler = () => {\n this.isAlive = true;\n if (this.pongTimeout) {\n clearTimeout(this.pongTimeout);\n this.pongTimeout = undefined;\n }\n };\n this.ws.on(\"pong\", this.pongHandler);\n\n this.pingInterval = setInterval(() => {\n if (!this.ws || this.ws.readyState !== OPEN) {\n this.stopHeartbeat();\n return;\n }\n\n if (!this.isAlive) {\n this.onConnectionLost?.();\n this.stopHeartbeat();\n this.ws.terminate();\n return;\n }\n\n this.isAlive = false;\n\n try {\n (this.ws as any).ping();\n } catch (err) {\n console.warn(\"[WebSocketTransport] Failed to send ping:\", err);\n this.onConnectionLost?.();\n this.stopHeartbeat();\n return;\n }\n\n this.pongTimeout = setTimeout(() => {\n if (!this.isAlive) {\n this.onConnectionLost?.();\n this.stopHeartbeat();\n if (this.ws) {\n this.ws.terminate();\n }\n }\n }, this.PONG_TIMEOUT_MS);\n }, this.PING_INTERVAL_MS);\n }\n\n private stopHeartbeat(): void {\n if (this.pingInterval) {\n clearInterval(this.pingInterval);\n this.pingInterval = undefined;\n }\n if (this.pongTimeout) {\n clearTimeout(this.pongTimeout);\n this.pongTimeout = undefined;\n }\n if (this.ws && this.pongHandler) {\n this.ws.off(\"pong\", this.pongHandler);\n this.pongHandler = undefined;\n }\n this.isAlive = false;\n }\n\n async request<TReq = unknown, TRes = unknown>(\n msg: Envelope<TReq>\n ): Promise<Envelope<TRes>> {\n const seq = this.seq.next();\n const env = { ...msg, seq };\n const p = new Promise<Envelope<TRes>>((resolve) => {\n const off = this.subscribe((incoming) => {\n if (incoming.seq === seq) {\n off();\n resolve(incoming);\n }\n });\n });\n this.send(env);\n return p;\n }\n\n send<TReq = unknown>(msg: Envelope<TReq>): void {\n if (!this.ws || this.ws.readyState !== OPEN) return;\n this.ws.send(JSON.stringify(msg));\n }\n\n subscribe(cb: (event: Envelope<any>) => void): () => void {\n this.listeners.add(cb);\n return () => this.listeners.delete(cb);\n }\n\n async close(): Promise<void> {\n this.stopHeartbeat();\n if (!this.ws) return;\n const ws = this.ws;\n this.ws = undefined;\n await new Promise<void>((resolve) => {\n ws.onclose = () => resolve();\n try {\n ws.close();\n } catch {\n resolve();\n }\n });\n }\n}\n","import type { Envelope } from \"@bian-womp/spark-protocol\";\nimport type {\n Transport,\n TransportConnectOptions,\n TransportConnectParams,\n} from \"./Transport\";\n\nexport class HttpPollingTransport implements Transport {\n private baseUrl: string;\n private listeners = new Set<(event: Envelope<any>) => void>();\n private polling?: NodeJS.Timeout;\n private cursor?: string;\n private connectParams?: TransportConnectParams;\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.replace(/\\/$/, \"\");\n }\n\n async connect(options?: TransportConnectOptions): Promise<void> {\n // Store connection params for use in requests\n this.connectParams = options?.params;\n\n // Start polling loop\n if (this.polling) return;\n const tick = async () => {\n try {\n const url = new URL(this.baseUrl + \"/events\");\n if (this.cursor) url.searchParams.set(\"cursor\", this.cursor);\n // Add connection params to all requests\n if (this.connectParams) {\n for (const [key, value] of Object.entries(this.connectParams)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n const res = await fetch(url.toString());\n if (!res.ok) return;\n const batch = (await res.json()) as Envelope<any>[];\n for (const env of batch) {\n this.cursor = String(env.seq ?? Date.now());\n for (const l of Array.from(this.listeners)) l(env);\n }\n } catch {}\n };\n this.polling = setInterval(tick, 200);\n }\n\n async request<TReq = unknown, TRes = unknown>(\n msg: Envelope<TReq>\n ): Promise<Envelope<TRes>> {\n const url = new URL(this.baseUrl + \"/command\");\n // Add connection params to command requests\n if (this.connectParams) {\n for (const [key, value] of Object.entries(this.connectParams)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n const res = await fetch(url.toString(), {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(msg),\n });\n const data = (await res.json()) as Envelope<TRes>;\n return data;\n }\n\n send<TReq = unknown>(msg: Envelope<TReq>): void {\n const url = new URL(this.baseUrl + \"/command\");\n // Add connection params to send requests\n if (this.connectParams) {\n for (const [key, value] of Object.entries(this.connectParams)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n fetch(url.toString(), {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(msg),\n });\n }\n\n subscribe(cb: (event: Envelope<any>) => void): () => void {\n this.listeners.add(cb);\n return () => this.listeners.delete(cb);\n }\n\n async close(): Promise<void> {\n if (this.polling) clearInterval(this.polling);\n this.polling = undefined;\n }\n}\n","export function summarize(value: unknown, maxLen = 120): string {\n try {\n const s = typeof value === \"string\" ? value : JSON.stringify(value);\n return s.length > maxLen ? s.slice(0, maxLen) + \"…\" : s;\n } catch {\n return String(value);\n }\n}\n\nexport function serializeError(err: unknown): any {\n try {\n if (!err) return { message: String(err) };\n const errAny = err as any;\n if (err instanceof Error) {\n const base: any = {\n name: err.name,\n message: err.message,\n stack: err.stack,\n };\n for (const k of Object.keys(errAny)) base[k] = errAny[k];\n return base;\n }\n if (typeof err === \"object\") {\n const maybeMsg = errAny?.message;\n const maybeName = errAny?.name;\n const maybeStack = errAny?.stack;\n const out = { ...errAny };\n if (maybeMsg && !out.message) out.message = String(maybeMsg);\n if (maybeName && !out.name) out.name = String(maybeName);\n if (maybeStack && !out.stack) out.stack = String(maybeStack);\n return out;\n }\n return { message: String(err) };\n } catch {\n return { message: String(err) };\n }\n}\n","import type {\n Envelope,\n RuntimeEvent,\n RegistryDescriptor,\n RuntimeSnapshot,\n RuntimeSnapshotFull,\n RuntimeMetadata,\n RuntimeHistoryInfo,\n ConverterConfig,\n} from \"@bian-womp/spark-protocol\";\nimport {\n GraphBuilder,\n Registry,\n GraphRuntime,\n LocalEngine,\n parseJsonPath,\n setValueAtPathWithCreation,\n type GraphLifecycleApi,\n type Engine,\n type EngineEventName,\n type EngineEventListener,\n buildValueConverter,\n convertSnapshot,\n} from \"@bian-womp/spark-graph\";\n\n/**\n * ServerRuntimeAdapter extends GraphLifecycleApi and Engine to provide a unified interface\n * for both lifecycle and execution operations on the server side.\n *\n * Note: All Engine methods (including setInputs, copyOutputs, triggerExternal) already include\n * the `dry` option, so no overrides are needed. Some methods are sync in implementation but\n * match async signatures via wrappers.\n */\nexport interface ServerRuntimeAdapter\n extends GraphLifecycleApi,\n Omit<Engine, \"launch\"> {\n // All methods from Engine already include dry option, no overrides needed\n orignalDispose?: () => void;\n}\n\nexport interface ServerRuntimeAdapterContext {\n registry: Registry;\n builder: GraphBuilder;\n graphRuntime: GraphRuntime | undefined;\n engine: LocalEngine | undefined;\n extData: { runtime?: RuntimeMetadata } & Record<string, unknown>;\n}\n\nexport type ServerRuntimeAdapterExtension = {\n [K in Exclude<\n keyof ServerRuntimeAdapter,\n \"originalAdapter\"\n >]?: ServerRuntimeAdapter[K] extends (...args: any[]) => any\n ? (\n original: ServerRuntimeAdapter[K],\n context: ServerRuntimeAdapterContext,\n ...args: Parameters<ServerRuntimeAdapter[K]>\n ) => ReturnType<ServerRuntimeAdapter[K]>\n : never;\n};\n\nexport async function createServerRuntimeAdapter(\n id: string | undefined,\n createRegistry: (id?: string) => Promise<Registry>,\n send: (e: Envelope<RuntimeEvent>) => void,\n extensions?: ServerRuntimeAdapterExtension\n): Promise<ServerRuntimeAdapter> {\n const registry = await createRegistry(id);\n const builder = new GraphBuilder(registry);\n let graphRuntime: GraphRuntime | undefined;\n let engine: LocalEngine | undefined;\n let extData: { runtime?: RuntimeMetadata } & Record<string, unknown> = {};\n\n type CustomNodeData = Record<string, Record<string, unknown>>;\n\n const isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n const getCustomNodeDataFromExtData = (\n data: Record<string, unknown> | undefined\n ): CustomNodeData | undefined => {\n if (!data) return undefined;\n const custom = isRecord(data.custom) ? data.custom : undefined;\n if (!custom) return undefined;\n const nodes = isRecord(custom.nodes) ? custom.nodes : undefined;\n if (!nodes) return undefined;\n const sanitized: CustomNodeData = {};\n for (const [nodeId, nodeData] of Object.entries(nodes)) {\n if (isRecord(nodeData)) sanitized[nodeId] = nodeData;\n }\n return Object.keys(sanitized).length > 0 ? sanitized : undefined;\n };\n\n const areCustomNodeDataEqual = (\n left: CustomNodeData | undefined,\n right: CustomNodeData | undefined\n ): boolean => {\n if (!left && !right) return true;\n if (!left || !right) return false;\n return JSON.stringify(left) === JSON.stringify(right);\n };\n\n const syncCustomNodeDataToRuntime = (): void => {\n if (!graphRuntime) return;\n const customNodeData = getCustomNodeDataFromExtData(extData);\n const existingCustomNodeData = graphRuntime.getCustomNodeData();\n const sanitizedExisting = Object.keys(existingCustomNodeData).length\n ? existingCustomNodeData\n : undefined;\n if (areCustomNodeDataEqual(sanitizedExisting, customNodeData)) {\n return;\n }\n graphRuntime.setCustomNodeData(customNodeData ?? {});\n };\n\n // Helper to get current context\n const getContext = (): ServerRuntimeAdapterContext => ({\n registry,\n builder,\n graphRuntime,\n engine,\n extData,\n });\n\n // Original implementations - define as separate functions first to allow cross-references\n const originalAdapter: ServerRuntimeAdapter = {\n coerce: async (from, to, value) => {\n const resolved = registry.resolveCoercion(from, to);\n if (!resolved) return value;\n if (resolved.kind === \"sync\") return resolved.convert(value);\n const ac = new AbortController();\n return await resolved.convertAsync(value, ac.signal);\n },\n getEnvironment: async () => {\n if (!graphRuntime) return {};\n return graphRuntime.getEnvironment();\n },\n applyRegistry: async (deltas) => {\n // Pause runtime if exists\n // Apply each delta to the live registry\n for (const d of deltas || []) {\n if (!d || typeof d !== \"object\") continue;\n if (d.kind === \"register-enum\") {\n registry.registerEnum({\n id: d.id,\n displayName: d.displayName,\n options: d.options || [],\n bakeTarget: d.bakeTarget,\n opts: d.opts,\n });\n } else if (d.kind === \"register-type\") {\n registry.registerType({\n id: d.id,\n displayName: d.displayName,\n bakeTarget: d.bakeTarget,\n validate: (_v) => true,\n });\n } else if (d.kind === \"register-node\") {\n const desc = d.desc || {};\n registry.registerNode({\n id: String(desc.id || \"\"),\n categoryId: String(desc.categoryId || \"compute\"),\n displayName: desc.displayName,\n inputs: desc.inputs || {},\n outputs: desc.outputs || {},\n // impl must be empty per frontend registration contract\n impl: () => {},\n });\n }\n }\n // Notify clients (include deltas in invalidate payload)\n send({\n message: {\n type: \"invalidate\",\n payload: { reason: \"registry-changed\", deltas },\n },\n });\n },\n build: async (def, opts) => {\n // If we rebuild the graph, we must not keep the previous runtime/engine alive.\n // This can happen for a single \"flow\" when:\n // - server bootstraps an empty graph (no snapshot) then client sends Build with real def\n // - snapshot load / applySnapshotFull triggers a build\n // - client intentionally rebuilds the graph\n //\n // Without disposing, we can end up with multiple GraphRuntime instances in memory\n // for the same flow/connection, each holding listeners/resources.\n if (engine) {\n console.info(\n `[ServerRuntimeAdapter:${id}] Disposing previous engine before building new one`\n );\n engine.dispose();\n engine = undefined;\n }\n if (graphRuntime) {\n console.info(\n `[ServerRuntimeAdapter:${id}] Disposing previous graph runtime before building new one`\n );\n graphRuntime.dispose();\n graphRuntime = undefined;\n }\n\n const environment = opts?.environment || {};\n graphRuntime = builder.build(def, {\n environment,\n startPaused: opts?.startPaused,\n });\n syncCustomNodeDataToRuntime();\n graphRuntime.on(\"value\", (p) =>\n send({ message: { type: \"value\", payload: p } })\n );\n graphRuntime.on(\"invalidate\", (p) =>\n send({ message: { type: \"invalidate\", payload: p } })\n );\n graphRuntime.on(\"error\", (p) =>\n send({ message: { type: \"error\", payload: p } })\n );\n graphRuntime.on(\"stats\", (p) =>\n send({ message: { type: \"stats\", payload: p } })\n );\n },\n setExtData: async (data) => {\n if (!data || typeof data !== \"object\") {\n // Clear all extData when called with non-object (backward-compatible)\n extData = {};\n syncCustomNodeDataToRuntime();\n return;\n }\n // Merge with existing extData so that callers can update a subset of fields\n // (e.g., { ui } or { runtime }) without dropping the other ones.\n extData = { ...extData, ...data };\n syncCustomNodeDataToRuntime();\n },\n updateExtData: async (updates: Array<{ path: string; value: unknown }>) => {\n if (!extData || typeof extData !== \"object\" || Array.isArray(extData)) {\n extData = {};\n }\n let hasCustomUpdate = false;\n for (const { path, value } of updates) {\n const pathSegments = parseJsonPath(path);\n const updated = setValueAtPathWithCreation(extData, pathSegments, value);\n if (updated && pathSegments.length > 0 && pathSegments[0] === \"custom\") {\n hasCustomUpdate = true;\n }\n }\n if (hasCustomUpdate) {\n syncCustomNodeDataToRuntime();\n }\n return hasCustomUpdate;\n },\n snapshot: async (): Promise<RuntimeSnapshot> => {\n const inputs: RuntimeSnapshot[\"inputs\"] = {};\n const outputs: RuntimeSnapshot[\"outputs\"] = {};\n if (!graphRuntime) return { inputs, outputs };\n const nodes = graphRuntime.getNodeIds();\n for (const nodeId of nodes) {\n const data = graphRuntime.getNodeData(nodeId);\n if (data?.inputs && Object.keys(data.inputs).length > 0) {\n inputs[nodeId] = { ...data.inputs };\n }\n if (data?.outputs && Object.keys(data.outputs).length > 0) {\n outputs[nodeId] = { ...data.outputs };\n }\n }\n return { inputs, outputs };\n },\n snapshotFull: async (): Promise<RuntimeSnapshotFull> => {\n if (!graphRuntime) return { inputs: {}, outputs: {} };\n const snap = await originalAdapter.snapshot();\n const environment = graphRuntime.getEnvironment();\n const def = graphRuntime.getGraphDef();\n return { ...snap, def, environment, extData };\n },\n applySnapshotFull: async (payload, options) => {\n const def = payload.def;\n if (!def) return;\n\n // Only build if skipBuild is not true\n if (!options?.skipBuild) {\n await originalAdapter.build(def, { environment: payload.environment });\n } else if (!graphRuntime) {\n // If skipping build but no runtime exists, we still need to build\n console.info(\n \"Skipping build is set but no runtime exists, building anyway\"\n );\n await originalAdapter.build(def, { environment: payload.environment });\n }\n\n // Hydrate inputs/outputs exactly, then re-emit outputs without scheduling runs\n if (!graphRuntime) return;\n\n graphRuntime.hydrate({\n inputs: payload.inputs,\n outputs: payload.outputs,\n });\n await originalAdapter.setExtData(payload.extData || {});\n },\n convertSnapshot: async (\n converterConfig: ConverterConfig,\n options?: { dry?: boolean }\n ) => {\n const snapshot = await originalAdapter.snapshotFull();\n const converter = buildValueConverter(converterConfig);\n const converted = convertSnapshot(snapshot, converter);\n await originalAdapter.applySnapshotFull(converted, {\n skipBuild: true,\n });\n return converted;\n },\n pause: async () => {\n if (!graphRuntime) return;\n graphRuntime.pause();\n },\n resume: async () => {\n if (!graphRuntime) return;\n graphRuntime.resume();\n },\n cancelNodeRuns: (nodeIds: string[]) => {\n if (!graphRuntime) return;\n graphRuntime.cancelNodeRuns(nodeIds);\n },\n commit: async (\n reason?: string\n ): Promise<RuntimeHistoryInfo | undefined> => {\n return undefined;\n },\n undo: async () => false,\n redo: async () => false,\n describeRegistry: async (): Promise<RegistryDescriptor> => {\n // types (include enum options when available)\n const types = Array.from(registry.types.entries()).map(([id, d]) => {\n const en = registry.enums.get(id);\n return {\n id,\n displayName: d.displayName,\n bakeTarget: d.bakeTarget,\n ...(en ? { options: en.options } : {}),\n };\n });\n // categories: not directly enumerable; derive from node descriptors\n const nodeDescs = Array.from(registry.nodes.values());\n const catIds = new Set(nodeDescs.map((n) => n.categoryId));\n const categories = Array.from(catIds).map((id) => {\n const cat = registry.categories.get?.(id);\n return { id, displayName: cat?.displayName };\n });\n const nodes = nodeDescs.map((n) => ({\n id: n.id,\n categoryId: n.categoryId,\n displayName: n.displayName,\n inputs: n.inputs || {},\n outputs: n.outputs || {},\n inputDefaults: n.inputDefaults || {},\n policy: n.policy || {},\n }));\n const coercions = registry.listCoercions();\n return { types, categories, nodes, coercions, schemaVersion: 4 };\n },\n update: async (def, options) => {\n if (!graphRuntime) return;\n // Use requestPause for dry mode to temporarily pause without affecting base run mode\n const releasePause = options?.dry ? graphRuntime.requestPause() : null;\n try {\n graphRuntime.update(def, registry);\n send({\n message: {\n type: \"invalidate\",\n payload: { reason: \"graph-updated\" },\n },\n });\n } finally {\n releasePause?.();\n }\n },\n setEnvironment: async (env, opts) => {\n if (!graphRuntime) return;\n // Use requestPause for dry mode to temporarily pause without affecting base run mode\n const releasePause = opts?.dry ? graphRuntime.requestPause() : null;\n try {\n if (opts?.merge) {\n const current = graphRuntime.getEnvironment();\n const next = { ...(current || {}), ...(env || {}) };\n graphRuntime.setEnvironment(next);\n } else {\n graphRuntime.setEnvironment(env);\n }\n } finally {\n releasePause?.();\n }\n },\n setInputs: (\n nodeId: string,\n inputs: Record<string, unknown>,\n options?: { dry?: boolean }\n ) => {\n if (!engine) return;\n engine.setInputs(nodeId, inputs, options);\n },\n copyOutputs: (\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ) => {\n if (!engine) return;\n engine.copyOutputs(fromNodeId, toNodeId, options);\n },\n triggerExternal: (\n nodeId: string,\n event: unknown,\n options?: { dry?: boolean }\n ) => {\n if (!engine) return;\n engine.triggerExternal(nodeId, event, options);\n },\n launch: async (opts) => {\n if (!graphRuntime) {\n throw new Error(\"Cannot launch: graph runtime not built\");\n }\n\n // Dispose existing engine if any\n if (engine) {\n engine.dispose();\n engine = undefined;\n }\n\n // Create new engine using shared factory\n engine = new LocalEngine(graphRuntime, opts?.runMode);\n engine.launch(opts?.invalidate, opts?.runMode, opts?.startPaused);\n },\n setRunMode: (runMode) => {\n if (!engine) return;\n engine.setRunMode(runMode);\n },\n computeNode: async (\n nodeId: string,\n options?: { skipPropagateValues?: boolean }\n ) => {\n if (!engine) return;\n await engine.computeNode(nodeId, options);\n },\n runFromHere: async (nodeId: string) => {\n if (!engine) return;\n await engine.runFromHere(nodeId);\n },\n whenIdle: async () => {\n if (!engine) return;\n await engine.whenIdle();\n },\n dispose: () => {\n if (engine) {\n engine.dispose();\n engine = undefined;\n }\n if (graphRuntime) {\n graphRuntime.dispose();\n graphRuntime = undefined;\n }\n },\n // Engine methods\n getOutput: (nodeId: string, output: string) => {\n return engine?.getOutput(nodeId, output);\n },\n on: <K extends EngineEventName>(\n event: K,\n handler: EngineEventListener<K>\n ) => {\n if (!engine) return () => {};\n return engine.on(event, handler);\n },\n // GraphLifecycleApi methods\n setViewport: async (viewport) => {\n // Viewport is UI-specific, server doesn't need to handle it\n // But we implement it to satisfy the interface\n },\n };\n\n // Helper to wrap a method with extension support\n const wrapMethod = <K extends keyof ServerRuntimeAdapter>(\n key: K,\n original: ServerRuntimeAdapter[K]\n ): ServerRuntimeAdapter[K] => {\n const extension = extensions?.[key];\n if (!extension) {\n return original;\n }\n // Handle optional methods that might be undefined\n if (!original) {\n return original;\n }\n return ((...args: Parameters<NonNullable<ServerRuntimeAdapter[K]>>) => {\n return extension(original, getContext(), ...args);\n }) as unknown as ServerRuntimeAdapter[K];\n };\n\n // Create API with extensions applied\n const extendedAdapter: ServerRuntimeAdapter = {\n // GraphLifecycleApi methods\n coerce: wrapMethod(\"coerce\", originalAdapter.coerce),\n getEnvironment: wrapMethod(\n \"getEnvironment\",\n originalAdapter.getEnvironment\n ),\n applyRegistry: wrapMethod(\"applyRegistry\", originalAdapter.applyRegistry),\n build: wrapMethod(\"build\", originalAdapter.build),\n setExtData: wrapMethod(\"setExtData\", originalAdapter.setExtData),\n updateExtData: wrapMethod(\"updateExtData\", originalAdapter.updateExtData),\n snapshot: wrapMethod(\"snapshot\", originalAdapter.snapshot),\n snapshotFull: wrapMethod(\"snapshotFull\", originalAdapter.snapshotFull),\n applySnapshotFull: wrapMethod(\n \"applySnapshotFull\",\n originalAdapter.applySnapshotFull\n ),\n convertSnapshot: wrapMethod(\n \"convertSnapshot\",\n originalAdapter.convertSnapshot\n ),\n describeRegistry: wrapMethod(\n \"describeRegistry\",\n originalAdapter.describeRegistry\n ),\n update: wrapMethod(\"update\", originalAdapter.update),\n setEnvironment: wrapMethod(\n \"setEnvironment\",\n originalAdapter.setEnvironment\n ),\n setViewport: wrapMethod(\"setViewport\", originalAdapter.setViewport),\n commit: wrapMethod(\"commit\", originalAdapter.commit),\n undo: wrapMethod(\"undo\", originalAdapter.undo),\n redo: wrapMethod(\"redo\", originalAdapter.redo),\n pause: wrapMethod(\"pause\", originalAdapter.pause),\n resume: wrapMethod(\"resume\", originalAdapter.resume),\n launch: wrapMethod(\"launch\", originalAdapter.launch),\n // Engine methods\n setInputs: wrapMethod(\"setInputs\", originalAdapter.setInputs),\n copyOutputs: wrapMethod(\"copyOutputs\", originalAdapter.copyOutputs),\n triggerExternal: wrapMethod(\n \"triggerExternal\",\n originalAdapter.triggerExternal\n ),\n computeNode: wrapMethod(\"computeNode\", originalAdapter.computeNode),\n runFromHere: wrapMethod(\"runFromHere\", originalAdapter.runFromHere),\n setRunMode: wrapMethod(\"setRunMode\", originalAdapter.setRunMode),\n whenIdle: wrapMethod(\"whenIdle\", originalAdapter.whenIdle),\n dispose: wrapMethod(\"dispose\", originalAdapter.dispose),\n cancelNodeRuns: wrapMethod(\n \"cancelNodeRuns\",\n originalAdapter.cancelNodeRuns\n ),\n getOutput: wrapMethod(\"getOutput\", originalAdapter.getOutput),\n on: wrapMethod(\"on\", originalAdapter.on),\n orignalDispose: originalAdapter.dispose,\n };\n\n return extendedAdapter;\n}\n","export const UNSET_MARKER = { __spark_unset: true } as const;\n\nexport function isUnsetMarker(value: unknown): value is typeof UNSET_MARKER {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"__spark_unset\" in value &&\n (value as any).__spark_unset === true\n );\n}\n\nexport function encodeInputsForTransport(\n inputs: Record<string, unknown>\n): Record<string, unknown> {\n const encoded: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(inputs)) {\n encoded[key] = value === undefined ? UNSET_MARKER : value;\n }\n return encoded;\n}\n\nexport function decodeInputsFromTransport(\n inputs: Record<string, unknown>\n): Record<string, unknown> {\n const decoded: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(inputs)) {\n decoded[key] = isUnsetMarker(value) ? undefined : value;\n }\n return decoded;\n}\n","import type {\n Envelope,\n RunMode,\n RuntimeEvent,\n} from \"@bian-womp/spark-protocol\";\nimport type {\n Engine,\n EngineEventListener,\n EngineEventName,\n EngineEventMap,\n} from \"@bian-womp/spark-graph\";\nimport type { Transport } from \"./transport/Transport\";\nimport { encodeInputsForTransport } from \"./utils/inputEncoding\";\n\nexport class RemoteEngine implements Engine {\n private listeners = new Map<\n EngineEventName,\n Set<EngineEventListener<EngineEventName>>\n >();\n private cache = new Map<string, { value: unknown; runtimeTypeId?: string }>();\n\n constructor(private transport: Transport) {\n this.transport.subscribe((env) => this.onEnvelope(env));\n }\n\n /**\n * Generate cache key that includes io type to prevent collisions\n * between input and output handles with the same name\n */\n private getCacheKey(\n nodeId: string,\n handle: string,\n io: \"input\" | \"output\"\n ): string {\n return `${nodeId}.${io}.${handle}`;\n }\n\n private onEnvelope(env: Envelope<RuntimeEvent>): void {\n const msg = env.message;\n if (!msg) return;\n if (msg.type === \"value\") {\n const key = this.getCacheKey(\n msg.payload.nodeId,\n msg.payload.handle,\n msg.payload.io\n );\n this.cache.set(key, {\n value: msg.payload.value,\n runtimeTypeId: msg.payload.runtimeTypeId,\n });\n this.emit(\"value\", msg.payload);\n } else if (msg.type === \"error\") {\n this.emit(\"error\", msg.payload);\n } else if (msg.type === \"invalidate\") {\n this.emit(\"invalidate\", msg.payload);\n } else if (msg.type === \"stats\") {\n this.emit(\"stats\", msg.payload);\n }\n }\n\n launch(): void {\n throw new Error(\n \"RemoteEngine.launch() is not supported. Use GraphLifecycleApi.launch() instead.\"\n );\n }\n\n setRunMode(runMode: RunMode): void {\n this.transport.send({\n message: {\n type: \"SetRunMode\",\n payload: { runMode },\n },\n });\n }\n\n async setInputs(\n nodeId: string,\n inputs: Record<string, unknown>,\n options?: { dry?: boolean }\n ): Promise<void> {\n const encodedInputs = encodeInputsForTransport(inputs);\n await this.transport.request({\n message: {\n type: \"SetInputs\",\n payload: { nodeId, inputs: encodedInputs },\n dry: options?.dry,\n },\n });\n }\n\n async triggerExternal(\n nodeId: string,\n event: unknown,\n options?: { dry?: boolean }\n ): Promise<void> {\n await this.transport.request({\n message: {\n type: \"TriggerExternal\",\n payload: { nodeId, event },\n dry: options?.dry,\n },\n });\n }\n\n async copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): Promise<void> {\n await this.transport.request({\n message: {\n type: \"CopyOutputs\",\n payload: { fromNodeId, toNodeId },\n dry: options?.dry,\n },\n });\n }\n\n on<K extends EngineEventName>(\n event: K,\n handler: EngineEventListener<K>\n ): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event)! as Set<EngineEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n private emit<K extends EngineEventName>(\n event: K,\n payload: EngineEventMap[K]\n ): void {\n const set = this.listeners.get(event);\n if (set) for (const h of Array.from(set)) h(payload);\n }\n\n getOutput(nodeId: string, output: string): unknown {\n return this.cache.get(this.getCacheKey(nodeId, output, \"output\"))?.value;\n }\n\n async whenIdle(): Promise<void> {\n await this.transport.request({ message: { type: \"WhenIdle\" } });\n }\n\n async computeNode(\n nodeId: string,\n options?: { skipPropagateValues?: boolean }\n ): Promise<void> {\n await this.transport.request({\n message: { type: \"ComputeNode\", payload: { nodeId, ...options } },\n });\n }\n\n async runFromHere(nodeId: string): Promise<void> {\n await this.transport.request({\n message: { type: \"RunFromHere\", payload: { nodeId } },\n });\n }\n\n async cancelNodeRuns(nodeIds: string[]): Promise<void> {\n await this.transport.request({\n message: { type: \"CancelNodeRuns\", payload: { nodeIds } },\n });\n }\n\n dispose(): void {\n this.transport.send({ message: { type: \"Dispose\" } });\n }\n}\n","import type {\n GraphDefinition,\n RegistryDescriptor,\n RegistryDelta,\n RuntimeSnapshot,\n RuntimeSnapshotFull,\n RunnerOptions,\n RuntimeHistoryInfo,\n Viewport,\n ConverterConfig,\n} from \"@bian-womp/spark-protocol\";\nimport type { GraphLifecycleApi } from \"@bian-womp/spark-graph\";\nimport type { Transport } from \"./transport/Transport\";\n\n/**\n * RemoteGraphLifecycleApi implements GraphLifecycleApi by sending commands over transport.\n * This handles all non-execution operations (graph lifecycle, snapshots, registry, etc.)\n */\nexport class RemoteGraphLifecycleApi implements GraphLifecycleApi {\n constructor(private transport: Transport) {}\n\n private async ensureConnected(): Promise<Transport> {\n if (!this.transport) {\n throw new Error(\"Transport not connected\");\n }\n return this.transport;\n }\n\n async build(\n def: GraphDefinition,\n opts?: { environment?: Record<string, unknown> }\n ): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: {\n type: \"Build\",\n payload: { def, environment: opts?.environment },\n },\n });\n }\n\n async update(\n def: GraphDefinition,\n options?: { dry?: boolean }\n ): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: { type: \"Update\", payload: { def }, dry: options?.dry },\n });\n }\n\n async launch(opts?: RunnerOptions): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: {\n type: \"Launch\",\n payload: opts,\n },\n });\n }\n\n async snapshot(): Promise<RuntimeSnapshot> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"Snapshot\" },\n });\n const payload = (res?.message as { snapshot: RuntimeSnapshot }) || {};\n return payload.snapshot || { inputs: {}, outputs: {} };\n }\n\n async snapshotFull(): Promise<RuntimeSnapshotFull> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"SnapshotFull\" },\n });\n const payload = (res?.message as { snapshot: RuntimeSnapshotFull }) || {};\n return (\n payload.snapshot || {\n def: undefined,\n environment: {},\n inputs: {},\n outputs: {},\n }\n );\n }\n\n async applySnapshotFull(\n payload: RuntimeSnapshotFull,\n options?: { skipBuild?: boolean }\n ): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: {\n type: \"ApplySnapshotFull\",\n payload,\n skipBuild: options?.skipBuild,\n },\n });\n }\n\n async convertSnapshot(\n converterConfig: ConverterConfig,\n options?: { dry?: boolean }\n ): Promise<RuntimeSnapshotFull> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: {\n type: \"ConvertSnapshot\",\n payload: { converterConfig },\n dry: options?.dry,\n },\n });\n const payload = (res?.message as { snapshot: RuntimeSnapshotFull }) || {};\n return (\n payload.snapshot || {\n def: undefined,\n environment: {},\n inputs: {},\n outputs: {},\n }\n );\n }\n\n async describeRegistry(): Promise<RegistryDescriptor> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"DescribeRegistry\" },\n });\n const payload = (res?.message as { registry: RegistryDescriptor }) || {};\n return (\n payload.registry || {\n types: [],\n categories: [],\n nodes: [],\n coercions: [],\n schemaVersion: 4,\n }\n );\n }\n\n async applyRegistry(deltas: Array<RegistryDelta>): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: { type: \"RegistryApply\", payload: { deltas } },\n });\n }\n\n async setEnvironment(\n environment: Record<string, unknown>,\n opts?: { merge?: boolean; dry?: boolean }\n ): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: {\n type: \"SetEnvironment\",\n payload: { environment, merge: opts?.merge },\n dry: opts?.dry,\n },\n });\n }\n\n async getEnvironment(): Promise<Record<string, unknown>> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"GetEnvironment\" },\n });\n const payload =\n (res?.message as { environment?: Record<string, unknown> }) || {};\n return payload.environment || {};\n }\n\n async coerce(from: string, to: string, value: unknown): Promise<unknown> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"Coerce\", payload: { from, to, value } },\n });\n const payload = (res?.message as { ok?: boolean; value?: unknown }) || {};\n return payload.value;\n }\n\n async setExtData(data: Record<string, unknown>): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: { type: \"SetExtData\", payload: data },\n });\n }\n\n async updateExtData(\n updates: Array<{ path: string; value: unknown }>\n ): Promise<boolean> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"UpdateExtData\", payload: updates },\n });\n const payload = (res?.message as { hasCustomUpdate?: boolean }) || {};\n return payload.hasCustomUpdate ?? false;\n }\n\n async setViewport(viewport: Viewport): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.send({\n message: { type: \"SetViewport\", payload: { viewport } },\n });\n }\n\n async commit(reason?: string): Promise<RuntimeHistoryInfo | undefined> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"Commit\", payload: { reason } },\n });\n const payload = (res?.message as { history?: RuntimeHistoryInfo }) || {};\n return payload.history;\n }\n\n async undo(): Promise<boolean> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"Undo\" },\n });\n const payload = (res?.message as { success?: boolean }) || {};\n return payload.success ?? false;\n }\n\n async redo(): Promise<boolean> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"Redo\" },\n });\n const payload = (res?.message as { success?: boolean }) || {};\n return payload.success ?? false;\n }\n\n async pause(): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: { type: \"Pause\" },\n });\n }\n\n async resume(): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: { type: \"Resume\" },\n });\n }\n}\n","// Node-only transport using a UNIX domain socket.\n// Import directly from path: \"@bian-womp/spark-remote/transport/UnixSocketTransport\" in Node/Electron code.\n// Do not re-export from the browser index to avoid bundling in web builds.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Envelope } from \"@bian-womp/spark-protocol\";\nimport type { Transport } from \"./Transport\";\nimport { SeqGenerator } from \"./Seq\";\n\n// Use node:net for ESM compatibility in Node 18+\n// We avoid type imports here to keep this file isolated from browser builds.\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport type { Socket } from \"node:net\";\n\nexport class UnixSocketTransport implements Transport {\n private socket?: Socket;\n private listeners = new Set<(event: Envelope<any>) => void>();\n private buffer = \"\";\n private waiters = new Map<number, (env: Envelope<any>) => void>();\n private seq = new SeqGenerator();\n\n constructor(private socketPath: string) {}\n\n async connect(): Promise<void> {\n if (typeof process === \"undefined\") {\n throw new Error(\"UnixSocketTransport requires a Node environment\");\n }\n if (this.socket) return;\n const { createConnection } = await import(\"node:net\");\n const sock = createConnection(this.socketPath);\n this.socket = sock;\n await new Promise<void>((resolve, reject) => {\n sock.once(\"connect\", () => resolve());\n sock.once(\"error\", (e) => reject(e));\n });\n sock.on(\"data\", (chunk: Buffer) => this.onData(chunk));\n sock.on(\"error\", () => {\n /* noop, surface via request waiters if needed */\n });\n }\n\n private onData(chunk: Buffer): void {\n this.buffer += chunk.toString(\"utf8\");\n let idx = this.buffer.indexOf(\"\\n\");\n while (idx >= 0) {\n const raw = this.buffer.slice(0, idx);\n this.buffer = this.buffer.slice(idx + 1);\n idx = this.buffer.indexOf(\"\\n\");\n if (!raw.trim()) continue;\n try {\n const env = JSON.parse(raw) as Envelope<any>;\n if (env && typeof env.seq === \"number\" && this.waiters.has(env.seq)) {\n const fn = this.waiters.get(env.seq)!;\n this.waiters.delete(env.seq);\n fn(env);\n } else {\n for (const l of Array.from(this.listeners)) l(env);\n }\n } catch {\n // ignore malformed frames\n }\n }\n }\n\n async request<TReq = unknown, TRes = unknown>(\n msg: Envelope<TReq>\n ): Promise<Envelope<TRes>> {\n const seq = typeof msg.seq === \"number\" ? msg.seq : this.seq.next();\n const env = { ...msg, seq };\n const p = new Promise<Envelope<TRes>>((resolve) => {\n this.waiters.set(seq, (incoming) => resolve(incoming));\n });\n this.send(env);\n return p;\n }\n\n send<TReq = unknown>(msg: Envelope<TReq>): void {\n const s = this.socket;\n if (!s) return;\n try {\n s.write(JSON.stringify(msg) + \"\\n\");\n } catch {\n // ignore\n }\n }\n\n subscribe(cb: (event: Envelope<any>) => void): () => void {\n this.listeners.add(cb);\n return () => this.listeners.delete(cb);\n }\n\n async close(): Promise<void> {\n const s = this.socket;\n this.socket = undefined;\n if (!s) return;\n await new Promise<void>((resolve) => {\n try {\n s.end(() => resolve());\n } catch {\n resolve();\n }\n });\n }\n}\n","import type { Envelope } from \"@bian-womp/spark-protocol\";\nimport type { GraphLifecycleApi } from \"@bian-womp/spark-graph\";\nimport { RemoteEngine } from \"./RemoteEngine\";\nimport { RemoteGraphLifecycleApi } from \"./RemoteGraphLifecycleApi\";\nimport type { Transport, TransportConnectOptions } from \"./transport/Transport\";\nimport { HttpPollingTransport } from \"./transport/HttpPollingTransport\";\nimport {\n WebSocketTransport,\n WebSocketTransportConnectOptions,\n} from \"./transport/WebSocketTransport\";\nimport { UnixSocketTransport } from \"./transport/UnixSocketTransport\";\n\nexport type RemoteClientConfig =\n | {\n kind: \"remote-http\";\n baseUrl: string;\n connectOptions?: TransportConnectOptions;\n }\n | {\n kind: \"remote-ws\";\n url: string;\n connectOptions?: WebSocketTransportConnectOptions;\n }\n | {\n kind: \"remote-unix\";\n socketPath: string;\n connectOptions?: TransportConnectOptions;\n };\n\nexport type RemoteTransportStatus = {\n state: \"connecting\" | \"connected\" | \"disconnected\";\n kind: \"remote-http\" | \"remote-ws\" | \"remote-unix\";\n runnerId?: string;\n};\n\nexport type TransportEventListener = (status: RemoteTransportStatus) => void;\nexport type CustomEventListener = (event: Envelope<any>) => void;\n\n/**\n * RemoteRuntimeClient manages the connection to a remote runtime.\n * It provides access to:\n * - engine: RemoteEngine for execution operations\n * - api: GraphLifecycleApi for graph lifecycle operations\n */\nexport class RemoteRuntimeClient {\n private _engine?: RemoteEngine;\n private _api?: RemoteGraphLifecycleApi;\n private transport?: Transport;\n private customEventListeners = new Set<CustomEventListener>();\n private transportEventListeners = new Set<TransportEventListener>();\n private transportUnsubscribe?: () => void;\n private disposed = false;\n private config: RemoteClientConfig;\n private connectingPromise?: Promise<void>;\n private runnerId?: string;\n\n /**\n * Get the Engine instance for execution operations.\n * Engine provides unified interface for local/remote execution.\n */\n public get engine(): RemoteEngine {\n if (!this._engine) {\n throw new Error(\"Engine not available: call connect() first\");\n }\n return this._engine;\n }\n\n /**\n * Get the GraphLifecycleApi instance for non-execution operations.\n * GraphLifecycleApi handles graph lifecycle, snapshots, registry, environment, etc.\n */\n public get api(): GraphLifecycleApi {\n if (!this._api) {\n throw new Error(\"GraphLifecycleApi not available: call connect() first\");\n }\n return this._api;\n }\n\n constructor(\n config: RemoteClientConfig,\n options?: { onCustomEvent?: CustomEventListener; runnerId?: string }\n ) {\n this.config = config;\n this.runnerId = options?.runnerId;\n if (options?.onCustomEvent) {\n this.customEventListeners.add(options.onCustomEvent);\n }\n // Engine will be created after transport is connected\n }\n\n /**\n * Create transport instance based on config.\n * Extracted to a separate method for better testability and clarity.\n */\n private async createTransport(): Promise<Transport> {\n const kind = this.config.kind;\n if (kind === \"remote-http\") {\n if (!HttpPollingTransport) {\n throw new Error(\"HttpPollingTransport not available\");\n }\n return new HttpPollingTransport(this.config.baseUrl);\n } else if (kind === \"remote-ws\") {\n if (!WebSocketTransport) {\n throw new Error(\"WebSocketTransport not available\");\n }\n return new WebSocketTransport(this.config.url, {\n onConnectionLost: () => {\n this.dispose().catch((err) => {\n console.warn(\n \"[RemoteRuntimeClient] Error disposing on connection loss:\",\n err\n );\n });\n },\n connector: this.config.connectOptions?.connector,\n });\n } else if (kind === \"remote-unix\") {\n // Dynamic import to avoid bundling in browser builds\n return new UnixSocketTransport(this.config.socketPath);\n } else {\n throw new Error(`Invalid transport kind: ${kind}`);\n }\n }\n\n /**\n * Connect to the remote runtime API.\n * Creates and connects the transport, then initializes the engine.\n * Safe to call multiple times - concurrent calls will wait for the same connection.\n */\n async connect(): Promise<void> {\n if (this.disposed) {\n throw new Error(\"Cannot connect: RemoteRuntimeClient has been disposed\");\n }\n if (this.transport) {\n // Already connected\n return;\n }\n // If already connecting, wait for that connection to complete\n if (this.connectingPromise) {\n return this.connectingPromise;\n }\n\n this.emitTransportStatus({\n state: \"connecting\",\n kind: this.config.kind,\n runnerId: this.runnerId,\n });\n\n // Create connection promise to prevent concurrent connections\n this.connectingPromise = (async () => {\n try {\n const transport = await this.createTransport();\n await transport.connect(this.config.connectOptions);\n this.transport = transport;\n\n // Subscribe to all transport events\n this.transportUnsubscribe = transport.subscribe((event) => {\n this.handleTransportEvent(event);\n });\n\n // Create engine and api with connected transport\n this._engine = new RemoteEngine(transport);\n this._api = new RemoteGraphLifecycleApi(transport);\n\n this.emitTransportStatus({\n state: \"connected\",\n kind: this.config.kind,\n runnerId: this.runnerId,\n });\n } catch (error) {\n // Clear connecting promise on error so retry is possible\n this.connectingPromise = undefined;\n this.emitTransportStatus({\n state: \"disconnected\",\n kind: this.config.kind,\n runnerId: this.runnerId,\n });\n throw error;\n } finally {\n // Clear connecting promise on success\n this.connectingPromise = undefined;\n }\n })();\n\n return this.connectingPromise;\n }\n\n /**\n * Handle events from transport.\n * Routes standard runtime events to engine, custom events to custom handlers.\n */\n private handleTransportEvent(event: Envelope<any>): void {\n const msg = event.message;\n if (!msg || typeof msg !== \"object\" || !(\"type\" in msg)) return;\n\n const type = msg.type;\n // Standard runtime events: stats, value, error, invalidate\n // These are handled by RemoteEngine via transport subscription\n // Custom events are anything else\n if (![\"stats\", \"value\", \"error\", \"invalidate\"].includes(type)) {\n // Emit to custom event listeners (constructor callback is auto-subscribed)\n for (const listener of this.customEventListeners) {\n listener(event);\n }\n }\n }\n\n /**\n * Subscribe to transport status changes.\n * Returns an unsubscribe function.\n */\n onTransportStatus(listener: TransportEventListener): () => void {\n this.transportEventListeners.add(listener);\n // Immediately emit current status if connected\n if (this.transport) {\n listener({\n state: \"connected\",\n kind: this.config.kind,\n runnerId: this.runnerId,\n });\n }\n return () => {\n this.transportEventListeners.delete(listener);\n };\n }\n\n private emitTransportStatus(status: RemoteTransportStatus): void {\n for (const listener of this.transportEventListeners) {\n listener(status);\n }\n }\n\n /**\n * Dispose the client and close the transport connection.\n * Idempotent: safe to call multiple times.\n */\n async dispose(): Promise<void> {\n if (this.disposed) return;\n this.disposed = true;\n\n // Clear connecting promise if any\n this.connectingPromise = undefined;\n\n // Unsubscribe from transport events\n if (this.transportUnsubscribe) {\n this.transportUnsubscribe();\n this.transportUnsubscribe = undefined;\n }\n\n // Close transport connection\n if (this.transport) {\n const transportToClose = this.transport;\n this.transport = undefined;\n this._engine = undefined; // Clear engine reference\n this._api = undefined; // Clear api reference\n await transportToClose.close().catch((err) => {\n console.warn(\"[RemoteRuntimeClient] Error closing transport:\", err);\n });\n }\n\n // Clear listeners\n this.customEventListeners.clear();\n this.transportEventListeners.clear();\n\n this.emitTransportStatus({\n state: \"disconnected\",\n kind: this.config.kind,\n runnerId: this.runnerId,\n });\n }\n}\n","import type {\n Envelope,\n Command,\n Json,\n SystemError,\n LogHandler,\n} from \"@bian-womp/spark-protocol\";\nimport type { ServerRuntimeAdapter } from \"./ServerRuntimeAdapter\";\nimport { summarize, serializeError } from \"./errors\";\nimport { decodeInputsFromTransport } from \"../utils/inputEncoding\";\n\n/**\n * Middleware function that can preprocess commands before they reach the handler.\n * Call `next()` to continue to the next middleware or handler.\n */\nexport type CommandMiddleware = (\n env: Envelope<Command>,\n next: () => Promise<void>\n) => Promise<void>;\n\n/**\n * Error handler callback for command processing errors.\n */\nexport type ErrorHandler = (\n errorEnv: Envelope<{ type: \"error\"; payload: SystemError }>\n) => void;\n\nexport class ServerCommandHandler {\n private middlewares: CommandMiddleware[] = [];\n\n constructor(\n private adapter: ServerRuntimeAdapter,\n private options?: {\n errorHandler?: ErrorHandler;\n logHandler?: LogHandler;\n }\n ) {}\n\n /**\n * Register middleware to preprocess commands before handling.\n * Middlewares are executed in registration order.\n */\n use(middleware: CommandMiddleware): void {\n this.middlewares.push(middleware);\n }\n\n /**\n * Handle command with error handling and middleware support.\n */\n async handleCommand(\n env: Envelope<Command>,\n ack: (payload?: Json) => void\n ): Promise<void> {\n try {\n // Execute middlewares in sequence, then process command\n await this.executeMiddlewares(env, async () => {\n await this.processCommand(env, ack);\n });\n } catch (err: unknown) {\n this.handleError(env, err);\n }\n }\n\n /**\n * Execute middlewares in sequence, then call the final handler.\n */\n private async executeMiddlewares(\n env: Envelope<Command>,\n finalHandler: () => Promise<void>\n ): Promise<void> {\n let index = 0;\n const next = async (): Promise<void> => {\n if (index >= this.middlewares.length) {\n await finalHandler();\n return;\n }\n const middleware = this.middlewares[index++];\n await middleware(env, next);\n };\n await next();\n }\n\n /**\n * Process the command by routing to the appropriate handler.\n */\n private async processCommand(\n env: Envelope<Command>,\n ack: (payload?: Json) => void\n ): Promise<void> {\n const msg = env.message as Command;\n switch (msg.type) {\n case \"Build\": {\n this.logCommand(\"Build\", env, {\n nodes: msg.payload.def.nodes?.length ?? 0,\n edges: msg.payload.def.edges?.length ?? 0,\n envKeys: Object.keys(msg.payload.environment ?? {}).join(\",\"),\n });\n await this.adapter.build(\n msg.payload.def,\n msg.payload.environment as Json\n );\n ack();\n break;\n }\n case \"Update\": {\n const dry = msg.dry;\n this.logCommand(\"Update\", env, {\n nodes: msg.payload.def.nodes?.length ?? 0,\n edges: msg.payload.def.edges?.length ?? 0,\n dry: !!dry,\n });\n await this.adapter.update(msg.payload.def, { dry });\n ack();\n break;\n }\n case \"SetEnvironment\": {\n const dry = msg.dry;\n this.logCommand(\"SetEnvironment\", env, dry ? { dry: true } : undefined);\n await this.adapter.setEnvironment(msg.payload.environment, {\n merge: Boolean(msg.payload.merge),\n dry,\n });\n ack();\n break;\n }\n case \"SetInputs\": {\n const dry = msg.dry;\n this.logCommand(\"SetInputs\", env, {\n nodeId: msg.payload.nodeId,\n keys: Object.keys(msg.payload.inputs || {}).join(\",\"),\n dry: !!dry,\n });\n const nodeId = msg.payload.nodeId;\n const inputs = decodeInputsFromTransport(msg.payload.inputs);\n await this.adapter.setInputs(nodeId, inputs, { dry });\n ack();\n break;\n }\n case \"CopyOutputs\": {\n const dry = msg.dry;\n this.logCommand(\"CopyOutputs\", env, {\n fromNodeId: msg.payload.fromNodeId,\n toNodeId: msg.payload.toNodeId,\n dry: !!dry,\n });\n await this.adapter.copyOutputs(\n msg.payload.fromNodeId,\n msg.payload.toNodeId,\n { dry }\n );\n ack();\n break;\n }\n case \"TriggerExternal\": {\n const dry = msg.dry;\n this.logCommand(\"TriggerExternal\", env, {\n nodeId: msg.payload.nodeId,\n event: summarize(msg.payload.event),\n dry: !!dry,\n });\n await this.adapter.triggerExternal(\n msg.payload.nodeId,\n msg.payload.event,\n { dry }\n );\n ack();\n break;\n }\n // SetViewport is handled by middleware before reaching here\n // It's not a standard Command type, so we handle it in middleware\n case \"Launch\": {\n const launchPayload = msg.payload;\n this.logCommand(\"Launch\", env, {\n runMode: launchPayload.runMode,\n invalidate: launchPayload.invalidate,\n });\n await this.adapter.launch(launchPayload);\n ack();\n break;\n }\n case \"SetRunMode\": {\n const setRunModePayload = msg.payload;\n this.logCommand(\"SetRunMode\", env, setRunModePayload);\n await this.adapter.setRunMode(setRunModePayload.runMode);\n ack();\n break;\n }\n case \"ComputeNode\": {\n const computeNodePayload = msg.payload;\n this.logCommand(\"ComputeNode\", env, computeNodePayload);\n await this.adapter.computeNode(\n computeNodePayload.nodeId,\n computeNodePayload\n );\n ack();\n break;\n }\n case \"RunFromHere\": {\n this.logCommand(\"RunFromHere\", env, {\n nodeId: msg.payload.nodeId,\n });\n await this.adapter.runFromHere(msg.payload.nodeId);\n ack();\n break;\n }\n case \"CancelNodeRuns\": {\n const cancelPayload = msg.payload as { nodeIds: string[] };\n this.logCommand(\"CancelNodeRuns\", env, cancelPayload);\n await this.adapter.cancelNodeRuns(cancelPayload.nodeIds);\n ack();\n break;\n }\n case \"WhenIdle\": {\n this.logCommand(\"WhenIdle\", env);\n await this.adapter.whenIdle();\n ack();\n break;\n }\n case \"Snapshot\": {\n this.logCommand(\"Snapshot\", env);\n const snap = await this.adapter.snapshot();\n ack({ snapshot: snap });\n break;\n }\n case \"SnapshotFull\": {\n this.logCommand(\"SnapshotFull\", env);\n const snap = await this.adapter.snapshotFull();\n ack({ snapshot: snap });\n break;\n }\n case \"GetEnvironment\": {\n this.logCommand(\"GetEnvironment\", env);\n const environment = await this.adapter.getEnvironment();\n ack({ environment });\n break;\n }\n case \"ApplySnapshotFull\": {\n const skipBuild = msg.skipBuild;\n this.logCommand(\n \"ApplySnapshotFull\",\n env,\n skipBuild ? { skipBuild: true } : undefined\n );\n await this.adapter.applySnapshotFull(msg.payload, { skipBuild });\n ack();\n break;\n }\n case \"ConvertSnapshot\": {\n const converterConfig = msg.payload.converterConfig;\n const dry = msg.dry;\n this.logCommand(\"ConvertSnapshot\", env, { dry });\n const converted = await this.adapter.convertSnapshot(\n converterConfig as any,\n { dry }\n );\n ack({ snapshot: converted });\n break;\n }\n case \"Coerce\": {\n this.logCommand(\"Coerce\", env, {\n from: msg.payload.from,\n to: msg.payload.to,\n });\n const value = await this.adapter.coerce(\n msg.payload.from,\n msg.payload.to,\n msg.payload.value\n );\n ack({ value });\n break;\n }\n case \"DescribeRegistry\": {\n this.logCommand(\"DescribeRegistry\", env);\n const desc = await this.adapter.describeRegistry();\n ack({ registry: desc });\n break;\n }\n case \"RegistryApply\": {\n this.logCommand(\"RegistryApply\", env);\n await this.adapter.applyRegistry(msg.payload.deltas || []);\n ack();\n break;\n }\n case \"SetExtData\": {\n await this.adapter.setExtData(msg.payload);\n ack();\n break;\n }\n case \"UpdateExtData\": {\n const hasCustomUpdate = await this.adapter.updateExtData(msg.payload);\n ack({ hasCustomUpdate });\n break;\n }\n case \"Dispose\": {\n this.logCommand(\"Dispose\", env);\n await this.adapter.dispose();\n ack();\n break;\n }\n case \"Commit\": {\n this.logCommand(\"Commit\", env);\n const history = await this.adapter.commit(msg.payload.reason);\n ack(history ? { history } : undefined);\n break;\n }\n case \"Undo\": {\n this.logCommand(\"Undo\", env);\n const success = await this.adapter.undo();\n ack({ success });\n break;\n }\n case \"Redo\": {\n this.logCommand(\"Redo\", env);\n const success = await this.adapter.redo();\n ack({ success });\n break;\n }\n case \"Pause\": {\n this.logCommand(\"Pause\", env);\n await this.adapter.pause();\n ack();\n break;\n }\n case \"Resume\": {\n this.logCommand(\"Resume\", env);\n await this.adapter.resume();\n ack();\n break;\n }\n default: {\n this.logCommand(\"Unknown type\", env);\n ack();\n }\n }\n }\n\n /**\n * Helper method to log commands with consistent format.\n */\n private logCommand(\n type: string,\n env: Envelope<Command>,\n extra?: Record<string, unknown>\n ): void {\n const extraStr = extra\n ? ` ${Object.entries(extra)\n .map(([k, v]) => `${k}=${v}`)\n .join(\" \")}`\n : \"\";\n const message = `rx ${type} seq=${env.seq}${extraStr}`;\n\n if (this.options?.logHandler) {\n this.options.logHandler(\"debug\", message, {\n seq: env.seq,\n ...extra,\n });\n } else {\n // Fallback to console.debug for backward compatibility\n console.debug(message);\n }\n }\n\n /**\n * Handle errors and notify error handler if provided.\n * Formats errors as SystemError since these are infrastructure/command processing errors,\n * not node execution errors.\n */\n private handleError(env: Envelope<Command>, err: unknown): void {\n const errorMessage = `error handling command(${env.message.type}): ${String(\n err\n )}`;\n\n if (this.options?.logHandler) {\n this.options.logHandler(\"error\", errorMessage, {\n seq: env.seq,\n err,\n });\n } else {\n // Fallback to console.error for backward compatibility\n console.error(`${errorMessage}:`, err);\n }\n\n const serialized = serializeError(err);\n const systemError: SystemError = {\n kind: \"system\",\n message: serialized?.message || String(err) || \"Unknown error\",\n code: serialized?.code || serialized?.statusCode || 500,\n err: serialized,\n };\n const errorEnv: Envelope<{ type: \"error\"; payload: SystemError }> = {\n seq: env.seq ?? Date.now(),\n ts: Date.now(),\n message: { type: \"error\", payload: systemError },\n };\n if (this.options?.errorHandler) {\n this.options.errorHandler(errorEnv);\n }\n }\n}\n"],"names":["WebSocket","GraphBuilder","parseJsonPath","setValueAtPathWithCreation","buildValueConverter","convertSnapshot","LocalEngine"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/transport/Seq.ts","../../src/transport/WebSocketTransport.ts","../../src/transport/HttpPollingTransport.ts","../../src/server/errors.ts","../../src/server/ServerRuntimeAdapter.ts","../../src/utils/inputEncoding.ts","../../src/RemoteEngine.ts","../../src/RemoteGraphLifecycleApi.ts","../../src/transport/UnixSocketTransport.ts","../../src/RemoteRuntimeClient.ts","../../src/server/ServerCommandHandler.ts"],"sourcesContent":["export class SeqGenerator {\n private lastMs = 0;\n private seqInMs = 0;\n\n next(): number {\n const now = Date.now();\n if (now === this.lastMs) {\n this.seqInMs = (this.seqInMs + 1) % 1000;\n } else {\n this.lastMs = now;\n this.seqInMs = 0;\n }\n return now * 1000 + this.seqInMs;\n }\n}\n","import { WebSocket } from \"ws\";\nimport type { Envelope } from \"@bian-womp/spark-protocol\";\nimport type { Transport, TransportConnectOptions } from \"./Transport\";\nimport type { WebSocketConnector } from \"./WebSocketConnector\";\nimport { SeqGenerator } from \"./Seq\";\n\n/**\n * WebSocket transport connection options.\n * Allows extensions to pass domain-specific parameters (e.g., flowId).\n */\nexport interface WebSocketTransportConnectOptions extends TransportConnectOptions {\n /**\n * Optional WebSocket connector for WebSocketTransport.\n * If provided, WebSocketTransport will use this connector instead of\n * creating WebSocket connections directly. This allows external systems\n * to handle authentication, token refresh, and retry logic.\n */\n connector?: WebSocketConnector;\n}\n\nconst CONNECTING = 0;\nconst OPEN = 1;\nconst CLOSING = 2;\nconst CLOSED = 3;\n\nexport class WebSocketTransport implements Transport {\n private ws?: WebSocket; // Can be browser WebSocket or Node.js WebSocket\n private listeners = new Set<(event: Envelope<any>) => void>();\n private baseUrl: string;\n private seq = new SeqGenerator();\n\n private pingInterval?: NodeJS.Timeout;\n private pongTimeout?: NodeJS.Timeout;\n private isAlive = false;\n private readonly PING_INTERVAL_MS = 30000;\n private readonly PONG_TIMEOUT_MS = 10000;\n private onConnectionLost?: () => void;\n private pongHandler?: () => void;\n private connector?: WebSocketConnector;\n\n constructor(\n url: string,\n options?: {\n onConnectionLost?: () => void;\n connector?: WebSocketConnector;\n },\n ) {\n this.baseUrl = url;\n this.onConnectionLost = options?.onConnectionLost;\n this.connector = options?.connector;\n }\n\n async connect(options?: WebSocketTransportConnectOptions): Promise<void> {\n if (this.ws && this.ws.readyState === OPEN) return;\n\n // Use connector if provided (e.g., from runSocket), otherwise use direct connection\n const connector = options?.connector || this.connector;\n\n if (connector) {\n await this.connectWithConnector(connector, options);\n } else {\n await this.connectDirect(options);\n }\n }\n\n private async connectWithConnector(\n connector: WebSocketConnector,\n options?: WebSocketTransportConnectOptions,\n ): Promise<void> {\n // Build base URL\n let url: URL;\n if (this.baseUrl.startsWith(\"ws://\") || this.baseUrl.startsWith(\"wss://\")) {\n url = new URL(this.baseUrl);\n } else {\n const wsBaseUrl = this.baseUrl.replace(/^http/, \"ws\");\n url = new URL(wsBaseUrl);\n }\n\n // Convert params to the format expected by WebSocketConnector\n const params: Record<string, string | number | boolean | null | undefined> = {};\n if (options?.params) {\n for (const [key, value] of Object.entries(options.params)) {\n if (value !== undefined && value !== null) {\n params[key] = value;\n }\n }\n }\n\n // Use connector to establish connection\n // The connector handles auth, token refresh, and retries\n const connectedWs = await connector(\n {\n url: url.toString(),\n params,\n noAuth: false,\n },\n {\n onopen: () => {\n // Heartbeat will be started after connection is established\n this.startHeartbeat();\n },\n onmessage: (ev) => {\n // Forward messages to listeners\n try {\n const env = JSON.parse(String(ev.data)) as Envelope<any>;\n for (const l of Array.from(this.listeners)) l(env);\n } catch {}\n },\n onerror: () => {\n // Errors are handled by the connector (retry logic, etc.)\n },\n onclose: () => {\n // Stop heartbeat on close\n this.stopHeartbeat();\n },\n },\n );\n\n if (!connectedWs) {\n throw new Error(\"Connector did not return a WebSocket instance\");\n }\n\n this.ws = connectedWs as WebSocket;\n\n // Ensure heartbeat is started (in case onopen wasn't called)\n if (this.ws && this.ws.readyState === OPEN) {\n this.startHeartbeat();\n }\n }\n\n private async connectDirect(options?: TransportConnectOptions): Promise<void> {\n // Original direct connection logic (fallback when no connector provided)\n let url: URL;\n if (this.baseUrl.startsWith(\"ws://\") || this.baseUrl.startsWith(\"wss://\")) {\n url = new URL(this.baseUrl);\n } else {\n const wsBaseUrl = this.baseUrl.replace(/^http/, \"ws\");\n url = new URL(wsBaseUrl);\n }\n\n if (options?.params) {\n for (const [key, value] of Object.entries(options.params)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const wsUrl = url.toString();\n this.ws = window ? new (window as any).WebSocket(wsUrl) : new WebSocket(wsUrl);\n await new Promise<void>((resolve, reject) => {\n if (!this.ws) return reject(new Error(\"ws init failed\"));\n\n this.ws.onopen = () => {\n this.startHeartbeat();\n resolve();\n };\n\n this.ws.onerror = (e) => reject(e);\n\n this.ws.onmessage = (ev) => {\n try {\n const env = JSON.parse(String(ev.data)) as Envelope<any>;\n for (const l of Array.from(this.listeners)) l(env);\n } catch {}\n };\n\n this.ws.onclose = () => {\n this.stopHeartbeat();\n };\n });\n }\n\n private startHeartbeat(): void {\n this.stopHeartbeat();\n this.isAlive = true;\n\n if (typeof window !== \"undefined\" || !this.ws) return;\n\n this.pongHandler = () => {\n this.isAlive = true;\n if (this.pongTimeout) {\n clearTimeout(this.pongTimeout);\n this.pongTimeout = undefined;\n }\n };\n this.ws.on(\"pong\", this.pongHandler);\n\n this.pingInterval = setInterval(() => {\n if (!this.ws || this.ws.readyState !== OPEN) {\n this.stopHeartbeat();\n return;\n }\n\n if (!this.isAlive) {\n this.onConnectionLost?.();\n this.stopHeartbeat();\n this.ws.terminate();\n return;\n }\n\n this.isAlive = false;\n\n try {\n (this.ws as any).ping();\n } catch (err) {\n console.warn(\"[WebSocketTransport] Failed to send ping:\", err);\n this.onConnectionLost?.();\n this.stopHeartbeat();\n return;\n }\n\n this.pongTimeout = setTimeout(() => {\n if (!this.isAlive) {\n this.onConnectionLost?.();\n this.stopHeartbeat();\n if (this.ws) {\n this.ws.terminate();\n }\n }\n }, this.PONG_TIMEOUT_MS);\n }, this.PING_INTERVAL_MS);\n }\n\n private stopHeartbeat(): void {\n if (this.pingInterval) {\n clearInterval(this.pingInterval);\n this.pingInterval = undefined;\n }\n if (this.pongTimeout) {\n clearTimeout(this.pongTimeout);\n this.pongTimeout = undefined;\n }\n if (this.ws && this.pongHandler) {\n this.ws.off(\"pong\", this.pongHandler);\n this.pongHandler = undefined;\n }\n this.isAlive = false;\n }\n\n async request<TReq = unknown, TRes = unknown>(msg: Envelope<TReq>): Promise<Envelope<TRes>> {\n const seq = this.seq.next();\n const env = { ...msg, seq };\n const p = new Promise<Envelope<TRes>>((resolve) => {\n const off = this.subscribe((incoming) => {\n if (incoming.seq === seq) {\n off();\n resolve(incoming);\n }\n });\n });\n this.send(env);\n return p;\n }\n\n send<TReq = unknown>(msg: Envelope<TReq>): void {\n if (!this.ws || this.ws.readyState !== OPEN) return;\n this.ws.send(JSON.stringify(msg));\n }\n\n subscribe(cb: (event: Envelope<any>) => void): () => void {\n this.listeners.add(cb);\n return () => this.listeners.delete(cb);\n }\n\n async close(): Promise<void> {\n this.stopHeartbeat();\n if (!this.ws) return;\n const ws = this.ws;\n this.ws = undefined;\n await new Promise<void>((resolve) => {\n ws.onclose = () => resolve();\n try {\n ws.close();\n } catch {\n resolve();\n }\n });\n }\n}\n","import type { Envelope } from \"@bian-womp/spark-protocol\";\nimport type { Transport, TransportConnectOptions, TransportConnectParams } from \"./Transport\";\n\nexport class HttpPollingTransport implements Transport {\n private baseUrl: string;\n private listeners = new Set<(event: Envelope<any>) => void>();\n private polling?: NodeJS.Timeout;\n private cursor?: string;\n private connectParams?: TransportConnectParams;\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.replace(/\\/$/, \"\");\n }\n\n async connect(options?: TransportConnectOptions): Promise<void> {\n // Store connection params for use in requests\n this.connectParams = options?.params;\n\n // Start polling loop\n if (this.polling) return;\n const tick = async () => {\n try {\n const url = new URL(this.baseUrl + \"/events\");\n if (this.cursor) url.searchParams.set(\"cursor\", this.cursor);\n // Add connection params to all requests\n if (this.connectParams) {\n for (const [key, value] of Object.entries(this.connectParams)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n const res = await fetch(url.toString());\n if (!res.ok) return;\n const batch = (await res.json()) as Envelope<any>[];\n for (const env of batch) {\n this.cursor = String(env.seq ?? Date.now());\n for (const l of Array.from(this.listeners)) l(env);\n }\n } catch {}\n };\n this.polling = setInterval(tick, 200);\n }\n\n async request<TReq = unknown, TRes = unknown>(msg: Envelope<TReq>): Promise<Envelope<TRes>> {\n const url = new URL(this.baseUrl + \"/command\");\n // Add connection params to command requests\n if (this.connectParams) {\n for (const [key, value] of Object.entries(this.connectParams)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n const res = await fetch(url.toString(), {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(msg),\n });\n const data = (await res.json()) as Envelope<TRes>;\n return data;\n }\n\n send<TReq = unknown>(msg: Envelope<TReq>): void {\n const url = new URL(this.baseUrl + \"/command\");\n // Add connection params to send requests\n if (this.connectParams) {\n for (const [key, value] of Object.entries(this.connectParams)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n fetch(url.toString(), {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(msg),\n });\n }\n\n subscribe(cb: (event: Envelope<any>) => void): () => void {\n this.listeners.add(cb);\n return () => this.listeners.delete(cb);\n }\n\n async close(): Promise<void> {\n if (this.polling) clearInterval(this.polling);\n this.polling = undefined;\n }\n}\n","export function summarize(value: unknown, maxLen = 120): string {\n try {\n const s = typeof value === \"string\" ? value : JSON.stringify(value);\n return s.length > maxLen ? s.slice(0, maxLen) + \"…\" : s;\n } catch {\n return String(value);\n }\n}\n\nexport function serializeError(err: unknown): any {\n try {\n if (!err) return { message: String(err) };\n const errAny = err as any;\n if (err instanceof Error) {\n const base: any = {\n name: err.name,\n message: err.message,\n stack: err.stack,\n };\n for (const k of Object.keys(errAny)) base[k] = errAny[k];\n return base;\n }\n if (typeof err === \"object\") {\n const maybeMsg = errAny?.message;\n const maybeName = errAny?.name;\n const maybeStack = errAny?.stack;\n const out = { ...errAny };\n if (maybeMsg && !out.message) out.message = String(maybeMsg);\n if (maybeName && !out.name) out.name = String(maybeName);\n if (maybeStack && !out.stack) out.stack = String(maybeStack);\n return out;\n }\n return { message: String(err) };\n } catch {\n return { message: String(err) };\n }\n}\n","import type {\n Envelope,\n RuntimeEvent,\n RegistryDescriptor,\n RuntimeSnapshot,\n RuntimeSnapshotFull,\n RuntimeMetadata,\n RuntimeHistoryInfo,\n ConverterConfig,\n} from \"@bian-womp/spark-protocol\";\nimport {\n GraphBuilder,\n Registry,\n GraphRuntime,\n LocalEngine,\n parseJsonPath,\n setValueAtPathWithCreation,\n type GraphLifecycleApi,\n type Engine,\n type EngineEventName,\n type EngineEventListener,\n buildValueConverter,\n convertSnapshot,\n} from \"@bian-womp/spark-graph\";\n\n/**\n * ServerRuntimeAdapter extends GraphLifecycleApi and Engine to provide a unified interface\n * for both lifecycle and execution operations on the server side.\n *\n * Note: All Engine methods (including setInputs, copyOutputs, triggerExternal) already include\n * the `dry` option, so no overrides are needed. Some methods are sync in implementation but\n * match async signatures via wrappers.\n */\nexport interface ServerRuntimeAdapter extends GraphLifecycleApi, Omit<Engine, \"launch\"> {\n // All methods from Engine already include dry option, no overrides needed\n orignalDispose?: () => void;\n}\n\nexport interface ServerRuntimeAdapterContext {\n registry: Registry;\n builder: GraphBuilder;\n graphRuntime: GraphRuntime | undefined;\n engine: LocalEngine | undefined;\n extData: { runtime?: RuntimeMetadata } & Record<string, unknown>;\n}\n\nexport type ServerRuntimeAdapterExtension = {\n [K in Exclude<keyof ServerRuntimeAdapter, \"originalAdapter\">]?: ServerRuntimeAdapter[K] extends (\n ...args: any[]\n ) => any\n ? (\n original: ServerRuntimeAdapter[K],\n context: ServerRuntimeAdapterContext,\n ...args: Parameters<ServerRuntimeAdapter[K]>\n ) => ReturnType<ServerRuntimeAdapter[K]>\n : never;\n};\n\nexport async function createServerRuntimeAdapter(\n id: string | undefined,\n createRegistry: (id?: string) => Promise<Registry>,\n send: (e: Envelope<RuntimeEvent>) => void,\n extensions?: ServerRuntimeAdapterExtension,\n): Promise<ServerRuntimeAdapter> {\n const registry = await createRegistry(id);\n const builder = new GraphBuilder(registry);\n let graphRuntime: GraphRuntime | undefined;\n let engine: LocalEngine | undefined;\n let extData: { runtime?: RuntimeMetadata } & Record<string, unknown> = {};\n\n type CustomNodeData = Record<string, Record<string, unknown>>;\n\n const isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n const getCustomNodeDataFromExtData = (data: Record<string, unknown> | undefined): CustomNodeData | undefined => {\n if (!data) return undefined;\n const custom = isRecord(data.custom) ? data.custom : undefined;\n if (!custom) return undefined;\n const nodes = isRecord(custom.nodes) ? custom.nodes : undefined;\n if (!nodes) return undefined;\n const sanitized: CustomNodeData = {};\n for (const [nodeId, nodeData] of Object.entries(nodes)) {\n if (isRecord(nodeData)) sanitized[nodeId] = nodeData;\n }\n return Object.keys(sanitized).length > 0 ? sanitized : undefined;\n };\n\n const areCustomNodeDataEqual = (left: CustomNodeData | undefined, right: CustomNodeData | undefined): boolean => {\n if (!left && !right) return true;\n if (!left || !right) return false;\n return JSON.stringify(left) === JSON.stringify(right);\n };\n\n const syncCustomNodeDataToRuntime = (): void => {\n if (!graphRuntime) return;\n const customNodeData = getCustomNodeDataFromExtData(extData);\n const existingCustomNodeData = graphRuntime.getCustomNodeData();\n const sanitizedExisting = Object.keys(existingCustomNodeData).length ? existingCustomNodeData : undefined;\n if (areCustomNodeDataEqual(sanitizedExisting, customNodeData)) {\n return;\n }\n graphRuntime.setCustomNodeData(customNodeData ?? {});\n };\n\n // Helper to get current context\n const getContext = (): ServerRuntimeAdapterContext => ({\n registry,\n builder,\n graphRuntime,\n engine,\n extData,\n });\n\n // Original implementations - define as separate functions first to allow cross-references\n const originalAdapter: ServerRuntimeAdapter = {\n coerce: async (from, to, value) => {\n const resolved = registry.resolveCoercion(from, to);\n if (!resolved) return value;\n if (resolved.kind === \"sync\") return resolved.convert(value);\n const ac = new AbortController();\n return await resolved.convertAsync(value, ac.signal);\n },\n getEnvironment: async () => {\n if (!graphRuntime) return {};\n return graphRuntime.getEnvironment();\n },\n applyRegistry: async (deltas) => {\n // Pause runtime if exists\n // Apply each delta to the live registry\n for (const d of deltas || []) {\n if (!d || typeof d !== \"object\") continue;\n if (d.kind === \"register-enum\") {\n registry.registerEnum({\n id: d.id,\n displayName: d.displayName,\n options: d.options || [],\n bakeTarget: d.bakeTarget,\n opts: d.opts,\n });\n } else if (d.kind === \"register-type\") {\n registry.registerType({\n id: d.id,\n displayName: d.displayName,\n bakeTarget: d.bakeTarget,\n validate: (_v) => true,\n });\n } else if (d.kind === \"register-node\") {\n const desc = d.desc || {};\n registry.registerNode({\n id: String(desc.id || \"\"),\n categoryId: String(desc.categoryId || \"compute\"),\n displayName: desc.displayName,\n inputs: desc.inputs || {},\n outputs: desc.outputs || {},\n // impl must be empty per frontend registration contract\n impl: () => {},\n });\n }\n }\n // Notify clients (include deltas in invalidate payload)\n send({\n message: {\n type: \"invalidate\",\n payload: { reason: \"registry-changed\", deltas },\n },\n });\n },\n build: async (def, opts) => {\n // If we rebuild the graph, we must not keep the previous runtime/engine alive.\n // This can happen for a single \"flow\" when:\n // - server bootstraps an empty graph (no snapshot) then client sends Build with real def\n // - snapshot load / applySnapshotFull triggers a build\n // - client intentionally rebuilds the graph\n //\n // Without disposing, we can end up with multiple GraphRuntime instances in memory\n // for the same flow/connection, each holding listeners/resources.\n if (engine) {\n console.info(`[ServerRuntimeAdapter:${id}] Disposing previous engine before building new one`);\n engine.dispose();\n engine = undefined;\n }\n if (graphRuntime) {\n console.info(`[ServerRuntimeAdapter:${id}] Disposing previous graph runtime before building new one`);\n graphRuntime.dispose();\n graphRuntime = undefined;\n }\n\n const environment = opts?.environment || {};\n graphRuntime = builder.build(def, {\n environment,\n startPaused: opts?.startPaused,\n });\n syncCustomNodeDataToRuntime();\n graphRuntime.on(\"value\", (p) => send({ message: { type: \"value\", payload: p } }));\n graphRuntime.on(\"invalidate\", (p) => send({ message: { type: \"invalidate\", payload: p } }));\n graphRuntime.on(\"error\", (p) => send({ message: { type: \"error\", payload: p } }));\n graphRuntime.on(\"stats\", (p) => send({ message: { type: \"stats\", payload: p } }));\n },\n setExtData: async (data) => {\n if (!data || typeof data !== \"object\") {\n // Clear all extData when called with non-object (backward-compatible)\n extData = {};\n syncCustomNodeDataToRuntime();\n return;\n }\n // Merge with existing extData so that callers can update a subset of fields\n // (e.g., { ui } or { runtime }) without dropping the other ones.\n extData = { ...extData, ...data };\n syncCustomNodeDataToRuntime();\n },\n updateExtData: async (updates: Array<{ path: string; value: unknown }>) => {\n if (!extData || typeof extData !== \"object\" || Array.isArray(extData)) {\n extData = {};\n }\n let hasCustomUpdate = false;\n for (const { path, value } of updates) {\n const pathSegments = parseJsonPath(path);\n const updated = setValueAtPathWithCreation(extData, pathSegments, value);\n if (updated && pathSegments.length > 0 && pathSegments[0] === \"custom\") {\n hasCustomUpdate = true;\n }\n }\n if (hasCustomUpdate) {\n syncCustomNodeDataToRuntime();\n }\n return hasCustomUpdate;\n },\n snapshot: async (): Promise<RuntimeSnapshot> => {\n const inputs: RuntimeSnapshot[\"inputs\"] = {};\n const outputs: RuntimeSnapshot[\"outputs\"] = {};\n if (!graphRuntime) return { inputs, outputs };\n const nodes = graphRuntime.getNodeIds();\n for (const nodeId of nodes) {\n const data = graphRuntime.getNodeData(nodeId);\n if (data?.inputs && Object.keys(data.inputs).length > 0) {\n inputs[nodeId] = { ...data.inputs };\n }\n if (data?.outputs && Object.keys(data.outputs).length > 0) {\n outputs[nodeId] = { ...data.outputs };\n }\n }\n return { inputs, outputs };\n },\n snapshotFull: async (): Promise<RuntimeSnapshotFull> => {\n if (!graphRuntime) return { inputs: {}, outputs: {} };\n const snap = await originalAdapter.snapshot();\n const environment = graphRuntime.getEnvironment();\n const def = graphRuntime.getGraphDef();\n return { ...snap, def, environment, extData };\n },\n applySnapshotFull: async (payload, options) => {\n const def = payload.def;\n if (!def) return;\n\n // Only build if skipBuild is not true\n if (!options?.skipBuild) {\n await originalAdapter.build(def, { environment: payload.environment });\n } else if (!graphRuntime) {\n // If skipping build but no runtime exists, we still need to build\n console.info(\"Skipping build is set but no runtime exists, building anyway\");\n await originalAdapter.build(def, { environment: payload.environment });\n }\n\n // Hydrate inputs/outputs exactly, then re-emit outputs without scheduling runs\n if (!graphRuntime) return;\n\n graphRuntime.hydrate({\n inputs: payload.inputs,\n outputs: payload.outputs,\n });\n await originalAdapter.setExtData(payload.extData || {});\n },\n convertSnapshot: async (converterConfig: ConverterConfig, options?: { dry?: boolean }) => {\n const snapshot = await originalAdapter.snapshotFull();\n const converter = buildValueConverter(converterConfig);\n const converted = convertSnapshot(snapshot, converter);\n await originalAdapter.applySnapshotFull(converted, {\n skipBuild: true,\n });\n return converted;\n },\n pause: async () => {\n if (!graphRuntime) return;\n graphRuntime.pause();\n },\n resume: async () => {\n if (!graphRuntime) return;\n graphRuntime.resume();\n },\n cancelNodeRuns: (nodeIds: string[]) => {\n if (!graphRuntime) return;\n graphRuntime.cancelNodeRuns(nodeIds);\n },\n commit: async (reason?: string): Promise<RuntimeHistoryInfo | undefined> => {\n return undefined;\n },\n undo: async () => false,\n redo: async () => false,\n describeRegistry: async (): Promise<RegistryDescriptor> => {\n // types (include enum options when available)\n const types = Array.from(registry.types.entries()).map(([id, d]) => {\n const en = registry.enums.get(id);\n return {\n id,\n displayName: d.displayName,\n bakeTarget: d.bakeTarget,\n ...(en ? { options: en.options } : {}),\n };\n });\n // categories: not directly enumerable; derive from node descriptors\n const nodeDescs = Array.from(registry.nodes.values());\n const catIds = new Set(nodeDescs.map((n) => n.categoryId));\n const categories = Array.from(catIds).map((id) => {\n const cat = registry.categories.get?.(id);\n return { id, displayName: cat?.displayName };\n });\n const nodes = nodeDescs.map((n) => ({\n id: n.id,\n categoryId: n.categoryId,\n displayName: n.displayName,\n inputs: n.inputs || {},\n outputs: n.outputs || {},\n inputDefaults: n.inputDefaults || {},\n policy: n.policy || {},\n }));\n const coercions = registry.listCoercions();\n return { types, categories, nodes, coercions, schemaVersion: 4 };\n },\n update: async (def, options) => {\n if (!graphRuntime) return;\n // Use requestPause for dry mode to temporarily pause without affecting base run mode\n const releasePause = options?.dry ? graphRuntime.requestPause() : null;\n try {\n graphRuntime.update(def, registry);\n send({\n message: {\n type: \"invalidate\",\n payload: { reason: \"graph-updated\" },\n },\n });\n } finally {\n releasePause?.();\n }\n },\n setEnvironment: async (env, opts) => {\n if (!graphRuntime) return;\n // Use requestPause for dry mode to temporarily pause without affecting base run mode\n const releasePause = opts?.dry ? graphRuntime.requestPause() : null;\n try {\n if (opts?.merge) {\n const current = graphRuntime.getEnvironment();\n const next = { ...(current || {}), ...(env || {}) };\n graphRuntime.setEnvironment(next);\n } else {\n graphRuntime.setEnvironment(env);\n }\n } finally {\n releasePause?.();\n }\n },\n setInputs: (nodeId: string, inputs: Record<string, unknown>, options?: { dry?: boolean }) => {\n if (!engine) return;\n engine.setInputs(nodeId, inputs, options);\n },\n copyOutputs: (fromNodeId: string, toNodeId: string, options?: { dry?: boolean }) => {\n if (!engine) return;\n engine.copyOutputs(fromNodeId, toNodeId, options);\n },\n triggerExternal: (nodeId: string, event: unknown, options?: { dry?: boolean }) => {\n if (!engine) return;\n engine.triggerExternal(nodeId, event, options);\n },\n launch: async (opts) => {\n if (!graphRuntime) {\n throw new Error(\"Cannot launch: graph runtime not built\");\n }\n\n // Dispose existing engine if any\n if (engine) {\n engine.dispose();\n engine = undefined;\n }\n\n // Create new engine using shared factory\n engine = new LocalEngine(graphRuntime, opts?.runMode);\n engine.launch(opts?.invalidate, opts?.runMode, opts?.startPaused);\n },\n setRunMode: (runMode) => {\n if (!engine) return;\n engine.setRunMode(runMode);\n },\n computeNode: async (nodeId: string, options?: { skipPropagateValues?: boolean }) => {\n if (!engine) return;\n await engine.computeNode(nodeId, options);\n },\n runFromHere: async (nodeId: string) => {\n if (!engine) return;\n await engine.runFromHere(nodeId);\n },\n whenIdle: async () => {\n if (!engine) return;\n await engine.whenIdle();\n },\n dispose: () => {\n if (engine) {\n engine.dispose();\n engine = undefined;\n }\n if (graphRuntime) {\n graphRuntime.dispose();\n graphRuntime = undefined;\n }\n },\n // Engine methods\n getOutput: (nodeId: string, output: string) => {\n return engine?.getOutput(nodeId, output);\n },\n on: <K extends EngineEventName>(event: K, handler: EngineEventListener<K>) => {\n if (!engine) return () => {};\n return engine.on(event, handler);\n },\n // GraphLifecycleApi methods\n setViewport: async (viewport) => {\n // Viewport is UI-specific, server doesn't need to handle it\n // But we implement it to satisfy the interface\n },\n };\n\n // Helper to wrap a method with extension support\n const wrapMethod = <K extends keyof ServerRuntimeAdapter>(\n key: K,\n original: ServerRuntimeAdapter[K],\n ): ServerRuntimeAdapter[K] => {\n const extension = extensions?.[key];\n if (!extension) {\n return original;\n }\n // Handle optional methods that might be undefined\n if (!original) {\n return original;\n }\n return ((...args: Parameters<NonNullable<ServerRuntimeAdapter[K]>>) => {\n return extension(original, getContext(), ...args);\n }) as unknown as ServerRuntimeAdapter[K];\n };\n\n // Create API with extensions applied\n const extendedAdapter: ServerRuntimeAdapter = {\n // GraphLifecycleApi methods\n coerce: wrapMethod(\"coerce\", originalAdapter.coerce),\n getEnvironment: wrapMethod(\"getEnvironment\", originalAdapter.getEnvironment),\n applyRegistry: wrapMethod(\"applyRegistry\", originalAdapter.applyRegistry),\n build: wrapMethod(\"build\", originalAdapter.build),\n setExtData: wrapMethod(\"setExtData\", originalAdapter.setExtData),\n updateExtData: wrapMethod(\"updateExtData\", originalAdapter.updateExtData),\n snapshot: wrapMethod(\"snapshot\", originalAdapter.snapshot),\n snapshotFull: wrapMethod(\"snapshotFull\", originalAdapter.snapshotFull),\n applySnapshotFull: wrapMethod(\"applySnapshotFull\", originalAdapter.applySnapshotFull),\n convertSnapshot: wrapMethod(\"convertSnapshot\", originalAdapter.convertSnapshot),\n describeRegistry: wrapMethod(\"describeRegistry\", originalAdapter.describeRegistry),\n update: wrapMethod(\"update\", originalAdapter.update),\n setEnvironment: wrapMethod(\"setEnvironment\", originalAdapter.setEnvironment),\n setViewport: wrapMethod(\"setViewport\", originalAdapter.setViewport),\n commit: wrapMethod(\"commit\", originalAdapter.commit),\n undo: wrapMethod(\"undo\", originalAdapter.undo),\n redo: wrapMethod(\"redo\", originalAdapter.redo),\n pause: wrapMethod(\"pause\", originalAdapter.pause),\n resume: wrapMethod(\"resume\", originalAdapter.resume),\n launch: wrapMethod(\"launch\", originalAdapter.launch),\n // Engine methods\n setInputs: wrapMethod(\"setInputs\", originalAdapter.setInputs),\n copyOutputs: wrapMethod(\"copyOutputs\", originalAdapter.copyOutputs),\n triggerExternal: wrapMethod(\"triggerExternal\", originalAdapter.triggerExternal),\n computeNode: wrapMethod(\"computeNode\", originalAdapter.computeNode),\n runFromHere: wrapMethod(\"runFromHere\", originalAdapter.runFromHere),\n setRunMode: wrapMethod(\"setRunMode\", originalAdapter.setRunMode),\n whenIdle: wrapMethod(\"whenIdle\", originalAdapter.whenIdle),\n dispose: wrapMethod(\"dispose\", originalAdapter.dispose),\n cancelNodeRuns: wrapMethod(\"cancelNodeRuns\", originalAdapter.cancelNodeRuns),\n getOutput: wrapMethod(\"getOutput\", originalAdapter.getOutput),\n on: wrapMethod(\"on\", originalAdapter.on),\n orignalDispose: originalAdapter.dispose,\n };\n\n return extendedAdapter;\n}\n","export const UNSET_MARKER = { __spark_unset: true } as const;\n\nexport function isUnsetMarker(value: unknown): value is typeof UNSET_MARKER {\n return (\n typeof value === \"object\" && value !== null && \"__spark_unset\" in value && (value as any).__spark_unset === true\n );\n}\n\nexport function encodeInputsForTransport(inputs: Record<string, unknown>): Record<string, unknown> {\n const encoded: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(inputs)) {\n encoded[key] = value === undefined ? UNSET_MARKER : value;\n }\n return encoded;\n}\n\nexport function decodeInputsFromTransport(inputs: Record<string, unknown>): Record<string, unknown> {\n const decoded: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(inputs)) {\n decoded[key] = isUnsetMarker(value) ? undefined : value;\n }\n return decoded;\n}\n","import type { Envelope, RunMode, RuntimeEvent } from \"@bian-womp/spark-protocol\";\nimport type { Engine, EngineEventListener, EngineEventName, EngineEventMap } from \"@bian-womp/spark-graph\";\nimport type { Transport } from \"./transport/Transport\";\nimport { encodeInputsForTransport } from \"./utils/inputEncoding\";\n\nexport class RemoteEngine implements Engine {\n private listeners = new Map<EngineEventName, Set<EngineEventListener<EngineEventName>>>();\n private cache = new Map<string, { value: unknown; runtimeTypeId?: string }>();\n\n constructor(private transport: Transport) {\n this.transport.subscribe((env) => this.onEnvelope(env));\n }\n\n /**\n * Generate cache key that includes io type to prevent collisions\n * between input and output handles with the same name\n */\n private getCacheKey(nodeId: string, handle: string, io: \"input\" | \"output\"): string {\n return `${nodeId}.${io}.${handle}`;\n }\n\n private onEnvelope(env: Envelope<RuntimeEvent>): void {\n const msg = env.message;\n if (!msg) return;\n if (msg.type === \"value\") {\n const key = this.getCacheKey(msg.payload.nodeId, msg.payload.handle, msg.payload.io);\n this.cache.set(key, {\n value: msg.payload.value,\n runtimeTypeId: msg.payload.runtimeTypeId,\n });\n this.emit(\"value\", msg.payload);\n } else if (msg.type === \"error\") {\n this.emit(\"error\", msg.payload);\n } else if (msg.type === \"invalidate\") {\n this.emit(\"invalidate\", msg.payload);\n } else if (msg.type === \"stats\") {\n this.emit(\"stats\", msg.payload);\n }\n }\n\n launch(): void {\n throw new Error(\"RemoteEngine.launch() is not supported. Use GraphLifecycleApi.launch() instead.\");\n }\n\n setRunMode(runMode: RunMode): void {\n this.transport.send({\n message: {\n type: \"SetRunMode\",\n payload: { runMode },\n },\n });\n }\n\n async setInputs(nodeId: string, inputs: Record<string, unknown>, options?: { dry?: boolean }): Promise<void> {\n const encodedInputs = encodeInputsForTransport(inputs);\n await this.transport.request({\n message: {\n type: \"SetInputs\",\n payload: { nodeId, inputs: encodedInputs },\n dry: options?.dry,\n },\n });\n }\n\n async triggerExternal(nodeId: string, event: unknown, options?: { dry?: boolean }): Promise<void> {\n await this.transport.request({\n message: {\n type: \"TriggerExternal\",\n payload: { nodeId, event },\n dry: options?.dry,\n },\n });\n }\n\n async copyOutputs(fromNodeId: string, toNodeId: string, options?: { dry?: boolean }): Promise<void> {\n await this.transport.request({\n message: {\n type: \"CopyOutputs\",\n payload: { fromNodeId, toNodeId },\n dry: options?.dry,\n },\n });\n }\n\n on<K extends EngineEventName>(event: K, handler: EngineEventListener<K>): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event)! as Set<EngineEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n private emit<K extends EngineEventName>(event: K, payload: EngineEventMap[K]): void {\n const set = this.listeners.get(event);\n if (set) for (const h of Array.from(set)) h(payload);\n }\n\n getOutput(nodeId: string, output: string): unknown {\n return this.cache.get(this.getCacheKey(nodeId, output, \"output\"))?.value;\n }\n\n async whenIdle(): Promise<void> {\n await this.transport.request({ message: { type: \"WhenIdle\" } });\n }\n\n async computeNode(nodeId: string, options?: { skipPropagateValues?: boolean }): Promise<void> {\n await this.transport.request({\n message: { type: \"ComputeNode\", payload: { nodeId, ...options } },\n });\n }\n\n async runFromHere(nodeId: string): Promise<void> {\n await this.transport.request({\n message: { type: \"RunFromHere\", payload: { nodeId } },\n });\n }\n\n async cancelNodeRuns(nodeIds: string[]): Promise<void> {\n await this.transport.request({\n message: { type: \"CancelNodeRuns\", payload: { nodeIds } },\n });\n }\n\n dispose(): void {\n this.transport.send({ message: { type: \"Dispose\" } });\n }\n}\n","import type {\n GraphDefinition,\n RegistryDescriptor,\n RegistryDelta,\n RuntimeSnapshot,\n RuntimeSnapshotFull,\n RunnerOptions,\n RuntimeHistoryInfo,\n Viewport,\n ConverterConfig,\n} from \"@bian-womp/spark-protocol\";\nimport type { GraphLifecycleApi } from \"@bian-womp/spark-graph\";\nimport type { Transport } from \"./transport/Transport\";\n\n/**\n * RemoteGraphLifecycleApi implements GraphLifecycleApi by sending commands over transport.\n * This handles all non-execution operations (graph lifecycle, snapshots, registry, etc.)\n */\nexport class RemoteGraphLifecycleApi implements GraphLifecycleApi {\n constructor(private transport: Transport) {}\n\n private async ensureConnected(): Promise<Transport> {\n if (!this.transport) {\n throw new Error(\"Transport not connected\");\n }\n return this.transport;\n }\n\n async build(def: GraphDefinition, opts?: { environment?: Record<string, unknown> }): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: {\n type: \"Build\",\n payload: { def, environment: opts?.environment },\n },\n });\n }\n\n async update(def: GraphDefinition, options?: { dry?: boolean }): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: { type: \"Update\", payload: { def }, dry: options?.dry },\n });\n }\n\n async launch(opts?: RunnerOptions): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: {\n type: \"Launch\",\n payload: opts,\n },\n });\n }\n\n async snapshot(): Promise<RuntimeSnapshot> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"Snapshot\" },\n });\n const payload = (res?.message as { snapshot: RuntimeSnapshot }) || {};\n return payload.snapshot || { inputs: {}, outputs: {} };\n }\n\n async snapshotFull(): Promise<RuntimeSnapshotFull> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"SnapshotFull\" },\n });\n const payload = (res?.message as { snapshot: RuntimeSnapshotFull }) || {};\n return (\n payload.snapshot || {\n def: undefined,\n environment: {},\n inputs: {},\n outputs: {},\n }\n );\n }\n\n async applySnapshotFull(payload: RuntimeSnapshotFull, options?: { skipBuild?: boolean }): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: {\n type: \"ApplySnapshotFull\",\n payload,\n skipBuild: options?.skipBuild,\n },\n });\n }\n\n async convertSnapshot(converterConfig: ConverterConfig, options?: { dry?: boolean }): Promise<RuntimeSnapshotFull> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: {\n type: \"ConvertSnapshot\",\n payload: { converterConfig },\n dry: options?.dry,\n },\n });\n const payload = (res?.message as { snapshot: RuntimeSnapshotFull }) || {};\n return (\n payload.snapshot || {\n def: undefined,\n environment: {},\n inputs: {},\n outputs: {},\n }\n );\n }\n\n async describeRegistry(): Promise<RegistryDescriptor> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"DescribeRegistry\" },\n });\n const payload = (res?.message as { registry: RegistryDescriptor }) || {};\n return (\n payload.registry || {\n types: [],\n categories: [],\n nodes: [],\n coercions: [],\n schemaVersion: 4,\n }\n );\n }\n\n async applyRegistry(deltas: Array<RegistryDelta>): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: { type: \"RegistryApply\", payload: { deltas } },\n });\n }\n\n async setEnvironment(environment: Record<string, unknown>, opts?: { merge?: boolean; dry?: boolean }): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: {\n type: \"SetEnvironment\",\n payload: { environment, merge: opts?.merge },\n dry: opts?.dry,\n },\n });\n }\n\n async getEnvironment(): Promise<Record<string, unknown>> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"GetEnvironment\" },\n });\n const payload = (res?.message as { environment?: Record<string, unknown> }) || {};\n return payload.environment || {};\n }\n\n async coerce(from: string, to: string, value: unknown): Promise<unknown> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"Coerce\", payload: { from, to, value } },\n });\n const payload = (res?.message as { ok?: boolean; value?: unknown }) || {};\n return payload.value;\n }\n\n async setExtData(data: Record<string, unknown>): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: { type: \"SetExtData\", payload: data },\n });\n }\n\n async updateExtData(updates: Array<{ path: string; value: unknown }>): Promise<boolean> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"UpdateExtData\", payload: updates },\n });\n const payload = (res?.message as { hasCustomUpdate?: boolean }) || {};\n return payload.hasCustomUpdate ?? false;\n }\n\n async setViewport(viewport: Viewport): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.send({\n message: { type: \"SetViewport\", payload: { viewport } },\n });\n }\n\n async commit(reason?: string): Promise<RuntimeHistoryInfo | undefined> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"Commit\", payload: { reason } },\n });\n const payload = (res?.message as { history?: RuntimeHistoryInfo }) || {};\n return payload.history;\n }\n\n async undo(): Promise<boolean> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"Undo\" },\n });\n const payload = (res?.message as { success?: boolean }) || {};\n return payload.success ?? false;\n }\n\n async redo(): Promise<boolean> {\n const transport = await this.ensureConnected();\n const res = await transport.request({\n message: { type: \"Redo\" },\n });\n const payload = (res?.message as { success?: boolean }) || {};\n return payload.success ?? false;\n }\n\n async pause(): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: { type: \"Pause\" },\n });\n }\n\n async resume(): Promise<void> {\n const transport = await this.ensureConnected();\n await transport.request({\n message: { type: \"Resume\" },\n });\n }\n}\n","// Node-only transport using a UNIX domain socket.\n// Import directly from path: \"@bian-womp/spark-remote/transport/UnixSocketTransport\" in Node/Electron code.\n// Do not re-export from the browser index to avoid bundling in web builds.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Envelope } from \"@bian-womp/spark-protocol\";\nimport type { Transport } from \"./Transport\";\nimport { SeqGenerator } from \"./Seq\";\n\n// Use node:net for ESM compatibility in Node 18+\n// We avoid type imports here to keep this file isolated from browser builds.\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport type { Socket } from \"node:net\";\n\nexport class UnixSocketTransport implements Transport {\n private socket?: Socket;\n private listeners = new Set<(event: Envelope<any>) => void>();\n private buffer = \"\";\n private waiters = new Map<number, (env: Envelope<any>) => void>();\n private seq = new SeqGenerator();\n\n constructor(private socketPath: string) {}\n\n async connect(): Promise<void> {\n if (typeof process === \"undefined\") {\n throw new Error(\"UnixSocketTransport requires a Node environment\");\n }\n if (this.socket) return;\n const { createConnection } = await import(\"node:net\");\n const sock = createConnection(this.socketPath);\n this.socket = sock;\n await new Promise<void>((resolve, reject) => {\n sock.once(\"connect\", () => resolve());\n sock.once(\"error\", (e) => reject(e));\n });\n sock.on(\"data\", (chunk: Buffer) => this.onData(chunk));\n sock.on(\"error\", () => {\n /* noop, surface via request waiters if needed */\n });\n }\n\n private onData(chunk: Buffer): void {\n this.buffer += chunk.toString(\"utf8\");\n let idx = this.buffer.indexOf(\"\\n\");\n while (idx >= 0) {\n const raw = this.buffer.slice(0, idx);\n this.buffer = this.buffer.slice(idx + 1);\n idx = this.buffer.indexOf(\"\\n\");\n if (!raw.trim()) continue;\n try {\n const env = JSON.parse(raw) as Envelope<any>;\n if (env && typeof env.seq === \"number\" && this.waiters.has(env.seq)) {\n const fn = this.waiters.get(env.seq)!;\n this.waiters.delete(env.seq);\n fn(env);\n } else {\n for (const l of Array.from(this.listeners)) l(env);\n }\n } catch {\n // ignore malformed frames\n }\n }\n }\n\n async request<TReq = unknown, TRes = unknown>(msg: Envelope<TReq>): Promise<Envelope<TRes>> {\n const seq = typeof msg.seq === \"number\" ? msg.seq : this.seq.next();\n const env = { ...msg, seq };\n const p = new Promise<Envelope<TRes>>((resolve) => {\n this.waiters.set(seq, (incoming) => resolve(incoming));\n });\n this.send(env);\n return p;\n }\n\n send<TReq = unknown>(msg: Envelope<TReq>): void {\n const s = this.socket;\n if (!s) return;\n try {\n s.write(JSON.stringify(msg) + \"\\n\");\n } catch {\n // ignore\n }\n }\n\n subscribe(cb: (event: Envelope<any>) => void): () => void {\n this.listeners.add(cb);\n return () => this.listeners.delete(cb);\n }\n\n async close(): Promise<void> {\n const s = this.socket;\n this.socket = undefined;\n if (!s) return;\n await new Promise<void>((resolve) => {\n try {\n s.end(() => resolve());\n } catch {\n resolve();\n }\n });\n }\n}\n","import type { Envelope } from \"@bian-womp/spark-protocol\";\nimport type { GraphLifecycleApi } from \"@bian-womp/spark-graph\";\nimport { RemoteEngine } from \"./RemoteEngine\";\nimport { RemoteGraphLifecycleApi } from \"./RemoteGraphLifecycleApi\";\nimport type { Transport, TransportConnectOptions } from \"./transport/Transport\";\nimport { HttpPollingTransport } from \"./transport/HttpPollingTransport\";\nimport { WebSocketTransport, WebSocketTransportConnectOptions } from \"./transport/WebSocketTransport\";\nimport { UnixSocketTransport } from \"./transport/UnixSocketTransport\";\n\nexport type RemoteClientConfig =\n | {\n kind: \"remote-http\";\n baseUrl: string;\n connectOptions?: TransportConnectOptions;\n }\n | {\n kind: \"remote-ws\";\n url: string;\n connectOptions?: WebSocketTransportConnectOptions;\n }\n | {\n kind: \"remote-unix\";\n socketPath: string;\n connectOptions?: TransportConnectOptions;\n };\n\nexport type RemoteTransportStatus = {\n state: \"connecting\" | \"connected\" | \"disconnected\";\n kind: \"remote-http\" | \"remote-ws\" | \"remote-unix\";\n runnerId?: string;\n};\n\nexport type TransportEventListener = (status: RemoteTransportStatus) => void;\nexport type CustomEventListener = (event: Envelope<any>) => void;\n\n/**\n * RemoteRuntimeClient manages the connection to a remote runtime.\n * It provides access to:\n * - engine: RemoteEngine for execution operations\n * - api: GraphLifecycleApi for graph lifecycle operations\n */\nexport class RemoteRuntimeClient {\n private _engine?: RemoteEngine;\n private _api?: RemoteGraphLifecycleApi;\n private transport?: Transport;\n private customEventListeners = new Set<CustomEventListener>();\n private transportEventListeners = new Set<TransportEventListener>();\n private transportUnsubscribe?: () => void;\n private disposed = false;\n private config: RemoteClientConfig;\n private connectingPromise?: Promise<void>;\n private runnerId?: string;\n\n /**\n * Get the Engine instance for execution operations.\n * Engine provides unified interface for local/remote execution.\n */\n public get engine(): RemoteEngine {\n if (!this._engine) {\n throw new Error(\"Engine not available: call connect() first\");\n }\n return this._engine;\n }\n\n /**\n * Get the GraphLifecycleApi instance for non-execution operations.\n * GraphLifecycleApi handles graph lifecycle, snapshots, registry, environment, etc.\n */\n public get api(): GraphLifecycleApi {\n if (!this._api) {\n throw new Error(\"GraphLifecycleApi not available: call connect() first\");\n }\n return this._api;\n }\n\n constructor(config: RemoteClientConfig, options?: { onCustomEvent?: CustomEventListener; runnerId?: string }) {\n this.config = config;\n this.runnerId = options?.runnerId;\n if (options?.onCustomEvent) {\n this.customEventListeners.add(options.onCustomEvent);\n }\n // Engine will be created after transport is connected\n }\n\n /**\n * Create transport instance based on config.\n * Extracted to a separate method for better testability and clarity.\n */\n private async createTransport(): Promise<Transport> {\n const kind = this.config.kind;\n if (kind === \"remote-http\") {\n if (!HttpPollingTransport) {\n throw new Error(\"HttpPollingTransport not available\");\n }\n return new HttpPollingTransport(this.config.baseUrl);\n } else if (kind === \"remote-ws\") {\n if (!WebSocketTransport) {\n throw new Error(\"WebSocketTransport not available\");\n }\n return new WebSocketTransport(this.config.url, {\n onConnectionLost: () => {\n this.dispose().catch((err) => {\n console.warn(\"[RemoteRuntimeClient] Error disposing on connection loss:\", err);\n });\n },\n connector: this.config.connectOptions?.connector,\n });\n } else if (kind === \"remote-unix\") {\n // Dynamic import to avoid bundling in browser builds\n return new UnixSocketTransport(this.config.socketPath);\n } else {\n throw new Error(`Invalid transport kind: ${kind}`);\n }\n }\n\n /**\n * Connect to the remote runtime API.\n * Creates and connects the transport, then initializes the engine.\n * Safe to call multiple times - concurrent calls will wait for the same connection.\n */\n async connect(): Promise<void> {\n if (this.disposed) {\n throw new Error(\"Cannot connect: RemoteRuntimeClient has been disposed\");\n }\n if (this.transport) {\n // Already connected\n return;\n }\n // If already connecting, wait for that connection to complete\n if (this.connectingPromise) {\n return this.connectingPromise;\n }\n\n this.emitTransportStatus({\n state: \"connecting\",\n kind: this.config.kind,\n runnerId: this.runnerId,\n });\n\n // Create connection promise to prevent concurrent connections\n this.connectingPromise = (async () => {\n try {\n const transport = await this.createTransport();\n await transport.connect(this.config.connectOptions);\n this.transport = transport;\n\n // Subscribe to all transport events\n this.transportUnsubscribe = transport.subscribe((event) => {\n this.handleTransportEvent(event);\n });\n\n // Create engine and api with connected transport\n this._engine = new RemoteEngine(transport);\n this._api = new RemoteGraphLifecycleApi(transport);\n\n this.emitTransportStatus({\n state: \"connected\",\n kind: this.config.kind,\n runnerId: this.runnerId,\n });\n } catch (error) {\n // Clear connecting promise on error so retry is possible\n this.connectingPromise = undefined;\n this.emitTransportStatus({\n state: \"disconnected\",\n kind: this.config.kind,\n runnerId: this.runnerId,\n });\n throw error;\n } finally {\n // Clear connecting promise on success\n this.connectingPromise = undefined;\n }\n })();\n\n return this.connectingPromise;\n }\n\n /**\n * Handle events from transport.\n * Routes standard runtime events to engine, custom events to custom handlers.\n */\n private handleTransportEvent(event: Envelope<any>): void {\n const msg = event.message;\n if (!msg || typeof msg !== \"object\" || !(\"type\" in msg)) return;\n\n const type = msg.type;\n // Standard runtime events: stats, value, error, invalidate\n // These are handled by RemoteEngine via transport subscription\n // Custom events are anything else\n if (![\"stats\", \"value\", \"error\", \"invalidate\"].includes(type)) {\n // Emit to custom event listeners (constructor callback is auto-subscribed)\n for (const listener of this.customEventListeners) {\n listener(event);\n }\n }\n }\n\n /**\n * Subscribe to transport status changes.\n * Returns an unsubscribe function.\n */\n onTransportStatus(listener: TransportEventListener): () => void {\n this.transportEventListeners.add(listener);\n // Immediately emit current status if connected\n if (this.transport) {\n listener({\n state: \"connected\",\n kind: this.config.kind,\n runnerId: this.runnerId,\n });\n }\n return () => {\n this.transportEventListeners.delete(listener);\n };\n }\n\n private emitTransportStatus(status: RemoteTransportStatus): void {\n for (const listener of this.transportEventListeners) {\n listener(status);\n }\n }\n\n /**\n * Dispose the client and close the transport connection.\n * Idempotent: safe to call multiple times.\n */\n async dispose(): Promise<void> {\n if (this.disposed) return;\n this.disposed = true;\n\n // Clear connecting promise if any\n this.connectingPromise = undefined;\n\n // Unsubscribe from transport events\n if (this.transportUnsubscribe) {\n this.transportUnsubscribe();\n this.transportUnsubscribe = undefined;\n }\n\n // Close transport connection\n if (this.transport) {\n const transportToClose = this.transport;\n this.transport = undefined;\n this._engine = undefined; // Clear engine reference\n this._api = undefined; // Clear api reference\n await transportToClose.close().catch((err) => {\n console.warn(\"[RemoteRuntimeClient] Error closing transport:\", err);\n });\n }\n\n // Clear listeners\n this.customEventListeners.clear();\n this.transportEventListeners.clear();\n\n this.emitTransportStatus({\n state: \"disconnected\",\n kind: this.config.kind,\n runnerId: this.runnerId,\n });\n }\n}\n","import type { Envelope, Command, Json, SystemError, LogHandler } from \"@bian-womp/spark-protocol\";\nimport type { ServerRuntimeAdapter } from \"./ServerRuntimeAdapter\";\nimport { summarize, serializeError } from \"./errors\";\nimport { decodeInputsFromTransport } from \"../utils/inputEncoding\";\n\n/**\n * Middleware function that can preprocess commands before they reach the handler.\n * Call `next()` to continue to the next middleware or handler.\n */\nexport type CommandMiddleware = (env: Envelope<Command>, next: () => Promise<void>) => Promise<void>;\n\n/**\n * Error handler callback for command processing errors.\n */\nexport type ErrorHandler = (errorEnv: Envelope<{ type: \"error\"; payload: SystemError }>) => void;\n\nexport class ServerCommandHandler {\n private middlewares: CommandMiddleware[] = [];\n\n constructor(\n private adapter: ServerRuntimeAdapter,\n private options?: {\n errorHandler?: ErrorHandler;\n logHandler?: LogHandler;\n },\n ) {}\n\n /**\n * Register middleware to preprocess commands before handling.\n * Middlewares are executed in registration order.\n */\n use(middleware: CommandMiddleware): void {\n this.middlewares.push(middleware);\n }\n\n /**\n * Handle command with error handling and middleware support.\n */\n async handleCommand(env: Envelope<Command>, ack: (payload?: Json) => void): Promise<void> {\n try {\n // Execute middlewares in sequence, then process command\n await this.executeMiddlewares(env, async () => {\n await this.processCommand(env, ack);\n });\n } catch (err: unknown) {\n this.handleError(env, err);\n }\n }\n\n /**\n * Execute middlewares in sequence, then call the final handler.\n */\n private async executeMiddlewares(env: Envelope<Command>, finalHandler: () => Promise<void>): Promise<void> {\n let index = 0;\n const next = async (): Promise<void> => {\n if (index >= this.middlewares.length) {\n await finalHandler();\n return;\n }\n const middleware = this.middlewares[index++];\n await middleware(env, next);\n };\n await next();\n }\n\n /**\n * Process the command by routing to the appropriate handler.\n */\n private async processCommand(env: Envelope<Command>, ack: (payload?: Json) => void): Promise<void> {\n const msg = env.message as Command;\n switch (msg.type) {\n case \"Build\": {\n this.logCommand(\"Build\", env, {\n nodes: msg.payload.def.nodes?.length ?? 0,\n edges: msg.payload.def.edges?.length ?? 0,\n envKeys: Object.keys(msg.payload.environment ?? {}).join(\",\"),\n });\n await this.adapter.build(msg.payload.def, msg.payload.environment as Json);\n ack();\n break;\n }\n case \"Update\": {\n const dry = msg.dry;\n this.logCommand(\"Update\", env, {\n nodes: msg.payload.def.nodes?.length ?? 0,\n edges: msg.payload.def.edges?.length ?? 0,\n dry: !!dry,\n });\n await this.adapter.update(msg.payload.def, { dry });\n ack();\n break;\n }\n case \"SetEnvironment\": {\n const dry = msg.dry;\n this.logCommand(\"SetEnvironment\", env, dry ? { dry: true } : undefined);\n await this.adapter.setEnvironment(msg.payload.environment, {\n merge: Boolean(msg.payload.merge),\n dry,\n });\n ack();\n break;\n }\n case \"SetInputs\": {\n const dry = msg.dry;\n this.logCommand(\"SetInputs\", env, {\n nodeId: msg.payload.nodeId,\n keys: Object.keys(msg.payload.inputs || {}).join(\",\"),\n dry: !!dry,\n });\n const nodeId = msg.payload.nodeId;\n const inputs = decodeInputsFromTransport(msg.payload.inputs);\n await this.adapter.setInputs(nodeId, inputs, { dry });\n ack();\n break;\n }\n case \"CopyOutputs\": {\n const dry = msg.dry;\n this.logCommand(\"CopyOutputs\", env, {\n fromNodeId: msg.payload.fromNodeId,\n toNodeId: msg.payload.toNodeId,\n dry: !!dry,\n });\n await this.adapter.copyOutputs(msg.payload.fromNodeId, msg.payload.toNodeId, { dry });\n ack();\n break;\n }\n case \"TriggerExternal\": {\n const dry = msg.dry;\n this.logCommand(\"TriggerExternal\", env, {\n nodeId: msg.payload.nodeId,\n event: summarize(msg.payload.event),\n dry: !!dry,\n });\n await this.adapter.triggerExternal(msg.payload.nodeId, msg.payload.event, { dry });\n ack();\n break;\n }\n // SetViewport is handled by middleware before reaching here\n // It's not a standard Command type, so we handle it in middleware\n case \"Launch\": {\n const launchPayload = msg.payload;\n this.logCommand(\"Launch\", env, {\n runMode: launchPayload.runMode,\n invalidate: launchPayload.invalidate,\n });\n await this.adapter.launch(launchPayload);\n ack();\n break;\n }\n case \"SetRunMode\": {\n const setRunModePayload = msg.payload;\n this.logCommand(\"SetRunMode\", env, setRunModePayload);\n await this.adapter.setRunMode(setRunModePayload.runMode);\n ack();\n break;\n }\n case \"ComputeNode\": {\n const computeNodePayload = msg.payload;\n this.logCommand(\"ComputeNode\", env, computeNodePayload);\n await this.adapter.computeNode(computeNodePayload.nodeId, computeNodePayload);\n ack();\n break;\n }\n case \"RunFromHere\": {\n this.logCommand(\"RunFromHere\", env, {\n nodeId: msg.payload.nodeId,\n });\n await this.adapter.runFromHere(msg.payload.nodeId);\n ack();\n break;\n }\n case \"CancelNodeRuns\": {\n const cancelPayload = msg.payload as { nodeIds: string[] };\n this.logCommand(\"CancelNodeRuns\", env, cancelPayload);\n await this.adapter.cancelNodeRuns(cancelPayload.nodeIds);\n ack();\n break;\n }\n case \"WhenIdle\": {\n this.logCommand(\"WhenIdle\", env);\n await this.adapter.whenIdle();\n ack();\n break;\n }\n case \"Snapshot\": {\n this.logCommand(\"Snapshot\", env);\n const snap = await this.adapter.snapshot();\n ack({ snapshot: snap });\n break;\n }\n case \"SnapshotFull\": {\n this.logCommand(\"SnapshotFull\", env);\n const snap = await this.adapter.snapshotFull();\n ack({ snapshot: snap });\n break;\n }\n case \"GetEnvironment\": {\n this.logCommand(\"GetEnvironment\", env);\n const environment = await this.adapter.getEnvironment();\n ack({ environment });\n break;\n }\n case \"ApplySnapshotFull\": {\n const skipBuild = msg.skipBuild;\n this.logCommand(\"ApplySnapshotFull\", env, skipBuild ? { skipBuild: true } : undefined);\n await this.adapter.applySnapshotFull(msg.payload, { skipBuild });\n ack();\n break;\n }\n case \"ConvertSnapshot\": {\n const converterConfig = msg.payload.converterConfig;\n const dry = msg.dry;\n this.logCommand(\"ConvertSnapshot\", env, { dry });\n const converted = await this.adapter.convertSnapshot(converterConfig as any, { dry });\n ack({ snapshot: converted });\n break;\n }\n case \"Coerce\": {\n this.logCommand(\"Coerce\", env, {\n from: msg.payload.from,\n to: msg.payload.to,\n });\n const value = await this.adapter.coerce(msg.payload.from, msg.payload.to, msg.payload.value);\n ack({ value });\n break;\n }\n case \"DescribeRegistry\": {\n this.logCommand(\"DescribeRegistry\", env);\n const desc = await this.adapter.describeRegistry();\n ack({ registry: desc });\n break;\n }\n case \"RegistryApply\": {\n this.logCommand(\"RegistryApply\", env);\n await this.adapter.applyRegistry(msg.payload.deltas || []);\n ack();\n break;\n }\n case \"SetExtData\": {\n await this.adapter.setExtData(msg.payload);\n ack();\n break;\n }\n case \"UpdateExtData\": {\n const hasCustomUpdate = await this.adapter.updateExtData(msg.payload);\n ack({ hasCustomUpdate });\n break;\n }\n case \"Dispose\": {\n this.logCommand(\"Dispose\", env);\n await this.adapter.dispose();\n ack();\n break;\n }\n case \"Commit\": {\n this.logCommand(\"Commit\", env);\n const history = await this.adapter.commit(msg.payload.reason);\n ack(history ? { history } : undefined);\n break;\n }\n case \"Undo\": {\n this.logCommand(\"Undo\", env);\n const success = await this.adapter.undo();\n ack({ success });\n break;\n }\n case \"Redo\": {\n this.logCommand(\"Redo\", env);\n const success = await this.adapter.redo();\n ack({ success });\n break;\n }\n case \"Pause\": {\n this.logCommand(\"Pause\", env);\n await this.adapter.pause();\n ack();\n break;\n }\n case \"Resume\": {\n this.logCommand(\"Resume\", env);\n await this.adapter.resume();\n ack();\n break;\n }\n default: {\n this.logCommand(\"Unknown type\", env);\n ack();\n }\n }\n }\n\n /**\n * Helper method to log commands with consistent format.\n */\n private logCommand(type: string, env: Envelope<Command>, extra?: Record<string, unknown>): void {\n const extraStr = extra\n ? ` ${Object.entries(extra)\n .map(([k, v]) => `${k}=${v}`)\n .join(\" \")}`\n : \"\";\n const message = `rx ${type} seq=${env.seq}${extraStr}`;\n\n if (this.options?.logHandler) {\n this.options.logHandler(\"debug\", message, {\n seq: env.seq,\n ...extra,\n });\n } else {\n // Fallback to console.debug for backward compatibility\n console.debug(message);\n }\n }\n\n /**\n * Handle errors and notify error handler if provided.\n * Formats errors as SystemError since these are infrastructure/command processing errors,\n * not node execution errors.\n */\n private handleError(env: Envelope<Command>, err: unknown): void {\n const errorMessage = `error handling command(${env.message.type}): ${String(err)}`;\n\n if (this.options?.logHandler) {\n this.options.logHandler(\"error\", errorMessage, {\n seq: env.seq,\n err,\n });\n } else {\n // Fallback to console.error for backward compatibility\n console.error(`${errorMessage}:`, err);\n }\n\n const serialized = serializeError(err);\n const systemError: SystemError = {\n kind: \"system\",\n message: serialized?.message || String(err) || \"Unknown error\",\n code: serialized?.code || serialized?.statusCode || 500,\n err: serialized,\n };\n const errorEnv: Envelope<{ type: \"error\"; payload: SystemError }> = {\n seq: env.seq ?? Date.now(),\n ts: Date.now(),\n message: { type: \"error\", payload: systemError },\n };\n if (this.options?.errorHandler) {\n this.options.errorHandler(errorEnv);\n }\n }\n}\n"],"names":["WebSocket","GraphBuilder","parseJsonPath","setValueAtPathWithCreation","buildValueConverter","convertSnapshot","LocalEngine"],"mappings":"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"}
|