@bian-womp/spark-remote 0.1.0

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.
Files changed (65) hide show
  1. package/lib/cjs/index.cjs +367 -0
  2. package/lib/cjs/index.cjs.map +1 -0
  3. package/lib/cjs/src/RemoteEngine.d.ts +18 -0
  4. package/lib/cjs/src/RemoteEngine.d.ts.map +1 -0
  5. package/lib/cjs/src/RemoteRunner.d.ts +13 -0
  6. package/lib/cjs/src/RemoteRunner.d.ts.map +1 -0
  7. package/lib/cjs/src/examples/http-polling.d.ts +2 -0
  8. package/lib/cjs/src/examples/http-polling.d.ts.map +1 -0
  9. package/lib/cjs/src/examples/shared.d.ts +8 -0
  10. package/lib/cjs/src/examples/shared.d.ts.map +1 -0
  11. package/lib/cjs/src/examples/unix-socket.d.ts +2 -0
  12. package/lib/cjs/src/examples/unix-socket.d.ts.map +1 -0
  13. package/lib/cjs/src/examples/websocket.d.ts +2 -0
  14. package/lib/cjs/src/examples/websocket.d.ts.map +1 -0
  15. package/lib/cjs/src/index.d.ts +10 -0
  16. package/lib/cjs/src/index.d.ts.map +1 -0
  17. package/lib/cjs/src/protocol.d.ts +2 -0
  18. package/lib/cjs/src/protocol.d.ts.map +1 -0
  19. package/lib/cjs/src/server/command.d.ts +4 -0
  20. package/lib/cjs/src/server/command.d.ts.map +1 -0
  21. package/lib/cjs/src/server/errors.d.ts +3 -0
  22. package/lib/cjs/src/server/errors.d.ts.map +1 -0
  23. package/lib/cjs/src/server/runtime.d.ts +14 -0
  24. package/lib/cjs/src/server/runtime.d.ts.map +1 -0
  25. package/lib/cjs/src/transport/HttpPollingTransport.d.ts +15 -0
  26. package/lib/cjs/src/transport/HttpPollingTransport.d.ts.map +1 -0
  27. package/lib/cjs/src/transport/Transport.d.ts +9 -0
  28. package/lib/cjs/src/transport/Transport.d.ts.map +1 -0
  29. package/lib/cjs/src/transport/UnixSocketTransport.d.ts +17 -0
  30. package/lib/cjs/src/transport/UnixSocketTransport.d.ts.map +1 -0
  31. package/lib/cjs/src/transport/WebSocketTransport.d.ts +14 -0
  32. package/lib/cjs/src/transport/WebSocketTransport.d.ts.map +1 -0
  33. package/lib/esm/index.js +358 -0
  34. package/lib/esm/index.js.map +1 -0
  35. package/lib/esm/src/RemoteEngine.d.ts +18 -0
  36. package/lib/esm/src/RemoteEngine.d.ts.map +1 -0
  37. package/lib/esm/src/RemoteRunner.d.ts +13 -0
  38. package/lib/esm/src/RemoteRunner.d.ts.map +1 -0
  39. package/lib/esm/src/examples/http-polling.d.ts +2 -0
  40. package/lib/esm/src/examples/http-polling.d.ts.map +1 -0
  41. package/lib/esm/src/examples/shared.d.ts +8 -0
  42. package/lib/esm/src/examples/shared.d.ts.map +1 -0
  43. package/lib/esm/src/examples/unix-socket.d.ts +2 -0
  44. package/lib/esm/src/examples/unix-socket.d.ts.map +1 -0
  45. package/lib/esm/src/examples/websocket.d.ts +2 -0
  46. package/lib/esm/src/examples/websocket.d.ts.map +1 -0
  47. package/lib/esm/src/index.d.ts +10 -0
  48. package/lib/esm/src/index.d.ts.map +1 -0
  49. package/lib/esm/src/protocol.d.ts +2 -0
  50. package/lib/esm/src/protocol.d.ts.map +1 -0
  51. package/lib/esm/src/server/command.d.ts +4 -0
  52. package/lib/esm/src/server/command.d.ts.map +1 -0
  53. package/lib/esm/src/server/errors.d.ts +3 -0
  54. package/lib/esm/src/server/errors.d.ts.map +1 -0
  55. package/lib/esm/src/server/runtime.d.ts +14 -0
  56. package/lib/esm/src/server/runtime.d.ts.map +1 -0
  57. package/lib/esm/src/transport/HttpPollingTransport.d.ts +15 -0
  58. package/lib/esm/src/transport/HttpPollingTransport.d.ts.map +1 -0
  59. package/lib/esm/src/transport/Transport.d.ts +9 -0
  60. package/lib/esm/src/transport/Transport.d.ts.map +1 -0
  61. package/lib/esm/src/transport/UnixSocketTransport.d.ts +17 -0
  62. package/lib/esm/src/transport/UnixSocketTransport.d.ts.map +1 -0
  63. package/lib/esm/src/transport/WebSocketTransport.d.ts +14 -0
  64. package/lib/esm/src/transport/WebSocketTransport.d.ts.map +1 -0
  65. package/package.json +55 -0
@@ -0,0 +1,358 @@
1
+ import { WebSocket } from 'ws';
2
+ import { GraphBuilder } from '@bian-womp/spark-graph';
3
+
4
+ const OPEN = 1;
5
+ class WebSocketTransport {
6
+ constructor(url) {
7
+ this.listeners = new Set();
8
+ this.url = url;
9
+ }
10
+ async connect() {
11
+ if (this.ws && this.ws.readyState === OPEN)
12
+ return;
13
+ this.ws = window
14
+ ? new window.WebSocket(this.url)
15
+ : new WebSocket(this.url);
16
+ await new Promise((resolve, reject) => {
17
+ if (!this.ws)
18
+ return reject(new Error("ws init failed"));
19
+ this.ws.onopen = () => resolve();
20
+ this.ws.onerror = (e) => reject(e);
21
+ this.ws.onmessage = (ev) => {
22
+ try {
23
+ const env = JSON.parse(String(ev.data));
24
+ for (const l of Array.from(this.listeners))
25
+ l(env);
26
+ }
27
+ catch { }
28
+ };
29
+ });
30
+ }
31
+ async request(msg) {
32
+ // For now, just send and wait for the next message with matching seq (simple demo)
33
+ const seq = Date.now();
34
+ const env = { ...msg, seq };
35
+ const p = new Promise((resolve) => {
36
+ const off = this.subscribe((incoming) => {
37
+ if (incoming.seq === seq) {
38
+ off();
39
+ resolve(incoming);
40
+ }
41
+ });
42
+ });
43
+ this.send(env);
44
+ return p;
45
+ }
46
+ send(msg) {
47
+ if (!this.ws || this.ws.readyState !== OPEN)
48
+ return;
49
+ this.ws.send(JSON.stringify(msg));
50
+ }
51
+ subscribe(cb) {
52
+ this.listeners.add(cb);
53
+ return () => this.listeners.delete(cb);
54
+ }
55
+ async close() {
56
+ if (!this.ws)
57
+ return;
58
+ const ws = this.ws;
59
+ this.ws = undefined;
60
+ await new Promise((resolve) => {
61
+ ws.onclose = () => resolve();
62
+ try {
63
+ ws.close();
64
+ }
65
+ catch {
66
+ resolve();
67
+ }
68
+ });
69
+ }
70
+ }
71
+
72
+ class HttpPollingTransport {
73
+ constructor(baseUrl) {
74
+ this.listeners = new Set();
75
+ this.baseUrl = baseUrl.replace(/\/$/, "");
76
+ }
77
+ async connect() {
78
+ // Start polling loop
79
+ if (this.polling)
80
+ return;
81
+ const tick = async () => {
82
+ try {
83
+ const url = new URL(this.baseUrl + "/events");
84
+ if (this.cursor)
85
+ url.searchParams.set("cursor", this.cursor);
86
+ const res = await fetch(url.toString());
87
+ if (!res.ok)
88
+ return;
89
+ const batch = (await res.json());
90
+ for (const env of batch) {
91
+ this.cursor = String(env.seq ?? Date.now());
92
+ for (const l of Array.from(this.listeners))
93
+ l(env);
94
+ }
95
+ }
96
+ catch { }
97
+ };
98
+ this.polling = setInterval(tick, 200);
99
+ }
100
+ async request(msg) {
101
+ const res = await fetch(this.baseUrl + "/command", {
102
+ method: "POST",
103
+ headers: { "content-type": "application/json" },
104
+ body: JSON.stringify(msg),
105
+ });
106
+ const data = (await res.json());
107
+ return data;
108
+ }
109
+ send(msg) {
110
+ void fetch(this.baseUrl + "/command", {
111
+ method: "POST",
112
+ headers: { "content-type": "application/json" },
113
+ body: JSON.stringify(msg),
114
+ });
115
+ }
116
+ subscribe(cb) {
117
+ this.listeners.add(cb);
118
+ return () => this.listeners.delete(cb);
119
+ }
120
+ async close() {
121
+ if (this.polling)
122
+ clearInterval(this.polling);
123
+ this.polling = undefined;
124
+ }
125
+ }
126
+
127
+ class RemoteEngine {
128
+ constructor(transport) {
129
+ this.transport = transport;
130
+ this.listeners = new Map();
131
+ this.cache = new Map();
132
+ this.transport.subscribe((env) => this.onEnvelope(env));
133
+ }
134
+ onEnvelope(env) {
135
+ const msg = env.message;
136
+ if (!msg)
137
+ return;
138
+ if (msg.type === "value") {
139
+ const key = `${msg.payload.nodeId}.${msg.payload.handle}`;
140
+ this.cache.set(key, msg.payload.value);
141
+ this.emit("value", msg.payload);
142
+ }
143
+ else if (msg.type === "error") {
144
+ this.emit("error", msg.payload);
145
+ }
146
+ else if (msg.type === "invalidate") {
147
+ this.emit("invalidate", msg.payload);
148
+ }
149
+ else if (msg.type === "stats") {
150
+ this.emit("stats", msg.payload);
151
+ }
152
+ }
153
+ launch() {
154
+ this.transport.send({ message: { type: "Launch" } });
155
+ }
156
+ setInput(nodeId, handle, value) {
157
+ this.transport.send({
158
+ message: { type: "SetInput", payload: { nodeId, handle, value } },
159
+ });
160
+ }
161
+ triggerExternal(nodeId, event) {
162
+ this.transport.send({
163
+ message: { type: "TriggerExternal", payload: { nodeId, event } },
164
+ });
165
+ }
166
+ on(event, handler) {
167
+ if (!this.listeners.has(event))
168
+ this.listeners.set(event, new Set());
169
+ const set = this.listeners.get(event);
170
+ set.add(handler);
171
+ return () => set.delete(handler);
172
+ }
173
+ emit(event, payload) {
174
+ const set = this.listeners.get(event);
175
+ if (set)
176
+ for (const h of Array.from(set))
177
+ h(payload);
178
+ }
179
+ getOutput(nodeId, output) {
180
+ return this.cache.get(`${nodeId}.${output}`);
181
+ }
182
+ async whenIdle() {
183
+ await this.transport.request({ message: { type: "WhenIdle" } });
184
+ }
185
+ dispose() {
186
+ this.transport.send({ message: { type: "Dispose" } });
187
+ }
188
+ }
189
+
190
+ class RemoteRunner {
191
+ constructor(transport) {
192
+ this.transport = transport;
193
+ this.engine = new RemoteEngine(transport);
194
+ }
195
+ async build(def, opts) {
196
+ await this.transport.request({
197
+ message: {
198
+ type: "Build",
199
+ payload: { def, environment: opts?.environment },
200
+ },
201
+ });
202
+ }
203
+ async update(def) {
204
+ await this.transport.request({
205
+ message: { type: "Update", payload: { def } },
206
+ });
207
+ }
208
+ getEngine() {
209
+ return this.engine;
210
+ }
211
+ }
212
+
213
+ /* eslint-disable @typescript-eslint/no-explicit-any */
214
+ function summarize(value, maxLen = 120) {
215
+ try {
216
+ const s = typeof value === "string" ? value : JSON.stringify(value);
217
+ return s.length > maxLen ? s.slice(0, maxLen) + "…" : s;
218
+ }
219
+ catch {
220
+ return String(value);
221
+ }
222
+ }
223
+ function serializeError(err) {
224
+ try {
225
+ if (!err)
226
+ return { message: String(err) };
227
+ const errAny = err;
228
+ if (err instanceof Error) {
229
+ const base = {
230
+ name: err.name,
231
+ message: err.message,
232
+ stack: err.stack,
233
+ };
234
+ for (const k of Object.keys(errAny))
235
+ base[k] = errAny[k];
236
+ return base;
237
+ }
238
+ if (typeof err === "object") {
239
+ const maybeMsg = errAny?.message;
240
+ const maybeName = errAny?.name;
241
+ const maybeStack = errAny?.stack;
242
+ const out = { ...errAny };
243
+ if (maybeMsg && !out.message)
244
+ out.message = String(maybeMsg);
245
+ if (maybeName && !out.name)
246
+ out.name = String(maybeName);
247
+ if (maybeStack && !out.stack)
248
+ out.stack = String(maybeStack);
249
+ return out;
250
+ }
251
+ return { message: String(err) };
252
+ }
253
+ catch {
254
+ return { message: String(err) };
255
+ }
256
+ }
257
+
258
+ async function handleCommand(label, env, runtimeApi, ack) {
259
+ const msg = env.message;
260
+ switch (msg.type) {
261
+ case "Build": {
262
+ console.debug(`[${label}] rx Build seq=${env.seq} nodes=${msg.payload.def.nodes?.length ?? 0} edges=${msg.payload.def.edges?.length ?? 0} envKeys=${Object.keys(msg.payload.environment ?? {}).join(",")}`);
263
+ await runtimeApi.build(msg.payload.def, msg.payload.environment);
264
+ ack();
265
+ break;
266
+ }
267
+ case "Update": {
268
+ console.debug(`[${label}] rx Update seq=${env.seq} nodes=${msg.payload.def.nodes?.length ?? 0} edges=${msg.payload.def.edges?.length ?? 0}`);
269
+ await runtimeApi.update(msg.payload.def);
270
+ ack();
271
+ break;
272
+ }
273
+ case "SetInput": {
274
+ console.debug(`[${label}] rx SetInput seq=${env.seq} ${msg.payload.nodeId}.${msg.payload.handle}=${summarize(msg.payload.value)}`);
275
+ runtimeApi.setInput(msg.payload.nodeId, msg.payload.handle, msg.payload.value);
276
+ ack();
277
+ break;
278
+ }
279
+ case "TriggerExternal": {
280
+ console.debug(`[${label}] rx TriggerExternal seq=${env.seq} ${msg.payload.nodeId} event=${summarize(msg.payload.event)}`);
281
+ runtimeApi.triggerExternal(msg.payload.nodeId, msg.payload.event);
282
+ ack();
283
+ break;
284
+ }
285
+ case "Launch": {
286
+ console.debug(`[${label}] rx Launch seq=${env.seq}`);
287
+ runtimeApi.launch();
288
+ ack();
289
+ break;
290
+ }
291
+ case "WhenIdle": {
292
+ console.debug(`[${label}] rx WhenIdle seq=${env.seq}`);
293
+ await runtimeApi.whenIdle();
294
+ ack();
295
+ break;
296
+ }
297
+ case "Snapshot": {
298
+ console.debug(`[${label}] rx Snapshot seq=${env.seq}`);
299
+ ack({ snapshot: { ok: true } });
300
+ break;
301
+ }
302
+ case "Dispose": {
303
+ console.debug(`[${label}] rx Dispose seq=${env.seq}`);
304
+ runtimeApi.dispose();
305
+ ack();
306
+ break;
307
+ }
308
+ case "Pause":
309
+ case "Resume": {
310
+ console.debug(`[${label}] rx ${msg.type} seq=${env.seq} (not-impl)`);
311
+ ack();
312
+ break;
313
+ }
314
+ default: {
315
+ console.debug(`[${label}] rx Unknown type seq=${env.seq}`);
316
+ ack();
317
+ }
318
+ }
319
+ }
320
+
321
+ function createRuntimeAdapter(createRegistry, send) {
322
+ const registry = createRegistry();
323
+ const builder = new GraphBuilder(registry);
324
+ let graphRuntime;
325
+ return {
326
+ async build(def, opts) {
327
+ graphRuntime = builder.build(def, { environment: opts });
328
+ graphRuntime.on("value", (p) => send({ message: { type: "value", payload: p } }));
329
+ graphRuntime.on("invalidate", (p) => send({ message: { type: "invalidate", payload: p } }));
330
+ graphRuntime.on("error", (p) => send({ message: { type: "error", payload: p } }));
331
+ graphRuntime.on("stats", (p) => send({ message: { type: "stats", payload: p } }));
332
+ },
333
+ async update(def) {
334
+ if (!graphRuntime)
335
+ return;
336
+ graphRuntime.update(def, registry);
337
+ },
338
+ setInput(nodeId, handle, value) {
339
+ graphRuntime?.setInput(nodeId, handle, value);
340
+ },
341
+ triggerExternal(nodeId, event) {
342
+ graphRuntime?.triggerExternal(nodeId, event);
343
+ },
344
+ launch() {
345
+ graphRuntime?.launch();
346
+ },
347
+ whenIdle() {
348
+ return graphRuntime?.whenIdle?.() ?? Promise.resolve();
349
+ },
350
+ dispose() {
351
+ graphRuntime?.dispose?.();
352
+ graphRuntime = undefined;
353
+ },
354
+ };
355
+ }
356
+
357
+ export { HttpPollingTransport, RemoteEngine, RemoteRunner, WebSocketTransport, createRuntimeAdapter, handleCommand, serializeError, summarize };
358
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../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":["import { WebSocket } from \"ws\";\nimport type { Envelope } from \"../protocol\";\nimport type { Transport } from \"./Transport\";\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 url: string;\n\n constructor(url: string) {\n this.url = url;\n }\n\n async connect(): Promise<void> {\n if (this.ws && this.ws.readyState === OPEN) return;\n this.ws = window\n ? new (window as any).WebSocket(this.url)\n : new WebSocket(this.url);\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 = Date.now();\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 \"../protocol\";\nimport type { Transport } 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\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.replace(/\\/$/, \"\");\n }\n\n async connect(): Promise<void> {\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 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 res = await fetch(this.baseUrl + \"/command\", {\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 void fetch(this.baseUrl + \"/command\", {\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 RuntimeErrorEvent,\n InvalidateEvent,\n StatsEvent,\n ValueEvent,\n} from \"@bian-womp/spark-graph\";\nimport type { Transport } from \"./transport/Transport\";\nimport type { Envelope, RuntimeEvent } from \"./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, unknown>();\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, msg.payload.value);\n this.emit(\"value\", msg.payload as ValueEvent);\n } else if (msg.type === \"error\") {\n this.emit(\"error\", msg.payload as RuntimeErrorEvent);\n } else if (msg.type === \"invalidate\") {\n this.emit(\"invalidate\", msg.payload as InvalidateEvent);\n } else if (msg.type === \"stats\") {\n this.emit(\"stats\", msg.payload as StatsEvent);\n }\n }\n\n launch(): void {\n this.transport.send({ message: { type: \"Launch\" } });\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 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}`);\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 RunnerControl,\n GraphDefinition,\n Engine,\n} 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 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 } from \"../protocol\";\nimport type { Json, 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 \"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 \"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();\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 ack({ snapshot: { ok: true } });\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 { Envelope, RuntimeEvent, GraphDefinition } from \"../protocol\";\n\nexport type Json = Record<string, unknown>;\n\nexport interface RuntimeApi {\n build: (def: GraphDefinition, env?: Json) => Promise<void>;\n update: (def: GraphDefinition) => Promise<void>;\n setInput: (nodeId: string, handle: string, value: unknown) => void;\n triggerExternal: (nodeId: string, event: unknown) => void;\n launch: () => void;\n whenIdle: () => Promise<void>;\n dispose: () => void;\n}\n\nexport function createRuntimeAdapter(\n createRegistry: () => Registry,\n send: (e: Envelope<RuntimeEvent>) => void\n): RuntimeApi {\n const registry = createRegistry();\n const builder = new GraphBuilder(registry);\n let graphRuntime: GraphRuntime | undefined;\n return {\n async build(def, opts) {\n graphRuntime = builder.build(def, { environment: opts });\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 async update(def) {\n if (!graphRuntime) return;\n graphRuntime.update(def, registry);\n },\n setInput(nodeId, handle, value) {\n graphRuntime?.setInput(nodeId, handle, value);\n },\n triggerExternal(nodeId, event) {\n graphRuntime?.triggerExternal(nodeId, event);\n },\n launch() {\n graphRuntime?.launch();\n },\n whenIdle() {\n return graphRuntime?.whenIdle?.() ?? Promise.resolve();\n },\n dispose() {\n graphRuntime?.dispose?.();\n graphRuntime = undefined;\n },\n };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Engine, EngineEventListener, EngineEventName } from "@bian-womp/spark-graph";
2
+ import type { Transport } from "./transport/Transport";
3
+ export declare class RemoteEngine implements Engine {
4
+ private transport;
5
+ private listeners;
6
+ private cache;
7
+ constructor(transport: Transport);
8
+ private onEnvelope;
9
+ launch(): void;
10
+ setInput(nodeId: string, handle: string, value: unknown): void;
11
+ triggerExternal(nodeId: string, event: unknown): void;
12
+ on<K extends EngineEventName>(event: K, handler: EngineEventListener<K>): () => void;
13
+ private emit;
14
+ getOutput(nodeId: string, output: string): unknown;
15
+ whenIdle(): Promise<void>;
16
+ dispose(): void;
17
+ }
18
+ //# sourceMappingURL=RemoteEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteEngine.d.ts","sourceRoot":"","sources":["../../../src/RemoteEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,mBAAmB,EACnB,eAAe,EAMhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGvD,qBAAa,YAAa,YAAW,MAAM;IAO7B,OAAO,CAAC,SAAS;IAN7B,OAAO,CAAC,SAAS,CAGb;IACJ,OAAO,CAAC,KAAK,CAA8B;gBAEvB,SAAS,EAAE,SAAS;IAIxC,OAAO,CAAC,UAAU;IAgBlB,MAAM,IAAI,IAAI;IAId,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAM9D,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,13 @@
1
+ import type { RunnerControl, GraphDefinition, Engine } from "@bian-womp/spark-graph";
2
+ import type { Transport } from "./transport/Transport";
3
+ export declare class RemoteRunner implements RunnerControl {
4
+ private transport;
5
+ private engine;
6
+ constructor(transport: Transport);
7
+ build(def: GraphDefinition, opts?: {
8
+ environment?: Record<string, unknown>;
9
+ }): Promise<void>;
10
+ update(def: GraphDefinition): Promise<void>;
11
+ getEngine(): Engine;
12
+ }
13
+ //# sourceMappingURL=RemoteRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteRunner.d.ts","sourceRoot":"","sources":["../../../src/RemoteRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,MAAM,EACP,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,qBAAa,YAAa,YAAW,aAAa;IAEpC,OAAO,CAAC,SAAS;IAD7B,OAAO,CAAC,MAAM,CAAe;gBACT,SAAS,EAAE,SAAS;IAIlC,KAAK,CACT,GAAG,EAAE,eAAe,EACpB,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAC/C,OAAO,CAAC,IAAI,CAAC;IASV,MAAM,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjD,SAAS,IAAI,MAAM;CAGpB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=http-polling.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-polling.d.ts","sourceRoot":"","sources":["../../../../src/examples/http-polling.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { type Engine } from "@bian-womp/spark-graph";
2
+ import type { GraphDefinition } from "../protocol";
3
+ import type { RemoteRunner } from "../RemoteRunner";
4
+ export type ExampleName = "simple" | "async" | "progress" | "validation";
5
+ export declare function buildDef(example: ExampleName): GraphDefinition;
6
+ export declare function runExample(example: ExampleName, engine: ReturnType<RemoteRunner["getEngine"]>): Promise<void>;
7
+ export declare function installLogging(engine: Engine): void;
8
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/examples/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EAKZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,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,YAAY,CAAC,WAAW,CAAC,CAAC,iBAmD9C;AACD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,QA2B5C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=unix-socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unix-socket.d.ts","sourceRoot":"","sources":["../../../../src/examples/unix-socket.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=websocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../../src/examples/websocket.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export * from "./protocol";
2
+ export * from "./transport/Transport";
3
+ export * from "./transport/WebSocketTransport";
4
+ export * from "./transport/HttpPollingTransport";
5
+ export * from "./RemoteEngine";
6
+ export * from "./RemoteRunner";
7
+ export * from "./server/errors";
8
+ export * from "./server/command";
9
+ export * from "./server/runtime";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export type { Envelope, Command, RuntimeEvent, GraphDefinition, } from "@bian-womp/spark-protocol";
2
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/protocol.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,eAAe,GAChB,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Envelope, Command } from "../protocol";
2
+ import type { Json, RuntimeApi } from "./runtime";
3
+ export declare function handleCommand(label: string, env: Envelope<Command>, runtimeApi: RuntimeApi, ack: (payload?: Json) => void): Promise<void>;
4
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/server/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGlD,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,EACtB,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,IAAI,GAC5B,OAAO,CAAC,IAAI,CAAC,CAmFf"}
@@ -0,0 +1,3 @@
1
+ export declare function summarize(value: unknown, maxLen?: number): string;
2
+ export declare function serializeError(err: unknown): any;
3
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/server/errors.ts"],"names":[],"mappings":"AACA,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,SAAM,GAAG,MAAM,CAO9D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,CA2BhD"}
@@ -0,0 +1,14 @@
1
+ import { Registry } from "@bian-womp/spark-graph";
2
+ import type { Envelope, RuntimeEvent, GraphDefinition } from "../protocol";
3
+ export type Json = Record<string, unknown>;
4
+ export interface RuntimeApi {
5
+ build: (def: GraphDefinition, env?: Json) => Promise<void>;
6
+ update: (def: GraphDefinition) => Promise<void>;
7
+ setInput: (nodeId: string, handle: string, value: unknown) => void;
8
+ triggerExternal: (nodeId: string, event: unknown) => void;
9
+ launch: () => void;
10
+ whenIdle: () => Promise<void>;
11
+ dispose: () => void;
12
+ }
13
+ export declare function createRuntimeAdapter(createRegistry: () => Registry, send: (e: Envelope<RuntimeEvent>) => void): RuntimeApi;
14
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/server/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,QAAQ,EAAgB,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3E,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnE,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1D,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,MAAM,QAAQ,EAC9B,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,GACxC,UAAU,CAyCZ"}
@@ -0,0 +1,15 @@
1
+ import type { Envelope } from "../protocol";
2
+ import type { Transport } from "./Transport";
3
+ export declare class HttpPollingTransport implements Transport {
4
+ private baseUrl;
5
+ private listeners;
6
+ private polling?;
7
+ private cursor?;
8
+ constructor(baseUrl: string);
9
+ connect(): Promise<void>;
10
+ request<TReq = unknown, TRes = unknown>(msg: Envelope<TReq>): Promise<Envelope<TRes>>;
11
+ send<TReq = unknown>(msg: Envelope<TReq>): void;
12
+ subscribe(cb: (event: Envelope<any>) => void): () => void;
13
+ close(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=HttpPollingTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpPollingTransport.d.ts","sourceRoot":"","sources":["../../../../src/transport/HttpPollingTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,oBAAqB,YAAW,SAAS;IACpD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAA6C;IAC9D,OAAO,CAAC,OAAO,CAAC,CAAiB;IACjC,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,MAAM;IAIrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBxB,OAAO,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,GAAG,OAAO,EAC1C,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAU1B,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI;IAQ/C,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAKnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
@@ -0,0 +1,9 @@
1
+ import type { Envelope } from "../protocol";
2
+ export interface Transport {
3
+ connect(sessionId?: string): Promise<void>;
4
+ request<TReq = unknown, TRes = unknown>(msg: Envelope<TReq>): Promise<Envelope<TRes>>;
5
+ send<TReq = unknown>(msg: Envelope<TReq>): void;
6
+ subscribe(cb: (event: Envelope<any>) => void): () => void;
7
+ close(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=Transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transport.d.ts","sourceRoot":"","sources":["../../../../src/transport/Transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,GAAG,OAAO,EACpC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC1D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
@@ -0,0 +1,17 @@
1
+ import type { Envelope } from "../protocol";
2
+ import type { Transport } from "./Transport";
3
+ export declare class UnixSocketTransport implements Transport {
4
+ private socketPath;
5
+ private socket?;
6
+ private listeners;
7
+ private buffer;
8
+ private waiters;
9
+ constructor(socketPath: string);
10
+ connect(): Promise<void>;
11
+ private onData;
12
+ request<TReq = unknown, TRes = unknown>(msg: Envelope<TReq>): Promise<Envelope<TRes>>;
13
+ send<TReq = unknown>(msg: Envelope<TReq>): void;
14
+ subscribe(cb: (event: Envelope<any>) => void): () => void;
15
+ close(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=UnixSocketTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnixSocketTransport.d.ts","sourceRoot":"","sources":["../../../../src/transport/UnixSocketTransport.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAO7C,qBAAa,mBAAoB,YAAW,SAAS;IAMvC,OAAO,CAAC,UAAU;IAL9B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,SAAS,CAA6C;IAC9D,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,OAAO,CAAmD;gBAE9C,UAAU,EAAE,MAAM;IAEhC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9B,OAAO,CAAC,MAAM;IAuBR,OAAO,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,GAAG,OAAO,EAC1C,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAa1B,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI;IAU/C,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAKnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAY7B"}
@@ -0,0 +1,14 @@
1
+ import type { Envelope } from "../protocol";
2
+ import type { Transport } from "./Transport";
3
+ export declare class WebSocketTransport implements Transport {
4
+ private ws?;
5
+ private listeners;
6
+ private url;
7
+ constructor(url: string);
8
+ connect(): Promise<void>;
9
+ request<TReq = unknown, TRes = unknown>(msg: Envelope<TReq>): Promise<Envelope<TRes>>;
10
+ send<TReq = unknown>(msg: Envelope<TReq>): void;
11
+ subscribe(cb: (event: Envelope<any>) => void): () => void;
12
+ close(): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=WebSocketTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketTransport.d.ts","sourceRoot":"","sources":["../../../../src/transport/WebSocketTransport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAO7C,qBAAa,kBAAmB,YAAW,SAAS;IAClD,OAAO,CAAC,EAAE,CAAC,CAAY;IACvB,OAAO,CAAC,SAAS,CAA6C;IAC9D,OAAO,CAAC,GAAG,CAAS;gBAER,GAAG,EAAE,MAAM;IAIjB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBxB,OAAO,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,GAAG,OAAO,EAC1C,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAgB1B,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI;IAK/C,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAKnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAa7B"}