agentfootprint 7.26.0 → 7.27.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/dist/adapters/hosting/agentcore.js +4 -0
- package/dist/adapters/hosting/agentcore.js.map +1 -1
- package/dist/esm/adapters/hosting/agentcore.d.ts +22 -0
- package/dist/esm/adapters/hosting/agentcore.js +4 -0
- package/dist/esm/adapters/hosting/agentcore.js.map +1 -1
- package/dist/esm/hosting/httpHost.d.ts +75 -1
- package/dist/esm/hosting/httpHost.js +186 -10
- package/dist/esm/hosting/httpHost.js.map +1 -1
- package/dist/esm/hosting/nodeHost.d.ts +31 -0
- package/dist/esm/hosting/nodeHost.js +9 -0
- package/dist/esm/hosting/nodeHost.js.map +1 -1
- package/dist/esm/hosting/webSocketConversation.d.ts +5 -0
- package/dist/esm/hosting/webSocketConversation.js +79 -19
- package/dist/esm/hosting/webSocketConversation.js.map +1 -1
- package/dist/esm/hosting/webSocketFrames.d.ts +6 -0
- package/dist/esm/hosting/webSocketFrames.js +6 -0
- package/dist/esm/hosting/webSocketFrames.js.map +1 -1
- package/dist/hosting/httpHost.js +186 -10
- package/dist/hosting/httpHost.js.map +1 -1
- package/dist/hosting/nodeHost.js +9 -0
- package/dist/hosting/nodeHost.js.map +1 -1
- package/dist/hosting/webSocketConversation.js +79 -19
- package/dist/hosting/webSocketConversation.js.map +1 -1
- package/dist/hosting/webSocketFrames.js +6 -0
- package/dist/hosting/webSocketFrames.js.map +1 -1
- package/dist/types/adapters/hosting/agentcore.d.ts +22 -0
- package/dist/types/adapters/hosting/agentcore.d.ts.map +1 -1
- package/dist/types/hosting/httpHost.d.ts +75 -1
- package/dist/types/hosting/httpHost.d.ts.map +1 -1
- package/dist/types/hosting/nodeHost.d.ts +31 -0
- package/dist/types/hosting/nodeHost.d.ts.map +1 -1
- package/dist/types/hosting/webSocketConversation.d.ts +5 -0
- package/dist/types/hosting/webSocketConversation.d.ts.map +1 -1
- package/dist/types/hosting/webSocketFrames.d.ts +6 -0
- package/dist/types/hosting/webSocketFrames.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -21,6 +21,11 @@
|
|
|
21
21
|
* instead of binding one, so a WebSocket upgrade or your own routes can share
|
|
22
22
|
* the port. `close()` then detaches and drains, and your socket stays up.
|
|
23
23
|
*
|
|
24
|
+
* **Or the socket can be the host's and the routes yours.** Pass `onUnhandled`
|
|
25
|
+
* and every path this adapter does not own is handed to your code instead of
|
|
26
|
+
* collecting its 404 — the same one port, bound by the host rather than by you.
|
|
27
|
+
* The two are opposite ends of one seam and are refused together.
|
|
28
|
+
*
|
|
24
29
|
* **There is a third door.** `serveConversations(handler)` takes WebSocket
|
|
25
30
|
* upgrades on `/conversation` and hands each one to your handler as a
|
|
26
31
|
* `HostConversation` — a channel that stays open, for the callers that cannot
|
|
@@ -82,6 +87,32 @@ export interface NodeHostOptions {
|
|
|
82
87
|
* full set of laws is on `httpHost`'s own `server` option, which this is.
|
|
83
88
|
*/
|
|
84
89
|
readonly server?: import('node:http').Server;
|
|
90
|
+
/**
|
|
91
|
+
* Answer a request whose path this adapter does not own — your code, on this
|
|
92
|
+
* host's socket, instead of its 404.
|
|
93
|
+
*
|
|
94
|
+
* The inverse of `server`: there you own the socket and lend the host two
|
|
95
|
+
* paths; here the host owns the socket and lends you every path it does not
|
|
96
|
+
* answer. `/invoke`, `/health` and `/conversation` never reach it, a throw
|
|
97
|
+
* inside it is that request's 500, and passing it beside `server` is refused
|
|
98
|
+
* by name. The full set of laws is on `httpHost`'s own `onUnhandled`, which
|
|
99
|
+
* this is.
|
|
100
|
+
*
|
|
101
|
+
* @example A diagnostic route beside the agent, on one port
|
|
102
|
+
* nodeHost({
|
|
103
|
+
* port: 8080,
|
|
104
|
+
* onUnhandled: (req, res) => {
|
|
105
|
+
* if (req.url === '/debug/trace') {
|
|
106
|
+
* res.writeHead(200, { 'content-type': 'application/json' });
|
|
107
|
+
* res.end(JSON.stringify(lastTrace));
|
|
108
|
+
* return;
|
|
109
|
+
* }
|
|
110
|
+
* res.writeHead(404, { 'content-type': 'application/json' });
|
|
111
|
+
* res.end('{"error":"no such route"}');
|
|
112
|
+
* },
|
|
113
|
+
* });
|
|
114
|
+
*/
|
|
115
|
+
readonly onUnhandled?: (req: import('node:http').IncomingMessage, res: import('node:http').ServerResponse) => void;
|
|
85
116
|
}
|
|
86
117
|
/**
|
|
87
118
|
* What {@link nodeHost}'s `serve()` resolves to — a `HostHandle` that also
|
|
@@ -21,6 +21,11 @@
|
|
|
21
21
|
* instead of binding one, so a WebSocket upgrade or your own routes can share
|
|
22
22
|
* the port. `close()` then detaches and drains, and your socket stays up.
|
|
23
23
|
*
|
|
24
|
+
* **Or the socket can be the host's and the routes yours.** Pass `onUnhandled`
|
|
25
|
+
* and every path this adapter does not own is handed to your code instead of
|
|
26
|
+
* collecting its 404 — the same one port, bound by the host rather than by you.
|
|
27
|
+
* The two are opposite ends of one seam and are refused together.
|
|
28
|
+
*
|
|
24
29
|
* **There is a third door.** `serveConversations(handler)` takes WebSocket
|
|
25
30
|
* upgrades on `/conversation` and hands each one to your handler as a
|
|
26
31
|
* `HostConversation` — a channel that stays open, for the callers that cannot
|
|
@@ -114,6 +119,10 @@ export function nodeHost(options = {}) {
|
|
|
114
119
|
...(options.port !== undefined && { port: options.port }),
|
|
115
120
|
...(options.hostname !== undefined && { hostname: options.hostname }),
|
|
116
121
|
...(options.server !== undefined && { server: options.server }),
|
|
122
|
+
// Passed through as given for the same reason: with a caller-owned server
|
|
123
|
+
// this hook is refused BY NAME rather than dropped, so a caller who asked
|
|
124
|
+
// for both learns which one this host cannot honour.
|
|
125
|
+
...(options.onUnhandled !== undefined && { onUnhandled: options.onUnhandled }),
|
|
117
126
|
});
|
|
118
127
|
}
|
|
119
128
|
//# sourceMappingURL=nodeHost.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeHost.js","sourceRoot":"","sources":["../../../src/hosting/nodeHost.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"nodeHost.js","sourceRoot":"","sources":["../../../src/hosting/nodeHost.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,11 @@
|
|
|
28
28
|
* - **The port's frame is the whole message.** A message the transport
|
|
29
29
|
* delivered in fragments counts against `maxFrameBytes` in total, so
|
|
30
30
|
* fragmentation cannot be used to walk around the ceiling.
|
|
31
|
+
* - **Nothing in a conversation's lifecycle is ever the PROCESS's failure.**
|
|
32
|
+
* Node calls a socket's listeners from its own stack, so a throw inside one
|
|
33
|
+
* is uncaught and ends the container. Every listener body here that computes
|
|
34
|
+
* is wrapped: a surprise costs THIS conversation, with a reason, and the
|
|
35
|
+
* door keeps carrying everybody else's.
|
|
31
36
|
*
|
|
32
37
|
* Pattern: Adapter. Role: outer ring, one transport.
|
|
33
38
|
*/
|
|
@@ -28,6 +28,11 @@
|
|
|
28
28
|
* - **The port's frame is the whole message.** A message the transport
|
|
29
29
|
* delivered in fragments counts against `maxFrameBytes` in total, so
|
|
30
30
|
* fragmentation cannot be used to walk around the ceiling.
|
|
31
|
+
* - **Nothing in a conversation's lifecycle is ever the PROCESS's failure.**
|
|
32
|
+
* Node calls a socket's listeners from its own stack, so a throw inside one
|
|
33
|
+
* is uncaught and ends the container. Every listener body here that computes
|
|
34
|
+
* is wrapped: a surprise costs THIS conversation, with a reason, and the
|
|
35
|
+
* door keeps carrying everybody else's.
|
|
31
36
|
*
|
|
32
37
|
* Pattern: Adapter. Role: outer ring, one transport.
|
|
33
38
|
*/
|
|
@@ -64,7 +69,19 @@ export function conversationDoor(options) {
|
|
|
64
69
|
headers,
|
|
65
70
|
query: new URLSearchParams(url.split('?')[1] ?? ''),
|
|
66
71
|
};
|
|
67
|
-
|
|
72
|
+
// A dialect is somebody else's code, and it runs on node's own stack: a
|
|
73
|
+
// throw here is UNCAUGHT and would end the process — every other
|
|
74
|
+
// conversation on this door and every request beside them — for one
|
|
75
|
+
// handshake it could not read. Nothing in a request's lifecycle may ever
|
|
76
|
+
// be the process's failure, and a handshake is the start of one.
|
|
77
|
+
let read;
|
|
78
|
+
try {
|
|
79
|
+
read = options.readConversation?.(facts) ?? {};
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
refuse(socket, 500, `the '${options.hostName}' host could not read this handshake: ${asMessage(err)}`);
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
68
85
|
socket.write(handshakeResponse(key, read.protocol));
|
|
69
86
|
const conversation = openConversation(socket, {
|
|
70
87
|
hostName: options.hostName,
|
|
@@ -97,10 +114,16 @@ export function conversationDoor(options) {
|
|
|
97
114
|
},
|
|
98
115
|
};
|
|
99
116
|
}
|
|
117
|
+
/** The three statuses this door answers a pre-101 socket with. */
|
|
118
|
+
const REFUSAL_REASON = {
|
|
119
|
+
400: 'Bad Request',
|
|
120
|
+
500: 'Internal Server Error',
|
|
121
|
+
503: 'Service Unavailable',
|
|
122
|
+
};
|
|
100
123
|
/** Answer an upgrade we will not carry, in the one language a pre-101 socket speaks. */
|
|
101
124
|
function refuse(socket, status, message) {
|
|
102
125
|
const text = `[hosting] ${message}.`;
|
|
103
|
-
const reason = status
|
|
126
|
+
const reason = REFUSAL_REASON[status] ?? 'Bad Request';
|
|
104
127
|
socket.end(`HTTP/1.1 ${status} ${reason}\r\n` +
|
|
105
128
|
`content-type: text/plain\r\n` +
|
|
106
129
|
`content-length: ${Buffer.byteLength(text)}\r\n` +
|
|
@@ -136,16 +159,28 @@ function openConversation(socket, options) {
|
|
|
136
159
|
if (ending !== undefined)
|
|
137
160
|
return;
|
|
138
161
|
ending = close;
|
|
139
|
-
|
|
140
|
-
|
|
162
|
+
// Saying goodbye is the part that touches the transport, so it is the part
|
|
163
|
+
// that can fail — and a failure to say goodbye must not stop the handler
|
|
164
|
+
// being TOLD, or leave `ended` unresolved and every shutdown sharing this
|
|
165
|
+
// socket waiting on it.
|
|
166
|
+
try {
|
|
167
|
+
if (wireCode !== undefined && socket.writable) {
|
|
168
|
+
socket.write(encodeClose(wireCode, wireReason ?? close.reason));
|
|
169
|
+
}
|
|
170
|
+
// end() flushes what is queued and then sends FIN — the polite half of
|
|
171
|
+
// the close. The timer is the impolite half, for a peer that never
|
|
172
|
+
// answers.
|
|
173
|
+
socket.end();
|
|
174
|
+
const grace = setTimeout(() => socket.destroy(), CLOSE_GRACE_MS);
|
|
175
|
+
if (typeof grace.unref === 'function')
|
|
176
|
+
grace.unref();
|
|
177
|
+
socket.once('close', () => clearTimeout(grace));
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
// The socket could not be told. It is going away either way, and the
|
|
181
|
+
// conversation is over regardless of how politely.
|
|
182
|
+
socket.destroy();
|
|
141
183
|
}
|
|
142
|
-
// end() flushes what is queued and then sends FIN — the polite half of the
|
|
143
|
-
// close. The timer is the impolite half, for a peer that never answers.
|
|
144
|
-
socket.end();
|
|
145
|
-
const grace = setTimeout(() => socket.destroy(), CLOSE_GRACE_MS);
|
|
146
|
-
if (typeof grace.unref === 'function')
|
|
147
|
-
grace.unref();
|
|
148
|
-
socket.once('close', () => clearTimeout(grace));
|
|
149
184
|
const subscribers = [...closeSubscribers];
|
|
150
185
|
closeSubscribers.clear();
|
|
151
186
|
for (const cb of subscribers) {
|
|
@@ -254,7 +289,32 @@ function openConversation(socket, options) {
|
|
|
254
289
|
const code = err instanceof FrameProtocolError ? err.closeCode : CLOSE_CODE.protocolError;
|
|
255
290
|
finish({ by: 'far-side', reason: asMessage(err) }, code, asMessage(err));
|
|
256
291
|
}
|
|
257
|
-
|
|
292
|
+
/**
|
|
293
|
+
* One socket's version of the law the request door states: **nothing in a
|
|
294
|
+
* conversation's lifecycle may ever be the process's failure.** An upgraded
|
|
295
|
+
* socket is a plain stream and node calls its listeners from its own stack,
|
|
296
|
+
* so a throw inside one is uncaught — and would end every OTHER conversation
|
|
297
|
+
* on this door, plus the requests beside them, for one peer's bad frame.
|
|
298
|
+
* Wrapped, it ends THIS conversation and says why.
|
|
299
|
+
*/
|
|
300
|
+
function contained(body) {
|
|
301
|
+
return (...args) => {
|
|
302
|
+
try {
|
|
303
|
+
body(...args);
|
|
304
|
+
}
|
|
305
|
+
catch (err) {
|
|
306
|
+
finish({ by: 'host', reason: `this conversation could not be read: ${asMessage(err)}` }, CLOSE_CODE.internalError);
|
|
307
|
+
socket.destroy();
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
// Chunks here are always BYTES, and that is node's guarantee rather than this
|
|
312
|
+
// door's assumption: an upgraded socket refuses `setEncoding` outright
|
|
313
|
+
// (`ERR_HTTP_SOCKET_ENCODING`, "not allowed per RFC7230 Section 3"), so the
|
|
314
|
+
// co-listener that can turn a REQUEST body into strings cannot do it to a
|
|
315
|
+
// conversation. Pinned by a test, because the reason this is safe lives in
|
|
316
|
+
// node and could change there.
|
|
317
|
+
socket.on('data', contained((chunk) => {
|
|
258
318
|
if (ending !== undefined)
|
|
259
319
|
return;
|
|
260
320
|
let frames;
|
|
@@ -267,25 +327,25 @@ function openConversation(socket, options) {
|
|
|
267
327
|
}
|
|
268
328
|
for (const frame of frames)
|
|
269
329
|
handleFrame(frame);
|
|
270
|
-
});
|
|
271
|
-
socket.on('error', (err) => {
|
|
330
|
+
}));
|
|
331
|
+
socket.on('error', contained((err) => {
|
|
272
332
|
finish({ by: 'transport', reason: err.message });
|
|
273
333
|
socket.destroy();
|
|
274
|
-
});
|
|
334
|
+
}));
|
|
275
335
|
// BOTH halves, and `'end'` is the one that matters. An upgraded socket is
|
|
276
336
|
// half-open: when the far side vanishes, node delivers `'end'` and then waits
|
|
277
337
|
// for THIS side to end too — no `'error'`, and no `'close'` until we act. A
|
|
278
338
|
// door listening only for `'close'` would never fire onClose for a caller
|
|
279
339
|
// that walked away, and would hold a socket open that keeps every shutdown
|
|
280
340
|
// sharing this port waiting. Measured, not assumed.
|
|
281
|
-
socket.on('end', () => {
|
|
341
|
+
socket.on('end', contained(() => {
|
|
282
342
|
finish({ by: 'transport', reason: 'the connection ended without a close frame' });
|
|
283
|
-
});
|
|
284
|
-
socket.on('close', () => {
|
|
343
|
+
}));
|
|
344
|
+
socket.on('close', contained(() => {
|
|
285
345
|
// No close frame from either side: the connection went away rather than
|
|
286
346
|
// ended, and those are different facts to whoever is watching.
|
|
287
347
|
finish({ by: 'transport', reason: 'the connection closed without a close frame' });
|
|
288
|
-
});
|
|
348
|
+
}));
|
|
289
349
|
const port = {
|
|
290
350
|
...(sessionId !== undefined && { sessionId }),
|
|
291
351
|
headers: options.headers,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webSocketConversation.js","sourceRoot":"","sources":["../../../src/hosting/webSocketConversation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"webSocketConversation.js","sourceRoot":"","sources":["../../../src/hosting/webSocketConversation.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,6 +71,12 @@ export declare const CLOSE_CODE: {
|
|
|
71
71
|
readonly invalidPayload: 1007;
|
|
72
72
|
/** Past a declared ceiling. */
|
|
73
73
|
readonly tooBig: 1009;
|
|
74
|
+
/**
|
|
75
|
+
* Something went wrong on THIS side — the RFC's own word for a condition
|
|
76
|
+
* that stopped this endpoint fulfilling the request. Used where the fault is
|
|
77
|
+
* demonstrably not the peer's, so that a close code never blames them for it.
|
|
78
|
+
*/
|
|
79
|
+
readonly internalError: 1011;
|
|
74
80
|
};
|
|
75
81
|
/** One frame, as it came off the wire, already unmasked. */
|
|
76
82
|
export interface WebSocketFrame {
|
|
@@ -70,6 +70,12 @@ export const CLOSE_CODE = {
|
|
|
70
70
|
invalidPayload: 1007,
|
|
71
71
|
/** Past a declared ceiling. */
|
|
72
72
|
tooBig: 1009,
|
|
73
|
+
/**
|
|
74
|
+
* Something went wrong on THIS side — the RFC's own word for a condition
|
|
75
|
+
* that stopped this endpoint fulfilling the request. Used where the fault is
|
|
76
|
+
* demonstrably not the peer's, so that a close code never blames them for it.
|
|
77
|
+
*/
|
|
78
|
+
internalError: 1011,
|
|
73
79
|
};
|
|
74
80
|
/**
|
|
75
81
|
* A peer that broke the protocol, carrying the close code the RFC names for
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webSocketFrames.js","sourceRoot":"","sources":["../../../src/hosting/webSocketFrames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,gFAAgF;AAChF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,YAAY,EAAE,GAAG;IACjB,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;CACD,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,sCAAsC;IACtC,MAAM,EAAE,IAAI;IACZ,iCAAiC;IACjC,SAAS,EAAE,IAAI;IACf,mCAAmC;IACnC,aAAa,EAAE,IAAI;IACnB,+DAA+D;IAC/D,eAAe,EAAE,IAAI;IACrB,yEAAyE;IACzE,QAAQ,EAAE,IAAI;IACd,oCAAoC;IACpC,cAAc,EAAE,IAAI;IACpB,+BAA+B;IAC/B,MAAM,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"webSocketFrames.js","sourceRoot":"","sources":["../../../src/hosting/webSocketFrames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,gFAAgF;AAChF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,YAAY,EAAE,GAAG;IACjB,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;CACD,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,sCAAsC;IACtC,MAAM,EAAE,IAAI;IACZ,iCAAiC;IACjC,SAAS,EAAE,IAAI;IACf,mCAAmC;IACnC,aAAa,EAAE,IAAI;IACnB,+DAA+D;IAC/D,eAAe,EAAE,IAAI;IACrB,yEAAyE;IACzE,QAAQ,EAAE,IAAI;IACd,oCAAoC;IACpC,cAAc,EAAE,IAAI;IACpB,+BAA+B;IAC/B,MAAM,EAAE,IAAI;IACZ;;;;OAIG;IACH,aAAa,EAAE,IAAI;CACX,CAAC;AAYX;;;;GAIG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,SAAS,CAAS;IAE3B,YAAY,SAAiB,EAAE,OAAe;QAC5C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED,iFAAiF;AACjF,MAAM,cAAc,GAAG,sCAAsC,CAAC;AAE9D;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,SAAiB;IACzC,OAAO,UAAU,CAAC,MAAM,CAAC;SACtB,MAAM,CAAC,SAAS,GAAG,cAAc,CAAC;SAClC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACtB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB,EAAE,QAAiB;IACpE,MAAM,KAAK,GAAG;QACZ,kCAAkC;QAClC,oBAAoB;QACpB,qBAAqB;QACrB,yBAAyB,SAAS,CAAC,SAAS,CAAC,EAAE;KAChD,CAAC;IACF,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,OAAe,EAAE,GAAG,GAAG,IAAI;IACrE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,IAAI,MAAc,CAAC;IACnB,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACjB,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IACrB,CAAC;SAAM,IAAI,MAAM,GAAG,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAChB,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAChB,wEAAwE;QACxE,wEAAwE;QACxE,iEAAiE;QACjE,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAe;IACvD,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/B,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzB,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAUD,qFAAqF;AACrF,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;IAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrF,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAChF,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,WAAW;IACd,QAAQ,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa,CAAqB;IAEnD;;;;OAIG;IACH,YAAY,aAAsB;QAChC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,2DAA2D;IAC3D,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAqB,EAAE,CAAC;QACpC,SAAS,CAAC;YACR,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,MAAM,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,iFAAiF;IACzE,OAAO;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC7B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAExC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;QAC5B,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;QAC3B,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,wEAAwE;YACxE,gEAAgE;YAChE,MAAM,IAAI,kBAAkB,CAC1B,UAAU,CAAC,aAAa,EACxB,mFAAmF,CACpF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,yEAAyE;YACzE,uEAAuE;YACvE,MAAM,IAAI,kBAAkB,CAC1B,UAAU,CAAC,aAAa,EACxB,oEAAoE,CACrE,CAAC;QACJ,CAAC;QACD,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,kBAAkB,CAC1B,UAAU,CAAC,aAAa,EACxB,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC;YACjD,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;aAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC;YACjD,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACzC,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC5C,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,kBAAkB,CAC1B,UAAU,CAAC,MAAM,EACjB,uEAAuE,CACxE,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,GAAG,CAAC;YACb,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACpE,uEAAuE;YACvE,8DAA8D;YAC9D,MAAM,IAAI,kBAAkB,CAC1B,UAAU,CAAC,MAAM,EACjB,qBAAqB,MAAM,8CAA8C,IAAI,CAAC,aAAa,EAAE,CAC9F,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC;QAC1B,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM;YAAE,OAAO,SAAS,CAAC;QAEtD,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE5E,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QACjD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAClC,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,kBAAkB,CAC1B,UAAU,CAAC,cAAc,EACzB,qDAAqD,CACtD,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/hosting/httpHost.js
CHANGED
|
@@ -35,6 +35,21 @@
|
|
|
35
35
|
* detaches and drains without closing a socket it never opened. That is the
|
|
36
36
|
* whole difference; every other law on this page is the same either way.
|
|
37
37
|
*
|
|
38
|
+
* ── …and the same seam, inverted: `onUnhandled` ──────────────────────────────
|
|
39
|
+
* `server` lends the host a socket somebody else owns. `onUnhandled` lends the
|
|
40
|
+
* CALLER every path this host does not own on a socket the host owns. One port
|
|
41
|
+
* either way; which side binds it is the only difference. The host still never
|
|
42
|
+
* answers for the application — with this hook it no longer has to 404 for it
|
|
43
|
+
* either. Refused alongside `server`, where unmatched paths are already the
|
|
44
|
+
* caller's and a second answer would just race the first.
|
|
45
|
+
*
|
|
46
|
+
* ── The law under all of it ──────────────────────────────────────────────────
|
|
47
|
+
* **Nothing in a request's lifecycle may ever be the process's failure.** Every
|
|
48
|
+
* listener body on this page that computes is wrapped, because node calls them
|
|
49
|
+
* from its own stack and a throw there is uncaught — the death of a container,
|
|
50
|
+
* bought with one malformed request. Stated in full at `readJson`, which is
|
|
51
|
+
* where the field found it.
|
|
52
|
+
*
|
|
38
53
|
* ── The third door: a conversation ───────────────────────────────────────────
|
|
39
54
|
* `serveConversations(handler)` sits beside `serve(handler)` and takes upgrades
|
|
40
55
|
* on `conversationPath`, because `HostRequest → HostReply` is one exchange and
|
|
@@ -140,8 +155,27 @@ function httpHost(options) {
|
|
|
140
155
|
`an address, and this host binds nothing when you pass one. Drop the port/hostname, ` +
|
|
141
156
|
`or drop the server and let this host bind its own socket.`);
|
|
142
157
|
}
|
|
158
|
+
// Refused at construction for the same reason and in the same breath: on a
|
|
159
|
+
// server the caller owns, unmatched paths ALREADY reach their own listeners,
|
|
160
|
+
// so a hook for them here is a second answer to one question and the winner
|
|
161
|
+
// would be whichever listener was registered first.
|
|
162
|
+
const onUnhandled = options.onUnhandled;
|
|
163
|
+
if (ownServer && onUnhandled !== undefined) {
|
|
164
|
+
throw new Error(`[hosting] httpHost('${name}') was given both a caller-owned 'server' and an ` +
|
|
165
|
+
`'onUnhandled'. On a server you own, a path this host does not own is already yours — ` +
|
|
166
|
+
`it falls through to your own 'request' listeners untouched — so this hook would be a ` +
|
|
167
|
+
`second answer to the same question. Route unmatched paths on your server, or drop ` +
|
|
168
|
+
`'server' and let this host own the socket and hand you what it does not answer.`);
|
|
169
|
+
}
|
|
143
170
|
const port = options.port ?? 8080;
|
|
144
171
|
const hostname = options.hostname ?? '0.0.0.0';
|
|
172
|
+
/**
|
|
173
|
+
* The paths this host answers on. Everything else is unowned and may be
|
|
174
|
+
* handed to `onUnhandled` — the conversation path included in the ownership,
|
|
175
|
+
* because a door that takes upgrades still OWNS its path when something
|
|
176
|
+
* arrives on it that is not one.
|
|
177
|
+
*/
|
|
178
|
+
const ownsPath = (path) => path === invokePath || path === healthPath || path === conversationPath;
|
|
145
179
|
// A door that exists is a capability that can be honoured; one built without
|
|
146
180
|
// a path is not, and says so rather than being discovered at runtime.
|
|
147
181
|
const capabilities = options.capabilities ??
|
|
@@ -256,11 +290,29 @@ function httpHost(options) {
|
|
|
256
290
|
accepting: () => accepting,
|
|
257
291
|
});
|
|
258
292
|
const onUpgrade = (request, socketOfConversation) => {
|
|
259
|
-
|
|
293
|
+
// THE LAW again, on the other door: an `'upgrade'` listener runs on
|
|
294
|
+
// node's own stack too, so a throw here is uncaught and would end every
|
|
295
|
+
// OTHER conversation — and every request — for one bad handshake.
|
|
296
|
+
let claimed;
|
|
297
|
+
try {
|
|
298
|
+
claimed = door.handleUpgrade(request, socketOfConversation);
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
// The door answers its own refusals; anything that got past them
|
|
302
|
+
// costs THIS socket and nothing else.
|
|
303
|
+
socketOfConversation.destroy();
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
if (claimed)
|
|
260
307
|
return;
|
|
261
308
|
// Not our path. On the caller's server that is theirs to answer or to
|
|
262
309
|
// ignore, exactly as an unmatched request path is; on ours nobody else
|
|
263
310
|
// can, so leaving the socket hanging would be the one dishonest option.
|
|
311
|
+
//
|
|
312
|
+
// `onUnhandled` deliberately does NOT extend here: it is a hook for
|
|
313
|
+
// ROUTES, and an upgrade is a protocol handover with a socket to answer
|
|
314
|
+
// by hand rather than a response to write. An unclaimed upgrade on a
|
|
315
|
+
// private socket keeps exactly the answer it has always had.
|
|
264
316
|
if (ownServer)
|
|
265
317
|
return;
|
|
266
318
|
socketOfConversation.end('HTTP/1.1 400 Bad Request\r\nconnection: close\r\n\r\n' +
|
|
@@ -312,7 +364,7 @@ function httpHost(options) {
|
|
|
312
364
|
const inFlight = new Set();
|
|
313
365
|
let accepting = true;
|
|
314
366
|
let closing;
|
|
315
|
-
const
|
|
367
|
+
const route = (req, res) => {
|
|
316
368
|
// On a shared server an earlier listener may already have answered.
|
|
317
369
|
// Writing again would corrupt its reply; there is nothing to add.
|
|
318
370
|
if (res.headersSent)
|
|
@@ -328,6 +380,15 @@ function httpHost(options) {
|
|
|
328
380
|
// and a 404 from us would answer for their application.
|
|
329
381
|
if (ownServer)
|
|
330
382
|
return;
|
|
383
|
+
// …and on a socket THIS host owns, the caller can still claim the
|
|
384
|
+
// paths it does not: their code, here, INSTEAD of our 404. What the
|
|
385
|
+
// host owns never reaches them — a wrong method on an owned path is
|
|
386
|
+
// still this host's question to answer, and a route that could shadow
|
|
387
|
+
// a door would be a second door with the same name.
|
|
388
|
+
if (onUnhandled !== undefined && !ownsPath(path)) {
|
|
389
|
+
onUnhandled(req, res);
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
331
392
|
sendJson(res, 404, wire.failure(`no route for ${req.method ?? '?'} ${path}`));
|
|
332
393
|
return;
|
|
333
394
|
}
|
|
@@ -338,8 +399,23 @@ function httpHost(options) {
|
|
|
338
399
|
}
|
|
339
400
|
const served = serveOne(req, res, handler, wire);
|
|
340
401
|
inFlight.add(served);
|
|
402
|
+
// `serveOne` never rejects, by construction — see its doc.
|
|
341
403
|
void served.finally(() => inFlight.delete(served));
|
|
342
404
|
};
|
|
405
|
+
// THE LAW (see `readJson`): nothing in a request's lifecycle may ever be
|
|
406
|
+
// the process's failure. Routing computes — a wire's `health()`, a body
|
|
407
|
+
// that has to stringify, a caller's `onUnhandled` — and every one of
|
|
408
|
+
// those is somebody else's code running on node's own stack, where a
|
|
409
|
+
// throw is uncaught. So the whole body is wrapped, and whatever went
|
|
410
|
+
// wrong is answered to the request that caused it.
|
|
411
|
+
const onRequest = (req, res) => {
|
|
412
|
+
try {
|
|
413
|
+
route(req, res);
|
|
414
|
+
}
|
|
415
|
+
catch (err) {
|
|
416
|
+
failSafely(res, wire, err);
|
|
417
|
+
}
|
|
418
|
+
};
|
|
343
419
|
const server = await acquireSocket();
|
|
344
420
|
server.on('request', onRequest);
|
|
345
421
|
let where;
|
|
@@ -384,8 +460,26 @@ function httpHost(options) {
|
|
|
384
460
|
};
|
|
385
461
|
}
|
|
386
462
|
exports.httpHost = httpHost;
|
|
387
|
-
/**
|
|
463
|
+
/**
|
|
464
|
+
* Run one request through the handler and write whatever it decides.
|
|
465
|
+
*
|
|
466
|
+
* Total by construction: this promise NEVER rejects. It is held in a Set and
|
|
467
|
+
* voided at the call site, so a rejection would be an unhandled rejection —
|
|
468
|
+
* which on node's defaults is the same crash the law above forbids, reached by
|
|
469
|
+
* a different road.
|
|
470
|
+
*/
|
|
388
471
|
async function serveOne(req, res, handler, wire) {
|
|
472
|
+
try {
|
|
473
|
+
await dispatchOne(req, res, handler, wire);
|
|
474
|
+
}
|
|
475
|
+
catch (err) {
|
|
476
|
+
// Everything inside answers its own failures; anything that got past them
|
|
477
|
+
// — a dialect that threw, a body that would not stringify — is still this
|
|
478
|
+
// REQUEST's failure and not the process's.
|
|
479
|
+
failSafely(res, wire, err);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
async function dispatchOne(req, res, handler, wire) {
|
|
389
483
|
const wantsStream = (req.headers.accept ?? '').includes('text/event-stream');
|
|
390
484
|
const controller = new AbortController();
|
|
391
485
|
let body;
|
|
@@ -410,8 +504,15 @@ async function serveOne(req, res, handler, wire) {
|
|
|
410
504
|
// The caller hung up before we answered — tell the handler so it can stop
|
|
411
505
|
// paying for work nobody is waiting for.
|
|
412
506
|
res.once('close', () => {
|
|
413
|
-
|
|
414
|
-
|
|
507
|
+
try {
|
|
508
|
+
if (!settled)
|
|
509
|
+
controller.abort();
|
|
510
|
+
}
|
|
511
|
+
catch {
|
|
512
|
+
// An abort listener the HANDLER installed threw while being told the
|
|
513
|
+
// caller left. That is a fault in somebody's teardown, and a fault in
|
|
514
|
+
// teardown is not a reason for this process to stop serving everyone.
|
|
515
|
+
}
|
|
415
516
|
});
|
|
416
517
|
const reply = {
|
|
417
518
|
emit(chunk) {
|
|
@@ -492,21 +593,59 @@ async function serveOne(req, res, handler, wire) {
|
|
|
492
593
|
reply.fail(new Error('[hosting] the handler returned without calling complete() or fail().'));
|
|
493
594
|
}
|
|
494
595
|
}
|
|
596
|
+
/**
|
|
597
|
+
* The body, as JSON — and never as the process's failure.
|
|
598
|
+
*
|
|
599
|
+
* ── A chunk is not always a Buffer ───────────────────────────────────────────
|
|
600
|
+
* `'data'` delivers whatever encoding the stream is in, and the encoding is not
|
|
601
|
+
* this host's to assume. Anything else holding the same request may have called
|
|
602
|
+
* `req.setEncoding(...)` — a co-listener on a shared server, a framework that
|
|
603
|
+
* installs its own catch-all `'request'` handler — and from that moment every
|
|
604
|
+
* chunk arrives as a STRING. `Buffer.concat` on strings throws, and it threw
|
|
605
|
+
* INSIDE the `'end'` listener. Field-reported, and process-fatal: see the law
|
|
606
|
+
* below.
|
|
607
|
+
*
|
|
608
|
+
* A string chunk is coerced back rather than refused, and no bytes are lost
|
|
609
|
+
* doing it: `setEncoding` decodes through a `StringDecoder`, which holds a
|
|
610
|
+
* partial multi-byte sequence across a chunk boundary rather than splitting it,
|
|
611
|
+
* so what arrives is whole text and `Buffer.from(chunk, 'utf8')` reproduces
|
|
612
|
+
* exactly the bytes that were sent.
|
|
613
|
+
*
|
|
614
|
+
* ── THE LAW, stated where it was broken ─────────────────────────────────────
|
|
615
|
+
* **Nothing in a request's lifecycle may ever be the process's failure.**
|
|
616
|
+
* `node:http` calls these listeners from its own stack: a throw inside one is
|
|
617
|
+
* not a rejected promise anybody awaits and not an exception anybody catches —
|
|
618
|
+
* it is an UNCAUGHT exception, and an uncaught exception ends the process. One
|
|
619
|
+
* malformed request would take every other request with it, every open
|
|
620
|
+
* conversation, and — on the shared socket this file exists for — everything
|
|
621
|
+
* else the container was serving.
|
|
622
|
+
*
|
|
623
|
+
* So every listener body here that COMPUTES is wrapped, not just the line that
|
|
624
|
+
* was found to break: a surprise this file has not imagined yet becomes THIS
|
|
625
|
+
* REQUEST's 400 or 500, the failure of the thing that caused it.
|
|
626
|
+
*/
|
|
495
627
|
function readJson(req) {
|
|
496
628
|
return new Promise((resolve, reject) => {
|
|
497
629
|
const chunks = [];
|
|
498
|
-
req.on('data', (c) =>
|
|
630
|
+
req.on('data', (c) => {
|
|
631
|
+
try {
|
|
632
|
+
chunks.push(typeof c === 'string' ? Buffer.from(c, 'utf8') : c);
|
|
633
|
+
}
|
|
634
|
+
catch (err) {
|
|
635
|
+
reject(asError(err));
|
|
636
|
+
}
|
|
637
|
+
});
|
|
499
638
|
req.on('error', reject);
|
|
500
639
|
req.on('end', () => {
|
|
501
|
-
const raw = Buffer.concat(chunks).toString('utf8');
|
|
502
|
-
if (!raw)
|
|
503
|
-
return resolve({});
|
|
504
640
|
try {
|
|
641
|
+
const raw = Buffer.concat(chunks).toString('utf8');
|
|
642
|
+
if (!raw)
|
|
643
|
+
return resolve({});
|
|
505
644
|
const parsed = JSON.parse(raw);
|
|
506
645
|
resolve(parsed && typeof parsed === 'object' ? parsed : {});
|
|
507
646
|
}
|
|
508
647
|
catch (err) {
|
|
509
|
-
reject(err);
|
|
648
|
+
reject(asError(err));
|
|
510
649
|
}
|
|
511
650
|
});
|
|
512
651
|
});
|
|
@@ -515,6 +654,43 @@ function sendJson(res, status, body) {
|
|
|
515
654
|
res.writeHead(status, { 'content-type': 'application/json' });
|
|
516
655
|
res.end(JSON.stringify(body));
|
|
517
656
|
}
|
|
657
|
+
/**
|
|
658
|
+
* The last answer a request can be given: its own 500.
|
|
659
|
+
*
|
|
660
|
+
* This is the floor under the law — reached where the ORDINARY reply path is
|
|
661
|
+
* what went wrong (a dialect that threw, a body that would not stringify, a
|
|
662
|
+
* caller's route handler that raised), so it assumes as little as possible and
|
|
663
|
+
* cannot itself throw.
|
|
664
|
+
*
|
|
665
|
+
* A response already committed to the wire is ENDED rather than overwritten:
|
|
666
|
+
* two half-answers on one socket is worse than one answer that stopped early,
|
|
667
|
+
* and a status line cannot be taken back.
|
|
668
|
+
*/
|
|
669
|
+
function failSafely(res, wire, err) {
|
|
670
|
+
const message = asError(err).message;
|
|
671
|
+
try {
|
|
672
|
+
if (res.writableEnded)
|
|
673
|
+
return;
|
|
674
|
+
if (res.headersSent) {
|
|
675
|
+
res.end();
|
|
676
|
+
return;
|
|
677
|
+
}
|
|
678
|
+
let body;
|
|
679
|
+
try {
|
|
680
|
+
body = JSON.stringify(wire.failure(message));
|
|
681
|
+
}
|
|
682
|
+
catch {
|
|
683
|
+
// The DIALECT is what broke. Answer in the one shape nothing can refuse.
|
|
684
|
+
body = JSON.stringify({ error: message });
|
|
685
|
+
}
|
|
686
|
+
res.writeHead(500, { 'content-type': 'application/json' });
|
|
687
|
+
res.end(body);
|
|
688
|
+
}
|
|
689
|
+
catch {
|
|
690
|
+
// The socket went away while we were answering it. There is nothing left
|
|
691
|
+
// to say, and nothing here that is the process's business either.
|
|
692
|
+
}
|
|
693
|
+
}
|
|
518
694
|
function asError(err) {
|
|
519
695
|
return err instanceof Error ? err : new Error(String(err));
|
|
520
696
|
}
|