transport-io 0.7.3 → 0.8.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.
Files changed (72) hide show
  1. package/README.md +5 -2
  2. package/dist/client.d.ts +35 -2
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +94 -6
  5. package/dist/client.js.map +1 -1
  6. package/dist/contract.d.ts +64 -0
  7. package/dist/contract.d.ts.map +1 -1
  8. package/dist/contract.js +13 -3
  9. package/dist/contract.js.map +1 -1
  10. package/dist/errors.d.ts +1 -1
  11. package/dist/errors.d.ts.map +1 -1
  12. package/dist/errors.js.map +1 -1
  13. package/dist/index.d.ts +3 -2
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +2 -2
  16. package/dist/index.js.map +1 -1
  17. package/dist/protocol.d.ts +19 -0
  18. package/dist/protocol.d.ts.map +1 -1
  19. package/dist/protocol.js +19 -0
  20. package/dist/protocol.js.map +1 -1
  21. package/dist/queue.d.ts +8 -2
  22. package/dist/queue.d.ts.map +1 -1
  23. package/dist/queue.js +20 -7
  24. package/dist/queue.js.map +1 -1
  25. package/dist/server.d.ts +13 -2
  26. package/dist/server.d.ts.map +1 -1
  27. package/dist/server.js +19 -3
  28. package/dist/server.js.map +1 -1
  29. package/dist/session.d.ts.map +1 -1
  30. package/dist/session.js +49 -3
  31. package/dist/session.js.map +1 -1
  32. package/dist/transport/browser.d.ts +6 -0
  33. package/dist/transport/browser.d.ts.map +1 -1
  34. package/dist/transport/browser.js +10 -8
  35. package/dist/transport/browser.js.map +1 -1
  36. package/dist/transport/dev.d.ts.map +1 -1
  37. package/dist/transport/dev.js +3 -0
  38. package/dist/transport/dev.js.map +1 -1
  39. package/dist/transport/fails.node.d.ts +2 -0
  40. package/dist/transport/fails.node.d.ts.map +1 -1
  41. package/dist/transport/fails.node.js +10 -1
  42. package/dist/transport/fails.node.js.map +1 -1
  43. package/dist/transport/loopback.d.ts +7 -2
  44. package/dist/transport/loopback.d.ts.map +1 -1
  45. package/dist/transport/loopback.js +14 -4
  46. package/dist/transport/loopback.js.map +1 -1
  47. package/dist/transport/moq.node.d.ts.map +1 -1
  48. package/dist/transport/moq.node.js +3 -0
  49. package/dist/transport/moq.node.js.map +1 -1
  50. package/dist/transport/parity-suite.d.ts +5 -0
  51. package/dist/transport/parity-suite.d.ts.map +1 -1
  52. package/dist/transport/parity-suite.js +22 -13
  53. package/dist/transport/parity-suite.js.map +1 -1
  54. package/dist/transport/probe.d.ts +43 -0
  55. package/dist/transport/probe.d.ts.map +1 -0
  56. package/dist/transport/probe.js +82 -0
  57. package/dist/transport/probe.js.map +1 -0
  58. package/dist/transport/types.d.ts +9 -0
  59. package/dist/transport/types.d.ts.map +1 -1
  60. package/dist/transport/unreliable.d.ts +2 -1
  61. package/dist/transport/unreliable.d.ts.map +1 -1
  62. package/dist/transport/unreliable.js +3 -0
  63. package/dist/transport/unreliable.js.map +1 -1
  64. package/dist/transport/websocket.d.ts +63 -0
  65. package/dist/transport/websocket.d.ts.map +1 -0
  66. package/dist/transport/websocket.js +203 -0
  67. package/dist/transport/websocket.js.map +1 -0
  68. package/dist/transport/websocket.node.d.ts +16 -0
  69. package/dist/transport/websocket.node.d.ts.map +1 -0
  70. package/dist/transport/websocket.node.js +76 -0
  71. package/dist/transport/websocket.node.js.map +1 -0
  72. package/package.json +11 -2
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, no fallback.
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"
@@ -21,7 +21,10 @@ generator's `finally` runs.
21
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 only.** No WebSocket fallback. An unsupported runtime gets `WT_NO_SUPPORT`.
24
+ - **WebTransport first.** The WebSocket fallback carries emits only, where the contract
25
+ declares it; calls and streams need WebTransport. The
26
+ [fallback guide](https://transport-io.github.io/transport-io/guides/fallback/) has it end
27
+ to end.
25
28
  - **Chrome and Firefox.** Safari cannot talk to a quiche-backed server and is unsupported.
26
29
  - **The server needs a separate native install**, and its Linux prebuild needs glibc 2.38 -
27
30
  no default Node `-slim` image has it, and Alpine has no prebuild at all.
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
24
+ * WebTransport handshake failed and the WebSocket connected. `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 when the runtime
93
+ * has no WebTransport, and when the WebTransport handshake fails and the WebSocket connects,
94
+ * and 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
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
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({ status: 'closed', sessionId: null, rooms: [] });
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.#opts.connect();
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
- if (conn.reliability() === 'reliable-only') {
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({ status: 'connected', sessionId: `s-${session.origin}` });
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({ status: 'closed', sessionId: null, rooms: [] });
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,39 @@ 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: the fallback carries the session. A
214
+ * WebTransport handshake that failed: the fallback is dialled, because a connector is a
215
+ * closure and the WebSocket handshake is the one fact this client can obtain about whether
216
+ * the server is up over TCP (D125). If that fails too, the WebTransport error is the one
217
+ * thrown: it names the primary transport, and its message says what its probe found. Every
218
+ * other failure is thrown as it is, because a certificate past its validity or a dev
219
+ * connector outside the dev command is configuration, not a path to route around.
220
+ */
221
+ async #open() {
222
+ const fallback = fallbacks.get(this);
223
+ try {
224
+ return { conn: await this.#opts.connect(), fallbackReason: null };
225
+ }
226
+ catch (e) {
227
+ if (fallback === undefined)
228
+ throw e;
229
+ const reason = fallbackReasonFor(e);
230
+ if (reason === undefined)
231
+ throw e;
232
+ if (reason === 'unsupported')
233
+ return { conn: await fallback(), fallbackReason: reason };
234
+ let conn;
235
+ try {
236
+ conn = await fallback();
237
+ }
238
+ catch {
239
+ throw e;
240
+ }
241
+ return { conn, fallbackReason: reason };
242
+ }
243
+ }
190
244
  #requireSession() {
191
245
  if (this.#session === undefined) {
192
246
  throw new TransportError('WT_SESSION_CLOSED', 'not connected', 'Await connect() before emitting.');
@@ -199,4 +253,38 @@ export class Client {
199
253
  l();
200
254
  }
201
255
  }
256
+ /**
257
+ * The fallback connector a client was built with, keyed by the client and readable only from
258
+ * this module. `ClientOptions` deliberately has no `fallback` field: putting one there would
259
+ * let `new Client(...)` take a fallback without passing the gate below.
260
+ */
261
+ const fallbacks = new WeakMap();
262
+ function fallbackReasonFor(e) {
263
+ if (!(e instanceof TransportError))
264
+ return undefined;
265
+ if (e.code === 'WT_NO_SUPPORT')
266
+ return 'unsupported';
267
+ if (e.code === 'WT_UDP_UNREACHABLE' || e.code === 'WT_HANDSHAKE_FAILED')
268
+ return 'unreachable';
269
+ return undefined;
270
+ }
271
+ /**
272
+ * A client with a second transport behind the first (D121).
273
+ *
274
+ * The native connector is tried first, every time. The fallback is used when the runtime
275
+ * has no WebTransport, and when the WebTransport handshake fails and the WebSocket connects,
276
+ * and the snapshot says which. The type argument is the gate: `FallbackReady<M>` is `unknown`
277
+ * when every unreliable event in the map declares a fallback, and otherwise a required
278
+ * property naming the event that has not, so this call fails to compile rather than an
279
+ * emit failing in production.
280
+ */
281
+ export function withFallback(options) {
282
+ const client = new Client(options);
283
+ fallbacks.set(client, options.fallback);
284
+ Object.defineProperty(client, 'native', {
285
+ enumerable: true,
286
+ get: () => client.getSnapshot().transport === 'webtransport' ? client : null,
287
+ });
288
+ return client;
289
+ }
202
290
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"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"}
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(schema) {
10
- return { lane: 'unreliable', payload: schema ?? type$() };
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"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"}
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;
@@ -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"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAwBA,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"}
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
@@ -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,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAA;AACvF,OAAO,EACL,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,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,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;AAE9D;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,EAAE,MAAgB,CAAA"}
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.7.3';
17
+ export const VERSION = '0.8.1';
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,EAAE,MAAM,EAAqD,MAAM,aAAa,CAAA;AACvF,OAAO,EAIL,cAAc,EAQd,QAAQ,EACR,GAAG,EAGH,SAAS,EACT,KAAK,EACL,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;AAGpB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,OAAO,GAAW,OAAO,CAAA"}
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"}
@@ -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;
@@ -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;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"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}