@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
@@ -0,0 +1,159 @@
1
+ import { BaseCommand } from '../BaseCommand.js';
2
+ import { PromptHelper } from '../PromptHelper.js';
3
+ import { Logger } from '../../config/logger.js';
4
+ import { copyFileSync, existsSync, mkdirSync, writeFileSync } from '../../node-singletons/fs.js';
5
+ import { join } from '../../node-singletons/path.js';
6
+ const WRANGLER_CONTAINERS_PROXY_TEMPLATE = `/**
7
+ * ============================================================================
8
+ * ZinTrust Cloudflare Containers Proxy
9
+ * ============================================================================
10
+ * This Worker acts as the "gateway" for the DB/KV/SMTP proxy stack.
11
+ *
12
+ * Requests are routed by path prefix:
13
+ * /mysql/* -> ZintrustMySqlProxyContainer (port 8789)
14
+ * /postgres/* -> ZintrustPostgresProxyContainer (port 8790)
15
+ * /redis/* -> ZintrustRedisProxyContainer (port 8791)
16
+ * /mongodb/* -> ZintrustMongoDbProxyContainer (port 8792)
17
+ * /sqlserver/* -> ZintrustSqlServerProxyContainer (port 8793)
18
+ * /smtp/* -> ZintrustSmtpProxyContainer (port 8794)
19
+ *
20
+ * Notes:
21
+ * - You must install the runtime package: "@zintrust/cloudflare-containers-proxy".
22
+ * - Secrets should be uploaded with the same config file.
23
+ * ============================================================================
24
+ */
25
+
26
+ {
27
+ "name": "zintrust-containers-proxy",
28
+ "main": "./src/containers-proxy.ts",
29
+
30
+ "compatibility_date": "2025-04-21",
31
+ "compatibility_flags": ["nodejs_compat"],
32
+
33
+ "workers_dev": true,
34
+ "minify": false,
35
+
36
+ "containers": [
37
+ { "class_name": "ZintrustMySqlProxyContainer", "image": "./Dockerfile", "max_instances": 10 },
38
+ { "class_name": "ZintrustPostgresProxyContainer", "image": "./Dockerfile", "max_instances": 10 },
39
+ { "class_name": "ZintrustRedisProxyContainer", "image": "./Dockerfile", "max_instances": 10 },
40
+ { "class_name": "ZintrustMongoDbProxyContainer", "image": "./Dockerfile", "max_instances": 10 },
41
+ { "class_name": "ZintrustSqlServerProxyContainer", "image": "./Dockerfile", "max_instances": 10 },
42
+ { "class_name": "ZintrustSmtpProxyContainer", "image": "./Dockerfile", "max_instances": 10 }
43
+ ],
44
+
45
+ "durable_objects": {
46
+ "bindings": [
47
+ { "name": "ZT_PROXY_MYSQL", "class_name": "ZintrustMySqlProxyContainer" },
48
+ { "name": "ZT_PROXY_POSTGRES", "class_name": "ZintrustPostgresProxyContainer" },
49
+ { "name": "ZT_PROXY_REDIS", "class_name": "ZintrustRedisProxyContainer" },
50
+ { "name": "ZT_PROXY_MONGODB", "class_name": "ZintrustMongoDbProxyContainer" },
51
+ { "name": "ZT_PROXY_SQLSERVER", "class_name": "ZintrustSqlServerProxyContainer" },
52
+ { "name": "ZT_PROXY_SMTP", "class_name": "ZintrustSmtpProxyContainer" }
53
+ ]
54
+ },
55
+
56
+ "migrations": [
57
+ {
58
+ "tag": "containers-proxy-v1",
59
+ "new_sqlite_classes": [
60
+ "ZintrustMySqlProxyContainer",
61
+ "ZintrustPostgresProxyContainer",
62
+ "ZintrustRedisProxyContainer",
63
+ "ZintrustMongoDbProxyContainer",
64
+ "ZintrustSqlServerProxyContainer",
65
+ "ZintrustSmtpProxyContainer"
66
+ ]
67
+ }
68
+ ],
69
+
70
+ "env": {
71
+ "staging": {
72
+ "name": "zintrust-containers-proxy-staging",
73
+ "minify": false,
74
+ "vars": {
75
+ "ENVIRONMENT": "staging",
76
+ "APP_NAME": "ZinTrust",
77
+ "CSRF_SKIP_PATHS": "/api/*,/queue-monitor/*"
78
+ },
79
+ // Add routes here when ready:
80
+ // "routes": [{ "pattern": "proxy-staging.example.com", "custom_domain": true }]
81
+ },
82
+ "production": {
83
+ "name": "zintrust-containers-proxy-production",
84
+ "minify": true,
85
+ "vars": {
86
+ "ENVIRONMENT": "production",
87
+ "APP_NAME": "ZinTrust",
88
+ "CSRF_SKIP_PATHS": "/api/*,/queue-monitor/*"
89
+ },
90
+ // Add routes here when ready:
91
+ // "routes": [{ "pattern": "proxy.example.com", "custom_domain": true }]
92
+ }
93
+ }
94
+ }
95
+ `;
96
+ const WORKER_ENTRY_TEMPLATE = `export { default } from '@zintrust/cloudflare-containers-proxy';
97
+ export * from '@zintrust/cloudflare-containers-proxy';
98
+ `;
99
+ const backupSuffix = () => new Date().toISOString().replaceAll(/[:.]/g, '-');
100
+ const backupFileIfExists = (filePath) => {
101
+ if (!existsSync(filePath))
102
+ return;
103
+ const backupPath = `${filePath}.bak.${backupSuffix()}`;
104
+ copyFileSync(filePath, backupPath);
105
+ Logger.info(`🗂️ Backup created: ${backupPath}`);
106
+ };
107
+ async function writeWranglerConfig(cwd) {
108
+ const configPath = join(cwd, 'wrangler.containers-proxy.jsonc');
109
+ let shouldWrite = true;
110
+ if (existsSync(configPath)) {
111
+ shouldWrite = await PromptHelper.confirm('wrangler.containers-proxy.jsonc already exists. Overwrite?', false);
112
+ }
113
+ if (!shouldWrite) {
114
+ Logger.info('Skipped wrangler.containers-proxy.jsonc');
115
+ return;
116
+ }
117
+ backupFileIfExists(configPath);
118
+ writeFileSync(configPath, WRANGLER_CONTAINERS_PROXY_TEMPLATE);
119
+ Logger.info('✅ Created wrangler.containers-proxy.jsonc');
120
+ }
121
+ async function writeWorkerEntry(cwd) {
122
+ const srcDir = join(cwd, 'src');
123
+ const entryPath = join(srcDir, 'containers-proxy.ts');
124
+ if (!existsSync(srcDir)) {
125
+ mkdirSync(srcDir, { recursive: true });
126
+ }
127
+ let shouldWrite = true;
128
+ if (existsSync(entryPath)) {
129
+ shouldWrite = await PromptHelper.confirm('src/containers-proxy.ts already exists. Overwrite?', false);
130
+ }
131
+ if (!shouldWrite) {
132
+ Logger.info('Skipped src/containers-proxy.ts');
133
+ return;
134
+ }
135
+ backupFileIfExists(entryPath);
136
+ writeFileSync(entryPath, WORKER_ENTRY_TEMPLATE);
137
+ Logger.info('✅ Created src/containers-proxy.ts');
138
+ }
139
+ export const InitContainersProxyCommand = Object.freeze({
140
+ create() {
141
+ return BaseCommand.create({
142
+ name: 'init:containers-proxy',
143
+ aliases: ['init:ccp', 'init:cf-containers-proxy'],
144
+ description: 'Scaffold Cloudflare Containers proxy Worker (wrangler.containers-proxy.jsonc)',
145
+ async execute() {
146
+ Logger.info('Initializing Cloudflare Containers proxy scaffolding...');
147
+ const cwd = process.cwd();
148
+ await writeWranglerConfig(cwd);
149
+ await writeWorkerEntry(cwd);
150
+ Logger.info('✅ Containers proxy scaffolding complete.');
151
+ Logger.info('Install runtime: npm i @zintrust/cloudflare-containers-proxy');
152
+ Logger.info('Dev (Wrangler + Docker): zin docker --wrangler-config wrangler.containers-proxy.jsonc --env staging');
153
+ Logger.info('Dev (short): zin dk -e staging');
154
+ Logger.info('Deploy (short): zin d:ccp');
155
+ await Promise.resolve();
156
+ },
157
+ });
158
+ },
159
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"NewCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/NewCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAerE,KAAK,YAAY,GAAG,OAAO,GAAG,KAAK,GAAG,cAAc,GAAG,WAAW,CAAC;AACnE,KAAK,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,SAAS,GAAG,WAAW,CAAC;AAYhF,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAwPhD,UAAU,WAAY,SAAQ,YAAY;IACxC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACxF,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACzF,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,GAAG,gBAAgB,EAAE,CAAC;IACjF,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;IAChC,YAAY,IAAI,MAAM,CAAC;IACvB,cAAc,CACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,sBAAsB,EAC9B,SAAS,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACpE;AAwOD;;;GAGG;AACH,eAAO,MAAM,UAAU;IACrB;;OAEG;cACO,WAAW;EAGrB,CAAC"}
1
+ {"version":3,"file":"NewCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/NewCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAgBrE,KAAK,YAAY,GAAG,OAAO,GAAG,KAAK,GAAG,cAAc,GAAG,WAAW,CAAC;AACnE,KAAK,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,SAAS,GAAG,WAAW,CAAC;AAYhF,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAwPhD,UAAU,WAAY,SAAQ,YAAY;IACxC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACxF,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACzF,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,GAAG,gBAAgB,EAAE,CAAC;IACjF,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;IAChC,YAAY,IAAI,MAAM,CAAC;IACvB,cAAc,CACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,sBAAsB,EAC9B,SAAS,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACpE;AA0RD;;;GAGG;AACH,eAAO,MAAM,UAAU;IACrB;;OAEG;cACO,WAAW;EAGrB,CAAC"}
@@ -8,6 +8,7 @@ import { extractErrorMessage, resolvePackageManager } from '../../common/index.j
8
8
  import { appConfig } from '../../config/app.js';
9
9
  import { ErrorFactory } from '../../exceptions/ZintrustError.js';
10
10
  import { execFileSync } from '../../node-singletons/child-process.js';
11
+ import fs from '../../node-singletons/fs.js';
11
12
  import * as path from '../../node-singletons/path.js';
12
13
  import chalk from 'chalk';
13
14
  const getGitBinary = () => 'git';
@@ -233,9 +234,39 @@ const addOptions = (command) => {
233
234
  command.option('--install', 'Force dependency installation (useful to override CI defaults)');
234
235
  command.option('--package-manager <manager>', 'Package manager to use (npm, yarn, pnpm)');
235
236
  command.option('--governance', 'Install governance tooling (ESLint + architecture tests)', false);
237
+ command.option('--with-d1-proxy', 'Add @zintrust/cloudflare-d1-proxy to package.json (for deploying the D1 proxy worker)', false);
236
238
  command.option('--force', 'Overwrite existing directory');
237
239
  command.option('--overwrite', 'Overwrite existing directory');
238
240
  };
241
+ const maybeAddD1ProxyDependency = (projectPath, options, log) => {
242
+ const enabled = options['withD1Proxy'] === true || options['with-d1-proxy'] === true;
243
+ if (!enabled)
244
+ return;
245
+ const packageJsonPath = path.join(projectPath, 'package.json');
246
+ if (!fs.existsSync(packageJsonPath)) {
247
+ log.warn(`Could not add @zintrust/cloudflare-d1-proxy (missing package.json at ${packageJsonPath})`);
248
+ return;
249
+ }
250
+ try {
251
+ const raw = fs.readFileSync(packageJsonPath, 'utf8');
252
+ const pkg = JSON.parse(raw);
253
+ const dependencies = { ...pkg.dependencies };
254
+ if (typeof dependencies['@zintrust/cloudflare-d1-proxy'] !== 'string') {
255
+ // Avoid pinning to core version (they can differ). Use a safe caret range.
256
+ dependencies['@zintrust/cloudflare-d1-proxy'] = '^0.1.42';
257
+ }
258
+ const next = {
259
+ ...pkg,
260
+ dependencies,
261
+ };
262
+ fs.writeFileSync(packageJsonPath, JSON.stringify(next, null, 2) + '\n');
263
+ log.info('✅ Added @zintrust/cloudflare-d1-proxy to dependencies');
264
+ }
265
+ catch (error) {
266
+ ErrorFactory.createCliError('Failed to update package.json with D1 proxy dependency', error);
267
+ log.warn('Please add @zintrust/cloudflare-d1-proxy manually if you need the proxy worker.');
268
+ }
269
+ };
239
270
  const resolveProjectName = async (options) => {
240
271
  const argName = options.args?.[0];
241
272
  const projectName = argName ?? (await PromptHelper.projectName('my-zintrust-app', true));
@@ -285,6 +316,8 @@ const createProject = async (target, options, command) => {
285
316
  throw ErrorFactory.createCliError(gov.message ?? 'Governance scaffolding failed', gov);
286
317
  }
287
318
  }
319
+ // Optional dependency injection must happen before `npm/yarn/pnpm install`.
320
+ maybeAddD1ProxyDependency(target.projectPath, options, command);
288
321
  };
289
322
  const maybeInitializeGit = (options, command, target) => {
290
323
  if (options['git'] !== false) {
@@ -1 +1 @@
1
- {"version":3,"file":"PutCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/PutCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAmNvF,eAAO,MAAM,UAAU;cACX,YAAY;EAWtB,CAAC;AAEH,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"PutCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/PutCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA0OvF,eAAO,MAAM,UAAU;cACX,YAAY;EAWtB,CAAC;AAEH,eAAe,UAAU,CAAC"}
@@ -74,9 +74,14 @@ const getPutTimeoutMs = () => {
74
74
  return 120000;
75
75
  return parsed;
76
76
  };
77
- const putSecret = (wranglerEnv, key, value) => {
77
+ const putSecret = (wranglerEnv, key, value, configPath) => {
78
78
  const npmPath = resolveNpmPath();
79
- execFileSync(npmPath, ['exec', '--yes', '--', 'wrangler', 'secret', 'put', key, '--env', wranglerEnv], {
79
+ const args = ['exec', '--yes', '--', 'wrangler'];
80
+ if (typeof configPath === 'string' && configPath.trim().length > 0) {
81
+ args.push('--config', configPath.trim());
82
+ }
83
+ args.push('secret', 'put', key, '--env', wranglerEnv);
84
+ execFileSync(npmPath, args, {
80
85
  stdio: ['pipe', 'inherit', 'inherit'],
81
86
  input: value,
82
87
  encoding: 'utf8',
@@ -91,6 +96,7 @@ const addOptions = (command) => {
91
96
  .option('--wg <env...>', 'Wrangler environment target(s), e.g. d1-proxy kv-proxy')
92
97
  .option('--var <configKey...>', 'Config array key(s) from .zintrust.json (e.g. d1_env kv_env)')
93
98
  .option('--env_path <path>', 'Path to env file used as source values', '.env')
99
+ .option('-c, --config <path>', 'Wrangler config file to target (optional)')
94
100
  .option('--dry-run', 'Show what would be uploaded without calling wrangler');
95
101
  };
96
102
  const ensureCloudflareProvider = (providerRaw) => {
@@ -122,7 +128,7 @@ const reportResult = (cmd, pushed, failures) => {
122
128
  cmd.warn(`${item.key} -> ${item.wranglerEnv}: ${item.reason}`);
123
129
  }
124
130
  };
125
- const processPut = (cmd, wranglerEnvs, selectedKeys, envMap, dryRun) => {
131
+ const processPut = (cmd, wranglerEnvs, selectedKeys, envMap, dryRun, configPath) => {
126
132
  let pushed = 0;
127
133
  const failures = [];
128
134
  for (const wranglerEnv of wranglerEnvs) {
@@ -135,7 +141,7 @@ const processPut = (cmd, wranglerEnvs, selectedKeys, envMap, dryRun) => {
135
141
  try {
136
142
  if (!dryRun) {
137
143
  cmd.info(`putting ${key} -> ${wranglerEnv}...`);
138
- putSecret(wranglerEnv, key, value);
144
+ putSecret(wranglerEnv, key, value, configPath);
139
145
  }
140
146
  pushed += 1;
141
147
  cmd.info(`${dryRun ? '[dry-run] ' : ''}put ${key} -> ${wranglerEnv}`);
@@ -156,7 +162,11 @@ const execute = async (cmd, options) => {
156
162
  const envMap = await EnvFile.read({ cwd, path: envFilePath });
157
163
  const wranglerEnvs = resolveWranglerEnvs(options);
158
164
  const dryRun = options.dryRun === true;
159
- const result = processPut(cmd, wranglerEnvs, selectedKeys, envMap, dryRun);
165
+ const configPath = typeof options.config === 'string' ? options.config.trim() : '';
166
+ if (configPath !== '' && !existsSync(path.join(cwd, configPath))) {
167
+ throw ErrorFactory.createCliError(`Wrangler config not found: ${configPath}`);
168
+ }
169
+ const result = processPut(cmd, wranglerEnvs, selectedKeys, envMap, dryRun, configPath === '' ? undefined : configPath);
160
170
  reportResult(cmd, result.pushed, result.failures);
161
171
  };
162
172
  export const PutCommand = Object.freeze({
@@ -1 +1 @@
1
- {"version":3,"file":"StartCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/StartCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAqkBvF,eAAO,MAAM,YAAY;cACb,YAAY;EA0BtB,CAAC"}
1
+ {"version":3,"file":"StartCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/StartCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAwnBvF,eAAO,MAAM,YAAY;cACb,YAAY;EA6BtB,CAAC"}
@@ -132,6 +132,20 @@ const resolveWatchPreference = (options, mode) => {
132
132
  return options.watch;
133
133
  return mode === 'development';
134
134
  };
135
+ const resolveCacheEnabledPreference = (options) => {
136
+ const hasCache = hasFlag('--cache');
137
+ const hasNoCache = hasFlag('--no-cache');
138
+ if (hasCache && hasNoCache) {
139
+ throw ErrorFactory.createCliError('Error: Cannot use both --cache and --no-cache.');
140
+ }
141
+ if (hasCache)
142
+ return true;
143
+ if (hasNoCache)
144
+ return false;
145
+ if (typeof options.cache === 'boolean')
146
+ return options.cache;
147
+ return undefined;
148
+ };
135
149
  const readPackageJson = (cwd) => {
136
150
  const packagePath = path.join(cwd, 'package.json');
137
151
  if (!existsSync(packagePath)) {
@@ -227,16 +241,29 @@ const resolveNodeProdCommand = (cwd) => {
227
241
  }
228
242
  return { command: 'node', args: [compiled] };
229
243
  };
230
- const executeWranglerStart = async (cmd, cwd, port, runtime, envName) => {
244
+ const executeWranglerStart = async (cmd, cwd, port, runtime, envName, wranglerConfig) => {
231
245
  if (runtime !== undefined) {
232
246
  throw ErrorFactory.createCliError('Error: --runtime is not supported with --wrangler (Wrangler controls Workers runtime).');
233
247
  }
234
- const configPath = findWranglerConfig(cwd);
248
+ const normalizedConfig = typeof wranglerConfig === 'string' ? wranglerConfig.trim() : '';
249
+ const explicitConfigFullPath = normalizedConfig.length > 0 ? path.join(cwd, normalizedConfig) : undefined;
250
+ const configPath = explicitConfigFullPath ?? findWranglerConfig(cwd);
235
251
  const entry = resolveWranglerEntry(cwd);
252
+ if (explicitConfigFullPath !== undefined) {
253
+ if (existsSync(explicitConfigFullPath)) {
254
+ // ok
255
+ }
256
+ else {
257
+ throw ErrorFactory.createCliError(`Error: Wrangler config not found: ${normalizedConfig}`);
258
+ }
259
+ }
236
260
  if (configPath === undefined && entry === undefined) {
237
261
  throw ErrorFactory.createCliError("Error: wrangler config not found (wrangler.toml/json). Run 'wrangler init' first.");
238
262
  }
239
263
  const wranglerArgs = ['dev'];
264
+ if (normalizedConfig !== '') {
265
+ wranglerArgs.push('--config', normalizedConfig);
266
+ }
240
267
  if (configPath === undefined && entry !== undefined) {
241
268
  wranglerArgs.push(entry);
242
269
  }
@@ -407,9 +434,18 @@ const executeStart = async (options, cmd) => {
407
434
  await executeSplitStart(cmd, cwd, options);
408
435
  return;
409
436
  }
410
- EnvFileLoader.applyCliOverrides({ nodeEnv: mode, port, runtime: effectiveRuntime });
437
+ const cacheEnabled = resolveCacheEnabledPreference(options);
438
+ EnvFileLoader.applyCliOverrides({
439
+ nodeEnv: mode,
440
+ port,
441
+ runtime: effectiveRuntime,
442
+ ...(typeof cacheEnabled === 'boolean' ? { cacheEnabled } : {}),
443
+ });
411
444
  if (variant === 'wrangler') {
412
- await executeWranglerStart(cmd, cwd, port, runtime, envName === '' ? undefined : envName);
445
+ const wranglerConfig = typeof options.wranglerConfig === 'string' && options.wranglerConfig.trim() !== ''
446
+ ? options.wranglerConfig.trim()
447
+ : undefined;
448
+ await executeWranglerStart(cmd, cwd, port, runtime, envName === '' ? undefined : envName, wranglerConfig);
413
449
  return;
414
450
  }
415
451
  if (envName !== '') {
@@ -435,10 +471,13 @@ export const StartCommand = Object.freeze({
435
471
  .option('--wg', 'Alias for --wrangler')
436
472
  .option('--deno', 'Start a local server using the Deno runtime adapter')
437
473
  .option('--lambda', 'Start a local server using the AWS Lambda runtime adapter')
474
+ .option('--cache', 'Enable cache functionality')
475
+ .option('--no-cache', 'Disable cache functionality')
438
476
  .option('--watch', 'Force watch mode (Node only)')
439
477
  .option('--no-watch', 'Disable watch mode (Node only)')
440
478
  .option('--mode <development|production|testing>', 'Override app mode')
441
479
  .option('--env <name>', 'Wrangler environment name (Wrangler mode only)')
480
+ .option('--wrangler-config <path>', 'Wrangler config path (Wrangler mode only)')
442
481
  .option('--runtime <nodejs|cloudflare|lambda|deno|auto>', 'Set RUNTIME for spawned Node')
443
482
  .option('-p, --port <number>', 'Override server port');
444
483
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ProjectScaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtD,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;IACpE,cAAc,IAAI,MAAM,CAAC;IACzB,sBAAsB,IAAI,OAAO,CAAC;IAClC,iBAAiB,IAAI,MAAM,CAAC;IAC5B,WAAW,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC;IACtD,gBAAgB,IAAI,OAAO,CAAC;IAC5B,aAAa,IAAI,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC3E;AA+eD,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAsBrE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAsBA;AA4ID;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,GAAE,MAAsB,GAAG,kBAAkB,CAsB/F;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAEhC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;EAM5B,CAAC"}
1
+ {"version":3,"file":"ProjectScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ProjectScaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtD,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;IACpE,cAAc,IAAI,MAAM,CAAC;IACzB,sBAAsB,IAAI,OAAO,CAAC;IAClC,iBAAiB,IAAI,MAAM,CAAC;IAC5B,WAAW,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC;IACtD,gBAAgB,IAAI,OAAO,CAAC;IAC5B,aAAa,IAAI,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC3E;AA8eD,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAsBrE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAsBA;AA4ID;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,GAAE,MAAsB,GAAG,kBAAkB,CAsB/F;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAEhC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;EAM5B,CAAC"}
@@ -125,41 +125,56 @@ const toSafeDbBasename = (raw) => {
125
125
  }
126
126
  return out === '' ? 'zintrust' : out;
127
127
  };
128
- const buildDatabaseEnvLinesWithName = (database, name) => {
129
- if (database === 'postgresql' || database === 'postgres') {
130
- return [
131
- 'DB_HOST=localhost',
132
- 'DB_PORT=5432',
133
- 'DB_DATABASE=zintrust',
134
- 'DB_USERNAME=postgres',
135
- 'DB_PASSWORD=',
136
- ];
128
+ const readEnvScaffoldTemplate = () => {
129
+ const templateUrl = new URL('./templates/env.scaffold.dotenv.tpl', import.meta.url);
130
+ return fs.readFileSync(templateUrl, 'utf8');
131
+ };
132
+ const renderEnvScaffold = (template, vars) => {
133
+ let out = template;
134
+ for (const [key, value] of Object.entries(vars)) {
135
+ out = out.replaceAll(`{{${key}}}`, value);
137
136
  }
138
- if (database === 'mysql') {
139
- return [
140
- 'DB_HOST=localhost',
141
- 'DB_PORT=3306',
142
- 'DB_DATABASE=zintrust',
143
- 'DB_USERNAME=root',
144
- 'DB_PASSWORD=',
145
- ];
137
+ // Normalize: if a placeholder resolves to empty, prevent excessive blank blocks.
138
+ out = out.replaceAll('\n\n\n', '\n\n');
139
+ return out;
140
+ };
141
+ const buildDbOverrides = (dbConnection) => {
142
+ const normalized = dbConnection.trim().toLowerCase();
143
+ if (normalized === 'mysql') {
144
+ return {
145
+ dbLines: [
146
+ 'DB_HOST=localhost',
147
+ 'DB_PORT=3306',
148
+ 'DB_DATABASE=zintrust',
149
+ 'DB_USERNAME=root',
150
+ 'DB_PASSWORD=',
151
+ ],
152
+ };
146
153
  }
147
- if (database === 'sqlite') {
148
- // Provide both DB_DATABASE (used by the framework) and DB_PATH (common alias)
149
- const base = toSafeDbBasename(name);
150
- return [`DB_DATABASE=.zintrust/dbs/${base}.sqlite`, `DB_PATH=.zintrust/dbs/${base}.sqlite`];
154
+ if (normalized === 'postgres' || normalized === 'postgresql') {
155
+ return {
156
+ dbLines: [
157
+ 'DB_HOST=localhost',
158
+ 'DB_PORT=5432',
159
+ 'DB_DATABASE=zintrust',
160
+ 'DB_USERNAME=postgres',
161
+ 'DB_PASSWORD=',
162
+ ],
163
+ };
151
164
  }
152
- if (database === 'd1-remote' || database === 'd1-proxy') {
153
- return [
154
- '# Cloudflare D1 Remote Proxy (HTTPS)',
155
- 'D1_REMOTE_URL=',
156
- 'D1_REMOTE_KEY_ID=',
157
- 'D1_REMOTE_SECRET=',
158
- 'D1_REMOTE_MODE=registry',
159
- 'ZT_PROXY_TIMEOUT_MS=15000',
160
- ];
165
+ if (normalized === 'sqlserver' || normalized === 'mssql') {
166
+ return {
167
+ dbLines: [
168
+ 'DB_HOST_MSSQL=localhost',
169
+ 'DB_PORT_MSSQL=1433',
170
+ 'DB_DATABASE_MSSQL=zintrust',
171
+ 'DB_USERNAME_MSSQL=sa',
172
+ 'DB_PASSWORD_MSSQL=',
173
+ ],
174
+ };
161
175
  }
162
- return [];
176
+ // sqlite/d1/d1-remote/etc: no overrides here (DB_PATH is handled via SQLITE_DB_PATH placeholder)
177
+ return { dbLines: [] };
163
178
  };
164
179
  const createEnvFile = (projectPath, variables) => {
165
180
  try {
@@ -174,56 +189,33 @@ const createEnvFile = (projectPath, variables) => {
174
189
  HOST: 'localhost',
175
190
  PORT: String(Number(variables['port'] ?? 7777)),
176
191
  LOG_LEVEL: 'debug',
177
- CSRF_SKIP_PATHS: '/api/*,/queue-monitor/*',
192
+ CSRF_SKIP_PATHS: '/api/*,/queue-monitor/*,/api/_sys/queue/*,/api/_sys/schedule/*',
178
193
  });
179
194
  return true;
180
195
  }
181
196
  const name = typeof variables['projectName'] === 'string' ? variables['projectName'] : 'zintrust-app';
182
197
  const port = Number(variables['port'] ?? 7777);
183
198
  const database = typeof variables['database'] === 'string' ? variables['database'] : 'sqlite';
199
+ const baseUrl = `http://localhost:${port}`;
200
+ const dbConnection = database.trim().toLowerCase();
201
+ const sqliteDbPath = `.zintrust/dbs/${toSafeDbBasename(name)}.sqlite`;
184
202
  // Generate a secure APP_KEY (32 bytes = 256-bit, base64 encoded)
185
203
  const appKeyBytes = randomBytes(32);
186
- const appKey = appKeyBytes.toString('base64');
187
- const baseLines = [
188
- 'NODE_ENV=development',
189
- 'STARTUP_REQUIRE_ENV=true',
190
- `APP_NAME=${name}`,
191
- 'HOST=localhost',
192
- `PORT=${port}`,
193
- 'APP_DEBUG=true',
194
- // Auto-generated secure key for storage signing and encryption
195
- `APP_KEY=${appKey}`,
196
- `DB_CONNECTION=${database}`,
197
- ];
198
- const dbLines = buildDatabaseEnvLinesWithName(database, name);
199
- const placeholderLines = [
200
- '',
201
- '# Logging',
202
- 'LOG_LEVEL=debug',
203
- 'LOG_CHANNEL=file',
204
- 'LOG_FORMAT=text',
205
- '',
206
- '# Auth / Security',
207
- 'JWT_SECRET=',
208
- 'JWT_EXPIRES_IN=1h',
209
- 'CSRF_SECRET=',
210
- 'CSRF_SKIP_PATHS=/api/*,/queue-monitor/*',
211
- 'ENCRYPTION_CIPHER=aes-256-cbc',
212
- 'APP_PREVIOUS_KEYS=',
213
- '',
214
- '# Cache / Queue',
215
- 'CACHE_DRIVER=memory',
216
- 'CACHE_TTL=300',
217
- 'QUEUE_DRIVER=sync',
218
- '',
219
- '# Microservices',
220
- 'SERVICE_DISCOVERY_ENABLED=false',
221
- 'SERVICE_DISCOVERY_TYPE=filesystem',
222
- 'SERVICE_NAME=',
223
- 'SERVICE_VERSION=1.0.0',
224
- ];
225
- const lines = [...baseLines, ...dbLines, ...placeholderLines];
226
- fs.writeFileSync(fullPath, lines.join('\n') + '\n');
204
+ // Keep consistent with `zin key:generate` output.
205
+ const appKey = `base64:${appKeyBytes.toString('base64')}`;
206
+ const { dbLines } = buildDbOverrides(dbConnection);
207
+ const dbLinesBlock = dbLines.join('\n');
208
+ const template = readEnvScaffoldTemplate();
209
+ const content = renderEnvScaffold(template, {
210
+ APP_NAME: name,
211
+ PORT: String(port),
212
+ BASE_URL: baseUrl,
213
+ APP_KEY: appKey,
214
+ DB_CONNECTION: dbConnection,
215
+ SQLITE_DB_PATH: sqliteDbPath,
216
+ DB_LINES: dbLinesBlock,
217
+ });
218
+ fs.writeFileSync(fullPath, content.endsWith('\n') ? content : content + '\n');
227
219
  return true;
228
220
  }
229
221
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"DistPackager.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/DistPackager.ts"],"names":[],"mappings":"AAoIA,eAAO,MAAM,YAAY;IACvB;;;OAGG;sBACe,MAAM,aAAY,MAAM,GAAmB,IAAI;EAgBjE,CAAC"}
1
+ {"version":3,"file":"DistPackager.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/DistPackager.ts"],"names":[],"mappings":"AAsLA,eAAO,MAAM,YAAY;IACvB;;;OAGG;sBACe,MAAM,aAAY,MAAM,GAAmB,IAAI;EAgBjE,CAAC"}
@@ -49,6 +49,31 @@ const buildDistPackageJson = (rootPkg) => {
49
49
  types: './start.d.ts',
50
50
  default: './start.js',
51
51
  },
52
+ './cli': {
53
+ types: './src/cli.d.ts',
54
+ default: './src/cli.js',
55
+ },
56
+ './proxy': {
57
+ types: './src/proxy.d.ts',
58
+ default: './src/proxy.js',
59
+ },
60
+ './collections': {
61
+ types: './src/collections/index.d.ts',
62
+ default: './src/collections/index.js',
63
+ },
64
+ './helper': {
65
+ types: './src/helper/index.d.ts',
66
+ default: './src/helper/index.js',
67
+ },
68
+ './node': {
69
+ types: './src/node.d.ts',
70
+ default: './src/node.js',
71
+ },
72
+ './routes/*': {
73
+ types: './routes/*.d.ts',
74
+ default: './routes/*.js',
75
+ },
76
+ './package.json': './package.json',
52
77
  },
53
78
  dependencies: coerceDependencies(rootPkg.dependencies),
54
79
  };
@@ -11,6 +11,7 @@ type CliOverrides = {
11
11
  nodeEnv?: node_env;
12
12
  port?: number;
13
13
  runtime?: string;
14
+ cacheEnabled?: boolean;
14
15
  };
15
16
  export declare const EnvFileLoader: Readonly<{
16
17
  load: (options?: LoadOptions) => LoadState;
@@ -1 +1 @@
1
- {"version":3,"file":"EnvFileLoader.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/EnvFileLoader.ts"],"names":[],"mappings":"AAQA,KAAK,QAAQ,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;AAwHzD,KAAK,WAAW,GAAG;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AA2FF,eAAO,MAAM,aAAa;qBAlEH,WAAW,KAAQ,SAAS;wBAmC1B,SAAS;mCAEI,YAAY,KAAG,IAAI;oBA2BpC,SAAS;EAO5B,CAAC"}
1
+ {"version":3,"file":"EnvFileLoader.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/EnvFileLoader.ts"],"names":[],"mappings":"AAQA,KAAK,QAAQ,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;AAmIzD,KAAK,WAAW,GAAG;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AA+FF,eAAO,MAAM,aAAa;qBAtEH,WAAW,KAAQ,SAAS;wBAmC1B,SAAS;mCAEI,YAAY,KAAG,IAAI;oBA+BpC,SAAS;EAO5B,CAAC"}
@@ -75,6 +75,13 @@ const parseEnvFile = (raw) => {
75
75
  const rhs = withoutExport.slice(eq + 1);
76
76
  const withoutComment = stripInlineComment(rhs);
77
77
  const value = unquote(withoutComment);
78
+ // DX: treat empty assignments as "no-op" if the key already had a non-empty value earlier
79
+ // in the same file. This prevents accidental overrides like:
80
+ // KV_NAMESPACE_ID=abc
81
+ // ...
82
+ // KV_NAMESPACE_ID=
83
+ if (value.trim() === '' && (result[key]?.trim() ?? '') !== '')
84
+ continue;
78
85
  result[key] = value;
79
86
  }
80
87
  return result;
@@ -83,6 +90,10 @@ const applyToProcessEnv = (values, overrideExisting) => {
83
90
  for (const [key, value] of Object.entries(values)) {
84
91
  if (!overrideExisting && safeEnvGet(key, '') !== '')
85
92
  continue;
93
+ // DX: don't wipe an already-populated env var with an empty value from an env file.
94
+ // This avoids surprising behavior when env templates include duplicate keys with blanks.
95
+ if (value.trim() === '' && safeEnvGet(key, '').trim() !== '')
96
+ continue;
86
97
  safeEnvSet(key, value);
87
98
  }
88
99
  // Compatibility helpers
@@ -169,6 +180,9 @@ const applyCliOverrides = (overrides) => {
169
180
  safeEnvSet('PORT', String(overrides.port));
170
181
  safeEnvSet('APP_PORT', String(overrides.port));
171
182
  }
183
+ if (typeof overrides.cacheEnabled === 'boolean') {
184
+ safeEnvSet('CACHE_ENABLED', String(overrides.cacheEnabled));
185
+ }
172
186
  // Keep PORT/APP_PORT in sync if only one exists.
173
187
  if (safeEnvGet('PORT', '') === '' && safeEnvGet('APP_PORT', '') !== '') {
174
188
  safeEnvSet('PORT', safeEnvGet('APP_PORT', ''));