import { MouseEvent, ReactNode } from 'react'; import { StorageProvider } from '@crossmint/client-sdk-auth'; import { SDKExternalUser } from '@crossmint/common-sdk-auth'; type AuthStatus = "logged-in" | "logged-out" | "in-progress" | "initializing"; type LoginMethod = "email" | "google" | "twitter"; type CrossmintAuthBaseContextType = { /** Trigger the login flow. Optionally pass a default email. */ login: (defaultEmail?: string | MouseEvent) => void; /** Log the user out and clear the session. */ logout: () => Promise; /** Current JWT authentication token, if authenticated. */ jwt?: string; /** The currently authenticated user object. */ user?: SDKExternalUser; /** Authentication status: "logged-in" | "logged-out" | "in-progress" | "initializing". */ status: AuthStatus; /** Configured login methods. */ loginMethods?: LoginMethod[]; /** Fetch and refresh the current authenticated user. */ getUser: () => void; /** The underlying Crossmint auth client instance. */ crossmintAuth?: any; }; type CrossmintAuthBaseProviderProps = { children: ReactNode; /** Callback invoked when the user successfully logs in. */ onLoginSuccess?: () => void; /** Custom route for refreshing the auth token, for server-side session management. */ refreshRoute?: string; /** Custom route for logging out, for server-side session management. */ logoutRoute?: string; /** Custom storage provider for auth material. Defaults to browser cookies on web and secure device storage on React Native. */ storageProvider?: StorageProvider; }; export type { AuthStatus, CrossmintAuthBaseContextType, CrossmintAuthBaseProviderProps, LoginMethod };