@workflow/core 4.0.1-beta.8 → 4.1.0-beta.51

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 (179) hide show
  1. package/dist/builtins.js +1 -1
  2. package/dist/class-serialization.d.ts +26 -0
  3. package/dist/class-serialization.d.ts.map +1 -0
  4. package/dist/class-serialization.js +66 -0
  5. package/dist/create-hook.js +1 -1
  6. package/dist/define-hook.d.ts +40 -25
  7. package/dist/define-hook.d.ts.map +1 -1
  8. package/dist/define-hook.js +22 -27
  9. package/dist/events-consumer.d.ts.map +1 -1
  10. package/dist/events-consumer.js +5 -1
  11. package/dist/flushable-stream.d.ts +82 -0
  12. package/dist/flushable-stream.d.ts.map +1 -0
  13. package/dist/flushable-stream.js +214 -0
  14. package/dist/global.d.ts +4 -1
  15. package/dist/global.d.ts.map +1 -1
  16. package/dist/global.js +21 -9
  17. package/dist/index.d.ts +3 -3
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +3 -3
  20. package/dist/logger.js +1 -1
  21. package/dist/observability.d.ts +60 -0
  22. package/dist/observability.d.ts.map +1 -1
  23. package/dist/observability.js +265 -32
  24. package/dist/private.d.ts +10 -1
  25. package/dist/private.d.ts.map +1 -1
  26. package/dist/private.js +6 -1
  27. package/dist/runtime/helpers.d.ts +52 -0
  28. package/dist/runtime/helpers.d.ts.map +1 -0
  29. package/dist/runtime/helpers.js +264 -0
  30. package/dist/runtime/resume-hook.d.ts +17 -12
  31. package/dist/runtime/resume-hook.d.ts.map +1 -1
  32. package/dist/runtime/resume-hook.js +79 -64
  33. package/dist/runtime/start.d.ts +14 -0
  34. package/dist/runtime/start.d.ts.map +1 -1
  35. package/dist/runtime/start.js +71 -45
  36. package/dist/runtime/step-handler.d.ts +7 -0
  37. package/dist/runtime/step-handler.d.ts.map +1 -0
  38. package/dist/runtime/step-handler.js +337 -0
  39. package/dist/runtime/suspension-handler.d.ts +25 -0
  40. package/dist/runtime/suspension-handler.d.ts.map +1 -0
  41. package/dist/runtime/suspension-handler.js +182 -0
  42. package/dist/runtime/world.d.ts.map +1 -1
  43. package/dist/runtime/world.js +20 -21
  44. package/dist/runtime.d.ts +3 -7
  45. package/dist/runtime.d.ts.map +1 -1
  46. package/dist/runtime.js +103 -410
  47. package/dist/schemas.d.ts +1 -15
  48. package/dist/schemas.d.ts.map +1 -1
  49. package/dist/schemas.js +2 -15
  50. package/dist/serialization.d.ts +112 -21
  51. package/dist/serialization.d.ts.map +1 -1
  52. package/dist/serialization.js +469 -85
  53. package/dist/sleep.d.ts +10 -0
  54. package/dist/sleep.d.ts.map +1 -1
  55. package/dist/sleep.js +1 -1
  56. package/dist/source-map.d.ts +10 -0
  57. package/dist/source-map.d.ts.map +1 -0
  58. package/dist/source-map.js +56 -0
  59. package/dist/step/context-storage.d.ts +2 -0
  60. package/dist/step/context-storage.d.ts.map +1 -1
  61. package/dist/step/context-storage.js +1 -1
  62. package/dist/step/get-closure-vars.d.ts +9 -0
  63. package/dist/step/get-closure-vars.d.ts.map +1 -0
  64. package/dist/step/get-closure-vars.js +16 -0
  65. package/dist/step/get-step-metadata.js +1 -1
  66. package/dist/step/get-workflow-metadata.js +1 -1
  67. package/dist/{writable-stream.d.ts → step/writable-stream.d.ts} +5 -5
  68. package/dist/step/writable-stream.d.ts.map +1 -0
  69. package/dist/step/writable-stream.js +30 -0
  70. package/dist/step.d.ts +1 -1
  71. package/dist/step.d.ts.map +1 -1
  72. package/dist/step.js +93 -47
  73. package/dist/symbols.d.ts +6 -0
  74. package/dist/symbols.d.ts.map +1 -1
  75. package/dist/symbols.js +7 -1
  76. package/dist/telemetry/semantic-conventions.d.ts +66 -38
  77. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  78. package/dist/telemetry/semantic-conventions.js +16 -3
  79. package/dist/telemetry.d.ts +8 -4
  80. package/dist/telemetry.d.ts.map +1 -1
  81. package/dist/telemetry.js +39 -6
  82. package/dist/types.js +1 -1
  83. package/dist/util.d.ts +5 -24
  84. package/dist/util.d.ts.map +1 -1
  85. package/dist/util.js +19 -38
  86. package/dist/version.d.ts +2 -0
  87. package/dist/version.d.ts.map +1 -0
  88. package/dist/version.js +3 -0
  89. package/dist/vm/index.js +2 -2
  90. package/dist/vm/uuid.js +1 -1
  91. package/dist/workflow/create-hook.js +1 -1
  92. package/dist/workflow/define-hook.d.ts +3 -3
  93. package/dist/workflow/define-hook.d.ts.map +1 -1
  94. package/dist/workflow/define-hook.js +1 -1
  95. package/dist/workflow/get-workflow-metadata.js +1 -1
  96. package/dist/workflow/hook.d.ts.map +1 -1
  97. package/dist/workflow/hook.js +49 -14
  98. package/dist/workflow/index.d.ts +1 -1
  99. package/dist/workflow/index.d.ts.map +1 -1
  100. package/dist/workflow/index.js +2 -2
  101. package/dist/workflow/sleep.d.ts +1 -1
  102. package/dist/workflow/sleep.d.ts.map +1 -1
  103. package/dist/workflow/sleep.js +26 -39
  104. package/dist/workflow/writable-stream.d.ts +1 -1
  105. package/dist/workflow/writable-stream.d.ts.map +1 -1
  106. package/dist/workflow/writable-stream.js +1 -1
  107. package/dist/workflow.d.ts +1 -1
  108. package/dist/workflow.d.ts.map +1 -1
  109. package/dist/workflow.js +72 -9
  110. package/docs/api-reference/create-hook.mdx +133 -0
  111. package/docs/api-reference/create-webhook.mdx +225 -0
  112. package/docs/api-reference/define-hook.mdx +206 -0
  113. package/docs/api-reference/fatal-error.mdx +37 -0
  114. package/docs/api-reference/fetch.mdx +139 -0
  115. package/docs/api-reference/get-step-metadata.mdx +76 -0
  116. package/docs/api-reference/get-workflow-metadata.mdx +44 -0
  117. package/docs/api-reference/get-writable.mdx +292 -0
  118. package/docs/api-reference/index.mdx +55 -0
  119. package/docs/api-reference/meta.json +3 -0
  120. package/docs/api-reference/retryable-error.mdx +106 -0
  121. package/docs/api-reference/sleep.mdx +59 -0
  122. package/docs/foundations/common-patterns.mdx +253 -0
  123. package/docs/foundations/errors-and-retries.mdx +190 -0
  124. package/docs/foundations/hooks.mdx +455 -0
  125. package/docs/foundations/idempotency.mdx +55 -0
  126. package/docs/foundations/index.mdx +32 -0
  127. package/docs/foundations/meta.json +14 -0
  128. package/docs/foundations/serialization.mdx +157 -0
  129. package/docs/foundations/starting-workflows.mdx +211 -0
  130. package/docs/foundations/streaming.mdx +569 -0
  131. package/docs/foundations/workflows-and-steps.mdx +197 -0
  132. package/docs/how-it-works/code-transform.mdx +334 -0
  133. package/docs/how-it-works/event-sourcing.mdx +254 -0
  134. package/docs/how-it-works/framework-integrations.mdx +437 -0
  135. package/docs/how-it-works/meta.json +10 -0
  136. package/docs/how-it-works/understanding-directives.mdx +611 -0
  137. package/package.json +31 -25
  138. package/dist/builtins.js.map +0 -1
  139. package/dist/create-hook.js.map +0 -1
  140. package/dist/define-hook.js.map +0 -1
  141. package/dist/events-consumer.js.map +0 -1
  142. package/dist/global.js.map +0 -1
  143. package/dist/index.js.map +0 -1
  144. package/dist/logger.js.map +0 -1
  145. package/dist/observability.js.map +0 -1
  146. package/dist/parse-name.d.ts +0 -25
  147. package/dist/parse-name.d.ts.map +0 -1
  148. package/dist/parse-name.js +0 -40
  149. package/dist/parse-name.js.map +0 -1
  150. package/dist/private.js.map +0 -1
  151. package/dist/runtime/resume-hook.js.map +0 -1
  152. package/dist/runtime/start.js.map +0 -1
  153. package/dist/runtime/world.js.map +0 -1
  154. package/dist/runtime.js.map +0 -1
  155. package/dist/schemas.js.map +0 -1
  156. package/dist/serialization.js.map +0 -1
  157. package/dist/sleep.js.map +0 -1
  158. package/dist/step/context-storage.js.map +0 -1
  159. package/dist/step/get-step-metadata.js.map +0 -1
  160. package/dist/step/get-workflow-metadata.js.map +0 -1
  161. package/dist/step.js.map +0 -1
  162. package/dist/symbols.js.map +0 -1
  163. package/dist/telemetry/semantic-conventions.js.map +0 -1
  164. package/dist/telemetry.js.map +0 -1
  165. package/dist/types.js.map +0 -1
  166. package/dist/util.js.map +0 -1
  167. package/dist/vm/index.js.map +0 -1
  168. package/dist/vm/uuid.js.map +0 -1
  169. package/dist/workflow/create-hook.js.map +0 -1
  170. package/dist/workflow/define-hook.js.map +0 -1
  171. package/dist/workflow/get-workflow-metadata.js.map +0 -1
  172. package/dist/workflow/hook.js.map +0 -1
  173. package/dist/workflow/index.js.map +0 -1
  174. package/dist/workflow/sleep.js.map +0 -1
  175. package/dist/workflow/writable-stream.js.map +0 -1
  176. package/dist/workflow.js.map +0 -1
  177. package/dist/writable-stream.d.ts.map +0 -1
  178. package/dist/writable-stream.js +0 -16
  179. package/dist/writable-stream.js.map +0 -1
package/dist/global.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { pluralize } from '@workflow/utils';
1
2
  /**
2
3
  * An error that is thrown when one or more operations (steps/hooks/etc.) are called but do
3
4
  * not yet have corresponding entries in the event log. The workflow
@@ -10,24 +11,35 @@ export class WorkflowSuspension extends Error {
10
11
  stepCount;
11
12
  hookCount;
12
13
  waitCount;
13
- constructor(steps, global) {
14
- const stepCount = steps.filter((s) => s.type === 'step').length;
15
- const hookCount = steps.filter((s) => s.type === 'hook').length;
16
- const waitCount = steps.filter((s) => s.type === 'wait').length;
14
+ constructor(stepsInput, global) {
15
+ // Convert Map to array for iteration and storage
16
+ const steps = [...stepsInput.values()];
17
+ // Single-pass counting for efficiency
18
+ let stepCount = 0;
19
+ let hookCount = 0;
20
+ let waitCount = 0;
21
+ for (const item of steps) {
22
+ if (item.type === 'step')
23
+ stepCount++;
24
+ else if (item.type === 'hook')
25
+ hookCount++;
26
+ else if (item.type === 'wait')
27
+ waitCount++;
28
+ }
17
29
  // Build description parts
18
30
  const parts = [];
19
31
  if (stepCount > 0) {
20
- parts.push(`${stepCount} ${stepCount === 1 ? 'step' : 'steps'}`);
32
+ parts.push(`${stepCount} ${pluralize('step', 'steps', stepCount)}`);
21
33
  }
22
34
  if (hookCount > 0) {
23
- parts.push(`${hookCount} ${hookCount === 1 ? 'hook' : 'hooks'}`);
35
+ parts.push(`${hookCount} ${pluralize('hook', 'hooks', hookCount)}`);
24
36
  }
25
37
  if (waitCount > 0) {
26
- parts.push(`${waitCount} ${waitCount === 1 ? 'wait' : 'waits'}`);
38
+ parts.push(`${waitCount} ${pluralize('wait', 'waits', waitCount)}`);
27
39
  }
28
40
  // Determine verb (has/have) and action (run/created/received)
29
41
  const totalCount = stepCount + hookCount + waitCount;
30
- const hasOrHave = totalCount === 1 ? 'has' : 'have';
42
+ const hasOrHave = pluralize('has', 'have', totalCount);
31
43
  let action;
32
44
  if (stepCount > 0) {
33
45
  action = 'run';
@@ -59,4 +71,4 @@ export class WorkflowSuspension extends Error {
59
71
  export function ENOTSUP() {
60
72
  throw new Error('Not supported in workflow functions');
61
73
  }
62
- //# sourceMappingURL=global.js.map
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dsb2JhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFnQzVDOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUs7SUFDM0MsS0FBSyxDQUFjO0lBQ25CLFVBQVUsQ0FBb0I7SUFDOUIsU0FBUyxDQUFTO0lBQ2xCLFNBQVMsQ0FBUztJQUNsQixTQUFTLENBQVM7SUFFbEIsWUFBWSxVQUFrQyxFQUFFLE1BQXlCO1FBQ3ZFLGlEQUFpRDtRQUNqRCxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFdkMsc0NBQXNDO1FBQ3RDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU07Z0JBQUUsU0FBUyxFQUFFLENBQUM7aUJBQ2pDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNO2dCQUFFLFNBQVMsRUFBRSxDQUFDO2lCQUN0QyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTTtnQkFBRSxTQUFTLEVBQUUsQ0FBQztRQUM3QyxDQUFDO1FBRUQsMEJBQTBCO1FBQzFCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCw4REFBOEQ7UUFDOUQsTUFBTSxVQUFVLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDckQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDdkQsSUFBSSxNQUFjLENBQUM7UUFDbkIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEIsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNqQixDQUFDO2FBQU0sSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUNyQixDQUFDO2FBQU0sSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUNyQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxVQUFVLENBQUM7UUFDdEIsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUNmLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNkLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksU0FBUyxhQUFhLE1BQU0sTUFBTTtZQUM5RCxDQUFDLENBQUMsK0JBQStCLENBQUMsQ0FBQywrQkFBK0I7UUFDdEUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBYztRQUN0QixPQUFPLEtBQUssWUFBWSxrQkFBa0IsQ0FBQztJQUM3QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsT0FBTztJQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFDekQsQ0FBQyJ9
package/dist/index.d.ts CHANGED
@@ -11,9 +11,9 @@
11
11
  */
12
12
  export { FatalError, RetryableError, type RetryableErrorOptions, } from '@workflow/errors';
13
13
  export { createHook, createWebhook, type Hook, type HookOptions, type RequestWithResponse, type Webhook, type WebhookOptions, } from './create-hook.js';
14
- export { defineHook } from './define-hook.js';
14
+ export { defineHook, type TypedHook } from './define-hook.js';
15
+ export { sleep } from './sleep.js';
15
16
  export { getStepMetadata, type StepMetadata, } from './step/get-step-metadata.js';
16
17
  export { getWorkflowMetadata, type WorkflowMetadata, } from './step/get-workflow-metadata.js';
17
- export { sleep } from './sleep.js';
18
- export { getWritable } from './writable-stream.js';
18
+ export { getWritable, type WorkflowWritableStreamOptions, } from './step/writable-stream.js';
19
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,UAAU,EACV,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,aAAa,EACb,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,eAAe,EACf,KAAK,YAAY,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,UAAU,EACV,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,aAAa,EACb,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,eAAe,EACf,KAAK,YAAY,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,WAAW,EACX,KAAK,6BAA6B,GACnC,MAAM,2BAA2B,CAAC"}
package/dist/index.js CHANGED
@@ -12,8 +12,8 @@
12
12
  export { FatalError, RetryableError, } from '@workflow/errors';
13
13
  export { createHook, createWebhook, } from './create-hook.js';
14
14
  export { defineHook } from './define-hook.js';
15
+ export { sleep } from './sleep.js';
15
16
  export { getStepMetadata, } from './step/get-step-metadata.js';
16
17
  export { getWorkflowMetadata, } from './step/get-workflow-metadata.js';
17
- export { sleep } from './sleep.js';
18
- export { getWritable } from './writable-stream.js';
19
- //# sourceMappingURL=index.js.map
18
+ export { getWritable, } from './step/writable-stream.js';
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFDTCxVQUFVLEVBQ1YsY0FBYyxHQUVmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLFVBQVUsRUFDVixhQUFhLEdBTWQsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUNMLGVBQWUsR0FFaEIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsbUJBQW1CLEdBRXBCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUNMLFdBQVcsR0FFWixNQUFNLDJCQUEyQixDQUFDIn0=
package/dist/logger.js CHANGED
@@ -29,4 +29,4 @@ export const runtimeLogger = createLogger('runtime');
29
29
  export const webhookLogger = createLogger('webhook');
30
30
  export const eventsLogger = createLogger('events');
31
31
  export const adapterLogger = createLogger('adapter');
32
- //# sourceMappingURL=logger.js.map
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLFNBQVMsWUFBWSxDQUFDLFNBQWlCO0lBQ3JDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxZQUFZLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFFakQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRTtRQUMvQixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNDLE9BQU8sQ0FBQyxPQUFlLEVBQUUsUUFBOEIsRUFBRSxFQUFFO1lBQ3pELFVBQVUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFOUIsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3ZCLGFBQWEsRUFBRTtxQkFDWixJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDYixJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUcsS0FBSyxJQUFJLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDcEUsQ0FBQyxDQUFDO3FCQUNELEtBQUssQ0FBQyxHQUFHLEVBQUU7b0JBQ1YsbUNBQW1DO2dCQUNyQyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDdEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDcEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDcEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUM7S0FDdkIsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMifQ==
@@ -2,7 +2,67 @@
2
2
  * Observability utilities for workflow inspection.
3
3
  * Shared between CLI and Web UI for consistent behavior.
4
4
  */
5
+ import { inspect } from 'node:util';
6
+ /**
7
+ * Marker for stream reference objects that can be rendered as links
8
+ */
9
+ export declare const STREAM_REF_TYPE = "__workflow_stream_ref__";
10
+ /**
11
+ * A stream reference object that contains the stream ID and can be
12
+ * detected in the UI to render as a clickable link
13
+ */
14
+ export interface StreamRef {
15
+ __type: typeof STREAM_REF_TYPE;
16
+ streamId: string;
17
+ }
18
+ /**
19
+ * Marker for custom class instance references.
20
+ * Used in observability to represent serialized class instances
21
+ * that cannot be fully deserialized (because the class is not registered).
22
+ */
23
+ export declare const CLASS_INSTANCE_REF_TYPE = "__workflow_class_instance_ref__";
24
+ /**
25
+ * A class instance reference that contains the class name and serialized data.
26
+ * This is used during o11y hydration when a custom class instance is encountered
27
+ * but the class is not registered for deserialization.
28
+ *
29
+ * Provides a custom `util.inspect.custom` representation for nice CLI output:
30
+ * `Point { x: 1, y: 2 } [class//path/to/file.ts//Point]`
31
+ */
32
+ export declare class ClassInstanceRef {
33
+ readonly className: string;
34
+ readonly classId: string;
35
+ readonly data: unknown;
36
+ readonly __type = "__workflow_class_instance_ref__";
37
+ constructor(className: string, classId: string, data: unknown);
38
+ /**
39
+ * Custom inspect for Node.js util.inspect (used by console.log, CLI, etc.)
40
+ * Renders as: ClassName@filename { ...data }
41
+ * The @filename portion is styled gray (like undefined in Node.js)
42
+ */
43
+ [inspect.custom](_depth: number, options: import('node:util').InspectOptionsStylized): string;
44
+ /**
45
+ * For JSON.stringify - returns a plain object representation
46
+ */
47
+ toJSON(): {
48
+ __type: string;
49
+ className: string;
50
+ classId: string;
51
+ data: unknown;
52
+ };
53
+ }
54
+ /**
55
+ * Check if a value is a ClassInstanceRef object
56
+ */
57
+ export declare const isClassInstanceRef: (value: unknown) => value is ClassInstanceRef;
58
+ /**
59
+ * Check if a value is a stream ID string
60
+ */
5
61
  export declare const isStreamId: (value: unknown) => boolean;
62
+ /**
63
+ * Check if a value is a StreamRef object
64
+ */
65
+ export declare const isStreamRef: (value: unknown) => value is StreamRef;
6
66
  export declare const hydrateResourceIO: <T extends {
7
67
  stepId?: string;
8
68
  hookId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,OAE3C,CAAC;AA0FF,eAAO,MAAM,iBAAiB,GAC5B,CAAC,SAAS;IACR,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,gBAAgB,CAAC,EAAE,GAAG,CAAC;CACxB,EAED,UAAU,CAAC,KACV,CAmBF,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAmBvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,SAAK,GAAG,MAAM,CAG7D"}
1
+ {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;GAEG;AACH,eAAO,MAAM,eAAe,4BAA4B,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,OAAO,eAAe,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,oCAAoC,CAAC;AAEzE;;;;;;;GAOG;AACH,qBAAa,gBAAgB;aAIT,SAAS,EAAE,MAAM;aACjB,OAAO,EAAE,MAAM;aACf,IAAI,EAAE,OAAO;IAL/B,QAAQ,CAAC,MAAM,qCAA2B;gBAGxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO;IAG/B;;;;OAIG;IACH,CAAC,OAAO,CAAC,MAAM,CAAC,CACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,WAAW,EAAE,sBAAsB,GAClD,MAAM;IAaT;;OAEG;IACH,MAAM,IAAI;QACR,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,OAAO,CAAC;KACf;CAQF;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,OAAO,KACb,KAAK,IAAI,gBAUX,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,OAE3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,SASrD,CAAC;AAyQF,eAAO,MAAM,iBAAiB,GAC5B,CAAC,SAAS;IACR,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,gBAAgB,CAAC,EAAE,GAAG,CAAC;CACxB,EAED,UAAU,CAAC,KACV,CA6BF,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAmBvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,SAAK,GAAG,MAAM,CAG7D"}
@@ -2,71 +2,295 @@
2
2
  * Observability utilities for workflow inspection.
3
3
  * Shared between CLI and Web UI for consistent behavior.
4
4
  */
5
- import { hydrateStepArguments, hydrateStepReturnValue, hydrateWorkflowArguments, hydrateWorkflowReturnValue, } from './serialization.js';
5
+ import { inspect } from 'node:util';
6
+ import { parseClassName } from '@workflow/utils/parse-name';
7
+ import { unflatten } from 'devalue';
8
+ import { getCommonRevivers, hydrateStepArguments, hydrateStepReturnValue, hydrateWorkflowArguments, hydrateWorkflowReturnValue, } from './serialization.js';
6
9
  const STREAM_ID_PREFIX = 'strm_';
7
- /*
8
- * Check if a value is a stream ID
10
+ /**
11
+ * Marker for stream reference objects that can be rendered as links
12
+ */
13
+ export const STREAM_REF_TYPE = '__workflow_stream_ref__';
14
+ /**
15
+ * Marker for custom class instance references.
16
+ * Used in observability to represent serialized class instances
17
+ * that cannot be fully deserialized (because the class is not registered).
18
+ */
19
+ export const CLASS_INSTANCE_REF_TYPE = '__workflow_class_instance_ref__';
20
+ /**
21
+ * A class instance reference that contains the class name and serialized data.
22
+ * This is used during o11y hydration when a custom class instance is encountered
23
+ * but the class is not registered for deserialization.
24
+ *
25
+ * Provides a custom `util.inspect.custom` representation for nice CLI output:
26
+ * `Point { x: 1, y: 2 } [class//path/to/file.ts//Point]`
27
+ */
28
+ export class ClassInstanceRef {
29
+ className;
30
+ classId;
31
+ data;
32
+ __type = CLASS_INSTANCE_REF_TYPE;
33
+ constructor(className, classId, data) {
34
+ this.className = className;
35
+ this.classId = classId;
36
+ this.data = data;
37
+ }
38
+ /**
39
+ * Custom inspect for Node.js util.inspect (used by console.log, CLI, etc.)
40
+ * Renders as: ClassName@filename { ...data }
41
+ * The @filename portion is styled gray (like undefined in Node.js)
42
+ */
43
+ [inspect.custom](_depth, options) {
44
+ const dataStr = inspect(this.data, { ...options, depth: options.depth });
45
+ const parsed = parseClassName(this.classId);
46
+ const filePath = parsed?.path ?? this.classId;
47
+ // Extract just the filename from the path
48
+ const fileName = filePath.split('/').pop() ?? filePath;
49
+ // Style the @filename portion gray using the 'undefined' style
50
+ const styledFileName = options.stylize
51
+ ? options.stylize(`@${fileName}`, 'undefined')
52
+ : `@${fileName}`;
53
+ return `${this.className}${styledFileName} ${dataStr}`;
54
+ }
55
+ /**
56
+ * For JSON.stringify - returns a plain object representation
57
+ */
58
+ toJSON() {
59
+ return {
60
+ __type: this.__type,
61
+ className: this.className,
62
+ classId: this.classId,
63
+ data: this.data,
64
+ };
65
+ }
66
+ }
67
+ /**
68
+ * Check if a value is a ClassInstanceRef object
69
+ */
70
+ export const isClassInstanceRef = (value) => {
71
+ return (value instanceof ClassInstanceRef ||
72
+ (value !== null &&
73
+ typeof value === 'object' &&
74
+ '__type' in value &&
75
+ value.__type === CLASS_INSTANCE_REF_TYPE &&
76
+ 'className' in value &&
77
+ typeof value.className === 'string'));
78
+ };
79
+ /**
80
+ * Check if a value is a stream ID string
9
81
  */
10
82
  export const isStreamId = (value) => {
11
83
  return typeof value === 'string' && value.startsWith(STREAM_ID_PREFIX);
12
84
  };
13
- const streamToStreamId = (value) => {
85
+ /**
86
+ * Check if a value is a StreamRef object
87
+ */
88
+ export const isStreamRef = (value) => {
89
+ return (value !== null &&
90
+ typeof value === 'object' &&
91
+ '__type' in value &&
92
+ value.__type === STREAM_REF_TYPE &&
93
+ 'streamId' in value &&
94
+ typeof value.streamId === 'string');
95
+ };
96
+ /**
97
+ * Create a StreamRef object from a stream value.
98
+ * This is used during hydration to convert serialized streams into
99
+ * objects that can be rendered as links in the UI.
100
+ */
101
+ const streamToStreamRef = (value) => {
102
+ let streamId;
14
103
  if ('name' in value) {
15
- if (!value.name.startsWith(STREAM_ID_PREFIX)) {
16
- return `${STREAM_ID_PREFIX}${value.name}`;
104
+ const name = String(value.name);
105
+ if (!name.startsWith(STREAM_ID_PREFIX)) {
106
+ streamId = `${STREAM_ID_PREFIX}${name}`;
107
+ }
108
+ else {
109
+ streamId = name;
17
110
  }
18
- return value.name;
19
111
  }
20
- return `${STREAM_ID_PREFIX}null`;
112
+ else {
113
+ streamId = `${STREAM_ID_PREFIX}null`;
114
+ }
115
+ return {
116
+ __type: STREAM_REF_TYPE,
117
+ streamId,
118
+ };
119
+ };
120
+ const serializedStepFunctionToString = (value) => {
121
+ if (!value)
122
+ return 'null';
123
+ if (typeof value !== 'object')
124
+ return 'null';
125
+ if ('stepId' in value) {
126
+ const stepId = value.stepId;
127
+ // TODO: Add closure vars to the string representation.
128
+ // value.closureVars
129
+ return `<step:${stepId}>`;
130
+ }
131
+ return '<function>';
132
+ };
133
+ /**
134
+ * Extract the class name from a classId.
135
+ * The classId format is typically "path/to/file/ClassName" so we extract the last segment.
136
+ */
137
+ const extractClassName = (classId) => {
138
+ if (!classId)
139
+ return 'Unknown';
140
+ const parts = classId.split('/');
141
+ return parts[parts.length - 1] || classId;
142
+ };
143
+ /**
144
+ * Convert a serialized class instance to a ClassInstanceRef for o11y display.
145
+ * This allows viewing custom class instances in the UI without needing
146
+ * the class to be registered for deserialization.
147
+ */
148
+ const serializedInstanceToRef = (value) => {
149
+ return new ClassInstanceRef(extractClassName(value.classId), value.classId, value.data);
150
+ };
151
+ /**
152
+ * Convert a serialized class reference to a string representation.
153
+ * This is used for Class type (the constructor reference itself, not an instance).
154
+ */
155
+ const serializedClassToString = (value) => {
156
+ const className = extractClassName(value.classId);
157
+ return `<class:${className}>`;
21
158
  };
22
159
  /**
23
160
  * This is an extra reviver for devalue that takes any streams that would be converted,
24
- * into actual streams, and instead formats them as string links for printing in CLI output.
161
+ * into actual streams, and instead formats them as StreamRef objects for display in the UI.
25
162
  *
26
163
  * This is mainly because we don't want to open any streams that we aren't going to read from,
27
164
  * and so we can get the string ID/name, which the serializer stream doesn't provide.
165
+ *
166
+ * Also handles custom class instances (Instance) and class references (Class) by converting
167
+ * them to opaque markers, since the custom classes are not registered for deserialization
168
+ * in the o11y context.
28
169
  */
29
170
  const streamPrintRevivers = {
30
- ReadableStream: streamToStreamId,
31
- WritableStream: streamToStreamId,
32
- TransformStream: streamToStreamId,
171
+ ReadableStream: streamToStreamRef,
172
+ WritableStream: streamToStreamRef,
173
+ TransformStream: streamToStreamRef,
174
+ StepFunction: serializedStepFunctionToString,
175
+ Instance: serializedInstanceToRef,
176
+ Class: serializedClassToString,
177
+ };
178
+ /**
179
+ * Combined revivers for observability hydration.
180
+ * Merges common revivers with stream print revivers.
181
+ */
182
+ const getObservabilityRevivers = () => ({
183
+ ...getCommonRevivers(globalThis),
184
+ ...streamPrintRevivers,
185
+ });
186
+ /**
187
+ * Check if data is in legacy format (devalue parsed array).
188
+ * Legacy specVersion 1 runs stored data as JSON arrays from devalue.
189
+ */
190
+ const isLegacyFormat = (data) => {
191
+ return Array.isArray(data);
192
+ };
193
+ /**
194
+ * Check if data is in binary format (Uint8Array).
195
+ * specVersion 2+ runs store data as binary Uint8Array with a format prefix.
196
+ */
197
+ const isBinaryFormat = (data) => {
198
+ return data instanceof Uint8Array;
199
+ };
200
+ /**
201
+ * Hydrate legacy format data (array) using unflatten.
202
+ */
203
+ const hydrateLegacyData = (data) => {
204
+ return unflatten(data, getObservabilityRevivers());
33
205
  };
34
206
  const hydrateStepIO = (step) => {
207
+ let hydratedInput = step.input;
208
+ let hydratedOutput = step.output;
209
+ // Hydrate input - handle both binary (specVersion 2) and legacy (specVersion 1) formats
210
+ if (isBinaryFormat(step.input) && step.input.byteLength > 0) {
211
+ hydratedInput = hydrateStepArguments(step.input, [], step.runId, globalThis, streamPrintRevivers);
212
+ }
213
+ else if (isLegacyFormat(step.input) && step.input.length > 0) {
214
+ hydratedInput = hydrateLegacyData(step.input);
215
+ }
216
+ // Hydrate output - handle both binary (specVersion 2) and legacy (specVersion 1) formats
217
+ if (isBinaryFormat(step.output)) {
218
+ hydratedOutput = hydrateStepReturnValue(step.output, globalThis, streamPrintRevivers);
219
+ }
220
+ else if (isLegacyFormat(step.output) && step.output.length > 0) {
221
+ hydratedOutput = hydrateLegacyData(step.output);
222
+ }
35
223
  return {
36
224
  ...step,
37
- input: step.input && Array.isArray(step.input) && step.input.length
38
- ? hydrateStepArguments(step.input, [], globalThis, streamPrintRevivers)
39
- : step.input,
40
- output: step.output
41
- ? hydrateStepReturnValue(step.output, globalThis, streamPrintRevivers)
42
- : step.output,
225
+ input: hydratedInput,
226
+ output: hydratedOutput,
43
227
  };
44
228
  };
45
229
  const hydrateWorkflowIO = (workflow) => {
230
+ let hydratedInput = workflow.input;
231
+ let hydratedOutput = workflow.output;
232
+ // Hydrate input - handle both binary (specVersion 2) and legacy (specVersion 1) formats
233
+ if (isBinaryFormat(workflow.input) && workflow.input.byteLength > 0) {
234
+ hydratedInput = hydrateWorkflowArguments(workflow.input, globalThis, streamPrintRevivers);
235
+ }
236
+ else if (isLegacyFormat(workflow.input) && workflow.input.length > 0) {
237
+ hydratedInput = hydrateLegacyData(workflow.input);
238
+ }
239
+ // Hydrate output - handle both binary (specVersion 2) and legacy (specVersion 1) formats
240
+ if (isBinaryFormat(workflow.output)) {
241
+ hydratedOutput = hydrateWorkflowReturnValue(workflow.output, [], workflow.runId, globalThis, streamPrintRevivers);
242
+ }
243
+ else if (isLegacyFormat(workflow.output) && workflow.output.length > 0) {
244
+ hydratedOutput = hydrateLegacyData(workflow.output);
245
+ }
46
246
  return {
47
247
  ...workflow,
48
- input: workflow.input && Array.isArray(workflow.input) && workflow.input.length
49
- ? hydrateWorkflowArguments(workflow.input, globalThis, streamPrintRevivers)
50
- : workflow.input,
51
- output: workflow.output
52
- ? hydrateWorkflowReturnValue(workflow.output, [], globalThis, streamPrintRevivers)
53
- : workflow.output,
248
+ input: hydratedInput,
249
+ output: hydratedOutput,
54
250
  };
55
251
  };
56
252
  const hydrateEventData = (event) => {
253
+ if (!event.eventData) {
254
+ return event;
255
+ }
256
+ const eventData = { ...event.eventData };
257
+ // Events can have various eventData with non-devalued keys.
258
+ // So far, only eventData.result is devalued (though this may change),
259
+ // so we need to hydrate it specifically.
260
+ try {
261
+ if ('result' in eventData && typeof eventData.result === 'object') {
262
+ // Handle both binary (specVersion 2) and legacy (specVersion 1) formats
263
+ if (isBinaryFormat(eventData.result)) {
264
+ eventData.result = hydrateStepReturnValue(eventData.result, globalThis, streamPrintRevivers);
265
+ }
266
+ else if (isLegacyFormat(eventData.result) &&
267
+ eventData.result.length > 0) {
268
+ eventData.result = hydrateLegacyData(eventData.result);
269
+ }
270
+ }
271
+ }
272
+ catch (error) {
273
+ console.error('Error hydrating event data', error);
274
+ }
57
275
  return {
58
276
  ...event,
59
- eventData: event.eventData
60
- ? hydrateStepArguments(event.eventData, [], globalThis)
61
- : event.eventData,
277
+ eventData,
62
278
  };
63
279
  };
64
280
  const hydrateHookMetadata = (hook) => {
281
+ let hydratedMetadata = hook.metadata;
282
+ if (hook.metadata && 'runId' in hook) {
283
+ // Handle both binary (specVersion 2) and legacy (specVersion 1) formats
284
+ if (isBinaryFormat(hook.metadata)) {
285
+ hydratedMetadata = hydrateStepArguments(hook.metadata, [], hook.runId, globalThis, streamPrintRevivers);
286
+ }
287
+ else if (isLegacyFormat(hook.metadata) && hook.metadata.length > 0) {
288
+ hydratedMetadata = hydrateLegacyData(hook.metadata);
289
+ }
290
+ }
65
291
  return {
66
292
  ...hook,
67
- metadata: hook.metadata
68
- ? hydrateStepArguments(hook.metadata, [], globalThis)
69
- : hook.metadata,
293
+ metadata: hydratedMetadata,
70
294
  };
71
295
  };
72
296
  export const hydrateResourceIO = (resource) => {
@@ -87,7 +311,16 @@ export const hydrateResourceIO = (resource) => {
87
311
  hydrated = hydrateWorkflowIO(resource);
88
312
  }
89
313
  if ('executionContext' in hydrated) {
90
- const { executionContext: _, ...rest } = hydrated;
314
+ const { executionContext, ...rest } = hydrated;
315
+ // Preserve workflowCoreVersion from executionContext for observability
316
+ const workflowCoreVersion = executionContext &&
317
+ typeof executionContext === 'object' &&
318
+ 'workflowCoreVersion' in executionContext
319
+ ? executionContext.workflowCoreVersion
320
+ : undefined;
321
+ if (workflowCoreVersion) {
322
+ return { ...rest, workflowCoreVersion };
323
+ }
91
324
  return rest;
92
325
  }
93
326
  return hydrated;
@@ -123,4 +356,4 @@ export function truncateId(id, maxLength = 12) {
123
356
  return id;
124
357
  return `${id.slice(0, maxLength)}...`;
125
358
  }
126
- //# sourceMappingURL=observability.js.map
359
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9vYnNlcnZhYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDcEMsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4QiwwQkFBMEIsR0FDM0IsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQztBQUVqQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyx5QkFBeUIsQ0FBQztBQVd6RDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsaUNBQWlDLENBQUM7QUFFekU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFJVDtJQUNBO0lBQ0E7SUFMVCxNQUFNLEdBQUcsdUJBQXVCLENBQUM7SUFFMUMsWUFDa0IsU0FBaUIsRUFDakIsT0FBZSxFQUNmLElBQWE7UUFGYixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixTQUFJLEdBQUosSUFBSSxDQUFTO0lBQzVCLENBQUM7SUFFSjs7OztPQUlHO0lBQ0gsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQ2QsTUFBYyxFQUNkLE9BQW1EO1FBRW5ELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sTUFBTSxHQUFHLGNB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
package/dist/private.d.ts CHANGED
@@ -15,10 +15,19 @@ export declare function registerStepFunction(stepId: string, stepFn: StepFunctio
15
15
  * Find a registered step function by name
16
16
  */
17
17
  export declare function getStepFunction(stepId: string): StepFunction | undefined;
18
+ /**
19
+ * Get closure variables for the current step function
20
+ * @internal
21
+ */
22
+ export { __private_getClosureVars } from './step/get-closure-vars.js';
18
23
  export interface WorkflowOrchestratorContext {
19
24
  globalThis: typeof globalThis;
20
25
  eventsConsumer: EventsConsumer;
21
- invocationsQueue: QueueItem[];
26
+ /**
27
+ * Map of pending invocations keyed by correlationId.
28
+ * Using Map instead of Array for O(1) lookup/delete operations.
29
+ */
30
+ invocationsQueue: Map<string, QueueItem>;
22
31
  onWorkflowError: (error: Error) => void;
23
32
  generateUlid: () => string;
24
33
  generateNanoid: () => string;
@@ -1 +1 @@
1
- {"version":3,"file":"private.d.ts","sourceRoot":"","sources":["../src/private.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,MAAM,YAAY,CACtB,IAAI,SAAS,YAAY,EAAE,GAAG,GAAG,EAAE,EACnC,MAAM,SAAS,YAAY,GAAG,OAAO,GAAG,OAAO,IAC7C,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAIF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,QAExE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAExE;AAED,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,SAAS,EAAE,CAAC;IAC9B,eAAe,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,MAAM,CAAC;CAC9B"}
1
+ {"version":3,"file":"private.d.ts","sourceRoot":"","sources":["../src/private.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,MAAM,YAAY,CACtB,IAAI,SAAS,YAAY,EAAE,GAAG,GAAG,EAAE,EACnC,MAAM,SAAS,YAAY,GAAG,OAAO,GAAG,OAAO,IAC7C,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAIF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,QAExE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAExE;AAED;;;GAGG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,cAAc,EAAE,cAAc,CAAC;IAC/B;;;OAGG;IACH,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzC,eAAe,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,MAAM,CAAC;CAC9B"}
package/dist/private.js CHANGED
@@ -14,4 +14,9 @@ export function registerStepFunction(stepId, stepFn) {
14
14
  export function getStepFunction(stepId) {
15
15
  return registeredSteps.get(stepId);
16
16
  }
17
- //# sourceMappingURL=private.js.map
17
+ /**
18
+ * Get closure variables for the current step function
19
+ * @internal
20
+ */
21
+ export { __private_getClosureVars } from './step/get-closure-vars.js';
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcml2YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBYUgsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7QUFFeEQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsTUFBYyxFQUFFLE1BQW9CO0lBQ3ZFLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBYztJQUM1QyxPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVEOzs7R0FHRztBQUNILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDIn0=
@@ -0,0 +1,52 @@
1
+ import type { Event, HealthCheckPayload, World } from '@workflow/world';
2
+ /**
3
+ * Result of a health check operation.
4
+ */
5
+ export interface HealthCheckResult {
6
+ healthy: boolean;
7
+ /** Error message if health check failed */
8
+ error?: string;
9
+ }
10
+ /**
11
+ * Checks if the given message is a health check payload.
12
+ * If so, returns the parsed payload. Otherwise returns undefined.
13
+ */
14
+ export declare function parseHealthCheckPayload(message: unknown): HealthCheckPayload | undefined;
15
+ /**
16
+ * Handles a health check message by writing the result to the world's stream.
17
+ * The caller can listen to this stream to get the health check response.
18
+ *
19
+ * @param healthCheck - The parsed health check payload
20
+ * @param endpoint - Which endpoint is responding ('workflow' or 'step')
21
+ */
22
+ export declare function handleHealthCheckMessage(healthCheck: HealthCheckPayload, endpoint: 'workflow' | 'step'): Promise<void>;
23
+ export type HealthCheckEndpoint = 'workflow' | 'step';
24
+ export interface HealthCheckOptions {
25
+ /** Timeout in milliseconds to wait for health check response. Default: 30000 (30s) */
26
+ timeout?: number;
27
+ }
28
+ export declare function healthCheck(world: World, endpoint: HealthCheckEndpoint, options?: HealthCheckOptions): Promise<HealthCheckResult>;
29
+ /**
30
+ * Loads all workflow run events by iterating through all pages of paginated results.
31
+ * This ensures that *all* events are loaded into memory before running the workflow.
32
+ * Events must be in chronological order (ascending) for proper workflow replay.
33
+ */
34
+ export declare function getAllWorkflowRunEvents(runId: string): Promise<Event[]>;
35
+ /**
36
+ * Wraps a request/response handler and adds a health check "mode"
37
+ * based on the presence of a `__health` query parameter.
38
+ */
39
+ export declare function withHealthCheck(handler: (req: Request) => Promise<Response>): (req: Request) => Promise<Response>;
40
+ /**
41
+ * Queues a message to the specified queue with tracing.
42
+ */
43
+ export declare function queueMessage(world: World, ...args: Parameters<typeof world.queue>): Promise<void>;
44
+ /**
45
+ * Calculates the queue overhead time in milliseconds for a given message.
46
+ */
47
+ export declare function getQueueOverhead(message: {
48
+ requestedAt?: Date;
49
+ }): {
50
+ [k: string]: number;
51
+ } | undefined;
52
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/runtime/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,kBAAkB,EAElB,KAAK,EACN,MAAM,iBAAiB,CAAC;AAmBzB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,GACf,kBAAkB,GAAG,SAAS,CAMhC;AAWD;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE,UAAU,GAAG,MAAM,GAC5B,OAAO,CAAC,IAAI,CAAC,CAef;AAED,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAuFD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAgE5B;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAwB7E;AAYD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,GAC3C,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAyBrC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,KAAK,EACZ,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,iBAcxC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,IAAI,CAAA;CAAE;;cAS/D"}