@generacy-ai/orchestrator 0.0.0-preview-20260304013206
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 +191 -0
- package/dist/auth/api-key.d.ts +63 -0
- package/dist/auth/api-key.d.ts.map +1 -0
- package/dist/auth/api-key.js +102 -0
- package/dist/auth/api-key.js.map +1 -0
- package/dist/auth/github-oauth.d.ts +29 -0
- package/dist/auth/github-oauth.d.ts.map +1 -0
- package/dist/auth/github-oauth.js +136 -0
- package/dist/auth/github-oauth.js.map +1 -0
- package/dist/auth/index.d.ts +5 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +9 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/jwt.d.ts +34 -0
- package/dist/auth/jwt.d.ts.map +1 -0
- package/dist/auth/jwt.js +74 -0
- package/dist/auth/jwt.js.map +1 -0
- package/dist/auth/middleware.d.ts +43 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +101 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +5 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +21 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +295 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +733 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +174 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +30 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +173 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/index.d.ts +4 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +4 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/rate-limit.d.ts +32 -0
- package/dist/middleware/rate-limit.d.ts.map +1 -0
- package/dist/middleware/rate-limit.js +92 -0
- package/dist/middleware/rate-limit.js.map +1 -0
- package/dist/middleware/request-logger.d.ts +31 -0
- package/dist/middleware/request-logger.d.ts.map +1 -0
- package/dist/middleware/request-logger.js +89 -0
- package/dist/middleware/request-logger.js.map +1 -0
- package/dist/routes/agents.d.ts +7 -0
- package/dist/routes/agents.d.ts.map +1 -0
- package/dist/routes/agents.js +78 -0
- package/dist/routes/agents.js.map +1 -0
- package/dist/routes/dispatch.d.ts +8 -0
- package/dist/routes/dispatch.d.ts.map +1 -0
- package/dist/routes/dispatch.js +46 -0
- package/dist/routes/dispatch.js.map +1 -0
- package/dist/routes/events.d.ts +14 -0
- package/dist/routes/events.d.ts.map +1 -0
- package/dist/routes/events.js +240 -0
- package/dist/routes/events.js.map +1 -0
- package/dist/routes/health.d.ts +14 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +132 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/index.d.ts +36 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +34 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/integrations.d.ts +34 -0
- package/dist/routes/integrations.d.ts.map +1 -0
- package/dist/routes/integrations.js +81 -0
- package/dist/routes/integrations.js.map +1 -0
- package/dist/routes/metrics.d.ts +31 -0
- package/dist/routes/metrics.d.ts.map +1 -0
- package/dist/routes/metrics.js +157 -0
- package/dist/routes/metrics.js.map +1 -0
- package/dist/routes/pr-webhooks.d.ts +15 -0
- package/dist/routes/pr-webhooks.d.ts.map +1 -0
- package/dist/routes/pr-webhooks.js +114 -0
- package/dist/routes/pr-webhooks.js.map +1 -0
- package/dist/routes/queue.d.ts +7 -0
- package/dist/routes/queue.d.ts.map +1 -0
- package/dist/routes/queue.js +94 -0
- package/dist/routes/queue.js.map +1 -0
- package/dist/routes/webhooks.d.ts +15 -0
- package/dist/routes/webhooks.d.ts.map +1 -0
- package/dist/routes/webhooks.js +117 -0
- package/dist/routes/webhooks.js.map +1 -0
- package/dist/routes/workflows.d.ts +7 -0
- package/dist/routes/workflows.d.ts.map +1 -0
- package/dist/routes/workflows.js +138 -0
- package/dist/routes/workflows.js.map +1 -0
- package/dist/server.d.ts +35 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +264 -0
- package/dist/server.js.map +1 -0
- package/dist/services/agent-registry.d.ts +89 -0
- package/dist/services/agent-registry.d.ts.map +1 -0
- package/dist/services/agent-registry.js +173 -0
- package/dist/services/agent-registry.js.map +1 -0
- package/dist/services/epic-completion-monitor-service.d.ts +69 -0
- package/dist/services/epic-completion-monitor-service.d.ts.map +1 -0
- package/dist/services/epic-completion-monitor-service.js +200 -0
- package/dist/services/epic-completion-monitor-service.js.map +1 -0
- package/dist/services/identity.d.ts +41 -0
- package/dist/services/identity.d.ts.map +1 -0
- package/dist/services/identity.js +91 -0
- package/dist/services/identity.js.map +1 -0
- package/dist/services/index.d.ts +13 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +13 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/label-monitor-service.d.ts +95 -0
- package/dist/services/label-monitor-service.d.ts.map +1 -0
- package/dist/services/label-monitor-service.js +414 -0
- package/dist/services/label-monitor-service.js.map +1 -0
- package/dist/services/label-sync-service.d.ts +76 -0
- package/dist/services/label-sync-service.d.ts.map +1 -0
- package/dist/services/label-sync-service.js +108 -0
- package/dist/services/label-sync-service.js.map +1 -0
- package/dist/services/phase-tracker-service.d.ts +32 -0
- package/dist/services/phase-tracker-service.d.ts.map +1 -0
- package/dist/services/phase-tracker-service.js +82 -0
- package/dist/services/phase-tracker-service.js.map +1 -0
- package/dist/services/pr-feedback-monitor-service.d.ts +86 -0
- package/dist/services/pr-feedback-monitor-service.d.ts.map +1 -0
- package/dist/services/pr-feedback-monitor-service.js +423 -0
- package/dist/services/pr-feedback-monitor-service.js.map +1 -0
- package/dist/services/queue-service.d.ts +62 -0
- package/dist/services/queue-service.d.ts.map +1 -0
- package/dist/services/queue-service.js +147 -0
- package/dist/services/queue-service.js.map +1 -0
- package/dist/services/redis-queue-adapter.d.ts +35 -0
- package/dist/services/redis-queue-adapter.d.ts.map +1 -0
- package/dist/services/redis-queue-adapter.js +218 -0
- package/dist/services/redis-queue-adapter.js.map +1 -0
- package/dist/services/smee-receiver.d.ts +87 -0
- package/dist/services/smee-receiver.d.ts.map +1 -0
- package/dist/services/smee-receiver.js +225 -0
- package/dist/services/smee-receiver.js.map +1 -0
- package/dist/services/webhook-setup-service.d.ts +253 -0
- package/dist/services/webhook-setup-service.d.ts.map +1 -0
- package/dist/services/webhook-setup-service.js +369 -0
- package/dist/services/webhook-setup-service.js.map +1 -0
- package/dist/services/worker-dispatcher.d.ts +57 -0
- package/dist/services/worker-dispatcher.d.ts.map +1 -0
- package/dist/services/worker-dispatcher.js +211 -0
- package/dist/services/worker-dispatcher.js.map +1 -0
- package/dist/services/workflow-service.d.ts +65 -0
- package/dist/services/workflow-service.d.ts.map +1 -0
- package/dist/services/workflow-service.js +164 -0
- package/dist/services/workflow-service.js.map +1 -0
- package/dist/sse/events.d.ts +50 -0
- package/dist/sse/events.d.ts.map +1 -0
- package/dist/sse/events.js +152 -0
- package/dist/sse/events.js.map +1 -0
- package/dist/sse/index.d.ts +4 -0
- package/dist/sse/index.d.ts.map +1 -0
- package/dist/sse/index.js +7 -0
- package/dist/sse/index.js.map +1 -0
- package/dist/sse/stream.d.ts +109 -0
- package/dist/sse/stream.d.ts.map +1 -0
- package/dist/sse/stream.js +239 -0
- package/dist/sse/stream.js.map +1 -0
- package/dist/sse/subscriptions.d.ts +91 -0
- package/dist/sse/subscriptions.d.ts.map +1 -0
- package/dist/sse/subscriptions.js +299 -0
- package/dist/sse/subscriptions.js.map +1 -0
- package/dist/types/api.d.ts +651 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +169 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +27 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/monitor.d.ts +243 -0
- package/dist/types/monitor.d.ts.map +1 -0
- package/dist/types/monitor.js +2 -0
- package/dist/types/monitor.js.map +1 -0
- package/dist/types/problem-details.d.ts +63 -0
- package/dist/types/problem-details.d.ts.map +1 -0
- package/dist/types/problem-details.js +37 -0
- package/dist/types/problem-details.js.map +1 -0
- package/dist/types/sse.d.ts +224 -0
- package/dist/types/sse.d.ts.map +1 -0
- package/dist/types/sse.js +103 -0
- package/dist/types/sse.js.map +1 -0
- package/dist/types/webhook.d.ts +59 -0
- package/dist/types/webhook.d.ts.map +1 -0
- package/dist/types/webhook.js +2 -0
- package/dist/types/webhook.js.map +1 -0
- package/dist/utils/correlation.d.ts +30 -0
- package/dist/utils/correlation.d.ts.map +1 -0
- package/dist/utils/correlation.js +34 -0
- package/dist/utils/correlation.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/shutdown.d.ts +28 -0
- package/dist/utils/shutdown.d.ts.map +1 -0
- package/dist/utils/shutdown.js +86 -0
- package/dist/utils/shutdown.js.map +1 -0
- package/dist/worker/claude-cli-worker.d.ts +61 -0
- package/dist/worker/claude-cli-worker.d.ts.map +1 -0
- package/dist/worker/claude-cli-worker.js +330 -0
- package/dist/worker/claude-cli-worker.js.map +1 -0
- package/dist/worker/cli-spawner.d.ts +42 -0
- package/dist/worker/cli-spawner.d.ts.map +1 -0
- package/dist/worker/cli-spawner.js +183 -0
- package/dist/worker/cli-spawner.js.map +1 -0
- package/dist/worker/config.d.ts +76 -0
- package/dist/worker/config.d.ts.map +1 -0
- package/dist/worker/config.js +39 -0
- package/dist/worker/config.js.map +1 -0
- package/dist/worker/epic-post-tasks.d.ts +73 -0
- package/dist/worker/epic-post-tasks.d.ts.map +1 -0
- package/dist/worker/epic-post-tasks.js +266 -0
- package/dist/worker/epic-post-tasks.js.map +1 -0
- package/dist/worker/gate-checker.d.ts +22 -0
- package/dist/worker/gate-checker.d.ts.map +1 -0
- package/dist/worker/gate-checker.js +41 -0
- package/dist/worker/gate-checker.js.map +1 -0
- package/dist/worker/index.d.ts +13 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +19 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker/label-manager.d.ts +89 -0
- package/dist/worker/label-manager.d.ts.map +1 -0
- package/dist/worker/label-manager.js +200 -0
- package/dist/worker/label-manager.js.map +1 -0
- package/dist/worker/output-capture.d.ts +58 -0
- package/dist/worker/output-capture.d.ts.map +1 -0
- package/dist/worker/output-capture.js +153 -0
- package/dist/worker/output-capture.js.map +1 -0
- package/dist/worker/phase-loop.d.ts +64 -0
- package/dist/worker/phase-loop.d.ts.map +1 -0
- package/dist/worker/phase-loop.js +185 -0
- package/dist/worker/phase-loop.js.map +1 -0
- package/dist/worker/phase-resolver.d.ts +62 -0
- package/dist/worker/phase-resolver.d.ts.map +1 -0
- package/dist/worker/phase-resolver.js +144 -0
- package/dist/worker/phase-resolver.js.map +1 -0
- package/dist/worker/pr-feedback-handler.d.ts +105 -0
- package/dist/worker/pr-feedback-handler.d.ts.map +1 -0
- package/dist/worker/pr-feedback-handler.js +391 -0
- package/dist/worker/pr-feedback-handler.js.map +1 -0
- package/dist/worker/pr-linker.d.ts +69 -0
- package/dist/worker/pr-linker.d.ts.map +1 -0
- package/dist/worker/pr-linker.js +108 -0
- package/dist/worker/pr-linker.js.map +1 -0
- package/dist/worker/pr-manager.d.ts +61 -0
- package/dist/worker/pr-manager.d.ts.map +1 -0
- package/dist/worker/pr-manager.js +140 -0
- package/dist/worker/pr-manager.js.map +1 -0
- package/dist/worker/repo-checkout.d.ts +63 -0
- package/dist/worker/repo-checkout.d.ts.map +1 -0
- package/dist/worker/repo-checkout.js +160 -0
- package/dist/worker/repo-checkout.js.map +1 -0
- package/dist/worker/stage-comment-manager.d.ts +34 -0
- package/dist/worker/stage-comment-manager.d.ts.map +1 -0
- package/dist/worker/stage-comment-manager.js +114 -0
- package/dist/worker/stage-comment-manager.js.map +1 -0
- package/dist/worker/types.d.ts +192 -0
- package/dist/worker/types.d.ts.map +1 -0
- package/dist/worker/types.js +53 -0
- package/dist/worker/types.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { FastifyRequest, FastifyReply, HookHandlerDoneFunction } from 'fastify';
|
|
2
|
+
/**
|
|
3
|
+
* Request start time symbol
|
|
4
|
+
*/
|
|
5
|
+
declare const REQUEST_START_TIME: unique symbol;
|
|
6
|
+
/**
|
|
7
|
+
* Augment FastifyRequest with start time
|
|
8
|
+
*/
|
|
9
|
+
declare module 'fastify' {
|
|
10
|
+
interface FastifyRequest {
|
|
11
|
+
[REQUEST_START_TIME]?: bigint;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Log request start
|
|
16
|
+
*/
|
|
17
|
+
export declare function requestStartHook(request: FastifyRequest, _reply: FastifyReply, done: HookHandlerDoneFunction): void;
|
|
18
|
+
/**
|
|
19
|
+
* Log request completion
|
|
20
|
+
*/
|
|
21
|
+
export declare function requestEndHook(request: FastifyRequest, reply: FastifyReply, done: HookHandlerDoneFunction): void;
|
|
22
|
+
/**
|
|
23
|
+
* Log request errors
|
|
24
|
+
*/
|
|
25
|
+
export declare function requestErrorHook(request: FastifyRequest, _reply: FastifyReply, error: Error, done: HookHandlerDoneFunction): void;
|
|
26
|
+
/**
|
|
27
|
+
* Sanitize URL for logging (remove sensitive query params)
|
|
28
|
+
*/
|
|
29
|
+
export declare function sanitizeUrl(url: string): string;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=request-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-logger.d.ts","sourceRoot":"","sources":["../../src/middleware/request-logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAErF;;GAEG;AACH,QAAA,MAAM,kBAAkB,eAA6B,CAAC;AAEtD;;GAEG;AACH,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,cAAc;QACtB,CAAC,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC;KAC/B;CACF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,uBAAuB,GAC5B,IAAI,CAYN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,uBAAuB,GAC5B,IAAI,CA2BN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,uBAAuB,GAC5B,IAAI,CAsBN;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAe/C"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request start time symbol
|
|
3
|
+
*/
|
|
4
|
+
const REQUEST_START_TIME = Symbol('requestStartTime');
|
|
5
|
+
/**
|
|
6
|
+
* Log request start
|
|
7
|
+
*/
|
|
8
|
+
export function requestStartHook(request, _reply, done) {
|
|
9
|
+
request[REQUEST_START_TIME] = process.hrtime.bigint();
|
|
10
|
+
request.log.info({
|
|
11
|
+
correlationId: request.correlationId,
|
|
12
|
+
method: request.method,
|
|
13
|
+
url: request.url,
|
|
14
|
+
userAgent: request.headers['user-agent'],
|
|
15
|
+
ip: request.ip,
|
|
16
|
+
}, 'Request started');
|
|
17
|
+
done();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Log request completion
|
|
21
|
+
*/
|
|
22
|
+
export function requestEndHook(request, reply, done) {
|
|
23
|
+
const startTime = request[REQUEST_START_TIME];
|
|
24
|
+
let durationMs = 0;
|
|
25
|
+
if (startTime) {
|
|
26
|
+
const endTime = process.hrtime.bigint();
|
|
27
|
+
durationMs = Number(endTime - startTime) / 1_000_000;
|
|
28
|
+
}
|
|
29
|
+
const logData = {
|
|
30
|
+
correlationId: request.correlationId,
|
|
31
|
+
method: request.method,
|
|
32
|
+
url: request.url,
|
|
33
|
+
statusCode: reply.statusCode,
|
|
34
|
+
durationMs: Math.round(durationMs * 100) / 100,
|
|
35
|
+
userId: request.auth?.userId,
|
|
36
|
+
};
|
|
37
|
+
if (reply.statusCode >= 500) {
|
|
38
|
+
request.log.error(logData, 'Request completed with server error');
|
|
39
|
+
}
|
|
40
|
+
else if (reply.statusCode >= 400) {
|
|
41
|
+
request.log.warn(logData, 'Request completed with client error');
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
request.log.info(logData, 'Request completed');
|
|
45
|
+
}
|
|
46
|
+
done();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Log request errors
|
|
50
|
+
*/
|
|
51
|
+
export function requestErrorHook(request, _reply, error, done) {
|
|
52
|
+
const startTime = request[REQUEST_START_TIME];
|
|
53
|
+
let durationMs = 0;
|
|
54
|
+
if (startTime) {
|
|
55
|
+
const endTime = process.hrtime.bigint();
|
|
56
|
+
durationMs = Number(endTime - startTime) / 1_000_000;
|
|
57
|
+
}
|
|
58
|
+
request.log.error({
|
|
59
|
+
correlationId: request.correlationId,
|
|
60
|
+
method: request.method,
|
|
61
|
+
url: request.url,
|
|
62
|
+
durationMs: Math.round(durationMs * 100) / 100,
|
|
63
|
+
error: {
|
|
64
|
+
message: error.message,
|
|
65
|
+
name: error.name,
|
|
66
|
+
stack: error.stack,
|
|
67
|
+
},
|
|
68
|
+
}, 'Request error');
|
|
69
|
+
done();
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Sanitize URL for logging (remove sensitive query params)
|
|
73
|
+
*/
|
|
74
|
+
export function sanitizeUrl(url) {
|
|
75
|
+
try {
|
|
76
|
+
const parsed = new URL(url, 'http://localhost');
|
|
77
|
+
const sensitiveParams = ['token', 'api_key', 'apikey', 'secret', 'password', 'code'];
|
|
78
|
+
for (const param of sensitiveParams) {
|
|
79
|
+
if (parsed.searchParams.has(param)) {
|
|
80
|
+
parsed.searchParams.set(param, '[REDACTED]');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return parsed.pathname + parsed.search;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return url;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=request-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-logger.js","sourceRoot":"","sources":["../../src/middleware/request-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FastifyInstance } from 'fastify';
|
|
2
|
+
import { AgentRegistry } from '../services/agent-registry.js';
|
|
3
|
+
/**
|
|
4
|
+
* Setup agent routes
|
|
5
|
+
*/
|
|
6
|
+
export declare function setupAgentRoutes(server: FastifyInstance, agentRegistry: AgentRegistry): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAG9D;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,IAAI,CAAC,CA4Ff"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { requireRead } from '../auth/middleware.js';
|
|
2
|
+
/**
|
|
3
|
+
* Setup agent routes
|
|
4
|
+
*/
|
|
5
|
+
export async function setupAgentRoutes(server, agentRegistry) {
|
|
6
|
+
// GET /agents - List connected agents
|
|
7
|
+
server.get('/agents', {
|
|
8
|
+
preHandler: [requireRead('agents')],
|
|
9
|
+
schema: {
|
|
10
|
+
description: 'List connected agents',
|
|
11
|
+
tags: ['Agents'],
|
|
12
|
+
querystring: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: {
|
|
15
|
+
status: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
enum: ['connected', 'idle', 'busy', 'disconnected'],
|
|
18
|
+
},
|
|
19
|
+
type: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
enum: ['claude', 'gpt4', 'custom'],
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
}, async (request, reply) => {
|
|
27
|
+
const query = request.query;
|
|
28
|
+
let agents = agentRegistry.list();
|
|
29
|
+
// Filter by status
|
|
30
|
+
if (query.status) {
|
|
31
|
+
agents = agents.filter((a) => a.status === query.status);
|
|
32
|
+
}
|
|
33
|
+
// Filter by type
|
|
34
|
+
if (query.type) {
|
|
35
|
+
agents = agents.filter((a) => a.type === query.type);
|
|
36
|
+
}
|
|
37
|
+
return reply.send(agents);
|
|
38
|
+
});
|
|
39
|
+
// GET /agents/:id - Get agent details
|
|
40
|
+
server.get('/agents/:id', {
|
|
41
|
+
preHandler: [requireRead('agents')],
|
|
42
|
+
schema: {
|
|
43
|
+
description: 'Get agent details',
|
|
44
|
+
tags: ['Agents'],
|
|
45
|
+
params: {
|
|
46
|
+
type: 'object',
|
|
47
|
+
properties: {
|
|
48
|
+
id: { type: 'string' },
|
|
49
|
+
},
|
|
50
|
+
required: ['id'],
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
}, async (request, reply) => {
|
|
54
|
+
const params = request.params;
|
|
55
|
+
const agent = agentRegistry.get(params.id);
|
|
56
|
+
if (!agent) {
|
|
57
|
+
return reply.status(404).send({
|
|
58
|
+
type: 'urn:generacy:error:not-found',
|
|
59
|
+
title: 'Not Found',
|
|
60
|
+
status: 404,
|
|
61
|
+
detail: `Agent ${params.id} not found`,
|
|
62
|
+
traceId: request.correlationId,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return reply.send(agent);
|
|
66
|
+
});
|
|
67
|
+
// GET /agents/stats - Get agent statistics
|
|
68
|
+
server.get('/agents/stats', {
|
|
69
|
+
preHandler: [requireRead('agents')],
|
|
70
|
+
}, async (_request, reply) => {
|
|
71
|
+
const stats = agentRegistry.getStats();
|
|
72
|
+
return reply.send({
|
|
73
|
+
total: agentRegistry.size(),
|
|
74
|
+
byStatus: stats,
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FastifyInstance } from 'fastify';
|
|
2
|
+
import type { QueueManager } from '../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Setup dispatch queue routes for monitoring queue status.
|
|
5
|
+
* Separate from the decision queue routes (/queue).
|
|
6
|
+
*/
|
|
7
|
+
export declare function setupDispatchRoutes(server: FastifyInstance, queueManager: QueueManager): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=dispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/routes/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAE7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAQtD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,IAAI,CAAC,CAgDf"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { requireRead } from '../auth/middleware.js';
|
|
3
|
+
const QueueItemsQuerySchema = z.object({
|
|
4
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
5
|
+
limit: z.coerce.number().int().min(1).max(100).default(10),
|
|
6
|
+
});
|
|
7
|
+
/**
|
|
8
|
+
* Setup dispatch queue routes for monitoring queue status.
|
|
9
|
+
* Separate from the decision queue routes (/queue).
|
|
10
|
+
*/
|
|
11
|
+
export async function setupDispatchRoutes(server, queueManager) {
|
|
12
|
+
// GET /dispatch/queue/depth
|
|
13
|
+
server.get('/dispatch/queue/depth', {
|
|
14
|
+
preHandler: [requireRead('queue')],
|
|
15
|
+
schema: {},
|
|
16
|
+
}, async (_request, reply) => {
|
|
17
|
+
const depth = await queueManager.getQueueDepth();
|
|
18
|
+
return reply.send({ depth });
|
|
19
|
+
});
|
|
20
|
+
// GET /dispatch/queue/items
|
|
21
|
+
server.get('/dispatch/queue/items', {
|
|
22
|
+
preHandler: [requireRead('queue')],
|
|
23
|
+
schema: {
|
|
24
|
+
querystring: {
|
|
25
|
+
type: 'object',
|
|
26
|
+
properties: {
|
|
27
|
+
offset: { type: 'number', default: 0 },
|
|
28
|
+
limit: { type: 'number', default: 10 },
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
}, async (request, reply) => {
|
|
33
|
+
const query = QueueItemsQuerySchema.parse(request.query);
|
|
34
|
+
const items = await queueManager.getQueueItems(query.offset, query.limit);
|
|
35
|
+
return reply.send({ items, offset: query.offset, limit: query.limit });
|
|
36
|
+
});
|
|
37
|
+
// GET /dispatch/queue/workers
|
|
38
|
+
server.get('/dispatch/queue/workers', {
|
|
39
|
+
preHandler: [requireRead('queue')],
|
|
40
|
+
schema: {},
|
|
41
|
+
}, async (_request, reply) => {
|
|
42
|
+
const count = await queueManager.getActiveWorkerCount();
|
|
43
|
+
return reply.send({ count });
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/routes/dispatch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACjD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC3D,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAuB,EACvB,YAA0B;IAE1B,4BAA4B;IAC5B,MAAM,CAAC,GAAG,CACR,uBAAuB,EACvB;QACE,UAAU,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,EAAE,EAAE;KACX,EACD,KAAK,EAAE,QAAwB,EAAE,KAAmB,EAAE,EAAE;QACtD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,aAAa,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/B,CAAC,CACF,CAAC;IAEF,4BAA4B;IAC5B,MAAM,CAAC,GAAG,CACR,uBAAuB,EACvB;QACE,UAAU,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,EAAE;YACN,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;oBACtC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;iBACvC;aACF;SACF;KACF,EACD,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAE,EAAE;QACrD,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1E,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC,CACF,CAAC;IAEF,8BAA8B;IAC9B,MAAM,CAAC,GAAG,CACR,yBAAyB,EACzB;QACE,UAAU,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,EAAE,EAAE;KACX,EACD,KAAK,EAAE,QAAwB,EAAE,KAAmB,EAAE,EAAE;QACtD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,oBAAoB,EAAE,CAAC;QACxD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/B,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { FastifyInstance } from 'fastify';
|
|
2
|
+
/**
|
|
3
|
+
* Get active connection count
|
|
4
|
+
*/
|
|
5
|
+
export declare function getActiveConnectionCount(): number;
|
|
6
|
+
/**
|
|
7
|
+
* Close all active SSE connections (for graceful shutdown)
|
|
8
|
+
*/
|
|
9
|
+
export declare function closeAllSSEConnections(): void;
|
|
10
|
+
/**
|
|
11
|
+
* Setup SSE event routes
|
|
12
|
+
*/
|
|
13
|
+
export declare function setupEventsRoutes(server: FastifyInstance): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/routes/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAe7E;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAI7C;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAwH9E"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { SSEQuerySchema, parseChannels } from '../types/sse.js';
|
|
3
|
+
import { createSSEStream, parseLastEventId } from '../sse/stream.js';
|
|
4
|
+
import { getSSESubscriptionManager, } from '../sse/subscriptions.js';
|
|
5
|
+
import { requireRead } from '../auth/middleware.js';
|
|
6
|
+
/**
|
|
7
|
+
* SSE connection tracking for graceful shutdown
|
|
8
|
+
*/
|
|
9
|
+
const activeConnections = new Set();
|
|
10
|
+
/**
|
|
11
|
+
* Get active connection count
|
|
12
|
+
*/
|
|
13
|
+
export function getActiveConnectionCount() {
|
|
14
|
+
return activeConnections.size;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Close all active SSE connections (for graceful shutdown)
|
|
18
|
+
*/
|
|
19
|
+
export function closeAllSSEConnections() {
|
|
20
|
+
const manager = getSSESubscriptionManager();
|
|
21
|
+
manager.closeAll();
|
|
22
|
+
activeConnections.clear();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Setup SSE event routes
|
|
26
|
+
*/
|
|
27
|
+
export async function setupEventsRoutes(server) {
|
|
28
|
+
const subscriptionManager = getSSESubscriptionManager();
|
|
29
|
+
// GET /events - Global event stream (all channels)
|
|
30
|
+
server.get('/events', {
|
|
31
|
+
preHandler: [requireRead('workflows')],
|
|
32
|
+
schema: {
|
|
33
|
+
description: 'Subscribe to real-time events via Server-Sent Events',
|
|
34
|
+
tags: ['Events'],
|
|
35
|
+
querystring: {
|
|
36
|
+
type: 'object',
|
|
37
|
+
properties: {
|
|
38
|
+
channels: {
|
|
39
|
+
type: 'string',
|
|
40
|
+
description: 'Comma-separated list of channels (workflows, queue, agents)',
|
|
41
|
+
},
|
|
42
|
+
workflowId: {
|
|
43
|
+
type: 'string',
|
|
44
|
+
format: 'uuid',
|
|
45
|
+
description: 'Filter events to specific workflow',
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
headers: {
|
|
50
|
+
type: 'object',
|
|
51
|
+
properties: {
|
|
52
|
+
'last-event-id': {
|
|
53
|
+
type: 'string',
|
|
54
|
+
description: 'Resume from last event ID (for reconnection)',
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
response: {
|
|
59
|
+
200: {
|
|
60
|
+
type: 'string',
|
|
61
|
+
description: 'SSE event stream',
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
}, async (request, reply) => {
|
|
66
|
+
return handleSSEConnection(request, reply, subscriptionManager);
|
|
67
|
+
});
|
|
68
|
+
// GET /workflows/:id/events - Workflow-specific event stream
|
|
69
|
+
server.get('/workflows/:id/events', {
|
|
70
|
+
preHandler: [requireRead('workflows')],
|
|
71
|
+
schema: {
|
|
72
|
+
description: 'Subscribe to events for a specific workflow',
|
|
73
|
+
tags: ['Events', 'Workflows'],
|
|
74
|
+
params: {
|
|
75
|
+
type: 'object',
|
|
76
|
+
properties: {
|
|
77
|
+
id: { type: 'string', format: 'uuid' },
|
|
78
|
+
},
|
|
79
|
+
required: ['id'],
|
|
80
|
+
},
|
|
81
|
+
headers: {
|
|
82
|
+
type: 'object',
|
|
83
|
+
properties: {
|
|
84
|
+
'last-event-id': {
|
|
85
|
+
type: 'string',
|
|
86
|
+
description: 'Resume from last event ID',
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
response: {
|
|
91
|
+
200: {
|
|
92
|
+
type: 'string',
|
|
93
|
+
description: 'SSE event stream',
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
}, async (request, reply) => {
|
|
98
|
+
const params = z.object({ id: z.string().uuid() }).parse(request.params);
|
|
99
|
+
return handleSSEConnection(request, reply, subscriptionManager, {
|
|
100
|
+
channels: ['workflows'],
|
|
101
|
+
filters: { workflowId: params.id },
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
// GET /queue/events - Queue event stream
|
|
105
|
+
server.get('/queue/events', {
|
|
106
|
+
preHandler: [requireRead('queue')],
|
|
107
|
+
schema: {
|
|
108
|
+
description: 'Subscribe to queue update events',
|
|
109
|
+
tags: ['Events', 'Queue'],
|
|
110
|
+
headers: {
|
|
111
|
+
type: 'object',
|
|
112
|
+
properties: {
|
|
113
|
+
'last-event-id': {
|
|
114
|
+
type: 'string',
|
|
115
|
+
description: 'Resume from last event ID',
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
response: {
|
|
120
|
+
200: {
|
|
121
|
+
type: 'string',
|
|
122
|
+
description: 'SSE event stream',
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
}, async (request, reply) => {
|
|
127
|
+
return handleSSEConnection(request, reply, subscriptionManager, {
|
|
128
|
+
channels: ['queue'],
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Handle SSE connection setup and management
|
|
134
|
+
*/
|
|
135
|
+
async function handleSSEConnection(request, reply, subscriptionManager, overrides) {
|
|
136
|
+
// Validate auth
|
|
137
|
+
if (!request.auth || request.auth.userId === 'anonymous') {
|
|
138
|
+
return reply.status(401).send({
|
|
139
|
+
type: 'https://api.generacy.ai/problems/unauthorized',
|
|
140
|
+
title: 'Unauthorized',
|
|
141
|
+
status: 401,
|
|
142
|
+
detail: 'SSE connections require authentication',
|
|
143
|
+
traceId: request.correlationId,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
// Parse query parameters
|
|
147
|
+
const query = SSEQuerySchema.safeParse(request.query);
|
|
148
|
+
if (!query.success) {
|
|
149
|
+
return reply.status(400).send({
|
|
150
|
+
type: 'https://api.generacy.ai/problems/validation-error',
|
|
151
|
+
title: 'Validation Error',
|
|
152
|
+
status: 400,
|
|
153
|
+
detail: 'Invalid query parameters',
|
|
154
|
+
errors: query.error.errors,
|
|
155
|
+
traceId: request.correlationId,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
// Determine channels and filters
|
|
159
|
+
const channels = overrides?.channels || parseChannels(query.data.channels);
|
|
160
|
+
const filters = overrides?.filters || { workflowId: query.data.workflowId };
|
|
161
|
+
// Parse Last-Event-ID for reconnection
|
|
162
|
+
const lastEventId = parseLastEventId(request);
|
|
163
|
+
// Check connection limits
|
|
164
|
+
const userConnections = subscriptionManager.getUserConnections(request.auth.userId);
|
|
165
|
+
if (userConnections.length >= 3) {
|
|
166
|
+
return reply.status(429).send({
|
|
167
|
+
type: 'https://api.generacy.ai/problems/rate-limit',
|
|
168
|
+
title: 'Too Many Connections',
|
|
169
|
+
status: 429,
|
|
170
|
+
detail: 'Maximum of 3 concurrent SSE connections per user',
|
|
171
|
+
traceId: request.correlationId,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
// Create SSE stream
|
|
175
|
+
const stream = createSSEStream(reply, request, request.auth.userId, {
|
|
176
|
+
channels,
|
|
177
|
+
filters,
|
|
178
|
+
lastEventId: lastEventId
|
|
179
|
+
? `${lastEventId.timestamp}_${lastEventId.connectionId}_${lastEventId.sequence}`
|
|
180
|
+
: undefined,
|
|
181
|
+
});
|
|
182
|
+
// Try to add connection
|
|
183
|
+
if (!subscriptionManager.addConnection(stream)) {
|
|
184
|
+
stream.close();
|
|
185
|
+
return reply.status(429).send({
|
|
186
|
+
type: 'https://api.generacy.ai/problems/rate-limit',
|
|
187
|
+
title: 'Too Many Connections',
|
|
188
|
+
status: 429,
|
|
189
|
+
detail: 'Connection limit exceeded',
|
|
190
|
+
traceId: request.correlationId,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
// Track connection
|
|
194
|
+
activeConnections.add(stream.id);
|
|
195
|
+
// Log connection
|
|
196
|
+
request.log.info({
|
|
197
|
+
connectionId: stream.id,
|
|
198
|
+
userId: request.auth.userId,
|
|
199
|
+
channels,
|
|
200
|
+
filters,
|
|
201
|
+
correlationId: request.correlationId,
|
|
202
|
+
}, 'SSE connection established');
|
|
203
|
+
// Start the stream
|
|
204
|
+
stream.start();
|
|
205
|
+
// Replay missed events if reconnecting
|
|
206
|
+
if (lastEventId) {
|
|
207
|
+
const replayedCount = subscriptionManager.replayMissedEvents(stream);
|
|
208
|
+
if (replayedCount > 0) {
|
|
209
|
+
request.log.info({
|
|
210
|
+
connectionId: stream.id,
|
|
211
|
+
replayedCount,
|
|
212
|
+
lastEventId: `${lastEventId.timestamp}_${lastEventId.connectionId}_${lastEventId.sequence}`,
|
|
213
|
+
}, 'Replayed missed events');
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Handle client disconnect
|
|
217
|
+
request.raw.on('close', () => {
|
|
218
|
+
request.log.info({
|
|
219
|
+
connectionId: stream.id,
|
|
220
|
+
userId: request.auth.userId,
|
|
221
|
+
correlationId: request.correlationId,
|
|
222
|
+
}, 'SSE connection closed');
|
|
223
|
+
subscriptionManager.removeConnection(stream.id);
|
|
224
|
+
activeConnections.delete(stream.id);
|
|
225
|
+
});
|
|
226
|
+
// Handle errors
|
|
227
|
+
request.raw.on('error', (error) => {
|
|
228
|
+
request.log.error({
|
|
229
|
+
err: error,
|
|
230
|
+
connectionId: stream.id,
|
|
231
|
+
userId: request.auth.userId,
|
|
232
|
+
correlationId: request.correlationId,
|
|
233
|
+
}, 'SSE connection error');
|
|
234
|
+
subscriptionManager.removeConnection(stream.id);
|
|
235
|
+
activeConnections.delete(stream.id);
|
|
236
|
+
});
|
|
237
|
+
// Prevent Fastify from sending a response (we're handling it manually)
|
|
238
|
+
reply.hijack();
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/routes/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { FastifyInstance } from 'fastify';
|
|
2
|
+
import type { ServiceStatus } from '../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Health check options
|
|
5
|
+
*/
|
|
6
|
+
export interface HealthCheckOptions {
|
|
7
|
+
/** Custom health checks for services */
|
|
8
|
+
checks?: Record<string, () => Promise<ServiceStatus>>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Setup health routes
|
|
12
|
+
*/
|
|
13
|
+
export declare function setupHealthRoutes(server: FastifyInstance, options?: HealthCheckOptions): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAC7E,OAAO,KAAK,EAAgC,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAErF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;CACvD;AASD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,eAAe,EACvB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CA2If"}
|