@zintrust/core 0.1.19 → 0.1.21
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 +10 -10
- package/bin/zintrust-main.d.ts.map +1 -1
- package/bin/zintrust-main.js +9 -0
- package/package.json +3 -2
- package/public/error-pages/404.html +145 -0
- package/public/error-pages/500.html +266 -0
- package/public/error-pages/error.css +628 -0
- package/public/error-pages/error.js +428 -0
- package/public/zintrust.svg +30 -0
- package/routes/api.d.ts.map +1 -1
- package/routes/api.js +41 -17
- package/routes/metrics.d.ts +9 -0
- package/routes/metrics.d.ts.map +1 -0
- package/routes/metrics.js +20 -0
- package/routes/openapi.d.ts +9 -0
- package/routes/openapi.d.ts.map +1 -0
- package/routes/openapi.js +76 -0
- package/src/boot/Application.d.ts +2 -2
- package/src/boot/Application.d.ts.map +1 -1
- package/src/boot/Application.js +66 -13
- package/src/boot/Server.d.ts +3 -2
- package/src/boot/Server.d.ts.map +1 -1
- package/src/boot/Server.js +39 -165
- package/src/boot/bootstrap.js +2 -0
- package/src/cache/Cache.d.ts +1 -1
- package/src/cache/Cache.d.ts.map +1 -1
- package/src/cache/CacheDriver.d.ts +4 -0
- package/src/cache/CacheDriver.d.ts.map +1 -1
- package/src/cache/drivers/KVDriver.d.ts +1 -1
- package/src/cache/drivers/KVDriver.d.ts.map +1 -1
- package/src/cache/drivers/MemoryDriver.d.ts +1 -1
- package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
- package/src/cache/drivers/MemoryDriver.js +16 -0
- package/src/cache/drivers/MongoDriver.d.ts +1 -1
- package/src/cache/drivers/MongoDriver.d.ts.map +1 -1
- package/src/cache/drivers/RedisDriver.d.ts +1 -1
- package/src/cache/drivers/RedisDriver.d.ts.map +1 -1
- package/src/cli/CLI.d.ts.map +1 -1
- package/src/cli/CLI.js +10 -4
- package/src/cli/commands/AddCommand.d.ts +2 -2
- package/src/cli/commands/AddCommand.d.ts.map +1 -1
- package/src/cli/commands/AddCommand.js +135 -58
- package/src/cli/commands/ConfigCommand.d.ts +1 -1
- package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
- package/src/cli/commands/CreateCommand.d.ts +15 -0
- package/src/cli/commands/CreateCommand.d.ts.map +1 -0
- package/src/cli/commands/CreateCommand.js +143 -0
- package/src/cli/commands/D1MigrateCommand.d.ts +1 -1
- package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
- package/src/cli/commands/D1MigrateCommand.js +16 -20
- package/src/cli/commands/DbSeedCommand.d.ts +9 -0
- package/src/cli/commands/DbSeedCommand.d.ts.map +1 -0
- package/src/cli/commands/DbSeedCommand.js +171 -0
- package/src/cli/commands/DebugCommand.d.ts +1 -1
- package/src/cli/commands/DebugCommand.d.ts.map +1 -1
- package/src/cli/commands/FixCommand.d.ts +1 -1
- package/src/cli/commands/FixCommand.d.ts.map +1 -1
- package/src/cli/commands/JwtDevCommand.d.ts +8 -0
- package/src/cli/commands/JwtDevCommand.d.ts.map +1 -0
- package/src/cli/commands/JwtDevCommand.js +114 -0
- package/src/cli/commands/KeyGenerateCommand.d.ts +1 -1
- package/src/cli/commands/KeyGenerateCommand.d.ts.map +1 -1
- package/src/cli/commands/LogsCommand.d.ts +2 -2
- package/src/cli/commands/LogsCommand.d.ts.map +1 -1
- package/src/cli/commands/LogsCommand.js +36 -2
- package/src/cli/commands/MakeMailTemplateCommand.d.ts +1 -1
- package/src/cli/commands/MakeMailTemplateCommand.d.ts.map +1 -1
- package/src/cli/commands/MakeNotificationTemplateCommand.d.ts +1 -1
- package/src/cli/commands/MakeNotificationTemplateCommand.d.ts.map +1 -1
- package/src/cli/commands/MigrateCommand.d.ts +1 -1
- package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
- package/src/cli/commands/MigrateCommand.js +324 -35
- package/src/cli/commands/NewCommand.d.ts +1 -1
- package/src/cli/commands/NewCommand.d.ts.map +1 -1
- package/src/cli/commands/NewCommand.js +12 -4
- package/src/cli/commands/PluginCommand.d.ts +1 -1
- package/src/cli/commands/PluginCommand.d.ts.map +1 -1
- package/src/cli/commands/PrepareCommand.d.ts +1 -1
- package/src/cli/commands/PrepareCommand.d.ts.map +1 -1
- package/src/cli/commands/QACommand.d.ts +2 -2
- package/src/cli/commands/QACommand.d.ts.map +1 -1
- package/src/cli/commands/RoutesCommand.d.ts +10 -0
- package/src/cli/commands/RoutesCommand.d.ts.map +1 -0
- package/src/cli/commands/RoutesCommand.js +242 -0
- package/src/cli/commands/SimulateCommand.d.ts +1 -1
- package/src/cli/commands/SimulateCommand.d.ts.map +1 -1
- package/src/cli/commands/index.d.ts +3 -0
- package/src/cli/commands/index.d.ts.map +1 -1
- package/src/cli/commands/index.js +3 -0
- package/src/cli/config/ConfigManager.d.ts +1 -1
- package/src/cli/config/ConfigManager.d.ts.map +1 -1
- package/src/cli/config/ConfigValidator.d.ts +1 -1
- package/src/cli/config/ConfigValidator.d.ts.map +1 -1
- package/src/cli/config/ConfigValidator.js +1 -1
- package/src/cli/d1/D1SqlMigrations.d.ts +20 -0
- package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -0
- package/src/cli/d1/D1SqlMigrations.js +229 -0
- package/src/cli/d1/WranglerConfig.d.ts +4 -0
- package/src/cli/d1/WranglerConfig.d.ts.map +1 -0
- package/src/cli/d1/WranglerConfig.js +122 -0
- package/src/cli/d1/WranglerD1.d.ts +11 -0
- package/src/cli/d1/WranglerD1.d.ts.map +1 -0
- package/src/cli/d1/WranglerD1.js +16 -0
- package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/ControllerGenerator.js +76 -26
- package/src/cli/scaffolding/FactoryGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/FactoryGenerator.js +3 -1
- package/src/cli/scaffolding/GovernanceScaffolder.d.ts +23 -0
- package/src/cli/scaffolding/GovernanceScaffolder.d.ts.map +1 -0
- package/src/cli/scaffolding/GovernanceScaffolder.js +327 -0
- package/src/cli/scaffolding/MigrationGenerator.d.ts +10 -0
- package/src/cli/scaffolding/MigrationGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/MigrationGenerator.js +137 -51
- package/src/cli/scaffolding/ModelGenerator.js +1 -1
- package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
- package/src/cli/scaffolding/ProjectScaffolder.js +36 -4
- package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/RouteGenerator.js +79 -43
- package/src/cli/scaffolding/SeederGenerator.d.ts +5 -0
- package/src/cli/scaffolding/SeederGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/SeederGenerator.js +63 -15
- package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
- package/src/cli/scaffolding/ServiceScaffolder.js +28 -7
- package/src/cli/scaffolding/index.d.ts +2 -0
- package/src/cli/scaffolding/index.d.ts.map +1 -1
- package/src/cli/scaffolding/index.js +1 -0
- package/src/common/index.d.ts +8 -0
- package/src/common/index.d.ts.map +1 -1
- package/src/common/index.js +28 -0
- package/src/common/utility.d.ts +38 -0
- package/src/common/utility.d.ts.map +1 -0
- package/src/common/utility.js +101 -0
- package/src/config/FileLogWriter.d.ts +2 -1
- package/src/config/FileLogWriter.d.ts.map +1 -1
- package/src/config/FileLogWriter.js +83 -2
- package/src/config/app.d.ts.map +1 -1
- package/src/config/app.js +3 -1
- package/src/config/broadcast.d.ts +14 -28
- package/src/config/broadcast.d.ts.map +1 -1
- package/src/config/broadcast.js +69 -35
- package/src/config/cache.d.ts +13 -45
- package/src/config/cache.d.ts.map +1 -1
- package/src/config/cache.js +69 -25
- package/src/config/cloudflare.d.ts +1 -1
- package/src/config/cloudflare.d.ts.map +1 -1
- package/src/config/database.d.ts +22 -64
- package/src/config/database.d.ts.map +1 -1
- package/src/config/database.js +191 -37
- package/src/config/env.d.ts +12 -0
- package/src/config/env.d.ts.map +1 -1
- package/src/config/env.js +14 -0
- package/src/config/index.d.ts +33 -137
- package/src/config/index.d.ts.map +1 -1
- package/src/config/logging/KvLogger.js +1 -1
- package/src/config/logging/SlackLogger.js +2 -2
- package/src/config/mail.d.ts +19 -55
- package/src/config/mail.d.ts.map +1 -1
- package/src/config/mail.js +63 -21
- package/src/config/middleware.d.ts +44 -1
- package/src/config/middleware.d.ts.map +1 -1
- package/src/config/middleware.js +157 -5
- package/src/config/notification.d.ts +14 -27
- package/src/config/notification.d.ts.map +1 -1
- package/src/config/notification.js +82 -36
- package/src/config/queue.d.ts +21 -51
- package/src/config/queue.d.ts.map +1 -1
- package/src/config/queue.js +72 -27
- package/src/config/security.d.ts +1 -1
- package/src/config/security.js +1 -1
- package/src/config/storage.d.ts +27 -34
- package/src/config/storage.d.ts.map +1 -1
- package/src/config/storage.js +97 -56
- package/src/config/type.d.ts +13 -2
- package/src/config/type.d.ts.map +1 -1
- package/src/events/EventDispatcher.d.ts.map +1 -1
- package/src/events/EventDispatcher.js +6 -4
- package/src/exceptions/ZintrustError.d.ts +7 -0
- package/src/exceptions/ZintrustError.d.ts.map +1 -1
- package/src/exceptions/ZintrustError.js +56 -0
- package/src/features/Auth.d.ts +1 -1
- package/src/features/Auth.d.ts.map +1 -1
- package/src/features/Auth.js +3 -3
- package/src/features/Queue.js +1 -1
- package/src/functions/cloudflare.d.ts.map +1 -1
- package/src/functions/cloudflare.js +3 -14
- package/src/functions/deno.d.ts.map +1 -1
- package/src/functions/deno.js +3 -14
- package/src/functions/lambda.d.ts.map +1 -1
- package/src/functions/lambda.js +3 -14
- package/src/health/StartupHealthChecks.js +1 -1
- package/src/http/Controller.d.ts +2 -2
- package/src/http/Controller.d.ts.map +1 -1
- package/src/http/FileUpload.d.ts +68 -0
- package/src/http/FileUpload.d.ts.map +1 -0
- package/src/http/FileUpload.js +120 -0
- package/src/http/Kernel.d.ts +5 -5
- package/src/http/Kernel.d.ts.map +1 -1
- package/src/http/Kernel.js +139 -23
- package/src/http/Request.d.ts +20 -1
- package/src/http/Request.d.ts.map +1 -1
- package/src/http/Request.js +23 -0
- package/src/http/RequestContext.d.ts +6 -0
- package/src/http/RequestContext.d.ts.map +1 -1
- package/src/http/RequestContext.js +77 -1
- package/src/http/Response.d.ts +1 -1
- package/src/http/Response.d.ts.map +1 -1
- package/src/http/ValidationHelper.d.ts +78 -0
- package/src/http/ValidationHelper.d.ts.map +1 -0
- package/src/http/ValidationHelper.js +121 -0
- package/src/http/error-pages/ErrorPageRenderer.d.ts +17 -0
- package/src/http/error-pages/ErrorPageRenderer.d.ts.map +1 -0
- package/src/http/error-pages/ErrorPageRenderer.js +88 -0
- package/src/http/middleware/BodyParsingMiddleware.d.ts +12 -0
- package/src/http/middleware/BodyParsingMiddleware.d.ts.map +1 -0
- package/src/http/middleware/BodyParsingMiddleware.js +251 -0
- package/src/http/middleware/FileUploadMiddleware.d.ts +12 -0
- package/src/http/middleware/FileUploadMiddleware.d.ts.map +1 -0
- package/src/http/middleware/FileUploadMiddleware.js +74 -0
- package/src/http/parsers/BodyParsers.d.ts +32 -0
- package/src/http/parsers/BodyParsers.d.ts.map +1 -0
- package/src/http/parsers/BodyParsers.js +159 -0
- package/src/http/parsers/MultipartParser.d.ts +33 -0
- package/src/http/parsers/MultipartParser.d.ts.map +1 -0
- package/src/http/parsers/MultipartParser.js +156 -0
- package/src/http/parsers/MultipartParserRegistry.d.ts +34 -0
- package/src/http/parsers/MultipartParserRegistry.d.ts.map +1 -0
- package/src/http/parsers/MultipartParserRegistry.js +20 -0
- package/src/http/validated.d.ts +12 -0
- package/src/http/validated.d.ts.map +1 -0
- package/src/http/validated.js +41 -0
- package/src/index.d.ts +73 -12
- package/src/index.d.ts.map +1 -1
- package/src/index.js +60 -5
- package/src/microservices/PostgresAdapter.d.ts.map +1 -1
- package/src/microservices/PostgresAdapter.js +0 -1
- package/src/microservices/RequestTracingMiddleware.d.ts +2 -2
- package/src/microservices/RequestTracingMiddleware.d.ts.map +1 -1
- package/src/microservices/RequestTracingMiddleware.js +3 -0
- package/src/microservices/ServiceAuthMiddleware.d.ts +2 -2
- package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -1
- package/src/middleware/AuthMiddleware.d.ts +10 -0
- package/src/middleware/AuthMiddleware.d.ts.map +1 -0
- package/src/middleware/AuthMiddleware.js +16 -0
- package/src/middleware/CsrfMiddleware.d.ts +11 -1
- package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
- package/src/middleware/CsrfMiddleware.js +33 -0
- package/src/middleware/JwtAuthMiddleware.d.ts +11 -0
- package/src/middleware/JwtAuthMiddleware.d.ts.map +1 -0
- package/src/middleware/JwtAuthMiddleware.js +73 -0
- package/src/middleware/LoggingMiddleware.d.ts.map +1 -1
- package/src/middleware/LoggingMiddleware.js +8 -3
- package/src/middleware/MiddlewareStack.d.ts +2 -2
- package/src/middleware/MiddlewareStack.d.ts.map +1 -1
- package/src/middleware/RateLimiter.d.ts +2 -2
- package/src/middleware/RateLimiter.d.ts.map +1 -1
- package/src/middleware/SanitizeBodyMiddleware.d.ts +12 -0
- package/src/middleware/SanitizeBodyMiddleware.d.ts.map +1 -0
- package/src/middleware/SanitizeBodyMiddleware.js +31 -0
- package/src/middleware/SecurityMiddleware.d.ts +1 -1
- package/src/middleware/SecurityMiddleware.d.ts.map +1 -1
- package/src/middleware/SessionMiddleware.d.ts +1 -1
- package/src/middleware/SessionMiddleware.d.ts.map +1 -1
- package/src/middleware/ValidationMiddleware.d.ts +25 -0
- package/src/middleware/ValidationMiddleware.d.ts.map +1 -0
- package/src/middleware/ValidationMiddleware.js +251 -0
- package/src/migrations/MigrationDiscovery.d.ts +5 -0
- package/src/migrations/MigrationDiscovery.d.ts.map +1 -0
- package/src/migrations/MigrationDiscovery.js +16 -0
- package/src/migrations/MigrationLoader.d.ts +5 -0
- package/src/migrations/MigrationLoader.d.ts.map +1 -0
- package/src/migrations/MigrationLoader.js +43 -0
- package/src/migrations/MigrationLock.d.ts +4 -0
- package/src/migrations/MigrationLock.d.ts.map +1 -0
- package/src/migrations/MigrationLock.js +33 -0
- package/src/migrations/Migrator.d.ts +23 -0
- package/src/migrations/Migrator.d.ts.map +1 -0
- package/src/migrations/Migrator.js +4 -0
- package/src/migrations/MigratorFactory.d.ts +25 -0
- package/src/migrations/MigratorFactory.d.ts.map +1 -0
- package/src/migrations/MigratorFactory.js +339 -0
- package/src/migrations/schema/Blueprint.d.ts +5 -0
- package/src/migrations/schema/Blueprint.d.ts.map +1 -0
- package/src/migrations/schema/Blueprint.js +189 -0
- package/src/migrations/schema/Schema.d.ts +8 -0
- package/src/migrations/schema/Schema.d.ts.map +1 -0
- package/src/migrations/schema/Schema.js +141 -0
- package/src/migrations/schema/SchemaCompiler.d.ts +20 -0
- package/src/migrations/schema/SchemaCompiler.d.ts.map +1 -0
- package/src/migrations/schema/SchemaCompiler.js +262 -0
- package/src/migrations/schema/index.d.ts +5 -0
- package/src/migrations/schema/index.d.ts.map +1 -0
- package/src/migrations/schema/index.js +3 -0
- package/src/migrations/schema/types.d.ts +86 -0
- package/src/migrations/schema/types.d.ts.map +1 -0
- package/src/migrations/schema/types.js +1 -0
- package/src/migrations/types.d.ts +45 -0
- package/src/migrations/types.d.ts.map +1 -0
- package/src/migrations/types.js +1 -0
- package/src/node-singletons/crypto.d.ts +1 -1
- package/src/node-singletons/crypto.d.ts.map +1 -1
- package/src/node-singletons/crypto.js +1 -1
- 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 +1 -1
- package/src/node-singletons/util.d.ts +6 -0
- package/src/node-singletons/util.d.ts.map +1 -0
- package/src/node-singletons/util.js +5 -0
- package/src/node.d.ts +3 -1
- package/src/node.d.ts.map +1 -1
- package/src/node.js +6 -2
- package/src/observability/OpenTelemetry.d.ts +62 -0
- package/src/observability/OpenTelemetry.d.ts.map +1 -0
- package/src/observability/OpenTelemetry.js +167 -0
- package/src/observability/PrometheusMetrics.d.ts +25 -0
- package/src/observability/PrometheusMetrics.d.ts.map +1 -0
- package/src/observability/PrometheusMetrics.js +114 -0
- package/src/openapi/OpenApiGenerator.d.ts +68 -0
- package/src/openapi/OpenApiGenerator.d.ts.map +1 -0
- package/src/openapi/OpenApiGenerator.js +287 -0
- package/src/orm/Database.d.ts +5 -2
- package/src/orm/Database.d.ts.map +1 -1
- package/src/orm/Database.js +219 -63
- package/src/orm/DatabaseAdapter.d.ts +14 -0
- package/src/orm/DatabaseAdapter.d.ts.map +1 -1
- package/src/orm/DatabaseAdapterRegistry.d.ts.map +1 -1
- package/src/orm/DatabaseAdapterRegistry.js +3 -1
- package/src/orm/DatabaseRuntimeRegistration.d.ts.map +1 -1
- package/src/orm/DatabaseRuntimeRegistration.js +12 -0
- package/src/orm/Model.d.ts +30 -2
- package/src/orm/Model.d.ts.map +1 -1
- package/src/orm/Model.js +255 -62
- package/src/orm/QueryBuilder.d.ts +22 -1
- package/src/orm/QueryBuilder.d.ts.map +1 -1
- package/src/orm/QueryBuilder.js +406 -99
- package/src/orm/Relationships.d.ts +7 -1
- package/src/orm/Relationships.d.ts.map +1 -1
- package/src/orm/Relationships.js +18 -0
- package/src/orm/SchemaCompiler.d.ts +9 -0
- package/src/orm/SchemaCompiler.d.ts.map +1 -0
- package/src/orm/SchemaCompiler.js +145 -0
- package/src/orm/adapters/D1Adapter.d.ts +1 -1
- package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
- package/src/orm/adapters/MySQLAdapter.d.ts +1 -1
- package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -1
- package/src/orm/adapters/MySQLAdapter.js +88 -69
- package/src/orm/adapters/PostgreSQLAdapter.d.ts +1 -1
- package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/src/orm/adapters/PostgreSQLAdapter.js +88 -69
- package/src/orm/adapters/SQLServerAdapter.d.ts +1 -1
- package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -1
- package/src/orm/adapters/SQLiteAdapter.d.ts +1 -1
- package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/src/orm/adapters/SQLiteAdapter.js +59 -3
- package/src/orm/maintenance/SqliteMaintenance.d.ts +5 -0
- package/src/orm/maintenance/SqliteMaintenance.d.ts.map +1 -0
- package/src/orm/maintenance/SqliteMaintenance.js +14 -0
- package/src/orm/migrations/MigrationStore.d.ts +38 -0
- package/src/orm/migrations/MigrationStore.d.ts.map +1 -0
- package/src/orm/migrations/MigrationStore.js +157 -0
- package/src/performance/CodeGenerationBenchmark.d.ts.map +1 -1
- package/src/performance/Optimizer.d.ts +7 -6
- package/src/performance/Optimizer.d.ts.map +1 -1
- package/src/performance/Optimizer.js +170 -55
- package/src/profiling/MemoryProfiler.d.ts +1 -1
- package/src/profiling/MemoryProfiler.d.ts.map +1 -1
- package/src/profiling/N1Detector.d.ts +1 -1
- package/src/profiling/N1Detector.d.ts.map +1 -1
- package/src/profiling/QueryLogger.d.ts +1 -1
- package/src/profiling/QueryLogger.d.ts.map +1 -1
- package/src/profiling/RequestProfiler.d.ts +3 -3
- package/src/profiling/RequestProfiler.d.ts.map +1 -1
- package/src/routes/metrics.d.ts +2 -0
- package/src/routes/metrics.d.ts.map +1 -0
- package/src/routes/metrics.js +1 -0
- package/src/routing/CoreRoutes.d.ts +12 -0
- package/src/routing/CoreRoutes.d.ts.map +1 -0
- package/src/routing/CoreRoutes.js +151 -0
- package/src/routing/RouteRegistry.d.ts +39 -0
- package/src/routing/RouteRegistry.d.ts.map +1 -0
- package/src/routing/RouteRegistry.js +44 -0
- package/src/routing/Router.d.ts +26 -9
- package/src/routing/Router.d.ts.map +1 -1
- package/src/routing/Router.js +79 -35
- package/src/routing/common.d.ts +15 -0
- package/src/routing/common.d.ts.map +1 -0
- package/src/routing/common.js +47 -0
- package/src/routing/doc.d.ts +27 -0
- package/src/routing/doc.d.ts.map +1 -0
- package/src/routing/doc.js +110 -0
- package/src/routing/error.d.ts +21 -0
- package/src/routing/error.d.ts.map +1 -0
- package/src/routing/error.js +126 -0
- package/src/routing/errorPages.d.ts +14 -0
- package/src/routing/errorPages.d.ts.map +1 -0
- package/src/routing/errorPages.js +103 -0
- package/src/routing/publicRoot.d.ts +27 -0
- package/src/routing/publicRoot.d.ts.map +1 -0
- package/src/routing/publicRoot.js +110 -0
- package/src/runtime/PluginAutoImports.d.ts +21 -0
- package/src/runtime/PluginAutoImports.d.ts.map +1 -0
- package/src/runtime/PluginAutoImports.js +59 -0
- package/src/runtime/PluginManager.d.ts +1 -5
- package/src/runtime/PluginManager.d.ts.map +1 -1
- package/src/runtime/PluginManager.js +25 -18
- package/src/runtime/RuntimeDetector.d.ts +1 -1
- package/src/runtime/RuntimeDetector.d.ts.map +1 -1
- package/src/runtime/StartupConfigFileRegistry.d.ts +20 -0
- package/src/runtime/StartupConfigFileRegistry.d.ts.map +1 -0
- package/src/runtime/StartupConfigFileRegistry.js +44 -0
- package/src/runtime/adapters/CloudflareAdapter.d.ts +1 -1
- package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
- package/src/runtime/adapters/CloudflareAdapter.js +1 -1
- package/src/runtime/adapters/DenoAdapter.d.ts +1 -1
- package/src/runtime/adapters/DenoAdapter.d.ts.map +1 -1
- package/src/runtime/adapters/DenoAdapter.js +1 -1
- package/src/runtime/adapters/LambdaAdapter.d.ts +1 -1
- package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -1
- package/src/runtime/adapters/LambdaAdapter.js +1 -1
- package/src/runtime/adapters/NodeServerAdapter.d.ts +1 -1
- package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -1
- package/src/runtime/getKernel.d.ts +9 -0
- package/src/runtime/getKernel.d.ts.map +1 -0
- package/src/runtime/getKernel.js +27 -0
- package/src/runtime/useFileLoader.d.ts +26 -0
- package/src/runtime/useFileLoader.d.ts.map +1 -0
- package/src/runtime/useFileLoader.js +188 -0
- package/src/scripts/TemplateImportsCheck.js +40 -0
- package/src/scripts/TemplateSync.js +90 -24
- package/src/security/Encryptor.d.ts.map +1 -1
- package/src/security/Encryptor.js +64 -7
- package/src/security/JwtManager.d.ts +1 -0
- package/src/security/JwtManager.d.ts.map +1 -1
- package/src/security/JwtManager.js +33 -0
- package/src/security/Sanitizer.d.ts +76 -0
- package/src/security/Sanitizer.d.ts.map +1 -0
- package/src/security/Sanitizer.js +412 -0
- package/src/security/TokenRevocation.d.ts +7 -0
- package/src/security/TokenRevocation.d.ts.map +1 -0
- package/src/security/TokenRevocation.js +57 -0
- package/src/security/XssProtection.d.ts.map +1 -1
- package/src/security/XssProtection.js +62 -14
- package/src/seeders/SeederDiscovery.d.ts +5 -0
- package/src/seeders/SeederDiscovery.d.ts.map +1 -0
- package/src/seeders/SeederDiscovery.js +21 -0
- package/src/seeders/SeederLoader.d.ts +5 -0
- package/src/seeders/SeederLoader.d.ts.map +1 -0
- package/src/seeders/SeederLoader.js +60 -0
- package/src/seeders/types.d.ts +18 -0
- package/src/seeders/types.d.ts.map +1 -0
- package/src/seeders/types.js +1 -0
- package/src/session/SessionManager.js +1 -1
- package/src/templates/adapters/MySQLAdapter.ts.tpl +109 -85
- package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +129 -88
- package/src/templates/adapters/SQLServerAdapter.ts.tpl +5 -9
- package/src/templates/adapters/SQLiteAdapter.ts.tpl +78 -11
- package/src/templates/features/Queue.ts.tpl +3 -2
- package/src/templates/project/basic/app/Controllers/AuthController.ts.tpl +217 -0
- package/src/templates/project/basic/app/Controllers/UserController.ts.tpl +1 -12
- package/src/templates/project/basic/app/Types/controller.ts.tpl +46 -0
- package/src/templates/project/basic/config/FileLogWriter.ts.tpl +5 -236
- package/src/templates/project/basic/config/SecretsManager.ts.tpl +10 -447
- package/src/templates/project/basic/config/StartupConfigValidator.ts.tpl +9 -268
- package/src/templates/project/basic/config/app.ts.tpl +13 -153
- package/src/templates/project/basic/config/broadcast.ts.tpl +29 -126
- package/src/templates/project/basic/config/cache.ts.tpl +12 -70
- package/src/templates/project/basic/config/cloudflare.ts.tpl +4 -39
- package/src/templates/project/basic/config/constants.ts.tpl +9 -65
- package/src/templates/project/basic/config/database.ts.tpl +66 -123
- package/src/templates/project/basic/config/env.ts.tpl +5 -169
- package/src/templates/project/basic/config/features.ts.tpl +6 -54
- package/src/templates/project/basic/config/index.ts.tpl +8 -23
- package/src/templates/project/basic/config/logging/HttpLogger.ts.tpl +7 -114
- package/src/templates/project/basic/config/mail.ts.tpl +9 -62
- package/src/templates/project/basic/config/microservices.ts.tpl +11 -97
- package/src/templates/project/basic/config/middleware.ts.tpl +25 -43
- package/src/templates/project/basic/config/notification.ts.tpl +13 -114
- package/src/templates/project/basic/config/queue.ts.tpl +9 -40
- package/src/templates/project/basic/config/security.ts.tpl +11 -163
- package/src/templates/project/basic/config/startup.ts.tpl +10 -21
- package/src/templates/project/basic/config/storage.ts.tpl +57 -137
- package/src/templates/project/basic/config/type.ts.tpl +32 -451
- package/src/templates/project/basic/database/factories/UserFactory.ts.tpl +80 -0
- package/src/templates/project/basic/database/migrations/create_tasks_table.ts.tpl +28 -0
- package/src/templates/project/basic/database/migrations/create_users_table.ts.tpl +29 -0
- package/src/templates/project/basic/database/seeders/DatabaseSeeder.ts.tpl +19 -0
- package/src/templates/project/basic/database/seeders/UserSeeder.ts.tpl +18 -0
- package/src/templates/project/basic/database/seeders/index.ts.tpl +2 -0
- package/src/templates/project/basic/routes/api.ts.tpl +71 -33
- package/src/templates/project/basic/routes/metrics.ts.tpl +22 -0
- package/src/templates/project/basic/src/index.ts.tpl +3 -0
- package/src/templates/project/basic/tsconfig.json.tpl +12 -11
- package/src/testing/TestEnvironment.d.ts +40 -0
- package/src/testing/TestEnvironment.d.ts.map +1 -0
- package/src/testing/TestEnvironment.js +141 -0
- package/src/testing/TestHttp.d.ts +29 -0
- package/src/testing/TestHttp.d.ts.map +1 -0
- package/src/testing/TestHttp.js +96 -0
- package/src/testing/index.d.ts +5 -0
- package/src/testing/index.d.ts.map +1 -0
- package/src/testing/index.js +2 -0
- package/src/time/DateTime.d.ts +181 -0
- package/src/time/DateTime.d.ts.map +1 -0
- package/src/time/DateTime.js +300 -0
- package/src/time/index.d.ts +7 -0
- package/src/time/index.d.ts.map +1 -0
- package/src/time/index.js +5 -0
- package/src/tools/http/Http.d.ts.map +1 -1
- package/src/tools/http/Http.js +4 -0
- package/src/tools/mail/drivers/Smtp.js +1 -1
- package/src/tools/queue/drivers/InMemory.d.ts +1 -1
- package/src/tools/queue/drivers/InMemory.d.ts.map +1 -1
- package/src/tools/queue/drivers/InMemory.js +1 -1
- package/src/tools/queue/drivers/Redis.d.ts +1 -1
- package/src/tools/queue/drivers/Redis.d.ts.map +1 -1
- package/src/tools/queue/drivers/Redis.js +1 -1
- package/src/validation/ValidationError.d.ts.map +1 -1
- package/src/validation/ValidationError.js +4 -2
- package/src/validation/Validator.d.ts +49 -16
- package/src/validation/Validator.d.ts.map +1 -1
- package/src/validation/Validator.js +307 -5
- package/src/common/uuid.d.ts +0 -3
- package/src/common/uuid.d.ts.map +0 -1
- package/src/common/uuid.js +0 -30
- package/src/templates/project/basic/.env.example.tpl +0 -74
- package/src/templates/project/basic/.env.tpl +0 -166
- package/src/templates/project/basic/config/logging/KvLogger.ts.tpl +0 -181
- package/src/templates/project/basic/config/logging/SlackLogger.ts.tpl +0 -156
- package/src/templates/project/basic/database/migrations/index.ts.tpl +0 -2
|
@@ -1,21 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Configuration Exports
|
|
2
|
+
* Configuration Exports (template)
|
|
3
3
|
* Central export point for all configuration
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
7
|
-
appConfig,
|
|
8
|
-
broadcastConfig,
|
|
9
|
-
cacheConfig,
|
|
10
|
-
databaseConfig,
|
|
11
|
-
microservicesConfig,
|
|
12
|
-
middlewareConfig,
|
|
13
|
-
notificationConfig,
|
|
14
|
-
queueConfig,
|
|
15
|
-
securityConfig,
|
|
16
|
-
storageConfig,
|
|
17
|
-
} from '@zintrust/core';
|
|
18
|
-
|
|
19
6
|
export {
|
|
20
7
|
appConfig,
|
|
21
8
|
broadcastConfig,
|
|
@@ -31,23 +18,21 @@ export {
|
|
|
31
18
|
|
|
32
19
|
export type {
|
|
33
20
|
AppConfig,
|
|
21
|
+
BroadcastConfig,
|
|
34
22
|
CacheConfig,
|
|
23
|
+
DatabaseConfig,
|
|
35
24
|
MicroservicesConfig,
|
|
25
|
+
MiddlewareConfig,
|
|
26
|
+
NotificationConfig,
|
|
36
27
|
QueueConfig,
|
|
28
|
+
SecurityConfig,
|
|
37
29
|
StorageConfig,
|
|
38
30
|
} from '@zintrust/core';
|
|
39
31
|
|
|
40
|
-
// Core exports this as `DatabaseRuntimeConfig`; keep template API stable.
|
|
41
|
-
export type { DatabaseRuntimeConfig as DatabaseConfig } from '@zintrust/core';
|
|
42
|
-
|
|
43
|
-
export type BroadcastConfig = typeof broadcastConfig;
|
|
44
|
-
export type NotificationConfig = typeof notificationConfig;
|
|
45
|
-
|
|
46
32
|
/**
|
|
47
33
|
* Combined configuration object
|
|
48
|
-
* Sealed namespace for immutability
|
|
49
34
|
*/
|
|
50
|
-
export const config =
|
|
35
|
+
export const config = {
|
|
51
36
|
app: appConfig,
|
|
52
37
|
broadcast: broadcastConfig,
|
|
53
38
|
database: databaseConfig,
|
|
@@ -58,6 +43,6 @@ export const config = Object.freeze({
|
|
|
58
43
|
microservices: microservicesConfig,
|
|
59
44
|
cache: cacheConfig,
|
|
60
45
|
queue: queueConfig,
|
|
61
|
-
} as const
|
|
46
|
+
} as const;
|
|
62
47
|
|
|
63
48
|
export type Config = typeof config;
|
|
@@ -1,121 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* HTTP
|
|
3
|
-
* Sends logs to an external HTTP logging service.
|
|
2
|
+
* HTTP Logger (starter override)
|
|
4
3
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* - HTTP_LOG_ENDPOINT_URL
|
|
8
|
-
* - HTTP_LOG_BATCH_SIZE (default: 50)
|
|
9
|
-
* - HTTP_LOG_AUTH_TOKEN (optional)
|
|
4
|
+
* Starter projects should import the framework's HttpLogger from `@zintrust/core`.
|
|
5
|
+
* This keeps templates free of deep/internal imports.
|
|
10
6
|
*/
|
|
11
7
|
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import { ErrorFactory } from '@zintrust/core';
|
|
15
|
-
import { HttpClient } from '@zintrust/core';
|
|
8
|
+
import { HttpLogger } from '@zintrust/core';
|
|
9
|
+
import type { HttpLogEvent } from '@zintrust/core';
|
|
16
10
|
|
|
17
|
-
export
|
|
18
|
-
|
|
19
|
-
level: 'debug' | 'info' | 'warn' | 'error' | 'fatal';
|
|
20
|
-
message: string;
|
|
21
|
-
category?: string;
|
|
22
|
-
data?: unknown;
|
|
23
|
-
error?: string;
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
const isEnabled = (): boolean => Env.getBool('HTTP_LOG_ENABLED', false);
|
|
27
|
-
|
|
28
|
-
let buffer: HttpLogEvent[] = [];
|
|
29
|
-
let flushPromise: Promise<void> | undefined;
|
|
30
|
-
|
|
31
|
-
const postBatch = async (events: HttpLogEvent[]): Promise<void> => {
|
|
32
|
-
const endpoint = Env.get('HTTP_LOG_ENDPOINT_URL').trim();
|
|
33
|
-
if (endpoint.length === 0) {
|
|
34
|
-
throw ErrorFactory.createConfigError(
|
|
35
|
-
'HTTP_LOG_ENDPOINT_URL is required when HTTP logging is enabled'
|
|
36
|
-
);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const token = Env.get('HTTP_LOG_AUTH_TOKEN').trim();
|
|
40
|
-
|
|
41
|
-
const builder = HttpClient.post(endpoint, {
|
|
42
|
-
sentAt: new Date().toISOString(),
|
|
43
|
-
count: events.length,
|
|
44
|
-
events,
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
if (token.length > 0) {
|
|
48
|
-
builder.withAuth(token, 'Bearer');
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
await builder.send();
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
const flushNow = async (): Promise<void> => {
|
|
55
|
-
const toSend = buffer;
|
|
56
|
-
buffer = [];
|
|
57
|
-
|
|
58
|
-
if (!isEnabled()) return;
|
|
59
|
-
if (toSend.length === 0) return;
|
|
60
|
-
|
|
61
|
-
const maxRetries = 3;
|
|
62
|
-
|
|
63
|
-
const attemptPost = async (attempt: number): Promise<void> => {
|
|
64
|
-
try {
|
|
65
|
-
await postBatch(toSend);
|
|
66
|
-
} catch {
|
|
67
|
-
if (attempt >= maxRetries) return;
|
|
68
|
-
const backoffMs = 100 * 2 ** attempt;
|
|
69
|
-
await delay(backoffMs);
|
|
70
|
-
await attemptPost(attempt + 1);
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
await attemptPost(0);
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
const scheduleFlush = async (): Promise<void> => {
|
|
78
|
-
if (flushPromise !== undefined) return flushPromise;
|
|
79
|
-
|
|
80
|
-
const promise = new Promise<void>((resolve) => {
|
|
81
|
-
const run = async (): Promise<void> => {
|
|
82
|
-
try {
|
|
83
|
-
await flushNow();
|
|
84
|
-
} finally {
|
|
85
|
-
resolve(undefined);
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
if (typeof globalThis.setTimeout !== 'function') {
|
|
90
|
-
void run();
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
globalThis.setTimeout(() => {
|
|
95
|
-
void run();
|
|
96
|
-
}, 0);
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
flushPromise = promise.finally(() => {
|
|
100
|
-
flushPromise = undefined;
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
return flushPromise;
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
export const HttpLogger = Object.freeze({
|
|
107
|
-
async enqueue(event: HttpLogEvent): Promise<void> {
|
|
108
|
-
if (!isEnabled()) return Promise.resolve(); // NOSONAR
|
|
109
|
-
|
|
110
|
-
buffer.push(event);
|
|
111
|
-
|
|
112
|
-
const batchSize = Math.max(1, Env.getInt('HTTP_LOG_BATCH_SIZE', 50));
|
|
113
|
-
if (buffer.length >= batchSize) {
|
|
114
|
-
return scheduleFlush();
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
return scheduleFlush();
|
|
118
|
-
},
|
|
119
|
-
});
|
|
11
|
+
export { HttpLogger };
|
|
12
|
+
export type { HttpLogEvent };
|
|
120
13
|
|
|
121
14
|
export default HttpLogger;
|
|
@@ -1,62 +1,19 @@
|
|
|
1
|
+
import { Env, type MailConfigOverrides } from '@zintrust/core';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
|
-
* Mail Configuration
|
|
3
|
-
*
|
|
4
|
-
*
|
|
4
|
+
* Mail Configuration (default override)
|
|
5
|
+
*
|
|
6
|
+
* Keep this file declarative:
|
|
7
|
+
* - Core owns env parsing/default logic.
|
|
8
|
+
* - Projects can override config by editing values below.
|
|
5
9
|
*/
|
|
6
10
|
|
|
7
|
-
|
|
8
|
-
import { ErrorFactory, Env } from '@zintrust/core';
|
|
9
|
-
|
|
10
|
-
const isMailDriverConfig = (value: unknown): value is MailDriverConfig => {
|
|
11
|
-
if (typeof value !== 'object' || value === null) return false;
|
|
12
|
-
if (!('driver' in value)) return false;
|
|
13
|
-
|
|
14
|
-
const driver = (value as { driver?: unknown }).driver;
|
|
15
|
-
return typeof driver === 'string' && driver.trim().length > 0;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
const getMailDriver = (config: MailConfigInput, name?: string): MailDriverConfig => {
|
|
19
|
-
const drivers = config.drivers as Record<string, unknown>;
|
|
20
|
-
const envSelectedRaw = Env.get('MAIL_CONNECTION', Env.get('MAIL_DRIVER', '')).trim();
|
|
21
|
-
const selected = (
|
|
22
|
-
name ??
|
|
23
|
-
(envSelectedRaw.length > 0 ? envSelectedRaw : undefined) ??
|
|
24
|
-
config.default
|
|
25
|
-
)
|
|
26
|
-
.toString()
|
|
27
|
-
.trim();
|
|
28
|
-
|
|
29
|
-
if (selected.length === 0) {
|
|
30
|
-
const disabled = drivers['disabled'];
|
|
31
|
-
if (isMailDriverConfig(disabled)) return disabled;
|
|
32
|
-
throw ErrorFactory.createConfigError('Mail driver not configured: disabled');
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
if (Object.hasOwn(drivers, selected)) {
|
|
36
|
-
const resolved = drivers[selected];
|
|
37
|
-
if (isMailDriverConfig(resolved)) return resolved;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
throw ErrorFactory.createConfigError(`Mail driver not configured: ${selected}`);
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
const mailConfigObj = {
|
|
44
|
-
/**
|
|
45
|
-
* Default mail driver
|
|
46
|
-
*/
|
|
11
|
+
export default {
|
|
47
12
|
default: Env.get('MAIL_CONNECTION', Env.get('MAIL_DRIVER', 'disabled')).trim().toLowerCase(),
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Default "From" identity
|
|
51
|
-
*/
|
|
52
13
|
from: {
|
|
53
14
|
address: Env.get('MAIL_FROM_ADDRESS', ''),
|
|
54
15
|
name: Env.get('MAIL_FROM_NAME', ''),
|
|
55
16
|
},
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Driver configs
|
|
59
|
-
*/
|
|
60
17
|
drivers: {
|
|
61
18
|
disabled: {
|
|
62
19
|
driver: 'disabled' as const,
|
|
@@ -109,14 +66,4 @@ const mailConfigObj = {
|
|
|
109
66
|
region: Env.get('AWS_REGION', 'us-east-1'),
|
|
110
67
|
},
|
|
111
68
|
},
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Get selected driver config
|
|
115
|
-
*/
|
|
116
|
-
getDriver(name?: string): MailDriverConfig {
|
|
117
|
-
return getMailDriver(this, name);
|
|
118
|
-
},
|
|
119
|
-
} as const;
|
|
120
|
-
|
|
121
|
-
export const mailConfig = Object.freeze(mailConfigObj);
|
|
122
|
-
export type MailConfig = typeof mailConfig;
|
|
69
|
+
} satisfies MailConfigOverrides;
|
|
@@ -1,104 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Microservices Configuration
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Microservices Configuration (template)
|
|
3
|
+
*
|
|
4
|
+
* Keep this file declarative:
|
|
5
|
+
* - Core owns env parsing/default logic.
|
|
6
|
+
* - Projects can override values by editing `microservicesConfigObj`.
|
|
5
7
|
*/
|
|
6
8
|
|
|
7
|
-
import {
|
|
9
|
+
import { microservicesConfig as coreMicroservicesConfig } from '@zintrust/core';
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Enable microservices mode
|
|
12
|
-
*/
|
|
13
|
-
enabled: Env.getBool('MICROSERVICES', false),
|
|
11
|
+
type MicroservicesConfigShape = typeof coreMicroservicesConfig;
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
services: Env.get('SERVICES', '')
|
|
19
|
-
.split(',')
|
|
20
|
-
.filter((s) => s.trim()),
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Service discovery
|
|
24
|
-
*/
|
|
25
|
-
discovery: {
|
|
26
|
-
type: Env.get('SERVICE_DISCOVERY_TYPE', 'filesystem') as 'filesystem' | 'consul' | 'etcd',
|
|
27
|
-
servicesPath: Env.get('SERVICES_PATH', 'services'),
|
|
28
|
-
refreshInterval: Env.getInt('SERVICE_DISCOVERY_REFRESH_INTERVAL', 30000),
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Service Registry
|
|
33
|
-
*/
|
|
34
|
-
registry: {
|
|
35
|
-
host: Env.get('SERVICE_REGISTRY_HOST', 'localhost'),
|
|
36
|
-
port: Env.getInt('SERVICE_REGISTRY_PORT', 8500),
|
|
37
|
-
deregisterCriticalServiceAfter: Env.get('SERVICE_DEREGISTER_CRITICAL_AFTER', '30s'),
|
|
38
|
-
},
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Service Authentication
|
|
42
|
-
*/
|
|
43
|
-
auth: {
|
|
44
|
-
strategy: Env.get('SERVICE_AUTH_STRATEGY', 'none') as 'api-key' | 'jwt' | 'none' | 'custom',
|
|
45
|
-
apiKey: Env.get('SERVICE_API_KEY'),
|
|
46
|
-
jwtSecret: Env.get('SERVICE_JWT_SECRET'),
|
|
47
|
-
},
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Request Tracing
|
|
51
|
-
*/
|
|
52
|
-
tracing: {
|
|
53
|
-
enabled: Env.getBool('MICROSERVICES_TRACING', false),
|
|
54
|
-
samplingRate: Env.getInt('MICROSERVICES_TRACING_RATE', 100) / 100,
|
|
55
|
-
exportInterval: Env.getInt('TRACING_EXPORT_INTERVAL', 10000),
|
|
56
|
-
jaegerEndpoint: Env.get('JAEGER_AGENT_HOST', 'localhost'),
|
|
57
|
-
},
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Database Isolation
|
|
61
|
-
*/
|
|
62
|
-
database: {
|
|
63
|
-
isolation: Env.get('DATABASE_ISOLATION', 'shared') as 'shared' | 'isolated',
|
|
64
|
-
schema: Env.get('DATABASE_SCHEMA_PREFIX', 'microservice'),
|
|
65
|
-
},
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Service Health Check
|
|
69
|
-
*/
|
|
70
|
-
healthCheck: {
|
|
71
|
-
enabled: Env.getBool('SERVICE_HEALTH_CHECK_ENABLED', true),
|
|
72
|
-
interval: Env.getInt('SERVICE_HEALTH_CHECK_INTERVAL', 30000),
|
|
73
|
-
timeout: Env.getInt('SERVICE_HEALTH_CHECK_TIMEOUT', 5000),
|
|
74
|
-
unhealthyThreshold: Env.getInt('SERVICE_UNHEALTHY_THRESHOLD', 3),
|
|
75
|
-
healthyThreshold: Env.getInt('SERVICE_HEALTHY_THRESHOLD', 2),
|
|
76
|
-
},
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Service Communication
|
|
80
|
-
*/
|
|
81
|
-
communication: {
|
|
82
|
-
timeout: Env.getInt('SERVICE_CALL_TIMEOUT', 30000),
|
|
83
|
-
retries: Env.getInt('SERVICE_CALL_RETRIES', 3),
|
|
84
|
-
retryDelay: Env.getInt('SERVICE_CALL_RETRY_DELAY', 1000),
|
|
85
|
-
circuitBreaker: {
|
|
86
|
-
enabled: Env.getBool('CIRCUIT_BREAKER_ENABLED', true),
|
|
87
|
-
threshold: Env.getInt('CIRCUIT_BREAKER_THRESHOLD', 5),
|
|
88
|
-
timeout: Env.getInt('CIRCUIT_BREAKER_TIMEOUT', 60000),
|
|
89
|
-
},
|
|
90
|
-
},
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Service Mesh (Istio/Linkerd support)
|
|
94
|
-
*/
|
|
95
|
-
mesh: {
|
|
96
|
-
enabled: Env.getBool('SERVICE_MESH_ENABLED', false),
|
|
97
|
-
type: Env.get('SERVICE_MESH_TYPE', 'istio') as 'istio' | 'linkerd',
|
|
98
|
-
namespace: Env.get('SERVICE_MESH_NAMESPACE', 'default'),
|
|
99
|
-
},
|
|
100
|
-
} as const;
|
|
101
|
-
|
|
102
|
-
export const microservicesConfig = Object.freeze(microservicesConfigObj);
|
|
13
|
+
export const microservicesConfigObj = {
|
|
14
|
+
...coreMicroservicesConfig,
|
|
15
|
+
} satisfies MicroservicesConfigShape;
|
|
103
16
|
|
|
17
|
+
export const microservicesConfig = microservicesConfigObj;
|
|
104
18
|
export type MicroservicesConfig = typeof microservicesConfig;
|
|
@@ -1,50 +1,32 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Middleware Configuration (template)
|
|
3
|
+
*
|
|
4
|
+
* Keep this file declarative:
|
|
5
|
+
* - Core owns middleware construction / any runtime behavior.
|
|
6
|
+
* - Projects can override by editing `middlewareConfigObj`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { middlewareConfig as coreMiddlewareConfig } from '@zintrust/core';
|
|
2
10
|
import { CsrfMiddleware } from '@zintrust/core';
|
|
3
|
-
import { ErrorHandlerMiddleware } from '@zintrust/core';
|
|
4
|
-
import { LoggingMiddleware } from '@zintrust/core';
|
|
5
|
-
import type { Middleware } from '@zintrust/core';
|
|
6
|
-
import { RateLimiter } from '@zintrust/core';
|
|
7
|
-
import { SecurityMiddleware } from '@zintrust/core';
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
return Object.freeze({
|
|
11
|
-
log: LoggingMiddleware.create(),
|
|
12
|
-
error: ErrorHandlerMiddleware.create(),
|
|
13
|
-
security: SecurityMiddleware.create(),
|
|
14
|
-
rateLimit: RateLimiter.create(),
|
|
15
|
-
csrf: CsrfMiddleware.create(),
|
|
16
|
-
});
|
|
17
|
-
}
|
|
12
|
+
type MiddlewareConfigShape = typeof coreMiddlewareConfig;
|
|
18
13
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
return Object.freeze(middlewareConfigObj);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
let cached: MiddlewareConfigType | null = null;
|
|
31
|
-
|
|
32
|
-
function ensureMiddlewareConfig(): MiddlewareConfigType {
|
|
33
|
-
if (cached) return cached;
|
|
34
|
-
cached = createMiddlewareConfig();
|
|
35
|
-
return cached;
|
|
36
|
-
}
|
|
14
|
+
// Optional: if you're building a pure Bearer-token API (no cookie auth),
|
|
15
|
+
// you can bypass CSRF for API routes.
|
|
16
|
+
// Example: ['\/api\/*'] skips CSRF for all API endpoints.
|
|
17
|
+
const csrf = CsrfMiddleware.create({
|
|
18
|
+
skipPaths: [],
|
|
19
|
+
});
|
|
37
20
|
|
|
38
|
-
export const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return Reflect.ownKeys(ensureMiddlewareConfig());
|
|
21
|
+
export const middlewareConfigObj = {
|
|
22
|
+
...coreMiddlewareConfig,
|
|
23
|
+
route: {
|
|
24
|
+
...coreMiddlewareConfig.route,
|
|
25
|
+
csrf,
|
|
44
26
|
},
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
});
|
|
27
|
+
// Keep global middleware order but swap in the overridden CSRF middleware.
|
|
28
|
+
global: coreMiddlewareConfig.global.map((mw) => (mw === coreMiddlewareConfig.route.csrf ? csrf : mw)),
|
|
29
|
+
} satisfies MiddlewareConfigShape;
|
|
49
30
|
|
|
31
|
+
export const middlewareConfig = middlewareConfigObj;
|
|
50
32
|
export default middlewareConfig;
|
|
@@ -1,72 +1,19 @@
|
|
|
1
|
+
import { Env, type NotificationConfigOverrides } from '@zintrust/core';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
|
-
* Notification Configuration
|
|
4
|
+
* Notification Configuration (default override)
|
|
3
5
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
+
* Keep this file declarative:
|
|
7
|
+
* - Core owns env parsing/default logic.
|
|
8
|
+
* - Projects can override config by editing values below.
|
|
6
9
|
*/
|
|
7
10
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
import { ErrorFactory ,Env} from '@zintrust/core';
|
|
15
|
-
|
|
16
|
-
const normalizeName = (value: string): string => value.trim().toLowerCase();
|
|
17
|
-
|
|
18
|
-
const hasOwn = (obj: Record<string, unknown>, key: string): boolean => {
|
|
19
|
-
return Object.hasOwn(obj, key);
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const getDefaultChannel = (drivers: NotificationDrivers): string => {
|
|
23
|
-
const envSelectedRaw = Env.get(
|
|
24
|
-
'NOTIFICATION_CONNECTION',
|
|
25
|
-
Env.get('NOTIFICATION_DRIVER', 'console')
|
|
26
|
-
);
|
|
27
|
-
const value = normalizeName(envSelectedRaw ?? 'console');
|
|
28
|
-
|
|
29
|
-
if (value.length > 0 && hasOwn(drivers, value)) return value;
|
|
30
|
-
|
|
31
|
-
if (envSelectedRaw.trim().length > 0) {
|
|
32
|
-
throw ErrorFactory.createConfigError(`Notification channel not configured: ${value}`);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return hasOwn(drivers, 'console') ? 'console' : (Object.keys(drivers)[0] ?? 'console');
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
const getNotificationDriver = (
|
|
39
|
-
config: NotificationConfigInput,
|
|
40
|
-
name?: string
|
|
41
|
-
): KnownNotificationDriverConfig => {
|
|
42
|
-
const selected = normalizeName(String(name ?? config.default));
|
|
43
|
-
const channelName = selected === 'default' ? normalizeName(config.default) : selected;
|
|
44
|
-
|
|
45
|
-
const isExplicitSelection =
|
|
46
|
-
name !== undefined &&
|
|
47
|
-
String(name).trim().length > 0 &&
|
|
48
|
-
normalizeName(String(name)) !== 'default';
|
|
49
|
-
|
|
50
|
-
if (channelName.length > 0 && hasOwn(config.drivers, channelName)) {
|
|
51
|
-
const resolved = config.drivers[channelName];
|
|
52
|
-
if (resolved !== undefined) return resolved;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (Object.keys(config.drivers ?? {}).length === 0) {
|
|
56
|
-
throw ErrorFactory.createConfigError('No notification channels are configured');
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (isExplicitSelection) {
|
|
60
|
-
throw ErrorFactory.createConfigError(`Notification channel not configured: ${channelName}`);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// Default selection is strict: if `default` points at an unconfigured channel, throw.
|
|
64
|
-
throw ErrorFactory.createConfigError(`Notification channel not configured: ${channelName}`);
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
const getBaseProviders = (): NotificationProviders => {
|
|
68
|
-
return {
|
|
69
|
-
console: { driver: 'console' as const },
|
|
11
|
+
export default {
|
|
12
|
+
default: Env.get('NOTIFICATION_CONNECTION', Env.get('NOTIFICATION_DRIVER', 'console')),
|
|
13
|
+
drivers: {
|
|
14
|
+
console: {
|
|
15
|
+
driver: 'console' as const,
|
|
16
|
+
},
|
|
70
17
|
termii: {
|
|
71
18
|
driver: 'termii' as const,
|
|
72
19
|
apiKey: Env.get('TERMII_API_KEY', ''),
|
|
@@ -83,53 +30,5 @@ const getBaseProviders = (): NotificationProviders => {
|
|
|
83
30
|
driver: 'slack' as const,
|
|
84
31
|
webhookUrl: Env.get('SLACK_WEBHOOK_URL', ''),
|
|
85
32
|
},
|
|
86
|
-
};
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
const notificationConfigObj = {
|
|
90
|
-
/**
|
|
91
|
-
* Default notification channel name (normalized).
|
|
92
|
-
*/
|
|
93
|
-
get default(): string {
|
|
94
|
-
return getDefaultChannel(this.drivers);
|
|
95
|
-
},
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Notification channels.
|
|
99
|
-
*
|
|
100
|
-
* You may add custom named channels (e.g. `opsSlack`, `smsMarketing`) that
|
|
101
|
-
* point to any known driver config.
|
|
102
|
-
*/
|
|
103
|
-
get drivers(): NotificationDrivers {
|
|
104
|
-
// Return a record of channels; can be extended by app-level config.
|
|
105
|
-
return getBaseProviders() as unknown as NotificationDrivers;
|
|
106
|
-
},
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Legacy provider configs (kept for backwards compatibility with wrappers).
|
|
110
|
-
*/
|
|
111
|
-
get providers(): NotificationProviders {
|
|
112
|
-
return getBaseProviders();
|
|
113
33
|
},
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Normalized notification channel name.
|
|
117
|
-
*/
|
|
118
|
-
getDriverName(): string {
|
|
119
|
-
return normalizeName(this.default);
|
|
120
|
-
},
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Resolve a channel config.
|
|
124
|
-
* - Unknown names throw when explicitly selected.
|
|
125
|
-
* - `default` is a reserved alias of the configured default.
|
|
126
|
-
*/
|
|
127
|
-
getDriverConfig(name?: string): KnownNotificationDriverConfig {
|
|
128
|
-
return getNotificationDriver(this, name);
|
|
129
|
-
},
|
|
130
|
-
} as const;
|
|
131
|
-
|
|
132
|
-
export const notificationConfig = Object.freeze(notificationConfigObj);
|
|
133
|
-
export type NotificationConfig = typeof notificationConfig;
|
|
134
|
-
|
|
135
|
-
export default notificationConfig;
|
|
34
|
+
} satisfies NotificationConfigOverrides;
|
|
@@ -1,27 +1,15 @@
|
|
|
1
|
+
import { Env, type QueueConfigOverrides, type QueueDriverName } from '@zintrust/core';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
|
-
* Queue Configuration
|
|
3
|
-
*
|
|
4
|
-
*
|
|
4
|
+
* Queue Configuration (default override)
|
|
5
|
+
*
|
|
6
|
+
* Keep this file declarative:
|
|
7
|
+
* - Core owns env parsing/default logic.
|
|
8
|
+
* - Projects can override config by editing values below.
|
|
5
9
|
*/
|
|
6
10
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
import type { QueueConfigWithDrivers, QueueDriverName, QueueDriversConfig } from '@zintrust/core';
|
|
10
|
-
|
|
11
|
-
const getQueueDriver = (config: QueueConfigWithDrivers): QueueDriversConfig[QueueDriverName] => {
|
|
12
|
-
const driverName = config.default;
|
|
13
|
-
return config.drivers[driverName];
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
const queueConfigObj = {
|
|
17
|
-
/**
|
|
18
|
-
* Default queue driver
|
|
19
|
-
*/
|
|
11
|
+
export default {
|
|
20
12
|
default: Env.get('QUEUE_DRIVER', 'sync') as QueueDriverName,
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Queue drivers
|
|
24
|
-
*/
|
|
25
13
|
drivers: {
|
|
26
14
|
sync: {
|
|
27
15
|
driver: 'sync' as const,
|
|
@@ -53,34 +41,15 @@ const queueConfigObj = {
|
|
|
53
41
|
region: Env.AWS_REGION,
|
|
54
42
|
queueUrl: Env.get('AWS_SQS_QUEUE_URL'),
|
|
55
43
|
},
|
|
56
|
-
} satisfies QueueDriversConfig,
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Get queue driver config
|
|
60
|
-
*/
|
|
61
|
-
getDriver(): QueueDriversConfig[QueueDriverName] {
|
|
62
|
-
return getQueueDriver(this);
|
|
63
44
|
},
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Failed jobs table
|
|
67
|
-
*/
|
|
68
45
|
failed: {
|
|
69
46
|
database: Env.get('FAILED_JOBS_DB_CONNECTION', 'default'),
|
|
70
47
|
table: Env.get('FAILED_JOBS_TABLE', 'failed_jobs'),
|
|
71
48
|
},
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Job processing
|
|
75
|
-
*/
|
|
76
49
|
processing: {
|
|
77
50
|
timeout: Env.getInt('QUEUE_JOB_TIMEOUT', 60),
|
|
78
51
|
retries: Env.getInt('QUEUE_JOB_RETRIES', 3),
|
|
79
52
|
backoff: Env.getInt('QUEUE_JOB_BACKOFF', 0),
|
|
80
53
|
workers: Env.getInt('QUEUE_WORKERS', 1),
|
|
81
54
|
},
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
export const queueConfig = Object.freeze(queueConfigObj);
|
|
85
|
-
|
|
86
|
-
export type QueueConfig = typeof queueConfig;
|
|
55
|
+
} satisfies QueueConfigOverrides;
|