@spider-mesh/ws 1.0.146 → 2.0.38

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 (85) hide show
  1. package/README.md +240 -0
  2. package/build/examples/websocket-client.d.ts +1 -0
  3. package/build/examples/websocket-client.js +18 -0
  4. package/build/examples/websocket-client.js.map +1 -0
  5. package/build/examples/websocket-e2e-client.d.ts +1 -0
  6. package/build/examples/websocket-e2e-client.js +38 -0
  7. package/build/examples/websocket-e2e-client.js.map +1 -0
  8. package/build/examples/websocket-e2e-matrix-client.d.ts +1 -0
  9. package/build/examples/websocket-e2e-matrix-client.js +68 -0
  10. package/build/examples/websocket-e2e-matrix-client.js.map +1 -0
  11. package/build/examples/websocket-e2e-matrix-provider.d.ts +1 -0
  12. package/build/examples/websocket-e2e-matrix-provider.js +42 -0
  13. package/build/examples/websocket-e2e-matrix-provider.js.map +1 -0
  14. package/build/examples/websocket-e2e-matrix-test.d.ts +1 -0
  15. package/build/examples/websocket-e2e-matrix-test.js +85 -0
  16. package/build/examples/websocket-e2e-matrix-test.js.map +1 -0
  17. package/build/examples/websocket-e2e-provider.d.ts +1 -0
  18. package/build/examples/websocket-e2e-provider.js +23 -0
  19. package/build/examples/websocket-e2e-provider.js.map +1 -0
  20. package/build/examples/websocket-e2e-reverse-client.d.ts +1 -0
  21. package/build/examples/websocket-e2e-reverse-client.js +23 -0
  22. package/build/examples/websocket-e2e-reverse-client.js.map +1 -0
  23. package/build/examples/websocket-e2e-reverse-server.d.ts +1 -0
  24. package/build/examples/websocket-e2e-reverse-server.js +38 -0
  25. package/build/examples/websocket-e2e-reverse-server.js.map +1 -0
  26. package/build/examples/websocket-e2e-reverse-test.d.ts +1 -0
  27. package/build/examples/websocket-e2e-reverse-test.js +85 -0
  28. package/build/examples/websocket-e2e-reverse-test.js.map +1 -0
  29. package/build/examples/websocket-e2e-round-robin-client.d.ts +1 -0
  30. package/build/examples/websocket-e2e-round-robin-client.js +42 -0
  31. package/build/examples/websocket-e2e-round-robin-client.js.map +1 -0
  32. package/build/examples/websocket-e2e-round-robin-test.d.ts +1 -0
  33. package/build/examples/websocket-e2e-round-robin-test.js +93 -0
  34. package/build/examples/websocket-e2e-round-robin-test.js.map +1 -0
  35. package/build/examples/websocket-e2e-test.d.ts +1 -0
  36. package/build/examples/websocket-e2e-test.js +85 -0
  37. package/build/examples/websocket-e2e-test.js.map +1 -0
  38. package/build/examples/websocket-provider.d.ts +1 -0
  39. package/build/examples/websocket-provider.js +21 -0
  40. package/build/examples/websocket-provider.js.map +1 -0
  41. package/build/examples/websocket-server.d.ts +1 -0
  42. package/build/examples/websocket-server.js +6 -0
  43. package/build/examples/websocket-server.js.map +1 -0
  44. package/build/examples/websocket-smoke-test.d.ts +1 -0
  45. package/build/examples/websocket-smoke-test.js +170 -0
  46. package/build/examples/websocket-smoke-test.js.map +1 -0
  47. package/build/src/WebsocketRelayServer.d.ts +24 -0
  48. package/build/src/WebsocketRelayServer.js +239 -0
  49. package/build/src/WebsocketRelayServer.js.map +1 -0
  50. package/build/src/WebsocketTransporter.d.ts +28 -0
  51. package/build/src/WebsocketTransporter.js +276 -0
  52. package/build/src/WebsocketTransporter.js.map +1 -0
  53. package/build/src/index.d.ts +1 -1
  54. package/build/src/index.js +1 -1
  55. package/build/src/index.js.map +1 -1
  56. package/build/src/relay-server.d.ts +1 -0
  57. package/build/src/relay-server.js +2 -0
  58. package/build/src/relay-server.js.map +1 -0
  59. package/build/src/websocketProtocol.d.ts +52 -0
  60. package/build/src/websocketProtocol.js +39 -0
  61. package/build/src/websocketProtocol.js.map +1 -0
  62. package/build/tests/helpers/runBunScript.d.ts +6 -0
  63. package/build/tests/helpers/runBunScript.js +46 -0
  64. package/build/tests/helpers/runBunScript.js.map +1 -0
  65. package/build/tests/websocket-spidermesh-matrix.e2e.test.d.ts +1 -0
  66. package/build/tests/websocket-spidermesh-matrix.e2e.test.js +13 -0
  67. package/build/tests/websocket-spidermesh-matrix.e2e.test.js.map +1 -0
  68. package/build/tests/websocket-spidermesh-reverse.e2e.test.d.ts +1 -0
  69. package/build/tests/websocket-spidermesh-reverse.e2e.test.js +9 -0
  70. package/build/tests/websocket-spidermesh-reverse.e2e.test.js.map +1 -0
  71. package/build/tests/websocket-spidermesh-round-robin.e2e.test.d.ts +1 -0
  72. package/build/tests/websocket-spidermesh-round-robin.e2e.test.js +20 -0
  73. package/build/tests/websocket-spidermesh-round-robin.e2e.test.js.map +1 -0
  74. package/build/tests/websocket-spidermesh.e2e.test.d.ts +1 -0
  75. package/build/tests/websocket-spidermesh.e2e.test.js +9 -0
  76. package/build/tests/websocket-spidermesh.e2e.test.js.map +1 -0
  77. package/build/tests/websocket-transporter.e2e.test.d.ts +1 -0
  78. package/build/tests/websocket-transporter.e2e.test.js +9 -0
  79. package/build/tests/websocket-transporter.e2e.test.js.map +1 -0
  80. package/build/tsconfig.tsbuildinfo +1 -0
  81. package/package.json +29 -15
  82. package/tsconfig.json +7 -7
  83. package/build/src/SpiderMeshWebsocketTransporter.d.ts +0 -16
  84. package/build/src/SpiderMeshWebsocketTransporter.js +0 -159
  85. package/build/src/SpiderMeshWebsocketTransporter.js.map +0 -1
@@ -0,0 +1,239 @@
1
+ import { WebSocket, WebSocketServer as WsServer } from 'ws';
2
+ import { fromEvent, ignoreElements, merge, mergeMap, Subscription, take, tap } from 'rxjs';
3
+ import { decodeRelayFrame, encodeRelayFrame, normalizeRelayRawData } from './websocketProtocol.js';
4
+ const relaySocketState = Symbol('relaySocketState');
5
+ export class WebsocketRelayServer {
6
+ #server;
7
+ #subscription = Subscription.EMPTY;
8
+ #nodes = new Map();
9
+ #listeners = new Map();
10
+ constructor(options = {}) {
11
+ this.#server = new WsServer({
12
+ host: options.host,
13
+ path: options.path,
14
+ port: options.port || 8787,
15
+ });
16
+ this.#subscription = fromEvent(this.#server, 'connection').pipe(mergeMap(([socket, request]) => this.on_connection(socket, request, options))).subscribe();
17
+ }
18
+ get port() {
19
+ const address = this.#server.address();
20
+ return typeof address === 'object' && address ? address.port : null;
21
+ }
22
+ close() {
23
+ this.#subscription.unsubscribe();
24
+ this.#server.close();
25
+ }
26
+ on_connection(socket, request, options) {
27
+ const isServerConnection = options.isServerConnection ? options.isServerConnection(socket, request) : true;
28
+ socket[relaySocketState] = {
29
+ isServerConnection,
30
+ };
31
+ if (isServerConnection) {
32
+ queueMicrotask(() => this.#syncClientState(socket));
33
+ }
34
+ return merge(fromEvent(socket, 'message').pipe(tap(event => {
35
+ const raw = Array.isArray(event)
36
+ ? event[0]
37
+ : (event && typeof event === 'object' && 'data' in event ? event.data : event);
38
+ this.on_message(socket, raw, isServerConnection);
39
+ }), ignoreElements()), fromEvent(socket, 'close').pipe(take(1), tap(() => this.on_close(socket)), ignoreElements()));
40
+ }
41
+ on_message(socket, raw, isServerConnection) {
42
+ const frame = this.#parseFrame(raw);
43
+ if (!frame)
44
+ return;
45
+ if (frame.type === 'hello') {
46
+ const normalized = this.#normalizeHelloFrame(socket, frame);
47
+ if (!normalized)
48
+ return;
49
+ const previous = this.#getSocketMetadata(this.#nodes.get(normalized.sender_id));
50
+ this.#registerNode(socket, normalized);
51
+ if (this.#shouldSyncDiscovery(previous, normalized.me)) {
52
+ this.#syncServerConnections();
53
+ }
54
+ return;
55
+ }
56
+ const senderId = this.#resolveSenderId(socket);
57
+ if (!senderId)
58
+ return;
59
+ const normalized = { ...frame, sender_id: senderId };
60
+ if (this.#hasTargetId(normalized) && normalized.target_id) {
61
+ if (this.#requiresServerRole(normalized) && !isServerConnection) {
62
+ return;
63
+ }
64
+ const target = this.#nodes.get(normalized.target_id);
65
+ if (target?.readyState === WebSocket.OPEN) {
66
+ target.send(encodeRelayFrame(normalized), { binary: true });
67
+ }
68
+ return;
69
+ }
70
+ const handler = this[`on_${normalized.type}`];
71
+ if (!handler) {
72
+ this.on_broadcast(normalized, socket);
73
+ return;
74
+ }
75
+ handler.call(this, normalized, socket);
76
+ }
77
+ on_close(socket) {
78
+ const nodeId = this.#resolveSenderId(socket);
79
+ if (!nodeId)
80
+ return;
81
+ this.#nodes.delete(nodeId);
82
+ this.#removeTopicListeners(nodeId);
83
+ this.on_broadcast({
84
+ type: 'offline',
85
+ sender_id: nodeId,
86
+ node_id: nodeId,
87
+ }, socket);
88
+ this.#syncServerConnections();
89
+ }
90
+ #registerNode(socket, discovery) {
91
+ const nodeId = discovery.sender_id;
92
+ const previousNodeId = this.#resolveSenderId(socket);
93
+ if (previousNodeId && previousNodeId !== nodeId) {
94
+ this.#nodes.delete(previousNodeId);
95
+ this.#removeTopicListeners(previousNodeId);
96
+ this.on_broadcast({
97
+ type: 'offline',
98
+ sender_id: previousNodeId,
99
+ node_id: previousNodeId,
100
+ }, socket);
101
+ }
102
+ this.#nodes.set(nodeId, socket);
103
+ this.#setSocketMetadata(socket, discovery.me);
104
+ }
105
+ #isServerConnection(socket) {
106
+ return socket[relaySocketState]?.isServerConnection === true;
107
+ }
108
+ #setSocketMetadata(socket, metadata) {
109
+ const relaySocket = socket;
110
+ const current = relaySocket[relaySocketState];
111
+ if (!current)
112
+ return;
113
+ relaySocket[relaySocketState] = {
114
+ isServerConnection: current.isServerConnection,
115
+ metadata,
116
+ };
117
+ }
118
+ #getSocketMetadata(socket) {
119
+ return socket ? socket[relaySocketState]?.metadata : undefined;
120
+ }
121
+ #requiresServerRole(frame) {
122
+ return frame.type === 'request' || frame.type === 'cancel';
123
+ }
124
+ #hasTargetId(frame) {
125
+ return 'target_id' in frame;
126
+ }
127
+ #normalizeHelloFrame(socket, frame) {
128
+ const senderId = frame.me?.node_id;
129
+ if (!senderId)
130
+ return null;
131
+ return {
132
+ ...frame,
133
+ sender_id: senderId,
134
+ me: {
135
+ ...frame.me,
136
+ },
137
+ };
138
+ }
139
+ #shouldSyncDiscovery(previous, next) {
140
+ if (!previous)
141
+ return true;
142
+ return !this.#hasSameServiceList(previous.services || {}, next.services || {});
143
+ }
144
+ #hasSameServiceList(left, right) {
145
+ const leftKeys = Object.keys(left).sort();
146
+ const rightKeys = Object.keys(right).sort();
147
+ if (leftKeys.length !== rightKeys.length)
148
+ return false;
149
+ for (let index = 0; index < leftKeys.length; index++) {
150
+ if (leftKeys[index] !== rightKeys[index])
151
+ return false;
152
+ }
153
+ return true;
154
+ }
155
+ #removeTopicListeners(nodeId) {
156
+ for (const [topic, listeners] of this.#listeners) {
157
+ listeners.delete(nodeId);
158
+ if (listeners.size === 0) {
159
+ this.#listeners.delete(topic);
160
+ }
161
+ }
162
+ }
163
+ #resolveSenderId(socket) {
164
+ const metadata = this.#getSocketMetadata(socket);
165
+ return metadata?.node_id || null;
166
+ }
167
+ #syncClientState(socket) {
168
+ if (!this.#isServerConnection(socket))
169
+ return;
170
+ for (const [node_id, client] of this.#nodes) {
171
+ if (socket.readyState !== WebSocket.OPEN)
172
+ return;
173
+ const metadata = this.#getSocketMetadata(client);
174
+ if (!metadata)
175
+ continue;
176
+ socket.send(encodeRelayFrame({
177
+ type: 'hello',
178
+ sender_id: node_id,
179
+ me: metadata,
180
+ }), { binary: true });
181
+ }
182
+ }
183
+ #syncServerConnections() {
184
+ for (const client of this.#server.clients) {
185
+ if (client.readyState !== WebSocket.OPEN)
186
+ continue;
187
+ if (!this.#isServerConnection(client))
188
+ continue;
189
+ this.#syncClientState(client);
190
+ }
191
+ }
192
+ on_subscribe(frame) {
193
+ this.#removeTopicListeners(frame.sender_id);
194
+ for (const topic of new Set(frame.topics.filter(Boolean))) {
195
+ const listeners = this.#listeners.get(topic) || new Set();
196
+ listeners.add(frame.sender_id);
197
+ this.#listeners.set(topic, listeners);
198
+ }
199
+ }
200
+ on_unsubscribe(frame) {
201
+ for (const topic of new Set(frame.topics.filter(Boolean))) {
202
+ const listeners = this.#listeners.get(topic);
203
+ if (!listeners)
204
+ continue;
205
+ listeners.delete(frame.sender_id);
206
+ if (listeners.size === 0) {
207
+ this.#listeners.delete(topic);
208
+ }
209
+ }
210
+ }
211
+ on_publish(frame) {
212
+ const listeners = this.#listeners.get(frame.topic);
213
+ if (!listeners || listeners.size === 0)
214
+ return;
215
+ const message = encodeRelayFrame(frame);
216
+ const delivered = new Set();
217
+ for (const nodeId of listeners) {
218
+ const client = this.#nodes.get(nodeId);
219
+ if (!client || client.readyState !== WebSocket.OPEN || delivered.has(client))
220
+ continue;
221
+ client.send(message, { binary: true });
222
+ delivered.add(client);
223
+ }
224
+ }
225
+ on_broadcast(frame, sender) {
226
+ const message = encodeRelayFrame(frame);
227
+ for (const client of this.#server.clients) {
228
+ if (client === sender || client.readyState !== WebSocket.OPEN)
229
+ continue;
230
+ if (!this.#isServerConnection(client))
231
+ continue;
232
+ client.send(message, { binary: true });
233
+ }
234
+ }
235
+ #parseFrame(raw) {
236
+ return decodeRelayFrame(normalizeRelayRawData(raw));
237
+ }
238
+ }
239
+ //# sourceMappingURL=WebsocketRelayServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebsocketRelayServer.js","sourceRoot":"","sources":["../../src/WebsocketRelayServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { BehaviorSubject, Observable, Subject } from 'rxjs';
2
+ import type { DiscoveryTransporter, MdnsMessage, NodeMetadata, PubsubTransporter, RpcPacket, RpcTransporter, SpiderMeshNode } from '@spider-mesh/core';
3
+ export type WebsocketTransporterOptions = {
4
+ heartbeatIntervalMs?: number;
5
+ reconnectIntervalMs?: number;
6
+ unsubscribeDelayMs?: number;
7
+ };
8
+ export type WebsocketConnectionStatus = 'connecting' | 'connected' | 'error' | 'not_connected';
9
+ export declare class WebsocketTransporter extends Subject<any> implements RpcTransporter, DiscoveryTransporter, PubsubTransporter {
10
+ #private;
11
+ protected options: WebsocketTransporterOptions;
12
+ readonly status$: BehaviorSubject<Map<string, string>>;
13
+ constructor(options?: WebsocketTransporterOptions);
14
+ get metadata(): {};
15
+ connect(url: string | string[]): void;
16
+ close(url?: string | string[]): void;
17
+ send(packet: RpcPacket, node: SpiderMeshNode): Promise<void>;
18
+ broadcast(data: MdnsMessage<NodeMetadata>, _ips: string[]): Promise<void>;
19
+ publish<T>(topic: string, data: T): Promise<void>;
20
+ listen<T>(topic: string): Observable<T>;
21
+ private on_request;
22
+ private on_response;
23
+ private on_cancel;
24
+ private on_rpc;
25
+ private on_hello;
26
+ private on_offline;
27
+ private on_publish;
28
+ }
@@ -0,0 +1,276 @@
1
+ import { decode, encode } from '@msgpack/msgpack';
2
+ import { BehaviorSubject, defer, finalize, fromEvent, ignoreElements, map, merge, of, ReplaySubject, retry, share, Subject, switchMap, take, tap, throwError, timer } from 'rxjs';
3
+ import WebSocket from 'ws';
4
+ import { decodeRelayFrame, encodeRelayFrame, normalizeRelayRawData } from './websocketProtocol.js';
5
+ export class WebsocketTransporter extends Subject {
6
+ options;
7
+ #connections = new Map();
8
+ #topics = new Map();
9
+ #nodes = new Map();
10
+ #me$ = new ReplaySubject(1);
11
+ status$ = new BehaviorSubject(new Map());
12
+ constructor(options = {}) {
13
+ super();
14
+ this.options = options;
15
+ }
16
+ get metadata() {
17
+ return {};
18
+ }
19
+ connect(url) {
20
+ for (const relayUrl of new Set(Array.isArray(url) ? url : [url])) {
21
+ if (this.#connections.has(relayUrl))
22
+ continue;
23
+ this.#setConnectionStatus(relayUrl, 'connecting');
24
+ this.#connections.set(relayUrl, {
25
+ subscription: this.#createConnectionLoop(relayUrl).subscribe(),
26
+ });
27
+ }
28
+ }
29
+ close(url) {
30
+ const urls = url ? [...new Set(Array.isArray(url) ? url : [url])] : [...this.#connections.keys()];
31
+ for (const relayUrl of urls) {
32
+ this.#connections.get(relayUrl)?.subscription.unsubscribe();
33
+ this.#connections.delete(relayUrl);
34
+ this.#setConnectionStatus(relayUrl, 'not_connected');
35
+ }
36
+ }
37
+ async send(packet, node) {
38
+ const socket = this.#selectRpcSocket(node);
39
+ await this.#sendFrame(socket, {
40
+ type: packet.kind,
41
+ target_id: node.node_id,
42
+ payload: this.#encodeRpcPacket(packet),
43
+ });
44
+ }
45
+ async broadcast(data, _ips) {
46
+ const localNode = {
47
+ ...data.node,
48
+ node_id: data.sender_id,
49
+ };
50
+ this.#me$.next(localNode);
51
+ }
52
+ async publish(topic, data) {
53
+ await this.#sendFrameToAll({
54
+ type: 'publish',
55
+ topic,
56
+ payload: encode(data),
57
+ });
58
+ }
59
+ listen(topic) {
60
+ let entry = this.#topics.get(topic);
61
+ if (!entry) {
62
+ const subject = new Subject();
63
+ const stream = defer(() => {
64
+ void this.#announceSubscriptions().catch(() => undefined);
65
+ return subject.asObservable().pipe(finalize(() => {
66
+ if (this.#topics.get(topic)?.subject !== subject)
67
+ return;
68
+ this.#topics.delete(topic);
69
+ void this.#announceUnsubscribe([topic]).catch(() => undefined);
70
+ }));
71
+ }).pipe(share({
72
+ resetOnRefCountZero: () => timer(this.options.unsubscribeDelayMs || 10000),
73
+ }));
74
+ entry = { subject, stream };
75
+ this.#topics.set(topic, entry);
76
+ }
77
+ return entry.stream;
78
+ }
79
+ #createConnectionLoop(url) {
80
+ return defer(() => {
81
+ this.#setConnectionStatus(url, 'connecting');
82
+ return of(new WebSocket(url));
83
+ }).pipe(switchMap(socket => {
84
+ const disconnection$ = merge(fromEvent(socket, 'close'), fromEvent(socket, 'error')).pipe(take(1), tap(event => {
85
+ this.#setConnectionStatus(url, this.#getDisconnectionStatus(event));
86
+ }), switchMap(() => throwError(() => new Error(`WebSocket disconnected: ${url}`))));
87
+ const disconnect = () => {
88
+ const connection = this.#connections.get(url);
89
+ if (connection?.socket === socket) {
90
+ delete connection.socket;
91
+ }
92
+ };
93
+ return merge(fromEvent(socket, 'open').pipe(take(1), map(() => socket)), disconnection$).pipe(take(1), tap(() => {
94
+ const connection = this.#connections.get(url);
95
+ if (connection) {
96
+ connection.socket = socket;
97
+ }
98
+ this.#setConnectionStatus(url, 'connected');
99
+ }), switchMap(() => merge(this.#me$.pipe(tap(localNode => {
100
+ void this.#announceLocalNode(localNode).catch(() => undefined);
101
+ void this.#announceSubscriptions().catch(() => undefined);
102
+ }), ignoreElements()), fromEvent(socket, 'message').pipe(tap(event => {
103
+ const raw = Array.isArray(event)
104
+ ? event[0]
105
+ : (event && typeof event === 'object' && 'data' in event ? event.data : event);
106
+ const frame = this.#parseFrame(raw);
107
+ if (!frame)
108
+ return;
109
+ const handler = this[`on_${frame.type}`];
110
+ if (!handler)
111
+ return;
112
+ handler.call(this, url, frame);
113
+ }), ignoreElements()), disconnection$, timer(0, this.options.heartbeatIntervalMs || 30000).pipe(tap(() => {
114
+ if (socket.readyState === WebSocket.OPEN) {
115
+ socket.ping();
116
+ }
117
+ }), ignoreElements()))), finalize(() => {
118
+ disconnect();
119
+ if (socket.readyState === WebSocket.OPEN) {
120
+ socket.close();
121
+ }
122
+ else if (socket.readyState === WebSocket.CONNECTING) {
123
+ socket.terminate();
124
+ }
125
+ }));
126
+ })).pipe(retry({
127
+ delay: () => timer(this.options.reconnectIntervalMs || 1000),
128
+ }));
129
+ }
130
+ on_request(_url, frame) {
131
+ this.on_rpc(frame);
132
+ }
133
+ on_response(_url, frame) {
134
+ this.on_rpc(frame);
135
+ }
136
+ on_cancel(_url, frame) {
137
+ this.on_rpc(frame);
138
+ }
139
+ on_rpc(frame) {
140
+ const packet = this.#decodeRpcPacket(frame);
141
+ if (!packet)
142
+ return;
143
+ this.next({
144
+ rpc: {
145
+ node_id: frame.sender_id,
146
+ packet
147
+ }
148
+ });
149
+ }
150
+ on_hello(url, frame) {
151
+ const node = frame.me;
152
+ this.#nodes.set(node.node_id, {
153
+ node,
154
+ relayUrl: url,
155
+ });
156
+ this.next({ discovered: node });
157
+ }
158
+ on_offline(url, frame) {
159
+ const current = this.#nodes.get(frame.node_id);
160
+ if (current?.relayUrl === url) {
161
+ this.#nodes.delete(frame.node_id);
162
+ }
163
+ this.next({ offline: frame.node_id });
164
+ }
165
+ on_publish(_url, frame) {
166
+ const topic = this.#topics.get(frame.topic);
167
+ if (!topic)
168
+ return;
169
+ try {
170
+ topic.subject.next(decode(frame.payload));
171
+ }
172
+ catch {
173
+ topic.subject.next(frame.payload);
174
+ }
175
+ }
176
+ #selectRpcSocket(node) {
177
+ const relayUrl = this.#nodes.get(node.node_id)?.relayUrl;
178
+ const routedSocket = relayUrl ? this.#connections.get(relayUrl)?.socket : null;
179
+ if (routedSocket?.readyState === WebSocket.OPEN) {
180
+ return routedSocket;
181
+ }
182
+ for (const { socket } of this.#connections.values()) {
183
+ if (socket?.readyState === WebSocket.OPEN) {
184
+ return socket;
185
+ }
186
+ }
187
+ throw new Error('WebSocket is not connected');
188
+ }
189
+ #resolveNode(nodeId) {
190
+ if (nodeId) {
191
+ const knownNode = this.#nodes.get(nodeId);
192
+ if (knownNode) {
193
+ return knownNode.node;
194
+ }
195
+ }
196
+ return {
197
+ ips: [],
198
+ host: '',
199
+ namespace: '',
200
+ node_id: nodeId || '',
201
+ services: {},
202
+ transporters: {},
203
+ nodes: {},
204
+ version: 0,
205
+ };
206
+ }
207
+ async #announceLocalNode(localNode) {
208
+ await this.#sendFrameToAll({
209
+ type: 'hello',
210
+ me: {
211
+ ...localNode,
212
+ online: true,
213
+ },
214
+ });
215
+ }
216
+ async #announceSubscriptions() {
217
+ await this.#sendFrameToAll({
218
+ type: 'subscribe',
219
+ topics: [...this.#topics.keys()],
220
+ });
221
+ }
222
+ async #announceUnsubscribe(topics) {
223
+ if (topics.length === 0)
224
+ return;
225
+ await this.#sendFrameToAll({
226
+ type: 'unsubscribe',
227
+ topics,
228
+ });
229
+ }
230
+ #encodeRpcPacket(packet) {
231
+ const { kind: _, ...payload } = packet;
232
+ return encode(payload);
233
+ }
234
+ #decodeRpcPacket(frame) {
235
+ try {
236
+ return {
237
+ kind: frame.type,
238
+ ...decode(frame.payload),
239
+ };
240
+ }
241
+ catch {
242
+ return null;
243
+ }
244
+ }
245
+ async #sendFrame(socket, frame) {
246
+ if (!socket || socket.readyState !== WebSocket.OPEN) {
247
+ throw new Error('WebSocket is not connected');
248
+ }
249
+ socket.send(encodeRelayFrame(frame), { binary: true });
250
+ }
251
+ async #sendFrameToAll(frame) {
252
+ const sockets = [...this.#connections.values()]
253
+ .map(connection => connection.socket)
254
+ .filter((socket) => socket?.readyState === WebSocket.OPEN);
255
+ if (sockets.length === 0) {
256
+ return;
257
+ }
258
+ await Promise.all(sockets.map(socket => this.#sendFrame(socket, frame)));
259
+ }
260
+ #parseFrame(raw) {
261
+ return decodeRelayFrame(normalizeRelayRawData(raw));
262
+ }
263
+ #getDisconnectionStatus(event) {
264
+ return Array.isArray(event) ? 'not_connected' : 'error';
265
+ }
266
+ #setConnectionStatus(url, status) {
267
+ const currentStatus = this.status$.value.get(url);
268
+ if (currentStatus === status) {
269
+ return;
270
+ }
271
+ const nextStatuses = new Map(this.status$.value);
272
+ nextStatuses.set(url, status);
273
+ this.status$.next(nextStatuses);
274
+ }
275
+ }
276
+ //# sourceMappingURL=WebsocketTransporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebsocketTransporter.js","sourceRoot":"","sources":["../../src/WebsocketTransporter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- export { SpiderMeshWebsocketTransporter } from './SpiderMeshWebsocketTransporter.js';
1
+ export * from './WebsocketTransporter.js';
@@ -1,2 +1,2 @@
1
- export { SpiderMeshWebsocketTransporter } from './SpiderMeshWebsocketTransporter.js';
1
+ export * from './WebsocketTransporter.js';
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA"}
@@ -0,0 +1 @@
1
+ export * from './WebsocketRelayServer.js';
@@ -0,0 +1,2 @@
1
+ export * from './WebsocketRelayServer.js';
2
+ //# sourceMappingURL=relay-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-server.js","sourceRoot":"","sources":["../../src/relay-server.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA"}
@@ -0,0 +1,52 @@
1
+ import type WebSocket from 'ws';
2
+ import type { RpcPacket, SpiderMeshNode } from '@spider-mesh/core';
3
+ export type RelayRpcFrame = {
4
+ type: RpcPacket['kind'];
5
+ payload: Uint8Array;
6
+ target_id?: string;
7
+ };
8
+ export type RelayPublishFrame = {
9
+ type: 'publish';
10
+ topic: string;
11
+ payload: Uint8Array;
12
+ };
13
+ export type RelaySubscribeFrame = {
14
+ type: 'subscribe';
15
+ topics: string[];
16
+ };
17
+ export type RelayUnsubscribeFrame = {
18
+ type: 'unsubscribe';
19
+ topics: string[];
20
+ };
21
+ export type RelayHelloFrame = {
22
+ type: 'hello';
23
+ me: SpiderMeshNode;
24
+ target_id?: string;
25
+ };
26
+ export type RelayOfflineFrame = {
27
+ type: 'offline';
28
+ node_id: string;
29
+ };
30
+ export type RelayFrame = RelayRpcFrame | RelayPublishFrame | RelaySubscribeFrame | RelayUnsubscribeFrame | RelayHelloFrame | RelayOfflineFrame;
31
+ export type ReceivedRelayRpcFrame = RelayRpcFrame & {
32
+ sender_id: string;
33
+ };
34
+ export type ReceivedRelayPublishFrame = RelayPublishFrame & {
35
+ sender_id: string;
36
+ };
37
+ export type ReceivedRelaySubscribeFrame = RelaySubscribeFrame & {
38
+ sender_id: string;
39
+ };
40
+ export type ReceivedRelayUnsubscribeFrame = RelayUnsubscribeFrame & {
41
+ sender_id: string;
42
+ };
43
+ export type ReceivedRelayHelloFrame = RelayHelloFrame & {
44
+ sender_id: string;
45
+ };
46
+ export type ReceivedRelayOfflineFrame = RelayOfflineFrame & {
47
+ sender_id: string;
48
+ };
49
+ export type ReceivedRelayFrame = ReceivedRelayRpcFrame | ReceivedRelayPublishFrame | ReceivedRelaySubscribeFrame | ReceivedRelayUnsubscribeFrame | ReceivedRelayHelloFrame | ReceivedRelayOfflineFrame;
50
+ export declare function encodeRelayFrame(frame: RelayFrame | ReceivedRelayFrame): Uint8Array<ArrayBuffer>;
51
+ export declare function decodeRelayFrame(raw: Uint8Array): RelayRpcFrame | RelayPublishFrame | RelaySubscribeFrame | RelayUnsubscribeFrame | RelayHelloFrame | RelayOfflineFrame | null;
52
+ export declare function normalizeRelayRawData(raw: WebSocket.RawData): Uint8Array;