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,3 @@
1
+ import { type ValidatedConfig } from "./schema.js";
2
+ export declare function loadConfig(cwd?: string): Promise<ValidatedConfig>;
3
+ //# sourceMappingURL=config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../src/core/config/config-loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEtE,wBAAsB,UAAU,CAC9B,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAuC1B"}
@@ -0,0 +1,4 @@
1
+ import type { OqronConfig } from "../types";
2
+ import type { ValidatedConfig } from "./schema";
3
+ export declare function reconfigureConfig(config: OqronConfig): ValidatedConfig;
4
+ //# sourceMappingURL=default-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-config.d.ts","sourceRoot":"","sources":["../../../src/core/config/default-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAiEhD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,CAqEtE"}
@@ -0,0 +1,3 @@
1
+ import type { OqronConfig } from "../types/config.types.js";
2
+ export declare function defineConfig(config: OqronConfig): OqronConfig;
3
+ //# sourceMappingURL=define-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-config.d.ts","sourceRoot":"","sources":["../../../src/core/config/define-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAE7D"}
@@ -0,0 +1,2 @@
1
+ export declare function findUpPath(filename: string, cwd: string): Promise<string | undefined>;
2
+ //# sourceMappingURL=find-up.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-up.d.ts","sourceRoot":"","sources":["../../../src/core/config/find-up.ts"],"names":[],"mappings":"AAEA,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE7B"}
@@ -0,0 +1,306 @@
1
+ import { z } from "zod";
2
+ import type { IOqronAdapter } from "../types/db.types.js";
3
+ import type { ILockAdapter } from "../types/lock.types.js";
4
+ export declare const OqronConfigSchema: z.ZodObject<{
5
+ project: z.ZodOptional<z.ZodString>;
6
+ environment: z.ZodDefault<z.ZodString>;
7
+ db: z.ZodOptional<z.ZodUnion<[z.ZodType<IOqronAdapter, z.ZodTypeDef, IOqronAdapter>, z.ZodObject<{
8
+ adapter: z.ZodEnum<["sqlite", "memory", "postgres", "mysql", "mongodb", "redis"]>;
9
+ url: z.ZodOptional<z.ZodString>;
10
+ poolMin: z.ZodDefault<z.ZodNumber>;
11
+ poolMax: z.ZodDefault<z.ZodNumber>;
12
+ tablePrefix: z.ZodDefault<z.ZodString>;
13
+ migrations: z.ZodDefault<z.ZodUnion<[z.ZodEnum<["auto", "manual"]>, z.ZodLiteral<false>]>>;
14
+ ssl: z.ZodDefault<z.ZodBoolean>;
15
+ }, "strip", z.ZodTypeAny, {
16
+ adapter: "sqlite" | "memory" | "postgres" | "mysql" | "mongodb" | "redis";
17
+ poolMin: number;
18
+ poolMax: number;
19
+ tablePrefix: string;
20
+ migrations: false | "auto" | "manual";
21
+ ssl: boolean;
22
+ url?: string | undefined;
23
+ }, {
24
+ adapter: "sqlite" | "memory" | "postgres" | "mysql" | "mongodb" | "redis";
25
+ url?: string | undefined;
26
+ poolMin?: number | undefined;
27
+ poolMax?: number | undefined;
28
+ tablePrefix?: string | undefined;
29
+ migrations?: false | "auto" | "manual" | undefined;
30
+ ssl?: boolean | undefined;
31
+ }>]>>;
32
+ lock: z.ZodOptional<z.ZodUnion<[z.ZodType<ILockAdapter, z.ZodTypeDef, ILockAdapter>, z.ZodObject<{
33
+ adapter: z.ZodEnum<["db", "memory", "redis"]>;
34
+ url: z.ZodOptional<z.ZodString>;
35
+ ttl: z.ZodDefault<z.ZodNumber>;
36
+ retryDelay: z.ZodDefault<z.ZodNumber>;
37
+ retryCount: z.ZodDefault<z.ZodNumber>;
38
+ }, "strip", z.ZodTypeAny, {
39
+ adapter: "memory" | "redis" | "db";
40
+ ttl: number;
41
+ retryDelay: number;
42
+ retryCount: number;
43
+ url?: string | undefined;
44
+ }, {
45
+ adapter: "memory" | "redis" | "db";
46
+ url?: string | undefined;
47
+ ttl?: number | undefined;
48
+ retryDelay?: number | undefined;
49
+ retryCount?: number | undefined;
50
+ }>]>>;
51
+ broker: z.ZodOptional<z.ZodAny>;
52
+ modules: z.ZodDefault<z.ZodArray<z.ZodEnum<["cron", "scheduler", "queue", "workflow", "batch", "webhook", "pipeline"]>, "many">>;
53
+ cron: z.ZodDefault<z.ZodObject<{
54
+ enable: z.ZodDefault<z.ZodBoolean>;
55
+ timezone: z.ZodOptional<z.ZodString>;
56
+ tickInterval: z.ZodDefault<z.ZodNumber>;
57
+ missedFirePolicy: z.ZodDefault<z.ZodEnum<["skip", "run-once", "run-all"]>>;
58
+ maxConcurrentJobs: z.ZodDefault<z.ZodNumber>;
59
+ leaderElection: z.ZodDefault<z.ZodBoolean>;
60
+ keepJobHistory: z.ZodDefault<z.ZodUnion<[z.ZodBoolean, z.ZodNumber]>>;
61
+ keepFailedJobHistory: z.ZodDefault<z.ZodUnion<[z.ZodBoolean, z.ZodNumber]>>;
62
+ }, "strip", z.ZodTypeAny, {
63
+ enable: boolean;
64
+ tickInterval: number;
65
+ missedFirePolicy: "skip" | "run-once" | "run-all";
66
+ maxConcurrentJobs: number;
67
+ leaderElection: boolean;
68
+ keepJobHistory: number | boolean;
69
+ keepFailedJobHistory: number | boolean;
70
+ timezone?: string | undefined;
71
+ }, {
72
+ timezone?: string | undefined;
73
+ enable?: boolean | undefined;
74
+ tickInterval?: number | undefined;
75
+ missedFirePolicy?: "skip" | "run-once" | "run-all" | undefined;
76
+ maxConcurrentJobs?: number | undefined;
77
+ leaderElection?: boolean | undefined;
78
+ keepJobHistory?: number | boolean | undefined;
79
+ keepFailedJobHistory?: number | boolean | undefined;
80
+ }>>;
81
+ scheduler: z.ZodDefault<z.ZodObject<{
82
+ enable: z.ZodDefault<z.ZodBoolean>;
83
+ tickInterval: z.ZodDefault<z.ZodNumber>;
84
+ keepJobHistory: z.ZodDefault<z.ZodUnion<[z.ZodBoolean, z.ZodNumber]>>;
85
+ keepFailedJobHistory: z.ZodDefault<z.ZodUnion<[z.ZodBoolean, z.ZodNumber]>>;
86
+ }, "strip", z.ZodTypeAny, {
87
+ enable: boolean;
88
+ tickInterval: number;
89
+ keepJobHistory: number | boolean;
90
+ keepFailedJobHistory: number | boolean;
91
+ }, {
92
+ enable?: boolean | undefined;
93
+ tickInterval?: number | undefined;
94
+ keepJobHistory?: number | boolean | undefined;
95
+ keepFailedJobHistory?: number | boolean | undefined;
96
+ }>>;
97
+ jobsDir: z.ZodDefault<z.ZodString>;
98
+ tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
99
+ worker: z.ZodDefault<z.ZodObject<{
100
+ concurrency: z.ZodDefault<z.ZodNumber>;
101
+ gracefulShutdownMs: z.ZodDefault<z.ZodNumber>;
102
+ }, "strip", z.ZodTypeAny, {
103
+ concurrency: number;
104
+ gracefulShutdownMs: number;
105
+ }, {
106
+ concurrency?: number | undefined;
107
+ gracefulShutdownMs?: number | undefined;
108
+ }>>;
109
+ logger: z.ZodDefault<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
110
+ enabled: z.ZodDefault<z.ZodBoolean>;
111
+ level: z.ZodDefault<z.ZodString>;
112
+ prettify: z.ZodDefault<z.ZodBoolean>;
113
+ showMetadata: z.ZodDefault<z.ZodBoolean>;
114
+ redact: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
115
+ }, "strip", z.ZodTypeAny, {
116
+ enabled: boolean;
117
+ redact: string[];
118
+ level: string;
119
+ prettify: boolean;
120
+ showMetadata: boolean;
121
+ }, {
122
+ enabled?: boolean | undefined;
123
+ redact?: string[] | undefined;
124
+ level?: string | undefined;
125
+ prettify?: boolean | undefined;
126
+ showMetadata?: boolean | undefined;
127
+ }>]>>;
128
+ telemetry: z.ZodDefault<z.ZodObject<{
129
+ prometheus: z.ZodDefault<z.ZodObject<{
130
+ enabled: z.ZodDefault<z.ZodBoolean>;
131
+ path: z.ZodDefault<z.ZodString>;
132
+ }, "strip", z.ZodTypeAny, {
133
+ enabled: boolean;
134
+ path: string;
135
+ }, {
136
+ enabled?: boolean | undefined;
137
+ path?: string | undefined;
138
+ }>>;
139
+ opentelemetry: z.ZodDefault<z.ZodObject<{
140
+ enabled: z.ZodDefault<z.ZodBoolean>;
141
+ }, "strip", z.ZodTypeAny, {
142
+ enabled: boolean;
143
+ }, {
144
+ enabled?: boolean | undefined;
145
+ }>>;
146
+ }, "strip", z.ZodTypeAny, {
147
+ prometheus: {
148
+ enabled: boolean;
149
+ path: string;
150
+ };
151
+ opentelemetry: {
152
+ enabled: boolean;
153
+ };
154
+ }, {
155
+ prometheus?: {
156
+ enabled?: boolean | undefined;
157
+ path?: string | undefined;
158
+ } | undefined;
159
+ opentelemetry?: {
160
+ enabled?: boolean | undefined;
161
+ } | undefined;
162
+ }>>;
163
+ shutdown: z.ZodDefault<z.ZodObject<{
164
+ enabled: z.ZodDefault<z.ZodBoolean>;
165
+ timeout: z.ZodDefault<z.ZodNumber>;
166
+ signals: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
167
+ }, "strip", z.ZodTypeAny, {
168
+ enabled: boolean;
169
+ timeout: number;
170
+ signals: string[];
171
+ }, {
172
+ enabled?: boolean | undefined;
173
+ timeout?: number | undefined;
174
+ signals?: string[] | undefined;
175
+ }>>;
176
+ }, "strip", z.ZodTypeAny, {
177
+ logger: false | {
178
+ enabled: boolean;
179
+ redact: string[];
180
+ level: string;
181
+ prettify: boolean;
182
+ showMetadata: boolean;
183
+ };
184
+ tags: string[];
185
+ cron: {
186
+ enable: boolean;
187
+ tickInterval: number;
188
+ missedFirePolicy: "skip" | "run-once" | "run-all";
189
+ maxConcurrentJobs: number;
190
+ leaderElection: boolean;
191
+ keepJobHistory: number | boolean;
192
+ keepFailedJobHistory: number | boolean;
193
+ timezone?: string | undefined;
194
+ };
195
+ scheduler: {
196
+ enable: boolean;
197
+ tickInterval: number;
198
+ keepJobHistory: number | boolean;
199
+ keepFailedJobHistory: number | boolean;
200
+ };
201
+ environment: string;
202
+ modules: ("cron" | "scheduler" | "queue" | "workflow" | "batch" | "webhook" | "pipeline")[];
203
+ jobsDir: string;
204
+ worker: {
205
+ concurrency: number;
206
+ gracefulShutdownMs: number;
207
+ };
208
+ telemetry: {
209
+ prometheus: {
210
+ enabled: boolean;
211
+ path: string;
212
+ };
213
+ opentelemetry: {
214
+ enabled: boolean;
215
+ };
216
+ };
217
+ shutdown: {
218
+ enabled: boolean;
219
+ timeout: number;
220
+ signals: string[];
221
+ };
222
+ db?: IOqronAdapter | {
223
+ adapter: "sqlite" | "memory" | "postgres" | "mysql" | "mongodb" | "redis";
224
+ poolMin: number;
225
+ poolMax: number;
226
+ tablePrefix: string;
227
+ migrations: false | "auto" | "manual";
228
+ ssl: boolean;
229
+ url?: string | undefined;
230
+ } | undefined;
231
+ project?: string | undefined;
232
+ lock?: ILockAdapter | {
233
+ adapter: "memory" | "redis" | "db";
234
+ ttl: number;
235
+ retryDelay: number;
236
+ retryCount: number;
237
+ url?: string | undefined;
238
+ } | undefined;
239
+ broker?: any;
240
+ }, {
241
+ logger?: false | {
242
+ enabled?: boolean | undefined;
243
+ redact?: string[] | undefined;
244
+ level?: string | undefined;
245
+ prettify?: boolean | undefined;
246
+ showMetadata?: boolean | undefined;
247
+ } | undefined;
248
+ tags?: string[] | undefined;
249
+ db?: IOqronAdapter | {
250
+ adapter: "sqlite" | "memory" | "postgres" | "mysql" | "mongodb" | "redis";
251
+ url?: string | undefined;
252
+ poolMin?: number | undefined;
253
+ poolMax?: number | undefined;
254
+ tablePrefix?: string | undefined;
255
+ migrations?: false | "auto" | "manual" | undefined;
256
+ ssl?: boolean | undefined;
257
+ } | undefined;
258
+ cron?: {
259
+ timezone?: string | undefined;
260
+ enable?: boolean | undefined;
261
+ tickInterval?: number | undefined;
262
+ missedFirePolicy?: "skip" | "run-once" | "run-all" | undefined;
263
+ maxConcurrentJobs?: number | undefined;
264
+ leaderElection?: boolean | undefined;
265
+ keepJobHistory?: number | boolean | undefined;
266
+ keepFailedJobHistory?: number | boolean | undefined;
267
+ } | undefined;
268
+ scheduler?: {
269
+ enable?: boolean | undefined;
270
+ tickInterval?: number | undefined;
271
+ keepJobHistory?: number | boolean | undefined;
272
+ keepFailedJobHistory?: number | boolean | undefined;
273
+ } | undefined;
274
+ project?: string | undefined;
275
+ environment?: string | undefined;
276
+ lock?: ILockAdapter | {
277
+ adapter: "memory" | "redis" | "db";
278
+ url?: string | undefined;
279
+ ttl?: number | undefined;
280
+ retryDelay?: number | undefined;
281
+ retryCount?: number | undefined;
282
+ } | undefined;
283
+ broker?: any;
284
+ modules?: ("cron" | "scheduler" | "queue" | "workflow" | "batch" | "webhook" | "pipeline")[] | undefined;
285
+ jobsDir?: string | undefined;
286
+ worker?: {
287
+ concurrency?: number | undefined;
288
+ gracefulShutdownMs?: number | undefined;
289
+ } | undefined;
290
+ telemetry?: {
291
+ prometheus?: {
292
+ enabled?: boolean | undefined;
293
+ path?: string | undefined;
294
+ } | undefined;
295
+ opentelemetry?: {
296
+ enabled?: boolean | undefined;
297
+ } | undefined;
298
+ } | undefined;
299
+ shutdown?: {
300
+ enabled?: boolean | undefined;
301
+ timeout?: number | undefined;
302
+ signals?: string[] | undefined;
303
+ } | undefined;
304
+ }>;
305
+ export type ValidatedConfig = z.infer<typeof OqronConfigSchema>;
306
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/core/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAmB3D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqJ5B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ICronContext } from "./cron-context.interface.js";
2
+ import { type BaseJobContextOptions, JobContext } from "./job-context.js";
3
+ export interface CronContextOptions extends BaseJobContextOptions {
4
+ firedAt: Date;
5
+ scheduleName: string;
6
+ }
7
+ export declare class CronContext extends JobContext implements ICronContext {
8
+ readonly firedAt: Date;
9
+ readonly scheduleName: string;
10
+ private readonly startedLocalAt;
11
+ constructor(opts: CronContextOptions);
12
+ get duration(): number;
13
+ }
14
+ //# sourceMappingURL=cron-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-context.d.ts","sourceRoot":"","sources":["../../../src/core/context/cron-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,KAAK,qBAAqB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1E,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB;IAC/D,OAAO,EAAE,IAAI,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB;AAGD,qBAAa,WAAY,SAAQ,UAAW,YAAW,YAAY;IACjE,SAAgB,OAAO,EAAE,IAAI,CAAC;IAC9B,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,IAAI,EAAE,kBAAkB;IAOpC,IAAI,QAAQ,IAAI,MAAM,CAErB;CACF"}
@@ -0,0 +1,14 @@
1
+ import type { Logger } from "../logger/index.js";
2
+ export interface ICronContext {
3
+ readonly id: string;
4
+ readonly log: Logger;
5
+ readonly signal: AbortSignal;
6
+ readonly firedAt: Date;
7
+ readonly scheduleName: string;
8
+ readonly duration: number;
9
+ readonly environment?: string;
10
+ readonly project?: string;
11
+ progress(value: number, label?: string): void;
12
+ getProgress(): number;
13
+ }
14
+ //# sourceMappingURL=cron-context.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-context.interface.d.ts","sourceRoot":"","sources":["../../../src/core/context/cron-context.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,WAAW,IAAI,MAAM,CAAC;CACvB"}
@@ -0,0 +1,22 @@
1
+ import type { Logger } from "../logger/index.js";
2
+ export interface BaseJobContextOptions {
3
+ id: string;
4
+ logger: Logger;
5
+ signal: AbortSignal;
6
+ environment?: string;
7
+ project?: string;
8
+ onProgress?: (percent: number, label?: string) => void;
9
+ }
10
+ export declare class JobContext {
11
+ readonly id: string;
12
+ readonly log: Logger;
13
+ readonly signal: AbortSignal;
14
+ readonly environment?: string;
15
+ readonly project?: string;
16
+ private _progress;
17
+ private _onProgress?;
18
+ constructor(opts: BaseJobContextOptions);
19
+ progress(value: number, label?: string): void;
20
+ getProgress(): number;
21
+ }
22
+ //# sourceMappingURL=job-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-context.d.ts","sourceRoot":"","sources":["../../../src/core/context/job-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD;AAED,qBAAa,UAAU;IACrB,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,SAAgB,MAAM,EAAE,WAAW,CAAC;IACpC,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrC,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjC,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAAC,CAA4C;gBAEpD,IAAI,EAAE,qBAAqB;IAYvC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAO7C,WAAW,IAAI,MAAM;CAGtB"}
@@ -0,0 +1,31 @@
1
+ import type { Logger } from "../logger/index.js";
2
+ import type { IScheduleContext } from "../types/index.js";
3
+ export interface ScheduleContextOptions<TPayload> {
4
+ id: string;
5
+ scheduleName: string;
6
+ firedAt: Date;
7
+ payload: TPayload;
8
+ logger: Logger;
9
+ signal: AbortSignal;
10
+ environment?: string;
11
+ project?: string;
12
+ onProgress?: (percent: number, label?: string) => void;
13
+ }
14
+ export declare class ScheduleContext<TPayload = unknown> implements IScheduleContext<TPayload> {
15
+ readonly id: string;
16
+ readonly name: string;
17
+ readonly firedAt: Date;
18
+ readonly payload: TPayload;
19
+ readonly environment?: string;
20
+ readonly project?: string;
21
+ private readonly logger;
22
+ private readonly signal;
23
+ private readonly startedLocalAt;
24
+ private readonly _onProgress?;
25
+ constructor(opts: ScheduleContextOptions<TPayload>);
26
+ get aborted(): boolean;
27
+ get duration(): number;
28
+ log(level: string, message: string, meta?: Record<string, unknown>): void;
29
+ progress(percent: number, label?: string): void;
30
+ }
31
+ //# sourceMappingURL=schedule-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-context.d.ts","sourceRoot":"","sources":["../../../src/core/context/schedule-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,WAAW,sBAAsB,CAAC,QAAQ;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD;AAED,qBAAa,eAAe,CAAC,QAAQ,GAAG,OAAO,CAC7C,YAAW,gBAAgB,CAAC,QAAQ,CAAC;IAErC,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,IAAI,CAAC;IAC9B,SAAgB,OAAO,EAAE,QAAQ,CAAC;IAClC,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrC,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAA4C;gBAE7D,IAAI,EAAE,sBAAsB,CAAC,QAAQ,CAAC;IAiBlD,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAMzE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;CAOhD"}
@@ -0,0 +1,13 @@
1
+ export declare class ChronoError extends Error {
2
+ readonly code: string;
3
+ readonly context?: Record<string, unknown> | undefined;
4
+ readonly cause?: Error | undefined;
5
+ constructor(code: string, message: string, context?: Record<string, unknown> | undefined, cause?: Error | undefined);
6
+ toJSON(): {
7
+ name: string;
8
+ code: string;
9
+ message: string;
10
+ context: Record<string, unknown> | undefined;
11
+ };
12
+ }
13
+ //# sourceMappingURL=base.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.error.d.ts","sourceRoot":"","sources":["../../../src/core/errors/base.error.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAY,SAAQ,KAAK;aAElB,IAAI,EAAE,MAAM;aAEZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;aACjC,KAAK,CAAC,EAAE,KAAK;gBAHb,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA,EACjC,KAAK,CAAC,EAAE,KAAK,YAAA;IAS/B,MAAM;;;;;;CAQP"}
@@ -0,0 +1,16 @@
1
+ import { EventEmitter } from "eventemitter3";
2
+ export type ChronoEventMap = {
3
+ "job:start": [jobId: string, module: string];
4
+ "job:progress": [jobId: string, value: number];
5
+ "job:success": [jobId: string];
6
+ "job:fail": [jobId: string, error: Error];
7
+ "system:ready": [];
8
+ "system:stop": [];
9
+ };
10
+ declare class OqronEventBusClass extends EventEmitter<ChronoEventMap> {
11
+ private static _instance;
12
+ static getInstance(): OqronEventBusClass;
13
+ }
14
+ export declare const OqronEventBus: OqronEventBusClass;
15
+ export {};
16
+ //# sourceMappingURL=event-bus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../../src/core/events/event-bus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/C,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/B,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1C,cAAc,EAAE,EAAE,CAAC;IACnB,aAAa,EAAE,EAAE,CAAC;CACnB,CAAC;AAEF,cAAM,kBAAmB,SAAQ,YAAY,CAAC,cAAc,CAAC;IAC3D,OAAO,CAAC,MAAM,CAAC,SAAS,CAAqB;IAC7C,MAAM,CAAC,WAAW,IAAI,kBAAkB;CAMzC;AAED,eAAO,MAAM,aAAa,oBAAmC,CAAC"}
@@ -0,0 +1,24 @@
1
+ export { loadConfig } from "./config/config-loader.js";
2
+ export { reconfigureConfig } from "./config/default-config.js";
3
+ export { defineConfig } from "./config/define-config.js";
4
+ export type { ValidatedConfig } from "./config/schema.js";
5
+ export { OqronConfigSchema } from "./config/schema.js";
6
+ export type { ICronContext } from "./context/cron-context.interface.js";
7
+ export type { CronContextOptions } from "./context/cron-context.js";
8
+ export { CronContext } from "./context/cron-context.js";
9
+ export type { BaseJobContextOptions } from "./context/job-context.js";
10
+ export { JobContext } from "./context/job-context.js";
11
+ export type { ScheduleContextOptions } from "./context/schedule-context.js";
12
+ export { ScheduleContext } from "./context/schedule-context.js";
13
+ export { ChronoError } from "./errors/base.error.js";
14
+ export { OqronEventBus } from "./events/event-bus.js";
15
+ export type { ChronoLoggerConfig, Logger, LogLevelName, } from "./logger/index.js";
16
+ export { createLogger } from "./logger/index.js";
17
+ export { OqronRegistry } from "./registry.js";
18
+ export type { OqronConfig } from "./types/config.types.js";
19
+ export type { CronDefinition, CronHooks, EveryConfig, JobRecord, MissedFirePolicy, OverlapPolicy, RetryConfig, } from "./types/cron.types.js";
20
+ export type { IOqronAdapter } from "./types/db.types.js";
21
+ export type { ILockAdapter } from "./types/lock.types.js";
22
+ export type { IChronoModule } from "./types/module.types.js";
23
+ export type { IScheduleContext, ScheduleDefinition, ScheduleHooks, ScheduleRecurring, ScheduleRunAfter, } from "./types/scheduler.types.js";
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGvD,YAAY,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,YAAY,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,YAAY,EACV,kBAAkB,EAClB,MAAM,EACN,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EACV,cAAc,EACd,SAAS,EACT,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * OqronKit Logger — powered by voltlog-io.
3
+ *
4
+ * Re-exports a configured voltlog-io logger instance.
5
+ * Users can customize via oqron.config.ts `logger` section.
6
+ */
7
+ import { type Logger, type LogLevelName } from "voltlog-io";
8
+ export type { Logger, LogLevelName };
9
+ export interface ChronoLoggerConfig {
10
+ /** Enable/disable logging entirely. Default: true */
11
+ enabled?: boolean;
12
+ /** Minimum log level. Default: 'INFO' */
13
+ level?: string;
14
+ /** Pretty-print with colors/icons for dev. Default: false */
15
+ prettify?: boolean;
16
+ /** Show metadata object in logs. Default: true */
17
+ showMetadata?: boolean;
18
+ /** Custom voltlog-io transport handler */
19
+ handler?: (entry: any) => void | Promise<void>;
20
+ /** Keys to redact from metadata/payload. */
21
+ redact?: string[];
22
+ /** Bring-your-own logger instance (Pino, winston, etc) */
23
+ logger?: any;
24
+ }
25
+ /**
26
+ * Create a OqronKit logger from config.
27
+ * This is the single factory used internally.
28
+ */
29
+ export declare function createLogger(config?: ChronoLoggerConfig, context?: Record<string, unknown>): Logger;
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/logger/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,YAAY,EAIlB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAErC,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AA+BD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,CAAC,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,MAAM,CAgCR"}
@@ -0,0 +1,13 @@
1
+ import type { IChronoModule } from "./types/module.types.js";
2
+ export declare class OqronRegistry {
3
+ private static _instance;
4
+ private readonly _modules;
5
+ private constructor();
6
+ static getInstance(): OqronRegistry;
7
+ register(mod: IChronoModule): void;
8
+ get(name: string): IChronoModule | undefined;
9
+ getAll(): IChronoModule[];
10
+ /** Reset registry — useful for testing */
11
+ _reset(): void;
12
+ }
13
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAE7D,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,aAAa;IAOnC,QAAQ,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAOlC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI5C,MAAM,IAAI,aAAa,EAAE;IAIzB,0CAA0C;IAC1C,MAAM,IAAI,IAAI;CAGf"}