@moltzap/client 2026.503.3 → 2026.504.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/auth.d.ts +10 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +8 -5
- package/dist/auth.js.map +1 -1
- package/dist/channel-core.d.ts +1 -4
- package/dist/channel-core.d.ts.map +1 -1
- package/dist/channel-core.js +0 -9
- package/dist/channel-core.js.map +1 -1
- package/dist/channel-core.test.js +90 -71
- package/dist/channel-core.test.js.map +1 -1
- package/dist/cli/commands/agents.d.ts.map +1 -1
- package/dist/cli/commands/agents.js +5 -3
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/apps.d.ts +9 -27
- package/dist/cli/commands/apps.d.ts.map +1 -1
- package/dist/cli/commands/apps.js +36 -57
- package/dist/cli/commands/apps.js.map +1 -1
- package/dist/cli/commands/apps.test.js +63 -75
- package/dist/cli/commands/apps.test.js.map +1 -1
- package/dist/cli/commands/contacts.d.ts +1 -5
- package/dist/cli/commands/contacts.d.ts.map +1 -1
- package/dist/cli/commands/contacts.js +14 -27
- package/dist/cli/commands/contacts.js.map +1 -1
- package/dist/cli/commands/conversations-v2.test.js +34 -29
- package/dist/cli/commands/conversations-v2.test.js.map +1 -1
- package/dist/cli/commands/conversations.d.ts +7 -3
- package/dist/cli/commands/conversations.d.ts.map +1 -1
- package/dist/cli/commands/conversations.js +63 -48
- package/dist/cli/commands/conversations.js.map +1 -1
- package/dist/cli/commands/messages.d.ts +7 -3
- package/dist/cli/commands/messages.d.ts.map +1 -1
- package/dist/cli/commands/messages.js +13 -15
- package/dist/cli/commands/messages.js.map +1 -1
- package/dist/cli/commands/messages.test.js +30 -31
- package/dist/cli/commands/messages.test.js.map +1 -1
- package/dist/cli/commands/ping.d.ts +9 -0
- package/dist/cli/commands/ping.d.ts.map +1 -1
- package/dist/cli/commands/ping.js +17 -4
- package/dist/cli/commands/ping.js.map +1 -1
- package/dist/cli/commands/presence.d.ts.map +1 -1
- package/dist/cli/commands/presence.js +6 -4
- package/dist/cli/commands/presence.js.map +1 -1
- package/dist/cli/commands/register.d.ts.map +1 -1
- package/dist/cli/commands/register.js +2 -1
- package/dist/cli/commands/register.js.map +1 -1
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +22 -11
- package/dist/cli/commands/send.js.map +1 -1
- package/dist/cli/commands/send.test.js +12 -9
- package/dist/cli/commands/send.test.js.map +1 -1
- package/dist/cli/commands/status.js +2 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/test-transport.d.ts +10 -0
- package/dist/cli/commands/test-transport.d.ts.map +1 -0
- package/dist/cli/commands/test-transport.js +29 -0
- package/dist/cli/commands/test-transport.js.map +1 -0
- package/dist/cli/commands/whoami.d.ts.map +1 -1
- package/dist/cli/commands/whoami.js +5 -1
- package/dist/cli/commands/whoami.js.map +1 -1
- package/dist/cli/config.d.ts +42 -6
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +91 -27
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/http-client.d.ts +11 -1
- package/dist/cli/http-client.d.ts.map +1 -1
- package/dist/cli/http-client.js +13 -4
- package/dist/cli/http-client.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/profile.d.ts +3 -4
- package/dist/cli/profile.d.ts.map +1 -1
- package/dist/cli/profile.js +42 -29
- package/dist/cli/profile.js.map +1 -1
- package/dist/cli/runtime.d.ts.map +1 -1
- package/dist/cli/runtime.js +9 -4
- package/dist/cli/runtime.js.map +1 -1
- package/dist/cli/socket-client.d.ts +29 -4
- package/dist/cli/socket-client.d.ts.map +1 -1
- package/dist/cli/socket-client.js +52 -21
- package/dist/cli/socket-client.js.map +1 -1
- package/dist/cli/transport.d.ts +6 -9
- package/dist/cli/transport.d.ts.map +1 -1
- package/dist/cli/transport.js +47 -37
- package/dist/cli/transport.js.map +1 -1
- package/dist/cli/transport.test.js +19 -16
- package/dist/cli/transport.test.js.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/__tests__/app-callback-partition-key.test.d.ts +2 -0
- package/dist/internal/__tests__/app-callback-partition-key.test.d.ts.map +1 -0
- package/dist/internal/__tests__/app-callback-partition-key.test.js +33 -0
- package/dist/internal/__tests__/app-callback-partition-key.test.js.map +1 -0
- package/dist/internal/__tests__/app-callback-partition-worker.test.d.ts +2 -0
- package/dist/internal/__tests__/app-callback-partition-worker.test.d.ts.map +1 -0
- package/dist/internal/__tests__/{s2c-partition-worker.test.js → app-callback-partition-worker.test.js} +6 -8
- package/dist/internal/__tests__/app-callback-partition-worker.test.js.map +1 -0
- package/dist/internal/__tests__/app-callback-partitioned-dispatcher-real-ws.test.d.ts +2 -0
- package/dist/internal/__tests__/app-callback-partitioned-dispatcher-real-ws.test.d.ts.map +1 -0
- package/dist/internal/__tests__/{s2c-partitioned-dispatcher-real-ws.test.js → app-callback-partitioned-dispatcher-real-ws.test.js} +69 -93
- package/dist/internal/__tests__/app-callback-partitioned-dispatcher-real-ws.test.js.map +1 -0
- package/dist/internal/__tests__/app-callback-partitioned-dispatcher.test.d.ts +2 -0
- package/dist/internal/__tests__/app-callback-partitioned-dispatcher.test.d.ts.map +1 -0
- package/dist/internal/__tests__/{s2c-partitioned-dispatcher.test.js → app-callback-partitioned-dispatcher.test.js} +36 -69
- package/dist/internal/__tests__/app-callback-partitioned-dispatcher.test.js.map +1 -0
- package/dist/internal/__tests__/app-callback-test-requests.d.ts +58 -0
- package/dist/internal/__tests__/app-callback-test-requests.d.ts.map +1 -0
- package/dist/internal/__tests__/app-callback-test-requests.js +124 -0
- package/dist/internal/__tests__/app-callback-test-requests.js.map +1 -0
- package/dist/internal/{s2c-dispatcher-errors.d.ts → app-callback-dispatcher-errors.d.ts} +5 -21
- package/dist/internal/app-callback-dispatcher-errors.d.ts.map +1 -0
- package/dist/internal/{s2c-dispatcher-errors.js → app-callback-dispatcher-errors.js} +3 -13
- package/dist/internal/app-callback-dispatcher-errors.js.map +1 -0
- package/dist/internal/app-callback-partition-key.d.ts +68 -0
- package/dist/internal/app-callback-partition-key.d.ts.map +1 -0
- package/dist/internal/app-callback-partition-key.js +90 -0
- package/dist/internal/app-callback-partition-key.js.map +1 -0
- package/dist/internal/{s2c-partition-worker.d.ts → app-callback-partition-worker.d.ts} +5 -5
- package/dist/internal/app-callback-partition-worker.d.ts.map +1 -0
- package/dist/internal/{s2c-partition-worker.js → app-callback-partition-worker.js} +5 -5
- package/dist/internal/app-callback-partition-worker.js.map +1 -0
- package/dist/internal/{s2c-partitioned-dispatcher.d.ts → app-callback-partitioned-dispatcher.d.ts} +9 -10
- package/dist/internal/app-callback-partitioned-dispatcher.d.ts.map +1 -0
- package/dist/internal/{s2c-partitioned-dispatcher.js → app-callback-partitioned-dispatcher.js} +13 -21
- package/dist/internal/app-callback-partitioned-dispatcher.js.map +1 -0
- package/dist/runtime/close-info.d.ts +15 -16
- package/dist/runtime/close-info.d.ts.map +1 -1
- package/dist/runtime/close-info.js +12 -8
- package/dist/runtime/close-info.js.map +1 -1
- package/dist/runtime/errors.d.ts +2 -28
- package/dist/runtime/errors.d.ts.map +1 -1
- package/dist/runtime/errors.js +0 -9
- package/dist/runtime/errors.js.map +1 -1
- package/dist/runtime/errors.test.js +4 -3
- package/dist/runtime/errors.test.js.map +1 -1
- package/dist/runtime/frame.d.ts +17 -18
- package/dist/runtime/frame.d.ts.map +1 -1
- package/dist/runtime/frame.js +86 -31
- package/dist/runtime/frame.js.map +1 -1
- package/dist/runtime/frame.test.js +15 -11
- package/dist/runtime/frame.test.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/local-service-commands.d.ts +7 -0
- package/dist/runtime/local-service-commands.d.ts.map +1 -0
- package/dist/runtime/local-service-commands.js +6 -0
- package/dist/runtime/local-service-commands.js.map +1 -0
- package/dist/runtime/runtime.test.js +3 -3
- package/dist/runtime/runtime.test.js.map +1 -1
- package/dist/runtime/subscribers.d.ts +37 -33
- package/dist/runtime/subscribers.d.ts.map +1 -1
- package/dist/runtime/subscribers.js +22 -21
- package/dist/runtime/subscribers.js.map +1 -1
- package/dist/runtime/subscribers.test.js +50 -31
- package/dist/runtime/subscribers.test.js.map +1 -1
- package/dist/service.d.ts +24 -39
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +190 -171
- package/dist/service.js.map +1 -1
- package/dist/service.test.js +117 -175
- package/dist/service.test.js.map +1 -1
- package/dist/test/index.d.ts +9 -1
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +14 -3
- package/dist/test/index.js.map +1 -1
- package/dist/test-utils/channel-service-fixture.d.ts +1 -2
- package/dist/test-utils/channel-service-fixture.d.ts.map +1 -1
- package/dist/test-utils/channel-service-fixture.js +28 -20
- package/dist/test-utils/channel-service-fixture.js.map +1 -1
- package/dist/test-utils/conformance-adapter.d.ts +2 -2
- package/dist/test-utils/conformance-adapter.d.ts.map +1 -1
- package/dist/test-utils/conformance-adapter.js +78 -54
- package/dist/test-utils/conformance-adapter.js.map +1 -1
- package/dist/test-utils/fake-service.d.ts +14 -39
- package/dist/test-utils/fake-service.d.ts.map +1 -1
- package/dist/test-utils/fake-service.js +33 -39
- package/dist/test-utils/fake-service.js.map +1 -1
- package/dist/test-utils/ids.d.ts +9 -0
- package/dist/test-utils/ids.d.ts.map +1 -0
- package/dist/test-utils/ids.js +52 -0
- package/dist/test-utils/ids.js.map +1 -0
- package/dist/test-utils/index.d.ts +10 -2
- package/dist/test-utils/index.d.ts.map +1 -1
- package/dist/test-utils/index.js +25 -9
- package/dist/test-utils/index.js.map +1 -1
- package/dist/ws-client.d.ts +59 -64
- package/dist/ws-client.d.ts.map +1 -1
- package/dist/ws-client.js +228 -175
- package/dist/ws-client.js.map +1 -1
- package/dist/ws-client.test.js +190 -176
- package/dist/ws-client.test.js.map +1 -1
- package/package.json +3 -3
- package/dist/cli/commands/permissions.d.ts +0 -66
- package/dist/cli/commands/permissions.d.ts.map +0 -1
- package/dist/cli/commands/permissions.js +0 -101
- package/dist/cli/commands/permissions.js.map +0 -1
- package/dist/cli/commands/permissions.test.d.ts +0 -2
- package/dist/cli/commands/permissions.test.d.ts.map +0 -1
- package/dist/cli/commands/permissions.test.js +0 -126
- package/dist/cli/commands/permissions.test.js.map +0 -1
- package/dist/internal/__tests__/s2c-partition-key.test.d.ts +0 -2
- package/dist/internal/__tests__/s2c-partition-key.test.d.ts.map +0 -1
- package/dist/internal/__tests__/s2c-partition-key.test.js +0 -230
- package/dist/internal/__tests__/s2c-partition-key.test.js.map +0 -1
- package/dist/internal/__tests__/s2c-partition-worker.test.d.ts +0 -2
- package/dist/internal/__tests__/s2c-partition-worker.test.d.ts.map +0 -1
- package/dist/internal/__tests__/s2c-partition-worker.test.js.map +0 -1
- package/dist/internal/__tests__/s2c-partitioned-dispatcher-real-ws.test.d.ts +0 -2
- package/dist/internal/__tests__/s2c-partitioned-dispatcher-real-ws.test.d.ts.map +0 -1
- package/dist/internal/__tests__/s2c-partitioned-dispatcher-real-ws.test.js.map +0 -1
- package/dist/internal/__tests__/s2c-partitioned-dispatcher.test.d.ts +0 -2
- package/dist/internal/__tests__/s2c-partitioned-dispatcher.test.d.ts.map +0 -1
- package/dist/internal/__tests__/s2c-partitioned-dispatcher.test.js.map +0 -1
- package/dist/internal/s2c-dispatcher-errors.d.ts.map +0 -1
- package/dist/internal/s2c-dispatcher-errors.js.map +0 -1
- package/dist/internal/s2c-partition-key.d.ts +0 -71
- package/dist/internal/s2c-partition-key.d.ts.map +0 -1
- package/dist/internal/s2c-partition-key.js +0 -140
- package/dist/internal/s2c-partition-key.js.map +0 -1
- package/dist/internal/s2c-partition-worker.d.ts.map +0 -1
- package/dist/internal/s2c-partition-worker.js.map +0 -1
- package/dist/internal/s2c-partitioned-dispatcher.d.ts.map +0 -1
- package/dist/internal/s2c-partitioned-dispatcher.js.map +0 -1
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Per-subscription
|
|
2
|
+
* Per-subscription notification registry for `MoltZapWsClient`.
|
|
3
3
|
*
|
|
4
4
|
* Responsibility: own the list of live `subscribe()` handles and fan each
|
|
5
|
-
* inbound
|
|
5
|
+
* inbound JSON-RPC notification out to every subscription whose filter matches.
|
|
6
6
|
* Implements spec #222 §5.3 (C4 + the `RealClientEventSubscriber.subscribe`
|
|
7
7
|
* filter stub). Lives as an internal collaborator of `MoltZapWsClient`;
|
|
8
|
-
* the public types (`SubscriptionFilter`, `
|
|
8
|
+
* the public types (`SubscriptionFilter`, `NotificationSubscription`,
|
|
9
9
|
* `SubscriptionId`) re-export from the package barrel.
|
|
10
10
|
*
|
|
11
|
-
* Dispatch ordering (Invariant 6 —
|
|
11
|
+
* Dispatch ordering (Invariant 6 — notifications delivered in arrival order):
|
|
12
12
|
* 1. Inbound frames are handed to the registry in arrival order.
|
|
13
13
|
* 2. Within a single frame, subscriptions are notified in registration
|
|
14
14
|
* order.
|
|
15
|
-
* 3. There is no separate legacy `
|
|
16
|
-
* resolved by DELETING `MoltZapWsClientOptions.
|
|
17
|
-
* that want
|
|
15
|
+
* 3. There is no separate legacy `onNotification` fanout — spec #222 OQ-4 is
|
|
16
|
+
* resolved by DELETING `MoltZapWsClientOptions.onNotification`. Callers
|
|
17
|
+
* that want every notification register `subscribe({}, handler)` after
|
|
18
18
|
* construction and before `connect()`.
|
|
19
19
|
*
|
|
20
20
|
* Unsubscribe semantics (OQ-3 A): `unsubscribe` takes effect on the next
|
|
@@ -25,12 +25,13 @@
|
|
|
25
25
|
*
|
|
26
26
|
* Error channel: handlers are invoked inside a defect-catcher; a throw is
|
|
27
27
|
* logged via the client's injected `WsClientLogger` and swallowed
|
|
28
|
-
* (matching the prior `
|
|
28
|
+
* (matching the prior `onNotification` contract at `ws-client.ts:650-655`
|
|
29
29
|
* pre-deletion). The registry itself has no typed error surface —
|
|
30
30
|
* `register`, `dispatch`, and `closeAll` are `Effect<T, never>`.
|
|
31
31
|
*/
|
|
32
|
-
import { Effect, Ref } from "effect";
|
|
33
|
-
|
|
32
|
+
import { Brand, Effect, Ref } from "effect";
|
|
33
|
+
export const SubscriptionId = Brand.nominal();
|
|
34
|
+
function isNotificationParamsRecord(value) {
|
|
34
35
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
35
36
|
}
|
|
36
37
|
/**
|
|
@@ -50,7 +51,7 @@ function isEventDataRecord(value) {
|
|
|
50
51
|
* - Handler exceptions are caught with `Effect.catchAllDefect` after
|
|
51
52
|
* the handler Effect. Sync `throw` from a `(frame) => …` body
|
|
52
53
|
* surfaces as a defect; we log + swallow to match the pre-deletion
|
|
53
|
-
* `
|
|
54
|
+
* `onNotification` contract.
|
|
54
55
|
*/
|
|
55
56
|
export function makeSubscriberRegistry(logger) {
|
|
56
57
|
return Effect.gen(function* () {
|
|
@@ -58,7 +59,7 @@ export function makeSubscriberRegistry(logger) {
|
|
|
58
59
|
const counterRef = yield* Ref.make(0);
|
|
59
60
|
const register = (filter, handler) => Effect.gen(function* () {
|
|
60
61
|
const n = yield* Ref.updateAndGet(counterRef, (c) => c + 1);
|
|
61
|
-
const id = `sub-${n}
|
|
62
|
+
const id = SubscriptionId(`sub-${n}`);
|
|
62
63
|
const live = { id, filter, handler };
|
|
63
64
|
yield* Ref.update(subsRef, (xs) => [...xs, live]);
|
|
64
65
|
const unsubscribe = Ref.update(subsRef, (xs) => xs.filter((s) => s.id !== id));
|
|
@@ -94,26 +95,26 @@ export function makeSubscriberRegistry(logger) {
|
|
|
94
95
|
* behavior without bypassing the production dispatch path.
|
|
95
96
|
*
|
|
96
97
|
* Returns `true` iff `frame` matches every set field on `filter`:
|
|
97
|
-
* - `filter.emissionTag === frame.
|
|
98
|
-
* - `filter.conversationId === frame.
|
|
99
|
-
* - `frame.
|
|
98
|
+
* - `filter.emissionTag === frame.params.__emissionTag` (strict ===)
|
|
99
|
+
* - `filter.conversationId === frame.params.conversationId` (strict ===)
|
|
100
|
+
* - `frame.method.startsWith(filter.notificationNamePrefix)`
|
|
100
101
|
* Unset filter fields are wildcards.
|
|
101
102
|
*/
|
|
102
103
|
export function matchesFilter(filter, frame) {
|
|
103
|
-
if (filter.
|
|
104
|
-
if (!frame.
|
|
104
|
+
if (filter.notificationNamePrefix !== undefined) {
|
|
105
|
+
if (!frame.method.startsWith(filter.notificationNamePrefix))
|
|
105
106
|
return false;
|
|
106
107
|
}
|
|
107
|
-
const
|
|
108
|
-
? frame.
|
|
108
|
+
const params = isNotificationParamsRecord(frame.params)
|
|
109
|
+
? frame.params
|
|
109
110
|
: null;
|
|
110
111
|
if (filter.emissionTag !== undefined) {
|
|
111
|
-
const tag =
|
|
112
|
+
const tag = params?.["__emissionTag"];
|
|
112
113
|
if (tag !== filter.emissionTag)
|
|
113
114
|
return false;
|
|
114
115
|
}
|
|
115
116
|
if (filter.conversationId !== undefined) {
|
|
116
|
-
const cid =
|
|
117
|
+
const cid = params?.["conversationId"];
|
|
117
118
|
if (cid !== filter.conversationId)
|
|
118
119
|
return false;
|
|
119
120
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscribers.js","sourceRoot":"","sources":["../../src/runtime/subscribers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"subscribers.js","sourceRoot":"","sources":["../../src/runtime/subscribers.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,48 +16,67 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { describe, expect, it, vi } from "vitest";
|
|
18
18
|
import { Effect, Ref } from "effect";
|
|
19
|
+
import { AppSessionFailedNotificationDefinition, ConversationArchivedNotificationDefinition, agentId, appSessionId, conversationId, decodeNotification, notificationGroup, notificationFrame as makeNotificationFrame, } from "@moltzap/protocol";
|
|
19
20
|
import { makeSubscriberRegistry, matchesFilter } from "./subscribers.js";
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
const SESSION_ID = appSessionId("11111111-1111-4111-8111-111111111111");
|
|
22
|
+
const CONV_1 = conversationId("22222222-2222-4222-8222-222222222222");
|
|
23
|
+
const CONV_2 = conversationId("33333333-3333-4333-8333-333333333333");
|
|
24
|
+
const AGENT_ID = agentId("44444444-4444-4444-8444-444444444444");
|
|
25
|
+
const filterableNotification = (method, params) => ({
|
|
26
|
+
method,
|
|
27
|
+
params,
|
|
28
|
+
});
|
|
29
|
+
const decodedNotification = (definition, params) => {
|
|
30
|
+
const decoded = Effect.runSync(decodeNotification(notificationGroup, makeNotificationFrame(definition, params)));
|
|
31
|
+
return { _tag: "Notification", ...decoded };
|
|
32
|
+
};
|
|
33
|
+
const sessionFailedNotification = () => decodedNotification(AppSessionFailedNotificationDefinition, {
|
|
34
|
+
sessionId: SESSION_ID,
|
|
35
|
+
});
|
|
36
|
+
const conversationArchivedNotification = (conv) => decodedNotification(ConversationArchivedNotificationDefinition, {
|
|
37
|
+
conversationId: conv,
|
|
38
|
+
archivedAt: "2026-05-03T00:00:00Z",
|
|
39
|
+
by: AGENT_ID,
|
|
25
40
|
});
|
|
26
41
|
const noopLogger = { warn: vi.fn() };
|
|
27
42
|
describe("matchesFilter", () => {
|
|
28
43
|
it("empty filter matches every frame", () => {
|
|
29
|
-
expect(matchesFilter({},
|
|
44
|
+
expect(matchesFilter({}, filterableNotification("any", { x: 1 }))).toBe(true);
|
|
30
45
|
});
|
|
31
46
|
it("emissionTag matches on `__emissionTag` key", () => {
|
|
32
|
-
const frame =
|
|
47
|
+
const frame = filterableNotification("e", { __emissionTag: "tag-1" });
|
|
33
48
|
expect(matchesFilter({ emissionTag: "tag-1" }, frame)).toBe(true);
|
|
34
49
|
expect(matchesFilter({ emissionTag: "tag-other" }, frame)).toBe(false);
|
|
35
50
|
});
|
|
36
51
|
it("conversationId matches on `conversationId` key", () => {
|
|
37
|
-
const frame =
|
|
52
|
+
const frame = filterableNotification("e", { conversationId: "c-1" });
|
|
38
53
|
expect(matchesFilter({ conversationId: "c-1" }, frame)).toBe(true);
|
|
39
54
|
expect(matchesFilter({ conversationId: "c-2" }, frame)).toBe(false);
|
|
40
55
|
});
|
|
41
|
-
it("
|
|
42
|
-
const frame =
|
|
43
|
-
expect(matchesFilter({
|
|
44
|
-
expect(matchesFilter({
|
|
56
|
+
it("notificationNamePrefix uses startsWith", () => {
|
|
57
|
+
const frame = filterableNotification("messages/received", {});
|
|
58
|
+
expect(matchesFilter({ notificationNamePrefix: "messages/" }, frame)).toBe(true);
|
|
59
|
+
expect(matchesFilter({ notificationNamePrefix: "presence/" }, frame)).toBe(false);
|
|
45
60
|
});
|
|
46
61
|
it("AND semantics: all set fields must match", () => {
|
|
47
|
-
const frame =
|
|
62
|
+
const frame = filterableNotification("messages/received", {
|
|
48
63
|
__emissionTag: "tag-1",
|
|
49
64
|
conversationId: "c-1",
|
|
50
65
|
});
|
|
51
|
-
expect(matchesFilter({
|
|
66
|
+
expect(matchesFilter({
|
|
67
|
+
emissionTag: "tag-1",
|
|
68
|
+
conversationId: "c-1",
|
|
69
|
+
notificationNamePrefix: "m",
|
|
70
|
+
}, frame)).toBe(true);
|
|
52
71
|
// conversationId mismatch → reject even when other fields match.
|
|
53
72
|
expect(matchesFilter({ emissionTag: "tag-1", conversationId: "c-other" }, frame)).toBe(false);
|
|
54
73
|
});
|
|
55
|
-
it("non-record `
|
|
56
|
-
const stringData =
|
|
74
|
+
it("non-record `params` cannot satisfy payload-key filters", () => {
|
|
75
|
+
const stringData = filterableNotification("e", "string-payload");
|
|
57
76
|
expect(matchesFilter({ emissionTag: "x" }, stringData)).toBe(false);
|
|
58
77
|
expect(matchesFilter({ conversationId: "x" }, stringData)).toBe(false);
|
|
59
|
-
// …but
|
|
60
|
-
expect(matchesFilter({
|
|
78
|
+
// …but a notification-name-prefix filter still applies.
|
|
79
|
+
expect(matchesFilter({ notificationNamePrefix: "e" }, stringData)).toBe(true);
|
|
61
80
|
});
|
|
62
81
|
});
|
|
63
82
|
describe("SubscriberRegistry", () => {
|
|
@@ -66,7 +85,7 @@ describe("SubscriberRegistry", () => {
|
|
|
66
85
|
const order = [];
|
|
67
86
|
await Effect.runPromise(registry.register({}, () => Effect.sync(() => void order.push("a"))));
|
|
68
87
|
await Effect.runPromise(registry.register({}, () => Effect.sync(() => void order.push("b"))));
|
|
69
|
-
await Effect.runPromise(registry.dispatch(
|
|
88
|
+
await Effect.runPromise(registry.dispatch(sessionFailedNotification()));
|
|
70
89
|
expect(order).toEqual(["a", "b"]);
|
|
71
90
|
});
|
|
72
91
|
it("unsubscribe stops delivery for the next frame (OQ-3 A snapshot)", async () => {
|
|
@@ -87,9 +106,9 @@ describe("SubscriberRegistry", () => {
|
|
|
87
106
|
unsubA = handleA.unsubscribe;
|
|
88
107
|
await Effect.runPromise(registry.register({}, () => Effect.sync(() => void bCalls.push(frameIdx))));
|
|
89
108
|
frameIdx = 0;
|
|
90
|
-
await Effect.runPromise(registry.dispatch(
|
|
109
|
+
await Effect.runPromise(registry.dispatch(sessionFailedNotification()));
|
|
91
110
|
frameIdx = 1;
|
|
92
|
-
await Effect.runPromise(registry.dispatch(
|
|
111
|
+
await Effect.runPromise(registry.dispatch(sessionFailedNotification()));
|
|
93
112
|
expect(aCalls).toEqual([0]); // a saw frame 0, not frame 1.
|
|
94
113
|
expect(bCalls).toEqual([0, 1]); // b saw both — snapshot at start of frame 0 still included a; b is unaffected by a's unsub.
|
|
95
114
|
});
|
|
@@ -97,14 +116,14 @@ describe("SubscriberRegistry", () => {
|
|
|
97
116
|
const registry = await Effect.runPromise(makeSubscriberRegistry(noopLogger));
|
|
98
117
|
const seenByConv1 = [];
|
|
99
118
|
const seenByConv2 = [];
|
|
100
|
-
await Effect.runPromise(registry.register({ conversationId:
|
|
101
|
-
await Effect.runPromise(registry.register({ conversationId:
|
|
102
|
-
await Effect.runPromise(registry.dispatch(
|
|
103
|
-
await Effect.runPromise(registry.dispatch(
|
|
119
|
+
await Effect.runPromise(registry.register({ conversationId: CONV_1 }, (frame) => Effect.sync(() => void seenByConv1.push(frame))));
|
|
120
|
+
await Effect.runPromise(registry.register({ conversationId: CONV_2 }, (frame) => Effect.sync(() => void seenByConv2.push(frame))));
|
|
121
|
+
await Effect.runPromise(registry.dispatch(conversationArchivedNotification(CONV_1)));
|
|
122
|
+
await Effect.runPromise(registry.dispatch(conversationArchivedNotification(CONV_2)));
|
|
104
123
|
expect(seenByConv1).toHaveLength(1);
|
|
105
124
|
expect(seenByConv2).toHaveLength(1);
|
|
106
|
-
expect(seenByConv1[0].
|
|
107
|
-
expect(seenByConv2[0].
|
|
125
|
+
expect(seenByConv1[0].params.conversationId).toBe(CONV_1);
|
|
126
|
+
expect(seenByConv2[0].params.conversationId).toBe(CONV_2);
|
|
108
127
|
});
|
|
109
128
|
it("handler exceptions are caught + logged via the injected logger", async () => {
|
|
110
129
|
const warn = vi.fn();
|
|
@@ -114,7 +133,7 @@ describe("SubscriberRegistry", () => {
|
|
|
114
133
|
throw new Error("subscriber blew up");
|
|
115
134
|
})));
|
|
116
135
|
await Effect.runPromise(registry.register({}, () => Effect.sync(() => void otherCalls.push(1))));
|
|
117
|
-
await Effect.runPromise(registry.dispatch(
|
|
136
|
+
await Effect.runPromise(registry.dispatch(sessionFailedNotification()));
|
|
118
137
|
expect(warn).toHaveBeenCalledTimes(1);
|
|
119
138
|
expect(otherCalls).toEqual([1]); // other subscribers still fire.
|
|
120
139
|
});
|
|
@@ -126,7 +145,7 @@ describe("SubscriberRegistry", () => {
|
|
|
126
145
|
throw new Error("construction-time throw");
|
|
127
146
|
}));
|
|
128
147
|
await Effect.runPromise(registry.register({}, () => Effect.sync(() => void otherCalls.push(1))));
|
|
129
|
-
await Effect.runPromise(registry.dispatch(
|
|
148
|
+
await Effect.runPromise(registry.dispatch(sessionFailedNotification()));
|
|
130
149
|
expect(warn).toHaveBeenCalledTimes(1);
|
|
131
150
|
expect(otherCalls).toEqual([1]); // subsequent subscribers still fire.
|
|
132
151
|
});
|
|
@@ -135,7 +154,7 @@ describe("SubscriberRegistry", () => {
|
|
|
135
154
|
const calls = [];
|
|
136
155
|
await Effect.runPromise(registry.register({}, () => Effect.sync(() => void calls.push(1))));
|
|
137
156
|
await Effect.runPromise(registry.closeAll);
|
|
138
|
-
await Effect.runPromise(registry.dispatch(
|
|
157
|
+
await Effect.runPromise(registry.dispatch(sessionFailedNotification()));
|
|
139
158
|
expect(calls).toEqual([]);
|
|
140
159
|
});
|
|
141
160
|
it("Ref-make composition works: register inside an Effect.gen", async () => {
|
|
@@ -146,7 +165,7 @@ describe("SubscriberRegistry", () => {
|
|
|
146
165
|
const registry = yield* makeSubscriberRegistry(noopLogger);
|
|
147
166
|
const counter = yield* Ref.make(0);
|
|
148
167
|
yield* registry.register({}, () => Ref.update(counter, (n) => n + 1));
|
|
149
|
-
yield* registry.dispatch(
|
|
168
|
+
yield* registry.dispatch(sessionFailedNotification());
|
|
150
169
|
return yield* Ref.get(counter);
|
|
151
170
|
}));
|
|
152
171
|
expect(result).toBe(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscribers.test.js","sourceRoot":"","sources":["../../src/runtime/subscribers.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"subscribers.test.js","sourceRoot":"","sources":["../../src/runtime/subscribers.test.ts"],"names":[],"mappings":"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"}
|
package/dist/service.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type HelloOk, type AnyNotificationDefinition, type DecodedNotification, type Message, type ConversationArchivedNotification, type ConversationUnarchivedNotification, NotConnectedError, RpcServerError, RpcTimeoutError, type RpcDefinition, type ParamsOf, type ResultOf, type TSchema } from "@moltzap/protocol";
|
|
2
2
|
import { Effect } from "effect";
|
|
3
3
|
import { type RpcCallOptions, type WsClientLogger } from "./ws-client.js";
|
|
4
|
-
import { AgentNotFoundError
|
|
4
|
+
import { AgentNotFoundError } from "./runtime/errors.js";
|
|
5
5
|
import type { DispatchAdmissionDecision, DispatchAdmissionRequest } from "./channel-core.js";
|
|
6
6
|
/**
|
|
7
7
|
* Errors that can surface from the Effect-based service API. Matches the
|
|
@@ -44,20 +44,16 @@ export interface ServiceOptions {
|
|
|
44
44
|
agentKey: string;
|
|
45
45
|
logger?: WsClientLogger;
|
|
46
46
|
}
|
|
47
|
-
type
|
|
48
|
-
interface
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
type: string;
|
|
56
|
-
id: string;
|
|
57
|
-
}>;
|
|
58
|
-
}>;
|
|
59
|
-
unreadCounts?: Record<string, number>;
|
|
47
|
+
type NotificationHandler<T> = (data: T) => void;
|
|
48
|
+
interface ServiceHandlerPayloads {
|
|
49
|
+
readonly message: Message;
|
|
50
|
+
readonly rawNotification: DecodedNotification<AnyNotificationDefinition>;
|
|
51
|
+
readonly disconnect: void;
|
|
52
|
+
readonly reconnect: HelloOk;
|
|
53
|
+
readonly conversationArchived: ConversationArchivedNotification;
|
|
54
|
+
readonly conversationUnarchived: ConversationUnarchivedNotification;
|
|
60
55
|
}
|
|
56
|
+
type ServiceHandlerName = keyof ServiceHandlerPayloads;
|
|
61
57
|
/** Full message from another conversation, used by peekFullMessages(). */
|
|
62
58
|
export interface CrossConvMessage {
|
|
63
59
|
conversationId: string;
|
|
@@ -89,13 +85,8 @@ export declare class MoltZapService {
|
|
|
89
85
|
private readonly lastNotifiedRef;
|
|
90
86
|
private readonly lastReadRef;
|
|
91
87
|
private readonly archivedConversationIds;
|
|
92
|
-
private
|
|
93
|
-
private
|
|
94
|
-
private disconnectHandlers;
|
|
95
|
-
private reconnectHandlers;
|
|
96
|
-
private permissionRequiredHandlers;
|
|
97
|
-
private conversationArchivedHandlers;
|
|
98
|
-
private conversationUnarchivedHandlers;
|
|
88
|
+
private readonly handlers;
|
|
89
|
+
private readonly notificationHandlers;
|
|
99
90
|
private _ownAgentId;
|
|
100
91
|
constructor(opts: ServiceOptions);
|
|
101
92
|
get connected(): boolean;
|
|
@@ -184,28 +175,22 @@ export declare class MoltZapService {
|
|
|
184
175
|
private readCrossConvState;
|
|
185
176
|
private iterNewMessagesByConv;
|
|
186
177
|
private advanceLastNotified;
|
|
187
|
-
on(
|
|
188
|
-
|
|
189
|
-
on(event: "disconnect", handler: EventHandler<void>): void;
|
|
190
|
-
on(event: "reconnect", handler: EventHandler<HelloOk>): void;
|
|
191
|
-
on(event: "permissionRequired", handler: EventHandler<PermissionsRequiredEvent>): void;
|
|
192
|
-
on(event: "conversationArchived", handler: EventHandler<ConversationArchivedEvent>): void;
|
|
193
|
-
on(event: "conversationUnarchived", handler: EventHandler<ConversationUnarchivedEvent>): void;
|
|
194
|
-
sendRpc(method: string, params?: unknown, opts?: RpcCallOptions): Effect.Effect<unknown, ServiceRpcError>;
|
|
195
|
-
grantPermission(params: {
|
|
196
|
-
sessionId: string;
|
|
197
|
-
agentId: string;
|
|
198
|
-
resource: string;
|
|
199
|
-
access: string[];
|
|
200
|
-
}): Effect.Effect<void, ServiceRpcError>;
|
|
178
|
+
on<K extends ServiceHandlerName>(notification: K, handler: NotificationHandler<ServiceHandlerPayloads[K]>): void;
|
|
179
|
+
sendRpc<D extends RpcDefinition<string, TSchema, TSchema>>(definition: D, params: ParamsOf<D>, opts?: RpcCallOptions): Effect.Effect<ResultOf<D>, ServiceRpcError>;
|
|
201
180
|
/**
|
|
202
181
|
* Fetch full conversation details (including participants) via RPC and merge
|
|
203
|
-
* into the local cache. Called on ConversationCreated
|
|
204
|
-
*
|
|
182
|
+
* into the local cache. Called on ConversationCreated notifications because
|
|
183
|
+
* the notification schema omits the participants list — see
|
|
184
|
+
* protocol/notifications.ts.
|
|
205
185
|
*/
|
|
206
186
|
private refreshConversationParticipants;
|
|
207
187
|
private populateFromHello;
|
|
208
|
-
|
|
188
|
+
protected handleNotification(notification: DecodedNotification<AnyNotificationDefinition>): void;
|
|
189
|
+
private createNotificationHandlers;
|
|
190
|
+
private handleMessageReceivedNotification;
|
|
191
|
+
private handleConversationCreatedNotification;
|
|
192
|
+
private handleConversationUpdatedNotification;
|
|
193
|
+
private upsertConversationNotification;
|
|
209
194
|
private markConversationArchived;
|
|
210
195
|
private storeMessage;
|
|
211
196
|
}
|
package/dist/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|