@cascade-flow/backend-postgres 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/README.md +446 -0
- package/dist/db.d.ts +107 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/index.d.ts +265 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6583 -0
- package/dist/index.js.map +53 -0
- package/dist/migrations.d.ts +7 -0
- package/dist/migrations.d.ts.map +1 -0
- package/package.json +54 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { Backend, type StepStartMetadata, type StepCompleteMetadata, type StepError, type StepRecord, type LogEntry, type Event, type StepEvent, type WorkflowEvent, type RunSubmission, type RunState, type WorkflowMetadata, type WorkflowRegistration, type StepDefinition, type AnalyticsOptions, type ErrorAnalysis, type RetryAnalysis, type SchedulingLatency, type StepDuration, type WorkflowDuration, type WorkerStability, type Throughput, type QueueDepth, type QueueDepthByWorkflow, type SuccessRate, type AnalyticsSummary } from "@cascade-flow/backend-interface";
|
|
2
|
+
/**
|
|
3
|
+
* PostgreSQL backend implementation
|
|
4
|
+
* Stores workflow execution state in PostgreSQL using event sourcing
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Event sourcing with immutable append-only events
|
|
8
|
+
* - Automatic schema initialization via idempotent migrations
|
|
9
|
+
* - Race-safe step claiming using SELECT FOR UPDATE SKIP LOCKED
|
|
10
|
+
* - Events-as-queue pattern (no separate queue table)
|
|
11
|
+
* - JSONB storage for flexible schema evolution
|
|
12
|
+
*/
|
|
13
|
+
export declare class PostgresBackend extends Backend {
|
|
14
|
+
private pool;
|
|
15
|
+
private initialized;
|
|
16
|
+
/**
|
|
17
|
+
* Create a new Postgres backend
|
|
18
|
+
*
|
|
19
|
+
* @param connectionString - PostgreSQL connection string (e.g., postgres://user:pass@host/db)
|
|
20
|
+
*/
|
|
21
|
+
constructor(connectionString: string);
|
|
22
|
+
/**
|
|
23
|
+
* Initialize the backend by running database migrations
|
|
24
|
+
* This should be called by the worker on startup to ensure the database schema is ready.
|
|
25
|
+
* Other components (submit CLI, UI) can skip this and assume the schema already exists.
|
|
26
|
+
*/
|
|
27
|
+
initialize(): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Generate a unique run ID
|
|
30
|
+
*/
|
|
31
|
+
private generateRunId;
|
|
32
|
+
/**
|
|
33
|
+
* Hash an idempotency key
|
|
34
|
+
*/
|
|
35
|
+
private hashIdempotencyKey;
|
|
36
|
+
/**
|
|
37
|
+
* Generate a unique event ID using microsecond timestamp
|
|
38
|
+
*/
|
|
39
|
+
private generateEventId;
|
|
40
|
+
initializeRun(workflowSlug: string, runId: string): Promise<void>;
|
|
41
|
+
runExists(workflowSlug: string, runId: string): Promise<boolean>;
|
|
42
|
+
loadRun(workflowSlug: string, runId: string): Promise<StepRecord[]>;
|
|
43
|
+
getStepOutputPath(workflowSlug: string, runId: string, stepId: string, attemptNumber: number): string;
|
|
44
|
+
appendEvent(workflowSlug: string, runId: string, event: Event): Promise<void>;
|
|
45
|
+
loadEvents(workflowSlug: string, runId: string, options: {
|
|
46
|
+
category: "step";
|
|
47
|
+
stepId?: string;
|
|
48
|
+
}): Promise<StepEvent[]>;
|
|
49
|
+
loadEvents(workflowSlug: string, runId: string, options: {
|
|
50
|
+
category: "workflow";
|
|
51
|
+
}): Promise<WorkflowEvent[]>;
|
|
52
|
+
loadEvents(workflowSlug: string, runId: string, options?: {
|
|
53
|
+
category?: "workflow" | "step";
|
|
54
|
+
stepId?: string;
|
|
55
|
+
}): Promise<Event[]>;
|
|
56
|
+
saveStepScheduled(workflowSlug: string, runId: string, stepId: string, metadata: {
|
|
57
|
+
availableAt: number;
|
|
58
|
+
reason: "initial" | "retry" | "dependency-satisfied";
|
|
59
|
+
attemptNumber: number;
|
|
60
|
+
retryDelayMs?: number;
|
|
61
|
+
}): Promise<void>;
|
|
62
|
+
saveStepStart(workflowSlug: string, runId: string, stepId: string, workerId: string, metadata: StepStartMetadata): Promise<void>;
|
|
63
|
+
saveStepComplete(workflowSlug: string, runId: string, stepId: string, output: unknown, metadata: StepCompleteMetadata, exportOutput?: boolean): Promise<void>;
|
|
64
|
+
saveStepFailed(workflowSlug: string, runId: string, stepId: string, error: StepError, metadata: {
|
|
65
|
+
duration: number;
|
|
66
|
+
attemptNumber: number;
|
|
67
|
+
terminal: boolean;
|
|
68
|
+
nextRetryAt?: number;
|
|
69
|
+
failureReason: "exhausted-retries" | "worker-crash" | "timeout" | "cancelled" | "execution-error";
|
|
70
|
+
}): Promise<void>;
|
|
71
|
+
saveStepFailedAndScheduleRetry(workflowSlug: string, runId: string, stepId: string, error: StepError, failureMetadata: {
|
|
72
|
+
duration: number;
|
|
73
|
+
attemptNumber: number;
|
|
74
|
+
nextRetryAt: number;
|
|
75
|
+
failureReason: "execution-error" | "timeout";
|
|
76
|
+
}, scheduleMetadata: {
|
|
77
|
+
availableAt: number;
|
|
78
|
+
nextAttemptNumber: number;
|
|
79
|
+
retryDelayMs: number;
|
|
80
|
+
maxRetries: number;
|
|
81
|
+
}): Promise<void>;
|
|
82
|
+
saveStepSkipped(workflowSlug: string, runId: string, stepId: string, metadata: {
|
|
83
|
+
skipType: "primary" | "cascade";
|
|
84
|
+
reason: string;
|
|
85
|
+
metadata?: Record<string, any>;
|
|
86
|
+
duration: number;
|
|
87
|
+
attemptNumber: number;
|
|
88
|
+
cascadedFrom?: string;
|
|
89
|
+
}): Promise<void>;
|
|
90
|
+
saveStepHeartbeat(workflowSlug: string, runId: string, stepId: string, workerId: string, attemptNumber: number): Promise<void>;
|
|
91
|
+
saveStepReclaimed(workflowSlug: string, runId: string, stepId: string, metadata: {
|
|
92
|
+
originalWorkerId: string;
|
|
93
|
+
reclaimedBy: string;
|
|
94
|
+
lastHeartbeat: number;
|
|
95
|
+
staleThreshold: number;
|
|
96
|
+
staleDuration: number;
|
|
97
|
+
attemptNumber: number;
|
|
98
|
+
}): Promise<void>;
|
|
99
|
+
saveStepLogs(workflowSlug: string, runId: string, stepId: string, logs: LogEntry[]): Promise<void>;
|
|
100
|
+
loadStepLogs(workflowSlug: string, runId: string, stepId: string, attemptNumber?: number): Promise<LogEntry[] | null>;
|
|
101
|
+
saveWorkflowStart(workflowSlug: string, runId: string, metadata: {
|
|
102
|
+
workflowAttemptNumber: number;
|
|
103
|
+
hasInputSchema: boolean;
|
|
104
|
+
hasInput: boolean;
|
|
105
|
+
}): Promise<void>;
|
|
106
|
+
saveWorkflowInputValidation(workflowSlug: string, runId: string, result: {
|
|
107
|
+
workflowAttemptNumber: number;
|
|
108
|
+
hasSchema: boolean;
|
|
109
|
+
success: boolean;
|
|
110
|
+
error?: StepError;
|
|
111
|
+
validationErrors?: Array<{
|
|
112
|
+
path: string;
|
|
113
|
+
message: string;
|
|
114
|
+
}>;
|
|
115
|
+
}): Promise<void>;
|
|
116
|
+
saveWorkflowComplete(workflowSlug: string, runId: string, output: unknown, metadata: {
|
|
117
|
+
workflowAttemptNumber: number;
|
|
118
|
+
timestamp: number;
|
|
119
|
+
duration: number;
|
|
120
|
+
totalSteps: number;
|
|
121
|
+
}): Promise<void>;
|
|
122
|
+
saveWorkflowFailed(workflowSlug: string, runId: string, error: StepError, metadata: {
|
|
123
|
+
workflowAttemptNumber: number;
|
|
124
|
+
duration: number;
|
|
125
|
+
completedSteps: number;
|
|
126
|
+
failedStep?: string;
|
|
127
|
+
}, failureReason: "step-failed" | "worker-crash" | "timeout" | "cancelled"): Promise<void>;
|
|
128
|
+
saveWorkflowResumed(workflowSlug: string, runId: string, metadata: {
|
|
129
|
+
originalRunId: string;
|
|
130
|
+
resumedSteps: number;
|
|
131
|
+
pendingSteps: number;
|
|
132
|
+
}): Promise<void>;
|
|
133
|
+
saveWorkflowCancelled(workflowSlug: string, runId: string, metadata: {
|
|
134
|
+
workflowAttemptNumber: number;
|
|
135
|
+
reason?: string;
|
|
136
|
+
duration: number;
|
|
137
|
+
completedSteps: number;
|
|
138
|
+
}): Promise<void>;
|
|
139
|
+
saveWorkflowRetryStarted(workflowSlug: string, runId: string, metadata: {
|
|
140
|
+
workflowAttemptNumber: number;
|
|
141
|
+
previousAttemptNumber: number;
|
|
142
|
+
retriedSteps: string[];
|
|
143
|
+
reason?: string;
|
|
144
|
+
}): Promise<void>;
|
|
145
|
+
saveRunSubmitted(workflowSlug: string, runId: string, metadata: {
|
|
146
|
+
availableAt: number;
|
|
147
|
+
priority: number;
|
|
148
|
+
input?: string;
|
|
149
|
+
hasInputSchema: boolean;
|
|
150
|
+
timeout?: number;
|
|
151
|
+
idempotencyKey?: string;
|
|
152
|
+
metadata?: Record<string, unknown>;
|
|
153
|
+
tags?: string[];
|
|
154
|
+
}): Promise<void>;
|
|
155
|
+
submitRun(submission: RunSubmission): Promise<{
|
|
156
|
+
runId: string;
|
|
157
|
+
isNew: boolean;
|
|
158
|
+
}>;
|
|
159
|
+
listRuns(options?: {
|
|
160
|
+
workflowSlug?: string;
|
|
161
|
+
status?: RunState["status"][];
|
|
162
|
+
tags?: string[];
|
|
163
|
+
limit?: number;
|
|
164
|
+
}): Promise<RunState[]>;
|
|
165
|
+
cancelRun(runId: string, reason?: string): Promise<void>;
|
|
166
|
+
getRun(runId: string): Promise<RunState | null>;
|
|
167
|
+
getFailedSteps(workflowSlug: string, runId: string): Promise<Array<{
|
|
168
|
+
stepId: string;
|
|
169
|
+
error: StepError;
|
|
170
|
+
attemptNumber: number;
|
|
171
|
+
}>>;
|
|
172
|
+
listActiveWorkflows(): Promise<string[]>;
|
|
173
|
+
listScheduledSteps(options?: {
|
|
174
|
+
availableBefore?: number;
|
|
175
|
+
workflowSlug?: string;
|
|
176
|
+
limit?: number;
|
|
177
|
+
}): Promise<Array<{
|
|
178
|
+
workflowSlug: string;
|
|
179
|
+
runId: string;
|
|
180
|
+
stepId: string;
|
|
181
|
+
}>>;
|
|
182
|
+
isStepClaimable(workflowSlug: string, runId: string, stepId: string): Promise<boolean>;
|
|
183
|
+
claimScheduledStep(workflowSlug: string, runId: string, stepId: string, workerId: string, metadata: StepStartMetadata): Promise<{
|
|
184
|
+
attemptNumber: number;
|
|
185
|
+
} | null>;
|
|
186
|
+
reclaimStaleSteps(staleThreshold: number, reclaimedBy: string): Promise<Array<{
|
|
187
|
+
workflowSlug: string;
|
|
188
|
+
runId: string;
|
|
189
|
+
stepId: string;
|
|
190
|
+
}>>;
|
|
191
|
+
registerWorkflow(registration: WorkflowRegistration): Promise<void>;
|
|
192
|
+
getWorkflowMetadata(slug: string): Promise<WorkflowMetadata | null>;
|
|
193
|
+
listWorkflowMetadata(): Promise<WorkflowMetadata[]>;
|
|
194
|
+
getWorkflowSteps(slug: string): Promise<StepDefinition[]>;
|
|
195
|
+
listRunIds(workflowSlug: string): Promise<string[]>;
|
|
196
|
+
/**
|
|
197
|
+
* Close the database connection pool
|
|
198
|
+
* Call this when shutting down the application
|
|
199
|
+
*/
|
|
200
|
+
close(): Promise<void>;
|
|
201
|
+
/**
|
|
202
|
+
* Helper to load all events within a time range and optional filters
|
|
203
|
+
* Uses raw SQL queries for better performance with large datasets
|
|
204
|
+
*/
|
|
205
|
+
private loadEventsForAnalytics;
|
|
206
|
+
getErrorAnalysis(options?: AnalyticsOptions): Promise<ErrorAnalysis>;
|
|
207
|
+
getErrorsList(options?: {
|
|
208
|
+
timeRange?: {
|
|
209
|
+
start: number;
|
|
210
|
+
end: number;
|
|
211
|
+
};
|
|
212
|
+
workflowSlug?: string;
|
|
213
|
+
groupingStrategy?: 'exact' | 'normalized' | 'portable';
|
|
214
|
+
limit?: number;
|
|
215
|
+
offset?: number;
|
|
216
|
+
}): Promise<{
|
|
217
|
+
errors: Array<{
|
|
218
|
+
fingerprint: string;
|
|
219
|
+
errorMessage: string;
|
|
220
|
+
errorName: string;
|
|
221
|
+
sampleStack: string;
|
|
222
|
+
count: number;
|
|
223
|
+
affectedRuns: number;
|
|
224
|
+
firstSeen: number;
|
|
225
|
+
lastSeen: number;
|
|
226
|
+
}>;
|
|
227
|
+
total: number;
|
|
228
|
+
}>;
|
|
229
|
+
getErrorDetail(fingerprint: string, groupingStrategy: 'exact' | 'normalized' | 'portable', options?: {
|
|
230
|
+
timeRange?: {
|
|
231
|
+
start: number;
|
|
232
|
+
end: number;
|
|
233
|
+
};
|
|
234
|
+
limit?: number;
|
|
235
|
+
offset?: number;
|
|
236
|
+
}): Promise<{
|
|
237
|
+
fingerprint: string;
|
|
238
|
+
errorMessage: string;
|
|
239
|
+
errorName: string;
|
|
240
|
+
sampleStack: string;
|
|
241
|
+
totalCount: number;
|
|
242
|
+
affectedRuns: number;
|
|
243
|
+
firstSeen: number;
|
|
244
|
+
lastSeen: number;
|
|
245
|
+
occurrences: Array<{
|
|
246
|
+
workflowSlug: string;
|
|
247
|
+
runId: string;
|
|
248
|
+
stepId: string;
|
|
249
|
+
attemptNumber: number;
|
|
250
|
+
timestampUs: number;
|
|
251
|
+
}>;
|
|
252
|
+
total: number;
|
|
253
|
+
}>;
|
|
254
|
+
getRetryAnalysis(options?: AnalyticsOptions): Promise<RetryAnalysis>;
|
|
255
|
+
getSchedulingLatency(options?: AnalyticsOptions): Promise<SchedulingLatency>;
|
|
256
|
+
getStepDuration(options?: AnalyticsOptions): Promise<StepDuration>;
|
|
257
|
+
getWorkflowDuration(options?: AnalyticsOptions): Promise<WorkflowDuration>;
|
|
258
|
+
getWorkerStability(options?: AnalyticsOptions): Promise<WorkerStability>;
|
|
259
|
+
getThroughput(options?: AnalyticsOptions): Promise<Throughput>;
|
|
260
|
+
getQueueDepth(options?: Pick<AnalyticsOptions, "workflowSlug">): Promise<QueueDepth>;
|
|
261
|
+
getQueueDepthByWorkflow(): Promise<QueueDepthByWorkflow>;
|
|
262
|
+
getSuccessRate(options?: AnalyticsOptions): Promise<SuccessRate>;
|
|
263
|
+
getAnalyticsSummary(options?: AnalyticsOptions): Promise<AnalyticsSummary>;
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|