awaitly 1.35.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/dist/{duration.d.ts → di-BDlT7InM.d.cts} +15 -1
  2. package/dist/{duration.d.cts → di-BbFFfO8y.d.ts} +15 -1
  3. package/dist/errors-DtXvrCiO.d.cts +708 -0
  4. package/dist/errors-DtXvrCiO.d.ts +708 -0
  5. package/dist/index.cjs +4594 -1
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.d.cts +1970 -141
  8. package/dist/index.d.ts +1970 -141
  9. package/dist/index.js +4398 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/result.cjs +641 -1
  12. package/dist/result.cjs.map +1 -1
  13. package/dist/result.d.cts +29 -4
  14. package/dist/result.d.ts +29 -4
  15. package/dist/result.js +561 -1
  16. package/dist/result.js.map +1 -1
  17. package/dist/testing.cjs +4202 -8
  18. package/dist/testing.cjs.map +1 -1
  19. package/dist/testing.d.cts +2 -6
  20. package/dist/testing.d.ts +2 -6
  21. package/dist/testing.js +4154 -8
  22. package/dist/testing.js.map +1 -1
  23. package/dist/{run-entry-DGs0tySr.d.cts → types-B8NfNRGX.d.ts} +1078 -1502
  24. package/dist/{run-entry-BOuNyVoO.d.ts → types-BZ2f4MRR.d.cts} +1078 -1502
  25. package/dist/workflow.cjs +7096 -6
  26. package/dist/workflow.cjs.map +1 -1
  27. package/dist/workflow.d.cts +3346 -22
  28. package/dist/workflow.d.ts +3346 -22
  29. package/dist/workflow.js +6929 -6
  30. package/dist/workflow.js.map +1 -1
  31. package/package.json +3 -168
  32. package/dist/adapters.cjs +0 -7
  33. package/dist/adapters.cjs.map +0 -1
  34. package/dist/adapters.d.cts +0 -179
  35. package/dist/adapters.d.ts +0 -179
  36. package/dist/adapters.js +0 -7
  37. package/dist/adapters.js.map +0 -1
  38. package/dist/batch.cjs +0 -7
  39. package/dist/batch.cjs.map +0 -1
  40. package/dist/batch.d.cts +0 -200
  41. package/dist/batch.d.ts +0 -200
  42. package/dist/batch.js +0 -7
  43. package/dist/batch.js.map +0 -1
  44. package/dist/bind-deps.cjs +0 -2
  45. package/dist/bind-deps.cjs.map +0 -1
  46. package/dist/bind-deps.d.cts +0 -28
  47. package/dist/bind-deps.d.ts +0 -28
  48. package/dist/bind-deps.js +0 -2
  49. package/dist/bind-deps.js.map +0 -1
  50. package/dist/cache.cjs +0 -2
  51. package/dist/cache.cjs.map +0 -1
  52. package/dist/cache.d.cts +0 -269
  53. package/dist/cache.d.ts +0 -269
  54. package/dist/cache.js +0 -2
  55. package/dist/cache.js.map +0 -1
  56. package/dist/circuit-breaker.cjs +0 -7
  57. package/dist/circuit-breaker.cjs.map +0 -1
  58. package/dist/circuit-breaker.d.cts +0 -211
  59. package/dist/circuit-breaker.d.ts +0 -211
  60. package/dist/circuit-breaker.js +0 -7
  61. package/dist/circuit-breaker.js.map +0 -1
  62. package/dist/conditional.cjs +0 -2
  63. package/dist/conditional.cjs.map +0 -1
  64. package/dist/conditional.d.cts +0 -252
  65. package/dist/conditional.d.ts +0 -252
  66. package/dist/conditional.js +0 -2
  67. package/dist/conditional.js.map +0 -1
  68. package/dist/core.cjs +0 -7
  69. package/dist/core.cjs.map +0 -1
  70. package/dist/core.d.cts +0 -5
  71. package/dist/core.d.ts +0 -5
  72. package/dist/core.js +0 -7
  73. package/dist/core.js.map +0 -1
  74. package/dist/di-By77n4Fa.d.ts +0 -15
  75. package/dist/di-OJfsohf-.d.cts +0 -15
  76. package/dist/diagnostics.cjs +0 -8
  77. package/dist/diagnostics.cjs.map +0 -1
  78. package/dist/diagnostics.d.cts +0 -68
  79. package/dist/diagnostics.d.ts +0 -68
  80. package/dist/diagnostics.js +0 -8
  81. package/dist/diagnostics.js.map +0 -1
  82. package/dist/durable.cjs +0 -11
  83. package/dist/durable.cjs.map +0 -1
  84. package/dist/durable.d.cts +0 -9
  85. package/dist/durable.d.ts +0 -9
  86. package/dist/durable.js +0 -11
  87. package/dist/durable.js.map +0 -1
  88. package/dist/duration.cjs +0 -2
  89. package/dist/duration.cjs.map +0 -1
  90. package/dist/duration.js +0 -2
  91. package/dist/duration.js.map +0 -1
  92. package/dist/engine.cjs +0 -11
  93. package/dist/engine.cjs.map +0 -1
  94. package/dist/engine.d.cts +0 -115
  95. package/dist/engine.d.ts +0 -115
  96. package/dist/engine.js +0 -11
  97. package/dist/engine.js.map +0 -1
  98. package/dist/errors.cjs +0 -2
  99. package/dist/errors.cjs.map +0 -1
  100. package/dist/errors.d.cts +0 -361
  101. package/dist/errors.d.ts +0 -361
  102. package/dist/errors.js +0 -2
  103. package/dist/errors.js.map +0 -1
  104. package/dist/fetch.cjs +0 -7
  105. package/dist/fetch.cjs.map +0 -1
  106. package/dist/fetch.d.cts +0 -86
  107. package/dist/fetch.d.ts +0 -86
  108. package/dist/fetch.js +0 -7
  109. package/dist/fetch.js.map +0 -1
  110. package/dist/flow.cjs +0 -7
  111. package/dist/flow.cjs.map +0 -1
  112. package/dist/flow.d.cts +0 -163
  113. package/dist/flow.d.ts +0 -163
  114. package/dist/flow.js +0 -7
  115. package/dist/flow.js.map +0 -1
  116. package/dist/functional.cjs +0 -2
  117. package/dist/functional.cjs.map +0 -1
  118. package/dist/functional.d.cts +0 -444
  119. package/dist/functional.d.ts +0 -444
  120. package/dist/functional.js +0 -2
  121. package/dist/functional.js.map +0 -1
  122. package/dist/guards-4sV7mTqj.d.cts +0 -72
  123. package/dist/guards-BIX05ALH.d.ts +0 -72
  124. package/dist/hitl-DFn4Xa_l.d.cts +0 -468
  125. package/dist/hitl-DU5VpKq7.d.ts +0 -468
  126. package/dist/hitl.cjs +0 -7
  127. package/dist/hitl.cjs.map +0 -1
  128. package/dist/hitl.d.cts +0 -442
  129. package/dist/hitl.d.ts +0 -442
  130. package/dist/hitl.js +0 -7
  131. package/dist/hitl.js.map +0 -1
  132. package/dist/index-CnvBryQB.d.ts +0 -417
  133. package/dist/index-DEZEf8Fs.d.cts +0 -417
  134. package/dist/match-entry-DjI2bLpD.d.cts +0 -209
  135. package/dist/match-entry-DjI2bLpD.d.ts +0 -209
  136. package/dist/match.cjs +0 -2
  137. package/dist/match.cjs.map +0 -1
  138. package/dist/match.d.cts +0 -1
  139. package/dist/match.d.ts +0 -1
  140. package/dist/match.js +0 -2
  141. package/dist/match.js.map +0 -1
  142. package/dist/otel.cjs +0 -2
  143. package/dist/otel.cjs.map +0 -1
  144. package/dist/otel.d.cts +0 -188
  145. package/dist/otel.d.ts +0 -188
  146. package/dist/otel.js +0 -2
  147. package/dist/otel.js.map +0 -1
  148. package/dist/persistence-entry-B-8PjnSR.d.cts +0 -831
  149. package/dist/persistence-entry-D8zRkLiT.d.ts +0 -831
  150. package/dist/persistence.cjs +0 -2
  151. package/dist/persistence.cjs.map +0 -1
  152. package/dist/persistence.d.cts +0 -7
  153. package/dist/persistence.d.ts +0 -7
  154. package/dist/persistence.js +0 -2
  155. package/dist/persistence.js.map +0 -1
  156. package/dist/policies.cjs +0 -2
  157. package/dist/policies.cjs.map +0 -1
  158. package/dist/policies.d.cts +0 -379
  159. package/dist/policies.d.ts +0 -379
  160. package/dist/policies.js +0 -2
  161. package/dist/policies.js.map +0 -1
  162. package/dist/ratelimit.cjs +0 -7
  163. package/dist/ratelimit.cjs.map +0 -1
  164. package/dist/ratelimit.d.cts +0 -458
  165. package/dist/ratelimit.d.ts +0 -458
  166. package/dist/ratelimit.js +0 -7
  167. package/dist/ratelimit.js.map +0 -1
  168. package/dist/reliability.cjs +0 -11
  169. package/dist/reliability.cjs.map +0 -1
  170. package/dist/reliability.d.cts +0 -11
  171. package/dist/reliability.d.ts +0 -11
  172. package/dist/reliability.js +0 -11
  173. package/dist/reliability.js.map +0 -1
  174. package/dist/resolver.cjs +0 -7
  175. package/dist/resolver.cjs.map +0 -1
  176. package/dist/resolver.d.cts +0 -68
  177. package/dist/resolver.d.ts +0 -68
  178. package/dist/resolver.js +0 -7
  179. package/dist/resolver.js.map +0 -1
  180. package/dist/resource.cjs +0 -7
  181. package/dist/resource.cjs.map +0 -1
  182. package/dist/resource.d.cts +0 -174
  183. package/dist/resource.d.ts +0 -174
  184. package/dist/resource.js +0 -7
  185. package/dist/resource.js.map +0 -1
  186. package/dist/result/retry.cjs +0 -2
  187. package/dist/result/retry.cjs.map +0 -1
  188. package/dist/result/retry.d.cts +0 -70
  189. package/dist/result/retry.d.ts +0 -70
  190. package/dist/result/retry.js +0 -2
  191. package/dist/result/retry.js.map +0 -1
  192. package/dist/retry.cjs +0 -2
  193. package/dist/retry.cjs.map +0 -1
  194. package/dist/retry.d.cts +0 -388
  195. package/dist/retry.d.ts +0 -388
  196. package/dist/retry.js +0 -2
  197. package/dist/retry.js.map +0 -1
  198. package/dist/run.cjs +0 -7
  199. package/dist/run.cjs.map +0 -1
  200. package/dist/run.d.cts +0 -4
  201. package/dist/run.d.ts +0 -4
  202. package/dist/run.js +0 -7
  203. package/dist/run.js.map +0 -1
  204. package/dist/saga.cjs +0 -11
  205. package/dist/saga.cjs.map +0 -1
  206. package/dist/saga.d.cts +0 -164
  207. package/dist/saga.d.ts +0 -164
  208. package/dist/saga.js +0 -11
  209. package/dist/saga.js.map +0 -1
  210. package/dist/singleflight.cjs +0 -2
  211. package/dist/singleflight.cjs.map +0 -1
  212. package/dist/singleflight.d.cts +0 -145
  213. package/dist/singleflight.d.ts +0 -145
  214. package/dist/singleflight.js +0 -2
  215. package/dist/singleflight.js.map +0 -1
  216. package/dist/slugs.cjs +0 -2
  217. package/dist/slugs.cjs.map +0 -1
  218. package/dist/slugs.d.cts +0 -67
  219. package/dist/slugs.d.ts +0 -67
  220. package/dist/slugs.js +0 -2
  221. package/dist/slugs.js.map +0 -1
  222. package/dist/streaming.cjs +0 -9
  223. package/dist/streaming.cjs.map +0 -1
  224. package/dist/streaming.d.cts +0 -596
  225. package/dist/streaming.d.ts +0 -596
  226. package/dist/streaming.js +0 -9
  227. package/dist/streaming.js.map +0 -1
  228. package/dist/tagged-error.cjs +0 -2
  229. package/dist/tagged-error.cjs.map +0 -1
  230. package/dist/tagged-error.d.cts +0 -275
  231. package/dist/tagged-error.d.ts +0 -275
  232. package/dist/tagged-error.js +0 -2
  233. package/dist/tagged-error.js.map +0 -1
  234. package/dist/types-BziYHFkD.d.ts +0 -323
  235. package/dist/types-C5jLEUqY.d.cts +0 -323
  236. package/dist/webhook.cjs +0 -7
  237. package/dist/webhook.cjs.map +0 -1
  238. package/dist/webhook.d.cts +0 -499
  239. package/dist/webhook.d.ts +0 -499
  240. package/dist/webhook.js +0 -7
  241. package/dist/webhook.js.map +0 -1
@@ -1,323 +0,0 @@
1
- import { c as AsyncResult } from './run-entry-DGs0tySr.cjs';
2
-
3
- /**
4
- * awaitly/streaming - Types
5
- *
6
- * Core types for Result-aware streaming in workflows.
7
- * All stream operations return Result types, enabling typed error handling
8
- * throughout the streaming pipeline.
9
- */
10
-
11
- /** Discriminant for stream write errors */
12
- declare const STREAM_WRITE_ERROR: "STREAM_WRITE_ERROR";
13
- /** Discriminant for stream read errors */
14
- declare const STREAM_READ_ERROR: "STREAM_READ_ERROR";
15
- /** Discriminant for stream close errors */
16
- declare const STREAM_CLOSE_ERROR: "STREAM_CLOSE_ERROR";
17
- /** Discriminant for stream store errors */
18
- declare const STREAM_STORE_ERROR: "STREAM_STORE_ERROR";
19
- /** Discriminant for stream ended marker */
20
- declare const STREAM_ENDED: "STREAM_ENDED";
21
- /** Discriminant for stream backpressure errors */
22
- declare const STREAM_BACKPRESSURE_ERROR: "STREAM_BACKPRESSURE_ERROR";
23
- /**
24
- * Error returned when a write operation fails.
25
- */
26
- type StreamWriteError = {
27
- type: typeof STREAM_WRITE_ERROR;
28
- reason: "closed" | "aborted" | "store_error";
29
- message: string;
30
- cause?: unknown;
31
- };
32
- /**
33
- * Error returned when a read operation fails.
34
- */
35
- type StreamReadError = {
36
- type: typeof STREAM_READ_ERROR;
37
- reason: "closed" | "store_error";
38
- message: string;
39
- cause?: unknown;
40
- };
41
- /**
42
- * Error returned when closing a stream fails.
43
- */
44
- type StreamCloseError = {
45
- type: typeof STREAM_CLOSE_ERROR;
46
- reason: "already_closed" | "store_error";
47
- message: string;
48
- cause?: unknown;
49
- };
50
- /**
51
- * Error returned from StreamStore operations.
52
- */
53
- type StreamStoreError = {
54
- type: typeof STREAM_STORE_ERROR;
55
- reason: "read_error" | "write_error" | "metadata_error" | "close_error";
56
- message: string;
57
- cause?: unknown;
58
- };
59
- /**
60
- * Marker indicating stream has ended (not an error, but a terminal state).
61
- * Used as the "error" type when stream is exhausted.
62
- */
63
- type StreamEndedMarker = {
64
- type: typeof STREAM_ENDED;
65
- finalPosition: number;
66
- };
67
- /**
68
- * Backpressure error when writer is paused.
69
- */
70
- type StreamBackpressureError = {
71
- type: typeof STREAM_BACKPRESSURE_ERROR;
72
- bufferedCount: number;
73
- highWaterMark: number;
74
- };
75
- /**
76
- * Union of all stream errors.
77
- */
78
- type StreamError = StreamWriteError | StreamReadError | StreamCloseError | StreamStoreError | StreamBackpressureError;
79
- /**
80
- * A single item in the stream with metadata.
81
- */
82
- interface StreamItem<T> {
83
- /** The value stored in this stream item */
84
- value: T;
85
- /** Position in the stream (0-indexed) */
86
- position: number;
87
- /** Timestamp when item was written */
88
- ts: number;
89
- }
90
- /**
91
- * Metadata about a stream.
92
- */
93
- interface StreamMetadata {
94
- /** Unique identifier for the stream (workflowId + namespace) */
95
- id: string;
96
- /** Namespace within the workflow */
97
- namespace: string;
98
- /** Workflow ID that owns this stream */
99
- workflowId: string;
100
- /** Number of items in the stream */
101
- length: number;
102
- /** Whether the stream has been closed */
103
- closed: boolean;
104
- /** Timestamp when stream was created */
105
- createdAt: number;
106
- /** Timestamp when stream was last written to */
107
- lastWriteAt?: number;
108
- /** Timestamp when stream was closed */
109
- closedAt?: number;
110
- }
111
- /**
112
- * Options for creating a writable stream.
113
- */
114
- interface StreamOptions {
115
- /** Named streams (default: 'default') */
116
- namespace?: string;
117
- /** Backpressure threshold (default: 16) */
118
- highWaterMark?: number;
119
- }
120
- /**
121
- * Options for creating a readable stream.
122
- */
123
- interface StreamReadOptions {
124
- /** Named streams (default: 'default') */
125
- namespace?: string;
126
- /** Resume from position (0-indexed) */
127
- startIndex?: number;
128
- }
129
- /**
130
- * Options for streamForEach operation.
131
- */
132
- interface StreamForEachOptions {
133
- /** Name for the operation (used in events) */
134
- name?: string;
135
- /** Checkpoint after every N items (default: 1 = checkpoint each item) */
136
- checkpointInterval?: number;
137
- /** Maximum concurrent processors (default: 1 = sequential) */
138
- concurrency?: number;
139
- }
140
- /**
141
- * Result from streamForEach operation.
142
- */
143
- interface StreamForEachResult<R> {
144
- /** Results from each processed item */
145
- results: R[];
146
- /** Total items processed */
147
- processedCount: number;
148
- /** Position of last processed item */
149
- lastPosition: number;
150
- }
151
- /**
152
- * Writable stream interface - never throws, returns Results.
153
- *
154
- * Use within a step to write values to a stream that can be consumed
155
- * by readers (e.g., HTTP response streaming, AI token streaming).
156
- *
157
- * @template T - Type of values written to the stream
158
- *
159
- * @example
160
- * ```typescript
161
- * const writer = step.getWritable<string>({ namespace: 'ai-response' });
162
- *
163
- * await step(() => generateAI({
164
- * prompt: 'Hello',
165
- * onToken: async (token) => { await writer.write(token); }
166
- * }), { key: 'generate' });
167
- *
168
- * await writer.close();
169
- * ```
170
- */
171
- interface StreamWriter<T> {
172
- /**
173
- * Write a value to the stream.
174
- * Returns an error if the stream is closed, aborted, or store fails.
175
- */
176
- write(value: T): AsyncResult<void, StreamWriteError>;
177
- /**
178
- * Close the stream normally.
179
- * Signals to readers that no more data will be written.
180
- */
181
- close(): AsyncResult<void, StreamCloseError>;
182
- /**
183
- * Abort the stream with a reason.
184
- * Use for error conditions that should terminate the stream.
185
- */
186
- abort(reason: unknown): void;
187
- /** Whether the stream is still writable */
188
- readonly writable: boolean;
189
- /** Current write position (number of items written) */
190
- readonly position: number;
191
- /** Stream namespace */
192
- readonly namespace: string;
193
- }
194
- /**
195
- * Readable stream interface - returns STREAM_ENDED marker when complete.
196
- *
197
- * Use to consume values from a stream, with support for resuming from
198
- * a specific position.
199
- *
200
- * @template T - Type of values read from the stream
201
- *
202
- * @example
203
- * ```typescript
204
- * const reader = getStreamReader<string>(runId, { namespace: 'ai-response' });
205
- *
206
- * let result = await reader.read();
207
- * while (result.ok) {
208
- * response.write(result.value);
209
- * result = await reader.read();
210
- * }
211
- *
212
- * if (result.error.type === 'STREAM_ENDED') {
213
- * console.log('Stream complete at position', result.error.finalPosition);
214
- * }
215
- * ```
216
- */
217
- interface StreamReader<T> {
218
- /**
219
- * Read the next value from the stream.
220
- * Returns StreamEndedMarker when stream is exhausted.
221
- */
222
- read(): AsyncResult<T, StreamReadError | StreamEndedMarker>;
223
- /**
224
- * Close the reader (stop consuming).
225
- * Does not affect the underlying stream.
226
- */
227
- close(): void;
228
- /** Whether there may be more data to read */
229
- readonly readable: boolean;
230
- /** Current read position */
231
- readonly position: number;
232
- /** Stream namespace */
233
- readonly namespace: string;
234
- }
235
- /** Unsubscribe function returned by subscribe */
236
- type Unsubscribe = () => void;
237
- /**
238
- * Storage backend for stream data.
239
- * Follows the same patterns as persistence.ts adapters.
240
- *
241
- * @example In-memory store
242
- * ```typescript
243
- * const store = createMemoryStreamStore();
244
- * ```
245
- *
246
- * @example File-based store
247
- * ```typescript
248
- * const store = createFileStreamStore({ directory: './streams', fs });
249
- * ```
250
- */
251
- interface StreamStore {
252
- /**
253
- * Append an item to the stream.
254
- */
255
- append<T>(workflowId: string, namespace: string, item: StreamItem<T>): AsyncResult<void, StreamStoreError>;
256
- /**
257
- * Read items from the stream starting at an index.
258
- * @param startIndex - Position to start reading from (0-indexed)
259
- * @param limit - Maximum number of items to read (default: all remaining)
260
- */
261
- read<T>(workflowId: string, namespace: string, startIndex: number, limit?: number): AsyncResult<StreamItem<T>[], StreamStoreError>;
262
- /**
263
- * Get metadata about a stream.
264
- * Returns undefined if stream doesn't exist.
265
- */
266
- getMetadata(workflowId: string, namespace: string): AsyncResult<StreamMetadata | undefined, StreamStoreError>;
267
- /**
268
- * Mark stream as closed.
269
- */
270
- closeStream(workflowId: string, namespace: string): AsyncResult<void, StreamStoreError>;
271
- /**
272
- * Subscribe to new items in a stream.
273
- * Callback is invoked for each new item written.
274
- * Returns unsubscribe function.
275
- */
276
- subscribe<T>(workflowId: string, namespace: string, callback: (item: StreamItem<T>) => void): Unsubscribe;
277
- }
278
- /**
279
- * Check if an error is a StreamEndedMarker.
280
- */
281
- declare function isStreamEnded(error: unknown): error is StreamEndedMarker;
282
- /**
283
- * Check if an error is a StreamWriteError.
284
- */
285
- declare function isStreamWriteError(error: unknown): error is StreamWriteError;
286
- /**
287
- * Check if an error is a StreamReadError.
288
- */
289
- declare function isStreamReadError(error: unknown): error is StreamReadError;
290
- /**
291
- * Check if an error is a StreamStoreError.
292
- */
293
- declare function isStreamStoreError(error: unknown): error is StreamStoreError;
294
- /**
295
- * Check if an error is a StreamBackpressureError.
296
- */
297
- declare function isStreamBackpressureError(error: unknown): error is StreamBackpressureError;
298
- /**
299
- * Create a StreamWriteError.
300
- */
301
- declare function streamWriteError(reason: StreamWriteError["reason"], message: string, cause?: unknown): StreamWriteError;
302
- /**
303
- * Create a StreamReadError.
304
- */
305
- declare function streamReadError(reason: StreamReadError["reason"], message: string, cause?: unknown): StreamReadError;
306
- /**
307
- * Create a StreamCloseError.
308
- */
309
- declare function streamCloseError(reason: StreamCloseError["reason"], message: string, cause?: unknown): StreamCloseError;
310
- /**
311
- * Create a StreamStoreError.
312
- */
313
- declare function streamStoreError(reason: StreamStoreError["reason"], message: string, cause?: unknown): StreamStoreError;
314
- /**
315
- * Create a StreamEndedMarker.
316
- */
317
- declare function streamEnded(finalPosition: number): StreamEndedMarker;
318
- /**
319
- * Create a StreamBackpressureError.
320
- */
321
- declare function streamBackpressureError(bufferedCount: number, highWaterMark: number): StreamBackpressureError;
322
-
323
- export { streamBackpressureError as A, streamCloseError as B, streamEnded as C, streamReadError as D, streamStoreError as E, streamWriteError as F, type StreamStore as S, type Unsubscribe as U, type StreamReader as a, STREAM_BACKPRESSURE_ERROR as b, STREAM_CLOSE_ERROR as c, STREAM_ENDED as d, STREAM_READ_ERROR as e, STREAM_STORE_ERROR as f, STREAM_WRITE_ERROR as g, type StreamBackpressureError as h, type StreamCloseError as i, type StreamEndedMarker as j, type StreamError as k, type StreamForEachOptions as l, type StreamForEachResult as m, type StreamItem as n, type StreamMetadata as o, type StreamOptions as p, type StreamReadError as q, type StreamReadOptions as r, type StreamStoreError as s, type StreamWriteError as t, type StreamWriter as u, isStreamBackpressureError as v, isStreamEnded as w, isStreamReadError as x, isStreamStoreError as y, isStreamWriteError as z };
package/dist/webhook.cjs DELETED
@@ -1,7 +0,0 @@
1
- "use strict";var fe=Object.defineProperty;var Ze=Object.getOwnPropertyDescriptor;var Qe=Object.getOwnPropertyNames;var er=Object.prototype.hasOwnProperty;var rr=(e,r)=>{for(var l in r)fe(e,l,{get:r[l],enumerable:!0})},tr=(e,r,l,w)=>{if(r&&typeof r=="object"||typeof r=="function")for(let T of Qe(r))!er.call(e,T)&&T!==l&&fe(e,T,{get:()=>r[T],enumerable:!(w=Ze(r,T))||w.enumerable});return e};var nr=e=>tr(fe({},"__esModule",{value:!0}),e);var wr={};rr(wr,{composeValidators:()=>Ye,createEventHandler:()=>ze,createExpressHandler:()=>qe,createResultMapper:()=>He,createSimpleHandler:()=>Le,createWebhookHandler:()=>We,defaultUnexpectedErrorMapper:()=>ce,defaultValidationErrorMapper:()=>le,isValidationError:()=>Ve,requireFields:()=>$e,sendWebhookResponse:()=>ge,toWebhookRequest:()=>Re,validationError:()=>xe});module.exports=nr(wr);var or={"step-require-id":"step-require-id","step-no-immediate-execution":"step-no-immediate-execution","step-require-thunk-for-key":"step-require-thunk-for-key","step-no-bare-await":"step-no-bare-await","step-no-try-catch-wrap":"step-no-try-catch-wrap","step-stable-cache-keys":"step-stable-cache-keys","workflow-no-floating":"workflow-no-floating","workflow-options-position":"workflow-options-position","workflow-callback-shape":"workflow-callback-shape","workflow-no-callable-form":"workflow-no-callable-form","workflow-no-dynamic-import":"workflow-no-dynamic-import","result-no-floating":"result-no-floating","result-require-handling":"result-require-handling","result-no-double-wrap":"result-no-double-wrap","result-no-manual-propagation":"result-no-manual-propagation","result-no-direct-ok-err":"result-no-direct-ok-err","error-check-unexpected-first":"error-check-unexpected-first","error-access-cause":"error-access-cause","error-normalize":"error-normalize","error-no-throw-in-deps":"error-no-throw-in-deps","concurrency-no-promise-all":"concurrency-no-promise-all","concurrency-no-promise-race":"concurrency-no-promise-race","concurrency-no-promise-allsettled":"concurrency-no-promise-allsettled","runtime-step-timeout":"runtime-step-timeout","runtime-step-aborted":"runtime-step-aborted","runtime-retry-exhausted":"runtime-retry-exhausted","runtime-rate-limit":"runtime-rate-limit","runtime-circuit-open":"runtime-circuit-open","runtime-unexpected":"runtime-unexpected","runtime-resolver-not-found":"runtime-resolver-not-found","runtime-saga-compensation":"runtime-saga-compensation"};function Ce(e){return`https://jagreehal.github.io/awaitly/rules/#${e}`}var xr=Object.keys(or);var oe=class extends Error{_tag};function j(e,r){return class extends oe{_tag=e;constructor(l,w){let T=r?.message?r.message(l??{}):e;if(super(T),this.name=e,r?.slug!==void 0){if(!r.hint)throw new TypeError(`TaggedError: 'hint' is required when 'slug' is set (slug: "${r.slug}")`);Object.defineProperty(this,"code",{value:r.slug,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"hint",{value:r.hint,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"docsUrl",{value:Ce(r.slug),enumerable:!0,writable:!1,configurable:!1})}if(Object.setPrototypeOf(this,new.target.prototype),l&&typeof l=="object"){let u;if(r?.slug!==void 0){let{_tag:U,name:A,message:M,stack:s,code:N,hint:B,docsUrl:J,...G}=l;u=G}else{let{_tag:U,name:A,message:M,stack:s,...N}=l;u=N}let p=Object.prototype.hasOwnProperty.call(u,"cause"),h=p?u.cause:void 0;p&&delete u.cause;let v=w?.cause!==void 0;if(p&&v)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,u),p&&(this.cause=h),v&&(this.cause=w?.cause)}else w?.cause!==void 0&&(this.cause=w.cause)}}}Object.defineProperty(j,Symbol.hasInstance,{value:e=>e instanceof oe});(T=>{function e(u){return u instanceof Error}T.isError=e;function r(u){return u instanceof oe}T.isTaggedError=r;function l(u,p){let h=u._tag,v=p[h];return v(u)}T.match=l;function w(u,p,h){let v=u._tag,U=p[v];return U?U(u):h(u)}T.matchPartial=w})(j||={});var he=class extends j("TimeoutError",{slug:"runtime-step-timeout",hint:"Increase the step's timeout option, or check why the upstream operation is slow.",message:r=>r.operation?`TimeoutError: ${r.operation} timed out after ${r.ms}ms`:`TimeoutError: Operation timed out after ${r.ms}ms`}){},be=class extends j("RetryExhaustedError",{slug:"runtime-retry-exhausted",hint:"All retry attempts failed. Inspect lastError and decide whether to surface it or compensate.",message:r=>r.operation?`RetryExhaustedError: ${r.operation} failed after ${r.attempts} attempts`:`RetryExhaustedError: Operation failed after ${r.attempts} attempts`}){},Ae=class extends j("RateLimitError",{slug:"runtime-rate-limit",hint:"Wait retryAfterMs before retrying, or apply step.cache to deduplicate calls.",message:r=>r.limiterName?`RateLimitError: Rate limit exceeded for ${r.limiterName}${r.retryAfterMs?`, retry after ${r.retryAfterMs}ms`:""}`:`RateLimitError: Rate limit exceeded${r.retryAfterMs?`, retry after ${r.retryAfterMs}ms`:""}`}){},Se=class extends j("CircuitBreakerOpenError",{slug:"runtime-circuit-open",hint:"The circuit is open. Wait for it to half-open or fall back to a degraded path.",message:r=>`CircuitBreakerOpenError: Circuit ${r.circuitName} is ${r.state??"OPEN"}${r.retryAfterMs?`, retry after ${Math.ceil(r.retryAfterMs/1e3)}s`:""}`}){},Pe=class extends j("ValidationError",{message:r=>`ValidationError: Invalid ${r.field} - ${r.reason}`}){},ve=class extends j("NotFoundError",{message:r=>r.id?`NotFoundError: ${r.resource} with id ${r.id} not found`:`NotFoundError: ${r.resource} not found`}){},Oe=class extends j("UnauthorizedError",{message:r=>r.reason?`UnauthorizedError: ${r.reason}`:r.action&&r.resource?`UnauthorizedError: Not authorized to ${r.action} ${r.resource}`:"UnauthorizedError: Access denied"}){},_e=class extends j("NetworkError",{message:r=>r.url?`NetworkError: ${r.reason} (${r.url})`:`NetworkError: ${r.reason}`}){},Ie=class extends j("CompensationError",{slug:"runtime-saga-compensation",hint:"A saga compensation step failed. Inspect compensationError and ensure compensation is idempotent.",message:r=>`CompensationError: Failed to compensate step ${r.step}`}){},se=class extends j("UnexpectedError",{slug:"runtime-unexpected",hint:"An unexpected exception escaped a step. Inspect cause; consider returning a typed Result instead of throwing.",message:r=>`UnexpectedError: ${r.cause instanceof Error?r.cause.message:String(r.cause??"unknown")}`}){};function Me(e){return{ok:!0,value:e}}var sr=e=>typeof e=="object"&&e!==null&&"ok"in e&&typeof e.ok=="boolean"&&(e.ok?"value"in e:"error"in e),Ue=(e,r)=>{let l={},w=new Map;for(let T of Object.keys(e)){let u=e[T];typeof u=="function"&&(l[T]=(...p)=>{let h=(w.get(T)??0)+1;w.set(T,h);let v=h===1?T:`${T}#${h}`;return r(v,async()=>{let U=await u(...p);return sr(U)?U:Me(U)})})}return l};function ar(e){let r=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!r)return;let l=parseFloat(r[1]),w=r[2].toLowerCase();return{_tag:"Duration",millis:l*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[w]??1)}}function ur(e){return new se({cause:e})}function V(e){return{ok:!0,value:e}}function K(e,r){let l=r?.cause;return{ok:!1,error:e,...l!==void 0?{cause:l}:{}}}var ie=e=>e.ok;var Be=e=>e instanceof se||typeof e=="object"&&e!==null&&"_tag"in e&&e._tag==="UnexpectedError";function ir(e){if(e==null)return"unknown";if(typeof e=="string")return e.trim()||"unknown";if(typeof e=="object"){let r=e;if(typeof r._tag=="string"){let l=r._tag.trim();if(l)return l}if(typeof r.tag=="string"){let l=r.tag.trim();if(l)return l}if(typeof r.code=="string"){let l=r.code.trim();if(l)return l}else if(typeof r.code=="number")return String(r.code);if(e instanceof Error&&e.name){let l=e.name.trim();if(l)return l}}return"unknown"}function lr(e,r){if(!(!r||!e))return r[e]}function cr(e){let{intent:r,domain:l,owner:w,tags:T,stateChanges:u,emits:p,calls:h}=e;if(!r&&!l&&!w&&!T?.length&&!u?.length&&!p?.length&&!h?.length)return;let v={};return r&&(v.intent=r),l&&(v.domain=l),w&&(v.owner=w),T?.length&&(v.tags=T),u?.length&&(v.stateChanges=u),p?.length&&(v.emits=p),h?.length&&(v.calls=h),v}function W(e,r,l,w,T){let u=ir(e),p=lr(u,r),h={tag:u,origin:l};return p!==void 0&&(h.classification=p),w!==void 0&&(h.attempt=w),T!==void 0&&(h.cumulativeDurationMs=T),h}var te=Symbol.for("step_timeout_marker");function De(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:te in e}function pr(e){if(!(typeof e!="object"||e===null)){if(e.type==="STEP_TIMEOUT"){let r=e;return{timeoutMs:r.timeoutMs,stepName:r.stepName,stepKey:r.stepKey,attempt:r.attempt}}if(te in e)return e[te]}}var je=Symbol("early-exit");function Er(e,r){return{[je]:!0,error:e,meta:r}}function dr(e){return typeof e=="object"&&e!==null&&e[je]===!0}var Fe=Symbol("mapper-exception");function ee(e){return{[Fe]:!0,thrown:e}}function mr(e){return typeof e=="object"&&e!==null&&e[Fe]===!0}function we(e,r){let{backoff:l,initialDelay:w,maxDelay:T,jitter:u}=r,p;switch(l){case"fixed":p=w;break;case"linear":p=w*e;break;case"exponential":p=w*Math.pow(2,e-1);break}if(p=Math.min(p,T),u){let h=p*.25*Math.random();p=p+h}return Math.floor(p)}function Te(e){return new Promise(r=>setTimeout(r,e))}var Ke=Symbol("timeout"),ue=Symbol("timeout-option");function yr(e){return typeof e=="object"&&e!==null&&e[ue]===!0}async function fr(e,r,l,w){let T=new AbortController,u=r.onTimeout??"error",p=()=>typeof u=="function"?u({name:l.name,key:l.key,ms:r.ms}):r.error??{type:"STEP_TIMEOUT",stepName:l.name,stepKey:l.key,timeoutMs:r.ms,attempt:l.attempt},h;w?.aborted&&T.abort(w.reason);let v;w&&!w.aborted&&(v=()=>T.abort(w.reason),w.addEventListener("abort",v,{once:!0}));let U=new Promise((M,s)=>{h=setTimeout(()=>{if(u!=="disconnect"&&T.abort(),u==="option"){s({[ue]:!0,ms:r.ms});return}s({[Ke]:!0,error:p()})},r.ms)}),A;r.signal?A=Promise.resolve(e(T.signal)):A=Promise.resolve(e());try{return await Promise.race([A,U])}catch(M){if(typeof M=="object"&&M!==null&&M[ue]===!0)throw{[ue]:!0,ms:r.ms};if(typeof M=="object"&&M!==null&&M[Ke]===!0){u==="disconnect"&&A.catch(()=>{});let s=M.error;if(typeof s=="object"&&s!==null&&s.type!=="STEP_TIMEOUT"){let N={timeoutMs:r.ms,stepName:l.name,stepKey:l.key,attempt:l.attempt};te in s?s[te]=N:Object.defineProperty(s,te,{value:N,enumerable:!1,writable:!0,configurable:!1})}throw s}throw M}finally{clearTimeout(h),v&&w&&w.removeEventListener("abort",v)}}var re={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,shouldRetry:()=>!0,onRetry:()=>{}};async function ke(e,r,l){if(typeof e!="function"){let d=e,F=r;if(typeof F!="function")throw new TypeError("[awaitly] run(deps, fn) requires a callback as the second argument. Example: run({ getUser }, async (s) => s.getUser(id))");return ke(({step:Z})=>F(Ue(d,Z),{step:Z}),l)}let w=e,T=r,{onError:u,onEvent:p,catchUnexpected:h,workflowId:v,workflowName:U,context:A,_workflowSignal:M}=T&&typeof T=="object"?T:{},s=v??crypto.randomUUID(),N=h??ur,B=[],J=0,G=d=>d??`step_${++J}`,c=d=>{let F=d.context!==void 0||A===void 0?d:{...d,context:A},H=U!==void 0&&F.workflowName===void 0?{...F,workflowName:U}:F;if(H.type==="step_success"){let Z=H.stepId;for(let ae=B.length-1;ae>=0;ae--){let L=B[ae];if(L.type==="race"&&!L.winnerId){L.winnerId=Z;break}}}p?.(H,A)},D=Er,X=d=>dr(d),$=(d,F)=>d,Je=d=>typeof d=="function"?!1:!!(d&&typeof d=="object"&&"ok"in d||d&&typeof d=="object"&&"then"in d&&typeof d.then=="function");try{let F=function(a){let m={};for(let[n,o]of Object.entries(a))if(typeof o=="function")m[n]=o;else if(o&&typeof o=="object"&&"fn"in o)m[n]=o.fn;else throw new TypeError(`step.all: operation "${n}" must be a function or { fn, errors? } object`);return m},H=function(a,m){let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),t=!1;B.push({scopeId:n,type:"parallel"});let i=()=>{if(t)return;t=!0;let E=B.findIndex(y=>y.scopeId===n);E!==-1&&B.splice(E,1),c({type:"scope_end",workflowId:s,scopeId:n,ts:Date.now(),durationMs:performance.now()-o})};c({type:"scope_start",workflowId:s,scopeId:n,scopeType:"parallel",name:a,ts:Date.now()});try{let E=await m();if(i(),!E.ok)throw u?.(E.error,a,A),D(E.error,{origin:"result",resultCause:E.cause});return E.value}catch(E){throw i(),E}})()},Z=function(a,m){let n=Object.keys(a),o=m.name??`Parallel(${n.join(", ")})`,t=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let i=performance.now(),E=!1;B.push({scopeId:t,type:"parallel"});let y=()=>{if(E)return;E=!0;let f=B.findIndex(k=>k.scopeId===t);f!==-1&&B.splice(f,1),c({type:"scope_end",workflowId:s,scopeId:t,ts:Date.now(),durationMs:performance.now()-i})};c({type:"scope_start",workflowId:s,scopeId:t,scopeType:"parallel",name:o,ts:Date.now()});try{let f=await new Promise(g=>{if(n.length===0){g([]);return}let P=!1,I=n.length,x=new Array(n.length);for(let _=0;_<n.length;_++){let C=n[_],S=_;Promise.resolve(a[C]()).catch(b=>K({type:"PROMISE_REJECTED",cause:b},{cause:{type:"PROMISE_REJECTION",reason:b}})).then(b=>{if(!P){if(!b.ok){P=!0,g([{key:C,result:b}]);return}x[S]={key:C,result:b},I--,I===0&&g(x)}})}});y();let k={};for(let{key:g,result:P}of f){if(!P.ok)throw u?.(P.error,g,A),D(P.error,{origin:"result",resultCause:P.cause});k[g]=P.value}return k}catch(f){throw y(),f}})()};var Tr=F,kr=H,Rr=Z;let d=(a,m,n)=>(async()=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let o=n??{},t=cr(o),i=a,E=o.key??a,y=o.key??a,{description:f,retry:k,timeout:g}=o,P=G(E),I=p,x=I?performance.now():0,C=Je(m)?()=>m:m,b={attempts:Math.max(1,k?.attempts??1),backoff:k?.backoff??re.backoff,initialDelay:k?.initialDelay??re.initialDelay,maxDelay:k?.maxDelay??re.maxDelay,jitter:k?.jitter??re.jitter,shouldRetry:k?.shouldRetry??re.shouldRetry,onRetry:k?.onRetry??re.onRetry};p&&c({type:"step_start",workflowId:s,stepId:P,stepKey:E,name:i,description:f,ts:Date.now(),...t&&{metadata:t}});let Q;for(let O=1;O<=b.attempts;O++){let Ge=I?performance.now():0;try{let R;if(g?R=await fr(C,g,{name:i,key:E,attempt:O},M):R=await C(),R.ok){let z=performance.now()-x;return c({type:"step_success",workflowId:s,stepId:P,stepKey:E,name:i,description:f,ts:Date.now(),durationMs:z,...t&&{metadata:t}}),y&&c({type:"step_complete",workflowId:s,stepKey:y,name:i,description:f,ts:Date.now(),durationMs:z,result:R,...t&&{metadata:t}}),R.value}if(Q=R,O<b.attempts&&b.shouldRetry(R.error,O)){let z=we(O,b);c({type:"step_retry",workflowId:s,stepId:P,stepKey:E,name:i,ts:Date.now(),attempt:O+1,maxAttempts:b.attempts,delayMs:z,error:R.error,...t&&{metadata:t},diagnostics:W(R.error,o.errorMeta,"result",O,performance.now()-x)}),b.onRetry(R.error,O,z),await Te(z);continue}b.attempts>1&&c({type:"step_retries_exhausted",workflowId:s,stepId:P,stepKey:E,name:i,ts:Date.now(),durationMs:performance.now()-x,attempts:O,lastError:R.error,...t&&{metadata:t},diagnostics:W(R.error,o.errorMeta,"result",O,performance.now()-x)});break}catch(R){let z=performance.now()-Ge;if(yr(R)){let q=R.ms;c({type:"step_timeout",workflowId:s,stepId:P,stepKey:E,name:i,ts:Date.now(),timeoutMs:q,attempt:O,...t&&{metadata:t},diagnostics:W(R,o.errorMeta,"timeout",O)}),c({type:"step_success",workflowId:s,stepId:P,stepKey:E,name:i,description:f,ts:Date.now(),durationMs:performance.now()-x,...t&&{metadata:t}}),y&&c({type:"step_complete",workflowId:s,stepKey:y,name:i,description:f,ts:Date.now(),durationMs:performance.now()-x,result:V(void 0),...t&&{metadata:t}});return}if(X(R))throw c({type:"step_aborted",workflowId:s,stepId:P,stepKey:E,name:i,description:f,ts:Date.now(),durationMs:z,...t&&{metadata:t}}),R;if(De(R)){let q=pr(R),Xe=g?.ms??q?.timeoutMs??0;if(c({type:"step_timeout",workflowId:s,stepId:P,stepKey:E,name:i,ts:Date.now(),timeoutMs:Xe,attempt:O,...t&&{metadata:t},diagnostics:W(R,o.errorMeta,"timeout",O)}),O<b.attempts&&b.shouldRetry(R,O)){let ye=we(O,b);c({type:"step_retry",workflowId:s,stepId:P,stepKey:E,name:i,ts:Date.now(),attempt:O+1,maxAttempts:b.attempts,delayMs:ye,error:R,...t&&{metadata:t},diagnostics:W(R,o.errorMeta,"timeout",O,performance.now()-x)}),b.onRetry(R,O,ye),await Te(ye);continue}b.attempts>1&&c({type:"step_retries_exhausted",workflowId:s,stepId:P,stepKey:E,name:i,ts:Date.now(),durationMs:performance.now()-x,attempts:O,lastError:R,...t&&{metadata:t},diagnostics:W(R,o.errorMeta,"timeout",O,performance.now()-x)});let me=performance.now()-x;throw c({type:"step_error",workflowId:s,stepId:P,stepKey:E,name:i,description:f,ts:Date.now(),durationMs:me,error:R,...t&&{metadata:t},diagnostics:W(R,o.errorMeta,"timeout",O,me)}),y&&c({type:"step_complete",workflowId:s,stepKey:y,name:i,description:f,ts:Date.now(),durationMs:me,result:K(R,{cause:R}),meta:{origin:"throw",thrown:R},...t&&{metadata:t}}),u?.(R,i,A),D(R,{origin:"throw",thrown:R})}if(O<b.attempts&&b.shouldRetry(R,O)){let q=we(O,b);c({type:"step_retry",workflowId:s,stepId:P,stepKey:E,name:i,ts:Date.now(),attempt:O+1,maxAttempts:b.attempts,delayMs:q,error:R,...t&&{metadata:t},diagnostics:W(R,o.errorMeta,"throw",O,performance.now()-x)}),b.onRetry(R,O,q),await Te(q);continue}b.attempts>1&&!De(R)&&c({type:"step_retries_exhausted",workflowId:s,stepId:P,stepKey:E,name:i,ts:Date.now(),durationMs:performance.now()-x,attempts:O,lastError:R,...t&&{metadata:t},diagnostics:W(R,o.errorMeta,"throw",O,performance.now()-x)});let de=performance.now()-x,ne;try{ne=N(R)}catch(q){throw ee(q)}throw c({type:"step_error",workflowId:s,stepId:P,stepKey:E,name:i,description:f,ts:Date.now(),durationMs:de,error:ne,...t&&{metadata:t},diagnostics:W(R,o.errorMeta,"throw",O,de)}),y&&c({type:"step_complete",workflowId:s,stepKey:y,name:i,description:f,ts:Date.now(),durationMs:de,result:K(ne,{cause:R}),meta:{origin:"throw",thrown:R},...t&&{metadata:t}}),u?.(ne,i,A),D(ne,{origin:"throw",thrown:R})}}let Y=Q,pe=performance.now()-x,Ee=$(Y.error,{origin:"result",resultCause:Y.cause});throw c({type:"step_error",workflowId:s,stepId:P,stepKey:E,name:i,description:f,ts:Date.now(),durationMs:pe,error:Ee,...t&&{metadata:t},diagnostics:W(Y.error,o.errorMeta,"result",b.attempts,pe)}),y&&c({type:"step_complete",workflowId:s,stepKey:y,name:i,description:f,ts:Date.now(),durationMs:pe,result:Y,meta:{origin:"result",resultCause:Y.cause},...t&&{metadata:t}}),u?.(Ee,i,A),D(Ee,{origin:"result",resultCause:Y.cause})})();d.try=(a,m,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.try() requires an explicit string ID as the first argument. Example: step.try("parse", () => JSON.parse(str), { error: "PARSE_ERROR" })');let o="error"in n?()=>n.error:n.onError;if(n.retry||n.timeout)return d.retry(a,async()=>{try{return V(await m())}catch(f){return K(o(f),{cause:f})}},{attempts:n.retry?.attempts??1,...n.retry??{},key:n.key,timeout:n.timeout});let t=n.key??a,i=a,E=a,y=p;return(async()=>{let f=y?performance.now():0;p&&c({type:"step_start",workflowId:s,stepId:E,stepKey:t,name:i,ts:Date.now()});try{let k=await m(),g=performance.now()-f;return c({type:"step_success",workflowId:s,stepId:E,stepKey:t,name:i,ts:Date.now(),durationMs:g}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:i,ts:Date.now(),durationMs:g,result:V(k)}),k}catch(k){let g=o(k),P=performance.now()-f,I=$(g,{origin:"throw",thrown:k});throw c({type:"step_error",workflowId:s,stepId:E,stepKey:t,name:i,ts:Date.now(),durationMs:P,error:I}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:i,ts:Date.now(),durationMs:P,result:K(g,{cause:k}),meta:{origin:"throw",thrown:k}}),u?.(I,i,A),D(I,{origin:"throw",thrown:k})}})()},d.fromResult=(a,m,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.fromResult() requires an explicit string ID as the first argument. Example: step.fromResult("callProvider", () => callProvider(input), { onError: (e) => ({ type: "FAILED" }) })');let o=n.key??a,t=a,i=a,E="error"in n?()=>n.error:n.onError,y=p;return(async()=>{let f=y?performance.now():0;p&&c({type:"step_start",workflowId:s,stepId:i,stepKey:o,name:t,ts:Date.now()});let k=await m();if(k.ok){let g=performance.now()-f;return c({type:"step_success",workflowId:s,stepId:i,stepKey:o,name:t,ts:Date.now(),durationMs:g}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:g,result:V(k.value)}),k.value}else{let g=E(k.error),P=performance.now()-f,I=$(g,{origin:"result",resultCause:k.error});throw c({type:"step_error",workflowId:s,stepId:i,stepKey:o,name:t,ts:Date.now(),durationMs:P,error:I}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:P,result:K(g,{cause:k.error}),meta:{origin:"result",resultCause:k.error}}),u?.(I,t,A),D(I,{origin:"result",resultCause:k.error})}})()},d.fromNullable=(a,m,n,o)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.fromNullable() requires an explicit string ID as the first argument. Example: step.fromNullable("getUser", () => db.find(id), () => ({ type: "NOT_FOUND" }))');return d(a,async()=>{let t=await m();return t!=null?V(t):K(n())},o)},d.retry=(a,m,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.retry() requires an explicit string ID as the first argument. Example: step.retry("fetchData", () => fetchData(), { attempts: 3 })');return d(a,m,{key:n.key??a,retry:{attempts:n.attempts,backoff:n.backoff,initialDelay:n.initialDelay,maxDelay:n.maxDelay,jitter:n.jitter,shouldRetry:n.shouldRetry,onRetry:n.onRetry},timeout:n.timeout})},d.withTimeout=(a,m,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.withTimeout() requires an explicit string ID as the first argument. Example: step.withTimeout("slowOp", () => slowOp(), { ms: 5000 })');return d(a,m,{key:n.key??a,timeout:n})},d.sleep=(a,m,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let o=typeof m=="string"?ar(m):m;if(!o)throw new Error(`step.sleep: invalid duration '${m}'`);let t=o.millis,i=n?.signal;return d(a,async()=>{if(M?.aborted||i?.aborted){let E=new Error("Sleep aborted");throw E.name="AbortError",E}return new Promise((E,y)=>{let f={timeoutId:void 0},k=()=>{f.timeoutId&&clearTimeout(f.timeoutId);let g=new Error("Sleep aborted");g.name="AbortError",y(g)};M?.addEventListener("abort",k,{once:!0}),i?.addEventListener("abort",k,{once:!0}),f.timeoutId=setTimeout(()=>{M?.removeEventListener("abort",k),i?.removeEventListener("abort",k),E(V(void 0))},t)})},{key:n?.key??a,description:n?.description})},d.all=((...a)=>{if(typeof a[0]!="string")throw new TypeError("step.all(name, ...): first argument must be a string (step name). Example: step.all('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let m=a[0],n=a[1];if(typeof n=="function")return H(m,n);if(n&&typeof n=="object"&&!Array.isArray(n)){let t=F(n);return Z(t,{name:m})}throw new TypeError("step.all(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),d.race=(a,m)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),t=!1,i={scopeId:n,type:"race",winnerId:void 0};B.push(i);let E=()=>{if(t)return;t=!0;let y=B.findIndex(f=>f.scopeId===n);y!==-1&&B.splice(y,1),c({type:"scope_end",workflowId:s,scopeId:n,ts:Date.now(),durationMs:performance.now()-o,winnerId:i.winnerId})};c({type:"scope_start",workflowId:s,scopeId:n,scopeType:"race",name:a,ts:Date.now()});try{let y=await m();if(E(),!y.ok)throw u?.(y.error,a,A),D(y.error,{origin:"result",resultCause:y.cause});return y.value}catch(y){throw E(),y}})()},d.if=(a,m,n)=>n(),d.label=d.if,d.branch=async(a,m)=>{let{condition:n,then:o,else:t}=m;if(n())return await o();if(t)return await t()},d.arm=(a,m)=>({fn:a,errors:m}),d.forEach=async(a,m,n)=>{let o=[],t=n.maxIterations,i=0,E="run"in n,y=Symbol.asyncIterator in m?m:(async function*(){yield*m})();for await(let f of y){if(t!==void 0&&i>=t)break;let k;E?k=await n.run(f,i):k=await n.item.handler(f,i,d),o.push(k),i++}return o},d.item=a=>({__forEachItemHandler:!0,handler:a}),d.dep=(a,m)=>m,d.workflow=(a,m,n)=>d(a,m,n),d.map=async(a,m,n,o)=>{let t=o?.concurrency??m.length;return d(a,()=>t>=m.length?Ne(m.map((i,E)=>n(i,E))):(async()=>{let i=[];for(let E=0;E<m.length;E+=t){let y=m.slice(E,E+t),f=await Ne(y.map((k,g)=>n(k,E+g)));if(!f.ok)return f;i.push(...f.value)}return V(i)})(),{key:o?.key})},d.withFallback=(a,m,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.withFallback() requires an explicit string ID as the first argument. Example: step.withFallback("getUser", () => fetchUser(id), { fallback: () => fetchFromCache(id) })');let o=n.key??a,t=a,i=G(o),E=p;return(async()=>{let y=E?performance.now():0;p&&c({type:"step_start",workflowId:s,stepId:i,stepKey:o,name:t,ts:Date.now()});let f;try{f=await m()}catch(x){if(X(x))throw c({type:"step_aborted",workflowId:s,stepId:i,stepKey:o,name:t,ts:Date.now(),durationMs:performance.now()-y}),x;let _;try{_=N(x)}catch(S){throw ee(S)}if(n.on!==void 0&&n.on!==_){let S=performance.now()-y;throw c({type:"step_error",workflowId:s,stepId:i,stepKey:o,name:t,ts:Date.now(),durationMs:S,error:_}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:S,result:K(_,{cause:x}),meta:{origin:"throw",thrown:x}}),u?.(_,t,A),D(_,{origin:"throw",thrown:x})}let C;try{C=await n.fallback()}catch(S){if(X(S))throw c({type:"step_aborted",workflowId:s,stepId:i,stepKey:o,name:t,ts:Date.now(),durationMs:performance.now()-y}),S;let b;try{b=N(S)}catch(Y){throw ee(Y)}let Q=performance.now()-y;throw c({type:"step_error",workflowId:s,stepId:i,stepKey:o,name:t,ts:Date.now(),durationMs:Q,error:b}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:Q,result:K(b,{cause:S}),meta:{origin:"throw",thrown:S}}),u?.(b,t,A),D(b,{origin:"throw",thrown:S})}if(C.ok){let S=performance.now()-y;return c({type:"step_success",workflowId:s,stepId:i,stepKey:o,name:t,ts:Date.now(),durationMs:S}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:S,result:C,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(_)}}),C.value}else{let S=performance.now()-y,b=$(C.error,{origin:"result",resultCause:C.cause});throw c({type:"step_error",workflowId:s,stepId:i,stepKey:o,name:t,ts:Date.now(),durationMs:S,error:b}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:S,result:C,meta:{origin:"result",resultCause:C.cause}}),u?.(b,t,A),D(b,{origin:"result",resultCause:C.cause})}}if(f.ok){let x=performance.now()-y;return c({type:"step_success",workflowId:s,stepId:i,stepKey:o,name:t,ts:Date.now(),durationMs:x}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:x,result:f}),f.value}let k=f.error;if(n.on!==void 0&&n.on!==k){let x=performance.now()-y,_=$(k,{origin:"result",resultCause:f.cause});throw c({type:"step_error",workflowId:s,stepId:i,stepKey:o,name:t,ts:Date.now(),durationMs:x,error:_}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:x,result:f,meta:{origin:"result",resultCause:f.cause}}),u?.(_,t,A),D(_,{origin:"result",resultCause:f.cause})}let g;try{g=await n.fallback()}catch(x){if(X(x))throw c({type:"step_aborted",workflowId:s,stepId:i,stepKey:o,name:t,ts:Date.now(),durationMs:performance.now()-y}),x;let _;try{_=N(x)}catch(S){throw ee(S)}let C=performance.now()-y;throw c({type:"step_error",workflowId:s,stepId:i,stepKey:o,name:t,ts:Date.now(),durationMs:C,error:_}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:C,result:K(_,{cause:x}),meta:{origin:"throw",thrown:x}}),u?.(_,t,A),D(_,{origin:"throw",thrown:x})}if(g.ok){let x=performance.now()-y;return c({type:"step_success",workflowId:s,stepId:i,stepKey:o,name:t,ts:Date.now(),durationMs:x}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:x,result:g,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(k)}}),g.value}let P=performance.now()-y,I=$(g.error,{origin:"result",resultCause:g.cause});throw c({type:"step_error",workflowId:s,stepId:i,stepKey:o,name:t,ts:Date.now(),durationMs:P,error:I}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:P,result:g,meta:{origin:"result",resultCause:g.cause}}),u?.(I,t,A),D(I,{origin:"result",resultCause:g.cause})})()},d.withResource=(a,m)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.withResource() requires an explicit string ID as the first argument. Example: step.withResource("useDb", { acquire: () => connect(), use: (db) => query(db), release: (db) => db.close() })');let n=a,o=a,t=G(n),i=p;return(async()=>{let E=i?performance.now():0;p&&c({type:"step_start",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now()});let y;try{y=await m.acquire()}catch(C){if(X(C))throw c({type:"step_aborted",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:performance.now()-E}),C;let S;try{S=N(C)}catch(Q){throw ee(Q)}let b=performance.now()-E;throw c({type:"step_error",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:b,error:S}),n&&c({type:"step_complete",workflowId:s,stepKey:n,name:o,ts:Date.now(),durationMs:b,result:K(S,{cause:C}),meta:{origin:"throw",thrown:C}}),u?.(S,o,A),D(S,{origin:"throw",thrown:C})}if(!y.ok){let C=performance.now()-E,S=$(y.error,{origin:"result",resultCause:y.cause});throw c({type:"step_error",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:C,error:S}),n&&c({type:"step_complete",workflowId:s,stepKey:n,name:o,ts:Date.now(),durationMs:C,result:y,meta:{origin:"result",resultCause:y.cause}}),u?.(S,o,A),D(S,{origin:"result",resultCause:y.cause})}let f=y.value,k,g,P=!1;try{k=await m.use(f)}catch(C){if(X(C)){try{await m.release(f)}catch(S){console.warn(`[awaitly] step.withResource("${a}"): release threw after earlyExit:`,S)}throw C}g=C,P=!0}try{await m.release(f)}catch(C){console.warn(`[awaitly] step.withResource("${a}"): release threw:`,C)}if(P){let C;try{C=N(g)}catch(b){throw ee(b)}let S=performance.now()-E;throw c({type:"step_error",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:S,error:C}),n&&c({type:"step_complete",workflowId:s,stepKey:n,name:o,ts:Date.now(),durationMs:S,result:K(C,{cause:g}),meta:{origin:"throw",thrown:g}}),u?.(C,o,A),D(C,{origin:"throw",thrown:g})}let I=k;if(I.ok){let C=performance.now()-E;return c({type:"step_success",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:C}),n&&c({type:"step_complete",workflowId:s,stepKey:n,name:o,ts:Date.now(),durationMs:C,result:I}),I.value}let x=performance.now()-E,_=$(I.error,{origin:"result",resultCause:I.cause});throw c({type:"step_error",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:x,error:_}),n&&c({type:"step_complete",workflowId:s,stepKey:n,name:o,ts:Date.now(),durationMs:x,result:I,meta:{origin:"result",resultCause:I.cause}}),u?.(_,o,A),D(_,{origin:"result",resultCause:I.cause})})()};let L=await w({step:d});if(process.env.NODE_ENV!=="production"&&L!==null&&typeof L=="object"&&"ok"in L&&typeof L.ok=="boolean"){let a=L;(a.ok===!0&&"value"in a||a.ok===!1&&"error"in a)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
2
-
3
- Incorrect: return ok({ data });
4
- Correct: return { data };
5
-
6
- See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return V(L)}catch(d){if(mr(d))throw d.thrown;if(X(d)){let H=d.meta.origin==="throw"?d.meta.thrown:d.meta.origin==="result"?d.meta.resultCause:void 0;return K(d.error,{cause:H})}let F=N(d);return u?.(F,"unexpected",A),K(F,{cause:d})}}ke.strict=(e,r)=>ke(e,r);async function Ne(e){return e.length===0?V([]):new Promise(r=>{let l=!1,w=e.length,T=new Array(e.length);for(let u=0;u<e.length;u++){let p=u;Promise.resolve(e[p]).catch(h=>K({type:"PROMISE_REJECTED",cause:h},{cause:{type:"PROMISE_REJECTION",reason:h}})).then(h=>{if(!l){if(!h.ok){l=!0,r(h);return}T[p]=h.value,w--,w===0&&r(V(T))}})}})}function Ve(e){return typeof e=="object"&&e!==null&&e.type==="VALIDATION_ERROR"}function le(e){return{status:400,body:{error:{type:e.type,message:e.message,details:e.field?{field:e.field}:e.details}}}}function ce(e){return{status:500,body:{error:{type:"INTERNAL_ERROR",message:e instanceof Error?e.message:"An unexpected error occurred"}}}}function We(e,r,l){let{validateInput:w,mapResult:T,mapValidationError:u=le,mapUnexpectedError:p=ce,beforeValidation:h,afterResponse:v}=l;return async U=>{try{let A=h?await h(U):U,M=await w(A);if(!ie(M)){let J=u(M.error,A);return v?await v(J,A):J}let s=M.value,N=await e.run(async({step:J,deps:G})=>r({step:J,deps:G,args:s})),B=T(N,A);return v?await v(B,A):B}catch(A){let M=p(A,U);return v?await v(M,U):M}}}function Le(e){let{validateInput:r,handler:l,mapResult:w,mapValidationError:T=le,mapUnexpectedError:u=ce}=e;return async p=>{try{let h=await r(p);if(!ie(h))return T(h.error,p);let v=await l(h.value,p);return w(v,p)}catch(h){return u(h,p)}}}function He(e,r={}){let{defaultStatus:l=500,successStatus:w=200}=r,T=new Map;for(let u of e)T.set(u.error,u);return u=>{if(u.ok)return{status:w,body:u.value};if(Be(u.error))return{status:500,body:{error:{type:"INTERNAL_ERROR",message:u.error instanceof Error?u.error.message:"An unexpected error occurred"}}};let p=T.get(u.error);return p?{status:p.status,body:{error:{type:String(p.error),message:p.message}}}:{status:l,body:{error:{type:String(u.error)}}}}}function Re(e){return{method:e.method,path:e.path,headers:e.headers,body:e.body,query:e.query,params:e.params,raw:e}}function ge(e,r){r.headers&&e.set(r.headers),e.status(r.status).json(r.body)}function qe(e){return async(r,l)=>{let w=Re(r),T=await e(w);ge(l,T)}}function xe(e,r,l){return{type:"VALIDATION_ERROR",message:e,field:r,details:l}}function $e(e){return r=>{for(let l of e)if(r[l]===void 0||r[l]===null||r[l]==="")return K(xe(`Missing required field: ${l}`,l));return V(void 0)}}function Ye(...e){return r=>{for(let l of e){let w=l(r);if(!w.ok)return w}return V(void 0)}}function ze(e,r,l){let{validatePayload:w,mapResult:T}=l;return async u=>{try{let p=w(u);if(!ie(p))return{success:!1,ack:!0,error:{type:p.error.type,message:p.error.message,retryable:!1}};let h=p.value,v=await e.run(async({step:U,deps:A})=>r({step:U,deps:A,args:h}));return T(v,u)}catch(p){return{success:!1,ack:!1,error:{type:"UnexpectedError",message:p instanceof Error?p.message:String(p),retryable:!0}}}}}0&&(module.exports={composeValidators,createEventHandler,createExpressHandler,createResultMapper,createSimpleHandler,createWebhookHandler,defaultUnexpectedErrorMapper,defaultValidationErrorMapper,isValidationError,requireFields,sendWebhookResponse,toWebhookRequest,validationError});
7
- //# sourceMappingURL=webhook.cjs.map