import { FlowBase, type FlowRunOptions } from '../../common'; import 'reflect-metadata'; declare const inputSchema: import("@frontmcp/lazy-zod").ZodObject<{ request: import("@frontmcp/lazy-zod").ZodObject<{}, import("zod/v4/core").$loose>; }, import("zod/v4/core").$strip>; declare const stateSchema: import("@frontmcp/lazy-zod").ZodObject<{ baseUrl: import("@frontmcp/lazy-zod").ZodString; authorizationHeader: import("@frontmcp/lazy-zod").ZodOptional; token: import("@frontmcp/lazy-zod").ZodOptional; sessionIdHeader: import("@frontmcp/lazy-zod").ZodOptional; sessionProtocol: import("@frontmcp/lazy-zod").ZodOptional; userAgent: import("@frontmcp/lazy-zod").ZodOptional; prmMetadataPath: import("@frontmcp/lazy-zod").ZodOptional; prmMetadataHeader: import("@frontmcp/lazy-zod").ZodOptional; prmUrl: import("@frontmcp/lazy-zod").ZodOptional; jwtPayload: import("@frontmcp/lazy-zod").ZodOptional>; user: import("@frontmcp/lazy-zod").ZodOptional; sub: import("@frontmcp/lazy-zod").ZodString; exp: import("@frontmcp/lazy-zod").ZodOptional; iat: import("@frontmcp/lazy-zod").ZodOptional; aud: import("@frontmcp/lazy-zod").ZodOptional]>>; email: import("@frontmcp/lazy-zod").ZodOptional; username: import("@frontmcp/lazy-zod").ZodOptional; preferred_username: import("@frontmcp/lazy-zod").ZodOptional; name: import("@frontmcp/lazy-zod").ZodOptional; picture: import("@frontmcp/lazy-zod").ZodOptional; }, import("zod/v4/core").$loose>>; session: import("@frontmcp/lazy-zod").ZodOptional>; isPublic: import("@frontmcp/lazy-zod").ZodOptional; platformType: import("@frontmcp/lazy-zod").ZodOptional>; clientName: import("@frontmcp/lazy-zod").ZodOptional; clientVersion: import("@frontmcp/lazy-zod").ZodOptional; supportsElicitation: import("@frontmcp/lazy-zod").ZodOptional; skillsOnlyMode: import("@frontmcp/lazy-zod").ZodOptional; }, import("zod/v4/core").$strip>>; }, import("zod/v4/core").$strip>>; }, import("zod/v4/core").$strip>; export declare const sessionVerifyOutputSchema: import("@frontmcp/lazy-zod").ZodUnion; prmMetadataHeader: import("@frontmcp/lazy-zod").ZodString; }, import("zod/v4/core").$strip>, import("@frontmcp/lazy-zod").ZodObject<{ kind: import("@frontmcp/lazy-zod").ZodLiteral<"authorized">; authorization: import("@frontmcp/lazy-zod").ZodObject<{ token: import("@frontmcp/lazy-zod").ZodString; session: import("@frontmcp/lazy-zod").ZodOptional>; isPublic: import("@frontmcp/lazy-zod").ZodOptional; platformType: import("@frontmcp/lazy-zod").ZodOptional>; clientName: import("@frontmcp/lazy-zod").ZodOptional; clientVersion: import("@frontmcp/lazy-zod").ZodOptional; supportsElicitation: import("@frontmcp/lazy-zod").ZodOptional; skillsOnlyMode: import("@frontmcp/lazy-zod").ZodOptional; }, import("zod/v4/core").$strip>>; }, import("zod/v4/core").$strip>>; user: import("@frontmcp/lazy-zod").ZodObject<{ iss: import("@frontmcp/lazy-zod").ZodString; sid: import("@frontmcp/lazy-zod").ZodOptional; sub: import("@frontmcp/lazy-zod").ZodString; exp: import("@frontmcp/lazy-zod").ZodOptional; iat: import("@frontmcp/lazy-zod").ZodOptional; aud: import("@frontmcp/lazy-zod").ZodOptional]>>; email: import("@frontmcp/lazy-zod").ZodOptional; username: import("@frontmcp/lazy-zod").ZodOptional; preferred_username: import("@frontmcp/lazy-zod").ZodOptional; name: import("@frontmcp/lazy-zod").ZodOptional; picture: import("@frontmcp/lazy-zod").ZodOptional; }, import("zod/v4/core").$loose>; }, import("zod/v4/core").$strip>; }, import("zod/v4/core").$strip>, import("@frontmcp/lazy-zod").ZodObject<{ kind: import("@frontmcp/lazy-zod").ZodLiteral<"forbidden">; prmMetadataHeader: import("@frontmcp/lazy-zod").ZodString; }, import("zod/v4/core").$strip>]>; declare const plan: { readonly pre: ["parseInput", "handlePublicMode", "handleAnonymousFallback", "requireAuthorizationHeader", "verifyIfJwt"]; readonly execute: ["deriveUser", "parseSessionHeader", "buildAuthorizedOutput"]; }; declare global { interface ExtendFlows { 'session:verify': FlowRunOptions; } } declare const name: "session:verify"; export default class SessionVerifyFlow extends FlowBase { logger: import("../../common").FrontMcpLogger; private maskSub; /** * Create an anonymous session with consistent structure for both public and transparent-anon modes. * Encapsulates the shared logic for session creation, payload encryption, and user derivation. */ private createAnonymousSession; parseInput(): Promise; /** * Handle public mode - allow anonymous access without requiring authorization * In public mode, we create an anonymous authorization with a stateful session * but NO token. This allows public docs/CI to work without Authorization header. * * CRITICAL: When client sends mcp-session-id header, we MUST use that exact ID * for transport registry lookup. Creating a new session ID would cause mismatch. */ handlePublicMode(): Promise; /** * Handle transparent mode with allowAnonymous when no token is provided * This creates an anonymous session similar to public mode but for transparent auth */ handleAnonymousFallback(): Promise; requireAuthorizationOrChallenge(): Promise; /** * If Authorization is a JWT: * - Attempt verification against any known / cached public keys we have (gateway/local) * - If verification fails → 401 * - If verification ok → capture payload * If NOT a JWT: * - we do NOT attempt verification, just pass the raw token through */ verifyIfJwt(): Promise; deriveUser(): Promise; /** * Parse the session header (mcp-session-id) * - If session id is present, validate it * - If valid, capture the session info * - If NOT valid, ignore (no session) */ parseSessionHeader(): Promise; buildAuthorizedOutput(): Promise; } export {}; //# sourceMappingURL=session.verify.flow.d.ts.map