@zintrust/core 0.1.0 → 0.1.2
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 +214 -0
- package/bin/zintrust.d.ts.map +1 -1
- package/bin/zintrust.js +18 -1
- package/package.json +4 -34
- package/public/index.html +535 -0
- package/src/boot/Application.d.ts.map +1 -1
- package/src/boot/Application.js +46 -3
- package/src/boot/Server.d.ts.map +1 -1
- package/src/boot/Server.js +3 -4
- package/src/boot/bootstrap.js +77 -6
- package/src/builder/BundleOptimizer.d.ts.map +1 -1
- package/src/builder/BundleOptimizer.js +25 -29
- package/src/cache/Cache.d.ts.map +1 -1
- package/src/cache/Cache.js +4 -2
- package/src/cache/drivers/KVDriver.d.ts.map +1 -1
- package/src/cache/drivers/KVDriver.js +8 -7
- package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
- package/src/cache/drivers/MemoryDriver.js +5 -0
- package/src/cache/drivers/RedisDriver.js +1 -1
- package/src/cli/BaseCommand.d.ts +2 -2
- package/src/cli/BaseCommand.d.ts.map +1 -1
- package/src/cli/BaseCommand.js +2 -1
- package/src/cli/CLI.d.ts.map +1 -1
- package/src/cli/CLI.js +22 -18
- package/src/cli/ErrorHandler.d.ts.map +1 -1
- package/src/cli/ErrorHandler.js +2 -4
- package/src/cli/commands/AddCommand.d.ts +81 -0
- package/src/cli/commands/AddCommand.d.ts.map +1 -1
- package/src/cli/commands/AddCommand.js +24 -5
- package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
- package/src/cli/commands/ConfigCommand.js +59 -25
- package/src/cli/commands/D1MigrateCommand.d.ts +4 -0
- package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
- package/src/cli/commands/D1MigrateCommand.js +6 -4
- package/src/cli/commands/FixCommand.d.ts.map +1 -1
- package/src/cli/commands/FixCommand.js +3 -15
- package/src/cli/commands/LogsCleanupCommand.d.ts +6 -0
- package/src/cli/commands/LogsCleanupCommand.d.ts.map +1 -0
- package/src/cli/commands/LogsCleanupCommand.js +20 -0
- package/src/cli/commands/LogsCommand.d.ts.map +1 -1
- package/src/cli/commands/LogsCommand.js +4 -6
- package/src/cli/commands/MakeMailTemplateCommand.d.ts +10 -0
- package/src/cli/commands/MakeMailTemplateCommand.d.ts.map +1 -0
- package/src/cli/commands/MakeMailTemplateCommand.js +74 -0
- package/src/cli/commands/MakeNotificationTemplateCommand.d.ts +10 -0
- package/src/cli/commands/MakeNotificationTemplateCommand.d.ts.map +1 -0
- package/src/cli/commands/MakeNotificationTemplateCommand.js +113 -0
- package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
- package/src/cli/commands/MigrateCommand.js +3 -3
- package/src/cli/commands/NewCommand.d.ts +4 -0
- package/src/cli/commands/NewCommand.d.ts.map +1 -1
- package/src/cli/commands/NewCommand.js +34 -19
- package/src/cli/commands/PluginCommand.d.ts.map +1 -1
- package/src/cli/commands/PluginCommand.js +8 -4
- package/src/cli/commands/PrepareCommand.d.ts.map +1 -1
- package/src/cli/commands/PrepareCommand.js +1 -1
- package/src/cli/commands/QACommand.d.ts.map +1 -1
- package/src/cli/commands/QACommand.js +16 -26
- package/src/cli/commands/SecretsCommand.d.ts +16 -0
- package/src/cli/commands/SecretsCommand.d.ts.map +1 -0
- package/src/cli/commands/SecretsCommand.js +91 -0
- package/src/cli/commands/StartCommand.d.ts.map +1 -1
- package/src/cli/commands/StartCommand.js +2 -2
- package/src/cli/commands/TemplatesCommand.d.ts +3 -0
- package/src/cli/commands/TemplatesCommand.d.ts.map +1 -0
- package/src/cli/commands/TemplatesCommand.js +65 -0
- package/src/cli/commands/index.d.ts +5 -0
- package/src/cli/commands/index.d.ts.map +1 -1
- package/src/cli/commands/index.js +5 -0
- package/src/cli/config/ConfigManager.js +1 -1
- package/src/cli/index.d.ts +2 -1
- package/src/cli/index.d.ts.map +1 -1
- package/src/cli/index.js +2 -1
- package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/ControllerGenerator.js +11 -10
- package/src/cli/scaffolding/FeatureScaffolder.js +4 -4
- package/src/cli/scaffolding/FileGenerator.js +1 -1
- package/src/cli/scaffolding/MigrationGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/MigrationGenerator.js +10 -9
- package/src/cli/scaffolding/ModelGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/ModelGenerator.js +11 -10
- package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
- package/src/cli/scaffolding/ProjectScaffolder.js +61 -11
- package/src/cli/scaffolding/ResponseFactoryGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/ResponseFactoryGenerator.js +2 -1
- package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/RouteGenerator.js +15 -14
- package/src/cli/scaffolding/SeederGenerator.js +1 -1
- package/src/cli/scaffolding/ServiceIntegrationTestGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/ServiceIntegrationTestGenerator.js +7 -6
- package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts +1 -1
- package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/ServiceRequestFactoryGenerator.js +2 -2
- package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
- package/src/cli/scaffolding/ServiceScaffolder.js +13 -12
- package/src/cli/scaffolding/TemplateEngine.d.ts +10 -3
- package/src/cli/scaffolding/TemplateEngine.d.ts.map +1 -1
- package/src/cli/scaffolding/TemplateEngine.js +15 -285
- package/src/cli/scaffolding/TemplateGenerator.d.ts +40 -0
- package/src/cli/scaffolding/TemplateGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/TemplateGenerator.js +172 -0
- package/src/cli/scaffolding/index.d.ts +1 -0
- package/src/cli/scaffolding/index.d.ts.map +1 -1
- package/src/cli/scaffolding/index.js +1 -0
- package/src/cli/utils/spawn.js +1 -1
- package/src/common/AwsSigV4.d.ts +41 -0
- package/src/common/AwsSigV4.d.ts.map +1 -0
- package/src/common/AwsSigV4.js +69 -0
- package/src/common/index.d.ts +39 -0
- package/src/common/index.d.ts.map +1 -1
- package/src/common/index.js +101 -8
- package/src/common/uuid.d.ts +3 -0
- package/src/common/uuid.d.ts.map +1 -0
- package/src/common/uuid.js +30 -0
- package/src/config/FileLogWriter.d.ts +22 -0
- package/src/config/FileLogWriter.d.ts.map +1 -0
- package/src/config/FileLogWriter.js +192 -0
- package/src/config/SecretsManager.d.ts.map +1 -1
- package/src/config/SecretsManager.js +26 -0
- package/src/config/StartupConfigValidator.d.ts +15 -0
- package/src/config/StartupConfigValidator.d.ts.map +1 -0
- package/src/config/StartupConfigValidator.js +86 -0
- package/src/config/app.d.ts +2 -1
- package/src/config/app.d.ts.map +1 -1
- package/src/config/app.js +65 -15
- package/src/config/broadcast.d.ts +47 -0
- package/src/config/broadcast.d.ts.map +1 -0
- package/src/config/broadcast.js +54 -0
- package/src/config/cache.d.ts +13 -17
- package/src/config/cache.d.ts.map +1 -1
- package/src/config/cache.js +9 -11
- package/src/config/cloudflare.d.ts +26 -0
- package/src/config/cloudflare.d.ts.map +1 -0
- package/src/config/cloudflare.js +38 -0
- package/src/config/env.d.ts +6 -0
- package/src/config/env.d.ts.map +1 -1
- package/src/config/env.js +6 -0
- package/src/config/index.d.ts +52 -28
- package/src/config/index.d.ts.map +1 -1
- package/src/config/index.js +3 -0
- package/src/config/logger.d.ts +2 -0
- package/src/config/logger.d.ts.map +1 -1
- package/src/config/logger.js +270 -11
- package/src/config/logging/HttpLogger.d.ts +23 -0
- package/src/config/logging/HttpLogger.d.ts.map +1 -0
- package/src/config/logging/HttpLogger.js +93 -0
- package/src/config/logging/KvLogger.d.ts +22 -0
- package/src/config/logging/KvLogger.d.ts.map +1 -0
- package/src/config/logging/KvLogger.js +143 -0
- package/src/config/logging/SlackLogger.d.ts +23 -0
- package/src/config/logging/SlackLogger.d.ts.map +1 -0
- package/src/config/logging/SlackLogger.js +119 -0
- package/src/config/mail.d.ts +81 -0
- package/src/config/mail.d.ts.map +1 -0
- package/src/config/mail.js +73 -0
- package/src/config/middleware.d.ts +8 -0
- package/src/config/middleware.d.ts.map +1 -0
- package/src/config/middleware.js +18 -0
- package/src/config/notification.d.ts +62 -0
- package/src/config/notification.d.ts.map +1 -0
- package/src/config/notification.js +43 -0
- package/src/config/security.d.ts.map +1 -1
- package/src/config/security.js +2 -2
- package/src/config/startup.d.ts +23 -0
- package/src/config/startup.d.ts.map +1 -0
- package/src/config/startup.js +15 -0
- package/src/config/storage.d.ts +21 -35
- package/src/config/storage.d.ts.map +1 -1
- package/src/config/storage.js +57 -37
- package/src/database/migrations/index.d.ts +1 -1
- package/src/database/migrations/index.d.ts.map +1 -1
- package/src/database/migrations/index.js +2 -1
- package/src/features/Queue.js +1 -25
- package/src/functions/lambda.d.ts.map +1 -1
- package/src/functions/lambda.js +6 -1
- package/src/health/RuntimeHealthProbes.d.ts +13 -0
- package/src/health/RuntimeHealthProbes.d.ts.map +1 -0
- package/src/health/RuntimeHealthProbes.js +62 -0
- package/src/health/StartupHealthChecks.d.ts +26 -0
- package/src/health/StartupHealthChecks.d.ts.map +1 -0
- package/src/health/StartupHealthChecks.js +124 -0
- package/src/http/ErrorResponse.d.ts +28 -0
- package/src/http/ErrorResponse.d.ts.map +1 -0
- package/src/http/ErrorResponse.js +42 -0
- package/src/http/Kernel.d.ts +5 -0
- package/src/http/Kernel.d.ts.map +1 -1
- package/src/http/Kernel.js +96 -30
- package/src/http/Request.d.ts +1 -1
- package/src/http/Request.d.ts.map +1 -1
- package/src/http/RequestContext.d.ts +20 -0
- package/src/http/RequestContext.d.ts.map +1 -0
- package/src/http/RequestContext.js +77 -0
- package/src/index.d.ts +9 -1
- package/src/index.d.ts.map +1 -1
- package/src/index.js +8 -2
- package/src/microservices/MicroserviceBootstrap.d.ts.map +1 -1
- package/src/microservices/MicroserviceBootstrap.js +6 -5
- package/src/microservices/MicroserviceManager.d.ts.map +1 -1
- package/src/microservices/MicroserviceManager.js +7 -5
- package/src/microservices/PostgresAdapter.d.ts.map +1 -1
- package/src/microservices/PostgresAdapter.js +7 -4
- package/src/microservices/ServiceBundler.d.ts.map +1 -1
- package/src/microservices/ServiceBundler.js +3 -1
- package/src/microservices/ServiceHealthMonitor.d.ts.map +1 -1
- package/src/microservices/ServiceHealthMonitor.js +7 -3
- package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
- package/src/middleware/CsrfMiddleware.js +2 -19
- package/src/middleware/ErrorHandlerMiddleware.d.ts +6 -0
- package/src/middleware/ErrorHandlerMiddleware.d.ts.map +1 -0
- package/src/middleware/ErrorHandlerMiddleware.js +33 -0
- package/src/middleware/LoggingMiddleware.d.ts +9 -0
- package/src/middleware/LoggingMiddleware.d.ts.map +1 -0
- package/src/middleware/LoggingMiddleware.js +36 -0
- package/src/middleware/index.d.ts +2 -0
- package/src/middleware/index.d.ts.map +1 -1
- package/src/middleware/index.js +2 -0
- package/src/node-singletons/async_hooks.d.ts +9 -0
- package/src/node-singletons/async_hooks.d.ts.map +1 -0
- package/src/node-singletons/async_hooks.js +8 -0
- package/src/node-singletons/fs.d.ts +2 -2
- package/src/node-singletons/fs.d.ts.map +1 -1
- package/src/node-singletons/fs.js +2 -2
- package/src/node-singletons/http.d.ts +1 -1
- package/src/node-singletons/http.d.ts.map +1 -1
- package/src/node-singletons/http.js +1 -1
- package/src/node-singletons/index.d.ts +4 -0
- package/src/node-singletons/index.d.ts.map +1 -1
- package/src/node-singletons/index.js +4 -0
- package/src/node-singletons/net.d.ts +9 -0
- package/src/node-singletons/net.d.ts.map +1 -0
- package/src/node-singletons/net.js +8 -0
- package/src/node-singletons/os.d.ts +3 -3
- package/src/node-singletons/os.d.ts.map +1 -1
- package/src/node-singletons/os.js +3 -4
- package/src/node-singletons/path.d.ts +3 -1
- package/src/node-singletons/path.d.ts.map +1 -1
- package/src/node-singletons/path.js +3 -1
- package/src/node-singletons/perf-hooks.d.ts +3 -1
- package/src/node-singletons/perf-hooks.d.ts.map +1 -1
- package/src/node-singletons/perf-hooks.js +3 -1
- package/src/node-singletons/process.d.ts +23 -0
- package/src/node-singletons/process.d.ts.map +1 -0
- package/src/node-singletons/process.js +8 -0
- package/src/node-singletons/readline.d.ts +3 -3
- package/src/node-singletons/readline.d.ts.map +1 -1
- package/src/node-singletons/readline.js +3 -4
- package/src/node-singletons/tls.d.ts +9 -0
- package/src/node-singletons/tls.d.ts.map +1 -0
- package/src/node-singletons/tls.js +8 -0
- package/src/node-singletons/url.d.ts +3 -1
- package/src/node-singletons/url.d.ts.map +1 -1
- package/src/node-singletons/url.js +3 -1
- package/src/orm/ConnectionManager.d.ts +6 -1
- package/src/orm/ConnectionManager.d.ts.map +1 -1
- package/src/orm/ConnectionManager.js +14 -0
- package/src/orm/DatabaseAdapter.d.ts +6 -0
- package/src/orm/DatabaseAdapter.d.ts.map +1 -1
- package/src/orm/QueryBuilder.d.ts +8 -1
- package/src/orm/QueryBuilder.d.ts.map +1 -1
- package/src/orm/QueryBuilder.js +188 -28
- package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
- package/src/orm/adapters/D1Adapter.js +18 -12
- package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -1
- package/src/orm/adapters/MySQLAdapter.js +4 -0
- package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/src/orm/adapters/PostgreSQLAdapter.js +4 -0
- package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -1
- package/src/orm/adapters/SQLServerAdapter.js +4 -0
- package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/src/orm/adapters/SQLiteAdapter.js +4 -0
- package/src/performance/Benchmark.d.ts.map +1 -1
- package/src/performance/Benchmark.js +3 -0
- package/src/performance/CodeGenerationBenchmark.js +3 -3
- package/src/performance/Optimizer.d.ts +1 -1
- package/src/performance/Optimizer.d.ts.map +1 -1
- package/src/performance/Optimizer.js +157 -80
- package/src/performance/establish-baseline.js +3 -3
- package/src/runtime/PluginManager.d.ts +3 -1
- package/src/runtime/PluginManager.d.ts.map +1 -1
- package/src/runtime/PluginManager.js +124 -28
- package/src/runtime/RuntimeDetector.d.ts.map +1 -1
- package/src/runtime/RuntimeDetector.js +47 -5
- package/src/runtime/adapters/CloudflareAdapter.js +2 -2
- package/src/runtime/adapters/DenoAdapter.js +9 -7
- package/src/runtime/adapters/FargateAdapter.d.ts.map +1 -1
- package/src/runtime/adapters/FargateAdapter.js +4 -3
- package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -1
- package/src/runtime/adapters/LambdaAdapter.js +4 -2
- package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -1
- package/src/runtime/adapters/NodeServerAdapter.js +7 -6
- package/src/scheduler/ScheduleRunner.d.ts +18 -0
- package/src/scheduler/ScheduleRunner.d.ts.map +1 -0
- package/src/scheduler/ScheduleRunner.js +155 -0
- package/src/scheduler/index.d.ts +3 -0
- package/src/scheduler/index.d.ts.map +1 -0
- package/src/scheduler/index.js +1 -0
- package/src/scheduler/types.d.ts +16 -0
- package/src/scheduler/types.d.ts.map +1 -0
- package/src/scheduler/types.js +4 -0
- package/src/schedules/index.d.ts +2 -0
- package/src/schedules/index.d.ts.map +1 -0
- package/src/schedules/index.js +1 -0
- package/src/schedules/log-cleanup.d.ts +4 -0
- package/src/schedules/log-cleanup.d.ts.map +1 -0
- package/src/schedules/log-cleanup.js +18 -0
- package/src/scripts/GenerateEnvArtifacts.d.ts +13 -0
- package/src/scripts/GenerateEnvArtifacts.d.ts.map +1 -0
- package/src/scripts/GenerateEnvArtifacts.js +171 -0
- package/src/scripts/TemplateSync.js +109 -70
- package/src/security/CsrfTokenManager.js +1 -1
- package/src/security/Encryptor.js +1 -1
- package/src/security/Hash.d.ts +14 -0
- package/src/security/Hash.d.ts.map +1 -0
- package/src/security/Hash.js +81 -0
- package/src/security/StartupSecretValidation.d.ts +20 -0
- package/src/security/StartupSecretValidation.d.ts.map +1 -0
- package/src/security/StartupSecretValidation.js +61 -0
- package/src/security/UrlValidator.d.ts +0 -1
- package/src/security/UrlValidator.d.ts.map +1 -1
- package/src/security/UrlValidator.js +1 -2
- package/src/security/Xss.d.ts +14 -0
- package/src/security/Xss.d.ts.map +1 -0
- package/src/security/Xss.js +57 -0
- package/src/security/XssProtection.d.ts.map +1 -1
- package/src/security/XssProtection.js +150 -16
- package/src/templates/adapters/MySQLAdapter.ts.tpl +5 -0
- package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +5 -0
- package/src/templates/adapters/SQLServerAdapter.ts.tpl +5 -0
- package/src/templates/adapters/SQLiteAdapter.ts.tpl +5 -0
- package/src/templates/features/Queue.ts.tpl +1 -29
- package/src/templates/project/basic/.env.example.tpl +48 -0
- package/src/templates/project/basic/.env.tpl +89 -94
- package/src/templates/project/basic/app/Toolkit/Broadcast/sendBroadcast.ts.tpl +7 -0
- package/src/templates/project/basic/app/Toolkit/Mail/sendWelcomeEmail.ts.tpl +30 -0
- package/src/templates/project/basic/app/Toolkit/Notification/sendSlackNotification.ts.tpl +10 -0
- package/src/templates/project/basic/app/Toolkit/Notification/sendSms.ts.tpl +13 -0
- package/src/templates/project/basic/config/FileLogWriter.ts.tpl +240 -0
- package/src/templates/project/basic/config/SecretsManager.ts.tpl +32 -1
- package/src/templates/project/basic/config/StartupConfigValidator.ts.tpl +151 -0
- package/src/templates/project/basic/config/app.ts.tpl +84 -15
- package/src/templates/project/basic/config/broadcast.ts.tpl +97 -0
- package/src/templates/project/basic/config/cache.ts.tpl +19 -23
- package/src/templates/project/basic/config/cloudflare.ts.tpl +57 -0
- package/src/templates/project/basic/config/env.ts.tpl +7 -1
- package/src/templates/project/basic/config/index.ts.tpl +3 -0
- package/src/templates/project/basic/config/logger.ts.tpl +301 -11
- package/src/templates/project/basic/config/logging/HttpLogger.ts.tpl +121 -0
- package/src/templates/project/basic/config/logging/KvLogger.ts.tpl +181 -0
- package/src/templates/project/basic/config/logging/SlackLogger.ts.tpl +156 -0
- package/src/templates/project/basic/config/mail.ts.tpl +141 -0
- package/src/templates/project/basic/config/middleware.ts.tpl +27 -0
- package/src/templates/project/basic/config/notification.ts.tpl +86 -0
- package/src/templates/project/basic/config/security.ts.tpl +4 -5
- package/src/templates/project/basic/config/startup.ts.tpl +27 -0
- package/src/templates/project/basic/config/storage.ts.tpl +77 -42
- package/src/templates/project/basic/database/migrations/index.ts.tpl +1 -1
- package/src/templates/project/basic/package.json.tpl +1 -1
- package/src/templates/project/basic/routes/api.ts.tpl +9 -37
- package/src/templates/project/basic/routes/broadcast.ts.tpl +32 -0
- package/src/templates/project/basic/routes/health.ts.tpl +134 -0
- package/src/templates/project/basic/src/index.ts.tpl +38 -11
- package/src/templates/project/basic/template.json +3 -0
- package/src/toolkit/Secrets/EnvFile.d.ts +15 -0
- package/src/toolkit/Secrets/EnvFile.d.ts.map +1 -0
- package/src/toolkit/Secrets/EnvFile.js +63 -0
- package/src/toolkit/Secrets/Manifest.d.ts +24 -0
- package/src/toolkit/Secrets/Manifest.d.ts.map +1 -0
- package/src/toolkit/Secrets/Manifest.js +71 -0
- package/src/toolkit/Secrets/index.d.ts +42 -0
- package/src/toolkit/Secrets/index.d.ts.map +1 -0
- package/src/toolkit/Secrets/index.js +119 -0
- package/src/toolkit/Secrets/providers/AwsSecretsManager.d.ts +14 -0
- package/src/toolkit/Secrets/providers/AwsSecretsManager.d.ts.map +1 -0
- package/src/toolkit/Secrets/providers/AwsSecretsManager.js +131 -0
- package/src/toolkit/Secrets/providers/CloudflareKv.d.ts +9 -0
- package/src/toolkit/Secrets/providers/CloudflareKv.d.ts.map +1 -0
- package/src/toolkit/Secrets/providers/CloudflareKv.js +73 -0
- package/src/tools/broadcast/Broadcast.d.ts +7 -0
- package/src/tools/broadcast/Broadcast.d.ts.map +1 -0
- package/src/tools/broadcast/Broadcast.js +37 -0
- package/src/tools/broadcast/drivers/BaseDriver.d.ts +5 -0
- package/src/tools/broadcast/drivers/BaseDriver.d.ts.map +1 -0
- package/src/tools/broadcast/drivers/BaseDriver.js +8 -0
- package/src/tools/broadcast/drivers/InMemory.d.ts +18 -0
- package/src/tools/broadcast/drivers/InMemory.d.ts.map +1 -0
- package/src/tools/broadcast/drivers/InMemory.js +16 -0
- package/src/tools/broadcast/drivers/Pusher.d.ts +8 -0
- package/src/tools/broadcast/drivers/Pusher.d.ts.map +1 -0
- package/src/tools/broadcast/drivers/Pusher.js +75 -0
- package/src/tools/broadcast/drivers/Redis.d.ts +19 -0
- package/src/tools/broadcast/drivers/Redis.d.ts.map +1 -0
- package/src/tools/broadcast/drivers/Redis.js +73 -0
- package/src/tools/broadcast/drivers/RedisHttps.d.ts +14 -0
- package/src/tools/broadcast/drivers/RedisHttps.d.ts.map +1 -0
- package/src/tools/broadcast/drivers/RedisHttps.js +50 -0
- package/src/tools/broadcast/index.d.ts +7 -0
- package/src/tools/broadcast/index.d.ts.map +1 -0
- package/src/tools/broadcast/index.js +6 -0
- package/src/tools/http/Http.d.ts +51 -0
- package/src/tools/http/Http.d.ts.map +1 -0
- package/src/tools/http/Http.js +171 -0
- package/src/tools/http/HttpResponse.d.ts +32 -0
- package/src/tools/http/HttpResponse.d.ts.map +1 -0
- package/src/tools/http/HttpResponse.js +80 -0
- package/src/tools/http/index.d.ts +15 -0
- package/src/tools/http/index.d.ts.map +1 -0
- package/src/tools/http/index.js +9 -0
- package/src/tools/mail/Mail.d.ts +22 -0
- package/src/tools/mail/Mail.d.ts.map +1 -0
- package/src/tools/mail/Mail.js +105 -0
- package/src/tools/mail/attachments.d.ts +23 -0
- package/src/tools/mail/attachments.d.ts.map +1 -0
- package/src/tools/mail/attachments.js +26 -0
- package/src/tools/mail/drivers/BaseDriver.d.ts +5 -0
- package/src/tools/mail/drivers/BaseDriver.d.ts.map +1 -0
- package/src/tools/mail/drivers/BaseDriver.js +8 -0
- package/src/tools/mail/drivers/Mailgun.d.ts +31 -0
- package/src/tools/mail/drivers/Mailgun.d.ts.map +1 -0
- package/src/tools/mail/drivers/Mailgun.js +81 -0
- package/src/tools/mail/drivers/SendGrid.d.ts +29 -0
- package/src/tools/mail/drivers/SendGrid.d.ts.map +1 -0
- package/src/tools/mail/drivers/SendGrid.js +57 -0
- package/src/tools/mail/drivers/Ses.d.ts +24 -0
- package/src/tools/mail/drivers/Ses.d.ts.map +1 -0
- package/src/tools/mail/drivers/Ses.js +116 -0
- package/src/tools/mail/drivers/Smtp.d.ts +38 -0
- package/src/tools/mail/drivers/Smtp.d.ts.map +1 -0
- package/src/tools/mail/drivers/Smtp.js +327 -0
- package/src/tools/mail/templates/index.d.ts +27 -0
- package/src/tools/mail/templates/index.d.ts.map +1 -0
- package/src/tools/mail/templates/index.js +35 -0
- package/src/tools/mail/templates/markdown/index.d.ts +17 -0
- package/src/tools/mail/templates/markdown/index.d.ts.map +1 -0
- package/src/tools/mail/templates/markdown/index.js +49 -0
- package/src/tools/mail/templates/markdown/registry.d.ts +15 -0
- package/src/tools/mail/templates/markdown/registry.d.ts.map +1 -0
- package/src/tools/mail/templates/markdown/registry.js +34 -0
- package/src/tools/mail/templates/markdown/validator.d.ts +16 -0
- package/src/tools/mail/templates/markdown/validator.d.ts.map +1 -0
- package/src/tools/mail/templates/markdown/validator.js +24 -0
- package/src/tools/mail/testing.d.ts +41 -0
- package/src/tools/mail/testing.d.ts.map +1 -0
- package/src/tools/mail/testing.js +34 -0
- package/src/tools/notification/Driver.d.ts +11 -0
- package/src/tools/notification/Driver.d.ts.map +1 -0
- package/src/tools/notification/Driver.js +1 -0
- package/src/tools/notification/Notification.d.ts +11 -0
- package/src/tools/notification/Notification.d.ts.map +1 -0
- package/src/tools/notification/Notification.js +11 -0
- package/src/tools/notification/Registry.d.ts +10 -0
- package/src/tools/notification/Registry.d.ts.map +1 -0
- package/src/tools/notification/Registry.js +22 -0
- package/src/tools/notification/Service.d.ts +6 -0
- package/src/tools/notification/Service.d.ts.map +1 -0
- package/src/tools/notification/Service.js +18 -0
- package/src/tools/notification/config.d.ts +5 -0
- package/src/tools/notification/config.d.ts.map +1 -0
- package/src/tools/notification/config.js +5 -0
- package/src/tools/notification/drivers/BaseDriver.d.ts +5 -0
- package/src/tools/notification/drivers/BaseDriver.d.ts.map +1 -0
- package/src/tools/notification/drivers/BaseDriver.js +8 -0
- package/src/tools/notification/drivers/Console.d.ts +7 -0
- package/src/tools/notification/drivers/Console.d.ts.map +1 -0
- package/src/tools/notification/drivers/Console.js +13 -0
- package/src/tools/notification/drivers/Slack.d.ts +16 -0
- package/src/tools/notification/drivers/Slack.d.ts.map +1 -0
- package/src/tools/notification/drivers/Slack.js +24 -0
- package/src/tools/notification/drivers/Termii.d.ts +10 -0
- package/src/tools/notification/drivers/Termii.d.ts.map +1 -0
- package/src/tools/notification/drivers/Termii.js +47 -0
- package/src/tools/notification/drivers/Twilio.d.ts +21 -0
- package/src/tools/notification/drivers/Twilio.d.ts.map +1 -0
- package/src/tools/notification/drivers/Twilio.js +48 -0
- package/src/tools/notification/templates/markdown/index.d.ts +15 -0
- package/src/tools/notification/templates/markdown/index.d.ts.map +1 -0
- package/src/tools/notification/templates/markdown/index.js +38 -0
- package/src/tools/notification/templates/markdown/registry.d.ts +15 -0
- package/src/tools/notification/templates/markdown/registry.d.ts.map +1 -0
- package/src/tools/notification/templates/markdown/registry.js +36 -0
- package/src/tools/notification/testing.d.ts +19 -0
- package/src/tools/notification/testing.d.ts.map +1 -0
- package/src/tools/notification/testing.js +35 -0
- package/src/tools/notification/testingHelpers.d.ts +12 -0
- package/src/tools/notification/testingHelpers.d.ts.map +1 -0
- package/src/tools/notification/testingHelpers.js +32 -0
- package/src/tools/queue/Queue.d.ts +23 -0
- package/src/tools/queue/Queue.d.ts.map +1 -0
- package/src/tools/queue/Queue.js +38 -0
- package/src/tools/queue/drivers/InMemory.d.ts +10 -0
- package/src/tools/queue/drivers/InMemory.d.ts.map +1 -0
- package/src/tools/queue/drivers/InMemory.js +55 -0
- package/src/tools/queue/drivers/Redis.d.ts +10 -0
- package/src/tools/queue/drivers/Redis.d.ts.map +1 -0
- package/src/tools/queue/drivers/Redis.js +91 -0
- package/src/tools/storage/drivers/Gcs.d.ts +20 -0
- package/src/tools/storage/drivers/Gcs.d.ts.map +1 -0
- package/src/tools/storage/drivers/Gcs.js +152 -0
- package/src/tools/storage/drivers/Local.d.ts +17 -0
- package/src/tools/storage/drivers/Local.d.ts.map +1 -0
- package/src/tools/storage/drivers/Local.js +63 -0
- package/src/tools/storage/drivers/R2.d.ts +20 -0
- package/src/tools/storage/drivers/R2.d.ts.map +1 -0
- package/src/tools/storage/drivers/R2.js +73 -0
- package/src/tools/storage/drivers/S3.d.ts +26 -0
- package/src/tools/storage/drivers/S3.d.ts.map +1 -0
- package/src/tools/storage/drivers/S3.js +258 -0
- package/src/tools/storage/index.d.ts +24 -0
- package/src/tools/storage/index.d.ts.map +1 -0
- package/src/tools/storage/index.js +112 -0
- package/src/tools/storage/testing.d.ts +23 -0
- package/src/tools/storage/testing.d.ts.map +1 -0
- package/src/tools/storage/testing.js +52 -0
- package/src/tools/templates/MarkdownRenderer.d.ts +14 -0
- package/src/tools/templates/MarkdownRenderer.d.ts.map +1 -0
- package/src/tools/templates/MarkdownRenderer.js +300 -0
- package/src/tools/templates/index.d.ts +5 -0
- package/src/tools/templates/index.d.ts.map +1 -0
- package/src/tools/templates/index.js +4 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Startup Configuration
|
|
3
|
+
*
|
|
4
|
+
* Startup-only controls (evaluated during Application.boot()).
|
|
5
|
+
*/
|
|
6
|
+
import { Env } from './env';
|
|
7
|
+
export const startupConfig = Object.freeze({
|
|
8
|
+
healthChecksEnabled: Env.getBool('STARTUP_HEALTH_CHECKS', true),
|
|
9
|
+
validateSecrets: Env.getBool('STARTUP_VALIDATE_SECRETS', true),
|
|
10
|
+
checkDatabase: Env.getBool('STARTUP_CHECK_DB', false),
|
|
11
|
+
checkCache: Env.getBool('STARTUP_CHECK_CACHE', false),
|
|
12
|
+
timeoutMs: Env.getInt('STARTUP_HEALTH_TIMEOUT_MS', 2500),
|
|
13
|
+
continueOnFailure: Env.getBool('STARTUP_CONTINUE_ON_FAILURE', false),
|
|
14
|
+
});
|
|
15
|
+
export default startupConfig;
|
package/src/config/storage.d.ts
CHANGED
|
@@ -14,14 +14,23 @@ type LocalStorageDriverConfig = {
|
|
|
14
14
|
};
|
|
15
15
|
type S3StorageDriverConfig = {
|
|
16
16
|
driver: 's3';
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
accessKeyId: EnvGetValue;
|
|
18
|
+
secretAccessKey: EnvGetValue;
|
|
19
19
|
region: typeof Env.AWS_REGION;
|
|
20
20
|
bucket: EnvGetValue;
|
|
21
21
|
url: EnvGetValue;
|
|
22
22
|
endpoint: EnvGetValue;
|
|
23
23
|
usePathStyleUrl: EnvGetBoolValue;
|
|
24
24
|
};
|
|
25
|
+
type R2StorageDriverConfig = {
|
|
26
|
+
driver: 'r2';
|
|
27
|
+
accessKeyId: EnvGetValue;
|
|
28
|
+
secretAccessKey: EnvGetValue;
|
|
29
|
+
region: EnvGetValue;
|
|
30
|
+
bucket: EnvGetValue;
|
|
31
|
+
endpoint: EnvGetValue;
|
|
32
|
+
url: EnvGetValue;
|
|
33
|
+
};
|
|
25
34
|
type GcsStorageDriverConfig = {
|
|
26
35
|
driver: 'gcs';
|
|
27
36
|
projectId: EnvGetValue;
|
|
@@ -32,47 +41,24 @@ type GcsStorageDriverConfig = {
|
|
|
32
41
|
type StorageDrivers = {
|
|
33
42
|
local: LocalStorageDriverConfig;
|
|
34
43
|
s3: S3StorageDriverConfig;
|
|
44
|
+
r2: R2StorageDriverConfig;
|
|
35
45
|
gcs: GcsStorageDriverConfig;
|
|
36
46
|
};
|
|
37
47
|
type StorageDriverName = keyof StorageDrivers;
|
|
38
48
|
type StorageDriverConfig = StorageDrivers[StorageDriverName];
|
|
39
49
|
type StorageConfigRuntime = {
|
|
40
|
-
default: string;
|
|
41
|
-
drivers: StorageDrivers;
|
|
50
|
+
readonly default: string;
|
|
51
|
+
readonly drivers: StorageDrivers;
|
|
42
52
|
};
|
|
43
53
|
export declare const storageConfig: Readonly<{
|
|
44
54
|
/**
|
|
45
|
-
* Default storage driver
|
|
55
|
+
* Default storage driver (dynamic; tests may mutate process.env)
|
|
46
56
|
*/
|
|
47
|
-
default: string;
|
|
57
|
+
readonly default: string;
|
|
48
58
|
/**
|
|
49
|
-
* Storage drivers configuration
|
|
59
|
+
* Storage drivers configuration (dynamic; tests may mutate process.env)
|
|
50
60
|
*/
|
|
51
|
-
drivers:
|
|
52
|
-
local: {
|
|
53
|
-
driver: "local";
|
|
54
|
-
root: string;
|
|
55
|
-
url: string;
|
|
56
|
-
visibility: string;
|
|
57
|
-
};
|
|
58
|
-
s3: {
|
|
59
|
-
driver: "s3";
|
|
60
|
-
key: string;
|
|
61
|
-
secret: string;
|
|
62
|
-
region: string;
|
|
63
|
-
bucket: string;
|
|
64
|
-
url: string;
|
|
65
|
-
endpoint: string;
|
|
66
|
-
usePathStyleUrl: boolean;
|
|
67
|
-
};
|
|
68
|
-
gcs: {
|
|
69
|
-
driver: "gcs";
|
|
70
|
-
projectId: string;
|
|
71
|
-
keyFile: string;
|
|
72
|
-
bucket: string;
|
|
73
|
-
url: string;
|
|
74
|
-
};
|
|
75
|
-
};
|
|
61
|
+
readonly drivers: StorageDrivers;
|
|
76
62
|
/**
|
|
77
63
|
* Get storage driver config
|
|
78
64
|
*/
|
|
@@ -80,14 +66,14 @@ export declare const storageConfig: Readonly<{
|
|
|
80
66
|
/**
|
|
81
67
|
* Temporary file settings
|
|
82
68
|
*/
|
|
83
|
-
temp: {
|
|
69
|
+
readonly temp: {
|
|
84
70
|
path: string;
|
|
85
71
|
maxAge: number;
|
|
86
72
|
};
|
|
87
73
|
/**
|
|
88
74
|
* Uploads settings
|
|
89
75
|
*/
|
|
90
|
-
uploads: {
|
|
76
|
+
readonly uploads: {
|
|
91
77
|
maxSize: string;
|
|
92
78
|
allowedMimes: string;
|
|
93
79
|
path: string;
|
|
@@ -95,7 +81,7 @@ export declare const storageConfig: Readonly<{
|
|
|
95
81
|
/**
|
|
96
82
|
* Backups settings
|
|
97
83
|
*/
|
|
98
|
-
backups: {
|
|
84
|
+
readonly backups: {
|
|
99
85
|
path: string;
|
|
100
86
|
driver: string;
|
|
101
87
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/config/storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9C,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;AAEtD,KAAK,wBAAwB,GAAG;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,WAAW,CAAC;IACjB,UAAU,EAAE,WAAW,CAAC;CACzB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,MAAM,EAAE,IAAI,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/config/storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9C,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;AAEtD,KAAK,wBAAwB,GAAG;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,WAAW,CAAC;IACjB,UAAU,EAAE,WAAW,CAAC;CACzB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,MAAM,EAAE,IAAI,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,WAAW,CAAC;IAC7B,MAAM,EAAE,OAAO,GAAG,CAAC,UAAU,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,GAAG,EAAE,WAAW,CAAC;IACjB,QAAQ,EAAE,WAAW,CAAC;IACtB,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,MAAM,EAAE,IAAI,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,WAAW,CAAC;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;IACtB,GAAG,EAAE,WAAW,CAAC;CAClB,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,MAAM,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,GAAG,EAAE,WAAW,CAAC;CAClB,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,wBAAwB,CAAC;IAChC,EAAE,EAAE,qBAAqB,CAAC;IAC1B,EAAE,EAAE,qBAAqB,CAAC;IAC1B,GAAG,EAAE,sBAAsB,CAAC;CAC7B,CAAC;AAEF,KAAK,iBAAiB,GAAG,MAAM,cAAc,CAAC;AAC9C,KAAK,mBAAmB,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC;AAE7D,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC,CAAC;AA4GF,eAAO,MAAM,aAAa;IArDxB;;OAEG;sBACY,MAAM;IAIrB;;OAEG;sBACY,cAAc;IAI7B;;OAEG;oBACa,oBAAoB,GAAG,mBAAmB;IAI1D;;OAEG;mBACS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAO5C;;OAEG;sBACY;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAQtE;;OAEG;sBACY;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;EAQW,CAAC;AAE7D,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC"}
|
package/src/config/storage.js
CHANGED
|
@@ -14,38 +14,52 @@ const getStorageDriver = (config) => {
|
|
|
14
14
|
}
|
|
15
15
|
return config.drivers.local;
|
|
16
16
|
};
|
|
17
|
+
const getDrivers = () => ({
|
|
18
|
+
local: {
|
|
19
|
+
driver: 'local',
|
|
20
|
+
root: Env.get('STORAGE_PATH', 'storage'),
|
|
21
|
+
url: Env.get('STORAGE_URL', '/storage'),
|
|
22
|
+
visibility: Env.get('STORAGE_VISIBILITY', 'private'),
|
|
23
|
+
},
|
|
24
|
+
s3: {
|
|
25
|
+
driver: 's3',
|
|
26
|
+
accessKeyId: Env.get('AWS_ACCESS_KEY_ID', ''),
|
|
27
|
+
secretAccessKey: Env.get('AWS_SECRET_ACCESS_KEY', ''),
|
|
28
|
+
region: Env.AWS_REGION,
|
|
29
|
+
bucket: Env.get('AWS_S3_BUCKET', ''),
|
|
30
|
+
url: Env.get('AWS_S3_URL', ''),
|
|
31
|
+
endpoint: Env.get('AWS_S3_ENDPOINT', ''),
|
|
32
|
+
usePathStyleUrl: Env.getBool('AWS_S3_USE_PATH_STYLE_URL', false),
|
|
33
|
+
},
|
|
34
|
+
r2: {
|
|
35
|
+
driver: 'r2',
|
|
36
|
+
accessKeyId: Env.get('R2_ACCESS_KEY_ID', ''),
|
|
37
|
+
secretAccessKey: Env.get('R2_SECRET_ACCESS_KEY', ''),
|
|
38
|
+
region: Env.get('R2_REGION', ''),
|
|
39
|
+
bucket: Env.get('R2_BUCKET', ''),
|
|
40
|
+
endpoint: Env.get('R2_ENDPOINT', ''),
|
|
41
|
+
url: Env.get('R2_URL', ''),
|
|
42
|
+
},
|
|
43
|
+
gcs: {
|
|
44
|
+
driver: 'gcs',
|
|
45
|
+
projectId: Env.get('GCS_PROJECT_ID', ''),
|
|
46
|
+
keyFile: Env.get('GCS_KEY_FILE', ''),
|
|
47
|
+
bucket: Env.get('GCS_BUCKET', ''),
|
|
48
|
+
url: Env.get('GCS_URL', ''),
|
|
49
|
+
},
|
|
50
|
+
});
|
|
17
51
|
const storageConfigObj = {
|
|
18
52
|
/**
|
|
19
|
-
* Default storage driver
|
|
53
|
+
* Default storage driver (dynamic; tests may mutate process.env)
|
|
20
54
|
*/
|
|
21
|
-
default
|
|
55
|
+
get default() {
|
|
56
|
+
return Env.get('STORAGE_DRIVER', 'local');
|
|
57
|
+
},
|
|
22
58
|
/**
|
|
23
|
-
* Storage drivers configuration
|
|
59
|
+
* Storage drivers configuration (dynamic; tests may mutate process.env)
|
|
24
60
|
*/
|
|
25
|
-
drivers
|
|
26
|
-
|
|
27
|
-
driver: 'local',
|
|
28
|
-
root: Env.get('STORAGE_PATH', 'storage'),
|
|
29
|
-
url: Env.get('STORAGE_URL', '/storage'),
|
|
30
|
-
visibility: Env.get('STORAGE_VISIBILITY', 'private'),
|
|
31
|
-
},
|
|
32
|
-
s3: {
|
|
33
|
-
driver: 's3',
|
|
34
|
-
key: Env.get('AWS_ACCESS_KEY_ID'),
|
|
35
|
-
secret: Env.get('AWS_SECRET_ACCESS_KEY'),
|
|
36
|
-
region: Env.AWS_REGION,
|
|
37
|
-
bucket: Env.get('AWS_S3_BUCKET'),
|
|
38
|
-
url: Env.get('AWS_S3_URL'),
|
|
39
|
-
endpoint: Env.get('AWS_S3_ENDPOINT'),
|
|
40
|
-
usePathStyleUrl: Env.getBool('AWS_S3_USE_PATH_STYLE_URL', false),
|
|
41
|
-
},
|
|
42
|
-
gcs: {
|
|
43
|
-
driver: 'gcs',
|
|
44
|
-
projectId: Env.get('GCS_PROJECT_ID'),
|
|
45
|
-
keyFile: Env.get('GCS_KEY_FILE'),
|
|
46
|
-
bucket: Env.get('GCS_BUCKET'),
|
|
47
|
-
url: Env.get('GCS_URL'),
|
|
48
|
-
},
|
|
61
|
+
get drivers() {
|
|
62
|
+
return getDrivers();
|
|
49
63
|
},
|
|
50
64
|
/**
|
|
51
65
|
* Get storage driver config
|
|
@@ -56,24 +70,30 @@ const storageConfigObj = {
|
|
|
56
70
|
/**
|
|
57
71
|
* Temporary file settings
|
|
58
72
|
*/
|
|
59
|
-
temp
|
|
60
|
-
|
|
61
|
-
|
|
73
|
+
get temp() {
|
|
74
|
+
return {
|
|
75
|
+
path: Env.get('TEMP_PATH', 'storage/temp'),
|
|
76
|
+
maxAge: Env.getInt('TEMP_FILE_MAX_AGE', 86400), // 24 hours
|
|
77
|
+
};
|
|
62
78
|
},
|
|
63
79
|
/**
|
|
64
80
|
* Uploads settings
|
|
65
81
|
*/
|
|
66
|
-
uploads
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
82
|
+
get uploads() {
|
|
83
|
+
return {
|
|
84
|
+
maxSize: Env.get('MAX_UPLOAD_SIZE', '100mb'),
|
|
85
|
+
allowedMimes: Env.get('ALLOWED_UPLOAD_MIMES', 'jpg,jpeg,png,pdf,doc,docx'),
|
|
86
|
+
path: Env.get('UPLOADS_PATH', 'storage/uploads'),
|
|
87
|
+
};
|
|
70
88
|
},
|
|
71
89
|
/**
|
|
72
90
|
* Backups settings
|
|
73
91
|
*/
|
|
74
|
-
backups
|
|
75
|
-
|
|
76
|
-
|
|
92
|
+
get backups() {
|
|
93
|
+
return {
|
|
94
|
+
path: Env.get('BACKUPS_PATH', 'storage/backups'),
|
|
95
|
+
driver: Env.get('BACKUP_DRIVER', 's3'),
|
|
96
|
+
};
|
|
77
97
|
},
|
|
78
98
|
};
|
|
79
99
|
export const storageConfig = Object.freeze(storageConfigObj);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
1
|
+
export declare const migrations: readonly [];
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/database/migrations/index.ts"],"names":[],"mappings":"AACA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/database/migrations/index.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,UAAU,aAA6B,CAAC"}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
// Placeholder for migrations
|
|
2
|
+
export const migrations = Object.freeze([]);
|
package/src/features/Queue.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// TEMPLATE_START
|
|
2
|
+
import { generateSecureJobId } from '../common/uuid';
|
|
2
3
|
import { Logger } from '../config/logger';
|
|
3
|
-
import { ErrorFactory } from '../exceptions/ZintrustError';
|
|
4
4
|
/**
|
|
5
5
|
* Simple In-Memory Queue
|
|
6
6
|
* For production, replace with Redis or similar.
|
|
@@ -32,28 +32,4 @@ export const Queue = Object.freeze({
|
|
|
32
32
|
await Promise.all(jobsToProcess.map(async (job) => handler(job)));
|
|
33
33
|
},
|
|
34
34
|
});
|
|
35
|
-
async function generateSecureJobId() {
|
|
36
|
-
if (typeof globalThis.crypto?.randomUUID === 'function') {
|
|
37
|
-
return globalThis.crypto.randomUUID();
|
|
38
|
-
}
|
|
39
|
-
if (typeof globalThis.crypto?.getRandomValues === 'function') {
|
|
40
|
-
const bytes = new Uint8Array(16);
|
|
41
|
-
globalThis.crypto.getRandomValues(bytes);
|
|
42
|
-
return bytesToHex(bytes);
|
|
43
|
-
}
|
|
44
|
-
// Node fallback for environments without Web Crypto
|
|
45
|
-
try {
|
|
46
|
-
const nodeCrypto = await import('node:crypto');
|
|
47
|
-
return nodeCrypto.randomBytes(16).toString('hex');
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
throw ErrorFactory.createTryCatchError('Secure crypto API not available to generate a job id.', error);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
function bytesToHex(bytes) {
|
|
54
|
-
let out = '';
|
|
55
|
-
for (const b of bytes)
|
|
56
|
-
out += b.toString(16).padStart(2, '0');
|
|
57
|
-
return out;
|
|
58
|
-
}
|
|
59
35
|
// TEMPLATE_END
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lambda.d.ts","sourceRoot":"","sources":["../../../src/functions/lambda.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,OAAO,GAAU,OAAO,OAAO,EAAE,SAAS,OAAO,KAAG,OAAO,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"lambda.d.ts","sourceRoot":"","sources":["../../../src/functions/lambda.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,OAAO,GAAU,OAAO,OAAO,EAAE,SAAS,OAAO,KAAG,OAAO,CAAC,OAAO,CAuB/E,CAAC"}
|
package/src/functions/lambda.js
CHANGED
|
@@ -26,7 +26,12 @@ export const handler = async (event, context) => {
|
|
|
26
26
|
Logger.error('Lambda handler error:', error);
|
|
27
27
|
return {
|
|
28
28
|
statusCode: 500,
|
|
29
|
-
|
|
29
|
+
headers: {
|
|
30
|
+
'Content-Type': 'application/json',
|
|
31
|
+
},
|
|
32
|
+
body: JSON.stringify({
|
|
33
|
+
message: 'Internal Server Error',
|
|
34
|
+
}),
|
|
30
35
|
};
|
|
31
36
|
}
|
|
32
37
|
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime Health Probes
|
|
3
|
+
*
|
|
4
|
+
* Lightweight dependency probes intended for readiness endpoints.
|
|
5
|
+
*
|
|
6
|
+
* NOTE: Startup probes are handled separately by StartupHealthChecks.
|
|
7
|
+
*/
|
|
8
|
+
export declare const RuntimeHealthProbes: Readonly<{
|
|
9
|
+
getCacheDriverName: () => string;
|
|
10
|
+
pingKvCache: (timeoutMs?: number) => Promise<number | null>;
|
|
11
|
+
}>;
|
|
12
|
+
export default RuntimeHealthProbes;
|
|
13
|
+
//# sourceMappingURL=RuntimeHealthProbes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeHealthProbes.d.ts","sourceRoot":"","sources":["../../../src/health/RuntimeHealthProbes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA+DH,eAAO,MAAM,mBAAmB;8BAzDD,MAAM;yCAgCS,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;EA4BlE,CAAC;AAEH,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime Health Probes
|
|
3
|
+
*
|
|
4
|
+
* Lightweight dependency probes intended for readiness endpoints.
|
|
5
|
+
*
|
|
6
|
+
* NOTE: Startup probes are handled separately by StartupHealthChecks.
|
|
7
|
+
*/
|
|
8
|
+
import { Cloudflare } from '../config/cloudflare';
|
|
9
|
+
import { Env } from '../config/env';
|
|
10
|
+
import { ErrorFactory } from '../exceptions/ZintrustError';
|
|
11
|
+
const getCacheDriverName = () => {
|
|
12
|
+
return Env.get('CACHE_DRIVER', 'memory');
|
|
13
|
+
};
|
|
14
|
+
const withTimeout = async (label, ms, fn) => {
|
|
15
|
+
if (!Number.isFinite(ms) || ms <= 0) {
|
|
16
|
+
return fn();
|
|
17
|
+
}
|
|
18
|
+
let timeoutId;
|
|
19
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
20
|
+
timeoutId = globalThis.setTimeout(() => {
|
|
21
|
+
reject(ErrorFactory.createConfigError(`${label} timed out after ${ms}ms`, { label, ms }));
|
|
22
|
+
}, ms);
|
|
23
|
+
// Node: allow process to exit; other runtimes may not support unref()
|
|
24
|
+
if (typeof timeoutId.unref === 'function') {
|
|
25
|
+
timeoutId.unref();
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
try {
|
|
29
|
+
return await Promise.race([fn(), timeoutPromise]);
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
if (timeoutId !== undefined) {
|
|
33
|
+
clearTimeout(timeoutId);
|
|
34
|
+
timeoutId = undefined;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const pingKvCache = async (timeoutMs = 2000) => {
|
|
39
|
+
const driver = getCacheDriverName();
|
|
40
|
+
if (driver !== 'kv')
|
|
41
|
+
return null;
|
|
42
|
+
const start = Date.now();
|
|
43
|
+
const kv = Cloudflare.getKVBinding('CACHE');
|
|
44
|
+
if (kv === null) {
|
|
45
|
+
throw ErrorFactory.createConfigError('KV binding "CACHE" not found');
|
|
46
|
+
}
|
|
47
|
+
const key = `__runtime_health__:kv:${Date.now()}`;
|
|
48
|
+
await withTimeout('runtime.cache.kv.ping', timeoutMs, async () => {
|
|
49
|
+
await kv.put(key, JSON.stringify({ ok: true }), { expirationTtl: 60 });
|
|
50
|
+
const value = (await kv.get(key, { type: 'json' }));
|
|
51
|
+
if (value?.ok !== true) {
|
|
52
|
+
throw ErrorFactory.createConnectionError('KV probe failed: unexpected value');
|
|
53
|
+
}
|
|
54
|
+
await kv.delete(key);
|
|
55
|
+
});
|
|
56
|
+
return Date.now() - start;
|
|
57
|
+
};
|
|
58
|
+
export const RuntimeHealthProbes = Object.freeze({
|
|
59
|
+
getCacheDriverName,
|
|
60
|
+
pingKvCache,
|
|
61
|
+
});
|
|
62
|
+
export default RuntimeHealthProbes;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Startup Health Checks
|
|
3
|
+
*
|
|
4
|
+
* Lightweight boot-time checks that validate the runtime environment before
|
|
5
|
+
* the server starts accepting requests.
|
|
6
|
+
*/
|
|
7
|
+
import type { DatabaseConfig } from '../orm/DatabaseAdapter';
|
|
8
|
+
export type StartupHealthCheck = {
|
|
9
|
+
name: string;
|
|
10
|
+
ok: boolean;
|
|
11
|
+
durationMs?: number;
|
|
12
|
+
details?: unknown;
|
|
13
|
+
};
|
|
14
|
+
export type StartupHealthReport = {
|
|
15
|
+
ok: boolean;
|
|
16
|
+
checks: StartupHealthCheck[];
|
|
17
|
+
};
|
|
18
|
+
export declare const StartupHealthChecks: Readonly<{
|
|
19
|
+
run(): Promise<StartupHealthReport>;
|
|
20
|
+
assertHealthy(): Promise<StartupHealthReport>;
|
|
21
|
+
checkDatabase(config: DatabaseConfig): Promise<StartupHealthCheck>;
|
|
22
|
+
checkCache(): Promise<StartupHealthCheck>;
|
|
23
|
+
withTimeout(name: string, fn: () => Promise<void>): Promise<void>;
|
|
24
|
+
}>;
|
|
25
|
+
export default StartupHealthChecks;
|
|
26
|
+
//# sourceMappingURL=StartupHealthChecks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StartupHealthChecks.d.ts","sourceRoot":"","sources":["../../../src/health/StartupHealthChecks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,mBAAmB;WACjB,OAAO,CAAC,mBAAmB,CAAC;qBAwClB,OAAO,CAAC,mBAAmB,CAAC;0BAYvB,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;kBA0BpD,OAAO,CAAC,kBAAkB,CAAC;sBA2BvB,MAAM,MAAM,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;EAiBvE,CAAC;AAEH,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Startup Health Checks
|
|
3
|
+
*
|
|
4
|
+
* Lightweight boot-time checks that validate the runtime environment before
|
|
5
|
+
* the server starts accepting requests.
|
|
6
|
+
*/
|
|
7
|
+
import { Cache } from '../cache/Cache';
|
|
8
|
+
import { generateUuid } from '../common/uuid';
|
|
9
|
+
import { Env } from '../config/env';
|
|
10
|
+
import { Logger } from '../config/logger';
|
|
11
|
+
import { startupConfig } from '../config/startup';
|
|
12
|
+
import { ErrorFactory } from '../exceptions/ZintrustError';
|
|
13
|
+
import { Database } from '../orm/Database';
|
|
14
|
+
import { QueryBuilder } from '../orm/QueryBuilder';
|
|
15
|
+
import { StartupSecretValidation } from '../security/StartupSecretValidation';
|
|
16
|
+
export const StartupHealthChecks = Object.freeze({
|
|
17
|
+
async run() {
|
|
18
|
+
if (!startupConfig.healthChecksEnabled) {
|
|
19
|
+
return { ok: true, checks: [{ name: 'startup.healthChecks', ok: true }] };
|
|
20
|
+
}
|
|
21
|
+
const checks = [];
|
|
22
|
+
const secrets = StartupSecretValidation.validate();
|
|
23
|
+
checks.push({
|
|
24
|
+
name: 'startup.secrets',
|
|
25
|
+
ok: secrets.valid,
|
|
26
|
+
details: secrets.valid ? undefined : { errors: secrets.errors },
|
|
27
|
+
});
|
|
28
|
+
if (startupConfig.checkDatabase === true) {
|
|
29
|
+
// Minimal config derived from Env. For Workers D1, the adapter will resolve the binding via Cloudflare helpers.
|
|
30
|
+
const driver = (Env.DB_CONNECTION || 'sqlite');
|
|
31
|
+
const readHosts = Env.DB_READ_HOSTS.trim().length > 0 ? Env.DB_READ_HOSTS.split(',') : undefined;
|
|
32
|
+
const config = {
|
|
33
|
+
driver,
|
|
34
|
+
database: Env.DB_DATABASE,
|
|
35
|
+
host: Env.DB_HOST,
|
|
36
|
+
port: Env.DB_PORT,
|
|
37
|
+
username: Env.DB_USERNAME,
|
|
38
|
+
password: Env.DB_PASSWORD,
|
|
39
|
+
readHosts,
|
|
40
|
+
};
|
|
41
|
+
checks.push(await StartupHealthChecks.checkDatabase(config));
|
|
42
|
+
}
|
|
43
|
+
if (startupConfig.checkCache === true) {
|
|
44
|
+
checks.push(await StartupHealthChecks.checkCache());
|
|
45
|
+
}
|
|
46
|
+
return { ok: checks.every((c) => c.ok), checks };
|
|
47
|
+
},
|
|
48
|
+
async assertHealthy() {
|
|
49
|
+
const report = await StartupHealthChecks.run();
|
|
50
|
+
if (report.ok)
|
|
51
|
+
return report;
|
|
52
|
+
if (startupConfig.continueOnFailure === true) {
|
|
53
|
+
Logger.warn('Startup health checks failed but continuing due to configuration', { report });
|
|
54
|
+
return report;
|
|
55
|
+
}
|
|
56
|
+
throw ErrorFactory.createConfigError('Startup health checks failed', { report });
|
|
57
|
+
},
|
|
58
|
+
async checkDatabase(config) {
|
|
59
|
+
const startedAt = Date.now();
|
|
60
|
+
try {
|
|
61
|
+
await StartupHealthChecks.withTimeout('startup.database.connect', async () => {
|
|
62
|
+
const db = Database.create(config);
|
|
63
|
+
await db.connect();
|
|
64
|
+
try {
|
|
65
|
+
await QueryBuilder.ping(db);
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
await db.disconnect();
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
return { name: 'startup.database', ok: true, durationMs: Date.now() - startedAt };
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
75
|
+
return {
|
|
76
|
+
name: 'startup.database',
|
|
77
|
+
ok: false,
|
|
78
|
+
durationMs: Date.now() - startedAt,
|
|
79
|
+
details: { message },
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
async checkCache() {
|
|
84
|
+
const startedAt = Date.now();
|
|
85
|
+
const key = `__startup_health__:${generateUuid()}`;
|
|
86
|
+
try {
|
|
87
|
+
await StartupHealthChecks.withTimeout('startup.cache.probe', async () => {
|
|
88
|
+
await Cache.set(key, { ok: true }, 60);
|
|
89
|
+
const value = await Cache.get(key);
|
|
90
|
+
await Cache.delete(key);
|
|
91
|
+
if (value?.ok !== true) {
|
|
92
|
+
throw ErrorFactory.createConfigError('Cache probe failed', { key });
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
return { name: 'startup.cache', ok: true, durationMs: Date.now() - startedAt };
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
99
|
+
return {
|
|
100
|
+
name: 'startup.cache',
|
|
101
|
+
ok: false,
|
|
102
|
+
durationMs: Date.now() - startedAt,
|
|
103
|
+
details: { message },
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
async withTimeout(name, fn) {
|
|
108
|
+
const timeoutMs = Math.max(1, Number(startupConfig.timeoutMs));
|
|
109
|
+
let timeoutId;
|
|
110
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
111
|
+
timeoutId = globalThis.setTimeout(() => {
|
|
112
|
+
reject(ErrorFactory.createConfigError(`Startup check timed out: ${name}`, { timeoutMs }));
|
|
113
|
+
}, timeoutMs);
|
|
114
|
+
});
|
|
115
|
+
try {
|
|
116
|
+
await Promise.race([fn(), timeoutPromise]);
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
if (timeoutId !== undefined)
|
|
120
|
+
globalThis.clearTimeout(timeoutId);
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
export default StartupHealthChecks;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface IErrorResponse {
|
|
2
|
+
statusCode: number;
|
|
3
|
+
message: string;
|
|
4
|
+
code: string;
|
|
5
|
+
requestId: string;
|
|
6
|
+
timestamp: string;
|
|
7
|
+
details?: Record<string, unknown>;
|
|
8
|
+
stack?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const ErrorResponse: Readonly<{
|
|
11
|
+
create: (params: {
|
|
12
|
+
statusCode: number;
|
|
13
|
+
message: string;
|
|
14
|
+
code: string;
|
|
15
|
+
requestId?: string;
|
|
16
|
+
details?: Record<string, unknown>;
|
|
17
|
+
stack?: string;
|
|
18
|
+
}) => IErrorResponse;
|
|
19
|
+
notFound(resource: string, requestId?: string): IErrorResponse;
|
|
20
|
+
badRequest(message: string, requestId?: string, details?: Record<string, unknown>): IErrorResponse;
|
|
21
|
+
unauthorized(message: string, requestId?: string): IErrorResponse;
|
|
22
|
+
forbidden(message: string, requestId?: string): IErrorResponse;
|
|
23
|
+
conflict(message: string, requestId?: string): IErrorResponse;
|
|
24
|
+
internalServerError(message?: string, requestId?: string, stack?: string): IErrorResponse;
|
|
25
|
+
serviceUnavailable(message?: string, requestId?: string): IErrorResponse;
|
|
26
|
+
}>;
|
|
27
|
+
export default ErrorResponse;
|
|
28
|
+
//# sourceMappingURL=ErrorResponse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorResponse.d.ts","sourceRoot":"","sources":["../../../src/http/ErrorResponse.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsBD,eAAO,MAAM,aAAa;qBApBF;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,KAAG,cAAc;uBAgBG,MAAM,cAAc,MAAM,GAAG,cAAc;wBAUnD,MAAM,cACH,MAAM,YACR,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,cAAc;0BAIK,MAAM,cAAc,MAAM,GAAG,cAAc;uBAI9C,MAAM,cAAc,MAAM,GAAG,cAAc;sBAI5C,MAAM,cAAc,MAAM,GAAG,cAAc;kCAKlD,MAAM,cACH,MAAM,UACV,MAAM,GACb,cAAc;iCAIW,MAAM,cAAsC,MAAM,GAAG,cAAc;EAG/F,CAAC;AAEH,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const create = (params) => {
|
|
2
|
+
const hasStack = typeof params.stack === 'string' && params.stack.trim().length > 0;
|
|
3
|
+
return {
|
|
4
|
+
statusCode: params.statusCode,
|
|
5
|
+
message: params.message,
|
|
6
|
+
code: params.code,
|
|
7
|
+
requestId: params.requestId ?? '',
|
|
8
|
+
timestamp: new Date().toISOString(),
|
|
9
|
+
...(params.details ? { details: params.details } : {}),
|
|
10
|
+
...(hasStack ? { stack: params.stack } : {}),
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export const ErrorResponse = Object.freeze({
|
|
14
|
+
create,
|
|
15
|
+
notFound(resource, requestId) {
|
|
16
|
+
return create({
|
|
17
|
+
statusCode: 404,
|
|
18
|
+
message: `${resource} not found`,
|
|
19
|
+
code: 'NOT_FOUND',
|
|
20
|
+
requestId,
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
badRequest(message, requestId, details) {
|
|
24
|
+
return create({ statusCode: 400, message, code: 'BAD_REQUEST', requestId, details });
|
|
25
|
+
},
|
|
26
|
+
unauthorized(message, requestId) {
|
|
27
|
+
return create({ statusCode: 401, message, code: 'UNAUTHORIZED', requestId });
|
|
28
|
+
},
|
|
29
|
+
forbidden(message, requestId) {
|
|
30
|
+
return create({ statusCode: 403, message, code: 'FORBIDDEN', requestId });
|
|
31
|
+
},
|
|
32
|
+
conflict(message, requestId) {
|
|
33
|
+
return create({ statusCode: 409, message, code: 'CONFLICT', requestId });
|
|
34
|
+
},
|
|
35
|
+
internalServerError(message = 'Internal server error', requestId, stack) {
|
|
36
|
+
return create({ statusCode: 500, message, code: 'INTERNAL_SERVER_ERROR', requestId, stack });
|
|
37
|
+
},
|
|
38
|
+
serviceUnavailable(message = 'Service unavailable', requestId) {
|
|
39
|
+
return create({ statusCode: 503, message, code: 'SERVICE_UNAVAILABLE', requestId });
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
export default ErrorResponse;
|
package/src/http/Kernel.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { IResponse } from './Response';
|
|
|
7
7
|
import { IMiddlewareStack, Middleware } from '../middleware/MiddlewareStack';
|
|
8
8
|
import type { IncomingMessage, ServerResponse } from '../node-singletons/http';
|
|
9
9
|
import { IRouter } from '../routing/Router';
|
|
10
|
+
import type { ISchedule } from '../scheduler/types';
|
|
10
11
|
export interface IKernel {
|
|
11
12
|
handle(req: IncomingMessage, res: ServerResponse): Promise<void>;
|
|
12
13
|
handleRequest(req: IRequest, res: IResponse): Promise<void>;
|
|
@@ -16,6 +17,10 @@ export interface IKernel {
|
|
|
16
17
|
getRouter(): IRouter;
|
|
17
18
|
getContainer(): IServiceContainer;
|
|
18
19
|
getMiddlewareStack(): IMiddlewareStack;
|
|
20
|
+
registerSchedule(schedule: ISchedule): void;
|
|
21
|
+
startSchedules(): void;
|
|
22
|
+
stopSchedules(): Promise<void>;
|
|
23
|
+
runScheduleOnce(name: string): Promise<void>;
|
|
19
24
|
}
|
|
20
25
|
export declare const Kernel: Readonly<{
|
|
21
26
|
create: (router: IRouter, container: IServiceContainer) => IKernel;
|
package/src/http/Kernel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Kernel.d.ts","sourceRoot":"","sources":["../../../src/http/Kernel.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"Kernel.d.ts","sourceRoot":"","sources":["../../../src/http/Kernel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EAAE,QAAQ,EAAW,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,SAAS,EAAY,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAmB,MAAM,6BAA6B,CAAC;AAC5F,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAU,MAAM,iBAAiB,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AAGpE,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/C,wBAAwB,CAAC,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAC5D,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACpE,SAAS,IAAI,OAAO,CAAC;IACrB,YAAY,IAAI,iBAAiB,CAAC;IAClC,kBAAkB,IAAI,gBAAgB,CAAC;IAGvC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5C,cAAc,IAAI,IAAI,CAAC;IACvB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAuJD,eAAO,MAAM,MAAM;qBA1DK,OAAO,aAAa,iBAAiB,KAAG,OAAO;EA4DrE,CAAC;AAEH,eAAe,MAAM,CAAC"}
|