@zintrust/core 0.1.42 → 0.1.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/Controllers/AuthController.d.ts +10 -0
- package/app/Controllers/AuthController.d.ts.map +1 -0
- package/app/Controllers/AuthController.js +201 -0
- package/app/Controllers/UserController.d.ts +9 -0
- package/app/Controllers/UserController.d.ts.map +1 -0
- package/app/Controllers/UserController.js +8 -0
- package/app/Controllers/UserQueryBuilderController.d.ts +16 -0
- package/app/Controllers/UserQueryBuilderController.d.ts.map +1 -0
- package/app/Controllers/UserQueryBuilderController.js +404 -0
- package/app/Middleware/ProfilerMiddleware.d.ts +12 -0
- package/app/Middleware/ProfilerMiddleware.d.ts.map +1 -0
- package/app/Middleware/ProfilerMiddleware.js +47 -0
- package/app/Middleware/index.d.ts +59 -0
- package/app/Middleware/index.d.ts.map +1 -0
- package/app/Middleware/index.js +215 -0
- package/app/Models/Post.d.ts +14 -0
- package/app/Models/Post.d.ts.map +1 -0
- package/app/Models/Post.js +27 -0
- package/app/Models/User.d.ts +14 -0
- package/app/Models/User.d.ts.map +1 -0
- package/app/Models/User.js +44 -0
- package/app/Schedules/JobTracking.d.ts +3 -0
- package/app/Schedules/JobTracking.d.ts.map +1 -0
- package/app/Schedules/JobTracking.js +13 -0
- package/app/Schedules/index.d.ts +2 -0
- package/app/Schedules/index.d.ts.map +1 -0
- package/app/Schedules/index.js +1 -0
- package/app/Toolkit/Broadcast/sendBroadcast.d.ts +6 -0
- package/app/Toolkit/Broadcast/sendBroadcast.d.ts.map +1 -0
- package/app/Toolkit/Broadcast/sendBroadcast.js +5 -0
- package/app/Toolkit/Mail/sendWelcomeEmail.d.ts +6 -0
- package/app/Toolkit/Mail/sendWelcomeEmail.d.ts.map +1 -0
- package/app/Toolkit/Mail/sendWelcomeEmail.js +20 -0
- package/app/Toolkit/Notification/sendSlackNotification.d.ts +8 -0
- package/app/Toolkit/Notification/sendSlackNotification.d.ts.map +1 -0
- package/app/Toolkit/Notification/sendSlackNotification.js +5 -0
- package/app/Toolkit/Notification/sendSms.d.ts +6 -0
- package/app/Toolkit/Notification/sendSms.d.ts.map +1 -0
- package/app/Toolkit/Notification/sendSms.js +5 -0
- package/app/Types/controller.d.ts +42 -0
- package/app/Types/controller.d.ts.map +1 -0
- package/app/Types/controller.js +1 -0
- package/config/broadcast.d.ts +38 -0
- package/config/broadcast.d.ts.map +1 -0
- package/config/broadcast.js +37 -0
- package/config/cache.d.ts +40 -0
- package/config/cache.d.ts.map +1 -0
- package/config/cache.js +39 -0
- package/config/database.d.ts +58 -0
- package/config/database.d.ts.map +1 -0
- package/config/database.js +65 -0
- package/config/mail.d.ts +51 -0
- package/config/mail.d.ts.map +1 -0
- package/config/mail.js +69 -0
- package/config/middleware.d.ts +11 -0
- package/config/middleware.d.ts.map +1 -0
- package/config/middleware.js +30 -0
- package/config/notification.d.ts +33 -0
- package/config/notification.d.ts.map +1 -0
- package/config/notification.js +33 -0
- package/config/queue.d.ts +55 -0
- package/config/queue.d.ts.map +1 -0
- package/config/queue.js +87 -0
- package/config/storage.d.ts +59 -0
- package/config/storage.d.ts.map +1 -0
- package/config/storage.js +59 -0
- package/config/workers.d.ts +54 -0
- package/config/workers.d.ts.map +1 -0
- package/config/workers.js +83 -0
- package/package.json +11 -5
- package/packages/cloudflare-d1-proxy/src/index.d.ts +48 -0
- package/packages/cloudflare-d1-proxy/src/index.d.ts.map +1 -0
- package/packages/cloudflare-d1-proxy/src/index.js +387 -0
- package/packages/cloudflare-kv-proxy/src/index.d.ts +44 -0
- package/packages/cloudflare-kv-proxy/src/index.d.ts.map +1 -0
- package/packages/cloudflare-kv-proxy/src/index.js +325 -0
- package/packages/queue-monitor/src/QueueMonitoringService.d.ts +35 -0
- package/packages/queue-monitor/src/QueueMonitoringService.d.ts.map +1 -0
- package/packages/queue-monitor/src/QueueMonitoringService.js +194 -0
- package/packages/queue-monitor/src/connection.d.ts +3 -0
- package/packages/queue-monitor/src/connection.d.ts.map +1 -0
- package/packages/queue-monitor/src/connection.js +1 -0
- package/packages/queue-monitor/src/dashboard-ui.d.ts +7 -0
- package/packages/queue-monitor/src/dashboard-ui.d.ts.map +1 -0
- package/packages/queue-monitor/src/dashboard-ui.js +997 -0
- package/packages/queue-monitor/src/driver.d.ts +15 -0
- package/packages/queue-monitor/src/driver.d.ts.map +1 -0
- package/packages/queue-monitor/src/driver.js +115 -0
- package/packages/queue-monitor/src/index.d.ts +71 -0
- package/packages/queue-monitor/src/index.d.ts.map +1 -0
- package/packages/queue-monitor/src/index.js +296 -0
- package/packages/queue-monitor/src/metrics.d.ts +27 -0
- package/packages/queue-monitor/src/metrics.d.ts.map +1 -0
- package/packages/queue-monitor/src/metrics.js +92 -0
- package/packages/queue-monitor/src/worker.d.ts +8 -0
- package/packages/queue-monitor/src/worker.d.ts.map +1 -0
- package/packages/queue-monitor/src/worker.js +35 -0
- package/packages/queue-redis/src/BullMQRedisQueue.d.ts +26 -0
- package/packages/queue-redis/src/BullMQRedisQueue.d.ts.map +1 -0
- package/packages/queue-redis/src/BullMQRedisQueue.js +463 -0
- package/packages/queue-redis/src/HttpQueueDriver.d.ts +18 -0
- package/packages/queue-redis/src/HttpQueueDriver.d.ts.map +1 -0
- package/packages/queue-redis/src/HttpQueueDriver.js +249 -0
- package/packages/queue-redis/src/QueueHttpGateway.d.ts +16 -0
- package/packages/queue-redis/src/QueueHttpGateway.d.ts.map +1 -0
- package/packages/queue-redis/src/QueueHttpGateway.js +217 -0
- package/packages/queue-redis/src/RedisPublishClient.d.ts +14 -0
- package/packages/queue-redis/src/RedisPublishClient.d.ts.map +1 -0
- package/packages/queue-redis/src/RedisPublishClient.js +251 -0
- package/packages/queue-redis/src/index.d.ts +12 -0
- package/packages/queue-redis/src/index.d.ts.map +1 -0
- package/packages/queue-redis/src/index.js +10 -0
- package/packages/queue-redis/src/register.d.ts +6 -0
- package/packages/queue-redis/src/register.d.ts.map +1 -0
- package/packages/queue-redis/src/register.js +21 -0
- package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.d.ts +11 -0
- package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.d.ts.map +1 -0
- package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.js +32 -0
- package/packages/workers/migrations/20260123180000_create_queue_jobs_table.d.ts +11 -0
- package/packages/workers/migrations/20260123180000_create_queue_jobs_table.d.ts.map +1 -0
- package/packages/workers/migrations/20260123180000_create_queue_jobs_table.js +46 -0
- package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.d.ts +7 -0
- package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.d.ts.map +1 -0
- package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.js +44 -0
- package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.d.ts +7 -0
- package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.d.ts.map +1 -0
- package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.js +104 -0
- package/packages/workers/src/AnomalyDetection.d.ts +107 -0
- package/packages/workers/src/AnomalyDetection.d.ts.map +1 -0
- package/packages/workers/src/AnomalyDetection.js +329 -0
- package/packages/workers/src/AutoScaler.d.ts +128 -0
- package/packages/workers/src/AutoScaler.d.ts.map +1 -0
- package/packages/workers/src/AutoScaler.js +425 -0
- package/packages/workers/src/BroadcastWorker.d.ts +24 -0
- package/packages/workers/src/BroadcastWorker.d.ts.map +1 -0
- package/packages/workers/src/BroadcastWorker.js +24 -0
- package/packages/workers/src/CanaryController.d.ts +104 -0
- package/packages/workers/src/CanaryController.d.ts.map +1 -0
- package/packages/workers/src/CanaryController.js +424 -0
- package/packages/workers/src/ChaosEngineering.d.ts +80 -0
- package/packages/workers/src/ChaosEngineering.d.ts.map +1 -0
- package/packages/workers/src/ChaosEngineering.js +229 -0
- package/packages/workers/src/CircuitBreaker.d.ts +107 -0
- package/packages/workers/src/CircuitBreaker.d.ts.map +1 -0
- package/packages/workers/src/CircuitBreaker.js +374 -0
- package/packages/workers/src/ClusterLock.d.ts +91 -0
- package/packages/workers/src/ClusterLock.d.ts.map +1 -0
- package/packages/workers/src/ClusterLock.js +397 -0
- package/packages/workers/src/ComplianceManager.d.ts +178 -0
- package/packages/workers/src/ComplianceManager.d.ts.map +1 -0
- package/packages/workers/src/ComplianceManager.js +556 -0
- package/packages/workers/src/DatacenterOrchestrator.d.ts +134 -0
- package/packages/workers/src/DatacenterOrchestrator.d.ts.map +1 -0
- package/packages/workers/src/DatacenterOrchestrator.js +404 -0
- package/packages/workers/src/DeadLetterQueue.d.ts +123 -0
- package/packages/workers/src/DeadLetterQueue.d.ts.map +1 -0
- package/packages/workers/src/DeadLetterQueue.js +544 -0
- package/packages/workers/src/HealthMonitor.d.ts +43 -0
- package/packages/workers/src/HealthMonitor.d.ts.map +1 -0
- package/packages/workers/src/HealthMonitor.js +312 -0
- package/packages/workers/src/MultiQueueWorker.d.ts +90 -0
- package/packages/workers/src/MultiQueueWorker.d.ts.map +1 -0
- package/packages/workers/src/MultiQueueWorker.js +282 -0
- package/packages/workers/src/NotificationWorker.d.ts +24 -0
- package/packages/workers/src/NotificationWorker.d.ts.map +1 -0
- package/packages/workers/src/NotificationWorker.js +23 -0
- package/packages/workers/src/Observability.d.ts +154 -0
- package/packages/workers/src/Observability.d.ts.map +1 -0
- package/packages/workers/src/Observability.js +538 -0
- package/packages/workers/src/PluginManager.d.ts +124 -0
- package/packages/workers/src/PluginManager.d.ts.map +1 -0
- package/packages/workers/src/PluginManager.js +392 -0
- package/packages/workers/src/PriorityQueue.d.ts +118 -0
- package/packages/workers/src/PriorityQueue.d.ts.map +1 -0
- package/packages/workers/src/PriorityQueue.js +276 -0
- package/packages/workers/src/ResourceMonitor.d.ts +165 -0
- package/packages/workers/src/ResourceMonitor.d.ts.map +1 -0
- package/packages/workers/src/ResourceMonitor.js +632 -0
- package/packages/workers/src/SLAMonitor.d.ts +111 -0
- package/packages/workers/src/SLAMonitor.d.ts.map +1 -0
- package/packages/workers/src/SLAMonitor.js +274 -0
- package/packages/workers/src/WorkerFactory.d.ts +218 -0
- package/packages/workers/src/WorkerFactory.d.ts.map +1 -0
- package/packages/workers/src/WorkerFactory.js +2253 -0
- package/packages/workers/src/WorkerInit.d.ts +86 -0
- package/packages/workers/src/WorkerInit.d.ts.map +1 -0
- package/packages/workers/src/WorkerInit.js +307 -0
- package/packages/workers/src/WorkerMetrics.d.ts +116 -0
- package/packages/workers/src/WorkerMetrics.d.ts.map +1 -0
- package/packages/workers/src/WorkerMetrics.js +570 -0
- package/packages/workers/src/WorkerRegistry.d.ts +152 -0
- package/packages/workers/src/WorkerRegistry.d.ts.map +1 -0
- package/packages/workers/src/WorkerRegistry.js +396 -0
- package/packages/workers/src/WorkerShutdown.d.ts +70 -0
- package/packages/workers/src/WorkerShutdown.d.ts.map +1 -0
- package/packages/workers/src/WorkerShutdown.js +185 -0
- package/packages/workers/src/WorkerVersioning.d.ts +108 -0
- package/packages/workers/src/WorkerVersioning.d.ts.map +1 -0
- package/packages/workers/src/WorkerVersioning.js +300 -0
- package/packages/workers/src/config/workerConfig.d.ts +5 -0
- package/packages/workers/src/config/workerConfig.d.ts.map +1 -0
- package/packages/workers/src/config/workerConfig.js +25 -0
- package/packages/workers/src/createQueueWorker.d.ts +26 -0
- package/packages/workers/src/createQueueWorker.d.ts.map +1 -0
- package/packages/workers/src/createQueueWorker.js +367 -0
- package/packages/workers/src/dashboard/index.d.ts +2 -0
- package/packages/workers/src/dashboard/index.d.ts.map +1 -0
- package/packages/workers/src/dashboard/index.js +1 -0
- package/packages/workers/src/dashboard/types.d.ts +123 -0
- package/packages/workers/src/dashboard/types.d.ts.map +1 -0
- package/packages/workers/src/dashboard/types.js +1 -0
- package/packages/workers/src/dashboard/workers-api.d.ts +5 -0
- package/packages/workers/src/dashboard/workers-api.d.ts.map +1 -0
- package/packages/workers/src/dashboard/workers-api.js +738 -0
- package/packages/workers/src/helper/index.d.ts +6 -0
- package/packages/workers/src/helper/index.d.ts.map +1 -0
- package/packages/workers/src/helper/index.js +10 -0
- package/packages/workers/src/http/WorkerApiController.d.ts +39 -0
- package/packages/workers/src/http/WorkerApiController.d.ts.map +1 -0
- package/packages/workers/src/http/WorkerApiController.js +313 -0
- package/packages/workers/src/http/WorkerController.d.ts +375 -0
- package/packages/workers/src/http/WorkerController.d.ts.map +1 -0
- package/packages/workers/src/http/WorkerController.js +1454 -0
- package/packages/workers/src/http/WorkerMonitoringService.d.ts +12 -0
- package/packages/workers/src/http/WorkerMonitoringService.d.ts.map +1 -0
- package/packages/workers/src/http/WorkerMonitoringService.js +89 -0
- package/packages/workers/src/http/middleware/CustomValidation.d.ts +93 -0
- package/packages/workers/src/http/middleware/CustomValidation.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/CustomValidation.js +270 -0
- package/packages/workers/src/http/middleware/DatacenterValidator.d.ts +4 -0
- package/packages/workers/src/http/middleware/DatacenterValidator.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/DatacenterValidator.js +94 -0
- package/packages/workers/src/http/middleware/EditWorkerValidation.d.ts +8 -0
- package/packages/workers/src/http/middleware/EditWorkerValidation.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/EditWorkerValidation.js +56 -0
- package/packages/workers/src/http/middleware/FeaturesValidator.d.ts +4 -0
- package/packages/workers/src/http/middleware/FeaturesValidator.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/FeaturesValidator.js +60 -0
- package/packages/workers/src/http/middleware/InfrastructureValidator.d.ts +32 -0
- package/packages/workers/src/http/middleware/InfrastructureValidator.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/InfrastructureValidator.js +226 -0
- package/packages/workers/src/http/middleware/OptionsValidator.d.ts +4 -0
- package/packages/workers/src/http/middleware/OptionsValidator.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/OptionsValidator.js +112 -0
- package/packages/workers/src/http/middleware/PayloadSanitizer.d.ts +8 -0
- package/packages/workers/src/http/middleware/PayloadSanitizer.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/PayloadSanitizer.js +42 -0
- package/packages/workers/src/http/middleware/ProcessorPathSanitizer.d.ts +4 -0
- package/packages/workers/src/http/middleware/ProcessorPathSanitizer.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/ProcessorPathSanitizer.js +140 -0
- package/packages/workers/src/http/middleware/QueueNameSanitizer.d.ts +4 -0
- package/packages/workers/src/http/middleware/QueueNameSanitizer.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/QueueNameSanitizer.js +45 -0
- package/packages/workers/src/http/middleware/ValidateDriver.d.ts +8 -0
- package/packages/workers/src/http/middleware/ValidateDriver.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/ValidateDriver.js +20 -0
- package/packages/workers/src/http/middleware/VersionSanitizer.d.ts +4 -0
- package/packages/workers/src/http/middleware/VersionSanitizer.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/VersionSanitizer.js +25 -0
- package/packages/workers/src/http/middleware/WorkerNameSanitizer.d.ts +4 -0
- package/packages/workers/src/http/middleware/WorkerNameSanitizer.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/WorkerNameSanitizer.js +46 -0
- package/packages/workers/src/http/middleware/WorkerValidationChain.d.ts +28 -0
- package/packages/workers/src/http/middleware/WorkerValidationChain.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/WorkerValidationChain.js +186 -0
- package/packages/workers/src/index.d.ts +47 -0
- package/packages/workers/src/index.d.ts.map +1 -0
- package/packages/workers/src/index.js +48 -0
- package/packages/workers/src/routes/workers.d.ts +13 -0
- package/packages/workers/src/routes/workers.d.ts.map +1 -0
- package/packages/workers/src/routes/workers.js +126 -0
- package/packages/workers/src/storage/WorkerStore.d.ts +52 -0
- package/packages/workers/src/storage/WorkerStore.d.ts.map +1 -0
- package/packages/workers/src/storage/WorkerStore.js +259 -0
- package/packages/workers/src/telemetry/api/TelemetryAPI.d.ts +47 -0
- package/packages/workers/src/telemetry/api/TelemetryAPI.d.ts.map +1 -0
- package/packages/workers/src/telemetry/api/TelemetryAPI.js +219 -0
- package/packages/workers/src/telemetry/api/TelemetryMonitoringService.d.ts +18 -0
- package/packages/workers/src/telemetry/api/TelemetryMonitoringService.d.ts.map +1 -0
- package/packages/workers/src/telemetry/api/TelemetryMonitoringService.js +140 -0
- package/packages/workers/src/telemetry/components/AlertPanel.d.ts +2 -0
- package/packages/workers/src/telemetry/components/AlertPanel.d.ts.map +1 -0
- package/packages/workers/src/telemetry/components/AlertPanel.js +13 -0
- package/packages/workers/src/telemetry/components/CostTracking.d.ts +2 -0
- package/packages/workers/src/telemetry/components/CostTracking.d.ts.map +1 -0
- package/packages/workers/src/telemetry/components/CostTracking.js +14 -0
- package/packages/workers/src/telemetry/components/ResourceUsageChart.d.ts +2 -0
- package/packages/workers/src/telemetry/components/ResourceUsageChart.d.ts.map +1 -0
- package/packages/workers/src/telemetry/components/ResourceUsageChart.js +11 -0
- package/packages/workers/src/telemetry/components/WorkerHealthChart.d.ts +2 -0
- package/packages/workers/src/telemetry/components/WorkerHealthChart.d.ts.map +1 -0
- package/packages/workers/src/telemetry/components/WorkerHealthChart.js +11 -0
- package/packages/workers/src/telemetry/index.d.ts +16 -0
- package/packages/workers/src/telemetry/index.d.ts.map +1 -0
- package/packages/workers/src/telemetry/index.js +60 -0
- package/packages/workers/src/telemetry/routes/dashboard.d.ts +7 -0
- package/packages/workers/src/telemetry/routes/dashboard.d.ts.map +1 -0
- package/packages/workers/src/telemetry/routes/dashboard.js +608 -0
- package/packages/workers/src/type.d.ts +77 -0
- package/packages/workers/src/type.d.ts.map +1 -0
- package/packages/workers/src/type.js +1 -0
- package/packages/workers/src/ui/router/EmbeddedAssets.d.ts +5 -0
- package/packages/workers/src/ui/router/EmbeddedAssets.d.ts.map +1 -0
- package/packages/workers/src/ui/router/EmbeddedAssets.js +13 -0
- package/packages/workers/src/ui/router/ui.d.ts +4 -0
- package/packages/workers/src/ui/router/ui.d.ts.map +1 -0
- package/packages/workers/src/ui/router/ui.js +208 -0
- package/packages/workers/src/ui/types/worker-ui.d.ts +230 -0
- package/packages/workers/src/ui/types/worker-ui.d.ts.map +1 -0
- package/packages/workers/src/ui/types/worker-ui.js +5 -0
- package/routes/api.d.ts +7 -0
- package/routes/api.d.ts.map +1 -0
- package/routes/api.js +129 -0
- package/routes/broadcast.d.ts +9 -0
- package/routes/broadcast.d.ts.map +1 -0
- package/routes/broadcast.js +27 -0
- package/routes/storage.d.ts +4 -0
- package/routes/storage.d.ts.map +1 -0
- package/routes/storage.js +35 -0
- package/src/cache/Cache.d.ts.map +1 -1
- package/src/cache/Cache.js +40 -8
- package/src/cache/drivers/KVRemoteDriver.d.ts +1 -1
- package/src/cache/drivers/KVRemoteDriver.d.ts.map +1 -1
- package/src/cache/drivers/KVRemoteDriver.js +259 -44
- package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
- package/src/cache/drivers/MemoryDriver.js +10 -2
- package/src/cache/drivers/RedisDriver.d.ts.map +1 -1
- package/src/cache/drivers/RedisDriver.js +256 -33
- package/src/cli/commands/InitContainerCommand.js +10 -10
- package/src/cli/commands/NewCommand.d.ts.map +1 -1
- package/src/cli/commands/NewCommand.js +33 -0
- package/src/cli/commands/StartCommand.d.ts.map +1 -1
- package/src/cli/commands/StartCommand.js +23 -1
- package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
- package/src/cli/scaffolding/ProjectScaffolder.js +65 -73
- package/src/cli/utils/DistPackager.d.ts.map +1 -1
- package/src/cli/utils/DistPackager.js +25 -0
- package/src/cli/utils/EnvFileLoader.d.ts +1 -0
- package/src/cli/utils/EnvFileLoader.d.ts.map +1 -1
- package/src/cli/utils/EnvFileLoader.js +14 -0
- package/src/common/RemoteSignedJson.d.ts.map +1 -1
- package/src/common/RemoteSignedJson.js +9 -2
- package/src/config/cache.js +1 -1
- package/src/config/env.d.ts +7 -0
- package/src/config/env.d.ts.map +1 -1
- package/src/config/env.js +8 -0
- package/src/config/queue.js +1 -1
- package/src/functions/cloudflare.d.ts.map +1 -1
- package/src/functions/cloudflare.js +4 -2
- package/src/index.js +3 -3
- package/src/middleware/JwtAuthMiddleware.d.ts.map +1 -1
- package/src/middleware/JwtAuthMiddleware.js +11 -5
- package/src/runtime/RuntimeAdapter.d.ts.map +1 -1
- package/src/runtime/RuntimeAdapter.js +30 -12
- package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
- package/src/runtime/adapters/CloudflareAdapter.js +15 -4
- package/src/scheduler/Schedule.js +1 -1
- package/src/scheduler/leader/SchedulerLeader.js +1 -1
- package/src/schedules/job-tracking-cleanup.js +1 -1
- package/src/security/TokenRevocation.d.ts +19 -2
- package/src/security/TokenRevocation.d.ts.map +1 -1
- package/src/security/TokenRevocation.js +558 -30
- package/src/templates/project/basic/app/Controllers/AuthController.ts.tpl +11 -3
- package/src/templates/project/basic/config/middleware.ts.tpl +23 -22
- package/src/templates/project/basic/wrangler.jsonc.tpl +28 -0
package/src/cache/Cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../../src/cache/Cache.ts"],"names":[],"mappings":"
|
|
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"}
|
package/src/cache/Cache.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
127
|
+
const prefixedKey = autoPrefixKey(key);
|
|
128
|
+
return getDriverInstance(name).get(prefixedKey);
|
|
100
129
|
};
|
|
101
130
|
const setInStore = async (key, value, ttl) => {
|
|
102
|
-
|
|
131
|
+
const prefixedKey = autoPrefixKey(key);
|
|
132
|
+
await getDriverInstance(name).set(prefixedKey, value, ttl);
|
|
103
133
|
};
|
|
104
134
|
const delFromStore = async (key) => {
|
|
105
|
-
|
|
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
|
-
|
|
142
|
+
const prefixedKey = autoPrefixKey(key);
|
|
143
|
+
return getDriverInstance(name).has(prefixedKey);
|
|
112
144
|
};
|
|
113
145
|
const getStoreDriver = () => {
|
|
114
146
|
return getDriverInstance(name);
|
|
@@ -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;
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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;
|
|
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
|
|
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;
|
|
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"}
|