transport-io 0.1.0 → 0.2.0
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 +4 -3
- package/dist/adapter.d.ts +2 -2
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +1 -1
- package/dist/client.d.ts +10 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +11 -3
- package/dist/client.js.map +1 -1
- package/dist/contract.d.ts +30 -6
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js.map +1 -1
- package/dist/datagram.d.ts +2 -0
- package/dist/datagram.d.ts.map +1 -1
- package/dist/datagram.js +7 -3
- package/dist/datagram.js.map +1 -1
- package/dist/handshake.js +1 -1
- package/dist/handshake.js.map +1 -1
- package/dist/hub.js +2 -2
- package/dist/hub.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/protocol.d.ts +13 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +13 -0
- package/dist/protocol.js.map +1 -1
- package/dist/queue.d.ts +5 -1
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +9 -1
- package/dist/queue.js.map +1 -1
- package/dist/server.d.ts +7 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1 -2
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +49 -2
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +347 -16
- package/dist/session.js.map +1 -1
- package/dist/transport/browser.js +1 -1
- package/dist/transport/browser.js.map +1 -1
- package/dist/transport/fails.node.js +1 -1
- package/dist/transport/parity-suite.d.ts +1 -1
- package/dist/transport/parity-suite.js +6 -6
- package/dist/transport/parity-suite.js.map +1 -1
- package/dist/transport/unreliable.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,8 +9,9 @@ Real-time apps over WebTransport. Socket.IO's shape, on a transport with multipl
|
|
|
9
9
|
and datagrams, without Socket.IO's mistakes.
|
|
10
10
|
|
|
11
11
|
Framing, length prefixes, buffer accumulation, stream lifecycle and backpressure queues are
|
|
12
|
-
hidden. Reliability is not: an event declares `
|
|
13
|
-
"this message may be dropped" is a property of your data that lives in the type system.
|
|
12
|
+
hidden. Reliability is not: an event declares `reliable` or `unreliable` in the contract, and
|
|
13
|
+
"this message may be dropped" is a property of your data that lives in the type system. The
|
|
14
|
+
reliable lane is carried on QUIC streams, the unreliable lane on QUIC datagrams.
|
|
14
15
|
|
|
15
16
|
**Read [KNOWN-ISSUES.md](https://github.com/transport-io/transport-io/blob/main/KNOWN-ISSUES.md)
|
|
16
17
|
before you start.** It is what this library refuses to do and will not change, plus the one
|
|
@@ -18,7 +19,7 @@ measured defect. Full documentation is in the
|
|
|
18
19
|
[repository README](https://github.com/transport-io/transport-io#readme). The short version:
|
|
19
20
|
|
|
20
21
|
- **WebTransport only.** No WebSocket fallback, deliberately - a fallback would silently
|
|
21
|
-
make the
|
|
22
|
+
make the unreliable lane reliable and ordered, which is a lie about your data.
|
|
22
23
|
- **Chrome and Firefox.** Safari cannot talk to a quiche-backed server and is unsupported.
|
|
23
24
|
- **The server needs a separate native install**, and its Linux prebuild needs glibc 2.38 -
|
|
24
25
|
no default Node `-slim` image has it, and Alpine has no prebuild at all.
|
package/dist/adapter.d.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export type PeerId = string;
|
|
12
12
|
export type Frame = Uint8Array;
|
|
13
|
-
export type Lane = '
|
|
13
|
+
export type Lane = 'reliable' | 'unreliable';
|
|
14
14
|
/** The envelope carries the origin node. The frame the peer receives is not these bytes. */
|
|
15
15
|
export interface RemoteEnvelope {
|
|
16
16
|
readonly room: string;
|
|
@@ -51,7 +51,7 @@ export interface Publisher {
|
|
|
51
51
|
/**
|
|
52
52
|
* A bus two or more `MemoryAdapter`s can share, so a single process can model several
|
|
53
53
|
* nodes. Without it `MemoryAdapter` is per-instance and two of them cannot hear each
|
|
54
|
-
* other, which is
|
|
54
|
+
* other, which is why the cross-node delivery path had never executed a line.
|
|
55
55
|
*/
|
|
56
56
|
export declare function memoryBus(): MemoryBus;
|
|
57
57
|
export interface MemoryBus {
|
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAA;AAC3B,MAAM,MAAM,KAAK,GAAG,UAAU,CAAA;AAC9B,MAAM,MAAM,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAA;AAC3B,MAAM,MAAM,KAAK,GAAG,UAAU,CAAA;AAC9B,MAAM,MAAM,IAAI,GAAG,UAAU,GAAG,YAAY,CAAA;AAE5C,4FAA4F;AAC5F,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AAED,MAAM,WAAW,OAAO;IACtB;;;;;;;;OAQG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5E,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI,CAAA;CACvD;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7E;AAED,4FAA4F;AAC5F;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAErC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC,EAAE,CAAA;CACpD;AAED,qBAAa,aAAc,YAAW,OAAO;;IAG3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IAEvB,YAAY,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,SAAuB,EAGvD;IAEK,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOpD;IAEK,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKrD;IAEK,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAWjF;IAED,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI,CAE9C;CACF"}
|
package/dist/adapter.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* A bus two or more `MemoryAdapter`s can share, so a single process can model several
|
|
4
4
|
* nodes. Without it `MemoryAdapter` is per-instance and two of them cannot hear each
|
|
5
|
-
* other, which is
|
|
5
|
+
* other, which is why the cross-node delivery path had never executed a line.
|
|
6
6
|
*/
|
|
7
7
|
export function memoryBus() {
|
|
8
8
|
return { listeners: [] };
|
package/dist/client.d.ts
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
* scope, so importing this on a server - which Next.js will do - is safe. Feature
|
|
6
6
|
* detection happens inside connect().
|
|
7
7
|
*/
|
|
8
|
-
import { type AnyMap, type CallableOf, type Contract } from './contract.ts';
|
|
8
|
+
import { type AnyMap, type CallableOf, type Contract, type StreamableOf } from './contract.ts';
|
|
9
9
|
import { TransportError } from './errors.ts';
|
|
10
|
-
import { type SessionStats } from './session.ts';
|
|
10
|
+
import { type SessionStats, type StreamResult } from './session.ts';
|
|
11
11
|
import type { Connection } from './transport/types.ts';
|
|
12
12
|
export type Status = 'idle' | 'connecting' | 'connected' | 'closing' | 'closed';
|
|
13
13
|
export interface ClientState {
|
|
@@ -55,6 +55,14 @@ export declare class Client<M extends AnyMap = AnyMap> {
|
|
|
55
55
|
call<K extends CallableOf<M> & string>(event: K, payload: M[K]['payload'], options?: {
|
|
56
56
|
readonly signal?: AbortSignal;
|
|
57
57
|
}): Promise<M[K]['returns']>;
|
|
58
|
+
/**
|
|
59
|
+
* Available only on events declaring `yields`. Iterate it, or `.collect()` the whole
|
|
60
|
+
* sequence. Leaving the loop with `break` resets the QUIC stream, which is what reaches
|
|
61
|
+
* the responder's `ctx.signal`; there is no separate cancel call and none is needed.
|
|
62
|
+
*/
|
|
63
|
+
stream<K extends StreamableOf<M> & string>(event: K, payload: M[K]['payload'], options?: {
|
|
64
|
+
readonly signal?: AbortSignal;
|
|
65
|
+
}): StreamResult<M[K]['yields']>;
|
|
58
66
|
stats(): SessionStats | undefined;
|
|
59
67
|
}
|
|
60
68
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* scope, so importing this on a server - which Next.js will do - is safe. Feature
|
|
6
6
|
* detection happens inside connect().
|
|
7
7
|
*/
|
|
8
|
-
import { buildEventTable } from './contract.js';
|
|
8
|
+
import { buildEventTable, } from './contract.js';
|
|
9
9
|
import { TransportError } from './errors.js';
|
|
10
10
|
import { CloseCode, FrameType } from './protocol.js';
|
|
11
11
|
import { Session } from './session.js';
|
|
@@ -84,6 +84,14 @@ export class Client {
|
|
|
84
84
|
async call(event, payload, options) {
|
|
85
85
|
return (await this.#requireSession().call(event, payload, options));
|
|
86
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Available only on events declaring `yields`. Iterate it, or `.collect()` the whole
|
|
89
|
+
* sequence. Leaving the loop with `break` resets the QUIC stream, which is what reaches
|
|
90
|
+
* the responder's `ctx.signal`; there is no separate cancel call and none is needed.
|
|
91
|
+
*/
|
|
92
|
+
stream(event, payload, options) {
|
|
93
|
+
return this.#requireSession().stream(event, payload, options);
|
|
94
|
+
}
|
|
87
95
|
stats() {
|
|
88
96
|
return this.#session?.stats();
|
|
89
97
|
}
|
|
@@ -94,12 +102,12 @@ export class Client {
|
|
|
94
102
|
const conn = await this.#opts.connect();
|
|
95
103
|
// Chrome implements neither `requireUnreliable` nor `reliability`, so `undefined`
|
|
96
104
|
// must pass or every session on the dominant browser would be refused. Only an
|
|
97
|
-
// explicit reliable-only is a lie about the
|
|
105
|
+
// explicit reliable-only is a lie about the unreliable lane.
|
|
98
106
|
if (conn.reliability() === 'reliable-only') {
|
|
99
107
|
// §10.2 code 1006. Throwing without closing left the peer holding a session this
|
|
100
108
|
// side had already abandoned, with nothing on the wire to say why.
|
|
101
109
|
conn.close(CloseCode.WT_RELIABILITY_REFUSED, 'reliable-only transport refused');
|
|
102
|
-
throw new TransportError('WT_RELIABILITY_REFUSED', 'the session negotiated reliable-only transport', 'The
|
|
110
|
+
throw new TransportError('WT_RELIABILITY_REFUSED', 'the session negotiated reliable-only transport', 'The unreliable lane would silently become reliable and ordered. This library refuses rather than lie about your data.');
|
|
103
111
|
}
|
|
104
112
|
const session = new Session(conn, {
|
|
105
113
|
table,
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/contract.d.ts
CHANGED
|
@@ -3,28 +3,44 @@
|
|
|
3
3
|
* tells you every event, payload and lane without reading anything else.
|
|
4
4
|
*/
|
|
5
5
|
import type { StandardSchemaV1, StandardTypedV1 } from '@standard-schema/spec';
|
|
6
|
-
export type Lane = '
|
|
6
|
+
export type Lane = 'reliable' | 'unreliable';
|
|
7
7
|
export type Schema = StandardSchemaV1;
|
|
8
8
|
/**
|
|
9
|
-
* `returns` is meaningful only on the
|
|
9
|
+
* `returns` is meaningful only on the reliable lane: an unreliable event has no response
|
|
10
|
+
* path. `yields` is the streaming form of `returns` and excludes it: an event answers with
|
|
11
|
+
* one value or with a sequence, never with a choice made at the call site.
|
|
10
12
|
*
|
|
11
|
-
* The
|
|
13
|
+
* The choice cannot be per call site, and the reason is on the wire rather than in taste. A
|
|
14
|
+
* handler that yields nothing closes the stream with zero CALL_RESPONSE frames, which is
|
|
15
|
+
* exactly the byte sequence a `call()` responder produces when it is broken. Identical
|
|
16
|
+
* bytes, two meanings: a protocol error for `call()`, a clean empty iteration for
|
|
17
|
+
* `stream()`. Only the contract, which both peers exchange at handshake, tells them apart.
|
|
18
|
+
*
|
|
19
|
+
* The `returns?: never` on the datagram branch does real work. Excess
|
|
12
20
|
* property checking against a *union* admits any property present on any member, so
|
|
13
|
-
* `{ lane: '
|
|
21
|
+
* `{ lane: 'unreliable', payload, returns }` compiled happily, `CallableOf` admitted it, and
|
|
14
22
|
* `call()` served it over a bidirectional stream. A contract that says "may be dropped"
|
|
15
23
|
* produced a guaranteed ordered message with the type system agreeing - a direct violation
|
|
16
24
|
* of D1, the first decision this project made.
|
|
17
25
|
*/
|
|
18
26
|
export type EventDef = {
|
|
19
|
-
readonly lane: '
|
|
27
|
+
readonly lane: 'unreliable';
|
|
20
28
|
readonly payload: Schema;
|
|
21
29
|
readonly id?: number;
|
|
22
30
|
readonly returns?: never;
|
|
31
|
+
readonly yields?: never;
|
|
23
32
|
} | {
|
|
24
|
-
readonly lane: '
|
|
33
|
+
readonly lane: 'reliable';
|
|
25
34
|
readonly payload: Schema;
|
|
26
35
|
readonly returns?: Schema;
|
|
27
36
|
readonly id?: number;
|
|
37
|
+
readonly yields?: never;
|
|
38
|
+
} | {
|
|
39
|
+
readonly lane: 'reliable';
|
|
40
|
+
readonly payload: Schema;
|
|
41
|
+
readonly yields: Schema;
|
|
42
|
+
readonly id?: number;
|
|
43
|
+
readonly returns?: never;
|
|
28
44
|
};
|
|
29
45
|
export type Contract = Readonly<Record<string, EventDef>>;
|
|
30
46
|
export type Infer<S extends StandardTypedV1> = StandardTypedV1.InferOutput<S>;
|
|
@@ -40,17 +56,25 @@ export type MapOf<C extends Contract> = {
|
|
|
40
56
|
readonly returns: C[K] extends {
|
|
41
57
|
readonly returns: infer R extends Schema;
|
|
42
58
|
} ? Infer<R> : never;
|
|
59
|
+
readonly yields: C[K] extends {
|
|
60
|
+
readonly yields: infer Y extends Schema;
|
|
61
|
+
} ? Infer<Y> : never;
|
|
43
62
|
};
|
|
44
63
|
};
|
|
45
64
|
export interface EventShape {
|
|
46
65
|
readonly payload: unknown;
|
|
47
66
|
readonly returns: unknown;
|
|
67
|
+
readonly yields: unknown;
|
|
48
68
|
}
|
|
49
69
|
export type AnyMap = Readonly<Record<string, EventShape>>;
|
|
50
70
|
/** Events declaring `returns`, and therefore callable. */
|
|
51
71
|
export type CallableOf<M extends AnyMap> = {
|
|
52
72
|
[K in keyof M]: [M[K]['returns']] extends [never] ? never : K;
|
|
53
73
|
}[keyof M];
|
|
74
|
+
/** Events declaring `yields`, and therefore streamable. Disjoint from `CallableOf`. */
|
|
75
|
+
export type StreamableOf<M extends AnyMap> = {
|
|
76
|
+
[K in keyof M]: [M[K]['yields']] extends [never] ? never : K;
|
|
77
|
+
}[keyof M];
|
|
54
78
|
export declare function defineContract<const C extends Contract>(contract: C): C;
|
|
55
79
|
/** A types-only schema, for inference without runtime validation. */
|
|
56
80
|
export declare function type$<T>(): StandardSchemaV1<unknown, T>;
|
package/dist/contract.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAI9E,MAAM,MAAM,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"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"}
|
package/dist/contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAmFvD,MAAM,UAAU,cAAc,CAA2B,QAAW;IAClE,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,KAAK;IACnB,OAAO;QACL,WAAW,EAAE;YACX,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,cAAc;YACtB,QAAQ,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAU,EAAE,CAAC;SACtD;KACF,CAAA;AACH,CAAC;AAmBD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IACpF,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAkB;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAA;IAC1C,MAAM,OAAO,GAAiB,EAAE,CAAA;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAsB,CAAA;IAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAA;IAE5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAa,CAAA;QACtC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;QAC5C,IAAI,EAAE,KAAK,uBAAuB,EAAE,CAAC;YACnC,MAAM,IAAI,cAAc,CACtB,sBAAsB,EACtB,UAAU,IAAI,iCAAiC,EAC/C,sGAAsG,CACvG,CAAA;QACH,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,cAAc,CACtB,sBAAsB,EACtB,WAAW,KAAK,CAAC,IAAI,UAAU,IAAI,qBAAqB,EAAE,EAAE,EAC5D,iEAAiE,EAAE,GAAG,CAAC,gCAAgC,CACxG,CAAA;QACH,CAAC;QACD,MAAM,KAAK,GAAe,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAA;QAC3D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACnB,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACnB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACzB,CAAC;IAED,OAAO;QACL,OAAO;QACP,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAA2B,CAAC;KACjF,CAAA;AACH,CAAC"}
|
package/dist/datagram.d.ts
CHANGED
|
@@ -23,6 +23,8 @@ export declare class SequenceGate {
|
|
|
23
23
|
/** Returns true when the datagram is fresh and should be delivered. */
|
|
24
24
|
accept(origin: number, eventId: number, sequence: number, now: number): boolean;
|
|
25
25
|
/** A receiver discards (origin, event) state after this idle, so origins can be reused. */
|
|
26
|
+
/** Forget every origin. A disposed session has no business suppressing anyone's dupes. */
|
|
27
|
+
clear(): void;
|
|
26
28
|
sweep(now: number, retentionMs: number): void;
|
|
27
29
|
get tracked(): number;
|
|
28
30
|
}
|
package/dist/datagram.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datagram.d.ts","sourceRoot":"","sources":["../src/datagram.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;CAC7B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU,CAkC5E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,CA+B1D;AAED;;;;;GAKG;AACH,qBAAa,YAAY;;IAIvB,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,uEAAuE;IACvE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAa9E;IAED,2FAA2F;IAC3F,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAI5C;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF"}
|
|
1
|
+
{"version":3,"file":"datagram.d.ts","sourceRoot":"","sources":["../src/datagram.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;CAC7B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU,CAkC5E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,CA+B1D;AAED;;;;;GAKG;AACH,qBAAa,YAAY;;IAIvB,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,uEAAuE;IACvE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAa9E;IAED,2FAA2F;IAC3F,0FAA0F;IAC1F,KAAK,IAAI,IAAI,CAEZ;IAED,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAI5C;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF"}
|
package/dist/datagram.js
CHANGED
|
@@ -14,13 +14,13 @@ export function encodeDatagram(dg, reportedMax) {
|
|
|
14
14
|
throw new TransportError('WT_PROTOCOL_ERROR', 'a datagram payload of zero bytes is not representable', 'Send at least one byte. A zero-length write freezes some transports.');
|
|
15
15
|
}
|
|
16
16
|
if (dg.eventId === EVENT_ID_NOT_APPLICABLE) {
|
|
17
|
-
throw new TransportError('WT_PROTOCOL_ERROR', 'event id 0 is not valid on the
|
|
17
|
+
throw new TransportError('WT_PROTOCOL_ERROR', 'event id 0 is not valid on the unreliable lane', 'Datagrams always carry a contract event. Check the event table.');
|
|
18
18
|
}
|
|
19
19
|
const limit = maxDatagramPayload(reportedMax);
|
|
20
20
|
if (dg.payload.byteLength > limit) {
|
|
21
21
|
// The transport accepts an oversized datagram, discards it, and reports success, so
|
|
22
22
|
// this check is the only thing standing between a user and a silent drop.
|
|
23
|
-
throw new TransportError('WT_DATAGRAM_TOO_LARGE', `payload is ${dg.payload.byteLength} bytes and the path allows ${limit}`, 'Shorten the payload, or declare this event on the
|
|
23
|
+
throw new TransportError('WT_DATAGRAM_TOO_LARGE', `payload is ${dg.payload.byteLength} bytes and the path allows ${limit}`, 'Shorten the payload, or declare this event on the reliable lane where size is not capped this tightly.');
|
|
24
24
|
}
|
|
25
25
|
const out = new Uint8Array(DATAGRAM_HEADER_BYTES + dg.payload.byteLength);
|
|
26
26
|
const view = new DataView(out.buffer);
|
|
@@ -42,7 +42,7 @@ export function decodeDatagram(bytes) {
|
|
|
42
42
|
}
|
|
43
43
|
const eventId = view.getUint32(1, false);
|
|
44
44
|
if (eventId === EVENT_ID_NOT_APPLICABLE) {
|
|
45
|
-
throw new TransportError('WT_PROTOCOL_ERROR', 'event id 0 is not valid on the
|
|
45
|
+
throw new TransportError('WT_PROTOCOL_ERROR', 'event id 0 is not valid on the unreliable lane', 'Check the sender against PROTOCOL.md §7.2.');
|
|
46
46
|
}
|
|
47
47
|
return {
|
|
48
48
|
eventId,
|
|
@@ -79,6 +79,10 @@ export class SequenceGate {
|
|
|
79
79
|
return true;
|
|
80
80
|
}
|
|
81
81
|
/** A receiver discards (origin, event) state after this idle, so origins can be reused. */
|
|
82
|
+
/** Forget every origin. A disposed session has no business suppressing anyone's dupes. */
|
|
83
|
+
clear() {
|
|
84
|
+
this.#seen.clear();
|
|
85
|
+
}
|
|
82
86
|
sweep(now, retentionMs) {
|
|
83
87
|
for (const [key, v] of this.#seen) {
|
|
84
88
|
if (now - v.at >= retentionMs)
|
package/dist/datagram.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datagram.js","sourceRoot":"","sources":["../src/datagram.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EACL,KAAK,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,eAAe,CAAA;AAStB;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,MAAM,SAAS,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,2BAA2B,CAAA;IAC7E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,qBAAqB,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAY,EAAE,WAAmB;IAC9D,IAAI,EAAE,CAAC,OAAO,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,cAAc,CACtB,mBAAmB,EACnB,uDAAuD,EACvD,sEAAsE,CACvE,CAAA;IACH,CAAC;IACD,IAAI,EAAE,CAAC,OAAO,KAAK,uBAAuB,EAAE,CAAC;QAC3C,MAAM,IAAI,cAAc,CACtB,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"datagram.js","sourceRoot":"","sources":["../src/datagram.ts"],"names":[],"mappings":"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"}
|
package/dist/handshake.js
CHANGED
|
@@ -21,7 +21,7 @@ function isWireEvent(v) {
|
|
|
21
21
|
v.length === 3 &&
|
|
22
22
|
typeof v[0] === 'string' &&
|
|
23
23
|
typeof v[1] === 'number' &&
|
|
24
|
-
(v[2] === '
|
|
24
|
+
(v[2] === 'reliable' || v[2] === 'unreliable'));
|
|
25
25
|
}
|
|
26
26
|
export function parseHandshake(value) {
|
|
27
27
|
const bad = (why) => {
|
package/dist/handshake.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handshake.js","sourceRoot":"","sources":["../src/handshake.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAUhD,oEAAoE;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD,eAAe;IACf,eAAe;IACf,gBAAgB;CACjB,CAAA;AAED,MAAM,UAAU,cAAc,CAC5B,KAAiB,EACjB,IAAI,GAAsB,EAAE;IAE5B,OAAO,EAAE,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAA;AAC5D,CAAC;AAUD,SAAS,WAAW,CAAC,CAAU;IAC7B,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAChB,CAAC,CAAC,MAAM,KAAK,CAAC;QACd,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ;QACxB,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ;QACxB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"handshake.js","sourceRoot":"","sources":["../src/handshake.ts"],"names":[],"mappings":"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"}
|
package/dist/hub.js
CHANGED
|
@@ -102,7 +102,7 @@ export class Hub {
|
|
|
102
102
|
}
|
|
103
103
|
const body = encodePayload(payload);
|
|
104
104
|
const except = args.except ?? [];
|
|
105
|
-
const bytes = entry.lane === '
|
|
105
|
+
const bytes = entry.lane === 'unreliable'
|
|
106
106
|
? encodeDatagram({
|
|
107
107
|
eventId: entry.id,
|
|
108
108
|
origin: args.origin,
|
|
@@ -139,7 +139,7 @@ export class Hub {
|
|
|
139
139
|
for (const m of members.values()) {
|
|
140
140
|
if (except.includes(m.id))
|
|
141
141
|
continue;
|
|
142
|
-
if (lane === '
|
|
142
|
+
if (lane === 'unreliable')
|
|
143
143
|
m.session.sendDatagramBytes(bytes);
|
|
144
144
|
else
|
|
145
145
|
m.session.sendEncodedFrame(bytes);
|
package/dist/hub.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hub.js","sourceRoot":"","sources":["../src/hub.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hub.js","sourceRoot":"","sources":["../src/hub.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -14,5 +14,5 @@ export { createServer, Server, } from './server.js';
|
|
|
14
14
|
* `changeset version` moves the manifest, so this moves in the same commit - which the test
|
|
15
15
|
* enforces rather than trusting anyone to remember.
|
|
16
16
|
*/
|
|
17
|
-
export const VERSION = '0.
|
|
17
|
+
export const VERSION = '0.2.0';
|
|
18
18
|
//# sourceMappingURL=index.js.map
|
package/dist/protocol.d.ts
CHANGED
|
@@ -16,9 +16,22 @@ export declare const FrameType: {
|
|
|
16
16
|
readonly CALL_ERROR: 5;
|
|
17
17
|
readonly JOIN: 6;
|
|
18
18
|
readonly LEAVE: 7;
|
|
19
|
+
readonly CALL_CREDIT: 8;
|
|
19
20
|
};
|
|
20
21
|
export type FrameType = (typeof FrameType)[keyof typeof FrameType];
|
|
21
22
|
export declare function isFrameType(v: number): v is FrameType;
|
|
23
|
+
/**
|
|
24
|
+
* PROTOCOL.md §6.6. How many response frames a streaming responder may have in flight
|
|
25
|
+
* beyond what the consumer has taken, and how much the consumer tops up at a time.
|
|
26
|
+
*
|
|
27
|
+
* These exist because the transport does not provide the bound. Measured on the quiche
|
|
28
|
+
* binding: `writer.ready` resolves unconditionally, so a generator yielding as fast as it
|
|
29
|
+
* could ran 136,523 frames and roughly 53 MB ahead of a consumer that had taken 40, and the
|
|
30
|
+
* gap grew linearly with the run rather than plateauing. A bound is only a bound if
|
|
31
|
+
* something stays in the bounded thing (D77), so the accounting is ours. See D93.
|
|
32
|
+
*/
|
|
33
|
+
export declare const STREAM_INITIAL_CREDIT = 32;
|
|
34
|
+
export declare const STREAM_CREDIT_REFILL = 16;
|
|
22
35
|
/** PROTOCOL.md §5.3. `0x00` is permanently reserved so a zero-filled buffer cannot parse. */
|
|
23
36
|
export declare const Codec: {
|
|
24
37
|
readonly JSON: 1;
|
package/dist/protocol.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,IAAI,CAAA;AAEjC,uBAAuB;AACvB,eAAO,MAAM,SAAS;aACpB,SAAS,EAAE,CAAI;aACf,IAAI,EAAE,CAAI;aACV,YAAY,EAAE,CAAI;aAClB,aAAa,EAAE,CAAI;aACnB,UAAU,EAAE,CAAI;aAChB,IAAI,EAAE,CAAI;aACV,KAAK,EAAE,CAAI;
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,IAAI,CAAA;AAEjC,uBAAuB;AACvB,eAAO,MAAM,SAAS;aACpB,SAAS,EAAE,CAAI;aACf,IAAI,EAAE,CAAI;aACV,YAAY,EAAE,CAAI;aAClB,aAAa,EAAE,CAAI;aACnB,UAAU,EAAE,CAAI;aAChB,IAAI,EAAE,CAAI;aACV,KAAK,EAAE,CAAI;aACX,WAAW,EAAE,CAAI;CACT,CAAA;AACV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAA;AAGlE,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,SAAS,CAErD;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAA;AACvC,eAAO,MAAM,oBAAoB,KAAK,CAAA;AAEtC,6FAA6F;AAC7F,eAAO,MAAM,KAAK;aAAK,IAAI,EAAE,CAAI;CAAW,CAAA;AAC5C,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,OAAO,KAAK,CAAC,CAAA;AAEtD,4FAA4F;AAC5F,eAAO,MAAM,uBAAuB,IAAa,CAAA;AAEjD,oDAAoD;AACpD,eAAO,MAAM,mBAAmB,IAAI,CAAA;AACpC,eAAO,MAAM,mBAAmB,IAAI,CAAA;AACpC,eAAO,MAAM,2BAA2B,EAAE,MAAkD,CAAA;AAE5F,kFAAkF;AAClF,eAAO,MAAM,UAAU,EAAE,MAAgC,CAAA;AACzD,eAAO,MAAM,sBAAsB,UAAY,CAAA;AAC/C,eAAO,MAAM,sBAAsB,WAAa,CAAA;AAEhD,gDAAgD;AAChD,eAAO,MAAM,qBAAqB,KAAK,CAAA;AACvC,8EAA8E;AAC9E,eAAO,MAAM,2BAA2B,OAAO,CAAA;AAC/C,eAAO,MAAM,iCAAiC,EAAE,MACK,CAAA;AAErD,iEAAiE;AACjE,eAAO,MAAM,kBAAkB,KAAK,CAAA;AACpC,eAAO,MAAM,cAAc,MAAM,CAAA;AACjC,wFAAwF;AACxF,eAAO,MAAM,2BAA2B,MAAM,CAAA;AAC9C,sFAAsF;AACtF,eAAO,MAAM,eAAe,MAAM,CAAA;AAElC,6FAA6F;AAC7F,eAAO,MAAM,2BAA2B,QAAS,CAAA;AACjD,yFAAyF;AACzF,eAAO,MAAM,oBAAoB,SAAU,CAAA;AAC3C,wFAAwF;AACxF,eAAO,MAAM,0BAA0B,SAAU,CAAA;AACjD,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,OAAO,CAAA;AAErC,uBAAuB;AACvB,eAAO,MAAM,qBAAqB,OAAO,CAAA;AACzC,wBAAwB;AACxB,eAAO,MAAM,sBAAsB,OAAO,CAAA;AAE1C,6FAA6F;AAC7F,eAAO,MAAM,SAAS;aACpB,WAAW,EAAE,CAAC;aACd,UAAU,EAAE,CAAC;aACb,mBAAmB,EAAE,CAAC;CACd,CAAA;AACV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAA;AAElE,wBAAwB;AACxB,eAAO,MAAM,SAAS;aACpB,WAAW,EAAE,CAAC;aACd,4BAA4B,EAAE,IAAI;aAClC,oBAAoB,EAAE,IAAI;aAC1B,oBAAoB,EAAE,IAAI;aAC1B,gBAAgB,EAAE,IAAI;aACtB,iBAAiB,EAAE,IAAI;aACvB,sBAAsB,EAAE,IAAI;CACpB,CAAA;AACV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAA"}
|
package/dist/protocol.js
CHANGED
|
@@ -16,11 +16,24 @@ export const FrameType = {
|
|
|
16
16
|
CALL_ERROR: 0x05,
|
|
17
17
|
JOIN: 0x06,
|
|
18
18
|
LEAVE: 0x07,
|
|
19
|
+
CALL_CREDIT: 0x08,
|
|
19
20
|
};
|
|
20
21
|
const FRAME_TYPES = new Set(Object.values(FrameType));
|
|
21
22
|
export function isFrameType(v) {
|
|
22
23
|
return FRAME_TYPES.has(v);
|
|
23
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* PROTOCOL.md §6.6. How many response frames a streaming responder may have in flight
|
|
27
|
+
* beyond what the consumer has taken, and how much the consumer tops up at a time.
|
|
28
|
+
*
|
|
29
|
+
* These exist because the transport does not provide the bound. Measured on the quiche
|
|
30
|
+
* binding: `writer.ready` resolves unconditionally, so a generator yielding as fast as it
|
|
31
|
+
* could ran 136,523 frames and roughly 53 MB ahead of a consumer that had taken 40, and the
|
|
32
|
+
* gap grew linearly with the run rather than plateauing. A bound is only a bound if
|
|
33
|
+
* something stays in the bounded thing (D77), so the accounting is ours. See D93.
|
|
34
|
+
*/
|
|
35
|
+
export const STREAM_INITIAL_CREDIT = 32;
|
|
36
|
+
export const STREAM_CREDIT_REFILL = 16;
|
|
24
37
|
/** PROTOCOL.md §5.3. `0x00` is permanently reserved so a zero-filled buffer cannot parse. */
|
|
25
38
|
export const Codec = { JSON: 0x01 };
|
|
26
39
|
/** PROTOCOL.md §5.4 - used by frames whose meaning comes from the stream, not the table. */
|
package/dist/protocol.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,gFAAgF;AAChF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAA;AAEjC,uBAAuB;AACvB,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,SAAS,EAAE,IAAI;IACf,IAAI,EAAE,IAAI;IACV,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,IAAI;IAChB,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,gFAAgF;AAChF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAA;AAEjC,uBAAuB;AACvB,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,SAAS,EAAE,IAAI;IACf,IAAI,EAAE,IAAI;IACV,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,IAAI;IAChB,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,WAAW,EAAE,IAAI;CACT,CAAA;AAGV,MAAM,WAAW,GAAwB,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;AAC1E,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAC3B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAA;AACvC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAA;AAEtC,6FAA6F;AAC7F,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,IAAI,EAAW,CAAA;AAG5C,4FAA4F;AAC5F,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAA;AAEjD,oDAAoD;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AACpC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AACpC,MAAM,CAAC,MAAM,2BAA2B,GAAW,mBAAmB,GAAG,mBAAmB,CAAA;AAE5F,kFAAkF;AAClF,MAAM,CAAC,MAAM,UAAU,GAAW,mBAAmB,GAAG,CAAC,CAAA;AACzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAA;AAC/C,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAA;AAEhD,gDAAgD;AAChD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAA;AACvC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAA;AAC/C,MAAM,CAAC,MAAM,iCAAiC,GAC5C,2BAA2B,GAAG,qBAAqB,CAAA;AAErD,iEAAiE;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAA;AACpC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAA;AACjC,wFAAwF;AACxF,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAA;AAC9C,sFAAsF;AACtF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAA;AAElC,6FAA6F;AAC7F,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAA;AACjD,yFAAyF;AACzF,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAA;AAC3C,wFAAwF;AACxF,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAO,CAAA;AACjD,qEAAqE;AACrE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAA;AAErC,uBAAuB;AACvB,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAA;AACzC,wBAAwB;AACxB,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAA;AAE1C,6FAA6F;AAC7F,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,WAAW,EAAE,CAAC;IACd,UAAU,EAAE,CAAC;IACb,mBAAmB,EAAE,CAAC;CACd,CAAA;AAGV,wBAAwB;AACxB,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,WAAW,EAAE,CAAC;IACd,4BAA4B,EAAE,IAAI;IAClC,oBAAoB,EAAE,IAAI;IAC1B,oBAAoB,EAAE,IAAI;IAC1B,gBAAgB,EAAE,IAAI;IACtB,iBAAiB,EAAE,IAAI;IACvB,sBAAsB,EAAE,IAAI;CACpB,CAAA"}
|
package/dist/queue.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export interface QueueStats {
|
|
|
4
4
|
readonly staleDropped: number;
|
|
5
5
|
}
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Unreliable lane: bounded ring, drop OLDEST on overflow, TTL checked at DEQUEUE.
|
|
8
8
|
*
|
|
9
9
|
* The two axes are different problems. Drop-oldest handles a burst. It does nothing for a
|
|
10
10
|
* peer that stalls two seconds and resumes - the ring never overflows, so a backlog of
|
|
@@ -17,6 +17,8 @@ export declare class DatagramQueue<T> {
|
|
|
17
17
|
constructor(max?: number, ttlMs?: number);
|
|
18
18
|
/** Never throws and never blocks: dropping is this lane's advertised contract. */
|
|
19
19
|
push(item: T, now: number): void;
|
|
20
|
+
/** Drop everything, for a session that is going away with frames still queued. */
|
|
21
|
+
clear(): void;
|
|
20
22
|
/** Drains what is still fresh. Anything past its TTL is discarded here, not on entry. */
|
|
21
23
|
drain(now: number): T[];
|
|
22
24
|
stats(): QueueStats;
|
|
@@ -41,5 +43,7 @@ export declare class EmitQueue<T> {
|
|
|
41
43
|
peek(): T | undefined;
|
|
42
44
|
shift(): T | undefined;
|
|
43
45
|
get depth(): number;
|
|
46
|
+
/** Drop everything, for a session that is going away with frames still queued. */
|
|
47
|
+
clear(): void;
|
|
44
48
|
}
|
|
45
49
|
//# sourceMappingURL=queue.d.ts.map
|
package/dist/queue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAC9B;AAOD;;;;;;;;GAQG;AACH,qBAAa,aAAa,CAAC,CAAC;;IAO1B,YAAY,GAAG,GAAE,MAA2B,EAAE,KAAK,GAAE,MAAwB,EAG5E;IAED,kFAAkF;IAClF,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAM/B;IAED,yFAAyF;IACzF,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,CAQtB;IAED,KAAK,IAAI,UAAU,CAMlB;CACF;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,YAAY,KAAK,EAAE,MAAM,EAGxB;CACF;AAED;;;;GAIG;AACH,qBAAa,SAAS,CAAC,CAAC;;IAItB,YAAY,GAAG,GAAE,MAAuB,EAEvC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAGlB;IAED;;;;OAIG;IACH,IAAI,IAAI,CAAC,GAAG,SAAS,CAEpB;IAED,KAAK,IAAI,CAAC,GAAG,SAAS,CAErB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;CACF"}
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAC9B;AAOD;;;;;;;;GAQG;AACH,qBAAa,aAAa,CAAC,CAAC;;IAO1B,YAAY,GAAG,GAAE,MAA2B,EAAE,KAAK,GAAE,MAAwB,EAG5E;IAED,kFAAkF;IAClF,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAM/B;IAED,kFAAkF;IAClF,KAAK,IAAI,IAAI,CAEZ;IAED,yFAAyF;IACzF,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,CAQtB;IAED,KAAK,IAAI,UAAU,CAMlB;CACF;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,YAAY,KAAK,EAAE,MAAM,EAGxB;CACF;AAED;;;;GAIG;AACH,qBAAa,SAAS,CAAC,CAAC;;IAItB,YAAY,GAAG,GAAE,MAAuB,EAEvC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAGlB;IAED;;;;OAIG;IACH,IAAI,IAAI,CAAC,GAAG,SAAS,CAEpB;IAED,KAAK,IAAI,CAAC,GAAG,SAAS,CAErB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,kFAAkF;IAClF,KAAK,IAAI,IAAI,CAEZ;CACF"}
|
package/dist/queue.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { DATAGRAM_QUEUE_MAX, DATAGRAM_TTL_MS, EMIT_QUEUE_MAX } from './protocol.js';
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Unreliable lane: bounded ring, drop OLDEST on overflow, TTL checked at DEQUEUE.
|
|
12
12
|
*
|
|
13
13
|
* The two axes are different problems. Drop-oldest handles a burst. It does nothing for a
|
|
14
14
|
* peer that stalls two seconds and resumes - the ring never overflows, so a backlog of
|
|
@@ -34,6 +34,10 @@ export class DatagramQueue {
|
|
|
34
34
|
}
|
|
35
35
|
this.#items.push({ item, at: now });
|
|
36
36
|
}
|
|
37
|
+
/** Drop everything, for a session that is going away with frames still queued. */
|
|
38
|
+
clear() {
|
|
39
|
+
this.#items.length = 0;
|
|
40
|
+
}
|
|
37
41
|
/** Drains what is still fresh. Anything past its TTL is discarded here, not on entry. */
|
|
38
42
|
drain(now) {
|
|
39
43
|
const out = [];
|
|
@@ -90,5 +94,9 @@ export class EmitQueue {
|
|
|
90
94
|
get depth() {
|
|
91
95
|
return this.#items.length;
|
|
92
96
|
}
|
|
97
|
+
/** Drop everything, for a session that is going away with frames still queued. */
|
|
98
|
+
clear() {
|
|
99
|
+
this.#items.length = 0;
|
|
100
|
+
}
|
|
93
101
|
}
|
|
94
102
|
//# sourceMappingURL=queue.js.map
|
package/dist/queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAanF;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAa;IACf,MAAM,GAAgB,EAAE,CAAA;IACxB,IAAI,CAAQ;IACZ,MAAM,CAAQ;IACvB,gBAAgB,GAAG,CAAC,CAAA;IACpB,aAAa,GAAG,CAAC,CAAA;IAEjB,YAAY,GAAG,GAAW,kBAAkB,EAAE,KAAK,GAAW,eAAe;QAC3E,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;IACrB,CAAC;IAED,kFAAkF;IAClF,IAAI,CAAC,IAAO,EAAE,GAAW;QACvB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;YACnB,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACzB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;IACrC,CAAC;IAED,yFAAyF;IACzF,KAAK,CAAC,GAAW;QACf,MAAM,GAAG,GAAQ,EAAE,CAAA;QACnB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,aAAa,EAAE,CAAA;;gBAC9C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACvB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;QACtB,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,KAAK;QACH,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC9B,eAAe,EAAE,IAAI,CAAC,gBAAgB;YACtC,YAAY,EAAE,IAAI,CAAC,aAAa;SACjC,CAAA;IACH,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,KAAa;QACvB,KAAK,CAAC,sBAAsB,KAAK,SAAS,CAAC,CAAA;QAC3C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;IAChC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,SAAS;IACX,MAAM,GAAQ,EAAE,CAAA;IAChB,IAAI,CAAQ;IAErB,YAAY,GAAG,GAAW,cAAc;QACtC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;IACjB,CAAC;IAED,IAAI,CAAC,IAAO;QACV,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACnF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACvB,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;IAC3B,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAanF;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAa;IACf,MAAM,GAAgB,EAAE,CAAA;IACxB,IAAI,CAAQ;IACZ,MAAM,CAAQ;IACvB,gBAAgB,GAAG,CAAC,CAAA;IACpB,aAAa,GAAG,CAAC,CAAA;IAEjB,YAAY,GAAG,GAAW,kBAAkB,EAAE,KAAK,GAAW,eAAe;QAC3E,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;IACrB,CAAC;IAED,kFAAkF;IAClF,IAAI,CAAC,IAAO,EAAE,GAAW;QACvB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;YACnB,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACzB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;IACrC,CAAC;IAED,kFAAkF;IAClF,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;IACxB,CAAC;IAED,yFAAyF;IACzF,KAAK,CAAC,GAAW;QACf,MAAM,GAAG,GAAQ,EAAE,CAAA;QACnB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,aAAa,EAAE,CAAA;;gBAC9C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACvB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;QACtB,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,KAAK;QACH,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC9B,eAAe,EAAE,IAAI,CAAC,gBAAgB;YACtC,YAAY,EAAE,IAAI,CAAC,aAAa;SACjC,CAAA;IACH,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,KAAa;QACvB,KAAK,CAAC,sBAAsB,KAAK,SAAS,CAAC,CAAA;QAC3C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;IAChC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,SAAS;IACX,MAAM,GAAQ,EAAE,CAAA;IAChB,IAAI,CAAQ;IAErB,YAAY,GAAG,GAAW,cAAc;QACtC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;IACjB,CAAC;IAED,IAAI,CAAC,IAAO;QACV,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACnF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACvB,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;IAC3B,CAAC;IAED,kFAAkF;IAClF,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;IACxB,CAAC;CACF"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Server surface. Transport-agnostic: it accepts a Connection from the seam. */
|
|
2
2
|
import { type Adapter, type PeerId } from './adapter.ts';
|
|
3
|
-
import { type AnyMap, type CallableOf, type Contract } from './contract.ts';
|
|
3
|
+
import { type AnyMap, type CallableOf, type Contract, type StreamableOf } from './contract.ts';
|
|
4
4
|
import { type SessionStats } from './session.ts';
|
|
5
5
|
import type { Connection } from './transport/types.ts';
|
|
6
6
|
export interface ServerPeer<M extends AnyMap = AnyMap> {
|
|
@@ -36,6 +36,12 @@ export declare class Server<M extends AnyMap = AnyMap> {
|
|
|
36
36
|
listen(): Promise<void>;
|
|
37
37
|
/** Register a responder for a callable event. */
|
|
38
38
|
handle<K extends CallableOf<M> & string>(event: K, handler: (payload: M[K]['payload'], ctx: CallContext) => Promise<M[K]['returns']>): () => void;
|
|
39
|
+
/**
|
|
40
|
+
* Register a responder for a streaming event. The handler is an async generator: each
|
|
41
|
+
* `yield` is one frame, and it does not resume until that frame has been accepted, so a
|
|
42
|
+
* slow consumer slows the generator instead of filling a queue.
|
|
43
|
+
*/
|
|
44
|
+
handle<K extends StreamableOf<M> & string>(event: K, handler: (payload: M[K]['payload'], ctx: CallContext) => AsyncIterable<M[K]['yields']>): () => void;
|
|
39
45
|
onSession(cb: (peer: ServerPeer<M>) => void): () => void;
|
|
40
46
|
memberCount(room: string): number;
|
|
41
47
|
accept(conn: Connection): Promise<ServerPeer<M>>;
|