@bian-womp/spark-remote 0.2.37 → 0.2.39
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/UnixSocketTransport-Bghy9EOO.js +103 -0
- package/lib/cjs/UnixSocketTransport-Bghy9EOO.js.map +1 -0
- package/lib/cjs/index-BKs-fgHN.js +1047 -0
- package/lib/cjs/index-BKs-fgHN.js.map +1 -0
- package/lib/cjs/index.cjs +11 -750
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/RemoteEngine.d.ts.map +1 -1
- package/lib/cjs/src/RuntimeApiClient.d.ts +89 -0
- package/lib/cjs/src/RuntimeApiClient.d.ts.map +1 -0
- package/lib/cjs/src/examples/shared.d.ts +2 -2
- package/lib/cjs/src/examples/shared.d.ts.map +1 -1
- package/lib/cjs/src/index.d.ts +2 -2
- package/lib/cjs/src/index.d.ts.map +1 -1
- package/lib/cjs/src/server/RuntimeApiServer.d.ts +49 -0
- package/lib/cjs/src/server/RuntimeApiServer.d.ts.map +1 -0
- package/lib/esm/UnixSocketTransport-CVUsiFcW.js +101 -0
- package/lib/esm/UnixSocketTransport-CVUsiFcW.js.map +1 -0
- package/lib/esm/index-Dnchg7CQ.js +1037 -0
- package/lib/esm/index-Dnchg7CQ.js.map +1 -0
- package/lib/esm/index.js +3 -746
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/RemoteEngine.d.ts.map +1 -1
- package/lib/esm/src/RuntimeApiClient.d.ts +89 -0
- package/lib/esm/src/RuntimeApiClient.d.ts.map +1 -0
- package/lib/esm/src/examples/shared.d.ts +2 -2
- package/lib/esm/src/examples/shared.d.ts.map +1 -1
- package/lib/esm/src/index.d.ts +2 -2
- package/lib/esm/src/index.d.ts.map +1 -1
- package/lib/esm/src/server/RuntimeApiServer.d.ts +49 -0
- package/lib/esm/src/server/RuntimeApiServer.d.ts.map +1 -0
- package/package.json +3 -3
- package/lib/cjs/src/RemoteRunner.d.ts +0 -24
- package/lib/cjs/src/RemoteRunner.d.ts.map +0 -1
- package/lib/cjs/src/server/command.d.ts +0 -4
- package/lib/cjs/src/server/command.d.ts.map +0 -1
- package/lib/esm/src/RemoteRunner.d.ts +0 -24
- package/lib/esm/src/RemoteRunner.d.ts.map +0 -1
- package/lib/esm/src/server/command.d.ts +0 -4
- package/lib/esm/src/server/command.d.ts.map +0 -1
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/RemoteEngine.ts","../../src/RemoteRunner.ts","../../src/server/errors.ts","../../src/server/command.ts","../../src/server/runtime.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 { SeqGenerator } from \"./Seq\";\n\nconst CONNECTING = 0;\nconst OPEN = 1;\nconst CLOSING = 2;\nconst CLOSED = 3;\n\nexport class WebSocketTransport implements Transport {\n private ws?: WebSocket;\n private listeners = new Set<(event: Envelope<any>) => void>();\n private baseUrl: string;\n private seq = new SeqGenerator();\n\n constructor(url: string) {\n this.baseUrl = url;\n }\n\n async connect(options?: TransportConnectOptions): Promise<void> {\n if (this.ws && this.ws.readyState === OPEN) return;\n\n // Build URL with connection params\n // Handle both ws:///wss:// URLs and http:///https:// URLs (convert to ws)\n let url: URL;\n if (this.baseUrl.startsWith(\"ws://\") || this.baseUrl.startsWith(\"wss://\")) {\n url = new URL(this.baseUrl);\n } else {\n // Convert http/https to ws/wss\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 this.ws.onopen = () => resolve();\n this.ws.onerror = (e) => reject(e);\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 }\n\n async request<TReq = unknown, TRes = unknown>(\n msg: Envelope<TReq>\n ): Promise<Envelope<TRes>> {\n // For now, just send and wait for the next message with matching seq (simple demo)\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 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","import type {\n Engine,\n EngineEventListener,\n EngineEventName,\n EngineEventMap,\n} from \"@bian-womp/spark-graph\";\nimport type { Transport } from \"./transport/Transport\";\nimport type { Envelope, RuntimeEvent } from \"@bian-womp/spark-protocol\";\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 private onEnvelope(env: Envelope<RuntimeEvent>): void {\n const msg = env.message;\n if (!msg) return;\n if (msg.type === \"value\") {\n const key = `${msg.payload.nodeId}.${msg.payload.handle}`;\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(invalidate?: boolean): void {\n this.transport.send({\n message: { type: \"Launch\", payload: { invalidate } },\n });\n }\n\n setInput(nodeId: string, handle: string, value: unknown): void {\n this.transport.send({\n message: { type: \"SetInput\", payload: { nodeId, handle, value } },\n });\n }\n\n // Batch inputs for a single network round-trip\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n this.transport.send({\n message: { type: \"SetInputs\", payload: { nodeId, inputs } },\n });\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n this.transport.send({\n message: { type: \"TriggerExternal\", payload: { nodeId, event } },\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(`${nodeId}.${output}`)?.value;\n }\n\n async whenIdle(): Promise<void> {\n await this.transport.request({ message: { type: \"WhenIdle\" } });\n }\n\n dispose(): void {\n this.transport.send({ message: { type: \"Dispose\" } });\n }\n}\n","import type {\n GraphDefinition,\n RegistryDescriptor,\n RuntimeSnapshot,\n RuntimeSnapshotFull,\n} from \"@bian-womp/spark-protocol\";\nimport type { RunnerControl, Engine } from \"@bian-womp/spark-graph\";\nimport { RemoteEngine } from \"./RemoteEngine\";\nimport type { Transport } from \"./transport/Transport\";\n\nexport class RemoteRunner implements RunnerControl {\n private engine: RemoteEngine;\n constructor(private transport: Transport) {\n this.engine = new RemoteEngine(transport);\n }\n\n async build(\n def: GraphDefinition,\n opts?: { environment?: Record<string, unknown> }\n ): Promise<void> {\n await this.transport.request({\n message: {\n type: \"Build\",\n payload: { def, environment: opts?.environment },\n },\n });\n }\n\n async update(def: GraphDefinition): Promise<void> {\n await this.transport.request({\n message: { type: \"Update\", payload: { def } },\n });\n }\n\n async describeRegistry(): Promise<RegistryDescriptor> {\n const res = await this.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<any>): Promise<void> {\n await this.transport.request({\n message: { type: \"RegistryApply\", payload: { deltas } },\n });\n }\n\n async snapshot(): Promise<RuntimeSnapshot> {\n const res = await this.transport.request({ message: { type: \"Snapshot\" } });\n const payload = (res?.message as { snapshot: RuntimeSnapshot }) || {};\n return payload.snapshot || { inputs: {}, outputs: {} };\n }\n\n async snapshotFull(): Promise<RuntimeSnapshotFull> {\n const res = await this.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): Promise<void> {\n await this.transport.request({\n message: { type: \"ApplySnapshotFull\", payload },\n });\n }\n\n async setEnvironment(\n environment: Record<string, unknown>,\n opts?: { merge?: boolean }\n ): Promise<void> {\n await this.transport.request({\n message: {\n type: \"SetEnvironment\",\n payload: { environment, merge: opts?.merge },\n },\n });\n }\n\n async getEnvironment(): Promise<Record<string, unknown>> {\n const res = await this.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 res = await this.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 getEngine(): Engine {\n return this.engine;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport 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 { Envelope, Command, Json } from \"@bian-womp/spark-protocol\";\nimport type { RuntimeApi } from \"./runtime\";\nimport { summarize } from \"./errors\";\n\nexport async function handleCommand(\n label: string,\n env: Envelope<Command>,\n runtimeApi: RuntimeApi,\n ack: (payload?: Json) => void\n): Promise<void> {\n const msg = env.message as Command;\n switch (msg.type) {\n case \"Build\": {\n console.debug(\n `[${label}] rx Build seq=${env.seq} nodes=${\n msg.payload.def.nodes?.length ?? 0\n } edges=${msg.payload.def.edges?.length ?? 0} envKeys=${Object.keys(\n msg.payload.environment ?? {}\n ).join(\",\")}`\n );\n await runtimeApi.build(msg.payload.def, msg.payload.environment as Json);\n ack();\n break;\n }\n case \"Update\": {\n console.debug(\n `[${label}] rx Update seq=${env.seq} nodes=${\n msg.payload.def.nodes?.length ?? 0\n } edges=${msg.payload.def.edges?.length ?? 0}`\n );\n await runtimeApi.update(msg.payload.def);\n ack();\n break;\n }\n case \"SetEnvironment\": {\n console.debug(`[${label}] rx SetEnvironment seq=${env.seq}`);\n runtimeApi.setEnvironment(msg.payload.environment, {\n merge: Boolean(msg.payload.merge),\n });\n ack();\n break;\n }\n case \"SetInput\": {\n console.debug(\n `[${label}] rx SetInput seq=${env.seq} ${msg.payload.nodeId}.${\n msg.payload.handle\n }=${summarize(msg.payload.value)}`\n );\n runtimeApi.setInput(\n msg.payload.nodeId,\n msg.payload.handle,\n msg.payload.value\n );\n ack();\n break;\n }\n case \"SetInputs\": {\n console.debug(\n `[${label}] rx SetInputs seq=${env.seq} ${\n msg.payload.nodeId\n } keys=${Object.keys(msg.payload.inputs || {}).join(\",\")}`\n );\n const nodeId = msg.payload.nodeId;\n const inputs = msg.payload.inputs;\n runtimeApi.setInputs(nodeId, inputs);\n ack();\n break;\n }\n case \"TriggerExternal\": {\n console.debug(\n `[${label}] rx TriggerExternal seq=${env.seq} ${\n msg.payload.nodeId\n } event=${summarize(msg.payload.event)}`\n );\n runtimeApi.triggerExternal(msg.payload.nodeId, msg.payload.event);\n ack();\n break;\n }\n case \"Launch\": {\n console.debug(`[${label}] rx Launch seq=${env.seq}`);\n runtimeApi.launch(msg.payload.invalidate);\n ack();\n break;\n }\n case \"WhenIdle\": {\n console.debug(`[${label}] rx WhenIdle seq=${env.seq}`);\n await runtimeApi.whenIdle();\n ack();\n break;\n }\n case \"Snapshot\": {\n console.debug(`[${label}] rx Snapshot seq=${env.seq}`);\n const snap = runtimeApi.snapshot();\n ack({ snapshot: snap });\n break;\n }\n case \"SnapshotFull\": {\n console.debug(`[${label}] rx SnapshotFull seq=${env.seq}`);\n const snap = runtimeApi.snapshotFull();\n ack({ snapshot: snap });\n break;\n }\n case \"GetEnvironment\": {\n console.debug(`[${label}] rx GetEnvironment seq=${env.seq}`);\n const environment = runtimeApi.getEnvironment();\n ack({ environment });\n break;\n }\n case \"ApplySnapshotFull\": {\n console.debug(`[${label}] rx ApplySnapshotFull seq=${env.seq}`);\n await runtimeApi.applySnapshotFull(msg.payload);\n ack();\n break;\n }\n case \"Coerce\": {\n console.debug(\n `[${label}] rx Coerce seq=${env.seq} ${msg.payload.from} -> ${msg.payload.to}`\n );\n const value = await runtimeApi.coerce(\n msg.payload?.from,\n msg.payload?.to,\n msg.payload?.value\n );\n ack({ value });\n break;\n }\n case \"DescribeRegistry\": {\n console.debug(`[${label}] rx DescribeRegistry seq=${env.seq}`);\n const desc = runtimeApi.describeRegistry();\n ack({ registry: desc });\n break;\n }\n case \"RegistryApply\": {\n console.debug(`[${label}] rx RegistryApply seq=${env.seq}`);\n await runtimeApi.applyRegistry(msg.payload.deltas || []);\n ack();\n break;\n }\n case \"Dispose\": {\n console.debug(`[${label}] rx Dispose seq=${env.seq}`);\n runtimeApi.dispose();\n ack();\n break;\n }\n case \"Pause\":\n case \"Resume\": {\n console.debug(`[${label}] rx ${msg.type} seq=${env.seq} (not-impl)`);\n ack();\n break;\n }\n default: {\n console.debug(`[${label}] rx Unknown type seq=${env.seq}`);\n ack();\n }\n }\n}\n","import { GraphBuilder, Registry, GraphRuntime } from \"@bian-womp/spark-graph\";\nimport type {\n Envelope,\n RuntimeEvent,\n GraphDefinition,\n RegistryDescriptor,\n RegistryDelta,\n RuntimeSnapshot,\n RuntimeSnapshotFull,\n Json,\n} from \"@bian-womp/spark-protocol\";\n\nexport interface RuntimeApi {\n build: (def: GraphDefinition, env?: Json) => Promise<void>;\n update: (def: GraphDefinition) => Promise<void>;\n applyRegistry: (deltas: RegistryDelta[]) => Promise<void>;\n setEnvironment: (env: Json, opts?: { merge?: boolean }) => void;\n getEnvironment: () => Record<string, unknown>;\n setExtData: (data: Record<string, unknown>) => void;\n getExtData: () => Record<string, unknown>;\n setInput: (nodeId: string, handle: string, value: unknown) => void;\n setInputs: (nodeId: string, inputs: Record<string, unknown>) => void;\n triggerExternal: (nodeId: string, event: unknown) => void;\n launch: (invalidate?: boolean) => void;\n whenIdle: () => Promise<void>;\n dispose: () => void;\n describeRegistry: () => RegistryDescriptor;\n snapshot: () => RuntimeSnapshot;\n coerce: (from: string, to: string, value: unknown) => Promise<unknown>;\n snapshotFull: () => RuntimeSnapshotFull;\n applySnapshotFull: (payload: RuntimeSnapshotFull) => Promise<void>;\n}\n\nexport interface RuntimeApiContext {\n registry: Registry;\n builder: GraphBuilder;\n graphRuntime: GraphRuntime | undefined;\n extData: Record<string, unknown>;\n}\n\nexport type RuntimeApiExtension = {\n [K in keyof RuntimeApi]?: (\n original: RuntimeApi[K],\n context: RuntimeApiContext,\n ...args: Parameters<RuntimeApi[K]>\n ) => ReturnType<RuntimeApi[K]>;\n};\n\nexport async function createRuntimeAdapter(\n createRegistry: () => Promise<Registry>,\n send: (e: Envelope<RuntimeEvent>) => void,\n extensions?: RuntimeApiExtension\n): Promise<RuntimeApi> {\n const registry = await createRegistry();\n const builder = new GraphBuilder(registry);\n let graphRuntime: GraphRuntime | undefined;\n let extData: Record<string, unknown> = {};\n\n // Helper to get current context\n const getContext = (): RuntimeApiContext => ({\n registry,\n builder,\n graphRuntime,\n extData,\n });\n\n // Original implementations - define as separate functions first to allow cross-references\n const originalApi: RuntimeApi = {\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: () => {\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 const env = opts || {};\n graphRuntime = builder.build(def, { environment: env });\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: (data) => {\n if (!data || typeof data !== \"object\") {\n extData = {};\n return;\n }\n // Replace to keep semantics deterministic\n extData = { ...data };\n },\n getExtData: () => {\n return extData;\n },\n snapshot: (): 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: () => {\n const snap = originalApi.snapshot();\n const env = graphRuntime?.getEnvironment?.() ?? {};\n const def = graphRuntime?.getGraphDef();\n return {\n def,\n environment: env,\n inputs: snap.inputs,\n outputs: snap.outputs,\n };\n },\n applySnapshotFull: async (payload) => {\n const def = payload.def;\n if (!def) return;\n await originalApi.build(def, payload.environment);\n // Hydrate inputs/outputs exactly, then re-emit outputs without scheduling runs\n graphRuntime?.hydrate({\n inputs: payload.inputs,\n outputs: payload.outputs,\n });\n },\n describeRegistry: () => {\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 }));\n const coercions = registry.listCoercions();\n return { types, categories, nodes, coercions, schemaVersion: 4 };\n },\n update: async (def) => {\n if (!graphRuntime) return;\n graphRuntime.update(def, registry);\n send({\n message: {\n type: \"invalidate\",\n payload: { reason: \"graph-updated\" },\n },\n });\n },\n setEnvironment: (env, opts) => {\n if (!graphRuntime) return;\n if (opts?.merge) {\n const current = graphRuntime.getEnvironment();\n const next = { ...(current || {}), ...(env || {}) };\n graphRuntime.setEnvironment(next);\n return;\n }\n graphRuntime.setEnvironment(env);\n },\n setInput: (nodeId, handle, value) => {\n graphRuntime?.setInput(nodeId, handle, value);\n },\n setInputs: (nodeId, inputs) => {\n graphRuntime?.setInputs(nodeId, inputs);\n },\n triggerExternal: (nodeId, event) => {\n graphRuntime?.triggerExternal(nodeId, event);\n },\n launch: (invalidate) => {\n graphRuntime?.launch(invalidate);\n },\n whenIdle: () => {\n return graphRuntime?.whenIdle?.() ?? Promise.resolve();\n },\n dispose: () => {\n graphRuntime?.dispose?.();\n graphRuntime = undefined;\n },\n };\n\n // Helper to wrap a method with extension support\n const wrapMethod = <K extends keyof RuntimeApi>(\n key: K,\n original: RuntimeApi[K]\n ): RuntimeApi[K] => {\n const extension = extensions?.[key];\n if (!extension) {\n return original;\n }\n return ((...args: Parameters<RuntimeApi[K]>) => {\n return extension(original, getContext(), ...args);\n }) as unknown as RuntimeApi[K];\n };\n\n // Create API with extensions applied\n const extendedApi: RuntimeApi = {\n coerce: wrapMethod(\"coerce\", originalApi.coerce),\n getEnvironment: wrapMethod(\"getEnvironment\", originalApi.getEnvironment),\n applyRegistry: wrapMethod(\"applyRegistry\", originalApi.applyRegistry),\n build: wrapMethod(\"build\", originalApi.build),\n setExtData: wrapMethod(\"setExtData\", originalApi.setExtData),\n getExtData: wrapMethod(\"getExtData\", originalApi.getExtData),\n snapshot: wrapMethod(\"snapshot\", originalApi.snapshot),\n snapshotFull: wrapMethod(\"snapshotFull\", originalApi.snapshotFull),\n applySnapshotFull: wrapMethod(\n \"applySnapshotFull\",\n originalApi.applySnapshotFull\n ),\n describeRegistry: wrapMethod(\n \"describeRegistry\",\n originalApi.describeRegistry\n ),\n update: wrapMethod(\"update\", originalApi.update),\n setEnvironment: wrapMethod(\"setEnvironment\", originalApi.setEnvironment),\n setInput: wrapMethod(\"setInput\", originalApi.setInput),\n setInputs: wrapMethod(\"setInputs\", originalApi.setInputs),\n triggerExternal: wrapMethod(\"triggerExternal\", originalApi.triggerExternal),\n launch: wrapMethod(\"launch\", originalApi.launch),\n whenIdle: wrapMethod(\"whenIdle\", originalApi.whenIdle),\n dispose: wrapMethod(\"dispose\", originalApi.dispose),\n };\n\n return extendedApi;\n}\n"],"names":["WebSocket","GraphBuilder"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteEngine.d.ts","sourceRoot":"","sources":["../../../src/RemoteEngine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RemoteEngine.d.ts","sourceRoot":"","sources":["../../../src/RemoteEngine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EACN,mBAAmB,EACnB,eAAe,EAEhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,qBAAa,YAAa,YAAW,MAAM;IAO7B,OAAO,CAAC,SAAS;IAN7B,OAAO,CAAC,SAAS,CAGb;IACJ,OAAO,CAAC,KAAK,CAAiE;gBAE1D,SAAS,EAAE,SAAS;IAIxC,OAAO,CAAC,UAAU;IAmBlB,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI;IAMlC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAO9D,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAMhE,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAMrD,EAAE,CAAC,CAAC,SAAS,eAAe,EAC1B,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC9B,MAAM,IAAI;IAOb,OAAO,CAAC,IAAI;IAQZ,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAI5C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { GraphDefinition, RegistryDescriptor, RuntimeSnapshot, RuntimeSnapshotFull, Envelope } from "@bian-womp/spark-protocol";
|
|
2
|
+
import type { Engine } from "@bian-womp/spark-graph";
|
|
3
|
+
import type { TransportConnectOptions } from "./transport/Transport";
|
|
4
|
+
export type RemoteClientConfig = {
|
|
5
|
+
kind: "remote-http";
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
connectOptions?: TransportConnectOptions;
|
|
8
|
+
} | {
|
|
9
|
+
kind: "remote-ws";
|
|
10
|
+
url: string;
|
|
11
|
+
connectOptions?: TransportConnectOptions;
|
|
12
|
+
} | {
|
|
13
|
+
kind: "remote-unix";
|
|
14
|
+
socketPath: string;
|
|
15
|
+
connectOptions?: TransportConnectOptions;
|
|
16
|
+
};
|
|
17
|
+
export type RemoteTransportStatus = {
|
|
18
|
+
state: "connecting" | "connected" | "disconnected";
|
|
19
|
+
kind: "remote-http" | "remote-ws" | "remote-unix";
|
|
20
|
+
};
|
|
21
|
+
export type TransportEventListener = (status: RemoteTransportStatus) => void;
|
|
22
|
+
export type CustomEventListener = (event: Envelope<any>) => void;
|
|
23
|
+
export declare class RuntimeApiClient {
|
|
24
|
+
private engine?;
|
|
25
|
+
private transport?;
|
|
26
|
+
private customEventListeners;
|
|
27
|
+
private transportEventListeners;
|
|
28
|
+
private transportUnsubscribe?;
|
|
29
|
+
private disposed;
|
|
30
|
+
private config;
|
|
31
|
+
private onCustomEvent?;
|
|
32
|
+
private connectingPromise?;
|
|
33
|
+
constructor(config: RemoteClientConfig, options?: {
|
|
34
|
+
onCustomEvent?: CustomEventListener;
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* Create transport instance based on config.
|
|
38
|
+
* Extracted to a separate method for better testability and clarity.
|
|
39
|
+
*/
|
|
40
|
+
private createTransport;
|
|
41
|
+
/**
|
|
42
|
+
* Connect to the remote runtime API.
|
|
43
|
+
* Creates and connects the transport, then initializes the engine.
|
|
44
|
+
* Safe to call multiple times - concurrent calls will wait for the same connection.
|
|
45
|
+
*/
|
|
46
|
+
connect(): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Handle events from transport.
|
|
49
|
+
* Routes standard runtime events to engine, custom events to custom handlers.
|
|
50
|
+
*/
|
|
51
|
+
private handleTransportEvent;
|
|
52
|
+
/**
|
|
53
|
+
* Subscribe to custom events (non-standard runtime events like flow-opened, flow-latest).
|
|
54
|
+
* Returns an unsubscribe function.
|
|
55
|
+
*/
|
|
56
|
+
subscribeCustomEvents(listener: CustomEventListener): () => void;
|
|
57
|
+
/**
|
|
58
|
+
* Subscribe to transport status changes.
|
|
59
|
+
* Returns an unsubscribe function.
|
|
60
|
+
*/
|
|
61
|
+
onTransportStatus(listener: TransportEventListener): () => void;
|
|
62
|
+
private emitTransportStatus;
|
|
63
|
+
/**
|
|
64
|
+
* Ensure transport is connected. Called automatically by API methods.
|
|
65
|
+
* Returns the transport instance, throwing if connection fails or client is disposed.
|
|
66
|
+
*/
|
|
67
|
+
private ensureConnected;
|
|
68
|
+
build(def: GraphDefinition, opts?: {
|
|
69
|
+
environment?: Record<string, unknown>;
|
|
70
|
+
}): Promise<void>;
|
|
71
|
+
update(def: GraphDefinition): Promise<void>;
|
|
72
|
+
describeRegistry(): Promise<RegistryDescriptor>;
|
|
73
|
+
applyRegistry(deltas: Array<any>): Promise<void>;
|
|
74
|
+
snapshot(): Promise<RuntimeSnapshot>;
|
|
75
|
+
snapshotFull(): Promise<RuntimeSnapshotFull>;
|
|
76
|
+
applySnapshotFull(payload: RuntimeSnapshotFull): Promise<void>;
|
|
77
|
+
setEnvironment(environment: Record<string, unknown>, opts?: {
|
|
78
|
+
merge?: boolean;
|
|
79
|
+
}): Promise<void>;
|
|
80
|
+
getEnvironment(): Promise<Record<string, unknown>>;
|
|
81
|
+
coerce(from: string, to: string, value: unknown): Promise<unknown>;
|
|
82
|
+
getEngine(): Engine;
|
|
83
|
+
/**
|
|
84
|
+
* Dispose the client and close the transport connection.
|
|
85
|
+
* Idempotent: safe to call multiple times.
|
|
86
|
+
*/
|
|
87
|
+
dispose(): Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=RuntimeApiClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeApiClient.d.ts","sourceRoot":"","sources":["../../../src/RuntimeApiClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { GraphDefinition } from "@bian-womp/spark-protocol";
|
|
2
|
-
import type {
|
|
2
|
+
import type { RuntimeApiClient } from "../RuntimeApiClient";
|
|
3
3
|
export type ExampleName = "simple" | "async" | "progress" | "validation";
|
|
4
4
|
export declare function buildDef(example: ExampleName): GraphDefinition;
|
|
5
|
-
export declare function runExample(example: ExampleName, engine: ReturnType<
|
|
5
|
+
export declare function runExample(example: ExampleName, engine: ReturnType<RuntimeApiClient["getEngine"]>): Promise<void>;
|
|
6
6
|
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/examples/shared.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/examples/shared.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;AAEzE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAM9D;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,iBAmDlD"}
|
package/lib/cjs/src/index.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ export * from "./transport/Transport";
|
|
|
2
2
|
export * from "./transport/WebSocketTransport";
|
|
3
3
|
export * from "./transport/HttpPollingTransport";
|
|
4
4
|
export * from "./RemoteEngine";
|
|
5
|
-
export * from "./
|
|
5
|
+
export * from "./RuntimeApiClient";
|
|
6
6
|
export * from "./server/errors";
|
|
7
|
-
export * from "./server/
|
|
7
|
+
export * from "./server/RuntimeApiServer";
|
|
8
8
|
export * from "./server/runtime";
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Envelope, Command, Json, SystemError } from "@bian-womp/spark-protocol";
|
|
2
|
+
import type { RuntimeApi } from "./runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Middleware function that can preprocess commands before they reach the handler.
|
|
5
|
+
* Call `next()` to continue to the next middleware or handler.
|
|
6
|
+
*/
|
|
7
|
+
export type CommandMiddleware = (env: Envelope<Command>, next: () => Promise<void>) => Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Error handler callback for command processing errors.
|
|
10
|
+
*/
|
|
11
|
+
export type ErrorHandler = (errorEnv: Envelope<{
|
|
12
|
+
type: "error";
|
|
13
|
+
payload: SystemError;
|
|
14
|
+
}>) => void;
|
|
15
|
+
export declare class RuntimeApiServer {
|
|
16
|
+
private runtimeApi;
|
|
17
|
+
private label;
|
|
18
|
+
private onError?;
|
|
19
|
+
private middlewares;
|
|
20
|
+
constructor(runtimeApi: RuntimeApi, label: string, onError?: ErrorHandler | undefined);
|
|
21
|
+
/**
|
|
22
|
+
* Register middleware to preprocess commands before handling.
|
|
23
|
+
* Middlewares are executed in registration order.
|
|
24
|
+
*/
|
|
25
|
+
use(middleware: CommandMiddleware): void;
|
|
26
|
+
/**
|
|
27
|
+
* Handle command with error handling and middleware support.
|
|
28
|
+
*/
|
|
29
|
+
handleCommand(env: Envelope<Command>, ack: (payload?: Json) => void): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Execute middlewares in sequence, then call the final handler.
|
|
32
|
+
*/
|
|
33
|
+
private executeMiddlewares;
|
|
34
|
+
/**
|
|
35
|
+
* Process the command by routing to the appropriate handler.
|
|
36
|
+
*/
|
|
37
|
+
private processCommand;
|
|
38
|
+
/**
|
|
39
|
+
* Helper method to log commands with consistent format.
|
|
40
|
+
*/
|
|
41
|
+
private logCommand;
|
|
42
|
+
/**
|
|
43
|
+
* Handle errors and notify error handler if provided.
|
|
44
|
+
* Formats errors as SystemError since these are infrastructure/command processing errors,
|
|
45
|
+
* not node execution errors.
|
|
46
|
+
*/
|
|
47
|
+
private handleError;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=RuntimeApiServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeApiServer.d.ts","sourceRoot":"","sources":["../../../../src/server/RuntimeApiServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,WAAW,EACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG5C;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,EACtB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KACtB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,QAAQ,EAAE,QAAQ,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC,KACxD,IAAI,CAAC;AAEV,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO,CAAC;IALlB,OAAO,CAAC,WAAW,CAA2B;gBAGpC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,YAAY,YAAA;IAGhC;;;OAGG;IACH,GAAG,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAIxC;;OAEG;IACG,aAAa,CACjB,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,EACtB,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,IAAI,GAC5B,OAAO,CAAC,IAAI,CAAC;IAWhB;;OAEG;YACW,kBAAkB;IAgBhC;;OAEG;YACW,cAAc;IAsJ5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAalB;;;;OAIG;IACH,OAAO,CAAC,WAAW;CAkBpB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { S as SeqGenerator } from './index-Dnchg7CQ.js';
|
|
2
|
+
import 'ws';
|
|
3
|
+
import '@bian-womp/spark-graph';
|
|
4
|
+
|
|
5
|
+
// Node-only transport using a UNIX domain socket.
|
|
6
|
+
// Import directly from path: "@bian-womp/spark-remote/transport/UnixSocketTransport" in Node/Electron code.
|
|
7
|
+
// Do not re-export from the browser index to avoid bundling in web builds.
|
|
8
|
+
class UnixSocketTransport {
|
|
9
|
+
constructor(socketPath) {
|
|
10
|
+
this.socketPath = socketPath;
|
|
11
|
+
this.listeners = new Set();
|
|
12
|
+
this.buffer = "";
|
|
13
|
+
this.waiters = new Map();
|
|
14
|
+
this.seq = new SeqGenerator();
|
|
15
|
+
}
|
|
16
|
+
async connect() {
|
|
17
|
+
if (typeof process === "undefined") {
|
|
18
|
+
throw new Error("UnixSocketTransport requires a Node environment");
|
|
19
|
+
}
|
|
20
|
+
if (this.socket)
|
|
21
|
+
return;
|
|
22
|
+
const { createConnection } = await import('node:net');
|
|
23
|
+
const sock = createConnection(this.socketPath);
|
|
24
|
+
this.socket = sock;
|
|
25
|
+
await new Promise((resolve, reject) => {
|
|
26
|
+
sock.once("connect", () => resolve());
|
|
27
|
+
sock.once("error", (e) => reject(e));
|
|
28
|
+
});
|
|
29
|
+
sock.on("data", (chunk) => this.onData(chunk));
|
|
30
|
+
sock.on("error", () => {
|
|
31
|
+
/* noop, surface via request waiters if needed */
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
onData(chunk) {
|
|
35
|
+
this.buffer += chunk.toString("utf8");
|
|
36
|
+
let idx = this.buffer.indexOf("\n");
|
|
37
|
+
while (idx >= 0) {
|
|
38
|
+
const raw = this.buffer.slice(0, idx);
|
|
39
|
+
this.buffer = this.buffer.slice(idx + 1);
|
|
40
|
+
idx = this.buffer.indexOf("\n");
|
|
41
|
+
if (!raw.trim())
|
|
42
|
+
continue;
|
|
43
|
+
try {
|
|
44
|
+
const env = JSON.parse(raw);
|
|
45
|
+
if (env && typeof env.seq === "number" && this.waiters.has(env.seq)) {
|
|
46
|
+
const fn = this.waiters.get(env.seq);
|
|
47
|
+
this.waiters.delete(env.seq);
|
|
48
|
+
fn(env);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
for (const l of Array.from(this.listeners))
|
|
52
|
+
l(env);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// ignore malformed frames
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async request(msg) {
|
|
61
|
+
const seq = typeof msg.seq === "number" ? msg.seq : this.seq.next();
|
|
62
|
+
const env = { ...msg, seq };
|
|
63
|
+
const p = new Promise((resolve) => {
|
|
64
|
+
this.waiters.set(seq, (incoming) => resolve(incoming));
|
|
65
|
+
});
|
|
66
|
+
this.send(env);
|
|
67
|
+
return p;
|
|
68
|
+
}
|
|
69
|
+
send(msg) {
|
|
70
|
+
const s = this.socket;
|
|
71
|
+
if (!s)
|
|
72
|
+
return;
|
|
73
|
+
try {
|
|
74
|
+
s.write(JSON.stringify(msg) + "\n");
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// ignore
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
subscribe(cb) {
|
|
81
|
+
this.listeners.add(cb);
|
|
82
|
+
return () => this.listeners.delete(cb);
|
|
83
|
+
}
|
|
84
|
+
async close() {
|
|
85
|
+
const s = this.socket;
|
|
86
|
+
this.socket = undefined;
|
|
87
|
+
if (!s)
|
|
88
|
+
return;
|
|
89
|
+
await new Promise((resolve) => {
|
|
90
|
+
try {
|
|
91
|
+
s.end(() => resolve());
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
resolve();
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export { UnixSocketTransport };
|
|
101
|
+
//# sourceMappingURL=UnixSocketTransport-CVUsiFcW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnixSocketTransport-CVUsiFcW.js","sources":["../../src/transport/UnixSocketTransport.ts"],"sourcesContent":["// 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"],"names":[],"mappings":"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"}
|