@procedures/client 0.8.0 → 0.9.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 +78 -0
- package/README.md +95 -8
- package/dist/.tsbuildinfo +1 -1
- package/dist/adapters/http/client/transport.d.ts +4 -0
- package/dist/adapters/http/client/transport.d.ts.map +1 -1
- package/dist/adapters/http/client/transport.js +11 -1
- package/dist/adapters/http/client/transport.js.map +1 -1
- package/dist/adapters/http/client/types.d.ts +19 -0
- package/dist/adapters/http/client/types.d.ts.map +1 -1
- package/dist/adapters/http/server/cors.d.ts +64 -0
- package/dist/adapters/http/server/cors.d.ts.map +1 -0
- package/dist/adapters/http/server/cors.js +113 -0
- package/dist/adapters/http/server/cors.js.map +1 -0
- package/dist/adapters/http/server/handler.d.ts +136 -0
- package/dist/adapters/http/server/handler.d.ts.map +1 -0
- package/dist/adapters/http/server/handler.js +495 -0
- package/dist/adapters/http/server/handler.js.map +1 -0
- package/dist/adapters/http/server/strategies.d.ts +14 -5
- package/dist/adapters/http/server/strategies.d.ts.map +1 -1
- package/dist/adapters/http/server/strategies.js.map +1 -1
- package/dist/adapters/http/server/transport.d.ts +30 -46
- package/dist/adapters/http/server/transport.d.ts.map +1 -1
- package/dist/adapters/http/server/transport.js +48 -432
- package/dist/adapters/http/server/transport.js.map +1 -1
- package/dist/adapters/http/server/types.d.ts +13 -0
- package/dist/adapters/http/server/types.d.ts.map +1 -1
- package/dist/adapters/websocket/client/transport.d.ts.map +1 -1
- package/dist/adapters/websocket/client/transport.js +4 -12
- package/dist/adapters/websocket/client/transport.js.map +1 -1
- package/dist/adapters/websocket/server/transport.d.ts +46 -1
- package/dist/adapters/websocket/server/transport.d.ts.map +1 -1
- package/dist/adapters/websocket/server/transport.js +152 -15
- package/dist/adapters/websocket/server/transport.js.map +1 -1
- package/dist/adapters/websocket/server/types.d.ts +10 -3
- package/dist/adapters/websocket/server/types.d.ts.map +1 -1
- package/dist/adapters/websocket/server/upgrade-router.d.ts +28 -0
- package/dist/adapters/websocket/server/upgrade-router.d.ts.map +1 -0
- package/dist/adapters/websocket/server/upgrade-router.js +62 -0
- package/dist/adapters/websocket/server/upgrade-router.js.map +1 -0
- package/dist/adapters/websocket/server/upgrade.d.ts +68 -0
- package/dist/adapters/websocket/server/upgrade.d.ts.map +1 -0
- package/dist/adapters/websocket/server/upgrade.js +49 -0
- package/dist/adapters/websocket/server/upgrade.js.map +1 -0
- package/dist/adapters/websocket/shared/rpc.d.ts +2 -0
- package/dist/adapters/websocket/shared/rpc.d.ts.map +1 -1
- package/dist/adapters/websocket/shared/rpc.js +8 -2
- package/dist/adapters/websocket/shared/rpc.js.map +1 -1
- package/dist/browser.d.ts +12 -4
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +13 -2
- package/dist/browser.js.map +1 -1
- package/dist/client/client.d.ts +43 -0
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +69 -1
- package/dist/client/client.js.map +1 -1
- package/dist/events/publisher.d.ts +25 -1
- package/dist/events/publisher.d.ts.map +1 -1
- package/dist/events/publisher.js +66 -9
- package/dist/events/publisher.js.map +1 -1
- package/dist/events/rows.d.ts +31 -0
- package/dist/events/rows.d.ts.map +1 -0
- package/dist/events/rows.js +39 -0
- package/dist/events/rows.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +14 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +9 -0
- package/dist/node.js.map +1 -1
- package/dist/procedures/capability.d.ts +6 -0
- package/dist/procedures/capability.d.ts.map +1 -1
- package/dist/procedures/capability.js +25 -0
- package/dist/procedures/capability.js.map +1 -1
- package/dist/procedures/collection/changes.d.ts +94 -0
- package/dist/procedures/collection/changes.d.ts.map +1 -0
- package/dist/procedures/collection/changes.js +182 -0
- package/dist/procedures/collection/changes.js.map +1 -0
- package/dist/procedures/collection/index.d.ts +10 -3
- package/dist/procedures/collection/index.d.ts.map +1 -1
- package/dist/procedures/collection/index.js +8 -1
- package/dist/procedures/collection/index.js.map +1 -1
- package/dist/procedures/collection/partition.d.ts +67 -0
- package/dist/procedures/collection/partition.d.ts.map +1 -0
- package/dist/procedures/collection/partition.js +82 -0
- package/dist/procedures/collection/partition.js.map +1 -0
- package/dist/procedures/collection/procedures.d.ts +39 -2
- package/dist/procedures/collection/procedures.d.ts.map +1 -1
- package/dist/procedures/collection/procedures.js +147 -44
- package/dist/procedures/collection/procedures.js.map +1 -1
- package/dist/procedures/collection/query.d.ts +246 -0
- package/dist/procedures/collection/query.d.ts.map +1 -0
- package/dist/procedures/collection/query.js +854 -0
- package/dist/procedures/collection/query.js.map +1 -0
- package/dist/procedures/collection/schemas.d.ts +50 -0
- package/dist/procedures/collection/schemas.d.ts.map +1 -1
- package/dist/procedures/collection/schemas.js +144 -6
- package/dist/procedures/collection/schemas.js.map +1 -1
- package/dist/procedures/collection/storage.d.ts +58 -6
- package/dist/procedures/collection/storage.d.ts.map +1 -1
- package/dist/procedures/collection/storage.js +23 -0
- package/dist/procedures/collection/storage.js.map +1 -1
- package/dist/procedures/elicit.d.ts +190 -0
- package/dist/procedures/elicit.d.ts.map +1 -0
- package/dist/procedures/elicit.js +127 -0
- package/dist/procedures/elicit.js.map +1 -0
- package/dist/procedures/hints.d.ts +43 -0
- package/dist/procedures/hints.d.ts.map +1 -0
- package/dist/procedures/hints.js +74 -0
- package/dist/procedures/hints.js.map +1 -0
- package/dist/procedures/index.d.ts +9 -2
- package/dist/procedures/index.d.ts.map +1 -1
- package/dist/procedures/index.js +5 -1
- package/dist/procedures/index.js.map +1 -1
- package/dist/procedures/invoke.d.ts +24 -2
- package/dist/procedures/invoke.d.ts.map +1 -1
- package/dist/procedures/invoke.js +14 -1
- package/dist/procedures/invoke.js.map +1 -1
- package/dist/procedures/progress.d.ts +24 -0
- package/dist/procedures/progress.d.ts.map +1 -0
- package/dist/procedures/progress.js +11 -0
- package/dist/procedures/progress.js.map +1 -0
- package/dist/procedures/registry.d.ts.map +1 -1
- package/dist/procedures/registry.js +5 -0
- package/dist/procedures/registry.js.map +1 -1
- package/dist/procedures/types.d.ts +55 -0
- package/dist/procedures/types.d.ts.map +1 -1
- package/dist/procedures/types.js.map +1 -1
- package/dist/procedures/untrusted.d.ts +28 -0
- package/dist/procedures/untrusted.d.ts.map +1 -0
- package/dist/procedures/untrusted.js +32 -0
- package/dist/procedures/untrusted.js.map +1 -0
- package/dist/server/browser-guard.d.ts +12 -2
- package/dist/server/browser-guard.d.ts.map +1 -1
- package/dist/server/browser-guard.js +43 -6
- package/dist/server/browser-guard.js.map +1 -1
- package/dist/server/host-policy.d.ts +10 -1
- package/dist/server/host-policy.d.ts.map +1 -1
- package/dist/server/host-policy.js +5 -0
- package/dist/server/host-policy.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/procedure-server.d.ts +68 -7
- package/dist/server/procedure-server.d.ts.map +1 -1
- package/dist/server/procedure-server.js +124 -24
- package/dist/server/procedure-server.js.map +1 -1
- package/dist/server/request-auth.d.ts +51 -4
- package/dist/server/request-auth.d.ts.map +1 -1
- package/dist/server/request-auth.js +116 -5
- package/dist/server/request-auth.js.map +1 -1
- package/dist/server/types.d.ts +73 -5
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js.map +1 -1
- package/package.json +7 -3
- package/src/adapters/http/client/transport.ts +11 -1
- package/src/adapters/http/client/types.ts +22 -0
- package/src/adapters/http/server/cors.ts +144 -0
- package/src/adapters/http/server/handler.ts +624 -0
- package/src/adapters/http/server/strategies.ts +16 -6
- package/src/adapters/http/server/transport.ts +55 -478
- package/src/adapters/http/server/types.ts +15 -0
- package/src/adapters/websocket/client/transport.ts +4 -12
- package/src/adapters/websocket/server/transport.ts +166 -16
- package/src/adapters/websocket/server/types.ts +11 -3
- package/src/adapters/websocket/server/upgrade-router.ts +77 -0
- package/src/adapters/websocket/server/upgrade.ts +88 -0
- package/src/adapters/websocket/shared/rpc.ts +9 -2
- package/src/browser.ts +85 -2
- package/src/client/client.ts +83 -1
- package/src/events/publisher.ts +75 -11
- package/src/events/rows.ts +48 -0
- package/src/index.ts +1 -1
- package/src/node.ts +21 -0
- package/src/procedures/capability.ts +21 -0
- package/src/procedures/collection/changes.ts +245 -0
- package/src/procedures/collection/index.ts +57 -1
- package/src/procedures/collection/partition.ts +123 -0
- package/src/procedures/collection/procedures.ts +206 -51
- package/src/procedures/collection/query.ts +1009 -0
- package/src/procedures/collection/schemas.ts +196 -7
- package/src/procedures/collection/storage.ts +78 -6
- package/src/procedures/elicit.ts +320 -0
- package/src/procedures/hints.ts +91 -0
- package/src/procedures/index.ts +83 -2
- package/src/procedures/invoke.ts +33 -2
- package/src/procedures/progress.ts +25 -0
- package/src/procedures/registry.ts +4 -0
- package/src/procedures/types.ts +65 -0
- package/src/procedures/untrusted.ts +50 -0
- package/src/server/browser-guard.ts +48 -6
- package/src/server/host-policy.ts +13 -1
- package/src/server/index.ts +3 -0
- package/src/server/procedure-server.ts +147 -26
- package/src/server/request-auth.ts +128 -6
- package/src/server/types.ts +82 -5
|
@@ -38,6 +38,10 @@ export declare class HttpTransport implements Transport {
|
|
|
38
38
|
private readonly headerConverter;
|
|
39
39
|
private readonly defaultHeaders;
|
|
40
40
|
private readonly timeout;
|
|
41
|
+
/** The more options of each fetch call: the credentials mode and the others (CLI-18) */
|
|
42
|
+
private readonly requestInit;
|
|
43
|
+
/** The fetch function, or undefined for the global fetch at the time of each call */
|
|
44
|
+
private readonly fetchFn;
|
|
41
45
|
constructor(options: HttpTransportOptions);
|
|
42
46
|
/**
|
|
43
47
|
* Send HTTP request and yield its response: one item, or the items of an NDJSON stream.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../../src/adapters/http/client/transport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,OAAO,EACP,YAAY,EACb,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAqBvD,OAAO,EACL,IAAI,EAcL,MAAM,oBAAoB,CAAC;AAI5B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAc,YAAW,SAAS;IAC7C,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAQ;IAElC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../../src/adapters/http/client/transport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,OAAO,EACP,YAAY,EACb,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAqBvD,OAAO,EACL,IAAI,EAcL,MAAM,oBAAoB,CAAC;AAI5B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAc,YAAW,SAAS;IAC7C,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAQ;IAElC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,wFAAwF;IACxF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8D;IAC1F,qFAAqF;IACrF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IAEnD,YAAY,OAAO,EAAE,oBAAoB,EAcxC;IAED;;;;;OAKG;IACI,IAAI,CAAC,IAAI,EAAE,IAAI,EACpB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GACrB,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAsHnC;IAED;;;;;;;;;;OAUG;YACY,UAAU;IAkEzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0B7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;YACW,iBAAiB;IA0B/B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
|
|
@@ -58,6 +58,10 @@ export class HttpTransport {
|
|
|
58
58
|
headerConverter;
|
|
59
59
|
defaultHeaders;
|
|
60
60
|
timeout;
|
|
61
|
+
/** The more options of each fetch call: the credentials mode and the others (CLI-18) */
|
|
62
|
+
requestInit;
|
|
63
|
+
/** The fetch function, or undefined for the global fetch at the time of each call */
|
|
64
|
+
fetchFn;
|
|
61
65
|
constructor(options) {
|
|
62
66
|
this.baseUrl = options.baseUrl;
|
|
63
67
|
this.urlStrategy = options.urlStrategy || defaultUrlPattern.format;
|
|
@@ -67,6 +71,11 @@ export class HttpTransport {
|
|
|
67
71
|
options.headerConverter || createDefaultHeaderConverter();
|
|
68
72
|
this.defaultHeaders = options.defaultHeaders || {};
|
|
69
73
|
this.timeout = optionalMs(options.timeout, "timeout");
|
|
74
|
+
this.requestInit = {
|
|
75
|
+
...options.requestInit,
|
|
76
|
+
...(options.credentials !== undefined ? { credentials: options.credentials } : {}),
|
|
77
|
+
};
|
|
78
|
+
this.fetchFn = options.fetch;
|
|
70
79
|
}
|
|
71
80
|
/**
|
|
72
81
|
* Send HTTP request and yield its response: one item, or the items of an NDJSON stream.
|
|
@@ -105,6 +114,7 @@ export class HttpTransport {
|
|
|
105
114
|
const metadataHeaders = this.headerConverter.metadataToHeaders(message.metadata);
|
|
106
115
|
// Build fetch options
|
|
107
116
|
const fetchOptions = {
|
|
117
|
+
...this.requestInit,
|
|
108
118
|
method: httpMethod,
|
|
109
119
|
headers: {
|
|
110
120
|
[HTTPHeaders.CONTENT_TYPE]: "application/json",
|
|
@@ -123,7 +133,7 @@ export class HttpTransport {
|
|
|
123
133
|
fetchOptions.body = JSON.stringify(message.payload);
|
|
124
134
|
}
|
|
125
135
|
// Execute HTTP request
|
|
126
|
-
const response = await fetch(url, fetchOptions);
|
|
136
|
+
const response = await (this.fetchFn ?? fetch)(url, fetchOptions);
|
|
127
137
|
const metadata = this.headerConverter.headersToMetadata(response.headers);
|
|
128
138
|
if (response.headers.get(HTTPHeaders.CONTENT_TYPE)?.includes(NDJSON) && response.body) {
|
|
129
139
|
yield* this.readNdjson(message.id, response.body, metadata, () => (finished = true), firstItem);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/adapters/http/client/transport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACtH,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvE;;;GAGG;AACH,SAAS,cAAc,CAAC,MAAqB,EAAE,IAAa;IAC1D,MAAM,QAAQ,GAAI,IAAsD,EAAE,YAAY,CAAC;IACvF,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChG,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,OAAO,GAAG,IAAI,CAAC;IACpE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,wEAAwE;AACxE,MAAM,MAAM,GAAG,sBAAsB,CAAC;AAEtC,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,WAAW,EAIX,iBAAiB,EACjB,gBAAgB,EAChB,4BAA4B,EAC5B,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,aAAa;IACf,IAAI,GAAgB,IAAI,CAAC;IAEjB,OAAO,CAAS;IAChB,WAAW,CAAc;IACzB,kBAAkB,CAAqB;IACvC,eAAe,CAAkB;IACjC,cAAc,CAAyB;IACvC,OAAO,CAAqB;
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/adapters/http/client/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,5 +24,24 @@ export interface HttpTransportOptions {
|
|
|
24
24
|
defaultHeaders?: Record<string, string>;
|
|
25
25
|
/** The time to the first item of a response, for example `seconds(30)` */
|
|
26
26
|
timeout?: Duration;
|
|
27
|
+
/**
|
|
28
|
+
* The credentials mode of `fetch` (CLI-18). `"include"` sends the cookies of the server to
|
|
29
|
+
* another origin too. An application with a cookie session needs it for procedures on another
|
|
30
|
+
* origin. The server then must permit the origin with credentials (CORS). This option goes over
|
|
31
|
+
* `requestInit.credentials`.
|
|
32
|
+
* @default the default of `fetch`: "same-origin"
|
|
33
|
+
*/
|
|
34
|
+
credentials?: "include" | "same-origin" | "omit";
|
|
35
|
+
/**
|
|
36
|
+
* More options of each `fetch` call: `mode`, `cache`, `redirect`, `referrerPolicy`, `keepalive`,
|
|
37
|
+
* `priority` and the others. The transport sets `method`, `headers`, `body` and `signal` itself.
|
|
38
|
+
*/
|
|
39
|
+
requestInit?: Omit<RequestInit, "method" | "headers" | "body" | "signal">;
|
|
40
|
+
/**
|
|
41
|
+
* The `fetch` function of the transport, for example a `fetch` with a cookie jar in Node, or a
|
|
42
|
+
* test double.
|
|
43
|
+
* @default globalThis.fetch
|
|
44
|
+
*/
|
|
45
|
+
fetch?: typeof fetch;
|
|
27
46
|
}
|
|
28
47
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/adapters/http/client/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAEhB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAExC,kFAAkF;IAClF,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC,0EAA0E;IAC1E,OAAO,CAAC,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/adapters/http/client/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAEhB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAExC,kFAAkF;IAClF,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC,0EAA0E;IAC1E,OAAO,CAAC,EAAE,QAAQ,CAAC;IAEnB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;IAEjD;;;OAGG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC;IAE1E;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The CORS headers of a procedure server, without a framework. `procedureHandler` applies them to
|
|
3
|
+
* the requests on its path. The Express shim `HttpServerTransport` applies them to each request of
|
|
4
|
+
* its app, as before. This module imports only the types of `node:http`.
|
|
5
|
+
*/
|
|
6
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
7
|
+
import { type Duration } from "../../../duration.js";
|
|
8
|
+
/** The CORS options of a procedure server. */
|
|
9
|
+
export interface CorsOptions {
|
|
10
|
+
/**
|
|
11
|
+
* The origins that can read the responses: `"*"`, one origin, a list, or a function that
|
|
12
|
+
* decides for each origin. A response names the origin of the request when the origin is
|
|
13
|
+
* permitted, with `Vary: Origin`.
|
|
14
|
+
* @default "*"
|
|
15
|
+
*/
|
|
16
|
+
readonly origin?: string | readonly string[] | ((origin: string) => boolean) | undefined;
|
|
17
|
+
/** The methods of `Access-Control-Allow-Methods`. @default GET, POST, PUT, DELETE, PATCH, OPTIONS */
|
|
18
|
+
readonly methods?: readonly string[] | undefined;
|
|
19
|
+
/** The request headers of `Access-Control-Allow-Headers`. @default the headers of `HttpTransport` */
|
|
20
|
+
readonly allowedHeaders?: readonly string[] | undefined;
|
|
21
|
+
/** The response headers that a page can read (`Access-Control-Expose-Headers`). @default none */
|
|
22
|
+
readonly exposedHeaders?: readonly string[] | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* True: a page can send cookies (`fetch` with `credentials: "include"`). The response then has
|
|
25
|
+
* `Access-Control-Allow-Credentials: true`. A browser refuses `"*"` with credentials, so give the
|
|
26
|
+
* origins.
|
|
27
|
+
*/
|
|
28
|
+
readonly credentials?: boolean | undefined;
|
|
29
|
+
/** The time that a browser keeps the answer to a preflight request (`Access-Control-Max-Age`). */
|
|
30
|
+
readonly maxAge?: Duration | undefined;
|
|
31
|
+
}
|
|
32
|
+
/** The request headers that `HttpTransport` sends: the default `allowedHeaders`. */
|
|
33
|
+
export declare const DEFAULT_CORS_HEADERS: readonly string[];
|
|
34
|
+
/** The methods of the default `Access-Control-Allow-Methods`. */
|
|
35
|
+
export declare const DEFAULT_CORS_METHODS: readonly string[];
|
|
36
|
+
/** The CORS options with their defaults, ready for each request. */
|
|
37
|
+
export interface CorsPolicy {
|
|
38
|
+
/** The permitted origin to send back for a request origin, or undefined for none. */
|
|
39
|
+
readonly allowOrigin: (requestOrigin: string | undefined) => string | undefined;
|
|
40
|
+
/** True when the permitted origin depends on the request: the response gets `Vary: Origin`. */
|
|
41
|
+
readonly varies: boolean;
|
|
42
|
+
readonly methods: string | undefined;
|
|
43
|
+
readonly allowedHeaders: string | undefined;
|
|
44
|
+
readonly exposedHeaders: string | undefined;
|
|
45
|
+
readonly credentials: boolean;
|
|
46
|
+
/** The value of `Access-Control-Max-Age` in seconds, or undefined. */
|
|
47
|
+
readonly maxAge: string | undefined;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* This function makes the CORS policy of the options. `defaultCredentials` is the default of the
|
|
51
|
+
* `credentials` option.
|
|
52
|
+
*/
|
|
53
|
+
export declare function corsPolicy(options: CorsOptions, defaultCredentials: boolean): CorsPolicy;
|
|
54
|
+
/**
|
|
55
|
+
* This function sets the CORS headers of a response. It gives true for a preflight request
|
|
56
|
+
* (`OPTIONS`): the function then ends the response with 204.
|
|
57
|
+
*/
|
|
58
|
+
export declare function applyCors(req: IncomingMessage, res: ServerResponse, policy: CorsPolicy): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* The origins that the CORS options permit, for the browser checks: a page that CORS lets read the
|
|
61
|
+
* response can also send a call. Without CORS, no other origin can send a call.
|
|
62
|
+
*/
|
|
63
|
+
export declare function corsOrigins(cors: CorsOptions | undefined): readonly string[] | "*" | ((origin: string) => boolean);
|
|
64
|
+
//# sourceMappingURL=cors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../../../src/adapters/http/server/cors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGjE,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE3D,8CAA8C;AAC9C,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IACzF,qGAAqG;IACrG,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACjD,qGAAqG;IACrG,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACxD,iGAAiG;IACjG,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACxD;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3C,kGAAkG;IAClG,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CACxC;AAED,oFAAoF;AACpF,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAehD,CAAC;AAEH,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAOhD,CAAC;AAEH,oEAAoE;AACpE,MAAM,WAAW,UAAU;IACzB,qFAAqF;IACrF,QAAQ,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,SAAS,CAAC;IAChF,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,GAAG,UAAU,CAoBxF;AAWD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAchG;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAMlH"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The CORS headers of a procedure server, without a framework. `procedureHandler` applies them to
|
|
3
|
+
* the requests on its path. The Express shim `HttpServerTransport` applies them to each request of
|
|
4
|
+
* its app, as before. This module imports only the types of `node:http`.
|
|
5
|
+
*/
|
|
6
|
+
import { HTTPHeaders, HTTPMethod } from "../shared/index.js";
|
|
7
|
+
import { PROTOCOL_HEADER } from "../../../protocol.js";
|
|
8
|
+
import { toMs } from "../../../duration.js";
|
|
9
|
+
/** The request headers that `HttpTransport` sends: the default `allowedHeaders`. */
|
|
10
|
+
export const DEFAULT_CORS_HEADERS = Object.freeze([
|
|
11
|
+
"Content-Type",
|
|
12
|
+
"Accept",
|
|
13
|
+
HTTPHeaders.AUTHORIZATION,
|
|
14
|
+
HTTPHeaders.API_KEY,
|
|
15
|
+
HTTPHeaders.REQUEST_ID,
|
|
16
|
+
HTTPHeaders.TRACE_ID,
|
|
17
|
+
HTTPHeaders.SPAN_ID,
|
|
18
|
+
HTTPHeaders.PARENT_SPAN_ID,
|
|
19
|
+
"traceparent",
|
|
20
|
+
PROTOCOL_HEADER,
|
|
21
|
+
HTTPHeaders.METADATA,
|
|
22
|
+
"collection",
|
|
23
|
+
"collectionName",
|
|
24
|
+
"database",
|
|
25
|
+
]);
|
|
26
|
+
/** The methods of the default `Access-Control-Allow-Methods`. */
|
|
27
|
+
export const DEFAULT_CORS_METHODS = Object.freeze([
|
|
28
|
+
HTTPMethod.GET,
|
|
29
|
+
HTTPMethod.POST,
|
|
30
|
+
HTTPMethod.PUT,
|
|
31
|
+
HTTPMethod.DELETE,
|
|
32
|
+
HTTPMethod.PATCH,
|
|
33
|
+
HTTPMethod.OPTIONS,
|
|
34
|
+
]);
|
|
35
|
+
/**
|
|
36
|
+
* This function makes the CORS policy of the options. `defaultCredentials` is the default of the
|
|
37
|
+
* `credentials` option.
|
|
38
|
+
*/
|
|
39
|
+
export function corsPolicy(options, defaultCredentials) {
|
|
40
|
+
const origin = options.origin ?? "*";
|
|
41
|
+
const allowOrigin = (requestOrigin) => {
|
|
42
|
+
if (origin === "*")
|
|
43
|
+
return "*";
|
|
44
|
+
if (requestOrigin === undefined)
|
|
45
|
+
return undefined;
|
|
46
|
+
if (typeof origin === "function")
|
|
47
|
+
return origin(requestOrigin) ? requestOrigin : undefined;
|
|
48
|
+
const list = typeof origin === "string" ? [origin] : origin;
|
|
49
|
+
return list.includes(requestOrigin) ? requestOrigin : undefined;
|
|
50
|
+
};
|
|
51
|
+
const join = (list) => (list === undefined || list.length === 0 ? undefined : list.join(", "));
|
|
52
|
+
const maxAgeMs = options.maxAge === undefined ? undefined : toMs(options.maxAge, "cors.maxAge");
|
|
53
|
+
return {
|
|
54
|
+
allowOrigin,
|
|
55
|
+
varies: origin !== "*",
|
|
56
|
+
methods: join("methods" in options ? options.methods : DEFAULT_CORS_METHODS),
|
|
57
|
+
allowedHeaders: join("allowedHeaders" in options ? options.allowedHeaders : DEFAULT_CORS_HEADERS),
|
|
58
|
+
exposedHeaders: join(options.exposedHeaders),
|
|
59
|
+
credentials: options.credentials ?? defaultCredentials,
|
|
60
|
+
maxAge: maxAgeMs === undefined || maxAgeMs <= 0 ? undefined : String(Math.floor(maxAgeMs / 1000)),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/** This function adds a value to the `Vary` header of a response, one time. */
|
|
64
|
+
function vary(res, field) {
|
|
65
|
+
const current = res.getHeader("Vary");
|
|
66
|
+
const text = Array.isArray(current) ? current.join(", ") : current === undefined ? "" : String(current);
|
|
67
|
+
const fields = text.split(",").map((part) => part.trim().toLowerCase());
|
|
68
|
+
if (fields.includes("*") || fields.includes(field.toLowerCase()))
|
|
69
|
+
return;
|
|
70
|
+
res.setHeader("Vary", text.trim() === "" ? field : `${text}, ${field}`);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* This function sets the CORS headers of a response. It gives true for a preflight request
|
|
74
|
+
* (`OPTIONS`): the function then ends the response with 204.
|
|
75
|
+
*/
|
|
76
|
+
export function applyCors(req, res, policy) {
|
|
77
|
+
const requestOrigin = typeof req.headers.origin === "string" ? req.headers.origin : undefined;
|
|
78
|
+
const allowed = policy.allowOrigin(requestOrigin);
|
|
79
|
+
if (policy.varies)
|
|
80
|
+
vary(res, "Origin");
|
|
81
|
+
if (allowed !== undefined)
|
|
82
|
+
res.setHeader("Access-Control-Allow-Origin", allowed);
|
|
83
|
+
if (policy.methods !== undefined)
|
|
84
|
+
res.setHeader("Access-Control-Allow-Methods", policy.methods);
|
|
85
|
+
if (policy.allowedHeaders !== undefined)
|
|
86
|
+
res.setHeader("Access-Control-Allow-Headers", policy.allowedHeaders);
|
|
87
|
+
if (policy.exposedHeaders !== undefined)
|
|
88
|
+
res.setHeader("Access-Control-Expose-Headers", policy.exposedHeaders);
|
|
89
|
+
if (policy.credentials)
|
|
90
|
+
res.setHeader("Access-Control-Allow-Credentials", "true");
|
|
91
|
+
if (req.method !== "OPTIONS")
|
|
92
|
+
return false;
|
|
93
|
+
if (policy.maxAge !== undefined)
|
|
94
|
+
res.setHeader("Access-Control-Max-Age", policy.maxAge);
|
|
95
|
+
res.statusCode = 204;
|
|
96
|
+
res.end();
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The origins that the CORS options permit, for the browser checks: a page that CORS lets read the
|
|
101
|
+
* response can also send a call. Without CORS, no other origin can send a call.
|
|
102
|
+
*/
|
|
103
|
+
export function corsOrigins(cors) {
|
|
104
|
+
if (!cors)
|
|
105
|
+
return [];
|
|
106
|
+
const origin = cors.origin ?? "*";
|
|
107
|
+
if (origin === "*")
|
|
108
|
+
return "*";
|
|
109
|
+
if (typeof origin === "function")
|
|
110
|
+
return origin;
|
|
111
|
+
return typeof origin === "string" ? [origin] : origin;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=cors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cors.js","sourceRoot":"","sources":["../../../../src/adapters/http/server/cors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The procedure handler of HTTP: a request handler of `node:http`, without a framework (CLI-3).
|
|
3
|
+
*
|
|
4
|
+
* `procedureHandler(server, options)` gives a function `(req, res) => boolean`. The function takes
|
|
5
|
+
* each request whose path is under `basePath` and gives `true`. It gives `false` for each other
|
|
6
|
+
* request and does not touch it, so the routes of the application get it. A mount list of a
|
|
7
|
+
* listener ("first match wins") can hold it next to other handlers. The wire is the wire of
|
|
8
|
+
* `HttpServerTransport` (`documentation/WIRE-PROTOCOL.md`). It has the URL of the method, the JSON
|
|
9
|
+
* body and the NDJSON streams of `writeNdjsonStream` with `seq` and keep-alive lines. It also has
|
|
10
|
+
* the error codes, the idempotency keys, the deadlines, the events and the browser checks.
|
|
11
|
+
*
|
|
12
|
+
* The handler also has the stop parts of a service transport: `start()`, `stopIntake()`,
|
|
13
|
+
* `drain(deadline, signal)`, `inFlight()` and `close()`. The handler does not make a server and
|
|
14
|
+
* does not listen: the owner of the listener does that.
|
|
15
|
+
*
|
|
16
|
+
* This module imports only the types of `node:http`, so it loads no Node code at run time.
|
|
17
|
+
*/
|
|
18
|
+
import type { IncomingHttpHeaders, IncomingMessage, ServerResponse as NodeResponse } from "node:http";
|
|
19
|
+
import type { Method } from "../../../client/types.js";
|
|
20
|
+
import type { RequestHandler } from "../../../server/types.js";
|
|
21
|
+
import { type BrowserGuardOptions } from "../../../server/browser-guard.js";
|
|
22
|
+
import { type Clock } from "../../../clock.js";
|
|
23
|
+
import { type Duration } from "../../../duration.js";
|
|
24
|
+
import { type CorsOptions } from "./cors.js";
|
|
25
|
+
/** The parts of a request that a URL strategy of `procedureHandler` reads. */
|
|
26
|
+
export interface UrlRequest {
|
|
27
|
+
/** The HTTP method, in upper case. */
|
|
28
|
+
readonly method: string;
|
|
29
|
+
/** The path of the URL, without the query. */
|
|
30
|
+
readonly path: string;
|
|
31
|
+
/** The URL of the request line: the path and the query. */
|
|
32
|
+
readonly url: string;
|
|
33
|
+
readonly headers: IncomingHttpHeaders;
|
|
34
|
+
/** The first value of each query parameter. */
|
|
35
|
+
readonly query: Readonly<Record<string, string>>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The URL strategy of `procedureHandler`: it gives the method of a request, or null when the URL
|
|
39
|
+
* names no method. The second argument is the request of `node:http`.
|
|
40
|
+
*/
|
|
41
|
+
export type NodeUrlStrategy = (request: UrlRequest, req: IncomingMessage) => Method | null;
|
|
42
|
+
/** The options of `procedureHandler`. */
|
|
43
|
+
export interface ProcedureHandlerOptions extends BrowserGuardOptions {
|
|
44
|
+
/**
|
|
45
|
+
* The path under which the handler takes the requests. A request outside it goes on.
|
|
46
|
+
* @default "/api"
|
|
47
|
+
*/
|
|
48
|
+
readonly basePath?: string | undefined;
|
|
49
|
+
/**
|
|
50
|
+
* The method of a request. The default reads the URL format of `HttpTransport`:
|
|
51
|
+
* `{basePath}/{service}/{operation}`.
|
|
52
|
+
*/
|
|
53
|
+
readonly urlStrategy?: NodeUrlStrategy | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* The CORS headers of the requests on the path. `true` uses the defaults: each origin, without
|
|
56
|
+
* credentials. The permitted origins of the browser checks follow the CORS origins.
|
|
57
|
+
* @default false
|
|
58
|
+
*/
|
|
59
|
+
readonly cors?: boolean | CorsOptions | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* The largest request body, in bytes, when the handler reads the body itself (no body parser
|
|
62
|
+
* of a framework before it).
|
|
63
|
+
* @default 1 MiB
|
|
64
|
+
*/
|
|
65
|
+
readonly bodyLimit?: number | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* The quiet time of an NDJSON stream. After it, the handler writes a keep-alive line. `false`,
|
|
68
|
+
* or a duration of zero or less, sends no keep-alive line.
|
|
69
|
+
* @default seconds(15) (`TIMER_DEFAULTS.httpServer.keepAliveMs`)
|
|
70
|
+
*/
|
|
71
|
+
readonly keepAlive?: Duration | false | undefined;
|
|
72
|
+
/** The clock of the keep-alive timers and of `drain()`. A test gives a fake clock. */
|
|
73
|
+
readonly clock?: Clock | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* More headers that carry a secret, for example the token header of an application. They go
|
|
76
|
+
* into the credentials of the request, not into its metadata. `Authorization`,
|
|
77
|
+
* `Proxy-Authorization`, `Cookie` and `X-Api-Key` are always secret.
|
|
78
|
+
*/
|
|
79
|
+
readonly secretHeaders?: readonly string[] | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* The query parameters that carry a secret. They go into the credentials of the request, not
|
|
82
|
+
* into its metadata.
|
|
83
|
+
* @default ["token"]
|
|
84
|
+
*/
|
|
85
|
+
readonly secretQuery?: readonly string[] | undefined;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The request handler of `procedureHandler`. A call gives `true` when the handler takes the request
|
|
89
|
+
* (its path is under `basePath`), and `false` for another request. The handler then does not touch
|
|
90
|
+
* the request.
|
|
91
|
+
*/
|
|
92
|
+
export interface NodeProcedureHandler {
|
|
93
|
+
(req: IncomingMessage, res: NodeResponse): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* This method handles a request as the call does. Its promise resolves when the response ends:
|
|
96
|
+
* `true` when the handler took the request, `false` for another request.
|
|
97
|
+
*/
|
|
98
|
+
handle(req: IncomingMessage, res: NodeResponse): Promise<boolean>;
|
|
99
|
+
/** This method gives true when the handler takes the request: its path is under `basePath`. */
|
|
100
|
+
matches(req: IncomingMessage): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* The handler as a middleware of Connect or Express: a request outside `basePath` goes to `next`.
|
|
103
|
+
*/
|
|
104
|
+
middleware(req: IncomingMessage, res: NodeResponse, next: (error?: unknown) => void): void;
|
|
105
|
+
/** The path under which the handler takes the requests. */
|
|
106
|
+
readonly basePath: string;
|
|
107
|
+
/** This method accepts new requests again, after `stopIntake()`. */
|
|
108
|
+
start(): void;
|
|
109
|
+
/** This method refuses each new request with the retryable error `UNAVAILABLE` (503). */
|
|
110
|
+
stopIntake(): void;
|
|
111
|
+
/**
|
|
112
|
+
* This method waits until no request is in progress, until the `deadline` (milliseconds on the
|
|
113
|
+
* clock of the handler), or until the signal aborts.
|
|
114
|
+
*/
|
|
115
|
+
drain(deadline: number, signal?: AbortSignal): Promise<void>;
|
|
116
|
+
/** The number of requests in progress, open streams too. */
|
|
117
|
+
inFlight(): number;
|
|
118
|
+
/** This method aborts each request in progress: an open stream ends, and its handler gets `return()`. */
|
|
119
|
+
close(): void;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* This function makes a procedure handler: a request handler of `node:http` that serves the
|
|
123
|
+
* procedures of `server` under `options.basePath`, with wire protocol v1.
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* const server = new ProcedureServer({ registry, token });
|
|
128
|
+
* const procedures = procedureHandler(server, { basePath: "/api/proc" });
|
|
129
|
+
* createServer((req, res) => {
|
|
130
|
+
* if (procedures(req, res)) return;
|
|
131
|
+
* appRoutes(req, res); // for example /api/chat
|
|
132
|
+
* }).listen(4820);
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
export declare function procedureHandler(server: RequestHandler, options?: ProcedureHandlerOptions): NodeProcedureHandler;
|
|
136
|
+
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/adapters/http/server/handler.ts"],"names":[],"mappings":"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"}
|