@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
@@ -37,29 +37,45 @@ const logBootstrapErrorDetails = (error) => {
37
37
  // best-effort logging
38
38
  }
39
39
  };
40
- const startSchedulesIfNeeded = async (app) => {
40
+ const startSchedulesIfNeeded = async (application) => {
41
41
  try {
42
+ if (Env.getBool('SCHEDULES_ENABLED', false) === false)
43
+ return;
42
44
  const runtime = appConfig.detectRuntime();
43
45
  if (runtime !== 'nodejs' && runtime !== 'fargate')
44
46
  return;
45
- const { create: createScheduleRunner } = await import('../scheduler/ScheduleRunner.js');
46
- const schedules = await import('../schedules/index.js');
47
- const runner = createScheduleRunner();
48
- for (const schedule of Object.values(schedules)) {
49
- // Each schedule is expected to export a default ISchedule
50
- // @ts-ignore
51
- runner.register(schedule);
47
+ const { SchedulerRuntime } = await import('../scheduler/SchedulerRuntime.js');
48
+ const coreSchedules = await import('../schedules/index.js');
49
+ let appSchedules = {};
50
+ try {
51
+ const appSchedulesModuleId = '@app/' + 'Schedules';
52
+ appSchedules = (await import(appSchedulesModuleId));
53
+ }
54
+ catch {
55
+ /* v8 ignore next */
56
+ appSchedules = {};
52
57
  }
53
- runner.start();
58
+ const isSchedule = (value) => {
59
+ if (value === null || value === undefined || typeof value !== 'object')
60
+ return false;
61
+ return ('name' in value &&
62
+ typeof value.name === 'string' &&
63
+ value.name.trim().length > 0);
64
+ };
65
+ const coreScheduleEntries = Object.values(coreSchedules).filter(isSchedule);
66
+ const appScheduleEntries = Object.values(appSchedules).filter(isSchedule);
67
+ SchedulerRuntime.registerMany(coreScheduleEntries, 'core');
68
+ SchedulerRuntime.registerMany(appScheduleEntries, 'app');
69
+ SchedulerRuntime.start();
54
70
  // Add shutdown hook to stop schedules gracefully
55
- const shutdownManager = app.getContainer().get('shutdownManager');
71
+ const shutdownManager = application.getContainer().get('shutdownManager');
56
72
  if ((typeof shutdownManager === 'object' || typeof shutdownManager === 'function') &&
57
73
  shutdownManager !== null &&
58
74
  'add' in shutdownManager &&
59
75
  typeof shutdownManager.add === 'function') {
60
76
  shutdownManager.add(async () => {
61
77
  const scheduleTimeoutMs = Env.getInt('SCHEDULE_SHUTDOWN_TIMEOUT_MS', 30000);
62
- await runner.stop(scheduleTimeoutMs);
78
+ await SchedulerRuntime.stop(scheduleTimeoutMs);
63
79
  });
64
80
  }
65
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/boot/registry/runtime.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAOvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AA+I9C,eAAO,MAAM,8BAA8B,GAAI,iBAAiB,gBAAgB,KAAG,IA4BlF,CAAC;AA+KF,eAAO,MAAM,eAAe,GAAI,QAAQ;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,gBAAgB,CAAC;IAClC,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACrC,KAAG;IAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAsE7D,CAAC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/boot/registry/runtime.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAOvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AA+I9C,eAAO,MAAM,8BAA8B,GAAI,iBAAiB,gBAAgB,KAAG,IA4BlF,CAAC;AAyLF,eAAO,MAAM,eAAe,GAAI,QAAQ;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,gBAAgB,CAAC;IAClC,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACrC,KAAG;IAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAuE7D,CAAC"}
@@ -293,6 +293,16 @@ const initializeQueueHttpGateway = async (router) => {
293
293
  Logger.warn('Failed to register Queue HTTP gateway routes', error);
294
294
  }
295
295
  };
296
+ const initializeScheduleHttpGateway = async (router) => {
297
+ try {
298
+ const { ScheduleHttpGateway } = await import('../../scheduler/ScheduleHttpGateway.js');
299
+ ScheduleHttpGateway.create().registerRoutes(router);
300
+ Logger.info('Schedule HTTP gateway route registered at /api/_sys/schedule/rpc');
301
+ }
302
+ catch (error) {
303
+ Logger.warn('Failed to register Schedule HTTP gateway routes', error);
304
+ }
305
+ };
296
306
  export const createLifecycle = (params) => {
297
307
  const boot = async () => {
298
308
  if (params.getBooted())
@@ -324,6 +334,7 @@ export const createLifecycle = (params) => {
324
334
  await initializeWorkers(params.router);
325
335
  await initializeQueueMonitor(params.router);
326
336
  await initializeQueueHttpGateway(params.router);
337
+ await initializeScheduleHttpGateway(params.router);
327
338
  }
328
339
  // Register service providers
329
340
  // Bootstrap services
@@ -1 +1 @@
1
- {"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../../src/cache/Cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAmHtD,KAAK,UAAU,GAAG,QAAQ,CAAC;IACzB,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3C,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,SAAS,EAAE,MAAM,WAAW,CAAC;CAC9B,CAAC,CAAC;AA0CH,eAAO,MAAM,KAAK;UA1FC,CAAC,OAAO,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;UAQlC,CAAC,OAAO,MAAM,SAAS,CAAC,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;kBAOjD,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;iBAOtB,OAAO,CAAC,IAAI,CAAC;eAOb,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;qBAQ3B,WAAW;mBAaX,MAAM,KAAG,UAAU;iBAmCvB,IAAI;EAcpB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,KAAK;UAxGC,CAAC,OAAO,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;UAQlC,CAAC,OAAO,MAAM,SAAS,CAAC,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;kBAOjD,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;iBAOtB,OAAO,CAAC,IAAI,CAAC;eAOb,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;qBAQ3B,WAAW;mBAaX,MAAM,KAAG,UAAU;iBAmCvB,IAAI;EAmBI,CAAC"}
1
+ {"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../../src/cache/Cache.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAmJtD,KAAK,UAAU,GAAG,QAAQ,CAAC;IACzB,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3C,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,SAAS,EAAE,MAAM,WAAW,CAAC;CAC9B,CAAC,CAAC;AA8CH,eAAO,MAAM,KAAK;UAlGC,CAAC,OAAO,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;UASlC,CAAC,OAAO,MAAM,SAAS,CAAC,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;kBAQjD,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;iBAQtB,OAAO,CAAC,IAAI,CAAC;eAOb,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;qBAS3B,WAAW;mBAaX,MAAM,KAAG,UAAU;iBAuCvB,IAAI;EAcpB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,KAAK;UAhHC,CAAC,OAAO,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;UASlC,CAAC,OAAO,MAAM,SAAS,CAAC,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;kBAQjD,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;iBAQtB,OAAO,CAAC,IAAI,CAAC;eAOb,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;qBAS3B,WAAW;mBAaX,MAAM,KAAG,UAAU;iBAuCvB,IAAI;EAmBI,CAAC"}
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/require-await */
1
2
  /**
2
3
  * Cache Manager
3
4
  * Central cache management and driver resolution
@@ -10,8 +11,24 @@ import { MemoryDriver } from './drivers/MemoryDriver.js';
10
11
  import { MongoDriver } from './drivers/MongoDriver.js';
11
12
  import { RedisDriver } from './drivers/RedisDriver.js';
12
13
  import { cacheConfig } from '../config/cache.js';
14
+ import { Env } from '../config/env.js';
13
15
  import { ErrorFactory } from '../exceptions/ZintrustError.js';
14
16
  const instances = new Map();
17
+ /**
18
+ * Auto-prefix cache keys with 'zt:' if not already prefixed
19
+ */
20
+ function autoPrefixKey(key) {
21
+ return key.startsWith('zt:') ? key : `zt:${key}`;
22
+ }
23
+ function createNoOpDriver() {
24
+ return {
25
+ get: async () => null,
26
+ set: async () => { },
27
+ delete: async () => { },
28
+ clear: async () => { },
29
+ has: async () => false,
30
+ };
31
+ }
15
32
  function buildDriver(driver) {
16
33
  const maybeCreate = driver.create;
17
34
  if (typeof maybeCreate === 'function') {
@@ -23,6 +40,13 @@ function buildDriver(driver) {
23
40
  throw ErrorFactory.createGeneralError('Invalid cache driver export');
24
41
  }
25
42
  function resolveDriver(storeName) {
43
+ const cacheEnabledRaw = Env.get('CACHE_ENABLED', 'true').trim().toLowerCase();
44
+ const cacheEnabled = !(cacheEnabledRaw === 'false' ||
45
+ cacheEnabledRaw === '0' ||
46
+ cacheEnabledRaw === 'no');
47
+ if (!cacheEnabled) {
48
+ return createNoOpDriver();
49
+ }
26
50
  const driverConfig = cacheConfig.getDriver(storeName);
27
51
  const externalFactory = CacheDriverRegistry.get(driverConfig.driver);
28
52
  if (externalFactory !== undefined) {
@@ -60,20 +84,23 @@ function getDriverInstance(storeName) {
60
84
  * Get an item from the cache
61
85
  */
62
86
  const get = async (key) => {
63
- const value = await getDriverInstance().get(key);
87
+ const prefixedKey = autoPrefixKey(key);
88
+ const value = await getDriverInstance().get(prefixedKey);
64
89
  return value;
65
90
  };
66
91
  /**
67
92
  * Store an item in the cache
68
93
  */
69
94
  const set = async (key, value, ttl) => {
70
- await getDriverInstance().set(key, value, ttl);
95
+ const prefixedKey = autoPrefixKey(key);
96
+ await getDriverInstance().set(prefixedKey, value, ttl);
71
97
  };
72
98
  /**
73
99
  * Remove an item from the cache
74
100
  */
75
101
  const del = async (key) => {
76
- await getDriverInstance().delete(key);
102
+ const prefixedKey = autoPrefixKey(key);
103
+ await getDriverInstance().delete(prefixedKey);
77
104
  };
78
105
  /**
79
106
  * Clear all items from the cache
@@ -85,7 +112,8 @@ const clear = async () => {
85
112
  * Check if an item exists in the cache
86
113
  */
87
114
  const has = async (key) => {
88
- const exists = await getDriverInstance().has(key);
115
+ const prefixedKey = autoPrefixKey(key);
116
+ const exists = await getDriverInstance().has(prefixedKey);
89
117
  return exists;
90
118
  };
91
119
  /**
@@ -96,19 +124,23 @@ const getDriver = () => {
96
124
  };
97
125
  const store = (name) => {
98
126
  const getFromStore = async (key) => {
99
- return getDriverInstance(name).get(key);
127
+ const prefixedKey = autoPrefixKey(key);
128
+ return getDriverInstance(name).get(prefixedKey);
100
129
  };
101
130
  const setInStore = async (key, value, ttl) => {
102
- await getDriverInstance(name).set(key, value, ttl);
131
+ const prefixedKey = autoPrefixKey(key);
132
+ await getDriverInstance(name).set(prefixedKey, value, ttl);
103
133
  };
104
134
  const delFromStore = async (key) => {
105
- await getDriverInstance(name).delete(key);
135
+ const prefixedKey = autoPrefixKey(key);
136
+ await getDriverInstance(name).delete(prefixedKey);
106
137
  };
107
138
  const clearStore = async () => {
108
139
  await getDriverInstance(name).clear();
109
140
  };
110
141
  const hasInStore = async (key) => {
111
- return getDriverInstance(name).has(key);
142
+ const prefixedKey = autoPrefixKey(key);
143
+ return getDriverInstance(name).has(prefixedKey);
112
144
  };
113
145
  const getStoreDriver = () => {
114
146
  return getDriverInstance(name);
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import type { CacheDriver } from '../CacheDriver';
7
7
  export declare const KVRemoteDriver: Readonly<{
8
- create(): CacheDriver;
8
+ create: () => CacheDriver;
9
9
  }>;
10
10
  export default KVRemoteDriver;
11
11
  //# sourceMappingURL=KVRemoteDriver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"KVRemoteDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/KVRemoteDriver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAiCtD,eAAO,MAAM,cAAc;cACf,WAAW;EAkErB,CAAC;AAEH,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"KVRemoteDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/KVRemoteDriver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAqYtD,eAAO,MAAM,cAAc;kBAtFM,WAAW;EAwF1C,CAAC;AAEH,eAAe,cAAc,CAAC"}
@@ -6,6 +6,7 @@
6
6
  import { RemoteSignedJson } from '../../common/RemoteSignedJson.js';
7
7
  import { Env } from '../../config/env.js';
8
8
  import { Logger } from '../../config/logger.js';
9
+ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
9
10
  const resolveSigningPrefix = (baseUrl) => {
10
11
  try {
11
12
  const parsed = new URL(baseUrl);
@@ -19,65 +20,279 @@ const resolveSigningPrefix = (baseUrl) => {
19
20
  }
20
21
  };
21
22
  const normalizeNamespace = (defaultNamespace) => defaultNamespace.trim() === '' ? undefined : defaultNamespace;
22
- export const KVRemoteDriver = Object.freeze({
23
- create() {
24
- const settings = {
25
- baseUrl: Env.get('KV_REMOTE_URL'),
26
- keyId: Env.get('KV_REMOTE_KEY_ID'),
27
- secret: Env.get('KV_REMOTE_SECRET', Env.APP_KEY),
28
- defaultNamespace: Env.get('KV_REMOTE_NAMESPACE'),
29
- timeoutMs: Env.getInt('ZT_PROXY_TIMEOUT_MS', Env.REQUEST_TIMEOUT),
30
- };
31
- const remote = {
32
- baseUrl: settings.baseUrl,
33
- keyId: settings.keyId,
34
- secret: settings.secret,
35
- timeoutMs: settings.timeoutMs,
36
- signaturePathPrefixToStrip: resolveSigningPrefix(settings.baseUrl),
37
- missingUrlMessage: 'KV remote proxy URL is missing (KV_REMOTE_URL)',
38
- missingCredentialsMessage: 'KV remote signing credentials are missing (KV_REMOTE_KEY_ID / KV_REMOTE_SECRET)',
39
- messages: {
40
- unauthorized: 'KV remote proxy unauthorized',
41
- forbidden: 'KV remote proxy forbidden',
42
- rateLimited: 'KV remote proxy rate limited',
43
- rejected: 'KV remote proxy rejected request',
44
- error: 'KV remote proxy error',
45
- timedOut: 'KV remote proxy request timed out',
46
- },
47
- };
48
- return {
49
- async get(key) {
23
+ const getSettings = () => ({
24
+ baseUrl: Env.get('KV_REMOTE_URL'),
25
+ keyId: Env.get('KV_REMOTE_KEY_ID'),
26
+ secret: Env.get('KV_REMOTE_SECRET', Env.APP_KEY),
27
+ defaultNamespace: Env.get('KV_REMOTE_NAMESPACE'),
28
+ timeoutMs: Env.getInt('ZT_PROXY_TIMEOUT_MS', Env.REQUEST_TIMEOUT),
29
+ });
30
+ const getCloudflareCreds = () => ({
31
+ accountId: Env.get('KV_ACCOUNT_ID', Env.get('CLOUDFLARE_ACCOUNT_ID', '')).trim(),
32
+ apiToken: Env.get('KV_API_TOKEN', Env.get('CLOUDFLARE_API_TOKEN', '')).trim(),
33
+ namespaceId: Env.get('KV_NAMESPACE_ID', Env.get('CLOUDFLARE_KV_NAMESPACE_ID', '')).trim(),
34
+ namespaceTitle: Env.get('KV_NAMESPACE', '').trim(),
35
+ });
36
+ const hasCloudflareApiCreds = () => {
37
+ const creds = getCloudflareCreds();
38
+ return creds.accountId !== '' && creds.apiToken !== '';
39
+ };
40
+ const hasProxySigningCreds = (settings) => settings.keyId.trim() !== '' && settings.secret.trim() !== '';
41
+ const buildCloudflareValueUrl = (creds, key, ttlSeconds) => {
42
+ const base = `https://api.cloudflare.com/client/v4/accounts/${encodeURIComponent(creds.accountId)}/storage/kv/namespaces/${encodeURIComponent(creds.namespaceId)}/values/${encodeURIComponent(key)}`;
43
+ if (ttlSeconds === undefined)
44
+ return base;
45
+ const ttl = Math.max(60, Math.floor(ttlSeconds));
46
+ return ttl > 0 ? `${base}?expiration_ttl=${ttl}` : base;
47
+ };
48
+ const cfFetch = async (apiToken, url, init) => {
49
+ const headers = new Headers(init.headers);
50
+ headers.set('Authorization', `Bearer ${apiToken}`);
51
+ return fetch(url, { ...init, headers });
52
+ };
53
+ const parseJsonOrThrow = (text, message) => {
54
+ try {
55
+ return JSON.parse(text);
56
+ }
57
+ catch {
58
+ throw ErrorFactory.createConnectionError(message, { body: text });
59
+ }
60
+ };
61
+ const listNamespacesPage = async (params) => {
62
+ const url = `https://api.cloudflare.com/client/v4/accounts/${encodeURIComponent(params.accountId)}/storage/kv/namespaces?page=${params.page}&per_page=${params.perPage}`;
63
+ const res = await cfFetch(params.apiToken, url, { method: 'GET' });
64
+ const text = await res.text();
65
+ if (!res.ok) {
66
+ throw ErrorFactory.createConnectionError(`Cloudflare KV namespaces list failed (${res.status})`, {
67
+ status: res.status,
68
+ body: text,
69
+ });
70
+ }
71
+ const parsed = parseJsonOrThrow(text, 'Cloudflare KV namespaces list returned invalid JSON');
72
+ const namespaces = (parsed.result ?? [])
73
+ .map((ns) => ({
74
+ id: typeof ns.id === 'string' ? ns.id.trim() : '',
75
+ title: typeof ns.title === 'string' ? ns.title.trim() : '',
76
+ }))
77
+ .filter((ns) => ns.id !== '' && ns.title !== '');
78
+ const totalPages = Number(parsed.result_info?.total_pages ?? 1);
79
+ return {
80
+ namespaces,
81
+ totalPages: Number.isFinite(totalPages) && totalPages > 0 ? totalPages : 1,
82
+ };
83
+ };
84
+ const findNamespaceIdByTitle = (namespaces, title) => {
85
+ const found = namespaces.find((ns) => ns.title === title);
86
+ return found?.id ?? null;
87
+ };
88
+ const createRemoteSettings = (settings) => ({
89
+ baseUrl: settings.baseUrl,
90
+ keyId: settings.keyId,
91
+ secret: settings.secret,
92
+ timeoutMs: settings.timeoutMs,
93
+ signaturePathPrefixToStrip: resolveSigningPrefix(settings.baseUrl),
94
+ missingUrlMessage: 'KV remote proxy URL is missing (KV_REMOTE_URL)',
95
+ missingCredentialsMessage: 'KV remote signing credentials are missing (KV_REMOTE_KEY_ID / KV_REMOTE_SECRET)',
96
+ messages: {
97
+ unauthorized: 'KV remote proxy unauthorized',
98
+ forbidden: 'KV remote proxy forbidden',
99
+ rateLimited: 'KV remote proxy rate limited',
100
+ rejected: 'KV remote proxy rejected request',
101
+ error: 'KV remote proxy error',
102
+ timedOut: 'KV remote proxy request timed out',
103
+ },
104
+ });
105
+ const fetchAllNamespaces = async (params) => {
106
+ const first = await listNamespacesPage({
107
+ accountId: params.accountId,
108
+ apiToken: params.apiToken,
109
+ page: 1,
110
+ perPage: 100,
111
+ });
112
+ if (first.totalPages <= 1)
113
+ return first.namespaces;
114
+ const pages = Array.from({ length: first.totalPages - 1 }, (_v, idx) => idx + 2);
115
+ const rest = await Promise.all(pages.map(async (page) => listNamespacesPage({
116
+ accountId: params.accountId,
117
+ apiToken: params.apiToken,
118
+ page,
119
+ perPage: 100,
120
+ })));
121
+ return first.namespaces.concat(...rest.map((r) => r.namespaces));
122
+ };
123
+ const createCloudflareNamespaceIdResolver = () => {
124
+ let cachedNamespaceId = null;
125
+ let cachedNamespaceTitle = null;
126
+ let cachedAccountId = null;
127
+ return async () => {
128
+ const creds = getCloudflareCreds();
129
+ if (creds.namespaceId !== '')
130
+ return creds.namespaceId;
131
+ if (cachedNamespaceId !== null &&
132
+ cachedNamespaceTitle === creds.namespaceTitle &&
133
+ cachedAccountId === creds.accountId) {
134
+ return cachedNamespaceId;
135
+ }
136
+ if (creds.namespaceTitle === '') {
137
+ throw ErrorFactory.createConfigError('Cloudflare KV namespace id is missing (KV_NAMESPACE_ID) and no namespace title is provided (KV_NAMESPACE)');
138
+ }
139
+ const all = await fetchAllNamespaces({ accountId: creds.accountId, apiToken: creds.apiToken });
140
+ const match = findNamespaceIdByTitle(all, creds.namespaceTitle);
141
+ if (match === null) {
142
+ throw ErrorFactory.createConfigError('Cloudflare KV namespace not found', {
143
+ namespaceTitle: creds.namespaceTitle,
144
+ });
145
+ }
146
+ cachedNamespaceId = match;
147
+ cachedNamespaceTitle = creds.namespaceTitle;
148
+ cachedAccountId = creds.accountId;
149
+ return match;
150
+ };
151
+ };
152
+ const createCloudflareKvApiClient = (resolveNamespaceId) => {
153
+ const getJson = async (key) => {
154
+ const creds = getCloudflareCreds();
155
+ const namespaceId = await resolveNamespaceId();
156
+ const url = buildCloudflareValueUrl({ accountId: creds.accountId, namespaceId }, key);
157
+ const res = await cfFetch(creds.apiToken, url, { method: 'GET' });
158
+ if (res.status === 404)
159
+ return null;
160
+ const text = await res.text();
161
+ if (!res.ok) {
162
+ throw ErrorFactory.createConnectionError(`Cloudflare KV GET failed (${res.status})`, {
163
+ status: res.status,
164
+ body: text,
165
+ });
166
+ }
167
+ if (text.trim() === '')
168
+ return null;
169
+ try {
170
+ return JSON.parse(text);
171
+ }
172
+ catch {
173
+ return null;
174
+ }
175
+ };
176
+ const putJson = async (key, value, ttlSeconds) => {
177
+ const creds = getCloudflareCreds();
178
+ const namespaceId = await resolveNamespaceId();
179
+ const url = buildCloudflareValueUrl({ accountId: creds.accountId, namespaceId }, key, ttlSeconds);
180
+ const body = JSON.stringify(value);
181
+ const res = await cfFetch(creds.apiToken, url, {
182
+ method: 'PUT',
183
+ headers: { 'content-type': 'application/json' },
184
+ body,
185
+ });
186
+ const text = await res.text();
187
+ if (!res.ok) {
188
+ throw ErrorFactory.createConnectionError(`Cloudflare KV PUT failed (${res.status})`, {
189
+ status: res.status,
190
+ body: text,
191
+ });
192
+ }
193
+ };
194
+ const deleteKey = async (key) => {
195
+ const creds = getCloudflareCreds();
196
+ const namespaceId = await resolveNamespaceId();
197
+ const url = buildCloudflareValueUrl({ accountId: creds.accountId, namespaceId }, key);
198
+ const res = await cfFetch(creds.apiToken, url, { method: 'DELETE' });
199
+ const text = await res.text();
200
+ if (!res.ok && res.status !== 404) {
201
+ throw ErrorFactory.createConnectionError(`Cloudflare KV DELETE failed (${res.status})`, {
202
+ status: res.status,
203
+ body: text,
204
+ });
205
+ }
206
+ };
207
+ return { getJson, putJson, deleteKey };
208
+ };
209
+ const createKvRemoteDriver = () => {
210
+ const resolveNamespaceId = createCloudflareNamespaceIdResolver();
211
+ const cf = createCloudflareKvApiClient(resolveNamespaceId);
212
+ return {
213
+ async get(key) {
214
+ const settings = getSettings();
215
+ if (!hasProxySigningCreds(settings) && hasCloudflareApiCreds())
216
+ return cf.getJson(key);
217
+ try {
218
+ const remote = createRemoteSettings(settings);
50
219
  const out = await RemoteSignedJson.request(remote, '/zin/kv/get', {
51
220
  namespace: normalizeNamespace(settings.defaultNamespace),
52
221
  key,
53
222
  type: 'json',
54
223
  });
55
224
  return out.value ?? null;
56
- },
57
- async set(key, value, ttl) {
225
+ }
226
+ catch (error) {
227
+ if (!hasCloudflareApiCreds())
228
+ throw error;
229
+ Logger.warn('KV remote proxy GET failed; falling back to Cloudflare KV API', {
230
+ error: error instanceof Error ? error.message : String(error),
231
+ });
232
+ return cf.getJson(key);
233
+ }
234
+ },
235
+ async set(key, value, ttl) {
236
+ const settings = getSettings();
237
+ if (!hasProxySigningCreds(settings) && hasCloudflareApiCreds()) {
238
+ await cf.putJson(key, value, ttl);
239
+ return;
240
+ }
241
+ try {
242
+ const remote = createRemoteSettings(settings);
58
243
  await RemoteSignedJson.request(remote, '/zin/kv/put', {
59
244
  namespace: normalizeNamespace(settings.defaultNamespace),
60
245
  key,
61
246
  value,
62
247
  ttlSeconds: ttl,
63
248
  });
64
- },
65
- async delete(key) {
249
+ }
250
+ catch (error) {
251
+ if (!hasCloudflareApiCreds())
252
+ throw error;
253
+ Logger.warn('KV remote proxy PUT failed; falling back to Cloudflare KV API', {
254
+ error: error instanceof Error ? error.message : String(error),
255
+ });
256
+ await cf.putJson(key, value, ttl);
257
+ }
258
+ },
259
+ async delete(key) {
260
+ const settings = getSettings();
261
+ if (!hasProxySigningCreds(settings) && hasCloudflareApiCreds()) {
262
+ await cf.deleteKey(key);
263
+ return;
264
+ }
265
+ try {
266
+ const remote = createRemoteSettings(settings);
66
267
  await RemoteSignedJson.request(remote, '/zin/kv/delete', {
67
268
  namespace: normalizeNamespace(settings.defaultNamespace),
68
269
  key,
69
270
  });
70
- },
71
- async clear() {
72
- // KV proxy does not implement clear() (and KV itself does not support full namespace wipe efficiently).
73
- Logger.warn('KV remote clear() is not implemented.');
74
- await Promise.resolve();
75
- },
76
- async has(key) {
77
- const value = await this.get(key);
78
- return value !== null;
79
- },
80
- };
81
- },
271
+ }
272
+ catch (error) {
273
+ if (!hasCloudflareApiCreds())
274
+ throw error;
275
+ Logger.warn('KV remote proxy DELETE failed; falling back to Cloudflare KV API', {
276
+ error: error instanceof Error ? error.message : String(error),
277
+ });
278
+ await cf.deleteKey(key);
279
+ }
280
+ },
281
+ async clear() {
282
+ Logger.warn('KV remote clear() is not implemented.');
283
+ await Promise.resolve();
284
+ },
285
+ async has(key) {
286
+ if (!hasCloudflareApiCreds())
287
+ return (await this.get(key)) !== null;
288
+ const settings = getSettings();
289
+ if (!hasProxySigningCreds(settings))
290
+ return (await cf.getJson(key)) !== null;
291
+ return (await this.get(key)) !== null;
292
+ },
293
+ };
294
+ };
295
+ export const KVRemoteDriver = Object.freeze({
296
+ create: createKvRemoteDriver,
82
297
  });
83
298
  export default KVRemoteDriver;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/MemoryDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA0EtD;;GAEG;AACH,eAAO,MAAM,YAAY;kBAtEN,WAAW;EAwE5B,CAAC"}
1
+ {"version":3,"file":"MemoryDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/MemoryDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAuFtD;;GAEG;AACH,eAAO,MAAM,YAAY;kBAxEN,WAAW;EA0E5B,CAAC"}
@@ -2,6 +2,12 @@
2
2
  * Memory Cache Driver
3
3
  * Simple in-memory storage for local development
4
4
  */
5
+ function isUnrefableTimer(value) {
6
+ return (typeof value === 'object' &&
7
+ value !== null &&
8
+ 'unref' in value &&
9
+ typeof value.unref === 'function');
10
+ }
5
11
  /**
6
12
  * Memory Cache Driver
7
13
  * Simple in-memory storage for local development
@@ -18,8 +24,10 @@ const create = () => {
18
24
  }
19
25
  }
20
26
  }, 60_000); // 60 seconds
21
- // Unref so it doesn't keep process alive
22
- cleanupInterval.unref();
27
+ // Unref so it doesn't keep process alive (Node.js only)
28
+ if (isUnrefableTimer(cleanupInterval)) {
29
+ cleanupInterval.unref();
30
+ }
23
31
  return {
24
32
  async get(key) {
25
33
  await Promise.resolve();
@@ -1 +1 @@
1
- {"version":3,"file":"RedisDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/RedisDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAoFtD;;GAEG;AACH,eAAO,MAAM,WAAW;kBA9EL,WAAW;EAgF5B,CAAC"}
1
+ {"version":3,"file":"RedisDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/RedisDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAkXtD;;GAEG;AACH,eAAO,MAAM,WAAW;kBAXL,WAAW;EAa5B,CAAC"}