bazis 0.96.1
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/LICENSE +21 -0
- package/README.md +146 -0
- package/cli/build.ts +147 -0
- package/cli/codegen.ts +40 -0
- package/cli/generateModule.ts +187 -0
- package/cli/generateProject.ts +183 -0
- package/cli/main.ts +125 -0
- package/cli/moduleRegistration.ts +127 -0
- package/cli/naming.ts +124 -0
- package/cli/parseCli.ts +151 -0
- package/cli/templates/module.ts +497 -0
- package/cli/templates/pack.ts +76 -0
- package/cli/templates/passport.ts +178 -0
- package/core/agent/AgentContextBuilder.ts +567 -0
- package/core/agent/AgentDataDefinition.ts +8 -0
- package/core/agent/AgentRegistry.ts +539 -0
- package/core/agent/AgentRuntime.ts +47 -0
- package/core/agent/AgentToolExecutor.ts +2130 -0
- package/core/agent/AgentToolHooks.ts +39 -0
- package/core/agent/ModelProvider.ts +21 -0
- package/core/agent/README.md +229 -0
- package/core/agent/Tool.contract.ts +20 -0
- package/core/agent/decorators/Agent.ts +11 -0
- package/core/agent/decorators/Prompt.ts +11 -0
- package/core/agent/decorators/Task.ts +29 -0
- package/core/agent/decorators/Tool.ts +12 -0
- package/core/agent/errors.ts +43 -0
- package/core/agent/generated/catalog.ts +26 -0
- package/core/agent/index.ts +170 -0
- package/core/agent/internal/AgentExecutionDriver.ts +1497 -0
- package/core/agent/internal/AgentExecutionState.ts +775 -0
- package/core/agent/internal/AgentJsonSchema.ts +150 -0
- package/core/agent/internal/AgentModelBinding.ts +57 -0
- package/core/agent/internal/Schema.contract.ts +36 -0
- package/core/agent/internal/ToolAudit.projector.ts +163 -0
- package/core/agent/internal/ToolContract.validator.ts +102 -0
- package/core/agent/metadata.ts +398 -0
- package/core/agent/moduleContributions-v1.ts +113 -0
- package/core/agent/semantic.ts +903 -0
- package/core/agent/session/codec.ts +33 -0
- package/core/agent/session/contracts.ts +96 -0
- package/core/agent/session/entities.ts +84 -0
- package/core/agent/session/protector.ts +92 -0
- package/core/app/index.ts +5 -0
- package/core/app/runApp.ts +293 -0
- package/core/app/ui/index.ts +29 -0
- package/core/app/ui/uiProfileResolver.ts +966 -0
- package/core/app/ui/uiSurfaceHosting.ts +38 -0
- package/core/app/ui/uiSurfaceHttp.ts +476 -0
- package/core/background/BackgroundService.ts +223 -0
- package/core/background/backgroundModule.ts +42 -0
- package/core/background/decorator.ts +43 -0
- package/core/background/delay.ts +27 -0
- package/core/background/index.ts +15 -0
- package/core/cache/COMPATIBILITY.md +13 -0
- package/core/cache/ICache.ts +71 -0
- package/core/cache/MemoryCache.ts +394 -0
- package/core/cache/README.md +83 -0
- package/core/cache/SPEC.md +1355 -0
- package/core/cache/cacheModule.ts +21 -0
- package/core/cache/decorators/Cacheable.ts +38 -0
- package/core/cache/decorators/CacheableRedis.ts +39 -0
- package/core/cache/decorators/OutputCache.ts +33 -0
- package/core/cache/decorators/OutputRedisCache.ts +33 -0
- package/core/cache/decorators/cacheableMetadata.ts +78 -0
- package/core/cache/decorators/cacheableRedisMetadata.ts +81 -0
- package/core/cache/decorators/outputCacheMetadata.ts +71 -0
- package/core/cache/decorators/outputRedisCacheMetadata.ts +77 -0
- package/core/cache/di/classProviderHook.ts +26 -0
- package/core/cache/distributed/CacheCodec.ts +5 -0
- package/core/cache/distributed/DistributedCache.ts +403 -0
- package/core/cache/distributed/DistributedCacheDriver.ts +83 -0
- package/core/cache/distributed/DistributedCacheStores.ts +28 -0
- package/core/cache/distributed/IDistributedCache.ts +40 -0
- package/core/cache/distributed/NamedCacheRegistry.ts +23 -0
- package/core/cache/distributed/codecs.ts +32 -0
- package/core/cache/distributed/index.ts +19 -0
- package/core/cache/errors/CacheError.ts +16 -0
- package/core/cache/http/CachedHttpPayload.ts +213 -0
- package/core/cache/http/applyClientCacheHeaders.ts +61 -0
- package/core/cache/http/buildOutputCacheKey.ts +154 -0
- package/core/cache/http/buildRedisOutputCacheKey.ts +16 -0
- package/core/cache/http/composeOutputCache.ts +130 -0
- package/core/cache/http/outputCacheMiddleware.ts +111 -0
- package/core/cache/http/outputCacheSecurityWarning.ts +58 -0
- package/core/cache/http/outputRedisCacheMiddleware.ts +118 -0
- package/core/cache/index.ts +97 -0
- package/core/cache/internal/AutomaticCacheKey.ts +106 -0
- package/core/cache/internal/CacheKeyGuard.ts +56 -0
- package/core/cache/internal/buildCacheProviders.ts +146 -0
- package/core/cache/internal/normalizeCacheKey.ts +9 -0
- package/core/cache/internal/resolveCachePolicy.ts +32 -0
- package/core/cache/internal/resolveCacheableRedisPolicy.ts +17 -0
- package/core/cache/internal/resolveOutputRedisCachePolicy.ts +17 -0
- package/core/cache/providers/cachedProviders.ts +68 -0
- package/core/cache/services/cacheProxy.ts +243 -0
- package/core/cache/tokens/CACHE_POLICIES.ts +5 -0
- package/core/cache/tokens/DISTRIBUTED_CACHE.ts +30 -0
- package/core/cache/types/CacheEntry.ts +7 -0
- package/core/cache/types/CacheOptions.ts +60 -0
- package/core/cache/types/CachePolicy.ts +74 -0
- package/core/cache/types/CacheableRedisOptions.ts +23 -0
- package/core/cache/types/OutputRedisCacheOptions.ts +25 -0
- package/core/di/README.md +104 -0
- package/core/di/ServiceCollection.ts +185 -0
- package/core/di/ServiceProvider.ts +689 -0
- package/core/di/ServiceScope.ts +61 -0
- package/core/di/container.ts +38 -0
- package/core/di/errors/AmbiguousNamedDependencyError.ts +10 -0
- package/core/di/errors/AsyncResolutionRequiredError.ts +12 -0
- package/core/di/errors/CircularDependencyError.ts +10 -0
- package/core/di/errors/ClassDependenciesMismatchError.ts +15 -0
- package/core/di/errors/DiError.ts +6 -0
- package/core/di/errors/InvalidProviderError.ts +9 -0
- package/core/di/errors/ModuleEncapsulationError.ts +7 -0
- package/core/di/errors/ModuleOwnedProviderConflictError.ts +8 -0
- package/core/di/errors/NamedDependencyNotFoundError.ts +7 -0
- package/core/di/errors/OptionsValidationError.ts +7 -0
- package/core/di/errors/ProviderNotFoundError.ts +10 -0
- package/core/di/errors/ScopeDisposedError.ts +7 -0
- package/core/di/errors/ScopedServiceFromRootError.ts +9 -0
- package/core/di/errors/ServiceValidationError.ts +7 -0
- package/core/di/errors/index.ts +14 -0
- package/core/di/extensions/activator.ts +39 -0
- package/core/di/extensions/application.ts +117 -0
- package/core/di/extensions/hosted-service.ts +124 -0
- package/core/di/extensions/index.ts +23 -0
- package/core/di/extensions/options-reloadable.ts +137 -0
- package/core/di/extensions/options.ts +91 -0
- package/core/di/extensions/service-provider-token.ts +21 -0
- package/core/di/index.ts +97 -0
- package/core/di/internal/GraphValidator.ts +119 -0
- package/core/di/internal/HostedServicePlan.ts +158 -0
- package/core/di/internal/NamedTokenIndex.ts +55 -0
- package/core/di/internal/OpenGenericRegistration.ts +14 -0
- package/core/di/internal/ResolutionPlan.ts +18 -0
- package/core/di/internal/ResolutionScopeState.ts +19 -0
- package/core/di/internal/ResolutionTracker.ts +153 -0
- package/core/di/internal/ScopeLifecycle.ts +159 -0
- package/core/di/internal/ServiceRegistration.ts +14 -0
- package/core/di/internal/ServiceRegistry.ts +252 -0
- package/core/di/internal/classDeps.ts +38 -0
- package/core/di/internal/disposal.ts +58 -0
- package/core/di/internal/providerDeps.ts +26 -0
- package/core/di/module/DI.ts +146 -0
- package/core/di/module/Global.ts +25 -0
- package/core/di/module/Module.ts +44 -0
- package/core/di/module/ModuleRegistrar.ts +69 -0
- package/core/di/module/autoDeps.ts +39 -0
- package/core/di/module/classProviderHooks.ts +66 -0
- package/core/di/module/collectModuleConfigs.ts +57 -0
- package/core/di/module/collectModuleControllers.ts +53 -0
- package/core/di/module/collectModuleUiProfiles.ts +53 -0
- package/core/di/module/createContainer.ts +261 -0
- package/core/di/module/encapsulation.ts +416 -0
- package/core/di/module/encapsulationHooks.ts +36 -0
- package/core/di/module/generatedProviderAttachments.ts +102 -0
- package/core/di/module/index.ts +41 -0
- package/core/di/module/moduleExtensions.ts +35 -0
- package/core/di/module/moduleNameBinding.ts +136 -0
- package/core/di/module/moduleOwnedProviderContributors.ts +409 -0
- package/core/di/module/providerSelection.ts +90 -0
- package/core/di/module/shortcuts.ts +111 -0
- package/core/di/module/types/BazisModule.ts +71 -0
- package/core/di/module/types/DiRegistrar.ts +24 -0
- package/core/di/module/types/index.ts +2 -0
- package/core/di/provider/index.ts +26 -0
- package/core/di/provider/providerGuards.ts +17 -0
- package/core/di/provider/types/AsyncFactoryProvider.ts +15 -0
- package/core/di/provider/types/ClassProvider.ts +18 -0
- package/core/di/provider/types/FactoryProvider.ts +20 -0
- package/core/di/provider/types/KeyedDependency.ts +20 -0
- package/core/di/provider/types/LazyDependency.ts +31 -0
- package/core/di/provider/types/NamedDependency.ts +16 -0
- package/core/di/provider/types/Provider.ts +10 -0
- package/core/di/provider/types/ProviderDefinition.ts +11 -0
- package/core/di/provider/types/ProviderDependencyList.ts +11 -0
- package/core/di/provider/types/ProviderLifetime.ts +1 -0
- package/core/di/provider/types/ProviderOwnership.ts +7 -0
- package/core/di/provider/types/ResolvedDeps.ts +18 -0
- package/core/di/provider/types/ValueProvider.ts +6 -0
- package/core/di/provider/types/index.ts +13 -0
- package/core/di/token.ts +84 -0
- package/core/di/types/BuildServiceProviderOptions.ts +4 -0
- package/core/di/types/ServiceKey.ts +1 -0
- package/core/di/types/ServiceResolver.ts +16 -0
- package/core/di/types/index.ts +3 -0
- package/core/generatedFingerprint.ts +60 -0
- package/core/generatedRuntime.ts +187 -0
- package/core/grpc/Grpc.module.ts +23 -0
- package/core/grpc/GrpcBinding.contract.ts +35 -0
- package/core/grpc/GrpcCall.ts +73 -0
- package/core/grpc/GrpcClient.ts +172 -0
- package/core/grpc/GrpcClientCall.ts +267 -0
- package/core/grpc/GrpcError.ts +19 -0
- package/core/grpc/GrpcRequest.binding.ts +45 -0
- package/core/grpc/GrpcServer.ts +204 -0
- package/core/grpc/GrpcStatus.ts +8 -0
- package/core/grpc/GrpcTransport.ts +174 -0
- package/core/grpc/Metadata.ts +73 -0
- package/core/grpc/ProtoCodec.ts +225 -0
- package/core/grpc/ProtoParser.ts +192 -0
- package/core/grpc/ProtoReader.ts +34 -0
- package/core/grpc/ProtoSchema.ts +52 -0
- package/core/grpc/ServerCredentials.ts +30 -0
- package/core/grpc/clientContracts.ts +39 -0
- package/core/grpc/contracts.ts +45 -0
- package/core/grpc/decorators.ts +82 -0
- package/core/grpc/grpcClientProvider.ts +9 -0
- package/core/grpc/index.ts +17 -0
- package/core/grpc/moduleControllers.ts +38 -0
- package/core/grpc/protobuf.ts +80 -0
- package/core/grpc/serviceDefinition.ts +20 -0
- package/core/http/Authorization/Authorize.ts +52 -0
- package/core/http/Authorization/authorizeComposer.ts +31 -0
- package/core/http/Authorization/metadata.ts +158 -0
- package/core/http/Binding/ParameterBinder.ts +109 -0
- package/core/http/Binding/RequestModel.ts +27 -0
- package/core/http/Binding/autoBindings.ts +125 -0
- package/core/http/Binding/bindings.ts +19 -0
- package/core/http/Binding/convert.ts +48 -0
- package/core/http/Binding/generatedSpec.ts +18 -0
- package/core/http/Binding/listModelRegistry.ts +47 -0
- package/core/http/Binding/modelBinder.ts +345 -0
- package/core/http/Binding/modelValidator.ts +30 -0
- package/core/http/Binding/requestModelRegistry.ts +117 -0
- package/core/http/Decorators/attributes.ts +92 -0
- package/core/http/Decorators/controller.ts +24 -0
- package/core/http/Decorators/metadata.ts +107 -0
- package/core/http/Decorators/routes.ts +131 -0
- package/core/http/Errors/HttpError.ts +92 -0
- package/core/http/HttpContext/HttpContext.ts +148 -0
- package/core/http/HttpContext/ResponseBuilder.ts +37 -0
- package/core/http/HttpContext/inspectableRedirects.ts +47 -0
- package/core/http/HttpContext/principal.ts +24 -0
- package/core/http/HttpContext/responseLifetime.ts +45 -0
- package/core/http/HttpServer.ts +627 -0
- package/core/http/Middleware/accessLog.ts +90 -0
- package/core/http/Middleware/cors.ts +160 -0
- package/core/http/Middleware/errorHandler.ts +100 -0
- package/core/http/Middleware/pipeline.ts +21 -0
- package/core/http/Middleware/rateLimit.ts +104 -0
- package/core/http/Middleware/securityHeaders.ts +118 -0
- package/core/http/Middleware/types.ts +19 -0
- package/core/http/OpenApi/generatedOpenApiRegistry.ts +102 -0
- package/core/http/OpenApi/openApiDocs.ts +75 -0
- package/core/http/OpenApi/openApiDocument.ts +356 -0
- package/core/http/README.md +139 -0
- package/core/http/Results/HttpResult.ts +19 -0
- package/core/http/Results/normalize.ts +93 -0
- package/core/http/Results/results.ts +70 -0
- package/core/http/Routing/Router.ts +201 -0
- package/core/http/Routing/RouterBuilder.ts +184 -0
- package/core/http/Routing/template.ts +112 -0
- package/core/http/SPEC.md +981 -0
- package/core/http/Versioning/VersionReader.ts +20 -0
- package/core/http/WebSocketUpgrade.ts +29 -0
- package/core/http/composeRouteMiddlewareComposers.ts +21 -0
- package/core/http/correlation/createCorrelationIdMiddleware.ts +79 -0
- package/core/http/httpModule.ts +48 -0
- package/core/http/index.ts +140 -0
- package/core/http/middlewareTokens.ts +48 -0
- package/core/http/options.ts +134 -0
- package/core/http-client/index.ts +105 -0
- package/core/infra/Infra.ts +158 -0
- package/core/infra/InfraConnector.ts +86 -0
- package/core/infra/InfraLifecycle.ts +86 -0
- package/core/infra/cache/RedisDistributedCacheBackend.ts +88 -0
- package/core/infra/cache/RedisDistributedCacheDriver.ts +186 -0
- package/core/infra/cache/index.ts +7 -0
- package/core/infra/connectorConfig.ts +29 -0
- package/core/infra/connectorIdentity.ts +39 -0
- package/core/infra/connectors/codex/CodexAppServer.ts +146 -0
- package/core/infra/connectors/codex/CodexAppServerClient.ts +258 -0
- package/core/infra/connectors/codex/CodexPolicy.ts +114 -0
- package/core/infra/connectors/codex/CodexTurn.ts +133 -0
- package/core/infra/connectors/codex/contracts.ts +82 -0
- package/core/infra/connectors/codex.ts +26 -0
- package/core/infra/connectors/llm.ts +78 -0
- package/core/infra/connectors/llmRouter.ts +443 -0
- package/core/infra/connectors/openaiCompatible.ts +590 -0
- package/core/infra/connectors/openaiTextStream.ts +134 -0
- package/core/infra/connectors/opensearch.ts +307 -0
- package/core/infra/connectors/postgres.ts +105 -0
- package/core/infra/connectors/redis.ts +132 -0
- package/core/infra/index.ts +58 -0
- package/core/kernel/ApplicationLifetime.ts +91 -0
- package/core/kernel/Bazis.ts +73 -0
- package/core/kernel/Environment.ts +53 -0
- package/core/kernel/Kernel.ts +391 -0
- package/core/kernel/KernelBuilder.ts +172 -0
- package/core/kernel/LifecycleCoordinator.ts +204 -0
- package/core/kernel/README.md +66 -0
- package/core/kernel/SupervisedHostedService.ts +147 -0
- package/core/kernel/config/ConfigRegistry.ts +48 -0
- package/core/kernel/config/Configuration.ts +110 -0
- package/core/kernel/config/README.md +62 -0
- package/core/kernel/config/Secret.ts +29 -0
- package/core/kernel/config/addConfigOptions.ts +63 -0
- package/core/kernel/config/defineConfig.ts +211 -0
- package/core/kernel/config/sources.ts +123 -0
- package/core/kernel/correlation/requestContext.ts +57 -0
- package/core/kernel/errors/ConfigKeyMissingError.ts +7 -0
- package/core/kernel/errors/KernelError.ts +7 -0
- package/core/kernel/errors/ShutdownTimeoutError.ts +7 -0
- package/core/kernel/errors/StartupAbortedError.ts +7 -0
- package/core/kernel/errors/StartupTimeoutError.ts +7 -0
- package/core/kernel/errors/index.ts +5 -0
- package/core/kernel/events/EventBus.ts +140 -0
- package/core/kernel/events/EventToken.ts +17 -0
- package/core/kernel/events/eventSubscribers.ts +126 -0
- package/core/kernel/events/kernelEvents.ts +16 -0
- package/core/kernel/events/onEvent.ts +32 -0
- package/core/kernel/health/HealthCheckContracts.ts +42 -0
- package/core/kernel/health/HealthService.ts +93 -0
- package/core/kernel/index.ts +96 -0
- package/core/kernel/internal/awaitAbortable.ts +18 -0
- package/core/kernel/internal/awaitShutdown.ts +21 -0
- package/core/kernel/internal/reportDiagnosticFailure.ts +8 -0
- package/core/kernel/internal/validateTimeout.ts +8 -0
- package/core/kernel/lifecycleHooks.ts +18 -0
- package/core/kernel/logging/ConsoleLogger.ts +68 -0
- package/core/kernel/logging/Logger.ts +22 -0
- package/core/kernel/types/ConfigSource.ts +9 -0
- package/core/kernel/types/EnvironmentName.ts +1 -0
- package/core/kernel/types/KernelOptions.ts +23 -0
- package/core/kernel/types/LifecycleHook.ts +18 -0
- package/core/kernel/types/index.ts +4 -0
- package/core/orm/DATABASE_PROVIDER.ts +5 -0
- package/core/orm/OrmHostedPlan.validator.ts +55 -0
- package/core/orm/OrmLifecycle.ts +146 -0
- package/core/orm/OrmOwnedStoreLifecycle.ts +96 -0
- package/core/orm/buildOrmProviders.ts +152 -0
- package/core/orm/databaseConnector.ts +108 -0
- package/core/orm/encapsulationHook.ts +19 -0
- package/core/orm/index.ts +95 -0
- package/core/orm/listQuery.ts +198 -0
- package/core/orm/ormModule.ts +173 -0
- package/core/orm/ownedStoreContributions.ts +195 -0
- package/core/orm/registerRepositories.ts +27 -0
- package/core/orm/repository.ts +45 -0
- package/core/orm/strictSchemaHostedIdentity.ts +17 -0
- package/core/scripts/agent-codegen.ts +1166 -0
- package/core/scripts/di-generate-target.ts +90 -0
- package/core/scripts/di-generate.ts +1837 -0
- package/core/scripts/orm-predicate-codegen.ts +33 -0
- package/core/scripts/request-model-codegen.ts +326 -0
- package/core/websocket/DESIGN.md +297 -0
- package/core/websocket/WsRateLimiter.ts +101 -0
- package/core/websocket/adapter/adapter.interface.ts +45 -0
- package/core/websocket/adapter/in-memory.adapter.ts +190 -0
- package/core/websocket/adapter/redis-delivery-scripts.ts +135 -0
- package/core/websocket/adapter/redis-delivery-store.ts +86 -0
- package/core/websocket/adapter/redis-operations.ts +33 -0
- package/core/websocket/adapter/redis.adapter.ts +218 -0
- package/core/websocket/codec/binary.codec.ts +87 -0
- package/core/websocket/codec/json.codec.ts +34 -0
- package/core/websocket/codec/packet-codec.interface.ts +17 -0
- package/core/websocket/decorators.ts +165 -0
- package/core/websocket/explorer.ts +126 -0
- package/core/websocket/index.ts +78 -0
- package/core/websocket/middleware.ts +146 -0
- package/core/websocket/packet-codec.ts +75 -0
- package/core/websocket/reliable-delivery.ts +56 -0
- package/core/websocket/session-creation.ts +16 -0
- package/core/websocket/session-manager.ts +856 -0
- package/core/websocket/socket-wrapper.ts +314 -0
- package/core/websocket/topic-cache.ts +59 -0
- package/core/websocket/types.ts +122 -0
- package/core/websocket/websocketModule.ts +96 -0
- package/core/websocket/ws-dispatch.ts +123 -0
- package/core/websocket/ws-server.ts +1707 -0
- package/index.ts +281 -0
- package/library/boundary/diagnostics-v1.ts +136 -0
- package/library/boundary/index.ts +73 -0
- package/library/boundary/json/decodeBoundedJsonV1.ts +518 -0
- package/library/boundary/json/limits-v1.ts +46 -0
- package/library/boundary/json/normalizeBoundedJsonV1.ts +256 -0
- package/library/boundary/json/types-v1.ts +11 -0
- package/library/boundary/schema/boundarySchemaHashV1.ts +6 -0
- package/library/boundary/schema/collectBoundaryValueDiagnosticsV1.ts +325 -0
- package/library/boundary/schema/decodeBoundarySchemaV1.ts +646 -0
- package/library/boundary/schema/index.ts +8 -0
- package/library/boundary/schema/types-v1.ts +99 -0
- package/library/boundary/schema/validateBoundaryValueV1.ts +58 -0
- package/library/boundary/serialization/canonicalJsonV1.ts +66 -0
- package/library/http-client/HttpClient.ts +969 -0
- package/library/http-client/HttpClientFactory.ts +45 -0
- package/library/http-client/errors.ts +68 -0
- package/library/http-client/index.ts +43 -0
- package/library/http-client/interceptors.ts +40 -0
- package/library/http-client/progress.ts +62 -0
- package/library/http-client/redirectProtocol.ts +6 -0
- package/library/http-client/serialize.ts +133 -0
- package/library/http-client/types.ts +174 -0
- package/library/jsonapi/ListQueryError.ts +25 -0
- package/library/jsonapi/ListRequest.ts +37 -0
- package/library/jsonapi/decorators.ts +161 -0
- package/library/jsonapi/document.ts +124 -0
- package/library/jsonapi/index.ts +40 -0
- package/library/jsonapi/parseListQuery.ts +291 -0
- package/library/jsonapi/types.ts +125 -0
- package/library/jwt/JwtEncoder.ts +40 -0
- package/library/jwt/JwtKeyRing.ts +164 -0
- package/library/jwt/JwtValidator.ts +210 -0
- package/library/jwt/TokenIssuer.ts +149 -0
- package/library/jwt/TokenService.ts +51 -0
- package/library/jwt/base64url.ts +61 -0
- package/library/jwt/claims.ts +36 -0
- package/library/jwt/errors.ts +44 -0
- package/library/jwt/index.ts +59 -0
- package/library/jwt/limits.ts +8 -0
- package/library/jwt/signing/Hs256Algorithm.ts +62 -0
- package/library/jwt/signing/Rs256Algorithm.ts +133 -0
- package/library/jwt/signing/SigningAlgorithm.ts +18 -0
- package/library/jwt/signing/pem.ts +30 -0
- package/library/openapi/codegen.ts +875 -0
- package/library/openapi/document.ts +326 -0
- package/library/openapi/index.ts +13 -0
- package/library/openapi/types.ts +69 -0
- package/library/openapi/ui.ts +182 -0
- package/library/orm/DatabaseFacade.ts +209 -0
- package/library/orm/DbContext.ts +107 -0
- package/library/orm/DbContextFactory.ts +25 -0
- package/library/orm/DbContextOptions.ts +33 -0
- package/library/orm/Metadata/DynamicModelBuilder.ts +497 -0
- package/library/orm/Metadata/KeyTuple.ts +36 -0
- package/library/orm/Metadata/ModelBuilder.ts +299 -0
- package/library/orm/Metadata/OrmModel.ts +80 -0
- package/library/orm/Metadata/ValueConverter.ts +57 -0
- package/library/orm/Metadata/conventions.ts +54 -0
- package/library/orm/Metadata/decorators.ts +396 -0
- package/library/orm/Metadata/types.ts +140 -0
- package/library/orm/Providers/OwnedStoreCatalog.reader.ts +1802 -0
- package/library/orm/Providers/PostgresDialect.ts +234 -0
- package/library/orm/Providers/PostgresProvider.ts +1494 -0
- package/library/orm/Providers/PostgresSchema.decoder.ts +107 -0
- package/library/orm/Providers/limits.ts +29 -0
- package/library/orm/Providers/operationDeadline.ts +43 -0
- package/library/orm/Providers/ormOwnedStoreRuntime.ts +19 -0
- package/library/orm/Providers/ormTransactionRuntime.ts +117 -0
- package/library/orm/Providers/propertyConversion.ts +14 -0
- package/library/orm/Providers/resolvedForeignKey.ts +16 -0
- package/library/orm/Providers/transactionCallbacks.ts +45 -0
- package/library/orm/Providers/transactionOutcome.ts +82 -0
- package/library/orm/Providers/transactionScopes.ts +78 -0
- package/library/orm/Providers/types.ts +207 -0
- package/library/orm/Query/DbSet.ts +78 -0
- package/library/orm/Query/EntityQuery.ts +247 -0
- package/library/orm/Query/ImmediateMutations.ts +226 -0
- package/library/orm/Query/IncludeLoader.ts +200 -0
- package/library/orm/Query/QueryPlan.ts +55 -0
- package/library/orm/Query/SqlTranslator.ts +195 -0
- package/library/orm/Query/conditions.ts +127 -0
- package/library/orm/Query/materialize.ts +39 -0
- package/library/orm/README.md +256 -0
- package/library/orm/Repository/README.md +684 -0
- package/library/orm/Repository/Repository.ts +68 -0
- package/library/orm/Saving/CommandBuilder.ts +139 -0
- package/library/orm/Saving/ExecutionStrategy.ts +128 -0
- package/library/orm/Saving/SaveExecutor.ts +413 -0
- package/library/orm/Saving/applyConventions.ts +64 -0
- package/library/orm/Schema/CheckExpression.ts +327 -0
- package/library/orm/Schema/ExactSchemaVerifier.ts +168 -0
- package/library/orm/Schema/ExpectedSchema.ts +43 -0
- package/library/orm/Schema/MigrationRunner.ts +146 -0
- package/library/orm/Schema/Migrator.ts +73 -0
- package/library/orm/Schema/OrmOwnedStore.ts +123 -0
- package/library/orm/Schema/OwnedStoreAdmission.ts +752 -0
- package/library/orm/Schema/OwnedStoreCanonical.ts +273 -0
- package/library/orm/Schema/OwnedStoreCatalog.ts +1325 -0
- package/library/orm/Schema/SafeAdditiveSchema.ts +100 -0
- package/library/orm/Schema/SchemaAdmission.ts +62 -0
- package/library/orm/Schema/SchemaDiffer.ts +78 -0
- package/library/orm/Schema/formatSchemaDifferences.ts +62 -0
- package/library/orm/Schema/introspection.ts +52 -0
- package/library/orm/Schema/physicalColumnTypes.ts +37 -0
- package/library/orm/Schema/tableKey.ts +26 -0
- package/library/orm/Tracking/ChangeTracker.ts +448 -0
- package/library/orm/Tracking/EntityState.ts +13 -0
- package/library/orm/Transactions/OrmTransaction.ts +30 -0
- package/library/orm/Transactions/TransactionScopeCoordinator.ts +377 -0
- package/library/orm/errors.ts +190 -0
- package/library/orm/index.ts +162 -0
- package/library/orm/runtime.ts +14 -0
- package/library/redaction/index.ts +166 -0
- package/library/ui/UiProfile.ts +77 -0
- package/library/ui/compiled-v1.ts +131 -0
- package/library/ui/compiler/compileUiSurfaceV1.ts +717 -0
- package/library/ui/compiler/contracts-v1.ts +25 -0
- package/library/ui/compiler/index.ts +12 -0
- package/library/ui/compiler/openApiIndex.ts +246 -0
- package/library/ui/defineUiProfile.ts +340 -0
- package/library/ui/diagnostics-v1.ts +33 -0
- package/library/ui/index.ts +129 -0
- package/library/ui/profile-v1.ts +191 -0
- package/library/ui/serialization.ts +130 -0
- package/library/ui/uiProfileAuthoring.ts +289 -0
- package/library/ui/uiProfileAuthoringMetadata.ts +78 -0
- package/library/validation/MessageRegistry.ts +144 -0
- package/library/validation/README.md +62 -0
- package/library/validation/RuleCompiler.ts +183 -0
- package/library/validation/RuleEngine.ts +401 -0
- package/library/validation/SPEC.md +579 -0
- package/library/validation/ValidationError.ts +37 -0
- package/library/validation/ValidationResult.ts +63 -0
- package/library/validation/Validator.ts +101 -0
- package/library/validation/index.ts +16 -0
- package/library/validation/metadata.ts +69 -0
- package/library/validation/modelValidatorAdapter.ts +119 -0
- package/library/validation/types/ValidationCode.ts +69 -0
- package/library/validation/types/ValidatorOptions.ts +153 -0
- package/package.json +80 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import type { ServiceScope } from "../../di";
|
|
2
|
+
import { BadRequestError, PayloadTooLargeError } from "../Errors/HttpError";
|
|
3
|
+
import { ResponseBuilder } from "./ResponseBuilder";
|
|
4
|
+
import type { ModelValidator } from "../Binding/modelValidator";
|
|
5
|
+
|
|
6
|
+
/** Route parameter values after constraint conversion (`:id(int)` -> number). */
|
|
7
|
+
export type RouteParams = Readonly<Record<string, string | number | boolean>>;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Per-request context flowing through the middleware pipeline and into
|
|
11
|
+
* actions. Wraps the native Bun `Request`, the matched route parameters and
|
|
12
|
+
* the request-scoped DI resolver.
|
|
13
|
+
*/
|
|
14
|
+
export class HttpContext {
|
|
15
|
+
/** Response produced by the pipeline (set by the terminal handler or middleware). */
|
|
16
|
+
response?: Response;
|
|
17
|
+
|
|
18
|
+
/** Response shaping for actions that return plain values (see ResponseBuilder). */
|
|
19
|
+
readonly res = new ResponseBuilder();
|
|
20
|
+
|
|
21
|
+
/** Free-form state for passing data between middleware (e.g. auth user). */
|
|
22
|
+
readonly state = new Map<string, unknown>();
|
|
23
|
+
|
|
24
|
+
private bodyPromise?: Promise<unknown>;
|
|
25
|
+
private bodyBytesPromise?: Promise<Uint8Array>;
|
|
26
|
+
|
|
27
|
+
constructor(
|
|
28
|
+
/** Native Bun request. */
|
|
29
|
+
readonly request: Request,
|
|
30
|
+
/** Parsed request URL (query via `url.searchParams`). */
|
|
31
|
+
readonly url: URL,
|
|
32
|
+
/** Route parameters, converted per template constraints. */
|
|
33
|
+
readonly params: RouteParams,
|
|
34
|
+
/**
|
|
35
|
+
* Request-scoped DI resolver: controllers and scoped services of this
|
|
36
|
+
* request are resolved from here. JS producers retain the scope until EOF,
|
|
37
|
+
* failure, cancellation or peer disconnect. Native file/materialized bodies
|
|
38
|
+
* release it after Bun takes ownership. The original Response is preserved.
|
|
39
|
+
*/
|
|
40
|
+
readonly services: ServiceScope,
|
|
41
|
+
/** API version resolved for this request (if versioning is enabled). */
|
|
42
|
+
readonly apiVersion?: string,
|
|
43
|
+
/** Optional maximum request body size enforced while reading body streams. */
|
|
44
|
+
private readonly maxBodyBytes?: number,
|
|
45
|
+
/** Remote peer address reported by Bun (not a forwarded header). */
|
|
46
|
+
readonly clientIp?: string,
|
|
47
|
+
/** Validator captured by the owning HTTP server. */
|
|
48
|
+
readonly modelValidator?: ModelValidator,
|
|
49
|
+
) {}
|
|
50
|
+
|
|
51
|
+
get method(): string {
|
|
52
|
+
return this.request.method;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
get path(): string {
|
|
56
|
+
return this.url.pathname;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** Query parameter shortcut. */
|
|
60
|
+
query(name: string): string | undefined {
|
|
61
|
+
return this.url.searchParams.get(name) ?? undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Header shortcut (case-insensitive). */
|
|
65
|
+
header(name: string): string | undefined {
|
|
66
|
+
return this.request.headers.get(name) ?? undefined;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Request body parsed as JSON. Parsed once and cached — multiple bindings
|
|
71
|
+
* and middleware share the same promise. Malformed JSON becomes a 400.
|
|
72
|
+
*/
|
|
73
|
+
json<T = unknown>(): Promise<T> {
|
|
74
|
+
this.bodyPromise ??= this.readBodyText().then((text) => {
|
|
75
|
+
try {
|
|
76
|
+
return JSON.parse(text) as T;
|
|
77
|
+
} catch {
|
|
78
|
+
throw new BadRequestError("Malformed JSON in request body");
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return this.bodyPromise as Promise<T>;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** Request body as text. Shares the same bounded body read as JSON/formData. */
|
|
85
|
+
text(): Promise<string> {
|
|
86
|
+
return this.readBodyText();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Request body as multipart/urlencoded form data (native parser). */
|
|
90
|
+
formData(): ReturnType<Request["formData"]> {
|
|
91
|
+
return this.readBodyBytes()
|
|
92
|
+
.then((bytes) => new Response(bytes as unknown as ConstructorParameters<typeof Response>[0], { headers: this.request.headers }).formData())
|
|
93
|
+
.catch((error) => {
|
|
94
|
+
if (error instanceof PayloadTooLargeError) {
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
throw new BadRequestError("Malformed form data in request body");
|
|
98
|
+
}) as ReturnType<Request["formData"]>;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
private readBodyText(): Promise<string> {
|
|
102
|
+
return this.readBodyBytes().then((bytes) => new TextDecoder().decode(bytes));
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
private readBodyBytes(): Promise<Uint8Array> {
|
|
106
|
+
this.bodyBytesPromise ??= readRequestBodyBytes(this.request, this.maxBodyBytes);
|
|
107
|
+
return this.bodyBytesPromise;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
async function readRequestBodyBytes(request: Request, maxBytes: number | undefined): Promise<Uint8Array> {
|
|
112
|
+
if (request.body === null) {
|
|
113
|
+
return new Uint8Array();
|
|
114
|
+
}
|
|
115
|
+
if (maxBytes === undefined) {
|
|
116
|
+
return new Uint8Array(await request.arrayBuffer());
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const reader = request.body.getReader();
|
|
120
|
+
const chunks: Uint8Array[] = [];
|
|
121
|
+
let total = 0;
|
|
122
|
+
try {
|
|
123
|
+
while (true) {
|
|
124
|
+
const item = await reader.read();
|
|
125
|
+
if (item.done) {
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
const chunk = item.value;
|
|
129
|
+
total += chunk.byteLength;
|
|
130
|
+
if (total > maxBytes) {
|
|
131
|
+
void reader.cancel("request body exceeds maxBodyBytes").catch(() => undefined);
|
|
132
|
+
throw new PayloadTooLargeError(maxBytes);
|
|
133
|
+
}
|
|
134
|
+
chunks.push(chunk);
|
|
135
|
+
}
|
|
136
|
+
} finally {
|
|
137
|
+
reader.releaseLock();
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const body = new Uint8Array(total);
|
|
141
|
+
let offset = 0;
|
|
142
|
+
for (let index = 0; index < chunks.length; index += 1) {
|
|
143
|
+
const chunk = chunks[index] as Uint8Array;
|
|
144
|
+
body.set(chunk, offset);
|
|
145
|
+
offset += chunk.byteLength;
|
|
146
|
+
}
|
|
147
|
+
return body;
|
|
148
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mutable response state an action (or middleware) can shape before the
|
|
3
|
+
* result is materialized into a `Response`. Available as `ctx.res` and via
|
|
4
|
+
* a typed ResponseBuilder action parameter.
|
|
5
|
+
*
|
|
6
|
+
* Explicitly returned `Response` instances and result helpers (`Ok(...)`)
|
|
7
|
+
* win over the builder's status; builder headers are merged in either way.
|
|
8
|
+
*/
|
|
9
|
+
export class ResponseBuilder {
|
|
10
|
+
private statusCode?: number;
|
|
11
|
+
private readonly headerList: [string, string][] = [];
|
|
12
|
+
|
|
13
|
+
/** Overrides the response status (weaker than `@HttpCode` and result helpers). */
|
|
14
|
+
status(code: number): this {
|
|
15
|
+
this.statusCode = code;
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Adds a response header (appended to whatever the result produces). */
|
|
20
|
+
header(name: string, value: string): this {
|
|
21
|
+
this.headerList.push([name, value]);
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Shortcut for the Content-Type header. */
|
|
26
|
+
contentType(value: string): this {
|
|
27
|
+
return this.header("content-type", value);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
get statusOverride(): number | undefined {
|
|
31
|
+
return this.statusCode;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
get headers(): readonly [string, string][] {
|
|
35
|
+
return this.headerList;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { InspectableRedirectProtocol as protocol } from "../../../library/http-client";
|
|
2
|
+
|
|
3
|
+
const REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);
|
|
4
|
+
|
|
5
|
+
/** Called after the normal middleware chain, before transferring the scope. */
|
|
6
|
+
export function inspectableRedirectResponse(response: Response, request: Request): Response {
|
|
7
|
+
const negotiated = request.headers.get(protocol.header) === protocol.version;
|
|
8
|
+
const redirect = negotiated && REDIRECT_STATUSES.has(response.status) && response.headers.has("location");
|
|
9
|
+
const headers = new Headers(response.headers);
|
|
10
|
+
appendHeaderToken(headers, "vary", protocol.header);
|
|
11
|
+
// These names belong to this transport; application headers cannot forge
|
|
12
|
+
// a redirect status on an ordinary response.
|
|
13
|
+
headers.delete(protocol.header);
|
|
14
|
+
headers.delete(protocol.statusHeader);
|
|
15
|
+
if (negotiated) {
|
|
16
|
+
headers.set(protocol.header, protocol.version);
|
|
17
|
+
headers.set("cache-control", "no-store");
|
|
18
|
+
for (const name of [protocol.header, protocol.statusHeader, "location"]) {
|
|
19
|
+
appendHeaderToken(headers, "access-control-expose-headers", name);
|
|
20
|
+
}
|
|
21
|
+
if (redirect) headers.set(protocol.statusHeader, String(response.status));
|
|
22
|
+
}
|
|
23
|
+
if (!redirect) {
|
|
24
|
+
try {
|
|
25
|
+
// Preserve the actual Response/Bun.file body path, including Range.
|
|
26
|
+
for (const name of ["vary", protocol.header, protocol.statusHeader, "cache-control", "access-control-expose-headers"]) {
|
|
27
|
+
const value = headers.get(name);
|
|
28
|
+
if (value === null) response.headers.delete(name);
|
|
29
|
+
else response.headers.set(name, value);
|
|
30
|
+
}
|
|
31
|
+
return response;
|
|
32
|
+
} catch {
|
|
33
|
+
// Fetch responses may have immutable headers. Keep their original stream.
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return new Response(response.body, {
|
|
37
|
+
status: redirect ? 200 : response.status,
|
|
38
|
+
statusText: redirect ? "OK" : response.statusText,
|
|
39
|
+
headers,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function appendHeaderToken(headers: Headers, name: string, token: string): void {
|
|
44
|
+
const current = headers.get(name)?.split(",").map(value => value.trim().toLowerCase()) ?? [];
|
|
45
|
+
if (current.includes(token.toLowerCase()) || (name === "vary" && current.includes("*"))) return;
|
|
46
|
+
headers.append(name, token);
|
|
47
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract of the "current request subject" in `ctx.state`.
|
|
3
|
+
*
|
|
4
|
+
* This is the only meeting point between the authentication layer (an application
|
|
5
|
+
* `@Authorize` check puts the principal into `ctx.state`) and the kernel parts
|
|
6
|
+
* that need per-user personalization (for example the output cache with
|
|
7
|
+
* `varyByUser`/`varyByClaim`). The key and the shape are declared here, in the
|
|
8
|
+
* kernel, so application code depends on the kernel and not the other way round.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/** The `ctx.state` key under which {@link RequestPrincipal} is stored. */
|
|
12
|
+
export const PRINCIPAL_STATE_KEY = "auth:principal";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The minimal principal shape the kernel relies on. The concrete implementation
|
|
16
|
+
* (token kind, claim set and so on) belongs to the application layer; these
|
|
17
|
+
* optional fields are enough for the kernel.
|
|
18
|
+
*/
|
|
19
|
+
export interface RequestPrincipal {
|
|
20
|
+
/** Subject identifier (`sub`); used by the output cache for `varyByUser`. */
|
|
21
|
+
readonly subject?: string;
|
|
22
|
+
/** Optional claim lookup by type; used for `varyByClaim`. */
|
|
23
|
+
findFirst?(claimType: string): string | undefined;
|
|
24
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { finished } from "node:stream";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Observe the original body without locking, reading, cloning or replacing it.
|
|
5
|
+
* Bun can consequently retain its native file/range/sendfile handling.
|
|
6
|
+
* The returned promise settles after request-scope cleanup, for host shutdown.
|
|
7
|
+
*/
|
|
8
|
+
export function holdResponseScope(
|
|
9
|
+
response: Response,
|
|
10
|
+
signal: AbortSignal,
|
|
11
|
+
dispose: () => Promise<void>,
|
|
12
|
+
): Promise<void> {
|
|
13
|
+
const body = response.body;
|
|
14
|
+
if (!body) return Promise.resolve().then(dispose);
|
|
15
|
+
if (response.bodyUsed || body.locked) throw new TypeError("Response body is already in use");
|
|
16
|
+
|
|
17
|
+
let complete!: () => void;
|
|
18
|
+
let reject!: (reason: unknown) => void;
|
|
19
|
+
const completion = new Promise<void>((resolve, fail) => { complete = resolve; reject = fail; });
|
|
20
|
+
let ended = false;
|
|
21
|
+
let cleanup = (): void => {};
|
|
22
|
+
let handoffCheck: ReturnType<typeof setImmediate> | undefined;
|
|
23
|
+
|
|
24
|
+
const finish = (): void => {
|
|
25
|
+
if (ended) return;
|
|
26
|
+
ended = true;
|
|
27
|
+
cleanup();
|
|
28
|
+
if (handoffCheck !== undefined) clearImmediate(handoffCheck);
|
|
29
|
+
// Before Bun takes ownership (including an already-aborted request), an
|
|
30
|
+
// unlocked producer still needs cancellation. Once locked, Bun owns it.
|
|
31
|
+
if (signal.aborted && !body.locked) void body.cancel(signal.reason).catch(() => undefined);
|
|
32
|
+
void Promise.resolve().then(dispose).then(complete, reject);
|
|
33
|
+
};
|
|
34
|
+
cleanup = finished(body, { signal }, finish);
|
|
35
|
+
|
|
36
|
+
// Qualified Bun 1.4 consumes native Blob/file bodies directly: bodyUsed is
|
|
37
|
+
// true, but no JS reader is acquired and its stream never emits finished.
|
|
38
|
+
// After the response handoff, release that scope as for a materialized
|
|
39
|
+
// result. A live JS producer remains locked and is observed until finished.
|
|
40
|
+
// This is a single handoff check, not a timer-based stream lifetime limit.
|
|
41
|
+
handoffCheck = setImmediate(() => {
|
|
42
|
+
if (response.bodyUsed && !body.locked) finish();
|
|
43
|
+
});
|
|
44
|
+
return completion;
|
|
45
|
+
}
|