@zintrust/core 0.1.42 → 0.1.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- 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 +12 -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/CLI.d.ts.map +1 -1
- package/src/cli/CLI.js +6 -0
- package/src/cli/commands/DeployCommand.d.ts.map +1 -1
- package/src/cli/commands/DeployCommand.js +12 -1
- package/src/cli/commands/DeployContainersProxyCommand.d.ts +5 -0
- package/src/cli/commands/DeployContainersProxyCommand.d.ts.map +1 -0
- package/src/cli/commands/DeployContainersProxyCommand.js +45 -0
- package/src/cli/commands/DockerCommand.d.ts +5 -0
- package/src/cli/commands/DockerCommand.d.ts.map +1 -0
- package/src/cli/commands/DockerCommand.js +74 -0
- package/src/cli/commands/InitContainerCommand.js +10 -10
- package/src/cli/commands/InitContainersProxyCommand.d.ts +5 -0
- package/src/cli/commands/InitContainersProxyCommand.d.ts.map +1 -0
- package/src/cli/commands/InitContainersProxyCommand.js +159 -0
- package/src/cli/commands/NewCommand.d.ts.map +1 -1
- package/src/cli/commands/NewCommand.js +33 -0
- package/src/cli/commands/PutCommand.d.ts.map +1 -1
- package/src/cli/commands/PutCommand.js +15 -5
- package/src/cli/commands/StartCommand.d.ts.map +1 -1
- package/src/cli/commands/StartCommand.js +43 -4
- 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
|
@@ -2,40 +2,235 @@
|
|
|
2
2
|
* Redis Cache Driver
|
|
3
3
|
* Zero-dependency implementation using Node.js native net module
|
|
4
4
|
*/
|
|
5
|
+
import { Cloudflare } from '../../config/cloudflare.js';
|
|
5
6
|
import { Env } from '../../config/env.js';
|
|
6
7
|
import { Logger } from '../../config/logger.js';
|
|
8
|
+
import { createRedisConnection } from '../../config/workers.js';
|
|
9
|
+
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
7
10
|
import * as net from '../../node-singletons/net.js';
|
|
8
11
|
import { RedisKeys } from '../../tools/redis/RedisKeyManager.js';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
const listenPreferOnce = (socket, event, cb) => {
|
|
13
|
+
if (typeof socket.once === 'function') {
|
|
14
|
+
socket.once(event, cb);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
socket.on?.(event, cb);
|
|
18
|
+
};
|
|
19
|
+
const listenPreferOn = (socket, event, cb) => {
|
|
20
|
+
if (typeof socket.on === 'function') {
|
|
21
|
+
socket.on(event, cb);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
socket.once?.(event, cb);
|
|
25
|
+
};
|
|
26
|
+
const hasToString = (value) => {
|
|
27
|
+
if (value === null || value === undefined)
|
|
28
|
+
return false;
|
|
29
|
+
return typeof value.toString === 'function';
|
|
30
|
+
};
|
|
31
|
+
const createIoredisClient = (params) => {
|
|
32
|
+
if (String(Env.NODE_ENV ?? '').startsWith('test'))
|
|
33
|
+
return null;
|
|
34
|
+
try {
|
|
35
|
+
const db = Env.getInt('REDIS_CACHE_DB', Env.getInt('REDIS_QUEUE_DB', 0));
|
|
36
|
+
const client = createRedisConnection({
|
|
37
|
+
host: Env.REDIS_HOST,
|
|
38
|
+
port: Env.REDIS_PORT,
|
|
39
|
+
password: Env.get('REDIS_PASSWORD', ''),
|
|
40
|
+
db,
|
|
41
|
+
}, 3);
|
|
42
|
+
return client !== null && typeof client.get === 'function' ? client : null;
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
46
|
+
if (params.isWorkersRuntime || params.wantsProxy) {
|
|
47
|
+
Logger.error('Redis cache driver initialization failed', { error: msg });
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
Logger.warn('Redis cache driver falling back to TCP socket implementation', {
|
|
51
|
+
error: msg,
|
|
52
|
+
});
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const createCacheDriverFromIoredisClient = (client) => ({
|
|
57
|
+
async get(key) {
|
|
58
|
+
try {
|
|
59
|
+
const prefixedKey = RedisKeys.createCacheKey(key);
|
|
60
|
+
const value = await client.get(prefixedKey);
|
|
61
|
+
if (value === null)
|
|
62
|
+
return null;
|
|
63
|
+
return JSON.parse(value);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
Logger.error('Redis GET failed', error);
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
async set(key, value, ttl) {
|
|
71
|
+
try {
|
|
72
|
+
const prefixedKey = RedisKeys.createCacheKey(key);
|
|
73
|
+
const jsonValue = JSON.stringify(value);
|
|
74
|
+
if (ttl === undefined) {
|
|
75
|
+
await client.set(prefixedKey, jsonValue);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
await client.set(prefixedKey, jsonValue, 'EX', ttl);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
Logger.error('Redis SET failed', error);
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
async delete(key) {
|
|
85
|
+
try {
|
|
86
|
+
const prefixedKey = RedisKeys.createCacheKey(key);
|
|
87
|
+
await client.del(prefixedKey);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
Logger.error('Redis DEL failed', error);
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
async clear() {
|
|
94
|
+
try {
|
|
95
|
+
await client.flushdb();
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
Logger.error('Redis FLUSHDB failed', error);
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
async has(key) {
|
|
102
|
+
try {
|
|
103
|
+
const prefixedKey = RedisKeys.createCacheKey(key);
|
|
104
|
+
const out = await client.exists(prefixedKey);
|
|
105
|
+
return out > 0;
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
Logger.error('Redis EXISTS failed', error);
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
const createIoredisCacheDriver = (params) => {
|
|
114
|
+
const client = createIoredisClient(params);
|
|
115
|
+
return client === null ? null : createCacheDriverFromIoredisClient(client);
|
|
116
|
+
};
|
|
117
|
+
const createTcpConnect = (params) => {
|
|
13
118
|
let client = null;
|
|
14
|
-
|
|
15
|
-
const port = Env.REDIS_PORT;
|
|
16
|
-
const connect = async () => {
|
|
119
|
+
return async () => {
|
|
17
120
|
if (client && !client.destroyed)
|
|
18
121
|
return client;
|
|
19
122
|
return new Promise((resolve, reject) => {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
123
|
+
const onTimeout = () => {
|
|
124
|
+
cleanup();
|
|
125
|
+
try {
|
|
126
|
+
socket.destroy?.();
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
/* ignore */
|
|
130
|
+
}
|
|
131
|
+
reject(ErrorFactory.createConnectionError('Redis connection timeout', {
|
|
132
|
+
host: params.host,
|
|
133
|
+
port: params.port,
|
|
134
|
+
timeoutMs: params.connectTimeoutMs,
|
|
135
|
+
}));
|
|
136
|
+
};
|
|
137
|
+
const onError = (err) => {
|
|
138
|
+
cleanup();
|
|
25
139
|
Logger.error(`Redis Connection Error: ${err.message}`);
|
|
26
140
|
reject(err);
|
|
27
|
-
}
|
|
141
|
+
};
|
|
142
|
+
const onErrorUnknown = (err) => {
|
|
143
|
+
if (err instanceof Error) {
|
|
144
|
+
onError(err);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
cleanup();
|
|
148
|
+
const msg = String(err);
|
|
149
|
+
Logger.error(`Redis Connection Error: ${msg}`);
|
|
150
|
+
reject(ErrorFactory.createConnectionError(`Redis Connection Error: ${msg}`, {
|
|
151
|
+
error: msg,
|
|
152
|
+
}));
|
|
153
|
+
};
|
|
154
|
+
const onConnect = () => {
|
|
155
|
+
cleanup();
|
|
156
|
+
client = socket;
|
|
157
|
+
resolve(socket);
|
|
158
|
+
};
|
|
159
|
+
const socket = net.connect(params.port, params.host, onConnect);
|
|
160
|
+
const anySocket = socket;
|
|
161
|
+
const cleanup = () => {
|
|
162
|
+
anySocket.setTimeout?.(0);
|
|
163
|
+
anySocket.removeListener?.('timeout', onTimeout);
|
|
164
|
+
anySocket.removeListener?.('error', onErrorUnknown);
|
|
165
|
+
};
|
|
166
|
+
anySocket.setTimeout?.(Math.max(1, params.connectTimeoutMs));
|
|
167
|
+
listenPreferOnce(anySocket, 'timeout', onTimeout);
|
|
168
|
+
listenPreferOn(anySocket, 'error', onErrorUnknown);
|
|
28
169
|
});
|
|
29
170
|
};
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
171
|
+
};
|
|
172
|
+
const createTcpSendCommand = (params) => {
|
|
173
|
+
return async (command) => {
|
|
174
|
+
const socket = await params.connect();
|
|
175
|
+
const anySocket = socket;
|
|
176
|
+
return new Promise((resolve, reject) => {
|
|
177
|
+
let settled = false;
|
|
178
|
+
const onDataUnknown = (data) => {
|
|
179
|
+
if (typeof data === 'string') {
|
|
180
|
+
settleOk(data);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (hasToString(data)) {
|
|
184
|
+
settleOk(data.toString());
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
settleOk(String(data));
|
|
188
|
+
};
|
|
189
|
+
const onErrorUnknown = (err) => {
|
|
190
|
+
settleErr(err instanceof Error
|
|
191
|
+
? err
|
|
192
|
+
: ErrorFactory.createConnectionError('Redis socket error', {
|
|
193
|
+
error: String(err),
|
|
194
|
+
}));
|
|
195
|
+
};
|
|
196
|
+
const cleanup = () => {
|
|
197
|
+
anySocket.setTimeout?.(0);
|
|
198
|
+
anySocket.removeListener?.('data', onDataUnknown);
|
|
199
|
+
anySocket.removeListener?.('error', onErrorUnknown);
|
|
200
|
+
anySocket.removeListener?.('timeout', onTimeout);
|
|
201
|
+
};
|
|
202
|
+
const settleOk = (value) => {
|
|
203
|
+
if (settled)
|
|
204
|
+
return;
|
|
205
|
+
settled = true;
|
|
206
|
+
cleanup();
|
|
207
|
+
resolve(value);
|
|
208
|
+
};
|
|
209
|
+
const settleErr = (err) => {
|
|
210
|
+
if (settled)
|
|
211
|
+
return;
|
|
212
|
+
settled = true;
|
|
213
|
+
cleanup();
|
|
214
|
+
reject(err);
|
|
215
|
+
};
|
|
216
|
+
const onTimeout = () => settleErr(ErrorFactory.createConnectionError('Redis command timeout', {
|
|
217
|
+
timeoutMs: params.commandTimeoutMs,
|
|
218
|
+
}));
|
|
219
|
+
anySocket.setTimeout?.(Math.max(1, params.commandTimeoutMs));
|
|
220
|
+
listenPreferOnce(anySocket, 'data', onDataUnknown);
|
|
221
|
+
listenPreferOnce(anySocket, 'timeout', onTimeout);
|
|
222
|
+
listenPreferOn(anySocket, 'error', onErrorUnknown);
|
|
223
|
+
anySocket.write?.(command);
|
|
37
224
|
});
|
|
38
225
|
};
|
|
226
|
+
};
|
|
227
|
+
const createTcpCacheDriver = () => {
|
|
228
|
+
const host = Env.REDIS_HOST;
|
|
229
|
+
const port = Env.REDIS_PORT;
|
|
230
|
+
const connectTimeoutMs = Env.getInt('REDIS_CONNECT_TIMEOUT_MS', 5_000);
|
|
231
|
+
const commandTimeoutMs = Env.getInt('REDIS_COMMAND_TIMEOUT_MS', 5_000);
|
|
232
|
+
const connect = createTcpConnect({ host, port, connectTimeoutMs });
|
|
233
|
+
const sendCommand = createTcpSendCommand({ connect, commandTimeoutMs });
|
|
39
234
|
return {
|
|
40
235
|
async get(key) {
|
|
41
236
|
try {
|
|
@@ -43,7 +238,6 @@ const create = () => {
|
|
|
43
238
|
const response = await sendCommand(`GET ${prefixedKey}\r\n`);
|
|
44
239
|
if (response.startsWith('$-1'))
|
|
45
240
|
return null;
|
|
46
|
-
// Basic RESP parsing
|
|
47
241
|
const lines = response.split('\r\n');
|
|
48
242
|
const value = lines[1];
|
|
49
243
|
return JSON.parse(value);
|
|
@@ -54,28 +248,57 @@ const create = () => {
|
|
|
54
248
|
}
|
|
55
249
|
},
|
|
56
250
|
async set(key, value, ttl) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
251
|
+
try {
|
|
252
|
+
const prefixedKey = RedisKeys.createCacheKey(key);
|
|
253
|
+
const jsonValue = JSON.stringify(value);
|
|
254
|
+
const command = ttl === undefined
|
|
255
|
+
? `SET ${prefixedKey} ${jsonValue}\r\n`
|
|
256
|
+
: `SETEX ${prefixedKey} ${ttl} ${jsonValue}\r\n`;
|
|
257
|
+
await sendCommand(command);
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
Logger.error('Redis SET failed', error);
|
|
62
261
|
}
|
|
63
|
-
await sendCommand(command);
|
|
64
262
|
},
|
|
65
263
|
async delete(key) {
|
|
66
|
-
|
|
67
|
-
|
|
264
|
+
try {
|
|
265
|
+
const prefixedKey = RedisKeys.createCacheKey(key);
|
|
266
|
+
await sendCommand(`DEL ${prefixedKey}\r\n`);
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
Logger.error('Redis DEL failed', error);
|
|
270
|
+
}
|
|
68
271
|
},
|
|
69
272
|
async clear() {
|
|
70
|
-
|
|
273
|
+
try {
|
|
274
|
+
await sendCommand(`FLUSHDB\r\n`);
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
Logger.error('Redis FLUSHDB failed', error);
|
|
278
|
+
}
|
|
71
279
|
},
|
|
72
280
|
async has(key) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
281
|
+
try {
|
|
282
|
+
const prefixedKey = RedisKeys.createCacheKey(key);
|
|
283
|
+
const response = await sendCommand(`EXISTS ${prefixedKey}\r\n`);
|
|
284
|
+
return response.includes(':1');
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
Logger.error('Redis EXISTS failed', error);
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
76
290
|
},
|
|
77
291
|
};
|
|
78
292
|
};
|
|
293
|
+
/**
|
|
294
|
+
* Create a new Redis driver instance
|
|
295
|
+
*/
|
|
296
|
+
const create = () => {
|
|
297
|
+
const isWorkersRuntime = Cloudflare.getWorkersEnv() !== null;
|
|
298
|
+
const wantsProxy = Env.USE_REDIS_PROXY === true || (Env.get('REDIS_PROXY_URL', '') || '').trim() !== '';
|
|
299
|
+
const ioredisDriver = createIoredisCacheDriver({ isWorkersRuntime, wantsProxy });
|
|
300
|
+
return ioredisDriver ?? createTcpCacheDriver();
|
|
301
|
+
};
|
|
79
302
|
/**
|
|
80
303
|
* RedisDriver namespace - sealed for immutability
|
|
81
304
|
*/
|
package/src/cli/CLI.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CLI.d.ts","sourceRoot":"","sources":["../../../src/cli/CLI.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"CLI.d.ts","sourceRoot":"","sources":["../../../src/cli/CLI.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,WAAW,IAAI;IACnB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,UAAU,IAAI,OAAO,CAAC;CACvB;AA0PD;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG;cACJ,IAAI;EAed,CAAC"}
|
package/src/cli/CLI.js
CHANGED
|
@@ -14,10 +14,13 @@ import { DbSeedCommand } from './commands/DbSeedCommand.js';
|
|
|
14
14
|
import { DebugCommand } from './commands/DebugCommand.js';
|
|
15
15
|
import { DeployCommand } from './commands/DeployCommand.js';
|
|
16
16
|
import { DeployContainerProxiesCommand } from './commands/DeployContainerProxiesCommand.js';
|
|
17
|
+
import { DeployContainersProxyCommand } from './commands/DeployContainersProxyCommand.js';
|
|
17
18
|
import { DeployContainerWorkersCommand } from './commands/DeployContainerWorkersCommand.js';
|
|
19
|
+
import { DockerCommand } from './commands/DockerCommand.js';
|
|
18
20
|
import { DoctorArchitectureCommand } from './commands/DoctorArchitectureCommand.js';
|
|
19
21
|
import { FixCommand } from './commands/FixCommand.js';
|
|
20
22
|
import { InitContainerCommand } from './commands/InitContainerCommand.js';
|
|
23
|
+
import { InitContainersProxyCommand } from './commands/InitContainersProxyCommand.js';
|
|
21
24
|
import { InitEcosystemCommand } from './commands/InitEcosystemCommand.js';
|
|
22
25
|
import { InitProducerCommand } from './commands/InitProducerCommand.js';
|
|
23
26
|
import { InitProxyCommand } from './commands/InitProxyCommand.js';
|
|
@@ -75,6 +78,7 @@ const buildCommandRegistry = () => {
|
|
|
75
78
|
UpgradeCommand.create(),
|
|
76
79
|
PrepareCommand,
|
|
77
80
|
InitContainerCommand.create(),
|
|
81
|
+
InitContainersProxyCommand.create(),
|
|
78
82
|
InitProxyCommand.create(),
|
|
79
83
|
InitProducerCommand.create(),
|
|
80
84
|
InitEcosystemCommand.create(),
|
|
@@ -84,6 +88,7 @@ const buildCommandRegistry = () => {
|
|
|
84
88
|
CreateMigrationCommand.create(),
|
|
85
89
|
AddMigrationCommand.create(),
|
|
86
90
|
StartCommand.create(),
|
|
91
|
+
DockerCommand.create(),
|
|
87
92
|
QueueCommand.create(),
|
|
88
93
|
QueueRecoveryCommand.create(),
|
|
89
94
|
ScheduleListCommand.create(),
|
|
@@ -106,6 +111,7 @@ const buildCommandRegistry = () => {
|
|
|
106
111
|
PublishCommand.create(),
|
|
107
112
|
PutCommand.create(),
|
|
108
113
|
DeployCommand.create(),
|
|
114
|
+
DeployContainersProxyCommand.create(),
|
|
109
115
|
DeployContainerWorkersCommand.create(),
|
|
110
116
|
DeployContainerProxiesCommand.create(),
|
|
111
117
|
QACommand(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeployCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/DeployCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"DeployCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/DeployCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAyIrE;;;GAGG;AACH,eAAO,MAAM,aAAa;IACxB;;OAEG;cACO,YAAY;EAGtB,CAAC"}
|
|
@@ -59,10 +59,20 @@ const runDeploy = async (target, options) => {
|
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
61
61
|
const environment = options.env ?? target ?? 'worker';
|
|
62
|
+
const config = typeof options.config === 'string' ? options.config.trim() : '';
|
|
63
|
+
if (config.length > 0) {
|
|
64
|
+
const full = join(process.cwd(), config);
|
|
65
|
+
if (existsSync(full)) {
|
|
66
|
+
// ok
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
throw ErrorFactory.createCliError(`Wrangler config not found: ${config}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
62
72
|
Logger.info(`Deploying to Cloudflare environment: ${environment}`);
|
|
63
73
|
const exitCode = await SpawnUtil.spawnAndWait({
|
|
64
74
|
command: 'wrangler',
|
|
65
|
-
args: ['deploy', '--env', environment],
|
|
75
|
+
args: ['deploy', ...(config.length > 0 ? ['--config', config] : []), '--env', environment],
|
|
66
76
|
});
|
|
67
77
|
if (exitCode !== 0) {
|
|
68
78
|
process.exit(exitCode);
|
|
@@ -76,6 +86,7 @@ const createDeployCommand = () => {
|
|
|
76
86
|
command
|
|
77
87
|
.argument('[target]', 'Deployment target (worker, d1-proxy, kv-proxy, production, cw, cp)', 'worker')
|
|
78
88
|
.option('-e, --env <env>', 'Wrangler environment (overrides target)');
|
|
89
|
+
command.option('-c, --config <path>', 'Wrangler config file (e.g. wrangler.containers-proxy.jsonc)');
|
|
79
90
|
},
|
|
80
91
|
execute: async (options) => {
|
|
81
92
|
// Note: BaseCommand.create sets up action handler that calls execute(options).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeployContainersProxyCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/DeployContainersProxyCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA2CrE,eAAO,MAAM,4BAA4B;cAC7B,YAAY;EAatB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { BaseCommand } from '../BaseCommand.js';
|
|
2
|
+
import { SpawnUtil } from '../utils/spawn.js';
|
|
3
|
+
import { Logger } from '../../config/logger.js';
|
|
4
|
+
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
5
|
+
import { existsSync } from '../../node-singletons/fs.js';
|
|
6
|
+
import { join } from '../../node-singletons/path.js';
|
|
7
|
+
const DEFAULT_CONFIG = 'wrangler.containers-proxy.jsonc';
|
|
8
|
+
const resolveConfig = (cwd, raw) => {
|
|
9
|
+
const normalized = typeof raw === 'string' ? raw.trim() : '';
|
|
10
|
+
const candidate = normalized.length > 0 ? normalized : DEFAULT_CONFIG;
|
|
11
|
+
const full = join(cwd, candidate);
|
|
12
|
+
if (existsSync(full))
|
|
13
|
+
return candidate;
|
|
14
|
+
throw ErrorFactory.createCliError(`Wrangler config not found: ${candidate}`);
|
|
15
|
+
};
|
|
16
|
+
const resolveEnv = (raw) => {
|
|
17
|
+
const normalized = typeof raw === 'string' ? raw.trim() : '';
|
|
18
|
+
return normalized.length > 0 ? normalized : 'production';
|
|
19
|
+
};
|
|
20
|
+
const execute = async (options) => {
|
|
21
|
+
const cwd = process.cwd();
|
|
22
|
+
const config = resolveConfig(cwd, options.config);
|
|
23
|
+
const env = resolveEnv(options.env);
|
|
24
|
+
Logger.info(`Deploying Containers proxy via Wrangler (env=${env})...`);
|
|
25
|
+
const exitCode = await SpawnUtil.spawnAndWait({
|
|
26
|
+
command: 'wrangler',
|
|
27
|
+
args: ['deploy', '--config', config, '--env', env],
|
|
28
|
+
env: process.env,
|
|
29
|
+
});
|
|
30
|
+
process.exit(exitCode);
|
|
31
|
+
};
|
|
32
|
+
export const DeployContainersProxyCommand = Object.freeze({
|
|
33
|
+
create() {
|
|
34
|
+
return BaseCommand.create({
|
|
35
|
+
name: 'deploy:ccp',
|
|
36
|
+
aliases: ['deploy:containers-proxy', 'deploy:cf-containers-proxy', 'd:ccp', 'ccp:deploy'],
|
|
37
|
+
description: 'Deploy Cloudflare Containers proxy Worker (wrangler.containers-proxy.jsonc)',
|
|
38
|
+
addOptions: (command) => {
|
|
39
|
+
command.option('-e, --env <name>', 'Wrangler environment name', 'production');
|
|
40
|
+
command.option('-c, --config <path>', 'Wrangler config file', DEFAULT_CONFIG);
|
|
41
|
+
},
|
|
42
|
+
execute: async (options) => execute(options),
|
|
43
|
+
});
|
|
44
|
+
},
|
|
45
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DockerCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/DockerCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA0ErE,eAAO,MAAM,aAAa;cACd,YAAY;EAiBtB,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { BaseCommand } from '../BaseCommand.js';
|
|
2
|
+
import { SpawnUtil } from '../utils/spawn.js';
|
|
3
|
+
import { Logger } from '../../config/logger.js';
|
|
4
|
+
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
5
|
+
import { existsSync } from '../../node-singletons/fs.js';
|
|
6
|
+
import { join } from '../../node-singletons/path.js';
|
|
7
|
+
const resolveDefaultWranglerConfig = (cwd) => {
|
|
8
|
+
const candidates = [
|
|
9
|
+
'wrangler.containers-proxy.jsonc',
|
|
10
|
+
'wrangler.containers-proxy.json',
|
|
11
|
+
'wrangler.containers-proxy.toml',
|
|
12
|
+
'wrangler.jsonc',
|
|
13
|
+
'wrangler.json',
|
|
14
|
+
'wrangler.toml',
|
|
15
|
+
];
|
|
16
|
+
for (const candidate of candidates) {
|
|
17
|
+
const full = join(cwd, candidate);
|
|
18
|
+
if (existsSync(full))
|
|
19
|
+
return candidate;
|
|
20
|
+
}
|
|
21
|
+
return undefined;
|
|
22
|
+
};
|
|
23
|
+
const resolvePort = (raw) => {
|
|
24
|
+
const value = typeof raw === 'string' ? raw.trim() : '';
|
|
25
|
+
if (value === '')
|
|
26
|
+
return undefined;
|
|
27
|
+
const parsed = Number.parseInt(value, 10);
|
|
28
|
+
if (!Number.isFinite(parsed) || parsed <= 0 || parsed >= 65536) {
|
|
29
|
+
throw ErrorFactory.createCliError(`Error: Invalid --port '${value}'. Expected 1-65535.`);
|
|
30
|
+
}
|
|
31
|
+
return String(parsed);
|
|
32
|
+
};
|
|
33
|
+
const resolveWranglerConfig = (cwd, options) => {
|
|
34
|
+
const fromCli = typeof options.wranglerConfig === 'string' ? options.wranglerConfig.trim() : '';
|
|
35
|
+
if (fromCli.length > 0) {
|
|
36
|
+
const full = join(cwd, fromCli);
|
|
37
|
+
if (existsSync(full))
|
|
38
|
+
return fromCli;
|
|
39
|
+
throw ErrorFactory.createCliError(`Wrangler config not found: ${fromCli}`);
|
|
40
|
+
}
|
|
41
|
+
const fallback = resolveDefaultWranglerConfig(cwd);
|
|
42
|
+
if (typeof fallback === 'string' && fallback.length > 0)
|
|
43
|
+
return fallback;
|
|
44
|
+
throw ErrorFactory.createCliError('Wrangler config not found. Expected wrangler.containers-proxy.jsonc (or wrangler.jsonc/toml).');
|
|
45
|
+
};
|
|
46
|
+
const executeDocker = async (options) => {
|
|
47
|
+
const cwd = process.cwd();
|
|
48
|
+
const config = resolveWranglerConfig(cwd, options);
|
|
49
|
+
const env = typeof options.env === 'string' ? options.env.trim() : '';
|
|
50
|
+
const port = resolvePort(options.port);
|
|
51
|
+
const args = ['dev', '--config', config];
|
|
52
|
+
if (typeof port === 'string' && port.length > 0)
|
|
53
|
+
args.push('--port', port);
|
|
54
|
+
if (env.length > 0)
|
|
55
|
+
args.push('--env', env);
|
|
56
|
+
Logger.info('Starting Wrangler dev (Containers/Docker-backed)...');
|
|
57
|
+
const exitCode = await SpawnUtil.spawnAndWait({ command: 'wrangler', args, env: process.env });
|
|
58
|
+
process.exit(exitCode);
|
|
59
|
+
};
|
|
60
|
+
export const DockerCommand = Object.freeze({
|
|
61
|
+
create() {
|
|
62
|
+
return BaseCommand.create({
|
|
63
|
+
name: 'docker',
|
|
64
|
+
aliases: ['dkr', 'dk'],
|
|
65
|
+
description: 'Run Wrangler dev using a Docker-backed Cloudflare Containers config',
|
|
66
|
+
addOptions: (command) => {
|
|
67
|
+
command.option('-c, --wrangler-config <path>', 'Wrangler config file (defaults if present)');
|
|
68
|
+
command.option('-e, --env <name>', 'Wrangler environment name');
|
|
69
|
+
command.option('-p, --port <number>', 'Port for wrangler dev');
|
|
70
|
+
},
|
|
71
|
+
execute: async (options) => executeDocker(options),
|
|
72
|
+
});
|
|
73
|
+
},
|
|
74
|
+
});
|
|
@@ -98,7 +98,7 @@ services:
|
|
|
98
98
|
`;
|
|
99
99
|
const DOCKERFILE_TEMPLATE = String.raw `# syntax=docker/dockerfile:1.6
|
|
100
100
|
# Build Stage - Compile TypeScript
|
|
101
|
-
FROM node:20-
|
|
101
|
+
FROM node:20-bookworm-slim AS builder
|
|
102
102
|
|
|
103
103
|
WORKDIR /app
|
|
104
104
|
|
|
@@ -106,12 +106,10 @@ WORKDIR /app
|
|
|
106
106
|
ENV NPM_CONFIG_CACHE=/root/.npm
|
|
107
107
|
ENV NPM_CONFIG_PREFER_OFFLINE=true
|
|
108
108
|
|
|
109
|
-
# Reuse npm cache across builds (requires BuildKit)
|
|
110
|
-
ENV NPM_CONFIG_CACHE=/root/.npm
|
|
111
|
-
ENV NPM_CONFIG_PREFER_OFFLINE=true
|
|
112
|
-
|
|
113
109
|
# Install build dependencies for native modules (better-sqlite3, bcrypt)
|
|
114
|
-
RUN
|
|
110
|
+
RUN apt-get update \
|
|
111
|
+
&& apt-get install -y --no-install-recommends python3 make g++ \
|
|
112
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
115
113
|
|
|
116
114
|
# Copy package files
|
|
117
115
|
COPY package.json package-lock.json ./
|
|
@@ -131,7 +129,7 @@ ARG BUILD_VARIANT=full
|
|
|
131
129
|
RUN --mount=type=cache,target=/root/.npm,id=zintrust-npm-cache,sharing=locked npm run build:dk
|
|
132
130
|
|
|
133
131
|
# Runtime Stage - Production image
|
|
134
|
-
FROM node:20-
|
|
132
|
+
FROM node:20-bookworm-slim AS runtime
|
|
135
133
|
|
|
136
134
|
WORKDIR /app
|
|
137
135
|
|
|
@@ -141,16 +139,18 @@ ENV PORT=7772
|
|
|
141
139
|
ENV HOST=0.0.0.0
|
|
142
140
|
|
|
143
141
|
# Create non-root user for security
|
|
144
|
-
RUN
|
|
142
|
+
RUN groupadd -g 1001 nodejs && useradd -u 1001 -g 1001 -m -s /usr/sbin/nologin nodejs
|
|
145
143
|
|
|
146
144
|
# Copy package files for production dependencies
|
|
147
145
|
COPY package.json package-lock.json ./
|
|
148
146
|
|
|
149
147
|
# Install only production dependencies (requires build tools for native modules)
|
|
150
148
|
RUN --mount=type=cache,target=/root/.npm,id=zintrust-npm-cache,sharing=locked \
|
|
151
|
-
|
|
149
|
+
apt-get update \
|
|
150
|
+
&& apt-get install -y --no-install-recommends python3 make g++ \
|
|
152
151
|
&& npm ci --omit=dev \
|
|
153
|
-
|
|
152
|
+
&& apt-get purge -y --auto-remove python3 make g++ \
|
|
153
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
154
154
|
|
|
155
155
|
# Copy compiled code from builder stage
|
|
156
156
|
COPY --from=builder /app/dist ./dist
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InitContainersProxyCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/InitContainersProxyCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA6JlE,eAAO,MAAM,0BAA0B;cAC3B,YAAY;EAuBtB,CAAC"}
|