@zintrust/core 0.1.41 → 0.1.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (547) hide show
  1. package/app/Controllers/AuthController.d.ts +10 -0
  2. package/app/Controllers/AuthController.d.ts.map +1 -0
  3. package/app/Controllers/AuthController.js +201 -0
  4. package/app/Controllers/UserController.d.ts +9 -0
  5. package/app/Controllers/UserController.d.ts.map +1 -0
  6. package/app/Controllers/UserController.js +8 -0
  7. package/app/Controllers/UserQueryBuilderController.d.ts +16 -0
  8. package/app/Controllers/UserQueryBuilderController.d.ts.map +1 -0
  9. package/app/Controllers/UserQueryBuilderController.js +404 -0
  10. package/app/Middleware/ProfilerMiddleware.d.ts +12 -0
  11. package/app/Middleware/ProfilerMiddleware.d.ts.map +1 -0
  12. package/app/Middleware/ProfilerMiddleware.js +47 -0
  13. package/app/Middleware/index.d.ts +59 -0
  14. package/app/Middleware/index.d.ts.map +1 -0
  15. package/app/Middleware/index.js +215 -0
  16. package/app/Models/Post.d.ts +14 -0
  17. package/app/Models/Post.d.ts.map +1 -0
  18. package/app/Models/Post.js +27 -0
  19. package/app/Models/User.d.ts +14 -0
  20. package/app/Models/User.d.ts.map +1 -0
  21. package/app/Models/User.js +44 -0
  22. package/app/Schedules/JobTracking.d.ts +3 -0
  23. package/app/Schedules/JobTracking.d.ts.map +1 -0
  24. package/app/Schedules/JobTracking.js +13 -0
  25. package/app/Schedules/index.d.ts +2 -0
  26. package/app/Schedules/index.d.ts.map +1 -0
  27. package/app/Schedules/index.js +1 -0
  28. package/app/Toolkit/Broadcast/sendBroadcast.d.ts +6 -0
  29. package/app/Toolkit/Broadcast/sendBroadcast.d.ts.map +1 -0
  30. package/app/Toolkit/Broadcast/sendBroadcast.js +5 -0
  31. package/app/Toolkit/Mail/sendWelcomeEmail.d.ts +6 -0
  32. package/app/Toolkit/Mail/sendWelcomeEmail.d.ts.map +1 -0
  33. package/app/Toolkit/Mail/sendWelcomeEmail.js +20 -0
  34. package/app/Toolkit/Notification/sendSlackNotification.d.ts +8 -0
  35. package/app/Toolkit/Notification/sendSlackNotification.d.ts.map +1 -0
  36. package/app/Toolkit/Notification/sendSlackNotification.js +5 -0
  37. package/app/Toolkit/Notification/sendSms.d.ts +6 -0
  38. package/app/Toolkit/Notification/sendSms.d.ts.map +1 -0
  39. package/app/Toolkit/Notification/sendSms.js +5 -0
  40. package/app/Types/controller.d.ts +42 -0
  41. package/app/Types/controller.d.ts.map +1 -0
  42. package/app/Types/controller.js +1 -0
  43. package/config/broadcast.d.ts +38 -0
  44. package/config/broadcast.d.ts.map +1 -0
  45. package/config/broadcast.js +37 -0
  46. package/config/cache.d.ts +40 -0
  47. package/config/cache.d.ts.map +1 -0
  48. package/config/cache.js +39 -0
  49. package/config/database.d.ts +58 -0
  50. package/config/database.d.ts.map +1 -0
  51. package/config/database.js +65 -0
  52. package/config/mail.d.ts +51 -0
  53. package/config/mail.d.ts.map +1 -0
  54. package/config/mail.js +69 -0
  55. package/config/middleware.d.ts +11 -0
  56. package/config/middleware.d.ts.map +1 -0
  57. package/config/middleware.js +30 -0
  58. package/config/notification.d.ts +33 -0
  59. package/config/notification.d.ts.map +1 -0
  60. package/config/notification.js +33 -0
  61. package/config/queue.d.ts +55 -0
  62. package/config/queue.d.ts.map +1 -0
  63. package/config/queue.js +87 -0
  64. package/config/storage.d.ts +59 -0
  65. package/config/storage.d.ts.map +1 -0
  66. package/config/storage.js +59 -0
  67. package/config/workers.d.ts +54 -0
  68. package/config/workers.d.ts.map +1 -0
  69. package/config/workers.js +83 -0
  70. package/package.json +27 -5
  71. package/packages/cloudflare-d1-proxy/src/index.d.ts +48 -0
  72. package/packages/cloudflare-d1-proxy/src/index.d.ts.map +1 -0
  73. package/packages/cloudflare-d1-proxy/src/index.js +387 -0
  74. package/packages/cloudflare-kv-proxy/src/index.d.ts +44 -0
  75. package/packages/cloudflare-kv-proxy/src/index.d.ts.map +1 -0
  76. package/packages/cloudflare-kv-proxy/src/index.js +325 -0
  77. package/packages/queue-monitor/src/QueueMonitoringService.d.ts +35 -0
  78. package/packages/queue-monitor/src/QueueMonitoringService.d.ts.map +1 -0
  79. package/packages/queue-monitor/src/QueueMonitoringService.js +194 -0
  80. package/packages/queue-monitor/src/connection.d.ts +3 -0
  81. package/packages/queue-monitor/src/connection.d.ts.map +1 -0
  82. package/packages/queue-monitor/src/connection.js +1 -0
  83. package/packages/queue-monitor/src/dashboard-ui.d.ts +7 -0
  84. package/packages/queue-monitor/src/dashboard-ui.d.ts.map +1 -0
  85. package/packages/queue-monitor/src/dashboard-ui.js +997 -0
  86. package/packages/queue-monitor/src/driver.d.ts +15 -0
  87. package/packages/queue-monitor/src/driver.d.ts.map +1 -0
  88. package/packages/queue-monitor/src/driver.js +115 -0
  89. package/packages/queue-monitor/src/index.d.ts +71 -0
  90. package/packages/queue-monitor/src/index.d.ts.map +1 -0
  91. package/packages/queue-monitor/src/index.js +296 -0
  92. package/packages/queue-monitor/src/metrics.d.ts +27 -0
  93. package/packages/queue-monitor/src/metrics.d.ts.map +1 -0
  94. package/packages/queue-monitor/src/metrics.js +92 -0
  95. package/packages/queue-monitor/src/worker.d.ts +8 -0
  96. package/packages/queue-monitor/src/worker.d.ts.map +1 -0
  97. package/packages/queue-monitor/src/worker.js +35 -0
  98. package/packages/queue-redis/src/BullMQRedisQueue.d.ts +26 -0
  99. package/packages/queue-redis/src/BullMQRedisQueue.d.ts.map +1 -0
  100. package/packages/queue-redis/src/BullMQRedisQueue.js +463 -0
  101. package/packages/queue-redis/src/HttpQueueDriver.d.ts +18 -0
  102. package/packages/queue-redis/src/HttpQueueDriver.d.ts.map +1 -0
  103. package/packages/queue-redis/src/HttpQueueDriver.js +249 -0
  104. package/packages/queue-redis/src/QueueHttpGateway.d.ts +16 -0
  105. package/packages/queue-redis/src/QueueHttpGateway.d.ts.map +1 -0
  106. package/packages/queue-redis/src/QueueHttpGateway.js +217 -0
  107. package/packages/queue-redis/src/RedisPublishClient.d.ts +14 -0
  108. package/packages/queue-redis/src/RedisPublishClient.d.ts.map +1 -0
  109. package/packages/queue-redis/src/RedisPublishClient.js +251 -0
  110. package/packages/queue-redis/src/index.d.ts +12 -0
  111. package/packages/queue-redis/src/index.d.ts.map +1 -0
  112. package/packages/queue-redis/src/index.js +10 -0
  113. package/packages/queue-redis/src/register.d.ts +6 -0
  114. package/packages/queue-redis/src/register.d.ts.map +1 -0
  115. package/packages/queue-redis/src/register.js +21 -0
  116. package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.d.ts +11 -0
  117. package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.d.ts.map +1 -0
  118. package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.js +32 -0
  119. package/packages/workers/migrations/20260123180000_create_queue_jobs_table.d.ts +11 -0
  120. package/packages/workers/migrations/20260123180000_create_queue_jobs_table.d.ts.map +1 -0
  121. package/packages/workers/migrations/20260123180000_create_queue_jobs_table.js +46 -0
  122. package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.d.ts +7 -0
  123. package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.d.ts.map +1 -0
  124. package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.js +44 -0
  125. package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.d.ts +7 -0
  126. package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.d.ts.map +1 -0
  127. package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.js +104 -0
  128. package/packages/workers/src/AnomalyDetection.d.ts +107 -0
  129. package/packages/workers/src/AnomalyDetection.d.ts.map +1 -0
  130. package/packages/workers/src/AnomalyDetection.js +329 -0
  131. package/packages/workers/src/AutoScaler.d.ts +128 -0
  132. package/packages/workers/src/AutoScaler.d.ts.map +1 -0
  133. package/packages/workers/src/AutoScaler.js +425 -0
  134. package/packages/workers/src/BroadcastWorker.d.ts +24 -0
  135. package/packages/workers/src/BroadcastWorker.d.ts.map +1 -0
  136. package/packages/workers/src/BroadcastWorker.js +24 -0
  137. package/packages/workers/src/CanaryController.d.ts +104 -0
  138. package/packages/workers/src/CanaryController.d.ts.map +1 -0
  139. package/packages/workers/src/CanaryController.js +424 -0
  140. package/packages/workers/src/ChaosEngineering.d.ts +80 -0
  141. package/packages/workers/src/ChaosEngineering.d.ts.map +1 -0
  142. package/packages/workers/src/ChaosEngineering.js +229 -0
  143. package/packages/workers/src/CircuitBreaker.d.ts +107 -0
  144. package/packages/workers/src/CircuitBreaker.d.ts.map +1 -0
  145. package/packages/workers/src/CircuitBreaker.js +374 -0
  146. package/packages/workers/src/ClusterLock.d.ts +91 -0
  147. package/packages/workers/src/ClusterLock.d.ts.map +1 -0
  148. package/packages/workers/src/ClusterLock.js +397 -0
  149. package/packages/workers/src/ComplianceManager.d.ts +178 -0
  150. package/packages/workers/src/ComplianceManager.d.ts.map +1 -0
  151. package/packages/workers/src/ComplianceManager.js +556 -0
  152. package/packages/workers/src/DatacenterOrchestrator.d.ts +134 -0
  153. package/packages/workers/src/DatacenterOrchestrator.d.ts.map +1 -0
  154. package/packages/workers/src/DatacenterOrchestrator.js +404 -0
  155. package/packages/workers/src/DeadLetterQueue.d.ts +123 -0
  156. package/packages/workers/src/DeadLetterQueue.d.ts.map +1 -0
  157. package/packages/workers/src/DeadLetterQueue.js +544 -0
  158. package/packages/workers/src/HealthMonitor.d.ts +43 -0
  159. package/packages/workers/src/HealthMonitor.d.ts.map +1 -0
  160. package/packages/workers/src/HealthMonitor.js +312 -0
  161. package/packages/workers/src/MultiQueueWorker.d.ts +90 -0
  162. package/packages/workers/src/MultiQueueWorker.d.ts.map +1 -0
  163. package/packages/workers/src/MultiQueueWorker.js +282 -0
  164. package/packages/workers/src/NotificationWorker.d.ts +24 -0
  165. package/packages/workers/src/NotificationWorker.d.ts.map +1 -0
  166. package/packages/workers/src/NotificationWorker.js +23 -0
  167. package/packages/workers/src/Observability.d.ts +154 -0
  168. package/packages/workers/src/Observability.d.ts.map +1 -0
  169. package/packages/workers/src/Observability.js +538 -0
  170. package/packages/workers/src/PluginManager.d.ts +124 -0
  171. package/packages/workers/src/PluginManager.d.ts.map +1 -0
  172. package/packages/workers/src/PluginManager.js +392 -0
  173. package/packages/workers/src/PriorityQueue.d.ts +118 -0
  174. package/packages/workers/src/PriorityQueue.d.ts.map +1 -0
  175. package/packages/workers/src/PriorityQueue.js +276 -0
  176. package/packages/workers/src/ResourceMonitor.d.ts +165 -0
  177. package/packages/workers/src/ResourceMonitor.d.ts.map +1 -0
  178. package/packages/workers/src/ResourceMonitor.js +632 -0
  179. package/packages/workers/src/SLAMonitor.d.ts +111 -0
  180. package/packages/workers/src/SLAMonitor.d.ts.map +1 -0
  181. package/packages/workers/src/SLAMonitor.js +274 -0
  182. package/packages/workers/src/WorkerFactory.d.ts +218 -0
  183. package/packages/workers/src/WorkerFactory.d.ts.map +1 -0
  184. package/packages/workers/src/WorkerFactory.js +2253 -0
  185. package/packages/workers/src/WorkerInit.d.ts +86 -0
  186. package/packages/workers/src/WorkerInit.d.ts.map +1 -0
  187. package/packages/workers/src/WorkerInit.js +307 -0
  188. package/packages/workers/src/WorkerMetrics.d.ts +116 -0
  189. package/packages/workers/src/WorkerMetrics.d.ts.map +1 -0
  190. package/packages/workers/src/WorkerMetrics.js +570 -0
  191. package/packages/workers/src/WorkerRegistry.d.ts +152 -0
  192. package/packages/workers/src/WorkerRegistry.d.ts.map +1 -0
  193. package/packages/workers/src/WorkerRegistry.js +396 -0
  194. package/packages/workers/src/WorkerShutdown.d.ts +70 -0
  195. package/packages/workers/src/WorkerShutdown.d.ts.map +1 -0
  196. package/packages/workers/src/WorkerShutdown.js +185 -0
  197. package/packages/workers/src/WorkerVersioning.d.ts +108 -0
  198. package/packages/workers/src/WorkerVersioning.d.ts.map +1 -0
  199. package/packages/workers/src/WorkerVersioning.js +300 -0
  200. package/packages/workers/src/config/workerConfig.d.ts +5 -0
  201. package/packages/workers/src/config/workerConfig.d.ts.map +1 -0
  202. package/packages/workers/src/config/workerConfig.js +25 -0
  203. package/packages/workers/src/createQueueWorker.d.ts +26 -0
  204. package/packages/workers/src/createQueueWorker.d.ts.map +1 -0
  205. package/packages/workers/src/createQueueWorker.js +367 -0
  206. package/packages/workers/src/dashboard/index.d.ts +2 -0
  207. package/packages/workers/src/dashboard/index.d.ts.map +1 -0
  208. package/packages/workers/src/dashboard/index.js +1 -0
  209. package/packages/workers/src/dashboard/types.d.ts +123 -0
  210. package/packages/workers/src/dashboard/types.d.ts.map +1 -0
  211. package/packages/workers/src/dashboard/types.js +1 -0
  212. package/packages/workers/src/dashboard/workers-api.d.ts +5 -0
  213. package/packages/workers/src/dashboard/workers-api.d.ts.map +1 -0
  214. package/packages/workers/src/dashboard/workers-api.js +738 -0
  215. package/packages/workers/src/helper/index.d.ts +6 -0
  216. package/packages/workers/src/helper/index.d.ts.map +1 -0
  217. package/packages/workers/src/helper/index.js +10 -0
  218. package/packages/workers/src/http/WorkerApiController.d.ts +39 -0
  219. package/packages/workers/src/http/WorkerApiController.d.ts.map +1 -0
  220. package/packages/workers/src/http/WorkerApiController.js +313 -0
  221. package/packages/workers/src/http/WorkerController.d.ts +375 -0
  222. package/packages/workers/src/http/WorkerController.d.ts.map +1 -0
  223. package/packages/workers/src/http/WorkerController.js +1454 -0
  224. package/packages/workers/src/http/WorkerMonitoringService.d.ts +12 -0
  225. package/packages/workers/src/http/WorkerMonitoringService.d.ts.map +1 -0
  226. package/packages/workers/src/http/WorkerMonitoringService.js +89 -0
  227. package/packages/workers/src/http/middleware/CustomValidation.d.ts +93 -0
  228. package/packages/workers/src/http/middleware/CustomValidation.d.ts.map +1 -0
  229. package/packages/workers/src/http/middleware/CustomValidation.js +270 -0
  230. package/packages/workers/src/http/middleware/DatacenterValidator.d.ts +4 -0
  231. package/packages/workers/src/http/middleware/DatacenterValidator.d.ts.map +1 -0
  232. package/packages/workers/src/http/middleware/DatacenterValidator.js +94 -0
  233. package/packages/workers/src/http/middleware/EditWorkerValidation.d.ts +8 -0
  234. package/packages/workers/src/http/middleware/EditWorkerValidation.d.ts.map +1 -0
  235. package/packages/workers/src/http/middleware/EditWorkerValidation.js +56 -0
  236. package/packages/workers/src/http/middleware/FeaturesValidator.d.ts +4 -0
  237. package/packages/workers/src/http/middleware/FeaturesValidator.d.ts.map +1 -0
  238. package/packages/workers/src/http/middleware/FeaturesValidator.js +60 -0
  239. package/packages/workers/src/http/middleware/InfrastructureValidator.d.ts +32 -0
  240. package/packages/workers/src/http/middleware/InfrastructureValidator.d.ts.map +1 -0
  241. package/packages/workers/src/http/middleware/InfrastructureValidator.js +226 -0
  242. package/packages/workers/src/http/middleware/OptionsValidator.d.ts +4 -0
  243. package/packages/workers/src/http/middleware/OptionsValidator.d.ts.map +1 -0
  244. package/packages/workers/src/http/middleware/OptionsValidator.js +112 -0
  245. package/packages/workers/src/http/middleware/PayloadSanitizer.d.ts +8 -0
  246. package/packages/workers/src/http/middleware/PayloadSanitizer.d.ts.map +1 -0
  247. package/packages/workers/src/http/middleware/PayloadSanitizer.js +42 -0
  248. package/packages/workers/src/http/middleware/ProcessorPathSanitizer.d.ts +4 -0
  249. package/packages/workers/src/http/middleware/ProcessorPathSanitizer.d.ts.map +1 -0
  250. package/packages/workers/src/http/middleware/ProcessorPathSanitizer.js +140 -0
  251. package/packages/workers/src/http/middleware/QueueNameSanitizer.d.ts +4 -0
  252. package/packages/workers/src/http/middleware/QueueNameSanitizer.d.ts.map +1 -0
  253. package/packages/workers/src/http/middleware/QueueNameSanitizer.js +45 -0
  254. package/packages/workers/src/http/middleware/ValidateDriver.d.ts +8 -0
  255. package/packages/workers/src/http/middleware/ValidateDriver.d.ts.map +1 -0
  256. package/packages/workers/src/http/middleware/ValidateDriver.js +20 -0
  257. package/packages/workers/src/http/middleware/VersionSanitizer.d.ts +4 -0
  258. package/packages/workers/src/http/middleware/VersionSanitizer.d.ts.map +1 -0
  259. package/packages/workers/src/http/middleware/VersionSanitizer.js +25 -0
  260. package/packages/workers/src/http/middleware/WorkerNameSanitizer.d.ts +4 -0
  261. package/packages/workers/src/http/middleware/WorkerNameSanitizer.d.ts.map +1 -0
  262. package/packages/workers/src/http/middleware/WorkerNameSanitizer.js +46 -0
  263. package/packages/workers/src/http/middleware/WorkerValidationChain.d.ts +28 -0
  264. package/packages/workers/src/http/middleware/WorkerValidationChain.d.ts.map +1 -0
  265. package/packages/workers/src/http/middleware/WorkerValidationChain.js +186 -0
  266. package/packages/workers/src/index.d.ts +47 -0
  267. package/packages/workers/src/index.d.ts.map +1 -0
  268. package/packages/workers/src/index.js +48 -0
  269. package/packages/workers/src/routes/workers.d.ts +13 -0
  270. package/packages/workers/src/routes/workers.d.ts.map +1 -0
  271. package/packages/workers/src/routes/workers.js +126 -0
  272. package/packages/workers/src/storage/WorkerStore.d.ts +52 -0
  273. package/packages/workers/src/storage/WorkerStore.d.ts.map +1 -0
  274. package/packages/workers/src/storage/WorkerStore.js +259 -0
  275. package/packages/workers/src/telemetry/api/TelemetryAPI.d.ts +47 -0
  276. package/packages/workers/src/telemetry/api/TelemetryAPI.d.ts.map +1 -0
  277. package/packages/workers/src/telemetry/api/TelemetryAPI.js +219 -0
  278. package/packages/workers/src/telemetry/api/TelemetryMonitoringService.d.ts +18 -0
  279. package/packages/workers/src/telemetry/api/TelemetryMonitoringService.d.ts.map +1 -0
  280. package/packages/workers/src/telemetry/api/TelemetryMonitoringService.js +140 -0
  281. package/packages/workers/src/telemetry/components/AlertPanel.d.ts +2 -0
  282. package/packages/workers/src/telemetry/components/AlertPanel.d.ts.map +1 -0
  283. package/packages/workers/src/telemetry/components/AlertPanel.js +13 -0
  284. package/packages/workers/src/telemetry/components/CostTracking.d.ts +2 -0
  285. package/packages/workers/src/telemetry/components/CostTracking.d.ts.map +1 -0
  286. package/packages/workers/src/telemetry/components/CostTracking.js +14 -0
  287. package/packages/workers/src/telemetry/components/ResourceUsageChart.d.ts +2 -0
  288. package/packages/workers/src/telemetry/components/ResourceUsageChart.d.ts.map +1 -0
  289. package/packages/workers/src/telemetry/components/ResourceUsageChart.js +11 -0
  290. package/packages/workers/src/telemetry/components/WorkerHealthChart.d.ts +2 -0
  291. package/packages/workers/src/telemetry/components/WorkerHealthChart.d.ts.map +1 -0
  292. package/packages/workers/src/telemetry/components/WorkerHealthChart.js +11 -0
  293. package/packages/workers/src/telemetry/index.d.ts +16 -0
  294. package/packages/workers/src/telemetry/index.d.ts.map +1 -0
  295. package/packages/workers/src/telemetry/index.js +60 -0
  296. package/packages/workers/src/telemetry/routes/dashboard.d.ts +7 -0
  297. package/packages/workers/src/telemetry/routes/dashboard.d.ts.map +1 -0
  298. package/packages/workers/src/telemetry/routes/dashboard.js +608 -0
  299. package/packages/workers/src/type.d.ts +77 -0
  300. package/packages/workers/src/type.d.ts.map +1 -0
  301. package/packages/workers/src/type.js +1 -0
  302. package/packages/workers/src/ui/router/EmbeddedAssets.d.ts +5 -0
  303. package/packages/workers/src/ui/router/EmbeddedAssets.d.ts.map +1 -0
  304. package/packages/workers/src/ui/router/EmbeddedAssets.js +13 -0
  305. package/packages/workers/src/ui/router/ui.d.ts +4 -0
  306. package/packages/workers/src/ui/router/ui.d.ts.map +1 -0
  307. package/packages/workers/src/ui/router/ui.js +208 -0
  308. package/packages/workers/src/ui/types/worker-ui.d.ts +230 -0
  309. package/packages/workers/src/ui/types/worker-ui.d.ts.map +1 -0
  310. package/packages/workers/src/ui/types/worker-ui.js +5 -0
  311. package/routes/api.d.ts +7 -0
  312. package/routes/api.d.ts.map +1 -0
  313. package/routes/api.js +129 -0
  314. package/routes/broadcast.d.ts +9 -0
  315. package/routes/broadcast.d.ts.map +1 -0
  316. package/routes/broadcast.js +27 -0
  317. package/routes/storage.d.ts +4 -0
  318. package/routes/storage.d.ts.map +1 -0
  319. package/routes/storage.js +35 -0
  320. package/src/boot/bootstrap.js +27 -11
  321. package/src/boot/registry/runtime.d.ts.map +1 -1
  322. package/src/boot/registry/runtime.js +11 -0
  323. package/src/cache/Cache.d.ts.map +1 -1
  324. package/src/cache/Cache.js +40 -8
  325. package/src/cache/drivers/KVRemoteDriver.d.ts +1 -1
  326. package/src/cache/drivers/KVRemoteDriver.d.ts.map +1 -1
  327. package/src/cache/drivers/KVRemoteDriver.js +259 -44
  328. package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
  329. package/src/cache/drivers/MemoryDriver.js +10 -2
  330. package/src/cache/drivers/RedisDriver.d.ts.map +1 -1
  331. package/src/cache/drivers/RedisDriver.js +256 -33
  332. package/src/cli/CLI.d.ts.map +1 -1
  333. package/src/cli/CLI.js +12 -0
  334. package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
  335. package/src/cli/commands/ConfigCommand.js +3 -5
  336. package/src/cli/commands/D1LearnCommand.d.ts +9 -0
  337. package/src/cli/commands/D1LearnCommand.d.ts.map +1 -0
  338. package/src/cli/commands/D1LearnCommand.js +143 -0
  339. package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
  340. package/src/cli/commands/D1MigrateCommand.js +55 -16
  341. package/src/cli/commands/InitContainerCommand.d.ts.map +1 -1
  342. package/src/cli/commands/InitContainerCommand.js +30 -15
  343. package/src/cli/commands/InitEcosystemCommand.d.ts +6 -0
  344. package/src/cli/commands/InitEcosystemCommand.d.ts.map +1 -0
  345. package/src/cli/commands/InitEcosystemCommand.js +51 -0
  346. package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
  347. package/src/cli/commands/MigrateCommand.js +78 -36
  348. package/src/cli/commands/MigrateWorkerCommand.d.ts.map +1 -1
  349. package/src/cli/commands/MigrateWorkerCommand.js +36 -2
  350. package/src/cli/commands/NewCommand.d.ts.map +1 -1
  351. package/src/cli/commands/NewCommand.js +33 -0
  352. package/src/cli/commands/PutCommand.d.ts +6 -0
  353. package/src/cli/commands/PutCommand.d.ts.map +1 -0
  354. package/src/cli/commands/PutCommand.js +173 -0
  355. package/src/cli/commands/QueueRecoveryCommand.d.ts.map +1 -1
  356. package/src/cli/commands/QueueRecoveryCommand.js +113 -14
  357. package/src/cli/commands/ScheduleListCommand.d.ts +6 -0
  358. package/src/cli/commands/ScheduleListCommand.d.ts.map +1 -0
  359. package/src/cli/commands/ScheduleListCommand.js +62 -0
  360. package/src/cli/commands/ScheduleRunCommand.d.ts +6 -0
  361. package/src/cli/commands/ScheduleRunCommand.d.ts.map +1 -0
  362. package/src/cli/commands/ScheduleRunCommand.js +32 -0
  363. package/src/cli/commands/ScheduleStartCommand.d.ts +6 -0
  364. package/src/cli/commands/ScheduleStartCommand.d.ts.map +1 -0
  365. package/src/cli/commands/ScheduleStartCommand.js +40 -0
  366. package/src/cli/commands/SecretsCommand.d.ts.map +1 -1
  367. package/src/cli/commands/SecretsCommand.js +2 -2
  368. package/src/cli/commands/StartCommand.d.ts.map +1 -1
  369. package/src/cli/commands/StartCommand.js +23 -1
  370. package/src/cli/commands/schedule/ScheduleCliSupport.d.ts +6 -0
  371. package/src/cli/commands/schedule/ScheduleCliSupport.d.ts.map +1 -0
  372. package/src/cli/commands/schedule/ScheduleCliSupport.js +55 -0
  373. package/src/cli/config/ConfigManager.d.ts.map +1 -1
  374. package/src/cli/config/ConfigManager.js +8 -1
  375. package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -1
  376. package/src/cli/d1/D1SqlMigrations.js +11 -1
  377. package/src/cli/d1/WranglerConfig.d.ts.map +1 -1
  378. package/src/cli/d1/WranglerConfig.js +34 -2
  379. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  380. package/src/cli/scaffolding/ProjectScaffolder.js +65 -73
  381. package/src/cli/services/VersionChecker.d.ts.map +1 -1
  382. package/src/cli/services/VersionChecker.js +5 -1
  383. package/src/cli/utils/DatabaseCliUtils.d.ts.map +1 -1
  384. package/src/cli/utils/DatabaseCliUtils.js +6 -1
  385. package/src/cli/utils/DistPackager.d.ts.map +1 -1
  386. package/src/cli/utils/DistPackager.js +25 -0
  387. package/src/cli/utils/EnvFileLoader.d.ts +1 -0
  388. package/src/cli/utils/EnvFileLoader.d.ts.map +1 -1
  389. package/src/cli/utils/EnvFileLoader.js +47 -14
  390. package/src/cli.d.ts +5 -0
  391. package/src/cli.d.ts.map +1 -0
  392. package/src/cli.js +4 -0
  393. package/src/collections/index.d.ts +2 -2
  394. package/src/collections/index.d.ts.map +1 -1
  395. package/src/collections/index.js +1 -1
  396. package/src/common/RemoteSignedJson.d.ts.map +1 -1
  397. package/src/common/RemoteSignedJson.js +58 -25
  398. package/src/common/utility.d.ts.map +1 -1
  399. package/src/common/utility.js +2 -6
  400. package/src/config/cache.js +1 -1
  401. package/src/config/cloudflare.d.ts.map +1 -1
  402. package/src/config/cloudflare.js +19 -8
  403. package/src/config/env.d.ts +7 -0
  404. package/src/config/env.d.ts.map +1 -1
  405. package/src/config/env.js +10 -2
  406. package/src/config/queue.js +1 -1
  407. package/src/functions/cloudflare.d.ts.map +1 -1
  408. package/src/functions/cloudflare.js +4 -2
  409. package/src/helper/index.d.ts +225 -0
  410. package/src/helper/index.d.ts.map +1 -0
  411. package/src/helper/index.js +347 -0
  412. package/src/index.d.ts +3 -6
  413. package/src/index.d.ts.map +1 -1
  414. package/src/index.js +7 -9
  415. package/src/middleware/JwtAuthMiddleware.d.ts.map +1 -1
  416. package/src/middleware/JwtAuthMiddleware.js +11 -5
  417. package/src/migrations/MigrationDiscovery.d.ts.map +1 -1
  418. package/src/migrations/MigrationDiscovery.js +2 -1
  419. package/src/orm/DatabaseAdapter.d.ts +1 -0
  420. package/src/orm/DatabaseAdapter.d.ts.map +1 -1
  421. package/src/orm/SchemaStatemenWriter.d.ts +15 -0
  422. package/src/orm/SchemaStatemenWriter.d.ts.map +1 -0
  423. package/src/orm/SchemaStatemenWriter.js +78 -0
  424. package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
  425. package/src/orm/adapters/D1Adapter.js +52 -2
  426. package/src/orm/adapters/D1RemoteAdapter.d.ts.map +1 -1
  427. package/src/orm/adapters/D1RemoteAdapter.js +137 -89
  428. package/src/orm/adapters/MySQLProxyAdapter.d.ts.map +1 -1
  429. package/src/orm/adapters/MySQLProxyAdapter.js +100 -81
  430. package/src/orm/adapters/PostgreSQLProxyAdapter.d.ts.map +1 -1
  431. package/src/orm/adapters/PostgreSQLProxyAdapter.js +26 -10
  432. package/src/orm/adapters/SqlProxyAdapterUtils.d.ts.map +1 -1
  433. package/src/orm/adapters/SqlProxyAdapterUtils.js +2 -1
  434. package/src/orm/adapters/SqlProxyRegistryMode.d.ts +12 -0
  435. package/src/orm/adapters/SqlProxyRegistryMode.d.ts.map +1 -0
  436. package/src/orm/adapters/SqlProxyRegistryMode.js +24 -0
  437. package/src/orm/adapters/SqlServerProxyAdapter.d.ts +3 -0
  438. package/src/orm/adapters/SqlServerProxyAdapter.d.ts.map +1 -1
  439. package/src/orm/adapters/SqlServerProxyAdapter.js +125 -117
  440. package/src/orm/migrations/MigrationStore.js +1 -1
  441. package/src/proxy/ProxyRequestParsing.d.ts +9 -0
  442. package/src/proxy/ProxyRequestParsing.d.ts.map +1 -0
  443. package/src/proxy/ProxyRequestParsing.js +16 -0
  444. package/src/proxy/RequestValidator.d.ts.map +1 -1
  445. package/src/proxy/RequestValidator.js +2 -1
  446. package/src/proxy/SigningService.js +2 -2
  447. package/src/proxy/SqlProxyDbOverrides.d.ts +17 -0
  448. package/src/proxy/SqlProxyDbOverrides.d.ts.map +1 -0
  449. package/src/proxy/SqlProxyDbOverrides.js +1 -0
  450. package/src/proxy/SqlProxyServerDeps.d.ts +12 -0
  451. package/src/proxy/SqlProxyServerDeps.d.ts.map +1 -0
  452. package/src/proxy/SqlProxyServerDeps.js +9 -0
  453. package/src/proxy/StatementPayloadValidator.d.ts +13 -0
  454. package/src/proxy/StatementPayloadValidator.d.ts.map +1 -0
  455. package/src/proxy/StatementPayloadValidator.js +18 -0
  456. package/src/proxy/StatementRegistryLoader.d.ts +2 -0
  457. package/src/proxy/StatementRegistryLoader.d.ts.map +1 -0
  458. package/src/proxy/StatementRegistryLoader.js +36 -0
  459. package/src/proxy/StatementRegistryResolver.d.ts +15 -0
  460. package/src/proxy/StatementRegistryResolver.d.ts.map +1 -0
  461. package/src/proxy/StatementRegistryResolver.js +34 -0
  462. package/src/proxy/d1/ZintrustD1Proxy.d.ts +2 -1
  463. package/src/proxy/d1/ZintrustD1Proxy.d.ts.map +1 -1
  464. package/src/proxy/d1/ZintrustD1Proxy.js +2 -1
  465. package/src/proxy/isMutatingSql.d.ts +2 -0
  466. package/src/proxy/isMutatingSql.d.ts.map +1 -0
  467. package/src/proxy/isMutatingSql.js +12 -0
  468. package/src/proxy/kv/ZintrustKvProxy.d.ts +2 -1
  469. package/src/proxy/kv/ZintrustKvProxy.d.ts.map +1 -1
  470. package/src/proxy/kv/ZintrustKvProxy.js +2 -1
  471. package/src/proxy/mysql/MySqlProxyServer.d.ts +2 -8
  472. package/src/proxy/mysql/MySqlProxyServer.d.ts.map +1 -1
  473. package/src/proxy/mysql/MySqlProxyServer.js +84 -51
  474. package/src/proxy/postgres/PostgresProxyServer.d.ts +2 -8
  475. package/src/proxy/postgres/PostgresProxyServer.d.ts.map +1 -1
  476. package/src/proxy/postgres/PostgresProxyServer.js +86 -48
  477. package/src/proxy/smtp/SmtpProxyServer.d.ts.map +1 -1
  478. package/src/proxy/smtp/SmtpProxyServer.js +6 -5
  479. package/src/proxy/sqlserver/SqlServerProxyServer.d.ts +2 -8
  480. package/src/proxy/sqlserver/SqlServerProxyServer.d.ts.map +1 -1
  481. package/src/proxy/sqlserver/SqlServerProxyServer.js +84 -49
  482. package/src/proxy.d.ts +4 -0
  483. package/src/proxy.d.ts.map +1 -0
  484. package/src/proxy.js +3 -0
  485. package/src/runtime/RuntimeAdapter.d.ts.map +1 -1
  486. package/src/runtime/RuntimeAdapter.js +30 -12
  487. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
  488. package/src/runtime/adapters/CloudflareAdapter.js +15 -4
  489. package/src/scheduler/Schedule.d.ts +36 -0
  490. package/src/scheduler/Schedule.d.ts.map +1 -0
  491. package/src/scheduler/Schedule.js +197 -0
  492. package/src/scheduler/ScheduleHttpGateway.d.ts +8 -0
  493. package/src/scheduler/ScheduleHttpGateway.d.ts.map +1 -0
  494. package/src/scheduler/ScheduleHttpGateway.js +196 -0
  495. package/src/scheduler/ScheduleRunner.d.ts +6 -0
  496. package/src/scheduler/ScheduleRunner.d.ts.map +1 -1
  497. package/src/scheduler/ScheduleRunner.js +166 -29
  498. package/src/scheduler/SchedulerRuntime.d.ts +15 -0
  499. package/src/scheduler/SchedulerRuntime.d.ts.map +1 -0
  500. package/src/scheduler/SchedulerRuntime.js +79 -0
  501. package/src/scheduler/cron/Cron.d.ts +19 -0
  502. package/src/scheduler/cron/Cron.d.ts.map +1 -0
  503. package/src/scheduler/cron/Cron.js +200 -0
  504. package/src/scheduler/leader/SchedulerLeader.d.ts +14 -0
  505. package/src/scheduler/leader/SchedulerLeader.d.ts.map +1 -0
  506. package/src/scheduler/leader/SchedulerLeader.js +187 -0
  507. package/src/scheduler/state/ScheduleStateStore.d.ts +27 -0
  508. package/src/scheduler/state/ScheduleStateStore.d.ts.map +1 -0
  509. package/src/scheduler/state/ScheduleStateStore.js +27 -0
  510. package/src/scheduler/types.d.ts +10 -0
  511. package/src/scheduler/types.d.ts.map +1 -1
  512. package/src/schedules/index.d.ts +1 -0
  513. package/src/schedules/index.d.ts.map +1 -1
  514. package/src/schedules/index.js +1 -0
  515. package/src/schedules/job-tracking-cleanup.d.ts +4 -0
  516. package/src/schedules/job-tracking-cleanup.d.ts.map +1 -0
  517. package/src/schedules/job-tracking-cleanup.js +116 -0
  518. package/src/schedules/log-cleanup.d.ts +1 -2
  519. package/src/schedules/log-cleanup.d.ts.map +1 -1
  520. package/src/schedules/log-cleanup.js +12 -15
  521. package/src/security/Sanitizer.d.ts.map +1 -1
  522. package/src/security/Sanitizer.js +1 -9
  523. package/src/security/SignedRequest.d.ts.map +1 -1
  524. package/src/security/SignedRequest.js +2 -2
  525. package/src/security/TokenRevocation.d.ts +19 -2
  526. package/src/security/TokenRevocation.d.ts.map +1 -1
  527. package/src/security/TokenRevocation.js +558 -30
  528. package/src/templates/docker/docker-compose.ecosystem.yml.tpl +301 -0
  529. package/src/templates/docker/docker-compose.schedules.yml.tpl +84 -0
  530. package/src/templates/project/basic/app/Controllers/AuthController.ts.tpl +11 -3
  531. package/src/templates/project/basic/app/Schedules/index.ts.tpl +0 -0
  532. package/src/templates/project/basic/config/database.ts.tpl +1 -1
  533. package/src/templates/project/basic/config/middleware.ts.tpl +23 -22
  534. package/src/templates/project/basic/wrangler.jsonc.tpl +28 -0
  535. package/src/toolkit/Secrets/Manifest.d.ts.map +1 -1
  536. package/src/toolkit/Secrets/Manifest.js +5 -7
  537. package/src/tools/mail/drivers/Smtp.d.ts.map +1 -1
  538. package/src/tools/mail/drivers/Smtp.js +7 -1
  539. package/src/tools/queue/JobReconciliationRunner.d.ts.map +1 -1
  540. package/src/tools/queue/JobReconciliationRunner.js +7 -39
  541. package/src/tools/queue/JobRecoveryDaemon.d.ts.map +1 -1
  542. package/src/tools/queue/JobRecoveryDaemon.js +116 -18
  543. package/src/tools/queue/JobStateTracker.d.ts +10 -1
  544. package/src/tools/queue/JobStateTracker.d.ts.map +1 -1
  545. package/src/tools/queue/JobStateTracker.js +24 -2
  546. package/src/tools/queue/JobStateTrackerDbPersistence.d.ts.map +1 -1
  547. package/src/tools/queue/JobStateTrackerDbPersistence.js +93 -2
@@ -1,9 +1,13 @@
1
1
  import { BaseCommand } from '../BaseCommand.js';
2
+ import { D1SqlMigrations } from '../d1/D1SqlMigrations.js';
3
+ import { WranglerConfig } from '../d1/WranglerConfig.js';
2
4
  import { WranglerD1 } from '../d1/WranglerD1.js';
3
5
  import { resolveNpmPath } from '../../common/index.js';
4
6
  import { appConfig } from '../../config/app.js';
7
+ import { databaseConfig } from '../../config/database.js';
5
8
  import { Logger } from '../../config/logger.js';
6
9
  import { ErrorFactory } from '../../exceptions/ZintrustError.js';
10
+ import * as path from '../../node-singletons/path.js';
7
11
  const RESOLVED_VOID = Promise.resolve();
8
12
  const runWrangler = async (cmd, args) => {
9
13
  // Back-compat entrypoint for tests; we only use this for D1 migrations apply.
@@ -13,30 +17,64 @@ const runWrangler = async (cmd, args) => {
13
17
  await RESOLVED_VOID;
14
18
  return WranglerD1.applyMigrations({ cmd, dbName, isLocal });
15
19
  };
16
- const executeD1Migrate = async (cmd, options) => {
20
+ const getDbName = (options) => {
21
+ const value = options['database'];
22
+ return typeof value === 'string' && value.trim() !== '' ? value : 'zintrust_db';
23
+ };
24
+ const buildExecutionContext = (options) => {
25
+ const isWorkerCommand = process.argv.includes('d1:migrate:worker');
17
26
  const isLocal = options['local'] === true || options['remote'] !== true;
18
- const dbName = typeof options['database'] === 'string' && options['database'].trim() !== ''
19
- ? options['database']
20
- : 'zintrust_db';
21
- cmd.info(`Running D1 migrations for ${dbName} (${isLocal ? 'local' : 'remote'})...`);
27
+ const dbName = getDbName(options);
28
+ const projectRoot = process.cwd();
29
+ const migrationsRelDir = isWorkerCommand
30
+ ? path.join('database', 'migrations', 'd1')
31
+ : WranglerConfig.getD1MigrationsDir(projectRoot, dbName);
32
+ const sourceMigrationsDir = isWorkerCommand
33
+ ? path.join('packages', 'workers', 'migrations')
34
+ : databaseConfig.migrations.directory;
35
+ return {
36
+ isLocal,
37
+ dbName,
38
+ projectRoot,
39
+ migrationsRelDir,
40
+ sourceMigrationsDir,
41
+ outputDir: path.join(projectRoot, migrationsRelDir),
42
+ };
43
+ };
44
+ const handleMigrationError = (cmd, error) => {
45
+ Logger.error('D1 Migration failed', error);
46
+ ErrorFactory.createCliError('D1 Migration failed', error);
47
+ const err = error;
48
+ if (err.stdout !== undefined && err.stdout.length > 0)
49
+ cmd.info(err.stdout.toString());
50
+ if (err.stderr !== undefined && err.stderr.length > 0) {
51
+ const stderr = err.stderr.toString();
52
+ Logger.error('Wrangler stderr', stderr);
53
+ ErrorFactory.createCliError('Wrangler stderr', stderr);
54
+ }
55
+ throw error;
56
+ };
57
+ const executeD1Migrate = async (cmd, options) => {
58
+ const ctx = buildExecutionContext(options);
59
+ cmd.info(`Running D1 migrations for ${ctx.dbName} (${ctx.isLocal ? 'local' : 'remote'})...`);
60
+ cmd.info(`Generating D1 SQL migrations into ${ctx.migrationsRelDir}...`);
22
61
  await RESOLVED_VOID;
23
62
  try {
24
- const output = WranglerD1.applyMigrations({ cmd, dbName, isLocal });
63
+ const generated = await D1SqlMigrations.compileAndWrite({
64
+ projectRoot: ctx.projectRoot,
65
+ globalDir: ctx.sourceMigrationsDir,
66
+ extension: databaseConfig.migrations.extension,
67
+ includeGlobal: true,
68
+ outputDir: ctx.outputDir,
69
+ });
70
+ cmd.info(`Generated ${generated.length} SQL migration file(s).`);
71
+ const output = WranglerD1.applyMigrations({ cmd, dbName: ctx.dbName, isLocal: ctx.isLocal });
25
72
  if (output !== '')
26
73
  cmd.info(output);
27
74
  cmd.info('✓ D1 migrations completed successfully');
28
75
  }
29
76
  catch (error) {
30
- Logger.error('D1 Migration failed', error);
31
- ErrorFactory.createCliError('D1 Migration failed', error);
32
- const err = error;
33
- if (err.stdout !== undefined && err.stdout.length > 0)
34
- cmd.info(err.stdout.toString());
35
- if (err.stderr !== undefined && err.stderr.length > 0)
36
- Logger.error('Wrangler stderr', err.stderr.toString());
37
- if (err.stderr !== undefined && err.stderr.length > 0)
38
- ErrorFactory.createCliError('Wrangler stderr', err.stderr.toString());
39
- throw error;
77
+ handleMigrationError(cmd, error);
40
78
  }
41
79
  };
42
80
  /**
@@ -60,6 +98,7 @@ export const D1MigrateCommand = Object.freeze({
60
98
  const cmd = BaseCommand.create({
61
99
  name: 'd1:migrate',
62
100
  description: 'Run Cloudflare D1 migrations',
101
+ aliases: ['d1:migrate:worker'],
63
102
  addOptions,
64
103
  execute: async (options) => executeD1Migrate(cmd, options),
65
104
  });
@@ -1 +1 @@
1
- {"version":3,"file":"InitContainerCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/InitContainerCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAoNlE,eAAO,MAAM,oBAAoB;cACrB,YAAY;EAkBtB,CAAC"}
1
+ {"version":3,"file":"InitContainerCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/InitContainerCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAmOlE,eAAO,MAAM,oBAAoB;cACrB,YAAY;EAkBtB,CAAC"}
@@ -76,13 +76,29 @@ services:
76
76
  - DB_DATABASE_MYSQL=\${DB_DATABASE_MYSQL:-zintrust}
77
77
  - DB_USERNAME_MYSQL=\${DB_USERNAME_MYSQL:-zintrust}
78
78
  - DB_PASSWORD_MYSQL=\${DB_PASSWORD_MYSQL:-secret}
79
+
80
+ # Cloudflare D1
81
+ - D1_DATABASE_ID=\${D1_DATABASE_ID}
82
+ - D1_ACCOUNT_ID=\${D1_ACCOUNT_ID}
83
+ - D1_API_TOKEN=\${D1_API_TOKEN}
84
+ - D1_REMOTE_URL=\${D1_REMOTE_URL}
85
+ - D1_REMOTE_KEY_ID=\${D1_REMOTE_KEY_ID}
86
+ - D1_REMOTE_SECRET=\${D1_REMOTE_SECRET}
87
+
88
+ # Cloudflare KV
89
+ - KV_NAMESPACE_ID=\${KV_NAMESPACE_ID}
90
+ - KV_ACCOUNT_ID=\${KV_ACCOUNT_ID}
91
+ - KV_API_TOKEN=\${KV_API_TOKEN}
92
+ - KV_REMOTE_URL=\${KV_REMOTE_URL}
93
+ - KV_REMOTE_KEY_ID=\${KV_REMOTE_KEY_ID}
94
+ - KV_REMOTE_SECRET=\${KV_REMOTE_SECRET}
79
95
  ports:
80
96
  - '7772:7772'
81
97
 
82
98
  `;
83
99
  const DOCKERFILE_TEMPLATE = String.raw `# syntax=docker/dockerfile:1.6
84
100
  # Build Stage - Compile TypeScript
85
- FROM node:20-alpine AS builder
101
+ FROM node:20-bookworm-slim AS builder
86
102
 
87
103
  WORKDIR /app
88
104
 
@@ -90,18 +106,16 @@ WORKDIR /app
90
106
  ENV NPM_CONFIG_CACHE=/root/.npm
91
107
  ENV NPM_CONFIG_PREFER_OFFLINE=true
92
108
 
93
- # Reuse npm cache across builds (requires BuildKit)
94
- ENV NPM_CONFIG_CACHE=/root/.npm
95
- ENV NPM_CONFIG_PREFER_OFFLINE=true
96
-
97
109
  # Install build dependencies for native modules (better-sqlite3, bcrypt)
98
- 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/*
99
113
 
100
114
  # Copy package files
101
115
  COPY package.json package-lock.json ./
102
116
 
103
117
  # Install dependencies (including dev dependencies needed for build)
104
- RUN --mount=type=cache,target=/root/.npm \
118
+ RUN --mount=type=cache,target=/root/.npm,id=zintrust-npm-cache,sharing=locked \
105
119
  npm config set fetch-retries 5 \
106
120
  && npm config set fetch-retry-mintimeout 20000 \
107
121
  && npm config set fetch-retry-maxtimeout 120000 \
@@ -112,10 +126,10 @@ COPY . .
112
126
 
113
127
  # Build TypeScript to JavaScript
114
128
  ARG BUILD_VARIANT=full
115
- RUN --mount=type=cache,target=/root/.npm npm run build:dk
129
+ RUN --mount=type=cache,target=/root/.npm,id=zintrust-npm-cache,sharing=locked npm run build:dk
116
130
 
117
131
  # Runtime Stage - Production image
118
- FROM node:20-alpine AS runtime
132
+ FROM node:20-bookworm-slim AS runtime
119
133
 
120
134
  WORKDIR /app
121
135
 
@@ -125,17 +139,18 @@ ENV PORT=7772
125
139
  ENV HOST=0.0.0.0
126
140
 
127
141
  # Create non-root user for security
128
- 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
129
143
 
130
144
  # Copy package files for production dependencies
131
145
  COPY package.json package-lock.json ./
132
146
 
133
147
  # Install only production dependencies (requires build tools for native modules)
134
- RUN --mount=type=cache,target=/root/.npm \
135
- apk add --no-cache --virtual .build-deps python3 make g++ \
148
+ RUN --mount=type=cache,target=/root/.npm,id=zintrust-npm-cache,sharing=locked \
149
+ apt-get update \
150
+ && apt-get install -y --no-install-recommends python3 make g++ \
136
151
  && npm ci --omit=dev \
137
- && apk del .build-deps \
138
- && npm cache clean --force
152
+ && apt-get purge -y --auto-remove python3 make g++ \
153
+ && rm -rf /var/lib/apt/lists/*
139
154
 
140
155
  # Copy compiled code from builder stage
141
156
  COPY --from=builder /app/dist ./dist
@@ -157,7 +172,7 @@ EXPOSE 7772
157
172
  # Start application (compiled JS; no tsx needed in runtime)
158
173
  CMD ["node", "dist/src/boot/bootstrap.js"]
159
174
  `;
160
- const backupSuffix = () => new Date().toISOString().replace(/[:.]/g, '-');
175
+ const backupSuffix = () => new Date().toISOString().replaceAll(/[:.]/g, '-');
161
176
  const backupFileIfExists = (filePath) => {
162
177
  if (!existsSync(filePath))
163
178
  return;
@@ -0,0 +1,6 @@
1
+ import { type IBaseCommand } from '../BaseCommand';
2
+ export declare const InitEcosystemCommand: Readonly<{
3
+ create(): IBaseCommand;
4
+ }>;
5
+ export default InitEcosystemCommand;
6
+ //# sourceMappingURL=InitEcosystemCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InitEcosystemCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/InitEcosystemCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAoDlE,eAAO,MAAM,oBAAoB;cACrB,YAAY;EAOtB,CAAC;AAEH,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { BaseCommand } from '../BaseCommand.js';
2
+ import { PromptHelper } from '../PromptHelper.js';
3
+ import { Logger } from '../../config/logger.js';
4
+ import { copyFileSync, existsSync, readFileSync, writeFileSync } from '../../node-singletons/fs.js';
5
+ import { join } from '../../node-singletons/path.js';
6
+ import { fileURLToPath } from '../../node-singletons/url.js';
7
+ const backupSuffix = () => new Date().toISOString().replaceAll(/[:.]/g, '-');
8
+ const backupFileIfExists = (filePath) => {
9
+ if (!existsSync(filePath))
10
+ return;
11
+ const backupPath = `${filePath}.bak.${backupSuffix()}`;
12
+ copyFileSync(filePath, backupPath);
13
+ Logger.info(`🗂️ Backup created: ${backupPath}`);
14
+ };
15
+ const readTemplate = (relPathFromThisModule) => {
16
+ const absPath = fileURLToPath(new URL(relPathFromThisModule, import.meta.url));
17
+ return readFileSync(absPath, 'utf-8');
18
+ };
19
+ const TEMPLATE_ECOSYSTEM = readTemplate('../../templates/docker/docker-compose.ecosystem.yml.tpl');
20
+ const TEMPLATE_SCHEDULES = readTemplate('../../templates/docker/docker-compose.schedules.yml.tpl');
21
+ const writeScaffoldFile = async (cwd, fileName, content) => {
22
+ const outPath = join(cwd, fileName);
23
+ let shouldWrite = true;
24
+ if (existsSync(outPath)) {
25
+ shouldWrite = await PromptHelper.confirm(`${fileName} already exists. Overwrite?`, false);
26
+ }
27
+ if (!shouldWrite) {
28
+ Logger.info(`Skipped ${fileName}`);
29
+ return;
30
+ }
31
+ backupFileIfExists(outPath);
32
+ writeFileSync(outPath, content);
33
+ Logger.info(`✅ Created ${fileName}`);
34
+ };
35
+ const execute = async () => {
36
+ const cwd = process.cwd();
37
+ await writeScaffoldFile(cwd, 'docker-compose.ecosystem.yml', TEMPLATE_ECOSYSTEM);
38
+ await writeScaffoldFile(cwd, 'docker-compose.schedules.yml', TEMPLATE_SCHEDULES);
39
+ Logger.info('✅ Ecosystem scaffolding complete.');
40
+ Logger.info('Next: docker compose -f docker-compose.ecosystem.yml up -d');
41
+ };
42
+ export const InitEcosystemCommand = Object.freeze({
43
+ create() {
44
+ return BaseCommand.create({
45
+ name: 'init:ecosystem',
46
+ description: 'Scaffold docker-compose.ecosystem.yml and docker-compose.schedules.yml',
47
+ execute,
48
+ });
49
+ },
50
+ });
51
+ export default InitEcosystemCommand;
@@ -1 +1 @@
1
- {"version":3,"file":"MigrateCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/MigrateCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA6ZrE;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB;;OAEG;cACO,YAAY;EAUtB,CAAC"}
1
+ {"version":3,"file":"MigrateCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/MigrateCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA0erE;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB;;OAEG;cACO,YAAY;EAUtB,CAAC"}
@@ -8,6 +8,7 @@ import { WranglerConfig } from '../d1/WranglerConfig.js';
8
8
  import { WranglerD1 } from '../d1/WranglerD1.js';
9
9
  import { PromptHelper } from '../PromptHelper.js';
10
10
  import { confirmProductionRun, mapConnectionToOrmConfig, parseRollbackSteps, } from '../utils/DatabaseCliUtils.js';
11
+ import { EnvFileLoader } from '../utils/EnvFileLoader.js';
11
12
  import { readEnvString } from '../../common/ExternalServiceUtils.js';
12
13
  import { databaseConfig } from '../../config/database.js';
13
14
  import { ErrorFactory } from '../../exceptions/ZintrustError.js';
@@ -52,7 +53,7 @@ const getServiceArgs = (options) => {
52
53
  return { service: serviceArg, includeGlobal };
53
54
  };
54
55
  const isDestructiveAction = (options) => options['fresh'] === true || options['reset'] === true || options['rollback'] === true;
55
- const isD1Driver = (driver) => driver === 'd1' || driver === 'd1-remote';
56
+ const isWranglerD1Driver = (driver) => driver === 'd1';
56
57
  const describeTargetDatabase = (conn) => {
57
58
  switch (conn.driver) {
58
59
  case 'sqlite':
@@ -189,33 +190,47 @@ const runD1Actions = async (params) => {
189
190
  cmd.info(output);
190
191
  cmd.success('D1 migrations completed successfully');
191
192
  };
192
- const processConnection = async (conn, options, cmd, interactive) => {
193
- // Avoid confusion: `--database` is a D1-only option (Wrangler binding name), not DB_DATABASE.
194
- if (isD1Driver(conn.driver)) {
193
+ const logOptionsForConn = (cmd, conn, options) => {
194
+ if (isWranglerD1Driver(conn.driver)) {
195
195
  cmd.debug(`Migrate command executed with options: ${JSON.stringify(options)}`);
196
+ return;
196
197
  }
197
- else {
198
- const optionsForLog = { ...options };
199
- delete optionsForLog['database'];
200
- delete optionsForLog['local'];
201
- delete optionsForLog['remote'];
202
- cmd.debug(`Migrate command executed with options: ${JSON.stringify(optionsForLog)}`);
198
+ const optionsForLog = { ...options };
199
+ delete optionsForLog['database'];
200
+ delete optionsForLog['local'];
201
+ delete optionsForLog['remote'];
202
+ cmd.debug(`Migrate command executed with options: ${JSON.stringify(optionsForLog)}`);
203
+ };
204
+ const warnIfAdapterMissing = (cmd, conn) => {
205
+ if (conn.driver === 'mysql' && DatabaseAdapterRegistry.get('mysql') === undefined) {
206
+ cmd.warn('MySQL adapter is not installed/registered; migrations may not hit a real MySQL DB.');
207
+ cmd.warn('Install via `zin plugin install adapter:mysql` (or `zin add db:mysql`).');
208
+ cmd.debug('[debug] Expected a side-effect import in src/zintrust.plugins.ts like: import "@zintrust/db-mysql/register";');
203
209
  }
204
- const { globalDir, extension, separateTracking } = getMigrationDirs();
205
- const { service, includeGlobal } = getServiceArgs(options);
206
- if (isD1Driver(conn.driver)) {
207
- await runD1Actions({
208
- options,
209
- cmd,
210
- projectRoot: process.cwd(),
211
- globalDir,
212
- extension,
213
- separateTracking,
214
- service,
215
- includeGlobal,
216
- });
217
- return;
210
+ if (conn.driver === 'postgresql' && DatabaseAdapterRegistry.get('postgresql') === undefined) {
211
+ cmd.warn('PostgreSQL adapter is not installed/registered; migrations may not hit a real PostgreSQL DB.');
212
+ cmd.warn('Install via `zin plugin install adapter:postgres` (or `zin add db:postgres`).');
218
213
  }
214
+ };
215
+ const withD1RemoteSqlMode = async (fn) => {
216
+ if (typeof process === 'undefined' || process.env === undefined)
217
+ return fn();
218
+ const prev = process.env['D1_REMOTE_MODE'];
219
+ process.env['D1_REMOTE_MODE'] = 'sql';
220
+ try {
221
+ return await fn();
222
+ }
223
+ finally {
224
+ if (prev === undefined) {
225
+ delete process.env['D1_REMOTE_MODE'];
226
+ }
227
+ else {
228
+ process.env['D1_REMOTE_MODE'] = prev;
229
+ }
230
+ }
231
+ };
232
+ const runOrmMigrationsForConn = async (params) => {
233
+ const { conn, options, cmd, interactive, globalDir, extension, separateTracking, service, includeGlobal, } = params;
219
234
  const ormConfig = mapConnectionToOrmConfig(conn);
220
235
  const destructive = isDestructiveAction(options);
221
236
  const force = options['force'] === true;
@@ -231,18 +246,7 @@ const processConnection = async (conn, options, cmd, interactive) => {
231
246
  cmd.info(`[i] Target database: ${describeTargetDatabase(conn)}`);
232
247
  cmd.info('[i] Migration tracking table: migrations');
233
248
  cmd.debug(`[debug] Registered database adapters: ${DatabaseAdapterRegistry.list().join(', ')}`);
234
- // Warn only when the adapter truly isn't registered.
235
- // Adapters are registered via side-effect imports in src/zintrust.plugins.ts
236
- // (generated by `zin plugin install`) and are loaded at CLI startup.
237
- if (conn.driver === 'mysql' && DatabaseAdapterRegistry.get('mysql') === undefined) {
238
- cmd.warn('MySQL adapter is not installed/registered; migrations may not hit a real MySQL DB.');
239
- cmd.warn('Install via `zin plugin install adapter:mysql` (or `zin add db:mysql`).');
240
- cmd.debug('[debug] Expected a side-effect import in src/zintrust.plugins.ts like: import "@zintrust/db-mysql/register";');
241
- }
242
- if (conn.driver === 'postgresql' && DatabaseAdapterRegistry.get('postgresql') === undefined) {
243
- cmd.warn('PostgreSQL adapter is not installed/registered; migrations may not hit a real PostgreSQL DB.');
244
- cmd.warn('Install via `zin plugin install adapter:postgres` (or `zin add db:postgres`).');
245
- }
249
+ warnIfAdapterMissing(cmd, conn);
246
250
  const db = Database.create(ormConfig);
247
251
  await db.connect();
248
252
  try {
@@ -261,7 +265,45 @@ const processConnection = async (conn, options, cmd, interactive) => {
261
265
  await db.disconnect();
262
266
  }
263
267
  };
268
+ const processConnection = async (conn, options, cmd, interactive) => {
269
+ // Avoid confusion: `--database` is a D1-only option (Wrangler binding name), not DB_DATABASE.
270
+ logOptionsForConn(cmd, conn, options);
271
+ const { globalDir, extension, separateTracking } = getMigrationDirs();
272
+ const { service, includeGlobal } = getServiceArgs(options);
273
+ if (isWranglerD1Driver(conn.driver)) {
274
+ await runD1Actions({
275
+ options,
276
+ cmd,
277
+ projectRoot: process.cwd(),
278
+ globalDir,
279
+ extension,
280
+ separateTracking,
281
+ service,
282
+ includeGlobal,
283
+ });
284
+ return;
285
+ }
286
+ const run = async () => runOrmMigrationsForConn({
287
+ conn,
288
+ options,
289
+ cmd,
290
+ interactive,
291
+ globalDir,
292
+ extension,
293
+ separateTracking,
294
+ service,
295
+ includeGlobal,
296
+ });
297
+ if (conn.driver === 'd1-remote') {
298
+ cmd.info('[i] d1-remote migrations: using SQL mode automatically for this CLI run');
299
+ await withD1RemoteSqlMode(run);
300
+ return;
301
+ }
302
+ await run();
303
+ };
264
304
  const executeMigrate = async (options, cmd) => {
305
+ // Ensure .env overlays are loaded for CLI runs (needed for d1-remote signing fallbacks).
306
+ EnvFileLoader.ensureLoaded();
265
307
  const interactive = getInteractive(options);
266
308
  const targets = [];
267
309
  if (options['all'] === true) {
@@ -1 +1 @@
1
- {"version":3,"file":"MigrateWorkerCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/MigrateWorkerCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAqKrE,eAAO,MAAM,oBAAoB;cACrB,YAAY;EAUtB,CAAC"}
1
+ {"version":3,"file":"MigrateWorkerCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/MigrateWorkerCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAiNrE,eAAO,MAAM,oBAAoB;cACrB,YAAY;EAUtB,CAAC"}
@@ -9,6 +9,19 @@ import { Migrator } from '../../migrations/Migrator.js';
9
9
  import * as path from '../../node-singletons/path.js';
10
10
  import { Database } from '../../orm/Database.js';
11
11
  import { DatabaseAdapterRegistry } from '../../orm/DatabaseAdapterRegistry.js';
12
+ const isBuiltInDriver = (driver) => driver === 'sqlite' ||
13
+ driver === 'mysql' ||
14
+ driver === 'postgresql' ||
15
+ driver === 'sqlserver' ||
16
+ driver === 'd1' ||
17
+ driver === 'd1-remote';
18
+ const getWorkerPersistenceConnectionName = () => {
19
+ if (typeof process === 'undefined')
20
+ return 'default';
21
+ const raw = process.env?.['WORKER_PERSISTENCE_DB_CONNECTION'];
22
+ const value = typeof raw === 'string' ? raw.trim() : '';
23
+ return value.length > 0 ? value : 'default';
24
+ };
12
25
  const addOptions = (command) => {
13
26
  command
14
27
  .option('--status', 'Display migration status (applied, pending, failed)')
@@ -80,10 +93,16 @@ const runForConnection = async (conn, options, cmd, interactive) => {
80
93
  });
81
94
  if (!proceed)
82
95
  return;
83
- if (!DatabaseAdapterRegistry.has(conn.driver)) {
96
+ if (!isBuiltInDriver(conn.driver) && !DatabaseAdapterRegistry.has(conn.driver)) {
84
97
  cmd.warn(`Missing adapter for driver: ${conn.driver}`);
85
98
  cmd.warn(`Install via 'zin plugin install adapter:${conn.driver}' (or 'zin add db:${conn.driver}').`);
86
99
  }
100
+ const previousD1RemoteMode = typeof process === 'undefined' ? undefined : process.env['D1_REMOTE_MODE'];
101
+ if (conn.driver === 'd1-remote' && typeof process !== 'undefined') {
102
+ // Important: set BEFORE Database.create() so D1RemoteAdapter is constructed in SQL mode.
103
+ // Registry mode uses /zin/d1/statement, which is not appropriate for migrations.
104
+ process.env['D1_REMOTE_MODE'] = 'sql';
105
+ }
87
106
  const ormConfig = mapConnectionToOrmConfig(conn);
88
107
  const db = Database.create(ormConfig);
89
108
  await db.connect();
@@ -98,6 +117,14 @@ const runForConnection = async (conn, options, cmd, interactive) => {
98
117
  await runActions(migrator, options, cmd, conn.driver);
99
118
  }
100
119
  finally {
120
+ if (conn.driver === 'd1-remote' && typeof process !== 'undefined') {
121
+ if (previousD1RemoteMode === undefined) {
122
+ delete process.env['D1_REMOTE_MODE'];
123
+ }
124
+ else {
125
+ process.env['D1_REMOTE_MODE'] = previousD1RemoteMode;
126
+ }
127
+ }
101
128
  await db.disconnect();
102
129
  }
103
130
  };
@@ -110,7 +137,14 @@ const executeMigrateWorker = async (options, cmd) => {
110
137
  }
111
138
  }
112
139
  else {
113
- targets.push({ name: 'default', config: databaseConfig.getConnection() });
140
+ const selected = getWorkerPersistenceConnectionName();
141
+ const hasSelected = selected.length > 0;
142
+ const connections = databaseConfig.connections;
143
+ const configured = hasSelected ? connections[selected] : undefined;
144
+ targets.push({
145
+ name: hasSelected ? selected : 'default',
146
+ config: configured ?? databaseConfig.getConnection(),
147
+ });
114
148
  }
115
149
  let sequence = Promise.resolve();
116
150
  for (const { name, config } of targets) {
@@ -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) {
@@ -0,0 +1,6 @@
1
+ import { type IBaseCommand } from '../BaseCommand';
2
+ export declare const PutCommand: Readonly<{
3
+ create(): IBaseCommand;
4
+ }>;
5
+ export default PutCommand;
6
+ //# sourceMappingURL=PutCommand.d.ts.map
@@ -0,0 +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"}