@zintrust/core 0.1.42 → 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 (365) 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 +11 -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/cache/Cache.d.ts.map +1 -1
  321. package/src/cache/Cache.js +40 -8
  322. package/src/cache/drivers/KVRemoteDriver.d.ts +1 -1
  323. package/src/cache/drivers/KVRemoteDriver.d.ts.map +1 -1
  324. package/src/cache/drivers/KVRemoteDriver.js +259 -44
  325. package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
  326. package/src/cache/drivers/MemoryDriver.js +10 -2
  327. package/src/cache/drivers/RedisDriver.d.ts.map +1 -1
  328. package/src/cache/drivers/RedisDriver.js +256 -33
  329. package/src/cli/commands/InitContainerCommand.js +10 -10
  330. package/src/cli/commands/NewCommand.d.ts.map +1 -1
  331. package/src/cli/commands/NewCommand.js +33 -0
  332. package/src/cli/commands/StartCommand.d.ts.map +1 -1
  333. package/src/cli/commands/StartCommand.js +23 -1
  334. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  335. package/src/cli/scaffolding/ProjectScaffolder.js +65 -73
  336. package/src/cli/utils/DistPackager.d.ts.map +1 -1
  337. package/src/cli/utils/DistPackager.js +25 -0
  338. package/src/cli/utils/EnvFileLoader.d.ts +1 -0
  339. package/src/cli/utils/EnvFileLoader.d.ts.map +1 -1
  340. package/src/cli/utils/EnvFileLoader.js +14 -0
  341. package/src/common/RemoteSignedJson.d.ts.map +1 -1
  342. package/src/common/RemoteSignedJson.js +9 -2
  343. package/src/config/cache.js +1 -1
  344. package/src/config/env.d.ts +7 -0
  345. package/src/config/env.d.ts.map +1 -1
  346. package/src/config/env.js +8 -0
  347. package/src/config/queue.js +1 -1
  348. package/src/functions/cloudflare.d.ts.map +1 -1
  349. package/src/functions/cloudflare.js +4 -2
  350. package/src/index.js +3 -3
  351. package/src/middleware/JwtAuthMiddleware.d.ts.map +1 -1
  352. package/src/middleware/JwtAuthMiddleware.js +11 -5
  353. package/src/runtime/RuntimeAdapter.d.ts.map +1 -1
  354. package/src/runtime/RuntimeAdapter.js +30 -12
  355. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
  356. package/src/runtime/adapters/CloudflareAdapter.js +15 -4
  357. package/src/scheduler/Schedule.js +1 -1
  358. package/src/scheduler/leader/SchedulerLeader.js +1 -1
  359. package/src/schedules/job-tracking-cleanup.js +1 -1
  360. package/src/security/TokenRevocation.d.ts +19 -2
  361. package/src/security/TokenRevocation.d.ts.map +1 -1
  362. package/src/security/TokenRevocation.js +558 -30
  363. package/src/templates/project/basic/app/Controllers/AuthController.ts.tpl +11 -3
  364. package/src/templates/project/basic/config/middleware.ts.tpl +23 -22
  365. package/src/templates/project/basic/wrangler.jsonc.tpl +28 -0
@@ -0,0 +1,632 @@
1
+ /**
2
+ * Resource Monitor
3
+ * Real-time resource tracking with cost calculation
4
+ * Sealed namespace for immutability
5
+ */
6
+ import { Env, Logger, NodeSingletons } from '../../../src/index.js';
7
+ const getOsModule = () => NodeSingletons?.os ?? null;
8
+ const safeTotalMemory = () => {
9
+ const os = getOsModule();
10
+ if (!os?.totalmem)
11
+ return 0;
12
+ try {
13
+ return os.totalmem();
14
+ }
15
+ catch {
16
+ return 0;
17
+ }
18
+ };
19
+ const safeFreeMemory = () => {
20
+ const os = getOsModule();
21
+ if (!os?.freemem)
22
+ return 0;
23
+ try {
24
+ return os.freemem();
25
+ }
26
+ catch {
27
+ return 0;
28
+ }
29
+ };
30
+ const safeLoadAverage = () => {
31
+ const os = getOsModule();
32
+ if (!os?.loadavg)
33
+ return [0, 0, 0];
34
+ try {
35
+ return os.loadavg();
36
+ }
37
+ catch {
38
+ return [0, 0, 0];
39
+ }
40
+ };
41
+ const safeCpuCount = () => {
42
+ const os = getOsModule();
43
+ if (!os?.cpus)
44
+ return 1;
45
+ try {
46
+ return Math.max(1, os.cpus().length);
47
+ }
48
+ catch {
49
+ return 1;
50
+ }
51
+ };
52
+ const safePlatform = () => {
53
+ const os = getOsModule();
54
+ if (!os?.platform)
55
+ return 'unknown';
56
+ try {
57
+ return os.platform();
58
+ }
59
+ catch {
60
+ return 'unknown';
61
+ }
62
+ };
63
+ const safeArch = () => {
64
+ const os = getOsModule();
65
+ if (!os?.arch)
66
+ return 'unknown';
67
+ try {
68
+ return os.arch();
69
+ }
70
+ catch {
71
+ return 'unknown';
72
+ }
73
+ };
74
+ const safeHostname = () => {
75
+ const os = getOsModule();
76
+ if (!os?.hostname)
77
+ return 'unknown';
78
+ try {
79
+ return os.hostname();
80
+ }
81
+ catch {
82
+ return 'unknown';
83
+ }
84
+ };
85
+ const safeUptime = () => {
86
+ const os = getOsModule();
87
+ if (!os?.uptime)
88
+ return 0;
89
+ try {
90
+ return os.uptime();
91
+ }
92
+ catch {
93
+ return 0;
94
+ }
95
+ };
96
+ const safeProcessCpuUsage = () => {
97
+ if (!process?.cpuUsage)
98
+ return { user: 0, system: 0 };
99
+ try {
100
+ return process.cpuUsage();
101
+ }
102
+ catch {
103
+ return { user: 0, system: 0 };
104
+ }
105
+ };
106
+ // Default cost configuration (AWS-like pricing)
107
+ const DEFAULT_COST_CONFIG = {
108
+ computeCostPerCoreHour: 0.0416, // ~$0.0416 per vCPU hour (t3.medium equivalent)
109
+ memoryCostPerGBHour: 0.0052, // ~$0.0052 per GB hour
110
+ networkCostPerGB: 0.09, // $0.09 per GB transferred
111
+ diskCostPerGB: 0.1, // $0.10 per GB/month
112
+ spotInstanceDiscount: 70, // 70% discount for spot instances
113
+ };
114
+ // Internal state
115
+ let costConfig = { ...DEFAULT_COST_CONFIG };
116
+ let monitoringInterval = null;
117
+ const resourceHistory = new Map();
118
+ const alertHistory = new Map();
119
+ // Memory management constants
120
+ const MAX_HISTORY_SIZE = 1000; // Keep last 1000 snapshots per worker
121
+ const MAX_ALERT_HISTORY = 100; // Keep last 100 alerts per worker
122
+ // Resource thresholds
123
+ const THRESHOLDS = {
124
+ cpu: { warning: 70, critical: 90 },
125
+ memory: { warning: 75, critical: 85 },
126
+ disk: { warning: 80, critical: 90 },
127
+ costPerHour: { warning: 10, critical: 50 },
128
+ };
129
+ // Store previous CPU measurements for calculating real-time usage
130
+ let previousCpuTimes = null;
131
+ /**
132
+ * Helper: Calculate CPU usage percentage (real-time)
133
+ */
134
+ const calculateCpuUsage = () => {
135
+ const os = getOsModule();
136
+ if (!os?.cpus)
137
+ return 0;
138
+ try {
139
+ const cpus = os.cpus();
140
+ let totalIdle = 0;
141
+ let totalTick = 0;
142
+ cpus.forEach((cpu) => {
143
+ for (const type in cpu.times) {
144
+ totalTick += cpu.times[type];
145
+ }
146
+ totalIdle += cpu.times.idle;
147
+ });
148
+ const now = Date.now();
149
+ // If we have previous measurements, calculate real-time usage
150
+ if (previousCpuTimes) {
151
+ const timeDiff = now - previousCpuTimes.timestamp;
152
+ // Only calculate if enough time has passed (minimum 100ms)
153
+ if (timeDiff >= 100) {
154
+ const idleDiff = totalIdle - previousCpuTimes.idle;
155
+ const totalDiff = totalTick - previousCpuTimes.total;
156
+ // Calculate CPU usage percentage for this interval
157
+ const cpuPercentage = totalDiff > 0 ? ((totalDiff - idleDiff) / totalDiff) * 100 : 0;
158
+ // Update previous measurements
159
+ previousCpuTimes = { idle: totalIdle, total: totalTick, timestamp: now };
160
+ return Math.min(100, Math.max(0, cpuPercentage));
161
+ }
162
+ }
163
+ // First measurement or not enough time passed
164
+ previousCpuTimes = { idle: totalIdle, total: totalTick, timestamp: now };
165
+ // For first call, return a reasonable estimate or use load average
166
+ const loadAvg = safeLoadAverage();
167
+ const cpuCount = safeCpuCount();
168
+ return Math.min(100, Math.max(0, (loadAvg[0] / cpuCount) * 100));
169
+ }
170
+ catch (error) {
171
+ Logger.error('Failed to calculate system CPU usage', error);
172
+ return 0;
173
+ }
174
+ };
175
+ /**
176
+ * Helper: Get memory usage
177
+ */
178
+ const getMemoryUsage = () => {
179
+ const totalMemory = safeTotalMemory();
180
+ const freeMemory = safeFreeMemory();
181
+ const usedMemory = totalMemory - freeMemory;
182
+ const usage = totalMemory > 0 ? (usedMemory / totalMemory) * 100 : 0;
183
+ return {
184
+ total: totalMemory,
185
+ used: usedMemory,
186
+ free: freeMemory,
187
+ usage,
188
+ };
189
+ };
190
+ /**
191
+ * Helper: Capture resource snapshot
192
+ */
193
+ const captureSnapshot = () => {
194
+ const cpuUsage = calculateCpuUsage();
195
+ const memoryUsage = getMemoryUsage();
196
+ const loadAverage = safeLoadAverage();
197
+ const cpuCores = safeCpuCount();
198
+ return {
199
+ timestamp: new Date(),
200
+ cpu: {
201
+ usage: cpuUsage,
202
+ loadAverage,
203
+ cores: cpuCores,
204
+ },
205
+ memory: memoryUsage,
206
+ disk: {
207
+ read: 0, // Would need platform-specific implementation
208
+ write: 0,
209
+ },
210
+ network: {
211
+ received: 0, // Would need platform-specific implementation
212
+ transmitted: 0,
213
+ },
214
+ process: {
215
+ pid: process.pid,
216
+ uptime: process.uptime(),
217
+ memoryUsage: process.memoryUsage(),
218
+ cpuUsage: safeProcessCpuUsage(),
219
+ },
220
+ };
221
+ };
222
+ /**
223
+ * Helper: Calculate cost based on resource usage
224
+ */
225
+ const calculateCost = (snapshot, useSpotDiscount = false) => {
226
+ const { cpu, memory } = snapshot;
227
+ // CPU cost (based on cores and usage)
228
+ const cpuCostPerHour = cpu.cores * (cpu.usage / 100) * costConfig.computeCostPerCoreHour;
229
+ // Memory cost (based on GB used)
230
+ const memoryGB = memory.used / (1024 * 1024 * 1024);
231
+ const memoryCostPerHour = memoryGB * costConfig.memoryCostPerGBHour;
232
+ // Total compute cost
233
+ let totalCostPerHour = cpuCostPerHour + memoryCostPerHour;
234
+ // Apply spot instance discount if applicable
235
+ if (useSpotDiscount) {
236
+ totalCostPerHour *= 1 - costConfig.spotInstanceDiscount / 100;
237
+ }
238
+ return {
239
+ perHour: totalCostPerHour,
240
+ perDay: totalCostPerHour * 24,
241
+ perMonth: totalCostPerHour * 24 * 30,
242
+ };
243
+ };
244
+ /**
245
+ * Helper: Calculate efficiency score
246
+ */
247
+ const calculateEfficiency = (snapshot) => {
248
+ const { cpu, memory } = snapshot;
249
+ // CPU efficiency: 50-80% usage is ideal
250
+ let cpuEfficiency;
251
+ if (cpu.usage < 30) {
252
+ cpuEfficiency = cpu.usage * 2; // Under-utilized
253
+ }
254
+ else if (cpu.usage > 80) {
255
+ cpuEfficiency = 100 - (cpu.usage - 80) * 2; // Over-utilized
256
+ }
257
+ else {
258
+ cpuEfficiency = 100; // Ideal range
259
+ }
260
+ // Memory efficiency: 50-75% usage is ideal
261
+ let memoryEfficiency;
262
+ if (memory.usage < 40) {
263
+ memoryEfficiency = memory.usage * 1.5; // Under-utilized
264
+ }
265
+ else if (memory.usage > 75) {
266
+ memoryEfficiency = 100 - (memory.usage - 75) * 2; // Over-utilized
267
+ }
268
+ else {
269
+ memoryEfficiency = 100; // Ideal range
270
+ }
271
+ const overallScore = cpuEfficiency * 0.6 + memoryEfficiency * 0.4;
272
+ return {
273
+ cpuEfficiency: Math.round(cpuEfficiency),
274
+ memoryEfficiency: Math.round(memoryEfficiency),
275
+ overallScore: Math.round(overallScore),
276
+ };
277
+ };
278
+ /**
279
+ * Helper: Check thresholds and create alerts
280
+ */
281
+ const checkThresholds = (workerName, snapshot, cost) => {
282
+ const alerts = [];
283
+ // CPU alerts
284
+ if (snapshot.cpu.usage >= THRESHOLDS.cpu.critical) {
285
+ alerts.push({
286
+ timestamp: new Date(),
287
+ workerName,
288
+ alertType: 'cpu-high',
289
+ severity: 'critical',
290
+ message: `Critical CPU usage: ${snapshot.cpu.usage.toFixed(1)}%`,
291
+ currentValue: snapshot.cpu.usage,
292
+ threshold: THRESHOLDS.cpu.critical,
293
+ recommendation: 'Consider scaling up or optimizing worker code',
294
+ });
295
+ }
296
+ else if (snapshot.cpu.usage >= THRESHOLDS.cpu.warning) {
297
+ alerts.push({
298
+ timestamp: new Date(),
299
+ workerName,
300
+ alertType: 'cpu-high',
301
+ severity: 'warning',
302
+ message: `High CPU usage: ${snapshot.cpu.usage.toFixed(1)}%`,
303
+ currentValue: snapshot.cpu.usage,
304
+ threshold: THRESHOLDS.cpu.warning,
305
+ recommendation: 'Monitor closely and consider scaling',
306
+ });
307
+ }
308
+ // Memory alerts
309
+ if (snapshot.memory.usage >= THRESHOLDS.memory.critical) {
310
+ alerts.push({
311
+ timestamp: new Date(),
312
+ workerName,
313
+ alertType: 'memory-high',
314
+ severity: 'critical',
315
+ message: `Critical memory usage: ${snapshot.memory.usage.toFixed(1)}%`,
316
+ currentValue: snapshot.memory.usage,
317
+ threshold: THRESHOLDS.memory.critical,
318
+ recommendation: 'Increase memory allocation or optimize memory usage',
319
+ });
320
+ }
321
+ else if (snapshot.memory.usage >= THRESHOLDS.memory.warning) {
322
+ alerts.push({
323
+ timestamp: new Date(),
324
+ workerName,
325
+ alertType: 'memory-high',
326
+ severity: 'warning',
327
+ message: `High memory usage: ${snapshot.memory.usage.toFixed(1)}%`,
328
+ currentValue: snapshot.memory.usage,
329
+ threshold: THRESHOLDS.memory.warning,
330
+ recommendation: 'Monitor memory consumption',
331
+ });
332
+ }
333
+ // Cost alerts
334
+ if (cost.perHour >= THRESHOLDS.costPerHour.critical) {
335
+ alerts.push({
336
+ timestamp: new Date(),
337
+ workerName,
338
+ alertType: 'cost-high',
339
+ severity: 'critical',
340
+ message: `Critical hourly cost: $${cost.perHour.toFixed(2)}/hr`,
341
+ currentValue: cost.perHour,
342
+ threshold: THRESHOLDS.costPerHour.critical,
343
+ recommendation: 'Review resource allocation and consider cost optimization',
344
+ });
345
+ }
346
+ else if (cost.perHour >= THRESHOLDS.costPerHour.warning) {
347
+ alerts.push({
348
+ timestamp: new Date(),
349
+ workerName,
350
+ alertType: 'cost-high',
351
+ severity: 'warning',
352
+ message: `High hourly cost: $${cost.perHour.toFixed(2)}/hr`,
353
+ currentValue: cost.perHour,
354
+ threshold: THRESHOLDS.costPerHour.warning,
355
+ recommendation: 'Consider using spot instances or reducing concurrency',
356
+ });
357
+ }
358
+ return alerts;
359
+ };
360
+ /**
361
+ * Helper: Store alert
362
+ */
363
+ const storeAlert = (alert) => {
364
+ let history = alertHistory.get(alert.workerName);
365
+ if (!history) {
366
+ history = [];
367
+ alertHistory.set(alert.workerName, history);
368
+ }
369
+ history.push(alert);
370
+ // Trim alert history to prevent memory leaks
371
+ if (history.length > MAX_ALERT_HISTORY) {
372
+ alertHistory.set(alert.workerName, history.slice(-MAX_ALERT_HISTORY));
373
+ }
374
+ };
375
+ /**
376
+ * Helper: Calculate trend
377
+ */
378
+ const calculateTrend = (workerName, metric, period) => {
379
+ const history = resourceHistory.get(workerName);
380
+ if (!history || history.length < 2)
381
+ return null;
382
+ const now = Date.now();
383
+ let periodMs;
384
+ switch (period) {
385
+ case 'hour':
386
+ periodMs = 60 * 60 * 1000;
387
+ break;
388
+ case 'day':
389
+ periodMs = 24 * 60 * 60 * 1000;
390
+ break;
391
+ case 'week':
392
+ periodMs = 7 * 24 * 60 * 60 * 1000;
393
+ break;
394
+ }
395
+ // Filter snapshots within period
396
+ const periodSnapshots = history.filter((s) => now - s.timestamp.getTime() <= periodMs);
397
+ if (periodSnapshots.length < 2)
398
+ return null;
399
+ // Get metric values
400
+ const values = periodSnapshots.map((s) => {
401
+ switch (metric) {
402
+ case 'cpu':
403
+ return s.cpu.usage;
404
+ case 'memory':
405
+ return s.memory.usage;
406
+ case 'disk':
407
+ return s.disk.read + s.disk.write;
408
+ case 'network':
409
+ return s.network.received + s.network.transmitted;
410
+ case 'cost':
411
+ return calculateCost(s).perHour;
412
+ }
413
+ });
414
+ // Simple linear regression for trend
415
+ const firstValue = values[0];
416
+ const lastValue = values[values.length - 1] ?? values[0];
417
+ const changePercentage = ((lastValue - firstValue) / firstValue) * 100;
418
+ let trend;
419
+ if (Math.abs(changePercentage) < 5) {
420
+ trend = 'stable';
421
+ }
422
+ else if (changePercentage > 0) {
423
+ trend = 'increasing';
424
+ }
425
+ else {
426
+ trend = 'decreasing';
427
+ }
428
+ // Simple predictions (linear extrapolation)
429
+ const avgChange = (lastValue - firstValue) / periodSnapshots.length;
430
+ const predictions = {
431
+ nextHour: lastValue + avgChange * 12, // Assuming 5-min intervals
432
+ nextDay: lastValue + avgChange * 288,
433
+ nextWeek: lastValue + avgChange * 2016,
434
+ };
435
+ return {
436
+ workerName,
437
+ metric,
438
+ period,
439
+ trend,
440
+ changePercentage,
441
+ predictions,
442
+ };
443
+ };
444
+ /**
445
+ * Resource Monitor - Sealed namespace
446
+ */
447
+ export const ResourceMonitor = Object.freeze({
448
+ /**
449
+ * Initialize resource monitor
450
+ */
451
+ initialize(config) {
452
+ if (config) {
453
+ costConfig = { ...DEFAULT_COST_CONFIG, ...config };
454
+ }
455
+ Logger.info('ResourceMonitor initialized', { costConfig });
456
+ },
457
+ /**
458
+ * Check whether monitoring is running
459
+ */
460
+ isRunning() {
461
+ return monitoringInterval !== null;
462
+ },
463
+ /**
464
+ * Start monitoring
465
+ */
466
+ start(intervalSeconds = 30) {
467
+ const globalResourceMonitoring = Env.getBool('WORKER_RESOURCE_MONITORING', false);
468
+ if (!globalResourceMonitoring) {
469
+ Logger.warn('ResourceMonitor disabled (WORKER_RESOURCE_MONITORING=false)');
470
+ return;
471
+ }
472
+ if (monitoringInterval) {
473
+ Logger.warn('ResourceMonitor already running');
474
+ return;
475
+ }
476
+ monitoringInterval = setInterval(() => {
477
+ const snapshot = captureSnapshot();
478
+ // Store snapshot for later analysis
479
+ // This would typically be saved to a time-series database
480
+ Logger.debug('Resource snapshot captured', {
481
+ cpu: snapshot.cpu.usage.toFixed(1) + '%',
482
+ memory: snapshot.memory.usage.toFixed(1) + '%',
483
+ });
484
+ }, intervalSeconds * 1000);
485
+ Logger.info('ResourceMonitor started', { intervalSeconds });
486
+ },
487
+ /**
488
+ * Stop monitoring
489
+ */
490
+ stop() {
491
+ if (monitoringInterval) {
492
+ clearInterval(monitoringInterval);
493
+ monitoringInterval = null;
494
+ Logger.info('ResourceMonitor stopped');
495
+ }
496
+ },
497
+ /**
498
+ * Get current resource usage
499
+ */
500
+ getCurrentUsage(workerName, useSpotDiscount = false) {
501
+ const snapshot = captureSnapshot();
502
+ const cost = calculateCost(snapshot, useSpotDiscount);
503
+ const efficiency = calculateEfficiency(snapshot);
504
+ // Store in history
505
+ let history = resourceHistory.get(workerName);
506
+ if (!history) {
507
+ history = [];
508
+ resourceHistory.set(workerName, history);
509
+ }
510
+ history.push(snapshot);
511
+ // Trim resource history to prevent memory leaks
512
+ if (history.length > MAX_HISTORY_SIZE) {
513
+ resourceHistory.set(workerName, history.slice(-MAX_HISTORY_SIZE));
514
+ }
515
+ // Check thresholds
516
+ const alerts = checkThresholds(workerName, snapshot, cost);
517
+ alerts.forEach((element) => {
518
+ storeAlert(element);
519
+ });
520
+ return {
521
+ workerName,
522
+ cpu: snapshot.cpu.usage,
523
+ memory: {
524
+ number: snapshot.memory.total,
525
+ percent: snapshot.memory.usage,
526
+ used: snapshot.memory.used,
527
+ free: snapshot.memory.free,
528
+ },
529
+ cost: {
530
+ hourly: cost.perHour,
531
+ daily: cost.perDay,
532
+ },
533
+ resourceSnapshot: snapshot,
534
+ estimatedCost: cost,
535
+ efficiency,
536
+ };
537
+ },
538
+ /**
539
+ * Get resource history
540
+ */
541
+ getHistory(workerName, limit = 100) {
542
+ const history = resourceHistory.get(workerName) ?? [];
543
+ return history.slice(-limit).map((s) => ({ ...s }));
544
+ },
545
+ /**
546
+ * Get alerts
547
+ */
548
+ getAlerts(workerName, limit = 100) {
549
+ const history = alertHistory.get(workerName) ?? [];
550
+ return history.slice(-limit).map((a) => ({ ...a }));
551
+ },
552
+ /**
553
+ * Get trend analysis
554
+ */
555
+ getTrend(workerName, metric, period) {
556
+ return calculateTrend(workerName, metric, period);
557
+ },
558
+ /**
559
+ * Get all trends
560
+ */
561
+ getAllTrends(workerName, period) {
562
+ return {
563
+ cpu: calculateTrend(workerName, 'cpu', period),
564
+ memory: calculateTrend(workerName, 'memory', period),
565
+ disk: calculateTrend(workerName, 'disk', period),
566
+ network: calculateTrend(workerName, 'network', period),
567
+ cost: calculateTrend(workerName, 'cost', period),
568
+ };
569
+ },
570
+ /**
571
+ * Update cost configuration
572
+ */
573
+ updateCostConfig(config) {
574
+ costConfig = { ...costConfig, ...config };
575
+ Logger.info('Resource monitor cost config updated', { costConfig });
576
+ },
577
+ /**
578
+ * Get cost configuration
579
+ */
580
+ getCostConfig() {
581
+ return { ...costConfig };
582
+ },
583
+ /**
584
+ * Calculate projected cost
585
+ */
586
+ calculateProjectedCost(cpuUsagePercent, memoryGB, hoursPerDay, useSpotDiscount = false) {
587
+ const cpuCores = safeCpuCount();
588
+ const cpuCostPerHour = cpuCores * (cpuUsagePercent / 100) * costConfig.computeCostPerCoreHour;
589
+ const memoryCostPerHour = memoryGB * costConfig.memoryCostPerGBHour;
590
+ let totalCostPerHour = cpuCostPerHour + memoryCostPerHour;
591
+ if (useSpotDiscount) {
592
+ totalCostPerHour *= 1 - costConfig.spotInstanceDiscount / 100;
593
+ }
594
+ return {
595
+ daily: totalCostPerHour * hoursPerDay,
596
+ monthly: totalCostPerHour * hoursPerDay * 30,
597
+ yearly: totalCostPerHour * hoursPerDay * 365,
598
+ };
599
+ },
600
+ /**
601
+ * Get system information
602
+ */
603
+ getSystemInfo() {
604
+ return {
605
+ platform: safePlatform(),
606
+ arch: safeArch(),
607
+ hostname: safeHostname(),
608
+ cpus: safeCpuCount(),
609
+ totalMemory: safeTotalMemory(),
610
+ freeMemory: safeFreeMemory(),
611
+ uptime: safeUptime(),
612
+ };
613
+ },
614
+ /**
615
+ * Clear history for a worker
616
+ */
617
+ clearHistory(workerName) {
618
+ resourceHistory.delete(workerName);
619
+ alertHistory.delete(workerName);
620
+ Logger.info(`Cleared resource history for ${workerName}`);
621
+ },
622
+ /**
623
+ * Shutdown
624
+ */
625
+ shutdown() {
626
+ ResourceMonitor.stop();
627
+ resourceHistory.clear();
628
+ alertHistory.clear();
629
+ Logger.info('ResourceMonitor shutdown complete');
630
+ },
631
+ });
632
+ // Graceful shutdown handled by WorkerShutdown