@dudousxd/nestjs-durable-core 0.27.1 → 0.28.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.
Files changed (113) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.cjs +3923 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.cts +2044 -0
  5. package/dist/index.d.ts +2044 -20
  6. package/dist/index.js +3857 -38
  7. package/dist/index.js.map +1 -1
  8. package/package.json +19 -5
  9. package/dist/backoff.d.ts +0 -5
  10. package/dist/backoff.d.ts.map +0 -1
  11. package/dist/backoff.js +0 -14
  12. package/dist/backoff.js.map +0 -1
  13. package/dist/checkpoints.d.ts +0 -17
  14. package/dist/checkpoints.d.ts.map +0 -1
  15. package/dist/checkpoints.js +0 -28
  16. package/dist/checkpoints.js.map +0 -1
  17. package/dist/codec-state-store.d.ts +0 -57
  18. package/dist/codec-state-store.d.ts.map +0 -1
  19. package/dist/codec-state-store.js +0 -111
  20. package/dist/codec-state-store.js.map +0 -1
  21. package/dist/completion.d.ts +0 -15
  22. package/dist/completion.d.ts.map +0 -1
  23. package/dist/completion.js +0 -13
  24. package/dist/completion.js.map +0 -1
  25. package/dist/duration.d.ts +0 -6
  26. package/dist/duration.d.ts.map +0 -1
  27. package/dist/duration.js +0 -42
  28. package/dist/duration.js.map +0 -1
  29. package/dist/engine.d.ts +0 -525
  30. package/dist/engine.d.ts.map +0 -1
  31. package/dist/engine.js +0 -1785
  32. package/dist/engine.js.map +0 -1
  33. package/dist/entities.d.ts +0 -44
  34. package/dist/entities.d.ts.map +0 -1
  35. package/dist/entities.js +0 -68
  36. package/dist/entities.js.map +0 -1
  37. package/dist/errors.d.ts +0 -56
  38. package/dist/errors.d.ts.map +0 -1
  39. package/dist/errors.js +0 -93
  40. package/dist/errors.js.map +0 -1
  41. package/dist/event-accumulators.d.ts +0 -39
  42. package/dist/event-accumulators.d.ts.map +0 -1
  43. package/dist/event-accumulators.js +0 -74
  44. package/dist/event-accumulators.js.map +0 -1
  45. package/dist/events.d.ts +0 -9
  46. package/dist/events.d.ts.map +0 -1
  47. package/dist/events.js +0 -41
  48. package/dist/events.js.map +0 -1
  49. package/dist/index.d.ts.map +0 -1
  50. package/dist/interfaces.d.ts +0 -830
  51. package/dist/interfaces.d.ts.map +0 -1
  52. package/dist/interfaces.js +0 -3
  53. package/dist/interfaces.js.map +0 -1
  54. package/dist/metrics.d.ts +0 -44
  55. package/dist/metrics.d.ts.map +0 -1
  56. package/dist/metrics.js +0 -76
  57. package/dist/metrics.js.map +0 -1
  58. package/dist/protocol.d.ts +0 -17
  59. package/dist/protocol.d.ts.map +0 -1
  60. package/dist/protocol.js +0 -53
  61. package/dist/protocol.js.map +0 -1
  62. package/dist/queue.d.ts +0 -48
  63. package/dist/queue.d.ts.map +0 -1
  64. package/dist/queue.js +0 -45
  65. package/dist/queue.js.map +0 -1
  66. package/dist/remote-step-factory.d.ts +0 -15
  67. package/dist/remote-step-factory.d.ts.map +0 -1
  68. package/dist/remote-step-factory.js +0 -15
  69. package/dist/remote-step-factory.js.map +0 -1
  70. package/dist/remote-workflow-executor.d.ts +0 -24
  71. package/dist/remote-workflow-executor.d.ts.map +0 -1
  72. package/dist/remote-workflow-executor.js +0 -73
  73. package/dist/remote-workflow-executor.js.map +0 -1
  74. package/dist/scheduler.d.ts +0 -42
  75. package/dist/scheduler.d.ts.map +0 -1
  76. package/dist/scheduler.js +0 -70
  77. package/dist/scheduler.js.map +0 -1
  78. package/dist/search-attributes.d.ts +0 -17
  79. package/dist/search-attributes.d.ts.map +0 -1
  80. package/dist/search-attributes.js +0 -47
  81. package/dist/search-attributes.js.map +0 -1
  82. package/dist/step-logger.d.ts +0 -9
  83. package/dist/step-logger.d.ts.map +0 -1
  84. package/dist/step-logger.js +0 -92
  85. package/dist/step-logger.js.map +0 -1
  86. package/dist/test-helpers.d.ts +0 -11
  87. package/dist/test-helpers.d.ts.map +0 -1
  88. package/dist/test-helpers.js +0 -15
  89. package/dist/test-helpers.js.map +0 -1
  90. package/dist/testing/in-memory-state-store.d.ts +0 -37
  91. package/dist/testing/in-memory-state-store.d.ts.map +0 -1
  92. package/dist/testing/in-memory-state-store.js +0 -134
  93. package/dist/testing/in-memory-state-store.js.map +0 -1
  94. package/dist/testing/in-memory-transport.d.ts +0 -25
  95. package/dist/testing/in-memory-transport.d.ts.map +0 -1
  96. package/dist/testing/in-memory-transport.js +0 -53
  97. package/dist/testing/in-memory-transport.js.map +0 -1
  98. package/dist/tokens.d.ts +0 -8
  99. package/dist/tokens.d.ts.map +0 -1
  100. package/dist/tokens.js +0 -11
  101. package/dist/tokens.js.map +0 -1
  102. package/dist/transport-pool.d.ts +0 -30
  103. package/dist/transport-pool.d.ts.map +0 -1
  104. package/dist/transport-pool.js +0 -86
  105. package/dist/transport-pool.js.map +0 -1
  106. package/dist/workflow-ctx.d.ts +0 -61
  107. package/dist/workflow-ctx.d.ts.map +0 -1
  108. package/dist/workflow-ctx.js +0 -451
  109. package/dist/workflow-ctx.js.map +0 -1
  110. package/dist/workflow-ref.d.ts +0 -34
  111. package/dist/workflow-ref.d.ts.map +0 -1
  112. package/dist/workflow-ref.js +0 -32
  113. package/dist/workflow-ref.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dudousxd/nestjs-durable-core",
3
- "version": "0.27.1",
3
+ "version": "0.28.0",
4
4
  "description": "Durable workflows for NestJS — core interfaces, engine and deterministic replay",
5
5
  "license": "MIT",
6
6
  "author": "Davide Carvalho",
@@ -9,9 +9,22 @@
9
9
  "url": "https://github.com/DavideCarvalho/nestjs-durable.git",
10
10
  "directory": "packages/core"
11
11
  },
12
- "type": "commonjs",
13
- "main": "dist/index.js",
14
- "types": "dist/index.d.ts",
12
+ "type": "module",
13
+ "main": "./dist/index.cjs",
14
+ "module": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "import": {
19
+ "types": "./dist/index.d.ts",
20
+ "default": "./dist/index.js"
21
+ },
22
+ "require": {
23
+ "types": "./dist/index.d.cts",
24
+ "default": "./dist/index.cjs"
25
+ }
26
+ }
27
+ },
15
28
  "files": [
16
29
  "dist"
17
30
  ],
@@ -28,11 +41,12 @@
28
41
  "devDependencies": {
29
42
  "cron-parser": "4.9.0",
30
43
  "reflect-metadata": "0.2.2",
44
+ "tsup": "8.3.5",
31
45
  "typescript": "5.9.3",
32
46
  "zod": "3.25.76"
33
47
  },
34
48
  "scripts": {
35
- "build": "tsc -p tsconfig.json",
49
+ "build": "tsup",
36
50
  "typecheck": "tsc -p tsconfig.json --noEmit"
37
51
  }
38
52
  }
package/dist/backoff.d.ts DELETED
@@ -1,5 +0,0 @@
1
- import type { StepOptions } from './interfaces';
2
- /** Delay in ms before the next retry attempt, per a step's `StepOptions` backoff config. Shared by
3
- * the local-step retry loop and the durable remote-step retry, so they stay consistent. */
4
- export declare function backoffDelay(attempt: number, options?: StepOptions): number;
5
- //# sourceMappingURL=backoff.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"backoff.d.ts","sourceRoot":"","sources":["../src/backoff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD;4FAC4F;AAC5F,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CAM3E"}
package/dist/backoff.js DELETED
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.backoffDelay = backoffDelay;
4
- /** Delay in ms before the next retry attempt, per a step's `StepOptions` backoff config. Shared by
5
- * the local-step retry loop and the durable remote-step retry, so they stay consistent. */
6
- function backoffDelay(attempt, options) {
7
- const base = options?.backoffMs ?? 0;
8
- if (base <= 0)
9
- return 0;
10
- const raw = options?.backoff === 'exp' ? base * 2 ** (attempt - 1) : base;
11
- const capped = options?.backoffMaxMs ? Math.min(raw, options.backoffMaxMs) : raw;
12
- return options?.jitter ? Math.round(capped * (0.5 + Math.random() * 0.5)) : capped;
13
- }
14
- //# sourceMappingURL=backoff.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"backoff.js","sourceRoot":"","sources":["../src/backoff.ts"],"names":[],"mappings":";;AAIA,oCAMC;AARD;4FAC4F;AAC5F,SAAgB,YAAY,CAAC,OAAe,EAAE,OAAqB;IACjE,MAAM,IAAI,GAAG,OAAO,EAAE,SAAS,IAAI,CAAC,CAAC;IACrC,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,OAAO,EAAE,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,MAAM,MAAM,GAAG,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjF,OAAO,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACrF,CAAC"}
@@ -1,17 +0,0 @@
1
- import type { StepCheckpoint, StepKind } from './interfaces';
2
- /**
3
- * Build an *instantaneous* checkpoint — one with no distinct enqueue/run/finish phases (a durable
4
- * sleep timer, a breakpoint marker, a delivered signal, a published `setEvent` value, a `patched`
5
- * marker). All three timestamps collapse to now and `attempts` is 1. Collapses what was five
6
- * near-identical 10-field `saveCheckpoint({...})` literals into one builder.
7
- */
8
- export declare function instantCheckpoint(p: {
9
- runId: string;
10
- seq: number;
11
- name: string;
12
- kind: StepKind;
13
- status?: StepCheckpoint['status'];
14
- output?: unknown;
15
- wakeAt?: number;
16
- }): StepCheckpoint;
17
- //# sourceMappingURL=checkpoints.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkpoints.d.ts","sourceRoot":"","sources":["../src/checkpoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7D;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,cAAc,CAgBjB"}
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.instantCheckpoint = instantCheckpoint;
4
- const protocol_1 = require("./protocol");
5
- /**
6
- * Build an *instantaneous* checkpoint — one with no distinct enqueue/run/finish phases (a durable
7
- * sleep timer, a breakpoint marker, a delivered signal, a published `setEvent` value, a `patched`
8
- * marker). All three timestamps collapse to now and `attempts` is 1. Collapses what was five
9
- * near-identical 10-field `saveCheckpoint({...})` literals into one builder.
10
- */
11
- function instantCheckpoint(p) {
12
- const at = new Date();
13
- return {
14
- runId: p.runId,
15
- seq: p.seq,
16
- name: p.name,
17
- kind: p.kind,
18
- stepId: (0, protocol_1.stepId)(p.runId, p.seq),
19
- status: p.status ?? 'completed',
20
- output: p.output,
21
- wakeAt: p.wakeAt,
22
- attempts: 1,
23
- enqueuedAt: at,
24
- startedAt: at,
25
- finishedAt: at,
26
- };
27
- }
28
- //# sourceMappingURL=checkpoints.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkpoints.js","sourceRoot":"","sources":["../src/checkpoints.ts"],"names":[],"mappings":";;AASA,8CAwBC;AAhCD,yCAAoC;AAEpC;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,CAQjC;IACC,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;IACtB,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,IAAA,iBAAM,EAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC;QAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,WAAW;QAC/B,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,EAAE;KACf,CAAC;AACJ,CAAC"}
@@ -1,57 +0,0 @@
1
- import type { RunQuery, SignalWaiter, StateStore, StepCheckpoint, WorkflowRun } from './interfaces';
2
- /**
3
- * Transforms a payload value as it crosses the store boundary — e.g. encrypt-at-rest, compress, or
4
- * redact PII. `decode` must be the exact inverse of `encode`. Both are synchronous (use a local
5
- * cipher / codec); wrap an async KMS yourself if you need one.
6
- */
7
- export interface PayloadCodec {
8
- encode(value: unknown): unknown;
9
- decode(value: unknown): unknown;
10
- }
11
- /**
12
- * A `StateStore` decorator that runs run/step **payloads** (input + output) through a
13
- * {@link PayloadCodec} — encoded on write, decoded on read — so they're never stored in the clear.
14
- * Adapter-agnostic: wrap any store. Searchable metadata (id, status, workflow, tags, timestamps) and
15
- * the structured `error` are left untouched so the dashboard, queries, and recovery still work.
16
- *
17
- * ```ts
18
- * const store = new CodecStateStore(new TypeOrmStateStore(ds), aesCodec);
19
- * ```
20
- */
21
- export declare class CodecStateStore implements StateStore {
22
- private readonly inner;
23
- private readonly codec;
24
- constructor(inner: StateStore, codec: PayloadCodec);
25
- private enc;
26
- private dec;
27
- private encRun;
28
- private decRun;
29
- private encCp;
30
- private decCp;
31
- ensureSchema(): Promise<void>;
32
- createRun(run: WorkflowRun): Promise<void>;
33
- updateRun(runId: string, patch: Partial<WorkflowRun>): Promise<void>;
34
- getRun(runId: string): Promise<WorkflowRun | null>;
35
- getCheckpoint(runId: string, seq: number): Promise<StepCheckpoint | null>;
36
- saveCheckpoint(checkpoint: StepCheckpoint): Promise<void>;
37
- transaction<T>(work: (tx: {
38
- raw: unknown;
39
- saveCheckpoint: (cp: StepCheckpoint) => Promise<void>;
40
- }) => Promise<T>): Promise<T>;
41
- listIncompleteRuns(): Promise<WorkflowRun[]>;
42
- listPendingRuns(limit: number): Promise<WorkflowRun[]>;
43
- listDueTimers(nowMs: number): Promise<WorkflowRun[]>;
44
- tryLockRun(runId: string, owner: string, leaseUntilMs: number, nowMs: number): Promise<boolean>;
45
- releaseRunLock(runId: string): Promise<void>;
46
- renewRunLock(runId: string, owner: string, leaseUntilMs: number): Promise<boolean>;
47
- putSignalWaiter(waiter: SignalWaiter): Promise<void>;
48
- takeSignalWaiter(token: string): Promise<SignalWaiter | null>;
49
- listSignalWaiters(prefix: string): Promise<SignalWaiter[]>;
50
- bufferSignal(token: string, payload: unknown): Promise<void>;
51
- takeBufferedSignal(token: string): Promise<{
52
- payload: unknown;
53
- } | null>;
54
- listRuns(query: RunQuery): Promise<WorkflowRun[]>;
55
- listCheckpoints(runId: string): Promise<StepCheckpoint[]>;
56
- }
57
- //# sourceMappingURL=codec-state-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codec-state-store.d.ts","sourceRoot":"","sources":["../src/codec-state-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEpG;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAChC,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAE9C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,YAAY;IAGtC,OAAO,CAAC,GAAG;IAGX,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,MAAM;IAGd,OAAO,CAAC,MAAM;IAGd,OAAO,CAAC,KAAK;IAGb,OAAO,CAAC,KAAK;IAIb,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAG1C,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9D,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAGlD,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAG/E,cAAc,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAGzD,WAAW,CAAC,CAAC,EACX,IAAI,EAAE,CAAC,EAAE,EAAE;QACT,GAAG,EAAE,OAAO,CAAC;QACb,cAAc,EAAE,CAAC,EAAE,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACvD,KAAK,OAAO,CAAC,CAAC,CAAC,GACf,OAAO,CAAC,CAAC,CAAC;IASP,kBAAkB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAG5C,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAGtD,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAG1D,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAG/F,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAG5C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAGlF,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAGpD,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAG7D,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAG1D,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAGtD,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAIvE,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAGjD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAGhE"}
@@ -1,111 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CodecStateStore = void 0;
4
- /**
5
- * A `StateStore` decorator that runs run/step **payloads** (input + output) through a
6
- * {@link PayloadCodec} — encoded on write, decoded on read — so they're never stored in the clear.
7
- * Adapter-agnostic: wrap any store. Searchable metadata (id, status, workflow, tags, timestamps) and
8
- * the structured `error` are left untouched so the dashboard, queries, and recovery still work.
9
- *
10
- * ```ts
11
- * const store = new CodecStateStore(new TypeOrmStateStore(ds), aesCodec);
12
- * ```
13
- */
14
- class CodecStateStore {
15
- inner;
16
- codec;
17
- constructor(inner, codec) {
18
- this.inner = inner;
19
- this.codec = codec;
20
- }
21
- enc(v) {
22
- return v === undefined ? undefined : this.codec.encode(v);
23
- }
24
- dec(v) {
25
- return v === undefined ? undefined : this.codec.decode(v);
26
- }
27
- encRun(run) {
28
- return { ...run, input: this.enc(run.input), output: this.enc(run.output) };
29
- }
30
- decRun(run) {
31
- return (run && { ...run, input: this.dec(run.input), output: this.dec(run.output) });
32
- }
33
- encCp(cp) {
34
- return { ...cp, input: this.enc(cp.input), output: this.enc(cp.output) };
35
- }
36
- decCp(cp) {
37
- return (cp && { ...cp, input: this.dec(cp.input), output: this.dec(cp.output) });
38
- }
39
- ensureSchema() {
40
- return this.inner.ensureSchema?.() ?? Promise.resolve();
41
- }
42
- createRun(run) {
43
- return this.inner.createRun(this.encRun(run));
44
- }
45
- updateRun(runId, patch) {
46
- const next = { ...patch };
47
- if ('input' in patch)
48
- next.input = this.enc(patch.input);
49
- if ('output' in patch)
50
- next.output = this.enc(patch.output);
51
- return this.inner.updateRun(runId, next);
52
- }
53
- async getRun(runId) {
54
- return this.decRun(await this.inner.getRun(runId));
55
- }
56
- async getCheckpoint(runId, seq) {
57
- return this.decCp(await this.inner.getCheckpoint(runId, seq));
58
- }
59
- saveCheckpoint(checkpoint) {
60
- return this.inner.saveCheckpoint(this.encCp(checkpoint));
61
- }
62
- transaction(work) {
63
- if (!this.inner.transaction) {
64
- throw new Error('the wrapped store does not support transactions');
65
- }
66
- // Encode the checkpoint inside the tx, so payloads stay encoded at rest like the normal path.
67
- return this.inner.transaction((tx) => work({ raw: tx.raw, saveCheckpoint: (cp) => tx.saveCheckpoint(this.encCp(cp)) }));
68
- }
69
- async listIncompleteRuns() {
70
- return (await this.inner.listIncompleteRuns()).map((r) => this.decRun(r));
71
- }
72
- async listPendingRuns(limit) {
73
- return (await this.inner.listPendingRuns(limit)).map((r) => this.decRun(r));
74
- }
75
- async listDueTimers(nowMs) {
76
- return (await this.inner.listDueTimers(nowMs)).map((r) => this.decRun(r));
77
- }
78
- tryLockRun(runId, owner, leaseUntilMs, nowMs) {
79
- return this.inner.tryLockRun(runId, owner, leaseUntilMs, nowMs);
80
- }
81
- releaseRunLock(runId) {
82
- return this.inner.releaseRunLock(runId);
83
- }
84
- renewRunLock(runId, owner, leaseUntilMs) {
85
- return this.inner.renewRunLock(runId, owner, leaseUntilMs);
86
- }
87
- putSignalWaiter(waiter) {
88
- return this.inner.putSignalWaiter(waiter);
89
- }
90
- takeSignalWaiter(token) {
91
- return this.inner.takeSignalWaiter(token);
92
- }
93
- listSignalWaiters(prefix) {
94
- return this.inner.listSignalWaiters(prefix);
95
- }
96
- bufferSignal(token, payload) {
97
- return this.inner.bufferSignal(token, this.enc(payload));
98
- }
99
- async takeBufferedSignal(token) {
100
- const buffered = await this.inner.takeBufferedSignal(token);
101
- return buffered && { payload: this.dec(buffered.payload) };
102
- }
103
- async listRuns(query) {
104
- return (await this.inner.listRuns(query)).map((r) => this.decRun(r));
105
- }
106
- async listCheckpoints(runId) {
107
- return (await this.inner.listCheckpoints(runId)).map((c) => this.decCp(c));
108
- }
109
- }
110
- exports.CodecStateStore = CodecStateStore;
111
- //# sourceMappingURL=codec-state-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codec-state-store.js","sourceRoot":"","sources":["../src/codec-state-store.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- /**
2
- * The payload an external `ctx.task` / child run delivers back on its completion signal: either a
3
- * value or a failure. One typed envelope so `task` and `child` share the same unwrap (instead of
4
- * sniffing ad-hoc `__error` keys).
5
- */
6
- export type Completion<T> = {
7
- ok: true;
8
- value: T;
9
- } | {
10
- ok: false;
11
- error: string;
12
- };
13
- /** Read a `Completion` from a signal payload: return the value, or throw a FatalError if it failed. */
14
- export declare function unwrapCompletion<T>(payload: unknown, label: string): T;
15
- //# sourceMappingURL=completion.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../src/completion.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF,uGAAuG;AACvG,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAMtE"}
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.unwrapCompletion = unwrapCompletion;
4
- const errors_1 = require("./errors");
5
- /** Read a `Completion` from a signal payload: return the value, or throw a FatalError if it failed. */
6
- function unwrapCompletion(payload, label) {
7
- const c = payload;
8
- if (c && typeof c === 'object' && 'ok' in c && c.ok === false) {
9
- throw new errors_1.FatalError(`${label} failed: ${c.error}`);
10
- }
11
- return c?.value;
12
- }
13
- //# sourceMappingURL=completion.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"completion.js","sourceRoot":"","sources":["../src/completion.ts"],"names":[],"mappings":";;AAUA,4CAMC;AAhBD,qCAAsC;AAStC,uGAAuG;AACvG,SAAgB,gBAAgB,CAAI,OAAgB,EAAE,KAAa;IACjE,MAAM,CAAC,GAAG,OAA+B,CAAC;IAC1C,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC9D,MAAM,IAAI,mBAAU,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAQ,CAAyB,EAAE,KAAU,CAAC;AAChD,CAAC"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Parse a human duration to milliseconds. Accepts a number (already ms) or a string like
3
- * `'500ms'`, `'30s'`, `'15m'`, `'2h'`, `'7d'`, `'7 days'`.
4
- */
5
- export declare function parseDuration(duration: string | number): number;
6
- //# sourceMappingURL=duration.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../src/duration.ts"],"names":[],"mappings":"AAsBA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAS/D"}
package/dist/duration.js DELETED
@@ -1,42 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseDuration = parseDuration;
4
- const UNIT_MS = {
5
- ms: 1,
6
- s: 1_000,
7
- sec: 1_000,
8
- second: 1_000,
9
- seconds: 1_000,
10
- m: 60_000,
11
- min: 60_000,
12
- minute: 60_000,
13
- minutes: 60_000,
14
- h: 3_600_000,
15
- hr: 3_600_000,
16
- hour: 3_600_000,
17
- hours: 3_600_000,
18
- d: 86_400_000,
19
- day: 86_400_000,
20
- days: 86_400_000,
21
- w: 604_800_000,
22
- week: 604_800_000,
23
- weeks: 604_800_000,
24
- };
25
- /**
26
- * Parse a human duration to milliseconds. Accepts a number (already ms) or a string like
27
- * `'500ms'`, `'30s'`, `'15m'`, `'2h'`, `'7d'`, `'7 days'`.
28
- */
29
- function parseDuration(duration) {
30
- if (typeof duration === 'number')
31
- return duration;
32
- const match = duration.trim().match(/^(\d+(?:\.\d+)?)\s*([a-z]+)$/i);
33
- if (!match)
34
- throw new Error(`invalid duration: ${duration}`);
35
- const value = Number(match[1]);
36
- const unit = (match[2] ?? '').toLowerCase();
37
- const factor = UNIT_MS[unit];
38
- if (factor === undefined)
39
- throw new Error(`unknown duration unit: ${unit}`);
40
- return value * factor;
41
- }
42
- //# sourceMappingURL=duration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"duration.js","sourceRoot":"","sources":["../src/duration.ts"],"names":[],"mappings":";;AA0BA,sCASC;AAnCD,MAAM,OAAO,GAA2B;IACtC,EAAE,EAAE,CAAC;IACL,CAAC,EAAE,KAAK;IACR,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,KAAK;IACd,CAAC,EAAE,MAAM;IACT,GAAG,EAAE,MAAM;IACX,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,MAAM;IACf,CAAC,EAAE,SAAS;IACZ,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,CAAC,EAAE,UAAU;IACb,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,UAAU;IAChB,CAAC,EAAE,WAAW;IACd,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,WAAW;CACnB,CAAC;AAEF;;;GAGG;AACH,SAAgB,aAAa,CAAC,QAAyB;IACrD,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACrE,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;IAC5E,OAAO,KAAK,GAAG,MAAM,CAAC;AACxB,CAAC"}