@auto-engineer/cli 0.13.3 → 0.15.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 (158) hide show
  1. package/CHANGELOG.md +9 -863
  2. package/README.md +161 -203
  3. package/dist/bin/auto.js +4 -4
  4. package/dist/bin/auto.js.map +1 -1
  5. package/dist/src/config-loader.d.ts +12 -0
  6. package/dist/src/config-loader.d.ts.map +1 -0
  7. package/dist/src/config-loader.js +24 -0
  8. package/dist/src/config-loader.js.map +1 -0
  9. package/dist/src/file-syncer/crypto/jwe-encryptor.d.ts.map +1 -0
  10. package/dist/src/{server/file-syncer → file-syncer}/crypto/jwe-encryptor.js +1 -1
  11. package/dist/src/file-syncer/crypto/jwe-encryptor.js.map +1 -0
  12. package/dist/src/file-syncer/crypto/provider-resolver.d.ts.map +1 -0
  13. package/dist/src/{server/file-syncer → file-syncer}/crypto/provider-resolver.js +2 -2
  14. package/dist/src/file-syncer/crypto/provider-resolver.js.map +1 -0
  15. package/dist/src/file-syncer/discovery/bareImports.d.ts +3 -0
  16. package/dist/src/file-syncer/discovery/bareImports.d.ts.map +1 -0
  17. package/dist/src/file-syncer/discovery/bareImports.js.map +1 -0
  18. package/dist/src/{server/file-syncer → file-syncer}/discovery/dts.d.ts +1 -1
  19. package/dist/src/file-syncer/discovery/dts.d.ts.map +1 -0
  20. package/dist/src/file-syncer/discovery/dts.js.map +1 -0
  21. package/dist/src/file-syncer/index.d.ts.map +1 -0
  22. package/dist/src/{server/file-syncer → file-syncer}/index.js +6 -6
  23. package/dist/src/file-syncer/index.js.map +1 -0
  24. package/dist/src/{server/file-syncer → file-syncer}/sync/resolveSyncFileSet.d.ts +1 -1
  25. package/dist/src/file-syncer/sync/resolveSyncFileSet.d.ts.map +1 -0
  26. package/dist/src/{server/file-syncer → file-syncer}/sync/resolveSyncFileSet.js +2 -2
  27. package/dist/src/file-syncer/sync/resolveSyncFileSet.js.map +1 -0
  28. package/dist/src/file-syncer/types/wire.d.ts.map +1 -0
  29. package/dist/src/file-syncer/types/wire.js.map +1 -0
  30. package/dist/src/{server/file-syncer → file-syncer}/utils/hash.d.ts +1 -1
  31. package/dist/src/file-syncer/utils/hash.d.ts.map +1 -0
  32. package/dist/src/file-syncer/utils/hash.js.map +1 -0
  33. package/dist/src/file-syncer/utils/path.d.ts.map +1 -0
  34. package/dist/src/{server/file-syncer → file-syncer}/utils/path.js +2 -2
  35. package/dist/src/file-syncer/utils/path.js.map +1 -0
  36. package/dist/src/index.d.ts +1 -1
  37. package/dist/src/index.d.ts.map +1 -1
  38. package/dist/src/index.js +294 -416
  39. package/dist/src/index.js.map +1 -1
  40. package/dist/tsconfig.tsbuildinfo +1 -1
  41. package/package.json +8 -50
  42. package/dist/src/dsl/index.d.ts +0 -71
  43. package/dist/src/dsl/index.d.ts.map +0 -1
  44. package/dist/src/dsl/index.js +0 -504
  45. package/dist/src/dsl/index.js.map +0 -1
  46. package/dist/src/dsl/types.d.ts +0 -39
  47. package/dist/src/dsl/types.d.ts.map +0 -1
  48. package/dist/src/dsl/types.js +0 -2
  49. package/dist/src/dsl/types.js.map +0 -1
  50. package/dist/src/dsl-exports.d.ts +0 -5
  51. package/dist/src/dsl-exports.d.ts.map +0 -1
  52. package/dist/src/dsl-exports.js +0 -4
  53. package/dist/src/dsl-exports.js.map +0 -1
  54. package/dist/src/plugin-loader.d.ts +0 -84
  55. package/dist/src/plugin-loader.d.ts.map +0 -1
  56. package/dist/src/plugin-loader.js +0 -801
  57. package/dist/src/plugin-loader.js.map +0 -1
  58. package/dist/src/server/command-metadata-service.d.ts +0 -27
  59. package/dist/src/server/command-metadata-service.d.ts.map +0 -1
  60. package/dist/src/server/command-metadata-service.js +0 -69
  61. package/dist/src/server/command-metadata-service.js.map +0 -1
  62. package/dist/src/server/command-registry.d.ts +0 -21
  63. package/dist/src/server/command-registry.d.ts.map +0 -1
  64. package/dist/src/server/command-registry.js +0 -58
  65. package/dist/src/server/command-registry.js.map +0 -1
  66. package/dist/src/server/config-loader.d.ts +0 -16
  67. package/dist/src/server/config-loader.d.ts.map +0 -1
  68. package/dist/src/server/config-loader.js +0 -106
  69. package/dist/src/server/config-loader.js.map +0 -1
  70. package/dist/src/server/event-processor.d.ts +0 -45
  71. package/dist/src/server/event-processor.d.ts.map +0 -1
  72. package/dist/src/server/event-processor.js +0 -287
  73. package/dist/src/server/event-processor.js.map +0 -1
  74. package/dist/src/server/file-syncer/crypto/jwe-encryptor.d.ts.map +0 -1
  75. package/dist/src/server/file-syncer/crypto/jwe-encryptor.js.map +0 -1
  76. package/dist/src/server/file-syncer/crypto/provider-resolver.d.ts.map +0 -1
  77. package/dist/src/server/file-syncer/crypto/provider-resolver.js.map +0 -1
  78. package/dist/src/server/file-syncer/discovery/bareImports.d.ts +0 -3
  79. package/dist/src/server/file-syncer/discovery/bareImports.d.ts.map +0 -1
  80. package/dist/src/server/file-syncer/discovery/bareImports.js.map +0 -1
  81. package/dist/src/server/file-syncer/discovery/dts.d.ts.map +0 -1
  82. package/dist/src/server/file-syncer/discovery/dts.js.map +0 -1
  83. package/dist/src/server/file-syncer/index.d.ts.map +0 -1
  84. package/dist/src/server/file-syncer/index.js.map +0 -1
  85. package/dist/src/server/file-syncer/sync/resolveSyncFileSet.d.ts.map +0 -1
  86. package/dist/src/server/file-syncer/sync/resolveSyncFileSet.js.map +0 -1
  87. package/dist/src/server/file-syncer/types/wire.d.ts.map +0 -1
  88. package/dist/src/server/file-syncer/types/wire.js.map +0 -1
  89. package/dist/src/server/file-syncer/utils/hash.d.ts.map +0 -1
  90. package/dist/src/server/file-syncer/utils/hash.js.map +0 -1
  91. package/dist/src/server/file-syncer/utils/path.d.ts.map +0 -1
  92. package/dist/src/server/file-syncer/utils/path.js.map +0 -1
  93. package/dist/src/server/http-routes.d.ts +0 -30
  94. package/dist/src/server/http-routes.d.ts.map +0 -1
  95. package/dist/src/server/http-routes.js +0 -394
  96. package/dist/src/server/http-routes.js.map +0 -1
  97. package/dist/src/server/sandbox-landing-page.html +0 -367
  98. package/dist/src/server/server.d.ts +0 -106
  99. package/dist/src/server/server.d.ts.map +0 -1
  100. package/dist/src/server/server.js +0 -255
  101. package/dist/src/server/server.js.map +0 -1
  102. package/dist/src/server/services/child-process-manager.d.ts +0 -27
  103. package/dist/src/server/services/child-process-manager.d.ts.map +0 -1
  104. package/dist/src/server/services/child-process-manager.js +0 -126
  105. package/dist/src/server/services/child-process-manager.js.map +0 -1
  106. package/dist/src/server/services/index.d.ts +0 -3
  107. package/dist/src/server/services/index.d.ts.map +0 -1
  108. package/dist/src/server/services/index.js +0 -2
  109. package/dist/src/server/services/index.js.map +0 -1
  110. package/dist/src/server/services/interface.d.ts +0 -6
  111. package/dist/src/server/services/interface.d.ts.map +0 -1
  112. package/dist/src/server/services/interface.js +0 -2
  113. package/dist/src/server/services/interface.js.map +0 -1
  114. package/dist/src/server/settled-tracker.d.ts +0 -29
  115. package/dist/src/server/settled-tracker.d.ts.map +0 -1
  116. package/dist/src/server/settled-tracker.js +0 -203
  117. package/dist/src/server/settled-tracker.js.map +0 -1
  118. package/dist/src/server/state-manager.d.ts +0 -24
  119. package/dist/src/server/state-manager.d.ts.map +0 -1
  120. package/dist/src/server/state-manager.js +0 -56
  121. package/dist/src/server/state-manager.js.map +0 -1
  122. package/dist/src/server/websocket-handler.d.ts +0 -5
  123. package/dist/src/server/websocket-handler.d.ts.map +0 -1
  124. package/dist/src/server/websocket-handler.js +0 -40
  125. package/dist/src/server/websocket-handler.js.map +0 -1
  126. package/dist/src/utils/analytics.d.ts +0 -21
  127. package/dist/src/utils/analytics.d.ts.map +0 -1
  128. package/dist/src/utils/analytics.js +0 -41
  129. package/dist/src/utils/analytics.js.map +0 -1
  130. package/dist/src/utils/config.d.ts +0 -11
  131. package/dist/src/utils/config.d.ts.map +0 -1
  132. package/dist/src/utils/config.js +0 -50
  133. package/dist/src/utils/config.js.map +0 -1
  134. package/dist/src/utils/correlation-id.d.ts +0 -3
  135. package/dist/src/utils/correlation-id.d.ts.map +0 -1
  136. package/dist/src/utils/correlation-id.js +0 -7
  137. package/dist/src/utils/correlation-id.js.map +0 -1
  138. package/dist/src/utils/errors.d.ts +0 -22
  139. package/dist/src/utils/errors.d.ts.map +0 -1
  140. package/dist/src/utils/errors.js +0 -50
  141. package/dist/src/utils/errors.js.map +0 -1
  142. package/dist/src/utils/get-package-version.d.ts +0 -7
  143. package/dist/src/utils/get-package-version.d.ts.map +0 -1
  144. package/dist/src/utils/get-package-version.js +0 -31
  145. package/dist/src/utils/get-package-version.js.map +0 -1
  146. package/dist/src/utils/terminal.d.ts +0 -13
  147. package/dist/src/utils/terminal.d.ts.map +0 -1
  148. package/dist/src/utils/terminal.js +0 -85
  149. package/dist/src/utils/terminal.js.map +0 -1
  150. /package/dist/src/{server/file-syncer → file-syncer}/crypto/jwe-encryptor.d.ts +0 -0
  151. /package/dist/src/{server/file-syncer → file-syncer}/crypto/provider-resolver.d.ts +0 -0
  152. /package/dist/src/{server/file-syncer → file-syncer}/discovery/bareImports.js +0 -0
  153. /package/dist/src/{server/file-syncer → file-syncer}/discovery/dts.js +0 -0
  154. /package/dist/src/{server/file-syncer → file-syncer}/index.d.ts +0 -0
  155. /package/dist/src/{server/file-syncer → file-syncer}/types/wire.d.ts +0 -0
  156. /package/dist/src/{server/file-syncer → file-syncer}/types/wire.js +0 -0
  157. /package/dist/src/{server/file-syncer → file-syncer}/utils/hash.js +0 -0
  158. /package/dist/src/{server/file-syncer → file-syncer}/utils/path.d.ts +0 -0
@@ -1,394 +0,0 @@
1
- import { fileURLToPath } from 'url';
2
- import { dirname, join } from 'path';
3
- import { getPipelineGraph } from '../dsl/index.js';
4
- import createDebug from 'debug';
5
- const debugHttp = createDebug('auto-engineer:server:http');
6
- // Helper functions to reduce complexity
7
- function validateCommandStructure(command) {
8
- if (!command.type || !('data' in command)) {
9
- return 'Invalid command structure. Must have type and data fields.';
10
- }
11
- return null;
12
- }
13
- function addMissingIds(command) {
14
- const hasRequestId = command.requestId !== null && command.requestId !== undefined && command.requestId !== '';
15
- const hasCorrelationId = command.correlationId !== null && command.correlationId !== undefined && command.correlationId !== '';
16
- return {
17
- ...command,
18
- requestId: hasRequestId ? command.requestId : `req-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`,
19
- correlationId: hasCorrelationId
20
- ? command.correlationId
21
- : `corr-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`,
22
- };
23
- }
24
- function validateCommandHandler(commandType, availableCommands) {
25
- if (!availableCommands.includes(commandType)) {
26
- return `Command handler not found for command: ${commandType}`;
27
- }
28
- return null;
29
- }
30
- function mapCommandToMetadata(cmd) {
31
- const metadata = cmd.metadata ?? {};
32
- const packageName = metadata.package ?? 'unknown';
33
- const baseAlias = metadata.alias ?? cmd.name;
34
- return {
35
- id: `${packageName}/${baseAlias}`,
36
- name: cmd.name,
37
- alias: baseAlias,
38
- description: metadata.description ?? 'No description',
39
- package: packageName,
40
- version: metadata.version,
41
- category: metadata.category,
42
- icon: metadata.icon ?? 'terminal',
43
- };
44
- }
45
- async function processCommand(messageBus, command, config) {
46
- try {
47
- await messageBus.sendCommand(command);
48
- debugHttp('Command processed successfully:', command.type);
49
- }
50
- catch (err) {
51
- const isTest = process.env.NODE_ENV === 'test' || process.env.VITEST === 'true';
52
- if (!isTest) {
53
- console.error('Command failed:', err);
54
- }
55
- debugHttp('Command failed (suppressed in tests):', err);
56
- config.onCommandError({
57
- commandId: command.requestId ?? 'unknown',
58
- error: err instanceof Error ? err.message : String(err),
59
- timestamp: new Date().toISOString(),
60
- });
61
- }
62
- }
63
- export function setupHttpRoutes(app, messageBus, stateManager, config) {
64
- let cachedPipelineGraph = null;
65
- let lastMessageCount = 0;
66
- // Health check endpoint
67
- app.get('/health', (_req, res) => {
68
- res.json({
69
- status: 'healthy',
70
- uptime: process.uptime(),
71
- timestamp: new Date().toISOString(),
72
- });
73
- });
74
- // Serve landing page
75
- app.get('/', (_req, res) => {
76
- const __dirname = dirname(fileURLToPath(import.meta.url));
77
- res.sendFile(join(__dirname, 'sandbox-landing-page.html'));
78
- });
79
- // Get registry information
80
- app.get('/registry', (_req, res) => {
81
- // Sort commands alphabetically by alias
82
- const sortedCommands = config.commandHandlerNames
83
- .map((name) => ({
84
- name,
85
- metadata: config.commandMetadata.get(name),
86
- }))
87
- .sort((a, b) => {
88
- const aliasA = a.metadata?.alias ?? a.name;
89
- const aliasB = b.metadata?.alias ?? b.name;
90
- return aliasA.localeCompare(aliasB);
91
- });
92
- res.json({
93
- eventHandlers: Array.from(config.eventHandlers.keys()),
94
- folds: Array.from(config.foldRegistry.keys()),
95
- commandHandlers: sortedCommands.map((cmd) => cmd.name),
96
- commandsWithMetadata: sortedCommands.map(mapCommandToMetadata),
97
- });
98
- });
99
- // Get pipeline graph with command metadata and icons
100
- // This endpoint will be polled frequently for status updates
101
- // Caching is implemented to avoid expensive recomputation when nothing has changed
102
- app.get('/pipeline', (_req, res) => {
103
- void (async () => {
104
- try {
105
- const stats = await config.messageStore.getStats();
106
- const currentMessageCount = stats.totalMessages;
107
- if (cachedPipelineGraph !== null && currentMessageCount === lastMessageCount) {
108
- debugHttp('Pipeline cache hit - returning cached graph');
109
- res.json(cachedPipelineGraph);
110
- return;
111
- }
112
- debugHttp('Pipeline cache miss - rebuilding graph (messages: %d -> %d)', lastMessageCount, currentMessageCount);
113
- const currentDslRegistrations = config.getDslRegistrations?.() ?? config.dslRegistrations;
114
- const graph = await getPipelineGraph({
115
- metadataService: config.commandMetadataService,
116
- messageStore: config.messageStore,
117
- dslRegistrations: currentDslRegistrations,
118
- });
119
- cachedPipelineGraph = graph;
120
- lastMessageCount = currentMessageCount;
121
- res.json(graph);
122
- }
123
- catch (error) {
124
- debugHttp('Error building pipeline graph:', error);
125
- res.status(500).json({ error: 'Failed to build pipeline graph' });
126
- }
127
- })();
128
- });
129
- // Get all messages with filtering
130
- // eslint-disable-next-line complexity, @typescript-eslint/no-misused-promises
131
- app.get('/messages', async (req, res) => {
132
- try {
133
- const filter = {};
134
- // Parse query parameters
135
- if (req.query.messageType !== undefined && req.query.messageType !== null) {
136
- filter.messageType = req.query.messageType;
137
- }
138
- if (req.query.messageNames !== undefined && req.query.messageNames !== null) {
139
- filter.messageNames = Array.isArray(req.query.messageNames)
140
- ? req.query.messageNames
141
- : [req.query.messageNames];
142
- }
143
- if (req.query.streamId !== undefined && req.query.streamId !== null) {
144
- filter.streamId = req.query.streamId;
145
- }
146
- if (req.query.sessionId !== undefined && req.query.sessionId !== null) {
147
- filter.sessionId = req.query.sessionId;
148
- }
149
- if (req.query.correlationId !== undefined && req.query.correlationId !== null) {
150
- filter.correlationId = req.query.correlationId;
151
- }
152
- if (req.query.requestId !== undefined && req.query.requestId !== null) {
153
- filter.requestId = req.query.requestId;
154
- }
155
- if (req.query.fromPosition !== undefined && req.query.fromPosition !== null) {
156
- filter.fromPosition = BigInt(req.query.fromPosition);
157
- }
158
- if (req.query.toPosition !== undefined && req.query.toPosition !== null) {
159
- filter.toPosition = BigInt(req.query.toPosition);
160
- }
161
- if (req.query.jsonFilter !== undefined && req.query.jsonFilter !== null) {
162
- try {
163
- filter.jsonFilter = JSON.parse(req.query.jsonFilter);
164
- }
165
- catch {
166
- return res.status(400).json({ error: 'Invalid JSON filter' });
167
- }
168
- }
169
- const count = req.query.count !== undefined && req.query.count !== null ? parseInt(req.query.count) : 1000;
170
- // Read only from the global $all stream to avoid duplicates, but still apply filters
171
- const allStreamMessages = await config.messageStore.getMessages('$all', undefined);
172
- // Apply filters manually since we're not using getAllMessages
173
- let filteredMessages = allStreamMessages;
174
- // Apply message type filter
175
- if (filter.messageType) {
176
- filteredMessages = filteredMessages.filter((msg) => msg.messageType === filter.messageType);
177
- }
178
- // Apply other filters as needed
179
- if (filter.messageNames && filter.messageNames.length > 0) {
180
- filteredMessages = filteredMessages.filter((msg) => filter.messageNames.includes(msg.message.type));
181
- }
182
- if (filter.sessionId !== undefined && filter.sessionId !== null && filter.sessionId !== '') {
183
- filteredMessages = filteredMessages.filter((msg) => msg.sessionId === filter.sessionId);
184
- }
185
- if (filter.correlationId !== undefined && filter.correlationId !== null && filter.correlationId !== '') {
186
- filteredMessages = filteredMessages.filter((msg) => msg.message.correlationId === filter.correlationId);
187
- }
188
- if (filter.requestId !== undefined && filter.requestId !== null && filter.requestId !== '') {
189
- filteredMessages = filteredMessages.filter((msg) => msg.message.requestId === filter.requestId);
190
- }
191
- if (count && count > 0) {
192
- filteredMessages = filteredMessages.slice(-count);
193
- }
194
- const messages = filteredMessages;
195
- // Convert BigInt fields to strings for JSON serialization
196
- const serializedMessages = messages.map((message) => ({
197
- ...message,
198
- revision: message.revision.toString(),
199
- position: message.position.toString(),
200
- }));
201
- res.json(serializedMessages);
202
- }
203
- catch (error) {
204
- debugHttp('Error fetching messages:', error);
205
- console.error('Detailed error fetching messages:', error);
206
- res
207
- .status(500)
208
- .json({ error: 'Failed to fetch messages', details: error instanceof Error ? error.message : String(error) });
209
- }
210
- });
211
- // Get commands only
212
- app.get('/commands', (req, res) => {
213
- (async () => {
214
- try {
215
- const count = req.query.count !== undefined && req.query.count !== null ? parseInt(req.query.count) : 1000;
216
- const commands = await config.messageStore.getAllCommands(undefined, count);
217
- // Convert BigInt fields to strings for JSON serialization
218
- const serializedCommands = commands.map((command) => ({
219
- ...command,
220
- revision: command.revision.toString(),
221
- position: command.position.toString(),
222
- }));
223
- res.json(serializedCommands);
224
- }
225
- catch (error) {
226
- console.error('Error fetching commands:', error);
227
- res.status(500).json({ error: 'Failed to fetch commands' });
228
- }
229
- })().catch((error) => {
230
- console.error('Unhandled error in /commands:', error);
231
- if (!res.headersSent) {
232
- res.status(500).json({ error: 'Internal server error' });
233
- }
234
- });
235
- });
236
- // Get events only (backward compatibility)
237
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
238
- app.get('/events', async (req, res) => {
239
- try {
240
- const count = req.query.count !== undefined && req.query.count !== null ? parseInt(req.query.count) : 1000;
241
- const events = await config.messageStore.getAllEvents(undefined, count);
242
- // Transform to legacy format for backward compatibility
243
- const legacyFormat = events.map((event) => ({
244
- event: event.message,
245
- timestamp: event.timestamp.toISOString(),
246
- }));
247
- res.json(legacyFormat);
248
- }
249
- catch (error) {
250
- debugHttp('Error fetching events:', error);
251
- res.status(500).json({ error: 'Failed to fetch events' });
252
- }
253
- });
254
- // Get current state
255
- app.get('/state', (_req, res) => {
256
- res.json(stateManager.getState());
257
- });
258
- // Get sessions
259
- app.get('/sessions', (_req, res) => {
260
- (async () => {
261
- try {
262
- const sessions = await config.messageStore.getSessions();
263
- res.json(sessions);
264
- }
265
- catch (error) {
266
- console.error('Error fetching sessions:', error);
267
- res.status(500).json({ error: 'Failed to fetch sessions' });
268
- }
269
- })().catch((error) => {
270
- console.error('Unhandled error in /sessions:', error);
271
- if (!res.headersSent) {
272
- res.status(500).json({ error: 'Internal server error' });
273
- }
274
- });
275
- });
276
- // Get streams
277
- app.get('/streams', (_req, res) => {
278
- (async () => {
279
- try {
280
- const streams = await config.messageStore.getStreams();
281
- res.json(streams);
282
- }
283
- catch (error) {
284
- console.error('Error fetching streams:', error);
285
- res.status(500).json({ error: 'Failed to fetch streams' });
286
- }
287
- })().catch((error) => {
288
- console.error('Unhandled error in /streams:', error);
289
- if (!res.headersSent) {
290
- res.status(500).json({ error: 'Internal server error' });
291
- }
292
- });
293
- });
294
- // Get messages from specific stream
295
- app.get('/streams/:streamId', (req, res) => {
296
- (async () => {
297
- try {
298
- const streamId = req.params.streamId;
299
- const count = req.query.count !== undefined && req.query.count !== null ? parseInt(req.query.count) : 1000;
300
- const messages = await config.messageStore.getMessages(streamId, undefined, count);
301
- // Convert BigInt fields to strings for JSON serialization
302
- const serializedMessages = messages.map((message) => ({
303
- ...message,
304
- revision: message.revision.toString(),
305
- position: message.position.toString(),
306
- }));
307
- res.json(serializedMessages);
308
- }
309
- catch (error) {
310
- console.error('Error fetching stream messages:', error);
311
- res.status(500).json({ error: 'Failed to fetch stream messages' });
312
- }
313
- })().catch((error) => {
314
- console.error('Unhandled error in /streams/:streamId:', error);
315
- if (!res.headersSent) {
316
- res.status(500).json({ error: 'Internal server error' });
317
- }
318
- });
319
- });
320
- // Get stats
321
- app.get('/stats', (_req, res) => {
322
- (async () => {
323
- try {
324
- const stats = await config.messageStore.getStats();
325
- res.json(stats);
326
- }
327
- catch (error) {
328
- console.error('Error fetching stats:', error);
329
- res.status(500).json({ error: 'Failed to fetch stats' });
330
- }
331
- })().catch((error) => {
332
- console.error('Unhandled error in /stats:', error);
333
- if (!res.headersSent) {
334
- res.status(500).json({ error: 'Internal server error' });
335
- }
336
- });
337
- });
338
- // Command endpoint
339
- app.post('/command', (req, res) => {
340
- (async () => {
341
- try {
342
- const command = req.body;
343
- debugHttp('Received command:', command.type);
344
- debugHttp('Command data:', command.data);
345
- // Validate command structure
346
- const structureError = validateCommandStructure(command);
347
- if (structureError !== null && structureError !== '') {
348
- return res.status(400).json({
349
- status: 'nack',
350
- error: structureError,
351
- });
352
- }
353
- // Add missing IDs
354
- const cmdWithId = addMissingIds(command);
355
- // Check if command handler exists
356
- const handlerError = validateCommandHandler(cmdWithId.type, config.commandHandlerNames);
357
- if (handlerError !== null && handlerError !== '') {
358
- return res.status(404).json({
359
- status: 'nack',
360
- error: handlerError,
361
- availableCommands: config.commandHandlerNames,
362
- });
363
- }
364
- // Store command in message store first
365
- await config.onCommandReceived(cmdWithId);
366
- // Process command asynchronously
367
- await processCommand(messageBus, cmdWithId, config);
368
- // Return acknowledgment immediately
369
- res.json({
370
- status: 'ack',
371
- commandId: cmdWithId.requestId ?? 'unknown',
372
- timestamp: new Date().toISOString(),
373
- });
374
- }
375
- catch (error) {
376
- debugHttp('Error processing command:', error);
377
- res.status(400).json({
378
- status: 'nack',
379
- error: error instanceof Error ? error.message : 'Failed to process command',
380
- });
381
- }
382
- })().catch((err) => {
383
- debugHttp('Unhandled error in command handler:', err);
384
- if (!res.headersSent) {
385
- res.status(500).json({
386
- status: 'nack',
387
- error: 'Internal server error',
388
- });
389
- }
390
- });
391
- });
392
- debugHttp('HTTP routes configured');
393
- }
394
- //# sourceMappingURL=http-routes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http-routes.js","sourceRoot":"","sources":["../../../src/server/http-routes.ts"],"names":[],"mappings":"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"}