import type { AnyHandler, HandlerFn } from "../model/HandlerContext.js"; /** * Handler registry keyed by `Procedure.handler.ref`. Consumers call * `register` at boot — typically via the `handlers` option of * `createMantleRuntime` — and the dispatcher resolves per request via * `get`. * * The registry is a usecase-level port: use cases (specifically * `InvokeProcedureUseCase`) depend on it; the consumer's * `src/mantle/config.ts` supplies it through the runtime/Worker `handlers` * option. Lives here in `domain/port/` (not * `usecase/port/`) because the implementation IS the port — there's * no separate adapter for it. * * Boot-time fail-fast (Loop 3 of the SDK authoring contract, * ADR-0007) verifies every Procedure's `handler.ref` resolves to a * registered function before the runtime accepts traffic. */ export interface HandlerRegistry { register(ref: string, fn: HandlerFn): void; get(ref: string): AnyHandler | undefined; has(ref: string): boolean; /** Snapshot of registered refs — used by the boot validator to * enumerate `candidates` on `HANDLER_NOT_REGISTERED` diagnostics. */ list(): readonly string[]; } export declare class InMemoryHandlerRegistry implements HandlerRegistry { private readonly map; register(ref: string, fn: HandlerFn): void; get(ref: string): AnyHandler | undefined; has(ref: string): boolean; list(): readonly string[]; } /** * Convenience factory: build a registry from a record of handlers. * Equivalent to calling `register()` for each entry. */ export declare function buildHandlerRegistry(handlers: Readonly>): HandlerRegistry; //# sourceMappingURL=HandlerRegistry.d.ts.map