@workflow/core 4.0.1-beta.4 → 4.0.1-beta.40

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 (147) hide show
  1. package/LICENSE.md +201 -21
  2. package/dist/builtins.js +1 -1
  3. package/dist/class-serialization.d.ts +26 -0
  4. package/dist/class-serialization.d.ts.map +1 -0
  5. package/dist/class-serialization.js +66 -0
  6. package/dist/create-hook.js +1 -1
  7. package/dist/define-hook.d.ts +40 -25
  8. package/dist/define-hook.d.ts.map +1 -1
  9. package/dist/define-hook.js +22 -27
  10. package/dist/events-consumer.js +1 -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 +12 -2
  15. package/dist/global.d.ts.map +1 -1
  16. package/dist/global.js +32 -8
  17. package/dist/index.d.ts +3 -2
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +3 -2
  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 +175 -19
  24. package/dist/parse-name.d.ts +12 -0
  25. package/dist/parse-name.d.ts.map +1 -1
  26. package/dist/parse-name.js +28 -3
  27. package/dist/private.d.ts +10 -1
  28. package/dist/private.d.ts.map +1 -1
  29. package/dist/private.js +6 -1
  30. package/dist/runtime/helpers.d.ts +64 -0
  31. package/dist/runtime/helpers.d.ts.map +1 -0
  32. package/dist/runtime/helpers.js +243 -0
  33. package/dist/runtime/resume-hook.d.ts +16 -11
  34. package/dist/runtime/resume-hook.d.ts.map +1 -1
  35. package/dist/runtime/resume-hook.js +76 -64
  36. package/dist/runtime/start.d.ts +10 -0
  37. package/dist/runtime/start.d.ts.map +1 -1
  38. package/dist/runtime/start.js +56 -45
  39. package/dist/runtime/step-handler.d.ts +7 -0
  40. package/dist/runtime/step-handler.d.ts.map +1 -0
  41. package/dist/runtime/step-handler.js +353 -0
  42. package/dist/runtime/suspension-handler.d.ts +20 -0
  43. package/dist/runtime/suspension-handler.d.ts.map +1 -0
  44. package/dist/runtime/suspension-handler.js +179 -0
  45. package/dist/runtime/world.d.ts.map +1 -1
  46. package/dist/runtime/world.js +22 -21
  47. package/dist/runtime.d.ts +3 -7
  48. package/dist/runtime.d.ts.map +1 -1
  49. package/dist/runtime.js +76 -334
  50. package/dist/schemas.d.ts +1 -15
  51. package/dist/schemas.d.ts.map +1 -1
  52. package/dist/schemas.js +2 -15
  53. package/dist/serialization.d.ts +74 -10
  54. package/dist/serialization.d.ts.map +1 -1
  55. package/dist/serialization.js +295 -56
  56. package/dist/sleep.d.ts +33 -0
  57. package/dist/sleep.d.ts.map +1 -0
  58. package/dist/sleep.js +10 -0
  59. package/dist/source-map.d.ts +10 -0
  60. package/dist/source-map.d.ts.map +1 -0
  61. package/dist/source-map.js +56 -0
  62. package/dist/step/context-storage.d.ts +2 -0
  63. package/dist/step/context-storage.d.ts.map +1 -1
  64. package/dist/step/context-storage.js +1 -1
  65. package/dist/step/get-closure-vars.d.ts +9 -0
  66. package/dist/step/get-closure-vars.d.ts.map +1 -0
  67. package/dist/step/get-closure-vars.js +16 -0
  68. package/dist/step/get-step-metadata.js +1 -1
  69. package/dist/step/get-workflow-metadata.js +1 -1
  70. package/dist/step/writable-stream.d.ts +14 -0
  71. package/dist/step/writable-stream.d.ts.map +1 -0
  72. package/dist/step/writable-stream.js +30 -0
  73. package/dist/step.d.ts +1 -1
  74. package/dist/step.d.ts.map +1 -1
  75. package/dist/step.js +51 -11
  76. package/dist/symbols.d.ts +7 -0
  77. package/dist/symbols.d.ts.map +1 -1
  78. package/dist/symbols.js +8 -1
  79. package/dist/telemetry/semantic-conventions.d.ts +66 -38
  80. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  81. package/dist/telemetry/semantic-conventions.js +16 -3
  82. package/dist/telemetry.d.ts +8 -4
  83. package/dist/telemetry.d.ts.map +1 -1
  84. package/dist/telemetry.js +39 -6
  85. package/dist/types.d.ts +0 -7
  86. package/dist/types.d.ts.map +1 -1
  87. package/dist/types.js +1 -26
  88. package/dist/util.d.ts +9 -27
  89. package/dist/util.d.ts.map +1 -1
  90. package/dist/util.js +37 -44
  91. package/dist/vm/index.js +2 -2
  92. package/dist/vm/uuid.js +1 -1
  93. package/dist/workflow/create-hook.js +1 -1
  94. package/dist/workflow/define-hook.d.ts +3 -3
  95. package/dist/workflow/define-hook.d.ts.map +1 -1
  96. package/dist/workflow/define-hook.js +1 -1
  97. package/dist/workflow/get-workflow-metadata.js +1 -1
  98. package/dist/workflow/hook.d.ts.map +1 -1
  99. package/dist/workflow/hook.js +6 -9
  100. package/dist/workflow/index.d.ts +1 -0
  101. package/dist/workflow/index.d.ts.map +1 -1
  102. package/dist/workflow/index.js +2 -1
  103. package/dist/workflow/sleep.d.ts +4 -0
  104. package/dist/workflow/sleep.d.ts.map +1 -0
  105. package/dist/workflow/sleep.js +54 -0
  106. package/dist/workflow/writable-stream.js +1 -1
  107. package/dist/workflow.d.ts.map +1 -1
  108. package/dist/workflow.js +60 -9
  109. package/dist/writable-stream.d.ts +5 -4
  110. package/dist/writable-stream.d.ts.map +1 -1
  111. package/dist/writable-stream.js +7 -6
  112. package/package.json +23 -18
  113. package/dist/builtins.js.map +0 -1
  114. package/dist/create-hook.js.map +0 -1
  115. package/dist/define-hook.js.map +0 -1
  116. package/dist/events-consumer.js.map +0 -1
  117. package/dist/global.js.map +0 -1
  118. package/dist/index.js.map +0 -1
  119. package/dist/logger.js.map +0 -1
  120. package/dist/observability.js.map +0 -1
  121. package/dist/parse-name.js.map +0 -1
  122. package/dist/private.js.map +0 -1
  123. package/dist/runtime/resume-hook.js.map +0 -1
  124. package/dist/runtime/start.js.map +0 -1
  125. package/dist/runtime/world.js.map +0 -1
  126. package/dist/runtime.js.map +0 -1
  127. package/dist/schemas.js.map +0 -1
  128. package/dist/serialization.js.map +0 -1
  129. package/dist/step/context-storage.js.map +0 -1
  130. package/dist/step/get-step-metadata.js.map +0 -1
  131. package/dist/step/get-workflow-metadata.js.map +0 -1
  132. package/dist/step.js.map +0 -1
  133. package/dist/symbols.js.map +0 -1
  134. package/dist/telemetry/semantic-conventions.js.map +0 -1
  135. package/dist/telemetry.js.map +0 -1
  136. package/dist/types.js.map +0 -1
  137. package/dist/util.js.map +0 -1
  138. package/dist/vm/index.js.map +0 -1
  139. package/dist/vm/uuid.js.map +0 -1
  140. package/dist/workflow/create-hook.js.map +0 -1
  141. package/dist/workflow/define-hook.js.map +0 -1
  142. package/dist/workflow/get-workflow-metadata.js.map +0 -1
  143. package/dist/workflow/hook.js.map +0 -1
  144. package/dist/workflow/index.js.map +0 -1
  145. package/dist/workflow/writable-stream.js.map +0 -1
  146. package/dist/workflow.js.map +0 -1
  147. package/dist/writable-stream.js.map +0 -1
@@ -41,8 +41,8 @@
41
41
  * @param name - The attribute name following OpenTelemetry semantic conventions
42
42
  * @returns A function that takes a value and returns an attribute object
43
43
  */
44
- function SemanticConvention(name) {
45
- return (value) => ({ [name]: value });
44
+ function SemanticConvention(...names) {
45
+ return (value) => Object.fromEntries(names.map((name) => [name, value]));
46
46
  }
47
47
  // Workflow attributes
48
48
  /** The name of the workflow being executed */
@@ -69,6 +69,10 @@ export const WorkflowErrorName = SemanticConvention('workflow.error.name');
69
69
  export const WorkflowErrorMessage = SemanticConvention('workflow.error.message');
70
70
  /** Number of steps created during workflow execution */
71
71
  export const WorkflowStepsCreated = SemanticConvention('workflow.steps.created');
72
+ /** Number of hooks created during workflow execution */
73
+ export const WorkflowHooksCreated = SemanticConvention('workflow.hooks.created');
74
+ /** Number of waits created during workflow execution */
75
+ export const WorkflowWaitsCreated = SemanticConvention('workflow.waits.created');
72
76
  // Step attributes
73
77
  /** Name of the step function being executed */
74
78
  export const StepName = SemanticConvention('step.name');
@@ -105,6 +109,10 @@ export const StepRetryWillRetry = SemanticConvention('step.retry.will_retry');
105
109
  // Queue attributes
106
110
  /** Name of the queue being used for message processing */
107
111
  export const QueueName = SemanticConvention('queue.name');
112
+ /** The message id being handled */
113
+ export const QueueMessageId = SemanticConvention('messaging.message.id', 'queue.message.id');
114
+ /** Time taken to enqueue the message in milliseconds */
115
+ export const QueueOverheadMs = SemanticConvention('queue.overhead_ms');
108
116
  // Deployment attributes
109
117
  /** Unique identifier for the deployment environment */
110
118
  export const DeploymentId = SemanticConvention('deployment.id');
@@ -118,4 +126,9 @@ export const HookFound = SemanticConvention('workflow.hook.found');
118
126
  // Webhook attributes
119
127
  /** Number of webhook handlers triggered */
120
128
  export const WebhookHandlersTriggered = SemanticConvention('webhook.handlers.triggered');
121
- //# sourceMappingURL=semantic-conventions.js.map
129
+ // Suspension attributes
130
+ export const WorkflowSuspensionState = SemanticConvention('workflow.suspension.state');
131
+ export const WorkflowSuspensionHookCount = SemanticConvention('workflow.suspension.hook_count');
132
+ export const WorkflowSuspensionStepCount = SemanticConvention('workflow.suspension.step_count');
133
+ export const WorkflowSuspensionWaitCount = SemanticConvention('workflow.suspension.wait_count');
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtYW50aWMtY29udmVudGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBSUg7Ozs7R0FJRztBQUNILFNBQVMsa0JBQWtCLENBQUksR0FBRyxLQUFlO0lBQy9DLE9BQU8sQ0FBQyxLQUFRLEVBQUUsRUFBRSxDQUNsQixNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBVSxDQUFDLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsc0JBQXNCO0FBRXRCLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQVMsZUFBZSxDQUFDLENBQUM7QUFFeEUsb0RBQW9EO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUVqRCxvQkFBb0IsQ0FBQyxDQUFDO0FBRXhCLDZEQUE2RDtBQUM3RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQVMsaUJBQWlCLENBQUMsQ0FBQztBQUUzRSx5Q0FBeUM7QUFDekMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBRWpELHFCQUFxQixDQUFDLENBQUM7QUFFekIscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUNqRCxxQkFBcUIsQ0FDdEIsQ0FBQztBQUVGLDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FDbkQsdUJBQXVCLENBQ3hCLENBQUM7QUFFRixpREFBaUQ7QUFDakQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsa0JBQWtC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
@@ -1,4 +1,5 @@
1
- import type { Span, SpanOptions } from '@opentelemetry/api';
1
+ import type * as api from '@opentelemetry/api';
2
+ import type { Span, SpanKind, SpanOptions } from '@opentelemetry/api';
2
3
  /**
3
4
  * Serializes the current trace context into a format that can be passed through queues
4
5
  * @returns A record of strings representing the trace context
@@ -9,7 +10,7 @@ export declare function serializeTraceCarrier(): Promise<Record<string, string>>
9
10
  * @param traceCarrier The serialized trace context
10
11
  * @returns OpenTelemetry context with the restored trace
11
12
  */
12
- export declare function deserializeTraceCarrier(traceCarrier: Record<string, string>): Promise<import("@opentelemetry/api").Context | undefined>;
13
+ export declare function deserializeTraceCarrier(traceCarrier: Record<string, string>): Promise<api.Context | undefined>;
13
14
  /**
14
15
  * Runs a function within the context of a deserialized trace
15
16
  * @param traceCarrier The serialized trace carrier (optional)
@@ -18,7 +19,10 @@ export declare function deserializeTraceCarrier(traceCarrier: Record<string, str
18
19
  */
19
20
  export declare function withTraceContext<T>(traceCarrier: Record<string, string> | undefined, fn: () => Promise<T>): Promise<T>;
20
21
  export declare function trace<T>(spanName: string, ...args: [fn: (span?: Span) => Promise<T>] | [opts: SpanOptions, fn: (span?: Span) => Promise<T>]): Promise<T>;
21
- export declare function getSpanContextForTraceCarrier(carrier: Record<string, string>): Promise<import("@opentelemetry/api").SpanContext | undefined>;
22
- export declare function getActiveSpan(): Promise<Span | null | undefined>;
22
+ export declare function getSpanContextForTraceCarrier(carrier: Record<string, string>): Promise<api.SpanContext | undefined>;
23
+ export declare function getActiveSpan(): Promise<api.Span | undefined>;
23
24
  export declare function instrumentObject<T extends object>(prefix: string, o: T): T;
25
+ export declare function getSpanKind(field: keyof typeof SpanKind): Promise<api.SpanKind | undefined>;
26
+ export declare function withOtel<T>(fn: (otel: typeof api) => T): Promise<Awaited<T> | undefined>;
27
+ export declare function linkToCurrentContext(): Promise<[api.Link] | undefined>;
24
28
  //# sourceMappingURL=telemetry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAO5D;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAO7E;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,6DAMrC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAChD,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAcZ;AAiBD,wBAAsB,KAAK,CAAC,CAAC,EAC3B,QAAQ,EAAE,MAAM,EAChB,GAAG,IAAI,EACH,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GACjC,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GACvD,OAAO,CAAC,CAAC,CAAC,CA2BZ;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,iEAQhC;AAED,wBAAsB,aAAa,qCAIlC;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAa1E"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAStE;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAO7E;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,oCAMrC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAChD,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAcZ;AAiBD,wBAAsB,KAAK,CAAC,CAAC,EAC3B,QAAQ,EAAE,MAAM,EAChB,GAAG,IAAI,EACH,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GACjC,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GACvD,OAAO,CAAC,CAAC,CAAC,CA4BZ;AAwBD,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,wCAQhC;AAED,wBAAsB,aAAa,kCAElC;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAa1E;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,OAAO,QAAQ,qCAE7D;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC,GAC1B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAIjC;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAMtE"}
package/dist/telemetry.js CHANGED
@@ -1,4 +1,6 @@
1
- import { once } from './util.js';
1
+ import { once } from '@workflow/utils';
2
+ import { WorkflowSuspension } from './global.js';
3
+ import * as Attr from './telemetry/semantic-conventions.js';
2
4
  // ============================================================
3
5
  // Trace Context Propagation Utilities
4
6
  // ============================================================
@@ -82,6 +84,7 @@ export async function trace(spanName, ...args) {
82
84
  code: otel.SpanStatusCode.ERROR,
83
85
  message: e.message,
84
86
  });
87
+ applyWorkflowSuspensionToSpan(e, otel, span);
85
88
  throw e;
86
89
  }
87
90
  finally {
@@ -89,6 +92,22 @@ export async function trace(spanName, ...args) {
89
92
  }
90
93
  });
91
94
  }
95
+ /**
96
+ * Applies workflow suspension attributes to the given span if the error is a WorkflowSuspension
97
+ * which is technically not an error, but an algebraic effect indicating suspension.
98
+ */
99
+ function applyWorkflowSuspensionToSpan(error, otel, span) {
100
+ if (!error || !WorkflowSuspension.is(error)) {
101
+ return;
102
+ }
103
+ span.setStatus({ code: otel.SpanStatusCode.OK });
104
+ span.setAttributes({
105
+ ...Attr.WorkflowSuspensionState('suspended'),
106
+ ...Attr.WorkflowSuspensionStepCount(error.stepCount),
107
+ ...Attr.WorkflowSuspensionHookCount(error.hookCount),
108
+ ...Attr.WorkflowSuspensionWaitCount(error.waitCount),
109
+ });
110
+ }
92
111
  export async function getSpanContextForTraceCarrier(carrier) {
93
112
  const [deserialized, otel] = await Promise.all([
94
113
  deserializeTraceCarrier(carrier),
@@ -99,10 +118,7 @@ export async function getSpanContextForTraceCarrier(carrier) {
99
118
  return otel.trace.getSpanContext(deserialized);
100
119
  }
101
120
  export async function getActiveSpan() {
102
- const otel = await OtelApi.value;
103
- if (!otel)
104
- return null;
105
- return otel.trace.getActiveSpan();
121
+ return await withOtel((otel) => otel.trace.getActiveSpan());
106
122
  }
107
123
  export function instrumentObject(prefix, o) {
108
124
  const handlers = {};
@@ -118,4 +134,21 @@ export function instrumentObject(prefix, o) {
118
134
  }
119
135
  return handlers;
120
136
  }
121
- //# sourceMappingURL=telemetry.js.map
137
+ export async function getSpanKind(field) {
138
+ return withOtel((x) => x.SpanKind[field]);
139
+ }
140
+ export async function withOtel(fn) {
141
+ const otel = await OtelApi.value;
142
+ if (!otel)
143
+ return undefined;
144
+ return await fn(otel);
145
+ }
146
+ export function linkToCurrentContext() {
147
+ return withOtel((otel) => {
148
+ const context = otel.trace.getActiveSpan()?.spanContext();
149
+ if (!context)
150
+ return;
151
+ return [{ context }];
152
+ });
153
+ }
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlbGVtZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sS0FBSyxJQUFJLE1BQU0scUNBQXFDLENBQUM7QUFFNUQsK0RBQStEO0FBQy9ELHNDQUFzQztBQUN0QywrREFBK0Q7QUFFL0Q7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxxQkFBcUI7SUFDekMsTUFBTSxJQUFJLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDckIsTUFBTSxPQUFPLEdBQTJCLEVBQUUsQ0FBQztJQUMzQyw4Q0FBOEM7SUFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCLENBQzNDLFlBQW9DO0lBRXBDLE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNqQyxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU87SUFDbEIsdUNBQXVDO0lBQ3ZDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxZQUFnRCxFQUNoRCxFQUFvQjtJQUVwQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDakMsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO0lBRXZCLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNyRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QixPQUFPLEVBQUUsRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtJQUM5QixJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUN0RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtJQUM3QixNQUFNLEdBQUcsR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDaEMsSUFBSSxDQUFDLEdBQUc7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN0QixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3pDLENBQUMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLEtBQUssVUFBVSxLQUFLLENBQ3pCLFFBQWdCLEVBQ2hCLEdBQUcsSUFFcUQ7SUFFeEQsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQ2hCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVU7UUFDM0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1FBQzNCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3JDLElBQUksQ0FBQyxFQUFFO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBRS9ELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixPQUFPLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUMzRCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSztnQkFDL0IsT0FBTyxFQUFHLENBQVcsQ0FBQyxPQUFPO2FBQzlCLENBQUMsQ0FBQztZQUNILDZCQUE2QixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0MsTUFBTSxDQUFDLENBQUM7UUFDVixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDYixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyw2QkFBNkIsQ0FDcEMsS0FBYyxFQUNkLElBQWdCLEVBQ2hCLElBQWM7SUFFZCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUMsT0FBTztJQUNULENBQUM7SUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqRCxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ2pCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQztRQUM1QyxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3BELEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDcEQsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztLQUNyRCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSw2QkFBNkIsQ0FDakQsT0FBK0I7SUFFL0IsTUFBTSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDN0MsdUJBQXVCLENBQUMsT0FBTyxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxLQUFLO0tBQ2QsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPO0lBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYTtJQUNqQyxPQUFPLE1BQU0sUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBbUIsTUFBYyxFQUFFLENBQUk7SUFDckUsTUFBTSxRQUFRLEdBQUcsRUFBTyxDQUFDO0lBQ3pCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQWdCLEVBQUUsQ0FBQztRQUNoRCxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ2pDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakIsbUJBQW1CO1lBQ25CLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUN2QyxLQUFLLENBQUMsR0FBRyxNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUMsS0FBNEI7SUFDNUQsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxRQUFRLENBQzVCLEVBQTJCO0lBRTNCLE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNqQyxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzVCLE9BQU8sTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsT0FBTyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQTBCLEVBQUU7UUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMxRCxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDckIsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMifQ==
package/dist/types.d.ts CHANGED
@@ -1,10 +1,3 @@
1
- export declare function getConstructorName(obj: unknown): string | null;
2
- export declare function getConstructorNames(obj: unknown): string[];
3
- /**
4
- * `instanceof` operator that works across different `vm` contexts,
5
- * based on the `name` property of the constructors of the prototype chain.
6
- */
7
- export declare function isInstanceOf<T>(v: unknown, ctor: new (...args: any[]) => T): v is T;
8
1
  export declare function getErrorName(v: unknown): string;
9
2
  export declare function getErrorStack(v: unknown): string;
10
3
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAS9D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAO1D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,CAAC,EAAE,OAAO,EACV,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAC9B,CAAC,IAAI,CAAC,CAER;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAK/C;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKhD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAK/C;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKhD"}
package/dist/types.js CHANGED
@@ -1,29 +1,4 @@
1
1
  import { types } from 'node:util';
2
- export function getConstructorName(obj) {
3
- if (obj === null || obj === undefined) {
4
- return null;
5
- }
6
- const ctor = obj.constructor;
7
- if (!ctor || ctor.name === 'Object') {
8
- return null;
9
- }
10
- return ctor.name;
11
- }
12
- export function getConstructorNames(obj) {
13
- const proto = Object.getPrototypeOf(obj);
14
- const name = getConstructorName(proto);
15
- if (name === null) {
16
- return [];
17
- }
18
- return [name, ...getConstructorNames(proto)];
19
- }
20
- /**
21
- * `instanceof` operator that works across different `vm` contexts,
22
- * based on the `name` property of the constructors of the prototype chain.
23
- */
24
- export function isInstanceOf(v, ctor) {
25
- return getConstructorNames(v).includes(ctor.name);
26
- }
27
2
  export function getErrorName(v) {
28
3
  if (types.isNativeError(v)) {
29
4
  return v.name;
@@ -36,4 +11,4 @@ export function getErrorStack(v) {
36
11
  }
37
12
  return '';
38
13
  }
39
- //# sourceMappingURL=types.js.map
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVsQyxNQUFNLFVBQVUsWUFBWSxDQUFDLENBQVU7SUFDckMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxDQUFVO0lBQ3RDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQyJ9
package/dist/util.d.ts CHANGED
@@ -1,35 +1,12 @@
1
- export interface PromiseWithResolvers<T> {
2
- promise: Promise<T>;
3
- resolve: (value: T) => void;
4
- reject: (reason?: any) => void;
5
- }
6
1
  /**
7
- * Polyfill for `Promise.withResolvers()`.
8
- *
9
- * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers
10
- */
11
- export declare function withResolvers<T>(): PromiseWithResolvers<T>;
12
- /**
13
- * Creates a lazily-evaluated, memoized version of the provided function.
14
- *
15
- * The returned object exposes a `value` getter that calls `fn` only once,
16
- * caches its result, and returns the cached value on subsequent accesses.
17
- *
18
- * @typeParam T - The return type of the provided function.
19
- * @param fn - The function to be called once and whose result will be cached.
20
- * @returns An object with a `value` property that returns the memoized result of `fn`.
21
- */
22
- export declare function once<T>(fn: () => T): {
23
- readonly value: T;
24
- };
25
- /**
26
- * Builds a workflow suspension log message based on the counts of steps and hooks.
2
+ * Builds a workflow suspension log message based on the counts of steps, hooks, and waits.
27
3
  * @param runId - The workflow run ID
28
4
  * @param stepCount - Number of steps to be enqueued
29
5
  * @param hookCount - Number of hooks to be enqueued
30
- * @returns The formatted log message or null if both counts are 0
6
+ * @param waitCount - Number of waits to be enqueued
7
+ * @returns The formatted log message or null if all counts are 0
31
8
  */
32
- export declare function buildWorkflowSuspensionMessage(runId: string, stepCount: number, hookCount: number): string | null;
9
+ export declare function buildWorkflowSuspensionMessage(runId: string, stepCount: number, hookCount: number, waitCount: number): string | null;
33
10
  /**
34
11
  * Generates a stream ID for a workflow run.
35
12
  * User-defined streams include a "user" segment for isolation from future system-defined streams.
@@ -40,4 +17,9 @@ export declare function buildWorkflowSuspensionMessage(runId: string, stepCount:
40
17
  * @returns The stream ID in format: `strm_{ULID}_user_{base64(namespace)?}`
41
18
  */
42
19
  export declare function getWorkflowRunStreamId(runId: string, namespace?: string): string;
20
+ /**
21
+ * A small wrapper around `waitUntil` that also returns
22
+ * the result of the awaited promise.
23
+ */
24
+ export declare function waitedUntil<T>(fn: () => Promise<T>): Promise<T>;
43
25
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC5B,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,KAAK,oBAAoB,CAAC,CAAC,CAAC,CAQ1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC;;EASlC;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAmBf;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,UAUvE"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CA6Bf;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,UAUvE;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAUrE"}
package/dist/util.js CHANGED
@@ -1,58 +1,38 @@
1
+ import { waitUntil } from '@vercel/functions';
2
+ import { pluralize } from '@workflow/utils';
1
3
  /**
2
- * Polyfill for `Promise.withResolvers()`.
3
- *
4
- * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers
5
- */
6
- export function withResolvers() {
7
- let resolve;
8
- let reject;
9
- const promise = new Promise((_resolve, _reject) => {
10
- resolve = _resolve;
11
- reject = _reject;
12
- });
13
- return { promise, resolve, reject };
14
- }
15
- /**
16
- * Creates a lazily-evaluated, memoized version of the provided function.
17
- *
18
- * The returned object exposes a `value` getter that calls `fn` only once,
19
- * caches its result, and returns the cached value on subsequent accesses.
20
- *
21
- * @typeParam T - The return type of the provided function.
22
- * @param fn - The function to be called once and whose result will be cached.
23
- * @returns An object with a `value` property that returns the memoized result of `fn`.
24
- */
25
- export function once(fn) {
26
- const result = {
27
- get value() {
28
- const value = fn();
29
- Object.defineProperty(result, 'value', { value });
30
- return value;
31
- },
32
- };
33
- return result;
34
- }
35
- /**
36
- * Builds a workflow suspension log message based on the counts of steps and hooks.
4
+ * Builds a workflow suspension log message based on the counts of steps, hooks, and waits.
37
5
  * @param runId - The workflow run ID
38
6
  * @param stepCount - Number of steps to be enqueued
39
7
  * @param hookCount - Number of hooks to be enqueued
40
- * @returns The formatted log message or null if both counts are 0
8
+ * @param waitCount - Number of waits to be enqueued
9
+ * @returns The formatted log message or null if all counts are 0
41
10
  */
42
- export function buildWorkflowSuspensionMessage(runId, stepCount, hookCount) {
43
- if (stepCount === 0 && hookCount === 0) {
11
+ export function buildWorkflowSuspensionMessage(runId, stepCount, hookCount, waitCount) {
12
+ if (stepCount === 0 && hookCount === 0 && waitCount === 0) {
44
13
  return null;
45
14
  }
46
15
  const parts = [];
47
16
  if (stepCount > 0) {
48
- parts.push(`${stepCount} ${stepCount === 1 ? 'step' : 'steps'}`);
17
+ parts.push(`${stepCount} ${pluralize('step', 'steps', stepCount)}`);
49
18
  }
50
19
  if (hookCount > 0) {
51
- parts.push(`${hookCount} ${hookCount === 1 ? 'hook' : 'hooks'}`);
20
+ parts.push(`${hookCount} ${pluralize('hook', 'hooks', hookCount)}`);
52
21
  }
53
- const resumeMsg = hookCount > 0
54
- ? 'steps are created and hooks are triggered'
55
- : 'steps are created';
22
+ if (waitCount > 0) {
23
+ parts.push(`${waitCount} ${pluralize('timer', 'timers', waitCount)}`);
24
+ }
25
+ const resumeMsgParts = [];
26
+ if (stepCount > 0) {
27
+ resumeMsgParts.push('steps are completed');
28
+ }
29
+ if (hookCount > 0) {
30
+ resumeMsgParts.push('hooks are received');
31
+ }
32
+ if (waitCount > 0) {
33
+ resumeMsgParts.push('timers have elapsed');
34
+ }
35
+ const resumeMsg = resumeMsgParts.join(' and ');
56
36
  return `[Workflows] "${runId}" - ${parts.join(' and ')} to be enqueued\n Workflow will suspend and resume when ${resumeMsg}`;
57
37
  }
58
38
  /**
@@ -73,4 +53,17 @@ export function getWorkflowRunStreamId(runId, namespace) {
73
53
  const encodedNamespace = Buffer.from(namespace, 'utf-8').toString('base64url');
74
54
  return `${streamId}_${encodedNamespace}`;
75
55
  }
76
- //# sourceMappingURL=util.js.map
56
+ /**
57
+ * A small wrapper around `waitUntil` that also returns
58
+ * the result of the awaited promise.
59
+ */
60
+ export async function waitedUntil(fn) {
61
+ const result = fn();
62
+ waitUntil(result.catch(() => {
63
+ // Ignore error from the promise being rejected.
64
+ // It's expected that the invoker of `waitedUntil`
65
+ // will handle the error.
66
+ }));
67
+ return result;
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFNUM7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSw4QkFBOEIsQ0FDNUMsS0FBYSxFQUNiLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLFNBQWlCO0lBRWpCLElBQUksU0FBUyxLQUFLLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDakIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQWEsRUFBRSxDQUFDO0lBQ3BDLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xCLGNBQWMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEIsY0FBYyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQixjQUFjLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFL0MsT0FBTyxnQkFBZ0IsS0FBSyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLDREQUE0RCxTQUFTLEVBQUUsQ0FBQztBQUNoSSxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBYSxFQUFFLFNBQWtCO0lBQ3RFLE1BQU0sUUFBUSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUMzRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsaUdBQWlHO0lBQ2pHLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUMvRCxXQUFXLENBQ1osQ0FBQztJQUNGLE9BQU8sR0FBRyxRQUFRLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQUMzQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUksRUFBb0I7SUFDdkQsTUFBTSxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDcEIsU0FBUyxDQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ2hCLGdEQUFnRDtRQUNoRCxrREFBa0Q7UUFDbEQseUJBQXlCO0lBQzNCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIn0=
package/dist/vm/index.js CHANGED
@@ -69,7 +69,7 @@ export function createContext(options) {
69
69
  });
70
70
  // Propagate environment variables
71
71
  g.process = {
72
- env: process.env,
72
+ env: Object.freeze({ ...process.env }),
73
73
  };
74
74
  // Stateless + synchronous Web APIs that are made available inside the sandbox
75
75
  g.Headers = globalThis.Headers;
@@ -90,4 +90,4 @@ export function createContext(options) {
90
90
  },
91
91
  };
92
92
  }
93
- //# sourceMappingURL=index.js.map
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdm0vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLElBQUksZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pFLE9BQU8sVUFBVSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFRN0M7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUE2QjtJQUN6RCxJQUFJLEVBQUUsY0FBYyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDekIsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLE1BQU0sT0FBTyxHQUFHLGVBQWUsRUFBRSxDQUFDO0lBRWxDLE1BQU0sQ0FBQyxHQUFzQixZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWpFLGdDQUFnQztJQUNoQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFFcEIsaUZBQWlGO0lBQ2pGLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckIsNkhBQTZIO0lBQzVILENBQVMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxJQUFJLENBQzdCLEdBQUcsSUFBK0M7UUFFbEQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELDBEQUEwRDtRQUMxRCxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDO0lBQ0QsQ0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxD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
package/dist/vm/uuid.js CHANGED
@@ -27,4 +27,4 @@ export function createRandomUUID(rng) {
27
27
  return uuid;
28
28
  };
29
29
  }
30
- //# sourceMappingURL=uuid.js.map
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXVpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92bS91dWlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBaUI7SUFDaEQsT0FBTyxTQUFTLFVBQVU7UUFDeEIsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUM7UUFDakMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNoRCxJQUFJLElBQUksR0FBRyxDQUFDO1lBQ2QsQ0FBQztpQkFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQjtZQUNoQyxDQUFDO2lCQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7WUFDNUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUE0QyxDQUFDO0lBQ3RELENBQUMsQ0FBQztBQUNKLENBQUMifQ==
@@ -19,4 +19,4 @@ export function createWebhook(options) {
19
19
  hook.url = `${url}/.well-known/workflow/v1/webhook/${encodeURIComponent(hook.token)}`;
20
20
  return hook;
21
21
  }
22
- //# sourceMappingURL=create-hook.js.map
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvY3JlYXRlLWhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWpFLE1BQU0sVUFBVSxVQUFVLENBQVUsT0FBcUI7SUFDdkQsK0ZBQStGO0lBQy9GLE1BQU0sWUFBWSxHQUFJLFVBQWtCLENBQ3RDLG9CQUFvQixDQUNHLENBQUM7SUFDMUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQ2IsOERBQThELENBQy9ELENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQU1ELE1BQU0sVUFBVSxhQUFhLENBQzNCLE9BQXdCO0lBRXhCLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQy9DLElBQUksUUFBeUQsQ0FBQztJQUM5RCxJQUFJLE9BQU8sV0FBVyxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLFFBQVEsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FFYixDQUFDO0lBRWpDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO0lBQ3RDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLG9DQUFvQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUV0RixPQUFPLElBQUksQ0FBQztBQUNkLENBQUMifQ==
@@ -3,8 +3,8 @@ import type { Hook, HookOptions } from '../create-hook.js';
3
3
  /**
4
4
  * NOTE: This is the implementation of `defineHook()` that is used in workflow contexts.
5
5
  */
6
- export declare function defineHook<T>(): {
7
- create(options?: HookOptions): Hook<T>;
8
- resume(_token: string, _payload: T): Promise<HookEntity | null>;
6
+ export declare function defineHook<TInput, TOutput = TInput>(): {
7
+ create(options?: HookOptions): Hook<TOutput>;
8
+ resume(_token: string, _payload: TInput): Promise<HookEntity | null>;
9
9
  };
10
10
  //# sourceMappingURL=define-hook.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"define-hook.d.ts","sourceRoot":"","sources":["../../src/workflow/define-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG3D;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC;qBAEP,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC;mBAIvB,MAAM,YAAY,CAAC,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;EAMlE"}
1
+ {"version":3,"file":"define-hook.d.ts","sourceRoot":"","sources":["../../src/workflow/define-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG3D;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM;qBAE9B,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;mBAI7B,MAAM,YAAY,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;EAMvE"}
@@ -12,4 +12,4 @@ export function defineHook() {
12
12
  },
13
13
  };
14
14
  }
15
- //# sourceMappingURL=define-hook.js.map
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lLWhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvZGVmaW5lLWhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFVBQVU7SUFDeEIsT0FBTztRQUNMLE1BQU0sQ0FBQyxPQUFxQjtZQUMxQixPQUFPLFVBQVUsQ0FBVSxPQUFPLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsTUFBTSxDQUFDLE1BQWMsRUFBRSxRQUFnQjtZQUNyQyxNQUFNLElBQUksS0FBSyxDQUNiLHNGQUFzRixDQUN2RixDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIn0=
@@ -8,4 +8,4 @@ export function getWorkflowMetadata() {
8
8
  }
9
9
  return ctx;
10
10
  }
11
- //# sourceMappingURL=get-workflow-metadata.js.map
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXdvcmtmbG93LW1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmtmbG93L2dldC13b3JrZmxvdy1tZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsTUFBTSxDQUFDLE1BQU0sdUJBQXVCO0FBQ2xDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFakQsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyx5RkFBeUY7SUFDekYsTUFBTSxHQUFHLEdBQUksVUFBa0IsQ0FBQyx1QkFBdUIsQ0FBcUIsQ0FBQztJQUM3RSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxNQUFNLElBQUksS0FBSyxDQUNiLCtFQUErRSxDQUNoRixDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/workflow/hook.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAI3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAIjE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,2BAA2B,IAChC,CAAC,GAAG,GAAG,EAAE,UAAS,WAAgB,KAAG,IAAI,CAAC,CAAC,CAAC,CAiI5E"}
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/workflow/hook.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAI3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAGjE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,2BAA2B,IAChC,CAAC,GAAG,GAAG,EAAE,UAAS,WAAgB,KAAG,IAAI,CAAC,CAAC,CAAC,CA4H5E"}
@@ -1,15 +1,15 @@
1
+ import { withResolvers } from '@workflow/utils';
1
2
  import { EventConsumerResult } from '../events-consumer.js';
2
3
  import { WorkflowSuspension } from '../global.js';
3
4
  import { webhookLogger } from '../logger.js';
4
5
  import { hydrateStepReturnValue } from '../serialization.js';
5
- import { withResolvers } from '../util.js';
6
6
  export function createCreateHook(ctx) {
7
7
  return function createHookImpl(options = {}) {
8
8
  // Generate hook ID and token
9
9
  const correlationId = `hook_${ctx.generateUlid()}`;
10
10
  const token = options.token ?? ctx.generateNanoid();
11
- // Add hook creation to invocations queue
12
- ctx.invocationsQueue.push({
11
+ // Add hook creation to invocations queue (using Map for O(1) operations)
12
+ ctx.invocationsQueue.set(correlationId, {
13
13
  type: 'hook',
14
14
  correlationId,
15
15
  token,
@@ -37,11 +37,8 @@ export function createCreateHook(ctx) {
37
37
  // Check for hook_created event to remove this hook from the queue if it was already created
38
38
  if (event?.eventType === 'hook_created' &&
39
39
  event.correlationId === correlationId) {
40
- // Remove this hook from the invocations queue if it exists
41
- const index = ctx.invocationsQueue.findIndex((item) => item.type === 'hook' && item.correlationId === correlationId);
42
- if (index !== -1) {
43
- ctx.invocationsQueue.splice(index, 1);
44
- }
40
+ // Remove this hook from the invocations queue (O(1) delete using Map)
41
+ ctx.invocationsQueue.delete(correlationId);
45
42
  return EventConsumerResult.Consumed;
46
43
  }
47
44
  if (event?.eventType === 'hook_received' &&
@@ -98,4 +95,4 @@ export function createCreateHook(ctx) {
98
95
  return hook;
99
96
  };
100
97
  }
101
- //# sourceMappingURL=hook.js.map
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvdy9ob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNkIsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0QsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEdBQWdDO0lBQy9ELE9BQU8sU0FBUyxjQUFjLENBQVUsVUFBdUIsRUFBRTtRQUMvRCw2QkFBNkI7UUFDN0IsTUFBTSxhQUFhLEdBQUcsUUFBUSxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztRQUNuRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUVwRCx5RUFBeUU7UUFDekUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUU7WUFDdEMsSUFBSSxFQUFFLE1BQU07WUFDWixhQUFhO1lBQ2IsS0FBSztZQUNMLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtTQUMzQixDQUFDLENBQUM7UUFFSCxxRUFBcUU7UUFDckUsTUFBTSxhQUFhLEdBQXdCLEVBQUUsQ0FBQztRQUU5QywwREFBMEQ7UUFDMUQsTUFBTSxRQUFRLEdBQThCLEVBQUUsQ0FBQztRQUUvQyxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFFMUIsYUFBYSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLEdBQUcsQ0FBQyxjQUFjLENBQUMs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
@@ -1,6 +1,7 @@
1
1
  import type { StepMetadata } from '../step/get-step-metadata.js';
2
2
  export { FatalError, RetryableError, type RetryableErrorOptions, } from '@workflow/errors';
3
3
  export type { Hook, HookOptions } from '../create-hook.js';
4
+ export { sleep } from '../sleep.js';
4
5
  export { createHook, createWebhook } from './create-hook.js';
5
6
  export { defineHook } from './define-hook.js';
6
7
  export { getWorkflowMetadata } from './get-workflow-metadata.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EACL,UAAU,EACV,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAInD,wBAAgB,eAAe,IAAI,YAAY,CAI9C;AACD,wBAAgB,UAAU,SAIzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EACL,UAAU,EACV,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAInD,wBAAgB,eAAe,IAAI,YAAY,CAI9C;AACD,wBAAgB,UAAU,SAIzB"}
@@ -1,4 +1,5 @@
1
1
  export { FatalError, RetryableError, } from '@workflow/errors';
2
+ export { sleep } from '../sleep.js';
2
3
  export { createHook, createWebhook } from './create-hook.js';
3
4
  export { defineHook } from './define-hook.js';
4
5
  export { getWorkflowMetadata } from './get-workflow-metadata.js';
@@ -11,4 +12,4 @@ export function getStepMetadata() {
11
12
  export function resumeHook() {
12
13
  throw new Error('`resumeHook()` can only be called from outside a workflow function');
13
14
  }
14
- //# sourceMappingURL=index.js.map
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUNMLFVBQVUsRUFDVixjQUFjLEdBRWYsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxvRUFBb0U7QUFDcEUsOEVBQThFO0FBQzlFLE1BQU0sVUFBVSxlQUFlO0lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ2IsK0RBQStELENBQ2hFLENBQUM7QUFDSixDQUFDO0FBQ0QsTUFBTSxVQUFVLFVBQVU7SUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FDYixvRUFBb0UsQ0FDckUsQ0FBQztBQUNKLENBQUMifQ==
@@ -0,0 +1,4 @@
1
+ import type { StringValue } from 'ms';
2
+ import type { WorkflowOrchestratorContext } from '../private.js';
3
+ export declare function createSleep(ctx: WorkflowOrchestratorContext): (param: StringValue | Date | number) => Promise<void>;
4
+ //# sourceMappingURL=sleep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/workflow/sleep.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAGtC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAEjE,wBAAgB,WAAW,CAAC,GAAG,EAAE,2BAA2B,IAExD,OAAO,WAAW,GAAG,IAAI,GAAG,MAAM,KACjC,OAAO,CAAC,IAAI,CAAC,CA8DjB"}
@@ -0,0 +1,54 @@
1
+ import { parseDurationToDate, withResolvers } from '@workflow/utils';
2
+ import { EventConsumerResult } from '../events-consumer.js';
3
+ import { WorkflowSuspension } from '../global.js';
4
+ export function createSleep(ctx) {
5
+ return async function sleepImpl(param) {
6
+ const { promise, resolve } = withResolvers();
7
+ const correlationId = `wait_${ctx.generateUlid()}`;
8
+ // Calculate the resume time
9
+ const resumeAt = parseDurationToDate(param);
10
+ // Add wait to invocations queue (using Map for O(1) operations)
11
+ const waitItem = {
12
+ type: 'wait',
13
+ correlationId,
14
+ resumeAt,
15
+ };
16
+ ctx.invocationsQueue.set(correlationId, waitItem);
17
+ ctx.eventsConsumer.subscribe((event) => {
18
+ // If there are no events and we're waiting for wait_completed,
19
+ // suspend the workflow until the wait fires
20
+ if (!event) {
21
+ setTimeout(() => {
22
+ ctx.onWorkflowError(new WorkflowSuspension(ctx.invocationsQueue, ctx.globalThis));
23
+ }, 0);
24
+ return EventConsumerResult.NotConsumed;
25
+ }
26
+ // Check for wait_created event to mark this wait as having the event created
27
+ if (event?.eventType === 'wait_created' &&
28
+ event.correlationId === correlationId) {
29
+ // Mark this wait as having the created event, but keep it in the queue
30
+ // O(1) lookup using Map
31
+ const queueItem = ctx.invocationsQueue.get(correlationId);
32
+ if (queueItem && queueItem.type === 'wait') {
33
+ queueItem.hasCreatedEvent = true;
34
+ queueItem.resumeAt = event.eventData.resumeAt;
35
+ }
36
+ return EventConsumerResult.Consumed;
37
+ }
38
+ // Check for wait_completed event
39
+ if (event?.eventType === 'wait_completed' &&
40
+ event.correlationId === correlationId) {
41
+ // Remove this wait from the invocations queue (O(1) delete using Map)
42
+ ctx.invocationsQueue.delete(correlationId);
43
+ // Wait has elapsed, resolve the sleep
44
+ setTimeout(() => {
45
+ resolve();
46
+ }, 0);
47
+ return EventConsumerResult.Finished;
48
+ }
49
+ return EventConsumerResult.NotConsumed;
50
+ });
51
+ return promise;
52
+ };
53
+ }
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvc2xlZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBZ0Msa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHaEYsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFnQztJQUMxRCxPQUFPLEtBQUssVUFBVSxTQUFTLENBQzdCLEtBQWtDO1FBRWxDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsYUFBYSxFQUFRLENBQUM7UUFDbkQsTUFBTSxhQUFhLEdBQUcsUUFBUSxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztRQUVuRCw0QkFBNEI7UUFDNUIsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUMsZ0VBQWdFO1FBQ2hFLE1BQU0sUUFBUSxHQUE0QjtZQUN4QyxJQUFJLEVBQUUsTUFBTTtZQUNaLGFBQWE7WUFDYixRQUFRO1NBQ1QsQ0FBQztRQUNGLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRWxELEdBQUcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDckMsK0RBQStEO1lBQy9ELDRDQUE0QztZQUM1QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1gsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQzdELENBQUM7Z0JBQ0osQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNOLE9BQU8sbUJBQW1CLENBQUMsV0FBVyxDQUFDO1lBQ3pDLENBQUM7WUFFRCw2RUFBNkU7WUFDN0UsSUFDRSxLQUFLLEVBQUUsU0FBUyxLQUFLLGNBQWM7Z0JBQ25DLEtBQUssQ0FBQyxhQUFhLEtBQUssYUFBYSxFQUNyQyxDQUFDO2dCQUNELHVFQUF1RTtnQkFDdkUsd0JBQXdCO2dCQUN4QixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO29CQUMzQyxTQUFTLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztvQkFDakMsU0FBUyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztnQkFDaEQsQ0FBQztnQkFDRCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztZQUN0QyxDQUFDO1lBRUQsaUNBQWlDO1lBQ2pDLElBQ0UsS0FBSyxFQUFFLFNBQVMsS0FBSyxnQkFBZ0I7Z0JBQ3JDLEtBQUssQ0FBQyxhQUFhLEtBQUssYUFBYSxFQUNyQyxDQUFDO2dCQUNELHNFQUFzRTtnQkFDdEUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFM0Msc0NBQXNDO2dCQUN0QyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLE9BQU8sRUFBRSxDQUFDO2dCQUNaLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDTixPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztZQUN0QyxDQUFDO1lBRUQsT0FBTyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDLENBQUM7QUFDSixDQUFDIn0=