@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,367 @@
1
+ 'use strict';
2
+
3
+ var ws = require('ws');
4
+ var sparkGraph = require('@bian-womp/spark-graph');
5
+
6
+ const OPEN = 1;
7
+ class WebSocketTransport {
8
+ constructor(url) {
9
+ this.listeners = new Set();
10
+ this.url = url;
11
+ }
12
+ async connect() {
13
+ if (this.ws && this.ws.readyState === OPEN)
14
+ return;
15
+ this.ws = window
16
+ ? new window.WebSocket(this.url)
17
+ : new ws.WebSocket(this.url);
18
+ await new Promise((resolve, reject) => {
19
+ if (!this.ws)
20
+ return reject(new Error("ws init failed"));
21
+ this.ws.onopen = () => resolve();
22
+ this.ws.onerror = (e) => reject(e);
23
+ this.ws.onmessage = (ev) => {
24
+ try {
25
+ const env = JSON.parse(String(ev.data));
26
+ for (const l of Array.from(this.listeners))
27
+ l(env);
28
+ }
29
+ catch { }
30
+ };
31
+ });
32
+ }
33
+ async request(msg) {
34
+ // For now, just send and wait for the next message with matching seq (simple demo)
35
+ const seq = Date.now();
36
+ const env = { ...msg, seq };
37
+ const p = new Promise((resolve) => {
38
+ const off = this.subscribe((incoming) => {
39
+ if (incoming.seq === seq) {
40
+ off();
41
+ resolve(incoming);
42
+ }
43
+ });
44
+ });
45
+ this.send(env);
46
+ return p;
47
+ }
48
+ send(msg) {
49
+ if (!this.ws || this.ws.readyState !== OPEN)
50
+ return;
51
+ this.ws.send(JSON.stringify(msg));
52
+ }
53
+ subscribe(cb) {
54
+ this.listeners.add(cb);
55
+ return () => this.listeners.delete(cb);
56
+ }
57
+ async close() {
58
+ if (!this.ws)
59
+ return;
60
+ const ws = this.ws;
61
+ this.ws = undefined;
62
+ await new Promise((resolve) => {
63
+ ws.onclose = () => resolve();
64
+ try {
65
+ ws.close();
66
+ }
67
+ catch {
68
+ resolve();
69
+ }
70
+ });
71
+ }
72
+ }
73
+
74
+ class HttpPollingTransport {
75
+ constructor(baseUrl) {
76
+ this.listeners = new Set();
77
+ this.baseUrl = baseUrl.replace(/\/$/, "");
78
+ }
79
+ async connect() {
80
+ // Start polling loop
81
+ if (this.polling)
82
+ return;
83
+ const tick = async () => {
84
+ try {
85
+ const url = new URL(this.baseUrl + "/events");
86
+ if (this.cursor)
87
+ url.searchParams.set("cursor", this.cursor);
88
+ const res = await fetch(url.toString());
89
+ if (!res.ok)
90
+ return;
91
+ const batch = (await res.json());
92
+ for (const env of batch) {
93
+ this.cursor = String(env.seq ?? Date.now());
94
+ for (const l of Array.from(this.listeners))
95
+ l(env);
96
+ }
97
+ }
98
+ catch { }
99
+ };
100
+ this.polling = setInterval(tick, 200);
101
+ }
102
+ async request(msg) {
103
+ const res = await fetch(this.baseUrl + "/command", {
104
+ method: "POST",
105
+ headers: { "content-type": "application/json" },
106
+ body: JSON.stringify(msg),
107
+ });
108
+ const data = (await res.json());
109
+ return data;
110
+ }
111
+ send(msg) {
112
+ void fetch(this.baseUrl + "/command", {
113
+ method: "POST",
114
+ headers: { "content-type": "application/json" },
115
+ body: JSON.stringify(msg),
116
+ });
117
+ }
118
+ subscribe(cb) {
119
+ this.listeners.add(cb);
120
+ return () => this.listeners.delete(cb);
121
+ }
122
+ async close() {
123
+ if (this.polling)
124
+ clearInterval(this.polling);
125
+ this.polling = undefined;
126
+ }
127
+ }
128
+
129
+ class RemoteEngine {
130
+ constructor(transport) {
131
+ this.transport = transport;
132
+ this.listeners = new Map();
133
+ this.cache = new Map();
134
+ this.transport.subscribe((env) => this.onEnvelope(env));
135
+ }
136
+ onEnvelope(env) {
137
+ const msg = env.message;
138
+ if (!msg)
139
+ return;
140
+ if (msg.type === "value") {
141
+ const key = `${msg.payload.nodeId}.${msg.payload.handle}`;
142
+ this.cache.set(key, msg.payload.value);
143
+ this.emit("value", msg.payload);
144
+ }
145
+ else if (msg.type === "error") {
146
+ this.emit("error", msg.payload);
147
+ }
148
+ else if (msg.type === "invalidate") {
149
+ this.emit("invalidate", msg.payload);
150
+ }
151
+ else if (msg.type === "stats") {
152
+ this.emit("stats", msg.payload);
153
+ }
154
+ }
155
+ launch() {
156
+ this.transport.send({ message: { type: "Launch" } });
157
+ }
158
+ setInput(nodeId, handle, value) {
159
+ this.transport.send({
160
+ message: { type: "SetInput", payload: { nodeId, handle, value } },
161
+ });
162
+ }
163
+ triggerExternal(nodeId, event) {
164
+ this.transport.send({
165
+ message: { type: "TriggerExternal", payload: { nodeId, event } },
166
+ });
167
+ }
168
+ on(event, handler) {
169
+ if (!this.listeners.has(event))
170
+ this.listeners.set(event, new Set());
171
+ const set = this.listeners.get(event);
172
+ set.add(handler);
173
+ return () => set.delete(handler);
174
+ }
175
+ emit(event, payload) {
176
+ const set = this.listeners.get(event);
177
+ if (set)
178
+ for (const h of Array.from(set))
179
+ h(payload);
180
+ }
181
+ getOutput(nodeId, output) {
182
+ return this.cache.get(`${nodeId}.${output}`);
183
+ }
184
+ async whenIdle() {
185
+ await this.transport.request({ message: { type: "WhenIdle" } });
186
+ }
187
+ dispose() {
188
+ this.transport.send({ message: { type: "Dispose" } });
189
+ }
190
+ }
191
+
192
+ class RemoteRunner {
193
+ constructor(transport) {
194
+ this.transport = transport;
195
+ this.engine = new RemoteEngine(transport);
196
+ }
197
+ async build(def, opts) {
198
+ await this.transport.request({
199
+ message: {
200
+ type: "Build",
201
+ payload: { def, environment: opts?.environment },
202
+ },
203
+ });
204
+ }
205
+ async update(def) {
206
+ await this.transport.request({
207
+ message: { type: "Update", payload: { def } },
208
+ });
209
+ }
210
+ getEngine() {
211
+ return this.engine;
212
+ }
213
+ }
214
+
215
+ /* eslint-disable @typescript-eslint/no-explicit-any */
216
+ function summarize(value, maxLen = 120) {
217
+ try {
218
+ const s = typeof value === "string" ? value : JSON.stringify(value);
219
+ return s.length > maxLen ? s.slice(0, maxLen) + "…" : s;
220
+ }
221
+ catch {
222
+ return String(value);
223
+ }
224
+ }
225
+ function serializeError(err) {
226
+ try {
227
+ if (!err)
228
+ return { message: String(err) };
229
+ const errAny = err;
230
+ if (err instanceof Error) {
231
+ const base = {
232
+ name: err.name,
233
+ message: err.message,
234
+ stack: err.stack,
235
+ };
236
+ for (const k of Object.keys(errAny))
237
+ base[k] = errAny[k];
238
+ return base;
239
+ }
240
+ if (typeof err === "object") {
241
+ const maybeMsg = errAny?.message;
242
+ const maybeName = errAny?.name;
243
+ const maybeStack = errAny?.stack;
244
+ const out = { ...errAny };
245
+ if (maybeMsg && !out.message)
246
+ out.message = String(maybeMsg);
247
+ if (maybeName && !out.name)
248
+ out.name = String(maybeName);
249
+ if (maybeStack && !out.stack)
250
+ out.stack = String(maybeStack);
251
+ return out;
252
+ }
253
+ return { message: String(err) };
254
+ }
255
+ catch {
256
+ return { message: String(err) };
257
+ }
258
+ }
259
+
260
+ async function handleCommand(label, env, runtimeApi, ack) {
261
+ const msg = env.message;
262
+ switch (msg.type) {
263
+ case "Build": {
264
+ 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(",")}`);
265
+ await runtimeApi.build(msg.payload.def, msg.payload.environment);
266
+ ack();
267
+ break;
268
+ }
269
+ case "Update": {
270
+ console.debug(`[${label}] rx Update seq=${env.seq} nodes=${msg.payload.def.nodes?.length ?? 0} edges=${msg.payload.def.edges?.length ?? 0}`);
271
+ await runtimeApi.update(msg.payload.def);
272
+ ack();
273
+ break;
274
+ }
275
+ case "SetInput": {
276
+ console.debug(`[${label}] rx SetInput seq=${env.seq} ${msg.payload.nodeId}.${msg.payload.handle}=${summarize(msg.payload.value)}`);
277
+ runtimeApi.setInput(msg.payload.nodeId, msg.payload.handle, msg.payload.value);
278
+ ack();
279
+ break;
280
+ }
281
+ case "TriggerExternal": {
282
+ console.debug(`[${label}] rx TriggerExternal seq=${env.seq} ${msg.payload.nodeId} event=${summarize(msg.payload.event)}`);
283
+ runtimeApi.triggerExternal(msg.payload.nodeId, msg.payload.event);
284
+ ack();
285
+ break;
286
+ }
287
+ case "Launch": {
288
+ console.debug(`[${label}] rx Launch seq=${env.seq}`);
289
+ runtimeApi.launch();
290
+ ack();
291
+ break;
292
+ }
293
+ case "WhenIdle": {
294
+ console.debug(`[${label}] rx WhenIdle seq=${env.seq}`);
295
+ await runtimeApi.whenIdle();
296
+ ack();
297
+ break;
298
+ }
299
+ case "Snapshot": {
300
+ console.debug(`[${label}] rx Snapshot seq=${env.seq}`);
301
+ ack({ snapshot: { ok: true } });
302
+ break;
303
+ }
304
+ case "Dispose": {
305
+ console.debug(`[${label}] rx Dispose seq=${env.seq}`);
306
+ runtimeApi.dispose();
307
+ ack();
308
+ break;
309
+ }
310
+ case "Pause":
311
+ case "Resume": {
312
+ console.debug(`[${label}] rx ${msg.type} seq=${env.seq} (not-impl)`);
313
+ ack();
314
+ break;
315
+ }
316
+ default: {
317
+ console.debug(`[${label}] rx Unknown type seq=${env.seq}`);
318
+ ack();
319
+ }
320
+ }
321
+ }
322
+
323
+ function createRuntimeAdapter(createRegistry, send) {
324
+ const registry = createRegistry();
325
+ const builder = new sparkGraph.GraphBuilder(registry);
326
+ let graphRuntime;
327
+ return {
328
+ async build(def, opts) {
329
+ graphRuntime = builder.build(def, { environment: opts });
330
+ graphRuntime.on("value", (p) => send({ message: { type: "value", payload: p } }));
331
+ graphRuntime.on("invalidate", (p) => send({ message: { type: "invalidate", payload: p } }));
332
+ graphRuntime.on("error", (p) => send({ message: { type: "error", payload: p } }));
333
+ graphRuntime.on("stats", (p) => send({ message: { type: "stats", payload: p } }));
334
+ },
335
+ async update(def) {
336
+ if (!graphRuntime)
337
+ return;
338
+ graphRuntime.update(def, registry);
339
+ },
340
+ setInput(nodeId, handle, value) {
341
+ graphRuntime?.setInput(nodeId, handle, value);
342
+ },
343
+ triggerExternal(nodeId, event) {
344
+ graphRuntime?.triggerExternal(nodeId, event);
345
+ },
346
+ launch() {
347
+ graphRuntime?.launch();
348
+ },
349
+ whenIdle() {
350
+ return graphRuntime?.whenIdle?.() ?? Promise.resolve();
351
+ },
352
+ dispose() {
353
+ graphRuntime?.dispose?.();
354
+ graphRuntime = undefined;
355
+ },
356
+ };
357
+ }
358
+
359
+ exports.HttpPollingTransport = HttpPollingTransport;
360
+ exports.RemoteEngine = RemoteEngine;
361
+ exports.RemoteRunner = RemoteRunner;
362
+ exports.WebSocketTransport = WebSocketTransport;
363
+ exports.createRuntimeAdapter = createRuntimeAdapter;
364
+ exports.handleCommand = handleCommand;
365
+ exports.serializeError = serializeError;
366
+ exports.summarize = summarize;
367
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","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":["WebSocket","GraphBuilder"],"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"}