@zintrust/workers 0.1.27

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 (178) hide show
  1. package/README.md +861 -0
  2. package/dist/AnomalyDetection.d.ts +102 -0
  3. package/dist/AnomalyDetection.js +321 -0
  4. package/dist/AutoScaler.d.ts +127 -0
  5. package/dist/AutoScaler.js +425 -0
  6. package/dist/BroadcastWorker.d.ts +21 -0
  7. package/dist/BroadcastWorker.js +24 -0
  8. package/dist/CanaryController.d.ts +103 -0
  9. package/dist/CanaryController.js +380 -0
  10. package/dist/ChaosEngineering.d.ts +79 -0
  11. package/dist/ChaosEngineering.js +216 -0
  12. package/dist/CircuitBreaker.d.ts +106 -0
  13. package/dist/CircuitBreaker.js +374 -0
  14. package/dist/ClusterLock.d.ts +90 -0
  15. package/dist/ClusterLock.js +385 -0
  16. package/dist/ComplianceManager.d.ts +177 -0
  17. package/dist/ComplianceManager.js +556 -0
  18. package/dist/DatacenterOrchestrator.d.ts +133 -0
  19. package/dist/DatacenterOrchestrator.js +404 -0
  20. package/dist/DeadLetterQueue.d.ts +122 -0
  21. package/dist/DeadLetterQueue.js +539 -0
  22. package/dist/HealthMonitor.d.ts +42 -0
  23. package/dist/HealthMonitor.js +301 -0
  24. package/dist/MultiQueueWorker.d.ts +89 -0
  25. package/dist/MultiQueueWorker.js +277 -0
  26. package/dist/NotificationWorker.d.ts +21 -0
  27. package/dist/NotificationWorker.js +23 -0
  28. package/dist/Observability.d.ts +153 -0
  29. package/dist/Observability.js +530 -0
  30. package/dist/PluginManager.d.ts +123 -0
  31. package/dist/PluginManager.js +392 -0
  32. package/dist/PriorityQueue.d.ts +117 -0
  33. package/dist/PriorityQueue.js +244 -0
  34. package/dist/ResourceMonitor.d.ts +164 -0
  35. package/dist/ResourceMonitor.js +605 -0
  36. package/dist/SLAMonitor.d.ts +110 -0
  37. package/dist/SLAMonitor.js +274 -0
  38. package/dist/WorkerFactory.d.ts +193 -0
  39. package/dist/WorkerFactory.js +1507 -0
  40. package/dist/WorkerInit.d.ts +85 -0
  41. package/dist/WorkerInit.js +223 -0
  42. package/dist/WorkerMetrics.d.ts +114 -0
  43. package/dist/WorkerMetrics.js +509 -0
  44. package/dist/WorkerRegistry.d.ts +145 -0
  45. package/dist/WorkerRegistry.js +319 -0
  46. package/dist/WorkerShutdown.d.ts +61 -0
  47. package/dist/WorkerShutdown.js +159 -0
  48. package/dist/WorkerVersioning.d.ts +107 -0
  49. package/dist/WorkerVersioning.js +300 -0
  50. package/dist/build-manifest.json +462 -0
  51. package/dist/config/workerConfig.d.ts +3 -0
  52. package/dist/config/workerConfig.js +19 -0
  53. package/dist/createQueueWorker.d.ts +23 -0
  54. package/dist/createQueueWorker.js +113 -0
  55. package/dist/dashboard/index.d.ts +1 -0
  56. package/dist/dashboard/index.js +1 -0
  57. package/dist/dashboard/types.d.ts +117 -0
  58. package/dist/dashboard/types.js +1 -0
  59. package/dist/dashboard/workers-api.d.ts +4 -0
  60. package/dist/dashboard/workers-api.js +638 -0
  61. package/dist/dashboard/workers-dashboard-ui.d.ts +3 -0
  62. package/dist/dashboard/workers-dashboard-ui.js +1026 -0
  63. package/dist/dashboard/workers-dashboard.d.ts +4 -0
  64. package/dist/dashboard/workers-dashboard.js +904 -0
  65. package/dist/helper/index.d.ts +5 -0
  66. package/dist/helper/index.js +10 -0
  67. package/dist/http/WorkerApiController.d.ts +38 -0
  68. package/dist/http/WorkerApiController.js +312 -0
  69. package/dist/http/WorkerController.d.ts +374 -0
  70. package/dist/http/WorkerController.js +1351 -0
  71. package/dist/http/middleware/CustomValidation.d.ts +92 -0
  72. package/dist/http/middleware/CustomValidation.js +270 -0
  73. package/dist/http/middleware/DatacenterValidator.d.ts +3 -0
  74. package/dist/http/middleware/DatacenterValidator.js +94 -0
  75. package/dist/http/middleware/EditWorkerValidation.d.ts +7 -0
  76. package/dist/http/middleware/EditWorkerValidation.js +55 -0
  77. package/dist/http/middleware/FeaturesValidator.d.ts +3 -0
  78. package/dist/http/middleware/FeaturesValidator.js +60 -0
  79. package/dist/http/middleware/InfrastructureValidator.d.ts +31 -0
  80. package/dist/http/middleware/InfrastructureValidator.js +226 -0
  81. package/dist/http/middleware/OptionsValidator.d.ts +3 -0
  82. package/dist/http/middleware/OptionsValidator.js +112 -0
  83. package/dist/http/middleware/PayloadSanitizer.d.ts +7 -0
  84. package/dist/http/middleware/PayloadSanitizer.js +42 -0
  85. package/dist/http/middleware/ProcessorPathSanitizer.d.ts +3 -0
  86. package/dist/http/middleware/ProcessorPathSanitizer.js +74 -0
  87. package/dist/http/middleware/QueueNameSanitizer.d.ts +3 -0
  88. package/dist/http/middleware/QueueNameSanitizer.js +45 -0
  89. package/dist/http/middleware/ValidateDriver.d.ts +7 -0
  90. package/dist/http/middleware/ValidateDriver.js +20 -0
  91. package/dist/http/middleware/VersionSanitizer.d.ts +3 -0
  92. package/dist/http/middleware/VersionSanitizer.js +25 -0
  93. package/dist/http/middleware/WorkerNameSanitizer.d.ts +3 -0
  94. package/dist/http/middleware/WorkerNameSanitizer.js +46 -0
  95. package/dist/http/middleware/WorkerValidationChain.d.ts +27 -0
  96. package/dist/http/middleware/WorkerValidationChain.js +185 -0
  97. package/dist/index.d.ts +46 -0
  98. package/dist/index.js +48 -0
  99. package/dist/routes/workers.d.ts +12 -0
  100. package/dist/routes/workers.js +81 -0
  101. package/dist/storage/WorkerStore.d.ts +45 -0
  102. package/dist/storage/WorkerStore.js +195 -0
  103. package/dist/type.d.ts +76 -0
  104. package/dist/type.js +1 -0
  105. package/dist/ui/router/ui.d.ts +3 -0
  106. package/dist/ui/router/ui.js +83 -0
  107. package/dist/ui/types/worker-ui.d.ts +229 -0
  108. package/dist/ui/types/worker-ui.js +5 -0
  109. package/package.json +53 -0
  110. package/src/AnomalyDetection.ts +434 -0
  111. package/src/AutoScaler.ts +654 -0
  112. package/src/BroadcastWorker.ts +34 -0
  113. package/src/CanaryController.ts +531 -0
  114. package/src/ChaosEngineering.ts +301 -0
  115. package/src/CircuitBreaker.ts +495 -0
  116. package/src/ClusterLock.ts +499 -0
  117. package/src/ComplianceManager.ts +815 -0
  118. package/src/DatacenterOrchestrator.ts +561 -0
  119. package/src/DeadLetterQueue.ts +733 -0
  120. package/src/HealthMonitor.ts +390 -0
  121. package/src/MultiQueueWorker.ts +431 -0
  122. package/src/NotificationWorker.ts +33 -0
  123. package/src/Observability.ts +696 -0
  124. package/src/PluginManager.ts +551 -0
  125. package/src/PriorityQueue.ts +351 -0
  126. package/src/ResourceMonitor.ts +769 -0
  127. package/src/SLAMonitor.ts +408 -0
  128. package/src/WorkerFactory.ts +2108 -0
  129. package/src/WorkerInit.ts +313 -0
  130. package/src/WorkerMetrics.ts +709 -0
  131. package/src/WorkerRegistry.ts +443 -0
  132. package/src/WorkerShutdown.ts +210 -0
  133. package/src/WorkerVersioning.ts +422 -0
  134. package/src/config/workerConfig.ts +25 -0
  135. package/src/createQueueWorker.ts +174 -0
  136. package/src/dashboard/index.ts +6 -0
  137. package/src/dashboard/types.ts +141 -0
  138. package/src/dashboard/workers-api.ts +785 -0
  139. package/src/dashboard/zintrust.svg +30 -0
  140. package/src/helper/index.ts +11 -0
  141. package/src/http/WorkerApiController.ts +369 -0
  142. package/src/http/WorkerController.ts +1512 -0
  143. package/src/http/middleware/CustomValidation.ts +360 -0
  144. package/src/http/middleware/DatacenterValidator.ts +124 -0
  145. package/src/http/middleware/EditWorkerValidation.ts +74 -0
  146. package/src/http/middleware/FeaturesValidator.ts +82 -0
  147. package/src/http/middleware/InfrastructureValidator.ts +295 -0
  148. package/src/http/middleware/OptionsValidator.ts +144 -0
  149. package/src/http/middleware/PayloadSanitizer.ts +52 -0
  150. package/src/http/middleware/ProcessorPathSanitizer.ts +86 -0
  151. package/src/http/middleware/QueueNameSanitizer.ts +55 -0
  152. package/src/http/middleware/ValidateDriver.ts +29 -0
  153. package/src/http/middleware/VersionSanitizer.ts +30 -0
  154. package/src/http/middleware/WorkerNameSanitizer.ts +56 -0
  155. package/src/http/middleware/WorkerValidationChain.ts +230 -0
  156. package/src/index.ts +98 -0
  157. package/src/routes/workers.ts +154 -0
  158. package/src/storage/WorkerStore.ts +240 -0
  159. package/src/type.ts +89 -0
  160. package/src/types/queue-monitor.d.ts +38 -0
  161. package/src/types/queue-redis.d.ts +38 -0
  162. package/src/ui/README.md +13 -0
  163. package/src/ui/components/JsonEditor.js +670 -0
  164. package/src/ui/components/JsonViewer.js +387 -0
  165. package/src/ui/components/WorkerCard.js +178 -0
  166. package/src/ui/components/WorkerExpandPanel.js +257 -0
  167. package/src/ui/components/fetcher.js +42 -0
  168. package/src/ui/components/sla-scorecard.js +32 -0
  169. package/src/ui/components/styles.css +30 -0
  170. package/src/ui/components/table-expander.js +34 -0
  171. package/src/ui/integration/worker-ui-integration.js +565 -0
  172. package/src/ui/router/ui.ts +99 -0
  173. package/src/ui/services/workerApi.js +240 -0
  174. package/src/ui/types/worker-ui.ts +283 -0
  175. package/src/ui/utils/jsonValidator.js +444 -0
  176. package/src/ui/workers/index.html +202 -0
  177. package/src/ui/workers/main.js +1781 -0
  178. package/src/ui/workers/styles.css +1350 -0
@@ -0,0 +1,5 @@
1
+ import type { IRequest } from '@zintrust/core';
2
+ /**
3
+ * Helper to get path parameter
4
+ */
5
+ export declare const getParam: (req: IRequest, key: string) => string;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Helper to get path parameter
3
+ */
4
+ export const getParam = (req, key) => {
5
+ const direct = req.getParam?.(key);
6
+ if (typeof direct === 'string' && direct.length > 0)
7
+ return direct;
8
+ const params = req.params ?? {};
9
+ return params[key] ?? '';
10
+ };
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Worker API Controller
3
+ * HTTP handlers for worker management API
4
+ */
5
+ import type { IRequest, IResponse } from '@zintrust/core';
6
+ /**
7
+ * GET /api/workers - List workers with pagination, filtering, and sorting
8
+ */
9
+ export declare const listWorkers: (req: IRequest, res: IResponse) => Promise<void>;
10
+ /**
11
+ * GET /api/workers/:name/details - Get detailed worker information
12
+ */
13
+ export declare const getWorkerDetailsHandler: (req: IRequest, res: IResponse) => Promise<void>;
14
+ /**
15
+ * GET /api/workers/drivers - Get available worker drivers
16
+ */
17
+ export declare const getDriversHandler: (_req: IRequest, res: IResponse) => Promise<void>;
18
+ /**
19
+ * GET /api/workers/queue-data - Get queue statistics
20
+ */
21
+ export declare const getQueueDataHandler: (_req: IRequest, res: IResponse) => Promise<void>;
22
+ /**
23
+ * GET /api/workers/health - Get overall workers health summary
24
+ */
25
+ export declare const getHealthSummaryHandler: (_req: IRequest, res: IResponse) => Promise<void>;
26
+ export declare const WorkerApiController: Readonly<{
27
+ create(): {
28
+ getDriversHandler: (_req: IRequest, res: IResponse) => Promise<void>;
29
+ getQueueDataHandler: (_req: IRequest, res: IResponse) => Promise<void>;
30
+ getHealthSummaryHandler: (_req: IRequest, res: IResponse) => Promise<void>;
31
+ listWorkers: (req: IRequest, res: IResponse) => Promise<void>;
32
+ getWorkerDetailsHandler: (req: IRequest, res: IResponse) => Promise<void>;
33
+ getWorkerJsonHandler: (req: IRequest, res: IResponse) => Promise<void>;
34
+ getWorkerDriverDataHandler: (req: IRequest, res: IResponse) => Promise<void>;
35
+ updateWorkerJsonHandler: (req: IRequest, res: IResponse) => Promise<void>;
36
+ };
37
+ }>;
38
+ export default WorkerApiController;
@@ -0,0 +1,312 @@
1
+ /**
2
+ * Worker API Controller
3
+ * HTTP handlers for worker management API
4
+ */
5
+ import { Logger } from '@zintrust/core';
6
+ import { getWorkerDetails, getWorkers } from '../dashboard/workers-api';
7
+ import { getParam } from '../helper';
8
+ import { WorkerFactory } from '../WorkerFactory';
9
+ /**
10
+ * Helper to safely get a single string value from query params
11
+ */
12
+ const getQueryParam = (query, key, defaultValue = '') => {
13
+ const value = query[key];
14
+ return Array.isArray(value) ? value[0] : value || defaultValue;
15
+ };
16
+ /**
17
+ * Helper to safely get a number from query params
18
+ */
19
+ const getNumberParam = (query, key, defaultValue) => {
20
+ const value = getQueryParam(query, key, String(defaultValue));
21
+ const parsed = Number.parseInt(value, 10);
22
+ return Number.isNaN(parsed) ? defaultValue : parsed;
23
+ };
24
+ /**
25
+ * Helper to safely get a boolean from query params
26
+ */
27
+ const getBooleanParam = (query, key, defaultValue) => {
28
+ const value = getQueryParam(query, key, '').toLowerCase();
29
+ if (value === 'true')
30
+ return true;
31
+ if (value === 'false')
32
+ return false;
33
+ return defaultValue;
34
+ };
35
+ /**
36
+ * Helper function to get typed enum value with type safety
37
+ */
38
+ const getEnumParam = (query, key, validValues, defaultValue) => {
39
+ const value = getQueryParam(query, key, defaultValue);
40
+ return validValues.includes(value) ? value : defaultValue;
41
+ };
42
+ /**
43
+ * Helper to safely get optional enum value
44
+ */
45
+ const getOptionalEnumParam = (query, key, validValues) => {
46
+ const value = getQueryParam(query, key, '').trim();
47
+ if (!value)
48
+ return undefined;
49
+ return validValues.includes(value) ? value : undefined;
50
+ };
51
+ /**
52
+ * GET /api/workers - List workers with pagination, filtering, and sorting
53
+ */
54
+ export const listWorkers = async (req, res) => {
55
+ try {
56
+ const query = req.getQuery();
57
+ const sortByRaw = getQueryParam(query, 'sortBy', getQueryParam(query, 'sort', 'name'));
58
+ const queryParams = {
59
+ page: getNumberParam(query, 'page', 1),
60
+ limit: getNumberParam(query, 'limit', 100),
61
+ sortBy: getEnumParam({ ...query, sortBy: sortByRaw }, 'sortBy', ['name', 'status', 'driver', 'health', 'version', 'processed'], 'name'),
62
+ sortOrder: getEnumParam(query, 'sortOrder', ['asc', 'desc'], 'asc'),
63
+ status: getOptionalEnumParam(query, 'status', [
64
+ 'running',
65
+ 'stopped',
66
+ 'error',
67
+ 'paused',
68
+ ]),
69
+ driver: getOptionalEnumParam(query, 'driver', [
70
+ 'database',
71
+ 'redis',
72
+ 'memory',
73
+ ]),
74
+ search: getQueryParam(query, 'search'),
75
+ includeDetails: getBooleanParam(query, 'includeDetails', false),
76
+ };
77
+ const result = await getWorkers(queryParams);
78
+ res.json(result);
79
+ }
80
+ catch (error) {
81
+ Logger.error('Error fetching workers:', error);
82
+ res.status(500).json({
83
+ error: 'Failed to fetch workers',
84
+ message: error instanceof Error ? error.message : 'Unknown error',
85
+ });
86
+ }
87
+ };
88
+ /**
89
+ * GET /api/workers/:name/details - Get detailed worker information
90
+ */
91
+ export const getWorkerDetailsHandler = async (req, res) => {
92
+ try {
93
+ const name = getParam(req, 'name');
94
+ if (!name) {
95
+ res.setStatus(400).json({ error: 'Worker name is required' });
96
+ return;
97
+ }
98
+ const driver = getQueryParam(req.getQuery?.() || {}, 'driver');
99
+ const details = await getWorkerDetails(name, driver);
100
+ res.json(details);
101
+ }
102
+ catch (error) {
103
+ if (error instanceof Error && error.message.includes('not found')) {
104
+ res.status(404).json({
105
+ error: 'Worker not found',
106
+ message: error.message,
107
+ });
108
+ }
109
+ else {
110
+ Logger.error('Error fetching worker details:', error);
111
+ res.status(500).json({
112
+ error: 'Failed to fetch worker details',
113
+ message: error instanceof Error ? error.message : 'Unknown error',
114
+ });
115
+ }
116
+ }
117
+ };
118
+ /**
119
+ * GET /api/workers/drivers - Get available worker drivers
120
+ */
121
+ export const getDriversHandler = async (_req, res) => {
122
+ try {
123
+ const result = await getWorkers({});
124
+ res.json({
125
+ drivers: result.drivers,
126
+ count: result.drivers.length,
127
+ });
128
+ }
129
+ catch (error) {
130
+ Logger.error('Error fetching drivers:', error);
131
+ res.status(500).json({
132
+ error: 'Failed to fetch drivers',
133
+ message: error instanceof Error ? error.message : 'Unknown error',
134
+ });
135
+ }
136
+ };
137
+ /**
138
+ * GET /api/workers/queue-data - Get queue statistics
139
+ */
140
+ export const getQueueDataHandler = async (_req, res) => {
141
+ try {
142
+ const result = await getWorkers({});
143
+ res.json(result.queueData);
144
+ }
145
+ catch (error) {
146
+ Logger.error('Error fetching queue data:', error);
147
+ res.status(500).json({
148
+ error: 'Failed to fetch queue data',
149
+ message: error instanceof Error ? error.message : 'Unknown error',
150
+ });
151
+ }
152
+ };
153
+ /**
154
+ * GET /api/workers/health - Get overall workers health summary
155
+ */
156
+ export const getHealthSummaryHandler = async (_req, res) => {
157
+ try {
158
+ const result = await getWorkers({});
159
+ const healthSummary = {
160
+ total: result.workers.length,
161
+ running: result.workers.filter((w) => w.status === 'running').length,
162
+ stopped: result.workers.filter((w) => w.status === 'stopped').length,
163
+ error: result.workers.filter((w) => w.status === 'error').length,
164
+ paused: result.workers.filter((w) => w.status === 'paused').length,
165
+ healthy: result.workers.filter((w) => w.health.status === 'healthy').length,
166
+ unhealthy: result.workers.filter((w) => w.health.status === 'unhealthy').length,
167
+ warning: result.workers.filter((w) => w.health.status === 'warning').length,
168
+ drivers: result.drivers,
169
+ queueData: result.queueData,
170
+ };
171
+ res.json(healthSummary);
172
+ }
173
+ catch (error) {
174
+ Logger.error('Error fetching health summary:', error);
175
+ res.status(500).json({
176
+ error: 'Failed to fetch health summary',
177
+ message: error instanceof Error ? error.message : 'Unknown error',
178
+ });
179
+ }
180
+ };
181
+ const getWorkerJsonHandler = async (req, res) => {
182
+ try {
183
+ const { id } = req.params;
184
+ if (!id) {
185
+ return res.setStatus(400).json({
186
+ error: 'Worker ID is required',
187
+ code: 'MISSING_WORKER_ID',
188
+ });
189
+ }
190
+ const worker = await getWorkerDetails(id);
191
+ if (!worker) {
192
+ return res.setStatus(404).json({
193
+ error: 'Worker not found',
194
+ code: 'WORKER_NOT_FOUND',
195
+ });
196
+ }
197
+ return res.json({
198
+ success: true,
199
+ data: worker,
200
+ });
201
+ }
202
+ catch (error) {
203
+ Logger.error('Failed to get worker JSON', error);
204
+ return res.setStatus(500).json({
205
+ error: 'Internal server error',
206
+ code: 'INTERNAL_ERROR',
207
+ });
208
+ }
209
+ };
210
+ /**
211
+ * GET /api/workers/:name/driver-data - Get direct driver data for editing
212
+ * This retrieves the raw persisted data without enrichment for editing purposes
213
+ */
214
+ const getWorkerDriverDataHandler = async (req, res) => {
215
+ try {
216
+ const name = getParam(req, 'name');
217
+ if (!name) {
218
+ return res.setStatus(400).json({
219
+ error: 'Worker name is required',
220
+ code: 'MISSING_WORKER_NAME',
221
+ });
222
+ }
223
+ const driver = getQueryParam(req.getQuery?.() || {}, 'driver');
224
+ const persistenceOverride = driver ? { driver } : undefined;
225
+ // Get direct driver data without enrichment
226
+ const persistedData = await WorkerFactory.getPersisted(name, persistenceOverride);
227
+ if (!persistedData) {
228
+ return res.setStatus(404).json({
229
+ error: 'Worker not found in driver',
230
+ code: 'WORKER_NOT_FOUND',
231
+ });
232
+ }
233
+ return res.json({
234
+ success: true,
235
+ data: persistedData,
236
+ });
237
+ }
238
+ catch (error) {
239
+ Logger.error('Failed to get worker driver data', error);
240
+ return res.setStatus(500).json({
241
+ error: 'Internal server error',
242
+ code: 'INTERNAL_ERROR',
243
+ });
244
+ }
245
+ };
246
+ const updateWorkerJsonHandler = async (req, res) => {
247
+ try {
248
+ const workerData = req.data();
249
+ const workerId = workerData['id'];
250
+ if (!workerId) {
251
+ return res.setStatus(400).json({
252
+ error: 'Worker ID is required',
253
+ code: 'MISSING_WORKER_ID',
254
+ });
255
+ }
256
+ if (!workerData) {
257
+ return res.setStatus(400).json({
258
+ error: 'Worker data is required',
259
+ code: 'MISSING_WORKER_DATA',
260
+ });
261
+ }
262
+ // Basic validation for now - can be enhanced with full schema validation
263
+ if (!workerData['name'] ||
264
+ !workerData['queueName'] ||
265
+ !workerData['processor'] ||
266
+ !workerData['version']) {
267
+ return res.setStatus(400).json({
268
+ error: 'Missing required fields: name, queueName, processor, version',
269
+ code: 'MISSING_REQUIRED_FIELDS',
270
+ });
271
+ }
272
+ // Get existing worker
273
+ const existingWorker = await getWorkerDetails(workerId);
274
+ if (!existingWorker) {
275
+ return res.setStatus(404).json({
276
+ error: 'Worker not found',
277
+ code: 'WORKER_NOT_FOUND',
278
+ });
279
+ }
280
+ // For now, return the updated data as if it was updated
281
+ // In a real implementation, this would update the worker in the database
282
+ const updatedWorker = { ...existingWorker, ...workerData };
283
+ return res.json({
284
+ success: true,
285
+ data: updatedWorker,
286
+ message: 'Worker updated successfully',
287
+ });
288
+ }
289
+ catch (error) {
290
+ Logger.error('Failed to update worker JSON', error);
291
+ return res.setStatus(500).json({
292
+ error: 'Internal server error',
293
+ code: 'INTERNAL_ERROR',
294
+ });
295
+ }
296
+ };
297
+ export const WorkerApiController = Object.freeze({
298
+ create() {
299
+ // Compose grouped handlers to keep this function short
300
+ return {
301
+ getDriversHandler,
302
+ getQueueDataHandler,
303
+ getHealthSummaryHandler,
304
+ listWorkers,
305
+ getWorkerDetailsHandler,
306
+ getWorkerJsonHandler,
307
+ getWorkerDriverDataHandler,
308
+ updateWorkerJsonHandler,
309
+ };
310
+ },
311
+ });
312
+ export default WorkerApiController;