@funkit/connect 3.4.1 → 3.4.3

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.
Files changed (28) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/consts/mesh.d.ts +1 -1
  3. package/dist/index.css +2 -1
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +164 -112
  6. package/dist/modals/CheckoutModal/LoadingAccount.d.ts +1 -1
  7. package/dist/modals/CheckoutModal/TransferToken.d.ts +4 -5
  8. package/dist/utils/assets.d.ts +15 -1
  9. package/dist/wallets/walletConnectors/index.js +53 -53
  10. package/package.json +4 -4
  11. package/dist/wallets/walletConnectors/chunk-25VW5TZP.js +0 -92
  12. package/dist/wallets/walletConnectors/chunk-4HKPVECK.js +0 -95
  13. package/dist/wallets/walletConnectors/chunk-4K3EKHXR.js +0 -71
  14. package/dist/wallets/walletConnectors/chunk-57UUMOOZ.js +0 -95
  15. package/dist/wallets/walletConnectors/chunk-5MVCKMZT.js +0 -94
  16. package/dist/wallets/walletConnectors/chunk-5NZLWT3Y.js +0 -73
  17. package/dist/wallets/walletConnectors/chunk-B5D7DYVV.js +0 -101
  18. package/dist/wallets/walletConnectors/chunk-HCKLWBE5.js +0 -98
  19. package/dist/wallets/walletConnectors/chunk-HLH777AC.js +0 -108
  20. package/dist/wallets/walletConnectors/chunk-HMDUVRZP.js +0 -98
  21. package/dist/wallets/walletConnectors/chunk-IR3YKU2N.js +0 -103
  22. package/dist/wallets/walletConnectors/chunk-J2BF4L2V.js +0 -87
  23. package/dist/wallets/walletConnectors/chunk-KDGMYRMC.js +0 -102
  24. package/dist/wallets/walletConnectors/chunk-OKUX4BC4.js +0 -66
  25. package/dist/wallets/walletConnectors/chunk-VU6B3HMD.js +0 -96
  26. package/dist/wallets/walletConnectors/chunk-WAMHUVNP.js +0 -96
  27. package/dist/wallets/walletConnectors/chunk-YRK6XWL6.js +0 -149
  28. package/dist/wallets/walletConnectors/chunk-ZCKNEKQQ.js +0 -110
package/dist/index.js CHANGED
@@ -508,7 +508,7 @@ import PrivyJS, {
508
508
  } from "@privy-io/js-sdk-core";
509
509
  import React188, {
510
510
  createContext as createContext16,
511
- useCallback as useCallback34,
511
+ useCallback as useCallback35,
512
512
  useContext as useContext18,
513
513
  useEffect as useEffect37,
514
514
  useMemo as useMemo35,
@@ -1021,7 +1021,7 @@ var useInitialChainId = () => useContext4(FunkitConnectChainContext).initialChai
1021
1021
  // src/providers/ModalContext.tsx
1022
1022
  import React187, {
1023
1023
  createContext as createContext15,
1024
- useCallback as useCallback33,
1024
+ useCallback as useCallback34,
1025
1025
  useContext as useContext17,
1026
1026
  useEffect as useEffect36,
1027
1027
  useMemo as useMemo34,
@@ -1635,7 +1635,7 @@ var MeshExchanges = /* @__PURE__ */ ((MeshExchanges4) => {
1635
1635
  MeshExchanges4["Bitfinex"] = "Bitfinex";
1636
1636
  MeshExchanges4["KrakenDirect"] = "KrakenDirect";
1637
1637
  MeshExchanges4["Vanguard"] = "Vanguard";
1638
- MeshExchanges4["BitfinexDirect"] = "BitfinexDirect";
1638
+ MeshExchanges4["BitfinexDirect"] = "Bitfinex (beta)";
1639
1639
  MeshExchanges4["Bybit"] = "Bybit";
1640
1640
  return MeshExchanges4;
1641
1641
  })(MeshExchanges || {});
@@ -1670,7 +1670,7 @@ var EXCHANGE_NAME_TO_TYPE = {
1670
1670
  ["KrakenDirect" /* KrakenDirect */]: "krakenDirect",
1671
1671
  ["Vanguard" /* Vanguard */]: "vanguard",
1672
1672
  ["Bybit" /* Bybit */]: "bybit",
1673
- ["BitfinexDirect" /* BitfinexDirect */]: "bitfinexDirect"
1673
+ ["Bitfinex (beta)" /* BitfinexDirect */]: "bitfinexDirect"
1674
1674
  };
1675
1675
 
1676
1676
  // src/utils/flags/config.ts
@@ -1688,7 +1688,7 @@ var flagConfig = {
1688
1688
  default_value: [
1689
1689
  "Coinbase" /* Coinbase */,
1690
1690
  "Binance" /* Binance */,
1691
- "Bitfinex" /* Bitfinex */
1691
+ "Bitfinex (beta)" /* BitfinexDirect */
1692
1692
  ].join(",")
1693
1693
  },
1694
1694
  ["blocked_countries" /* BlockedCountries */]: {
@@ -3131,25 +3131,29 @@ var PENDING_QUOTE_MESSAGE_GENERATOR = {
3131
3131
  [2 /* ESTIMATING_GAS */]: () => "Estimating gas...",
3132
3132
  [3 /* FINALIZING */]: () => "Finalizing your quote..."
3133
3133
  };
3134
- var DEFAULT_QUOTE_ERROR = "No route found. Please retry.";
3134
+ var DEFAULT_QUOTE_ERROR = "An error occurred during quote generation. Please retry.";
3135
3135
  var QUOTE_API_ERROR_STRING_INFO = {
3136
- [0 /* NO_ROUTE_FOUND */]: {
3136
+ [0 /* NO_ROUTE_FOUND_1 */]: {
3137
3137
  check: "No available route found",
3138
3138
  display: DEFAULT_QUOTE_ERROR
3139
3139
  },
3140
- [1 /* INSUFFICIENT_AMOUNT_GENERAL_1 */]: {
3140
+ [1 /* NO_ROUTE_FOUND_2 */]: {
3141
+ check: "Error estimating checkout cost and time",
3142
+ display: DEFAULT_QUOTE_ERROR
3143
+ },
3144
+ [2 /* INSUFFICIENT_AMOUNT_GENERAL_1 */]: {
3141
3145
  check: "try to increase the amount",
3142
3146
  display: "Checkout amount is too low. Please retry."
3143
3147
  },
3144
- [2 /* INSUFFICIENT_AMOUNT_GENERAL_2 */]: {
3148
+ [3 /* INSUFFICIENT_AMOUNT_GENERAL_2 */]: {
3145
3149
  check: "try increase the amount",
3146
3150
  display: "Checkout amount is too low. Please retry."
3147
3151
  },
3148
- [3 /* INSUFFICIENT_AMOUNT_FOR_BRDIGE_1 */]: {
3152
+ [4 /* INSUFFICIENT_AMOUNT_FOR_BRDIGE_1 */]: {
3149
3153
  check: "target token must be at least",
3150
3154
  display: "Checkout amount is too low. Please retry."
3151
3155
  },
3152
- [4 /* INSUFFICIENT_AMOUNT_FOR_BRDIGE_2 */]: {
3156
+ [5 /* INSUFFICIENT_AMOUNT_FOR_BRDIGE_2 */]: {
3153
3157
  check: "Bridge min amount not met",
3154
3158
  display: "Checkout amount is too low. Please retry."
3155
3159
  }
@@ -3855,13 +3859,13 @@ function hackTimeEstimationForImportantCustomer(originalTimeEstimation, paymentM
3855
3859
  }
3856
3860
  switch (paymentMethod) {
3857
3861
  case "balance" /* ACCOUNT_BALANCE */:
3858
- return 2 * 60;
3862
+ return 1 * 60;
3859
3863
  case "brokerage" /* BROKERAGE */:
3860
3864
  return 4 * 60;
3861
3865
  case "card" /* CARD */:
3862
3866
  return 5 * 60;
3863
3867
  case "token_transfer" /* TOKEN_TRANSFER */:
3864
- return originalTimeEstimation;
3868
+ return 2 * 60;
3865
3869
  default:
3866
3870
  return exhaustiveCheck(paymentMethod);
3867
3871
  }
@@ -9221,7 +9225,7 @@ var MESH_EXCHANGE_ICON_MAP = {
9221
9225
  ["CexIo" /* CexIo */]: (size) => /* @__PURE__ */ React97.createElement(CexloIcon, { size }),
9222
9226
  ["OKX" /* Okx */]: (size) => /* @__PURE__ */ React97.createElement(OkxIcon, { size }),
9223
9227
  ["Bitfinex" /* Bitfinex */]: (size) => /* @__PURE__ */ React97.createElement(BitfinexIcon, { size }),
9224
- ["BitfinexDirect" /* BitfinexDirect */]: (size) => /* @__PURE__ */ React97.createElement(BitfinexIcon, { size }),
9228
+ ["Bitfinex (beta)" /* BitfinexDirect */]: (size) => /* @__PURE__ */ React97.createElement(BitfinexIcon, { size }),
9225
9229
  ["ETrade" /* ETrade */]: (size) => /* @__PURE__ */ React97.createElement(EtradeIcon, { size }),
9226
9230
  ["Kraken" /* Kraken */]: (size) => /* @__PURE__ */ React97.createElement(KrakenIcon, { size }),
9227
9231
  ["KrakenDirect" /* KrakenDirect */]: (size) => /* @__PURE__ */ React97.createElement(KrakenIcon, { size }),
@@ -9565,7 +9569,10 @@ var statusNamingMap = {
9565
9569
  function StatusTag({ state, refundState, isDelayed }) {
9566
9570
  const { status, isCompleted } = useCheckoutStateBooleans(state);
9567
9571
  const color = isCompleted ? "success" : "secondaryText";
9568
- return /* @__PURE__ */ React99.createElement(Text, { color, size: "12", weight: "medium" }, refundState === "REFUNDED" ? "Refunded" : isDelayed ? "Pending" : statusNamingMap[status]);
9572
+ return /* @__PURE__ */ React99.createElement(Text, { color, size: "12", weight: "medium" }, refundState === "REFUNDED" ? "Refunded" : (
9573
+ // With some hardcoded timings in `FunCheckoutStatus`, it is possible for isDelayed to stay true while isCompleted is already true
9574
+ isDelayed && !isCompleted ? "Pending" : statusNamingMap[status]
9575
+ ));
9569
9576
  }
9570
9577
  var ReceivedAmount = ({ config }) => {
9571
9578
  const targetAmount = getCheckoutItemDisplay(config);
@@ -11476,13 +11483,36 @@ var getAssetSymbolWithMaxUsdValue = ({
11476
11483
  var L1_FEES_ESTIMATE = 20;
11477
11484
  var L2_FEES_ESTIMATE = 1;
11478
11485
  var L2_COST_MARGIN_MULTIPLIER = 1.2;
11479
- var getFeesUsdEstimate = (checkoutItem, asset) => {
11486
+ var MESH_L1_FEES_ESTIMATE = 8;
11487
+ var MESH_L2_FEES_ESTIMATE = 2;
11488
+ var MESH_CUSTOM_CLIENT_FEE_PERCENT = 0.055;
11489
+ var getMeshFeesUsdEstimate = (asset) => {
11490
+ let meshFeeEstimate = 0;
11491
+ meshFeeEstimate += (asset.usdAmount || 0) * MESH_CUSTOM_CLIENT_FEE_PERCENT;
11492
+ const sourceChainId = asset.pickedChainId;
11493
+ if (sourceChainId === mainnet4.id.toString()) {
11494
+ meshFeeEstimate += MESH_L1_FEES_ESTIMATE;
11495
+ } else {
11496
+ meshFeeEstimate += MESH_L2_FEES_ESTIMATE;
11497
+ }
11498
+ return meshFeeEstimate;
11499
+ };
11500
+ var getBaseFeeUsdEstimate = (checkoutItem, asset) => {
11480
11501
  const targetChainId = checkoutItem.initSettings.config.targetChain;
11481
11502
  const sourceChainId = asset.pickedChainId;
11482
11503
  if (targetChainId !== mainnet4.id.toString() && sourceChainId !== mainnet4.id.toString()) {
11483
11504
  return L2_FEES_ESTIMATE;
11505
+ } else {
11506
+ return L1_FEES_ESTIMATE;
11507
+ }
11508
+ };
11509
+ var getFeesUsdEstimate = (checkoutItem, asset) => {
11510
+ let feeEstimate = 0;
11511
+ feeEstimate += getBaseFeeUsdEstimate(checkoutItem, asset);
11512
+ if (checkoutItem.selectedPaymentMethodInfo?.paymentMethod === "brokerage" /* BROKERAGE */) {
11513
+ feeEstimate += getMeshFeesUsdEstimate(asset);
11484
11514
  }
11485
- return L1_FEES_ESTIMATE;
11515
+ return feeEstimate;
11486
11516
  };
11487
11517
  var isAssetUsdAmountSufficient = (checkoutItem, asset) => {
11488
11518
  if (!isNotNullish(asset?.usdAmount)) {
@@ -12537,10 +12567,10 @@ import { getRiskAssessmentForAddress } from "@funkit/api-base";
12537
12567
  import { useQuery as useQuery4 } from "@tanstack/react-query";
12538
12568
  var BLOCKED_RISK_LEVELS = ["Severe", "High"];
12539
12569
  var hasRisk = async (apiKey, walletAddress, customRecipient) => {
12540
- const getUserWalletRisk = getRiskAssessmentForAddress({
12570
+ const getUserWalletRisk = walletAddress ? getRiskAssessmentForAddress({
12541
12571
  address: walletAddress,
12542
12572
  apiKey
12543
- }).then((assessment) => assessment?.risk);
12573
+ }).then((assessment) => assessment?.risk) : null;
12544
12574
  const getRecipientWalletRisk = customRecipient ? getRiskAssessmentForAddress({
12545
12575
  address: customRecipient,
12546
12576
  apiKey
@@ -12549,8 +12579,14 @@ var hasRisk = async (apiKey, walletAddress, customRecipient) => {
12549
12579
  getUserWalletRisk,
12550
12580
  getRecipientWalletRisk
12551
12581
  ]);
12552
- logger.log("addressRiskAssessments", addressRisks);
12553
- return addressRisks.some((risk) => BLOCKED_RISK_LEVELS.includes(risk || ""));
12582
+ const isCheckoutRisky = addressRisks.some(
12583
+ (risk) => BLOCKED_RISK_LEVELS.includes(risk || "")
12584
+ );
12585
+ logger.log("riskAssessment_isCheckoutRisky", {
12586
+ isCheckoutRisky,
12587
+ addressRisks
12588
+ });
12589
+ return isCheckoutRisky;
12554
12590
  };
12555
12591
  var useIsCheckoutRisky = (checkoutItem) => {
12556
12592
  const { walletAddress } = useGeneralWallet();
@@ -12841,7 +12877,7 @@ function CheckoutComplete({ modalState, onClose }) {
12841
12877
 
12842
12878
  // src/modals/CheckoutModal/ConfirmationStep.tsx
12843
12879
  import { ClientError as ClientError3, meshPreviewTransfer as meshPreviewTransfer2 } from "@funkit/api-base";
12844
- import React182, { useCallback as useCallback32, useEffect as useEffect35, useMemo as useMemo33, useState as useState49 } from "react";
12880
+ import React182, { useCallback as useCallback33, useEffect as useEffect35, useMemo as useMemo33, useState as useState49 } from "react";
12845
12881
  import { createPortal as createPortal9 } from "react-dom";
12846
12882
  import { isAddress as isAddress3 } from "viem";
12847
12883
 
@@ -14350,6 +14386,9 @@ function FunPaymentMethods({
14350
14386
  if (selectablePaymentMethods.includes("balance" /* ACCOUNT_BALANCE */) && hasSufficientBalance2) {
14351
14387
  return "balance" /* ACCOUNT_BALANCE */;
14352
14388
  }
14389
+ if (selectablePaymentMethods.includes("token_transfer" /* TOKEN_TRANSFER */)) {
14390
+ return "token_transfer" /* TOKEN_TRANSFER */;
14391
+ }
14353
14392
  if (selectablePaymentMethods.includes("card" /* CARD */)) {
14354
14393
  return "card" /* CARD */;
14355
14394
  }
@@ -14381,7 +14420,7 @@ function FunPaymentMethods({
14381
14420
  const { textCustomizations } = useFunkitConfig();
14382
14421
  const onClickContinue = useCallback20(async () => {
14383
14422
  setIsContinuing(true);
14384
- const executeContinue = async () => {
14423
+ const executeContinue = () => {
14385
14424
  if (canContinue && selectedOption === "card" /* CARD */ && apiKey === POLYMARKET_API_KEY) {
14386
14425
  onPolymarketCardSwitchWrapper();
14387
14426
  return;
@@ -14419,7 +14458,7 @@ function FunPaymentMethods({
14419
14458
  }
14420
14459
  };
14421
14460
  try {
14422
- await executeContinue();
14461
+ executeContinue();
14423
14462
  } finally {
14424
14463
  setIsContinuing(false);
14425
14464
  }
@@ -14758,7 +14797,7 @@ function CheckoutPrimaryInfo({
14758
14797
  }
14759
14798
 
14760
14799
  // src/modals/CheckoutModal/stepTransition.ts
14761
- import { useCallback as useCallback30, useRef as useRef15, useState as useState48 } from "react";
14800
+ import { useCallback as useCallback31, useRef as useRef15, useState as useState48 } from "react";
14762
14801
 
14763
14802
  // src/hooks/useCheckoutQuoteNotification.ts
14764
14803
  import { useMemo as useMemo22 } from "react";
@@ -15800,6 +15839,7 @@ function InputAmountLoaded({
15800
15839
  inputProps: {
15801
15840
  type: isInputInUsd ? "text" : "number",
15802
15841
  autoFocus: true,
15842
+ disabled: isQuoting,
15803
15843
  // get ios to use numpad key with period
15804
15844
  inputMode: "decimal"
15805
15845
  },
@@ -15828,6 +15868,7 @@ function InputAmountLoaded({
15828
15868
  FunIconButton,
15829
15869
  {
15830
15870
  icon: /* @__PURE__ */ React154.createElement(SwitchIcon, null),
15871
+ isDisabled: isQuoting,
15831
15872
  paddingY: "1",
15832
15873
  paddingX: "6",
15833
15874
  color: { base: "actionColor", hover: "actionColorHover" },
@@ -15842,6 +15883,7 @@ function InputAmountLoaded({
15842
15883
  !!usdAvailableAmount && USD_AMOUNT_OPTIONS_PCT.map((percent) => /* @__PURE__ */ React154.createElement(
15843
15884
  FunIconButton,
15844
15885
  {
15886
+ isDisabled: isQuoting,
15845
15887
  fontSize: "14",
15846
15888
  fontWeight: "medium",
15847
15889
  icon: null,
@@ -16333,11 +16375,6 @@ function loadingAccountNext(state, payload) {
16333
16375
  step: "select_asset" /* SELECT_ASSET */,
16334
16376
  paymentMethodInfo: payload.paymentMethodInfo
16335
16377
  };
16336
- case "token_transfer" /* TOKEN_TRANSFER */:
16337
- return {
16338
- ...state,
16339
- step: "transfer_token" /* TRANSFER_TOKEN */
16340
- };
16341
16378
  default:
16342
16379
  return {
16343
16380
  ...state,
@@ -16359,7 +16396,6 @@ function LoadingAccount({
16359
16396
  onNext
16360
16397
  }) {
16361
16398
  const { apiKey } = useFunkitConfig();
16362
- const { isLoading: isLoadingFlags, flags } = useFlags();
16363
16399
  const { walletAddress } = useGeneralWallet();
16364
16400
  const { targetChainId } = modalState;
16365
16401
  const { isLoading: isFetchingAssets, totalWalletAssetsUsd } = useWalletAssets(
@@ -16372,9 +16408,7 @@ function LoadingAccount({
16372
16408
  connection
16373
16409
  );
16374
16410
  const { updateSelectedPaymentMethodInfo } = useCheckoutContext();
16375
- const isTokenTransferEnabled = flags?.["enable_token_transfer" /* EnableTokenTransfer */];
16376
16411
  useEffect30(() => {
16377
- if (isLoadingFlags) return;
16378
16412
  if (totalWalletAssetsUsd >= USABLE_AMOUNT) {
16379
16413
  const paymentMethodInfo = createPaymentMethodInfo({
16380
16414
  paymentMethod: "balance" /* ACCOUNT_BALANCE */,
@@ -16386,7 +16420,9 @@ function LoadingAccount({
16386
16420
  usablePaymentMethod: "balance" /* ACCOUNT_BALANCE */,
16387
16421
  paymentMethodInfo
16388
16422
  });
16389
- } else if (connection && hasNonZeroDollarToken(data)) {
16423
+ return;
16424
+ }
16425
+ if (connection && hasNonZeroDollarToken(data)) {
16390
16426
  const paymentMethodInfo = createPaymentMethodInfo({
16391
16427
  paymentMethod: "brokerage" /* BROKERAGE */,
16392
16428
  brokerage: connection.brokerage,
@@ -16398,27 +16434,19 @@ function LoadingAccount({
16398
16434
  usablePaymentMethod: "brokerage" /* BROKERAGE */,
16399
16435
  paymentMethodInfo
16400
16436
  });
16401
- } else if (isTokenTransferEnabled && apiKey === POLYMARKET_API_KEY) {
16402
- const paymentMethodInfo = createPaymentMethodInfo({
16403
- paymentMethod: "token_transfer" /* TOKEN_TRANSFER */
16404
- });
16405
- updateSelectedPaymentMethodInfo(paymentMethodInfo);
16406
- onNext({
16407
- step: "loading_account" /* LOADING_ACCOUNT */,
16408
- usablePaymentMethod: "token_transfer" /* TOKEN_TRANSFER */
16409
- });
16410
- } else if (!isLoadingMesh && !isFetchingAssets) {
16411
- onNext({
16412
- step: "loading_account" /* LOADING_ACCOUNT */,
16413
- usablePaymentMethod: null
16414
- });
16437
+ return;
16438
+ }
16439
+ if (isLoadingMesh || isFetchingAssets) {
16440
+ return;
16415
16441
  }
16442
+ onNext({
16443
+ step: "loading_account" /* LOADING_ACCOUNT */,
16444
+ usablePaymentMethod: null
16445
+ });
16416
16446
  }, [
16417
16447
  walletAddress,
16418
16448
  isLoadingMesh,
16419
- isLoadingFlags,
16420
16449
  apiKey,
16421
- isTokenTransferEnabled,
16422
16450
  isFetchingAssets,
16423
16451
  data,
16424
16452
  onNext,
@@ -16616,6 +16644,7 @@ function MeshVerification({
16616
16644
  setExecutionError(transferResponse.errorMessage || "");
16617
16645
  break;
16618
16646
  case MeshExecuteTransferStatus.emailConfirmationRequired:
16647
+ case MeshExecuteTransferStatus.emailConfirmationApprovalRequired:
16619
16648
  setScreen(3 /* EMAIL_CONFIRMATION */);
16620
16649
  break;
16621
16650
  case MeshExecuteTransferStatus.deviceConfirmationRequired:
@@ -16659,6 +16688,7 @@ function MeshVerification({
16659
16688
  case MeshExecuteTransferStatus.deviceConfirmationRequired:
16660
16689
  return "Device confirmation required";
16661
16690
  case MeshExecuteTransferStatus.emailConfirmationRequired:
16691
+ case MeshExecuteTransferStatus.emailConfirmationApprovalRequired:
16662
16692
  return "Email confirmation required";
16663
16693
  case MeshExecuteTransferStatus.addressWhitelistRequired:
16664
16694
  return "Manual whitelist required";
@@ -16675,6 +16705,7 @@ function MeshVerification({
16675
16705
  case MeshExecuteTransferStatus.deviceConfirmationRequired:
16676
16706
  return `Open the ${exchange} app and verify your transaction. After you've approved this transaction, click \u201CContinue.\u201D`;
16677
16707
  case MeshExecuteTransferStatus.emailConfirmationRequired:
16708
+ case MeshExecuteTransferStatus.emailConfirmationApprovalRequired:
16678
16709
  return `Click the link sent to your email to confirm this transaction. Click \u201CContinue\u201D after you've approved this transaction.`;
16679
16710
  case MeshExecuteTransferStatus.addressWhitelistRequired:
16680
16711
  return `Go to ${exchange} to manually whitelist your address. After you've whitelisted this address you can retry your transaction.`;
@@ -17641,7 +17672,8 @@ var sourceChangeNext = (state, payload) => {
17641
17672
  if (payload.paymentMethod === "token_transfer" /* TOKEN_TRANSFER */) {
17642
17673
  return {
17643
17674
  ...common,
17644
- step: "transfer_token" /* TRANSFER_TOKEN */
17675
+ step: "transfer_token" /* TRANSFER_TOKEN */,
17676
+ prevPaymentMethodInfo: state.paymentMethodInfo
17645
17677
  };
17646
17678
  }
17647
17679
  throw new Error("Invalid payment method");
@@ -17826,7 +17858,7 @@ function useRemainingMeshExchangeConnections(selected) {
17826
17858
  }
17827
17859
 
17828
17860
  // src/modals/CheckoutModal/TransferToken.tsx
17829
- import React181, { useState as useState47 } from "react";
17861
+ import React181, { useCallback as useCallback30, useState as useState47 } from "react";
17830
17862
  import { mainnet as mainnet6, polygon as polygon3 } from "viem/chains";
17831
17863
 
17832
17864
  // src/components/Dropdown/TokenDropdown.tsx
@@ -18205,13 +18237,13 @@ var useCheckoutTransferDepositAddress = (checkoutItem, userId, recipientAddr) =>
18205
18237
  };
18206
18238
 
18207
18239
  // src/modals/CheckoutModal/TransferToken.tsx
18208
- function transferTokenNext(state, payload) {
18240
+ function transferTokenNext(state, _) {
18209
18241
  const common = extractCommonState(state);
18210
- if (payload.isLoggedIn && payload.paymentMethodInfo) {
18242
+ if (state.prevPaymentMethodInfo) {
18211
18243
  return {
18212
18244
  ...common,
18213
18245
  step: "source_change" /* SOURCE_CHANGE */,
18214
- paymentMethodInfo: payload.paymentMethodInfo
18246
+ paymentMethodInfo: state.prevPaymentMethodInfo
18215
18247
  };
18216
18248
  }
18217
18249
  return {
@@ -18267,21 +18299,28 @@ function CircleWithText({ text }) {
18267
18299
  /* @__PURE__ */ React181.createElement(Text, { size: "13", color: "accentColor", weight: "bold" }, text)
18268
18300
  );
18269
18301
  }
18270
- function TransferToken({ onNext }) {
18302
+ var TRANSFER_TOKEN_LOG_PREFIX = "transferToken";
18303
+ function TransferToken({ onBack }) {
18271
18304
  const filteredAssets = useEnabledTokenTransferChainTokens();
18272
- const { textCustomizations } = useFunkitConfig();
18273
18305
  const [selectedChainId, setSelectedChainId] = useState47(polygon3.id);
18274
18306
  const selectedChainInfo = chainMetadataById[selectedChainId];
18275
18307
  const [selectedToken, setSelectedToken] = useState47(
18276
18308
  filteredAssets?.[selectedChainId]?.[0] || ""
18277
18309
  );
18278
- const {
18279
- depositAddress,
18280
- minTransferUsd,
18281
- showOriginalRecipient,
18282
- recipientAddr
18283
- } = useTokenTransfer(selectedChainId, selectedToken);
18310
+ const { depositAddress, minTransferUsd, showOriginalRecipient } = useTokenTransfer(selectedChainId, selectedToken);
18284
18311
  const isLoadingDepositAddress = depositAddress === void 0;
18312
+ const onHelp = useCallback30(() => {
18313
+ logger.log(`${TRANSFER_TOKEN_LOG_PREFIX}_getHelpClicked`, {
18314
+ selectedChainId,
18315
+ selectedToken,
18316
+ depositAddress
18317
+ });
18318
+ window.open(
18319
+ "https://intercom.help/funxyz/en/articles/10003876-direct-deposit-guide-faqs",
18320
+ "_blank",
18321
+ "noopener,noreferrer"
18322
+ );
18323
+ }, [depositAddress, selectedChainId, selectedToken]);
18285
18324
  return /* @__PURE__ */ React181.createElement(Box, { id: "token-transfer-page" }, /* @__PURE__ */ React181.createElement(
18286
18325
  Box,
18287
18326
  {
@@ -18291,16 +18330,6 @@ function TransferToken({ onNext }) {
18291
18330
  justifyContent: "center",
18292
18331
  gap: "14"
18293
18332
  },
18294
- /* @__PURE__ */ React181.createElement(Box, { display: "flex", flexDirection: "column", width: "full" }, /* @__PURE__ */ React181.createElement(
18295
- FunPaymentMethodItem,
18296
- {
18297
- isSource: true,
18298
- keyText: textCustomizations.transferTokens,
18299
- disclaimerText: "No limit",
18300
- keyIcon: /* @__PURE__ */ React181.createElement(LightningBoltIcon, null),
18301
- onClick: () => onNext({ step: "transfer_token" /* TRANSFER_TOKEN */ })
18302
- }
18303
- )),
18304
18333
  /* @__PURE__ */ React181.createElement(Box, { display: "flex", alignItems: "center", justifyContent: "center" }, isLoadingDepositAddress ? /* @__PURE__ */ React181.createElement(
18305
18334
  Box,
18306
18335
  {
@@ -18367,7 +18396,15 @@ function TransferToken({ onNext }) {
18367
18396
  ChainDropdown_default,
18368
18397
  {
18369
18398
  assets: filteredAssets,
18370
- onChainSelected: (chainId) => setSelectedChainId(chainId)
18399
+ onChainSelected: (chainId) => {
18400
+ logger.log(`${TRANSFER_TOKEN_LOG_PREFIX}_changeChain`, {
18401
+ previousChainId: selectedChainId,
18402
+ newChainId: chainId,
18403
+ selectedToken,
18404
+ depositAddress
18405
+ });
18406
+ setSelectedChainId(chainId);
18407
+ }
18371
18408
  }
18372
18409
  )
18373
18410
  ),
@@ -18386,7 +18423,15 @@ function TransferToken({ onNext }) {
18386
18423
  {
18387
18424
  selectedChainId,
18388
18425
  assets: filteredAssets,
18389
- onTokenSelected: (token) => setSelectedToken(token)
18426
+ onTokenSelected: (token) => {
18427
+ logger.log(`${TRANSFER_TOKEN_LOG_PREFIX}_changeToken`, {
18428
+ previousToken: selectedToken,
18429
+ newToken: token,
18430
+ selectedChainId,
18431
+ depositAddress
18432
+ });
18433
+ setSelectedToken(token);
18434
+ }
18390
18435
  }
18391
18436
  )
18392
18437
  ),
@@ -18403,7 +18448,13 @@ function TransferToken({ onNext }) {
18403
18448
  /* @__PURE__ */ React181.createElement(Text, { size: "12", color: "primaryText", weight: "medium" }, minTransferUsd === 0 ? "No minimum" : formatCurrencyAndStringify(minTransferUsd))
18404
18449
  )
18405
18450
  ),
18406
- showOriginalRecipient ? null : /* @__PURE__ */ React181.createElement(Box, { display: "flex", flexDirection: "column", gap: "14" }, /* @__PURE__ */ React181.createElement(Text, { size: "12", color: "secondaryText", weight: "medium" }, "Transfer ", selectedToken, " (", selectedChainInfo.name, ") to the deposit address above. The equivalent USD value (minus fees) will be automatically deposited into your account within ~60 seconds."), /* @__PURE__ */ React181.createElement(
18451
+ showOriginalRecipient ? null : /* @__PURE__ */ React181.createElement(Box, { display: "flex", flexDirection: "column", gap: "14", width: "full" }, /* @__PURE__ */ React181.createElement(Text, { size: "12", color: "secondaryText", weight: "medium" }, "Transfer ", selectedToken, " (", selectedChainInfo.name, ") to the deposit address above. The equivalent USD value (minus fees) will be automatically deposited into your account within ~60 seconds."), /* @__PURE__ */ React181.createElement(
18452
+ FunAlert,
18453
+ {
18454
+ icon: /* @__PURE__ */ React181.createElement(FunInfoIcon, null),
18455
+ description: /* @__PURE__ */ React181.createElement(Box, { display: "flex" }, /* @__PURE__ */ React181.createElement(Text, { size: "10", color: "secondaryText" }, "Experiencing problems?"), /* @__PURE__ */ React181.createElement(FunLinkButton, { text: "Get help.", onClick: onHelp }))
18456
+ }
18457
+ ), /* @__PURE__ */ React181.createElement(
18407
18458
  Text,
18408
18459
  {
18409
18460
  size: "10",
@@ -18492,7 +18543,7 @@ function initialState(checkoutItem) {
18492
18543
  function useCheckoutModalTransition(checkoutItem, onClose) {
18493
18544
  const [modalState, setModalState] = useState48(() => initialState(checkoutItem));
18494
18545
  const { clearCheckoutQuoteMessages } = useCheckoutQuoteNotification();
18495
- const onCloseWrapper = useCallback30(() => {
18546
+ const onCloseWrapper = useCallback31(() => {
18496
18547
  checkoutItem.initSettings.onClose?.();
18497
18548
  logger.log("closingCheckoutModal", {
18498
18549
  checkoutStep: modalState.step,
@@ -18503,7 +18554,7 @@ function useCheckoutModalTransition(checkoutItem, onClose) {
18503
18554
  }, [checkoutItem, modalState.step, onClose]);
18504
18555
  const { animateOut, navigateTo } = useAnimatedNavigation(setModalState);
18505
18556
  const stateHistory = useRef15([]);
18506
- const onNext = useCallback30(
18557
+ const onNext = useCallback31(
18507
18558
  (payload) => {
18508
18559
  clearCheckoutQuoteMessages();
18509
18560
  stateHistory.current.push(modalState);
@@ -18512,7 +18563,7 @@ function useCheckoutModalTransition(checkoutItem, onClose) {
18512
18563
  },
18513
18564
  [modalState, navigateTo, clearCheckoutQuoteMessages]
18514
18565
  );
18515
- const onBack = useCallback30(() => {
18566
+ const onBack = useCallback31(() => {
18516
18567
  clearCheckoutQuoteMessages();
18517
18568
  const prevState = stateHistory.current.pop();
18518
18569
  if (prevState) {
@@ -18601,7 +18652,7 @@ function useTitleConfig(checkoutItem, state) {
18601
18652
  };
18602
18653
  case "transfer_token" /* TRANSFER_TOKEN */:
18603
18654
  return {
18604
- hasBack: false,
18655
+ hasBack: true,
18605
18656
  title: textCustomizations.transferTokens,
18606
18657
  showFullHeight: false
18607
18658
  };
@@ -18613,7 +18664,7 @@ function useTitleConfig(checkoutItem, state) {
18613
18664
  // src/modals/CheckoutModal/useAccountBalancePostCheckout.ts
18614
18665
  import { getPaymasterDataForCheckoutSponsoredTransfer } from "@funkit/api-base";
18615
18666
  import { ERC20_ABI, USDT_ABI } from "@funkit/core";
18616
- import { useCallback as useCallback31 } from "react";
18667
+ import { useCallback as useCallback32 } from "react";
18617
18668
  import { useAccount as useAccount8, useSendTransaction, useWriteContract } from "wagmi";
18618
18669
 
18619
18670
  // src/utils/isMainnetUsdt.ts
@@ -18630,7 +18681,7 @@ function useWeb3AccountBalancePostCheckout(setPostCheckoutStepMessage) {
18630
18681
  const { writeContractAsync } = useWriteContract();
18631
18682
  const { sendTransactionAsync } = useSendTransaction();
18632
18683
  const { cancelCheckout, checkoutItem } = useCheckoutContext();
18633
- const handleWeb3AccountBalancePostCheckout = useCallback31(
18684
+ const handleWeb3AccountBalancePostCheckout = useCallback32(
18634
18685
  async (depositAddress) => {
18635
18686
  if (!checkoutItem?.latestQuote?.baseQuote.estTotalFromAmountBaseUnit) {
18636
18687
  return;
@@ -18725,7 +18776,7 @@ function useWeb3AccountBalancePostCheckout(setPostCheckoutStepMessage) {
18725
18776
  function useWeb2AccountBalancePostCheckout(apiKey) {
18726
18777
  const { checkoutItem } = useCheckoutContext();
18727
18778
  const { generateCheckoutTransferOpItems } = useCheckoutAccountBalanceTransfer();
18728
- const handleWeb2AccountBalancePostCheckout = useCallback31(
18779
+ const handleWeb2AccountBalancePostCheckout = useCallback32(
18729
18780
  async (depositAddress) => {
18730
18781
  const { rFunWallet, rFunWalletAuth, transferOp, envConfig } = await generateCheckoutTransferOpItems(
18731
18782
  depositAddress,
@@ -18773,7 +18824,7 @@ function useAccountBalancePostCheckout(setPostCheckoutStepMessage, apiKey) {
18773
18824
  const { isWeb2Login, isWeb3Login } = useGeneralWallet();
18774
18825
  const handleWeb2AccountBalancePostCheckout = useWeb2AccountBalancePostCheckout(apiKey);
18775
18826
  const handleWeb3AccountBalancePostCheckout = useWeb3AccountBalancePostCheckout(setPostCheckoutStepMessage);
18776
- const handleAccountBalancePostCheckout = useCallback31(
18827
+ const handleAccountBalancePostCheckout = useCallback32(
18777
18828
  async (depositAddress) => {
18778
18829
  if (isWeb2Login) {
18779
18830
  await handleWeb2AccountBalancePostCheckout(depositAddress);
@@ -18877,7 +18928,7 @@ function ConfirmationStep({
18877
18928
  const [postCheckoutError, setPostCheckoutError] = useState49();
18878
18929
  const hasPostCheckoutError = postCheckoutError !== void 0;
18879
18930
  const isContinuing = isConfirming || isPostCheckoutLoading;
18880
- const handleMeshPostCheckout = useCallback32(
18931
+ const handleMeshPostCheckout = useCallback33(
18881
18932
  async (depositAddress) => {
18882
18933
  if (!funkitConfig.apiKey) {
18883
18934
  throw new Error("Invalid funkit apiKey");
@@ -18991,11 +19042,11 @@ function ConfirmationStep({
18991
19042
  setTimeout(() => setPostCheckoutError(void 0), timeMs);
18992
19043
  }
18993
19044
  };
18994
- const restartCountdown = useCallback32(() => {
19045
+ const restartCountdown = useCallback33(() => {
18995
19046
  setCountdownKey((key) => key + 1);
18996
19047
  setIsBeforeRegeneratingQuote(false);
18997
19048
  }, []);
18998
- const refreshQuote = useCallback32(async () => {
19049
+ const refreshQuote = useCallback33(async () => {
18999
19050
  singletonCheckoutAbort.abort("Abort checkout data pre-loading");
19000
19051
  singletonCheckoutAbort.setAbortController(new AbortController());
19001
19052
  try {
@@ -19016,7 +19067,7 @@ function ConfirmationStep({
19016
19067
  restartCountdown,
19017
19068
  setCheckoutQuote
19018
19069
  ]);
19019
- const onClickConfirm = useCallback32(async () => {
19070
+ const onClickConfirm = useCallback33(async () => {
19020
19071
  if (!checkoutItem) {
19021
19072
  return;
19022
19073
  }
@@ -19403,16 +19454,16 @@ function FunCheckoutHistoryModal({
19403
19454
  function useModalStateValue() {
19404
19455
  const [isModalOpen, setModalOpen] = useState51(false);
19405
19456
  return {
19406
- closeModal: useCallback33(() => setModalOpen(false), []),
19457
+ closeModal: useCallback34(() => setModalOpen(false), []),
19407
19458
  isModalOpen,
19408
- openModal: useCallback33(() => setModalOpen(true), [])
19459
+ openModal: useCallback34(() => setModalOpen(true), [])
19409
19460
  };
19410
19461
  }
19411
19462
  function useModalStateValueWithProp() {
19412
19463
  const [isModalOpen, setModalOpen] = useState51(false);
19413
19464
  const [prop, setProp] = useState51(null);
19414
19465
  return {
19415
- closeModal: useCallback33(() => {
19466
+ closeModal: useCallback34(() => {
19416
19467
  setTimeout(() => {
19417
19468
  setProp(null);
19418
19469
  }, DialogAnimationTimeOut);
@@ -19420,7 +19471,7 @@ function useModalStateValueWithProp() {
19420
19471
  }, []),
19421
19472
  isModalOpen,
19422
19473
  prop,
19423
- openModal: useCallback33((prop2) => {
19474
+ openModal: useCallback34((prop2) => {
19424
19475
  if (prop2 != null) setProp(prop2);
19425
19476
  setModalOpen(true);
19426
19477
  }, [])
@@ -19906,7 +19957,7 @@ var FunkitWeb2Provider = ({
19906
19957
  const [isLoggingIn, setIsLoggingIn] = useState52(false);
19907
19958
  const [loginErrorMessage, setLoginErrorMessage] = useState52("");
19908
19959
  const [loggedInUser, setLoggedInUser] = useState52(null);
19909
- const setLoginMethodAndCache = useCallback34(
19960
+ const setLoginMethodAndCache = useCallback35(
19910
19961
  (method) => {
19911
19962
  try {
19912
19963
  setLoginMethod(method);
@@ -19930,7 +19981,7 @@ var FunkitWeb2Provider = ({
19930
19981
  setPrivyIframeUrl(newPrivy.embeddedWallet.getURL());
19931
19982
  setPrivy(newPrivy);
19932
19983
  }, [chains]);
19933
- const handleIframeMessage = useCallback34(
19984
+ const handleIframeMessage = useCallback35(
19934
19985
  (e) => {
19935
19986
  if (e.origin === PRIVY_AUTH_URL && privy) {
19936
19987
  const iframeHandler = privy.embeddedWallet.getMessageHandler();
@@ -19939,7 +19990,7 @@ var FunkitWeb2Provider = ({
19939
19990
  },
19940
19991
  [privy]
19941
19992
  );
19942
- const handleFunkitWeb2Logout = useCallback34(async () => {
19993
+ const handleFunkitWeb2Logout = useCallback35(async () => {
19943
19994
  if (privy) {
19944
19995
  logger.log("handleFunkitWeb2Logout_disconnecting_connectors", {
19945
19996
  numConnectors: connectors.length
@@ -19952,7 +20003,7 @@ var FunkitWeb2Provider = ({
19952
20003
  setLoginMethodAndCache(null);
19953
20004
  }
19954
20005
  }, [connectors, disconnectAsync, privy, setLoginMethodAndCache]);
19955
- const handleFreshPrivyLogin = useCallback34(
20006
+ const handleFreshPrivyLogin = useCallback35(
19956
20007
  async ({
19957
20008
  firstLoginCode,
19958
20009
  secondLoginCode,
@@ -19998,7 +20049,7 @@ var FunkitWeb2Provider = ({
19998
20049
  },
19999
20050
  [handleFunkitWeb2Logout, privy]
20000
20051
  );
20001
- const getPrivyUserEmbeddedWallet = useCallback34(
20052
+ const getPrivyUserEmbeddedWallet = useCallback35(
20002
20053
  async (inputPrivyUser) => {
20003
20054
  try {
20004
20055
  if (!privy || !inputPrivyUser)
@@ -20017,7 +20068,7 @@ var FunkitWeb2Provider = ({
20017
20068
  },
20018
20069
  [privy]
20019
20070
  );
20020
- const getExistingPrivySession = useCallback34(async () => {
20071
+ const getExistingPrivySession = useCallback35(async () => {
20021
20072
  try {
20022
20073
  if (!privy) throw new Error(ERROR_MESSAGES.PRIVY_NOT_INITIALIZED);
20023
20074
  const existingSession = await privy.user.get();
@@ -20026,7 +20077,7 @@ var FunkitWeb2Provider = ({
20026
20077
  return null;
20027
20078
  }
20028
20079
  }, [privy]);
20029
- const handleFunkitWeb2Login = useCallback34(
20080
+ const handleFunkitWeb2Login = useCallback35(
20030
20081
  async ({
20031
20082
  chainId,
20032
20083
  firstLoginCode,
@@ -20099,9 +20150,9 @@ var FunkitWeb2Provider = ({
20099
20150
  wallets
20100
20151
  ]
20101
20152
  );
20102
- const clearLoginError = useCallback34(() => setLoginErrorMessage(""), []);
20153
+ const clearLoginError = useCallback35(() => setLoginErrorMessage(""), []);
20103
20154
  const initChainId = useInitialChainId();
20104
- const handleAutoLoginFlows = useCallback34(async () => {
20155
+ const handleAutoLoginFlows = useCallback35(async () => {
20105
20156
  if (isNotNullish(loginMethod) && isNotNullish(initChainId)) {
20106
20157
  const queryParams = new URLSearchParams(window.location.search);
20107
20158
  const oauthCode = queryParams.get(PRIVY_OAUTH_CODE_URL_PARAM);
@@ -20143,7 +20194,7 @@ var FunkitWeb2Provider = ({
20143
20194
  initChainId
20144
20195
  // Do not include `handleAutoLoginFlows`,
20145
20196
  ]);
20146
- const handleOauthRedirect = useCallback34(
20197
+ const handleOauthRedirect = useCallback35(
20147
20198
  async (authProvider) => {
20148
20199
  if (!privy) throw new Error(ERROR_MESSAGES.PRIVY_NOT_INITIALIZED);
20149
20200
  try {
@@ -20167,7 +20218,7 @@ var FunkitWeb2Provider = ({
20167
20218
  [privy, setLoginMethodAndCache]
20168
20219
  );
20169
20220
  const [isSendingOtpEmail, setIsSendingOtpEmail] = useState52(false);
20170
- const handleSendOtpEmail = useCallback34(
20221
+ const handleSendOtpEmail = useCallback35(
20171
20222
  async (emailAddress) => {
20172
20223
  try {
20173
20224
  if (!privy) throw new Error(ERROR_MESSAGES.PRIVY_NOT_INITIALIZED);
@@ -20194,7 +20245,7 @@ var FunkitWeb2Provider = ({
20194
20245
  [privy, setLoginMethodAndCache]
20195
20246
  );
20196
20247
  const [isGeneratingFcUri, setIsGeneratingFcUri] = useState52(false);
20197
- const handleGenerateFcUri = useCallback34(async () => {
20248
+ const handleGenerateFcUri = useCallback35(async () => {
20198
20249
  try {
20199
20250
  if (!privy) throw new Error(ERROR_MESSAGES.PRIVY_NOT_INITIALIZED);
20200
20251
  setIsGeneratingFcUri(true);
@@ -20219,7 +20270,7 @@ var FunkitWeb2Provider = ({
20219
20270
  setIsGeneratingFcUri(false);
20220
20271
  }
20221
20272
  }, [privy]);
20222
- const getFcConnectionStatus = useCallback34(
20273
+ const getFcConnectionStatus = useCallback35(
20223
20274
  async (channelToken) => {
20224
20275
  try {
20225
20276
  if (!privy) throw new Error(ERROR_MESSAGES.PRIVY_NOT_INITIALIZED);
@@ -20353,7 +20404,7 @@ import React190 from "react";
20353
20404
  import { useAccount as useAccount12, useBalance, useConfig as useConfig6 } from "wagmi";
20354
20405
 
20355
20406
  // src/hooks/useIsMounted.ts
20356
- import { useCallback as useCallback35, useEffect as useEffect38, useState as useState54 } from "react";
20407
+ import { useCallback as useCallback36, useEffect as useEffect38, useState as useState54 } from "react";
20357
20408
  function useIsMounted() {
20358
20409
  const [isMounted, setIsMounted] = useState54(false);
20359
20410
  useEffect38(() => {
@@ -20362,7 +20413,7 @@ function useIsMounted() {
20362
20413
  setIsMounted(false);
20363
20414
  };
20364
20415
  }, []);
20365
- return useCallback35(() => isMounted, [isMounted]);
20416
+ return useCallback36(() => isMounted, [isMounted]);
20366
20417
  }
20367
20418
 
20368
20419
  // src/components/ConnectButton/abbreviateETHBalance.ts
@@ -21230,16 +21281,16 @@ var defaultAppInfo = {
21230
21281
  var AppContext = createContext18(defaultAppInfo);
21231
21282
 
21232
21283
  // src/providers/useFingerprint.ts
21233
- import { useCallback as useCallback36, useEffect as useEffect40 } from "react";
21284
+ import { useCallback as useCallback37, useEffect as useEffect40 } from "react";
21234
21285
  var storageKey5 = "funkit-connect-version";
21235
21286
  function setFunkitConnectVersion({ version }) {
21236
21287
  localStorage.setItem(storageKey5, version);
21237
21288
  }
21238
21289
  function getCurrentSdkVersion() {
21239
- return "__buildVersion";
21290
+ return "3.4.3";
21240
21291
  }
21241
21292
  function useFingerprint() {
21242
- const fingerprint = useCallback36(() => {
21293
+ const fingerprint = useCallback37(() => {
21243
21294
  setFunkitConnectVersion({ version: getCurrentSdkVersion() });
21244
21295
  }, []);
21245
21296
  useEffect40(() => {
@@ -21248,7 +21299,7 @@ function useFingerprint() {
21248
21299
  }
21249
21300
 
21250
21301
  // src/providers/usePreloadImages.ts
21251
- import { useCallback as useCallback37, useEffect as useEffect41 } from "react";
21302
+ import { useCallback as useCallback38, useEffect as useEffect41 } from "react";
21252
21303
 
21253
21304
  // src/components/Icons/Assets.tsx
21254
21305
  import React194 from "react";
@@ -21264,7 +21315,7 @@ var preloadLoginIcon = () => loadImages(src2);
21264
21315
  function usePreloadImages() {
21265
21316
  const funkitConnectChains = useFunkitConnectChains();
21266
21317
  const walletConnectors = useWalletConnectors();
21267
- const preloadImages = useCallback37(() => {
21318
+ const preloadImages = useCallback38(() => {
21268
21319
  loadImages(
21269
21320
  ...walletConnectors.map((wallet) => wallet.iconUrl),
21270
21321
  ...funkitConnectChains.map((chain) => chain.iconUrl).filter(isNotNullish)
@@ -21428,6 +21479,7 @@ export {
21428
21479
  useCheckoutListenerByCheckoutId,
21429
21480
  useCheckoutsListenerByUserId,
21430
21481
  useConnectModal,
21482
+ useConnectionStatus,
21431
21483
  useFunkitAccount,
21432
21484
  useFunkitCheckout,
21433
21485
  useFunkitDisconnect,