import { z } from 'zod'; export declare const AuthConfigSchema: z.ZodObject<{ id: z.ZodOptional; enabledProviders: z.ZodDefault>; authPolicy: z.ZodObject<{ emailVerificationRequired: z.ZodDefault; passwordReset: z.ZodDefault; passwordChange: z.ZodDefault; accountDeletion: z.ZodDefault; smsVerificationRequired: z.ZodDefault; loginAfterRegistration: z.ZodDefault; }, "strip", z.ZodTypeAny, { emailVerificationRequired: boolean; passwordReset: boolean; passwordChange: boolean; accountDeletion: boolean; smsVerificationRequired: boolean; loginAfterRegistration: boolean; }, { emailVerificationRequired?: boolean | undefined; passwordReset?: boolean | undefined; passwordChange?: boolean | undefined; accountDeletion?: boolean | undefined; smsVerificationRequired?: boolean | undefined; loginAfterRegistration?: boolean | undefined; }>; passwordPolicy: z.ZodObject<{ minLength: z.ZodDefault; requireUppercase: z.ZodDefault; requireLowercase: z.ZodDefault; requireNumber: z.ZodDefault; requireSpecialChar: z.ZodDefault; maxAttempts: z.ZodDefault; }, "strip", z.ZodTypeAny, { minLength: number; requireUppercase: boolean; requireLowercase: boolean; requireNumber: boolean; requireSpecialChar: boolean; maxAttempts: number; }, { minLength?: number | undefined; requireUppercase?: boolean | undefined; requireLowercase?: boolean | undefined; requireNumber?: boolean | undefined; requireSpecialChar?: boolean | undefined; maxAttempts?: number | undefined; }>; sessionSettings: z.ZodObject<{ accessTokenTTL: z.ZodDefault; refreshTokenTTL: z.ZodDefault; tokenRotation: z.ZodDefault; multipleSessions: z.ZodDefault; }, "strip", z.ZodTypeAny, { accessTokenTTL: string; refreshTokenTTL: string; tokenRotation: boolean; multipleSessions: boolean; }, { accessTokenTTL?: string | undefined; refreshTokenTTL?: string | undefined; tokenRotation?: boolean | undefined; multipleSessions?: boolean | undefined; }>; mfaSettings: z.ZodObject<{ required: z.ZodDefault; allowedMethods: z.ZodDefault, "many">>; }, "strip", z.ZodTypeAny, { required: boolean; allowedMethods: ("totp" | "sms" | "email")[]; }, { required?: boolean | undefined; allowedMethods?: ("totp" | "sms" | "email")[] | undefined; }>; adminFeature: z.ZodDefault; createInitialApiKey: z.ZodDefault; initialApiKeyName: z.ZodDefault; initialApiKeyScopes: z.ZodDefault>; }, "strip", z.ZodTypeAny, { enabled: boolean; createInitialApiKey: boolean; initialApiKeyName: string; initialApiKeyScopes: string[]; }, { enabled?: boolean | undefined; createInitialApiKey?: boolean | undefined; initialApiKeyName?: string | undefined; initialApiKeyScopes?: string[] | undefined; }>>; rateLimiting: z.ZodDefault>>; }, "strip", z.ZodTypeAny, { enabledProviders: string[]; authPolicy: { emailVerificationRequired: boolean; passwordReset: boolean; passwordChange: boolean; accountDeletion: boolean; smsVerificationRequired: boolean; loginAfterRegistration: boolean; }; passwordPolicy: { minLength: number; requireUppercase: boolean; requireLowercase: boolean; requireNumber: boolean; requireSpecialChar: boolean; maxAttempts: number; }; sessionSettings: { accessTokenTTL: string; refreshTokenTTL: string; tokenRotation: boolean; multipleSessions: boolean; }; mfaSettings: { required: boolean; allowedMethods: ("totp" | "sms" | "email")[]; }; adminFeature: { enabled: boolean; createInitialApiKey: boolean; initialApiKeyName: string; initialApiKeyScopes: string[]; }; rateLimiting: Record; id?: number | undefined; }, { authPolicy: { emailVerificationRequired?: boolean | undefined; passwordReset?: boolean | undefined; passwordChange?: boolean | undefined; accountDeletion?: boolean | undefined; smsVerificationRequired?: boolean | undefined; loginAfterRegistration?: boolean | undefined; }; passwordPolicy: { minLength?: number | undefined; requireUppercase?: boolean | undefined; requireLowercase?: boolean | undefined; requireNumber?: boolean | undefined; requireSpecialChar?: boolean | undefined; maxAttempts?: number | undefined; }; sessionSettings: { accessTokenTTL?: string | undefined; refreshTokenTTL?: string | undefined; tokenRotation?: boolean | undefined; multipleSessions?: boolean | undefined; }; mfaSettings: { required?: boolean | undefined; allowedMethods?: ("totp" | "sms" | "email")[] | undefined; }; id?: number | undefined; enabledProviders?: string[] | undefined; adminFeature?: { enabled?: boolean | undefined; createInitialApiKey?: boolean | undefined; initialApiKeyName?: string | undefined; initialApiKeyScopes?: string[] | undefined; } | undefined; rateLimiting?: Record | undefined; }>; export type AuthConfig = z.infer; export interface UserService { findUser(identifier: string): Promise; createUser(user: Partial, password?: string): Promise; updateUser(userId: string, user: Partial): Promise; deleteUser(userId: string): Promise; findUserById(userId: string): Promise; findUserByEmail(email: string): Promise; findUserByPhone(phone: string): Promise; setRole(userId: string, role: string): Promise; removeRTP(userId: string, list: string[], type: 'teams' | 'permissions' | 'labels'): Promise; addRTP(userId: string, list: string[], type: 'teams' | 'permissions' | 'labels'): Promise; setRTP(userId: string, list: string[], type: 'teams' | 'permissions' | 'labels'): Promise; } export interface EmailVerificationService { /** * Send a verification email to the user * @param email The recipient's email address * @param user The user object * @param customVerificationUrlBase Optional custom base URL for verification link * @returns The generated verification token (optional) */ sendVerificationEmail(email: string, user: User, customVerificationUrlBase?: string): Promise; /** * Verify an email verification token * @param email The email address to verify * @param token The verification token * @param user The user object * @returns Whether the verification was successful */ verifyEmail(email: string, token: string, user: User): Promise; /** * Send a password reset email to the user * @param email The recipient's email address * @param user The user object * @param resetUrl Optional URL for password reset * @param customResetUrlBase Optional custom base URL for reset link * @returns The generated reset token */ sendPasswordResetEmail(email: string, user: User, resetUrl?: string, customResetUrlBase?: string): Promise; /** * Verify a password reset token * @param email The email address associated with the token * @param token The password reset token * @returns Whether the token is valid */ verifyPasswordResetToken(email: string, token: string): Promise; /** * Consume a verification token * @param token The verification token * @param userId The user ID * @returns Whether the token was successfully consumed */ consumePasswordResetToken(token: string, userId: string): Promise; } export interface SmsVerificationService { sendVerificationSms(phone: string, user: User): Promise; verifySms?(token: string, phone: string, user: User): Promise; } export interface PasswordHasher { hash(password: string): Promise; compare(password: string, hash: string): Promise; } export interface TokenStore { saveToken(userId: string, token: string): Promise; getToken(userId: string): Promise; deleteToken(userId: string): Promise; } export interface ConfigStore { initialize?(): Promise; getConfig(): Promise; updateConfig(update: Partial): Promise; } export interface BaseUser { id: string; email: string; name?: string; phone?: string; picture?: string; permissions?: string | string[]; role?: string; labels?: string | string[]; teams?: string | string[]; password_hash?: string; email_verified: boolean; phone_verified: boolean; created_at: Date; updated_at: Date; mfa_enabled: boolean; mfa_secret?: string; mfa_recovery_codes?: string[]; last_login_at?: Date; } export interface UserExtension { } export type User = BaseUser & UserExtension; export interface AuthProvider { authenticate(credentials: Record): Promise; validate?(token: string): Promise; register?(user: Partial, password: string): Promise; getConfig?(): Promise>; initialize?(): Promise; } export interface AuthToken { accessToken: string; refreshToken: string; } export type AuthRequiredType = 'mfa-required' | 'sms-required' | 'email-required' | 'sms-required or email-required'; export interface SessionManager { initialize?(): Promise; createSession(user: User): Promise; destroySession(token: string, id?: string): Promise; verifySession(token: string): Promise<{ user: User; token?: string | AuthToken; }>; refreshSession?(refreshToken: string): Promise; validateToken?(token: string): Promise; } export declare class UserNotFoundError extends Error { constructor(identifier: string); } export declare class InvalidCodeError extends Error { constructor(); } export declare class InvalidCredentialsError extends Error { constructor(); } export declare class RateLimitExceededError extends Error { constructor(); } export declare class MFARequiredError extends Error { constructor(); } export declare class VerificationRequiredError extends Error { constructor(name: string); } export declare class InvalidMfaCodeError extends Error { constructor(); } export declare class ProviderDoesNotSupportReg extends Error { constructor(name: string); } export declare class InvalidProvider extends Error { constructor(); } export declare class ProviderNotEnabled extends Error { constructor(name: string); } export declare class ProviderNotExist extends Error { constructor(name: string); } export declare class OAuthProviderNotExist extends Error { constructor(name: string); } export declare class MfaAlreadyEnabledError extends Error { constructor(identifier: string); } export declare class MfaNotEnabledError extends Error { constructor(); } export declare class MfaRecoveryCodeExpiredError extends Error { constructor(); } export declare class MfaRecoveryCodeInvalid extends Error { constructor(); } export declare class UserUnAuthorizedError extends Error { constructor(identifier: string, action: string); } export interface MfaService { generateSecret(email: string): Promise<{ secret: string; uri: string; }>; verifyCode(secret: string, code: string): boolean; generateRecoveryCodes(): string[]; } //# sourceMappingURL=types.d.ts.map