@zintrust/core 0.1.40 → 0.1.42
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/zintrust-main.d.ts.map +1 -1
- package/bin/zintrust-main.js +22 -1
- package/package.json +24 -4
- package/public/error-pages/404.html +2 -2
- package/src/auth/Auth.js +1 -1
- package/src/boot/Application.d.ts +1 -16
- package/src/boot/Application.d.ts.map +1 -1
- package/src/boot/Application.js +2 -290
- package/src/boot/Server.d.ts +1 -1
- package/src/boot/Server.d.ts.map +1 -1
- package/src/boot/bootstrap.js +50 -16
- package/src/boot/registry/registerRoute.d.ts +6 -0
- package/src/boot/registry/registerRoute.d.ts.map +1 -0
- package/src/boot/registry/registerRoute.js +96 -0
- package/src/boot/registry/runtime.d.ts +15 -0
- package/src/boot/registry/runtime.d.ts.map +1 -0
- package/src/boot/registry/runtime.js +364 -0
- package/src/boot/registry/type.d.ts +25 -0
- package/src/boot/registry/type.d.ts.map +1 -0
- package/src/boot/registry/type.js +1 -0
- package/src/boot/registry/worker.d.ts +6 -0
- package/src/boot/registry/worker.d.ts.map +1 -0
- package/src/boot/registry/worker.js +35 -0
- package/src/cache/drivers/KVRemoteDriver.d.ts.map +1 -1
- package/src/cache/drivers/KVRemoteDriver.js +14 -1
- package/src/cli/CLI.d.ts.map +1 -1
- package/src/cli/CLI.js +94 -34
- package/src/cli/ErrorHandler.js +1 -1
- package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
- package/src/cli/commands/ConfigCommand.js +3 -5
- package/src/cli/commands/ContainerProxiesCommand.d.ts +5 -0
- package/src/cli/commands/ContainerProxiesCommand.d.ts.map +1 -0
- package/src/cli/commands/ContainerProxiesCommand.js +77 -0
- package/src/cli/commands/ContainerWorkersCommand.d.ts +5 -0
- package/src/cli/commands/ContainerWorkersCommand.d.ts.map +1 -0
- package/src/cli/commands/ContainerWorkersCommand.js +57 -0
- package/src/cli/commands/D1LearnCommand.d.ts +9 -0
- package/src/cli/commands/D1LearnCommand.d.ts.map +1 -0
- package/src/cli/commands/D1LearnCommand.js +143 -0
- package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
- package/src/cli/commands/D1MigrateCommand.js +55 -16
- package/src/cli/commands/DeployCommand.d.ts +16 -0
- package/src/cli/commands/DeployCommand.d.ts.map +1 -0
- package/src/cli/commands/DeployCommand.js +110 -0
- package/src/cli/commands/DeployContainerProxiesCommand.d.ts +5 -0
- package/src/cli/commands/DeployContainerProxiesCommand.d.ts.map +1 -0
- package/src/cli/commands/DeployContainerProxiesCommand.js +27 -0
- package/src/cli/commands/DeployContainerWorkersCommand.d.ts +5 -0
- package/src/cli/commands/DeployContainerWorkersCommand.d.ts.map +1 -0
- package/src/cli/commands/DeployContainerWorkersCommand.js +27 -0
- package/src/cli/commands/DockerComposeCommandUtils.d.ts +3 -0
- package/src/cli/commands/DockerComposeCommandUtils.d.ts.map +1 -0
- package/src/cli/commands/DockerComposeCommandUtils.js +34 -0
- package/src/cli/commands/DoctorArchitectureCommand.d.ts +5 -0
- package/src/cli/commands/DoctorArchitectureCommand.d.ts.map +1 -0
- package/src/cli/commands/DoctorArchitectureCommand.js +54 -0
- package/src/cli/commands/InitContainerCommand.d.ts +5 -0
- package/src/cli/commands/InitContainerCommand.d.ts.map +1 -0
- package/src/cli/commands/InitContainerCommand.js +231 -0
- package/src/cli/commands/InitEcosystemCommand.d.ts +6 -0
- package/src/cli/commands/InitEcosystemCommand.d.ts.map +1 -0
- package/src/cli/commands/InitEcosystemCommand.js +51 -0
- package/src/cli/commands/InitProducerCommand.d.ts +5 -0
- package/src/cli/commands/InitProducerCommand.d.ts.map +1 -0
- package/src/cli/commands/InitProducerCommand.js +47 -0
- package/src/cli/commands/InitProxyCommand.d.ts +5 -0
- package/src/cli/commands/InitProxyCommand.d.ts.map +1 -0
- package/src/cli/commands/InitProxyCommand.js +442 -0
- package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
- package/src/cli/commands/MigrateCommand.js +78 -36
- package/src/cli/commands/MigrateWorkerCommand.d.ts.map +1 -1
- package/src/cli/commands/MigrateWorkerCommand.js +36 -2
- package/src/cli/commands/MongoDBProxyCommand.d.ts +5 -0
- package/src/cli/commands/MongoDBProxyCommand.d.ts.map +1 -0
- package/src/cli/commands/MongoDBProxyCommand.js +98 -0
- package/src/cli/commands/MySqlProxyCommand.d.ts +6 -0
- package/src/cli/commands/MySqlProxyCommand.d.ts.map +1 -0
- package/src/cli/commands/MySqlProxyCommand.js +32 -0
- package/src/cli/commands/PostgresProxyCommand.d.ts +6 -0
- package/src/cli/commands/PostgresProxyCommand.d.ts.map +1 -0
- package/src/cli/commands/PostgresProxyCommand.js +32 -0
- package/src/cli/commands/ProxyCommand.d.ts +12 -0
- package/src/cli/commands/ProxyCommand.d.ts.map +1 -0
- package/src/cli/commands/ProxyCommand.js +80 -0
- package/src/cli/commands/ProxyCommandUtils.d.ts +6 -0
- package/src/cli/commands/ProxyCommandUtils.d.ts.map +1 -0
- package/src/cli/commands/ProxyCommandUtils.js +38 -0
- package/src/cli/commands/PutCommand.d.ts +6 -0
- package/src/cli/commands/PutCommand.d.ts.map +1 -0
- package/src/cli/commands/PutCommand.js +173 -0
- package/src/cli/commands/QueueRecoveryCommand.d.ts +6 -0
- package/src/cli/commands/QueueRecoveryCommand.d.ts.map +1 -0
- package/src/cli/commands/QueueRecoveryCommand.js +612 -0
- package/src/cli/commands/RedisProxyCommand.d.ts +6 -0
- package/src/cli/commands/RedisProxyCommand.d.ts.map +1 -0
- package/src/cli/commands/RedisProxyCommand.js +53 -0
- package/src/cli/commands/ScheduleListCommand.d.ts +6 -0
- package/src/cli/commands/ScheduleListCommand.d.ts.map +1 -0
- package/src/cli/commands/ScheduleListCommand.js +62 -0
- package/src/cli/commands/ScheduleRunCommand.d.ts +6 -0
- package/src/cli/commands/ScheduleRunCommand.d.ts.map +1 -0
- package/src/cli/commands/ScheduleRunCommand.js +32 -0
- package/src/cli/commands/ScheduleStartCommand.d.ts +6 -0
- package/src/cli/commands/ScheduleStartCommand.d.ts.map +1 -0
- package/src/cli/commands/ScheduleStartCommand.js +40 -0
- package/src/cli/commands/SecretsCommand.d.ts.map +1 -1
- package/src/cli/commands/SecretsCommand.js +2 -2
- package/src/cli/commands/SmtpProxyCommand.d.ts +6 -0
- package/src/cli/commands/SmtpProxyCommand.d.ts.map +1 -0
- package/src/cli/commands/SmtpProxyCommand.js +56 -0
- package/src/cli/commands/SqlProxyCommandUtils.d.ts +46 -0
- package/src/cli/commands/SqlProxyCommandUtils.d.ts.map +1 -0
- package/src/cli/commands/SqlProxyCommandUtils.js +48 -0
- package/src/cli/commands/SqlServerProxyCommand.d.ts +5 -0
- package/src/cli/commands/SqlServerProxyCommand.d.ts.map +1 -0
- package/src/cli/commands/SqlServerProxyCommand.js +85 -0
- package/src/cli/commands/StartCommand.d.ts.map +1 -1
- package/src/cli/commands/StartCommand.js +132 -17
- package/src/cli/commands/WorkerCommands.d.ts +1 -0
- package/src/cli/commands/WorkerCommands.d.ts.map +1 -1
- package/src/cli/commands/WorkerCommands.js +140 -6
- package/src/cli/commands/index.d.ts +2 -0
- package/src/cli/commands/index.d.ts.map +1 -1
- package/src/cli/commands/index.js +2 -0
- package/src/cli/commands/runner/index.d.ts +2 -2
- package/src/cli/commands/runner/index.d.ts.map +1 -1
- package/src/cli/commands/runner/index.js +15 -4
- package/src/cli/commands/schedule/ScheduleCliSupport.d.ts +6 -0
- package/src/cli/commands/schedule/ScheduleCliSupport.d.ts.map +1 -0
- package/src/cli/commands/schedule/ScheduleCliSupport.js +55 -0
- package/src/cli/config/ConfigManager.d.ts.map +1 -1
- package/src/cli/config/ConfigManager.js +8 -1
- package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -1
- package/src/cli/d1/D1SqlMigrations.js +14 -1
- package/src/cli/d1/WranglerConfig.d.ts.map +1 -1
- package/src/cli/d1/WranglerConfig.js +34 -2
- package/src/cli/index.d.ts +4 -0
- package/src/cli/index.d.ts.map +1 -1
- package/src/cli/index.js +4 -0
- package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
- package/src/cli/scaffolding/ProjectScaffolder.js +2 -0
- package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
- package/src/cli/scaffolding/ServiceScaffolder.js +1 -0
- package/src/cli/services/VersionChecker.d.ts.map +1 -1
- package/src/cli/services/VersionChecker.js +5 -1
- package/src/cli/utils/DatabaseCliUtils.d.ts.map +1 -1
- package/src/cli/utils/DatabaseCliUtils.js +6 -1
- package/src/cli/utils/EnvFileLoader.d.ts.map +1 -1
- package/src/cli/utils/EnvFileLoader.js +35 -15
- package/src/cli/workers/QueueWorkRunner.js +1 -1
- package/src/cli.d.ts +5 -0
- package/src/cli.d.ts.map +1 -0
- package/src/cli.js +4 -0
- package/src/collections/index.d.ts +2 -2
- package/src/collections/index.d.ts.map +1 -1
- package/src/collections/index.js +1 -1
- package/src/common/HealthRoutes.d.ts.map +1 -1
- package/src/common/HealthRoutes.js +50 -2
- package/src/common/RemoteSignedJson.d.ts +1 -0
- package/src/common/RemoteSignedJson.d.ts.map +1 -1
- package/src/common/RemoteSignedJson.js +81 -29
- package/src/common/index.d.ts +1 -0
- package/src/common/index.d.ts.map +1 -1
- package/src/common/index.js +12 -1
- package/src/common/utility.d.ts.map +1 -1
- package/src/common/utility.js +2 -6
- package/src/config/FileLogWriter.d.ts.map +1 -1
- package/src/config/FileLogWriter.js +21 -6
- package/src/config/app.d.ts +4 -0
- package/src/config/app.d.ts.map +1 -1
- package/src/config/app.js +4 -0
- package/src/config/cache.d.ts.map +1 -1
- package/src/config/cache.js +22 -2
- package/src/config/cloudflare.d.ts +5 -1
- package/src/config/cloudflare.d.ts.map +1 -1
- package/src/config/cloudflare.js +67 -8
- package/src/config/database.d.ts.map +1 -1
- package/src/config/database.js +48 -13
- package/src/config/env.d.ts +87 -2
- package/src/config/env.d.ts.map +1 -1
- package/src/config/env.js +158 -19
- package/src/config/index.d.ts +1 -0
- package/src/config/index.d.ts.map +1 -1
- package/src/config/mail.d.ts.map +1 -1
- package/src/config/mail.js +16 -10
- package/src/config/middleware.d.ts +5 -0
- package/src/config/middleware.d.ts.map +1 -1
- package/src/config/middleware.js +19 -1
- package/src/config/queue.d.ts.map +1 -1
- package/src/config/queue.js +70 -9
- package/src/config/redis.d.ts.map +1 -1
- package/src/config/redis.js +48 -13
- package/src/config/storage.d.ts.map +1 -1
- package/src/config/storage.js +1 -0
- package/src/config/type.d.ts +18 -0
- package/src/config/type.d.ts.map +1 -1
- package/src/config/workers.d.ts.map +1 -1
- package/src/config/workers.js +122 -16
- package/src/functions/cloudflare.d.ts.map +1 -1
- package/src/functions/cloudflare.js +55 -1
- package/src/health/StartupHealthChecks.js +1 -1
- package/src/helper/index.d.ts +225 -0
- package/src/helper/index.d.ts.map +1 -0
- package/src/helper/index.js +347 -0
- package/src/http/FileUpload.d.ts +3 -2
- package/src/http/FileUpload.d.ts.map +1 -1
- package/src/http/Kernel.d.ts.map +1 -1
- package/src/http/Kernel.js +2 -1
- package/src/http/error-pages/ErrorPageRenderer.d.ts +4 -0
- package/src/http/error-pages/ErrorPageRenderer.d.ts.map +1 -1
- package/src/http/error-pages/ErrorPageRenderer.js +141 -1
- package/src/http/middleware/BodyParsingMiddleware.d.ts.map +1 -1
- package/src/http/middleware/BodyParsingMiddleware.js +33 -6
- package/src/index.d.ts +26 -57
- package/src/index.d.ts.map +1 -1
- package/src/index.js +32 -18
- package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -1
- package/src/microservices/ServiceAuthMiddleware.js +12 -4
- package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
- package/src/middleware/CsrfMiddleware.js +30 -16
- package/src/middleware/ErrorHandlerMiddleware.d.ts.map +1 -1
- package/src/middleware/ErrorHandlerMiddleware.js +2 -1
- package/src/migrations/MigrationDiscovery.d.ts.map +1 -1
- package/src/migrations/MigrationDiscovery.js +2 -1
- package/src/migrations/MigrationLoader.js +1 -1
- package/src/migrations/schema/SchemaCompiler.d.ts.map +1 -1
- package/src/migrations/schema/SchemaCompiler.js +6 -3
- 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 +1 -1
- package/src/node-singletons/fs.d.ts.map +1 -1
- package/src/node-singletons/path.d.ts +1 -1
- package/src/node-singletons/path.d.ts.map +1 -1
- package/src/node-singletons/path.js +1 -1
- package/src/node-singletons/stream.d.ts +11 -0
- package/src/node-singletons/stream.d.ts.map +1 -0
- package/src/node-singletons/stream.js +8 -0
- package/src/observability/OpenTelemetry.d.ts +7 -0
- package/src/observability/OpenTelemetry.d.ts.map +1 -1
- package/src/observability/OpenTelemetry.js +49 -2
- package/src/orm/Database.d.ts +4 -0
- package/src/orm/Database.d.ts.map +1 -1
- package/src/orm/Database.js +80 -9
- package/src/orm/DatabaseAdapter.d.ts +1 -0
- package/src/orm/DatabaseAdapter.d.ts.map +1 -1
- package/src/orm/DatabaseRuntimeRegistration.d.ts.map +1 -1
- package/src/orm/DatabaseRuntimeRegistration.js +2 -0
- package/src/orm/QueryBuilder.d.ts +1 -0
- package/src/orm/QueryBuilder.d.ts.map +1 -1
- package/src/orm/QueryBuilder.js +33 -3
- package/src/orm/SchemaCompiler.d.ts.map +1 -1
- package/src/orm/SchemaCompiler.js +6 -3
- package/src/orm/SchemaStatemenWriter.d.ts +15 -0
- package/src/orm/SchemaStatemenWriter.d.ts.map +1 -0
- package/src/orm/SchemaStatemenWriter.js +78 -0
- package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
- package/src/orm/adapters/D1Adapter.js +52 -2
- package/src/orm/adapters/D1RemoteAdapter.d.ts.map +1 -1
- package/src/orm/adapters/D1RemoteAdapter.js +150 -89
- package/src/orm/adapters/MongoDBProxyAdapter.d.ts +3 -0
- package/src/orm/adapters/MongoDBProxyAdapter.d.ts.map +1 -0
- package/src/orm/adapters/MongoDBProxyAdapter.js +128 -0
- package/src/orm/adapters/MySQLProxyAdapter.d.ts +11 -0
- package/src/orm/adapters/MySQLProxyAdapter.d.ts.map +1 -0
- package/src/orm/adapters/MySQLProxyAdapter.js +162 -0
- package/src/orm/adapters/PostgreSQLProxyAdapter.d.ts +11 -0
- package/src/orm/adapters/PostgreSQLProxyAdapter.d.ts.map +1 -0
- package/src/orm/adapters/PostgreSQLProxyAdapter.js +163 -0
- package/src/orm/adapters/ProxyCache.d.ts +9 -0
- package/src/orm/adapters/ProxyCache.d.ts.map +1 -0
- package/src/orm/adapters/ProxyCache.js +24 -0
- package/src/orm/adapters/ProxySignedRequest.d.ts +11 -0
- package/src/orm/adapters/ProxySignedRequest.d.ts.map +1 -0
- package/src/orm/adapters/ProxySignedRequest.js +30 -0
- package/src/orm/adapters/ProxySigningPath.d.ts +3 -0
- package/src/orm/adapters/ProxySigningPath.d.ts.map +1 -0
- package/src/orm/adapters/ProxySigningPath.js +25 -0
- package/src/orm/adapters/SqlProxyAdapterUtils.d.ts +19 -0
- package/src/orm/adapters/SqlProxyAdapterUtils.d.ts.map +1 -0
- package/src/orm/adapters/SqlProxyAdapterUtils.js +36 -0
- package/src/orm/adapters/SqlProxyRegistryMode.d.ts +12 -0
- package/src/orm/adapters/SqlProxyRegistryMode.d.ts.map +1 -0
- package/src/orm/adapters/SqlProxyRegistryMode.js +24 -0
- package/src/orm/adapters/SqlServerProxyAdapter.d.ts +6 -0
- package/src/orm/adapters/SqlServerProxyAdapter.d.ts.map +1 -0
- package/src/orm/adapters/SqlServerProxyAdapter.js +154 -0
- package/src/orm/migrations/MigrationStore.js +1 -1
- package/src/performance/Optimizer.d.ts +1 -0
- package/src/performance/Optimizer.d.ts.map +1 -1
- package/src/performance/Optimizer.js +21 -8
- package/src/proxy/ErrorHandler.d.ts +11 -0
- package/src/proxy/ErrorHandler.d.ts.map +1 -0
- package/src/proxy/ErrorHandler.js +7 -0
- package/src/proxy/PoolManager.d.ts +8 -0
- package/src/proxy/PoolManager.d.ts.map +1 -0
- package/src/proxy/PoolManager.js +18 -0
- package/src/proxy/ProxyBackend.d.ts +18 -0
- package/src/proxy/ProxyBackend.d.ts.map +1 -0
- package/src/proxy/ProxyBackend.js +1 -0
- package/src/proxy/ProxyConfig.d.ts +12 -0
- package/src/proxy/ProxyConfig.d.ts.map +1 -0
- package/src/proxy/ProxyConfig.js +1 -0
- package/src/proxy/ProxyRegistry.d.ts +10 -0
- package/src/proxy/ProxyRegistry.d.ts.map +1 -0
- package/src/proxy/ProxyRegistry.js +11 -0
- package/src/proxy/ProxyRequestParsing.d.ts +9 -0
- package/src/proxy/ProxyRequestParsing.d.ts.map +1 -0
- package/src/proxy/ProxyRequestParsing.js +16 -0
- package/src/proxy/ProxyServer.d.ts +21 -0
- package/src/proxy/ProxyServer.d.ts.map +1 -0
- package/src/proxy/ProxyServer.js +84 -0
- package/src/proxy/ProxyServerUtils.d.ts +37 -0
- package/src/proxy/ProxyServerUtils.d.ts.map +1 -0
- package/src/proxy/ProxyServerUtils.js +42 -0
- package/src/proxy/ProxySigningConfigResolver.d.ts +22 -0
- package/src/proxy/ProxySigningConfigResolver.d.ts.map +1 -0
- package/src/proxy/ProxySigningConfigResolver.js +24 -0
- package/src/proxy/ProxySigningRequest.d.ts +12 -0
- package/src/proxy/ProxySigningRequest.d.ts.map +1 -0
- package/src/proxy/ProxySigningRequest.js +31 -0
- package/src/proxy/RequestValidator.d.ts +15 -0
- package/src/proxy/RequestValidator.d.ts.map +1 -0
- package/src/proxy/RequestValidator.js +26 -0
- package/src/proxy/SigningService.d.ts +39 -0
- package/src/proxy/SigningService.d.ts.map +1 -0
- package/src/proxy/SigningService.js +107 -0
- package/src/proxy/SqlPayloadValidator.d.ts +13 -0
- package/src/proxy/SqlPayloadValidator.d.ts.map +1 -0
- package/src/proxy/SqlPayloadValidator.js +14 -0
- package/src/proxy/SqlProxyDbOverrides.d.ts +17 -0
- package/src/proxy/SqlProxyDbOverrides.d.ts.map +1 -0
- package/src/proxy/SqlProxyDbOverrides.js +1 -0
- package/src/proxy/SqlProxyServerDeps.d.ts +12 -0
- package/src/proxy/SqlProxyServerDeps.d.ts.map +1 -0
- package/src/proxy/SqlProxyServerDeps.js +9 -0
- package/src/proxy/StatementPayloadValidator.d.ts +13 -0
- package/src/proxy/StatementPayloadValidator.d.ts.map +1 -0
- package/src/proxy/StatementPayloadValidator.js +18 -0
- package/src/proxy/StatementRegistryLoader.d.ts +2 -0
- package/src/proxy/StatementRegistryLoader.d.ts.map +1 -0
- package/src/proxy/StatementRegistryLoader.js +36 -0
- package/src/proxy/StatementRegistryResolver.d.ts +15 -0
- package/src/proxy/StatementRegistryResolver.d.ts.map +1 -0
- package/src/proxy/StatementRegistryResolver.js +34 -0
- package/src/proxy/d1/ZintrustD1Proxy.d.ts +3 -0
- package/src/proxy/d1/ZintrustD1Proxy.d.ts.map +1 -0
- package/src/proxy/d1/ZintrustD1Proxy.js +2 -0
- package/src/proxy/d1/register.d.ts +2 -0
- package/src/proxy/d1/register.d.ts.map +1 -0
- package/src/proxy/d1/register.js +5 -0
- package/src/proxy/isMutatingSql.d.ts +2 -0
- package/src/proxy/isMutatingSql.d.ts.map +1 -0
- package/src/proxy/isMutatingSql.js +12 -0
- package/src/proxy/kv/ZintrustKvProxy.d.ts +3 -0
- package/src/proxy/kv/ZintrustKvProxy.d.ts.map +1 -0
- package/src/proxy/kv/ZintrustKvProxy.js +2 -0
- package/src/proxy/kv/register.d.ts +2 -0
- package/src/proxy/kv/register.d.ts.map +1 -0
- package/src/proxy/kv/register.js +5 -0
- package/src/proxy/mongodb/MongoDBProxyServer.d.ts +33 -0
- package/src/proxy/mongodb/MongoDBProxyServer.d.ts.map +1 -0
- package/src/proxy/mongodb/MongoDBProxyServer.js +202 -0
- package/src/proxy/mongodb/register.d.ts +2 -0
- package/src/proxy/mongodb/register.d.ts.map +1 -0
- package/src/proxy/mongodb/register.js +5 -0
- package/src/proxy/mysql/MySqlProxyServer.d.ts +8 -0
- package/src/proxy/mysql/MySqlProxyServer.d.ts.map +1 -0
- package/src/proxy/mysql/MySqlProxyServer.js +202 -0
- package/src/proxy/mysql/register.d.ts +2 -0
- package/src/proxy/mysql/register.d.ts.map +1 -0
- package/src/proxy/mysql/register.js +5 -0
- package/src/proxy/postgres/PostgresProxyServer.d.ts +8 -0
- package/src/proxy/postgres/PostgresProxyServer.d.ts.map +1 -0
- package/src/proxy/postgres/PostgresProxyServer.js +178 -0
- package/src/proxy/postgres/register.d.ts +2 -0
- package/src/proxy/postgres/register.d.ts.map +1 -0
- package/src/proxy/postgres/register.js +5 -0
- package/src/proxy/redis/RedisProxyServer.d.ts +12 -0
- package/src/proxy/redis/RedisProxyServer.d.ts.map +1 -0
- package/src/proxy/redis/RedisProxyServer.js +192 -0
- package/src/proxy/redis/register.d.ts +2 -0
- package/src/proxy/redis/register.d.ts.map +1 -0
- package/src/proxy/redis/register.js +5 -0
- package/src/proxy/smtp/SmtpProxyServer.d.ts +19 -0
- package/src/proxy/smtp/SmtpProxyServer.d.ts.map +1 -0
- package/src/proxy/smtp/SmtpProxyServer.js +290 -0
- package/src/proxy/smtp/register.d.ts +2 -0
- package/src/proxy/smtp/register.d.ts.map +1 -0
- package/src/proxy/smtp/register.js +5 -0
- package/src/proxy/sqlserver/SqlServerProxyServer.d.ts +8 -0
- package/src/proxy/sqlserver/SqlServerProxyServer.d.ts.map +1 -0
- package/src/proxy/sqlserver/SqlServerProxyServer.js +203 -0
- package/src/proxy/sqlserver/register.d.ts +2 -0
- package/src/proxy/sqlserver/register.d.ts.map +1 -0
- package/src/proxy/sqlserver/register.js +5 -0
- package/src/proxy.d.ts +4 -0
- package/src/proxy.d.ts.map +1 -0
- package/src/proxy.js +3 -0
- package/src/routes/doc.d.ts.map +1 -1
- package/src/routes/doc.js +16 -2
- package/src/routes/error.d.ts +5 -4
- package/src/routes/error.d.ts.map +1 -1
- package/src/routes/error.js +15 -13
- package/src/routes/errorPages.d.ts +2 -0
- package/src/routes/errorPages.d.ts.map +1 -1
- package/src/routes/errorPages.js +144 -4
- package/src/runtime/PluginAutoImports.d.ts +1 -0
- package/src/runtime/PluginAutoImports.d.ts.map +1 -1
- package/src/runtime/PluginAutoImports.js +94 -9
- package/src/runtime/RuntimeAdapter.d.ts +8 -9
- package/src/runtime/RuntimeAdapter.d.ts.map +1 -1
- package/src/runtime/RuntimeAdapter.js +120 -34
- package/src/runtime/RuntimeServices.d.ts +47 -0
- package/src/runtime/RuntimeServices.d.ts.map +1 -0
- package/src/runtime/RuntimeServices.js +164 -0
- package/src/runtime/StartupConfigFileRegistry.d.ts +4 -4
- package/src/runtime/StartupConfigFileRegistry.d.ts.map +1 -1
- package/src/runtime/StartupConfigFileRegistry.js +12 -0
- package/src/runtime/WorkerAdapterImports.d.ts +5 -0
- package/src/runtime/WorkerAdapterImports.d.ts.map +1 -0
- package/src/runtime/WorkerAdapterImports.js +17 -0
- package/src/runtime/WorkersModule.d.ts +6 -0
- package/src/runtime/WorkersModule.d.ts.map +1 -0
- package/src/runtime/WorkersModule.js +278 -0
- package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
- package/src/runtime/adapters/CloudflareAdapter.js +19 -2
- package/src/runtime/adapters/DenoAdapter.js +1 -0
- package/src/runtime/adapters/FargateAdapter.js +1 -1
- package/src/runtime/adapters/LambdaAdapter.js +1 -1
- package/src/runtime/adapters/NodeServerAdapter.js +1 -1
- package/src/runtime/detectRuntime.d.ts +10 -0
- package/src/runtime/detectRuntime.d.ts.map +1 -0
- package/src/runtime/detectRuntime.js +57 -0
- package/src/runtime/useFileLoader.d.ts.map +1 -1
- package/src/runtime/useFileLoader.js +16 -0
- package/src/scheduler/Schedule.d.ts +36 -0
- package/src/scheduler/Schedule.d.ts.map +1 -0
- package/src/scheduler/Schedule.js +197 -0
- package/src/scheduler/ScheduleHttpGateway.d.ts +8 -0
- package/src/scheduler/ScheduleHttpGateway.d.ts.map +1 -0
- package/src/scheduler/ScheduleHttpGateway.js +196 -0
- package/src/scheduler/ScheduleRunner.d.ts +6 -0
- package/src/scheduler/ScheduleRunner.d.ts.map +1 -1
- package/src/scheduler/ScheduleRunner.js +166 -29
- package/src/scheduler/SchedulerRuntime.d.ts +15 -0
- package/src/scheduler/SchedulerRuntime.d.ts.map +1 -0
- package/src/scheduler/SchedulerRuntime.js +79 -0
- package/src/scheduler/cron/Cron.d.ts +19 -0
- package/src/scheduler/cron/Cron.d.ts.map +1 -0
- package/src/scheduler/cron/Cron.js +200 -0
- package/src/scheduler/leader/SchedulerLeader.d.ts +14 -0
- package/src/scheduler/leader/SchedulerLeader.d.ts.map +1 -0
- package/src/scheduler/leader/SchedulerLeader.js +187 -0
- package/src/scheduler/state/ScheduleStateStore.d.ts +27 -0
- package/src/scheduler/state/ScheduleStateStore.d.ts.map +1 -0
- package/src/scheduler/state/ScheduleStateStore.js +27 -0
- package/src/scheduler/types.d.ts +10 -0
- package/src/scheduler/types.d.ts.map +1 -1
- package/src/schedules/index.d.ts +1 -0
- package/src/schedules/index.d.ts.map +1 -1
- package/src/schedules/index.js +1 -0
- package/src/schedules/job-tracking-cleanup.d.ts +4 -0
- package/src/schedules/job-tracking-cleanup.d.ts.map +1 -0
- package/src/schedules/job-tracking-cleanup.js +116 -0
- package/src/schedules/log-cleanup.d.ts +1 -2
- package/src/schedules/log-cleanup.d.ts.map +1 -1
- package/src/schedules/log-cleanup.js +12 -15
- package/src/scripts/TemplateImportsCheck.js +2 -2
- package/src/scripts/TemplateSync.js +3 -4
- package/src/security/CsrfTokenManager.d.ts.map +1 -1
- package/src/security/CsrfTokenManager.js +12 -0
- package/src/security/Hash.d.ts +1 -1
- package/src/security/Hash.d.ts.map +1 -1
- package/src/security/Hash.js +31 -36
- package/src/security/Sanitizer.d.ts.map +1 -1
- package/src/security/Sanitizer.js +1 -9
- package/src/security/SignedRequest.d.ts.map +1 -1
- package/src/security/SignedRequest.js +2 -2
- package/src/seeders/SeederLoader.js +1 -1
- package/src/session/SessionManager.d.ts +3 -0
- package/src/session/SessionManager.d.ts.map +1 -1
- package/src/session/SessionManager.js +49 -10
- package/src/sockets/CloudflareSocket.d.ts +24 -0
- package/src/sockets/CloudflareSocket.d.ts.map +1 -0
- package/src/sockets/CloudflareSocket.js +259 -0
- package/src/start.d.ts.map +1 -1
- package/src/start.js +1 -8
- package/src/templates/docker/docker-compose.ecosystem.yml.tpl +301 -0
- package/src/templates/docker/docker-compose.schedules.yml.tpl +84 -0
- package/src/templates/project/basic/app/Schedules/index.ts.tpl +0 -0
- package/src/templates/project/basic/config/database.ts.tpl +1 -1
- package/src/templates/project/basic/src/zintrust.plugins.wg.ts.tpl +8 -0
- package/src/toolkit/Secrets/Manifest.d.ts.map +1 -1
- package/src/toolkit/Secrets/Manifest.js +5 -7
- package/src/tools/mail/drivers/Smtp.d.ts.map +1 -1
- package/src/tools/mail/drivers/Smtp.js +229 -18
- package/src/tools/mail/index.d.ts.map +1 -1
- package/src/tools/mail/index.js +5 -4
- package/src/tools/mail/template-loader.d.ts.map +1 -1
- package/src/tools/mail/template-loader.js +197 -29
- package/src/tools/mail/templates/auth-password-reset.d.ts +3 -0
- package/src/tools/mail/templates/auth-password-reset.d.ts.map +1 -0
- package/src/tools/mail/templates/auth-password-reset.js +231 -0
- package/src/tools/mail/templates/auth-welcome.d.ts +3 -0
- package/src/tools/mail/templates/auth-welcome.d.ts.map +1 -0
- package/src/tools/mail/templates/auth-welcome.js +236 -0
- package/src/tools/mail/templates/general.d.ts +3 -0
- package/src/tools/mail/templates/general.d.ts.map +1 -0
- package/src/tools/mail/templates/general.js +109 -0
- package/src/tools/mail/templates/index.js +2 -2
- package/src/tools/mail/templates/job-completed.d.ts +3 -0
- package/src/tools/mail/templates/job-completed.d.ts.map +1 -0
- package/src/tools/mail/templates/job-completed.js +188 -0
- package/src/tools/mail/templates/notifications-new-comment.d.ts +3 -0
- package/src/tools/mail/templates/notifications-new-comment.d.ts.map +1 -0
- package/src/tools/mail/templates/notifications-new-comment.js +228 -0
- package/src/tools/mail/templates/password-reset.d.ts +3 -0
- package/src/tools/mail/templates/password-reset.d.ts.map +1 -0
- package/src/tools/mail/templates/password-reset.js +221 -0
- package/src/tools/mail/templates/performance-report.d.ts +3 -0
- package/src/tools/mail/templates/performance-report.d.ts.map +1 -0
- package/src/tools/mail/templates/performance-report.js +258 -0
- package/src/tools/mail/templates/welcome.d.ts +3 -0
- package/src/tools/mail/templates/welcome.d.ts.map +1 -0
- package/src/tools/mail/templates/welcome.js +187 -0
- package/src/tools/mail/templates/worker-alert.d.ts +3 -0
- package/src/tools/mail/templates/worker-alert.d.ts.map +1 -0
- package/src/tools/mail/templates/worker-alert.js +229 -0
- package/src/tools/notification/Notification.js +1 -1
- package/src/tools/notification/testingHelpers.js +6 -5
- package/src/tools/queue/AdvancedQueue.js +2 -6
- package/src/tools/queue/IdempotencyManager.d.ts +6 -0
- package/src/tools/queue/IdempotencyManager.d.ts.map +1 -0
- package/src/tools/queue/IdempotencyManager.js +36 -0
- package/src/tools/queue/JobHeartbeatStore.d.ts +16 -0
- package/src/tools/queue/JobHeartbeatStore.d.ts.map +1 -0
- package/src/tools/queue/JobHeartbeatStore.js +67 -0
- package/src/tools/queue/JobReconciliationRunner.d.ts +16 -0
- package/src/tools/queue/JobReconciliationRunner.d.ts.map +1 -0
- package/src/tools/queue/JobReconciliationRunner.js +56 -0
- package/src/tools/queue/JobRecoveryDaemon.d.ts +27 -0
- package/src/tools/queue/JobRecoveryDaemon.d.ts.map +1 -0
- package/src/tools/queue/JobRecoveryDaemon.js +303 -0
- package/src/tools/queue/JobStateTracker.d.ts +140 -0
- package/src/tools/queue/JobStateTracker.d.ts.map +1 -0
- package/src/tools/queue/JobStateTracker.js +409 -0
- package/src/tools/queue/JobStateTrackerDbPersistence.d.ts +12 -0
- package/src/tools/queue/JobStateTrackerDbPersistence.d.ts.map +1 -0
- package/src/tools/queue/JobStateTrackerDbPersistence.js +239 -0
- package/src/tools/queue/Queue.d.ts.map +1 -1
- package/src/tools/queue/Queue.js +160 -16
- package/src/tools/queue/QueueDataRedactor.d.ts +6 -0
- package/src/tools/queue/QueueDataRedactor.d.ts.map +1 -0
- package/src/tools/queue/QueueDataRedactor.js +45 -0
- package/src/tools/queue/QueueExtensions.d.ts.map +1 -1
- package/src/tools/queue/QueueExtensions.js +2 -1
- package/src/tools/queue/QueueReliabilityMetrics.d.ts +38 -0
- package/src/tools/queue/QueueReliabilityMetrics.d.ts.map +1 -0
- package/src/tools/queue/QueueReliabilityMetrics.js +131 -0
- package/src/tools/queue/QueueReliabilityOrchestrator.d.ts +7 -0
- package/src/tools/queue/QueueReliabilityOrchestrator.d.ts.map +1 -0
- package/src/tools/queue/QueueReliabilityOrchestrator.js +59 -0
- package/src/tools/queue/QueueRuntimeRegistration.d.ts +1 -9
- package/src/tools/queue/QueueRuntimeRegistration.d.ts.map +1 -1
- package/src/tools/queue/QueueRuntimeRegistration.js +75 -4
- package/src/tools/queue/QueueTracing.d.ts +32 -0
- package/src/tools/queue/QueueTracing.d.ts.map +1 -0
- package/src/tools/queue/QueueTracing.js +151 -0
- package/src/tools/queue/StalledJobMonitor.d.ts +5 -0
- package/src/tools/queue/StalledJobMonitor.d.ts.map +1 -0
- package/src/tools/queue/StalledJobMonitor.js +21 -0
- package/src/tools/queue/TimeoutManager.d.ts +14 -0
- package/src/tools/queue/TimeoutManager.d.ts.map +1 -0
- package/src/tools/queue/TimeoutManager.js +77 -0
- package/src/tools/queue/drivers/Redis.d.ts +1 -0
- package/src/tools/queue/drivers/Redis.d.ts.map +1 -1
- package/src/tools/queue/drivers/Redis.js +1 -0
- package/src/tools/queue/index.d.ts +10 -0
- package/src/tools/queue/index.d.ts.map +1 -1
- package/src/tools/queue/index.js +10 -0
- package/src/tools/storage/drivers/R2.d.ts +13 -0
- package/src/tools/storage/drivers/R2.d.ts.map +1 -1
- package/src/tools/storage/drivers/R2.js +29 -0
- package/src/zintrust.plugins.d.ts +9 -0
- package/src/zintrust.plugins.d.ts.map +1 -0
- package/src/zintrust.plugins.js +7 -0
- package/src/zintrust.plugins.wg.d.ts +9 -0
- package/src/zintrust.plugins.wg.d.ts.map +1 -0
- package/src/zintrust.plugins.wg.js +7 -0
package/src/orm/QueryBuilder.js
CHANGED
|
@@ -36,6 +36,7 @@ const escapeIdentifier = (id, dialect) => {
|
|
|
36
36
|
};
|
|
37
37
|
const SAFE_IDENTIFIER_PATH = /^[A-Za-z_]\w*(?:\.[A-Za-z_]\w*)*$/;
|
|
38
38
|
const SAFE_IDENTIFIER = /^[A-Za-z_]\w*$/;
|
|
39
|
+
const SAFE_FUNCTION_CALL = /^[A-Za-z_]\w*\(\)$/;
|
|
39
40
|
const assertSafeIdentifierPath = (id, label) => {
|
|
40
41
|
const trimmed = id.trim();
|
|
41
42
|
if (trimmed.length === 0) {
|
|
@@ -54,6 +55,20 @@ const assertSafeIdentifier = (id, label) => {
|
|
|
54
55
|
throw ErrorFactory.createDatabaseError(`Unsafe SQL identifier for ${label}`);
|
|
55
56
|
}
|
|
56
57
|
};
|
|
58
|
+
const isRawValue = (value) => typeof value === 'object' &&
|
|
59
|
+
value !== null &&
|
|
60
|
+
'__raw' in value &&
|
|
61
|
+
typeof value.__raw === 'string';
|
|
62
|
+
const assertSafeRawExpression = (raw) => {
|
|
63
|
+
const trimmed = raw.trim();
|
|
64
|
+
if (trimmed.length === 0) {
|
|
65
|
+
throw ErrorFactory.createDatabaseError('Empty raw SQL expression');
|
|
66
|
+
}
|
|
67
|
+
if (SAFE_IDENTIFIER_PATH.test(trimmed) || SAFE_FUNCTION_CALL.test(trimmed)) {
|
|
68
|
+
return trimmed;
|
|
69
|
+
}
|
|
70
|
+
throw ErrorFactory.createDatabaseError('Unsafe raw SQL expression');
|
|
71
|
+
};
|
|
57
72
|
const normalizeOrderDirection = (direction) => {
|
|
58
73
|
if (direction === undefined || direction === null)
|
|
59
74
|
return 'ASC';
|
|
@@ -370,7 +385,9 @@ const compileInsert = (tableName, values, dialect) => {
|
|
|
370
385
|
parameters.push(item[key]);
|
|
371
386
|
}
|
|
372
387
|
}
|
|
373
|
-
const
|
|
388
|
+
const baseSql = `INSERT INTO ${escapeIdentifier(tableName, dialect)} (${colsSql}) VALUES ${placeholders}`;
|
|
389
|
+
const wantsReturning = dialect === 'postgresql' && items.length === 1;
|
|
390
|
+
const sql = wantsReturning ? `${baseSql} RETURNING id` : baseSql;
|
|
374
391
|
return { sql, parameters };
|
|
375
392
|
};
|
|
376
393
|
const compileUpdate = (tableName, values, conditions, dialect) => {
|
|
@@ -384,8 +401,20 @@ const compileUpdate = (tableName, values, conditions, dialect) => {
|
|
|
384
401
|
assertSafeIdentifierPath(tableName, 'table name');
|
|
385
402
|
for (const key of keys)
|
|
386
403
|
assertSafeIdentifier(key, 'update column');
|
|
387
|
-
const
|
|
388
|
-
const setParams =
|
|
404
|
+
const setParts = [];
|
|
405
|
+
const setParams = [];
|
|
406
|
+
for (const key of keys) {
|
|
407
|
+
const value = values[key];
|
|
408
|
+
if (isRawValue(value)) {
|
|
409
|
+
const rawSql = assertSafeRawExpression(value.__raw);
|
|
410
|
+
setParts.push(`${escapeIdentifier(key, dialect)} = ${rawSql}`);
|
|
411
|
+
}
|
|
412
|
+
else {
|
|
413
|
+
setParts.push(`${escapeIdentifier(key, dialect)} = ?`);
|
|
414
|
+
setParams.push(value);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
const setSql = setParts.join(', ');
|
|
389
418
|
const where = compileWhere(conditions, dialect);
|
|
390
419
|
const sql = `UPDATE ${escapeIdentifier(tableName, dialect)} SET ${setSql}${where.sql}`;
|
|
391
420
|
return { sql, parameters: [...setParams, ...where.parameters] };
|
|
@@ -479,6 +508,7 @@ function attachWhereMethods(builder, state) {
|
|
|
479
508
|
};
|
|
480
509
|
builder.andWhere = (column, operator, value) => builder.where(column, operator, value);
|
|
481
510
|
builder.orWhere = (column, operator, value) => builder.where(column, operator, value);
|
|
511
|
+
builder.whereNull = (column) => builder.where(column, 'IS', null);
|
|
482
512
|
builder.whereIn = (column, values) => {
|
|
483
513
|
builder.where(column, 'IN', values);
|
|
484
514
|
return builder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaCompiler.d.ts","sourceRoot":"","sources":["../../../src/orm/SchemaCompiler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAoB,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"SchemaCompiler.d.ts","sourceRoot":"","sources":["../../../src/orm/SchemaCompiler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAoB,OAAO,EAAE,MAAM,aAAa,CAAC;AA+I7D,eAAO,MAAM,cAAc;oBAEnB,SAAS,UACL,OAAO,SACR;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,OAAO,CAAC,IAAI,CAAC;kBAMI,SAAS,SAAS,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EAM5D,CAAC"}
|
|
@@ -80,7 +80,7 @@ function getColumnTypeSql(driver, def) {
|
|
|
80
80
|
return specialSql;
|
|
81
81
|
return 'TEXT';
|
|
82
82
|
}
|
|
83
|
-
function getDefaultValueSql(table, def) {
|
|
83
|
+
function getDefaultValueSql(driver, table, def) {
|
|
84
84
|
if (def.default === undefined)
|
|
85
85
|
return null;
|
|
86
86
|
const dv = def.default;
|
|
@@ -88,8 +88,11 @@ function getDefaultValueSql(table, def) {
|
|
|
88
88
|
return 'DEFAULT NULL';
|
|
89
89
|
if (typeof dv === 'number' && Number.isFinite(dv))
|
|
90
90
|
return `DEFAULT ${dv}`;
|
|
91
|
-
if (typeof dv === 'boolean')
|
|
91
|
+
if (typeof dv === 'boolean') {
|
|
92
|
+
if (driver === 'postgresql')
|
|
93
|
+
return `DEFAULT ${dv ? 'true' : 'false'}`;
|
|
92
94
|
return `DEFAULT ${dv ? 1 : 0}`;
|
|
95
|
+
}
|
|
93
96
|
if (typeof dv === 'string') {
|
|
94
97
|
const escaped = dv.replaceAll("'", "''");
|
|
95
98
|
return `DEFAULT '${escaped}'`;
|
|
@@ -113,7 +116,7 @@ function columnSql(driver, table, def) {
|
|
|
113
116
|
parts.push('UNIQUE');
|
|
114
117
|
if (isPrimary)
|
|
115
118
|
parts.push('PRIMARY KEY');
|
|
116
|
-
const defaultVal = getDefaultValueSql(table, def);
|
|
119
|
+
const defaultVal = getDefaultValueSql(driver, table, def);
|
|
117
120
|
if (defaultVal !== null)
|
|
118
121
|
parts.push(defaultVal);
|
|
119
122
|
return parts.join(' ');
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const SchemaWriter: (sql: string) => Promise<void>;
|
|
2
|
+
export declare const StatementRegistryBuild: Readonly<{
|
|
3
|
+
/**
|
|
4
|
+
* Convert a JSONL capture file into a registry map.
|
|
5
|
+
*
|
|
6
|
+
* Input line shape: { statementId, sql }
|
|
7
|
+
* Output shape: { [statementId]: sql }
|
|
8
|
+
*/
|
|
9
|
+
fromJsonl(jsonlText: string): Record<string, string>;
|
|
10
|
+
/** Merge registries, with `next` winning on collisions. */
|
|
11
|
+
merge(base: Record<string, string> | undefined, next: Record<string, string> | undefined): Record<string, string>;
|
|
12
|
+
/** Serialize a registry map as JSON suitable for `ZT_D1_STATEMENTS_JSON`. */
|
|
13
|
+
toStatementsJson(registry: Record<string, string>): string;
|
|
14
|
+
}>;
|
|
15
|
+
//# sourceMappingURL=SchemaStatemenWriter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaStatemenWriter.d.ts","sourceRoot":"","sources":["../../../src/orm/SchemaStatemenWriter.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,YAAY,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,IAAI,CAmB5D,CAAC;AAEF,eAAO,MAAM,sBAAsB;IACjC;;;;;OAKG;yBACkB,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAkBpD,2DAA2D;gBAEnD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,QAClC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GACvC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMzB,6EAA6E;+BAClD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;EAG1D,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { appConfig } from '../config/index.js';
|
|
2
|
+
import { Env } from '../config/env.js';
|
|
3
|
+
import { SignedRequest } from '../security/SignedRequest.js';
|
|
4
|
+
const seenStatementIds = new Set();
|
|
5
|
+
const MAX_SEEN_STATEMENT_IDS = Math.max(1, Env.getInt('SQL_WRITER_MAX_SEEN_STATEMENT_IDS', 50_000));
|
|
6
|
+
const rememberStatementId = (statementId) => {
|
|
7
|
+
if (seenStatementIds.has(statementId))
|
|
8
|
+
return false;
|
|
9
|
+
seenStatementIds.add(statementId);
|
|
10
|
+
// Bound memory growth in long-lived processes.
|
|
11
|
+
if (seenStatementIds.size > MAX_SEEN_STATEMENT_IDS) {
|
|
12
|
+
seenStatementIds.clear();
|
|
13
|
+
seenStatementIds.add(statementId);
|
|
14
|
+
}
|
|
15
|
+
return true;
|
|
16
|
+
};
|
|
17
|
+
export const SchemaWriter = async (sql) => {
|
|
18
|
+
// START LEARNING MODE: If ZT_D1_LEARN_FILE is set, save the statement to JSONL
|
|
19
|
+
const learnFile = Env.get('ZT_D1_LEARN_FILE', '');
|
|
20
|
+
const useSqlWriter = Env.getBool('SQL_WRITER', false);
|
|
21
|
+
if (learnFile === '')
|
|
22
|
+
return;
|
|
23
|
+
if (!(appConfig.isDevelopment() || useSqlWriter))
|
|
24
|
+
return;
|
|
25
|
+
const statementId = await SignedRequest.sha256Hex(sql);
|
|
26
|
+
if (!rememberStatementId(statementId))
|
|
27
|
+
return;
|
|
28
|
+
try {
|
|
29
|
+
const fs = (await import('../node-singletons/fs.js')).fsPromises;
|
|
30
|
+
const line = JSON.stringify({ statementId, sql }) + '\n';
|
|
31
|
+
await fs.appendFile(learnFile, line, 'utf-8');
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Best effort; ignore errors during learning to avoid crashing app
|
|
35
|
+
}
|
|
36
|
+
// END LEARNING MODE
|
|
37
|
+
};
|
|
38
|
+
export const StatementRegistryBuild = Object.freeze({
|
|
39
|
+
/**
|
|
40
|
+
* Convert a JSONL capture file into a registry map.
|
|
41
|
+
*
|
|
42
|
+
* Input line shape: { statementId, sql }
|
|
43
|
+
* Output shape: { [statementId]: sql }
|
|
44
|
+
*/
|
|
45
|
+
fromJsonl(jsonlText) {
|
|
46
|
+
const out = {};
|
|
47
|
+
const lines = jsonlText.split(/\r?\n/);
|
|
48
|
+
for (const line of lines) {
|
|
49
|
+
const trimmed = line.trim();
|
|
50
|
+
if (trimmed === '')
|
|
51
|
+
continue;
|
|
52
|
+
try {
|
|
53
|
+
const parsed = JSON.parse(trimmed);
|
|
54
|
+
if (typeof parsed.statementId !== 'string' || parsed.statementId.trim() === '')
|
|
55
|
+
continue;
|
|
56
|
+
if (typeof parsed.sql !== 'string' || parsed.sql.trim() === '')
|
|
57
|
+
continue;
|
|
58
|
+
out[parsed.statementId] = parsed.sql;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Ignore malformed lines
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return out;
|
|
65
|
+
},
|
|
66
|
+
/** Merge registries, with `next` winning on collisions. */
|
|
67
|
+
merge(base, next) {
|
|
68
|
+
if (base === undefined)
|
|
69
|
+
return next ?? {};
|
|
70
|
+
if (next === undefined)
|
|
71
|
+
return base;
|
|
72
|
+
return { ...base, ...next };
|
|
73
|
+
},
|
|
74
|
+
/** Serialize a registry map as JSON suitable for `ZT_D1_STATEMENTS_JSON`. */
|
|
75
|
+
toStatementsJson(registry) {
|
|
76
|
+
return JSON.stringify(registry);
|
|
77
|
+
},
|
|
78
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"D1Adapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/D1Adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"D1Adapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/D1Adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EACV,cAAc,EAEd,gBAAgB,EAEjB,MAAM,sBAAsB,CAAC;AAyD9B;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB;;OAEG;oBAEa,cAAc,GAAG,gBAAgB;EAkIjD,CAAC;AAEH,eAAe,SAAS,CAAC"}
|
|
@@ -5,8 +5,44 @@ import { Cloudflare } from '../../config/cloudflare.js';
|
|
|
5
5
|
import { FeatureFlags } from '../../config/features.js';
|
|
6
6
|
import { Logger } from '../../config/logger.js';
|
|
7
7
|
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
8
|
+
import { isObject } from '../../helper/index.js';
|
|
8
9
|
import { AdaptersEnum } from '../../migrations/enum/index.js';
|
|
9
10
|
import { QueryBuilder } from '../QueryBuilder.js';
|
|
11
|
+
const isRecord = (value) => isObject(value);
|
|
12
|
+
const toNumber = (value) => {
|
|
13
|
+
if (typeof value === 'number' && Number.isFinite(value))
|
|
14
|
+
return value;
|
|
15
|
+
return null;
|
|
16
|
+
};
|
|
17
|
+
const toInsertId = (value) => {
|
|
18
|
+
if (typeof value === 'number' || typeof value === 'string' || typeof value === 'bigint') {
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
return undefined;
|
|
22
|
+
};
|
|
23
|
+
const isMutatingSql = (sql) => {
|
|
24
|
+
const normalized = sql.trimStart().toLowerCase();
|
|
25
|
+
return (normalized.startsWith('insert') ||
|
|
26
|
+
normalized.startsWith('update') ||
|
|
27
|
+
normalized.startsWith('delete') ||
|
|
28
|
+
normalized.startsWith('create') ||
|
|
29
|
+
normalized.startsWith('drop') ||
|
|
30
|
+
normalized.startsWith('alter') ||
|
|
31
|
+
normalized.startsWith('replace'));
|
|
32
|
+
};
|
|
33
|
+
const extractMeta = (value) => {
|
|
34
|
+
if (!isRecord(value))
|
|
35
|
+
return { changes: 0 };
|
|
36
|
+
const changes = toNumber(value['changes']) ??
|
|
37
|
+
toNumber(value['rows_written']) ??
|
|
38
|
+
toNumber(value['rows_read']) ??
|
|
39
|
+
0;
|
|
40
|
+
const lastInsertId = toInsertId(value['lastRowId']) ??
|
|
41
|
+
toInsertId(value['last_row_id']) ??
|
|
42
|
+
toInsertId(value['lastInsertRowid']) ??
|
|
43
|
+
toInsertId(value['last_insert_rowid']);
|
|
44
|
+
return { changes, lastInsertId };
|
|
45
|
+
};
|
|
10
46
|
/**
|
|
11
47
|
* Get D1 binding from config or global environment
|
|
12
48
|
*/
|
|
@@ -43,11 +79,25 @@ export const D1Adapter = Object.freeze({
|
|
|
43
79
|
}
|
|
44
80
|
try {
|
|
45
81
|
const stmt = db.prepare(sql);
|
|
82
|
+
if (isMutatingSql(sql)) {
|
|
83
|
+
const runResult = await stmt.bind(...parameters).run();
|
|
84
|
+
const runRecord = runResult;
|
|
85
|
+
const meta = extractMeta(runRecord.meta);
|
|
86
|
+
return {
|
|
87
|
+
rows: [],
|
|
88
|
+
rowCount: meta.changes,
|
|
89
|
+
lastInsertId: meta.lastInsertId,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
46
92
|
const result = await stmt.bind(...parameters).all();
|
|
47
|
-
const
|
|
93
|
+
const rawResult = result;
|
|
94
|
+
const rows = rawResult.results ?? [];
|
|
95
|
+
const metaValue = rawResult.meta;
|
|
96
|
+
const meta = extractMeta(metaValue);
|
|
48
97
|
return {
|
|
49
98
|
rows,
|
|
50
|
-
rowCount: rows.length,
|
|
99
|
+
rowCount: rows.length > 0 ? rows.length : meta.changes,
|
|
100
|
+
lastInsertId: meta.lastInsertId,
|
|
51
101
|
};
|
|
52
102
|
}
|
|
53
103
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"D1RemoteAdapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/D1RemoteAdapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"D1RemoteAdapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/D1RemoteAdapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AA2T1F,eAAO,MAAM,eAAe;oBACV,cAAc,GAAG,gBAAgB;EAgBjD,CAAC;AAEH,eAAe,eAAe,CAAC"}
|
|
@@ -5,16 +5,47 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { RemoteSignedJson } from '../../common/RemoteSignedJson.js';
|
|
7
7
|
import { Env } from '../../config/env.js';
|
|
8
|
+
import { Logger } from '../../config/logger.js';
|
|
8
9
|
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
9
10
|
import { AdaptersEnum } from '../../migrations/enum/index.js';
|
|
11
|
+
import { isRecord } from '../adapters/SqlProxyAdapterUtils.js';
|
|
12
|
+
import { createStatementId } from '../adapters/SqlProxyRegistryMode.js';
|
|
10
13
|
import { QueryBuilder } from '../QueryBuilder.js';
|
|
11
|
-
import {
|
|
14
|
+
import { SchemaWriter } from '../SchemaStatemenWriter.js';
|
|
15
|
+
import { isMutatingSql } from '../../proxy/isMutatingSql.js';
|
|
16
|
+
let warnedFallbackCredentials = false;
|
|
17
|
+
const resolveSigningPrefix = (baseUrl) => {
|
|
18
|
+
try {
|
|
19
|
+
const parsed = new URL(baseUrl);
|
|
20
|
+
const path = parsed.pathname.endsWith('/') ? parsed.pathname.slice(0, -1) : parsed.pathname;
|
|
21
|
+
if (path === '' || path === '/')
|
|
22
|
+
return undefined;
|
|
23
|
+
return path;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
12
29
|
const createRemoteConfig = () => {
|
|
30
|
+
const directKeyId = Env.get('D1_REMOTE_KEY_ID', '').trim();
|
|
31
|
+
const directSecret = Env.get('D1_REMOTE_SECRET', '').trim();
|
|
32
|
+
// Intentionally pass empty values when missing so RemoteSignedJson's credential normalizer
|
|
33
|
+
// derives the fallback keyId/secret (APP_NAME/APP_KEY) in a consistent, safe way.
|
|
34
|
+
const keyId = directKeyId === '' ? '' : directKeyId;
|
|
35
|
+
const secret = directSecret === '' ? '' : directSecret;
|
|
36
|
+
if (directKeyId === '' || directSecret === '') {
|
|
37
|
+
if (!warnedFallbackCredentials) {
|
|
38
|
+
warnedFallbackCredentials = true;
|
|
39
|
+
Logger.warn('D1_REMOTE_KEY_ID / D1_REMOTE_SECRET missing; using fallback signing credentials (APP_NAME / APP_KEY).');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const envName = (Env.get('NODE_ENV', 'development') || 'development').trim().toLowerCase();
|
|
43
|
+
const defaultMode = envName === 'production' ? 'registry' : 'sql';
|
|
13
44
|
const settings = {
|
|
14
45
|
baseUrl: Env.get('D1_REMOTE_URL'),
|
|
15
|
-
keyId
|
|
16
|
-
secret
|
|
17
|
-
mode: Env.get('D1_REMOTE_MODE',
|
|
46
|
+
keyId,
|
|
47
|
+
secret,
|
|
48
|
+
mode: Env.get('D1_REMOTE_MODE', defaultMode) ?? defaultMode,
|
|
18
49
|
timeoutMs: Env.getInt('ZT_PROXY_TIMEOUT_MS', Env.REQUEST_TIMEOUT),
|
|
19
50
|
};
|
|
20
51
|
const remote = {
|
|
@@ -22,8 +53,9 @@ const createRemoteConfig = () => {
|
|
|
22
53
|
keyId: settings.keyId,
|
|
23
54
|
secret: settings.secret,
|
|
24
55
|
timeoutMs: settings.timeoutMs,
|
|
56
|
+
signaturePathPrefixToStrip: resolveSigningPrefix(settings.baseUrl),
|
|
25
57
|
missingUrlMessage: 'D1 remote proxy URL is missing (D1_REMOTE_URL)',
|
|
26
|
-
missingCredentialsMessage: 'D1 remote signing credentials are missing (D1_REMOTE_KEY_ID / D1_REMOTE_SECRET)',
|
|
58
|
+
missingCredentialsMessage: 'D1 remote signing credentials are missing (D1_REMOTE_KEY_ID / D1_REMOTE_SECRET). Fallbacks: APP_NAME and APP_KEY.',
|
|
27
59
|
messages: {
|
|
28
60
|
unauthorized: 'D1 remote proxy unauthorized',
|
|
29
61
|
forbidden: 'D1 remote proxy forbidden',
|
|
@@ -35,33 +67,33 @@ const createRemoteConfig = () => {
|
|
|
35
67
|
};
|
|
36
68
|
return { mode: settings.mode, remote };
|
|
37
69
|
};
|
|
38
|
-
const isMutatingSql = (sql) => {
|
|
39
|
-
const s = sql.trimStart().toLowerCase();
|
|
40
|
-
return (s.startsWith('insert') ||
|
|
41
|
-
s.startsWith('update') ||
|
|
42
|
-
s.startsWith('delete') ||
|
|
43
|
-
s.startsWith('create') ||
|
|
44
|
-
s.startsWith('drop') ||
|
|
45
|
-
s.startsWith('alter') ||
|
|
46
|
-
s.startsWith('replace'));
|
|
47
|
-
};
|
|
48
70
|
const createStatementPayload = async (sql, parameters) => {
|
|
49
|
-
const statementId = await
|
|
71
|
+
const statementId = await createStatementId(sql);
|
|
72
|
+
await SchemaWriter(sql);
|
|
50
73
|
return { statementId, params: parameters };
|
|
51
74
|
};
|
|
52
|
-
const isRecord = (value) => typeof value === 'object' && value !== null;
|
|
53
75
|
const isQueryResponse = (value) => isRecord(value) &&
|
|
54
76
|
Array.isArray(value['rows']) &&
|
|
55
77
|
typeof value['rowCount'] === 'number' &&
|
|
56
78
|
value['rows'].every((r) => isRecord(r));
|
|
57
79
|
const isQueryOneResponse = (value) => isRecord(value) && 'row' in value && (value['row'] === null || isRecord(value['row']));
|
|
58
|
-
const
|
|
80
|
+
const getExecMeta = (value) => {
|
|
59
81
|
if (!isRecord(value) || typeof value['ok'] !== 'boolean')
|
|
60
|
-
return 0;
|
|
82
|
+
return { changes: 0 };
|
|
61
83
|
const meta = value['meta'];
|
|
62
|
-
if (!isRecord(meta)
|
|
63
|
-
return 0;
|
|
64
|
-
|
|
84
|
+
if (!isRecord(meta))
|
|
85
|
+
return { changes: 0 };
|
|
86
|
+
const changes = typeof meta['changes'] === 'number' ? meta['changes'] : 0;
|
|
87
|
+
const lastRowIdCandidate = meta['lastRowId'] ??
|
|
88
|
+
meta['last_row_id'] ??
|
|
89
|
+
meta['lastInsertRowid'] ??
|
|
90
|
+
meta['last_insert_rowid'];
|
|
91
|
+
const lastRowId = typeof lastRowIdCandidate === 'number' ||
|
|
92
|
+
typeof lastRowIdCandidate === 'string' ||
|
|
93
|
+
typeof lastRowIdCandidate === 'bigint'
|
|
94
|
+
? lastRowIdCandidate
|
|
95
|
+
: undefined;
|
|
96
|
+
return { changes, lastRowId };
|
|
65
97
|
};
|
|
66
98
|
const queryRegistry = async (settings, sql, parameters) => {
|
|
67
99
|
const payload = await createStatementPayload(sql, parameters);
|
|
@@ -73,15 +105,18 @@ const queryRegistry = async (settings, sql, parameters) => {
|
|
|
73
105
|
const row = out.row;
|
|
74
106
|
return { rows: row ? [row] : [], rowCount: row ? 1 : 0 };
|
|
75
107
|
}
|
|
76
|
-
|
|
108
|
+
const meta = getExecMeta(out);
|
|
109
|
+
return { rows: [], rowCount: meta.changes, lastInsertId: meta.lastRowId };
|
|
77
110
|
};
|
|
78
111
|
const querySqlMode = async (settings, sql, parameters) => {
|
|
112
|
+
await SchemaWriter(sql);
|
|
79
113
|
if (isMutatingSql(sql)) {
|
|
80
114
|
const out = await RemoteSignedJson.request(settings, '/zin/d1/exec', {
|
|
81
115
|
sql,
|
|
82
116
|
params: parameters,
|
|
83
117
|
});
|
|
84
|
-
|
|
118
|
+
const meta = getExecMeta(out);
|
|
119
|
+
return { rows: [], rowCount: meta.changes, lastInsertId: meta.lastRowId };
|
|
85
120
|
}
|
|
86
121
|
const out = await RemoteSignedJson.request(settings, '/zin/d1/query', {
|
|
87
122
|
sql,
|
|
@@ -89,75 +124,101 @@ const querySqlMode = async (settings, sql, parameters) => {
|
|
|
89
124
|
});
|
|
90
125
|
return { rows: out.rows, rowCount: out.rowCount };
|
|
91
126
|
};
|
|
127
|
+
const requireConnected = (getConnected) => {
|
|
128
|
+
if (!getConnected())
|
|
129
|
+
throw ErrorFactory.createConnectionError('Database not connected');
|
|
130
|
+
};
|
|
131
|
+
const createConnectMethod = (setConnected) => async () => {
|
|
132
|
+
setConnected(true);
|
|
133
|
+
return Promise.resolve(); // NOSONAR
|
|
134
|
+
};
|
|
135
|
+
const createDisconnectMethod = (setConnected) => async () => {
|
|
136
|
+
setConnected(false);
|
|
137
|
+
return Promise.resolve(); // NOSONAR
|
|
138
|
+
};
|
|
139
|
+
const createQueryMethod = (getConnected, mode, remote) => async (sql, parameters) => {
|
|
140
|
+
requireConnected(getConnected);
|
|
141
|
+
if (mode === 'registry') {
|
|
142
|
+
return queryRegistry(remote, sql, parameters);
|
|
143
|
+
}
|
|
144
|
+
return querySqlMode(remote, sql, parameters);
|
|
145
|
+
};
|
|
146
|
+
const createQueryOneMethod = (getConnected, mode, remote) => async (sql, parameters) => {
|
|
147
|
+
requireConnected(getConnected);
|
|
148
|
+
if (mode === 'registry') {
|
|
149
|
+
const payload = await createStatementPayload(sql, parameters);
|
|
150
|
+
const out = await RemoteSignedJson.request(remote, '/zin/d1/statement', payload);
|
|
151
|
+
if (isQueryOneResponse(out))
|
|
152
|
+
return out.row;
|
|
153
|
+
if (isQueryResponse(out))
|
|
154
|
+
return out.rows[0] ?? null;
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
await SchemaWriter(sql);
|
|
158
|
+
const out = await RemoteSignedJson.request(remote, '/zin/d1/queryOne', {
|
|
159
|
+
sql,
|
|
160
|
+
params: parameters,
|
|
161
|
+
});
|
|
162
|
+
return out.row;
|
|
163
|
+
};
|
|
164
|
+
const createPingMethod = (getConnected, methods) => async () => {
|
|
165
|
+
requireConnected(getConnected);
|
|
166
|
+
const sql = QueryBuilder.create('').select('1').toSQL();
|
|
167
|
+
await methods.queryOne(sql, []);
|
|
168
|
+
};
|
|
169
|
+
const createTransactionMethod = (getConnected, methods) => async (callback) => {
|
|
170
|
+
requireConnected(getConnected);
|
|
171
|
+
try {
|
|
172
|
+
return await callback(methods);
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
throw ErrorFactory.createTryCatchError('Transaction failed', error);
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
const createEnsureMigrationsTableMethod = (getConnected, methods) => async () => {
|
|
179
|
+
requireConnected(getConnected);
|
|
180
|
+
// D1 is SQLite under the hood; this schema matches the core migrator's expectations.
|
|
181
|
+
// Note: d1-remote migrations are expected to run in SQL mode (the CLI enforces this).
|
|
182
|
+
await methods.query(`CREATE TABLE IF NOT EXISTS migrations (
|
|
183
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
184
|
+
name TEXT NOT NULL,
|
|
185
|
+
scope TEXT NOT NULL DEFAULT 'global',
|
|
186
|
+
service TEXT NOT NULL DEFAULT '',
|
|
187
|
+
batch INTEGER NOT NULL,
|
|
188
|
+
status TEXT NOT NULL,
|
|
189
|
+
applied_at TEXT NULL,
|
|
190
|
+
created_at TEXT NOT NULL,
|
|
191
|
+
UNIQUE(name, scope, service)
|
|
192
|
+
)`, []);
|
|
193
|
+
};
|
|
194
|
+
const createRawQueryMethod = (methods) => async (sql, parameters = []) => {
|
|
195
|
+
const out = await methods.query(sql, parameters);
|
|
196
|
+
return out.rows;
|
|
197
|
+
};
|
|
198
|
+
const createAdapterMethods = (getConnected, setConnected, mode, remote) => {
|
|
199
|
+
const methods = {};
|
|
200
|
+
methods.connect = createConnectMethod(setConnected);
|
|
201
|
+
methods.disconnect = createDisconnectMethod(setConnected);
|
|
202
|
+
methods.query = createQueryMethod(getConnected, mode, remote);
|
|
203
|
+
methods.queryOne = createQueryOneMethod(getConnected, mode, remote);
|
|
204
|
+
methods.ping = createPingMethod(getConnected, methods);
|
|
205
|
+
methods.transaction = createTransactionMethod(getConnected, methods);
|
|
206
|
+
methods.ensureMigrationsTable = createEnsureMigrationsTableMethod(getConnected, methods);
|
|
207
|
+
methods.rawQuery = createRawQueryMethod(methods);
|
|
208
|
+
methods.getType = () => AdaptersEnum.d1Remote;
|
|
209
|
+
methods.isConnected = () => getConnected();
|
|
210
|
+
methods.getPlaceholder = (_index) => '?';
|
|
211
|
+
return methods;
|
|
212
|
+
};
|
|
213
|
+
const createAdapter = (getConnected, setConnected, mode, remote) => createAdapterMethods(getConnected, setConnected, mode, remote);
|
|
92
214
|
export const D1RemoteAdapter = Object.freeze({
|
|
93
215
|
create(_config) {
|
|
94
216
|
let connected = false;
|
|
95
217
|
const { mode, remote } = createRemoteConfig();
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
},
|
|
101
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
102
|
-
async disconnect() {
|
|
103
|
-
connected = false;
|
|
104
|
-
},
|
|
105
|
-
async query(sql, parameters) {
|
|
106
|
-
if (!connected)
|
|
107
|
-
throw ErrorFactory.createConnectionError('Database not connected');
|
|
108
|
-
if (mode === 'registry') {
|
|
109
|
-
return queryRegistry(remote, sql, parameters);
|
|
110
|
-
}
|
|
111
|
-
return querySqlMode(remote, sql, parameters);
|
|
112
|
-
},
|
|
113
|
-
async queryOne(sql, parameters) {
|
|
114
|
-
if (!connected)
|
|
115
|
-
throw ErrorFactory.createConnectionError('Database not connected');
|
|
116
|
-
if (mode === 'registry') {
|
|
117
|
-
const payload = await createStatementPayload(sql, parameters);
|
|
118
|
-
const out = await RemoteSignedJson.request(remote, '/zin/d1/statement', payload);
|
|
119
|
-
if (isQueryOneResponse(out))
|
|
120
|
-
return out.row;
|
|
121
|
-
if (isQueryResponse(out))
|
|
122
|
-
return out.rows[0] ?? null;
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
const out = await RemoteSignedJson.request(remote, '/zin/d1/queryOne', {
|
|
126
|
-
sql,
|
|
127
|
-
params: parameters,
|
|
128
|
-
});
|
|
129
|
-
return out.row;
|
|
130
|
-
},
|
|
131
|
-
async ping() {
|
|
132
|
-
if (!connected)
|
|
133
|
-
throw ErrorFactory.createConnectionError('Database not connected');
|
|
134
|
-
const sql = QueryBuilder.create('').select('1').toSQL();
|
|
135
|
-
await this.queryOne(sql, []);
|
|
136
|
-
},
|
|
137
|
-
async transaction(callback) {
|
|
138
|
-
if (!connected)
|
|
139
|
-
throw ErrorFactory.createConnectionError('Database not connected');
|
|
140
|
-
try {
|
|
141
|
-
return await callback(this);
|
|
142
|
-
}
|
|
143
|
-
catch (error) {
|
|
144
|
-
throw ErrorFactory.createTryCatchError('Transaction failed', error);
|
|
145
|
-
}
|
|
146
|
-
},
|
|
147
|
-
async rawQuery(sql, parameters = []) {
|
|
148
|
-
const out = await this.query(sql, parameters);
|
|
149
|
-
return out.rows;
|
|
150
|
-
},
|
|
151
|
-
getType() {
|
|
152
|
-
return AdaptersEnum.d1Remote;
|
|
153
|
-
},
|
|
154
|
-
isConnected() {
|
|
155
|
-
return connected;
|
|
156
|
-
},
|
|
157
|
-
getPlaceholder(_index) {
|
|
158
|
-
return '?';
|
|
159
|
-
},
|
|
160
|
-
};
|
|
218
|
+
const getConnected = () => connected;
|
|
219
|
+
return createAdapter(getConnected, (value) => {
|
|
220
|
+
connected = value;
|
|
221
|
+
}, mode, remote);
|
|
161
222
|
},
|
|
162
223
|
});
|
|
163
224
|
export default D1RemoteAdapter;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MongoDBProxyAdapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/MongoDBProxyAdapter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AA6D1E,wBAAgB,yBAAyB,IAAI,gBAAgB,CA4F5D"}
|