import { Principal } from '../core/index.js'; import { UserInfo, OAuth2Token, OAuth2ClientConfig } from '../oauth2/types.js'; import { Session, KVRepository, SessionRepository } from '../session/types.js'; import { CookieOptions } from '../utils/http.js'; import 'cookie'; type LoggedHandler = (principal: Principal) => Promise; type AuthorizedHandler = (request: Request, registrationId: string, userInfo: UserInfo, token?: OAuth2Token) => Promise; interface AuthConfig { timing?: boolean; kvRepository: KVRepository; sessionRepository: SessionRepository; cookie?: CookieOptions & { name?: string; }; turnstileSecretKey?: string; oauth2?: { client?: OAuth2ClientConfig; }; } interface AuthService { csrf: (request: Request) => Promise; logout: (request: Request) => Promise; logged: (request: Request, onLogged?: LoggedHandler) => Promise; oauth2State: (request: Request) => Promise; oauth2Nonce: (request: Request) => Promise; oauth2Authorization: (request: Request) => Promise; loginOAuth2Code: (request: Request, onAuthorized: AuthorizedHandler) => Promise; loginOAuth2Native: (request: Request, onAuthorized: AuthorizedHandler) => Promise; loginOAuth2Onetap: (request: Request, onAuthorized: AuthorizedHandler, registrationId?: string) => Promise; sendEmailVerificationCode: (request: Request, sender: (data: { email: string; verificationCode: string; }) => Promise) => Promise; sendPhoneVerificationCode: (request: Request, sender: (data: { phone: string; verificationCode: string; }) => Promise) => Promise; loginEmail: (request: Request, onAuthorized: AuthorizedHandler) => Promise; loginPhone: (request: Request, onAuthorized: AuthorizedHandler) => Promise; kick: (principal: Principal) => Promise; isAuthenticated: (request: Request) => Promise; getSession: (request: Request, create: T) => Promise; deleteSession: (sessionId: string) => Promise; getPrincipal: (request: Request) => Promise; listSessions: (principal: Principal) => Promise; cleanupExpiredSessions: (cleanupCount?: number) => Promise; } export type { AuthConfig, AuthService, AuthorizedHandler, LoggedHandler };