@procedures/client 0.17.3 → 0.18.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/CHANGELOG.md +48 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/adapters/http/client/transport.d.ts.map +1 -1
- package/dist/adapters/http/client/transport.js +9 -6
- package/dist/adapters/http/client/transport.js.map +1 -1
- package/dist/adapters/http/server/handler.d.ts.map +1 -1
- package/dist/adapters/http/server/handler.js +5 -23
- package/dist/adapters/http/server/handler.js.map +1 -1
- package/dist/adapters/http/server/transport.d.ts +2 -2
- package/dist/adapters/http/server/transport.js +2 -2
- package/dist/adapters/websocket/shared/rpc.d.ts.map +1 -1
- package/dist/adapters/websocket/shared/rpc.js +4 -2
- package/dist/adapters/websocket/shared/rpc.js.map +1 -1
- package/dist/client/middleware/items.d.ts.map +1 -1
- package/dist/client/middleware/items.js +2 -0
- package/dist/client/middleware/items.js.map +1 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +24 -0
- package/dist/protocol.js.map +1 -1
- package/dist/server/browser-guard.d.ts +13 -3
- package/dist/server/browser-guard.d.ts.map +1 -1
- package/dist/server/browser-guard.js +11 -5
- package/dist/server/browser-guard.js.map +1 -1
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +3 -2
- package/dist/server/server.js.map +1 -1
- package/dist/server/types.d.ts +2 -1
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +3 -2
- package/dist/server/types.js.map +1 -1
- package/package.json +2 -2
- package/src/adapters/http/client/transport.ts +9 -6
- package/src/adapters/http/server/handler.ts +9 -28
- package/src/adapters/http/server/transport.ts +2 -2
- package/src/adapters/websocket/shared/rpc.ts +4 -2
- package/src/client/middleware/items.ts +2 -0
- package/src/protocol.ts +26 -0
- package/src/server/browser-guard.ts +27 -7
- package/src/server/server.ts +3 -2
- package/src/server/types.ts +3 -2
|
@@ -18,8 +18,14 @@
|
|
|
18
18
|
* - A request with ambient credentials (the cookies that a browser sends by itself) is trusted
|
|
19
19
|
* only from a named origin. `"*"` does not open the origin check for it (CSRF). A list or a
|
|
20
20
|
* function of origins still does.
|
|
21
|
+
*
|
|
22
|
+
* Each refusal is the error `FORBIDDEN` of wire v1, with the status 403 and a reason (CLI-4).
|
|
21
23
|
*/
|
|
22
24
|
const LOOPBACK_NAMES = new Set(["localhost", "127.0.0.1", "::1", "[::1]"]);
|
|
25
|
+
/** The refusal of a check: the error `FORBIDDEN` of wire v1 with its reason (CLI-4). */
|
|
26
|
+
function refusal(reason, message) {
|
|
27
|
+
return { ok: false, status: 403, code: "FORBIDDEN", reason, message };
|
|
28
|
+
}
|
|
23
29
|
/** True for a host name or a bind address that only this computer can reach. */
|
|
24
30
|
export function isLoopbackHost(host) {
|
|
25
31
|
return LOOPBACK_NAMES.has(host.toLowerCase());
|
|
@@ -111,28 +117,28 @@ export function checkBrowserRequest(req, options = {}, http = false, ambient = f
|
|
|
111
117
|
if (options.allowedHosts !== "*" && isLoopbackAddress(req.socket?.localAddress)) {
|
|
112
118
|
const name = hostNameOf(headers.host);
|
|
113
119
|
if (!LOOPBACK_NAMES.has(name) && !(options.allowedHosts ?? []).includes(name)) {
|
|
114
|
-
return
|
|
120
|
+
return refusal("host-header-not-allowed", `Forbidden: the host "${name}" is not allowed`);
|
|
115
121
|
}
|
|
116
122
|
}
|
|
117
123
|
const origin = typeof headers.origin === "string" ? headers.origin : undefined;
|
|
118
124
|
if (origin !== undefined) {
|
|
119
125
|
if (!sameOrigin(origin, headers.host) && !originAllowedBy(origin, options.allowedOrigins, ambient)) {
|
|
120
|
-
return
|
|
126
|
+
return refusal("origin-not-allowed", `Forbidden: the origin "${origin}" is not allowed`);
|
|
121
127
|
}
|
|
122
128
|
}
|
|
123
129
|
else {
|
|
124
130
|
const site = headers["sec-fetch-site"];
|
|
125
131
|
if ((site === "cross-site" || site === "same-site") && (options.allowedOrigins !== "*" || ambient)) {
|
|
126
|
-
return
|
|
132
|
+
return refusal("origin-not-allowed", "Forbidden: a request from another site");
|
|
127
133
|
}
|
|
128
134
|
}
|
|
129
135
|
if (http) {
|
|
130
136
|
const method = (req.method ?? "GET").toUpperCase();
|
|
131
137
|
if ((method === "GET" || method === "HEAD") && !options.allowGet) {
|
|
132
|
-
return
|
|
138
|
+
return refusal("method-not-allowed", "Forbidden: call a procedure with POST");
|
|
133
139
|
}
|
|
134
140
|
if (hasBody(headers) && !isJsonType(headers["content-type"])) {
|
|
135
|
-
return
|
|
141
|
+
return refusal("media-type-not-allowed", "Forbidden: the request body must be JSON (Content-Type: application/json)");
|
|
136
142
|
}
|
|
137
143
|
}
|
|
138
144
|
return { ok: true };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-guard.js","sourceRoot":"","sources":["../../src/server/browser-guard.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"browser-guard.js","sourceRoot":"","sources":["../../src/server/browser-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,cAAc,EACd,aAAa,EACb,gBAAgB,EAGhB,eAAe,EAChB,MAAM,YAAY,CAAC;AAIpB;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAE/B;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAEzD;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAE7C;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CACjD;AAED;;;GAGG;AACH,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,OAAO,CAAgB;IAE/B,YAAY,OAAO,GAAE,aAAkB,EAGtC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,QAAQ,CACN,OAAO,EAAE,MAAM,GAAG,aAAa,EAC/B,OAAO,EAAE,aAAa,GACrB,IAAI,CAKN;IAED;;;;;OAKG;IACH,GAAG,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAEtC;IAED;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI,CAE7C;IAED;;;;OAIG;IACH,aAAa,IAAI,eAAe,EAAE,CAEjC;IAED;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;IAED;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;IAED;;;;;;OAMG;IACG,MAAM,CAAC,IAAI,EAAE,IAAI,EACrB,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,GAC3B,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CA4C/B;IAED;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAO1D;IAED;;OAEG;IACH,OAAO,CAAC,aAAa;IAuCrB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;OAEG;IACH,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,cAAc,EACd,aAAa,EACb,gBAAgB,EAGhB,eAAe,EAChB,MAAM,YAAY,CAAC;AAIpB;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAE/B;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAEzD;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAE7C;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CACjD;AAED;;;GAGG;AACH,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,OAAO,CAAgB;IAE/B,YAAY,OAAO,GAAE,aAAkB,EAGtC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,QAAQ,CACN,OAAO,EAAE,MAAM,GAAG,aAAa,EAC/B,OAAO,EAAE,aAAa,GACrB,IAAI,CAKN;IAED;;;;;OAKG;IACH,GAAG,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAEtC;IAED;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI,CAE7C;IAED;;;;OAIG;IACH,aAAa,IAAI,eAAe,EAAE,CAEjC;IAED;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;IAED;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;IAED;;;;;;OAMG;IACG,MAAM,CAAC,IAAI,EAAE,IAAI,EACrB,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,GAC3B,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CA4C/B;IAED;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAO1D;IAED;;OAEG;IACH,OAAO,CAAC,aAAa;IAuCrB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;OAEG;IACH,OAAO,CAAC,eAAe;CA0CxB"}
|
package/dist/server/server.js
CHANGED
|
@@ -263,12 +263,13 @@ export class Server {
|
|
|
263
263
|
metadata: {},
|
|
264
264
|
};
|
|
265
265
|
}
|
|
266
|
-
//
|
|
266
|
+
// Another error: the server failed outside a handler of the protocol. The code is of wire v1
|
|
267
|
+
// (CLI-4: before, the code was the string "500").
|
|
267
268
|
return {
|
|
268
269
|
id,
|
|
269
270
|
status: {
|
|
270
271
|
type: "error",
|
|
271
|
-
code: "
|
|
272
|
+
code: "INTERNAL_ERROR",
|
|
272
273
|
message: error.message || "Internal server error",
|
|
273
274
|
retryable: false,
|
|
274
275
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
|
package/dist/server/types.d.ts
CHANGED
|
@@ -212,7 +212,8 @@ export declare class HandlerNotFoundError extends Error {
|
|
|
212
212
|
constructor(method: Method);
|
|
213
213
|
}
|
|
214
214
|
/**
|
|
215
|
-
*
|
|
215
|
+
* A server error with an error code. The default code is `INTERNAL_ERROR` of wire v1 (CLI-4:
|
|
216
|
+
* before, the default was the string `"500"`).
|
|
216
217
|
*/
|
|
217
218
|
export declare class ServerError extends Error {
|
|
218
219
|
readonly code: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"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"}
|
package/dist/server/types.js
CHANGED
|
@@ -15,12 +15,13 @@ export class HandlerNotFoundError extends Error {
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* A server error with an error code. The default code is `INTERNAL_ERROR` of wire v1 (CLI-4:
|
|
19
|
+
* before, the default was the string `"500"`).
|
|
19
20
|
*/
|
|
20
21
|
export class ServerError extends Error {
|
|
21
22
|
code;
|
|
22
23
|
retryable;
|
|
23
|
-
constructor(message, code = "
|
|
24
|
+
constructor(message, code = "INTERNAL_ERROR", retryable = false) {
|
|
24
25
|
super(message);
|
|
25
26
|
this.code = code;
|
|
26
27
|
this.retryable = retryable;
|
package/dist/server/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiPzC;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,MAAc;QACxB,KAAK,CACH,wBAAwB,UAAU,CAAC,MAAM,CAAC,GACxC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAC7C,EAAE,CACH,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiPzC;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,MAAc;QACxB,KAAK,CACH,wBAAwB,UAAU,CAAC,MAAM,CAAC,GACxC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAC7C,EAAE,CACH,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGlB,IAAI;IACJ,SAAS;IAH3B,YACE,OAAe,EACC,IAAI,GAAW,gBAAgB,EAC/B,SAAS,GAAY,KAAK;QAE1C,KAAK,CAAC,OAAO,CAAC,CAAC;oBAHC,IAAI;yBACJ,SAAS;QAGzB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package",
|
|
3
3
|
"name": "@procedures/client",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.18.0",
|
|
5
5
|
"description": "Procedures as data for TypeScript: define typed procedures once and call them in process, over HTTP, WebSocket, the CLI or MCP. Streaming, middleware, retries, caching and a JSON program format.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"rpc",
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
"dependencies": {
|
|
109
109
|
"@mark1russell7/algebra": "^0.7.1",
|
|
110
110
|
"@mark1russell7/quantity": "^0.2.0",
|
|
111
|
-
"@mark1russell7/service": "^0.5.
|
|
111
|
+
"@mark1russell7/service": "^0.5.8",
|
|
112
112
|
"@types/ws": "^8.18.1",
|
|
113
113
|
"ws": "^8.18.3",
|
|
114
114
|
"zod": "^4.6.5"
|
|
@@ -49,7 +49,7 @@ import {
|
|
|
49
49
|
createErrorFromException,
|
|
50
50
|
} from "../shared/index.js";
|
|
51
51
|
import { optionalMs } from "../../../duration.js";
|
|
52
|
-
import { PROTOCOL_HEADER, PROTOCOL_VERSION } from "../../../protocol.js";
|
|
52
|
+
import { PROTOCOL_HEADER, PROTOCOL_VERSION, foldedErrorCode } from "../../../protocol.js";
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
55
|
* HTTP Client Transport
|
|
@@ -186,9 +186,11 @@ export class HttpTransport implements Transport {
|
|
|
186
186
|
if (status.type === "error") {
|
|
187
187
|
const retryAfter = retryAfterMsOf(response.headers.get("Retry-After"), responseBody);
|
|
188
188
|
if (retryAfter !== undefined) metadata[RETRY_AFTER_METADATA_KEY] = retryAfter;
|
|
189
|
-
// The reason of a FORBIDDEN error (roadmap R25)
|
|
190
|
-
|
|
191
|
-
|
|
189
|
+
// The reason of a FORBIDDEN error (roadmap R25). An older server gave the reason in its
|
|
190
|
+
// code (CLI-4): FORBIDDEN_ORIGIN gives FORBIDDEN with the reason origin-not-allowed.
|
|
191
|
+
const body = responseBody as { reason?: unknown; code?: unknown } | null | undefined;
|
|
192
|
+
const reason = typeof body?.reason === "string" ? body.reason : typeof body?.code === "string" ? foldedErrorCode(body.code).reason : undefined;
|
|
193
|
+
if (reason !== undefined) metadata["reason"] = reason;
|
|
192
194
|
// The current items of a VERSION_CONFLICT error (roadmap CLI-16)
|
|
193
195
|
const conflicts = (responseBody as { conflicts?: unknown } | null | undefined)?.conflicts;
|
|
194
196
|
if (Array.isArray(conflicts)) metadata["conflicts"] = conflicts;
|
|
@@ -289,7 +291,7 @@ export class HttpTransport implements Transport {
|
|
|
289
291
|
id,
|
|
290
292
|
status: {
|
|
291
293
|
type: "error",
|
|
292
|
-
code: frame.error?.code ?? "HANDLER_ERROR",
|
|
294
|
+
code: foldedErrorCode(frame.error?.code ?? "HANDLER_ERROR").code,
|
|
293
295
|
message: frame.error?.message ?? "Unknown error",
|
|
294
296
|
retryable: frame.error?.retryable ?? false,
|
|
295
297
|
},
|
|
@@ -334,7 +336,8 @@ export class HttpTransport implements Transport {
|
|
|
334
336
|
|
|
335
337
|
return {
|
|
336
338
|
type: "error",
|
|
337
|
-
|
|
339
|
+
// A code of an older server becomes its code of wire v1 (CLI-4): SERVER_STOPPED is UNAVAILABLE
|
|
340
|
+
code: typeof serverError?.code === "string" ? foldedErrorCode(serverError.code).code : errorDetails.code,
|
|
338
341
|
message: typeof serverError?.error === "string" ? serverError.error : errorDetails.message,
|
|
339
342
|
retryable: typeof serverError?.retryable === "boolean" ? serverError.retryable : errorDetails.retryable,
|
|
340
343
|
};
|
|
@@ -21,7 +21,8 @@ import type { Metadata, Method } from "../../../client/types.js";
|
|
|
21
21
|
import type { RequestHandler, ServerRequest, ServerResponse } from "../../../server/types.js";
|
|
22
22
|
import { decodeMetadataHeader, METADATA_HEADER_LIMIT } from "../shared/index.js";
|
|
23
23
|
import { ERROR_REGISTRY } from "../../../client/errors/index.js";
|
|
24
|
-
import { assertNamedOrigins, checkBrowserRequest, needsNamedOrigin, type BrowserGuardOptions
|
|
24
|
+
import { assertNamedOrigins, checkBrowserRequest, needsNamedOrigin, type BrowserGuardOptions } from "../../../server/browser-guard.js";
|
|
25
|
+
import { isUnboundedStream } from "../../../server/procedure-server.js";
|
|
25
26
|
import { headerNames, isSecretHeader, queryRecord, requestCredentials, urlParts, withoutSecretHeaders } from "../../../server/request-auth.js";
|
|
26
27
|
import { PROTOCOL_HEADER, PROTOCOL_VERSION, httpStatusOf, protocolVersionOf } from "../../../protocol.js";
|
|
27
28
|
import { realClock, type Cancel, type Clock } from "../../../clock.js";
|
|
@@ -150,9 +151,9 @@ export interface NodeProcedureHandler {
|
|
|
150
151
|
*/
|
|
151
152
|
export interface HandlerCompat {
|
|
152
153
|
/**
|
|
153
|
-
* True: the
|
|
154
|
-
*
|
|
155
|
-
*
|
|
154
|
+
* True: the behavior of `HttpServerTransport` before the handler. An `OPTIONS` request goes to
|
|
155
|
+
* the procedures, and the query parameter `token` stays in the metadata. The error codes are the
|
|
156
|
+
* codes of wire v1, as for a new mount (CLI-4).
|
|
156
157
|
*/
|
|
157
158
|
readonly legacy?: boolean | undefined;
|
|
158
159
|
/** The method of a request: the URL strategy of Express. */
|
|
@@ -167,11 +168,6 @@ export interface HandlerCompat {
|
|
|
167
168
|
readonly face?: { readonly name: string; readonly originOption: string } | undefined;
|
|
168
169
|
}
|
|
169
170
|
|
|
170
|
-
/** True when a stream response has no end (`STREAM_METADATA_KEY` of procedure-server.ts). */
|
|
171
|
-
function isUnboundedStream(response: { metadata?: Record<string, unknown> | undefined }): boolean {
|
|
172
|
-
return response.metadata?.["stream"] === "unbounded";
|
|
173
|
-
}
|
|
174
|
-
|
|
175
171
|
/** The metadata keys that the transport sets: a query parameter or a header cannot replace them. */
|
|
176
172
|
const RESERVED_METADATA = new Set(["headers", "query", "params"]);
|
|
177
173
|
|
|
@@ -201,14 +197,6 @@ const STANDARD_HEADERS = new Set([
|
|
|
201
197
|
/** The known custom headers whose metadata key is not the header name (lower case to camel case). */
|
|
202
198
|
const HEADER_MAPPINGS: Record<string, string> = { collectionname: "collectionName" };
|
|
203
199
|
|
|
204
|
-
/** The reasons of the `FORBIDDEN` errors of the browser checks (wire v1). */
|
|
205
|
-
const GUARD_REASONS: Record<string, string> = {
|
|
206
|
-
FORBIDDEN_HOST: "host-header-not-allowed",
|
|
207
|
-
FORBIDDEN_ORIGIN: "origin-not-allowed",
|
|
208
|
-
METHOD_NOT_ALLOWED: "method-not-allowed",
|
|
209
|
-
UNSUPPORTED_MEDIA_TYPE: "media-type-not-allowed",
|
|
210
|
-
};
|
|
211
|
-
|
|
212
200
|
/** This function sets a key as an own property, also the key `__proto__` (the `put` of the query language). */
|
|
213
201
|
function put(target: Record<string, unknown>, key: string, value: unknown): void {
|
|
214
202
|
Object.defineProperty(target, key, { value, enumerable: true, writable: true, configurable: true });
|
|
@@ -336,14 +324,6 @@ export function createProcedureHandler(server: RequestHandler, options: Procedur
|
|
|
336
324
|
sendJson(res, status, { error: message, code, retryable, ...more });
|
|
337
325
|
};
|
|
338
326
|
|
|
339
|
-
const refuseGuard = (res: NodeResponse, refusal: Extract<GuardResult, { ok: false }>): void => {
|
|
340
|
-
if (legacy) {
|
|
341
|
-
sendError(res, refusal.status, refusal.message, refusal.code);
|
|
342
|
-
return;
|
|
343
|
-
}
|
|
344
|
-
sendError(res, 403, refusal.message, "FORBIDDEN", false, { reason: GUARD_REASONS[refusal.code] ?? refusal.code.toLowerCase() });
|
|
345
|
-
};
|
|
346
|
-
|
|
347
327
|
/**
|
|
348
328
|
* The request body. A body parser of a framework (`express.json({ strict: false })`) gives
|
|
349
329
|
* `req.body`. Without one, the handler reads the JSON body itself (deep dive TRN-10).
|
|
@@ -525,9 +505,9 @@ export function createProcedureHandler(server: RequestHandler, options: Procedur
|
|
|
525
505
|
});
|
|
526
506
|
return;
|
|
527
507
|
}
|
|
508
|
+
// A stopped handler and the shim give the same code (CLI-4: before, the shim gave SERVER_STOPPED)
|
|
528
509
|
if (stopped) {
|
|
529
|
-
|
|
530
|
-
else sendError(res, 503, "The server is stopping", "UNAVAILABLE", true);
|
|
510
|
+
sendError(res, 503, "The server is stopping", "UNAVAILABLE", true);
|
|
531
511
|
return;
|
|
532
512
|
}
|
|
533
513
|
// A preflight without CORS: no procedure runs for it, and the browser sees no CORS header
|
|
@@ -540,9 +520,10 @@ export function createProcedureHandler(server: RequestHandler, options: Procedur
|
|
|
540
520
|
// Ambient credentials (cookies) are trusted only from a named origin. The shim keeps its former
|
|
541
521
|
// checks for a server that reads no cookies.
|
|
542
522
|
const ambient = needsNamedOrigin(ambientMode, req.headers, !legacy);
|
|
523
|
+
// A refusal is FORBIDDEN with its reason, also in the shim (CLI-4)
|
|
543
524
|
const check = checkBrowserRequest(req, guard, true, ambient);
|
|
544
525
|
if (!check.ok) {
|
|
545
|
-
|
|
526
|
+
sendError(res, check.status, check.message, check.code, false, { reason: check.reason });
|
|
546
527
|
return;
|
|
547
528
|
}
|
|
548
529
|
// A closed connection or close() aborts the request: a stream stops, and its handler gets return()
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* The transport mounts the procedure handler of `handler.ts` on an Express app, with the CORS of
|
|
5
5
|
* the app, and it owns its own `node:http` server unless the caller gives one. The handler does
|
|
6
6
|
* the work: the request, the body, the metadata, the credentials, the response and the NDJSON
|
|
7
|
-
* streams. The
|
|
8
|
-
* browser
|
|
7
|
+
* streams. The error codes are the codes of wire v1, as for `procedureHandler` (CLI-4). A stopped
|
|
8
|
+
* transport answers `UNAVAILABLE`, and a refused browser request gets `FORBIDDEN` with a reason.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import type { Request, Response, Express } from "express";
|
|
@@ -17,6 +17,7 @@ import type { WebSocketMessage } from "../server/types.js";
|
|
|
17
17
|
import { withoutInternalKeys } from "../../metadata.js";
|
|
18
18
|
import { StreamSequence, gapOf, itemMetadata } from "../../sequence.js";
|
|
19
19
|
import { DELIVERY_METADATA_KEY } from "../../../client/middleware/items.js";
|
|
20
|
+
import { foldedErrorCode } from "../../../protocol.js";
|
|
20
21
|
|
|
21
22
|
/**
|
|
22
23
|
* A queue of response items that one reader takes in order: push, then end or fail. The reader
|
|
@@ -122,13 +123,14 @@ function textOf(value: unknown): string {
|
|
|
122
123
|
export function itemOfFrame(frame: WebSocketMessage, messageId: string): ResponseItem<unknown> {
|
|
123
124
|
let status: ResponseItem<unknown>["status"];
|
|
124
125
|
if (frame.status && frame.status.type === "error") {
|
|
125
|
-
|
|
126
|
+
// A code of an older server becomes its code of wire v1 (CLI-4): "500" is INTERNAL_ERROR
|
|
127
|
+
status = { type: "error", code: foldedErrorCode(String(frame.status.code)).code, message: textOf(frame.status.message), retryable: frame.status.retryable || false };
|
|
126
128
|
} else if (frame.status && frame.status.type === "success") {
|
|
127
129
|
status = { type: "success", code: Number(frame.status.code) };
|
|
128
130
|
} else if (frame.type === "error") {
|
|
129
131
|
status = {
|
|
130
132
|
type: "error",
|
|
131
|
-
code: String(frame.error?.code || "UNKNOWN_ERROR"),
|
|
133
|
+
code: foldedErrorCode(String(frame.error?.code || "UNKNOWN_ERROR")).code,
|
|
132
134
|
message: textOf(frame.error?.message),
|
|
133
135
|
retryable: frame.error?.retryable || false,
|
|
134
136
|
};
|
|
@@ -55,6 +55,8 @@ export function retryAfterOf(item: ResponseItem<unknown>): number | undefined {
|
|
|
55
55
|
const AVAILABILITY_CODES = new Set([
|
|
56
56
|
"UNAVAILABLE",
|
|
57
57
|
"TIMEOUT",
|
|
58
|
+
// The code of a stopped server before CLI-4. It is UNAVAILABLE now. The next breaking release
|
|
59
|
+
// of the client group removes it.
|
|
58
60
|
"SERVER_STOPPED",
|
|
59
61
|
"SERVICE_UNAVAILABLE",
|
|
60
62
|
"BAD_GATEWAY",
|
package/src/protocol.ts
CHANGED
|
@@ -101,6 +101,32 @@ export function errorCodeOf(error: unknown): string {
|
|
|
101
101
|
return typeof code === "string" ? code : "HANDLER_ERROR";
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
/** The codes that a server before CLI-4 gave, and the code and the reason of wire v1 for each. */
|
|
105
|
+
const FOLDED_ERROR_CODES: ReadonlyMap<string, { readonly code: ProtocolErrorCode; readonly reason?: string }> = new Map([
|
|
106
|
+
["SERVER_STOPPED", { code: "UNAVAILABLE" }],
|
|
107
|
+
["FORBIDDEN_HOST", { code: "FORBIDDEN", reason: "host-header-not-allowed" }],
|
|
108
|
+
["FORBIDDEN_ORIGIN", { code: "FORBIDDEN", reason: "origin-not-allowed" }],
|
|
109
|
+
["500", { code: "INTERNAL_ERROR" }],
|
|
110
|
+
]);
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* This function gives the code of wire v1 for an error code that a server before CLI-4 gave, and
|
|
114
|
+
* the reason of a `FORBIDDEN` error. For each other code, it gives the code and no reason. The
|
|
115
|
+
* client reads an old code as its new code, so an application can match the new code also with an
|
|
116
|
+
* older server.
|
|
117
|
+
*
|
|
118
|
+
* `METHOD_NOT_ALLOWED` and `UNSUPPORTED_MEDIA_TYPE` stay: they are also the codes of the HTTP
|
|
119
|
+
* statuses 405 and 415 of each server.
|
|
120
|
+
*
|
|
121
|
+
* The client reads the old codes for one release. The next breaking release of the client group
|
|
122
|
+
* removes this function.
|
|
123
|
+
*
|
|
124
|
+
* @internal
|
|
125
|
+
*/
|
|
126
|
+
export function foldedErrorCode(code: string): { readonly code: string; readonly reason?: string | undefined } {
|
|
127
|
+
return FOLDED_ERROR_CODES.get(code) ?? { code };
|
|
128
|
+
}
|
|
129
|
+
|
|
104
130
|
/** The HTTP status of an error code, or undefined for a code that is not in the list. */
|
|
105
131
|
export function httpStatusOf(code: unknown): number | undefined {
|
|
106
132
|
return isProtocolErrorCode(code) ? ERROR_CODES[code].http : undefined;
|
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
* - A request with ambient credentials (the cookies that a browser sends by itself) is trusted
|
|
19
19
|
* only from a named origin. `"*"` does not open the origin check for it (CSRF). A list or a
|
|
20
20
|
* function of origins still does.
|
|
21
|
+
*
|
|
22
|
+
* Each refusal is the error `FORBIDDEN` of wire v1, with the status 403 and a reason (CLI-4).
|
|
21
23
|
*/
|
|
22
24
|
|
|
23
25
|
import type { IncomingHttpHeaders } from "node:http";
|
|
@@ -53,10 +55,28 @@ export interface GuardedRequest {
|
|
|
53
55
|
socket?: { localAddress?: string | undefined } | undefined;
|
|
54
56
|
}
|
|
55
57
|
|
|
56
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
* The result of the checks: the request passes, or the HTTP status and the error to send.
|
|
60
|
+
*
|
|
61
|
+
* A refusal is the error `FORBIDDEN` of wire v1 with the status 403. Its `reason` tells which
|
|
62
|
+
* check refused the request. Before CLI-4, the checks gave the codes `FORBIDDEN_HOST`,
|
|
63
|
+
* `FORBIDDEN_ORIGIN`, `METHOD_NOT_ALLOWED` (405) and `UNSUPPORTED_MEDIA_TYPE` (415).
|
|
64
|
+
*/
|
|
57
65
|
export type GuardResult =
|
|
58
66
|
| { readonly ok: true }
|
|
59
|
-
| {
|
|
67
|
+
| {
|
|
68
|
+
readonly ok: false;
|
|
69
|
+
readonly status: 403;
|
|
70
|
+
readonly code: "FORBIDDEN";
|
|
71
|
+
/** The check that refused the request, as in `documentation/WIRE-PROTOCOL.md`. */
|
|
72
|
+
readonly reason: "host-header-not-allowed" | "origin-not-allowed" | "method-not-allowed" | "media-type-not-allowed";
|
|
73
|
+
readonly message: string;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/** The refusal of a check: the error `FORBIDDEN` of wire v1 with its reason (CLI-4). */
|
|
77
|
+
function refusal(reason: Extract<GuardResult, { ok: false }>["reason"], message: string): Extract<GuardResult, { ok: false }> {
|
|
78
|
+
return { ok: false, status: 403, code: "FORBIDDEN", reason, message };
|
|
79
|
+
}
|
|
60
80
|
|
|
61
81
|
/** True for a host name or a bind address that only this computer can reach. */
|
|
62
82
|
export function isLoopbackHost(host: string): boolean {
|
|
@@ -159,29 +179,29 @@ export function checkBrowserRequest(
|
|
|
159
179
|
if (options.allowedHosts !== "*" && isLoopbackAddress(req.socket?.localAddress)) {
|
|
160
180
|
const name = hostNameOf(headers.host);
|
|
161
181
|
if (!LOOPBACK_NAMES.has(name) && !(options.allowedHosts ?? []).includes(name)) {
|
|
162
|
-
return
|
|
182
|
+
return refusal("host-header-not-allowed", `Forbidden: the host "${name}" is not allowed`);
|
|
163
183
|
}
|
|
164
184
|
}
|
|
165
185
|
|
|
166
186
|
const origin = typeof headers.origin === "string" ? headers.origin : undefined;
|
|
167
187
|
if (origin !== undefined) {
|
|
168
188
|
if (!sameOrigin(origin, headers.host) && !originAllowedBy(origin, options.allowedOrigins, ambient)) {
|
|
169
|
-
return
|
|
189
|
+
return refusal("origin-not-allowed", `Forbidden: the origin "${origin}" is not allowed`);
|
|
170
190
|
}
|
|
171
191
|
} else {
|
|
172
192
|
const site = headers["sec-fetch-site"];
|
|
173
193
|
if ((site === "cross-site" || site === "same-site") && (options.allowedOrigins !== "*" || ambient)) {
|
|
174
|
-
return
|
|
194
|
+
return refusal("origin-not-allowed", "Forbidden: a request from another site");
|
|
175
195
|
}
|
|
176
196
|
}
|
|
177
197
|
|
|
178
198
|
if (http) {
|
|
179
199
|
const method = (req.method ?? "GET").toUpperCase();
|
|
180
200
|
if ((method === "GET" || method === "HEAD") && !options.allowGet) {
|
|
181
|
-
return
|
|
201
|
+
return refusal("method-not-allowed", "Forbidden: call a procedure with POST");
|
|
182
202
|
}
|
|
183
203
|
if (hasBody(headers) && !isJsonType(headers["content-type"])) {
|
|
184
|
-
return
|
|
204
|
+
return refusal("media-type-not-allowed", "Forbidden: the request body must be JSON (Content-Type: application/json)");
|
|
185
205
|
}
|
|
186
206
|
}
|
|
187
207
|
|
package/src/server/server.ts
CHANGED
|
@@ -349,12 +349,13 @@ export class Server {
|
|
|
349
349
|
};
|
|
350
350
|
}
|
|
351
351
|
|
|
352
|
-
//
|
|
352
|
+
// Another error: the server failed outside a handler of the protocol. The code is of wire v1
|
|
353
|
+
// (CLI-4: before, the code was the string "500").
|
|
353
354
|
return {
|
|
354
355
|
id,
|
|
355
356
|
status: {
|
|
356
357
|
type: "error",
|
|
357
|
-
code: "
|
|
358
|
+
code: "INTERNAL_ERROR",
|
|
358
359
|
message: error.message || "Internal server error",
|
|
359
360
|
retryable: false,
|
|
360
361
|
},
|
package/src/server/types.ts
CHANGED
|
@@ -265,12 +265,13 @@ export class HandlerNotFoundError extends Error {
|
|
|
265
265
|
}
|
|
266
266
|
|
|
267
267
|
/**
|
|
268
|
-
*
|
|
268
|
+
* A server error with an error code. The default code is `INTERNAL_ERROR` of wire v1 (CLI-4:
|
|
269
|
+
* before, the default was the string `"500"`).
|
|
269
270
|
*/
|
|
270
271
|
export class ServerError extends Error {
|
|
271
272
|
constructor(
|
|
272
273
|
message: string,
|
|
273
|
-
public readonly code: string = "
|
|
274
|
+
public readonly code: string = "INTERNAL_ERROR",
|
|
274
275
|
public readonly retryable: boolean = false
|
|
275
276
|
) {
|
|
276
277
|
super(message);
|