@blokjs/helper 0.2.1 → 0.6.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 (46) hide show
  1. package/dist/components/AddElse.d.ts +15 -0
  2. package/dist/components/AddIf.d.ts +15 -0
  3. package/dist/components/StepNode.d.ts +6 -0
  4. package/dist/components/StepNode.js +8 -0
  5. package/dist/components/StepNode.js.map +1 -1
  6. package/dist/components/Trigger.d.ts +10 -2
  7. package/dist/components/Trigger.js +16 -5
  8. package/dist/components/Trigger.js.map +1 -1
  9. package/dist/components/branch.d.ts +44 -0
  10. package/dist/components/branch.js +57 -0
  11. package/dist/components/branch.js.map +1 -0
  12. package/dist/components/forEach.d.ts +53 -0
  13. package/dist/components/forEach.js +64 -0
  14. package/dist/components/forEach.js.map +1 -0
  15. package/dist/components/loop.d.ts +52 -0
  16. package/dist/components/loop.js +54 -0
  17. package/dist/components/loop.js.map +1 -0
  18. package/dist/components/switchOn.d.ts +68 -0
  19. package/dist/components/switchOn.js +76 -0
  20. package/dist/components/switchOn.js.map +1 -0
  21. package/dist/components/tryCatch.d.ts +63 -0
  22. package/dist/components/tryCatch.js +68 -0
  23. package/dist/components/tryCatch.js.map +1 -0
  24. package/dist/components/workflowV2.d.ts +83 -0
  25. package/dist/components/workflowV2.js +84 -0
  26. package/dist/components/workflowV2.js.map +1 -0
  27. package/dist/index.d.ts +12 -3
  28. package/dist/index.js +25 -4
  29. package/dist/index.js.map +1 -1
  30. package/dist/proxy/$.d.ts +102 -0
  31. package/dist/proxy/$.js +130 -0
  32. package/dist/proxy/$.js.map +1 -0
  33. package/dist/types/StepOpts.d.ts +723 -3
  34. package/dist/types/StepOpts.js +702 -3
  35. package/dist/types/StepOpts.js.map +1 -1
  36. package/dist/types/TriggerOpts.d.ts +1600 -35
  37. package/dist/types/TriggerOpts.js +601 -29
  38. package/dist/types/TriggerOpts.js.map +1 -1
  39. package/dist/types/WorkflowOpts.d.ts +478 -28
  40. package/dist/types/WorkflowOpts.js +66 -3
  41. package/dist/types/WorkflowOpts.js.map +1 -1
  42. package/dist/utils/parseDuration.d.ts +33 -0
  43. package/dist/utils/parseDuration.js +78 -0
  44. package/dist/utils/parseDuration.js.map +1 -0
  45. package/dist/workflow.schema.json +662 -0
  46. package/package.json +6 -6
@@ -1,41 +1,678 @@
1
1
  import { z } from "zod";
2
- export declare const HttpTriggerOptsSchema: z.ZodObject<{
3
- method: z.ZodEnum<["GET", "POST", "PUT", "DELETE", "PATCH", "ANY"]>;
2
+ /**
3
+ * Reusable Zod field bag for per-key concurrency gating.
4
+ *
5
+ * Spread into a trigger's `z.object({...})` and pair with the
6
+ * {@link concurrencyRefinement} cross-field check to add concurrency-key
7
+ * support to a trigger schema.
8
+ *
9
+ * Authors set `concurrencyKey` (literal or `$`-proxy expression) plus an
10
+ * optional `concurrencyLimit` (defaults to 1, matching Trigger.dev's
11
+ * "named mutex per key" pattern). When omitted, the trigger has no
12
+ * concurrency gate (zero-overhead default).
13
+ */
14
+ export declare const ConcurrencyOptsFields: {
15
+ readonly concurrencyKey: z.ZodOptional<z.ZodString>;
16
+ readonly concurrencyLimit: z.ZodOptional<z.ZodNumber>;
17
+ readonly concurrencyLeaseMs: z.ZodOptional<z.ZodNumber>;
18
+ readonly onLimit: z.ZodOptional<z.ZodEnum<["throw", "queue"]>>;
19
+ readonly concurrencyQueueTimeoutMs: z.ZodOptional<z.ZodNumber>;
20
+ readonly concurrencyQueueRetry: z.ZodOptional<z.ZodObject<{
21
+ minBackoffMs: z.ZodOptional<z.ZodNumber>;
22
+ maxBackoffMs: z.ZodOptional<z.ZodNumber>;
23
+ factor: z.ZodOptional<z.ZodNumber>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ minBackoffMs?: number | undefined;
26
+ maxBackoffMs?: number | undefined;
27
+ factor?: number | undefined;
28
+ }, {
29
+ minBackoffMs?: number | undefined;
30
+ maxBackoffMs?: number | undefined;
31
+ factor?: number | undefined;
32
+ }>>;
33
+ };
34
+ /**
35
+ * Cross-field refinement: `concurrencyLimit` / `concurrencyLeaseMs` / `onLimit`
36
+ * set without `concurrencyKey` are meaningless and rejected at validation time.
37
+ */
38
+ export declare const concurrencyRefinement: (val: {
39
+ concurrencyKey?: string;
40
+ concurrencyLimit?: number;
41
+ concurrencyLeaseMs?: number;
42
+ onLimit?: "throw" | "queue";
43
+ concurrencyQueueTimeoutMs?: number;
44
+ concurrencyQueueRetry?: {
45
+ minBackoffMs?: number;
46
+ maxBackoffMs?: number;
47
+ factor?: number;
48
+ };
49
+ }, ctx: z.RefinementCtx) => void;
50
+ /**
51
+ * Standalone schema exposing just the concurrency fields. Useful for tests
52
+ * and tools that want to validate concurrency config in isolation. Real
53
+ * triggers spread {@link ConcurrencyOptsFields} into their own `z.object`
54
+ * and apply {@link concurrencyRefinement}.
55
+ */
56
+ export declare const ConcurrencyOptsSchema: z.ZodEffects<z.ZodObject<{
57
+ readonly concurrencyKey: z.ZodOptional<z.ZodString>;
58
+ readonly concurrencyLimit: z.ZodOptional<z.ZodNumber>;
59
+ readonly concurrencyLeaseMs: z.ZodOptional<z.ZodNumber>;
60
+ readonly onLimit: z.ZodOptional<z.ZodEnum<["throw", "queue"]>>;
61
+ readonly concurrencyQueueTimeoutMs: z.ZodOptional<z.ZodNumber>;
62
+ readonly concurrencyQueueRetry: z.ZodOptional<z.ZodObject<{
63
+ minBackoffMs: z.ZodOptional<z.ZodNumber>;
64
+ maxBackoffMs: z.ZodOptional<z.ZodNumber>;
65
+ factor: z.ZodOptional<z.ZodNumber>;
66
+ }, "strip", z.ZodTypeAny, {
67
+ minBackoffMs?: number | undefined;
68
+ maxBackoffMs?: number | undefined;
69
+ factor?: number | undefined;
70
+ }, {
71
+ minBackoffMs?: number | undefined;
72
+ maxBackoffMs?: number | undefined;
73
+ factor?: number | undefined;
74
+ }>>;
75
+ }, "strip", z.ZodTypeAny, {
76
+ concurrencyKey?: string | undefined;
77
+ concurrencyLimit?: number | undefined;
78
+ concurrencyLeaseMs?: number | undefined;
79
+ onLimit?: "throw" | "queue" | undefined;
80
+ concurrencyQueueTimeoutMs?: number | undefined;
81
+ concurrencyQueueRetry?: {
82
+ minBackoffMs?: number | undefined;
83
+ maxBackoffMs?: number | undefined;
84
+ factor?: number | undefined;
85
+ } | undefined;
86
+ }, {
87
+ concurrencyKey?: string | undefined;
88
+ concurrencyLimit?: number | undefined;
89
+ concurrencyLeaseMs?: number | undefined;
90
+ onLimit?: "throw" | "queue" | undefined;
91
+ concurrencyQueueTimeoutMs?: number | undefined;
92
+ concurrencyQueueRetry?: {
93
+ minBackoffMs?: number | undefined;
94
+ maxBackoffMs?: number | undefined;
95
+ factor?: number | undefined;
96
+ } | undefined;
97
+ }>, {
98
+ concurrencyKey?: string | undefined;
99
+ concurrencyLimit?: number | undefined;
100
+ concurrencyLeaseMs?: number | undefined;
101
+ onLimit?: "throw" | "queue" | undefined;
102
+ concurrencyQueueTimeoutMs?: number | undefined;
103
+ concurrencyQueueRetry?: {
104
+ minBackoffMs?: number | undefined;
105
+ maxBackoffMs?: number | undefined;
106
+ factor?: number | undefined;
107
+ } | undefined;
108
+ }, {
109
+ concurrencyKey?: string | undefined;
110
+ concurrencyLimit?: number | undefined;
111
+ concurrencyLeaseMs?: number | undefined;
112
+ onLimit?: "throw" | "queue" | undefined;
113
+ concurrencyQueueTimeoutMs?: number | undefined;
114
+ concurrencyQueueRetry?: {
115
+ minBackoffMs?: number | undefined;
116
+ maxBackoffMs?: number | undefined;
117
+ factor?: number | undefined;
118
+ } | undefined;
119
+ }>;
120
+ /** Inferred shape of the concurrency-options field bag. */
121
+ export type ConcurrencyOpts = z.input<typeof ConcurrencyOptsSchema>;
122
+ /**
123
+ * Duration value: a non-negative integer (interpreted as milliseconds) or a
124
+ * single-unit string (`"500ms"`, `"30s"`, `"5m"`, `"2h"`, `"1d"`). Validated
125
+ * at trigger-config parse time; converted to milliseconds at run-entry time
126
+ * by `parseDuration` (`@blokjs/helper`).
127
+ */
128
+ /**
129
+ * Duration value: a non-negative integer (ms) or a single-unit string
130
+ * (`"500ms"`, `"30s"`, `"5m"`, `"2h"`, `"1d"`). Reused by Tier 2 #5+#7
131
+ * scheduling fields and the Tier 2 quick-wins `maxDuration` step field.
132
+ */
133
+ export declare const DurationSchema: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
134
+ /**
135
+ * Per-key debounce configuration. When set, repeated triggers sharing the
136
+ * resolved `key` collapse into one delayed run. Modes:
137
+ *
138
+ * - `"trailing"` (default): each ping resets a `delay` ms timer; the run
139
+ * fires after `delay` ms of silence. `maxDelay` (when set) bounds the
140
+ * tail latency — even with continuous pings, the run fires after
141
+ * `maxDelay` ms.
142
+ * - `"leading"`: the first ping in a window fires immediately; subsequent
143
+ * pings within `delay` ms are dropped with status `"debounced"`. Window
144
+ * resets when `delay` ms of silence pass.
145
+ *
146
+ * `key` is a literal string OR a `js/...` expression that evaluates to a
147
+ * string at run-entry time (typically derived from the request payload via
148
+ * a `$`-proxy expression like `$.req.body.userId`).
149
+ */
150
+ export declare const DebounceOptsSchema: z.ZodEffects<z.ZodObject<{
151
+ key: z.ZodString;
152
+ mode: z.ZodDefault<z.ZodEnum<["leading", "trailing"]>>;
153
+ delay: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
154
+ maxDelay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
155
+ }, "strip", z.ZodTypeAny, {
156
+ key: string;
157
+ mode: "leading" | "trailing";
158
+ delay: string | number;
159
+ maxDelay?: string | number | undefined;
160
+ }, {
161
+ key: string;
162
+ delay: string | number;
163
+ mode?: "leading" | "trailing" | undefined;
164
+ maxDelay?: string | number | undefined;
165
+ }>, {
166
+ key: string;
167
+ mode: "leading" | "trailing";
168
+ delay: string | number;
169
+ maxDelay?: string | number | undefined;
170
+ }, {
171
+ key: string;
172
+ delay: string | number;
173
+ mode?: "leading" | "trailing" | undefined;
174
+ maxDelay?: string | number | undefined;
175
+ }>;
176
+ /** Inferred type of the {@link DebounceOptsSchema}. */
177
+ export type DebounceOpts = z.input<typeof DebounceOptsSchema>;
178
+ /**
179
+ * Reusable Zod field bag for run-scheduling primitives. Spread into a
180
+ * trigger's `z.object({...})` and pair with {@link schedulingRefinement}
181
+ * for cross-field validation.
182
+ *
183
+ * - `delay`: defer the run by N (number = ms, or string = `"1h"`).
184
+ * - `ttl`: expire if not started within N. Auto-cancels with status
185
+ * `"expired"`.
186
+ * - `debounce`: coalesce rapid same-key triggers into one delayed run.
187
+ *
188
+ * Zero-overhead default: when none of these fields are set, the trigger
189
+ * behaves exactly as before.
190
+ */
191
+ export declare const SchedulingOptsFields: {
192
+ readonly delay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
193
+ readonly ttl: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
194
+ readonly debounce: z.ZodOptional<z.ZodEffects<z.ZodObject<{
195
+ key: z.ZodString;
196
+ mode: z.ZodDefault<z.ZodEnum<["leading", "trailing"]>>;
197
+ delay: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
198
+ maxDelay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
199
+ }, "strip", z.ZodTypeAny, {
200
+ key: string;
201
+ mode: "leading" | "trailing";
202
+ delay: string | number;
203
+ maxDelay?: string | number | undefined;
204
+ }, {
205
+ key: string;
206
+ delay: string | number;
207
+ mode?: "leading" | "trailing" | undefined;
208
+ maxDelay?: string | number | undefined;
209
+ }>, {
210
+ key: string;
211
+ mode: "leading" | "trailing";
212
+ delay: string | number;
213
+ maxDelay?: string | number | undefined;
214
+ }, {
215
+ key: string;
216
+ delay: string | number;
217
+ mode?: "leading" | "trailing" | undefined;
218
+ maxDelay?: string | number | undefined;
219
+ }>>;
220
+ };
221
+ /**
222
+ * Cross-field refinement for scheduling fields. Per-trigger callers pass
223
+ * the trigger kind so HTTP and Worker can have different rules for
224
+ * `ttl`-without-`delay`.
225
+ */
226
+ export declare function makeSchedulingRefinement(triggerKind: "http" | "worker"): (val: {
227
+ delay?: number | string;
228
+ ttl?: number | string;
229
+ debounce?: DebounceOpts;
230
+ }, ctx: z.RefinementCtx) => void;
231
+ /**
232
+ * Standalone schema exposing just the scheduling fields. Useful for tests
233
+ * and tools. Real triggers spread {@link SchedulingOptsFields} into their
234
+ * own `z.object` and apply {@link makeSchedulingRefinement}.
235
+ */
236
+ export declare const SchedulingOptsSchema: z.ZodObject<{
237
+ readonly delay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
238
+ readonly ttl: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
239
+ readonly debounce: z.ZodOptional<z.ZodEffects<z.ZodObject<{
240
+ key: z.ZodString;
241
+ mode: z.ZodDefault<z.ZodEnum<["leading", "trailing"]>>;
242
+ delay: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
243
+ maxDelay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
244
+ }, "strip", z.ZodTypeAny, {
245
+ key: string;
246
+ mode: "leading" | "trailing";
247
+ delay: string | number;
248
+ maxDelay?: string | number | undefined;
249
+ }, {
250
+ key: string;
251
+ delay: string | number;
252
+ mode?: "leading" | "trailing" | undefined;
253
+ maxDelay?: string | number | undefined;
254
+ }>, {
255
+ key: string;
256
+ mode: "leading" | "trailing";
257
+ delay: string | number;
258
+ maxDelay?: string | number | undefined;
259
+ }, {
260
+ key: string;
261
+ delay: string | number;
262
+ mode?: "leading" | "trailing" | undefined;
263
+ maxDelay?: string | number | undefined;
264
+ }>>;
265
+ }, "strip", z.ZodTypeAny, {
266
+ delay?: string | number | undefined;
267
+ ttl?: string | number | undefined;
268
+ debounce?: {
269
+ key: string;
270
+ mode: "leading" | "trailing";
271
+ delay: string | number;
272
+ maxDelay?: string | number | undefined;
273
+ } | undefined;
274
+ }, {
275
+ delay?: string | number | undefined;
276
+ ttl?: string | number | undefined;
277
+ debounce?: {
278
+ key: string;
279
+ delay: string | number;
280
+ mode?: "leading" | "trailing" | undefined;
281
+ maxDelay?: string | number | undefined;
282
+ } | undefined;
283
+ }>;
284
+ /** Inferred shape of the scheduling-options field bag. */
285
+ export type SchedulingOpts = z.input<typeof SchedulingOptsSchema>;
286
+ /**
287
+ * Canonical HTTP method names.
288
+ *
289
+ * `"ANY"` is the wildcard. Legacy `"*"` (used by old JSON workflows) is
290
+ * accepted via {@link HttpMethodSchema} preprocessing and normalized to
291
+ * `"ANY"` with a one-time deprecation warning.
292
+ */
293
+ export declare const HTTP_METHODS: readonly ["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "ANY"];
294
+ /**
295
+ * HTTP method schema — accepts the canonical names plus the legacy `"*"`
296
+ * (which is preprocessed to `"ANY"` with a one-time warning).
297
+ */
298
+ export declare const HttpMethodSchema: z.ZodEffects<z.ZodEnum<["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "ANY"]>, "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY", unknown>;
299
+ export type HttpMethod = z.infer<typeof HttpMethodSchema>;
300
+ /** Validation schema for the HTTP trigger configuration. */
301
+ export declare const HttpTriggerOptsSchema: z.ZodEffects<z.ZodObject<{
302
+ delay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
303
+ ttl: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
304
+ debounce: z.ZodOptional<z.ZodEffects<z.ZodObject<{
305
+ key: z.ZodString;
306
+ mode: z.ZodDefault<z.ZodEnum<["leading", "trailing"]>>;
307
+ delay: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
308
+ maxDelay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
309
+ }, "strip", z.ZodTypeAny, {
310
+ key: string;
311
+ mode: "leading" | "trailing";
312
+ delay: string | number;
313
+ maxDelay?: string | number | undefined;
314
+ }, {
315
+ key: string;
316
+ delay: string | number;
317
+ mode?: "leading" | "trailing" | undefined;
318
+ maxDelay?: string | number | undefined;
319
+ }>, {
320
+ key: string;
321
+ mode: "leading" | "trailing";
322
+ delay: string | number;
323
+ maxDelay?: string | number | undefined;
324
+ }, {
325
+ key: string;
326
+ delay: string | number;
327
+ mode?: "leading" | "trailing" | undefined;
328
+ maxDelay?: string | number | undefined;
329
+ }>>;
330
+ concurrencyKey: z.ZodOptional<z.ZodString>;
331
+ concurrencyLimit: z.ZodOptional<z.ZodNumber>;
332
+ concurrencyLeaseMs: z.ZodOptional<z.ZodNumber>;
333
+ onLimit: z.ZodOptional<z.ZodEnum<["throw", "queue"]>>;
334
+ concurrencyQueueTimeoutMs: z.ZodOptional<z.ZodNumber>;
335
+ concurrencyQueueRetry: z.ZodOptional<z.ZodObject<{
336
+ minBackoffMs: z.ZodOptional<z.ZodNumber>;
337
+ maxBackoffMs: z.ZodOptional<z.ZodNumber>;
338
+ factor: z.ZodOptional<z.ZodNumber>;
339
+ }, "strip", z.ZodTypeAny, {
340
+ minBackoffMs?: number | undefined;
341
+ maxBackoffMs?: number | undefined;
342
+ factor?: number | undefined;
343
+ }, {
344
+ minBackoffMs?: number | undefined;
345
+ maxBackoffMs?: number | undefined;
346
+ factor?: number | undefined;
347
+ }>>;
348
+ method: z.ZodEffects<z.ZodEnum<["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "ANY"]>, "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY", unknown>;
4
349
  path: z.ZodOptional<z.ZodString>;
5
350
  accept: z.ZodDefault<z.ZodString>;
6
351
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
352
+ legacyKeyPrefix: z.ZodOptional<z.ZodBoolean>;
353
+ middleware: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
354
+ examples: z.ZodOptional<z.ZodObject<{
355
+ body: z.ZodOptional<z.ZodUnknown>;
356
+ }, "strip", z.ZodTypeAny, {
357
+ body?: unknown;
358
+ }, {
359
+ body?: unknown;
360
+ }>>;
361
+ recordSample: z.ZodOptional<z.ZodBoolean>;
7
362
  }, "strip", z.ZodTypeAny, {
8
- method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "ANY";
363
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY";
9
364
  accept: string;
10
365
  path?: string | undefined;
366
+ concurrencyKey?: string | undefined;
367
+ concurrencyLimit?: number | undefined;
368
+ concurrencyLeaseMs?: number | undefined;
369
+ onLimit?: "throw" | "queue" | undefined;
370
+ concurrencyQueueTimeoutMs?: number | undefined;
371
+ concurrencyQueueRetry?: {
372
+ minBackoffMs?: number | undefined;
373
+ maxBackoffMs?: number | undefined;
374
+ factor?: number | undefined;
375
+ } | undefined;
376
+ delay?: string | number | undefined;
377
+ ttl?: string | number | undefined;
378
+ debounce?: {
379
+ key: string;
380
+ mode: "leading" | "trailing";
381
+ delay: string | number;
382
+ maxDelay?: string | number | undefined;
383
+ } | undefined;
11
384
  headers?: Record<string, any> | undefined;
385
+ legacyKeyPrefix?: boolean | undefined;
386
+ middleware?: string[] | undefined;
387
+ examples?: {
388
+ body?: unknown;
389
+ } | undefined;
390
+ recordSample?: boolean | undefined;
12
391
  }, {
13
- method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "ANY";
14
392
  path?: string | undefined;
393
+ concurrencyKey?: string | undefined;
394
+ concurrencyLimit?: number | undefined;
395
+ concurrencyLeaseMs?: number | undefined;
396
+ onLimit?: "throw" | "queue" | undefined;
397
+ concurrencyQueueTimeoutMs?: number | undefined;
398
+ concurrencyQueueRetry?: {
399
+ minBackoffMs?: number | undefined;
400
+ maxBackoffMs?: number | undefined;
401
+ factor?: number | undefined;
402
+ } | undefined;
403
+ delay?: string | number | undefined;
404
+ ttl?: string | number | undefined;
405
+ debounce?: {
406
+ key: string;
407
+ delay: string | number;
408
+ mode?: "leading" | "trailing" | undefined;
409
+ maxDelay?: string | number | undefined;
410
+ } | undefined;
411
+ method?: unknown;
15
412
  accept?: string | undefined;
16
413
  headers?: Record<string, any> | undefined;
414
+ legacyKeyPrefix?: boolean | undefined;
415
+ middleware?: string[] | undefined;
416
+ examples?: {
417
+ body?: unknown;
418
+ } | undefined;
419
+ recordSample?: boolean | undefined;
420
+ }>, {
421
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY";
422
+ accept: string;
423
+ path?: string | undefined;
424
+ concurrencyKey?: string | undefined;
425
+ concurrencyLimit?: number | undefined;
426
+ concurrencyLeaseMs?: number | undefined;
427
+ onLimit?: "throw" | "queue" | undefined;
428
+ concurrencyQueueTimeoutMs?: number | undefined;
429
+ concurrencyQueueRetry?: {
430
+ minBackoffMs?: number | undefined;
431
+ maxBackoffMs?: number | undefined;
432
+ factor?: number | undefined;
433
+ } | undefined;
434
+ delay?: string | number | undefined;
435
+ ttl?: string | number | undefined;
436
+ debounce?: {
437
+ key: string;
438
+ mode: "leading" | "trailing";
439
+ delay: string | number;
440
+ maxDelay?: string | number | undefined;
441
+ } | undefined;
442
+ headers?: Record<string, any> | undefined;
443
+ legacyKeyPrefix?: boolean | undefined;
444
+ middleware?: string[] | undefined;
445
+ examples?: {
446
+ body?: unknown;
447
+ } | undefined;
448
+ recordSample?: boolean | undefined;
449
+ }, {
450
+ path?: string | undefined;
451
+ concurrencyKey?: string | undefined;
452
+ concurrencyLimit?: number | undefined;
453
+ concurrencyLeaseMs?: number | undefined;
454
+ onLimit?: "throw" | "queue" | undefined;
455
+ concurrencyQueueTimeoutMs?: number | undefined;
456
+ concurrencyQueueRetry?: {
457
+ minBackoffMs?: number | undefined;
458
+ maxBackoffMs?: number | undefined;
459
+ factor?: number | undefined;
460
+ } | undefined;
461
+ delay?: string | number | undefined;
462
+ ttl?: string | number | undefined;
463
+ debounce?: {
464
+ key: string;
465
+ delay: string | number;
466
+ mode?: "leading" | "trailing" | undefined;
467
+ maxDelay?: string | number | undefined;
468
+ } | undefined;
469
+ method?: unknown;
470
+ accept?: string | undefined;
471
+ headers?: Record<string, any> | undefined;
472
+ legacyKeyPrefix?: boolean | undefined;
473
+ middleware?: string[] | undefined;
474
+ examples?: {
475
+ body?: unknown;
476
+ } | undefined;
477
+ recordSample?: boolean | undefined;
17
478
  }>;
18
- export declare const TriggerOptsSchema: z.ZodObject<{
19
- method: z.ZodEnum<["GET", "POST", "PUT", "DELETE", "PATCH", "ANY"]>;
479
+ /** Configuration for an HTTP trigger. Use with `addTrigger("http", ...)`. */
480
+ export type HttpTriggerOpts = z.input<typeof HttpTriggerOptsSchema>;
481
+ /**
482
+ * Legacy alias for {@link HttpTriggerOptsSchema}. Prefer the explicit name.
483
+ *
484
+ * @deprecated Use {@link HttpTriggerOptsSchema} directly. Will be removed in
485
+ * the next minor version.
486
+ */
487
+ export declare const TriggerOptsSchema: z.ZodEffects<z.ZodObject<{
488
+ delay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
489
+ ttl: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
490
+ debounce: z.ZodOptional<z.ZodEffects<z.ZodObject<{
491
+ key: z.ZodString;
492
+ mode: z.ZodDefault<z.ZodEnum<["leading", "trailing"]>>;
493
+ delay: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
494
+ maxDelay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
495
+ }, "strip", z.ZodTypeAny, {
496
+ key: string;
497
+ mode: "leading" | "trailing";
498
+ delay: string | number;
499
+ maxDelay?: string | number | undefined;
500
+ }, {
501
+ key: string;
502
+ delay: string | number;
503
+ mode?: "leading" | "trailing" | undefined;
504
+ maxDelay?: string | number | undefined;
505
+ }>, {
506
+ key: string;
507
+ mode: "leading" | "trailing";
508
+ delay: string | number;
509
+ maxDelay?: string | number | undefined;
510
+ }, {
511
+ key: string;
512
+ delay: string | number;
513
+ mode?: "leading" | "trailing" | undefined;
514
+ maxDelay?: string | number | undefined;
515
+ }>>;
516
+ concurrencyKey: z.ZodOptional<z.ZodString>;
517
+ concurrencyLimit: z.ZodOptional<z.ZodNumber>;
518
+ concurrencyLeaseMs: z.ZodOptional<z.ZodNumber>;
519
+ onLimit: z.ZodOptional<z.ZodEnum<["throw", "queue"]>>;
520
+ concurrencyQueueTimeoutMs: z.ZodOptional<z.ZodNumber>;
521
+ concurrencyQueueRetry: z.ZodOptional<z.ZodObject<{
522
+ minBackoffMs: z.ZodOptional<z.ZodNumber>;
523
+ maxBackoffMs: z.ZodOptional<z.ZodNumber>;
524
+ factor: z.ZodOptional<z.ZodNumber>;
525
+ }, "strip", z.ZodTypeAny, {
526
+ minBackoffMs?: number | undefined;
527
+ maxBackoffMs?: number | undefined;
528
+ factor?: number | undefined;
529
+ }, {
530
+ minBackoffMs?: number | undefined;
531
+ maxBackoffMs?: number | undefined;
532
+ factor?: number | undefined;
533
+ }>>;
534
+ method: z.ZodEffects<z.ZodEnum<["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "ANY"]>, "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY", unknown>;
20
535
  path: z.ZodOptional<z.ZodString>;
21
536
  accept: z.ZodDefault<z.ZodString>;
22
537
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
538
+ legacyKeyPrefix: z.ZodOptional<z.ZodBoolean>;
539
+ middleware: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
540
+ examples: z.ZodOptional<z.ZodObject<{
541
+ body: z.ZodOptional<z.ZodUnknown>;
542
+ }, "strip", z.ZodTypeAny, {
543
+ body?: unknown;
544
+ }, {
545
+ body?: unknown;
546
+ }>>;
547
+ recordSample: z.ZodOptional<z.ZodBoolean>;
23
548
  }, "strip", z.ZodTypeAny, {
24
- method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "ANY";
549
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY";
550
+ accept: string;
551
+ path?: string | undefined;
552
+ concurrencyKey?: string | undefined;
553
+ concurrencyLimit?: number | undefined;
554
+ concurrencyLeaseMs?: number | undefined;
555
+ onLimit?: "throw" | "queue" | undefined;
556
+ concurrencyQueueTimeoutMs?: number | undefined;
557
+ concurrencyQueueRetry?: {
558
+ minBackoffMs?: number | undefined;
559
+ maxBackoffMs?: number | undefined;
560
+ factor?: number | undefined;
561
+ } | undefined;
562
+ delay?: string | number | undefined;
563
+ ttl?: string | number | undefined;
564
+ debounce?: {
565
+ key: string;
566
+ mode: "leading" | "trailing";
567
+ delay: string | number;
568
+ maxDelay?: string | number | undefined;
569
+ } | undefined;
570
+ headers?: Record<string, any> | undefined;
571
+ legacyKeyPrefix?: boolean | undefined;
572
+ middleware?: string[] | undefined;
573
+ examples?: {
574
+ body?: unknown;
575
+ } | undefined;
576
+ recordSample?: boolean | undefined;
577
+ }, {
578
+ path?: string | undefined;
579
+ concurrencyKey?: string | undefined;
580
+ concurrencyLimit?: number | undefined;
581
+ concurrencyLeaseMs?: number | undefined;
582
+ onLimit?: "throw" | "queue" | undefined;
583
+ concurrencyQueueTimeoutMs?: number | undefined;
584
+ concurrencyQueueRetry?: {
585
+ minBackoffMs?: number | undefined;
586
+ maxBackoffMs?: number | undefined;
587
+ factor?: number | undefined;
588
+ } | undefined;
589
+ delay?: string | number | undefined;
590
+ ttl?: string | number | undefined;
591
+ debounce?: {
592
+ key: string;
593
+ delay: string | number;
594
+ mode?: "leading" | "trailing" | undefined;
595
+ maxDelay?: string | number | undefined;
596
+ } | undefined;
597
+ method?: unknown;
598
+ accept?: string | undefined;
599
+ headers?: Record<string, any> | undefined;
600
+ legacyKeyPrefix?: boolean | undefined;
601
+ middleware?: string[] | undefined;
602
+ examples?: {
603
+ body?: unknown;
604
+ } | undefined;
605
+ recordSample?: boolean | undefined;
606
+ }>, {
607
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY";
25
608
  accept: string;
26
609
  path?: string | undefined;
610
+ concurrencyKey?: string | undefined;
611
+ concurrencyLimit?: number | undefined;
612
+ concurrencyLeaseMs?: number | undefined;
613
+ onLimit?: "throw" | "queue" | undefined;
614
+ concurrencyQueueTimeoutMs?: number | undefined;
615
+ concurrencyQueueRetry?: {
616
+ minBackoffMs?: number | undefined;
617
+ maxBackoffMs?: number | undefined;
618
+ factor?: number | undefined;
619
+ } | undefined;
620
+ delay?: string | number | undefined;
621
+ ttl?: string | number | undefined;
622
+ debounce?: {
623
+ key: string;
624
+ mode: "leading" | "trailing";
625
+ delay: string | number;
626
+ maxDelay?: string | number | undefined;
627
+ } | undefined;
27
628
  headers?: Record<string, any> | undefined;
629
+ legacyKeyPrefix?: boolean | undefined;
630
+ middleware?: string[] | undefined;
631
+ examples?: {
632
+ body?: unknown;
633
+ } | undefined;
634
+ recordSample?: boolean | undefined;
28
635
  }, {
29
- method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "ANY";
30
636
  path?: string | undefined;
637
+ concurrencyKey?: string | undefined;
638
+ concurrencyLimit?: number | undefined;
639
+ concurrencyLeaseMs?: number | undefined;
640
+ onLimit?: "throw" | "queue" | undefined;
641
+ concurrencyQueueTimeoutMs?: number | undefined;
642
+ concurrencyQueueRetry?: {
643
+ minBackoffMs?: number | undefined;
644
+ maxBackoffMs?: number | undefined;
645
+ factor?: number | undefined;
646
+ } | undefined;
647
+ delay?: string | number | undefined;
648
+ ttl?: string | number | undefined;
649
+ debounce?: {
650
+ key: string;
651
+ delay: string | number;
652
+ mode?: "leading" | "trailing" | undefined;
653
+ maxDelay?: string | number | undefined;
654
+ } | undefined;
655
+ method?: unknown;
31
656
  accept?: string | undefined;
32
657
  headers?: Record<string, any> | undefined;
658
+ legacyKeyPrefix?: boolean | undefined;
659
+ middleware?: string[] | undefined;
660
+ examples?: {
661
+ body?: unknown;
662
+ } | undefined;
663
+ recordSample?: boolean | undefined;
33
664
  }>;
34
- export type TriggerOpts = z.input<typeof TriggerOptsSchema>;
35
- export declare const QueueProviderSchema: z.ZodEnum<["kafka", "rabbitmq", "sqs", "redis", "beanstalk"]>;
665
+ /**
666
+ * Legacy alias for {@link HttpTriggerOpts}. Prefer the explicit name.
667
+ *
668
+ * @deprecated Use {@link HttpTriggerOpts} directly. Will be removed in the
669
+ * next minor version.
670
+ */
671
+ export type TriggerOpts = HttpTriggerOpts;
672
+ export declare const QueueProviderSchema: z.ZodEnum<["kafka", "rabbitmq", "sqs", "redis", "beanstalk", "nats"]>;
36
673
  export type QueueProvider = z.infer<typeof QueueProviderSchema>;
37
674
  export declare const QueueTriggerOptsSchema: z.ZodObject<{
38
- provider: z.ZodEnum<["kafka", "rabbitmq", "sqs", "redis", "beanstalk"]>;
675
+ provider: z.ZodEnum<["kafka", "rabbitmq", "sqs", "redis", "beanstalk", "nats"]>;
39
676
  topic: z.ZodString;
40
677
  subscription: z.ZodOptional<z.ZodString>;
41
678
  consumerGroup: z.ZodOptional<z.ZodString>;
@@ -46,7 +683,7 @@ export declare const QueueTriggerOptsSchema: z.ZodObject<{
46
683
  batchSize: z.ZodDefault<z.ZodNumber>;
47
684
  concurrency: z.ZodDefault<z.ZodNumber>;
48
685
  }, "strip", z.ZodTypeAny, {
49
- provider: "kafka" | "rabbitmq" | "sqs" | "redis" | "beanstalk";
686
+ provider: "kafka" | "rabbitmq" | "sqs" | "redis" | "beanstalk" | "nats";
50
687
  topic: string;
51
688
  ack: boolean;
52
689
  maxRetries: number;
@@ -57,7 +694,7 @@ export declare const QueueTriggerOptsSchema: z.ZodObject<{
57
694
  consumerGroup?: string | undefined;
58
695
  deadLetterQueue?: string | undefined;
59
696
  }, {
60
- provider: "kafka" | "rabbitmq" | "sqs" | "redis" | "beanstalk";
697
+ provider: "kafka" | "rabbitmq" | "sqs" | "redis" | "beanstalk" | "nats";
61
698
  topic: string;
62
699
  subscription?: string | undefined;
63
700
  consumerGroup?: string | undefined;
@@ -69,58 +706,268 @@ export declare const QueueTriggerOptsSchema: z.ZodObject<{
69
706
  concurrency?: number | undefined;
70
707
  }>;
71
708
  export type QueueTriggerOpts = z.input<typeof QueueTriggerOptsSchema>;
72
- export declare const PubSubProviderSchema: z.ZodEnum<["gcp", "aws", "azure"]>;
709
+ /**
710
+ * v0.7 PR 6 — supported pub/sub adapter providers.
711
+ *
712
+ * Pub/Sub is distinct from Worker: pub/sub is **1:N fan-out by default**
713
+ * (every subscriber sees every message). When `consumerGroup` is set,
714
+ * semantics shift to **competing-consumer** (1 of N within group). This
715
+ * single field disambiguates the two semantics — matching NestJS's
716
+ * `@MessagePattern` vs `@EventPattern` distinction.
717
+ *
718
+ * `nats` and `redis-streams` and `kafka` appear in both Worker and
719
+ * Pub/Sub provider lists because the underlying brokers support both
720
+ * semantics — the same broker connection serves both adapter kinds
721
+ * via different code paths.
722
+ *
723
+ * `BLOK_PUBSUB_ADAPTER` env var sets the default when `provider` is
724
+ * omitted on the workflow.
725
+ */
726
+ export declare const PubSubProviderSchema: z.ZodEnum<["nats", "redis-streams", "kafka", "gcp", "aws", "azure"]>;
73
727
  export type PubSubProvider = z.infer<typeof PubSubProviderSchema>;
74
728
  export declare const PubSubTriggerOptsSchema: z.ZodObject<{
75
- provider: z.ZodEnum<["gcp", "aws", "azure"]>;
729
+ provider: z.ZodOptional<z.ZodEnum<["nats", "redis-streams", "kafka", "gcp", "aws", "azure"]>>;
76
730
  topic: z.ZodString;
77
- subscription: z.ZodString;
731
+ subscription: z.ZodOptional<z.ZodString>;
732
+ consumerGroup: z.ZodOptional<z.ZodString>;
733
+ durable: z.ZodOptional<z.ZodBoolean>;
734
+ startFrom: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<"earliest">, z.ZodLiteral<"latest">, z.ZodObject<{
735
+ seq: z.ZodNumber;
736
+ }, "strip", z.ZodTypeAny, {
737
+ seq: number;
738
+ }, {
739
+ seq: number;
740
+ }>, z.ZodObject<{
741
+ timestamp: z.ZodNumber;
742
+ }, "strip", z.ZodTypeAny, {
743
+ timestamp: number;
744
+ }, {
745
+ timestamp: number;
746
+ }>]>>;
78
747
  ack: z.ZodDefault<z.ZodBoolean>;
79
748
  maxMessages: z.ZodDefault<z.ZodNumber>;
80
749
  ackDeadline: z.ZodDefault<z.ZodNumber>;
81
750
  deadLetterTopic: z.ZodOptional<z.ZodString>;
82
751
  filter: z.ZodOptional<z.ZodString>;
83
752
  }, "strip", z.ZodTypeAny, {
84
- provider: "gcp" | "aws" | "azure";
85
753
  topic: string;
86
- subscription: string;
87
754
  ack: boolean;
88
755
  maxMessages: number;
89
756
  ackDeadline: number;
90
757
  filter?: string | undefined;
758
+ provider?: "kafka" | "nats" | "redis-streams" | "gcp" | "aws" | "azure" | undefined;
759
+ subscription?: string | undefined;
760
+ consumerGroup?: string | undefined;
761
+ durable?: boolean | undefined;
762
+ startFrom?: "earliest" | "latest" | {
763
+ seq: number;
764
+ } | {
765
+ timestamp: number;
766
+ } | undefined;
91
767
  deadLetterTopic?: string | undefined;
92
768
  }, {
93
- provider: "gcp" | "aws" | "azure";
94
769
  topic: string;
95
- subscription: string;
96
770
  filter?: string | undefined;
771
+ provider?: "kafka" | "nats" | "redis-streams" | "gcp" | "aws" | "azure" | undefined;
772
+ subscription?: string | undefined;
773
+ consumerGroup?: string | undefined;
97
774
  ack?: boolean | undefined;
775
+ durable?: boolean | undefined;
776
+ startFrom?: "earliest" | "latest" | {
777
+ seq: number;
778
+ } | {
779
+ timestamp: number;
780
+ } | undefined;
98
781
  maxMessages?: number | undefined;
99
782
  ackDeadline?: number | undefined;
100
783
  deadLetterTopic?: string | undefined;
101
784
  }>;
102
785
  export type PubSubTriggerOpts = z.input<typeof PubSubTriggerOptsSchema>;
103
- export declare const WorkerTriggerOptsSchema: z.ZodObject<{
786
+ /**
787
+ * v0.7 — supported worker adapter providers. `BLOK_WORKER_ADAPTER`
788
+ * env var sets the default when `provider` is omitted on the workflow
789
+ * (per Q7 resolution). `in-memory` is the dev/test fallback.
790
+ *
791
+ * `nats` and `bullmq` shipped pre-v0.7. The other five (kafka,
792
+ * rabbitmq, sqs, redis, pg-boss) are new in PR 5 — each ships behind a
793
+ * peer-dependency so workflows that don't use that provider don't
794
+ * pay the install cost.
795
+ */
796
+ export declare const WorkerProviderSchema: z.ZodEnum<["in-memory", "nats", "bullmq", "kafka", "rabbitmq", "sqs", "redis", "pg-boss"]>;
797
+ export type WorkerProvider = z.infer<typeof WorkerProviderSchema>;
798
+ export declare const WorkerTriggerOptsSchema: z.ZodEffects<z.ZodObject<{
799
+ delay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
800
+ ttl: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
801
+ debounce: z.ZodOptional<z.ZodEffects<z.ZodObject<{
802
+ key: z.ZodString;
803
+ mode: z.ZodDefault<z.ZodEnum<["leading", "trailing"]>>;
804
+ delay: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
805
+ maxDelay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
806
+ }, "strip", z.ZodTypeAny, {
807
+ key: string;
808
+ mode: "leading" | "trailing";
809
+ delay: string | number;
810
+ maxDelay?: string | number | undefined;
811
+ }, {
812
+ key: string;
813
+ delay: string | number;
814
+ mode?: "leading" | "trailing" | undefined;
815
+ maxDelay?: string | number | undefined;
816
+ }>, {
817
+ key: string;
818
+ mode: "leading" | "trailing";
819
+ delay: string | number;
820
+ maxDelay?: string | number | undefined;
821
+ }, {
822
+ key: string;
823
+ delay: string | number;
824
+ mode?: "leading" | "trailing" | undefined;
825
+ maxDelay?: string | number | undefined;
826
+ }>>;
827
+ concurrencyKey: z.ZodOptional<z.ZodString>;
828
+ concurrencyLimit: z.ZodOptional<z.ZodNumber>;
829
+ concurrencyLeaseMs: z.ZodOptional<z.ZodNumber>;
830
+ onLimit: z.ZodOptional<z.ZodEnum<["throw", "queue"]>>;
831
+ concurrencyQueueTimeoutMs: z.ZodOptional<z.ZodNumber>;
832
+ concurrencyQueueRetry: z.ZodOptional<z.ZodObject<{
833
+ minBackoffMs: z.ZodOptional<z.ZodNumber>;
834
+ maxBackoffMs: z.ZodOptional<z.ZodNumber>;
835
+ factor: z.ZodOptional<z.ZodNumber>;
836
+ }, "strip", z.ZodTypeAny, {
837
+ minBackoffMs?: number | undefined;
838
+ maxBackoffMs?: number | undefined;
839
+ factor?: number | undefined;
840
+ }, {
841
+ minBackoffMs?: number | undefined;
842
+ maxBackoffMs?: number | undefined;
843
+ factor?: number | undefined;
844
+ }>>;
104
845
  queue: z.ZodString;
846
+ provider: z.ZodOptional<z.ZodEnum<["in-memory", "nats", "bullmq", "kafka", "rabbitmq", "sqs", "redis", "pg-boss"]>>;
105
847
  concurrency: z.ZodDefault<z.ZodNumber>;
106
848
  timeout: z.ZodOptional<z.ZodNumber>;
107
849
  retries: z.ZodDefault<z.ZodNumber>;
108
850
  priority: z.ZodDefault<z.ZodNumber>;
109
- delay: z.ZodOptional<z.ZodNumber>;
851
+ consumerGroup: z.ZodOptional<z.ZodString>;
852
+ ack: z.ZodOptional<z.ZodBoolean>;
853
+ deadLetterQueue: z.ZodOptional<z.ZodString>;
854
+ fromBeginning: z.ZodOptional<z.ZodBoolean>;
110
855
  }, "strip", z.ZodTypeAny, {
856
+ queue: string;
111
857
  concurrency: number;
858
+ retries: number;
859
+ priority: number;
860
+ concurrencyKey?: string | undefined;
861
+ concurrencyLimit?: number | undefined;
862
+ concurrencyLeaseMs?: number | undefined;
863
+ onLimit?: "throw" | "queue" | undefined;
864
+ concurrencyQueueTimeoutMs?: number | undefined;
865
+ concurrencyQueueRetry?: {
866
+ minBackoffMs?: number | undefined;
867
+ maxBackoffMs?: number | undefined;
868
+ factor?: number | undefined;
869
+ } | undefined;
870
+ delay?: string | number | undefined;
871
+ ttl?: string | number | undefined;
872
+ debounce?: {
873
+ key: string;
874
+ mode: "leading" | "trailing";
875
+ delay: string | number;
876
+ maxDelay?: string | number | undefined;
877
+ } | undefined;
878
+ provider?: "kafka" | "rabbitmq" | "sqs" | "redis" | "nats" | "in-memory" | "bullmq" | "pg-boss" | undefined;
879
+ consumerGroup?: string | undefined;
880
+ ack?: boolean | undefined;
881
+ deadLetterQueue?: string | undefined;
882
+ timeout?: number | undefined;
883
+ fromBeginning?: boolean | undefined;
884
+ }, {
112
885
  queue: string;
886
+ concurrencyKey?: string | undefined;
887
+ concurrencyLimit?: number | undefined;
888
+ concurrencyLeaseMs?: number | undefined;
889
+ onLimit?: "throw" | "queue" | undefined;
890
+ concurrencyQueueTimeoutMs?: number | undefined;
891
+ concurrencyQueueRetry?: {
892
+ minBackoffMs?: number | undefined;
893
+ maxBackoffMs?: number | undefined;
894
+ factor?: number | undefined;
895
+ } | undefined;
896
+ delay?: string | number | undefined;
897
+ ttl?: string | number | undefined;
898
+ debounce?: {
899
+ key: string;
900
+ delay: string | number;
901
+ mode?: "leading" | "trailing" | undefined;
902
+ maxDelay?: string | number | undefined;
903
+ } | undefined;
904
+ provider?: "kafka" | "rabbitmq" | "sqs" | "redis" | "nats" | "in-memory" | "bullmq" | "pg-boss" | undefined;
905
+ consumerGroup?: string | undefined;
906
+ ack?: boolean | undefined;
907
+ deadLetterQueue?: string | undefined;
908
+ concurrency?: number | undefined;
909
+ timeout?: number | undefined;
910
+ retries?: number | undefined;
911
+ priority?: number | undefined;
912
+ fromBeginning?: boolean | undefined;
913
+ }>, {
914
+ queue: string;
915
+ concurrency: number;
113
916
  retries: number;
114
917
  priority: number;
918
+ concurrencyKey?: string | undefined;
919
+ concurrencyLimit?: number | undefined;
920
+ concurrencyLeaseMs?: number | undefined;
921
+ onLimit?: "throw" | "queue" | undefined;
922
+ concurrencyQueueTimeoutMs?: number | undefined;
923
+ concurrencyQueueRetry?: {
924
+ minBackoffMs?: number | undefined;
925
+ maxBackoffMs?: number | undefined;
926
+ factor?: number | undefined;
927
+ } | undefined;
928
+ delay?: string | number | undefined;
929
+ ttl?: string | number | undefined;
930
+ debounce?: {
931
+ key: string;
932
+ mode: "leading" | "trailing";
933
+ delay: string | number;
934
+ maxDelay?: string | number | undefined;
935
+ } | undefined;
936
+ provider?: "kafka" | "rabbitmq" | "sqs" | "redis" | "nats" | "in-memory" | "bullmq" | "pg-boss" | undefined;
937
+ consumerGroup?: string | undefined;
938
+ ack?: boolean | undefined;
939
+ deadLetterQueue?: string | undefined;
115
940
  timeout?: number | undefined;
116
- delay?: number | undefined;
941
+ fromBeginning?: boolean | undefined;
117
942
  }, {
118
943
  queue: string;
944
+ concurrencyKey?: string | undefined;
945
+ concurrencyLimit?: number | undefined;
946
+ concurrencyLeaseMs?: number | undefined;
947
+ onLimit?: "throw" | "queue" | undefined;
948
+ concurrencyQueueTimeoutMs?: number | undefined;
949
+ concurrencyQueueRetry?: {
950
+ minBackoffMs?: number | undefined;
951
+ maxBackoffMs?: number | undefined;
952
+ factor?: number | undefined;
953
+ } | undefined;
954
+ delay?: string | number | undefined;
955
+ ttl?: string | number | undefined;
956
+ debounce?: {
957
+ key: string;
958
+ delay: string | number;
959
+ mode?: "leading" | "trailing" | undefined;
960
+ maxDelay?: string | number | undefined;
961
+ } | undefined;
962
+ provider?: "kafka" | "rabbitmq" | "sqs" | "redis" | "nats" | "in-memory" | "bullmq" | "pg-boss" | undefined;
963
+ consumerGroup?: string | undefined;
964
+ ack?: boolean | undefined;
965
+ deadLetterQueue?: string | undefined;
119
966
  concurrency?: number | undefined;
120
967
  timeout?: number | undefined;
121
968
  retries?: number | undefined;
122
969
  priority?: number | undefined;
123
- delay?: number | undefined;
970
+ fromBeginning?: boolean | undefined;
124
971
  }>;
125
972
  export type WorkerTriggerOpts = z.input<typeof WorkerTriggerOptsSchema>;
126
973
  export declare const CronTriggerOptsSchema: z.ZodObject<{
@@ -137,21 +984,135 @@ export declare const CronTriggerOptsSchema: z.ZodObject<{
137
984
  overlap?: boolean | undefined;
138
985
  }>;
139
986
  export type CronTriggerOpts = z.input<typeof CronTriggerOptsSchema>;
987
+ /**
988
+ * v0.7 — custom signature scheme for unknown webhook providers.
989
+ *
990
+ * Authors who use a webhook source NOT in the built-in `provider`
991
+ * allowlist (github / stripe / slack / shopify / svix) supply this
992
+ * config; the trigger does HMAC verification using these fields.
993
+ *
994
+ * The `format` template names the layout of the signature payload —
995
+ * `{hex}` is substituted with the hex digest at verify time. Supports
996
+ * common shapes:
997
+ * - GitHub-style: `sha256={hex}`
998
+ * - Plain hex: `{hex}`
999
+ * - Base64: `{base64}` (encoded variant)
1000
+ *
1001
+ * When `timestampHeader` is set, the verifier mixes the header value
1002
+ * into the signed string as `{timestamp}.{rawBody}` (Stripe pattern)
1003
+ * and rejects deliveries whose timestamp drifted by more than
1004
+ * `tolerance` seconds (default 300s / 5min).
1005
+ */
1006
+ export declare const WebhookCustomSignatureSchema: z.ZodObject<{
1007
+ scheme: z.ZodDefault<z.ZodEnum<["hmac-sha256", "hmac-sha1", "hmac-sha512"]>>;
1008
+ header: z.ZodString;
1009
+ format: z.ZodDefault<z.ZodString>;
1010
+ secretEnv: z.ZodString;
1011
+ tolerance: z.ZodDefault<z.ZodNumber>;
1012
+ timestampHeader: z.ZodOptional<z.ZodString>;
1013
+ }, "strip", z.ZodTypeAny, {
1014
+ scheme: "hmac-sha256" | "hmac-sha1" | "hmac-sha512";
1015
+ header: string;
1016
+ format: string;
1017
+ secretEnv: string;
1018
+ tolerance: number;
1019
+ timestampHeader?: string | undefined;
1020
+ }, {
1021
+ header: string;
1022
+ secretEnv: string;
1023
+ scheme?: "hmac-sha256" | "hmac-sha1" | "hmac-sha512" | undefined;
1024
+ format?: string | undefined;
1025
+ tolerance?: number | undefined;
1026
+ timestampHeader?: string | undefined;
1027
+ }>;
1028
+ export type WebhookCustomSignature = z.input<typeof WebhookCustomSignatureSchema>;
1029
+ /**
1030
+ * v0.7 webhook trigger config. See the v0.7 additional-triggers plan
1031
+ * for the full design.
1032
+ *
1033
+ * **`provider`** selects a built-in verifier (GitHub, Stripe, Slack,
1034
+ * Shopify, Standard Webhooks via Svix). For unknown providers, omit
1035
+ * `provider` and supply `signature` instead.
1036
+ *
1037
+ * **`namespace`** (combined with a polymorphic `subworkflow` step in
1038
+ * the workflow body) lets one trigger workflow dispatch to many
1039
+ * per-event handler workflows by name. Example: webhook fires with
1040
+ * `body.type === "invoice.paid"` and namespace `"stripe"` resolves
1041
+ * to sub-workflow `"stripe.invoice.paid"`.
1042
+ *
1043
+ * **`secretEnv`** is the env var name to read the shared secret from
1044
+ * — the verifier never sees the secret value at config time, and
1045
+ * workflow JSON files never contain it.
1046
+ *
1047
+ * **`events`** (allowlist) skips verifier-validated deliveries that
1048
+ * are NOT in the list — returns 200 with `{status: "ignored"}` so
1049
+ * the sender doesn't retry. Absent allowlist = accept all events.
1050
+ */
140
1051
  export declare const WebhookTriggerOptsSchema: z.ZodObject<{
141
- source: z.ZodString;
142
- events: z.ZodArray<z.ZodString, "many">;
143
- secret: z.ZodOptional<z.ZodString>;
1052
+ provider: z.ZodOptional<z.ZodEnum<["github", "stripe", "slack", "shopify", "svix"]>>;
144
1053
  path: z.ZodOptional<z.ZodString>;
1054
+ events: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1055
+ secretEnv: z.ZodOptional<z.ZodString>;
1056
+ signature: z.ZodOptional<z.ZodObject<{
1057
+ scheme: z.ZodDefault<z.ZodEnum<["hmac-sha256", "hmac-sha1", "hmac-sha512"]>>;
1058
+ header: z.ZodString;
1059
+ format: z.ZodDefault<z.ZodString>;
1060
+ secretEnv: z.ZodString;
1061
+ tolerance: z.ZodDefault<z.ZodNumber>;
1062
+ timestampHeader: z.ZodOptional<z.ZodString>;
1063
+ }, "strip", z.ZodTypeAny, {
1064
+ scheme: "hmac-sha256" | "hmac-sha1" | "hmac-sha512";
1065
+ header: string;
1066
+ format: string;
1067
+ secretEnv: string;
1068
+ tolerance: number;
1069
+ timestampHeader?: string | undefined;
1070
+ }, {
1071
+ header: string;
1072
+ secretEnv: string;
1073
+ scheme?: "hmac-sha256" | "hmac-sha1" | "hmac-sha512" | undefined;
1074
+ format?: string | undefined;
1075
+ tolerance?: number | undefined;
1076
+ timestampHeader?: string | undefined;
1077
+ }>>;
1078
+ tolerance: z.ZodOptional<z.ZodNumber>;
1079
+ idempotencyKey: z.ZodOptional<z.ZodString>;
1080
+ namespace: z.ZodOptional<z.ZodString>;
1081
+ middleware: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
145
1082
  }, "strip", z.ZodTypeAny, {
146
- source: string;
147
- events: string[];
148
1083
  path?: string | undefined;
149
- secret?: string | undefined;
1084
+ middleware?: string[] | undefined;
1085
+ provider?: "github" | "stripe" | "slack" | "shopify" | "svix" | undefined;
1086
+ secretEnv?: string | undefined;
1087
+ tolerance?: number | undefined;
1088
+ events?: string[] | undefined;
1089
+ signature?: {
1090
+ scheme: "hmac-sha256" | "hmac-sha1" | "hmac-sha512";
1091
+ header: string;
1092
+ format: string;
1093
+ secretEnv: string;
1094
+ tolerance: number;
1095
+ timestampHeader?: string | undefined;
1096
+ } | undefined;
1097
+ idempotencyKey?: string | undefined;
1098
+ namespace?: string | undefined;
150
1099
  }, {
151
- source: string;
152
- events: string[];
153
1100
  path?: string | undefined;
154
- secret?: string | undefined;
1101
+ middleware?: string[] | undefined;
1102
+ provider?: "github" | "stripe" | "slack" | "shopify" | "svix" | undefined;
1103
+ secretEnv?: string | undefined;
1104
+ tolerance?: number | undefined;
1105
+ events?: string[] | undefined;
1106
+ signature?: {
1107
+ header: string;
1108
+ secretEnv: string;
1109
+ scheme?: "hmac-sha256" | "hmac-sha1" | "hmac-sha512" | undefined;
1110
+ format?: string | undefined;
1111
+ tolerance?: number | undefined;
1112
+ timestampHeader?: string | undefined;
1113
+ } | undefined;
1114
+ idempotencyKey?: string | undefined;
1115
+ namespace?: string | undefined;
155
1116
  }>;
156
1117
  export type WebhookTriggerOpts = z.input<typeof WebhookTriggerOptsSchema>;
157
1118
  export declare const WebSocketTriggerOptsSchema: z.ZodObject<{
@@ -200,10 +1161,17 @@ export declare const SSETriggerOptsSchema: z.ZodObject<{
200
1161
  retryInterval?: number | undefined;
201
1162
  }>;
202
1163
  export type SSETriggerOpts = z.input<typeof SSETriggerOptsSchema>;
1164
+ /** All trigger names supported by Blok. */
203
1165
  export declare const TriggersSchema: z.ZodEnum<["http", "grpc", "manual", "cron", "queue", "pubsub", "worker", "webhook", "sse", "websocket"]>;
204
1166
  export type TriggersEnum = z.infer<typeof TriggersSchema>;
1167
+ /**
1168
+ * Map of trigger name → its config type.
1169
+ *
1170
+ * Used by {@link Trigger.addTrigger} overloads to constrain the `config`
1171
+ * argument's shape for each trigger kind.
1172
+ */
205
1173
  export type TriggerConfigMap = {
206
- http: TriggerOpts;
1174
+ http: HttpTriggerOpts;
207
1175
  grpc: Record<string, unknown>;
208
1176
  manual: Record<string, unknown>;
209
1177
  cron: CronTriggerOpts;
@@ -214,4 +1182,601 @@ export type TriggerConfigMap = {
214
1182
  sse: SSETriggerOpts;
215
1183
  websocket: WebSocketTriggerOpts;
216
1184
  };
217
- export type AnyTriggerOpts = TriggerOpts | QueueTriggerOpts | PubSubTriggerOpts | WorkerTriggerOpts | CronTriggerOpts | WebhookTriggerOpts | WebSocketTriggerOpts | SSETriggerOpts | Record<string, unknown>;
1185
+ /**
1186
+ * Map of trigger name → validation schema. `null` means the trigger does not
1187
+ * have a required configuration shape (currently `grpc` and `manual`).
1188
+ *
1189
+ * Single source of truth for runtime trigger-config validation. Used by
1190
+ * {@link validateTriggerConfig}.
1191
+ */
1192
+ export declare const TRIGGER_SCHEMAS: {
1193
+ readonly http: z.ZodEffects<z.ZodObject<{
1194
+ delay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
1195
+ ttl: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
1196
+ debounce: z.ZodOptional<z.ZodEffects<z.ZodObject<{
1197
+ key: z.ZodString;
1198
+ mode: z.ZodDefault<z.ZodEnum<["leading", "trailing"]>>;
1199
+ delay: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
1200
+ maxDelay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
1201
+ }, "strip", z.ZodTypeAny, {
1202
+ key: string;
1203
+ mode: "leading" | "trailing";
1204
+ delay: string | number;
1205
+ maxDelay?: string | number | undefined;
1206
+ }, {
1207
+ key: string;
1208
+ delay: string | number;
1209
+ mode?: "leading" | "trailing" | undefined;
1210
+ maxDelay?: string | number | undefined;
1211
+ }>, {
1212
+ key: string;
1213
+ mode: "leading" | "trailing";
1214
+ delay: string | number;
1215
+ maxDelay?: string | number | undefined;
1216
+ }, {
1217
+ key: string;
1218
+ delay: string | number;
1219
+ mode?: "leading" | "trailing" | undefined;
1220
+ maxDelay?: string | number | undefined;
1221
+ }>>;
1222
+ concurrencyKey: z.ZodOptional<z.ZodString>;
1223
+ concurrencyLimit: z.ZodOptional<z.ZodNumber>;
1224
+ concurrencyLeaseMs: z.ZodOptional<z.ZodNumber>;
1225
+ onLimit: z.ZodOptional<z.ZodEnum<["throw", "queue"]>>;
1226
+ concurrencyQueueTimeoutMs: z.ZodOptional<z.ZodNumber>;
1227
+ concurrencyQueueRetry: z.ZodOptional<z.ZodObject<{
1228
+ minBackoffMs: z.ZodOptional<z.ZodNumber>;
1229
+ maxBackoffMs: z.ZodOptional<z.ZodNumber>;
1230
+ factor: z.ZodOptional<z.ZodNumber>;
1231
+ }, "strip", z.ZodTypeAny, {
1232
+ minBackoffMs?: number | undefined;
1233
+ maxBackoffMs?: number | undefined;
1234
+ factor?: number | undefined;
1235
+ }, {
1236
+ minBackoffMs?: number | undefined;
1237
+ maxBackoffMs?: number | undefined;
1238
+ factor?: number | undefined;
1239
+ }>>;
1240
+ method: z.ZodEffects<z.ZodEnum<["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "ANY"]>, "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY", unknown>;
1241
+ path: z.ZodOptional<z.ZodString>;
1242
+ accept: z.ZodDefault<z.ZodString>;
1243
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
1244
+ legacyKeyPrefix: z.ZodOptional<z.ZodBoolean>;
1245
+ middleware: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1246
+ examples: z.ZodOptional<z.ZodObject<{
1247
+ body: z.ZodOptional<z.ZodUnknown>;
1248
+ }, "strip", z.ZodTypeAny, {
1249
+ body?: unknown;
1250
+ }, {
1251
+ body?: unknown;
1252
+ }>>;
1253
+ recordSample: z.ZodOptional<z.ZodBoolean>;
1254
+ }, "strip", z.ZodTypeAny, {
1255
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY";
1256
+ accept: string;
1257
+ path?: string | undefined;
1258
+ concurrencyKey?: string | undefined;
1259
+ concurrencyLimit?: number | undefined;
1260
+ concurrencyLeaseMs?: number | undefined;
1261
+ onLimit?: "throw" | "queue" | undefined;
1262
+ concurrencyQueueTimeoutMs?: number | undefined;
1263
+ concurrencyQueueRetry?: {
1264
+ minBackoffMs?: number | undefined;
1265
+ maxBackoffMs?: number | undefined;
1266
+ factor?: number | undefined;
1267
+ } | undefined;
1268
+ delay?: string | number | undefined;
1269
+ ttl?: string | number | undefined;
1270
+ debounce?: {
1271
+ key: string;
1272
+ mode: "leading" | "trailing";
1273
+ delay: string | number;
1274
+ maxDelay?: string | number | undefined;
1275
+ } | undefined;
1276
+ headers?: Record<string, any> | undefined;
1277
+ legacyKeyPrefix?: boolean | undefined;
1278
+ middleware?: string[] | undefined;
1279
+ examples?: {
1280
+ body?: unknown;
1281
+ } | undefined;
1282
+ recordSample?: boolean | undefined;
1283
+ }, {
1284
+ path?: string | undefined;
1285
+ concurrencyKey?: string | undefined;
1286
+ concurrencyLimit?: number | undefined;
1287
+ concurrencyLeaseMs?: number | undefined;
1288
+ onLimit?: "throw" | "queue" | undefined;
1289
+ concurrencyQueueTimeoutMs?: number | undefined;
1290
+ concurrencyQueueRetry?: {
1291
+ minBackoffMs?: number | undefined;
1292
+ maxBackoffMs?: number | undefined;
1293
+ factor?: number | undefined;
1294
+ } | undefined;
1295
+ delay?: string | number | undefined;
1296
+ ttl?: string | number | undefined;
1297
+ debounce?: {
1298
+ key: string;
1299
+ delay: string | number;
1300
+ mode?: "leading" | "trailing" | undefined;
1301
+ maxDelay?: string | number | undefined;
1302
+ } | undefined;
1303
+ method?: unknown;
1304
+ accept?: string | undefined;
1305
+ headers?: Record<string, any> | undefined;
1306
+ legacyKeyPrefix?: boolean | undefined;
1307
+ middleware?: string[] | undefined;
1308
+ examples?: {
1309
+ body?: unknown;
1310
+ } | undefined;
1311
+ recordSample?: boolean | undefined;
1312
+ }>, {
1313
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY";
1314
+ accept: string;
1315
+ path?: string | undefined;
1316
+ concurrencyKey?: string | undefined;
1317
+ concurrencyLimit?: number | undefined;
1318
+ concurrencyLeaseMs?: number | undefined;
1319
+ onLimit?: "throw" | "queue" | undefined;
1320
+ concurrencyQueueTimeoutMs?: number | undefined;
1321
+ concurrencyQueueRetry?: {
1322
+ minBackoffMs?: number | undefined;
1323
+ maxBackoffMs?: number | undefined;
1324
+ factor?: number | undefined;
1325
+ } | undefined;
1326
+ delay?: string | number | undefined;
1327
+ ttl?: string | number | undefined;
1328
+ debounce?: {
1329
+ key: string;
1330
+ mode: "leading" | "trailing";
1331
+ delay: string | number;
1332
+ maxDelay?: string | number | undefined;
1333
+ } | undefined;
1334
+ headers?: Record<string, any> | undefined;
1335
+ legacyKeyPrefix?: boolean | undefined;
1336
+ middleware?: string[] | undefined;
1337
+ examples?: {
1338
+ body?: unknown;
1339
+ } | undefined;
1340
+ recordSample?: boolean | undefined;
1341
+ }, {
1342
+ path?: string | undefined;
1343
+ concurrencyKey?: string | undefined;
1344
+ concurrencyLimit?: number | undefined;
1345
+ concurrencyLeaseMs?: number | undefined;
1346
+ onLimit?: "throw" | "queue" | undefined;
1347
+ concurrencyQueueTimeoutMs?: number | undefined;
1348
+ concurrencyQueueRetry?: {
1349
+ minBackoffMs?: number | undefined;
1350
+ maxBackoffMs?: number | undefined;
1351
+ factor?: number | undefined;
1352
+ } | undefined;
1353
+ delay?: string | number | undefined;
1354
+ ttl?: string | number | undefined;
1355
+ debounce?: {
1356
+ key: string;
1357
+ delay: string | number;
1358
+ mode?: "leading" | "trailing" | undefined;
1359
+ maxDelay?: string | number | undefined;
1360
+ } | undefined;
1361
+ method?: unknown;
1362
+ accept?: string | undefined;
1363
+ headers?: Record<string, any> | undefined;
1364
+ legacyKeyPrefix?: boolean | undefined;
1365
+ middleware?: string[] | undefined;
1366
+ examples?: {
1367
+ body?: unknown;
1368
+ } | undefined;
1369
+ recordSample?: boolean | undefined;
1370
+ }>;
1371
+ readonly queue: z.ZodObject<{
1372
+ provider: z.ZodEnum<["kafka", "rabbitmq", "sqs", "redis", "beanstalk", "nats"]>;
1373
+ topic: z.ZodString;
1374
+ subscription: z.ZodOptional<z.ZodString>;
1375
+ consumerGroup: z.ZodOptional<z.ZodString>;
1376
+ ack: z.ZodDefault<z.ZodBoolean>;
1377
+ deadLetterQueue: z.ZodOptional<z.ZodString>;
1378
+ maxRetries: z.ZodDefault<z.ZodNumber>;
1379
+ retryDelay: z.ZodDefault<z.ZodNumber>;
1380
+ batchSize: z.ZodDefault<z.ZodNumber>;
1381
+ concurrency: z.ZodDefault<z.ZodNumber>;
1382
+ }, "strip", z.ZodTypeAny, {
1383
+ provider: "kafka" | "rabbitmq" | "sqs" | "redis" | "beanstalk" | "nats";
1384
+ topic: string;
1385
+ ack: boolean;
1386
+ maxRetries: number;
1387
+ retryDelay: number;
1388
+ batchSize: number;
1389
+ concurrency: number;
1390
+ subscription?: string | undefined;
1391
+ consumerGroup?: string | undefined;
1392
+ deadLetterQueue?: string | undefined;
1393
+ }, {
1394
+ provider: "kafka" | "rabbitmq" | "sqs" | "redis" | "beanstalk" | "nats";
1395
+ topic: string;
1396
+ subscription?: string | undefined;
1397
+ consumerGroup?: string | undefined;
1398
+ ack?: boolean | undefined;
1399
+ deadLetterQueue?: string | undefined;
1400
+ maxRetries?: number | undefined;
1401
+ retryDelay?: number | undefined;
1402
+ batchSize?: number | undefined;
1403
+ concurrency?: number | undefined;
1404
+ }>;
1405
+ readonly pubsub: z.ZodObject<{
1406
+ provider: z.ZodOptional<z.ZodEnum<["nats", "redis-streams", "kafka", "gcp", "aws", "azure"]>>;
1407
+ topic: z.ZodString;
1408
+ subscription: z.ZodOptional<z.ZodString>;
1409
+ consumerGroup: z.ZodOptional<z.ZodString>;
1410
+ durable: z.ZodOptional<z.ZodBoolean>;
1411
+ startFrom: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<"earliest">, z.ZodLiteral<"latest">, z.ZodObject<{
1412
+ seq: z.ZodNumber;
1413
+ }, "strip", z.ZodTypeAny, {
1414
+ seq: number;
1415
+ }, {
1416
+ seq: number;
1417
+ }>, z.ZodObject<{
1418
+ timestamp: z.ZodNumber;
1419
+ }, "strip", z.ZodTypeAny, {
1420
+ timestamp: number;
1421
+ }, {
1422
+ timestamp: number;
1423
+ }>]>>;
1424
+ ack: z.ZodDefault<z.ZodBoolean>;
1425
+ maxMessages: z.ZodDefault<z.ZodNumber>;
1426
+ ackDeadline: z.ZodDefault<z.ZodNumber>;
1427
+ deadLetterTopic: z.ZodOptional<z.ZodString>;
1428
+ filter: z.ZodOptional<z.ZodString>;
1429
+ }, "strip", z.ZodTypeAny, {
1430
+ topic: string;
1431
+ ack: boolean;
1432
+ maxMessages: number;
1433
+ ackDeadline: number;
1434
+ filter?: string | undefined;
1435
+ provider?: "kafka" | "nats" | "redis-streams" | "gcp" | "aws" | "azure" | undefined;
1436
+ subscription?: string | undefined;
1437
+ consumerGroup?: string | undefined;
1438
+ durable?: boolean | undefined;
1439
+ startFrom?: "earliest" | "latest" | {
1440
+ seq: number;
1441
+ } | {
1442
+ timestamp: number;
1443
+ } | undefined;
1444
+ deadLetterTopic?: string | undefined;
1445
+ }, {
1446
+ topic: string;
1447
+ filter?: string | undefined;
1448
+ provider?: "kafka" | "nats" | "redis-streams" | "gcp" | "aws" | "azure" | undefined;
1449
+ subscription?: string | undefined;
1450
+ consumerGroup?: string | undefined;
1451
+ ack?: boolean | undefined;
1452
+ durable?: boolean | undefined;
1453
+ startFrom?: "earliest" | "latest" | {
1454
+ seq: number;
1455
+ } | {
1456
+ timestamp: number;
1457
+ } | undefined;
1458
+ maxMessages?: number | undefined;
1459
+ ackDeadline?: number | undefined;
1460
+ deadLetterTopic?: string | undefined;
1461
+ }>;
1462
+ readonly worker: z.ZodEffects<z.ZodObject<{
1463
+ delay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
1464
+ ttl: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
1465
+ debounce: z.ZodOptional<z.ZodEffects<z.ZodObject<{
1466
+ key: z.ZodString;
1467
+ mode: z.ZodDefault<z.ZodEnum<["leading", "trailing"]>>;
1468
+ delay: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
1469
+ maxDelay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
1470
+ }, "strip", z.ZodTypeAny, {
1471
+ key: string;
1472
+ mode: "leading" | "trailing";
1473
+ delay: string | number;
1474
+ maxDelay?: string | number | undefined;
1475
+ }, {
1476
+ key: string;
1477
+ delay: string | number;
1478
+ mode?: "leading" | "trailing" | undefined;
1479
+ maxDelay?: string | number | undefined;
1480
+ }>, {
1481
+ key: string;
1482
+ mode: "leading" | "trailing";
1483
+ delay: string | number;
1484
+ maxDelay?: string | number | undefined;
1485
+ }, {
1486
+ key: string;
1487
+ delay: string | number;
1488
+ mode?: "leading" | "trailing" | undefined;
1489
+ maxDelay?: string | number | undefined;
1490
+ }>>;
1491
+ concurrencyKey: z.ZodOptional<z.ZodString>;
1492
+ concurrencyLimit: z.ZodOptional<z.ZodNumber>;
1493
+ concurrencyLeaseMs: z.ZodOptional<z.ZodNumber>;
1494
+ onLimit: z.ZodOptional<z.ZodEnum<["throw", "queue"]>>;
1495
+ concurrencyQueueTimeoutMs: z.ZodOptional<z.ZodNumber>;
1496
+ concurrencyQueueRetry: z.ZodOptional<z.ZodObject<{
1497
+ minBackoffMs: z.ZodOptional<z.ZodNumber>;
1498
+ maxBackoffMs: z.ZodOptional<z.ZodNumber>;
1499
+ factor: z.ZodOptional<z.ZodNumber>;
1500
+ }, "strip", z.ZodTypeAny, {
1501
+ minBackoffMs?: number | undefined;
1502
+ maxBackoffMs?: number | undefined;
1503
+ factor?: number | undefined;
1504
+ }, {
1505
+ minBackoffMs?: number | undefined;
1506
+ maxBackoffMs?: number | undefined;
1507
+ factor?: number | undefined;
1508
+ }>>;
1509
+ queue: z.ZodString;
1510
+ provider: z.ZodOptional<z.ZodEnum<["in-memory", "nats", "bullmq", "kafka", "rabbitmq", "sqs", "redis", "pg-boss"]>>;
1511
+ concurrency: z.ZodDefault<z.ZodNumber>;
1512
+ timeout: z.ZodOptional<z.ZodNumber>;
1513
+ retries: z.ZodDefault<z.ZodNumber>;
1514
+ priority: z.ZodDefault<z.ZodNumber>;
1515
+ consumerGroup: z.ZodOptional<z.ZodString>;
1516
+ ack: z.ZodOptional<z.ZodBoolean>;
1517
+ deadLetterQueue: z.ZodOptional<z.ZodString>;
1518
+ fromBeginning: z.ZodOptional<z.ZodBoolean>;
1519
+ }, "strip", z.ZodTypeAny, {
1520
+ queue: string;
1521
+ concurrency: number;
1522
+ retries: number;
1523
+ priority: number;
1524
+ concurrencyKey?: string | undefined;
1525
+ concurrencyLimit?: number | undefined;
1526
+ concurrencyLeaseMs?: number | undefined;
1527
+ onLimit?: "throw" | "queue" | undefined;
1528
+ concurrencyQueueTimeoutMs?: number | undefined;
1529
+ concurrencyQueueRetry?: {
1530
+ minBackoffMs?: number | undefined;
1531
+ maxBackoffMs?: number | undefined;
1532
+ factor?: number | undefined;
1533
+ } | undefined;
1534
+ delay?: string | number | undefined;
1535
+ ttl?: string | number | undefined;
1536
+ debounce?: {
1537
+ key: string;
1538
+ mode: "leading" | "trailing";
1539
+ delay: string | number;
1540
+ maxDelay?: string | number | undefined;
1541
+ } | undefined;
1542
+ provider?: "kafka" | "rabbitmq" | "sqs" | "redis" | "nats" | "in-memory" | "bullmq" | "pg-boss" | undefined;
1543
+ consumerGroup?: string | undefined;
1544
+ ack?: boolean | undefined;
1545
+ deadLetterQueue?: string | undefined;
1546
+ timeout?: number | undefined;
1547
+ fromBeginning?: boolean | undefined;
1548
+ }, {
1549
+ queue: string;
1550
+ concurrencyKey?: string | undefined;
1551
+ concurrencyLimit?: number | undefined;
1552
+ concurrencyLeaseMs?: number | undefined;
1553
+ onLimit?: "throw" | "queue" | undefined;
1554
+ concurrencyQueueTimeoutMs?: number | undefined;
1555
+ concurrencyQueueRetry?: {
1556
+ minBackoffMs?: number | undefined;
1557
+ maxBackoffMs?: number | undefined;
1558
+ factor?: number | undefined;
1559
+ } | undefined;
1560
+ delay?: string | number | undefined;
1561
+ ttl?: string | number | undefined;
1562
+ debounce?: {
1563
+ key: string;
1564
+ delay: string | number;
1565
+ mode?: "leading" | "trailing" | undefined;
1566
+ maxDelay?: string | number | undefined;
1567
+ } | undefined;
1568
+ provider?: "kafka" | "rabbitmq" | "sqs" | "redis" | "nats" | "in-memory" | "bullmq" | "pg-boss" | undefined;
1569
+ consumerGroup?: string | undefined;
1570
+ ack?: boolean | undefined;
1571
+ deadLetterQueue?: string | undefined;
1572
+ concurrency?: number | undefined;
1573
+ timeout?: number | undefined;
1574
+ retries?: number | undefined;
1575
+ priority?: number | undefined;
1576
+ fromBeginning?: boolean | undefined;
1577
+ }>, {
1578
+ queue: string;
1579
+ concurrency: number;
1580
+ retries: number;
1581
+ priority: number;
1582
+ concurrencyKey?: string | undefined;
1583
+ concurrencyLimit?: number | undefined;
1584
+ concurrencyLeaseMs?: number | undefined;
1585
+ onLimit?: "throw" | "queue" | undefined;
1586
+ concurrencyQueueTimeoutMs?: number | undefined;
1587
+ concurrencyQueueRetry?: {
1588
+ minBackoffMs?: number | undefined;
1589
+ maxBackoffMs?: number | undefined;
1590
+ factor?: number | undefined;
1591
+ } | undefined;
1592
+ delay?: string | number | undefined;
1593
+ ttl?: string | number | undefined;
1594
+ debounce?: {
1595
+ key: string;
1596
+ mode: "leading" | "trailing";
1597
+ delay: string | number;
1598
+ maxDelay?: string | number | undefined;
1599
+ } | undefined;
1600
+ provider?: "kafka" | "rabbitmq" | "sqs" | "redis" | "nats" | "in-memory" | "bullmq" | "pg-boss" | undefined;
1601
+ consumerGroup?: string | undefined;
1602
+ ack?: boolean | undefined;
1603
+ deadLetterQueue?: string | undefined;
1604
+ timeout?: number | undefined;
1605
+ fromBeginning?: boolean | undefined;
1606
+ }, {
1607
+ queue: string;
1608
+ concurrencyKey?: string | undefined;
1609
+ concurrencyLimit?: number | undefined;
1610
+ concurrencyLeaseMs?: number | undefined;
1611
+ onLimit?: "throw" | "queue" | undefined;
1612
+ concurrencyQueueTimeoutMs?: number | undefined;
1613
+ concurrencyQueueRetry?: {
1614
+ minBackoffMs?: number | undefined;
1615
+ maxBackoffMs?: number | undefined;
1616
+ factor?: number | undefined;
1617
+ } | undefined;
1618
+ delay?: string | number | undefined;
1619
+ ttl?: string | number | undefined;
1620
+ debounce?: {
1621
+ key: string;
1622
+ delay: string | number;
1623
+ mode?: "leading" | "trailing" | undefined;
1624
+ maxDelay?: string | number | undefined;
1625
+ } | undefined;
1626
+ provider?: "kafka" | "rabbitmq" | "sqs" | "redis" | "nats" | "in-memory" | "bullmq" | "pg-boss" | undefined;
1627
+ consumerGroup?: string | undefined;
1628
+ ack?: boolean | undefined;
1629
+ deadLetterQueue?: string | undefined;
1630
+ concurrency?: number | undefined;
1631
+ timeout?: number | undefined;
1632
+ retries?: number | undefined;
1633
+ priority?: number | undefined;
1634
+ fromBeginning?: boolean | undefined;
1635
+ }>;
1636
+ readonly cron: z.ZodObject<{
1637
+ schedule: z.ZodString;
1638
+ timezone: z.ZodDefault<z.ZodString>;
1639
+ overlap: z.ZodDefault<z.ZodBoolean>;
1640
+ }, "strip", z.ZodTypeAny, {
1641
+ schedule: string;
1642
+ timezone: string;
1643
+ overlap: boolean;
1644
+ }, {
1645
+ schedule: string;
1646
+ timezone?: string | undefined;
1647
+ overlap?: boolean | undefined;
1648
+ }>;
1649
+ readonly webhook: z.ZodObject<{
1650
+ provider: z.ZodOptional<z.ZodEnum<["github", "stripe", "slack", "shopify", "svix"]>>;
1651
+ path: z.ZodOptional<z.ZodString>;
1652
+ events: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1653
+ secretEnv: z.ZodOptional<z.ZodString>;
1654
+ signature: z.ZodOptional<z.ZodObject<{
1655
+ scheme: z.ZodDefault<z.ZodEnum<["hmac-sha256", "hmac-sha1", "hmac-sha512"]>>;
1656
+ header: z.ZodString;
1657
+ format: z.ZodDefault<z.ZodString>;
1658
+ secretEnv: z.ZodString;
1659
+ tolerance: z.ZodDefault<z.ZodNumber>;
1660
+ timestampHeader: z.ZodOptional<z.ZodString>;
1661
+ }, "strip", z.ZodTypeAny, {
1662
+ scheme: "hmac-sha256" | "hmac-sha1" | "hmac-sha512";
1663
+ header: string;
1664
+ format: string;
1665
+ secretEnv: string;
1666
+ tolerance: number;
1667
+ timestampHeader?: string | undefined;
1668
+ }, {
1669
+ header: string;
1670
+ secretEnv: string;
1671
+ scheme?: "hmac-sha256" | "hmac-sha1" | "hmac-sha512" | undefined;
1672
+ format?: string | undefined;
1673
+ tolerance?: number | undefined;
1674
+ timestampHeader?: string | undefined;
1675
+ }>>;
1676
+ tolerance: z.ZodOptional<z.ZodNumber>;
1677
+ idempotencyKey: z.ZodOptional<z.ZodString>;
1678
+ namespace: z.ZodOptional<z.ZodString>;
1679
+ middleware: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1680
+ }, "strip", z.ZodTypeAny, {
1681
+ path?: string | undefined;
1682
+ middleware?: string[] | undefined;
1683
+ provider?: "github" | "stripe" | "slack" | "shopify" | "svix" | undefined;
1684
+ secretEnv?: string | undefined;
1685
+ tolerance?: number | undefined;
1686
+ events?: string[] | undefined;
1687
+ signature?: {
1688
+ scheme: "hmac-sha256" | "hmac-sha1" | "hmac-sha512";
1689
+ header: string;
1690
+ format: string;
1691
+ secretEnv: string;
1692
+ tolerance: number;
1693
+ timestampHeader?: string | undefined;
1694
+ } | undefined;
1695
+ idempotencyKey?: string | undefined;
1696
+ namespace?: string | undefined;
1697
+ }, {
1698
+ path?: string | undefined;
1699
+ middleware?: string[] | undefined;
1700
+ provider?: "github" | "stripe" | "slack" | "shopify" | "svix" | undefined;
1701
+ secretEnv?: string | undefined;
1702
+ tolerance?: number | undefined;
1703
+ events?: string[] | undefined;
1704
+ signature?: {
1705
+ header: string;
1706
+ secretEnv: string;
1707
+ scheme?: "hmac-sha256" | "hmac-sha1" | "hmac-sha512" | undefined;
1708
+ format?: string | undefined;
1709
+ tolerance?: number | undefined;
1710
+ timestampHeader?: string | undefined;
1711
+ } | undefined;
1712
+ idempotencyKey?: string | undefined;
1713
+ namespace?: string | undefined;
1714
+ }>;
1715
+ readonly sse: z.ZodObject<{
1716
+ events: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1717
+ channels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1718
+ path: z.ZodOptional<z.ZodString>;
1719
+ maxConnections: z.ZodDefault<z.ZodNumber>;
1720
+ heartbeatInterval: z.ZodDefault<z.ZodNumber>;
1721
+ retryInterval: z.ZodDefault<z.ZodNumber>;
1722
+ }, "strip", z.ZodTypeAny, {
1723
+ events: string[];
1724
+ maxConnections: number;
1725
+ heartbeatInterval: number;
1726
+ retryInterval: number;
1727
+ path?: string | undefined;
1728
+ channels?: string[] | undefined;
1729
+ }, {
1730
+ path?: string | undefined;
1731
+ events?: string[] | undefined;
1732
+ maxConnections?: number | undefined;
1733
+ heartbeatInterval?: number | undefined;
1734
+ channels?: string[] | undefined;
1735
+ retryInterval?: number | undefined;
1736
+ }>;
1737
+ readonly websocket: z.ZodObject<{
1738
+ events: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1739
+ rooms: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1740
+ path: z.ZodOptional<z.ZodString>;
1741
+ maxConnections: z.ZodDefault<z.ZodNumber>;
1742
+ heartbeatInterval: z.ZodDefault<z.ZodNumber>;
1743
+ messageRateLimit: z.ZodDefault<z.ZodNumber>;
1744
+ }, "strip", z.ZodTypeAny, {
1745
+ events: string[];
1746
+ maxConnections: number;
1747
+ heartbeatInterval: number;
1748
+ messageRateLimit: number;
1749
+ path?: string | undefined;
1750
+ rooms?: string[] | undefined;
1751
+ }, {
1752
+ path?: string | undefined;
1753
+ events?: string[] | undefined;
1754
+ rooms?: string[] | undefined;
1755
+ maxConnections?: number | undefined;
1756
+ heartbeatInterval?: number | undefined;
1757
+ messageRateLimit?: number | undefined;
1758
+ }>;
1759
+ readonly grpc: null;
1760
+ readonly manual: null;
1761
+ };
1762
+ /** Union of every valid trigger configuration (typed). */
1763
+ export type AnyTriggerOpts = HttpTriggerOpts | QueueTriggerOpts | PubSubTriggerOpts | WorkerTriggerOpts | CronTriggerOpts | WebhookTriggerOpts | WebSocketTriggerOpts | SSETriggerOpts | Record<string, unknown>;
1764
+ /**
1765
+ * Validate a trigger configuration against the schema for the given trigger
1766
+ * kind. When the trigger has a schema, returns the parsed config (with
1767
+ * defaults applied). When the trigger has no schema (`grpc`, `manual`),
1768
+ * returns the input config (or an empty object when `undefined`).
1769
+ *
1770
+ * Throws when the trigger requires a schema and the config is missing or
1771
+ * invalid. The thrown error is either a `ZodError` (for shape violations) or
1772
+ * a regular `Error` (when config is missing entirely).
1773
+ *
1774
+ * @example
1775
+ * const cfg = validateTriggerConfig("cron", { schedule: "0 * * * *" });
1776
+ * // cfg.timezone === "UTC" (default applied)
1777
+ *
1778
+ * @example
1779
+ * validateTriggerConfig("cron", undefined);
1780
+ * // throws: 'Trigger "cron" requires a configuration object.'
1781
+ */
1782
+ export declare function validateTriggerConfig(name: TriggersEnum, config: unknown): unknown;