@workflow/core 4.0.1-beta.3 → 4.0.1-beta.31

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 (140) hide show
  1. package/LICENSE.md +201 -21
  2. package/dist/builtins.js +1 -1
  3. package/dist/create-hook.js +1 -1
  4. package/dist/define-hook.d.ts +40 -25
  5. package/dist/define-hook.d.ts.map +1 -1
  6. package/dist/define-hook.js +22 -27
  7. package/dist/events-consumer.js +1 -1
  8. package/dist/global.d.ts +11 -2
  9. package/dist/global.d.ts.map +1 -1
  10. package/dist/global.js +28 -5
  11. package/dist/index.d.ts +3 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +3 -2
  14. package/dist/logger.js +1 -1
  15. package/dist/observability.d.ts +19 -0
  16. package/dist/observability.d.ts.map +1 -1
  17. package/dist/observability.js +76 -19
  18. package/dist/parse-name.d.ts.map +1 -1
  19. package/dist/parse-name.js +18 -3
  20. package/dist/private.d.ts +10 -1
  21. package/dist/private.d.ts.map +1 -1
  22. package/dist/private.js +6 -1
  23. package/dist/runtime/helpers.d.ts +25 -0
  24. package/dist/runtime/helpers.d.ts.map +1 -0
  25. package/dist/runtime/helpers.js +93 -0
  26. package/dist/runtime/resume-hook.d.ts +15 -10
  27. package/dist/runtime/resume-hook.d.ts.map +1 -1
  28. package/dist/runtime/resume-hook.js +71 -61
  29. package/dist/runtime/start.d.ts +4 -0
  30. package/dist/runtime/start.d.ts.map +1 -1
  31. package/dist/runtime/start.js +56 -45
  32. package/dist/runtime/step-handler.d.ts +7 -0
  33. package/dist/runtime/step-handler.d.ts.map +1 -0
  34. package/dist/runtime/step-handler.js +335 -0
  35. package/dist/runtime/suspension-handler.d.ts +20 -0
  36. package/dist/runtime/suspension-handler.d.ts.map +1 -0
  37. package/dist/runtime/suspension-handler.js +167 -0
  38. package/dist/runtime/world.d.ts.map +1 -1
  39. package/dist/runtime/world.js +22 -21
  40. package/dist/runtime.d.ts +2 -7
  41. package/dist/runtime.d.ts.map +1 -1
  42. package/dist/runtime.js +66 -334
  43. package/dist/schemas.d.ts +1 -15
  44. package/dist/schemas.d.ts.map +1 -1
  45. package/dist/schemas.js +2 -15
  46. package/dist/serialization.d.ts +57 -10
  47. package/dist/serialization.d.ts.map +1 -1
  48. package/dist/serialization.js +179 -52
  49. package/dist/sleep.d.ts +33 -0
  50. package/dist/sleep.d.ts.map +1 -0
  51. package/dist/sleep.js +10 -0
  52. package/dist/source-map.d.ts +10 -0
  53. package/dist/source-map.d.ts.map +1 -0
  54. package/dist/source-map.js +56 -0
  55. package/dist/step/context-storage.d.ts +2 -0
  56. package/dist/step/context-storage.d.ts.map +1 -1
  57. package/dist/step/context-storage.js +1 -1
  58. package/dist/step/get-closure-vars.d.ts +9 -0
  59. package/dist/step/get-closure-vars.d.ts.map +1 -0
  60. package/dist/step/get-closure-vars.js +16 -0
  61. package/dist/step/get-step-metadata.js +1 -1
  62. package/dist/step/get-workflow-metadata.js +1 -1
  63. package/dist/step/writable-stream.d.ts +14 -0
  64. package/dist/step/writable-stream.d.ts.map +1 -0
  65. package/dist/step/writable-stream.js +30 -0
  66. package/dist/step.d.ts +1 -1
  67. package/dist/step.d.ts.map +1 -1
  68. package/dist/step.js +38 -10
  69. package/dist/symbols.d.ts +2 -0
  70. package/dist/symbols.d.ts.map +1 -1
  71. package/dist/symbols.js +3 -1
  72. package/dist/telemetry/semantic-conventions.d.ts +66 -38
  73. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  74. package/dist/telemetry/semantic-conventions.js +16 -3
  75. package/dist/telemetry.d.ts +8 -4
  76. package/dist/telemetry.d.ts.map +1 -1
  77. package/dist/telemetry.js +39 -6
  78. package/dist/types.d.ts +0 -7
  79. package/dist/types.d.ts.map +1 -1
  80. package/dist/types.js +1 -26
  81. package/dist/util.d.ts +9 -27
  82. package/dist/util.d.ts.map +1 -1
  83. package/dist/util.js +34 -42
  84. package/dist/vm/index.js +2 -2
  85. package/dist/vm/uuid.js +1 -1
  86. package/dist/workflow/create-hook.js +1 -1
  87. package/dist/workflow/define-hook.d.ts +3 -3
  88. package/dist/workflow/define-hook.d.ts.map +1 -1
  89. package/dist/workflow/define-hook.js +1 -1
  90. package/dist/workflow/get-workflow-metadata.js +1 -1
  91. package/dist/workflow/hook.d.ts.map +1 -1
  92. package/dist/workflow/hook.js +6 -9
  93. package/dist/workflow/index.d.ts +1 -0
  94. package/dist/workflow/index.d.ts.map +1 -1
  95. package/dist/workflow/index.js +2 -1
  96. package/dist/workflow/sleep.d.ts +4 -0
  97. package/dist/workflow/sleep.d.ts.map +1 -0
  98. package/dist/workflow/sleep.js +54 -0
  99. package/dist/workflow/writable-stream.js +1 -1
  100. package/dist/workflow.d.ts.map +1 -1
  101. package/dist/workflow.js +60 -9
  102. package/dist/writable-stream.d.ts +5 -4
  103. package/dist/writable-stream.d.ts.map +1 -1
  104. package/dist/writable-stream.js +7 -6
  105. package/package.json +21 -18
  106. package/dist/builtins.js.map +0 -1
  107. package/dist/create-hook.js.map +0 -1
  108. package/dist/define-hook.js.map +0 -1
  109. package/dist/events-consumer.js.map +0 -1
  110. package/dist/global.js.map +0 -1
  111. package/dist/index.js.map +0 -1
  112. package/dist/logger.js.map +0 -1
  113. package/dist/observability.js.map +0 -1
  114. package/dist/parse-name.js.map +0 -1
  115. package/dist/private.js.map +0 -1
  116. package/dist/runtime/resume-hook.js.map +0 -1
  117. package/dist/runtime/start.js.map +0 -1
  118. package/dist/runtime/world.js.map +0 -1
  119. package/dist/runtime.js.map +0 -1
  120. package/dist/schemas.js.map +0 -1
  121. package/dist/serialization.js.map +0 -1
  122. package/dist/step/context-storage.js.map +0 -1
  123. package/dist/step/get-step-metadata.js.map +0 -1
  124. package/dist/step/get-workflow-metadata.js.map +0 -1
  125. package/dist/step.js.map +0 -1
  126. package/dist/symbols.js.map +0 -1
  127. package/dist/telemetry/semantic-conventions.js.map +0 -1
  128. package/dist/telemetry.js.map +0 -1
  129. package/dist/types.js.map +0 -1
  130. package/dist/util.js.map +0 -1
  131. package/dist/vm/index.js.map +0 -1
  132. package/dist/vm/uuid.js.map +0 -1
  133. package/dist/workflow/create-hook.js.map +0 -1
  134. package/dist/workflow/define-hook.js.map +0 -1
  135. package/dist/workflow/get-workflow-metadata.js.map +0 -1
  136. package/dist/workflow/hook.js.map +0 -1
  137. package/dist/workflow/index.js.map +0 -1
  138. package/dist/workflow/writable-stream.js.map +0 -1
  139. package/dist/workflow.js.map +0 -1
  140. package/dist/writable-stream.js.map +0 -1
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":"AAEA;;;;;;;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,46 +1,14 @@
1
+ import { waitUntil } from '@vercel/functions';
1
2
  /**
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.
3
+ * Builds a workflow suspension log message based on the counts of steps, hooks, and waits.
37
4
  * @param runId - The workflow run ID
38
5
  * @param stepCount - Number of steps to be enqueued
39
6
  * @param hookCount - Number of hooks to be enqueued
40
- * @returns The formatted log message or null if both counts are 0
7
+ * @param waitCount - Number of waits to be enqueued
8
+ * @returns The formatted log message or null if all counts are 0
41
9
  */
42
- export function buildWorkflowSuspensionMessage(runId, stepCount, hookCount) {
43
- if (stepCount === 0 && hookCount === 0) {
10
+ export function buildWorkflowSuspensionMessage(runId, stepCount, hookCount, waitCount) {
11
+ if (stepCount === 0 && hookCount === 0 && waitCount === 0) {
44
12
  return null;
45
13
  }
46
14
  const parts = [];
@@ -50,9 +18,20 @@ export function buildWorkflowSuspensionMessage(runId, stepCount, hookCount) {
50
18
  if (hookCount > 0) {
51
19
  parts.push(`${hookCount} ${hookCount === 1 ? 'hook' : 'hooks'}`);
52
20
  }
53
- const resumeMsg = hookCount > 0
54
- ? 'steps are created and hooks are triggered'
55
- : 'steps are created';
21
+ if (waitCount > 0) {
22
+ parts.push(`${waitCount} ${waitCount === 1 ? 'timer' : 'timers'}`);
23
+ }
24
+ const resumeMsgParts = [];
25
+ if (stepCount > 0) {
26
+ resumeMsgParts.push('steps are completed');
27
+ }
28
+ if (hookCount > 0) {
29
+ resumeMsgParts.push('hooks are received');
30
+ }
31
+ if (waitCount > 0) {
32
+ resumeMsgParts.push('timers have elapsed');
33
+ }
34
+ const resumeMsg = resumeMsgParts.join(' and ');
56
35
  return `[Workflows] "${runId}" - ${parts.join(' and ')} to be enqueued\n Workflow will suspend and resume when ${resumeMsg}`;
57
36
  }
58
37
  /**
@@ -73,4 +52,17 @@ export function getWorkflowRunStreamId(runId, namespace) {
73
52
  const encodedNamespace = Buffer.from(namespace, 'utf-8').toString('base64url');
74
53
  return `${streamId}_${encodedNamespace}`;
75
54
  }
76
- //# sourceMappingURL=util.js.map
55
+ /**
56
+ * A small wrapper around `waitUntil` that also returns
57
+ * the result of the awaited promise.
58
+ */
59
+ export async function waitedUntil(fn) {
60
+ const result = fn();
61
+ waitUntil(result.catch(() => {
62
+ // Ignore error from the promise being rejected.
63
+ // It's expected that the invoker of `waitedUntil`
64
+ // will handle the error.
65
+ }));
66
+ return result;
67
+ }
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU5Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLDhCQUE4QixDQUM1QyxLQUFhLEVBQ2IsU0FBaUIsRUFDakIsU0FBaUIsRUFDakIsU0FBaUI7SUFFakIsSUFBSSxTQUFTLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNqQixJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUNELElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBYSxFQUFFLENBQUM7SUFDcEMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEIsY0FBYyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQixjQUFjLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNELElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xCLGNBQWMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUvQyxPQUFPLGdCQUFnQixLQUFLLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsNERBQTRELFNBQVMsRUFBRSxDQUFDO0FBQ2hJLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxLQUFhLEVBQUUsU0FBa0I7SUFDdEUsTUFBTSxRQUFRLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQzNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxpR0FBaUc7SUFDakcsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQy9ELFdBQVcsQ0FDWixDQUFDO0lBQ0YsT0FBTyxHQUFHLFFBQVEsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0FBQzNDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FBSSxFQUFvQjtJQUN2RCxNQUFNLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNwQixTQUFTLENBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDaEIsZ0RBQWdEO1FBQ2hELGtEQUFrRDtRQUNsRCx5QkFBeUI7SUFDM0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNGLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMifQ==
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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
@@ -4,6 +4,7 @@ export type { Hook, HookOptions } from '../create-hook.js';
4
4
  export { createHook, createWebhook } from './create-hook.js';
5
5
  export { defineHook } from './define-hook.js';
6
6
  export { getWorkflowMetadata } from './get-workflow-metadata.js';
7
+ export { sleep } from '../sleep.js';
7
8
  export { getWritable } from './writable-stream.js';
8
9
  export declare function getStepMetadata(): StepMetadata;
9
10
  export declare function resumeHook(): void;
@@ -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,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,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAInD,wBAAgB,eAAe,IAAI,YAAY,CAI9C;AACD,wBAAgB,UAAU,SAIzB"}
@@ -2,6 +2,7 @@ export { FatalError, RetryableError, } from '@workflow/errors';
2
2
  export { createHook, createWebhook } from './create-hook.js';
3
3
  export { defineHook } from './define-hook.js';
4
4
  export { getWorkflowMetadata } from './get-workflow-metadata.js';
5
+ export { sleep } from '../sleep.js';
5
6
  export { getWritable } from './writable-stream.js';
6
7
  // workflows can't use these functions, but we still need to provide
7
8
  // the export so bundling doesn't fail when step and workflow are in same file
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUNMLFVBQVUsRUFDVixjQUFjLEdBRWYsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxvRUFBb0U7QUFDcEUsOEVBQThFO0FBQzlFLE1BQU0sVUFBVSxlQUFlO0lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ2IsK0RBQStELENBQ2hFLENBQUM7QUFDSixDQUFDO0FBQ0QsTUFBTSxVQUFVLFVBQVU7SUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FDYixvRUFBb0UsQ0FDckUsQ0FBQztBQUNKLENBQUMifQ==
@@ -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=
@@ -9,4 +9,4 @@ export function getWritable(options = {}) {
9
9
  },
10
10
  });
11
11
  }
12
- //# sourceMappingURL=writable-stream.js.map
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGFibGUtc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmtmbG93L3dyaXRhYmxlLXN0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0UsTUFBTSxVQUFVLFdBQVcsQ0FDekIsVUFBeUMsRUFBRTtJQUUzQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQzlCLE1BQU0sSUFBSSxHQUFJLFVBQWtCLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUU7UUFDeEQsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQ3BCLEtBQUssRUFBRSxJQUFJO1lBQ1gsUUFBUSxFQUFFLEtBQUs7U0FDaEI7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAyB1D,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,KAAK,EAAE,GACd,OAAO,CAAC,OAAO,CAAC,CAuhBlB"}
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA6B1D,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,KAAK,EAAE,GACd,OAAO,CAAC,OAAO,CAAC,CA4kBlB"}