@dudousxd/nestjs-durable-core 0.27.0 → 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 -1773
  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 -52
  107. package/dist/workflow-ctx.d.ts.map +0 -1
  108. package/dist/workflow-ctx.js +0 -432
  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
@@ -1 +0,0 @@
1
- {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":";;AA4BA,wCAEC;AAsBD,wCAKC;AAgBD,oCAsBC;AApED,gFAAgF;AAChF,SAAgB,cAAc,CAAC,GAAW,EAAE,OAAe,EAAE,KAAa;IACxE,OAAO,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC;AACvD,CAAC;AAGD,IAAI,UAAkC,CAAC;AACvC,SAAS,cAAc;IACrB,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,IAAI,CAAC;QACH,0FAA0F;QAC1F,UAAU,GAAG,OAAO,CAAC,aAAa,CAAe,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,yGAAyG,CAC1G,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,KAAa,EAAE,QAAQ,GAAG,KAAK;IAC1E,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,+FAA+F;IAC/F,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5F,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;AACtC,CAAC;AAED,gGAAgG;AAChG,SAAS,eAAe,CAAC,CAAoB,EAAE,KAAa;IAC1D,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;IACzF,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI;QAAE,OAAO,cAAc,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,oCAAoC,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,YAAY,CAChC,MAAgD,EAChD,SAAuC,EACvC,KAAa;IAEb,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,MAAM;YAAE,SAAS;QACvB,8FAA8F;QAC9F,kGAAkG;QAClG,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrD,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,UAAU,EAAE,CAAC,CAAC;gBACjE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC;oBAAE,SAAS;YACnF,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,17 +0,0 @@
1
- import type { AttributeFilter, RunQuery, WorkflowRun } from './interfaces';
2
- import type { SearchAttributes } from './interfaces';
3
- /**
4
- * Does a run's search attributes satisfy EVERY filter (AND)? A missing key never matches (so `ne`
5
- * on an absent key is false too — the attribute simply isn't there to compare). Empty/undefined
6
- * filters match everything. Shared by every store so typed/range queries behave identically across
7
- * adapters (applied in-process after the coarse workflow/status/tag filters).
8
- */
9
- export declare function matchesAttributes(attributes: SearchAttributes | undefined, filters: AttributeFilter[] | undefined): boolean;
10
- /**
11
- * Apply a query's attribute predicates then its `offset`/`limit`, in-process — for store adapters
12
- * that can't express typed/range predicates in SQL. Pass rows already coarse-filtered (workflow /
13
- * status / tag) and sorted newest-first; this filters by `attributes` and paginates. Only call it
14
- * when `query.attributes` is set (otherwise let the DB do `LIMIT`/`OFFSET`).
15
- */
16
- export declare function applyAttributeQuery(rows: WorkflowRun[], query: RunQuery): WorkflowRun[];
17
- //# sourceMappingURL=search-attributes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-attributes.d.ts","sourceRoot":"","sources":["../src/search-attributes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAe,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAoBrD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,gBAAgB,GAAG,SAAS,EACxC,OAAO,EAAE,eAAe,EAAE,GAAG,SAAS,GACrC,OAAO,CAIT;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,WAAW,EAAE,CAKvF"}
@@ -1,47 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.matchesAttributes = matchesAttributes;
4
- exports.applyAttributeQuery = applyAttributeQuery;
5
- /** Compare one attribute value against a filter operand. Range ops need both sides comparable. */
6
- function compare(actual, op, expected) {
7
- switch (op) {
8
- case 'eq':
9
- return actual === expected;
10
- case 'ne':
11
- return actual !== expected;
12
- case 'gt':
13
- return actual != null && actual > expected;
14
- case 'gte':
15
- return actual != null && actual >= expected;
16
- case 'lt':
17
- return actual != null && actual < expected;
18
- case 'lte':
19
- return actual != null && actual <= expected;
20
- }
21
- }
22
- /**
23
- * Does a run's search attributes satisfy EVERY filter (AND)? A missing key never matches (so `ne`
24
- * on an absent key is false too — the attribute simply isn't there to compare). Empty/undefined
25
- * filters match everything. Shared by every store so typed/range queries behave identically across
26
- * adapters (applied in-process after the coarse workflow/status/tag filters).
27
- */
28
- function matchesAttributes(attributes, filters) {
29
- if (!filters?.length)
30
- return true;
31
- if (!attributes)
32
- return false;
33
- return filters.every((f) => f.key in attributes && compare(attributes[f.key], f.op, f.value));
34
- }
35
- /**
36
- * Apply a query's attribute predicates then its `offset`/`limit`, in-process — for store adapters
37
- * that can't express typed/range predicates in SQL. Pass rows already coarse-filtered (workflow /
38
- * status / tag) and sorted newest-first; this filters by `attributes` and paginates. Only call it
39
- * when `query.attributes` is set (otherwise let the DB do `LIMIT`/`OFFSET`).
40
- */
41
- function applyAttributeQuery(rows, query) {
42
- const filtered = rows.filter((r) => matchesAttributes(r.searchAttributes, query.attributes));
43
- const offset = query.offset ?? 0;
44
- const limit = query.limit ?? filtered.length;
45
- return filtered.slice(offset, offset + limit);
46
- }
47
- //# sourceMappingURL=search-attributes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-attributes.js","sourceRoot":"","sources":["../src/search-attributes.ts"],"names":[],"mappings":";;AA2BA,8CAOC;AAQD,kDAKC;AA5CD,kGAAkG;AAClG,SAAS,OAAO,CAAC,MAAe,EAAE,EAAe,EAAE,QAAmC;IACpF,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,IAAI;YACP,OAAO,MAAM,KAAK,QAAQ,CAAC;QAC7B,KAAK,IAAI;YACP,OAAO,MAAM,KAAK,QAAQ,CAAC;QAC7B,KAAK,IAAI;YACP,OAAO,MAAM,IAAI,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC;QAC7C,KAAK,KAAK;YACR,OAAO,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,QAAQ,CAAC;QAC9C,KAAK,IAAI;YACP,OAAO,MAAM,IAAI,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC;QAC7C,KAAK,KAAK;YACR,OAAO,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,QAAQ,CAAC;IAChD,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAC/B,UAAwC,EACxC,OAAsC;IAEtC,IAAI,CAAC,OAAO,EAAE,MAAM;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAC9B,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAChG,CAAC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAC,IAAmB,EAAE,KAAe;IACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7F,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;IAC7C,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;AAChD,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { StepEvent, StepLogger } from './interfaces';
2
- /**
3
- * A {@link StepLogger} that appends to `events`, stamping each line with `now()`. Shared by the
4
- * local-step path (`ctx.step`) and the remote-worker path (`runStepHandler`) so a step records
5
- * the same {@link StepEvent} shape wherever it runs — the TypeScript twin of the Python SDK's
6
- * `StepContext`.
7
- */
8
- export declare function createStepLogger(events: StepEvent[], now: () => number): StepLogger;
9
- //# sourceMappingURL=step-logger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"step-logger.d.ts","sourceRoot":"","sources":["../src/step-logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAoB,MAAM,cAAc,CAAC;AAW5E;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,MAAM,MAAM,GAAG,UAAU,CAwEnF"}
@@ -1,92 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createStepLogger = createStepLogger;
4
- /** Attach the elapsed `durationMs` (from `start`) to `data`, unless the caller already set one. */
5
- function withDuration(start, now, data) {
6
- if (data && typeof data === 'object' && 'durationMs' in data) {
7
- return data;
8
- }
9
- const base = data && typeof data === 'object' ? data : {};
10
- return { ...base, durationMs: now() - start };
11
- }
12
- /**
13
- * A {@link StepLogger} that appends to `events`, stamping each line with `now()`. Shared by the
14
- * local-step path (`ctx.step`) and the remote-worker path (`runStepHandler`) so a step records
15
- * the same {@link StepEvent} shape wherever it runs — the TypeScript twin of the Python SDK's
16
- * `StepContext`.
17
- */
18
- function createStepLogger(events, now) {
19
- // The sub-process a `subProcess(...)` body is currently inside; debug/info/warn/error emitted while
20
- // inside get tagged with its id, so the dashboard groups that log trail under the sub-process.
21
- let currentSub;
22
- const push = (level, message, data) => events.push({
23
- at: now(),
24
- level,
25
- message,
26
- ...(currentSub ? { subId: currentSub.id } : {}),
27
- ...(data === undefined ? {} : { data }),
28
- });
29
- const subEvent = (e) => events.push({
30
- at: now(),
31
- level: e.status === 'failed' ? 'error' : e.status === 'skipped' ? 'warn' : 'info',
32
- message: e.message ?? e.phase ?? e.name,
33
- subId: e.id,
34
- name: e.name,
35
- ...(e.group === undefined ? {} : { group: e.group }),
36
- ...(e.phase === undefined ? {} : { phase: e.phase }),
37
- ...(e.status === undefined ? {} : { status: e.status }),
38
- ...(e.data === undefined ? {} : { data: e.data }),
39
- });
40
- const subProcess = async (name, body, opts) => {
41
- const id = opts?.id ?? globalThis.crypto.randomUUID();
42
- const group = opts?.group;
43
- const start = now();
44
- const prevSub = currentSub;
45
- currentSub = { id };
46
- let terminal = false;
47
- const emit = (status, message, data) => {
48
- if (terminal)
49
- return;
50
- terminal = true;
51
- subEvent({ id, name, group, status, message, data: withDuration(start, now, data) });
52
- };
53
- const handle = {
54
- phase: (phase, data) => {
55
- if (!terminal)
56
- subEvent({ id, name, group, phase, data });
57
- return handle;
58
- },
59
- skip: (reason, data) => emit('skipped', reason, data),
60
- fail: (reason, data) => emit('failed', reason, data),
61
- };
62
- try {
63
- const result = await body(handle);
64
- emit('ok'); // no-op if the body already called skip()/fail()
65
- return result;
66
- }
67
- catch (err) {
68
- emit('failed', err instanceof Error ? err.message : String(err));
69
- throw err;
70
- }
71
- finally {
72
- currentSub = prevSub;
73
- }
74
- };
75
- return {
76
- debug: (m, d) => push('debug', m, d),
77
- info: (m, d) => push('info', m, d),
78
- warn: (m, d) => push('warn', m, d),
79
- error: (m, d) => push('error', m, d),
80
- sub: (name, status, message, data) => events.push({
81
- at: now(),
82
- level: status === 'failed' ? 'error' : status === 'skipped' ? 'warn' : 'info',
83
- message: message ?? name,
84
- name,
85
- status,
86
- ...(data === undefined ? {} : { data }),
87
- }),
88
- subEvent,
89
- subProcess,
90
- };
91
- }
92
- //# sourceMappingURL=step-logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"step-logger.js","sourceRoot":"","sources":["../src/step-logger.ts"],"names":[],"mappings":";;AAiBA,4CAwEC;AAvFD,mGAAmG;AACnG,SAAS,YAAY,CAAC,KAAa,EAAE,GAAiB,EAAE,IAAc;IACpE,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;QAC7D,OAAO,IAA+B,CAAC;IACzC,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAgC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,OAAO,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,MAAmB,EAAE,GAAiB;IACrE,oGAAoG;IACpG,+FAA+F;IAC/F,IAAI,UAAsC,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,KAAyB,EAAE,OAAe,EAAE,IAAc,EAAE,EAAE,CAC1E,MAAM,CAAC,IAAI,CAAC;QACV,EAAE,EAAE,GAAG,EAAE;QACT,KAAK;QACL,OAAO;QACP,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;KACxC,CAAC,CAAC;IACL,MAAM,QAAQ,GAA2B,CAAC,CAAC,EAAE,EAAE,CAC7C,MAAM,CAAC,IAAI,CAAC;QACV,EAAE,EAAE,GAAG,EAAE;QACT,KAAK,EAAE,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACjF,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI;QACvC,KAAK,EAAE,CAAC,CAAC,EAAE;QACX,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACpD,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACpD,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QACvD,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;KAClD,CAAC,CAAC;IACL,MAAM,UAAU,GAA6B,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QACtE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC;QAC1B,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,UAAU,CAAC;QAC3B,UAAU,GAAG,EAAE,EAAE,EAAE,CAAC;QACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,IAAI,GAAG,CAAC,MAAmC,EAAE,OAAgB,EAAE,IAAc,EAAE,EAAE;YACrF,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACvF,CAAC,CAAC;QACF,MAAM,MAAM,GAAqB;YAC/B,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACrB,IAAI,CAAC,QAAQ;oBAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1D,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC;YACrD,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;SACrD,CAAC;QACF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,iDAAiD;YAC7D,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACjE,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,UAAU,GAAG,OAAO,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IACF,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAClC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QACpC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CACnC,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,GAAG,EAAE;YACT,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YAC7E,OAAO,EAAE,OAAO,IAAI,IAAI;YACxB,IAAI;YACJ,MAAM;YACN,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;SACxC,CAAC;QACJ,QAAQ;QACR,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -1,11 +0,0 @@
1
- import type { StartOptions, WorkflowEngine } from './engine';
2
- import type { RunResult } from './interfaces';
3
- import type { WorkflowRef } from './workflow-ref';
4
- /**
5
- * Test helper: enqueue a run and wait for it to settle (terminal or suspended). `engine.start` now
6
- * only enqueues (dispatch model), so this restores the old synchronous-result shape for assertions —
7
- * `const r = await startRun(engine, wf, input, id)`. Not for production use; production pairs `start`
8
- * with `waitForRun` (or a worker) explicitly.
9
- */
10
- export declare function startRun(engine: WorkflowEngine, workflow: WorkflowRef, input: unknown, runId: string, opts?: StartOptions): Promise<RunResult>;
11
- //# sourceMappingURL=test-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../src/test-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,SAAS,CAAC,CAIpB"}
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.startRun = startRun;
4
- /**
5
- * Test helper: enqueue a run and wait for it to settle (terminal or suspended). `engine.start` now
6
- * only enqueues (dispatch model), so this restores the old synchronous-result shape for assertions —
7
- * `const r = await startRun(engine, wf, input, id)`. Not for production use; production pairs `start`
8
- * with `waitForRun` (or a worker) explicitly.
9
- */
10
- function startRun(engine, workflow, input, runId, opts) {
11
- // `start` is overloaded per ref kind (class | string); a `WorkflowRef` union fits neither overload,
12
- // and this is a thin test helper, so resolve to the string overload (engine handles both at runtime).
13
- return engine.start(workflow, input, runId, opts).then(() => engine.waitForRun(runId));
14
- }
15
- //# sourceMappingURL=test-helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../src/test-helpers.ts"],"names":[],"mappings":";;AAUA,4BAUC;AAhBD;;;;;GAKG;AACH,SAAgB,QAAQ,CACtB,MAAsB,EACtB,QAAqB,EACrB,KAAc,EACd,KAAa,EACb,IAAmB;IAEnB,oGAAoG;IACpG,sGAAsG;IACtG,OAAO,MAAM,CAAC,KAAK,CAAC,QAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACnG,CAAC"}
@@ -1,37 +0,0 @@
1
- import type { RunQuery, SignalWaiter, StateStore, StepCheckpoint, WorkflowRun } from '../interfaces';
2
- /**
3
- * A non-durable, in-process `StateStore` for tests and local development.
4
- * The shipped `@dudousxd/nestjs-durable-store` package re-exports an equivalent.
5
- */
6
- export declare class InMemoryStateStore implements StateStore {
7
- private readonly runs;
8
- private readonly checkpoints;
9
- private readonly signalWaiters;
10
- private key;
11
- createRun(run: WorkflowRun): Promise<void>;
12
- updateRun(runId: string, patch: Partial<WorkflowRun>): Promise<void>;
13
- getRun(runId: string): Promise<WorkflowRun | null>;
14
- getCheckpoint(runId: string, seq: number): Promise<StepCheckpoint | null>;
15
- saveCheckpoint(checkpoint: StepCheckpoint): Promise<void>;
16
- listIncompleteRuns(): Promise<WorkflowRun[]>;
17
- listPendingRuns(limit: number): Promise<WorkflowRun[]>;
18
- listDueTimers(nowMs: number): Promise<WorkflowRun[]>;
19
- tryLockRun(runId: string, owner: string, leaseUntilMs: number, nowMs: number): Promise<boolean>;
20
- releaseRunLock(runId: string): Promise<void>;
21
- renewRunLock(runId: string, owner: string, leaseUntilMs: number): Promise<boolean>;
22
- putSignalWaiter(waiter: SignalWaiter): Promise<void>;
23
- takeSignalWaiter(token: string): Promise<SignalWaiter | null>;
24
- listSignalWaiters(prefix: string): Promise<SignalWaiter[]>;
25
- transaction<T>(work: (tx: {
26
- raw: unknown;
27
- saveCheckpoint: (cp: StepCheckpoint) => Promise<void>;
28
- }) => Promise<T>): Promise<T>;
29
- private readonly bufferedSignals;
30
- bufferSignal(token: string, payload: unknown): Promise<void>;
31
- takeBufferedSignal(token: string): Promise<{
32
- payload: unknown;
33
- } | null>;
34
- listRuns(query: RunQuery): Promise<WorkflowRun[]>;
35
- listCheckpoints(runId: string): Promise<StepCheckpoint[]>;
36
- }
37
- //# sourceMappingURL=in-memory-state-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"in-memory-state-store.d.ts","sourceRoot":"","sources":["../../src/testing/in-memory-state-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,cAAc,EACd,WAAW,EACZ,MAAM,eAAe,CAAC;AAGvB;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,UAAU;IACnD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkC;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqC;IACjE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;IAEjE,OAAO,CAAC,GAAG;IAIL,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAKlD,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAKzE,cAAc,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,kBAAkB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAI5C,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAQtD,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAMpD,UAAU,CACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;IASb,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOlF,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAO7D,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAQ1D,WAAW,CAAC,CAAC,EACjB,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;IAIb,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAC1D,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAQvE,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAcjD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAMhE"}
@@ -1,134 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InMemoryStateStore = void 0;
4
- const search_attributes_1 = require("../search-attributes");
5
- /**
6
- * A non-durable, in-process `StateStore` for tests and local development.
7
- * The shipped `@dudousxd/nestjs-durable-store` package re-exports an equivalent.
8
- */
9
- class InMemoryStateStore {
10
- runs = new Map();
11
- checkpoints = new Map();
12
- signalWaiters = new Map();
13
- key(runId, seq) {
14
- return `${runId}:${seq}`;
15
- }
16
- async createRun(run) {
17
- this.runs.set(run.id, { ...run });
18
- }
19
- async updateRun(runId, patch) {
20
- const existing = this.runs.get(runId);
21
- if (!existing)
22
- throw new Error(`run ${runId} not found`);
23
- this.runs.set(runId, { ...existing, ...patch });
24
- }
25
- async getRun(runId) {
26
- const run = this.runs.get(runId);
27
- return run ? { ...run } : null;
28
- }
29
- async getCheckpoint(runId, seq) {
30
- const cp = this.checkpoints.get(this.key(runId, seq));
31
- return cp ? { ...cp } : null;
32
- }
33
- async saveCheckpoint(checkpoint) {
34
- this.checkpoints.set(this.key(checkpoint.runId, checkpoint.seq), { ...checkpoint });
35
- }
36
- async listIncompleteRuns() {
37
- return [...this.runs.values()].filter((r) => r.status === 'running').map((r) => ({ ...r }));
38
- }
39
- async listPendingRuns(limit) {
40
- return [...this.runs.values()]
41
- .filter((r) => r.status === 'pending')
42
- .sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime() || a.id.localeCompare(b.id))
43
- .slice(0, limit)
44
- .map((r) => ({ ...r }));
45
- }
46
- async listDueTimers(nowMs) {
47
- return [...this.runs.values()]
48
- .filter((r) => r.status === 'suspended' && r.wakeAt !== undefined && r.wakeAt <= nowMs)
49
- .map((r) => ({ ...r }));
50
- }
51
- async tryLockRun(runId, owner, leaseUntilMs, nowMs) {
52
- const run = this.runs.get(runId);
53
- if (!run)
54
- return false;
55
- if (run.lockedUntil !== undefined && run.lockedUntil > nowMs)
56
- return false;
57
- run.lockedBy = owner;
58
- run.lockedUntil = leaseUntilMs;
59
- return true;
60
- }
61
- async releaseRunLock(runId) {
62
- const run = this.runs.get(runId);
63
- if (run) {
64
- run.lockedBy = undefined;
65
- run.lockedUntil = undefined;
66
- }
67
- }
68
- async renewRunLock(runId, owner, leaseUntilMs) {
69
- const run = this.runs.get(runId);
70
- if (!run || run.lockedBy !== owner)
71
- return false;
72
- run.lockedUntil = leaseUntilMs;
73
- return true;
74
- }
75
- async putSignalWaiter(waiter) {
76
- this.signalWaiters.set(waiter.token, { ...waiter });
77
- }
78
- async takeSignalWaiter(token) {
79
- const waiter = this.signalWaiters.get(token);
80
- if (!waiter)
81
- return null;
82
- this.signalWaiters.delete(token);
83
- return { ...waiter };
84
- }
85
- async listSignalWaiters(prefix) {
86
- return [...this.signalWaiters.values()]
87
- .filter((w) => w.token.startsWith(prefix))
88
- .map((w) => ({ ...w }));
89
- }
90
- // No real DB transaction (there's no DB) — run the work and save the checkpoint. Exactly-once
91
- // across a crash needs a SQL store; this keeps `ctx.transaction` usable in tests / local dev.
92
- async transaction(work) {
93
- return work({ raw: this, saveCheckpoint: (cp) => this.saveCheckpoint(cp) });
94
- }
95
- bufferedSignals = new Map();
96
- async bufferSignal(token, payload) {
97
- const queue = this.bufferedSignals.get(token) ?? [];
98
- queue.push(payload);
99
- this.bufferedSignals.set(token, queue);
100
- }
101
- async takeBufferedSignal(token) {
102
- const queue = this.bufferedSignals.get(token);
103
- if (!queue || queue.length === 0)
104
- return null;
105
- const payload = queue.shift();
106
- if (queue.length === 0)
107
- this.bufferedSignals.delete(token);
108
- return { payload };
109
- }
110
- async listRuns(query) {
111
- let runs = [...this.runs.values()];
112
- if (query.workflow)
113
- runs = runs.filter((r) => r.workflow === query.workflow);
114
- if (query.status)
115
- runs = runs.filter((r) => r.status === query.status);
116
- if (query.tag)
117
- runs = runs.filter((r) => r.tags?.includes(query.tag));
118
- if (query.attributes?.length)
119
- runs = runs.filter((r) => (0, search_attributes_1.matchesAttributes)(r.searchAttributes, query.attributes));
120
- // Newest first (matches the store adapters' `createdAt DESC`) — recent runs on top in the dashboard.
121
- runs.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
122
- const offset = query.offset ?? 0;
123
- const limit = query.limit ?? runs.length;
124
- return runs.slice(offset, offset + limit).map((r) => ({ ...r }));
125
- }
126
- async listCheckpoints(runId) {
127
- return [...this.checkpoints.values()]
128
- .filter((cp) => cp.runId === runId)
129
- .sort((a, b) => a.seq - b.seq)
130
- .map((cp) => ({ ...cp }));
131
- }
132
- }
133
- exports.InMemoryStateStore = InMemoryStateStore;
134
- //# sourceMappingURL=in-memory-state-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"in-memory-state-store.js","sourceRoot":"","sources":["../../src/testing/in-memory-state-store.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import type { ControlMessage, ControlPlane, Heartbeat, RemoteTask, StepResult, Transport, WorkflowStepEvent } from '../interfaces';
2
- import { type StepHandler } from '../protocol';
3
- /**
4
- * An in-process `Transport` (and `ControlPlane`) for tests and local development: registered
5
- * handlers stand in for remote workers, so a whole cross-app workflow runs in a single process,
6
- * and control messages broadcast locally. Pass the same instance as both `transport` and
7
- * `controlPlane`.
8
- */
9
- export declare class InMemoryTransport implements Transport, ControlPlane {
10
- private readonly handlers;
11
- private resultHandler?;
12
- private stepEventHandler?;
13
- private readonly controlHandlers;
14
- /** Register a fake worker handler for a step name. */
15
- handle(name: string, fn: StepHandler): void;
16
- dispatch(task: RemoteTask): Promise<void>;
17
- onResult(handler: (result: StepResult) => Promise<void>): void;
18
- onHeartbeat(_handler: (beat: Heartbeat) => Promise<void>): void;
19
- /** Workflow step lifecycle: deliver to the engine's handler (async, mirroring a real broker). */
20
- dispatchStepEvent(event: WorkflowStepEvent): Promise<void>;
21
- onStepEvent(handler: (event: WorkflowStepEvent) => Promise<void>): void;
22
- publishControl(msg: ControlMessage): Promise<void>;
23
- onControl(handler: (msg: ControlMessage) => void): void;
24
- }
25
- //# sourceMappingURL=in-memory-transport.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"in-memory-transport.d.ts","sourceRoot":"","sources":["../../src/testing/in-memory-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACV,SAAS,EACT,iBAAiB,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,aAAa,CAAC;AAE/D;;;;;GAKG;AACH,qBAAa,iBAAkB,YAAW,SAAS,EAAE,YAAY;IAC/D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAC3D,OAAO,CAAC,aAAa,CAAC,CAAwC;IAC9D,OAAO,CAAC,gBAAgB,CAAC,CAA8C;IACvE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4C;IAE5E,sDAAsD;IACtD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI;IAIrC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/C,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI9D,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI/D,iGAAiG;IAC3F,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,WAAW,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAMjE,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI;CAGxD"}
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InMemoryTransport = void 0;
4
- const protocol_1 = require("../protocol");
5
- /**
6
- * An in-process `Transport` (and `ControlPlane`) for tests and local development: registered
7
- * handlers stand in for remote workers, so a whole cross-app workflow runs in a single process,
8
- * and control messages broadcast locally. Pass the same instance as both `transport` and
9
- * `controlPlane`.
10
- */
11
- class InMemoryTransport {
12
- handlers = new Map();
13
- resultHandler;
14
- stepEventHandler;
15
- controlHandlers = new Set();
16
- /** Register a fake worker handler for a step name. */
17
- handle(name, fn) {
18
- this.handlers.set(name, fn);
19
- }
20
- async dispatch(task) {
21
- if (!this.resultHandler)
22
- throw new Error('no result handler registered');
23
- const result = await (0, protocol_1.runStepHandler)(task, this.handlers.get(task.name));
24
- // Deliver the result ASYNCHRONOUSLY, not inline: a durable `ctx.call` suspends the run right
25
- // after dispatch, so the result must land AFTER that unwinds (else the resume re-enters
26
- // mid-suspend). Real brokers are async; this mirrors them.
27
- setImmediate(() => void this.resultHandler?.(result));
28
- }
29
- onResult(handler) {
30
- this.resultHandler = handler;
31
- }
32
- onHeartbeat(_handler) {
33
- // In-process handlers run synchronously; there is no liveness to track.
34
- }
35
- /** Workflow step lifecycle: deliver to the engine's handler (async, mirroring a real broker). */
36
- async dispatchStepEvent(event) {
37
- await this.stepEventHandler?.(event);
38
- }
39
- onStepEvent(handler) {
40
- this.stepEventHandler = handler;
41
- }
42
- // Control plane: broadcast to every registered handler (including the publisher's own — the
43
- // engine dedupes by `from`), mirroring how a real broker echoes a publish to all subscribers.
44
- async publishControl(msg) {
45
- for (const handler of this.controlHandlers)
46
- handler(msg);
47
- }
48
- onControl(handler) {
49
- this.controlHandlers.add(handler);
50
- }
51
- }
52
- exports.InMemoryTransport = InMemoryTransport;
53
- //# sourceMappingURL=in-memory-transport.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"in-memory-transport.js","sourceRoot":"","sources":["../../src/testing/in-memory-transport.ts"],"names":[],"mappings":";;;AASA,0CAA+D;AAE/D;;;;;GAKG;AACH,MAAa,iBAAiB;IACX,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IACnD,aAAa,CAAyC;IACtD,gBAAgB,CAA+C;IACtD,eAAe,GAAG,IAAI,GAAG,EAAiC,CAAC;IAE5E,sDAAsD;IACtD,MAAM,CAAC,IAAY,EAAE,EAAe;QAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAgB;QAC7B,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAc,EAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,6FAA6F;QAC7F,wFAAwF;QACxF,2DAA2D;QAC3D,YAAY,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,QAAQ,CAAC,OAA8C;QACrD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;IAC/B,CAAC;IAED,WAAW,CAAC,QAA4C;QACtD,wEAAwE;IAC1E,CAAC;IAED,iGAAiG;IACjG,KAAK,CAAC,iBAAiB,CAAC,KAAwB;QAC9C,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,WAAW,CAAC,OAAoD;QAC9D,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;IAClC,CAAC;IAED,4FAA4F;IAC5F,8FAA8F;IAC9F,KAAK,CAAC,cAAc,CAAC,GAAmB;QACtC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC;IAED,SAAS,CAAC,OAAsC;QAC9C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;CACF;AA9CD,8CA8CC"}
package/dist/tokens.d.ts DELETED
@@ -1,8 +0,0 @@
1
- /**
2
- * Dependency-injection tokens. Adapters bind their implementations to these so `core` and
3
- * `@dudousxd/nestjs-durable` depend only on the interfaces in `./interfaces`.
4
- */
5
- export declare const STATE_STORE: unique symbol;
6
- export declare const TRANSPORT: unique symbol;
7
- export declare const DURABLE_OPTIONS: unique symbol;
8
- //# sourceMappingURL=tokens.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,WAAW,eAAuC,CAAC;AAChE,eAAO,MAAM,SAAS,eAAqC,CAAC;AAC5D,eAAO,MAAM,eAAe,eAA2C,CAAC"}
package/dist/tokens.js DELETED
@@ -1,11 +0,0 @@
1
- "use strict";
2
- /**
3
- * Dependency-injection tokens. Adapters bind their implementations to these so `core` and
4
- * `@dudousxd/nestjs-durable` depend only on the interfaces in `./interfaces`.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.DURABLE_OPTIONS = exports.TRANSPORT = exports.STATE_STORE = void 0;
8
- exports.STATE_STORE = Symbol('nestjs-durable:STATE_STORE');
9
- exports.TRANSPORT = Symbol('nestjs-durable:TRANSPORT');
10
- exports.DURABLE_OPTIONS = Symbol('nestjs-durable:DURABLE_OPTIONS');
11
- //# sourceMappingURL=tokens.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEU,QAAA,WAAW,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;AACnD,QAAA,SAAS,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAC/C,QAAA,eAAe,GAAG,MAAM,CAAC,gCAAgC,CAAC,CAAC"}
@@ -1,30 +0,0 @@
1
- import type { GroupHealth, Heartbeat, NamedTransport, RemoteTask, StepResult, WorkflowStepEvent } from './interfaces';
2
- /**
3
- * An ordered pool of named transports. The engine dispatches on the first and fails over to the
4
- * next on a dispatch error; a step can pin one by id. Pure transport plumbing — no run lifecycle —
5
- * so it lives apart from the engine.
6
- */
7
- export declare class TransportPool {
8
- private readonly transports;
9
- constructor(transports: NamedTransport[]);
10
- get size(): number;
11
- /** Register the engine's result/heartbeat/step-event handlers on EVERY transport — a result can come
12
- * back on whichever one delivered the task, so failover stays symmetric. `onStepEvent` is wired only
13
- * on transports that carry streamed workflow step lifecycle (BullMQ); others simply skip it. */
14
- bind(onResult: (result: StepResult) => Promise<void>, onHeartbeat: (beat: Heartbeat) => Promise<void>, onStepEvent?: (event: WorkflowStepEvent) => Promise<void>): void;
15
- /**
16
- * Dispatch `task` over the pool: try the preferred (or first) transport, fail over to the next on
17
- * a dispatch error, and stamp the task with the id of the transport that accepted it (so a worker
18
- * replies on the matching one). Throws if every transport fails.
19
- */
20
- dispatch(task: Omit<RemoteTask, 'transport'>, preferId?: string): Promise<void>;
21
- /** Worker-health for `group`, merged across every transport that can report it (a group's queue
22
- * and its workers may live on any pinned transport). Undefined when no transport implements
23
- * `groupHealth` (e.g. a pure in-process transport — nothing to introspect). */
24
- groupHealth(group: string): Promise<GroupHealth | undefined>;
25
- /** Distinct worker groups with a live heartbeat, merged across every transport that can report it. */
26
- listWorkerGroups(): Promise<string[]>;
27
- /** Pinned `preferId` first, then the rest (failover order). */
28
- private ordered;
29
- }
30
- //# sourceMappingURL=transport-pool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transport-pool.d.ts","sourceRoot":"","sources":["../src/transport-pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,cAAc,EACd,UAAU,EACV,UAAU,EACV,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAEtB;;;;GAIG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,cAAc,EAAE;IAEzD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;qGAEiG;IACjG,IAAI,CACF,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,EAC/C,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,EAC/C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,GACxD,IAAI;IAUP;;;;OAIG;IACG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAarF;;oFAEgF;IAC1E,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAalE,sGAAsG;IAChG,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAU3C,+DAA+D;IAC/D,OAAO,CAAC,OAAO;CAMhB"}