@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.
- package/lib/cjs/index.cjs +367 -0
- package/lib/cjs/index.cjs.map +1 -0
- package/lib/cjs/src/RemoteEngine.d.ts +18 -0
- package/lib/cjs/src/RemoteEngine.d.ts.map +1 -0
- package/lib/cjs/src/RemoteRunner.d.ts +13 -0
- package/lib/cjs/src/RemoteRunner.d.ts.map +1 -0
- package/lib/cjs/src/examples/http-polling.d.ts +2 -0
- package/lib/cjs/src/examples/http-polling.d.ts.map +1 -0
- package/lib/cjs/src/examples/shared.d.ts +8 -0
- package/lib/cjs/src/examples/shared.d.ts.map +1 -0
- package/lib/cjs/src/examples/unix-socket.d.ts +2 -0
- package/lib/cjs/src/examples/unix-socket.d.ts.map +1 -0
- package/lib/cjs/src/examples/websocket.d.ts +2 -0
- package/lib/cjs/src/examples/websocket.d.ts.map +1 -0
- package/lib/cjs/src/index.d.ts +10 -0
- package/lib/cjs/src/index.d.ts.map +1 -0
- package/lib/cjs/src/protocol.d.ts +2 -0
- package/lib/cjs/src/protocol.d.ts.map +1 -0
- package/lib/cjs/src/server/command.d.ts +4 -0
- package/lib/cjs/src/server/command.d.ts.map +1 -0
- package/lib/cjs/src/server/errors.d.ts +3 -0
- package/lib/cjs/src/server/errors.d.ts.map +1 -0
- package/lib/cjs/src/server/runtime.d.ts +14 -0
- package/lib/cjs/src/server/runtime.d.ts.map +1 -0
- package/lib/cjs/src/transport/HttpPollingTransport.d.ts +15 -0
- package/lib/cjs/src/transport/HttpPollingTransport.d.ts.map +1 -0
- package/lib/cjs/src/transport/Transport.d.ts +9 -0
- package/lib/cjs/src/transport/Transport.d.ts.map +1 -0
- package/lib/cjs/src/transport/UnixSocketTransport.d.ts +17 -0
- package/lib/cjs/src/transport/UnixSocketTransport.d.ts.map +1 -0
- package/lib/cjs/src/transport/WebSocketTransport.d.ts +14 -0
- package/lib/cjs/src/transport/WebSocketTransport.d.ts.map +1 -0
- package/lib/esm/index.js +358 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/src/RemoteEngine.d.ts +18 -0
- package/lib/esm/src/RemoteEngine.d.ts.map +1 -0
- package/lib/esm/src/RemoteRunner.d.ts +13 -0
- package/lib/esm/src/RemoteRunner.d.ts.map +1 -0
- package/lib/esm/src/examples/http-polling.d.ts +2 -0
- package/lib/esm/src/examples/http-polling.d.ts.map +1 -0
- package/lib/esm/src/examples/shared.d.ts +8 -0
- package/lib/esm/src/examples/shared.d.ts.map +1 -0
- package/lib/esm/src/examples/unix-socket.d.ts +2 -0
- package/lib/esm/src/examples/unix-socket.d.ts.map +1 -0
- package/lib/esm/src/examples/websocket.d.ts +2 -0
- package/lib/esm/src/examples/websocket.d.ts.map +1 -0
- package/lib/esm/src/index.d.ts +10 -0
- package/lib/esm/src/index.d.ts.map +1 -0
- package/lib/esm/src/protocol.d.ts +2 -0
- package/lib/esm/src/protocol.d.ts.map +1 -0
- package/lib/esm/src/server/command.d.ts +4 -0
- package/lib/esm/src/server/command.d.ts.map +1 -0
- package/lib/esm/src/server/errors.d.ts +3 -0
- package/lib/esm/src/server/errors.d.ts.map +1 -0
- package/lib/esm/src/server/runtime.d.ts +14 -0
- package/lib/esm/src/server/runtime.d.ts.map +1 -0
- package/lib/esm/src/transport/HttpPollingTransport.d.ts +15 -0
- package/lib/esm/src/transport/HttpPollingTransport.d.ts.map +1 -0
- package/lib/esm/src/transport/Transport.d.ts +9 -0
- package/lib/esm/src/transport/Transport.d.ts.map +1 -0
- package/lib/esm/src/transport/UnixSocketTransport.d.ts +17 -0
- package/lib/esm/src/transport/UnixSocketTransport.d.ts.map +1 -0
- package/lib/esm/src/transport/WebSocketTransport.d.ts +14 -0
- package/lib/esm/src/transport/WebSocketTransport.d.ts.map +1 -0
- package/package.json +55 -0
package/lib/esm/index.js
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"unix-socket.d.ts","sourceRoot":"","sources":["../../../../src/examples/unix-socket.ts"],"names":[],"mappings":""}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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"}
|