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,78 @@
|
|
|
1
|
+
export {
|
|
2
|
+
WebSocketGateway,
|
|
3
|
+
SubscribeMessage,
|
|
4
|
+
getWebSocketGatewayMetadata,
|
|
5
|
+
getGatewayMessageHandlers,
|
|
6
|
+
normalizeNamespace,
|
|
7
|
+
resolveWebSocketGatewayOptions,
|
|
8
|
+
type WebSocketGatewayOptions,
|
|
9
|
+
type SubscribeMessageOptions,
|
|
10
|
+
type ResolvedGatewayOptions,
|
|
11
|
+
type MessageHandlerDecl,
|
|
12
|
+
type WsRateLimit,
|
|
13
|
+
type WsBodyValidator,
|
|
14
|
+
} from "./decorators";
|
|
15
|
+
export type {
|
|
16
|
+
ClientPacket,
|
|
17
|
+
ServerPacket,
|
|
18
|
+
ReconnectPacketData,
|
|
19
|
+
ReplayDelivery,
|
|
20
|
+
ReplayAcknowledgement,
|
|
21
|
+
SocketUser,
|
|
22
|
+
SocketContext,
|
|
23
|
+
AckCallback,
|
|
24
|
+
SocketBroadcast,
|
|
25
|
+
BazisSocket,
|
|
26
|
+
OnGatewayInit,
|
|
27
|
+
OnGatewayConnection,
|
|
28
|
+
OnGatewayDisconnect,
|
|
29
|
+
OnGatewayShutdown,
|
|
30
|
+
} from "./types";
|
|
31
|
+
export {
|
|
32
|
+
composeWsUpgradeMiddleware,
|
|
33
|
+
createOriginCheckMiddleware,
|
|
34
|
+
createWsAuthMiddleware,
|
|
35
|
+
extractWebSocketToken,
|
|
36
|
+
WsUpgradeError,
|
|
37
|
+
type WsMiddleware,
|
|
38
|
+
type WsUpgradeContext,
|
|
39
|
+
type WsAccessTokenAuthenticator,
|
|
40
|
+
type WsAuthenticationContext,
|
|
41
|
+
} from "./middleware";
|
|
42
|
+
export { WsRateLimiter, type WsRateLimiterOptions, type WsRateLimiterStats } from "./WsRateLimiter";
|
|
43
|
+
export { WebSocketExplorer, type CompiledWsHandler, type RegisteredNamespace } from "./explorer";
|
|
44
|
+
export {
|
|
45
|
+
WebSocketServer,
|
|
46
|
+
type WebSocketMemoryLimits,
|
|
47
|
+
type WebSocketServerOptions,
|
|
48
|
+
type WebSocketServerStats,
|
|
49
|
+
type WsConnectionData,
|
|
50
|
+
} from "./ws-server";
|
|
51
|
+
export { websocketModule, type WebSocketModuleConfig } from "./websocketModule";
|
|
52
|
+
export { TopicCache, topicCache, type TopicCacheOptions, type TopicCacheStats } from "./topic-cache";
|
|
53
|
+
export {
|
|
54
|
+
encodeServerPacket,
|
|
55
|
+
decodeClientPacket,
|
|
56
|
+
createAckPacket,
|
|
57
|
+
createConnectedPacket,
|
|
58
|
+
createReconnectedPacket,
|
|
59
|
+
PacketCodecError,
|
|
60
|
+
} from "./packet-codec";
|
|
61
|
+
export { BazisSocketImpl, wrapSocket, restoreRoomSubscriptions, detachRoomSubscriptions, sendPayload } from "./socket-wrapper";
|
|
62
|
+
export {
|
|
63
|
+
SessionManager,
|
|
64
|
+
SessionCapacityError,
|
|
65
|
+
type SessionState,
|
|
66
|
+
type SessionManagerOptions,
|
|
67
|
+
type OfflineBroadcastResult,
|
|
68
|
+
} from "./session-manager";
|
|
69
|
+
export type { WebSocketAdapter, WebSocketAdapterHooks } from "./adapter/adapter.interface";
|
|
70
|
+
export { InMemoryWebSocketAdapter, inMemoryWebSocketAdapter, type InMemoryWebSocketAdapterOptions } from "./adapter/in-memory.adapter";
|
|
71
|
+
export { RedisWebSocketAdapter, type RedisWebSocketAdapterOptions } from "./adapter/redis.adapter";
|
|
72
|
+
export type { RedisReliableDeliveryOptions } from "./adapter/redis-delivery-store";
|
|
73
|
+
export { WebSocketDeliveryError } from "./reliable-delivery";
|
|
74
|
+
export type { ReliableBroadcastOptions, ReliableBroadcastReceipt, ReliableRoomPublication, ReliableSessionOwner, ReliableDeliveryBatch, ReliableRoomDelivery, WebSocketDiagnostic } from "./reliable-delivery";
|
|
75
|
+
export { createInstanceId } from "./adapter/adapter.interface";
|
|
76
|
+
export type { PacketCodec } from "./codec/packet-codec.interface";
|
|
77
|
+
export { JsonPacketCodec, jsonPacketCodec } from "./codec/json.codec";
|
|
78
|
+
export { BinaryPacketCodec, binaryPacketCodec } from "./codec/binary.codec";
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import type { SocketUser } from "./types";
|
|
2
|
+
|
|
3
|
+
const MAX_SOCKET_USER_ID_LENGTH = 256;
|
|
4
|
+
|
|
5
|
+
/** Mutable context for the upgrade pipeline; `data` flows into `ws.data.context`. */
|
|
6
|
+
export interface WsUpgradeContext {
|
|
7
|
+
readonly request: Request;
|
|
8
|
+
readonly namespace: string;
|
|
9
|
+
readonly path: string;
|
|
10
|
+
/** Aborted when the upgrade is cancelled or exceeds its deadline. */
|
|
11
|
+
readonly signal: AbortSignal;
|
|
12
|
+
data: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Upgrade middleware (Koa/ASP.NET-style); throw {@link WsUpgradeError} to reject. */
|
|
16
|
+
export type WsMiddleware = (ctx: WsUpgradeContext, next: () => Promise<void>) => void | Promise<void>;
|
|
17
|
+
|
|
18
|
+
/** Authenticates a connection at upgrade. Return `null` for anonymous. */
|
|
19
|
+
export interface WsAuthenticationContext {
|
|
20
|
+
readonly signal: AbortSignal;
|
|
21
|
+
readonly namespace: string;
|
|
22
|
+
readonly path?: string;
|
|
23
|
+
readonly request?: Request;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type WsAccessTokenAuthenticator = (
|
|
27
|
+
token: string | null,
|
|
28
|
+
/** Optional second argument preserves the existing positional token API. */
|
|
29
|
+
context?: WsAuthenticationContext,
|
|
30
|
+
) => SocketUser | null | Promise<SocketUser | null>;
|
|
31
|
+
|
|
32
|
+
export interface WebSocketTokenExtractionOptions {
|
|
33
|
+
/** Accept `?token=` during upgrade. Disabled by default because URLs leak. */
|
|
34
|
+
readonly allowQueryToken?: boolean;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Rejects an upgrade with an HTTP status (the handshake never completes). */
|
|
38
|
+
export class WsUpgradeError extends Error {
|
|
39
|
+
public constructor(
|
|
40
|
+
message: string,
|
|
41
|
+
public readonly status = 403,
|
|
42
|
+
) {
|
|
43
|
+
super(message);
|
|
44
|
+
this.name = "WsUpgradeError";
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Composes upgrade middleware into a single runnable pipeline. */
|
|
49
|
+
export function composeWsUpgradeMiddleware(
|
|
50
|
+
middlewares: readonly WsMiddleware[],
|
|
51
|
+
terminal: () => Promise<void>,
|
|
52
|
+
): (ctx: WsUpgradeContext) => Promise<void> {
|
|
53
|
+
return (ctx) => {
|
|
54
|
+
let index = -1;
|
|
55
|
+
const run = (i: number): Promise<void> => {
|
|
56
|
+
if (i <= index) {
|
|
57
|
+
return Promise.reject(new Error("next() called multiple times"));
|
|
58
|
+
}
|
|
59
|
+
index = i;
|
|
60
|
+
const middleware = middlewares[i];
|
|
61
|
+
if (!middleware) {
|
|
62
|
+
return terminal();
|
|
63
|
+
}
|
|
64
|
+
return Promise.resolve(middleware(ctx, () => run(i + 1)));
|
|
65
|
+
};
|
|
66
|
+
return run(0);
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Rejects upgrades whose `Origin` is not allow-listed (`"*"` allows all). */
|
|
71
|
+
export function createOriginCheckMiddleware(allowed: readonly string[]): WsMiddleware {
|
|
72
|
+
const allowAll = allowed.includes("*");
|
|
73
|
+
return (ctx, next) => {
|
|
74
|
+
const origin = ctx.request.headers.get("origin");
|
|
75
|
+
if (!allowAll && origin !== null && !allowed.includes(origin)) {
|
|
76
|
+
throw new WsUpgradeError("Origin not allowed", 403);
|
|
77
|
+
}
|
|
78
|
+
return next();
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Extracts a bearer token from `Authorization` or the `Sec-WebSocket-Protocol`
|
|
84
|
+
* `bearer.<token>` convention. Query-string tokens are disabled by default
|
|
85
|
+
* because URLs commonly leak into logs, proxies and browser history.
|
|
86
|
+
*/
|
|
87
|
+
export function extractWebSocketToken(
|
|
88
|
+
request: Request,
|
|
89
|
+
options: WebSocketTokenExtractionOptions = {},
|
|
90
|
+
): string | null {
|
|
91
|
+
const authorization = request.headers.get("authorization");
|
|
92
|
+
if (authorization?.startsWith("Bearer ")) {
|
|
93
|
+
return authorization.slice("Bearer ".length).trim() || null;
|
|
94
|
+
}
|
|
95
|
+
const protocol = request.headers.get("sec-websocket-protocol");
|
|
96
|
+
if (protocol) {
|
|
97
|
+
for (const part of protocol.split(",")) {
|
|
98
|
+
const trimmed = part.trim();
|
|
99
|
+
if (trimmed.startsWith("bearer.")) {
|
|
100
|
+
return trimmed.slice("bearer.".length) || null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return options.allowQueryToken === true ? new URL(request.url).searchParams.get("token") : null;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** Authenticates the upgrade; sets `ctx.data.user`. Closes with 401 when required. */
|
|
108
|
+
export function createWsAuthMiddleware(
|
|
109
|
+
authenticator: WsAccessTokenAuthenticator,
|
|
110
|
+
options?: { required?: boolean; allowQueryToken?: boolean },
|
|
111
|
+
): WsMiddleware {
|
|
112
|
+
return async (ctx, next) => {
|
|
113
|
+
const user = await authenticator(
|
|
114
|
+
extractWebSocketToken(ctx.request, { allowQueryToken: options?.allowQueryToken }),
|
|
115
|
+
{
|
|
116
|
+
signal: ctx.signal,
|
|
117
|
+
namespace: ctx.namespace,
|
|
118
|
+
path: ctx.path,
|
|
119
|
+
request: ctx.request,
|
|
120
|
+
},
|
|
121
|
+
);
|
|
122
|
+
if (user !== null && !isValidSocketUser(user)) {
|
|
123
|
+
throw new WsUpgradeError("Unauthorized", 401);
|
|
124
|
+
}
|
|
125
|
+
if (user === null) {
|
|
126
|
+
if (options?.required) {
|
|
127
|
+
throw new WsUpgradeError("Unauthorized", 401);
|
|
128
|
+
}
|
|
129
|
+
return next();
|
|
130
|
+
}
|
|
131
|
+
ctx.data.user = user;
|
|
132
|
+
return next();
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** Runtime guard for authenticator and custom upgrade-middleware principals. */
|
|
137
|
+
export function isValidSocketUser(value: unknown): value is SocketUser {
|
|
138
|
+
if (value === null || typeof value !== "object") {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
const id = (value as { id?: unknown }).id;
|
|
142
|
+
return typeof id === "string"
|
|
143
|
+
&& id.trim().length > 0
|
|
144
|
+
&& id.length <= MAX_SOCKET_USER_ID_LENGTH
|
|
145
|
+
&& !id.includes("\0");
|
|
146
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { ClientPacket, ServerPacket } from "./types";
|
|
2
|
+
|
|
3
|
+
const decoder = new TextDecoder();
|
|
4
|
+
|
|
5
|
+
export function encodeServerPacket(packet: Omit<ServerPacket, "v"> & { v?: 1 }): string {
|
|
6
|
+
return JSON.stringify({ v: 1 as const, ...packet });
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function encodeClientPacket(packet: Omit<ClientPacket, "v"> & { v?: 1 }): string {
|
|
10
|
+
return JSON.stringify({ v: 1 as const, ...packet });
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function decodeClientPacket(raw: string | Buffer): ClientPacket {
|
|
14
|
+
const text = typeof raw === "string" ? raw : decoder.decode(raw);
|
|
15
|
+
let parsed: unknown;
|
|
16
|
+
try {
|
|
17
|
+
parsed = JSON.parse(text);
|
|
18
|
+
} catch {
|
|
19
|
+
throw new PacketCodecError("Invalid JSON packet");
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
23
|
+
throw new PacketCodecError("Packet must be a JSON object");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const packet = parsed as Partial<ClientPacket>;
|
|
27
|
+
if (packet.v !== 1) {
|
|
28
|
+
throw new PacketCodecError("Unsupported packet version");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (packet.type !== "event" && packet.type !== "reconnect" && packet.type !== "ping" && packet.type !== "replay-ack") {
|
|
32
|
+
throw new PacketCodecError(`Unknown packet type: ${String(packet.type)}`);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return packet as ClientPacket;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export class PacketCodecError extends Error {
|
|
39
|
+
constructor(message: string) {
|
|
40
|
+
super(message);
|
|
41
|
+
this.name = "PacketCodecError";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function createAckPacket(id: string, data?: unknown): string {
|
|
46
|
+
return encodeServerPacket({
|
|
47
|
+
type: "ack",
|
|
48
|
+
id,
|
|
49
|
+
data,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function createConnectedPacket(sid: string, namespace: string, data?: unknown): string {
|
|
54
|
+
return encodeServerPacket({
|
|
55
|
+
type: "connected",
|
|
56
|
+
sid,
|
|
57
|
+
namespace,
|
|
58
|
+
data,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function createReconnectedPacket(
|
|
63
|
+
sid: string,
|
|
64
|
+
namespace: string,
|
|
65
|
+
missed: ServerPacket[] = [],
|
|
66
|
+
data?: unknown,
|
|
67
|
+
): string {
|
|
68
|
+
return encodeServerPacket({
|
|
69
|
+
type: "reconnected",
|
|
70
|
+
sid,
|
|
71
|
+
namespace,
|
|
72
|
+
missed,
|
|
73
|
+
data,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { ServerPacket } from "./types";
|
|
2
|
+
|
|
3
|
+
export interface ReliableBroadcastOptions {
|
|
4
|
+
/** UUID v4, reused unchanged when retrying an indeterminate publication. */
|
|
5
|
+
readonly messageId: string;
|
|
6
|
+
/** Acceptance deadline (Unix ms), reused on retry; at most 60s ahead. */
|
|
7
|
+
readonly expiresAt: number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface ReliableBroadcastReceipt {
|
|
11
|
+
readonly messageId: string;
|
|
12
|
+
readonly recipients: number;
|
|
13
|
+
readonly duplicate: boolean;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface ReliableRoomPublication extends ReliableBroadcastOptions {
|
|
17
|
+
readonly namespace: string;
|
|
18
|
+
readonly room: string;
|
|
19
|
+
readonly excludeSid: string;
|
|
20
|
+
readonly packet: ServerPacket;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface ReliableSessionOwner {
|
|
24
|
+
readonly sid: string;
|
|
25
|
+
readonly connId: string;
|
|
26
|
+
readonly ownerInstanceId: string;
|
|
27
|
+
/** Read-only cursor: skip already issued, unacknowledged frames on this connection. */
|
|
28
|
+
readonly issuedIds?: readonly string[];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface ReliableDeliveryBatch {
|
|
32
|
+
readonly sid: string;
|
|
33
|
+
readonly packets: readonly ServerPacket[];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** Optional adapter capability; queue updates do not change session revisions. */
|
|
37
|
+
export interface ReliableRoomDelivery {
|
|
38
|
+
publish(request: ReliableRoomPublication): Promise<ReliableBroadcastReceipt>;
|
|
39
|
+
readPending(owners: readonly ReliableSessionOwner[]): Promise<readonly ReliableDeliveryBatch[]>;
|
|
40
|
+
acknowledge(owner: ReliableSessionOwner, deliveryIds: readonly string[]): Promise<number>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export class WebSocketDeliveryError extends Error {
|
|
44
|
+
constructor(readonly code: string, message = `WebSocket delivery rejected: ${code}.`) {
|
|
45
|
+
super(message);
|
|
46
|
+
this.name = "WebSocketDeliveryError";
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface WebSocketDiagnostic {
|
|
51
|
+
readonly type: "queue-rejected" | "adapter-error" | "lease-lost" | "reliable-published" | "reliable-rejected" | "reliable-acked" | "poll-error";
|
|
52
|
+
readonly timestamp: number;
|
|
53
|
+
readonly count: number;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export const deliveryUuid = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// In-memory storage can compact deletion history without confusing a fresh
|
|
2
|
+
// session with an old snapshot, including many creations in the same millisecond.
|
|
3
|
+
// This token is internal metadata; distributed adapters use their own CAS/TTL.
|
|
4
|
+
const incarnation = `${crypto.randomUUID()}:`;
|
|
5
|
+
let sequence = 0;
|
|
6
|
+
|
|
7
|
+
export function issueSessionCreationToken(): string {
|
|
8
|
+
if (!Number.isSafeInteger(++sequence)) throw new Error("WebSocket creation sequence exhausted.");
|
|
9
|
+
return `${incarnation}${sequence}`;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function localSessionCreationOrder(token: string | undefined): number | undefined {
|
|
13
|
+
if (typeof token !== "string" || !token.startsWith(incarnation)) return undefined;
|
|
14
|
+
const order = Number(token.slice(incarnation.length));
|
|
15
|
+
return Number.isSafeInteger(order) && order > 0 && order <= sequence ? order : undefined;
|
|
16
|
+
}
|