transport-io 0.7.2 → 0.8.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 -7
- package/dist/client.d.ts +35 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +81 -6
- package/dist/client.js.map +1 -1
- package/dist/contract.d.ts +64 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +13 -3
- package/dist/contract.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/protocol.d.ts +19 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +19 -0
- package/dist/protocol.js.map +1 -1
- package/dist/queue.d.ts +8 -2
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +20 -7
- package/dist/queue.js.map +1 -1
- package/dist/server.d.ts +13 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +19 -3
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +64 -16
- package/dist/session.js.map +1 -1
- package/dist/timers.d.ts +40 -0
- package/dist/timers.d.ts.map +1 -0
- package/dist/timers.js +67 -0
- package/dist/timers.js.map +1 -0
- package/dist/transport/browser.d.ts +6 -0
- package/dist/transport/browser.d.ts.map +1 -1
- package/dist/transport/browser.js +10 -8
- package/dist/transport/browser.js.map +1 -1
- package/dist/transport/dev.d.ts.map +1 -1
- package/dist/transport/dev.js +3 -0
- package/dist/transport/dev.js.map +1 -1
- package/dist/transport/fails.node.d.ts +2 -0
- package/dist/transport/fails.node.d.ts.map +1 -1
- package/dist/transport/fails.node.js +10 -1
- package/dist/transport/fails.node.js.map +1 -1
- package/dist/transport/loopback.d.ts +7 -2
- package/dist/transport/loopback.d.ts.map +1 -1
- package/dist/transport/loopback.js +14 -4
- package/dist/transport/loopback.js.map +1 -1
- package/dist/transport/moq.node.d.ts.map +1 -1
- package/dist/transport/moq.node.js +6 -3
- package/dist/transport/moq.node.js.map +1 -1
- package/dist/transport/parity-suite.d.ts +5 -0
- package/dist/transport/parity-suite.d.ts.map +1 -1
- package/dist/transport/parity-suite.js +22 -13
- package/dist/transport/parity-suite.js.map +1 -1
- package/dist/transport/probe.d.ts +43 -0
- package/dist/transport/probe.d.ts.map +1 -0
- package/dist/transport/probe.js +82 -0
- package/dist/transport/probe.js.map +1 -0
- package/dist/transport/types.d.ts +9 -0
- package/dist/transport/types.d.ts.map +1 -1
- package/dist/transport/unreliable.d.ts +2 -1
- package/dist/transport/unreliable.d.ts.map +1 -1
- package/dist/transport/unreliable.js +3 -0
- package/dist/transport/unreliable.js.map +1 -1
- package/dist/transport/websocket.d.ts +63 -0
- package/dist/transport/websocket.d.ts.map +1 -0
- package/dist/transport/websocket.js +203 -0
- package/dist/transport/websocket.js.map +1 -0
- package/dist/transport/websocket.node.d.ts +16 -0
- package/dist/transport/websocket.node.d.ts.map +1 -0
- package/dist/transport/websocket.node.js +85 -0
- package/dist/transport/websocket.node.js.map +1 -0
- package/package.json +19 -3
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
8
|
Real-time apps over WebTransport. Socket.IO's shape, on a transport with multiple streams
|
|
9
|
-
and datagrams. Two lanes, one contract,
|
|
9
|
+
and datagrams. Two lanes, one contract, one fallback.
|
|
10
10
|
|
|
11
11
|
Framing, length prefixes, buffer accumulation and stream lifecycle are handled for you. An
|
|
12
12
|
event declares `reliable` or `unreliable` in the contract, so "this message may be dropped"
|
|
@@ -18,20 +18,17 @@ returns an async iterable, and leaving the loop resets the QUIC stream so the se
|
|
|
18
18
|
generator's `finally` runs.
|
|
19
19
|
|
|
20
20
|
**Read [KNOWN-ISSUES.md](https://github.com/transport-io/transport-io/blob/main/KNOWN-ISSUES.md)
|
|
21
|
-
before you start.** It lists what this library will not do
|
|
21
|
+
before you start.** It lists what this library will not do. Full documentation is in the
|
|
22
22
|
[repository README](https://github.com/transport-io/transport-io#readme). The short version:
|
|
23
23
|
|
|
24
|
-
- **WebTransport
|
|
24
|
+
- **WebTransport first.** The WebSocket fallback carries emits only, where the contract
|
|
25
|
+
declares it; calls and streams need WebTransport.
|
|
25
26
|
- **Chrome and Firefox.** Safari cannot talk to a quiche-backed server and is unsupported.
|
|
26
27
|
- **The server needs a separate native install**, and its Linux prebuild needs glibc 2.38 -
|
|
27
28
|
no default Node `-slim` image has it, and Alpine has no prebuild at all.
|
|
28
29
|
That package, the fourteen-day ECDSA rule for a pinned development certificate, and the
|
|
29
30
|
Safari gap are the same for Socket.IO's WebTransport transport: properties of the stack,
|
|
30
31
|
not of this library.
|
|
31
|
-
- **Each bidirectional stream leaks ~5.95 KB of server memory**, upstream in the QUIC
|
|
32
|
-
binding, not in this library. `emit` and datagrams are flat. The leak is per stream rather
|
|
33
|
-
than per message, so a `stream()` of a thousand tokens costs 5.95 KB in total where a
|
|
34
|
-
thousand `call()`s cost 5.95 KB each: for token workloads, streaming is the cheap shape.
|
|
35
32
|
- **The protocol is v0 and unstable.** Both sides currently require an exact match.
|
|
36
33
|
|
|
37
34
|
```bash
|
package/dist/client.d.ts
CHANGED
|
@@ -5,16 +5,25 @@
|
|
|
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, type Registered, type StreamableOf } from './contract.ts';
|
|
8
|
+
import { type AnyMap, type CallableOf, type Contract, type FallbackReady, type Registered, type StreamableOf } from './contract.ts';
|
|
9
9
|
import { TransportError } from './errors.ts';
|
|
10
10
|
import { type SessionStats, type StreamResult } from './session.ts';
|
|
11
|
-
import type { Connection } from './transport/types.ts';
|
|
11
|
+
import type { Connection, Transport } from './transport/types.ts';
|
|
12
12
|
export type Status = 'idle' | 'connecting' | 'connected' | 'closing' | 'closed';
|
|
13
|
+
/** Why the current session is on a fallback transport rather than on WebTransport. */
|
|
14
|
+
export type FallbackReason = 'unsupported' | 'unreachable';
|
|
13
15
|
export interface ClientState {
|
|
14
16
|
readonly status: Status;
|
|
15
17
|
readonly sessionId: string | null;
|
|
16
18
|
readonly rooms: readonly string[];
|
|
17
19
|
readonly lastError: TransportError | null;
|
|
20
|
+
/** What carries the current session. `null` until connected. */
|
|
21
|
+
readonly transport: Transport | null;
|
|
22
|
+
/**
|
|
23
|
+
* Why the current session is a fallback: the runtime has no WebTransport, or the server
|
|
24
|
+
* answered over HTTPS and not over QUIC. `null` on a native session.
|
|
25
|
+
*/
|
|
26
|
+
readonly fallbackReason: FallbackReason | null;
|
|
18
27
|
}
|
|
19
28
|
export interface ClientOptions<C extends Contract = Contract> {
|
|
20
29
|
/**
|
|
@@ -66,4 +75,28 @@ export declare class Client<M extends AnyMap = Registered> {
|
|
|
66
75
|
}): StreamResult<M[K]['yields']>;
|
|
67
76
|
stats(): SessionStats | undefined;
|
|
68
77
|
}
|
|
78
|
+
/** The lanes only a native session carries. */
|
|
79
|
+
export type NativeLanes<M extends AnyMap> = Pick<Client<M>, 'call' | 'stream'>;
|
|
80
|
+
/**
|
|
81
|
+
* A client that may be on a fallback transport, so `call()` and `stream()` are not its
|
|
82
|
+
* methods: they live on `native`, which is `null` while the session is a fallback. The
|
|
83
|
+
* compiler makes the check unavoidable; nothing about it is discovered at runtime.
|
|
84
|
+
*/
|
|
85
|
+
export type FallbackClient<M extends AnyMap> = Omit<Client<M>, 'call' | 'stream'> & {
|
|
86
|
+
/** `call()` and `stream()`, on a native session. `null` on a fallback, or when not connected. */
|
|
87
|
+
readonly native: NativeLanes<M> | null;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* A client with a second transport behind the first (D121).
|
|
91
|
+
*
|
|
92
|
+
* The native connector is tried first, every time. The fallback is used only when the
|
|
93
|
+
* runtime has no WebTransport or when the server answers over HTTPS and not over QUIC, and
|
|
94
|
+
* the snapshot says which. The type argument is the gate: `FallbackReady<M>` is `unknown`
|
|
95
|
+
* when every unreliable event in the map declares a fallback, and otherwise a required
|
|
96
|
+
* property naming the event that has not, so this call fails to compile rather than an
|
|
97
|
+
* emit failing in production.
|
|
98
|
+
*/
|
|
99
|
+
export declare function withFallback<M extends AnyMap = Registered>(options: ClientOptions & FallbackReady<M> & {
|
|
100
|
+
readonly fallback: () => Promise<Connection>;
|
|
101
|
+
}): FallbackClient<M>;
|
|
69
102
|
//# 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,EACL,KAAK,MAAM,EAEX,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EAClB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAW,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -29,6 +29,8 @@ export class Client {
|
|
|
29
29
|
sessionId: null,
|
|
30
30
|
rooms: [],
|
|
31
31
|
lastError: null,
|
|
32
|
+
transport: null,
|
|
33
|
+
fallbackReason: null,
|
|
32
34
|
});
|
|
33
35
|
#refs = 0;
|
|
34
36
|
#connecting;
|
|
@@ -84,7 +86,13 @@ export class Client {
|
|
|
84
86
|
closing?.dispose();
|
|
85
87
|
this.#session = undefined;
|
|
86
88
|
this.#connecting = undefined;
|
|
87
|
-
this.#patch({
|
|
89
|
+
this.#patch({
|
|
90
|
+
status: 'closed',
|
|
91
|
+
sessionId: null,
|
|
92
|
+
rooms: [],
|
|
93
|
+
transport: null,
|
|
94
|
+
fallbackReason: null,
|
|
95
|
+
});
|
|
88
96
|
}
|
|
89
97
|
/** The lane comes from the contract, never from this call site. */
|
|
90
98
|
emit(event, payload) {
|
|
@@ -124,11 +132,13 @@ export class Client {
|
|
|
124
132
|
const generation = this.#generation;
|
|
125
133
|
try {
|
|
126
134
|
const table = await buildEventTable(this.#opts.contract);
|
|
127
|
-
const conn = await this.#
|
|
135
|
+
const { conn, fallbackReason } = await this.#open();
|
|
128
136
|
// Chrome implements neither `requireUnreliable` nor `reliability`, so `undefined`
|
|
129
137
|
// must pass or every session on the dominant browser would be refused. Only an
|
|
130
|
-
// explicit reliable-only would misreport what the unreliable lane does.
|
|
131
|
-
|
|
138
|
+
// explicit reliable-only would misreport what the unreliable lane does. A fallback
|
|
139
|
+
// transport is reliable-only by definition and is judged by the session instead,
|
|
140
|
+
// against the contract's declarations (D121).
|
|
141
|
+
if (conn.kind() === 'webtransport' && conn.reliability() === 'reliable-only') {
|
|
132
142
|
// §10.2 code 1006. Throwing without closing left the peer holding a session this
|
|
133
143
|
// side had already abandoned, with nothing on the wire to say why.
|
|
134
144
|
conn.close(CloseCode.WT_RELIABILITY_REFUSED, 'reliable-only transport refused');
|
|
@@ -162,9 +172,20 @@ export class Client {
|
|
|
162
172
|
}
|
|
163
173
|
session.onControl((type, body) => this.#onMembership(type, body));
|
|
164
174
|
await session.start();
|
|
165
|
-
this.#patch({
|
|
175
|
+
this.#patch({
|
|
176
|
+
status: 'connected',
|
|
177
|
+
sessionId: `s-${session.origin}`,
|
|
178
|
+
transport: conn.kind(),
|
|
179
|
+
fallbackReason,
|
|
180
|
+
});
|
|
166
181
|
void conn.closed.then(() => {
|
|
167
|
-
this.#patch({
|
|
182
|
+
this.#patch({
|
|
183
|
+
status: 'closed',
|
|
184
|
+
sessionId: null,
|
|
185
|
+
rooms: [],
|
|
186
|
+
transport: null,
|
|
187
|
+
fallbackReason: null,
|
|
188
|
+
});
|
|
168
189
|
});
|
|
169
190
|
}
|
|
170
191
|
catch (e) {
|
|
@@ -187,6 +208,26 @@ export class Client {
|
|
|
187
208
|
rooms.delete(room);
|
|
188
209
|
this.#patch({ rooms: [...rooms].sort() });
|
|
189
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* The native connector, then the fallback if one was installed and the failure is one a
|
|
213
|
+
* fallback answers: no WebTransport in this runtime, or a server that answers over HTTPS
|
|
214
|
+
* and not over QUIC. Every other failure is thrown as it is, because a dead server or a
|
|
215
|
+
* wrong hash is not a reason to change transport.
|
|
216
|
+
*/
|
|
217
|
+
async #open() {
|
|
218
|
+
const fallback = fallbacks.get(this);
|
|
219
|
+
try {
|
|
220
|
+
return { conn: await this.#opts.connect(), fallbackReason: null };
|
|
221
|
+
}
|
|
222
|
+
catch (e) {
|
|
223
|
+
if (fallback === undefined)
|
|
224
|
+
throw e;
|
|
225
|
+
const reason = fallbackReasonFor(e);
|
|
226
|
+
if (reason === undefined)
|
|
227
|
+
throw e;
|
|
228
|
+
return { conn: await fallback(), fallbackReason: reason };
|
|
229
|
+
}
|
|
230
|
+
}
|
|
190
231
|
#requireSession() {
|
|
191
232
|
if (this.#session === undefined) {
|
|
192
233
|
throw new TransportError('WT_SESSION_CLOSED', 'not connected', 'Await connect() before emitting.');
|
|
@@ -199,4 +240,38 @@ export class Client {
|
|
|
199
240
|
l();
|
|
200
241
|
}
|
|
201
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* The fallback connector a client was built with, keyed by the client and readable only from
|
|
245
|
+
* this module. `ClientOptions` deliberately has no `fallback` field: putting one there would
|
|
246
|
+
* let `new Client(...)` take a fallback without passing the gate below.
|
|
247
|
+
*/
|
|
248
|
+
const fallbacks = new WeakMap();
|
|
249
|
+
function fallbackReasonFor(e) {
|
|
250
|
+
if (!(e instanceof TransportError))
|
|
251
|
+
return undefined;
|
|
252
|
+
if (e.code === 'WT_NO_SUPPORT')
|
|
253
|
+
return 'unsupported';
|
|
254
|
+
if (e.code === 'WT_UDP_UNREACHABLE')
|
|
255
|
+
return 'unreachable';
|
|
256
|
+
return undefined;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* A client with a second transport behind the first (D121).
|
|
260
|
+
*
|
|
261
|
+
* The native connector is tried first, every time. The fallback is used only when the
|
|
262
|
+
* runtime has no WebTransport or when the server answers over HTTPS and not over QUIC, and
|
|
263
|
+
* the snapshot says which. The type argument is the gate: `FallbackReady<M>` is `unknown`
|
|
264
|
+
* when every unreliable event in the map declares a fallback, and otherwise a required
|
|
265
|
+
* property naming the event that has not, so this call fails to compile rather than an
|
|
266
|
+
* emit failing in production.
|
|
267
|
+
*/
|
|
268
|
+
export function withFallback(options) {
|
|
269
|
+
const client = new Client(options);
|
|
270
|
+
fallbacks.set(client, options.fallback);
|
|
271
|
+
Object.defineProperty(client, 'native', {
|
|
272
|
+
enumerable: true,
|
|
273
|
+
get: () => client.getSnapshot().transport === 'webtransport' ? client : null,
|
|
274
|
+
});
|
|
275
|
+
return client;
|
|
276
|
+
}
|
|
202
277
|
//# sourceMappingURL=client.js.map
|
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,EAEL,eAAe,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAEL,eAAe,GAMhB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,OAAO,EAAwC,MAAM,cAAc,CAAA;AA0C5E,MAAM,OAAO,MAAM;IACR,KAAK,CAAe;IACpB,UAAU,GAAG,IAAI,GAAG,EAAc,CAAA;IAClC,SAAS,GAAG,IAAI,GAAG,EAA2C,CAAA;IACvE,QAAQ,CAAqB;IAC7B;;;;;;;;OAQG;IACH,WAAW,GAAG,CAAC,CAAA;IACf,SAAS,GAAgB,MAAM,CAAC,MAAM,CAAC;QACrC,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,IAAI;KACrB,CAAC,CAAA;IACF,KAAK,GAAG,CAAC,CAAA;IACT,WAAW,CAA2B;IAEtC,YAAY,IAAmB;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACnB,CAAC;IAED;;;;OAIG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAED,SAAS,CAAC,QAAoB;QAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAClC,CAAC,CAAA;IACH,CAAC;IAED;oFACgF;IAChF,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QACxE,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAA;QACxB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;YAC5B,MAAM,CAAC,CAAA;QACT,CAAC;IACH,CAAC;IAED,UAAU;QACR,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QACxC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC;YAAE,OAAM;QAC1B,IAAI,CAAC,WAAW,EAAE,CAAA;QAClB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC7B,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAA;QAC1D;;;;;;;;;WASG;QACH,OAAO,EAAE,OAAO,EAAE,CAAA;QAClB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;QACzB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;QAC5B,IAAI,CAAC,MAAM,CAAC;YACV,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,IAAI;YACf,cAAc,EAAE,IAAI;SACrB,CAAC,CAAA;IACJ,CAAC;IAED,mEAAmE;IACnE,IAAI,CAA6B,KAAQ,EAAE,OAAwB;QACjE,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC7C,CAAC;IAED,EAAE,CACA,KAAQ,EACR,OAA2C;QAE3C,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACnC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;YACf,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAChC,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,OAA+B,CAAC,CAAA;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAoB,CAAC,CAAC,CAAA;QAC1E,OAAO,GAAG,EAAE;YACV,GAAG,CAAC,MAAM,CAAC,OAA+B,CAAC,CAAA;YAC3C,GAAG,EAAE,EAAE,CAAA;QACT,CAAC,CAAA;IACH,CAAC;IAED,qFAAqF;IACrF,KAAK,CAAC,IAAI,CACR,KAAQ,EACR,OAAwB,EACxB,OAA2C;QAE3C,OAAO,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAoB,CAAA;IACxF,CAAC;IAED;;;;;OAKG;IACH,MAAM,CACJ,KAAQ,EACR,OAAwB,EACxB,OAA2C;QAE3C,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAE3D,CAAA;IACH,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAA;IAC/B,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAA;QACnC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YACxD,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YAEnD,kFAAkF;YAClF,+EAA+E;YAC/E,mFAAmF;YACnF,iFAAiF;YACjF,8CAA8C;YAC9C,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,cAAc,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,eAAe,EAAE,CAAC;gBAC7E,iFAAiF;gBACjF,mEAAmE;gBACnE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,sBAAsB,EAAE,iCAAiC,CAAC,CAAA;gBAC/E,MAAM,IAAI,cAAc,CACtB,wBAAwB,EACxB,gDAAgD,EAChD,uHAAuH,CACxH,CAAA;YACH,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE;gBAChC,KAAK;gBACL,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,UAAU;gBACvC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS;oBAC1C,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;gBACpD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,KAAK,SAAS;oBAC9C,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;gBAC5D,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS;oBACxC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;gBAChD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;aACjE,CAAC,CAAA;YACF,oFAAoF;YACpF,0EAA0E;YAC1E,IAAI,UAAU,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpC,OAAO,CAAC,OAAO,EAAE,CAAA;gBACjB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAA;gBACvD,OAAM;YACR,CAAC;YACD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;YAEvB,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC/C,KAAK,MAAM,CAAC,IAAI,QAAQ;oBAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC1D,CAAC;YACD,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;YAEjE,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;YACrB,IAAI,CAAC,MAAM,CAAC;gBACV,MAAM,EAAE,WAAW;gBACnB,SAAS,EAAE,KAAK,OAAO,CAAC,MAAM,EAAE;gBAChC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE;gBACtB,cAAc;aACf,CAAC,CAAA;YAEF,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;gBACzB,IAAI,CAAC,MAAM,CAAC;oBACV,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,IAAI;oBACf,KAAK,EAAE,EAAE;oBACT,SAAS,EAAE,IAAI;oBACf,cAAc,EAAE,IAAI;iBACrB,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,GACP,CAAC,YAAY,cAAc;gBACzB,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,IAAI,cAAc,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAA;YACjF,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAA;YACjD,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC;IAED,yFAAyF;IACzF,aAAa,CAAC,IAAY,EAAE,IAAa;QACvC,MAAM,IAAI,GAAI,IAA2B,CAAC,IAAI,CAAA;QAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAM;QACpC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAC3C,IAAI,IAAI,KAAK,SAAS,CAAC,IAAI;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;;YACvC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAA;QACnE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,QAAQ,KAAK,SAAS;gBAAE,MAAM,CAAC,CAAA;YACnC,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAA;YACnC,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,CAAC,CAAA;YACjC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,CAAA;QAC3D,CAAC;IACH,CAAC;IAED,eAAe;QACb,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,cAAc,CACtB,mBAAmB,EACnB,eAAe,EACf,kCAAkC,CACnC,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,MAAM,CAAC,IAA0B;QAC/B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;QAC9D,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU;YAAE,CAAC,EAAE,CAAA;IACtC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,SAAS,GAAG,IAAI,OAAO,EAAqC,CAAA;AAElE,SAAS,iBAAiB,CAAC,CAAU;IACnC,IAAI,CAAC,CAAC,CAAC,YAAY,cAAc,CAAC;QAAE,OAAO,SAAS,CAAA;IACpD,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe;QAAE,OAAO,aAAa,CAAA;IACpD,IAAI,CAAC,CAAC,IAAI,KAAK,oBAAoB;QAAE,OAAO,aAAa,CAAA;IACzD,OAAO,SAAS,CAAA;AAClB,CAAC;AAeD;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAC1B,OAA4F;IAE5F,MAAM,MAAM,GAAG,IAAI,MAAM,CAAI,OAAO,CAAC,CAAA;IACrC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;QACtC,UAAU,EAAE,IAAI;QAChB,GAAG,EAAE,GAA0B,EAAE,CAC/B,MAAM,CAAC,WAAW,EAAE,CAAC,SAAS,KAAK,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;KACpE,CAAC,CAAA;IACF,OAAO,MAAsC,CAAA;AAC/C,CAAC"}
|
package/dist/contract.d.ts
CHANGED
|
@@ -4,6 +4,15 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { StandardSchemaV1, StandardTypedV1 } from '@standard-schema/spec';
|
|
6
6
|
export type Lane = 'reliable' | 'unreliable';
|
|
7
|
+
/**
|
|
8
|
+
* What an unreliable event accepts on a transport that cannot carry the unreliable lane.
|
|
9
|
+
*
|
|
10
|
+
* `'newest'`: carried on the reliable pipe, with the oldest frame dropped on overflow and
|
|
11
|
+
* stale frames dropped at dequeue exactly as the datagram ring drops them, delivered in
|
|
12
|
+
* order. An event that declares nothing has consented to nothing, and no fallback can be
|
|
13
|
+
* wired for a contract that contains one (D121).
|
|
14
|
+
*/
|
|
15
|
+
export type FallbackPolicy = 'newest';
|
|
7
16
|
export type Schema = StandardSchemaV1;
|
|
8
17
|
/**
|
|
9
18
|
* `returns` is meaningful only on the reliable lane: an unreliable event has no response
|
|
@@ -27,6 +36,7 @@ export type EventDef = {
|
|
|
27
36
|
readonly lane: 'unreliable';
|
|
28
37
|
readonly payload: Schema;
|
|
29
38
|
readonly id?: number;
|
|
39
|
+
readonly fallback?: FallbackPolicy;
|
|
30
40
|
readonly returns?: never;
|
|
31
41
|
readonly yields?: never;
|
|
32
42
|
} | {
|
|
@@ -35,12 +45,14 @@ export type EventDef = {
|
|
|
35
45
|
readonly returns?: Schema;
|
|
36
46
|
readonly id?: number;
|
|
37
47
|
readonly yields?: never;
|
|
48
|
+
readonly fallback?: never;
|
|
38
49
|
} | {
|
|
39
50
|
readonly lane: 'reliable';
|
|
40
51
|
readonly payload: Schema;
|
|
41
52
|
readonly yields: Schema;
|
|
42
53
|
readonly id?: number;
|
|
43
54
|
readonly returns?: never;
|
|
55
|
+
readonly fallback?: never;
|
|
44
56
|
};
|
|
45
57
|
export type Contract = Readonly<Record<string, EventDef>>;
|
|
46
58
|
export type Infer<S extends StandardTypedV1> = StandardTypedV1.InferOutput<S>;
|
|
@@ -59,12 +71,19 @@ export type MapOf<C extends Contract> = {
|
|
|
59
71
|
readonly yields: C[K] extends {
|
|
60
72
|
readonly yields: infer Y extends Schema;
|
|
61
73
|
} ? Infer<Y> : never;
|
|
74
|
+
readonly lane: C[K]['lane'];
|
|
75
|
+
readonly fallback: C[K] extends {
|
|
76
|
+
readonly fallback: infer F extends FallbackPolicy;
|
|
77
|
+
} ? F : undefined;
|
|
62
78
|
};
|
|
63
79
|
};
|
|
64
80
|
export interface EventShape {
|
|
65
81
|
readonly payload: unknown;
|
|
66
82
|
readonly returns: unknown;
|
|
67
83
|
readonly yields: unknown;
|
|
84
|
+
/** Optional so a hand-written map still satisfies `AnyMap`; `MapOf` always sets both. */
|
|
85
|
+
readonly lane?: Lane | undefined;
|
|
86
|
+
readonly fallback?: FallbackPolicy | undefined;
|
|
68
87
|
}
|
|
69
88
|
export type AnyMap = Readonly<Record<string, EventShape>>;
|
|
70
89
|
/**
|
|
@@ -138,6 +157,26 @@ export type CheckPayloads<C extends Contract> = {
|
|
|
138
157
|
[K in keyof C]: IsUnknown<Infer<C[K]['payload']>> extends true ? `event '${K & string}' has an unknown payload: pass a type argument or a schema` : C[K];
|
|
139
158
|
};
|
|
140
159
|
export declare function defineContract<const C extends Contract>(contract: C & CheckPayloads<C>): C;
|
|
160
|
+
/** The unreliable events of a map that declare no fallback, as a union of their names. */
|
|
161
|
+
type Undeclared<M extends AnyMap> = {
|
|
162
|
+
[K in keyof M]: M[K] extends {
|
|
163
|
+
readonly lane: 'unreliable';
|
|
164
|
+
} ? M[K] extends {
|
|
165
|
+
readonly fallback: FallbackPolicy;
|
|
166
|
+
} ? never : K & string : never;
|
|
167
|
+
}[keyof M];
|
|
168
|
+
/**
|
|
169
|
+
* The compile-time half of the contract gate (D121).
|
|
170
|
+
*
|
|
171
|
+
* `unknown` when every unreliable event in `M` declares a fallback, so intersecting it with
|
|
172
|
+
* an options type changes nothing. Otherwise a required property whose name and value spell
|
|
173
|
+
* out an event that has not, so the error lands on the line that adds the fallback and
|
|
174
|
+
* names what to fix. The same intersection shape as `CheckPayloads`, for the same reason:
|
|
175
|
+
* it is the form that survives the TypeScript 5.0 floor.
|
|
176
|
+
*/
|
|
177
|
+
export type FallbackReady<M extends AnyMap> = [Undeclared<M>] extends [never] ? unknown : {
|
|
178
|
+
readonly 'fallback refused': `event '${Undeclared<M>}' is unreliable and declares no fallback`;
|
|
179
|
+
};
|
|
141
180
|
/**
|
|
142
181
|
* Sugar over the object literal. The literal keeps working, and anything generating a
|
|
143
182
|
* contract programmatically needs it, so these add nothing the literal cannot express.
|
|
@@ -157,14 +196,36 @@ export declare function reliable<S extends Schema>(schema: S): {
|
|
|
157
196
|
readonly lane: 'reliable';
|
|
158
197
|
readonly payload: S;
|
|
159
198
|
};
|
|
199
|
+
export interface UnreliableOptions {
|
|
200
|
+
readonly fallback: FallbackPolicy;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* The declaration is returned as the literal, not as an optional, because the gate reads it
|
|
204
|
+
* from the map: `fallback?: FallbackPolicy` in a return type is indistinguishable from no
|
|
205
|
+
* declaration at all. One overload per policy keeps that true.
|
|
206
|
+
*/
|
|
160
207
|
export declare function unreliable<T>(): {
|
|
161
208
|
readonly lane: 'unreliable';
|
|
162
209
|
readonly payload: StandardSchemaV1<unknown, T>;
|
|
163
210
|
};
|
|
211
|
+
export declare function unreliable<T>(options: {
|
|
212
|
+
readonly fallback: 'newest';
|
|
213
|
+
}): {
|
|
214
|
+
readonly lane: 'unreliable';
|
|
215
|
+
readonly payload: StandardSchemaV1<unknown, T>;
|
|
216
|
+
readonly fallback: 'newest';
|
|
217
|
+
};
|
|
164
218
|
export declare function unreliable<S extends Schema>(schema: S): {
|
|
165
219
|
readonly lane: 'unreliable';
|
|
166
220
|
readonly payload: S;
|
|
167
221
|
};
|
|
222
|
+
export declare function unreliable<S extends Schema>(schema: S, options: {
|
|
223
|
+
readonly fallback: 'newest';
|
|
224
|
+
}): {
|
|
225
|
+
readonly lane: 'unreliable';
|
|
226
|
+
readonly payload: S;
|
|
227
|
+
readonly fallback: 'newest';
|
|
228
|
+
};
|
|
168
229
|
export declare function rpc<P, R>(): {
|
|
169
230
|
readonly lane: 'reliable';
|
|
170
231
|
readonly payload: StandardSchemaV1<unknown, P>;
|
|
@@ -191,12 +252,15 @@ export interface EventEntry {
|
|
|
191
252
|
readonly name: string;
|
|
192
253
|
readonly id: number;
|
|
193
254
|
readonly lane: Lane;
|
|
255
|
+
readonly fallback: FallbackPolicy | undefined;
|
|
194
256
|
readonly def: EventDef;
|
|
195
257
|
}
|
|
196
258
|
export interface EventTable {
|
|
197
259
|
readonly entries: readonly EventEntry[];
|
|
198
260
|
byName(name: string): EventEntry | undefined;
|
|
199
261
|
byId(id: number): EventEntry | undefined;
|
|
262
|
+
/** Unreliable events that declare no fallback: the runtime half of the gate reads this. */
|
|
263
|
+
undeclared(): readonly string[];
|
|
200
264
|
/** The `[name, id, lane]` triples the handshake carries. PROTOCOL.md §4.3. */
|
|
201
265
|
wire(): readonly [string, number, Lane][];
|
|
202
266
|
}
|
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,UAAU,GAAG,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"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"}
|
package/dist/contract.js
CHANGED
|
@@ -6,8 +6,15 @@ export function defineContract(contract) {
|
|
|
6
6
|
export function reliable(schema) {
|
|
7
7
|
return { lane: 'reliable', payload: schema ?? type$() };
|
|
8
8
|
}
|
|
9
|
-
export function unreliable(
|
|
10
|
-
|
|
9
|
+
export function unreliable(first, options) {
|
|
10
|
+
const isSchema = first !== undefined && '~standard' in first;
|
|
11
|
+
const schema = isSchema ? first : undefined;
|
|
12
|
+
const declared = isSchema ? options : first;
|
|
13
|
+
return {
|
|
14
|
+
lane: 'unreliable',
|
|
15
|
+
payload: schema ?? type$(),
|
|
16
|
+
...(declared === undefined ? {} : { fallback: declared.fallback }),
|
|
17
|
+
};
|
|
11
18
|
}
|
|
12
19
|
export function rpc(payload, returns) {
|
|
13
20
|
return {
|
|
@@ -59,7 +66,7 @@ export async function buildEventTable(contract) {
|
|
|
59
66
|
if (clash !== undefined) {
|
|
60
67
|
throw new TransportError('WT_CONTRACT_MISMATCH', `events '${clash.name}' and '${name}' both hash to id ${id}`, `Set an explicit \`id\` on one of them, for example { ..., id: ${id + 1} }. Do not rename your events.`);
|
|
61
68
|
}
|
|
62
|
-
const entry = { name, id, lane: def.lane, def };
|
|
69
|
+
const entry = { name, id, lane: def.lane, fallback: def.fallback, def };
|
|
63
70
|
entries.push(entry);
|
|
64
71
|
byId.set(id, entry);
|
|
65
72
|
byName.set(name, entry);
|
|
@@ -68,6 +75,9 @@ export async function buildEventTable(contract) {
|
|
|
68
75
|
entries,
|
|
69
76
|
byName: (n) => byName.get(n),
|
|
70
77
|
byId: (i) => byId.get(i),
|
|
78
|
+
undeclared: () => entries
|
|
79
|
+
.filter((e) => e.lane === 'unreliable' && e.fallback === undefined)
|
|
80
|
+
.map((e) => e.name),
|
|
71
81
|
wire: () => entries.map((e) => [e.name, e.id, e.lane]),
|
|
72
82
|
};
|
|
73
83
|
}
|
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":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Every error carries a stable code and a sentence saying what to do about it. */
|
|
2
|
-
export type TransportErrorCode = 'WT_NO_SUPPORT' | 'WT_DATAGRAM_TOO_LARGE' | 'WT_ROOM_NOT_JOINED' | 'WT_SESSION_CLOSED' | 'WT_ABORTED' | 'WT_HANDLER_ERROR' | 'WT_PROTOCOL_ERROR' | 'WT_UNSUPPORTED_CODEC' | 'WT_PAYLOAD_TOO_LARGE' | 'WT_HANDSHAKE_INCOMPLETE' | 'WT_UNKNOWN_EVENT' | 'WT_VALIDATION_FAILED' | 'WT_PROTOCOL_VERSION_MISMATCH' | 'WT_CONTRACT_MISMATCH' | 'WT_HANDSHAKE_TIMEOUT' | 'WT_PEER_TOO_SLOW' | 'WT_TOO_MANY_STREAMS' | 'WT_RELIABILITY_REFUSED' | 'WT_DEV_ONLY' | 'WT_HANDSHAKE_FAILED' | 'WT_CERT_EXPIRED';
|
|
2
|
+
export type TransportErrorCode = 'WT_NO_SUPPORT' | 'WT_DATAGRAM_TOO_LARGE' | 'WT_ROOM_NOT_JOINED' | 'WT_SESSION_CLOSED' | 'WT_ABORTED' | 'WT_HANDLER_ERROR' | 'WT_PROTOCOL_ERROR' | 'WT_UNSUPPORTED_CODEC' | 'WT_PAYLOAD_TOO_LARGE' | 'WT_HANDSHAKE_INCOMPLETE' | 'WT_UNKNOWN_EVENT' | 'WT_VALIDATION_FAILED' | 'WT_PROTOCOL_VERSION_MISMATCH' | 'WT_CONTRACT_MISMATCH' | 'WT_HANDSHAKE_TIMEOUT' | 'WT_PEER_TOO_SLOW' | 'WT_TOO_MANY_STREAMS' | 'WT_RELIABILITY_REFUSED' | 'WT_DEV_ONLY' | 'WT_HANDSHAKE_FAILED' | 'WT_UDP_UNREACHABLE' | 'WT_LANE_UNAVAILABLE' | 'WT_CERT_EXPIRED';
|
|
3
3
|
export declare class TransportError extends Error {
|
|
4
4
|
readonly code: TransportErrorCode;
|
|
5
5
|
readonly remedy: string;
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,MAAM,kBAAkB,GAC1B,eAAe,GACf,uBAAuB,GACvB,oBAAoB,GACpB,mBAAmB,GACnB,YAAY,GACZ,kBAAkB,GAClB,mBAAmB,GACnB,sBAAsB,GACtB,sBAAsB,GACtB,yBAAyB,GACzB,kBAAkB,GAClB,sBAAsB,GACtB,8BAA8B,GAC9B,sBAAsB,GACtB,sBAAsB,GACtB,kBAAkB,GAClB,qBAAqB,GACrB,wBAAwB,GACxB,aAAa,GACb,qBAAqB,GACrB,iBAAiB,CAAA;AAErB,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IAEvB;;;;OAIG;IACH,YAAY,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAKrF;CACF"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,MAAM,kBAAkB,GAC1B,eAAe,GACf,uBAAuB,GACvB,oBAAoB,GACpB,mBAAmB,GACnB,YAAY,GACZ,kBAAkB,GAClB,mBAAmB,GACnB,sBAAsB,GACtB,sBAAsB,GACtB,yBAAyB,GACzB,kBAAkB,GAClB,sBAAsB,GACtB,8BAA8B,GAC9B,sBAAsB,GACtB,sBAAsB,GACtB,kBAAkB,GAClB,qBAAqB,GACrB,wBAAwB,GACxB,aAAa,GACb,qBAAqB,GACrB,oBAAoB,GACpB,qBAAqB,GACrB,iBAAiB,CAAA;AAErB,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IAEvB;;;;OAIG;IACH,YAAY,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAKrF;CACF"}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AA0BA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAoB;IACxB,MAAM,CAAQ;IAEvB;;;;OAIG;IACH,YAAY,IAAwB,EAAE,OAAe,EAAE,MAAc,EAAE,KAAe;QACpF,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,MAAM,MAAM,EAAE,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QACrF,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
export { type Adapter, type BroadcastOptions, type Frame as AdapterFrame, MemoryAdapter, type MemoryBus, memoryBus, type PeerId, type RemoteEnvelope, } from './adapter.ts';
|
|
2
|
-
export { Client, type ClientOptions, type ClientState, type Status } from './client.ts';
|
|
3
|
-
export { type AnyMap, type CallableOf, type Contract, defineContract, type EventDef, type EventShape, type Infer, type Lane, type MapOf, type Register, type Registered, reliable, rpc, type Schema, type StreamableOf, streaming, type$, unreliable, } from './contract.ts';
|
|
2
|
+
export { Client, type ClientOptions, type ClientState, type FallbackClient, type FallbackReason, type NativeLanes, type Status, withFallback, } from './client.ts';
|
|
3
|
+
export { type AnyMap, type CallableOf, type Contract, defineContract, type EventDef, type EventShape, type FallbackPolicy, type FallbackReady, type Infer, type Lane, type MapOf, type Register, type Registered, reliable, rpc, type Schema, type StreamableOf, streaming, type$, type UnreliableOptions, unreliable, } from './contract.ts';
|
|
4
4
|
export { maxDatagramPayload } from './datagram.ts';
|
|
5
5
|
export { TransportError, type TransportErrorCode } from './errors.ts';
|
|
6
6
|
export { encodeFrame, type Frame, FrameDecoder, maxPayloadFor } from './framer.ts';
|
|
7
7
|
export { CloseCode, Codec, DATAGRAM_CONSERVATIVE_PAYLOAD_MAX, DATAGRAM_HEADER_BYTES, EVENT_ID_NOT_APPLICABLE, FrameType, MAX_CALL_PAYLOAD_BYTES, MAX_EMIT_PAYLOAD_BYTES, PROTOCOL_VERSION, ResetCode, STREAM_FRAME_OVERHEAD_BYTES, } from './protocol.ts';
|
|
8
8
|
export { type ConnectionSource, createServer, type ListenOptions, type RoomTarget, Server, type ServerOptions, type ServerPeer, } from './server.ts';
|
|
9
9
|
export type { SessionStats, StreamResult } from './session.ts';
|
|
10
|
+
export type { Transport } from './transport/types.ts';
|
|
10
11
|
/**
|
|
11
12
|
* Hand-maintained and asserted against `package.json` by `index.test.ts`, because
|
|
12
13
|
* `isolatedDeclarations` forbids inferring it from an import and a version that drifts from
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,KAAK,KAAK,IAAI,YAAY,EAC1B,aAAa,EACb,KAAK,SAAS,EACd,SAAS,EACT,KAAK,MAAM,EAKX,KAAK,cAAc,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,KAAK,KAAK,IAAI,YAAY,EAC1B,aAAa,EACb,KAAK,SAAS,EACd,SAAS,EACT,KAAK,MAAM,EAKX,KAAK,cAAc,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,MAAM,EACN,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,YAAY,GACb,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,KAAK,EACV,KAAK,IAAI,EACT,KAAK,KAAK,EACV,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,QAAQ,EACR,GAAG,EACH,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,SAAS,EACT,KAAK,EACL,KAAK,iBAAiB,EACtB,UAAU,GACX,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,KAAK,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAClF,OAAO,EACL,SAAS,EACT,KAAK,EACL,iCAAiC,EACjC,qBAAqB,EACrB,uBAAuB,EACvB,SAAS,EACT,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,SAAS,EACT,2BAA2B,GAC5B,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,KAAK,gBAAgB,EACrB,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,MAAM,EACN,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC9D,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAErD;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,EAAE,MAAgB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { MemoryAdapter, memoryBus, } from './adapter.js';
|
|
2
|
-
export { Client } from './client.js';
|
|
2
|
+
export { Client, withFallback, } from './client.js';
|
|
3
3
|
export { defineContract, reliable, rpc, streaming, type$, unreliable, } from './contract.js';
|
|
4
4
|
export { maxDatagramPayload } from './datagram.js';
|
|
5
5
|
export { TransportError } from './errors.js';
|
|
@@ -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.8.0';
|
|
18
18
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,aAAa,EAEb,SAAS,GAOV,MAAM,cAAc,CAAA;AACrB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,aAAa,EAEb,SAAS,GAOV,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,MAAM,EAON,YAAY,GACb,MAAM,aAAa,CAAA;AACpB,OAAO,EAIL,cAAc,EAUd,QAAQ,EACR,GAAG,EAGH,SAAS,EACT,KAAK,EAEL,UAAU,GACX,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,cAAc,EAA2B,MAAM,aAAa,CAAA;AACrE,OAAO,EAAE,WAAW,EAAc,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAClF,OAAO,EACL,SAAS,EACT,KAAK,EACL,iCAAiC,EACjC,qBAAqB,EACrB,uBAAuB,EACvB,SAAS,EACT,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,SAAS,EACT,2BAA2B,GAC5B,MAAM,eAAe,CAAA;AACtB,OAAO,EAEL,YAAY,EAGZ,MAAM,GAGP,MAAM,aAAa,CAAA;AAIpB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,OAAO,GAAW,OAAO,CAAA"}
|
package/dist/protocol.d.ts
CHANGED
|
@@ -7,6 +7,23 @@
|
|
|
7
7
|
*/
|
|
8
8
|
/** PROTOCOL.md §4.2 - Stage 0 requires exact equality and refuses otherwise. */
|
|
9
9
|
export declare const PROTOCOL_VERSION = 0;
|
|
10
|
+
/**
|
|
11
|
+
* PROTOCOL.md §3.3, the emit lane over WebSocket.
|
|
12
|
+
*
|
|
13
|
+
* Unreliable frames ride the emit lane there, wrapped, and only while that lane has room:
|
|
14
|
+
* above this many queued frames they stay in the datagram ring, where overflow and TTL drop
|
|
15
|
+
* them, so a burst on the unreliable lane can never disconnect a peer for being slow on the
|
|
16
|
+
* reliable one. Absolute, not a proportion of `EMIT_QUEUE_MAX`.
|
|
17
|
+
*/
|
|
18
|
+
export declare const FALLBACK_UNRELIABLE_LOW_WATER = 32;
|
|
19
|
+
/**
|
|
20
|
+
* PROTOCOL.md §3.3. RFC 6455 reserves 1000 to 2999 and gives applications 4000 to 4999, so a
|
|
21
|
+
* session close code is carried as itself plus this offset, and `WT_NO_ERROR` as the normal
|
|
22
|
+
* closure code. A close reason on a WebSocket is at most 123 bytes.
|
|
23
|
+
*/
|
|
24
|
+
export declare const WS_CLOSE_NORMAL = 1000;
|
|
25
|
+
export declare const WS_CLOSE_OFFSET = 3000;
|
|
26
|
+
export declare const WS_CLOSE_REASON_MAX_BYTES = 123;
|
|
10
27
|
/** PROTOCOL.md §5.2 */
|
|
11
28
|
export declare const FrameType: {
|
|
12
29
|
readonly HANDSHAKE: 1;
|
|
@@ -17,6 +34,8 @@ export declare const FrameType: {
|
|
|
17
34
|
readonly JOIN: 6;
|
|
18
35
|
readonly LEAVE: 7;
|
|
19
36
|
readonly CALL_CREDIT: 8;
|
|
37
|
+
/** §3.3: a §7.1 datagram carried on the emit lane. Valid on the WebSocket mapping only. */
|
|
38
|
+
readonly DATAGRAM: 9;
|
|
20
39
|
};
|
|
21
40
|
export type FrameType = (typeof FrameType)[keyof typeof FrameType];
|
|
22
41
|
export declare function isFrameType(v: number): v is FrameType;
|
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;aACX,WAAW,EAAE,CAAI;
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|