@bian-womp/spark-remote 0.3.90 → 0.3.91
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/package.json +3 -3
- package/lib/src/RemoteEngine.d.ts +0 -35
- package/lib/src/RemoteEngine.d.ts.map +0 -1
- package/lib/src/RemoteEngine.js +0 -115
- package/lib/src/RemoteEngine.js.map +0 -1
- package/lib/src/RemoteGraphLifecycleApi.d.ts +0 -47
- package/lib/src/RemoteGraphLifecycleApi.d.ts.map +0 -1
- package/lib/src/RemoteGraphLifecycleApi.js +0 -190
- package/lib/src/RemoteGraphLifecycleApi.js.map +0 -1
- package/lib/src/RemoteRuntimeClient.d.ts +0 -85
- package/lib/src/RemoteRuntimeClient.d.ts.map +0 -1
- package/lib/src/RemoteRuntimeClient.js +0 -212
- package/lib/src/RemoteRuntimeClient.js.map +0 -1
- package/lib/src/examples/http-polling.d.ts +0 -2
- package/lib/src/examples/http-polling.d.ts.map +0 -1
- package/lib/src/examples/http-polling.js +0 -67
- package/lib/src/examples/http-polling.js.map +0 -1
- package/lib/src/examples/shared.d.ts +0 -6
- package/lib/src/examples/shared.d.ts.map +0 -1
- package/lib/src/examples/shared.js +0 -71
- package/lib/src/examples/shared.js.map +0 -1
- package/lib/src/examples/unix-socket.d.ts +0 -2
- package/lib/src/examples/unix-socket.d.ts.map +0 -1
- package/lib/src/examples/unix-socket.js +0 -67
- package/lib/src/examples/unix-socket.js.map +0 -1
- package/lib/src/examples/websocket.d.ts +0 -2
- package/lib/src/examples/websocket.d.ts.map +0 -1
- package/lib/src/examples/websocket.js +0 -67
- package/lib/src/examples/websocket.js.map +0 -1
- package/lib/src/index.d.ts +0 -13
- package/lib/src/index.d.ts.map +0 -1
- package/lib/src/index.js +0 -12
- package/lib/src/index.js.map +0 -1
- package/lib/src/server/ServerCommandHandler.d.ts +0 -51
- package/lib/src/server/ServerCommandHandler.d.ts.map +0 -1
- package/lib/src/server/ServerCommandHandler.js +0 -325
- package/lib/src/server/ServerCommandHandler.js.map +0 -1
- package/lib/src/server/ServerRuntimeAdapter.d.ts +0 -27
- package/lib/src/server/ServerRuntimeAdapter.d.ts.map +0 -1
- package/lib/src/server/ServerRuntimeAdapter.js +0 -446
- package/lib/src/server/ServerRuntimeAdapter.js.map +0 -1
- package/lib/src/server/errors.d.ts +0 -3
- package/lib/src/server/errors.d.ts.map +0 -1
- package/lib/src/server/errors.js +0 -44
- package/lib/src/server/errors.js.map +0 -1
- package/lib/src/transport/HttpPollingTransport.d.ts +0 -16
- package/lib/src/transport/HttpPollingTransport.d.ts.map +0 -1
- package/lib/src/transport/HttpPollingTransport.js +0 -83
- package/lib/src/transport/HttpPollingTransport.js.map +0 -1
- package/lib/src/transport/Seq.d.ts +0 -6
- package/lib/src/transport/Seq.d.ts.map +0 -1
- package/lib/src/transport/Seq.js +0 -18
- package/lib/src/transport/Seq.js.map +0 -1
- package/lib/src/transport/Transport.d.ts +0 -26
- package/lib/src/transport/Transport.d.ts.map +0 -1
- package/lib/src/transport/Transport.js +0 -2
- package/lib/src/transport/Transport.js.map +0 -1
- package/lib/src/transport/UnixSocketTransport.d.ts +0 -18
- package/lib/src/transport/UnixSocketTransport.d.ts.map +0 -1
- package/lib/src/transport/UnixSocketTransport.js +0 -96
- package/lib/src/transport/UnixSocketTransport.js.map +0 -1
- package/lib/src/transport/WebSocketConnector.d.ts +0 -63
- package/lib/src/transport/WebSocketConnector.d.ts.map +0 -1
- package/lib/src/transport/WebSocketConnector.js +0 -2
- package/lib/src/transport/WebSocketConnector.js.map +0 -1
- package/lib/src/transport/WebSocketTransport.d.ts +0 -44
- package/lib/src/transport/WebSocketTransport.d.ts.map +0 -1
- package/lib/src/transport/WebSocketTransport.js +0 -226
- package/lib/src/transport/WebSocketTransport.js.map +0 -1
- package/lib/src/utils/inputEncoding.d.ts +0 -7
- package/lib/src/utils/inputEncoding.d.ts.map +0 -1
- package/lib/src/utils/inputEncoding.js +0 -19
- package/lib/src/utils/inputEncoding.js.map +0 -1
package/lib/src/transport/Seq.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export class SeqGenerator {
|
|
2
|
-
constructor() {
|
|
3
|
-
this.lastMs = 0;
|
|
4
|
-
this.seqInMs = 0;
|
|
5
|
-
}
|
|
6
|
-
next() {
|
|
7
|
-
const now = Date.now();
|
|
8
|
-
if (now === this.lastMs) {
|
|
9
|
-
this.seqInMs = (this.seqInMs + 1) % 1000;
|
|
10
|
-
}
|
|
11
|
-
else {
|
|
12
|
-
this.lastMs = now;
|
|
13
|
-
this.seqInMs = 0;
|
|
14
|
-
}
|
|
15
|
-
return now * 1000 + this.seqInMs;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=Seq.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Seq.js","sourceRoot":"","sources":["../../../src/transport/Seq.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAY;IAAzB;QACU,WAAM,GAAG,CAAC,CAAC;QACX,YAAO,GAAG,CAAC,CAAC;IAYtB,CAAC;IAVC,IAAI;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { Envelope } from "@bian-womp/spark-protocol";
|
|
2
|
-
/**
|
|
3
|
-
* Connection parameters that can be passed to transports.
|
|
4
|
-
* Values are converted to strings for query parameters.
|
|
5
|
-
* Undefined values are filtered out.
|
|
6
|
-
*/
|
|
7
|
-
export type TransportConnectParams = Record<string, string | number | undefined>;
|
|
8
|
-
/**
|
|
9
|
-
* Generic connection options for transports.
|
|
10
|
-
* Allows extensions to pass domain-specific parameters (e.g., flowId).
|
|
11
|
-
*/
|
|
12
|
-
export interface TransportConnectOptions {
|
|
13
|
-
/**
|
|
14
|
-
* Generic connection parameters to be included in URLs/requests.
|
|
15
|
-
* Values are converted to strings for query parameters.
|
|
16
|
-
*/
|
|
17
|
-
params?: TransportConnectParams;
|
|
18
|
-
}
|
|
19
|
-
export interface Transport {
|
|
20
|
-
connect(options?: TransportConnectOptions): Promise<void>;
|
|
21
|
-
request<TReq = unknown, TRes = unknown>(msg: Envelope<TReq>): Promise<Envelope<TRes>>;
|
|
22
|
-
send<TReq = unknown>(msg: Envelope<TReq>): void;
|
|
23
|
-
subscribe(cb: (event: Envelope<any>) => void): () => void;
|
|
24
|
-
close(): Promise<void>;
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=Transport.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Transport.d.ts","sourceRoot":"","sources":["../../../src/transport/Transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;AAEjF;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,MAAM,CAAC,EAAE,sBAAsB,CAAC;CACjC;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,GAAG,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACtF,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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Transport.js","sourceRoot":"","sources":["../../../src/transport/Transport.ts"],"names":[],"mappings":""}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { Envelope } from "@bian-womp/spark-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
|
-
private seq;
|
|
10
|
-
constructor(socketPath: string);
|
|
11
|
-
connect(): Promise<void>;
|
|
12
|
-
private onData;
|
|
13
|
-
request<TReq = unknown, TRes = unknown>(msg: Envelope<TReq>): Promise<Envelope<TRes>>;
|
|
14
|
-
send<TReq = unknown>(msg: Envelope<TReq>): void;
|
|
15
|
-
subscribe(cb: (event: Envelope<any>) => void): () => void;
|
|
16
|
-
close(): Promise<void>;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=UnixSocketTransport.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UnixSocketTransport.d.ts","sourceRoot":"","sources":["../../../src/transport/UnixSocketTransport.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQ7C,qBAAa,mBAAoB,YAAW,SAAS;IAOvC,OAAO,CAAC,UAAU;IAN9B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,SAAS,CAA6C;IAC9D,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,OAAO,CAAmD;IAClE,OAAO,CAAC,GAAG,CAAsB;gBAEb,UAAU,EAAE,MAAM;IAEhC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9B,OAAO,CAAC,MAAM;IAuBR,OAAO,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,GAAG,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAU3F,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"}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
// Node-only transport using a UNIX domain socket.
|
|
2
|
-
// Import directly from path: "@bian-womp/spark-remote/transport/UnixSocketTransport" in Node/Electron code.
|
|
3
|
-
// Do not re-export from the browser index to avoid bundling in web builds.
|
|
4
|
-
import { SeqGenerator } from "./Seq";
|
|
5
|
-
export class UnixSocketTransport {
|
|
6
|
-
constructor(socketPath) {
|
|
7
|
-
this.socketPath = socketPath;
|
|
8
|
-
this.listeners = new Set();
|
|
9
|
-
this.buffer = "";
|
|
10
|
-
this.waiters = new Map();
|
|
11
|
-
this.seq = new SeqGenerator();
|
|
12
|
-
}
|
|
13
|
-
async connect() {
|
|
14
|
-
if (typeof process === "undefined") {
|
|
15
|
-
throw new Error("UnixSocketTransport requires a Node environment");
|
|
16
|
-
}
|
|
17
|
-
if (this.socket)
|
|
18
|
-
return;
|
|
19
|
-
const { createConnection } = await import("node:net");
|
|
20
|
-
const sock = createConnection(this.socketPath);
|
|
21
|
-
this.socket = sock;
|
|
22
|
-
await new Promise((resolve, reject) => {
|
|
23
|
-
sock.once("connect", () => resolve());
|
|
24
|
-
sock.once("error", (e) => reject(e));
|
|
25
|
-
});
|
|
26
|
-
sock.on("data", (chunk) => this.onData(chunk));
|
|
27
|
-
sock.on("error", () => {
|
|
28
|
-
/* noop, surface via request waiters if needed */
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
onData(chunk) {
|
|
32
|
-
this.buffer += chunk.toString("utf8");
|
|
33
|
-
let idx = this.buffer.indexOf("\n");
|
|
34
|
-
while (idx >= 0) {
|
|
35
|
-
const raw = this.buffer.slice(0, idx);
|
|
36
|
-
this.buffer = this.buffer.slice(idx + 1);
|
|
37
|
-
idx = this.buffer.indexOf("\n");
|
|
38
|
-
if (!raw.trim())
|
|
39
|
-
continue;
|
|
40
|
-
try {
|
|
41
|
-
const env = JSON.parse(raw);
|
|
42
|
-
if (env && typeof env.seq === "number" && this.waiters.has(env.seq)) {
|
|
43
|
-
const fn = this.waiters.get(env.seq);
|
|
44
|
-
this.waiters.delete(env.seq);
|
|
45
|
-
fn(env);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
for (const l of Array.from(this.listeners))
|
|
49
|
-
l(env);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
// ignore malformed frames
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
async request(msg) {
|
|
58
|
-
const seq = typeof msg.seq === "number" ? msg.seq : this.seq.next();
|
|
59
|
-
const env = { ...msg, seq };
|
|
60
|
-
const p = new Promise((resolve) => {
|
|
61
|
-
this.waiters.set(seq, (incoming) => resolve(incoming));
|
|
62
|
-
});
|
|
63
|
-
this.send(env);
|
|
64
|
-
return p;
|
|
65
|
-
}
|
|
66
|
-
send(msg) {
|
|
67
|
-
const s = this.socket;
|
|
68
|
-
if (!s)
|
|
69
|
-
return;
|
|
70
|
-
try {
|
|
71
|
-
s.write(JSON.stringify(msg) + "\n");
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
// ignore
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
subscribe(cb) {
|
|
78
|
-
this.listeners.add(cb);
|
|
79
|
-
return () => this.listeners.delete(cb);
|
|
80
|
-
}
|
|
81
|
-
async close() {
|
|
82
|
-
const s = this.socket;
|
|
83
|
-
this.socket = undefined;
|
|
84
|
-
if (!s)
|
|
85
|
-
return;
|
|
86
|
-
await new Promise((resolve) => {
|
|
87
|
-
try {
|
|
88
|
-
s.end(() => resolve());
|
|
89
|
-
}
|
|
90
|
-
catch {
|
|
91
|
-
resolve();
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
//# sourceMappingURL=UnixSocketTransport.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UnixSocketTransport.js","sourceRoot":"","sources":["../../../src/transport/UnixSocketTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WebSocket event handlers for connection lifecycle events.
|
|
3
|
-
*/
|
|
4
|
-
export interface WebSocketHandlers {
|
|
5
|
-
onopen?: (ev: Event) => void;
|
|
6
|
-
onmessage?: (ev: MessageEvent) => void;
|
|
7
|
-
onerror?: (ev: Event) => void;
|
|
8
|
-
onclose?: (ev: CloseEvent) => void;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Parameters for establishing a WebSocket connection.
|
|
12
|
-
*/
|
|
13
|
-
export interface WebSocketConnectParams {
|
|
14
|
-
/**
|
|
15
|
-
* WebSocket URL (ws:// or wss://)
|
|
16
|
-
*/
|
|
17
|
-
url: string;
|
|
18
|
-
/**
|
|
19
|
-
* Query parameters to append to the URL.
|
|
20
|
-
* Values are converted to strings; undefined/null values are filtered out.
|
|
21
|
-
*/
|
|
22
|
-
params?: Record<string, string | number | boolean | null | undefined>;
|
|
23
|
-
/**
|
|
24
|
-
* If true, skip authentication (don't append token to URL).
|
|
25
|
-
*/
|
|
26
|
-
noAuth?: boolean;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Generic WebSocket type that can be either browser WebSocket or Node.js WebSocket.
|
|
30
|
-
* This allows the connector to work in both environments.
|
|
31
|
-
*/
|
|
32
|
-
export type GenericWebSocket = WebSocket | {
|
|
33
|
-
readyState: number;
|
|
34
|
-
send(data: string | ArrayBuffer | Blob): void;
|
|
35
|
-
close(code?: number, reason?: string): void;
|
|
36
|
-
onopen: ((ev: Event) => void) | null;
|
|
37
|
-
onmessage: ((ev: MessageEvent) => void) | null;
|
|
38
|
-
onerror: ((ev: Event) => void) | null;
|
|
39
|
-
onclose: ((ev: CloseEvent) => void) | null;
|
|
40
|
-
on?(event: string, handler: () => void): void;
|
|
41
|
-
off?(event: string, handler: () => void): void;
|
|
42
|
-
ping?(): void;
|
|
43
|
-
terminate?(): void;
|
|
44
|
-
};
|
|
45
|
-
/**
|
|
46
|
-
* Interface for establishing WebSocket connections with optional authentication handling.
|
|
47
|
-
*
|
|
48
|
-
* This allows transports to delegate connection establishment to external systems
|
|
49
|
-
* that handle authentication, token refresh, and retry logic (e.g., runSocket in swan-frontend).
|
|
50
|
-
*
|
|
51
|
-
* The connector should:
|
|
52
|
-
* 1. Build the final URL with query parameters
|
|
53
|
-
* 2. Establish the WebSocket connection
|
|
54
|
-
* 3. Set up the provided event handlers
|
|
55
|
-
* 4. Return the WebSocket instance once connected
|
|
56
|
-
* 5. Handle authentication errors (e.g., 4401) and retry with refreshed tokens
|
|
57
|
-
*
|
|
58
|
-
* @param params Connection parameters (URL, query params, auth flag)
|
|
59
|
-
* @param handlers Event handlers to attach to the WebSocket
|
|
60
|
-
* @returns Promise resolving to the connected WebSocket instance
|
|
61
|
-
*/
|
|
62
|
-
export type WebSocketConnector = (params: WebSocketConnectParams, handlers: WebSocketHandlers) => Promise<GenericWebSocket>;
|
|
63
|
-
//# sourceMappingURL=WebSocketConnector.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketConnector.d.ts","sourceRoot":"","sources":["../../../src/transport/WebSocketConnector.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,KAAK,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,KAAK,IAAI,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACtE;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT;IACE,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,YAAY,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/C,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3C,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC9C,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC/C,IAAI,CAAC,IAAI,IAAI,CAAC;IACd,SAAS,CAAC,IAAI,IAAI,CAAC;CACpB,CAAC;AAEN;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,MAAM,EAAE,sBAAsB,EAC9B,QAAQ,EAAE,iBAAiB,KACxB,OAAO,CAAC,gBAAgB,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketConnector.js","sourceRoot":"","sources":["../../../src/transport/WebSocketConnector.ts"],"names":[],"mappings":""}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type { Envelope } from "@bian-womp/spark-protocol";
|
|
2
|
-
import type { Transport, TransportConnectOptions } from "./Transport";
|
|
3
|
-
import type { WebSocketConnector } from "./WebSocketConnector";
|
|
4
|
-
/**
|
|
5
|
-
* WebSocket transport connection options.
|
|
6
|
-
* Allows extensions to pass domain-specific parameters (e.g., flowId).
|
|
7
|
-
*/
|
|
8
|
-
export interface WebSocketTransportConnectOptions extends TransportConnectOptions {
|
|
9
|
-
/**
|
|
10
|
-
* Optional WebSocket connector for WebSocketTransport.
|
|
11
|
-
* If provided, WebSocketTransport will use this connector instead of
|
|
12
|
-
* creating WebSocket connections directly. This allows external systems
|
|
13
|
-
* to handle authentication, token refresh, and retry logic.
|
|
14
|
-
*/
|
|
15
|
-
connector?: WebSocketConnector;
|
|
16
|
-
}
|
|
17
|
-
export declare class WebSocketTransport implements Transport {
|
|
18
|
-
private ws?;
|
|
19
|
-
private listeners;
|
|
20
|
-
private baseUrl;
|
|
21
|
-
private seq;
|
|
22
|
-
private pingInterval?;
|
|
23
|
-
private pongTimeout?;
|
|
24
|
-
private isAlive;
|
|
25
|
-
private readonly PING_INTERVAL_MS;
|
|
26
|
-
private readonly PONG_TIMEOUT_MS;
|
|
27
|
-
private onConnectionLost?;
|
|
28
|
-
private pongHandler?;
|
|
29
|
-
private connector?;
|
|
30
|
-
constructor(url: string, options?: {
|
|
31
|
-
onConnectionLost?: () => void;
|
|
32
|
-
connector?: WebSocketConnector;
|
|
33
|
-
});
|
|
34
|
-
connect(options?: WebSocketTransportConnectOptions): Promise<void>;
|
|
35
|
-
private connectWithConnector;
|
|
36
|
-
private connectDirect;
|
|
37
|
-
private startHeartbeat;
|
|
38
|
-
private stopHeartbeat;
|
|
39
|
-
request<TReq = unknown, TRes = unknown>(msg: Envelope<TReq>): Promise<Envelope<TRes>>;
|
|
40
|
-
send<TReq = unknown>(msg: Envelope<TReq>): void;
|
|
41
|
-
subscribe(cb: (event: Envelope<any>) => void): () => void;
|
|
42
|
-
close(): Promise<void>;
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=WebSocketTransport.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketTransport.d.ts","sourceRoot":"","sources":["../../../src/transport/WebSocketTransport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/D;;;GAGG;AACH,MAAM,WAAW,gCAAiC,SAAQ,uBAAuB;IAC/E;;;;;OAKG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC;AAOD,qBAAa,kBAAmB,YAAW,SAAS;IAClD,OAAO,CAAC,EAAE,CAAC,CAAY;IACvB,OAAO,CAAC,SAAS,CAA6C;IAC9D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,GAAG,CAAsB;IAEjC,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,WAAW,CAAC,CAAiB;IACrC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,gBAAgB,CAAC,CAAa;IACtC,OAAO,CAAC,WAAW,CAAC,CAAa;IACjC,OAAO,CAAC,SAAS,CAAC,CAAqB;gBAGrC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QACR,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;QAC9B,SAAS,CAAC,EAAE,kBAAkB,CAAC;KAChC;IAOG,OAAO,CAAC,OAAO,CAAC,EAAE,gCAAgC,GAAG,OAAO,CAAC,IAAI,CAAC;YAa1D,oBAAoB;YAiEpB,aAAa;IA2C3B,OAAO,CAAC,cAAc;IAmDtB,OAAO,CAAC,aAAa;IAgBf,OAAO,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,GAAG,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAe3F,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;CAc7B"}
|
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
import { WebSocket } from "ws";
|
|
2
|
-
import { SeqGenerator } from "./Seq";
|
|
3
|
-
const CONNECTING = 0;
|
|
4
|
-
const OPEN = 1;
|
|
5
|
-
const CLOSING = 2;
|
|
6
|
-
const CLOSED = 3;
|
|
7
|
-
export class WebSocketTransport {
|
|
8
|
-
constructor(url, options) {
|
|
9
|
-
this.listeners = new Set();
|
|
10
|
-
this.seq = new SeqGenerator();
|
|
11
|
-
this.isAlive = false;
|
|
12
|
-
this.PING_INTERVAL_MS = 30000;
|
|
13
|
-
this.PONG_TIMEOUT_MS = 10000;
|
|
14
|
-
this.baseUrl = url;
|
|
15
|
-
this.onConnectionLost = options?.onConnectionLost;
|
|
16
|
-
this.connector = options?.connector;
|
|
17
|
-
}
|
|
18
|
-
async connect(options) {
|
|
19
|
-
if (this.ws && this.ws.readyState === OPEN)
|
|
20
|
-
return;
|
|
21
|
-
// Use connector if provided (e.g., from runSocket), otherwise use direct connection
|
|
22
|
-
const connector = options?.connector || this.connector;
|
|
23
|
-
if (connector) {
|
|
24
|
-
await this.connectWithConnector(connector, options);
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
await this.connectDirect(options);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
async connectWithConnector(connector, options) {
|
|
31
|
-
// Build base URL
|
|
32
|
-
let url;
|
|
33
|
-
if (this.baseUrl.startsWith("ws://") || this.baseUrl.startsWith("wss://")) {
|
|
34
|
-
url = new URL(this.baseUrl);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
const wsBaseUrl = this.baseUrl.replace(/^http/, "ws");
|
|
38
|
-
url = new URL(wsBaseUrl);
|
|
39
|
-
}
|
|
40
|
-
// Convert params to the format expected by WebSocketConnector
|
|
41
|
-
const params = {};
|
|
42
|
-
if (options?.params) {
|
|
43
|
-
for (const [key, value] of Object.entries(options.params)) {
|
|
44
|
-
if (value !== undefined && value !== null) {
|
|
45
|
-
params[key] = value;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
// Use connector to establish connection
|
|
50
|
-
// The connector handles auth, token refresh, and retries
|
|
51
|
-
const connectedWs = await connector({
|
|
52
|
-
url: url.toString(),
|
|
53
|
-
params,
|
|
54
|
-
noAuth: false,
|
|
55
|
-
}, {
|
|
56
|
-
onopen: () => {
|
|
57
|
-
// Heartbeat will be started after connection is established
|
|
58
|
-
this.startHeartbeat();
|
|
59
|
-
},
|
|
60
|
-
onmessage: (ev) => {
|
|
61
|
-
// Forward messages to listeners
|
|
62
|
-
try {
|
|
63
|
-
const env = JSON.parse(String(ev.data));
|
|
64
|
-
for (const l of Array.from(this.listeners))
|
|
65
|
-
l(env);
|
|
66
|
-
}
|
|
67
|
-
catch { }
|
|
68
|
-
},
|
|
69
|
-
onerror: () => {
|
|
70
|
-
// Errors are handled by the connector (retry logic, etc.)
|
|
71
|
-
},
|
|
72
|
-
onclose: () => {
|
|
73
|
-
// Stop heartbeat on close
|
|
74
|
-
this.stopHeartbeat();
|
|
75
|
-
},
|
|
76
|
-
});
|
|
77
|
-
if (!connectedWs) {
|
|
78
|
-
throw new Error("Connector did not return a WebSocket instance");
|
|
79
|
-
}
|
|
80
|
-
this.ws = connectedWs;
|
|
81
|
-
// Ensure heartbeat is started (in case onopen wasn't called)
|
|
82
|
-
if (this.ws && this.ws.readyState === OPEN) {
|
|
83
|
-
this.startHeartbeat();
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
async connectDirect(options) {
|
|
87
|
-
// Original direct connection logic (fallback when no connector provided)
|
|
88
|
-
let url;
|
|
89
|
-
if (this.baseUrl.startsWith("ws://") || this.baseUrl.startsWith("wss://")) {
|
|
90
|
-
url = new URL(this.baseUrl);
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
const wsBaseUrl = this.baseUrl.replace(/^http/, "ws");
|
|
94
|
-
url = new URL(wsBaseUrl);
|
|
95
|
-
}
|
|
96
|
-
if (options?.params) {
|
|
97
|
-
for (const [key, value] of Object.entries(options.params)) {
|
|
98
|
-
if (value !== undefined && value !== null) {
|
|
99
|
-
url.searchParams.set(key, String(value));
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
const wsUrl = url.toString();
|
|
104
|
-
this.ws = window ? new window.WebSocket(wsUrl) : new WebSocket(wsUrl);
|
|
105
|
-
await new Promise((resolve, reject) => {
|
|
106
|
-
if (!this.ws)
|
|
107
|
-
return reject(new Error("ws init failed"));
|
|
108
|
-
this.ws.onopen = () => {
|
|
109
|
-
this.startHeartbeat();
|
|
110
|
-
resolve();
|
|
111
|
-
};
|
|
112
|
-
this.ws.onerror = (e) => reject(e);
|
|
113
|
-
this.ws.onmessage = (ev) => {
|
|
114
|
-
try {
|
|
115
|
-
const env = JSON.parse(String(ev.data));
|
|
116
|
-
for (const l of Array.from(this.listeners))
|
|
117
|
-
l(env);
|
|
118
|
-
}
|
|
119
|
-
catch { }
|
|
120
|
-
};
|
|
121
|
-
this.ws.onclose = () => {
|
|
122
|
-
this.stopHeartbeat();
|
|
123
|
-
};
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
startHeartbeat() {
|
|
127
|
-
this.stopHeartbeat();
|
|
128
|
-
this.isAlive = true;
|
|
129
|
-
if (typeof window !== "undefined" || !this.ws)
|
|
130
|
-
return;
|
|
131
|
-
this.pongHandler = () => {
|
|
132
|
-
this.isAlive = true;
|
|
133
|
-
if (this.pongTimeout) {
|
|
134
|
-
clearTimeout(this.pongTimeout);
|
|
135
|
-
this.pongTimeout = undefined;
|
|
136
|
-
}
|
|
137
|
-
};
|
|
138
|
-
this.ws.on("pong", this.pongHandler);
|
|
139
|
-
this.pingInterval = setInterval(() => {
|
|
140
|
-
if (!this.ws || this.ws.readyState !== OPEN) {
|
|
141
|
-
this.stopHeartbeat();
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
if (!this.isAlive) {
|
|
145
|
-
this.onConnectionLost?.();
|
|
146
|
-
this.stopHeartbeat();
|
|
147
|
-
this.ws.terminate();
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
this.isAlive = false;
|
|
151
|
-
try {
|
|
152
|
-
this.ws.ping();
|
|
153
|
-
}
|
|
154
|
-
catch (err) {
|
|
155
|
-
console.warn("[WebSocketTransport] Failed to send ping:", err);
|
|
156
|
-
this.onConnectionLost?.();
|
|
157
|
-
this.stopHeartbeat();
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
this.pongTimeout = setTimeout(() => {
|
|
161
|
-
if (!this.isAlive) {
|
|
162
|
-
this.onConnectionLost?.();
|
|
163
|
-
this.stopHeartbeat();
|
|
164
|
-
if (this.ws) {
|
|
165
|
-
this.ws.terminate();
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}, this.PONG_TIMEOUT_MS);
|
|
169
|
-
}, this.PING_INTERVAL_MS);
|
|
170
|
-
}
|
|
171
|
-
stopHeartbeat() {
|
|
172
|
-
if (this.pingInterval) {
|
|
173
|
-
clearInterval(this.pingInterval);
|
|
174
|
-
this.pingInterval = undefined;
|
|
175
|
-
}
|
|
176
|
-
if (this.pongTimeout) {
|
|
177
|
-
clearTimeout(this.pongTimeout);
|
|
178
|
-
this.pongTimeout = undefined;
|
|
179
|
-
}
|
|
180
|
-
if (this.ws && this.pongHandler) {
|
|
181
|
-
this.ws.off("pong", this.pongHandler);
|
|
182
|
-
this.pongHandler = undefined;
|
|
183
|
-
}
|
|
184
|
-
this.isAlive = false;
|
|
185
|
-
}
|
|
186
|
-
async request(msg) {
|
|
187
|
-
const seq = this.seq.next();
|
|
188
|
-
const env = { ...msg, seq };
|
|
189
|
-
const p = new Promise((resolve) => {
|
|
190
|
-
const off = this.subscribe((incoming) => {
|
|
191
|
-
if (incoming.seq === seq) {
|
|
192
|
-
off();
|
|
193
|
-
resolve(incoming);
|
|
194
|
-
}
|
|
195
|
-
});
|
|
196
|
-
});
|
|
197
|
-
this.send(env);
|
|
198
|
-
return p;
|
|
199
|
-
}
|
|
200
|
-
send(msg) {
|
|
201
|
-
if (!this.ws || this.ws.readyState !== OPEN)
|
|
202
|
-
return;
|
|
203
|
-
this.ws.send(JSON.stringify(msg));
|
|
204
|
-
}
|
|
205
|
-
subscribe(cb) {
|
|
206
|
-
this.listeners.add(cb);
|
|
207
|
-
return () => this.listeners.delete(cb);
|
|
208
|
-
}
|
|
209
|
-
async close() {
|
|
210
|
-
this.stopHeartbeat();
|
|
211
|
-
if (!this.ws)
|
|
212
|
-
return;
|
|
213
|
-
const ws = this.ws;
|
|
214
|
-
this.ws = undefined;
|
|
215
|
-
await new Promise((resolve) => {
|
|
216
|
-
ws.onclose = () => resolve();
|
|
217
|
-
try {
|
|
218
|
-
ws.close();
|
|
219
|
-
}
|
|
220
|
-
catch {
|
|
221
|
-
resolve();
|
|
222
|
-
}
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
//# sourceMappingURL=WebSocketTransport.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketTransport.js","sourceRoot":"","sources":["../../../src/transport/WebSocketTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export declare const UNSET_MARKER: {
|
|
2
|
-
readonly __spark_unset: true;
|
|
3
|
-
};
|
|
4
|
-
export declare function isUnsetMarker(value: unknown): value is typeof UNSET_MARKER;
|
|
5
|
-
export declare function encodeInputsForTransport(inputs: Record<string, unknown>): Record<string, unknown>;
|
|
6
|
-
export declare function decodeInputsFromTransport(inputs: Record<string, unknown>): Record<string, unknown>;
|
|
7
|
-
//# sourceMappingURL=inputEncoding.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inputEncoding.d.ts","sourceRoot":"","sources":["../../../src/utils/inputEncoding.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;CAAmC,CAAC;AAE7D,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,YAAY,CAI1E;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMjG;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMlG"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export const UNSET_MARKER = { __spark_unset: true };
|
|
2
|
-
export function isUnsetMarker(value) {
|
|
3
|
-
return (typeof value === "object" && value !== null && "__spark_unset" in value && value.__spark_unset === true);
|
|
4
|
-
}
|
|
5
|
-
export function encodeInputsForTransport(inputs) {
|
|
6
|
-
const encoded = {};
|
|
7
|
-
for (const [key, value] of Object.entries(inputs)) {
|
|
8
|
-
encoded[key] = value === undefined ? UNSET_MARKER : value;
|
|
9
|
-
}
|
|
10
|
-
return encoded;
|
|
11
|
-
}
|
|
12
|
-
export function decodeInputsFromTransport(inputs) {
|
|
13
|
-
const decoded = {};
|
|
14
|
-
for (const [key, value] of Object.entries(inputs)) {
|
|
15
|
-
decoded[key] = isUnsetMarker(value) ? undefined : value;
|
|
16
|
-
}
|
|
17
|
-
return decoded;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=inputEncoding.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inputEncoding.js","sourceRoot":"","sources":["../../../src/utils/inputEncoding.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,aAAa,EAAE,IAAI,EAAW,CAAC;AAE7D,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,eAAe,IAAI,KAAK,IAAK,KAAa,CAAC,aAAa,KAAK,IAAI,CACjH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAA+B;IACtE,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAA+B;IACvE,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|