@moltzap/client 2026.519.0 → 2026.519.1
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/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/notification/__tests__/filter-equivalence.test.d.ts +2 -0
- package/dist/notification/__tests__/filter-equivalence.test.d.ts.map +1 -0
- package/dist/notification/__tests__/filter-equivalence.test.js +123 -0
- package/dist/notification/__tests__/filter-equivalence.test.js.map +1 -0
- package/dist/notification/__tests__/snapshot-semantics.test.d.ts +2 -0
- package/dist/notification/__tests__/snapshot-semantics.test.d.ts.map +1 -0
- package/dist/notification/__tests__/snapshot-semantics.test.js +261 -0
- package/dist/notification/__tests__/snapshot-semantics.test.js.map +1 -0
- package/dist/notification/__tests__/snapshot-semantics.types-check.d.ts +3 -0
- package/dist/notification/__tests__/snapshot-semantics.types-check.d.ts.map +1 -0
- package/dist/notification/__tests__/snapshot-semantics.types-check.js +62 -0
- package/dist/notification/__tests__/snapshot-semantics.types-check.js.map +1 -0
- package/dist/notification/errors.d.ts +27 -0
- package/dist/notification/errors.d.ts.map +1 -0
- package/dist/notification/errors.js +24 -0
- package/dist/notification/errors.js.map +1 -0
- package/dist/notification/stream.d.ts +84 -0
- package/dist/notification/stream.d.ts.map +1 -0
- package/dist/notification/stream.js +106 -0
- package/dist/notification/stream.js.map +1 -0
- package/dist/runtime/index.d.ts +3 -4
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +3 -3
- package/dist/runtime/service-teardown.d.ts +5 -0
- package/dist/runtime/service-teardown.d.ts.map +1 -0
- package/dist/runtime/service-teardown.js +36 -0
- package/dist/runtime/service-teardown.js.map +1 -0
- package/dist/runtime/service-teardown.test.d.ts +2 -0
- package/dist/runtime/service-teardown.test.d.ts.map +1 -0
- package/dist/runtime/service-teardown.test.js +80 -0
- package/dist/runtime/service-teardown.test.js.map +1 -0
- package/dist/runtime/subscribers.d.ts +74 -136
- package/dist/runtime/subscribers.d.ts.map +1 -1
- package/dist/runtime/subscribers.js +187 -93
- package/dist/runtime/subscribers.js.map +1 -1
- package/dist/service.d.ts +10 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +45 -12
- package/dist/service.js.map +1 -1
- package/dist/test-utils/conformance-adapter.d.ts +6 -16
- package/dist/test-utils/conformance-adapter.d.ts.map +1 -1
- package/dist/test-utils/conformance-adapter.js +100 -59
- package/dist/test-utils/conformance-adapter.js.map +1 -1
- package/dist/ws-client-test-support.d.ts +1 -1
- package/dist/ws-client-test-support.d.ts.map +1 -1
- package/dist/ws-client-test-support.js +24 -3
- package/dist/ws-client-test-support.js.map +1 -1
- package/dist/ws-client.d.ts +52 -54
- package/dist/ws-client.d.ts.map +1 -1
- package/dist/ws-client.js +40 -168
- package/dist/ws-client.js.map +1 -1
- package/package.json +3 -3
- package/dist/runtime/subscribers.test.d.ts +0 -2
- package/dist/runtime/subscribers.test.d.ts.map +0 -1
- package/dist/runtime/subscribers.test.js +0 -193
- package/dist/runtime/subscribers.test.js.map +0 -1
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for the per-subscription event registry.
|
|
3
|
-
*
|
|
4
|
-
* Spec #222 §5.3 (C4 + the `RealClientEventSubscriber.subscribe` filter
|
|
5
|
-
* stub) requires:
|
|
6
|
-
* - Every set filter field narrows delivery (AND semantics).
|
|
7
|
-
* - Subscriptions fire in registration order.
|
|
8
|
-
* - Unsubscribe-during-dispatch is next-frame effective (OQ-3 A
|
|
9
|
-
* snapshot semantics).
|
|
10
|
-
* - Handler exceptions are caught + logged, not propagated.
|
|
11
|
-
*
|
|
12
|
-
* Each scenario gets a dedicated test so a mutation that bypasses the
|
|
13
|
-
* filter (e.g. force `matchesFilter` to always return `true`) trips the
|
|
14
|
-
* filter-narrows tests but leaves order tests passing — the tests
|
|
15
|
-
* discriminate.
|
|
16
|
-
*/
|
|
17
|
-
import * as fc from "fast-check";
|
|
18
|
-
import { expect, it } from "vitest";
|
|
19
|
-
import { Effect, Ref } from "effect";
|
|
20
|
-
import { ConversationArchivedNotificationDefinition, } from "@moltzap/protocol";
|
|
21
|
-
import { agentId, conversationId, taskId, TaskFailedNotificationDefinition, } from "@moltzap/protocol/testing";
|
|
22
|
-
import { makeSubscriberRegistry, matchesFilter } from "./subscribers.js";
|
|
23
|
-
const TASK_ID = taskId("11111111-1111-4111-8111-111111111111");
|
|
24
|
-
const CONV_1 = conversationId("22222222-2222-4222-8222-222222222222");
|
|
25
|
-
const CONV_2 = conversationId("33333333-3333-4333-8333-333333333333");
|
|
26
|
-
const AGENT_ID = agentId("44444444-4444-4444-8444-444444444444");
|
|
27
|
-
const PROPERTY_RUNS = 25;
|
|
28
|
-
const SUBSCRIBER_DEFECT_MESSAGE = "subscriber blew up";
|
|
29
|
-
const CONSTRUCTION_THROW_MESSAGE = "construction-time throw";
|
|
30
|
-
function pushValue(values, value) {
|
|
31
|
-
return Effect.sync(() => {
|
|
32
|
-
values.push(value);
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
function recordAndMaybeUnsubscribe(calls, frameIdx, unsubscribe) {
|
|
36
|
-
return Effect.gen(function* () {
|
|
37
|
-
calls.push(frameIdx);
|
|
38
|
-
if (frameIdx === 0 && unsubscribe !== null) {
|
|
39
|
-
yield* unsubscribe;
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
function subscriberDefect() {
|
|
44
|
-
return Effect.die(new Error(SUBSCRIBER_DEFECT_MESSAGE));
|
|
45
|
-
}
|
|
46
|
-
function constructionThrow() {
|
|
47
|
-
throw new Error(CONSTRUCTION_THROW_MESSAGE);
|
|
48
|
-
}
|
|
49
|
-
function increment(value) {
|
|
50
|
-
return value + 1;
|
|
51
|
-
}
|
|
52
|
-
const filterableNotification = (method, params) => ({
|
|
53
|
-
method,
|
|
54
|
-
params,
|
|
55
|
-
});
|
|
56
|
-
const decodedNotification = (definition, params) => {
|
|
57
|
-
// Construct a DecodedNotification<D> directly from the typed
|
|
58
|
-
// descriptor + params — bypassing the wire decoder is intentional
|
|
59
|
-
// for test fixtures so the result type stays narrow to D rather than
|
|
60
|
-
// collapsing to the group's union.
|
|
61
|
-
const frame = definition.encode(params);
|
|
62
|
-
return {
|
|
63
|
-
_tag: "Notification",
|
|
64
|
-
jsonrpc: frame.jsonrpc,
|
|
65
|
-
definition,
|
|
66
|
-
method: definition.name,
|
|
67
|
-
params,
|
|
68
|
-
};
|
|
69
|
-
};
|
|
70
|
-
const taskFailedNotification = () => decodedNotification(TaskFailedNotificationDefinition, {
|
|
71
|
-
taskId: TASK_ID,
|
|
72
|
-
});
|
|
73
|
-
const conversationArchivedNotification = (conv) => decodedNotification(ConversationArchivedNotificationDefinition, {
|
|
74
|
-
conversationId: conv,
|
|
75
|
-
archivedAt: "2026-05-03T00:00:00Z",
|
|
76
|
-
by: AGENT_ID,
|
|
77
|
-
});
|
|
78
|
-
it("property: notificationNamePrefix follows string startsWith", () => {
|
|
79
|
-
expect.hasAssertions();
|
|
80
|
-
fc.assert(fc.property(fc.string(), fc.string(), (method, prefix) => {
|
|
81
|
-
expect(matchesFilter({ notificationNamePrefix: prefix }, filterableNotification(method, {}))).toBe(method.startsWith(prefix));
|
|
82
|
-
}), { numRuns: PROPERTY_RUNS });
|
|
83
|
-
});
|
|
84
|
-
it("empty filter matches every frame", () => {
|
|
85
|
-
expect(matchesFilter({}, filterableNotification("any", { x: 1 }))).toBe(true);
|
|
86
|
-
});
|
|
87
|
-
it("emissionTag matches on `__emissionTag` key", () => {
|
|
88
|
-
const frame = filterableNotification("e", { __emissionTag: "tag-1" });
|
|
89
|
-
expect(matchesFilter({ emissionTag: "tag-1" }, frame)).toBe(true);
|
|
90
|
-
expect(matchesFilter({ emissionTag: "tag-other" }, frame)).toBe(false);
|
|
91
|
-
});
|
|
92
|
-
it("conversationId matches on `conversationId` key", () => {
|
|
93
|
-
const frame = filterableNotification("e", { conversationId: "c-1" });
|
|
94
|
-
expect(matchesFilter({ conversationId: "c-1" }, frame)).toBe(true);
|
|
95
|
-
expect(matchesFilter({ conversationId: "c-2" }, frame)).toBe(false);
|
|
96
|
-
});
|
|
97
|
-
it("notificationNamePrefix uses startsWith", () => {
|
|
98
|
-
const frame = filterableNotification("messages/received", {});
|
|
99
|
-
expect(matchesFilter({ notificationNamePrefix: "messages/" }, frame)).toBe(true);
|
|
100
|
-
expect(matchesFilter({ notificationNamePrefix: "presence/" }, frame)).toBe(false);
|
|
101
|
-
});
|
|
102
|
-
it("AND semantics: all set fields must match", () => {
|
|
103
|
-
const frame = filterableNotification("messages/received", {
|
|
104
|
-
__emissionTag: "tag-1",
|
|
105
|
-
conversationId: "c-1",
|
|
106
|
-
});
|
|
107
|
-
expect(matchesFilter({
|
|
108
|
-
emissionTag: "tag-1",
|
|
109
|
-
conversationId: "c-1",
|
|
110
|
-
notificationNamePrefix: "m",
|
|
111
|
-
}, frame)).toBe(true);
|
|
112
|
-
expect(matchesFilter({ emissionTag: "tag-1", conversationId: "c-other" }, frame)).toBe(false);
|
|
113
|
-
});
|
|
114
|
-
it("non-record `params` cannot satisfy payload-key filters", () => {
|
|
115
|
-
const stringData = filterableNotification("e", "string-payload");
|
|
116
|
-
expect(matchesFilter({ emissionTag: "x" }, stringData)).toBe(false);
|
|
117
|
-
expect(matchesFilter({ conversationId: "x" }, stringData)).toBe(false);
|
|
118
|
-
expect(matchesFilter({ notificationNamePrefix: "e" }, stringData)).toBe(true);
|
|
119
|
-
});
|
|
120
|
-
it("dispatches in registration order", () => Effect.runPromise(Effect.gen(function* () {
|
|
121
|
-
const registry = yield* makeSubscriberRegistry();
|
|
122
|
-
const order = [];
|
|
123
|
-
yield* registry.register({}, () => pushValue(order, "a"));
|
|
124
|
-
yield* registry.register({}, () => pushValue(order, "b"));
|
|
125
|
-
yield* registry.dispatch(taskFailedNotification());
|
|
126
|
-
expect(order).toEqual(["a", "b"]);
|
|
127
|
-
})));
|
|
128
|
-
it("unsubscribe stops delivery for the next frame", () => Effect.runPromise(Effect.gen(function* () {
|
|
129
|
-
const registry = yield* makeSubscriberRegistry();
|
|
130
|
-
const aCalls = [];
|
|
131
|
-
const bCalls = [];
|
|
132
|
-
let frameIdx = 0;
|
|
133
|
-
let unsubA = null;
|
|
134
|
-
const handleA = yield* registry.register({}, () => recordAndMaybeUnsubscribe(aCalls, frameIdx, unsubA));
|
|
135
|
-
unsubA = handleA.unsubscribe;
|
|
136
|
-
yield* registry.register({}, () => pushValue(bCalls, frameIdx));
|
|
137
|
-
frameIdx = 0;
|
|
138
|
-
yield* registry.dispatch(taskFailedNotification());
|
|
139
|
-
frameIdx = 1;
|
|
140
|
-
yield* registry.dispatch(taskFailedNotification());
|
|
141
|
-
expect(aCalls).toEqual([0]); // a saw frame 0, not frame 1.
|
|
142
|
-
expect(bCalls).toEqual([0, 1]); // b saw both — snapshot at start of frame 0 still included a; b is unaffected by a's unsub.
|
|
143
|
-
})));
|
|
144
|
-
it("filters narrow delivery", () => Effect.runPromise(Effect.gen(function* () {
|
|
145
|
-
const registry = yield* makeSubscriberRegistry();
|
|
146
|
-
const seenByConv1 = [];
|
|
147
|
-
const seenByConv2 = [];
|
|
148
|
-
yield* registry.register({ conversationId: CONV_1 }, (frame) => pushValue(seenByConv1, frame));
|
|
149
|
-
yield* registry.register({ conversationId: CONV_2 }, (frame) => pushValue(seenByConv2, frame));
|
|
150
|
-
yield* registry.dispatch(conversationArchivedNotification(CONV_1));
|
|
151
|
-
yield* registry.dispatch(conversationArchivedNotification(CONV_2));
|
|
152
|
-
expect(seenByConv1).toHaveLength(1);
|
|
153
|
-
expect(seenByConv2).toHaveLength(1);
|
|
154
|
-
expect(seenByConv1[0].params.conversationId).toBe(CONV_1);
|
|
155
|
-
expect(seenByConv2[0].params.conversationId).toBe(CONV_2);
|
|
156
|
-
})));
|
|
157
|
-
it("handler exceptions are caught and subsequent subscribers still run", () => Effect.runPromise(Effect.gen(function* () {
|
|
158
|
-
const registry = yield* makeSubscriberRegistry();
|
|
159
|
-
const otherCalls = [];
|
|
160
|
-
yield* registry.register({}, subscriberDefect);
|
|
161
|
-
yield* registry.register({}, () => pushValue(otherCalls, 1));
|
|
162
|
-
yield* registry.dispatch(taskFailedNotification());
|
|
163
|
-
expect(otherCalls).toEqual([1]); // other subscribers still fire.
|
|
164
|
-
})));
|
|
165
|
-
it("construction-time handler throw is caught", () => Effect.runPromise(Effect.gen(function* () {
|
|
166
|
-
const registry = yield* makeSubscriberRegistry();
|
|
167
|
-
const otherCalls = [];
|
|
168
|
-
yield* registry.register({}, constructionThrow);
|
|
169
|
-
yield* registry.register({}, () => pushValue(otherCalls, 1));
|
|
170
|
-
yield* registry.dispatch(taskFailedNotification());
|
|
171
|
-
expect(otherCalls).toEqual([1]); // subsequent subscribers still fire.
|
|
172
|
-
})));
|
|
173
|
-
it("closeAll drops every subscription", () => Effect.runPromise(Effect.gen(function* () {
|
|
174
|
-
const registry = yield* makeSubscriberRegistry();
|
|
175
|
-
const calls = [];
|
|
176
|
-
yield* registry.register({}, () => pushValue(calls, 1));
|
|
177
|
-
yield* registry.closeAll;
|
|
178
|
-
yield* registry.dispatch(taskFailedNotification());
|
|
179
|
-
expect(calls).toEqual([]);
|
|
180
|
-
})));
|
|
181
|
-
it("Ref-make composition works inside an Effect.gen", () => Effect.runPromise(
|
|
182
|
-
// Smoke test that the Effect surface composes; the registry never
|
|
183
|
-
// resolves with `never` failure tag, so this can't catch
|
|
184
|
-
// typechecker drift, but it does pin behaviour.
|
|
185
|
-
Effect.gen(function* () {
|
|
186
|
-
const registry = yield* makeSubscriberRegistry();
|
|
187
|
-
const counter = yield* Ref.make(0);
|
|
188
|
-
yield* registry.register({}, () => Ref.update(counter, increment));
|
|
189
|
-
yield* registry.dispatch(taskFailedNotification());
|
|
190
|
-
const result = yield* Ref.get(counter);
|
|
191
|
-
expect(result).toBe(1);
|
|
192
|
-
})));
|
|
193
|
-
//# sourceMappingURL=subscribers.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"subscribers.test.js","sourceRoot":"","sources":["../../src/runtime/subscribers.test.ts"],"names":[],"mappings":"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"}
|