@procedures/client 0.2.3 → 0.3.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 +65 -0
- package/README.md +61 -38
- package/dist/.tsbuildinfo +1 -1
- package/dist/adapters/http/client/transport.d.ts.map +1 -1
- package/dist/adapters/http/client/transport.js +35 -3
- package/dist/adapters/http/client/transport.js.map +1 -1
- package/dist/adapters/http/client/types.d.ts +3 -2
- package/dist/adapters/http/client/types.d.ts.map +1 -1
- package/dist/adapters/http/server/transport.d.ts +2 -2
- package/dist/adapters/http/server/transport.d.ts.map +1 -1
- package/dist/adapters/http/server/transport.js +53 -20
- package/dist/adapters/http/server/transport.js.map +1 -1
- package/dist/adapters/http/shared/headers.d.ts +1 -1
- package/dist/adapters/http/shared/headers.d.ts.map +1 -1
- package/dist/adapters/http/shared/headers.js +7 -6
- package/dist/adapters/http/shared/headers.js.map +1 -1
- package/dist/adapters/local/client/transport.d.ts +3 -0
- package/dist/adapters/local/client/transport.d.ts.map +1 -1
- package/dist/adapters/local/client/transport.js +63 -4
- package/dist/adapters/local/client/transport.js.map +1 -1
- package/dist/adapters/local/client/types.d.ts +15 -0
- package/dist/adapters/local/client/types.d.ts.map +1 -1
- package/dist/adapters/local/client/types.js.map +1 -1
- package/dist/adapters/mock/client/transport.d.ts +3 -2
- package/dist/adapters/mock/client/transport.d.ts.map +1 -1
- package/dist/adapters/mock/client/transport.js +8 -5
- package/dist/adapters/mock/client/transport.js.map +1 -1
- package/dist/adapters/mock/client/types.d.ts +7 -6
- package/dist/adapters/mock/client/types.d.ts.map +1 -1
- package/dist/adapters/port/transport.d.ts +62 -0
- package/dist/adapters/port/transport.d.ts.map +1 -0
- package/dist/adapters/port/transport.js +94 -0
- package/dist/adapters/port/transport.js.map +1 -0
- package/dist/adapters/websocket/client/index.d.ts +1 -1
- package/dist/adapters/websocket/client/index.d.ts.map +1 -1
- package/dist/adapters/websocket/client/index.js.map +1 -1
- package/dist/adapters/websocket/client/transport.d.ts +47 -7
- package/dist/adapters/websocket/client/transport.d.ts.map +1 -1
- package/dist/adapters/websocket/client/transport.js +213 -67
- package/dist/adapters/websocket/client/transport.js.map +1 -1
- package/dist/adapters/websocket/client/types.d.ts +70 -21
- package/dist/adapters/websocket/client/types.d.ts.map +1 -1
- package/dist/adapters/websocket/client/types.js.map +1 -1
- package/dist/adapters/websocket/server/transport.d.ts +65 -24
- package/dist/adapters/websocket/server/transport.d.ts.map +1 -1
- package/dist/adapters/websocket/server/transport.js +192 -263
- package/dist/adapters/websocket/server/transport.js.map +1 -1
- package/dist/adapters/websocket/server/types.d.ts +20 -1
- package/dist/adapters/websocket/server/types.d.ts.map +1 -1
- package/dist/adapters/websocket/shared/rpc.d.ts +129 -0
- package/dist/adapters/websocket/shared/rpc.d.ts.map +1 -0
- package/dist/adapters/websocket/shared/rpc.js +425 -0
- package/dist/adapters/websocket/shared/rpc.js.map +1 -0
- package/dist/browser.d.ts +29 -7
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +26 -3
- package/dist/browser.js.map +1 -1
- package/dist/client/call-types.d.ts +10 -10
- package/dist/client/call-types.d.ts.map +1 -1
- package/dist/client/call-types.js +1 -6
- package/dist/client/call-types.js.map +1 -1
- package/dist/client/client.d.ts +6 -1
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +23 -9
- package/dist/client/client.js.map +1 -1
- package/dist/client/deadline.d.ts +38 -0
- package/dist/client/deadline.d.ts.map +1 -0
- package/dist/client/deadline.js +60 -0
- package/dist/client/deadline.js.map +1 -0
- package/dist/client/errors/factory.d.ts.map +1 -1
- package/dist/client/errors/factory.js +11 -7
- package/dist/client/errors/factory.js.map +1 -1
- package/dist/client/index.d.ts +9 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +8 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/middleware/cache.d.ts +19 -5
- package/dist/client/middleware/cache.d.ts.map +1 -1
- package/dist/client/middleware/cache.js +106 -18
- package/dist/client/middleware/cache.js.map +1 -1
- package/dist/client/middleware/circuit-breaker.d.ts +28 -10
- package/dist/client/middleware/circuit-breaker.d.ts.map +1 -1
- package/dist/client/middleware/circuit-breaker.js +35 -24
- package/dist/client/middleware/circuit-breaker.js.map +1 -1
- package/dist/client/middleware/contexts.d.ts +16 -10
- package/dist/client/middleware/contexts.d.ts.map +1 -1
- package/dist/client/middleware/contexts.js.map +1 -1
- package/dist/client/middleware/items.d.ts +31 -2
- package/dist/client/middleware/items.d.ts.map +1 -1
- package/dist/client/middleware/items.js +86 -6
- package/dist/client/middleware/items.js.map +1 -1
- package/dist/client/middleware/lru.d.ts +2 -0
- package/dist/client/middleware/lru.d.ts.map +1 -1
- package/dist/client/middleware/lru.js +11 -0
- package/dist/client/middleware/lru.js.map +1 -1
- package/dist/client/middleware/rate-limit.d.ts +7 -6
- package/dist/client/middleware/rate-limit.d.ts.map +1 -1
- package/dist/client/middleware/rate-limit.js +9 -6
- package/dist/client/middleware/rate-limit.js.map +1 -1
- package/dist/client/middleware/resilience.d.ts +61 -0
- package/dist/client/middleware/resilience.d.ts.map +1 -0
- package/dist/client/middleware/resilience.js +59 -0
- package/dist/client/middleware/resilience.js.map +1 -0
- package/dist/client/middleware/retry.d.ts +45 -11
- package/dist/client/middleware/retry.d.ts.map +1 -1
- package/dist/client/middleware/retry.js +102 -22
- package/dist/client/middleware/retry.js.map +1 -1
- package/dist/client/middleware/timeout.d.ts +15 -12
- package/dist/client/middleware/timeout.d.ts.map +1 -1
- package/dist/client/middleware/timeout.js +46 -37
- package/dist/client/middleware/timeout.js.map +1 -1
- package/dist/client/middleware/tracing.d.ts.map +1 -1
- package/dist/client/middleware/tracing.js +11 -3
- package/dist/client/middleware/tracing.js.map +1 -1
- package/dist/client/types.d.ts +9 -1
- package/dist/client/types.d.ts.map +1 -1
- package/dist/client/types.js.map +1 -1
- package/dist/clock.d.ts +19 -0
- package/dist/clock.d.ts.map +1 -0
- package/dist/clock.js +18 -0
- package/dist/clock.js.map +1 -0
- package/dist/duration.d.ts +37 -0
- package/dist/duration.d.ts.map +1 -0
- package/dist/duration.js +44 -0
- package/dist/duration.js.map +1 -0
- package/dist/machines.d.ts +90 -0
- package/dist/machines.d.ts.map +1 -0
- package/dist/machines.js +127 -0
- package/dist/machines.js.map +1 -0
- package/dist/procedures/capability.d.ts +3 -6
- package/dist/procedures/capability.d.ts.map +1 -1
- package/dist/procedures/capability.js +7 -8
- package/dist/procedures/capability.js.map +1 -1
- package/dist/procedures/collection/index.d.ts +3 -3
- package/dist/procedures/collection/index.d.ts.map +1 -1
- package/dist/procedures/collection/index.js +1 -1
- package/dist/procedures/collection/index.js.map +1 -1
- package/dist/procedures/collection/procedures.d.ts.map +1 -1
- package/dist/procedures/collection/procedures.js +49 -1
- package/dist/procedures/collection/procedures.js.map +1 -1
- package/dist/procedures/collection/schemas.d.ts +33 -0
- package/dist/procedures/collection/schemas.d.ts.map +1 -1
- package/dist/procedures/collection/schemas.js +68 -0
- package/dist/procedures/collection/schemas.js.map +1 -1
- package/dist/procedures/collection/storage.d.ts +37 -0
- package/dist/procedures/collection/storage.d.ts.map +1 -1
- package/dist/procedures/core/array.d.ts.map +1 -1
- package/dist/procedures/core/array.js +26 -15
- package/dist/procedures/core/array.js.map +1 -1
- package/dist/procedures/core/index.d.ts.map +1 -1
- package/dist/procedures/core/index.js +8 -0
- package/dist/procedures/core/index.js.map +1 -1
- package/dist/procedures/core/meta.d.ts.map +1 -1
- package/dist/procedures/core/meta.js +2 -1
- package/dist/procedures/core/meta.js.map +1 -1
- package/dist/procedures/core/object.d.ts.map +1 -1
- package/dist/procedures/core/object.js +42 -13
- package/dist/procedures/core/object.js.map +1 -1
- package/dist/procedures/core/operands.d.ts.map +1 -1
- package/dist/procedures/core/operands.js +6 -1
- package/dist/procedures/core/operands.js.map +1 -1
- package/dist/procedures/core/string.d.ts.map +1 -1
- package/dist/procedures/core/string.js +4 -2
- package/dist/procedures/core/string.js.map +1 -1
- package/dist/procedures/define-procedure.d.ts +19 -7
- package/dist/procedures/define-procedure.d.ts.map +1 -1
- package/dist/procedures/define-procedure.js +57 -17
- package/dist/procedures/define-procedure.js.map +1 -1
- package/dist/procedures/effects.d.ts +16 -0
- package/dist/procedures/effects.d.ts.map +1 -1
- package/dist/procedures/effects.js +33 -0
- package/dist/procedures/effects.js.map +1 -1
- package/dist/procedures/idempotency.d.ts +73 -0
- package/dist/procedures/idempotency.d.ts.map +1 -0
- package/dist/procedures/idempotency.js +131 -0
- package/dist/procedures/idempotency.js.map +1 -0
- package/dist/procedures/index.d.ts +7 -3
- package/dist/procedures/index.d.ts.map +1 -1
- package/dist/procedures/index.js +6 -2
- package/dist/procedures/index.js.map +1 -1
- package/dist/procedures/interceptors.d.ts +17 -4
- package/dist/procedures/interceptors.d.ts.map +1 -1
- package/dist/procedures/interceptors.js +18 -7
- package/dist/procedures/interceptors.js.map +1 -1
- package/dist/procedures/invoke.d.ts +15 -3
- package/dist/procedures/invoke.d.ts.map +1 -1
- package/dist/procedures/invoke.js +8 -3
- package/dist/procedures/invoke.js.map +1 -1
- package/dist/procedures/manifest.d.ts +83 -0
- package/dist/procedures/manifest.d.ts.map +1 -0
- package/dist/procedures/manifest.js +90 -0
- package/dist/procedures/manifest.js.map +1 -0
- package/dist/procedures/runtime-programs.d.ts +19 -0
- package/dist/procedures/runtime-programs.d.ts.map +1 -0
- package/dist/procedures/runtime-programs.js +24 -0
- package/dist/procedures/runtime-programs.js.map +1 -0
- package/dist/procedures/types.d.ts +16 -0
- package/dist/procedures/types.d.ts.map +1 -1
- package/dist/procedures/types.js.map +1 -1
- package/dist/protocol.d.ts +40 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +58 -0
- package/dist/protocol.js.map +1 -0
- package/dist/server/host-policy.d.ts +4 -3
- package/dist/server/host-policy.d.ts.map +1 -1
- package/dist/server/host-policy.js +6 -3
- package/dist/server/host-policy.js.map +1 -1
- package/dist/server/host-procedures.d.ts +31 -0
- package/dist/server/host-procedures.d.ts.map +1 -0
- package/dist/server/host-procedures.js +75 -0
- package/dist/server/host-procedures.js.map +1 -0
- package/dist/server/index.d.ts +3 -3
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/procedure-server.d.ts +110 -4
- package/dist/server/procedure-server.d.ts.map +1 -1
- package/dist/server/procedure-server.js +269 -17
- package/dist/server/procedure-server.js.map +1 -1
- package/dist/server/request-auth.d.ts +19 -0
- package/dist/server/request-auth.d.ts.map +1 -0
- package/dist/server/request-auth.js +32 -0
- package/dist/server/request-auth.js.map +1 -0
- package/dist/server/types.d.ts +32 -0
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js.map +1 -1
- package/dist/timers.d.ts +60 -0
- package/dist/timers.d.ts.map +1 -0
- package/dist/timers.js +33 -0
- package/dist/timers.js.map +1 -0
- package/dist/tracing/traceparent.d.ts +26 -0
- package/dist/tracing/traceparent.d.ts.map +1 -0
- package/dist/tracing/traceparent.js +53 -0
- package/dist/tracing/traceparent.js.map +1 -0
- package/package.json +7 -1
- package/src/adapters/http/client/transport.ts +31 -3
- package/src/adapters/http/client/types.ts +3 -2
- package/src/adapters/http/server/transport.ts +60 -24
- package/src/adapters/http/shared/headers.ts +7 -6
- package/src/adapters/local/client/transport.ts +70 -5
- package/src/adapters/local/client/types.ts +18 -0
- package/src/adapters/mock/client/transport.ts +9 -6
- package/src/adapters/mock/client/types.ts +7 -6
- package/src/adapters/port/transport.ts +124 -0
- package/src/adapters/websocket/client/index.ts +1 -0
- package/src/adapters/websocket/client/transport.ts +232 -73
- package/src/adapters/websocket/client/types.ts +80 -21
- package/src/adapters/websocket/server/transport.ts +199 -301
- package/src/adapters/websocket/server/types.ts +20 -1
- package/src/adapters/websocket/shared/rpc.ts +453 -0
- package/src/browser.ts +51 -3
- package/src/client/call-types.ts +10 -14
- package/src/client/client.ts +28 -9
- package/src/client/deadline.ts +64 -0
- package/src/client/errors/factory.ts +12 -8
- package/src/client/index.ts +21 -3
- package/src/client/middleware/cache.ts +120 -23
- package/src/client/middleware/circuit-breaker.ts +65 -35
- package/src/client/middleware/contexts.ts +17 -10
- package/src/client/middleware/items.ts +101 -6
- package/src/client/middleware/lru.ts +12 -0
- package/src/client/middleware/rate-limit.ts +9 -7
- package/src/client/middleware/resilience.ts +81 -0
- package/src/client/middleware/retry.ts +146 -34
- package/src/client/middleware/timeout.ts +55 -46
- package/src/client/middleware/tracing.ts +13 -4
- package/src/client/types.ts +9 -1
- package/src/clock.ts +21 -0
- package/src/duration.ts +56 -0
- package/src/machines.ts +186 -0
- package/src/procedures/capability.ts +7 -8
- package/src/procedures/collection/index.ts +9 -1
- package/src/procedures/collection/procedures.ts +57 -0
- package/src/procedures/collection/schemas.ts +110 -0
- package/src/procedures/collection/storage.ts +38 -0
- package/src/procedures/core/array.ts +27 -16
- package/src/procedures/core/index.ts +8 -0
- package/src/procedures/core/meta.ts +2 -1
- package/src/procedures/core/object.ts +48 -14
- package/src/procedures/core/operands.ts +7 -0
- package/src/procedures/core/string.ts +4 -2
- package/src/procedures/define-procedure.ts +73 -20
- package/src/procedures/effects.ts +35 -0
- package/src/procedures/idempotency.ts +152 -0
- package/src/procedures/index.ts +18 -2
- package/src/procedures/interceptors.ts +28 -11
- package/src/procedures/invoke.ts +19 -5
- package/src/procedures/manifest.ts +158 -0
- package/src/procedures/runtime-programs.ts +27 -0
- package/src/procedures/types.ts +16 -0
- package/src/protocol.ts +97 -0
- package/src/server/host-policy.ts +8 -5
- package/src/server/host-procedures.ts +102 -0
- package/src/server/index.ts +5 -2
- package/src/server/procedure-server.ts +324 -10
- package/src/server/request-auth.ts +35 -0
- package/src/server/types.ts +37 -0
- package/src/timers.ts +82 -0
- package/src/tracing/traceparent.ts +61 -0
|
@@ -10,7 +10,64 @@ import { pathToKey } from "../procedures/types.js";
|
|
|
10
10
|
import { ProcedureRegistry, PROCEDURE_REGISTRY } from "../procedures/registry.js";
|
|
11
11
|
import { createCollectionProcedures } from "../procedures/collection/procedures.js";
|
|
12
12
|
import { InvocationError, invokeProcedure } from "../procedures/invoke.js";
|
|
13
|
-
import { TIMEOUT_METADATA_KEY, narrowCapability } from "../procedures/capability.js";
|
|
13
|
+
import { TIMEOUT_METADATA_KEY, effectsOf, narrowCapability } from "../procedures/capability.js";
|
|
14
|
+
import { IdempotencyCache, idempotencyKeyOf, isRepeatable } from "../procedures/idempotency.js";
|
|
15
|
+
import { optionalMs } from "../duration.js";
|
|
16
|
+
import { TIMER_DEFAULTS } from "../timers.js";
|
|
17
|
+
/**
|
|
18
|
+
* The metadata key of a stream response whose procedure declares `stream: { unbounded: true }`.
|
|
19
|
+
* Its value is "unbounded".
|
|
20
|
+
*/
|
|
21
|
+
export const STREAM_METADATA_KEY = "stream";
|
|
22
|
+
/** True when a stream response can run without an end (roadmap R15). */
|
|
23
|
+
export function isUnboundedStream(response) {
|
|
24
|
+
return response.metadata?.[STREAM_METADATA_KEY] === "unbounded";
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* True when the presented token is the expected one. The comparison takes the same time for each
|
|
28
|
+
* presented token of the same length, so the time does not tell the token.
|
|
29
|
+
*/
|
|
30
|
+
export function tokenMatches(expected, presented) {
|
|
31
|
+
if (presented === undefined || presented.length !== expected.length)
|
|
32
|
+
return false;
|
|
33
|
+
let difference = 0;
|
|
34
|
+
for (let index = 0; index < expected.length; index++)
|
|
35
|
+
difference |= expected.charCodeAt(index) ^ presented.charCodeAt(index);
|
|
36
|
+
return difference === 0;
|
|
37
|
+
}
|
|
38
|
+
/** A signal that aborts when one of the signals aborts. */
|
|
39
|
+
function joinSignals(first, second) {
|
|
40
|
+
if (!first)
|
|
41
|
+
return second;
|
|
42
|
+
const any = AbortSignal.any;
|
|
43
|
+
if (any)
|
|
44
|
+
return any([first, second]);
|
|
45
|
+
const controller = new AbortController();
|
|
46
|
+
const abort = () => controller.abort();
|
|
47
|
+
if (first.aborted || second.aborted)
|
|
48
|
+
controller.abort();
|
|
49
|
+
first.addEventListener("abort", abort, { once: true });
|
|
50
|
+
second.addEventListener("abort", abort, { once: true });
|
|
51
|
+
return controller.signal;
|
|
52
|
+
}
|
|
53
|
+
/** This function waits for a promise, or gives undefined when the signal aborts first. */
|
|
54
|
+
function untilAborted(promise, signal) {
|
|
55
|
+
if (!signal)
|
|
56
|
+
return promise;
|
|
57
|
+
if (signal.aborted)
|
|
58
|
+
return Promise.resolve(undefined);
|
|
59
|
+
return new Promise((resolve, reject) => {
|
|
60
|
+
const onAbort = () => resolve(undefined);
|
|
61
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
62
|
+
promise.then((value) => {
|
|
63
|
+
signal.removeEventListener("abort", onAbort);
|
|
64
|
+
resolve(value);
|
|
65
|
+
}, (error) => {
|
|
66
|
+
signal.removeEventListener("abort", onAbort);
|
|
67
|
+
reject(error);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
14
71
|
/** The capability of a request with the remaining time of its caller, when it sends one. */
|
|
15
72
|
function withRequestTimeout(capability, request, order) {
|
|
16
73
|
const timeoutMs = request.metadata[TIMEOUT_METADATA_KEY];
|
|
@@ -28,6 +85,11 @@ export function errorResponse(id, error) {
|
|
|
28
85
|
const retryable = error?.retryable;
|
|
29
86
|
// A refusal of the capability says why (CAPABILITIES-2026-10)
|
|
30
87
|
const reason = error instanceof InvocationError ? error.reason : undefined;
|
|
88
|
+
// An error can ask the client to wait before a retry: retryAfterMs, in milliseconds (R12)
|
|
89
|
+
const retryAfterMs = error?.retryAfterMs;
|
|
90
|
+
const metadata = reason ? { reason } : {};
|
|
91
|
+
if (typeof retryAfterMs === "number" && Number.isFinite(retryAfterMs) && retryAfterMs >= 0)
|
|
92
|
+
metadata["retry-after"] = retryAfterMs;
|
|
31
93
|
return {
|
|
32
94
|
id,
|
|
33
95
|
status: {
|
|
@@ -36,7 +98,7 @@ export function errorResponse(id, error) {
|
|
|
36
98
|
message: error instanceof Error ? error.message : String(error),
|
|
37
99
|
retryable: typeof retryable === "boolean" ? retryable : false,
|
|
38
100
|
},
|
|
39
|
-
metadata
|
|
101
|
+
metadata,
|
|
40
102
|
};
|
|
41
103
|
}
|
|
42
104
|
// =============================================================================
|
|
@@ -86,6 +148,22 @@ export class ProcedureServer extends Server {
|
|
|
86
148
|
interceptors;
|
|
87
149
|
/** The capability options of the requests (CAPABILITIES-2026-10). */
|
|
88
150
|
capabilityOptions;
|
|
151
|
+
/** The results of keyed calls, or undefined when the option turns them off (R1). */
|
|
152
|
+
idempotency;
|
|
153
|
+
/**
|
|
154
|
+
* The signal of the server: `stop()` aborts it. Each call gets it joined with its request
|
|
155
|
+
* signal (the request and connection scopes) and its deadline (roadmap R14).
|
|
156
|
+
*/
|
|
157
|
+
lifetime = new AbortController();
|
|
158
|
+
/** True while `stop()` waits for the calls in flight: a new call gets UNAVAILABLE */
|
|
159
|
+
draining = false;
|
|
160
|
+
/** The calls in flight, a stream until its end */
|
|
161
|
+
inFlight = 0;
|
|
162
|
+
/** The token of the server, and its authenticate function (R18) */
|
|
163
|
+
token;
|
|
164
|
+
authenticate;
|
|
165
|
+
/** The functions that `stop()` waits on: each one runs when no call is in flight */
|
|
166
|
+
idleWaiters = [];
|
|
89
167
|
constructor(options = {}) {
|
|
90
168
|
super(options);
|
|
91
169
|
this.procedureRegistry = options.registry ?? PROCEDURE_REGISTRY;
|
|
@@ -98,6 +176,9 @@ export class ProcedureServer extends Server {
|
|
|
98
176
|
resources: options.resources,
|
|
99
177
|
admitItem: options.admitItem,
|
|
100
178
|
};
|
|
179
|
+
this.idempotency = options.idempotency === false ? undefined : new IdempotencyCache(options.idempotency ?? {});
|
|
180
|
+
this.token = options.token;
|
|
181
|
+
this.authenticate = options.authenticate;
|
|
101
182
|
// Configure collections
|
|
102
183
|
if (options.collections) {
|
|
103
184
|
for (const [name, storage] of Object.entries(options.collections)) {
|
|
@@ -134,18 +215,24 @@ export class ProcedureServer extends Server {
|
|
|
134
215
|
hasCollection(collection) {
|
|
135
216
|
return this.storages.has(collection);
|
|
136
217
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
218
|
+
useStorage(name, storage, options) {
|
|
219
|
+
if (options === undefined) {
|
|
220
|
+
this.storages.set(name, storage);
|
|
221
|
+
return this;
|
|
222
|
+
}
|
|
223
|
+
return this.replaceStorage(name, storage, options);
|
|
224
|
+
}
|
|
225
|
+
/** The change of `useStorage` with options: flush the old storage, change, close the old one. */
|
|
226
|
+
async replaceStorage(name, storage, options) {
|
|
227
|
+
const old = this.storages.get(name);
|
|
228
|
+
const other = old !== undefined && old !== storage ? old : undefined;
|
|
229
|
+
if (other && options.drain) {
|
|
230
|
+
await other.flush?.();
|
|
231
|
+
}
|
|
148
232
|
this.storages.set(name, storage);
|
|
233
|
+
if (other && options.close) {
|
|
234
|
+
await other.close();
|
|
235
|
+
}
|
|
149
236
|
return this;
|
|
150
237
|
}
|
|
151
238
|
/**
|
|
@@ -236,8 +323,149 @@ export class ProcedureServer extends Server {
|
|
|
236
323
|
const procedure = this.resolveProcedure(method);
|
|
237
324
|
return procedure ? (request) => this.invoke(procedure, request) : null;
|
|
238
325
|
}
|
|
239
|
-
/**
|
|
326
|
+
/**
|
|
327
|
+
* Run a procedure for a request. A keyed call to a procedure that is not repeatable runs one
|
|
328
|
+
* time for its key (R1).
|
|
329
|
+
*/
|
|
240
330
|
async invoke(procedure, request) {
|
|
331
|
+
if (this.draining) {
|
|
332
|
+
// The server stops: a client can send the call to another server, or again later (R14)
|
|
333
|
+
return {
|
|
334
|
+
id: request.id,
|
|
335
|
+
status: { type: "error", code: "UNAVAILABLE", message: "The server is stopping", retryable: true },
|
|
336
|
+
metadata: {},
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
const refusal = await this.admit(request);
|
|
340
|
+
if (refusal)
|
|
341
|
+
return refusal;
|
|
342
|
+
this.inFlight++;
|
|
343
|
+
let response;
|
|
344
|
+
try {
|
|
345
|
+
const key = this.idempotency ? idempotencyKeyOf(request.metadata) : undefined;
|
|
346
|
+
response =
|
|
347
|
+
key === undefined || isRepeatable(effectsOf(procedure))
|
|
348
|
+
? await this.run(procedure, request, joinSignals(request.signal, this.lifetime.signal))
|
|
349
|
+
: await this.runKeyed(procedure, request, `${pathToKey(procedure.path)}\u0000${key}`);
|
|
350
|
+
}
|
|
351
|
+
finally {
|
|
352
|
+
// A stream is in flight until its end; another response is done now
|
|
353
|
+
if (!response?.stream)
|
|
354
|
+
this.callEnded();
|
|
355
|
+
}
|
|
356
|
+
const stream = response.stream;
|
|
357
|
+
if (stream) {
|
|
358
|
+
const ended = () => this.callEnded();
|
|
359
|
+
response = {
|
|
360
|
+
...response,
|
|
361
|
+
stream: (async function* () {
|
|
362
|
+
try {
|
|
363
|
+
yield* stream;
|
|
364
|
+
}
|
|
365
|
+
finally {
|
|
366
|
+
ended();
|
|
367
|
+
}
|
|
368
|
+
})(),
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
return response;
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* The token check and the principal of a request (roadmap R18). A network request (with
|
|
375
|
+
* credentials) must present the token. The authenticate function gives the principal. The
|
|
376
|
+
* function gives an UNAUTHORIZED response, or undefined when the request passes.
|
|
377
|
+
*/
|
|
378
|
+
async admit(request) {
|
|
379
|
+
const unauthorized = (message) => ({
|
|
380
|
+
id: request.id,
|
|
381
|
+
status: { type: "error", code: "UNAUTHORIZED", message, retryable: false },
|
|
382
|
+
metadata: {},
|
|
383
|
+
});
|
|
384
|
+
if (this.token !== undefined && request.credentials !== undefined) {
|
|
385
|
+
if (!tokenMatches(this.token, request.credentials.bearer))
|
|
386
|
+
return unauthorized("Unauthorized: this server requires its token");
|
|
387
|
+
request.principal = { id: "token", via: "token" };
|
|
388
|
+
}
|
|
389
|
+
if (this.authenticate) {
|
|
390
|
+
let principal;
|
|
391
|
+
try {
|
|
392
|
+
principal = await this.authenticate(request);
|
|
393
|
+
}
|
|
394
|
+
catch {
|
|
395
|
+
principal = undefined;
|
|
396
|
+
}
|
|
397
|
+
if (!principal)
|
|
398
|
+
return unauthorized("Unauthorized: the server did not accept the credentials");
|
|
399
|
+
request.principal = principal;
|
|
400
|
+
}
|
|
401
|
+
return undefined;
|
|
402
|
+
}
|
|
403
|
+
/** One call in flight ended: `stop()` can go on when it was the last one. */
|
|
404
|
+
callEnded() {
|
|
405
|
+
this.inFlight--;
|
|
406
|
+
if (this.inFlight === 0) {
|
|
407
|
+
const waiters = this.idleWaiters;
|
|
408
|
+
this.idleWaiters = [];
|
|
409
|
+
for (const waiter of waiters)
|
|
410
|
+
waiter();
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
/** The number of calls in flight, streams included. */
|
|
414
|
+
get callsInFlight() {
|
|
415
|
+
return this.inFlight;
|
|
416
|
+
}
|
|
417
|
+
/** True while `stop()` waits for the calls in flight: the server refuses new calls. */
|
|
418
|
+
get stopping() {
|
|
419
|
+
return this.draining;
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Run a keyed call one time. The run continues when its caller goes away, so that the next try
|
|
423
|
+
* gets its result: only the deadline of the call and the stop of the server end it. A stream
|
|
424
|
+
* still stops with its caller, because nobody can read it again.
|
|
425
|
+
*/
|
|
426
|
+
async runKeyed(procedure, request, cacheKey) {
|
|
427
|
+
const { result, first } = this.idempotency.run(cacheKey, async () => {
|
|
428
|
+
const detached = new AbortController();
|
|
429
|
+
const stopRun = () => detached.abort();
|
|
430
|
+
this.lifetime.signal.addEventListener("abort", stopRun, { once: true });
|
|
431
|
+
try {
|
|
432
|
+
const response = await this.run(procedure, request, detached.signal);
|
|
433
|
+
if (response.stream) {
|
|
434
|
+
// A stream follows its caller again
|
|
435
|
+
if (request.signal?.aborted)
|
|
436
|
+
detached.abort();
|
|
437
|
+
else
|
|
438
|
+
request.signal?.addEventListener("abort", stopRun, { once: true });
|
|
439
|
+
}
|
|
440
|
+
return response;
|
|
441
|
+
}
|
|
442
|
+
finally {
|
|
443
|
+
this.lifetime.signal.removeEventListener("abort", stopRun);
|
|
444
|
+
}
|
|
445
|
+
},
|
|
446
|
+
// A retryable error lets the next try run again: the handler said that a retry is safe
|
|
447
|
+
(response) => !(response.status.type === "error" && response.status.retryable));
|
|
448
|
+
if (first)
|
|
449
|
+
return result;
|
|
450
|
+
const response = await untilAborted(result, request.signal);
|
|
451
|
+
if (response === undefined)
|
|
452
|
+
return errorResponse(request.id, new InvocationError("ABORTED", "The request was aborted", procedure.path));
|
|
453
|
+
if (response.stream) {
|
|
454
|
+
return {
|
|
455
|
+
id: request.id,
|
|
456
|
+
status: {
|
|
457
|
+
type: "error",
|
|
458
|
+
code: "DUPLICATE",
|
|
459
|
+
message: "A call with this idempotency key gave a stream, and a stream cannot be given again",
|
|
460
|
+
retryable: false,
|
|
461
|
+
},
|
|
462
|
+
metadata: {},
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
return { ...response, id: request.id };
|
|
466
|
+
}
|
|
467
|
+
/** Run a procedure for a request with a signal. */
|
|
468
|
+
async run(procedure, request, signal) {
|
|
241
469
|
try {
|
|
242
470
|
// One invocation path for every host (ARCHITECTURE-PROPOSALS P1): input validation, the
|
|
243
471
|
// context, the expose rule for nested calls (BUGS-2026-07 H18) and output validation
|
|
@@ -245,7 +473,7 @@ export class ProcedureServer extends Server {
|
|
|
245
473
|
const output = await invokeProcedure(procedure, request.payload, {
|
|
246
474
|
registry: this.procedureRegistry,
|
|
247
475
|
metadata: request.metadata,
|
|
248
|
-
signal
|
|
476
|
+
signal,
|
|
249
477
|
repository: this,
|
|
250
478
|
expose: this.expose,
|
|
251
479
|
strictCalls: this.strictCalls,
|
|
@@ -258,7 +486,14 @@ export class ProcedureServer extends Server {
|
|
|
258
486
|
admitItem,
|
|
259
487
|
});
|
|
260
488
|
if (output.kind === "stream") {
|
|
261
|
-
|
|
489
|
+
// The faces that collect a stream read this mark (roadmap R15)
|
|
490
|
+
const unbounded = procedure.metadata?.stream?.unbounded === true;
|
|
491
|
+
return {
|
|
492
|
+
id: request.id,
|
|
493
|
+
status: { type: "success", code: 200 },
|
|
494
|
+
stream: output.items,
|
|
495
|
+
metadata: unbounded ? { [STREAM_METADATA_KEY]: "unbounded" } : {},
|
|
496
|
+
};
|
|
262
497
|
}
|
|
263
498
|
return { id: request.id, status: { type: "success", code: 200 }, payload: output.value, metadata: {} };
|
|
264
499
|
}
|
|
@@ -328,7 +563,24 @@ export class ProcedureServer extends Server {
|
|
|
328
563
|
/**
|
|
329
564
|
* Stop server and close storages.
|
|
330
565
|
*/
|
|
331
|
-
async stop() {
|
|
566
|
+
async stop(options = {}) {
|
|
567
|
+
const graceMs = optionalMs(options.grace, "grace") ?? TIMER_DEFAULTS.server.stopGraceMs;
|
|
568
|
+
// A graceful stop: new calls get UNAVAILABLE, and the calls in flight have the grace time
|
|
569
|
+
// to end (roadmap R14). Before, the transports aborted every call at once.
|
|
570
|
+
this.draining = true;
|
|
571
|
+
if (graceMs > 0 && this.inFlight > 0) {
|
|
572
|
+
await new Promise((resolve) => {
|
|
573
|
+
const timer = setTimeout(resolve, graceMs);
|
|
574
|
+
this.idleWaiters.push(() => {
|
|
575
|
+
clearTimeout(timer);
|
|
576
|
+
resolve();
|
|
577
|
+
});
|
|
578
|
+
});
|
|
579
|
+
}
|
|
580
|
+
this.lifetime.abort();
|
|
581
|
+
// A server can start again: its next calls get a new signal
|
|
582
|
+
this.lifetime = new AbortController();
|
|
583
|
+
this.draining = false;
|
|
332
584
|
await super.stop();
|
|
333
585
|
await this.closeStorages();
|
|
334
586
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"procedure-server.js","sourceRoot":"","sources":["../../src/server/procedure-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAsB,MAAM,aAAa,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAOzD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAqD,MAAM,yBAAyB,CAAC;AAE9H,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAiErF,4FAA4F;AAC5F,SAAS,kBAAkB,CACzB,UAAkC,EAClC,OAA+B,EAC/B,KAAiC;IAEjC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACzD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IACrG,OAAO,gBAAgB,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAAU,EAAE,KAAc;IACtD,wFAAwF;IACxF,oBAAoB;IACpB,MAAM,SAAS,GAAI,KAA6C,EAAE,SAAS,CAAC;IAC5E,8DAA8D;IAC9D,MAAM,MAAM,GAAG,KAAK,YAAY,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,OAAO;QACL,EAAE;QACF,MAAM,EAAE;YACN,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,KAAK,YAAY,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe;YACrE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/D,SAAS,EAAE,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;SAC9D;QACD,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;KACnC,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,OAAO,eAAgB,SAAQ,MAAM;IACxB,iBAAiB,CAAoB;IACrC,QAAQ,GAAG,IAAI,GAAG,EAAsC,CAAC;IAC1E,6DAA6D;IAC5C,gBAAgB,GAAG,IAAI,GAAG,EAAwB,CAAC;IACpE;;;;;OAKG;IACK,cAAc,GAAG,KAAK,CAAC;IACd,MAAM,CAAiD;IACvD,WAAW,CAAU;IACrB,YAAY,CAAyB;IACtD,qEAAqE;IACpD,iBAAiB,CAA4F;IAE9H,YAAY,OAAO,GAA2B,EAAE;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,QAAQ,IAAI,kBAAkB,CAAC;QAChE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC;QAChD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,iBAAiB,GAAG;YACvB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC;QAEF,wBAAwB;QACxB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,oCAAoC;IACpC,8EAA8E;IAE9E;;;;;;OAMG;IACH,UAAU,CAAI,UAAkB;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,UAAU,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,OAA+B,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,UAAkB;QAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAED,8EAA8E;IAC9E,wBAAwB;IACxB,8EAA8E;IAE9E;;;;;;OAMG;IACH,UAAU,CAAI,IAAY,EAAE,OAA6B;QACvD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAqC,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,QAAoD;QAC9D,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,8EAA8E;IAC9E,yBAAyB;IACzB,8EAA8E;IAE9E;;;;;OAKG;IACH,iBAAiB,CAAC,SAAuB;QACvC,sBAAsB;QACtB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,gBAAgB,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9E,CAAC;QACD,qEAAqE;QACrE,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,UAA0B;QAC3C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,MAAuB;QACpC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;OAKG;IACH,oBAAoB;QAClB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACK,gBAAgB,CAAC,MAAc;QACrC,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,SAAS,EAAE,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACxE,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACgB,WAAW,CAAC,MAAc;QAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,CAAC;IAED,qCAAqC;IAC7B,KAAK,CAAC,MAAM,CAAC,SAAuB,EAAE,OAA+B;QAC3E,IAAI,CAAC;YACH,wFAAwF;YACxF,qFAAqF;YACrF,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACpF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE;gBAC/D,QAAQ,EAAE,IAAI,CAAC,iBAAiB;gBAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,UAAU,EAAE,IAAI;gBAChB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,sFAAsF;gBACtF,oFAAoF;gBACpF,UAAU,EAAE,kBAAkB,CAAC,OAAO,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC;gBAC5H,cAAc;gBACd,SAAS;gBACT,SAAS;aACV,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;YACxG,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACzG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,4BAA4B,CAAC,cAAsB;QACjD,8EAA8E;QAC9E,6EAA6E;QAC7E,MAAM,UAAU,GAAG,0BAA0B,CAAC,cAAc,CAAC,CAAC;QAE9D,6CAA6C;QAC7C,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAE/C,mCAAmC;QACnC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAE9E,4CAA4C;IACpC,UAAU;QAChB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC;gBACxD,IAAI,SAAS,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;oBACvE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH;;;;OAIG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,YAAY,CAAC,IAAmB;QAC9B,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,SAAS,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACjE,CAAC,CAAC,KAAK,EAAE,CACV,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACM,KAAK,CAAC,IAAI;QACjB,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;CACF;AAED,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAO,GAA2B,EAAE;IAEpC,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
|
|
1
|
+
{"version":3,"file":"procedure-server.js","sourceRoot":"","sources":["../../src/server/procedure-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The credentials of a network request (roadmap R18). A server transport reads them into
|
|
3
|
+
* `ServerRequest.credentials`, and leaves the secret headers out of the metadata, so a handler
|
|
4
|
+
* and a nested call do not see them. `ProcedureServer` examines them.
|
|
5
|
+
*/
|
|
6
|
+
import type { Credentials } from "./types.js";
|
|
7
|
+
/** The headers without the secret ones, and without the headers that are not text. */
|
|
8
|
+
export declare function withoutSecretHeaders(headers: Record<string, unknown>): Record<string, string>;
|
|
9
|
+
/** The token of an `Authorization: Bearer <token>` header, or undefined. */
|
|
10
|
+
export declare function bearerOf(header: unknown): string | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* The credentials of a request or of a WebSocket upgrade: the bearer token of its
|
|
13
|
+
* `Authorization` header, or else of its `token` query (a browser WebSocket cannot set headers).
|
|
14
|
+
*/
|
|
15
|
+
export declare function credentialsOf(request: {
|
|
16
|
+
headers: Record<string, unknown>;
|
|
17
|
+
url?: string | undefined;
|
|
18
|
+
}): Credentials;
|
|
19
|
+
//# sourceMappingURL=request-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-auth.d.ts","sourceRoot":"","sources":["../../src/server/request-auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM7F;AAED,4EAA4E;AAC5E,wBAAgB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE5D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,WAAW,CAKlH"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The credentials of a network request (roadmap R18). A server transport reads them into
|
|
3
|
+
* `ServerRequest.credentials`, and leaves the secret headers out of the metadata, so a handler
|
|
4
|
+
* and a nested call do not see them. `ProcedureServer` examines them.
|
|
5
|
+
*/
|
|
6
|
+
/** The headers that carry a secret. They do not go into the metadata of a request. */
|
|
7
|
+
const SECRET_HEADERS = new Set(["authorization", "proxy-authorization", "cookie", "x-api-key"]);
|
|
8
|
+
/** The headers without the secret ones, and without the headers that are not text. */
|
|
9
|
+
export function withoutSecretHeaders(headers) {
|
|
10
|
+
const out = {};
|
|
11
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
12
|
+
if (!SECRET_HEADERS.has(key.toLowerCase()) && typeof value === "string")
|
|
13
|
+
out[key] = value;
|
|
14
|
+
}
|
|
15
|
+
return out;
|
|
16
|
+
}
|
|
17
|
+
/** The token of an `Authorization: Bearer <token>` header, or undefined. */
|
|
18
|
+
export function bearerOf(header) {
|
|
19
|
+
return typeof header === "string" && header.startsWith("Bearer ") ? header.slice("Bearer ".length) : undefined;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The credentials of a request or of a WebSocket upgrade: the bearer token of its
|
|
23
|
+
* `Authorization` header, or else of its `token` query (a browser WebSocket cannot set headers).
|
|
24
|
+
*/
|
|
25
|
+
export function credentialsOf(request) {
|
|
26
|
+
const bearer = bearerOf(request.headers["authorization"]);
|
|
27
|
+
if (bearer !== undefined)
|
|
28
|
+
return { bearer };
|
|
29
|
+
const query = new URL(request.url ?? "/", "http://localhost").searchParams.get("token");
|
|
30
|
+
return query === null ? {} : { bearer: query };
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=request-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-auth.js","sourceRoot":"","sources":["../../src/server/request-auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,sFAAsF;AACtF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,qBAAqB,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;AAEhG,sFAAsF;AACtF,MAAM,UAAU,oBAAoB,CAAC,OAAgC;IACnE,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC5F,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,QAAQ,CAAC,MAAe;IACtC,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAuE;IACnG,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;IAC1D,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxF,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACjD,CAAC"}
|
package/dist/server/types.d.ts
CHANGED
|
@@ -21,6 +21,38 @@ export interface ServerRequest<TReq = unknown> {
|
|
|
21
21
|
metadata: Metadata;
|
|
22
22
|
/** Abort signal for cancellation */
|
|
23
23
|
signal?: AbortSignal;
|
|
24
|
+
/**
|
|
25
|
+
* The credentials that a network transport read from the request: the bearer token of an
|
|
26
|
+
* `Authorization` header, or of the `token` query of a WebSocket connection (roadmap R18). They
|
|
27
|
+
* are not in the metadata, so a handler and a nested call do not see them. A request without
|
|
28
|
+
* credentials comes from this process (a direct `handle()`, MCP over stdio).
|
|
29
|
+
*/
|
|
30
|
+
credentials?: Credentials | undefined;
|
|
31
|
+
/** The principal of the request: who sends it. `ProcedureServer` sets it when it authenticates the request. */
|
|
32
|
+
principal?: Principal | undefined;
|
|
33
|
+
}
|
|
34
|
+
/** The credentials of a request. */
|
|
35
|
+
export interface Credentials {
|
|
36
|
+
/** The bearer token that the request presents. */
|
|
37
|
+
readonly bearer?: string | undefined;
|
|
38
|
+
}
|
|
39
|
+
/** Who sends a request (roadmap R18). */
|
|
40
|
+
export interface Principal {
|
|
41
|
+
/** The id of the principal. With the token of a host: "token". */
|
|
42
|
+
readonly id: string;
|
|
43
|
+
/** How the server authenticated it: "token", or the name of an authenticate function. */
|
|
44
|
+
readonly via: string;
|
|
45
|
+
/** More facts about the principal, from an authenticate function. */
|
|
46
|
+
readonly claims?: Readonly<Record<string, unknown>> | undefined;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The contract of a server transport (roadmap R18): a transport turns each protocol request
|
|
50
|
+
* into a `ServerRequest` (with its signal and its credentials), gives it to `handle()`, and turns
|
|
51
|
+
* the `ServerResponse` back (a value, a stream or an error). `Server` and `ProcedureServer`
|
|
52
|
+
* satisfy it, and a test can give a function.
|
|
53
|
+
*/
|
|
54
|
+
export interface RequestHandler {
|
|
55
|
+
handle(request: ServerRequest): Promise<ServerResponse>;
|
|
24
56
|
}
|
|
25
57
|
/**
|
|
26
58
|
* Server response in unified RPC format.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGnE,YAAY,EAAE,MAAM,EAAE,CAAC;AAEvB;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,IAAI,GAAG,OAAO;IAC3C,mDAAmD;IACnD,EAAE,EAAE,MAAM,CAAC;IAEX,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IAEf,sBAAsB;IACtB,OAAO,EAAE,IAAI,CAAC;IAEd,qDAAqD;IACrD,QAAQ,EAAE,QAAQ,CAAC;IAEnB,oCAAoC;IACpC,MAAM,CAAC,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"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"}
|
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;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwJH;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,MAAc;QACxB,KAAK,CACH,wBAAwB,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,GACxD,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;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGlB,IAAI;IACJ,SAAS;IAH3B,YACE,OAAe,EACC,IAAI,GAAW,KAAK,EACpB,SAAS,GAAY,KAAK;QAE1C,KAAK,CAAC,OAAO,CAAC,CAAC;oBAHC,IAAI;yBACJ,SAAS;QAGzB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF"}
|
package/dist/timers.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The timer settings of the core, as data (roadmap R34).
|
|
3
|
+
*
|
|
4
|
+
* Each default time of the middleware, the transports and the server comes from this object, so
|
|
5
|
+
* a tool can read the settings without a call. `@procedures/systems` binds them to the symbols of
|
|
6
|
+
* the timer law of `systems`, and examines rules such as "the time of one try is less than the
|
|
7
|
+
* request time of the WebSocket". The values are milliseconds. The options of an application
|
|
8
|
+
* are Durations (roadmap R11), and they replace these values.
|
|
9
|
+
*/
|
|
10
|
+
/** The default times of the core, in milliseconds. */
|
|
11
|
+
export interface TimerDefaults {
|
|
12
|
+
readonly retry: {
|
|
13
|
+
/** The tries after the first one. */
|
|
14
|
+
readonly maxRetries: number;
|
|
15
|
+
readonly retryDelayMs: number;
|
|
16
|
+
readonly backoffMultiplier: number;
|
|
17
|
+
/** The longest backoff. Infinity: no limit. */
|
|
18
|
+
readonly maxDelayMs: number;
|
|
19
|
+
};
|
|
20
|
+
readonly circuitBreaker: {
|
|
21
|
+
readonly failureWindowMs: number;
|
|
22
|
+
readonly resetTimeoutMs: number;
|
|
23
|
+
};
|
|
24
|
+
readonly cache: {
|
|
25
|
+
readonly ttlMs: number;
|
|
26
|
+
readonly statsIntervalMs: number;
|
|
27
|
+
};
|
|
28
|
+
readonly rateLimit: {
|
|
29
|
+
readonly windowMs: number;
|
|
30
|
+
};
|
|
31
|
+
readonly webSocketClient: {
|
|
32
|
+
/** The time of the handshake. */
|
|
33
|
+
readonly connectionTimeoutMs: number;
|
|
34
|
+
/** The time until the first frame of a call. */
|
|
35
|
+
readonly requestTimeoutMs: number;
|
|
36
|
+
readonly heartbeatIntervalMs: number;
|
|
37
|
+
readonly heartbeatTimeoutMs: number;
|
|
38
|
+
/** The pongs that can go missing, one after the other, before the connection closes. */
|
|
39
|
+
readonly heartbeatMisses: number;
|
|
40
|
+
readonly reconnectInitialDelayMs: number;
|
|
41
|
+
readonly reconnectMaxDelayMs: number;
|
|
42
|
+
};
|
|
43
|
+
readonly webSocketServer: {
|
|
44
|
+
readonly heartbeatIntervalMs: number;
|
|
45
|
+
readonly heartbeatMisses: number;
|
|
46
|
+
/** The time until the first frame of a call of the server to a client. */
|
|
47
|
+
readonly reverseRequestTimeoutMs: number;
|
|
48
|
+
};
|
|
49
|
+
readonly idempotency: {
|
|
50
|
+
/** The time that the server keeps the result of a keyed write. */
|
|
51
|
+
readonly ttlMs: number;
|
|
52
|
+
};
|
|
53
|
+
readonly server: {
|
|
54
|
+
/** The time that `ProcedureServer.stop()` waits for the calls that run. */
|
|
55
|
+
readonly stopGraceMs: number;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** The default times of the core. The middleware, the transports and the server read them. */
|
|
59
|
+
export declare const TIMER_DEFAULTS: TimerDefaults;
|
|
60
|
+
//# sourceMappingURL=timers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timers.d.ts","sourceRoot":"","sources":["../src/timers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE;QACd,qCAAqC;QACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACnC,+CAA+C;QAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,QAAQ,CAAC,cAAc,EAAE;QACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;QACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;KACjC,CAAC;IACF,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;KAClC,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,QAAQ,CAAC,eAAe,EAAE;QACxB,iCAAiC;QACjC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;QACrC,gDAAgD;QAChD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;QACrC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;QACpC,wFAAwF;QACxF,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;QACjC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;QACzC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;KACtC,CAAC;IACF,QAAQ,CAAC,eAAe,EAAE;QACxB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;QACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;QACjC,0EAA0E;QAC1E,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;KAC1C,CAAC;IACF,QAAQ,CAAC,WAAW,EAAE;QACpB,kEAAkE;QAClE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE;QACf,2EAA2E;QAC3E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH;AAED,8FAA8F;AAC9F,eAAO,MAAM,cAAc,EAAE,aAqB3B,CAAC"}
|
package/dist/timers.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The timer settings of the core, as data (roadmap R34).
|
|
3
|
+
*
|
|
4
|
+
* Each default time of the middleware, the transports and the server comes from this object, so
|
|
5
|
+
* a tool can read the settings without a call. `@procedures/systems` binds them to the symbols of
|
|
6
|
+
* the timer law of `systems`, and examines rules such as "the time of one try is less than the
|
|
7
|
+
* request time of the WebSocket". The values are milliseconds. The options of an application
|
|
8
|
+
* are Durations (roadmap R11), and they replace these values.
|
|
9
|
+
*/
|
|
10
|
+
/** The default times of the core. The middleware, the transports and the server read them. */
|
|
11
|
+
export const TIMER_DEFAULTS = Object.freeze({
|
|
12
|
+
retry: Object.freeze({ maxRetries: 3, retryDelayMs: 1000, backoffMultiplier: 2, maxDelayMs: Number.POSITIVE_INFINITY }),
|
|
13
|
+
circuitBreaker: Object.freeze({ failureWindowMs: 10_000, resetTimeoutMs: 30_000 }),
|
|
14
|
+
cache: Object.freeze({ ttlMs: 60_000, statsIntervalMs: 60_000 }),
|
|
15
|
+
rateLimit: Object.freeze({ windowMs: 60_000 }),
|
|
16
|
+
webSocketClient: Object.freeze({
|
|
17
|
+
connectionTimeoutMs: 10_000,
|
|
18
|
+
requestTimeoutMs: 30_000,
|
|
19
|
+
// 20 s: with the pong timeout of 5 s, the client finds a dead connection after 25 s, before a
|
|
20
|
+
// call on it reaches the request time of 30 s. Before, 30 s gave 35 s (the timer law, R34).
|
|
21
|
+
heartbeatIntervalMs: 20_000,
|
|
22
|
+
heartbeatTimeoutMs: 5_000,
|
|
23
|
+
heartbeatMisses: 1,
|
|
24
|
+
reconnectInitialDelayMs: 1_000,
|
|
25
|
+
reconnectMaxDelayMs: 30_000,
|
|
26
|
+
}),
|
|
27
|
+
// 15 s: with 2 misses, the server finds a dead client after 30 s, not later than a call of the
|
|
28
|
+
// server to it reaches its request time of 30 s. Before, 30 s gave 60 s (the timer law, R34).
|
|
29
|
+
webSocketServer: Object.freeze({ heartbeatIntervalMs: 15_000, heartbeatMisses: 2, reverseRequestTimeoutMs: 30_000 }),
|
|
30
|
+
idempotency: Object.freeze({ ttlMs: 10 * 60_000 }),
|
|
31
|
+
server: Object.freeze({ stopGraceMs: 0 }),
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=timers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timers.js","sourceRoot":"","sources":["../src/timers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmDH,8FAA8F;AAC9F,MAAM,CAAC,MAAM,cAAc,GAAkB,MAAM,CAAC,MAAM,CAAC;IACzD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC;IACvH,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IAClF,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;IAChE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9C,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC;QAC7B,mBAAmB,EAAE,MAAM;QAC3B,gBAAgB,EAAE,MAAM;QACxB,8FAA8F;QAC9F,4FAA4F;QAC5F,mBAAmB,EAAE,MAAM;QAC3B,kBAAkB,EAAE,KAAK;QACzB,eAAe,EAAE,CAAC;QAClB,uBAAuB,EAAE,KAAK;QAC9B,mBAAmB,EAAE,MAAM;KAC5B,CAAC;IACF,+FAA+F;IAC/F,8FAA8F;IAC9F,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,mBAAmB,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC;IACpH,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC;IAClD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;CAC1C,CAAC,CAAC"}
|