@swype-org/react-sdk 0.2.377 → 0.2.399
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.cjs +1645 -785
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1152 -1012
- package/dist/index.d.ts +1152 -1012
- package/dist/index.js +1645 -785
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -48,8 +48,15 @@ interface Wallet {
|
|
|
48
48
|
id: string;
|
|
49
49
|
name: string;
|
|
50
50
|
status: string;
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
/**
|
|
52
|
+
* Token-level balances. Absent on the response from `GET /v1/accounts` and
|
|
53
|
+
* `GET /v1/accounts/:id` — those are DB-only/fast and never issue balance
|
|
54
|
+
* RPC. Populated by `GET /v1/accounts/:id/balances` (fetched separately and
|
|
55
|
+
* merged in). Treat `undefined` as "balances still loading" → shimmer.
|
|
56
|
+
*/
|
|
57
|
+
sources?: WalletSource[];
|
|
58
|
+
/** Wallet-level aggregate balance. Absent until balances are merged in (see `sources`). */
|
|
59
|
+
balance?: TokenBalance;
|
|
53
60
|
chain: {
|
|
54
61
|
id: string;
|
|
55
62
|
name: string;
|
|
@@ -60,6 +67,16 @@ interface Wallet {
|
|
|
60
67
|
updateDate: string;
|
|
61
68
|
authorizationSessions?: AuthorizationSession[];
|
|
62
69
|
}
|
|
70
|
+
/** Balance-bearing slice of a wallet from `GET /v1/accounts/:id/balances`. */
|
|
71
|
+
interface WalletBalances {
|
|
72
|
+
id: string;
|
|
73
|
+
balance: TokenBalance;
|
|
74
|
+
sources: WalletSource[];
|
|
75
|
+
}
|
|
76
|
+
/** Response of `GET /v1/accounts/:id/balances`. */
|
|
77
|
+
interface AccountBalances {
|
|
78
|
+
wallets: WalletBalances[];
|
|
79
|
+
}
|
|
63
80
|
/** Connected account containing wallets */
|
|
64
81
|
interface Account {
|
|
65
82
|
/**
|
|
@@ -140,6 +157,13 @@ interface AuthorizationSessionDetail {
|
|
|
140
157
|
defaultAllowance?: number;
|
|
141
158
|
selectedTokenAddress?: string;
|
|
142
159
|
selectedChainId?: number;
|
|
160
|
+
/**
|
|
161
|
+
* Deployed Blink smart-account (SCA) address for the user on the session's
|
|
162
|
+
* EVM chain. Surfaced by the backend at the session level so the approval
|
|
163
|
+
* screen can show the "Your Blink Passkey" destination before signing
|
|
164
|
+
* begins. Absent for Solana sessions and until a smart account exists.
|
|
165
|
+
*/
|
|
166
|
+
smartAccountAddress?: string;
|
|
143
167
|
paymentIntent?: {
|
|
144
168
|
idempotencyKey: string;
|
|
145
169
|
amount: number;
|
|
@@ -399,6 +423,10 @@ interface ThemeTokens {
|
|
|
399
423
|
radius: string;
|
|
400
424
|
radiusLg: string;
|
|
401
425
|
fontFamily: string;
|
|
426
|
+
fontWeightRegular: number;
|
|
427
|
+
fontWeightMedium: number;
|
|
428
|
+
fontWeightSemibold: number;
|
|
429
|
+
fontWeightBold: number;
|
|
402
430
|
}
|
|
403
431
|
declare const darkTheme: ThemeTokens;
|
|
404
432
|
declare const lightTheme: ThemeTokens;
|
|
@@ -527,6 +555,14 @@ declare function fetchProviders(apiBaseUrl: string, token?: string | null): Prom
|
|
|
527
555
|
declare function fetchChains(apiBaseUrl: string, token: string): Promise<Chain[]>;
|
|
528
556
|
declare function fetchAccounts(apiBaseUrl: string, token: string, credentialId: string): Promise<Account[]>;
|
|
529
557
|
declare function fetchAccount(apiBaseUrl: string, token: string, accountId: string, credentialId: string): Promise<Account>;
|
|
558
|
+
/**
|
|
559
|
+
* Fetches live on-chain balances (with DB-cache fallback) and per-source
|
|
560
|
+
* One-Tap allowances for a single account. This is the slow, RPC-bearing path
|
|
561
|
+
* split out of the accounts endpoints — the client fetches it separately from
|
|
562
|
+
* `fetchAccounts` and merges the result into the account so the deposit token
|
|
563
|
+
* picker can shimmer until it lands.
|
|
564
|
+
*/
|
|
565
|
+
declare function fetchAccountBalances(apiBaseUrl: string, token: string, accountId: string, credentialId: string): Promise<AccountBalances>;
|
|
530
566
|
interface CreateAccountParams {
|
|
531
567
|
/** Caller-supplied UUID v4 for idempotency. If omitted, a random UUID is generated. */
|
|
532
568
|
id?: string;
|
|
@@ -644,9 +680,16 @@ declare function fetchUserConfig(apiBaseUrl: string, token: string): Promise<{
|
|
|
644
680
|
id: string;
|
|
645
681
|
config: UserConfig;
|
|
646
682
|
}>;
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
683
|
+
/**
|
|
684
|
+
* Spending-limit config patch. `unlimitedAllowance: true` requests the per-chain
|
|
685
|
+
* on-chain maximum (resolved server-side); a numeric `defaultAllowance` (USD)
|
|
686
|
+
* requests that cap. At least one field must be present.
|
|
687
|
+
*/
|
|
688
|
+
type SpendingLimitConfig = {
|
|
689
|
+
defaultAllowance?: number;
|
|
690
|
+
unlimitedAllowance?: boolean;
|
|
691
|
+
};
|
|
692
|
+
declare function updateUserConfig(apiBaseUrl: string, token: string, config: SpendingLimitConfig): Promise<void>;
|
|
650
693
|
/**
|
|
651
694
|
* Binds a wallet provider to a previously provider-less authorization
|
|
652
695
|
* session. Used by the mobile wallet picker once the user taps a specific
|
|
@@ -680,9 +723,7 @@ declare function setAuthorizationSessionPaymentIntentAmount(apiBaseUrl: string,
|
|
|
680
723
|
* linked user yet (e.g. guest account setup), config is stored on the session
|
|
681
724
|
* and used as the account allowance until the user is claimed.
|
|
682
725
|
*/
|
|
683
|
-
declare function updateUserConfigBySession(apiBaseUrl: string, sessionId: string, config:
|
|
684
|
-
defaultAllowance: number;
|
|
685
|
-
}): Promise<void>;
|
|
726
|
+
declare function updateUserConfigBySession(apiBaseUrl: string, sessionId: string, config: SpendingLimitConfig): Promise<void>;
|
|
686
727
|
interface FetchManualTransferSourcesParams {
|
|
687
728
|
merchantAuthorization: MerchantAuthorization;
|
|
688
729
|
destination: Destination;
|
|
@@ -763,12 +804,14 @@ type api_CreateTransferParams = CreateTransferParams;
|
|
|
763
804
|
type api_FetchManualTransferSourcesParams = FetchManualTransferSourcesParams;
|
|
764
805
|
type api_ProbeActionCompletionResult = ProbeActionCompletionResult;
|
|
765
806
|
type api_RefreshManualTransferQuoteResult = RefreshManualTransferQuoteResult;
|
|
807
|
+
type api_SpendingLimitConfig = SpendingLimitConfig;
|
|
766
808
|
type api_TransferQuote = TransferQuote;
|
|
767
809
|
declare const api_createAccount: typeof createAccount;
|
|
768
810
|
declare const api_createAccountAuthorizationSession: typeof createAccountAuthorizationSession;
|
|
769
811
|
declare const api_createManualTransfer: typeof createManualTransfer;
|
|
770
812
|
declare const api_createTransfer: typeof createTransfer;
|
|
771
813
|
declare const api_fetchAccount: typeof fetchAccount;
|
|
814
|
+
declare const api_fetchAccountBalances: typeof fetchAccountBalances;
|
|
772
815
|
declare const api_fetchAccounts: typeof fetchAccounts;
|
|
773
816
|
declare const api_fetchAuthorizationSession: typeof fetchAuthorizationSession;
|
|
774
817
|
declare const api_fetchAuthorizationSessionByToken: typeof fetchAuthorizationSessionByToken;
|
|
@@ -794,7 +837,7 @@ declare const api_updateUserConfig: typeof updateUserConfig;
|
|
|
794
837
|
declare const api_updateUserConfigBySession: typeof updateUserConfigBySession;
|
|
795
838
|
declare const api_waitForActionTransactionReceipt: typeof waitForActionTransactionReceipt;
|
|
796
839
|
declare namespace api {
|
|
797
|
-
export { type api_ActionTransactionReceiptWaitResult as ActionTransactionReceiptWaitResult, type api_BridgeCall as BridgeCall, type api_CreateAccountAuthorizationSessionOptions as CreateAccountAuthorizationSessionOptions, type api_CreateAccountParams as CreateAccountParams, type api_CreateManualTransferParams as CreateManualTransferParams, type api_CreateTransferParams as CreateTransferParams, type api_FetchManualTransferSourcesParams as FetchManualTransferSourcesParams, type api_ProbeActionCompletionResult as ProbeActionCompletionResult, type api_RefreshManualTransferQuoteResult as RefreshManualTransferQuoteResult, type api_TransferQuote as TransferQuote, api_createAccount as createAccount, api_createAccountAuthorizationSession as createAccountAuthorizationSession, api_createManualTransfer as createManualTransfer, api_createTransfer as createTransfer, api_fetchAccount as fetchAccount, api_fetchAccounts as fetchAccounts, api_fetchAuthorizationSession as fetchAuthorizationSession, api_fetchAuthorizationSessionByToken as fetchAuthorizationSessionByToken, api_fetchChains as fetchChains, api_fetchManualTransferSession as fetchManualTransferSession, api_fetchManualTransferSources as fetchManualTransferSources, api_fetchMerchantPublicKey as fetchMerchantPublicKey, api_fetchProviders as fetchProviders, api_fetchTransfer as fetchTransfer, api_fetchUserConfig as fetchUserConfig, api_postTransferQuote as postTransferQuote, api_probeActionCompletion as probeActionCompletion, api_refreshManualTransferQuote as refreshManualTransferQuote, api_regenerateTransferSignPayload as regenerateTransferSignPayload, api_registerPasskey as registerPasskey, api_reportActionCompletion as reportActionCompletion, api_reportPasskeyActivity as reportPasskeyActivity, api_setAuthorizationSessionPaymentIntentAmount as setAuthorizationSessionPaymentIntentAmount, api_setAuthorizationSessionProvider as setAuthorizationSessionProvider, api_signTransfer as signTransfer, api_updateManualTransferDepositTargetChain as updateManualTransferDepositTargetChain, api_updateUserConfig as updateUserConfig, api_updateUserConfigBySession as updateUserConfigBySession, api_waitForActionTransactionReceipt as waitForActionTransactionReceipt };
|
|
840
|
+
export { type api_ActionTransactionReceiptWaitResult as ActionTransactionReceiptWaitResult, type api_BridgeCall as BridgeCall, type api_CreateAccountAuthorizationSessionOptions as CreateAccountAuthorizationSessionOptions, type api_CreateAccountParams as CreateAccountParams, type api_CreateManualTransferParams as CreateManualTransferParams, type api_CreateTransferParams as CreateTransferParams, type api_FetchManualTransferSourcesParams as FetchManualTransferSourcesParams, type api_ProbeActionCompletionResult as ProbeActionCompletionResult, type api_RefreshManualTransferQuoteResult as RefreshManualTransferQuoteResult, type api_SpendingLimitConfig as SpendingLimitConfig, type api_TransferQuote as TransferQuote, api_createAccount as createAccount, api_createAccountAuthorizationSession as createAccountAuthorizationSession, api_createManualTransfer as createManualTransfer, api_createTransfer as createTransfer, api_fetchAccount as fetchAccount, api_fetchAccountBalances as fetchAccountBalances, api_fetchAccounts as fetchAccounts, api_fetchAuthorizationSession as fetchAuthorizationSession, api_fetchAuthorizationSessionByToken as fetchAuthorizationSessionByToken, api_fetchChains as fetchChains, api_fetchManualTransferSession as fetchManualTransferSession, api_fetchManualTransferSources as fetchManualTransferSources, api_fetchMerchantPublicKey as fetchMerchantPublicKey, api_fetchProviders as fetchProviders, api_fetchTransfer as fetchTransfer, api_fetchUserConfig as fetchUserConfig, api_postTransferQuote as postTransferQuote, api_probeActionCompletion as probeActionCompletion, api_refreshManualTransferQuote as refreshManualTransferQuote, api_regenerateTransferSignPayload as regenerateTransferSignPayload, api_registerPasskey as registerPasskey, api_reportActionCompletion as reportActionCompletion, api_reportPasskeyActivity as reportPasskeyActivity, api_setAuthorizationSessionPaymentIntentAmount as setAuthorizationSessionPaymentIntentAmount, api_setAuthorizationSessionProvider as setAuthorizationSessionProvider, api_signTransfer as signTransfer, api_updateManualTransferDepositTargetChain as updateManualTransferDepositTargetChain, api_updateUserConfig as updateUserConfig, api_updateUserConfigBySession as updateUserConfigBySession, api_waitForActionTransactionReceipt as waitForActionTransactionReceipt };
|
|
798
841
|
}
|
|
799
842
|
|
|
800
843
|
interface BlinkPaymentProps {
|
|
@@ -845,6 +888,62 @@ interface SelectSourceChainChoice {
|
|
|
845
888
|
}[];
|
|
846
889
|
}
|
|
847
890
|
|
|
891
|
+
interface LinkTokenEntry {
|
|
892
|
+
tokenSymbol: string;
|
|
893
|
+
chainName: string;
|
|
894
|
+
balanceUsd: number;
|
|
895
|
+
/**
|
|
896
|
+
* WalletConnect-only: the connected wallet cannot sign on this token's
|
|
897
|
+
* chain (missing from both the session's approved chains and the Reown
|
|
898
|
+
* registry). Renders the "Not supported, deposit manually" pill and makes
|
|
899
|
+
* the row unselectable.
|
|
900
|
+
*
|
|
901
|
+
* Also set for native gas assets (ETH, MON, SOL, …) that Permit2 / SPL
|
|
902
|
+
* delegate cannot authorize — see `balanceLabel` / `tokenLogoUri` below.
|
|
903
|
+
*/
|
|
904
|
+
notSupported?: boolean;
|
|
905
|
+
/**
|
|
906
|
+
* Server-provided token logo URI (Relay CDN). Used for native gas-asset
|
|
907
|
+
* rows; supported stablecoins fall back to the bundled `TOKEN_LOGOS` map.
|
|
908
|
+
*/
|
|
909
|
+
tokenLogoUri?: string | null;
|
|
910
|
+
/**
|
|
911
|
+
* Preformatted native-unit balance (e.g. "0.7 SOL"). When set, it renders
|
|
912
|
+
* verbatim on the right instead of the `$X.XX` USD figure.
|
|
913
|
+
*/
|
|
914
|
+
balanceLabel?: string;
|
|
915
|
+
}
|
|
916
|
+
/**
|
|
917
|
+
* The spending limit the user confirmed on the summary view. `unlimited`
|
|
918
|
+
* requests the per-chain on-chain maximum (resolved server-side); `usd` is a
|
|
919
|
+
* concrete USD cap.
|
|
920
|
+
*/
|
|
921
|
+
type SpendingLimitSelection = {
|
|
922
|
+
unlimited: true;
|
|
923
|
+
} | {
|
|
924
|
+
usd: number;
|
|
925
|
+
};
|
|
926
|
+
interface LinkTokensScreenProps {
|
|
927
|
+
entries: LinkTokenEntry[];
|
|
928
|
+
selectedIndex: number;
|
|
929
|
+
onSelect: (index: number) => void;
|
|
930
|
+
onApprove: (limit: SpendingLimitSelection) => void;
|
|
931
|
+
/** Desktop-only escape hatch back to wallet selection. */
|
|
932
|
+
onBack?: () => void;
|
|
933
|
+
/** Desktop-only settings/logout action. */
|
|
934
|
+
onLogout?: () => void;
|
|
935
|
+
/** Inline error from authorization or wallet. */
|
|
936
|
+
error?: string | null;
|
|
937
|
+
/**
|
|
938
|
+
* True while the orchestrator is still resolving the available token list.
|
|
939
|
+
* Shows shimmer rows in place of real entries.
|
|
940
|
+
*/
|
|
941
|
+
loading?: boolean;
|
|
942
|
+
/** Disables the Approve CTA while wallet calls / patches are in flight. */
|
|
943
|
+
approving?: boolean;
|
|
944
|
+
}
|
|
945
|
+
declare function LinkTokensScreen({ entries, selectedIndex, onSelect, onApprove, onBack, onLogout, error, loading, approving, }: LinkTokensScreenProps): react_jsx_runtime.JSX.Element;
|
|
946
|
+
|
|
848
947
|
type ScreenName = 'loading' | 'manual-transfer' | 'login' | 'welcome-back' | 'success' | 'processing' | 'confirm-sign' | 'select-source' | 'open-wallet' | 'link-tokens' | 'wallet-picker' | 'token-picker' | 'guest-source-picker' | 'amount-too-low' | 'deposit' | 'deposit-options';
|
|
849
948
|
interface MobileFlowState {
|
|
850
949
|
deeplinkUri: string;
|
|
@@ -1109,6 +1208,18 @@ interface UseAuthorizationExecutorResult {
|
|
|
1109
1208
|
approveSplConfirming: AuthorizationAction | null;
|
|
1110
1209
|
/** The SELECT_SOURCE action when paused for user selection, null otherwise. */
|
|
1111
1210
|
pendingSelectSource: AuthorizationAction | null;
|
|
1211
|
+
/** True while a signing action is paused waiting for the user to tap "Approve". */
|
|
1212
|
+
awaitingApproval: boolean;
|
|
1213
|
+
/** Destination address (deployed smart account / swig pubkey) resolved for the
|
|
1214
|
+
* paused signing action, for display on the approval screen. Null until known. */
|
|
1215
|
+
approvalDestinationAddress: string | null;
|
|
1216
|
+
/** Pause a signing action until the user approves. Resolves immediately once
|
|
1217
|
+
* the user has already approved earlier in the same run. */
|
|
1218
|
+
waitForApproval: (action: AuthorizationAction, destinationAddress: string | null) => Promise<void>;
|
|
1219
|
+
/** Release the paused signing action (user tapped "Approve"). */
|
|
1220
|
+
approveAuthorization: () => void;
|
|
1221
|
+
/** Reset the approval latch for a fresh authorization run (not a retry). */
|
|
1222
|
+
resetApprovalGate: () => void;
|
|
1112
1223
|
/** Call this from the UI to provide the user's chain+token choice. */
|
|
1113
1224
|
resolveSelectSource: (selection: SourceSelection) => void;
|
|
1114
1225
|
/** Reject paused SELECT_SOURCE and reset executor flags (e.g. user backed to deposit). */
|
|
@@ -1316,6 +1427,13 @@ interface OrchestratorRunOptions {
|
|
|
1316
1427
|
accounts: readonly string[];
|
|
1317
1428
|
chainId: number;
|
|
1318
1429
|
}>;
|
|
1430
|
+
/**
|
|
1431
|
+
* When true, the run keeps the existing manual-approval latch instead of
|
|
1432
|
+
* resetting it. Set by `restart()` so a post-error Retry re-prompts the
|
|
1433
|
+
* wallet without forcing the user to tap "Approve" again; a fresh `run()`
|
|
1434
|
+
* always resets so the user must approve before the first wallet prompt.
|
|
1435
|
+
*/
|
|
1436
|
+
keepApprovalGate?: boolean;
|
|
1319
1437
|
}
|
|
1320
1438
|
interface UseAuthorizationOrchestratorResult {
|
|
1321
1439
|
/**
|
|
@@ -1359,6 +1477,17 @@ interface UseAuthorizationOrchestratorResult {
|
|
|
1359
1477
|
sourceSelectionResolved: boolean;
|
|
1360
1478
|
/** True after the most recent run drained all authorization actions. */
|
|
1361
1479
|
orchestratorCompleted: boolean;
|
|
1480
|
+
/**
|
|
1481
|
+
* Live session-level smart-account ("Your Blink Passkey") address for the
|
|
1482
|
+
* action currently being processed, mirrored reactively from the tracked
|
|
1483
|
+
* session so the approval screen can render it the instant the backend
|
|
1484
|
+
* surfaces it — rather than only at the `waitForApproval` gate. Always the
|
|
1485
|
+
* currently-selected chain's address (reset to null at the start of each run),
|
|
1486
|
+
* so it can never show a stale value from a prior selection. Null until the
|
|
1487
|
+
* backend reports it (and for Solana, whose owner pubkey is carried on the
|
|
1488
|
+
* action metadata instead). EVM only.
|
|
1489
|
+
*/
|
|
1490
|
+
approvalSmartAccountAddress: string | null;
|
|
1362
1491
|
/** Cancel any paused setup flow and reject the current orchestrator run. */
|
|
1363
1492
|
cancelPendingFlow: () => void;
|
|
1364
1493
|
}
|
|
@@ -1376,6 +1505,133 @@ interface WalletAccountChange {
|
|
|
1376
1505
|
accounts: readonly string[];
|
|
1377
1506
|
}
|
|
1378
1507
|
|
|
1508
|
+
/**
|
|
1509
|
+
* Cross-origin iframe passkey helpers.
|
|
1510
|
+
*
|
|
1511
|
+
* When the webview-app runs inside a cross-origin iframe, WebAuthn
|
|
1512
|
+
* ceremonies cannot execute from within the iframe on Safari. For passkey
|
|
1513
|
+
* verification (signing) and signup (credential creation), we open a
|
|
1514
|
+
* same-origin pop-up window on the Blink domain to perform the ceremony.
|
|
1515
|
+
*/
|
|
1516
|
+
/**
|
|
1517
|
+
* Thrown when `navigator.credentials.create()` fails inside a
|
|
1518
|
+
* cross-origin iframe (Safari). The UI layer should catch this and
|
|
1519
|
+
* offer the user a button that opens the Blink passkey pop-up.
|
|
1520
|
+
*/
|
|
1521
|
+
declare class PasskeyIframeBlockedError extends Error {
|
|
1522
|
+
constructor(message?: string);
|
|
1523
|
+
}
|
|
1524
|
+
interface PasskeyVerifyPopupOptions {
|
|
1525
|
+
credentialIds: string[];
|
|
1526
|
+
rpId: string;
|
|
1527
|
+
/** Populated by `findDevicePasskeyViaPopup`; not set by callers. */
|
|
1528
|
+
verificationToken?: string;
|
|
1529
|
+
/** Privy JWT so the popup can report verification server-side. */
|
|
1530
|
+
authToken?: string;
|
|
1531
|
+
/** Core API base URL for server-side passkey activity reporting. */
|
|
1532
|
+
apiBaseUrl?: string;
|
|
1533
|
+
}
|
|
1534
|
+
/**
|
|
1535
|
+
* Opens a same-origin pop-up window on the Blink domain to check whether
|
|
1536
|
+
* any of the given passkey credential IDs exist on this device.
|
|
1537
|
+
*
|
|
1538
|
+
* Used as a fallback when Safari blocks `navigator.credentials.get()`
|
|
1539
|
+
* inside a cross-origin iframe. The popup runs on the Blink domain where
|
|
1540
|
+
* the rpId matches, so WebAuthn works.
|
|
1541
|
+
*
|
|
1542
|
+
* Must be called from a user-gesture handler (e.g. button click) to
|
|
1543
|
+
* avoid the browser's pop-up blocker.
|
|
1544
|
+
*
|
|
1545
|
+
* @returns The matching credential ID, or `null` if none matched or the
|
|
1546
|
+
* popup was closed before completing.
|
|
1547
|
+
*/
|
|
1548
|
+
declare function findDevicePasskeyViaPopup(options: PasskeyVerifyPopupOptions): Promise<string | null>;
|
|
1549
|
+
|
|
1550
|
+
/**
|
|
1551
|
+
* Decodes a WebAuthn credential id from the same base64 (or base64url) encoding
|
|
1552
|
+
* used when registering passkeys and returned by the API as `passkeyCredentialId`.
|
|
1553
|
+
*/
|
|
1554
|
+
declare function credentialIdBase64ToBytes(value: string): Uint8Array<ArrayBuffer>;
|
|
1555
|
+
|
|
1556
|
+
declare function resolvePasskeyRpId(): string;
|
|
1557
|
+
/**
|
|
1558
|
+
* @deprecated Use {@link findDevicePasskey} instead, which checks all
|
|
1559
|
+
* credentials in a single WebAuthn call.
|
|
1560
|
+
*/
|
|
1561
|
+
declare function deviceHasPasskey(credentialId: string): Promise<boolean>;
|
|
1562
|
+
/**
|
|
1563
|
+
* Determines which (if any) of the given server-registered passkeys exists on
|
|
1564
|
+
* the current device. All credential IDs are passed in a single
|
|
1565
|
+
* `navigator.credentials.get()` call so the browser shows at most one prompt
|
|
1566
|
+
* and the platform authenticator automatically selects the matching key.
|
|
1567
|
+
*
|
|
1568
|
+
* @param credentialIds - Base64-encoded WebAuthn credential IDs from the server.
|
|
1569
|
+
* @returns The matching credential ID, or `null` if none are on this device.
|
|
1570
|
+
*/
|
|
1571
|
+
declare function findDevicePasskey(credentialIds: string[]): Promise<string | null>;
|
|
1572
|
+
|
|
1573
|
+
interface UseTransferPollingResult {
|
|
1574
|
+
transfer: Transfer | null;
|
|
1575
|
+
error: string | null;
|
|
1576
|
+
isPolling: boolean;
|
|
1577
|
+
startPolling: (transferId: string) => void;
|
|
1578
|
+
stopPolling: () => void;
|
|
1579
|
+
}
|
|
1580
|
+
/**
|
|
1581
|
+
* Polls GET /v1/transfers/{id} until status is COMPLETED or FAILED. Uses an
|
|
1582
|
+
* adaptive interval (see FAST_POLL_COUNT/FAST_POLL_INTERVAL_MS) so the early
|
|
1583
|
+
* polls — when the bridge is most likely to settle — fire quickly while
|
|
1584
|
+
* later polls back off to `intervalMs` to limit API load.
|
|
1585
|
+
*/
|
|
1586
|
+
declare function useTransferPolling(intervalMs?: number, overrideGetAccessToken?: () => Promise<string | null>): UseTransferPollingResult;
|
|
1587
|
+
|
|
1588
|
+
type AccessTokenGetter = () => Promise<string | null | undefined>;
|
|
1589
|
+
interface SignTransferOptions {
|
|
1590
|
+
/**
|
|
1591
|
+
* Win 2 hint: when the caller already has a fresh `signPayload` (e.g. from
|
|
1592
|
+
* the POST /v1/transfers response), pass it here to skip the GET poll loop
|
|
1593
|
+
* and proceed directly to the WebAuthn ceremony.
|
|
1594
|
+
*/
|
|
1595
|
+
knownSignPayload?: TransferSignPayload | null;
|
|
1596
|
+
}
|
|
1597
|
+
interface UseTransferSigningResult {
|
|
1598
|
+
signing: boolean;
|
|
1599
|
+
signPayload: TransferSignPayload | null;
|
|
1600
|
+
error: string | null;
|
|
1601
|
+
passkeyDismissed: boolean;
|
|
1602
|
+
/**
|
|
1603
|
+
* Starts the signing flow:
|
|
1604
|
+
* 1. Polls GET /v1/transfers/{id} until signPayload is present
|
|
1605
|
+
* (skipped when `opts.knownSignPayload` is provided).
|
|
1606
|
+
* 2. Triggers WebAuthn passkey prompt
|
|
1607
|
+
* 3. Submits signed UserOp via PATCH /v1/transfers/{id}
|
|
1608
|
+
*/
|
|
1609
|
+
signTransfer: (transferId: string, opts?: SignTransferOptions) => Promise<Transfer>;
|
|
1610
|
+
/**
|
|
1611
|
+
* Regenerates a fresh SVM sign payload for a transfer whose signing window
|
|
1612
|
+
* expired (POST /v1/transfers/{id}/sign-payload), reusing the same transfer
|
|
1613
|
+
* id. Returns the refreshed Transfer carrying the new signPayload.
|
|
1614
|
+
*/
|
|
1615
|
+
regenerateSignPayload: (transferId: string) => Promise<Transfer>;
|
|
1616
|
+
}
|
|
1617
|
+
interface UseTransferSigningOptions {
|
|
1618
|
+
/** Optional API base URL override when used outside BlinkProvider. */
|
|
1619
|
+
apiBaseUrl?: string;
|
|
1620
|
+
/** Optional access-token getter override (e.g. deeplink query token). */
|
|
1621
|
+
getAccessToken?: AccessTokenGetter;
|
|
1622
|
+
/** Optional authorization-session token for session-authenticated transfer signing. */
|
|
1623
|
+
authorizationSessionToken?: string;
|
|
1624
|
+
}
|
|
1625
|
+
/**
|
|
1626
|
+
* Post-authorization transfer signing hook.
|
|
1627
|
+
*
|
|
1628
|
+
* After the auth session completes and the transfer reaches AUTHORIZED,
|
|
1629
|
+
* the backend prepares a signPayload containing the unsigned UserOp.
|
|
1630
|
+
* This hook polls for it, prompts the user's passkey via WebAuthn, and
|
|
1631
|
+
* submits the signed UserOp back to the API.
|
|
1632
|
+
*/
|
|
1633
|
+
declare function useTransferSigning(pollIntervalMs?: number, options?: UseTransferSigningOptions): UseTransferSigningResult;
|
|
1634
|
+
|
|
1379
1635
|
interface ReownWallet {
|
|
1380
1636
|
id: string;
|
|
1381
1637
|
name: string;
|
|
@@ -1445,6 +1701,14 @@ interface PaymentState {
|
|
|
1445
1701
|
accounts: Account[];
|
|
1446
1702
|
chains: Chain[];
|
|
1447
1703
|
loadingData: boolean;
|
|
1704
|
+
/**
|
|
1705
|
+
* True while wallet balances are still being fetched (the accounts endpoint
|
|
1706
|
+
* is now balance-free; balances arrive via a separate per-account call and
|
|
1707
|
+
* are merged in by `BALANCES_LOADED`). Drives the deposit screen's
|
|
1708
|
+
* balance-pill / token-row shimmer. Set true by `DATA_LOADED` /
|
|
1709
|
+
* `ACCOUNTS_RELOADED`, cleared by `BALANCES_LOADED`.
|
|
1710
|
+
*/
|
|
1711
|
+
balancesLoading: boolean;
|
|
1448
1712
|
/** True while the deposit screen is refreshing account/token data in place. */
|
|
1449
1713
|
depositSelectionRefreshing: boolean;
|
|
1450
1714
|
selectedProviderId: string | null;
|
|
@@ -1550,6 +1814,10 @@ interface PaymentState {
|
|
|
1550
1814
|
tokenAddress?: string;
|
|
1551
1815
|
chainId?: number;
|
|
1552
1816
|
} | null;
|
|
1817
|
+
/** Lifetime spending limit the user confirmed on LinkTokensScreen. Surfaced on
|
|
1818
|
+
* ApprovingInWalletScreen's source row in place of the wallet address. Null
|
|
1819
|
+
* until the user confirms a limit, and cleared when the setup flow ends. */
|
|
1820
|
+
setupSpendingLimit: SpendingLimitSelection | null;
|
|
1553
1821
|
/**
|
|
1554
1822
|
* Mobile picker pre-prepare: a single speculative `createAccount` is fired on mount
|
|
1555
1823
|
* when the wallet-picker is about to render on mobile. Its `walletDeeplinks`
|
|
@@ -1615,1145 +1883,1017 @@ interface InitialStateConfig {
|
|
|
1615
1883
|
}
|
|
1616
1884
|
declare function createInitialState(config: InitialStateConfig): PaymentState;
|
|
1617
1885
|
|
|
1618
|
-
interface
|
|
1886
|
+
interface LoginScreenProps {
|
|
1619
1887
|
onLoginWithPasskey: () => void;
|
|
1620
1888
|
onSignupWithPasskey: () => void;
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
onNewPayment: () => void;
|
|
1640
|
-
onSetPhase: (phase: PaymentPhase) => void;
|
|
1641
|
-
onSelectSourceChainChange: (chainName: string) => void;
|
|
1642
|
-
onSetSelectSourceTokenSymbol: (symbol: string) => void;
|
|
1643
|
-
onConfirmSelectSource: () => void;
|
|
1644
|
-
onSelectToken: () => void;
|
|
1645
|
-
onSelectAuthorizedToken: (walletId: string, tokenSymbol: string, accountId?: string) => void;
|
|
1646
|
-
onAuthorizeToken: (walletId: string, tokenAddress: string, chainId: number, tokenSymbol: string, accountId?: string) => void;
|
|
1647
|
-
onPrepareTokenAuthorization: (walletId: string, tokenAddress: string, chainId: number, tokenSymbol: string, accountId?: string) => Promise<PreparedTokenAuthorization | null>;
|
|
1648
|
-
onCommitTokenAuthorization: (prepared: PreparedTokenAuthorization) => void;
|
|
1649
|
-
/** Navigate to wallet-picker when adding a new account from the deposit screen. */
|
|
1650
|
-
onAddProviderFromDeposit: () => void;
|
|
1889
|
+
loading: boolean;
|
|
1890
|
+
error: string | null;
|
|
1891
|
+
onBack?: () => void;
|
|
1892
|
+
/** Dismiss the sheet. When set, the header shows a round (X) close button in the top-right instead of the back arrow. */
|
|
1893
|
+
onClose?: () => void;
|
|
1894
|
+
merchantInitials?: string;
|
|
1895
|
+
/** Overrides the default marketing heading when set (e.g. passkey popup copy). When set, the passkey info card is suppressed. */
|
|
1896
|
+
heroTitle?: string;
|
|
1897
|
+
/** Optional line shown under the heading. Reserved for callers that override `heroTitle`. */
|
|
1898
|
+
heroSubtitle?: string;
|
|
1899
|
+
/** When true, primary action is signup and secondary is sign-in. */
|
|
1900
|
+
preferSignup?: boolean;
|
|
1901
|
+
}
|
|
1902
|
+
declare function LoginScreen({ onLoginWithPasskey, onSignupWithPasskey, loading, error, onBack, onClose, merchantInitials, heroTitle, heroSubtitle, preferSignup, }: LoginScreenProps): react_jsx_runtime.JSX.Element;
|
|
1903
|
+
|
|
1904
|
+
interface DepositOptionsScreenProps {
|
|
1905
|
+
/** Recessed "Send Crypto Manually" row. Navigates to the manual-transfer flow. */
|
|
1906
|
+
onToAddress: () => void;
|
|
1651
1907
|
/**
|
|
1652
|
-
*
|
|
1653
|
-
*
|
|
1908
|
+
* Primary "Deposit stablecoins" CTA. Routes to the login screen (wired to
|
|
1909
|
+
* handlers.onLogin) rather than prompting for a passkey directly, mirroring how
|
|
1910
|
+
* the connect-wallet entry point defers credential selection to LoginScreen.
|
|
1654
1911
|
*/
|
|
1655
|
-
|
|
1656
|
-
/**
|
|
1657
|
-
|
|
1658
|
-
/** Leave funding subflow (setup / token picker) back to deposit: restore selection, cancel executor. */
|
|
1659
|
-
onBackFromSubflow: () => void;
|
|
1660
|
-
onLogin: () => void;
|
|
1661
|
-
onCancelLogin: () => void;
|
|
1662
|
-
/** Advance a returning user off WelcomeBackScreen toward the wallet picker. */
|
|
1663
|
-
onAcknowledgeWelcomeBack: () => void;
|
|
1664
|
-
/** Back from WalletPickerScreen: return a walletless user to WelcomeBackScreen. */
|
|
1665
|
-
onReturnToWelcomeBack: () => void;
|
|
1666
|
-
/**
|
|
1667
|
-
* Update the in-flow amount-entry value (string display). Called by
|
|
1668
|
-
* DepositScreen entry mode on every keypress / preset tap. The view-model
|
|
1669
|
-
* wires pure helpers (`enterAmountInput.ts`) into this handler so the
|
|
1670
|
-
* component itself stays presentational.
|
|
1671
|
-
*/
|
|
1672
|
-
onAmountInput: (value: string) => void;
|
|
1673
|
-
/**
|
|
1674
|
-
* Commit the in-flow amount-entry value and clear `requireAmountEntry`.
|
|
1675
|
-
* Routes the user past entry mode back into the normal deposit flow.
|
|
1676
|
-
*/
|
|
1677
|
-
onFinalizeAmount: () => void;
|
|
1678
|
-
onSetDepositToken: (symbol: string, chainName: string, walletId?: string, tokenAddress?: string, chainId?: number) => void;
|
|
1679
|
-
onConfirmSetupDeposit: () => void | Promise<void>;
|
|
1680
|
-
/**
|
|
1681
|
-
* Mobile only: foreground the already-connected WalletConnect wallet from the
|
|
1682
|
-
* signing screen's manual "Open {wallet}" button. Opens the bare wallet
|
|
1683
|
-
* deeplink (no `wc:` URI) so the pending Permit2 prompt surfaces without
|
|
1684
|
-
* re-pairing. Undefined on desktop / when no foreground link is available.
|
|
1685
|
-
*/
|
|
1686
|
-
onOpenWalletForeground?: () => void;
|
|
1687
|
-
}
|
|
1688
|
-
/** Flow identity: reducer state, auth, layout. */
|
|
1689
|
-
interface StepRendererFlowProps {
|
|
1690
|
-
state: PaymentState;
|
|
1691
|
-
authenticated: boolean;
|
|
1692
|
-
passkeyLoading: boolean;
|
|
1693
|
-
isDesktop: boolean;
|
|
1694
|
-
/**
|
|
1695
|
-
* True when the SDK is hosted inside a native mobile app's in-app browser.
|
|
1696
|
-
* Suppresses in-screen (X) close buttons (the host's native chrome handles
|
|
1697
|
-
* dismissal) and removes rounded screen corners. Optional for backwards
|
|
1698
|
-
* compatibility with pre-existing test fixtures; treated as `false` when
|
|
1699
|
-
* absent.
|
|
1700
|
-
*/
|
|
1701
|
-
isMobileApp?: boolean;
|
|
1702
|
-
merchantName?: string;
|
|
1703
|
-
onBack?: () => void;
|
|
1704
|
-
onDismiss?: () => void;
|
|
1705
|
-
/** Merchant-fixed depositAmount, or `null` for the hosted entry-mode flow. */
|
|
1706
|
-
depositAmount: number | null;
|
|
1707
|
-
/**
|
|
1708
|
-
* Effective deposit amount = `parseAmount(state.amount) ?? depositAmount`.
|
|
1709
|
-
* View models should read this for display so the user's typed value from
|
|
1710
|
-
* deposit-screen entry mode propagates through `deposit`, `link-tokens`,
|
|
1711
|
-
* `processing`, and `token-picker` screens. `depositAmount` is retained
|
|
1712
|
-
* separately for "did the merchant fix this?" semantics (e.g.
|
|
1713
|
-
* `AmountTooLowScreen.canRetry`).
|
|
1714
|
-
*/
|
|
1715
|
-
effectiveDepositAmount: number | null;
|
|
1716
|
-
minTransferAmountUsd: number;
|
|
1717
|
-
/** Needed to render ManualTransferFlow when phase is manual-transfer. */
|
|
1718
|
-
destination: Destination;
|
|
1719
|
-
merchantAuthorization?: CreateManualTransferParams['merchantAuthorization'];
|
|
1720
|
-
idempotencyKey?: string;
|
|
1721
|
-
/** Host-level completion callback, forwarded to ManualTransferFlow. */
|
|
1722
|
-
onComplete?: (transfer: Transfer) => void;
|
|
1723
|
-
/** Host-level error callback, forwarded to ManualTransferFlow. */
|
|
1724
|
-
onError?: (error: string) => void;
|
|
1725
|
-
}
|
|
1726
|
-
/** Polling, signing, and auth-executor surface. */
|
|
1727
|
-
interface StepRendererRemoteProps {
|
|
1728
|
-
pollingTransfer: Transfer | null;
|
|
1729
|
-
pollingError: string | null;
|
|
1730
|
-
authExecutorError: string | null;
|
|
1731
|
-
/** True while `executeSessionById` is running (desktop inline wallet steps). */
|
|
1732
|
-
authExecutorExecuting: boolean;
|
|
1733
|
-
authExecutorCurrentAction?: AuthorizationAction | null;
|
|
1734
|
-
/** True once a run has drained all authorization actions (orchestrator
|
|
1735
|
-
* completed). Stays true through the post-sign settling window — when
|
|
1736
|
-
* `currentAction` is already null — until the next run resets it. Lets the
|
|
1737
|
-
* approving checklist render all items complete instead of reverting to the
|
|
1738
|
-
* default active state while the next screen loads. */
|
|
1739
|
-
authExecutorCompleted: boolean;
|
|
1740
|
-
transferSigningSigning: boolean;
|
|
1741
|
-
transferSigningError: string | null;
|
|
1742
|
-
transferSigningPasskeyDismissed?: boolean;
|
|
1743
|
-
pendingSelectSource: AuthorizationAction | null;
|
|
1744
|
-
/**
|
|
1745
|
-
* True once the user interactively resolved a SELECT_SOURCE this run (picked
|
|
1746
|
-
* a token on LinkTokensScreen and tapped Approve). Distinguishes the
|
|
1747
|
-
* post-Approve transient — where the executor's `currentAction` is still the
|
|
1748
|
-
* stale OPEN_PROVIDER from pairing — from genuine pairing, so OpenWalletScreen
|
|
1749
|
-
* is not re-shown after Approve. False during WC reauthorization auto-resolve
|
|
1750
|
-
* pairing, which keeps OpenWalletScreen visible until the wallet pairs.
|
|
1751
|
-
*/
|
|
1752
|
-
sourceSelectionResolved: boolean;
|
|
1753
|
-
}
|
|
1754
|
-
/** Values derived from accounts / selection (plus select-source picker data). */
|
|
1755
|
-
interface StepRendererDerivedProps {
|
|
1756
|
-
pendingConnections: Account[];
|
|
1757
|
-
depositEligibleAccounts: Account[];
|
|
1758
|
-
sourceName: string;
|
|
1759
|
-
maxSourceBalance: number;
|
|
1760
|
-
tokenCount: number;
|
|
1761
|
-
selectedAccount: Account | undefined;
|
|
1762
|
-
selectedSource: WalletSource | null;
|
|
1763
|
-
selectSourceChoices: SelectSourceChainChoice[];
|
|
1764
|
-
/** Balances on chains the WalletConnect session did not approve — rendered as disabled "Not supported" rows. */
|
|
1765
|
-
selectSourceUnsupportedChoices: SelectSourceChainChoice[];
|
|
1766
|
-
/** Native gas assets (ETH, MON, SOL, …) the wallet holds but Permit2 can't authorize — disabled "Not supported" rows. */
|
|
1767
|
-
selectSourceNativeChoices: NativeUnsupportedEntry[];
|
|
1768
|
-
selectSourceRecommended: {
|
|
1769
|
-
chainName: string;
|
|
1770
|
-
tokenSymbol: string;
|
|
1771
|
-
} | null;
|
|
1772
|
-
selectSourceAvailableBalance: number;
|
|
1773
|
-
/**
|
|
1774
|
-
* Reown registry chain ids per WalletConnect-typed account id (null =
|
|
1775
|
-
* registry has no opinion, fail open). Used to badge requires-auth deposit
|
|
1776
|
-
* sources on chains the backing wallet cannot authorize.
|
|
1777
|
-
*/
|
|
1778
|
-
walletConnectChainIdsByAccount: Record<string, number[] | null>;
|
|
1779
|
-
}
|
|
1780
|
-
/** Ephemeral form UI state. */
|
|
1781
|
-
interface StepRendererFormProps {
|
|
1782
|
-
selectSourceChainName: string;
|
|
1783
|
-
selectSourceTokenSymbol: string;
|
|
1784
|
-
depositQuoteId: string | null;
|
|
1785
|
-
depositQuoteFee: PreciseMoney | null;
|
|
1786
|
-
depositQuoteLoading: boolean;
|
|
1787
|
-
depositQuoteError: string | null;
|
|
1788
|
-
}
|
|
1789
|
-
interface StepRendererProps {
|
|
1790
|
-
flow: StepRendererFlowProps;
|
|
1791
|
-
remote: StepRendererRemoteProps;
|
|
1792
|
-
derived: StepRendererDerivedProps;
|
|
1793
|
-
forms: StepRendererFormProps;
|
|
1794
|
-
handlers: StepHandlers;
|
|
1912
|
+
onSignInWithBlink: () => void;
|
|
1913
|
+
/** Dismiss the widget. When set, renders a round (X) close button in the top-right. */
|
|
1914
|
+
onClose?: () => void;
|
|
1795
1915
|
}
|
|
1796
|
-
declare function StepRenderer(props: StepRendererProps): react_jsx_runtime.JSX.Element;
|
|
1797
|
-
|
|
1798
1916
|
/**
|
|
1799
|
-
*
|
|
1800
|
-
*
|
|
1801
|
-
*
|
|
1802
|
-
*
|
|
1803
|
-
*
|
|
1804
|
-
* same-origin pop-up window on the Blink domain to perform the ceremony.
|
|
1805
|
-
*/
|
|
1806
|
-
/**
|
|
1807
|
-
* Thrown when `navigator.credentials.create()` fails inside a
|
|
1808
|
-
* cross-origin iframe (Safari). The UI layer should catch this and
|
|
1809
|
-
* offer the user a button that opens the Blink passkey pop-up.
|
|
1917
|
+
* Pre-login entry screen shown when `enableFullWidget` is true. Mirrors the
|
|
1918
|
+
* Figma "Payment method" redesign (frame 1623-32808): a Blink wordmark, a lime
|
|
1919
|
+
* mascot hero, the black "Deposit stablecoins / In a Blink" CTA
|
|
1920
|
+
* (BlinkDepositButton), an OR divider, and a recessed "Send Crypto Manually"
|
|
1921
|
+
* row that routes to the manual-transfer flow.
|
|
1810
1922
|
*/
|
|
1811
|
-
declare
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
/**
|
|
1822
|
-
|
|
1923
|
+
declare function DepositOptionsScreen({ onToAddress, onSignInWithBlink, onClose, }: DepositOptionsScreenProps): react_jsx_runtime.JSX.Element;
|
|
1924
|
+
|
|
1925
|
+
interface WelcomeBackScreenProps {
|
|
1926
|
+
/** Recessed "Send Crypto Manually" row. Navigates to the manual-transfer flow. */
|
|
1927
|
+
onToAddress: () => void;
|
|
1928
|
+
/**
|
|
1929
|
+
* Primary "Complete setup & Deposit" CTA. Advances the returning user to the
|
|
1930
|
+
* wallet picker to link a wallet and continue the deposit flow.
|
|
1931
|
+
*/
|
|
1932
|
+
onComplete: () => void;
|
|
1933
|
+
/** Dismiss the widget. When set, renders a round (X) close button in the top-right. */
|
|
1934
|
+
onClose?: () => void;
|
|
1823
1935
|
}
|
|
1824
1936
|
/**
|
|
1825
|
-
*
|
|
1826
|
-
*
|
|
1827
|
-
*
|
|
1828
|
-
*
|
|
1829
|
-
*
|
|
1830
|
-
* the rpId matches, so WebAuthn works.
|
|
1831
|
-
*
|
|
1832
|
-
* Must be called from a user-gesture handler (e.g. button click) to
|
|
1833
|
-
* avoid the browser's pop-up blocker.
|
|
1834
|
-
*
|
|
1835
|
-
* @returns The matching credential ID, or `null` if none matched or the
|
|
1836
|
-
* popup was closed before completing.
|
|
1937
|
+
* Re-greeting screen for returning passkey users who reopen the full-widget
|
|
1938
|
+
* flow with a persisted session but no linked wallet. Mirrors
|
|
1939
|
+
* `DepositOptionsScreen`'s "Deposit stablecoins / In a Blink" CTA, wrapped in a
|
|
1940
|
+
* lime "Finish setup" frame, and routes onward to the wallet picker rather
|
|
1941
|
+
* than to login.
|
|
1837
1942
|
*/
|
|
1838
|
-
declare function
|
|
1943
|
+
declare function WelcomeBackScreen({ onToAddress, onComplete, onClose, }: WelcomeBackScreenProps): react_jsx_runtime.JSX.Element;
|
|
1839
1944
|
|
|
1945
|
+
interface BlinkErrorScreenProps {
|
|
1946
|
+
/** Heading text shown under the illustration. */
|
|
1947
|
+
title: string;
|
|
1948
|
+
/** Body copy shown below the title. When null/undefined, nothing renders. */
|
|
1949
|
+
message?: string | null;
|
|
1950
|
+
/** Label for the primary CTA. When set together with `onRetry`, renders the button. */
|
|
1951
|
+
retryLabel?: string;
|
|
1952
|
+
onRetry?: () => void;
|
|
1953
|
+
/** When set, renders the round (X) close button in the header right slot. */
|
|
1954
|
+
onClose?: () => void;
|
|
1955
|
+
}
|
|
1840
1956
|
/**
|
|
1841
|
-
*
|
|
1842
|
-
*
|
|
1957
|
+
* Shared error screen that matches the Figma onboarding redesign
|
|
1958
|
+
* (node 153:19811 — "Sign in Failed"). Displays the bundled traffic-cone
|
|
1959
|
+
* illustration above a title + optional message, with an optional Try Again
|
|
1960
|
+
* CTA pinned to the footer and an optional close (X) button in the header.
|
|
1843
1961
|
*/
|
|
1844
|
-
declare function
|
|
1962
|
+
declare function BlinkErrorScreen({ title, message, retryLabel, onRetry, onClose, }: BlinkErrorScreenProps): react_jsx_runtime.JSX.Element;
|
|
1845
1963
|
|
|
1846
|
-
|
|
1847
|
-
/**
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
* @param credentialIds - Base64-encoded WebAuthn credential IDs from the server.
|
|
1859
|
-
* @returns The matching credential ID, or `null` if none are on this device.
|
|
1860
|
-
*/
|
|
1861
|
-
declare function findDevicePasskey(credentialIds: string[]): Promise<string | null>;
|
|
1964
|
+
interface OtpVerifyScreenProps {
|
|
1965
|
+
/** Masked identifier displayed to the user (e.g. "user@email.com") */
|
|
1966
|
+
maskedIdentifier: string;
|
|
1967
|
+
otpCode: string;
|
|
1968
|
+
onOtpChange: (code: string) => void;
|
|
1969
|
+
onVerify: () => void;
|
|
1970
|
+
onResend: () => void;
|
|
1971
|
+
onBack: () => void;
|
|
1972
|
+
verifying: boolean;
|
|
1973
|
+
error: string | null;
|
|
1974
|
+
}
|
|
1975
|
+
declare function OtpVerifyScreen({ maskedIdentifier, otpCode, onOtpChange, onVerify, onResend, onBack, verifying, error, }: OtpVerifyScreenProps): react_jsx_runtime.JSX.Element;
|
|
1862
1976
|
|
|
1863
|
-
interface
|
|
1864
|
-
|
|
1977
|
+
interface PasskeyScreenProps {
|
|
1978
|
+
onCreatePasskey: () => void;
|
|
1979
|
+
onBack?: () => void;
|
|
1980
|
+
onLogout?: () => void;
|
|
1981
|
+
creating: boolean;
|
|
1865
1982
|
error: string | null;
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1983
|
+
/** When true, direct passkey creation failed (Safari iframe restriction). */
|
|
1984
|
+
popupFallback?: boolean;
|
|
1985
|
+
/** Opens a pop-up window on the Blink domain for passkey registration. */
|
|
1986
|
+
onCreatePasskeyViaPopup?: () => void;
|
|
1987
|
+
/** Creates a brand-new passkey on this device (for users who already have one on another device). */
|
|
1988
|
+
onCreateNewPasskey?: () => void;
|
|
1989
|
+
/** Popup fallback variant of onCreateNewPasskey. */
|
|
1990
|
+
onCreateNewPasskeyViaPopup?: () => void;
|
|
1991
|
+
/** When set, overrides `popupFallback` for the create-new link only. */
|
|
1992
|
+
createNewPopupFallback?: boolean;
|
|
1993
|
+
/** Loading state while a new passkey is being created. */
|
|
1994
|
+
creatingNewPasskey?: boolean;
|
|
1869
1995
|
}
|
|
1870
|
-
|
|
1871
|
-
* Polls GET /v1/transfers/{id} until status is COMPLETED or FAILED. Uses an
|
|
1872
|
-
* adaptive interval (see FAST_POLL_COUNT/FAST_POLL_INTERVAL_MS) so the early
|
|
1873
|
-
* polls — when the bridge is most likely to settle — fire quickly while
|
|
1874
|
-
* later polls back off to `intervalMs` to limit API load.
|
|
1875
|
-
*/
|
|
1876
|
-
declare function useTransferPolling(intervalMs?: number, overrideGetAccessToken?: () => Promise<string | null>): UseTransferPollingResult;
|
|
1996
|
+
declare function PasskeyScreen({ onCreatePasskey, onBack, onLogout, creating, error, popupFallback, onCreatePasskeyViaPopup, onCreateNewPasskey, onCreateNewPasskeyViaPopup, createNewPopupFallback, creatingNewPasskey, }: PasskeyScreenProps): react_jsx_runtime.JSX.Element;
|
|
1877
1997
|
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1998
|
+
interface PasskeyPopupWelcomeScreenProps {
|
|
1999
|
+
/** Begins passkey creation (Privy signup). */
|
|
2000
|
+
onCreatePasskey: () => void;
|
|
2001
|
+
/** When set, renders an "or Sign in with passkey" secondary action for users who already have a passkey. */
|
|
2002
|
+
onSignInWithPasskey?: () => void;
|
|
2003
|
+
/** Disables the actions and shows the primary button's loading state. */
|
|
2004
|
+
creating?: boolean;
|
|
2005
|
+
/** Error copy shown in a banner below the hero. */
|
|
2006
|
+
error?: string | null;
|
|
2007
|
+
onBack?: () => void;
|
|
2008
|
+
onLogout?: () => void;
|
|
1886
2009
|
}
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
2010
|
+
declare function PasskeyPopupWelcomeScreen({ onCreatePasskey, onSignInWithPasskey, creating, error, onBack, onLogout, }: PasskeyPopupWelcomeScreenProps): react_jsx_runtime.JSX.Element;
|
|
2011
|
+
|
|
2012
|
+
interface VerifyPasskeyScreenProps {
|
|
2013
|
+
onVerify: () => void;
|
|
2014
|
+
onBack?: () => void;
|
|
2015
|
+
verifying: boolean;
|
|
1890
2016
|
error: string | null;
|
|
1891
|
-
|
|
2017
|
+
/** Override the default subtitle text (useful when rendering inside a popup). */
|
|
2018
|
+
subtitle?: string;
|
|
2019
|
+
}
|
|
2020
|
+
declare function VerifyPasskeyScreen({ onVerify, onBack, verifying, error, subtitle, }: VerifyPasskeyScreenProps): react_jsx_runtime.JSX.Element;
|
|
2021
|
+
|
|
2022
|
+
interface WalletPickerScreenProps {
|
|
2023
|
+
providers: Provider[];
|
|
2024
|
+
loading?: boolean;
|
|
2025
|
+
useDeeplink?: boolean;
|
|
2026
|
+
error?: string | null;
|
|
2027
|
+
preparedSessionsByProvider?: Record<string, PreparedSession>;
|
|
2028
|
+
preparingLinks?: boolean;
|
|
2029
|
+
directLinkCards?: boolean;
|
|
2030
|
+
onPrepareProvider: (providerId: string) => Promise<PreparedSession | null>;
|
|
2031
|
+
onSelectProvider: (providerId: string, preparedSession?: PreparedSession) => Promise<void>;
|
|
2032
|
+
onSelectWalletConnectWallet?: (wallet: ReownWallet) => Promise<void>;
|
|
2033
|
+
onBack?: () => void;
|
|
2034
|
+
onLogout?: () => void;
|
|
2035
|
+
isDesktop?: boolean;
|
|
2036
|
+
}
|
|
2037
|
+
declare function WalletPickerScreen({ providers, loading, useDeeplink, error, preparedSessionsByProvider, preparingLinks, directLinkCards, onPrepareProvider, onSelectProvider, onSelectWalletConnectWallet, onBack, onLogout, isDesktop, }: WalletPickerScreenProps): react_jsx_runtime.JSX.Element;
|
|
2038
|
+
|
|
2039
|
+
interface ManualTransferPasskeyScreenProps {
|
|
2040
|
+
onCreatePasskey: () => void;
|
|
2041
|
+
/** "No thanks" / close action — dismisses the modal. */
|
|
2042
|
+
onNoThanks: () => void;
|
|
2043
|
+
/** Delivered amount in USD, rendered as the "$X deposited" title. */
|
|
2044
|
+
amountUsd?: number;
|
|
2045
|
+
loading?: boolean;
|
|
2046
|
+
error?: string | null;
|
|
2047
|
+
onBack?: () => void;
|
|
2048
|
+
onClose?: () => void;
|
|
2049
|
+
}
|
|
2050
|
+
declare function ManualTransferPasskeyScreen({ onCreatePasskey, onNoThanks, amountUsd, loading, error, onBack, onClose, }: ManualTransferPasskeyScreenProps): react_jsx_runtime.JSX.Element;
|
|
2051
|
+
|
|
2052
|
+
/**
|
|
2053
|
+
* A single {token, chain} pair the user may pick as the deposit source on
|
|
2054
|
+
* the Setup / Deposit screens. Previously lived in `SetupScreen.tsx` but is
|
|
2055
|
+
* consumed by many unrelated modules (view-model builders, DepositScreen
|
|
2056
|
+
* dropdown, auth-app hooks), so it's hoisted here next to the helpers that
|
|
2057
|
+
* construct and match these options.
|
|
2058
|
+
*/
|
|
2059
|
+
interface SetupTokenOption {
|
|
2060
|
+
symbol: string;
|
|
2061
|
+
chainName: string;
|
|
2062
|
+
balance?: number;
|
|
2063
|
+
walletId?: string;
|
|
2064
|
+
status?: string;
|
|
2065
|
+
tokenAddress?: string;
|
|
2066
|
+
chainId?: number;
|
|
2067
|
+
/** Account this token belongs to; used by multi-account pickers to group rows. */
|
|
2068
|
+
accountId?: string;
|
|
1892
2069
|
/**
|
|
1893
|
-
*
|
|
1894
|
-
*
|
|
1895
|
-
*
|
|
1896
|
-
*
|
|
1897
|
-
*
|
|
2070
|
+
* Truncated wallet address (from `wallet.name`). One account may own wallets
|
|
2071
|
+
* at several distinct addresses (e.g. multiple Solana accounts under one
|
|
2072
|
+
* Phantom connection); multi-account pickers group rows by address so those
|
|
2073
|
+
* are not collapsed under a single header. EVM wallets share one address per
|
|
2074
|
+
* account, so this yields a single section there.
|
|
1898
2075
|
*/
|
|
1899
|
-
|
|
2076
|
+
walletAddress?: string;
|
|
2077
|
+
/** Server-provided token logo URI from the catalog. Preferred over the local `TOKEN_LOGOS` map. */
|
|
2078
|
+
logoURI?: string | null;
|
|
1900
2079
|
/**
|
|
1901
|
-
*
|
|
1902
|
-
*
|
|
1903
|
-
*
|
|
2080
|
+
* WalletConnect-typed account only: the Reown registry says the backing
|
|
2081
|
+
* wallet does not support this token's chain, so authorizing it would
|
|
2082
|
+
* dead-end (the prepare/authorize handlers' pre-filter rejects it).
|
|
2083
|
+
* Rendered as a disabled "Not supported, deposit manually" row. Never set
|
|
2084
|
+
* on AUTHORIZED rows — those deposit via passkey without the wallet.
|
|
1904
2085
|
*/
|
|
1905
|
-
|
|
1906
|
-
}
|
|
1907
|
-
interface UseTransferSigningOptions {
|
|
1908
|
-
/** Optional API base URL override when used outside BlinkProvider. */
|
|
1909
|
-
apiBaseUrl?: string;
|
|
1910
|
-
/** Optional access-token getter override (e.g. deeplink query token). */
|
|
1911
|
-
getAccessToken?: AccessTokenGetter;
|
|
1912
|
-
/** Optional authorization-session token for session-authenticated transfer signing. */
|
|
1913
|
-
authorizationSessionToken?: string;
|
|
2086
|
+
notSupported?: boolean;
|
|
1914
2087
|
}
|
|
1915
|
-
/**
|
|
1916
|
-
* Post-authorization transfer signing hook.
|
|
1917
|
-
*
|
|
1918
|
-
* After the auth session completes and the transfer reaches AUTHORIZED,
|
|
1919
|
-
* the backend prepares a signPayload containing the unsigned UserOp.
|
|
1920
|
-
* This hook polls for it, prompts the user's passkey via WebAuthn, and
|
|
1921
|
-
* submits the signed UserOp back to the API.
|
|
1922
|
-
*/
|
|
1923
|
-
declare function useTransferSigning(pollIntervalMs?: number, options?: UseTransferSigningOptions): UseTransferSigningResult;
|
|
1924
2088
|
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
*/
|
|
1930
|
-
/**
|
|
1931
|
-
* Returns short copy for passkey / biometric prompts based on the current environment.
|
|
1932
|
-
* Does not call WebAuthn (no async); suitable for direct use in render.
|
|
1933
|
-
*/
|
|
1934
|
-
declare function getDeviceBiometricUnlockText(): string;
|
|
2089
|
+
interface DepositCompleteScreenProps {
|
|
2090
|
+
amount: number;
|
|
2091
|
+
}
|
|
2092
|
+
declare function DepositCompleteScreen({ amount }: DepositCompleteScreenProps): react_jsx_runtime.JSX.Element;
|
|
1935
2093
|
|
|
1936
|
-
interface
|
|
1937
|
-
|
|
1938
|
-
/** Content pinned to the bottom of the screen (buttons, footer) */
|
|
1939
|
-
footer?: ReactNode;
|
|
2094
|
+
interface DepositScreenProps {
|
|
2095
|
+
merchantName?: string;
|
|
1940
2096
|
/**
|
|
1941
|
-
*
|
|
1942
|
-
*
|
|
1943
|
-
*
|
|
2097
|
+
* True while wallet balances are still loading (accounts loaded balance-free;
|
|
2098
|
+
* balances arrive via a separate call). Drives the source-pill / token-row
|
|
2099
|
+
* shimmer so the screen renders immediately instead of waiting on RPC.
|
|
1944
2100
|
*/
|
|
1945
|
-
|
|
2101
|
+
balancesLoading?: boolean;
|
|
2102
|
+
/** Total available balance from source */
|
|
2103
|
+
availableBalance: number;
|
|
2104
|
+
/** Remaining One-Tap allowance from the API, or null when not configured */
|
|
2105
|
+
remainingLimit: number | null;
|
|
2106
|
+
/** Number of tokens/chains available */
|
|
2107
|
+
tokenCount: number;
|
|
2108
|
+
/** Pre-populated amount */
|
|
2109
|
+
initialAmount: number;
|
|
2110
|
+
/** Pre-transfer fee estimate from POST /v1/transfers/quotes */
|
|
2111
|
+
quoteFee?: PreciseMoney | null;
|
|
2112
|
+
/** Whether a fee quote is being fetched */
|
|
2113
|
+
quoteLoading?: boolean;
|
|
2114
|
+
/** User-facing error when the fee quote fails (e.g. amount too low) */
|
|
2115
|
+
quoteError?: string | null;
|
|
2116
|
+
/** Whether the deposit is currently processing */
|
|
2117
|
+
processing?: boolean;
|
|
2118
|
+
error: string | null;
|
|
2119
|
+
onDeposit: (amount: number) => void;
|
|
2120
|
+
onSwitchWallet: () => void;
|
|
2121
|
+
onBack: () => void;
|
|
2122
|
+
onLogout: () => void;
|
|
2123
|
+
/** Called when the user taps "Increase Limit" to re-authorize via wallet deeplink */
|
|
2124
|
+
onIncreaseLimit?: () => void;
|
|
2125
|
+
/** Whether a limit-increase flow is currently in progress */
|
|
2126
|
+
increasingLimit?: boolean;
|
|
2127
|
+
/** All user accounts for the source dropdown */
|
|
2128
|
+
accounts?: Account[];
|
|
2129
|
+
/** Currently selected account ID */
|
|
2130
|
+
selectedAccountId?: string | null;
|
|
2131
|
+
/** Called when an active account is selected from the dropdown */
|
|
2132
|
+
onSelectAccount?: (accountId: string) => void;
|
|
2133
|
+
/** Called when an inactive account is clicked (to authorize it) */
|
|
2134
|
+
onAuthorizeAccount?: (accountId: string) => void;
|
|
2135
|
+
/** Called when "+ Add Provider" is clicked in the dropdown */
|
|
2136
|
+
onAddProvider?: () => void;
|
|
2137
|
+
/** Called when the "Send manually" action row is tapped from the inline source sheet. */
|
|
2138
|
+
onSendManually?: () => void;
|
|
2139
|
+
/** Fallback: navigate to the full-page token picker when no inline options. */
|
|
2140
|
+
onSelectToken?: () => void;
|
|
2141
|
+
/** Available tokens for the inline dropdown. When provided, the token badge opens a dropdown instead of navigating. */
|
|
2142
|
+
tokenOptions?: SetupTokenOption[];
|
|
2143
|
+
/** Called when the user picks a token from the inline dropdown. */
|
|
2144
|
+
onPickToken?: (symbol: string, chainName: string, walletId?: string) => void;
|
|
2145
|
+
/** Mobile-only: true when token authorization should be prepared before a real deeplink tap. */
|
|
2146
|
+
useDeeplink?: boolean;
|
|
2147
|
+
onPrepareTokenAuthorization?: (walletId: string, tokenAddress: string, chainId: number, tokenSymbol: string, accountId?: string) => Promise<PreparedTokenAuthorization | null>;
|
|
2148
|
+
onCommitTokenAuthorization?: (prepared: PreparedTokenAuthorization) => void;
|
|
2149
|
+
/** Token symbol for the selected source, e.g. "USDC" or "USDT" */
|
|
2150
|
+
selectedTokenSymbol?: string;
|
|
2151
|
+
/** Chain name for the selected source, used to disambiguate same-symbol tokens on different chains. */
|
|
2152
|
+
selectedChainName?: string;
|
|
2153
|
+
/** Server-provided token logo URI for the selected source. */
|
|
2154
|
+
selectedTokenLogoUri?: string | null;
|
|
2155
|
+
/** Server-provided chain logo URI for the selected source. */
|
|
2156
|
+
selectedChainLogoUri?: string | null;
|
|
2157
|
+
/** Wallet that owns the selected source. Required for the inline source sheet
|
|
2158
|
+
* to mark the active row when two wallets/accounts are authorized on the
|
|
2159
|
+
* same symbol+chain. */
|
|
2160
|
+
selectedWalletId?: string | null;
|
|
2161
|
+
/** Status of the currently selected token source (e.g. "AUTHORIZED"). When present and not "AUTHORIZED", the screen surfaces an "authorize in wallet" CTA + banner. */
|
|
2162
|
+
selectedTokenStatus?: string;
|
|
2163
|
+
/** Called when the user taps "Continue in {wallet}" to authorize the currently selected (non-authorized) token. */
|
|
2164
|
+
onAuthorizeSelectedToken?: () => void;
|
|
2165
|
+
/** Whether the authorize-token flow is currently in progress. */
|
|
2166
|
+
authorizingToken?: boolean;
|
|
1946
2167
|
/**
|
|
1947
|
-
*
|
|
1948
|
-
*
|
|
1949
|
-
*
|
|
1950
|
-
* bottom half, so the scroll content peeks through above the CTA while the
|
|
1951
|
-
* button itself sits on a solid base. Only the footer's own children are
|
|
1952
|
-
* interactive — the transparent gutter passes taps and scroll through to the
|
|
1953
|
-
* list below. Screens that opt in must reserve bottom padding in their scroll
|
|
1954
|
-
* container so the last row clears the floating footer. Defaults to false.
|
|
2168
|
+
* Minimum USD amount required for One-Tap on this screen. When the host sets
|
|
2169
|
+
* `depositAmount`, this should match it; otherwise the default floor ($0.25)
|
|
2170
|
+
* applies (see StepRenderer).
|
|
1955
2171
|
*/
|
|
1956
|
-
|
|
2172
|
+
minDepositFloor: number;
|
|
2173
|
+
/** Verbatim display value rendered after `$`, e.g. "0", "12.34", "12.". */
|
|
2174
|
+
amountEntryValue?: string;
|
|
2175
|
+
/** Digit keypress; `digit` is "0".."9". */
|
|
2176
|
+
onDigit?: (digit: string) => void;
|
|
2177
|
+
/** Decimal-point keypress. */
|
|
2178
|
+
onDecimal?: () => void;
|
|
2179
|
+
/** Backspace keypress. */
|
|
2180
|
+
onBackspace?: () => void;
|
|
2181
|
+
/** Whole-dollar preset chip tap. */
|
|
2182
|
+
onPreset?: (dollars: number) => void;
|
|
2183
|
+
/** Desktop path: raw native-input string (sanitized by the view-model). */
|
|
2184
|
+
onSetValue?: (raw: string) => void;
|
|
2185
|
+
/** Whole-dollar preset amounts. Defaults to [5, 25, 100, 250]. */
|
|
2186
|
+
presets?: number[];
|
|
1957
2187
|
/**
|
|
1958
|
-
* When true, the
|
|
1959
|
-
*
|
|
1960
|
-
*
|
|
2188
|
+
* When true, the entry-mode hero renders a native text input and the
|
|
2189
|
+
* on-screen keypad is never mounted. When false, the mobile keypad drives
|
|
2190
|
+
* input until the user dismisses it via Continue. Ignored when not in
|
|
2191
|
+
* entry mode.
|
|
1961
2192
|
*/
|
|
1962
|
-
|
|
2193
|
+
isDesktop?: boolean;
|
|
1963
2194
|
}
|
|
1964
|
-
declare function
|
|
2195
|
+
declare function DepositScreen({ balancesLoading, availableBalance, remainingLimit, initialAmount, minDepositFloor, quoteLoading, processing, error, onDeposit, onSwitchWallet, onBack, onLogout, onIncreaseLimit, increasingLimit, accounts, selectedAccountId, onSelectAccount: _onSelectAccount, onAuthorizeAccount: _onAuthorizeAccount, onAddProvider, onSendManually, onSelectToken, tokenOptions, onPickToken, useDeeplink, onPrepareTokenAuthorization, onCommitTokenAuthorization, selectedTokenSymbol, selectedChainName, selectedTokenLogoUri, selectedChainLogoUri, selectedWalletId, selectedTokenStatus, onAuthorizeSelectedToken, authorizingToken, amountEntryValue, onDigit, onDecimal, onBackspace, onPreset, onSetValue, presets, isDesktop, }: DepositScreenProps): react_jsx_runtime.JSX.Element;
|
|
1965
2196
|
|
|
1966
|
-
interface
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
* Left-aligned element rendered when `onBack` is absent (e.g. a brand
|
|
1975
|
-
* wordmark on the entry screen). Ignored when `onBack` is provided so the
|
|
1976
|
-
* back arrow always takes precedence.
|
|
1977
|
-
*/
|
|
1978
|
-
left?: ReactNode;
|
|
1979
|
-
/** Optional secondary label next to the title (e.g. "Simple") */
|
|
1980
|
-
badge?: string;
|
|
1981
|
-
/** When provided, renders the three-dot settings menu with a logout action in the right slot. */
|
|
2197
|
+
interface SuccessScreenProps {
|
|
2198
|
+
amount: number;
|
|
2199
|
+
currency: string;
|
|
2200
|
+
succeeded: boolean;
|
|
2201
|
+
error?: string | null;
|
|
2202
|
+
merchantName?: string;
|
|
2203
|
+
sourceName?: string;
|
|
2204
|
+
onDone?: () => void;
|
|
1982
2205
|
onLogout?: () => void;
|
|
1983
2206
|
/**
|
|
1984
|
-
*
|
|
1985
|
-
*
|
|
2207
|
+
* When set and no `onDone` handler is provided, renders an instructional
|
|
2208
|
+
* message in place of the primary action button. Used by mobile-hosted
|
|
2209
|
+
* flows (e.g. auth-app) where the user has no client-side action to take
|
|
2210
|
+
* and should simply return to the merchant app.
|
|
1986
2211
|
*/
|
|
1987
|
-
|
|
2212
|
+
returnMessage?: string;
|
|
1988
2213
|
}
|
|
1989
|
-
declare function
|
|
2214
|
+
declare function SuccessScreen({ amount, currency: _currency, succeeded, error, merchantName, sourceName, onDone, onLogout, returnMessage, }: SuccessScreenProps): react_jsx_runtime.JSX.Element;
|
|
1990
2215
|
|
|
1991
|
-
|
|
2216
|
+
interface ChainChoice$1 {
|
|
2217
|
+
chainName: string;
|
|
2218
|
+
balance: number;
|
|
2219
|
+
tokens: {
|
|
2220
|
+
tokenSymbol: string;
|
|
2221
|
+
balance: number;
|
|
2222
|
+
walletName?: string;
|
|
2223
|
+
walletLogoUrl?: string;
|
|
2224
|
+
logoURI?: string | null;
|
|
2225
|
+
}[];
|
|
2226
|
+
}
|
|
2227
|
+
interface SelectSourceScreenProps {
|
|
2228
|
+
choices: ChainChoice$1[];
|
|
2229
|
+
selectedChainName: string;
|
|
2230
|
+
selectedTokenSymbol: string;
|
|
2231
|
+
recommended: {
|
|
2232
|
+
chainName: string;
|
|
2233
|
+
tokenSymbol: string;
|
|
2234
|
+
} | null;
|
|
2235
|
+
onChainChange: (chainName: string) => void;
|
|
2236
|
+
onTokenChange: (tokenSymbol: string) => void;
|
|
2237
|
+
onConfirm: () => void;
|
|
2238
|
+
/** Primary footer button label (default: "Confirm source"). */
|
|
2239
|
+
confirmLabel?: string;
|
|
2240
|
+
onBack?: () => void;
|
|
2241
|
+
onLogout: () => void;
|
|
2242
|
+
}
|
|
2243
|
+
declare function SelectSourceScreen({ choices, selectedChainName, selectedTokenSymbol, recommended, onChainChange, onTokenChange, onConfirm, confirmLabel, onBack, onLogout, }: SelectSourceScreenProps): react_jsx_runtime.JSX.Element;
|
|
1992
2244
|
|
|
1993
|
-
interface
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2245
|
+
interface DepositSourceAccount {
|
|
2246
|
+
id: string;
|
|
2247
|
+
/** Provider / account name (e.g. "MetaMask"). Used to look up a logo via KNOWN_LOGOS. */
|
|
2248
|
+
name: string;
|
|
2249
|
+
/** Optional account display logo, e.g. the selected Reown wallet icon. */
|
|
2250
|
+
logoURI?: string;
|
|
2251
|
+
/** Full wallet address; a shortened suffix "...abcd" is shown on the right. */
|
|
2252
|
+
address?: string | null;
|
|
2253
|
+
}
|
|
2254
|
+
interface SelectDepositSourceScreenProps {
|
|
2255
|
+
/** All deposit-eligible accounts to display, grouped one per section. */
|
|
2256
|
+
accounts: DepositSourceAccount[];
|
|
2257
|
+
/** Currently selected account; when present, that account's group is rendered first. */
|
|
2258
|
+
selectedAccountId?: string | null;
|
|
2259
|
+
/** Tokens the user can pick from. Rows below the minimum deposit floor are filtered out.
|
|
2260
|
+
* Each row should carry `accountId` so it can be grouped under the owning account. */
|
|
2261
|
+
tokenOptions: SetupTokenOption[];
|
|
2262
|
+
selectedTokenSymbol?: string;
|
|
2263
|
+
selectedChainName?: string;
|
|
2012
2264
|
/**
|
|
2013
|
-
*
|
|
2014
|
-
*
|
|
2015
|
-
*
|
|
2016
|
-
* nothing to click.
|
|
2265
|
+
* True while wallet balances are still loading. When set and no token rows
|
|
2266
|
+
* are available yet, the sheet renders shimmer placeholder rows instead of
|
|
2267
|
+
* an empty list.
|
|
2017
2268
|
*/
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2269
|
+
balancesLoading?: boolean;
|
|
2270
|
+
/** Wallet that owns the currently active token source. Required (with
|
|
2271
|
+
* symbol + chain) for a row to be marked as the active selection so
|
|
2272
|
+
* that two wallets/accounts authorized on the same symbol+chain don't
|
|
2273
|
+
* both light up. */
|
|
2274
|
+
selectedWalletId?: string | null;
|
|
2275
|
+
/** Called when the user picks a token row. */
|
|
2276
|
+
onPickToken: (symbol: string, chainName: string, walletId?: string) => void;
|
|
2277
|
+
/** Mobile-only: unauthorized token rows prepare a real deeplink footer CTA instead of closing immediately. */
|
|
2278
|
+
useDeeplink?: boolean;
|
|
2279
|
+
onPrepareTokenAuthorization?: (walletId: string, tokenAddress: string, chainId: number, tokenSymbol: string, accountId?: string) => Promise<PreparedTokenAuthorization | null>;
|
|
2280
|
+
onCommitTokenAuthorization?: (prepared: PreparedTokenAuthorization) => void;
|
|
2029
2281
|
/**
|
|
2030
|
-
*
|
|
2031
|
-
*
|
|
2282
|
+
* "Link Wallet" action row at the bottom of the sheet. When provided, the
|
|
2283
|
+
* row appears in the recessed action pill and routes to the existing add-
|
|
2284
|
+
* provider flow. Hidden when not provided.
|
|
2032
2285
|
*/
|
|
2033
|
-
|
|
2286
|
+
onAddProvider?: () => void;
|
|
2287
|
+
/**
|
|
2288
|
+
* "Send manually" action row at the bottom of the sheet. When provided,
|
|
2289
|
+
* the row appears in the recessed action pill. Currently a no-op upstream
|
|
2290
|
+
* — placeholder for the manual-transfer entry point.
|
|
2291
|
+
*/
|
|
2292
|
+
onSendManually?: () => void;
|
|
2293
|
+
/** Header back navigation. Falls back to onDone when omitted. */
|
|
2294
|
+
onBack?: () => void;
|
|
2295
|
+
/** Primary "Done" CTA used to dismiss the sheet. */
|
|
2296
|
+
onDone: () => void;
|
|
2297
|
+
onLogout?: () => void;
|
|
2034
2298
|
}
|
|
2035
2299
|
/**
|
|
2036
|
-
*
|
|
2037
|
-
*
|
|
2038
|
-
*
|
|
2039
|
-
*
|
|
2040
|
-
*
|
|
2041
|
-
*
|
|
2042
|
-
* custom button. Outside a BlinkProvider it intentionally styles itself with
|
|
2043
|
-
* the default lightThemeNew palette; inside the widget it follows the
|
|
2044
|
-
* configured theme tokens.
|
|
2300
|
+
* Figma "Select source" bottom-sheet (node 320:28467). Replaces the Deposit
|
|
2301
|
+
* confirmation content when the user taps the token badge under the
|
|
2302
|
+
* lightNew theme. Renders one card per deposit-eligible account (header row
|
|
2303
|
+
* plus that account's authorized token sources), followed by a single
|
|
2304
|
+
* "Authorisation required" card with the requires-auth rows from every
|
|
2305
|
+
* account.
|
|
2045
2306
|
*/
|
|
2046
|
-
declare function
|
|
2047
|
-
|
|
2048
|
-
interface OutlineButtonProps {
|
|
2049
|
-
children: ReactNode;
|
|
2050
|
-
onClick?: () => void;
|
|
2051
|
-
disabled?: boolean;
|
|
2052
|
-
}
|
|
2053
|
-
declare function OutlineButton({ children, onClick, disabled }: OutlineButtonProps): react_jsx_runtime.JSX.Element;
|
|
2054
|
-
|
|
2055
|
-
interface SecondaryButtonProps {
|
|
2056
|
-
children: ReactNode;
|
|
2057
|
-
onClick?: (event: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => void;
|
|
2058
|
-
href?: string;
|
|
2059
|
-
target?: HTMLAttributeAnchorTarget;
|
|
2060
|
-
rel?: string;
|
|
2061
|
-
disabled?: boolean;
|
|
2062
|
-
loading?: boolean;
|
|
2063
|
-
loadingText?: string;
|
|
2064
|
-
}
|
|
2065
|
-
declare function SecondaryButton({ children, onClick, href, target, rel, disabled, loading, loadingText, }: SecondaryButtonProps): react_jsx_runtime.JSX.Element;
|
|
2307
|
+
declare function SelectDepositSourceScreen({ accounts, selectedAccountId, tokenOptions, selectedTokenSymbol, selectedChainName, balancesLoading, selectedWalletId, onPickToken, useDeeplink, onPrepareTokenAuthorization, onCommitTokenAuthorization, onAddProvider, onSendManually, onBack, onDone, onLogout, }: SelectDepositSourceScreenProps): react_jsx_runtime.JSX.Element;
|
|
2066
2308
|
|
|
2067
|
-
interface
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2309
|
+
interface ChainChoice {
|
|
2310
|
+
chainName: string;
|
|
2311
|
+
balance: number;
|
|
2312
|
+
tokens: {
|
|
2313
|
+
tokenSymbol: string;
|
|
2314
|
+
balance: number;
|
|
2315
|
+
}[];
|
|
2071
2316
|
}
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
size?: number;
|
|
2317
|
+
interface AdvancedSourceScreenProps {
|
|
2318
|
+
choices: ChainChoice[];
|
|
2319
|
+
selectedChainName: string;
|
|
2320
|
+
selectedTokenSymbol: string;
|
|
2321
|
+
onSelectSource: (chainName: string, tokenSymbol: string) => void;
|
|
2322
|
+
onBack: () => void;
|
|
2079
2323
|
}
|
|
2080
|
-
declare function
|
|
2324
|
+
declare function AdvancedSourceScreen({ choices, selectedChainName, selectedTokenSymbol, onSelectSource, onBack, }: AdvancedSourceScreenProps): react_jsx_runtime.JSX.Element;
|
|
2081
2325
|
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
}
|
|
2088
|
-
interface StepListProps {
|
|
2089
|
-
steps: StepItem[];
|
|
2326
|
+
type TransferPhase = 'creating' | 'signing' | 'submitting' | 'sent';
|
|
2327
|
+
interface TransferStatusBaseProps {
|
|
2328
|
+
phase: TransferPhase;
|
|
2329
|
+
error: string | null;
|
|
2330
|
+
onLogout?: () => void;
|
|
2090
2331
|
/**
|
|
2091
|
-
*
|
|
2092
|
-
*
|
|
2093
|
-
* - 'spinner': small animated arc in the accent color.
|
|
2332
|
+
* Optional retry hook. Setup flows wire this to `orchestrator.restart()`;
|
|
2333
|
+
* deposit flows wire it only after the first passkey signing attempt fails.
|
|
2094
2334
|
*/
|
|
2095
|
-
|
|
2335
|
+
onRetry?: () => void;
|
|
2336
|
+
retryLabel?: string;
|
|
2337
|
+
retryAfterDelay?: boolean;
|
|
2338
|
+
showRetryOnError?: boolean;
|
|
2096
2339
|
/**
|
|
2097
|
-
*
|
|
2098
|
-
*
|
|
2099
|
-
*
|
|
2100
|
-
*
|
|
2340
|
+
* Presentation of the error message. `error` (default) uses the red error
|
|
2341
|
+
* banner for genuine failures; `info` uses the neutral informational
|
|
2342
|
+
* NotificationBanner for benign, retryable conditions (e.g. an expired SVM
|
|
2343
|
+
* signing window).
|
|
2101
2344
|
*/
|
|
2102
|
-
|
|
2103
|
-
}
|
|
2104
|
-
declare function StepList({ steps, activeIndicator, size, }: StepListProps): react_jsx_runtime.JSX.Element;
|
|
2105
|
-
|
|
2106
|
-
interface SettingsMenuProps {
|
|
2107
|
-
onLogout: () => void;
|
|
2345
|
+
errorVariant?: 'error' | 'info';
|
|
2108
2346
|
}
|
|
2109
|
-
declare function SettingsMenu({ onLogout }: SettingsMenuProps): react_jsx_runtime.JSX.Element;
|
|
2110
2347
|
|
|
2111
|
-
interface
|
|
2112
|
-
|
|
2113
|
-
label?: string;
|
|
2348
|
+
interface DepositTransferStatusScreenProps extends TransferStatusBaseProps {
|
|
2349
|
+
visibleError?: string | null;
|
|
2114
2350
|
}
|
|
2115
|
-
declare function
|
|
2116
|
-
|
|
2117
|
-
declare function BlinkLoadingScreen(): react_jsx_runtime.JSX.Element;
|
|
2118
|
-
declare function BlinkInitialLoadingScreen(): react_jsx_runtime.JSX.Element;
|
|
2351
|
+
declare function DepositTransferStatusScreen({ phase, error, visibleError, errorVariant, onLogout, onRetry, }: DepositTransferStatusScreenProps): react_jsx_runtime.JSX.Element;
|
|
2119
2352
|
|
|
2120
|
-
interface
|
|
2121
|
-
|
|
2122
|
-
|
|
2353
|
+
interface OpenWalletScreenProps {
|
|
2354
|
+
walletName: string | null;
|
|
2355
|
+
deeplinkUri: string;
|
|
2123
2356
|
loading: boolean;
|
|
2124
|
-
|
|
2357
|
+
/** When true (mobile), auto-opens deeplinks and shows the "Continue in wallet" button.
|
|
2358
|
+
* When false (desktop), shows inline authorization progress instead. */
|
|
2359
|
+
useDeeplink?: boolean;
|
|
2360
|
+
error?: string | null;
|
|
2361
|
+
walletLogoUrl?: string;
|
|
2362
|
+
onRetryStatus?: () => void;
|
|
2363
|
+
/** Soft-retry the orchestrator (calls `orchestrator.restart()`). Desktop only —
|
|
2364
|
+
* shown alongside the error banner when set so the user can recover from a
|
|
2365
|
+
* dismissed wallet popup without reloading the iframe. */
|
|
2366
|
+
onRetryAuthorization?: () => void;
|
|
2125
2367
|
onBack?: () => void;
|
|
2126
|
-
|
|
2127
|
-
onClose?: () => void;
|
|
2128
|
-
merchantInitials?: string;
|
|
2129
|
-
/** Overrides the default marketing heading when set (e.g. passkey popup copy). When set, the passkey info card is suppressed. */
|
|
2130
|
-
heroTitle?: string;
|
|
2131
|
-
/** Optional line shown under the heading. Reserved for callers that override `heroTitle`. */
|
|
2132
|
-
heroSubtitle?: string;
|
|
2133
|
-
/** When true, primary action is signup and secondary is sign-in. */
|
|
2134
|
-
preferSignup?: boolean;
|
|
2135
|
-
}
|
|
2136
|
-
declare function LoginScreen({ onLoginWithPasskey, onSignupWithPasskey, loading, error, onBack, onClose, merchantInitials, heroTitle, heroSubtitle, preferSignup, }: LoginScreenProps): react_jsx_runtime.JSX.Element;
|
|
2137
|
-
|
|
2138
|
-
interface DepositOptionsScreenProps {
|
|
2139
|
-
/** Recessed "Send Crypto Manually" row. Navigates to the manual-transfer flow. */
|
|
2140
|
-
onToAddress: () => void;
|
|
2141
|
-
/**
|
|
2142
|
-
* Primary "Deposit stablecoins" CTA. Routes to the login screen (wired to
|
|
2143
|
-
* handlers.onLogin) rather than prompting for a passkey directly, mirroring how
|
|
2144
|
-
* the connect-wallet entry point defers credential selection to LoginScreen.
|
|
2145
|
-
*/
|
|
2146
|
-
onSignInWithBlink: () => void;
|
|
2147
|
-
/** Dismiss the widget. When set, renders a round (X) close button in the top-right. */
|
|
2148
|
-
onClose?: () => void;
|
|
2368
|
+
onLogout?: () => void;
|
|
2149
2369
|
}
|
|
2150
2370
|
/**
|
|
2151
|
-
*
|
|
2152
|
-
*
|
|
2153
|
-
*
|
|
2154
|
-
* (BlinkDepositButton), an OR divider, and a recessed "Send Crypto Manually"
|
|
2155
|
-
* row that routes to the manual-transfer flow.
|
|
2371
|
+
* Wallet authorization screen. On mobile, provides a user-tappable button
|
|
2372
|
+
* that triggers the deeplink via window.open. On desktop, shows inline
|
|
2373
|
+
* authorization progress while wallet extension popups handle the flow.
|
|
2156
2374
|
*/
|
|
2157
|
-
declare function
|
|
2375
|
+
declare function OpenWalletScreen({ walletName, deeplinkUri, loading, walletLogoUrl, useDeeplink, error, onRetryStatus, onRetryAuthorization, onBack, onLogout, }: OpenWalletScreenProps): react_jsx_runtime.JSX.Element;
|
|
2158
2376
|
|
|
2159
|
-
interface
|
|
2160
|
-
|
|
2161
|
-
|
|
2377
|
+
interface ApprovingInWalletScreenProps {
|
|
2378
|
+
tokenSymbol: string | null;
|
|
2379
|
+
chainName: string | null;
|
|
2380
|
+
/** Which authorization step the wallet is signing now. Drives the checklist:
|
|
2381
|
+
* 'approve' = on-chain Permit2 approval in progress (step 1 active);
|
|
2382
|
+
* 'sign' = approval done (this session or previously) → step 1 checked, step 2 active;
|
|
2383
|
+
* 'spl' = single Solana delegate approval (one item). */
|
|
2384
|
+
step: 'approve' | 'sign' | 'spl';
|
|
2385
|
+
/** When true, every checklist item renders complete (checked). Set during the
|
|
2386
|
+
* post-sign settling window so the checkmarks persist until the next screen
|
|
2387
|
+
* loads, rather than reverting to the active/pending default. `step` still
|
|
2388
|
+
* selects the shape (one SPL item vs. two EVM items). */
|
|
2389
|
+
complete?: boolean;
|
|
2390
|
+
/** True only while the wallet is genuinely signing the current action. Drives
|
|
2391
|
+
* the active-step spinner. False during the pre-signing transients (pairing
|
|
2392
|
+
* hand-off, awaiting the Approve tap) so the checklist stays at empty
|
|
2393
|
+
* pending circles instead of briefly flashing a spinner. */
|
|
2394
|
+
signing?: boolean;
|
|
2395
|
+
/** Lifetime spending limit label shown on the "{token} on {chain}" row in
|
|
2396
|
+
* place of the wallet address — "Unlimited", or "$<amount> lifetime spending
|
|
2397
|
+
* limit" for a capped allowance. Null renders the row title only. */
|
|
2398
|
+
spendingLimitLabel?: string | null;
|
|
2399
|
+
/** Deployed Blink smart-account address (EVM) or swig/delegate pubkey (Solana)
|
|
2400
|
+
* shown on the "Your Blink Passkey" row. Null until the signing metadata
|
|
2401
|
+
* resolves — the row then renders the label only, never a placeholder value. */
|
|
2402
|
+
destinationAddress?: string | null;
|
|
2403
|
+
/** Server-provided token logo URI for the source row's logo circle. */
|
|
2404
|
+
tokenLogoUri?: string | null;
|
|
2405
|
+
/** When true, signing has not been initiated yet: show the "Approve" CTA and
|
|
2406
|
+
* fire `onApprove` on click instead of auto-prompting the wallet. */
|
|
2407
|
+
awaitingApproval?: boolean;
|
|
2408
|
+
/** Fires when the user taps "Approve" to start the signing sequence. */
|
|
2409
|
+
onApprove?: () => void;
|
|
2410
|
+
error?: string | null;
|
|
2411
|
+
onRetry?: () => void;
|
|
2412
|
+
/** Desktop-only escape hatch back to the previous screen. */
|
|
2413
|
+
onBack?: () => void;
|
|
2414
|
+
/** Desktop-only settings/logout action. */
|
|
2415
|
+
onLogout?: () => void;
|
|
2416
|
+
/** Mobile WalletConnect: connected wallet name, for the "Open {wallet}" button. */
|
|
2417
|
+
walletName?: string | null;
|
|
2162
2418
|
/**
|
|
2163
|
-
*
|
|
2164
|
-
* wallet
|
|
2419
|
+
* Mobile WalletConnect: bare wallet deeplink (no `wc:` URI) for the manual
|
|
2420
|
+
* "Open {wallet}" button. Foregrounds the already-connected wallet so the
|
|
2421
|
+
* pending signing prompt surfaces — does NOT re-pair. Absent on desktop.
|
|
2165
2422
|
*/
|
|
2166
|
-
|
|
2167
|
-
/**
|
|
2168
|
-
|
|
2423
|
+
foregroundDeeplink?: string | null;
|
|
2424
|
+
/** Fires when the user taps "Open {wallet}" (opens `foregroundDeeplink`). */
|
|
2425
|
+
onOpenWallet?: () => void;
|
|
2169
2426
|
}
|
|
2170
2427
|
/**
|
|
2171
|
-
*
|
|
2172
|
-
*
|
|
2173
|
-
*
|
|
2174
|
-
*
|
|
2175
|
-
*
|
|
2428
|
+
* Activation surface rendered while the user authorizes the Permit2 / SPL
|
|
2429
|
+
* spending in their wallet. NOT a payment screen — no money moves here. Shows
|
|
2430
|
+
* the source wallet → Blink passkey hand-off and a checklist of the signatures
|
|
2431
|
+
* being collected. Signing is user-initiated via the "Approve" button (it does
|
|
2432
|
+
* not auto-prompt) so the user reviews the source/destination first.
|
|
2176
2433
|
*/
|
|
2177
|
-
declare function
|
|
2434
|
+
declare function ApprovingInWalletScreen({ tokenSymbol, chainName, step, complete, signing, spendingLimitLabel, destinationAddress, tokenLogoUri, awaitingApproval, onApprove, error, onRetry, onBack, onLogout, walletName, foregroundDeeplink, onOpenWallet, }: ApprovingInWalletScreenProps): react_jsx_runtime.JSX.Element;
|
|
2178
2435
|
|
|
2179
|
-
interface
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
onRetry?: () => void;
|
|
2187
|
-
/** When set, renders the round (X) close button in the header right slot. */
|
|
2188
|
-
onClose?: () => void;
|
|
2436
|
+
interface ConfirmSignScreenProps {
|
|
2437
|
+
walletName: string | null;
|
|
2438
|
+
chainFamily?: 'evm' | 'svm' | null;
|
|
2439
|
+
signing: boolean;
|
|
2440
|
+
error: string | null;
|
|
2441
|
+
onSign: () => void;
|
|
2442
|
+
onLogout: () => void;
|
|
2189
2443
|
}
|
|
2190
2444
|
/**
|
|
2191
|
-
*
|
|
2192
|
-
*
|
|
2193
|
-
* illustration above a title + optional message, with an optional Try Again
|
|
2194
|
-
* CTA pinned to the footer and an optional close (X) button in the header.
|
|
2445
|
+
* Shown after the user returns from wallet authorization. Requires an explicit
|
|
2446
|
+
* button tap to initiate passkey signing (FaceID) rather than auto-triggering.
|
|
2195
2447
|
*/
|
|
2196
|
-
declare function
|
|
2448
|
+
declare function ConfirmSignScreen({ walletName, chainFamily, signing, error, onSign, onLogout, }: ConfirmSignScreenProps): react_jsx_runtime.JSX.Element;
|
|
2197
2449
|
|
|
2198
|
-
interface
|
|
2199
|
-
/**
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2450
|
+
interface TokenPickerScreenProps {
|
|
2451
|
+
/**
|
|
2452
|
+
* The currently-selected linked account. May be `undefined` when the
|
|
2453
|
+
* previously-selected account has been removed from state (e.g. after
|
|
2454
|
+
* an account refresh). When undefined the screen renders a clear empty
|
|
2455
|
+
* state instead of crashing on `account.wallets`.
|
|
2456
|
+
*/
|
|
2457
|
+
account: Account | undefined;
|
|
2458
|
+
chains: Array<{
|
|
2459
|
+
id: string;
|
|
2460
|
+
name: string;
|
|
2461
|
+
commonId: number | null;
|
|
2462
|
+
}>;
|
|
2463
|
+
onSelectAuthorized: (walletId: string, tokenSymbol: string) => void;
|
|
2464
|
+
onAuthorizeToken: (walletId: string, tokenAddress: string, chainId: number, tokenSymbol: string) => void;
|
|
2205
2465
|
onBack: () => void;
|
|
2206
|
-
verifying: boolean;
|
|
2207
|
-
error: string | null;
|
|
2208
|
-
}
|
|
2209
|
-
declare function OtpVerifyScreen({ maskedIdentifier, otpCode, onOtpChange, onVerify, onResend, onBack, verifying, error, }: OtpVerifyScreenProps): react_jsx_runtime.JSX.Element;
|
|
2210
|
-
|
|
2211
|
-
interface PasskeyScreenProps {
|
|
2212
|
-
onCreatePasskey: () => void;
|
|
2213
|
-
onBack?: () => void;
|
|
2214
2466
|
onLogout?: () => void;
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
/**
|
|
2218
|
-
|
|
2219
|
-
/**
|
|
2220
|
-
|
|
2221
|
-
/** Creates a brand-new passkey on this device (for users who already have one on another device). */
|
|
2222
|
-
onCreateNewPasskey?: () => void;
|
|
2223
|
-
/** Popup fallback variant of onCreateNewPasskey. */
|
|
2224
|
-
onCreateNewPasskeyViaPopup?: () => void;
|
|
2225
|
-
/** When set, overrides `popupFallback` for the create-new link only. */
|
|
2226
|
-
createNewPopupFallback?: boolean;
|
|
2227
|
-
/** Loading state while a new passkey is being created. */
|
|
2228
|
-
creatingNewPasskey?: boolean;
|
|
2467
|
+
/** Deposit amount for the context card at top */
|
|
2468
|
+
depositAmount?: number;
|
|
2469
|
+
/** Currently selected token symbol, e.g. "USDC" or "USDT" */
|
|
2470
|
+
selectedTokenSymbol?: string;
|
|
2471
|
+
/** Currently selected wallet ID so we can identify the active token across chains */
|
|
2472
|
+
selectedWalletId?: string;
|
|
2229
2473
|
}
|
|
2230
|
-
declare function
|
|
2474
|
+
declare function TokenPickerScreen({ account, chains, onSelectAuthorized, onAuthorizeToken, onBack, onLogout, depositAmount, selectedTokenSymbol, selectedWalletId, }: TokenPickerScreenProps): react_jsx_runtime.JSX.Element;
|
|
2231
2475
|
|
|
2232
|
-
interface
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
error?: string | null;
|
|
2241
|
-
onBack?: () => void;
|
|
2242
|
-
onLogout?: () => void;
|
|
2476
|
+
interface GuestTokenPickerRawRow {
|
|
2477
|
+
chainId: string;
|
|
2478
|
+
sourceChainId: number;
|
|
2479
|
+
chainName: string;
|
|
2480
|
+
tokenSymbol: string;
|
|
2481
|
+
tokenAddress: string;
|
|
2482
|
+
decimals: number;
|
|
2483
|
+
rawBalance: string;
|
|
2243
2484
|
}
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2485
|
+
interface GuestTokenEntry extends GuestTokenPickerRawRow {
|
|
2486
|
+
/** Human-readable token amount (not USD). */
|
|
2487
|
+
formattedBalance: string;
|
|
2488
|
+
}
|
|
2489
|
+
declare function mapGuestPickerEntries(rows: GuestTokenPickerRawRow[]): GuestTokenEntry[];
|
|
2490
|
+
interface GuestTokenPickerScreenProps {
|
|
2491
|
+
entries: GuestTokenEntry[];
|
|
2492
|
+
loading: boolean;
|
|
2493
|
+
bridgePhase?: 'preparing';
|
|
2250
2494
|
error: string | null;
|
|
2251
|
-
|
|
2252
|
-
|
|
2495
|
+
pendingEntry: GuestTokenEntry | null;
|
|
2496
|
+
quoteFee: unknown;
|
|
2497
|
+
quoteLoading: boolean;
|
|
2498
|
+
onSelect: (entry: GuestTokenEntry) => void;
|
|
2499
|
+
onConfirm: () => void;
|
|
2500
|
+
onBack: () => void;
|
|
2501
|
+
oneTapEnabled: boolean;
|
|
2502
|
+
onToggleOneTap: (enabled: boolean) => void;
|
|
2503
|
+
oneTapLimit: number;
|
|
2504
|
+
onSetOneTapLimit: (limit: number) => void;
|
|
2505
|
+
variant?: 'auth-setup';
|
|
2506
|
+
closeListOnSelect?: boolean;
|
|
2507
|
+
emptyMessage?: string;
|
|
2253
2508
|
}
|
|
2254
|
-
declare function
|
|
2509
|
+
declare function GuestTokenPickerScreen({ entries, loading, bridgePhase, error, pendingEntry, onSelect, onConfirm, onBack, oneTapEnabled, onToggleOneTap, oneTapLimit, onSetOneTapLimit, variant, closeListOnSelect, emptyMessage, }: GuestTokenPickerScreenProps): react_jsx_runtime.JSX.Element;
|
|
2255
2510
|
|
|
2256
|
-
interface
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
useDeeplink?: boolean;
|
|
2260
|
-
error?: string | null;
|
|
2261
|
-
preparedSessionsByProvider?: Record<string, PreparedSession>;
|
|
2262
|
-
preparingLinks?: boolean;
|
|
2263
|
-
directLinkCards?: boolean;
|
|
2511
|
+
interface StepHandlers {
|
|
2512
|
+
onLoginWithPasskey: () => void;
|
|
2513
|
+
onSignupWithPasskey: () => void;
|
|
2264
2514
|
onPrepareProvider: (providerId: string) => Promise<PreparedSession | null>;
|
|
2265
2515
|
onSelectProvider: (providerId: string, preparedSession?: PreparedSession) => Promise<void>;
|
|
2266
2516
|
onSelectWalletConnectWallet?: (wallet: ReownWallet) => Promise<void>;
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2517
|
+
onContinueConnection: (accountId: string) => void;
|
|
2518
|
+
onSelectAccount: (accountId: string) => void;
|
|
2519
|
+
onPay: (amount: number, overrides?: {
|
|
2520
|
+
sourceType: SourceType;
|
|
2521
|
+
sourceId: string;
|
|
2522
|
+
}) => void;
|
|
2523
|
+
onIncreaseLimit: () => void;
|
|
2524
|
+
onConfirmSign: () => void;
|
|
2525
|
+
onRetryMobileStatus: () => void;
|
|
2526
|
+
/** Soft-retry the orchestrator (calls `orchestrator.restart()`) without reloading the page. */
|
|
2527
|
+
onRetryAuthorization: () => void;
|
|
2528
|
+
/** Release the signing action paused on ApprovingInWalletScreen (user tapped "Approve"). */
|
|
2529
|
+
onApprove: () => void;
|
|
2530
|
+
/** Re-run passkey signing for an already-created, signable transfer. */
|
|
2531
|
+
onRetryTransferSigning: () => void;
|
|
2532
|
+
onBackFromOpenWallet: () => void;
|
|
2533
|
+
onLogout: () => void;
|
|
2534
|
+
onNewPayment: () => void;
|
|
2535
|
+
onSetPhase: (phase: PaymentPhase) => void;
|
|
2536
|
+
onSelectSourceChainChange: (chainName: string) => void;
|
|
2537
|
+
onSetSelectSourceTokenSymbol: (symbol: string) => void;
|
|
2538
|
+
onConfirmSelectSource: () => void;
|
|
2539
|
+
onSelectToken: () => void;
|
|
2540
|
+
onSelectAuthorizedToken: (walletId: string, tokenSymbol: string, accountId?: string) => void;
|
|
2541
|
+
onAuthorizeToken: (walletId: string, tokenAddress: string, chainId: number, tokenSymbol: string, accountId?: string) => void;
|
|
2542
|
+
onPrepareTokenAuthorization: (walletId: string, tokenAddress: string, chainId: number, tokenSymbol: string, accountId?: string) => Promise<PreparedTokenAuthorization | null>;
|
|
2543
|
+
onCommitTokenAuthorization: (prepared: PreparedTokenAuthorization) => void;
|
|
2544
|
+
/** Navigate to wallet-picker when adding a new account from the deposit screen. */
|
|
2545
|
+
onAddProviderFromDeposit: () => void;
|
|
2546
|
+
/**
|
|
2547
|
+
* Tapped from the "Send manually" action row in the inline source sheet.
|
|
2548
|
+
* Currently a no-op placeholder; reserved for the manual-transfer entry point.
|
|
2549
|
+
*/
|
|
2550
|
+
onSendManually: () => void;
|
|
2551
|
+
/** Leave desktop link-tokens back to wallet selection, cancelling the paused auth run. */
|
|
2552
|
+
onBackFromSetupDeposit: () => void;
|
|
2553
|
+
/** Leave funding subflow (setup / token picker) back to deposit: restore selection, cancel executor. */
|
|
2554
|
+
onBackFromSubflow: () => void;
|
|
2555
|
+
onLogin: () => void;
|
|
2556
|
+
onCancelLogin: () => void;
|
|
2557
|
+
/** Advance a returning user off WelcomeBackScreen toward the wallet picker. */
|
|
2558
|
+
onAcknowledgeWelcomeBack: () => void;
|
|
2559
|
+
/** Back from WalletPickerScreen: return a walletless user to WelcomeBackScreen. */
|
|
2560
|
+
onReturnToWelcomeBack: () => void;
|
|
2561
|
+
/**
|
|
2562
|
+
* Update the in-flow amount-entry value (string display). Called by
|
|
2563
|
+
* DepositScreen entry mode on every keypress / preset tap. The view-model
|
|
2564
|
+
* wires pure helpers (`enterAmountInput.ts`) into this handler so the
|
|
2565
|
+
* component itself stays presentational.
|
|
2566
|
+
*/
|
|
2567
|
+
onAmountInput: (value: string) => void;
|
|
2568
|
+
/**
|
|
2569
|
+
* Commit the in-flow amount-entry value and clear `requireAmountEntry`.
|
|
2570
|
+
* Routes the user past entry mode back into the normal deposit flow.
|
|
2571
|
+
*/
|
|
2572
|
+
onFinalizeAmount: () => void;
|
|
2573
|
+
onSetDepositToken: (symbol: string, chainName: string, walletId?: string, tokenAddress?: string, chainId?: number) => void;
|
|
2574
|
+
onConfirmSetupDeposit: (limit: SpendingLimitSelection) => void | Promise<void>;
|
|
2575
|
+
/**
|
|
2576
|
+
* Mobile only: foreground the already-connected WalletConnect wallet from the
|
|
2577
|
+
* signing screen's manual "Open {wallet}" button. Opens the bare wallet
|
|
2578
|
+
* deeplink (no `wc:` URI) so the pending Permit2 prompt surfaces without
|
|
2579
|
+
* re-pairing. Undefined on desktop / when no foreground link is available.
|
|
2580
|
+
*/
|
|
2581
|
+
onOpenWalletForeground?: () => void;
|
|
2270
2582
|
}
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
/**
|
|
2278
|
-
|
|
2279
|
-
|
|
2280
|
-
|
|
2583
|
+
/** Flow identity: reducer state, auth, layout. */
|
|
2584
|
+
interface StepRendererFlowProps {
|
|
2585
|
+
state: PaymentState;
|
|
2586
|
+
authenticated: boolean;
|
|
2587
|
+
passkeyLoading: boolean;
|
|
2588
|
+
isDesktop: boolean;
|
|
2589
|
+
/**
|
|
2590
|
+
* True when the SDK is hosted inside a native mobile app's in-app browser.
|
|
2591
|
+
* Suppresses in-screen (X) close buttons (the host's native chrome handles
|
|
2592
|
+
* dismissal) and removes rounded screen corners. Optional for backwards
|
|
2593
|
+
* compatibility with pre-existing test fixtures; treated as `false` when
|
|
2594
|
+
* absent.
|
|
2595
|
+
*/
|
|
2596
|
+
isMobileApp?: boolean;
|
|
2597
|
+
merchantName?: string;
|
|
2281
2598
|
onBack?: () => void;
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
/**
|
|
2287
|
-
* A single {token, chain} pair the user may pick as the deposit source on
|
|
2288
|
-
* the Setup / Deposit screens. Previously lived in `SetupScreen.tsx` but is
|
|
2289
|
-
* consumed by many unrelated modules (view-model builders, DepositScreen
|
|
2290
|
-
* dropdown, auth-app hooks), so it's hoisted here next to the helpers that
|
|
2291
|
-
* construct and match these options.
|
|
2292
|
-
*/
|
|
2293
|
-
interface SetupTokenOption {
|
|
2294
|
-
symbol: string;
|
|
2295
|
-
chainName: string;
|
|
2296
|
-
balance?: number;
|
|
2297
|
-
walletId?: string;
|
|
2298
|
-
status?: string;
|
|
2299
|
-
tokenAddress?: string;
|
|
2300
|
-
chainId?: number;
|
|
2301
|
-
/** Account this token belongs to; used by multi-account pickers to group rows. */
|
|
2302
|
-
accountId?: string;
|
|
2599
|
+
onDismiss?: () => void;
|
|
2600
|
+
/** Merchant-fixed depositAmount, or `null` for the hosted entry-mode flow. */
|
|
2601
|
+
depositAmount: number | null;
|
|
2303
2602
|
/**
|
|
2304
|
-
*
|
|
2305
|
-
*
|
|
2306
|
-
*
|
|
2307
|
-
*
|
|
2308
|
-
*
|
|
2603
|
+
* Effective deposit amount = `parseAmount(state.amount) ?? depositAmount`.
|
|
2604
|
+
* View models should read this for display so the user's typed value from
|
|
2605
|
+
* deposit-screen entry mode propagates through `deposit`, `link-tokens`,
|
|
2606
|
+
* `processing`, and `token-picker` screens. `depositAmount` is retained
|
|
2607
|
+
* separately for "did the merchant fix this?" semantics (e.g.
|
|
2608
|
+
* `AmountTooLowScreen.canRetry`).
|
|
2309
2609
|
*/
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
|
|
2610
|
+
effectiveDepositAmount: number | null;
|
|
2611
|
+
minTransferAmountUsd: number;
|
|
2612
|
+
/** Needed to render ManualTransferFlow when phase is manual-transfer. */
|
|
2613
|
+
destination: Destination;
|
|
2614
|
+
merchantAuthorization?: CreateManualTransferParams['merchantAuthorization'];
|
|
2615
|
+
idempotencyKey?: string;
|
|
2616
|
+
/** Host-level completion callback, forwarded to ManualTransferFlow. */
|
|
2617
|
+
onComplete?: (transfer: Transfer) => void;
|
|
2618
|
+
/** Host-level error callback, forwarded to ManualTransferFlow. */
|
|
2619
|
+
onError?: (error: string) => void;
|
|
2620
|
+
}
|
|
2621
|
+
/** Polling, signing, and auth-executor surface. */
|
|
2622
|
+
interface StepRendererRemoteProps {
|
|
2623
|
+
pollingTransfer: Transfer | null;
|
|
2624
|
+
pollingError: string | null;
|
|
2625
|
+
authExecutorError: string | null;
|
|
2626
|
+
/** True while `executeSessionById` is running (desktop inline wallet steps). */
|
|
2627
|
+
authExecutorExecuting: boolean;
|
|
2628
|
+
authExecutorCurrentAction?: AuthorizationAction | null;
|
|
2629
|
+
/** True while a signing action is paused waiting for the user to tap "Approve". */
|
|
2630
|
+
authExecutorAwaitingApproval?: boolean;
|
|
2631
|
+
/** Destination (deployed smart account / swig pubkey) for the paused signing action. */
|
|
2632
|
+
authExecutorApprovalDestinationAddress?: string | null;
|
|
2633
|
+
/** Live session-level smart-account ("Your Blink Passkey") address for the
|
|
2634
|
+
* in-flight approval, mirrored from the tracked session so the approval screen
|
|
2635
|
+
* renders it as soon as the backend surfaces it (created at token selection)
|
|
2636
|
+
* rather than only at the gate. Always the selected chain's address; null
|
|
2637
|
+
* until reported. EVM only. */
|
|
2638
|
+
authApprovalSmartAccountAddress?: string | null;
|
|
2639
|
+
/** True once a run has drained all authorization actions (orchestrator
|
|
2640
|
+
* completed). Stays true through the post-sign settling window — when
|
|
2641
|
+
* `currentAction` is already null — until the next run resets it. Lets the
|
|
2642
|
+
* approving checklist render all items complete instead of reverting to the
|
|
2643
|
+
* default active state while the next screen loads. */
|
|
2644
|
+
authExecutorCompleted: boolean;
|
|
2645
|
+
transferSigningSigning: boolean;
|
|
2646
|
+
transferSigningError: string | null;
|
|
2647
|
+
transferSigningPasskeyDismissed?: boolean;
|
|
2648
|
+
pendingSelectSource: AuthorizationAction | null;
|
|
2313
2649
|
/**
|
|
2314
|
-
*
|
|
2315
|
-
*
|
|
2316
|
-
*
|
|
2317
|
-
*
|
|
2318
|
-
*
|
|
2650
|
+
* True once the user interactively resolved a SELECT_SOURCE this run (picked
|
|
2651
|
+
* a token on LinkTokensScreen and tapped Approve). Distinguishes the
|
|
2652
|
+
* post-Approve transient — where the executor's `currentAction` is still the
|
|
2653
|
+
* stale OPEN_PROVIDER from pairing — from genuine pairing, so OpenWalletScreen
|
|
2654
|
+
* is not re-shown after Approve. False during WC reauthorization auto-resolve
|
|
2655
|
+
* pairing, which keeps OpenWalletScreen visible until the wallet pairs.
|
|
2319
2656
|
*/
|
|
2320
|
-
|
|
2657
|
+
sourceSelectionResolved: boolean;
|
|
2321
2658
|
}
|
|
2322
|
-
|
|
2323
|
-
interface
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2659
|
+
/** Values derived from accounts / selection (plus select-source picker data). */
|
|
2660
|
+
interface StepRendererDerivedProps {
|
|
2661
|
+
pendingConnections: Account[];
|
|
2662
|
+
depositEligibleAccounts: Account[];
|
|
2663
|
+
sourceName: string;
|
|
2664
|
+
maxSourceBalance: number;
|
|
2665
|
+
tokenCount: number;
|
|
2666
|
+
selectedAccount: Account | undefined;
|
|
2667
|
+
selectedSource: WalletSource | null;
|
|
2668
|
+
selectSourceChoices: SelectSourceChainChoice[];
|
|
2669
|
+
/** Balances on chains the WalletConnect session did not approve — rendered as disabled "Not supported" rows. */
|
|
2670
|
+
selectSourceUnsupportedChoices: SelectSourceChainChoice[];
|
|
2671
|
+
/** Native gas assets (ETH, MON, SOL, …) the wallet holds but Permit2 can't authorize — disabled "Not supported" rows. */
|
|
2672
|
+
selectSourceNativeChoices: NativeUnsupportedEntry[];
|
|
2673
|
+
selectSourceRecommended: {
|
|
2674
|
+
chainName: string;
|
|
2675
|
+
tokenSymbol: string;
|
|
2676
|
+
} | null;
|
|
2677
|
+
selectSourceAvailableBalance: number;
|
|
2327
2678
|
/**
|
|
2328
|
-
*
|
|
2329
|
-
*
|
|
2330
|
-
*
|
|
2331
|
-
* the row unselectable.
|
|
2332
|
-
*
|
|
2333
|
-
* Also set for native gas assets (ETH, MON, SOL, …) that Permit2 / SPL
|
|
2334
|
-
* delegate cannot authorize — see `balanceLabel` / `tokenLogoUri` below.
|
|
2679
|
+
* Reown registry chain ids per WalletConnect-typed account id (null =
|
|
2680
|
+
* registry has no opinion, fail open). Used to badge requires-auth deposit
|
|
2681
|
+
* sources on chains the backing wallet cannot authorize.
|
|
2335
2682
|
*/
|
|
2336
|
-
|
|
2683
|
+
walletConnectChainIdsByAccount: Record<string, number[] | null>;
|
|
2684
|
+
}
|
|
2685
|
+
/** Ephemeral form UI state. */
|
|
2686
|
+
interface StepRendererFormProps {
|
|
2687
|
+
selectSourceChainName: string;
|
|
2688
|
+
selectSourceTokenSymbol: string;
|
|
2689
|
+
depositQuoteId: string | null;
|
|
2690
|
+
depositQuoteFee: PreciseMoney | null;
|
|
2691
|
+
depositQuoteLoading: boolean;
|
|
2692
|
+
depositQuoteError: string | null;
|
|
2693
|
+
}
|
|
2694
|
+
interface StepRendererProps {
|
|
2695
|
+
flow: StepRendererFlowProps;
|
|
2696
|
+
remote: StepRendererRemoteProps;
|
|
2697
|
+
derived: StepRendererDerivedProps;
|
|
2698
|
+
forms: StepRendererFormProps;
|
|
2699
|
+
handlers: StepHandlers;
|
|
2700
|
+
}
|
|
2701
|
+
declare function StepRenderer(props: StepRendererProps): react_jsx_runtime.JSX.Element;
|
|
2702
|
+
|
|
2703
|
+
/**
|
|
2704
|
+
* Best-effort UI label for device biometrics (Face ID, Touch ID, Windows Hello, etc.).
|
|
2705
|
+
* The web platform does not expose the exact modality; this uses coarse `userAgent`
|
|
2706
|
+
* detection only — synchronous so it can run during render with no effects.
|
|
2707
|
+
*/
|
|
2708
|
+
/**
|
|
2709
|
+
* Returns short copy for passkey / biometric prompts based on the current environment.
|
|
2710
|
+
* Does not call WebAuthn (no async); suitable for direct use in render.
|
|
2711
|
+
*/
|
|
2712
|
+
declare function getDeviceBiometricUnlockText(): string;
|
|
2713
|
+
|
|
2714
|
+
interface ScreenLayoutProps {
|
|
2715
|
+
children: ReactNode;
|
|
2716
|
+
/** Content pinned to the bottom of the screen (buttons, footer) */
|
|
2717
|
+
footer?: ReactNode;
|
|
2337
2718
|
/**
|
|
2338
|
-
*
|
|
2339
|
-
*
|
|
2719
|
+
* When false, the body container does not scroll — useful for screens that
|
|
2720
|
+
* want an inner element (e.g. a list card) to be the scroll container so the
|
|
2721
|
+
* surrounding chrome (heading, banners, CTA) stays pinned. Defaults to true.
|
|
2340
2722
|
*/
|
|
2341
|
-
|
|
2723
|
+
scrollableBody?: boolean;
|
|
2342
2724
|
/**
|
|
2343
|
-
*
|
|
2344
|
-
*
|
|
2725
|
+
* When true, the footer floats over the body instead of taking its own band
|
|
2726
|
+
* at the bottom of the sheet. Its background is a gradient that is
|
|
2727
|
+
* transparent across the top half and fades to the solid sheet color for the
|
|
2728
|
+
* bottom half, so the scroll content peeks through above the CTA while the
|
|
2729
|
+
* button itself sits on a solid base. Only the footer's own children are
|
|
2730
|
+
* interactive — the transparent gutter passes taps and scroll through to the
|
|
2731
|
+
* list below. Screens that opt in must reserve bottom padding in their scroll
|
|
2732
|
+
* container so the last row clears the floating footer. Defaults to false.
|
|
2345
2733
|
*/
|
|
2346
|
-
|
|
2347
|
-
}
|
|
2348
|
-
interface LinkTokensScreenProps {
|
|
2349
|
-
entries: LinkTokenEntry[];
|
|
2350
|
-
selectedIndex: number;
|
|
2351
|
-
onSelect: (index: number) => void;
|
|
2352
|
-
onApprove: () => void;
|
|
2353
|
-
/** Desktop-only escape hatch back to wallet selection. */
|
|
2354
|
-
onBack?: () => void;
|
|
2355
|
-
/** Desktop-only settings/logout action. */
|
|
2356
|
-
onLogout?: () => void;
|
|
2357
|
-
/** Inline error from authorization or wallet. */
|
|
2358
|
-
error?: string | null;
|
|
2734
|
+
floatingFooter?: boolean;
|
|
2359
2735
|
/**
|
|
2360
|
-
*
|
|
2361
|
-
*
|
|
2736
|
+
* When true, the body still scrolls but its scrollbar is visually hidden
|
|
2737
|
+
* (overflow behaviour is unchanged). Use for screens that should never show
|
|
2738
|
+
* scrollbar chrome. Defaults to false.
|
|
2362
2739
|
*/
|
|
2363
|
-
|
|
2364
|
-
/** Disables the Approve CTA while wallet calls / patches are in flight. */
|
|
2365
|
-
approving?: boolean;
|
|
2366
|
-
}
|
|
2367
|
-
declare function LinkTokensScreen({ entries, selectedIndex, onSelect, onApprove, onBack, onLogout, error, loading, approving, }: LinkTokensScreenProps): react_jsx_runtime.JSX.Element;
|
|
2368
|
-
|
|
2369
|
-
interface DepositCompleteScreenProps {
|
|
2370
|
-
amount: number;
|
|
2740
|
+
hideScrollbar?: boolean;
|
|
2371
2741
|
}
|
|
2372
|
-
declare function
|
|
2742
|
+
declare function ScreenLayout({ children, footer, scrollableBody, floatingFooter, hideScrollbar }: ScreenLayoutProps): react_jsx_runtime.JSX.Element;
|
|
2373
2743
|
|
|
2374
|
-
interface
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
tokenCount: number;
|
|
2382
|
-
/** Pre-populated amount */
|
|
2383
|
-
initialAmount: number;
|
|
2384
|
-
/** Pre-transfer fee estimate from POST /v1/transfers/quotes */
|
|
2385
|
-
quoteFee?: PreciseMoney | null;
|
|
2386
|
-
/** Whether a fee quote is being fetched */
|
|
2387
|
-
quoteLoading?: boolean;
|
|
2388
|
-
/** User-facing error when the fee quote fails (e.g. amount too low) */
|
|
2389
|
-
quoteError?: string | null;
|
|
2390
|
-
/** Whether the deposit is currently processing */
|
|
2391
|
-
processing?: boolean;
|
|
2392
|
-
error: string | null;
|
|
2393
|
-
onDeposit: (amount: number) => void;
|
|
2394
|
-
onSwitchWallet: () => void;
|
|
2395
|
-
onBack: () => void;
|
|
2396
|
-
onLogout: () => void;
|
|
2397
|
-
/** Called when the user taps "Increase Limit" to re-authorize via wallet deeplink */
|
|
2398
|
-
onIncreaseLimit?: () => void;
|
|
2399
|
-
/** Whether a limit-increase flow is currently in progress */
|
|
2400
|
-
increasingLimit?: boolean;
|
|
2401
|
-
/** All user accounts for the source dropdown */
|
|
2402
|
-
accounts?: Account[];
|
|
2403
|
-
/** Currently selected account ID */
|
|
2404
|
-
selectedAccountId?: string | null;
|
|
2405
|
-
/** Called when an active account is selected from the dropdown */
|
|
2406
|
-
onSelectAccount?: (accountId: string) => void;
|
|
2407
|
-
/** Called when an inactive account is clicked (to authorize it) */
|
|
2408
|
-
onAuthorizeAccount?: (accountId: string) => void;
|
|
2409
|
-
/** Called when "+ Add Provider" is clicked in the dropdown */
|
|
2410
|
-
onAddProvider?: () => void;
|
|
2411
|
-
/** Called when the "Send manually" action row is tapped from the inline source sheet. */
|
|
2412
|
-
onSendManually?: () => void;
|
|
2413
|
-
/** Fallback: navigate to the full-page token picker when no inline options. */
|
|
2414
|
-
onSelectToken?: () => void;
|
|
2415
|
-
/** Available tokens for the inline dropdown. When provided, the token badge opens a dropdown instead of navigating. */
|
|
2416
|
-
tokenOptions?: SetupTokenOption[];
|
|
2417
|
-
/** Called when the user picks a token from the inline dropdown. */
|
|
2418
|
-
onPickToken?: (symbol: string, chainName: string, walletId?: string) => void;
|
|
2419
|
-
/** Mobile-only: true when token authorization should be prepared before a real deeplink tap. */
|
|
2420
|
-
useDeeplink?: boolean;
|
|
2421
|
-
onPrepareTokenAuthorization?: (walletId: string, tokenAddress: string, chainId: number, tokenSymbol: string, accountId?: string) => Promise<PreparedTokenAuthorization | null>;
|
|
2422
|
-
onCommitTokenAuthorization?: (prepared: PreparedTokenAuthorization) => void;
|
|
2423
|
-
/** Token symbol for the selected source, e.g. "USDC" or "USDT" */
|
|
2424
|
-
selectedTokenSymbol?: string;
|
|
2425
|
-
/** Chain name for the selected source, used to disambiguate same-symbol tokens on different chains. */
|
|
2426
|
-
selectedChainName?: string;
|
|
2427
|
-
/** Server-provided token logo URI for the selected source. */
|
|
2428
|
-
selectedTokenLogoUri?: string | null;
|
|
2429
|
-
/** Server-provided chain logo URI for the selected source. */
|
|
2430
|
-
selectedChainLogoUri?: string | null;
|
|
2431
|
-
/** Wallet that owns the selected source. Required for the inline source sheet
|
|
2432
|
-
* to mark the active row when two wallets/accounts are authorized on the
|
|
2433
|
-
* same symbol+chain. */
|
|
2434
|
-
selectedWalletId?: string | null;
|
|
2435
|
-
/** Status of the currently selected token source (e.g. "AUTHORIZED"). When present and not "AUTHORIZED", the screen surfaces an "authorize in wallet" CTA + banner. */
|
|
2436
|
-
selectedTokenStatus?: string;
|
|
2437
|
-
/** Called when the user taps "Continue in {wallet}" to authorize the currently selected (non-authorized) token. */
|
|
2438
|
-
onAuthorizeSelectedToken?: () => void;
|
|
2439
|
-
/** Whether the authorize-token flow is currently in progress. */
|
|
2440
|
-
authorizingToken?: boolean;
|
|
2441
|
-
/**
|
|
2442
|
-
* Minimum USD amount required for One-Tap on this screen. When the host sets
|
|
2443
|
-
* `depositAmount`, this should match it; otherwise the default floor ($0.25)
|
|
2444
|
-
* applies (see StepRenderer).
|
|
2445
|
-
*/
|
|
2446
|
-
minDepositFloor: number;
|
|
2447
|
-
/** Verbatim display value rendered after `$`, e.g. "0", "12.34", "12.". */
|
|
2448
|
-
amountEntryValue?: string;
|
|
2449
|
-
/** Digit keypress; `digit` is "0".."9". */
|
|
2450
|
-
onDigit?: (digit: string) => void;
|
|
2451
|
-
/** Decimal-point keypress. */
|
|
2452
|
-
onDecimal?: () => void;
|
|
2453
|
-
/** Backspace keypress. */
|
|
2454
|
-
onBackspace?: () => void;
|
|
2455
|
-
/** Whole-dollar preset chip tap. */
|
|
2456
|
-
onPreset?: (dollars: number) => void;
|
|
2457
|
-
/** Desktop path: raw native-input string (sanitized by the view-model). */
|
|
2458
|
-
onSetValue?: (raw: string) => void;
|
|
2459
|
-
/** Whole-dollar preset amounts. Defaults to [5, 25, 100, 250]. */
|
|
2460
|
-
presets?: number[];
|
|
2744
|
+
interface ScreenHeaderProps {
|
|
2745
|
+
/** Center title text */
|
|
2746
|
+
title?: string;
|
|
2747
|
+
/** Right-aligned element (avatar, close button, etc.) */
|
|
2748
|
+
right?: ReactNode;
|
|
2749
|
+
/** Called when back arrow is pressed. Omit to hide the back arrow. */
|
|
2750
|
+
onBack?: () => void;
|
|
2461
2751
|
/**
|
|
2462
|
-
*
|
|
2463
|
-
* on
|
|
2464
|
-
*
|
|
2465
|
-
* entry mode.
|
|
2752
|
+
* Left-aligned element rendered when `onBack` is absent (e.g. a brand
|
|
2753
|
+
* wordmark on the entry screen). Ignored when `onBack` is provided so the
|
|
2754
|
+
* back arrow always takes precedence.
|
|
2466
2755
|
*/
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
interface SuccessScreenProps {
|
|
2472
|
-
amount: number;
|
|
2473
|
-
currency: string;
|
|
2474
|
-
succeeded: boolean;
|
|
2475
|
-
error?: string | null;
|
|
2476
|
-
merchantName?: string;
|
|
2477
|
-
sourceName?: string;
|
|
2478
|
-
onDone?: () => void;
|
|
2756
|
+
left?: ReactNode;
|
|
2757
|
+
/** Optional secondary label next to the title (e.g. "Simple") */
|
|
2758
|
+
badge?: string;
|
|
2759
|
+
/** When provided, renders the three-dot settings menu with a logout action in the right slot. */
|
|
2479
2760
|
onLogout?: () => void;
|
|
2480
2761
|
/**
|
|
2481
|
-
*
|
|
2482
|
-
*
|
|
2483
|
-
* flows (e.g. auth-app) where the user has no client-side action to take
|
|
2484
|
-
* and should simply return to the merchant app.
|
|
2762
|
+
* Element rendered in the centered overlay layer (e.g. a brand wordmark).
|
|
2763
|
+
* Takes precedence over `title` / `badge` when present.
|
|
2485
2764
|
*/
|
|
2486
|
-
|
|
2765
|
+
center?: ReactNode;
|
|
2487
2766
|
}
|
|
2488
|
-
declare function
|
|
2767
|
+
declare function ScreenHeader({ title, right, onBack, left, badge, onLogout, center }: ScreenHeaderProps): react_jsx_runtime.JSX.Element;
|
|
2489
2768
|
|
|
2490
|
-
|
|
2491
|
-
chainName: string;
|
|
2492
|
-
balance: number;
|
|
2493
|
-
tokens: {
|
|
2494
|
-
tokenSymbol: string;
|
|
2495
|
-
balance: number;
|
|
2496
|
-
walletName?: string;
|
|
2497
|
-
walletLogoUrl?: string;
|
|
2498
|
-
logoURI?: string | null;
|
|
2499
|
-
}[];
|
|
2500
|
-
}
|
|
2501
|
-
interface SelectSourceScreenProps {
|
|
2502
|
-
choices: ChainChoice$1[];
|
|
2503
|
-
selectedChainName: string;
|
|
2504
|
-
selectedTokenSymbol: string;
|
|
2505
|
-
recommended: {
|
|
2506
|
-
chainName: string;
|
|
2507
|
-
tokenSymbol: string;
|
|
2508
|
-
} | null;
|
|
2509
|
-
onChainChange: (chainName: string) => void;
|
|
2510
|
-
onTokenChange: (tokenSymbol: string) => void;
|
|
2511
|
-
onConfirm: () => void;
|
|
2512
|
-
/** Primary footer button label (default: "Confirm source"). */
|
|
2513
|
-
confirmLabel?: string;
|
|
2514
|
-
onBack?: () => void;
|
|
2515
|
-
onLogout: () => void;
|
|
2516
|
-
}
|
|
2517
|
-
declare function SelectSourceScreen({ choices, selectedChainName, selectedTokenSymbol, recommended, onChainChange, onTokenChange, onConfirm, confirmLabel, onBack, onLogout, }: SelectSourceScreenProps): react_jsx_runtime.JSX.Element;
|
|
2769
|
+
declare function PoweredByFooter(): react_jsx_runtime.JSX.Element;
|
|
2518
2770
|
|
|
2519
|
-
interface
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
/** Wallet that owns the currently active token source. Required (with
|
|
2539
|
-
* symbol + chain) for a row to be marked as the active selection so
|
|
2540
|
-
* that two wallets/accounts authorized on the same symbol+chain don't
|
|
2541
|
-
* both light up. */
|
|
2542
|
-
selectedWalletId?: string | null;
|
|
2543
|
-
/** Called when the user picks a token row. */
|
|
2544
|
-
onPickToken: (symbol: string, chainName: string, walletId?: string) => void;
|
|
2545
|
-
/** Mobile-only: unauthorized token rows prepare a real deeplink footer CTA instead of closing immediately. */
|
|
2546
|
-
useDeeplink?: boolean;
|
|
2547
|
-
onPrepareTokenAuthorization?: (walletId: string, tokenAddress: string, chainId: number, tokenSymbol: string, accountId?: string) => Promise<PreparedTokenAuthorization | null>;
|
|
2548
|
-
onCommitTokenAuthorization?: (prepared: PreparedTokenAuthorization) => void;
|
|
2771
|
+
interface PrimaryButtonProps {
|
|
2772
|
+
/** Button label. Optional only when `spinnerOnly` is set (no label is shown). */
|
|
2773
|
+
children?: ReactNode;
|
|
2774
|
+
onClick?: (event: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => void;
|
|
2775
|
+
href?: string;
|
|
2776
|
+
target?: HTMLAttributeAnchorTarget;
|
|
2777
|
+
rel?: string;
|
|
2778
|
+
disabled?: boolean;
|
|
2779
|
+
loading?: boolean;
|
|
2780
|
+
/** Override the default "Please wait..." text shown while loading. */
|
|
2781
|
+
loadingText?: string;
|
|
2782
|
+
/** Optional icon element rendered left of the label */
|
|
2783
|
+
icon?: ReactNode;
|
|
2784
|
+
/** 0-1 fractional progress. When set, the button renders in progress mode with a fill bar. */
|
|
2785
|
+
progress?: number;
|
|
2786
|
+
/** Text shown during progress mode (overrides children and loadingText). */
|
|
2787
|
+
progressText?: string;
|
|
2788
|
+
/** When true, the fill bar pulses to signal the user needs to take action (e.g. confirm in wallet). */
|
|
2789
|
+
progressPaused?: boolean;
|
|
2549
2790
|
/**
|
|
2550
|
-
*
|
|
2551
|
-
*
|
|
2552
|
-
*
|
|
2791
|
+
* Renders the pill as a non-interactive waiting state: the black pill with a
|
|
2792
|
+
* single centered spinner and no label. For surfaces where the user is
|
|
2793
|
+
* blocked on an external action (e.g. signing in their wallet) and there is
|
|
2794
|
+
* nothing to click.
|
|
2553
2795
|
*/
|
|
2554
|
-
|
|
2796
|
+
spinnerOnly?: boolean;
|
|
2797
|
+
}
|
|
2798
|
+
declare function PrimaryButton({ children, onClick, href, target, rel, disabled, loading, loadingText, icon, progress, progressText, progressPaused, spinnerOnly, }: PrimaryButtonProps): react_jsx_runtime.JSX.Element;
|
|
2799
|
+
|
|
2800
|
+
interface BlinkDepositButtonProps {
|
|
2801
|
+
/** Fired when the user taps the button. Hosts typically open the Blink deposit flow. */
|
|
2802
|
+
onClick: () => void;
|
|
2803
|
+
/** Disables interaction and dims the button. */
|
|
2804
|
+
disabled?: boolean;
|
|
2805
|
+
/** Non-interactive waiting state (e.g. while preparing a deposit session). Dims like disabled. */
|
|
2806
|
+
loading?: boolean;
|
|
2555
2807
|
/**
|
|
2556
|
-
*
|
|
2557
|
-
*
|
|
2558
|
-
* — placeholder for the manual-transfer entry point.
|
|
2808
|
+
* Promotional sticker copy (e.g. "2x Your Profits") rendered as a tilted
|
|
2809
|
+
* badge straddling the button's bottom edge. Omit/null to hide it.
|
|
2559
2810
|
*/
|
|
2560
|
-
|
|
2561
|
-
/** Header back navigation. Falls back to onDone when omitted. */
|
|
2562
|
-
onBack?: () => void;
|
|
2563
|
-
/** Primary "Done" CTA used to dismiss the sheet. */
|
|
2564
|
-
onDone: () => void;
|
|
2565
|
-
onLogout?: () => void;
|
|
2811
|
+
promoTagText?: string | null;
|
|
2566
2812
|
}
|
|
2567
2813
|
/**
|
|
2568
|
-
*
|
|
2569
|
-
*
|
|
2570
|
-
*
|
|
2571
|
-
*
|
|
2572
|
-
*
|
|
2573
|
-
*
|
|
2814
|
+
* Blink-branded deposit CTA matching the Figma "Payment method" redesign
|
|
2815
|
+
* (frame 1623-32808): a black pill with a bold "Deposit stablecoins" line over
|
|
2816
|
+
* an italic "In a Blink" line, and overlapping USDC/USDT coin marks on the
|
|
2817
|
+
* right.
|
|
2818
|
+
*
|
|
2819
|
+
* Exported for merchants to drop onto their own pages instead of building a
|
|
2820
|
+
* custom button. Outside a BlinkProvider it intentionally styles itself with
|
|
2821
|
+
* the default lightThemeNew palette; inside the widget it follows the
|
|
2822
|
+
* configured theme tokens.
|
|
2574
2823
|
*/
|
|
2575
|
-
declare function
|
|
2824
|
+
declare function BlinkDepositButton({ onClick, disabled, loading, promoTagText, }: BlinkDepositButtonProps): react_jsx_runtime.JSX.Element;
|
|
2576
2825
|
|
|
2577
|
-
interface
|
|
2578
|
-
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
tokenSymbol: string;
|
|
2582
|
-
balance: number;
|
|
2583
|
-
}[];
|
|
2584
|
-
}
|
|
2585
|
-
interface AdvancedSourceScreenProps {
|
|
2586
|
-
choices: ChainChoice[];
|
|
2587
|
-
selectedChainName: string;
|
|
2588
|
-
selectedTokenSymbol: string;
|
|
2589
|
-
onSelectSource: (chainName: string, tokenSymbol: string) => void;
|
|
2590
|
-
onBack: () => void;
|
|
2826
|
+
interface OutlineButtonProps {
|
|
2827
|
+
children: ReactNode;
|
|
2828
|
+
onClick?: () => void;
|
|
2829
|
+
disabled?: boolean;
|
|
2591
2830
|
}
|
|
2592
|
-
declare function
|
|
2831
|
+
declare function OutlineButton({ children, onClick, disabled }: OutlineButtonProps): react_jsx_runtime.JSX.Element;
|
|
2593
2832
|
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
onRetry?: () => void;
|
|
2604
|
-
retryLabel?: string;
|
|
2605
|
-
retryAfterDelay?: boolean;
|
|
2606
|
-
showRetryOnError?: boolean;
|
|
2607
|
-
/**
|
|
2608
|
-
* Presentation of the error message. `error` (default) uses the red error
|
|
2609
|
-
* banner for genuine failures; `info` uses the neutral informational
|
|
2610
|
-
* NotificationBanner for benign, retryable conditions (e.g. an expired SVM
|
|
2611
|
-
* signing window).
|
|
2612
|
-
*/
|
|
2613
|
-
errorVariant?: 'error' | 'info';
|
|
2833
|
+
interface SecondaryButtonProps {
|
|
2834
|
+
children: ReactNode;
|
|
2835
|
+
onClick?: (event: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => void;
|
|
2836
|
+
href?: string;
|
|
2837
|
+
target?: HTMLAttributeAnchorTarget;
|
|
2838
|
+
rel?: string;
|
|
2839
|
+
disabled?: boolean;
|
|
2840
|
+
loading?: boolean;
|
|
2841
|
+
loadingText?: string;
|
|
2614
2842
|
}
|
|
2843
|
+
declare function SecondaryButton({ children, onClick, href, target, rel, disabled, loading, loadingText, }: SecondaryButtonProps): react_jsx_runtime.JSX.Element;
|
|
2615
2844
|
|
|
2616
|
-
interface
|
|
2617
|
-
|
|
2845
|
+
interface InfoBannerProps {
|
|
2846
|
+
children: ReactNode;
|
|
2847
|
+
/** SVG icon element. Defaults to a shield icon. */
|
|
2848
|
+
icon?: ReactNode;
|
|
2618
2849
|
}
|
|
2619
|
-
declare function
|
|
2850
|
+
declare function InfoBanner({ children, icon }: InfoBannerProps): react_jsx_runtime.JSX.Element;
|
|
2620
2851
|
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
* When false (desktop), shows inline authorization progress instead. */
|
|
2627
|
-
useDeeplink?: boolean;
|
|
2628
|
-
error?: string | null;
|
|
2629
|
-
walletLogoUrl?: string;
|
|
2630
|
-
onRetryStatus?: () => void;
|
|
2631
|
-
/** Soft-retry the orchestrator (calls `orchestrator.restart()`). Desktop only —
|
|
2632
|
-
* shown alongside the error banner when set so the user can recover from a
|
|
2633
|
-
* dismissed wallet popup without reloading the iframe. */
|
|
2634
|
-
onRetryAuthorization?: () => void;
|
|
2635
|
-
onBack?: () => void;
|
|
2636
|
-
onLogout?: () => void;
|
|
2852
|
+
type IconCircleVariant = 'accent' | 'success' | 'error';
|
|
2853
|
+
interface IconCircleProps {
|
|
2854
|
+
children: ReactNode;
|
|
2855
|
+
variant?: IconCircleVariant;
|
|
2856
|
+
size?: number;
|
|
2637
2857
|
}
|
|
2638
|
-
|
|
2639
|
-
* Wallet authorization screen. On mobile, provides a user-tappable button
|
|
2640
|
-
* that triggers the deeplink via window.open. On desktop, shows inline
|
|
2641
|
-
* authorization progress while wallet extension popups handle the flow.
|
|
2642
|
-
*/
|
|
2643
|
-
declare function OpenWalletScreen({ walletName, deeplinkUri, loading, walletLogoUrl, useDeeplink, error, onRetryStatus, onRetryAuthorization, onBack, onLogout, }: OpenWalletScreenProps): react_jsx_runtime.JSX.Element;
|
|
2858
|
+
declare function IconCircle({ children, variant, size }: IconCircleProps): react_jsx_runtime.JSX.Element;
|
|
2644
2859
|
|
|
2645
|
-
interface
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
/** When true, every checklist item renders complete (checked). Set during the
|
|
2654
|
-
* post-sign settling window so the checkmarks persist until the next screen
|
|
2655
|
-
* loads, rather than reverting to the active/pending default. `step` still
|
|
2656
|
-
* selects the shape (one SPL item vs. two EVM items). */
|
|
2657
|
-
complete?: boolean;
|
|
2658
|
-
error?: string | null;
|
|
2659
|
-
onRetry?: () => void;
|
|
2660
|
-
/** Desktop-only escape hatch back to the previous screen. */
|
|
2661
|
-
onBack?: () => void;
|
|
2662
|
-
/** Desktop-only settings/logout action. */
|
|
2663
|
-
onLogout?: () => void;
|
|
2664
|
-
/** Mobile WalletConnect: connected wallet name, for the "Open {wallet}" button. */
|
|
2665
|
-
walletName?: string | null;
|
|
2860
|
+
interface StepItem {
|
|
2861
|
+
label: string;
|
|
2862
|
+
/** Optional sublabel (e.g. "$100 limit · 2 tokens approved") */
|
|
2863
|
+
detail?: string;
|
|
2864
|
+
status: 'pending' | 'active' | 'complete';
|
|
2865
|
+
}
|
|
2866
|
+
interface StepListProps {
|
|
2867
|
+
steps: StepItem[];
|
|
2666
2868
|
/**
|
|
2667
|
-
*
|
|
2668
|
-
*
|
|
2669
|
-
*
|
|
2869
|
+
* How to render the indicator for the active step.
|
|
2870
|
+
* - 'number' (default): bordered circle with the step number.
|
|
2871
|
+
* - 'spinner': small animated arc in the accent color.
|
|
2670
2872
|
*/
|
|
2671
|
-
|
|
2672
|
-
/**
|
|
2673
|
-
|
|
2873
|
+
activeIndicator?: 'number' | 'spinner';
|
|
2874
|
+
/**
|
|
2875
|
+
* Overall visual density.
|
|
2876
|
+
* - 'md' (default): original compact look.
|
|
2877
|
+
* - 'lg': larger badge, heavier label, more vertical breathing room
|
|
2878
|
+
* (matches the Figma redesign).
|
|
2879
|
+
*/
|
|
2880
|
+
size?: 'md' | 'lg';
|
|
2674
2881
|
}
|
|
2675
|
-
|
|
2676
|
-
* Activation surface rendered while the user signs the Permit2 / SPL
|
|
2677
|
-
* authorization in their wallet. NOT a payment screen — no money moves here.
|
|
2678
|
-
* Shares chrome with LinkTokensScreen (header wordmark, h2 heading, recessed
|
|
2679
|
-
* card, footer lock banner) so the link → authorize steps read as one page.
|
|
2680
|
-
*/
|
|
2681
|
-
declare function ApprovingInWalletScreen({ tokenSymbol, chainName, step, complete, error, onRetry, onBack, onLogout, walletName, foregroundDeeplink, onOpenWallet, }: ApprovingInWalletScreenProps): react_jsx_runtime.JSX.Element;
|
|
2882
|
+
declare function StepList({ steps, activeIndicator, size, }: StepListProps): react_jsx_runtime.JSX.Element;
|
|
2682
2883
|
|
|
2683
|
-
interface
|
|
2684
|
-
walletName: string | null;
|
|
2685
|
-
chainFamily?: 'evm' | 'svm' | null;
|
|
2686
|
-
signing: boolean;
|
|
2687
|
-
error: string | null;
|
|
2688
|
-
onSign: () => void;
|
|
2884
|
+
interface SettingsMenuProps {
|
|
2689
2885
|
onLogout: () => void;
|
|
2690
2886
|
}
|
|
2691
|
-
|
|
2692
|
-
* Shown after the user returns from wallet authorization. Requires an explicit
|
|
2693
|
-
* button tap to initiate passkey signing (FaceID) rather than auto-triggering.
|
|
2694
|
-
*/
|
|
2695
|
-
declare function ConfirmSignScreen({ walletName, chainFamily, signing, error, onSign, onLogout, }: ConfirmSignScreenProps): react_jsx_runtime.JSX.Element;
|
|
2887
|
+
declare function SettingsMenu({ onLogout }: SettingsMenuProps): react_jsx_runtime.JSX.Element;
|
|
2696
2888
|
|
|
2697
|
-
interface
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
* previously-selected account has been removed from state (e.g. after
|
|
2701
|
-
* an account refresh). When undefined the screen renders a clear empty
|
|
2702
|
-
* state instead of crashing on `account.wallets`.
|
|
2703
|
-
*/
|
|
2704
|
-
account: Account | undefined;
|
|
2705
|
-
chains: Array<{
|
|
2706
|
-
id: string;
|
|
2707
|
-
name: string;
|
|
2708
|
-
commonId: number | null;
|
|
2709
|
-
}>;
|
|
2710
|
-
onSelectAuthorized: (walletId: string, tokenSymbol: string) => void;
|
|
2711
|
-
onAuthorizeToken: (walletId: string, tokenAddress: string, chainId: number, tokenSymbol: string) => void;
|
|
2712
|
-
onBack: () => void;
|
|
2713
|
-
onLogout?: () => void;
|
|
2714
|
-
/** Deposit amount for the context card at top */
|
|
2715
|
-
depositAmount?: number;
|
|
2716
|
-
/** Currently selected token symbol, e.g. "USDC" or "USDT" */
|
|
2717
|
-
selectedTokenSymbol?: string;
|
|
2718
|
-
/** Currently selected wallet ID so we can identify the active token across chains */
|
|
2719
|
-
selectedWalletId?: string;
|
|
2889
|
+
interface SpinnerProps {
|
|
2890
|
+
size?: number;
|
|
2891
|
+
label?: string;
|
|
2720
2892
|
}
|
|
2721
|
-
declare function
|
|
2893
|
+
declare function Spinner({ size, label }: SpinnerProps): react_jsx_runtime.JSX.Element;
|
|
2722
2894
|
|
|
2723
|
-
|
|
2724
|
-
|
|
2725
|
-
sourceChainId: number;
|
|
2726
|
-
chainName: string;
|
|
2727
|
-
tokenSymbol: string;
|
|
2728
|
-
tokenAddress: string;
|
|
2729
|
-
decimals: number;
|
|
2730
|
-
rawBalance: string;
|
|
2731
|
-
}
|
|
2732
|
-
interface GuestTokenEntry extends GuestTokenPickerRawRow {
|
|
2733
|
-
/** Human-readable token amount (not USD). */
|
|
2734
|
-
formattedBalance: string;
|
|
2735
|
-
}
|
|
2736
|
-
declare function mapGuestPickerEntries(rows: GuestTokenPickerRawRow[]): GuestTokenEntry[];
|
|
2737
|
-
interface GuestTokenPickerScreenProps {
|
|
2738
|
-
entries: GuestTokenEntry[];
|
|
2739
|
-
loading: boolean;
|
|
2740
|
-
bridgePhase?: 'preparing';
|
|
2741
|
-
error: string | null;
|
|
2742
|
-
pendingEntry: GuestTokenEntry | null;
|
|
2743
|
-
quoteFee: unknown;
|
|
2744
|
-
quoteLoading: boolean;
|
|
2745
|
-
onSelect: (entry: GuestTokenEntry) => void;
|
|
2746
|
-
onConfirm: () => void;
|
|
2747
|
-
onBack: () => void;
|
|
2748
|
-
oneTapEnabled: boolean;
|
|
2749
|
-
onToggleOneTap: (enabled: boolean) => void;
|
|
2750
|
-
oneTapLimit: number;
|
|
2751
|
-
onSetOneTapLimit: (limit: number) => void;
|
|
2752
|
-
variant?: 'auth-setup';
|
|
2753
|
-
closeListOnSelect?: boolean;
|
|
2754
|
-
emptyMessage?: string;
|
|
2755
|
-
}
|
|
2756
|
-
declare function GuestTokenPickerScreen({ entries, loading, bridgePhase, error, pendingEntry, onSelect, onConfirm, onBack, oneTapEnabled, onToggleOneTap, oneTapLimit, onSetOneTapLimit, variant, closeListOnSelect, emptyMessage, }: GuestTokenPickerScreenProps): react_jsx_runtime.JSX.Element;
|
|
2895
|
+
declare function BlinkLoadingScreen(): react_jsx_runtime.JSX.Element;
|
|
2896
|
+
declare function BlinkInitialLoadingScreen(): react_jsx_runtime.JSX.Element;
|
|
2757
2897
|
|
|
2758
2898
|
/**
|
|
2759
2899
|
* Formats a native-asset amount for display (e.g. `0.7`, `1.2345`, `12.5`).
|
|
@@ -2890,4 +3030,4 @@ declare function clearDebugEntries(): void;
|
|
|
2890
3030
|
*/
|
|
2891
3031
|
declare function useBlinkDebugLog(): DebugEntry[];
|
|
2892
3032
|
|
|
2893
|
-
export { ACCOUNT_SWITCH_CONFLICT_MESSAGE, type Account, type ActionExecutionResult, type AdvancedSettings, AdvancedSourceScreen, type Amount, type AnalyticsProps, ApprovingInWalletScreen, type ApprovingInWalletScreenProps, type AuthorizationAction, type AuthorizationSession, AuthorizationSessionCancelledError, type AuthorizationSessionDetail, BLINK_ERROR_ILLUSTRATION, BLINK_LOGO, BLINK_MASCOT, BLINK_PASSKEY_ILLUSTRATION, BLINK_SUCCESS_ILLUSTRATION, BlinkDepositButton, BlinkErrorScreen, BlinkInitialLoadingScreen, BlinkLoadingScreen, BlinkPayment, type BlinkPaymentProps, BlinkProvider, type BlinkProviderProps, type Chain, ConfirmSignScreen, type DebugEntry, type DebugLevel, DepositCompleteScreen, DepositOptionsScreen, DepositScreen, DepositTransferStatusScreen, type Destination, type ErrorResponse, type ExecutionResult, type GuestTokenEntry, type GuestTokenPickerRawRow, GuestTokenPickerScreen, IconCircle, InfoBanner, LOGIN_KEY_ILLUSTRATION, type LinkTokenEntry, LinkTokensScreen, type ListResponse, LoginScreen, ManualTransferPasskeyScreen, type MerchantAuthorization, type MerchantPublicKey, type MobileFlowState, type NativeUnsupportedEntry, OpenWalletScreen, type OrchestratorResult, type OrchestratorRunOptions, OtpVerifyScreen, OutlineButton, PasskeyIframeBlockedError, PasskeyPopupWelcomeScreen, PasskeyScreen, type PaymentPhase, type PaymentState, PoweredByFooter, type PreciseMoney, PrimaryButton, type Provider, ScreenHeader, ScreenLayout, type ScreenName, SecondaryButton, SelectDepositSourceScreen, SelectSourceScreen, SettingsMenu, type SetupTokenOption, type SolanaAccountSwitchDeps, type SourceOption, type SourceSelection, type SourceType, Spinner, type StepHandlers, type StepItem, StepList, StepRenderer, type StepRendererDerivedProps, type StepRendererFlowProps, type StepRendererFormProps, type StepRendererProps, type StepRendererRemoteProps, SuccessScreen, type ThemeMode, type ThemeTokens, type TokenBalance, TokenPickerScreen, type Transfer, type TransferDestination, type TransferPhase, type UseAuthorizationExecutorResult, type UseAuthorizationOrchestratorResult, type UserConfig, VerifyPasskeyScreen, type Wallet, type WalletAccountChange, type WalletAccountSwitchResult, type WalletCapabilities, type WalletCapabilitiesDebugSnapshot, type WalletDeeplink, WalletPickerScreen, type WalletSource, type WalletToken, WelcomeBackScreen, appendDebug, api as blinkApi, buildNativeUnsupportedEntries, clearDebugEntries, createInitialState, credentialIdBase64ToBytes, darkTheme, darkThemeNew, darkTransparentTheme, darkTransparentThemeNew, deviceHasPasskey, encodePermit2ApproveCalldata, findDevicePasskey, findDevicePasskeyViaPopup, formatNativeAmount, getAtomicBatchSupportDebugInfo, getDebugEntries, getDeviceBiometricUnlockText, getTheme, getThemeBase, getWalletCapabilities, identifyUser, isAuthorizationSessionCancelled, isExpectedAuthorizationCancellation, isTerminalTransferStatus, isTransferAwaitingCompletion, isTransparentTheme, isUserDismissedAuthorizationError, isVisibleUsdAmountAtTwoDecimals, lightTheme, lightThemeNew, lightTransparentTheme, lightTransparentThemeNew, mapGuestPickerEntries, replaceOpenProviderForAccountSwitch, resetUser, resolveAnalyticsEnvironment, resolvePasskeyRpId, sanitizeProps, screenForPhase, subscribeDebug, supportsAtomicBatch, supportsPaymasterService, track, useAuthorizationExecutor, useAuthorizationOrchestrator, useBlinkConfig, useBlinkDebugLog, useBlinkDepositAmount, useSolanaAccountSwitchEffect, useTransferPolling, useTransferSigning };
|
|
3033
|
+
export { ACCOUNT_SWITCH_CONFLICT_MESSAGE, type Account, type ActionExecutionResult, type AdvancedSettings, AdvancedSourceScreen, type Amount, type AnalyticsProps, ApprovingInWalletScreen, type ApprovingInWalletScreenProps, type AuthorizationAction, type AuthorizationSession, AuthorizationSessionCancelledError, type AuthorizationSessionDetail, BLINK_ERROR_ILLUSTRATION, BLINK_LOGO, BLINK_MASCOT, BLINK_PASSKEY_ILLUSTRATION, BLINK_SUCCESS_ILLUSTRATION, BlinkDepositButton, BlinkErrorScreen, BlinkInitialLoadingScreen, BlinkLoadingScreen, BlinkPayment, type BlinkPaymentProps, BlinkProvider, type BlinkProviderProps, type Chain, ConfirmSignScreen, type DebugEntry, type DebugLevel, DepositCompleteScreen, DepositOptionsScreen, DepositScreen, DepositTransferStatusScreen, type Destination, type ErrorResponse, type ExecutionResult, type GuestTokenEntry, type GuestTokenPickerRawRow, GuestTokenPickerScreen, IconCircle, InfoBanner, LOGIN_KEY_ILLUSTRATION, type LinkTokenEntry, LinkTokensScreen, type ListResponse, LoginScreen, ManualTransferPasskeyScreen, type MerchantAuthorization, type MerchantPublicKey, type MobileFlowState, type NativeUnsupportedEntry, OpenWalletScreen, type OrchestratorResult, type OrchestratorRunOptions, OtpVerifyScreen, OutlineButton, PasskeyIframeBlockedError, PasskeyPopupWelcomeScreen, PasskeyScreen, type PaymentPhase, type PaymentState, PoweredByFooter, type PreciseMoney, PrimaryButton, type Provider, ScreenHeader, ScreenLayout, type ScreenName, SecondaryButton, SelectDepositSourceScreen, SelectSourceScreen, SettingsMenu, type SetupTokenOption, type SolanaAccountSwitchDeps, type SourceOption, type SourceSelection, type SourceType, type SpendingLimitSelection, Spinner, type StepHandlers, type StepItem, StepList, StepRenderer, type StepRendererDerivedProps, type StepRendererFlowProps, type StepRendererFormProps, type StepRendererProps, type StepRendererRemoteProps, SuccessScreen, type ThemeMode, type ThemeTokens, type TokenBalance, TokenPickerScreen, type Transfer, type TransferDestination, type TransferPhase, type UseAuthorizationExecutorResult, type UseAuthorizationOrchestratorResult, type UserConfig, VerifyPasskeyScreen, type Wallet, type WalletAccountChange, type WalletAccountSwitchResult, type WalletCapabilities, type WalletCapabilitiesDebugSnapshot, type WalletDeeplink, WalletPickerScreen, type WalletSource, type WalletToken, WelcomeBackScreen, appendDebug, api as blinkApi, buildNativeUnsupportedEntries, clearDebugEntries, createInitialState, credentialIdBase64ToBytes, darkTheme, darkThemeNew, darkTransparentTheme, darkTransparentThemeNew, deviceHasPasskey, encodePermit2ApproveCalldata, findDevicePasskey, findDevicePasskeyViaPopup, formatNativeAmount, getAtomicBatchSupportDebugInfo, getDebugEntries, getDeviceBiometricUnlockText, getTheme, getThemeBase, getWalletCapabilities, identifyUser, isAuthorizationSessionCancelled, isExpectedAuthorizationCancellation, isTerminalTransferStatus, isTransferAwaitingCompletion, isTransparentTheme, isUserDismissedAuthorizationError, isVisibleUsdAmountAtTwoDecimals, lightTheme, lightThemeNew, lightTransparentTheme, lightTransparentThemeNew, mapGuestPickerEntries, replaceOpenProviderForAccountSwitch, resetUser, resolveAnalyticsEnvironment, resolvePasskeyRpId, sanitizeProps, screenForPhase, subscribeDebug, supportsAtomicBatch, supportsPaymasterService, track, useAuthorizationExecutor, useAuthorizationOrchestrator, useBlinkConfig, useBlinkDebugLog, useBlinkDepositAmount, useSolanaAccountSwitchEffect, useTransferPolling, useTransferSigning };
|