@crewx/cron 0.1.10-rc.16 → 0.1.10-rc.161

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.
@@ -0,0 +1,612 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.CRON_RUNTIME_PROCESS_LEASE_FILENAME = void 0;
37
+ exports.createCronRuntime = createCronRuntime;
38
+ const node_crypto_1 = require("node:crypto");
39
+ const path = __importStar(require("node:path"));
40
+ const sdk_1 = require("@crewx/sdk");
41
+ const engine_1 = require("./engine");
42
+ exports.CRON_RUNTIME_PROCESS_LEASE_FILENAME = 'cron-runtime-process-lease.json';
43
+ const DEFAULT_STOP_DEADLINE_MS = 5000;
44
+ const localOwnerRegistry = new Map();
45
+ function errorDetails(error) {
46
+ const candidate = error;
47
+ return {
48
+ ...(typeof candidate?.code === 'string' ? { code: candidate.code } : {}),
49
+ message: candidate?.message instanceof String
50
+ ? candidate.message.toString()
51
+ : candidate && typeof candidate.message === 'string'
52
+ ? candidate.message
53
+ : String(error),
54
+ };
55
+ }
56
+ function cloneWorkspaceStatus(status) {
57
+ return {
58
+ ...status,
59
+ ...(status.lastError ? { lastError: { ...status.lastError } } : {}),
60
+ };
61
+ }
62
+ function localOwnerKey(leasePath, ownerId) {
63
+ return `${leasePath}\u0000${ownerId}`;
64
+ }
65
+ function safeResolveLeasePath(leasePath) {
66
+ try {
67
+ return (0, sdk_1.resolveProcessLeasePath)(leasePath);
68
+ }
69
+ catch {
70
+ return path.resolve(leasePath);
71
+ }
72
+ }
73
+ function stopDeadline(deadlineMs) {
74
+ if (deadlineMs === undefined)
75
+ return DEFAULT_STOP_DEADLINE_MS;
76
+ if (!Number.isFinite(deadlineMs))
77
+ return DEFAULT_STOP_DEADLINE_MS;
78
+ return Math.max(0, deadlineMs);
79
+ }
80
+ class CronRuntimeImpl {
81
+ constructor(options = {}) {
82
+ this.runtimeToken = Symbol('cron-runtime');
83
+ this.enabled = false;
84
+ this.draining = false;
85
+ this.stopped = false;
86
+ this.role = 'standby';
87
+ this.ownerId = null;
88
+ this.leaseId = null;
89
+ this.workspaces = new Map();
90
+ this.workspaceRevisions = new Map();
91
+ this.workspaceFences = new Map();
92
+ this.operations = new Set();
93
+ this.reconcileQueue = Promise.resolve();
94
+ this.requestedLeasePath = options.leasePath ?? exports.CRON_RUNTIME_PROCESS_LEASE_FILENAME;
95
+ this.resolvedLeasePath = safeResolveLeasePath(this.requestedLeasePath);
96
+ this.configuredOwnerId = options.ownerId;
97
+ this.leaseProvider = options.processLease
98
+ ?? options.leaseProvider
99
+ ?? { acquire: sdk_1.acquireProcessLease };
100
+ this.storeFactory = options.storeFactory
101
+ ?? ((workspace) => (0, engine_1.createScheduleStore)(workspace.path));
102
+ this.executor = options.executeSchedule ?? options.executor ?? engine_1.executeSchedule;
103
+ this.runPredicate = options.shouldRunNow ?? engine_1.shouldRunNow;
104
+ this.testHooks = options.testHooks;
105
+ }
106
+ nextWorkspaceRevision(workspaceId) {
107
+ const revision = (this.workspaceRevisions.get(workspaceId) ?? 0) + 1;
108
+ this.workspaceRevisions.set(workspaceId, revision);
109
+ return revision;
110
+ }
111
+ isWorkspaceFenced(workspaceId) {
112
+ return (this.workspaceFences.get(workspaceId)?.size ?? 0) > 0;
113
+ }
114
+ setWorkspaceFenceStatus(workspaceId, fenced) {
115
+ const entry = this.workspaces.get(workspaceId);
116
+ if (!entry)
117
+ return;
118
+ entry.status = { ...entry.status, fenced };
119
+ }
120
+ register(workspace) {
121
+ if (this.stopped || this.draining)
122
+ return this.status();
123
+ const previous = this.workspaces.get(workspace.id);
124
+ const revision = previous && previous.workspace.path === workspace.path
125
+ ? previous.revision
126
+ : this.nextWorkspaceRevision(workspace.id);
127
+ this.workspaces.set(workspace.id, {
128
+ workspace: { ...workspace },
129
+ revision,
130
+ status: {
131
+ id: workspace.id,
132
+ path: workspace.path,
133
+ state: 'registered',
134
+ scheduleCount: 0,
135
+ revision,
136
+ fenced: this.isWorkspaceFenced(workspace.id),
137
+ },
138
+ });
139
+ return this.status();
140
+ }
141
+ unregister(workspaceId) {
142
+ if (this.workspaces.delete(workspaceId))
143
+ this.nextWorkspaceRevision(workspaceId);
144
+ this.workspaceFences.delete(workspaceId);
145
+ return this.status();
146
+ }
147
+ fence(workspaceId) {
148
+ const token = (0, node_crypto_1.randomUUID)();
149
+ const tokens = this.workspaceFences.get(workspaceId) ?? new Set();
150
+ tokens.add(token);
151
+ this.workspaceFences.set(workspaceId, tokens);
152
+ this.setWorkspaceFenceStatus(workspaceId, true);
153
+ return {
154
+ token,
155
+ status: this.status(workspaceId),
156
+ };
157
+ }
158
+ releaseFence(workspaceId, token) {
159
+ const tokens = this.workspaceFences.get(workspaceId);
160
+ if (tokens?.delete(token)) {
161
+ if (tokens.size === 0)
162
+ this.workspaceFences.delete(workspaceId);
163
+ this.setWorkspaceFenceStatus(workspaceId, this.isWorkspaceFenced(workspaceId));
164
+ }
165
+ return this.status(workspaceId);
166
+ }
167
+ reconcile(snapshot) {
168
+ const operation = this.reconcileQueue.then(() => this.applyReconcile(snapshot));
169
+ this.reconcileQueue = operation.then(() => undefined, () => undefined);
170
+ return this.track(operation);
171
+ }
172
+ async tick(now = new Date()) {
173
+ if (this.activeTickPromise) {
174
+ return this.skippedTick('reentrant', now, true);
175
+ }
176
+ const tickPromise = this.track(this.performTick(new Date(now.getTime())));
177
+ this.activeTickPromise = tickPromise;
178
+ void tickPromise.then(() => this.clearActiveTick(tickPromise), () => this.clearActiveTick(tickPromise));
179
+ return tickPromise;
180
+ }
181
+ beginDrain() {
182
+ if (this.stopped)
183
+ return;
184
+ this.draining = true;
185
+ this.role = 'draining';
186
+ }
187
+ stop(options = {}) {
188
+ if (this.stopped && this.stopPromise)
189
+ return this.stopPromise;
190
+ if (this.stopPromise)
191
+ return this.stopPromise;
192
+ this.beginDrain();
193
+ const pending = this.waitForDrain(stopDeadline(options.deadlineMs)).then((drained) => {
194
+ if (!drained) {
195
+ return {
196
+ status: 'timeout',
197
+ timedOut: true,
198
+ drained: false,
199
+ leaseReleased: false,
200
+ role: this.publicRole(),
201
+ activeTick: this.activeTickPromise !== undefined,
202
+ };
203
+ }
204
+ this.stopped = true;
205
+ const leaseReleased = this.releaseLease();
206
+ this.role = 'stopped';
207
+ return {
208
+ status: 'stopped',
209
+ timedOut: false,
210
+ drained: true,
211
+ leaseReleased,
212
+ role: this.publicRole(),
213
+ activeTick: this.activeTickPromise !== undefined,
214
+ };
215
+ });
216
+ this.stopPromise = pending;
217
+ void pending.then((result) => {
218
+ if (result.status === 'timeout')
219
+ this.stopPromise = undefined;
220
+ });
221
+ return pending;
222
+ }
223
+ status(workspaceId) {
224
+ const workspaces = Array.from(this.workspaces.values(), ({ status }) => cloneWorkspaceStatus(status));
225
+ const workspace = workspaceId === undefined
226
+ ? undefined
227
+ : workspaces.find(item => item.id === workspaceId);
228
+ return {
229
+ enabled: this.enabled,
230
+ role: this.publicRole(),
231
+ activeTick: this.activeTickPromise !== undefined,
232
+ draining: this.draining,
233
+ stopped: this.stopped,
234
+ ownerId: this.ownerId,
235
+ leaseId: this.leaseId,
236
+ leasePath: this.resolvedLeasePath,
237
+ ...(this.standbyReason ? { standbyReason: this.standbyReason } : {}),
238
+ workspaces,
239
+ ...(workspace ? { workspace } : {}),
240
+ };
241
+ }
242
+ async applyReconcile(snapshot) {
243
+ if (this.stopped || this.draining)
244
+ return this.status();
245
+ this.enabled = snapshot.enabled;
246
+ const snapshotIds = new Set(snapshot.workspaces.map(workspace => workspace.id));
247
+ for (const id of this.workspaces.keys()) {
248
+ if (!snapshotIds.has(id))
249
+ this.nextWorkspaceRevision(id);
250
+ }
251
+ const next = new Map();
252
+ for (const workspace of snapshot.workspaces) {
253
+ const previous = this.workspaces.get(workspace.id);
254
+ const revision = previous && previous.workspace.path === workspace.path
255
+ ? previous.revision
256
+ : this.nextWorkspaceRevision(workspace.id);
257
+ next.set(workspace.id, {
258
+ workspace: { ...workspace },
259
+ revision,
260
+ status: previous && previous.workspace.path === workspace.path
261
+ ? {
262
+ ...previous.status,
263
+ path: workspace.path,
264
+ revision,
265
+ fenced: this.isWorkspaceFenced(workspace.id),
266
+ }
267
+ : {
268
+ id: workspace.id,
269
+ path: workspace.path,
270
+ state: 'registered',
271
+ scheduleCount: 0,
272
+ revision,
273
+ fenced: this.isWorkspaceFenced(workspace.id),
274
+ },
275
+ });
276
+ }
277
+ this.workspaces.clear();
278
+ for (const [id, entry] of next)
279
+ this.workspaces.set(id, entry);
280
+ await Promise.all(Array.from(this.workspaces.values(), entry => this.inspectWorkspace(entry)));
281
+ if (this.enabled && !this.draining && !this.stopped) {
282
+ this.ensureOwner();
283
+ }
284
+ else if (!this.enabled) {
285
+ this.role = 'disabled';
286
+ }
287
+ return this.status();
288
+ }
289
+ inspectWorkspace(entry) {
290
+ try {
291
+ const schedules = this.storeFactory(entry.workspace).list();
292
+ entry.status = {
293
+ id: entry.workspace.id,
294
+ path: entry.workspace.path,
295
+ state: 'ready',
296
+ scheduleCount: schedules.length,
297
+ revision: entry.revision,
298
+ fenced: this.isWorkspaceFenced(entry.workspace.id),
299
+ };
300
+ }
301
+ catch (error) {
302
+ entry.status = {
303
+ id: entry.workspace.id,
304
+ path: entry.workspace.path,
305
+ state: 'degraded',
306
+ scheduleCount: 0,
307
+ revision: entry.revision,
308
+ fenced: this.isWorkspaceFenced(entry.workspace.id),
309
+ lastError: errorDetails(error),
310
+ };
311
+ }
312
+ }
313
+ async performTick(now) {
314
+ if (this.stopped)
315
+ return this.skippedTick('stopped', now, false);
316
+ if (this.draining)
317
+ return this.skippedTick('draining', now, false);
318
+ if (!this.enabled)
319
+ return this.skippedTick('disabled', now, false);
320
+ if (!this.ensureOwner())
321
+ return this.skippedTick('standby', now, false);
322
+ const entries = Array.from(this.workspaces.values());
323
+ const workspaces = await Promise.all(entries.map(entry => this.tickWorkspace(entry, now)));
324
+ return {
325
+ status: 'completed',
326
+ skipped: false,
327
+ role: this.publicRole(),
328
+ now: now.toISOString(),
329
+ activeTick: true,
330
+ dispatched: workspaces.reduce((total, item) => total + item.dispatched, 0),
331
+ workspaces,
332
+ };
333
+ }
334
+ async tickWorkspace(entry, now) {
335
+ if (this.draining || this.stopped) {
336
+ return {
337
+ id: entry.workspace.id,
338
+ path: entry.workspace.path,
339
+ status: 'skipped',
340
+ scheduleCount: entry.status.scheduleCount,
341
+ dueCount: 0,
342
+ dispatched: 0,
343
+ schedules: [],
344
+ };
345
+ }
346
+ let schedules;
347
+ try {
348
+ schedules = this.storeFactory(entry.workspace).list();
349
+ entry.status = {
350
+ id: entry.workspace.id,
351
+ path: entry.workspace.path,
352
+ state: 'ready',
353
+ scheduleCount: schedules.length,
354
+ revision: entry.revision,
355
+ fenced: this.isWorkspaceFenced(entry.workspace.id),
356
+ };
357
+ }
358
+ catch (error) {
359
+ const details = errorDetails(error);
360
+ entry.status = {
361
+ id: entry.workspace.id,
362
+ path: entry.workspace.path,
363
+ state: 'degraded',
364
+ scheduleCount: 0,
365
+ revision: entry.revision,
366
+ fenced: this.isWorkspaceFenced(entry.workspace.id),
367
+ lastError: details,
368
+ };
369
+ return {
370
+ id: entry.workspace.id,
371
+ path: entry.workspace.path,
372
+ status: 'degraded',
373
+ scheduleCount: 0,
374
+ dueCount: 0,
375
+ dispatched: 0,
376
+ schedules: [],
377
+ error: details,
378
+ };
379
+ }
380
+ const dueSchedules = [];
381
+ for (const schedule of schedules) {
382
+ if (!schedule.enabled)
383
+ continue;
384
+ try {
385
+ if (!this.runPredicate(schedule.cron, now, schedule.timezone))
386
+ continue;
387
+ const minuteKey = (0, engine_1.getLocalMinuteKey)(now, schedule.timezone);
388
+ dueSchedules.push({
389
+ schedule,
390
+ occurrenceKey: (0, engine_1.buildOccurrenceKey)(schedule.cron, minuteKey),
391
+ });
392
+ }
393
+ catch {
394
+ }
395
+ }
396
+ const scheduleResults = await Promise.all(dueSchedules.map(item => this.admitSchedule(entry.workspace, entry.revision, item.schedule, item.occurrenceKey)));
397
+ return {
398
+ id: entry.workspace.id,
399
+ path: entry.workspace.path,
400
+ status: 'completed',
401
+ scheduleCount: schedules.length,
402
+ dueCount: dueSchedules.length,
403
+ dispatched: scheduleResults.filter(result => result.accepted).length,
404
+ schedules: scheduleResults,
405
+ };
406
+ }
407
+ async admitSchedule(workspace, revision, schedule, occurrenceKey) {
408
+ if (this.draining || this.stopped) {
409
+ return {
410
+ scheduleId: schedule.id,
411
+ occurrenceKey,
412
+ status: 'skipped',
413
+ accepted: false,
414
+ reason: this.stopped ? 'stopped' : 'draining',
415
+ };
416
+ }
417
+ const beforeExecutorAdmission = this.testHooks?.beforeExecutorAdmission;
418
+ if (beforeExecutorAdmission) {
419
+ await beforeExecutorAdmission({ workspace, schedule, occurrenceKey, revision });
420
+ }
421
+ if (this.draining || this.stopped) {
422
+ return {
423
+ scheduleId: schedule.id,
424
+ occurrenceKey,
425
+ status: 'skipped',
426
+ accepted: false,
427
+ reason: this.stopped ? 'stopped' : 'draining',
428
+ };
429
+ }
430
+ const current = this.workspaces.get(workspace.id);
431
+ if (!current || current.workspace.path !== workspace.path || current.revision !== revision) {
432
+ return {
433
+ scheduleId: schedule.id,
434
+ occurrenceKey,
435
+ status: 'skipped',
436
+ accepted: false,
437
+ reason: 'workspace-unregistered',
438
+ };
439
+ }
440
+ if (this.isWorkspaceFenced(workspace.id)) {
441
+ return {
442
+ scheduleId: schedule.id,
443
+ occurrenceKey,
444
+ status: 'skipped',
445
+ accepted: false,
446
+ reason: 'workspace-fenced',
447
+ };
448
+ }
449
+ try {
450
+ const outcome = await this.executor(schedule, {
451
+ dir: workspace.path,
452
+ trigger: 'cron',
453
+ occurrenceKey,
454
+ });
455
+ return {
456
+ scheduleId: schedule.id,
457
+ occurrenceKey,
458
+ status: outcome.status,
459
+ accepted: outcome.status === 'running',
460
+ ...('taskId' in outcome ? { taskId: outcome.taskId } : {}),
461
+ ...('reason' in outcome && outcome.reason ? { reason: outcome.reason } : {}),
462
+ };
463
+ }
464
+ catch (error) {
465
+ return {
466
+ scheduleId: schedule.id,
467
+ occurrenceKey,
468
+ status: 'error',
469
+ accepted: false,
470
+ error: errorDetails(error).message,
471
+ };
472
+ }
473
+ }
474
+ ensureOwner() {
475
+ if (this.lease) {
476
+ try {
477
+ if (this.lease.renew && !this.lease.renew()) {
478
+ this.forgetLease();
479
+ }
480
+ else {
481
+ this.role = 'owner';
482
+ this.standbyReason = undefined;
483
+ return true;
484
+ }
485
+ }
486
+ catch {
487
+ this.forgetLease();
488
+ }
489
+ }
490
+ if (this.stopped || this.draining || !this.enabled)
491
+ return false;
492
+ let acquired;
493
+ try {
494
+ const options = {
495
+ leasePath: this.requestedLeasePath,
496
+ ...(this.configuredOwnerId ? { ownerId: this.configuredOwnerId } : {}),
497
+ };
498
+ acquired = this.leaseProvider.acquire(options);
499
+ }
500
+ catch (error) {
501
+ this.role = 'standby';
502
+ this.standbyReason = `lease-error:${errorDetails(error).message}`;
503
+ return false;
504
+ }
505
+ if (!acquired.acquired) {
506
+ this.role = 'standby';
507
+ this.standbyReason = acquired.reason;
508
+ this.ownerId = acquired.record?.ownerId ?? null;
509
+ this.leaseId = acquired.record?.leaseId ?? null;
510
+ return false;
511
+ }
512
+ const key = localOwnerKey(this.resolvedLeasePath, acquired.ownerId);
513
+ const existing = localOwnerRegistry.get(key);
514
+ if (existing && existing.runtimeToken !== this.runtimeToken) {
515
+ this.role = 'standby';
516
+ this.standbyReason = 'process-local-owner';
517
+ this.ownerId = acquired.ownerId;
518
+ this.leaseId = acquired.leaseId;
519
+ return false;
520
+ }
521
+ this.lease = acquired.lease;
522
+ this.leaseKey = key;
523
+ this.ownerId = acquired.ownerId;
524
+ this.leaseId = acquired.leaseId;
525
+ localOwnerRegistry.set(key, {
526
+ runtimeToken: this.runtimeToken,
527
+ ownerId: acquired.ownerId,
528
+ lease: acquired.lease,
529
+ });
530
+ this.role = 'owner';
531
+ this.standbyReason = undefined;
532
+ return true;
533
+ }
534
+ forgetLease() {
535
+ if (this.leaseKey) {
536
+ const current = localOwnerRegistry.get(this.leaseKey);
537
+ if (current?.runtimeToken === this.runtimeToken)
538
+ localOwnerRegistry.delete(this.leaseKey);
539
+ }
540
+ this.lease = undefined;
541
+ this.leaseKey = undefined;
542
+ this.ownerId = null;
543
+ this.leaseId = null;
544
+ this.role = 'standby';
545
+ this.standbyReason = 'lease-lost';
546
+ }
547
+ releaseLease() {
548
+ if (!this.lease)
549
+ return true;
550
+ let released = false;
551
+ try {
552
+ released = this.lease.release();
553
+ }
554
+ catch {
555
+ released = false;
556
+ }
557
+ if (released)
558
+ this.forgetLease();
559
+ return released;
560
+ }
561
+ publicRole() {
562
+ if (this.stopped)
563
+ return 'stopped';
564
+ if (this.draining)
565
+ return 'draining';
566
+ if (!this.enabled)
567
+ return 'disabled';
568
+ return this.role;
569
+ }
570
+ skippedTick(reason, now, reentrant) {
571
+ return {
572
+ status: 'skipped',
573
+ skipped: true,
574
+ reason,
575
+ role: this.publicRole(),
576
+ now: now.toISOString(),
577
+ activeTick: reentrant || this.activeTickPromise !== undefined,
578
+ dispatched: 0,
579
+ workspaces: [],
580
+ };
581
+ }
582
+ clearActiveTick(promise) {
583
+ if (this.activeTickPromise === promise)
584
+ this.activeTickPromise = undefined;
585
+ }
586
+ track(promise) {
587
+ let tracked;
588
+ tracked = promise.finally(() => this.operations.delete(tracked));
589
+ this.operations.add(tracked);
590
+ return tracked;
591
+ }
592
+ async waitForDrain(deadlineMs) {
593
+ const pending = Array.from(this.operations);
594
+ if (pending.length === 0)
595
+ return true;
596
+ const drain = Promise.allSettled(pending).then(() => true);
597
+ if (deadlineMs <= 0)
598
+ return false;
599
+ let timer;
600
+ const timeout = new Promise(resolve => {
601
+ timer = setTimeout(() => resolve(false), deadlineMs);
602
+ });
603
+ const drained = await Promise.race([drain, timeout]);
604
+ if (timer !== undefined)
605
+ clearTimeout(timer);
606
+ return drained;
607
+ }
608
+ }
609
+ function createCronRuntime(options = {}) {
610
+ return new CronRuntimeImpl(options);
611
+ }
612
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"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"}