@zintrust/core 0.1.42 → 0.1.44

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 (381) hide show
  1. package/README.md +1 -0
  2. package/app/Controllers/AuthController.d.ts +10 -0
  3. package/app/Controllers/AuthController.d.ts.map +1 -0
  4. package/app/Controllers/AuthController.js +201 -0
  5. package/app/Controllers/UserController.d.ts +9 -0
  6. package/app/Controllers/UserController.d.ts.map +1 -0
  7. package/app/Controllers/UserController.js +8 -0
  8. package/app/Controllers/UserQueryBuilderController.d.ts +16 -0
  9. package/app/Controllers/UserQueryBuilderController.d.ts.map +1 -0
  10. package/app/Controllers/UserQueryBuilderController.js +404 -0
  11. package/app/Middleware/ProfilerMiddleware.d.ts +12 -0
  12. package/app/Middleware/ProfilerMiddleware.d.ts.map +1 -0
  13. package/app/Middleware/ProfilerMiddleware.js +47 -0
  14. package/app/Middleware/index.d.ts +59 -0
  15. package/app/Middleware/index.d.ts.map +1 -0
  16. package/app/Middleware/index.js +215 -0
  17. package/app/Models/Post.d.ts +14 -0
  18. package/app/Models/Post.d.ts.map +1 -0
  19. package/app/Models/Post.js +27 -0
  20. package/app/Models/User.d.ts +14 -0
  21. package/app/Models/User.d.ts.map +1 -0
  22. package/app/Models/User.js +44 -0
  23. package/app/Schedules/JobTracking.d.ts +3 -0
  24. package/app/Schedules/JobTracking.d.ts.map +1 -0
  25. package/app/Schedules/JobTracking.js +13 -0
  26. package/app/Schedules/index.d.ts +2 -0
  27. package/app/Schedules/index.d.ts.map +1 -0
  28. package/app/Schedules/index.js +1 -0
  29. package/app/Toolkit/Broadcast/sendBroadcast.d.ts +6 -0
  30. package/app/Toolkit/Broadcast/sendBroadcast.d.ts.map +1 -0
  31. package/app/Toolkit/Broadcast/sendBroadcast.js +5 -0
  32. package/app/Toolkit/Mail/sendWelcomeEmail.d.ts +6 -0
  33. package/app/Toolkit/Mail/sendWelcomeEmail.d.ts.map +1 -0
  34. package/app/Toolkit/Mail/sendWelcomeEmail.js +20 -0
  35. package/app/Toolkit/Notification/sendSlackNotification.d.ts +8 -0
  36. package/app/Toolkit/Notification/sendSlackNotification.d.ts.map +1 -0
  37. package/app/Toolkit/Notification/sendSlackNotification.js +5 -0
  38. package/app/Toolkit/Notification/sendSms.d.ts +6 -0
  39. package/app/Toolkit/Notification/sendSms.d.ts.map +1 -0
  40. package/app/Toolkit/Notification/sendSms.js +5 -0
  41. package/app/Types/controller.d.ts +42 -0
  42. package/app/Types/controller.d.ts.map +1 -0
  43. package/app/Types/controller.js +1 -0
  44. package/config/broadcast.d.ts +38 -0
  45. package/config/broadcast.d.ts.map +1 -0
  46. package/config/broadcast.js +37 -0
  47. package/config/cache.d.ts +40 -0
  48. package/config/cache.d.ts.map +1 -0
  49. package/config/cache.js +39 -0
  50. package/config/database.d.ts +58 -0
  51. package/config/database.d.ts.map +1 -0
  52. package/config/database.js +65 -0
  53. package/config/mail.d.ts +51 -0
  54. package/config/mail.d.ts.map +1 -0
  55. package/config/mail.js +69 -0
  56. package/config/middleware.d.ts +11 -0
  57. package/config/middleware.d.ts.map +1 -0
  58. package/config/middleware.js +30 -0
  59. package/config/notification.d.ts +33 -0
  60. package/config/notification.d.ts.map +1 -0
  61. package/config/notification.js +33 -0
  62. package/config/queue.d.ts +55 -0
  63. package/config/queue.d.ts.map +1 -0
  64. package/config/queue.js +87 -0
  65. package/config/storage.d.ts +59 -0
  66. package/config/storage.d.ts.map +1 -0
  67. package/config/storage.js +59 -0
  68. package/config/workers.d.ts +54 -0
  69. package/config/workers.d.ts.map +1 -0
  70. package/config/workers.js +83 -0
  71. package/package.json +12 -5
  72. package/packages/cloudflare-d1-proxy/src/index.d.ts +48 -0
  73. package/packages/cloudflare-d1-proxy/src/index.d.ts.map +1 -0
  74. package/packages/cloudflare-d1-proxy/src/index.js +387 -0
  75. package/packages/cloudflare-kv-proxy/src/index.d.ts +44 -0
  76. package/packages/cloudflare-kv-proxy/src/index.d.ts.map +1 -0
  77. package/packages/cloudflare-kv-proxy/src/index.js +325 -0
  78. package/packages/queue-monitor/src/QueueMonitoringService.d.ts +35 -0
  79. package/packages/queue-monitor/src/QueueMonitoringService.d.ts.map +1 -0
  80. package/packages/queue-monitor/src/QueueMonitoringService.js +194 -0
  81. package/packages/queue-monitor/src/connection.d.ts +3 -0
  82. package/packages/queue-monitor/src/connection.d.ts.map +1 -0
  83. package/packages/queue-monitor/src/connection.js +1 -0
  84. package/packages/queue-monitor/src/dashboard-ui.d.ts +7 -0
  85. package/packages/queue-monitor/src/dashboard-ui.d.ts.map +1 -0
  86. package/packages/queue-monitor/src/dashboard-ui.js +997 -0
  87. package/packages/queue-monitor/src/driver.d.ts +15 -0
  88. package/packages/queue-monitor/src/driver.d.ts.map +1 -0
  89. package/packages/queue-monitor/src/driver.js +115 -0
  90. package/packages/queue-monitor/src/index.d.ts +71 -0
  91. package/packages/queue-monitor/src/index.d.ts.map +1 -0
  92. package/packages/queue-monitor/src/index.js +296 -0
  93. package/packages/queue-monitor/src/metrics.d.ts +27 -0
  94. package/packages/queue-monitor/src/metrics.d.ts.map +1 -0
  95. package/packages/queue-monitor/src/metrics.js +92 -0
  96. package/packages/queue-monitor/src/worker.d.ts +8 -0
  97. package/packages/queue-monitor/src/worker.d.ts.map +1 -0
  98. package/packages/queue-monitor/src/worker.js +35 -0
  99. package/packages/queue-redis/src/BullMQRedisQueue.d.ts +26 -0
  100. package/packages/queue-redis/src/BullMQRedisQueue.d.ts.map +1 -0
  101. package/packages/queue-redis/src/BullMQRedisQueue.js +463 -0
  102. package/packages/queue-redis/src/HttpQueueDriver.d.ts +18 -0
  103. package/packages/queue-redis/src/HttpQueueDriver.d.ts.map +1 -0
  104. package/packages/queue-redis/src/HttpQueueDriver.js +249 -0
  105. package/packages/queue-redis/src/QueueHttpGateway.d.ts +16 -0
  106. package/packages/queue-redis/src/QueueHttpGateway.d.ts.map +1 -0
  107. package/packages/queue-redis/src/QueueHttpGateway.js +217 -0
  108. package/packages/queue-redis/src/RedisPublishClient.d.ts +14 -0
  109. package/packages/queue-redis/src/RedisPublishClient.d.ts.map +1 -0
  110. package/packages/queue-redis/src/RedisPublishClient.js +251 -0
  111. package/packages/queue-redis/src/index.d.ts +12 -0
  112. package/packages/queue-redis/src/index.d.ts.map +1 -0
  113. package/packages/queue-redis/src/index.js +10 -0
  114. package/packages/queue-redis/src/register.d.ts +6 -0
  115. package/packages/queue-redis/src/register.d.ts.map +1 -0
  116. package/packages/queue-redis/src/register.js +21 -0
  117. package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.d.ts +11 -0
  118. package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.d.ts.map +1 -0
  119. package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.js +32 -0
  120. package/packages/workers/migrations/20260123180000_create_queue_jobs_table.d.ts +11 -0
  121. package/packages/workers/migrations/20260123180000_create_queue_jobs_table.d.ts.map +1 -0
  122. package/packages/workers/migrations/20260123180000_create_queue_jobs_table.js +46 -0
  123. package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.d.ts +7 -0
  124. package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.d.ts.map +1 -0
  125. package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.js +44 -0
  126. package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.d.ts +7 -0
  127. package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.d.ts.map +1 -0
  128. package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.js +104 -0
  129. package/packages/workers/src/AnomalyDetection.d.ts +107 -0
  130. package/packages/workers/src/AnomalyDetection.d.ts.map +1 -0
  131. package/packages/workers/src/AnomalyDetection.js +329 -0
  132. package/packages/workers/src/AutoScaler.d.ts +128 -0
  133. package/packages/workers/src/AutoScaler.d.ts.map +1 -0
  134. package/packages/workers/src/AutoScaler.js +425 -0
  135. package/packages/workers/src/BroadcastWorker.d.ts +24 -0
  136. package/packages/workers/src/BroadcastWorker.d.ts.map +1 -0
  137. package/packages/workers/src/BroadcastWorker.js +24 -0
  138. package/packages/workers/src/CanaryController.d.ts +104 -0
  139. package/packages/workers/src/CanaryController.d.ts.map +1 -0
  140. package/packages/workers/src/CanaryController.js +424 -0
  141. package/packages/workers/src/ChaosEngineering.d.ts +80 -0
  142. package/packages/workers/src/ChaosEngineering.d.ts.map +1 -0
  143. package/packages/workers/src/ChaosEngineering.js +229 -0
  144. package/packages/workers/src/CircuitBreaker.d.ts +107 -0
  145. package/packages/workers/src/CircuitBreaker.d.ts.map +1 -0
  146. package/packages/workers/src/CircuitBreaker.js +374 -0
  147. package/packages/workers/src/ClusterLock.d.ts +91 -0
  148. package/packages/workers/src/ClusterLock.d.ts.map +1 -0
  149. package/packages/workers/src/ClusterLock.js +397 -0
  150. package/packages/workers/src/ComplianceManager.d.ts +178 -0
  151. package/packages/workers/src/ComplianceManager.d.ts.map +1 -0
  152. package/packages/workers/src/ComplianceManager.js +556 -0
  153. package/packages/workers/src/DatacenterOrchestrator.d.ts +134 -0
  154. package/packages/workers/src/DatacenterOrchestrator.d.ts.map +1 -0
  155. package/packages/workers/src/DatacenterOrchestrator.js +404 -0
  156. package/packages/workers/src/DeadLetterQueue.d.ts +123 -0
  157. package/packages/workers/src/DeadLetterQueue.d.ts.map +1 -0
  158. package/packages/workers/src/DeadLetterQueue.js +544 -0
  159. package/packages/workers/src/HealthMonitor.d.ts +43 -0
  160. package/packages/workers/src/HealthMonitor.d.ts.map +1 -0
  161. package/packages/workers/src/HealthMonitor.js +312 -0
  162. package/packages/workers/src/MultiQueueWorker.d.ts +90 -0
  163. package/packages/workers/src/MultiQueueWorker.d.ts.map +1 -0
  164. package/packages/workers/src/MultiQueueWorker.js +282 -0
  165. package/packages/workers/src/NotificationWorker.d.ts +24 -0
  166. package/packages/workers/src/NotificationWorker.d.ts.map +1 -0
  167. package/packages/workers/src/NotificationWorker.js +23 -0
  168. package/packages/workers/src/Observability.d.ts +154 -0
  169. package/packages/workers/src/Observability.d.ts.map +1 -0
  170. package/packages/workers/src/Observability.js +538 -0
  171. package/packages/workers/src/PluginManager.d.ts +124 -0
  172. package/packages/workers/src/PluginManager.d.ts.map +1 -0
  173. package/packages/workers/src/PluginManager.js +392 -0
  174. package/packages/workers/src/PriorityQueue.d.ts +118 -0
  175. package/packages/workers/src/PriorityQueue.d.ts.map +1 -0
  176. package/packages/workers/src/PriorityQueue.js +276 -0
  177. package/packages/workers/src/ResourceMonitor.d.ts +165 -0
  178. package/packages/workers/src/ResourceMonitor.d.ts.map +1 -0
  179. package/packages/workers/src/ResourceMonitor.js +632 -0
  180. package/packages/workers/src/SLAMonitor.d.ts +111 -0
  181. package/packages/workers/src/SLAMonitor.d.ts.map +1 -0
  182. package/packages/workers/src/SLAMonitor.js +274 -0
  183. package/packages/workers/src/WorkerFactory.d.ts +218 -0
  184. package/packages/workers/src/WorkerFactory.d.ts.map +1 -0
  185. package/packages/workers/src/WorkerFactory.js +2253 -0
  186. package/packages/workers/src/WorkerInit.d.ts +86 -0
  187. package/packages/workers/src/WorkerInit.d.ts.map +1 -0
  188. package/packages/workers/src/WorkerInit.js +307 -0
  189. package/packages/workers/src/WorkerMetrics.d.ts +116 -0
  190. package/packages/workers/src/WorkerMetrics.d.ts.map +1 -0
  191. package/packages/workers/src/WorkerMetrics.js +570 -0
  192. package/packages/workers/src/WorkerRegistry.d.ts +152 -0
  193. package/packages/workers/src/WorkerRegistry.d.ts.map +1 -0
  194. package/packages/workers/src/WorkerRegistry.js +396 -0
  195. package/packages/workers/src/WorkerShutdown.d.ts +70 -0
  196. package/packages/workers/src/WorkerShutdown.d.ts.map +1 -0
  197. package/packages/workers/src/WorkerShutdown.js +185 -0
  198. package/packages/workers/src/WorkerVersioning.d.ts +108 -0
  199. package/packages/workers/src/WorkerVersioning.d.ts.map +1 -0
  200. package/packages/workers/src/WorkerVersioning.js +300 -0
  201. package/packages/workers/src/config/workerConfig.d.ts +5 -0
  202. package/packages/workers/src/config/workerConfig.d.ts.map +1 -0
  203. package/packages/workers/src/config/workerConfig.js +25 -0
  204. package/packages/workers/src/createQueueWorker.d.ts +26 -0
  205. package/packages/workers/src/createQueueWorker.d.ts.map +1 -0
  206. package/packages/workers/src/createQueueWorker.js +367 -0
  207. package/packages/workers/src/dashboard/index.d.ts +2 -0
  208. package/packages/workers/src/dashboard/index.d.ts.map +1 -0
  209. package/packages/workers/src/dashboard/index.js +1 -0
  210. package/packages/workers/src/dashboard/types.d.ts +123 -0
  211. package/packages/workers/src/dashboard/types.d.ts.map +1 -0
  212. package/packages/workers/src/dashboard/types.js +1 -0
  213. package/packages/workers/src/dashboard/workers-api.d.ts +5 -0
  214. package/packages/workers/src/dashboard/workers-api.d.ts.map +1 -0
  215. package/packages/workers/src/dashboard/workers-api.js +738 -0
  216. package/packages/workers/src/helper/index.d.ts +6 -0
  217. package/packages/workers/src/helper/index.d.ts.map +1 -0
  218. package/packages/workers/src/helper/index.js +10 -0
  219. package/packages/workers/src/http/WorkerApiController.d.ts +39 -0
  220. package/packages/workers/src/http/WorkerApiController.d.ts.map +1 -0
  221. package/packages/workers/src/http/WorkerApiController.js +313 -0
  222. package/packages/workers/src/http/WorkerController.d.ts +375 -0
  223. package/packages/workers/src/http/WorkerController.d.ts.map +1 -0
  224. package/packages/workers/src/http/WorkerController.js +1454 -0
  225. package/packages/workers/src/http/WorkerMonitoringService.d.ts +12 -0
  226. package/packages/workers/src/http/WorkerMonitoringService.d.ts.map +1 -0
  227. package/packages/workers/src/http/WorkerMonitoringService.js +89 -0
  228. package/packages/workers/src/http/middleware/CustomValidation.d.ts +93 -0
  229. package/packages/workers/src/http/middleware/CustomValidation.d.ts.map +1 -0
  230. package/packages/workers/src/http/middleware/CustomValidation.js +270 -0
  231. package/packages/workers/src/http/middleware/DatacenterValidator.d.ts +4 -0
  232. package/packages/workers/src/http/middleware/DatacenterValidator.d.ts.map +1 -0
  233. package/packages/workers/src/http/middleware/DatacenterValidator.js +94 -0
  234. package/packages/workers/src/http/middleware/EditWorkerValidation.d.ts +8 -0
  235. package/packages/workers/src/http/middleware/EditWorkerValidation.d.ts.map +1 -0
  236. package/packages/workers/src/http/middleware/EditWorkerValidation.js +56 -0
  237. package/packages/workers/src/http/middleware/FeaturesValidator.d.ts +4 -0
  238. package/packages/workers/src/http/middleware/FeaturesValidator.d.ts.map +1 -0
  239. package/packages/workers/src/http/middleware/FeaturesValidator.js +60 -0
  240. package/packages/workers/src/http/middleware/InfrastructureValidator.d.ts +32 -0
  241. package/packages/workers/src/http/middleware/InfrastructureValidator.d.ts.map +1 -0
  242. package/packages/workers/src/http/middleware/InfrastructureValidator.js +226 -0
  243. package/packages/workers/src/http/middleware/OptionsValidator.d.ts +4 -0
  244. package/packages/workers/src/http/middleware/OptionsValidator.d.ts.map +1 -0
  245. package/packages/workers/src/http/middleware/OptionsValidator.js +112 -0
  246. package/packages/workers/src/http/middleware/PayloadSanitizer.d.ts +8 -0
  247. package/packages/workers/src/http/middleware/PayloadSanitizer.d.ts.map +1 -0
  248. package/packages/workers/src/http/middleware/PayloadSanitizer.js +42 -0
  249. package/packages/workers/src/http/middleware/ProcessorPathSanitizer.d.ts +4 -0
  250. package/packages/workers/src/http/middleware/ProcessorPathSanitizer.d.ts.map +1 -0
  251. package/packages/workers/src/http/middleware/ProcessorPathSanitizer.js +140 -0
  252. package/packages/workers/src/http/middleware/QueueNameSanitizer.d.ts +4 -0
  253. package/packages/workers/src/http/middleware/QueueNameSanitizer.d.ts.map +1 -0
  254. package/packages/workers/src/http/middleware/QueueNameSanitizer.js +45 -0
  255. package/packages/workers/src/http/middleware/ValidateDriver.d.ts +8 -0
  256. package/packages/workers/src/http/middleware/ValidateDriver.d.ts.map +1 -0
  257. package/packages/workers/src/http/middleware/ValidateDriver.js +20 -0
  258. package/packages/workers/src/http/middleware/VersionSanitizer.d.ts +4 -0
  259. package/packages/workers/src/http/middleware/VersionSanitizer.d.ts.map +1 -0
  260. package/packages/workers/src/http/middleware/VersionSanitizer.js +25 -0
  261. package/packages/workers/src/http/middleware/WorkerNameSanitizer.d.ts +4 -0
  262. package/packages/workers/src/http/middleware/WorkerNameSanitizer.d.ts.map +1 -0
  263. package/packages/workers/src/http/middleware/WorkerNameSanitizer.js +46 -0
  264. package/packages/workers/src/http/middleware/WorkerValidationChain.d.ts +28 -0
  265. package/packages/workers/src/http/middleware/WorkerValidationChain.d.ts.map +1 -0
  266. package/packages/workers/src/http/middleware/WorkerValidationChain.js +186 -0
  267. package/packages/workers/src/index.d.ts +47 -0
  268. package/packages/workers/src/index.d.ts.map +1 -0
  269. package/packages/workers/src/index.js +48 -0
  270. package/packages/workers/src/routes/workers.d.ts +13 -0
  271. package/packages/workers/src/routes/workers.d.ts.map +1 -0
  272. package/packages/workers/src/routes/workers.js +126 -0
  273. package/packages/workers/src/storage/WorkerStore.d.ts +52 -0
  274. package/packages/workers/src/storage/WorkerStore.d.ts.map +1 -0
  275. package/packages/workers/src/storage/WorkerStore.js +259 -0
  276. package/packages/workers/src/telemetry/api/TelemetryAPI.d.ts +47 -0
  277. package/packages/workers/src/telemetry/api/TelemetryAPI.d.ts.map +1 -0
  278. package/packages/workers/src/telemetry/api/TelemetryAPI.js +219 -0
  279. package/packages/workers/src/telemetry/api/TelemetryMonitoringService.d.ts +18 -0
  280. package/packages/workers/src/telemetry/api/TelemetryMonitoringService.d.ts.map +1 -0
  281. package/packages/workers/src/telemetry/api/TelemetryMonitoringService.js +140 -0
  282. package/packages/workers/src/telemetry/components/AlertPanel.d.ts +2 -0
  283. package/packages/workers/src/telemetry/components/AlertPanel.d.ts.map +1 -0
  284. package/packages/workers/src/telemetry/components/AlertPanel.js +13 -0
  285. package/packages/workers/src/telemetry/components/CostTracking.d.ts +2 -0
  286. package/packages/workers/src/telemetry/components/CostTracking.d.ts.map +1 -0
  287. package/packages/workers/src/telemetry/components/CostTracking.js +14 -0
  288. package/packages/workers/src/telemetry/components/ResourceUsageChart.d.ts +2 -0
  289. package/packages/workers/src/telemetry/components/ResourceUsageChart.d.ts.map +1 -0
  290. package/packages/workers/src/telemetry/components/ResourceUsageChart.js +11 -0
  291. package/packages/workers/src/telemetry/components/WorkerHealthChart.d.ts +2 -0
  292. package/packages/workers/src/telemetry/components/WorkerHealthChart.d.ts.map +1 -0
  293. package/packages/workers/src/telemetry/components/WorkerHealthChart.js +11 -0
  294. package/packages/workers/src/telemetry/index.d.ts +16 -0
  295. package/packages/workers/src/telemetry/index.d.ts.map +1 -0
  296. package/packages/workers/src/telemetry/index.js +60 -0
  297. package/packages/workers/src/telemetry/routes/dashboard.d.ts +7 -0
  298. package/packages/workers/src/telemetry/routes/dashboard.d.ts.map +1 -0
  299. package/packages/workers/src/telemetry/routes/dashboard.js +608 -0
  300. package/packages/workers/src/type.d.ts +77 -0
  301. package/packages/workers/src/type.d.ts.map +1 -0
  302. package/packages/workers/src/type.js +1 -0
  303. package/packages/workers/src/ui/router/EmbeddedAssets.d.ts +5 -0
  304. package/packages/workers/src/ui/router/EmbeddedAssets.d.ts.map +1 -0
  305. package/packages/workers/src/ui/router/EmbeddedAssets.js +13 -0
  306. package/packages/workers/src/ui/router/ui.d.ts +4 -0
  307. package/packages/workers/src/ui/router/ui.d.ts.map +1 -0
  308. package/packages/workers/src/ui/router/ui.js +208 -0
  309. package/packages/workers/src/ui/types/worker-ui.d.ts +230 -0
  310. package/packages/workers/src/ui/types/worker-ui.d.ts.map +1 -0
  311. package/packages/workers/src/ui/types/worker-ui.js +5 -0
  312. package/routes/api.d.ts +7 -0
  313. package/routes/api.d.ts.map +1 -0
  314. package/routes/api.js +129 -0
  315. package/routes/broadcast.d.ts +9 -0
  316. package/routes/broadcast.d.ts.map +1 -0
  317. package/routes/broadcast.js +27 -0
  318. package/routes/storage.d.ts +4 -0
  319. package/routes/storage.d.ts.map +1 -0
  320. package/routes/storage.js +35 -0
  321. package/src/cache/Cache.d.ts.map +1 -1
  322. package/src/cache/Cache.js +40 -8
  323. package/src/cache/drivers/KVRemoteDriver.d.ts +1 -1
  324. package/src/cache/drivers/KVRemoteDriver.d.ts.map +1 -1
  325. package/src/cache/drivers/KVRemoteDriver.js +259 -44
  326. package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
  327. package/src/cache/drivers/MemoryDriver.js +10 -2
  328. package/src/cache/drivers/RedisDriver.d.ts.map +1 -1
  329. package/src/cache/drivers/RedisDriver.js +256 -33
  330. package/src/cli/CLI.d.ts.map +1 -1
  331. package/src/cli/CLI.js +6 -0
  332. package/src/cli/commands/DeployCommand.d.ts.map +1 -1
  333. package/src/cli/commands/DeployCommand.js +12 -1
  334. package/src/cli/commands/DeployContainersProxyCommand.d.ts +5 -0
  335. package/src/cli/commands/DeployContainersProxyCommand.d.ts.map +1 -0
  336. package/src/cli/commands/DeployContainersProxyCommand.js +45 -0
  337. package/src/cli/commands/DockerCommand.d.ts +5 -0
  338. package/src/cli/commands/DockerCommand.d.ts.map +1 -0
  339. package/src/cli/commands/DockerCommand.js +74 -0
  340. package/src/cli/commands/InitContainerCommand.js +10 -10
  341. package/src/cli/commands/InitContainersProxyCommand.d.ts +5 -0
  342. package/src/cli/commands/InitContainersProxyCommand.d.ts.map +1 -0
  343. package/src/cli/commands/InitContainersProxyCommand.js +159 -0
  344. package/src/cli/commands/NewCommand.d.ts.map +1 -1
  345. package/src/cli/commands/NewCommand.js +33 -0
  346. package/src/cli/commands/PutCommand.d.ts.map +1 -1
  347. package/src/cli/commands/PutCommand.js +15 -5
  348. package/src/cli/commands/StartCommand.d.ts.map +1 -1
  349. package/src/cli/commands/StartCommand.js +43 -4
  350. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  351. package/src/cli/scaffolding/ProjectScaffolder.js +65 -73
  352. package/src/cli/utils/DistPackager.d.ts.map +1 -1
  353. package/src/cli/utils/DistPackager.js +25 -0
  354. package/src/cli/utils/EnvFileLoader.d.ts +1 -0
  355. package/src/cli/utils/EnvFileLoader.d.ts.map +1 -1
  356. package/src/cli/utils/EnvFileLoader.js +14 -0
  357. package/src/common/RemoteSignedJson.d.ts.map +1 -1
  358. package/src/common/RemoteSignedJson.js +9 -2
  359. package/src/config/cache.js +1 -1
  360. package/src/config/env.d.ts +7 -0
  361. package/src/config/env.d.ts.map +1 -1
  362. package/src/config/env.js +8 -0
  363. package/src/config/queue.js +1 -1
  364. package/src/functions/cloudflare.d.ts.map +1 -1
  365. package/src/functions/cloudflare.js +4 -2
  366. package/src/index.js +3 -3
  367. package/src/middleware/JwtAuthMiddleware.d.ts.map +1 -1
  368. package/src/middleware/JwtAuthMiddleware.js +11 -5
  369. package/src/runtime/RuntimeAdapter.d.ts.map +1 -1
  370. package/src/runtime/RuntimeAdapter.js +30 -12
  371. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
  372. package/src/runtime/adapters/CloudflareAdapter.js +15 -4
  373. package/src/scheduler/Schedule.js +1 -1
  374. package/src/scheduler/leader/SchedulerLeader.js +1 -1
  375. package/src/schedules/job-tracking-cleanup.js +1 -1
  376. package/src/security/TokenRevocation.d.ts +19 -2
  377. package/src/security/TokenRevocation.d.ts.map +1 -1
  378. package/src/security/TokenRevocation.js +558 -30
  379. package/src/templates/project/basic/app/Controllers/AuthController.ts.tpl +11 -3
  380. package/src/templates/project/basic/config/middleware.ts.tpl +23 -22
  381. package/src/templates/project/basic/wrangler.jsonc.tpl +28 -0
@@ -2,40 +2,235 @@
2
2
  * Redis Cache Driver
3
3
  * Zero-dependency implementation using Node.js native net module
4
4
  */
5
+ import { Cloudflare } from '../../config/cloudflare.js';
5
6
  import { Env } from '../../config/env.js';
6
7
  import { Logger } from '../../config/logger.js';
8
+ import { createRedisConnection } from '../../config/workers.js';
9
+ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
7
10
  import * as net from '../../node-singletons/net.js';
8
11
  import { RedisKeys } from '../../tools/redis/RedisKeyManager.js';
9
- /**
10
- * Create a new Redis driver instance
11
- */
12
- const create = () => {
12
+ const listenPreferOnce = (socket, event, cb) => {
13
+ if (typeof socket.once === 'function') {
14
+ socket.once(event, cb);
15
+ return;
16
+ }
17
+ socket.on?.(event, cb);
18
+ };
19
+ const listenPreferOn = (socket, event, cb) => {
20
+ if (typeof socket.on === 'function') {
21
+ socket.on(event, cb);
22
+ return;
23
+ }
24
+ socket.once?.(event, cb);
25
+ };
26
+ const hasToString = (value) => {
27
+ if (value === null || value === undefined)
28
+ return false;
29
+ return typeof value.toString === 'function';
30
+ };
31
+ const createIoredisClient = (params) => {
32
+ if (String(Env.NODE_ENV ?? '').startsWith('test'))
33
+ return null;
34
+ try {
35
+ const db = Env.getInt('REDIS_CACHE_DB', Env.getInt('REDIS_QUEUE_DB', 0));
36
+ const client = createRedisConnection({
37
+ host: Env.REDIS_HOST,
38
+ port: Env.REDIS_PORT,
39
+ password: Env.get('REDIS_PASSWORD', ''),
40
+ db,
41
+ }, 3);
42
+ return client !== null && typeof client.get === 'function' ? client : null;
43
+ }
44
+ catch (error) {
45
+ const msg = error instanceof Error ? error.message : String(error);
46
+ if (params.isWorkersRuntime || params.wantsProxy) {
47
+ Logger.error('Redis cache driver initialization failed', { error: msg });
48
+ throw error;
49
+ }
50
+ Logger.warn('Redis cache driver falling back to TCP socket implementation', {
51
+ error: msg,
52
+ });
53
+ return null;
54
+ }
55
+ };
56
+ const createCacheDriverFromIoredisClient = (client) => ({
57
+ async get(key) {
58
+ try {
59
+ const prefixedKey = RedisKeys.createCacheKey(key);
60
+ const value = await client.get(prefixedKey);
61
+ if (value === null)
62
+ return null;
63
+ return JSON.parse(value);
64
+ }
65
+ catch (error) {
66
+ Logger.error('Redis GET failed', error);
67
+ return null;
68
+ }
69
+ },
70
+ async set(key, value, ttl) {
71
+ try {
72
+ const prefixedKey = RedisKeys.createCacheKey(key);
73
+ const jsonValue = JSON.stringify(value);
74
+ if (ttl === undefined) {
75
+ await client.set(prefixedKey, jsonValue);
76
+ return;
77
+ }
78
+ await client.set(prefixedKey, jsonValue, 'EX', ttl);
79
+ }
80
+ catch (error) {
81
+ Logger.error('Redis SET failed', error);
82
+ }
83
+ },
84
+ async delete(key) {
85
+ try {
86
+ const prefixedKey = RedisKeys.createCacheKey(key);
87
+ await client.del(prefixedKey);
88
+ }
89
+ catch (error) {
90
+ Logger.error('Redis DEL failed', error);
91
+ }
92
+ },
93
+ async clear() {
94
+ try {
95
+ await client.flushdb();
96
+ }
97
+ catch (error) {
98
+ Logger.error('Redis FLUSHDB failed', error);
99
+ }
100
+ },
101
+ async has(key) {
102
+ try {
103
+ const prefixedKey = RedisKeys.createCacheKey(key);
104
+ const out = await client.exists(prefixedKey);
105
+ return out > 0;
106
+ }
107
+ catch (error) {
108
+ Logger.error('Redis EXISTS failed', error);
109
+ return false;
110
+ }
111
+ },
112
+ });
113
+ const createIoredisCacheDriver = (params) => {
114
+ const client = createIoredisClient(params);
115
+ return client === null ? null : createCacheDriverFromIoredisClient(client);
116
+ };
117
+ const createTcpConnect = (params) => {
13
118
  let client = null;
14
- const host = Env.REDIS_HOST;
15
- const port = Env.REDIS_PORT;
16
- const connect = async () => {
119
+ return async () => {
17
120
  if (client && !client.destroyed)
18
121
  return client;
19
122
  return new Promise((resolve, reject) => {
20
- const socket = net.connect(port, host, () => {
21
- client = socket;
22
- resolve(socket);
23
- });
24
- socket.on('error', (err) => {
123
+ const onTimeout = () => {
124
+ cleanup();
125
+ try {
126
+ socket.destroy?.();
127
+ }
128
+ catch {
129
+ /* ignore */
130
+ }
131
+ reject(ErrorFactory.createConnectionError('Redis connection timeout', {
132
+ host: params.host,
133
+ port: params.port,
134
+ timeoutMs: params.connectTimeoutMs,
135
+ }));
136
+ };
137
+ const onError = (err) => {
138
+ cleanup();
25
139
  Logger.error(`Redis Connection Error: ${err.message}`);
26
140
  reject(err);
27
- });
141
+ };
142
+ const onErrorUnknown = (err) => {
143
+ if (err instanceof Error) {
144
+ onError(err);
145
+ return;
146
+ }
147
+ cleanup();
148
+ const msg = String(err);
149
+ Logger.error(`Redis Connection Error: ${msg}`);
150
+ reject(ErrorFactory.createConnectionError(`Redis Connection Error: ${msg}`, {
151
+ error: msg,
152
+ }));
153
+ };
154
+ const onConnect = () => {
155
+ cleanup();
156
+ client = socket;
157
+ resolve(socket);
158
+ };
159
+ const socket = net.connect(params.port, params.host, onConnect);
160
+ const anySocket = socket;
161
+ const cleanup = () => {
162
+ anySocket.setTimeout?.(0);
163
+ anySocket.removeListener?.('timeout', onTimeout);
164
+ anySocket.removeListener?.('error', onErrorUnknown);
165
+ };
166
+ anySocket.setTimeout?.(Math.max(1, params.connectTimeoutMs));
167
+ listenPreferOnce(anySocket, 'timeout', onTimeout);
168
+ listenPreferOn(anySocket, 'error', onErrorUnknown);
28
169
  });
29
170
  };
30
- const sendCommand = async (command) => {
31
- const socket = await connect();
32
- return new Promise((resolve, _reject) => {
33
- socket.once('data', (data) => {
34
- resolve(data.toString());
35
- });
36
- socket.write(command);
171
+ };
172
+ const createTcpSendCommand = (params) => {
173
+ return async (command) => {
174
+ const socket = await params.connect();
175
+ const anySocket = socket;
176
+ return new Promise((resolve, reject) => {
177
+ let settled = false;
178
+ const onDataUnknown = (data) => {
179
+ if (typeof data === 'string') {
180
+ settleOk(data);
181
+ return;
182
+ }
183
+ if (hasToString(data)) {
184
+ settleOk(data.toString());
185
+ return;
186
+ }
187
+ settleOk(String(data));
188
+ };
189
+ const onErrorUnknown = (err) => {
190
+ settleErr(err instanceof Error
191
+ ? err
192
+ : ErrorFactory.createConnectionError('Redis socket error', {
193
+ error: String(err),
194
+ }));
195
+ };
196
+ const cleanup = () => {
197
+ anySocket.setTimeout?.(0);
198
+ anySocket.removeListener?.('data', onDataUnknown);
199
+ anySocket.removeListener?.('error', onErrorUnknown);
200
+ anySocket.removeListener?.('timeout', onTimeout);
201
+ };
202
+ const settleOk = (value) => {
203
+ if (settled)
204
+ return;
205
+ settled = true;
206
+ cleanup();
207
+ resolve(value);
208
+ };
209
+ const settleErr = (err) => {
210
+ if (settled)
211
+ return;
212
+ settled = true;
213
+ cleanup();
214
+ reject(err);
215
+ };
216
+ const onTimeout = () => settleErr(ErrorFactory.createConnectionError('Redis command timeout', {
217
+ timeoutMs: params.commandTimeoutMs,
218
+ }));
219
+ anySocket.setTimeout?.(Math.max(1, params.commandTimeoutMs));
220
+ listenPreferOnce(anySocket, 'data', onDataUnknown);
221
+ listenPreferOnce(anySocket, 'timeout', onTimeout);
222
+ listenPreferOn(anySocket, 'error', onErrorUnknown);
223
+ anySocket.write?.(command);
37
224
  });
38
225
  };
226
+ };
227
+ const createTcpCacheDriver = () => {
228
+ const host = Env.REDIS_HOST;
229
+ const port = Env.REDIS_PORT;
230
+ const connectTimeoutMs = Env.getInt('REDIS_CONNECT_TIMEOUT_MS', 5_000);
231
+ const commandTimeoutMs = Env.getInt('REDIS_COMMAND_TIMEOUT_MS', 5_000);
232
+ const connect = createTcpConnect({ host, port, connectTimeoutMs });
233
+ const sendCommand = createTcpSendCommand({ connect, commandTimeoutMs });
39
234
  return {
40
235
  async get(key) {
41
236
  try {
@@ -43,7 +238,6 @@ const create = () => {
43
238
  const response = await sendCommand(`GET ${prefixedKey}\r\n`);
44
239
  if (response.startsWith('$-1'))
45
240
  return null;
46
- // Basic RESP parsing
47
241
  const lines = response.split('\r\n');
48
242
  const value = lines[1];
49
243
  return JSON.parse(value);
@@ -54,28 +248,57 @@ const create = () => {
54
248
  }
55
249
  },
56
250
  async set(key, value, ttl) {
57
- const prefixedKey = RedisKeys.createCacheKey(key);
58
- const jsonValue = JSON.stringify(value);
59
- let command = `SET ${prefixedKey} ${jsonValue}\r\n`;
60
- if (ttl !== undefined) {
61
- command = `SETEX ${prefixedKey} ${ttl} ${jsonValue}\r\n`;
251
+ try {
252
+ const prefixedKey = RedisKeys.createCacheKey(key);
253
+ const jsonValue = JSON.stringify(value);
254
+ const command = ttl === undefined
255
+ ? `SET ${prefixedKey} ${jsonValue}\r\n`
256
+ : `SETEX ${prefixedKey} ${ttl} ${jsonValue}\r\n`;
257
+ await sendCommand(command);
258
+ }
259
+ catch (error) {
260
+ Logger.error('Redis SET failed', error);
62
261
  }
63
- await sendCommand(command);
64
262
  },
65
263
  async delete(key) {
66
- const prefixedKey = RedisKeys.createCacheKey(key);
67
- await sendCommand(`DEL ${prefixedKey}\r\n`);
264
+ try {
265
+ const prefixedKey = RedisKeys.createCacheKey(key);
266
+ await sendCommand(`DEL ${prefixedKey}\r\n`);
267
+ }
268
+ catch (error) {
269
+ Logger.error('Redis DEL failed', error);
270
+ }
68
271
  },
69
272
  async clear() {
70
- await sendCommand(`FLUSHDB\r\n`);
273
+ try {
274
+ await sendCommand(`FLUSHDB\r\n`);
275
+ }
276
+ catch (error) {
277
+ Logger.error('Redis FLUSHDB failed', error);
278
+ }
71
279
  },
72
280
  async has(key) {
73
- const prefixedKey = RedisKeys.createCacheKey(key);
74
- const response = await sendCommand(`EXISTS ${prefixedKey}\r\n`);
75
- return response.includes(':1');
281
+ try {
282
+ const prefixedKey = RedisKeys.createCacheKey(key);
283
+ const response = await sendCommand(`EXISTS ${prefixedKey}\r\n`);
284
+ return response.includes(':1');
285
+ }
286
+ catch (error) {
287
+ Logger.error('Redis EXISTS failed', error);
288
+ return false;
289
+ }
76
290
  },
77
291
  };
78
292
  };
293
+ /**
294
+ * Create a new Redis driver instance
295
+ */
296
+ const create = () => {
297
+ const isWorkersRuntime = Cloudflare.getWorkersEnv() !== null;
298
+ const wantsProxy = Env.USE_REDIS_PROXY === true || (Env.get('REDIS_PROXY_URL', '') || '').trim() !== '';
299
+ const ioredisDriver = createIoredisCacheDriver({ isWorkersRuntime, wantsProxy });
300
+ return ioredisDriver ?? createTcpCacheDriver();
301
+ };
79
302
  /**
80
303
  * RedisDriver namespace - sealed for immutability
81
304
  */
@@ -1 +1 @@
1
- {"version":3,"file":"CLI.d.ts","sourceRoot":"","sources":["../../../src/cli/CLI.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,WAAW,IAAI;IACnB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,UAAU,IAAI,OAAO,CAAC;CACvB;AAuPD;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG;cACJ,IAAI;EAed,CAAC"}
1
+ {"version":3,"file":"CLI.d.ts","sourceRoot":"","sources":["../../../src/cli/CLI.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,WAAW,IAAI;IACnB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,UAAU,IAAI,OAAO,CAAC;CACvB;AA0PD;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG;cACJ,IAAI;EAed,CAAC"}
package/src/cli/CLI.js CHANGED
@@ -14,10 +14,13 @@ import { DbSeedCommand } from './commands/DbSeedCommand.js';
14
14
  import { DebugCommand } from './commands/DebugCommand.js';
15
15
  import { DeployCommand } from './commands/DeployCommand.js';
16
16
  import { DeployContainerProxiesCommand } from './commands/DeployContainerProxiesCommand.js';
17
+ import { DeployContainersProxyCommand } from './commands/DeployContainersProxyCommand.js';
17
18
  import { DeployContainerWorkersCommand } from './commands/DeployContainerWorkersCommand.js';
19
+ import { DockerCommand } from './commands/DockerCommand.js';
18
20
  import { DoctorArchitectureCommand } from './commands/DoctorArchitectureCommand.js';
19
21
  import { FixCommand } from './commands/FixCommand.js';
20
22
  import { InitContainerCommand } from './commands/InitContainerCommand.js';
23
+ import { InitContainersProxyCommand } from './commands/InitContainersProxyCommand.js';
21
24
  import { InitEcosystemCommand } from './commands/InitEcosystemCommand.js';
22
25
  import { InitProducerCommand } from './commands/InitProducerCommand.js';
23
26
  import { InitProxyCommand } from './commands/InitProxyCommand.js';
@@ -75,6 +78,7 @@ const buildCommandRegistry = () => {
75
78
  UpgradeCommand.create(),
76
79
  PrepareCommand,
77
80
  InitContainerCommand.create(),
81
+ InitContainersProxyCommand.create(),
78
82
  InitProxyCommand.create(),
79
83
  InitProducerCommand.create(),
80
84
  InitEcosystemCommand.create(),
@@ -84,6 +88,7 @@ const buildCommandRegistry = () => {
84
88
  CreateMigrationCommand.create(),
85
89
  AddMigrationCommand.create(),
86
90
  StartCommand.create(),
91
+ DockerCommand.create(),
87
92
  QueueCommand.create(),
88
93
  QueueRecoveryCommand.create(),
89
94
  ScheduleListCommand.create(),
@@ -106,6 +111,7 @@ const buildCommandRegistry = () => {
106
111
  PublishCommand.create(),
107
112
  PutCommand.create(),
108
113
  DeployCommand.create(),
114
+ DeployContainersProxyCommand.create(),
109
115
  DeployContainerWorkersCommand.create(),
110
116
  DeployContainerProxiesCommand.create(),
111
117
  QACommand(),
@@ -1 +1 @@
1
- {"version":3,"file":"DeployCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/DeployCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA0HrE;;;GAGG;AACH,eAAO,MAAM,aAAa;IACxB;;OAEG;cACO,YAAY;EAGtB,CAAC"}
1
+ {"version":3,"file":"DeployCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/DeployCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAyIrE;;;GAGG;AACH,eAAO,MAAM,aAAa;IACxB;;OAEG;cACO,YAAY;EAGtB,CAAC"}
@@ -59,10 +59,20 @@ const runDeploy = async (target, options) => {
59
59
  return;
60
60
  }
61
61
  const environment = options.env ?? target ?? 'worker';
62
+ const config = typeof options.config === 'string' ? options.config.trim() : '';
63
+ if (config.length > 0) {
64
+ const full = join(process.cwd(), config);
65
+ if (existsSync(full)) {
66
+ // ok
67
+ }
68
+ else {
69
+ throw ErrorFactory.createCliError(`Wrangler config not found: ${config}`);
70
+ }
71
+ }
62
72
  Logger.info(`Deploying to Cloudflare environment: ${environment}`);
63
73
  const exitCode = await SpawnUtil.spawnAndWait({
64
74
  command: 'wrangler',
65
- args: ['deploy', '--env', environment],
75
+ args: ['deploy', ...(config.length > 0 ? ['--config', config] : []), '--env', environment],
66
76
  });
67
77
  if (exitCode !== 0) {
68
78
  process.exit(exitCode);
@@ -76,6 +86,7 @@ const createDeployCommand = () => {
76
86
  command
77
87
  .argument('[target]', 'Deployment target (worker, d1-proxy, kv-proxy, production, cw, cp)', 'worker')
78
88
  .option('-e, --env <env>', 'Wrangler environment (overrides target)');
89
+ command.option('-c, --config <path>', 'Wrangler config file (e.g. wrangler.containers-proxy.jsonc)');
79
90
  },
80
91
  execute: async (options) => {
81
92
  // Note: BaseCommand.create sets up action handler that calls execute(options).
@@ -0,0 +1,5 @@
1
+ import type { IBaseCommand } from '../BaseCommand';
2
+ export declare const DeployContainersProxyCommand: Readonly<{
3
+ create(): IBaseCommand;
4
+ }>;
5
+ //# sourceMappingURL=DeployContainersProxyCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeployContainersProxyCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/DeployContainersProxyCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA2CrE,eAAO,MAAM,4BAA4B;cAC7B,YAAY;EAatB,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { BaseCommand } from '../BaseCommand.js';
2
+ import { SpawnUtil } from '../utils/spawn.js';
3
+ import { Logger } from '../../config/logger.js';
4
+ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
5
+ import { existsSync } from '../../node-singletons/fs.js';
6
+ import { join } from '../../node-singletons/path.js';
7
+ const DEFAULT_CONFIG = 'wrangler.containers-proxy.jsonc';
8
+ const resolveConfig = (cwd, raw) => {
9
+ const normalized = typeof raw === 'string' ? raw.trim() : '';
10
+ const candidate = normalized.length > 0 ? normalized : DEFAULT_CONFIG;
11
+ const full = join(cwd, candidate);
12
+ if (existsSync(full))
13
+ return candidate;
14
+ throw ErrorFactory.createCliError(`Wrangler config not found: ${candidate}`);
15
+ };
16
+ const resolveEnv = (raw) => {
17
+ const normalized = typeof raw === 'string' ? raw.trim() : '';
18
+ return normalized.length > 0 ? normalized : 'production';
19
+ };
20
+ const execute = async (options) => {
21
+ const cwd = process.cwd();
22
+ const config = resolveConfig(cwd, options.config);
23
+ const env = resolveEnv(options.env);
24
+ Logger.info(`Deploying Containers proxy via Wrangler (env=${env})...`);
25
+ const exitCode = await SpawnUtil.spawnAndWait({
26
+ command: 'wrangler',
27
+ args: ['deploy', '--config', config, '--env', env],
28
+ env: process.env,
29
+ });
30
+ process.exit(exitCode);
31
+ };
32
+ export const DeployContainersProxyCommand = Object.freeze({
33
+ create() {
34
+ return BaseCommand.create({
35
+ name: 'deploy:ccp',
36
+ aliases: ['deploy:containers-proxy', 'deploy:cf-containers-proxy', 'd:ccp', 'ccp:deploy'],
37
+ description: 'Deploy Cloudflare Containers proxy Worker (wrangler.containers-proxy.jsonc)',
38
+ addOptions: (command) => {
39
+ command.option('-e, --env <name>', 'Wrangler environment name', 'production');
40
+ command.option('-c, --config <path>', 'Wrangler config file', DEFAULT_CONFIG);
41
+ },
42
+ execute: async (options) => execute(options),
43
+ });
44
+ },
45
+ });
@@ -0,0 +1,5 @@
1
+ import type { IBaseCommand } from '../BaseCommand';
2
+ export declare const DockerCommand: Readonly<{
3
+ create(): IBaseCommand;
4
+ }>;
5
+ //# sourceMappingURL=DockerCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DockerCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/DockerCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA0ErE,eAAO,MAAM,aAAa;cACd,YAAY;EAiBtB,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { BaseCommand } from '../BaseCommand.js';
2
+ import { SpawnUtil } from '../utils/spawn.js';
3
+ import { Logger } from '../../config/logger.js';
4
+ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
5
+ import { existsSync } from '../../node-singletons/fs.js';
6
+ import { join } from '../../node-singletons/path.js';
7
+ const resolveDefaultWranglerConfig = (cwd) => {
8
+ const candidates = [
9
+ 'wrangler.containers-proxy.jsonc',
10
+ 'wrangler.containers-proxy.json',
11
+ 'wrangler.containers-proxy.toml',
12
+ 'wrangler.jsonc',
13
+ 'wrangler.json',
14
+ 'wrangler.toml',
15
+ ];
16
+ for (const candidate of candidates) {
17
+ const full = join(cwd, candidate);
18
+ if (existsSync(full))
19
+ return candidate;
20
+ }
21
+ return undefined;
22
+ };
23
+ const resolvePort = (raw) => {
24
+ const value = typeof raw === 'string' ? raw.trim() : '';
25
+ if (value === '')
26
+ return undefined;
27
+ const parsed = Number.parseInt(value, 10);
28
+ if (!Number.isFinite(parsed) || parsed <= 0 || parsed >= 65536) {
29
+ throw ErrorFactory.createCliError(`Error: Invalid --port '${value}'. Expected 1-65535.`);
30
+ }
31
+ return String(parsed);
32
+ };
33
+ const resolveWranglerConfig = (cwd, options) => {
34
+ const fromCli = typeof options.wranglerConfig === 'string' ? options.wranglerConfig.trim() : '';
35
+ if (fromCli.length > 0) {
36
+ const full = join(cwd, fromCli);
37
+ if (existsSync(full))
38
+ return fromCli;
39
+ throw ErrorFactory.createCliError(`Wrangler config not found: ${fromCli}`);
40
+ }
41
+ const fallback = resolveDefaultWranglerConfig(cwd);
42
+ if (typeof fallback === 'string' && fallback.length > 0)
43
+ return fallback;
44
+ throw ErrorFactory.createCliError('Wrangler config not found. Expected wrangler.containers-proxy.jsonc (or wrangler.jsonc/toml).');
45
+ };
46
+ const executeDocker = async (options) => {
47
+ const cwd = process.cwd();
48
+ const config = resolveWranglerConfig(cwd, options);
49
+ const env = typeof options.env === 'string' ? options.env.trim() : '';
50
+ const port = resolvePort(options.port);
51
+ const args = ['dev', '--config', config];
52
+ if (typeof port === 'string' && port.length > 0)
53
+ args.push('--port', port);
54
+ if (env.length > 0)
55
+ args.push('--env', env);
56
+ Logger.info('Starting Wrangler dev (Containers/Docker-backed)...');
57
+ const exitCode = await SpawnUtil.spawnAndWait({ command: 'wrangler', args, env: process.env });
58
+ process.exit(exitCode);
59
+ };
60
+ export const DockerCommand = Object.freeze({
61
+ create() {
62
+ return BaseCommand.create({
63
+ name: 'docker',
64
+ aliases: ['dkr', 'dk'],
65
+ description: 'Run Wrangler dev using a Docker-backed Cloudflare Containers config',
66
+ addOptions: (command) => {
67
+ command.option('-c, --wrangler-config <path>', 'Wrangler config file (defaults if present)');
68
+ command.option('-e, --env <name>', 'Wrangler environment name');
69
+ command.option('-p, --port <number>', 'Port for wrangler dev');
70
+ },
71
+ execute: async (options) => executeDocker(options),
72
+ });
73
+ },
74
+ });
@@ -98,7 +98,7 @@ services:
98
98
  `;
99
99
  const DOCKERFILE_TEMPLATE = String.raw `# syntax=docker/dockerfile:1.6
100
100
  # Build Stage - Compile TypeScript
101
- FROM node:20-alpine AS builder
101
+ FROM node:20-bookworm-slim AS builder
102
102
 
103
103
  WORKDIR /app
104
104
 
@@ -106,12 +106,10 @@ WORKDIR /app
106
106
  ENV NPM_CONFIG_CACHE=/root/.npm
107
107
  ENV NPM_CONFIG_PREFER_OFFLINE=true
108
108
 
109
- # Reuse npm cache across builds (requires BuildKit)
110
- ENV NPM_CONFIG_CACHE=/root/.npm
111
- ENV NPM_CONFIG_PREFER_OFFLINE=true
112
-
113
109
  # Install build dependencies for native modules (better-sqlite3, bcrypt)
114
- RUN apk add --no-cache python3 make g++
110
+ RUN apt-get update \
111
+ && apt-get install -y --no-install-recommends python3 make g++ \
112
+ && rm -rf /var/lib/apt/lists/*
115
113
 
116
114
  # Copy package files
117
115
  COPY package.json package-lock.json ./
@@ -131,7 +129,7 @@ ARG BUILD_VARIANT=full
131
129
  RUN --mount=type=cache,target=/root/.npm,id=zintrust-npm-cache,sharing=locked npm run build:dk
132
130
 
133
131
  # Runtime Stage - Production image
134
- FROM node:20-alpine AS runtime
132
+ FROM node:20-bookworm-slim AS runtime
135
133
 
136
134
  WORKDIR /app
137
135
 
@@ -141,16 +139,18 @@ ENV PORT=7772
141
139
  ENV HOST=0.0.0.0
142
140
 
143
141
  # Create non-root user for security
144
- RUN addgroup -g 1001 -S nodejs && adduser -S nodejs -u 1001
142
+ RUN groupadd -g 1001 nodejs && useradd -u 1001 -g 1001 -m -s /usr/sbin/nologin nodejs
145
143
 
146
144
  # Copy package files for production dependencies
147
145
  COPY package.json package-lock.json ./
148
146
 
149
147
  # Install only production dependencies (requires build tools for native modules)
150
148
  RUN --mount=type=cache,target=/root/.npm,id=zintrust-npm-cache,sharing=locked \
151
- apk add --no-cache --virtual .build-deps python3 make g++ \
149
+ apt-get update \
150
+ && apt-get install -y --no-install-recommends python3 make g++ \
152
151
  && npm ci --omit=dev \
153
- && apk del .build-deps
152
+ && apt-get purge -y --auto-remove python3 make g++ \
153
+ && rm -rf /var/lib/apt/lists/*
154
154
 
155
155
  # Copy compiled code from builder stage
156
156
  COPY --from=builder /app/dist ./dist
@@ -0,0 +1,5 @@
1
+ import { type IBaseCommand } from '../BaseCommand';
2
+ export declare const InitContainersProxyCommand: Readonly<{
3
+ create(): IBaseCommand;
4
+ }>;
5
+ //# sourceMappingURL=InitContainersProxyCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InitContainersProxyCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/InitContainersProxyCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA6JlE,eAAO,MAAM,0BAA0B;cAC3B,YAAY;EAuBtB,CAAC"}