@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.
- package/LICENSE +21 -0
- package/README.md +97 -0
- package/dist/builder.d.ts +39 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +224 -0
- package/dist/builder.js.map +1 -0
- package/dist/checkpoint.d.ts +33 -0
- package/dist/checkpoint.d.ts.map +1 -0
- package/dist/checkpoint.js +108 -0
- package/dist/checkpoint.js.map +1 -0
- package/dist/executor.d.ts +24 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +207 -0
- package/dist/executor.js.map +1 -0
- package/dist/human/approval-store.d.ts +95 -0
- package/dist/human/approval-store.d.ts.map +1 -0
- package/dist/human/approval-store.js +377 -0
- package/dist/human/approval-store.js.map +1 -0
- package/dist/human/human-node.d.ts +104 -0
- package/dist/human/human-node.d.ts.map +1 -0
- package/dist/human/human-node.js +342 -0
- package/dist/human/human-node.js.map +1 -0
- package/dist/human/index.d.ts +17 -0
- package/dist/human/index.d.ts.map +1 -0
- package/dist/human/index.js +17 -0
- package/dist/human/index.js.map +1 -0
- package/dist/human/notifiers.d.ts +85 -0
- package/dist/human/notifiers.d.ts.map +1 -0
- package/dist/human/notifiers.js +289 -0
- package/dist/human/notifiers.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/manager/index.d.ts +19 -0
- package/dist/manager/index.d.ts.map +1 -0
- package/dist/manager/index.js +17 -0
- package/dist/manager/index.js.map +1 -0
- package/dist/manager/run-store.d.ts +78 -0
- package/dist/manager/run-store.d.ts.map +1 -0
- package/dist/manager/run-store.js +390 -0
- package/dist/manager/run-store.js.map +1 -0
- package/dist/manager/scheduler.d.ts +159 -0
- package/dist/manager/scheduler.d.ts.map +1 -0
- package/dist/manager/scheduler.js +355 -0
- package/dist/manager/scheduler.js.map +1 -0
- package/dist/manager/workflow-manager.d.ts +114 -0
- package/dist/manager/workflow-manager.d.ts.map +1 -0
- package/dist/manager/workflow-manager.js +460 -0
- package/dist/manager/workflow-manager.js.map +1 -0
- package/dist/nodes/agent.d.ts +24 -0
- package/dist/nodes/agent.d.ts.map +1 -0
- package/dist/nodes/agent.js +37 -0
- package/dist/nodes/agent.js.map +1 -0
- package/dist/nodes/base.d.ts +12 -0
- package/dist/nodes/base.d.ts.map +1 -0
- package/dist/nodes/base.js +5 -0
- package/dist/nodes/base.js.map +1 -0
- package/dist/nodes/function.d.ts +27 -0
- package/dist/nodes/function.d.ts.map +1 -0
- package/dist/nodes/function.js +29 -0
- package/dist/nodes/function.js.map +1 -0
- package/dist/nodes/index.d.ts +8 -0
- package/dist/nodes/index.d.ts.map +1 -0
- package/dist/nodes/index.js +8 -0
- package/dist/nodes/index.js.map +1 -0
- package/dist/nodes/tool.d.ts +19 -0
- package/dist/nodes/tool.d.ts.map +1 -0
- package/dist/nodes/tool.js +26 -0
- package/dist/nodes/tool.js.map +1 -0
- package/dist/observability/exporters.d.ts +93 -0
- package/dist/observability/exporters.d.ts.map +1 -0
- package/dist/observability/exporters.js +330 -0
- package/dist/observability/exporters.js.map +1 -0
- package/dist/observability/index.d.ts +17 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +17 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/metrics.d.ts +114 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +435 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/span-attributes.d.ts +95 -0
- package/dist/observability/span-attributes.d.ts.map +1 -0
- package/dist/observability/span-attributes.js +142 -0
- package/dist/observability/span-attributes.js.map +1 -0
- package/dist/observability/tracer.d.ts +110 -0
- package/dist/observability/tracer.d.ts.map +1 -0
- package/dist/observability/tracer.js +409 -0
- package/dist/observability/tracer.js.map +1 -0
- package/dist/patterns/index.d.ts +15 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +15 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/patterns/map-reduce.d.ts +223 -0
- package/dist/patterns/map-reduce.d.ts.map +1 -0
- package/dist/patterns/map-reduce.js +378 -0
- package/dist/patterns/map-reduce.js.map +1 -0
- package/dist/saga/circuit-breaker.d.ts +153 -0
- package/dist/saga/circuit-breaker.d.ts.map +1 -0
- package/dist/saga/circuit-breaker.js +306 -0
- package/dist/saga/circuit-breaker.js.map +1 -0
- package/dist/saga/compensation.d.ts +134 -0
- package/dist/saga/compensation.d.ts.map +1 -0
- package/dist/saga/compensation.js +240 -0
- package/dist/saga/compensation.js.map +1 -0
- package/dist/saga/dead-letter.d.ts +113 -0
- package/dist/saga/dead-letter.d.ts.map +1 -0
- package/dist/saga/dead-letter.js +307 -0
- package/dist/saga/dead-letter.js.map +1 -0
- package/dist/saga/idempotency.d.ts +95 -0
- package/dist/saga/idempotency.d.ts.map +1 -0
- package/dist/saga/idempotency.js +266 -0
- package/dist/saga/idempotency.js.map +1 -0
- package/dist/saga/index.d.ts +16 -0
- package/dist/saga/index.d.ts.map +1 -0
- package/dist/saga/index.js +16 -0
- package/dist/saga/index.js.map +1 -0
- package/dist/saga/retry.d.ts +59 -0
- package/dist/saga/retry.d.ts.map +1 -0
- package/dist/saga/retry.js +222 -0
- package/dist/saga/retry.js.map +1 -0
- package/dist/scheduler.d.ts +37 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +151 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/subworkflows/index.d.ts +16 -0
- package/dist/subworkflows/index.d.ts.map +1 -0
- package/dist/subworkflows/index.js +16 -0
- package/dist/subworkflows/index.js.map +1 -0
- package/dist/subworkflows/parallel-subworkflows.d.ts +139 -0
- package/dist/subworkflows/parallel-subworkflows.d.ts.map +1 -0
- package/dist/subworkflows/parallel-subworkflows.js +270 -0
- package/dist/subworkflows/parallel-subworkflows.js.map +1 -0
- package/dist/subworkflows/subworkflow-node.d.ts +136 -0
- package/dist/subworkflows/subworkflow-node.d.ts.map +1 -0
- package/dist/subworkflows/subworkflow-node.js +164 -0
- package/dist/subworkflows/subworkflow-node.js.map +1 -0
- package/dist/timers/cron-parser.d.ts +110 -0
- package/dist/timers/cron-parser.d.ts.map +1 -0
- package/dist/timers/cron-parser.js +412 -0
- package/dist/timers/cron-parser.js.map +1 -0
- package/dist/timers/index.d.ts +18 -0
- package/dist/timers/index.d.ts.map +1 -0
- package/dist/timers/index.js +18 -0
- package/dist/timers/index.js.map +1 -0
- package/dist/timers/timer-manager.d.ts +219 -0
- package/dist/timers/timer-manager.d.ts.map +1 -0
- package/dist/timers/timer-manager.js +351 -0
- package/dist/timers/timer-manager.js.map +1 -0
- package/dist/timers/timer-node.d.ts +144 -0
- package/dist/timers/timer-node.d.ts.map +1 -0
- package/dist/timers/timer-node.js +246 -0
- package/dist/timers/timer-node.js.map +1 -0
- package/dist/timers/timer-store.d.ts +90 -0
- package/dist/timers/timer-store.d.ts.map +1 -0
- package/dist/timers/timer-store.js +357 -0
- package/dist/timers/timer-store.js.map +1 -0
- package/dist/triggers/cron-trigger.d.ts +102 -0
- package/dist/triggers/cron-trigger.d.ts.map +1 -0
- package/dist/triggers/cron-trigger.js +309 -0
- package/dist/triggers/cron-trigger.js.map +1 -0
- package/dist/triggers/index.d.ts +14 -0
- package/dist/triggers/index.d.ts.map +1 -0
- package/dist/triggers/index.js +10 -0
- package/dist/triggers/index.js.map +1 -0
- package/dist/triggers/rate-limiter.d.ts +130 -0
- package/dist/triggers/rate-limiter.d.ts.map +1 -0
- package/dist/triggers/rate-limiter.js +294 -0
- package/dist/triggers/rate-limiter.js.map +1 -0
- package/dist/triggers/trigger-manager.d.ts +166 -0
- package/dist/triggers/trigger-manager.d.ts.map +1 -0
- package/dist/triggers/trigger-manager.js +436 -0
- package/dist/triggers/trigger-manager.js.map +1 -0
- package/dist/triggers/webhook-trigger.d.ts +150 -0
- package/dist/triggers/webhook-trigger.d.ts.map +1 -0
- package/dist/triggers/webhook-trigger.js +452 -0
- package/dist/triggers/webhook-trigger.js.map +1 -0
- 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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"}
|