import * as react_jsx_runtime from 'react/jsx-runtime'; import * as react from 'react'; import { MutableRefObject, ReactNode } from 'react'; import { Wallet, Chain, ClientSideWalletArgsFor, ClientSideWalletCreateArgs, DeviceSignerConfig, RegisterSignerPasskeyParams, DeviceSignerKeyStorage, Callbacks } from '@crossmint/wallets-sdk'; import { HandshakeParent } from '@crossmint/client-sdk-window'; import { signerOutboundEvents, signerInboundEvents } from '@crossmint/client-signers'; import { UIConfig } from '@crossmint/common-sdk-base'; import { CreateOnLogin } from './types/wallet.cjs'; import { SignerAuthState, SignerAuthHandlers } from './hooks/useSignerAuth.cjs'; interface CrossmintWalletUIBaseProviderProps { children: ReactNode; appearance?: UIConfig; showOtpSignerPrompt?: boolean; showPasskeyHelpers?: boolean; renderUI?: (props: UIRenderProps) => ReactNode; passkeyPromptState: PasskeyPromptState; signerAuth: SignerAuthState & SignerAuthHandlers; } interface UIRenderProps { emailSignerProps: { email?: string; open: boolean; setOpen: (open: boolean) => void; step: "initial" | "otp"; onSubmitOTP: (token: string) => Promise; onResendOTPCode: () => Promise; onSubmitEmail: () => Promise; rejectRef: MutableRefObject<(error?: Error) => void>; appearance?: UIConfig; }; phoneSignerProps: { phone?: string; open: boolean; setOpen: (open: boolean) => void; step: "initial" | "otp"; onSubmitOTP: (token: string) => Promise; onResendOTPCode: () => Promise; onSubmitPhone: () => Promise; rejectRef: MutableRefObject<(error?: Error) => void>; appearance?: UIConfig; }; passkeyPromptProps?: { state: PasskeyPromptState; appearance?: UIConfig; }; } declare function CrossmintWalletUIBaseProvider({ children, appearance, showOtpSignerPrompt, renderUI, passkeyPromptState, signerAuth, }: CrossmintWalletUIBaseProviderProps): react_jsx_runtime.JSX.Element; /** * Structured detail about the last wallet load/creation failure, exposed alongside `status` * so integrators can render an actionable message and decide whether to retry. * - `region-blocked`: request was blocked (e.g. Cloudflare 403 from a restricted region). Permanent — do not retry. * - `network`: transient failure (fetch reject/timeout, 5xx, or 429). Retryable. * - `unknown`: anything else. */ type WalletContextError = { code: "region-blocked" | "network" | "unknown"; status?: number; message: string; }; type CrossmintWalletBaseContext = { /** The current wallet instance, or undefined if no wallet is loaded. */ wallet: Wallet | undefined; /** Current wallet status. */ status: "not-loaded" | "in-progress" | "loaded" | "error"; /** Detail about the last failure, or null when there is no error. */ error: WalletContextError | null; /** Retrieves an existing wallet. */ getWallet: (props: Pick, "chain" | "alias">) => Promise | undefined>; /** Creates a new wallet. */ createWallet: (props: ClientSideWalletCreateArgs) => Promise | undefined>; /** @internal */ clientTEEConnection?: () => HandshakeParent; /** @internal */ otpSignerState: { needsAuth: boolean; sendOtp: (() => Promise) | null; verifyOtp: ((otp: string) => Promise) | null; reject: ((error?: Error) => void) | null; }; /** Creates a Device Signer */ createDeviceSigner: (address?: string) => Promise | undefined; /** Creates a Passkey Signer */ createPasskeySigner: (passkeyName: string) => Promise; }; declare const CrossmintWalletBaseContext: react.Context; interface CrossmintWalletBaseProviderProps { /** Configuration for automatic wallet creation on login. */ createOnLogin?: CreateOnLogin; /** * @internal * Storage for the device signer key. */ deviceSignerKeyStorage?: DeviceSignerKeyStorage; /** Lifecycle callbacks for wallet creation and transaction events. */ callbacks?: { onWalletCreationStart?: () => Promise; onTransactionStart?: () => Promise; }; /** Appearance configuration for wallet UI components. */ appearance?: UIConfig; /** Whether to show passkey helper UI. Default: true. */ showPasskeyHelpers?: boolean; /** When true, built-in OTP signer UI prompts are shown during signing flows. When false, signing flows must be handled manually via the useWalletOtpSigner hook. Default: true. */ showOtpSignerPrompt?: boolean; /** Callback invoked when email or phone verification is required during a non-custodial wallet signing flow. */ onAuthRequired?: Callbacks["onAuthRequired"]; /** @internal */ children: ReactNode; /** @internal */ clientTEEConnection?: () => HandshakeParent; /** @internal */ resetSignerFrame?: () => Promise; /** @internal */ initializeWebView?: () => Promise; /** @internal */ renderUI?: (props: UIRenderProps) => ReactNode; } type ValidPasskeyPromptType = "create-wallet" | "transaction" | "not-supported" | "create-wallet-error" | "transaction-error"; type PasskeyPromptState = { open: boolean; type?: ValidPasskeyPromptType; primaryActionOnClick?: () => void; secondaryActionOnClick?: () => void; }; declare function isCloudflareRegionBlock(responseBody: string | null): boolean; /** * Maps a thrown wallet load/creation error to the structured shape exposed on the context. * A Cloudflare region-ban 403 is treated as a permanent block; fetch rejects/timeouts, 5xx, and * 429 are treated as transient network failures; everything else (incl. other 403s) is unknown. */ declare function mapWalletError(error: unknown): WalletContextError; declare function CrossmintWalletBaseProvider({ children, createOnLogin, callbacks, clientTEEConnection, resetSignerFrame, deviceSignerKeyStorage, initializeWebView, appearance, showOtpSignerPrompt, onAuthRequired: onAuthRequiredFromProps, showPasskeyHelpers, renderUI, }: CrossmintWalletBaseProviderProps): react_jsx_runtime.JSX.Element; export { CrossmintWalletBaseContext as C, type PasskeyPromptState as P, type UIRenderProps as U, type WalletContextError as W, CrossmintWalletBaseProvider as a, type CrossmintWalletBaseProviderProps as b, CrossmintWalletUIBaseProvider as c, type CrossmintWalletUIBaseProviderProps as d, isCloudflareRegionBlock as i, mapWalletError as m };