@nifrajs/core 4.0.2 → 5.1.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 +6 -2
- package/dist/assurance.d.ts +86 -6
- package/dist/assurance.d.ts.map +1 -1
- package/dist/assurance.js +186 -95
- package/dist/assurance.js.map +1 -1
- package/dist/capabilities.d.ts +8 -0
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +53 -1
- package/dist/capabilities.js.map +1 -1
- package/dist/durable-effect.js +1 -1
- package/dist/durable-effect.js.map +1 -1
- package/dist/durable-saga.d.ts +6 -0
- package/dist/durable-saga.d.ts.map +1 -1
- package/dist/durable-saga.js +83 -10
- package/dist/durable-saga.js.map +1 -1
- package/dist/edge-kit.d.ts +8 -3
- package/dist/edge-kit.d.ts.map +1 -1
- package/dist/edge-kit.js +7 -2
- package/dist/edge-kit.js.map +1 -1
- package/dist/effect-scope.d.ts.map +1 -1
- package/dist/effect-scope.js +16 -5
- package/dist/effect-scope.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/evidence.d.ts +2 -0
- package/dist/evidence.d.ts.map +1 -1
- package/dist/evidence.js +9 -1
- package/dist/evidence.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/internal/durable-shared.d.ts +1 -2
- package/dist/internal/durable-shared.d.ts.map +1 -1
- package/dist/internal/durable-shared.js +25 -44
- package/dist/internal/durable-shared.js.map +1 -1
- package/dist/internal/durable-types.d.ts +3 -0
- package/dist/internal/durable-types.d.ts.map +1 -1
- package/dist/internal/hook-origins.d.ts +67 -0
- package/dist/internal/hook-origins.d.ts.map +1 -0
- package/dist/internal/hook-origins.js +86 -0
- package/dist/internal/hook-origins.js.map +1 -0
- package/dist/internal/route-assurance.d.ts +6 -3
- package/dist/internal/route-assurance.d.ts.map +1 -1
- package/dist/internal/route-assurance.js +29 -14
- package/dist/internal/route-assurance.js.map +1 -1
- package/dist/internal/route-compiler.d.ts +9 -0
- package/dist/internal/route-compiler.d.ts.map +1 -1
- package/dist/internal/route-compiler.js +95 -13
- package/dist/internal/route-compiler.js.map +1 -1
- package/dist/internal/route-program.d.ts +1 -1
- package/dist/internal/route-program.d.ts.map +1 -1
- package/dist/internal/route-program.js +59 -16
- package/dist/internal/route-program.js.map +1 -1
- package/dist/internal/same-origin.d.ts +11 -1
- package/dist/internal/same-origin.d.ts.map +1 -1
- package/dist/internal/same-origin.js +8 -0
- package/dist/internal/same-origin.js.map +1 -1
- package/dist/reconciliation-worker.d.ts.map +1 -1
- package/dist/reconciliation-worker.js +12 -2
- package/dist/reconciliation-worker.js.map +1 -1
- package/dist/reflection.d.ts +53 -2
- package/dist/reflection.d.ts.map +1 -1
- package/dist/reflection.js +352 -5
- package/dist/reflection.js.map +1 -1
- package/dist/router/pattern.d.ts +1 -1
- package/dist/router/pattern.d.ts.map +1 -1
- package/dist/router/pattern.js +6 -3
- package/dist/router/pattern.js.map +1 -1
- package/dist/security/baseline.d.ts +3 -0
- package/dist/security/baseline.d.ts.map +1 -1
- package/dist/security/baseline.js +9 -5
- package/dist/security/baseline.js.map +1 -1
- package/dist/server/auth.d.ts +32 -3
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +23 -0
- package/dist/server/auth.js.map +1 -1
- package/dist/server/body-lane.d.ts +8 -2
- package/dist/server/body-lane.d.ts.map +1 -1
- package/dist/server/body-lane.js +27 -2
- package/dist/server/body-lane.js.map +1 -1
- package/dist/server/body.d.ts +7 -0
- package/dist/server/body.d.ts.map +1 -1
- package/dist/server/body.js +34 -1
- package/dist/server/body.js.map +1 -1
- package/dist/server/client-ip.d.ts +3 -0
- package/dist/server/client-ip.d.ts.map +1 -1
- package/dist/server/client-ip.js +6 -5
- package/dist/server/client-ip.js.map +1 -1
- package/dist/server/context.d.ts +2 -1
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/cookies.d.ts.map +1 -1
- package/dist/server/cookies.js +13 -1
- package/dist/server/cookies.js.map +1 -1
- package/dist/server/edge.d.ts.map +1 -1
- package/dist/server/edge.js +2 -1
- package/dist/server/edge.js.map +1 -1
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +5 -1
- package/dist/server/http.js.map +1 -1
- package/dist/server/idempotency-lane.d.ts +6 -3
- package/dist/server/idempotency-lane.d.ts.map +1 -1
- package/dist/server/idempotency-lane.js +38 -17
- package/dist/server/idempotency-lane.js.map +1 -1
- package/dist/server/install.d.ts +2 -0
- package/dist/server/install.d.ts.map +1 -1
- package/dist/server/install.js +2 -0
- package/dist/server/install.js.map +1 -1
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/logger.js +3 -1
- package/dist/server/logger.js.map +1 -1
- package/dist/server/methods.d.ts +1 -0
- package/dist/server/methods.d.ts.map +1 -1
- package/dist/server/methods.js +1 -0
- package/dist/server/methods.js.map +1 -1
- package/dist/server/node-outcome.d.ts.map +1 -1
- package/dist/server/node-outcome.js +29 -11
- package/dist/server/node-outcome.js.map +1 -1
- package/dist/server/platform-adapters.d.ts.map +1 -1
- package/dist/server/platform-adapters.js +3 -2
- package/dist/server/platform-adapters.js.map +1 -1
- package/dist/server/request-context.d.ts +2 -1
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js +4 -1
- package/dist/server/request-context.js.map +1 -1
- package/dist/server/respond.d.ts +44 -11
- package/dist/server/respond.d.ts.map +1 -1
- package/dist/server/respond.js +192 -79
- package/dist/server/respond.js.map +1 -1
- package/dist/server/response-contract-lane.d.ts +21 -6
- package/dist/server/response-contract-lane.d.ts.map +1 -1
- package/dist/server/response-contract-lane.js +139 -14
- package/dist/server/response-contract-lane.js.map +1 -1
- package/dist/server/response-observer-runtime.d.ts.map +1 -1
- package/dist/server/response-observer-runtime.js +10 -41
- package/dist/server/response-observer-runtime.js.map +1 -1
- package/dist/server/runtime-core.d.ts +2 -0
- package/dist/server/runtime-core.d.ts.map +1 -1
- package/dist/server/runtime-core.js +2 -0
- package/dist/server/runtime-core.js.map +1 -1
- package/dist/server/server-types.d.ts +45 -10
- package/dist/server/server-types.d.ts.map +1 -1
- package/dist/server/server.d.ts +67 -32
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +481 -334
- package/dist/server/server.js.map +1 -1
- package/dist/server/sse.d.ts +11 -1
- package/dist/server/sse.d.ts.map +1 -1
- package/dist/server/sse.js +18 -3
- package/dist/server/sse.js.map +1 -1
- package/dist/server/transport-lane.d.ts +7 -1
- package/dist/server/transport-lane.d.ts.map +1 -1
- package/dist/server/transport-lane.js.map +1 -1
- package/dist/server/webhook.d.ts +5 -2
- package/dist/server/webhook.d.ts.map +1 -1
- package/dist/server/webhook.js +17 -1
- package/dist/server/webhook.js.map +1 -1
- package/dist/server/websocket.d.ts +33 -14
- package/dist/server/websocket.d.ts.map +1 -1
- package/dist/server/websocket.js +47 -12
- package/dist/server/websocket.js.map +1 -1
- package/dist/server/ws-bun.d.ts +7 -1
- package/dist/server/ws-bun.d.ts.map +1 -1
- package/dist/server/ws-bun.js +42 -2
- package/dist/server/ws-bun.js.map +1 -1
- package/dist/server/ws-hook.d.ts +15 -3
- package/dist/server/ws-hook.d.ts.map +1 -1
- package/dist/server.d.ts +4 -3
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +3 -2
- package/dist/server.js.map +1 -1
- package/dist/single-copy.d.ts +6 -0
- package/dist/single-copy.d.ts.map +1 -1
- package/dist/single-copy.js +55 -6
- package/dist/single-copy.js.map +1 -1
- package/dist/tool-contract.d.ts.map +1 -1
- package/dist/tool-contract.js +71 -40
- package/dist/tool-contract.js.map +1 -1
- package/dist/wire.d.ts +5 -0
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +5 -0
- package/dist/wire.js.map +1 -1
- package/dist/ws.d.ts.map +1 -1
- package/dist/ws.js +4 -1
- package/dist/ws.js.map +1 -1
- package/package.json +1 -1
- package/src/assurance.ts +299 -111
- package/src/capabilities.ts +62 -1
- package/src/durable-effect.ts +1 -1
- package/src/durable-saga.ts +94 -10
- package/src/edge-kit.ts +8 -3
- package/src/effect-scope.ts +15 -5
- package/src/errors.ts +1 -0
- package/src/evidence.ts +12 -3
- package/src/index.ts +7 -2
- package/src/internal/durable-shared.ts +25 -37
- package/src/internal/durable-types.ts +3 -0
- package/src/internal/hook-origins.ts +153 -0
- package/src/internal/route-assurance.ts +32 -18
- package/src/internal/route-compiler.ts +107 -16
- package/src/internal/route-program.ts +98 -44
- package/src/internal/same-origin.ts +14 -1
- package/src/reconciliation-worker.ts +10 -2
- package/src/reflection.ts +455 -4
- package/src/router/pattern.ts +6 -3
- package/src/security/baseline.ts +10 -5
- package/src/server/auth.ts +45 -3
- package/src/server/body-lane.ts +36 -1
- package/src/server/body.ts +34 -1
- package/src/server/client-ip.ts +8 -5
- package/src/server/context.ts +2 -1
- package/src/server/cookies.ts +12 -1
- package/src/server/edge.ts +2 -1
- package/src/server/http.ts +7 -1
- package/src/server/idempotency-lane.ts +64 -22
- package/src/server/install.ts +3 -0
- package/src/server/logger.ts +3 -1
- package/src/server/methods.ts +1 -0
- package/src/server/node-outcome.ts +34 -12
- package/src/server/platform-adapters.ts +3 -2
- package/src/server/request-context.ts +5 -0
- package/src/server/respond.ts +222 -69
- package/src/server/response-contract-lane.ts +162 -10
- package/src/server/response-observer-runtime.ts +16 -38
- package/src/server/runtime-core.ts +2 -0
- package/src/server/server-types.ts +45 -10
- package/src/server/server.ts +707 -539
- package/src/server/sse.ts +84 -55
- package/src/server/transport-lane.ts +7 -1
- package/src/server/webhook.ts +22 -3
- package/src/server/websocket.ts +83 -18
- package/src/server/ws-bun.ts +48 -1
- package/src/server/ws-hook.ts +14 -2
- package/src/server.ts +6 -1
- package/src/single-copy.ts +55 -5
- package/src/tool-contract.ts +67 -39
- package/src/wire.ts +14 -0
- package/src/ws.ts +6 -0
package/dist/server/sse.d.ts
CHANGED
|
@@ -11,7 +11,10 @@ export interface SSEMessage {
|
|
|
11
11
|
}
|
|
12
12
|
/** The stream handed to the `run` callback. */
|
|
13
13
|
export interface SSEStream {
|
|
14
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Enqueue an event frame. No-op once the stream is closed, including after a client that fell
|
|
16
|
+
* more than `maxBufferedBytes` behind was dropped.
|
|
17
|
+
*/
|
|
15
18
|
send(message: SSEMessage): void;
|
|
16
19
|
/** End the stream now. */
|
|
17
20
|
close(): void;
|
|
@@ -27,6 +30,13 @@ export interface SSEInit {
|
|
|
27
30
|
readonly headers?: ConstructorParameters<typeof Headers>[0];
|
|
28
31
|
/** Send a `: ` comment ping every N ms so idle proxies don't drop the connection. */
|
|
29
32
|
readonly keepAlive?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Bytes of sent events one client may leave unread, default 1 MiB. Past it the client is dropped:
|
|
35
|
+
* `signal` aborts, the queued frames are released, and later sends are no-ops, so a reader that
|
|
36
|
+
* stalls cannot hold server memory without limit. Raise it for a burst larger than this sent before
|
|
37
|
+
* the client can read; `Infinity` turns the limit off.
|
|
38
|
+
*/
|
|
39
|
+
readonly maxBufferedBytes?: number;
|
|
30
40
|
}
|
|
31
41
|
/**
|
|
32
42
|
* The stream handed to an `app.sse()` handler: `send` takes the route's TYPED event payload and
|
package/dist/server/sse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/server/sse.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,4GAA4G;AAC5G,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;IACpB,kEAAkE;IAClE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,+CAA+C;AAC/C,MAAM,WAAW,SAAS;IACxB
|
|
1
|
+
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/server/sse.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,4GAA4G;AAC5G,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;IACpB,kEAAkE;IAClE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,+CAA+C;AAC/C,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAA;IAC/B,0BAA0B;IAC1B,KAAK,IAAI,IAAI,CAAA;IACb,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAC7B;AAED,8FAA8F;AAC9F,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IAGxB,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3D,qFAAqF;IACrF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACnC;AAID;;;GAGG;AACH,MAAM,WAAW,cAAc,CAAC,KAAK;IACnC,gGAAgG;IAChG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,IAAI,CAAA;IAC3E,uDAAuD;IACvD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,0BAA0B;IAC1B,KAAK,IAAI,IAAI,CAAA;IACb,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAC7B;AAED,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAW9E;AAkBD,wBAAgB,GAAG,CACjB,CAAC,EAAE,UAAU,EACb,GAAG,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAChD,IAAI,GAAE,OAAY,GACjB,QAAQ,CAoGV;AAOD;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,cAAc,CAU1C"}
|
package/dist/server/sse.js
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
* }, { keepAlive: 15_000 }))
|
|
23
23
|
*/
|
|
24
24
|
import { INSTALL_SSE } from "./install.js";
|
|
25
|
+
const DEFAULT_MAX_BUFFERED_BYTES = 1024 * 1024;
|
|
25
26
|
/** Wrap a raw {@link SSEStream} in the typed, JSON-serializing surface `app.sse()` hands out. */
|
|
26
27
|
export function typedSSEStream(stream) {
|
|
27
28
|
return {
|
|
@@ -55,6 +56,9 @@ function formatMessage(m) {
|
|
|
55
56
|
return `${frame}\n`; // the blank line terminates the event
|
|
56
57
|
}
|
|
57
58
|
export function sse(c, run, init = {}) {
|
|
59
|
+
const maxBuffered = init.maxBufferedBytes ?? DEFAULT_MAX_BUFFERED_BYTES;
|
|
60
|
+
if (!(maxBuffered >= 0))
|
|
61
|
+
throw new RangeError("sse maxBufferedBytes must be a non-negative number");
|
|
58
62
|
const encoder = new TextEncoder();
|
|
59
63
|
const requestSignal = c.req?.signal;
|
|
60
64
|
// The producer's signal also aborts when the runtime cancels the body: a writer that finds the
|
|
@@ -86,8 +90,19 @@ export function sse(c, run, init = {}) {
|
|
|
86
90
|
};
|
|
87
91
|
const stream = {
|
|
88
92
|
send(message) {
|
|
89
|
-
if (
|
|
90
|
-
|
|
93
|
+
if (closed)
|
|
94
|
+
return;
|
|
95
|
+
// The queue only shrinks as the runtime writes to the socket, so a backlog past the cap
|
|
96
|
+
// is a client that stopped reading. Erroring the body releases the queue and the socket.
|
|
97
|
+
if ((controller.desiredSize ?? 0) < 0) {
|
|
98
|
+
closed = true;
|
|
99
|
+
teardown();
|
|
100
|
+
const reason = new Error("sse_client_too_slow");
|
|
101
|
+
stopped.abort(reason);
|
|
102
|
+
controller.error(reason);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
controller.enqueue(encoder.encode(formatMessage(message)));
|
|
91
106
|
},
|
|
92
107
|
close,
|
|
93
108
|
signal: stopped.signal,
|
|
@@ -132,7 +147,7 @@ export function sse(c, run, init = {}) {
|
|
|
132
147
|
teardown();
|
|
133
148
|
stopped.abort();
|
|
134
149
|
},
|
|
135
|
-
});
|
|
150
|
+
}, { highWaterMark: maxBuffered, size: (chunk) => chunk?.byteLength ?? 0 });
|
|
136
151
|
const headers = new Headers(init.headers);
|
|
137
152
|
headers.set("content-type", "text/event-stream; charset=utf-8");
|
|
138
153
|
headers.set("cache-control", "no-cache, no-transform");
|
package/dist/server/sse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/server/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/server/sse.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,13 @@ export interface TransportRuntime {
|
|
|
22
22
|
decodeRequest(source: TransportBodySource, contentType: string, maxBytes: number): Promise<TransportDecodeResult>;
|
|
23
23
|
}
|
|
24
24
|
export interface TransportCodecsOptions {
|
|
25
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
* Maximum encoded request bytes. Default 1,000,000. Keep aligned with `server({ maxBodyBytes })`.
|
|
27
|
+
*
|
|
28
|
+
* The plugin decodes a codec body in an `onRequest` hook, before routing, so a route's own
|
|
29
|
+
* `bodyLimit` and its `authenticate()` stages run only after the decode. This cap is the only
|
|
30
|
+
* bound on that work: set it to the largest codec body any route should accept.
|
|
31
|
+
*/
|
|
26
32
|
readonly maxBytes?: number;
|
|
27
33
|
/**
|
|
28
34
|
* Prototype-poisoning policy for decoded request bodies, mirroring
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport-lane.d.ts","sourceRoot":"","sources":["../../src/server/transport-lane.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAGnF,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEzE,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5D,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI,CAAA;IAChD,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAA;CACpC;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAChF;IAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAA;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAAA;IACpD,aAAa,CACX,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,sBAAsB;IACrC
|
|
1
|
+
{"version":3,"file":"transport-lane.d.ts","sourceRoot":"","sources":["../../src/server/transport-lane.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAGnF,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEzE,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5D,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI,CAAA;IAChD,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAA;CACpC;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAChF;IAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAA;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAAA;IACpD,aAAa,CACX,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAA;IACxC;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAChC;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,sBAAsB,EAChC,OAAO,GAAE,sBAA2B,GACnC,cAAc,CA6GhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport-lane.js","sourceRoot":"","sources":["../../src/server/transport-lane.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAuB,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAuB,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"transport-lane.js","sourceRoot":"","sources":["../../src/server/transport-lane.ts"],"names":[],"mappings":"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"}
|
package/dist/server/webhook.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
export type WebhookProvider = "stripe" | "github" | "generic";
|
|
2
|
-
export type SignatureEncoding = "hex" | "base64";
|
|
2
|
+
export type SignatureEncoding = "hex" | "base64" | "base64url";
|
|
3
3
|
export interface VerifyWebhookOptions {
|
|
4
4
|
/** Known-provider preset. Default `"generic"` (which requires {@link header}). */
|
|
5
5
|
readonly provider?: WebhookProvider;
|
|
6
6
|
/** Header carrying the signature. Required for `generic`; overrides the preset otherwise. */
|
|
7
7
|
readonly header?: string;
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* How the signature is encoded in the header. Default `"hex"`. `"base64url"` accepts the padded and
|
|
10
|
+
* unpadded forms and nothing outside its alphabet.
|
|
11
|
+
*/
|
|
9
12
|
readonly encoding?: SignatureEncoding;
|
|
10
13
|
/** A prefix stripped from the header value before decoding, e.g. `"sha256="`. */
|
|
11
14
|
readonly prefix?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/server/webhook.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;AAC7D,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/server/webhook.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;AAC7D,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAA;AAE9D,MAAM,WAAW,oBAAoB;IACnC,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;IACnC,6FAA6F;IAC7F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IACrC,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,wFAAwF;IACxF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,wFAAwF;IACxF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,MAAM,oBAAoB,GAC5B,mBAAmB,GACnB,mBAAmB,GACnB,4BAA4B,GAC5B,qBAAqB,GACrB,mBAAmB,GACnB,wBAAwB,CAAA;AAE5B,mGAAmG;AACnG,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,CAAA;AAqGjE;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAClC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CAgExB"}
|
package/dist/server/webhook.js
CHANGED
|
@@ -48,7 +48,23 @@ const fromBase64 = (value) => {
|
|
|
48
48
|
return null;
|
|
49
49
|
}
|
|
50
50
|
};
|
|
51
|
-
const
|
|
51
|
+
const BASE64URL = /^[A-Za-z0-9_-]+={0,2}$/;
|
|
52
|
+
const fromBase64Url = (value) => {
|
|
53
|
+
if (!BASE64URL.test(value))
|
|
54
|
+
return null;
|
|
55
|
+
const unpadded = value.replace(/=+$/, "");
|
|
56
|
+
// Padding only ever completes the last quartet; a lone trailing character encodes no byte.
|
|
57
|
+
if (unpadded.length % 4 === 1)
|
|
58
|
+
return null;
|
|
59
|
+
if (unpadded.length !== value.length && value.length % 4 !== 0)
|
|
60
|
+
return null;
|
|
61
|
+
return fromBase64(unpadded.replaceAll("-", "+").replaceAll("_", "/"));
|
|
62
|
+
};
|
|
63
|
+
const decodeSignature = (value, encoding) => encoding === "hex"
|
|
64
|
+
? fromHex(value)
|
|
65
|
+
: encoding === "base64url"
|
|
66
|
+
? fromBase64Url(value)
|
|
67
|
+
: fromBase64(value);
|
|
52
68
|
/** True iff `sig` is a valid HMAC-SHA256 of `payload` under any of `keys` (constant-time per check). */
|
|
53
69
|
async function verifyAny(keys, sig, payload) {
|
|
54
70
|
for (const key of keys) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/server/webhook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAE7D,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAA;AAC9B,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAA,CAAC,wDAAwD;AAC9F,MAAM,yBAAyB,GAAG,GAAG,CAAA,CAAC,kEAAkE;
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/server/webhook.ts"],"names":[],"mappings":"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"}
|
|
@@ -67,7 +67,7 @@ export interface WebSocketContext<Env = unknown> {
|
|
|
67
67
|
boundedJson<T = unknown>(maxBytes?: number): Promise<T>;
|
|
68
68
|
}
|
|
69
69
|
/** A WebSocket route's lifecycle. All callbacks optional; only `message` is needed for an echo. */
|
|
70
|
-
export interface WebSocketHandler<Data = unknown, Env = unknown, Schema extends StandardSchemaV1 | undefined = undefined, Send extends StandardSchemaV1 | undefined = undefined> {
|
|
70
|
+
export interface WebSocketHandler<Data = unknown, Env = unknown, Schema extends StandardSchemaV1 | undefined = undefined, Send extends StandardSchemaV1 | undefined = undefined, Extra = unknown> {
|
|
71
71
|
/**
|
|
72
72
|
* Cross-site WebSocket hijacking (CSWSH) guard - checked BEFORE `upgrade()`. A browser does not
|
|
73
73
|
* apply CORS to WebSocket handshakes and DOES send the page's cookies, so without an Origin check
|
|
@@ -84,12 +84,22 @@ export interface WebSocketHandler<Data = unknown, Env = unknown, Schema extends
|
|
|
84
84
|
*/
|
|
85
85
|
allowedOrigins?: ReadonlyArray<string> | ((origin: string | null) => boolean);
|
|
86
86
|
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
87
|
+
* The capability ids this socket's code may reach, exactly as an HTTP route's `capabilities`.
|
|
88
|
+
* `nifra capabilities check` compares them with the effects reachable from the module that
|
|
89
|
+
* registers the socket. The handshake context carries the guard, so a runtime beacon in `upgrade()`
|
|
90
|
+
* (or one that keeps `c`) fails closed on an undeclared capability.
|
|
91
91
|
*/
|
|
92
|
-
|
|
92
|
+
capabilities?: readonly string[];
|
|
93
|
+
/**
|
|
94
|
+
* Runs in the HTTP request context **before** the upgrade, last in the chain an HTTP `GET` to the
|
|
95
|
+
* same path runs: after {@link allowedOrigins}, then the `authenticate()` stages, `derive`s and
|
|
96
|
+
* `beforeHandle`s registered before this route, any of which can refuse the handshake. `c` carries
|
|
97
|
+
* what they derived. Return the initial per-connection `data` (→ `ws.data`), or a `Response` or
|
|
98
|
+
* `status(...)` to **reject** the upgrade (the client never connects). Omit to accept with
|
|
99
|
+
* `data: undefined`. A thrown `Response` rejects with it; any other throw goes to the route's
|
|
100
|
+
* `onError` hooks, then a flat 500.
|
|
101
|
+
*/
|
|
102
|
+
upgrade?(c: WebSocketContext<Env> & Extra): MaybePromise<Data | Response>;
|
|
93
103
|
/**
|
|
94
104
|
* Contract-first messages: a Standard Schema (`t`, zod, valibot, …) validating each **inbound** frame.
|
|
95
105
|
* Text frames are parsed as JSON first. When set, `message` receives the validated, typed value; a
|
|
@@ -152,7 +162,13 @@ export type WebSocketUpgradeOutcome = {
|
|
|
152
162
|
* `.use(websocket())` tree-shaking). `@nifrajs/workers` may import `attachWebSocket` directly instead. */
|
|
153
163
|
readonly attach: WsAttach;
|
|
154
164
|
readonly maxPayloadBytes?: number;
|
|
165
|
+
/** Builds `ws.send` over an adapter's native send, enforcing the route's {@link
|
|
166
|
+
* WebSocketHandler.validateSend}. Set on every outcome a nifra app produces; an adapter that
|
|
167
|
+
* wires its own sockets instead of calling `attach` (Node, Deno) builds `send` with it. */
|
|
168
|
+
readonly sender?: WsSender;
|
|
155
169
|
};
|
|
170
|
+
/** The send-builder the upgrade outcome carries (the installed runtime's `sender`). */
|
|
171
|
+
export type WsSender = (handler: WebSocketHandler, send: (payload: string | ArrayBufferView | ArrayBuffer) => void, onError: (error: unknown) => void) => (payload: string | ArrayBufferView | ArrayBuffer) => void;
|
|
156
172
|
/** The socket-wiring signature the upgrade outcome carries (the installed runtime's `attach`). */
|
|
157
173
|
export type WsAttach = (socket: StandardWebSocket, handler: WebSocketHandler, data: unknown, options: {
|
|
158
174
|
openNow: boolean;
|
|
@@ -183,6 +199,9 @@ export declare function attachWebSocket<Data = unknown, Env = unknown, Schema ex
|
|
|
183
199
|
pubsub: TopicRegistry;
|
|
184
200
|
maxPayloadBytes?: number | undefined;
|
|
185
201
|
}): NifraWebSocket<Data>;
|
|
202
|
+
/** Whether a message is over `cap` UTF-8 bytes, without encoding a text one: each UTF-16 unit takes
|
|
203
|
+
* 1-3 bytes (a surrogate pair 4 for its 2), so only a length between those bounds is counted. */
|
|
204
|
+
export declare function exceedsPayloadCap(message: string | ArrayBuffer | Uint8Array, cap: number): boolean;
|
|
186
205
|
type WebSocketSendPayload = string | ArrayBufferView | ArrayBuffer;
|
|
187
206
|
/**
|
|
188
207
|
* Build the socket's send function once. The disabled path returns the native sender directly, so
|
|
@@ -191,14 +210,14 @@ type WebSocketSendPayload = string | ArrayBufferView | ArrayBuffer;
|
|
|
191
210
|
* the portable API, so an async result fails closed and is never sent.
|
|
192
211
|
*/
|
|
193
212
|
export declare function createWebSocketSender(send: (payload: WebSocketSendPayload) => void, schema: StandardSchemaV1 | undefined, enabled: boolean | undefined, transport: WebSocketHandler["transport"], onError: (error: unknown) => void): (payload: WebSocketSendPayload) => void;
|
|
194
|
-
/**
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
213
|
+
/** {@link createWebSocketSender} configured from a route's handler: the outcome's `sender`. */
|
|
214
|
+
export declare const webSocketSender: WsSender;
|
|
215
|
+
/** The step a handshake's route chain ends in: the route's `upgrade()`, or an acceptance without data. */
|
|
216
|
+
export declare function handshakeUpgradeStep(handler: WebSocketHandler): (ctx: WebSocketContext) => unknown;
|
|
217
|
+
/** The acceptance a handshake's route chain ended in, or `undefined` when the chain refused it. */
|
|
218
|
+
export declare function acceptedHandshake(result: unknown): {
|
|
219
|
+
readonly data: unknown;
|
|
220
|
+
} | undefined;
|
|
202
221
|
export declare function wrapWebSocketMessageValidation(handler: WebSocketHandler, protoPoisoning?: ProtoPoisoning): WebSocketHandler;
|
|
203
222
|
export {};
|
|
204
223
|
//# sourceMappingURL=websocket.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/server/websocket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,gBAAgB,EAEjB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAwB,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AACzF,OAAO,EAAqB,KAAK,cAAc,EAAoB,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/server/websocket.ts"],"names":[],"mappings":"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"}
|
package/dist/server/websocket.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
import { validateStandard } from "../schema/standard.js";
|
|
12
12
|
import { decodeTransportFrame } from "../transport-codec.js";
|
|
13
13
|
import { guardDecodedValue, parseJsonGuarded } from "./proto-guard.js";
|
|
14
|
+
import { isResponseResult } from "./runtime-core.js";
|
|
14
15
|
/**
|
|
15
16
|
* In-process pub/sub for `ws.subscribe(topic)` + `app.publish(topic, data)`. **Single-instance only** -
|
|
16
17
|
* topics live in this process's memory, so a multi-instance deploy (multiple servers behind a load
|
|
@@ -134,17 +135,11 @@ export function attachWebSocket(socket, handler, data, options) {
|
|
|
134
135
|
socket.addEventListener("message", (event) => {
|
|
135
136
|
const raw = event.data;
|
|
136
137
|
const payload = typeof raw === "string" ? raw : toBinary(raw);
|
|
137
|
-
//
|
|
138
|
-
//
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
? WS_PAYLOAD_ENCODER.encode(raw).byteLength
|
|
143
|
-
: payload.byteLength;
|
|
144
|
-
if (payloadBytes > maxPayloadBytes) {
|
|
145
|
-
socket.close(1009, "message too large");
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
138
|
+
// The runtime hands over each message whole, so this bounds what reaches the handler, not what
|
|
139
|
+
// the runtime buffered to deliver it.
|
|
140
|
+
if (maxPayloadBytes !== undefined && exceedsPayloadCap(payload, maxPayloadBytes)) {
|
|
141
|
+
socket.close(1009, "message too large");
|
|
142
|
+
return;
|
|
148
143
|
}
|
|
149
144
|
safe(() => handler.message?.(ws, payload));
|
|
150
145
|
});
|
|
@@ -162,7 +157,25 @@ export function attachWebSocket(socket, handler, data, options) {
|
|
|
162
157
|
return ws;
|
|
163
158
|
}
|
|
164
159
|
const WS_MESSAGE_DECODER = new TextDecoder();
|
|
165
|
-
|
|
160
|
+
/** Whether a message is over `cap` UTF-8 bytes, without encoding a text one: each UTF-16 unit takes
|
|
161
|
+
* 1-3 bytes (a surrogate pair 4 for its 2), so only a length between those bounds is counted. */
|
|
162
|
+
export function exceedsPayloadCap(message, cap) {
|
|
163
|
+
if (typeof message !== "string")
|
|
164
|
+
return message.byteLength > cap;
|
|
165
|
+
const units = message.length;
|
|
166
|
+
if (units > cap)
|
|
167
|
+
return true;
|
|
168
|
+
if (units * 3 <= cap)
|
|
169
|
+
return false;
|
|
170
|
+
let bytes = 0;
|
|
171
|
+
for (let i = 0; i < units; i++) {
|
|
172
|
+
const unit = message.charCodeAt(i);
|
|
173
|
+
bytes += unit < 0x80 ? 1 : unit < 0x800 || (unit >= 0xd800 && unit <= 0xdfff) ? 2 : 3;
|
|
174
|
+
if (bytes > cap)
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
166
179
|
const OUTBOUND_VALIDATION_ERROR = "outbound WebSocket frame failed sendSchema validation";
|
|
167
180
|
function outboundValueOf(payload, transport) {
|
|
168
181
|
const text = typeof payload === "string"
|
|
@@ -231,6 +244,8 @@ export function createWebSocketSender(send, schema, enabled, transport, onError)
|
|
|
231
244
|
send(payload);
|
|
232
245
|
};
|
|
233
246
|
}
|
|
247
|
+
/** {@link createWebSocketSender} configured from a route's handler: the outcome's `sender`. */
|
|
248
|
+
export const webSocketSender = (handler, send, onError) => createWebSocketSender(send, handler.sendSchema, handler.validateSend, handler.transport, onError);
|
|
234
249
|
/**
|
|
235
250
|
* If the handler declares a `messageSchema`, return a copy whose `message` validates each frame -
|
|
236
251
|
* parse as JSON, run the Standard Schema, then call the user's `message` with the typed value, or
|
|
@@ -239,6 +254,26 @@ export function createWebSocketSender(send, schema, enabled, transport, onError)
|
|
|
239
254
|
* `protoPoisoning` is the app's body policy: a frame with a `__proto__` key gets what a JSON body
|
|
240
255
|
* with one gets, and under `"reject"` reads as invalid JSON.
|
|
241
256
|
*/
|
|
257
|
+
/** `upgrade()`'s acceptance, wrapped so a handshake's route chain tells it from an early result such
|
|
258
|
+
* as a guard's `Response` or a rejected auth stage. */
|
|
259
|
+
class HandshakeAccepted {
|
|
260
|
+
data;
|
|
261
|
+
constructor(data) {
|
|
262
|
+
this.data = data;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
const acceptHandshake = (value) => value instanceof Response || isResponseResult(value) ? value : new HandshakeAccepted(value);
|
|
266
|
+
/** The step a handshake's route chain ends in: the route's `upgrade()`, or an acceptance without data. */
|
|
267
|
+
export function handshakeUpgradeStep(handler) {
|
|
268
|
+
return (ctx) => {
|
|
269
|
+
const data = handler.upgrade?.(ctx);
|
|
270
|
+
return data instanceof Promise ? data.then(acceptHandshake) : acceptHandshake(data);
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
/** The acceptance a handshake's route chain ended in, or `undefined` when the chain refused it. */
|
|
274
|
+
export function acceptedHandshake(result) {
|
|
275
|
+
return result instanceof HandshakeAccepted ? result : undefined;
|
|
276
|
+
}
|
|
242
277
|
export function wrapWebSocketMessageValidation(handler, protoPoisoning = "reject") {
|
|
243
278
|
const schema = handler.messageSchema;
|
|
244
279
|
if (schema === undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/server/websocket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,oBAAoB,EAA+B,MAAM,uBAAuB,CAAA;AACzF,OAAO,EAAE,iBAAiB,EAAuB,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AA+
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/server/websocket.ts"],"names":[],"mappings":"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"}
|
package/dist/server/ws-bun.d.ts
CHANGED
|
@@ -12,6 +12,9 @@ export interface BunWsData {
|
|
|
12
12
|
readonly handler: WebSocketHandler;
|
|
13
13
|
/** Mounted/modern upgrades carry this registry; old/manual fixtures may omit it. */
|
|
14
14
|
readonly pubsub?: TopicRegistry;
|
|
15
|
+
/** The inbound cap of the app this socket belongs to (the upgrade outcome's). Absent, the
|
|
16
|
+
* listening app's applies. */
|
|
17
|
+
readonly maxPayloadBytes?: number | undefined;
|
|
15
18
|
data: unknown;
|
|
16
19
|
nifra?: NifraWebSocket;
|
|
17
20
|
}
|
|
@@ -32,6 +35,9 @@ export interface BunSocket {
|
|
|
32
35
|
* `nativePubsub` (set by `listen()` when the app has no validated-send route) makes subscriptions use
|
|
33
36
|
* Bun's own pub/sub; there the registry holds nothing and Bun auto-drops native subscriptions on
|
|
34
37
|
* close, so the `unsubscribeAll` sweep is skipped.
|
|
38
|
+
*
|
|
39
|
+
* `app` is the listening server. Its `wsMaxPayloadBytes` and its mounted apps' set the listener's
|
|
40
|
+
* `maxPayloadLength`; a socket whose app declares less is closed with `1009` here.
|
|
35
41
|
*/
|
|
36
|
-
export declare function createBunWsHandlers(topics: TopicRegistry, nativePubsub?: boolean): BunWsHandlers;
|
|
42
|
+
export declare function createBunWsHandlers(topics: TopicRegistry, nativePubsub?: boolean, app?: object): BunWsHandlers;
|
|
37
43
|
//# sourceMappingURL=ws-bun.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-bun.d.ts","sourceRoot":"","sources":["../../src/server/ws-bun.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"ws-bun.d.ts","sourceRoot":"","sources":["../../src/server/ws-bun.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,aAAa,EAElB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD;6FAC6F;AAC7F,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAA;IAClC,oFAAoF;IACpF,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAA;IAC/B;kCAC8B;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7C,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,CAAC,EAAE,cAAc,CAAA;CACvB;AAED;6EAC6E;AAC7E,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,WAAW,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC9E,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAG3B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAEhC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CACzB;AA6GD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,YAAY,UAAQ,EACpB,GAAG,CAAC,EAAE,MAAM,GACX,aAAa,CA2Cf"}
|
package/dist/server/ws-bun.js
CHANGED
|
@@ -4,7 +4,34 @@
|
|
|
4
4
|
* bundle of a no-WebSocket app never ships it; `server.ts` only imports the **types** from here
|
|
5
5
|
* (erased). No `Bun.*` calls here - the runtime seam stays in `server.ts` (see runtime-boundary.test).
|
|
6
6
|
*/
|
|
7
|
-
import { createWebSocketSender, } from "./websocket.js";
|
|
7
|
+
import { createWebSocketSender, exceedsPayloadCap, } from "./websocket.js";
|
|
8
|
+
/**
|
|
9
|
+
* The largest `wsMaxPayloadBytes` among the nifra apps mounted under `app` that serve sockets, or
|
|
10
|
+
* `floor` when none declares more. Bun takes one frame limit per listener, so it has to admit every
|
|
11
|
+
* mounted app's cap. Reads each server's own mount table, as reflection does, so an app that never
|
|
12
|
+
* listens pays nothing for it; a child that is not a nifra server names no cap here.
|
|
13
|
+
*/
|
|
14
|
+
function mountedPayloadCeiling(app, floor, seen) {
|
|
15
|
+
if (seen.has(app))
|
|
16
|
+
return floor;
|
|
17
|
+
seen.add(app);
|
|
18
|
+
const mounts = Reflect.get(app, "fetchMounts");
|
|
19
|
+
if (!Array.isArray(mounts))
|
|
20
|
+
return floor;
|
|
21
|
+
let ceiling = floor;
|
|
22
|
+
for (const mount of mounts) {
|
|
23
|
+
const child = typeof mount === "object" && mount !== null ? mount.app : undefined;
|
|
24
|
+
if (typeof child !== "object" || child === null)
|
|
25
|
+
continue;
|
|
26
|
+
const routes = Reflect.get(child, "wsRoutes");
|
|
27
|
+
const cap = Reflect.get(child, "wsMaxPayloadBytes");
|
|
28
|
+
if (Array.isArray(routes) && routes.length > 0 && typeof cap === "number" && cap > ceiling) {
|
|
29
|
+
ceiling = cap;
|
|
30
|
+
}
|
|
31
|
+
ceiling = mountedPayloadCeiling(child, ceiling, seen);
|
|
32
|
+
}
|
|
33
|
+
return ceiling;
|
|
34
|
+
}
|
|
8
35
|
/** Normalize a received binary frame to `Uint8Array` (Bun hands a `Buffer`, already one; an
|
|
9
36
|
* `ArrayBuffer` is wrapped). Text frames stay `string`. */
|
|
10
37
|
function toBinaryData(message) {
|
|
@@ -80,9 +107,16 @@ function dispatchWsCallback(call, ws, handler) {
|
|
|
80
107
|
* `nativePubsub` (set by `listen()` when the app has no validated-send route) makes subscriptions use
|
|
81
108
|
* Bun's own pub/sub; there the registry holds nothing and Bun auto-drops native subscriptions on
|
|
82
109
|
* close, so the `unsubscribeAll` sweep is skipped.
|
|
110
|
+
*
|
|
111
|
+
* `app` is the listening server. Its `wsMaxPayloadBytes` and its mounted apps' set the listener's
|
|
112
|
+
* `maxPayloadLength`; a socket whose app declares less is closed with `1009` here.
|
|
83
113
|
*/
|
|
84
|
-
export function createBunWsHandlers(topics, nativePubsub = false) {
|
|
114
|
+
export function createBunWsHandlers(topics, nativePubsub = false, app) {
|
|
115
|
+
const own = app === undefined ? undefined : Reflect.get(app, "wsMaxPayloadBytes");
|
|
116
|
+
const appCap = typeof own === "number" ? own : Number.POSITIVE_INFINITY;
|
|
117
|
+
const listenerCap = app === undefined ? appCap : mountedPayloadCeiling(app, appCap, new Set());
|
|
85
118
|
return {
|
|
119
|
+
maxPayloadLength: listenerCap,
|
|
86
120
|
open: (raw) => {
|
|
87
121
|
const ws = raw;
|
|
88
122
|
const nifra = wrapBunSocket(ws, topics, ws.data.handler, nativePubsub);
|
|
@@ -91,6 +125,12 @@ export function createBunWsHandlers(topics, nativePubsub = false) {
|
|
|
91
125
|
},
|
|
92
126
|
message: (raw, message) => {
|
|
93
127
|
const ws = raw;
|
|
128
|
+
// Only a socket whose app declares less than the listener admits pays for a size check.
|
|
129
|
+
const cap = ws.data.maxPayloadBytes ?? appCap;
|
|
130
|
+
if (cap < listenerCap && exceedsPayloadCap(message, cap)) {
|
|
131
|
+
ws.close(1009, "message too large");
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
94
134
|
const handler = ws.data.handler;
|
|
95
135
|
const nifra = ws.data.nifra ?? wrapBunSocket(ws, topics, handler, nativePubsub);
|
|
96
136
|
const data = typeof message === "string" ? message : toBinaryData(message);
|