@moltzap/client 2026.529.0 → 2026.718.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/dist/agent-client.d.ts +2 -65
- package/dist/agent-client.d.ts.map +1 -1
- package/dist/agent-client.js +1 -286
- package/dist/agent-client.js.map +1 -1
- package/dist/app-client.d.ts +3 -0
- package/dist/app-client.d.ts.map +1 -0
- package/dist/app-client.js +2 -0
- package/dist/app-client.js.map +1 -0
- package/dist/auth.d.ts +6 -15
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +12 -16
- package/dist/auth.js.map +1 -1
- package/dist/channel-base/format-cross-conv.d.ts +10 -15
- package/dist/channel-base/format-cross-conv.d.ts.map +1 -1
- package/dist/channel-base/format-cross-conv.js +10 -15
- package/dist/channel-base/format-cross-conv.js.map +1 -1
- package/dist/channel-base/format-group-block.d.ts +8 -10
- package/dist/channel-base/format-group-block.d.ts.map +1 -1
- package/dist/channel-base/format-group-block.js +8 -10
- package/dist/channel-base/format-group-block.js.map +1 -1
- package/dist/channel-base/index.d.ts +3 -62
- package/dist/channel-base/index.d.ts.map +1 -1
- package/dist/channel-base/index.js +2 -65
- package/dist/channel-base/index.js.map +1 -1
- package/dist/channel-base/lease-guard.d.ts +0 -2
- package/dist/channel-base/lease-guard.d.ts.map +1 -1
- package/dist/channel-base/lease-guard.js +0 -2
- package/dist/channel-base/lease-guard.js.map +1 -1
- package/dist/channel-base/lease-store.d.ts +2 -3
- package/dist/channel-base/lease-store.d.ts.map +1 -1
- package/dist/channel-base/lease-store.js +2 -3
- package/dist/channel-base/lease-store.js.map +1 -1
- package/dist/channel-base/lease.d.ts +25 -31
- package/dist/channel-base/lease.d.ts.map +1 -1
- package/dist/channel-base/lease.js +29 -45
- package/dist/channel-base/lease.js.map +1 -1
- package/dist/channel-core-enrichment.d.ts +1 -1
- package/dist/channel-core-enrichment.d.ts.map +1 -1
- package/dist/channel-core-test-support.d.ts +17 -11
- package/dist/channel-core-test-support.d.ts.map +1 -1
- package/dist/channel-core-test-support.js +5 -6
- package/dist/channel-core-test-support.js.map +1 -1
- package/dist/channel-core.d.ts +24 -29
- package/dist/channel-core.d.ts.map +1 -1
- package/dist/channel-core.js +18 -42
- package/dist/channel-core.js.map +1 -1
- package/dist/cli/commands/agents.d.ts +3 -6
- package/dist/cli/commands/agents.d.ts.map +1 -1
- package/dist/cli/commands/agents.js +14 -50
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/contacts.d.ts +5 -6
- package/dist/cli/commands/contacts.d.ts.map +1 -1
- package/dist/cli/commands/contacts.js +15 -43
- package/dist/cli/commands/contacts.js.map +1 -1
- package/dist/cli/commands/conversations.d.ts +8 -18
- package/dist/cli/commands/conversations.d.ts.map +1 -1
- package/dist/cli/commands/conversations.js +14 -65
- package/dist/cli/commands/conversations.js.map +1 -1
- package/dist/cli/commands/messages.d.ts +13 -35
- package/dist/cli/commands/messages.d.ts.map +1 -1
- package/dist/cli/commands/messages.js +21 -46
- package/dist/cli/commands/messages.js.map +1 -1
- package/dist/cli/commands/register.d.ts +10 -12
- package/dist/cli/commands/register.d.ts.map +1 -1
- package/dist/cli/commands/register.js +47 -133
- package/dist/cli/commands/register.js.map +1 -1
- package/dist/cli/commands/send.d.ts +23 -36
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +25 -72
- package/dist/cli/commands/send.js.map +1 -1
- package/dist/cli/commands/start.d.ts +10 -124
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +28 -510
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.d.ts +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +8 -9
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/test-transport.d.ts +12 -5
- package/dist/cli/commands/test-transport.d.ts.map +1 -1
- package/dist/cli/commands/test-transport.js +15 -15
- package/dist/cli/commands/test-transport.js.map +1 -1
- package/dist/cli/index.js +13 -40
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output.d.ts +4 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +9 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/socket-client.d.ts +7 -14
- package/dist/cli/socket-client.d.ts.map +1 -1
- package/dist/cli/socket-client.js +15 -38
- package/dist/cli/socket-client.js.map +1 -1
- package/dist/cli/transport.d.ts +53 -116
- package/dist/cli/transport.d.ts.map +1 -1
- package/dist/cli/transport.js +45 -295
- package/dist/cli/transport.js.map +1 -1
- package/dist/config.d.ts +24 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +35 -0
- package/dist/config.js.map +1 -0
- package/dist/config.test-utils.d.ts +13 -0
- package/dist/config.test-utils.d.ts.map +1 -0
- package/dist/config.test-utils.js +46 -0
- package/dist/config.test-utils.js.map +1 -0
- package/dist/index.d.ts +3 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -12
- package/dist/index.js.map +1 -1
- package/dist/local-daemon-rpc.d.ts +259 -8
- package/dist/local-daemon-rpc.d.ts.map +1 -1
- package/dist/local-daemon-rpc.js +189 -12
- package/dist/local-daemon-rpc.js.map +1 -1
- package/dist/{runtime/local-history.d.ts → local-history.d.ts} +16 -21
- package/dist/local-history.d.ts.map +1 -0
- package/dist/{runtime/local-history.js → local-history.js} +16 -21
- package/dist/local-history.js.map +1 -0
- package/dist/local-paths.d.ts +0 -2
- package/dist/local-paths.d.ts.map +1 -1
- package/dist/local-paths.js +0 -4
- package/dist/local-paths.js.map +1 -1
- package/dist/local-socket-server.d.ts +22 -0
- package/dist/local-socket-server.d.ts.map +1 -0
- package/dist/{runtime/local-socket-server.js → local-socket-server.js} +4 -9
- package/dist/local-socket-server.js.map +1 -0
- package/dist/message-rendering.d.ts +3 -0
- package/dist/message-rendering.d.ts.map +1 -0
- package/dist/message-rendering.js +7 -0
- package/dist/message-rendering.js.map +1 -0
- package/dist/notification/__tests__/{snapshot-semantics.types-check.d.ts → subscribe-signatures.types-check.d.ts} +1 -1
- package/dist/notification/__tests__/subscribe-signatures.types-check.d.ts.map +1 -0
- package/dist/notification/__tests__/subscribe-signatures.types-check.js +55 -0
- package/dist/notification/__tests__/subscribe-signatures.types-check.js.map +1 -0
- package/dist/notification/errors.d.ts +18 -6
- package/dist/notification/errors.d.ts.map +1 -1
- package/dist/notification/errors.js +13 -15
- package/dist/notification/errors.js.map +1 -1
- package/dist/notification/index.d.ts +5 -0
- package/dist/notification/index.d.ts.map +1 -0
- package/dist/notification/index.js +5 -0
- package/dist/notification/index.js.map +1 -0
- package/dist/notification/stream.d.ts +33 -49
- package/dist/notification/stream.d.ts.map +1 -1
- package/dist/notification/stream.js +33 -76
- package/dist/notification/stream.js.map +1 -1
- package/dist/pagination.d.ts +20 -10
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +8 -9
- package/dist/pagination.js.map +1 -1
- package/dist/profile.d.ts +92 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +149 -0
- package/dist/profile.js.map +1 -0
- package/dist/refs.d.ts.map +1 -0
- package/dist/refs.js.map +1 -0
- package/dist/service-archive-purge.d.ts +2 -1
- package/dist/service-archive-purge.d.ts.map +1 -1
- package/dist/service-archive-purge.js.map +1 -1
- package/dist/{runtime/service-helpers.d.ts → service-helpers.d.ts} +5 -11
- package/dist/service-helpers.d.ts.map +1 -0
- package/dist/{runtime/service-helpers.js → service-helpers.js} +2 -9
- package/dist/service-helpers.js.map +1 -0
- package/dist/service-local-daemon.d.ts +22 -0
- package/dist/service-local-daemon.d.ts.map +1 -0
- package/dist/service-local-daemon.js +185 -0
- package/dist/service-local-daemon.js.map +1 -0
- package/dist/service.d.ts +65 -57
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +205 -156
- package/dist/service.js.map +1 -1
- package/dist/test-utils/channel-service-fixture.d.ts +3 -2
- package/dist/test-utils/channel-service-fixture.d.ts.map +1 -1
- package/dist/test-utils/channel-service-fixture.js.map +1 -1
- package/dist/test-utils/fake-service.d.ts +26 -18
- package/dist/test-utils/fake-service.d.ts.map +1 -1
- package/dist/test-utils/fake-service.js +28 -42
- package/dist/test-utils/fake-service.js.map +1 -1
- package/dist/test-utils/ids.d.ts +3 -1
- package/dist/test-utils/ids.d.ts.map +1 -1
- package/dist/test-utils/ids.js.map +1 -1
- package/dist/test-utils/index.d.ts +9 -2
- package/dist/test-utils/index.d.ts.map +1 -1
- package/dist/test-utils/index.js +8 -1
- package/dist/test-utils/index.js.map +1 -1
- package/dist/test-utils/standalone-provisioning.d.ts +17 -0
- package/dist/test-utils/standalone-provisioning.d.ts.map +1 -0
- package/dist/test-utils/standalone-provisioning.js +14 -0
- package/dist/test-utils/standalone-provisioning.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +49 -27
- package/dist/auth.test.d.ts +0 -2
- package/dist/auth.test.d.ts.map +0 -1
- package/dist/auth.test.js +0 -121
- package/dist/auth.test.js.map +0 -1
- package/dist/channel-core-context.test.d.ts +0 -2
- package/dist/channel-core-context.test.d.ts.map +0 -1
- package/dist/channel-core-context.test.js +0 -342
- package/dist/channel-core-context.test.js.map +0 -1
- package/dist/channel-core-dispatch.test.d.ts +0 -2
- package/dist/channel-core-dispatch.test.d.ts.map +0 -1
- package/dist/channel-core-dispatch.test.js +0 -557
- package/dist/channel-core-dispatch.test.js.map +0 -1
- package/dist/channel-core.test.d.ts +0 -2
- package/dist/channel-core.test.d.ts.map +0 -1
- package/dist/channel-core.test.js +0 -232
- package/dist/channel-core.test.js.map +0 -1
- package/dist/cli/__tests__/cli-multi-agent.int.test.d.ts +0 -2
- package/dist/cli/__tests__/cli-multi-agent.int.test.d.ts.map +0 -1
- package/dist/cli/__tests__/cli-multi-agent.int.test.js +0 -132
- package/dist/cli/__tests__/cli-multi-agent.int.test.js.map +0 -1
- package/dist/cli/commands/invite.d.ts +0 -7
- package/dist/cli/commands/invite.d.ts.map +0 -1
- package/dist/cli/commands/invite.js +0 -11
- package/dist/cli/commands/invite.js.map +0 -1
- package/dist/cli/commands/messages.test.d.ts +0 -2
- package/dist/cli/commands/messages.test.d.ts.map +0 -1
- package/dist/cli/commands/messages.test.js +0 -99
- package/dist/cli/commands/messages.test.js.map +0 -1
- package/dist/cli/commands/ping.d.ts +0 -7
- package/dist/cli/commands/ping.d.ts.map +0 -1
- package/dist/cli/commands/ping.js +0 -37
- package/dist/cli/commands/ping.js.map +0 -1
- package/dist/cli/commands/register.test.d.ts +0 -2
- package/dist/cli/commands/register.test.d.ts.map +0 -1
- package/dist/cli/commands/register.test.js +0 -91
- package/dist/cli/commands/register.test.js.map +0 -1
- package/dist/cli/commands/send.test.d.ts +0 -2
- package/dist/cli/commands/send.test.d.ts.map +0 -1
- package/dist/cli/commands/send.test.js +0 -59
- package/dist/cli/commands/send.test.js.map +0 -1
- package/dist/cli/commands/start.test.d.ts +0 -2
- package/dist/cli/commands/start.test.d.ts.map +0 -1
- package/dist/cli/commands/start.test.js +0 -624
- package/dist/cli/commands/start.test.js.map +0 -1
- package/dist/cli/commands/whoami.d.ts +0 -8
- package/dist/cli/commands/whoami.d.ts.map +0 -1
- package/dist/cli/commands/whoami.js +0 -28
- package/dist/cli/commands/whoami.js.map +0 -1
- package/dist/cli/config.d.ts +0 -66
- package/dist/cli/config.d.ts.map +0 -1
- package/dist/cli/config.js +0 -148
- package/dist/cli/config.js.map +0 -1
- package/dist/cli/config.test.d.ts +0 -2
- package/dist/cli/config.test.d.ts.map +0 -1
- package/dist/cli/config.test.js +0 -89
- package/dist/cli/config.test.js.map +0 -1
- package/dist/cli/http-client.d.ts +0 -17
- package/dist/cli/http-client.d.ts.map +0 -1
- package/dist/cli/http-client.js +0 -38
- package/dist/cli/http-client.js.map +0 -1
- package/dist/cli/profile.d.ts +0 -126
- package/dist/cli/profile.d.ts.map +0 -1
- package/dist/cli/profile.js +0 -231
- package/dist/cli/profile.js.map +0 -1
- package/dist/cli/profile.test.d.ts +0 -2
- package/dist/cli/profile.test.d.ts.map +0 -1
- package/dist/cli/profile.test.js +0 -369
- package/dist/cli/profile.test.js.map +0 -1
- package/dist/cli/transport.test.d.ts +0 -2
- package/dist/cli/transport.test.d.ts.map +0 -1
- package/dist/cli/transport.test.js +0 -312
- package/dist/cli/transport.test.js.map +0 -1
- package/dist/notification/__tests__/filter-equivalence.test.d.ts +0 -2
- package/dist/notification/__tests__/filter-equivalence.test.d.ts.map +0 -1
- package/dist/notification/__tests__/filter-equivalence.test.js +0 -123
- package/dist/notification/__tests__/filter-equivalence.test.js.map +0 -1
- package/dist/notification/__tests__/snapshot-semantics.test.d.ts +0 -2
- package/dist/notification/__tests__/snapshot-semantics.test.d.ts.map +0 -1
- package/dist/notification/__tests__/snapshot-semantics.test.js +0 -261
- package/dist/notification/__tests__/snapshot-semantics.test.js.map +0 -1
- package/dist/notification/__tests__/snapshot-semantics.types-check.d.ts.map +0 -1
- package/dist/notification/__tests__/snapshot-semantics.types-check.js +0 -62
- package/dist/notification/__tests__/snapshot-semantics.types-check.js.map +0 -1
- package/dist/pagination.test.d.ts +0 -2
- package/dist/pagination.test.d.ts.map +0 -1
- package/dist/pagination.test.js +0 -72
- package/dist/pagination.test.js.map +0 -1
- package/dist/runtime/close-info.d.ts +0 -84
- package/dist/runtime/close-info.d.ts.map +0 -1
- package/dist/runtime/close-info.js +0 -102
- package/dist/runtime/close-info.js.map +0 -1
- package/dist/runtime/close-info.test.d.ts +0 -2
- package/dist/runtime/close-info.test.d.ts.map +0 -1
- package/dist/runtime/close-info.test.js +0 -109
- package/dist/runtime/close-info.test.js.map +0 -1
- package/dist/runtime/errors.d.ts +0 -11
- package/dist/runtime/errors.d.ts.map +0 -1
- package/dist/runtime/errors.js +0 -41
- package/dist/runtime/errors.js.map +0 -1
- package/dist/runtime/errors.test.d.ts +0 -2
- package/dist/runtime/errors.test.d.ts.map +0 -1
- package/dist/runtime/errors.test.js +0 -79
- package/dist/runtime/errors.test.js.map +0 -1
- package/dist/runtime/frame.d.ts +0 -8
- package/dist/runtime/frame.d.ts.map +0 -1
- package/dist/runtime/frame.js +0 -12
- package/dist/runtime/frame.js.map +0 -1
- package/dist/runtime/frame.test.d.ts +0 -2
- package/dist/runtime/frame.test.d.ts.map +0 -1
- package/dist/runtime/frame.test.js +0 -59
- package/dist/runtime/frame.test.js.map +0 -1
- package/dist/runtime/index.d.ts +0 -10
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.js +0 -9
- package/dist/runtime/index.js.map +0 -1
- package/dist/runtime/local-history.d.ts.map +0 -1
- package/dist/runtime/local-history.js.map +0 -1
- package/dist/runtime/local-service-commands.d.ts +0 -26
- package/dist/runtime/local-service-commands.d.ts.map +0 -1
- package/dist/runtime/local-service-commands.js +0 -29
- package/dist/runtime/local-service-commands.js.map +0 -1
- package/dist/runtime/local-socket-server.d.ts +0 -20
- package/dist/runtime/local-socket-server.d.ts.map +0 -1
- package/dist/runtime/local-socket-server.js.map +0 -1
- package/dist/runtime/refs.d.ts.map +0 -1
- package/dist/runtime/refs.js.map +0 -1
- package/dist/runtime/runtime.test.d.ts +0 -2
- package/dist/runtime/runtime.test.d.ts.map +0 -1
- package/dist/runtime/runtime.test.js +0 -37
- package/dist/runtime/runtime.test.js.map +0 -1
- package/dist/runtime/service-helpers.d.ts.map +0 -1
- package/dist/runtime/service-helpers.js.map +0 -1
- package/dist/runtime/service-teardown.d.ts +0 -5
- package/dist/runtime/service-teardown.d.ts.map +0 -1
- package/dist/runtime/service-teardown.js +0 -36
- package/dist/runtime/service-teardown.js.map +0 -1
- package/dist/runtime/service-teardown.test.d.ts +0 -2
- package/dist/runtime/service-teardown.test.d.ts.map +0 -1
- package/dist/runtime/service-teardown.test.js +0 -80
- package/dist/runtime/service-teardown.test.js.map +0 -1
- package/dist/runtime/subscribers.d.ts +0 -152
- package/dist/runtime/subscribers.d.ts.map +0 -1
- package/dist/runtime/subscribers.js +0 -222
- package/dist/runtime/subscribers.js.map +0 -1
- package/dist/service-socket-path.test.d.ts +0 -2
- package/dist/service-socket-path.test.d.ts.map +0 -1
- package/dist/service-socket-path.test.js +0 -87
- package/dist/service-socket-path.test.js.map +0 -1
- package/dist/service.test.d.ts +0 -2
- package/dist/service.test.d.ts.map +0 -1
- package/dist/service.test.js +0 -796
- package/dist/service.test.js.map +0 -1
- package/dist/test/index.d.ts +0 -47
- package/dist/test/index.d.ts.map +0 -1
- package/dist/test/index.js +0 -39
- package/dist/test/index.js.map +0 -1
- package/dist/test-utils/conformance-adapter.d.ts +0 -40
- package/dist/test-utils/conformance-adapter.d.ts.map +0 -1
- package/dist/test-utils/conformance-adapter.js +0 -250
- package/dist/test-utils/conformance-adapter.js.map +0 -1
- package/dist/tm-client-test-support.d.ts +0 -184
- package/dist/tm-client-test-support.d.ts.map +0 -1
- package/dist/tm-client-test-support.js +0 -466
- package/dist/tm-client-test-support.js.map +0 -1
- package/dist/tm-client.d.ts +0 -269
- package/dist/tm-client.d.ts.map +0 -1
- package/dist/tm-client.js +0 -518
- package/dist/tm-client.js.map +0 -1
- package/dist/tm-client.test.d.ts +0 -2
- package/dist/tm-client.test.d.ts.map +0 -1
- package/dist/tm-client.test.js +0 -490
- package/dist/tm-client.test.js.map +0 -1
- /package/dist/{runtime/refs.d.ts → refs.d.ts} +0 -0
- /package/dist/{runtime/refs.js → refs.js} +0 -0
package/dist/tm-client.js
DELETED
|
@@ -1,518 +0,0 @@
|
|
|
1
|
-
/* eslint-disable jsdoc/text-escaping -- JSDoc references to generic types use natural angle-bracket form (TS source style) inside backtick code spans; matches filter-equivalence.test.ts precedent. */
|
|
2
|
-
import * as Socket from "@effect/platform/Socket";
|
|
3
|
-
import * as NodeSocket from "@effect/platform-node/NodeSocket";
|
|
4
|
-
import { Data, Deferred, Duration, Either, Effect, Exit, Fiber, ManagedRuntime, Option, Queue, Ref, Schedule, Scope, Stream, } from "effect";
|
|
5
|
-
import { PROTOCOL_VERSION, Connect, encodeErrorResponse, makeTaskMasterConnection, NotConnectedError, RpcTimeoutError, } from "@moltzap/protocol";
|
|
6
|
-
import { decodeFrames } from "./runtime/frame.js";
|
|
7
|
-
import { makeSubscriberRegistry, } from "./runtime/subscribers.js";
|
|
8
|
-
import { subscribe as subscribeStream, subscribeAll as subscribeAllStream, } from "./notification/stream.js";
|
|
9
|
-
import { extractCloseInfo } from "./runtime/close-info.js";
|
|
10
|
-
/**
|
|
11
|
-
* Default per-RPC timeout. Exported so tests driving `TestClock` can match
|
|
12
|
-
* exactly — keeps tests from silently drifting if this changes.
|
|
13
|
-
*/
|
|
14
|
-
export const RPC_TIMEOUT_MS = 30_000;
|
|
15
|
-
/** Reconnect backoff: 1s base, doubling per attempt up to the cap. */
|
|
16
|
-
const BASE_RECONNECT_DELAY_MS = 1000;
|
|
17
|
-
const MAX_RECONNECT_DELAY_MS = 30_000;
|
|
18
|
-
const RECONNECT_BACKOFF_FACTOR = 2;
|
|
19
|
-
const NORMAL_CLOSE_CODE = 1000;
|
|
20
|
-
const WEB_SOCKET_OPEN_TIMEOUT_SECONDS = 10;
|
|
21
|
-
const MALFORMED_FRAME_PREVIEW_CHARS = 200;
|
|
22
|
-
/**
|
|
23
|
-
* Log 1-of-N malformed frames. A misbehaving server could flood us otherwise;
|
|
24
|
-
* the counter in the log makes it clear how many we've dropped between logs.
|
|
25
|
-
*/
|
|
26
|
-
const MALFORMED_LOG_EVERY = 50;
|
|
27
|
-
export const shouldLogMalformedFrame = (count) => count === 1 || count % MALFORMED_LOG_EVERY === 0;
|
|
28
|
-
/**
|
|
29
|
-
* Capacity of the per-connection task-callback executor queue. Sized at
|
|
30
|
-
* 8192 to preserve the pre-cutover burst envelope (256 partitions × 32
|
|
31
|
-
* per-partition queue depth = 8192). Sized once at queue construction;
|
|
32
|
-
* the queue is bounded so the WS reader exerts back-pressure on a slow
|
|
33
|
-
* handler instead of leaking memory.
|
|
34
|
-
*
|
|
35
|
-
* Per architect plan #533 §"Revisions r1 correction 3": this matches
|
|
36
|
-
* today's burst envelope under the partition-replaced single-drain
|
|
37
|
-
* topology.
|
|
38
|
-
*/
|
|
39
|
-
const TASK_CALLBACK_QUEUE_CAPACITY = 8192;
|
|
40
|
-
const MSG_NOT_CONNECTED = "WebSocket not connected";
|
|
41
|
-
const UTF8_DECODER = new TextDecoder("utf-8");
|
|
42
|
-
const makeNotConnectedError = () => new NotConnectedError({ message: MSG_NOT_CONNECTED });
|
|
43
|
-
class ReconnectAttemptFailedError extends Data.TaggedError("ReconnectAttemptFailedError") {
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* WebSocket lifecycle: open → network/connect → active. On disconnect,
|
|
47
|
-
* exponential backoff (1s base, 30s cap, jittered) retries the handshake via
|
|
48
|
-
* `Effect.sleep` + `Schedule` so TestClock can drive it. Public API is
|
|
49
|
-
* Effect-based — consumers run the returned Effects themselves (typically at
|
|
50
|
-
* a framework or CLI edge).
|
|
51
|
-
*
|
|
52
|
-
* Connection state machine, driven by `stateRef` (`None` | `Some(ConnState)`)
|
|
53
|
-
* and the `closed` flag:
|
|
54
|
-
*
|
|
55
|
-
* ```mermaid
|
|
56
|
-
* stateDiagram-v2
|
|
57
|
-
* [*] --> INIT
|
|
58
|
-
* INIT : stateRef None, closed false
|
|
59
|
-
* INIT --> CONNECTING : connect()
|
|
60
|
-
* CONNECTING : openSocket 10s timeout<br>startTaskCallbackDispatcher<br>readerFiber forked<br>sendRpc(Connect) in flight
|
|
61
|
-
* CONNECTING --> CONNECTED : HelloOk received<br>stateRef = Some(ConnState)
|
|
62
|
-
* CONNECTED : _helloOk set, reader fiber active
|
|
63
|
-
* CONNECTED --> DISCONNECTED : reader fiber exit<br>failAllPending, stateRef = None<br>onDisconnect(closeInfo)
|
|
64
|
-
* DISCONNECTED : reconnectable, closed false
|
|
65
|
-
* DISCONNECTED --> CONNECTING : scheduleReconnect<br>exponential backoff 1s..30s jittered<br>connectEffect → onReconnect(helloOk)
|
|
66
|
-
* INIT --> CLOSED : close()
|
|
67
|
-
* CONNECTING --> CLOSED : close()
|
|
68
|
-
* CONNECTED --> CLOSED : close()
|
|
69
|
-
* DISCONNECTED --> CLOSED : close()
|
|
70
|
-
* CLOSED : terminal — closed true<br>stateRef None, reconnectFiber null<br>no further reconnects
|
|
71
|
-
* CLOSED --> [*]
|
|
72
|
-
* ```
|
|
73
|
-
*
|
|
74
|
-
* `close()` is total from any state: interrupts the reconnect fiber,
|
|
75
|
-
* `failAllPending` + `failAllNotificationWaiters`, `subscribers.closeAll`,
|
|
76
|
-
* writes `CloseEvent(1000)` if the handshake completed, closes the
|
|
77
|
-
* connection and dispatcher scopes, disposes the `ManagedRuntime`.
|
|
78
|
-
*
|
|
79
|
-
* Transport: `@effect/platform/Socket.makeWebSocket` backed by
|
|
80
|
-
* `@effect/platform-node/NodeSocket.layerWebSocketConstructor`. The Node
|
|
81
|
-
* `WebSocketConstructor` layer is provided internally via `ManagedRuntime`
|
|
82
|
-
* so callers' `connect()` / `sendRpc()` Effects have no extra requirement.
|
|
83
|
-
*
|
|
84
|
-
* Notification consumption: use `subscribe(def, refinement?)` for typed
|
|
85
|
-
* payload Streams; `subscribeAll(refinement?)` for the broad-union
|
|
86
|
-
* escape hatch. Both return `Stream.Stream` of `DecodedNotification` with
|
|
87
|
-
* a `NotConnectedError` error channel. Consume via `Stream.runForEach`
|
|
88
|
-
* (long-lived) or `Stream.runHead` + `Effect.timeoutFail` (one-shot).
|
|
89
|
-
*/
|
|
90
|
-
export class MoltZapTMClient {
|
|
91
|
-
options;
|
|
92
|
-
stateRef;
|
|
93
|
-
malformedRef;
|
|
94
|
-
runtime;
|
|
95
|
-
/**
|
|
96
|
-
* Per-subscription notification registry. Spec #596 / Spec B: callback-based
|
|
97
|
-
* storage feeds `Stream.async` consumers via `notification/stream.ts`.
|
|
98
|
-
*/
|
|
99
|
-
subscribers;
|
|
100
|
-
/**
|
|
101
|
-
* Spec F (#617) immutable TM-callback handler table. Captured from
|
|
102
|
-
* `TMClientOptions.handlers` at construction and threaded through
|
|
103
|
-
* every `makeTaskMasterConnection` call (including reconnects).
|
|
104
|
-
*/
|
|
105
|
-
handlers;
|
|
106
|
-
closed = false;
|
|
107
|
-
reconnectFiber = null;
|
|
108
|
-
_helloOk = null;
|
|
109
|
-
constructor(options) {
|
|
110
|
-
this.options = options;
|
|
111
|
-
this.runtime = ManagedRuntime.make(NodeSocket.layerWebSocketConstructor);
|
|
112
|
-
this.stateRef = this.runtime.runSync(Ref.make(Option.none()));
|
|
113
|
-
this.malformedRef = this.runtime.runSync(Ref.make(0));
|
|
114
|
-
this.subscribers = this.runtime.runSync(makeSubscriberRegistry());
|
|
115
|
-
this.handlers = options.handlers;
|
|
116
|
-
}
|
|
117
|
-
get helloOk() {
|
|
118
|
-
return this._helloOk;
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Open the socket, perform `network/connect`, resolve with HelloOk.
|
|
122
|
-
* Fails immediately on pre-open close or error.
|
|
123
|
-
*
|
|
124
|
-
* ```mermaid
|
|
125
|
-
* sequenceDiagram
|
|
126
|
-
* participant caller
|
|
127
|
-
* participant client as MoltZapTMClient
|
|
128
|
-
* participant server
|
|
129
|
-
*
|
|
130
|
-
* caller->>client: new MoltZapTMClient(options)
|
|
131
|
-
* Note over client: stateRef = None, subscribers, ManagedRuntime
|
|
132
|
-
* caller->>client: subscribe(filter, handler)
|
|
133
|
-
* Note over client: SubscriberRegistry.register — survives reconnect
|
|
134
|
-
* caller->>client: connect()
|
|
135
|
-
* Note over client: connectEffect — Scope.make, Socket.makeWebSocket open<br>startTaskCallbackDispatcher — bounded Queue 8192 + drain<br>readerFiber = runFork(readerEffect)
|
|
136
|
-
* client->>server: TCP open + WS upgrade
|
|
137
|
-
* client->>server: network/connect {agentKey, minProtocol, maxProtocol}
|
|
138
|
-
* server-->>client: HelloOk
|
|
139
|
-
* Note over client: stateRef = Some(connState), _helloOk = value
|
|
140
|
-
* client-->>caller: HelloOk
|
|
141
|
-
* Note over client,server: steady state — reader fiber loops on socket.runRaw
|
|
142
|
-
* ```
|
|
143
|
-
*
|
|
144
|
-
* Reconnect arm fires from `handleReaderExit` when the reader fiber
|
|
145
|
-
* exits with `closed === false`. `failAllPending` settles every
|
|
146
|
-
* in-flight Deferred with `NotConnectedError`, `notifyDisconnect`
|
|
147
|
-
* surfaces the close info, then `scheduleReconnect` forks an
|
|
148
|
-
* exponential-backoff retry (`1s × 2^n, cap 30s, +jitter`).
|
|
149
|
-
*
|
|
150
|
-
* State that SURVIVES reconnect: `SubscriberRegistry` entries,
|
|
151
|
-
* `appCallbackHandlers` (immutable, value-captured at construction),
|
|
152
|
-
* `ManagedRuntime`.
|
|
153
|
-
*
|
|
154
|
-
* State that does NOT survive reconnect: in-flight RPC Deferreds
|
|
155
|
-
* (failed via `failAllPending`), the prior `ConnState` (scope,
|
|
156
|
-
* reader fiber, callback queue, dispatcher scope) — rebuilt fresh.
|
|
157
|
-
*/
|
|
158
|
-
connect() {
|
|
159
|
-
return Effect.suspend(() => {
|
|
160
|
-
if (this.closed) {
|
|
161
|
-
return Effect.fail(makeNotConnectedError());
|
|
162
|
-
}
|
|
163
|
-
return this.connectEffect().pipe(
|
|
164
|
-
// `makeWebSocket` requires `Socket.WebSocketConstructor`; our
|
|
165
|
-
// internal Node layer provides it so callers' Effects stay
|
|
166
|
-
// requirement-free (same public shape the legacy client had).
|
|
167
|
-
Effect.provide(NodeSocket.layerWebSocketConstructor));
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Send an RPC. Fails with a typed error:
|
|
172
|
-
* - `NotConnectedError` if the socket isn't OPEN or closes mid-RPC
|
|
173
|
-
* - `RpcTimeoutError` after `RPC_TIMEOUT_MS` — no automatic retry
|
|
174
|
-
* - a registered tagged error for known protocol error codes
|
|
175
|
-
* - `RpcServerError` for unknown protocol error codes
|
|
176
|
-
*
|
|
177
|
-
* Descriptor-backed RPC call. Callers pass the protocol descriptor, and the
|
|
178
|
-
* client extracts the wire method only inside the encoder path.
|
|
179
|
-
*/
|
|
180
|
-
sendRpc(definition, params, opts) {
|
|
181
|
-
const timeoutMs = opts?.timeoutMs ?? RPC_TIMEOUT_MS;
|
|
182
|
-
return this.sendRpcEffect(definition, params, timeoutMs);
|
|
183
|
-
}
|
|
184
|
-
subscribe(definition,
|
|
185
|
-
// eslint-disable-next-line agent-code-guard/no-conditional-chaining -- optional refinement is a value-level passthrough to the Stream factory; not a refinement-of-discriminant decision
|
|
186
|
-
refinement) {
|
|
187
|
-
return subscribeStream(this.subscribers, definition, refinement);
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Broad-union escape hatch (spec #596 Goal #2). Returns a Stream of every
|
|
191
|
-
* inbound notification regardless of definition. Payload narrowing is
|
|
192
|
-
* intentionally lost — callers wanting typed payloads use `subscribe`.
|
|
193
|
-
*
|
|
194
|
-
* The only intended in-tree consumer is `MoltZapService.connect`'s
|
|
195
|
-
* service-wide notification fanout.
|
|
196
|
-
*/
|
|
197
|
-
subscribeAll(
|
|
198
|
-
// eslint-disable-next-line agent-code-guard/no-conditional-chaining -- optional refinement is a value-level passthrough to the Stream factory; not a refinement-of-discriminant decision
|
|
199
|
-
refinement) {
|
|
200
|
-
return subscribeAllStream(this.subscribers, refinement);
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Close the socket permanently (no reconnection). Writes a clean WebSocket
|
|
204
|
-
* close frame (code 1000) before tearing down the scope so the server
|
|
205
|
-
* observes a graceful handshake rather than an abrupt disconnect, preventing
|
|
206
|
-
* lingering CLOSE_WAIT sockets on the server side.
|
|
207
|
-
*/
|
|
208
|
-
close() {
|
|
209
|
-
return Effect.gen(this, function* () {
|
|
210
|
-
if (this.closed)
|
|
211
|
-
return;
|
|
212
|
-
const hasCompletedHandshake = this._helloOk !== null;
|
|
213
|
-
this.closed = true;
|
|
214
|
-
this._helloOk = null;
|
|
215
|
-
if (this.reconnectFiber !== null) {
|
|
216
|
-
const f = this.reconnectFiber;
|
|
217
|
-
this.reconnectFiber = null;
|
|
218
|
-
yield* Effect.forkDaemon(Fiber.interrupt(f));
|
|
219
|
-
}
|
|
220
|
-
yield* this.failAllPending(MSG_NOT_CONNECTED);
|
|
221
|
-
// Drop every live subscription so handlers stop firing once
|
|
222
|
-
// the client is permanently torn down. The registry invokes each
|
|
223
|
-
// sub's `onClose(new NotConnectedError(...))` callback, which fires
|
|
224
|
-
// `emit.fail` on the corresponding consumer Stream. Subsumes the
|
|
225
|
-
// deleted `failAllNotificationWaiters` semantic (spec #596 §3.2 +
|
|
226
|
-
// §"Stream lifecycle contract" row 5).
|
|
227
|
-
yield* this.subscribers.closeAll;
|
|
228
|
-
const state = yield* Ref.getAndSet(this.stateRef, Option.none());
|
|
229
|
-
if (Option.isSome(state)) {
|
|
230
|
-
if (hasCompletedHandshake) {
|
|
231
|
-
yield* state.value
|
|
232
|
-
.write(new Socket.CloseEvent(NORMAL_CLOSE_CODE, "normal"))
|
|
233
|
-
.pipe(Effect.orDie);
|
|
234
|
-
yield* Scope.close(state.value.scope, Exit.void);
|
|
235
|
-
}
|
|
236
|
-
else {
|
|
237
|
-
this.runtime.runFork(Scope.close(state.value.scope, Exit.void));
|
|
238
|
-
}
|
|
239
|
-
// The dispatcher Scope is NOT bound to the socket Scope (see
|
|
240
|
-
// ConnState doc): tear it down via runFork so this Effect
|
|
241
|
-
// remains sync-runnable for callers using
|
|
242
|
-
// `runSync(client.close())`. Closing the dispatcher Scope
|
|
243
|
-
// interrupts the drain fiber via Scope finalizers; the
|
|
244
|
-
// bounded queue is then garbage-collected.
|
|
245
|
-
this.runtime.runFork(Scope.close(state.value.dispatcherScope, Exit.void));
|
|
246
|
-
}
|
|
247
|
-
}).pipe(Effect.asVoid, Effect.ensuring(Effect.sync(() => {
|
|
248
|
-
this.runtime.dispose();
|
|
249
|
-
})));
|
|
250
|
-
}
|
|
251
|
-
/** Close the socket without marking as permanently closed, triggering reconnection. */
|
|
252
|
-
disconnect() {
|
|
253
|
-
return Effect.sync(() => this.disconnectSync());
|
|
254
|
-
}
|
|
255
|
-
disconnectSync() {
|
|
256
|
-
const state = this.runtime.runSync(Ref.get(this.stateRef));
|
|
257
|
-
if (Option.isNone(state))
|
|
258
|
-
return;
|
|
259
|
-
// Detach from state first so sendRpc fails fast while we tear down.
|
|
260
|
-
this.runtime.runSync(Ref.set(this.stateRef, Option.none()));
|
|
261
|
-
this.runtime.runFork(this.failConnectionPending(state.value));
|
|
262
|
-
// Interrupt the reader fiber. runRaw exits, the socket scope closes,
|
|
263
|
-
// ws.close(1000) fires as part of that teardown.
|
|
264
|
-
this.runtime.runFork(Fiber.interrupt(state.value.readerFiber));
|
|
265
|
-
// Close the per-connection scope as a belt-and-braces guarantee.
|
|
266
|
-
this.runtime.runFork(Scope.close(state.value.scope, Exit.void));
|
|
267
|
-
// Tear down the task-callback dispatcher Scope (off-scope, see
|
|
268
|
-
// ConnState doc). runFork so disconnectSync stays synchronous for
|
|
269
|
-
// callers using `runSync(client.disconnect())`. Closing the
|
|
270
|
-
// dispatcher Scope interrupts the drain fiber via Scope
|
|
271
|
-
// finalizers.
|
|
272
|
-
this.runtime.runFork(Scope.close(state.value.dispatcherScope, Exit.void));
|
|
273
|
-
}
|
|
274
|
-
notifyDisconnect(close) {
|
|
275
|
-
return Effect.gen(this, function* () {
|
|
276
|
-
try {
|
|
277
|
-
this.options.onDisconnect?.(close);
|
|
278
|
-
}
|
|
279
|
-
catch (err) {
|
|
280
|
-
yield* Effect.logWarning("onDisconnect handler threw", err);
|
|
281
|
-
}
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
connectEffect() {
|
|
285
|
-
return Effect.gen(this, function* () {
|
|
286
|
-
const url = this.webSocketUrl();
|
|
287
|
-
const scope = yield* Scope.make();
|
|
288
|
-
const socket = yield* this.openSocket(url, scope);
|
|
289
|
-
const write = yield* Scope.extend(socket.writer, scope);
|
|
290
|
-
const tmConn = yield* Scope.extend(makeTaskMasterConnection({
|
|
291
|
-
id: "tm-client",
|
|
292
|
-
handlers: this.handlers,
|
|
293
|
-
capabilities: {},
|
|
294
|
-
write: (raw) => write(raw),
|
|
295
|
-
idPrefix: "rpc",
|
|
296
|
-
}), scope);
|
|
297
|
-
const handshakeSettled = yield* Deferred.make();
|
|
298
|
-
const dispatcher = yield* this.startTaskCallbackDispatcher(write, tmConn);
|
|
299
|
-
const readerFiber = this.runtime.runFork(this.readerEffect(socket, handshakeSettled, dispatcher.dispatcherScope));
|
|
300
|
-
yield* this.publishConnectionState({
|
|
301
|
-
write,
|
|
302
|
-
readerFiber,
|
|
303
|
-
scope,
|
|
304
|
-
tmConn,
|
|
305
|
-
handshakeSettled,
|
|
306
|
-
taskCallbackQueue: dispatcher.taskCallbackQueue,
|
|
307
|
-
dispatcherScope: dispatcher.dispatcherScope,
|
|
308
|
-
});
|
|
309
|
-
return yield* this.awaitConnectAuth(handshakeSettled);
|
|
310
|
-
});
|
|
311
|
-
}
|
|
312
|
-
webSocketUrl() {
|
|
313
|
-
return this.options.serverUrl.replace(/^http/, "ws") + "/ws";
|
|
314
|
-
}
|
|
315
|
-
openSocket(url, scope) {
|
|
316
|
-
const openTimeout = Duration.seconds(WEB_SOCKET_OPEN_TIMEOUT_SECONDS);
|
|
317
|
-
return Scope.extend(Socket.makeWebSocket(url, { openTimeout }), scope).pipe(Effect.timeoutFail({
|
|
318
|
-
duration: openTimeout,
|
|
319
|
-
onTimeout: makeNotConnectedError,
|
|
320
|
-
}), Effect.catchAllCause((cause) => Effect.zipRight(Effect.logWarning("WebSocket open failed", cause), Effect.sync(() => {
|
|
321
|
-
this.runtime.runFork(Scope.close(scope, Exit.void));
|
|
322
|
-
}).pipe(Effect.zipRight(Effect.fail(makeNotConnectedError()))))));
|
|
323
|
-
}
|
|
324
|
-
startTaskCallbackDispatcher(write, tmConn) {
|
|
325
|
-
return Effect.gen(this, function* () {
|
|
326
|
-
const dispatcherScope = yield* Scope.make();
|
|
327
|
-
const taskCallbackQueue = yield* Queue.bounded(TASK_CALLBACK_QUEUE_CAPACITY);
|
|
328
|
-
const drainEffect = Effect.forever(Queue.take(taskCallbackQueue).pipe(Effect.flatMap((req) => this.dispatchInboundServerRequest(req, write, tmConn))));
|
|
329
|
-
yield* Effect.forkIn(drainEffect, dispatcherScope);
|
|
330
|
-
return { dispatcherScope, taskCallbackQueue };
|
|
331
|
-
});
|
|
332
|
-
}
|
|
333
|
-
readerEffect(socket, handshakeSettled, dispatcherScope) {
|
|
334
|
-
return socket
|
|
335
|
-
.runRaw((data) => this.handleIncoming(typeof data === "string" ? data : UTF8_DECODER.decode(data)))
|
|
336
|
-
.pipe(Effect.onExit((exit) => this.handleReaderExit(exit, handshakeSettled, dispatcherScope)));
|
|
337
|
-
}
|
|
338
|
-
handleReaderExit(exit, handshakeSettled, dispatcherScope) {
|
|
339
|
-
return Effect.gen(this, function* () {
|
|
340
|
-
if (Exit.isFailure(exit)) {
|
|
341
|
-
yield* Effect.logWarning("WebSocket error", exit.cause);
|
|
342
|
-
}
|
|
343
|
-
this._helloOk = null;
|
|
344
|
-
yield* this.failAllPending(MSG_NOT_CONNECTED);
|
|
345
|
-
yield* Deferred.fail(handshakeSettled, makeNotConnectedError()).pipe(Effect.ignore);
|
|
346
|
-
yield* Ref.set(this.stateRef, Option.none());
|
|
347
|
-
this.runtime.runFork(Scope.close(dispatcherScope, Exit.void));
|
|
348
|
-
yield* this.notifyDisconnect(extractCloseInfo(exit));
|
|
349
|
-
if (!this.closed)
|
|
350
|
-
this.scheduleReconnect();
|
|
351
|
-
});
|
|
352
|
-
}
|
|
353
|
-
publishConnectionState(state) {
|
|
354
|
-
return Ref.set(this.stateRef, Option.some(state));
|
|
355
|
-
}
|
|
356
|
-
awaitConnectAuth(handshakeSettled) {
|
|
357
|
-
const authEffect = this.sendRpc(Connect, {
|
|
358
|
-
agentKey: this.options.agentKey,
|
|
359
|
-
minProtocol: PROTOCOL_VERSION,
|
|
360
|
-
maxProtocol: PROTOCOL_VERSION,
|
|
361
|
-
});
|
|
362
|
-
return Effect.raceFirst(authEffect, Deferred.await(handshakeSettled)).pipe(Effect.tap((value) => Effect.sync(() => {
|
|
363
|
-
this._helloOk = value;
|
|
364
|
-
})));
|
|
365
|
-
}
|
|
366
|
-
sendRpcEffect(definition, params, timeoutMs) {
|
|
367
|
-
return Effect.gen(this, function* () {
|
|
368
|
-
const state = yield* Ref.get(this.stateRef);
|
|
369
|
-
if (Option.isNone(state)) {
|
|
370
|
-
return yield* Effect.fail(makeNotConnectedError());
|
|
371
|
-
}
|
|
372
|
-
// `sendRpc` is the public surface; callers pass concrete descriptors
|
|
373
|
-
// narrowed at the call site. The typed-dispatcher's `call` is
|
|
374
|
-
// constrained to `AnyServerRpcDefinition` (the union of catalog members);
|
|
375
|
-
// the bound carry-through is preserved by widening to the union here.
|
|
376
|
-
const call = state.value.tmConn.call;
|
|
377
|
-
return yield* call(definition, params).pipe(Effect.timeoutFail({
|
|
378
|
-
duration: `${timeoutMs} millis`,
|
|
379
|
-
onTimeout: () => new RpcTimeoutError({ method: definition.name, timeoutMs }),
|
|
380
|
-
}));
|
|
381
|
-
});
|
|
382
|
-
}
|
|
383
|
-
/**
|
|
384
|
-
* Write a "queue-full" error response back to the server when the
|
|
385
|
-
* task-callback executor queue is saturated. Bounded-queue offer
|
|
386
|
-
* returns `false` rather than blocking; we surface that to the
|
|
387
|
-
* server's `Deferred.await` so it settles deterministically.
|
|
388
|
-
*/
|
|
389
|
-
writeQueueFullRejection(requestId, write) {
|
|
390
|
-
const reply = encodeErrorResponse(requestId, {
|
|
391
|
-
code: -32000,
|
|
392
|
-
message: `Server busy: task-callback executor queue full (capacity=${TASK_CALLBACK_QUEUE_CAPACITY})`,
|
|
393
|
-
});
|
|
394
|
-
return write(JSON.stringify(reply)).pipe(Effect.catchAll((werr) => Effect.logWarning("task-callback queue-full rejection write failed", werr)));
|
|
395
|
-
}
|
|
396
|
-
/**
|
|
397
|
-
* Dispatch one inbound appCallback request through the typed Spec F
|
|
398
|
-
* dispatcher and write its wire response back to the server. Spec D3
|
|
399
|
-
* R14b made every TM-callback slot REQUIRED at construction, so the
|
|
400
|
-
* dispatcher always finds a bound handler. Handler defects collapse
|
|
401
|
-
* to a generic InternalError reply so the server's `Deferred.await`
|
|
402
|
-
* always settles deterministically.
|
|
403
|
-
*/
|
|
404
|
-
dispatchInboundServerRequest(request, write, tmConn) {
|
|
405
|
-
return Effect.gen(this, function* () {
|
|
406
|
-
const reply = yield* tmConn.handle(request.frame, {
|
|
407
|
-
requestId: request.id,
|
|
408
|
-
});
|
|
409
|
-
yield* this.writeInboundServerReply(write, reply);
|
|
410
|
-
});
|
|
411
|
-
}
|
|
412
|
-
writeInboundServerReply(write, reply) {
|
|
413
|
-
return write(JSON.stringify(reply)).pipe(Effect.catchAll((err) => Effect.logWarning("appCallback response write failed", err)));
|
|
414
|
-
}
|
|
415
|
-
recordMalformedFrame(err) {
|
|
416
|
-
return Effect.gen(this, function* () {
|
|
417
|
-
const count = yield* Ref.updateAndGet(this.malformedRef, (n) => n + 1);
|
|
418
|
-
if (shouldLogMalformedFrame(count)) {
|
|
419
|
-
yield* Effect.logWarning(`Malformed frame (#${count})`).pipe(Effect.annotateLogs({
|
|
420
|
-
rawPreview: err.raw.slice(0, MALFORMED_FRAME_PREVIEW_CHARS),
|
|
421
|
-
}));
|
|
422
|
-
}
|
|
423
|
-
return null;
|
|
424
|
-
});
|
|
425
|
-
}
|
|
426
|
-
handleDecodedResponse(decoded) {
|
|
427
|
-
return Effect.gen(this, function* () {
|
|
428
|
-
const state = yield* Ref.get(this.stateRef);
|
|
429
|
-
if (Option.isNone(state))
|
|
430
|
-
return;
|
|
431
|
-
yield* state.value.tmConn.resolve(decoded.frame).pipe(Effect.asVoid);
|
|
432
|
-
});
|
|
433
|
-
}
|
|
434
|
-
handleDecodedServerRequest(decoded) {
|
|
435
|
-
return Effect.gen(this, function* () {
|
|
436
|
-
const state = yield* Ref.get(this.stateRef);
|
|
437
|
-
if (Option.isNone(state))
|
|
438
|
-
return;
|
|
439
|
-
const offered = yield* Queue.offer(state.value.taskCallbackQueue, decoded);
|
|
440
|
-
if (!offered) {
|
|
441
|
-
yield* this.writeQueueFullRejection(decoded.id, state.value.write);
|
|
442
|
-
}
|
|
443
|
-
});
|
|
444
|
-
}
|
|
445
|
-
/**
|
|
446
|
-
* Inbound notification routing. Spec #596 / Spec B: dispatch fans out
|
|
447
|
-
* through the registry's stored `onFrame` callbacks into each
|
|
448
|
-
* subscription's `Stream.async` source. The pre-arrival buffer and
|
|
449
|
-
* waiter-pop branches were deleted in Spec B (no top-level waiter, no
|
|
450
|
-
* `notificationsBufferRef`).
|
|
451
|
-
*/
|
|
452
|
-
handleDecodedNotification(decoded) {
|
|
453
|
-
return this.subscribers.dispatch(decoded);
|
|
454
|
-
}
|
|
455
|
-
handleDecodedFrame(decoded) {
|
|
456
|
-
switch (decoded._tag) {
|
|
457
|
-
case "ResponseSuccess":
|
|
458
|
-
case "ResponseError":
|
|
459
|
-
return this.handleDecodedResponse(decoded);
|
|
460
|
-
case "ServerRequest":
|
|
461
|
-
return this.handleDecodedServerRequest(decoded);
|
|
462
|
-
case "Notification":
|
|
463
|
-
return this.handleDecodedNotification(decoded);
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
/**
|
|
467
|
-
* Route an inbound frame. Malformed frames are logged + dropped; notification
|
|
468
|
-
* frames fan out through the per-subscription registry (Spec B).
|
|
469
|
-
*/
|
|
470
|
-
handleIncoming(raw) {
|
|
471
|
-
return Effect.gen(this, function* () {
|
|
472
|
-
const decodedFrames = yield* decodeFrames(raw).pipe(Effect.catchTag("MalformedFrameError", (err) => this.recordMalformedFrame(err)));
|
|
473
|
-
if (decodedFrames === null)
|
|
474
|
-
return;
|
|
475
|
-
for (const decoded of decodedFrames) {
|
|
476
|
-
yield* this.handleDecodedFrame(decoded);
|
|
477
|
-
}
|
|
478
|
-
});
|
|
479
|
-
}
|
|
480
|
-
failConnectionPending(state) {
|
|
481
|
-
return state.tmConn.failAllPending(new NotConnectedError({ message: MSG_NOT_CONNECTED }));
|
|
482
|
-
}
|
|
483
|
-
failAllPending(message) {
|
|
484
|
-
return Effect.gen(this, function* () {
|
|
485
|
-
const state = yield* Ref.get(this.stateRef);
|
|
486
|
-
if (Option.isNone(state))
|
|
487
|
-
return;
|
|
488
|
-
yield* state.value.tmConn.failAllPending(new NotConnectedError({ message }));
|
|
489
|
-
});
|
|
490
|
-
}
|
|
491
|
-
/**
|
|
492
|
-
* Schedule a reconnect attempt. Jittered exponential backoff (1s base,
|
|
493
|
-
* 30s cap) routed through `Effect.sleep` so `TestClock` can drive it.
|
|
494
|
-
*/
|
|
495
|
-
scheduleReconnect() {
|
|
496
|
-
if (this.closed || this.reconnectFiber !== null)
|
|
497
|
-
return;
|
|
498
|
-
const attempt = this.connectEffect().pipe(Effect.tap((helloOk) => Effect.gen(this, function* () {
|
|
499
|
-
try {
|
|
500
|
-
this.options.onReconnect?.(helloOk);
|
|
501
|
-
}
|
|
502
|
-
catch (err) {
|
|
503
|
-
yield* Effect.logWarning("onReconnect handler threw", err);
|
|
504
|
-
}
|
|
505
|
-
})), Effect.either, Effect.flatMap(Either.match({
|
|
506
|
-
onLeft: () => Effect.fail(new ReconnectAttemptFailedError({
|
|
507
|
-
reason: "reconnect attempt failed",
|
|
508
|
-
})),
|
|
509
|
-
onRight: (value) => Effect.succeed(value),
|
|
510
|
-
})));
|
|
511
|
-
const backoff = Schedule.exponential(Duration.millis(BASE_RECONNECT_DELAY_MS), RECONNECT_BACKOFF_FACTOR).pipe(Schedule.either(Schedule.spaced(Duration.millis(MAX_RECONNECT_DELAY_MS))), Schedule.jittered);
|
|
512
|
-
const loop = attempt.pipe(Effect.retry(backoff), Effect.asVoid, Effect.catchAll(() => Effect.void), Effect.ensuring(Effect.sync(() => {
|
|
513
|
-
this.reconnectFiber = null;
|
|
514
|
-
})), Effect.provide(NodeSocket.layerWebSocketConstructor));
|
|
515
|
-
this.reconnectFiber = this.runtime.runFork(loop);
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
//# sourceMappingURL=tm-client.js.map
|
package/dist/tm-client.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tm-client.js","sourceRoot":"","sources":["../src/tm-client.ts"],"names":[],"mappings":"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"}
|
package/dist/tm-client.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tm-client.test.d.ts","sourceRoot":"","sources":["../src/tm-client.test.ts"],"names":[],"mappings":""}
|