@contractspec/lib.jobs 1.57.0 → 1.59.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.
- package/dist/contracts/index.d.ts +494 -500
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +298 -461
- package/dist/entities/index.d.ts +117 -122
- package/dist/entities/index.d.ts.map +1 -1
- package/dist/entities/index.js +170 -193
- package/dist/events.d.ts +297 -303
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +199 -351
- package/dist/handlers/gmail-sync-handler.d.ts +5 -9
- package/dist/handlers/gmail-sync-handler.d.ts.map +1 -1
- package/dist/handlers/gmail-sync-handler.js +8 -8
- package/dist/handlers/index.d.ts +5 -9
- package/dist/handlers/index.d.ts.map +1 -1
- package/dist/handlers/index.js +53 -10
- package/dist/handlers/ping-job.d.ts +6 -10
- package/dist/handlers/ping-job.d.ts.map +1 -1
- package/dist/handlers/ping-job.js +13 -12
- package/dist/handlers/storage-document-handler.d.ts +7 -11
- package/dist/handlers/storage-document-handler.d.ts.map +1 -1
- package/dist/handlers/storage-document-handler.js +15 -13
- package/dist/index.d.ts +7 -24
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1366 -64
- package/dist/jobs.capability.d.ts +2 -7
- package/dist/jobs.capability.d.ts.map +1 -1
- package/dist/jobs.capability.js +29 -33
- package/dist/jobs.feature.d.ts +1 -6
- package/dist/jobs.feature.d.ts.map +1 -1
- package/dist/jobs.feature.js +45 -108
- package/dist/node/contracts/index.js +318 -0
- package/dist/node/entities/index.js +174 -0
- package/dist/node/events.js +200 -0
- package/dist/node/handlers/gmail-sync-handler.js +9 -0
- package/dist/node/handlers/index.js +55 -0
- package/dist/node/handlers/ping-job.js +14 -0
- package/dist/node/handlers/storage-document-handler.js +16 -0
- package/dist/node/index.js +1368 -0
- package/dist/node/jobs.capability.js +28 -0
- package/dist/node/jobs.feature.js +46 -0
- package/dist/node/queue/gcp-cloud-tasks.js +66 -0
- package/dist/node/queue/gcp-pubsub.js +54 -0
- package/dist/node/queue/index.js +478 -0
- package/dist/node/queue/memory-queue.js +160 -0
- package/dist/node/queue/register-defined-job.js +15 -0
- package/dist/node/queue/scaleway-sqs-queue.js +206 -0
- package/dist/node/queue/types.js +10 -0
- package/dist/node/scheduler/index.js +117 -0
- package/dist/queue/gcp-cloud-tasks.d.ts +33 -36
- package/dist/queue/gcp-cloud-tasks.d.ts.map +1 -1
- package/dist/queue/gcp-cloud-tasks.js +65 -59
- package/dist/queue/gcp-pubsub.d.ts +18 -21
- package/dist/queue/gcp-pubsub.d.ts.map +1 -1
- package/dist/queue/gcp-pubsub.js +53 -45
- package/dist/queue/index.d.ts +6 -15
- package/dist/queue/index.d.ts.map +1 -1
- package/dist/queue/index.js +476 -20
- package/dist/queue/memory-queue.d.ts +25 -29
- package/dist/queue/memory-queue.d.ts.map +1 -1
- package/dist/queue/memory-queue.js +159 -138
- package/dist/queue/register-defined-job.d.ts +3 -7
- package/dist/queue/register-defined-job.d.ts.map +1 -1
- package/dist/queue/register-defined-job.js +14 -14
- package/dist/queue/scaleway-sqs-queue.d.ts +31 -35
- package/dist/queue/scaleway-sqs-queue.d.ts.map +1 -1
- package/dist/queue/scaleway-sqs-queue.js +205 -173
- package/dist/queue/types.d.ts +2 -8
- package/dist/queue/types.d.ts.map +1 -1
- package/dist/queue/types.js +11 -12
- package/dist/scheduler/index.d.ts +68 -72
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +113 -141
- package/package.json +176 -50
- package/dist/_virtual/_rolldown/runtime.js +0 -36
- package/dist/contracts/index.js.map +0 -1
- package/dist/entities/index.js.map +0 -1
- package/dist/events.js.map +0 -1
- package/dist/handlers/gmail-sync-handler.js.map +0 -1
- package/dist/handlers/index.js.map +0 -1
- package/dist/handlers/ping-job.js.map +0 -1
- package/dist/handlers/storage-document-handler.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/jobs.capability.js.map +0 -1
- package/dist/jobs.feature.js.map +0 -1
- package/dist/queue/gcp-cloud-tasks.js.map +0 -1
- package/dist/queue/gcp-pubsub.js.map +0 -1
- package/dist/queue/index.js.map +0 -1
- package/dist/queue/memory-queue.js.map +0 -1
- package/dist/queue/register-defined-job.js.map +0 -1
- package/dist/queue/scaleway-sqs-queue.js.map +0 -1
- package/dist/queue/types.js.map +0 -1
- package/dist/scheduler/index.js.map +0 -1
|
@@ -1,175 +1,207 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
// @bun
|
|
2
|
+
// src/queue/types.ts
|
|
3
|
+
export * from "@contractspec/lib.contracts/jobs/queue";
|
|
4
|
+
import {
|
|
5
|
+
calculateBackoff,
|
|
6
|
+
DEFAULT_RETRY_POLICY
|
|
7
|
+
} from "@contractspec/lib.contracts/jobs/queue";
|
|
4
8
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
9
|
+
// src/queue/scaleway-sqs-queue.ts
|
|
10
|
+
import { randomUUID } from "crypto";
|
|
11
|
+
import {
|
|
12
|
+
DeleteMessageCommand,
|
|
13
|
+
ReceiveMessageCommand,
|
|
14
|
+
SendMessageCommand,
|
|
15
|
+
SQSClient
|
|
16
|
+
} from "@aws-sdk/client-sqs";
|
|
17
|
+
class ScalewaySqsJobQueue {
|
|
18
|
+
sqs;
|
|
19
|
+
queueUrl;
|
|
20
|
+
waitTimeSeconds;
|
|
21
|
+
maxNumberOfMessages;
|
|
22
|
+
visibilityTimeoutSeconds;
|
|
23
|
+
handlers = new Map;
|
|
24
|
+
logger;
|
|
25
|
+
running = false;
|
|
26
|
+
constructor(config) {
|
|
27
|
+
this.logger = config.logger;
|
|
28
|
+
const accessKeyId = config.credentials?.accessKeyId ?? process.env.SCALEWAY_ACCESS_KEY_QUEUE;
|
|
29
|
+
const secretAccessKey = config.credentials?.secretAccessKey ?? process.env.SCALEWAY_SECRET_KEY_QUEUE;
|
|
30
|
+
if (!accessKeyId || !secretAccessKey) {
|
|
31
|
+
throw new Error("Missing SCALEWAY_ACCESS_KEY_QUEUE / SCALEWAY_SECRET_KEY_QUEUE in env");
|
|
32
|
+
}
|
|
33
|
+
const region = config.region ?? process.env.SCALEWAY_REGION ?? "par";
|
|
34
|
+
const endpoint = config.endpoint ?? "https://sqs.mnq.fr-par.scaleway.com";
|
|
35
|
+
this.sqs = new SQSClient({
|
|
36
|
+
region,
|
|
37
|
+
endpoint,
|
|
38
|
+
credentials: {
|
|
39
|
+
accessKeyId,
|
|
40
|
+
secretAccessKey
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
this.queueUrl = config.queueUrl;
|
|
44
|
+
this.waitTimeSeconds = config.waitTimeSeconds ?? 20;
|
|
45
|
+
this.maxNumberOfMessages = config.maxNumberOfMessages ?? 5;
|
|
46
|
+
this.visibilityTimeoutSeconds = config.visibilityTimeoutSeconds ?? 60;
|
|
47
|
+
}
|
|
48
|
+
async enqueue(jobType, payload, options = {}) {
|
|
49
|
+
const id = randomUUID();
|
|
50
|
+
const now = new Date;
|
|
51
|
+
const scheduledAt = options.delaySeconds ? new Date(now.getTime() + options.delaySeconds * 1000) : now;
|
|
52
|
+
const envelope = {
|
|
53
|
+
id,
|
|
54
|
+
type: jobType,
|
|
55
|
+
payload
|
|
56
|
+
};
|
|
57
|
+
await this.sqs.send(new SendMessageCommand({
|
|
58
|
+
QueueUrl: this.queueUrl,
|
|
59
|
+
MessageBody: JSON.stringify(envelope),
|
|
60
|
+
DelaySeconds: options.delaySeconds ?? 0
|
|
61
|
+
}));
|
|
62
|
+
return {
|
|
63
|
+
id,
|
|
64
|
+
type: jobType,
|
|
65
|
+
version: "1.0.0",
|
|
66
|
+
payload,
|
|
67
|
+
status: "pending",
|
|
68
|
+
priority: options.priority ?? 0,
|
|
69
|
+
attempts: 0,
|
|
70
|
+
maxRetries: options.maxRetries ?? DEFAULT_RETRY_POLICY.maxRetries,
|
|
71
|
+
createdAt: now,
|
|
72
|
+
updatedAt: now,
|
|
73
|
+
scheduledAt,
|
|
74
|
+
dedupeKey: options.dedupeKey,
|
|
75
|
+
tenantId: options.tenantId,
|
|
76
|
+
userId: options.userId,
|
|
77
|
+
traceId: options.traceId,
|
|
78
|
+
metadata: options.metadata
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
register(jobType, handler) {
|
|
82
|
+
if (this.handlers.has(jobType)) {
|
|
83
|
+
throw new Error(`Handler already registered for job type "${jobType}"`);
|
|
84
|
+
}
|
|
85
|
+
this.handlers.set(jobType, handler);
|
|
86
|
+
}
|
|
87
|
+
start() {
|
|
88
|
+
if (this.running)
|
|
89
|
+
return;
|
|
90
|
+
this.running = true;
|
|
91
|
+
this.pollLoop().catch((error) => {
|
|
92
|
+
this.logger?.error?.("jobs.queue.scaleway_sqs.poll_loop_fatal", {
|
|
93
|
+
error: error instanceof Error ? error.message : String(error)
|
|
94
|
+
});
|
|
95
|
+
this.running = false;
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async stop() {
|
|
99
|
+
this.running = false;
|
|
100
|
+
}
|
|
101
|
+
async pollLoop() {
|
|
102
|
+
this.logger?.info?.("jobs.queue.scaleway_sqs.started", {
|
|
103
|
+
queueUrl: this.queueUrl
|
|
104
|
+
});
|
|
105
|
+
while (this.running) {
|
|
106
|
+
try {
|
|
107
|
+
const res = await this.sqs.send(new ReceiveMessageCommand({
|
|
108
|
+
QueueUrl: this.queueUrl,
|
|
109
|
+
MaxNumberOfMessages: this.maxNumberOfMessages,
|
|
110
|
+
WaitTimeSeconds: this.waitTimeSeconds,
|
|
111
|
+
VisibilityTimeout: this.visibilityTimeoutSeconds,
|
|
112
|
+
MessageSystemAttributeNames: ["ApproximateReceiveCount"]
|
|
113
|
+
}));
|
|
114
|
+
const messages = res.Messages ?? [];
|
|
115
|
+
if (messages.length === 0) {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
for (const msg of messages) {
|
|
119
|
+
if (!msg.Body || !msg.ReceiptHandle) {
|
|
120
|
+
this.logger?.warn?.("jobs.queue.scaleway_sqs.invalid_message", {
|
|
121
|
+
messageId: msg.MessageId,
|
|
122
|
+
reason: "missing_body_or_receipt"
|
|
123
|
+
});
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
let envelope;
|
|
127
|
+
try {
|
|
128
|
+
envelope = JSON.parse(msg.Body);
|
|
129
|
+
} catch (err) {
|
|
130
|
+
this.logger?.warn?.("jobs.queue.scaleway_sqs.parse_failed", {
|
|
131
|
+
messageId: msg.MessageId,
|
|
132
|
+
error: err instanceof Error ? err.message : String(err)
|
|
133
|
+
});
|
|
134
|
+
await this.deleteMessage(msg.ReceiptHandle);
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const handler = this.handlers.get(envelope.type);
|
|
138
|
+
if (!handler) {
|
|
139
|
+
this.logger?.warn?.("jobs.queue.scaleway_sqs.missing_handler", {
|
|
140
|
+
jobType: envelope.type,
|
|
141
|
+
messageId: msg.MessageId
|
|
142
|
+
});
|
|
143
|
+
await this.deleteMessage(msg.ReceiptHandle);
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const now = new Date;
|
|
147
|
+
const attempts = parseInt(msg.Attributes?.ApproximateReceiveCount ?? "1", 10);
|
|
148
|
+
const job = {
|
|
149
|
+
id: envelope.id,
|
|
150
|
+
type: envelope.type,
|
|
151
|
+
version: "1.0.0",
|
|
152
|
+
payload: envelope.payload,
|
|
153
|
+
status: "pending",
|
|
154
|
+
priority: 0,
|
|
155
|
+
attempts,
|
|
156
|
+
maxRetries: DEFAULT_RETRY_POLICY.maxRetries,
|
|
157
|
+
createdAt: now,
|
|
158
|
+
updatedAt: now
|
|
159
|
+
};
|
|
160
|
+
job.status = "running";
|
|
161
|
+
job.updatedAt = new Date;
|
|
162
|
+
try {
|
|
163
|
+
await handler(job);
|
|
164
|
+
job.status = "completed";
|
|
165
|
+
job.updatedAt = new Date;
|
|
166
|
+
await this.deleteMessage(msg.ReceiptHandle);
|
|
167
|
+
} catch (err) {
|
|
168
|
+
job.status = "failed";
|
|
169
|
+
job.lastError = err instanceof Error ? err.message : "Unknown job error";
|
|
170
|
+
job.updatedAt = new Date;
|
|
171
|
+
this.logger?.error?.("jobs.queue.scaleway_sqs.job_failed", {
|
|
172
|
+
jobType: job.type,
|
|
173
|
+
jobId: job.id,
|
|
174
|
+
error: err instanceof Error ? err.message : String(err)
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
} catch (err) {
|
|
179
|
+
this.logger?.error?.("jobs.queue.scaleway_sqs.poll_error", {
|
|
180
|
+
error: err instanceof Error ? err.message : String(err)
|
|
181
|
+
});
|
|
182
|
+
await this.sleep(5000);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
this.logger?.info?.("jobs.queue.scaleway_sqs.stopped", {
|
|
186
|
+
queueUrl: this.queueUrl
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
async deleteMessage(receiptHandle) {
|
|
190
|
+
try {
|
|
191
|
+
await this.sqs.send(new DeleteMessageCommand({
|
|
192
|
+
QueueUrl: this.queueUrl,
|
|
193
|
+
ReceiptHandle: receiptHandle
|
|
194
|
+
}));
|
|
195
|
+
} catch (err) {
|
|
196
|
+
this.logger?.warn?.("jobs.queue.scaleway_sqs.delete_failed", {
|
|
197
|
+
error: err instanceof Error ? err.message : String(err)
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async sleep(ms) {
|
|
202
|
+
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
export {
|
|
206
|
+
ScalewaySqsJobQueue
|
|
171
207
|
};
|
|
172
|
-
|
|
173
|
-
//#endregion
|
|
174
|
-
export { ScalewaySqsJobQueue };
|
|
175
|
-
//# sourceMappingURL=scaleway-sqs-queue.js.map
|
package/dist/queue/types.d.ts
CHANGED
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
//#region src/queue/types.d.ts
|
|
5
|
-
|
|
6
|
-
import * as import__contractspec_lib_contracts_jobs_queue from "@contractspec/lib.contracts/jobs/queue";
|
|
7
|
-
//#endregion
|
|
8
|
-
export { import__contractspec_lib_contracts_jobs_queue as types_d_exports };
|
|
1
|
+
export * from '@contractspec/lib.contracts/jobs/queue';
|
|
2
|
+
export { calculateBackoff, DEFAULT_RETRY_POLICY, } from '@contractspec/lib.contracts/jobs/queue';
|
|
9
3
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/queue/types.ts"],"names":[],"mappings":"AAAA,cAAc,wCAAwC,CAAC;AACvD,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,wCAAwC,CAAC"}
|
package/dist/queue/types.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export * from "@contractspec/lib.contracts/jobs/queue"
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
//# sourceMappingURL=types.js.map
|
|
1
|
+
// @bun
|
|
2
|
+
// src/queue/types.ts
|
|
3
|
+
export * from "@contractspec/lib.contracts/jobs/queue";
|
|
4
|
+
import {
|
|
5
|
+
calculateBackoff,
|
|
6
|
+
DEFAULT_RETRY_POLICY
|
|
7
|
+
} from "@contractspec/lib.contracts/jobs/queue";
|
|
8
|
+
export {
|
|
9
|
+
calculateBackoff,
|
|
10
|
+
DEFAULT_RETRY_POLICY
|
|
11
|
+
};
|
|
@@ -1,92 +1,88 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
//#region src/scheduler/index.d.ts
|
|
1
|
+
import type { JobQueue, EnqueueOptions } from '../queue/types';
|
|
4
2
|
/**
|
|
5
3
|
* Scheduled job configuration.
|
|
6
4
|
*/
|
|
7
|
-
interface ScheduledJobConfig {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
5
|
+
export interface ScheduledJobConfig {
|
|
6
|
+
/** Unique name for the schedule */
|
|
7
|
+
name: string;
|
|
8
|
+
/** Cron expression (e.g., '0 0 * * *' for daily at midnight) */
|
|
9
|
+
cronExpression: string;
|
|
10
|
+
/** Job type to enqueue */
|
|
11
|
+
jobType: string;
|
|
12
|
+
/** Job payload (can be a function for dynamic payloads) */
|
|
13
|
+
payload?: unknown | (() => unknown | Promise<unknown>);
|
|
14
|
+
/** Enqueue options */
|
|
15
|
+
options?: EnqueueOptions;
|
|
16
|
+
/** Timezone for cron evaluation (default: UTC) */
|
|
17
|
+
timezone?: string;
|
|
18
|
+
/** Whether the schedule is enabled */
|
|
19
|
+
enabled?: boolean;
|
|
20
|
+
/** Description */
|
|
21
|
+
description?: string;
|
|
24
22
|
}
|
|
25
23
|
/**
|
|
26
24
|
* Active scheduled job with next run time.
|
|
27
25
|
*/
|
|
28
|
-
interface ActiveSchedule extends ScheduledJobConfig {
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
export interface ActiveSchedule extends ScheduledJobConfig {
|
|
27
|
+
nextRun: Date | null;
|
|
28
|
+
lastRun: Date | null;
|
|
31
29
|
}
|
|
32
30
|
/**
|
|
33
31
|
* Job scheduler for recurring jobs.
|
|
34
32
|
*/
|
|
35
|
-
declare class JobScheduler {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
33
|
+
export declare class JobScheduler {
|
|
34
|
+
private readonly queue;
|
|
35
|
+
private readonly schedules;
|
|
36
|
+
private timer?;
|
|
37
|
+
private readonly checkIntervalMs;
|
|
38
|
+
constructor(queue: JobQueue, options?: {
|
|
39
|
+
checkIntervalMs?: number;
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* Add a scheduled job.
|
|
43
|
+
*/
|
|
44
|
+
schedule(config: ScheduledJobConfig): void;
|
|
45
|
+
/**
|
|
46
|
+
* Remove a scheduled job.
|
|
47
|
+
*/
|
|
48
|
+
unschedule(name: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Enable a scheduled job.
|
|
51
|
+
*/
|
|
52
|
+
enable(name: string): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Disable a scheduled job.
|
|
55
|
+
*/
|
|
56
|
+
disable(name: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Get all schedules.
|
|
59
|
+
*/
|
|
60
|
+
getSchedules(): ActiveSchedule[];
|
|
61
|
+
/**
|
|
62
|
+
* Get a specific schedule.
|
|
63
|
+
*/
|
|
64
|
+
getSchedule(name: string): ActiveSchedule | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* Start the scheduler.
|
|
67
|
+
*/
|
|
68
|
+
start(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Stop the scheduler.
|
|
71
|
+
*/
|
|
72
|
+
stop(): void;
|
|
73
|
+
/**
|
|
74
|
+
* Check and enqueue due schedules.
|
|
75
|
+
*/
|
|
76
|
+
private checkSchedules;
|
|
79
77
|
}
|
|
80
78
|
/**
|
|
81
79
|
* Create a job scheduler instance.
|
|
82
80
|
*/
|
|
83
|
-
declare function createScheduler(queue:
|
|
84
|
-
|
|
81
|
+
export declare function createScheduler(queue: JobQueue, options?: {
|
|
82
|
+
checkIntervalMs?: number;
|
|
85
83
|
}): JobScheduler;
|
|
86
84
|
/**
|
|
87
85
|
* Helper to define a scheduled job configuration.
|
|
88
86
|
*/
|
|
89
|
-
declare function defineSchedule(config: ScheduledJobConfig): ScheduledJobConfig;
|
|
90
|
-
//#endregion
|
|
91
|
-
export { ActiveSchedule, JobScheduler, ScheduledJobConfig, createScheduler, defineSchedule };
|
|
87
|
+
export declare function defineSchedule(config: ScheduledJobConfig): ScheduledJobConfig;
|
|
92
88
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;IACvB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACvD,sBAAsB;IACtB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,kBAAkB;IACxD,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;CACtB;AAwDD;;GAEG;AACH,qBAAa,YAAY;IAMrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IALxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAC/D,OAAO,CAAC,KAAK,CAAC,CAAiC;IAC/C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAGtB,KAAK,EAAE,QAAQ,EAChC,OAAO,GAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAA;KAAO;IAK5C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAY1C;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAS7B;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAS9B;;OAEG;IACH,YAAY,IAAI,cAAc,EAAE;IAIhC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIrD;;OAEG;IACH,KAAK,IAAI,IAAI;IAYb;;OAEG;IACH,IAAI,IAAI,IAAI;IAOZ;;OAEG;YACW,cAAc;CA6B7B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,QAAQ,EACf,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GACrC,YAAY,CAEd;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,kBAAkB,CAE7E"}
|