@unifold/ui-react 0.1.80 → 0.1.81

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,15 +1,16 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { DirectExecutionSucceededEvent, DirectExecutionFailedEvent, DirectExecutionResponse, ChainType, EvmContractCall, DepositMethod, DepositEvent, Wallet, ProductType, WalletPayMethod, CoinbaseWalletPaySessionResponse, FiatCurrency, ExecutionStatus, FeaturedToken, PaymentNetwork, DefaultTokenResponse, ConfirmIntegrationTransferResult, CheckoutMethod, CheckoutPaymentIntent, CheckoutEvent, WithdrawDirectExecutionSucceededEvent, WithdrawEvent, DestinationToken, DestinationTokenChain, PaymentIntent, DepositQuote, PublicIncidentResponse, WithdrawDirectExecutionFailedEvent, ActionType, SupportedDestinationTokensResponse, SupportedDepositTokensResponse, VerifyAddressResponse } from '@unifold/core';
2
+ import { DirectExecutionSucceededEvent, DirectExecutionFailedEvent, DirectExecutionResponse, ChainType, EvmContractCall, DepositMethod, DepositEvent, Wallet, ProductType, WalletPayMethod, CoinbaseWalletPaySessionResponse, FiatCurrency, ExecutionStatus, FeaturedToken, PaymentNetwork, DefaultTokenResponse, ConfirmIntegrationTransferResult, CheckoutMethod, CheckoutPaymentIntent, CheckoutEvent, WithdrawDirectExecutionSucceededEvent, WithdrawEvent, DestinationToken, DestinationTokenChain, PaymentIntent, DepositQuote, TokenMetadata, PublicIncidentResponse, WithdrawDirectExecutionFailedEvent, ActionType, SupportedDestinationTokensResponse, SupportedDepositTokensResponse, VerifyAddressResponse } from '@unifold/core';
3
3
  export { ChainType, DepositMethod } from '@unifold/core';
4
4
  import * as React$1 from 'react';
5
5
  import { MutableRefObject } from 'react';
6
6
  import * as _tanstack_react_query from '@tanstack/react-query';
7
+ import { BrowserWalletProviderErrorStage, EventTracker, AnalyticsProperties, AnalyticsEvent } from '@unifold/analytics';
8
+ import { Wallet as Wallet$1, WalletAccount } from '@wallet-standard/base';
7
9
  import * as class_variance_authority_types from 'class-variance-authority/types';
8
10
  import { VariantProps } from 'class-variance-authority';
9
11
  import * as DialogPrimitive from '@radix-ui/react-dialog';
10
12
  import * as SelectPrimitive from '@radix-ui/react-select';
11
13
  import * as TooltipPrimitive from '@radix-ui/react-tooltip';
12
- import { EventTracker, AnalyticsProperties, AnalyticsEvent } from '@unifold/analytics';
13
14
  import { ClassValue } from 'clsx';
14
15
 
15
16
  /** The two tabs the deposit menu splits funding methods across. */
@@ -96,52 +97,25 @@ interface UseDepositPollingResult {
96
97
  }
97
98
  declare function useDepositPolling({ userId, publishableKey, clientSecret, depositConfirmationMode, depositWalletId, depositWalletIds, enabled, immediateDirectPolling, onDepositSuccess, onDepositError, }: UseDepositPollingOptions): UseDepositPollingResult;
98
99
 
99
- interface EthereumProvider {
100
- isMetaMask?: boolean;
101
- isPhantom?: boolean;
102
- isCoinbaseWallet?: boolean;
103
- isTrust?: boolean;
104
- isRainbow?: boolean;
105
- isRabby?: boolean;
106
- isOkxWallet?: boolean;
107
- /** Set by the provider Robinhood Wallet injects into its web3 browser. */
108
- isRobinhoodMobileWallet?: boolean;
109
- selectedAddress?: string;
110
- request(args: {
111
- method: string;
112
- params?: unknown[];
113
- }): Promise<unknown>;
114
- on?(event: string, callback: (...args: unknown[]) => void): void;
115
- off?(event: string, callback: (...args: unknown[]) => void): void;
116
- removeListener?(event: string, callback: (...args: unknown[]) => void): void;
117
- }
118
-
119
- declare global {
120
- interface Window {
121
- phantom?: {
122
- solana?: PhantomSolanaProvider;
123
- ethereum?: EthereumProvider;
124
- };
125
- solana?: PhantomSolanaProvider;
126
- ethereum?: EthereumProvider;
127
- }
128
- }
129
- interface PhantomSolanaProvider {
130
- isPhantom?: boolean;
131
- isConnected?: boolean;
132
- publicKey?: {
133
- toString(): string;
100
+ type WalletType = 'phantom-solana' | 'phantom-ethereum' | 'metamask' | 'coinbase' | 'solflare' | 'backpack' | 'glow' | 'trust' | 'trust-solana' | 'rainbow' | 'rabby' | 'okx' | 'robinhood';
101
+ interface BrowserWalletInfo {
102
+ type: WalletType;
103
+ name: string;
104
+ address: string;
105
+ balance?: string;
106
+ balanceUsd?: string;
107
+ icon: string;
108
+ depositWallet?: {
109
+ id: string;
110
+ chain_type: ChainType;
111
+ address_type: string | null;
112
+ address: string;
113
+ destination_chain_type: ChainType;
114
+ destination_chain_id: string;
115
+ destination_token_address: string;
116
+ recipient_address: string;
117
+ is_primary: boolean;
134
118
  };
135
- connect(opts?: {
136
- onlyIfTrusted?: boolean;
137
- }): Promise<{
138
- publicKey: {
139
- toString(): string;
140
- };
141
- }>;
142
- disconnect(): Promise<void>;
143
- on(event: string, callback: (...args: unknown[]) => void): void;
144
- off(event: string, callback: (...args: unknown[]) => void): void;
145
119
  }
146
120
 
147
121
  /** Quick amount chips on the browser wallet "Enter amount" step */
@@ -229,6 +203,8 @@ interface DepositModalProps {
229
203
  showBalanceHeader?: boolean;
230
204
  /** Input variant for Transfer Crypto view: "single_input" or "double_input" (default) */
231
205
  transferInputVariant?: 'single_input' | 'double_input';
206
+ /** Transfer Crypto: show the reference exchange-rate row. @default false */
207
+ showTransferCryptoExchangeRate?: boolean;
232
208
  /** Controls when deposit polling starts and what UI is shown.
233
209
  * - "auto_ui": After 10s, starts polling and shows "Processing..." card (default)
234
210
  * - "auto_silent": After 10s, starts polling silently (no waiting UI)
@@ -368,7 +344,7 @@ interface DepositModalProps {
368
344
  */
369
345
  displayMode?: DepositMenuLayoutType;
370
346
  }
371
- declare function DepositModal({ open, onOpenChange, userId, publishableKey, modalTitle, destinationTokenSymbol, recipientAddress, destinationChainType, destinationChainId, destinationTokenAddress, contractCalls, defaultSourceChainType, defaultSourceChainId, defaultSourceTokenAddress, defaultSourceSymbol, prefilledAmountUsd, hideDepositTracker, showBalanceHeader, transferInputVariant, depositConfirmationMode, enableTransferCrypto, enableConnectWallet, browserWalletAmountQuickSelect, enablePayWithExchange, enableFiatOnramp, enableConnectExchange, enableCashApp, enableApplePay, applePayTitle: applePayTitleProp, applePaySubTitle: applePaySubTitleProp, enableGooglePay, googlePayTitle: googlePayTitleProp, googlePaySubTitle: googlePaySubTitleProp, enableBankTransfer, enableIncidentBanner, enableStripeLink, onrampDestinationAmount, userEmail, hideDepositFlowInfo, hideDisplayDescription, onDepositSuccess, onDepositError, onEvent, theme, hideOverlay, initialScreen, layout, displayMode, transferCryptoTitle: transferCryptoTitleProp, depositWithCardTitle: depositWithCardTitleProp, payWithExchangeTitle: payWithExchangeTitleProp, depositTrackerTitle: depositTrackerTitleProp, depositTrackerSubTitle: depositTrackerSubTitleProp, }: DepositModalProps): react_jsx_runtime.JSX.Element;
347
+ declare function DepositModal({ open, onOpenChange, userId, publishableKey, modalTitle, destinationTokenSymbol, recipientAddress, destinationChainType, destinationChainId, destinationTokenAddress, contractCalls, defaultSourceChainType, defaultSourceChainId, defaultSourceTokenAddress, defaultSourceSymbol, prefilledAmountUsd, hideDepositTracker, showBalanceHeader, transferInputVariant, showTransferCryptoExchangeRate, depositConfirmationMode, enableTransferCrypto, enableConnectWallet, browserWalletAmountQuickSelect, enablePayWithExchange, enableFiatOnramp, enableConnectExchange, enableCashApp, enableApplePay, applePayTitle: applePayTitleProp, applePaySubTitle: applePaySubTitleProp, enableGooglePay, googlePayTitle: googlePayTitleProp, googlePaySubTitle: googlePaySubTitleProp, enableBankTransfer, enableIncidentBanner, enableStripeLink, onrampDestinationAmount, userEmail, hideDepositFlowInfo, hideDisplayDescription, onDepositSuccess, onDepositError, onEvent, theme, hideOverlay, initialScreen, layout, displayMode, transferCryptoTitle: transferCryptoTitleProp, depositWithCardTitle: depositWithCardTitleProp, payWithExchangeTitle: payWithExchangeTitleProp, depositTrackerTitle: depositTrackerTitleProp, depositTrackerSubTitle: depositTrackerSubTitleProp, }: DepositModalProps): react_jsx_runtime.JSX.Element;
372
348
 
373
349
  interface DepositHeaderProps {
374
350
  title: string;
@@ -439,7 +415,7 @@ interface TransferCryptoSingleInputProps {
439
415
  minimumDepositAmountUsd: number;
440
416
  isStablecoin: boolean;
441
417
  }) => void;
442
- /** Optional USD prefilled used to render an estimated "You send" target. */
418
+ /** Optional USD prefill. You send is omitted when this is set. */
443
419
  prefilledAmountUsd?: string;
444
420
  /** Checkout mode: estimated source amount to send (from /public/quotes). Shown above the QR code. */
445
421
  checkoutQuote?: {
@@ -455,8 +431,10 @@ interface TransferCryptoSingleInputProps {
455
431
  persistCheckingIndicator?: boolean;
456
432
  /** Product context sent to the API — "deposit" (default) or "payment". */
457
433
  productType?: ProductType;
434
+ /** Show the reference exchange-rate row between selected and destination token. */
435
+ showExchangeRate?: boolean;
458
436
  }
459
- declare function TransferCryptoSingleInput({ userId, publishableKey, clientSecret, recipientAddress, destinationChainType, destinationChainId, destinationTokenAddress, defaultSourceChainType, defaultSourceChainId, defaultSourceTokenAddress, defaultSourceSymbol, depositConfirmationMode, onExecutionsChange, onDepositSuccess, onDepositError, wallets: externalWallets, onSourceTokenChange, prefilledAmountUsd, checkoutQuote, isCheckoutQuoteLoading, persistCheckingIndicator, productType, }: TransferCryptoSingleInputProps): react_jsx_runtime.JSX.Element;
437
+ declare function TransferCryptoSingleInput({ userId, publishableKey, clientSecret, recipientAddress, destinationChainType, destinationChainId, destinationTokenAddress, defaultSourceChainType, defaultSourceChainId, defaultSourceTokenAddress, defaultSourceSymbol, depositConfirmationMode, onExecutionsChange, onDepositSuccess, onDepositError, wallets: externalWallets, onSourceTokenChange, prefilledAmountUsd, checkoutQuote, isCheckoutQuoteLoading, persistCheckingIndicator, productType, showExchangeRate, }: TransferCryptoSingleInputProps): react_jsx_runtime.JSX.Element;
460
438
 
461
439
  interface TransferCryptoDoubleInputProps {
462
440
  userId: string;
@@ -469,7 +447,7 @@ interface TransferCryptoDoubleInputProps {
469
447
  defaultSourceChainId?: string;
470
448
  defaultSourceTokenAddress?: string;
471
449
  defaultSourceSymbol?: string;
472
- /** Optional USD prefilled used to render an estimated "You send" target. */
450
+ /** Optional USD prefill. You send is omitted when this is set. */
473
451
  prefilledAmountUsd?: string;
474
452
  /** Controls when polling starts and whether a waiting UI is shown.
475
453
  * - "auto_ui": After 10s, starts polling and shows "Processing..." card (default)
@@ -490,14 +468,18 @@ interface TransferCryptoDoubleInputProps {
490
468
  code?: string;
491
469
  }) => void;
492
470
  wallets?: Wallet[];
471
+ /** Show the reference exchange-rate row between selected and destination token. */
472
+ showExchangeRate?: boolean;
493
473
  }
494
- declare function TransferCryptoDoubleInput({ userId, publishableKey, recipientAddress, destinationChainType, destinationChainId, destinationTokenAddress, defaultSourceChainType, defaultSourceChainId, defaultSourceTokenAddress, defaultSourceSymbol, prefilledAmountUsd, depositConfirmationMode, onExecutionsChange, onDepositSuccess, onDepositError, wallets: externalWallets, }: TransferCryptoDoubleInputProps): react_jsx_runtime.JSX.Element;
474
+ declare function TransferCryptoDoubleInput({ userId, publishableKey, recipientAddress, destinationChainType, destinationChainId, destinationTokenAddress, defaultSourceChainType, defaultSourceChainId, defaultSourceTokenAddress, defaultSourceSymbol, depositConfirmationMode, onExecutionsChange, onDepositSuccess, onDepositError, wallets: externalWallets, showExchangeRate, }: TransferCryptoDoubleInputProps): react_jsx_runtime.JSX.Element;
495
475
 
476
+ type CardView = 'amount' | 'quotes' | 'review';
496
477
  interface BuyWithCardProps {
497
478
  userId: string;
498
479
  publishableKey: string;
499
- view?: 'amount' | 'quotes' | 'onramp';
500
- onViewChange?: (view: 'amount' | 'quotes' | 'onramp', quotesCount?: number) => void;
480
+ view?: CardView;
481
+ onViewChange?: (view: CardView, quotesCount?: number) => void;
482
+ projectName?: string;
501
483
  maxAmountUsd?: number;
502
484
  accentColor?: string;
503
485
  destinationTokenSymbol?: string;
@@ -535,10 +517,10 @@ interface BuyWithCardProps {
535
517
  */
536
518
  destinationAmount?: string;
537
519
  }
538
- declare function BuyWithCard({ userId, publishableKey, view: externalView, onViewChange, maxAmountUsd, accentColor, // Keep prop for backward compatibility but don't use default
539
- destinationTokenSymbol, recipientAddress, destinationChainType, destinationChainId, destinationTokenAddress, onDepositSuccess, onDepositError, onEvent, themeClass, wallets: externalWallets, assetCdnUrl, hideDepositFlowInfo, hideDisplayDescription, prefilledAmountUsd, destinationAmount, }: BuyWithCardProps): react_jsx_runtime.JSX.Element;
520
+ declare function BuyWithCard({ userId, publishableKey, view: externalView, onViewChange, projectName, maxAmountUsd, accentColor, // Keep prop for backward compatibility but don't use default
521
+ destinationTokenSymbol, recipientAddress, destinationChainType, destinationChainId, destinationTokenAddress, onDepositSuccess, onDepositError, onEvent, themeClass, wallets: externalWallets, assetCdnUrl, hideDepositFlowInfo: _hideDepositFlowInfo, hideDisplayDescription: _hideDisplayDescription, prefilledAmountUsd, destinationAmount, }: BuyWithCardProps): react_jsx_runtime.JSX.Element;
540
522
 
541
- type WalletPayView = 'loading_config' | 'disabled' | 'email_input' | 'phone_input' | 'submitting_session' | 'email_otp' | 'phone_otp' | 'amount' | 'creating_order' | 'payment' | 'checking_deposit' | 'delivering' | 'success' | 'guest_limit_reached' | 'limit_upgrade_intro' | 'limit_upgrade_form' | 'limit_upgrade_submitting' | 'limit_upgrade_failed';
523
+ type WalletPayView = 'loading_config' | 'disabled' | 'contact_input' | 'submitting_session' | 'email_otp' | 'phone_otp' | 'amount' | 'creating_order' | 'payment' | 'checking_deposit' | 'delivering' | 'success' | 'guest_limit_reached' | 'limit_upgrade_intro' | 'limit_upgrade_form' | 'limit_upgrade_submitting' | 'limit_upgrade_failed';
542
524
  type View = WalletPayView;
543
525
  interface BuyWithWalletPayProps {
544
526
  /**
@@ -645,6 +627,13 @@ interface WalletPayQrCheckoutProps {
645
627
  /** Coinbase-hosted checkout page for this order. */
646
628
  paymentUrl: string;
647
629
  quote: WalletPayQuote;
630
+ /**
631
+ * Final-dest Amount Received. When passed (including `null`), replaces the
632
+ * Coinbase session routing currency so we don't label USDC as the project dest.
633
+ */
634
+ amountReceived?: string | null;
635
+ /** Final-dest chain name. When passed, replaces the Coinbase routing network. */
636
+ destinationNetwork?: string | null;
648
637
  }
649
638
  /**
650
639
  * Desktop hand-off for the headless Coinbase device wallets: the code to scan,
@@ -659,7 +648,7 @@ interface WalletPayQrCheckoutProps {
659
648
  * Payment happens entirely on Coinbase's side, on another device, so nothing
660
649
  * here reports back — the parent polls the provider and the chain.
661
650
  */
662
- declare function WalletPayQrCheckout({ method, paymentUrl, quote }: WalletPayQrCheckoutProps): react_jsx_runtime.JSX.Element;
651
+ declare function WalletPayQrCheckout({ method, paymentUrl, quote, amountReceived: amountReceivedOverride, destinationNetwork: destinationNetworkOverride, }: WalletPayQrCheckoutProps): react_jsx_runtime.JSX.Element;
663
652
 
664
653
  type MobilePlatform = 'ios' | 'android';
665
654
 
@@ -779,6 +768,17 @@ interface QRCodeSkeletonProps {
779
768
  darkMode?: boolean;
780
769
  }
781
770
  declare function QRCodeSkeleton({ size, darkMode }: QRCodeSkeletonProps): react_jsx_runtime.JSX.Element;
771
+ /**
772
+ * Themed QR used on Transfer Crypto: card border + shadow, 180px code,
773
+ * theme-aware modules. Wallet Pay and Binance Pay use this instead of the
774
+ * larger Cash App white tile.
775
+ */
776
+ declare function TransferQrCode({ value, imageUrl, errorCorrectionLevel, loading, }: {
777
+ value: string;
778
+ imageUrl?: string;
779
+ errorCorrectionLevel?: ErrorCorrectionLevel;
780
+ loading?: boolean;
781
+ }): react_jsx_runtime.JSX.Element;
782
782
  declare function StyledQRCode({ value, size, imageUrl, imageSize, darkMode, errorCorrectionLevel, }: StyledQRCodeProps): react_jsx_runtime.JSX.Element;
783
783
 
784
784
  interface TransferCryptoButtonProps {
@@ -956,6 +956,9 @@ interface PayWithStripeLinkProps {
956
956
  email?: string;
957
957
  /** URL for the Link logo icon (from CDN) */
958
958
  iconUrl?: string;
959
+ projectName?: string;
960
+ assetCdnUrl?: string;
961
+ destinationTokenSymbol?: string;
959
962
  /** Controlled step state (optional — for header back button coordination) */
960
963
  step?: StripeLinkStep;
961
964
  onStepChange?: (step: StripeLinkStep) => void;
@@ -995,7 +998,7 @@ interface PayWithStripeLinkProps {
995
998
  * The Stripe publishable key is auto-fetched from the backend via GET /config,
996
999
  * so consumers only need their Unifold publishable key.
997
1000
  */
998
- declare function PayWithStripeLink({ userId, publishableKey, recipientAddress, destinationChainType, destinationChainId, destinationTokenAddress, countryCode, subdivisionCode, wallets: externalWallets, email: emailProp, iconUrl, step: controlledStep, onStepChange, backHandlerRef, onDepositSuccess, onDepositError, onEvent, }: PayWithStripeLinkProps): react_jsx_runtime.JSX.Element | null;
1001
+ declare function PayWithStripeLink({ userId, publishableKey, recipientAddress, destinationChainType, destinationChainId, destinationTokenAddress, countryCode, subdivisionCode, wallets: externalWallets, email: emailProp, iconUrl, projectName, assetCdnUrl, destinationTokenSymbol, step: controlledStep, onStepChange, backHandlerRef, onDepositSuccess, onDepositError, onEvent, }: PayWithStripeLinkProps): react_jsx_runtime.JSX.Element | null;
999
1002
 
1000
1003
  interface DepositExecutionItemProps {
1001
1004
  execution: DirectExecutionResponse;
@@ -1075,6 +1078,8 @@ interface CheckoutModalProps {
1075
1078
  defaultSourceTokenAddress?: string;
1076
1079
  /** Source token symbol (e.g. `"USDC"`). Must be paired with `defaultSourceChainType` + `defaultSourceChainId`. */
1077
1080
  defaultSourceSymbol?: string;
1081
+ /** Transfer Crypto: show the reference exchange-rate row. @default false */
1082
+ showTransferCryptoExchangeRate?: boolean;
1078
1083
  theme?: 'light' | 'dark' | 'auto';
1079
1084
  onCheckoutSuccess?: (data: {
1080
1085
  paymentIntentId: string;
@@ -1096,7 +1101,7 @@ interface CheckoutModalProps {
1096
1101
  }) => void;
1097
1102
  onEvent?: (event: CheckoutEvent) => void;
1098
1103
  }
1099
- declare function CheckoutModal({ open, onOpenChange, clientSecret, publishableKey, modalTitle, enableTransferCrypto, enableConnectWallet, enableIncidentBanner, defaultSourceChainType, defaultSourceChainId, defaultSourceTokenAddress, defaultSourceSymbol, theme, onCheckoutSuccess, onCheckoutError, onEvent, externalUserId, }: CheckoutModalProps): react_jsx_runtime.JSX.Element;
1104
+ declare function CheckoutModal({ open, onOpenChange, clientSecret, publishableKey, modalTitle, enableTransferCrypto, enableConnectWallet, enableIncidentBanner, defaultSourceChainType, defaultSourceChainId, defaultSourceTokenAddress, defaultSourceSymbol, showTransferCryptoExchangeRate, theme, onCheckoutSuccess, onCheckoutError, onEvent, externalUserId, }: CheckoutModalProps): react_jsx_runtime.JSX.Element;
1100
1105
 
1101
1106
  interface WithdrawTransactionInfo {
1102
1107
  /** Source (sending) chain type */
@@ -1354,6 +1359,106 @@ declare function sendHypercoreWithdraw(params: {
1354
1359
 
1355
1360
  declare function detectBrowserWallet(chainType: string, senderAddress?: string): Promise<DetectedWallet | null>;
1356
1361
 
1362
+ type BrowserWalletErrorReporter = (error: unknown, metadata: {
1363
+ stage: BrowserWalletProviderErrorStage;
1364
+ chainType?: 'ethereum' | 'solana';
1365
+ providerSource?: string;
1366
+ componentStack?: string;
1367
+ /**
1368
+ * The provider threw but we still obtained a usable value, so the wallet
1369
+ * stays available and only telemetry records the incompatibility.
1370
+ */
1371
+ recovered?: boolean;
1372
+ }) => void;
1373
+
1374
+ /**
1375
+ * Silently detects an already-connected injected browser wallet without triggering
1376
+ * any wallet popups. Solana reads authorized Wallet Standard accounts; Ethereum
1377
+ * uses the read-only `eth_accounts`.
1378
+ * Returns the connected wallet, or `null` when none is connected (or the user
1379
+ * previously disconnected explicitly).
1380
+ *
1381
+ * When the user has previously connected a wallet, its `WalletType` is persisted
1382
+ * in localStorage; on subsequent refreshes we move that candidate to the front of
1383
+ * the scan so multi-wallet setups (e.g. MetaMask + Phantom installed, Phantom
1384
+ * Solana also connected) don't always resolve to whichever provider happens to be
1385
+ * iterated first.
1386
+ */
1387
+ declare function detectConnectedBrowserWallet(chainType?: 'ethereum' | 'solana', reportError?: BrowserWalletErrorReporter): Promise<BrowserWalletInfo | null>;
1388
+
1389
+ /**
1390
+ * Inline this in `<head>` so announce events that fire before React boots
1391
+ * (MetaMask/Rainbow at document_start) are not lost. Splits Connect often
1392
+ * `stopImmediatePropagation`s `eip6963:requestProvider`, so a late
1393
+ * `requestProvider` will not get those wallets to re-announce.
1394
+ */
1395
+ declare const EIP6963_BOOTSTRAP_SCRIPT: string;
1396
+ /** Start discovery as soon as the SDK mounts — do not wait for the modal. */
1397
+ declare function startBrowserWalletDiscovery(): void;
1398
+ /** Ask installed wallets to announce again. Safe to call more than once. */
1399
+ declare function requestEip6963Providers(): void;
1400
+
1401
+ /**
1402
+ * Shared Solana Wallet Standard discovery — the Solana counterpart to our
1403
+ * guarded EIP-6963 registry.
1404
+ *
1405
+ * Wallets announce themselves to the page through the Wallet Standard registry,
1406
+ * so every installed Solana wallet is enumerated without reading `window.solana`
1407
+ * (one global that only ever holds a single wallet, so multi-extension setups
1408
+ * race to own it) and without ever calling `connect()`.
1409
+ *
1410
+ * Everything here is read-only: `wallet.accounts` is populated by the wallet only
1411
+ * for origins the user has already authorized, which makes it a silent
1412
+ * already-connected check with no approval prompt.
1413
+ */
1414
+
1415
+ interface SolanaStandardWallet {
1416
+ walletId: string;
1417
+ name: string;
1418
+ /** Data-URI icon supplied by the wallet itself. */
1419
+ icon: string;
1420
+ wallet: Wallet$1;
1421
+ }
1422
+ interface SolanaStandardAccount extends SolanaStandardWallet {
1423
+ /** Base58 address of the wallet's first authorized account for this origin. */
1424
+ address: string;
1425
+ account: WalletAccount;
1426
+ }
1427
+ /**
1428
+ * All registered Solana wallets. Purely a registry read — safe to call on mount
1429
+ * and on every render.
1430
+ */
1431
+ declare function getSolanaStandardWallets(): SolanaStandardWallet[];
1432
+ /** Find a registered Solana wallet by our internal wallet ID. */
1433
+ declare function findSolanaStandardWallet(walletId: string): SolanaStandardWallet | undefined;
1434
+ /** Whether a Solana wallet is installed, by our internal wallet ID. */
1435
+ declare function isSolanaWalletDetectedViaWalletStandard(walletId: string): boolean;
1436
+ /**
1437
+ * Solana wallets that already have an authorized account for this origin.
1438
+ *
1439
+ * The Wallet Standard equivalent of EVM's `eth_accounts`: wallets only publish
1440
+ * `accounts` once the user has approved the origin, so this reports existing
1441
+ * connections without prompting. Wallets the user has never approved simply
1442
+ * expose an empty array.
1443
+ */
1444
+ declare function getAuthorizedSolanaStandardAccounts(): SolanaStandardAccount[];
1445
+ /** Connect a selected Wallet Standard wallet. Call only from a user gesture. */
1446
+ declare function connectSolanaStandardWallet(walletId: string): Promise<SolanaStandardAccount | null>;
1447
+ /** Sign a serialized Solana transaction through Wallet Standard when supported. */
1448
+ declare function signSolanaStandardTransaction(walletId: string, address: string, transaction: Uint8Array): Promise<Uint8Array | null>;
1449
+ /**
1450
+ * Fires whenever a wallet registers or unregisters. Wallets register
1451
+ * asynchronously after page load, so callers that enumerate wallets on mount need
1452
+ * this to pick up late arrivals.
1453
+ */
1454
+ declare function subscribeSolanaStandardWallets(listener: () => void): () => void;
1455
+ /**
1456
+ * Fires when any registered Solana wallet changes its accounts — connect,
1457
+ * disconnect, or account switch. Replaces per-wallet `provider.on('connect')`
1458
+ * listeners for wallets that implement `standard:events`.
1459
+ */
1460
+ declare function subscribeSolanaStandardAccountChanges(listener: () => void): () => void;
1461
+
1357
1462
  interface CurrencyListItemProps {
1358
1463
  currency: FiatCurrency;
1359
1464
  isSelected: boolean;
@@ -1442,10 +1547,12 @@ var common = {
1442
1547
  review: "Review",
1443
1548
  tryAgain: "Try Again",
1444
1549
  somethingWentWrong: "Something went wrong",
1550
+ quoteFailed: "Failed to fetch quote, please try again later",
1445
1551
  seeMoreDetails: "See more details",
1446
1552
  seeLess: "See less",
1447
1553
  dateTime: "{{date}} at {{time}}",
1448
1554
  "continue": "Continue",
1555
+ confirm: "Confirm",
1449
1556
  processing: "Processing",
1450
1557
  checkingFor: "Checking for {{target}}",
1451
1558
  depositTarget: "deposit",
@@ -1455,6 +1562,9 @@ var common = {
1455
1562
  help: "Help",
1456
1563
  done: "Done",
1457
1564
  from: "From",
1565
+ to: "To",
1566
+ youPay: "You pay",
1567
+ intentAddressDisclaimer: "The address shown in the provider is an intent address. Funds will be automatically deposited into your account.",
1458
1568
  max: "Max",
1459
1569
  or: "or",
1460
1570
  minimumAmount: "Minimum amount is {{amount}}",
@@ -1528,8 +1638,7 @@ var connectWallet = {
1528
1638
  confirming: "Confirming...",
1529
1639
  minimumForTokenOnChain: "Minimum for {{token}} on {{chain}} is ${{amount}}",
1530
1640
  amountAdjusted: "Amount adjusted from remaining ${{amount}}",
1531
- minimumDeposit: "Minimum deposit: ${{amount}}",
1532
- walletWillPrompt: "{{wallet}} wallet will ask you to approve this transaction."
1641
+ minimumDeposit: "Minimum deposit: ${{amount}}"
1533
1642
  },
1534
1643
  confirming: {
1535
1644
  waitingTitle: "Waiting for confirmation...",
@@ -1759,6 +1868,7 @@ var depositModal = {
1759
1868
  cash: "Use Cash"
1760
1869
  },
1761
1870
  applePayHeader: {
1871
+ enterContact: "Verification",
1762
1872
  enterEmail: "Enter your email",
1763
1873
  enterPhone: "Enter your phone",
1764
1874
  verifyEmail: "Verify your email",
@@ -1841,7 +1951,7 @@ var connectExchange = {
1841
1951
  connectingDesc: "Complete authorization in the popup window",
1842
1952
  connected: {
1843
1953
  title: "Connected to {{exchange}}",
1844
- subtitle: "Your {{exchange}} account is linked and ready to use.",
1954
+ subtitle: "Your account is linked and ready to use.",
1845
1955
  exchange: "Exchange",
1846
1956
  status: "Status",
1847
1957
  statusConnected: "Connected",
@@ -1850,8 +1960,7 @@ var connectExchange = {
1850
1960
  flowSource: "Source",
1851
1961
  flowTransfer: "Transfer",
1852
1962
  flowDirect: "Direct",
1853
- flowDestination: "Destination",
1854
- secureNote: "All transfers are secured with two-factor authentication and encrypted end-to-end."
1963
+ flowDestination: "Destination"
1855
1964
  },
1856
1965
  holdings: {
1857
1966
  title: "Select asset"
@@ -1870,7 +1979,7 @@ var connectExchange = {
1870
1979
  mfaEnrollmentTitle: "Enable SMS or Authy 2FA",
1871
1980
  mfaEnrollmentMessage: "Please make sure you enable SMS or Authy 2FA in your Coinbase account. Press Continue after you enable it.",
1872
1981
  mfaEnrollmentSettingsLink: "Open Coinbase security settings",
1873
- termsNoticePrefix: "By clicking on Confirm Order, you agree to our ",
1982
+ termsNoticePrefix: "By clicking on Confirm, you agree to our ",
1874
1983
  termsNoticeLink: "terms",
1875
1984
  termsNoticeSuffix: "."
1876
1985
  },
@@ -2339,10 +2448,12 @@ declare const i18n: {
2339
2448
  review: string;
2340
2449
  tryAgain: string;
2341
2450
  somethingWentWrong: string;
2451
+ quoteFailed: string;
2342
2452
  seeMoreDetails: string;
2343
2453
  seeLess: string;
2344
2454
  dateTime: string;
2345
2455
  continue: string;
2456
+ confirm: string;
2346
2457
  processing: string;
2347
2458
  checkingFor: string;
2348
2459
  depositTarget: string;
@@ -2352,6 +2463,9 @@ declare const i18n: {
2352
2463
  help: string;
2353
2464
  done: string;
2354
2465
  from: string;
2466
+ to: string;
2467
+ youPay: string;
2468
+ intentAddressDisclaimer: string;
2355
2469
  max: string;
2356
2470
  or: string;
2357
2471
  minimumAmount: string;
@@ -2426,7 +2540,6 @@ declare const i18n: {
2426
2540
  minimumForTokenOnChain: string;
2427
2541
  amountAdjusted: string;
2428
2542
  minimumDeposit: string;
2429
- walletWillPrompt: string;
2430
2543
  };
2431
2544
  confirming: {
2432
2545
  waitingTitle: string;
@@ -2656,6 +2769,7 @@ declare const i18n: {
2656
2769
  cash: string;
2657
2770
  };
2658
2771
  applePayHeader: {
2772
+ enterContact: string;
2659
2773
  enterEmail: string;
2660
2774
  enterPhone: string;
2661
2775
  verifyEmail: string;
@@ -2748,7 +2862,6 @@ declare const i18n: {
2748
2862
  flowTransfer: string;
2749
2863
  flowDirect: string;
2750
2864
  flowDestination: string;
2751
- secureNote: string;
2752
2865
  };
2753
2866
  holdings: {
2754
2867
  title: string;
@@ -3364,10 +3477,23 @@ interface UseDepositQuoteParams {
3364
3477
  * that destination amount. Exact-in (`sourceAmount`): estimated destination
3365
3478
  * amount received for that source amount. The response includes the project's
3366
3479
  * platform fee from billing (`platform_fee_percent`).
3367
- * Server-side cached for 1 minute; client re-fetches on param change.
3480
+ * Server-side cached for 1 minute; client treats a quote as fresh for 5 minutes.
3368
3481
  */
3369
3482
  declare function useDepositQuote(params: UseDepositQuoteParams): _tanstack_react_query.UseQueryResult<DepositQuote, Error>;
3370
3483
 
3484
+ interface UseTokenMetadataParams {
3485
+ chainType?: string;
3486
+ chainId?: string;
3487
+ tokenAddress?: string;
3488
+ publishableKey: string;
3489
+ enabled?: boolean;
3490
+ }
3491
+ /**
3492
+ * Token metadata (symbol, icons, decimals, chain) for a chain/token address.
3493
+ * Shared query key so transfer, card, and other surfaces reuse the same cache.
3494
+ */
3495
+ declare function useTokenMetadata(params: UseTokenMetadataParams): _tanstack_react_query.UseQueryResult<TokenMetadata | null, Error>;
3496
+
3371
3497
  interface UsePublicIncidentOptions {
3372
3498
  publishableKey: string;
3373
3499
  enabled?: boolean;
@@ -3786,4 +3912,4 @@ declare function cn(...inputs: ClassValue[]): string;
3786
3912
  */
3787
3913
  declare function truncateAddress(address: string, startChars?: number, endChars?: number): string;
3788
3914
 
3789
- export { type AllowedCountryResult, AnalyticsProvider, type AnalyticsProviderProps, BankTransfer, BankTransferButton, type BankTransferProps, type BankTransferView, type BrowserWalletAmountQuickSelect, Button, type ButtonProps, type ButtonTokens, BuyWithApplePay, type BuyWithApplePayProps, BuyWithCard, type BuyWithCardProps, BuyWithGooglePay, type BuyWithGooglePayProps, BuyWithWalletPay, type BuyWithWalletPayHandle, type BuyWithWalletPayProps, type CardTokens, CheckingForDepositIndicator, CheckoutModal, type CheckoutModalProps, CoinbaseConnect, type ComponentConfig, type ComponentOverrides, type ComponentTokens, ConfirmingView, ConnectExchangeButton, type ContainerTokens, CurrencyListItem, CurrencyListSection, CurrencyModal, type CustomThemeColors, type DepositConfirmationMode, DepositDetailContent, DepositExecutionItem, DepositHeader, type DepositMenuLayout, type DepositMenuLayoutType, DepositModal, type DepositModalInitialScreen, DepositSuccessToast, type DepositTab, DepositTrackerButton, DepositWithCardButton, DepositsModal, type DetectedWallet, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, type EvmWalletProvider, type FontConfig, HYPERCORE_CHAIN_ID, type HeaderTokens, type I18nContextValue, I18nProvider, type I18nProviderProps, type I18nStrings, type InputTokens, type ListTokens, type LocaleCode, ManualDepositButton, type MobilePlatform, PayWithStripeLink, type PayWithStripeLinkProps, QRCodeSkeleton, type ResolvedFonts, SUPPORTED_LOCALES, type SearchTokens, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, type SolanaWalletProvider, type StoredWalletPaySession as StoredApplePaySession, type StoredWalletPaySession, StripeLinkButton, type StripeLinkStep, StyledQRCode, type ThemeColors, type ThemeConfig, type ThemeMode, ThemeProvider, type ThemeProviderProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TransferCryptoButton, TransferCryptoDoubleInput, TransferCryptoSingleInput, type UseDepositQuoteParams, type UsePaymentIntentParams, type UseSupportedDepositTokensOptions, WalletPayQrCheckout, type WalletPayQrCheckoutProps, type WalletPayQuote, type WalletPayView, WithdrawConfirmingView, WithdrawDoubleInput, WithdrawExecutionItem, WithdrawForm, WithdrawModal, type WithdrawModalProps, WithdrawTokenSelector, type WithdrawTransactionInfo, buildWalletPayQuote, buttonVariants, clearStoredWalletPaySession as clearStoredApplePaySession, clearStoredWalletPaySession, cn, colors, defaultColors, detectBrowserLocale, detectBrowserWallet, formatCryptoAmount, formatFiat, getActiveLocale, getActiveStrings, getColors, getStoredWalletPaySession as getStoredApplePaySession, getStoredWalletPaySession, getStrings, i18n, interpolate, isHypercoreChain, isOnrampTokenFresh, mergeColors, normalizeLocale, platformSupportsWalletPay, qrErrorCorrectionLevel, resolveComponentTokens, sendEvmWithdraw, sendHypercoreWithdraw, sendSolanaWithdraw, setActiveLocale, setStoredWalletPaySession as setStoredApplePaySession, setStoredWalletPaySession, truncateAddress, useAddressBalance, useAllowedCountry, useAnalytics, useDebounce, useDepositPolling, useDepositQuote, useI18n, useMobilePlatform, usePaymentIntent, usePublicIncident, useSourceTokenValidation, useSupportedDepositTokens, useSupportedDestinationTokens, useTheme, useVerifyRecipientAddress, useWithdrawPolling };
3915
+ export { type AllowedCountryResult, AnalyticsProvider, type AnalyticsProviderProps, BankTransfer, BankTransferButton, type BankTransferProps, type BankTransferView, type BrowserWalletAmountQuickSelect, Button, type ButtonProps, type ButtonTokens, BuyWithApplePay, type BuyWithApplePayProps, BuyWithCard, type BuyWithCardProps, BuyWithGooglePay, type BuyWithGooglePayProps, BuyWithWalletPay, type BuyWithWalletPayHandle, type BuyWithWalletPayProps, type CardTokens, CheckingForDepositIndicator, CheckoutModal, type CheckoutModalProps, CoinbaseConnect, type ComponentConfig, type ComponentOverrides, type ComponentTokens, ConfirmingView, ConnectExchangeButton, type ContainerTokens, CurrencyListItem, CurrencyListSection, CurrencyModal, type CustomThemeColors, type DepositConfirmationMode, DepositDetailContent, DepositExecutionItem, DepositHeader, type DepositMenuLayout, type DepositMenuLayoutType, DepositModal, type DepositModalInitialScreen, DepositSuccessToast, type DepositTab, DepositTrackerButton, DepositWithCardButton, DepositsModal, type DetectedWallet, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, EIP6963_BOOTSTRAP_SCRIPT, type EvmWalletProvider, type FontConfig, HYPERCORE_CHAIN_ID, type HeaderTokens, type I18nContextValue, I18nProvider, type I18nProviderProps, type I18nStrings, type InputTokens, type ListTokens, type LocaleCode, ManualDepositButton, type MobilePlatform, PayWithStripeLink, type PayWithStripeLinkProps, QRCodeSkeleton, type ResolvedFonts, SUPPORTED_LOCALES, type SearchTokens, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, type SolanaStandardAccount, type SolanaStandardWallet, type SolanaWalletProvider, type StoredWalletPaySession as StoredApplePaySession, type StoredWalletPaySession, StripeLinkButton, type StripeLinkStep, StyledQRCode, type ThemeColors, type ThemeConfig, type ThemeMode, ThemeProvider, type ThemeProviderProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TransferCryptoButton, TransferCryptoDoubleInput, TransferCryptoSingleInput, TransferQrCode, type UseDepositQuoteParams, type UsePaymentIntentParams, type UseSupportedDepositTokensOptions, type UseTokenMetadataParams, WalletPayQrCheckout, type WalletPayQrCheckoutProps, type WalletPayQuote, type WalletPayView, WithdrawConfirmingView, WithdrawDoubleInput, WithdrawExecutionItem, WithdrawForm, WithdrawModal, type WithdrawModalProps, WithdrawTokenSelector, type WithdrawTransactionInfo, buildWalletPayQuote, buttonVariants, clearStoredWalletPaySession as clearStoredApplePaySession, clearStoredWalletPaySession, cn, colors, connectSolanaStandardWallet, defaultColors, detectBrowserLocale, detectBrowserWallet, detectConnectedBrowserWallet, findSolanaStandardWallet, formatCryptoAmount, formatFiat, getActiveLocale, getActiveStrings, getAuthorizedSolanaStandardAccounts, getColors, getSolanaStandardWallets, getStoredWalletPaySession as getStoredApplePaySession, getStoredWalletPaySession, getStrings, i18n, interpolate, isHypercoreChain, isOnrampTokenFresh, isSolanaWalletDetectedViaWalletStandard, mergeColors, normalizeLocale, platformSupportsWalletPay, qrErrorCorrectionLevel, requestEip6963Providers, resolveComponentTokens, sendEvmWithdraw, sendHypercoreWithdraw, sendSolanaWithdraw, setActiveLocale, setStoredWalletPaySession as setStoredApplePaySession, setStoredWalletPaySession, signSolanaStandardTransaction, startBrowserWalletDiscovery, subscribeSolanaStandardAccountChanges, subscribeSolanaStandardWallets, truncateAddress, useAddressBalance, useAllowedCountry, useAnalytics, useDebounce, useDepositPolling, useDepositQuote, useI18n, useMobilePlatform, usePaymentIntent, usePublicIncident, useSourceTokenValidation, useSupportedDepositTokens, useSupportedDestinationTokens, useTheme, useTokenMetadata, useVerifyRecipientAddress, useWithdrawPolling };