@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,452 @@
1
+ /**
2
+ * Webhook Trigger
3
+ *
4
+ * HTTP-based workflow triggers with authentication,
5
+ * rate limiting, payload validation, and deduplication.
6
+ */
7
+ import { nanoid } from 'nanoid';
8
+ import * as crypto from 'node:crypto';
9
+ import { createRateLimiter } from './rate-limiter';
10
+ /**
11
+ * Authentication error
12
+ */
13
+ export class WebhookAuthError extends Error {
14
+ constructor(message) {
15
+ super(message);
16
+ this.name = 'WebhookAuthError';
17
+ }
18
+ }
19
+ /**
20
+ * Rate limit error
21
+ */
22
+ export class WebhookRateLimitError extends Error {
23
+ retryAfter;
24
+ remaining;
25
+ resetAt;
26
+ constructor(retryAfter, remaining, resetAt) {
27
+ super('Rate limit exceeded');
28
+ this.name = 'WebhookRateLimitError';
29
+ this.retryAfter = retryAfter;
30
+ this.remaining = remaining;
31
+ this.resetAt = resetAt;
32
+ }
33
+ }
34
+ /**
35
+ * Webhook trigger executor
36
+ */
37
+ export class WebhookTriggerExecutor {
38
+ triggers = new Map();
39
+ triggersByPath = new Map();
40
+ rateLimiters = new Map();
41
+ deduplicationCache = new Map();
42
+ cleanupInterval;
43
+ onFire;
44
+ constructor(options = {}) {
45
+ this.onFire = options.onFire;
46
+ const cleanupMs = options.cleanupIntervalMs ?? 60000;
47
+ this.cleanupInterval = setInterval(() => {
48
+ this.cleanupDeduplicationCache();
49
+ }, cleanupMs);
50
+ }
51
+ /**
52
+ * Register a webhook trigger
53
+ */
54
+ register(workflowName, config, externalId) {
55
+ const triggerId = externalId ?? nanoid();
56
+ const now = Date.now();
57
+ const state = {
58
+ triggerId,
59
+ workflowName,
60
+ config,
61
+ triggerCount: 0,
62
+ errorCount: 0,
63
+ enabled: true,
64
+ createdAt: now,
65
+ };
66
+ this.triggers.set(triggerId, state);
67
+ const pathKey = this.normalizePathKey(config.path, config.method);
68
+ let pathTriggers = this.triggersByPath.get(pathKey);
69
+ if (!pathTriggers) {
70
+ pathTriggers = new Map();
71
+ this.triggersByPath.set(pathKey, pathTriggers);
72
+ }
73
+ pathTriggers.set(triggerId, state);
74
+ if (config.rateLimit) {
75
+ const rateLimiter = createRateLimiter({
76
+ capacity: config.rateLimit.requests,
77
+ window: config.rateLimit.window,
78
+ burstLimit: config.rateLimit.burstLimit,
79
+ });
80
+ this.rateLimiters.set(triggerId, rateLimiter);
81
+ }
82
+ return triggerId;
83
+ }
84
+ /**
85
+ * Unregister a trigger
86
+ */
87
+ unregister(triggerId) {
88
+ const state = this.triggers.get(triggerId);
89
+ if (!state)
90
+ return;
91
+ const pathKey = this.normalizePathKey(state.config.path, state.config.method);
92
+ const pathTriggers = this.triggersByPath.get(pathKey);
93
+ if (pathTriggers) {
94
+ pathTriggers.delete(triggerId);
95
+ if (pathTriggers.size === 0) {
96
+ this.triggersByPath.delete(pathKey);
97
+ }
98
+ }
99
+ const rateLimiter = this.rateLimiters.get(triggerId);
100
+ if (rateLimiter) {
101
+ rateLimiter.dispose();
102
+ this.rateLimiters.delete(triggerId);
103
+ }
104
+ this.triggers.delete(triggerId);
105
+ }
106
+ /**
107
+ * Enable a trigger
108
+ */
109
+ enable(triggerId) {
110
+ const state = this.triggers.get(triggerId);
111
+ if (!state)
112
+ throw new Error(`Trigger not found: ${triggerId}`);
113
+ state.enabled = true;
114
+ }
115
+ /**
116
+ * Disable a trigger
117
+ */
118
+ disable(triggerId) {
119
+ const state = this.triggers.get(triggerId);
120
+ if (!state)
121
+ throw new Error(`Trigger not found: ${triggerId}`);
122
+ state.enabled = false;
123
+ }
124
+ /**
125
+ * Handle an incoming webhook request
126
+ */
127
+ async handle(request) {
128
+ const pathKey = this.normalizePathKey(request.path, request.method);
129
+ const pathTriggers = this.triggersByPath.get(pathKey);
130
+ if (!pathTriggers || pathTriggers.size === 0) {
131
+ return null;
132
+ }
133
+ const trigger = Array.from(pathTriggers.values()).find(t => t.enabled);
134
+ if (!trigger) {
135
+ return null;
136
+ }
137
+ return this.handleTrigger(trigger, request);
138
+ }
139
+ /**
140
+ * Handle a specific trigger
141
+ */
142
+ async handleTrigger(state, request) {
143
+ const config = state.config;
144
+ try {
145
+ await this.authenticate(request, config.auth);
146
+ const clientKey = this.getClientKey(request);
147
+ this.checkRateLimit(state.triggerId, clientKey);
148
+ if (config.deduplicationKey && config.deduplicationWindow) {
149
+ const dedupKey = config.deduplicationKey(request.body);
150
+ if (this.isDuplicate(state.triggerId, dedupKey, config.deduplicationWindow)) {
151
+ return {
152
+ triggered: false,
153
+ response: {
154
+ status: 200,
155
+ body: { deduplicated: true, message: 'Request already processed' },
156
+ },
157
+ };
158
+ }
159
+ }
160
+ if (config.validatePayload && !config.validatePayload(request.body)) {
161
+ return {
162
+ triggered: false,
163
+ response: {
164
+ status: 400,
165
+ body: { error: 'Invalid payload' },
166
+ },
167
+ };
168
+ }
169
+ const payload = config.transformPayload
170
+ ? config.transformPayload(request.body)
171
+ : request.body;
172
+ const context = {
173
+ triggerId: state.triggerId,
174
+ triggerType: 'webhook',
175
+ timestamp: Date.now(),
176
+ payload,
177
+ headers: this.normalizeHeaders(request.headers),
178
+ metadata: {
179
+ path: request.path,
180
+ method: request.method,
181
+ query: request.query,
182
+ ip: request.ip,
183
+ },
184
+ };
185
+ state.lastTriggered = Date.now();
186
+ state.triggerCount++;
187
+ const workflowTrigger = this.toWorkflowTrigger(state);
188
+ const runId = await this.onFire?.(workflowTrigger, context);
189
+ return {
190
+ triggered: true,
191
+ runId,
192
+ response: {
193
+ status: 202,
194
+ body: {
195
+ accepted: true,
196
+ runId,
197
+ triggerId: state.triggerId,
198
+ },
199
+ },
200
+ };
201
+ }
202
+ catch (error) {
203
+ state.errorCount++;
204
+ state.lastError = error instanceof Error ? error.message : String(error);
205
+ if (error instanceof WebhookAuthError) {
206
+ return {
207
+ triggered: false,
208
+ response: {
209
+ status: 401,
210
+ body: { error: 'Unauthorized' },
211
+ },
212
+ };
213
+ }
214
+ if (error instanceof WebhookRateLimitError) {
215
+ return {
216
+ triggered: false,
217
+ response: {
218
+ status: 429,
219
+ headers: {
220
+ 'Retry-After': String(Math.ceil(error.retryAfter / 1000)),
221
+ 'X-RateLimit-Remaining': String(error.remaining),
222
+ 'X-RateLimit-Reset': String(Math.ceil(error.resetAt / 1000)),
223
+ },
224
+ body: { error: 'Rate limit exceeded', retryAfter: error.retryAfter },
225
+ },
226
+ };
227
+ }
228
+ return {
229
+ triggered: false,
230
+ response: {
231
+ status: 500,
232
+ body: { error: 'Internal server error' },
233
+ },
234
+ };
235
+ }
236
+ }
237
+ /**
238
+ * Get trigger state
239
+ */
240
+ getState(triggerId) {
241
+ return this.triggers.get(triggerId);
242
+ }
243
+ /**
244
+ * Get all triggers for a workflow
245
+ */
246
+ getTriggersForWorkflow(workflowName) {
247
+ return Array.from(this.triggers.values()).filter(t => t.workflowName === workflowName);
248
+ }
249
+ /**
250
+ * Get all enabled triggers
251
+ */
252
+ getEnabledTriggers() {
253
+ return Array.from(this.triggers.values()).filter(t => t.enabled);
254
+ }
255
+ /**
256
+ * Get all triggers
257
+ */
258
+ getAll() {
259
+ return Array.from(this.triggers.values());
260
+ }
261
+ /**
262
+ * Get registered paths
263
+ */
264
+ getRegisteredPaths() {
265
+ const paths = [];
266
+ for (const state of this.triggers.values()) {
267
+ paths.push({
268
+ path: state.config.path,
269
+ method: state.config.method,
270
+ triggerId: state.triggerId,
271
+ });
272
+ }
273
+ return paths;
274
+ }
275
+ /**
276
+ * Dispose the executor
277
+ */
278
+ dispose() {
279
+ if (this.cleanupInterval) {
280
+ clearInterval(this.cleanupInterval);
281
+ this.cleanupInterval = undefined;
282
+ }
283
+ for (const rateLimiter of this.rateLimiters.values()) {
284
+ rateLimiter.dispose();
285
+ }
286
+ this.rateLimiters.clear();
287
+ this.triggers.clear();
288
+ this.triggersByPath.clear();
289
+ this.deduplicationCache.clear();
290
+ }
291
+ async authenticate(request, auth) {
292
+ if (!auth || auth.type === 'none') {
293
+ return;
294
+ }
295
+ const authHeader = this.getHeader(request.headers, 'authorization');
296
+ const customHeader = auth.headerName
297
+ ? this.getHeader(request.headers, auth.headerName)
298
+ : undefined;
299
+ switch (auth.type) {
300
+ case 'bearer': {
301
+ if (!authHeader?.startsWith('Bearer ')) {
302
+ throw new WebhookAuthError('Missing or invalid Bearer token');
303
+ }
304
+ const token = authHeader.slice(7);
305
+ if (token !== auth.secret) {
306
+ throw new WebhookAuthError('Invalid token');
307
+ }
308
+ break;
309
+ }
310
+ case 'basic': {
311
+ if (!authHeader?.startsWith('Basic ')) {
312
+ throw new WebhookAuthError('Missing or invalid Basic auth');
313
+ }
314
+ const credentials = Buffer.from(authHeader.slice(6), 'base64').toString('utf-8');
315
+ if (credentials !== auth.secret) {
316
+ throw new WebhookAuthError('Invalid credentials');
317
+ }
318
+ break;
319
+ }
320
+ case 'hmac': {
321
+ const signature = customHeader ?? this.getHeader(request.headers, 'x-signature');
322
+ if (!signature || !auth.secret) {
323
+ throw new WebhookAuthError('Missing signature');
324
+ }
325
+ const algorithm = auth.algorithm === 'sha512' ? 'sha512' : 'sha256';
326
+ const payload = typeof request.body === 'string'
327
+ ? request.body
328
+ : JSON.stringify(request.body);
329
+ const expectedSignature = crypto
330
+ .createHmac(algorithm, auth.secret)
331
+ .update(payload)
332
+ .digest('hex');
333
+ const actualSignature = signature.replace(/^sha(256|512)=/, '');
334
+ if (!crypto.timingSafeEqual(Buffer.from(actualSignature), Buffer.from(expectedSignature))) {
335
+ throw new WebhookAuthError('Invalid signature');
336
+ }
337
+ break;
338
+ }
339
+ case 'api-key': {
340
+ const headerName = auth.headerName ?? 'x-api-key';
341
+ const apiKey = this.getHeader(request.headers, headerName);
342
+ if (!apiKey || apiKey !== auth.secret) {
343
+ throw new WebhookAuthError('Invalid API key');
344
+ }
345
+ break;
346
+ }
347
+ default:
348
+ throw new WebhookAuthError(`Unknown auth type: ${auth.type}`);
349
+ }
350
+ }
351
+ checkRateLimit(triggerId, clientKey) {
352
+ const rateLimiter = this.rateLimiters.get(triggerId);
353
+ if (!rateLimiter)
354
+ return;
355
+ const result = rateLimiter.consume(clientKey);
356
+ if (!result.allowed) {
357
+ throw new WebhookRateLimitError(result.retryAfter ?? 0, result.remaining, result.resetAt);
358
+ }
359
+ }
360
+ isDuplicate(triggerId, dedupKey, windowMs) {
361
+ const cacheKey = `${triggerId}:${dedupKey}`;
362
+ const existing = this.deduplicationCache.get(cacheKey);
363
+ if (existing && Date.now() - existing < windowMs) {
364
+ return true;
365
+ }
366
+ this.deduplicationCache.set(cacheKey, Date.now());
367
+ return false;
368
+ }
369
+ cleanupDeduplicationCache() {
370
+ const now = Date.now();
371
+ const maxAge = 24 * 60 * 60 * 1000;
372
+ for (const [key, timestamp] of this.deduplicationCache) {
373
+ if (now - timestamp > maxAge) {
374
+ this.deduplicationCache.delete(key);
375
+ }
376
+ }
377
+ }
378
+ normalizePathKey(path, method) {
379
+ return `${method.toUpperCase()}:${path.toLowerCase()}`;
380
+ }
381
+ getClientKey(request) {
382
+ return request.ip ?? 'unknown';
383
+ }
384
+ getHeader(headers, name) {
385
+ const value = headers[name] ?? headers[name.toLowerCase()];
386
+ return Array.isArray(value) ? value[0] : value;
387
+ }
388
+ normalizeHeaders(headers) {
389
+ const normalized = {};
390
+ for (const [key, value] of Object.entries(headers)) {
391
+ if (value !== undefined) {
392
+ normalized[key.toLowerCase()] = Array.isArray(value) ? value.join(', ') : value;
393
+ }
394
+ }
395
+ return normalized;
396
+ }
397
+ toWorkflowTrigger(state) {
398
+ return {
399
+ id: state.triggerId,
400
+ workflowName: state.workflowName,
401
+ type: 'webhook',
402
+ config: state.config,
403
+ enabled: state.enabled,
404
+ createdAt: state.createdAt,
405
+ lastTriggered: state.lastTriggered,
406
+ triggerCount: state.triggerCount,
407
+ errorCount: state.errorCount,
408
+ lastError: state.lastError,
409
+ };
410
+ }
411
+ }
412
+ /**
413
+ * Create a webhook trigger executor
414
+ */
415
+ export function createWebhookTrigger(options = {}) {
416
+ return new WebhookTriggerExecutor(options);
417
+ }
418
+ /**
419
+ * Validate a webhook trigger config
420
+ */
421
+ export function validateWebhookTriggerConfig(config) {
422
+ const errors = [];
423
+ if (!config.path) {
424
+ errors.push('Path is required');
425
+ }
426
+ else if (!config.path.startsWith('/')) {
427
+ errors.push('Path must start with /');
428
+ }
429
+ const validMethods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'];
430
+ if (!validMethods.includes(config.method)) {
431
+ errors.push(`Invalid method: ${config.method}`);
432
+ }
433
+ if (config.auth) {
434
+ const validAuthTypes = ['bearer', 'basic', 'hmac', 'api-key', 'none'];
435
+ if (!validAuthTypes.includes(config.auth.type)) {
436
+ errors.push(`Invalid auth type: ${config.auth.type}`);
437
+ }
438
+ if (config.auth.type !== 'none' && !config.auth.secret) {
439
+ errors.push('Auth secret is required for non-none auth types');
440
+ }
441
+ }
442
+ if (config.rateLimit) {
443
+ if (config.rateLimit.requests < 1) {
444
+ errors.push('Rate limit requests must be at least 1');
445
+ }
446
+ if (config.rateLimit.window < 1000) {
447
+ errors.push('Rate limit window must be at least 1000ms');
448
+ }
449
+ }
450
+ return errors;
451
+ }
452
+ //# sourceMappingURL=webhook-trigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-trigger.js","sourceRoot":"","sources":["../../src/triggers/webhook-trigger.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@cogitator-ai/workflows",
3
+ "version": "0.1.0",
4
+ "description": "DAG-based workflow engine for Cogitator agents",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "dependencies": {
18
+ "cron-parser": "^4.9.0",
19
+ "nanoid": "^5.0.4",
20
+ "@cogitator-ai/types": "0.1.0",
21
+ "@cogitator-ai/core": "0.1.0"
22
+ },
23
+ "devDependencies": {
24
+ "typescript": "^5.3.0",
25
+ "vitest": "^1.0.0"
26
+ },
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "https://github.com/eL1fe/cogitator.git",
30
+ "directory": "packages/workflows"
31
+ },
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "license": "MIT",
36
+ "scripts": {
37
+ "build": "tsc",
38
+ "dev": "tsc --watch",
39
+ "clean": "rm -rf dist",
40
+ "typecheck": "tsc --noEmit",
41
+ "test": "vitest run",
42
+ "test:watch": "vitest"
43
+ }
44
+ }