/** * Dynamic Client Registration — POST /oauth/register * * Who calls: Developers/automation. * * Purpose: Let clients register programmatically (redirect URIs, grant types, etc.). * * Control surface (#462): the LOCAL Authorization Server's DCR is governed by * the declarative `auth.dcr` block. When `dcr` is omitted the historical * behavior is preserved exactly — registration is enabled in development and * disabled in production (via `isProduction()`), with no allowlist and no * initial access token. When configured, this flow enforces: * - `dcr.enabled === false` → 404 (behave as if the endpoint does not exist) * - `dcr.initialAccessToken` → require `Authorization: Bearer ` (401) * - `dcr.allowedClientIds` → registrations are pinned to an allowed id (400) * - `dcr.allowedRedirectUris` → reject unlisted redirect_uris (400) * Registered clients are stored on the per-instance {@link DcrClientRegistry} * (LocalPrimaryAuth), so the authorize/token flows can validate them. */ import { FlowBase, type FlowRunOptions } from '../../common'; declare const inputSchema: import("@frontmcp/lazy-zod").ZodObject<{ request: import("@frontmcp/lazy-zod").ZodObject<{}, import("zod/v4/core").$loose>; response: import("@frontmcp/lazy-zod").ZodObject<{}, import("zod/v4/core").$loose>; next: import("@frontmcp/lazy-zod").ZodOptional>; }, import("zod/v4/core").$strip>; declare const outputSchema: import("@frontmcp/lazy-zod").ZodObject<{ kind: import("@frontmcp/lazy-zod").ZodLiteral<"json">; status: import("@frontmcp/lazy-zod").ZodNumber; body: import("@frontmcp/lazy-zod").ZodUnion, import("@frontmcp/lazy-zod").ZodArray, import("@frontmcp/lazy-zod").ZodRecord]>; contentType: import("@frontmcp/lazy-zod").ZodDefault; headers: import("@frontmcp/lazy-zod").ZodOptional]>]>>>>; cookies: import("@frontmcp/lazy-zod").ZodOptional; domain: import("@frontmcp/lazy-zod").ZodOptional; httpOnly: import("@frontmcp/lazy-zod").ZodDefault; secure: import("@frontmcp/lazy-zod").ZodOptional; sameSite: import("@frontmcp/lazy-zod").ZodOptional>; maxAge: import("@frontmcp/lazy-zod").ZodOptional; expires: import("@frontmcp/lazy-zod").ZodOptional; }, import("zod/v4/core").$strip>>>>; }, import("zod/v4/core").$strip>; declare const stateSchema: import("@frontmcp/lazy-zod").ZodObject<{ body: import("@frontmcp/lazy-zod").ZodObject<{ redirect_uris: import("@frontmcp/lazy-zod").ZodArray; token_endpoint_auth_method: import("@frontmcp/lazy-zod").ZodDefault>; grant_types: import("@frontmcp/lazy-zod").ZodDefault>>; response_types: import("@frontmcp/lazy-zod").ZodDefault>>; client_name: import("@frontmcp/lazy-zod").ZodOptional; scope: import("@frontmcp/lazy-zod").ZodOptional; }, import("zod/v4/core").$loose>; dcrEnabled: import("@frontmcp/lazy-zod").ZodBoolean; }, import("zod/v4/core").$strip>; declare const plan: { readonly pre: ["parseInput", "validateInput"]; readonly execute: ["registerClient", "respondRegistration"]; readonly post: ["validateOutput"]; }; declare global { interface ExtendFlows { 'oauth:register': FlowRunOptions; } } declare const name: "oauth:register"; export default class OauthRegisterFlow extends FlowBase { private registered?; /** The local AS primary auth, which owns the DCR client registry (#462). */ private get localAuth(); parseInput(): Promise; validateInput(): Promise; registerClient(): Promise; respondRegistration(): Promise; validateOutput(): Promise; } export {}; //# sourceMappingURL=oauth.register.flow.d.ts.map