@edryslabs/genericprovider 1.0.4 → 1.5.2
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/README.md +129 -5
- package/dist/index.d.ts +903 -60
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2723 -428
- package/dist/index.js.map +1 -1
- package/dist/lib.d.ts +1 -0
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +3 -0
- package/dist/lib.js.map +1 -1
- package/dist/providers/ably/index.d.ts +203 -0
- package/dist/providers/ably/index.d.ts.map +1 -0
- package/dist/providers/ably/index.js +561 -0
- package/dist/providers/ably/index.js.map +1 -0
- package/dist/providers/chunking.d.ts +26 -0
- package/dist/providers/chunking.d.ts.map +1 -0
- package/dist/providers/chunking.js +52 -0
- package/dist/providers/chunking.js.map +1 -0
- package/dist/providers/dummy/index.d.ts +138 -2
- package/dist/providers/dummy/index.d.ts.map +1 -1
- package/dist/providers/dummy/index.js +266 -4
- package/dist/providers/dummy/index.js.map +1 -1
- package/dist/providers/gun/index.d.ts +11 -4
- package/dist/providers/gun/index.d.ts.map +1 -1
- package/dist/providers/gun/index.js +104 -22
- package/dist/providers/gun/index.js.map +1 -1
- package/dist/providers/indexeddb/index.d.ts +44 -20
- package/dist/providers/indexeddb/index.d.ts.map +1 -1
- package/dist/providers/indexeddb/index.js +85 -71
- package/dist/providers/indexeddb/index.js.map +1 -1
- package/dist/providers/matrix/index.d.ts +6 -1
- package/dist/providers/matrix/index.d.ts.map +1 -1
- package/dist/providers/matrix/index.js +44 -6
- package/dist/providers/matrix/index.js.map +1 -1
- package/dist/providers/nostr/index.d.ts +69 -5
- package/dist/providers/nostr/index.d.ts.map +1 -1
- package/dist/providers/nostr/index.js +204 -36
- package/dist/providers/nostr/index.js.map +1 -1
- package/dist/providers/peerjs/index.d.ts +11 -1
- package/dist/providers/peerjs/index.d.ts.map +1 -1
- package/dist/providers/peerjs/index.js +32 -2
- package/dist/providers/peerjs/index.js.map +1 -1
- package/dist/providers/pubnub/index.d.ts +35 -1
- package/dist/providers/pubnub/index.d.ts.map +1 -1
- package/dist/providers/pubnub/index.js +56 -35
- package/dist/providers/pubnub/index.js.map +1 -1
- package/dist/providers/simple-peer/index.d.ts +10 -15
- package/dist/providers/simple-peer/index.d.ts.map +1 -1
- package/dist/providers/simple-peer/index.js +81 -109
- package/dist/providers/simple-peer/index.js.map +1 -1
- package/dist/providers/supabase/index.d.ts +43 -1
- package/dist/providers/supabase/index.d.ts.map +1 -1
- package/dist/providers/supabase/index.js +211 -18
- package/dist/providers/supabase/index.js.map +1 -1
- package/dist/providers/trystero/index.d.ts +19 -1
- package/dist/providers/trystero/index.d.ts.map +1 -1
- package/dist/providers/trystero/index.js +37 -2
- package/dist/providers/trystero/index.js.map +1 -1
- package/dist/providers/websocket/index.d.ts +9 -1
- package/dist/providers/websocket/index.d.ts.map +1 -1
- package/dist/providers/websocket/index.js +7 -1
- package/dist/providers/websocket/index.js.map +1 -1
- package/dist/transport.d.ts +69 -16
- package/dist/transport.d.ts.map +1 -1
- package/package.json +35 -24
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunking.js","sourceRoot":"","sources":["../../src/providers/chunking.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,OAAO,CAAC,CAAU;IAChC,OAAO,CACL,OAAO,CAAC,KAAK,QAAQ;QACrB,CAAC,KAAK,IAAI;QACT,CAAW,CAAC,OAAO,KAAK,IAAI;QAC7B,OAAQ,CAAW,CAAC,EAAE,KAAK,QAAQ;QACnC,OAAQ,CAAW,CAAC,IAAI,KAAK,QAAQ,CACtC,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,QAAgB;IACxD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACxE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAA;IAC5D,MAAM,MAAM,GAAY,EAAE,CAAA;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACzG,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,0EAA0E;AAC1E,MAAM,OAAO,cAAc;IAEzB,YAA6B,aAAa,EAAE;QAAf,eAAU,GAAV,UAAU,CAAK;QADpC,YAAO,GAAG,IAAI,GAAG,EAA+B,CAAA;IACT,CAAC;IAEhD,IAAI,CAAC,KAAY;QACf,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,gEAAgE;YAChE,wDAAwD;YACxD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CAAC,CAAA;YACjE,CAAC;YACD,KAAK,GAAG,IAAI,GAAG,EAAE,CAAA;YACjB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACnC,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAClC,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QACzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC7B,IAAI,GAAG,GAAG,EAAE,CAAA;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACzB,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAA;YACnC,GAAG,IAAI,IAAI,CAAA;QACb,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;CACF"}
|
|
@@ -54,11 +54,38 @@ export declare class DummyHub {
|
|
|
54
54
|
/**
|
|
55
55
|
* Register a transport in a room.
|
|
56
56
|
*/
|
|
57
|
-
join(room: string, transport: DummyTransport, callback: (data: Uint8Array) => void): void;
|
|
57
|
+
join(room: string, transport: DummyTransport, callback: (data: Uint8Array, from?: string) => void): void;
|
|
58
58
|
/**
|
|
59
59
|
* Unregister a transport from a room.
|
|
60
60
|
*/
|
|
61
61
|
leave(room: string, transport: DummyTransport): void;
|
|
62
|
+
private peerConnectSubs;
|
|
63
|
+
private peerDisconnectSubs;
|
|
64
|
+
/** Register a transport's onPeerDisconnect callback (see notifyLeave). */
|
|
65
|
+
registerPeerDisconnect(room: string, transport: DummyTransport, callback: (peerId: string) => void): void;
|
|
66
|
+
unregisterPeerDisconnect(room: string, transport: DummyTransport): void;
|
|
67
|
+
/**
|
|
68
|
+
* Simulate the leave notification a mesh transport's channel close (or a
|
|
69
|
+
* presence service) gives every other peer: called by DummyTransport
|
|
70
|
+
* when it leaves a room with `simulatePeerConnect` on.
|
|
71
|
+
*/
|
|
72
|
+
notifyLeave(room: string, transport: DummyTransport): void;
|
|
73
|
+
/**
|
|
74
|
+
* Register a transport's onPeerConnect callback and simulate the
|
|
75
|
+
* peer-discovery notifications a real mesh transport (peerjs,
|
|
76
|
+
* simple-peer) would fire: every OTHER already-registered transport in
|
|
77
|
+
* the room is notified about this new one, and this new transport is
|
|
78
|
+
* notified about every other one already registered - mirrors each side
|
|
79
|
+
* of a newly-opened data channel firing its own onPeerConnect. Test-only
|
|
80
|
+
* simulation: DummyTransport has no real peer-to-peer channels, this
|
|
81
|
+
* exists purely so GenericProvider's onPeerConnect handling (mesh-join
|
|
82
|
+
* burst coalescing) is exercisable via DummyTransport in benchmarks.
|
|
83
|
+
*/
|
|
84
|
+
registerPeerConnect(room: string, transport: DummyTransport, callback: (peerId: string) => void): void;
|
|
85
|
+
/**
|
|
86
|
+
* Unregister a transport's onPeerConnect subscription from a room.
|
|
87
|
+
*/
|
|
88
|
+
unregisterPeerConnect(room: string, transport: DummyTransport): void;
|
|
62
89
|
/**
|
|
63
90
|
* Broadcast a message to all clients in a room except the sender.
|
|
64
91
|
*/
|
|
@@ -67,6 +94,17 @@ export declare class DummyHub {
|
|
|
67
94
|
dropRate?: number;
|
|
68
95
|
jitter?: number;
|
|
69
96
|
}): void;
|
|
97
|
+
/**
|
|
98
|
+
* Deliver a message to ONE client in a room (Transport.sendTo), with the
|
|
99
|
+
* same latency/jitter/drop model as broadcast(). Silently does nothing if
|
|
100
|
+
* the target has left. Used only by transports created with
|
|
101
|
+
* `unicast: true`.
|
|
102
|
+
*/
|
|
103
|
+
unicast(room: string, targetId: string, data: Uint8Array, sender: DummyTransport, options?: {
|
|
104
|
+
latency?: number;
|
|
105
|
+
dropRate?: number;
|
|
106
|
+
jitter?: number;
|
|
107
|
+
}): void;
|
|
70
108
|
/**
|
|
71
109
|
* Get the number of clients connected to a room.
|
|
72
110
|
*/
|
|
@@ -124,18 +162,100 @@ export interface DummyTransportOptions {
|
|
|
124
162
|
* @default false
|
|
125
163
|
*/
|
|
126
164
|
autoConnect?: boolean;
|
|
165
|
+
/**
|
|
166
|
+
* Simulate onPeerConnect notifications (mesh-style peer-discovery, as a
|
|
167
|
+
* real peerjs/simple-peer/trystero transport would fire). DummyTransport
|
|
168
|
+
* otherwise models a broadcast relay (like websocket/pubnub/gun/matrix,
|
|
169
|
+
* none of which implement onPeerConnect) - off by default so plain
|
|
170
|
+
* multi-peer benchmarks/usage aren't silently shifted onto the mesh code
|
|
171
|
+
* path in GenericProvider.connect(). Enable only when a test specifically
|
|
172
|
+
* wants to exercise onPeerConnect-triggered behavior (e.g.
|
|
173
|
+
* test/dummy/bench-mesh-join-burst.ts).
|
|
174
|
+
* @default false
|
|
175
|
+
*/
|
|
176
|
+
simulatePeerConnect?: boolean;
|
|
177
|
+
/**
|
|
178
|
+
* Model a transport that can address a single peer (Transport.sendTo,
|
|
179
|
+
* like peerjs/simple-peer/trystero): `sendTo` is present and delivers to
|
|
180
|
+
* one client via DummyHub.unicast(), and every delivery carries the
|
|
181
|
+
* sender's transport id as `from`. Off by default so plain benchmarks
|
|
182
|
+
* keep modelling a broadcast relay (websocket/pubnub/gun/matrix/...),
|
|
183
|
+
* on which GenericProvider's unicast paths never engage.
|
|
184
|
+
* @default false
|
|
185
|
+
*/
|
|
186
|
+
unicast?: boolean;
|
|
187
|
+
/**
|
|
188
|
+
* Simulate a chunking transport's hard per-message size limit (bytes),
|
|
189
|
+
* mirroring how PubNub (`src/providers/pubnub/index.ts`, ~30KB) and Ably
|
|
190
|
+
* (`src/providers/ably/index.ts`) split any `send()` payload larger than
|
|
191
|
+
* their wire limit into multiple messages, reassembled on the receiving
|
|
192
|
+
* side. DummyTransport otherwise has no size limit at all, so this
|
|
193
|
+
* scenario (a large sync payload silently becoming N wire messages) is
|
|
194
|
+
* completely unbenchmarkable without it - see
|
|
195
|
+
* docs/superpowers/specs/2026-09-04-sync-optimization-round-3-ideas.md
|
|
196
|
+
* item 1. Off by default (`undefined`) so every existing bench script's
|
|
197
|
+
* message counts are unaffected.
|
|
198
|
+
*
|
|
199
|
+
* When set, EVERY `send()` call is wrapped in a small chunk header
|
|
200
|
+
* (chunk id + index + total), even payloads that fit in a single chunk -
|
|
201
|
+
* this keeps the wire format unambiguous instead of guessing whether an
|
|
202
|
+
* incoming message is chunked. Both sides of a room must set this
|
|
203
|
+
* consistently (this is a same-process test simulation, not a real
|
|
204
|
+
* negotiated protocol).
|
|
205
|
+
* @default undefined (no chunking)
|
|
206
|
+
*/
|
|
207
|
+
chunkSizeLimit?: number;
|
|
127
208
|
}
|
|
128
209
|
/**
|
|
129
210
|
* Dummy transport implementation for testing and development.
|
|
130
211
|
* Routes messages through a DummyHub instance.
|
|
131
212
|
*/
|
|
132
213
|
export declare class DummyTransport implements Transport {
|
|
214
|
+
private static _idCounter;
|
|
215
|
+
/**
|
|
216
|
+
* Transport.expectedRttMs: a simulated transport that knows its latency
|
|
217
|
+
* class - twice the configured one-way latency, or undefined when no
|
|
218
|
+
* latency is simulated (matching push transports that leave it unset).
|
|
219
|
+
*/
|
|
220
|
+
get expectedRttMs(): number | undefined;
|
|
221
|
+
/** Unique id for this transport instance, used by the onPeerConnect simulation. */
|
|
222
|
+
readonly id: string;
|
|
133
223
|
private hub?;
|
|
134
224
|
private explicitHub;
|
|
135
225
|
private options;
|
|
136
226
|
private _connected;
|
|
137
227
|
private _room;
|
|
138
228
|
private _callback?;
|
|
229
|
+
/**
|
|
230
|
+
* Transport.sendTo - present only when `unicast` is on (feature-detected
|
|
231
|
+
* by GenericProvider via `typeof transport.sendTo === 'function'`, so it
|
|
232
|
+
* must be genuinely absent otherwise, same pattern as onPeerConnect).
|
|
233
|
+
*/
|
|
234
|
+
readonly sendTo?: (peerId: string, data: Uint8Array) => void;
|
|
235
|
+
private _peerConnectCallback?;
|
|
236
|
+
private _peerDisconnectCallback?;
|
|
237
|
+
/** Reassembly buffers for chunkSizeLimit mode, keyed by chunk id. */
|
|
238
|
+
private _chunkBuffers;
|
|
239
|
+
/**
|
|
240
|
+
* Register callback for peer-connect notifications. Test-only simulation
|
|
241
|
+
* of what a real mesh transport (peerjs, simple-peer) does when a new
|
|
242
|
+
* data channel opens - see DummyHub.registerPeerConnect(). Assigned
|
|
243
|
+
* conditionally in the constructor (NOT a class method - see there for
|
|
244
|
+
* why): present only when `simulatePeerConnect` is on, so this property
|
|
245
|
+
* is genuinely absent (`undefined`), not merely a no-op function, on a
|
|
246
|
+
* plain DummyTransport. GenericProvider feature-detects onPeerConnect via
|
|
247
|
+
* `if (this.transport.onPeerConnect)` (matching the optional method on
|
|
248
|
+
* the `Transport` interface) - a class method satisfying that interface
|
|
249
|
+
* is ALWAYS present on every instance regardless of any constructor
|
|
250
|
+
* option, which previously defeated this feature-detection for every
|
|
251
|
+
* DummyTransport consumer (even non-mesh ones), silently registering an
|
|
252
|
+
* inert onPeerConnect subscription and, since GenericProvider gained
|
|
253
|
+
* onPeerConnect-conditional behavior elsewhere in its periodic-sync path,
|
|
254
|
+
* silently suppressing periodic awareness re-announce for plain
|
|
255
|
+
* DummyTransport usage too - a real bug, not just untidiness.
|
|
256
|
+
*/
|
|
257
|
+
readonly onPeerDisconnect?: (callback: (peerId: string) => void) => () => void;
|
|
258
|
+
readonly onPeerConnect?: (callback: (peerId: string) => void) => () => void;
|
|
139
259
|
/**
|
|
140
260
|
* Create a new DummyTransport.
|
|
141
261
|
*
|
|
@@ -172,10 +292,26 @@ export declare class DummyTransport implements Transport {
|
|
|
172
292
|
* Send data to all other clients in the room.
|
|
173
293
|
*/
|
|
174
294
|
send(data: Uint8Array): void;
|
|
295
|
+
/**
|
|
296
|
+
* Split `data` into one or more hub-delivered chunks, each carrying a
|
|
297
|
+
* small [chunkId][index][total] header - mirrors (in spirit, not byte
|
|
298
|
+
* format) how PubNub/Ably split an oversized payload into multiple wire
|
|
299
|
+
* messages. Always chunks (even a payload that fits in one chunk, as a
|
|
300
|
+
* single total=1 "chunk") so the receiving side's framing is unambiguous
|
|
301
|
+
* regardless of payload size - see chunkSizeLimit's doc comment.
|
|
302
|
+
*/
|
|
303
|
+
private _sendChunked;
|
|
304
|
+
/**
|
|
305
|
+
* Reassemble a chunked message. Returns the complete payload once every
|
|
306
|
+
* chunk for its chunkId has arrived, or `undefined` while still waiting
|
|
307
|
+
* on more chunks (including the single-chunk total=1 case reassembling
|
|
308
|
+
* immediately).
|
|
309
|
+
*/
|
|
310
|
+
private _reassembleChunk;
|
|
175
311
|
/**
|
|
176
312
|
* Register callback for incoming messages.
|
|
177
313
|
*/
|
|
178
|
-
onMessage(callback: (data: Uint8Array) => void): () => void;
|
|
314
|
+
onMessage(callback: (data: Uint8Array, from?: string) => void): () => void;
|
|
179
315
|
/**
|
|
180
316
|
* Check if connected.
|
|
181
317
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/dummy/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElE;;;GAGG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAMA;IAEb;;OAEG;IACH,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,cAAc,EACzB,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/dummy/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,6 +51,8 @@
|
|
|
51
51
|
export class DummyHub {
|
|
52
52
|
constructor() {
|
|
53
53
|
this.rooms = new Map();
|
|
54
|
+
this.peerConnectSubs = new Map();
|
|
55
|
+
this.peerDisconnectSubs = new Map();
|
|
54
56
|
}
|
|
55
57
|
/**
|
|
56
58
|
* Register a transport in a room.
|
|
@@ -78,6 +80,77 @@ export class DummyHub {
|
|
|
78
80
|
}
|
|
79
81
|
}
|
|
80
82
|
}
|
|
83
|
+
/** Register a transport's onPeerDisconnect callback (see notifyLeave). */
|
|
84
|
+
registerPeerDisconnect(room, transport, callback) {
|
|
85
|
+
if (!this.peerDisconnectSubs.has(room)) {
|
|
86
|
+
this.peerDisconnectSubs.set(room, new Set());
|
|
87
|
+
}
|
|
88
|
+
this.peerDisconnectSubs.get(room).add({ transport, callback });
|
|
89
|
+
}
|
|
90
|
+
unregisterPeerDisconnect(room, transport) {
|
|
91
|
+
const subs = this.peerDisconnectSubs.get(room);
|
|
92
|
+
if (!subs)
|
|
93
|
+
return;
|
|
94
|
+
for (const entry of subs) {
|
|
95
|
+
if (entry.transport === transport) {
|
|
96
|
+
subs.delete(entry);
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Simulate the leave notification a mesh transport's channel close (or a
|
|
103
|
+
* presence service) gives every other peer: called by DummyTransport
|
|
104
|
+
* when it leaves a room with `simulatePeerConnect` on.
|
|
105
|
+
*/
|
|
106
|
+
notifyLeave(room, transport) {
|
|
107
|
+
const subs = this.peerDisconnectSubs.get(room);
|
|
108
|
+
if (!subs)
|
|
109
|
+
return;
|
|
110
|
+
for (const entry of subs) {
|
|
111
|
+
if (entry.transport !== transport)
|
|
112
|
+
entry.callback(transport.id);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Register a transport's onPeerConnect callback and simulate the
|
|
117
|
+
* peer-discovery notifications a real mesh transport (peerjs,
|
|
118
|
+
* simple-peer) would fire: every OTHER already-registered transport in
|
|
119
|
+
* the room is notified about this new one, and this new transport is
|
|
120
|
+
* notified about every other one already registered - mirrors each side
|
|
121
|
+
* of a newly-opened data channel firing its own onPeerConnect. Test-only
|
|
122
|
+
* simulation: DummyTransport has no real peer-to-peer channels, this
|
|
123
|
+
* exists purely so GenericProvider's onPeerConnect handling (mesh-join
|
|
124
|
+
* burst coalescing) is exercisable via DummyTransport in benchmarks.
|
|
125
|
+
*/
|
|
126
|
+
registerPeerConnect(room, transport, callback) {
|
|
127
|
+
if (!this.peerConnectSubs.has(room)) {
|
|
128
|
+
this.peerConnectSubs.set(room, new Set());
|
|
129
|
+
}
|
|
130
|
+
const subs = this.peerConnectSubs.get(room);
|
|
131
|
+
const entry = { transport, callback };
|
|
132
|
+
subs.add(entry);
|
|
133
|
+
for (const other of subs) {
|
|
134
|
+
if (other.transport === transport)
|
|
135
|
+
continue;
|
|
136
|
+
other.callback(transport.id);
|
|
137
|
+
callback(other.transport.id);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Unregister a transport's onPeerConnect subscription from a room.
|
|
142
|
+
*/
|
|
143
|
+
unregisterPeerConnect(room, transport) {
|
|
144
|
+
const subs = this.peerConnectSubs.get(room);
|
|
145
|
+
if (!subs)
|
|
146
|
+
return;
|
|
147
|
+
for (const entry of subs) {
|
|
148
|
+
if (entry.transport === transport) {
|
|
149
|
+
subs.delete(entry);
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
81
154
|
/**
|
|
82
155
|
* Broadcast a message to all clients in a room except the sender.
|
|
83
156
|
*/
|
|
@@ -108,7 +181,7 @@ export class DummyHub {
|
|
|
108
181
|
if (actualDelay > 0) {
|
|
109
182
|
setTimeout(() => {
|
|
110
183
|
try {
|
|
111
|
-
client.callback(data);
|
|
184
|
+
client.callback(data, sender.id);
|
|
112
185
|
}
|
|
113
186
|
catch (error) {
|
|
114
187
|
console.error('Error delivering message:', error);
|
|
@@ -117,7 +190,7 @@ export class DummyHub {
|
|
|
117
190
|
}
|
|
118
191
|
else {
|
|
119
192
|
try {
|
|
120
|
-
client.callback(data);
|
|
193
|
+
client.callback(data, sender.id);
|
|
121
194
|
}
|
|
122
195
|
catch (error) {
|
|
123
196
|
console.error('Error delivering message:', error);
|
|
@@ -125,6 +198,43 @@ export class DummyHub {
|
|
|
125
198
|
}
|
|
126
199
|
}
|
|
127
200
|
}
|
|
201
|
+
/**
|
|
202
|
+
* Deliver a message to ONE client in a room (Transport.sendTo), with the
|
|
203
|
+
* same latency/jitter/drop model as broadcast(). Silently does nothing if
|
|
204
|
+
* the target has left. Used only by transports created with
|
|
205
|
+
* `unicast: true`.
|
|
206
|
+
*/
|
|
207
|
+
unicast(room, targetId, data, sender, options) {
|
|
208
|
+
const clients = this.rooms.get(room);
|
|
209
|
+
if (!clients)
|
|
210
|
+
return;
|
|
211
|
+
for (const client of clients) {
|
|
212
|
+
if (client.transport.id !== targetId || client.transport === sender)
|
|
213
|
+
continue;
|
|
214
|
+
const dropRate = options?.dropRate ?? 0;
|
|
215
|
+
if (dropRate > 0 && Math.random() < dropRate)
|
|
216
|
+
return;
|
|
217
|
+
const latency = options?.latency ?? 0;
|
|
218
|
+
const jitter = options?.jitter ?? 0;
|
|
219
|
+
let actualDelay = latency;
|
|
220
|
+
if (latency > 0 && jitter > 0) {
|
|
221
|
+
actualDelay = latency * (1 - jitter) + Math.random() * (2 * latency * jitter);
|
|
222
|
+
}
|
|
223
|
+
const deliver = () => {
|
|
224
|
+
try {
|
|
225
|
+
client.callback(data, sender.id);
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
console.error('Error delivering message:', error);
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
if (actualDelay > 0)
|
|
232
|
+
setTimeout(deliver, actualDelay);
|
|
233
|
+
else
|
|
234
|
+
deliver();
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
128
238
|
/**
|
|
129
239
|
* Get the number of clients connected to a room.
|
|
130
240
|
*/
|
|
@@ -158,11 +268,22 @@ function getOrCreateHub(room) {
|
|
|
158
268
|
}
|
|
159
269
|
return globalHubs.get(room);
|
|
160
270
|
}
|
|
271
|
+
/** Chunk header: [chunkId: uint32][index: uint16][total: uint16]. */
|
|
272
|
+
const CHUNK_HEADER_SIZE = 8;
|
|
161
273
|
/**
|
|
162
274
|
* Dummy transport implementation for testing and development.
|
|
163
275
|
* Routes messages through a DummyHub instance.
|
|
164
276
|
*/
|
|
165
277
|
export class DummyTransport {
|
|
278
|
+
/**
|
|
279
|
+
* Transport.expectedRttMs: a simulated transport that knows its latency
|
|
280
|
+
* class - twice the configured one-way latency, or undefined when no
|
|
281
|
+
* latency is simulated (matching push transports that leave it unset).
|
|
282
|
+
*/
|
|
283
|
+
get expectedRttMs() {
|
|
284
|
+
const latency = this.options.latency ?? 0;
|
|
285
|
+
return latency > 0 ? 2 * latency : undefined;
|
|
286
|
+
}
|
|
166
287
|
/**
|
|
167
288
|
* Create a new DummyTransport.
|
|
168
289
|
*
|
|
@@ -187,8 +308,12 @@ export class DummyTransport {
|
|
|
187
308
|
* ```
|
|
188
309
|
*/
|
|
189
310
|
constructor(options = {}) {
|
|
311
|
+
/** Unique id for this transport instance, used by the onPeerConnect simulation. */
|
|
312
|
+
this.id = `dummy-${DummyTransport._idCounter++}`;
|
|
190
313
|
this._connected = false;
|
|
191
314
|
this._room = '';
|
|
315
|
+
/** Reassembly buffers for chunkSizeLimit mode, keyed by chunk id. */
|
|
316
|
+
this._chunkBuffers = new Map();
|
|
192
317
|
this.hub = options.hub;
|
|
193
318
|
this.explicitHub = !!options.hub;
|
|
194
319
|
this.options = {
|
|
@@ -196,7 +321,50 @@ export class DummyTransport {
|
|
|
196
321
|
dropRate: options.dropRate ?? 0,
|
|
197
322
|
jitter: options.jitter ?? 0,
|
|
198
323
|
autoConnect: options.autoConnect ?? false,
|
|
324
|
+
simulatePeerConnect: options.simulatePeerConnect ?? false,
|
|
325
|
+
unicast: options.unicast ?? false,
|
|
326
|
+
chunkSizeLimit: options.chunkSizeLimit,
|
|
199
327
|
};
|
|
328
|
+
if (this.options.unicast) {
|
|
329
|
+
this.sendTo = (peerId, data) => {
|
|
330
|
+
if (!this._connected || !this.hub)
|
|
331
|
+
return;
|
|
332
|
+
// Unicast is never chunked here - the chunk simulation models
|
|
333
|
+
// relay size limits, which is a broadcast-transport concern.
|
|
334
|
+
this.hub.unicast(this._room, peerId, data, this, {
|
|
335
|
+
latency: this.options.latency,
|
|
336
|
+
dropRate: this.options.dropRate,
|
|
337
|
+
jitter: this.options.jitter,
|
|
338
|
+
});
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
if (this.options.simulatePeerConnect) {
|
|
342
|
+
this.onPeerConnect = (callback) => {
|
|
343
|
+
this._peerConnectCallback = callback;
|
|
344
|
+
if (this._connected && this._room && this.hub) {
|
|
345
|
+
this.hub.registerPeerConnect(this._room, this, callback);
|
|
346
|
+
}
|
|
347
|
+
return () => {
|
|
348
|
+
this._peerConnectCallback = undefined;
|
|
349
|
+
if (this.hub) {
|
|
350
|
+
this.hub.unregisterPeerConnect(this._room, this);
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
};
|
|
354
|
+
// The counterpart: a transport that leaves the room tells every
|
|
355
|
+
// other subscribed transport, like a data channel closing.
|
|
356
|
+
this.onPeerDisconnect = (callback) => {
|
|
357
|
+
this._peerDisconnectCallback = callback;
|
|
358
|
+
if (this._connected && this._room && this.hub) {
|
|
359
|
+
this.hub.registerPeerDisconnect(this._room, this, callback);
|
|
360
|
+
}
|
|
361
|
+
return () => {
|
|
362
|
+
this._peerDisconnectCallback = undefined;
|
|
363
|
+
if (this.hub)
|
|
364
|
+
this.hub.unregisterPeerDisconnect(this._room, this);
|
|
365
|
+
};
|
|
366
|
+
};
|
|
367
|
+
}
|
|
200
368
|
}
|
|
201
369
|
/**
|
|
202
370
|
* Connect to a room on the hub.
|
|
@@ -217,7 +385,21 @@ export class DummyTransport {
|
|
|
217
385
|
this.hub.join(this._room, this, this._callback);
|
|
218
386
|
}
|
|
219
387
|
// Otherwise, will join when onMessage() is called
|
|
388
|
+
// Mark connected before registering onPeerConnect: registerPeerConnect()
|
|
389
|
+
// synchronously fires callbacks (including this transport's own, about
|
|
390
|
+
// peers already in the room), and a real mesh transport only fires
|
|
391
|
+
// onPeerConnect once it considers its own channel open - so any
|
|
392
|
+
// consumer reacting to that notification (e.g. GenericProvider calling
|
|
393
|
+
// syncNow()) should see isConnected as true, matching real transports.
|
|
220
394
|
this._connected = true;
|
|
395
|
+
// Same deal for onPeerConnect - register with the hub now that the room
|
|
396
|
+
// is known, if a caller already subscribed before connect() resolved.
|
|
397
|
+
if (this._peerConnectCallback) {
|
|
398
|
+
this.hub.registerPeerConnect(this._room, this, this._peerConnectCallback);
|
|
399
|
+
}
|
|
400
|
+
if (this._peerDisconnectCallback) {
|
|
401
|
+
this.hub.registerPeerDisconnect(this._room, this, this._peerDisconnectCallback);
|
|
402
|
+
}
|
|
221
403
|
}
|
|
222
404
|
/**
|
|
223
405
|
* Disconnect from the hub.
|
|
@@ -227,6 +409,10 @@ export class DummyTransport {
|
|
|
227
409
|
return;
|
|
228
410
|
if (this.hub) {
|
|
229
411
|
this.hub.leave(this._room, this);
|
|
412
|
+
this.hub.unregisterPeerConnect(this._room, this);
|
|
413
|
+
if (this.options.simulatePeerConnect)
|
|
414
|
+
this.hub.notifyLeave(this._room, this);
|
|
415
|
+
this.hub.unregisterPeerDisconnect(this._room, this);
|
|
230
416
|
}
|
|
231
417
|
this._connected = false;
|
|
232
418
|
}
|
|
@@ -241,6 +427,11 @@ export class DummyTransport {
|
|
|
241
427
|
}
|
|
242
428
|
return;
|
|
243
429
|
}
|
|
430
|
+
const limit = this.options.chunkSizeLimit;
|
|
431
|
+
if (limit) {
|
|
432
|
+
this._sendChunked(data, limit);
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
244
435
|
// Broadcast through hub
|
|
245
436
|
this.hub.broadcast(this._room, data, this, {
|
|
246
437
|
latency: this.options.latency,
|
|
@@ -248,14 +439,84 @@ export class DummyTransport {
|
|
|
248
439
|
jitter: this.options.jitter,
|
|
249
440
|
});
|
|
250
441
|
}
|
|
442
|
+
/**
|
|
443
|
+
* Split `data` into one or more hub-delivered chunks, each carrying a
|
|
444
|
+
* small [chunkId][index][total] header - mirrors (in spirit, not byte
|
|
445
|
+
* format) how PubNub/Ably split an oversized payload into multiple wire
|
|
446
|
+
* messages. Always chunks (even a payload that fits in one chunk, as a
|
|
447
|
+
* single total=1 "chunk") so the receiving side's framing is unambiguous
|
|
448
|
+
* regardless of payload size - see chunkSizeLimit's doc comment.
|
|
449
|
+
*/
|
|
450
|
+
_sendChunked(data, limit) {
|
|
451
|
+
const payloadSize = Math.max(1, limit - CHUNK_HEADER_SIZE);
|
|
452
|
+
const total = Math.max(1, Math.ceil(data.length / payloadSize));
|
|
453
|
+
const chunkId = Math.floor(Math.random() * 0xffffffff);
|
|
454
|
+
for (let i = 0; i < total; i++) {
|
|
455
|
+
const slice = data.subarray(i * payloadSize, (i + 1) * payloadSize);
|
|
456
|
+
const packed = new Uint8Array(CHUNK_HEADER_SIZE + slice.length);
|
|
457
|
+
const view = new DataView(packed.buffer);
|
|
458
|
+
view.setUint32(0, chunkId);
|
|
459
|
+
view.setUint16(4, i);
|
|
460
|
+
view.setUint16(6, total);
|
|
461
|
+
packed.set(slice, CHUNK_HEADER_SIZE);
|
|
462
|
+
this.hub.broadcast(this._room, packed, this, {
|
|
463
|
+
latency: this.options.latency,
|
|
464
|
+
dropRate: this.options.dropRate,
|
|
465
|
+
jitter: this.options.jitter,
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Reassemble a chunked message. Returns the complete payload once every
|
|
471
|
+
* chunk for its chunkId has arrived, or `undefined` while still waiting
|
|
472
|
+
* on more chunks (including the single-chunk total=1 case reassembling
|
|
473
|
+
* immediately).
|
|
474
|
+
*/
|
|
475
|
+
_reassembleChunk(packed) {
|
|
476
|
+
const view = new DataView(packed.buffer, packed.byteOffset, packed.byteLength);
|
|
477
|
+
const chunkId = view.getUint32(0);
|
|
478
|
+
const index = view.getUint16(4);
|
|
479
|
+
const total = view.getUint16(6);
|
|
480
|
+
const payload = packed.subarray(CHUNK_HEADER_SIZE);
|
|
481
|
+
if (total === 1) {
|
|
482
|
+
return payload;
|
|
483
|
+
}
|
|
484
|
+
let buf = this._chunkBuffers.get(chunkId);
|
|
485
|
+
if (!buf) {
|
|
486
|
+
buf = new Map();
|
|
487
|
+
this._chunkBuffers.set(chunkId, buf);
|
|
488
|
+
}
|
|
489
|
+
buf.set(index, payload);
|
|
490
|
+
if (buf.size < total) {
|
|
491
|
+
return undefined;
|
|
492
|
+
}
|
|
493
|
+
this._chunkBuffers.delete(chunkId);
|
|
494
|
+
const totalLength = Array.from(buf.values()).reduce((sum, c) => sum + c.length, 0);
|
|
495
|
+
const combined = new Uint8Array(totalLength);
|
|
496
|
+
let offset = 0;
|
|
497
|
+
for (let i = 0; i < total; i++) {
|
|
498
|
+
const part = buf.get(i);
|
|
499
|
+
combined.set(part, offset);
|
|
500
|
+
offset += part.length;
|
|
501
|
+
}
|
|
502
|
+
return combined;
|
|
503
|
+
}
|
|
251
504
|
/**
|
|
252
505
|
* Register callback for incoming messages.
|
|
253
506
|
*/
|
|
254
507
|
onMessage(callback) {
|
|
255
|
-
|
|
508
|
+
const limit = this.options.chunkSizeLimit;
|
|
509
|
+
const wrappedCallback = limit
|
|
510
|
+
? (packed, from) => {
|
|
511
|
+
const reassembled = this._reassembleChunk(packed);
|
|
512
|
+
if (reassembled)
|
|
513
|
+
callback(reassembled, from);
|
|
514
|
+
}
|
|
515
|
+
: callback;
|
|
516
|
+
this._callback = wrappedCallback;
|
|
256
517
|
// If already connected, register with hub now
|
|
257
518
|
if (this._connected && this._room && this.hub) {
|
|
258
|
-
this.hub.join(this._room, this,
|
|
519
|
+
this.hub.join(this._room, this, wrappedCallback);
|
|
259
520
|
}
|
|
260
521
|
// Return unsubscribe function
|
|
261
522
|
return () => {
|
|
@@ -281,6 +542,7 @@ export class DummyTransport {
|
|
|
281
542
|
return this.hub;
|
|
282
543
|
}
|
|
283
544
|
}
|
|
545
|
+
DummyTransport._idCounter = 0;
|
|
284
546
|
/**
|
|
285
547
|
* Utility functions for debugging and testing.
|
|
286
548
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/dummy/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/dummy/index.ts"],"names":[],"mappings":"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"}
|