oqronkit 0.0.1-alpha.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/README.md +127 -0
- package/dist/chunk-I6QFT3MR.mjs +1732 -0
- package/dist/chunk-PLN5A6LU.mjs +1447 -0
- package/dist/core/config/config-loader.d.ts +3 -0
- package/dist/core/config/config-loader.d.ts.map +1 -0
- package/dist/core/config/default-config.d.ts +4 -0
- package/dist/core/config/default-config.d.ts.map +1 -0
- package/dist/core/config/define-config.d.ts +3 -0
- package/dist/core/config/define-config.d.ts.map +1 -0
- package/dist/core/config/find-up.d.ts +2 -0
- package/dist/core/config/find-up.d.ts.map +1 -0
- package/dist/core/config/schema.d.ts +306 -0
- package/dist/core/config/schema.d.ts.map +1 -0
- package/dist/core/context/cron-context.d.ts +14 -0
- package/dist/core/context/cron-context.d.ts.map +1 -0
- package/dist/core/context/cron-context.interface.d.ts +14 -0
- package/dist/core/context/cron-context.interface.d.ts.map +1 -0
- package/dist/core/context/job-context.d.ts +22 -0
- package/dist/core/context/job-context.d.ts.map +1 -0
- package/dist/core/context/schedule-context.d.ts +31 -0
- package/dist/core/context/schedule-context.d.ts.map +1 -0
- package/dist/core/errors/base.error.d.ts +13 -0
- package/dist/core/errors/base.error.d.ts.map +1 -0
- package/dist/core/events/event-bus.d.ts +16 -0
- package/dist/core/events/event-bus.d.ts.map +1 -0
- package/dist/core/index.d.ts +24 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/logger/index.d.ts +30 -0
- package/dist/core/logger/index.d.ts.map +1 -0
- package/dist/core/registry.d.ts +13 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/types/config.types.d.ts +119 -0
- package/dist/core/types/config.types.d.ts.map +1 -0
- package/dist/core/types/cron.types.d.ts +53 -0
- package/dist/core/types/cron.types.d.ts.map +1 -0
- package/dist/core/types/db.types.d.ts +32 -0
- package/dist/core/types/db.types.d.ts.map +1 -0
- package/dist/core/types/index.d.ts +7 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/lock.types.d.ts +7 -0
- package/dist/core/types/lock.types.d.ts.map +1 -0
- package/dist/core/types/module.types.d.ts +8 -0
- package/dist/core/types/module.types.d.ts.map +1 -0
- package/dist/core/types/scheduler.types.d.ts +62 -0
- package/dist/core/types/scheduler.types.d.ts.map +1 -0
- package/dist/cron-V0k1GcxJ.d.mts +102 -0
- package/dist/cron-V0k1GcxJ.d.ts +102 -0
- package/dist/cron.d.mts +2 -0
- package/dist/cron.d.ts +2 -0
- package/dist/cron.d.ts.map +1 -0
- package/dist/cron.js +215 -0
- package/dist/cron.mjs +1 -0
- package/dist/db/adapters/memory.adapter.d.ts +25 -0
- package/dist/db/adapters/memory.adapter.d.ts.map +1 -0
- package/dist/db/adapters/namespaced.adapter.d.ts +26 -0
- package/dist/db/adapters/namespaced.adapter.d.ts.map +1 -0
- package/dist/db/adapters/sqlite.adapter.d.ts +30 -0
- package/dist/db/adapters/sqlite.adapter.d.ts.map +1 -0
- package/dist/db/index.d.ts +4 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/index.d.mts +797 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2738 -0
- package/dist/index.mjs +747 -0
- package/dist/lock/adapters/db-lock.adapter.d.ts +17 -0
- package/dist/lock/adapters/db-lock.adapter.d.ts.map +1 -0
- package/dist/lock/adapters/memory-lock.adapter.d.ts +13 -0
- package/dist/lock/adapters/memory-lock.adapter.d.ts.map +1 -0
- package/dist/lock/adapters/namespaced-lock.adapter.d.ts +12 -0
- package/dist/lock/adapters/namespaced-lock.adapter.d.ts.map +1 -0
- package/dist/lock/heartbeat-worker.d.ts +16 -0
- package/dist/lock/heartbeat-worker.d.ts.map +1 -0
- package/dist/lock/index.d.ts +7 -0
- package/dist/lock/index.d.ts.map +1 -0
- package/dist/lock/leader-election.d.ts +16 -0
- package/dist/lock/leader-election.d.ts.map +1 -0
- package/dist/lock/stall-detector.d.ts +23 -0
- package/dist/lock/stall-detector.d.ts.map +1 -0
- package/dist/scheduler/cron-engine.d.ts +42 -0
- package/dist/scheduler/cron-engine.d.ts.map +1 -0
- package/dist/scheduler/define-cron.d.ts +36 -0
- package/dist/scheduler/define-cron.d.ts.map +1 -0
- package/dist/scheduler/define-schedule.d.ts +52 -0
- package/dist/scheduler/define-schedule.d.ts.map +1 -0
- package/dist/scheduler/expression-parser.d.ts +2 -0
- package/dist/scheduler/expression-parser.d.ts.map +1 -0
- package/dist/scheduler/index.d.ts +10 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/missed-fire.handler.d.ts +8 -0
- package/dist/scheduler/missed-fire.handler.d.ts.map +1 -0
- package/dist/scheduler/registry-schedule.d.ts +6 -0
- package/dist/scheduler/registry-schedule.d.ts.map +1 -0
- package/dist/scheduler/registry.d.ts +6 -0
- package/dist/scheduler/registry.d.ts.map +1 -0
- package/dist/scheduler/schedule-engine.d.ts +36 -0
- package/dist/scheduler/schedule-engine.d.ts.map +1 -0
- package/dist/scheduler-HRR3UXGE.mjs +1 -0
- package/dist/scheduler.d.mts +248 -0
- package/dist/scheduler.d.ts +248 -0
- package/dist/scheduler.js +1461 -0
- package/dist/scheduler.mjs +1 -0
- package/dist/server/express.d.ts +9 -0
- package/dist/server/express.d.ts.map +1 -0
- package/dist/server/fastify.d.ts +9 -0
- package/dist/server/fastify.d.ts.map +1 -0
- package/dist/server/handlers.d.ts +15 -0
- package/dist/server/handlers.d.ts.map +1 -0
- package/package.json +59 -0
package/dist/cron.js
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('crypto');
|
|
4
|
+
require('url');
|
|
5
|
+
require('find-up');
|
|
6
|
+
var zod = require('zod');
|
|
7
|
+
var eventemitter3 = require('eventemitter3');
|
|
8
|
+
require('voltlog-io');
|
|
9
|
+
require('better-sqlite3');
|
|
10
|
+
var _cronParser = require('cron-parser');
|
|
11
|
+
require('rrule');
|
|
12
|
+
|
|
13
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
|
|
15
|
+
var _cronParser__default = /*#__PURE__*/_interopDefault(_cronParser);
|
|
16
|
+
|
|
17
|
+
// src/scheduler/cron-engine.ts
|
|
18
|
+
var isIOqronAdapter = (val) => {
|
|
19
|
+
if (!val || typeof val !== "object") return false;
|
|
20
|
+
return typeof val.upsertSchedule === "function" && typeof val.getDueSchedules === "function";
|
|
21
|
+
};
|
|
22
|
+
var isILockAdapter = (val) => {
|
|
23
|
+
if (!val || typeof val !== "object") return false;
|
|
24
|
+
return typeof val.acquire === "function" && typeof val.renew === "function";
|
|
25
|
+
};
|
|
26
|
+
zod.z.object({
|
|
27
|
+
project: zod.z.string().optional(),
|
|
28
|
+
environment: zod.z.string().default("development"),
|
|
29
|
+
// Infrastructure — Union of explicit DI or declarative config
|
|
30
|
+
db: zod.z.union([
|
|
31
|
+
zod.z.custom(
|
|
32
|
+
isIOqronAdapter,
|
|
33
|
+
"db must be an instance of IOqronAdapter"
|
|
34
|
+
),
|
|
35
|
+
zod.z.object({
|
|
36
|
+
adapter: zod.z.enum([
|
|
37
|
+
"sqlite",
|
|
38
|
+
"memory",
|
|
39
|
+
"postgres",
|
|
40
|
+
"mysql",
|
|
41
|
+
"mongodb",
|
|
42
|
+
"redis"
|
|
43
|
+
]),
|
|
44
|
+
url: zod.z.string().optional(),
|
|
45
|
+
poolMin: zod.z.number().default(2),
|
|
46
|
+
poolMax: zod.z.number().default(10),
|
|
47
|
+
tablePrefix: zod.z.string().default("chrono_"),
|
|
48
|
+
migrations: zod.z.union([zod.z.enum(["auto", "manual"]), zod.z.literal(false)]).default("auto"),
|
|
49
|
+
ssl: zod.z.boolean().default(false)
|
|
50
|
+
})
|
|
51
|
+
]).optional(),
|
|
52
|
+
lock: zod.z.union([
|
|
53
|
+
zod.z.custom(
|
|
54
|
+
isILockAdapter,
|
|
55
|
+
"lock must be an instance of ILockAdapter"
|
|
56
|
+
),
|
|
57
|
+
zod.z.object({
|
|
58
|
+
adapter: zod.z.enum(["db", "memory", "redis"]),
|
|
59
|
+
url: zod.z.string().optional(),
|
|
60
|
+
ttl: zod.z.number().default(3e4),
|
|
61
|
+
retryDelay: zod.z.number().default(200),
|
|
62
|
+
retryCount: zod.z.number().default(5)
|
|
63
|
+
})
|
|
64
|
+
]).optional(),
|
|
65
|
+
broker: zod.z.any().optional(),
|
|
66
|
+
// Modules
|
|
67
|
+
modules: zod.z.array(
|
|
68
|
+
zod.z.enum([
|
|
69
|
+
"cron",
|
|
70
|
+
"scheduler",
|
|
71
|
+
"queue",
|
|
72
|
+
"workflow",
|
|
73
|
+
"batch",
|
|
74
|
+
"webhook",
|
|
75
|
+
"pipeline"
|
|
76
|
+
])
|
|
77
|
+
).default([]),
|
|
78
|
+
// Module-specific configs
|
|
79
|
+
cron: zod.z.object({
|
|
80
|
+
enable: zod.z.boolean().default(true),
|
|
81
|
+
timezone: zod.z.string().optional(),
|
|
82
|
+
tickInterval: zod.z.number().default(1e3),
|
|
83
|
+
missedFirePolicy: zod.z.enum(["skip", "run-once", "run-all"]).default("run-once"),
|
|
84
|
+
maxConcurrentJobs: zod.z.number().default(5),
|
|
85
|
+
leaderElection: zod.z.boolean().default(true),
|
|
86
|
+
keepJobHistory: zod.z.union([zod.z.boolean(), zod.z.number()]).default(true),
|
|
87
|
+
keepFailedJobHistory: zod.z.union([zod.z.boolean(), zod.z.number()]).default(true)
|
|
88
|
+
}).default({}),
|
|
89
|
+
scheduler: zod.z.object({
|
|
90
|
+
enable: zod.z.boolean().default(true),
|
|
91
|
+
tickInterval: zod.z.number().default(1e3),
|
|
92
|
+
keepJobHistory: zod.z.union([zod.z.boolean(), zod.z.number()]).default(true),
|
|
93
|
+
keepFailedJobHistory: zod.z.union([zod.z.boolean(), zod.z.number()]).default(true)
|
|
94
|
+
}).default({}),
|
|
95
|
+
// Auto-discovery directory
|
|
96
|
+
jobsDir: zod.z.string().default("./src/jobs"),
|
|
97
|
+
// Global tags
|
|
98
|
+
tags: zod.z.array(zod.z.string()).default([]),
|
|
99
|
+
// Worker
|
|
100
|
+
worker: zod.z.object({
|
|
101
|
+
concurrency: zod.z.number().default(50),
|
|
102
|
+
gracefulShutdownMs: zod.z.number().default(3e4)
|
|
103
|
+
}).default({ concurrency: 50, gracefulShutdownMs: 3e4 }),
|
|
104
|
+
// Logger (voltlog-io config or false to disable)
|
|
105
|
+
logger: zod.z.union([
|
|
106
|
+
zod.z.literal(false),
|
|
107
|
+
zod.z.object({
|
|
108
|
+
enabled: zod.z.boolean().default(true),
|
|
109
|
+
level: zod.z.string().default("info"),
|
|
110
|
+
prettify: zod.z.boolean().default(false),
|
|
111
|
+
showMetadata: zod.z.boolean().default(true),
|
|
112
|
+
redact: zod.z.array(zod.z.string()).default([])
|
|
113
|
+
})
|
|
114
|
+
]).default({
|
|
115
|
+
enabled: true,
|
|
116
|
+
level: "info",
|
|
117
|
+
prettify: false,
|
|
118
|
+
showMetadata: true,
|
|
119
|
+
redact: []
|
|
120
|
+
}),
|
|
121
|
+
// Telemetry
|
|
122
|
+
telemetry: zod.z.object({
|
|
123
|
+
prometheus: zod.z.object({
|
|
124
|
+
enabled: zod.z.boolean().default(false),
|
|
125
|
+
path: zod.z.string().default("/metrics")
|
|
126
|
+
}).default({}),
|
|
127
|
+
opentelemetry: zod.z.object({
|
|
128
|
+
enabled: zod.z.boolean().default(false)
|
|
129
|
+
}).default({})
|
|
130
|
+
}).default({}),
|
|
131
|
+
// Shutdown
|
|
132
|
+
shutdown: zod.z.object({
|
|
133
|
+
enabled: zod.z.boolean().default(true),
|
|
134
|
+
timeout: zod.z.number().default(3e4),
|
|
135
|
+
signals: zod.z.array(zod.z.string()).default(["SIGINT", "SIGTERM"])
|
|
136
|
+
}).default({})
|
|
137
|
+
});
|
|
138
|
+
var OqronEventBusClass = class _OqronEventBusClass extends eventemitter3.EventEmitter {
|
|
139
|
+
static _instance;
|
|
140
|
+
static getInstance() {
|
|
141
|
+
if (!_OqronEventBusClass._instance) {
|
|
142
|
+
_OqronEventBusClass._instance = new _OqronEventBusClass();
|
|
143
|
+
}
|
|
144
|
+
return _OqronEventBusClass._instance;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
OqronEventBusClass.getInstance();
|
|
148
|
+
_cronParser__default.default.default ?? _cronParser__default.default;
|
|
149
|
+
_cronParser__default.default.default ?? _cronParser__default.default;
|
|
150
|
+
|
|
151
|
+
// src/scheduler/registry.ts
|
|
152
|
+
var GLOBAL_KEY = "__oqronkit_pending_crons__";
|
|
153
|
+
function _getPending() {
|
|
154
|
+
if (!globalThis[GLOBAL_KEY]) {
|
|
155
|
+
globalThis[GLOBAL_KEY] = [];
|
|
156
|
+
}
|
|
157
|
+
return globalThis[GLOBAL_KEY];
|
|
158
|
+
}
|
|
159
|
+
function _registerCron(def) {
|
|
160
|
+
_getPending().push(def);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// src/scheduler/define-cron.ts
|
|
164
|
+
var cronParser3 = _cronParser__default.default.default ?? _cronParser__default.default;
|
|
165
|
+
function everyToIntervalMs(every) {
|
|
166
|
+
let ms = 0;
|
|
167
|
+
if (every.seconds) ms += every.seconds * 1e3;
|
|
168
|
+
if (every.minutes) ms += every.minutes * 6e4;
|
|
169
|
+
if (every.hours) ms += every.hours * 36e5;
|
|
170
|
+
if (ms <= 0)
|
|
171
|
+
throw new Error(
|
|
172
|
+
"[OqronKit] `every` config must resolve to a positive interval"
|
|
173
|
+
);
|
|
174
|
+
return ms;
|
|
175
|
+
}
|
|
176
|
+
var cron = (options) => {
|
|
177
|
+
let expression;
|
|
178
|
+
let intervalMs;
|
|
179
|
+
if ("expression" in options && options.expression) {
|
|
180
|
+
try {
|
|
181
|
+
cronParser3.parseExpression(options.expression, { tz: options.timezone });
|
|
182
|
+
} catch {
|
|
183
|
+
throw new Error(
|
|
184
|
+
`[OqronKit] Invalid cron expression for "${options.name}": "${options.expression}"`
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
expression = options.expression;
|
|
188
|
+
} else if ("every" in options && options.every) {
|
|
189
|
+
intervalMs = everyToIntervalMs(options.every);
|
|
190
|
+
} else {
|
|
191
|
+
throw new Error(
|
|
192
|
+
`[OqronKit] Cron "${options.name}" must specify either "expression" or "every"`
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
const def = {
|
|
196
|
+
name: options.name,
|
|
197
|
+
expression,
|
|
198
|
+
intervalMs,
|
|
199
|
+
timezone: options.timezone,
|
|
200
|
+
missedFire: options.missedFire ?? "skip",
|
|
201
|
+
overlap: options.overlap ?? "skip",
|
|
202
|
+
guaranteedWorker: options.guaranteedWorker ?? false,
|
|
203
|
+
heartbeatMs: options.heartbeatMs,
|
|
204
|
+
lockTtlMs: options.lockTtlMs,
|
|
205
|
+
timeout: options.timeout,
|
|
206
|
+
tags: options.tags ?? [],
|
|
207
|
+
handler: options.handler,
|
|
208
|
+
hooks: options.hooks,
|
|
209
|
+
retries: options.retries
|
|
210
|
+
};
|
|
211
|
+
_registerCron(def);
|
|
212
|
+
return def;
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
exports.cron = cron;
|
package/dist/cron.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { cron } from './chunk-PLN5A6LU.mjs';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { CronDefinition, JobRecord } from "../../core/types/cron.types.js";
|
|
2
|
+
import type { IOqronAdapter } from "../../core/types/db.types.js";
|
|
3
|
+
import type { ScheduleDefinition } from "../../core/types/scheduler.types.js";
|
|
4
|
+
export declare class MemoryOqronAdapter implements IOqronAdapter {
|
|
5
|
+
private schedules;
|
|
6
|
+
private jobs;
|
|
7
|
+
upsertSchedule(def: CronDefinition | ScheduleDefinition): Promise<void>;
|
|
8
|
+
getDueSchedules(now: Date, limit: number, prefix?: string): Promise<Pick<CronDefinition | ScheduleDefinition, "name">[]>;
|
|
9
|
+
getSchedules(prefix?: string): Promise<Array<{
|
|
10
|
+
name: string;
|
|
11
|
+
lastRunAt: Date | null;
|
|
12
|
+
nextRunAt: Date | null;
|
|
13
|
+
}>>;
|
|
14
|
+
updateNextRun(scheduleId: string, nextRunAt: Date | null): Promise<void>;
|
|
15
|
+
recordExecution(job: JobRecord): Promise<void>;
|
|
16
|
+
updateJobProgress(id: string, progressPercent: number, progressLabel?: string): Promise<void>;
|
|
17
|
+
getExecutions(scheduleId: string, opts: {
|
|
18
|
+
limit: number;
|
|
19
|
+
offset: number;
|
|
20
|
+
}): Promise<JobRecord[]>;
|
|
21
|
+
getActiveJobs(): Promise<JobRecord[]>;
|
|
22
|
+
cleanOldExecutions(before: Date): Promise<number>;
|
|
23
|
+
pruneHistoryForSchedule(scheduleId: string, keepJobHistory: number | boolean, keepFailedJobHistory: number | boolean): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=memory.adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.adapter.d.ts","sourceRoot":"","sources":["../../../src/db/adapters/memory.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAQ9E,qBAAa,kBAAmB,YAAW,aAAa;IACtD,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,IAAI,CAAgC;IAEtC,cAAc,CAClB,GAAG,EAAE,cAAc,GAAG,kBAAkB,GACvC,OAAO,CAAC,IAAI,CAAC;IAUV,eAAe,CACnB,GAAG,EAAE,IAAI,EACT,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,kBAAkB,EAAE,MAAM,CAAC,EAAE,CAAC;IAYzD,YAAY,CAChB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CACR,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,CAAC,CACxE;IAcK,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,IAAI,GAAG,IAAI,GACrB,OAAO,CAAC,IAAI,CAAC;IAOV,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB9C,iBAAiB,CACrB,EAAE,EAAE,MAAM,EACV,eAAe,EAAE,MAAM,EACvB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;IAQV,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GACtC,OAAO,CAAC,SAAS,EAAE,CAAC;IAOjB,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIrC,kBAAkB,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAWjD,uBAAuB,CAC3B,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GAAG,OAAO,EAChC,oBAAoB,EAAE,MAAM,GAAG,OAAO,GACrC,OAAO,CAAC,IAAI,CAAC;CA8BjB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { CronDefinition, IOqronAdapter, JobRecord, ScheduleDefinition } from "../../core/index.js";
|
|
2
|
+
export declare class NamespacedOqronAdapter implements IOqronAdapter {
|
|
3
|
+
private readonly base;
|
|
4
|
+
private readonly prefix;
|
|
5
|
+
constructor(base: IOqronAdapter, project?: string, environment?: string);
|
|
6
|
+
private ns;
|
|
7
|
+
private un;
|
|
8
|
+
upsertSchedule(def: CronDefinition | ScheduleDefinition): Promise<void>;
|
|
9
|
+
getDueSchedules(now: Date, limit: number, prefix?: string): Promise<Pick<CronDefinition | ScheduleDefinition, "name">[]>;
|
|
10
|
+
getSchedules(prefix?: string): Promise<Array<{
|
|
11
|
+
name: string;
|
|
12
|
+
lastRunAt: Date | null;
|
|
13
|
+
nextRunAt: Date | null;
|
|
14
|
+
}>>;
|
|
15
|
+
updateNextRun(scheduleId: string, nextRunAt: Date | null): Promise<void>;
|
|
16
|
+
recordExecution(job: JobRecord): Promise<void>;
|
|
17
|
+
updateJobProgress(id: string, progressPercent: number, progressLabel?: string): Promise<void>;
|
|
18
|
+
getExecutions(scheduleId: string, opts: {
|
|
19
|
+
limit: number;
|
|
20
|
+
offset: number;
|
|
21
|
+
}): Promise<JobRecord[]>;
|
|
22
|
+
getActiveJobs(): Promise<JobRecord[]>;
|
|
23
|
+
cleanOldExecutions(before: Date): Promise<number>;
|
|
24
|
+
pruneHistoryForSchedule(scheduleId: string, keepJobHistory: number | boolean, keepFailedJobHistory: number | boolean): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=namespaced.adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"namespaced.adapter.d.ts","sourceRoot":"","sources":["../../../src/db/adapters/namespaced.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,SAAS,EACT,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAE7B,qBAAa,sBAAuB,YAAW,aAAa;IAIxD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAGb,IAAI,EAAE,aAAa,EACpC,OAAO,GAAE,MAAkB,EAC3B,WAAW,GAAE,MAAsB;IAKrC,OAAO,CAAC,EAAE;IAIV,OAAO,CAAC,EAAE;IAIJ,cAAc,CAClB,GAAG,EAAE,cAAc,GAAG,kBAAkB,GACvC,OAAO,CAAC,IAAI,CAAC;IAIV,eAAe,CACnB,GAAG,EAAE,IAAI,EACT,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,kBAAkB,EAAE,MAAM,CAAC,EAAE,CAAC;IAQzD,YAAY,CAChB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CACR,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,CAAC,CACxE;IAWK,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,IAAI,GAAG,IAAI,GACrB,OAAO,CAAC,IAAI,CAAC;IAIV,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9C,iBAAiB,CACrB,EAAE,EAAE,MAAM,EACV,eAAe,EAAE,MAAM,EACvB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;IAIV,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GACtC,OAAO,CAAC,SAAS,EAAE,CAAC;IAQjB,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAUrC,kBAAkB,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAMjD,uBAAuB,CAC3B,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GAAG,OAAO,EAChC,oBAAoB,EAAE,MAAM,GAAG,OAAO,GACrC,OAAO,CAAC,IAAI,CAAC;CAOjB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import type { CronDefinition, IOqronAdapter, JobRecord, ScheduleDefinition } from "../../core/index.js";
|
|
3
|
+
export declare class SqliteAdapter implements IOqronAdapter {
|
|
4
|
+
private readonly db;
|
|
5
|
+
/**
|
|
6
|
+
* @param dbOrPath - Either a `better-sqlite3` Database instance (for testing with `:memory:`)
|
|
7
|
+
* or a file path string. Defaults to `"oqron.sqlite"`.
|
|
8
|
+
*/
|
|
9
|
+
constructor(dbOrPath?: Database.Database | string);
|
|
10
|
+
/** Create tables if they don't exist */
|
|
11
|
+
migrate(): void;
|
|
12
|
+
upsertSchedule(def: CronDefinition | ScheduleDefinition): Promise<void>;
|
|
13
|
+
getDueSchedules(now: Date, limit: number, prefix?: string): Promise<Pick<CronDefinition, "name">[]>;
|
|
14
|
+
getSchedules(prefix?: string): Promise<Array<{
|
|
15
|
+
name: string;
|
|
16
|
+
lastRunAt: Date | null;
|
|
17
|
+
nextRunAt: Date | null;
|
|
18
|
+
}>>;
|
|
19
|
+
updateNextRun(scheduleId: string, nextRunAt: Date | null): Promise<void>;
|
|
20
|
+
updateJobProgress(id: string, progressPercent: number, progressLabel?: string): Promise<void>;
|
|
21
|
+
recordExecution(job: JobRecord): Promise<void>;
|
|
22
|
+
getExecutions(scheduleId: string, opts: {
|
|
23
|
+
limit: number;
|
|
24
|
+
offset: number;
|
|
25
|
+
}): Promise<JobRecord[]>;
|
|
26
|
+
getActiveJobs(): Promise<JobRecord[]>;
|
|
27
|
+
cleanOldExecutions(before: Date): Promise<number>;
|
|
28
|
+
pruneHistoryForSchedule(scheduleId: string, keepJobHistory: number | boolean, keepFailedJobHistory: number | boolean): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=sqlite.adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.adapter.d.ts","sourceRoot":"","sources":["../../../src/db/adapters/sqlite.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,SAAS,EACT,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAE7B,qBAAa,aAAc,YAAW,aAAa;IACjD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IAEvC;;;OAGG;gBACS,QAAQ,GAAE,QAAQ,CAAC,QAAQ,GAAG,MAAuB;IAYjE,wCAAwC;IACxC,OAAO,IAAI,IAAI;IA8DT,cAAc,CAClB,GAAG,EAAE,cAAc,GAAG,kBAAkB,GACvC,OAAO,CAAC,IAAI,CAAC;IA4CV,eAAe,CACnB,GAAG,EAAE,IAAI,EACT,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC;IAepC,YAAY,CAChB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CACR,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,CAAC,CACxE;IAqBK,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,IAAI,GAAG,IAAI,GACrB,OAAO,CAAC,IAAI,CAAC;IAMV,iBAAiB,CACrB,EAAE,EAAE,MAAM,EACV,eAAe,EAAE,MAAM,EACvB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;IAQV,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC9C,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GACtC,OAAO,CAAC,SAAS,EAAE,CAAC;IAqCjB,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAmCrC,kBAAkB,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAOjD,uBAAuB,CAC3B,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GAAG,OAAO,EAChC,oBAAoB,EAAE,MAAM,GAAG,OAAO,GACrC,OAAO,CAAC,IAAI,CAAC;CAmCjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC"}
|