@moltzap/client 2026.414.0 → 2026.425.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/channel-core.d.ts +28 -15
- package/dist/channel-core.d.ts.map +1 -1
- package/dist/channel-core.js +113 -74
- package/dist/channel-core.js.map +1 -1
- package/dist/channel-core.test.js +126 -34
- package/dist/channel-core.test.js.map +1 -1
- package/dist/cli/__tests__/cli-multi-agent.int.test.d.ts +2 -0
- package/dist/cli/__tests__/cli-multi-agent.int.test.d.ts.map +1 -0
- package/dist/cli/__tests__/cli-multi-agent.int.test.js +26 -0
- package/dist/cli/__tests__/cli-multi-agent.int.test.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +13 -2
- package/dist/cli/commands/agents.d.ts.map +1 -1
- package/dist/cli/commands/agents.js +30 -18
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/apps.d.ts +96 -0
- package/dist/cli/commands/apps.d.ts.map +1 -0
- package/dist/cli/commands/apps.js +193 -0
- package/dist/cli/commands/apps.js.map +1 -0
- package/dist/cli/commands/apps.test.d.ts +2 -0
- package/dist/cli/commands/apps.test.d.ts.map +1 -0
- package/dist/cli/commands/apps.test.js +220 -0
- package/dist/cli/commands/apps.test.js.map +1 -0
- package/dist/cli/commands/contacts.d.ts +18 -2
- package/dist/cli/commands/contacts.d.ts.map +1 -1
- package/dist/cli/commands/contacts.js +44 -52
- package/dist/cli/commands/contacts.js.map +1 -1
- package/dist/cli/commands/conversations-v2.test.d.ts +2 -0
- package/dist/cli/commands/conversations-v2.test.d.ts.map +1 -0
- package/dist/cli/commands/conversations-v2.test.js +92 -0
- package/dist/cli/commands/conversations-v2.test.js.map +1 -0
- package/dist/cli/commands/conversations.d.ts +73 -3
- package/dist/cli/commands/conversations.d.ts.map +1 -1
- package/dist/cli/commands/conversations.js +157 -108
- package/dist/cli/commands/conversations.js.map +1 -1
- package/dist/cli/commands/invite.d.ts +6 -2
- package/dist/cli/commands/invite.d.ts.map +1 -1
- package/dist/cli/commands/invite.js +8 -6
- package/dist/cli/commands/invite.js.map +1 -1
- package/dist/cli/commands/messages.d.ts +48 -0
- package/dist/cli/commands/messages.d.ts.map +1 -0
- package/dist/cli/commands/messages.js +68 -0
- package/dist/cli/commands/messages.js.map +1 -0
- package/dist/cli/commands/messages.test.d.ts +2 -0
- package/dist/cli/commands/messages.test.d.ts.map +1 -0
- package/dist/cli/commands/messages.test.js +73 -0
- package/dist/cli/commands/messages.test.js.map +1 -0
- package/dist/cli/commands/permissions.d.ts +66 -0
- package/dist/cli/commands/permissions.d.ts.map +1 -0
- package/dist/cli/commands/permissions.js +101 -0
- package/dist/cli/commands/permissions.js.map +1 -0
- package/dist/cli/commands/permissions.test.d.ts +2 -0
- package/dist/cli/commands/permissions.test.d.ts.map +1 -0
- package/dist/cli/commands/permissions.test.js +126 -0
- package/dist/cli/commands/permissions.test.js.map +1 -0
- package/dist/cli/commands/ping.d.ts +6 -2
- package/dist/cli/commands/ping.d.ts.map +1 -1
- package/dist/cli/commands/ping.js +21 -20
- package/dist/cli/commands/ping.js.map +1 -1
- package/dist/cli/commands/presence.d.ts +10 -2
- package/dist/cli/commands/presence.d.ts.map +1 -1
- package/dist/cli/commands/presence.js +27 -15
- package/dist/cli/commands/presence.js.map +1 -1
- package/dist/cli/commands/register.d.ts +24 -2
- package/dist/cli/commands/register.d.ts.map +1 -1
- package/dist/cli/commands/register.js +123 -47
- package/dist/cli/commands/register.js.map +1 -1
- package/dist/cli/commands/register.test.js +45 -27
- package/dist/cli/commands/register.test.js.map +1 -1
- package/dist/cli/commands/send.d.ts +43 -2
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +55 -13
- package/dist/cli/commands/send.js.map +1 -1
- package/dist/cli/commands/send.test.js +20 -19
- package/dist/cli/commands/send.test.js.map +1 -1
- package/dist/cli/commands/status.d.ts +6 -2
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +16 -10
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/whoami.d.ts +7 -2
- package/dist/cli/commands/whoami.d.ts.map +1 -1
- package/dist/cli/commands/whoami.js +13 -7
- package/dist/cli/commands/whoami.js.map +1 -1
- package/dist/cli/config.d.ts +24 -8
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +65 -39
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/config.test.js +12 -10
- package/dist/cli/config.test.js.map +1 -1
- package/dist/cli/http-client.d.ts +6 -2
- package/dist/cli/http-client.d.ts.map +1 -1
- package/dist/cli/http-client.js +25 -24
- package/dist/cli/http-client.js.map +1 -1
- package/dist/cli/index.d.ts +16 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +160 -27
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/profile.d.ts +134 -0
- package/dist/cli/profile.d.ts.map +1 -0
- package/dist/cli/profile.js +217 -0
- package/dist/cli/profile.js.map +1 -0
- package/dist/cli/profile.test.d.ts +2 -0
- package/dist/cli/profile.test.d.ts.map +1 -0
- package/dist/cli/profile.test.js +263 -0
- package/dist/cli/profile.test.js.map +1 -0
- package/dist/cli/runtime.d.ts +34 -0
- package/dist/cli/runtime.d.ts.map +1 -0
- package/dist/cli/runtime.js +94 -0
- package/dist/cli/runtime.js.map +1 -0
- package/dist/cli/socket-client.d.ts +15 -12
- package/dist/cli/socket-client.d.ts.map +1 -1
- package/dist/cli/socket-client.js +72 -75
- package/dist/cli/socket-client.js.map +1 -1
- package/dist/cli/transport.d.ts +181 -0
- package/dist/cli/transport.d.ts.map +1 -0
- package/dist/cli/transport.js +324 -0
- package/dist/cli/transport.js.map +1 -0
- package/dist/cli/transport.test.d.ts +2 -0
- package/dist/cli/transport.test.d.ts.map +1 -0
- package/dist/cli/transport.test.js +197 -0
- package/dist/cli/transport.test.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime/close-info.d.ts +94 -0
- package/dist/runtime/close-info.d.ts.map +1 -0
- package/dist/runtime/close-info.js +109 -0
- package/dist/runtime/close-info.js.map +1 -0
- package/dist/runtime/close-info.test.d.ts +2 -0
- package/dist/runtime/close-info.test.d.ts.map +1 -0
- package/dist/runtime/close-info.test.js +102 -0
- package/dist/runtime/close-info.test.js.map +1 -0
- package/dist/runtime/errors.d.ts +47 -0
- package/dist/runtime/errors.d.ts.map +1 -0
- package/dist/runtime/errors.js +20 -0
- package/dist/runtime/errors.js.map +1 -0
- package/dist/runtime/errors.test.d.ts +2 -0
- package/dist/runtime/errors.test.d.ts.map +1 -0
- package/dist/runtime/errors.test.js +66 -0
- package/dist/runtime/errors.test.js.map +1 -0
- package/dist/runtime/frame.d.ts +25 -0
- package/dist/runtime/frame.d.ts.map +1 -0
- package/dist/runtime/frame.js +106 -0
- package/dist/runtime/frame.js.map +1 -0
- package/dist/runtime/frame.test.d.ts +2 -0
- package/dist/runtime/frame.test.d.ts.map +1 -0
- package/dist/runtime/frame.test.js +32 -0
- package/dist/runtime/frame.test.js.map +1 -0
- package/dist/runtime/index.d.ts +3 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +3 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/refs.d.ts +10 -0
- package/dist/runtime/refs.d.ts.map +1 -0
- package/dist/runtime/refs.js +10 -0
- package/dist/runtime/refs.js.map +1 -0
- package/dist/runtime/runtime.test.d.ts +2 -0
- package/dist/runtime/runtime.test.d.ts.map +1 -0
- package/dist/runtime/runtime.test.js +29 -0
- package/dist/runtime/runtime.test.js.map +1 -0
- package/dist/runtime/subscribers.d.ts +157 -0
- package/dist/runtime/subscribers.d.ts.map +1 -0
- package/dist/runtime/subscribers.js +131 -0
- package/dist/runtime/subscribers.js.map +1 -0
- package/dist/runtime/subscribers.test.d.ts +2 -0
- package/dist/runtime/subscribers.test.d.ts.map +1 -0
- package/dist/runtime/subscribers.test.js +155 -0
- package/dist/runtime/subscribers.test.js.map +1 -0
- package/dist/service.d.ts +68 -17
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +461 -307
- package/dist/service.js.map +1 -1
- package/dist/service.test.js +266 -77
- package/dist/service.test.js.map +1 -1
- package/dist/test/index.d.ts +33 -0
- package/dist/test/index.d.ts.map +1 -0
- package/dist/test/index.js +44 -0
- package/dist/test/index.js.map +1 -0
- package/dist/test-utils/channel-service-fixture.d.ts +2 -1
- package/dist/test-utils/channel-service-fixture.d.ts.map +1 -1
- package/dist/test-utils/channel-service-fixture.js +31 -11
- package/dist/test-utils/channel-service-fixture.js.map +1 -1
- package/dist/test-utils/conformance-adapter.d.ts +50 -0
- package/dist/test-utils/conformance-adapter.d.ts.map +1 -0
- package/dist/test-utils/conformance-adapter.js +206 -0
- package/dist/test-utils/conformance-adapter.js.map +1 -0
- package/dist/test-utils/fake-service.d.ts +85 -0
- package/dist/test-utils/fake-service.d.ts.map +1 -0
- package/dist/test-utils/fake-service.js +103 -0
- package/dist/test-utils/fake-service.js.map +1 -0
- package/dist/test-utils/index.d.ts +2 -0
- package/dist/test-utils/index.d.ts.map +1 -1
- package/dist/test-utils/index.js +3 -2
- package/dist/test-utils/index.js.map +1 -1
- package/dist/ws-client.d.ts +157 -18
- package/dist/ws-client.d.ts.map +1 -1
- package/dist/ws-client.js +432 -94
- package/dist/ws-client.js.map +1 -1
- package/dist/ws-client.test.d.ts +2 -0
- package/dist/ws-client.test.d.ts.map +1 -0
- package/dist/ws-client.test.js +672 -0
- package/dist/ws-client.test.js.map +1 -0
- package/package.json +23 -14
- package/LICENSE +0 -21
- package/dist/__tests__/service.integration.test.d.ts +0 -2
- package/dist/__tests__/service.integration.test.d.ts.map +0 -1
- package/dist/__tests__/service.integration.test.js +0 -1087
- package/dist/__tests__/service.integration.test.js.map +0 -1
- package/dist/cli/commands/delete.d.ts +0 -3
- package/dist/cli/commands/delete.d.ts.map +0 -1
- package/dist/cli/commands/delete.js +0 -10
- package/dist/cli/commands/delete.js.map +0 -1
- package/dist/cli/commands/react.d.ts +0 -3
- package/dist/cli/commands/react.d.ts.map +0 -1
- package/dist/cli/commands/react.js +0 -18
- package/dist/cli/commands/react.js.map +0 -1
package/dist/ws-client.js
CHANGED
|
@@ -1,82 +1,313 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Socket from "@effect/platform/Socket";
|
|
2
|
+
import * as NodeSocket from "@effect/platform-node/NodeSocket";
|
|
3
|
+
import { Deferred, Duration, Effect, Exit, Fiber, HashMap, ManagedRuntime, Option, Ref, Schedule, Scope, } from "effect";
|
|
2
4
|
import { PROTOCOL_VERSION, } from "@moltzap/protocol";
|
|
5
|
+
import { NotConnectedError, RpcServerError, RpcTimeoutError, } from "./runtime/errors.js";
|
|
6
|
+
import { decodeFrames } from "./runtime/frame.js";
|
|
7
|
+
import { makeSubscriberRegistry, } from "./runtime/subscribers.js";
|
|
8
|
+
import { extractCloseInfo } from "./runtime/close-info.js";
|
|
3
9
|
/**
|
|
4
|
-
*
|
|
10
|
+
* Default per-RPC timeout. Exported so tests driving `TestClock` can match
|
|
11
|
+
* exactly — keeps tests from silently drifting if this changes.
|
|
12
|
+
*/
|
|
13
|
+
export const RPC_TIMEOUT_MS = 30_000;
|
|
14
|
+
/** Reconnect backoff: 1s base, doubling per attempt up to the cap. */
|
|
15
|
+
const BASE_RECONNECT_DELAY_MS = 1000;
|
|
16
|
+
const MAX_RECONNECT_DELAY_MS = 30_000;
|
|
17
|
+
/**
|
|
18
|
+
* Log 1-of-N malformed frames. A misbehaving server could flood us otherwise;
|
|
19
|
+
* the counter in the log makes it clear how many we've dropped between logs.
|
|
20
|
+
*/
|
|
21
|
+
const MALFORMED_LOG_EVERY = 50;
|
|
22
|
+
/**
|
|
23
|
+
* Cap on the per-client event buffer. Any frame that has no live
|
|
24
|
+
* `waitForEvent` awaiter lands here until someone drains it. Excess
|
|
25
|
+
* frames are evicted FIFO so a slow consumer can't leak memory.
|
|
26
|
+
*/
|
|
27
|
+
const MAX_EVENT_BUFFER = 1000;
|
|
28
|
+
const MSG_NOT_CONNECTED = "WebSocket not connected";
|
|
29
|
+
const MSG_RPC_ERROR_FALLBACK = "RPC error";
|
|
30
|
+
const UTF8_DECODER = new TextDecoder("utf-8");
|
|
31
|
+
/** Drop `waiter` from its event-name bucket, pruning an empty bucket. */
|
|
32
|
+
function removeWaiter(m, eventName, waiter) {
|
|
33
|
+
const bucket = HashMap.get(m, eventName);
|
|
34
|
+
if (bucket._tag === "None")
|
|
35
|
+
return m;
|
|
36
|
+
const filtered = bucket.value.filter((w) => w !== waiter);
|
|
37
|
+
return filtered.length === 0
|
|
38
|
+
? HashMap.remove(m, eventName)
|
|
39
|
+
: HashMap.set(m, eventName, filtered);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* WebSocket lifecycle: open → auth/connect → active. On disconnect,
|
|
43
|
+
* exponential backoff (1s base, 30s cap, jittered) retries the handshake via
|
|
44
|
+
* `Effect.sleep` + `Schedule` so TestClock can drive it. Public API is
|
|
45
|
+
* Effect-based — consumers run the returned Effects themselves (typically at
|
|
46
|
+
* a framework or CLI edge).
|
|
5
47
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
48
|
+
* Transport: `@effect/platform/Socket.makeWebSocket` backed by
|
|
49
|
+
* `@effect/platform-node/NodeSocket.layerWebSocketConstructor`. The Node
|
|
50
|
+
* `WebSocketConstructor` layer is provided internally via `ManagedRuntime`
|
|
51
|
+
* so callers' `connect()` / `sendRpc()` Effects have no extra requirement.
|
|
9
52
|
*/
|
|
10
53
|
export class MoltZapWsClient {
|
|
11
54
|
options;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
55
|
+
pendingRef;
|
|
56
|
+
stateRef;
|
|
57
|
+
malformedRef;
|
|
58
|
+
eventsBufferRef;
|
|
59
|
+
/**
|
|
60
|
+
* Waiters keyed by event name. Each bucket is a FIFO stack: delivery
|
|
61
|
+
* pops the most recently registered waiter (the tail). Keying by event
|
|
62
|
+
* name keeps dispatch O(1) per inbound frame regardless of total
|
|
63
|
+
* outstanding waiters.
|
|
64
|
+
*/
|
|
65
|
+
eventWaitersRef;
|
|
66
|
+
runtime;
|
|
67
|
+
/**
|
|
68
|
+
* Per-subscription event registry. Spec #222 §5.3 (C4 + the
|
|
69
|
+
* `RealClientEventSubscriber.subscribe` filter stub). Constructed
|
|
70
|
+
* synchronously alongside the other Refs; `MoltZapWsClient.subscribe`
|
|
71
|
+
* delegates to it directly.
|
|
72
|
+
*/
|
|
73
|
+
subscribers;
|
|
16
74
|
requestCounter = 0;
|
|
17
75
|
closed = false;
|
|
76
|
+
reconnectFiber = null;
|
|
18
77
|
_helloOk = null;
|
|
19
78
|
constructor(options) {
|
|
20
79
|
this.options = options;
|
|
80
|
+
this.runtime = ManagedRuntime.make(NodeSocket.layerWebSocketConstructor);
|
|
81
|
+
this.pendingRef = this.runtime.runSync(Ref.make(HashMap.empty()));
|
|
82
|
+
this.stateRef = this.runtime.runSync(Ref.make(Option.none()));
|
|
83
|
+
this.malformedRef = this.runtime.runSync(Ref.make(0));
|
|
84
|
+
this.eventsBufferRef = this.runtime.runSync(Ref.make([]));
|
|
85
|
+
this.eventWaitersRef = this.runtime.runSync(Ref.make(HashMap.empty()));
|
|
86
|
+
// Registry construction is `Effect<…, never>`; running it sync here
|
|
87
|
+
// matches every other Ref initializer in this constructor and
|
|
88
|
+
// keeps `subscribers` non-nullable inside the class.
|
|
89
|
+
this.subscribers = this.runtime.runSync(makeSubscriberRegistry({
|
|
90
|
+
warn: (...args) => this.options.logger?.warn(...args),
|
|
91
|
+
}));
|
|
21
92
|
}
|
|
22
93
|
get helloOk() {
|
|
23
94
|
return this._helloOk;
|
|
24
95
|
}
|
|
25
|
-
|
|
26
|
-
|
|
96
|
+
/** Open the socket, perform auth/connect, resolve with HelloOk. Fails
|
|
97
|
+
* immediately on pre-open close or error. */
|
|
98
|
+
connect() {
|
|
99
|
+
return Effect.suspend(() => {
|
|
100
|
+
if (this.closed) {
|
|
101
|
+
return Effect.fail(new NotConnectedError({ message: MSG_NOT_CONNECTED }));
|
|
102
|
+
}
|
|
103
|
+
return this.connectEffect().pipe(
|
|
104
|
+
// `makeWebSocket` requires `Socket.WebSocketConstructor`; our
|
|
105
|
+
// internal Node layer provides it so callers' Effects stay
|
|
106
|
+
// requirement-free (same public shape the legacy client had).
|
|
107
|
+
Effect.provide(NodeSocket.layerWebSocketConstructor));
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
sendRpc(method, params) {
|
|
111
|
+
const methodName = typeof method === "string" ? method : method.name;
|
|
112
|
+
return this.sendRpcEffect(methodName, params);
|
|
113
|
+
}
|
|
114
|
+
sendRpcTracked(method, params) {
|
|
115
|
+
const methodName = typeof method === "string" ? method : method.name;
|
|
116
|
+
return this.sendRpcTrackedEffect(methodName, params);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Register a per-subscription event handler. Spec #222 §5.3 + OQ-2
|
|
120
|
+
* (A): filter grammar is the three-field `SubscriptionFilter`
|
|
121
|
+
* (`emissionTag` / `conversationId` / `eventNamePrefix`). Returns a
|
|
122
|
+
* handle whose `unsubscribe` Effect drops delivery starting with the
|
|
123
|
+
* next inbound frame (OQ-3 A snapshot semantics).
|
|
124
|
+
*
|
|
125
|
+
* Subscription is legal pre-`connect()`; the registry buffers
|
|
126
|
+
* registrations and starts dispatching once the reader fiber begins
|
|
127
|
+
* producing frames. Fails with `NotConnectedError` only if the client
|
|
128
|
+
* has been permanently torn down via `close()`.
|
|
129
|
+
*/
|
|
130
|
+
subscribe(filter, handler) {
|
|
131
|
+
return Effect.suspend(() => {
|
|
132
|
+
if (this.closed) {
|
|
133
|
+
return Effect.fail(new NotConnectedError({ message: MSG_NOT_CONNECTED }));
|
|
134
|
+
}
|
|
135
|
+
return this.subscribers.register(filter, handler);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Close the socket permanently (no reconnection). Writes a clean WebSocket
|
|
140
|
+
* close frame (code 1000) before tearing down the scope so the server
|
|
141
|
+
* observes a graceful handshake rather than an abrupt disconnect, preventing
|
|
142
|
+
* lingering CLOSE_WAIT sockets on the server side.
|
|
143
|
+
*/
|
|
144
|
+
close() {
|
|
145
|
+
return Effect.gen(this, function* () {
|
|
146
|
+
if (this.closed)
|
|
147
|
+
return;
|
|
148
|
+
this.closed = true;
|
|
149
|
+
this._helloOk = null;
|
|
150
|
+
if (this.reconnectFiber !== null) {
|
|
151
|
+
const f = this.reconnectFiber;
|
|
152
|
+
this.reconnectFiber = null;
|
|
153
|
+
yield* Effect.forkDaemon(Fiber.interrupt(f));
|
|
154
|
+
}
|
|
155
|
+
yield* Effect.all([
|
|
156
|
+
this.failAllPending(MSG_NOT_CONNECTED),
|
|
157
|
+
this.failAllEventWaiters(MSG_NOT_CONNECTED),
|
|
158
|
+
// Drop every live subscription so handlers stop firing once
|
|
159
|
+
// the client is permanently torn down. Idempotent.
|
|
160
|
+
this.subscribers.closeAll,
|
|
161
|
+
], { concurrency: "unbounded" });
|
|
162
|
+
const state = yield* Ref.getAndSet(this.stateRef, Option.none());
|
|
163
|
+
if (Option.isSome(state)) {
|
|
164
|
+
yield* state.value
|
|
165
|
+
.write(new Socket.CloseEvent(1000, "normal"))
|
|
166
|
+
.pipe(Effect.orDie);
|
|
167
|
+
yield* Scope.close(state.value.scope, Exit.void);
|
|
168
|
+
}
|
|
169
|
+
}).pipe(Effect.asVoid, Effect.ensuring(Effect.sync(() => {
|
|
170
|
+
void this.runtime.dispose();
|
|
171
|
+
})));
|
|
172
|
+
}
|
|
173
|
+
/** Wait for the next inbound event whose `event` field equals `eventName`.
|
|
174
|
+
* Consumes a buffered match if present; otherwise awaits the next match
|
|
175
|
+
* with a per-call timeout. */
|
|
176
|
+
waitForEvent(eventName, timeoutMs = 5000) {
|
|
177
|
+
return Effect.gen(this, function* () {
|
|
178
|
+
const buffered = yield* Ref.modify(this.eventsBufferRef, (events) => {
|
|
179
|
+
const idx = events.findIndex((e) => e.event === eventName);
|
|
180
|
+
if (idx === -1)
|
|
181
|
+
return [null, events];
|
|
182
|
+
const chosen = events[idx];
|
|
183
|
+
const next = [...events.slice(0, idx), ...events.slice(idx + 1)];
|
|
184
|
+
return [chosen, next];
|
|
185
|
+
});
|
|
186
|
+
if (buffered !== null)
|
|
187
|
+
return buffered;
|
|
188
|
+
const deferred = yield* Deferred.make();
|
|
189
|
+
const waiter = { eventName, deferred };
|
|
190
|
+
yield* Ref.update(this.eventWaitersRef, (m) => {
|
|
191
|
+
const existing = HashMap.get(m, eventName);
|
|
192
|
+
const next = existing._tag === "Some" ? [...existing.value, waiter] : [waiter];
|
|
193
|
+
return HashMap.set(m, eventName, next);
|
|
194
|
+
});
|
|
195
|
+
return yield* Deferred.await(deferred).pipe(Effect.timeoutFail({
|
|
196
|
+
duration: `${timeoutMs} millis`,
|
|
197
|
+
onTimeout: () => new Error(`Timeout waiting for event: ${eventName}`),
|
|
198
|
+
}), Effect.onExit((exit) => exit._tag === "Failure"
|
|
199
|
+
? Ref.update(this.eventWaitersRef, (m) => removeWaiter(m, eventName, waiter))
|
|
200
|
+
: Effect.void));
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
/** Return all buffered events and clear the buffer. Synchronous. */
|
|
204
|
+
drainEvents() {
|
|
205
|
+
const snapshot = this.runtime.runSync(Ref.get(this.eventsBufferRef));
|
|
206
|
+
this.runtime.runSync(Ref.set(this.eventsBufferRef, []));
|
|
207
|
+
return [...snapshot];
|
|
208
|
+
}
|
|
209
|
+
/** Close the socket without marking as permanently closed, triggering reconnection. */
|
|
210
|
+
disconnect() {
|
|
211
|
+
return Effect.sync(() => this.disconnectSync());
|
|
212
|
+
}
|
|
213
|
+
disconnectSync() {
|
|
214
|
+
const state = this.runtime.runSync(Ref.get(this.stateRef));
|
|
215
|
+
if (Option.isNone(state))
|
|
216
|
+
return;
|
|
217
|
+
// Detach from state first so sendRpc fails fast while we tear down.
|
|
218
|
+
this.runtime.runSync(Ref.set(this.stateRef, Option.none()));
|
|
219
|
+
// Fail pendings via runFork — `failAllPending` yields through
|
|
220
|
+
// `Deferred.fail` (not safe for runSync). Fire-and-forget: the reader
|
|
221
|
+
// fiber's onExit will also drain on interrupt; duplicate drain is
|
|
222
|
+
// harmless because `failAllPending` resets the pendingRef atomically.
|
|
223
|
+
this.runtime.runFork(this.failAllPending(MSG_NOT_CONNECTED));
|
|
224
|
+
// Interrupt the reader fiber. runRaw exits, the socket scope closes,
|
|
225
|
+
// ws.close(1000) fires as part of that teardown.
|
|
226
|
+
this.runtime.runFork(Fiber.interrupt(state.value.readerFiber));
|
|
227
|
+
// Close the per-connection scope as a belt-and-braces guarantee.
|
|
228
|
+
this.runtime.runFork(Scope.close(state.value.scope, Exit.void));
|
|
229
|
+
}
|
|
230
|
+
connectEffect() {
|
|
231
|
+
return Effect.gen(this, function* () {
|
|
27
232
|
const url = this.options.serverUrl.replace(/^http/, "ws") + "/ws";
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
233
|
+
// Fresh scope per connect attempt. Held by the client (not the caller's
|
|
234
|
+
// fiber) so the reader + writer outlive the outer `connect()` Effect.
|
|
235
|
+
const scope = yield* Scope.make();
|
|
236
|
+
// Map Socket open failures (SocketGenericError / SocketCloseError) to
|
|
237
|
+
// NotConnectedError so callers see a single typed error.
|
|
238
|
+
const socket = yield* Scope.extend(Socket.makeWebSocket(url, { openTimeout: Duration.seconds(10) }), scope).pipe(Effect.catchAllCause((cause) => Effect.zipRight(Effect.sync(() => this.options.logger?.warn("WebSocket open failed", cause)), Scope.close(scope, Exit.void).pipe(Effect.zipRight(Effect.fail(new NotConnectedError({ message: MSG_NOT_CONNECTED })))))));
|
|
239
|
+
const write = yield* Scope.extend(socket.writer, scope);
|
|
240
|
+
// Settled first by whichever fires: the auth/connect response, or
|
|
241
|
+
// reader-fiber exit on any close/error before handshake.
|
|
242
|
+
const handshakeSettled = yield* Deferred.make();
|
|
243
|
+
// Use `onExit` (not `tapErrorCause`) so the clean-close path also
|
|
244
|
+
// triggers pending-drain. `@effect/platform/Socket` treats code 1000
|
|
245
|
+
// as a SUCCESS exit, so error-only handlers miss it and pending RPCs
|
|
246
|
+
// would hang forever.
|
|
247
|
+
const readerEffect = socket
|
|
248
|
+
.runRaw((data) => this.handleIncoming(typeof data === "string" ? data : UTF8_DECODER.decode(data)))
|
|
249
|
+
.pipe(Effect.onExit((exit) => Effect.gen(this, function* () {
|
|
250
|
+
if (Exit.isFailure(exit)) {
|
|
251
|
+
this.options.logger?.warn("WebSocket error", exit.cause);
|
|
39
252
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const err = frame.error;
|
|
53
|
-
pending.reject(new Error(err.message ?? "RPC error"));
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
pending.resolve(frame.result);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
253
|
+
this._helloOk = null;
|
|
254
|
+
yield* this.failAllPending(MSG_NOT_CONNECTED);
|
|
255
|
+
// Unblock any `connect()` still awaiting the handshake.
|
|
256
|
+
yield* Deferred.fail(handshakeSettled, new NotConnectedError({ message: MSG_NOT_CONNECTED })).pipe(Effect.ignore);
|
|
257
|
+
yield* Ref.set(this.stateRef, Option.none());
|
|
258
|
+
// Spec #222 §5.4 (V7): project the reader-fiber exit onto
|
|
259
|
+
// a typed `CloseInfo` and pass it to `onDisconnect`. Pure
|
|
260
|
+
// total classifier — see runtime/close-info.ts.
|
|
261
|
+
const close = extractCloseInfo(exit);
|
|
262
|
+
yield* Effect.sync(() => {
|
|
263
|
+
try {
|
|
264
|
+
this.options.onDisconnect?.(close);
|
|
59
265
|
}
|
|
60
|
-
|
|
61
|
-
this.options.
|
|
266
|
+
catch (err) {
|
|
267
|
+
this.options.logger?.warn("onDisconnect handler threw", err);
|
|
62
268
|
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
this.options.logger?.warn("Malformed frame:", data.toString());
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
this.ws.on("close", () => {
|
|
69
|
-
this.options.onDisconnect();
|
|
70
|
-
if (!this.closed)
|
|
269
|
+
});
|
|
270
|
+
if (!this.closed) {
|
|
71
271
|
this.scheduleReconnect();
|
|
272
|
+
}
|
|
273
|
+
})));
|
|
274
|
+
// Fork the reader on the CLIENT's runtime (not the caller's fiber) so
|
|
275
|
+
// it outlives the outer `connect()`. Otherwise the caller's fiber tree
|
|
276
|
+
// finalizes on return, interrupts the reader, and `onExit` clears
|
|
277
|
+
// `_helloOk` behind a caller that believed connect() succeeded.
|
|
278
|
+
const readerFiber = this.runtime.runFork(readerEffect);
|
|
279
|
+
// Publish state BEFORE auth/connect: the write goes through
|
|
280
|
+
// `sendRpcEffect`, which reads `stateRef`.
|
|
281
|
+
yield* Ref.set(this.stateRef, Option.some({ write, readerFiber, scope, handshakeSettled }));
|
|
282
|
+
const authEffect = this.sendRpcEffect("auth/connect", {
|
|
283
|
+
agentKey: this.options.agentKey,
|
|
284
|
+
minProtocol: PROTOCOL_VERSION,
|
|
285
|
+
maxProtocol: PROTOCOL_VERSION,
|
|
72
286
|
});
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
287
|
+
// Race the auth/connect response against the handshakeSettled deferred
|
|
288
|
+
// `raceFirst` (not `race`) — `race` waits for the loser when the
|
|
289
|
+
// winner fails, so a typed auth/connect error would hang behind the
|
|
290
|
+
// still-pending handshake-watchdog Deferred.
|
|
291
|
+
const result = yield* Effect.raceFirst(authEffect, Deferred.await(handshakeSettled)).pipe(Effect.tap((value) => Effect.sync(() => {
|
|
292
|
+
this._helloOk = value;
|
|
293
|
+
})));
|
|
294
|
+
return result;
|
|
76
295
|
});
|
|
77
296
|
}
|
|
78
|
-
|
|
79
|
-
|
|
297
|
+
/**
|
|
298
|
+
* Tracked variant of `sendRpcEffect`. Reuses the same Deferred /
|
|
299
|
+
* pendingRef plumbing — the only difference is the resolved value:
|
|
300
|
+
* `{id, type: "response", result}` instead of bare `result`. This
|
|
301
|
+
* keeps Invariant 3 (single id source) trivially: we mint `id` once
|
|
302
|
+
* inside this body, register the Deferred under that id, and return
|
|
303
|
+
* the same id to the caller alongside the result.
|
|
304
|
+
*/
|
|
305
|
+
sendRpcTrackedEffect(method, params) {
|
|
306
|
+
return Effect.gen(this, function* () {
|
|
307
|
+
const state = yield* Ref.get(this.stateRef);
|
|
308
|
+
if (Option.isNone(state)) {
|
|
309
|
+
return yield* Effect.fail(new NotConnectedError({ message: MSG_NOT_CONNECTED }));
|
|
310
|
+
}
|
|
80
311
|
const id = `rpc-${++this.requestCounter}`;
|
|
81
312
|
const frame = {
|
|
82
313
|
jsonrpc: "2.0",
|
|
@@ -85,54 +316,161 @@ export class MoltZapWsClient {
|
|
|
85
316
|
method,
|
|
86
317
|
params,
|
|
87
318
|
};
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
319
|
+
// Register the Deferred BEFORE writing. `write` yields to the
|
|
320
|
+
// scheduler; the reader could interleave, see a close, and
|
|
321
|
+
// `failAllPending` before we register — leaving us to await a
|
|
322
|
+
// never-resolved Deferred.
|
|
323
|
+
const deferred = yield* Deferred.make();
|
|
324
|
+
yield* Ref.update(this.pendingRef, (m) => HashMap.set(m, id, deferred));
|
|
325
|
+
// `socket.writer` gates on an internal Latch that `runRaw` only
|
|
326
|
+
// opens after the WebSocket hits OPEN. If the socket never
|
|
327
|
+
// opens, `runRaw`'s `ensuring` closes the latch and `write`
|
|
328
|
+
// blocks indefinitely — so we race the write against the
|
|
329
|
+
// pending Deferred (which the reader fails on close),
|
|
330
|
+
// short-circuiting the dead write.
|
|
331
|
+
const writeAttempt = Effect.either(state.value.write(JSON.stringify(frame)));
|
|
332
|
+
const earlyFailure = Deferred.await(deferred).pipe(Effect.catchAll(() => Effect.succeed(null)), Effect.as(null));
|
|
333
|
+
const writeRace = yield* Effect.race(writeAttempt, earlyFailure);
|
|
334
|
+
if (writeRace !== null && writeRace._tag === "Left") {
|
|
335
|
+
this.options.logger?.warn("ws.send failed", writeRace.left);
|
|
336
|
+
yield* Ref.update(this.pendingRef, (m) => HashMap.remove(m, id));
|
|
337
|
+
return yield* Effect.fail(new NotConnectedError({ message: MSG_NOT_CONNECTED }));
|
|
93
338
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
339
|
+
const result = yield* Deferred.await(deferred).pipe(Effect.timeoutFail({
|
|
340
|
+
duration: `${RPC_TIMEOUT_MS} millis`,
|
|
341
|
+
onTimeout: () => new RpcTimeoutError({ method, timeoutMs: RPC_TIMEOUT_MS }),
|
|
342
|
+
}), Effect.onExit((exit) => Exit.isFailure(exit)
|
|
343
|
+
? Ref.update(this.pendingRef, (m) => HashMap.remove(m, id))
|
|
344
|
+
: Effect.void));
|
|
345
|
+
// `type: "response"` is surfaced as an observable literal (V5):
|
|
346
|
+
// the value the caller sees comes from the same response
|
|
347
|
+
// envelope the reader fiber decoded, not a synthesized adapter
|
|
348
|
+
// constant. The Frame schema at
|
|
349
|
+
// `packages/protocol/src/schema/frames.ts:18` pins `type` to
|
|
350
|
+
// that literal at decode time, so this assignment is the
|
|
351
|
+
// value-level projection of that schema constraint.
|
|
352
|
+
return { id, type: "response", result };
|
|
101
353
|
});
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Bare-result RPC — projects the tracked RPC envelope onto its
|
|
357
|
+
* `result` field, discarding the `{id, type}` observability surface.
|
|
358
|
+
* The write / race / timeout plumbing lives in `sendRpcTrackedEffect`
|
|
359
|
+
* so there is one shared site for Invariant 3 (single id source),
|
|
360
|
+
* Invariant 5 (typed error channel), and the `socket.writer` latch
|
|
361
|
+
* race described below.
|
|
362
|
+
*/
|
|
363
|
+
sendRpcEffect(method, params) {
|
|
364
|
+
return this.sendRpcTrackedEffect(method, params).pipe(Effect.map((tracked) => tracked.result));
|
|
365
|
+
}
|
|
366
|
+
/** Route an inbound frame. Malformed frames are logged + dropped; event
|
|
367
|
+
* frames dispatch to `onEvent` after the shape check. */
|
|
368
|
+
handleIncoming(raw) {
|
|
369
|
+
return Effect.gen(this, function* () {
|
|
370
|
+
const decodedFrames = yield* decodeFrames(raw).pipe(Effect.catchTag("MalformedFrameError", (err) => Effect.gen(this, function* () {
|
|
371
|
+
const n = yield* Ref.updateAndGet(this.malformedRef, (c) => c + 1);
|
|
372
|
+
if (n === 1 || n % MALFORMED_LOG_EVERY === 0) {
|
|
373
|
+
this.options.logger?.warn(`Malformed frame (#${n}):`, err.raw.slice(0, 200));
|
|
374
|
+
}
|
|
375
|
+
return null;
|
|
376
|
+
})));
|
|
377
|
+
if (decodedFrames === null)
|
|
378
|
+
return;
|
|
379
|
+
for (const decoded of decodedFrames) {
|
|
380
|
+
if (decoded._tag === "Response") {
|
|
381
|
+
const { id, result, error } = decoded;
|
|
382
|
+
const pending = yield* Ref.modify(this.pendingRef, (m) => {
|
|
383
|
+
const entry = HashMap.get(m, id);
|
|
384
|
+
return entry._tag === "Some"
|
|
385
|
+
? [entry.value, HashMap.remove(m, id)]
|
|
386
|
+
: [null, m];
|
|
387
|
+
});
|
|
388
|
+
if (pending === null)
|
|
389
|
+
continue;
|
|
390
|
+
if (error) {
|
|
391
|
+
yield* Deferred.fail(pending, new RpcServerError({
|
|
392
|
+
code: typeof error.code === "number" ? error.code : -32603,
|
|
393
|
+
message: error.message ?? MSG_RPC_ERROR_FALLBACK,
|
|
394
|
+
data: error.data,
|
|
395
|
+
}));
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
yield* Deferred.succeed(pending, result);
|
|
399
|
+
}
|
|
400
|
+
continue;
|
|
401
|
+
}
|
|
402
|
+
if (decoded._tag === "Event") {
|
|
403
|
+
// Spec #222 §5.3 (C4 + subscribe-stub): per-subscription
|
|
404
|
+
// fan-out replaces the deleted top-level `onEvent` callback.
|
|
405
|
+
// Snapshot-at-dispatch semantics live inside the registry
|
|
406
|
+
// (OQ-3 A); see runtime/subscribers.ts.
|
|
407
|
+
yield* this.subscribers.dispatch(decoded.frame);
|
|
408
|
+
const delivered = yield* Ref.modify(this.eventWaitersRef, (m) => {
|
|
409
|
+
const bucket = HashMap.get(m, decoded.frame.event);
|
|
410
|
+
if (bucket._tag === "None" || bucket.value.length === 0) {
|
|
411
|
+
return [null, m];
|
|
412
|
+
}
|
|
413
|
+
const arr = bucket.value;
|
|
414
|
+
const chosen = arr[arr.length - 1];
|
|
415
|
+
const rest = arr.slice(0, -1);
|
|
416
|
+
const nextMap = rest.length === 0
|
|
417
|
+
? HashMap.remove(m, decoded.frame.event)
|
|
418
|
+
: HashMap.set(m, decoded.frame.event, rest);
|
|
419
|
+
return [chosen, nextMap];
|
|
420
|
+
});
|
|
421
|
+
if (delivered !== null) {
|
|
422
|
+
yield* Deferred.succeed(delivered.deferred, decoded.frame).pipe(Effect.ignore);
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
yield* Ref.update(this.eventsBufferRef, (xs) => {
|
|
426
|
+
const appended = [...xs, decoded.frame];
|
|
427
|
+
return appended.length > MAX_EVENT_BUFFER
|
|
428
|
+
? appended.slice(-MAX_EVENT_BUFFER)
|
|
429
|
+
: appended;
|
|
430
|
+
});
|
|
431
|
+
}
|
|
110
432
|
}
|
|
111
|
-
|
|
112
|
-
}
|
|
433
|
+
});
|
|
113
434
|
}
|
|
114
|
-
/**
|
|
115
|
-
|
|
116
|
-
this
|
|
117
|
-
|
|
435
|
+
/** Fail every outstanding event waiter with `message` and clear the map. */
|
|
436
|
+
failAllEventWaiters(message) {
|
|
437
|
+
return Effect.gen(this, function* () {
|
|
438
|
+
const waiters = yield* Ref.getAndSet(this.eventWaitersRef, HashMap.empty());
|
|
439
|
+
for (const [, bucket] of HashMap.entries(waiters)) {
|
|
440
|
+
for (const w of bucket) {
|
|
441
|
+
yield* Deferred.fail(w.deferred, new Error(message)).pipe(Effect.ignore);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
});
|
|
118
445
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
446
|
+
failAllPending(message) {
|
|
447
|
+
return Effect.gen(this, function* () {
|
|
448
|
+
const pending = yield* Ref.getAndSet(this.pendingRef, HashMap.empty());
|
|
449
|
+
for (const [, d] of HashMap.entries(pending)) {
|
|
450
|
+
yield* Deferred.fail(d, new NotConnectedError({ message })).pipe(Effect.ignore);
|
|
451
|
+
}
|
|
452
|
+
});
|
|
122
453
|
}
|
|
454
|
+
/** Schedule a reconnect attempt. Jittered exponential backoff (1s base,
|
|
455
|
+
* 30s cap) routed through `Effect.sleep` so `TestClock` can drive it. */
|
|
123
456
|
scheduleReconnect() {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
this.
|
|
127
|
-
setTimeout(async () => {
|
|
457
|
+
if (this.closed || this.reconnectFiber !== null)
|
|
458
|
+
return;
|
|
459
|
+
const attempt = this.connectEffect().pipe(Effect.tap((helloOk) => Effect.sync(() => {
|
|
128
460
|
try {
|
|
129
|
-
|
|
130
|
-
this.options.onReconnect(helloOk);
|
|
461
|
+
this.options.onReconnect?.(helloOk);
|
|
131
462
|
}
|
|
132
|
-
catch {
|
|
133
|
-
|
|
463
|
+
catch (err) {
|
|
464
|
+
this.options.logger?.warn("onReconnect handler threw", err);
|
|
134
465
|
}
|
|
135
|
-
},
|
|
466
|
+
})),
|
|
467
|
+
// Collapse typed errors so `Schedule.exponential` can retry.
|
|
468
|
+
Effect.mapError(() => new Error("reconnect attempt failed")));
|
|
469
|
+
const backoff = Schedule.exponential(Duration.millis(BASE_RECONNECT_DELAY_MS), 2).pipe(Schedule.either(Schedule.spaced(Duration.millis(MAX_RECONNECT_DELAY_MS))), Schedule.jittered);
|
|
470
|
+
const loop = attempt.pipe(Effect.retry(backoff), Effect.asVoid, Effect.catchAll(() => Effect.void), Effect.ensuring(Effect.sync(() => {
|
|
471
|
+
this.reconnectFiber = null;
|
|
472
|
+
})), Effect.provide(NodeSocket.layerWebSocketConstructor));
|
|
473
|
+
this.reconnectFiber = this.runtime.runFork(loop);
|
|
136
474
|
}
|
|
137
475
|
}
|
|
138
476
|
//# sourceMappingURL=ws-client.js.map
|
package/dist/ws-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-client.js","sourceRoot":"","sources":["../src/ws-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ws-client.js","sourceRoot":"","sources":["../src/ws-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-client.test.d.ts","sourceRoot":"","sources":["../src/ws-client.test.ts"],"names":[],"mappings":""}
|