@spider-mesh/ws 2.0.38 → 2.0.41

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 (49) hide show
  1. package/README.md +34 -11
  2. package/build/examples/websocket-client.js +1 -1
  3. package/build/examples/websocket-client.js.map +1 -1
  4. package/build/examples/websocket-e2e-client.js +1 -1
  5. package/build/examples/websocket-e2e-client.js.map +1 -1
  6. package/build/examples/websocket-e2e-matrix-client.js +1 -1
  7. package/build/examples/websocket-e2e-matrix-client.js.map +1 -1
  8. package/build/examples/websocket-e2e-matrix-provider.js +1 -1
  9. package/build/examples/websocket-e2e-matrix-provider.js.map +1 -1
  10. package/build/examples/websocket-e2e-provider.js +1 -1
  11. package/build/examples/websocket-e2e-provider.js.map +1 -1
  12. package/build/examples/websocket-e2e-reverse-client.js +1 -1
  13. package/build/examples/websocket-e2e-reverse-client.js.map +1 -1
  14. package/build/examples/websocket-e2e-reverse-server.js +1 -1
  15. package/build/examples/websocket-e2e-reverse-server.js.map +1 -1
  16. package/build/examples/websocket-e2e-round-robin-client.js +1 -1
  17. package/build/examples/websocket-e2e-round-robin-client.js.map +1 -1
  18. package/build/examples/websocket-provider.js +1 -1
  19. package/build/examples/websocket-provider.js.map +1 -1
  20. package/build/examples/websocket-server.js +1 -1
  21. package/build/examples/websocket-server.js.map +1 -1
  22. package/build/examples/websocket-smoke-test.js +7 -11
  23. package/build/examples/websocket-smoke-test.js.map +1 -1
  24. package/build/src/BaseWebsocketTransporter.d.ts +39 -0
  25. package/build/src/BaseWebsocketTransporter.js +272 -0
  26. package/build/src/BaseWebsocketTransporter.js.map +1 -0
  27. package/build/src/GlobalWebsocketTransporter.d.ts +6 -0
  28. package/build/src/GlobalWebsocketTransporter.js +17 -0
  29. package/build/src/GlobalWebsocketTransporter.js.map +1 -0
  30. package/build/src/WebsocketTransporter.d.ts +4 -26
  31. package/build/src/WebsocketTransporter.js +8 -269
  32. package/build/src/WebsocketTransporter.js.map +1 -1
  33. package/build/src/browser.d.ts +1 -0
  34. package/build/src/browser.js +2 -0
  35. package/build/src/browser.js.map +1 -0
  36. package/build/src/index.d.ts +1 -1
  37. package/build/src/index.js +2 -1
  38. package/build/src/index.js.map +1 -1
  39. package/build/src/node.d.ts +1 -0
  40. package/build/src/node.js +2 -0
  41. package/build/src/node.js.map +1 -0
  42. package/build/src/react-native.d.ts +1 -0
  43. package/build/src/react-native.js +2 -0
  44. package/build/src/react-native.js.map +1 -0
  45. package/build/src/websocketProtocol.d.ts +2 -2
  46. package/build/src/websocketProtocol.js +2 -0
  47. package/build/src/websocketProtocol.js.map +1 -1
  48. package/build/tsconfig.tsbuildinfo +1 -1
  49. package/package.json +18 -8
@@ -0,0 +1,272 @@
1
+ import { decode, encode } from '@msgpack/msgpack';
2
+ import { BehaviorSubject, defer, finalize, from, fromEvent, ignoreElements, map, merge, ReplaySubject, retry, share, Subject, switchMap, take, takeUntil, tap, throwError, timer } from 'rxjs';
3
+ import { decodeRelayFrame, encodeRelayFrame, normalizeRelayRawData } from './websocketProtocol.js';
4
+ const WEBSOCKET_CONNECTING = 0;
5
+ const WEBSOCKET_OPEN = 1;
6
+ export class BaseWebsocketTransporter extends Subject {
7
+ options;
8
+ #connections = new Map();
9
+ #topics = new Map();
10
+ #nodes = new Map();
11
+ #me$ = new ReplaySubject(1);
12
+ status$ = new BehaviorSubject(new Map());
13
+ constructor(options = {}) {
14
+ super();
15
+ this.options = options;
16
+ }
17
+ get metadata() {
18
+ return {};
19
+ }
20
+ connect(url) {
21
+ if (this.#connections.has(url))
22
+ return;
23
+ this.#setConnectionStatus(url, 'connecting');
24
+ this.#connections.set(url, {
25
+ subscription: this.#createConnectionLoop(url).subscribe(),
26
+ });
27
+ }
28
+ close(url) {
29
+ const connection = this.#connections.get(url);
30
+ const socket = connection?.socket;
31
+ this.#connections.delete(url);
32
+ this.#deleteConnectionStatus(url);
33
+ connection?.subscription.unsubscribe();
34
+ if (socket) {
35
+ this.#disconnectSocket(socket);
36
+ }
37
+ }
38
+ async send(packet, node) {
39
+ const socket = this.#selectRpcSocket(node);
40
+ await this.#sendFrame(socket, {
41
+ type: packet.kind,
42
+ target_id: node.node_id,
43
+ payload: this.#encodeRpcPacket(packet),
44
+ });
45
+ }
46
+ async broadcast(data) {
47
+ const localNode = {
48
+ ...data.node,
49
+ node_id: data.sender_id,
50
+ };
51
+ this.#me$.next(localNode);
52
+ }
53
+ async publish(topic, data) {
54
+ await this.#sendFrameToAll({
55
+ type: 'publish',
56
+ topic,
57
+ payload: encode(data),
58
+ });
59
+ }
60
+ listen(topic) {
61
+ let entry = this.#topics.get(topic);
62
+ if (!entry) {
63
+ const subject = new Subject();
64
+ const stream = defer(() => {
65
+ void this.#announceSubscriptions().catch(() => undefined);
66
+ return subject.asObservable().pipe(finalize(() => {
67
+ if (this.#topics.get(topic)?.subject !== subject)
68
+ return;
69
+ this.#topics.delete(topic);
70
+ void this.#announceUnsubscribe([topic]).catch(() => undefined);
71
+ }));
72
+ }).pipe(share({
73
+ resetOnRefCountZero: () => timer(this.options.unsubscribeDelayMs || 10000),
74
+ }));
75
+ entry = { subject, stream };
76
+ this.#topics.set(topic, entry);
77
+ }
78
+ return entry.stream;
79
+ }
80
+ #createConnectionLoop(url) {
81
+ return defer(() => {
82
+ this.#setConnectionStatus(url, 'connecting');
83
+ return from(Promise.resolve(this.createSocket(url)));
84
+ }).pipe(switchMap(socket => {
85
+ const closed$ = fromEvent(socket, 'close').pipe(take(1), tap(() => {
86
+ this.#setConnectionStatus(url, 'not_connected');
87
+ }), switchMap(() => throwError(() => new Error(`WebSocket disconnected: ${url}`))));
88
+ const errored$ = fromEvent(socket, 'error').pipe(take(1), tap(() => {
89
+ this.#setConnectionStatus(url, 'error');
90
+ }), switchMap(() => throwError(() => new Error(`WebSocket disconnected: ${url}`))));
91
+ const disconnection$ = merge(closed$, errored$).pipe(take(1));
92
+ const clearSocket = () => {
93
+ const connection = this.#connections.get(url);
94
+ if (connection && connection.socket === socket) {
95
+ delete connection.socket;
96
+ }
97
+ };
98
+ return fromEvent(socket, 'open').pipe(map(() => socket), takeUntil(disconnection$), tap(() => {
99
+ const connection = this.#connections.get(url);
100
+ if (connection) {
101
+ connection.socket = socket;
102
+ }
103
+ this.#setConnectionStatus(url, 'connected');
104
+ }), switchMap(() => merge(this.#me$.pipe(tap(localNode => {
105
+ void this.#announceLocalNode(localNode).catch(() => undefined);
106
+ void this.#announceSubscriptions().catch(() => undefined);
107
+ }), ignoreElements()), fromEvent(socket, 'message').pipe(tap(event => {
108
+ const raw = this.#getMessageData(event);
109
+ const frame = this.#parseFrame(raw);
110
+ if (!frame)
111
+ return;
112
+ const handler = this[`on_${frame.type}`];
113
+ if (!handler)
114
+ return;
115
+ handler.call(this, url, frame);
116
+ }), ignoreElements()), timer(0, this.options.heartbeatIntervalMs || 30000).pipe(tap(() => {
117
+ if (socket.readyState === WEBSOCKET_OPEN) {
118
+ socket.ping?.();
119
+ }
120
+ }), ignoreElements()))), takeUntil(disconnection$), finalize(() => {
121
+ clearSocket();
122
+ this.#disconnectSocket(socket);
123
+ }));
124
+ })).pipe(retry({
125
+ delay: () => timer(this.options.reconnectIntervalMs || 1000),
126
+ }));
127
+ }
128
+ on_request(_url, frame) {
129
+ this.on_rpc(frame);
130
+ }
131
+ on_response(_url, frame) {
132
+ this.on_rpc(frame);
133
+ }
134
+ on_cancel(_url, frame) {
135
+ this.on_rpc(frame);
136
+ }
137
+ on_rpc(frame) {
138
+ const packet = this.#decodeRpcPacket(frame);
139
+ if (!packet)
140
+ return;
141
+ this.next({
142
+ rpc: {
143
+ node_id: frame.sender_id,
144
+ packet
145
+ }
146
+ });
147
+ }
148
+ on_hello(url, frame) {
149
+ const node = frame.me;
150
+ this.#nodes.set(node.node_id, {
151
+ node,
152
+ relayUrl: url,
153
+ });
154
+ this.next({ discovered: node });
155
+ }
156
+ on_offline(url, frame) {
157
+ const current = this.#nodes.get(frame.node_id);
158
+ if (current?.relayUrl === url) {
159
+ this.#nodes.delete(frame.node_id);
160
+ }
161
+ this.next({ offline: frame.node_id });
162
+ }
163
+ on_publish(_url, frame) {
164
+ const topic = this.#topics.get(frame.topic);
165
+ if (!topic)
166
+ return;
167
+ try {
168
+ topic.subject.next(decode(frame.payload));
169
+ }
170
+ catch {
171
+ topic.subject.next(frame.payload);
172
+ }
173
+ }
174
+ #selectRpcSocket(node) {
175
+ const relayUrl = this.#nodes.get(node.node_id)?.relayUrl;
176
+ const routedSocket = relayUrl ? this.#connections.get(relayUrl)?.socket : undefined;
177
+ if (routedSocket?.readyState === WEBSOCKET_OPEN) {
178
+ return routedSocket;
179
+ }
180
+ for (const { socket } of this.#connections.values()) {
181
+ if (socket?.readyState === WEBSOCKET_OPEN) {
182
+ return socket;
183
+ }
184
+ }
185
+ throw new Error('WebSocket is not connected');
186
+ }
187
+ async #announceLocalNode(localNode) {
188
+ await this.#sendFrameToAll({
189
+ type: 'hello',
190
+ me: localNode,
191
+ });
192
+ }
193
+ async #announceSubscriptions() {
194
+ await this.#sendFrameToAll({
195
+ type: 'subscribe',
196
+ topics: [...this.#topics.keys()],
197
+ });
198
+ }
199
+ async #announceUnsubscribe(topics) {
200
+ if (topics.length === 0)
201
+ return;
202
+ await this.#sendFrameToAll({
203
+ type: 'unsubscribe',
204
+ topics,
205
+ });
206
+ }
207
+ #encodeRpcPacket(packet) {
208
+ const { kind: _, ...payload } = packet;
209
+ return encode(payload);
210
+ }
211
+ #decodeRpcPacket(frame) {
212
+ try {
213
+ return {
214
+ kind: frame.type,
215
+ ...decode(frame.payload),
216
+ };
217
+ }
218
+ catch {
219
+ return null;
220
+ }
221
+ }
222
+ async #sendFrame(socket, frame) {
223
+ if (!socket || socket.readyState !== WEBSOCKET_OPEN) {
224
+ throw new Error('WebSocket is not connected');
225
+ }
226
+ socket.send(encodeRelayFrame(frame), { binary: true });
227
+ }
228
+ async #sendFrameToAll(frame) {
229
+ const sockets = [...this.#connections.values()]
230
+ .map(connection => connection.socket)
231
+ .filter((socket) => socket?.readyState === WEBSOCKET_OPEN);
232
+ if (sockets.length === 0) {
233
+ return;
234
+ }
235
+ await Promise.all(sockets.map(socket => this.#sendFrame(socket, frame)));
236
+ }
237
+ #parseFrame(raw) {
238
+ return decodeRelayFrame(normalizeRelayRawData(raw));
239
+ }
240
+ #getMessageData(event) {
241
+ return Array.isArray(event)
242
+ ? event[0]
243
+ : (event && typeof event === 'object' && 'data' in event ? event.data : event);
244
+ }
245
+ #disconnectSocket(socket) {
246
+ if (socket.readyState === WEBSOCKET_OPEN) {
247
+ socket.close();
248
+ }
249
+ else if (socket.readyState === WEBSOCKET_CONNECTING) {
250
+ socket.terminate?.();
251
+ socket.close();
252
+ }
253
+ }
254
+ #setConnectionStatus(url, status) {
255
+ const currentStatus = this.status$.value.get(url);
256
+ if (currentStatus === status) {
257
+ return;
258
+ }
259
+ const nextStatuses = new Map(this.status$.value);
260
+ nextStatuses.set(url, status);
261
+ this.status$.next(nextStatuses);
262
+ }
263
+ #deleteConnectionStatus(url) {
264
+ if (!this.status$.value.has(url)) {
265
+ return;
266
+ }
267
+ const nextStatuses = new Map(this.status$.value);
268
+ nextStatuses.delete(url);
269
+ this.status$.next(nextStatuses);
270
+ }
271
+ }
272
+ //# sourceMappingURL=BaseWebsocketTransporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseWebsocketTransporter.js","sourceRoot":"","sources":["../../src/BaseWebsocketTransporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { BaseWebsocketTransporter, type WebSocketLike, type WebsocketTransporterOptions } from './BaseWebsocketTransporter.js';
2
+ export { type WebsocketConnectionStatus, type WebsocketTransporterOptions } from './BaseWebsocketTransporter.js';
3
+ export declare class WebsocketTransporter extends BaseWebsocketTransporter {
4
+ constructor(options?: WebsocketTransporterOptions);
5
+ protected createSocket(url: string): WebSocketLike;
6
+ }
@@ -0,0 +1,17 @@
1
+ import { BaseWebsocketTransporter } from './BaseWebsocketTransporter.js';
2
+ export class WebsocketTransporter extends BaseWebsocketTransporter {
3
+ constructor(options = {}) {
4
+ super(options);
5
+ }
6
+ createSocket(url) {
7
+ if (typeof globalThis.WebSocket !== 'function') {
8
+ throw new Error('globalThis.WebSocket is not available in this runtime');
9
+ }
10
+ const socket = new globalThis.WebSocket(url);
11
+ if ('binaryType' in socket) {
12
+ socket.binaryType = 'arraybuffer';
13
+ }
14
+ return socket;
15
+ }
16
+ }
17
+ //# sourceMappingURL=GlobalWebsocketTransporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GlobalWebsocketTransporter.js","sourceRoot":"","sources":["../../src/GlobalWebsocketTransporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAwD,MAAM,+BAA+B,CAAA;AAI9H,MAAM,OAAO,oBAAqB,SAAQ,wBAAwB;IAC9D,YAAY,UAAuC,EAAE;QACjD,KAAK,CAAC,OAAO,CAAC,CAAA;IAClB,CAAC;IAES,YAAY,CAAC,GAAW;QAC9B,IAAI,OAAO,UAAU,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;QAC5E,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,GAAG,CAA6B,CAAA;QAExE,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,CAAC,UAAU,GAAG,aAAa,CAAA;QACrC,CAAC;QAED,OAAO,MAAM,CAAA;IACjB,CAAC;CACJ"}
@@ -1,28 +1,6 @@
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>>;
1
+ import { BaseWebsocketTransporter, type WebSocketLike, type WebsocketTransporterOptions } from './BaseWebsocketTransporter.js';
2
+ export { type WebsocketConnectionStatus, type WebsocketTransporterOptions } from './BaseWebsocketTransporter.js';
3
+ export declare class WebsocketTransporter extends BaseWebsocketTransporter {
13
4
  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;
5
+ protected createSocket(url: string): WebSocketLike;
28
6
  }
@@ -1,276 +1,15 @@
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
1
  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());
2
+ import { BaseWebsocketTransporter } from './BaseWebsocketTransporter.js';
3
+ export class WebsocketTransporter extends BaseWebsocketTransporter {
12
4
  constructor(options = {}) {
13
- super();
14
- this.options = options;
5
+ super(options);
15
6
  }
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;
7
+ createSocket(url) {
8
+ const socket = new WebSocket(url);
9
+ if ('binaryType' in socket) {
10
+ socket.binaryType = 'arraybuffer';
270
11
  }
271
- const nextStatuses = new Map(this.status$.value);
272
- nextStatuses.set(url, status);
273
- this.status$.next(nextStatuses);
12
+ return socket;
274
13
  }
275
14
  }
276
15
  //# sourceMappingURL=WebsocketTransporter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WebsocketTransporter.js","sourceRoot":"","sources":["../../src/WebsocketTransporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,EAAc,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAgB,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,MAAM,CAAA;AAC3M,OAAO,SAAS,MAAM,IAAI,CAAA;AAE1B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAwE,MAAM,wBAAwB,CAAA;AAyBxK,MAAM,OAAO,oBAAqB,SAAQ,OAAY;IAO5B;IANtB,YAAY,GAAG,IAAI,GAAG,EAA2B,CAAA;IACjD,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAA;IACxC,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAA;IACrC,IAAI,GAAG,IAAI,aAAa,CAAiB,CAAC,CAAC,CAAA;IAC3B,OAAO,GAAG,IAAI,eAAe,CAAsB,IAAI,GAAG,EAAE,CAAC,CAAA;IAE7E,YAAsB,UAAuC,EAAE;QAC3D,KAAK,EAAE,CAAA;QADW,YAAO,GAAP,OAAO,CAAkC;IAE/D,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,EAAE,CAAA;IACb,CAAC;IAED,OAAO,CAAC,GAAsB;QAC1B,KAAK,MAAM,QAAQ,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC/D,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,SAAQ;YAC7C,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;YACjD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE;gBAC5B,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE;aACjE,CAAC,CAAA;QACN,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAuB;QACzB,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAA;QAEjG,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,WAAW,EAAE,CAAA;YAC3D,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAClC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;QACxD,CAAC;IACL,CAAC;IAGD,KAAK,CAAC,IAAI,CAAC,MAAiB,EAAE,IAAoB;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;QAC1C,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YAC1B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,IAAI,CAAC,OAAO;YACvB,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;SACzC,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAA+B,EAAE,IAAc;QAC3D,MAAM,SAAS,GAAG;YACd,GAAI,IAAI,CAAC,IAAkC;YAC3C,OAAO,EAAE,IAAI,CAAC,SAAS;SACD,CAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,KAAa,EAAE,IAAO;QACnC,MAAM,IAAI,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,SAAS;YACf,KAAK;YACL,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;SACxB,CAAC,CAAA;IACN,CAAC;IAED,MAAM,CAAI,KAAa;QACnB,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAA+B,CAAA;QACjE,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,OAAO,GAAG,IAAI,OAAO,EAAK,CAAA;YAChC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE;gBACtB,KAAK,IAAI,CAAC,sBAAsB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;gBAEzD,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,CAC9B,QAAQ,CAAC,GAAG,EAAE;oBACV,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO;wBAAE,OAAM;oBAExD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;oBAC1B,KAAK,IAAI,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;gBAClE,CAAC,CAAC,CACL,CAAA;YACL,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;gBACV,mBAAmB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,KAAK,CAAC;aAC7E,CAAC,CAAC,CAAA;YAEH,KAAK,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;YAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAClC,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,CAAA;IACvB,CAAC;IAED,qBAAqB,CAAC,GAAW;QAC7B,OAAO,KAAK,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;YAC5C,OAAO,EAAE,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;QACjC,CAAC,CAAC,CAAC,IAAI,CACH,SAAS,CAAC,MAAM,CAAC,EAAE;YACf,MAAM,cAAc,GAAG,KAAK,CACxB,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1B,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAC7B,CAAC,IAAI,CACF,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,KAAK,CAAC,EAAE;gBACR,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAA;YACvE,CAAC,CAAC,EACF,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC,CAAC,CACjF,CAAA;YAED,MAAM,UAAU,GAAG,GAAG,EAAE;gBACpB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAC7C,IAAI,UAAU,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;oBAChC,OAAO,UAAU,CAAC,MAAM,CAAA;gBAC5B,CAAC;YACL,CAAC,CAAA;YAED,OAAO,KAAK,CACR,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAC1B,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CACpB,EACD,cAAc,CACjB,CAAC,IAAI,CACF,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,GAAG,EAAE;gBACL,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAC7C,IAAI,UAAU,EAAE,CAAC;oBACb,UAAU,CAAC,MAAM,GAAG,MAAM,CAAA;gBAC9B,CAAC;gBAED,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;YAC/C,CAAC,CAAC,EACF,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CACV,GAAG,CAAC,SAAS,CAAC,EAAE;gBACZ,KAAK,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;gBAC9D,KAAK,IAAI,CAAC,sBAAsB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;YAC7D,CAAC,CAAC,EACF,cAAc,EAAE,CACnB,EACD,SAAS,CAAiF,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,CAC7G,GAAG,CAAC,KAAK,CAAC,EAAE;gBACR,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;oBAC5B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBACV,CAAC,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;gBAElF,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;gBACnC,IAAI,CAAC,KAAK;oBAAE,OAAM;gBAElB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,EAAgC,CAAmE,CAAA;gBACxI,IAAI,CAAC,OAAO;oBAAE,OAAM;gBAEpB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;YAClC,CAAC,CAAC,EACF,cAAc,EAAE,CACnB,EACD,cAAc,EACd,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,KAAK,CAAC,CAAC,IAAI,CACpD,GAAG,CAAC,GAAG,EAAE;gBACL,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;oBACvC,MAAM,CAAC,IAAI,EAAE,CAAA;gBACjB,CAAC;YACL,CAAC,CAAC,EACF,cAAc,EAAE,CACnB,CACJ,CAAC,EACF,QAAQ,CAAC,GAAG,EAAE;gBACV,UAAU,EAAE,CAAA;gBAEZ,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;oBACvC,MAAM,CAAC,KAAK,EAAE,CAAA;gBAClB,CAAC;qBAAM,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC;oBACpD,MAAM,CAAC,SAAS,EAAE,CAAA;gBACtB,CAAC;YACL,CAAC,CAAC,CACL,CAAA;QACL,CAAC,CAAC,CACL,CAAC,IAAI,CAAC,KAAK,CAAC;YACT,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,IAAI,CAAC;SAC/D,CAAC,CAAC,CAAA;IACP,CAAC;IAEO,UAAU,CAAC,IAAY,EAAE,KAA4B;QACzD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IAEO,WAAW,CAAC,IAAY,EAAE,KAA4B;QAC1D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IAEO,SAAS,CAAC,IAAY,EAAE,KAA4B;QACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IAEO,MAAM,CAAC,KAA4B;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAC3C,IAAI,CAAC,MAAM;YAAE,OAAM;QAEnB,IAAI,CAAC,IAAI,CAAC;YACN,GAAG,EAAE;gBACD,OAAO,EAAE,KAAK,CAAC,SAAS;gBACxB,MAAM;aACT;SACe,CAAC,CAAA;IACzB,CAAC;IAEO,QAAQ,CAAC,GAAW,EAAE,KAAqD;QAC/E,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAA;QACrB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;YAC1B,IAAI;YACJ,QAAQ,EAAE,GAAG;SAChB,CAAC,CAAA;QACF,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;IACnC,CAAC;IAEO,UAAU,CAAC,GAAW,EAAE,KAAuD;QACnF,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC9C,IAAI,OAAO,EAAE,QAAQ,KAAK,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACrC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAqB,CAAC,CAAA;IAC5D,CAAC;IAEO,UAAU,CAAC,IAAY,EAAE,KAAuD;QACpF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC3C,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,IAAI,CAAC;YACD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAQ,CAAC,CAAA;QACpD,CAAC;QAAC,MAAM,CAAC;YACL,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACrC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,IAAoB;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAA;QACxD,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;QAE9E,IAAI,YAAY,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAC9C,OAAO,YAAY,CAAA;QACvB,CAAC;QAED,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YAClD,IAAI,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACxC,OAAO,MAAM,CAAA;YACjB,CAAC;QACL,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;IACjD,CAAC;IAED,YAAY,CAAC,MAAe;QACxB,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACzC,IAAI,SAAS,EAAE,CAAC;gBACZ,OAAO,SAAS,CAAC,IAAI,CAAA;YACzB,CAAC;QACL,CAAC;QAED,OAAO;YACH,GAAG,EAAE,EAAE;YACP,IAAI,EAAE,EAAE;YACR,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,MAAM,IAAI,EAAE;YACrB,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,EAAE;YAChB,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,CAAC;SACY,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,SAAyB;QAC9C,MAAM,IAAI,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,OAAO;YACb,EAAE,EAAE;gBACA,GAAG,SAAS;gBACZ,MAAM,EAAE,IAAI;aACf;SACJ,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,sBAAsB;QACxB,MAAM,IAAI,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACnC,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,MAAgB;QACvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAE/B,MAAM,IAAI,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,aAAa;YACnB,MAAM;SACT,CAAC,CAAA;IACN,CAAC;IAED,gBAAgB,CAAC,MAAiB;QAC9B,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,CAAA;QACtC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;IAC1B,CAAC;IAED,gBAAgB,CAAC,KAA4B;QACzC,IAAI,CAAC;YACD,OAAO;gBACH,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,GAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAA6B;aAC3C,CAAA;QAClB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAA;QACf,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAoC,EAAE,KAAiB;QACpE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;QACjD,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,KAAiB;QACnC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;aAC1C,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;aACpC,MAAM,CAAC,CAAC,MAAM,EAAuB,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,CAAC,CAAA;QAEnF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAM;QACV,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IAC5E,CAAC;IAED,WAAW,CAAC,GAAsB;QAC9B,OAAO,gBAAgB,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAA8B,CAAA;IACpF,CAAC;IAED,uBAAuB,CAAC,KAAc;QAClC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAA;IAC3D,CAAC;IAED,oBAAoB,CAAC,GAAW,EAAE,MAAiC;QAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACjD,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC3B,OAAM;QACV,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAChD,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACnC,CAAC;CACJ"}
1
+ {"version":3,"file":"WebsocketTransporter.js","sourceRoot":"","sources":["../../src/WebsocketTransporter.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAA;AAC1B,OAAO,EAAE,wBAAwB,EAAwD,MAAM,+BAA+B,CAAA;AAI9H,MAAM,OAAO,oBAAqB,SAAQ,wBAAwB;IAC9D,YAAY,UAAuC,EAAE;QACjD,KAAK,CAAC,OAAO,CAAC,CAAA;IAClB,CAAC;IAES,YAAY,CAAC,GAAW;QAC9B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,GAAG,CAA6B,CAAA;QAE7D,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,CAAC,UAAU,GAAG,aAAa,CAAA;QACrC,CAAC;QAED,OAAO,MAAM,CAAA;IACjB,CAAC;CACJ"}
@@ -0,0 +1 @@
1
+ export * from './GlobalWebsocketTransporter.js';
@@ -0,0 +1,2 @@
1
+ export * from './GlobalWebsocketTransporter.js';
2
+ //# sourceMappingURL=browser.js.map