transport-io 0.0.1
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/LICENSE +21 -0
- package/README.md +28 -0
- package/dist/adapter.d.ts +69 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +51 -0
- package/dist/adapter.js.map +1 -0
- package/dist/client.d.ts +60 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +162 -0
- package/dist/client.js.map +1 -0
- package/dist/codec.d.ts +5 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +47 -0
- package/dist/codec.js.map +1 -0
- package/dist/contract.d.ts +79 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +54 -0
- package/dist/contract.js.map +1 -0
- package/dist/datagram.d.ts +29 -0
- package/dist/datagram.d.ts.map +1 -0
- package/dist/datagram.js +92 -0
- package/dist/datagram.js.map +1 -0
- package/dist/errors.d.ts +8 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +11 -0
- package/dist/errors.js.map +1 -0
- package/dist/framer.d.ts +21 -0
- package/dist/framer.d.ts.map +1 -0
- package/dist/framer.js +110 -0
- package/dist/framer.js.map +1 -0
- package/dist/handshake.d.ts +34 -0
- package/dist/handshake.d.ts.map +1 -0
- package/dist/handshake.js +79 -0
- package/dist/handshake.js.map +1 -0
- package/dist/hub.d.ts +43 -0
- package/dist/hub.d.ts.map +1 -0
- package/dist/hub.js +149 -0
- package/dist/hub.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/origin.d.ts +18 -0
- package/dist/origin.d.ts.map +1 -0
- package/dist/origin.js +72 -0
- package/dist/origin.js.map +1 -0
- package/dist/protocol.d.ts +79 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +76 -0
- package/dist/protocol.js.map +1 -0
- package/dist/queue.d.ts +45 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +94 -0
- package/dist/queue.js.map +1 -0
- package/dist/server.d.ts +45 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +127 -0
- package/dist/server.js.map +1 -0
- package/dist/session.d.ts +94 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +645 -0
- package/dist/session.js.map +1 -0
- package/dist/testing/hostile-adapter.d.ts +44 -0
- package/dist/testing/hostile-adapter.d.ts.map +1 -0
- package/dist/testing/hostile-adapter.js +116 -0
- package/dist/testing/hostile-adapter.js.map +1 -0
- package/dist/testing/index.d.ts +8 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +8 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/transport/browser.d.ts +8 -0
- package/dist/transport/browser.d.ts.map +1 -0
- package/dist/transport/browser.js +89 -0
- package/dist/transport/browser.js.map +1 -0
- package/dist/transport/fails.node.d.ts +33 -0
- package/dist/transport/fails.node.d.ts.map +1 -0
- package/dist/transport/fails.node.js +184 -0
- package/dist/transport/fails.node.js.map +1 -0
- package/dist/transport/loopback.d.ts +11 -0
- package/dist/transport/loopback.d.ts.map +1 -0
- package/dist/transport/loopback.js +98 -0
- package/dist/transport/loopback.js.map +1 -0
- package/dist/transport/moq.node.d.ts +19 -0
- package/dist/transport/moq.node.d.ts.map +1 -0
- package/dist/transport/moq.node.js +211 -0
- package/dist/transport/moq.node.js.map +1 -0
- package/dist/transport/parity-suite.d.ts +40 -0
- package/dist/transport/parity-suite.d.ts.map +1 -0
- package/dist/transport/parity-suite.js +133 -0
- package/dist/transport/parity-suite.js.map +1 -0
- package/dist/transport/types.d.ts +36 -0
- package/dist/transport/types.d.ts.map +1 -0
- package/dist/transport/types.js +2 -0
- package/dist/transport/types.js.map +1 -0
- package/dist/transport/unreliable.d.ts +37 -0
- package/dist/transport/unreliable.d.ts.map +1 -0
- package/dist/transport/unreliable.js +59 -0
- package/dist/transport/unreliable.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A deliberately hostile Adapter, for conformance testing.
|
|
3
|
+
*
|
|
4
|
+
* `MemoryAdapter` is a misleading sole implementor: it is effectively synchronous, never
|
|
5
|
+
* fails, passes live object references and always knows a room's full membership. None of
|
|
6
|
+
* that holds for a real bus, so core could satisfy it perfectly and still be unshippable
|
|
7
|
+
* on Redis.
|
|
8
|
+
*
|
|
9
|
+
* This one behaves like a bus. It serialises every frame to bytes and back, adds
|
|
10
|
+
* artificial latency, delivers the publisher its own messages, reorders deliveries, and
|
|
11
|
+
* fails on command. If core passes against this, the boundary should survive a real
|
|
12
|
+
* broker. No network and no Redis: hostility is cheaper than infrastructure.
|
|
13
|
+
*/
|
|
14
|
+
import { type Adapter, type BroadcastOptions, type Frame, type MemoryBus, type PeerId, type RemoteEnvelope } from '../adapter.ts';
|
|
15
|
+
export interface HostileOptions {
|
|
16
|
+
/** Delivery is deferred by this many milliseconds. Real buses are not synchronous. */
|
|
17
|
+
readonly latencyMs?: number;
|
|
18
|
+
/** Deliver envelopes in reverse order within each batch. */
|
|
19
|
+
readonly reorder?: boolean;
|
|
20
|
+
/** Deliver every envelope twice. A real bus is at-least-once. */
|
|
21
|
+
readonly duplicate?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare class HostileAdapter implements Adapter {
|
|
24
|
+
#private;
|
|
25
|
+
readonly nodeId: string;
|
|
26
|
+
/** Set to make the next call of that method reject. Cleared after it fires. */
|
|
27
|
+
failNextJoin: boolean;
|
|
28
|
+
failNextLeave: boolean;
|
|
29
|
+
failNextBroadcast: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* `bus` lets several of these model several nodes on one broker. Without it each
|
|
32
|
+
* instance is its own island, which is why the cross-node path went untested against the
|
|
33
|
+
* adapter written specifically to stress the adapter boundary.
|
|
34
|
+
*/
|
|
35
|
+
constructor(nodeId: string, opts?: HostileOptions, bus?: MemoryBus);
|
|
36
|
+
join(room: string, peer: PeerId): Promise<void>;
|
|
37
|
+
leave(room: string, peer: PeerId): Promise<void>;
|
|
38
|
+
broadcast(room: string, frame: Frame, opts: BroadcastOptions): Promise<void>;
|
|
39
|
+
onRemote(cb: (e: RemoteEnvelope) => void): void;
|
|
40
|
+
/** Deliberately NOT exposed to core: no node may assume it knows full membership. */
|
|
41
|
+
membershipForAssertionsOnly(room: string): ReadonlySet<PeerId>;
|
|
42
|
+
settle(): Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=hostile-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hostile-adapter.d.ts","sourceRoot":"","sources":["../../src/testing/hostile-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,KAAK,KAAK,EACV,KAAK,SAAS,EAEd,KAAK,MAAM,EACX,KAAK,cAAc,EACpB,MAAM,eAAe,CAAA;AAEtB,MAAM,WAAW,cAAc;IAC7B,sFAAsF;IACtF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,qBAAa,cAAe,YAAW,OAAO;;IAI5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IAEvB,+EAA+E;IAC/E,YAAY,UAAQ;IACpB,aAAa,UAAQ;IACrB,iBAAiB,UAAQ;IAKzB;;;;OAIG;IACH,YAAY,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,EAAE,GAAG,GAAE,SAAuB,EAIlF;IAEK,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYpD;IAEK,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOrD;IAEK,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCjF;IAED,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI,CAE9C;IAED,qFAAqF;IACrF,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAE7D;IAEK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAG5B;CAgBF"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A deliberately hostile Adapter, for conformance testing.
|
|
3
|
+
*
|
|
4
|
+
* `MemoryAdapter` is a misleading sole implementor: it is effectively synchronous, never
|
|
5
|
+
* fails, passes live object references and always knows a room's full membership. None of
|
|
6
|
+
* that holds for a real bus, so core could satisfy it perfectly and still be unshippable
|
|
7
|
+
* on Redis.
|
|
8
|
+
*
|
|
9
|
+
* This one behaves like a bus. It serialises every frame to bytes and back, adds
|
|
10
|
+
* artificial latency, delivers the publisher its own messages, reorders deliveries, and
|
|
11
|
+
* fails on command. If core passes against this, the boundary should survive a real
|
|
12
|
+
* broker. No network and no Redis: hostility is cheaper than infrastructure.
|
|
13
|
+
*/
|
|
14
|
+
import { memoryBus, } from '../adapter.js';
|
|
15
|
+
export class HostileAdapter {
|
|
16
|
+
#rooms = new Map();
|
|
17
|
+
#bus;
|
|
18
|
+
#opts;
|
|
19
|
+
nodeId;
|
|
20
|
+
/** Set to make the next call of that method reject. Cleared after it fires. */
|
|
21
|
+
failNextJoin = false;
|
|
22
|
+
failNextLeave = false;
|
|
23
|
+
failNextBroadcast = false;
|
|
24
|
+
#pending = [];
|
|
25
|
+
#timer;
|
|
26
|
+
/**
|
|
27
|
+
* `bus` lets several of these model several nodes on one broker. Without it each
|
|
28
|
+
* instance is its own island, which is why the cross-node path went untested against the
|
|
29
|
+
* adapter written specifically to stress the adapter boundary.
|
|
30
|
+
*/
|
|
31
|
+
constructor(nodeId, opts = {}, bus = memoryBus()) {
|
|
32
|
+
this.nodeId = nodeId;
|
|
33
|
+
this.#opts = opts;
|
|
34
|
+
this.#bus = bus;
|
|
35
|
+
}
|
|
36
|
+
async join(room, peer) {
|
|
37
|
+
await this.#tick();
|
|
38
|
+
if (this.failNextJoin) {
|
|
39
|
+
this.failNextJoin = false;
|
|
40
|
+
throw new Error('hostile adapter: join rejected');
|
|
41
|
+
}
|
|
42
|
+
let set = this.#rooms.get(room);
|
|
43
|
+
if (set === undefined) {
|
|
44
|
+
set = new Set();
|
|
45
|
+
this.#rooms.set(room, set);
|
|
46
|
+
}
|
|
47
|
+
set.add(peer);
|
|
48
|
+
}
|
|
49
|
+
async leave(room, peer) {
|
|
50
|
+
await this.#tick();
|
|
51
|
+
if (this.failNextLeave) {
|
|
52
|
+
this.failNextLeave = false;
|
|
53
|
+
throw new Error('hostile adapter: leave rejected');
|
|
54
|
+
}
|
|
55
|
+
this.#rooms.get(room)?.delete(peer);
|
|
56
|
+
}
|
|
57
|
+
async broadcast(room, frame, opts) {
|
|
58
|
+
await this.#tick();
|
|
59
|
+
if (this.failNextBroadcast) {
|
|
60
|
+
this.failNextBroadcast = false;
|
|
61
|
+
throw new Error('hostile adapter: broadcast rejected');
|
|
62
|
+
}
|
|
63
|
+
// Round-trip through bytes. A live object reference would survive a structural change
|
|
64
|
+
// that a real bus would not, so this is where that assumption dies.
|
|
65
|
+
const wire = JSON.stringify({
|
|
66
|
+
room,
|
|
67
|
+
frame: [...frame],
|
|
68
|
+
lane: opts.lane,
|
|
69
|
+
nodeId: this.nodeId,
|
|
70
|
+
except: opts.except ?? [],
|
|
71
|
+
});
|
|
72
|
+
const parsed = JSON.parse(wire);
|
|
73
|
+
const envelope = {
|
|
74
|
+
room: parsed.room,
|
|
75
|
+
frame: Uint8Array.from(parsed.frame),
|
|
76
|
+
lane: parsed.lane,
|
|
77
|
+
nodeId: parsed.nodeId,
|
|
78
|
+
except: parsed.except,
|
|
79
|
+
};
|
|
80
|
+
// The publisher gets its own message back, because a real bus does not know who sent
|
|
81
|
+
// what and core must dedupe rather than rely on suppression.
|
|
82
|
+
this.#pending.push(envelope);
|
|
83
|
+
if (this.#opts.duplicate === true)
|
|
84
|
+
this.#pending.push(envelope);
|
|
85
|
+
this.#schedule();
|
|
86
|
+
}
|
|
87
|
+
onRemote(cb) {
|
|
88
|
+
this.#bus.listeners.push(cb);
|
|
89
|
+
}
|
|
90
|
+
/** Deliberately NOT exposed to core: no node may assume it knows full membership. */
|
|
91
|
+
membershipForAssertionsOnly(room) {
|
|
92
|
+
return this.#rooms.get(room) ?? new Set();
|
|
93
|
+
}
|
|
94
|
+
async settle() {
|
|
95
|
+
for (let i = 0; i < 8; i++)
|
|
96
|
+
await new Promise((r) => setTimeout(r, (this.#opts.latencyMs ?? 1) + 1));
|
|
97
|
+
}
|
|
98
|
+
#schedule() {
|
|
99
|
+
if (this.#timer !== undefined)
|
|
100
|
+
return;
|
|
101
|
+
this.#timer = setTimeout(() => {
|
|
102
|
+
this.#timer = undefined;
|
|
103
|
+
const batch = this.#pending;
|
|
104
|
+
this.#pending = [];
|
|
105
|
+
if (this.#opts.reorder === true)
|
|
106
|
+
batch.reverse();
|
|
107
|
+
for (const e of batch)
|
|
108
|
+
for (const l of this.#bus.listeners)
|
|
109
|
+
l(e);
|
|
110
|
+
}, this.#opts.latencyMs ?? 1);
|
|
111
|
+
}
|
|
112
|
+
async #tick() {
|
|
113
|
+
await new Promise((r) => setTimeout(r, this.#opts.latencyMs ?? 1));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=hostile-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hostile-adapter.js","sourceRoot":"","sources":["../../src/testing/hostile-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test-only exports. Shipped so anyone writing an Adapter can run the same conformance
|
|
3
|
+
* suite core does, rather than discovering the difference on a real bus.
|
|
4
|
+
*/
|
|
5
|
+
export { loopbackPair } from '../transport/loopback.ts';
|
|
6
|
+
export { UnreliableConnection, type UnreliableOptions } from '../transport/unreliable.ts';
|
|
7
|
+
export { HostileAdapter, type HostileOptions } from './hostile-adapter.ts';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test-only exports. Shipped so anyone writing an Adapter can run the same conformance
|
|
3
|
+
* suite core does, rather than discovering the difference on a real bus.
|
|
4
|
+
*/
|
|
5
|
+
export { loopbackPair } from '../transport/loopback.js';
|
|
6
|
+
export { UnreliableConnection } from '../transport/unreliable.js';
|
|
7
|
+
export { HostileAdapter } from './hostile-adapter.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAA0B,MAAM,4BAA4B,CAAA;AACzF,OAAO,EAAE,cAAc,EAAuB,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Connection } from './types.ts';
|
|
2
|
+
export interface BrowserConnectOptions {
|
|
3
|
+
readonly url: string;
|
|
4
|
+
/** SHA-256 over the DER of the leaf certificate. Required for a pinned certificate. */
|
|
5
|
+
readonly certificateHash?: Uint8Array;
|
|
6
|
+
}
|
|
7
|
+
export declare function connectBrowser(opts: BrowserConnectOptions): Promise<Connection>;
|
|
8
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/transport/browser.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAyB,UAAU,EAAE,MAAM,YAAY,CAAA;AAwFnE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,uFAAuF;IACvF,QAAQ,CAAC,eAAe,CAAC,EAAE,UAAU,CAAA;CACtC;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CAqBrF"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The browser Connection, over the platform's own `WebTransport`.
|
|
3
|
+
*
|
|
4
|
+
* Nothing here is imported at module scope — `WebTransport` is read inside connect() —
|
|
5
|
+
* so importing this on a server, which Next.js will do, is safe. There is no native
|
|
6
|
+
* addon and no binding, which is why this file is not `*.node.ts`.
|
|
7
|
+
*/
|
|
8
|
+
import { TransportError } from '../errors.js';
|
|
9
|
+
import { DATAGRAM_CONSERVATIVE_FLOOR } from '../protocol.js';
|
|
10
|
+
class BrowserConnection {
|
|
11
|
+
#s;
|
|
12
|
+
closed;
|
|
13
|
+
#dgWriter;
|
|
14
|
+
constructor(s) {
|
|
15
|
+
this.#s = s;
|
|
16
|
+
this.closed = s.closed.then((i) => ({ code: i.closeCode ?? 0, reason: i.reason ?? '' }));
|
|
17
|
+
}
|
|
18
|
+
openEmitStream() {
|
|
19
|
+
return this.#s.createUnidirectionalStream();
|
|
20
|
+
}
|
|
21
|
+
onEmitStream(cb) {
|
|
22
|
+
void this.#pump(this.#s.incomingUnidirectionalStreams, cb);
|
|
23
|
+
}
|
|
24
|
+
openBidi() {
|
|
25
|
+
return this.#s.createBidirectionalStream();
|
|
26
|
+
}
|
|
27
|
+
onBidi(cb) {
|
|
28
|
+
void this.#pump(this.#s.incomingBidirectionalStreams, cb);
|
|
29
|
+
}
|
|
30
|
+
onDatagram(cb) {
|
|
31
|
+
void this.#pump(this.#s.datagrams.readable, cb);
|
|
32
|
+
}
|
|
33
|
+
sendDatagram(bytes) {
|
|
34
|
+
// `datagrams.writable` is deprecated in favour of createWritable(); support both,
|
|
35
|
+
// because which one exists depends on the engine.
|
|
36
|
+
this.#dgWriter ??= (this.#s.datagrams.createWritable?.() ?? this.#s.datagrams.writable)?.getWriter();
|
|
37
|
+
void this.#dgWriter?.write(bytes).catch(() => undefined);
|
|
38
|
+
}
|
|
39
|
+
maxDatagramSize() {
|
|
40
|
+
const r = this.#s.datagrams.maxDatagramSize;
|
|
41
|
+
return typeof r === 'number' && r > 0 ? r : DATAGRAM_CONSERVATIVE_FLOOR;
|
|
42
|
+
}
|
|
43
|
+
reliability() {
|
|
44
|
+
const r = this.#s.reliability;
|
|
45
|
+
return r === 'pending' || r === 'reliable-only' || r === 'supports-unreliable'
|
|
46
|
+
? r
|
|
47
|
+
: undefined;
|
|
48
|
+
}
|
|
49
|
+
close(code, reason) {
|
|
50
|
+
try {
|
|
51
|
+
this.#s.close({ closeCode: code, reason: reason.slice(0, 1024) });
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Already closed.
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async #pump(stream, cb) {
|
|
58
|
+
const reader = stream.getReader();
|
|
59
|
+
try {
|
|
60
|
+
for (;;) {
|
|
61
|
+
const { value, done } = await reader.read();
|
|
62
|
+
if (done)
|
|
63
|
+
break;
|
|
64
|
+
if (value !== undefined)
|
|
65
|
+
cb(value);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// The session went away; `closed` reports it.
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export async function connectBrowser(opts) {
|
|
74
|
+
const WT = globalThis.WebTransport;
|
|
75
|
+
if (WT === undefined) {
|
|
76
|
+
throw new TransportError('WT_NO_SUPPORT', 'this runtime has no WebTransport', 'There is no fallback: a WebSocket would silently make the datagram lane reliable. Use Chrome or Firefox.');
|
|
77
|
+
}
|
|
78
|
+
const session = new WT(opts.url, {
|
|
79
|
+
...(opts.certificateHash === undefined
|
|
80
|
+
? {}
|
|
81
|
+
: { serverCertificateHashes: [{ algorithm: 'sha-256', value: opts.certificateHash }] }),
|
|
82
|
+
// Honoured on Firefox and Safari, silently ignored on Chrome. The server refusing to
|
|
83
|
+
// offer HTTP/2 at all is the actual guarantee.
|
|
84
|
+
requireUnreliable: true,
|
|
85
|
+
});
|
|
86
|
+
await session.ready;
|
|
87
|
+
return new BrowserConnection(session);
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/transport/browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Connection } from './types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* The reset code is only recoverable from the message text, because the error type omits
|
|
4
|
+
* the field the specification defines. Parsing lives in exactly this one function, with a
|
|
5
|
+
* test pinning the observed format, so the upstream defect stays contained.
|
|
6
|
+
*/
|
|
7
|
+
export declare function resetCodeFromError(error: unknown): number | undefined;
|
|
8
|
+
export interface Http3ServerOptions {
|
|
9
|
+
readonly port: number;
|
|
10
|
+
readonly host?: string;
|
|
11
|
+
readonly cert: string;
|
|
12
|
+
readonly privKey: string;
|
|
13
|
+
readonly secret?: string;
|
|
14
|
+
readonly path?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface Http3Listener {
|
|
17
|
+
readonly port: number;
|
|
18
|
+
sessions(): AsyncIterable<Connection>;
|
|
19
|
+
stop(): void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Only `Http3Server` is ever constructed. `Http2Server` and `reliability: 'both'` exist in
|
|
23
|
+
* the dependency and are never used: a server that does not offer the HTTP/2 mapping
|
|
24
|
+
* cannot be negotiated into it, whatever a client supports. That is the real enforcement
|
|
25
|
+
* of the no-fallback rule, and it is browser-independent (D10, ADR 0003).
|
|
26
|
+
*/
|
|
27
|
+
export declare function listenHttp3(opts: Http3ServerOptions): Promise<Http3Listener>;
|
|
28
|
+
export interface Http3ClientOptions {
|
|
29
|
+
readonly url: string;
|
|
30
|
+
readonly certificateHash: Uint8Array;
|
|
31
|
+
}
|
|
32
|
+
export declare function connectHttp3(opts: Http3ClientOptions): Promise<Connection>;
|
|
33
|
+
//# sourceMappingURL=fails.node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fails.node.d.ts","sourceRoot":"","sources":["../../src/transport/fails.node.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAyB,UAAU,EAAE,MAAM,YAAY,CAAA;AAkBnE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAIrE;AAiGD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,IAAI,aAAa,CAAC,UAAU,CAAC,CAAA;IACrC,IAAI,IAAI,IAAI,CAAA;CACb;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAiClF;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAA;CACrC;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAgChF"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The reference transport, behind the seam.
|
|
3
|
+
*
|
|
4
|
+
* This file is the ONLY place that imports the WebTransport binding, and the
|
|
5
|
+
* import-boundary lint rule enforces that: the binding loads a native addon that
|
|
6
|
+
* segfaults Bun on exit, so anything touching it must be named `*.node.ts` and run under
|
|
7
|
+
* Node (D14, ADR 0006).
|
|
8
|
+
*
|
|
9
|
+
* Everything ugly about the dependency is contained here:
|
|
10
|
+
* - it ships an HTTP/2 fallback that is on by default, which would silently make the
|
|
11
|
+
* datagram lane reliable and ordered, so only `Http3Server` is ever constructed
|
|
12
|
+
* - oversized and blocked datagrams are accepted, discarded, and reported as success
|
|
13
|
+
* - `WebTransportError` omits the specification's `streamErrorCode`, so a reset code is
|
|
14
|
+
* recoverable only by parsing a message string
|
|
15
|
+
*/
|
|
16
|
+
import { Http3Server, quicheLoaded, WebTransport } from '@fails-components/webtransport';
|
|
17
|
+
import { TransportError } from '../errors.js';
|
|
18
|
+
import { DATAGRAM_CONSERVATIVE_FLOOR } from '../protocol.js';
|
|
19
|
+
/**
|
|
20
|
+
* The reset code is only recoverable from the message text, because the error type omits
|
|
21
|
+
* the field the specification defines. Parsing lives in exactly this one function, with a
|
|
22
|
+
* test pinning the observed format, so the upstream defect stays contained.
|
|
23
|
+
*/
|
|
24
|
+
export function resetCodeFromError(error) {
|
|
25
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
26
|
+
const m = /code:\s*(\d+)/i.exec(message);
|
|
27
|
+
return m?.[1] === undefined ? undefined : Number(m[1]);
|
|
28
|
+
}
|
|
29
|
+
class FailsConnection {
|
|
30
|
+
#session;
|
|
31
|
+
closed;
|
|
32
|
+
#datagramWriter;
|
|
33
|
+
constructor(session) {
|
|
34
|
+
this.#session = session;
|
|
35
|
+
this.closed = session.closed.then((info) => ({
|
|
36
|
+
code: info.closeCode ?? 0,
|
|
37
|
+
reason: info.reason ?? '',
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
async openEmitStream() {
|
|
41
|
+
return await this.#session.createUnidirectionalStream();
|
|
42
|
+
}
|
|
43
|
+
onEmitStream(cb) {
|
|
44
|
+
void (async () => {
|
|
45
|
+
const reader = this.#session.incomingUnidirectionalStreams.getReader();
|
|
46
|
+
try {
|
|
47
|
+
for (;;) {
|
|
48
|
+
const { value, done } = await reader.read();
|
|
49
|
+
if (done)
|
|
50
|
+
break;
|
|
51
|
+
if (value !== undefined)
|
|
52
|
+
cb(value);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// The session closed underneath us; `closed` is the channel that reports it.
|
|
57
|
+
}
|
|
58
|
+
})();
|
|
59
|
+
}
|
|
60
|
+
async openBidi() {
|
|
61
|
+
return await this.#session.createBidirectionalStream();
|
|
62
|
+
}
|
|
63
|
+
onBidi(cb) {
|
|
64
|
+
void (async () => {
|
|
65
|
+
const reader = this.#session.incomingBidirectionalStreams.getReader();
|
|
66
|
+
try {
|
|
67
|
+
for (;;) {
|
|
68
|
+
const { value, done } = await reader.read();
|
|
69
|
+
if (done)
|
|
70
|
+
break;
|
|
71
|
+
if (value !== undefined)
|
|
72
|
+
cb(value);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// As above.
|
|
77
|
+
}
|
|
78
|
+
})();
|
|
79
|
+
}
|
|
80
|
+
sendDatagram(bytes) {
|
|
81
|
+
// `datagrams.writable` is deprecated upstream in favour of createWritable().
|
|
82
|
+
this.#datagramWriter ??= this.#session.datagrams.createWritable().getWriter();
|
|
83
|
+
void this.#datagramWriter.write(bytes).catch(() => undefined);
|
|
84
|
+
}
|
|
85
|
+
onDatagram(cb) {
|
|
86
|
+
void (async () => {
|
|
87
|
+
const reader = this.#session.datagrams.readable.getReader();
|
|
88
|
+
try {
|
|
89
|
+
for (;;) {
|
|
90
|
+
const { value, done } = await reader.read();
|
|
91
|
+
if (done)
|
|
92
|
+
break;
|
|
93
|
+
if (value !== undefined)
|
|
94
|
+
cb(value);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// As above.
|
|
99
|
+
}
|
|
100
|
+
})();
|
|
101
|
+
}
|
|
102
|
+
maxDatagramSize() {
|
|
103
|
+
const reported = this.#session.datagrams.maxDatagramSize;
|
|
104
|
+
// Chrome hardcodes 1024 regardless of the path, and this binding can report 0 before
|
|
105
|
+
// the session settles, so a non-positive value falls back to the conservative floor.
|
|
106
|
+
return typeof reported === 'number' && reported > 0 ? reported : DATAGRAM_CONSERVATIVE_FLOOR;
|
|
107
|
+
}
|
|
108
|
+
reliability() {
|
|
109
|
+
const r = this.#session.reliability;
|
|
110
|
+
return r === 'pending' || r === 'reliable-only' || r === 'supports-unreliable'
|
|
111
|
+
? r
|
|
112
|
+
: undefined;
|
|
113
|
+
}
|
|
114
|
+
close(code, reason) {
|
|
115
|
+
try {
|
|
116
|
+
this.#session.close({ closeCode: code, reason: reason.slice(0, 1024) });
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// Closing an already-closed session is not an error worth propagating.
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Only `Http3Server` is ever constructed. `Http2Server` and `reliability: 'both'` exist in
|
|
125
|
+
* the dependency and are never used: a server that does not offer the HTTP/2 mapping
|
|
126
|
+
* cannot be negotiated into it, whatever a client supports. That is the real enforcement
|
|
127
|
+
* of the no-fallback rule, and it is browser-independent (D10, ADR 0003).
|
|
128
|
+
*/
|
|
129
|
+
export async function listenHttp3(opts) {
|
|
130
|
+
const server = new Http3Server({
|
|
131
|
+
port: opts.port,
|
|
132
|
+
host: opts.host ?? '127.0.0.1',
|
|
133
|
+
secret: opts.secret ?? 'transport-io',
|
|
134
|
+
cert: opts.cert,
|
|
135
|
+
privKey: opts.privKey,
|
|
136
|
+
});
|
|
137
|
+
server.startServer();
|
|
138
|
+
await server.ready;
|
|
139
|
+
const path = opts.path ?? '/';
|
|
140
|
+
return {
|
|
141
|
+
port: server.port ?? opts.port,
|
|
142
|
+
stop: () => server.stopServer(),
|
|
143
|
+
async *sessions() {
|
|
144
|
+
const reader = server.sessionStream(path).getReader();
|
|
145
|
+
for (;;) {
|
|
146
|
+
const { value, done } = await reader.read();
|
|
147
|
+
if (done)
|
|
148
|
+
return;
|
|
149
|
+
if (value === undefined)
|
|
150
|
+
continue;
|
|
151
|
+
await value.ready;
|
|
152
|
+
yield new FailsConnection(value);
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
export async function connectHttp3(opts) {
|
|
158
|
+
// The binding loads its native transport through a dynamic import and throws
|
|
159
|
+
// `Lib quiche loading attempt did not end` if a client is constructed before it
|
|
160
|
+
// settles. A process that also runs a server never sees this, because the server
|
|
161
|
+
// awaits the same promise on the way up — which is exactly why it went unnoticed
|
|
162
|
+
// until a client ran on its own.
|
|
163
|
+
await quicheLoaded;
|
|
164
|
+
const wt = new WebTransport(opts.url, {
|
|
165
|
+
serverCertificateHashes: [{ algorithm: 'sha-256', value: opts.certificateHash }],
|
|
166
|
+
// Honoured on Firefox and Safari, silently ignored on Chrome. Defence in depth: the
|
|
167
|
+
// server-side refusal above is the guarantee.
|
|
168
|
+
requireUnreliable: true,
|
|
169
|
+
});
|
|
170
|
+
// `closed` rejects independently of `ready`. If the handshake fails, nothing has
|
|
171
|
+
// attached to it yet and Node sees an unhandled rejection — which terminates a server
|
|
172
|
+
// by default. Claim it before awaiting `ready`; FailsConnection re-reads the same
|
|
173
|
+
// settled promise, so nothing is lost.
|
|
174
|
+
const closedGuard = wt.closed.catch(() => undefined);
|
|
175
|
+
try {
|
|
176
|
+
await wt.ready;
|
|
177
|
+
}
|
|
178
|
+
catch (cause) {
|
|
179
|
+
await closedGuard;
|
|
180
|
+
throw new TransportError('WT_SESSION_CLOSED', `could not open a session to ${opts.url}: ${cause.message}`, 'Check the server is listening, that UDP reaches it, and that the certificate hash matches.');
|
|
181
|
+
}
|
|
182
|
+
return new FailsConnection(wt);
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=fails.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fails.node.js","sourceRoot":"","sources":["../../src/transport/fails.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An in-memory Connection pair. Test-only, and deliberately not faithful: it delivers
|
|
3
|
+
* datagrams reliably and in order, which real datagrams do not. It exists to exercise the
|
|
4
|
+
* session, room and framing layers under Bun without loading the native addon (D14).
|
|
5
|
+
*
|
|
6
|
+
* Anything that depends on real unreliability belongs in a *.node.test.ts against the
|
|
7
|
+
* actual transport.
|
|
8
|
+
*/
|
|
9
|
+
import type { Connection } from './types.ts';
|
|
10
|
+
export declare function loopbackPair(maxDatagram?: number): [Connection, Connection];
|
|
11
|
+
//# sourceMappingURL=loopback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loopback.d.ts","sourceRoot":"","sources":["../../src/transport/loopback.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAyB,UAAU,EAAE,MAAM,YAAY,CAAA;AA0FnE,wBAAgB,YAAY,CAAC,WAAW,SAAO,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAMzE"}
|