transport-io 0.9.0 → 0.11.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 +2 -1
- package/dist/cli/dev-server.node.js +9 -3
- package/dist/cli/dev-server.node.js.map +1 -1
- package/dist/cli/main.node.js +15 -6
- package/dist/cli/main.node.js.map +1 -1
- package/dist/client.d.ts +36 -8
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +177 -86
- package/dist/client.js.map +1 -1
- package/dist/codec.d.ts +15 -0
- package/dist/codec.d.ts.map +1 -1
- package/dist/codec.js +35 -1
- package/dist/codec.js.map +1 -1
- package/dist/contract.d.ts +57 -1
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +28 -0
- package/dist/contract.js.map +1 -1
- package/dist/datagram.d.ts +3 -0
- package/dist/datagram.d.ts.map +1 -1
- package/dist/datagram.js +4 -3
- package/dist/datagram.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/framer.js +2 -2
- package/dist/framer.js.map +1 -1
- package/dist/hub.d.ts.map +1 -1
- package/dist/hub.js +8 -3
- package/dist/hub.js.map +1 -1
- package/dist/index.d.ts +3 -3
- 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 +3 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +3 -1
- package/dist/protocol.js.map +1 -1
- package/dist/server.d.ts +42 -19
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +25 -1
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +5 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +66 -26
- package/dist/session.js.map +1 -1
- package/dist/transport/fails.node.d.ts +16 -6
- package/dist/transport/fails.node.d.ts.map +1 -1
- package/dist/transport/fails.node.js +63 -5
- package/dist/transport/fails.node.js.map +1 -1
- package/dist/transport/port.node.d.ts +10 -0
- package/dist/transport/port.node.d.ts.map +1 -0
- package/dist/transport/port.node.js +63 -0
- package/dist/transport/port.node.js.map +1 -0
- package/dist/transport/types.d.ts +19 -0
- package/dist/transport/types.d.ts.map +1 -1
- package/dist/transport/websocket-connection.d.ts +3 -0
- package/dist/transport/websocket-connection.d.ts.map +1 -1
- package/dist/transport/websocket-connection.js +2 -0
- package/dist/transport/websocket-connection.js.map +1 -1
- package/dist/transport/websocket.node.d.ts +13 -5
- package/dist/transport/websocket.node.d.ts.map +1 -1
- package/dist/transport/websocket.node.js +48 -4
- package/dist/transport/websocket.node.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -25,7 +25,8 @@ before you start.** It lists what this library will not do. Full documentation i
|
|
|
25
25
|
declares it; calls and streams need WebTransport. The
|
|
26
26
|
[fallback guide](https://transport-io.github.io/transport-io/guides/fallback/) has it end
|
|
27
27
|
to end.
|
|
28
|
-
- **Chrome and Firefox.** Safari cannot talk to a quiche-backed server
|
|
28
|
+
- **Chrome and Firefox over WebTransport.** Safari cannot talk to a quiche-backed server;
|
|
29
|
+
the fallback reaches it after 5 seconds.
|
|
29
30
|
- **The server needs a separate native install**, and its Linux prebuild needs glibc 2.38 -
|
|
30
31
|
no default Node `-slim` image has it, and Alpine has no prebuild at all.
|
|
31
32
|
That package, the fourteen-day ECDSA rule for a pinned development certificate, and the
|
|
@@ -18,6 +18,7 @@ import { existsSync, readFileSync, statSync } from 'node:fs';
|
|
|
18
18
|
import { createServer } from 'node:http';
|
|
19
19
|
import { extname, join, normalize, resolve } from 'node:path';
|
|
20
20
|
import { DEV_ENDPOINT } from '../transport/dev.js';
|
|
21
|
+
import { asPortInUse, assertTcpPortFree } from '../transport/port.node.js';
|
|
21
22
|
const MIME = {
|
|
22
23
|
'.html': 'text/html; charset=utf-8',
|
|
23
24
|
'.js': 'text/javascript; charset=utf-8',
|
|
@@ -58,7 +59,12 @@ function sendFile(res, file) {
|
|
|
58
59
|
res.end(readFileSync(file));
|
|
59
60
|
return true;
|
|
60
61
|
}
|
|
61
|
-
|
|
62
|
+
/** The address the page server binds, which is the one the command prints. */
|
|
63
|
+
export const DEV_HOST = '127.0.0.1';
|
|
64
|
+
export async function startDevServer(opts) {
|
|
65
|
+
// Binding `127.0.0.1` succeeds beside a server on `::`, and `localhost` may resolve to
|
|
66
|
+
// `::1`, which is that other server. Both loopback addresses are probed first.
|
|
67
|
+
await assertTcpPortFree(opts.port);
|
|
62
68
|
const server = createServer((req, res) => {
|
|
63
69
|
const path = (req.url ?? '/').split('?')[0] ?? '/';
|
|
64
70
|
if (path === DEV_ENDPOINT) {
|
|
@@ -91,8 +97,8 @@ export function startDevServer(opts) {
|
|
|
91
97
|
res.writeHead(404).end('not found');
|
|
92
98
|
});
|
|
93
99
|
return new Promise((ok, fail) => {
|
|
94
|
-
server.once('error', fail);
|
|
95
|
-
server.listen(opts.port,
|
|
100
|
+
server.once('error', (e) => fail(asPortInUse(e, `TCP port ${opts.port}`)));
|
|
101
|
+
server.listen(opts.port, DEV_HOST, () => ok(server));
|
|
96
102
|
});
|
|
97
103
|
}
|
|
98
104
|
//# sourceMappingURL=dev-server.node.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-server.node.js","sourceRoot":"","sources":["../../src/cli/dev-server.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAkD,MAAM,WAAW,CAAA;AACxF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"dev-server.node.js","sourceRoot":"","sources":["../../src/cli/dev-server.node.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/main.node.js
CHANGED
|
@@ -18,8 +18,9 @@ import { spawn } from 'node:child_process';
|
|
|
18
18
|
import { existsSync, realpathSync } from 'node:fs';
|
|
19
19
|
import { dirname, resolve } from 'node:path';
|
|
20
20
|
import { fileURLToPath } from 'node:url';
|
|
21
|
+
import { DEV_ENDPOINT } from '../transport/dev.js';
|
|
21
22
|
import { daysLeft, ensureCertificate } from './certificate.node.js';
|
|
22
|
-
import { startDevServer } from './dev-server.node.js';
|
|
23
|
+
import { DEV_HOST, startDevServer } from './dev-server.node.js';
|
|
23
24
|
const DEFAULT_PORT = 3000;
|
|
24
25
|
const DEFAULT_WT_PORT = 4433;
|
|
25
26
|
export function parseArgs(input) {
|
|
@@ -121,17 +122,25 @@ async function main() {
|
|
|
121
122
|
console.log('');
|
|
122
123
|
console.log('transport-io dev');
|
|
123
124
|
console.log('');
|
|
124
|
-
|
|
125
|
+
// The address it binds, not `localhost`: a browser may resolve that to `::1`.
|
|
126
|
+
const origin = `http://${DEV_HOST}:${args.port}`;
|
|
127
|
+
if (args.demo || staticDir !== undefined)
|
|
128
|
+
console.log(` page ${origin}`);
|
|
129
|
+
else
|
|
130
|
+
console.log(` manifest ${origin}${DEV_ENDPOINT}`);
|
|
125
131
|
console.log(` webtransport ${wtUrl}`);
|
|
126
132
|
console.log(` certificate valid ${daysLeft(cert.validTo)}d sha-256 ${short}…`);
|
|
127
133
|
if (cert.renewed) {
|
|
128
134
|
console.log(' certificate renewed, so reload any tab you already had open');
|
|
129
135
|
}
|
|
130
136
|
console.log('');
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
137
|
+
if (args.demo || staticDir !== undefined) {
|
|
138
|
+
console.log(' Open the page in two tabs. Chrome or Firefox; Safari cannot connect.');
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
console.log(' No static directory, so no page is served here. Your own dev server, Vite for');
|
|
142
|
+
console.log(' example, serves the page and proxies the manifest path above to this port.');
|
|
143
|
+
console.log(' Pass --static <dir> to serve a built page from here instead.');
|
|
135
144
|
}
|
|
136
145
|
console.log('');
|
|
137
146
|
if (!args.demo && args.entry !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.node.js","sourceRoot":"","sources":["../../src/cli/main.node.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"main.node.js","sourceRoot":"","sources":["../../src/cli/main.node.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE/D,MAAM,YAAY,GAAG,IAAI,CAAA;AACzB,MAAM,eAAe,GAAG,IAAI,CAAA;AAW5B,MAAM,UAAU,SAAS,CAAC,KAAwB;IAChD,yFAAyF;IACzF,wFAAwF;IACxF,4EAA4E;IAC5E,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACxD,IAAI,KAAyB,CAAA;IAC7B,IAAI,IAAI,GAAG,KAAK,CAAA;IAChB,IAAI,IAAI,GAAG,YAAY,CAAA;IACvB,IAAI,MAAM,GAAG,eAAe,CAAA;IAC5B,IAAI,SAA6B,CAAA;IACjC,IAAI,IAAI,GAAG,KAAK,CAAA;IAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAW,CAAA;QAC3B,IAAI,CAAC,KAAK,QAAQ;YAAE,IAAI,GAAG,IAAI,CAAA;aAC1B,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;YAAE,IAAI,GAAG,IAAI,CAAA;aAC7C,IAAI,CAAC,KAAK,QAAQ;YAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;aAC5C,IAAI,CAAC,KAAK,WAAW;YAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;aACjD,IAAI,CAAC,KAAK,UAAU;YAAE,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;aAC3C,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,KAAK,KAAK,CAAC,CAAA;IAC1C,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;AACvD,CAAC;AAED,MAAM,KAAK,GAAG;;;;;;;gEAOkD,YAAY;gEACZ,eAAe;;;;;;;;;CAS9E,CAAA;AAED,SAAS,UAAU,CAAC,QAA4B;IAC9C,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAA;IACpD,KAAK,MAAM,SAAS,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;QAC/B,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAA;IACnC,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAE7C,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC1F,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3E,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,KAAK,CAAC,CAAA;QACjD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAClB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACjC,CAAC;IAED,0FAA0F;IAC1F,wDAAwD;IACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAA;IAC5D,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAExC,MAAM,KAAK,GAAG,qBAAqB,IAAI,CAAC,MAAM,GAAG,CAAA;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACpD,oEAAoE;IACpE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAEnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACpE,IAAI,QAA4B,CAAA;IAChC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAA;QACrE,QAAQ,GAAG,SAAS,CAAA;QACpB,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAA;QAC7C,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAA;QAC/C,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC1D,MAAM,eAAe,EAAE,CAAA;IACzB,CAAC;IAED,MAAM,cAAc,CAAC;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;QACjD,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QAC1D,OAAO;QACP,QAAQ,EAAE;YACR,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,GAAG,EAAE,KAAK;YACV,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;SACtC;KACF,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;IAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,8EAA8E;IAC9E,MAAM,MAAM,GAAG,UAAU,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAA;IAChD,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAA;;QAC7E,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,GAAG,YAAY,EAAE,CAAC,CAAA;IAC5D,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,yBAAyB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,KAAK,GAAG,CAAC,CAAA;IAClF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAA;IAC9E,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAA;IACvF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,iFAAiF,CAClF,CAAA;QACD,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAA;QAC3F,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAA;IAC/E,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAEf,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAClD,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,qBAAqB,EAAE,IAAI,CAAC,IAAI;gBAChC,oBAAoB,EAAE,IAAI,CAAC,OAAO;gBAClC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;aAC9C;SACF,CAAC,CAAA;QACF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;IACrD,CAAC;SAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAA;QACnF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,OAAO;IACd,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC7B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IACrC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,CAAC,KAAK,YAAY,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,IAAI,OAAO,EAAE,EAAE,CAAC;IACd,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;QAC1B,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
package/dist/client.d.ts
CHANGED
|
@@ -5,12 +5,17 @@
|
|
|
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 FallbackReady, type Registered, type StreamableOf } from './contract.ts';
|
|
8
|
+
import { type AnyMap, type CallableOf, type Contract, type FallbackReady, type ReceivedBy, type Registered, type SentBy, type StreamableOf } from './contract.ts';
|
|
9
9
|
import { TransportError } from './errors.ts';
|
|
10
10
|
import { type SessionStats, type StreamResult } from './session.ts';
|
|
11
11
|
import type { Connection, Transport } from './transport/types.ts';
|
|
12
12
|
export type Status = 'idle' | 'connecting' | 'connected' | 'closing' | 'closed';
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Why the current session is on a fallback transport rather than on WebTransport.
|
|
15
|
+
* `unsupported`: the runtime has no WebTransport it can use against this server, either none
|
|
16
|
+
* at all or one that connects and then never sends, which is Safari (D128). `unreachable`:
|
|
17
|
+
* the WebTransport handshake failed and the WebSocket connected.
|
|
18
|
+
*/
|
|
14
19
|
export type FallbackReason = 'unsupported' | 'unreachable';
|
|
15
20
|
export interface ClientState {
|
|
16
21
|
readonly status: Status;
|
|
@@ -20,11 +25,20 @@ export interface ClientState {
|
|
|
20
25
|
/** What carries the current session. `null` until connected. */
|
|
21
26
|
readonly transport: Transport | null;
|
|
22
27
|
/**
|
|
23
|
-
* Why the current session is a fallback: the runtime has no WebTransport, or
|
|
24
|
-
* WebTransport handshake failed and the WebSocket connected. `null` on a native session.
|
|
28
|
+
* Why the current session is a fallback: the runtime has no WebTransport it can use, or
|
|
29
|
+
* the WebTransport handshake failed and the WebSocket connected. `null` on a native session.
|
|
25
30
|
*/
|
|
26
31
|
readonly fallbackReason: FallbackReason | null;
|
|
27
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* The waits between attempts, when a client reconnects on its own. The wait after a session
|
|
35
|
+
* closes is `minMs`, doubled on each failed attempt up to `maxMs`, and randomised between
|
|
36
|
+
* half of that and all of it, so a fleet that lost one server does not return as one wave.
|
|
37
|
+
*/
|
|
38
|
+
export interface ReconnectOptions {
|
|
39
|
+
readonly minMs: number;
|
|
40
|
+
readonly maxMs: number;
|
|
41
|
+
}
|
|
28
42
|
export interface ClientOptions<C extends Contract = Contract> {
|
|
29
43
|
/**
|
|
30
44
|
* How long to wait for the peer's handshake before giving up. The deadline covers
|
|
@@ -32,6 +46,13 @@ export interface ClientOptions<C extends Contract = Contract> {
|
|
|
32
46
|
* fails here rather than hanging.
|
|
33
47
|
*/
|
|
34
48
|
readonly handshakeDeadlineMs?: number;
|
|
49
|
+
/**
|
|
50
|
+
* Reconnect on its own after a connected session closes. Off unless given. Every attempt
|
|
51
|
+
* starts from the native connector again, and every session it produces runs `onSession`.
|
|
52
|
+
* The first `connect()` is not retried: it resolves or rejects as it always did, and the
|
|
53
|
+
* retrying starts once a session has been had. `disconnect()` stops it.
|
|
54
|
+
*/
|
|
55
|
+
readonly reconnect?: ReconnectOptions;
|
|
35
56
|
readonly contract: C;
|
|
36
57
|
/** Supplied by the transport seam, so this class never imports a transport. */
|
|
37
58
|
readonly connect: () => Promise<Connection>;
|
|
@@ -46,6 +67,12 @@ export interface ClientOptions<C extends Contract = Contract> {
|
|
|
46
67
|
export declare class Client<M extends AnyMap = Registered> {
|
|
47
68
|
#private;
|
|
48
69
|
constructor(opts: ClientOptions);
|
|
70
|
+
/**
|
|
71
|
+
* Runs once for every session this client gets, with the snapshot as it connected: the
|
|
72
|
+
* first, and each one a reconnect produces. A reconnect is a new session (D4), so this is
|
|
73
|
+
* where rooms are rejoined and what was missed is fetched. Returns the unsubscribe.
|
|
74
|
+
*/
|
|
75
|
+
onSession(cb: (state: ClientState) => void): () => void;
|
|
49
76
|
/**
|
|
50
77
|
* Referentially stable until something actually changes. Returning a freshly built
|
|
51
78
|
* object on each call makes useSyncExternalStore re-render forever, which is the single
|
|
@@ -58,8 +85,8 @@ export declare class Client<M extends AnyMap = Registered> {
|
|
|
58
85
|
connect(): Promise<void>;
|
|
59
86
|
disconnect(): void;
|
|
60
87
|
/** The lane comes from the contract, never from this call site. */
|
|
61
|
-
emit<K extends
|
|
62
|
-
on<K extends
|
|
88
|
+
emit<K extends SentBy<M, 'client'> & string>(event: K, payload: M[K]['payload']): void;
|
|
89
|
+
on<K extends ReceivedBy<M, 'client'> & string>(event: K, handler: (payload: M[K]['payload']) => void): () => void;
|
|
63
90
|
/** Available only on events declaring `returns`. Aborting resets the QUIC stream. */
|
|
64
91
|
call<K extends CallableOf<M> & string>(event: K, payload: M[K]['payload'], options?: {
|
|
65
92
|
readonly signal?: AbortSignal;
|
|
@@ -90,8 +117,9 @@ export type FallbackClient<M extends AnyMap> = Omit<Client<M>, 'call' | 'stream'
|
|
|
90
117
|
* A client with a second transport behind the first (D121).
|
|
91
118
|
*
|
|
92
119
|
* The native connector is tried first, every time. The fallback is used when the runtime
|
|
93
|
-
* has no WebTransport,
|
|
94
|
-
*
|
|
120
|
+
* has no WebTransport, when the WebTransport handshake fails and the WebSocket connects, and
|
|
121
|
+
* when the WebTransport session connects and then sends nothing before the application
|
|
122
|
+
* handshake (D128); the snapshot says which. The type argument is the gate: `FallbackReady<M>` is `unknown`
|
|
95
123
|
* when every unreliable event in the map declares a fallback, and otherwise a required
|
|
96
124
|
* property naming the event that has not, so this call fails to compile rather than an
|
|
97
125
|
* emit failing in production.
|
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,aAAa,EAClB,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;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -9,6 +9,7 @@ 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';
|
|
12
|
+
import { OwnedTimers } from './timers.js';
|
|
12
13
|
export class Client {
|
|
13
14
|
#opts;
|
|
14
15
|
#listeners = new Set();
|
|
@@ -34,9 +35,24 @@ export class Client {
|
|
|
34
35
|
});
|
|
35
36
|
#refs = 0;
|
|
36
37
|
#connecting;
|
|
38
|
+
#timers = new OwnedTimers();
|
|
39
|
+
/** Failed attempts since the last connected session, which sets the next wait. */
|
|
40
|
+
#attempt = 0;
|
|
41
|
+
#onSession = new Set();
|
|
37
42
|
constructor(opts) {
|
|
38
43
|
this.#opts = opts;
|
|
39
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Runs once for every session this client gets, with the snapshot as it connected: the
|
|
47
|
+
* first, and each one a reconnect produces. A reconnect is a new session (D4), so this is
|
|
48
|
+
* where rooms are rejoined and what was missed is fetched. Returns the unsubscribe.
|
|
49
|
+
*/
|
|
50
|
+
onSession(cb) {
|
|
51
|
+
this.#onSession.add(cb);
|
|
52
|
+
return () => {
|
|
53
|
+
this.#onSession.delete(cb);
|
|
54
|
+
};
|
|
55
|
+
}
|
|
40
56
|
/**
|
|
41
57
|
* Referentially stable until something actually changes. Returning a freshly built
|
|
42
58
|
* object on each call makes useSyncExternalStore re-render forever, which is the single
|
|
@@ -70,6 +86,9 @@ export class Client {
|
|
|
70
86
|
if (this.#refs > 0)
|
|
71
87
|
return;
|
|
72
88
|
this.#generation++;
|
|
89
|
+
// A reconnect that was waiting is off: the application said stop.
|
|
90
|
+
this.#timers.clearAll();
|
|
91
|
+
this.#attempt = 0;
|
|
73
92
|
this.#patch({ status: 'closing' });
|
|
74
93
|
const closing = this.#session;
|
|
75
94
|
closing?.close(CloseCode.WT_NO_ERROR, 'client disconnect');
|
|
@@ -132,61 +151,60 @@ export class Client {
|
|
|
132
151
|
const generation = this.#generation;
|
|
133
152
|
try {
|
|
134
153
|
const table = await buildEventTable(this.#opts.contract);
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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') {
|
|
142
|
-
// §10.2 code 1006. Throwing without closing left the peer holding a session this
|
|
143
|
-
// side had already abandoned, with nothing on the wire to say why.
|
|
144
|
-
conn.close(CloseCode.WT_RELIABILITY_REFUSED, 'reliable-only transport refused');
|
|
145
|
-
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.');
|
|
154
|
+
const fallback = fallbacks.get(this);
|
|
155
|
+
let native;
|
|
156
|
+
try {
|
|
157
|
+
native = await this.#opts.connect();
|
|
146
158
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
conn
|
|
159
|
+
catch (e) {
|
|
160
|
+
// No WebTransport in this runtime: the fallback carries the session. A WebTransport
|
|
161
|
+
// handshake that failed: the fallback is dialled, because a connector is a closure
|
|
162
|
+
// and the WebSocket handshake is the one fact this client can obtain about whether
|
|
163
|
+
// the server is up over TCP (D125). If that fails too, the WebTransport error is the
|
|
164
|
+
// one thrown: it names the primary transport, and its message says what its probe
|
|
165
|
+
// found. Every other failure is thrown as it is, because a certificate past its
|
|
166
|
+
// validity or a dev connector outside the dev command is configuration, not a path
|
|
167
|
+
// to route around.
|
|
168
|
+
if (fallback === undefined)
|
|
169
|
+
throw e;
|
|
170
|
+
const reason = fallbackReasonFor(e);
|
|
171
|
+
if (reason === undefined)
|
|
172
|
+
throw e;
|
|
173
|
+
if (reason === 'unsupported') {
|
|
174
|
+
await this.#start(await fallback(), reason, generation, table);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
let conn;
|
|
178
|
+
try {
|
|
179
|
+
conn = await fallback();
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
throw e;
|
|
183
|
+
}
|
|
184
|
+
await this.#start(conn, reason, generation, table);
|
|
166
185
|
return;
|
|
167
186
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
187
|
+
try {
|
|
188
|
+
await this.#start(native, null, generation, table);
|
|
189
|
+
}
|
|
190
|
+
catch (e) {
|
|
191
|
+
// The transport connected and then nothing arrived before the application
|
|
192
|
+
// handshake. A live peer is never quiet there, since frame 0 is sent without
|
|
193
|
+
// waiting, so this is a peer that cannot send: Safari against this server (D128).
|
|
194
|
+
// The session that timed out closed itself; the fallback gets a session of its own.
|
|
195
|
+
// If that fails too, the WebTransport error is the one thrown.
|
|
196
|
+
if (fallback === undefined ||
|
|
197
|
+
native.kind() !== 'webtransport' ||
|
|
198
|
+
!isHandshakeTimeout(e)) {
|
|
199
|
+
throw e;
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
await this.#start(await fallback(), 'unsupported', generation, table);
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
throw e;
|
|
206
|
+
}
|
|
172
207
|
}
|
|
173
|
-
session.onControl((type, body) => this.#onMembership(type, body));
|
|
174
|
-
await session.start();
|
|
175
|
-
this.#patch({
|
|
176
|
-
status: 'connected',
|
|
177
|
-
sessionId: `s-${session.origin}`,
|
|
178
|
-
transport: conn.kind(),
|
|
179
|
-
fallbackReason,
|
|
180
|
-
});
|
|
181
|
-
void conn.closed.then(() => {
|
|
182
|
-
this.#patch({
|
|
183
|
-
status: 'closed',
|
|
184
|
-
sessionId: null,
|
|
185
|
-
rooms: [],
|
|
186
|
-
transport: null,
|
|
187
|
-
fallbackReason: null,
|
|
188
|
-
});
|
|
189
|
-
});
|
|
190
208
|
}
|
|
191
209
|
catch (e) {
|
|
192
210
|
const err = e instanceof TransportError
|
|
@@ -196,6 +214,108 @@ export class Client {
|
|
|
196
214
|
throw err;
|
|
197
215
|
}
|
|
198
216
|
}
|
|
217
|
+
/**
|
|
218
|
+
* One session over one connection: refused if the transport is reliable-only, started,
|
|
219
|
+
* and adopted unless a newer connect superseded it while the transport was being
|
|
220
|
+
* established. `transport` reaches the snapshot only here, once the handshake completed,
|
|
221
|
+
* so a connection whose session never handshook was never the client's transport.
|
|
222
|
+
*/
|
|
223
|
+
async #start(conn, fallbackReason, generation, table) {
|
|
224
|
+
// Chrome implements neither `requireUnreliable` nor `reliability`, so `undefined`
|
|
225
|
+
// must pass or every session on the dominant browser would be refused. Only an
|
|
226
|
+
// explicit reliable-only would misreport what the unreliable lane does. A fallback
|
|
227
|
+
// transport is reliable-only by definition and is judged by the session instead,
|
|
228
|
+
// against the contract's declarations (D121).
|
|
229
|
+
if (conn.kind() === 'webtransport' && conn.reliability() === 'reliable-only') {
|
|
230
|
+
// §10.2 code 1006. Throwing without closing left the peer holding a session this
|
|
231
|
+
// side had already abandoned, with nothing on the wire to say why.
|
|
232
|
+
conn.close(CloseCode.WT_RELIABILITY_REFUSED, 'reliable-only transport refused');
|
|
233
|
+
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.');
|
|
234
|
+
}
|
|
235
|
+
const session = new Session(conn, {
|
|
236
|
+
table,
|
|
237
|
+
origin: this.#opts.origin ?? 0x80000001,
|
|
238
|
+
side: 'client',
|
|
239
|
+
...(this.#opts.validateInbound === undefined
|
|
240
|
+
? {}
|
|
241
|
+
: { validateInbound: this.#opts.validateInbound }),
|
|
242
|
+
...(this.#opts.handshakeDeadlineMs === undefined
|
|
243
|
+
? {}
|
|
244
|
+
: { handshakeDeadlineMs: this.#opts.handshakeDeadlineMs }),
|
|
245
|
+
...(this.#opts.scheduleFlush === undefined
|
|
246
|
+
? {}
|
|
247
|
+
: { scheduleFlush: this.#opts.scheduleFlush }),
|
|
248
|
+
...(this.#opts.now === undefined ? {} : { now: this.#opts.now }),
|
|
249
|
+
});
|
|
250
|
+
// Superseded while the transport was being established. Adopting this session would
|
|
251
|
+
// register every handler on it alongside the one the newer connect built.
|
|
252
|
+
if (generation !== this.#generation) {
|
|
253
|
+
session.dispose();
|
|
254
|
+
conn.close(CloseCode.WT_NO_ERROR, 'connect superseded');
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
this.#session = session;
|
|
258
|
+
for (const [event, handlers] of this.#handlers) {
|
|
259
|
+
for (const h of handlers)
|
|
260
|
+
session.on(event, (p) => h(p));
|
|
261
|
+
}
|
|
262
|
+
session.onControl((type, body) => this.#onMembership(type, body));
|
|
263
|
+
await session.start();
|
|
264
|
+
this.#attempt = 0;
|
|
265
|
+
this.#patch({
|
|
266
|
+
status: 'connected',
|
|
267
|
+
sessionId: `s-${session.origin}`,
|
|
268
|
+
transport: conn.kind(),
|
|
269
|
+
fallbackReason,
|
|
270
|
+
});
|
|
271
|
+
for (const cb of this.#onSession)
|
|
272
|
+
cb(this.#snapshot);
|
|
273
|
+
void conn.closed.then(() => {
|
|
274
|
+
// Superseded by a disconnect or a newer connect: that path patched its own state.
|
|
275
|
+
if (generation !== this.#generation)
|
|
276
|
+
return;
|
|
277
|
+
this.#session = undefined;
|
|
278
|
+
this.#connecting = undefined;
|
|
279
|
+
this.#patch({
|
|
280
|
+
status: 'closed',
|
|
281
|
+
sessionId: null,
|
|
282
|
+
rooms: [],
|
|
283
|
+
transport: null,
|
|
284
|
+
fallbackReason: null,
|
|
285
|
+
});
|
|
286
|
+
if (this.#opts.reconnect !== undefined && this.#refs > 0)
|
|
287
|
+
this.#scheduleReconnect();
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* One attempt after a wait, and another wait after a failed one. The guard against two
|
|
292
|
+
* attempts overlapping is `#connecting`, the same one `connect()` uses, and the guard
|
|
293
|
+
* against reconnecting after `disconnect()` is the generation, the same one a superseded
|
|
294
|
+
* connect uses.
|
|
295
|
+
*/
|
|
296
|
+
#scheduleReconnect() {
|
|
297
|
+
const reconnect = this.#opts.reconnect;
|
|
298
|
+
if (reconnect === undefined)
|
|
299
|
+
return;
|
|
300
|
+
const base = Math.min(reconnect.maxMs, reconnect.minMs * 2 ** this.#attempt);
|
|
301
|
+
const delay = Math.round(base * (0.5 + Math.random() * 0.5));
|
|
302
|
+
this.#attempt++;
|
|
303
|
+
const generation = this.#generation;
|
|
304
|
+
this.#timers.after(delay, () => {
|
|
305
|
+
if (generation !== this.#generation || this.#refs === 0)
|
|
306
|
+
return;
|
|
307
|
+
if (this.#connecting !== undefined)
|
|
308
|
+
return;
|
|
309
|
+
const attempt = this.#doConnect();
|
|
310
|
+
this.#connecting = attempt;
|
|
311
|
+
attempt.catch(() => {
|
|
312
|
+
if (this.#connecting === attempt)
|
|
313
|
+
this.#connecting = undefined;
|
|
314
|
+
if (generation === this.#generation && this.#refs > 0)
|
|
315
|
+
this.#scheduleReconnect();
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
}
|
|
199
319
|
/** Rooms are server-authoritative, so membership only ever arrives as a notification. */
|
|
200
320
|
#onMembership(type, body) {
|
|
201
321
|
const room = body.room;
|
|
@@ -208,39 +328,6 @@ export class Client {
|
|
|
208
328
|
rooms.delete(room);
|
|
209
329
|
this.#patch({ rooms: [...rooms].sort() });
|
|
210
330
|
}
|
|
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
|
-
}
|
|
244
331
|
#requireSession() {
|
|
245
332
|
if (this.#session === undefined) {
|
|
246
333
|
throw new TransportError('WT_SESSION_CLOSED', 'not connected', 'Await connect() before emitting.');
|
|
@@ -268,12 +355,16 @@ function fallbackReasonFor(e) {
|
|
|
268
355
|
return 'unreachable';
|
|
269
356
|
return undefined;
|
|
270
357
|
}
|
|
358
|
+
function isHandshakeTimeout(e) {
|
|
359
|
+
return e instanceof TransportError && e.code === 'WT_HANDSHAKE_TIMEOUT';
|
|
360
|
+
}
|
|
271
361
|
/**
|
|
272
362
|
* A client with a second transport behind the first (D121).
|
|
273
363
|
*
|
|
274
364
|
* The native connector is tried first, every time. The fallback is used when the runtime
|
|
275
|
-
* has no WebTransport,
|
|
276
|
-
*
|
|
365
|
+
* has no WebTransport, when the WebTransport handshake fails and the WebSocket connects, and
|
|
366
|
+
* when the WebTransport session connects and then sends nothing before the application
|
|
367
|
+
* handshake (D128); the snapshot says which. The type argument is the gate: `FallbackReady<M>` is `unknown`
|
|
277
368
|
* when every unreliable event in the map declares a fallback, and otherwise a required
|
|
278
369
|
* property naming the event that has not, so this call fails to compile rather than an
|
|
279
370
|
* emit failing in production.
|
package/dist/client.js.map
CHANGED
|
@@ -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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"}
|
package/dist/codec.d.ts
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two codecs this version speaks. PROTOCOL.md §5.3: `0x01` is JSON over UTF-8, `0x02`
|
|
3
|
+
* is the application's bytes carried as they are. Which one a payload uses is a property of
|
|
4
|
+
* the event's slot in the contract, never of the call site, and a frame that arrives under
|
|
5
|
+
* the other codec is a protocol error rather than a guess.
|
|
6
|
+
*/
|
|
7
|
+
import { type EventDef } from './contract.ts';
|
|
8
|
+
import { Codec } from './protocol.ts';
|
|
1
9
|
export declare function encodePayload(value: unknown): Uint8Array;
|
|
2
10
|
export declare function decodePayload(bytes: Uint8Array): unknown;
|
|
3
11
|
/** Validate inbound only. The process that produced a payload need not check its own work. */
|
|
4
12
|
export declare function validate(schema: import('./contract.ts').Schema, value: unknown): Promise<unknown>;
|
|
13
|
+
export type Slot = 'payload' | 'returns' | 'yields';
|
|
14
|
+
export declare function slotCodec(def: EventDef, slot: Slot): Codec;
|
|
15
|
+
export declare function encodeWith(codec: Codec, value: unknown): Uint8Array;
|
|
16
|
+
/** A copy for bytes, so the application never holds a view into a buffer the decoder reuses. */
|
|
17
|
+
export declare function decodeWith(codec: number, bytes: Uint8Array): unknown;
|
|
18
|
+
/** The frame's codec against the contract's, for one slot of one event. */
|
|
19
|
+
export declare function expectCodec(event: string, slot: Slot, declared: Codec, arrived: number): void;
|
|
5
20
|
//# sourceMappingURL=codec.d.ts.map
|