@cogitator-ai/workflows 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -0
  3. package/dist/builder.d.ts +39 -0
  4. package/dist/builder.d.ts.map +1 -0
  5. package/dist/builder.js +224 -0
  6. package/dist/builder.js.map +1 -0
  7. package/dist/checkpoint.d.ts +33 -0
  8. package/dist/checkpoint.d.ts.map +1 -0
  9. package/dist/checkpoint.js +108 -0
  10. package/dist/checkpoint.js.map +1 -0
  11. package/dist/executor.d.ts +24 -0
  12. package/dist/executor.d.ts.map +1 -0
  13. package/dist/executor.js +207 -0
  14. package/dist/executor.js.map +1 -0
  15. package/dist/human/approval-store.d.ts +95 -0
  16. package/dist/human/approval-store.d.ts.map +1 -0
  17. package/dist/human/approval-store.js +377 -0
  18. package/dist/human/approval-store.js.map +1 -0
  19. package/dist/human/human-node.d.ts +104 -0
  20. package/dist/human/human-node.d.ts.map +1 -0
  21. package/dist/human/human-node.js +342 -0
  22. package/dist/human/human-node.js.map +1 -0
  23. package/dist/human/index.d.ts +17 -0
  24. package/dist/human/index.d.ts.map +1 -0
  25. package/dist/human/index.js +17 -0
  26. package/dist/human/index.js.map +1 -0
  27. package/dist/human/notifiers.d.ts +85 -0
  28. package/dist/human/notifiers.d.ts.map +1 -0
  29. package/dist/human/notifiers.js +289 -0
  30. package/dist/human/notifiers.js.map +1 -0
  31. package/dist/index.d.ts +32 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +19 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/manager/index.d.ts +19 -0
  36. package/dist/manager/index.d.ts.map +1 -0
  37. package/dist/manager/index.js +17 -0
  38. package/dist/manager/index.js.map +1 -0
  39. package/dist/manager/run-store.d.ts +78 -0
  40. package/dist/manager/run-store.d.ts.map +1 -0
  41. package/dist/manager/run-store.js +390 -0
  42. package/dist/manager/run-store.js.map +1 -0
  43. package/dist/manager/scheduler.d.ts +159 -0
  44. package/dist/manager/scheduler.d.ts.map +1 -0
  45. package/dist/manager/scheduler.js +355 -0
  46. package/dist/manager/scheduler.js.map +1 -0
  47. package/dist/manager/workflow-manager.d.ts +114 -0
  48. package/dist/manager/workflow-manager.d.ts.map +1 -0
  49. package/dist/manager/workflow-manager.js +460 -0
  50. package/dist/manager/workflow-manager.js.map +1 -0
  51. package/dist/nodes/agent.d.ts +24 -0
  52. package/dist/nodes/agent.d.ts.map +1 -0
  53. package/dist/nodes/agent.js +37 -0
  54. package/dist/nodes/agent.js.map +1 -0
  55. package/dist/nodes/base.d.ts +12 -0
  56. package/dist/nodes/base.d.ts.map +1 -0
  57. package/dist/nodes/base.js +5 -0
  58. package/dist/nodes/base.js.map +1 -0
  59. package/dist/nodes/function.d.ts +27 -0
  60. package/dist/nodes/function.d.ts.map +1 -0
  61. package/dist/nodes/function.js +29 -0
  62. package/dist/nodes/function.js.map +1 -0
  63. package/dist/nodes/index.d.ts +8 -0
  64. package/dist/nodes/index.d.ts.map +1 -0
  65. package/dist/nodes/index.js +8 -0
  66. package/dist/nodes/index.js.map +1 -0
  67. package/dist/nodes/tool.d.ts +19 -0
  68. package/dist/nodes/tool.d.ts.map +1 -0
  69. package/dist/nodes/tool.js +26 -0
  70. package/dist/nodes/tool.js.map +1 -0
  71. package/dist/observability/exporters.d.ts +93 -0
  72. package/dist/observability/exporters.d.ts.map +1 -0
  73. package/dist/observability/exporters.js +330 -0
  74. package/dist/observability/exporters.js.map +1 -0
  75. package/dist/observability/index.d.ts +17 -0
  76. package/dist/observability/index.d.ts.map +1 -0
  77. package/dist/observability/index.js +17 -0
  78. package/dist/observability/index.js.map +1 -0
  79. package/dist/observability/metrics.d.ts +114 -0
  80. package/dist/observability/metrics.d.ts.map +1 -0
  81. package/dist/observability/metrics.js +435 -0
  82. package/dist/observability/metrics.js.map +1 -0
  83. package/dist/observability/span-attributes.d.ts +95 -0
  84. package/dist/observability/span-attributes.d.ts.map +1 -0
  85. package/dist/observability/span-attributes.js +142 -0
  86. package/dist/observability/span-attributes.js.map +1 -0
  87. package/dist/observability/tracer.d.ts +110 -0
  88. package/dist/observability/tracer.d.ts.map +1 -0
  89. package/dist/observability/tracer.js +409 -0
  90. package/dist/observability/tracer.js.map +1 -0
  91. package/dist/patterns/index.d.ts +15 -0
  92. package/dist/patterns/index.d.ts.map +1 -0
  93. package/dist/patterns/index.js +15 -0
  94. package/dist/patterns/index.js.map +1 -0
  95. package/dist/patterns/map-reduce.d.ts +223 -0
  96. package/dist/patterns/map-reduce.d.ts.map +1 -0
  97. package/dist/patterns/map-reduce.js +378 -0
  98. package/dist/patterns/map-reduce.js.map +1 -0
  99. package/dist/saga/circuit-breaker.d.ts +153 -0
  100. package/dist/saga/circuit-breaker.d.ts.map +1 -0
  101. package/dist/saga/circuit-breaker.js +306 -0
  102. package/dist/saga/circuit-breaker.js.map +1 -0
  103. package/dist/saga/compensation.d.ts +134 -0
  104. package/dist/saga/compensation.d.ts.map +1 -0
  105. package/dist/saga/compensation.js +240 -0
  106. package/dist/saga/compensation.js.map +1 -0
  107. package/dist/saga/dead-letter.d.ts +113 -0
  108. package/dist/saga/dead-letter.d.ts.map +1 -0
  109. package/dist/saga/dead-letter.js +307 -0
  110. package/dist/saga/dead-letter.js.map +1 -0
  111. package/dist/saga/idempotency.d.ts +95 -0
  112. package/dist/saga/idempotency.d.ts.map +1 -0
  113. package/dist/saga/idempotency.js +266 -0
  114. package/dist/saga/idempotency.js.map +1 -0
  115. package/dist/saga/index.d.ts +16 -0
  116. package/dist/saga/index.d.ts.map +1 -0
  117. package/dist/saga/index.js +16 -0
  118. package/dist/saga/index.js.map +1 -0
  119. package/dist/saga/retry.d.ts +59 -0
  120. package/dist/saga/retry.d.ts.map +1 -0
  121. package/dist/saga/retry.js +222 -0
  122. package/dist/saga/retry.js.map +1 -0
  123. package/dist/scheduler.d.ts +37 -0
  124. package/dist/scheduler.d.ts.map +1 -0
  125. package/dist/scheduler.js +151 -0
  126. package/dist/scheduler.js.map +1 -0
  127. package/dist/subworkflows/index.d.ts +16 -0
  128. package/dist/subworkflows/index.d.ts.map +1 -0
  129. package/dist/subworkflows/index.js +16 -0
  130. package/dist/subworkflows/index.js.map +1 -0
  131. package/dist/subworkflows/parallel-subworkflows.d.ts +139 -0
  132. package/dist/subworkflows/parallel-subworkflows.d.ts.map +1 -0
  133. package/dist/subworkflows/parallel-subworkflows.js +270 -0
  134. package/dist/subworkflows/parallel-subworkflows.js.map +1 -0
  135. package/dist/subworkflows/subworkflow-node.d.ts +136 -0
  136. package/dist/subworkflows/subworkflow-node.d.ts.map +1 -0
  137. package/dist/subworkflows/subworkflow-node.js +164 -0
  138. package/dist/subworkflows/subworkflow-node.js.map +1 -0
  139. package/dist/timers/cron-parser.d.ts +110 -0
  140. package/dist/timers/cron-parser.d.ts.map +1 -0
  141. package/dist/timers/cron-parser.js +412 -0
  142. package/dist/timers/cron-parser.js.map +1 -0
  143. package/dist/timers/index.d.ts +18 -0
  144. package/dist/timers/index.d.ts.map +1 -0
  145. package/dist/timers/index.js +18 -0
  146. package/dist/timers/index.js.map +1 -0
  147. package/dist/timers/timer-manager.d.ts +219 -0
  148. package/dist/timers/timer-manager.d.ts.map +1 -0
  149. package/dist/timers/timer-manager.js +351 -0
  150. package/dist/timers/timer-manager.js.map +1 -0
  151. package/dist/timers/timer-node.d.ts +144 -0
  152. package/dist/timers/timer-node.d.ts.map +1 -0
  153. package/dist/timers/timer-node.js +246 -0
  154. package/dist/timers/timer-node.js.map +1 -0
  155. package/dist/timers/timer-store.d.ts +90 -0
  156. package/dist/timers/timer-store.d.ts.map +1 -0
  157. package/dist/timers/timer-store.js +357 -0
  158. package/dist/timers/timer-store.js.map +1 -0
  159. package/dist/triggers/cron-trigger.d.ts +102 -0
  160. package/dist/triggers/cron-trigger.d.ts.map +1 -0
  161. package/dist/triggers/cron-trigger.js +309 -0
  162. package/dist/triggers/cron-trigger.js.map +1 -0
  163. package/dist/triggers/index.d.ts +14 -0
  164. package/dist/triggers/index.d.ts.map +1 -0
  165. package/dist/triggers/index.js +10 -0
  166. package/dist/triggers/index.js.map +1 -0
  167. package/dist/triggers/rate-limiter.d.ts +130 -0
  168. package/dist/triggers/rate-limiter.d.ts.map +1 -0
  169. package/dist/triggers/rate-limiter.js +294 -0
  170. package/dist/triggers/rate-limiter.js.map +1 -0
  171. package/dist/triggers/trigger-manager.d.ts +166 -0
  172. package/dist/triggers/trigger-manager.d.ts.map +1 -0
  173. package/dist/triggers/trigger-manager.js +436 -0
  174. package/dist/triggers/trigger-manager.js.map +1 -0
  175. package/dist/triggers/webhook-trigger.d.ts +150 -0
  176. package/dist/triggers/webhook-trigger.d.ts.map +1 -0
  177. package/dist/triggers/webhook-trigger.js +452 -0
  178. package/dist/triggers/webhook-trigger.js.map +1 -0
  179. package/package.json +44 -0
@@ -0,0 +1,219 @@
1
+ /**
2
+ * Timer Manager for background processing
3
+ *
4
+ * Features:
5
+ * - Background timer processing
6
+ * - Timer recovery on restart
7
+ * - Automatic retry for missed timers
8
+ * - Cancellation support
9
+ * - Cleanup of old timers
10
+ */
11
+ import type { TimerEntry, TimerStore } from '@cogitator-ai/types';
12
+ /**
13
+ * Timer handler function
14
+ */
15
+ export type TimerHandler = (entry: TimerEntry) => Promise<void> | void;
16
+ /**
17
+ * Timer manager configuration
18
+ */
19
+ export interface TimerManagerConfig {
20
+ /**
21
+ * Interval for checking overdue timers (ms)
22
+ * @default 1000
23
+ */
24
+ pollInterval?: number;
25
+ /**
26
+ * Maximum number of timers to process per poll
27
+ * @default 100
28
+ */
29
+ batchSize?: number;
30
+ /**
31
+ * Whether to process overdue timers on startup
32
+ * @default true
33
+ */
34
+ processOverdueOnStart?: boolean;
35
+ /**
36
+ * Maximum age for cleanup (ms)
37
+ * @default 7 days
38
+ */
39
+ cleanupMaxAge?: number;
40
+ /**
41
+ * Interval for cleanup (ms)
42
+ * @default 1 hour
43
+ */
44
+ cleanupInterval?: number;
45
+ /**
46
+ * Whether to enable cleanup
47
+ * @default true
48
+ */
49
+ enableCleanup?: boolean;
50
+ /**
51
+ * Handler for timer errors
52
+ */
53
+ onError?: (error: Error, entry: TimerEntry) => void;
54
+ /**
55
+ * Handler for timer fired events
56
+ */
57
+ onTimerFired?: (entry: TimerEntry) => void;
58
+ /**
59
+ * Handler for timer missed events (overdue timers)
60
+ */
61
+ onTimerMissed?: (entry: TimerEntry, delayMs: number) => void;
62
+ }
63
+ /**
64
+ * Timer manager stats
65
+ */
66
+ export interface TimerManagerStats {
67
+ running: boolean;
68
+ processedTotal: number;
69
+ errorTotal: number;
70
+ overdueProcessed: number;
71
+ cleanedUpTotal: number;
72
+ lastPollAt?: number;
73
+ lastCleanupAt?: number;
74
+ activeTimers: number;
75
+ }
76
+ /**
77
+ * Timer Manager class
78
+ */
79
+ export declare class TimerManager {
80
+ private store;
81
+ private config;
82
+ private handlers;
83
+ private defaultHandler?;
84
+ private pollTimer?;
85
+ private cleanupTimer?;
86
+ private running;
87
+ private processing;
88
+ private processedTotal;
89
+ private errorTotal;
90
+ private overdueProcessed;
91
+ private cleanedUpTotal;
92
+ private lastPollAt?;
93
+ private lastCleanupAt?;
94
+ constructor(store: TimerStore, config?: TimerManagerConfig);
95
+ /**
96
+ * Register a handler for a specific workflow
97
+ */
98
+ registerHandler(workflowId: string, handler: TimerHandler): () => void;
99
+ /**
100
+ * Set default handler for all timers without specific handler
101
+ */
102
+ setDefaultHandler(handler: TimerHandler): void;
103
+ /**
104
+ * Start the timer manager
105
+ */
106
+ start(): Promise<void>;
107
+ /**
108
+ * Stop the timer manager
109
+ */
110
+ stop(): Promise<void>;
111
+ /**
112
+ * Poll for overdue timers and process them
113
+ */
114
+ private poll;
115
+ /**
116
+ * Process overdue timers (for recovery)
117
+ */
118
+ private processOverdueTimers;
119
+ /**
120
+ * Process a single timer
121
+ */
122
+ private processTimer;
123
+ /**
124
+ * Run cleanup
125
+ */
126
+ private cleanup;
127
+ /**
128
+ * Schedule a timer
129
+ */
130
+ schedule(entry: Omit<TimerEntry, 'id' | 'cancelled' | 'fired' | 'createdAt'>): Promise<string>;
131
+ /**
132
+ * Cancel a timer
133
+ */
134
+ cancel(timerId: string): Promise<void>;
135
+ /**
136
+ * Cancel all timers for a workflow run
137
+ */
138
+ cancelRun(runId: string): Promise<number>;
139
+ /**
140
+ * Cancel all timers for a workflow
141
+ */
142
+ cancelWorkflow(workflowId: string): Promise<number>;
143
+ /**
144
+ * Get timer by ID
145
+ */
146
+ getTimer(timerId: string): Promise<TimerEntry | null>;
147
+ /**
148
+ * Get all pending timers
149
+ */
150
+ getPendingTimers(): Promise<TimerEntry[]>;
151
+ /**
152
+ * Get timers for a workflow
153
+ */
154
+ getWorkflowTimers(workflowId: string): Promise<TimerEntry[]>;
155
+ /**
156
+ * Get timers for a run
157
+ */
158
+ getRunTimers(runId: string): Promise<TimerEntry[]>;
159
+ /**
160
+ * Get manager stats
161
+ */
162
+ getStats(): Promise<TimerManagerStats>;
163
+ /**
164
+ * Force process overdue timers now
165
+ */
166
+ processNow(): Promise<number>;
167
+ /**
168
+ * Force cleanup now
169
+ */
170
+ cleanupNow(): Promise<number>;
171
+ /**
172
+ * Check if manager is running
173
+ */
174
+ isRunning(): boolean;
175
+ }
176
+ /**
177
+ * Create a timer manager
178
+ */
179
+ export declare function createTimerManager(store: TimerStore, config?: TimerManagerConfig): TimerManager;
180
+ /**
181
+ * Timer scheduler for recurring timers
182
+ */
183
+ export declare class RecurringTimerScheduler {
184
+ private manager;
185
+ private recurring;
186
+ constructor(manager: TimerManager);
187
+ /**
188
+ * Schedule a recurring timer
189
+ */
190
+ scheduleRecurring(id: string, config: {
191
+ workflowId: string;
192
+ runId: string;
193
+ nodeId: string;
194
+ interval: number;
195
+ metadata?: Record<string, unknown>;
196
+ startImmediately?: boolean;
197
+ }): Promise<void>;
198
+ /**
199
+ * Cancel a recurring timer
200
+ */
201
+ cancelRecurring(id: string): Promise<void>;
202
+ /**
203
+ * Schedule next occurrence (called after timer fires)
204
+ */
205
+ scheduleNext(id: string, runId: string): Promise<string | null>;
206
+ /**
207
+ * Check if recurring timer exists
208
+ */
209
+ hasRecurring(id: string): boolean;
210
+ /**
211
+ * Get all recurring timer IDs
212
+ */
213
+ getRecurringIds(): string[];
214
+ }
215
+ /**
216
+ * Create a recurring timer scheduler
217
+ */
218
+ export declare function createRecurringScheduler(manager: TimerManager): RecurringTimerScheduler;
219
+ //# sourceMappingURL=timer-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timer-manager.d.ts","sourceRoot":"","sources":["../../src/timers/timer-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,351 @@
1
+ /**
2
+ * Timer Manager for background processing
3
+ *
4
+ * Features:
5
+ * - Background timer processing
6
+ * - Timer recovery on restart
7
+ * - Automatic retry for missed timers
8
+ * - Cancellation support
9
+ * - Cleanup of old timers
10
+ */
11
+ const DEFAULT_POLL_INTERVAL = 1000;
12
+ const DEFAULT_BATCH_SIZE = 100;
13
+ const DEFAULT_CLEANUP_MAX_AGE = 7 * 24 * 60 * 60 * 1000;
14
+ const DEFAULT_CLEANUP_INTERVAL = 60 * 60 * 1000;
15
+ /**
16
+ * Timer Manager class
17
+ */
18
+ export class TimerManager {
19
+ store;
20
+ config;
21
+ handlers = new Map();
22
+ defaultHandler;
23
+ pollTimer;
24
+ cleanupTimer;
25
+ running = false;
26
+ processing = false;
27
+ processedTotal = 0;
28
+ errorTotal = 0;
29
+ overdueProcessed = 0;
30
+ cleanedUpTotal = 0;
31
+ lastPollAt;
32
+ lastCleanupAt;
33
+ constructor(store, config = {}) {
34
+ this.store = store;
35
+ this.config = {
36
+ pollInterval: config.pollInterval ?? DEFAULT_POLL_INTERVAL,
37
+ batchSize: config.batchSize ?? DEFAULT_BATCH_SIZE,
38
+ processOverdueOnStart: config.processOverdueOnStart ?? true,
39
+ cleanupMaxAge: config.cleanupMaxAge ?? DEFAULT_CLEANUP_MAX_AGE,
40
+ cleanupInterval: config.cleanupInterval ?? DEFAULT_CLEANUP_INTERVAL,
41
+ enableCleanup: config.enableCleanup ?? true,
42
+ onError: config.onError,
43
+ onTimerFired: config.onTimerFired,
44
+ onTimerMissed: config.onTimerMissed,
45
+ };
46
+ }
47
+ /**
48
+ * Register a handler for a specific workflow
49
+ */
50
+ registerHandler(workflowId, handler) {
51
+ this.handlers.set(workflowId, handler);
52
+ return () => this.handlers.delete(workflowId);
53
+ }
54
+ /**
55
+ * Set default handler for all timers without specific handler
56
+ */
57
+ setDefaultHandler(handler) {
58
+ this.defaultHandler = handler;
59
+ }
60
+ /**
61
+ * Start the timer manager
62
+ */
63
+ async start() {
64
+ if (this.running)
65
+ return;
66
+ this.running = true;
67
+ if (this.config.processOverdueOnStart) {
68
+ await this.processOverdueTimers();
69
+ }
70
+ this.pollTimer = setInterval(() => {
71
+ this.poll().catch((error) => {
72
+ this.config.onError?.(error, {});
73
+ });
74
+ }, this.config.pollInterval);
75
+ if (this.config.enableCleanup) {
76
+ this.cleanupTimer = setInterval(() => {
77
+ this.cleanup().catch((error) => {
78
+ this.config.onError?.(error, {});
79
+ });
80
+ }, this.config.cleanupInterval);
81
+ }
82
+ }
83
+ /**
84
+ * Stop the timer manager
85
+ */
86
+ async stop() {
87
+ if (!this.running)
88
+ return;
89
+ this.running = false;
90
+ if (this.pollTimer) {
91
+ clearInterval(this.pollTimer);
92
+ this.pollTimer = undefined;
93
+ }
94
+ if (this.cleanupTimer) {
95
+ clearInterval(this.cleanupTimer);
96
+ this.cleanupTimer = undefined;
97
+ }
98
+ while (this.processing) {
99
+ await new Promise((resolve) => setTimeout(resolve, 100));
100
+ }
101
+ }
102
+ /**
103
+ * Poll for overdue timers and process them
104
+ */
105
+ async poll() {
106
+ if (!this.running || this.processing)
107
+ return;
108
+ this.processing = true;
109
+ this.lastPollAt = Date.now();
110
+ try {
111
+ const overdue = await this.store.getOverdue();
112
+ const batch = overdue.slice(0, this.config.batchSize);
113
+ for (const entry of batch) {
114
+ await this.processTimer(entry);
115
+ }
116
+ }
117
+ finally {
118
+ this.processing = false;
119
+ }
120
+ }
121
+ /**
122
+ * Process overdue timers (for recovery)
123
+ */
124
+ async processOverdueTimers() {
125
+ const overdue = await this.store.getOverdue();
126
+ const now = Date.now();
127
+ for (const entry of overdue) {
128
+ const delayMs = now - entry.firesAt;
129
+ this.config.onTimerMissed?.(entry, delayMs);
130
+ this.overdueProcessed++;
131
+ await this.processTimer(entry);
132
+ }
133
+ }
134
+ /**
135
+ * Process a single timer
136
+ */
137
+ async processTimer(entry) {
138
+ try {
139
+ const handler = this.handlers.get(entry.workflowId) ?? this.defaultHandler;
140
+ if (handler) {
141
+ await handler(entry);
142
+ }
143
+ await this.store.markFired(entry.id);
144
+ this.processedTotal++;
145
+ this.config.onTimerFired?.(entry);
146
+ }
147
+ catch (error) {
148
+ this.errorTotal++;
149
+ this.config.onError?.(error, entry);
150
+ }
151
+ }
152
+ /**
153
+ * Run cleanup
154
+ */
155
+ async cleanup() {
156
+ this.lastCleanupAt = Date.now();
157
+ const count = await this.store.cleanup(this.config.cleanupMaxAge);
158
+ this.cleanedUpTotal += count;
159
+ }
160
+ /**
161
+ * Schedule a timer
162
+ */
163
+ async schedule(entry) {
164
+ return this.store.schedule(entry);
165
+ }
166
+ /**
167
+ * Cancel a timer
168
+ */
169
+ async cancel(timerId) {
170
+ await this.store.cancel(timerId);
171
+ }
172
+ /**
173
+ * Cancel all timers for a workflow run
174
+ */
175
+ async cancelRun(runId) {
176
+ const timers = await this.store.getByRun(runId);
177
+ let cancelled = 0;
178
+ for (const timer of timers) {
179
+ if (!timer.cancelled && !timer.fired) {
180
+ await this.store.cancel(timer.id);
181
+ cancelled++;
182
+ }
183
+ }
184
+ return cancelled;
185
+ }
186
+ /**
187
+ * Cancel all timers for a workflow
188
+ */
189
+ async cancelWorkflow(workflowId) {
190
+ const timers = await this.store.getByWorkflow(workflowId);
191
+ let cancelled = 0;
192
+ for (const timer of timers) {
193
+ if (!timer.cancelled && !timer.fired) {
194
+ await this.store.cancel(timer.id);
195
+ cancelled++;
196
+ }
197
+ }
198
+ return cancelled;
199
+ }
200
+ /**
201
+ * Get timer by ID
202
+ */
203
+ async getTimer(timerId) {
204
+ return this.store.get(timerId);
205
+ }
206
+ /**
207
+ * Get all pending timers
208
+ */
209
+ async getPendingTimers() {
210
+ return this.store.getPending();
211
+ }
212
+ /**
213
+ * Get timers for a workflow
214
+ */
215
+ async getWorkflowTimers(workflowId) {
216
+ return this.store.getByWorkflow(workflowId);
217
+ }
218
+ /**
219
+ * Get timers for a run
220
+ */
221
+ async getRunTimers(runId) {
222
+ return this.store.getByRun(runId);
223
+ }
224
+ /**
225
+ * Get manager stats
226
+ */
227
+ async getStats() {
228
+ const pending = await this.store.getPending();
229
+ return {
230
+ running: this.running,
231
+ processedTotal: this.processedTotal,
232
+ errorTotal: this.errorTotal,
233
+ overdueProcessed: this.overdueProcessed,
234
+ cleanedUpTotal: this.cleanedUpTotal,
235
+ lastPollAt: this.lastPollAt,
236
+ lastCleanupAt: this.lastCleanupAt,
237
+ activeTimers: pending.length,
238
+ };
239
+ }
240
+ /**
241
+ * Force process overdue timers now
242
+ */
243
+ async processNow() {
244
+ const overdue = await this.store.getOverdue();
245
+ let processed = 0;
246
+ for (const entry of overdue) {
247
+ await this.processTimer(entry);
248
+ processed++;
249
+ }
250
+ return processed;
251
+ }
252
+ /**
253
+ * Force cleanup now
254
+ */
255
+ async cleanupNow() {
256
+ return this.cleanup().then(() => this.cleanedUpTotal);
257
+ }
258
+ /**
259
+ * Check if manager is running
260
+ */
261
+ isRunning() {
262
+ return this.running;
263
+ }
264
+ }
265
+ /**
266
+ * Create a timer manager
267
+ */
268
+ export function createTimerManager(store, config) {
269
+ return new TimerManager(store, config);
270
+ }
271
+ /**
272
+ * Timer scheduler for recurring timers
273
+ */
274
+ export class RecurringTimerScheduler {
275
+ manager;
276
+ recurring = new Map();
277
+ constructor(manager) {
278
+ this.manager = manager;
279
+ }
280
+ /**
281
+ * Schedule a recurring timer
282
+ */
283
+ async scheduleRecurring(id, config) {
284
+ const { workflowId, runId, nodeId, interval, metadata, startImmediately } = config;
285
+ this.recurring.set(id, {
286
+ workflowId,
287
+ nodeId,
288
+ interval,
289
+ metadata,
290
+ });
291
+ const firesAt = startImmediately ? Date.now() : Date.now() + interval;
292
+ const timerId = await this.manager.schedule({
293
+ workflowId,
294
+ runId,
295
+ nodeId,
296
+ firesAt,
297
+ type: 'recurring',
298
+ metadata: { recurringId: id, ...metadata },
299
+ });
300
+ this.recurring.get(id).currentTimerId = timerId;
301
+ }
302
+ /**
303
+ * Cancel a recurring timer
304
+ */
305
+ async cancelRecurring(id) {
306
+ const config = this.recurring.get(id);
307
+ if (!config)
308
+ return;
309
+ if (config.currentTimerId) {
310
+ await this.manager.cancel(config.currentTimerId);
311
+ }
312
+ this.recurring.delete(id);
313
+ }
314
+ /**
315
+ * Schedule next occurrence (called after timer fires)
316
+ */
317
+ async scheduleNext(id, runId) {
318
+ const config = this.recurring.get(id);
319
+ if (!config)
320
+ return null;
321
+ const timerId = await this.manager.schedule({
322
+ workflowId: config.workflowId,
323
+ runId,
324
+ nodeId: config.nodeId,
325
+ firesAt: Date.now() + config.interval,
326
+ type: 'recurring',
327
+ metadata: { recurringId: id, ...config.metadata },
328
+ });
329
+ config.currentTimerId = timerId;
330
+ return timerId;
331
+ }
332
+ /**
333
+ * Check if recurring timer exists
334
+ */
335
+ hasRecurring(id) {
336
+ return this.recurring.has(id);
337
+ }
338
+ /**
339
+ * Get all recurring timer IDs
340
+ */
341
+ getRecurringIds() {
342
+ return Array.from(this.recurring.keys());
343
+ }
344
+ }
345
+ /**
346
+ * Create a recurring timer scheduler
347
+ */
348
+ export function createRecurringScheduler(manager) {
349
+ return new RecurringTimerScheduler(manager);
350
+ }
351
+ //# sourceMappingURL=timer-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timer-manager.js","sourceRoot":"","sources":["../../src/timers/timer-manager.ts"],"names":[],"mappings":"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"}