@superdurable/dex 1.8.0 → 1.10.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.
@@ -0,0 +1,498 @@
1
+ // Copyright (c) 2026 Super Durable, Inc.
2
+ //
3
+ // Licensed under the Sustainable Use License 1.0.
4
+ // You may not use this file except in compliance with the License.
5
+ // See the LICENSE file in the repository root.
6
+ //
7
+ // SPDX-License-Identifier: LicenseRef-Sustainable-Use-1.0
8
+ import { randomBytes } from "node:crypto";
9
+ import { availableParallelism, hostname } from "node:os";
10
+ import { credentials, status, } from "@grpc/grpc-js";
11
+ import { credentialInterceptors } from "./credential.js";
12
+ import { registeredFlow } from "./flow.js";
13
+ import { InvokeExecuteMethodOutput, InvokeWaitForMethodOutput, PollWorkerTaskRejectReason, WorkerTaskServiceClient, } from "./gen/dex.js";
14
+ import { workerErrorResponse } from "./grpc-status.js";
15
+ import { sdkVersion } from "./sdk-version.generated.js";
16
+ export class PullWorker {
17
+ dispatcher;
18
+ appWorkerID;
19
+ client;
20
+ queues;
21
+ flowTypes;
22
+ maxConcurrentTasks;
23
+ idleStreamsPerQueue;
24
+ stopDrainTimeoutMs;
25
+ streams = new Set();
26
+ activeTasks = new Set();
27
+ isStopping = false;
28
+ stopDeadlineMs;
29
+ hasLoggedUnsupportedServer = false;
30
+ busyTaskCount = 0;
31
+ constructor(registry, dispatcher, serverAddress, options, credential) {
32
+ this.dispatcher = dispatcher;
33
+ this.maxConcurrentTasks = positiveOption(options.maxConcurrentTasks, availableParallelism(), "maxConcurrentTasks");
34
+ this.idleStreamsPerQueue = positiveOption(options.idleStreamsPerQueue, 1, "idleStreamsPerQueue");
35
+ this.stopDrainTimeoutMs = options.stopDrainTimeoutMs === undefined || options.stopDrainTimeoutMs === 0
36
+ ? 30_000 : options.stopDrainTimeoutMs;
37
+ if (!Number.isFinite(this.stopDrainTimeoutMs) || this.stopDrainTimeoutMs < 0) {
38
+ throw new RangeError("stopDrainTimeoutMs must not be negative");
39
+ }
40
+ this.flowTypes = registry.flows.map((flow) => registeredFlow(registry, flow).name).sort();
41
+ this.appWorkerID = options.appWorkerID || generateAppWorkerID();
42
+ if (!/^[A-Za-z0-9._-]{1,63}$/.test(this.appWorkerID)) {
43
+ throw new TypeError("appWorkerID must contain 1-63 ASCII letters, digits, dots, underscores, or hyphens");
44
+ }
45
+ if (this.flowTypes.includes(this.appWorkerID)) {
46
+ throw new TypeError(`appWorkerID conflicts with Flow type ${this.appWorkerID}`);
47
+ }
48
+ this.queues = [this.appWorkerID, ...this.flowTypes];
49
+ this.client = createWorkerTaskClient(serverAddress, credential);
50
+ }
51
+ start() {
52
+ this.reconcile();
53
+ }
54
+ async close() {
55
+ const stopDeadlineMs = this.stopDeadlineMs ??= Date.now() + this.stopDrainTimeoutMs;
56
+ this.isStopping = true;
57
+ for (const poll of this.streams) {
58
+ poll.isDraining = true;
59
+ if (poll.isHalfClosed)
60
+ this.armHalfCloseTimer(poll, stopDeadlineMs);
61
+ if (poll.retryTimer !== undefined) {
62
+ clearTimeout(poll.retryTimer);
63
+ poll.retryTimer = undefined;
64
+ }
65
+ if (poll.task === undefined && !poll.isDisconnected) {
66
+ this.halfCloseStream(poll);
67
+ }
68
+ }
69
+ if (this.activeTasks.size !== 0) {
70
+ const drained = Promise.allSettled([...this.activeTasks]);
71
+ let drainTimer;
72
+ const didDrain = await Promise.race([
73
+ drained.then(() => true),
74
+ new Promise((resolve) => {
75
+ drainTimer = setTimeout(() => resolve(false), Math.max(stopDeadlineMs - Date.now(), 0));
76
+ drainTimer.unref();
77
+ }),
78
+ ]);
79
+ if (drainTimer !== undefined)
80
+ clearTimeout(drainTimer);
81
+ if (!didDrain) {
82
+ for (const poll of this.streams) {
83
+ if (poll.task !== undefined) {
84
+ poll.task.controller.abort();
85
+ }
86
+ }
87
+ await drained;
88
+ }
89
+ }
90
+ await Promise.all([...this.streams].flatMap((poll) => poll.halfClosePromise === undefined ? [] : [poll.halfClosePromise]));
91
+ for (const poll of this.streams) {
92
+ if (!poll.isDisconnected)
93
+ this.closeStream(poll);
94
+ }
95
+ this.streams.clear();
96
+ this.client.close();
97
+ }
98
+ reconcile() {
99
+ if (this.isStopping)
100
+ return;
101
+ for (const queue of this.queues) {
102
+ let idleCount = 0;
103
+ for (const poll of this.streams) {
104
+ if (poll.queue === queue && poll.task === undefined && !poll.isDraining)
105
+ idleCount++;
106
+ }
107
+ while (idleCount < this.idleStreamsPerQueue) {
108
+ const poll = {
109
+ queue, stream: undefined, task: undefined, retryTimer: undefined,
110
+ halfCloseTimer: undefined, halfClosePromise: undefined, resolveHalfClose: undefined,
111
+ isRegistered: false, isDisconnected: false, isHalfClosed: false, isDraining: false,
112
+ isReconnectRequested: false,
113
+ backoffMs: 100, failure: undefined,
114
+ };
115
+ this.streams.add(poll);
116
+ this.openStream(poll);
117
+ idleCount++;
118
+ }
119
+ }
120
+ }
121
+ openStream(poll) {
122
+ if (this.isStopping)
123
+ return;
124
+ poll.isRegistered = false;
125
+ poll.isDisconnected = false;
126
+ poll.isHalfClosed = false;
127
+ poll.failure = undefined;
128
+ poll.isDraining = false;
129
+ poll.isReconnectRequested = false;
130
+ const stream = this.client.pollWorkerTask();
131
+ poll.stream = stream;
132
+ stream.on("data", (response) => {
133
+ if (poll.stream === stream)
134
+ this.handleFrame(poll, response);
135
+ });
136
+ stream.on("error", (failure) => {
137
+ if (poll.stream !== stream)
138
+ return;
139
+ poll.failure = failure;
140
+ this.onStreamClosed(poll);
141
+ });
142
+ stream.on("end", () => {
143
+ if (poll.stream === stream)
144
+ this.onStreamClosed(poll);
145
+ });
146
+ try {
147
+ stream.write({ frame: { $case: "register", value: {
148
+ queue: poll.queue,
149
+ appWorkerId: this.appWorkerID,
150
+ flowTypes: [...this.flowTypes],
151
+ sdkName: "typescript",
152
+ sdkVersion,
153
+ } } });
154
+ }
155
+ catch (failure) {
156
+ console.error("Worker task registration failed", failure);
157
+ this.disconnect(poll);
158
+ }
159
+ }
160
+ handleFrame(poll, response) {
161
+ if (poll.isDisconnected || this.isStopping && poll.task === undefined)
162
+ return;
163
+ const frame = response.frame;
164
+ if (!poll.isRegistered) {
165
+ if (frame?.$case === "reconnect") {
166
+ poll.isReconnectRequested = true;
167
+ this.halfCloseStream(poll);
168
+ }
169
+ else if (frame?.$case === "registered") {
170
+ poll.isRegistered = true;
171
+ poll.backoffMs = 100;
172
+ }
173
+ else {
174
+ console.error("Worker task stream did not register");
175
+ this.closeStream(poll);
176
+ this.scheduleReconnect(poll);
177
+ }
178
+ return;
179
+ }
180
+ switch (frame?.$case) {
181
+ case "task":
182
+ this.startTask(poll, frame.value);
183
+ break;
184
+ case "cancelTask":
185
+ if (poll.task?.id === frame.value.taskId)
186
+ poll.task.controller.abort();
187
+ break;
188
+ case "ping":
189
+ try {
190
+ this.send(poll, { frame: { $case: "pong", value: {} } });
191
+ }
192
+ catch (failure) {
193
+ console.error("send Worker task Pong", failure);
194
+ this.disconnect(poll);
195
+ }
196
+ break;
197
+ case "reconnect":
198
+ poll.isDraining = true;
199
+ poll.isReconnectRequested = true;
200
+ if (poll.task === undefined) {
201
+ this.halfCloseStream(poll);
202
+ }
203
+ else {
204
+ this.reconcile();
205
+ }
206
+ break;
207
+ default:
208
+ break;
209
+ }
210
+ }
211
+ startTask(poll, task) {
212
+ if (poll.task !== undefined || poll.isDraining || this.isStopping || this.busyTaskCount >= this.maxConcurrentTasks) {
213
+ try {
214
+ this.send(poll, { frame: { $case: "reject", value: {
215
+ taskId: task.taskId,
216
+ reason: PollWorkerTaskRejectReason.POLL_WORKER_TASK_REJECT_REASON_NO_CAPACITY,
217
+ } } });
218
+ }
219
+ catch (failure) {
220
+ console.error("reject Worker task", failure);
221
+ this.disconnect(poll);
222
+ }
223
+ return;
224
+ }
225
+ const controller = new AbortController();
226
+ const deadlineMs = task.deadline?.getTime();
227
+ const deadlineCancellation = deadlineMs === undefined
228
+ ? undefined
229
+ : new DeadlineCancellation(deadlineMs, controller);
230
+ const completion = this.executeTask(poll, task, controller.signal).finally(() => this.finishTask(poll));
231
+ poll.task = { id: task.taskId, controller, completion, deadlineCancellation };
232
+ this.activeTasks.add(completion);
233
+ this.busyTaskCount++;
234
+ this.reconcile();
235
+ }
236
+ async executeTask(poll, task, signal) {
237
+ try {
238
+ switch (task.request?.$case) {
239
+ case "waitFor": {
240
+ const emitter = new PullStepOutputEmitter(poll, task.taskId, "waitFor", (frame) => this.sendTaskFrame(poll, frame));
241
+ const result = await this.dispatcher.invokeWaitFor(task.request.value, signal, emitter);
242
+ this.sendTaskFrame(poll, { taskId: task.taskId, output: {
243
+ $case: "waitFor", value: InvokeWaitForMethodOutput.create({ output: { $case: "result", value: result } }),
244
+ } });
245
+ break;
246
+ }
247
+ case "execute": {
248
+ const emitter = new PullStepOutputEmitter(poll, task.taskId, "execute", (frame) => this.sendTaskFrame(poll, frame));
249
+ const result = await this.dispatcher.invokeExecute(task.request.value, signal, emitter);
250
+ this.sendTaskFrame(poll, { taskId: task.taskId, output: {
251
+ $case: "execute", value: InvokeExecuteMethodOutput.create({ output: { $case: "result", value: result } }),
252
+ } });
253
+ break;
254
+ }
255
+ case "rpc": {
256
+ const result = await this.dispatcher.invokeRPC(task.request.value, signal);
257
+ this.sendTaskFrame(poll, { taskId: task.taskId, output: { $case: "rpc", value: result } });
258
+ break;
259
+ }
260
+ default:
261
+ throw new TypeError("unsupported Worker task request");
262
+ }
263
+ }
264
+ catch (failure) {
265
+ if (!poll.isDisconnected) {
266
+ try {
267
+ const grpcStatus = poll.task?.deadlineCancellation?.hasExpired === true
268
+ ? status.DEADLINE_EXCEEDED : signal.aborted ? status.CANCELLED : status.UNKNOWN;
269
+ this.sendTaskFrame(poll, { taskId: task.taskId, output: {
270
+ $case: "workerError", value: workerErrorResponse(failure, grpcStatus),
271
+ } });
272
+ }
273
+ catch (sendFailure) {
274
+ console.error("send Worker error", sendFailure);
275
+ this.disconnect(poll);
276
+ }
277
+ }
278
+ }
279
+ }
280
+ finishTask(poll) {
281
+ const task = poll.task;
282
+ if (task === undefined)
283
+ return;
284
+ task.deadlineCancellation?.stop();
285
+ poll.task = undefined;
286
+ this.activeTasks.delete(task.completion);
287
+ this.busyTaskCount--;
288
+ if (poll.isDisconnected) {
289
+ if (!this.isStopping)
290
+ this.scheduleReconnect(poll);
291
+ }
292
+ else if (this.isStopping || poll.isDraining) {
293
+ this.halfCloseStream(poll);
294
+ }
295
+ this.reconcile();
296
+ }
297
+ sendTaskFrame(poll, frame) {
298
+ this.send(poll, { frame: { $case: "taskFrame", value: frame } });
299
+ }
300
+ send(poll, request) {
301
+ if (poll.isDisconnected || poll.stream === undefined) {
302
+ throw new Error("Worker task stream is closed");
303
+ }
304
+ poll.stream.write(request);
305
+ }
306
+ disconnect(poll) {
307
+ if (poll.isDisconnected)
308
+ return;
309
+ poll.isDisconnected = true;
310
+ poll.stream?.cancel();
311
+ poll.task?.controller.abort();
312
+ if (this.isStopping)
313
+ return;
314
+ if (poll.task === undefined)
315
+ this.scheduleReconnect(poll);
316
+ }
317
+ onStreamClosed(poll) {
318
+ if (poll.isHalfClosed) {
319
+ this.completeHalfClose(poll);
320
+ return;
321
+ }
322
+ if (poll.isDisconnected)
323
+ return;
324
+ poll.isDisconnected = true;
325
+ poll.task?.controller.abort();
326
+ if (!this.isStopping && poll.task === undefined)
327
+ this.scheduleReconnect(poll);
328
+ }
329
+ halfCloseStream(poll) {
330
+ if (poll.isHalfClosed || poll.stream === undefined)
331
+ return;
332
+ poll.isDisconnected = true;
333
+ poll.isHalfClosed = true;
334
+ poll.halfClosePromise = new Promise((resolve) => { poll.resolveHalfClose = resolve; });
335
+ const stream = poll.stream;
336
+ this.armHalfCloseTimer(poll, this.stopDeadlineMs ?? Date.now() + this.stopDrainTimeoutMs);
337
+ stream.end();
338
+ }
339
+ armHalfCloseTimer(poll, deadlineMs) {
340
+ if (poll.halfCloseTimer !== undefined)
341
+ clearTimeout(poll.halfCloseTimer);
342
+ const remainingMs = deadlineMs - Date.now();
343
+ poll.halfCloseTimer = setTimeout(() => {
344
+ if (!poll.isHalfClosed)
345
+ return;
346
+ if (Date.now() < deadlineMs) {
347
+ this.armHalfCloseTimer(poll, deadlineMs);
348
+ return;
349
+ }
350
+ poll.stream?.cancel();
351
+ this.completeHalfClose(poll);
352
+ }, Math.min(Math.max(remainingMs, 0), 2_147_483_647));
353
+ poll.halfCloseTimer.unref();
354
+ }
355
+ completeHalfClose(poll) {
356
+ if (!poll.isHalfClosed)
357
+ return;
358
+ poll.isHalfClosed = false;
359
+ if (poll.halfCloseTimer !== undefined)
360
+ clearTimeout(poll.halfCloseTimer);
361
+ poll.halfCloseTimer = undefined;
362
+ poll.resolveHalfClose?.();
363
+ poll.resolveHalfClose = undefined;
364
+ poll.halfClosePromise = undefined;
365
+ poll.stream = undefined;
366
+ if (!this.isStopping) {
367
+ const idleStreamCount = [...this.streams].filter((candidate) => candidate !== poll && candidate.queue === poll.queue && candidate.task === undefined && !candidate.isDraining).length;
368
+ if (poll.isReconnectRequested && idleStreamCount >= this.idleStreamsPerQueue) {
369
+ this.streams.delete(poll);
370
+ }
371
+ else {
372
+ this.scheduleReconnect(poll);
373
+ }
374
+ }
375
+ }
376
+ scheduleReconnect(poll) {
377
+ if (this.isStopping || poll.retryTimer !== undefined)
378
+ return;
379
+ if (poll.isReconnectRequested)
380
+ poll.backoffMs = 100;
381
+ const failure = poll.failure;
382
+ let delayMs;
383
+ if (failure?.code === status.UNIMPLEMENTED) {
384
+ if (!this.hasLoggedUnsupportedServer) {
385
+ this.hasLoggedUnsupportedServer = true;
386
+ console.error("pull Worker polling is unsupported by this Dex server", failure);
387
+ }
388
+ delayMs = 60_000 + Math.floor(Math.random() * 30_000);
389
+ }
390
+ else if (failure !== undefined && [
391
+ status.UNAUTHENTICATED, status.PERMISSION_DENIED, status.INVALID_ARGUMENT,
392
+ status.RESOURCE_EXHAUSTED,
393
+ ].includes(failure.code)) {
394
+ console.error("Worker task stream rejected", poll.queue, failure);
395
+ delayMs = 60_000 + Math.floor(Math.random() * 30_000);
396
+ }
397
+ else {
398
+ if (failure !== undefined && failure.code !== status.CANCELLED) {
399
+ console.warn("Worker task stream disconnected", poll.queue, failure);
400
+ }
401
+ delayMs = poll.backoffMs + Math.floor(Math.random() * poll.backoffMs / 2);
402
+ poll.backoffMs = Math.min(poll.backoffMs * 2, 5_000);
403
+ }
404
+ poll.retryTimer = setTimeout(() => {
405
+ poll.retryTimer = undefined;
406
+ this.openStream(poll);
407
+ }, delayMs);
408
+ }
409
+ closeStream(poll) {
410
+ poll.isDisconnected = true;
411
+ poll.stream?.cancel();
412
+ if (poll.isHalfClosed)
413
+ this.completeHalfClose(poll);
414
+ if (poll.retryTimer !== undefined) {
415
+ clearTimeout(poll.retryTimer);
416
+ poll.retryTimer = undefined;
417
+ }
418
+ }
419
+ }
420
+ class PullStepOutputEmitter {
421
+ poll;
422
+ taskID;
423
+ method;
424
+ sendFrame;
425
+ constructor(poll, taskID, method, sendFrame) {
426
+ this.poll = poll;
427
+ this.taskID = taskID;
428
+ this.method = method;
429
+ this.sendFrame = sendFrame;
430
+ }
431
+ recordHeartbeat(value) {
432
+ this.sendOutput({ $case: "heartbeat", value: { value } });
433
+ return Promise.resolve();
434
+ }
435
+ writeStream(write) {
436
+ this.sendOutput({ $case: "streamWrite", value: write });
437
+ }
438
+ sendOutput(output) {
439
+ if (this.poll.isDisconnected)
440
+ throw new Error("Worker task stream is closed");
441
+ const value = this.method === "waitFor"
442
+ ? { $case: "waitFor", value: InvokeWaitForMethodOutput.create({ output }) }
443
+ : { $case: "execute", value: InvokeExecuteMethodOutput.create({ output }) };
444
+ this.sendFrame({ taskId: this.taskID, output: value });
445
+ }
446
+ }
447
+ class DeadlineCancellation {
448
+ deadlineMs;
449
+ controller;
450
+ hasExpired = false;
451
+ timer;
452
+ constructor(deadlineMs, controller) {
453
+ this.deadlineMs = deadlineMs;
454
+ this.controller = controller;
455
+ this.schedule();
456
+ }
457
+ stop() {
458
+ if (this.timer !== undefined)
459
+ clearTimeout(this.timer);
460
+ }
461
+ schedule() {
462
+ const remainingMs = this.deadlineMs - Date.now();
463
+ if (remainingMs <= 0) {
464
+ this.hasExpired = true;
465
+ this.controller.abort();
466
+ }
467
+ else {
468
+ this.timer = setTimeout(() => this.schedule(), Math.min(remainingMs, 2_147_483_647));
469
+ }
470
+ }
471
+ }
472
+ function positiveOption(value, defaultValue, name) {
473
+ if (value === undefined || value === 0)
474
+ return defaultValue;
475
+ if (!Number.isSafeInteger(value) || value < 0)
476
+ throw new RangeError(`${name} must be a non-negative integer`);
477
+ return value;
478
+ }
479
+ function generateAppWorkerID() {
480
+ const identity = [process.env.DEX_WORKER_INSTANCE, process.env.POD_NAME, process.env.HOSTNAME, hostname()]
481
+ .find((candidate) => candidate !== undefined && candidate.trim() !== "") ?? "worker";
482
+ const sanitized = identity.toLowerCase().replace(/[^a-z0-9-]+/g, "-").slice(0, 54).replace(/^-+|-+$/g, "") || "worker";
483
+ const alphabet = "abcdefghijklmnopqrstuvwxyz234567";
484
+ const bytes = randomBytes(5);
485
+ let bits = 0n;
486
+ for (const byte of bytes)
487
+ bits = bits << 8n | BigInt(byte);
488
+ let suffix = "";
489
+ for (let shift = 35n; shift >= 0n; shift -= 5n)
490
+ suffix += alphabet[Number(bits >> shift & 31n)];
491
+ return `${sanitized}-${suffix}`;
492
+ }
493
+ function createWorkerTaskClient(serverAddress, credential) {
494
+ return new WorkerTaskServiceClient(serverAddress, credentials.createInsecure(), {
495
+ interceptors: credentialInterceptors(credential),
496
+ });
497
+ }
498
+ //# sourceMappingURL=pull-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-worker.js","sourceRoot":"","sources":["../../src/pull-worker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- export declare const sdkVersion = "1.8.0";
1
+ export declare const sdkVersion = "1.10.0";
@@ -6,5 +6,5 @@
6
6
  //
7
7
  // SPDX-License-Identifier: LicenseRef-Sustainable-Use-1.0
8
8
  // Generated by scripts/write-sdk-version.mjs.
9
- export const sdkVersion = "1.8.0";
9
+ export const sdkVersion = "1.10.0";
10
10
  //# sourceMappingURL=sdk-version.generated.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-version.generated.js","sourceRoot":"","sources":["../../src/sdk-version.generated.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,kDAAkD;AAClD,mEAAmE;AACnE,+CAA+C;AAC/C,EAAE;AACF,0DAA0D;AAE1D,8CAA8C;AAC9C,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"sdk-version.generated.js","sourceRoot":"","sources":["../../src/sdk-version.generated.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,kDAAkD;AAClD,mEAAmE;AACnE,+CAA+C;AAC/C,EAAE;AACF,0DAA0D;AAE1D,8CAA8C;AAC9C,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC"}
@@ -13,6 +13,7 @@ import { AttributeMap, IndexType, } from "./persistence.js";
13
13
  import { mapAttributeStoreNames, mapAttributeStoreSync } from "./attribute-store-sync.js";
14
14
  import { ActiveStepSearchMode, FlowTimeoutPolicy, } from "./options.js";
15
15
  import { SubFlowReusePolicy } from "./subflow.js";
16
+ import { mapWorkerTarget } from "./worker-target.js";
16
17
  import { voidCodec } from "./codec.js";
17
18
  import { codecOrJson, decodeValue, encodeUnknown, encodeValue, } from "./value-mapper.js";
18
19
  import { Channel, ChannelMap } from "./wait.js";
@@ -719,10 +720,7 @@ function mapSubFlowConfig(config) {
719
720
  : undefined,
720
721
  workerTarget: config.workerTarget === undefined
721
722
  ? undefined
722
- : {
723
- address: config.workerTarget.address,
724
- isHeadlessAddress: config.workerTarget.headless ?? false,
725
- },
723
+ : mapWorkerTarget(config.workerTarget),
726
724
  });
727
725
  }
728
726
  function mapIndex(index) {