@durable-effect/jobs 0.0.1-next.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/LICENSE +21 -0
- package/README.md +490 -0
- package/dist/client/client.d.ts +34 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +427 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/index.d.ts +4 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +4 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/response.d.ts +99 -0
- package/dist/client/response.d.ts.map +1 -0
- package/dist/client/response.js +92 -0
- package/dist/client/response.js.map +1 -0
- package/dist/client/types.d.ts +242 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +3 -0
- package/dist/client/types.js.map +1 -0
- package/dist/definitions/continuous.d.ts +110 -0
- package/dist/definitions/continuous.d.ts.map +1 -0
- package/dist/definitions/continuous.js +79 -0
- package/dist/definitions/continuous.js.map +1 -0
- package/dist/definitions/debounce.d.ts +67 -0
- package/dist/definitions/debounce.d.ts.map +1 -0
- package/dist/definitions/debounce.js +28 -0
- package/dist/definitions/debounce.js.map +1 -0
- package/dist/definitions/index.d.ts +4 -0
- package/dist/definitions/index.d.ts.map +1 -0
- package/dist/definitions/index.js +5 -0
- package/dist/definitions/index.js.map +1 -0
- package/dist/definitions/task.d.ts +234 -0
- package/dist/definitions/task.d.ts.map +1 -0
- package/dist/definitions/task.js +106 -0
- package/dist/definitions/task.js.map +1 -0
- package/dist/engine/engine.d.ts +60 -0
- package/dist/engine/engine.d.ts.map +1 -0
- package/dist/engine/engine.js +89 -0
- package/dist/engine/engine.js.map +1 -0
- package/dist/engine/index.d.ts +3 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +3 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/types.d.ts +53 -0
- package/dist/engine/types.d.ts.map +1 -0
- package/dist/engine/types.js +3 -0
- package/dist/engine/types.js.map +1 -0
- package/dist/errors.d.ts +119 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +80 -0
- package/dist/errors.js.map +1 -0
- package/dist/factory.d.ts +97 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +94 -0
- package/dist/factory.js.map +1 -0
- package/dist/handlers/continuous/context.d.ts +25 -0
- package/dist/handlers/continuous/context.d.ts.map +1 -0
- package/dist/handlers/continuous/context.js +38 -0
- package/dist/handlers/continuous/context.js.map +1 -0
- package/dist/handlers/continuous/executor.d.ts +10 -0
- package/dist/handlers/continuous/executor.d.ts.map +1 -0
- package/dist/handlers/continuous/executor.js +83 -0
- package/dist/handlers/continuous/executor.js.map +1 -0
- package/dist/handlers/continuous/handler.d.ts +14 -0
- package/dist/handlers/continuous/handler.d.ts.map +1 -0
- package/dist/handlers/continuous/handler.js +283 -0
- package/dist/handlers/continuous/handler.js.map +1 -0
- package/dist/handlers/continuous/index.d.ts +4 -0
- package/dist/handlers/continuous/index.d.ts.map +1 -0
- package/dist/handlers/continuous/index.js +4 -0
- package/dist/handlers/continuous/index.js.map +1 -0
- package/dist/handlers/continuous/types.d.ts +36 -0
- package/dist/handlers/continuous/types.d.ts.map +1 -0
- package/dist/handlers/continuous/types.js +3 -0
- package/dist/handlers/continuous/types.js.map +1 -0
- package/dist/handlers/debounce/handler.d.ts +14 -0
- package/dist/handlers/debounce/handler.d.ts.map +1 -0
- package/dist/handlers/debounce/handler.js +261 -0
- package/dist/handlers/debounce/handler.js.map +1 -0
- package/dist/handlers/debounce/index.d.ts +3 -0
- package/dist/handlers/debounce/index.d.ts.map +1 -0
- package/dist/handlers/debounce/index.js +3 -0
- package/dist/handlers/debounce/index.js.map +1 -0
- package/dist/handlers/debounce/types.d.ts +10 -0
- package/dist/handlers/debounce/types.d.ts.map +1 -0
- package/dist/handlers/debounce/types.js +3 -0
- package/dist/handlers/debounce/types.js.map +1 -0
- package/dist/handlers/index.d.ts +14 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +25 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/task/context.d.ts +35 -0
- package/dist/handlers/task/context.d.ts.map +1 -0
- package/dist/handlers/task/context.js +156 -0
- package/dist/handlers/task/context.js.map +1 -0
- package/dist/handlers/task/handler.d.ts +13 -0
- package/dist/handlers/task/handler.d.ts.map +1 -0
- package/dist/handlers/task/handler.js +280 -0
- package/dist/handlers/task/handler.js.map +1 -0
- package/dist/handlers/task/index.d.ts +3 -0
- package/dist/handlers/task/index.d.ts.map +1 -0
- package/dist/handlers/task/index.js +2 -0
- package/dist/handlers/task/index.js.map +1 -0
- package/dist/handlers/task/types.d.ts +10 -0
- package/dist/handlers/task/types.d.ts.map +1 -0
- package/dist/handlers/task/types.js +3 -0
- package/dist/handlers/task/types.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/registry/index.d.ts +5 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +4 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/registry.d.ts +74 -0
- package/dist/registry/registry.d.ts.map +1 -0
- package/dist/registry/registry.js +159 -0
- package/dist/registry/registry.js.map +1 -0
- package/dist/registry/typed.d.ts +146 -0
- package/dist/registry/typed.d.ts.map +1 -0
- package/dist/registry/typed.js +29 -0
- package/dist/registry/typed.js.map +1 -0
- package/dist/registry/types.d.ts +497 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +3 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/retry/errors.d.ts +31 -0
- package/dist/retry/errors.d.ts.map +1 -0
- package/dist/retry/errors.js +22 -0
- package/dist/retry/errors.js.map +1 -0
- package/dist/retry/executor.d.ts +53 -0
- package/dist/retry/executor.d.ts.map +1 -0
- package/dist/retry/executor.js +112 -0
- package/dist/retry/executor.js.map +1 -0
- package/dist/retry/index.d.ts +4 -0
- package/dist/retry/index.d.ts.map +1 -0
- package/dist/retry/index.js +4 -0
- package/dist/retry/index.js.map +1 -0
- package/dist/retry/types.d.ts +29 -0
- package/dist/retry/types.d.ts.map +1 -0
- package/dist/retry/types.js +3 -0
- package/dist/retry/types.js.map +1 -0
- package/dist/runtime/dispatcher.d.ts +39 -0
- package/dist/runtime/dispatcher.d.ts.map +1 -0
- package/dist/runtime/dispatcher.js +76 -0
- package/dist/runtime/dispatcher.js.map +1 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +6 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/runtime.d.ts +88 -0
- package/dist/runtime/runtime.d.ts.map +1 -0
- package/dist/runtime/runtime.js +116 -0
- package/dist/runtime/runtime.js.map +1 -0
- package/dist/runtime/types.d.ts +182 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +3 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/services/alarm.d.ts +37 -0
- package/dist/services/alarm.d.ts.map +1 -0
- package/dist/services/alarm.js +39 -0
- package/dist/services/alarm.js.map +1 -0
- package/dist/services/cleanup.d.ts +27 -0
- package/dist/services/cleanup.d.ts.map +1 -0
- package/dist/services/cleanup.js +25 -0
- package/dist/services/cleanup.js.map +1 -0
- package/dist/services/entity-state.d.ts +49 -0
- package/dist/services/entity-state.d.ts.map +1 -0
- package/dist/services/entity-state.js +72 -0
- package/dist/services/entity-state.js.map +1 -0
- package/dist/services/execution.d.ts +70 -0
- package/dist/services/execution.d.ts.map +1 -0
- package/dist/services/execution.js +159 -0
- package/dist/services/execution.js.map +1 -0
- package/dist/services/execution_test.d.ts +13 -0
- package/dist/services/execution_test.d.ts.map +1 -0
- package/dist/services/execution_test.js +11 -0
- package/dist/services/execution_test.js.map +1 -0
- package/dist/services/idempotency.d.ts +36 -0
- package/dist/services/idempotency.d.ts.map +1 -0
- package/dist/services/idempotency.js +48 -0
- package/dist/services/idempotency.js.map +1 -0
- package/dist/services/index.d.ts +19 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +33 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/metadata.d.ts +64 -0
- package/dist/services/metadata.d.ts.map +1 -0
- package/dist/services/metadata.js +56 -0
- package/dist/services/metadata.js.map +1 -0
- package/dist/services/registry.d.ts +19 -0
- package/dist/services/registry.d.ts.map +1 -0
- package/dist/services/registry.js +17 -0
- package/dist/services/registry.js.map +1 -0
- package/dist/storage-keys.d.ts +38 -0
- package/dist/storage-keys.d.ts.map +1 -0
- package/dist/storage-keys.js +47 -0
- package/dist/storage-keys.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
// packages/jobs/src/client/client.ts
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
import { narrowResponseEffect } from "./response";
|
|
4
|
+
// =============================================================================
|
|
5
|
+
// Instance ID Resolution
|
|
6
|
+
// =============================================================================
|
|
7
|
+
/**
|
|
8
|
+
* Create instance ID for a job.
|
|
9
|
+
*
|
|
10
|
+
* Format: {jobType}:{jobName}:{userProvidedId}
|
|
11
|
+
*/
|
|
12
|
+
function createInstanceId(type, name, id) {
|
|
13
|
+
return `${type}:${name}:${id}`;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Consistent hash for partition key routing.
|
|
17
|
+
*/
|
|
18
|
+
function consistentHash(key, buckets) {
|
|
19
|
+
let hash = 0;
|
|
20
|
+
for (let i = 0; i < key.length; i++) {
|
|
21
|
+
const char = key.charCodeAt(i);
|
|
22
|
+
hash = (hash << 5) - hash + char;
|
|
23
|
+
hash = hash & hash; // Convert to 32-bit integer
|
|
24
|
+
}
|
|
25
|
+
return Math.abs(hash) % buckets;
|
|
26
|
+
}
|
|
27
|
+
// =============================================================================
|
|
28
|
+
// DO Stub Helper
|
|
29
|
+
// =============================================================================
|
|
30
|
+
/**
|
|
31
|
+
* Get a typed DO stub for an instance.
|
|
32
|
+
*
|
|
33
|
+
* Note: We use a runtime cast here because Cloudflare's DurableObjectNamespace
|
|
34
|
+
* generic typing doesn't work well with the DurableObjectBranded constraint.
|
|
35
|
+
* The call() method signature is validated by our response narrowing.
|
|
36
|
+
*/
|
|
37
|
+
function getStub(binding, instanceId) {
|
|
38
|
+
const id = binding.idFromName(instanceId);
|
|
39
|
+
// The DO stub implements our interface; we validate responses at runtime
|
|
40
|
+
return binding.get(id);
|
|
41
|
+
}
|
|
42
|
+
// =============================================================================
|
|
43
|
+
// Client Factory
|
|
44
|
+
// =============================================================================
|
|
45
|
+
/**
|
|
46
|
+
* Create a jobs client from a Durable Object binding.
|
|
47
|
+
*
|
|
48
|
+
* The client provides typed access to all registered jobs and
|
|
49
|
+
* handles instance ID resolution and routing.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```ts
|
|
53
|
+
* const client = createJobsClient(env.JOBS, registry);
|
|
54
|
+
*
|
|
55
|
+
* // Access continuous job
|
|
56
|
+
* await client.continuous("tokenRefresher").start({
|
|
57
|
+
* id: "user-123",
|
|
58
|
+
* input: { refreshToken: "rt_abc" },
|
|
59
|
+
* });
|
|
60
|
+
*
|
|
61
|
+
* // Access debounce job
|
|
62
|
+
* await client.debounce("webhookDebounce").add({
|
|
63
|
+
* id: "contact-456",
|
|
64
|
+
* event: { type: "contact.updated", data: {...} },
|
|
65
|
+
* });
|
|
66
|
+
*
|
|
67
|
+
* // Access workerPool job (auto-routes to instance)
|
|
68
|
+
* await client.workerPool("emailWorkerPool").enqueue({
|
|
69
|
+
* id: "email-789",
|
|
70
|
+
* event: { to: "user@example.com", template: "welcome" },
|
|
71
|
+
* });
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export function createJobsClient(binding, registry) {
|
|
75
|
+
return {
|
|
76
|
+
// -------------------------------------------------------------------------
|
|
77
|
+
// Continuous Client
|
|
78
|
+
// -------------------------------------------------------------------------
|
|
79
|
+
continuous: (name) => {
|
|
80
|
+
const client = {
|
|
81
|
+
start: ({ id, input }) => {
|
|
82
|
+
const instanceId = createInstanceId("continuous", name, id);
|
|
83
|
+
const stub = getStub(binding, instanceId);
|
|
84
|
+
return narrowResponseEffect(stub.call({
|
|
85
|
+
type: "continuous",
|
|
86
|
+
action: "start",
|
|
87
|
+
name,
|
|
88
|
+
id,
|
|
89
|
+
input,
|
|
90
|
+
}), "continuous.start");
|
|
91
|
+
},
|
|
92
|
+
terminate: (id, options) => {
|
|
93
|
+
const instanceId = createInstanceId("continuous", name, id);
|
|
94
|
+
const stub = getStub(binding, instanceId);
|
|
95
|
+
return narrowResponseEffect(stub.call({
|
|
96
|
+
type: "continuous",
|
|
97
|
+
action: "terminate",
|
|
98
|
+
name,
|
|
99
|
+
id,
|
|
100
|
+
reason: options?.reason,
|
|
101
|
+
}), "continuous.terminate");
|
|
102
|
+
},
|
|
103
|
+
trigger: (id) => {
|
|
104
|
+
const instanceId = createInstanceId("continuous", name, id);
|
|
105
|
+
const stub = getStub(binding, instanceId);
|
|
106
|
+
return narrowResponseEffect(stub.call({
|
|
107
|
+
type: "continuous",
|
|
108
|
+
action: "trigger",
|
|
109
|
+
name,
|
|
110
|
+
id,
|
|
111
|
+
}), "continuous.trigger");
|
|
112
|
+
},
|
|
113
|
+
status: (id) => {
|
|
114
|
+
const instanceId = createInstanceId("continuous", name, id);
|
|
115
|
+
const stub = getStub(binding, instanceId);
|
|
116
|
+
return narrowResponseEffect(stub.call({
|
|
117
|
+
type: "continuous",
|
|
118
|
+
action: "status",
|
|
119
|
+
name,
|
|
120
|
+
id,
|
|
121
|
+
}), "continuous.status");
|
|
122
|
+
},
|
|
123
|
+
getState: (id) => {
|
|
124
|
+
const instanceId = createInstanceId("continuous", name, id);
|
|
125
|
+
const stub = getStub(binding, instanceId);
|
|
126
|
+
return narrowResponseEffect(stub.call({
|
|
127
|
+
type: "continuous",
|
|
128
|
+
action: "getState",
|
|
129
|
+
name,
|
|
130
|
+
id,
|
|
131
|
+
}), "continuous.getState");
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
return client;
|
|
135
|
+
},
|
|
136
|
+
// -------------------------------------------------------------------------
|
|
137
|
+
// Debounce Client
|
|
138
|
+
// -------------------------------------------------------------------------
|
|
139
|
+
debounce: (name) => {
|
|
140
|
+
const client = {
|
|
141
|
+
add: ({ id, event }) => {
|
|
142
|
+
const instanceId = createInstanceId("debounce", name, id);
|
|
143
|
+
const stub = getStub(binding, instanceId);
|
|
144
|
+
return narrowResponseEffect(stub.call({
|
|
145
|
+
type: "debounce",
|
|
146
|
+
action: "add",
|
|
147
|
+
name,
|
|
148
|
+
id,
|
|
149
|
+
event,
|
|
150
|
+
}), "debounce.add");
|
|
151
|
+
},
|
|
152
|
+
flush: (id) => {
|
|
153
|
+
const instanceId = createInstanceId("debounce", name, id);
|
|
154
|
+
const stub = getStub(binding, instanceId);
|
|
155
|
+
return narrowResponseEffect(stub.call({
|
|
156
|
+
type: "debounce",
|
|
157
|
+
action: "flush",
|
|
158
|
+
name,
|
|
159
|
+
id,
|
|
160
|
+
}), "debounce.flush");
|
|
161
|
+
},
|
|
162
|
+
clear: (id) => {
|
|
163
|
+
const instanceId = createInstanceId("debounce", name, id);
|
|
164
|
+
const stub = getStub(binding, instanceId);
|
|
165
|
+
return narrowResponseEffect(stub.call({
|
|
166
|
+
type: "debounce",
|
|
167
|
+
action: "clear",
|
|
168
|
+
name,
|
|
169
|
+
id,
|
|
170
|
+
}), "debounce.clear");
|
|
171
|
+
},
|
|
172
|
+
status: (id) => {
|
|
173
|
+
const instanceId = createInstanceId("debounce", name, id);
|
|
174
|
+
const stub = getStub(binding, instanceId);
|
|
175
|
+
return narrowResponseEffect(stub.call({
|
|
176
|
+
type: "debounce",
|
|
177
|
+
action: "status",
|
|
178
|
+
name,
|
|
179
|
+
id,
|
|
180
|
+
}), "debounce.status");
|
|
181
|
+
},
|
|
182
|
+
getState: (id) => {
|
|
183
|
+
const instanceId = createInstanceId("debounce", name, id);
|
|
184
|
+
const stub = getStub(binding, instanceId);
|
|
185
|
+
return narrowResponseEffect(stub.call({
|
|
186
|
+
type: "debounce",
|
|
187
|
+
action: "getState",
|
|
188
|
+
name,
|
|
189
|
+
id,
|
|
190
|
+
}), "debounce.getState");
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
return client;
|
|
194
|
+
},
|
|
195
|
+
// -------------------------------------------------------------------------
|
|
196
|
+
// WorkerPool Client
|
|
197
|
+
// -------------------------------------------------------------------------
|
|
198
|
+
workerPool: (name) => {
|
|
199
|
+
const def = registry.workerPool[name];
|
|
200
|
+
const concurrency = def?.concurrency ?? 1;
|
|
201
|
+
// Round-robin counter for load distribution
|
|
202
|
+
let roundRobinCounter = 0;
|
|
203
|
+
const client = {
|
|
204
|
+
enqueue: ({ id, event, partitionKey, priority }) => {
|
|
205
|
+
// Route to specific instance based on partitionKey or round-robin
|
|
206
|
+
const instanceIndex = partitionKey
|
|
207
|
+
? consistentHash(partitionKey, concurrency)
|
|
208
|
+
: roundRobinCounter++ % concurrency;
|
|
209
|
+
const instanceId = createInstanceId("workerPool", name, instanceIndex);
|
|
210
|
+
const stub = getStub(binding, instanceId);
|
|
211
|
+
return narrowResponseEffect(stub.call({
|
|
212
|
+
type: "workerPool",
|
|
213
|
+
action: "enqueue",
|
|
214
|
+
name,
|
|
215
|
+
instanceIndex,
|
|
216
|
+
eventId: id,
|
|
217
|
+
event,
|
|
218
|
+
partitionKey,
|
|
219
|
+
priority,
|
|
220
|
+
}), "workerPool.enqueue");
|
|
221
|
+
},
|
|
222
|
+
pause: (instanceIndex) => {
|
|
223
|
+
if (instanceIndex !== undefined) {
|
|
224
|
+
const instanceId = createInstanceId("workerPool", name, instanceIndex);
|
|
225
|
+
const stub = getStub(binding, instanceId);
|
|
226
|
+
return narrowResponseEffect(stub.call({
|
|
227
|
+
type: "workerPool",
|
|
228
|
+
action: "pause",
|
|
229
|
+
name,
|
|
230
|
+
instanceIndex,
|
|
231
|
+
}), "workerPool.pause");
|
|
232
|
+
}
|
|
233
|
+
// Pause all instances
|
|
234
|
+
return Effect.gen(function* () {
|
|
235
|
+
const results = yield* Effect.all(Array.from({ length: concurrency }, (_, i) => {
|
|
236
|
+
const instanceId = createInstanceId("workerPool", name, i);
|
|
237
|
+
const stub = getStub(binding, instanceId);
|
|
238
|
+
return narrowResponseEffect(stub.call({
|
|
239
|
+
type: "workerPool",
|
|
240
|
+
action: "pause",
|
|
241
|
+
name,
|
|
242
|
+
instanceIndex: i,
|
|
243
|
+
}), "workerPool.pause");
|
|
244
|
+
}), { concurrency: "unbounded" });
|
|
245
|
+
return {
|
|
246
|
+
_type: "workerPool.pause",
|
|
247
|
+
paused: results.every((r) => r.paused),
|
|
248
|
+
};
|
|
249
|
+
});
|
|
250
|
+
},
|
|
251
|
+
resume: (instanceIndex) => {
|
|
252
|
+
if (instanceIndex !== undefined) {
|
|
253
|
+
const instanceId = createInstanceId("workerPool", name, instanceIndex);
|
|
254
|
+
const stub = getStub(binding, instanceId);
|
|
255
|
+
return narrowResponseEffect(stub.call({
|
|
256
|
+
type: "workerPool",
|
|
257
|
+
action: "resume",
|
|
258
|
+
name,
|
|
259
|
+
instanceIndex,
|
|
260
|
+
}), "workerPool.resume");
|
|
261
|
+
}
|
|
262
|
+
// Resume all instances
|
|
263
|
+
return Effect.gen(function* () {
|
|
264
|
+
const results = yield* Effect.all(Array.from({ length: concurrency }, (_, i) => {
|
|
265
|
+
const instanceId = createInstanceId("workerPool", name, i);
|
|
266
|
+
const stub = getStub(binding, instanceId);
|
|
267
|
+
return narrowResponseEffect(stub.call({
|
|
268
|
+
type: "workerPool",
|
|
269
|
+
action: "resume",
|
|
270
|
+
name,
|
|
271
|
+
instanceIndex: i,
|
|
272
|
+
}), "workerPool.resume");
|
|
273
|
+
}), { concurrency: "unbounded" });
|
|
274
|
+
return {
|
|
275
|
+
_type: "workerPool.resume",
|
|
276
|
+
resumed: results.every((r) => r.resumed),
|
|
277
|
+
};
|
|
278
|
+
});
|
|
279
|
+
},
|
|
280
|
+
cancel: (eventId) => {
|
|
281
|
+
// Cancel needs to find the right instance
|
|
282
|
+
// For now, broadcast to all instances
|
|
283
|
+
return Effect.gen(function* () {
|
|
284
|
+
const results = yield* Effect.all(Array.from({ length: concurrency }, (_, i) => {
|
|
285
|
+
const instanceId = createInstanceId("workerPool", name, i);
|
|
286
|
+
const stub = getStub(binding, instanceId);
|
|
287
|
+
return narrowResponseEffect(stub.call({
|
|
288
|
+
type: "workerPool",
|
|
289
|
+
action: "cancel",
|
|
290
|
+
name,
|
|
291
|
+
instanceIndex: i,
|
|
292
|
+
eventId,
|
|
293
|
+
}), "workerPool.cancel");
|
|
294
|
+
}), { concurrency: "unbounded" });
|
|
295
|
+
// Return first success or last result
|
|
296
|
+
const success = results.find((r) => r.cancelled);
|
|
297
|
+
return success ?? results[results.length - 1];
|
|
298
|
+
});
|
|
299
|
+
},
|
|
300
|
+
status: () => {
|
|
301
|
+
// Aggregate status from all instances
|
|
302
|
+
return Effect.gen(function* () {
|
|
303
|
+
const instances = yield* Effect.all(Array.from({ length: concurrency }, (_, i) => {
|
|
304
|
+
const instanceId = createInstanceId("workerPool", name, i);
|
|
305
|
+
const stub = getStub(binding, instanceId);
|
|
306
|
+
return narrowResponseEffect(stub.call({
|
|
307
|
+
type: "workerPool",
|
|
308
|
+
action: "status",
|
|
309
|
+
name,
|
|
310
|
+
instanceIndex: i,
|
|
311
|
+
}), "workerPool.status");
|
|
312
|
+
}), { concurrency: "unbounded" });
|
|
313
|
+
const aggregated = {
|
|
314
|
+
instances,
|
|
315
|
+
totalPending: instances.reduce((sum, i) => sum + (i.pendingCount ?? 0), 0),
|
|
316
|
+
totalProcessed: instances.reduce((sum, i) => sum + (i.processedCount ?? 0), 0),
|
|
317
|
+
activeInstances: instances.filter((i) => i.status === "processing" || i.status === "idle").length,
|
|
318
|
+
pausedInstances: instances.filter((i) => i.status === "paused")
|
|
319
|
+
.length,
|
|
320
|
+
};
|
|
321
|
+
return aggregated;
|
|
322
|
+
});
|
|
323
|
+
},
|
|
324
|
+
instanceStatus: (instanceIndex) => {
|
|
325
|
+
const instanceId = createInstanceId("workerPool", name, instanceIndex);
|
|
326
|
+
const stub = getStub(binding, instanceId);
|
|
327
|
+
return narrowResponseEffect(stub.call({
|
|
328
|
+
type: "workerPool",
|
|
329
|
+
action: "status",
|
|
330
|
+
name,
|
|
331
|
+
instanceIndex,
|
|
332
|
+
}), "workerPool.status");
|
|
333
|
+
},
|
|
334
|
+
drain: (instanceIndex) => {
|
|
335
|
+
if (instanceIndex !== undefined) {
|
|
336
|
+
const instanceId = createInstanceId("workerPool", name, instanceIndex);
|
|
337
|
+
const stub = getStub(binding, instanceId);
|
|
338
|
+
return narrowResponseEffect(stub.call({
|
|
339
|
+
type: "workerPool",
|
|
340
|
+
action: "drain",
|
|
341
|
+
name,
|
|
342
|
+
instanceIndex,
|
|
343
|
+
}), "workerPool.drain");
|
|
344
|
+
}
|
|
345
|
+
// Drain all instances
|
|
346
|
+
return Effect.gen(function* () {
|
|
347
|
+
const results = yield* Effect.all(Array.from({ length: concurrency }, (_, i) => {
|
|
348
|
+
const instanceId = createInstanceId("workerPool", name, i);
|
|
349
|
+
const stub = getStub(binding, instanceId);
|
|
350
|
+
return narrowResponseEffect(stub.call({
|
|
351
|
+
type: "workerPool",
|
|
352
|
+
action: "drain",
|
|
353
|
+
name,
|
|
354
|
+
instanceIndex: i,
|
|
355
|
+
}), "workerPool.drain");
|
|
356
|
+
}), { concurrency: "unbounded" });
|
|
357
|
+
return {
|
|
358
|
+
_type: "workerPool.drain",
|
|
359
|
+
drained: results.every((r) => r.drained),
|
|
360
|
+
};
|
|
361
|
+
});
|
|
362
|
+
},
|
|
363
|
+
};
|
|
364
|
+
return client;
|
|
365
|
+
},
|
|
366
|
+
// -------------------------------------------------------------------------
|
|
367
|
+
// Task Client
|
|
368
|
+
// -------------------------------------------------------------------------
|
|
369
|
+
task: (name) => {
|
|
370
|
+
const client = {
|
|
371
|
+
send: ({ id, event }) => {
|
|
372
|
+
const instanceId = createInstanceId("task", name, id);
|
|
373
|
+
const stub = getStub(binding, instanceId);
|
|
374
|
+
return narrowResponseEffect(stub.call({
|
|
375
|
+
type: "task",
|
|
376
|
+
action: "send",
|
|
377
|
+
name,
|
|
378
|
+
id,
|
|
379
|
+
event,
|
|
380
|
+
}), "task.send");
|
|
381
|
+
},
|
|
382
|
+
trigger: (id) => {
|
|
383
|
+
const instanceId = createInstanceId("task", name, id);
|
|
384
|
+
const stub = getStub(binding, instanceId);
|
|
385
|
+
return narrowResponseEffect(stub.call({
|
|
386
|
+
type: "task",
|
|
387
|
+
action: "trigger",
|
|
388
|
+
name,
|
|
389
|
+
id,
|
|
390
|
+
}), "task.trigger");
|
|
391
|
+
},
|
|
392
|
+
terminate: (id) => {
|
|
393
|
+
const instanceId = createInstanceId("task", name, id);
|
|
394
|
+
const stub = getStub(binding, instanceId);
|
|
395
|
+
return narrowResponseEffect(stub.call({
|
|
396
|
+
type: "task",
|
|
397
|
+
action: "terminate",
|
|
398
|
+
name,
|
|
399
|
+
id,
|
|
400
|
+
}), "task.terminate");
|
|
401
|
+
},
|
|
402
|
+
status: (id) => {
|
|
403
|
+
const instanceId = createInstanceId("task", name, id);
|
|
404
|
+
const stub = getStub(binding, instanceId);
|
|
405
|
+
return narrowResponseEffect(stub.call({
|
|
406
|
+
type: "task",
|
|
407
|
+
action: "status",
|
|
408
|
+
name,
|
|
409
|
+
id,
|
|
410
|
+
}), "task.status");
|
|
411
|
+
},
|
|
412
|
+
getState: (id) => {
|
|
413
|
+
const instanceId = createInstanceId("task", name, id);
|
|
414
|
+
const stub = getStub(binding, instanceId);
|
|
415
|
+
return narrowResponseEffect(stub.call({
|
|
416
|
+
type: "task",
|
|
417
|
+
action: "getState",
|
|
418
|
+
name,
|
|
419
|
+
id,
|
|
420
|
+
}), "task.getState");
|
|
421
|
+
},
|
|
422
|
+
};
|
|
423
|
+
return client;
|
|
424
|
+
},
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { createJobsClient } from "./client";
|
|
2
|
+
export { narrowResponse, narrowResponseAsync, narrowResponseEffect, isResponseType, UnexpectedResponseError, jobCallError, type JobCallError, type ClientError, type ResponseTypeMap, type ResponseType, } from "./response";
|
|
3
|
+
export type { ContinuousClient, DebounceClient, WorkerPoolClient, WorkerPoolAggregatedStatus, JobsClient, JobsClientFactory, ContinuousKeys, DebounceKeys, WorkerPoolKeys, ContinuousStateType, DebounceEventType, DebounceStateType, WorkerPoolEventType, } from "./types";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAEV,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,0BAA0B,EAE1B,UAAU,EACV,iBAAiB,EAEjB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,YAAY,GAKb,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import type { JobResponse, ContinuousStartResponse, ContinuousTerminateResponse, ContinuousTriggerResponse, ContinuousStatusResponse, ContinuousGetStateResponse, DebounceAddResponse, DebounceFlushResponse, DebounceClearResponse, DebounceStatusResponse, DebounceGetStateResponse, WorkerPoolEnqueueResponse, WorkerPoolPauseResponse, WorkerPoolResumeResponse, WorkerPoolCancelResponse, WorkerPoolStatusResponse, WorkerPoolDrainResponse, TaskSendResponse, TaskTriggerResponse, TaskTerminateResponse, TaskStatusResponse, TaskGetStateResponse } from "../runtime/types";
|
|
3
|
+
/**
|
|
4
|
+
* Error when DO call fails.
|
|
5
|
+
*/
|
|
6
|
+
export interface JobCallError {
|
|
7
|
+
readonly _tag: "JobCallError";
|
|
8
|
+
readonly cause: unknown;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Create a JobCallError.
|
|
12
|
+
*/
|
|
13
|
+
export declare const jobCallError: (cause: unknown) => JobCallError;
|
|
14
|
+
/**
|
|
15
|
+
* Maps response _type discriminants to their full types.
|
|
16
|
+
*/
|
|
17
|
+
export interface ResponseTypeMap {
|
|
18
|
+
"continuous.start": ContinuousStartResponse;
|
|
19
|
+
"continuous.terminate": ContinuousTerminateResponse;
|
|
20
|
+
"continuous.trigger": ContinuousTriggerResponse;
|
|
21
|
+
"continuous.status": ContinuousStatusResponse;
|
|
22
|
+
"continuous.getState": ContinuousGetStateResponse;
|
|
23
|
+
"debounce.add": DebounceAddResponse;
|
|
24
|
+
"debounce.flush": DebounceFlushResponse;
|
|
25
|
+
"debounce.clear": DebounceClearResponse;
|
|
26
|
+
"debounce.status": DebounceStatusResponse;
|
|
27
|
+
"debounce.getState": DebounceGetStateResponse;
|
|
28
|
+
"workerPool.enqueue": WorkerPoolEnqueueResponse;
|
|
29
|
+
"workerPool.pause": WorkerPoolPauseResponse;
|
|
30
|
+
"workerPool.resume": WorkerPoolResumeResponse;
|
|
31
|
+
"workerPool.cancel": WorkerPoolCancelResponse;
|
|
32
|
+
"workerPool.status": WorkerPoolStatusResponse;
|
|
33
|
+
"workerPool.drain": WorkerPoolDrainResponse;
|
|
34
|
+
"task.send": TaskSendResponse;
|
|
35
|
+
"task.trigger": TaskTriggerResponse;
|
|
36
|
+
"task.terminate": TaskTerminateResponse;
|
|
37
|
+
"task.status": TaskStatusResponse;
|
|
38
|
+
"task.getState": TaskGetStateResponse;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* All valid response type discriminants.
|
|
42
|
+
*/
|
|
43
|
+
export type ResponseType = keyof ResponseTypeMap;
|
|
44
|
+
/**
|
|
45
|
+
* Runtime error for unexpected response types.
|
|
46
|
+
*/
|
|
47
|
+
export declare class UnexpectedResponseError extends Error {
|
|
48
|
+
readonly _tag = "UnexpectedResponseError";
|
|
49
|
+
readonly expected: ResponseType;
|
|
50
|
+
readonly actual: string;
|
|
51
|
+
constructor(expected: ResponseType, actual: string);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Type guard to check if a response has a specific _type.
|
|
55
|
+
*/
|
|
56
|
+
export declare function isResponseType<T extends ResponseType>(response: JobResponse, expectedType: T): response is ResponseTypeMap[T];
|
|
57
|
+
/**
|
|
58
|
+
* Narrow a response to a specific type with runtime validation.
|
|
59
|
+
*
|
|
60
|
+
* This provides both compile-time type safety AND runtime validation,
|
|
61
|
+
* unlike raw type casts which only provide compile-time types.
|
|
62
|
+
*
|
|
63
|
+
* @throws UnexpectedResponseError if the response type doesn't match
|
|
64
|
+
*/
|
|
65
|
+
export declare function narrowResponse<T extends ResponseType>(response: JobResponse, expectedType: T): ResponseTypeMap[T];
|
|
66
|
+
/**
|
|
67
|
+
* Narrow a Promise<JobResponse> to a specific type.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* const response = await narrowResponseAsync(
|
|
72
|
+
* stub.call({ type: "continuous", action: "start", ... }),
|
|
73
|
+
* "continuous.start"
|
|
74
|
+
* );
|
|
75
|
+
* // response is typed as ContinuousStartResponse
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export declare function narrowResponseAsync<T extends ResponseType>(promise: Promise<JobResponse>, expectedType: T): Promise<ResponseTypeMap[T]>;
|
|
79
|
+
/**
|
|
80
|
+
* Combined error type for client operations.
|
|
81
|
+
*/
|
|
82
|
+
export type ClientError = JobCallError | UnexpectedResponseError;
|
|
83
|
+
/**
|
|
84
|
+
* Narrow a Promise<JobResponse> to a specific type, returning an Effect.
|
|
85
|
+
*
|
|
86
|
+
* This is the Effect-based version that properly handles errors and can be used
|
|
87
|
+
* with Effect.gen and yield*.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* const response = yield* narrowResponseEffect(
|
|
92
|
+
* stub.call({ type: "continuous", action: "start", ... }),
|
|
93
|
+
* "continuous.start"
|
|
94
|
+
* );
|
|
95
|
+
* // response is typed as ContinuousStartResponse
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
export declare function narrowResponseEffect<T extends ResponseType>(promise: Promise<JobResponse>, expectedType: T): Effect.Effect<ResponseTypeMap[T], ClientError>;
|
|
99
|
+
//# sourceMappingURL=response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/client/response.ts"],"names":[],"mappings":"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"}
|