@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.
- package/CHANGELOG.md +115 -0
- package/README.md +346 -21
- package/dist/application/index.d.ts.map +1 -1
- package/dist/application/index.js +63 -47
- package/dist/application/index.js.map +1 -1
- package/dist/domain/entity.d.ts +37 -6
- package/dist/domain/entity.d.ts.map +1 -1
- package/dist/domain/entity.js +9 -7
- package/dist/domain/entity.js.map +1 -1
- package/dist/domain/index.d.ts +4 -4
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +4 -4
- package/dist/domain/index.js.map +1 -1
- package/dist/events/index.d.ts +6 -0
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +20 -10
- package/dist/events/index.js.map +1 -1
- package/dist/flags/index.d.ts +5 -4
- package/dist/flags/index.d.ts.map +1 -1
- package/dist/flags/index.js +10 -9
- package/dist/flags/index.js.map +1 -1
- package/dist/idempotency/index.d.ts +11 -1
- package/dist/idempotency/index.d.ts.map +1 -1
- package/dist/idempotency/index.js +4 -3
- package/dist/idempotency/index.js.map +1 -1
- package/dist/jobs/index.d.ts +449 -9
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js +472 -12
- package/dist/jobs/index.js.map +1 -1
- package/dist/outbox/index.d.ts +170 -3
- package/dist/outbox/index.d.ts.map +1 -1
- package/dist/outbox/index.js +192 -8
- package/dist/outbox/index.js.map +1 -1
- package/dist/ports/events.d.ts +2 -2
- package/dist/ports/index.d.ts +6 -1
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js +1 -0
- package/dist/ports/index.js.map +1 -1
- package/dist/providers/instrumentation.d.ts +4 -0
- package/dist/providers/instrumentation.d.ts.map +1 -1
- package/dist/providers/instrumentation.js.map +1 -1
- package/dist/providers/provider.d.ts +10 -2
- package/dist/providers/provider.d.ts.map +1 -1
- package/dist/providers/provider.js.map +1 -1
- package/dist/schedules/index.d.ts +8 -7
- package/dist/schedules/index.d.ts.map +1 -1
- package/dist/schedules/index.js +47 -16
- package/dist/schedules/index.js.map +1 -1
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.d.ts.map +1 -1
- package/dist/search/index.js +1 -0
- package/dist/search/index.js.map +1 -1
- package/dist/server/hooks/index.d.ts +1 -0
- package/dist/server/hooks/index.d.ts.map +1 -1
- package/dist/server/hooks/index.js +1 -0
- package/dist/server/hooks/index.js.map +1 -1
- package/dist/server/hooks/rate-limit.d.ts +26 -13
- package/dist/server/hooks/rate-limit.d.ts.map +1 -1
- package/dist/server/hooks/rate-limit.js +28 -34
- package/dist/server/hooks/rate-limit.js.map +1 -1
- package/dist/server/hooks/security.d.ts +179 -0
- package/dist/server/hooks/security.d.ts.map +1 -0
- package/dist/server/hooks/security.js +225 -0
- package/dist/server/hooks/security.js.map +1 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +8 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/instrumentation.d.ts.map +1 -1
- package/dist/server/instrumentation.js +22 -6
- package/dist/server/instrumentation.js.map +1 -1
- package/dist/server/providers/loadProviderConfig.d.ts.map +1 -1
- package/dist/server/providers/loadProviderConfig.js +15 -2
- package/dist/server/providers/loadProviderConfig.js.map +1 -1
- package/dist/server/request-context.d.ts +4 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js +3 -0
- package/dist/server/request-context.js.map +1 -1
- package/dist/server/runtime-integrity.d.ts +84 -0
- package/dist/server/runtime-integrity.d.ts.map +1 -0
- package/dist/server/runtime-integrity.js +160 -0
- package/dist/server/runtime-integrity.js.map +1 -0
- package/dist/server/server.d.ts +10 -0
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +55 -1
- package/dist/server/server.js.map +1 -1
- package/dist/server/trusted-proxy.d.ts +77 -0
- package/dist/server/trusted-proxy.d.ts.map +1 -0
- package/dist/server/trusted-proxy.js +129 -0
- package/dist/server/trusted-proxy.js.map +1 -0
- package/dist/tasks/index.d.ts +6 -7
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/index.js +22 -5
- package/dist/tasks/index.js.map +1 -1
- package/dist/tenancy/index.d.ts +41 -0
- package/dist/tenancy/index.d.ts.map +1 -0
- package/dist/tenancy/index.js +34 -0
- package/dist/tenancy/index.js.map +1 -0
- package/dist/testing/index.d.ts +6 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +12 -3
- package/dist/testing/index.js.map +1 -1
- package/dist/tracing/execution.d.ts +14 -0
- package/dist/tracing/execution.d.ts.map +1 -0
- package/dist/tracing/execution.js +17 -0
- package/dist/tracing/execution.js.map +1 -0
- package/dist/tracing/index.d.ts +49 -0
- package/dist/tracing/index.d.ts.map +1 -1
- package/dist/tracing/index.js +59 -0
- package/dist/tracing/index.js.map +1 -1
- package/dist/uploads/client.d.ts.map +1 -1
- package/dist/uploads/client.js +44 -6
- package/dist/uploads/client.js.map +1 -1
- package/dist/uploads/index.d.ts +182 -2
- package/dist/uploads/index.d.ts.map +1 -1
- package/dist/uploads/index.js +468 -76
- package/dist/uploads/index.js.map +1 -1
- package/dist/webhooks/index.d.ts +56 -4
- package/dist/webhooks/index.d.ts.map +1 -1
- package/dist/webhooks/index.js +107 -2
- package/dist/webhooks/index.js.map +1 -1
- package/package.json +5 -1
- package/skills/app-architecture/SKILL.md +23 -2
- package/src/application/index.ts +88 -56
- package/src/domain/entity.ts +61 -13
- package/src/domain/index.ts +8 -7
- package/src/events/index.ts +27 -14
- package/src/flags/index.ts +23 -19
- package/src/idempotency/index.ts +17 -3
- package/src/jobs/index.ts +1022 -19
- package/src/outbox/index.ts +409 -9
- package/src/ports/events.ts +2 -2
- package/src/ports/index.ts +17 -0
- package/src/providers/instrumentation.ts +4 -0
- package/src/providers/provider.ts +11 -2
- package/src/schedules/index.ts +60 -26
- package/src/search/index.ts +3 -1
- package/src/server/hooks/index.ts +10 -0
- package/src/server/hooks/rate-limit.ts +52 -46
- package/src/server/hooks/security.ts +503 -0
- package/src/server/index.ts +8 -0
- package/src/server/instrumentation.ts +25 -5
- package/src/server/providers/loadProviderConfig.ts +19 -2
- package/src/server/request-context.ts +7 -0
- package/src/server/runtime-integrity.ts +322 -0
- package/src/server/server.ts +86 -1
- package/src/server/trusted-proxy.ts +249 -0
- package/src/tasks/index.ts +29 -12
- package/src/tenancy/index.ts +55 -0
- package/src/testing/index.ts +19 -3
- package/src/tracing/execution.ts +37 -0
- package/src/tracing/index.ts +137 -0
- package/src/uploads/client.ts +65 -6
- package/src/uploads/index.ts +713 -76
- package/src/webhooks/index.ts +240 -9
- package/src/domain/events.ts +0 -59
package/dist/jobs/index.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
234
|
-
|
|
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
|
-
|
|
237
|
-
|
|
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
|
-
|
|
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
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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
|
|
261
|
-
*
|
|
262
|
-
*
|
|
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 {
|
package/dist/jobs/index.js.map
CHANGED
|
@@ -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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"}
|