import type { createAuthHttpHandlers } from "../http/index.ts"; export type AuthHandlerName = keyof ReturnType; export type AuthRouteGroup = | "registration" | "login" | "verification" | "password" | "invitations" | "magicLink" | "otp" | "mfa" | "sessions" | "impersonation" | "passkeys"; export interface AuthRouteDefinition { path: string; group: AuthRouteGroup; handler: AuthHandlerName; methods: readonly ("GET" | "POST")[]; } /** Single source of truth for package-contributed auth endpoints. */ export const AUTH_ROUTE_DEFINITIONS = [ { path: "/api/auth/session/verify", group: "sessions", handler: "verifySession", methods: ["GET"], }, { path: "/api/auth/register", group: "registration", handler: "register", methods: ["POST"] }, { path: "/api/auth/login", group: "login", handler: "login", methods: ["POST"] }, { path: "/api/auth/logout", group: "login", handler: "logout", methods: ["POST"] }, { path: "/api/auth/verification/request", group: "verification", handler: "requestVerification", methods: ["POST"], }, { path: "/api/auth/verify/email", group: "verification", handler: "verifyEmail", methods: ["GET", "POST"], }, { path: "/api/auth/verify/phone", group: "verification", handler: "verifyPhone", methods: ["POST"], }, { path: "/api/auth/password/request", group: "password", handler: "requestPasswordReset", methods: ["POST"], }, { path: "/api/auth/password/reset", group: "password", handler: "resetPassword", methods: ["POST"], }, { path: "/api/auth/password/change", group: "password", handler: "changePassword", methods: ["POST"], }, { path: "/api/auth/invitations/accept", group: "invitations", handler: "acceptInvitation", methods: ["POST"], }, { path: "/api/auth/magic-link/request", group: "magicLink", handler: "requestMagicLink", methods: ["POST"], }, { path: "/api/auth/magic-link", group: "magicLink", handler: "consumeMagicLink", methods: ["GET", "POST"], }, { path: "/api/auth/otp/login/request", group: "otp", handler: "requestOtpLogin", methods: ["POST"], }, { path: "/api/auth/otp/login/complete", group: "otp", handler: "completeOtpLogin", methods: ["POST"], }, { path: "/api/auth/otp", group: "otp", handler: "issueOtp", methods: ["POST"] }, { path: "/api/auth/otp/verify", group: "otp", handler: "verifyOtp", methods: ["POST"], }, { path: "/api/auth/totp/setup", group: "mfa", handler: "beginTotp", methods: ["POST"] }, { path: "/api/auth/totp/confirm", group: "mfa", handler: "confirmTotp", methods: ["POST"], }, { path: "/api/auth/totp/disable", group: "mfa", handler: "disableTotp", methods: ["POST"], }, { path: "/api/auth/recovery-codes", group: "mfa", handler: "recoveryCodes", methods: ["POST"], }, { path: "/api/auth/mfa/otp", group: "mfa", handler: "beginMfaOtp", methods: ["POST"] }, { path: "/api/auth/mfa/complete", group: "mfa", handler: "completeMfa", methods: ["POST"], }, { path: "/api/auth/sessions", group: "sessions", handler: "sessions", methods: ["GET"] }, { path: "/api/auth/sessions/revoke", group: "sessions", handler: "revokeSession", methods: ["POST"], }, { path: "/api/auth/impersonation/start", group: "impersonation", handler: "startImpersonation", methods: ["POST"], }, { path: "/api/auth/impersonation/stop", group: "impersonation", handler: "stopImpersonation", methods: ["POST"], }, { path: "/api/auth/passkeys/register/options", group: "passkeys", handler: "passkeyRegistrationOptions", methods: ["POST"], }, { path: "/api/auth/passkeys/register/verify", group: "passkeys", handler: "passkeyRegistrationVerify", methods: ["POST"], }, { path: "/api/auth/passkeys/login/options", group: "passkeys", handler: "passkeyAuthenticationOptions", methods: ["POST"], }, { path: "/api/auth/passkeys/login/verify", group: "passkeys", handler: "passkeyAuthenticationVerify", methods: ["POST"], }, ] as const satisfies readonly AuthRouteDefinition[];