@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
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import type { Message, ResponseItem } from "../../../client/types.js";
|
|
8
|
+
import type { Duration } from "../../../duration.js";
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* Mock response configuration.
|
|
@@ -26,10 +27,10 @@ export interface MockResponse<TRes = unknown> {
|
|
|
26
27
|
error?: Error;
|
|
27
28
|
|
|
28
29
|
/**
|
|
29
|
-
* Delay
|
|
30
|
+
* Delay before responding
|
|
30
31
|
* @default Uses transport's latency config
|
|
31
32
|
*/
|
|
32
|
-
delay?:
|
|
33
|
+
delay?: Duration;
|
|
33
34
|
|
|
34
35
|
/**
|
|
35
36
|
* Number of times this response can be used
|
|
@@ -48,16 +49,16 @@ export type ResponseMatcher = (method: any, payload: unknown) => boolean;
|
|
|
48
49
|
*/
|
|
49
50
|
export interface MockTransportOptions {
|
|
50
51
|
/**
|
|
51
|
-
* Minimum latency
|
|
52
|
+
* Minimum latency
|
|
52
53
|
* @default 0
|
|
53
54
|
*/
|
|
54
|
-
minLatency?:
|
|
55
|
+
minLatency?: Duration;
|
|
55
56
|
|
|
56
57
|
/**
|
|
57
|
-
* Maximum latency
|
|
58
|
+
* Maximum latency
|
|
58
59
|
* @default 0
|
|
59
60
|
*/
|
|
60
|
-
maxLatency?:
|
|
61
|
+
maxLatency?: Duration;
|
|
61
62
|
|
|
62
63
|
/**
|
|
63
64
|
* Random failure rate (0-1)
|
|
@@ -0,0 +1,124 @@
|
|
|
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
|
+
|
|
22
|
+
import type { Message, ResponseItem, Transport } from "../../client/types.js";
|
|
23
|
+
import type { RequestHandler } from "../../server/types.js";
|
|
24
|
+
import type { WebSocketMessage } from "../websocket/server/types.js";
|
|
25
|
+
import { IncomingCalls, OutgoingCalls } from "../websocket/shared/rpc.js";
|
|
26
|
+
import { withoutInternalKeys } from "../metadata.js";
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* A message port: the object that a worker, a `MessagePort` or a `worker_threads` port gives. It
|
|
30
|
+
* has `postMessage`, and `addEventListener` (the browser form) or `on` (the Node form).
|
|
31
|
+
*
|
|
32
|
+
* The event of a listener has the type `any`: the DOM and Node give it different types, and a
|
|
33
|
+
* port of each must fit without a cast. The transport reads only its `data`.
|
|
34
|
+
*/
|
|
35
|
+
export interface PortLike {
|
|
36
|
+
postMessage(message: unknown): void;
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
38
|
+
addEventListener?(type: "message", listener: (event: any) => void): void;
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
40
|
+
removeEventListener?(type: "message", listener: (event: any) => void): void;
|
|
41
|
+
on?(type: "message", listener: (data: unknown) => void): unknown;
|
|
42
|
+
off?(type: "message", listener: (data: unknown) => void): unknown;
|
|
43
|
+
/** A `MessagePort` delivers its messages to `addEventListener` only after `start()`. */
|
|
44
|
+
start?(): void;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** The options of a `PortTransport`. */
|
|
48
|
+
export interface PortTransportOptions {
|
|
49
|
+
/** The handler of the calls of the other side, for example a `ProcedureServer`. */
|
|
50
|
+
serve?: RequestHandler | undefined;
|
|
51
|
+
/** The number of stream items that the reader holds. The default is 64. */
|
|
52
|
+
streamWindow?: number | undefined;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** A frame of the protocol: an object with an id and a type. */
|
|
56
|
+
function isFrame(value: unknown): value is WebSocketMessage {
|
|
57
|
+
return value !== null && typeof value === "object" && typeof (value as { type?: unknown }).type === "string";
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** The transport over a message port, in the two directions. */
|
|
61
|
+
export class PortTransport implements Transport {
|
|
62
|
+
readonly name = "port";
|
|
63
|
+
private readonly outgoing: OutgoingCalls;
|
|
64
|
+
private readonly incoming: IncomingCalls | undefined;
|
|
65
|
+
private open = true;
|
|
66
|
+
private readonly onBrowserMessage = (event: { data: unknown }): void => this.receive(event.data);
|
|
67
|
+
private readonly onNodeMessage = (data: unknown): void => this.receive(data);
|
|
68
|
+
|
|
69
|
+
constructor(
|
|
70
|
+
private readonly port: PortLike,
|
|
71
|
+
options: PortTransportOptions = {},
|
|
72
|
+
) {
|
|
73
|
+
const send = (frame: WebSocketMessage): void => this.port.postMessage(frame);
|
|
74
|
+
const isOpen = (): boolean => this.open;
|
|
75
|
+
this.outgoing = new OutgoingCalls({
|
|
76
|
+
send,
|
|
77
|
+
isOpen,
|
|
78
|
+
// No time limit: a worker can run a long program. The `signal` of a call stops it. This file
|
|
79
|
+
// does not import the Durations (quantity, 6 kB of gzip), so the page of a worker stays small.
|
|
80
|
+
requestTimeoutMs: 0,
|
|
81
|
+
streamWindow: Math.max(2, options.streamWindow ?? 64),
|
|
82
|
+
idPrefix: "",
|
|
83
|
+
});
|
|
84
|
+
if (options.serve) {
|
|
85
|
+
this.incoming = new IncomingCalls({
|
|
86
|
+
handler: options.serve,
|
|
87
|
+
send,
|
|
88
|
+
isOpen,
|
|
89
|
+
// A call over a port comes from a part of this application: it has no credentials
|
|
90
|
+
requestOf: (frame, signal) => ({
|
|
91
|
+
id: frame.id,
|
|
92
|
+
method: frame.method!,
|
|
93
|
+
payload: frame.payload === undefined ? {} : frame.payload,
|
|
94
|
+
metadata: withoutInternalKeys(frame.metadata),
|
|
95
|
+
signal,
|
|
96
|
+
}),
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
if (port.addEventListener) port.addEventListener("message", this.onBrowserMessage);
|
|
100
|
+
else port.on?.("message", this.onNodeMessage);
|
|
101
|
+
port.start?.();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
private receive(data: unknown): void {
|
|
105
|
+
if (!this.open || !isFrame(data)) return;
|
|
106
|
+
if (this.outgoing.receive(data)) return;
|
|
107
|
+
this.incoming?.receive(data);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** This function sends a call to the other side, and gives its response items. */
|
|
111
|
+
send<TReq, TRes>(message: Message<TReq>): AsyncIterable<ResponseItem<TRes>> {
|
|
112
|
+
return this.outgoing.call<TReq, TRes>(message);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** This function stops the calls in the two directions, and stops to listen. It does not close the port. */
|
|
116
|
+
async close(): Promise<void> {
|
|
117
|
+
if (!this.open) return;
|
|
118
|
+
this.open = false;
|
|
119
|
+
this.outgoing.failAll("The port transport closed");
|
|
120
|
+
this.incoming?.abortAll();
|
|
121
|
+
if (this.port.removeEventListener) this.port.removeEventListener("message", this.onBrowserMessage);
|
|
122
|
+
else this.port.off?.("message", this.onNodeMessage);
|
|
123
|
+
}
|
|
124
|
+
}
|