import { Transport } from "./transport"; import type { AuthChangeEvent, RebaseSession, DeviceSession, User } from "@rebasepro/types"; export type { RebaseSession, AuthTokens, AuthChangeEvent, DeviceSession } from "@rebasepro/types"; /** Minimal, non-sensitive user profile returned by {@link findUserByEmail}. */ export interface PublicUserProfile { uid: string; displayName: string | null; photoURL: string | null; } export interface AuthConfig { needsSetup: boolean; registrationEnabled: boolean; emailServiceEnabled?: boolean; passwordReset?: boolean; emailVerification?: boolean; magicLink?: boolean; enabledProviders: string[]; } export interface AuthStorage { getItem: (key: string) => string | null; setItem: (key: string, value: string) => void; removeItem: (key: string) => void; } export declare function createMemoryStorage(): AuthStorage; export interface CreateAuthOptions { storage?: AuthStorage; authPath?: string; autoRefresh?: boolean; persistSession?: boolean; /** * Authentication flow mode. * - 'json' (default): Tokens are sent/received in JSON bodies. Refresh token is stored in local storage. * - 'cookie': Refresh token is sent/received via httpOnly cookies. Access token remains in memory. */ authFlowMode?: "json" | "cookie"; } export declare function createAuth(transport: Transport, options?: CreateAuthOptions): { signInWithEmail: (email: string, password: string) => Promise<{ user: User; accessToken: string; refreshToken: string; }>; signUp: (email: string, password: string, displayName?: string) => Promise<{ user: User; accessToken: string; refreshToken: string; }>; signInWithGoogle: (payload: { idToken: string; } | { accessToken: string; } | { code: string; redirectUri: string; }) => Promise<{ user: User; accessToken: string; refreshToken: string; }>; signInWithLinkedin: (code: string, redirectUri: string) => Promise<{ user: User; accessToken: string; refreshToken: string; }>; signInWithOAuth: (providerId: string, payload: Record) => Promise<{ user: User; accessToken: string; refreshToken: string; }>; signInWithGitHub: (code: string, redirectUri: string) => Promise<{ user: User; accessToken: string; refreshToken: string; }>; signInWithMicrosoft: (code: string, redirectUri: string) => Promise<{ user: User; accessToken: string; refreshToken: string; }>; signInWithApple: (code: string, redirectUri: string, user?: { name?: { firstName?: string; lastName?: string; }; email?: string; }) => Promise<{ user: User; accessToken: string; refreshToken: string; }>; signInWithFacebook: (code: string, redirectUri: string) => Promise<{ user: User; accessToken: string; refreshToken: string; }>; signInWithTwitter: (code: string, redirectUri: string, codeVerifier: string) => Promise<{ user: User; accessToken: string; refreshToken: string; }>; signInWithDiscord: (code: string, redirectUri: string) => Promise<{ user: User; accessToken: string; refreshToken: string; }>; signInWithGitLab: (code: string, redirectUri: string) => Promise<{ user: User; accessToken: string; refreshToken: string; }>; signInWithBitbucket: (code: string, redirectUri: string) => Promise<{ user: User; accessToken: string; refreshToken: string; }>; signInWithSlack: (code: string, redirectUri: string) => Promise<{ user: User; accessToken: string; refreshToken: string; }>; signInWithSpotify: (code: string, redirectUri: string) => Promise<{ user: User; accessToken: string; refreshToken: string; }>; signOut: () => Promise; stopAutoRefresh: () => void; refreshSession: () => Promise; handleUnauthorized: () => Promise; getUser: () => Promise; findUserByEmail: (email: string) => Promise; updateUser: (updates: { displayName?: string; photoURL?: string; }) => Promise; resetPasswordForEmail: (email: string) => Promise<{ success: boolean; message: string; }>; resetPassword: (token: string, password: string) => Promise<{ success: boolean; message: string; }>; changePassword: (oldPassword: string, newPassword: string) => Promise<{ success: boolean; message: string; }>; linkProvider: (providerId: string, payload: Record) => Promise<{ success: boolean; provider: string; alreadyLinked: boolean; }>; sendVerificationEmail: () => Promise<{ success: boolean; message: string; }>; verifyEmail: (token: string) => Promise<{ success: boolean; message: string; }>; sendMagicLink: (email: string) => Promise<{ success: boolean; message: string; }>; verifyMagicLink: (token: string) => Promise<{ user: User; accessToken: string; refreshToken: string; }>; getSessions: () => Promise; revokeSession: (sessionId: string) => Promise<{ success: boolean; }>; revokeAllSessions: () => Promise<{ success: boolean; }>; getAuthConfig: () => Promise; getSession: () => RebaseSession | null; onAuthStateChange: (callback: (event: AuthChangeEvent, session: RebaseSession | null) => void) => () => boolean; canRestoreSession: () => boolean; isInitialized: () => Promise; }; export interface CookieStorageOptions { path?: string; domain?: string; secure?: boolean; sameSite?: "Lax" | "Strict" | "None"; maxAge?: number; } export declare function createCookieStorage(options?: CookieStorageOptions): AuthStorage;