@siglo/monitor 0.0.0-stage → 1.0.1

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 (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +514 -2
  3. package/dist/client.d.ts +53 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +185 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/index.d.ts +13 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +29 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/metrics.d.ts +15 -0
  12. package/dist/metrics.d.ts.map +1 -0
  13. package/dist/metrics.js +79 -0
  14. package/dist/metrics.js.map +1 -0
  15. package/dist/middleware/express.d.ts +9 -0
  16. package/dist/middleware/express.d.ts.map +1 -0
  17. package/dist/middleware/express.js +33 -0
  18. package/dist/middleware/express.js.map +1 -0
  19. package/dist/middleware/fastify.d.ts +8 -0
  20. package/dist/middleware/fastify.d.ts.map +1 -0
  21. package/dist/middleware/fastify.js +29 -0
  22. package/dist/middleware/fastify.js.map +1 -0
  23. package/dist/middleware/hono.d.ts +8 -0
  24. package/dist/middleware/hono.d.ts.map +1 -0
  25. package/dist/middleware/hono.js +27 -0
  26. package/dist/middleware/hono.js.map +1 -0
  27. package/dist/server.d.ts +30 -0
  28. package/dist/server.d.ts.map +1 -0
  29. package/dist/server.js +546 -0
  30. package/dist/server.js.map +1 -0
  31. package/dist/store.d.ts +19 -0
  32. package/dist/store.d.ts.map +1 -0
  33. package/dist/store.js +173 -0
  34. package/dist/store.js.map +1 -0
  35. package/dist/transports/redis.d.ts +26 -0
  36. package/dist/transports/redis.d.ts.map +1 -0
  37. package/dist/transports/redis.js +70 -0
  38. package/dist/transports/redis.js.map +1 -0
  39. package/dist/transports/sse.d.ts +24 -0
  40. package/dist/transports/sse.d.ts.map +1 -0
  41. package/dist/transports/sse.js +98 -0
  42. package/dist/transports/sse.js.map +1 -0
  43. package/dist/transports/websocket.d.ts +37 -0
  44. package/dist/transports/websocket.d.ts.map +1 -0
  45. package/dist/transports/websocket.js +277 -0
  46. package/dist/transports/websocket.js.map +1 -0
  47. package/dist/types.d.ts +131 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +3 -0
  50. package/dist/types.js.map +1 -0
  51. package/dist/ui/dashboard.d.ts +2 -0
  52. package/dist/ui/dashboard.d.ts.map +1 -0
  53. package/dist/ui/dashboard.js +43 -0
  54. package/dist/ui/dashboard.js.map +1 -0
  55. package/dist/wait-state.d.ts +12 -0
  56. package/dist/wait-state.d.ts.map +1 -0
  57. package/dist/wait-state.js +27 -0
  58. package/dist/wait-state.js.map +1 -0
  59. package/grafana/siglo-live-monitoring.json +109 -0
  60. package/package.json +54 -4
package/dist/server.js ADDED
@@ -0,0 +1,546 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getActiveMonitorServer = getActiveMonitorServer;
37
+ exports.getMonitorEmitter = getMonitorEmitter;
38
+ exports.createMonitorServer = createMonitorServer;
39
+ const http = __importStar(require("http"));
40
+ const core_1 = require("@siglo/core");
41
+ const store_1 = require("./store");
42
+ const sse_1 = require("./transports/sse");
43
+ const websocket_1 = require("./transports/websocket");
44
+ const metrics_1 = require("./metrics");
45
+ const dashboard_1 = require("./ui/dashboard");
46
+ const activeServers = new Map();
47
+ function validInspectionEvent(event) {
48
+ if (event?.type !== 'step:inspection' && !(event?.type === 'ai:complete' && event.inspection))
49
+ return true;
50
+ return typeof event.stackId === 'string' && !!event.stackId && typeof event.stepId === 'string' && !!event.stepId
51
+ && Number.isSafeInteger(event.attempt) && event.attempt > 0
52
+ && Number.isFinite(event.timestamp) && event.timestamp >= 0 && !!(0, core_1.sanitizeInspection)(event.inspection)
53
+ && (event.type !== 'ai:complete' || event.inspection.kind === 'ai');
54
+ }
55
+ function safeJsonStringify(obj) {
56
+ const seen = new WeakSet();
57
+ return JSON.stringify(obj, (key, value) => {
58
+ if (key === 'step' && value && typeof value === 'object' && value.sequence) {
59
+ return undefined;
60
+ }
61
+ if (typeof value === 'object' && value !== null) {
62
+ if (seen.has(value)) {
63
+ return undefined;
64
+ }
65
+ seen.add(value);
66
+ }
67
+ return value;
68
+ });
69
+ }
70
+ function sanitizeRunRecord(run, redaction) {
71
+ if (!run)
72
+ return run;
73
+ return {
74
+ ...run,
75
+ steps: (0, core_1.redactValue)(run.steps, redaction),
76
+ context: (0, core_1.redactValue)(run.context, redaction),
77
+ contextDiffs: Array.isArray(run.contextDiffs)
78
+ ? run.contextDiffs.map((d) => ({ ...d, value: (0, core_1.redactValue)(d.value, redaction) }))
79
+ : run.contextDiffs,
80
+ events: Array.isArray(run.events)
81
+ ? run.events.map((ev) => (0, core_1.redactEvent)(ev, redaction))
82
+ : run.events
83
+ };
84
+ }
85
+ function validateResumePayload(flowCandidate, payload) {
86
+ if (!flowCandidate || !flowCandidate.resumeSchema) {
87
+ return { valid: true };
88
+ }
89
+ const schema = flowCandidate.resumeSchema;
90
+ if (typeof schema.safeParse === 'function') {
91
+ const res = schema.safeParse(payload);
92
+ if (!res.success) {
93
+ return { valid: false, error: res.error };
94
+ }
95
+ }
96
+ else if (typeof schema.validate === 'function') {
97
+ const res = schema.validate(payload);
98
+ if (res && res.error) {
99
+ return { valid: false, error: res.error };
100
+ }
101
+ }
102
+ else if (typeof schema === 'function') {
103
+ try {
104
+ const resValidation = schema(payload);
105
+ if (resValidation === false) {
106
+ return { valid: false, error: 'Validation failed' };
107
+ }
108
+ }
109
+ catch (e) {
110
+ return { valid: false, error: e?.message || String(e) };
111
+ }
112
+ }
113
+ return { valid: true };
114
+ }
115
+ function resolveTargetFlow(stackId, run, options, workflows) {
116
+ if (options.flow && !options.workflows) {
117
+ return options.flow;
118
+ }
119
+ const candidates = [
120
+ run?.flowName,
121
+ run?.workflowId,
122
+ stackId
123
+ ].filter(Boolean);
124
+ for (const key of candidates) {
125
+ if (workflows.has(key)) {
126
+ return workflows.get(key);
127
+ }
128
+ }
129
+ if (workflows.size === 1 && !options.workflows) {
130
+ return workflows.values().next().value;
131
+ }
132
+ return undefined;
133
+ }
134
+ /**
135
+ * Returns an active monitor server instance running in the current process.
136
+ * If a port is specified, returns the server on that port, otherwise returns the first active server.
137
+ */
138
+ function getActiveMonitorServer(port) {
139
+ if (port !== undefined) {
140
+ return activeServers.get(port);
141
+ }
142
+ const first = activeServers.values().next();
143
+ return first.done ? undefined : first.value;
144
+ }
145
+ /**
146
+ * Returns the WorkflowEventEmitter of the currently active monitor server in the process.
147
+ */
148
+ function getMonitorEmitter(port) {
149
+ return getActiveMonitorServer(port)?.emitter;
150
+ }
151
+ function createMonitorServer(options = {}) {
152
+ const port = options.port !== undefined ? options.port : 4000;
153
+ // Support reusing existing running server instance in the same process
154
+ if (options.reuseExisting) {
155
+ const existing = getActiveMonitorServer(port);
156
+ if (existing) {
157
+ return Promise.resolve(existing);
158
+ }
159
+ }
160
+ const host = options.host || '127.0.0.1';
161
+ const store = options.store || new store_1.WorkflowExecutionStore();
162
+ const workflows = options.workflows instanceof Map ? options.workflows : new Map();
163
+ if (options.flow) {
164
+ const flowId = options.flow.id || options.flow.name || options.flow.workflowId;
165
+ if (flowId) {
166
+ workflows.set(flowId, options.flow);
167
+ }
168
+ }
169
+ const emitter = options.emitter || new core_1.WorkflowEventEmitter(options.namespaceFilter);
170
+ // Normalize auth options
171
+ const authConfig = typeof options.auth === 'string'
172
+ ? { apiKey: options.auth }
173
+ : options.auth;
174
+ const allowRemoteResume = options.allowRemoteResume !== undefined ? options.allowRemoteResume : true;
175
+ const maxPayloadBytes = options.maxPayloadBytes && options.maxPayloadBytes > 0 ? options.maxPayloadBytes : 1048576; // 1 MB default
176
+ const extractToken = (req, url) => {
177
+ const authHeader = req.headers['authorization'];
178
+ if (authHeader) {
179
+ if (authHeader.startsWith('Bearer ')) {
180
+ return authHeader.slice(7).trim();
181
+ }
182
+ return authHeader.trim();
183
+ }
184
+ const apiKeyHeader = req.headers['x-api-key'];
185
+ if (typeof apiKeyHeader === 'string') {
186
+ return apiKeyHeader.trim();
187
+ }
188
+ // Support token in query parameter for browser SSE and WebSocket handshakes
189
+ const queryToken = url.searchParams.get('token') || url.searchParams.get('apiKey');
190
+ return queryToken || undefined;
191
+ };
192
+ const checkAuth = (req, url, scope) => {
193
+ if (!authConfig)
194
+ return true;
195
+ const token = extractToken(req, url);
196
+ if (!token)
197
+ return false;
198
+ if (authConfig.validator) {
199
+ return authConfig.validator(token, scope, req);
200
+ }
201
+ if (scope === 'ingest') {
202
+ return Boolean((authConfig.ingestionKey && token === authConfig.ingestionKey) ||
203
+ (authConfig.apiKey && token === authConfig.apiKey) ||
204
+ (authConfig.adminKey && token === authConfig.adminKey));
205
+ }
206
+ if (scope === 'control') {
207
+ return Boolean((authConfig.adminKey && token === authConfig.adminKey) ||
208
+ (authConfig.apiKey && token === authConfig.apiKey));
209
+ }
210
+ // 'read' scope
211
+ return Boolean((authConfig.apiKey && token === authConfig.apiKey) ||
212
+ (authConfig.adminKey && token === authConfig.adminKey) ||
213
+ (authConfig.ingestionKey && token === authConfig.ingestionKey));
214
+ };
215
+ const effectiveRedaction = {
216
+ redactKeys: [
217
+ ...(options.redaction?.redactKeys || []),
218
+ ...(options.security?.redactedKeys || [])
219
+ ],
220
+ redactHook: options.security?.maskFn || options.redaction?.redactHook
221
+ };
222
+ const sse = new sse_1.SSEBroadcaster({ redaction: effectiveRedaction });
223
+ const ws = new websocket_1.WebSocketBroadcaster({
224
+ redaction: effectiveRedaction,
225
+ allowRemoteResume,
226
+ maxPayloadBytes,
227
+ authorizeMessage: (message, req) => checkAuth(req, new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`), message.action === 'event' ? 'ingest' : message.action === 'resume' ? 'control' : 'read'),
228
+ authenticate: (req) => {
229
+ const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);
230
+ return checkAuth(req, url, 'read');
231
+ },
232
+ onClientMessage: (message, client) => {
233
+ if (message.action === 'event' && message.event) {
234
+ if (!validInspectionEvent(message.event))
235
+ return;
236
+ const event = (0, core_1.redactEvent)(message.event, effectiveRedaction);
237
+ emitter.emit(event);
238
+ }
239
+ else if (message.action === 'resume' && message.stackId && allowRemoteResume) {
240
+ const run = store.getRun(message.stackId);
241
+ const targetFlow = resolveTargetFlow(message.stackId, run, options, workflows);
242
+ if (!targetFlow) {
243
+ ws.send(client, { action: 'error', error: `Workflow definition not registered for '${message.stackId}'` });
244
+ return;
245
+ }
246
+ const validation = validateResumePayload(targetFlow, message.payload);
247
+ if (!validation.valid) {
248
+ ws.send(client, { action: 'error', error: 'Unprocessable Entity: Invalid resume payload', details: validation.error });
249
+ return;
250
+ }
251
+ (0, core_1.resumeWorkflow)(targetFlow, message.stackId, message.payload, { monitor: emitter }).catch((err) => {
252
+ ws.send(client, { action: 'error', error: err?.message || String(err) });
253
+ });
254
+ }
255
+ }
256
+ });
257
+ const metrics = new metrics_1.PrometheusExporter();
258
+ // Wire up events
259
+ emitter.on('*', (rawEvent) => {
260
+ const event = (0, core_1.redactEvent)(rawEvent, effectiveRedaction);
261
+ store.addEvent(event);
262
+ sse.broadcast(event);
263
+ ws.broadcast(event);
264
+ metrics.handleEvent(event);
265
+ });
266
+ const server = http.createServer((req, res) => {
267
+ const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);
268
+ const pathname = url.pathname;
269
+ // Apply CORS headers safely
270
+ applyCorsHeaders(req, res, options.cors);
271
+ if (req.method === 'OPTIONS') {
272
+ res.writeHead(204);
273
+ res.end();
274
+ return;
275
+ }
276
+ if (pathname === '/' || pathname === '/index.html') {
277
+ res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
278
+ res.end((0, dashboard_1.getDashboardHtml)());
279
+ return;
280
+ }
281
+ if (pathname === '/events' && req.method === 'GET') {
282
+ if (!checkAuth(req, url, 'read')) {
283
+ res.writeHead(401, { 'Content-Type': 'application/json' });
284
+ res.end(JSON.stringify({ error: 'Unauthorized: Valid monitor token required' }));
285
+ return;
286
+ }
287
+ const namespace = url.searchParams.get('namespace') || undefined;
288
+ sse.addClient(res, namespace);
289
+ return;
290
+ }
291
+ // Ingest telemetry events from external processes / clients
292
+ if ((pathname === '/api/events' || pathname === '/events') && req.method === 'POST') {
293
+ if (!checkAuth(req, url, 'ingest')) {
294
+ res.writeHead(401, { 'Content-Type': 'application/json' });
295
+ res.end(JSON.stringify({ error: 'Unauthorized: Valid ingestion token required' }));
296
+ return;
297
+ }
298
+ let body = '';
299
+ let bytesReceived = 0;
300
+ let aborted = false;
301
+ req.on('data', chunk => {
302
+ if (aborted)
303
+ return;
304
+ bytesReceived += chunk.length;
305
+ if (bytesReceived > maxPayloadBytes) {
306
+ aborted = true;
307
+ res.writeHead(413, { 'Content-Type': 'application/json' });
308
+ res.end(JSON.stringify({ error: `Payload Too Large: Exceeded ${maxPayloadBytes} bytes limit` }));
309
+ req.destroy();
310
+ return;
311
+ }
312
+ body += chunk;
313
+ });
314
+ req.on('end', () => {
315
+ if (aborted)
316
+ return;
317
+ try {
318
+ const parsed = JSON.parse(body);
319
+ const events = Array.isArray(parsed) ? parsed : [parsed];
320
+ if (!events.every(validInspectionEvent))
321
+ throw new Error('Invalid inspection event');
322
+ for (const ev of events) {
323
+ if (ev && ev.type && ev.stackId) {
324
+ emitter.emit((0, core_1.redactEvent)(ev, effectiveRedaction));
325
+ }
326
+ }
327
+ res.writeHead(202, { 'Content-Type': 'application/json' });
328
+ res.end(JSON.stringify({ ok: true, count: events.length }));
329
+ }
330
+ catch {
331
+ res.writeHead(400, { 'Content-Type': 'application/json' });
332
+ res.end(JSON.stringify({ error: 'Invalid JSON payload' }));
333
+ }
334
+ });
335
+ return;
336
+ }
337
+ if (pathname === '/metrics' && req.method === 'GET') {
338
+ if (!checkAuth(req, url, 'read')) {
339
+ res.writeHead(401, { 'Content-Type': 'application/json' });
340
+ res.end(JSON.stringify({ error: 'Unauthorized' }));
341
+ return;
342
+ }
343
+ res.writeHead(200, { 'Content-Type': 'text/plain; version=0.0.4; charset=utf-8' });
344
+ res.end(metrics.getMetricsAsText());
345
+ return;
346
+ }
347
+ if (pathname === '/api/workflows' && req.method === 'GET') {
348
+ if (!checkAuth(req, url, 'read')) {
349
+ res.writeHead(401, { 'Content-Type': 'application/json' });
350
+ res.end(JSON.stringify({ error: 'Unauthorized' }));
351
+ return;
352
+ }
353
+ const ns = url.searchParams.get('namespace') || undefined;
354
+ const status = url.searchParams.get('status') || undefined;
355
+ const runs = store.listRuns({ namespace: ns, status }).map((r) => sanitizeRunRecord(r, effectiveRedaction));
356
+ res.writeHead(200, { 'Content-Type': 'application/json' });
357
+ res.end(safeJsonStringify(runs));
358
+ return;
359
+ }
360
+ if (pathname.startsWith('/api/workflows/') && req.method === 'GET') {
361
+ if (!checkAuth(req, url, 'read')) {
362
+ res.writeHead(401, { 'Content-Type': 'application/json' });
363
+ res.end(JSON.stringify({ error: 'Unauthorized' }));
364
+ return;
365
+ }
366
+ const stackId = pathname.slice('/api/workflows/'.length);
367
+ const run = store.getRun(stackId);
368
+ if (!run) {
369
+ res.writeHead(404, { 'Content-Type': 'application/json' });
370
+ res.end(JSON.stringify({ error: 'Workflow execution not found' }));
371
+ return;
372
+ }
373
+ res.writeHead(200, { 'Content-Type': 'application/json' });
374
+ res.end(safeJsonStringify(sanitizeRunRecord(run, effectiveRedaction)));
375
+ return;
376
+ }
377
+ if (pathname.includes('/resume') && req.method === 'POST') {
378
+ if (!allowRemoteResume) {
379
+ res.writeHead(403, { 'Content-Type': 'application/json' });
380
+ res.end(JSON.stringify({ error: 'Forbidden: Remote workflow resumption is disabled on this server' }));
381
+ return;
382
+ }
383
+ if (!checkAuth(req, url, 'control')) {
384
+ res.writeHead(401, { 'Content-Type': 'application/json' });
385
+ res.end(JSON.stringify({ error: 'Unauthorized: Valid admin or control token required' }));
386
+ return;
387
+ }
388
+ const match = pathname.match(/^\/api\/workflows\/([^/]+)\/resume$/);
389
+ if (!match) {
390
+ res.writeHead(404, { 'Content-Type': 'application/json' });
391
+ res.end(JSON.stringify({ error: 'Not found' }));
392
+ return;
393
+ }
394
+ const stackId = match[1];
395
+ let body = '';
396
+ let bytesReceived = 0;
397
+ let aborted = false;
398
+ req.on('data', chunk => {
399
+ if (aborted)
400
+ return;
401
+ bytesReceived += chunk.length;
402
+ if (bytesReceived > maxPayloadBytes) {
403
+ aborted = true;
404
+ res.writeHead(413, { 'Content-Type': 'application/json' });
405
+ res.end(JSON.stringify({ error: `Payload Too Large: Exceeded ${maxPayloadBytes} bytes limit` }));
406
+ req.destroy();
407
+ return;
408
+ }
409
+ body += chunk;
410
+ });
411
+ req.on('end', async () => {
412
+ if (aborted)
413
+ return;
414
+ try {
415
+ const parsed = body ? JSON.parse(body) : {};
416
+ const run = store.getRun(stackId);
417
+ const targetFlow = resolveTargetFlow(stackId, run, options, workflows);
418
+ if (!targetFlow) {
419
+ res.writeHead(404, { 'Content-Type': 'application/json' });
420
+ res.end(JSON.stringify({ error: `Cannot resume workflow '${stackId}': workflow definition not registered on monitor server.` }));
421
+ return;
422
+ }
423
+ const validation = validateResumePayload(targetFlow, parsed.payload);
424
+ if (!validation.valid) {
425
+ res.writeHead(422, { 'Content-Type': 'application/json' });
426
+ res.end(JSON.stringify({ error: 'Unprocessable Entity: Invalid resume payload', details: validation.error }));
427
+ return;
428
+ }
429
+ await (0, core_1.resumeWorkflow)(targetFlow, stackId, parsed.payload, { monitor: emitter });
430
+ res.writeHead(200, { 'Content-Type': 'application/json' });
431
+ res.end(JSON.stringify({ ok: true, stackId }));
432
+ }
433
+ catch (err) {
434
+ res.writeHead(500, { 'Content-Type': 'application/json' });
435
+ res.end(JSON.stringify({ error: err?.message || String(err) }));
436
+ }
437
+ });
438
+ return;
439
+ }
440
+ if (pathname.includes('/replay') && req.method === 'POST') {
441
+ if (!allowRemoteResume) {
442
+ res.writeHead(403, { 'Content-Type': 'application/json' });
443
+ res.end(JSON.stringify({ error: 'Forbidden: Workflow replay is disabled on this server' }));
444
+ return;
445
+ }
446
+ if (!checkAuth(req, url, 'control')) {
447
+ res.writeHead(401, { 'Content-Type': 'application/json' });
448
+ res.end(JSON.stringify({ error: 'Unauthorized: Valid admin or control token required' }));
449
+ return;
450
+ }
451
+ const match = pathname.match(/^\/api\/workflows\/([^/]+)\/replay$/);
452
+ if (!match) {
453
+ res.writeHead(404, { 'Content-Type': 'application/json' });
454
+ res.end(JSON.stringify({ error: 'Not found' }));
455
+ return;
456
+ }
457
+ const stackId = match[1];
458
+ const run = store.getRun(stackId);
459
+ if (!run) {
460
+ res.writeHead(404, { 'Content-Type': 'application/json' });
461
+ res.end(JSON.stringify({ error: 'Run not found to replay' }));
462
+ return;
463
+ }
464
+ res.writeHead(200, { 'Content-Type': 'application/json' });
465
+ res.end(JSON.stringify({ ok: true, stackId, message: 'Replay scheduled' }));
466
+ return;
467
+ }
468
+ res.writeHead(404, { 'Content-Type': 'application/json' });
469
+ res.end(JSON.stringify({ error: 'Not found' }));
470
+ });
471
+ // Attach websocket transport
472
+ ws.attach(server);
473
+ return new Promise((resolve, reject) => {
474
+ server.on('error', (err) => {
475
+ reject(err);
476
+ });
477
+ server.listen(port, host, () => {
478
+ const actualPort = server.address()?.port || port;
479
+ const instance = {
480
+ server,
481
+ port: actualPort,
482
+ host,
483
+ emitter,
484
+ store,
485
+ workflows,
486
+ sse,
487
+ ws,
488
+ metrics,
489
+ close: async () => {
490
+ activeServers.delete(actualPort);
491
+ sse.close();
492
+ ws.close();
493
+ return new Promise((resClose) => {
494
+ server.close(() => resClose());
495
+ });
496
+ }
497
+ };
498
+ activeServers.set(actualPort, instance);
499
+ resolve(instance);
500
+ });
501
+ });
502
+ }
503
+ function applyCorsHeaders(req, res, cors) {
504
+ if (cors?.origin === false) {
505
+ return;
506
+ }
507
+ const requestOrigin = req.headers['origin'];
508
+ if (!cors || !cors.origin) {
509
+ if (cors?.credentials) {
510
+ if (requestOrigin && /^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?$/.test(requestOrigin)) {
511
+ res.setHeader('Access-Control-Allow-Origin', requestOrigin);
512
+ }
513
+ else {
514
+ res.setHeader('Access-Control-Allow-Origin', 'null');
515
+ }
516
+ }
517
+ else {
518
+ res.setHeader('Access-Control-Allow-Origin', requestOrigin || '*');
519
+ }
520
+ }
521
+ else if (typeof cors.origin === 'string') {
522
+ res.setHeader('Access-Control-Allow-Origin', cors.origin);
523
+ }
524
+ else if (Array.isArray(cors.origin)) {
525
+ if (requestOrigin && cors.origin.includes(requestOrigin)) {
526
+ res.setHeader('Access-Control-Allow-Origin', requestOrigin);
527
+ }
528
+ else {
529
+ res.setHeader('Access-Control-Allow-Origin', 'null');
530
+ }
531
+ }
532
+ else if (typeof cors.origin === 'function') {
533
+ if (requestOrigin && cors.origin(requestOrigin)) {
534
+ res.setHeader('Access-Control-Allow-Origin', requestOrigin);
535
+ }
536
+ else {
537
+ res.setHeader('Access-Control-Allow-Origin', 'null');
538
+ }
539
+ }
540
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
541
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-API-Key');
542
+ if (cors?.credentials) {
543
+ res.setHeader('Access-Control-Allow-Credentials', 'true');
544
+ }
545
+ }
546
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { WorkflowExecutionEvent, RedactionOptions } from '@siglo/core';
2
+ import { WorkflowRunRecord } from './types';
3
+ export declare class WorkflowExecutionStore {
4
+ private runs;
5
+ private maxRuns;
6
+ private maxEventsPerRun;
7
+ private maxDiffsPerRun;
8
+ private redaction?;
9
+ constructor(maxRuns?: number, maxEventsPerRun?: number, maxDiffsPerRun?: number, redaction?: RedactionOptions);
10
+ addEvent(event: WorkflowExecutionEvent): void;
11
+ private getOrCreateStep;
12
+ getRun(stackId: string): WorkflowRunRecord | undefined;
13
+ listRuns(filter?: {
14
+ namespace?: string;
15
+ status?: string;
16
+ }): WorkflowRunRecord[];
17
+ clear(): void;
18
+ }
19
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAe,gBAAgB,EAAsB,MAAM,aAAa,CAAC;AACxG,OAAO,EAAE,iBAAiB,EAAoC,MAAM,SAAS,CAAC;AAE9E,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,IAAI,CAA6C;IACzD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAmB;gBAEzB,OAAO,GAAE,MAAa,EAAE,eAAe,GAAE,MAAY,EAAE,cAAc,GAAE,MAAY,EAAE,SAAS,CAAC,EAAE,gBAAgB;IAO7H,QAAQ,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IAuI7C,OAAO,CAAC,eAAe;IAiBvB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAItD,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,iBAAiB,EAAE;IAW/E,KAAK,IAAI,IAAI;CAGhB"}