@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,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Unit tests for the partitioned
|
|
2
|
+
* Unit tests for the partitioned appCallback dispatcher.
|
|
3
3
|
*
|
|
4
4
|
* Spec: moltzap#356 §8 (test plan, file 3).
|
|
5
5
|
*
|
|
@@ -9,25 +9,9 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { describe, it, expect } from "vitest";
|
|
11
11
|
import { Deferred, Effect, Exit, Ref, Scope } from "effect";
|
|
12
|
-
import { DEFAULT_PARTITIONED_DISPATCHER_CONFIG, makePartitionedDispatcher, } from "../
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const CONV_Y = "conv-Y";
|
|
16
|
-
const reqBeforeDispatch = (id, sessionId = SESSION_A, conv = CONV_X) => ({
|
|
17
|
-
id,
|
|
18
|
-
method: "apps/onBeforeDispatch",
|
|
19
|
-
params: { sessionId, conversationId: conv },
|
|
20
|
-
});
|
|
21
|
-
const reqBeforeMessageDelivery = (id, sessionId = SESSION_A, conv = CONV_X) => ({
|
|
22
|
-
id,
|
|
23
|
-
method: "apps/onBeforeMessageDelivery",
|
|
24
|
-
params: { sessionId, conversationId: conv },
|
|
25
|
-
});
|
|
26
|
-
const reqLifecycle = (id, method = "apps/onJoin", sessionId = SESSION_A) => ({
|
|
27
|
-
id,
|
|
28
|
-
method,
|
|
29
|
-
params: { sessionId },
|
|
30
|
-
});
|
|
12
|
+
import { DEFAULT_PARTITIONED_DISPATCHER_CONFIG, makePartitionedDispatcher, } from "../app-callback-partitioned-dispatcher.js";
|
|
13
|
+
import { AppsOnBeforeDispatch, AppsOnBeforeMessageDelivery, } from "@moltzap/protocol";
|
|
14
|
+
import { beforeDispatch, beforeMessageDelivery, conversationIdForIndex, CONV_X, CONV_Y, CONV_Z, onJoin, SESSION_A, } from "./app-callback-test-requests.js";
|
|
31
15
|
/** Drive a body under a fresh CloseableScope; close on exit. */
|
|
32
16
|
function withScope(body) {
|
|
33
17
|
return Effect.gen(function* () {
|
|
@@ -52,9 +36,9 @@ describe("makePartitionedDispatcher — routing", () => {
|
|
|
52
36
|
}),
|
|
53
37
|
scope,
|
|
54
38
|
});
|
|
55
|
-
yield* dispatcher.offer(
|
|
56
|
-
yield* dispatcher.offer(
|
|
57
|
-
yield* dispatcher.offer(
|
|
39
|
+
yield* dispatcher.offer(beforeDispatch("rpc-1"));
|
|
40
|
+
yield* dispatcher.offer(beforeDispatch("rpc-2"));
|
|
41
|
+
yield* dispatcher.offer(beforeDispatch("rpc-3"));
|
|
58
42
|
yield* Deferred.await(allDone);
|
|
59
43
|
return yield* Ref.get(order);
|
|
60
44
|
})));
|
|
@@ -80,8 +64,8 @@ describe("makePartitionedDispatcher — routing", () => {
|
|
|
80
64
|
handle,
|
|
81
65
|
scope,
|
|
82
66
|
});
|
|
83
|
-
yield* dispatcher.offer(
|
|
84
|
-
yield* dispatcher.offer(
|
|
67
|
+
yield* dispatcher.offer(beforeDispatch("rpc-A-park", SESSION_A, CONV_X));
|
|
68
|
+
yield* dispatcher.offer(beforeDispatch("rpc-B-go", SESSION_A, CONV_Y));
|
|
85
69
|
// bDone fires only if rpc-B ran without being blocked by
|
|
86
70
|
// rpc-A's parked Deferred.
|
|
87
71
|
yield* Deferred.await(bDone);
|
|
@@ -92,23 +76,6 @@ describe("makePartitionedDispatcher — routing", () => {
|
|
|
92
76
|
})));
|
|
93
77
|
expect(result).toBe("concurrent");
|
|
94
78
|
});
|
|
95
|
-
it("offer with malformed params returns MalformedPartitionKeyError", async () => {
|
|
96
|
-
const verdict = await Effect.runPromise(withScope((scope) => Effect.gen(function* () {
|
|
97
|
-
const dispatcher = yield* makePartitionedDispatcher({
|
|
98
|
-
handle: () => Effect.void,
|
|
99
|
-
scope,
|
|
100
|
-
});
|
|
101
|
-
return yield* Effect.either(dispatcher.offer({
|
|
102
|
-
id: "rpc-x",
|
|
103
|
-
method: "apps/onBeforeDispatch",
|
|
104
|
-
params: { /* sessionId missing */ conversationId: CONV_X },
|
|
105
|
-
}));
|
|
106
|
-
})));
|
|
107
|
-
expect(verdict._tag).toBe("Left");
|
|
108
|
-
if (verdict._tag === "Left") {
|
|
109
|
-
expect(verdict.left._tag).toBe("MalformedPartitionKeyError");
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
79
|
});
|
|
113
80
|
describe("makePartitionedDispatcher — soft cap", () => {
|
|
114
81
|
it("allocates up to maxPartitions partitions", async () => {
|
|
@@ -122,7 +89,7 @@ describe("makePartitionedDispatcher — soft cap", () => {
|
|
|
122
89
|
// Distinct conversationIds → distinct keys → distinct
|
|
123
90
|
// partitions, all parked on `release`.
|
|
124
91
|
for (let i = 0; i < 4; i++) {
|
|
125
|
-
yield* dispatcher.offer(
|
|
92
|
+
yield* dispatcher.offer(beforeDispatch(`rpc-${i}`, SESSION_A, conversationIdForIndex(i)));
|
|
126
93
|
}
|
|
127
94
|
const stats = yield* dispatcher.stats;
|
|
128
95
|
yield* Deferred.succeed(release, undefined);
|
|
@@ -138,10 +105,10 @@ describe("makePartitionedDispatcher — soft cap", () => {
|
|
|
138
105
|
scope,
|
|
139
106
|
config: { maxPartitions: 2 },
|
|
140
107
|
});
|
|
141
|
-
yield* dispatcher.offer(
|
|
142
|
-
yield* dispatcher.offer(
|
|
108
|
+
yield* dispatcher.offer(beforeDispatch("rpc-1", SESSION_A, CONV_X));
|
|
109
|
+
yield* dispatcher.offer(beforeDispatch("rpc-2", SESSION_A, CONV_Y));
|
|
143
110
|
// Third distinct key → should fail with PartitionLimitError.
|
|
144
|
-
const overflow = yield* Effect.either(dispatcher.offer(
|
|
111
|
+
const overflow = yield* Effect.either(dispatcher.offer(beforeDispatch("rpc-3", SESSION_A, CONV_Z)));
|
|
145
112
|
yield* Deferred.succeed(release, undefined);
|
|
146
113
|
return overflow;
|
|
147
114
|
})));
|
|
@@ -160,7 +127,7 @@ describe("makePartitionedDispatcher — backpressure", () => {
|
|
|
160
127
|
const bDone = yield* Deferred.make();
|
|
161
128
|
const dispatcher = yield* makePartitionedDispatcher({
|
|
162
129
|
handle: (req) => Effect.gen(function* () {
|
|
163
|
-
if (req.
|
|
130
|
+
if (req.definition.name === AppsOnBeforeDispatch.name) {
|
|
164
131
|
yield* Deferred.await(releaseA);
|
|
165
132
|
}
|
|
166
133
|
else if (req.id === "rpc-B-go") {
|
|
@@ -171,22 +138,22 @@ describe("makePartitionedDispatcher — backpressure", () => {
|
|
|
171
138
|
config: { partitionQueueCapacity: 1 },
|
|
172
139
|
});
|
|
173
140
|
// Start partition A; first offer goes into the handler.
|
|
174
|
-
yield* dispatcher.offer(
|
|
141
|
+
yield* dispatcher.offer(beforeDispatch("rpc-A-1", SESSION_A, CONV_X));
|
|
175
142
|
// Wait until the handler has actually taken rpc-A-1 off the
|
|
176
143
|
// queue (queue size 0). Then fill the queue with rpc-A-2 so
|
|
177
144
|
// a third offer to A would fail.
|
|
178
145
|
for (let i = 0; i < 200; i++) {
|
|
179
146
|
const stats = yield* dispatcher.stats;
|
|
180
|
-
const partA = stats.partitions.find((p) => p.key.includes(
|
|
147
|
+
const partA = stats.partitions.find((p) => p.key.includes(AppsOnBeforeDispatch.name));
|
|
181
148
|
if (partA && partA.queueSize === 0)
|
|
182
149
|
break;
|
|
183
150
|
yield* Effect.yieldNow();
|
|
184
151
|
}
|
|
185
|
-
yield* dispatcher.offer(
|
|
152
|
+
yield* dispatcher.offer(beforeDispatch("rpc-A-2", SESSION_A, CONV_X));
|
|
186
153
|
// Partition A is now at capacity. A third offer to A would
|
|
187
154
|
// fail. Meanwhile a different-key offer (partition B) must
|
|
188
155
|
// still run.
|
|
189
|
-
yield* dispatcher.offer(
|
|
156
|
+
yield* dispatcher.offer(beforeMessageDelivery("rpc-B-go", SESSION_A, CONV_X));
|
|
190
157
|
yield* Deferred.await(bDone);
|
|
191
158
|
yield* Deferred.succeed(releaseA, undefined);
|
|
192
159
|
return "B-ran";
|
|
@@ -203,7 +170,7 @@ describe("makePartitionedDispatcher — backpressure", () => {
|
|
|
203
170
|
scope,
|
|
204
171
|
config: { partitionQueueCapacity: 1 },
|
|
205
172
|
});
|
|
206
|
-
yield* dispatcher.offer(
|
|
173
|
+
yield* dispatcher.offer(beforeDispatch("rpc-1", SESSION_A, CONV_X));
|
|
207
174
|
// Wait for the handler to take rpc-1 off the queue.
|
|
208
175
|
for (let i = 0; i < 200; i++) {
|
|
209
176
|
const stats = yield* dispatcher.stats;
|
|
@@ -212,8 +179,8 @@ describe("makePartitionedDispatcher — backpressure", () => {
|
|
|
212
179
|
break;
|
|
213
180
|
yield* Effect.yieldNow();
|
|
214
181
|
}
|
|
215
|
-
yield* dispatcher.offer(
|
|
216
|
-
const overflow = yield* Effect.either(dispatcher.offer(
|
|
182
|
+
yield* dispatcher.offer(beforeDispatch("rpc-2", SESSION_A, CONV_X));
|
|
183
|
+
const overflow = yield* Effect.either(dispatcher.offer(beforeDispatch("rpc-3", SESSION_A, CONV_X)));
|
|
217
184
|
yield* Deferred.succeed(release, undefined);
|
|
218
185
|
return overflow;
|
|
219
186
|
})));
|
|
@@ -245,12 +212,12 @@ describe("makePartitionedDispatcher — deadlock fix (D10 reproducer at dispatch
|
|
|
245
212
|
const deliveryDone = yield* Deferred.make();
|
|
246
213
|
const dispatcher = yield* makePartitionedDispatcher({
|
|
247
214
|
handle: (req) => Effect.gen(function* () {
|
|
248
|
-
if (req.
|
|
215
|
+
if (req.definition.name === AppsOnBeforeDispatch.name) {
|
|
249
216
|
// Park.
|
|
250
217
|
yield* Deferred.await(releaseDispatch);
|
|
251
218
|
yield* Deferred.succeed(dispatchDone, undefined);
|
|
252
219
|
}
|
|
253
|
-
else if (req.
|
|
220
|
+
else if (req.definition.name === AppsOnBeforeMessageDelivery.name) {
|
|
254
221
|
// The lease-release hook in arena's pattern. Run
|
|
255
222
|
// to completion and signal the dispatch path to
|
|
256
223
|
// resume.
|
|
@@ -261,9 +228,9 @@ describe("makePartitionedDispatcher — deadlock fix (D10 reproducer at dispatch
|
|
|
261
228
|
scope,
|
|
262
229
|
});
|
|
263
230
|
// Step 1: park dispatch handler.
|
|
264
|
-
yield* dispatcher.offer(
|
|
231
|
+
yield* dispatcher.offer(beforeDispatch("rpc-dispatch-1", SESSION_A, CONV_X));
|
|
265
232
|
// Step 2: send delivery handler for the SAME conversation.
|
|
266
|
-
yield* dispatcher.offer(
|
|
233
|
+
yield* dispatcher.offer(beforeMessageDelivery("rpc-delivery-1", SESSION_A, CONV_X));
|
|
267
234
|
// Both must complete. With pre-#356 single-fiber
|
|
268
235
|
// dispatch, this hangs forever (the test's `runPromise`
|
|
269
236
|
// would never resolve — vitest's `testTimeout` would
|
|
@@ -290,7 +257,7 @@ describe("makePartitionedDispatcher — idle reaper", () => {
|
|
|
290
257
|
idleReaperIntervalMs: 10,
|
|
291
258
|
},
|
|
292
259
|
});
|
|
293
|
-
yield* dispatcher.offer(
|
|
260
|
+
yield* dispatcher.offer(beforeDispatch("rpc-1", SESSION_A, CONV_X));
|
|
294
261
|
// Wait for the handler to finish so the partition becomes
|
|
295
262
|
// Idle.
|
|
296
263
|
for (let i = 0; i < 200; i++) {
|
|
@@ -332,7 +299,7 @@ describe("makePartitionedDispatcher — idle reaper", () => {
|
|
|
332
299
|
idleReaperIntervalMs: 10,
|
|
333
300
|
},
|
|
334
301
|
});
|
|
335
|
-
yield* dispatcher.offer(
|
|
302
|
+
yield* dispatcher.offer(beforeDispatch("rpc-busy", SESSION_A, CONV_X));
|
|
336
303
|
// Bump clock past TTL while handler is still parked. Reaper
|
|
337
304
|
// sees `idleSince._tag === "Busy"` and skips reclamation.
|
|
338
305
|
yield* Ref.set(fakeNow, 10_000);
|
|
@@ -354,9 +321,9 @@ describe("makePartitionedDispatcher — scope teardown", () => {
|
|
|
354
321
|
handle: () => Deferred.await(release),
|
|
355
322
|
scope,
|
|
356
323
|
});
|
|
357
|
-
yield* dispatcher.offer(
|
|
358
|
-
yield* dispatcher.offer(
|
|
359
|
-
yield* dispatcher.offer(
|
|
324
|
+
yield* dispatcher.offer(beforeDispatch("rpc-1"));
|
|
325
|
+
yield* dispatcher.offer(beforeMessageDelivery("rpc-2"));
|
|
326
|
+
yield* dispatcher.offer(onJoin("rpc-3"));
|
|
360
327
|
// Close while every handler is parked. Must not hang.
|
|
361
328
|
yield* Scope.close(scope, Exit.void);
|
|
362
329
|
// Release any awaiters (no-op if scope close already
|
|
@@ -391,7 +358,7 @@ describe("makePartitionedDispatcher — reaper releases per-worker scopes", () =
|
|
|
391
358
|
// the count would still be 2N (the lingering fiber never
|
|
392
359
|
// gets new items because the map points to a fresh worker)
|
|
393
360
|
// — so this is not a perfect distinguisher of leaked-vs-not,
|
|
394
|
-
// but combined with `
|
|
361
|
+
// but combined with `app-callback-partition-worker.test.ts > "offer
|
|
395
362
|
// after Scope close fails with PartitionQueueFullError"`,
|
|
396
363
|
// we cover both the per-worker-scope contract and the
|
|
397
364
|
// reaper's use of it.
|
|
@@ -418,7 +385,7 @@ describe("makePartitionedDispatcher — reaper releases per-worker scopes", () =
|
|
|
418
385
|
});
|
|
419
386
|
// Spawn N partitions across N distinct conv keys.
|
|
420
387
|
for (let i = 0; i < N; i++) {
|
|
421
|
-
yield* dispatcher.offer(
|
|
388
|
+
yield* dispatcher.offer(beforeDispatch(`rpc-${i}`, SESSION_A, conversationIdForIndex(i)));
|
|
422
389
|
}
|
|
423
390
|
// Wait until every worker is Idle (handler returned).
|
|
424
391
|
for (let attempt = 0; attempt < 200; attempt++) {
|
|
@@ -449,7 +416,7 @@ describe("makePartitionedDispatcher — reaper releases per-worker scopes", () =
|
|
|
449
416
|
// is processing — not a stale reference returning an
|
|
450
417
|
// already-shutdown queue).
|
|
451
418
|
for (let i = 0; i < N; i++) {
|
|
452
|
-
yield* dispatcher.offer(
|
|
419
|
+
yield* dispatcher.offer(beforeDispatch(`rpc-fresh-${i}`, SESSION_A, conversationIdForIndex(i + N)));
|
|
453
420
|
}
|
|
454
421
|
// Wait for the fresh handlers to all run.
|
|
455
422
|
for (let attempt = 0; attempt < 200; attempt++) {
|
|
@@ -506,7 +473,7 @@ describe("makePartitionedDispatcher — reaper releases per-worker scopes", () =
|
|
|
506
473
|
const outcomes = [];
|
|
507
474
|
for (let i = 0; i < cycles; i++) {
|
|
508
475
|
yield* Ref.set(fakeNow, 1000 * i);
|
|
509
|
-
const result = yield* Effect.either(dispatcher.offer(
|
|
476
|
+
const result = yield* Effect.either(dispatcher.offer(beforeDispatch(`rpc-cycle-${i}`, SESSION_A, CONV_Z)));
|
|
510
477
|
outcomes.push(result._tag === "Right" ? "ok" : "rejected");
|
|
511
478
|
// Yield so the reaper has a chance to run between cycles.
|
|
512
479
|
yield* Effect.yieldNow();
|
|
@@ -551,7 +518,7 @@ describe("makePartitionedDispatcher — runSync(close()) contract (regression of
|
|
|
551
518
|
handle: () => Effect.void,
|
|
552
519
|
scope,
|
|
553
520
|
});
|
|
554
|
-
yield* dispatcher.offer(
|
|
521
|
+
yield* dispatcher.offer(beforeDispatch("rpc-1"));
|
|
555
522
|
// Use Effect.runFork-equivalent via Effect.forkDaemon — a
|
|
556
523
|
// runSync caller wraps `Scope.close(...)` similarly.
|
|
557
524
|
const fiber = yield* Effect.forkDaemon(Scope.close(scope, Exit.void));
|
|
@@ -568,4 +535,4 @@ describe("makePartitionedDispatcher — defaults", () => {
|
|
|
568
535
|
expect(DEFAULT_PARTITIONED_DISPATCHER_CONFIG.idleReaperIntervalMs).toBe(5_000);
|
|
569
536
|
});
|
|
570
537
|
});
|
|
571
|
-
//# sourceMappingURL=
|
|
538
|
+
//# sourceMappingURL=app-callback-partitioned-dispatcher.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-callback-partitioned-dispatcher.test.js","sourceRoot":"","sources":["../../../src/internal/__tests__/app-callback-partitioned-dispatcher.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { AppsOnBeforeDispatch, AppsOnBeforeMessageDelivery, AppsOnClose, AppsOnJoin, AppsOnSessionActive, type Static } from "@moltzap/protocol";
|
|
2
|
+
import { type PartitionableRequest } from "../app-callback-partition-key.js";
|
|
3
|
+
export declare const SESSION_A = "11111111-1111-4111-8111-111111111111";
|
|
4
|
+
export declare const SESSION_B = "22222222-2222-4222-8222-222222222222";
|
|
5
|
+
export declare const CONV_X: string & import("effect/Brand").Brand<"ConversationId">;
|
|
6
|
+
export declare const CONV_Y: string & import("effect/Brand").Brand<"ConversationId">;
|
|
7
|
+
export declare const CONV_Z: string & import("effect/Brand").Brand<"ConversationId">;
|
|
8
|
+
export declare const AGENT_A: string & import("effect/Brand").Brand<"AgentId">;
|
|
9
|
+
export declare const MESSAGE_A: string & import("effect/Brand").Brand<"MessageId">;
|
|
10
|
+
export declare const conversationIdForIndex: (index: number) => string & import("effect/Brand").Brand<"ConversationId">;
|
|
11
|
+
export declare function beforeDispatchParams(sessionId?: string, conv?: string & import("effect/Brand").Brand<"ConversationId">): Static<typeof AppsOnBeforeDispatch.paramsSchema>;
|
|
12
|
+
export declare function beforeDispatch(id: string, sessionId?: string, conv?: string & import("effect/Brand").Brand<"ConversationId">): PartitionableRequest;
|
|
13
|
+
export declare function beforeMessageDeliveryParams(sessionId?: string, conv?: string & import("effect/Brand").Brand<"ConversationId">): Static<typeof AppsOnBeforeMessageDelivery.paramsSchema>;
|
|
14
|
+
export declare function beforeMessageDelivery(id: string, sessionId?: string, conv?: string & import("effect/Brand").Brand<"ConversationId">): PartitionableRequest;
|
|
15
|
+
export declare function onJoinParams(sessionId?: string): Static<typeof AppsOnJoin.paramsSchema>;
|
|
16
|
+
export declare function onJoin(id: string, sessionId?: string): PartitionableRequest;
|
|
17
|
+
export declare function onCloseParams(sessionId?: string): Static<typeof AppsOnClose.paramsSchema>;
|
|
18
|
+
export declare function onClose(id: string, sessionId?: string): PartitionableRequest;
|
|
19
|
+
export declare function onSessionActiveParams(sessionId?: string): Static<typeof AppsOnSessionActive.paramsSchema>;
|
|
20
|
+
export declare function onSessionActive(id: string, sessionId?: string): PartitionableRequest;
|
|
21
|
+
export declare const lifecycleRequests: readonly [{
|
|
22
|
+
readonly definition: import("@moltzap/protocol").RpcDefinition<"apps/onJoin", import("@sinclair/typebox").TObject<{
|
|
23
|
+
sessionId: import("@sinclair/typebox").TString;
|
|
24
|
+
appId: import("@sinclair/typebox").TString;
|
|
25
|
+
conversations: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TString>;
|
|
26
|
+
agent: import("@sinclair/typebox").TObject<{
|
|
27
|
+
agentId: import("@sinclair/typebox").TString & {
|
|
28
|
+
static: import("@moltzap/protocol").BrandedString<"AgentId">;
|
|
29
|
+
};
|
|
30
|
+
ownerId: import("@sinclair/typebox").TString;
|
|
31
|
+
}>;
|
|
32
|
+
}>, import("@sinclair/typebox").TObject<{}>>;
|
|
33
|
+
readonly request: (id: string, sessionId?: string) => PartitionableRequest;
|
|
34
|
+
}, {
|
|
35
|
+
readonly definition: import("@moltzap/protocol").RpcDefinition<"apps/onClose", import("@sinclair/typebox").TObject<{
|
|
36
|
+
sessionId: import("@sinclair/typebox").TString;
|
|
37
|
+
appId: import("@sinclair/typebox").TString;
|
|
38
|
+
conversations: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TString>;
|
|
39
|
+
closedBy: import("@sinclair/typebox").TObject<{
|
|
40
|
+
agentId: import("@sinclair/typebox").TString & {
|
|
41
|
+
static: import("@moltzap/protocol").BrandedString<"AgentId">;
|
|
42
|
+
};
|
|
43
|
+
ownerId: import("@sinclair/typebox").TString;
|
|
44
|
+
}>;
|
|
45
|
+
}>, import("@sinclair/typebox").TObject<{}>>;
|
|
46
|
+
readonly request: (id: string, sessionId?: string) => PartitionableRequest;
|
|
47
|
+
}, {
|
|
48
|
+
readonly definition: import("@moltzap/protocol").RpcDefinition<"apps/onSessionActive", import("@sinclair/typebox").TObject<{
|
|
49
|
+
sessionId: import("@sinclair/typebox").TString;
|
|
50
|
+
appId: import("@sinclair/typebox").TString;
|
|
51
|
+
conversations: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TString>;
|
|
52
|
+
admittedAgentIds: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString & {
|
|
53
|
+
static: import("@moltzap/protocol").BrandedString<"AgentId">;
|
|
54
|
+
}>;
|
|
55
|
+
}>, import("@sinclair/typebox").TObject<{}>>;
|
|
56
|
+
readonly request: (id: string, sessionId?: string) => PartitionableRequest;
|
|
57
|
+
}];
|
|
58
|
+
//# sourceMappingURL=app-callback-test-requests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-callback-test-requests.d.ts","sourceRoot":"","sources":["../../../src/internal/__tests__/app-callback-test-requests.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,EACpB,2BAA2B,EAC3B,WAAW,EACX,UAAU,EACV,mBAAmB,EAInB,KAAK,MAAM,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,kCAAkC,CAAC;AAE1C,eAAO,MAAM,SAAS,yCAAyC,CAAC;AAChE,eAAO,MAAM,SAAS,yCAAyC,CAAC;AAChE,eAAO,MAAM,MAAM,yDAAyD,CAAC;AAC7E,eAAO,MAAM,MAAM,yDAAyD,CAAC;AAC7E,eAAO,MAAM,MAAM,yDAAyD,CAAC;AAC7E,eAAO,MAAM,OAAO,kDAAkD,CAAC;AACvE,eAAO,MAAM,SAAS,oDAAoD,CAAC;AAG3E,eAAO,MAAM,sBAAsB,GAAI,OAAO,MAAM,4DAGjD,CAAC;AAEJ,wBAAgB,oBAAoB,CAClC,SAAS,SAAY,EACrB,IAAI,0DAAS,GACZ,MAAM,CAAC,OAAO,oBAAoB,CAAC,YAAY,CAAC,CAalD;AAED,wBAAgB,cAAc,CAC5B,EAAE,EAAE,MAAM,EACV,SAAS,SAAY,EACrB,IAAI,0DAAS,GACZ,oBAAoB,CAQtB;AAED,wBAAgB,2BAA2B,CACzC,SAAS,SAAY,EACrB,IAAI,0DAAS,GACZ,MAAM,CAAC,OAAO,2BAA2B,CAAC,YAAY,CAAC,CAQzD;AAED,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,MAAM,EACV,SAAS,SAAY,EACrB,IAAI,0DAAS,GACZ,oBAAoB,CAQtB;AAED,wBAAgB,YAAY,CAC1B,SAAS,SAAY,GACpB,MAAM,CAAC,OAAO,UAAU,CAAC,YAAY,CAAC,CAOxC;AAED,wBAAgB,MAAM,CACpB,EAAE,EAAE,MAAM,EACV,SAAS,SAAY,GACpB,oBAAoB,CAUtB;AAED,wBAAgB,aAAa,CAC3B,SAAS,SAAY,GACpB,MAAM,CAAC,OAAO,WAAW,CAAC,YAAY,CAAC,CAOzC;AAED,wBAAgB,OAAO,CACrB,EAAE,EAAE,MAAM,EACV,SAAS,SAAY,GACpB,oBAAoB,CAUtB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,SAAY,GACpB,MAAM,CAAC,OAAO,mBAAmB,CAAC,YAAY,CAAC,CAOjD;AAED,wBAAgB,eAAe,CAC7B,EAAE,EAAE,MAAM,EACV,SAAS,SAAY,GACpB,oBAAoB,CAUtB;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;2BAGZ,MAAM;;;;;;;;;;;;;2BAIN,MAAM;;;;;;;;;;2BAIN,MAAM;EAGd,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { agentId, AppsOnBeforeDispatch, AppsOnBeforeMessageDelivery, AppsOnClose, AppsOnJoin, AppsOnSessionActive, conversationId, jsonRpcStringId, messageId, } from "@moltzap/protocol";
|
|
2
|
+
import { LIFECYCLE_CONVERSATION_SENTINEL, } from "../app-callback-partition-key.js";
|
|
3
|
+
export const SESSION_A = "11111111-1111-4111-8111-111111111111";
|
|
4
|
+
export const SESSION_B = "22222222-2222-4222-8222-222222222222";
|
|
5
|
+
export const CONV_X = conversationId("33333333-3333-4333-8333-333333333333");
|
|
6
|
+
export const CONV_Y = conversationId("44444444-4444-4444-8444-444444444444");
|
|
7
|
+
export const CONV_Z = conversationId("77777777-7777-4777-8777-777777777777");
|
|
8
|
+
export const AGENT_A = agentId("55555555-5555-4555-8555-555555555555");
|
|
9
|
+
export const MESSAGE_A = messageId("66666666-6666-4666-8666-666666666666");
|
|
10
|
+
const UUID_SUFFIX_WIDTH = 12;
|
|
11
|
+
export const conversationIdForIndex = (index) => conversationId(`33333333-3333-4333-8333-${index.toString().padStart(UUID_SUFFIX_WIDTH, "0")}`);
|
|
12
|
+
export function beforeDispatchParams(sessionId = SESSION_A, conv = CONV_X) {
|
|
13
|
+
return {
|
|
14
|
+
sessionId,
|
|
15
|
+
appId: "test-app",
|
|
16
|
+
conversationId: conv,
|
|
17
|
+
recipient: { agentId: AGENT_A, ownerId: "owner-a" },
|
|
18
|
+
message: {
|
|
19
|
+
id: MESSAGE_A,
|
|
20
|
+
senderAgentId: AGENT_A,
|
|
21
|
+
parts: [{ type: "text", text: "hello" }],
|
|
22
|
+
},
|
|
23
|
+
attempt: 0,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export function beforeDispatch(id, sessionId = SESSION_A, conv = CONV_X) {
|
|
27
|
+
const params = beforeDispatchParams(sessionId, conv);
|
|
28
|
+
return {
|
|
29
|
+
id: jsonRpcStringId(id),
|
|
30
|
+
definition: AppsOnBeforeDispatch,
|
|
31
|
+
params,
|
|
32
|
+
partition: { sessionId, conversationId: conv },
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function beforeMessageDeliveryParams(sessionId = SESSION_A, conv = CONV_X) {
|
|
36
|
+
return {
|
|
37
|
+
sessionId,
|
|
38
|
+
appId: "test-app",
|
|
39
|
+
conversationId: conv,
|
|
40
|
+
sender: { agentId: AGENT_A, ownerId: "owner-a" },
|
|
41
|
+
message: { parts: [{ type: "text", text: "hello" }] },
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export function beforeMessageDelivery(id, sessionId = SESSION_A, conv = CONV_X) {
|
|
45
|
+
const params = beforeMessageDeliveryParams(sessionId, conv);
|
|
46
|
+
return {
|
|
47
|
+
id: jsonRpcStringId(id),
|
|
48
|
+
definition: AppsOnBeforeMessageDelivery,
|
|
49
|
+
params,
|
|
50
|
+
partition: { sessionId, conversationId: conv },
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export function onJoinParams(sessionId = SESSION_A) {
|
|
54
|
+
return {
|
|
55
|
+
sessionId,
|
|
56
|
+
appId: "test-app",
|
|
57
|
+
conversations: { main: CONV_X },
|
|
58
|
+
agent: { agentId: AGENT_A, ownerId: "owner-a" },
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export function onJoin(id, sessionId = SESSION_A) {
|
|
62
|
+
return {
|
|
63
|
+
id: jsonRpcStringId(id),
|
|
64
|
+
definition: AppsOnJoin,
|
|
65
|
+
params: onJoinParams(sessionId),
|
|
66
|
+
partition: {
|
|
67
|
+
sessionId,
|
|
68
|
+
conversationId: LIFECYCLE_CONVERSATION_SENTINEL,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export function onCloseParams(sessionId = SESSION_A) {
|
|
73
|
+
return {
|
|
74
|
+
sessionId,
|
|
75
|
+
appId: "test-app",
|
|
76
|
+
conversations: { main: CONV_X },
|
|
77
|
+
closedBy: { agentId: AGENT_A, ownerId: "owner-a" },
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export function onClose(id, sessionId = SESSION_A) {
|
|
81
|
+
return {
|
|
82
|
+
id: jsonRpcStringId(id),
|
|
83
|
+
definition: AppsOnClose,
|
|
84
|
+
params: onCloseParams(sessionId),
|
|
85
|
+
partition: {
|
|
86
|
+
sessionId,
|
|
87
|
+
conversationId: LIFECYCLE_CONVERSATION_SENTINEL,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export function onSessionActiveParams(sessionId = SESSION_A) {
|
|
92
|
+
return {
|
|
93
|
+
sessionId,
|
|
94
|
+
appId: "test-app",
|
|
95
|
+
conversations: { main: CONV_X },
|
|
96
|
+
admittedAgentIds: [AGENT_A],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
export function onSessionActive(id, sessionId = SESSION_A) {
|
|
100
|
+
return {
|
|
101
|
+
id: jsonRpcStringId(id),
|
|
102
|
+
definition: AppsOnSessionActive,
|
|
103
|
+
params: onSessionActiveParams(sessionId),
|
|
104
|
+
partition: {
|
|
105
|
+
sessionId,
|
|
106
|
+
conversationId: LIFECYCLE_CONVERSATION_SENTINEL,
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
export const lifecycleRequests = [
|
|
111
|
+
{
|
|
112
|
+
definition: AppsOnJoin,
|
|
113
|
+
request: (id, sessionId = SESSION_A) => onJoin(id, sessionId),
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
definition: AppsOnClose,
|
|
117
|
+
request: (id, sessionId = SESSION_A) => onClose(id, sessionId),
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
definition: AppsOnSessionActive,
|
|
121
|
+
request: (id, sessionId = SESSION_A) => onSessionActive(id, sessionId),
|
|
122
|
+
},
|
|
123
|
+
];
|
|
124
|
+
//# sourceMappingURL=app-callback-test-requests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-callback-test-requests.js","sourceRoot":"","sources":["../../../src/internal/__tests__/app-callback-test-requests.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
readonly _tag: "MalformedPartitionKeyError";
|
|
3
|
-
} & Readonly<A>;
|
|
4
|
-
/**
|
|
5
|
-
* The decoded server-request frame did not carry a usable partition key.
|
|
6
|
-
* Examples: required `params.sessionId` missing or not a UUID; method
|
|
7
|
-
* name absent from the s2c registry.
|
|
8
|
-
*
|
|
9
|
-
* Failure mode is structural — the request cannot be routed. The reader
|
|
10
|
-
* synthesizes a `-32602 Invalid params` error response.
|
|
11
|
-
*/
|
|
12
|
-
export declare class MalformedPartitionKeyError extends MalformedPartitionKeyError_base<{
|
|
13
|
-
readonly method: string;
|
|
14
|
-
readonly reason: "missing-session-id" | "missing-conversation-id" | "unknown-method" | "params-shape";
|
|
15
|
-
readonly requestId: string;
|
|
16
|
-
}> {
|
|
17
|
-
}
|
|
1
|
+
import type { JsonRpcStringId } from "@moltzap/protocol";
|
|
18
2
|
declare const PartitionLimitError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
19
3
|
readonly _tag: "PartitionLimitError";
|
|
20
4
|
} & Readonly<A>;
|
|
@@ -32,7 +16,7 @@ export declare class PartitionLimitError extends PartitionLimitError_base<{
|
|
|
32
16
|
readonly key: string;
|
|
33
17
|
readonly activePartitions: number;
|
|
34
18
|
readonly maxPartitions: number;
|
|
35
|
-
readonly requestId:
|
|
19
|
+
readonly requestId: JsonRpcStringId;
|
|
36
20
|
}> {
|
|
37
21
|
}
|
|
38
22
|
declare const PartitionQueueFullError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
@@ -51,7 +35,7 @@ declare const PartitionQueueFullError_base: new <A extends Record<string, any> =
|
|
|
51
35
|
export declare class PartitionQueueFullError extends PartitionQueueFullError_base<{
|
|
52
36
|
readonly key: string;
|
|
53
37
|
readonly capacity: number;
|
|
54
|
-
readonly requestId:
|
|
38
|
+
readonly requestId: JsonRpcStringId;
|
|
55
39
|
}> {
|
|
56
40
|
}
|
|
57
41
|
/**
|
|
@@ -61,6 +45,6 @@ export declare class PartitionQueueFullError extends PartitionQueueFullError_bas
|
|
|
61
45
|
* frame-routing path discriminate on `_tag` to pick the right wire-error
|
|
62
46
|
* code.
|
|
63
47
|
*/
|
|
64
|
-
export type OfferRejected =
|
|
48
|
+
export type OfferRejected = PartitionLimitError | PartitionQueueFullError;
|
|
65
49
|
export {};
|
|
66
|
-
//# sourceMappingURL=
|
|
50
|
+
//# sourceMappingURL=app-callback-dispatcher-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-callback-dispatcher-errors.d.ts","sourceRoot":"","sources":["../../src/internal/app-callback-dispatcher-errors.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;;;;AAEzD;;;;;;;;;GASG;AACH,qBAAa,mBAAoB,SAAQ,yBAEvC;IACA,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;CACrC,CAAC;CAAG;;;;AAEL;;;;;;;;;GASG;AACH,qBAAa,uBAAwB,SAAQ,6BAE3C;IACA,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;CACrC,CAAC;CAAG;AAEL;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,uBAAuB,CAAC"}
|
|
@@ -1,24 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tagged error types for the partitioned
|
|
2
|
+
* Tagged error types for the partitioned appCallback dispatcher.
|
|
3
3
|
*
|
|
4
4
|
* Spec: moltzap#356 — partitioned dispatch keyed on
|
|
5
5
|
* `(sessionId, conversationId, hookKind)`.
|
|
6
6
|
*
|
|
7
7
|
* All errors are surfaced on `PartitionedDispatcher.offer`'s typed channel.
|
|
8
|
-
* The reader fiber translates each tag into an immediate
|
|
8
|
+
* The reader fiber translates each tag into an immediate appCallback error response
|
|
9
9
|
* so the server's `Deferred.await` resolves deterministically (no hangs).
|
|
10
10
|
*/
|
|
11
11
|
import { Data } from "effect";
|
|
12
|
-
/**
|
|
13
|
-
* The decoded server-request frame did not carry a usable partition key.
|
|
14
|
-
* Examples: required `params.sessionId` missing or not a UUID; method
|
|
15
|
-
* name absent from the s2c registry.
|
|
16
|
-
*
|
|
17
|
-
* Failure mode is structural — the request cannot be routed. The reader
|
|
18
|
-
* synthesizes a `-32602 Invalid params` error response.
|
|
19
|
-
*/
|
|
20
|
-
export class MalformedPartitionKeyError extends Data.TaggedError("MalformedPartitionKeyError") {
|
|
21
|
-
}
|
|
22
12
|
/**
|
|
23
13
|
* The active-partition count has reached `maxPartitions` (soft cap, default
|
|
24
14
|
* 256). New partitions cannot be allocated until an existing partition is
|
|
@@ -43,4 +33,4 @@ export class PartitionLimitError extends Data.TaggedError("PartitionLimitError")
|
|
|
43
33
|
*/
|
|
44
34
|
export class PartitionQueueFullError extends Data.TaggedError("PartitionQueueFullError") {
|
|
45
35
|
}
|
|
46
|
-
//# sourceMappingURL=
|
|
36
|
+
//# sourceMappingURL=app-callback-dispatcher-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-callback-dispatcher-errors.js","sourceRoot":"","sources":["../../src/internal/app-callback-dispatcher-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B;;;;;;;;;GASG;AACH,MAAM,OAAO,mBAAoB,SAAQ,IAAI,CAAC,WAAW,CACvD,qBAAqB,CAMrB;CAAG;AAEL;;;;;;;;;GASG;AACH,MAAM,OAAO,uBAAwB,SAAQ,IAAI,CAAC,WAAW,CAC3D,yBAAyB,CAKzB;CAAG"}
|