@swype-org/react-sdk 0.2.316 → 0.2.357

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -77,6 +77,21 @@ interface Account {
77
77
  nickname?: string | null;
78
78
  /** Optional display logo URL, e.g. the selected Reown wallet icon. */
79
79
  logoURI?: string;
80
+ /**
81
+ * WalletConnect identity recovered server-side from the account's session
82
+ * configs. Present only for WalletConnect-typed accounts — used to
83
+ * pre-check chain support before any reauthorization session exists (e.g.
84
+ * "Not supported" rows on the deposit-source sheet). `approvedChainIds` is
85
+ * the EIP-155 set the wallet approved at its most recent pairing — ground
86
+ * truth that overrides a stale Reown registry entry (registry listings lag
87
+ * the chains wallets actually support, e.g. newly launched mainnets).
88
+ */
89
+ walletConnect?: {
90
+ name: string;
91
+ reownWalletId?: string;
92
+ imageUrl?: string;
93
+ approvedChainIds?: number[];
94
+ };
80
95
  wallets: Wallet[];
81
96
  /** Remaining One-Tap allowance in USD, or null when not configured. */
82
97
  remainingAllowance?: number | null;
@@ -589,6 +604,12 @@ declare function fetchTransfer(apiBaseUrl: string, token: string, transferId: st
589
604
  * PATCH /v1/transfers/{transferId}
590
605
  */
591
606
  declare function signTransfer(apiBaseUrl: string, token: string, transferId: string, signedTransfer: Record<string, unknown>, authorizationSessionToken?: string): Promise<Transfer>;
607
+ /**
608
+ * Regenerate a fresh sign payload for an SVM transfer whose signing window
609
+ * expired, reusing the same transfer id.
610
+ * POST /v1/transfers/{transferId}/sign-payload
611
+ */
612
+ declare function regenerateTransferSignPayload(apiBaseUrl: string, token: string, transferId: string, authorizationSessionToken?: string): Promise<Transfer>;
592
613
  declare function fetchAuthorizationSession(apiBaseUrl: string, sessionId: string): Promise<AuthorizationSessionDetail>;
593
614
  declare function fetchAuthorizationSessionByToken(apiBaseUrl: string, token: string): Promise<AuthorizationSessionDetail>;
594
615
  /**
@@ -749,6 +770,7 @@ declare const api_fetchUserConfig: typeof fetchUserConfig;
749
770
  declare const api_postTransferQuote: typeof postTransferQuote;
750
771
  declare const api_probeActionCompletion: typeof probeActionCompletion;
751
772
  declare const api_refreshManualTransferQuote: typeof refreshManualTransferQuote;
773
+ declare const api_regenerateTransferSignPayload: typeof regenerateTransferSignPayload;
752
774
  declare const api_registerPasskey: typeof registerPasskey;
753
775
  declare const api_reportActionCompletion: typeof reportActionCompletion;
754
776
  declare const api_reportPasskeyActivity: typeof reportPasskeyActivity;
@@ -760,7 +782,7 @@ declare const api_updateUserConfig: typeof updateUserConfig;
760
782
  declare const api_updateUserConfigBySession: typeof updateUserConfigBySession;
761
783
  declare const api_waitForActionTransactionReceipt: typeof waitForActionTransactionReceipt;
762
784
  declare namespace api {
763
- 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_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 };
785
+ 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 };
764
786
  }
765
787
 
766
788
  interface BlinkPaymentProps {
@@ -986,6 +1008,29 @@ interface ExecuteActionOptions {
986
1008
  sessionId?: string;
987
1009
  /** WalletConnect account/runtime key that owns this action. */
988
1010
  walletConnectRuntimeKey?: string;
1011
+ /**
1012
+ * Chain id the WalletConnect OPEN_PROVIDER pairing must include (e.g. the
1013
+ * reauth target token's chain). Overrides `action.metadata.requiredChainId`.
1014
+ * A session reuse that doesn't approve this chain re-pairs with it required,
1015
+ * and a pairing that comes back without it fails with a clear error instead
1016
+ * of letting SELECT_SOURCE hit the backend's approved-chain validation.
1017
+ */
1018
+ walletConnectRequiredChainId?: number;
1019
+ /**
1020
+ * Human-readable name for `walletConnectRequiredChainId` (e.g. "HyperEVM"),
1021
+ * used in the missing-required-chain error so users see the network name
1022
+ * rather than a bare numeric chain id.
1023
+ */
1024
+ walletConnectRequiredChainLabel?: string;
1025
+ /**
1026
+ * EVM chain ids (from the backend's `/v1/chains`) proposed as optional
1027
+ * namespaces in the WalletConnect pairing, on top of the runtime's
1028
+ * hardcoded fallback. Keeps the proposal in sync with admin-managed source
1029
+ * chains so a supporting wallet can approve them — chains missing from the
1030
+ * proposal can never land in `approvedChainIds` and would be falsely
1031
+ * reported as unsupported. The runtime remembers the list for re-pairs.
1032
+ */
1033
+ walletConnectOptionalChainIds?: number[];
989
1034
  /**
990
1035
  * Forwarded to APPROVE_SPL: invoked once after the Phantom signature is
991
1036
  * returned and before client-side on-chain confirmation begins. The
@@ -995,6 +1040,16 @@ interface ExecuteActionOptions {
995
1040
  onApproveSplConfirming?: (action: AuthorizationAction) => void;
996
1041
  /** Emits the WalletConnect pairing URI so UI can render a QR/deeplink while connect is pending. */
997
1042
  onWalletConnectDisplayUri?: (uri: string) => void;
1043
+ /**
1044
+ * Mobile only: foreground the ALREADY-CONNECTED WalletConnect wallet so the
1045
+ * pending signing prompt surfaces, WITHOUT re-pairing. Fired immediately
1046
+ * before each WC signing RPC (APPROVE_PERMIT2 / SIGN_PERMIT2 / EXECUTE_BRIDGE).
1047
+ * The executor has no wallet-deeplink metadata, so the caller supplies this
1048
+ * side-effect (e.g. `triggerDeeplink('rainbow://')`). No-op on desktop, where
1049
+ * the caller passes `undefined` (signing happens in the same paired wallet /
1050
+ * extension and a QR is shown for cross-device).
1051
+ */
1052
+ onWalletConnectForegroundWallet?: () => void;
998
1053
  /**
999
1054
  * Optional Promise resolved by an external (non-WC) connection that races the
1000
1055
  * WalletConnect pairing for `OPEN_PROVIDER`. Currently used by
@@ -1048,6 +1103,7 @@ interface UseAuthorizationExecutorResult {
1048
1103
  paymasterUrl?: string;
1049
1104
  walletConnectRuntimeKey?: string;
1050
1105
  onWalletConnectDisplayUri?: (uri: string) => void;
1106
+ onWalletConnectForegroundWallet?: () => void;
1051
1107
  }) => Promise<BatchedWalletCallsResult>;
1052
1108
  /** Refresh wallet capabilities and return whether atomicBatch is supported. */
1053
1109
  canBatch: () => Promise<boolean>;
@@ -1171,6 +1227,51 @@ interface OrchestratorRunOptions {
1171
1227
  onApproveSplConfirming?: (action: AuthorizationAction) => void;
1172
1228
  /** Emits the direct WalletConnect pairing URI while OPEN_PROVIDER is connecting. */
1173
1229
  onWalletConnectDisplayUri?: (uri: string) => void;
1230
+ /**
1231
+ * Mobile only: foreground the ALREADY-CONNECTED WalletConnect wallet before
1232
+ * each signing prompt (APPROVE_PERMIT2 / SIGN_PERMIT2 / EXECUTE_BRIDGE) via a
1233
+ * bare deeplink — over the live session, NOT a re-pair. Supplied by
1234
+ * `handleSelectWalletConnectWallet` / the reauth handlers, which hold the
1235
+ * wallet's deeplink metadata. Omitted on desktop (QR + same-wallet signing).
1236
+ */
1237
+ onWalletConnectForegroundWallet?: () => void;
1238
+ /**
1239
+ * Pins ONE WalletConnect runtime key for the entire run, overriding the
1240
+ * per-action resolution (`action.metadata.walletConnectAccountId` / tracked
1241
+ * `session.accountId`). Supplied by the handler that performed the pairing
1242
+ * (it knows the client `accountId` it paired under). Guarantees pairing
1243
+ * (OPEN_PROVIDER) and signing (APPROVE_PERMIT2 / SIGN_PERMIT2 / EXECUTE_BRIDGE)
1244
+ * use the SAME module-level runtime Map entry — closing the gap where
1245
+ * `session.accountId` is null at OPEN_PROVIDER but non-null by APPROVE_PERMIT2,
1246
+ * which otherwise makes signing look up a fresh, unpaired runtime and re-pair
1247
+ * (a second QR / connection approval).
1248
+ */
1249
+ walletConnectRuntimeKey?: string;
1250
+ /**
1251
+ * Chain id the WalletConnect OPEN_PROVIDER pairing must include — the
1252
+ * reauth target token's chain, supplied by the token-authorization
1253
+ * handlers. Overrides `action.metadata.requiredChainId` so the SDK can
1254
+ * require the right chain even when the backend didn't stamp it. A
1255
+ * session that doesn't approve this chain re-pairs with it required; a
1256
+ * pairing that still comes back without it fails OPEN_PROVIDER with a
1257
+ * clear error instead of crashing SELECT_SOURCE auto-resolve on the
1258
+ * backend's approved-chain validation (422 INVALID_SELECT_SOURCE_SELECTION).
1259
+ */
1260
+ walletConnectRequiredChainId?: number;
1261
+ /**
1262
+ * EVM chain ids from the backend's `/v1/chains`, proposed as optional
1263
+ * namespaces at the WalletConnect pairing on top of the runtime's hardcoded
1264
+ * fallback. Source chains are admin-managed server-side, so deriving the
1265
+ * proposal from this list keeps newly-enabled chains approvable without an
1266
+ * SDK release — a chain absent from the proposal can never be approved and
1267
+ * would surface as a false "Not supported" row.
1268
+ */
1269
+ walletConnectOptionalChainIds?: number[];
1270
+ /**
1271
+ * Human-readable name for `walletConnectRequiredChainId` (e.g. "HyperEVM"),
1272
+ * surfaced in the missing-required-chain error instead of a bare chain id.
1273
+ */
1274
+ walletConnectRequiredChainName?: string;
1174
1275
  /**
1175
1276
  * Optional Promise that races the WalletConnect pairing for OPEN_PROVIDER.
1176
1277
  * Used by `handleSelectWalletConnectWallet` when the picked Reown wallet is
@@ -1213,6 +1314,18 @@ interface UseAuthorizationOrchestratorResult {
1213
1314
  pendingSelectSourceAction: AuthorizationAction | null;
1214
1315
  /** Complete the pending SELECT_SOURCE action with a chosen source. */
1215
1316
  resolveSelectSource: (selection: SourceSelection) => void;
1317
+ /**
1318
+ * True once an INTERACTIVE SELECT_SOURCE has been resolved during the
1319
+ * current run (i.e. the user picked a token on LinkTokensScreen and tapped
1320
+ * Approve via `resolveSelectSource`). Reset to false at the start of each
1321
+ * `run` and on `cancelPendingFlow`. The `autoResolveSource` path (WC
1322
+ * reauthorization / token authorization) never sets this, because it
1323
+ * resolves SELECT_SOURCE without pausing for the user. Consumed by
1324
+ * StepRenderer to distinguish the post-Approve transient (where the
1325
+ * executor's `currentAction` is still the stale OPEN_PROVIDER from pairing)
1326
+ * from genuine pairing — so OpenWalletScreen doesn't flash after Approve.
1327
+ */
1328
+ sourceSelectionResolved: boolean;
1216
1329
  /** True after the most recent run drained all authorization actions. */
1217
1330
  orchestratorCompleted: boolean;
1218
1331
  /** Cancel any paused setup flow and reject the current orchestrator run. */
@@ -1224,6 +1337,14 @@ interface UseAuthorizationOrchestratorDeps {
1224
1337
  }
1225
1338
  declare function useAuthorizationOrchestrator(deps: UseAuthorizationOrchestratorDeps): UseAuthorizationOrchestratorResult;
1226
1339
 
1340
+ interface WalletAccountChange {
1341
+ previousAddress: string | null;
1342
+ nextAddress: string;
1343
+ connectorId: string;
1344
+ chainId: number | null;
1345
+ accounts: readonly string[];
1346
+ }
1347
+
1227
1348
  interface ReownWallet {
1228
1349
  id: string;
1229
1350
  name: string;
@@ -1261,6 +1382,20 @@ interface PreparedTokenAuthorization {
1261
1382
  providerId: string | null;
1262
1383
  providerName: string;
1263
1384
  depositAmount: number;
1385
+ /**
1386
+ * Present when the target account is WalletConnect-typed. There is no
1387
+ * native wallet deeplink for WC, and the auth-app session URI cannot
1388
+ * execute a WalletConnect session (it would strand the user on a loading
1389
+ * LinkTokensScreen) — committing such a prepared authorization must run
1390
+ * the inline WC orchestrator path in this tab instead. `deeplinkUri` is
1391
+ * empty in this case and must not be navigated to.
1392
+ */
1393
+ walletConnect?: {
1394
+ /** Reown metadata recovered from the session's OPEN_PROVIDER action. */
1395
+ metadata: WalletConnectAccountMetadata | null;
1396
+ /** Wallet name used for open-wallet branding and button copy. */
1397
+ displayName: string;
1398
+ };
1264
1399
  }
1265
1400
 
1266
1401
  /** Snapshot for restoring deposit source after cancelling token reauth / increase-limit subflows. */
@@ -1290,6 +1425,13 @@ interface PaymentState {
1290
1425
  amount: string;
1291
1426
  transfer: Transfer | null;
1292
1427
  creatingTransfer: boolean;
1428
+ /**
1429
+ * True when an SVM transfer's signing window expired (API returned
1430
+ * `SVM_SIGN_PAYLOAD_EXPIRED`). Drives the friendly "sign within 20 seconds"
1431
+ * message + Retry on the processing screen. Cleared when a new attempt
1432
+ * starts or the transfer advances.
1433
+ */
1434
+ signPayloadExpired: boolean;
1293
1435
  passkeyConfigLoaded: boolean;
1294
1436
  activeCredentialId: string | null;
1295
1437
  knownCredentialIds: string[];
@@ -1323,6 +1465,13 @@ interface PaymentState {
1323
1465
  providerId: string | null;
1324
1466
  walletName?: string;
1325
1467
  walletLogoUrl?: string;
1468
+ /**
1469
+ * Bare WalletConnect wallet deeplink (no `wc:` pairing URI) used to
1470
+ * FOREGROUND the already-connected wallet for a signing prompt on mobile.
1471
+ * Powers the manual "Open {wallet}" button on `ApprovingInWalletScreen`.
1472
+ * Distinct from `sessionUri` (the pairing QR/deeplink).
1473
+ */
1474
+ walletForegroundLink?: string;
1326
1475
  } | null;
1327
1476
  /**
1328
1477
  * Active authorization session id for the in-progress wallet-setup flow.
@@ -1417,6 +1566,15 @@ interface PaymentState {
1417
1566
  * — a genuine reopen should re-greet.
1418
1567
  */
1419
1568
  welcomeBackAcknowledged: boolean;
1569
+ /**
1570
+ * Latched `true` once the first accounts fetch resolves (`DATA_LOADED` /
1571
+ * `ACCOUNTS_RELOADED`). Gates fresh-phase derivation for an authenticated
1572
+ * user so we never derive a post-load screen (welcome-back / wallet-picker /
1573
+ * deposit) from the empty initial `accounts` array — that race flashes
1574
+ * `WelcomeBackScreen` before the real screen. Reset on de-auth so a new
1575
+ * session re-shows the loader until its accounts arrive.
1576
+ */
1577
+ initialDataLoaded: boolean;
1420
1578
  }
1421
1579
  interface InitialStateConfig {
1422
1580
  depositAmount: number | null;
@@ -1472,6 +1630,8 @@ interface StepHandlers {
1472
1630
  onCancelLogin: () => void;
1473
1631
  /** Advance a returning user off WelcomeBackScreen toward the wallet picker. */
1474
1632
  onAcknowledgeWelcomeBack: () => void;
1633
+ /** Back from WalletPickerScreen: return a walletless user to WelcomeBackScreen. */
1634
+ onReturnToWelcomeBack: () => void;
1475
1635
  /**
1476
1636
  * Update the in-flow amount-entry value (string display). Called by
1477
1637
  * DepositScreen entry mode on every keypress / preset tap. The view-model
@@ -1486,6 +1646,13 @@ interface StepHandlers {
1486
1646
  onFinalizeAmount: () => void;
1487
1647
  onSetDepositToken: (symbol: string, chainName: string, walletId?: string, tokenAddress?: string, chainId?: number) => void;
1488
1648
  onConfirmSetupDeposit: () => void | Promise<void>;
1649
+ /**
1650
+ * Mobile only: foreground the already-connected WalletConnect wallet from the
1651
+ * signing screen's manual "Open {wallet}" button. Opens the bare wallet
1652
+ * deeplink (no `wc:` URI) so the pending Permit2 prompt surfaces without
1653
+ * re-pairing. Undefined on desktop / when no foreground link is available.
1654
+ */
1655
+ onOpenWalletForeground?: () => void;
1489
1656
  }
1490
1657
  /** Flow identity: reducer state, auth, layout. */
1491
1658
  interface StepRendererFlowProps {
@@ -1533,10 +1700,25 @@ interface StepRendererRemoteProps {
1533
1700
  /** True while `executeSessionById` is running (desktop inline wallet steps). */
1534
1701
  authExecutorExecuting: boolean;
1535
1702
  authExecutorCurrentAction?: AuthorizationAction | null;
1703
+ /** True once a run has drained all authorization actions (orchestrator
1704
+ * completed). Stays true through the post-sign settling window — when
1705
+ * `currentAction` is already null — until the next run resets it. Lets the
1706
+ * approving checklist render all items complete instead of reverting to the
1707
+ * default active state while the next screen loads. */
1708
+ authExecutorCompleted: boolean;
1536
1709
  transferSigningSigning: boolean;
1537
1710
  transferSigningError: string | null;
1538
1711
  transferSigningPasskeyDismissed?: boolean;
1539
1712
  pendingSelectSource: AuthorizationAction | null;
1713
+ /**
1714
+ * True once the user interactively resolved a SELECT_SOURCE this run (picked
1715
+ * a token on LinkTokensScreen and tapped Approve). Distinguishes the
1716
+ * post-Approve transient — where the executor's `currentAction` is still the
1717
+ * stale OPEN_PROVIDER from pairing — from genuine pairing, so OpenWalletScreen
1718
+ * is not re-shown after Approve. False during WC reauthorization auto-resolve
1719
+ * pairing, which keeps OpenWalletScreen visible until the wallet pairs.
1720
+ */
1721
+ sourceSelectionResolved: boolean;
1540
1722
  }
1541
1723
  /** Values derived from accounts / selection (plus select-source picker data). */
1542
1724
  interface StepRendererDerivedProps {
@@ -1548,11 +1730,19 @@ interface StepRendererDerivedProps {
1548
1730
  selectedAccount: Account | undefined;
1549
1731
  selectedSource: WalletSource | null;
1550
1732
  selectSourceChoices: SelectSourceChainChoice[];
1733
+ /** Balances on chains the WalletConnect session did not approve — rendered as disabled "Not supported" rows. */
1734
+ selectSourceUnsupportedChoices: SelectSourceChainChoice[];
1551
1735
  selectSourceRecommended: {
1552
1736
  chainName: string;
1553
1737
  tokenSymbol: string;
1554
1738
  } | null;
1555
1739
  selectSourceAvailableBalance: number;
1740
+ /**
1741
+ * Reown registry chain ids per WalletConnect-typed account id (null =
1742
+ * registry has no opinion, fail open). Used to badge requires-auth deposit
1743
+ * sources on chains the backing wallet cannot authorize.
1744
+ */
1745
+ walletConnectChainIdsByAccount: Record<string, number[] | null>;
1556
1746
  }
1557
1747
  /** Ephemeral form UI state. */
1558
1748
  interface StepRendererFormProps {
@@ -1674,6 +1864,12 @@ interface UseTransferSigningResult {
1674
1864
  * 3. Submits signed UserOp via PATCH /v1/transfers/{id}
1675
1865
  */
1676
1866
  signTransfer: (transferId: string, opts?: SignTransferOptions) => Promise<Transfer>;
1867
+ /**
1868
+ * Regenerates a fresh SVM sign payload for a transfer whose signing window
1869
+ * expired (POST /v1/transfers/{id}/sign-payload), reusing the same transfer
1870
+ * id. Returns the refreshed Transfer carrying the new signPayload.
1871
+ */
1872
+ regenerateSignPayload: (transferId: string) => Promise<Transfer>;
1677
1873
  }
1678
1874
  interface UseTransferSigningOptions {
1679
1875
  /** Optional API base URL override when used outside BlinkProvider. */
@@ -1714,8 +1910,25 @@ interface ScreenLayoutProps {
1714
1910
  * surrounding chrome (heading, banners, CTA) stays pinned. Defaults to true.
1715
1911
  */
1716
1912
  scrollableBody?: boolean;
1913
+ /**
1914
+ * When true, the footer floats over the body instead of taking its own band
1915
+ * at the bottom of the sheet. Its background is a gradient that is
1916
+ * transparent across the top half and fades to the solid sheet color for the
1917
+ * bottom half, so the scroll content peeks through above the CTA while the
1918
+ * button itself sits on a solid base. Only the footer's own children are
1919
+ * interactive — the transparent gutter passes taps and scroll through to the
1920
+ * list below. Screens that opt in must reserve bottom padding in their scroll
1921
+ * container so the last row clears the floating footer. Defaults to false.
1922
+ */
1923
+ floatingFooter?: boolean;
1924
+ /**
1925
+ * When true, the body still scrolls but its scrollbar is visually hidden
1926
+ * (overflow behaviour is unchanged). Use for screens that should never show
1927
+ * scrollbar chrome. Defaults to false.
1928
+ */
1929
+ hideScrollbar?: boolean;
1717
1930
  }
1718
- declare function ScreenLayout({ children, footer, scrollableBody }: ScreenLayoutProps): react_jsx_runtime.JSX.Element;
1931
+ declare function ScreenLayout({ children, footer, scrollableBody, floatingFooter, hideScrollbar }: ScreenLayoutProps): react_jsx_runtime.JSX.Element;
1719
1932
 
1720
1933
  interface ScreenHeaderProps {
1721
1934
  /** Center title text */
@@ -1958,13 +2171,18 @@ interface PasskeyScreenProps {
1958
2171
  declare function PasskeyScreen({ onCreatePasskey, onBack, onLogout, creating, error, popupFallback, onCreatePasskeyViaPopup, onCreateNewPasskey, onCreateNewPasskeyViaPopup, createNewPopupFallback, creatingNewPasskey, }: PasskeyScreenProps): react_jsx_runtime.JSX.Element;
1959
2172
 
1960
2173
  interface PasskeyPopupWelcomeScreenProps {
2174
+ /** Begins passkey creation (Privy signup). */
1961
2175
  onCreatePasskey: () => void;
2176
+ /** When set, renders an "or Sign in with passkey" secondary action for users who already have a passkey. */
2177
+ onSignInWithPasskey?: () => void;
2178
+ /** Disables the actions and shows the primary button's loading state. */
1962
2179
  creating?: boolean;
2180
+ /** Error copy shown in a banner below the hero. */
1963
2181
  error?: string | null;
1964
2182
  onBack?: () => void;
1965
2183
  onLogout?: () => void;
1966
2184
  }
1967
- declare function PasskeyPopupWelcomeScreen({ onCreatePasskey, creating, error, onBack, onLogout, }: PasskeyPopupWelcomeScreenProps): react_jsx_runtime.JSX.Element;
2185
+ declare function PasskeyPopupWelcomeScreen({ onCreatePasskey, onSignInWithPasskey, creating, error, onBack, onLogout, }: PasskeyPopupWelcomeScreenProps): react_jsx_runtime.JSX.Element;
1968
2186
 
1969
2187
  interface VerifyPasskeyScreenProps {
1970
2188
  onVerify: () => void;
@@ -2023,14 +2241,37 @@ interface SetupTokenOption {
2023
2241
  chainId?: number;
2024
2242
  /** Account this token belongs to; used by multi-account pickers to group rows. */
2025
2243
  accountId?: string;
2244
+ /**
2245
+ * Truncated wallet address (from `wallet.name`). One account may own wallets
2246
+ * at several distinct addresses (e.g. multiple Solana accounts under one
2247
+ * Phantom connection); multi-account pickers group rows by address so those
2248
+ * are not collapsed under a single header. EVM wallets share one address per
2249
+ * account, so this yields a single section there.
2250
+ */
2251
+ walletAddress?: string;
2026
2252
  /** Server-provided token logo URI from the catalog. Preferred over the local `TOKEN_LOGOS` map. */
2027
2253
  logoURI?: string | null;
2254
+ /**
2255
+ * WalletConnect-typed account only: the Reown registry says the backing
2256
+ * wallet does not support this token's chain, so authorizing it would
2257
+ * dead-end (the prepare/authorize handlers' pre-filter rejects it).
2258
+ * Rendered as a disabled "Not supported, deposit manually" row. Never set
2259
+ * on AUTHORIZED rows — those deposit via passkey without the wallet.
2260
+ */
2261
+ notSupported?: boolean;
2028
2262
  }
2029
2263
 
2030
2264
  interface LinkTokenEntry {
2031
2265
  tokenSymbol: string;
2032
2266
  chainName: string;
2033
2267
  balanceUsd: number;
2268
+ /**
2269
+ * WalletConnect-only: the connected wallet cannot sign on this token's
2270
+ * chain (missing from both the session's approved chains and the Reown
2271
+ * registry). Renders the "Not supported, deposit manually" pill and makes
2272
+ * the row unselectable.
2273
+ */
2274
+ notSupported?: boolean;
2034
2275
  }
2035
2276
  interface LinkTokensScreenProps {
2036
2277
  entries: LinkTokenEntry[];
@@ -2291,12 +2532,19 @@ interface TransferStatusBaseProps {
2291
2532
  retryLabel?: string;
2292
2533
  retryAfterDelay?: boolean;
2293
2534
  showRetryOnError?: boolean;
2535
+ /**
2536
+ * Presentation of the error message. `error` (default) uses the red error
2537
+ * banner for genuine failures; `info` uses the neutral informational
2538
+ * NotificationBanner for benign, retryable conditions (e.g. an expired SVM
2539
+ * signing window).
2540
+ */
2541
+ errorVariant?: 'error' | 'info';
2294
2542
  }
2295
2543
 
2296
2544
  interface DepositTransferStatusScreenProps extends TransferStatusBaseProps {
2297
2545
  visibleError?: string | null;
2298
2546
  }
2299
- declare function DepositTransferStatusScreen({ phase, error, visibleError, onLogout, onRetry, }: DepositTransferStatusScreenProps): react_jsx_runtime.JSX.Element;
2547
+ declare function DepositTransferStatusScreen({ phase, error, visibleError, errorVariant, onLogout, onRetry, }: DepositTransferStatusScreenProps): react_jsx_runtime.JSX.Element;
2300
2548
 
2301
2549
  interface OpenWalletScreenProps {
2302
2550
  walletName: string | null;
@@ -2330,12 +2578,27 @@ interface ApprovingInWalletScreenProps {
2330
2578
  * 'sign' = approval done (this session or previously) → step 1 checked, step 2 active;
2331
2579
  * 'spl' = single Solana delegate approval (one item). */
2332
2580
  step: 'approve' | 'sign' | 'spl';
2581
+ /** When true, every checklist item renders complete (checked). Set during the
2582
+ * post-sign settling window so the checkmarks persist until the next screen
2583
+ * loads, rather than reverting to the active/pending default. `step` still
2584
+ * selects the shape (one SPL item vs. two EVM items). */
2585
+ complete?: boolean;
2333
2586
  error?: string | null;
2334
2587
  onRetry?: () => void;
2335
2588
  /** Desktop-only escape hatch back to the previous screen. */
2336
2589
  onBack?: () => void;
2337
2590
  /** Desktop-only settings/logout action. */
2338
2591
  onLogout?: () => void;
2592
+ /** Mobile WalletConnect: connected wallet name, for the "Open {wallet}" button. */
2593
+ walletName?: string | null;
2594
+ /**
2595
+ * Mobile WalletConnect: bare wallet deeplink (no `wc:` URI) for the manual
2596
+ * "Open {wallet}" button. Foregrounds the already-connected wallet so the
2597
+ * pending signing prompt surfaces — does NOT re-pair. Absent on desktop.
2598
+ */
2599
+ foregroundDeeplink?: string | null;
2600
+ /** Fires when the user taps "Open {wallet}" (opens `foregroundDeeplink`). */
2601
+ onOpenWallet?: () => void;
2339
2602
  }
2340
2603
  /**
2341
2604
  * Activation surface rendered while the user signs the Permit2 / SPL
@@ -2343,7 +2606,7 @@ interface ApprovingInWalletScreenProps {
2343
2606
  * Shares chrome with LinkTokensScreen (header wordmark, h2 heading, recessed
2344
2607
  * card, footer lock banner) so the link → authorize steps read as one page.
2345
2608
  */
2346
- declare function ApprovingInWalletScreen({ tokenSymbol, chainName, step, error, onRetry, onBack, onLogout, }: ApprovingInWalletScreenProps): react_jsx_runtime.JSX.Element;
2609
+ declare function ApprovingInWalletScreen({ tokenSymbol, chainName, step, complete, error, onRetry, onBack, onLogout, walletName, foregroundDeeplink, onOpenWallet, }: ApprovingInWalletScreenProps): react_jsx_runtime.JSX.Element;
2347
2610
 
2348
2611
  interface ConfirmSignScreenProps {
2349
2612
  walletName: string | null;
@@ -2462,8 +2725,45 @@ declare function replaceOpenProviderForAccountSwitch(input: {
2462
2725
  sessionId: string;
2463
2726
  accounts: readonly string[];
2464
2727
  chainId: number | null;
2728
+ /**
2729
+ * SVM (Phantom) switches pass the new account's base58 pubkey here. The
2730
+ * backend's SVM OPEN_PROVIDER re-report (`generateActionsAfterSvmOpenProvider`)
2731
+ * prefers `userSolanaWalletPubkey` over `accounts[0]`, so passing it
2732
+ * explicitly avoids the dual-mode `accounts[0]` ambiguity. EVM callers omit
2733
+ * it (behavior unchanged).
2734
+ */
2735
+ userSolanaWalletPubkey?: string;
2465
2736
  }): Promise<WalletAccountSwitchResult>;
2466
2737
 
2738
+ interface SolanaAccountSwitchDeps {
2739
+ /** Set to false to detach the listener without unmounting the hook. */
2740
+ enabled?: boolean;
2741
+ /** Called with the next account when a real Solana account change is observed. */
2742
+ onAccountChanged: (change: WalletAccountChange) => void | Promise<void>;
2743
+ }
2744
+ /**
2745
+ * SVM analogue of `useWalletAccountSwitchEffect`. Subscribes to the Solana
2746
+ * wallet runtime's account-change channel (fed by the cached Phantom
2747
+ * adapter's `connect` re-emission when the user switches accounts inside the
2748
+ * wallet) and surfaces a `WalletAccountChange` on a genuine transition.
2749
+ *
2750
+ * The single effect synchronizes with an external system — the module-level
2751
+ * adapter event channel in `solanaWalletRuntime` — so the subscription and
2752
+ * its unsubscribe cleanup are a legitimate `useEffect`.
2753
+ *
2754
+ * Unlike the EVM hook (whose `useAccount` replays the current address on
2755
+ * mount, requiring a silent baseline seed to avoid a spurious null→A switch),
2756
+ * this channel is purely event-driven and the runtime already seeds its
2757
+ * baseline from the connected account at bind time — so it emits *only*
2758
+ * genuine transitions. Every emission is therefore fired through immediately;
2759
+ * the local `baselineRef` exists only to populate `previousAddress` and to
2760
+ * defensively drop a same-pubkey repeat. The emitted change is SVM-shaped —
2761
+ * `chainId: null` and `accounts: [pubkey]` — which the switch helper uses to
2762
+ * route the new Solana pubkey to the backend's preferred
2763
+ * `userSolanaWalletPubkey` field.
2764
+ */
2765
+ declare function useSolanaAccountSwitchEffect(deps: SolanaAccountSwitchDeps): void;
2766
+
2467
2767
  type DebugLevel = 'info' | 'warn' | 'error';
2468
2768
  interface DebugEntry {
2469
2769
  id: number;
@@ -2483,4 +2783,4 @@ declare function clearDebugEntries(): void;
2483
2783
  */
2484
2784
  declare function useBlinkDebugLog(): DebugEntry[];
2485
2785
 
2486
- export { ACCOUNT_SWITCH_CONFLICT_MESSAGE, type Account, type ActionExecutionResult, type AdvancedSettings, AdvancedSourceScreen, type Amount, ApprovingInWalletScreen, type ApprovingInWalletScreenProps, type AuthorizationAction, type AuthorizationSession, AuthorizationSessionCancelledError, type AuthorizationSessionDetail, BLINK_ERROR_ILLUSTRATION, BLINK_LOGO, BLINK_MASCOT, BLINK_PASSKEY_ILLUSTRATION, BLINK_SUCCESS_ILLUSTRATION, 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, 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 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 WalletAccountSwitchResult, type WalletCapabilities, type WalletCapabilitiesDebugSnapshot, type WalletDeeplink, WalletPickerScreen, type WalletSource, type WalletToken, WelcomeBackScreen, appendDebug, api as blinkApi, clearDebugEntries, createInitialState, credentialIdBase64ToBytes, darkTheme, darkThemeNew, darkTransparentTheme, darkTransparentThemeNew, deviceHasPasskey, encodePermit2ApproveCalldata, findDevicePasskey, findDevicePasskeyViaPopup, getAtomicBatchSupportDebugInfo, getDebugEntries, getDeviceBiometricUnlockText, getTheme, getThemeBase, getWalletCapabilities, isAuthorizationSessionCancelled, isExpectedAuthorizationCancellation, isTerminalTransferStatus, isTransferAwaitingCompletion, isTransparentTheme, isUserDismissedAuthorizationError, isVisibleUsdAmountAtTwoDecimals, lightTheme, lightThemeNew, lightTransparentTheme, lightTransparentThemeNew, mapGuestPickerEntries, replaceOpenProviderForAccountSwitch, resolvePasskeyRpId, screenForPhase, subscribeDebug, supportsAtomicBatch, supportsPaymasterService, useAuthorizationExecutor, useAuthorizationOrchestrator, useBlinkConfig, useBlinkDebugLog, useBlinkDepositAmount, useTransferPolling, useTransferSigning };
2786
+ export { ACCOUNT_SWITCH_CONFLICT_MESSAGE, type Account, type ActionExecutionResult, type AdvancedSettings, AdvancedSourceScreen, type Amount, ApprovingInWalletScreen, type ApprovingInWalletScreenProps, type AuthorizationAction, type AuthorizationSession, AuthorizationSessionCancelledError, type AuthorizationSessionDetail, BLINK_ERROR_ILLUSTRATION, BLINK_LOGO, BLINK_MASCOT, BLINK_PASSKEY_ILLUSTRATION, BLINK_SUCCESS_ILLUSTRATION, 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, 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, clearDebugEntries, createInitialState, credentialIdBase64ToBytes, darkTheme, darkThemeNew, darkTransparentTheme, darkTransparentThemeNew, deviceHasPasskey, encodePermit2ApproveCalldata, findDevicePasskey, findDevicePasskeyViaPopup, getAtomicBatchSupportDebugInfo, getDebugEntries, getDeviceBiometricUnlockText, getTheme, getThemeBase, getWalletCapabilities, isAuthorizationSessionCancelled, isExpectedAuthorizationCancellation, isTerminalTransferStatus, isTransferAwaitingCompletion, isTransparentTheme, isUserDismissedAuthorizationError, isVisibleUsdAmountAtTwoDecimals, lightTheme, lightThemeNew, lightTransparentTheme, lightTransparentThemeNew, mapGuestPickerEntries, replaceOpenProviderForAccountSwitch, resolvePasskeyRpId, screenForPhase, subscribeDebug, supportsAtomicBatch, supportsPaymasterService, useAuthorizationExecutor, useAuthorizationOrchestrator, useBlinkConfig, useBlinkDebugLog, useBlinkDepositAmount, useSolanaAccountSwitchEffect, useTransferPolling, useTransferSigning };