@zintrust/core 0.1.41 → 0.1.43

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 (547) hide show
  1. package/app/Controllers/AuthController.d.ts +10 -0
  2. package/app/Controllers/AuthController.d.ts.map +1 -0
  3. package/app/Controllers/AuthController.js +201 -0
  4. package/app/Controllers/UserController.d.ts +9 -0
  5. package/app/Controllers/UserController.d.ts.map +1 -0
  6. package/app/Controllers/UserController.js +8 -0
  7. package/app/Controllers/UserQueryBuilderController.d.ts +16 -0
  8. package/app/Controllers/UserQueryBuilderController.d.ts.map +1 -0
  9. package/app/Controllers/UserQueryBuilderController.js +404 -0
  10. package/app/Middleware/ProfilerMiddleware.d.ts +12 -0
  11. package/app/Middleware/ProfilerMiddleware.d.ts.map +1 -0
  12. package/app/Middleware/ProfilerMiddleware.js +47 -0
  13. package/app/Middleware/index.d.ts +59 -0
  14. package/app/Middleware/index.d.ts.map +1 -0
  15. package/app/Middleware/index.js +215 -0
  16. package/app/Models/Post.d.ts +14 -0
  17. package/app/Models/Post.d.ts.map +1 -0
  18. package/app/Models/Post.js +27 -0
  19. package/app/Models/User.d.ts +14 -0
  20. package/app/Models/User.d.ts.map +1 -0
  21. package/app/Models/User.js +44 -0
  22. package/app/Schedules/JobTracking.d.ts +3 -0
  23. package/app/Schedules/JobTracking.d.ts.map +1 -0
  24. package/app/Schedules/JobTracking.js +13 -0
  25. package/app/Schedules/index.d.ts +2 -0
  26. package/app/Schedules/index.d.ts.map +1 -0
  27. package/app/Schedules/index.js +1 -0
  28. package/app/Toolkit/Broadcast/sendBroadcast.d.ts +6 -0
  29. package/app/Toolkit/Broadcast/sendBroadcast.d.ts.map +1 -0
  30. package/app/Toolkit/Broadcast/sendBroadcast.js +5 -0
  31. package/app/Toolkit/Mail/sendWelcomeEmail.d.ts +6 -0
  32. package/app/Toolkit/Mail/sendWelcomeEmail.d.ts.map +1 -0
  33. package/app/Toolkit/Mail/sendWelcomeEmail.js +20 -0
  34. package/app/Toolkit/Notification/sendSlackNotification.d.ts +8 -0
  35. package/app/Toolkit/Notification/sendSlackNotification.d.ts.map +1 -0
  36. package/app/Toolkit/Notification/sendSlackNotification.js +5 -0
  37. package/app/Toolkit/Notification/sendSms.d.ts +6 -0
  38. package/app/Toolkit/Notification/sendSms.d.ts.map +1 -0
  39. package/app/Toolkit/Notification/sendSms.js +5 -0
  40. package/app/Types/controller.d.ts +42 -0
  41. package/app/Types/controller.d.ts.map +1 -0
  42. package/app/Types/controller.js +1 -0
  43. package/config/broadcast.d.ts +38 -0
  44. package/config/broadcast.d.ts.map +1 -0
  45. package/config/broadcast.js +37 -0
  46. package/config/cache.d.ts +40 -0
  47. package/config/cache.d.ts.map +1 -0
  48. package/config/cache.js +39 -0
  49. package/config/database.d.ts +58 -0
  50. package/config/database.d.ts.map +1 -0
  51. package/config/database.js +65 -0
  52. package/config/mail.d.ts +51 -0
  53. package/config/mail.d.ts.map +1 -0
  54. package/config/mail.js +69 -0
  55. package/config/middleware.d.ts +11 -0
  56. package/config/middleware.d.ts.map +1 -0
  57. package/config/middleware.js +30 -0
  58. package/config/notification.d.ts +33 -0
  59. package/config/notification.d.ts.map +1 -0
  60. package/config/notification.js +33 -0
  61. package/config/queue.d.ts +55 -0
  62. package/config/queue.d.ts.map +1 -0
  63. package/config/queue.js +87 -0
  64. package/config/storage.d.ts +59 -0
  65. package/config/storage.d.ts.map +1 -0
  66. package/config/storage.js +59 -0
  67. package/config/workers.d.ts +54 -0
  68. package/config/workers.d.ts.map +1 -0
  69. package/config/workers.js +83 -0
  70. package/package.json +27 -5
  71. package/packages/cloudflare-d1-proxy/src/index.d.ts +48 -0
  72. package/packages/cloudflare-d1-proxy/src/index.d.ts.map +1 -0
  73. package/packages/cloudflare-d1-proxy/src/index.js +387 -0
  74. package/packages/cloudflare-kv-proxy/src/index.d.ts +44 -0
  75. package/packages/cloudflare-kv-proxy/src/index.d.ts.map +1 -0
  76. package/packages/cloudflare-kv-proxy/src/index.js +325 -0
  77. package/packages/queue-monitor/src/QueueMonitoringService.d.ts +35 -0
  78. package/packages/queue-monitor/src/QueueMonitoringService.d.ts.map +1 -0
  79. package/packages/queue-monitor/src/QueueMonitoringService.js +194 -0
  80. package/packages/queue-monitor/src/connection.d.ts +3 -0
  81. package/packages/queue-monitor/src/connection.d.ts.map +1 -0
  82. package/packages/queue-monitor/src/connection.js +1 -0
  83. package/packages/queue-monitor/src/dashboard-ui.d.ts +7 -0
  84. package/packages/queue-monitor/src/dashboard-ui.d.ts.map +1 -0
  85. package/packages/queue-monitor/src/dashboard-ui.js +997 -0
  86. package/packages/queue-monitor/src/driver.d.ts +15 -0
  87. package/packages/queue-monitor/src/driver.d.ts.map +1 -0
  88. package/packages/queue-monitor/src/driver.js +115 -0
  89. package/packages/queue-monitor/src/index.d.ts +71 -0
  90. package/packages/queue-monitor/src/index.d.ts.map +1 -0
  91. package/packages/queue-monitor/src/index.js +296 -0
  92. package/packages/queue-monitor/src/metrics.d.ts +27 -0
  93. package/packages/queue-monitor/src/metrics.d.ts.map +1 -0
  94. package/packages/queue-monitor/src/metrics.js +92 -0
  95. package/packages/queue-monitor/src/worker.d.ts +8 -0
  96. package/packages/queue-monitor/src/worker.d.ts.map +1 -0
  97. package/packages/queue-monitor/src/worker.js +35 -0
  98. package/packages/queue-redis/src/BullMQRedisQueue.d.ts +26 -0
  99. package/packages/queue-redis/src/BullMQRedisQueue.d.ts.map +1 -0
  100. package/packages/queue-redis/src/BullMQRedisQueue.js +463 -0
  101. package/packages/queue-redis/src/HttpQueueDriver.d.ts +18 -0
  102. package/packages/queue-redis/src/HttpQueueDriver.d.ts.map +1 -0
  103. package/packages/queue-redis/src/HttpQueueDriver.js +249 -0
  104. package/packages/queue-redis/src/QueueHttpGateway.d.ts +16 -0
  105. package/packages/queue-redis/src/QueueHttpGateway.d.ts.map +1 -0
  106. package/packages/queue-redis/src/QueueHttpGateway.js +217 -0
  107. package/packages/queue-redis/src/RedisPublishClient.d.ts +14 -0
  108. package/packages/queue-redis/src/RedisPublishClient.d.ts.map +1 -0
  109. package/packages/queue-redis/src/RedisPublishClient.js +251 -0
  110. package/packages/queue-redis/src/index.d.ts +12 -0
  111. package/packages/queue-redis/src/index.d.ts.map +1 -0
  112. package/packages/queue-redis/src/index.js +10 -0
  113. package/packages/queue-redis/src/register.d.ts +6 -0
  114. package/packages/queue-redis/src/register.d.ts.map +1 -0
  115. package/packages/queue-redis/src/register.js +21 -0
  116. package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.d.ts +11 -0
  117. package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.d.ts.map +1 -0
  118. package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.js +32 -0
  119. package/packages/workers/migrations/20260123180000_create_queue_jobs_table.d.ts +11 -0
  120. package/packages/workers/migrations/20260123180000_create_queue_jobs_table.d.ts.map +1 -0
  121. package/packages/workers/migrations/20260123180000_create_queue_jobs_table.js +46 -0
  122. package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.d.ts +7 -0
  123. package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.d.ts.map +1 -0
  124. package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.js +44 -0
  125. package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.d.ts +7 -0
  126. package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.d.ts.map +1 -0
  127. package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.js +104 -0
  128. package/packages/workers/src/AnomalyDetection.d.ts +107 -0
  129. package/packages/workers/src/AnomalyDetection.d.ts.map +1 -0
  130. package/packages/workers/src/AnomalyDetection.js +329 -0
  131. package/packages/workers/src/AutoScaler.d.ts +128 -0
  132. package/packages/workers/src/AutoScaler.d.ts.map +1 -0
  133. package/packages/workers/src/AutoScaler.js +425 -0
  134. package/packages/workers/src/BroadcastWorker.d.ts +24 -0
  135. package/packages/workers/src/BroadcastWorker.d.ts.map +1 -0
  136. package/packages/workers/src/BroadcastWorker.js +24 -0
  137. package/packages/workers/src/CanaryController.d.ts +104 -0
  138. package/packages/workers/src/CanaryController.d.ts.map +1 -0
  139. package/packages/workers/src/CanaryController.js +424 -0
  140. package/packages/workers/src/ChaosEngineering.d.ts +80 -0
  141. package/packages/workers/src/ChaosEngineering.d.ts.map +1 -0
  142. package/packages/workers/src/ChaosEngineering.js +229 -0
  143. package/packages/workers/src/CircuitBreaker.d.ts +107 -0
  144. package/packages/workers/src/CircuitBreaker.d.ts.map +1 -0
  145. package/packages/workers/src/CircuitBreaker.js +374 -0
  146. package/packages/workers/src/ClusterLock.d.ts +91 -0
  147. package/packages/workers/src/ClusterLock.d.ts.map +1 -0
  148. package/packages/workers/src/ClusterLock.js +397 -0
  149. package/packages/workers/src/ComplianceManager.d.ts +178 -0
  150. package/packages/workers/src/ComplianceManager.d.ts.map +1 -0
  151. package/packages/workers/src/ComplianceManager.js +556 -0
  152. package/packages/workers/src/DatacenterOrchestrator.d.ts +134 -0
  153. package/packages/workers/src/DatacenterOrchestrator.d.ts.map +1 -0
  154. package/packages/workers/src/DatacenterOrchestrator.js +404 -0
  155. package/packages/workers/src/DeadLetterQueue.d.ts +123 -0
  156. package/packages/workers/src/DeadLetterQueue.d.ts.map +1 -0
  157. package/packages/workers/src/DeadLetterQueue.js +544 -0
  158. package/packages/workers/src/HealthMonitor.d.ts +43 -0
  159. package/packages/workers/src/HealthMonitor.d.ts.map +1 -0
  160. package/packages/workers/src/HealthMonitor.js +312 -0
  161. package/packages/workers/src/MultiQueueWorker.d.ts +90 -0
  162. package/packages/workers/src/MultiQueueWorker.d.ts.map +1 -0
  163. package/packages/workers/src/MultiQueueWorker.js +282 -0
  164. package/packages/workers/src/NotificationWorker.d.ts +24 -0
  165. package/packages/workers/src/NotificationWorker.d.ts.map +1 -0
  166. package/packages/workers/src/NotificationWorker.js +23 -0
  167. package/packages/workers/src/Observability.d.ts +154 -0
  168. package/packages/workers/src/Observability.d.ts.map +1 -0
  169. package/packages/workers/src/Observability.js +538 -0
  170. package/packages/workers/src/PluginManager.d.ts +124 -0
  171. package/packages/workers/src/PluginManager.d.ts.map +1 -0
  172. package/packages/workers/src/PluginManager.js +392 -0
  173. package/packages/workers/src/PriorityQueue.d.ts +118 -0
  174. package/packages/workers/src/PriorityQueue.d.ts.map +1 -0
  175. package/packages/workers/src/PriorityQueue.js +276 -0
  176. package/packages/workers/src/ResourceMonitor.d.ts +165 -0
  177. package/packages/workers/src/ResourceMonitor.d.ts.map +1 -0
  178. package/packages/workers/src/ResourceMonitor.js +632 -0
  179. package/packages/workers/src/SLAMonitor.d.ts +111 -0
  180. package/packages/workers/src/SLAMonitor.d.ts.map +1 -0
  181. package/packages/workers/src/SLAMonitor.js +274 -0
  182. package/packages/workers/src/WorkerFactory.d.ts +218 -0
  183. package/packages/workers/src/WorkerFactory.d.ts.map +1 -0
  184. package/packages/workers/src/WorkerFactory.js +2253 -0
  185. package/packages/workers/src/WorkerInit.d.ts +86 -0
  186. package/packages/workers/src/WorkerInit.d.ts.map +1 -0
  187. package/packages/workers/src/WorkerInit.js +307 -0
  188. package/packages/workers/src/WorkerMetrics.d.ts +116 -0
  189. package/packages/workers/src/WorkerMetrics.d.ts.map +1 -0
  190. package/packages/workers/src/WorkerMetrics.js +570 -0
  191. package/packages/workers/src/WorkerRegistry.d.ts +152 -0
  192. package/packages/workers/src/WorkerRegistry.d.ts.map +1 -0
  193. package/packages/workers/src/WorkerRegistry.js +396 -0
  194. package/packages/workers/src/WorkerShutdown.d.ts +70 -0
  195. package/packages/workers/src/WorkerShutdown.d.ts.map +1 -0
  196. package/packages/workers/src/WorkerShutdown.js +185 -0
  197. package/packages/workers/src/WorkerVersioning.d.ts +108 -0
  198. package/packages/workers/src/WorkerVersioning.d.ts.map +1 -0
  199. package/packages/workers/src/WorkerVersioning.js +300 -0
  200. package/packages/workers/src/config/workerConfig.d.ts +5 -0
  201. package/packages/workers/src/config/workerConfig.d.ts.map +1 -0
  202. package/packages/workers/src/config/workerConfig.js +25 -0
  203. package/packages/workers/src/createQueueWorker.d.ts +26 -0
  204. package/packages/workers/src/createQueueWorker.d.ts.map +1 -0
  205. package/packages/workers/src/createQueueWorker.js +367 -0
  206. package/packages/workers/src/dashboard/index.d.ts +2 -0
  207. package/packages/workers/src/dashboard/index.d.ts.map +1 -0
  208. package/packages/workers/src/dashboard/index.js +1 -0
  209. package/packages/workers/src/dashboard/types.d.ts +123 -0
  210. package/packages/workers/src/dashboard/types.d.ts.map +1 -0
  211. package/packages/workers/src/dashboard/types.js +1 -0
  212. package/packages/workers/src/dashboard/workers-api.d.ts +5 -0
  213. package/packages/workers/src/dashboard/workers-api.d.ts.map +1 -0
  214. package/packages/workers/src/dashboard/workers-api.js +738 -0
  215. package/packages/workers/src/helper/index.d.ts +6 -0
  216. package/packages/workers/src/helper/index.d.ts.map +1 -0
  217. package/packages/workers/src/helper/index.js +10 -0
  218. package/packages/workers/src/http/WorkerApiController.d.ts +39 -0
  219. package/packages/workers/src/http/WorkerApiController.d.ts.map +1 -0
  220. package/packages/workers/src/http/WorkerApiController.js +313 -0
  221. package/packages/workers/src/http/WorkerController.d.ts +375 -0
  222. package/packages/workers/src/http/WorkerController.d.ts.map +1 -0
  223. package/packages/workers/src/http/WorkerController.js +1454 -0
  224. package/packages/workers/src/http/WorkerMonitoringService.d.ts +12 -0
  225. package/packages/workers/src/http/WorkerMonitoringService.d.ts.map +1 -0
  226. package/packages/workers/src/http/WorkerMonitoringService.js +89 -0
  227. package/packages/workers/src/http/middleware/CustomValidation.d.ts +93 -0
  228. package/packages/workers/src/http/middleware/CustomValidation.d.ts.map +1 -0
  229. package/packages/workers/src/http/middleware/CustomValidation.js +270 -0
  230. package/packages/workers/src/http/middleware/DatacenterValidator.d.ts +4 -0
  231. package/packages/workers/src/http/middleware/DatacenterValidator.d.ts.map +1 -0
  232. package/packages/workers/src/http/middleware/DatacenterValidator.js +94 -0
  233. package/packages/workers/src/http/middleware/EditWorkerValidation.d.ts +8 -0
  234. package/packages/workers/src/http/middleware/EditWorkerValidation.d.ts.map +1 -0
  235. package/packages/workers/src/http/middleware/EditWorkerValidation.js +56 -0
  236. package/packages/workers/src/http/middleware/FeaturesValidator.d.ts +4 -0
  237. package/packages/workers/src/http/middleware/FeaturesValidator.d.ts.map +1 -0
  238. package/packages/workers/src/http/middleware/FeaturesValidator.js +60 -0
  239. package/packages/workers/src/http/middleware/InfrastructureValidator.d.ts +32 -0
  240. package/packages/workers/src/http/middleware/InfrastructureValidator.d.ts.map +1 -0
  241. package/packages/workers/src/http/middleware/InfrastructureValidator.js +226 -0
  242. package/packages/workers/src/http/middleware/OptionsValidator.d.ts +4 -0
  243. package/packages/workers/src/http/middleware/OptionsValidator.d.ts.map +1 -0
  244. package/packages/workers/src/http/middleware/OptionsValidator.js +112 -0
  245. package/packages/workers/src/http/middleware/PayloadSanitizer.d.ts +8 -0
  246. package/packages/workers/src/http/middleware/PayloadSanitizer.d.ts.map +1 -0
  247. package/packages/workers/src/http/middleware/PayloadSanitizer.js +42 -0
  248. package/packages/workers/src/http/middleware/ProcessorPathSanitizer.d.ts +4 -0
  249. package/packages/workers/src/http/middleware/ProcessorPathSanitizer.d.ts.map +1 -0
  250. package/packages/workers/src/http/middleware/ProcessorPathSanitizer.js +140 -0
  251. package/packages/workers/src/http/middleware/QueueNameSanitizer.d.ts +4 -0
  252. package/packages/workers/src/http/middleware/QueueNameSanitizer.d.ts.map +1 -0
  253. package/packages/workers/src/http/middleware/QueueNameSanitizer.js +45 -0
  254. package/packages/workers/src/http/middleware/ValidateDriver.d.ts +8 -0
  255. package/packages/workers/src/http/middleware/ValidateDriver.d.ts.map +1 -0
  256. package/packages/workers/src/http/middleware/ValidateDriver.js +20 -0
  257. package/packages/workers/src/http/middleware/VersionSanitizer.d.ts +4 -0
  258. package/packages/workers/src/http/middleware/VersionSanitizer.d.ts.map +1 -0
  259. package/packages/workers/src/http/middleware/VersionSanitizer.js +25 -0
  260. package/packages/workers/src/http/middleware/WorkerNameSanitizer.d.ts +4 -0
  261. package/packages/workers/src/http/middleware/WorkerNameSanitizer.d.ts.map +1 -0
  262. package/packages/workers/src/http/middleware/WorkerNameSanitizer.js +46 -0
  263. package/packages/workers/src/http/middleware/WorkerValidationChain.d.ts +28 -0
  264. package/packages/workers/src/http/middleware/WorkerValidationChain.d.ts.map +1 -0
  265. package/packages/workers/src/http/middleware/WorkerValidationChain.js +186 -0
  266. package/packages/workers/src/index.d.ts +47 -0
  267. package/packages/workers/src/index.d.ts.map +1 -0
  268. package/packages/workers/src/index.js +48 -0
  269. package/packages/workers/src/routes/workers.d.ts +13 -0
  270. package/packages/workers/src/routes/workers.d.ts.map +1 -0
  271. package/packages/workers/src/routes/workers.js +126 -0
  272. package/packages/workers/src/storage/WorkerStore.d.ts +52 -0
  273. package/packages/workers/src/storage/WorkerStore.d.ts.map +1 -0
  274. package/packages/workers/src/storage/WorkerStore.js +259 -0
  275. package/packages/workers/src/telemetry/api/TelemetryAPI.d.ts +47 -0
  276. package/packages/workers/src/telemetry/api/TelemetryAPI.d.ts.map +1 -0
  277. package/packages/workers/src/telemetry/api/TelemetryAPI.js +219 -0
  278. package/packages/workers/src/telemetry/api/TelemetryMonitoringService.d.ts +18 -0
  279. package/packages/workers/src/telemetry/api/TelemetryMonitoringService.d.ts.map +1 -0
  280. package/packages/workers/src/telemetry/api/TelemetryMonitoringService.js +140 -0
  281. package/packages/workers/src/telemetry/components/AlertPanel.d.ts +2 -0
  282. package/packages/workers/src/telemetry/components/AlertPanel.d.ts.map +1 -0
  283. package/packages/workers/src/telemetry/components/AlertPanel.js +13 -0
  284. package/packages/workers/src/telemetry/components/CostTracking.d.ts +2 -0
  285. package/packages/workers/src/telemetry/components/CostTracking.d.ts.map +1 -0
  286. package/packages/workers/src/telemetry/components/CostTracking.js +14 -0
  287. package/packages/workers/src/telemetry/components/ResourceUsageChart.d.ts +2 -0
  288. package/packages/workers/src/telemetry/components/ResourceUsageChart.d.ts.map +1 -0
  289. package/packages/workers/src/telemetry/components/ResourceUsageChart.js +11 -0
  290. package/packages/workers/src/telemetry/components/WorkerHealthChart.d.ts +2 -0
  291. package/packages/workers/src/telemetry/components/WorkerHealthChart.d.ts.map +1 -0
  292. package/packages/workers/src/telemetry/components/WorkerHealthChart.js +11 -0
  293. package/packages/workers/src/telemetry/index.d.ts +16 -0
  294. package/packages/workers/src/telemetry/index.d.ts.map +1 -0
  295. package/packages/workers/src/telemetry/index.js +60 -0
  296. package/packages/workers/src/telemetry/routes/dashboard.d.ts +7 -0
  297. package/packages/workers/src/telemetry/routes/dashboard.d.ts.map +1 -0
  298. package/packages/workers/src/telemetry/routes/dashboard.js +608 -0
  299. package/packages/workers/src/type.d.ts +77 -0
  300. package/packages/workers/src/type.d.ts.map +1 -0
  301. package/packages/workers/src/type.js +1 -0
  302. package/packages/workers/src/ui/router/EmbeddedAssets.d.ts +5 -0
  303. package/packages/workers/src/ui/router/EmbeddedAssets.d.ts.map +1 -0
  304. package/packages/workers/src/ui/router/EmbeddedAssets.js +13 -0
  305. package/packages/workers/src/ui/router/ui.d.ts +4 -0
  306. package/packages/workers/src/ui/router/ui.d.ts.map +1 -0
  307. package/packages/workers/src/ui/router/ui.js +208 -0
  308. package/packages/workers/src/ui/types/worker-ui.d.ts +230 -0
  309. package/packages/workers/src/ui/types/worker-ui.d.ts.map +1 -0
  310. package/packages/workers/src/ui/types/worker-ui.js +5 -0
  311. package/routes/api.d.ts +7 -0
  312. package/routes/api.d.ts.map +1 -0
  313. package/routes/api.js +129 -0
  314. package/routes/broadcast.d.ts +9 -0
  315. package/routes/broadcast.d.ts.map +1 -0
  316. package/routes/broadcast.js +27 -0
  317. package/routes/storage.d.ts +4 -0
  318. package/routes/storage.d.ts.map +1 -0
  319. package/routes/storage.js +35 -0
  320. package/src/boot/bootstrap.js +27 -11
  321. package/src/boot/registry/runtime.d.ts.map +1 -1
  322. package/src/boot/registry/runtime.js +11 -0
  323. package/src/cache/Cache.d.ts.map +1 -1
  324. package/src/cache/Cache.js +40 -8
  325. package/src/cache/drivers/KVRemoteDriver.d.ts +1 -1
  326. package/src/cache/drivers/KVRemoteDriver.d.ts.map +1 -1
  327. package/src/cache/drivers/KVRemoteDriver.js +259 -44
  328. package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
  329. package/src/cache/drivers/MemoryDriver.js +10 -2
  330. package/src/cache/drivers/RedisDriver.d.ts.map +1 -1
  331. package/src/cache/drivers/RedisDriver.js +256 -33
  332. package/src/cli/CLI.d.ts.map +1 -1
  333. package/src/cli/CLI.js +12 -0
  334. package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
  335. package/src/cli/commands/ConfigCommand.js +3 -5
  336. package/src/cli/commands/D1LearnCommand.d.ts +9 -0
  337. package/src/cli/commands/D1LearnCommand.d.ts.map +1 -0
  338. package/src/cli/commands/D1LearnCommand.js +143 -0
  339. package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
  340. package/src/cli/commands/D1MigrateCommand.js +55 -16
  341. package/src/cli/commands/InitContainerCommand.d.ts.map +1 -1
  342. package/src/cli/commands/InitContainerCommand.js +30 -15
  343. package/src/cli/commands/InitEcosystemCommand.d.ts +6 -0
  344. package/src/cli/commands/InitEcosystemCommand.d.ts.map +1 -0
  345. package/src/cli/commands/InitEcosystemCommand.js +51 -0
  346. package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
  347. package/src/cli/commands/MigrateCommand.js +78 -36
  348. package/src/cli/commands/MigrateWorkerCommand.d.ts.map +1 -1
  349. package/src/cli/commands/MigrateWorkerCommand.js +36 -2
  350. package/src/cli/commands/NewCommand.d.ts.map +1 -1
  351. package/src/cli/commands/NewCommand.js +33 -0
  352. package/src/cli/commands/PutCommand.d.ts +6 -0
  353. package/src/cli/commands/PutCommand.d.ts.map +1 -0
  354. package/src/cli/commands/PutCommand.js +173 -0
  355. package/src/cli/commands/QueueRecoveryCommand.d.ts.map +1 -1
  356. package/src/cli/commands/QueueRecoveryCommand.js +113 -14
  357. package/src/cli/commands/ScheduleListCommand.d.ts +6 -0
  358. package/src/cli/commands/ScheduleListCommand.d.ts.map +1 -0
  359. package/src/cli/commands/ScheduleListCommand.js +62 -0
  360. package/src/cli/commands/ScheduleRunCommand.d.ts +6 -0
  361. package/src/cli/commands/ScheduleRunCommand.d.ts.map +1 -0
  362. package/src/cli/commands/ScheduleRunCommand.js +32 -0
  363. package/src/cli/commands/ScheduleStartCommand.d.ts +6 -0
  364. package/src/cli/commands/ScheduleStartCommand.d.ts.map +1 -0
  365. package/src/cli/commands/ScheduleStartCommand.js +40 -0
  366. package/src/cli/commands/SecretsCommand.d.ts.map +1 -1
  367. package/src/cli/commands/SecretsCommand.js +2 -2
  368. package/src/cli/commands/StartCommand.d.ts.map +1 -1
  369. package/src/cli/commands/StartCommand.js +23 -1
  370. package/src/cli/commands/schedule/ScheduleCliSupport.d.ts +6 -0
  371. package/src/cli/commands/schedule/ScheduleCliSupport.d.ts.map +1 -0
  372. package/src/cli/commands/schedule/ScheduleCliSupport.js +55 -0
  373. package/src/cli/config/ConfigManager.d.ts.map +1 -1
  374. package/src/cli/config/ConfigManager.js +8 -1
  375. package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -1
  376. package/src/cli/d1/D1SqlMigrations.js +11 -1
  377. package/src/cli/d1/WranglerConfig.d.ts.map +1 -1
  378. package/src/cli/d1/WranglerConfig.js +34 -2
  379. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  380. package/src/cli/scaffolding/ProjectScaffolder.js +65 -73
  381. package/src/cli/services/VersionChecker.d.ts.map +1 -1
  382. package/src/cli/services/VersionChecker.js +5 -1
  383. package/src/cli/utils/DatabaseCliUtils.d.ts.map +1 -1
  384. package/src/cli/utils/DatabaseCliUtils.js +6 -1
  385. package/src/cli/utils/DistPackager.d.ts.map +1 -1
  386. package/src/cli/utils/DistPackager.js +25 -0
  387. package/src/cli/utils/EnvFileLoader.d.ts +1 -0
  388. package/src/cli/utils/EnvFileLoader.d.ts.map +1 -1
  389. package/src/cli/utils/EnvFileLoader.js +47 -14
  390. package/src/cli.d.ts +5 -0
  391. package/src/cli.d.ts.map +1 -0
  392. package/src/cli.js +4 -0
  393. package/src/collections/index.d.ts +2 -2
  394. package/src/collections/index.d.ts.map +1 -1
  395. package/src/collections/index.js +1 -1
  396. package/src/common/RemoteSignedJson.d.ts.map +1 -1
  397. package/src/common/RemoteSignedJson.js +58 -25
  398. package/src/common/utility.d.ts.map +1 -1
  399. package/src/common/utility.js +2 -6
  400. package/src/config/cache.js +1 -1
  401. package/src/config/cloudflare.d.ts.map +1 -1
  402. package/src/config/cloudflare.js +19 -8
  403. package/src/config/env.d.ts +7 -0
  404. package/src/config/env.d.ts.map +1 -1
  405. package/src/config/env.js +10 -2
  406. package/src/config/queue.js +1 -1
  407. package/src/functions/cloudflare.d.ts.map +1 -1
  408. package/src/functions/cloudflare.js +4 -2
  409. package/src/helper/index.d.ts +225 -0
  410. package/src/helper/index.d.ts.map +1 -0
  411. package/src/helper/index.js +347 -0
  412. package/src/index.d.ts +3 -6
  413. package/src/index.d.ts.map +1 -1
  414. package/src/index.js +7 -9
  415. package/src/middleware/JwtAuthMiddleware.d.ts.map +1 -1
  416. package/src/middleware/JwtAuthMiddleware.js +11 -5
  417. package/src/migrations/MigrationDiscovery.d.ts.map +1 -1
  418. package/src/migrations/MigrationDiscovery.js +2 -1
  419. package/src/orm/DatabaseAdapter.d.ts +1 -0
  420. package/src/orm/DatabaseAdapter.d.ts.map +1 -1
  421. package/src/orm/SchemaStatemenWriter.d.ts +15 -0
  422. package/src/orm/SchemaStatemenWriter.d.ts.map +1 -0
  423. package/src/orm/SchemaStatemenWriter.js +78 -0
  424. package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
  425. package/src/orm/adapters/D1Adapter.js +52 -2
  426. package/src/orm/adapters/D1RemoteAdapter.d.ts.map +1 -1
  427. package/src/orm/adapters/D1RemoteAdapter.js +137 -89
  428. package/src/orm/adapters/MySQLProxyAdapter.d.ts.map +1 -1
  429. package/src/orm/adapters/MySQLProxyAdapter.js +100 -81
  430. package/src/orm/adapters/PostgreSQLProxyAdapter.d.ts.map +1 -1
  431. package/src/orm/adapters/PostgreSQLProxyAdapter.js +26 -10
  432. package/src/orm/adapters/SqlProxyAdapterUtils.d.ts.map +1 -1
  433. package/src/orm/adapters/SqlProxyAdapterUtils.js +2 -1
  434. package/src/orm/adapters/SqlProxyRegistryMode.d.ts +12 -0
  435. package/src/orm/adapters/SqlProxyRegistryMode.d.ts.map +1 -0
  436. package/src/orm/adapters/SqlProxyRegistryMode.js +24 -0
  437. package/src/orm/adapters/SqlServerProxyAdapter.d.ts +3 -0
  438. package/src/orm/adapters/SqlServerProxyAdapter.d.ts.map +1 -1
  439. package/src/orm/adapters/SqlServerProxyAdapter.js +125 -117
  440. package/src/orm/migrations/MigrationStore.js +1 -1
  441. package/src/proxy/ProxyRequestParsing.d.ts +9 -0
  442. package/src/proxy/ProxyRequestParsing.d.ts.map +1 -0
  443. package/src/proxy/ProxyRequestParsing.js +16 -0
  444. package/src/proxy/RequestValidator.d.ts.map +1 -1
  445. package/src/proxy/RequestValidator.js +2 -1
  446. package/src/proxy/SigningService.js +2 -2
  447. package/src/proxy/SqlProxyDbOverrides.d.ts +17 -0
  448. package/src/proxy/SqlProxyDbOverrides.d.ts.map +1 -0
  449. package/src/proxy/SqlProxyDbOverrides.js +1 -0
  450. package/src/proxy/SqlProxyServerDeps.d.ts +12 -0
  451. package/src/proxy/SqlProxyServerDeps.d.ts.map +1 -0
  452. package/src/proxy/SqlProxyServerDeps.js +9 -0
  453. package/src/proxy/StatementPayloadValidator.d.ts +13 -0
  454. package/src/proxy/StatementPayloadValidator.d.ts.map +1 -0
  455. package/src/proxy/StatementPayloadValidator.js +18 -0
  456. package/src/proxy/StatementRegistryLoader.d.ts +2 -0
  457. package/src/proxy/StatementRegistryLoader.d.ts.map +1 -0
  458. package/src/proxy/StatementRegistryLoader.js +36 -0
  459. package/src/proxy/StatementRegistryResolver.d.ts +15 -0
  460. package/src/proxy/StatementRegistryResolver.d.ts.map +1 -0
  461. package/src/proxy/StatementRegistryResolver.js +34 -0
  462. package/src/proxy/d1/ZintrustD1Proxy.d.ts +2 -1
  463. package/src/proxy/d1/ZintrustD1Proxy.d.ts.map +1 -1
  464. package/src/proxy/d1/ZintrustD1Proxy.js +2 -1
  465. package/src/proxy/isMutatingSql.d.ts +2 -0
  466. package/src/proxy/isMutatingSql.d.ts.map +1 -0
  467. package/src/proxy/isMutatingSql.js +12 -0
  468. package/src/proxy/kv/ZintrustKvProxy.d.ts +2 -1
  469. package/src/proxy/kv/ZintrustKvProxy.d.ts.map +1 -1
  470. package/src/proxy/kv/ZintrustKvProxy.js +2 -1
  471. package/src/proxy/mysql/MySqlProxyServer.d.ts +2 -8
  472. package/src/proxy/mysql/MySqlProxyServer.d.ts.map +1 -1
  473. package/src/proxy/mysql/MySqlProxyServer.js +84 -51
  474. package/src/proxy/postgres/PostgresProxyServer.d.ts +2 -8
  475. package/src/proxy/postgres/PostgresProxyServer.d.ts.map +1 -1
  476. package/src/proxy/postgres/PostgresProxyServer.js +86 -48
  477. package/src/proxy/smtp/SmtpProxyServer.d.ts.map +1 -1
  478. package/src/proxy/smtp/SmtpProxyServer.js +6 -5
  479. package/src/proxy/sqlserver/SqlServerProxyServer.d.ts +2 -8
  480. package/src/proxy/sqlserver/SqlServerProxyServer.d.ts.map +1 -1
  481. package/src/proxy/sqlserver/SqlServerProxyServer.js +84 -49
  482. package/src/proxy.d.ts +4 -0
  483. package/src/proxy.d.ts.map +1 -0
  484. package/src/proxy.js +3 -0
  485. package/src/runtime/RuntimeAdapter.d.ts.map +1 -1
  486. package/src/runtime/RuntimeAdapter.js +30 -12
  487. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
  488. package/src/runtime/adapters/CloudflareAdapter.js +15 -4
  489. package/src/scheduler/Schedule.d.ts +36 -0
  490. package/src/scheduler/Schedule.d.ts.map +1 -0
  491. package/src/scheduler/Schedule.js +197 -0
  492. package/src/scheduler/ScheduleHttpGateway.d.ts +8 -0
  493. package/src/scheduler/ScheduleHttpGateway.d.ts.map +1 -0
  494. package/src/scheduler/ScheduleHttpGateway.js +196 -0
  495. package/src/scheduler/ScheduleRunner.d.ts +6 -0
  496. package/src/scheduler/ScheduleRunner.d.ts.map +1 -1
  497. package/src/scheduler/ScheduleRunner.js +166 -29
  498. package/src/scheduler/SchedulerRuntime.d.ts +15 -0
  499. package/src/scheduler/SchedulerRuntime.d.ts.map +1 -0
  500. package/src/scheduler/SchedulerRuntime.js +79 -0
  501. package/src/scheduler/cron/Cron.d.ts +19 -0
  502. package/src/scheduler/cron/Cron.d.ts.map +1 -0
  503. package/src/scheduler/cron/Cron.js +200 -0
  504. package/src/scheduler/leader/SchedulerLeader.d.ts +14 -0
  505. package/src/scheduler/leader/SchedulerLeader.d.ts.map +1 -0
  506. package/src/scheduler/leader/SchedulerLeader.js +187 -0
  507. package/src/scheduler/state/ScheduleStateStore.d.ts +27 -0
  508. package/src/scheduler/state/ScheduleStateStore.d.ts.map +1 -0
  509. package/src/scheduler/state/ScheduleStateStore.js +27 -0
  510. package/src/scheduler/types.d.ts +10 -0
  511. package/src/scheduler/types.d.ts.map +1 -1
  512. package/src/schedules/index.d.ts +1 -0
  513. package/src/schedules/index.d.ts.map +1 -1
  514. package/src/schedules/index.js +1 -0
  515. package/src/schedules/job-tracking-cleanup.d.ts +4 -0
  516. package/src/schedules/job-tracking-cleanup.d.ts.map +1 -0
  517. package/src/schedules/job-tracking-cleanup.js +116 -0
  518. package/src/schedules/log-cleanup.d.ts +1 -2
  519. package/src/schedules/log-cleanup.d.ts.map +1 -1
  520. package/src/schedules/log-cleanup.js +12 -15
  521. package/src/security/Sanitizer.d.ts.map +1 -1
  522. package/src/security/Sanitizer.js +1 -9
  523. package/src/security/SignedRequest.d.ts.map +1 -1
  524. package/src/security/SignedRequest.js +2 -2
  525. package/src/security/TokenRevocation.d.ts +19 -2
  526. package/src/security/TokenRevocation.d.ts.map +1 -1
  527. package/src/security/TokenRevocation.js +558 -30
  528. package/src/templates/docker/docker-compose.ecosystem.yml.tpl +301 -0
  529. package/src/templates/docker/docker-compose.schedules.yml.tpl +84 -0
  530. package/src/templates/project/basic/app/Controllers/AuthController.ts.tpl +11 -3
  531. package/src/templates/project/basic/app/Schedules/index.ts.tpl +0 -0
  532. package/src/templates/project/basic/config/database.ts.tpl +1 -1
  533. package/src/templates/project/basic/config/middleware.ts.tpl +23 -22
  534. package/src/templates/project/basic/wrangler.jsonc.tpl +28 -0
  535. package/src/toolkit/Secrets/Manifest.d.ts.map +1 -1
  536. package/src/toolkit/Secrets/Manifest.js +5 -7
  537. package/src/tools/mail/drivers/Smtp.d.ts.map +1 -1
  538. package/src/tools/mail/drivers/Smtp.js +7 -1
  539. package/src/tools/queue/JobReconciliationRunner.d.ts.map +1 -1
  540. package/src/tools/queue/JobReconciliationRunner.js +7 -39
  541. package/src/tools/queue/JobRecoveryDaemon.d.ts.map +1 -1
  542. package/src/tools/queue/JobRecoveryDaemon.js +116 -18
  543. package/src/tools/queue/JobStateTracker.d.ts +10 -1
  544. package/src/tools/queue/JobStateTracker.d.ts.map +1 -1
  545. package/src/tools/queue/JobStateTracker.js +24 -2
  546. package/src/tools/queue/JobStateTrackerDbPersistence.d.ts.map +1 -1
  547. package/src/tools/queue/JobStateTrackerDbPersistence.js +93 -2
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Worker Shutdown Coordinator
3
+ *
4
+ * Centralized graceful shutdown handling for the worker management system.
5
+ * Coordinates orderly shutdown of all worker modules and the WorkerFactory.
6
+ */
7
+ import { Logger } from '../../../src/index.js';
8
+ import { WorkerFactory } from './WorkerFactory.js';
9
+ // ============================================================================
10
+ // Implementation
11
+ // ============================================================================
12
+ const state = {
13
+ isShuttingDown: false,
14
+ completedAt: null,
15
+ startedAt: null,
16
+ reason: null,
17
+ };
18
+ let shutdownHandlersRegistered = false;
19
+ const signalHandlers = {};
20
+ /**
21
+ * Perform graceful shutdown of all worker modules
22
+ */
23
+ async function shutdown(options = {}) {
24
+ const { timeout = 30000, forceExit = true, signal = 'unknown' } = options;
25
+ // Prevent concurrent shutdowns
26
+ if (state.isShuttingDown) {
27
+ Logger.warn('Shutdown already in progress, ignoring duplicate request');
28
+ return;
29
+ }
30
+ state.isShuttingDown = true;
31
+ state.startedAt = new Date();
32
+ state.reason = `Signal: ${signal}`;
33
+ Logger.info('🛑 Initiating graceful shutdown of worker management system', {
34
+ signal,
35
+ timeout,
36
+ forceExit,
37
+ });
38
+ // Setup timeout for forced shutdown
39
+ let timeoutHandle = null;
40
+ if (forceExit && timeout > 0) {
41
+ // eslint-disable-next-line no-restricted-syntax
42
+ timeoutHandle = setTimeout(() => {
43
+ Logger.error('❌ Graceful shutdown timeout exceeded, forcing exit', { timeout });
44
+ process.exit(1);
45
+ }, timeout);
46
+ }
47
+ try {
48
+ // Shutdown WorkerFactory - this will coordinate shutdown of all modules
49
+ await WorkerFactory.shutdown();
50
+ state.completedAt = new Date();
51
+ const duration = state.completedAt.getTime() - (state.startedAt?.getTime() ?? 0);
52
+ Logger.info('✅ Worker management system shutdown complete', {
53
+ duration: `${duration}ms`,
54
+ signal,
55
+ });
56
+ // Clear timeout if successful
57
+ if (timeoutHandle) {
58
+ clearTimeout(timeoutHandle);
59
+ }
60
+ }
61
+ catch (error) {
62
+ Logger.error('❌ Error during worker management system shutdown', error);
63
+ throw error;
64
+ }
65
+ }
66
+ /**
67
+ * Register process signal handlers for graceful shutdown
68
+ */
69
+ function registerShutdownHandlers() {
70
+ if (shutdownHandlersRegistered) {
71
+ Logger.debug('Shutdown handlers already registered, skipping');
72
+ return;
73
+ }
74
+ Logger.debug('Registering worker management system shutdown handlers');
75
+ // SIGTERM - graceful shutdown (Docker, systemd, etc.)
76
+ signalHandlers.sigterm = async () => {
77
+ Logger.info('📨 Received SIGTERM signal');
78
+ try {
79
+ await shutdown({ signal: 'SIGTERM', timeout: 30000, forceExit: true });
80
+ }
81
+ catch (error) {
82
+ Logger.error('Error during SIGTERM shutdown', error);
83
+ }
84
+ };
85
+ process.on('SIGTERM', signalHandlers.sigterm);
86
+ // SIGINT - user interrupt (Ctrl+C) - REMOVED: handled by bootstrap.ts to prevent race condition
87
+ // process.on('SIGINT', async () => {
88
+ // Logger.info('📨 Received SIGINT signal');
89
+ // try {
90
+ // await shutdown({ signal: 'SIGINT', timeout: 30000, forceExit: true });
91
+ // } catch (error) {
92
+ // Logger.error('Error during SIGINT shutdown', error);
93
+ // }
94
+ // });
95
+ // SIGHUP - terminal closed
96
+ signalHandlers.sighup = async () => {
97
+ Logger.info('📨 Received SIGHUP signal');
98
+ try {
99
+ await shutdown({ signal: 'SIGHUP', timeout: 30000, forceExit: true });
100
+ }
101
+ catch (error) {
102
+ Logger.error('Error during SIGHUP shutdown', error);
103
+ }
104
+ };
105
+ process.on('SIGHUP', signalHandlers.sighup);
106
+ // Handle uncaught errors during shutdown
107
+ signalHandlers.uncaughtException = async (error) => {
108
+ Logger.error('💥 Uncaught exception during worker operations', error);
109
+ try {
110
+ await shutdown({ signal: 'uncaughtException', timeout: 10000, forceExit: true });
111
+ }
112
+ catch {
113
+ // Ignore errors during emergency shutdown
114
+ }
115
+ process.exit(1);
116
+ };
117
+ process.on('uncaughtException', signalHandlers.uncaughtException);
118
+ signalHandlers.unhandledRejection = (reason) => {
119
+ // Only log the error - don't shut down the entire application
120
+ Logger.error('💥 Unhandled promise rejection detected', reason);
121
+ Logger.warn('⚠️ This error has been logged but will not shut down the server');
122
+ Logger.warn('⚠️ Check the error context and fix the underlying issue');
123
+ };
124
+ process.on('unhandledRejection', signalHandlers.unhandledRejection);
125
+ shutdownHandlersRegistered = true;
126
+ Logger.debug('Worker management system shutdown handlers registered');
127
+ }
128
+ /**
129
+ * Unregister process signal handlers (for hot reload/testing)
130
+ */
131
+ function unregisterShutdownHandlers() {
132
+ if (!shutdownHandlersRegistered)
133
+ return;
134
+ if (signalHandlers.sigterm)
135
+ process.off('SIGTERM', signalHandlers.sigterm);
136
+ if (signalHandlers.sighup)
137
+ process.off('SIGHUP', signalHandlers.sighup);
138
+ if (signalHandlers.uncaughtException)
139
+ process.off('uncaughtException', signalHandlers.uncaughtException);
140
+ if (signalHandlers.unhandledRejection)
141
+ process.off('unhandledRejection', signalHandlers.unhandledRejection);
142
+ signalHandlers.sigterm = undefined;
143
+ signalHandlers.sighup = undefined;
144
+ signalHandlers.uncaughtException = undefined;
145
+ signalHandlers.unhandledRejection = undefined;
146
+ shutdownHandlersRegistered = false;
147
+ Logger.debug('Worker management system shutdown handlers unregistered');
148
+ }
149
+ /**
150
+ * Check if system is currently shutting down
151
+ */
152
+ function isShuttingDown() {
153
+ return state.isShuttingDown;
154
+ }
155
+ /**
156
+ * Get current shutdown state
157
+ */
158
+ function getShutdownState() {
159
+ return { ...state };
160
+ }
161
+ // ============================================================================
162
+ // Public API (Sealed Namespace)
163
+ // ============================================================================
164
+ export const WorkerShutdown = Object.freeze({
165
+ /**
166
+ * Perform graceful shutdown of all worker modules
167
+ */
168
+ shutdown,
169
+ /**
170
+ * Register process signal handlers for graceful shutdown
171
+ */
172
+ registerShutdownHandlers,
173
+ /**
174
+ * Unregister process signal handlers (for hot reload/testing)
175
+ */
176
+ unregisterShutdownHandlers,
177
+ /**
178
+ * Check if system is currently shutting down
179
+ */
180
+ isShuttingDown,
181
+ /**
182
+ * Get current shutdown state
183
+ */
184
+ getShutdownState,
185
+ });
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Worker Versioning System
3
+ * Semantic versioning support for workers with backward compatibility
4
+ * Sealed namespace for immutability
5
+ */
6
+ export type SemanticVersion = {
7
+ major: number;
8
+ minor: number;
9
+ patch: number;
10
+ prerelease?: string;
11
+ build?: string;
12
+ };
13
+ export type WorkerVersion = {
14
+ workerName: string;
15
+ version: SemanticVersion;
16
+ createdAt: Date;
17
+ deprecatedAt?: Date;
18
+ eolDate?: Date;
19
+ isActive: boolean;
20
+ isDeprecated: boolean;
21
+ migrationPath?: string;
22
+ changelog?: string;
23
+ breakingChanges?: string[];
24
+ };
25
+ export type VersionCompatibility = {
26
+ sourceVersion: SemanticVersion;
27
+ targetVersion: SemanticVersion;
28
+ compatible: boolean;
29
+ requiresMigration: boolean;
30
+ breakingChanges: string[];
31
+ recommendations: string[];
32
+ };
33
+ /**
34
+ * Worker Versioning - Sealed namespace
35
+ */
36
+ export declare const WorkerVersioning: Readonly<{
37
+ /**
38
+ * Register a worker version
39
+ */
40
+ register(workerVersion: Omit<WorkerVersion, "createdAt" | "isActive" | "isDeprecated">): void;
41
+ /**
42
+ * Get worker version
43
+ */
44
+ getVersion(workerName: string, versionStr: string): WorkerVersion | null;
45
+ /**
46
+ * Get all versions for a worker
47
+ */
48
+ getVersions(workerName: string, includeDeprecated?: boolean): ReadonlyArray<WorkerVersion>;
49
+ /**
50
+ * Get latest version
51
+ */
52
+ getLatest(workerName: string): WorkerVersion | null;
53
+ /**
54
+ * Deprecate a version
55
+ */
56
+ deprecate(workerName: string, versionStr: string, migrationPath?: string, eolDate?: Date): void;
57
+ /**
58
+ * Deactivate a version (stop accepting new jobs)
59
+ */
60
+ deactivate(workerName: string, versionStr: string): void;
61
+ /**
62
+ * Activate a version
63
+ */
64
+ activate(workerName: string, versionStr: string): void;
65
+ /**
66
+ * Check compatibility between versions
67
+ */
68
+ checkCompatibility(workerName: string, sourceVersionStr: string, targetVersionStr: string): VersionCompatibility;
69
+ /**
70
+ * Set version alias
71
+ */
72
+ setAlias(workerName: string, alias: string, versionStr: string): void;
73
+ /**
74
+ * Get version by alias
75
+ */
76
+ resolveAlias(workerName: string, alias: string): string | null;
77
+ /**
78
+ * Parse version string
79
+ */
80
+ parse(versionStr: string): SemanticVersion;
81
+ /**
82
+ * Convert version to string
83
+ */
84
+ stringify(version: SemanticVersion): string;
85
+ /**
86
+ * Compare two versions
87
+ */
88
+ compare(v1Str: string, v2Str: string): number;
89
+ /**
90
+ * Get version summary
91
+ */
92
+ getSummary(workerName: string): {
93
+ totalVersions: number;
94
+ activeVersions: number;
95
+ deprecatedVersions: number;
96
+ latest: string | null;
97
+ stable: string | null;
98
+ };
99
+ /**
100
+ * Clear all versions for a worker
101
+ */
102
+ clear(workerName: string): void;
103
+ /**
104
+ * Shutdown
105
+ */
106
+ shutdown(): void;
107
+ }>;
108
+ //# sourceMappingURL=WorkerVersioning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerVersioning.d.ts","sourceRoot":"","sources":["../../../../packages/workers/src/WorkerVersioning.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,eAAe,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,eAAe,CAAC;IAC/B,aAAa,EAAE,eAAe,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAoEF;;GAEG;AACH,eAAO,MAAM,gBAAgB;IAC3B;;OAEG;4BACqB,IAAI,CAAC,aAAa,EAAE,WAAW,GAAG,UAAU,GAAG,cAAc,CAAC,GAAG,IAAI;IA2C7F;;OAEG;2BACoB,MAAM,cAAc,MAAM,GAAG,aAAa,GAAG,IAAI;IAoBxE;;OAEG;4BACqB,MAAM,gCAA8B,aAAa,CAAC,aAAa,CAAC;IAUxF;;OAEG;0BACmB,MAAM,GAAG,aAAa,GAAG,IAAI;IAWnD;;OAEG;0BACmB,MAAM,cAAc,MAAM,kBAAkB,MAAM,YAAY,IAAI,GAAG,IAAI;IAuB/F;;OAEG;2BACoB,MAAM,cAAc,MAAM,GAAG,IAAI;IAiBxD;;OAEG;yBACkB,MAAM,cAAc,MAAM,GAAG,IAAI;IAkBtD;;OAEG;mCAEW,MAAM,oBACA,MAAM,oBACN,MAAM,GACvB,oBAAoB;IAqCvB;;OAEG;yBACkB,MAAM,SAAS,MAAM,cAAc,MAAM,GAAG,IAAI;IAerE;;OAEG;6BACsB,MAAM,SAAS,MAAM,GAAG,MAAM,GAAG,IAAI;IAK9D;;OAEG;sBACe,MAAM,GAAG,eAAe;IAI1C;;OAEG;uBACgB,eAAe,GAAG,MAAM;IAI3C;;OAEG;mBACY,MAAM,SAAS,MAAM,GAAG,MAAM;IAM7C;;OAEG;2BACoB,MAAM,GAAG;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB;IAcD;;OAEG;sBACe,MAAM,GAAG,IAAI;IAkB/B;;OAEG;gBACS,IAAI;EAQhB,CAAC"}
@@ -0,0 +1,300 @@
1
+ /**
2
+ * Worker Versioning System
3
+ * Semantic versioning support for workers with backward compatibility
4
+ * Sealed namespace for immutability
5
+ */
6
+ import { ErrorFactory, Logger } from '../../../src/index.js';
7
+ // Internal state
8
+ const workerVersions = new Map();
9
+ const versionAliases = new Map(); // 'latest', 'stable', etc. -> version string
10
+ /**
11
+ * Helper: Parse version string
12
+ */
13
+ const parseVersion = (versionStr) => {
14
+ const match = new RegExp(/^(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z0-9.-]+))?(?:\+([a-zA-Z0-9.-]+))?$/).exec(versionStr);
15
+ if (!match) {
16
+ throw ErrorFactory.createConfigError(`Invalid version format: ${versionStr}`);
17
+ }
18
+ return {
19
+ major: Number.parseInt(match[1], 10),
20
+ minor: Number.parseInt(match[2], 10),
21
+ patch: Number.parseInt(match[3], 10),
22
+ prerelease: match[4],
23
+ build: match[5],
24
+ };
25
+ };
26
+ /**
27
+ * Helper: Convert version to string
28
+ */
29
+ const versionToString = (version) => {
30
+ let str = `${version.major}.${version.minor}.${version.patch}`;
31
+ if (typeof version.prerelease === 'string' && version.prerelease.length > 0) {
32
+ str += `-${version.prerelease}`;
33
+ }
34
+ if (typeof version.build === 'string' && version.build.length > 0) {
35
+ str += `+${version.build}`;
36
+ }
37
+ return str;
38
+ };
39
+ /**
40
+ * Helper: Compare versions
41
+ * Returns: -1 if v1 < v2, 0 if v1 === v2, 1 if v1 > v2
42
+ */
43
+ const compareVersions = (v1, v2) => {
44
+ if (v1.major !== v2.major)
45
+ return v1.major - v2.major;
46
+ if (v1.minor !== v2.minor)
47
+ return v1.minor - v2.minor;
48
+ if (v1.patch !== v2.patch)
49
+ return v1.patch - v2.patch;
50
+ // Prerelease versions have lower precedence
51
+ if (v1.prerelease === undefined && v2.prerelease !== undefined)
52
+ return 1;
53
+ if (v1.prerelease !== undefined && v2.prerelease === undefined)
54
+ return -1;
55
+ if (v1.prerelease !== undefined && v2.prerelease !== undefined) {
56
+ return v1.prerelease.localeCompare(v2.prerelease);
57
+ }
58
+ return 0;
59
+ };
60
+ /**
61
+ * Helper: Check if versions are compatible (no breaking changes)
62
+ */
63
+ const areVersionsCompatible = (v1, v2) => {
64
+ // Same major version = compatible (semver rules)
65
+ return v1.major === v2.major;
66
+ };
67
+ /**
68
+ * Worker Versioning - Sealed namespace
69
+ */
70
+ export const WorkerVersioning = Object.freeze({
71
+ /**
72
+ * Register a worker version
73
+ */
74
+ register(workerVersion) {
75
+ const { workerName, version } = workerVersion;
76
+ const versionStr = versionToString(version);
77
+ let versions = workerVersions.get(workerName);
78
+ if (!versions) {
79
+ versions = [];
80
+ workerVersions.set(workerName, versions);
81
+ }
82
+ // Check if version already exists
83
+ const existing = versions.find((v) => versionToString(v.version) === versionStr);
84
+ if (existing) {
85
+ ErrorFactory.createConfigError(`Version ${versionStr} already registered for worker "${workerName}"`);
86
+ }
87
+ const fullVersion = {
88
+ ...workerVersion,
89
+ createdAt: new Date(),
90
+ isActive: true,
91
+ isDeprecated: false,
92
+ };
93
+ versions.push(fullVersion);
94
+ // Sort by version (descending)
95
+ versions.sort((a, b) => -compareVersions(a.version, b.version));
96
+ // Update 'latest' alias if this is the newest version
97
+ if (versions[0] === fullVersion) {
98
+ const aliasKey = `${workerName}:latest`;
99
+ versionAliases.set(aliasKey, versionStr);
100
+ }
101
+ Logger.info(`Worker version registered: ${workerName}@${versionStr}`, {
102
+ isActive: fullVersion.isActive,
103
+ });
104
+ },
105
+ /**
106
+ * Get worker version
107
+ */
108
+ getVersion(workerName, versionStr) {
109
+ // Check if it's an alias
110
+ let newVersionStr = versionStr;
111
+ const aliasKey = `${workerName}:${newVersionStr}`;
112
+ const aliasedVersion = versionAliases.get(aliasKey);
113
+ if (aliasedVersion !== undefined) {
114
+ newVersionStr = aliasedVersion;
115
+ }
116
+ const versions = workerVersions.get(workerName);
117
+ if (!versions)
118
+ return null;
119
+ const version = parseVersion(newVersionStr);
120
+ const found = versions.find((v) => compareVersions(v.version, version) === 0);
121
+ return found ? { ...found } : null;
122
+ },
123
+ /**
124
+ * Get all versions for a worker
125
+ */
126
+ getVersions(workerName, includeDeprecated = false) {
127
+ const versions = workerVersions.get(workerName) ?? [];
128
+ if (!includeDeprecated) {
129
+ return versions.filter((v) => !v.isDeprecated);
130
+ }
131
+ return versions.map((v) => ({ ...v }));
132
+ },
133
+ /**
134
+ * Get latest version
135
+ */
136
+ getLatest(workerName) {
137
+ const versions = workerVersions.get(workerName);
138
+ if (!versions || versions.length === 0)
139
+ return null;
140
+ // Already sorted by version (descending)
141
+ const latest = versions.find((v) => v.isActive && !v.isDeprecated);
142
+ return latest ? { ...latest } : null;
143
+ },
144
+ /**
145
+ * Deprecate a version
146
+ */
147
+ deprecate(workerName, versionStr, migrationPath, eolDate) {
148
+ const version = WorkerVersioning.getVersion(workerName, versionStr);
149
+ if (!version) {
150
+ throw ErrorFactory.createNotFoundError(`Version ${versionStr} not found for worker "${workerName}"`);
151
+ }
152
+ const versions = workerVersions.get(workerName) ?? [];
153
+ const index = versions.findIndex((v) => versionToString(v.version) === versionStr);
154
+ versions[index].isDeprecated = true;
155
+ versions[index].deprecatedAt = new Date();
156
+ versions[index].migrationPath = migrationPath;
157
+ versions[index].eolDate = eolDate;
158
+ Logger.warn(`Worker version deprecated: ${workerName}@${versionStr}`, {
159
+ migrationPath,
160
+ eolDate,
161
+ });
162
+ },
163
+ /**
164
+ * Deactivate a version (stop accepting new jobs)
165
+ */
166
+ deactivate(workerName, versionStr) {
167
+ const version = WorkerVersioning.getVersion(workerName, versionStr);
168
+ if (!version) {
169
+ throw ErrorFactory.createNotFoundError(`Version ${versionStr} not found for worker "${workerName}"`);
170
+ }
171
+ const versions = workerVersions.get(workerName) ?? [];
172
+ const index = versions.findIndex((v) => versionToString(v.version) === versionStr);
173
+ versions[index].isActive = false;
174
+ Logger.info(`Worker version deactivated: ${workerName}@${versionStr}`);
175
+ },
176
+ /**
177
+ * Activate a version
178
+ */
179
+ activate(workerName, versionStr) {
180
+ const version = WorkerVersioning.getVersion(workerName, versionStr);
181
+ if (!version) {
182
+ throw ErrorFactory.createNotFoundError(`Version ${versionStr} not found for worker "${workerName}"`);
183
+ }
184
+ const getWorkerVersions = workerVersions.get(workerName);
185
+ const versions = getWorkerVersions ?? [];
186
+ const index = versions.findIndex((v) => versionToString(v.version) === versionStr);
187
+ versions[index].isActive = true;
188
+ Logger.info(`Worker version activated: ${workerName}@${versionStr}`);
189
+ },
190
+ /**
191
+ * Check compatibility between versions
192
+ */
193
+ checkCompatibility(workerName, sourceVersionStr, targetVersionStr) {
194
+ const sourceVersion = parseVersion(sourceVersionStr);
195
+ const targetVersion = parseVersion(targetVersionStr);
196
+ const source = WorkerVersioning.getVersion(workerName, sourceVersionStr);
197
+ const target = WorkerVersioning.getVersion(workerName, targetVersionStr);
198
+ const compatible = areVersionsCompatible(sourceVersion, targetVersion);
199
+ const requiresMigration = !compatible || sourceVersion.major < targetVersion.major;
200
+ const breakingChanges = target?.breakingChanges ?? [];
201
+ const recommendations = [];
202
+ if (target?.isDeprecated === true) {
203
+ recommendations.push(`Target version is deprecated. Consider migrating to ${(target.migrationPath ?? '') || 'latest'}`);
204
+ }
205
+ if (!compatible) {
206
+ recommendations.push('Major version change detected. Review breaking changes carefully.');
207
+ }
208
+ if (source?.eolDate && source.eolDate < new Date()) {
209
+ recommendations.push('Source version has reached end of life. Migration is required.');
210
+ }
211
+ return {
212
+ sourceVersion,
213
+ targetVersion,
214
+ compatible,
215
+ requiresMigration,
216
+ breakingChanges,
217
+ recommendations,
218
+ };
219
+ },
220
+ /**
221
+ * Set version alias
222
+ */
223
+ setAlias(workerName, alias, versionStr) {
224
+ const version = WorkerVersioning.getVersion(workerName, versionStr);
225
+ if (!version) {
226
+ throw ErrorFactory.createNotFoundError(`Version ${versionStr} not found for worker "${workerName}"`);
227
+ }
228
+ const aliasKey = `${workerName}:${alias}`;
229
+ versionAliases.set(aliasKey, versionStr);
230
+ Logger.info(`Version alias set: ${alias} -> ${workerName}@${versionStr}`);
231
+ },
232
+ /**
233
+ * Get version by alias
234
+ */
235
+ resolveAlias(workerName, alias) {
236
+ const aliasKey = `${workerName}:${alias}`;
237
+ return versionAliases.get(aliasKey) ?? null;
238
+ },
239
+ /**
240
+ * Parse version string
241
+ */
242
+ parse(versionStr) {
243
+ return parseVersion(versionStr);
244
+ },
245
+ /**
246
+ * Convert version to string
247
+ */
248
+ stringify(version) {
249
+ return versionToString(version);
250
+ },
251
+ /**
252
+ * Compare two versions
253
+ */
254
+ compare(v1Str, v2Str) {
255
+ const v1 = parseVersion(v1Str);
256
+ const v2 = parseVersion(v2Str);
257
+ return compareVersions(v1, v2);
258
+ },
259
+ /**
260
+ * Get version summary
261
+ */
262
+ getSummary(workerName) {
263
+ const versions = workerVersions.get(workerName) ?? [];
264
+ const summary = {
265
+ totalVersions: versions.length,
266
+ activeVersions: versions.filter((v) => v.isActive).length,
267
+ deprecatedVersions: versions.filter((v) => v.isDeprecated).length,
268
+ latest: WorkerVersioning.resolveAlias(workerName, 'latest'),
269
+ stable: WorkerVersioning.resolveAlias(workerName, 'stable'),
270
+ };
271
+ return summary;
272
+ },
273
+ /**
274
+ * Clear all versions for a worker
275
+ */
276
+ clear(workerName) {
277
+ workerVersions.delete(workerName);
278
+ // Remove aliases
279
+ const keysToDelete = [];
280
+ for (const [key] of versionAliases.entries()) {
281
+ if (key.startsWith(`${workerName}:`)) {
282
+ keysToDelete.push(key);
283
+ }
284
+ }
285
+ for (const key of keysToDelete) {
286
+ versionAliases.delete(key);
287
+ }
288
+ Logger.info(`All versions cleared for worker: ${workerName}`);
289
+ },
290
+ /**
291
+ * Shutdown
292
+ */
293
+ shutdown() {
294
+ Logger.info('WorkerVersioning shutting down...');
295
+ workerVersions.clear();
296
+ versionAliases.clear();
297
+ Logger.info('WorkerVersioning shutdown complete');
298
+ },
299
+ });
300
+ // Graceful shutdown handled by WorkerShutdown
@@ -0,0 +1,5 @@
1
+ export declare const WorkerConfig: Readonly<{
2
+ getWorkerBaseUrl: () => string;
3
+ }>;
4
+ export declare const keyPrefix: () => string;
5
+ //# sourceMappingURL=workerConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workerConfig.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/src/config/workerConfig.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,YAAY;4BATO,MAAM;EAWpC,CAAC;AAEH,eAAO,MAAM,SAAS,QAAO,MAM5B,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { Env, appConfig } from '../../../../src/index.js';
2
+ const normalizeBaseUrl = (value) => {
3
+ let end = value.length;
4
+ while (end > 0 && value.charAt(end - 1) === '/') {
5
+ end--;
6
+ }
7
+ return value.slice(0, end);
8
+ };
9
+ const withHttpScheme = (value) => value.startsWith('http://') || value.startsWith('https://') ? value : `http://${value}`;
10
+ const resolveWorkerApiUrl = () => {
11
+ const workerApiUrl = Env.get('WORKER_API_URL');
12
+ if (workerApiUrl) {
13
+ return normalizeBaseUrl(withHttpScheme(workerApiUrl));
14
+ }
15
+ return '';
16
+ };
17
+ export const WorkerConfig = Object.freeze({
18
+ getWorkerBaseUrl: resolveWorkerApiUrl,
19
+ });
20
+ export const keyPrefix = () => {
21
+ const redisKeyPrefix = (Env.get('WORKER_PERSISTENCE_REDIS_KEY_PREFIX', '') ?? '').trim();
22
+ return redisKeyPrefix
23
+ ? `${redisKeyPrefix}_worker_${appConfig.prefix}`
24
+ : `worker_${appConfig.prefix}`;
25
+ };
@@ -0,0 +1,26 @@
1
+ type QueueWorker = {
2
+ processOne: (queueName?: string, driverName?: string) => Promise<boolean>;
3
+ processAll: (queueName?: string, driverName?: string) => Promise<number>;
4
+ runOnce: (opts?: {
5
+ queueName?: string;
6
+ driverName?: string;
7
+ maxItems?: number;
8
+ maxDurationMs?: number;
9
+ }) => Promise<number>;
10
+ startWorker: (opts?: {
11
+ queueName?: string;
12
+ driverName?: string;
13
+ signal?: AbortSignal;
14
+ maxDurationMs?: number;
15
+ }) => Promise<number>;
16
+ };
17
+ export type CreateQueueWorkerOptions<TPayload> = {
18
+ kindLabel: string;
19
+ defaultQueueName: string;
20
+ maxAttempts: number;
21
+ getLogFields: (payload: TPayload) => Record<string, unknown>;
22
+ handle: (payload: TPayload) => Promise<void>;
23
+ };
24
+ export declare function createQueueWorker<TPayload>(options: CreateQueueWorkerOptions<TPayload>): QueueWorker;
25
+ export {};
26
+ //# sourceMappingURL=createQueueWorker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createQueueWorker.d.ts","sourceRoot":"","sources":["../../../../packages/workers/src/createQueueWorker.ts"],"names":[],"mappings":"AAkHA,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1E,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACtB,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,wBAAwB,CAAC,QAAQ,IAAI;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7D,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C,CAAC;AAucF,wBAAgB,iBAAiB,CAAC,QAAQ,EACxC,OAAO,EAAE,wBAAwB,CAAC,QAAQ,CAAC,GAC1C,WAAW,CAOb"}