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.
Files changed (109) hide show
  1. package/README.md +127 -0
  2. package/dist/chunk-I6QFT3MR.mjs +1732 -0
  3. package/dist/chunk-PLN5A6LU.mjs +1447 -0
  4. package/dist/core/config/config-loader.d.ts +3 -0
  5. package/dist/core/config/config-loader.d.ts.map +1 -0
  6. package/dist/core/config/default-config.d.ts +4 -0
  7. package/dist/core/config/default-config.d.ts.map +1 -0
  8. package/dist/core/config/define-config.d.ts +3 -0
  9. package/dist/core/config/define-config.d.ts.map +1 -0
  10. package/dist/core/config/find-up.d.ts +2 -0
  11. package/dist/core/config/find-up.d.ts.map +1 -0
  12. package/dist/core/config/schema.d.ts +306 -0
  13. package/dist/core/config/schema.d.ts.map +1 -0
  14. package/dist/core/context/cron-context.d.ts +14 -0
  15. package/dist/core/context/cron-context.d.ts.map +1 -0
  16. package/dist/core/context/cron-context.interface.d.ts +14 -0
  17. package/dist/core/context/cron-context.interface.d.ts.map +1 -0
  18. package/dist/core/context/job-context.d.ts +22 -0
  19. package/dist/core/context/job-context.d.ts.map +1 -0
  20. package/dist/core/context/schedule-context.d.ts +31 -0
  21. package/dist/core/context/schedule-context.d.ts.map +1 -0
  22. package/dist/core/errors/base.error.d.ts +13 -0
  23. package/dist/core/errors/base.error.d.ts.map +1 -0
  24. package/dist/core/events/event-bus.d.ts +16 -0
  25. package/dist/core/events/event-bus.d.ts.map +1 -0
  26. package/dist/core/index.d.ts +24 -0
  27. package/dist/core/index.d.ts.map +1 -0
  28. package/dist/core/logger/index.d.ts +30 -0
  29. package/dist/core/logger/index.d.ts.map +1 -0
  30. package/dist/core/registry.d.ts +13 -0
  31. package/dist/core/registry.d.ts.map +1 -0
  32. package/dist/core/types/config.types.d.ts +119 -0
  33. package/dist/core/types/config.types.d.ts.map +1 -0
  34. package/dist/core/types/cron.types.d.ts +53 -0
  35. package/dist/core/types/cron.types.d.ts.map +1 -0
  36. package/dist/core/types/db.types.d.ts +32 -0
  37. package/dist/core/types/db.types.d.ts.map +1 -0
  38. package/dist/core/types/index.d.ts +7 -0
  39. package/dist/core/types/index.d.ts.map +1 -0
  40. package/dist/core/types/lock.types.d.ts +7 -0
  41. package/dist/core/types/lock.types.d.ts.map +1 -0
  42. package/dist/core/types/module.types.d.ts +8 -0
  43. package/dist/core/types/module.types.d.ts.map +1 -0
  44. package/dist/core/types/scheduler.types.d.ts +62 -0
  45. package/dist/core/types/scheduler.types.d.ts.map +1 -0
  46. package/dist/cron-V0k1GcxJ.d.mts +102 -0
  47. package/dist/cron-V0k1GcxJ.d.ts +102 -0
  48. package/dist/cron.d.mts +2 -0
  49. package/dist/cron.d.ts +2 -0
  50. package/dist/cron.d.ts.map +1 -0
  51. package/dist/cron.js +215 -0
  52. package/dist/cron.mjs +1 -0
  53. package/dist/db/adapters/memory.adapter.d.ts +25 -0
  54. package/dist/db/adapters/memory.adapter.d.ts.map +1 -0
  55. package/dist/db/adapters/namespaced.adapter.d.ts +26 -0
  56. package/dist/db/adapters/namespaced.adapter.d.ts.map +1 -0
  57. package/dist/db/adapters/sqlite.adapter.d.ts +30 -0
  58. package/dist/db/adapters/sqlite.adapter.d.ts.map +1 -0
  59. package/dist/db/index.d.ts +4 -0
  60. package/dist/db/index.d.ts.map +1 -0
  61. package/dist/index.d.mts +797 -0
  62. package/dist/index.d.ts +32 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +2738 -0
  65. package/dist/index.mjs +747 -0
  66. package/dist/lock/adapters/db-lock.adapter.d.ts +17 -0
  67. package/dist/lock/adapters/db-lock.adapter.d.ts.map +1 -0
  68. package/dist/lock/adapters/memory-lock.adapter.d.ts +13 -0
  69. package/dist/lock/adapters/memory-lock.adapter.d.ts.map +1 -0
  70. package/dist/lock/adapters/namespaced-lock.adapter.d.ts +12 -0
  71. package/dist/lock/adapters/namespaced-lock.adapter.d.ts.map +1 -0
  72. package/dist/lock/heartbeat-worker.d.ts +16 -0
  73. package/dist/lock/heartbeat-worker.d.ts.map +1 -0
  74. package/dist/lock/index.d.ts +7 -0
  75. package/dist/lock/index.d.ts.map +1 -0
  76. package/dist/lock/leader-election.d.ts +16 -0
  77. package/dist/lock/leader-election.d.ts.map +1 -0
  78. package/dist/lock/stall-detector.d.ts +23 -0
  79. package/dist/lock/stall-detector.d.ts.map +1 -0
  80. package/dist/scheduler/cron-engine.d.ts +42 -0
  81. package/dist/scheduler/cron-engine.d.ts.map +1 -0
  82. package/dist/scheduler/define-cron.d.ts +36 -0
  83. package/dist/scheduler/define-cron.d.ts.map +1 -0
  84. package/dist/scheduler/define-schedule.d.ts +52 -0
  85. package/dist/scheduler/define-schedule.d.ts.map +1 -0
  86. package/dist/scheduler/expression-parser.d.ts +2 -0
  87. package/dist/scheduler/expression-parser.d.ts.map +1 -0
  88. package/dist/scheduler/index.d.ts +10 -0
  89. package/dist/scheduler/index.d.ts.map +1 -0
  90. package/dist/scheduler/missed-fire.handler.d.ts +8 -0
  91. package/dist/scheduler/missed-fire.handler.d.ts.map +1 -0
  92. package/dist/scheduler/registry-schedule.d.ts +6 -0
  93. package/dist/scheduler/registry-schedule.d.ts.map +1 -0
  94. package/dist/scheduler/registry.d.ts +6 -0
  95. package/dist/scheduler/registry.d.ts.map +1 -0
  96. package/dist/scheduler/schedule-engine.d.ts +36 -0
  97. package/dist/scheduler/schedule-engine.d.ts.map +1 -0
  98. package/dist/scheduler-HRR3UXGE.mjs +1 -0
  99. package/dist/scheduler.d.mts +248 -0
  100. package/dist/scheduler.d.ts +248 -0
  101. package/dist/scheduler.js +1461 -0
  102. package/dist/scheduler.mjs +1 -0
  103. package/dist/server/express.d.ts +9 -0
  104. package/dist/server/express.d.ts.map +1 -0
  105. package/dist/server/fastify.d.ts +9 -0
  106. package/dist/server/fastify.d.ts.map +1 -0
  107. package/dist/server/handlers.d.ts +15 -0
  108. package/dist/server/handlers.d.ts.map +1 -0
  109. package/package.json +59 -0
@@ -0,0 +1,119 @@
1
+ import type { ChronoLoggerConfig } from "../logger/index.js";
2
+ import type { IOqronAdapter } from "./db.types.js";
3
+ import type { ILockAdapter } from "./lock.types.js";
4
+ export type DbAdapterType = "sqlite" | "memory" | "postgres" | "mysql" | "mongodb" | "redis";
5
+ export type LockAdapterType = "db" | "memory" | "redis";
6
+ export interface OqronConfig {
7
+ /**
8
+ * The name of this project/service (e.g. 'acme-billing-svc')
9
+ */
10
+ project?: string;
11
+ /**
12
+ * Environment isolation.
13
+ * Workers in 'development' will never execute jobs enqueued in 'production'.
14
+ * @default "development"
15
+ */
16
+ environment?: string;
17
+ /**
18
+ * The primary database adapter (State Store).
19
+ * Union of explicit DI or declarative config.
20
+ */
21
+ db?: IOqronAdapter | {
22
+ adapter: DbAdapterType;
23
+ url?: string;
24
+ poolMin?: number;
25
+ poolMax?: number;
26
+ tablePrefix?: string;
27
+ migrations?: "auto" | "manual" | false;
28
+ ssl?: boolean;
29
+ };
30
+ /**
31
+ * The distributed lock adapter for safe concurrency.
32
+ * Union of explicit DI or declarative config.
33
+ */
34
+ lock?: ILockAdapter | {
35
+ adapter: LockAdapterType;
36
+ url?: string;
37
+ ttl?: number;
38
+ retryDelay?: number;
39
+ retryCount?: number;
40
+ };
41
+ /**
42
+ * The high-throughput message broker (optional, for PubSub/Queueing at scale)
43
+ */
44
+ broker?: any;
45
+ /**
46
+ * List of core modules to enable.
47
+ * e.g. ['cron', 'queue', 'workflow', 'batch', 'webhook', 'pipeline']
48
+ * @default []
49
+ */
50
+ modules?: ("cron" | "scheduler" | "queue" | "workflow" | "batch" | "webhook" | "pipeline")[];
51
+ /**
52
+ * Module-specific configs
53
+ */
54
+ cron?: {
55
+ enable?: boolean;
56
+ timezone?: string;
57
+ tickInterval?: number;
58
+ missedFirePolicy?: "skip" | "run-once" | "run-all";
59
+ maxConcurrentJobs?: number;
60
+ leaderElection?: boolean;
61
+ /** Rolling execution history. `true` = infinite, `false` = 0, `number` = keep N */
62
+ keepJobHistory?: boolean | number;
63
+ /** Override for failed tasks. Handled explicitly under errors */
64
+ keepFailedJobHistory?: boolean | number;
65
+ };
66
+ scheduler?: {
67
+ enable?: boolean;
68
+ tickInterval?: number;
69
+ keepJobHistory?: boolean | number;
70
+ keepFailedJobHistory?: boolean | number;
71
+ };
72
+ /**
73
+ * Directory to auto-discover job definition files from.
74
+ * OqronKit.init() scans this directory recursively for .ts/.js files
75
+ * that export definitions and registers them automatically.
76
+ * @default "./src/jobs"
77
+ */
78
+ jobsDir?: string;
79
+ /**
80
+ * Global tags applied to every job processed by this node.
81
+ * @default []
82
+ */
83
+ tags?: string[];
84
+ /**
85
+ * Worker-level configurations
86
+ */
87
+ worker?: {
88
+ /** Number of concurrent jobs this node processes simultaneously */
89
+ concurrency?: number;
90
+ /** Time in ms to wait for active jobs before SIGTERM exits */
91
+ gracefulShutdownMs?: number;
92
+ };
93
+ /**
94
+ * Logger configuration (powered by voltlog-io).
95
+ * Set to `false` to disable logging entirely.
96
+ */
97
+ logger?: ChronoLoggerConfig | false;
98
+ /**
99
+ * Telemetry configuration
100
+ */
101
+ telemetry?: {
102
+ prometheus?: {
103
+ enabled?: boolean;
104
+ path?: string;
105
+ };
106
+ opentelemetry?: {
107
+ enabled?: boolean;
108
+ };
109
+ };
110
+ /**
111
+ * Graceful shutdown configuration
112
+ */
113
+ shutdown?: {
114
+ enabled?: boolean;
115
+ timeout?: number;
116
+ signals?: string[];
117
+ };
118
+ }
119
+ //# sourceMappingURL=config.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../src/core/types/config.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { ICronContext } from "../context/cron-context.interface.js";
2
+ export type MissedFirePolicy = "skip" | "run-once" | "run-all";
3
+ export type OverlapPolicy = "skip" | "run" | boolean;
4
+ export interface EveryConfig {
5
+ seconds?: number;
6
+ minutes?: number;
7
+ hours?: number;
8
+ }
9
+ export interface RetryConfig {
10
+ max: number;
11
+ strategy: "exponential" | "fixed";
12
+ baseDelay: number;
13
+ }
14
+ export interface CronHooks {
15
+ beforeRun?: (ctx: ICronContext) => Promise<void> | void;
16
+ afterRun?: (ctx: ICronContext, result: unknown) => Promise<void> | void;
17
+ onError?: (ctx: ICronContext, error: Error) => Promise<void> | void;
18
+ onMissedFire?: (ctx: ICronContext, missedAt: Date) => Promise<void> | void;
19
+ }
20
+ export interface CronDefinition {
21
+ name: string;
22
+ expression?: string;
23
+ intervalMs?: number;
24
+ timezone?: string;
25
+ missedFire: MissedFirePolicy;
26
+ overlap: OverlapPolicy;
27
+ guaranteedWorker?: boolean;
28
+ heartbeatMs?: number;
29
+ lockTtlMs?: number;
30
+ timeout?: number;
31
+ tags: string[];
32
+ /** Override global history rolling. `true` = infinite, `false` = none, `number` = max retained jobs. */
33
+ keepHistory?: boolean | number;
34
+ /** Keep specific bounded history length for failed jobs overriding general logic */
35
+ keepFailedHistory?: boolean | number;
36
+ handler: (ctx: ICronContext) => Promise<unknown>;
37
+ hooks?: CronHooks;
38
+ retries?: RetryConfig;
39
+ }
40
+ export interface JobRecord {
41
+ id: string;
42
+ scheduleId?: string;
43
+ status: "running" | "completed" | "failed" | "missed" | "dead";
44
+ startedAt: Date;
45
+ completedAt?: Date;
46
+ error?: string;
47
+ result?: string;
48
+ progressPercent?: number;
49
+ progressLabel?: string;
50
+ attempts?: number;
51
+ durationMs?: number;
52
+ }
53
+ //# sourceMappingURL=cron.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.types.d.ts","sourceRoot":"","sources":["../../../src/core/types/cron.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEzE,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAC/D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACxD,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACxE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpE,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC5E;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,OAAO,EAAE,aAAa,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,wGAAwG;IACxG,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/D,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,32 @@
1
+ import type { CronDefinition, JobRecord } from "./cron.types.js";
2
+ import type { ScheduleDefinition } from "./scheduler.types.js";
3
+ export interface IOqronAdapter {
4
+ /** Insert or update a schedule definition */
5
+ upsertSchedule(def: CronDefinition | ScheduleDefinition): Promise<void>;
6
+ /** Get schedules that are due to fire (nextRunAt <= now, or never run) */
7
+ getDueSchedules(now: Date, limit: number, prefix?: string): Promise<Pick<CronDefinition | ScheduleDefinition, "name">[]>;
8
+ /** Get all registered schedules and their run metadata */
9
+ getSchedules(prefix?: string): Promise<Array<{
10
+ name: string;
11
+ lastRunAt: Date | null;
12
+ nextRunAt: Date | null;
13
+ }>>;
14
+ /** Update nextRunAt for a schedule */
15
+ updateNextRun(scheduleId: string, nextRunAt: Date | null): Promise<void>;
16
+ /** Record a job execution (insert or update) */
17
+ recordExecution(job: JobRecord): Promise<void>;
18
+ /** Update progress of an active job */
19
+ updateJobProgress(id: string, progressPercent: number, progressLabel?: string): Promise<void>;
20
+ /** Get execution history for a schedule */
21
+ getExecutions(scheduleId: string, opts: {
22
+ limit: number;
23
+ offset: number;
24
+ }): Promise<JobRecord[]>;
25
+ /** Get all jobs currently marked as running */
26
+ getActiveJobs(): Promise<JobRecord[]>;
27
+ /** Clean old execution records */
28
+ cleanOldExecutions(before: Date): Promise<number>;
29
+ /** Roll history based on config settings */
30
+ pruneHistoryForSchedule(scheduleId: string, keepJobHistory: number | boolean, keepFailedJobHistory: number | boolean): Promise<void>;
31
+ }
32
+ //# sourceMappingURL=db.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.types.d.ts","sourceRoot":"","sources":["../../../src/core/types/db.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE,0EAA0E;IAC1E,eAAe,CACb,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,CAAC;IAEhE,0DAA0D;IAC1D,YAAY,CACV,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,CAAC;IAEF,sCAAsC;IACtC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE,gDAAgD;IAChD,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C,uCAAuC;IACvC,iBAAiB,CACf,EAAE,EAAE,MAAM,EACV,eAAe,EAAE,MAAM,EACvB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,2CAA2C;IAC3C,aAAa,CACX,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GACtC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAExB,+CAA+C;IAC/C,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAEtC,kCAAkC;IAClC,kBAAkB,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAElD,4CAA4C;IAC5C,uBAAuB,CACrB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GAAG,OAAO,EAChC,oBAAoB,EAAE,MAAM,GAAG,OAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB"}
@@ -0,0 +1,7 @@
1
+ export type { OqronConfig } from "./config.types.js";
2
+ export type { CronDefinition, CronHooks, EveryConfig, JobRecord, MissedFirePolicy, OverlapPolicy, } from "./cron.types.js";
3
+ export type { IOqronAdapter } from "./db.types.js";
4
+ export type { ILockAdapter } from "./lock.types.js";
5
+ export type { IChronoModule } from "./module.types.js";
6
+ export type { IScheduleContext, ScheduleDefinition, ScheduleHooks, ScheduleRecurring, ScheduleRunAfter, } from "./scheduler.types.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EACV,cAAc,EACd,SAAS,EACT,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface ILockAdapter {
2
+ acquire(key: string, ownerId: string, ttlMs: number): Promise<boolean>;
3
+ renew(key: string, ownerId: string, ttlMs: number): Promise<boolean>;
4
+ release(key: string, ownerId: string): Promise<void>;
5
+ isOwner(key: string, ownerId: string): Promise<boolean>;
6
+ }
7
+ //# sourceMappingURL=lock.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.types.d.ts","sourceRoot":"","sources":["../../../src/core/types/lock.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACzD"}
@@ -0,0 +1,8 @@
1
+ export interface IChronoModule {
2
+ readonly name: string;
3
+ readonly enabled: boolean;
4
+ init(): Promise<void>;
5
+ start(): Promise<void>;
6
+ stop(): Promise<void>;
7
+ }
8
+ //# sourceMappingURL=module.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.types.d.ts","sourceRoot":"","sources":["../../../src/core/types/module.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB"}
@@ -0,0 +1,62 @@
1
+ import type { MissedFirePolicy, OverlapPolicy, RetryConfig } from "./cron.types.js";
2
+ export interface ScheduleRecurring {
3
+ frequency: "daily" | "weekly" | "monthly" | "yearly";
4
+ dayOfMonth?: number;
5
+ at?: {
6
+ hour: number;
7
+ minute: number;
8
+ };
9
+ months?: number[];
10
+ }
11
+ export interface ScheduleRunAfter {
12
+ days?: number;
13
+ hours?: number;
14
+ minutes?: number;
15
+ seconds?: number;
16
+ }
17
+ export interface ScheduleHooks<TPayload = unknown> {
18
+ beforeRun?: (ctx: IScheduleContext<TPayload>) => Promise<void> | void;
19
+ afterRun?: (ctx: IScheduleContext<TPayload>, result: unknown) => Promise<void> | void;
20
+ onError?: (ctx: IScheduleContext<TPayload>, error: Error) => Promise<void> | void;
21
+ onMissedFire?: (ctx: IScheduleContext<TPayload>, missedAt: Date) => Promise<void> | void;
22
+ }
23
+ export interface IScheduleContext<TPayload = unknown> {
24
+ name: string;
25
+ firedAt: Date;
26
+ payload: TPayload;
27
+ duration: number;
28
+ environment?: string;
29
+ project?: string;
30
+ log(level: string, message: string, meta?: Record<string, unknown>): void;
31
+ progress(percent: number, label?: string): void;
32
+ }
33
+ export interface ScheduleDefinition<TPayload = unknown> {
34
+ name: string;
35
+ runAt?: Date;
36
+ runAfter?: ScheduleRunAfter;
37
+ recurring?: ScheduleRecurring;
38
+ rrule?: string;
39
+ every?: {
40
+ minutes?: number;
41
+ hours?: number;
42
+ seconds?: number;
43
+ };
44
+ timezone?: string;
45
+ missedFire: MissedFirePolicy;
46
+ overlap: OverlapPolicy;
47
+ guaranteedWorker?: boolean;
48
+ heartbeatMs?: number;
49
+ lockTtlMs?: number;
50
+ timeout?: number;
51
+ tags: string[];
52
+ /** Override global history rolling. `true` = infinite, `false` = none, `number` = max retained jobs. */
53
+ keepHistory?: boolean | number;
54
+ /** Keep specific bounded history length for failed jobs overriding general logic */
55
+ keepFailedHistory?: boolean | number;
56
+ condition?: (ctx: IScheduleContext<TPayload>) => Promise<boolean> | boolean;
57
+ handler: (ctx: IScheduleContext<TPayload>) => Promise<unknown>;
58
+ hooks?: ScheduleHooks<TPayload>;
59
+ retries?: RetryConfig;
60
+ payload?: TPayload;
61
+ }
62
+ //# sourceMappingURL=scheduler.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.types.d.ts","sourceRoot":"","sources":["../../../src/core/types/scheduler.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import { Logger } from 'voltlog-io';
2
+
3
+ interface ICronContext {
4
+ readonly id: string;
5
+ readonly log: Logger;
6
+ readonly signal: AbortSignal;
7
+ readonly firedAt: Date;
8
+ readonly scheduleName: string;
9
+ readonly duration: number;
10
+ readonly environment?: string;
11
+ readonly project?: string;
12
+ progress(value: number, label?: string): void;
13
+ getProgress(): number;
14
+ }
15
+
16
+ type MissedFirePolicy = "skip" | "run-once" | "run-all";
17
+ type OverlapPolicy = "skip" | "run" | boolean;
18
+ interface EveryConfig {
19
+ seconds?: number;
20
+ minutes?: number;
21
+ hours?: number;
22
+ }
23
+ interface RetryConfig {
24
+ max: number;
25
+ strategy: "exponential" | "fixed";
26
+ baseDelay: number;
27
+ }
28
+ interface CronHooks {
29
+ beforeRun?: (ctx: ICronContext) => Promise<void> | void;
30
+ afterRun?: (ctx: ICronContext, result: unknown) => Promise<void> | void;
31
+ onError?: (ctx: ICronContext, error: Error) => Promise<void> | void;
32
+ onMissedFire?: (ctx: ICronContext, missedAt: Date) => Promise<void> | void;
33
+ }
34
+ interface CronDefinition {
35
+ name: string;
36
+ expression?: string;
37
+ intervalMs?: number;
38
+ timezone?: string;
39
+ missedFire: MissedFirePolicy;
40
+ overlap: OverlapPolicy;
41
+ guaranteedWorker?: boolean;
42
+ heartbeatMs?: number;
43
+ lockTtlMs?: number;
44
+ timeout?: number;
45
+ tags: string[];
46
+ /** Override global history rolling. `true` = infinite, `false` = none, `number` = max retained jobs. */
47
+ keepHistory?: boolean | number;
48
+ /** Keep specific bounded history length for failed jobs overriding general logic */
49
+ keepFailedHistory?: boolean | number;
50
+ handler: (ctx: ICronContext) => Promise<unknown>;
51
+ hooks?: CronHooks;
52
+ retries?: RetryConfig;
53
+ }
54
+ interface JobRecord {
55
+ id: string;
56
+ scheduleId?: string;
57
+ status: "running" | "completed" | "failed" | "missed" | "dead";
58
+ startedAt: Date;
59
+ completedAt?: Date;
60
+ error?: string;
61
+ result?: string;
62
+ progressPercent?: number;
63
+ progressLabel?: string;
64
+ attempts?: number;
65
+ durationMs?: number;
66
+ }
67
+
68
+ type CronScheduleConfig = {
69
+ expression: string;
70
+ every?: never;
71
+ } | {
72
+ every: EveryConfig;
73
+ expression?: never;
74
+ };
75
+ type DefineCronOptions = CronScheduleConfig & {
76
+ name: string;
77
+ timezone?: string;
78
+ missedFire?: MissedFirePolicy;
79
+ overlap?: OverlapPolicy;
80
+ guaranteedWorker?: boolean;
81
+ heartbeatMs?: number;
82
+ lockTtlMs?: number;
83
+ timeout?: number;
84
+ tags?: string[];
85
+ handler: (ctx: ICronContext) => Promise<unknown>;
86
+ hooks?: CronHooks;
87
+ retries?: RetryConfig;
88
+ };
89
+ /**
90
+ * Define a cron job. Automatically registers it with OqronKit
91
+ * so that `OqronKit.init()` discovers it without manual wiring.
92
+ *
93
+ * @example
94
+ * // Expression-based
95
+ * cron({ name: 'billing', expression: '0 0 1 * *', handler: ... })
96
+ *
97
+ * // Interval-based
98
+ * cron({ name: 'sync', every: { minutes: 15 }, handler: ... })
99
+ */
100
+ declare const cron: (options: DefineCronOptions) => CronDefinition;
101
+
102
+ export { type CronDefinition as C, type DefineCronOptions as D, type JobRecord as J, type MissedFirePolicy as M, type OverlapPolicy as O, type RetryConfig as R, cron as c };
@@ -0,0 +1,102 @@
1
+ import { Logger } from 'voltlog-io';
2
+
3
+ interface ICronContext {
4
+ readonly id: string;
5
+ readonly log: Logger;
6
+ readonly signal: AbortSignal;
7
+ readonly firedAt: Date;
8
+ readonly scheduleName: string;
9
+ readonly duration: number;
10
+ readonly environment?: string;
11
+ readonly project?: string;
12
+ progress(value: number, label?: string): void;
13
+ getProgress(): number;
14
+ }
15
+
16
+ type MissedFirePolicy = "skip" | "run-once" | "run-all";
17
+ type OverlapPolicy = "skip" | "run" | boolean;
18
+ interface EveryConfig {
19
+ seconds?: number;
20
+ minutes?: number;
21
+ hours?: number;
22
+ }
23
+ interface RetryConfig {
24
+ max: number;
25
+ strategy: "exponential" | "fixed";
26
+ baseDelay: number;
27
+ }
28
+ interface CronHooks {
29
+ beforeRun?: (ctx: ICronContext) => Promise<void> | void;
30
+ afterRun?: (ctx: ICronContext, result: unknown) => Promise<void> | void;
31
+ onError?: (ctx: ICronContext, error: Error) => Promise<void> | void;
32
+ onMissedFire?: (ctx: ICronContext, missedAt: Date) => Promise<void> | void;
33
+ }
34
+ interface CronDefinition {
35
+ name: string;
36
+ expression?: string;
37
+ intervalMs?: number;
38
+ timezone?: string;
39
+ missedFire: MissedFirePolicy;
40
+ overlap: OverlapPolicy;
41
+ guaranteedWorker?: boolean;
42
+ heartbeatMs?: number;
43
+ lockTtlMs?: number;
44
+ timeout?: number;
45
+ tags: string[];
46
+ /** Override global history rolling. `true` = infinite, `false` = none, `number` = max retained jobs. */
47
+ keepHistory?: boolean | number;
48
+ /** Keep specific bounded history length for failed jobs overriding general logic */
49
+ keepFailedHistory?: boolean | number;
50
+ handler: (ctx: ICronContext) => Promise<unknown>;
51
+ hooks?: CronHooks;
52
+ retries?: RetryConfig;
53
+ }
54
+ interface JobRecord {
55
+ id: string;
56
+ scheduleId?: string;
57
+ status: "running" | "completed" | "failed" | "missed" | "dead";
58
+ startedAt: Date;
59
+ completedAt?: Date;
60
+ error?: string;
61
+ result?: string;
62
+ progressPercent?: number;
63
+ progressLabel?: string;
64
+ attempts?: number;
65
+ durationMs?: number;
66
+ }
67
+
68
+ type CronScheduleConfig = {
69
+ expression: string;
70
+ every?: never;
71
+ } | {
72
+ every: EveryConfig;
73
+ expression?: never;
74
+ };
75
+ type DefineCronOptions = CronScheduleConfig & {
76
+ name: string;
77
+ timezone?: string;
78
+ missedFire?: MissedFirePolicy;
79
+ overlap?: OverlapPolicy;
80
+ guaranteedWorker?: boolean;
81
+ heartbeatMs?: number;
82
+ lockTtlMs?: number;
83
+ timeout?: number;
84
+ tags?: string[];
85
+ handler: (ctx: ICronContext) => Promise<unknown>;
86
+ hooks?: CronHooks;
87
+ retries?: RetryConfig;
88
+ };
89
+ /**
90
+ * Define a cron job. Automatically registers it with OqronKit
91
+ * so that `OqronKit.init()` discovers it without manual wiring.
92
+ *
93
+ * @example
94
+ * // Expression-based
95
+ * cron({ name: 'billing', expression: '0 0 1 * *', handler: ... })
96
+ *
97
+ * // Interval-based
98
+ * cron({ name: 'sync', every: { minutes: 15 }, handler: ... })
99
+ */
100
+ declare const cron: (options: DefineCronOptions) => CronDefinition;
101
+
102
+ export { type CronDefinition as C, type DefineCronOptions as D, type JobRecord as J, type MissedFirePolicy as M, type OverlapPolicy as O, type RetryConfig as R, cron as c };
@@ -0,0 +1,2 @@
1
+ export { D as DefineCronOptions, c as cron } from './cron-V0k1GcxJ.mjs';
2
+ import 'voltlog-io';
package/dist/cron.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { cron, type DefineCronOptions } from "./scheduler/index.js";
2
+ //# sourceMappingURL=cron.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../src/cron.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}