@zintrust/core 0.1.0
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/bin/z.d.ts +7 -0
- package/bin/z.d.ts.map +1 -0
- package/bin/z.js +6 -0
- package/bin/zin.d.ts +7 -0
- package/bin/zin.d.ts.map +1 -0
- package/bin/zin.js +6 -0
- package/bin/zintrust-microservices.d.ts +7 -0
- package/bin/zintrust-microservices.d.ts.map +1 -0
- package/bin/zintrust-microservices.js +165 -0
- package/bin/zintrust.d.ts +9 -0
- package/bin/zintrust.d.ts.map +1 -0
- package/bin/zintrust.js +51 -0
- package/bin/zt.d.ts +7 -0
- package/bin/zt.d.ts.map +1 -0
- package/bin/zt.js +6 -0
- package/package.json +80 -0
- package/src/boot/Application.d.ts +31 -0
- package/src/boot/Application.d.ts.map +1 -0
- package/src/boot/Application.js +159 -0
- package/src/boot/Server.d.ts +23 -0
- package/src/boot/Server.d.ts.map +1 -0
- package/src/boot/Server.js +236 -0
- package/src/boot/bootstrap.d.ts +7 -0
- package/src/boot/bootstrap.d.ts.map +1 -0
- package/src/boot/bootstrap.js +64 -0
- package/src/builder/BundleOptimizer.d.ts +42 -0
- package/src/builder/BundleOptimizer.d.ts.map +1 -0
- package/src/builder/BundleOptimizer.js +356 -0
- package/src/cache/Cache.d.ts +26 -0
- package/src/cache/Cache.d.ts.map +1 -0
- package/src/cache/Cache.js +89 -0
- package/src/cache/CacheDriver.d.ts +28 -0
- package/src/cache/CacheDriver.d.ts.map +1 -0
- package/src/cache/CacheDriver.js +6 -0
- package/src/cache/drivers/KVDriver.d.ts +12 -0
- package/src/cache/drivers/KVDriver.d.ts.map +1 -0
- package/src/cache/drivers/KVDriver.js +54 -0
- package/src/cache/drivers/MemoryDriver.d.ts +12 -0
- package/src/cache/drivers/MemoryDriver.d.ts.map +1 -0
- package/src/cache/drivers/MemoryDriver.js +50 -0
- package/src/cache/drivers/MongoDriver.d.ts +17 -0
- package/src/cache/drivers/MongoDriver.d.ts.map +1 -0
- package/src/cache/drivers/MongoDriver.js +80 -0
- package/src/cache/drivers/RedisDriver.d.ts +12 -0
- package/src/cache/drivers/RedisDriver.d.ts.map +1 -0
- package/src/cache/drivers/RedisDriver.js +79 -0
- package/src/cli/BaseCommand.d.ts +39 -0
- package/src/cli/BaseCommand.d.ts.map +1 -0
- package/src/cli/BaseCommand.js +58 -0
- package/src/cli/CLI.d.ts +21 -0
- package/src/cli/CLI.d.ts.map +1 -0
- package/src/cli/CLI.js +203 -0
- package/src/cli/ErrorHandler.d.ts +23 -0
- package/src/cli/ErrorHandler.d.ts.map +1 -0
- package/src/cli/ErrorHandler.js +95 -0
- package/src/cli/PromptHelper.d.ts +47 -0
- package/src/cli/PromptHelper.d.ts.map +1 -0
- package/src/cli/PromptHelper.js +155 -0
- package/src/cli/commands/AddCommand.d.ts +15 -0
- package/src/cli/commands/AddCommand.d.ts.map +1 -0
- package/src/cli/commands/AddCommand.js +817 -0
- package/src/cli/commands/ConfigCommand.d.ts +15 -0
- package/src/cli/commands/ConfigCommand.d.ts.map +1 -0
- package/src/cli/commands/ConfigCommand.js +273 -0
- package/src/cli/commands/D1MigrateCommand.d.ts +15 -0
- package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -0
- package/src/cli/commands/D1MigrateCommand.js +73 -0
- package/src/cli/commands/DebugCommand.d.ts +15 -0
- package/src/cli/commands/DebugCommand.d.ts.map +1 -0
- package/src/cli/commands/DebugCommand.js +52 -0
- package/src/cli/commands/FixCommand.d.ts +15 -0
- package/src/cli/commands/FixCommand.d.ts.map +1 -0
- package/src/cli/commands/FixCommand.js +80 -0
- package/src/cli/commands/KeyGenerateCommand.d.ts +9 -0
- package/src/cli/commands/KeyGenerateCommand.d.ts.map +1 -0
- package/src/cli/commands/KeyGenerateCommand.js +76 -0
- package/src/cli/commands/LogsCommand.d.ts +19 -0
- package/src/cli/commands/LogsCommand.d.ts.map +1 -0
- package/src/cli/commands/LogsCommand.js +185 -0
- package/src/cli/commands/MigrateCommand.d.ts +15 -0
- package/src/cli/commands/MigrateCommand.d.ts.map +1 -0
- package/src/cli/commands/MigrateCommand.js +56 -0
- package/src/cli/commands/NewCommand.d.ts +32 -0
- package/src/cli/commands/NewCommand.d.ts.map +1 -0
- package/src/cli/commands/NewCommand.js +280 -0
- package/src/cli/commands/PluginCommand.d.ts +9 -0
- package/src/cli/commands/PluginCommand.d.ts.map +1 -0
- package/src/cli/commands/PluginCommand.js +94 -0
- package/src/cli/commands/PrepareCommand.d.ts +8 -0
- package/src/cli/commands/PrepareCommand.d.ts.map +1 -0
- package/src/cli/commands/PrepareCommand.js +51 -0
- package/src/cli/commands/QACommand.d.ts +33 -0
- package/src/cli/commands/QACommand.d.ts.map +1 -0
- package/src/cli/commands/QACommand.js +490 -0
- package/src/cli/commands/SimulateCommand.d.ts +12 -0
- package/src/cli/commands/SimulateCommand.d.ts.map +1 -0
- package/src/cli/commands/SimulateCommand.js +79 -0
- package/src/cli/commands/StartCommand.d.ts +5 -0
- package/src/cli/commands/StartCommand.d.ts.map +1 -0
- package/src/cli/commands/StartCommand.js +227 -0
- package/src/cli/commands/index.d.ts +11 -0
- package/src/cli/commands/index.d.ts.map +1 -0
- package/src/cli/commands/index.js +10 -0
- package/src/cli/config/ConfigManager.d.ts +42 -0
- package/src/cli/config/ConfigManager.d.ts.map +1 -0
- package/src/cli/config/ConfigManager.js +175 -0
- package/src/cli/config/ConfigSchema.d.ts +195 -0
- package/src/cli/config/ConfigSchema.d.ts.map +1 -0
- package/src/cli/config/ConfigSchema.js +171 -0
- package/src/cli/config/ConfigValidator.d.ts +41 -0
- package/src/cli/config/ConfigValidator.d.ts.map +1 -0
- package/src/cli/config/ConfigValidator.js +200 -0
- package/src/cli/config/index.d.ts +8 -0
- package/src/cli/config/index.d.ts.map +1 -0
- package/src/cli/config/index.js +7 -0
- package/src/cli/debug/Dashboard.d.ts +34 -0
- package/src/cli/debug/Dashboard.d.ts.map +1 -0
- package/src/cli/debug/Dashboard.js +152 -0
- package/src/cli/index.d.ts +14 -0
- package/src/cli/index.d.ts.map +1 -0
- package/src/cli/index.js +14 -0
- package/src/cli/logger/Logger.d.ts +43 -0
- package/src/cli/logger/Logger.d.ts.map +1 -0
- package/src/cli/logger/Logger.js +137 -0
- package/src/cli/scaffolding/ControllerGenerator.d.ts +44 -0
- package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/ControllerGenerator.js +540 -0
- package/src/cli/scaffolding/FactoryGenerator.d.ts +47 -0
- package/src/cli/scaffolding/FactoryGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/FactoryGenerator.js +356 -0
- package/src/cli/scaffolding/FeatureScaffolder.d.ts +40 -0
- package/src/cli/scaffolding/FeatureScaffolder.d.ts.map +1 -0
- package/src/cli/scaffolding/FeatureScaffolder.js +747 -0
- package/src/cli/scaffolding/FileGenerator.d.ts +31 -0
- package/src/cli/scaffolding/FileGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/FileGenerator.js +222 -0
- package/src/cli/scaffolding/MigrationGenerator.d.ts +35 -0
- package/src/cli/scaffolding/MigrationGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/MigrationGenerator.js +257 -0
- package/src/cli/scaffolding/ModelGenerator.d.ts +81 -0
- package/src/cli/scaffolding/ModelGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/ModelGenerator.js +249 -0
- package/src/cli/scaffolding/ProjectScaffolder.d.ts +66 -0
- package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -0
- package/src/cli/scaffolding/ProjectScaffolder.js +439 -0
- package/src/cli/scaffolding/RequestFactoryGenerator.d.ts +50 -0
- package/src/cli/scaffolding/RequestFactoryGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/RequestFactoryGenerator.js +465 -0
- package/src/cli/scaffolding/ResponseFactoryGenerator.d.ts +43 -0
- package/src/cli/scaffolding/ResponseFactoryGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/ResponseFactoryGenerator.js +321 -0
- package/src/cli/scaffolding/RouteGenerator.d.ts +66 -0
- package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/RouteGenerator.js +306 -0
- package/src/cli/scaffolding/SeederGenerator.d.ts +47 -0
- package/src/cli/scaffolding/SeederGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/SeederGenerator.js +286 -0
- package/src/cli/scaffolding/ServiceIntegrationTestGenerator.d.ts +40 -0
- package/src/cli/scaffolding/ServiceIntegrationTestGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/ServiceIntegrationTestGenerator.js +267 -0
- package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts +45 -0
- package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/ServiceRequestFactoryGenerator.js +397 -0
- package/src/cli/scaffolding/ServiceScaffolder.d.ts +45 -0
- package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -0
- package/src/cli/scaffolding/ServiceScaffolder.js +367 -0
- package/src/cli/scaffolding/TemplateEngine.d.ts +35 -0
- package/src/cli/scaffolding/TemplateEngine.d.ts.map +1 -0
- package/src/cli/scaffolding/TemplateEngine.js +379 -0
- package/src/cli/scaffolding/WorkflowGenerator.d.ts +31 -0
- package/src/cli/scaffolding/WorkflowGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/WorkflowGenerator.js +193 -0
- package/src/cli/scaffolding/index.d.ts +34 -0
- package/src/cli/scaffolding/index.d.ts.map +1 -0
- package/src/cli/scaffolding/index.js +18 -0
- package/src/cli/utils/DistPackager.d.ts +8 -0
- package/src/cli/utils/DistPackager.d.ts.map +1 -0
- package/src/cli/utils/DistPackager.js +94 -0
- package/src/cli/utils/EnvFileLoader.d.ts +21 -0
- package/src/cli/utils/EnvFileLoader.d.ts.map +1 -0
- package/src/cli/utils/EnvFileLoader.js +166 -0
- package/src/cli/utils/spawn.d.ts +11 -0
- package/src/cli/utils/spawn.d.ts.map +1 -0
- package/src/cli/utils/spawn.js +81 -0
- package/src/common/index.d.ts +87 -0
- package/src/common/index.d.ts.map +1 -0
- package/src/common/index.js +207 -0
- package/src/config/SecretsManager.d.ts +122 -0
- package/src/config/SecretsManager.d.ts.map +1 -0
- package/src/config/SecretsManager.js +328 -0
- package/src/config/app.d.ts +56 -0
- package/src/config/app.d.ts.map +1 -0
- package/src/config/app.js +77 -0
- package/src/config/cache.d.ts +76 -0
- package/src/config/cache.d.ts.map +1 -0
- package/src/config/cache.js +62 -0
- package/src/config/constants.d.ts +108 -0
- package/src/config/constants.d.ts.map +1 -0
- package/src/config/constants.js +64 -0
- package/src/config/database.d.ts +122 -0
- package/src/config/database.d.ts.map +1 -0
- package/src/config/database.js +89 -0
- package/src/config/env.d.ts +56 -0
- package/src/config/env.d.ts.map +1 -0
- package/src/config/env.js +133 -0
- package/src/config/features.d.ts +27 -0
- package/src/config/features.d.ts.map +1 -0
- package/src/config/features.js +49 -0
- package/src/config/index.d.ts +554 -0
- package/src/config/index.d.ts.map +1 -0
- package/src/config/index.js +31 -0
- package/src/config/logger.d.ts +17 -0
- package/src/config/logger.d.ts.map +1 -0
- package/src/config/logger.js +77 -0
- package/src/config/microservices.d.ts +88 -0
- package/src/config/microservices.d.ts.map +1 -0
- package/src/config/microservices.js +90 -0
- package/src/config/queue.d.ts +107 -0
- package/src/config/queue.d.ts.map +1 -0
- package/src/config/queue.js +74 -0
- package/src/config/security.d.ts +108 -0
- package/src/config/security.d.ts.map +1 -0
- package/src/config/security.js +134 -0
- package/src/config/storage.d.ts +105 -0
- package/src/config/storage.d.ts.map +1 -0
- package/src/config/storage.js +79 -0
- package/src/container/ServiceContainer.d.ts +25 -0
- package/src/container/ServiceContainer.d.ts.map +1 -0
- package/src/container/ServiceContainer.js +75 -0
- package/src/database/migrations/index.d.ts +2 -0
- package/src/database/migrations/index.d.ts.map +1 -0
- package/src/database/migrations/index.js +1 -0
- package/src/exceptions/ZintrustError.d.ts +88 -0
- package/src/exceptions/ZintrustError.d.ts.map +1 -0
- package/src/exceptions/ZintrustError.js +110 -0
- package/src/features/Auth.d.ts +20 -0
- package/src/features/Auth.d.ts.map +1 -0
- package/src/features/Auth.js +32 -0
- package/src/features/Queue.d.ts +21 -0
- package/src/features/Queue.d.ts.map +1 -0
- package/src/features/Queue.js +59 -0
- package/src/functions/cloudflare.d.ts +5 -0
- package/src/functions/cloudflare.d.ts.map +1 -0
- package/src/functions/cloudflare.js +34 -0
- package/src/functions/deno.d.ts +3 -0
- package/src/functions/deno.d.ts.map +1 -0
- package/src/functions/deno.js +31 -0
- package/src/functions/lambda.d.ts +2 -0
- package/src/functions/lambda.d.ts.map +1 -0
- package/src/functions/lambda.js +32 -0
- package/src/http/Controller.d.ts +20 -0
- package/src/http/Controller.d.ts.map +1 -0
- package/src/http/Controller.js +46 -0
- package/src/http/Kernel.d.ts +24 -0
- package/src/http/Kernel.d.ts.map +1 -0
- package/src/http/Kernel.js +72 -0
- package/src/http/Request.d.ts +36 -0
- package/src/http/Request.d.ts.map +1 -0
- package/src/http/Request.js +142 -0
- package/src/http/Response.d.ts +32 -0
- package/src/http/Response.d.ts.map +1 -0
- package/src/http/Response.js +70 -0
- package/src/index.d.ts +43 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +37 -0
- package/src/microservices/MicroserviceBootstrap.d.ts +75 -0
- package/src/microservices/MicroserviceBootstrap.d.ts.map +1 -0
- package/src/microservices/MicroserviceBootstrap.js +285 -0
- package/src/microservices/MicroserviceGenerator.d.ts +27 -0
- package/src/microservices/MicroserviceGenerator.d.ts.map +1 -0
- package/src/microservices/MicroserviceGenerator.js +436 -0
- package/src/microservices/MicroserviceManager.d.ts +68 -0
- package/src/microservices/MicroserviceManager.d.ts.map +1 -0
- package/src/microservices/MicroserviceManager.js +266 -0
- package/src/microservices/PostgresAdapter.d.ts +90 -0
- package/src/microservices/PostgresAdapter.d.ts.map +1 -0
- package/src/microservices/PostgresAdapter.js +286 -0
- package/src/microservices/RequestTracingMiddleware.d.ts +41 -0
- package/src/microservices/RequestTracingMiddleware.d.ts.map +1 -0
- package/src/microservices/RequestTracingMiddleware.js +122 -0
- package/src/microservices/ServiceAuthMiddleware.d.ts +58 -0
- package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -0
- package/src/microservices/ServiceAuthMiddleware.js +240 -0
- package/src/microservices/ServiceBundler.d.ts +45 -0
- package/src/microservices/ServiceBundler.d.ts.map +1 -0
- package/src/microservices/ServiceBundler.js +297 -0
- package/src/microservices/ServiceHealthMonitor.d.ts +96 -0
- package/src/microservices/ServiceHealthMonitor.d.ts.map +1 -0
- package/src/microservices/ServiceHealthMonitor.js +379 -0
- package/src/middleware/CsrfMiddleware.d.ts +19 -0
- package/src/middleware/CsrfMiddleware.d.ts.map +1 -0
- package/src/middleware/CsrfMiddleware.js +121 -0
- package/src/middleware/MiddlewareStack.d.ts +27 -0
- package/src/middleware/MiddlewareStack.d.ts.map +1 -0
- package/src/middleware/MiddlewareStack.js +43 -0
- package/src/middleware/RateLimiter.d.ts +22 -0
- package/src/middleware/RateLimiter.d.ts.map +1 -0
- package/src/middleware/RateLimiter.js +72 -0
- package/src/middleware/SecurityMiddleware.d.ts +33 -0
- package/src/middleware/SecurityMiddleware.d.ts.map +1 -0
- package/src/middleware/SecurityMiddleware.js +106 -0
- package/src/middleware/index.d.ts +9 -0
- package/src/middleware/index.d.ts.map +1 -0
- package/src/middleware/index.js +8 -0
- package/src/node-singletons/child-process.d.ts +7 -0
- package/src/node-singletons/child-process.d.ts.map +1 -0
- package/src/node-singletons/child-process.js +6 -0
- package/src/node-singletons/crypto.d.ts +7 -0
- package/src/node-singletons/crypto.d.ts.map +1 -0
- package/src/node-singletons/crypto.js +6 -0
- package/src/node-singletons/events.d.ts +7 -0
- package/src/node-singletons/events.d.ts.map +1 -0
- package/src/node-singletons/events.js +6 -0
- package/src/node-singletons/fs.d.ts +12 -0
- package/src/node-singletons/fs.d.ts.map +1 -0
- package/src/node-singletons/fs.js +14 -0
- package/src/node-singletons/http.d.ts +8 -0
- package/src/node-singletons/http.d.ts.map +1 -0
- package/src/node-singletons/http.js +6 -0
- package/src/node-singletons/index.d.ts +30 -0
- package/src/node-singletons/index.d.ts.map +1 -0
- package/src/node-singletons/index.js +31 -0
- package/src/node-singletons/os.d.ts +9 -0
- package/src/node-singletons/os.d.ts.map +1 -0
- package/src/node-singletons/os.js +9 -0
- package/src/node-singletons/path.d.ts +7 -0
- package/src/node-singletons/path.d.ts.map +1 -0
- package/src/node-singletons/path.js +6 -0
- package/src/node-singletons/perf-hooks.d.ts +7 -0
- package/src/node-singletons/perf-hooks.d.ts.map +1 -0
- package/src/node-singletons/perf-hooks.js +6 -0
- package/src/node-singletons/readline.d.ts +10 -0
- package/src/node-singletons/readline.d.ts.map +1 -0
- package/src/node-singletons/readline.js +9 -0
- package/src/node-singletons/url.d.ts +7 -0
- package/src/node-singletons/url.d.ts.map +1 -0
- package/src/node-singletons/url.js +6 -0
- package/src/orm/ConnectionManager.d.ts +118 -0
- package/src/orm/ConnectionManager.d.ts.map +1 -0
- package/src/orm/ConnectionManager.js +401 -0
- package/src/orm/Database.d.ts +31 -0
- package/src/orm/Database.d.ts.map +1 -0
- package/src/orm/Database.js +163 -0
- package/src/orm/DatabaseAdapter.d.ts +96 -0
- package/src/orm/DatabaseAdapter.d.ts.map +1 -0
- package/src/orm/DatabaseAdapter.js +40 -0
- package/src/orm/Model.d.ts +91 -0
- package/src/orm/Model.d.ts.map +1 -0
- package/src/orm/Model.js +206 -0
- package/src/orm/QueryBuilder.d.ts +52 -0
- package/src/orm/QueryBuilder.d.ts.map +1 -0
- package/src/orm/QueryBuilder.js +134 -0
- package/src/orm/Relationships.d.ts +53 -0
- package/src/orm/Relationships.d.ts.map +1 -0
- package/src/orm/Relationships.js +98 -0
- package/src/orm/Schema.d.ts +123 -0
- package/src/orm/Schema.d.ts.map +1 -0
- package/src/orm/Schema.js +169 -0
- package/src/orm/adapters/D1Adapter.d.ts +15 -0
- package/src/orm/adapters/D1Adapter.d.ts.map +1 -0
- package/src/orm/adapters/D1Adapter.js +125 -0
- package/src/orm/adapters/MySQLAdapter.d.ts +16 -0
- package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -0
- package/src/orm/adapters/MySQLAdapter.js +87 -0
- package/src/orm/adapters/PostgreSQLAdapter.d.ts +16 -0
- package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/src/orm/adapters/PostgreSQLAdapter.js +87 -0
- package/src/orm/adapters/SQLServerAdapter.d.ts +16 -0
- package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -0
- package/src/orm/adapters/SQLServerAdapter.js +81 -0
- package/src/orm/adapters/SQLiteAdapter.d.ts +11 -0
- package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/src/orm/adapters/SQLiteAdapter.js +131 -0
- package/src/performance/Benchmark.d.ts +87 -0
- package/src/performance/Benchmark.d.ts.map +1 -0
- package/src/performance/Benchmark.js +304 -0
- package/src/performance/CodeGenerationBenchmark.d.ts +23 -0
- package/src/performance/CodeGenerationBenchmark.d.ts.map +1 -0
- package/src/performance/CodeGenerationBenchmark.js +249 -0
- package/src/performance/Optimizer.d.ts +99 -0
- package/src/performance/Optimizer.d.ts.map +1 -0
- package/src/performance/Optimizer.js +396 -0
- package/src/performance/establish-baseline.d.ts +9 -0
- package/src/performance/establish-baseline.d.ts.map +1 -0
- package/src/performance/establish-baseline.js +55 -0
- package/src/profiling/MemoryProfiler.d.ts +32 -0
- package/src/profiling/MemoryProfiler.d.ts.map +1 -0
- package/src/profiling/MemoryProfiler.js +84 -0
- package/src/profiling/N1Detector.d.ts +16 -0
- package/src/profiling/N1Detector.d.ts.map +1 -0
- package/src/profiling/N1Detector.js +120 -0
- package/src/profiling/QueryLogger.d.ts +107 -0
- package/src/profiling/QueryLogger.d.ts.map +1 -0
- package/src/profiling/QueryLogger.js +148 -0
- package/src/profiling/RequestProfiler.d.ts +30 -0
- package/src/profiling/RequestProfiler.d.ts.map +1 -0
- package/src/profiling/RequestProfiler.js +94 -0
- package/src/profiling/types.d.ts +77 -0
- package/src/profiling/types.d.ts.map +1 -0
- package/src/profiling/types.js +5 -0
- package/src/routing/Router.d.ts +52 -0
- package/src/routing/Router.d.ts.map +1 -0
- package/src/routing/Router.js +191 -0
- package/src/runtime/PluginManager.d.ts +30 -0
- package/src/runtime/PluginManager.d.ts.map +1 -0
- package/src/runtime/PluginManager.js +197 -0
- package/src/runtime/PluginRegistry.d.ts +22 -0
- package/src/runtime/PluginRegistry.d.ts.map +1 -0
- package/src/runtime/PluginRegistry.js +93 -0
- package/src/runtime/RuntimeAdapter.d.ts +126 -0
- package/src/runtime/RuntimeAdapter.d.ts.map +1 -0
- package/src/runtime/RuntimeAdapter.js +127 -0
- package/src/runtime/RuntimeDetector.d.ts +15 -0
- package/src/runtime/RuntimeDetector.d.ts.map +1 -0
- package/src/runtime/RuntimeDetector.js +219 -0
- package/src/runtime/adapters/CloudflareAdapter.d.ts +43 -0
- package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -0
- package/src/runtime/adapters/CloudflareAdapter.js +175 -0
- package/src/runtime/adapters/DenoAdapter.d.ts +30 -0
- package/src/runtime/adapters/DenoAdapter.d.ts.map +1 -0
- package/src/runtime/adapters/DenoAdapter.js +191 -0
- package/src/runtime/adapters/FargateAdapter.d.ts +40 -0
- package/src/runtime/adapters/FargateAdapter.d.ts.map +1 -0
- package/src/runtime/adapters/FargateAdapter.js +156 -0
- package/src/runtime/adapters/LambdaAdapter.d.ts +13 -0
- package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -0
- package/src/runtime/adapters/LambdaAdapter.js +302 -0
- package/src/runtime/adapters/NodeServerAdapter.d.ts +16 -0
- package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -0
- package/src/runtime/adapters/NodeServerAdapter.js +199 -0
- package/src/scripts/TemplateSync.d.ts +7 -0
- package/src/scripts/TemplateSync.d.ts.map +1 -0
- package/src/scripts/TemplateSync.js +234 -0
- package/src/security/CsrfTokenManager.d.ts +28 -0
- package/src/security/CsrfTokenManager.d.ts.map +1 -0
- package/src/security/CsrfTokenManager.js +78 -0
- package/src/security/Encryptor.d.ts +15 -0
- package/src/security/Encryptor.d.ts.map +1 -0
- package/src/security/Encryptor.js +142 -0
- package/src/security/JwtManager.d.ts +41 -0
- package/src/security/JwtManager.d.ts.map +1 -0
- package/src/security/JwtManager.js +229 -0
- package/src/security/UrlValidator.d.ts +21 -0
- package/src/security/UrlValidator.d.ts.map +1 -0
- package/src/security/UrlValidator.js +42 -0
- package/src/security/XssProtection.d.ts +24 -0
- package/src/security/XssProtection.d.ts.map +1 -0
- package/src/security/XssProtection.js +133 -0
- package/src/templates/TemplateRegistry.d.ts +40 -0
- package/src/templates/TemplateRegistry.d.ts.map +1 -0
- package/src/templates/TemplateRegistry.js +78 -0
- package/src/templates/TemplateRegistry.ts +91 -0
- package/src/templates/adapters/MySQLAdapter.ts.tpl +97 -0
- package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +101 -0
- package/src/templates/adapters/SQLServerAdapter.ts.tpl +95 -0
- package/src/templates/adapters/SQLiteAdapter.ts.tpl +189 -0
- package/src/templates/features/Auth.ts.tpl +40 -0
- package/src/templates/features/Queue.ts.tpl +75 -0
- package/src/templates/project/basic/.env.example.tpl +26 -0
- package/src/templates/project/basic/.env.tpl +164 -0
- package/src/templates/project/basic/README.md.tpl +13 -0
- package/src/templates/project/basic/app/Controllers/UserController.ts.tpl +155 -0
- package/src/templates/project/basic/app/Middleware/ProfilerMiddleware.ts.tpl +55 -0
- package/src/templates/project/basic/app/Middleware/index.ts.tpl +304 -0
- package/src/templates/project/basic/app/Models/Post.ts.tpl +30 -0
- package/src/templates/project/basic/app/Models/User.ts.tpl +53 -0
- package/src/templates/project/basic/config/SecretsManager.ts.tpl +453 -0
- package/src/templates/project/basic/config/app.ts.tpl +97 -0
- package/src/templates/project/basic/config/cache.ts.tpl +117 -0
- package/src/templates/project/basic/config/constants.ts.tpl +70 -0
- package/src/templates/project/basic/config/database.ts.tpl +152 -0
- package/src/templates/project/basic/config/env.ts.tpl +148 -0
- package/src/templates/project/basic/config/features.ts.tpl +57 -0
- package/src/templates/project/basic/config/index.ts.tpl +36 -0
- package/src/templates/project/basic/config/logger.ts.tpl +95 -0
- package/src/templates/project/basic/config/microservices.ts.tpl +104 -0
- package/src/templates/project/basic/config/queue.ts.tpl +134 -0
- package/src/templates/project/basic/config/security.ts.tpl +149 -0
- package/src/templates/project/basic/config/storage.ts.tpl +136 -0
- package/src/templates/project/basic/database/factories/.gitkeep.tpl +0 -0
- package/src/templates/project/basic/database/migrations/.gitkeep.tpl +0 -0
- package/src/templates/project/basic/database/migrations/index.ts.tpl +2 -0
- package/src/templates/project/basic/database/seeders/.gitkeep.tpl +0 -0
- package/src/templates/project/basic/package.json.tpl +22 -0
- package/src/templates/project/basic/routes/api.ts.tpl +135 -0
- package/src/templates/project/basic/src/index.ts.tpl +49 -0
- package/src/templates/project/basic/template.json +17 -0
- package/src/templates/project/basic/tsconfig.json.tpl +20 -0
- package/src/validation/ValidationError.d.ts +42 -0
- package/src/validation/ValidationError.d.ts.map +1 -0
- package/src/validation/ValidationError.js +53 -0
- package/src/validation/Validator.d.ts +60 -0
- package/src/validation/Validator.d.ts.map +1 -0
- package/src/validation/Validator.js +190 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Example Post Model
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { User } from '@app/Models/User';
|
|
6
|
+
import { type IModel, Model, type ModelConfig, type IRelationship } from '@zintrust/core';
|
|
7
|
+
|
|
8
|
+
export const PostConfig: ModelConfig = {
|
|
9
|
+
table: 'posts',
|
|
10
|
+
fillable: ['title', 'content', 'user_id'],
|
|
11
|
+
hidden: [],
|
|
12
|
+
timestamps: true,
|
|
13
|
+
casts: {
|
|
14
|
+
published_at: 'datetime',
|
|
15
|
+
is_published: 'boolean',
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Post Model
|
|
21
|
+
* Refactored to Functional Object pattern
|
|
22
|
+
*/
|
|
23
|
+
export const Post = Model.define(PostConfig, {
|
|
24
|
+
/**
|
|
25
|
+
* Get post's author
|
|
26
|
+
*/
|
|
27
|
+
author(model: IModel): IRelationship {
|
|
28
|
+
return model.belongsTo(User);
|
|
29
|
+
},
|
|
30
|
+
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User Model
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { Post } from '@app/Models/Post';
|
|
6
|
+
import { type IModel, Model } from '@zintrust/core';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* User Model Definition
|
|
10
|
+
*/
|
|
11
|
+
export const User = Model.define(
|
|
12
|
+
{
|
|
13
|
+
table: 'users',
|
|
14
|
+
fillable: ['name', 'email', 'password'],
|
|
15
|
+
hidden: ['password'],
|
|
16
|
+
timestamps: true,
|
|
17
|
+
casts: {
|
|
18
|
+
email_verified_at: 'datetime',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
/**
|
|
23
|
+
* Get user's profile
|
|
24
|
+
*/
|
|
25
|
+
profile(_model: IModel) {
|
|
26
|
+
return undefined; // Placeholder
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Get user's posts
|
|
31
|
+
*/
|
|
32
|
+
posts(model: IModel) {
|
|
33
|
+
return model.hasMany(Post);
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Check if user is admin
|
|
38
|
+
*/
|
|
39
|
+
isAdmin(model: IModel) {
|
|
40
|
+
return model.getAttribute('is_admin') === 1;
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Get user's full name
|
|
45
|
+
*/
|
|
46
|
+
getFullName(model: IModel) {
|
|
47
|
+
const name = model.getAttribute('name');
|
|
48
|
+
return typeof name === 'string' ? name : '';
|
|
49
|
+
},
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
export default User;
|
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Secrets Management Layer
|
|
3
|
+
* Abstracts secrets retrieval across different cloud platforms
|
|
4
|
+
* Supports: AWS Secrets Manager, Parameter Store, Cloudflare KV, Deno env
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Logger } from '@config/logger';
|
|
8
|
+
import { ErrorFactory } from '@zintrust/core';
|
|
9
|
+
|
|
10
|
+
export interface CloudflareKV {
|
|
11
|
+
get(key: string): Promise<string | null>;
|
|
12
|
+
put(key: string, value: string, options?: { expirationTtl?: number }): Promise<void>;
|
|
13
|
+
delete(key: string): Promise<void>;
|
|
14
|
+
list(options?: { prefix?: string }): Promise<{ keys: { name: string }[] }>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface SecretConfig {
|
|
18
|
+
platform: 'aws' | 'cloudflare' | 'deno' | 'local';
|
|
19
|
+
region?: string;
|
|
20
|
+
kv?: CloudflareKV; // Cloudflare KV namespace
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface SecretValue {
|
|
24
|
+
key: string;
|
|
25
|
+
value: string;
|
|
26
|
+
expiresAt?: number;
|
|
27
|
+
rotationEnabled?: boolean;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
let instance: SecretsManagerInstance | undefined;
|
|
31
|
+
|
|
32
|
+
interface SecretsManagerInstance {
|
|
33
|
+
getSecret(key: string, options?: GetSecretOptions): Promise<string>;
|
|
34
|
+
setSecret(key: string, value: string, options?: SetSecretOptions): Promise<void>;
|
|
35
|
+
deleteSecret(key: string): Promise<void>;
|
|
36
|
+
rotateSecret(key: string): Promise<void>;
|
|
37
|
+
listSecrets(pattern?: string): Promise<string[]>;
|
|
38
|
+
clearCache(key?: string): void;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Get secret value from appropriate backend
|
|
43
|
+
*/
|
|
44
|
+
async function runGetSecret(
|
|
45
|
+
config: SecretConfig,
|
|
46
|
+
cache: Map<string, { value: string; expiresAt: number }>,
|
|
47
|
+
key: string,
|
|
48
|
+
options?: GetSecretOptions
|
|
49
|
+
): Promise<string> {
|
|
50
|
+
// Check cache first
|
|
51
|
+
const cached = cache.get(key);
|
|
52
|
+
if (cached !== undefined && cached.expiresAt > Date.now()) {
|
|
53
|
+
return cached.value;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
let value: string;
|
|
57
|
+
|
|
58
|
+
switch (config.platform) {
|
|
59
|
+
case 'aws':
|
|
60
|
+
value = await getFromAWSSecretsManager(key);
|
|
61
|
+
break;
|
|
62
|
+
case 'cloudflare':
|
|
63
|
+
value = await getFromCloudflareKV(config, key);
|
|
64
|
+
break;
|
|
65
|
+
case 'deno':
|
|
66
|
+
value = await getFromDenoEnv(key);
|
|
67
|
+
break;
|
|
68
|
+
case 'local':
|
|
69
|
+
default:
|
|
70
|
+
value = await getFromEnv(key);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Cache the value
|
|
74
|
+
const ttl = options?.cacheTtl ?? 3600000; // 1 hour default
|
|
75
|
+
cache.set(key, {
|
|
76
|
+
value,
|
|
77
|
+
expiresAt: Date.now() + ttl,
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
return value;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Set secret value
|
|
85
|
+
*/
|
|
86
|
+
async function runSetSecret(
|
|
87
|
+
config: SecretConfig,
|
|
88
|
+
cache: Map<string, { value: string; expiresAt: number }>,
|
|
89
|
+
key: string,
|
|
90
|
+
value: string,
|
|
91
|
+
options?: SetSecretOptions
|
|
92
|
+
): Promise<void> {
|
|
93
|
+
switch (config.platform) {
|
|
94
|
+
case 'aws':
|
|
95
|
+
await setInAWSSecretsManager(key, value, options);
|
|
96
|
+
break;
|
|
97
|
+
case 'cloudflare':
|
|
98
|
+
await setInCloudflareKV(config, key, value, options);
|
|
99
|
+
break;
|
|
100
|
+
case 'deno':
|
|
101
|
+
throw ErrorFactory.createConfigError('Cannot set secrets in Deno environment');
|
|
102
|
+
case 'local':
|
|
103
|
+
default:
|
|
104
|
+
throw ErrorFactory.createConfigError('Cannot set secrets in local environment');
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Invalidate cache
|
|
108
|
+
cache.delete(key);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Delete secret
|
|
113
|
+
*/
|
|
114
|
+
async function runDeleteSecret(
|
|
115
|
+
config: SecretConfig,
|
|
116
|
+
cache: Map<string, { value: string; expiresAt: number }>,
|
|
117
|
+
key: string
|
|
118
|
+
): Promise<void> {
|
|
119
|
+
switch (config.platform) {
|
|
120
|
+
case 'aws':
|
|
121
|
+
await deleteFromAWSSecretsManager(key);
|
|
122
|
+
break;
|
|
123
|
+
case 'cloudflare':
|
|
124
|
+
await deleteFromCloudflareKV(config, key);
|
|
125
|
+
break;
|
|
126
|
+
case 'deno':
|
|
127
|
+
case 'local':
|
|
128
|
+
default:
|
|
129
|
+
throw ErrorFactory.createConfigError('Cannot delete secrets in this environment');
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Invalidate cache
|
|
133
|
+
cache.delete(key);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* SecretsManager implementation
|
|
138
|
+
* Refactored to Functional Object pattern
|
|
139
|
+
*/
|
|
140
|
+
const SecretsManagerImpl = {
|
|
141
|
+
/**
|
|
142
|
+
* Create a new secrets manager instance
|
|
143
|
+
*/
|
|
144
|
+
create(config: SecretConfig): SecretsManagerInstance {
|
|
145
|
+
const cache: Map<string, { value: string; expiresAt: number }> = new Map();
|
|
146
|
+
|
|
147
|
+
return {
|
|
148
|
+
/**
|
|
149
|
+
* Get secret value from appropriate backend
|
|
150
|
+
*/
|
|
151
|
+
async getSecret(key: string, options?: GetSecretOptions): Promise<string> {
|
|
152
|
+
return runGetSecret(config, cache, key, options);
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Set secret value
|
|
157
|
+
*/
|
|
158
|
+
async setSecret(key: string, value: string, options?: SetSecretOptions): Promise<void> {
|
|
159
|
+
return runSetSecret(config, cache, key, value, options);
|
|
160
|
+
},
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Delete secret
|
|
164
|
+
*/
|
|
165
|
+
async deleteSecret(key: string): Promise<void> {
|
|
166
|
+
return runDeleteSecret(config, cache, key);
|
|
167
|
+
},
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Rotate secret (trigger new secret generation)
|
|
171
|
+
*/
|
|
172
|
+
async rotateSecret(_key: string): Promise<void> {
|
|
173
|
+
if (config.platform === 'aws') {
|
|
174
|
+
// AWS Secrets Manager supports automatic rotation
|
|
175
|
+
throw ErrorFactory.createConfigError('Secret rotation not implemented');
|
|
176
|
+
}
|
|
177
|
+
throw ErrorFactory.createConfigError('Secret rotation not supported on this platform');
|
|
178
|
+
},
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Get all secrets matching pattern
|
|
182
|
+
*/
|
|
183
|
+
async listSecrets(pattern?: string): Promise<string[]> {
|
|
184
|
+
switch (config.platform) {
|
|
185
|
+
case 'aws':
|
|
186
|
+
return listFromAWSSecretsManager(pattern);
|
|
187
|
+
case 'cloudflare':
|
|
188
|
+
return listFromCloudflareKV(config, pattern);
|
|
189
|
+
case 'deno':
|
|
190
|
+
case 'local':
|
|
191
|
+
default:
|
|
192
|
+
return [];
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Clear cache (useful after rotation)
|
|
198
|
+
*/
|
|
199
|
+
clearCache(key?: string): void {
|
|
200
|
+
if (key === undefined) {
|
|
201
|
+
cache.clear();
|
|
202
|
+
} else {
|
|
203
|
+
cache.delete(key);
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* AWS Secrets Manager integration
|
|
212
|
+
*/
|
|
213
|
+
async function getFromAWSSecretsManager(key: string): Promise<string> {
|
|
214
|
+
try {
|
|
215
|
+
Logger.debug(`[AWS] Getting secret: ${key}`);
|
|
216
|
+
throw ErrorFactory.createConfigError('AWS SDK not available in core - use wrapper module');
|
|
217
|
+
} catch (error) {
|
|
218
|
+
throw ErrorFactory.createTryCatchError(
|
|
219
|
+
`Failed to retrieve secret from AWS: ${(error as Error).message}`,
|
|
220
|
+
error
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
async function setInAWSSecretsManager(
|
|
226
|
+
key: string,
|
|
227
|
+
_value: string,
|
|
228
|
+
_options?: SetSecretOptions
|
|
229
|
+
): Promise<void> {
|
|
230
|
+
Logger.info(`[AWS] Setting secret: ${key}`);
|
|
231
|
+
throw ErrorFactory.createConfigError('AWS SDK not available in core - use wrapper module');
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
async function deleteFromAWSSecretsManager(key: string): Promise<void> {
|
|
235
|
+
Logger.info(`[AWS] Deleting secret: ${key}`);
|
|
236
|
+
throw ErrorFactory.createConfigError('AWS SDK not available in core - use wrapper module');
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
async function listFromAWSSecretsManager(pattern?: string): Promise<string[]> {
|
|
240
|
+
Logger.info(`[AWS] Listing secrets with pattern: ${pattern ?? '*'}`);
|
|
241
|
+
return [];
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Cloudflare KV integration
|
|
246
|
+
*/
|
|
247
|
+
async function getFromCloudflareKV(config: SecretConfig, key: string): Promise<string> {
|
|
248
|
+
if (config.kv === undefined) {
|
|
249
|
+
throw ErrorFactory.createConfigError('Cloudflare KV namespace not configured');
|
|
250
|
+
}
|
|
251
|
+
const value = await config.kv.get(key);
|
|
252
|
+
if (value === null || value === '') {
|
|
253
|
+
throw ErrorFactory.createNotFoundError(`Secret not found: ${key}`, { key });
|
|
254
|
+
}
|
|
255
|
+
return value;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
async function setInCloudflareKV(
|
|
259
|
+
config: SecretConfig,
|
|
260
|
+
key: string,
|
|
261
|
+
value: string,
|
|
262
|
+
options?: SetSecretOptions
|
|
263
|
+
): Promise<void> {
|
|
264
|
+
if (config.kv === undefined) {
|
|
265
|
+
throw ErrorFactory.createConfigError('Cloudflare KV namespace not configured');
|
|
266
|
+
}
|
|
267
|
+
const ttl = options?.expirationTtl;
|
|
268
|
+
await config.kv.put(key, value, { expirationTtl: ttl });
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
async function deleteFromCloudflareKV(config: SecretConfig, key: string): Promise<void> {
|
|
272
|
+
if (config.kv === undefined) {
|
|
273
|
+
throw ErrorFactory.createConfigError('Cloudflare KV namespace not configured');
|
|
274
|
+
}
|
|
275
|
+
await config.kv.delete(key);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
async function listFromCloudflareKV(config: SecretConfig, pattern?: string): Promise<string[]> {
|
|
279
|
+
if (config.kv === undefined) {
|
|
280
|
+
throw ErrorFactory.createConfigError('Cloudflare KV namespace not configured');
|
|
281
|
+
}
|
|
282
|
+
const result = await config.kv.list({ prefix: pattern });
|
|
283
|
+
return result.keys.map((k: { name: string }) => k.name);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Deno environment integration
|
|
288
|
+
*/
|
|
289
|
+
async function getFromDenoEnv(key: string): Promise<string> {
|
|
290
|
+
const value = (
|
|
291
|
+
globalThis as unknown as Record<string, { env?: { get?: (key: string) => string } }>
|
|
292
|
+
)['Deno']?.env?.get?.(key);
|
|
293
|
+
if (value === undefined || value === null || value === '') {
|
|
294
|
+
throw ErrorFactory.createNotFoundError(`Secret not found: ${key}`, { key });
|
|
295
|
+
}
|
|
296
|
+
return value;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Local environment variables (Node.js)
|
|
301
|
+
*/
|
|
302
|
+
async function getFromEnv(key: string): Promise<string> {
|
|
303
|
+
const value = process.env[key];
|
|
304
|
+
if (value === undefined || value === null || value === '') {
|
|
305
|
+
throw ErrorFactory.createNotFoundError(`Secret not found: ${key}`, { key });
|
|
306
|
+
}
|
|
307
|
+
return value;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* SecretsManager - Unified interface for retrieving secrets
|
|
312
|
+
* Sealed namespace for immutability
|
|
313
|
+
*/
|
|
314
|
+
export const SecretsManager = Object.freeze({
|
|
315
|
+
/**
|
|
316
|
+
* Get or create singleton instance
|
|
317
|
+
*/
|
|
318
|
+
getInstance(config?: SecretConfig): SecretsManagerInstance {
|
|
319
|
+
if (instance === undefined && config !== undefined) {
|
|
320
|
+
instance = SecretsManagerImpl.create(config);
|
|
321
|
+
}
|
|
322
|
+
if (instance === undefined) {
|
|
323
|
+
throw ErrorFactory.createConfigError(
|
|
324
|
+
'SecretsManager not initialized. Call getInstance(config) first.'
|
|
325
|
+
);
|
|
326
|
+
}
|
|
327
|
+
return instance;
|
|
328
|
+
},
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Get secret value from appropriate backend
|
|
332
|
+
*/
|
|
333
|
+
async getSecret(key: string, options?: GetSecretOptions): Promise<string> {
|
|
334
|
+
return this.getInstance().getSecret(key, options);
|
|
335
|
+
},
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Set secret value
|
|
339
|
+
*/
|
|
340
|
+
async setSecret(key: string, value: string, options?: SetSecretOptions): Promise<void> {
|
|
341
|
+
return this.getInstance().setSecret(key, value, options);
|
|
342
|
+
},
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Delete secret
|
|
346
|
+
*/
|
|
347
|
+
async deleteSecret(key: string): Promise<void> {
|
|
348
|
+
return this.getInstance().deleteSecret(key);
|
|
349
|
+
},
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* Rotate secret (trigger new secret generation)
|
|
353
|
+
*/
|
|
354
|
+
async rotateSecret(key: string): Promise<void> {
|
|
355
|
+
return this.getInstance().rotateSecret(key);
|
|
356
|
+
},
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Get all secrets matching pattern
|
|
360
|
+
*/
|
|
361
|
+
async listSecrets(pattern?: string): Promise<string[]> {
|
|
362
|
+
return this.getInstance().listSecrets(pattern);
|
|
363
|
+
},
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Clear cache (useful after rotation)
|
|
367
|
+
*/
|
|
368
|
+
clearCache(key?: string): void {
|
|
369
|
+
this.getInstance().clearCache(key);
|
|
370
|
+
},
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Predefined secret keys
|
|
375
|
+
* Sealed namespace for immutability
|
|
376
|
+
*/
|
|
377
|
+
export const SECRETS = Object.freeze({
|
|
378
|
+
// Database credentials
|
|
379
|
+
DB_USERNAME: 'db/username',
|
|
380
|
+
// Secret identifier only (not a credential value)
|
|
381
|
+
DB_PASSWORD: 'db/password', // NOSONAR (typescript:S2068) - secret key name, not hardcoded password
|
|
382
|
+
DB_HOST: 'db/host',
|
|
383
|
+
DB_PORT: 'db/port',
|
|
384
|
+
DB_DATABASE: 'db/database',
|
|
385
|
+
|
|
386
|
+
// API keys
|
|
387
|
+
JWT_SECRET: 'jwt/secret',
|
|
388
|
+
JWT_REFRESH_SECRET: 'jwt/refresh-secret',
|
|
389
|
+
|
|
390
|
+
// Encryption
|
|
391
|
+
ENCRYPTION_KEY: 'encryption/key',
|
|
392
|
+
ENCRYPTION_IV: 'encryption/iv',
|
|
393
|
+
|
|
394
|
+
// Third-party APIs
|
|
395
|
+
STRIPE_API_KEY: 'stripe/api-key',
|
|
396
|
+
STRIPE_WEBHOOK_SECRET: 'stripe/webhook-secret',
|
|
397
|
+
SENDGRID_API_KEY: 'sendgrid/api-key',
|
|
398
|
+
GITHUB_TOKEN: 'github/token',
|
|
399
|
+
|
|
400
|
+
// Session/CSRF
|
|
401
|
+
SESSION_SECRET: 'session/secret',
|
|
402
|
+
CSRF_SECRET: 'csrf/secret',
|
|
403
|
+
} as const);
|
|
404
|
+
|
|
405
|
+
export interface GetSecretOptions {
|
|
406
|
+
cacheTtl?: number; // Cache time-to-live in milliseconds
|
|
407
|
+
throwIfMissing?: boolean;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
export interface SetSecretOptions {
|
|
411
|
+
expirationTtl?: number; // Expiration time-to-live in seconds
|
|
412
|
+
metadata?: Record<string, unknown>;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* Helper to get database credentials using secrets manager
|
|
417
|
+
*/
|
|
418
|
+
export async function getDatabaseCredentials(): Promise<DatabaseCredentials> {
|
|
419
|
+
const manager = SecretsManager.getInstance();
|
|
420
|
+
|
|
421
|
+
return {
|
|
422
|
+
username: await manager.getSecret(SECRETS.DB_USERNAME),
|
|
423
|
+
password: await manager.getSecret(SECRETS.DB_PASSWORD),
|
|
424
|
+
host: await manager.getSecret(SECRETS.DB_HOST),
|
|
425
|
+
port: Number.parseInt(await manager.getSecret(SECRETS.DB_PORT), 10),
|
|
426
|
+
database: await manager.getSecret(SECRETS.DB_DATABASE),
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
/**
|
|
431
|
+
* Helper to get JWT secrets
|
|
432
|
+
*/
|
|
433
|
+
export async function getJwtSecrets(): Promise<JwtSecrets> {
|
|
434
|
+
const manager = SecretsManager.getInstance();
|
|
435
|
+
|
|
436
|
+
return {
|
|
437
|
+
secret: await manager.getSecret(SECRETS.JWT_SECRET),
|
|
438
|
+
refreshSecret: await manager.getSecret(SECRETS.JWT_REFRESH_SECRET),
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
export interface DatabaseCredentials {
|
|
443
|
+
username: string;
|
|
444
|
+
password: string;
|
|
445
|
+
host: string;
|
|
446
|
+
port: number;
|
|
447
|
+
database: string;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
export interface JwtSecrets {
|
|
451
|
+
secret: string;
|
|
452
|
+
refreshSecret: string;
|
|
453
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application Configuration
|
|
3
|
+
* Core application settings
|
|
4
|
+
* Sealed namespace for immutability
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Env } from '@config/env';
|
|
8
|
+
|
|
9
|
+
const getSafeEnv = (): NodeJS.ProcessEnv => {
|
|
10
|
+
const baseEnv: Partial<NodeJS.ProcessEnv> = typeof process === 'undefined' ? {} : process.env;
|
|
11
|
+
|
|
12
|
+
return {
|
|
13
|
+
...(baseEnv as NodeJS.ProcessEnv),
|
|
14
|
+
|
|
15
|
+
// Ensure required keys exist (env.d.ts augments ProcessEnv with required fields)
|
|
16
|
+
NODE_ENV: baseEnv.NODE_ENV ?? (Env.NODE_ENV as NodeJS.ProcessEnv['NODE_ENV']),
|
|
17
|
+
USE_RAW_QRY: baseEnv.USE_RAW_QRY ?? (Env.get('USE_RAW_QRY') || undefined),
|
|
18
|
+
SERVICE_API_KEY: baseEnv.SERVICE_API_KEY ?? Env.get('SERVICE_API_KEY', ''),
|
|
19
|
+
SERVICE_JWT_SECRET: baseEnv.SERVICE_JWT_SECRET ?? Env.get('SERVICE_JWT_SECRET', ''),
|
|
20
|
+
BASE_URL: baseEnv.BASE_URL ?? Env.get('BASE_URL', ''),
|
|
21
|
+
MODE: baseEnv.MODE ?? Env.get('MODE', ''),
|
|
22
|
+
|
|
23
|
+
// Hardening for child-process usage
|
|
24
|
+
PATH: Env.SAFE_PATH,
|
|
25
|
+
npm_config_scripts_prepend_node_path: 'true',
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const appConfigObj = {
|
|
30
|
+
/**
|
|
31
|
+
* Application name
|
|
32
|
+
*/
|
|
33
|
+
name: Env.APP_NAME,
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Application environment
|
|
37
|
+
*/
|
|
38
|
+
environment: Env.NODE_ENV as 'development' | 'production' | 'testing',
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Application port
|
|
42
|
+
*/
|
|
43
|
+
port: Env.PORT,
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Application host
|
|
47
|
+
*/
|
|
48
|
+
host: Env.HOST,
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Is development environment
|
|
52
|
+
*/
|
|
53
|
+
isDevelopment(): boolean {
|
|
54
|
+
return this.environment === 'development';
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Is production environment
|
|
59
|
+
*/
|
|
60
|
+
isProduction(): boolean {
|
|
61
|
+
return this.environment === 'production';
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Is testing environment
|
|
66
|
+
*/
|
|
67
|
+
isTesting(): boolean {
|
|
68
|
+
return this.environment === 'testing';
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Application debug mode
|
|
73
|
+
*/
|
|
74
|
+
debug: Env.DEBUG,
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Application timezone
|
|
78
|
+
*/
|
|
79
|
+
timezone: Env.get('APP_TIMEZONE', 'UTC'),
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Request timeout (milliseconds)
|
|
83
|
+
*/
|
|
84
|
+
requestTimeout: Env.getInt('REQUEST_TIMEOUT', 30000),
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Max request body size
|
|
88
|
+
*/
|
|
89
|
+
maxBodySize: Env.get('MAX_BODY_SIZE', '10mb'),
|
|
90
|
+
|
|
91
|
+
getSafeEnv,
|
|
92
|
+
} as const;
|
|
93
|
+
|
|
94
|
+
export const appConfig = Object.freeze(appConfigObj);
|
|
95
|
+
export { getSafeEnv };
|
|
96
|
+
|
|
97
|
+
export type AppConfig = typeof appConfig;
|