@beignet/core 0.0.31 → 0.0.33

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 (156) hide show
  1. package/CHANGELOG.md +115 -0
  2. package/README.md +346 -21
  3. package/dist/application/index.d.ts.map +1 -1
  4. package/dist/application/index.js +63 -47
  5. package/dist/application/index.js.map +1 -1
  6. package/dist/domain/entity.d.ts +37 -6
  7. package/dist/domain/entity.d.ts.map +1 -1
  8. package/dist/domain/entity.js +9 -7
  9. package/dist/domain/entity.js.map +1 -1
  10. package/dist/domain/index.d.ts +4 -4
  11. package/dist/domain/index.d.ts.map +1 -1
  12. package/dist/domain/index.js +4 -4
  13. package/dist/domain/index.js.map +1 -1
  14. package/dist/events/index.d.ts +6 -0
  15. package/dist/events/index.d.ts.map +1 -1
  16. package/dist/events/index.js +20 -10
  17. package/dist/events/index.js.map +1 -1
  18. package/dist/flags/index.d.ts +5 -4
  19. package/dist/flags/index.d.ts.map +1 -1
  20. package/dist/flags/index.js +10 -9
  21. package/dist/flags/index.js.map +1 -1
  22. package/dist/idempotency/index.d.ts +11 -1
  23. package/dist/idempotency/index.d.ts.map +1 -1
  24. package/dist/idempotency/index.js +4 -3
  25. package/dist/idempotency/index.js.map +1 -1
  26. package/dist/jobs/index.d.ts +449 -9
  27. package/dist/jobs/index.d.ts.map +1 -1
  28. package/dist/jobs/index.js +472 -12
  29. package/dist/jobs/index.js.map +1 -1
  30. package/dist/outbox/index.d.ts +170 -3
  31. package/dist/outbox/index.d.ts.map +1 -1
  32. package/dist/outbox/index.js +192 -8
  33. package/dist/outbox/index.js.map +1 -1
  34. package/dist/ports/events.d.ts +2 -2
  35. package/dist/ports/index.d.ts +6 -1
  36. package/dist/ports/index.d.ts.map +1 -1
  37. package/dist/ports/index.js +1 -0
  38. package/dist/ports/index.js.map +1 -1
  39. package/dist/providers/instrumentation.d.ts +4 -0
  40. package/dist/providers/instrumentation.d.ts.map +1 -1
  41. package/dist/providers/instrumentation.js.map +1 -1
  42. package/dist/providers/provider.d.ts +10 -2
  43. package/dist/providers/provider.d.ts.map +1 -1
  44. package/dist/providers/provider.js.map +1 -1
  45. package/dist/schedules/index.d.ts +8 -7
  46. package/dist/schedules/index.d.ts.map +1 -1
  47. package/dist/schedules/index.js +47 -16
  48. package/dist/schedules/index.js.map +1 -1
  49. package/dist/search/index.d.ts +2 -1
  50. package/dist/search/index.d.ts.map +1 -1
  51. package/dist/search/index.js +1 -0
  52. package/dist/search/index.js.map +1 -1
  53. package/dist/server/hooks/index.d.ts +1 -0
  54. package/dist/server/hooks/index.d.ts.map +1 -1
  55. package/dist/server/hooks/index.js +1 -0
  56. package/dist/server/hooks/index.js.map +1 -1
  57. package/dist/server/hooks/rate-limit.d.ts +26 -13
  58. package/dist/server/hooks/rate-limit.d.ts.map +1 -1
  59. package/dist/server/hooks/rate-limit.js +28 -34
  60. package/dist/server/hooks/rate-limit.js.map +1 -1
  61. package/dist/server/hooks/security.d.ts +179 -0
  62. package/dist/server/hooks/security.d.ts.map +1 -0
  63. package/dist/server/hooks/security.js +225 -0
  64. package/dist/server/hooks/security.js.map +1 -0
  65. package/dist/server/index.d.ts +8 -0
  66. package/dist/server/index.d.ts.map +1 -1
  67. package/dist/server/index.js +8 -0
  68. package/dist/server/index.js.map +1 -1
  69. package/dist/server/instrumentation.d.ts.map +1 -1
  70. package/dist/server/instrumentation.js +22 -6
  71. package/dist/server/instrumentation.js.map +1 -1
  72. package/dist/server/providers/loadProviderConfig.d.ts.map +1 -1
  73. package/dist/server/providers/loadProviderConfig.js +15 -2
  74. package/dist/server/providers/loadProviderConfig.js.map +1 -1
  75. package/dist/server/request-context.d.ts +4 -0
  76. package/dist/server/request-context.d.ts.map +1 -1
  77. package/dist/server/request-context.js +3 -0
  78. package/dist/server/request-context.js.map +1 -1
  79. package/dist/server/runtime-integrity.d.ts +84 -0
  80. package/dist/server/runtime-integrity.d.ts.map +1 -0
  81. package/dist/server/runtime-integrity.js +160 -0
  82. package/dist/server/runtime-integrity.js.map +1 -0
  83. package/dist/server/server.d.ts +10 -0
  84. package/dist/server/server.d.ts.map +1 -1
  85. package/dist/server/server.js +55 -1
  86. package/dist/server/server.js.map +1 -1
  87. package/dist/server/trusted-proxy.d.ts +77 -0
  88. package/dist/server/trusted-proxy.d.ts.map +1 -0
  89. package/dist/server/trusted-proxy.js +129 -0
  90. package/dist/server/trusted-proxy.js.map +1 -0
  91. package/dist/tasks/index.d.ts +6 -7
  92. package/dist/tasks/index.d.ts.map +1 -1
  93. package/dist/tasks/index.js +22 -5
  94. package/dist/tasks/index.js.map +1 -1
  95. package/dist/tenancy/index.d.ts +41 -0
  96. package/dist/tenancy/index.d.ts.map +1 -0
  97. package/dist/tenancy/index.js +34 -0
  98. package/dist/tenancy/index.js.map +1 -0
  99. package/dist/testing/index.d.ts +6 -0
  100. package/dist/testing/index.d.ts.map +1 -1
  101. package/dist/testing/index.js +12 -3
  102. package/dist/testing/index.js.map +1 -1
  103. package/dist/tracing/execution.d.ts +14 -0
  104. package/dist/tracing/execution.d.ts.map +1 -0
  105. package/dist/tracing/execution.js +17 -0
  106. package/dist/tracing/execution.js.map +1 -0
  107. package/dist/tracing/index.d.ts +49 -0
  108. package/dist/tracing/index.d.ts.map +1 -1
  109. package/dist/tracing/index.js +59 -0
  110. package/dist/tracing/index.js.map +1 -1
  111. package/dist/uploads/client.d.ts.map +1 -1
  112. package/dist/uploads/client.js +44 -6
  113. package/dist/uploads/client.js.map +1 -1
  114. package/dist/uploads/index.d.ts +182 -2
  115. package/dist/uploads/index.d.ts.map +1 -1
  116. package/dist/uploads/index.js +468 -76
  117. package/dist/uploads/index.js.map +1 -1
  118. package/dist/webhooks/index.d.ts +56 -4
  119. package/dist/webhooks/index.d.ts.map +1 -1
  120. package/dist/webhooks/index.js +107 -2
  121. package/dist/webhooks/index.js.map +1 -1
  122. package/package.json +5 -1
  123. package/skills/app-architecture/SKILL.md +23 -2
  124. package/src/application/index.ts +88 -56
  125. package/src/domain/entity.ts +61 -13
  126. package/src/domain/index.ts +8 -7
  127. package/src/events/index.ts +27 -14
  128. package/src/flags/index.ts +23 -19
  129. package/src/idempotency/index.ts +17 -3
  130. package/src/jobs/index.ts +1022 -19
  131. package/src/outbox/index.ts +409 -9
  132. package/src/ports/events.ts +2 -2
  133. package/src/ports/index.ts +17 -0
  134. package/src/providers/instrumentation.ts +4 -0
  135. package/src/providers/provider.ts +11 -2
  136. package/src/schedules/index.ts +60 -26
  137. package/src/search/index.ts +3 -1
  138. package/src/server/hooks/index.ts +10 -0
  139. package/src/server/hooks/rate-limit.ts +52 -46
  140. package/src/server/hooks/security.ts +503 -0
  141. package/src/server/index.ts +8 -0
  142. package/src/server/instrumentation.ts +25 -5
  143. package/src/server/providers/loadProviderConfig.ts +19 -2
  144. package/src/server/request-context.ts +7 -0
  145. package/src/server/runtime-integrity.ts +322 -0
  146. package/src/server/server.ts +86 -1
  147. package/src/server/trusted-proxy.ts +249 -0
  148. package/src/tasks/index.ts +29 -12
  149. package/src/tenancy/index.ts +55 -0
  150. package/src/testing/index.ts +19 -3
  151. package/src/tracing/execution.ts +37 -0
  152. package/src/tracing/index.ts +137 -0
  153. package/src/uploads/client.ts +65 -6
  154. package/src/uploads/index.ts +713 -76
  155. package/src/webhooks/index.ts +240 -9
  156. package/src/domain/events.ts +0 -59
@@ -1,3 +1,4 @@
1
+ import { runWithResolvedTracingContext } from "../tracing/execution.js";
1
2
  /**
2
3
  * Retry helper namespace for job definitions.
3
4
  */
@@ -37,6 +38,14 @@ export const retry = {
37
38
  });
38
39
  },
39
40
  };
41
+ /**
42
+ * Well-known symbol under which the inline dispatcher exposes a
43
+ * single-attempt dispatch. Delivery systems that own execution retries
44
+ * themselves — the outbox drain — call it instead of `dispatch(...)` so a
45
+ * job's retry policy runs in exactly one layer. Registered with `Symbol.for`
46
+ * so multiple core copies in one process agree on the key.
47
+ */
48
+ export const SINGLE_ATTEMPT_DISPATCH = Symbol.for("beignet.jobs.singleAttemptDispatch");
40
49
  /**
41
50
  * Error thrown when job payload validation fails.
42
51
  */
@@ -51,6 +60,55 @@ export class JobValidationError extends Error {
51
60
  this.issues = args.issues;
52
61
  }
53
62
  }
63
+ /**
64
+ * Error thrown when a job handler exceeds its declared timeout.
65
+ */
66
+ export class JobTimeoutError extends Error {
67
+ /**
68
+ * Stable job name that timed out.
69
+ */
70
+ jobName;
71
+ /**
72
+ * Timeout in milliseconds.
73
+ */
74
+ timeoutMs;
75
+ constructor(args) {
76
+ super(`Job "${args.jobName}" timed out after ${args.timeoutMs}ms.`);
77
+ this.name = "JobTimeoutError";
78
+ this.jobName = args.jobName;
79
+ this.timeoutMs = args.timeoutMs;
80
+ }
81
+ }
82
+ /**
83
+ * Error thrown when an execution lease hook is configured to fail on an
84
+ * unavailable lease.
85
+ */
86
+ export class JobExecutionLeaseUnavailableError extends Error {
87
+ /**
88
+ * Stable job name whose execution lease was unavailable.
89
+ */
90
+ jobName;
91
+ /**
92
+ * Logical lease key returned by the hook configuration.
93
+ */
94
+ key;
95
+ /**
96
+ * Concrete lock key passed to `LocksPort`.
97
+ */
98
+ lockKey;
99
+ /**
100
+ * Acquisition failure reason returned by `LocksPort`.
101
+ */
102
+ reason;
103
+ constructor(args) {
104
+ super(`Job "${args.jobName}" execution lease "${args.key}" is unavailable (${args.reason}).`);
105
+ this.name = "JobExecutionLeaseUnavailableError";
106
+ this.jobName = args.jobName;
107
+ this.key = args.key;
108
+ this.lockKey = args.lockKey;
109
+ this.reason = args.reason;
110
+ }
111
+ }
54
112
  function formatPath(path) {
55
113
  if (!path?.length)
56
114
  return "";
@@ -78,11 +136,19 @@ function assertPositiveNumber(name, value) {
78
136
  throw new Error(`${name} must be a positive number`);
79
137
  }
80
138
  }
139
+ function assertNonEmptyString(name, value) {
140
+ if (typeof value !== "string" || value.trim().length === 0) {
141
+ throw new Error(`${name} must be a non-empty string`);
142
+ }
143
+ }
81
144
  function durationToMs(name, value) {
82
145
  if (typeof value === "number") {
83
146
  assertPositiveInteger(name, value);
84
147
  return value;
85
148
  }
149
+ if (typeof value !== "string") {
150
+ throw new Error(`${name} must be a positive millisecond value or duration string like "500ms", "30s", "5m", or "1h".`);
151
+ }
86
152
  const match = /^(\d+)(ms|s|m|h)$/.exec(value);
87
153
  if (!match) {
88
154
  throw new Error(`${name} must be a positive millisecond value or duration string like "500ms", "30s", "5m", or "1h".`);
@@ -102,7 +168,38 @@ function durationToMs(name, value) {
102
168
  throw new Error(`${name} has an unsupported duration unit.`);
103
169
  }
104
170
  }
171
+ function isRecord(value) {
172
+ return typeof value === "object" && value !== null;
173
+ }
174
+ function validateJobUniqueOptions(options) {
175
+ if (!isRecord(options)) {
176
+ throw new Error("unique must be an object or resolver function");
177
+ }
178
+ assertNonEmptyString("unique.key", options.key);
179
+ durationToMs("unique.ttl", options.ttl);
180
+ return options;
181
+ }
182
+ function validateJobUniqueConfig(config) {
183
+ if (config === undefined)
184
+ return undefined;
185
+ if (typeof config === "function")
186
+ return config;
187
+ return validateJobUniqueOptions(config);
188
+ }
189
+ function validateJobTimeout(timeout) {
190
+ if (timeout === undefined)
191
+ return undefined;
192
+ durationToMs("timeout", timeout);
193
+ return timeout;
194
+ }
195
+ const VALIDATED_RETRY_OPTIONS = Symbol("beignet.jobs.validatedRetryOptions");
105
196
  function validateJobRetryOptions(options) {
197
+ // Options returned by this function are branded so repeated validation —
198
+ // per attempt in the retry helpers — short-circuits instead of re-parsing
199
+ // duration strings and reallocating.
200
+ if (options[VALIDATED_RETRY_OPTIONS]) {
201
+ return options;
202
+ }
106
203
  const strategy = options.strategy ?? "exponential";
107
204
  if (!["none", "fixed", "exponential"].includes(strategy)) {
108
205
  throw new Error("retry.strategy must be none, fixed, or exponential");
@@ -132,11 +229,16 @@ function validateJobRetryOptions(options) {
132
229
  assertPositiveNumber("retry.factor", options.factor);
133
230
  }
134
231
  }
135
- return {
232
+ const validated = {
136
233
  ...options,
137
234
  strategy,
138
235
  attempts,
139
236
  };
237
+ Object.defineProperty(validated, VALIDATED_RETRY_OPTIONS, {
238
+ value: true,
239
+ enumerable: false,
240
+ });
241
+ return validated;
140
242
  }
141
243
  /**
142
244
  * Return the maximum total attempts configured by a retry policy.
@@ -186,6 +288,124 @@ export function getJobRetryDelayMs(options, args) {
186
288
  }
187
289
  return delayMs;
188
290
  }
291
+ /**
292
+ * Return the execution timeout in milliseconds configured by a job.
293
+ */
294
+ export function getJobTimeoutMs(job) {
295
+ return job.timeout === undefined
296
+ ? undefined
297
+ : durationToMs("timeout", job.timeout);
298
+ }
299
+ function jobExecutionLeaseLockKey(jobName, key, keyPrefix = "jobs:lease") {
300
+ return `${keyPrefix}:${jobName}:${key}`;
301
+ }
302
+ function validateExecutionLeaseKey(key) {
303
+ assertNonEmptyString("executionLease.key", key);
304
+ return key;
305
+ }
306
+ function abortReason(signal) {
307
+ return signal.reason ?? new Error("Job execution aborted.");
308
+ }
309
+ async function resolveExecutionLeaseLocks(locks, args) {
310
+ return typeof locks === "function" ? await locks(args) : locks;
311
+ }
312
+ async function resolveExecutionLeaseMetadata(metadata, args) {
313
+ return typeof metadata === "function" ? await metadata(args) : metadata;
314
+ }
315
+ async function releaseExecutionLease(lease) {
316
+ try {
317
+ await lease.release();
318
+ }
319
+ catch {
320
+ // The lease TTL is the correctness boundary. Release is best effort so a
321
+ // provider outage after handler side effects does not turn success into a
322
+ // retry.
323
+ }
324
+ }
325
+ async function handleUnavailableExecutionLease(behavior, args) {
326
+ if (behavior === undefined || behavior === "skip")
327
+ return;
328
+ if (behavior === "throw") {
329
+ throw new JobExecutionLeaseUnavailableError({
330
+ jobName: args.job.name,
331
+ key: args.key,
332
+ lockKey: args.lockKey,
333
+ reason: args.reason,
334
+ });
335
+ }
336
+ await behavior(args);
337
+ }
338
+ /**
339
+ * Create a job hook that prevents overlapping handler attempts for the same
340
+ * logical execution key.
341
+ *
342
+ * The hook uses one bounded `LocksPort.acquire(...)` call and never starts
343
+ * renewal loops, so it can run in serverless entrypoints as long as `locks`
344
+ * points at shared storage. `ttl` is the real safety boundary when a runtime
345
+ * terminates before best-effort release runs.
346
+ */
347
+ export function createJobExecutionLeaseHook(options) {
348
+ const ttlMs = durationToMs("executionLease.ttl", options.ttl);
349
+ const waitMs = options.wait === undefined
350
+ ? undefined
351
+ : durationToMs("executionLease.wait", options.wait);
352
+ const retryDelayMs = options.retryDelay === undefined
353
+ ? undefined
354
+ : durationToMs("executionLease.retryDelay", options.retryDelay);
355
+ const keyPrefix = options.keyPrefix ?? "jobs:lease";
356
+ assertNonEmptyString("executionLease.keyPrefix", keyPrefix);
357
+ if (typeof options.key === "string") {
358
+ validateExecutionLeaseKey(options.key);
359
+ }
360
+ return async (args, next) => {
361
+ if (args.signal.aborted)
362
+ throw abortReason(args.signal);
363
+ const key = validateExecutionLeaseKey(typeof options.key === "function" ? await options.key(args) : options.key);
364
+ if (args.signal.aborted)
365
+ throw abortReason(args.signal);
366
+ const lockKey = jobExecutionLeaseLockKey(args.job.name, key, keyPrefix);
367
+ const locks = await resolveExecutionLeaseLocks(options.locks, args);
368
+ if (args.signal.aborted)
369
+ throw abortReason(args.signal);
370
+ const metadata = await resolveExecutionLeaseMetadata(options.metadata, args);
371
+ if (args.signal.aborted)
372
+ throw abortReason(args.signal);
373
+ const result = await locks.acquire(lockKey, {
374
+ ttlMs,
375
+ ...(waitMs === undefined ? {} : { waitMs }),
376
+ ...(retryDelayMs === undefined ? {} : { retryDelayMs }),
377
+ metadata: {
378
+ ...(metadata ?? {}),
379
+ capability: "jobs",
380
+ jobName: args.job.name,
381
+ leaseKey: key,
382
+ attempt: args.attempt ?? null,
383
+ maxAttempts: args.maxAttempts ?? null,
384
+ },
385
+ });
386
+ if (!result.acquired) {
387
+ if (args.signal.aborted)
388
+ throw abortReason(args.signal);
389
+ await handleUnavailableExecutionLease(options.onUnavailable, {
390
+ ...args,
391
+ key,
392
+ lockKey,
393
+ reason: result.reason,
394
+ });
395
+ return;
396
+ }
397
+ if (args.signal.aborted) {
398
+ await releaseExecutionLease(result.lease);
399
+ throw abortReason(args.signal);
400
+ }
401
+ try {
402
+ await next();
403
+ }
404
+ finally {
405
+ await releaseExecutionLease(result.lease);
406
+ }
407
+ };
408
+ }
189
409
  async function parsePayload(schema, input, args) {
190
410
  const result = await schema["~standard"].validate(input);
191
411
  if (result.issues?.length) {
@@ -209,12 +429,17 @@ function defineJobImpl(name, options) {
209
429
  const retryOptions = options.retry
210
430
  ? validateJobRetryOptions(options.retry)
211
431
  : undefined;
432
+ const uniqueOptions = validateJobUniqueConfig(options.unique);
433
+ const timeout = validateJobTimeout(options.timeout);
212
434
  return {
213
435
  kind: "job",
214
436
  name,
215
437
  payload: options.payload,
216
438
  description: options.description,
217
439
  retry: retryOptions,
440
+ unique: uniqueOptions,
441
+ timeout,
442
+ hooks: options.hooks,
218
443
  handle: options.handle,
219
444
  };
220
445
  }
@@ -226,27 +451,262 @@ export async function parseJobPayload(job, payload) {
226
451
  name: job.name,
227
452
  }));
228
453
  }
454
+ function normalizeJobHooks(job, hooks = []) {
455
+ return [
456
+ ...hooks,
457
+ ...(job.hooks ?? []),
458
+ ];
459
+ }
460
+ /**
461
+ * Run a parsed job handler once, enforcing hooks and the job's declared
462
+ * timeout.
463
+ */
464
+ export async function runJobHandler(args) {
465
+ const traceAttributes = {
466
+ "beignet.job.name": args.job.name,
467
+ ...(args.attempt === undefined
468
+ ? {}
469
+ : { "beignet.job.attempt": args.attempt }),
470
+ ...(args.maxAttempts === undefined
471
+ ? {}
472
+ : { "beignet.job.max_attempts": args.maxAttempts }),
473
+ };
474
+ await runWithResolvedTracingContext({
475
+ tracing: args.tracing,
476
+ ctx: args.ctx,
477
+ operation: {
478
+ name: `beignet.job ${args.job.name}`,
479
+ type: "job",
480
+ kind: "consumer",
481
+ attributes: traceAttributes,
482
+ metricAttributes: traceAttributes,
483
+ },
484
+ run: async (ctx) => {
485
+ const timeoutMs = getJobTimeoutMs(args.job);
486
+ const controller = new AbortController();
487
+ const hooks = normalizeJobHooks(args.job, args.hooks);
488
+ const hookArgs = {
489
+ job: args.job,
490
+ payload: args.payload,
491
+ ctx,
492
+ signal: controller.signal,
493
+ attempt: args.attempt,
494
+ maxAttempts: args.maxAttempts,
495
+ };
496
+ const run = Promise.resolve().then(async () => {
497
+ let index = -1;
498
+ const dispatch = async (nextIndex) => {
499
+ if (nextIndex <= index) {
500
+ throw new Error(`Job "${args.job.name}" hook called next() multiple times.`);
501
+ }
502
+ index = nextIndex;
503
+ const hook = hooks[nextIndex];
504
+ if (!hook) {
505
+ await args.job.handle({
506
+ job: args.job,
507
+ payload: args.payload,
508
+ ctx,
509
+ signal: controller.signal,
510
+ });
511
+ return;
512
+ }
513
+ await hook(hookArgs, () => dispatch(nextIndex + 1));
514
+ };
515
+ await dispatch(0);
516
+ });
517
+ if (timeoutMs === undefined) {
518
+ await run;
519
+ return;
520
+ }
521
+ const timeoutError = new JobTimeoutError({
522
+ jobName: args.job.name,
523
+ timeoutMs,
524
+ });
525
+ let timeout;
526
+ try {
527
+ await Promise.race([
528
+ run,
529
+ new Promise((_, reject) => {
530
+ timeout = setTimeout(() => {
531
+ controller.abort(timeoutError);
532
+ reject(timeoutError);
533
+ }, timeoutMs);
534
+ }),
535
+ ]);
536
+ }
537
+ finally {
538
+ if (timeout !== undefined) {
539
+ clearTimeout(timeout);
540
+ }
541
+ }
542
+ },
543
+ });
544
+ }
545
+ function jobUniqueLockKey(jobName, key, keyPrefix = "jobs:unique") {
546
+ return `${keyPrefix}:${jobName}:${key}`;
547
+ }
548
+ /**
549
+ * Resolve a job's dispatch-time uniqueness metadata for a parsed payload.
550
+ */
551
+ export async function resolveJobUnique(job, payload, options = {}) {
552
+ const config = job.unique;
553
+ if (!config)
554
+ return undefined;
555
+ const unique = typeof config === "function"
556
+ ? await config({ jobName: job.name, payload })
557
+ : config;
558
+ if (unique == null)
559
+ return undefined;
560
+ const validated = validateJobUniqueOptions(unique);
561
+ return {
562
+ key: validated.key,
563
+ lockKey: jobUniqueLockKey(job.name, validated.key, options.keyPrefix),
564
+ ttlMs: durationToMs("unique.ttl", validated.ttl),
565
+ };
566
+ }
229
567
  /**
230
568
  * Create a local/test dispatcher that runs job handlers inline.
569
+ *
570
+ * Dispatch honors the job's declared retry policy: failed attempts retry with
571
+ * the policy's delays until the policy is exhausted. Payload validation
572
+ * failures never retry. Jobs without a retry policy run exactly once.
231
573
  */
232
574
  export function createInlineJobDispatcher(options = {}) {
233
- return {
234
- async dispatch(job, payload) {
575
+ const sleep = options.sleep ??
576
+ ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
577
+ async function run(job, payload, retryEnabled, dispatchOptions = {}) {
578
+ const fail = (error) => {
579
+ options.onError?.(error, job);
580
+ if (!options.onError)
581
+ throw error;
582
+ };
583
+ let parsed;
584
+ let ctx;
585
+ try {
586
+ parsed = await parseJobPayload(job, payload);
587
+ // Resolve once per dispatch so a ctx factory does not run (and cannot
588
+ // produce different contexts) across retry attempts.
589
+ ctx = await resolveCtx(options.ctx);
590
+ }
591
+ catch (error) {
592
+ fail(error);
593
+ return;
594
+ }
595
+ const policy = retryEnabled ? job.retry : undefined;
596
+ const maxAttempts = policy ? (getJobRetryMaxAttempts(policy) ?? 1) : 1;
597
+ for (let attempt = 1;; attempt += 1) {
235
598
  try {
236
- const parsed = await parseJobPayload(job, payload);
237
- await job.handle({
599
+ await runJobHandler({
600
+ job,
601
+ payload: parsed,
602
+ ctx,
603
+ hooks: options.hooks,
604
+ attempt: dispatchOptions.attempt ?? attempt,
605
+ maxAttempts: dispatchOptions.maxAttempts ?? maxAttempts,
606
+ });
607
+ return;
608
+ }
609
+ catch (error) {
610
+ const willRetry = shouldRetryJob(policy, {
611
+ error,
612
+ attempt,
613
+ maxAttempts,
614
+ jobName: job.name,
615
+ });
616
+ if (!willRetry) {
617
+ fail(error);
618
+ return;
619
+ }
620
+ const delayMs = getJobRetryDelayMs(policy, {
621
+ error,
622
+ attempt,
623
+ jobName: job.name,
624
+ });
625
+ if (delayMs > 0)
626
+ await sleep(delayMs);
627
+ }
628
+ }
629
+ }
630
+ const dispatcher = {
631
+ async dispatch(job, payload) {
632
+ await run(job, payload, options.retry !== false);
633
+ },
634
+ };
635
+ // Non-enumerable so spreads and serialization keep treating the dispatcher
636
+ // as a plain port; the outbox drain discovers it by symbol.
637
+ Object.defineProperty(dispatcher, SINGLE_ATTEMPT_DISPATCH, {
638
+ value: (job, payload, dispatchOptions) => run(job, payload, false, dispatchOptions),
639
+ enumerable: false,
640
+ });
641
+ return dispatcher;
642
+ }
643
+ /**
644
+ * Wrap any job dispatcher with dispatch-time unique job suppression.
645
+ *
646
+ * When a job has no `unique` declaration, dispatch passes through unchanged.
647
+ * When it does, the wrapper validates the payload, resolves the unique key,
648
+ * acquires the matching lease, and calls the underlying dispatcher only when
649
+ * the lease is acquired. Successful dispatches intentionally keep the lease
650
+ * until its TTL expires; failed dispatches release it so callers can retry.
651
+ */
652
+ export function createUniqueJobDispatcher(options) {
653
+ const dispatcher = {
654
+ async dispatch(job, payload) {
655
+ if (!job.unique) {
656
+ await options.jobs.dispatch(job, payload);
657
+ return;
658
+ }
659
+ const parsed = await parseJobPayload(job, payload);
660
+ const unique = await resolveJobUnique(job, parsed, {
661
+ keyPrefix: options.keyPrefix,
662
+ });
663
+ if (!unique) {
664
+ await options.jobs.dispatch(job, parsed);
665
+ return;
666
+ }
667
+ const result = await options.locks.acquire(unique.lockKey, {
668
+ ttlMs: unique.ttlMs,
669
+ waitMs: 0,
670
+ metadata: {
671
+ capability: "jobs",
672
+ jobName: job.name,
673
+ uniqueKey: unique.key,
674
+ },
675
+ });
676
+ if (!result.acquired) {
677
+ await options.onDuplicate?.({
238
678
  job,
239
679
  payload: parsed,
240
- ctx: await resolveCtx(options.ctx),
680
+ key: unique.key,
681
+ lockKey: unique.lockKey,
682
+ ttlMs: unique.ttlMs,
683
+ reason: result.reason,
241
684
  });
685
+ return;
686
+ }
687
+ try {
688
+ await options.jobs.dispatch(job, parsed);
242
689
  }
243
690
  catch (error) {
244
- options.onError?.(error, job);
245
- if (!options.onError)
246
- throw error;
691
+ try {
692
+ await result.lease.release();
693
+ }
694
+ catch {
695
+ // Preserve the dispatch failure; lease release is best effort and
696
+ // the TTL still bounds duplicate suppression if release fails.
697
+ }
698
+ throw error;
247
699
  }
248
700
  },
249
701
  };
702
+ const singleAttempt = options.jobs[SINGLE_ATTEMPT_DISPATCH];
703
+ if (singleAttempt) {
704
+ Object.defineProperty(dispatcher, SINGLE_ATTEMPT_DISPATCH, {
705
+ value: singleAttempt,
706
+ enumerable: false,
707
+ });
708
+ }
709
+ return dispatcher;
250
710
  }
251
711
  /**
252
712
  * Create job helper methods bound to an application context type.
@@ -257,9 +717,9 @@ export function createInlineJobDispatcher(options = {}) {
257
717
  * export const { defineJob } = createJobs<AppContext>();
258
718
  * ```
259
719
  *
260
- * Retry options are provider hints. Inline dispatchers validate payloads and
261
- * call `handle(...)` immediately; durable providers may enqueue or schedule the
262
- * job according to their own runtime.
720
+ * Retry options describe the job's retry policy. Inline dispatchers run the
721
+ * policy in-process with real delays; durable providers map the policy onto
722
+ * their own runtime and reject options they cannot honor.
263
723
  */
264
724
  export function createJobs() {
265
725
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"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"}