@blokjs/helper 0.2.0 → 0.4.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.
@@ -1,41 +1,620 @@
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>;
7
353
  }, "strip", z.ZodTypeAny, {
8
- method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "ANY";
354
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY";
355
+ accept: string;
356
+ path?: string | undefined;
357
+ concurrencyKey?: string | undefined;
358
+ concurrencyLimit?: number | undefined;
359
+ concurrencyLeaseMs?: number | undefined;
360
+ onLimit?: "throw" | "queue" | undefined;
361
+ concurrencyQueueTimeoutMs?: number | undefined;
362
+ concurrencyQueueRetry?: {
363
+ minBackoffMs?: number | undefined;
364
+ maxBackoffMs?: number | undefined;
365
+ factor?: number | undefined;
366
+ } | undefined;
367
+ delay?: string | number | undefined;
368
+ ttl?: string | number | undefined;
369
+ debounce?: {
370
+ key: string;
371
+ mode: "leading" | "trailing";
372
+ delay: string | number;
373
+ maxDelay?: string | number | undefined;
374
+ } | undefined;
375
+ headers?: Record<string, any> | undefined;
376
+ legacyKeyPrefix?: boolean | undefined;
377
+ }, {
378
+ path?: string | undefined;
379
+ concurrencyKey?: string | undefined;
380
+ concurrencyLimit?: number | undefined;
381
+ concurrencyLeaseMs?: number | undefined;
382
+ onLimit?: "throw" | "queue" | undefined;
383
+ concurrencyQueueTimeoutMs?: number | undefined;
384
+ concurrencyQueueRetry?: {
385
+ minBackoffMs?: number | undefined;
386
+ maxBackoffMs?: number | undefined;
387
+ factor?: number | undefined;
388
+ } | undefined;
389
+ delay?: string | number | undefined;
390
+ ttl?: string | number | undefined;
391
+ debounce?: {
392
+ key: string;
393
+ delay: string | number;
394
+ mode?: "leading" | "trailing" | undefined;
395
+ maxDelay?: string | number | undefined;
396
+ } | undefined;
397
+ method?: unknown;
398
+ accept?: string | undefined;
399
+ headers?: Record<string, any> | undefined;
400
+ legacyKeyPrefix?: boolean | undefined;
401
+ }>, {
402
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY";
9
403
  accept: string;
10
404
  path?: string | undefined;
405
+ concurrencyKey?: string | undefined;
406
+ concurrencyLimit?: number | undefined;
407
+ concurrencyLeaseMs?: number | undefined;
408
+ onLimit?: "throw" | "queue" | undefined;
409
+ concurrencyQueueTimeoutMs?: number | undefined;
410
+ concurrencyQueueRetry?: {
411
+ minBackoffMs?: number | undefined;
412
+ maxBackoffMs?: number | undefined;
413
+ factor?: number | undefined;
414
+ } | undefined;
415
+ delay?: string | number | undefined;
416
+ ttl?: string | number | undefined;
417
+ debounce?: {
418
+ key: string;
419
+ mode: "leading" | "trailing";
420
+ delay: string | number;
421
+ maxDelay?: string | number | undefined;
422
+ } | undefined;
11
423
  headers?: Record<string, any> | undefined;
424
+ legacyKeyPrefix?: boolean | undefined;
12
425
  }, {
13
- method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "ANY";
14
426
  path?: string | undefined;
427
+ concurrencyKey?: string | undefined;
428
+ concurrencyLimit?: number | undefined;
429
+ concurrencyLeaseMs?: number | undefined;
430
+ onLimit?: "throw" | "queue" | undefined;
431
+ concurrencyQueueTimeoutMs?: number | undefined;
432
+ concurrencyQueueRetry?: {
433
+ minBackoffMs?: number | undefined;
434
+ maxBackoffMs?: number | undefined;
435
+ factor?: number | undefined;
436
+ } | undefined;
437
+ delay?: string | number | undefined;
438
+ ttl?: string | number | undefined;
439
+ debounce?: {
440
+ key: string;
441
+ delay: string | number;
442
+ mode?: "leading" | "trailing" | undefined;
443
+ maxDelay?: string | number | undefined;
444
+ } | undefined;
445
+ method?: unknown;
15
446
  accept?: string | undefined;
16
447
  headers?: Record<string, any> | undefined;
448
+ legacyKeyPrefix?: boolean | undefined;
17
449
  }>;
18
- export declare const TriggerOptsSchema: z.ZodObject<{
19
- method: z.ZodEnum<["GET", "POST", "PUT", "DELETE", "PATCH", "ANY"]>;
450
+ /** Configuration for an HTTP trigger. Use with `addTrigger("http", ...)`. */
451
+ export type HttpTriggerOpts = z.input<typeof HttpTriggerOptsSchema>;
452
+ /**
453
+ * Legacy alias for {@link HttpTriggerOptsSchema}. Prefer the explicit name.
454
+ *
455
+ * @deprecated Use {@link HttpTriggerOptsSchema} directly. Will be removed in
456
+ * the next minor version.
457
+ */
458
+ export declare const TriggerOptsSchema: z.ZodEffects<z.ZodObject<{
459
+ delay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
460
+ ttl: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
461
+ debounce: z.ZodOptional<z.ZodEffects<z.ZodObject<{
462
+ key: z.ZodString;
463
+ mode: z.ZodDefault<z.ZodEnum<["leading", "trailing"]>>;
464
+ delay: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
465
+ maxDelay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
466
+ }, "strip", z.ZodTypeAny, {
467
+ key: string;
468
+ mode: "leading" | "trailing";
469
+ delay: string | number;
470
+ maxDelay?: string | number | undefined;
471
+ }, {
472
+ key: string;
473
+ delay: string | number;
474
+ mode?: "leading" | "trailing" | undefined;
475
+ maxDelay?: string | number | undefined;
476
+ }>, {
477
+ key: string;
478
+ mode: "leading" | "trailing";
479
+ delay: string | number;
480
+ maxDelay?: string | number | undefined;
481
+ }, {
482
+ key: string;
483
+ delay: string | number;
484
+ mode?: "leading" | "trailing" | undefined;
485
+ maxDelay?: string | number | undefined;
486
+ }>>;
487
+ concurrencyKey: z.ZodOptional<z.ZodString>;
488
+ concurrencyLimit: z.ZodOptional<z.ZodNumber>;
489
+ concurrencyLeaseMs: z.ZodOptional<z.ZodNumber>;
490
+ onLimit: z.ZodOptional<z.ZodEnum<["throw", "queue"]>>;
491
+ concurrencyQueueTimeoutMs: z.ZodOptional<z.ZodNumber>;
492
+ concurrencyQueueRetry: z.ZodOptional<z.ZodObject<{
493
+ minBackoffMs: z.ZodOptional<z.ZodNumber>;
494
+ maxBackoffMs: z.ZodOptional<z.ZodNumber>;
495
+ factor: z.ZodOptional<z.ZodNumber>;
496
+ }, "strip", z.ZodTypeAny, {
497
+ minBackoffMs?: number | undefined;
498
+ maxBackoffMs?: number | undefined;
499
+ factor?: number | undefined;
500
+ }, {
501
+ minBackoffMs?: number | undefined;
502
+ maxBackoffMs?: number | undefined;
503
+ factor?: number | undefined;
504
+ }>>;
505
+ method: z.ZodEffects<z.ZodEnum<["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "ANY"]>, "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY", unknown>;
20
506
  path: z.ZodOptional<z.ZodString>;
21
507
  accept: z.ZodDefault<z.ZodString>;
22
508
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
509
+ legacyKeyPrefix: z.ZodOptional<z.ZodBoolean>;
23
510
  }, "strip", z.ZodTypeAny, {
24
- method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "ANY";
511
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY";
25
512
  accept: string;
26
513
  path?: string | undefined;
514
+ concurrencyKey?: string | undefined;
515
+ concurrencyLimit?: number | undefined;
516
+ concurrencyLeaseMs?: number | undefined;
517
+ onLimit?: "throw" | "queue" | undefined;
518
+ concurrencyQueueTimeoutMs?: number | undefined;
519
+ concurrencyQueueRetry?: {
520
+ minBackoffMs?: number | undefined;
521
+ maxBackoffMs?: number | undefined;
522
+ factor?: number | undefined;
523
+ } | undefined;
524
+ delay?: string | number | undefined;
525
+ ttl?: string | number | undefined;
526
+ debounce?: {
527
+ key: string;
528
+ mode: "leading" | "trailing";
529
+ delay: string | number;
530
+ maxDelay?: string | number | undefined;
531
+ } | undefined;
27
532
  headers?: Record<string, any> | undefined;
533
+ legacyKeyPrefix?: boolean | undefined;
28
534
  }, {
29
- method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "ANY";
30
535
  path?: string | undefined;
536
+ concurrencyKey?: string | undefined;
537
+ concurrencyLimit?: number | undefined;
538
+ concurrencyLeaseMs?: number | undefined;
539
+ onLimit?: "throw" | "queue" | undefined;
540
+ concurrencyQueueTimeoutMs?: number | undefined;
541
+ concurrencyQueueRetry?: {
542
+ minBackoffMs?: number | undefined;
543
+ maxBackoffMs?: number | undefined;
544
+ factor?: number | undefined;
545
+ } | undefined;
546
+ delay?: string | number | undefined;
547
+ ttl?: string | number | undefined;
548
+ debounce?: {
549
+ key: string;
550
+ delay: string | number;
551
+ mode?: "leading" | "trailing" | undefined;
552
+ maxDelay?: string | number | undefined;
553
+ } | undefined;
554
+ method?: unknown;
31
555
  accept?: string | undefined;
32
556
  headers?: Record<string, any> | undefined;
557
+ legacyKeyPrefix?: boolean | undefined;
558
+ }>, {
559
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY";
560
+ accept: string;
561
+ path?: string | undefined;
562
+ concurrencyKey?: string | undefined;
563
+ concurrencyLimit?: number | undefined;
564
+ concurrencyLeaseMs?: number | undefined;
565
+ onLimit?: "throw" | "queue" | undefined;
566
+ concurrencyQueueTimeoutMs?: number | undefined;
567
+ concurrencyQueueRetry?: {
568
+ minBackoffMs?: number | undefined;
569
+ maxBackoffMs?: number | undefined;
570
+ factor?: number | undefined;
571
+ } | undefined;
572
+ delay?: string | number | undefined;
573
+ ttl?: string | number | undefined;
574
+ debounce?: {
575
+ key: string;
576
+ mode: "leading" | "trailing";
577
+ delay: string | number;
578
+ maxDelay?: string | number | undefined;
579
+ } | undefined;
580
+ headers?: Record<string, any> | undefined;
581
+ legacyKeyPrefix?: boolean | undefined;
582
+ }, {
583
+ path?: string | undefined;
584
+ concurrencyKey?: string | undefined;
585
+ concurrencyLimit?: number | undefined;
586
+ concurrencyLeaseMs?: number | undefined;
587
+ onLimit?: "throw" | "queue" | undefined;
588
+ concurrencyQueueTimeoutMs?: number | undefined;
589
+ concurrencyQueueRetry?: {
590
+ minBackoffMs?: number | undefined;
591
+ maxBackoffMs?: number | undefined;
592
+ factor?: number | undefined;
593
+ } | undefined;
594
+ delay?: string | number | undefined;
595
+ ttl?: string | number | undefined;
596
+ debounce?: {
597
+ key: string;
598
+ delay: string | number;
599
+ mode?: "leading" | "trailing" | undefined;
600
+ maxDelay?: string | number | undefined;
601
+ } | undefined;
602
+ method?: unknown;
603
+ accept?: string | undefined;
604
+ headers?: Record<string, any> | undefined;
605
+ legacyKeyPrefix?: boolean | undefined;
33
606
  }>;
34
- export type TriggerOpts = z.input<typeof TriggerOptsSchema>;
35
- export declare const QueueProviderSchema: z.ZodEnum<["kafka", "rabbitmq", "sqs", "redis", "beanstalk"]>;
607
+ /**
608
+ * Legacy alias for {@link HttpTriggerOpts}. Prefer the explicit name.
609
+ *
610
+ * @deprecated Use {@link HttpTriggerOpts} directly. Will be removed in the
611
+ * next minor version.
612
+ */
613
+ export type TriggerOpts = HttpTriggerOpts;
614
+ export declare const QueueProviderSchema: z.ZodEnum<["kafka", "rabbitmq", "sqs", "redis", "beanstalk", "nats"]>;
36
615
  export type QueueProvider = z.infer<typeof QueueProviderSchema>;
37
616
  export declare const QueueTriggerOptsSchema: z.ZodObject<{
38
- provider: z.ZodEnum<["kafka", "rabbitmq", "sqs", "redis", "beanstalk"]>;
617
+ provider: z.ZodEnum<["kafka", "rabbitmq", "sqs", "redis", "beanstalk", "nats"]>;
39
618
  topic: z.ZodString;
40
619
  subscription: z.ZodOptional<z.ZodString>;
41
620
  consumerGroup: z.ZodOptional<z.ZodString>;
@@ -46,7 +625,7 @@ export declare const QueueTriggerOptsSchema: z.ZodObject<{
46
625
  batchSize: z.ZodDefault<z.ZodNumber>;
47
626
  concurrency: z.ZodDefault<z.ZodNumber>;
48
627
  }, "strip", z.ZodTypeAny, {
49
- provider: "kafka" | "rabbitmq" | "sqs" | "redis" | "beanstalk";
628
+ provider: "kafka" | "rabbitmq" | "sqs" | "redis" | "beanstalk" | "nats";
50
629
  topic: string;
51
630
  ack: boolean;
52
631
  maxRetries: number;
@@ -57,7 +636,7 @@ export declare const QueueTriggerOptsSchema: z.ZodObject<{
57
636
  consumerGroup?: string | undefined;
58
637
  deadLetterQueue?: string | undefined;
59
638
  }, {
60
- provider: "kafka" | "rabbitmq" | "sqs" | "redis" | "beanstalk";
639
+ provider: "kafka" | "rabbitmq" | "sqs" | "redis" | "beanstalk" | "nats";
61
640
  topic: string;
62
641
  subscription?: string | undefined;
63
642
  consumerGroup?: string | undefined;
@@ -100,27 +679,154 @@ export declare const PubSubTriggerOptsSchema: z.ZodObject<{
100
679
  deadLetterTopic?: string | undefined;
101
680
  }>;
102
681
  export type PubSubTriggerOpts = z.input<typeof PubSubTriggerOptsSchema>;
103
- export declare const WorkerTriggerOptsSchema: z.ZodObject<{
682
+ export declare const WorkerTriggerOptsSchema: z.ZodEffects<z.ZodObject<{
683
+ delay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
684
+ ttl: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
685
+ debounce: z.ZodOptional<z.ZodEffects<z.ZodObject<{
686
+ key: z.ZodString;
687
+ mode: z.ZodDefault<z.ZodEnum<["leading", "trailing"]>>;
688
+ delay: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
689
+ maxDelay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
690
+ }, "strip", z.ZodTypeAny, {
691
+ key: string;
692
+ mode: "leading" | "trailing";
693
+ delay: string | number;
694
+ maxDelay?: string | number | undefined;
695
+ }, {
696
+ key: string;
697
+ delay: string | number;
698
+ mode?: "leading" | "trailing" | undefined;
699
+ maxDelay?: string | number | undefined;
700
+ }>, {
701
+ key: string;
702
+ mode: "leading" | "trailing";
703
+ delay: string | number;
704
+ maxDelay?: string | number | undefined;
705
+ }, {
706
+ key: string;
707
+ delay: string | number;
708
+ mode?: "leading" | "trailing" | undefined;
709
+ maxDelay?: string | number | undefined;
710
+ }>>;
711
+ concurrencyKey: z.ZodOptional<z.ZodString>;
712
+ concurrencyLimit: z.ZodOptional<z.ZodNumber>;
713
+ concurrencyLeaseMs: z.ZodOptional<z.ZodNumber>;
714
+ onLimit: z.ZodOptional<z.ZodEnum<["throw", "queue"]>>;
715
+ concurrencyQueueTimeoutMs: z.ZodOptional<z.ZodNumber>;
716
+ concurrencyQueueRetry: z.ZodOptional<z.ZodObject<{
717
+ minBackoffMs: z.ZodOptional<z.ZodNumber>;
718
+ maxBackoffMs: z.ZodOptional<z.ZodNumber>;
719
+ factor: z.ZodOptional<z.ZodNumber>;
720
+ }, "strip", z.ZodTypeAny, {
721
+ minBackoffMs?: number | undefined;
722
+ maxBackoffMs?: number | undefined;
723
+ factor?: number | undefined;
724
+ }, {
725
+ minBackoffMs?: number | undefined;
726
+ maxBackoffMs?: number | undefined;
727
+ factor?: number | undefined;
728
+ }>>;
104
729
  queue: z.ZodString;
105
730
  concurrency: z.ZodDefault<z.ZodNumber>;
106
731
  timeout: z.ZodOptional<z.ZodNumber>;
107
732
  retries: z.ZodDefault<z.ZodNumber>;
108
733
  priority: z.ZodDefault<z.ZodNumber>;
109
- delay: z.ZodOptional<z.ZodNumber>;
110
734
  }, "strip", z.ZodTypeAny, {
735
+ queue: string;
111
736
  concurrency: number;
737
+ retries: number;
738
+ priority: number;
739
+ concurrencyKey?: string | undefined;
740
+ concurrencyLimit?: number | undefined;
741
+ concurrencyLeaseMs?: number | undefined;
742
+ onLimit?: "throw" | "queue" | undefined;
743
+ concurrencyQueueTimeoutMs?: number | undefined;
744
+ concurrencyQueueRetry?: {
745
+ minBackoffMs?: number | undefined;
746
+ maxBackoffMs?: number | undefined;
747
+ factor?: number | undefined;
748
+ } | undefined;
749
+ delay?: string | number | undefined;
750
+ ttl?: string | number | undefined;
751
+ debounce?: {
752
+ key: string;
753
+ mode: "leading" | "trailing";
754
+ delay: string | number;
755
+ maxDelay?: string | number | undefined;
756
+ } | undefined;
757
+ timeout?: number | undefined;
758
+ }, {
112
759
  queue: string;
760
+ concurrencyKey?: string | undefined;
761
+ concurrencyLimit?: number | undefined;
762
+ concurrencyLeaseMs?: number | undefined;
763
+ onLimit?: "throw" | "queue" | undefined;
764
+ concurrencyQueueTimeoutMs?: number | undefined;
765
+ concurrencyQueueRetry?: {
766
+ minBackoffMs?: number | undefined;
767
+ maxBackoffMs?: number | undefined;
768
+ factor?: number | undefined;
769
+ } | undefined;
770
+ delay?: string | number | undefined;
771
+ ttl?: string | number | undefined;
772
+ debounce?: {
773
+ key: string;
774
+ delay: string | number;
775
+ mode?: "leading" | "trailing" | undefined;
776
+ maxDelay?: string | number | undefined;
777
+ } | undefined;
778
+ concurrency?: number | undefined;
779
+ timeout?: number | undefined;
780
+ retries?: number | undefined;
781
+ priority?: number | undefined;
782
+ }>, {
783
+ queue: string;
784
+ concurrency: number;
113
785
  retries: number;
114
786
  priority: number;
787
+ concurrencyKey?: string | undefined;
788
+ concurrencyLimit?: number | undefined;
789
+ concurrencyLeaseMs?: number | undefined;
790
+ onLimit?: "throw" | "queue" | undefined;
791
+ concurrencyQueueTimeoutMs?: number | undefined;
792
+ concurrencyQueueRetry?: {
793
+ minBackoffMs?: number | undefined;
794
+ maxBackoffMs?: number | undefined;
795
+ factor?: number | undefined;
796
+ } | undefined;
797
+ delay?: string | number | undefined;
798
+ ttl?: string | number | undefined;
799
+ debounce?: {
800
+ key: string;
801
+ mode: "leading" | "trailing";
802
+ delay: string | number;
803
+ maxDelay?: string | number | undefined;
804
+ } | undefined;
115
805
  timeout?: number | undefined;
116
- delay?: number | undefined;
117
806
  }, {
118
807
  queue: string;
808
+ concurrencyKey?: string | undefined;
809
+ concurrencyLimit?: number | undefined;
810
+ concurrencyLeaseMs?: number | undefined;
811
+ onLimit?: "throw" | "queue" | undefined;
812
+ concurrencyQueueTimeoutMs?: number | undefined;
813
+ concurrencyQueueRetry?: {
814
+ minBackoffMs?: number | undefined;
815
+ maxBackoffMs?: number | undefined;
816
+ factor?: number | undefined;
817
+ } | undefined;
818
+ delay?: string | number | undefined;
819
+ ttl?: string | number | undefined;
820
+ debounce?: {
821
+ key: string;
822
+ delay: string | number;
823
+ mode?: "leading" | "trailing" | undefined;
824
+ maxDelay?: string | number | undefined;
825
+ } | undefined;
119
826
  concurrency?: number | undefined;
120
827
  timeout?: number | undefined;
121
828
  retries?: number | undefined;
122
829
  priority?: number | undefined;
123
- delay?: number | undefined;
124
830
  }>;
125
831
  export type WorkerTriggerOpts = z.input<typeof WorkerTriggerOptsSchema>;
126
832
  export declare const CronTriggerOptsSchema: z.ZodObject<{
@@ -200,10 +906,17 @@ export declare const SSETriggerOptsSchema: z.ZodObject<{
200
906
  retryInterval?: number | undefined;
201
907
  }>;
202
908
  export type SSETriggerOpts = z.input<typeof SSETriggerOptsSchema>;
909
+ /** All trigger names supported by Blok. */
203
910
  export declare const TriggersSchema: z.ZodEnum<["http", "grpc", "manual", "cron", "queue", "pubsub", "worker", "webhook", "sse", "websocket"]>;
204
911
  export type TriggersEnum = z.infer<typeof TriggersSchema>;
912
+ /**
913
+ * Map of trigger name → its config type.
914
+ *
915
+ * Used by {@link Trigger.addTrigger} overloads to constrain the `config`
916
+ * argument's shape for each trigger kind.
917
+ */
205
918
  export type TriggerConfigMap = {
206
- http: TriggerOpts;
919
+ http: HttpTriggerOpts;
207
920
  grpc: Record<string, unknown>;
208
921
  manual: Record<string, unknown>;
209
922
  cron: CronTriggerOpts;
@@ -214,4 +927,468 @@ export type TriggerConfigMap = {
214
927
  sse: SSETriggerOpts;
215
928
  websocket: WebSocketTriggerOpts;
216
929
  };
217
- export type AnyTriggerOpts = TriggerOpts | QueueTriggerOpts | PubSubTriggerOpts | WorkerTriggerOpts | CronTriggerOpts | WebhookTriggerOpts | WebSocketTriggerOpts | SSETriggerOpts | Record<string, unknown>;
930
+ /**
931
+ * Map of trigger name → validation schema. `null` means the trigger does not
932
+ * have a required configuration shape (currently `grpc` and `manual`).
933
+ *
934
+ * Single source of truth for runtime trigger-config validation. Used by
935
+ * {@link validateTriggerConfig}.
936
+ */
937
+ export declare const TRIGGER_SCHEMAS: {
938
+ readonly http: z.ZodEffects<z.ZodObject<{
939
+ delay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
940
+ ttl: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
941
+ debounce: z.ZodOptional<z.ZodEffects<z.ZodObject<{
942
+ key: z.ZodString;
943
+ mode: z.ZodDefault<z.ZodEnum<["leading", "trailing"]>>;
944
+ delay: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
945
+ maxDelay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
946
+ }, "strip", z.ZodTypeAny, {
947
+ key: string;
948
+ mode: "leading" | "trailing";
949
+ delay: string | number;
950
+ maxDelay?: string | number | undefined;
951
+ }, {
952
+ key: string;
953
+ delay: string | number;
954
+ mode?: "leading" | "trailing" | undefined;
955
+ maxDelay?: string | number | undefined;
956
+ }>, {
957
+ key: string;
958
+ mode: "leading" | "trailing";
959
+ delay: string | number;
960
+ maxDelay?: string | number | undefined;
961
+ }, {
962
+ key: string;
963
+ delay: string | number;
964
+ mode?: "leading" | "trailing" | undefined;
965
+ maxDelay?: string | number | undefined;
966
+ }>>;
967
+ concurrencyKey: z.ZodOptional<z.ZodString>;
968
+ concurrencyLimit: z.ZodOptional<z.ZodNumber>;
969
+ concurrencyLeaseMs: z.ZodOptional<z.ZodNumber>;
970
+ onLimit: z.ZodOptional<z.ZodEnum<["throw", "queue"]>>;
971
+ concurrencyQueueTimeoutMs: z.ZodOptional<z.ZodNumber>;
972
+ concurrencyQueueRetry: z.ZodOptional<z.ZodObject<{
973
+ minBackoffMs: z.ZodOptional<z.ZodNumber>;
974
+ maxBackoffMs: z.ZodOptional<z.ZodNumber>;
975
+ factor: z.ZodOptional<z.ZodNumber>;
976
+ }, "strip", z.ZodTypeAny, {
977
+ minBackoffMs?: number | undefined;
978
+ maxBackoffMs?: number | undefined;
979
+ factor?: number | undefined;
980
+ }, {
981
+ minBackoffMs?: number | undefined;
982
+ maxBackoffMs?: number | undefined;
983
+ factor?: number | undefined;
984
+ }>>;
985
+ method: z.ZodEffects<z.ZodEnum<["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "ANY"]>, "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY", unknown>;
986
+ path: z.ZodOptional<z.ZodString>;
987
+ accept: z.ZodDefault<z.ZodString>;
988
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
989
+ legacyKeyPrefix: z.ZodOptional<z.ZodBoolean>;
990
+ }, "strip", z.ZodTypeAny, {
991
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY";
992
+ accept: string;
993
+ path?: string | undefined;
994
+ concurrencyKey?: string | undefined;
995
+ concurrencyLimit?: number | undefined;
996
+ concurrencyLeaseMs?: number | undefined;
997
+ onLimit?: "throw" | "queue" | undefined;
998
+ concurrencyQueueTimeoutMs?: number | undefined;
999
+ concurrencyQueueRetry?: {
1000
+ minBackoffMs?: number | undefined;
1001
+ maxBackoffMs?: number | undefined;
1002
+ factor?: number | undefined;
1003
+ } | undefined;
1004
+ delay?: string | number | undefined;
1005
+ ttl?: string | number | undefined;
1006
+ debounce?: {
1007
+ key: string;
1008
+ mode: "leading" | "trailing";
1009
+ delay: string | number;
1010
+ maxDelay?: string | number | undefined;
1011
+ } | undefined;
1012
+ headers?: Record<string, any> | undefined;
1013
+ legacyKeyPrefix?: boolean | undefined;
1014
+ }, {
1015
+ path?: string | undefined;
1016
+ concurrencyKey?: string | undefined;
1017
+ concurrencyLimit?: number | undefined;
1018
+ concurrencyLeaseMs?: number | undefined;
1019
+ onLimit?: "throw" | "queue" | undefined;
1020
+ concurrencyQueueTimeoutMs?: number | undefined;
1021
+ concurrencyQueueRetry?: {
1022
+ minBackoffMs?: number | undefined;
1023
+ maxBackoffMs?: number | undefined;
1024
+ factor?: number | undefined;
1025
+ } | undefined;
1026
+ delay?: string | number | undefined;
1027
+ ttl?: string | number | undefined;
1028
+ debounce?: {
1029
+ key: string;
1030
+ delay: string | number;
1031
+ mode?: "leading" | "trailing" | undefined;
1032
+ maxDelay?: string | number | undefined;
1033
+ } | undefined;
1034
+ method?: unknown;
1035
+ accept?: string | undefined;
1036
+ headers?: Record<string, any> | undefined;
1037
+ legacyKeyPrefix?: boolean | undefined;
1038
+ }>, {
1039
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "ANY";
1040
+ accept: string;
1041
+ path?: string | undefined;
1042
+ concurrencyKey?: string | undefined;
1043
+ concurrencyLimit?: number | undefined;
1044
+ concurrencyLeaseMs?: number | undefined;
1045
+ onLimit?: "throw" | "queue" | undefined;
1046
+ concurrencyQueueTimeoutMs?: number | undefined;
1047
+ concurrencyQueueRetry?: {
1048
+ minBackoffMs?: number | undefined;
1049
+ maxBackoffMs?: number | undefined;
1050
+ factor?: number | undefined;
1051
+ } | undefined;
1052
+ delay?: string | number | undefined;
1053
+ ttl?: string | number | undefined;
1054
+ debounce?: {
1055
+ key: string;
1056
+ mode: "leading" | "trailing";
1057
+ delay: string | number;
1058
+ maxDelay?: string | number | undefined;
1059
+ } | undefined;
1060
+ headers?: Record<string, any> | undefined;
1061
+ legacyKeyPrefix?: boolean | undefined;
1062
+ }, {
1063
+ path?: string | undefined;
1064
+ concurrencyKey?: string | undefined;
1065
+ concurrencyLimit?: number | undefined;
1066
+ concurrencyLeaseMs?: number | undefined;
1067
+ onLimit?: "throw" | "queue" | undefined;
1068
+ concurrencyQueueTimeoutMs?: number | undefined;
1069
+ concurrencyQueueRetry?: {
1070
+ minBackoffMs?: number | undefined;
1071
+ maxBackoffMs?: number | undefined;
1072
+ factor?: number | undefined;
1073
+ } | undefined;
1074
+ delay?: string | number | undefined;
1075
+ ttl?: string | number | undefined;
1076
+ debounce?: {
1077
+ key: string;
1078
+ delay: string | number;
1079
+ mode?: "leading" | "trailing" | undefined;
1080
+ maxDelay?: string | number | undefined;
1081
+ } | undefined;
1082
+ method?: unknown;
1083
+ accept?: string | undefined;
1084
+ headers?: Record<string, any> | undefined;
1085
+ legacyKeyPrefix?: boolean | undefined;
1086
+ }>;
1087
+ readonly queue: z.ZodObject<{
1088
+ provider: z.ZodEnum<["kafka", "rabbitmq", "sqs", "redis", "beanstalk", "nats"]>;
1089
+ topic: z.ZodString;
1090
+ subscription: z.ZodOptional<z.ZodString>;
1091
+ consumerGroup: z.ZodOptional<z.ZodString>;
1092
+ ack: z.ZodDefault<z.ZodBoolean>;
1093
+ deadLetterQueue: z.ZodOptional<z.ZodString>;
1094
+ maxRetries: z.ZodDefault<z.ZodNumber>;
1095
+ retryDelay: z.ZodDefault<z.ZodNumber>;
1096
+ batchSize: z.ZodDefault<z.ZodNumber>;
1097
+ concurrency: z.ZodDefault<z.ZodNumber>;
1098
+ }, "strip", z.ZodTypeAny, {
1099
+ provider: "kafka" | "rabbitmq" | "sqs" | "redis" | "beanstalk" | "nats";
1100
+ topic: string;
1101
+ ack: boolean;
1102
+ maxRetries: number;
1103
+ retryDelay: number;
1104
+ batchSize: number;
1105
+ concurrency: number;
1106
+ subscription?: string | undefined;
1107
+ consumerGroup?: string | undefined;
1108
+ deadLetterQueue?: string | undefined;
1109
+ }, {
1110
+ provider: "kafka" | "rabbitmq" | "sqs" | "redis" | "beanstalk" | "nats";
1111
+ topic: string;
1112
+ subscription?: string | undefined;
1113
+ consumerGroup?: string | undefined;
1114
+ ack?: boolean | undefined;
1115
+ deadLetterQueue?: string | undefined;
1116
+ maxRetries?: number | undefined;
1117
+ retryDelay?: number | undefined;
1118
+ batchSize?: number | undefined;
1119
+ concurrency?: number | undefined;
1120
+ }>;
1121
+ readonly pubsub: z.ZodObject<{
1122
+ provider: z.ZodEnum<["gcp", "aws", "azure"]>;
1123
+ topic: z.ZodString;
1124
+ subscription: z.ZodString;
1125
+ ack: z.ZodDefault<z.ZodBoolean>;
1126
+ maxMessages: z.ZodDefault<z.ZodNumber>;
1127
+ ackDeadline: z.ZodDefault<z.ZodNumber>;
1128
+ deadLetterTopic: z.ZodOptional<z.ZodString>;
1129
+ filter: z.ZodOptional<z.ZodString>;
1130
+ }, "strip", z.ZodTypeAny, {
1131
+ provider: "gcp" | "aws" | "azure";
1132
+ topic: string;
1133
+ subscription: string;
1134
+ ack: boolean;
1135
+ maxMessages: number;
1136
+ ackDeadline: number;
1137
+ filter?: string | undefined;
1138
+ deadLetterTopic?: string | undefined;
1139
+ }, {
1140
+ provider: "gcp" | "aws" | "azure";
1141
+ topic: string;
1142
+ subscription: string;
1143
+ filter?: string | undefined;
1144
+ ack?: boolean | undefined;
1145
+ maxMessages?: number | undefined;
1146
+ ackDeadline?: number | undefined;
1147
+ deadLetterTopic?: string | undefined;
1148
+ }>;
1149
+ readonly worker: z.ZodEffects<z.ZodObject<{
1150
+ delay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
1151
+ ttl: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
1152
+ debounce: z.ZodOptional<z.ZodEffects<z.ZodObject<{
1153
+ key: z.ZodString;
1154
+ mode: z.ZodDefault<z.ZodEnum<["leading", "trailing"]>>;
1155
+ delay: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
1156
+ maxDelay: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
1157
+ }, "strip", z.ZodTypeAny, {
1158
+ key: string;
1159
+ mode: "leading" | "trailing";
1160
+ delay: string | number;
1161
+ maxDelay?: string | number | undefined;
1162
+ }, {
1163
+ key: string;
1164
+ delay: string | number;
1165
+ mode?: "leading" | "trailing" | undefined;
1166
+ maxDelay?: string | number | undefined;
1167
+ }>, {
1168
+ key: string;
1169
+ mode: "leading" | "trailing";
1170
+ delay: string | number;
1171
+ maxDelay?: string | number | undefined;
1172
+ }, {
1173
+ key: string;
1174
+ delay: string | number;
1175
+ mode?: "leading" | "trailing" | undefined;
1176
+ maxDelay?: string | number | undefined;
1177
+ }>>;
1178
+ concurrencyKey: z.ZodOptional<z.ZodString>;
1179
+ concurrencyLimit: z.ZodOptional<z.ZodNumber>;
1180
+ concurrencyLeaseMs: z.ZodOptional<z.ZodNumber>;
1181
+ onLimit: z.ZodOptional<z.ZodEnum<["throw", "queue"]>>;
1182
+ concurrencyQueueTimeoutMs: z.ZodOptional<z.ZodNumber>;
1183
+ concurrencyQueueRetry: z.ZodOptional<z.ZodObject<{
1184
+ minBackoffMs: z.ZodOptional<z.ZodNumber>;
1185
+ maxBackoffMs: z.ZodOptional<z.ZodNumber>;
1186
+ factor: z.ZodOptional<z.ZodNumber>;
1187
+ }, "strip", z.ZodTypeAny, {
1188
+ minBackoffMs?: number | undefined;
1189
+ maxBackoffMs?: number | undefined;
1190
+ factor?: number | undefined;
1191
+ }, {
1192
+ minBackoffMs?: number | undefined;
1193
+ maxBackoffMs?: number | undefined;
1194
+ factor?: number | undefined;
1195
+ }>>;
1196
+ queue: z.ZodString;
1197
+ concurrency: z.ZodDefault<z.ZodNumber>;
1198
+ timeout: z.ZodOptional<z.ZodNumber>;
1199
+ retries: z.ZodDefault<z.ZodNumber>;
1200
+ priority: z.ZodDefault<z.ZodNumber>;
1201
+ }, "strip", z.ZodTypeAny, {
1202
+ queue: string;
1203
+ concurrency: number;
1204
+ retries: number;
1205
+ priority: number;
1206
+ concurrencyKey?: string | undefined;
1207
+ concurrencyLimit?: number | undefined;
1208
+ concurrencyLeaseMs?: number | undefined;
1209
+ onLimit?: "throw" | "queue" | undefined;
1210
+ concurrencyQueueTimeoutMs?: number | undefined;
1211
+ concurrencyQueueRetry?: {
1212
+ minBackoffMs?: number | undefined;
1213
+ maxBackoffMs?: number | undefined;
1214
+ factor?: number | undefined;
1215
+ } | undefined;
1216
+ delay?: string | number | undefined;
1217
+ ttl?: string | number | undefined;
1218
+ debounce?: {
1219
+ key: string;
1220
+ mode: "leading" | "trailing";
1221
+ delay: string | number;
1222
+ maxDelay?: string | number | undefined;
1223
+ } | undefined;
1224
+ timeout?: number | undefined;
1225
+ }, {
1226
+ queue: string;
1227
+ concurrencyKey?: string | undefined;
1228
+ concurrencyLimit?: number | undefined;
1229
+ concurrencyLeaseMs?: number | undefined;
1230
+ onLimit?: "throw" | "queue" | undefined;
1231
+ concurrencyQueueTimeoutMs?: number | undefined;
1232
+ concurrencyQueueRetry?: {
1233
+ minBackoffMs?: number | undefined;
1234
+ maxBackoffMs?: number | undefined;
1235
+ factor?: number | undefined;
1236
+ } | undefined;
1237
+ delay?: string | number | undefined;
1238
+ ttl?: string | number | undefined;
1239
+ debounce?: {
1240
+ key: string;
1241
+ delay: string | number;
1242
+ mode?: "leading" | "trailing" | undefined;
1243
+ maxDelay?: string | number | undefined;
1244
+ } | undefined;
1245
+ concurrency?: number | undefined;
1246
+ timeout?: number | undefined;
1247
+ retries?: number | undefined;
1248
+ priority?: number | undefined;
1249
+ }>, {
1250
+ queue: string;
1251
+ concurrency: number;
1252
+ retries: number;
1253
+ priority: number;
1254
+ concurrencyKey?: string | undefined;
1255
+ concurrencyLimit?: number | undefined;
1256
+ concurrencyLeaseMs?: number | undefined;
1257
+ onLimit?: "throw" | "queue" | undefined;
1258
+ concurrencyQueueTimeoutMs?: number | undefined;
1259
+ concurrencyQueueRetry?: {
1260
+ minBackoffMs?: number | undefined;
1261
+ maxBackoffMs?: number | undefined;
1262
+ factor?: number | undefined;
1263
+ } | undefined;
1264
+ delay?: string | number | undefined;
1265
+ ttl?: string | number | undefined;
1266
+ debounce?: {
1267
+ key: string;
1268
+ mode: "leading" | "trailing";
1269
+ delay: string | number;
1270
+ maxDelay?: string | number | undefined;
1271
+ } | undefined;
1272
+ timeout?: number | undefined;
1273
+ }, {
1274
+ queue: string;
1275
+ concurrencyKey?: string | undefined;
1276
+ concurrencyLimit?: number | undefined;
1277
+ concurrencyLeaseMs?: number | undefined;
1278
+ onLimit?: "throw" | "queue" | undefined;
1279
+ concurrencyQueueTimeoutMs?: number | undefined;
1280
+ concurrencyQueueRetry?: {
1281
+ minBackoffMs?: number | undefined;
1282
+ maxBackoffMs?: number | undefined;
1283
+ factor?: number | undefined;
1284
+ } | undefined;
1285
+ delay?: string | number | undefined;
1286
+ ttl?: string | number | undefined;
1287
+ debounce?: {
1288
+ key: string;
1289
+ delay: string | number;
1290
+ mode?: "leading" | "trailing" | undefined;
1291
+ maxDelay?: string | number | undefined;
1292
+ } | undefined;
1293
+ concurrency?: number | undefined;
1294
+ timeout?: number | undefined;
1295
+ retries?: number | undefined;
1296
+ priority?: number | undefined;
1297
+ }>;
1298
+ readonly cron: z.ZodObject<{
1299
+ schedule: z.ZodString;
1300
+ timezone: z.ZodDefault<z.ZodString>;
1301
+ overlap: z.ZodDefault<z.ZodBoolean>;
1302
+ }, "strip", z.ZodTypeAny, {
1303
+ schedule: string;
1304
+ timezone: string;
1305
+ overlap: boolean;
1306
+ }, {
1307
+ schedule: string;
1308
+ timezone?: string | undefined;
1309
+ overlap?: boolean | undefined;
1310
+ }>;
1311
+ readonly webhook: z.ZodObject<{
1312
+ source: z.ZodString;
1313
+ events: z.ZodArray<z.ZodString, "many">;
1314
+ secret: z.ZodOptional<z.ZodString>;
1315
+ path: z.ZodOptional<z.ZodString>;
1316
+ }, "strip", z.ZodTypeAny, {
1317
+ source: string;
1318
+ events: string[];
1319
+ path?: string | undefined;
1320
+ secret?: string | undefined;
1321
+ }, {
1322
+ source: string;
1323
+ events: string[];
1324
+ path?: string | undefined;
1325
+ secret?: string | undefined;
1326
+ }>;
1327
+ readonly sse: z.ZodObject<{
1328
+ events: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1329
+ channels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1330
+ path: z.ZodOptional<z.ZodString>;
1331
+ maxConnections: z.ZodDefault<z.ZodNumber>;
1332
+ heartbeatInterval: z.ZodDefault<z.ZodNumber>;
1333
+ retryInterval: z.ZodDefault<z.ZodNumber>;
1334
+ }, "strip", z.ZodTypeAny, {
1335
+ events: string[];
1336
+ maxConnections: number;
1337
+ heartbeatInterval: number;
1338
+ retryInterval: number;
1339
+ path?: string | undefined;
1340
+ channels?: string[] | undefined;
1341
+ }, {
1342
+ path?: string | undefined;
1343
+ events?: string[] | undefined;
1344
+ maxConnections?: number | undefined;
1345
+ heartbeatInterval?: number | undefined;
1346
+ channels?: string[] | undefined;
1347
+ retryInterval?: number | undefined;
1348
+ }>;
1349
+ readonly websocket: z.ZodObject<{
1350
+ events: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1351
+ rooms: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1352
+ path: z.ZodOptional<z.ZodString>;
1353
+ maxConnections: z.ZodDefault<z.ZodNumber>;
1354
+ heartbeatInterval: z.ZodDefault<z.ZodNumber>;
1355
+ messageRateLimit: z.ZodDefault<z.ZodNumber>;
1356
+ }, "strip", z.ZodTypeAny, {
1357
+ events: string[];
1358
+ maxConnections: number;
1359
+ heartbeatInterval: number;
1360
+ messageRateLimit: number;
1361
+ path?: string | undefined;
1362
+ rooms?: string[] | undefined;
1363
+ }, {
1364
+ path?: string | undefined;
1365
+ events?: string[] | undefined;
1366
+ rooms?: string[] | undefined;
1367
+ maxConnections?: number | undefined;
1368
+ heartbeatInterval?: number | undefined;
1369
+ messageRateLimit?: number | undefined;
1370
+ }>;
1371
+ readonly grpc: null;
1372
+ readonly manual: null;
1373
+ };
1374
+ /** Union of every valid trigger configuration (typed). */
1375
+ export type AnyTriggerOpts = HttpTriggerOpts | QueueTriggerOpts | PubSubTriggerOpts | WorkerTriggerOpts | CronTriggerOpts | WebhookTriggerOpts | WebSocketTriggerOpts | SSETriggerOpts | Record<string, unknown>;
1376
+ /**
1377
+ * Validate a trigger configuration against the schema for the given trigger
1378
+ * kind. When the trigger has a schema, returns the parsed config (with
1379
+ * defaults applied). When the trigger has no schema (`grpc`, `manual`),
1380
+ * returns the input config (or an empty object when `undefined`).
1381
+ *
1382
+ * Throws when the trigger requires a schema and the config is missing or
1383
+ * invalid. The thrown error is either a `ZodError` (for shape violations) or
1384
+ * a regular `Error` (when config is missing entirely).
1385
+ *
1386
+ * @example
1387
+ * const cfg = validateTriggerConfig("cron", { schedule: "0 * * * *" });
1388
+ * // cfg.timezone === "UTC" (default applied)
1389
+ *
1390
+ * @example
1391
+ * validateTriggerConfig("cron", undefined);
1392
+ * // throws: 'Trigger "cron" requires a configuration object.'
1393
+ */
1394
+ export declare function validateTriggerConfig(name: TriggersEnum, config: unknown): unknown;