@procedures/client 0.2.3 → 0.4.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 +94 -0
- package/README.md +77 -44
- 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 +54 -22
- 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 +67 -6
- 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/node.d.ts +30 -0
- package/dist/adapters/websocket/client/node.d.ts.map +1 -0
- package/dist/adapters/websocket/client/node.js +32 -0
- package/dist/adapters/websocket/client/node.js.map +1 -0
- 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 +229 -75
- package/dist/adapters/websocket/client/transport.js.map +1 -1
- package/dist/adapters/websocket/client/types.d.ts +71 -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/errors/http-errors.d.ts.map +1 -1
- package/dist/client/errors/http-errors.js +6 -0
- package/dist/client/errors/http-errors.js.map +1 -1
- package/dist/client/errors/index.d.ts +1 -1
- package/dist/client/errors/index.js +1 -1
- package/dist/client/errors/registry.d.ts +2 -1
- package/dist/client/errors/registry.d.ts.map +1 -1
- package/dist/client/errors/registry.js +72 -22
- package/dist/client/errors/registry.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 -7
- 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 +48 -46
- 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/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- 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/node.d.ts +11 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +10 -0
- package/dist/node.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 +1 -1
- package/dist/procedures/core/array.d.ts.map +1 -1
- package/dist/procedures/core/array.js +81 -29
- 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 +17 -2
- package/dist/procedures/core/index.js.map +1 -1
- package/dist/procedures/core/logic.js +1 -1
- package/dist/procedures/core/logic.js.map +1 -1
- package/dist/procedures/core/math.d.ts.map +1 -1
- package/dist/procedures/core/math.js +5 -1
- package/dist/procedures/core/math.js.map +1 -1
- package/dist/procedures/core/meta.d.ts.map +1 -1
- package/dist/procedures/core/meta.js +43 -8
- 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/core/type.d.ts.map +1 -1
- package/dist/procedures/core/type.js +4 -2
- package/dist/procedures/core/type.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/discovery.d.ts +4 -6
- package/dist/procedures/discovery.d.ts.map +1 -1
- package/dist/procedures/discovery.js +4 -6
- package/dist/procedures/discovery.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/ref.d.ts +4 -2
- package/dist/procedures/ref.d.ts.map +1 -1
- package/dist/procedures/ref.js +2 -1
- package/dist/procedures/ref.js.map +1 -1
- 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 +47 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +68 -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 +112 -5
- package/dist/server/procedure-server.d.ts.map +1 -1
- package/dist/server/procedure-server.js +273 -19
- 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 +11 -4
- 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 +61 -26
- package/src/adapters/http/shared/headers.ts +7 -6
- package/src/adapters/local/client/transport.ts +74 -7
- 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/node.ts +34 -0
- package/src/adapters/websocket/client/transport.ts +251 -81
- package/src/adapters/websocket/client/types.ts +81 -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/README.md +2 -0
- package/src/client/errors/factory.ts +12 -8
- package/src/client/errors/http-errors.ts +5 -0
- package/src/client/errors/index.ts +1 -1
- package/src/client/errors/registry.ts +79 -22
- 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 -9
- package/src/client/middleware/resilience.ts +81 -0
- package/src/client/middleware/retry.ts +146 -34
- package/src/client/middleware/timeout.ts +57 -55
- 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/index.ts +4 -0
- package/src/machines.ts +186 -0
- package/src/node.ts +11 -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 +79 -31
- package/src/procedures/core/index.ts +17 -2
- package/src/procedures/core/logic.ts +1 -1
- package/src/procedures/core/math.ts +5 -1
- package/src/procedures/core/meta.ts +45 -8
- 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/core/type.ts +4 -2
- package/src/procedures/define-procedure.ts +73 -20
- package/src/procedures/discovery.ts +4 -6
- 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/ref.ts +4 -2
- package/src/procedures/runtime-programs.ts +27 -0
- package/src/procedures/types.ts +16 -0
- package/src/protocol.ts +108 -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 +328 -12
- 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
- package/dist/procedures/cli/announce.d.ts +0 -67
- package/dist/procedures/cli/announce.d.ts.map +0 -1
- package/dist/procedures/cli/announce.js +0 -392
- package/dist/procedures/cli/announce.js.map +0 -1
- package/dist/procedures/cli/discover.d.ts +0 -66
- package/dist/procedures/cli/discover.d.ts.map +0 -1
- package/dist/procedures/cli/discover.js +0 -310
- package/dist/procedures/cli/discover.js.map +0 -1
- package/dist/procedures/cli/index.d.ts +0 -13
- package/dist/procedures/cli/index.d.ts.map +0 -1
- package/dist/procedures/cli/index.js +0 -203
- package/dist/procedures/cli/index.js.map +0 -1
- package/dist/procedures/cli/init.d.ts +0 -17
- package/dist/procedures/cli/init.d.ts.map +0 -1
- package/dist/procedures/cli/init.js +0 -336
- package/dist/procedures/cli/init.js.map +0 -1
- package/src/procedures/cli/announce.ts +0 -470
- package/src/procedures/cli/discover.ts +0 -390
- package/src/procedures/cli/index.ts +0 -231
- package/src/procedures/cli/init.ts +0 -370
|
@@ -5,7 +5,35 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { methodKey } from "./types.js";
|
|
7
7
|
import { InvocationError, invokeProcedure, isAsyncIterable } from "../../../procedures/invoke.js";
|
|
8
|
+
import { TIMEOUT_METADATA_KEY } from "../../../client/deadline.js";
|
|
9
|
+
import { narrowCapability } from "../../../procedures/capability.js";
|
|
8
10
|
import { methodToPath } from "../../../server/method.js";
|
|
11
|
+
import { errorCodeOf } from "../../../protocol.js";
|
|
12
|
+
/** The value of `untilAborted` when the signal aborts first. */
|
|
13
|
+
const ABORTED = Symbol("aborted");
|
|
14
|
+
/** The value of a promise, or ABORTED when the signal aborts first. The promise runs on. */
|
|
15
|
+
function untilAborted(promise, signal) {
|
|
16
|
+
if (!signal)
|
|
17
|
+
return promise;
|
|
18
|
+
if (signal.aborted) {
|
|
19
|
+
promise.catch(() => undefined);
|
|
20
|
+
return Promise.resolve(ABORTED);
|
|
21
|
+
}
|
|
22
|
+
return new Promise((resolve, reject) => {
|
|
23
|
+
const onAbort = () => {
|
|
24
|
+
promise.catch(() => undefined);
|
|
25
|
+
resolve(ABORTED);
|
|
26
|
+
};
|
|
27
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
28
|
+
promise.then((value) => {
|
|
29
|
+
signal.removeEventListener("abort", onAbort);
|
|
30
|
+
resolve(value);
|
|
31
|
+
}, (error) => {
|
|
32
|
+
signal.removeEventListener("abort", onAbort);
|
|
33
|
+
reject(error);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
}
|
|
9
37
|
function successItem(id, payload) {
|
|
10
38
|
return { id, status: { type: "success", code: 200 }, payload: payload, metadata: {} };
|
|
11
39
|
}
|
|
@@ -44,9 +72,15 @@ export class LocalTransport {
|
|
|
44
72
|
handlers = new Map();
|
|
45
73
|
throwOnMissing;
|
|
46
74
|
registry;
|
|
75
|
+
interceptors;
|
|
76
|
+
capability;
|
|
77
|
+
clearanceOrder;
|
|
47
78
|
constructor(options = {}) {
|
|
48
79
|
this.throwOnMissing = options.throwOnMissing !== false;
|
|
49
80
|
this.registry = options.registry;
|
|
81
|
+
this.interceptors = options.interceptors;
|
|
82
|
+
this.capability = options.capability;
|
|
83
|
+
this.clearanceOrder = options.clearanceOrder;
|
|
50
84
|
// Register pre-configured handlers. A key without a version ("users.get") gets the
|
|
51
85
|
// empty version, as methodKey() makes it: before, such a key was never found.
|
|
52
86
|
if (options.handlers) {
|
|
@@ -117,11 +151,25 @@ export class LocalTransport {
|
|
|
117
151
|
let values;
|
|
118
152
|
let value;
|
|
119
153
|
if (procedure) {
|
|
120
|
-
|
|
154
|
+
// The interceptors, the capability and the deadline of the call, as on a server (R14)
|
|
155
|
+
const timeoutMs = message.metadata[TIMEOUT_METADATA_KEY];
|
|
156
|
+
const capability = typeof timeoutMs === "number" && Number.isFinite(timeoutMs) && timeoutMs >= 0
|
|
157
|
+
? narrowCapability(this.capability, { timeoutMs }, this.clearanceOrder)
|
|
158
|
+
: this.capability;
|
|
159
|
+
const output = await untilAborted(invokeProcedure(procedure, message.payload, {
|
|
121
160
|
registry: this.registry,
|
|
122
161
|
metadata: message.metadata,
|
|
123
162
|
signal: message.signal,
|
|
124
|
-
|
|
163
|
+
...(this.interceptors ? { interceptors: this.interceptors } : {}),
|
|
164
|
+
...(capability ? { capability } : {}),
|
|
165
|
+
...(this.clearanceOrder ? { clearanceOrder: this.clearanceOrder } : {}),
|
|
166
|
+
}), message.signal);
|
|
167
|
+
if (output === ABORTED) {
|
|
168
|
+
// The caller stops waiting at once, as over HTTP and WebSocket (the conformance suite
|
|
169
|
+
// of roadmap R18 found this: before, a local call waited for its handler)
|
|
170
|
+
yield errorItem(message.id, "ABORTED", "Request was aborted");
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
125
173
|
if (output.kind === "stream")
|
|
126
174
|
values = output.items;
|
|
127
175
|
else
|
|
@@ -129,13 +177,21 @@ export class LocalTransport {
|
|
|
129
177
|
}
|
|
130
178
|
else {
|
|
131
179
|
// Execute handler (may be sync, async or an async generator)
|
|
132
|
-
const result = await handler(message.payload, message);
|
|
180
|
+
const result = await untilAborted(Promise.resolve(handler(message.payload, message)), message.signal);
|
|
181
|
+
if (result === ABORTED) {
|
|
182
|
+
yield errorItem(message.id, "ABORTED", "Request was aborted");
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
133
185
|
if (isAsyncIterable(result))
|
|
134
186
|
values = result;
|
|
135
187
|
else
|
|
136
188
|
value = result;
|
|
137
189
|
}
|
|
138
190
|
if (values === undefined) {
|
|
191
|
+
if (message.signal?.aborted) {
|
|
192
|
+
yield errorItem(message.id, "ABORTED", "Request was aborted");
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
139
195
|
yield successItem(message.id, value);
|
|
140
196
|
return;
|
|
141
197
|
}
|
|
@@ -148,9 +204,14 @@ export class LocalTransport {
|
|
|
148
204
|
}
|
|
149
205
|
}
|
|
150
206
|
catch (error) {
|
|
151
|
-
// The handler threw, or the invocation failed (its code: VALIDATION_ERROR, ABORTED and so
|
|
152
|
-
|
|
153
|
-
|
|
207
|
+
// The handler threw, or the invocation failed (its code: VALIDATION_ERROR, ABORTED and so
|
|
208
|
+
// on). A handler error keeps its own code, as on the other faces (WIRE-PROTOCOL.md).
|
|
209
|
+
const code = errorCodeOf(error);
|
|
210
|
+
const item = errorItem(message.id, code, error instanceof Error ? error.message : "Unknown error");
|
|
211
|
+
// The reason of a FORBIDDEN error travels on each face (roadmap R25)
|
|
212
|
+
if (error instanceof InvocationError && error.reason)
|
|
213
|
+
item.metadata = { reason: error.reason };
|
|
214
|
+
yield item;
|
|
154
215
|
}
|
|
155
216
|
}
|
|
156
217
|
async close() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/adapters/local/client/transport.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/adapters/local/client/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { Message, Method } from "../../../client/types.js";
|
|
7
7
|
import type { ProcedureRegistry } from "../../../procedures/registry.js";
|
|
8
|
+
import type { Interceptor } from "../../../procedures/invoke.js";
|
|
9
|
+
import type { Capability, ClearanceOrder } from "../../../procedures/types.js";
|
|
8
10
|
/**
|
|
9
11
|
* Handler function for a method.
|
|
10
12
|
*/
|
|
@@ -35,5 +37,18 @@ export interface LocalTransportOptions {
|
|
|
35
37
|
* The procedure runs through `invokeProcedure()`, as on a server.
|
|
36
38
|
*/
|
|
37
39
|
registry?: ProcedureRegistry;
|
|
40
|
+
/**
|
|
41
|
+
* The interceptors of each procedure that the transport runs, as on a server: policy, tracing,
|
|
42
|
+
* timeouts, metrics (roadmap R14). Before, a local call had none.
|
|
43
|
+
*/
|
|
44
|
+
interceptors?: readonly Interceptor[] | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* The capability of each call. The remaining time that a call sends (`procedure-timeout`)
|
|
47
|
+
* makes its deadline earlier, as on a server: a `Client` with a timeout gives a local call a
|
|
48
|
+
* deadline too (roadmap R14).
|
|
49
|
+
*/
|
|
50
|
+
capability?: Capability | undefined;
|
|
51
|
+
/** The order of the clearance values of the capability. */
|
|
52
|
+
clearanceOrder?: ClearanceOrder | undefined;
|
|
38
53
|
}
|
|
39
54
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/adapters/local/client/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/adapters/local/client/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,OAAO,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,GAAG,OAAO,IAAI,CACpD,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,KACnB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AAEhD;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAE7B;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,CAAC;IAElD;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAEpC,2DAA2D;IAC3D,cAAc,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;CAC7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/adapters/local/client/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/adapters/local/client/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,OAAO,GAAG,OAAO,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;AAC5D,CAAC"}
|
|
@@ -19,8 +19,8 @@ import type { MockResponse, ResponseMatcher, MockTransportOptions, CallHistoryEn
|
|
|
19
19
|
* ```typescript
|
|
20
20
|
* // Create mock transport with latency
|
|
21
21
|
* const mock = new MockTransport({
|
|
22
|
-
* minLatency: 10,
|
|
23
|
-
* maxLatency: 50,
|
|
22
|
+
* minLatency: ms(10),
|
|
23
|
+
* maxLatency: ms(50),
|
|
24
24
|
* });
|
|
25
25
|
*
|
|
26
26
|
* // Mock a specific response
|
|
@@ -49,6 +49,7 @@ import type { MockResponse, ResponseMatcher, MockTransportOptions, CallHistoryEn
|
|
|
49
49
|
*/
|
|
50
50
|
export declare class MockTransport implements Transport {
|
|
51
51
|
readonly name = "mock";
|
|
52
|
+
/** The options, with the latencies in milliseconds */
|
|
52
53
|
private options;
|
|
53
54
|
private responses;
|
|
54
55
|
private history;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../../src/adapters/mock/client/transport.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../../src/adapters/mock/client/transport.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAGpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,qBAAa,aAAc,YAAW,SAAS;IAC7C,QAAQ,CAAC,IAAI,UAAU;IAEvB,sDAAsD;IACtD,OAAO,CAAC,OAAO,CAAiH;IAChI,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,OAAO,CAA0B;IAEzC,YAAY,OAAO,GAAE,oBAAyB,EAS7C;IAED;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,IAAI,GAAG,OAAO,EACzB,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,GAC3B,IAAI,CAEN;IAED;;;;;;OAMG;IACH,WAAW,CAAC,IAAI,GAAG,OAAO,EACxB,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,IAAI,EACb,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACrC,IAAI,CAYN;IAED;;;;;OAKG;IACH,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAIzD;IAED;;;;;OAKG;IACH,UAAU,CAAC,IAAI,GAAG,OAAO,EACvB,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,GAC1B,IAAI,CAEN;IAED;;OAEG;IACH,UAAU,IAAI,IAAI,CAEjB;IAED;;;;OAIG;IACH,QAAQ,IAAI,gBAAgB,EAAE,CAE7B;IAED;;;;;OAKG;IACH,gBAAgB,CACd,SAAS,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,GAC9C,gBAAgB,EAAE,CAEpB;IAED;;;;OAIG;IACH,WAAW,IAAI,gBAAgB,GAAG,SAAS,CAE1C;IAED;;OAEG;IACH,YAAY,IAAI,IAAI,CAEnB;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAGZ;IAED;;OAEG;IACI,IAAI,CAAC,IAAI,EAAE,IAAI,EACpB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GACrB,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAiFnC;IAED;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAED;;OAEG;YACW,eAAe;IAY7B;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,OAAO,CAAC,UAAU;CAuBnB"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* In-memory transport that simulates network behavior for testing.
|
|
5
5
|
*/
|
|
6
|
+
import { optionalMs } from "../../../duration.js";
|
|
6
7
|
/**
|
|
7
8
|
* Mock transport implementation for testing.
|
|
8
9
|
*
|
|
@@ -17,8 +18,8 @@
|
|
|
17
18
|
* ```typescript
|
|
18
19
|
* // Create mock transport with latency
|
|
19
20
|
* const mock = new MockTransport({
|
|
20
|
-
* minLatency: 10,
|
|
21
|
-
* maxLatency: 50,
|
|
21
|
+
* minLatency: ms(10),
|
|
22
|
+
* maxLatency: ms(50),
|
|
22
23
|
* });
|
|
23
24
|
*
|
|
24
25
|
* // Mock a specific response
|
|
@@ -47,13 +48,14 @@
|
|
|
47
48
|
*/
|
|
48
49
|
export class MockTransport {
|
|
49
50
|
name = "mock";
|
|
51
|
+
/** The options, with the latencies in milliseconds */
|
|
50
52
|
options;
|
|
51
53
|
responses = new Map();
|
|
52
54
|
history = [];
|
|
53
55
|
constructor(options = {}) {
|
|
54
56
|
this.options = {
|
|
55
|
-
minLatency: options.minLatency ?? 0,
|
|
56
|
-
maxLatency: options.maxLatency ?? 0,
|
|
57
|
+
minLatency: optionalMs(options.minLatency, "minLatency") ?? 0,
|
|
58
|
+
maxLatency: optionalMs(options.maxLatency, "maxLatency") ?? 0,
|
|
57
59
|
failureRate: options.failureRate ?? 0,
|
|
58
60
|
defaultErrorMessage: options.defaultErrorMessage ?? "Mock transport error",
|
|
59
61
|
trackHistory: options.trackHistory ?? true,
|
|
@@ -202,7 +204,8 @@ export class MockTransport {
|
|
|
202
204
|
}
|
|
203
205
|
// Apply custom delay if specified
|
|
204
206
|
if (mockResponse.delay !== undefined) {
|
|
205
|
-
|
|
207
|
+
const delay = optionalMs(mockResponse.delay, "delay");
|
|
208
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
206
209
|
}
|
|
207
210
|
// Handle error response
|
|
208
211
|
if (mockResponse.error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/adapters/mock/client/transport.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/adapters/mock/client/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Type definitions for Mock adapter testing utilities.
|
|
5
5
|
*/
|
|
6
6
|
import type { Message, ResponseItem } from "../../../client/types.js";
|
|
7
|
+
import type { Duration } from "../../../duration.js";
|
|
7
8
|
/**
|
|
8
9
|
* Mock response configuration.
|
|
9
10
|
*/
|
|
@@ -21,10 +22,10 @@ export interface MockResponse<TRes = unknown> {
|
|
|
21
22
|
*/
|
|
22
23
|
error?: Error;
|
|
23
24
|
/**
|
|
24
|
-
* Delay
|
|
25
|
+
* Delay before responding
|
|
25
26
|
* @default Uses transport's latency config
|
|
26
27
|
*/
|
|
27
|
-
delay?:
|
|
28
|
+
delay?: Duration;
|
|
28
29
|
/**
|
|
29
30
|
* Number of times this response can be used
|
|
30
31
|
* @default Infinity (reusable)
|
|
@@ -40,15 +41,15 @@ export type ResponseMatcher = (method: any, payload: unknown) => boolean;
|
|
|
40
41
|
*/
|
|
41
42
|
export interface MockTransportOptions {
|
|
42
43
|
/**
|
|
43
|
-
* Minimum latency
|
|
44
|
+
* Minimum latency
|
|
44
45
|
* @default 0
|
|
45
46
|
*/
|
|
46
|
-
minLatency?:
|
|
47
|
+
minLatency?: Duration;
|
|
47
48
|
/**
|
|
48
|
-
* Maximum latency
|
|
49
|
+
* Maximum latency
|
|
49
50
|
* @default 0
|
|
50
51
|
*/
|
|
51
|
-
maxLatency?:
|
|
52
|
+
maxLatency?: Duration;
|
|
52
53
|
/**
|
|
53
54
|
* Random failure rate (0-1)
|
|
54
55
|
* @default 0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/adapters/mock/client/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/adapters/mock/client/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,IAAI,GAAG,OAAO;IAC1C;;OAEG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAE7B;;OAEG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IAE1B;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd;;;OAGG;IACH,KAAK,CAAC,EAAE,QAAQ,CAAC;IAEjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,UAAU,CAAC,EAAE,QAAQ,CAAC;IAEtB;;;OAGG;IACH,UAAU,CAAC,EAAE,QAAQ,CAAC;IAEtB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,IAAI,GAAG,OAAO;IAC9C,4BAA4B;IAC5B,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;CAC1B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The transport over a message port (roadmap R27): a Web Worker, a `MessagePort` of a
|
|
3
|
+
* `MessageChannel`, an iframe, or a `worker_threads` port of Node.
|
|
4
|
+
*
|
|
5
|
+
* The two sides of a port send calls to each other with the frames of the WebSocket transport
|
|
6
|
+
* (`websocket/shared/rpc.ts`): a request, then a response, an error, or a stream with credit, and
|
|
7
|
+
* a cancel. A port sends objects, not text, so a frame needs no JSON. A side serves the calls of
|
|
8
|
+
* the other side with its `serve` handler, for example a `ProcedureServer`. Before, the site had
|
|
9
|
+
* two worker protocols of its own.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // In the worker: serve the procedures of a registry
|
|
14
|
+
* new PortTransport(self, { serve: new ProcedureServer({ registry, autoRegister: true }) });
|
|
15
|
+
*
|
|
16
|
+
* // On the page: call them
|
|
17
|
+
* const client = new Client(new PortTransport(new Worker(url, { type: "module" })));
|
|
18
|
+
* for await (const item of client.stream({ service: "site", operation: "run" }, input)) { ... }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
import type { Message, ResponseItem, Transport } from "../../client/types.js";
|
|
22
|
+
import type { RequestHandler } from "../../server/types.js";
|
|
23
|
+
/**
|
|
24
|
+
* A message port: the object that a worker, a `MessagePort` or a `worker_threads` port gives. It
|
|
25
|
+
* has `postMessage`, and `addEventListener` (the browser form) or `on` (the Node form).
|
|
26
|
+
*
|
|
27
|
+
* The event of a listener has the type `any`: the DOM and Node give it different types, and a
|
|
28
|
+
* port of each must fit without a cast. The transport reads only its `data`.
|
|
29
|
+
*/
|
|
30
|
+
export interface PortLike {
|
|
31
|
+
postMessage(message: unknown): void;
|
|
32
|
+
addEventListener?(type: "message", listener: (event: any) => void): void;
|
|
33
|
+
removeEventListener?(type: "message", listener: (event: any) => void): void;
|
|
34
|
+
on?(type: "message", listener: (data: unknown) => void): unknown;
|
|
35
|
+
off?(type: "message", listener: (data: unknown) => void): unknown;
|
|
36
|
+
/** A `MessagePort` delivers its messages to `addEventListener` only after `start()`. */
|
|
37
|
+
start?(): void;
|
|
38
|
+
}
|
|
39
|
+
/** The options of a `PortTransport`. */
|
|
40
|
+
export interface PortTransportOptions {
|
|
41
|
+
/** The handler of the calls of the other side, for example a `ProcedureServer`. */
|
|
42
|
+
serve?: RequestHandler | undefined;
|
|
43
|
+
/** The number of stream items that the reader holds. The default is 64. */
|
|
44
|
+
streamWindow?: number | undefined;
|
|
45
|
+
}
|
|
46
|
+
/** The transport over a message port, in the two directions. */
|
|
47
|
+
export declare class PortTransport implements Transport {
|
|
48
|
+
private readonly port;
|
|
49
|
+
readonly name = "port";
|
|
50
|
+
private readonly outgoing;
|
|
51
|
+
private readonly incoming;
|
|
52
|
+
private open;
|
|
53
|
+
private readonly onBrowserMessage;
|
|
54
|
+
private readonly onNodeMessage;
|
|
55
|
+
constructor(port: PortLike, options?: PortTransportOptions);
|
|
56
|
+
private receive;
|
|
57
|
+
/** This function sends a call to the other side, and gives its response items. */
|
|
58
|
+
send<TReq, TRes>(message: Message<TReq>): AsyncIterable<ResponseItem<TRes>>;
|
|
59
|
+
/** This function stops the calls in the two directions, and stops to listen. It does not close the port. */
|
|
60
|
+
close(): Promise<void>;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/adapters/port/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAK5D;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAEpC,gBAAgB,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAEzE,mBAAmB,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAC5E,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC;IACjE,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC;IAClE,wFAAwF;IACxF,KAAK,CAAC,IAAI,IAAI,CAAC;CAChB;AAED,wCAAwC;AACxC,MAAM,WAAW,oBAAoB;IACnC,mFAAmF;IACnF,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAOD,gEAAgE;AAChE,qBAAa,aAAc,YAAW,SAAS;IAS3C,OAAO,CAAC,QAAQ,CAAC,IAAI;IARvB,QAAQ,CAAC,IAAI,UAAU;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgE;IACjG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+C;IAE7E,YACmB,IAAI,EAAE,QAAQ,EAC/B,OAAO,GAAE,oBAAyB,EA+BnC;IAED,OAAO,CAAC,OAAO;IAMf,kFAAkF;IAClF,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAE1E;IAED,4GAA4G;IACtG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAO3B;CACF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The transport over a message port (roadmap R27): a Web Worker, a `MessagePort` of a
|
|
3
|
+
* `MessageChannel`, an iframe, or a `worker_threads` port of Node.
|
|
4
|
+
*
|
|
5
|
+
* The two sides of a port send calls to each other with the frames of the WebSocket transport
|
|
6
|
+
* (`websocket/shared/rpc.ts`): a request, then a response, an error, or a stream with credit, and
|
|
7
|
+
* a cancel. A port sends objects, not text, so a frame needs no JSON. A side serves the calls of
|
|
8
|
+
* the other side with its `serve` handler, for example a `ProcedureServer`. Before, the site had
|
|
9
|
+
* two worker protocols of its own.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // In the worker: serve the procedures of a registry
|
|
14
|
+
* new PortTransport(self, { serve: new ProcedureServer({ registry, autoRegister: true }) });
|
|
15
|
+
*
|
|
16
|
+
* // On the page: call them
|
|
17
|
+
* const client = new Client(new PortTransport(new Worker(url, { type: "module" })));
|
|
18
|
+
* for await (const item of client.stream({ service: "site", operation: "run" }, input)) { ... }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
import { IncomingCalls, OutgoingCalls } from "../websocket/shared/rpc.js";
|
|
22
|
+
import { withoutInternalKeys } from "../metadata.js";
|
|
23
|
+
/** A frame of the protocol: an object with an id and a type. */
|
|
24
|
+
function isFrame(value) {
|
|
25
|
+
return value !== null && typeof value === "object" && typeof value.type === "string";
|
|
26
|
+
}
|
|
27
|
+
/** The transport over a message port, in the two directions. */
|
|
28
|
+
export class PortTransport {
|
|
29
|
+
port;
|
|
30
|
+
name = "port";
|
|
31
|
+
outgoing;
|
|
32
|
+
incoming;
|
|
33
|
+
open = true;
|
|
34
|
+
onBrowserMessage = (event) => this.receive(event.data);
|
|
35
|
+
onNodeMessage = (data) => this.receive(data);
|
|
36
|
+
constructor(port, options = {}) {
|
|
37
|
+
this.port = port;
|
|
38
|
+
const send = (frame) => this.port.postMessage(frame);
|
|
39
|
+
const isOpen = () => this.open;
|
|
40
|
+
this.outgoing = new OutgoingCalls({
|
|
41
|
+
send,
|
|
42
|
+
isOpen,
|
|
43
|
+
// No time limit: a worker can run a long program. The `signal` of a call stops it. This file
|
|
44
|
+
// does not import the Durations (quantity, 6 kB of gzip), so the page of a worker stays small.
|
|
45
|
+
requestTimeoutMs: 0,
|
|
46
|
+
streamWindow: Math.max(2, options.streamWindow ?? 64),
|
|
47
|
+
idPrefix: "",
|
|
48
|
+
});
|
|
49
|
+
if (options.serve) {
|
|
50
|
+
this.incoming = new IncomingCalls({
|
|
51
|
+
handler: options.serve,
|
|
52
|
+
send,
|
|
53
|
+
isOpen,
|
|
54
|
+
// A call over a port comes from a part of this application: it has no credentials
|
|
55
|
+
requestOf: (frame, signal) => ({
|
|
56
|
+
id: frame.id,
|
|
57
|
+
method: frame.method,
|
|
58
|
+
payload: frame.payload === undefined ? {} : frame.payload,
|
|
59
|
+
metadata: withoutInternalKeys(frame.metadata),
|
|
60
|
+
signal,
|
|
61
|
+
}),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (port.addEventListener)
|
|
65
|
+
port.addEventListener("message", this.onBrowserMessage);
|
|
66
|
+
else
|
|
67
|
+
port.on?.("message", this.onNodeMessage);
|
|
68
|
+
port.start?.();
|
|
69
|
+
}
|
|
70
|
+
receive(data) {
|
|
71
|
+
if (!this.open || !isFrame(data))
|
|
72
|
+
return;
|
|
73
|
+
if (this.outgoing.receive(data))
|
|
74
|
+
return;
|
|
75
|
+
this.incoming?.receive(data);
|
|
76
|
+
}
|
|
77
|
+
/** This function sends a call to the other side, and gives its response items. */
|
|
78
|
+
send(message) {
|
|
79
|
+
return this.outgoing.call(message);
|
|
80
|
+
}
|
|
81
|
+
/** This function stops the calls in the two directions, and stops to listen. It does not close the port. */
|
|
82
|
+
async close() {
|
|
83
|
+
if (!this.open)
|
|
84
|
+
return;
|
|
85
|
+
this.open = false;
|
|
86
|
+
this.outgoing.failAll("The port transport closed");
|
|
87
|
+
this.incoming?.abortAll();
|
|
88
|
+
if (this.port.removeEventListener)
|
|
89
|
+
this.port.removeEventListener("message", this.onBrowserMessage);
|
|
90
|
+
else
|
|
91
|
+
this.port.off?.("message", this.onNodeMessage);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/adapters/port/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Public API for WebSocket client adapter.
|
|
5
5
|
*/
|
|
6
|
-
export type { WebSocketTransportOptions, WebSocketMessage, ServerRequestMessage, ServerRequestHandler, EventHandler, } from "./types.js";
|
|
6
|
+
export type { WebSocketTransportOptions, WebSocketClass, WebSocketMessage, ServerRequestMessage, ServerRequestHandler, EventHandler, } from "./types.js";
|
|
7
7
|
export { WebSocketState } from "./types.js";
|
|
8
8
|
export { WebSocketTransport } from "./transport.js";
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/websocket/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,yBAAyB,EACzB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/websocket/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,yBAAyB,EACzB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapters/websocket/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapters/websocket/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,YAAY;AACZ,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The WebSocket client transport for Node (finding of roadmap R36).
|
|
3
|
+
*
|
|
4
|
+
* This class is the `WebSocketTransport` of the browser entry with one other default: its sockets
|
|
5
|
+
* are of the `WebSocket` class of the `ws` package. A drop by the heartbeat or by the time limit
|
|
6
|
+
* of the handshake then ends the socket at once with `terminate()`. The global `WebSocket` of Node
|
|
7
|
+
* has only `close()`, which waits for the answer of the peer. With a dead peer, that socket stays
|
|
8
|
+
* open until the kernel stops it: 924.6 seconds in the harness cells of R36.
|
|
9
|
+
*
|
|
10
|
+
* Only the Node entry `@procedures/client/node` exports this class. The browser entry does not
|
|
11
|
+
* import `ws`.
|
|
12
|
+
*/
|
|
13
|
+
import { WebSocketTransport as PortableWebSocketTransport } from "./transport.js";
|
|
14
|
+
import type { WebSocketTransportOptions } from "./types.js";
|
|
15
|
+
/**
|
|
16
|
+
* The WebSocket client transport with the `WebSocket` class of the `ws` package as the default
|
|
17
|
+
* class of its sockets. The option `webSocket` gives another class.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import { Client } from "@procedures/client";
|
|
22
|
+
* import { WebSocketTransport } from "@procedures/client/node";
|
|
23
|
+
*
|
|
24
|
+
* const client = new Client({ transport: new WebSocketTransport({ url: "ws://localhost:3000/ws" }) });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare class WebSocketTransport extends PortableWebSocketTransport {
|
|
28
|
+
constructor(options: WebSocketTransportOptions);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../../src/adapters/websocket/client/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,kBAAkB,IAAI,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAmB,SAAQ,0BAA0B;IAChE,YAAY,OAAO,EAAE,yBAAyB,EAE7C;CACF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The WebSocket client transport for Node (finding of roadmap R36).
|
|
3
|
+
*
|
|
4
|
+
* This class is the `WebSocketTransport` of the browser entry with one other default: its sockets
|
|
5
|
+
* are of the `WebSocket` class of the `ws` package. A drop by the heartbeat or by the time limit
|
|
6
|
+
* of the handshake then ends the socket at once with `terminate()`. The global `WebSocket` of Node
|
|
7
|
+
* has only `close()`, which waits for the answer of the peer. With a dead peer, that socket stays
|
|
8
|
+
* open until the kernel stops it: 924.6 seconds in the harness cells of R36.
|
|
9
|
+
*
|
|
10
|
+
* Only the Node entry `@procedures/client/node` exports this class. The browser entry does not
|
|
11
|
+
* import `ws`.
|
|
12
|
+
*/
|
|
13
|
+
import { WebSocket as NodeWebSocket } from "ws";
|
|
14
|
+
import { WebSocketTransport as PortableWebSocketTransport } from "./transport.js";
|
|
15
|
+
/**
|
|
16
|
+
* The WebSocket client transport with the `WebSocket` class of the `ws` package as the default
|
|
17
|
+
* class of its sockets. The option `webSocket` gives another class.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import { Client } from "@procedures/client";
|
|
22
|
+
* import { WebSocketTransport } from "@procedures/client/node";
|
|
23
|
+
*
|
|
24
|
+
* const client = new Client({ transport: new WebSocketTransport({ url: "ws://localhost:3000/ws" }) });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export class WebSocketTransport extends PortableWebSocketTransport {
|
|
28
|
+
constructor(options) {
|
|
29
|
+
super({ ...options, webSocket: options.webSocket ?? NodeWebSocket });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../../src/adapters/websocket/client/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,EAAE,kBAAkB,IAAI,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAGlF;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,kBAAmB,SAAQ,0BAA0B;IAChE,YAAY,OAAkC;QAC5C,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,aAAa,EAAE,CAAC,CAAC;IACvE,CAAC;CACF"}
|