@celerity-sdk/core 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/decorators/controller.ts","../src/metadata/constants.ts","../src/decorators/http.ts","../src/decorators/params.ts","../src/decorators/guards.ts","../src/decorators/layer.ts","../src/decorators/metadata.ts","../src/decorators/injectable.ts","../src/decorators/module.ts","../src/errors/http-exception.ts","../src/layers/validate.ts","../src/layers/pipeline.ts","../src/layers/system.ts","../src/layers/dispose.ts","../src/metadata/handler-metadata.ts","../src/di/container.ts","../src/di/dependency-tokens.ts","../src/di/tokens.ts","../src/application/factory.ts","../src/bootstrap/bootstrap.ts","../src/handlers/registry.ts","../src/bootstrap/module-graph.ts","../src/application/application.ts","../src/application/serverless.ts","../src/handlers/pipeline.ts","../src/functions/context.ts","../src/testing/test-app.ts","../src/functions/create-handler.ts","../src/handlers/module-resolver.ts","../src/bootstrap/discovery.ts","../src/bootstrap/runtime-mapper.ts","../src/bootstrap/runtime-entry.ts","../src/bootstrap/runtime-orchestrator.ts"],"sourcesContent":["import \"reflect-metadata\";\n\n// Decorators\nexport { Controller } from \"./decorators/controller\";\nexport { Get, Post, Put, Patch, Delete, Head, Options } from \"./decorators/http\";\nexport { Body, Query, Param, Headers, Auth, Req, Cookies, RequestId } from \"./decorators/params\";\nexport { Guard, ProtectedBy, Public } from \"./decorators/guards\";\nexport { UseLayer, UseLayers } from \"./decorators/layer\";\nexport { SetMetadata, Action } from \"./decorators/metadata\";\nexport { Injectable, Inject } from \"./decorators/injectable\";\nexport { Module } from \"./decorators/module\";\n\n// Layers\nexport { validate } from \"./layers/validate\";\nexport { runLayerPipeline } from \"./layers/pipeline\";\nexport { createDefaultSystemLayers } from \"./layers/system\";\nexport { disposeLayers } from \"./layers/dispose\";\n\n// Metadata\nexport { HandlerMetadataStore } from \"./metadata/handler-metadata\";\n\n// DI\nexport { Container, tokenToString } from \"./di/container\";\nexport { getClassDependencyTokens, getProviderDependencyTokens } from \"./di/dependency-tokens\";\nexport { APP_CONFIG, RUNTIME_APP } from \"./di/tokens\";\n\n// Application\nexport { CelerityFactory } from \"./application/factory\";\nexport { CelerityApplication } from \"./application/application\";\nexport { ServerlessApplication } from \"./application/serverless\";\n\n// Functions\nexport {\n createHttpHandler,\n httpGet,\n httpPost,\n httpPut,\n httpPatch,\n httpDelete,\n} from \"./functions/create-handler\";\n\n// Errors\nexport {\n HttpException,\n BadRequestException,\n UnauthorizedException,\n ForbiddenException,\n NotFoundException,\n MethodNotAllowedException,\n NotAcceptableException,\n ConflictException,\n GoneException,\n UnprocessableEntityException,\n TooManyRequestsException,\n InternalServerErrorException,\n NotImplementedException,\n BadGatewayException,\n ServiceUnavailableException,\n GatewayTimeoutException,\n} from \"./errors/http-exception\";\n\n// Testing\nexport { TestingApplication, mockRequest } from \"./testing/test-app\";\n\n// Handler pipeline\nexport { executeHandlerPipeline } from \"./handlers/pipeline\";\nexport { HandlerRegistry } from \"./handlers/registry\";\nexport { resolveHandlerByModuleRef } from \"./handlers/module-resolver\";\n\n// Metadata constants (used by extraction tools)\nexport {\n CONTROLLER_METADATA,\n HTTP_METHOD_METADATA,\n ROUTE_PATH_METADATA,\n GUARD_PROTECTEDBY_METADATA,\n GUARD_CUSTOM_METADATA,\n PUBLIC_METADATA,\n MODULE_METADATA,\n LAYER_METADATA,\n CUSTOM_METADATA,\n INJECT_METADATA,\n} from \"./metadata/constants\";\n\n// Bootstrap\nexport { bootstrap, discoverModule } from \"./bootstrap/index\";\nexport { buildModuleGraph, registerModuleGraph } from \"./bootstrap/index\";\nexport { bootstrapForRuntime } from \"./bootstrap/index\";\nexport { startRuntime } from \"./bootstrap/index\";\nexport {\n mapRuntimeRequest,\n mapToRuntimeResponse,\n flattenMultiValueRecord,\n} from \"./bootstrap/index\";\n\n// Adapter interfaces\nexport type { ServerlessAdapter, ServerlessHandler } from \"./adapters/interfaces\";\n\n// Re-export key types from @celerity-sdk/types\nexport type {\n Type,\n InjectionToken,\n Provider,\n HttpMethod,\n HttpRequest,\n HttpResponse,\n HandlerMetadata,\n HandlerContext,\n HandlerResponse,\n CelerityLayer,\n Schema,\n ModuleMetadata,\n FunctionHandlerDefinition,\n ServiceContainer,\n} from \"@celerity-sdk/types\";\n\n// Re-export types defined in core\nexport type { ControllerMetadata } from \"./decorators/controller\";\nexport type { ParamType, ParamMetadata } from \"./decorators/params\";\nexport type { ResolvedHandler, PipelineOptions } from \"./handlers/pipeline\";\nexport type { HttpHandlerRequest, HttpHandlerContext } from \"./functions/context\";\nexport type { HttpHandlerConfig } from \"./functions/create-handler\";\nexport type { ValidationSchemas } from \"./layers/validate\";\nexport type { CreateOptions } from \"./application/factory\";\nexport type { MockRequestOptions } from \"./testing/test-app\";\nexport type { BootstrapResult } from \"./bootstrap/index\";\nexport type { RuntimeBootstrapResult } from \"./bootstrap/index\";\nexport type { ModuleNode, ModuleGraph } from \"./bootstrap/index\";\nexport type { StartRuntimeOptions } from \"./bootstrap/runtime-orchestrator\";\n","import \"reflect-metadata\";\nimport { CONTROLLER_METADATA, INJECTABLE_METADATA } from \"../metadata/constants\";\n\nexport type ControllerMetadata = {\n prefix?: string;\n};\n\nexport function Controller(prefix?: string): ClassDecorator {\n return (target) => {\n const metadata: ControllerMetadata = {};\n if (prefix !== undefined) {\n metadata.prefix = prefix;\n }\n Reflect.defineMetadata(CONTROLLER_METADATA, metadata, target);\n Reflect.defineMetadata(INJECTABLE_METADATA, true, target);\n };\n}\n","export const CONTROLLER_METADATA = Symbol(\"celerity:controller\");\nexport const HTTP_METHOD_METADATA = Symbol(\"celerity:http-method\");\nexport const ROUTE_PATH_METADATA = Symbol(\"celerity:route-path\");\nexport const PARAM_METADATA = Symbol(\"celerity:param\");\nexport const GUARD_PROTECTEDBY_METADATA = Symbol(\"celerity:guard:protectedBy\");\nexport const GUARD_CUSTOM_METADATA = Symbol(\"celerity:guard:custom\");\nexport const LAYER_METADATA = Symbol(\"celerity:layer\");\nexport const MODULE_METADATA = Symbol(\"celerity:module\");\nexport const INJECTABLE_METADATA = Symbol(\"celerity:injectable\");\nexport const INJECT_METADATA = Symbol(\"celerity:inject\");\nexport const PUBLIC_METADATA = Symbol(\"celerity:public\");\nexport const CUSTOM_METADATA = Symbol(\"celerity:custom-metadata\");\n","import \"reflect-metadata\";\nimport type { HttpMethod } from \"@celerity-sdk/types\";\nimport { HTTP_METHOD_METADATA, ROUTE_PATH_METADATA } from \"../metadata/constants\";\n\nfunction createMethodDecorator(method: HttpMethod, path = \"/\"): MethodDecorator {\n return (target, propertyKey, descriptor) => {\n Reflect.defineMetadata(HTTP_METHOD_METADATA, method, target, propertyKey);\n Reflect.defineMetadata(ROUTE_PATH_METADATA, path, target, propertyKey);\n return descriptor;\n };\n}\n\nexport function Get(path?: string): MethodDecorator {\n return createMethodDecorator(\"GET\", path);\n}\n\nexport function Post(path?: string): MethodDecorator {\n return createMethodDecorator(\"POST\", path);\n}\n\nexport function Put(path?: string): MethodDecorator {\n return createMethodDecorator(\"PUT\", path);\n}\n\nexport function Patch(path?: string): MethodDecorator {\n return createMethodDecorator(\"PATCH\", path);\n}\n\nexport function Delete(path?: string): MethodDecorator {\n return createMethodDecorator(\"DELETE\", path);\n}\n\nexport function Head(path?: string): MethodDecorator {\n return createMethodDecorator(\"HEAD\", path);\n}\n\nexport function Options(path?: string): MethodDecorator {\n return createMethodDecorator(\"OPTIONS\", path);\n}\n","import \"reflect-metadata\";\nimport type { HttpRequest, Schema } from \"@celerity-sdk/types\";\nimport { PARAM_METADATA } from \"../metadata/constants\";\n\nexport type ParamType =\n | \"body\"\n | \"query\"\n | \"param\"\n | \"headers\"\n | \"auth\"\n | \"request\"\n | \"cookies\"\n | \"requestId\";\n\nexport type ParamMetadata = {\n index: number;\n type: ParamType;\n key?: string;\n schema?: Schema;\n};\n\nfunction createParamDecorator(\n type: ParamType,\n keyOrSchema?: string | Schema,\n schema?: Schema,\n): ParameterDecorator {\n return (target, propertyKey, parameterIndex) => {\n if (!propertyKey) return;\n\n const existing: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, target, propertyKey) ?? [];\n\n const meta: ParamMetadata = { index: parameterIndex, type };\n\n if (typeof keyOrSchema === \"string\") {\n meta.key = keyOrSchema;\n if (schema) meta.schema = schema;\n } else if (keyOrSchema && typeof keyOrSchema === \"object\") {\n meta.schema = keyOrSchema;\n }\n\n existing.push(meta);\n Reflect.defineMetadata(PARAM_METADATA, existing, target, propertyKey);\n };\n}\n\nexport function Body(schema?: Schema): ParameterDecorator {\n return createParamDecorator(\"body\", schema);\n}\n\nexport function Query(): ParameterDecorator;\nexport function Query(key: string): ParameterDecorator;\nexport function Query(schema: Schema): ParameterDecorator;\nexport function Query(key: string, schema: Schema): ParameterDecorator;\nexport function Query(keyOrSchema?: string | Schema, schema?: Schema): ParameterDecorator {\n return createParamDecorator(\"query\", keyOrSchema, schema);\n}\n\nexport function Param(): ParameterDecorator;\nexport function Param(key: string): ParameterDecorator;\nexport function Param(schema: Schema): ParameterDecorator;\nexport function Param(key: string, schema: Schema): ParameterDecorator;\nexport function Param(keyOrSchema?: string | Schema, schema?: Schema): ParameterDecorator {\n return createParamDecorator(\"param\", keyOrSchema, schema);\n}\n\nexport function Headers(): ParameterDecorator;\nexport function Headers(key: string): ParameterDecorator;\nexport function Headers(schema: Schema): ParameterDecorator;\nexport function Headers(key: string, schema: Schema): ParameterDecorator;\nexport function Headers(keyOrSchema?: string | Schema, schema?: Schema): ParameterDecorator {\n return createParamDecorator(\"headers\", keyOrSchema, schema);\n}\n\nexport function Auth(): ParameterDecorator {\n return createParamDecorator(\"auth\");\n}\n\nexport function Req(): ParameterDecorator {\n return createParamDecorator(\"request\");\n}\n\nexport function Cookies(key?: string): ParameterDecorator {\n return createParamDecorator(\"cookies\", key);\n}\n\nexport function RequestId(): ParameterDecorator {\n return createParamDecorator(\"requestId\");\n}\n\nexport function extractParam(\n type: ParamType,\n key: string | undefined,\n request: HttpRequest,\n): unknown {\n switch (type) {\n case \"body\":\n return request.textBody ? JSON.parse(request.textBody) : null;\n case \"query\":\n return key ? request.query[key] : request.query;\n case \"param\":\n return key ? request.pathParams[key] : request.pathParams;\n case \"headers\":\n return key ? request.headers[key] : request.headers;\n case \"auth\":\n return request.auth;\n case \"request\":\n return request;\n case \"cookies\":\n return key ? request.cookies[key] : request.cookies;\n case \"requestId\":\n return request.requestId;\n }\n}\n","import \"reflect-metadata\";\nimport {\n GUARD_PROTECTEDBY_METADATA,\n GUARD_CUSTOM_METADATA,\n PUBLIC_METADATA,\n} from \"../metadata/constants\";\n\n/**\n * Marks a handler class as a custom guard implementation.\n * The handler IS the guard — in serverless it becomes a Lambda Authorizer,\n * in containers the Rust runtime invokes it before protected handlers.\n *\n * Other handlers reference this guard via `@ProtectedBy(\"name\")`.\n */\nexport function Guard(name: string): ClassDecorator {\n return (target) => {\n Reflect.defineMetadata(GUARD_CUSTOM_METADATA, name, target);\n };\n}\n\n/**\n * Declares that a handler or method is protected by one or more named guards.\n * Multiple `@ProtectedBy` decorators accumulate in declaration order (top-to-bottom).\n *\n * Can be applied at class level (all methods) or method level.\n */\nexport function ProtectedBy(name: string) {\n return (\n target: object,\n propertyKey?: string | symbol,\n _descriptor?: PropertyDescriptor,\n ): void => {\n if (propertyKey) {\n const existing: string[] =\n Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, target, propertyKey) ?? [];\n // Prepend: decorators apply bottom-up, so prepending gives declaration order\n Reflect.defineMetadata(GUARD_PROTECTEDBY_METADATA, [name, ...existing], target, propertyKey);\n } else {\n const existing: string[] = Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, target) ?? [];\n Reflect.defineMetadata(GUARD_PROTECTEDBY_METADATA, [name, ...existing], target);\n }\n };\n}\n\n/**\n * Marks a method as public, opting out of the default guard.\n */\nexport function Public(): MethodDecorator {\n return (target, propertyKey, descriptor) => {\n Reflect.defineMetadata(PUBLIC_METADATA, true, target, propertyKey);\n return descriptor;\n };\n}\n","import \"reflect-metadata\";\nimport type { Type, CelerityLayer } from \"@celerity-sdk/types\";\nimport { LAYER_METADATA } from \"../metadata/constants\";\n\nexport function UseLayer(...layers: (Type<CelerityLayer> | CelerityLayer)[]) {\n return (\n target: object,\n propertyKey?: string | symbol,\n _descriptor?: PropertyDescriptor,\n ): void => {\n if (propertyKey) {\n const existing: (Type<CelerityLayer> | CelerityLayer)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, target, propertyKey) ?? [];\n Reflect.defineMetadata(LAYER_METADATA, [...layers, ...existing], target, propertyKey);\n } else {\n const existing: (Type<CelerityLayer> | CelerityLayer)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, target) ?? [];\n Reflect.defineMetadata(LAYER_METADATA, [...layers, ...existing], target);\n }\n };\n}\n\nexport function UseLayers(layers: (Type<CelerityLayer> | CelerityLayer)[]) {\n return UseLayer(...layers);\n}\n","import \"reflect-metadata\";\nimport { CUSTOM_METADATA } from \"../metadata/constants\";\n\nexport function SetMetadata(key: string, value: unknown) {\n return (\n target: object,\n propertyKey?: string | symbol,\n _descriptor?: PropertyDescriptor,\n ): void => {\n if (propertyKey) {\n const existing: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, target, propertyKey) ?? {};\n Reflect.defineMetadata(CUSTOM_METADATA, { ...existing, [key]: value }, target, propertyKey);\n } else {\n const existing: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, target) ?? {};\n Reflect.defineMetadata(CUSTOM_METADATA, { ...existing, [key]: value }, target);\n }\n };\n}\n\nexport function Action(value: unknown) {\n return SetMetadata(\"action\", value);\n}\n","import \"reflect-metadata\";\nimport type { InjectionToken } from \"@celerity-sdk/types\";\nimport { INJECTABLE_METADATA, INJECT_METADATA } from \"../metadata/constants\";\n\nexport function Injectable(): ClassDecorator {\n return (target) => {\n Reflect.defineMetadata(INJECTABLE_METADATA, true, target);\n };\n}\n\nexport function Inject(token: InjectionToken): ParameterDecorator {\n return (target, _propertyKey, parameterIndex) => {\n const existing: Map<number, InjectionToken> =\n Reflect.getOwnMetadata(INJECT_METADATA, target) ?? new Map();\n existing.set(parameterIndex, token);\n Reflect.defineMetadata(INJECT_METADATA, existing, target);\n };\n}\n","import \"reflect-metadata\";\nimport type { ModuleMetadata } from \"@celerity-sdk/types\";\nimport { MODULE_METADATA } from \"../metadata/constants\";\n\nexport function Module(metadata: ModuleMetadata): ClassDecorator {\n return (target) => {\n Reflect.defineMetadata(MODULE_METADATA, metadata, target);\n };\n}\n","export class HttpException extends Error {\n constructor(\n public readonly statusCode: number,\n message: string,\n public readonly details?: unknown,\n ) {\n super(message);\n this.name = \"HttpException\";\n }\n}\n\nexport class BadRequestException extends HttpException {\n constructor(message = \"Bad Request\", details?: unknown) {\n super(400, message, details);\n this.name = \"BadRequestException\";\n }\n}\n\nexport class UnauthorizedException extends HttpException {\n constructor(message = \"Unauthorized\", details?: unknown) {\n super(401, message, details);\n this.name = \"UnauthorizedException\";\n }\n}\n\nexport class ForbiddenException extends HttpException {\n constructor(message = \"Forbidden\", details?: unknown) {\n super(403, message, details);\n this.name = \"ForbiddenException\";\n }\n}\n\nexport class NotFoundException extends HttpException {\n constructor(message = \"Not Found\", details?: unknown) {\n super(404, message, details);\n this.name = \"NotFoundException\";\n }\n}\n\nexport class MethodNotAllowedException extends HttpException {\n constructor(message = \"Method Not Allowed\", details?: unknown) {\n super(405, message, details);\n this.name = \"MethodNotAllowedException\";\n }\n}\n\nexport class NotAcceptableException extends HttpException {\n constructor(message = \"Not Acceptable\", details?: unknown) {\n super(406, message, details);\n this.name = \"NotAcceptableException\";\n }\n}\n\nexport class ConflictException extends HttpException {\n constructor(message = \"Conflict\", details?: unknown) {\n super(409, message, details);\n this.name = \"ConflictException\";\n }\n}\n\nexport class GoneException extends HttpException {\n constructor(message = \"Gone\", details?: unknown) {\n super(410, message, details);\n this.name = \"GoneException\";\n }\n}\n\nexport class UnprocessableEntityException extends HttpException {\n constructor(message = \"Unprocessable Entity\", details?: unknown) {\n super(422, message, details);\n this.name = \"UnprocessableEntityException\";\n }\n}\n\nexport class TooManyRequestsException extends HttpException {\n constructor(message = \"Too Many Requests\", details?: unknown) {\n super(429, message, details);\n this.name = \"TooManyRequestsException\";\n }\n}\n\nexport class InternalServerErrorException extends HttpException {\n constructor(message = \"Internal Server Error\", details?: unknown) {\n super(500, message, details);\n this.name = \"InternalServerErrorException\";\n }\n}\n\nexport class NotImplementedException extends HttpException {\n constructor(message = \"Not Implemented\", details?: unknown) {\n super(501, message, details);\n this.name = \"NotImplementedException\";\n }\n}\n\nexport class BadGatewayException extends HttpException {\n constructor(message = \"Bad Gateway\", details?: unknown) {\n super(502, message, details);\n this.name = \"BadGatewayException\";\n }\n}\n\nexport class ServiceUnavailableException extends HttpException {\n constructor(message = \"Service Unavailable\", details?: unknown) {\n super(503, message, details);\n this.name = \"ServiceUnavailableException\";\n }\n}\n\nexport class GatewayTimeoutException extends HttpException {\n constructor(message = \"Gateway Timeout\", details?: unknown) {\n super(504, message, details);\n this.name = \"GatewayTimeoutException\";\n }\n}\n","import type { CelerityLayer, HandlerContext, HandlerResponse, Schema } from \"@celerity-sdk/types\";\nimport { BadRequestException } from \"../errors/http-exception\";\n\nexport type ValidationSchemas = {\n body?: Schema;\n params?: Schema;\n query?: Schema;\n headers?: Schema;\n};\n\nclass ValidationLayer implements CelerityLayer {\n constructor(private schemas: ValidationSchemas) {}\n\n async handle(\n context: HandlerContext,\n next: () => Promise<HandlerResponse>,\n ): Promise<HandlerResponse> {\n const { request } = context;\n\n if (this.schemas.body && request.textBody) {\n try {\n const raw = JSON.parse(request.textBody);\n context.metadata.set(\"validatedBody\", this.schemas.body.parse(raw));\n } catch (error) {\n throw new BadRequestException(\"Body validation failed\", formatError(error));\n }\n }\n\n if (this.schemas.params) {\n try {\n context.metadata.set(\"validatedParams\", this.schemas.params.parse(request.pathParams));\n } catch (error) {\n throw new BadRequestException(\"Path params validation failed\", formatError(error));\n }\n }\n\n if (this.schemas.query) {\n try {\n context.metadata.set(\"validatedQuery\", this.schemas.query.parse(request.query));\n } catch (error) {\n throw new BadRequestException(\"Query validation failed\", formatError(error));\n }\n }\n\n if (this.schemas.headers) {\n try {\n context.metadata.set(\"validatedHeaders\", this.schemas.headers.parse(request.headers));\n } catch (error) {\n throw new BadRequestException(\"Headers validation failed\", formatError(error));\n }\n }\n\n return next();\n }\n}\n\nfunction formatError(error: unknown): unknown {\n if (error instanceof Error && \"issues\" in error) {\n return (error as Error & { issues: unknown }).issues;\n }\n if (error instanceof Error) {\n return error.message;\n }\n return error;\n}\n\nexport function validate(schemas: ValidationSchemas): CelerityLayer {\n return new ValidationLayer(schemas);\n}\n","import createDebug from \"debug\";\nimport type { CelerityLayer, HandlerContext, HandlerResponse, Type } from \"@celerity-sdk/types\";\n\nconst debug = createDebug(\"celerity:core:layers\");\n\nexport function runLayerPipeline(\n layers: (CelerityLayer | Type<CelerityLayer>)[],\n context: HandlerContext,\n handler: () => Promise<HandlerResponse>,\n): Promise<HandlerResponse> {\n const resolved = layers.map((layer) => (typeof layer === \"function\" ? new layer() : layer));\n debug(\"runLayerPipeline: %d layers\", resolved.length);\n\n let index = -1;\n\n function dispatch(i: number): Promise<HandlerResponse> {\n if (i <= index) {\n return Promise.reject(new Error(\"next() called multiple times\"));\n }\n index = i;\n\n if (i >= resolved.length) {\n return handler();\n }\n\n const current = resolved[i];\n debug(\"layer[%d] %s\", i, current.constructor.name);\n return current.handle(context, () => dispatch(i + 1));\n }\n\n return dispatch(0);\n}\n","import type { CelerityLayer } from \"@celerity-sdk/types\";\nimport { ConfigLayer } from \"@celerity-sdk/config\";\n\nexport async function createDefaultSystemLayers(): Promise<CelerityLayer[]> {\n const layers: CelerityLayer[] = [];\n\n // Telemetry layer first — always try to load.\n // The layer itself decides: full OTel (tracing enabled) or logger-only (tracing disabled).\n try {\n const pkg = \"@celerity-sdk/telemetry\";\n const mod = (await import(pkg)) as Record<string, unknown>;\n const TelemetryLayerClass = mod.TelemetryLayer as new () => CelerityLayer;\n layers.push(new TelemetryLayerClass());\n } catch {\n // telemetry package not installed — skip\n }\n\n layers.push(new ConfigLayer());\n return layers;\n}\n","import type { CelerityLayer, Type } from \"@celerity-sdk/types\";\n\n/**\n * Disposes an array of layers in reverse order.\n * Skips class references (Type<CelerityLayer>) — only instances with a\n * `dispose` method are called. Errors are non-fatal; disposal continues\n * for remaining layers.\n */\nexport async function disposeLayers(\n layers: (CelerityLayer | Type<CelerityLayer>)[],\n): Promise<void> {\n for (const layer of [...layers].reverse()) {\n if (typeof layer === \"object\" && \"dispose\" in layer) {\n try {\n await layer.dispose?.();\n } catch {\n // Non-fatal — continue disposing remaining layers\n }\n }\n }\n}\n","import type { HandlerMetadata } from \"@celerity-sdk/types\";\n\nexport class HandlerMetadataStore implements HandlerMetadata {\n private readonly decoratorData: ReadonlyMap<string, unknown>;\n private readonly requestData = new Map<string, unknown>();\n\n constructor(decoratorMetadata: Record<string, unknown>) {\n this.decoratorData = new Map(Object.entries(decoratorMetadata));\n }\n\n get<T = unknown>(key: string): T | undefined {\n if (this.requestData.has(key)) return this.requestData.get(key) as T | undefined;\n return this.decoratorData.get(key) as T | undefined;\n }\n\n set(key: string, value: unknown): void {\n this.requestData.set(key, value);\n }\n\n has(key: string): boolean {\n return this.requestData.has(key) || this.decoratorData.has(key);\n }\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type {\n Type,\n InjectionToken,\n Provider,\n ClassProvider,\n FactoryProvider,\n ValueProvider,\n ServiceContainer,\n} from \"@celerity-sdk/types\";\nimport { INJECTABLE_METADATA } from \"../metadata/constants\";\nimport { getClassDependencyTokens, getProviderDependencyTokens } from \"./dependency-tokens\";\n\nconst debug = createDebug(\"celerity:core:di\");\n\ntype CloseEntry = {\n token: InjectionToken;\n close: () => Promise<void> | void;\n};\n\nconst CLOSE_METHODS = [\"close\", \"end\", \"quit\", \"disconnect\", \"$disconnect\", \"destroy\"] as const;\n\nfunction isClassProvider<T>(p: Provider<T>): p is ClassProvider<T> {\n return \"useClass\" in p;\n}\n\nfunction isFactoryProvider<T>(p: Provider<T>): p is FactoryProvider<T> {\n return \"useFactory\" in p;\n}\n\nfunction isValueProvider<T>(p: Provider<T>): p is ValueProvider<T> {\n return \"useValue\" in p;\n}\n\nexport function tokenToString(token: InjectionToken): string {\n if (typeof token === \"function\") return token.name;\n return String(token);\n}\n\nfunction detectCloseMethod(value: unknown): (() => Promise<void> | void) | null {\n if (typeof value !== \"object\" || value === null) return null;\n\n const obj = value as Record<string, unknown>;\n for (const method of CLOSE_METHODS) {\n if (typeof obj[method] === \"function\") {\n return () => (obj[method] as () => Promise<void> | void)();\n }\n }\n\n return null;\n}\n\n// Used for the internal map of providers where we can't track each specific\n// Provider<T> type.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyProvider = Provider<any>;\n\nexport class Container implements ServiceContainer {\n private providers = new Map<InjectionToken, AnyProvider>();\n private instances = new Map<InjectionToken, unknown>();\n private resolving = new Set<InjectionToken>();\n private edges = new Map<InjectionToken, Set<InjectionToken>>();\n private closeStack: CloseEntry[] = [];\n private trackedTokens = new Set<InjectionToken>();\n\n register<T>(token: InjectionToken, provider: Provider<T>): void {\n const type = isClassProvider(provider)\n ? \"class\"\n : isFactoryProvider(provider)\n ? \"factory\"\n : \"value\";\n debug(\"register %s (%s)\", tokenToString(token), type);\n this.providers.set(token, provider);\n\n if (isValueProvider(provider)) {\n this.trackCloseable(token, provider.useValue, provider.onClose);\n }\n }\n\n registerClass<T>(target: Type<T>): void {\n debug(\"register %s (class)\", target.name);\n this.providers.set(target, { useClass: target });\n }\n\n registerValue<T>(token: InjectionToken, value: T): void {\n debug(\"registerValue %s\", tokenToString(token));\n this.instances.set(token, value);\n this.trackCloseable(token, value);\n }\n\n async resolve<T>(token: InjectionToken): Promise<T> {\n const name = tokenToString(token);\n if (this.instances.has(token)) {\n debug(\"resolve %s → cached\", name);\n return this.instances.get(token) as T;\n }\n\n if (this.resolving.has(token)) {\n const path = [...this.resolving, token].map(tokenToString).join(\" → \");\n throw new Error(`Circular dependency detected: ${path}`);\n }\n\n debug(\"resolve %s → constructing\", name);\n this.resolving.add(token);\n try {\n const provider = this.providers.get(token);\n if (!provider) {\n if (typeof token === \"function\") {\n return this.constructClass(token as Type<T>);\n }\n throw new Error(\n `No provider registered for ${tokenToString(token)}.\\n` +\n 'Ensure the module providing it is included in your module\\'s \"imports\" array,\\n' +\n \"or register a provider for it directly.\",\n );\n }\n\n if (isFactoryProvider(provider) && provider.inject) {\n this.recordEdges(token, provider.inject);\n }\n\n const instance = await this.createFromProvider<T>(provider);\n this.instances.set(token, instance);\n\n if (!isValueProvider(provider)) {\n this.trackCloseable(token, instance, provider.onClose);\n }\n\n return instance;\n } finally {\n this.resolving.delete(token);\n }\n }\n\n async resolveClass<T>(target: Type<T>): Promise<T> {\n if (this.instances.has(target)) {\n return this.instances.get(target) as T;\n }\n\n if (this.resolving.has(target)) {\n const path = [...this.resolving, target].map(tokenToString).join(\" → \");\n throw new Error(`Circular dependency detected: ${path}`);\n }\n\n this.resolving.add(target);\n try {\n return this.constructClass(target);\n } finally {\n this.resolving.delete(target);\n }\n }\n\n has(token: InjectionToken): boolean {\n return this.instances.has(token) || this.providers.has(token);\n }\n\n getDependencies(token: InjectionToken): ReadonlySet<InjectionToken> {\n return this.edges.get(token) ?? new Set();\n }\n\n async closeAll(): Promise<void> {\n debug(\"closeAll: %d resources\", this.closeStack.length);\n const entries = [...this.closeStack].reverse();\n for (const entry of entries) {\n try {\n debug(\"closing %s\", tokenToString(entry.token));\n await entry.close();\n } catch {\n // Close failure is non-fatal — continue closing remaining services.\n }\n }\n this.closeStack = [];\n this.trackedTokens.clear();\n }\n\n /**\n * Validates that all registered providers have resolvable dependencies.\n * Call after all module providers are registered but before resolution.\n * Throws a descriptive error listing ALL missing dependencies at once.\n */\n validateDependencies(): void {\n const missing: Array<{ consumer: string; dependency: string }> = [];\n const visited = new Set<InjectionToken>();\n\n const walk = (token: InjectionToken): void => {\n if (visited.has(token)) return;\n visited.add(token);\n\n let depTokens: InjectionToken[];\n const provider = this.providers.get(token);\n\n if (provider) {\n depTokens = this.getProviderDependencyTokens(provider);\n } else if (typeof token === \"function\") {\n depTokens = this.getClassDependencyTokens(token as Type);\n } else {\n return;\n }\n\n for (const dep of depTokens) {\n if (this.providers.has(dep) || this.instances.has(dep)) {\n walk(dep);\n } else if (typeof dep === \"function\") {\n walk(dep);\n } else {\n missing.push({\n consumer: tokenToString(token),\n dependency: tokenToString(dep),\n });\n }\n }\n };\n\n for (const token of this.providers.keys()) {\n walk(token);\n }\n\n if (missing.length > 0) {\n const details = missing\n .map(\n ({ consumer, dependency }) =>\n ` ${consumer} requires ${dependency} — no provider registered`,\n )\n .join(\"\\n\");\n throw new Error(\n `Unresolvable dependencies detected during bootstrap:\\n\\n${details}\\n\\n` +\n \"For each unresolved dependency, check that the module providing it is included\\n\" +\n 'in your root module\\'s \"imports\" array, or register a provider for it directly.',\n );\n }\n }\n\n getClassDependencyTokens(target: Type): InjectionToken[] {\n return getClassDependencyTokens(target);\n }\n\n getProviderDependencyTokens(provider: AnyProvider): InjectionToken[] {\n return getProviderDependencyTokens(provider);\n }\n\n /**\n * Constructs a class by resolving constructor dependencies via design:paramtypes.\n * Does NOT manage the resolving set — callers (resolve/resolveClass) own cycle detection.\n */\n private async constructClass<T>(target: Type<T>): Promise<T> {\n if (this.instances.has(target)) {\n return this.instances.get(target) as T;\n }\n\n const isInjectable = Reflect.getOwnMetadata(INJECTABLE_METADATA, target) === true;\n if (!isInjectable && target.length > 0) {\n throw new Error(\n `Class ${target.name} has constructor parameters but is not decorated with @Injectable(). ` +\n \"Add @Injectable() to enable dependency injection, or use a factory provider.\",\n );\n }\n\n const depTokens = this.getClassDependencyTokens(target);\n debug(\"construct %s deps=[%s]\", target.name, depTokens.map(tokenToString).join(\", \"));\n this.recordEdges(target, depTokens);\n\n const deps: unknown[] = [];\n for (const t of depTokens) {\n deps.push(await this.resolve(t));\n }\n\n const instance = new target(...deps) as T;\n this.instances.set(target, instance);\n this.trackCloseable(target, instance);\n return instance;\n }\n\n private recordEdges(from: InjectionToken, to: InjectionToken[]): void {\n let set = this.edges.get(from);\n if (!set) {\n set = new Set();\n this.edges.set(from, set);\n }\n for (const dep of to) {\n set.add(dep);\n }\n }\n\n private trackCloseable<T>(\n token: InjectionToken,\n value: T,\n onClose?: (value: T) => Promise<void> | void,\n ): void {\n if (this.trackedTokens.has(token)) return;\n\n if (onClose) {\n this.closeStack.push({ token, close: () => onClose(value) });\n this.trackedTokens.add(token);\n return;\n }\n\n const closeFn = detectCloseMethod(value);\n if (closeFn) {\n this.closeStack.push({ token, close: closeFn });\n this.trackedTokens.add(token);\n }\n }\n\n private async createFromProvider<T>(provider: AnyProvider): Promise<T> {\n if (isValueProvider(provider)) {\n return provider.useValue as T;\n }\n\n if (isClassProvider(provider)) {\n return this.constructClass(provider.useClass) as Promise<T>;\n }\n\n if (isFactoryProvider(provider)) {\n const deps = provider.inject\n ? await Promise.all(provider.inject.map((t) => this.resolve(t)))\n : [];\n return provider.useFactory(...deps) as T;\n }\n\n throw new Error(\"Invalid provider configuration\");\n }\n}\n","import \"reflect-metadata\";\nimport type {\n Type,\n InjectionToken,\n Provider,\n ClassProvider,\n FactoryProvider,\n} from \"@celerity-sdk/types\";\nimport { INJECT_METADATA } from \"../metadata/constants\";\n\nfunction isClassProvider<T>(p: Provider<T>): p is ClassProvider<T> {\n return \"useClass\" in p;\n}\n\nfunction isFactoryProvider<T>(p: Provider<T>): p is FactoryProvider<T> {\n return \"useFactory\" in p;\n}\n\n/**\n * Reads reflect-metadata to determine the constructor dependency tokens for a class.\n * Applies @Inject() overrides where present.\n *\n * Pure function — reads metadata only, no container side effects.\n */\nexport function getClassDependencyTokens(target: Type): InjectionToken[] {\n const paramTypes: Type[] = Reflect.getMetadata(\"design:paramtypes\", target) ?? [];\n const injectOverrides: Map<number, InjectionToken> =\n Reflect.getMetadata(INJECT_METADATA, target) ?? new Map();\n return paramTypes.map((paramType, index) => injectOverrides.get(index) ?? paramType);\n}\n\n/**\n * Determines the dependency tokens for a provider (class, factory, or value).\n *\n * Pure function — reads metadata only, no container side effects.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getProviderDependencyTokens(provider: Provider<any>): InjectionToken[] {\n if (isClassProvider(provider)) {\n return getClassDependencyTokens(provider.useClass);\n }\n if (isFactoryProvider(provider) && provider.inject) {\n return [...provider.inject];\n }\n return [];\n}\n","export const APP_CONFIG = Symbol(\"celerity:app-config\");\nexport const RUNTIME_APP = Symbol(\"celerity:runtime-app\");\n","import createDebug from \"debug\";\nimport type { CelerityLayer, Type } from \"@celerity-sdk/types\";\nimport { bootstrap } from \"../bootstrap/bootstrap\";\nimport { CelerityApplication } from \"./application\";\nimport { ServerlessApplication } from \"./serverless\";\nimport { TestingApplication } from \"../testing/test-app\";\nimport type { ServerlessAdapter } from \"../adapters/interfaces\";\nimport { createDefaultSystemLayers } from \"../layers/system\";\n\nconst debug = createDebug(\"celerity:core:factory\");\n\nexport type CreateOptions = {\n adapter?: ServerlessAdapter;\n /** App-wide layers that run after system layers but before handler layers. */\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n /**\n * Override the default system layer stack.\n * @internal Used by TestingApplication and runtime orchestrator.\n */\n systemLayers?: (CelerityLayer | Type<CelerityLayer>)[];\n};\n\nexport class CelerityFactory {\n static async create(\n rootModule: Type,\n options?: CreateOptions,\n ): Promise<CelerityApplication | ServerlessApplication> {\n debug(\"create: bootstrapping %s\", rootModule.name);\n\n // Resolve system layers first.\n // If telemetry is present + enabled, this triggers OTel SDK init\n // and registers auto-instrumentations before user module imports.\n const systemLayers = options?.systemLayers ?? (await createDefaultSystemLayers());\n const appLayers = options?.layers ?? [];\n debug(\"create: %d system layers, %d app layers\", systemLayers.length, appLayers.length);\n\n // Bootstrap user module after auto-instrumentations are registered.\n const { container, registry } = await bootstrap(rootModule);\n\n if (options?.adapter) {\n debug(\"create: using adapter → ServerlessApplication\");\n return new ServerlessApplication(\n registry,\n container,\n options.adapter,\n systemLayers,\n appLayers,\n );\n }\n\n debug(\"create: → CelerityApplication\");\n return new CelerityApplication(registry, container, systemLayers, appLayers);\n }\n\n static async createTestingApp(\n rootModule: Type,\n options?: CreateOptions,\n ): Promise<TestingApplication> {\n debug(\"createTestingApp: bootstrapping %s\", rootModule.name);\n const { container, registry } = await bootstrap(rootModule);\n const systemLayers = options?.systemLayers ?? [];\n const appLayers = options?.layers ?? [];\n return new TestingApplication(registry, container, systemLayers, appLayers);\n }\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type { Type } from \"@celerity-sdk/types\";\nimport { Container } from \"../di/container\";\nimport { HandlerRegistry } from \"../handlers/registry\";\nimport { walkModuleGraph, validateModuleGraph } from \"./module-graph\";\n\nconst debug = createDebug(\"celerity:core:bootstrap\");\n\nexport type BootstrapResult = {\n container: Container;\n registry: HandlerRegistry;\n};\n\n/** Bootstrap DI container + handler registry from a root module class. */\nexport async function bootstrap(rootModule: Type): Promise<BootstrapResult> {\n debug(\"bootstrap: starting from %s\", rootModule.name);\n const container = new Container();\n const registry = new HandlerRegistry();\n\n const graph = walkModuleGraph(rootModule, container);\n validateModuleGraph(graph, container);\n await registry.populateFromGraph(graph, container);\n\n debug(\n \"bootstrap: complete — %d modules, %d handlers\",\n graph.size,\n registry.getAllHandlers().length,\n );\n return { container, registry };\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type {\n HttpMethod,\n CelerityLayer,\n FunctionHandlerDefinition,\n Type,\n Schema,\n InjectionToken,\n} from \"@celerity-sdk/types\";\nimport { joinHandlerPath } from \"@celerity-sdk/common\";\nimport {\n CONTROLLER_METADATA,\n HTTP_METHOD_METADATA,\n ROUTE_PATH_METADATA,\n PARAM_METADATA,\n GUARD_PROTECTEDBY_METADATA,\n LAYER_METADATA,\n PUBLIC_METADATA,\n CUSTOM_METADATA,\n} from \"../metadata/constants\";\nimport type { ControllerMetadata } from \"../decorators/controller\";\nimport type { ParamMetadata } from \"../decorators/params\";\nimport type { ResolvedHandler } from \"./pipeline\";\nimport { validate, type ValidationSchemas } from \"../layers/validate\";\nimport type { Container } from \"../di/container\";\nimport { buildModuleGraph, registerModuleGraph } from \"../bootstrap/module-graph\";\nimport type { ModuleGraph } from \"../bootstrap/module-graph\";\n\nconst debug = createDebug(\"celerity:core:registry\");\n\nexport class HandlerRegistry {\n private handlers: ResolvedHandler[] = [];\n\n getHandler(path: string, method: string): ResolvedHandler | undefined {\n const found = this.handlers.find(\n (h) =>\n h.path !== undefined &&\n h.method !== undefined &&\n matchRoute(h.path, path) &&\n h.method === method,\n );\n debug(\"getHandler %s %s → %s\", method, path, found ? \"matched\" : \"not found\");\n return found;\n }\n\n getHandlerById(id: string): ResolvedHandler | undefined {\n const found = this.handlers.find((h) => h.id !== undefined && h.id === id);\n debug(\"getHandlerById %s → %s\", id, found ? \"matched\" : \"not found\");\n return found;\n }\n\n getAllHandlers(): ResolvedHandler[] {\n return [...this.handlers];\n }\n\n async populateFromGraph(graph: ModuleGraph, container: Container): Promise<void> {\n for (const [, node] of graph) {\n for (const controllerClass of node.controllers) {\n await this.registerClassHandler(controllerClass, container);\n }\n for (const fnHandler of node.functionHandlers) {\n this.registerFunctionHandler(fnHandler);\n }\n }\n }\n\n async scanModule(moduleClass: Type, container: Container): Promise<void> {\n const graph = buildModuleGraph(moduleClass);\n registerModuleGraph(graph, container);\n await this.populateFromGraph(graph, container);\n }\n\n private async registerClassHandler(controllerClass: Type, container: Container): Promise<void> {\n const controllerMeta: ControllerMetadata | undefined = Reflect.getOwnMetadata(\n CONTROLLER_METADATA,\n controllerClass,\n );\n if (!controllerMeta) return;\n\n const instance = await container.resolve<object>(controllerClass);\n const prototype = Object.getPrototypeOf(instance) as object;\n const methods = Object.getOwnPropertyNames(prototype).filter((name) => name !== \"constructor\");\n\n const classProtectedBy: string[] =\n Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, controllerClass) ?? [];\n const classLayers: (CelerityLayer | Type<CelerityLayer>)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, controllerClass) ?? [];\n const classCustomMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, controllerClass) ?? {};\n\n for (const methodName of methods) {\n const method: HttpMethod | undefined = Reflect.getOwnMetadata(\n HTTP_METHOD_METADATA,\n prototype,\n methodName,\n );\n if (!method) continue;\n\n const routePath: string =\n Reflect.getOwnMetadata(ROUTE_PATH_METADATA, prototype, methodName) ?? \"/\";\n const fullPath = joinHandlerPath(controllerMeta.prefix ?? \"\", routePath);\n\n const methodProtectedBy: string[] =\n Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, prototype, methodName) ?? [];\n const methodLayers: (CelerityLayer | Type<CelerityLayer>)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, prototype, methodName) ?? [];\n const paramMetadata: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, prototype, methodName) ?? [];\n const isPublic: boolean =\n Reflect.getOwnMetadata(PUBLIC_METADATA, prototype, methodName) === true;\n const methodCustomMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, prototype, methodName) ?? {};\n\n const descriptor = Object.getOwnPropertyDescriptor(prototype, methodName);\n if (!descriptor?.value || typeof descriptor.value !== \"function\") continue;\n\n const layers = [...classLayers, ...methodLayers];\n const validationSchemas = buildValidationSchemasFromParams(paramMetadata);\n if (validationSchemas) {\n layers.unshift(validate(validationSchemas));\n }\n\n debug(\n \"registerClassHandler: %s %s (%s.%s)\",\n method,\n fullPath,\n controllerClass.name,\n methodName,\n );\n this.handlers.push({\n path: fullPath,\n method,\n protectedBy: [...classProtectedBy, ...methodProtectedBy],\n layers,\n isPublic,\n paramMetadata,\n customMetadata: { ...classCustomMetadata, ...methodCustomMetadata },\n handlerFn: descriptor.value as (...args: unknown[]) => unknown,\n handlerInstance: instance,\n });\n }\n }\n\n private registerFunctionHandler(definition: FunctionHandlerDefinition): void {\n if (definition.type !== \"http\") return;\n\n const meta = definition.metadata as {\n path?: string;\n method?: HttpMethod;\n schema?: { body?: Schema; query?: Schema; params?: Schema; headers?: Schema };\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n inject?: InjectionToken[];\n customMetadata?: Record<string, unknown>;\n };\n\n const layers = [...(meta.layers ?? [])];\n if (meta.schema) {\n const schemas: Record<string, Schema> = {};\n if (meta.schema.body) schemas.body = meta.schema.body;\n if (meta.schema.query) schemas.query = meta.schema.query;\n if (meta.schema.params) schemas.params = meta.schema.params;\n if (meta.schema.headers) schemas.headers = meta.schema.headers;\n if (Object.keys(schemas).length > 0) {\n layers.unshift(validate(schemas));\n }\n }\n\n debug(\n \"registerFunctionHandler: %s\",\n definition.id ?? (meta.method && meta.path ? `${meta.method} ${meta.path}` : \"(no route)\"),\n );\n this.handlers.push({\n id: definition.id,\n path: meta.path,\n method: meta.method,\n protectedBy: [],\n layers,\n isPublic: false,\n paramMetadata: [],\n customMetadata: meta.customMetadata ?? {},\n handlerFn: definition.handler,\n isFunctionHandler: true,\n injectTokens: meta.inject ?? [],\n });\n }\n}\n\nfunction matchRoute(pattern: string, actual: string): boolean {\n const patternParts = pattern.split(\"/\").filter(Boolean);\n const actualParts = actual.split(\"/\").filter(Boolean);\n\n if (patternParts.length !== actualParts.length) return false;\n\n return patternParts.every((part, i) => part.startsWith(\"{\") || part === actualParts[i]);\n}\n\nconst PARAM_TYPE_TO_SCHEMA_KEY: Record<string, keyof ValidationSchemas> = {\n body: \"body\",\n query: \"query\",\n param: \"params\",\n headers: \"headers\",\n};\n\nfunction buildValidationSchemasFromParams(\n paramMetadata: ParamMetadata[],\n): ValidationSchemas | null {\n const wholeObjectSchemas = new Map<keyof ValidationSchemas, Schema>();\n const perKeySchemas = new Map<keyof ValidationSchemas, Map<string, Schema>>();\n\n for (const meta of paramMetadata) {\n if (!meta.schema) continue;\n const schemaKey = PARAM_TYPE_TO_SCHEMA_KEY[meta.type];\n if (!schemaKey) continue;\n\n if (meta.key) {\n let keyMap = perKeySchemas.get(schemaKey);\n if (!keyMap) {\n keyMap = new Map();\n perKeySchemas.set(schemaKey, keyMap);\n }\n keyMap.set(meta.key, meta.schema);\n } else {\n wholeObjectSchemas.set(schemaKey, meta.schema);\n }\n }\n\n const schemas: ValidationSchemas = {};\n let hasSchemas = false;\n\n for (const key of [\"body\", \"query\", \"params\", \"headers\"] as (keyof ValidationSchemas)[]) {\n if (wholeObjectSchemas.has(key)) {\n schemas[key] = wholeObjectSchemas.get(key)!;\n hasSchemas = true;\n } else if (perKeySchemas.has(key)) {\n schemas[key] = composeKeySchemas(perKeySchemas.get(key)!);\n hasSchemas = true;\n }\n }\n\n return hasSchemas ? schemas : null;\n}\n\nfunction composeKeySchemas(keySchemas: Map<string, Schema>): Schema {\n return {\n parse(data: unknown): Record<string, unknown> {\n const record = data as Record<string, unknown>;\n const result: Record<string, unknown> = { ...record };\n for (const [key, schema] of keySchemas) {\n if (key in result) {\n result[key] = schema.parse(result[key]);\n }\n }\n return result;\n },\n };\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type {\n Type,\n InjectionToken,\n Provider,\n ModuleMetadata,\n FunctionHandlerDefinition,\n} from \"@celerity-sdk/types\";\nimport { MODULE_METADATA } from \"../metadata/constants\";\nimport type { Container } from \"../di/container\";\nimport { tokenToString } from \"../di/container\";\nimport { getClassDependencyTokens, getProviderDependencyTokens } from \"../di/dependency-tokens\";\n\nconst debug = createDebug(\"celerity:core:bootstrap\");\n\nexport type ModuleNode = {\n moduleClass: Type;\n ownTokens: Set<InjectionToken>;\n exports: Set<InjectionToken>;\n imports: Type[];\n controllers: Type[];\n functionHandlers: FunctionHandlerDefinition[];\n providers: (Type | (Provider & { provide: InjectionToken }))[];\n};\n\nexport type ModuleGraph = Map<Type, ModuleNode>;\n\n/**\n * Builds a module graph by walking the module tree depth-first, collecting\n * all metadata into a graph structure without any side effects.\n *\n * Detects circular module imports and deduplicates visited modules.\n */\nexport function buildModuleGraph(rootModule: Type): ModuleGraph {\n const graph: ModuleGraph = new Map();\n const resolving = new Set<Type>();\n\n function walk(moduleClass: Type, importChain: Type[]): void {\n if (graph.has(moduleClass)) {\n debug(\"walk %s → already visited\", moduleClass.name);\n return;\n }\n\n if (resolving.has(moduleClass)) {\n const cyclePath = [...importChain, moduleClass].map((m) => m.name).join(\" → \");\n throw new Error(`Circular module import detected: ${cyclePath}`);\n }\n\n resolving.add(moduleClass);\n\n const metadata: ModuleMetadata | undefined = Reflect.getOwnMetadata(\n MODULE_METADATA,\n moduleClass,\n );\n\n if (!metadata) {\n resolving.delete(moduleClass);\n graph.set(moduleClass, {\n moduleClass,\n ownTokens: new Set(),\n exports: new Set(),\n imports: [],\n controllers: [],\n functionHandlers: [],\n providers: [],\n });\n return;\n }\n\n // Recurse into imports first (depth-first)\n const imports = metadata.imports ?? [];\n for (const imported of imports) {\n walk(imported, [...importChain, moduleClass]);\n }\n\n // Collect own tokens from providers\n const ownTokens = new Set<InjectionToken>();\n const providers = metadata.providers ?? [];\n for (const provider of providers) {\n if (typeof provider === \"function\") {\n ownTokens.add(provider);\n } else {\n const typed = provider as Provider & { provide: InjectionToken };\n ownTokens.add(typed.provide);\n }\n }\n\n // Controllers are also own tokens\n const controllers = metadata.controllers ?? [];\n for (const controller of controllers) {\n ownTokens.add(controller);\n }\n\n // Build exports set — defaults to empty (nothing exported) when omitted\n const exportTokens = new Set<InjectionToken>(metadata.exports ?? []);\n\n resolving.delete(moduleClass);\n debug(\n \"walk %s: %d providers, %d controllers, %d imports\",\n moduleClass.name,\n providers.length,\n controllers.length,\n imports.length,\n );\n graph.set(moduleClass, {\n moduleClass,\n ownTokens,\n exports: exportTokens,\n imports,\n controllers,\n functionHandlers: metadata.functionHandlers ?? [],\n providers,\n });\n }\n\n walk(rootModule, []);\n return graph;\n}\n\n/**\n * Registers all providers and controllers from the module graph into the\n * DI container.\n */\nexport function registerModuleGraph(graph: ModuleGraph, container: Container): void {\n for (const [, node] of graph) {\n for (const provider of node.providers) {\n if (typeof provider === \"function\") {\n container.registerClass(provider);\n } else {\n const typed = provider as Provider & { provide: InjectionToken };\n container.register(typed.provide, typed);\n }\n }\n\n for (const controller of node.controllers) {\n if (!container.has(controller)) {\n container.registerClass(controller);\n }\n }\n }\n}\n\n/**\n * Walks the module tree once, depth-first, registering providers in the container\n * and collecting all module metadata into a graph structure.\n *\n * Detects circular module imports and deduplicates visited modules.\n */\nexport function walkModuleGraph(rootModule: Type, container: Container): ModuleGraph {\n const graph = buildModuleGraph(rootModule);\n registerModuleGraph(graph, container);\n return graph;\n}\n\ntype Diagnostic = {\n type: \"missing_dependency\" | \"export_violation\" | \"invalid_export\";\n message: string;\n};\n\n/**\n * Validates the module graph for:\n * 1. All provider dependencies are resolvable (replaces container.validateDependencies)\n * 2. Cross-module dependencies respect export boundaries\n * 3. Exported tokens are actually owned by the module\n */\nexport function validateModuleGraph(graph: ModuleGraph, container: Container): void {\n const diagnostics: Diagnostic[] = [];\n\n for (const [, node] of graph) {\n // Check that exported tokens are owned by this module\n for (const exportToken of node.exports) {\n if (!node.ownTokens.has(exportToken)) {\n diagnostics.push({\n type: \"invalid_export\",\n message:\n `${node.moduleClass.name} exports ${tokenToString(exportToken)}, ` +\n \"but that token is not provided by this module.\",\n });\n }\n }\n\n // Compute visible tokens: own + exported tokens from imported modules\n const visibleTokens = new Set<InjectionToken>(node.ownTokens);\n for (const importedModule of node.imports) {\n const importedNode = graph.get(importedModule);\n if (importedNode) {\n for (const exportedToken of importedNode.exports) {\n visibleTokens.add(exportedToken);\n }\n }\n }\n\n // Validate each provider's dependencies\n for (const provider of node.providers) {\n let depTokens: InjectionToken[];\n let consumerToken: InjectionToken;\n\n if (typeof provider === \"function\") {\n consumerToken = provider;\n depTokens = getClassDependencyTokens(provider);\n } else {\n const typed = provider as Provider & { provide: InjectionToken };\n consumerToken = typed.provide;\n depTokens = getProviderDependencyTokens(typed);\n }\n\n checkDependencies(\n consumerToken,\n depTokens,\n visibleTokens,\n node.moduleClass,\n graph,\n container,\n diagnostics,\n );\n }\n\n // Validate each controller's dependencies\n for (const controller of node.controllers) {\n const depTokens = getClassDependencyTokens(controller);\n checkDependencies(\n controller,\n depTokens,\n visibleTokens,\n node.moduleClass,\n graph,\n container,\n diagnostics,\n );\n }\n }\n\n debug(\"validateModuleGraph: %d modules, %d diagnostics\", graph.size, diagnostics.length);\n\n if (diagnostics.length > 0) {\n const details = diagnostics.map((d) => ` ${d.message}`).join(\"\\n\");\n throw new Error(`Module validation errors:\\n\\n${details}`);\n }\n}\n\nfunction checkDependencies(\n consumer: InjectionToken,\n depTokens: InjectionToken[],\n visibleTokens: Set<InjectionToken>,\n moduleClass: Type,\n graph: ModuleGraph,\n container: Container,\n diagnostics: Diagnostic[],\n): void {\n for (const dep of depTokens) {\n if (visibleTokens.has(dep)) continue;\n\n // Check if the token is owned by some module in the graph\n const ownerModule = findTokenOwner(dep, graph);\n if (ownerModule) {\n const ownerNode = graph.get(ownerModule)!;\n if (ownerNode.exports.has(dep)) {\n // Token IS exported from its owner, but that module isn't directly imported\n diagnostics.push({\n type: \"export_violation\",\n message:\n `${tokenToString(consumer)} in ${moduleClass.name} depends on ${tokenToString(dep)}, ` +\n `which is exported from ${ownerModule.name} but ${moduleClass.name} does not import ${ownerModule.name}. ` +\n `Add ${ownerModule.name} to ${moduleClass.name}'s \"imports\" array.`,\n });\n } else {\n // Token exists but isn't exported from its owner\n diagnostics.push({\n type: \"export_violation\",\n message:\n `${tokenToString(consumer)} in ${moduleClass.name} depends on ${tokenToString(dep)}, ` +\n `but ${tokenToString(dep)} is not exported from ${ownerModule.name}. ` +\n `Add ${tokenToString(dep)} to ${ownerModule.name}'s \"exports\" array.`,\n });\n }\n continue;\n }\n\n // Unregistered class token — auto-adopt into this module's visible scope.\n // The class becomes available within this module only (not exported).\n // Its own dependencies are recursively validated against the same boundaries.\n if (typeof dep === \"function\") {\n if (!container.has(dep)) {\n container.registerClass(dep);\n }\n visibleTokens.add(dep);\n\n const adoptedDeps = getClassDependencyTokens(dep);\n checkDependencies(\n dep,\n adoptedDeps,\n visibleTokens,\n moduleClass,\n graph,\n container,\n diagnostics,\n );\n continue;\n }\n\n // Truly missing — no provider registered for this non-class token\n diagnostics.push({\n type: \"missing_dependency\",\n message:\n `${tokenToString(consumer)} in ${moduleClass.name} requires ${tokenToString(dep)} — no provider registered. ` +\n 'Ensure the module providing it is included in your module\\'s \"imports\" array, ' +\n \"or register a provider for it directly.\",\n });\n }\n}\n\nfunction findTokenOwner(token: InjectionToken, graph: ModuleGraph): Type | null {\n for (const [, node] of graph) {\n if (node.ownTokens.has(token)) {\n return node.moduleClass;\n }\n }\n return null;\n}\n","import createDebug from \"debug\";\nimport type { CelerityLayer, Type } from \"@celerity-sdk/types\";\nimport type { Container } from \"../di/container\";\nimport type { HandlerRegistry } from \"../handlers/registry\";\nimport { disposeLayers } from \"../layers/dispose\";\n\nconst debug = createDebug(\"celerity:core:factory\");\n\nexport class CelerityApplication {\n constructor(\n private registry: HandlerRegistry,\n private container: Container,\n private systemLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n private appLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n private runtimeApp?: unknown,\n ) {}\n\n async start(): Promise<void> {\n if (this.runtimeApp && typeof this.runtimeApp === \"object\") {\n const app = this.runtimeApp as { run(block: boolean): Promise<void> };\n await app.run(false);\n }\n }\n\n async close(): Promise<void> {\n debug(\"close: shutting down application\");\n if (this.runtimeApp && typeof this.runtimeApp === \"object\") {\n const app = this.runtimeApp as { shutdown(): Promise<void> };\n await app.shutdown();\n }\n\n await this.container.closeAll();\n await disposeLayers([...this.systemLayers, ...this.appLayers]);\n }\n\n getContainer(): Container {\n return this.container;\n }\n\n getRegistry(): HandlerRegistry {\n return this.registry;\n }\n\n getSystemLayers(): (CelerityLayer | Type<CelerityLayer>)[] {\n return this.systemLayers;\n }\n\n getAppLayers(): (CelerityLayer | Type<CelerityLayer>)[] {\n return this.appLayers;\n }\n}\n","import type { CelerityLayer, Type } from \"@celerity-sdk/types\";\nimport type { Container } from \"../di/container\";\nimport type { HandlerRegistry } from \"../handlers/registry\";\nimport type { ServerlessAdapter, ServerlessHandler } from \"../adapters/interfaces\";\nimport { disposeLayers } from \"../layers/dispose\";\n\nexport class ServerlessApplication {\n private handler: ServerlessHandler | null = null;\n\n constructor(\n private registry: HandlerRegistry,\n private container: Container,\n private adapter: ServerlessAdapter,\n private systemLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n private appLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n ) {}\n\n async start(): Promise<ServerlessHandler> {\n this.handler = this.adapter.createHandler(this.registry, {\n container: this.container,\n systemLayers: this.systemLayers,\n appLayers: this.appLayers,\n });\n return this.handler;\n }\n\n async close(): Promise<void> {\n await this.container.closeAll();\n await disposeLayers([...this.systemLayers, ...this.appLayers]);\n }\n\n getHandler(): ServerlessHandler {\n if (!this.handler) {\n throw new Error(\"ServerlessApplication.start() must be called before getHandler()\");\n }\n return this.handler;\n }\n\n getContainer(): Container {\n return this.container;\n }\n\n getRegistry(): HandlerRegistry {\n return this.registry;\n }\n}\n","import createDebug from \"debug\";\nimport type {\n HttpRequest,\n HttpResponse,\n HandlerContext,\n CelerityLayer,\n Type,\n ServiceContainer,\n InjectionToken,\n} from \"@celerity-sdk/types\";\nimport { runLayerPipeline } from \"../layers/pipeline\";\nimport { HttpException } from \"../errors/http-exception\";\nimport { extractParam, type ParamMetadata, type ParamType } from \"../decorators/params\";\nimport { buildHttpRequest, buildHttpContext } from \"../functions/context\";\nimport { HandlerMetadataStore } from \"../metadata/handler-metadata\";\n\nconst debug = createDebug(\"celerity:core:pipeline\");\n\nexport type ResolvedHandler = {\n id?: string;\n path?: string;\n method?: string;\n protectedBy: string[];\n layers: (CelerityLayer | Type<CelerityLayer>)[];\n isPublic: boolean;\n paramMetadata: ParamMetadata[];\n customMetadata: Record<string, unknown>;\n handlerFn: (...args: unknown[]) => unknown;\n handlerInstance?: object;\n isFunctionHandler?: boolean;\n injectTokens?: InjectionToken[];\n};\n\nexport type PipelineOptions = {\n container: ServiceContainer;\n systemLayers?: (CelerityLayer | Type<CelerityLayer>)[];\n appLayers?: (CelerityLayer | Type<CelerityLayer>)[];\n};\n\nexport async function executeHandlerPipeline(\n handler: ResolvedHandler,\n request: HttpRequest,\n options: PipelineOptions,\n): Promise<HttpResponse> {\n const context: HandlerContext = {\n request,\n metadata: new HandlerMetadataStore(handler.customMetadata ?? {}),\n container: options.container,\n };\n\n const allLayers = [\n ...(options.systemLayers ?? []),\n ...(options.appLayers ?? []),\n ...handler.layers,\n ];\n\n debug(\"%s %s — %d layers\", request.method, request.path, allLayers.length);\n\n try {\n const response = await runLayerPipeline(allLayers, context, async () => {\n const handlerType = handler.isFunctionHandler ? \"function\" : \"class\";\n debug(\"invoking %s handler\", handlerType);\n const result = handler.isFunctionHandler\n ? await invokeFunctionHandler(handler, context)\n : await invokeClassHandler(handler, context);\n return normalizeResponse(result);\n });\n\n debug(\"response %d\", response.status);\n return response;\n } catch (error) {\n if (error instanceof HttpException) {\n debug(\"HttpException %d: %s\", error.statusCode, error.message);\n return {\n status: error.statusCode,\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n message: error.message,\n ...(error.details ? { details: error.details } : {}),\n }),\n };\n }\n const message = error instanceof Error ? error.message : String(error);\n if (context.logger) {\n context.logger.error(\"Unhandled error in handler pipeline\", {\n error: message,\n ...(error instanceof Error && error.stack ? { stack: error.stack } : {}),\n });\n } else {\n console.error(\"Unhandled error in handler pipeline:\", error);\n }\n\n return {\n status: 500,\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ message: \"Internal Server Error\" }),\n };\n }\n}\n\nasync function invokeClassHandler(\n handler: ResolvedHandler,\n context: HandlerContext,\n): Promise<unknown> {\n const args: unknown[] = [];\n const sorted = [...handler.paramMetadata].sort((a, b) => a.index - b.index);\n\n for (const meta of sorted) {\n args[meta.index] = extractValidatedParam(\n meta.type,\n meta.key,\n context.request,\n context.metadata,\n );\n }\n\n return handler.handlerFn.apply(handler.handlerInstance, args);\n}\n\nconst VALIDATED_METADATA_KEYS: Partial<Record<ParamType, string>> = {\n body: \"validatedBody\",\n query: \"validatedQuery\",\n param: \"validatedParams\",\n headers: \"validatedHeaders\",\n};\n\nfunction extractValidatedParam(\n type: ParamType,\n key: string | undefined,\n request: HttpRequest,\n metadata: HandlerContext[\"metadata\"],\n): unknown {\n const metaKey = VALIDATED_METADATA_KEYS[type];\n if (metaKey) {\n const validated = metadata.get(metaKey);\n if (validated !== undefined) {\n if (key && typeof validated === \"object\" && validated !== null) {\n return (validated as Record<string, unknown>)[key];\n }\n return validated;\n }\n }\n return extractParam(type, key, request);\n}\n\nasync function invokeFunctionHandler(\n handler: ResolvedHandler,\n context: HandlerContext,\n): Promise<unknown> {\n const req = buildHttpRequest(context.request, context.metadata);\n const ctx = buildHttpContext(\n context.request,\n context.metadata,\n context.container,\n context.logger,\n );\n\n if (handler.injectTokens && handler.injectTokens.length > 0) {\n const deps: unknown[] = [];\n for (const token of handler.injectTokens) {\n deps.push(await context.container.resolve(token));\n }\n return handler.handlerFn(req, ctx, ...deps);\n }\n\n return handler.handlerFn(req, ctx);\n}\n\nfunction normalizeResponse(result: unknown): HttpResponse {\n if (isHttpResponse(result)) {\n return result;\n }\n\n if (result === undefined || result === null) {\n return { status: 204 };\n }\n\n const body = typeof result === \"string\" ? result : JSON.stringify(result);\n return {\n status: 200,\n headers: { \"content-type\": \"application/json\" },\n body,\n };\n}\n\nfunction isHttpResponse(value: unknown): value is HttpResponse {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"status\" in value &&\n typeof (value as HttpResponse).status === \"number\"\n );\n}\n","import type {\n HttpMethod,\n HttpRequest,\n HandlerMetadata,\n ServiceContainer,\n CelerityLogger,\n} from \"@celerity-sdk/types\";\n\nexport type HttpHandlerRequest<TBody = unknown> = {\n method: HttpMethod;\n path: string;\n params: Record<string, string>;\n query: Record<string, string | string[]>;\n body: TBody;\n headers: Record<string, string | string[]>;\n cookies: Record<string, string>;\n auth: Record<string, unknown> | null;\n clientIp: string | null;\n userAgent: string | null;\n contentType: string | null;\n};\n\nexport type HttpHandlerContext = {\n requestId: string;\n requestTime: string;\n metadata: HandlerMetadata;\n container: ServiceContainer;\n /** Request-scoped logger set by TelemetryLayer. */\n logger?: CelerityLogger;\n raw: HttpRequest;\n};\n\nexport function buildHttpRequest(\n request: HttpRequest,\n metadata: HandlerMetadata,\n): HttpHandlerRequest {\n const validatedBody = metadata.get<unknown>(\"validatedBody\");\n let body: unknown;\n if (validatedBody !== undefined) {\n body = validatedBody;\n } else if (request.binaryBody) {\n body = request.binaryBody;\n } else if (request.textBody) {\n body = JSON.parse(request.textBody);\n } else {\n body = null;\n }\n\n return {\n method: request.method,\n path: request.path,\n params: metadata.get<Record<string, string>>(\"validatedParams\") ?? request.pathParams,\n query: metadata.get<Record<string, string | string[]>>(\"validatedQuery\") ?? request.query,\n body,\n headers: metadata.get<Record<string, string | string[]>>(\"validatedHeaders\") ?? request.headers,\n cookies: request.cookies,\n auth: request.auth,\n clientIp: request.clientIp,\n userAgent: request.userAgent,\n contentType: request.contentType,\n };\n}\n\nexport function buildHttpContext(\n request: HttpRequest,\n metadata: HandlerMetadata,\n container: ServiceContainer,\n logger?: CelerityLogger,\n): HttpHandlerContext {\n return {\n requestId: request.requestId,\n requestTime: request.requestTime,\n metadata,\n container,\n logger,\n raw: request,\n };\n}\n","import type {\n HttpMethod,\n HttpRequest,\n HttpResponse,\n CelerityLayer,\n Type,\n} from \"@celerity-sdk/types\";\nimport type { Container } from \"../di/container\";\nimport type { HandlerRegistry } from \"../handlers/registry\";\nimport { executeHandlerPipeline } from \"../handlers/pipeline\";\nimport { NotFoundException } from \"../errors/http-exception\";\n\nexport class TestingApplication {\n constructor(\n private registry: HandlerRegistry,\n private container: Container,\n private systemLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n private appLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n ) {}\n\n async inject(request: HttpRequest): Promise<HttpResponse> {\n const handler = this.registry.getHandler(request.path, request.method);\n if (!handler) {\n throw new NotFoundException(`No handler found for ${request.method} ${request.path}`);\n }\n return executeHandlerPipeline(handler, request, {\n container: this.container,\n systemLayers: this.systemLayers,\n appLayers: this.appLayers,\n });\n }\n\n getContainer(): Container {\n return this.container;\n }\n\n getRegistry(): HandlerRegistry {\n return this.registry;\n }\n}\n\nexport type MockRequestOptions = {\n pathParams?: Record<string, string>;\n query?: Record<string, string | string[]>;\n headers?: Record<string, string | string[]>;\n cookies?: Record<string, string>;\n body?: unknown;\n auth?: Record<string, unknown>;\n requestId?: string;\n clientIp?: string;\n};\n\nexport function mockRequest(\n method: HttpMethod,\n path: string,\n options: MockRequestOptions = {},\n): HttpRequest {\n return {\n method,\n path,\n pathParams: options.pathParams ?? {},\n query: options.query ?? {},\n headers: options.headers ?? {},\n cookies: options.cookies ?? {},\n textBody: options.body !== undefined ? JSON.stringify(options.body) : null,\n binaryBody: null,\n contentType: options.body !== undefined ? \"application/json\" : null,\n requestId: options.requestId ?? \"test-request-id\",\n requestTime: new Date().toISOString(),\n auth: options.auth ?? null,\n clientIp: options.clientIp ?? \"127.0.0.1\",\n traceContext: null,\n userAgent: \"celerity-testing\",\n matchedRoute: null,\n };\n}\n","import type {\n HttpMethod,\n CelerityLayer,\n FunctionHandlerDefinition,\n Type,\n InjectionToken,\n Schema,\n} from \"@celerity-sdk/types\";\nimport type { HttpHandlerRequest, HttpHandlerContext } from \"./context\";\n\nexport type HttpHandlerConfig<TBody = unknown> = {\n path?: string;\n method?: HttpMethod;\n schema?: {\n body?: Schema<TBody>;\n query?: Schema;\n params?: Schema;\n headers?: Schema;\n };\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n inject?: InjectionToken[];\n metadata?: Record<string, unknown>;\n};\n\ntype HttpHandlerOptions<TBody = unknown> = Omit<HttpHandlerConfig<TBody>, \"path\" | \"method\">;\n\ntype HttpHandlerFn<TBody = unknown> = (\n req: HttpHandlerRequest<TBody>,\n ctx: HttpHandlerContext,\n ...deps: unknown[]\n) => unknown;\n\nexport function createHttpHandler<TBody = unknown>(\n config: HttpHandlerConfig<TBody>,\n handler: HttpHandlerFn<TBody>,\n): FunctionHandlerDefinition {\n const metadata: Record<string, unknown> = {\n schema: config.schema,\n layers: config.layers ?? [],\n inject: config.inject ?? [],\n customMetadata: config.metadata ?? {},\n };\n\n if (config.path !== undefined) metadata.path = config.path;\n if (config.method !== undefined) metadata.method = config.method;\n\n return {\n __celerity_handler: true,\n type: \"http\",\n metadata,\n handler: handler as (...args: unknown[]) => unknown,\n };\n}\n\n// -- Shorthand helpers --------------------------------------------------------\n\nexport function httpGet(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpGet(\n path: string,\n options: HttpHandlerOptions,\n handler: HttpHandlerFn,\n): FunctionHandlerDefinition;\nexport function httpGet(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"GET\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"GET\", ...handlerOrOptions }, maybeHandler!);\n}\n\nexport function httpPost(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpPost<TBody = unknown>(\n path: string,\n options: HttpHandlerOptions<TBody>,\n handler: HttpHandlerFn<TBody>,\n): FunctionHandlerDefinition;\nexport function httpPost(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"POST\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"POST\", ...handlerOrOptions }, maybeHandler!);\n}\n\nexport function httpPut(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpPut<TBody = unknown>(\n path: string,\n options: HttpHandlerOptions<TBody>,\n handler: HttpHandlerFn<TBody>,\n): FunctionHandlerDefinition;\nexport function httpPut(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"PUT\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"PUT\", ...handlerOrOptions }, maybeHandler!);\n}\n\nexport function httpPatch(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpPatch<TBody = unknown>(\n path: string,\n options: HttpHandlerOptions<TBody>,\n handler: HttpHandlerFn<TBody>,\n): FunctionHandlerDefinition;\nexport function httpPatch(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"PATCH\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"PATCH\", ...handlerOrOptions }, maybeHandler!);\n}\n\nexport function httpDelete(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpDelete(\n path: string,\n options: HttpHandlerOptions,\n handler: HttpHandlerFn,\n): FunctionHandlerDefinition;\nexport function httpDelete(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"DELETE\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"DELETE\", ...handlerOrOptions }, maybeHandler!);\n}\n","import { resolve } from \"node:path\";\nimport type {\n CelerityLayer,\n FunctionHandlerDefinition,\n InjectionToken,\n Type,\n} from \"@celerity-sdk/types\";\nimport createDebug from \"debug\";\nimport type { HandlerRegistry } from \"./registry\";\nimport type { ResolvedHandler } from \"./pipeline\";\n\nconst debug = createDebug(\"celerity:core:module-resolver\");\n\n/**\n * Resolve a handler ID as a module reference by dynamically importing\n * the module and matching the exported function against the registry.\n *\n * Resolution strategy:\n * 1. If the ID contains a dot, try splitting at the last dot into\n * `moduleName.exportName` (named export).\n * 2. Fallback: treat the full ID as a module name with a default export.\n * This handles no-dot refs (e.g. \"myModule\") and dotted module names\n * (e.g. \"app.module\" from app.module.js) where the named export split failed.\n *\n * Supported formats:\n * - `\"handlers.hello\"` — named export `hello` from module `handlers`\n * - `\"handlers\"` — default export from module `handlers`\n * - `\"app.module\"` — dotted module name: tries named export split first,\n * falls back to default export from module `app.module`\n */\nexport async function resolveHandlerByModuleRef(\n handlerId: string,\n registry: HandlerRegistry,\n baseDir: string,\n): Promise<ResolvedHandler | null> {\n const lastDot = handlerId.lastIndexOf(\".\");\n if (lastDot > 0) {\n const moduleName = handlerId.slice(0, lastDot);\n const exportName = handlerId.slice(lastDot + 1);\n const result = await tryResolveExport(baseDir, moduleName, exportName, handlerId, registry);\n if (result) return result;\n }\n\n return tryResolveExport(baseDir, handlerId, \"default\", handlerId, registry);\n}\n\nasync function tryResolveExport(\n baseDir: string,\n moduleName: string,\n exportName: string,\n handlerId: string,\n registry: HandlerRegistry,\n): Promise<ResolvedHandler | null> {\n const handlerModulePath = resolve(baseDir, moduleName);\n\n let mod: Record<string, unknown>;\n try {\n mod = (await import(handlerModulePath)) as Record<string, unknown>;\n } catch {\n try {\n mod = (await import(`${handlerModulePath}.js`)) as Record<string, unknown>;\n } catch {\n return null;\n }\n }\n\n const exported = mod[exportName];\n if (!exported) return null;\n\n const isFnDef =\n typeof exported === \"object\" &&\n exported !== null &&\n (exported as Record<string, unknown>).__celerity_handler;\n const handlerFn = isFnDef ? (exported as FunctionHandlerDefinition).handler : exported;\n if (typeof handlerFn !== \"function\") return null;\n\n // Handler functions created with createHttpHandler are registered in the HandlerRegistry\n // without an ID. The module import uses the shared Node.js module cache,\n // so we can find the same function reference in the registry and match it\n // with the handler ID derived from the module path + export name.\n // This is primarily used when routing information is defined in a blueprint\n // and the handler function in code has no route information, as is common\n // in serverless application development.\n const match = registry.getAllHandlers().find((h) => h.handlerFn === handlerFn);\n if (match) {\n match.id = handlerId;\n debug(\"matched '%s' to registry handler\", handlerId);\n return match;\n }\n\n debug(\"'%s' not in registry, wrapping directly\", handlerId);\n return buildResolvedFromExport(handlerId, handlerFn, isFnDef ? exported : null);\n}\n\nfunction buildResolvedFromExport(\n handlerId: string,\n handlerFn: unknown,\n fnDef: unknown,\n): ResolvedHandler {\n if (fnDef) {\n const meta = (fnDef as FunctionHandlerDefinition).metadata as {\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n inject?: InjectionToken[];\n customMetadata?: Record<string, unknown>;\n };\n return {\n id: handlerId,\n protectedBy: [],\n layers: [...(meta.layers ?? [])],\n isPublic: false,\n paramMetadata: [],\n customMetadata: meta.customMetadata ?? {},\n handlerFn: handlerFn as (...args: unknown[]) => unknown,\n isFunctionHandler: true,\n injectTokens: meta.inject ?? [],\n };\n }\n\n return {\n id: handlerId,\n protectedBy: [],\n layers: [],\n isPublic: false,\n paramMetadata: [],\n customMetadata: {},\n handlerFn: handlerFn as (...args: unknown[]) => unknown,\n isFunctionHandler: true,\n injectTokens: [],\n };\n}\n","import { resolve } from \"node:path\";\nimport createDebug from \"debug\";\nimport type { Type } from \"@celerity-sdk/types\";\n\nconst debug = createDebug(\"celerity:core:bootstrap\");\n\n/** Discover and dynamically import the user's root module. */\nexport async function discoverModule(modulePath?: string): Promise<Type> {\n const resolved = modulePath ?? process.env.CELERITY_MODULE_PATH;\n if (!resolved) {\n throw new Error(\n \"Cannot discover module: set CELERITY_MODULE_PATH environment variable or pass modulePath\",\n );\n }\n\n const absolutePath = resolve(resolved);\n debug(\"discoverModule: importing %s\", absolutePath);\n const imported = (await import(absolutePath)) as Record<string, unknown>;\n const rootModule = imported.default ?? findModuleExport(imported);\n\n if (!rootModule || typeof rootModule !== \"function\") {\n throw new Error(`No module class found in \"${resolved}\"`);\n }\n\n debug(\"discoverModule: found %s\", (rootModule as Type).name);\n return rootModule as Type;\n}\n\nfunction findModuleExport(imported: Record<string, unknown>): unknown {\n for (const key of Object.keys(imported)) {\n if (key === \"default\") continue;\n if (typeof imported[key] === \"function\") {\n return imported[key];\n }\n }\n return undefined;\n}\n","import type { Request as RuntimeRequest, Response as RuntimeResponse } from \"@celerity-sdk/runtime\";\nimport type { HttpMethod, HttpRequest, HttpResponse } from \"@celerity-sdk/types\";\n\n/** Flatten multi-value records: single-element arrays become plain strings. */\nexport function flattenMultiValueRecord(\n record: Record<string, string[]>,\n): Record<string, string | string[]> {\n const result: Record<string, string | string[]> = {};\n for (const [key, values] of Object.entries(record)) {\n result[key] = values.length === 1 ? values[0] : values;\n }\n return result;\n}\n\n/** Convert NAPI runtime Request → SDK HttpRequest. */\nexport function mapRuntimeRequest(request: RuntimeRequest): HttpRequest {\n return {\n method: request.method.toUpperCase() as HttpMethod,\n path: request.path,\n pathParams: request.pathParams,\n query: flattenMultiValueRecord(request.query),\n headers: flattenMultiValueRecord(request.headers),\n cookies: request.cookies,\n textBody: request.textBody,\n binaryBody: request.binaryBody,\n contentType: request.contentType || null,\n requestId: request.requestId,\n requestTime: request.requestTime,\n auth: request.auth ?? null,\n clientIp: request.clientIp || null,\n traceContext: request.traceContext ?? null,\n userAgent: request.userAgent || null,\n matchedRoute: request.matchedRoute,\n };\n}\n\n/** Convert SDK HttpResponse → NAPI runtime Response. */\nexport function mapToRuntimeResponse(response: HttpResponse): RuntimeResponse {\n return {\n status: response.status,\n headers: response.headers,\n body: response.body,\n binaryBody: response.binaryBody,\n };\n}\n","import { resolve, dirname } from \"node:path\";\nimport type { Request as RuntimeRequest, Response as RuntimeResponse } from \"@celerity-sdk/runtime\";\nimport type { CelerityLayer, Type } from \"@celerity-sdk/types\";\nimport type { Container } from \"../di/container\";\nimport type { HandlerRegistry } from \"../handlers/registry\";\nimport { executeHandlerPipeline } from \"../handlers/pipeline\";\nimport { resolveHandlerByModuleRef } from \"../handlers/module-resolver\";\nimport { discoverModule } from \"./discovery\";\nimport { bootstrap } from \"./bootstrap\";\nimport { mapRuntimeRequest, mapToRuntimeResponse } from \"./runtime-mapper\";\nimport { createDefaultSystemLayers } from \"../layers/system\";\n\ntype RuntimeCallback = (err: Error | null, request: RuntimeRequest) => Promise<RuntimeResponse>;\n\nexport type RuntimeBootstrapResult = {\n registry: HandlerRegistry;\n container: Container;\n /** Create a runtime-compatible handler callback for a specific route. */\n createRouteCallback(path: string, method: string): RuntimeCallback | null;\n /**\n * Create a runtime-compatible handler callback by handler ID.\n * First tries a direct registry lookup. If that fails, resolves the handler ID\n * as a module reference by dynamically importing the module and matching the\n * exported function against the registry.\n *\n * Supported formats:\n * - `\"handlers.hello\"` — named export `hello` from module `handlers`\n * - `\"handlers\"` — default export from module `handlers`\n * - `\"app.module\"` — dotted module name: tries named export split first,\n * falls back to default export from module `app.module`\n */\n createRouteCallbackById(\n handlerId: string,\n codeLocation?: string,\n ): Promise<RuntimeCallback | null>;\n};\n\n/**\n * Bootstrap the user's module and return an object with per-route callback creation.\n * Used by the runtime host to get handler callbacks for each blueprint route.\n */\nexport async function bootstrapForRuntime(\n modulePath?: string,\n systemLayers?: (CelerityLayer | Type<CelerityLayer>)[],\n): Promise<RuntimeBootstrapResult> {\n // Resolve system layers first — triggers OTel SDK init before user module loads.\n const layers = systemLayers ?? (await createDefaultSystemLayers());\n\n const resolvedModulePath = modulePath ?? process.env.CELERITY_MODULE_PATH;\n const moduleDir = resolvedModulePath ? dirname(resolve(resolvedModulePath)) : process.cwd();\n\n const rootModule = await discoverModule(modulePath);\n const { container, registry } = await bootstrap(rootModule);\n\n function buildCallback(\n handler: ReturnType<HandlerRegistry[\"getHandler\"]>,\n ): RuntimeCallback | null {\n if (!handler) return null;\n\n return async (_err: Error | null, request: RuntimeRequest): Promise<RuntimeResponse> => {\n const httpRequest = mapRuntimeRequest(request);\n const httpResponse = await executeHandlerPipeline(handler, httpRequest, {\n container,\n systemLayers: layers,\n });\n return mapToRuntimeResponse(httpResponse);\n };\n }\n\n return {\n registry,\n container,\n createRouteCallback(path: string, method: string) {\n return buildCallback(registry.getHandler(path, method));\n },\n async createRouteCallbackById(handlerId: string, codeLocation?: string) {\n const fromRegistry = registry.getHandlerById(handlerId);\n if (fromRegistry) return buildCallback(fromRegistry);\n\n const baseDir = codeLocation ? resolve(codeLocation) : moduleDir;\n const resolved = await resolveHandlerByModuleRef(handlerId, registry, baseDir);\n return resolved ? buildCallback(resolved) : null;\n },\n };\n}\n","import type {\n CoreRuntimeApplication as CoreRuntimeApplicationType,\n CoreRuntimeAppConfig,\n CoreRuntimeConfig,\n} from \"@celerity-sdk/runtime\";\nimport { bootstrapForRuntime } from \"./runtime-entry\";\n\nexport type StartRuntimeOptions = {\n block?: boolean;\n};\n\n/**\n * Full runtime lifecycle orchestrator.\n * Dynamically imports @celerity-sdk/runtime, loads config from CELERITY_* environment\n * variables, bootstraps the user's module, registers handler callbacks, and starts the server.\n */\nexport async function startRuntime(options?: StartRuntimeOptions): Promise<void> {\n // Dynamic import — @celerity-sdk/runtime is an optional peer dependency.\n const pkg = \"@celerity-sdk/runtime\";\n const runtimeModule = (await import(pkg)) as {\n CoreRuntimeApplication: new (config: CoreRuntimeConfig) => CoreRuntimeApplicationType;\n runtimeConfigFromEnv: () => CoreRuntimeConfig;\n };\n\n const config = runtimeModule.runtimeConfigFromEnv();\n const app = new runtimeModule.CoreRuntimeApplication(config);\n\n const appConfig: CoreRuntimeAppConfig = app.setup();\n\n const result = await bootstrapForRuntime();\n\n for (const def of appConfig.api?.http?.handlers ?? []) {\n const callback =\n result.createRouteCallback(def.path, def.method) ??\n (await result.createRouteCallbackById(def.handler, def.location));\n if (callback) {\n app.registerHttpHandler(def.path, def.method, def.timeout, callback);\n }\n }\n\n await app.run(options?.block ?? true);\n}\n"],"mappings":"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","names":["import_reflect_metadata","CONTROLLER_METADATA","Symbol","HTTP_METHOD_METADATA","ROUTE_PATH_METADATA","PARAM_METADATA","GUARD_PROTECTEDBY_METADATA","GUARD_CUSTOM_METADATA","LAYER_METADATA","MODULE_METADATA","INJECTABLE_METADATA","INJECT_METADATA","PUBLIC_METADATA","CUSTOM_METADATA","Controller","prefix","target","metadata","undefined","Reflect","defineMetadata","CONTROLLER_METADATA","INJECTABLE_METADATA","import_reflect_metadata","createMethodDecorator","method","path","target","propertyKey","descriptor","Reflect","defineMetadata","HTTP_METHOD_METADATA","ROUTE_PATH_METADATA","Get","Post","Put","Patch","Delete","Head","Options","import_reflect_metadata","createParamDecorator","type","keyOrSchema","schema","target","propertyKey","parameterIndex","existing","Reflect","getOwnMetadata","PARAM_METADATA","meta","index","key","push","defineMetadata","Body","Query","Param","Headers","Auth","Req","Cookies","RequestId","extractParam","request","textBody","JSON","parse","query","pathParams","headers","auth","cookies","requestId","import_reflect_metadata","Guard","name","target","Reflect","defineMetadata","GUARD_CUSTOM_METADATA","ProtectedBy","propertyKey","_descriptor","existing","getOwnMetadata","GUARD_PROTECTEDBY_METADATA","Public","descriptor","PUBLIC_METADATA","import_reflect_metadata","UseLayer","layers","target","propertyKey","_descriptor","existing","Reflect","getOwnMetadata","LAYER_METADATA","defineMetadata","UseLayers","import_reflect_metadata","SetMetadata","key","value","target","propertyKey","_descriptor","existing","Reflect","getOwnMetadata","CUSTOM_METADATA","defineMetadata","Action","import_reflect_metadata","Injectable","target","Reflect","defineMetadata","INJECTABLE_METADATA","Inject","token","_propertyKey","parameterIndex","existing","getOwnMetadata","INJECT_METADATA","Map","set","import_reflect_metadata","Module","metadata","target","Reflect","defineMetadata","MODULE_METADATA","HttpException","Error","statusCode","message","details","name","BadRequestException","UnauthorizedException","ForbiddenException","NotFoundException","MethodNotAllowedException","NotAcceptableException","ConflictException","GoneException","UnprocessableEntityException","TooManyRequestsException","InternalServerErrorException","NotImplementedException","BadGatewayException","ServiceUnavailableException","GatewayTimeoutException","ValidationLayer","schemas","handle","context","next","request","body","textBody","raw","JSON","parse","metadata","set","error","BadRequestException","formatError","params","pathParams","query","headers","Error","issues","message","validate","debug","createDebug","runLayerPipeline","layers","context","handler","resolved","map","layer","length","index","dispatch","i","Promise","reject","Error","current","name","handle","createDefaultSystemLayers","layers","pkg","mod","TelemetryLayerClass","TelemetryLayer","push","ConfigLayer","disposeLayers","layers","layer","reverse","dispose","HandlerMetadataStore","decoratorData","requestData","Map","decoratorMetadata","Object","entries","get","key","has","set","value","import_reflect_metadata","import_debug","import_reflect_metadata","isClassProvider","p","isFactoryProvider","getClassDependencyTokens","target","paramTypes","Reflect","getMetadata","injectOverrides","INJECT_METADATA","Map","map","paramType","index","get","getProviderDependencyTokens","provider","useClass","inject","debug","createDebug","CLOSE_METHODS","isClassProvider","p","isFactoryProvider","isValueProvider","tokenToString","token","name","String","detectCloseMethod","value","obj","method","Container","providers","Map","instances","resolving","Set","edges","closeStack","trackedTokens","register","provider","type","set","trackCloseable","useValue","onClose","registerClass","target","useClass","registerValue","resolve","has","get","path","map","join","Error","add","constructClass","inject","recordEdges","instance","createFromProvider","delete","resolveClass","getDependencies","closeAll","length","entries","reverse","entry","close","clear","validateDependencies","missing","visited","walk","depTokens","getProviderDependencyTokens","getClassDependencyTokens","dep","push","consumer","dependency","keys","details","isInjectable","Reflect","getOwnMetadata","INJECTABLE_METADATA","deps","t","from","to","closeFn","Promise","all","useFactory","APP_CONFIG","Symbol","RUNTIME_APP","import_debug","import_reflect_metadata","import_debug","import_reflect_metadata","import_debug","import_reflect_metadata","import_debug","debug","createDebug","buildModuleGraph","rootModule","graph","Map","resolving","Set","walk","moduleClass","importChain","has","name","cyclePath","map","m","join","Error","add","metadata","Reflect","getOwnMetadata","MODULE_METADATA","delete","set","ownTokens","exports","imports","controllers","functionHandlers","providers","imported","provider","typed","provide","controller","exportTokens","length","registerModuleGraph","container","node","registerClass","register","walkModuleGraph","validateModuleGraph","diagnostics","exportToken","push","type","message","tokenToString","visibleTokens","importedModule","importedNode","get","exportedToken","depTokens","consumerToken","getClassDependencyTokens","getProviderDependencyTokens","checkDependencies","size","details","d","consumer","dep","ownerModule","findTokenOwner","ownerNode","adoptedDeps","token","debug","createDebug","HandlerRegistry","handlers","getHandler","path","method","found","find","h","undefined","matchRoute","getHandlerById","id","getAllHandlers","populateFromGraph","graph","container","node","controllerClass","controllers","registerClassHandler","fnHandler","functionHandlers","registerFunctionHandler","scanModule","moduleClass","buildModuleGraph","registerModuleGraph","controllerMeta","Reflect","getOwnMetadata","CONTROLLER_METADATA","instance","resolve","prototype","Object","getPrototypeOf","methods","getOwnPropertyNames","filter","name","classProtectedBy","GUARD_PROTECTEDBY_METADATA","classLayers","LAYER_METADATA","classCustomMetadata","CUSTOM_METADATA","methodName","HTTP_METHOD_METADATA","routePath","ROUTE_PATH_METADATA","fullPath","joinHandlerPath","prefix","methodProtectedBy","methodLayers","paramMetadata","PARAM_METADATA","isPublic","PUBLIC_METADATA","methodCustomMetadata","descriptor","getOwnPropertyDescriptor","value","layers","validationSchemas","buildValidationSchemasFromParams","unshift","validate","push","protectedBy","customMetadata","handlerFn","handlerInstance","definition","type","meta","metadata","schema","schemas","body","query","params","headers","keys","length","handler","isFunctionHandler","injectTokens","inject","pattern","actual","patternParts","split","Boolean","actualParts","every","part","i","startsWith","PARAM_TYPE_TO_SCHEMA_KEY","param","wholeObjectSchemas","Map","perKeySchemas","schemaKey","key","keyMap","get","set","hasSchemas","has","composeKeySchemas","keySchemas","parse","data","record","result","debug","createDebug","bootstrap","rootModule","name","container","Container","registry","HandlerRegistry","graph","walkModuleGraph","validateModuleGraph","populateFromGraph","size","getAllHandlers","length","import_debug","debug","createDebug","CelerityApplication","registry","container","systemLayers","appLayers","runtimeApp","start","app","run","close","shutdown","closeAll","disposeLayers","getContainer","getRegistry","getSystemLayers","getAppLayers","ServerlessApplication","handler","registry","container","adapter","systemLayers","appLayers","start","createHandler","close","closeAll","disposeLayers","getHandler","Error","getContainer","getRegistry","import_debug","buildHttpRequest","request","metadata","validatedBody","get","body","undefined","binaryBody","textBody","JSON","parse","method","path","params","pathParams","query","headers","cookies","auth","clientIp","userAgent","contentType","buildHttpContext","container","logger","requestId","requestTime","raw","debug","createDebug","executeHandlerPipeline","handler","request","options","context","metadata","HandlerMetadataStore","customMetadata","container","allLayers","systemLayers","appLayers","layers","method","path","length","response","runLayerPipeline","handlerType","isFunctionHandler","result","invokeFunctionHandler","invokeClassHandler","normalizeResponse","status","error","HttpException","statusCode","message","headers","body","JSON","stringify","details","Error","String","logger","stack","console","args","sorted","paramMetadata","sort","a","b","index","meta","extractValidatedParam","type","key","handlerFn","apply","handlerInstance","VALIDATED_METADATA_KEYS","query","param","metaKey","validated","get","undefined","extractParam","req","buildHttpRequest","ctx","buildHttpContext","injectTokens","deps","token","push","resolve","isHttpResponse","value","TestingApplication","registry","container","systemLayers","appLayers","inject","request","handler","getHandler","path","method","NotFoundException","executeHandlerPipeline","getContainer","getRegistry","mockRequest","options","pathParams","query","headers","cookies","textBody","body","undefined","JSON","stringify","binaryBody","contentType","requestId","requestTime","Date","toISOString","auth","clientIp","traceContext","userAgent","matchedRoute","debug","createDebug","CelerityFactory","create","rootModule","options","name","systemLayers","createDefaultSystemLayers","appLayers","layers","length","container","registry","bootstrap","adapter","ServerlessApplication","CelerityApplication","createTestingApp","TestingApplication","createHttpHandler","config","handler","metadata","schema","layers","inject","customMetadata","path","undefined","method","__celerity_handler","type","httpGet","handlerOrOptions","maybeHandler","httpPost","httpPut","httpPatch","httpDelete","import_debug","debug","createDebug","resolveHandlerByModuleRef","handlerId","registry","baseDir","lastDot","lastIndexOf","moduleName","slice","exportName","result","tryResolveExport","handlerModulePath","resolve","mod","exported","isFnDef","__celerity_handler","handlerFn","handler","match","getAllHandlers","find","h","id","buildResolvedFromExport","fnDef","meta","metadata","protectedBy","layers","isPublic","paramMetadata","customMetadata","isFunctionHandler","injectTokens","inject","import_node_path","import_debug","debug","createDebug","discoverModule","modulePath","resolved","process","env","CELERITY_MODULE_PATH","Error","absolutePath","resolve","imported","rootModule","default","findModuleExport","name","key","Object","keys","undefined","flattenMultiValueRecord","record","result","key","values","Object","entries","length","mapRuntimeRequest","request","method","toUpperCase","path","pathParams","query","headers","cookies","textBody","binaryBody","contentType","requestId","requestTime","auth","clientIp","traceContext","userAgent","matchedRoute","mapToRuntimeResponse","response","status","body","import_node_path","bootstrapForRuntime","modulePath","systemLayers","layers","createDefaultSystemLayers","resolvedModulePath","process","env","CELERITY_MODULE_PATH","moduleDir","dirname","resolve","cwd","rootModule","discoverModule","container","registry","bootstrap","buildCallback","handler","_err","request","httpRequest","mapRuntimeRequest","httpResponse","executeHandlerPipeline","mapToRuntimeResponse","createRouteCallback","path","method","getHandler","createRouteCallbackById","handlerId","codeLocation","fromRegistry","getHandlerById","baseDir","resolved","resolveHandlerByModuleRef","startRuntime","options","pkg","runtimeModule","config","runtimeConfigFromEnv","app","CoreRuntimeApplication","appConfig","setup","result","bootstrapForRuntime","def","api","http","handlers","callback","createRouteCallback","path","method","createRouteCallbackById","handler","location","registerHttpHandler","timeout","run","block"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/decorators/controller.ts","../src/metadata/constants.ts","../src/decorators/http.ts","../src/decorators/params.ts","../src/decorators/guards.ts","../src/decorators/layer.ts","../src/decorators/resource.ts","../src/decorators/metadata.ts","../src/decorators/injectable.ts","../src/decorators/module.ts","../src/decorators/websocket.ts","../src/decorators/websocket-params.ts","../src/decorators/consumer.ts","../src/decorators/consumer-params.ts","../src/decorators/schedule.ts","../src/decorators/schedule-params.ts","../src/decorators/invoke.ts","../src/decorators/invoke-params.ts","../src/errors/http-exception.ts","../src/layers/validate.ts","../src/layers/pipeline.ts","../src/layers/system.ts","../src/layers/dispose.ts","../src/metadata/handler-metadata.ts","../src/di/container.ts","../src/di/dependency-tokens.ts","../src/di/tokens.ts","../src/application/factory.ts","../src/bootstrap/bootstrap.ts","../src/handlers/registry.ts","../src/handlers/routing.ts","../src/bootstrap/module-graph.ts","../src/handlers/scanners/http.ts","../src/handlers/scanners/websocket.ts","../src/handlers/scanners/consumer.ts","../src/handlers/scanners/schedule.ts","../src/handlers/scanners/custom.ts","../src/application/application.ts","../src/application/serverless.ts","../src/handlers/http-pipeline.ts","../src/functions/context.ts","../src/handlers/websocket-pipeline.ts","../src/handlers/consumer-pipeline.ts","../src/handlers/schedule-pipeline.ts","../src/handlers/custom-pipeline.ts","../src/testing/test-app.ts","../src/functions/create-handler.ts","../src/functions/create-guard.ts","../src/functions/create-websocket-handler.ts","../src/functions/create-consumer-handler.ts","../src/functions/create-schedule-handler.ts","../src/functions/create-custom-handler.ts","../src/handlers/module-resolver.ts","../src/handlers/websocket-sender.ts","../src/handlers/guard-pipeline.ts","../src/bootstrap/discovery.ts","../src/bootstrap/runtime-mapper.ts","../src/bootstrap/runtime-entry.ts","../src/bootstrap/runtime-orchestrator.ts"],"sourcesContent":["import \"reflect-metadata\";\n\n// Decorators\nexport { Controller } from \"./decorators/controller\";\nexport { Get, Post, Put, Patch, Delete, Head, Options } from \"./decorators/http\";\nexport {\n Body,\n Query,\n Param,\n Headers,\n Auth,\n Token,\n Req,\n Cookies,\n RequestId,\n} from \"./decorators/params\";\nexport { Guard, ProtectedBy, Public } from \"./decorators/guards\";\nexport { UseLayer, UseLayers } from \"./decorators/layer\";\nexport { UseResource, UseResources } from \"./decorators/resource\";\nexport { SetMetadata, Action } from \"./decorators/metadata\";\nexport { Injectable, Inject } from \"./decorators/injectable\";\nexport { Module } from \"./decorators/module\";\nexport { WebSocketController, OnConnect, OnMessage, OnDisconnect } from \"./decorators/websocket\";\nexport {\n ConnectionId,\n MessageBody,\n MessageId,\n RequestContext,\n EventType,\n} from \"./decorators/websocket-params\";\nexport { Consumer, MessageHandler } from \"./decorators/consumer\";\nexport { Messages, EventInput, Vendor, ConsumerTraceContext } from \"./decorators/consumer-params\";\nexport { ScheduleHandler } from \"./decorators/schedule\";\nexport {\n ScheduleInput,\n ScheduleId,\n ScheduleExpression,\n ScheduleEventInput as ScheduleEventInputParam,\n} from \"./decorators/schedule-params\";\nexport { Invoke } from \"./decorators/invoke\";\nexport { Payload, InvokeContext } from \"./decorators/invoke-params\";\n\n// Layers\nexport { validate } from \"./layers/validate\";\nexport { runLayerPipeline } from \"./layers/pipeline\";\nexport { createDefaultSystemLayers } from \"./layers/system\";\nexport { disposeLayers } from \"./layers/dispose\";\n\n// Metadata\nexport { HandlerMetadataStore } from \"./metadata/handler-metadata\";\n\n// DI\nexport { Container, tokenToString } from \"./di/container\";\nexport { getClassDependencyTokens, getProviderDependencyTokens } from \"./di/dependency-tokens\";\nexport { APP_CONFIG, RUNTIME_APP } from \"./di/tokens\";\n\n// Application\nexport { CelerityFactory } from \"./application/factory\";\nexport { CelerityApplication } from \"./application/application\";\nexport { ServerlessApplication } from \"./application/serverless\";\n\n// Functions\nexport {\n createHttpHandler,\n httpGet,\n httpPost,\n httpPut,\n httpPatch,\n httpDelete,\n} from \"./functions/create-handler\";\nexport { createGuard } from \"./functions/create-guard\";\nexport { createWebSocketHandler } from \"./functions/create-websocket-handler\";\nexport { createConsumerHandler } from \"./functions/create-consumer-handler\";\nexport { createScheduleHandler } from \"./functions/create-schedule-handler\";\nexport { createCustomHandler } from \"./functions/create-custom-handler\";\n\n// Errors\nexport {\n HttpException,\n BadRequestException,\n UnauthorizedException,\n ForbiddenException,\n NotFoundException,\n MethodNotAllowedException,\n NotAcceptableException,\n ConflictException,\n GoneException,\n UnprocessableEntityException,\n TooManyRequestsException,\n InternalServerErrorException,\n NotImplementedException,\n BadGatewayException,\n ServiceUnavailableException,\n GatewayTimeoutException,\n} from \"./errors/http-exception\";\n\n// Testing\nexport {\n TestingApplication,\n mockRequest,\n mockWebSocketMessage,\n mockConsumerEvent,\n mockScheduleEvent,\n} from \"./testing/test-app\";\n\n// Handler registry and resolution\nexport { HandlerRegistry } from \"./handlers/registry\";\nexport { routingKeyOf } from \"./handlers/routing\";\nexport { resolveHandlerByModuleRef } from \"./handlers/module-resolver\";\nexport { scanHttpHandlers, scanHttpGuards, scanModule } from \"./handlers/scanners/http\";\nexport { scanWebSocketHandlers } from \"./handlers/scanners/websocket\";\nexport { scanConsumerHandlers } from \"./handlers/scanners/consumer\";\nexport { scanScheduleHandlers } from \"./handlers/scanners/schedule\";\nexport { scanCustomHandlers } from \"./handlers/scanners/custom\";\n\n// HTTP pipeline\nexport { executeHttpPipeline } from \"./handlers/http-pipeline\";\n\n// WebSocket pipeline + sender\nexport { executeWebSocketPipeline } from \"./handlers/websocket-pipeline\";\nexport { RuntimeWebSocketSender } from \"./handlers/websocket-sender\";\n\n// Consumer pipeline\nexport { executeConsumerPipeline } from \"./handlers/consumer-pipeline\";\n\n// Schedule pipeline\nexport { executeSchedulePipeline } from \"./handlers/schedule-pipeline\";\n\n// Custom pipeline\nexport { executeCustomPipeline } from \"./handlers/custom-pipeline\";\n\n// Guard pipeline\nexport { executeGuardPipeline } from \"./handlers/guard-pipeline\";\n\n// Metadata constants (used by extraction tools)\nexport {\n CONTROLLER_METADATA,\n HTTP_METHOD_METADATA,\n ROUTE_PATH_METADATA,\n GUARD_PROTECTEDBY_METADATA,\n GUARD_CUSTOM_METADATA,\n PUBLIC_METADATA,\n MODULE_METADATA,\n LAYER_METADATA,\n CUSTOM_METADATA,\n INJECT_METADATA,\n WEBSOCKET_CONTROLLER_METADATA,\n WEBSOCKET_EVENT_METADATA,\n CONSUMER_METADATA,\n CONSUMER_HANDLER_METADATA,\n SCHEDULE_HANDLER_METADATA,\n INVOKE_METADATA,\n USE_RESOURCE_METADATA,\n} from \"./metadata/constants\";\n\n// Bootstrap\nexport { bootstrap, discoverModule } from \"./bootstrap/index\";\nexport { buildModuleGraph, registerModuleGraph } from \"./bootstrap/index\";\nexport { bootstrapForRuntime } from \"./bootstrap/index\";\nexport { startRuntime } from \"./bootstrap/index\";\nexport {\n mapRuntimeRequest,\n mapToRuntimeResponse,\n mapWebSocketMessage,\n mapConsumerEventInput,\n mapScheduleEventInput,\n mapToNapiEventResult,\n flattenMultiValueRecord,\n} from \"./bootstrap/index\";\n\n// Adapter interfaces\nexport type { ServerlessAdapter, ServerlessHandler } from \"./adapters/interfaces\";\n\n// Re-export key types from @celerity-sdk/types\nexport type {\n Type,\n InjectionToken,\n Provider,\n HttpMethod,\n HttpRequest,\n HttpResponse,\n HandlerMetadata,\n BaseHandlerContext,\n HttpHandlerContext,\n HandlerResponse,\n NextFunction,\n CelerityLayer,\n Schema,\n ModuleMetadata,\n FunctionHandlerDefinition,\n ServiceContainer,\n GuardDefinition,\n GuardHandlerContext,\n GuardHandlerRequest,\n CelerityLogger,\n WebSocketEventType,\n WebSocketMessageType,\n WebSocketMessage,\n WebSocketRequestContext,\n WebSocketHandlerContext,\n WebSocketSendOptions,\n ConsumerMessage,\n ConsumerEventInput,\n ConsumerHandlerContext,\n MessageProcessingFailure,\n EventResult,\n ValidatedConsumerMessage,\n ScheduleEventInput,\n ScheduleHandlerContext,\n BucketEvent,\n DatastoreEvent,\n} from \"@celerity-sdk/types\";\n\n// WebSocketSender is both a type (interface) and a value (DI token symbol).\nexport { WebSocketSender } from \"@celerity-sdk/types\";\n\n// Consumer event contract constants\nexport { SourceType, BucketEventType, DatastoreEventType } from \"@celerity-sdk/types\";\n\n// Re-export types defined in core\nexport type { ControllerMetadata } from \"./decorators/controller\";\nexport type { ParamType, ParamMetadata } from \"./decorators/params\";\nexport type { PipelineOptions } from \"./handlers/http-pipeline\";\nexport type {\n HandlerType,\n ResolvedHandlerBase,\n ResolvedHttpHandler,\n ResolvedHandler,\n ResolvedWebSocketHandler,\n ResolvedConsumerHandler,\n ResolvedScheduleHandler,\n ResolvedCustomHandler,\n} from \"./handlers/types\";\nexport type { HttpHandlerRequest, HttpFunctionContext } from \"./functions/context\";\nexport type { HttpHandlerConfig } from \"./functions/create-handler\";\nexport type {\n GuardConfig,\n GuardHandlerFn,\n GuardRequest,\n GuardContext,\n} from \"./functions/create-guard\";\nexport type { ResolvedGuard } from \"./handlers/types\";\nexport type { GuardInput, GuardResult, GuardPipelineOptions } from \"./handlers/guard-pipeline\";\nexport type { ValidationSchemas } from \"./layers/validate\";\nexport type { CreateOptions } from \"./application/factory\";\nexport type {\n MockRequestOptions,\n MockWebSocketMessageOptions,\n MockConsumerMessage,\n MockConsumerEventOptions,\n MockScheduleEventOptions,\n} from \"./testing/test-app\";\nexport type { BootstrapResult } from \"./bootstrap/index\";\nexport type { RuntimeBootstrapResult } from \"./bootstrap/index\";\nexport type { ModuleNode, ModuleGraph } from \"./bootstrap/index\";\nexport type { StartRuntimeOptions } from \"./bootstrap/runtime-orchestrator\";\nexport type { WebSocketEventMetadata } from \"./decorators/websocket\";\nexport type { WebSocketHandlerConfig } from \"./functions/create-websocket-handler\";\nexport type { WebSocketPipelineOptions } from \"./handlers/websocket-pipeline\";\nexport type { CoreWebSocketRegistry } from \"./handlers/websocket-sender\";\nexport type {\n JsWebSocketMessageInfo,\n JsConsumerEventInput,\n JsScheduleEventInput,\n JsEventResult,\n} from \"./bootstrap/index\";\nexport type { ConsumerMetadata, ConsumerHandlerMetadata } from \"./decorators/consumer\";\nexport type { ConsumerHandlerConfig } from \"./functions/create-consumer-handler\";\nexport type { ConsumerPipelineOptions } from \"./handlers/consumer-pipeline\";\nexport type { ScheduleHandlerMetadata } from \"./decorators/schedule\";\nexport type { ScheduleHandlerConfig } from \"./functions/create-schedule-handler\";\nexport type { SchedulePipelineOptions } from \"./handlers/schedule-pipeline\";\nexport type { InvokeMetadata } from \"./decorators/invoke\";\nexport type { CustomHandlerConfig } from \"./functions/create-custom-handler\";\nexport type { CustomPipelineOptions } from \"./handlers/custom-pipeline\";\n","import \"reflect-metadata\";\nimport { CONTROLLER_METADATA, INJECTABLE_METADATA } from \"../metadata/constants\";\n\nexport type ControllerMetadata = {\n prefix?: string;\n};\n\n/**\n * Marks a class as a controller — the general-purpose class decorator for\n * handler classes. The class becomes injectable and its decorated methods are\n * registered as handler callbacks. A single controller can mix handler types:\n *\n * - **HTTP handlers** — `@Get()`, `@Post()`, `@Put()`, `@Patch()`, `@Delete()`,\n * `@Head()`, `@Options()` method decorators define HTTP routes.\n * - **Schedule handlers** — `@ScheduleHandler()` is a cross-cutting method\n * decorator that works on any controller type, including `@Controller`.\n * - **Custom / invocable handlers** — `@Invoke(\"name\")` registers a method as\n * a programmatically invocable endpoint.\n *\n * @param prefix - Optional path prefix prepended to all HTTP route paths\n * defined by method decorators within this controller. Uses `{param}` format\n * for path parameters (matching blueprint conventions, not Express `:param`).\n * Has no effect on schedule or invocable handler methods.\n *\n * @example\n * ```ts\n * // HTTP controller\n * @Controller(\"/users\")\n * class UserController {\n * @Get(\"/{id}\")\n * async getUser(@Param(\"id\") id: string): Promise<HandlerResponse> { ... }\n * }\n *\n * // Schedule-only controller\n * @Controller()\n * class MaintenanceTasks {\n * @ScheduleHandler(\"daily-cleanup\")\n * async cleanup(): Promise<EventResult> { ... }\n * }\n *\n * // Mixed: HTTP routes + scheduled tasks + invocable methods\n * @Controller(\"/admin\")\n * class AdminController {\n * @Get(\"/reports\")\n * async listReports(): Promise<HandlerResponse> { ... }\n *\n * @ScheduleHandler(\"weekly-report\")\n * async generateWeeklyReport(): Promise<EventResult> { ... }\n *\n * @Invoke(\"reprocessOrders\")\n * async reprocess(@Payload() payload: unknown): Promise<unknown> { ... }\n * }\n * ```\n */\nexport function Controller(prefix?: string): ClassDecorator {\n return (target) => {\n const metadata: ControllerMetadata = {};\n if (prefix !== undefined) {\n metadata.prefix = prefix;\n }\n Reflect.defineMetadata(CONTROLLER_METADATA, metadata, target);\n Reflect.defineMetadata(INJECTABLE_METADATA, true, target);\n };\n}\n","export { INJECT_METADATA, USE_RESOURCE_METADATA } from \"@celerity-sdk/common\";\n\nexport const CONTROLLER_METADATA = Symbol.for(\"celerity:controller\");\nexport const HTTP_METHOD_METADATA = Symbol.for(\"celerity:http-method\");\nexport const ROUTE_PATH_METADATA = Symbol.for(\"celerity:route-path\");\nexport const PARAM_METADATA = Symbol.for(\"celerity:param\");\nexport const GUARD_PROTECTEDBY_METADATA = Symbol.for(\"celerity:guard:protectedBy\");\nexport const GUARD_CUSTOM_METADATA = Symbol.for(\"celerity:guard:custom\");\nexport const LAYER_METADATA = Symbol.for(\"celerity:layer\");\nexport const MODULE_METADATA = Symbol.for(\"celerity:module\");\nexport const INJECTABLE_METADATA = Symbol.for(\"celerity:injectable\");\nexport const PUBLIC_METADATA = Symbol.for(\"celerity:public\");\nexport const CUSTOM_METADATA = Symbol.for(\"celerity:custom-metadata\");\nexport const WEBSOCKET_CONTROLLER_METADATA = Symbol.for(\"celerity:websocket-controller\");\nexport const WEBSOCKET_EVENT_METADATA = Symbol.for(\"celerity:websocket-event\");\nexport const CONSUMER_METADATA = Symbol.for(\"celerity:consumer\");\nexport const CONSUMER_HANDLER_METADATA = Symbol.for(\"celerity:consumer-handler\");\nexport const SCHEDULE_HANDLER_METADATA = Symbol.for(\"celerity:schedule-handler\");\nexport const INVOKE_METADATA = Symbol.for(\"celerity:invoke\");\n","import \"reflect-metadata\";\nimport type { HttpMethod } from \"@celerity-sdk/types\";\nimport { HTTP_METHOD_METADATA, ROUTE_PATH_METADATA } from \"../metadata/constants\";\n\nfunction createMethodDecorator(method: HttpMethod, path = \"/\"): MethodDecorator {\n return (target, propertyKey, descriptor) => {\n Reflect.defineMetadata(HTTP_METHOD_METADATA, method, target, propertyKey);\n Reflect.defineMetadata(ROUTE_PATH_METADATA, path, target, propertyKey);\n return descriptor;\n };\n}\n\n/**\n * Registers an HTTP GET handler. The method should return `HandlerResponse`.\n *\n * @param path - Route path relative to the controller prefix. Defaults to `/`.\n * Uses `{param}` format for path parameters.\n */\nexport function Get(path?: string): MethodDecorator {\n return createMethodDecorator(\"GET\", path);\n}\n\n/**\n * Registers an HTTP POST handler.\n *\n * @param path - Route path relative to the controller prefix. Defaults to `/`.\n */\nexport function Post(path?: string): MethodDecorator {\n return createMethodDecorator(\"POST\", path);\n}\n\n/**\n * Registers an HTTP PUT handler.\n *\n * @param path - Route path relative to the controller prefix. Defaults to `/`.\n */\nexport function Put(path?: string): MethodDecorator {\n return createMethodDecorator(\"PUT\", path);\n}\n\n/**\n * Registers an HTTP PATCH handler.\n *\n * @param path - Route path relative to the controller prefix. Defaults to `/`.\n */\nexport function Patch(path?: string): MethodDecorator {\n return createMethodDecorator(\"PATCH\", path);\n}\n\n/**\n * Registers an HTTP DELETE handler.\n *\n * @param path - Route path relative to the controller prefix. Defaults to `/`.\n */\nexport function Delete(path?: string): MethodDecorator {\n return createMethodDecorator(\"DELETE\", path);\n}\n\n/**\n * Registers an HTTP HEAD handler.\n *\n * @param path - Route path relative to the controller prefix. Defaults to `/`.\n */\nexport function Head(path?: string): MethodDecorator {\n return createMethodDecorator(\"HEAD\", path);\n}\n\n/**\n * Registers an HTTP OPTIONS handler.\n *\n * @param path - Route path relative to the controller prefix. Defaults to `/`.\n */\nexport function Options(path?: string): MethodDecorator {\n return createMethodDecorator(\"OPTIONS\", path);\n}\n","import \"reflect-metadata\";\nimport type { HttpRequest, Schema } from \"@celerity-sdk/types\";\nimport { PARAM_METADATA } from \"../metadata/constants\";\n\nexport type ParamType =\n | \"body\"\n | \"query\"\n | \"param\"\n | \"headers\"\n | \"auth\"\n | \"token\"\n | \"request\"\n | \"cookies\"\n | \"requestId\"\n // WebSocket\n | \"connectionId\"\n | \"messageBody\"\n | \"messageId\"\n | \"requestContext\"\n | \"eventType\"\n // Consumer\n | \"messages\"\n | \"consumerEvent\"\n | \"consumerVendor\"\n | \"consumerTraceContext\"\n // Schedule\n | \"scheduleInput\"\n | \"scheduleId\"\n | \"scheduleExpression\"\n | \"scheduleEvent\"\n // Custom / Invocable\n | \"payload\"\n | \"invokeContext\";\n\nexport type ParamMetadata = {\n index: number;\n type: ParamType;\n key?: string;\n schema?: Schema;\n};\n\nfunction createParamDecorator(\n type: ParamType,\n keyOrSchema?: string | Schema,\n schema?: Schema,\n): ParameterDecorator {\n return (target, propertyKey, parameterIndex) => {\n if (!propertyKey) return;\n\n const existing: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, target, propertyKey) ?? [];\n\n const meta: ParamMetadata = { index: parameterIndex, type };\n\n if (typeof keyOrSchema === \"string\") {\n meta.key = keyOrSchema;\n if (schema) meta.schema = schema;\n } else if (keyOrSchema && typeof keyOrSchema === \"object\") {\n meta.schema = keyOrSchema;\n }\n\n existing.push(meta);\n Reflect.defineMetadata(PARAM_METADATA, existing, target, propertyKey);\n };\n}\n\n/**\n * Injects the parsed JSON request body into a handler parameter.\n * The raw `textBody` is JSON-parsed automatically; returns `null` if empty.\n *\n * @param schema - Optional Zod-compatible schema (`{ parse(data): T }`) for\n * body validation. When provided, the parsed body is passed through\n * `schema.parse()` before injection.\n */\nexport function Body(schema?: Schema): ParameterDecorator {\n return createParamDecorator(\"body\", schema);\n}\n\n/**\n * Injects query string parameters into a handler parameter.\n *\n * - `@Query()` — injects the full query object (`Record<string, string | string[]>`)\n * - `@Query(\"key\")` — injects a single query parameter value\n * - `@Query(schema)` — injects the full query object, validated through `schema.parse()`\n * - `@Query(\"key\", schema)` — injects a single value, validated through `schema.parse()`\n */\nexport function Query(): ParameterDecorator;\nexport function Query(key: string): ParameterDecorator;\nexport function Query(schema: Schema): ParameterDecorator;\nexport function Query(key: string, schema: Schema): ParameterDecorator;\nexport function Query(keyOrSchema?: string | Schema, schema?: Schema): ParameterDecorator {\n return createParamDecorator(\"query\", keyOrSchema, schema);\n}\n\n/**\n * Injects path parameters into a handler parameter. Path params use `{param}`\n * format in route definitions (matching blueprint conventions).\n *\n * - `@Param()` — injects the full path params object (`Record<string, string>`)\n * - `@Param(\"id\")` — injects a single path parameter value\n * - `@Param(schema)` — injects the full params object, validated through `schema.parse()`\n * - `@Param(\"id\", schema)` — injects a single value, validated through `schema.parse()`\n */\nexport function Param(): ParameterDecorator;\nexport function Param(key: string): ParameterDecorator;\nexport function Param(schema: Schema): ParameterDecorator;\nexport function Param(key: string, schema: Schema): ParameterDecorator;\nexport function Param(keyOrSchema?: string | Schema, schema?: Schema): ParameterDecorator {\n return createParamDecorator(\"param\", keyOrSchema, schema);\n}\n\n/**\n * Injects request headers into a handler parameter.\n *\n * - `@Headers()` — injects the full headers object (`Record<string, string | string[]>`)\n * - `@Headers(\"content-type\")` — injects a single header value\n * - `@Headers(schema)` — injects the full headers object, validated through `schema.parse()`\n * - `@Headers(\"key\", schema)` — injects a single value, validated through `schema.parse()`\n */\nexport function Headers(): ParameterDecorator;\nexport function Headers(key: string): ParameterDecorator;\nexport function Headers(schema: Schema): ParameterDecorator;\nexport function Headers(key: string, schema: Schema): ParameterDecorator;\nexport function Headers(keyOrSchema?: string | Schema, schema?: Schema): ParameterDecorator {\n return createParamDecorator(\"headers\", keyOrSchema, schema);\n}\n\n/**\n * Injects the decoded auth payload from the request. This is the identity\n * object populated by guards (e.g. decoded JWT claims), or `null` if the\n * request is unauthenticated.\n */\nexport function Auth(): ParameterDecorator {\n return createParamDecorator(\"auth\");\n}\n\n/**\n * Injects the raw auth token string from the request (e.g. the Bearer token\n * from the Authorization header). This is the unprocessed token before guard\n * validation — use `@Auth()` for the decoded identity payload.\n */\nexport function Token(): ParameterDecorator {\n return createParamDecorator(\"token\");\n}\n\n/**\n * Injects the full `HttpRequest` object into a handler parameter. Use this\n * when you need access to the entire request beyond what individual param\n * decorators provide.\n */\nexport function Req(): ParameterDecorator {\n return createParamDecorator(\"request\");\n}\n\n/**\n * Injects request cookies into a handler parameter.\n *\n * - `@Cookies()` — injects the full cookies object (`Record<string, string>`)\n * - `@Cookies(\"session\")` — injects a single cookie value\n */\nexport function Cookies(key?: string): ParameterDecorator {\n return createParamDecorator(\"cookies\", key);\n}\n\n/**\n * Injects the unique request ID assigned to this request by the runtime\n * or API Gateway.\n */\nexport function RequestId(): ParameterDecorator {\n return createParamDecorator(\"requestId\");\n}\n\nexport function extractParam(\n type: ParamType,\n key: string | undefined,\n request: HttpRequest,\n): unknown {\n switch (type) {\n case \"body\":\n return request.textBody ? JSON.parse(request.textBody) : null;\n case \"query\":\n return key ? request.query[key] : request.query;\n case \"param\":\n return key ? request.pathParams[key] : request.pathParams;\n case \"headers\":\n return key ? request.headers[key] : request.headers;\n case \"auth\":\n return request.auth;\n case \"request\":\n return request;\n case \"cookies\":\n return key ? request.cookies[key] : request.cookies;\n case \"requestId\":\n return request.requestId;\n }\n}\n","import \"reflect-metadata\";\nimport {\n GUARD_PROTECTEDBY_METADATA,\n GUARD_CUSTOM_METADATA,\n INJECTABLE_METADATA,\n PUBLIC_METADATA,\n} from \"../metadata/constants\";\n\n/**\n * Marks a class as a custom guard implementation.\n * The class must have a `check()` method that the runtime invokes before protected handlers.\n *\n * In serverless mode, the guard becomes a Lambda Authorizer.\n * In container mode, the Rust runtime invokes it via `registerGuardHandler`.\n *\n * Other handlers reference this guard via `@ProtectedBy(\"name\")`.\n */\nexport function Guard(name: string): ClassDecorator {\n return (target) => {\n Reflect.defineMetadata(GUARD_CUSTOM_METADATA, name, target);\n if (!Reflect.hasOwnMetadata(INJECTABLE_METADATA, target)) {\n Reflect.defineMetadata(INJECTABLE_METADATA, true, target);\n }\n };\n}\n\n/**\n * Declares that a handler or method is protected by one or more named guards.\n * Multiple `@ProtectedBy` decorators accumulate in declaration order (top-to-bottom).\n *\n * Can be applied at class level (all methods) or method level.\n */\nexport function ProtectedBy(name: string) {\n return (\n target: object,\n propertyKey?: string | symbol,\n _descriptor?: PropertyDescriptor,\n ): void => {\n if (propertyKey) {\n const existing: string[] =\n Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, target, propertyKey) ?? [];\n // Prepend: decorators apply bottom-up, so prepending gives declaration order\n Reflect.defineMetadata(GUARD_PROTECTEDBY_METADATA, [name, ...existing], target, propertyKey);\n } else {\n const existing: string[] = Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, target) ?? [];\n Reflect.defineMetadata(GUARD_PROTECTEDBY_METADATA, [name, ...existing], target);\n }\n };\n}\n\n/**\n * Marks a method as public, opting out of the default guard.\n */\nexport function Public(): MethodDecorator {\n return (target, propertyKey, descriptor) => {\n Reflect.defineMetadata(PUBLIC_METADATA, true, target, propertyKey);\n return descriptor;\n };\n}\n","import \"reflect-metadata\";\nimport type { Type, CelerityLayer } from \"@celerity-sdk/types\";\nimport { LAYER_METADATA } from \"../metadata/constants\";\n\n/**\n * Attaches one or more layers to a controller class or individual method.\n * Layers run in declaration order (top-to-bottom) as middleware around the\n * handler, composing into the pipeline: `[system] → [app] → [handler layers]`.\n *\n * Can be applied at class level (all methods) or method level. Class-level\n * layers run before method-level layers. Accepts both layer instances and\n * layer classes (which are resolved from the DI container).\n *\n * @param layers - Layer instances or layer class constructors to attach.\n *\n * @example\n * ```ts\n * @Controller(\"/orders\")\n * @UseLayer(LoggingLayer, AuthLayer)\n * class OrderController {\n * @Get(\"/{id}\")\n * @UseLayer(new CacheLayer({ ttl: 60 }))\n * async getOrder(@Param(\"id\") id: string) { ... }\n * }\n * ```\n */\nexport function UseLayer(...layers: (Type<CelerityLayer> | CelerityLayer)[]) {\n return (\n target: object,\n propertyKey?: string | symbol,\n _descriptor?: PropertyDescriptor,\n ): void => {\n if (propertyKey) {\n const existing: (Type<CelerityLayer> | CelerityLayer)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, target, propertyKey) ?? [];\n Reflect.defineMetadata(LAYER_METADATA, [...layers, ...existing], target, propertyKey);\n } else {\n const existing: (Type<CelerityLayer> | CelerityLayer)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, target) ?? [];\n Reflect.defineMetadata(LAYER_METADATA, [...layers, ...existing], target);\n }\n };\n}\n\n/**\n * Array-based variant of `@UseLayer()`. Accepts layers as an array instead\n * of rest parameters — useful when layers are composed programmatically.\n */\nexport function UseLayers(layers: (Type<CelerityLayer> | CelerityLayer)[]) {\n return UseLayer(...layers);\n}\n","import \"reflect-metadata\";\nimport { USE_RESOURCE_METADATA } from \"../metadata/constants\";\n\n/**\n * Declares that a handler or controller uses one or more blueprint-defined\n * infrastructure resources. Used by the CLI extraction pipeline to emit\n * `celerity.handler.resource.ref` annotations for handler-to-resource linking.\n *\n * When there is only one resource of a given type in the blueprint, the Go CLI\n * can auto-link via DI inference. `@UseResource` is needed to disambiguate\n * when multiple resources of the same type exist.\n *\n * Can be applied at class level (default for all methods) or method level\n * (additional resources for that handler). Multiple decorators accumulate.\n *\n * @param resourceNames - One or more blueprint resource names.\n *\n * @example\n * ```ts\n * @Controller(\"/orders\")\n * @UseResource(\"ordersBucket\")\n * class OrderController {\n * @Get(\"/{id}\")\n * @UseResource(\"ordersCache\")\n * async getOrder(@Param(\"id\") id: string) { ... }\n *\n * @Post(\"/\")\n * async createOrder(@Body() body: CreateOrderDto) { ... }\n * }\n * ```\n */\nexport function UseResource(...resourceNames: string[]) {\n return (\n target: object,\n propertyKey?: string | symbol,\n _descriptor?: PropertyDescriptor,\n ): void => {\n if (propertyKey) {\n const existing: string[] =\n Reflect.getOwnMetadata(USE_RESOURCE_METADATA, target, propertyKey) ?? [];\n Reflect.defineMetadata(\n USE_RESOURCE_METADATA,\n [...resourceNames, ...existing],\n target,\n propertyKey,\n );\n } else {\n const existing: string[] = Reflect.getOwnMetadata(USE_RESOURCE_METADATA, target) ?? [];\n Reflect.defineMetadata(USE_RESOURCE_METADATA, [...resourceNames, ...existing], target);\n }\n };\n}\n\n/**\n * Array-based variant of `@UseResource()`. Accepts resource names as an array\n * instead of rest parameters — useful when resource names are composed\n * programmatically.\n */\nexport function UseResources(resourceNames: string[]) {\n return UseResource(...resourceNames);\n}\n","import \"reflect-metadata\";\nimport { CUSTOM_METADATA } from \"../metadata/constants\";\n\n/**\n * Attaches custom key-value metadata to a controller class or method.\n * Metadata is accessible to guards and layers via\n * `context.metadata.get(key)` at runtime.\n *\n * Multiple `@SetMetadata` decorators accumulate on the same target.\n * Method-level metadata is merged with (and overrides) class-level metadata.\n *\n * @param key - Metadata key.\n * @param value - Metadata value (any serializable type).\n *\n * @example\n * ```ts\n * @Controller(\"/admin\")\n * @SetMetadata(\"roles\", [\"admin\"])\n * class AdminController {\n * @Get(\"/\")\n * @SetMetadata(\"action\", \"admin:list\")\n * async list() { ... }\n * }\n * ```\n */\nexport function SetMetadata(key: string, value: unknown) {\n return (\n target: object,\n propertyKey?: string | symbol,\n _descriptor?: PropertyDescriptor,\n ): void => {\n if (propertyKey) {\n const existing: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, target, propertyKey) ?? {};\n Reflect.defineMetadata(CUSTOM_METADATA, { ...existing, [key]: value }, target, propertyKey);\n } else {\n const existing: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, target) ?? {};\n Reflect.defineMetadata(CUSTOM_METADATA, { ...existing, [key]: value }, target);\n }\n };\n}\n\n/**\n * Shorthand for `@SetMetadata(\"action\", value)`. Sets the `action` metadata\n * key, commonly used by guards to determine authorization rules.\n */\nexport function Action(value: unknown) {\n return SetMetadata(\"action\", value);\n}\n","import \"reflect-metadata\";\nimport type { InjectionToken } from \"@celerity-sdk/types\";\nimport { INJECTABLE_METADATA, INJECT_METADATA } from \"../metadata/constants\";\n\n/**\n * Marks a class as injectable into the DI container. Required for any class\n * that should be resolved as a dependency — services, repositories, etc.\n *\n * Controller and handler decorators (`@Controller`, `@WebSocketController`,\n * `@Consumer`, `@Guard`) set this automatically, so `@Injectable()` is only\n * needed for non-handler service classes.\n *\n * @example\n * ```ts\n * @Injectable()\n * class OrderService {\n * constructor(private db: DatabaseClient) {}\n * }\n * ```\n */\nexport function Injectable(): ClassDecorator {\n return (target) => {\n Reflect.defineMetadata(INJECTABLE_METADATA, true, target);\n };\n}\n\n/**\n * Overrides the DI token for a constructor parameter. By default the container\n * resolves dependencies using the class type from `emitDecoratorMetadata`. Use\n * `@Inject()` when you need to inject by a symbol, string token, or abstract\n * class that differs from the declared parameter type.\n *\n * @param token - The DI token (class, symbol, or string) to resolve.\n *\n * @example\n * ```ts\n * @Injectable()\n * class OrderService {\n * constructor(@Inject(DB_TOKEN) private db: DatabaseClient) {}\n * }\n * ```\n */\nexport function Inject(token: InjectionToken): ParameterDecorator {\n return (target, _propertyKey, parameterIndex) => {\n const existing: Map<number, InjectionToken> =\n Reflect.getOwnMetadata(INJECT_METADATA, target) ?? new Map();\n existing.set(parameterIndex, token);\n Reflect.defineMetadata(INJECT_METADATA, existing, target);\n };\n}\n","import \"reflect-metadata\";\nimport type { ModuleMetadata } from \"@celerity-sdk/types\";\nimport { MODULE_METADATA } from \"../metadata/constants\";\n\n/**\n * Declares a module — the organizational unit for grouping controllers,\n * providers, function handlers, and sub-modules. The root module is the\n * entry point for bootstrapping the application.\n *\n * @param metadata - Module configuration including:\n * - `imports` — sub-modules to compose into this module's scope\n * - `controllers` — handler classes (`@Controller`, `@WebSocketController`, `@Consumer`, etc.)\n * - `providers` — DI providers (classes, factories, or values)\n * - `functionHandlers` — function-based handler definitions\n * - `guards` — guard classes or definitions\n * - `layers` — application-level layers applied to all handlers in this module\n *\n * @example\n * ```ts\n * @Module({\n * imports: [DatabaseModule],\n * controllers: [UserController, OrderConsumer],\n * providers: [UserService, OrderService],\n * })\n * class AppModule {}\n * ```\n */\nexport function Module(metadata: ModuleMetadata): ClassDecorator {\n return (target) => {\n Reflect.defineMetadata(MODULE_METADATA, metadata, target);\n };\n}\n","import \"reflect-metadata\";\nimport type { WebSocketEventType } from \"@celerity-sdk/types\";\nimport {\n WEBSOCKET_CONTROLLER_METADATA,\n WEBSOCKET_EVENT_METADATA,\n INJECTABLE_METADATA,\n} from \"../metadata/constants\";\n\nexport type WebSocketEventMetadata = {\n eventType: WebSocketEventType;\n route: string;\n};\n\n/**\n * Marks a class as a WebSocket controller. The class becomes injectable and\n * its `@OnConnect()`, `@OnMessage()`, and `@OnDisconnect()` methods are\n * registered as WebSocket handler callbacks.\n *\n * @example\n * ```ts\n * @WebSocketController()\n * class ChatHandler {\n * @OnMessage(\"chat\")\n * async onChat(@ConnectionId() id: string, @MessageBody() body: unknown): Promise<void> { ... }\n * }\n * ```\n */\nexport function WebSocketController(): ClassDecorator {\n return (target) => {\n Reflect.defineMetadata(WEBSOCKET_CONTROLLER_METADATA, true, target);\n Reflect.defineMetadata(INJECTABLE_METADATA, true, target);\n };\n}\n\n/**\n * Handles WebSocket connection events. Invoked when a client establishes a\n * new WebSocket connection. Registered with the fixed route `$connect`.\n */\nexport function OnConnect(): MethodDecorator {\n return (target, propertyKey, descriptor) => {\n const meta: WebSocketEventMetadata = { eventType: \"connect\", route: \"$connect\" };\n Reflect.defineMetadata(WEBSOCKET_EVENT_METADATA, meta, target, propertyKey);\n return descriptor;\n };\n}\n\n/**\n * Handles WebSocket message events. Invoked when a connected client sends\n * a message.\n *\n * @param route - Optional route key for message dispatching. Defaults to\n * `$default` which catches all messages not matched by a specific route.\n * Custom routes enable action-based routing (e.g. `\"chat\"`, `\"ping\"`).\n */\nexport function OnMessage(route?: string): MethodDecorator {\n return (target, propertyKey, descriptor) => {\n const meta: WebSocketEventMetadata = {\n eventType: \"message\",\n route: route ?? \"$default\",\n };\n Reflect.defineMetadata(WEBSOCKET_EVENT_METADATA, meta, target, propertyKey);\n return descriptor;\n };\n}\n\n/**\n * Handles WebSocket disconnection events. Invoked when a client disconnects.\n * Registered with the fixed route `$disconnect`.\n */\nexport function OnDisconnect(): MethodDecorator {\n return (target, propertyKey, descriptor) => {\n const meta: WebSocketEventMetadata = { eventType: \"disconnect\", route: \"$disconnect\" };\n Reflect.defineMetadata(WEBSOCKET_EVENT_METADATA, meta, target, propertyKey);\n return descriptor;\n };\n}\n","import \"reflect-metadata\";\nimport type { Schema } from \"@celerity-sdk/types\";\nimport { PARAM_METADATA } from \"../metadata/constants\";\nimport type { ParamMetadata } from \"./params\";\n\nfunction createWsParamDecorator(type: ParamMetadata[\"type\"], schema?: Schema): ParameterDecorator {\n return (target, propertyKey, parameterIndex) => {\n if (!propertyKey) return;\n\n const existing: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, target, propertyKey) ?? [];\n\n const meta: ParamMetadata = { index: parameterIndex, type };\n if (schema) meta.schema = schema;\n\n existing.push(meta);\n Reflect.defineMetadata(PARAM_METADATA, existing, target, propertyKey);\n };\n}\n\n/**\n * Injects the WebSocket connection ID into a handler parameter.\n * This is the unique identifier for the client's connection, used to send\n * messages back via `WebSocketSender.sendMessage(connectionId, data)`.\n */\nexport function ConnectionId(): ParameterDecorator {\n return createWsParamDecorator(\"connectionId\");\n}\n\n/**\n * Injects the parsed message body from a WebSocket message event.\n * Returns the `jsonBody` field from the `WebSocketMessage`.\n *\n * @param schema - Optional Zod-compatible schema (`{ parse(data): T }`) for\n * body validation. When provided, the body is passed through\n * `schema.parse()` before injection.\n */\nexport function MessageBody(schema?: Schema): ParameterDecorator {\n return createWsParamDecorator(\"messageBody\", schema);\n}\n\n/**\n * Injects the unique message ID from a WebSocket message event.\n */\nexport function MessageId(): ParameterDecorator {\n return createWsParamDecorator(\"messageId\");\n}\n\n/**\n * Injects the `WebSocketRequestContext` from the connection handshake.\n * Contains request metadata from the initial HTTP upgrade: request ID,\n * path, headers, query params, cookies, client IP, and auth payload.\n */\nexport function RequestContext(): ParameterDecorator {\n return createWsParamDecorator(\"requestContext\");\n}\n\n/**\n * Injects the WebSocket event type: `\"connect\"`, `\"message\"`, or\n * `\"disconnect\"`. Useful when a single method handles multiple event types.\n */\nexport function EventType(): ParameterDecorator {\n return createWsParamDecorator(\"eventType\");\n}\n","import \"reflect-metadata\";\nimport {\n CONSUMER_METADATA,\n CONSUMER_HANDLER_METADATA,\n INJECTABLE_METADATA,\n} from \"../metadata/constants\";\n\nexport type ConsumerMetadata = {\n sourceId?: string;\n};\n\nexport type ConsumerHandlerMetadata = {\n route?: string;\n};\n\n/**\n * Marks a class as a consumer controller that processes batches of messages\n * from an event source (SQS, Kafka, Pub/Sub, etc.).\n *\n * The class becomes injectable and its `@MessageHandler()` methods are\n * registered as consumer handler callbacks.\n *\n * @param sourceId - Optional annotation hint that tells the deploy engine\n * which blueprint-defined consumer source this handler should be wired to.\n * Does not create infrastructure — the blueprint defines the actual source.\n *\n * @example\n * ```ts\n * @Consumer(\"orders-queue\")\n * class OrderConsumer {\n * @MessageHandler()\n * async process(@Messages(OrderSchema) messages: ValidatedConsumerMessage<Order>[]): Promise<EventResult> {\n * // ...\n * }\n * }\n * ```\n */\nexport function Consumer(sourceId?: string): ClassDecorator {\n return (target) => {\n const meta: ConsumerMetadata = {};\n if (sourceId !== undefined) meta.sourceId = sourceId;\n Reflect.defineMetadata(CONSUMER_METADATA, meta, target);\n Reflect.defineMetadata(INJECTABLE_METADATA, true, target);\n };\n}\n\n/**\n * Marks a method inside a `@Consumer()` class as a message handler.\n *\n * The method should return `Promise<EventResult>` with partial failure\n * semantics — individual message failures are reported via `failures[]`\n * without failing the entire batch.\n *\n * @param route - Optional routing key for message dispatching. The CLI\n * extracts this as `celerity.handler.consumer.route` and the deploy engine\n * merges it into the consumer source's routing configuration. The blueprint\n * can override. When omitted, the method name is used as the handler tag.\n */\nexport function MessageHandler(route?: string): MethodDecorator {\n return (target, propertyKey) => {\n const meta: ConsumerHandlerMetadata = {};\n if (route !== undefined) meta.route = route;\n Reflect.defineMetadata(CONSUMER_HANDLER_METADATA, meta, target, propertyKey);\n };\n}\n","import \"reflect-metadata\";\nimport type { Schema } from \"@celerity-sdk/types\";\nimport { PARAM_METADATA } from \"../metadata/constants\";\nimport type { ParamMetadata } from \"./params\";\n\nfunction createConsumerParamDecorator(\n type: ParamMetadata[\"type\"],\n schema?: Schema,\n): ParameterDecorator {\n return (target, propertyKey, parameterIndex) => {\n if (!propertyKey) return;\n\n const existing: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, target, propertyKey) ?? [];\n\n const meta: ParamMetadata = { index: parameterIndex, type };\n if (schema) meta.schema = schema;\n\n existing.push(meta);\n Reflect.defineMetadata(PARAM_METADATA, existing, target, propertyKey);\n };\n}\n\n/**\n * Injects the message batch into a `@MessageHandler()` method parameter.\n *\n * - **Without a schema:** injects `ConsumerMessage[]` with raw `body: string`\n * fields. The handler is responsible for parsing each message body.\n * - **With a schema:** the pipeline JSON-parses each `msg.body` and runs\n * `schema.parse()`. Messages that pass validation are injected as\n * `ValidatedConsumerMessage<T>[]` with a typed `parsedBody` field. Messages\n * that fail JSON parsing or schema validation are excluded from the batch\n * and automatically reported as `MessageProcessingFailure` entries, merged\n * into the handler's returned `EventResult`.\n *\n * @param schema - Optional Zod-compatible schema (`{ parse(data): T }`) for\n * per-message body validation.\n */\nexport function Messages(schema?: Schema): ParameterDecorator {\n return createConsumerParamDecorator(\"messages\", schema);\n}\n\n/**\n * Injects the full `ConsumerEventInput` envelope into a `@MessageHandler()`\n * method parameter. This includes the raw message batch, handler tag, vendor\n * metadata, and trace context.\n *\n * Use this when you need access to the entire event beyond just the messages —\n * for example, to inspect `vendor` metadata or `traceContext`. Analogous to\n * `@Req()` for HTTP handlers.\n */\nexport function EventInput(): ParameterDecorator {\n return createConsumerParamDecorator(\"consumerEvent\");\n}\n\n/**\n * Injects the vendor-specific metadata from the consumer event. This is the\n * platform-specific envelope data (e.g. SQS event source ARN, Kafka topic\n * metadata) — not the per-message vendor attributes.\n *\n * Equivalent to `event.vendor` from `@EventInput()`.\n */\nexport function Vendor(): ParameterDecorator {\n return createConsumerParamDecorator(\"consumerVendor\");\n}\n\n/**\n * Injects the trace context from the consumer event, if present.\n *\n * Returns `Record<string, string>` containing W3C Trace Context headers\n * (e.g. `traceparent`) and platform-specific trace IDs, or `null` if no\n * trace context was propagated.\n */\nexport function ConsumerTraceContext(): ParameterDecorator {\n return createConsumerParamDecorator(\"consumerTraceContext\");\n}\n","import \"reflect-metadata\";\nimport { SCHEDULE_HANDLER_METADATA } from \"../metadata/constants\";\n\nexport type ScheduleHandlerMetadata = {\n scheduleId?: string;\n schedule?: string;\n};\n\ntype ScheduleHandlerOptions = {\n scheduleId?: string;\n schedule?: string;\n};\n\nfunction isScheduleExpression(value: string): boolean {\n return value.startsWith(\"rate(\") || value.startsWith(\"cron(\");\n}\n\nfunction parseScheduleArg(arg: string | ScheduleHandlerOptions): ScheduleHandlerMetadata {\n if (typeof arg === \"string\") {\n return isScheduleExpression(arg) ? { schedule: arg } : { scheduleId: arg };\n }\n const meta: ScheduleHandlerMetadata = {};\n if (arg.scheduleId !== undefined) meta.scheduleId = arg.scheduleId;\n if (arg.schedule !== undefined) meta.schedule = arg.schedule;\n return meta;\n}\n\n/**\n * Marks a method as a schedule handler — a task triggered by a time-based\n * schedule (EventBridge rule, Cloud Scheduler, etc.).\n *\n * This is a **cross-cutting** method decorator that works on any controller\n * type (`@Controller`, `@WebSocketController`, `@Consumer`). There is no\n * `@ScheduleController` class decorator — schedule-only classes use\n * `@Controller()`.\n *\n * The method should return `Promise<EventResult>` to report success/failure.\n *\n * @param arg - Optional string or options object. String parsing:\n * - No args → fully blueprint-driven (no annotations)\n * - String with `rate(` or `cron(` prefix → `schedule` expression annotation\n * - String without prefix → `scheduleId` annotation hint for deploy engine\n * - Object → explicit `{ scheduleId?, schedule? }`\n *\n * @example\n * ```ts\n * @Controller()\n * class MaintenanceTasks {\n * @ScheduleHandler(\"daily-cleanup\")\n * async cleanup(@ScheduleInput() input: unknown): Promise<EventResult> {\n * // scheduleId hint — blueprint defines the actual schedule\n * }\n *\n * @ScheduleHandler(\"rate(1 day)\")\n * async sync(): Promise<EventResult> {\n * // schedule expression annotation — blueprint can override\n * }\n *\n * @ScheduleHandler({ scheduleId: \"weekly-report\", schedule: \"cron(0 9 ? * MON *)\" })\n * async report(): Promise<EventResult> {\n * // explicit object with both fields\n * }\n * }\n * ```\n */\nexport function ScheduleHandler(): MethodDecorator;\nexport function ScheduleHandler(scheduleIdOrExpression: string): MethodDecorator;\nexport function ScheduleHandler(options: ScheduleHandlerOptions): MethodDecorator;\nexport function ScheduleHandler(arg?: string | ScheduleHandlerOptions): MethodDecorator {\n return (target, propertyKey) => {\n const meta: ScheduleHandlerMetadata = arg ? parseScheduleArg(arg) : {};\n Reflect.defineMetadata(SCHEDULE_HANDLER_METADATA, meta, target, propertyKey);\n };\n}\n","import \"reflect-metadata\";\nimport type { Schema } from \"@celerity-sdk/types\";\nimport { PARAM_METADATA } from \"../metadata/constants\";\nimport type { ParamMetadata } from \"./params\";\n\nfunction createScheduleParamDecorator(\n type: ParamMetadata[\"type\"],\n schema?: Schema,\n): ParameterDecorator {\n return (target, propertyKey, parameterIndex) => {\n if (!propertyKey) return;\n\n const existing: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, target, propertyKey) ?? [];\n\n const meta: ParamMetadata = { index: parameterIndex, type };\n if (schema) meta.schema = schema;\n\n existing.push(meta);\n Reflect.defineMetadata(PARAM_METADATA, existing, target, propertyKey);\n };\n}\n\n/**\n * Injects the schedule event's `input` payload into a `@ScheduleHandler()`\n * method parameter.\n *\n * - **Without a schema:** injects the raw `event.input` as `unknown`.\n * - **With a schema:** the pipeline validates `event.input` through\n * `schema.parse()` before the handler runs. If validation fails, the\n * handler is not invoked and the pipeline returns\n * `{ success: false, errorMessage }`.\n *\n * @param schema - Optional Zod-compatible schema (`{ parse(data): T }`) for\n * input validation.\n */\nexport function ScheduleInput(schema?: Schema): ParameterDecorator {\n return createScheduleParamDecorator(\"scheduleInput\", schema);\n}\n\n/**\n * Injects the schedule ID from the event into a `@ScheduleHandler()`\n * method parameter. This is the identifier of the schedule rule that\n * triggered the handler (e.g. `\"daily-cleanup\"`).\n */\nexport function ScheduleId(): ParameterDecorator {\n return createScheduleParamDecorator(\"scheduleId\");\n}\n\n/**\n * Injects the schedule expression from the event into a `@ScheduleHandler()`\n * method parameter. This is the actual schedule expression that triggered\n * the handler (e.g. `\"rate(1 day)\"` or `\"cron(0 9 * * *)\"`).\n */\nexport function ScheduleExpression(): ParameterDecorator {\n return createScheduleParamDecorator(\"scheduleExpression\");\n}\n\n/**\n * Injects the full `ScheduleEventInput` envelope into a `@ScheduleHandler()`\n * method parameter. This includes the schedule ID, expression, message ID,\n * input payload, vendor metadata, and trace context.\n *\n * Use this when you need access to the entire event beyond just the input —\n * analogous to `@Req()` for HTTP handlers or `@EventInput()` for consumers.\n */\nexport function ScheduleEventInput(): ParameterDecorator {\n return createScheduleParamDecorator(\"scheduleEvent\");\n}\n","import \"reflect-metadata\";\nimport { INVOKE_METADATA } from \"../metadata/constants\";\n\nexport type InvokeMetadata = {\n name: string;\n};\n\n/**\n * Marks a method as a custom/invocable handler — a programmatic invocation\n * endpoint identified by name, callable via `app.invokeHandler(name, payload)`\n * or the runtime's `/runtime/handlers/invoke` endpoint.\n *\n * This is a **cross-cutting** method decorator that works on any controller\n * type (`@Controller`, `@WebSocketController`, `@Consumer`). A single class\n * can mix HTTP routes, scheduled tasks, and invocable methods.\n *\n * @param name - The handler name used for invocation lookup. Must be unique\n * across all registered custom handlers.\n *\n * @example\n * ```ts\n * // Standalone invocable handler\n * @Controller()\n * class PaymentHandlers {\n * @Invoke(\"processPayment\")\n * async process(@Payload(PaymentSchema) payload: PaymentInput): Promise<PaymentResult> {\n * return this.paymentService.process(payload);\n * }\n * }\n *\n * // Mixed: HTTP routes + invocable methods\n * @Controller(\"/payments\")\n * class PaymentController {\n * @Get(\"/{id}\")\n * async getPayment(@Param(\"id\") id: string): Promise<HandlerResponse> { ... }\n *\n * @Invoke(\"processPayment\")\n * async processPayment(@Payload(PaymentSchema) payload: PaymentInput): Promise<PaymentResult> {\n * return this.paymentService.process(payload);\n * }\n * }\n * ```\n */\nexport function Invoke(name: string): MethodDecorator {\n return (target, propertyKey) => {\n const meta: InvokeMetadata = { name };\n Reflect.defineMetadata(INVOKE_METADATA, meta, target, propertyKey);\n };\n}\n","import \"reflect-metadata\";\nimport type { Schema } from \"@celerity-sdk/types\";\nimport { PARAM_METADATA } from \"../metadata/constants\";\nimport type { ParamMetadata } from \"./params\";\n\nfunction createInvokeParamDecorator(\n type: ParamMetadata[\"type\"],\n schema?: Schema,\n): ParameterDecorator {\n return (target, propertyKey, parameterIndex) => {\n if (!propertyKey) return;\n\n const existing: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, target, propertyKey) ?? [];\n\n const meta: ParamMetadata = { index: parameterIndex, type };\n if (schema) meta.schema = schema;\n\n existing.push(meta);\n Reflect.defineMetadata(PARAM_METADATA, existing, target, propertyKey);\n };\n}\n\n/**\n * Injects the invocation payload into an `@Invoke()` method parameter.\n *\n * - **Without a schema:** injects the raw payload as `unknown`. The handler\n * is responsible for any validation.\n * - **With a schema:** the pipeline validates the payload through\n * `schema.parse()` before the handler runs. If validation fails, the\n * error is re-thrown to the caller.\n *\n * @param schema - Optional Zod-compatible schema (`{ parse(data): T }`) for\n * payload validation.\n */\nexport function Payload(schema?: Schema): ParameterDecorator {\n return createInvokeParamDecorator(\"payload\", schema);\n}\n\n/**\n * Injects the `BaseHandlerContext` into an `@Invoke()` method parameter.\n * Provides access to the handler metadata store, DI container, and\n * optional request-scoped logger.\n */\nexport function InvokeContext(): ParameterDecorator {\n return createInvokeParamDecorator(\"invokeContext\");\n}\n","export class HttpException extends Error {\n constructor(\n public readonly statusCode: number,\n message: string,\n public readonly details?: unknown,\n ) {\n super(message);\n this.name = \"HttpException\";\n }\n}\n\nexport class BadRequestException extends HttpException {\n constructor(message = \"Bad Request\", details?: unknown) {\n super(400, message, details);\n this.name = \"BadRequestException\";\n }\n}\n\nexport class UnauthorizedException extends HttpException {\n constructor(message = \"Unauthorized\", details?: unknown) {\n super(401, message, details);\n this.name = \"UnauthorizedException\";\n }\n}\n\nexport class ForbiddenException extends HttpException {\n constructor(message = \"Forbidden\", details?: unknown) {\n super(403, message, details);\n this.name = \"ForbiddenException\";\n }\n}\n\nexport class NotFoundException extends HttpException {\n constructor(message = \"Not Found\", details?: unknown) {\n super(404, message, details);\n this.name = \"NotFoundException\";\n }\n}\n\nexport class MethodNotAllowedException extends HttpException {\n constructor(message = \"Method Not Allowed\", details?: unknown) {\n super(405, message, details);\n this.name = \"MethodNotAllowedException\";\n }\n}\n\nexport class NotAcceptableException extends HttpException {\n constructor(message = \"Not Acceptable\", details?: unknown) {\n super(406, message, details);\n this.name = \"NotAcceptableException\";\n }\n}\n\nexport class ConflictException extends HttpException {\n constructor(message = \"Conflict\", details?: unknown) {\n super(409, message, details);\n this.name = \"ConflictException\";\n }\n}\n\nexport class GoneException extends HttpException {\n constructor(message = \"Gone\", details?: unknown) {\n super(410, message, details);\n this.name = \"GoneException\";\n }\n}\n\nexport class UnprocessableEntityException extends HttpException {\n constructor(message = \"Unprocessable Entity\", details?: unknown) {\n super(422, message, details);\n this.name = \"UnprocessableEntityException\";\n }\n}\n\nexport class TooManyRequestsException extends HttpException {\n constructor(message = \"Too Many Requests\", details?: unknown) {\n super(429, message, details);\n this.name = \"TooManyRequestsException\";\n }\n}\n\nexport class InternalServerErrorException extends HttpException {\n constructor(message = \"Internal Server Error\", details?: unknown) {\n super(500, message, details);\n this.name = \"InternalServerErrorException\";\n }\n}\n\nexport class NotImplementedException extends HttpException {\n constructor(message = \"Not Implemented\", details?: unknown) {\n super(501, message, details);\n this.name = \"NotImplementedException\";\n }\n}\n\nexport class BadGatewayException extends HttpException {\n constructor(message = \"Bad Gateway\", details?: unknown) {\n super(502, message, details);\n this.name = \"BadGatewayException\";\n }\n}\n\nexport class ServiceUnavailableException extends HttpException {\n constructor(message = \"Service Unavailable\", details?: unknown) {\n super(503, message, details);\n this.name = \"ServiceUnavailableException\";\n }\n}\n\nexport class GatewayTimeoutException extends HttpException {\n constructor(message = \"Gateway Timeout\", details?: unknown) {\n super(504, message, details);\n this.name = \"GatewayTimeoutException\";\n }\n}\n","import type {\n BaseHandlerContext,\n CelerityLayer,\n ConsumerHandlerContext,\n HandlerType,\n HttpHandlerContext,\n MessageProcessingFailure,\n Schema,\n ScheduleHandlerContext,\n ValidatedConsumerMessage,\n WebSocketHandlerContext,\n} from \"@celerity-sdk/types\";\nimport { BadRequestException } from \"../errors/http-exception\";\n\nexport type ValidationSchemas = {\n // HTTP\n body?: Schema;\n params?: Schema;\n query?: Schema;\n headers?: Schema;\n // WebSocket\n wsMessageBody?: Schema;\n // Consumer\n consumerMessage?: Schema;\n // Schedule\n scheduleInput?: Schema;\n // Custom\n customPayload?: Schema;\n};\n\nfunction inferMode(schemas: ValidationSchemas): HandlerType {\n if (schemas.consumerMessage) return \"consumer\";\n if (schemas.scheduleInput) return \"schedule\";\n if (schemas.customPayload) return \"custom\";\n if (schemas.wsMessageBody) return \"websocket\";\n return \"http\";\n}\n\nclass ValidationLayer implements CelerityLayer<BaseHandlerContext> {\n private readonly mode: HandlerType;\n\n constructor(private schemas: ValidationSchemas) {\n this.mode = inferMode(schemas);\n }\n\n supports(handlerType: HandlerType): boolean {\n return handlerType === this.mode;\n }\n\n async handle(context: BaseHandlerContext, next: () => Promise<unknown>): Promise<unknown> {\n switch (this.mode) {\n case \"http\":\n this.validateHttp(context as HttpHandlerContext);\n break;\n case \"websocket\":\n this.validateWebSocket(context as WebSocketHandlerContext);\n break;\n case \"consumer\":\n this.validateConsumer(context as ConsumerHandlerContext);\n break;\n case \"schedule\":\n this.validateSchedule(context as ScheduleHandlerContext);\n break;\n case \"custom\":\n this.validateCustom(context);\n break;\n }\n return next();\n }\n\n private validateHttp(context: HttpHandlerContext): void {\n const { request } = context;\n\n if (this.schemas.body && request.textBody) {\n try {\n const raw = JSON.parse(request.textBody);\n context.metadata.set(\"validatedBody\", this.schemas.body.parse(raw));\n } catch (error) {\n throw new BadRequestException(\"Body validation failed\", formatError(error));\n }\n }\n\n if (this.schemas.params) {\n try {\n context.metadata.set(\"validatedParams\", this.schemas.params.parse(request.pathParams));\n } catch (error) {\n throw new BadRequestException(\"Path params validation failed\", formatError(error));\n }\n }\n\n if (this.schemas.query) {\n try {\n context.metadata.set(\"validatedQuery\", this.schemas.query.parse(request.query));\n } catch (error) {\n throw new BadRequestException(\"Query validation failed\", formatError(error));\n }\n }\n\n if (this.schemas.headers) {\n try {\n context.metadata.set(\"validatedHeaders\", this.schemas.headers.parse(request.headers));\n } catch (error) {\n throw new BadRequestException(\"Headers validation failed\", formatError(error));\n }\n }\n }\n\n private validateWebSocket(context: WebSocketHandlerContext): void {\n const schema = this.schemas.wsMessageBody;\n if (!schema) return;\n\n const body = context.message.jsonBody;\n if (body === undefined) return;\n\n context.metadata.set(\"validatedMessageBody\", schema.parse(body));\n }\n\n private validateConsumer(context: ConsumerHandlerContext): void {\n const schema = this.schemas.consumerMessage;\n if (!schema) return;\n\n const validated: ValidatedConsumerMessage<unknown>[] = [];\n const failures: MessageProcessingFailure[] = [];\n\n for (const msg of context.event.messages) {\n try {\n const parsed = JSON.parse(msg.body);\n const result = schema.parse(parsed);\n validated.push({ ...msg, parsedBody: result });\n } catch (err) {\n failures.push({\n messageId: msg.messageId,\n errorMessage: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n context.metadata.set(\"validatedMessages\", validated);\n if (failures.length > 0) {\n context.metadata.set(\"validationFailures\", failures);\n }\n }\n\n private validateSchedule(context: ScheduleHandlerContext): void {\n const schema = this.schemas.scheduleInput;\n if (!schema) return;\n\n context.metadata.set(\"validatedInput\", schema.parse(context.event.input));\n }\n\n private validateCustom(context: BaseHandlerContext): void {\n const schema = this.schemas.customPayload;\n if (!schema) return;\n\n const raw = context.metadata.get(\"rawPayload\");\n context.metadata.set(\"validatedPayload\", schema.parse(raw));\n }\n}\n\nfunction formatError(error: unknown): unknown {\n if (error instanceof Error && \"issues\" in error) {\n return (error as Error & { issues: unknown }).issues;\n }\n if (error instanceof Error) {\n return error.message;\n }\n return error;\n}\n\nexport function validate(schemas: ValidationSchemas): CelerityLayer<BaseHandlerContext> {\n return new ValidationLayer(schemas);\n}\n","import createDebug from \"debug\";\nimport type { BaseHandlerContext, CelerityLayer, HandlerType, Type } from \"@celerity-sdk/types\";\n\nconst debug = createDebug(\"celerity:core:layers\");\n\nexport function runLayerPipeline<TContext extends BaseHandlerContext>(\n layers: (CelerityLayer<TContext> | Type<CelerityLayer<TContext>>)[],\n context: TContext,\n handler: () => Promise<unknown>,\n handlerType?: HandlerType,\n): Promise<unknown> {\n const resolved = layers\n .map((layer) => (typeof layer === \"function\" ? new layer() : layer))\n .filter((layer) => !handlerType || !layer.supports || layer.supports(handlerType));\n debug(\"runLayerPipeline: %d layers (handlerType=%s)\", resolved.length, handlerType ?? \"all\");\n\n let index = -1;\n\n function dispatch(i: number): Promise<unknown> {\n if (i <= index) {\n return Promise.reject(new Error(\"next() called multiple times\"));\n }\n index = i;\n\n if (i >= resolved.length) {\n return handler();\n }\n\n const current = resolved[i];\n debug(\"layer[%d] %s\", i, current.constructor.name);\n return current.handle(context, () => dispatch(i + 1));\n }\n\n return dispatch(0);\n}\n","import type { CelerityLayer } from \"@celerity-sdk/types\";\nimport { ConfigLayer, captureResourceLinks, getResourceTypes } from \"@celerity-sdk/config\";\n\nconst RESOURCE_LAYER_MAP: Record<string, { pkg: string; className: string }> = {\n bucket: { pkg: \"@celerity-sdk/bucket\", className: \"ObjectStorageLayer\" },\n queue: { pkg: \"@celerity-sdk/queue\", className: \"QueueLayer\" },\n cache: { pkg: \"@celerity-sdk/cache\", className: \"CacheLayer\" },\n};\n\nexport async function createDefaultSystemLayers(): Promise<CelerityLayer[]> {\n const layers: CelerityLayer[] = [];\n\n // Telemetry layer first — always try to load.\n // The layer itself decides: full OTel (tracing enabled) or logger-only (tracing disabled).\n try {\n const pkg = \"@celerity-sdk/telemetry\";\n const mod = (await import(pkg)) as Record<string, unknown>;\n const TelemetryLayerClass = mod.TelemetryLayer as new () => CelerityLayer;\n layers.push(new TelemetryLayerClass());\n } catch {\n // telemetry package not installed — skip\n }\n\n layers.push(new ConfigLayer());\n\n // Resource layers — driven by CELERITY_RESOURCE_LINKS topology.\n // Each loads AFTER config so it can resolve identifiers via ConfigService.\n const links = captureResourceLinks();\n const resourceTypes = getResourceTypes(links);\n\n for (const type of resourceTypes) {\n const entry = RESOURCE_LAYER_MAP[type];\n if (!entry) continue;\n\n try {\n const pkg = entry.pkg;\n const mod = (await import(pkg)) as Record<string, unknown>;\n const LayerClass = mod[entry.className] as new () => CelerityLayer;\n layers.push(new LayerClass());\n } catch {\n // resource package not installed — skip\n }\n }\n\n return layers;\n}\n","import type { CelerityLayer, Type } from \"@celerity-sdk/types\";\n\n/**\n * Disposes an array of layers in reverse order.\n * Skips class references (Type<CelerityLayer>) — only instances with a\n * `dispose` method are called. Errors are non-fatal; disposal continues\n * for remaining layers.\n */\nexport async function disposeLayers(\n layers: (CelerityLayer | Type<CelerityLayer>)[],\n): Promise<void> {\n for (const layer of [...layers].reverse()) {\n if (typeof layer === \"object\" && \"dispose\" in layer) {\n try {\n await layer.dispose?.();\n } catch {\n // Non-fatal — continue disposing remaining layers\n }\n }\n }\n}\n","import type { HandlerMetadata } from \"@celerity-sdk/types\";\n\nexport class HandlerMetadataStore implements HandlerMetadata {\n private readonly decoratorData: ReadonlyMap<string, unknown>;\n private readonly requestData = new Map<string, unknown>();\n\n constructor(decoratorMetadata: Record<string, unknown>) {\n this.decoratorData = new Map(Object.entries(decoratorMetadata));\n }\n\n get<T = unknown>(key: string): T | undefined {\n if (this.requestData.has(key)) return this.requestData.get(key) as T | undefined;\n return this.decoratorData.get(key) as T | undefined;\n }\n\n set(key: string, value: unknown): void {\n this.requestData.set(key, value);\n }\n\n has(key: string): boolean {\n return this.requestData.has(key) || this.decoratorData.has(key);\n }\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type {\n Type,\n InjectionToken,\n Provider,\n ClassProvider,\n FactoryProvider,\n ValueProvider,\n ServiceContainer,\n} from \"@celerity-sdk/types\";\nimport { INJECTABLE_METADATA } from \"../metadata/constants\";\nimport { getClassDependencyTokens, getProviderDependencyTokens } from \"./dependency-tokens\";\n\nconst debug = createDebug(\"celerity:core:di\");\n\ntype CloseEntry = {\n token: InjectionToken;\n close: () => Promise<void> | void;\n};\n\nconst CLOSE_METHODS = [\"close\", \"end\", \"quit\", \"disconnect\", \"$disconnect\", \"destroy\"] as const;\n\nfunction isClassProvider<T>(p: Provider<T>): p is ClassProvider<T> {\n return \"useClass\" in p;\n}\n\nfunction isFactoryProvider<T>(p: Provider<T>): p is FactoryProvider<T> {\n return \"useFactory\" in p;\n}\n\nfunction isValueProvider<T>(p: Provider<T>): p is ValueProvider<T> {\n return \"useValue\" in p;\n}\n\nexport function tokenToString(token: InjectionToken): string {\n if (typeof token === \"function\") return token.name;\n return String(token);\n}\n\nfunction detectCloseMethod(value: unknown): (() => Promise<void> | void) | null {\n if (typeof value !== \"object\" || value === null) return null;\n\n const obj = value as Record<string, unknown>;\n for (const method of CLOSE_METHODS) {\n if (typeof obj[method] === \"function\") {\n return () => (obj[method] as () => Promise<void> | void)();\n }\n }\n\n return null;\n}\n\n// Used for the internal map of providers where we can't track each specific\n// Provider<T> type.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyProvider = Provider<any>;\n\nexport class Container implements ServiceContainer {\n private providers = new Map<InjectionToken, AnyProvider>();\n private instances = new Map<InjectionToken, unknown>();\n private resolving = new Set<InjectionToken>();\n private edges = new Map<InjectionToken, Set<InjectionToken>>();\n private closeStack: CloseEntry[] = [];\n private trackedTokens = new Set<InjectionToken>();\n\n register<T>(token: InjectionToken, provider: Provider<T>): void {\n const type = isClassProvider(provider)\n ? \"class\"\n : isFactoryProvider(provider)\n ? \"factory\"\n : \"value\";\n debug(\"register %s (%s)\", tokenToString(token), type);\n this.providers.set(token, provider);\n\n if (isValueProvider(provider)) {\n this.trackCloseable(token, provider.useValue, provider.onClose);\n }\n }\n\n registerClass<T>(target: Type<T>): void {\n debug(\"register %s (class)\", target.name);\n this.providers.set(target, { useClass: target });\n }\n\n registerValue<T>(token: InjectionToken, value: T): void {\n debug(\"registerValue %s\", tokenToString(token));\n this.instances.set(token, value);\n this.trackCloseable(token, value);\n }\n\n async resolve<T>(token: InjectionToken): Promise<T> {\n const name = tokenToString(token);\n if (this.instances.has(token)) {\n debug(\"resolve %s → cached\", name);\n return this.instances.get(token) as T;\n }\n\n if (this.resolving.has(token)) {\n const path = [...this.resolving, token].map(tokenToString).join(\" → \");\n throw new Error(`Circular dependency detected: ${path}`);\n }\n\n debug(\"resolve %s → constructing\", name);\n this.resolving.add(token);\n try {\n const provider = this.providers.get(token);\n if (!provider) {\n if (typeof token === \"function\") {\n return this.constructClass(token as Type<T>);\n }\n throw new Error(\n `No provider registered for ${tokenToString(token)}.\\n` +\n 'Ensure the module providing it is included in your module\\'s \"imports\" array,\\n' +\n \"or register a provider for it directly.\",\n );\n }\n\n if (isFactoryProvider(provider) && provider.inject) {\n this.recordEdges(token, provider.inject);\n }\n\n const instance = await this.createFromProvider<T>(provider);\n this.instances.set(token, instance);\n\n if (!isValueProvider(provider)) {\n this.trackCloseable(token, instance, provider.onClose);\n }\n\n return instance;\n } finally {\n this.resolving.delete(token);\n }\n }\n\n async resolveClass<T>(target: Type<T>): Promise<T> {\n if (this.instances.has(target)) {\n return this.instances.get(target) as T;\n }\n\n if (this.resolving.has(target)) {\n const path = [...this.resolving, target].map(tokenToString).join(\" → \");\n throw new Error(`Circular dependency detected: ${path}`);\n }\n\n this.resolving.add(target);\n try {\n return this.constructClass(target);\n } finally {\n this.resolving.delete(target);\n }\n }\n\n has(token: InjectionToken): boolean {\n return this.instances.has(token) || this.providers.has(token);\n }\n\n getDependencies(token: InjectionToken): ReadonlySet<InjectionToken> {\n return this.edges.get(token) ?? new Set();\n }\n\n async closeAll(): Promise<void> {\n debug(\"closeAll: %d resources\", this.closeStack.length);\n const entries = [...this.closeStack].reverse();\n for (const entry of entries) {\n try {\n debug(\"closing %s\", tokenToString(entry.token));\n await entry.close();\n } catch {\n // Close failure is non-fatal — continue closing remaining services.\n }\n }\n this.closeStack = [];\n this.trackedTokens.clear();\n }\n\n /**\n * Validates that all registered providers have resolvable dependencies.\n * Call after all module providers are registered but before resolution.\n * Throws a descriptive error listing ALL missing dependencies at once.\n */\n validateDependencies(): void {\n const missing: Array<{ consumer: string; dependency: string }> = [];\n const visited = new Set<InjectionToken>();\n\n const walk = (token: InjectionToken): void => {\n if (visited.has(token)) return;\n visited.add(token);\n\n let depTokens: InjectionToken[];\n const provider = this.providers.get(token);\n\n if (provider) {\n depTokens = this.getProviderDependencyTokens(provider);\n } else if (typeof token === \"function\") {\n depTokens = this.getClassDependencyTokens(token as Type);\n } else {\n return;\n }\n\n for (const dep of depTokens) {\n if (this.providers.has(dep) || this.instances.has(dep)) {\n walk(dep);\n } else if (typeof dep === \"function\") {\n walk(dep);\n } else {\n missing.push({\n consumer: tokenToString(token),\n dependency: tokenToString(dep),\n });\n }\n }\n };\n\n for (const token of this.providers.keys()) {\n walk(token);\n }\n\n if (missing.length > 0) {\n const details = missing\n .map(\n ({ consumer, dependency }) =>\n ` ${consumer} requires ${dependency} — no provider registered`,\n )\n .join(\"\\n\");\n throw new Error(\n `Unresolvable dependencies detected during bootstrap:\\n\\n${details}\\n\\n` +\n \"For each unresolved dependency, check that the module providing it is included\\n\" +\n 'in your root module\\'s \"imports\" array, or register a provider for it directly.',\n );\n }\n }\n\n getClassDependencyTokens(target: Type): InjectionToken[] {\n return getClassDependencyTokens(target);\n }\n\n getProviderDependencyTokens(provider: AnyProvider): InjectionToken[] {\n return getProviderDependencyTokens(provider);\n }\n\n /**\n * Constructs a class by resolving constructor dependencies via design:paramtypes.\n * Does NOT manage the resolving set — callers (resolve/resolveClass) own cycle detection.\n */\n private async constructClass<T>(target: Type<T>): Promise<T> {\n if (this.instances.has(target)) {\n return this.instances.get(target) as T;\n }\n\n const isInjectable = Reflect.getOwnMetadata(INJECTABLE_METADATA, target) === true;\n if (!isInjectable && target.length > 0) {\n throw new Error(\n `Class ${target.name} has constructor parameters but is not decorated with @Injectable(). ` +\n \"Add @Injectable() to enable dependency injection, or use a factory provider.\",\n );\n }\n\n const depTokens = this.getClassDependencyTokens(target);\n debug(\"construct %s deps=[%s]\", target.name, depTokens.map(tokenToString).join(\", \"));\n this.recordEdges(target, depTokens);\n\n const deps: unknown[] = [];\n for (const t of depTokens) {\n deps.push(await this.resolve(t));\n }\n\n const instance = new target(...deps) as T;\n this.instances.set(target, instance);\n this.trackCloseable(target, instance);\n return instance;\n }\n\n private recordEdges(from: InjectionToken, to: InjectionToken[]): void {\n let set = this.edges.get(from);\n if (!set) {\n set = new Set();\n this.edges.set(from, set);\n }\n for (const dep of to) {\n set.add(dep);\n }\n }\n\n private trackCloseable<T>(\n token: InjectionToken,\n value: T,\n onClose?: (value: T) => Promise<void> | void,\n ): void {\n if (this.trackedTokens.has(token)) return;\n\n if (onClose) {\n this.closeStack.push({ token, close: () => onClose(value) });\n this.trackedTokens.add(token);\n return;\n }\n\n const closeFn = detectCloseMethod(value);\n if (closeFn) {\n this.closeStack.push({ token, close: closeFn });\n this.trackedTokens.add(token);\n }\n }\n\n private async createFromProvider<T>(provider: AnyProvider): Promise<T> {\n if (isValueProvider(provider)) {\n return provider.useValue as T;\n }\n\n if (isClassProvider(provider)) {\n return this.constructClass(provider.useClass) as Promise<T>;\n }\n\n if (isFactoryProvider(provider)) {\n const deps = provider.inject\n ? await Promise.all(provider.inject.map((t) => this.resolve(t)))\n : [];\n return provider.useFactory(...deps) as T;\n }\n\n throw new Error(\"Invalid provider configuration\");\n }\n}\n","import \"reflect-metadata\";\nimport type {\n Type,\n InjectionToken,\n Provider,\n ClassProvider,\n FactoryProvider,\n} from \"@celerity-sdk/types\";\nimport { INJECT_METADATA } from \"../metadata/constants\";\n\nfunction isClassProvider<T>(p: Provider<T>): p is ClassProvider<T> {\n return \"useClass\" in p;\n}\n\nfunction isFactoryProvider<T>(p: Provider<T>): p is FactoryProvider<T> {\n return \"useFactory\" in p;\n}\n\n/**\n * Reads reflect-metadata to determine the constructor dependency tokens for a class.\n * Applies @Inject() overrides where present.\n *\n * Pure function — reads metadata only, no container side effects.\n */\nexport function getClassDependencyTokens(target: Type): InjectionToken[] {\n const paramTypes: Type[] = Reflect.getMetadata(\"design:paramtypes\", target) ?? [];\n const injectOverrides: Map<number, InjectionToken> =\n Reflect.getMetadata(INJECT_METADATA, target) ?? new Map();\n return paramTypes.map((paramType, index) => injectOverrides.get(index) ?? paramType);\n}\n\n/**\n * Determines the dependency tokens for a provider (class, factory, or value).\n *\n * Pure function — reads metadata only, no container side effects.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getProviderDependencyTokens(provider: Provider<any>): InjectionToken[] {\n if (isClassProvider(provider)) {\n return getClassDependencyTokens(provider.useClass);\n }\n if (isFactoryProvider(provider) && provider.inject) {\n return [...provider.inject];\n }\n return [];\n}\n","export const APP_CONFIG = Symbol(\"celerity:app-config\");\nexport const RUNTIME_APP = Symbol(\"celerity:runtime-app\");\n","import createDebug from \"debug\";\nimport type { CelerityLayer, Type } from \"@celerity-sdk/types\";\nimport { bootstrap } from \"../bootstrap/bootstrap\";\nimport { CelerityApplication } from \"./application\";\nimport { ServerlessApplication } from \"./serverless\";\nimport { TestingApplication } from \"../testing/test-app\";\nimport type { ServerlessAdapter } from \"../adapters/interfaces\";\nimport { createDefaultSystemLayers } from \"../layers/system\";\n\nconst debug = createDebug(\"celerity:core:factory\");\n\nexport type CreateOptions = {\n adapter?: ServerlessAdapter;\n /** App-wide layers that run after system layers but before handler layers. */\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n /**\n * Override the default system layer stack.\n * @internal Used by TestingApplication and runtime orchestrator.\n */\n systemLayers?: (CelerityLayer | Type<CelerityLayer>)[];\n};\n\nexport class CelerityFactory {\n static async create(\n rootModule: Type,\n options?: CreateOptions,\n ): Promise<CelerityApplication | ServerlessApplication> {\n debug(\"create: bootstrapping %s\", rootModule.name);\n\n // Resolve system layers first.\n // If telemetry is present + enabled, this triggers OTel SDK init\n // and registers auto-instrumentations before user module imports.\n const systemLayers = options?.systemLayers ?? (await createDefaultSystemLayers());\n const appLayers = options?.layers ?? [];\n debug(\"create: %d system layers, %d app layers\", systemLayers.length, appLayers.length);\n\n // Bootstrap user module after auto-instrumentations are registered.\n const { container, registry } = await bootstrap(rootModule);\n\n if (options?.adapter) {\n debug(\"create: using adapter → ServerlessApplication\");\n return new ServerlessApplication(\n registry,\n container,\n options.adapter,\n systemLayers,\n appLayers,\n );\n }\n\n debug(\"create: → CelerityApplication\");\n return new CelerityApplication(registry, container, systemLayers, appLayers);\n }\n\n static async createTestingApp(\n rootModule: Type,\n options?: CreateOptions,\n ): Promise<TestingApplication> {\n debug(\"createTestingApp: bootstrapping %s\", rootModule.name);\n const { container, registry } = await bootstrap(rootModule);\n const systemLayers = options?.systemLayers ?? [];\n const appLayers = options?.layers ?? [];\n return new TestingApplication(registry, container, systemLayers, appLayers);\n }\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type { Type } from \"@celerity-sdk/types\";\nimport { Container } from \"../di/container\";\nimport { HandlerRegistry } from \"../handlers/registry\";\nimport { walkModuleGraph, validateModuleGraph } from \"./module-graph\";\nimport { scanHttpHandlers, scanHttpGuards } from \"../handlers/scanners/http\";\nimport { scanWebSocketHandlers } from \"../handlers/scanners/websocket\";\nimport { scanConsumerHandlers } from \"../handlers/scanners/consumer\";\nimport { scanScheduleHandlers } from \"../handlers/scanners/schedule\";\nimport { scanCustomHandlers } from \"../handlers/scanners/custom\";\n\nconst debug = createDebug(\"celerity:core:bootstrap\");\n\nexport type BootstrapResult = {\n container: Container;\n registry: HandlerRegistry;\n};\n\n/** Bootstrap DI container + handler registry from a root module class. */\nexport async function bootstrap(rootModule: Type): Promise<BootstrapResult> {\n debug(\"bootstrap: starting from %s\", rootModule.name);\n const container = new Container();\n const registry = new HandlerRegistry();\n\n const graph = walkModuleGraph(rootModule, container);\n validateModuleGraph(graph, container);\n await scanHttpHandlers(graph, container, registry);\n await scanHttpGuards(graph, container, registry);\n await scanWebSocketHandlers(graph, container, registry);\n await scanConsumerHandlers(graph, container, registry);\n await scanScheduleHandlers(graph, container, registry);\n await scanCustomHandlers(graph, container, registry);\n\n debug(\n \"bootstrap: complete — %d modules, %d handlers\",\n graph.size,\n registry.getAllHandlers().length,\n );\n return { container, registry };\n}\n","import createDebug from \"debug\";\nimport type {\n HandlerType,\n ResolvedHandler,\n ResolvedHttpHandler,\n ResolvedWebSocketHandler,\n ResolvedConsumerHandler,\n ResolvedScheduleHandler,\n ResolvedCustomHandler,\n ResolvedGuard,\n} from \"./types\";\nimport { routingKeyOf } from \"./routing\";\n\nconst debug = createDebug(\"celerity:core:registry\");\n\nexport class HandlerRegistry {\n private byType = new Map<HandlerType, ResolvedHandler[]>();\n private exactLookup = new Map<string, ResolvedHandler>();\n private byId = new Map<string, ResolvedHandler>();\n private guards = new Map<string, ResolvedGuard>();\n\n register(handler: ResolvedHandler): void {\n const list = this.byType.get(handler.type) ?? [];\n list.push(handler);\n this.byType.set(handler.type, list);\n\n // Non-HTTP types use O(1) exact-match lookup.\n // HTTP uses path-pattern matching (e.g., /items/{id} matches /items/42).\n if (handler.type !== \"http\") {\n this.exactLookup.set(`${handler.type}::${routingKeyOf(handler)}`, handler);\n }\n\n if (handler.id) {\n this.byId.set(handler.id, handler);\n }\n }\n\n getHandler(type: \"http\", routingKey: string): ResolvedHttpHandler | undefined;\n getHandler(type: \"websocket\", routingKey: string): ResolvedWebSocketHandler | undefined;\n getHandler(type: \"consumer\", routingKey: string): ResolvedConsumerHandler | undefined;\n getHandler(type: \"schedule\", routingKey: string): ResolvedScheduleHandler | undefined;\n getHandler(type: \"custom\", routingKey: string): ResolvedCustomHandler | undefined;\n getHandler(type: HandlerType, routingKey: string): ResolvedHandler | undefined {\n if (type === \"http\") return this.findHttpHandler(routingKey);\n const found = this.exactLookup.get(`${type}::${routingKey}`);\n debug(\"getHandler %s %s → %s\", type, routingKey, found ? \"matched\" : \"not found\");\n return found;\n }\n\n getHandlerById<T extends HandlerType>(\n type: T,\n id: string,\n ): Extract<ResolvedHandler, { type: T }> | undefined {\n const handler = this.byId.get(id);\n if (handler && handler.type === type) {\n return handler as Extract<ResolvedHandler, { type: T }>;\n }\n debug(\"getHandlerById %s %s → not found\", type, id);\n return undefined;\n }\n\n getHandlersByType<T extends HandlerType>(type: T): Extract<ResolvedHandler, { type: T }>[] {\n return (this.byType.get(type) ?? []) as Extract<ResolvedHandler, { type: T }>[];\n }\n\n getAllHandlers(): ResolvedHandler[] {\n const result: ResolvedHandler[] = [];\n for (const list of this.byType.values()) result.push(...list);\n return result;\n }\n\n registerGuard(guard: ResolvedGuard): void {\n debug(\"registerGuard: %s\", guard.name);\n this.guards.set(guard.name, guard);\n }\n\n getGuard(name: string): ResolvedGuard | undefined {\n const found = this.guards.get(name);\n debug(\"getGuard %s → %s\", name, found ? \"matched\" : \"not found\");\n return found;\n }\n\n getAllGuards(): ResolvedGuard[] {\n return [...this.guards.values()];\n }\n\n /**\n * HTTP routing uses path-pattern matching: `\"GET /items/{id}\"` matches `\"GET /items/42\"`.\n * The routing key format is `\"METHOD path\"` (e.g., `\"GET /items/{id}\"`).\n */\n private findHttpHandler(routingKey: string): ResolvedHttpHandler | undefined {\n const spaceIdx = routingKey.indexOf(\" \");\n if (spaceIdx < 0) return undefined;\n const method = routingKey.slice(0, spaceIdx);\n const path = routingKey.slice(spaceIdx + 1);\n const httpHandlers = (this.byType.get(\"http\") ?? []) as ResolvedHttpHandler[];\n const found = httpHandlers.find(\n (h) =>\n h.path !== undefined &&\n h.method !== undefined &&\n h.method === method &&\n matchRoute(h.path, path),\n );\n debug(\"getHandler http %s → %s\", routingKey, found ? \"matched\" : \"not found\");\n return found;\n }\n}\n\nfunction matchRoute(pattern: string, actual: string): boolean {\n const patternParts = pattern.split(\"/\").filter(Boolean);\n const actualParts = actual.split(\"/\").filter(Boolean);\n\n if (patternParts.length !== actualParts.length) return false;\n\n return patternParts.every((part, i) => part.startsWith(\"{\") || part === actualParts[i]);\n}\n","import { ResolvedHandler } from \"./types\";\n\nexport function routingKeyOf(handler: ResolvedHandler): string {\n switch (handler.type) {\n case \"http\":\n return `${handler.method} ${handler.path}`;\n case \"websocket\":\n return handler.route;\n case \"consumer\":\n return handler.handlerTag;\n case \"schedule\":\n return handler.handlerTag;\n case \"custom\":\n return handler.name;\n }\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type {\n Type,\n InjectionToken,\n Provider,\n ModuleMetadata,\n FunctionHandlerDefinition,\n GuardDefinition,\n} from \"@celerity-sdk/types\";\nimport { MODULE_METADATA } from \"../metadata/constants\";\nimport type { Container } from \"../di/container\";\nimport { tokenToString } from \"../di/container\";\nimport { getClassDependencyTokens, getProviderDependencyTokens } from \"../di/dependency-tokens\";\n\nconst debug = createDebug(\"celerity:core:bootstrap\");\n\nexport type ModuleNode = {\n moduleClass: Type;\n ownTokens: Set<InjectionToken>;\n exports: Set<InjectionToken>;\n imports: Type[];\n controllers: Type[];\n functionHandlers: FunctionHandlerDefinition[];\n guards: (Type | GuardDefinition)[];\n providers: (Type | (Provider & { provide: InjectionToken }))[];\n};\n\nexport type ModuleGraph = Map<Type, ModuleNode>;\n\n/**\n * Builds a module graph by walking the module tree depth-first, collecting\n * all metadata into a graph structure without any side effects.\n *\n * Detects circular module imports and deduplicates visited modules.\n */\nexport function buildModuleGraph(rootModule: Type): ModuleGraph {\n const graph: ModuleGraph = new Map();\n const resolving = new Set<Type>();\n\n function walk(moduleClass: Type, importChain: Type[]): void {\n if (graph.has(moduleClass)) {\n debug(\"walk %s → already visited\", moduleClass.name);\n return;\n }\n\n if (resolving.has(moduleClass)) {\n const cyclePath = [...importChain, moduleClass].map((m) => m.name).join(\" → \");\n throw new Error(`Circular module import detected: ${cyclePath}`);\n }\n\n resolving.add(moduleClass);\n\n const metadata: ModuleMetadata | undefined = Reflect.getOwnMetadata(\n MODULE_METADATA,\n moduleClass,\n );\n\n if (!metadata) {\n resolving.delete(moduleClass);\n graph.set(moduleClass, {\n moduleClass,\n ownTokens: new Set(),\n exports: new Set(),\n imports: [],\n controllers: [],\n functionHandlers: [],\n guards: [],\n providers: [],\n });\n return;\n }\n\n // Recurse into imports first (depth-first)\n const imports = metadata.imports ?? [];\n for (const imported of imports) {\n walk(imported, [...importChain, moduleClass]);\n }\n\n // Collect own tokens from providers\n const ownTokens = new Set<InjectionToken>();\n const providers = metadata.providers ?? [];\n for (const provider of providers) {\n if (typeof provider === \"function\") {\n ownTokens.add(provider);\n } else {\n const typed = provider as Provider & { provide: InjectionToken };\n ownTokens.add(typed.provide);\n }\n }\n\n // Controllers are also own tokens\n const controllers = metadata.controllers ?? [];\n for (const controller of controllers) {\n ownTokens.add(controller);\n }\n\n // Class-based guards are also own tokens (for DI resolution)\n const guards = metadata.guards ?? [];\n for (const guard of guards) {\n if (typeof guard === \"function\") {\n ownTokens.add(guard);\n }\n }\n\n // Build exports set — defaults to empty (nothing exported) when omitted\n const exportTokens = new Set<InjectionToken>(metadata.exports ?? []);\n\n resolving.delete(moduleClass);\n debug(\n \"walk %s: %d providers, %d controllers, %d guards, %d imports\",\n moduleClass.name,\n providers.length,\n controllers.length,\n guards.length,\n imports.length,\n );\n\n graph.set(moduleClass, {\n moduleClass,\n ownTokens,\n exports: exportTokens,\n imports,\n controllers,\n functionHandlers: metadata.functionHandlers ?? [],\n guards,\n providers,\n });\n }\n\n walk(rootModule, []);\n return graph;\n}\n\n/**\n * Registers all providers and controllers from the module graph into the\n * DI container.\n */\nexport function registerModuleGraph(graph: ModuleGraph, container: Container): void {\n for (const [, node] of graph) {\n for (const provider of node.providers) {\n if (typeof provider === \"function\") {\n container.registerClass(provider);\n } else {\n const typed = provider as Provider & { provide: InjectionToken };\n container.register(typed.provide, typed);\n }\n }\n\n for (const controller of node.controllers) {\n if (!container.has(controller)) {\n container.registerClass(controller);\n }\n }\n\n for (const guard of node.guards) {\n if (typeof guard === \"function\" && !container.has(guard)) {\n container.registerClass(guard);\n }\n }\n }\n}\n\n/**\n * Walks the module tree once, depth-first, registering providers in the container\n * and collecting all module metadata into a graph structure.\n *\n * Detects circular module imports and deduplicates visited modules.\n */\nexport function walkModuleGraph(rootModule: Type, container: Container): ModuleGraph {\n const graph = buildModuleGraph(rootModule);\n registerModuleGraph(graph, container);\n return graph;\n}\n\ntype Diagnostic = {\n type: \"missing_dependency\" | \"export_violation\" | \"invalid_export\";\n message: string;\n};\n\n/**\n * Validates the module graph for:\n * 1. All provider dependencies are resolvable (replaces container.validateDependencies)\n * 2. Cross-module dependencies respect export boundaries\n * 3. Exported tokens are actually owned by the module\n */\nexport function validateModuleGraph(graph: ModuleGraph, container: Container): void {\n const diagnostics: Diagnostic[] = [];\n\n for (const [, node] of graph) {\n // Check that exported tokens are owned by this module\n for (const exportToken of node.exports) {\n if (!node.ownTokens.has(exportToken)) {\n diagnostics.push({\n type: \"invalid_export\",\n message:\n `${node.moduleClass.name} exports ${tokenToString(exportToken)}, ` +\n \"but that token is not provided by this module.\",\n });\n }\n }\n\n // Compute visible tokens: own + exported tokens from imported modules\n const visibleTokens = new Set<InjectionToken>(node.ownTokens);\n for (const importedModule of node.imports) {\n const importedNode = graph.get(importedModule);\n if (importedNode) {\n for (const exportedToken of importedNode.exports) {\n visibleTokens.add(exportedToken);\n }\n }\n }\n\n // Validate each provider's dependencies\n for (const provider of node.providers) {\n let depTokens: InjectionToken[];\n let consumerToken: InjectionToken;\n\n if (typeof provider === \"function\") {\n consumerToken = provider;\n depTokens = getClassDependencyTokens(provider);\n } else {\n const typed = provider as Provider & { provide: InjectionToken };\n consumerToken = typed.provide;\n depTokens = getProviderDependencyTokens(typed);\n }\n\n checkDependencies(\n consumerToken,\n depTokens,\n visibleTokens,\n node.moduleClass,\n graph,\n container,\n diagnostics,\n );\n }\n\n // Validate each controller's dependencies\n for (const controller of node.controllers) {\n const depTokens = getClassDependencyTokens(controller);\n checkDependencies(\n controller,\n depTokens,\n visibleTokens,\n node.moduleClass,\n graph,\n container,\n diagnostics,\n );\n }\n\n // Validate each class-based guard's dependencies\n for (const guard of node.guards) {\n if (typeof guard === \"function\") {\n const depTokens = getClassDependencyTokens(guard);\n checkDependencies(\n guard,\n depTokens,\n visibleTokens,\n node.moduleClass,\n graph,\n container,\n diagnostics,\n );\n }\n }\n }\n\n debug(\"validateModuleGraph: %d modules, %d diagnostics\", graph.size, diagnostics.length);\n\n if (diagnostics.length > 0) {\n const details = diagnostics.map((d) => ` ${d.message}`).join(\"\\n\");\n throw new Error(`Module validation errors:\\n\\n${details}`);\n }\n}\n\nfunction checkDependencies(\n consumer: InjectionToken,\n depTokens: InjectionToken[],\n visibleTokens: Set<InjectionToken>,\n moduleClass: Type,\n graph: ModuleGraph,\n container: Container,\n diagnostics: Diagnostic[],\n): void {\n for (const dep of depTokens) {\n if (visibleTokens.has(dep)) continue;\n\n // Check if the token is owned by some module in the graph\n const ownerModule = findTokenOwner(dep, graph);\n if (ownerModule) {\n const ownerNode = graph.get(ownerModule)!;\n if (ownerNode.exports.has(dep)) {\n // Token IS exported from its owner, but that module isn't directly imported\n diagnostics.push({\n type: \"export_violation\",\n message:\n `${tokenToString(consumer)} in ${moduleClass.name} depends on ${tokenToString(dep)}, ` +\n `which is exported from ${ownerModule.name} but ${moduleClass.name} does not import ${ownerModule.name}. ` +\n `Add ${ownerModule.name} to ${moduleClass.name}'s \"imports\" array.`,\n });\n } else {\n // Token exists but isn't exported from its owner\n diagnostics.push({\n type: \"export_violation\",\n message:\n `${tokenToString(consumer)} in ${moduleClass.name} depends on ${tokenToString(dep)}, ` +\n `but ${tokenToString(dep)} is not exported from ${ownerModule.name}. ` +\n `Add ${tokenToString(dep)} to ${ownerModule.name}'s \"exports\" array.`,\n });\n }\n continue;\n }\n\n // Unregistered class token — auto-adopt into this module's visible scope.\n // The class becomes available within this module only (not exported).\n // Its own dependencies are recursively validated against the same boundaries.\n if (typeof dep === \"function\") {\n if (!container.has(dep)) {\n container.registerClass(dep);\n }\n visibleTokens.add(dep);\n\n const adoptedDeps = getClassDependencyTokens(dep);\n checkDependencies(\n dep,\n adoptedDeps,\n visibleTokens,\n moduleClass,\n graph,\n container,\n diagnostics,\n );\n continue;\n }\n\n // Truly missing — no provider registered for this non-class token\n diagnostics.push({\n type: \"missing_dependency\",\n message:\n `${tokenToString(consumer)} in ${moduleClass.name} requires ${tokenToString(dep)} — no provider registered. ` +\n 'Ensure the module providing it is included in your module\\'s \"imports\" array, ' +\n \"or register a provider for it directly.\",\n });\n }\n}\n\nfunction findTokenOwner(token: InjectionToken, graph: ModuleGraph): Type | null {\n for (const [, node] of graph) {\n if (node.ownTokens.has(token)) {\n return node.moduleClass;\n }\n }\n return null;\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type {\n HttpMethod,\n CelerityLayer,\n FunctionHandlerDefinition,\n GuardDefinition,\n Type,\n Schema,\n InjectionToken,\n} from \"@celerity-sdk/types\";\nimport { joinHandlerPath } from \"@celerity-sdk/common\";\nimport {\n CONTROLLER_METADATA,\n HTTP_METHOD_METADATA,\n ROUTE_PATH_METADATA,\n PARAM_METADATA,\n GUARD_PROTECTEDBY_METADATA,\n GUARD_CUSTOM_METADATA,\n LAYER_METADATA,\n PUBLIC_METADATA,\n CUSTOM_METADATA,\n} from \"../../metadata/constants\";\nimport type { ControllerMetadata } from \"../../decorators/controller\";\nimport type { ParamMetadata } from \"../../decorators/params\";\nimport { validate, type ValidationSchemas } from \"../../layers/validate\";\nimport type { Container } from \"../../di/container\";\nimport { buildModuleGraph, registerModuleGraph } from \"../../bootstrap/module-graph\";\nimport type { ModuleGraph } from \"../../bootstrap/module-graph\";\nimport type { HandlerRegistry } from \"../registry\";\n\nconst debug = createDebug(\"celerity:core:scanner:http\");\n\n/**\n * Scans the module graph for HTTP class handlers and function handlers,\n * registering them in the handler registry.\n */\nexport async function scanHttpHandlers(\n graph: ModuleGraph,\n container: Container,\n registry: HandlerRegistry,\n): Promise<void> {\n for (const [, node] of graph) {\n for (const controllerClass of node.controllers) {\n await scanClassHandler(controllerClass, container, registry);\n }\n for (const fnHandler of node.functionHandlers) {\n scanFunctionHandler(fnHandler, registry);\n }\n }\n}\n\n/**\n * Scans the module graph for guard definitions (class-based and function-based),\n * registering them in the handler registry.\n */\nexport async function scanHttpGuards(\n graph: ModuleGraph,\n container: Container,\n registry: HandlerRegistry,\n): Promise<void> {\n for (const [, node] of graph) {\n for (const guard of node.guards) {\n if (typeof guard === \"function\") {\n await scanClassGuard(guard, container, registry);\n } else {\n scanFunctionGuard(guard, registry);\n }\n }\n }\n}\n\n/**\n * Convenience function that builds a module graph, registers providers,\n * and scans for HTTP handlers and guards in a single call.\n */\nexport async function scanModule(\n moduleClass: Type,\n container: Container,\n registry: HandlerRegistry,\n): Promise<void> {\n const graph = buildModuleGraph(moduleClass);\n registerModuleGraph(graph, container);\n await scanHttpHandlers(graph, container, registry);\n await scanHttpGuards(graph, container, registry);\n}\n\nasync function scanClassHandler(\n controllerClass: Type,\n container: Container,\n registry: HandlerRegistry,\n): Promise<void> {\n const controllerMeta: ControllerMetadata | undefined = Reflect.getOwnMetadata(\n CONTROLLER_METADATA,\n controllerClass,\n );\n if (!controllerMeta) return;\n\n const instance = await container.resolve<object>(controllerClass);\n const prototype = Object.getPrototypeOf(instance) as object;\n const methods = Object.getOwnPropertyNames(prototype).filter((name) => name !== \"constructor\");\n\n const classProtectedBy: string[] =\n Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, controllerClass) ?? [];\n const classLayers: (CelerityLayer | Type<CelerityLayer>)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, controllerClass) ?? [];\n const classCustomMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, controllerClass) ?? {};\n\n for (const methodName of methods) {\n const method: HttpMethod | undefined = Reflect.getOwnMetadata(\n HTTP_METHOD_METADATA,\n prototype,\n methodName,\n );\n if (!method) continue;\n\n const routePath: string =\n Reflect.getOwnMetadata(ROUTE_PATH_METADATA, prototype, methodName) ?? \"/\";\n const fullPath = joinHandlerPath(controllerMeta.prefix ?? \"\", routePath);\n\n const methodProtectedBy: string[] =\n Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, prototype, methodName) ?? [];\n const methodLayers: (CelerityLayer | Type<CelerityLayer>)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, prototype, methodName) ?? [];\n const paramMetadata: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, prototype, methodName) ?? [];\n const isPublic: boolean =\n Reflect.getOwnMetadata(PUBLIC_METADATA, prototype, methodName) === true;\n const methodCustomMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, prototype, methodName) ?? {};\n\n const descriptor = Object.getOwnPropertyDescriptor(prototype, methodName);\n if (!descriptor?.value || typeof descriptor.value !== \"function\") continue;\n\n const layers = [...classLayers, ...methodLayers];\n const validationSchemas = buildValidationSchemasFromParams(paramMetadata);\n if (validationSchemas) {\n layers.unshift(validate(validationSchemas));\n }\n\n debug(\"scanClassHandler: %s %s (%s.%s)\", method, fullPath, controllerClass.name, methodName);\n registry.register({\n type: \"http\",\n path: fullPath,\n method,\n protectedBy: [...classProtectedBy, ...methodProtectedBy],\n layers,\n isPublic,\n paramMetadata,\n customMetadata: { ...classCustomMetadata, ...methodCustomMetadata },\n handlerFn: descriptor.value as (...args: unknown[]) => unknown,\n handlerInstance: instance,\n });\n }\n}\n\nfunction scanFunctionHandler(\n definition: FunctionHandlerDefinition,\n registry: HandlerRegistry,\n): void {\n if (definition.type !== \"http\") return;\n\n const meta = definition.metadata as {\n path?: string;\n method?: HttpMethod;\n schema?: { body?: Schema; query?: Schema; params?: Schema; headers?: Schema };\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n inject?: InjectionToken[];\n customMetadata?: Record<string, unknown>;\n };\n\n const layers = [...(meta.layers ?? [])];\n if (meta.schema) {\n const schemas: Record<string, Schema> = {};\n if (meta.schema.body) schemas.body = meta.schema.body;\n if (meta.schema.query) schemas.query = meta.schema.query;\n if (meta.schema.params) schemas.params = meta.schema.params;\n if (meta.schema.headers) schemas.headers = meta.schema.headers;\n if (Object.keys(schemas).length > 0) {\n layers.unshift(validate(schemas));\n }\n }\n\n debug(\n \"scanFunctionHandler: %s\",\n definition.id ?? (meta.method && meta.path ? `${meta.method} ${meta.path}` : \"(no route)\"),\n );\n registry.register({\n type: \"http\",\n id: definition.id,\n path: meta.path,\n method: meta.method,\n protectedBy: [],\n layers,\n isPublic: false,\n paramMetadata: [],\n customMetadata: meta.customMetadata ?? {},\n handlerFn: definition.handler,\n isFunctionHandler: true,\n injectTokens: meta.inject ?? [],\n });\n}\n\nasync function scanClassGuard(\n guardClass: Type,\n container: Container,\n registry: HandlerRegistry,\n): Promise<void> {\n const guardName: string | undefined = Reflect.getOwnMetadata(GUARD_CUSTOM_METADATA, guardClass);\n if (!guardName) return;\n\n const instance = await container.resolve<object>(guardClass);\n const prototype = Object.getPrototypeOf(instance) as object;\n const descriptor = Object.getOwnPropertyDescriptor(prototype, \"check\");\n if (!descriptor?.value || typeof descriptor.value !== \"function\") {\n debug(\"scanClassGuard: %s has no check() method, skipping\", guardClass.name);\n return;\n }\n\n const paramMetadata: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, prototype, \"check\") ?? [];\n const customMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, guardClass) ?? {};\n\n debug(\"scanClassGuard: %s (name=%s)\", guardClass.name, guardName);\n registry.registerGuard({\n name: guardName,\n handlerFn: descriptor.value as (...args: unknown[]) => unknown,\n handlerInstance: instance,\n paramMetadata,\n customMetadata,\n });\n}\n\nfunction scanFunctionGuard(definition: GuardDefinition, registry: HandlerRegistry): void {\n const name = definition.name;\n if (!name) {\n debug(\"scanFunctionGuard: no name, skipping\");\n return;\n }\n\n const meta = (definition.metadata ?? {}) as {\n inject?: InjectionToken[];\n customMetadata?: Record<string, unknown>;\n };\n\n debug(\"scanFunctionGuard: %s\", name);\n registry.registerGuard({\n name,\n handlerFn: definition.handler,\n customMetadata: meta.customMetadata ?? {},\n paramMetadata: [],\n isFunctionGuard: true,\n injectTokens: meta.inject ?? [],\n });\n}\n\nconst PARAM_TYPE_TO_SCHEMA_KEY: Record<string, keyof ValidationSchemas> = {\n body: \"body\",\n query: \"query\",\n param: \"params\",\n headers: \"headers\",\n};\n\nfunction buildValidationSchemasFromParams(\n paramMetadata: ParamMetadata[],\n): ValidationSchemas | null {\n const wholeObjectSchemas = new Map<keyof ValidationSchemas, Schema>();\n const perKeySchemas = new Map<keyof ValidationSchemas, Map<string, Schema>>();\n\n for (const meta of paramMetadata) {\n if (!meta.schema) continue;\n const schemaKey = PARAM_TYPE_TO_SCHEMA_KEY[meta.type];\n if (!schemaKey) continue;\n\n if (meta.key) {\n let keyMap = perKeySchemas.get(schemaKey);\n if (!keyMap) {\n keyMap = new Map();\n perKeySchemas.set(schemaKey, keyMap);\n }\n keyMap.set(meta.key, meta.schema);\n } else {\n wholeObjectSchemas.set(schemaKey, meta.schema);\n }\n }\n\n const schemas: ValidationSchemas = {};\n let hasSchemas = false;\n\n for (const key of [\"body\", \"query\", \"params\", \"headers\"] as (keyof ValidationSchemas)[]) {\n if (wholeObjectSchemas.has(key)) {\n schemas[key] = wholeObjectSchemas.get(key)!;\n hasSchemas = true;\n } else if (perKeySchemas.has(key)) {\n schemas[key] = composeKeySchemas(perKeySchemas.get(key)!);\n hasSchemas = true;\n }\n }\n\n return hasSchemas ? schemas : null;\n}\n\nfunction composeKeySchemas(keySchemas: Map<string, Schema>): Schema {\n return {\n parse(data: unknown): Record<string, unknown> {\n const record = data as Record<string, unknown>;\n const result: Record<string, unknown> = { ...record };\n for (const [key, schema] of keySchemas) {\n if (key in result) {\n result[key] = schema.parse(result[key]);\n }\n }\n return result;\n },\n };\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type {\n CelerityLayer,\n FunctionHandlerDefinition,\n Type,\n InjectionToken,\n Schema,\n} from \"@celerity-sdk/types\";\nimport {\n WEBSOCKET_CONTROLLER_METADATA,\n WEBSOCKET_EVENT_METADATA,\n PARAM_METADATA,\n GUARD_PROTECTEDBY_METADATA,\n LAYER_METADATA,\n PUBLIC_METADATA,\n CUSTOM_METADATA,\n} from \"../../metadata/constants\";\nimport type { WebSocketEventMetadata } from \"../../decorators/websocket\";\nimport type { ParamMetadata } from \"../../decorators/params\";\nimport { validate } from \"../../layers/validate\";\nimport type { Container } from \"../../di/container\";\nimport type { ModuleGraph } from \"../../bootstrap/module-graph\";\nimport type { HandlerRegistry } from \"../registry\";\n\nconst debug = createDebug(\"celerity:core:scanner:websocket\");\n\n/**\n * Scans the module graph for WebSocket class handlers and function handlers,\n * registering them in the handler registry.\n */\nexport async function scanWebSocketHandlers(\n graph: ModuleGraph,\n container: Container,\n registry: HandlerRegistry,\n): Promise<void> {\n for (const [, node] of graph) {\n for (const controllerClass of node.controllers) {\n await scanClassHandler(controllerClass, container, registry);\n }\n for (const fnHandler of node.functionHandlers) {\n scanFunctionHandler(fnHandler, registry);\n }\n }\n}\n\nasync function scanClassHandler(\n controllerClass: Type,\n container: Container,\n registry: HandlerRegistry,\n): Promise<void> {\n const isWsController: boolean | undefined = Reflect.getOwnMetadata(\n WEBSOCKET_CONTROLLER_METADATA,\n controllerClass,\n );\n if (!isWsController) return;\n\n const instance = await container.resolve<object>(controllerClass);\n const prototype = Object.getPrototypeOf(instance) as object;\n const methods = Object.getOwnPropertyNames(prototype).filter((name) => name !== \"constructor\");\n\n const classProtectedBy: string[] =\n Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, controllerClass) ?? [];\n const classLayers: (CelerityLayer | Type<CelerityLayer>)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, controllerClass) ?? [];\n const classCustomMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, controllerClass) ?? {};\n const classIsPublic: boolean = Reflect.getOwnMetadata(PUBLIC_METADATA, controllerClass) === true;\n\n for (const methodName of methods) {\n const eventMeta: WebSocketEventMetadata | undefined = Reflect.getOwnMetadata(\n WEBSOCKET_EVENT_METADATA,\n prototype,\n methodName,\n );\n if (!eventMeta) continue;\n\n const methodLayers: (CelerityLayer | Type<CelerityLayer>)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, prototype, methodName) ?? [];\n const paramMetadata: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, prototype, methodName) ?? [];\n const methodCustomMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, prototype, methodName) ?? {};\n\n const descriptor = Object.getOwnPropertyDescriptor(prototype, methodName);\n if (!descriptor?.value || typeof descriptor.value !== \"function\") continue;\n\n debug(\n \"scanClassHandler: %s %s (%s.%s)\",\n eventMeta.eventType,\n eventMeta.route,\n controllerClass.name,\n methodName,\n );\n const layers = [...classLayers, ...methodLayers];\n const msgBodyParam = paramMetadata.find((p) => p.type === \"messageBody\");\n if (msgBodyParam?.schema) {\n layers.unshift(validate({ wsMessageBody: msgBodyParam.schema }));\n }\n\n registry.register({\n type: \"websocket\",\n route: eventMeta.route,\n protectedBy: classProtectedBy,\n layers,\n isPublic: classIsPublic,\n paramMetadata,\n customMetadata: { ...classCustomMetadata, ...methodCustomMetadata },\n handlerFn: descriptor.value as (...args: unknown[]) => unknown,\n handlerInstance: instance,\n });\n }\n}\n\nfunction scanFunctionHandler(\n definition: FunctionHandlerDefinition,\n registry: HandlerRegistry,\n): void {\n if (definition.type !== \"websocket\") return;\n\n const meta = definition.metadata as {\n route?: string;\n protectedBy?: string[];\n schema?: Schema;\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n inject?: InjectionToken[];\n customMetadata?: Record<string, unknown>;\n };\n\n const layers = [...(meta.layers ?? [])];\n if (meta.schema) {\n layers.unshift(validate({ wsMessageBody: meta.schema }));\n }\n\n debug(\"scanFunctionHandler: %s\", definition.id ?? meta.route ?? \"(no route)\");\n registry.register({\n type: \"websocket\",\n id: definition.id,\n route: meta.route ?? \"$default\",\n protectedBy: meta.protectedBy ?? [],\n layers,\n isPublic: false,\n paramMetadata: [],\n customMetadata: meta.customMetadata ?? {},\n handlerFn: definition.handler,\n isFunctionHandler: true,\n injectTokens: meta.inject ?? [],\n });\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type {\n CelerityLayer,\n FunctionHandlerDefinition,\n Type,\n InjectionToken,\n Schema,\n} from \"@celerity-sdk/types\";\nimport {\n CONSUMER_METADATA,\n CONSUMER_HANDLER_METADATA,\n PARAM_METADATA,\n LAYER_METADATA,\n CUSTOM_METADATA,\n} from \"../../metadata/constants\";\nimport type { ConsumerHandlerMetadata } from \"../../decorators/consumer\";\nimport type { ParamMetadata } from \"../../decorators/params\";\nimport { validate } from \"../../layers/validate\";\nimport type { Container } from \"../../di/container\";\nimport type { ModuleGraph } from \"../../bootstrap/module-graph\";\nimport type { HandlerRegistry } from \"../registry\";\n\nconst debug = createDebug(\"celerity:core:scanner:consumer\");\n\n/**\n * Scans the module graph for Consumer class handlers and function handlers,\n * registering them in the handler registry.\n */\nexport async function scanConsumerHandlers(\n graph: ModuleGraph,\n container: Container,\n registry: HandlerRegistry,\n): Promise<void> {\n for (const [, node] of graph) {\n for (const controllerClass of node.controllers) {\n await scanClassHandler(controllerClass, container, registry);\n }\n for (const fnHandler of node.functionHandlers) {\n scanFunctionHandler(fnHandler, registry);\n }\n }\n}\n\nasync function scanClassHandler(\n controllerClass: Type,\n container: Container,\n registry: HandlerRegistry,\n): Promise<void> {\n const consumerMeta = Reflect.getOwnMetadata(CONSUMER_METADATA, controllerClass);\n if (!consumerMeta) return;\n\n const instance = await container.resolve<object>(controllerClass);\n const prototype = Object.getPrototypeOf(instance) as object;\n const methods = Object.getOwnPropertyNames(prototype).filter((name) => name !== \"constructor\");\n\n const classLayers: (CelerityLayer | Type<CelerityLayer>)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, controllerClass) ?? [];\n const classCustomMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, controllerClass) ?? {};\n\n for (const methodName of methods) {\n const handlerMeta: ConsumerHandlerMetadata | undefined = Reflect.getOwnMetadata(\n CONSUMER_HANDLER_METADATA,\n prototype,\n methodName,\n );\n if (!handlerMeta) continue;\n\n const methodLayers: (CelerityLayer | Type<CelerityLayer>)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, prototype, methodName) ?? [];\n const paramMetadata: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, prototype, methodName) ?? [];\n const methodCustomMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, prototype, methodName) ?? {};\n\n const descriptor = Object.getOwnPropertyDescriptor(prototype, methodName);\n if (!descriptor?.value || typeof descriptor.value !== \"function\") continue;\n\n const handlerTag = handlerMeta.route ?? methodName;\n\n const layers = [...classLayers, ...methodLayers];\n const messageParam = paramMetadata.find((p) => p.type === \"messages\");\n if (messageParam?.schema) {\n layers.unshift(validate({ consumerMessage: messageParam.schema }));\n }\n\n debug(\"scanClassHandler: tag=%s (%s.%s)\", handlerTag, controllerClass.name, methodName);\n registry.register({\n type: \"consumer\",\n handlerTag,\n layers,\n paramMetadata,\n customMetadata: { ...classCustomMetadata, ...methodCustomMetadata },\n handlerFn: descriptor.value as (...args: unknown[]) => unknown,\n handlerInstance: instance,\n });\n }\n}\n\nfunction scanFunctionHandler(\n definition: FunctionHandlerDefinition,\n registry: HandlerRegistry,\n): void {\n if (definition.type !== \"consumer\") return;\n\n const meta = definition.metadata as {\n route?: string;\n messageSchema?: Schema;\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n inject?: InjectionToken[];\n customMetadata?: Record<string, unknown>;\n };\n\n const handlerTag = meta.route ?? definition.id ?? \"default\";\n\n const layers = [...(meta.layers ?? [])];\n if (meta.messageSchema) {\n layers.unshift(validate({ consumerMessage: meta.messageSchema }));\n }\n\n debug(\"scanFunctionHandler: tag=%s\", handlerTag);\n registry.register({\n type: \"consumer\",\n id: definition.id,\n handlerTag,\n layers,\n paramMetadata: [],\n customMetadata: meta.customMetadata ?? {},\n handlerFn: definition.handler,\n isFunctionHandler: true,\n injectTokens: meta.inject ?? [],\n });\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type {\n CelerityLayer,\n FunctionHandlerDefinition,\n Type,\n InjectionToken,\n Schema,\n} from \"@celerity-sdk/types\";\nimport {\n SCHEDULE_HANDLER_METADATA,\n PARAM_METADATA,\n LAYER_METADATA,\n CUSTOM_METADATA,\n} from \"../../metadata/constants\";\nimport type { ScheduleHandlerMetadata } from \"../../decorators/schedule\";\nimport type { ParamMetadata } from \"../../decorators/params\";\nimport { validate } from \"../../layers/validate\";\nimport type { Container } from \"../../di/container\";\nimport type { ModuleGraph } from \"../../bootstrap/module-graph\";\nimport type { HandlerRegistry } from \"../registry\";\n\nconst debug = createDebug(\"celerity:core:scanner:schedule\");\n\n/**\n * Scans the module graph for schedule handlers — a cross-cutting scan that\n * walks ALL controllers (any class in `controllers`) looking for methods\n * decorated with `@ScheduleHandler()`. Also scans function handlers with\n * `type: \"schedule\"`.\n */\nexport async function scanScheduleHandlers(\n graph: ModuleGraph,\n container: Container,\n registry: HandlerRegistry,\n): Promise<void> {\n for (const [, node] of graph) {\n for (const controllerClass of node.controllers) {\n await scanClassHandler(controllerClass, container, registry);\n }\n for (const fnHandler of node.functionHandlers) {\n scanFunctionHandler(fnHandler, registry);\n }\n }\n}\n\nasync function scanClassHandler(\n controllerClass: Type,\n container: Container,\n registry: HandlerRegistry,\n): Promise<void> {\n // Cross-cutting: no class-level metadata check — scan ALL controllers\n const instance = await container.resolve<object>(controllerClass);\n const prototype = Object.getPrototypeOf(instance) as object;\n const methods = Object.getOwnPropertyNames(prototype).filter((name) => name !== \"constructor\");\n\n const classLayers: (CelerityLayer | Type<CelerityLayer>)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, controllerClass) ?? [];\n const classCustomMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, controllerClass) ?? {};\n\n for (const methodName of methods) {\n const handlerMeta: ScheduleHandlerMetadata | undefined = Reflect.getOwnMetadata(\n SCHEDULE_HANDLER_METADATA,\n prototype,\n methodName,\n );\n if (!handlerMeta) continue;\n\n const methodLayers: (CelerityLayer | Type<CelerityLayer>)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, prototype, methodName) ?? [];\n const paramMetadata: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, prototype, methodName) ?? [];\n const methodCustomMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, prototype, methodName) ?? {};\n\n const descriptor = Object.getOwnPropertyDescriptor(prototype, methodName);\n if (!descriptor?.value || typeof descriptor.value !== \"function\") continue;\n\n const handlerTag = handlerMeta.scheduleId ?? methodName;\n\n const layers = [...classLayers, ...methodLayers];\n const inputParam = paramMetadata.find((p) => p.type === \"scheduleInput\");\n if (inputParam?.schema) {\n layers.unshift(validate({ scheduleInput: inputParam.schema }));\n }\n\n debug(\"scanClassHandler: tag=%s (%s.%s)\", handlerTag, controllerClass.name, methodName);\n registry.register({\n type: \"schedule\",\n handlerTag,\n layers,\n paramMetadata,\n customMetadata: {\n ...classCustomMetadata,\n ...methodCustomMetadata,\n ...(handlerMeta.schedule ? { schedule: handlerMeta.schedule } : {}),\n ...(handlerMeta.scheduleId ? { scheduleId: handlerMeta.scheduleId } : {}),\n },\n handlerFn: descriptor.value as (...args: unknown[]) => unknown,\n handlerInstance: instance,\n });\n }\n}\n\nfunction scanFunctionHandler(\n definition: FunctionHandlerDefinition,\n registry: HandlerRegistry,\n): void {\n if (definition.type !== \"schedule\") return;\n\n const meta = definition.metadata as {\n scheduleId?: string;\n schedule?: string;\n schema?: Schema;\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n inject?: InjectionToken[];\n customMetadata?: Record<string, unknown>;\n };\n\n const handlerTag = meta.scheduleId ?? definition.id ?? \"default\";\n\n const layers = [...(meta.layers ?? [])];\n if (meta.schema) {\n layers.unshift(validate({ scheduleInput: meta.schema }));\n }\n\n const customMetadata: Record<string, unknown> = { ...(meta.customMetadata ?? {}) };\n if (meta.schedule) customMetadata.schedule = meta.schedule;\n if (meta.scheduleId) customMetadata.scheduleId = meta.scheduleId;\n\n debug(\"scanFunctionHandler: tag=%s\", handlerTag);\n registry.register({\n type: \"schedule\",\n id: definition.id,\n handlerTag,\n layers,\n paramMetadata: [],\n customMetadata,\n handlerFn: definition.handler,\n isFunctionHandler: true,\n injectTokens: meta.inject ?? [],\n });\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type {\n CelerityLayer,\n FunctionHandlerDefinition,\n Type,\n InjectionToken,\n Schema,\n} from \"@celerity-sdk/types\";\nimport {\n INVOKE_METADATA,\n PARAM_METADATA,\n LAYER_METADATA,\n CUSTOM_METADATA,\n} from \"../../metadata/constants\";\nimport type { InvokeMetadata } from \"../../decorators/invoke\";\nimport type { ParamMetadata } from \"../../decorators/params\";\nimport { validate } from \"../../layers/validate\";\nimport type { Container } from \"../../di/container\";\nimport type { ModuleGraph } from \"../../bootstrap/module-graph\";\nimport type { HandlerRegistry } from \"../registry\";\n\nconst debug = createDebug(\"celerity:core:scanner:custom\");\n\n/**\n * Scans the module graph for custom/invocable handlers — a cross-cutting scan\n * that walks ALL controllers (any class in `controllers`) looking for methods\n * decorated with `@Invoke()`. Also scans function handlers with\n * `type: \"custom\"`.\n */\nexport async function scanCustomHandlers(\n graph: ModuleGraph,\n container: Container,\n registry: HandlerRegistry,\n): Promise<void> {\n for (const [, node] of graph) {\n for (const controllerClass of node.controllers) {\n await scanClassHandler(controllerClass, container, registry);\n }\n for (const fnHandler of node.functionHandlers) {\n scanFunctionHandler(fnHandler, registry);\n }\n }\n}\n\nasync function scanClassHandler(\n controllerClass: Type,\n container: Container,\n registry: HandlerRegistry,\n): Promise<void> {\n // Cross-cutting: no class-level metadata check — scan ALL controllers\n const instance = await container.resolve<object>(controllerClass);\n const prototype = Object.getPrototypeOf(instance) as object;\n const methods = Object.getOwnPropertyNames(prototype).filter((name) => name !== \"constructor\");\n\n const classLayers: (CelerityLayer | Type<CelerityLayer>)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, controllerClass) ?? [];\n const classCustomMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, controllerClass) ?? {};\n\n for (const methodName of methods) {\n const invokeMeta: InvokeMetadata | undefined = Reflect.getOwnMetadata(\n INVOKE_METADATA,\n prototype,\n methodName,\n );\n if (!invokeMeta) continue;\n\n const methodLayers: (CelerityLayer | Type<CelerityLayer>)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, prototype, methodName) ?? [];\n const paramMetadata: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, prototype, methodName) ?? [];\n const methodCustomMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, prototype, methodName) ?? {};\n\n const descriptor = Object.getOwnPropertyDescriptor(prototype, methodName);\n if (!descriptor?.value || typeof descriptor.value !== \"function\") continue;\n\n const layers = [...classLayers, ...methodLayers];\n const payloadParam = paramMetadata.find((p) => p.type === \"payload\");\n if (payloadParam?.schema) {\n layers.unshift(validate({ customPayload: payloadParam.schema }));\n }\n\n debug(\"scanClassHandler: name=%s (%s.%s)\", invokeMeta.name, controllerClass.name, methodName);\n registry.register({\n type: \"custom\",\n name: invokeMeta.name,\n layers,\n paramMetadata,\n customMetadata: { ...classCustomMetadata, ...methodCustomMetadata },\n handlerFn: descriptor.value as (...args: unknown[]) => unknown,\n handlerInstance: instance,\n });\n }\n}\n\nfunction scanFunctionHandler(\n definition: FunctionHandlerDefinition,\n registry: HandlerRegistry,\n): void {\n if (definition.type !== \"custom\") return;\n\n const meta = definition.metadata as {\n name?: string;\n schema?: Schema;\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n inject?: InjectionToken[];\n customMetadata?: Record<string, unknown>;\n };\n\n const name = meta.name ?? definition.id ?? \"default\";\n\n const layers = [...(meta.layers ?? [])];\n if (meta.schema) {\n layers.unshift(validate({ customPayload: meta.schema }));\n }\n\n debug(\"scanFunctionHandler: name=%s\", name);\n registry.register({\n type: \"custom\",\n id: definition.id,\n name,\n layers,\n paramMetadata: [],\n customMetadata: meta.customMetadata ?? {},\n handlerFn: definition.handler,\n isFunctionHandler: true,\n injectTokens: meta.inject ?? [],\n });\n}\n","import createDebug from \"debug\";\nimport type { CelerityLayer, Type } from \"@celerity-sdk/types\";\nimport type { Container } from \"../di/container\";\nimport type { HandlerRegistry } from \"../handlers/registry\";\nimport { disposeLayers } from \"../layers/dispose\";\n\nconst debug = createDebug(\"celerity:core:factory\");\n\nexport class CelerityApplication {\n constructor(\n private registry: HandlerRegistry,\n private container: Container,\n private systemLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n private appLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n private runtimeApp?: unknown,\n ) {}\n\n async start(): Promise<void> {\n if (this.runtimeApp && typeof this.runtimeApp === \"object\") {\n const app = this.runtimeApp as { run(block: boolean): Promise<void> };\n await app.run(false);\n }\n }\n\n async close(): Promise<void> {\n debug(\"close: shutting down application\");\n if (this.runtimeApp && typeof this.runtimeApp === \"object\") {\n const app = this.runtimeApp as { shutdown(): Promise<void> };\n await app.shutdown();\n }\n\n await this.container.closeAll();\n await disposeLayers([...this.systemLayers, ...this.appLayers]);\n }\n\n getContainer(): Container {\n return this.container;\n }\n\n getRegistry(): HandlerRegistry {\n return this.registry;\n }\n\n getSystemLayers(): (CelerityLayer | Type<CelerityLayer>)[] {\n return this.systemLayers;\n }\n\n getAppLayers(): (CelerityLayer | Type<CelerityLayer>)[] {\n return this.appLayers;\n }\n}\n","import type { CelerityLayer, Type } from \"@celerity-sdk/types\";\nimport type { Container } from \"../di/container\";\nimport type { HandlerRegistry } from \"../handlers/registry\";\nimport type { ServerlessAdapter, ServerlessHandler } from \"../adapters/interfaces\";\nimport type { HandlerType } from \"../handlers/types\";\nimport type { PipelineOptions } from \"../handlers/http-pipeline\";\nimport { disposeLayers } from \"../layers/dispose\";\n\nconst HANDLER_CREATORS: Record<\n HandlerType,\n (\n adapter: ServerlessAdapter,\n registry: HandlerRegistry,\n options: PipelineOptions,\n ) => ServerlessHandler\n> = {\n http: (adapter, registry, options) => adapter.createHttpHandler(registry, options),\n websocket: (adapter, registry, options) => adapter.createWebSocketHandler(registry, options),\n consumer: (adapter, registry, options) => adapter.createConsumerHandler(registry, options),\n schedule: (adapter, registry, options) => adapter.createScheduleHandler(registry, options),\n custom: (adapter, registry, options) => adapter.createCustomHandler(registry, options),\n};\n\nexport class ServerlessApplication {\n private handler: ServerlessHandler | null = null;\n\n constructor(\n private registry: HandlerRegistry,\n private container: Container,\n private adapter: ServerlessAdapter,\n private systemLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n private appLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n ) {}\n\n createHandler(type: HandlerType): ServerlessHandler {\n const options: PipelineOptions = {\n container: this.container,\n systemLayers: this.systemLayers,\n appLayers: this.appLayers,\n };\n return HANDLER_CREATORS[type](this.adapter, this.registry, options);\n }\n\n async start(type: HandlerType = \"http\"): Promise<ServerlessHandler> {\n this.handler = this.createHandler(type);\n return this.handler;\n }\n\n async close(): Promise<void> {\n await this.container.closeAll();\n await disposeLayers([...this.systemLayers, ...this.appLayers]);\n }\n\n getHandler(): ServerlessHandler {\n if (!this.handler) {\n throw new Error(\"ServerlessApplication.start() must be called before getHandler()\");\n }\n return this.handler;\n }\n\n getContainer(): Container {\n return this.container;\n }\n\n getRegistry(): HandlerRegistry {\n return this.registry;\n }\n}\n","import createDebug from \"debug\";\nimport type {\n HttpRequest,\n HttpResponse,\n HttpHandlerContext,\n BaseHandlerContext,\n CelerityLayer,\n Type,\n ServiceContainer,\n} from \"@celerity-sdk/types\";\nimport { runLayerPipeline } from \"../layers/pipeline\";\nimport { HttpException } from \"../errors/http-exception\";\nimport { extractParam, type ParamType } from \"../decorators/params\";\nimport { buildHttpRequest, buildHttpContext } from \"../functions/context\";\nimport { HandlerMetadataStore } from \"../metadata/handler-metadata\";\nimport type { ResolvedHandlerBase } from \"./types\";\n\nconst debug = createDebug(\"celerity:core:pipeline\");\n\nexport type PipelineOptions = {\n container: ServiceContainer;\n systemLayers?: (CelerityLayer<BaseHandlerContext> | Type<CelerityLayer<BaseHandlerContext>>)[];\n appLayers?: (CelerityLayer<BaseHandlerContext> | Type<CelerityLayer<BaseHandlerContext>>)[];\n handlerName?: string;\n};\n\nexport async function executeHttpPipeline(\n handler: ResolvedHandlerBase,\n request: HttpRequest,\n options: PipelineOptions,\n): Promise<HttpResponse> {\n const context: HttpHandlerContext = {\n request,\n metadata: new HandlerMetadataStore({\n ...(handler.customMetadata ?? {}),\n ...(options.handlerName ? { handlerName: options.handlerName } : {}),\n }),\n container: options.container,\n };\n\n const allLayers = [\n ...(options.systemLayers ?? []),\n ...(options.appLayers ?? []),\n ...handler.layers,\n ];\n\n debug(\"%s %s — %d layers\", request.method, request.path, allLayers.length);\n\n try {\n const response = (await runLayerPipeline(\n allLayers,\n context,\n async () => {\n const style = handler.isFunctionHandler ? \"function\" : \"class\";\n debug(\"invoking %s handler\", style);\n const result = handler.isFunctionHandler\n ? await invokeFunctionHandler(handler, context)\n : await invokeClassHandler(handler, context);\n return normalizeResponse(result);\n },\n \"http\",\n )) as HttpResponse;\n\n debug(\"response %d\", response.status);\n return response;\n } catch (error) {\n if (error instanceof HttpException) {\n debug(\"HttpException %d: %s\", error.statusCode, error.message);\n return {\n status: error.statusCode,\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n message: error.message,\n ...(error.details ? { details: error.details } : {}),\n }),\n };\n }\n const message = error instanceof Error ? error.message : String(error);\n if (context.logger) {\n context.logger.error(\"Unhandled error in handler pipeline\", {\n error: message,\n ...(error instanceof Error && error.stack ? { stack: error.stack } : {}),\n });\n } else {\n console.error(\"Unhandled error in handler pipeline:\", error);\n }\n\n return {\n status: 500,\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ message: \"Internal Server Error\" }),\n };\n }\n}\n\nasync function invokeClassHandler(\n handler: ResolvedHandlerBase,\n context: HttpHandlerContext,\n): Promise<unknown> {\n const args: unknown[] = [];\n const sorted = [...handler.paramMetadata].sort((a, b) => a.index - b.index);\n\n for (const meta of sorted) {\n args[meta.index] = extractValidatedParam(\n meta.type,\n meta.key,\n context.request,\n context.metadata,\n );\n }\n\n return handler.handlerFn.apply(handler.handlerInstance, args);\n}\n\nconst VALIDATED_METADATA_KEYS: Partial<Record<ParamType, string>> = {\n body: \"validatedBody\",\n query: \"validatedQuery\",\n param: \"validatedParams\",\n headers: \"validatedHeaders\",\n};\n\nfunction extractValidatedParam(\n type: ParamType,\n key: string | undefined,\n request: HttpRequest,\n metadata: HttpHandlerContext[\"metadata\"],\n): unknown {\n const metaKey = VALIDATED_METADATA_KEYS[type];\n if (metaKey) {\n const validated = metadata.get(metaKey);\n if (validated !== undefined) {\n if (key && typeof validated === \"object\" && validated !== null) {\n return (validated as Record<string, unknown>)[key];\n }\n return validated;\n }\n }\n return extractParam(type, key, request);\n}\n\nasync function invokeFunctionHandler(\n handler: ResolvedHandlerBase,\n context: HttpHandlerContext,\n): Promise<unknown> {\n const req = buildHttpRequest(context.request, context.metadata);\n const ctx = buildHttpContext(\n context.request,\n context.metadata,\n context.container,\n context.logger,\n );\n\n if (handler.injectTokens && handler.injectTokens.length > 0) {\n const deps: unknown[] = [];\n for (const token of handler.injectTokens) {\n deps.push(await context.container.resolve(token));\n }\n return handler.handlerFn(req, ctx, ...deps);\n }\n\n return handler.handlerFn(req, ctx);\n}\n\nfunction normalizeResponse(result: unknown): HttpResponse {\n if (isHttpResponse(result)) {\n return result;\n }\n\n if (result === undefined || result === null) {\n return { status: 204 };\n }\n\n const body = typeof result === \"string\" ? result : JSON.stringify(result);\n return {\n status: 200,\n headers: { \"content-type\": \"application/json\" },\n body,\n };\n}\n\nfunction isHttpResponse(value: unknown): value is HttpResponse {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"status\" in value &&\n typeof (value as HttpResponse).status === \"number\"\n );\n}\n","import type {\n HttpMethod,\n HttpRequest,\n HandlerMetadata,\n ServiceContainer,\n CelerityLogger,\n} from \"@celerity-sdk/types\";\n\nexport type HttpHandlerRequest<TBody = unknown> = {\n method: HttpMethod;\n path: string;\n params: Record<string, string>;\n query: Record<string, string | string[]>;\n body: TBody;\n headers: Record<string, string | string[]>;\n cookies: Record<string, string>;\n auth: Record<string, unknown> | null;\n clientIp: string | null;\n userAgent: string | null;\n contentType: string | null;\n};\n\nexport type HttpFunctionContext = {\n requestId: string;\n requestTime: string;\n metadata: HandlerMetadata;\n container: ServiceContainer;\n /** Request-scoped logger set by TelemetryLayer. */\n logger?: CelerityLogger;\n raw: HttpRequest;\n};\n\nexport function buildHttpRequest(\n request: HttpRequest,\n metadata: HandlerMetadata,\n): HttpHandlerRequest {\n const validatedBody = metadata.get<unknown>(\"validatedBody\");\n let body: unknown;\n if (validatedBody !== undefined) {\n body = validatedBody;\n } else if (request.binaryBody) {\n body = request.binaryBody;\n } else if (request.textBody) {\n body = JSON.parse(request.textBody);\n } else {\n body = null;\n }\n\n return {\n method: request.method,\n path: request.path,\n params: metadata.get<Record<string, string>>(\"validatedParams\") ?? request.pathParams,\n query: metadata.get<Record<string, string | string[]>>(\"validatedQuery\") ?? request.query,\n body,\n headers: metadata.get<Record<string, string | string[]>>(\"validatedHeaders\") ?? request.headers,\n cookies: request.cookies,\n auth: request.auth,\n clientIp: request.clientIp,\n userAgent: request.userAgent,\n contentType: request.contentType,\n };\n}\n\nexport function buildHttpContext(\n request: HttpRequest,\n metadata: HandlerMetadata,\n container: ServiceContainer,\n logger?: CelerityLogger,\n): HttpFunctionContext {\n return {\n requestId: request.requestId,\n requestTime: request.requestTime,\n metadata,\n container,\n logger,\n raw: request,\n };\n}\n","import createDebug from \"debug\";\nimport type {\n WebSocketMessage,\n WebSocketHandlerContext,\n BaseHandlerContext,\n CelerityLayer,\n Type,\n ServiceContainer,\n} from \"@celerity-sdk/types\";\nimport { runLayerPipeline } from \"../layers/pipeline\";\nimport { HandlerMetadataStore } from \"../metadata/handler-metadata\";\nimport type { ResolvedHandlerBase } from \"./types\";\nimport type { ParamMetadata } from \"../decorators/params\";\n\nconst debug = createDebug(\"celerity:core:ws-pipeline\");\n\nexport type WebSocketPipelineOptions = {\n container: ServiceContainer;\n systemLayers?: (CelerityLayer<BaseHandlerContext> | Type<CelerityLayer<BaseHandlerContext>>)[];\n appLayers?: (CelerityLayer<BaseHandlerContext> | Type<CelerityLayer<BaseHandlerContext>>)[];\n handlerName?: string;\n};\n\nexport async function executeWebSocketPipeline(\n handler: ResolvedHandlerBase,\n message: WebSocketMessage,\n options: WebSocketPipelineOptions,\n): Promise<void> {\n const context: WebSocketHandlerContext = {\n message,\n metadata: new HandlerMetadataStore({\n ...(handler.customMetadata ?? {}),\n ...(options.handlerName ? { handlerName: options.handlerName } : {}),\n }),\n container: options.container,\n };\n\n const allLayers = [\n ...(options.systemLayers ?? []),\n ...(options.appLayers ?? []),\n ...handler.layers,\n ];\n\n debug(\"%s %s — %d layers\", message.eventType, message.connectionId, allLayers.length);\n\n try {\n await runLayerPipeline(\n allLayers,\n context,\n async () => {\n const style = handler.isFunctionHandler ? \"function\" : \"class\";\n debug(\"invoking %s handler\", style);\n if (handler.isFunctionHandler) {\n await invokeFunctionHandler(handler, context);\n } else {\n await invokeClassHandler(handler, context);\n }\n },\n \"websocket\",\n );\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n if (context.logger) {\n context.logger.error(\"Unhandled error in WebSocket handler pipeline\", {\n error: errorMessage,\n connectionId: message.connectionId,\n eventType: message.eventType,\n ...(error instanceof Error && error.stack ? { stack: error.stack } : {}),\n });\n } else {\n console.error(\"Unhandled error in WebSocket handler pipeline:\", error);\n }\n }\n}\n\nasync function invokeClassHandler(\n handler: ResolvedHandlerBase,\n context: WebSocketHandlerContext,\n): Promise<void> {\n const args: unknown[] = [];\n const sorted = [...handler.paramMetadata].sort((a, b) => a.index - b.index);\n\n for (const meta of sorted) {\n args[meta.index] = extractWebSocketParam(meta, context);\n }\n\n await handler.handlerFn.apply(handler.handlerInstance, args);\n}\n\nasync function invokeFunctionHandler(\n handler: ResolvedHandlerBase,\n context: WebSocketHandlerContext,\n): Promise<void> {\n const validatedBody = context.metadata.get(\"validatedMessageBody\");\n const message =\n validatedBody !== undefined ? { ...context.message, jsonBody: validatedBody } : context.message;\n\n if (handler.injectTokens && handler.injectTokens.length > 0) {\n const deps: unknown[] = [];\n for (const token of handler.injectTokens) {\n deps.push(await context.container.resolve(token));\n }\n await handler.handlerFn(message, context, ...deps);\n } else {\n await handler.handlerFn(message, context);\n }\n}\n\nfunction extractWebSocketParam(meta: ParamMetadata, context: WebSocketHandlerContext): unknown {\n const { message } = context;\n switch (meta.type) {\n case \"connectionId\":\n return message.connectionId;\n case \"messageBody\": {\n const validated = context.metadata.get(\"validatedMessageBody\");\n if (validated !== undefined) return validated;\n return message.jsonBody;\n }\n case \"messageId\":\n return message.messageId;\n case \"requestContext\":\n return message.requestContext;\n case \"eventType\":\n return message.eventType;\n default:\n return undefined;\n }\n}\n","import createDebug from \"debug\";\nimport type {\n ConsumerEventInput,\n ConsumerHandlerContext,\n ConsumerMessage,\n EventResult,\n MessageProcessingFailure,\n ValidatedConsumerMessage,\n BaseHandlerContext,\n CelerityLayer,\n Type,\n ServiceContainer,\n} from \"@celerity-sdk/types\";\nimport { runLayerPipeline } from \"../layers/pipeline\";\nimport { HandlerMetadataStore } from \"../metadata/handler-metadata\";\nimport type { ResolvedHandlerBase } from \"./types\";\nimport type { ParamMetadata } from \"../decorators/params\";\n\nconst debug = createDebug(\"celerity:core:consumer-pipeline\");\n\nexport type ConsumerPipelineOptions = {\n container: ServiceContainer;\n systemLayers?: (CelerityLayer<BaseHandlerContext> | Type<CelerityLayer<BaseHandlerContext>>)[];\n appLayers?: (CelerityLayer<BaseHandlerContext> | Type<CelerityLayer<BaseHandlerContext>>)[];\n handlerName?: string;\n};\n\nexport async function executeConsumerPipeline(\n handler: ResolvedHandlerBase,\n event: ConsumerEventInput,\n options: ConsumerPipelineOptions,\n): Promise<EventResult> {\n const context: ConsumerHandlerContext = {\n event,\n metadata: new HandlerMetadataStore({\n ...(handler.customMetadata ?? {}),\n ...(options.handlerName ? { handlerName: options.handlerName } : {}),\n }),\n container: options.container,\n };\n\n const allLayers = [\n ...(options.systemLayers ?? []),\n ...(options.appLayers ?? []),\n ...handler.layers,\n ];\n\n debug(\n \"tag=%s — %d messages, %d layers\",\n event.handlerTag,\n event.messages.length,\n allLayers.length,\n );\n\n let result: EventResult = { success: true };\n\n try {\n await runLayerPipeline(\n allLayers,\n context,\n async () => {\n const style = handler.isFunctionHandler ? \"function\" : \"class\";\n debug(\"invoking %s handler\", style);\n\n const validatedMessages =\n context.metadata.get<ValidatedConsumerMessage<unknown>[]>(\"validatedMessages\");\n const validationFailures =\n context.metadata.get<MessageProcessingFailure[]>(\"validationFailures\") ?? [];\n const rawMessages = validatedMessages ? undefined : event.messages;\n\n if (handler.isFunctionHandler) {\n result = await invokeFunctionHandler(handler, context, validatedMessages, rawMessages);\n } else {\n result = await invokeClassHandler(handler, context, validatedMessages, rawMessages);\n }\n\n if (validationFailures.length > 0) {\n const existing = result.failures ?? [];\n result = {\n ...result,\n success: result.success && validationFailures.length === 0,\n failures: [...validationFailures, ...existing],\n };\n }\n },\n \"consumer\",\n );\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n if (context.logger) {\n context.logger.error(\"Unhandled error in consumer handler pipeline\", {\n error: errorMessage,\n handlerTag: event.handlerTag,\n messageCount: event.messages.length,\n ...(error instanceof Error && error.stack ? { stack: error.stack } : {}),\n });\n } else {\n console.error(\"Unhandled error in consumer handler pipeline:\", error);\n }\n return { success: false, errorMessage };\n }\n\n return result;\n}\n\nasync function invokeClassHandler(\n handler: ResolvedHandlerBase,\n context: ConsumerHandlerContext,\n validatedMessages?: ValidatedConsumerMessage<unknown>[],\n rawMessages?: ConsumerMessage[],\n): Promise<EventResult> {\n const args: unknown[] = [];\n const sorted = [...handler.paramMetadata].sort((a, b) => a.index - b.index);\n\n for (const meta of sorted) {\n args[meta.index] = extractConsumerParam(meta, context, validatedMessages, rawMessages);\n }\n\n return (await handler.handlerFn.apply(handler.handlerInstance, args)) as EventResult;\n}\n\nasync function invokeFunctionHandler(\n handler: ResolvedHandlerBase,\n context: ConsumerHandlerContext,\n validatedMessages?: ValidatedConsumerMessage<unknown>[],\n _rawMessages?: ConsumerMessage[],\n): Promise<EventResult> {\n const deps: unknown[] = [];\n if (handler.injectTokens && handler.injectTokens.length > 0) {\n for (const token of handler.injectTokens) {\n deps.push(await context.container.resolve(token));\n }\n }\n\n // With schema: (messages: ValidatedConsumerMessage<T>[], ctx, ...deps)\n // Without schema: (event: ConsumerEventInput, ctx, ...deps)\n const firstArg = validatedMessages ?? context.event;\n return (await handler.handlerFn(firstArg, context, ...deps)) as EventResult;\n}\n\nfunction extractConsumerParam(\n meta: ParamMetadata,\n context: ConsumerHandlerContext,\n validatedMessages?: ValidatedConsumerMessage<unknown>[],\n rawMessages?: ConsumerMessage[],\n): unknown {\n switch (meta.type) {\n case \"messages\":\n return validatedMessages ?? rawMessages ?? context.event.messages;\n case \"consumerEvent\":\n return context.event;\n case \"consumerVendor\":\n return context.event.vendor;\n case \"consumerTraceContext\":\n return context.event.traceContext ?? null;\n default:\n return undefined;\n }\n}\n","import createDebug from \"debug\";\nimport type {\n ScheduleEventInput,\n ScheduleHandlerContext,\n EventResult,\n BaseHandlerContext,\n CelerityLayer,\n Type,\n ServiceContainer,\n} from \"@celerity-sdk/types\";\nimport { runLayerPipeline } from \"../layers/pipeline\";\nimport { HandlerMetadataStore } from \"../metadata/handler-metadata\";\nimport type { ResolvedHandlerBase } from \"./types\";\nimport type { ParamMetadata } from \"../decorators/params\";\n\nconst debug = createDebug(\"celerity:core:schedule-pipeline\");\n\nexport type SchedulePipelineOptions = {\n container: ServiceContainer;\n systemLayers?: (CelerityLayer<BaseHandlerContext> | Type<CelerityLayer<BaseHandlerContext>>)[];\n appLayers?: (CelerityLayer<BaseHandlerContext> | Type<CelerityLayer<BaseHandlerContext>>)[];\n handlerName?: string;\n};\n\nexport async function executeSchedulePipeline(\n handler: ResolvedHandlerBase,\n event: ScheduleEventInput,\n options: SchedulePipelineOptions,\n): Promise<EventResult> {\n const context: ScheduleHandlerContext = {\n event,\n metadata: new HandlerMetadataStore({\n ...(handler.customMetadata ?? {}),\n ...(options.handlerName ? { handlerName: options.handlerName } : {}),\n }),\n container: options.container,\n };\n\n const allLayers = [\n ...(options.systemLayers ?? []),\n ...(options.appLayers ?? []),\n ...handler.layers,\n ];\n\n debug(\"tag=%s — %d layers\", event.handlerTag, allLayers.length);\n\n let result: EventResult = { success: true };\n\n try {\n await runLayerPipeline(\n allLayers,\n context,\n async () => {\n const style = handler.isFunctionHandler ? \"function\" : \"class\";\n debug(\"invoking %s handler\", style);\n\n const validatedInput: unknown = context.metadata.get(\"validatedInput\") ?? event.input;\n\n if (handler.isFunctionHandler) {\n result = await invokeFunctionHandler(handler, context, validatedInput);\n } else {\n result = await invokeClassHandler(handler, context, validatedInput);\n }\n },\n \"schedule\",\n );\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n if (context.logger) {\n context.logger.error(\"Unhandled error in schedule handler pipeline\", {\n error: errorMessage,\n handlerTag: event.handlerTag,\n scheduleId: event.scheduleId,\n ...(error instanceof Error && error.stack ? { stack: error.stack } : {}),\n });\n } else {\n console.error(\"Unhandled error in schedule handler pipeline:\", error);\n }\n return { success: false, errorMessage };\n }\n\n return result;\n}\n\nasync function invokeClassHandler(\n handler: ResolvedHandlerBase,\n context: ScheduleHandlerContext,\n validatedInput: unknown,\n): Promise<EventResult> {\n const args: unknown[] = [];\n const sorted = [...handler.paramMetadata].sort((a, b) => a.index - b.index);\n\n for (const meta of sorted) {\n args[meta.index] = extractScheduleParam(meta, context, validatedInput);\n }\n\n return (await handler.handlerFn.apply(handler.handlerInstance, args)) as EventResult;\n}\n\nasync function invokeFunctionHandler(\n handler: ResolvedHandlerBase,\n context: ScheduleHandlerContext,\n _validatedInput: unknown,\n): Promise<EventResult> {\n const deps: unknown[] = [];\n if (handler.injectTokens && handler.injectTokens.length > 0) {\n for (const token of handler.injectTokens) {\n deps.push(await context.container.resolve(token));\n }\n }\n\n // Function handler signature: (event: ScheduleEventInput, ctx, ...deps)\n return (await handler.handlerFn(context.event, context, ...deps)) as EventResult;\n}\n\nfunction extractScheduleParam(\n meta: ParamMetadata,\n context: ScheduleHandlerContext,\n validatedInput: unknown,\n): unknown {\n switch (meta.type) {\n case \"scheduleInput\":\n return validatedInput;\n case \"scheduleId\":\n return context.event.scheduleId;\n case \"scheduleExpression\":\n return context.event.schedule;\n case \"scheduleEvent\":\n return context.event;\n default:\n return undefined;\n }\n}\n","import createDebug from \"debug\";\nimport type {\n BaseHandlerContext,\n CelerityLayer,\n Type,\n ServiceContainer,\n} from \"@celerity-sdk/types\";\nimport { runLayerPipeline } from \"../layers/pipeline\";\nimport { HandlerMetadataStore } from \"../metadata/handler-metadata\";\nimport type { ResolvedHandlerBase } from \"./types\";\nimport type { ParamMetadata } from \"../decorators/params\";\n\nconst debug = createDebug(\"celerity:core:custom-pipeline\");\n\nexport type CustomPipelineOptions = {\n container: ServiceContainer;\n systemLayers?: (CelerityLayer<BaseHandlerContext> | Type<CelerityLayer<BaseHandlerContext>>)[];\n appLayers?: (CelerityLayer<BaseHandlerContext> | Type<CelerityLayer<BaseHandlerContext>>)[];\n handlerName?: string;\n};\n\n/**\n * Execute a custom/invocable handler pipeline.\n *\n * Unlike consumer and schedule pipelines, custom handlers return raw results\n * and errors are re-thrown to the caller (not wrapped in `EventResult`).\n */\nexport async function executeCustomPipeline(\n handler: ResolvedHandlerBase,\n payload: unknown,\n options: CustomPipelineOptions,\n): Promise<unknown> {\n const context: BaseHandlerContext = {\n metadata: new HandlerMetadataStore({\n ...(handler.customMetadata ?? {}),\n ...(options.handlerName ? { handlerName: options.handlerName } : {}),\n rawPayload: payload,\n }),\n container: options.container,\n };\n\n const allLayers = [\n ...(options.systemLayers ?? []),\n ...(options.appLayers ?? []),\n ...handler.layers,\n ];\n\n debug(\"name=%s — %d layers\", options.handlerName ?? \"unknown\", allLayers.length);\n\n let result: unknown;\n\n await runLayerPipeline(\n allLayers,\n context,\n async () => {\n const style = handler.isFunctionHandler ? \"function\" : \"class\";\n debug(\"invoking %s handler\", style);\n\n const validatedPayload: unknown = context.metadata.get(\"validatedPayload\") ?? payload;\n\n if (handler.isFunctionHandler) {\n result = await invokeFunctionHandler(handler, context, validatedPayload);\n } else {\n result = await invokeClassHandler(handler, context, validatedPayload);\n }\n },\n \"custom\",\n );\n\n return result;\n}\n\nasync function invokeClassHandler(\n handler: ResolvedHandlerBase,\n context: BaseHandlerContext,\n validatedPayload: unknown,\n): Promise<unknown> {\n const args: unknown[] = [];\n const sorted = [...handler.paramMetadata].sort((a, b) => a.index - b.index);\n\n for (const meta of sorted) {\n args[meta.index] = extractCustomParam(meta, context, validatedPayload);\n }\n\n return handler.handlerFn.apply(handler.handlerInstance, args);\n}\n\nasync function invokeFunctionHandler(\n handler: ResolvedHandlerBase,\n context: BaseHandlerContext,\n validatedPayload: unknown,\n): Promise<unknown> {\n const deps: unknown[] = [];\n if (handler.injectTokens && handler.injectTokens.length > 0) {\n for (const token of handler.injectTokens) {\n deps.push(await context.container.resolve(token));\n }\n }\n\n // Function handler signature: (payload, ctx, ...deps)\n return handler.handlerFn(validatedPayload, context, ...deps);\n}\n\nfunction extractCustomParam(\n meta: ParamMetadata,\n context: BaseHandlerContext,\n validatedPayload: unknown,\n): unknown {\n switch (meta.type) {\n case \"payload\":\n return validatedPayload;\n case \"invokeContext\":\n return context;\n default:\n return undefined;\n }\n}\n","import type {\n HttpMethod,\n HttpRequest,\n HttpResponse,\n CelerityLayer,\n Type,\n WebSocketMessage,\n WebSocketMessageType,\n WebSocketEventType,\n ConsumerEventInput,\n ConsumerMessage,\n MessageAttributes,\n ScheduleEventInput,\n EventResult,\n} from \"@celerity-sdk/types\";\nimport type { Container } from \"../di/container\";\nimport type { HandlerRegistry } from \"../handlers/registry\";\nimport { executeHttpPipeline } from \"../handlers/http-pipeline\";\nimport { executeWebSocketPipeline } from \"../handlers/websocket-pipeline\";\nimport { executeConsumerPipeline } from \"../handlers/consumer-pipeline\";\nimport { executeSchedulePipeline } from \"../handlers/schedule-pipeline\";\nimport { executeCustomPipeline } from \"../handlers/custom-pipeline\";\nimport { NotFoundException } from \"../errors/http-exception\";\n\nexport class TestingApplication {\n constructor(\n private registry: HandlerRegistry,\n private container: Container,\n private systemLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n private appLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n ) {}\n\n async injectHttp(request: HttpRequest): Promise<HttpResponse> {\n const handler = this.registry.getHandler(\"http\", `${request.method} ${request.path}`);\n if (!handler) {\n throw new NotFoundException(`No handler found for ${request.method} ${request.path}`);\n }\n return executeHttpPipeline(handler, request, {\n container: this.container,\n systemLayers: this.systemLayers,\n appLayers: this.appLayers,\n });\n }\n\n async injectWebSocket(route: string, message: WebSocketMessage): Promise<void> {\n const handler = this.registry.getHandler(\"websocket\", route);\n if (!handler) {\n throw new NotFoundException(`No WebSocket handler found for route: ${route}`);\n }\n await executeWebSocketPipeline(handler, message, {\n container: this.container,\n systemLayers: this.systemLayers,\n appLayers: this.appLayers,\n });\n }\n\n async injectConsumer(handlerTag: string, event: ConsumerEventInput): Promise<EventResult> {\n const handler = this.registry.getHandler(\"consumer\", handlerTag);\n if (!handler) {\n throw new NotFoundException(`No consumer handler found for tag: ${handlerTag}`);\n }\n return executeConsumerPipeline(handler, event, {\n container: this.container,\n systemLayers: this.systemLayers,\n appLayers: this.appLayers,\n });\n }\n\n async injectSchedule(handlerTag: string, event: ScheduleEventInput): Promise<EventResult> {\n const handler = this.registry.getHandler(\"schedule\", handlerTag);\n if (!handler) {\n throw new NotFoundException(`No schedule handler found for tag: ${handlerTag}`);\n }\n return executeSchedulePipeline(handler, event, {\n container: this.container,\n systemLayers: this.systemLayers,\n appLayers: this.appLayers,\n });\n }\n\n async injectCustom(name: string, payload?: unknown): Promise<unknown> {\n const handler = this.registry.getHandler(\"custom\", name);\n if (!handler) {\n throw new NotFoundException(`No custom handler found for name: ${name}`);\n }\n return executeCustomPipeline(handler, payload ?? null, {\n container: this.container,\n systemLayers: this.systemLayers,\n appLayers: this.appLayers,\n });\n }\n\n getContainer(): Container {\n return this.container;\n }\n\n getRegistry(): HandlerRegistry {\n return this.registry;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Mock factories — HTTP\n// ---------------------------------------------------------------------------\n\nexport type MockRequestOptions = {\n pathParams?: Record<string, string>;\n query?: Record<string, string | string[]>;\n headers?: Record<string, string | string[]>;\n cookies?: Record<string, string>;\n body?: unknown;\n auth?: Record<string, unknown>;\n requestId?: string;\n clientIp?: string;\n};\n\nexport function mockRequest(\n method: HttpMethod,\n path: string,\n options: MockRequestOptions = {},\n): HttpRequest {\n return {\n method,\n path,\n pathParams: options.pathParams ?? {},\n query: options.query ?? {},\n headers: options.headers ?? {},\n cookies: options.cookies ?? {},\n textBody: options.body !== undefined ? JSON.stringify(options.body) : null,\n binaryBody: null,\n contentType: options.body !== undefined ? \"application/json\" : null,\n requestId: options.requestId ?? \"test-request-id\",\n requestTime: new Date().toISOString(),\n auth: options.auth ?? null,\n clientIp: options.clientIp ?? \"127.0.0.1\",\n traceContext: null,\n userAgent: \"celerity-testing\",\n matchedRoute: null,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Mock factories — WebSocket\n// ---------------------------------------------------------------------------\n\nexport type MockWebSocketMessageOptions = {\n messageType?: WebSocketMessageType;\n eventType?: WebSocketEventType;\n connectionId?: string;\n messageId?: string;\n jsonBody?: unknown;\n binaryBody?: Buffer;\n traceContext?: Record<string, string> | null;\n};\n\nexport function mockWebSocketMessage(options: MockWebSocketMessageOptions = {}): WebSocketMessage {\n return {\n messageType: options.messageType ?? \"json\",\n eventType: options.eventType ?? \"message\",\n connectionId: options.connectionId ?? \"test-conn-id\",\n messageId: options.messageId ?? \"test-msg-id\",\n jsonBody: options.jsonBody ?? null,\n binaryBody: options.binaryBody,\n traceContext: options.traceContext ?? null,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Mock factories — Consumer\n// ---------------------------------------------------------------------------\n\nexport type MockConsumerMessage = {\n messageId?: string;\n body: string;\n source?: string;\n sourceType?: string;\n sourceName?: string;\n eventType?: string;\n messageAttributes?: MessageAttributes;\n};\n\nexport type MockConsumerEventOptions = {\n vendor?: unknown;\n traceContext?: Record<string, string> | null;\n};\n\nexport function mockConsumerEvent(\n handlerTag: string,\n messages: MockConsumerMessage[],\n options: MockConsumerEventOptions = {},\n): ConsumerEventInput {\n const builtMessages: ConsumerMessage[] = messages.map((msg, index) => ({\n messageId: msg.messageId ?? `msg-${index}`,\n body: msg.body,\n source: msg.source ?? \"test\",\n ...(msg.sourceType !== undefined && { sourceType: msg.sourceType }),\n ...(msg.sourceName !== undefined && { sourceName: msg.sourceName }),\n ...(msg.eventType !== undefined && { eventType: msg.eventType }),\n messageAttributes: msg.messageAttributes ?? ({} as MessageAttributes),\n vendor: {},\n }));\n\n return {\n handlerTag,\n messages: builtMessages,\n vendor: options.vendor ?? {},\n traceContext: options.traceContext ?? null,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Mock factories — Schedule\n// ---------------------------------------------------------------------------\n\nexport type MockScheduleEventOptions = {\n scheduleId?: string;\n messageId?: string;\n schedule?: string;\n input?: unknown;\n vendor?: unknown;\n traceContext?: Record<string, string> | null;\n};\n\nexport function mockScheduleEvent(\n handlerTag: string,\n options: MockScheduleEventOptions = {},\n): ScheduleEventInput {\n return {\n handlerTag,\n scheduleId: options.scheduleId ?? handlerTag,\n messageId: options.messageId ?? \"test-schedule-msg-id\",\n schedule: options.schedule ?? \"rate(1 day)\",\n input: options.input,\n vendor: options.vendor ?? {},\n traceContext: options.traceContext ?? null,\n };\n}\n","import type {\n HttpMethod,\n CelerityLayer,\n FunctionHandlerDefinition,\n Type,\n InjectionToken,\n Schema,\n} from \"@celerity-sdk/types\";\nimport type { HttpHandlerRequest, HttpFunctionContext } from \"./context\";\n\nexport type HttpHandlerConfig<TBody = unknown> = {\n path?: string;\n method?: HttpMethod;\n schema?: {\n body?: Schema<TBody>;\n query?: Schema;\n params?: Schema;\n headers?: Schema;\n };\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n inject?: InjectionToken[];\n metadata?: Record<string, unknown>;\n};\n\ntype HttpHandlerOptions<TBody = unknown> = Omit<HttpHandlerConfig<TBody>, \"path\" | \"method\">;\n\ntype HttpHandlerFn<TBody = unknown> = (\n req: HttpHandlerRequest<TBody>,\n ctx: HttpFunctionContext,\n ...deps: unknown[]\n) => unknown;\n\nexport function createHttpHandler<TBody = unknown>(\n config: HttpHandlerConfig<TBody>,\n handler: HttpHandlerFn<TBody>,\n): FunctionHandlerDefinition {\n const metadata: Record<string, unknown> = {\n schema: config.schema,\n layers: config.layers ?? [],\n inject: config.inject ?? [],\n customMetadata: config.metadata ?? {},\n };\n\n if (config.path !== undefined) metadata.path = config.path;\n if (config.method !== undefined) metadata.method = config.method;\n\n return {\n __celerity_handler: true,\n type: \"http\",\n metadata,\n handler: handler as (...args: unknown[]) => unknown,\n };\n}\n\n// -- Shorthand helpers --------------------------------------------------------\n\nexport function httpGet(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpGet(\n path: string,\n options: HttpHandlerOptions,\n handler: HttpHandlerFn,\n): FunctionHandlerDefinition;\nexport function httpGet(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"GET\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"GET\", ...handlerOrOptions }, maybeHandler!);\n}\n\nexport function httpPost(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpPost<TBody = unknown>(\n path: string,\n options: HttpHandlerOptions<TBody>,\n handler: HttpHandlerFn<TBody>,\n): FunctionHandlerDefinition;\nexport function httpPost(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"POST\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"POST\", ...handlerOrOptions }, maybeHandler!);\n}\n\nexport function httpPut(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpPut<TBody = unknown>(\n path: string,\n options: HttpHandlerOptions<TBody>,\n handler: HttpHandlerFn<TBody>,\n): FunctionHandlerDefinition;\nexport function httpPut(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"PUT\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"PUT\", ...handlerOrOptions }, maybeHandler!);\n}\n\nexport function httpPatch(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpPatch<TBody = unknown>(\n path: string,\n options: HttpHandlerOptions<TBody>,\n handler: HttpHandlerFn<TBody>,\n): FunctionHandlerDefinition;\nexport function httpPatch(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"PATCH\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"PATCH\", ...handlerOrOptions }, maybeHandler!);\n}\n\nexport function httpDelete(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpDelete(\n path: string,\n options: HttpHandlerOptions,\n handler: HttpHandlerFn,\n): FunctionHandlerDefinition;\nexport function httpDelete(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"DELETE\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"DELETE\", ...handlerOrOptions }, maybeHandler!);\n}\n","import type {\n GuardDefinition,\n HandlerMetadata,\n InjectionToken,\n ServiceContainer,\n CelerityLogger,\n} from \"@celerity-sdk/types\";\n\nexport type GuardConfig = {\n name?: string;\n inject?: InjectionToken[];\n metadata?: Record<string, unknown>;\n};\n\n/**\n * The request context provided to a guard handler.\n * Mirrors the Rust runtime's `AuthGuardValidateInput` + `RequestInfo`.\n */\nexport type GuardRequest = {\n token: string;\n headers: Record<string, string | string[]>;\n query: Record<string, string | string[]>;\n cookies: Record<string, string>;\n body: unknown;\n requestId: string;\n clientIp: string;\n};\n\nexport type GuardContext = {\n metadata: HandlerMetadata;\n container: ServiceContainer;\n logger?: CelerityLogger;\n /**\n * Claims accumulated from preceding guards in the chain.\n * Keyed by guard name (e.g. `{ jwt: { sub: \"user-1\", ... } }`).\n * Empty object for the first guard in the chain.\n */\n auth: Record<string, unknown>;\n};\n\n/**\n * Guard handler function signature.\n * Return the claims object to attach to `request.auth.<guardName>`,\n * or throw `ForbiddenException`/`UnauthorizedException` to reject.\n */\nexport type GuardHandlerFn = (req: GuardRequest, ctx: GuardContext, ...deps: unknown[]) => unknown;\n\nexport function createGuard(config: GuardConfig, handler: GuardHandlerFn): GuardDefinition {\n return {\n __celerity_guard: true,\n name: config.name,\n handler: handler as (...args: unknown[]) => unknown,\n metadata: {\n inject: config.inject ?? [],\n customMetadata: config.metadata ?? {},\n },\n };\n}\n","import type {\n WebSocketMessage,\n WebSocketHandlerContext,\n CelerityLayer,\n FunctionHandlerDefinition,\n Type,\n InjectionToken,\n Schema,\n} from \"@celerity-sdk/types\";\n\nexport type WebSocketHandlerConfig = {\n route?: string;\n protectedBy?: string[];\n schema?: Schema;\n inject?: InjectionToken[];\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n metadata?: Record<string, unknown>;\n};\n\ntype WebSocketHandlerFn = (\n message: WebSocketMessage,\n ctx: WebSocketHandlerContext,\n ...deps: unknown[]\n) => Promise<void> | void;\n\nexport function createWebSocketHandler(\n config: WebSocketHandlerConfig,\n handler: WebSocketHandlerFn,\n): FunctionHandlerDefinition {\n const metadata: Record<string, unknown> = {\n layers: config.layers ?? [],\n inject: config.inject ?? [],\n customMetadata: config.metadata ?? {},\n };\n\n if (config.route !== undefined) metadata.route = config.route;\n if (config.protectedBy !== undefined) metadata.protectedBy = config.protectedBy;\n if (config.schema !== undefined) metadata.schema = config.schema;\n\n return {\n __celerity_handler: true,\n type: \"websocket\",\n metadata,\n handler: handler as (...args: unknown[]) => unknown,\n };\n}\n","import type {\n ConsumerEventInput,\n ConsumerHandlerContext,\n EventResult,\n CelerityLayer,\n FunctionHandlerDefinition,\n Type,\n InjectionToken,\n Schema,\n} from \"@celerity-sdk/types\";\n\nexport type ConsumerHandlerConfig = {\n route?: string;\n messageSchema?: Schema;\n inject?: InjectionToken[];\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n metadata?: Record<string, unknown>;\n};\n\ntype ConsumerHandlerFn = (\n event: ConsumerEventInput,\n ctx: ConsumerHandlerContext,\n ...deps: unknown[]\n) => Promise<EventResult>;\n\nexport function createConsumerHandler(\n config: ConsumerHandlerConfig,\n handler: ConsumerHandlerFn,\n): FunctionHandlerDefinition {\n const metadata: Record<string, unknown> = {\n layers: config.layers ?? [],\n inject: config.inject ?? [],\n customMetadata: config.metadata ?? {},\n };\n\n if (config.route !== undefined) metadata.route = config.route;\n if (config.messageSchema !== undefined) metadata.messageSchema = config.messageSchema;\n\n return {\n __celerity_handler: true,\n type: \"consumer\",\n metadata,\n handler: handler as (...args: unknown[]) => unknown,\n };\n}\n","import type {\n ScheduleEventInput,\n ScheduleHandlerContext,\n EventResult,\n CelerityLayer,\n FunctionHandlerDefinition,\n Type,\n InjectionToken,\n Schema,\n} from \"@celerity-sdk/types\";\n\nexport type ScheduleHandlerConfig<T = unknown> = {\n scheduleId?: string;\n schedule?: string;\n schema?: Schema<T>;\n inject?: InjectionToken[];\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n metadata?: Record<string, unknown>;\n};\n\ntype ScheduleHandlerFn = (\n event: ScheduleEventInput,\n ctx: ScheduleHandlerContext,\n ...deps: unknown[]\n) => Promise<EventResult>;\n\nfunction isScheduleExpression(value: string): boolean {\n return value.startsWith(\"rate(\") || value.startsWith(\"cron(\");\n}\n\n/**\n * Creates a function-based schedule handler definition.\n *\n * Function handlers are blueprint-first — the schedule expression, timezone,\n * and handler binding are all defined in the blueprint. The handler declares\n * its dependencies and provides the task logic.\n *\n * @example\n * ```ts\n * // Minimal — blueprint defines everything\n * const dailyCleanup = createScheduleHandler(\n * { inject: [CleanupService] },\n * async (event, ctx, cleanupService: CleanupService) => {\n * await cleanupService.run();\n * return { success: true };\n * },\n * );\n *\n * // With scheduleId hint for deploy engine auto-wiring\n * const weeklyReport = createScheduleHandler(\"weekly-report\", {\n * inject: [ReportService],\n * }, async (event, ctx, reportService: ReportService) => {\n * await reportService.generate();\n * return { success: true };\n * });\n *\n * // With expression for prototyping / single-environment apps\n * const hourlySync = createScheduleHandler(\"rate(1 hour)\", {\n * inject: [SyncService],\n * }, async (event, ctx, syncService: SyncService) => {\n * await syncService.run();\n * return { success: true };\n * });\n * ```\n */\nexport function createScheduleHandler(\n config: ScheduleHandlerConfig,\n handler: ScheduleHandlerFn,\n): FunctionHandlerDefinition;\nexport function createScheduleHandler(\n scheduleIdOrExpression: string,\n config: ScheduleHandlerConfig,\n handler: ScheduleHandlerFn,\n): FunctionHandlerDefinition;\nexport function createScheduleHandler(\n configOrString: string | ScheduleHandlerConfig,\n configOrHandler: ScheduleHandlerConfig | ScheduleHandlerFn,\n maybeHandler?: ScheduleHandlerFn,\n): FunctionHandlerDefinition {\n let config: ScheduleHandlerConfig;\n let handler: ScheduleHandlerFn;\n\n if (typeof configOrString === \"string\") {\n config = { ...(configOrHandler as ScheduleHandlerConfig) };\n handler = maybeHandler!;\n if (isScheduleExpression(configOrString)) {\n config.schedule = configOrString;\n } else {\n config.scheduleId = configOrString;\n }\n } else {\n config = configOrString;\n handler = configOrHandler as ScheduleHandlerFn;\n }\n\n const metadata: Record<string, unknown> = {\n layers: config.layers ?? [],\n inject: config.inject ?? [],\n customMetadata: config.metadata ?? {},\n };\n\n if (config.scheduleId !== undefined) metadata.scheduleId = config.scheduleId;\n if (config.schedule !== undefined) metadata.schedule = config.schedule;\n if (config.schema !== undefined) metadata.schema = config.schema;\n\n return {\n __celerity_handler: true,\n type: \"schedule\",\n metadata,\n handler: handler as (...args: unknown[]) => unknown,\n };\n}\n","import type {\n BaseHandlerContext,\n CelerityLayer,\n FunctionHandlerDefinition,\n Type,\n InjectionToken,\n Schema,\n} from \"@celerity-sdk/types\";\n\nexport type CustomHandlerConfig<TInput = unknown> = {\n name?: string;\n schema?: Schema<TInput>;\n inject?: InjectionToken[];\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n metadata?: Record<string, unknown>;\n};\n\ntype CustomHandlerFn = (\n payload: unknown,\n ctx: BaseHandlerContext,\n ...deps: unknown[]\n) => Promise<unknown>;\n\n/**\n * Creates a function-based custom/invocable handler definition.\n *\n * Function handlers are blueprint-first — the handler name and invocation\n * binding come from the blueprint. The handler declares its dependencies,\n * an optional schema for type-safe payload validation, and the implementation.\n *\n * @example\n * ```ts\n * // With schema — payload is validated and typed before the handler runs\n * const processPayment = createCustomHandler(\n * { schema: PaymentSchema, inject: [PaymentService] },\n * async (payload, ctx, paymentService: PaymentService) => {\n * return paymentService.process(payload as PaymentInput);\n * },\n * );\n *\n * // Without schema — payload is unknown\n * const healthCheck = createCustomHandler(\n * {},\n * async () => ({ status: \"ok\" }),\n * );\n * ```\n */\nexport function createCustomHandler(\n config: CustomHandlerConfig,\n handler: CustomHandlerFn,\n): FunctionHandlerDefinition {\n const metadata: Record<string, unknown> = {\n layers: config.layers ?? [],\n inject: config.inject ?? [],\n customMetadata: config.metadata ?? {},\n };\n\n if (config.name !== undefined) metadata.name = config.name;\n if (config.schema !== undefined) metadata.schema = config.schema;\n\n return {\n __celerity_handler: true,\n type: \"custom\",\n metadata,\n handler: handler as (...args: unknown[]) => unknown,\n };\n}\n","import { resolve } from \"node:path\";\nimport type {\n CelerityLayer,\n FunctionHandlerDefinition,\n HandlerType,\n HttpMethod,\n InjectionToken,\n Type,\n} from \"@celerity-sdk/types\";\nimport createDebug from \"debug\";\nimport type { HandlerRegistry } from \"./registry\";\nimport type { ResolvedHandler } from \"./types\";\n\nconst debug = createDebug(\"celerity:core:module-resolver\");\n\n/**\n * Resolve a handler ID as a module reference by dynamically importing\n * the module and matching the exported function against the registry.\n *\n * Resolution strategy:\n * 1. If the ID contains a dot, try splitting at the last dot into\n * `moduleName.exportName` (named export).\n * 2. Fallback: treat the full ID as a module name with a default export.\n * This handles no-dot refs (e.g. \"myModule\") and dotted module names\n * (e.g. \"app.module\" from app.module.js) where the named export split failed.\n *\n * Supported formats:\n * - `\"handlers.hello\"` — named export `hello` from module `handlers`\n * - `\"handlers\"` — default export from module `handlers`\n * - `\"app.module\"` — dotted module name: tries named export split first,\n * falls back to default export from module `app.module`\n */\nexport async function resolveHandlerByModuleRef(\n handlerId: string,\n handlerType: HandlerType,\n registry: HandlerRegistry,\n baseDir: string,\n): Promise<ResolvedHandler | null> {\n const lastDot = handlerId.lastIndexOf(\".\");\n if (lastDot > 0) {\n const moduleName = handlerId.slice(0, lastDot);\n const exportName = handlerId.slice(lastDot + 1);\n const result = await tryResolveExport(\n baseDir,\n moduleName,\n exportName,\n handlerId,\n handlerType,\n registry,\n );\n if (result) return result;\n }\n\n return tryResolveExport(baseDir, handlerId, \"default\", handlerId, handlerType, registry);\n}\n\nasync function tryResolveExport(\n baseDir: string,\n moduleName: string,\n exportName: string,\n handlerId: string,\n handlerType: HandlerType,\n registry: HandlerRegistry,\n): Promise<ResolvedHandler | null> {\n const handlerModulePath = resolve(baseDir, moduleName);\n\n let mod: Record<string, unknown>;\n try {\n mod = (await import(handlerModulePath)) as Record<string, unknown>;\n } catch {\n try {\n mod = (await import(`${handlerModulePath}.js`)) as Record<string, unknown>;\n } catch {\n return null;\n }\n }\n\n const exported = mod[exportName];\n if (!exported) return null;\n\n const isFnDef =\n typeof exported === \"object\" &&\n exported !== null &&\n (exported as Record<string, unknown>).__celerity_handler;\n\n // Type mismatch guard: if the export declares a handler type that\n // doesn't match the requested type, skip it.\n // Plain function exports (no __celerity_handler) skip this check\n // since they are truly blueprint-first with no declared type.\n if (isFnDef && (exported as FunctionHandlerDefinition).type !== handlerType) {\n return null;\n }\n\n const handlerFn = isFnDef ? (exported as FunctionHandlerDefinition).handler : exported;\n if (typeof handlerFn !== \"function\") return null;\n\n // Handler functions created with create*Handler are registered in the\n // HandlerRegistry without an ID. The module import uses the shared\n // Node.js module cache, so we can find the same function reference\n // in the registry and match it with the handler ID.\n const handlers = registry.getHandlersByType(handlerType);\n const match = handlers.find((h) => h.handlerFn === handlerFn);\n if (match) {\n match.id = handlerId;\n debug(\"matched '%s' to registry handler\", handlerId);\n return match;\n }\n\n debug(\"'%s' not in registry, wrapping directly\", handlerId);\n return buildResolvedFromExport(handlerId, handlerType, handlerFn, isFnDef ? exported : null);\n}\n\ntype FnDefMetadata = {\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n inject?: InjectionToken[];\n customMetadata?: Record<string, unknown>;\n path?: string;\n method?: HttpMethod;\n route?: string;\n scheduleId?: string;\n name?: string;\n};\n\nfunction buildResolvedFromExport(\n handlerId: string,\n handlerType: HandlerType,\n handlerFn: unknown,\n fnDef: unknown,\n): ResolvedHandler {\n const meta = fnDef ? ((fnDef as FunctionHandlerDefinition).metadata as FnDefMetadata) : null;\n\n const base = {\n id: handlerId,\n layers: [...(meta?.layers ?? [])],\n paramMetadata: [] as [],\n customMetadata: meta?.customMetadata ?? {},\n handlerFn: handlerFn as (...args: unknown[]) => unknown,\n isFunctionHandler: true,\n injectTokens: meta?.inject ?? [],\n };\n\n const guardFields = { protectedBy: [] as string[], isPublic: false };\n\n switch (handlerType) {\n case \"http\":\n return {\n ...base,\n ...guardFields,\n type: \"http\",\n ...(meta?.path !== undefined ? { path: meta.path } : {}),\n ...(meta?.method !== undefined ? { method: meta.method } : {}),\n };\n case \"websocket\":\n return { ...base, ...guardFields, type: \"websocket\", route: meta?.route ?? handlerId };\n case \"consumer\":\n return { ...base, type: \"consumer\", handlerTag: meta?.route ?? handlerId };\n case \"schedule\":\n return { ...base, type: \"schedule\", handlerTag: meta?.scheduleId ?? handlerId };\n case \"custom\":\n return { ...base, type: \"custom\", name: meta?.name ?? handlerId };\n }\n}\n","import type { CoreWebSocketRegistry } from \"@celerity-sdk/runtime\";\nimport type { WebSocketSender, WebSocketSendOptions } from \"@celerity-sdk/types\";\n\nexport type { CoreWebSocketRegistry } from \"@celerity-sdk/runtime\";\n\n/**\n * WebSocket sender implementation for local/container deployments.\n * Wraps the NAPI runtime's CoreWebSocketRegistry.\n */\nexport class RuntimeWebSocketSender implements WebSocketSender {\n constructor(private registry: CoreWebSocketRegistry) {}\n\n async sendMessage(\n connectionId: string,\n data: unknown,\n options?: WebSocketSendOptions,\n ): Promise<void> {\n const messageId = options?.messageId ?? crypto.randomUUID();\n const messageType = options?.messageType === \"binary\" ? \"binary\" : \"json\";\n const payload = typeof data === \"string\" ? data : JSON.stringify(data);\n await this.registry.sendMessage(\n connectionId,\n messageId,\n messageType as Parameters<CoreWebSocketRegistry[\"sendMessage\"]>[2],\n payload,\n );\n }\n}\n","import createDebug from \"debug\";\nimport type { ServiceContainer, GuardHandlerContext, CelerityLogger } from \"@celerity-sdk/types\";\nimport { HttpException } from \"../errors/http-exception\";\nimport { HandlerMetadataStore } from \"../metadata/handler-metadata\";\nimport type { ResolvedGuard } from \"./types\";\nimport type { GuardRequest, GuardContext } from \"../functions/create-guard\";\n\nconst debug = createDebug(\"celerity:core:guard-pipeline\");\n\nexport type GuardInput = {\n token: string;\n method: string;\n path: string;\n headers: Record<string, string | string[]>;\n query: Record<string, string | string[]>;\n cookies: Record<string, string>;\n body: unknown;\n requestId: string;\n clientIp: string;\n auth: Record<string, unknown>;\n handlerName?: string;\n};\n\nexport type GuardPipelineOptions = {\n container: ServiceContainer;\n handlerMetadata?: Record<string, unknown>;\n};\n\nexport type GuardResult =\n | { allowed: true; auth: Record<string, unknown> }\n | { allowed: false; statusCode: number; message: string; details?: unknown };\n\n/**\n * Executes a guard handler and returns a result indicating whether access\n * is allowed. On success, `auth` contains the data to store under\n * `request.auth.<guardName>`. On failure, `statusCode` and `message`\n * describe the rejection.\n */\nexport async function executeGuardPipeline(\n guard: ResolvedGuard,\n input: GuardInput,\n options: GuardPipelineOptions,\n): Promise<GuardResult> {\n const metadata = new HandlerMetadataStore({\n ...(guard.customMetadata ?? {}),\n ...(options.handlerMetadata ?? {}),\n });\n\n const logger = await createGuardLogger(guard.name, input, options.container);\n\n try {\n const result = guard.isFunctionGuard\n ? await invokeFunctionGuard(guard, input, metadata, options, logger)\n : await invokeClassGuard(guard, input, metadata, options, logger);\n\n debug(\"guard %s — allowed\", guard.name);\n return { allowed: true, auth: (result ?? {}) as Record<string, unknown> };\n } catch (error) {\n if (error instanceof HttpException) {\n debug(\"guard %s — rejected %d: %s\", guard.name, error.statusCode, error.message);\n return {\n allowed: false,\n statusCode: error.statusCode,\n message: error.message,\n details: error.details,\n };\n }\n const message = error instanceof Error ? error.message : String(error);\n debug(\"guard %s — unexpected error: %s\", guard.name, message);\n return { allowed: false, statusCode: 401, message: \"Unauthorized\" };\n }\n}\n\nasync function createGuardLogger(\n guardName: string,\n input: GuardInput,\n container: ServiceContainer,\n): Promise<CelerityLogger> {\n const attrs = {\n guard: guardName,\n requestId: input.requestId,\n method: input.method,\n path: input.path,\n clientIp: input.clientIp,\n ...(input.handlerName ? { handlerName: input.handlerName } : {}),\n };\n\n if (container.has(\"CelerityLogger\")) {\n const root = await container.resolve<CelerityLogger>(\"CelerityLogger\");\n return root.child(\"guard\", attrs);\n }\n\n const pkg = \"@celerity-sdk/telemetry\";\n const { createLogger, readTelemetryEnv } = (await import(pkg)) as {\n createLogger: (config: unknown) => Promise<CelerityLogger>;\n readTelemetryEnv: () => unknown;\n };\n const rootLogger = await createLogger(readTelemetryEnv());\n return rootLogger.child(\"guard\", attrs);\n}\n\nasync function invokeClassGuard(\n guard: ResolvedGuard,\n input: GuardInput,\n metadata: HandlerMetadataStore,\n options: GuardPipelineOptions,\n logger: CelerityLogger | undefined,\n): Promise<unknown> {\n const guardContext: GuardHandlerContext = {\n token: input.token,\n auth: input.auth,\n request: {\n method: input.method,\n path: input.path,\n headers: input.headers,\n query: input.query,\n cookies: input.cookies,\n body: input.body,\n requestId: input.requestId,\n clientIp: input.clientIp,\n },\n metadata,\n container: options.container,\n logger,\n };\n\n const paramCount = guard.handlerFn.length;\n const args: unknown[] = new Array(paramCount);\n const decorated = new Set(guard.paramMetadata.map((m) => m.index));\n\n for (const meta of guard.paramMetadata) {\n if (meta.type === \"token\") {\n args[meta.index] = guardContext.token;\n } else if (meta.type === \"auth\") {\n args[meta.index] = guardContext.auth;\n }\n }\n\n // Undecorated params receive the full GuardHandlerContext.\n for (let i = 0; i < paramCount; i++) {\n if (!decorated.has(i)) {\n args[i] = guardContext;\n }\n }\n\n return guard.handlerFn.apply(guard.handlerInstance, args);\n}\n\nasync function invokeFunctionGuard(\n guard: ResolvedGuard,\n input: GuardInput,\n metadata: HandlerMetadataStore,\n options: GuardPipelineOptions,\n logger: CelerityLogger | undefined,\n): Promise<unknown> {\n const req: GuardRequest = {\n token: input.token,\n headers: input.headers,\n query: input.query,\n cookies: input.cookies,\n body: input.body,\n requestId: input.requestId,\n clientIp: input.clientIp,\n };\n\n const ctx: GuardContext = {\n metadata,\n container: options.container,\n auth: input.auth,\n logger,\n };\n\n if (guard.injectTokens && guard.injectTokens.length > 0) {\n const deps: unknown[] = [];\n for (const token of guard.injectTokens) {\n deps.push(await options.container.resolve(token));\n }\n return guard.handlerFn(req, ctx, ...deps);\n }\n\n return guard.handlerFn(req, ctx);\n}\n","import { resolve } from \"node:path\";\nimport createDebug from \"debug\";\nimport type { Type } from \"@celerity-sdk/types\";\n\nconst debug = createDebug(\"celerity:core:bootstrap\");\n\n/** Discover and dynamically import the user's root module. */\nexport async function discoverModule(modulePath?: string): Promise<Type> {\n const resolved = modulePath ?? process.env.CELERITY_MODULE_PATH;\n if (!resolved) {\n throw new Error(\n \"Cannot discover module: set CELERITY_MODULE_PATH environment variable or pass modulePath\",\n );\n }\n\n const absolutePath = resolve(resolved);\n debug(\"discoverModule: importing %s\", absolutePath);\n const imported = (await import(absolutePath)) as Record<string, unknown>;\n const rootModule = imported.default ?? findModuleExport(imported);\n\n if (!rootModule || typeof rootModule !== \"function\") {\n throw new Error(`No module class found in \"${resolved}\"`);\n }\n\n debug(\"discoverModule: found %s\", (rootModule as Type).name);\n return rootModule as Type;\n}\n\nfunction findModuleExport(imported: Record<string, unknown>): unknown {\n for (const key of Object.keys(imported)) {\n if (key === \"default\") continue;\n if (typeof imported[key] === \"function\") {\n return imported[key];\n }\n }\n return undefined;\n}\n","import type {\n Request as RuntimeRequest,\n Response as RuntimeResponse,\n JsWebSocketMessageInfo,\n JsConsumerEventInput,\n JsScheduleEventInput,\n JsEventResult,\n} from \"@celerity-sdk/runtime\";\nimport type {\n HttpMethod,\n HttpRequest,\n HttpResponse,\n WebSocketMessage,\n WebSocketMessageType,\n WebSocketEventType,\n WebSocketRequestContext,\n ConsumerEventInput,\n ScheduleEventInput,\n EventResult,\n} from \"@celerity-sdk/types\";\n\nexport type {\n JsWebSocketMessageInfo,\n JsConsumerEventInput,\n JsScheduleEventInput,\n JsEventResult,\n} from \"@celerity-sdk/runtime\";\n\n/** Flatten multi-value records: single-element arrays become plain strings. */\nexport function flattenMultiValueRecord(\n record: Record<string, string[]>,\n): Record<string, string | string[]> {\n const result: Record<string, string | string[]> = {};\n for (const [key, values] of Object.entries(record)) {\n result[key] = values.length === 1 ? values[0] : values;\n }\n return result;\n}\n\n/** Convert NAPI runtime Request → SDK HttpRequest. */\nexport function mapRuntimeRequest(request: RuntimeRequest): HttpRequest {\n return {\n method: request.method.toUpperCase() as HttpMethod,\n path: request.path,\n pathParams: request.pathParams,\n query: flattenMultiValueRecord(request.query),\n headers: flattenMultiValueRecord(request.headers),\n cookies: request.cookies,\n textBody: request.textBody,\n binaryBody: request.binaryBody,\n contentType: request.contentType || null,\n requestId: request.requestId,\n requestTime: request.requestTime,\n auth: request.auth ?? null,\n clientIp: request.clientIp || null,\n traceContext: request.traceContext ?? null,\n userAgent: request.userAgent || null,\n matchedRoute: request.matchedRoute,\n };\n}\n\n/** Convert SDK HttpResponse → NAPI runtime Response. */\nexport function mapToRuntimeResponse(response: HttpResponse): RuntimeResponse {\n return {\n status: response.status,\n headers: response.headers,\n body: response.body,\n binaryBody: response.binaryBody,\n };\n}\n\n/** Convert NAPI JsWebSocketMessageInfo → SDK WebSocketMessage. */\nexport function mapWebSocketMessage(info: JsWebSocketMessageInfo): WebSocketMessage {\n const requestContext: WebSocketRequestContext | undefined = info.requestContext\n ? {\n requestId: info.requestContext.requestId,\n requestTime: info.requestContext.requestTime,\n path: info.requestContext.path,\n protocolVersion: info.requestContext.protocolVersion,\n headers: flattenMultiValueRecord(info.requestContext.headers),\n userAgent: info.requestContext.userAgent,\n clientIp: info.requestContext.clientIp,\n query: flattenMultiValueRecord(info.requestContext.query),\n cookies: info.requestContext.cookies,\n auth: info.requestContext.auth,\n traceContext: info.requestContext.traceContext,\n }\n : undefined;\n\n return {\n messageType: info.messageType as WebSocketMessageType,\n eventType: info.eventType as WebSocketEventType,\n connectionId: info.connectionId,\n messageId: info.messageId,\n jsonBody: info.jsonBody,\n binaryBody: info.binaryBody,\n requestContext,\n traceContext: info.traceContext ?? null,\n };\n}\n\n/** Convert NAPI JsConsumerEventInput → SDK ConsumerEventInput. */\nexport function mapConsumerEventInput(input: JsConsumerEventInput): ConsumerEventInput {\n return {\n handlerTag: input.handlerTag,\n messages: input.messages.map((msg) => {\n // sourceType, sourceName, eventType are added in a newer runtime version;\n // access via index signature to stay compatible with older NAPI bindings.\n const m = msg as unknown as Record<string, unknown>;\n return {\n messageId: msg.messageId,\n body: msg.body,\n source: msg.source,\n ...(m.sourceType !== undefined && { sourceType: m.sourceType as string }),\n ...(m.sourceName !== undefined && { sourceName: m.sourceName as string }),\n ...(m.eventType !== undefined && { eventType: m.eventType as string }),\n messageAttributes: msg.messageAttributes,\n vendor: msg.vendor,\n };\n }),\n vendor: input.vendor,\n traceContext: input.traceContext ?? null,\n };\n}\n\n/** Convert NAPI JsScheduleEventInput → SDK ScheduleEventInput. */\nexport function mapScheduleEventInput(input: JsScheduleEventInput): ScheduleEventInput {\n return {\n handlerTag: input.handlerTag,\n scheduleId: input.scheduleId,\n messageId: input.messageId,\n schedule: input.schedule,\n input: input.input,\n vendor: input.vendor,\n traceContext: input.traceContext ?? null,\n };\n}\n\n/** Convert SDK EventResult → NAPI JsEventResult. */\nexport function mapToNapiEventResult(result: EventResult): JsEventResult {\n return {\n success: result.success,\n failures: result.failures?.map((f) => ({\n messageId: f.messageId,\n errorMessage: f.errorMessage,\n })),\n errorMessage: result.errorMessage,\n };\n}\n","import { resolve, dirname } from \"node:path\";\nimport createDebug from \"debug\";\nimport type { Request as RuntimeRequest, Response as RuntimeResponse } from \"@celerity-sdk/runtime\";\nimport type { CelerityLayer, Type } from \"@celerity-sdk/types\";\nimport type { Container } from \"../di/container\";\nimport type { HandlerRegistry } from \"../handlers/registry\";\nimport { executeHttpPipeline } from \"../handlers/http-pipeline\";\nimport { executeWebSocketPipeline } from \"../handlers/websocket-pipeline\";\nimport { executeConsumerPipeline } from \"../handlers/consumer-pipeline\";\nimport { executeSchedulePipeline } from \"../handlers/schedule-pipeline\";\nimport { executeCustomPipeline } from \"../handlers/custom-pipeline\";\nimport {\n executeGuardPipeline,\n type GuardInput,\n type GuardResult,\n} from \"../handlers/guard-pipeline\";\nimport { resolveHandlerByModuleRef } from \"../handlers/module-resolver\";\nimport { discoverModule } from \"./discovery\";\nimport { bootstrap } from \"./bootstrap\";\nimport type {\n JsWebSocketMessageInfo,\n JsConsumerEventInput,\n JsScheduleEventInput,\n JsEventResult,\n} from \"@celerity-sdk/runtime\";\nimport {\n mapRuntimeRequest,\n mapToRuntimeResponse,\n mapWebSocketMessage,\n mapConsumerEventInput,\n mapScheduleEventInput,\n mapToNapiEventResult,\n} from \"./runtime-mapper\";\nimport { createDefaultSystemLayers } from \"../layers/system\";\n\nconst debug = createDebug(\"celerity:core:runtime-entry\");\n\ntype RuntimeCallback = (err: Error | null, request: RuntimeRequest) => Promise<RuntimeResponse>;\ntype WebSocketCallback = (err: Error | null, info: JsWebSocketMessageInfo) => Promise<void>;\ntype ConsumerCallback = (err: Error | null, input: JsConsumerEventInput) => Promise<JsEventResult>;\ntype ScheduleCallback = (err: Error | null, input: JsScheduleEventInput) => Promise<JsEventResult>;\ntype CustomCallback = (err: Error | null, payload: unknown) => Promise<unknown>;\ntype GuardCallback = (input: GuardInput) => Promise<GuardResult>;\n\nexport type RuntimeBootstrapResult = {\n registry: HandlerRegistry;\n container: Container;\n\n // HTTP\n createRouteCallback(method: string, path: string, handlerName?: string): RuntimeCallback | null;\n createRouteCallbackById(\n handlerId: string,\n codeLocation?: string,\n handlerName?: string,\n ): Promise<RuntimeCallback | null>;\n\n // Guards\n createGuardCallback(guardName: string): GuardCallback | null;\n\n // WebSocket\n createWebSocketCallback(route: string, handlerName?: string): WebSocketCallback | null;\n createWebSocketCallbackById(\n handlerId: string,\n codeLocation?: string,\n handlerName?: string,\n ): Promise<WebSocketCallback | null>;\n\n // Consumer\n createConsumerCallback(handlerTag: string, handlerName?: string): ConsumerCallback | null;\n createConsumerCallbackById(\n handlerId: string,\n codeLocation?: string,\n handlerName?: string,\n ): Promise<ConsumerCallback | null>;\n\n // Schedule\n createScheduleCallback(handlerTag: string, handlerName?: string): ScheduleCallback | null;\n createScheduleCallbackById(\n handlerId: string,\n codeLocation?: string,\n handlerName?: string,\n ): Promise<ScheduleCallback | null>;\n\n // Custom\n createCustomCallback(handlerName: string): CustomCallback | null;\n createCustomCallbackById(\n handlerId: string,\n codeLocation?: string,\n handlerName?: string,\n ): Promise<CustomCallback | null>;\n};\n\n/**\n * Bootstrap the user's module and return an object with per-route callback creation.\n * Used by the runtime host to get handler callbacks for each blueprint route.\n */\nexport async function bootstrapForRuntime(\n modulePath?: string,\n systemLayers?: (CelerityLayer | Type<CelerityLayer>)[],\n): Promise<RuntimeBootstrapResult> {\n // Resolve system layers first — triggers OTel SDK init before user module loads.\n const layers = systemLayers ?? (await createDefaultSystemLayers());\n\n const resolvedModulePath = modulePath ?? process.env.CELERITY_MODULE_PATH;\n const moduleDir = resolvedModulePath ? dirname(resolve(resolvedModulePath)) : process.cwd();\n\n const rootModule = await discoverModule(modulePath);\n const { container, registry } = await bootstrap(rootModule);\n\n function buildHttpCallback(\n handler: ReturnType<HandlerRegistry[\"getHandlersByType\"]>[number] | undefined,\n handlerName?: string,\n ): RuntimeCallback | null {\n if (!handler) return null;\n\n return async (_err: Error | null, request: RuntimeRequest): Promise<RuntimeResponse> => {\n const httpRequest = mapRuntimeRequest(request);\n const httpResponse = await executeHttpPipeline(handler, httpRequest, {\n container,\n systemLayers: layers,\n handlerName,\n });\n return mapToRuntimeResponse(httpResponse);\n };\n }\n\n function buildWebSocketCallback(\n handler: ReturnType<HandlerRegistry[\"getHandlersByType\"]>[number] | undefined,\n handlerName?: string,\n ): WebSocketCallback | null {\n if (!handler) return null;\n\n return async (_err: Error | null, info: JsWebSocketMessageInfo): Promise<void> => {\n const message = mapWebSocketMessage(info);\n await executeWebSocketPipeline(handler, message, {\n container,\n systemLayers: layers,\n handlerName,\n });\n };\n }\n\n function buildConsumerCallback(\n handler: ReturnType<HandlerRegistry[\"getHandlersByType\"]>[number] | undefined,\n handlerName?: string,\n ): ConsumerCallback | null {\n if (!handler) return null;\n\n return async (_err: Error | null, input: JsConsumerEventInput): Promise<JsEventResult> => {\n const event = mapConsumerEventInput(input);\n const result = await executeConsumerPipeline(handler, event, {\n container,\n systemLayers: layers,\n handlerName,\n });\n return mapToNapiEventResult(result);\n };\n }\n\n function buildScheduleCallback(\n handler: ReturnType<HandlerRegistry[\"getHandlersByType\"]>[number] | undefined,\n handlerName?: string,\n ): ScheduleCallback | null {\n if (!handler) return null;\n\n return async (_err: Error | null, input: JsScheduleEventInput): Promise<JsEventResult> => {\n const event = mapScheduleEventInput(input);\n const result = await executeSchedulePipeline(handler, event, {\n container,\n systemLayers: layers,\n handlerName,\n });\n return mapToNapiEventResult(result);\n };\n }\n\n function buildCustomCallback(\n handler: ReturnType<HandlerRegistry[\"getHandlersByType\"]>[number] | undefined,\n handlerName?: string,\n ): CustomCallback | null {\n if (!handler) return null;\n\n return async (_err: Error | null, payload: unknown): Promise<unknown> => {\n return executeCustomPipeline(handler, payload, {\n container,\n systemLayers: layers,\n handlerName,\n });\n };\n }\n\n return {\n registry,\n container,\n createRouteCallback(method: string, path: string, handlerName?: string) {\n return buildHttpCallback(registry.getHandler(\"http\", `${method} ${path}`), handlerName);\n },\n async createRouteCallbackById(handlerId: string, codeLocation?: string, handlerName?: string) {\n const fromRegistry = registry.getHandlerById(\"http\", handlerId);\n if (fromRegistry) return buildHttpCallback(fromRegistry, handlerName);\n\n const baseDir = codeLocation ? resolve(codeLocation) : moduleDir;\n const resolved = await resolveHandlerByModuleRef(handlerId, \"http\", registry, baseDir);\n return resolved ? buildHttpCallback(resolved, handlerName) : null;\n },\n createGuardCallback(guardName: string): GuardCallback | null {\n const guard = registry.getGuard(guardName);\n if (!guard) return null;\n return async (input: GuardInput) => {\n debug(\"guard %s — input method=%s path=%s\", guardName, input.method, input.path);\n const handler = registry.getHandler(\"http\", `${input.method} ${input.path}`);\n debug(\n \"guard %s — handler %s, customMetadata=%o\",\n guardName,\n handler ? \"found\" : \"not found\",\n handler?.customMetadata,\n );\n return executeGuardPipeline(guard, input, {\n container,\n handlerMetadata: handler?.customMetadata,\n });\n };\n },\n createWebSocketCallback(route: string, handlerName?: string) {\n return buildWebSocketCallback(registry.getHandler(\"websocket\", route), handlerName);\n },\n async createWebSocketCallbackById(\n handlerId: string,\n codeLocation?: string,\n handlerName?: string,\n ) {\n const fromRegistry = registry.getHandlerById(\"websocket\", handlerId);\n if (fromRegistry) return buildWebSocketCallback(fromRegistry, handlerName);\n\n const baseDir = codeLocation ? resolve(codeLocation) : moduleDir;\n const resolved = await resolveHandlerByModuleRef(handlerId, \"websocket\", registry, baseDir);\n return resolved ? buildWebSocketCallback(resolved, handlerName) : null;\n },\n createConsumerCallback(handlerTag: string, handlerName?: string) {\n return buildConsumerCallback(registry.getHandler(\"consumer\", handlerTag), handlerName);\n },\n async createConsumerCallbackById(\n handlerId: string,\n codeLocation?: string,\n handlerName?: string,\n ) {\n const fromRegistry = registry.getHandlerById(\"consumer\", handlerId);\n if (fromRegistry) return buildConsumerCallback(fromRegistry, handlerName);\n\n const baseDir = codeLocation ? resolve(codeLocation) : moduleDir;\n const resolved = await resolveHandlerByModuleRef(handlerId, \"consumer\", registry, baseDir);\n return resolved ? buildConsumerCallback(resolved, handlerName) : null;\n },\n createScheduleCallback(handlerTag: string, handlerName?: string) {\n return buildScheduleCallback(registry.getHandler(\"schedule\", handlerTag), handlerName);\n },\n async createScheduleCallbackById(\n handlerId: string,\n codeLocation?: string,\n handlerName?: string,\n ) {\n const fromRegistry = registry.getHandlerById(\"schedule\", handlerId);\n if (fromRegistry) return buildScheduleCallback(fromRegistry, handlerName);\n\n const baseDir = codeLocation ? resolve(codeLocation) : moduleDir;\n const resolved = await resolveHandlerByModuleRef(handlerId, \"schedule\", registry, baseDir);\n return resolved ? buildScheduleCallback(resolved, handlerName) : null;\n },\n createCustomCallback(handlerName: string) {\n return buildCustomCallback(registry.getHandler(\"custom\", handlerName), handlerName);\n },\n async createCustomCallbackById(handlerId: string, codeLocation?: string, handlerName?: string) {\n const fromRegistry = registry.getHandlerById(\"custom\", handlerId);\n if (fromRegistry) return buildCustomCallback(fromRegistry, handlerName);\n\n const baseDir = codeLocation ? resolve(codeLocation) : moduleDir;\n const resolved = await resolveHandlerByModuleRef(handlerId, \"custom\", registry, baseDir);\n return resolved ? buildCustomCallback(resolved, handlerName) : null;\n },\n };\n}\n","import type {\n CoreRuntimeApplication as CoreRuntimeApplicationType,\n CoreRuntimeConfig,\n GuardInput as RuntimeGuardInput,\n GuardResult as RuntimeGuardResult,\n} from \"@celerity-sdk/runtime\";\nimport { WebSocketSender } from \"@celerity-sdk/types\";\nimport type { GuardResult } from \"../handlers/guard-pipeline\";\nimport type { RuntimeBootstrapResult } from \"./runtime-entry\";\nimport { RuntimeWebSocketSender } from \"../handlers/websocket-sender\";\nimport { bootstrapForRuntime } from \"./runtime-entry\";\n\nexport type StartRuntimeOptions = {\n block?: boolean;\n};\n\ntype RuntimeModule = {\n CoreRuntimeApplication: new (config: CoreRuntimeConfig) => CoreRuntimeApplicationType;\n runtimeConfigFromEnv: () => CoreRuntimeConfig;\n};\n\nasync function loadRuntime(): Promise<{\n app: CoreRuntimeApplicationType;\n appConfig: ReturnType<CoreRuntimeApplicationType[\"setup\"]>;\n}> {\n // Dynamic import — @celerity-sdk/runtime is an optional peer dependency.\n const pkg = \"@celerity-sdk/runtime\";\n const runtimeModule = (await import(pkg)) as RuntimeModule;\n\n const config = runtimeModule.runtimeConfigFromEnv();\n const app = new runtimeModule.CoreRuntimeApplication(config);\n const appConfig = app.setup();\n\n return { app, appConfig };\n}\n\nfunction mapGuardResult(result: GuardResult): RuntimeGuardResult {\n if (result.allowed) {\n return { status: \"allowed\", auth: result.auth };\n }\n const status = result.statusCode === 403 ? \"forbidden\" : \"unauthorised\";\n return { status, message: result.message };\n}\n\nasync function registerHttpHandlers(\n app: CoreRuntimeApplicationType,\n handlers: ReturnType<CoreRuntimeApplicationType[\"setup\"]>[\"api\"],\n result: RuntimeBootstrapResult,\n): Promise<void> {\n for (const def of handlers?.http?.handlers ?? []) {\n const callback =\n result.createRouteCallback(def.method, def.path, def.name) ??\n (await result.createRouteCallbackById(def.handler, def.location, def.name));\n if (callback) {\n app.registerHttpHandler(def.path, def.method, def.timeout, callback);\n }\n }\n}\n\nasync function registerGuardHandlers(\n app: CoreRuntimeApplicationType,\n guards: NonNullable<ReturnType<CoreRuntimeApplicationType[\"setup\"]>[\"api\"]>[\"guards\"],\n result: RuntimeBootstrapResult,\n): Promise<void> {\n for (const guardDef of guards?.handlers ?? []) {\n const coreCallback = result.createGuardCallback(guardDef.name);\n if (coreCallback) {\n await app.registerGuardHandler(\n guardDef.name,\n async (_err: Error | null, input: RuntimeGuardInput) => {\n const coreResult = await coreCallback({\n token: input.token,\n method: input.request.method,\n path: input.request.path,\n headers: input.request.headers,\n query: input.request.query,\n cookies: input.request.cookies,\n body: input.request.body ?? null,\n requestId: input.request.requestId,\n clientIp: input.request.clientIp,\n auth: input.auth ?? {},\n handlerName: input.handlerName,\n });\n return mapGuardResult(coreResult);\n },\n );\n }\n }\n}\n\nasync function registerWebSocketHandlers(\n app: CoreRuntimeApplicationType,\n websocket: NonNullable<ReturnType<CoreRuntimeApplicationType[\"setup\"]>[\"api\"]>[\"websocket\"],\n result: RuntimeBootstrapResult,\n): Promise<void> {\n for (const def of websocket?.handlers ?? []) {\n const callback =\n result.createWebSocketCallback(def.route, def.name) ??\n (await result.createWebSocketCallbackById(def.handler, def.location, def.name));\n if (callback) {\n app.registerWebsocketHandler(def.route, callback);\n }\n }\n}\n\nasync function registerConsumerHandlers(\n app: CoreRuntimeApplicationType,\n consumers: ReturnType<CoreRuntimeApplicationType[\"setup\"]>[\"consumers\"],\n result: RuntimeBootstrapResult,\n): Promise<void> {\n for (const consumer of consumers?.consumers ?? []) {\n for (const def of consumer.handlers) {\n const tag = `source::${consumer.sourceId}::${def.name}`;\n const callback =\n result.createConsumerCallback(tag, def.name) ??\n (await result.createConsumerCallbackById(def.handler, def.location, def.name));\n if (callback) {\n app.registerConsumerHandler(tag, def.timeout, callback);\n }\n }\n }\n}\n\nasync function registerScheduleHandlers(\n app: CoreRuntimeApplicationType,\n schedules: ReturnType<CoreRuntimeApplicationType[\"setup\"]>[\"schedules\"],\n result: RuntimeBootstrapResult,\n): Promise<void> {\n for (const schedule of schedules?.schedules ?? []) {\n for (const def of schedule.handlers) {\n const tag = `source::${schedule.scheduleId}::${def.name}`;\n const callback =\n result.createScheduleCallback(tag, def.name) ??\n (await result.createScheduleCallbackById(def.handler, def.location, def.name));\n if (callback) {\n app.registerScheduleHandler(tag, def.timeout, callback);\n }\n }\n }\n}\n\nasync function registerCustomHandlers(\n app: CoreRuntimeApplicationType,\n customHandlers: ReturnType<CoreRuntimeApplicationType[\"setup\"]>[\"customHandlers\"],\n result: RuntimeBootstrapResult,\n): Promise<void> {\n for (const def of customHandlers?.handlers ?? []) {\n const callback =\n result.createCustomCallback(def.name) ??\n (await result.createCustomCallbackById(def.handler, def.location, def.name));\n if (callback) {\n app.registerCustomHandler(def.name, def.timeout, callback);\n }\n }\n}\n\n/**\n * Full runtime lifecycle orchestrator.\n * Dynamically imports @celerity-sdk/runtime, loads config from CELERITY_* environment\n * variables, bootstraps the user's module, registers handler callbacks, and starts the server.\n */\nexport async function startRuntime(options?: StartRuntimeOptions): Promise<void> {\n const { app, appConfig } = await loadRuntime();\n const result = await bootstrapForRuntime();\n\n await registerHttpHandlers(app, appConfig.api, result);\n await registerGuardHandlers(app, appConfig.api?.guards, result);\n await registerWebSocketHandlers(app, appConfig.api?.websocket, result);\n await registerConsumerHandlers(app, appConfig.consumers, result);\n await registerScheduleHandlers(app, appConfig.schedules, result);\n await registerCustomHandlers(app, appConfig.customHandlers, result);\n\n if (appConfig.api?.websocket) {\n const sender = new RuntimeWebSocketSender(app.websocketRegistry());\n result.container.register(WebSocketSender, { useValue: sender });\n }\n\n await app.run(options?.block ?? true);\n}\n"],"mappings":"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","names":["import_reflect_metadata","CONTROLLER_METADATA","Symbol","for","HTTP_METHOD_METADATA","ROUTE_PATH_METADATA","PARAM_METADATA","GUARD_PROTECTEDBY_METADATA","GUARD_CUSTOM_METADATA","LAYER_METADATA","MODULE_METADATA","INJECTABLE_METADATA","PUBLIC_METADATA","CUSTOM_METADATA","WEBSOCKET_CONTROLLER_METADATA","WEBSOCKET_EVENT_METADATA","CONSUMER_METADATA","CONSUMER_HANDLER_METADATA","SCHEDULE_HANDLER_METADATA","INVOKE_METADATA","Controller","prefix","target","metadata","undefined","Reflect","defineMetadata","CONTROLLER_METADATA","INJECTABLE_METADATA","import_reflect_metadata","createMethodDecorator","method","path","target","propertyKey","descriptor","Reflect","defineMetadata","HTTP_METHOD_METADATA","ROUTE_PATH_METADATA","Get","Post","Put","Patch","Delete","Head","Options","import_reflect_metadata","createParamDecorator","type","keyOrSchema","schema","target","propertyKey","parameterIndex","existing","Reflect","getOwnMetadata","PARAM_METADATA","meta","index","key","push","defineMetadata","Body","Query","Param","Headers","Auth","Token","Req","Cookies","RequestId","extractParam","request","textBody","JSON","parse","query","pathParams","headers","auth","cookies","requestId","import_reflect_metadata","Guard","name","target","Reflect","defineMetadata","GUARD_CUSTOM_METADATA","hasOwnMetadata","INJECTABLE_METADATA","ProtectedBy","propertyKey","_descriptor","existing","getOwnMetadata","GUARD_PROTECTEDBY_METADATA","Public","descriptor","PUBLIC_METADATA","import_reflect_metadata","UseLayer","layers","target","propertyKey","_descriptor","existing","Reflect","getOwnMetadata","LAYER_METADATA","defineMetadata","UseLayers","import_reflect_metadata","UseResource","resourceNames","target","propertyKey","_descriptor","existing","Reflect","getOwnMetadata","USE_RESOURCE_METADATA","defineMetadata","UseResources","import_reflect_metadata","SetMetadata","key","value","target","propertyKey","_descriptor","existing","Reflect","getOwnMetadata","CUSTOM_METADATA","defineMetadata","Action","import_reflect_metadata","Injectable","target","Reflect","defineMetadata","INJECTABLE_METADATA","Inject","token","_propertyKey","parameterIndex","existing","getOwnMetadata","INJECT_METADATA","Map","set","import_reflect_metadata","Module","metadata","target","Reflect","defineMetadata","MODULE_METADATA","import_reflect_metadata","WebSocketController","target","Reflect","defineMetadata","WEBSOCKET_CONTROLLER_METADATA","INJECTABLE_METADATA","OnConnect","propertyKey","descriptor","meta","eventType","route","WEBSOCKET_EVENT_METADATA","OnMessage","OnDisconnect","import_reflect_metadata","createWsParamDecorator","type","schema","target","propertyKey","parameterIndex","existing","Reflect","getOwnMetadata","PARAM_METADATA","meta","index","push","defineMetadata","ConnectionId","MessageBody","MessageId","RequestContext","EventType","import_reflect_metadata","Consumer","sourceId","target","meta","undefined","Reflect","defineMetadata","CONSUMER_METADATA","INJECTABLE_METADATA","MessageHandler","route","propertyKey","CONSUMER_HANDLER_METADATA","import_reflect_metadata","createConsumerParamDecorator","type","schema","target","propertyKey","parameterIndex","existing","Reflect","getOwnMetadata","PARAM_METADATA","meta","index","push","defineMetadata","Messages","EventInput","Vendor","ConsumerTraceContext","import_reflect_metadata","isScheduleExpression","value","startsWith","parseScheduleArg","arg","schedule","scheduleId","meta","undefined","ScheduleHandler","target","propertyKey","Reflect","defineMetadata","SCHEDULE_HANDLER_METADATA","import_reflect_metadata","createScheduleParamDecorator","type","schema","target","propertyKey","parameterIndex","existing","Reflect","getOwnMetadata","PARAM_METADATA","meta","index","push","defineMetadata","ScheduleInput","ScheduleId","ScheduleExpression","ScheduleEventInput","import_reflect_metadata","Invoke","name","target","propertyKey","meta","Reflect","defineMetadata","INVOKE_METADATA","import_reflect_metadata","createInvokeParamDecorator","type","schema","target","propertyKey","parameterIndex","existing","Reflect","getOwnMetadata","PARAM_METADATA","meta","index","push","defineMetadata","Payload","InvokeContext","HttpException","Error","statusCode","message","details","name","BadRequestException","UnauthorizedException","ForbiddenException","NotFoundException","MethodNotAllowedException","NotAcceptableException","ConflictException","GoneException","UnprocessableEntityException","TooManyRequestsException","InternalServerErrorException","NotImplementedException","BadGatewayException","ServiceUnavailableException","GatewayTimeoutException","inferMode","schemas","consumerMessage","scheduleInput","customPayload","wsMessageBody","ValidationLayer","mode","supports","handlerType","handle","context","next","validateHttp","validateWebSocket","validateConsumer","validateSchedule","validateCustom","request","body","textBody","raw","JSON","parse","metadata","set","error","BadRequestException","formatError","params","pathParams","query","headers","schema","message","jsonBody","undefined","validated","failures","msg","event","messages","parsed","result","push","parsedBody","err","messageId","errorMessage","Error","String","length","input","get","issues","validate","debug","createDebug","runLayerPipeline","layers","context","handler","handlerType","resolved","map","layer","filter","supports","length","index","dispatch","i","Promise","reject","Error","current","name","handle","RESOURCE_LAYER_MAP","bucket","pkg","className","queue","cache","createDefaultSystemLayers","layers","mod","TelemetryLayerClass","TelemetryLayer","push","ConfigLayer","links","captureResourceLinks","resourceTypes","getResourceTypes","type","entry","LayerClass","disposeLayers","layers","layer","reverse","dispose","HandlerMetadataStore","decoratorData","requestData","Map","decoratorMetadata","Object","entries","get","key","has","set","value","import_reflect_metadata","import_debug","import_reflect_metadata","isClassProvider","p","isFactoryProvider","getClassDependencyTokens","target","paramTypes","Reflect","getMetadata","injectOverrides","INJECT_METADATA","Map","map","paramType","index","get","getProviderDependencyTokens","provider","useClass","inject","debug","createDebug","CLOSE_METHODS","isClassProvider","p","isFactoryProvider","isValueProvider","tokenToString","token","name","String","detectCloseMethod","value","obj","method","Container","providers","Map","instances","resolving","Set","edges","closeStack","trackedTokens","register","provider","type","set","trackCloseable","useValue","onClose","registerClass","target","useClass","registerValue","resolve","has","get","path","map","join","Error","add","constructClass","inject","recordEdges","instance","createFromProvider","delete","resolveClass","getDependencies","closeAll","length","entries","reverse","entry","close","clear","validateDependencies","missing","visited","walk","depTokens","getProviderDependencyTokens","getClassDependencyTokens","dep","push","consumer","dependency","keys","details","isInjectable","Reflect","getOwnMetadata","INJECTABLE_METADATA","deps","t","from","to","closeFn","Promise","all","useFactory","APP_CONFIG","Symbol","RUNTIME_APP","import_debug","import_reflect_metadata","import_debug","import_debug","routingKeyOf","handler","type","method","path","route","handlerTag","name","debug","createDebug","HandlerRegistry","byType","Map","exactLookup","byId","guards","register","handler","list","get","type","push","set","routingKeyOf","id","getHandler","routingKey","findHttpHandler","found","getHandlerById","undefined","getHandlersByType","getAllHandlers","result","values","registerGuard","guard","name","getGuard","getAllGuards","spaceIdx","indexOf","method","slice","path","httpHandlers","find","h","matchRoute","pattern","actual","patternParts","split","filter","Boolean","actualParts","length","every","part","i","startsWith","import_reflect_metadata","import_debug","debug","createDebug","buildModuleGraph","rootModule","graph","Map","resolving","Set","walk","moduleClass","importChain","has","name","cyclePath","map","m","join","Error","add","metadata","Reflect","getOwnMetadata","MODULE_METADATA","delete","set","ownTokens","exports","imports","controllers","functionHandlers","guards","providers","imported","provider","typed","provide","controller","guard","exportTokens","length","registerModuleGraph","container","node","registerClass","register","walkModuleGraph","validateModuleGraph","diagnostics","exportToken","push","type","message","tokenToString","visibleTokens","importedModule","importedNode","get","exportedToken","depTokens","consumerToken","getClassDependencyTokens","getProviderDependencyTokens","checkDependencies","size","details","d","consumer","dep","ownerModule","findTokenOwner","ownerNode","adoptedDeps","token","import_reflect_metadata","import_debug","import_common","debug","createDebug","scanHttpHandlers","graph","container","registry","node","controllerClass","controllers","scanClassHandler","fnHandler","functionHandlers","scanFunctionHandler","scanHttpGuards","guard","guards","scanClassGuard","scanFunctionGuard","scanModule","moduleClass","buildModuleGraph","registerModuleGraph","controllerMeta","Reflect","getOwnMetadata","CONTROLLER_METADATA","instance","resolve","prototype","Object","getPrototypeOf","methods","getOwnPropertyNames","filter","name","classProtectedBy","GUARD_PROTECTEDBY_METADATA","classLayers","LAYER_METADATA","classCustomMetadata","CUSTOM_METADATA","methodName","method","HTTP_METHOD_METADATA","routePath","ROUTE_PATH_METADATA","fullPath","joinHandlerPath","prefix","methodProtectedBy","methodLayers","paramMetadata","PARAM_METADATA","isPublic","PUBLIC_METADATA","methodCustomMetadata","descriptor","getOwnPropertyDescriptor","value","layers","validationSchemas","buildValidationSchemasFromParams","unshift","validate","register","type","path","protectedBy","customMetadata","handlerFn","handlerInstance","definition","meta","metadata","schema","schemas","body","query","params","headers","keys","length","id","handler","isFunctionHandler","injectTokens","inject","guardClass","guardName","GUARD_CUSTOM_METADATA","registerGuard","isFunctionGuard","PARAM_TYPE_TO_SCHEMA_KEY","param","wholeObjectSchemas","Map","perKeySchemas","schemaKey","key","keyMap","get","set","hasSchemas","has","composeKeySchemas","keySchemas","parse","data","record","result","import_reflect_metadata","import_debug","debug","createDebug","scanWebSocketHandlers","graph","container","registry","node","controllerClass","controllers","scanClassHandler","fnHandler","functionHandlers","scanFunctionHandler","isWsController","Reflect","getOwnMetadata","WEBSOCKET_CONTROLLER_METADATA","instance","resolve","prototype","Object","getPrototypeOf","methods","getOwnPropertyNames","filter","name","classProtectedBy","GUARD_PROTECTEDBY_METADATA","classLayers","LAYER_METADATA","classCustomMetadata","CUSTOM_METADATA","classIsPublic","PUBLIC_METADATA","methodName","eventMeta","WEBSOCKET_EVENT_METADATA","methodLayers","paramMetadata","PARAM_METADATA","methodCustomMetadata","descriptor","getOwnPropertyDescriptor","value","eventType","route","layers","msgBodyParam","find","p","type","schema","unshift","validate","wsMessageBody","register","protectedBy","isPublic","customMetadata","handlerFn","handlerInstance","definition","meta","metadata","id","handler","isFunctionHandler","injectTokens","inject","import_reflect_metadata","import_debug","debug","createDebug","scanConsumerHandlers","graph","container","registry","node","controllerClass","controllers","scanClassHandler","fnHandler","functionHandlers","scanFunctionHandler","consumerMeta","Reflect","getOwnMetadata","CONSUMER_METADATA","instance","resolve","prototype","Object","getPrototypeOf","methods","getOwnPropertyNames","filter","name","classLayers","LAYER_METADATA","classCustomMetadata","CUSTOM_METADATA","methodName","handlerMeta","CONSUMER_HANDLER_METADATA","methodLayers","paramMetadata","PARAM_METADATA","methodCustomMetadata","descriptor","getOwnPropertyDescriptor","value","handlerTag","route","layers","messageParam","find","p","type","schema","unshift","validate","consumerMessage","register","customMetadata","handlerFn","handlerInstance","definition","meta","metadata","id","messageSchema","handler","isFunctionHandler","injectTokens","inject","import_reflect_metadata","import_debug","debug","createDebug","scanScheduleHandlers","graph","container","registry","node","controllerClass","controllers","scanClassHandler","fnHandler","functionHandlers","scanFunctionHandler","instance","resolve","prototype","Object","getPrototypeOf","methods","getOwnPropertyNames","filter","name","classLayers","Reflect","getOwnMetadata","LAYER_METADATA","classCustomMetadata","CUSTOM_METADATA","methodName","handlerMeta","SCHEDULE_HANDLER_METADATA","methodLayers","paramMetadata","PARAM_METADATA","methodCustomMetadata","descriptor","getOwnPropertyDescriptor","value","handlerTag","scheduleId","layers","inputParam","find","p","type","schema","unshift","validate","scheduleInput","register","customMetadata","schedule","handlerFn","handlerInstance","definition","meta","metadata","id","handler","isFunctionHandler","injectTokens","inject","import_reflect_metadata","import_debug","debug","createDebug","scanCustomHandlers","graph","container","registry","node","controllerClass","controllers","scanClassHandler","fnHandler","functionHandlers","scanFunctionHandler","instance","resolve","prototype","Object","getPrototypeOf","methods","getOwnPropertyNames","filter","name","classLayers","Reflect","getOwnMetadata","LAYER_METADATA","classCustomMetadata","CUSTOM_METADATA","methodName","invokeMeta","INVOKE_METADATA","methodLayers","paramMetadata","PARAM_METADATA","methodCustomMetadata","descriptor","getOwnPropertyDescriptor","value","layers","payloadParam","find","p","type","schema","unshift","validate","customPayload","register","customMetadata","handlerFn","handlerInstance","definition","meta","metadata","id","handler","isFunctionHandler","injectTokens","inject","debug","createDebug","bootstrap","rootModule","name","container","Container","registry","HandlerRegistry","graph","walkModuleGraph","validateModuleGraph","scanHttpHandlers","scanHttpGuards","scanWebSocketHandlers","scanConsumerHandlers","scanScheduleHandlers","scanCustomHandlers","size","getAllHandlers","length","import_debug","debug","createDebug","CelerityApplication","registry","container","systemLayers","appLayers","runtimeApp","start","app","run","close","shutdown","closeAll","disposeLayers","getContainer","getRegistry","getSystemLayers","getAppLayers","HANDLER_CREATORS","http","adapter","registry","options","createHttpHandler","websocket","createWebSocketHandler","consumer","createConsumerHandler","schedule","createScheduleHandler","custom","createCustomHandler","ServerlessApplication","handler","container","systemLayers","appLayers","createHandler","type","start","close","closeAll","disposeLayers","getHandler","Error","getContainer","getRegistry","import_debug","buildHttpRequest","request","metadata","validatedBody","get","body","undefined","binaryBody","textBody","JSON","parse","method","path","params","pathParams","query","headers","cookies","auth","clientIp","userAgent","contentType","buildHttpContext","container","logger","requestId","requestTime","raw","debug","createDebug","executeHttpPipeline","handler","request","options","context","metadata","HandlerMetadataStore","customMetadata","handlerName","container","allLayers","systemLayers","appLayers","layers","method","path","length","response","runLayerPipeline","style","isFunctionHandler","result","invokeFunctionHandler","invokeClassHandler","normalizeResponse","status","error","HttpException","statusCode","message","headers","body","JSON","stringify","details","Error","String","logger","stack","console","args","sorted","paramMetadata","sort","a","b","index","meta","extractValidatedParam","type","key","handlerFn","apply","handlerInstance","VALIDATED_METADATA_KEYS","query","param","metaKey","validated","get","undefined","extractParam","req","buildHttpRequest","ctx","buildHttpContext","injectTokens","deps","token","push","resolve","isHttpResponse","value","import_debug","debug","createDebug","executeWebSocketPipeline","handler","message","options","context","metadata","HandlerMetadataStore","customMetadata","handlerName","container","allLayers","systemLayers","appLayers","layers","eventType","connectionId","length","runLayerPipeline","style","isFunctionHandler","invokeFunctionHandler","invokeClassHandler","error","errorMessage","Error","String","logger","stack","console","args","sorted","paramMetadata","sort","a","b","index","meta","extractWebSocketParam","handlerFn","apply","handlerInstance","validatedBody","get","undefined","jsonBody","injectTokens","deps","token","push","resolve","type","validated","messageId","requestContext","import_debug","debug","createDebug","executeConsumerPipeline","handler","event","options","context","metadata","HandlerMetadataStore","customMetadata","handlerName","container","allLayers","systemLayers","appLayers","layers","handlerTag","messages","length","result","success","runLayerPipeline","style","isFunctionHandler","validatedMessages","get","validationFailures","rawMessages","undefined","invokeFunctionHandler","invokeClassHandler","existing","failures","error","errorMessage","Error","message","String","logger","messageCount","stack","console","args","sorted","paramMetadata","sort","a","b","index","meta","extractConsumerParam","handlerFn","apply","handlerInstance","_rawMessages","deps","injectTokens","token","push","resolve","firstArg","type","vendor","traceContext","import_debug","debug","createDebug","executeSchedulePipeline","handler","event","options","context","metadata","HandlerMetadataStore","customMetadata","handlerName","container","allLayers","systemLayers","appLayers","layers","handlerTag","length","result","success","runLayerPipeline","style","isFunctionHandler","validatedInput","get","input","invokeFunctionHandler","invokeClassHandler","error","errorMessage","Error","message","String","logger","scheduleId","stack","console","args","sorted","paramMetadata","sort","a","b","index","meta","extractScheduleParam","handlerFn","apply","handlerInstance","_validatedInput","deps","injectTokens","token","push","resolve","type","schedule","undefined","import_debug","debug","createDebug","executeCustomPipeline","handler","payload","options","context","metadata","HandlerMetadataStore","customMetadata","handlerName","rawPayload","container","allLayers","systemLayers","appLayers","layers","length","result","runLayerPipeline","style","isFunctionHandler","validatedPayload","get","invokeFunctionHandler","invokeClassHandler","args","sorted","paramMetadata","sort","a","b","index","meta","extractCustomParam","handlerFn","apply","handlerInstance","deps","injectTokens","token","push","resolve","type","undefined","TestingApplication","registry","container","systemLayers","appLayers","injectHttp","request","handler","getHandler","method","path","NotFoundException","executeHttpPipeline","injectWebSocket","route","message","executeWebSocketPipeline","injectConsumer","handlerTag","event","executeConsumerPipeline","injectSchedule","executeSchedulePipeline","injectCustom","name","payload","executeCustomPipeline","getContainer","getRegistry","mockRequest","options","pathParams","query","headers","cookies","textBody","body","undefined","JSON","stringify","binaryBody","contentType","requestId","requestTime","Date","toISOString","auth","clientIp","traceContext","userAgent","matchedRoute","mockWebSocketMessage","messageType","eventType","connectionId","messageId","jsonBody","mockConsumerEvent","messages","builtMessages","map","msg","index","source","sourceType","sourceName","messageAttributes","vendor","mockScheduleEvent","scheduleId","schedule","input","debug","createDebug","CelerityFactory","create","rootModule","options","name","systemLayers","createDefaultSystemLayers","appLayers","layers","length","container","registry","bootstrap","adapter","ServerlessApplication","CelerityApplication","createTestingApp","TestingApplication","createHttpHandler","config","handler","metadata","schema","layers","inject","customMetadata","path","undefined","method","__celerity_handler","type","httpGet","handlerOrOptions","maybeHandler","httpPost","httpPut","httpPatch","httpDelete","createGuard","config","handler","__celerity_guard","name","metadata","inject","customMetadata","createWebSocketHandler","config","handler","metadata","layers","inject","customMetadata","route","undefined","protectedBy","schema","__celerity_handler","type","createConsumerHandler","config","handler","metadata","layers","inject","customMetadata","route","undefined","messageSchema","__celerity_handler","type","isScheduleExpression","value","startsWith","createScheduleHandler","configOrString","configOrHandler","maybeHandler","config","handler","schedule","scheduleId","metadata","layers","inject","customMetadata","undefined","schema","__celerity_handler","type","createCustomHandler","config","handler","metadata","layers","inject","customMetadata","name","undefined","schema","__celerity_handler","type","import_debug","debug","createDebug","resolveHandlerByModuleRef","handlerId","handlerType","registry","baseDir","lastDot","lastIndexOf","moduleName","slice","exportName","result","tryResolveExport","handlerModulePath","resolve","mod","exported","isFnDef","__celerity_handler","type","handlerFn","handler","handlers","getHandlersByType","match","find","h","id","buildResolvedFromExport","fnDef","meta","metadata","base","layers","paramMetadata","customMetadata","isFunctionHandler","injectTokens","inject","guardFields","protectedBy","isPublic","path","undefined","method","route","handlerTag","scheduleId","name","RuntimeWebSocketSender","registry","sendMessage","connectionId","data","options","messageId","crypto","randomUUID","messageType","payload","JSON","stringify","import_debug","debug","createDebug","executeGuardPipeline","guard","input","options","metadata","HandlerMetadataStore","customMetadata","handlerMetadata","logger","createGuardLogger","name","container","result","isFunctionGuard","invokeFunctionGuard","invokeClassGuard","allowed","auth","error","HttpException","statusCode","message","details","Error","String","guardName","attrs","requestId","method","path","clientIp","handlerName","has","root","resolve","child","pkg","createLogger","readTelemetryEnv","rootLogger","guardContext","token","request","headers","query","cookies","body","paramCount","handlerFn","length","args","Array","decorated","Set","paramMetadata","map","m","index","meta","type","i","apply","handlerInstance","req","ctx","injectTokens","deps","push","import_node_path","import_debug","debug","createDebug","discoverModule","modulePath","resolved","process","env","CELERITY_MODULE_PATH","Error","absolutePath","resolve","imported","rootModule","default","findModuleExport","name","key","Object","keys","undefined","flattenMultiValueRecord","record","result","key","values","Object","entries","length","mapRuntimeRequest","request","method","toUpperCase","path","pathParams","query","headers","cookies","textBody","binaryBody","contentType","requestId","requestTime","auth","clientIp","traceContext","userAgent","matchedRoute","mapToRuntimeResponse","response","status","body","mapWebSocketMessage","info","requestContext","protocolVersion","undefined","messageType","eventType","connectionId","messageId","jsonBody","mapConsumerEventInput","input","handlerTag","messages","map","msg","m","source","sourceType","sourceName","messageAttributes","vendor","mapScheduleEventInput","scheduleId","schedule","mapToNapiEventResult","success","failures","f","errorMessage","import_node_path","import_debug","debug","createDebug","bootstrapForRuntime","modulePath","systemLayers","layers","createDefaultSystemLayers","resolvedModulePath","process","env","CELERITY_MODULE_PATH","moduleDir","dirname","resolve","cwd","rootModule","discoverModule","container","registry","bootstrap","buildHttpCallback","handler","handlerName","_err","request","httpRequest","mapRuntimeRequest","httpResponse","executeHttpPipeline","mapToRuntimeResponse","buildWebSocketCallback","info","message","mapWebSocketMessage","executeWebSocketPipeline","buildConsumerCallback","input","event","mapConsumerEventInput","result","executeConsumerPipeline","mapToNapiEventResult","buildScheduleCallback","mapScheduleEventInput","executeSchedulePipeline","buildCustomCallback","payload","executeCustomPipeline","createRouteCallback","method","path","getHandler","createRouteCallbackById","handlerId","codeLocation","fromRegistry","getHandlerById","baseDir","resolved","resolveHandlerByModuleRef","createGuardCallback","guardName","guard","getGuard","customMetadata","executeGuardPipeline","handlerMetadata","createWebSocketCallback","route","createWebSocketCallbackById","createConsumerCallback","handlerTag","createConsumerCallbackById","createScheduleCallback","createScheduleCallbackById","createCustomCallback","createCustomCallbackById","loadRuntime","pkg","runtimeModule","config","runtimeConfigFromEnv","app","CoreRuntimeApplication","appConfig","setup","mapGuardResult","result","allowed","status","auth","statusCode","message","registerHttpHandlers","handlers","def","http","callback","createRouteCallback","method","path","name","createRouteCallbackById","handler","location","registerHttpHandler","timeout","registerGuardHandlers","guards","guardDef","coreCallback","createGuardCallback","registerGuardHandler","_err","input","coreResult","token","request","headers","query","cookies","body","requestId","clientIp","handlerName","registerWebSocketHandlers","websocket","createWebSocketCallback","route","createWebSocketCallbackById","registerWebsocketHandler","registerConsumerHandlers","consumers","consumer","tag","sourceId","createConsumerCallback","createConsumerCallbackById","registerConsumerHandler","registerScheduleHandlers","schedules","schedule","scheduleId","createScheduleCallback","createScheduleCallbackById","registerScheduleHandler","registerCustomHandlers","customHandlers","createCustomCallback","createCustomCallbackById","registerCustomHandler","startRuntime","options","bootstrapForRuntime","api","sender","RuntimeWebSocketSender","websocketRegistry","container","register","WebSocketSender","useValue","run","block","import_types"]}