glasswork 0.12.2 → 0.13.1
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/dist/auth/abilities.d.ts +41 -0
- package/dist/auth/abilities.d.ts.map +1 -0
- package/dist/auth/abilities.js +62 -0
- package/dist/auth/abilities.js.map +1 -0
- package/dist/auth/assert.d.ts +20 -0
- package/dist/auth/assert.d.ts.map +1 -0
- package/dist/auth/assert.js +28 -0
- package/dist/auth/assert.js.map +1 -0
- package/dist/auth/better-auth-provider.d.ts +56 -0
- package/dist/auth/better-auth-provider.d.ts.map +1 -0
- package/dist/auth/better-auth-provider.js +62 -0
- package/dist/auth/better-auth-provider.js.map +1 -0
- package/dist/auth/index.d.ts +6 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +5 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +31 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +92 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/types.d.ts +54 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/core/bootstrap.d.ts.map +1 -1
- package/dist/core/bootstrap.js +5 -2
- package/dist/core/bootstrap.js.map +1 -1
- package/dist/core/types.d.ts +8 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/http/route-helpers.d.ts +52 -9
- package/dist/http/route-helpers.d.ts.map +1 -1
- package/dist/http/route-helpers.js +90 -40
- package/dist/http/route-helpers.js.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/jobs/define-job.d.ts +34 -2
- package/dist/jobs/define-job.d.ts.map +1 -1
- package/dist/jobs/define-job.js.map +1 -1
- package/dist/jobs/drivers/eventbridge-scheduler-driver.d.ts +75 -0
- package/dist/jobs/drivers/eventbridge-scheduler-driver.d.ts.map +1 -0
- package/dist/jobs/drivers/eventbridge-scheduler-driver.js +135 -0
- package/dist/jobs/drivers/eventbridge-scheduler-driver.js.map +1 -0
- package/dist/jobs/drivers/mock-driver.d.ts +45 -10
- package/dist/jobs/drivers/mock-driver.d.ts.map +1 -1
- package/dist/jobs/drivers/mock-driver.js +36 -17
- package/dist/jobs/drivers/mock-driver.js.map +1 -1
- package/dist/jobs/drivers/sqs-driver.d.ts +26 -19
- package/dist/jobs/drivers/sqs-driver.d.ts.map +1 -1
- package/dist/jobs/drivers/sqs-driver.js +54 -69
- package/dist/jobs/drivers/sqs-driver.js.map +1 -1
- package/dist/jobs/errors.d.ts +8 -4
- package/dist/jobs/errors.d.ts.map +1 -1
- package/dist/jobs/errors.js +13 -7
- package/dist/jobs/errors.js.map +1 -1
- package/dist/jobs/index.d.ts +4 -3
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js +3 -2
- package/dist/jobs/index.js.map +1 -1
- package/dist/jobs/job-registry.d.ts +4 -4
- package/dist/jobs/job-registry.d.ts.map +1 -1
- package/dist/jobs/job-registry.js.map +1 -1
- package/dist/jobs/job-service.js +1 -1
- package/dist/jobs/job-service.js.map +1 -1
- package/dist/jobs/schedule-constants.d.ts +0 -4
- package/dist/jobs/schedule-constants.d.ts.map +1 -1
- package/dist/jobs/schedule-constants.js +0 -4
- package/dist/jobs/schedule-constants.js.map +1 -1
- package/dist/jobs/scheduler.d.ts +1 -1
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +46 -10
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/jobs/types.d.ts +59 -50
- package/dist/jobs/types.d.ts.map +1 -1
- package/dist/jobs/utils.d.ts +0 -9
- package/dist/jobs/utils.d.ts.map +1 -1
- package/dist/jobs/utils.js +3 -23
- package/dist/jobs/utils.js.map +1 -1
- package/dist/jobs/worker.d.ts +2 -3
- package/dist/jobs/worker.d.ts.map +1 -1
- package/dist/jobs/worker.js +183 -82
- package/dist/jobs/worker.js.map +1 -1
- package/dist/list-query/casl.d.ts +18 -19
- package/dist/list-query/casl.d.ts.map +1 -1
- package/dist/list-query/casl.js +40 -46
- package/dist/list-query/casl.js.map +1 -1
- package/dist/uploads/file-upload.d.ts +44 -0
- package/dist/uploads/file-upload.d.ts.map +1 -0
- package/dist/uploads/file-upload.js +145 -0
- package/dist/uploads/file-upload.js.map +1 -0
- package/dist/uploads/index.d.ts +6 -0
- package/dist/uploads/index.d.ts.map +1 -0
- package/dist/uploads/index.js +7 -0
- package/dist/uploads/index.js.map +1 -0
- package/dist/uploads/uploads.service.d.ts +98 -0
- package/dist/uploads/uploads.service.d.ts.map +1 -0
- package/dist/uploads/uploads.service.js +134 -0
- package/dist/uploads/uploads.service.js.map +1 -0
- package/dist/uploads/validators.d.ts +41 -0
- package/dist/uploads/validators.d.ts.map +1 -0
- package/dist/uploads/validators.js +94 -0
- package/dist/uploads/validators.js.map +1 -0
- package/package.json +34 -3
- package/dist/email/compiler/code-generator.d.ts +0 -11
- package/dist/email/compiler/code-generator.d.ts.map +0 -1
- package/dist/email/compiler/code-generator.js +0 -319
- package/dist/email/compiler/code-generator.js.map +0 -1
|
@@ -1,23 +1,38 @@
|
|
|
1
|
-
import { MAX_SQS_DELAY_SECONDS
|
|
1
|
+
import { MAX_SQS_DELAY_SECONDS } from '../schedule-constants.js';
|
|
2
2
|
import { durationToSeconds, generateJobId } from '../utils.js';
|
|
3
|
+
import { EventBridgeSchedulerDriver, } from './eventbridge-scheduler-driver.js';
|
|
3
4
|
/**
|
|
4
|
-
* AWS SQS queue driver
|
|
5
|
+
* AWS SQS queue driver with EventBridge Scheduler support for long delays.
|
|
6
|
+
*
|
|
7
|
+
* For delays up to 15 minutes, uses native SQS delay.
|
|
8
|
+
* For delays over 15 minutes, uses EventBridge Scheduler to create a one-off
|
|
9
|
+
* schedule that sends the job to SQS at the specified time.
|
|
5
10
|
*/
|
|
6
11
|
export class SQSQueueDriver {
|
|
7
12
|
config;
|
|
8
13
|
name = 'sqs';
|
|
14
|
+
defaultQueue;
|
|
9
15
|
client = null;
|
|
10
|
-
|
|
16
|
+
schedulerDriver = null;
|
|
17
|
+
disposed = false;
|
|
11
18
|
constructor(config) {
|
|
12
19
|
this.config = config;
|
|
20
|
+
this.defaultQueue = config.defaultQueue ?? 'default';
|
|
13
21
|
if (config.client) {
|
|
14
22
|
this.client = config.client;
|
|
15
23
|
}
|
|
24
|
+
if (config.scheduler) {
|
|
25
|
+
this.schedulerDriver = new EventBridgeSchedulerDriver(config.scheduler);
|
|
26
|
+
}
|
|
16
27
|
}
|
|
17
28
|
/**
|
|
18
29
|
* Lazily initialize the SQS client.
|
|
30
|
+
* @throws Error if the driver has been disposed
|
|
19
31
|
*/
|
|
20
32
|
async getClient() {
|
|
33
|
+
if (this.disposed) {
|
|
34
|
+
throw new Error('SQSQueueDriver has been disposed');
|
|
35
|
+
}
|
|
21
36
|
if (!this.client) {
|
|
22
37
|
const { SQSClient } = await import('@aws-sdk/client-sqs');
|
|
23
38
|
this.client = new SQSClient({
|
|
@@ -68,7 +83,7 @@ export class SQSQueueDriver {
|
|
|
68
83
|
if (delaySeconds <= MAX_SQS_DELAY_SECONDS) {
|
|
69
84
|
return this.enqueueWithDelay(message, delaySeconds);
|
|
70
85
|
}
|
|
71
|
-
return this.
|
|
86
|
+
return this.scheduleWithEventBridge(message, at);
|
|
72
87
|
}
|
|
73
88
|
async enqueueIn(message, delay) {
|
|
74
89
|
const delaySeconds = durationToSeconds(delay);
|
|
@@ -76,19 +91,35 @@ export class SQSQueueDriver {
|
|
|
76
91
|
return this.enqueueWithDelay(message, delaySeconds);
|
|
77
92
|
}
|
|
78
93
|
const at = new Date(Date.now() + delaySeconds * 1000);
|
|
79
|
-
return this.
|
|
94
|
+
return this.scheduleWithEventBridge(message, at);
|
|
80
95
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
96
|
+
/**
|
|
97
|
+
* Cancel a scheduled job. Only works for jobs scheduled with EventBridge Scheduler.
|
|
98
|
+
*
|
|
99
|
+
* @param scheduleName - The schedule name from the ScheduleResult
|
|
100
|
+
*/
|
|
101
|
+
async cancelSchedule(scheduleName) {
|
|
102
|
+
if (!this.schedulerDriver) {
|
|
103
|
+
throw new Error('EventBridge Scheduler is not configured');
|
|
104
|
+
}
|
|
105
|
+
await this.schedulerDriver.cancel(scheduleName);
|
|
86
106
|
}
|
|
87
|
-
|
|
88
|
-
|
|
107
|
+
/**
|
|
108
|
+
* Dispose of the driver and release AWS SDK client resources.
|
|
109
|
+
* Call this when you're done using the driver to prevent memory leaks.
|
|
110
|
+
*/
|
|
111
|
+
async dispose() {
|
|
112
|
+
this.disposed = true;
|
|
113
|
+
if (this.client) {
|
|
114
|
+
this.client.destroy();
|
|
115
|
+
this.client = null;
|
|
116
|
+
}
|
|
117
|
+
if (this.schedulerDriver) {
|
|
118
|
+
await this.schedulerDriver.dispose();
|
|
119
|
+
}
|
|
89
120
|
}
|
|
90
121
|
getQueueUrl(queue) {
|
|
91
|
-
const queueName = queue ?? this.
|
|
122
|
+
const queueName = queue ?? this.defaultQueue;
|
|
92
123
|
const queueUrl = this.config.queues[queueName];
|
|
93
124
|
if (!queueUrl) {
|
|
94
125
|
throw new Error(`Queue "${queueName}" is not configured for SQS driver`);
|
|
@@ -129,63 +160,17 @@ export class SQSQueueDriver {
|
|
|
129
160
|
jobId,
|
|
130
161
|
};
|
|
131
162
|
}
|
|
132
|
-
async
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
return this.scheduleJobWithSelfReschedule(message, at);
|
|
138
|
-
}
|
|
139
|
-
async scheduleJobWithSelfReschedule(message, at) {
|
|
140
|
-
const jobId = message.jobId ?? generateJobId();
|
|
141
|
-
const metadata = {
|
|
142
|
-
...message.metadata,
|
|
143
|
-
[RUN_AT_METADATA_KEY]: at.toISOString(),
|
|
144
|
-
};
|
|
145
|
-
const delaySeconds = Math.max(1, Math.min(MAX_SQS_DELAY_SECONDS, Math.floor((at.getTime() - Date.now()) / 1000)));
|
|
146
|
-
return this.enqueueWithDelay({
|
|
147
|
-
...message,
|
|
148
|
-
jobId,
|
|
149
|
-
metadata,
|
|
150
|
-
}, delaySeconds);
|
|
151
|
-
}
|
|
152
|
-
async scheduleJobWithDynamo(message, at) {
|
|
153
|
-
if (!this.config.schedulerTable) {
|
|
154
|
-
throw new Error('schedulerTable is required for delays over 15 minutes when using dynamodb');
|
|
155
|
-
}
|
|
156
|
-
const { PutItemCommand } = await import('@aws-sdk/client-dynamodb');
|
|
157
|
-
const ddb = await this.getSchedulerClient();
|
|
158
|
-
const jobId = message.jobId ?? generateJobId();
|
|
159
|
-
const partition = `SCHEDULED#${at.toISOString().slice(0, 16)}`;
|
|
160
|
-
await ddb.send(new PutItemCommand({
|
|
161
|
-
TableName: this.config.schedulerTable,
|
|
162
|
-
Item: {
|
|
163
|
-
pk: { S: partition },
|
|
164
|
-
sk: { S: jobId },
|
|
165
|
-
jobName: { S: message.jobName },
|
|
166
|
-
payload: { S: JSON.stringify(message.payload) },
|
|
167
|
-
queue: { S: message.queue ?? this.config.defaultQueue ?? 'default' },
|
|
168
|
-
scheduledAt: { S: at.toISOString() },
|
|
169
|
-
ttl: { N: String(Math.floor(at.getTime() / 1000) + 86400) },
|
|
170
|
-
},
|
|
171
|
-
}));
|
|
172
|
-
return {
|
|
173
|
-
messageId: jobId,
|
|
174
|
-
jobId,
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
async getSchedulerClient() {
|
|
178
|
-
if (this.schedulerClientPromise) {
|
|
179
|
-
return (await this.schedulerClientPromise);
|
|
163
|
+
async scheduleWithEventBridge(message, at) {
|
|
164
|
+
if (!this.schedulerDriver) {
|
|
165
|
+
throw new Error('EventBridge Scheduler configuration is required for delays over 15 minutes. ' +
|
|
166
|
+
'Configure the `scheduler` option in SQSDriverConfig.');
|
|
180
167
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
})();
|
|
188
|
-
return (await this.schedulerClientPromise);
|
|
168
|
+
const queueUrl = this.getQueueUrl(message.queue);
|
|
169
|
+
return this.schedulerDriver.scheduleAt({
|
|
170
|
+
queueUrl,
|
|
171
|
+
message,
|
|
172
|
+
scheduledAt: at,
|
|
173
|
+
});
|
|
189
174
|
}
|
|
190
175
|
}
|
|
191
176
|
//# sourceMappingURL=sqs-driver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqs-driver.js","sourceRoot":"","sources":["../../../src/jobs/drivers/sqs-driver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"sqs-driver.js","sourceRoot":"","sources":["../../../src/jobs/drivers/sqs-driver.ts"],"names":[],"mappings":"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"}
|
package/dist/jobs/errors.d.ts
CHANGED
|
@@ -30,11 +30,15 @@ export declare class TransientJobError extends Error {
|
|
|
30
30
|
constructor(message: string, retryAfter?: import('./types.js').Duration);
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
|
-
* Thrown when
|
|
33
|
+
* Thrown internally when a job has exhausted all retry attempts.
|
|
34
|
+
* This triggers the onJobDeadLetter hook and indicates the job
|
|
35
|
+
* should be moved to the dead letter queue.
|
|
34
36
|
*/
|
|
35
|
-
export declare class
|
|
37
|
+
export declare class RetryExhaustedError extends Error {
|
|
36
38
|
readonly jobName: string;
|
|
37
|
-
readonly
|
|
38
|
-
|
|
39
|
+
readonly attemptNumber: number;
|
|
40
|
+
readonly maxAttempts: number;
|
|
41
|
+
readonly cause: Error;
|
|
42
|
+
constructor(jobName: string, attemptNumber: number, maxAttempts: number, cause: Error);
|
|
39
43
|
}
|
|
40
44
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/jobs/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAUhD;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;gBAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE;CAM1D;AAED;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,YAAY,EAAE,QAAQ,CAAC;gBAExC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,YAAY,EAAE,QAAQ;CAKxE;AAED
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/jobs/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAUhD;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;gBAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE;CAM1D;AAED;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,YAAY,EAAE,QAAQ,CAAC;gBAExC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,YAAY,EAAE,QAAQ;CAKxE;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;gBAEV,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAQtF"}
|
package/dist/jobs/errors.js
CHANGED
|
@@ -46,16 +46,22 @@ export class TransientJobError extends Error {
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
|
-
* Thrown when
|
|
49
|
+
* Thrown internally when a job has exhausted all retry attempts.
|
|
50
|
+
* This triggers the onJobDeadLetter hook and indicates the job
|
|
51
|
+
* should be moved to the dead letter queue.
|
|
50
52
|
*/
|
|
51
|
-
export class
|
|
53
|
+
export class RetryExhaustedError extends Error {
|
|
52
54
|
jobName;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
attemptNumber;
|
|
56
|
+
maxAttempts;
|
|
57
|
+
cause;
|
|
58
|
+
constructor(jobName, attemptNumber, maxAttempts, cause) {
|
|
59
|
+
super(`Job "${jobName}" exhausted ${maxAttempts} retries after ${attemptNumber} attempts`);
|
|
60
|
+
this.name = 'RetryExhaustedError';
|
|
57
61
|
this.jobName = jobName;
|
|
58
|
-
this.
|
|
62
|
+
this.attemptNumber = attemptNumber;
|
|
63
|
+
this.maxAttempts = maxAttempts;
|
|
64
|
+
this.cause = cause;
|
|
59
65
|
}
|
|
60
66
|
}
|
|
61
67
|
//# sourceMappingURL=errors.js.map
|
package/dist/jobs/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/jobs/errors.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,UAAU,CAAS;IACnB,OAAO,CAAS;IAEzB,YAAY,UAAkB,EAAE,OAAe;QAC7C,KAAK,CACH,qBAAqB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,0BAA0B,IAAI,CAAC,KAAK,CACpF,OAAO,GAAG,IAAI,CACf,sEAAsE,CACxE,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACtC,OAAO,CAAS;IAChB,MAAM,CAAuB;IAEtC,YAAY,OAAe,EAAE,MAA4B;QACvD,KAAK,CAAC,4BAA4B,OAAO,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,UAAU,CAAiC;IAEpD,YAAY,OAAe,EAAE,UAA0C;QACrE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/jobs/errors.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,UAAU,CAAS;IACnB,OAAO,CAAS;IAEzB,YAAY,UAAkB,EAAE,OAAe;QAC7C,KAAK,CACH,qBAAqB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,0BAA0B,IAAI,CAAC,KAAK,CACpF,OAAO,GAAG,IAAI,CACf,sEAAsE,CACxE,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACtC,OAAO,CAAS;IAChB,MAAM,CAAuB;IAEtC,YAAY,OAAe,EAAE,MAA4B;QACvD,KAAK,CAAC,4BAA4B,OAAO,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,UAAU,CAAiC;IAEpD,YAAY,OAAe,EAAE,UAA0C;QACrE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,OAAO,CAAS;IAChB,aAAa,CAAS;IACtB,WAAW,CAAS;IACpB,KAAK,CAAQ;IAEtB,YAAY,OAAe,EAAE,aAAqB,EAAE,WAAmB,EAAE,KAAY;QACnF,KAAK,CAAC,QAAQ,OAAO,eAAe,WAAW,kBAAkB,aAAa,WAAW,CAAC,CAAC;QAC3F,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF"}
|
package/dist/jobs/index.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
export { defineJob } from './define-job.js';
|
|
2
|
-
export { type
|
|
2
|
+
export { type EventBridgeSchedulerConfig, EventBridgeSchedulerDriver, type ScheduleResult, } from './drivers/eventbridge-scheduler-driver.js';
|
|
3
|
+
export { type MockEnqueuedJob, MockQueueDriver, type MockQueueDriverConfig, } from './drivers/mock-driver.js';
|
|
3
4
|
export { type SQSDriverConfig, SQSQueueDriver } from './drivers/sqs-driver.js';
|
|
4
|
-
export {
|
|
5
|
+
export { InvalidJobPayloadError, PayloadTooLargeError, PermanentJobError, RetryExhaustedError, TransientJobError, } from './errors.js';
|
|
5
6
|
export { createJobRegistry, JobRegistry } from './job-registry.js';
|
|
6
7
|
export { JobService, type JobServiceConfig, type JobServiceHooks, } from './job-service.js';
|
|
7
8
|
export { definePeriodicJob } from './periodic-job.js';
|
|
8
9
|
export { createSchedulerHandler, type SchedulerConfig } from './scheduler.js';
|
|
9
|
-
export type { Duration, EnqueueResult, JobContext, JobDefinition, JobHandler, JobMessage, QueueDriver,
|
|
10
|
+
export type { AnyJobDefinition, Duration, EnqueueResult, JobContext, JobDefinition, JobHandler, JobMessage, QueueDriver, RetryConfig, } from './types.js';
|
|
10
11
|
export { bootstrapWorker } from './worker.js';
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/jobs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,KAAK,0BAA0B,EAC/B,0BAA0B,EAC1B,KAAK,cAAc,GACpB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,KAAK,eAAe,EACpB,eAAe,EACf,KAAK,qBAAqB,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC9E,YAAY,EACV,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,UAAU,EACV,aAAa,EACb,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/jobs/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { defineJob } from './define-job.js';
|
|
2
|
-
export {
|
|
2
|
+
export { EventBridgeSchedulerDriver, } from './drivers/eventbridge-scheduler-driver.js';
|
|
3
|
+
export { MockQueueDriver, } from './drivers/mock-driver.js';
|
|
3
4
|
export { SQSQueueDriver } from './drivers/sqs-driver.js';
|
|
4
|
-
export {
|
|
5
|
+
export { InvalidJobPayloadError, PayloadTooLargeError, PermanentJobError, RetryExhaustedError, TransientJobError, } from './errors.js';
|
|
5
6
|
export { createJobRegistry, JobRegistry } from './job-registry.js';
|
|
6
7
|
export { JobService, } from './job-service.js';
|
|
7
8
|
export { definePeriodicJob } from './periodic-job.js';
|
package/dist/jobs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAEL,0BAA0B,GAE3B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEL,eAAe,GAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAwB,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,UAAU,GAGX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAwB,MAAM,gBAAgB,CAAC;AAY9E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { JobDefinition } from './types.js';
|
|
1
|
+
import type { AnyJobDefinition, JobDefinition } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Registry for job definitions.
|
|
4
4
|
*/
|
|
5
5
|
export declare class JobRegistry {
|
|
6
6
|
private readonly jobs;
|
|
7
|
-
constructor(initialJobs?:
|
|
7
|
+
constructor(initialJobs?: AnyJobDefinition[]);
|
|
8
8
|
/**
|
|
9
9
|
* Register a job definition. Throws if a job with the same name already exists.
|
|
10
10
|
*/
|
|
@@ -20,7 +20,7 @@ export declare class JobRegistry {
|
|
|
20
20
|
/**
|
|
21
21
|
* List all registered jobs.
|
|
22
22
|
*/
|
|
23
|
-
list():
|
|
23
|
+
list(): AnyJobDefinition[];
|
|
24
24
|
/**
|
|
25
25
|
* Number of registered jobs.
|
|
26
26
|
*/
|
|
@@ -29,5 +29,5 @@ export declare class JobRegistry {
|
|
|
29
29
|
/**
|
|
30
30
|
* Convenience helper to build a registry from an array.
|
|
31
31
|
*/
|
|
32
|
-
export declare function createJobRegistry(jobs?:
|
|
32
|
+
export declare function createJobRegistry(jobs?: AnyJobDefinition[]): JobRegistry;
|
|
33
33
|
//# sourceMappingURL=job-registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-registry.d.ts","sourceRoot":"","sources":["../../src/jobs/job-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"job-registry.d.ts","sourceRoot":"","sources":["../../src/jobs/job-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAElE;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuC;gBAEhD,WAAW,GAAE,gBAAgB,EAAO;IAMhD;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI;IAQtD;;OAEG;IACH,GAAG,CAAC,QAAQ,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,SAAS;IAI1E;;OAEG;IACH,UAAU,CAAC,QAAQ,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;IAQrE;;OAEG;IACH,IAAI,IAAI,gBAAgB,EAAE;IAI1B;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,gBAAgB,EAAO,GAAG,WAAW,CAE5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-registry.js","sourceRoot":"","sources":["../../src/jobs/job-registry.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,WAAW;IACL,IAAI,GAAG,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"job-registry.js","sourceRoot":"","sources":["../../src/jobs/job-registry.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,WAAW;IACL,IAAI,GAAG,IAAI,GAAG,EAA4B,CAAC;IAE5D,YAAY,cAAkC,EAAE;QAC9C,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAW,GAA4B;QAC7C,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAuB,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,GAAG,CAAqB,IAAY;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAwC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,UAAU,CAAqB,IAAY;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAW,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,yBAAyB,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA2B,EAAE;IAC7D,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
|
package/dist/jobs/job-service.js
CHANGED
|
@@ -13,7 +13,7 @@ export class JobService {
|
|
|
13
13
|
constructor(driver, config = {}, hooks) {
|
|
14
14
|
this.driver = driver;
|
|
15
15
|
this.hooks = hooks;
|
|
16
|
-
this.defaultQueue = config.defaultQueue ?? 'default';
|
|
16
|
+
this.defaultQueue = config.defaultQueue ?? driver.defaultQueue ?? 'default';
|
|
17
17
|
this.maxPayloadBytes = config.maxPayloadBytes ?? DEFAULT_MAX_PAYLOAD_BYTES;
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-service.js","sourceRoot":"","sources":["../../src/jobs/job-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE3E,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,yBAAyB,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ;AAkBtD;;GAEG;AACH,MAAM,OAAO,UAAU;IAKF;IAEA;IANF,YAAY,CAAS;IACrB,eAAe,CAAS;IAEzC,YACmB,MAAmB,EACpC,SAA2B,EAAE,EACZ,KAAuB;QAFvB,WAAM,GAAN,MAAM,CAAa;QAEnB,UAAK,GAAL,KAAK,CAAkB;QAExC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"job-service.js","sourceRoot":"","sources":["../../src/jobs/job-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule-constants.d.ts","sourceRoot":"","sources":["../../src/jobs/schedule-constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"schedule-constants.d.ts","sourceRoot":"","sources":["../../src/jobs/schedule-constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,qBAAqB,QAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule-constants.js","sourceRoot":"","sources":["../../src/jobs/schedule-constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"schedule-constants.js","sourceRoot":"","sources":["../../src/jobs/schedule-constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,GAAG,EAAE,CAAC"}
|
package/dist/jobs/scheduler.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export interface SchedulerConfig {
|
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
11
|
* Create a scheduler handler that reads due jobs from DynamoDB and enqueues them.
|
|
12
|
-
* Intended to be triggered
|
|
12
|
+
* Intended to be triggered periodically (e.g., every minute via EventBridge).
|
|
13
13
|
*/
|
|
14
14
|
export declare function createSchedulerHandler(config: SchedulerConfig): () => Promise<{
|
|
15
15
|
dispatched: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/jobs/scheduler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/jobs/scheduler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiDD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe;;GA4D7D"}
|
package/dist/jobs/scheduler.js
CHANGED
|
@@ -1,9 +1,38 @@
|
|
|
1
1
|
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
|
|
2
2
|
import { DeleteCommand, DynamoDBDocumentClient, QueryCommand } from '@aws-sdk/lib-dynamodb';
|
|
3
3
|
import { createLogger } from '../utils/logger.js';
|
|
4
|
+
/**
|
|
5
|
+
* Parse a scheduled item from DynamoDB into a job dispatch payload.
|
|
6
|
+
* Returns null if the item is invalid or malformed.
|
|
7
|
+
*/
|
|
8
|
+
function parseScheduledItem(item, logger) {
|
|
9
|
+
const jobName = item.jobName;
|
|
10
|
+
const jobId = item.sk;
|
|
11
|
+
if (!jobName || !jobId) {
|
|
12
|
+
logger.warn('Skipping scheduled item with missing required fields', {
|
|
13
|
+
hasJobName: !!jobName,
|
|
14
|
+
hasJobId: !!jobId,
|
|
15
|
+
});
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
let payload;
|
|
19
|
+
try {
|
|
20
|
+
payload = item.payload ? JSON.parse(item.payload) : undefined;
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
logger.error('Failed to parse scheduled job payload', { jobName, jobId, error });
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
jobName,
|
|
28
|
+
jobId,
|
|
29
|
+
payload,
|
|
30
|
+
queue: item.queue ?? 'default',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
4
33
|
/**
|
|
5
34
|
* Create a scheduler handler that reads due jobs from DynamoDB and enqueues them.
|
|
6
|
-
* Intended to be triggered
|
|
35
|
+
* Intended to be triggered periodically (e.g., every minute via EventBridge).
|
|
7
36
|
*/
|
|
8
37
|
export function createSchedulerHandler(config) {
|
|
9
38
|
const logger = config.logger ?? createLogger('JobScheduler');
|
|
@@ -24,19 +53,26 @@ export function createSchedulerHandler(config) {
|
|
|
24
53
|
}
|
|
25
54
|
let dispatched = 0;
|
|
26
55
|
for (const item of result.Items) {
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
56
|
+
const parsed = parseScheduledItem(item, logger);
|
|
57
|
+
if (!parsed) {
|
|
58
|
+
// Delete malformed items to prevent infinite retries
|
|
59
|
+
if (item.sk) {
|
|
60
|
+
await docClient.send(new DeleteCommand({
|
|
61
|
+
TableName: config.tableName,
|
|
62
|
+
Key: { pk: partition, sk: item.sk },
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
31
67
|
await config.driver.enqueue({
|
|
32
|
-
jobName,
|
|
33
|
-
payload,
|
|
34
|
-
queue,
|
|
35
|
-
jobId,
|
|
68
|
+
jobName: parsed.jobName,
|
|
69
|
+
payload: parsed.payload,
|
|
70
|
+
queue: parsed.queue,
|
|
71
|
+
jobId: parsed.jobId,
|
|
36
72
|
});
|
|
37
73
|
await docClient.send(new DeleteCommand({
|
|
38
74
|
TableName: config.tableName,
|
|
39
|
-
Key: { pk: partition, sk: jobId },
|
|
75
|
+
Key: { pk: partition, sk: parsed.jobId },
|
|
40
76
|
}));
|
|
41
77
|
dispatched += 1;
|
|
42
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/jobs/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE5F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/jobs/scheduler.ts"],"names":[],"mappings":"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"}
|