@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 @@
|
|
|
1
|
+
{"version":3,"file":"dead-letter.js","sourceRoot":"","sources":["../../src/saga/dead-letter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Idempotency Store for safe retries
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Unique key generation
|
|
6
|
+
* - Operation deduplication
|
|
7
|
+
* - Result caching
|
|
8
|
+
* - TTL-based expiration
|
|
9
|
+
* - Multiple storage backends
|
|
10
|
+
*/
|
|
11
|
+
import type { IdempotencyStore, IdempotencyRecord } from '@cogitator-ai/types';
|
|
12
|
+
/**
|
|
13
|
+
* Idempotency check result
|
|
14
|
+
*/
|
|
15
|
+
export interface IdempotencyCheckResult {
|
|
16
|
+
isDuplicate: boolean;
|
|
17
|
+
record?: IdempotencyRecord;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Generate idempotency key from inputs
|
|
21
|
+
*/
|
|
22
|
+
export declare function generateIdempotencyKey(workflowId: string, nodeId: string, input?: unknown): string;
|
|
23
|
+
/**
|
|
24
|
+
* Generate idempotency key with custom components
|
|
25
|
+
*/
|
|
26
|
+
export declare function generateCustomKey(...components: unknown[]): string;
|
|
27
|
+
/**
|
|
28
|
+
* Abstract idempotency store
|
|
29
|
+
*/
|
|
30
|
+
export declare abstract class BaseIdempotencyStore implements IdempotencyStore {
|
|
31
|
+
abstract check(key: string): Promise<IdempotencyCheckResult>;
|
|
32
|
+
abstract store(key: string, result: unknown, error?: Error): Promise<void>;
|
|
33
|
+
abstract get(key: string): Promise<IdempotencyRecord | null>;
|
|
34
|
+
abstract delete(key: string): Promise<boolean>;
|
|
35
|
+
abstract clear(): Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* In-memory idempotency store
|
|
39
|
+
*/
|
|
40
|
+
export declare class InMemoryIdempotencyStore extends BaseIdempotencyStore {
|
|
41
|
+
private records;
|
|
42
|
+
private ttl;
|
|
43
|
+
private cleanupInterval?;
|
|
44
|
+
constructor(options?: {
|
|
45
|
+
ttl?: number;
|
|
46
|
+
cleanupIntervalMs?: number;
|
|
47
|
+
});
|
|
48
|
+
check(key: string): Promise<IdempotencyCheckResult>;
|
|
49
|
+
store(key: string, result: unknown, error?: Error): Promise<void>;
|
|
50
|
+
get(key: string): Promise<IdempotencyRecord | null>;
|
|
51
|
+
delete(key: string): Promise<boolean>;
|
|
52
|
+
clear(): Promise<void>;
|
|
53
|
+
private cleanup;
|
|
54
|
+
destroy(): void;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* File-based idempotency store
|
|
58
|
+
*/
|
|
59
|
+
export declare class FileIdempotencyStore extends BaseIdempotencyStore {
|
|
60
|
+
private directory;
|
|
61
|
+
private ttl;
|
|
62
|
+
private initialized;
|
|
63
|
+
constructor(directory: string, options?: {
|
|
64
|
+
ttl?: number;
|
|
65
|
+
});
|
|
66
|
+
private ensureInitialized;
|
|
67
|
+
private getFilePath;
|
|
68
|
+
check(key: string): Promise<IdempotencyCheckResult>;
|
|
69
|
+
store(key: string, result: unknown, error?: Error): Promise<void>;
|
|
70
|
+
get(key: string): Promise<IdempotencyRecord | null>;
|
|
71
|
+
delete(key: string): Promise<boolean>;
|
|
72
|
+
clear(): Promise<void>;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Idempotent operation wrapper
|
|
76
|
+
*/
|
|
77
|
+
export declare function idempotent<T>(store: IdempotencyStore, key: string, fn: () => Promise<T>): Promise<T>;
|
|
78
|
+
/**
|
|
79
|
+
* Decorator for idempotent methods
|
|
80
|
+
*/
|
|
81
|
+
export declare function Idempotent(store: IdempotencyStore, keyGenerator: (...args: unknown[]) => string): (_target: unknown, _propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
82
|
+
/**
|
|
83
|
+
* Create an in-memory idempotency store
|
|
84
|
+
*/
|
|
85
|
+
export declare function createInMemoryIdempotencyStore(options?: {
|
|
86
|
+
ttl?: number;
|
|
87
|
+
cleanupIntervalMs?: number;
|
|
88
|
+
}): InMemoryIdempotencyStore;
|
|
89
|
+
/**
|
|
90
|
+
* Create a file-based idempotency store
|
|
91
|
+
*/
|
|
92
|
+
export declare function createFileIdempotencyStore(directory: string, options?: {
|
|
93
|
+
ttl?: number;
|
|
94
|
+
}): FileIdempotencyStore;
|
|
95
|
+
//# sourceMappingURL=idempotency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../src/saga/idempotency.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Idempotency Store for safe retries
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Unique key generation
|
|
6
|
+
* - Operation deduplication
|
|
7
|
+
* - Result caching
|
|
8
|
+
* - TTL-based expiration
|
|
9
|
+
* - Multiple storage backends
|
|
10
|
+
*/
|
|
11
|
+
import { createHash } from 'crypto';
|
|
12
|
+
import { promises as fs } from 'fs';
|
|
13
|
+
import { join } from 'path';
|
|
14
|
+
const DEFAULT_TTL = 24 * 60 * 60 * 1000;
|
|
15
|
+
/**
|
|
16
|
+
* Generate idempotency key from inputs
|
|
17
|
+
*/
|
|
18
|
+
export function generateIdempotencyKey(workflowId, nodeId, input) {
|
|
19
|
+
const data = JSON.stringify({
|
|
20
|
+
workflowId,
|
|
21
|
+
nodeId,
|
|
22
|
+
input: input ?? null,
|
|
23
|
+
});
|
|
24
|
+
return createHash('sha256').update(data).digest('hex').slice(0, 32);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Generate idempotency key with custom components
|
|
28
|
+
*/
|
|
29
|
+
export function generateCustomKey(...components) {
|
|
30
|
+
const data = JSON.stringify(components);
|
|
31
|
+
return createHash('sha256').update(data).digest('hex').slice(0, 32);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Abstract idempotency store
|
|
35
|
+
*/
|
|
36
|
+
export class BaseIdempotencyStore {
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* In-memory idempotency store
|
|
40
|
+
*/
|
|
41
|
+
export class InMemoryIdempotencyStore extends BaseIdempotencyStore {
|
|
42
|
+
records = new Map();
|
|
43
|
+
ttl;
|
|
44
|
+
cleanupInterval;
|
|
45
|
+
constructor(options = {}) {
|
|
46
|
+
super();
|
|
47
|
+
this.ttl = options.ttl ?? DEFAULT_TTL;
|
|
48
|
+
if (options.cleanupIntervalMs) {
|
|
49
|
+
this.cleanupInterval = setInterval(() => void this.cleanup(), options.cleanupIntervalMs);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async check(key) {
|
|
53
|
+
const record = this.records.get(key);
|
|
54
|
+
if (!record) {
|
|
55
|
+
return { isDuplicate: false };
|
|
56
|
+
}
|
|
57
|
+
if (record.expiresAt && record.expiresAt < Date.now()) {
|
|
58
|
+
this.records.delete(key);
|
|
59
|
+
return { isDuplicate: false };
|
|
60
|
+
}
|
|
61
|
+
return { isDuplicate: true, record };
|
|
62
|
+
}
|
|
63
|
+
async store(key, result, error) {
|
|
64
|
+
const now = Date.now();
|
|
65
|
+
const record = {
|
|
66
|
+
key,
|
|
67
|
+
result,
|
|
68
|
+
error: error
|
|
69
|
+
? {
|
|
70
|
+
name: error.name,
|
|
71
|
+
message: error.message,
|
|
72
|
+
stack: error.stack,
|
|
73
|
+
}
|
|
74
|
+
: undefined,
|
|
75
|
+
createdAt: now,
|
|
76
|
+
expiresAt: now + this.ttl,
|
|
77
|
+
status: error ? 'failed' : 'completed',
|
|
78
|
+
};
|
|
79
|
+
this.records.set(key, record);
|
|
80
|
+
}
|
|
81
|
+
async get(key) {
|
|
82
|
+
const record = this.records.get(key);
|
|
83
|
+
if (!record)
|
|
84
|
+
return null;
|
|
85
|
+
if (record.expiresAt && record.expiresAt < Date.now()) {
|
|
86
|
+
this.records.delete(key);
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
return record;
|
|
90
|
+
}
|
|
91
|
+
async delete(key) {
|
|
92
|
+
return this.records.delete(key);
|
|
93
|
+
}
|
|
94
|
+
async clear() {
|
|
95
|
+
this.records.clear();
|
|
96
|
+
}
|
|
97
|
+
async cleanup() {
|
|
98
|
+
const now = Date.now();
|
|
99
|
+
const toDelete = [];
|
|
100
|
+
for (const [key, record] of this.records) {
|
|
101
|
+
if (record.expiresAt && record.expiresAt < now) {
|
|
102
|
+
toDelete.push(key);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
for (const key of toDelete) {
|
|
106
|
+
this.records.delete(key);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
destroy() {
|
|
110
|
+
if (this.cleanupInterval) {
|
|
111
|
+
clearInterval(this.cleanupInterval);
|
|
112
|
+
this.cleanupInterval = undefined;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* File-based idempotency store
|
|
118
|
+
*/
|
|
119
|
+
export class FileIdempotencyStore extends BaseIdempotencyStore {
|
|
120
|
+
directory;
|
|
121
|
+
ttl;
|
|
122
|
+
initialized = false;
|
|
123
|
+
constructor(directory, options = {}) {
|
|
124
|
+
super();
|
|
125
|
+
this.directory = directory;
|
|
126
|
+
this.ttl = options.ttl ?? DEFAULT_TTL;
|
|
127
|
+
}
|
|
128
|
+
async ensureInitialized() {
|
|
129
|
+
if (this.initialized)
|
|
130
|
+
return;
|
|
131
|
+
try {
|
|
132
|
+
await fs.mkdir(this.directory, { recursive: true });
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
}
|
|
136
|
+
this.initialized = true;
|
|
137
|
+
}
|
|
138
|
+
getFilePath(key) {
|
|
139
|
+
const subdir = key.slice(0, 2);
|
|
140
|
+
return join(this.directory, subdir, `${key}.json`);
|
|
141
|
+
}
|
|
142
|
+
async check(key) {
|
|
143
|
+
const record = await this.get(key);
|
|
144
|
+
if (!record) {
|
|
145
|
+
return { isDuplicate: false };
|
|
146
|
+
}
|
|
147
|
+
return { isDuplicate: true, record };
|
|
148
|
+
}
|
|
149
|
+
async store(key, result, error) {
|
|
150
|
+
await this.ensureInitialized();
|
|
151
|
+
const now = Date.now();
|
|
152
|
+
const filePath = this.getFilePath(key);
|
|
153
|
+
const dir = filePath.substring(0, filePath.lastIndexOf('/'));
|
|
154
|
+
await fs.mkdir(dir, { recursive: true }).catch(() => { });
|
|
155
|
+
const record = {
|
|
156
|
+
key,
|
|
157
|
+
result,
|
|
158
|
+
error: error
|
|
159
|
+
? {
|
|
160
|
+
name: error.name,
|
|
161
|
+
message: error.message,
|
|
162
|
+
stack: error.stack,
|
|
163
|
+
}
|
|
164
|
+
: undefined,
|
|
165
|
+
createdAt: now,
|
|
166
|
+
expiresAt: now + this.ttl,
|
|
167
|
+
status: error ? 'failed' : 'completed',
|
|
168
|
+
};
|
|
169
|
+
await fs.writeFile(filePath, JSON.stringify(record, null, 2));
|
|
170
|
+
}
|
|
171
|
+
async get(key) {
|
|
172
|
+
await this.ensureInitialized();
|
|
173
|
+
try {
|
|
174
|
+
const filePath = this.getFilePath(key);
|
|
175
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
176
|
+
const record = JSON.parse(content);
|
|
177
|
+
if (record.expiresAt && record.expiresAt < Date.now()) {
|
|
178
|
+
await this.delete(key);
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
return record;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
async delete(key) {
|
|
188
|
+
try {
|
|
189
|
+
await fs.unlink(this.getFilePath(key));
|
|
190
|
+
return true;
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
async clear() {
|
|
197
|
+
await this.ensureInitialized();
|
|
198
|
+
const clearDir = async (dir) => {
|
|
199
|
+
try {
|
|
200
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
201
|
+
for (const entry of entries) {
|
|
202
|
+
const path = join(dir, entry.name);
|
|
203
|
+
if (entry.isDirectory()) {
|
|
204
|
+
await clearDir(path);
|
|
205
|
+
await fs.rmdir(path).catch(() => { });
|
|
206
|
+
}
|
|
207
|
+
else if (entry.name.endsWith('.json')) {
|
|
208
|
+
await fs.unlink(path).catch(() => { });
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
await clearDir(this.directory);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Idempotent operation wrapper
|
|
220
|
+
*/
|
|
221
|
+
export async function idempotent(store, key, fn) {
|
|
222
|
+
const check = await store.check(key);
|
|
223
|
+
if (check.isDuplicate && check.record) {
|
|
224
|
+
if (check.record.status === 'failed' && check.record.error) {
|
|
225
|
+
const error = new Error(check.record.error.message);
|
|
226
|
+
error.name = check.record.error.name;
|
|
227
|
+
throw error;
|
|
228
|
+
}
|
|
229
|
+
return check.record.result;
|
|
230
|
+
}
|
|
231
|
+
try {
|
|
232
|
+
const result = await fn();
|
|
233
|
+
await store.store(key, result);
|
|
234
|
+
return result;
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
await store.store(key, undefined, error);
|
|
238
|
+
throw error;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Decorator for idempotent methods
|
|
243
|
+
*/
|
|
244
|
+
export function Idempotent(store, keyGenerator) {
|
|
245
|
+
return function (_target, _propertyKey, descriptor) {
|
|
246
|
+
const originalMethod = descriptor.value;
|
|
247
|
+
descriptor.value = async function (...args) {
|
|
248
|
+
const key = keyGenerator(...args);
|
|
249
|
+
return idempotent(store, key, () => originalMethod.apply(this, args));
|
|
250
|
+
};
|
|
251
|
+
return descriptor;
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Create an in-memory idempotency store
|
|
256
|
+
*/
|
|
257
|
+
export function createInMemoryIdempotencyStore(options) {
|
|
258
|
+
return new InMemoryIdempotencyStore(options);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Create a file-based idempotency store
|
|
262
|
+
*/
|
|
263
|
+
export function createFileIdempotencyStore(directory, options) {
|
|
264
|
+
return new FileIdempotencyStore(directory, options);
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=idempotency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/saga/idempotency.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @cogitator-ai/workflows - Saga module
|
|
3
|
+
*
|
|
4
|
+
* Implements the Saga pattern for workflow resilience:
|
|
5
|
+
* - Retry with exponential backoff and jitter
|
|
6
|
+
* - Circuit breaker for fault isolation
|
|
7
|
+
* - Compensation for rollback on failure
|
|
8
|
+
* - Dead letter queue for failed operations
|
|
9
|
+
* - Idempotency for safe retries
|
|
10
|
+
*/
|
|
11
|
+
export { executeWithRetry, withRetry, Retryable, estimateRetryDuration, type RetryResult, type AttemptInfo, type RetryOptions, } from './retry';
|
|
12
|
+
export { CircuitBreaker, createCircuitBreaker, CircuitBreakerOpenError, WithCircuitBreaker, type CircuitBreakerEvent, type CircuitBreakerEventHandler, type CircuitBreakerStats, } from './circuit-breaker';
|
|
13
|
+
export { CompensationManager, createCompensationManager, CompensationBuilder, compensationBuilder, type CompensationStep, type CompensationResult, type CompensationReport, type CompensationManagerSummary, } from './compensation';
|
|
14
|
+
export { BaseDLQ, InMemoryDLQ, FileDLQ, createInMemoryDLQ, createFileDLQ, createDLQEntry, type ExtendedDeadLetterEntry, type DLQFilters, } from './dead-letter';
|
|
15
|
+
export { BaseIdempotencyStore, InMemoryIdempotencyStore, FileIdempotencyStore, createInMemoryIdempotencyStore, createFileIdempotencyStore, generateIdempotencyKey, generateCustomKey, idempotent, Idempotent, type IdempotencyCheckResult, } from './idempotency';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/saga/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,GAChC,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,OAAO,EACP,WAAW,EACX,OAAO,EACP,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,KAAK,uBAAuB,EAC5B,KAAK,UAAU,GAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,EAC9B,0BAA0B,EAC1B,sBAAsB,EACtB,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,KAAK,sBAAsB,GAC5B,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @cogitator-ai/workflows - Saga module
|
|
3
|
+
*
|
|
4
|
+
* Implements the Saga pattern for workflow resilience:
|
|
5
|
+
* - Retry with exponential backoff and jitter
|
|
6
|
+
* - Circuit breaker for fault isolation
|
|
7
|
+
* - Compensation for rollback on failure
|
|
8
|
+
* - Dead letter queue for failed operations
|
|
9
|
+
* - Idempotency for safe retries
|
|
10
|
+
*/
|
|
11
|
+
export { executeWithRetry, withRetry, Retryable, estimateRetryDuration, } from './retry';
|
|
12
|
+
export { CircuitBreaker, createCircuitBreaker, CircuitBreakerOpenError, WithCircuitBreaker, } from './circuit-breaker';
|
|
13
|
+
export { CompensationManager, createCompensationManager, CompensationBuilder, compensationBuilder, } from './compensation';
|
|
14
|
+
export { BaseDLQ, InMemoryDLQ, FileDLQ, createInMemoryDLQ, createFileDLQ, createDLQEntry, } from './dead-letter';
|
|
15
|
+
export { BaseIdempotencyStore, InMemoryIdempotencyStore, FileIdempotencyStore, createInMemoryIdempotencyStore, createFileIdempotencyStore, generateIdempotencyKey, generateCustomKey, idempotent, Idempotent, } from './idempotency';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/saga/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,qBAAqB,GAItB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,GAInB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,GAKpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,OAAO,EACP,WAAW,EACX,OAAO,EACP,iBAAiB,EACjB,aAAa,EACb,cAAc,GAGf,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,EAC9B,0BAA0B,EAC1B,sBAAsB,EACtB,iBAAiB,EACjB,UAAU,EACV,UAAU,GAEX,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry module with exponential backoff and jitter
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Configurable backoff strategies (constant, linear, exponential)
|
|
6
|
+
* - Jitter to prevent thundering herd
|
|
7
|
+
* - Retryable error detection
|
|
8
|
+
* - Per-attempt hooks for logging/metrics
|
|
9
|
+
*/
|
|
10
|
+
import type { RetryConfig } from '@cogitator-ai/types';
|
|
11
|
+
/**
|
|
12
|
+
* Retry result with metadata
|
|
13
|
+
*/
|
|
14
|
+
export interface RetryResult<T> {
|
|
15
|
+
success: boolean;
|
|
16
|
+
result?: T;
|
|
17
|
+
error?: Error;
|
|
18
|
+
attempts: number;
|
|
19
|
+
totalDuration: number;
|
|
20
|
+
delays: number[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Attempt metadata passed to hooks
|
|
24
|
+
*/
|
|
25
|
+
export interface AttemptInfo {
|
|
26
|
+
attempt: number;
|
|
27
|
+
maxAttempts: number;
|
|
28
|
+
delay: number;
|
|
29
|
+
error?: Error;
|
|
30
|
+
startTime: number;
|
|
31
|
+
duration: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Extended retry config with hooks
|
|
35
|
+
*/
|
|
36
|
+
export interface RetryOptions<T = unknown> extends Partial<RetryConfig> {
|
|
37
|
+
onAttempt?: (info: AttemptInfo) => void;
|
|
38
|
+
onRetry?: (info: AttemptInfo) => void;
|
|
39
|
+
onSuccess?: (result: T, info: AttemptInfo) => void;
|
|
40
|
+
onFailure?: (error: Error, info: AttemptInfo) => void;
|
|
41
|
+
abortSignal?: AbortSignal;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Execute function with retry logic
|
|
45
|
+
*/
|
|
46
|
+
export declare function executeWithRetry<T>(fn: (attempt: number) => Promise<T>, options?: RetryOptions<T>): Promise<RetryResult<T>>;
|
|
47
|
+
/**
|
|
48
|
+
* Create a retryable version of a function
|
|
49
|
+
*/
|
|
50
|
+
export declare function withRetry<T, A extends unknown[]>(fn: (...args: A) => Promise<T>, options?: RetryOptions<T>): (...args: A) => Promise<T>;
|
|
51
|
+
/**
|
|
52
|
+
* Decorator for retryable class methods
|
|
53
|
+
*/
|
|
54
|
+
export declare function Retryable<T = unknown>(options?: RetryOptions<T>): (_target: unknown, _propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
55
|
+
/**
|
|
56
|
+
* Calculate total expected retry time (for timeout estimation)
|
|
57
|
+
*/
|
|
58
|
+
export declare function estimateRetryDuration(config?: Partial<RetryConfig>): number;
|
|
59
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/saga/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,qBAAqB,CAAC;AAgGxE;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,OAAO,CAAC,WAAW,CAAC;IACrE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACnD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACtD,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EACnC,OAAO,GAAE,YAAY,CAAC,CAAC,CAAM,GAC5B,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAkGzB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,EAAE,EAC9C,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAC9B,OAAO,GAAE,YAAY,CAAC,CAAC,CAAM,GAC5B,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAU5B;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,GAAE,YAAY,CAAC,CAAC,CAAM,IAEhE,SAAS,OAAO,EAChB,cAAc,MAAM,EACpB,YAAY,kBAAkB,KAC7B,kBAAkB,CAkBtB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,MAAM,CA6B/E"}
|