@funkit/connect 6.14.1 → 6.14.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 (29) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/consts/funkit.d.ts +1 -0
  3. package/dist/hooks/useCheckoutAccountBalanceTransfer.d.ts +1 -1
  4. package/dist/hooks/useCheckoutDirectExecution.d.ts +2 -1
  5. package/dist/hooks/useIsTokenWhitelisted.d.ts +30 -0
  6. package/dist/index.css +2 -2
  7. package/dist/index.js +551 -470
  8. package/dist/utils/checkout.d.ts +2 -1
  9. package/dist/utils/flags/config.d.ts +1 -9
  10. package/dist/wallets/walletConnectors/bifrostWallet/bifrostWallet.js +2 -2
  11. package/dist/wallets/walletConnectors/bitgetWallet/bitgetWallet.js +2 -2
  12. package/dist/wallets/walletConnectors/bybitWallet/bybitWallet.js +2 -2
  13. package/dist/wallets/walletConnectors/clvWallet/clvWallet.js +2 -2
  14. package/dist/wallets/walletConnectors/coin98Wallet/coin98Wallet.js +2 -2
  15. package/dist/wallets/walletConnectors/coreWallet/coreWallet.js +2 -2
  16. package/dist/wallets/walletConnectors/foxWallet/foxWallet.js +2 -2
  17. package/dist/wallets/walletConnectors/frontierWallet/frontierWallet.js +2 -2
  18. package/dist/wallets/walletConnectors/gateWallet/gateWallet.js +2 -2
  19. package/dist/wallets/walletConnectors/index.js +64 -64
  20. package/dist/wallets/walletConnectors/metaMaskWallet/metaMaskWallet.js +2 -2
  21. package/dist/wallets/walletConnectors/okxWallet/okxWallet.js +2 -2
  22. package/dist/wallets/walletConnectors/rainbowWallet/rainbowWallet.js +2 -2
  23. package/dist/wallets/walletConnectors/roninWallet/roninWallet.js +2 -2
  24. package/dist/wallets/walletConnectors/safepalWallet/safepalWallet.js +2 -2
  25. package/dist/wallets/walletConnectors/subWallet/subWallet.js +2 -2
  26. package/dist/wallets/walletConnectors/tokenPocketWallet/tokenPocketWallet.js +2 -2
  27. package/dist/wallets/walletConnectors/trustWallet/trustWallet.js +2 -2
  28. package/dist/wallets/walletConnectors/zerionWallet/zerionWallet.js +2 -2
  29. package/package.json +7 -7
package/dist/index.js CHANGED
@@ -519,13 +519,13 @@ import PrivyJS, {
519
519
  } from "@privy-io/js-sdk-core";
520
520
  import React227, {
521
521
  createContext as createContext17,
522
- useCallback as useCallback48,
522
+ useCallback as useCallback49,
523
523
  useContext as useContext17,
524
524
  useEffect as useEffect54,
525
- useMemo as useMemo41,
525
+ useMemo as useMemo42,
526
526
  useState as useState71
527
527
  } from "react";
528
- import { useConfig as useConfig6, useConnect as useConnect2, useDisconnect as useDisconnect2 } from "wagmi";
528
+ import { useConfig as useConfig7, useConnect as useConnect2, useDisconnect as useDisconnect2 } from "wagmi";
529
529
 
530
530
  // src/components/ConnectButton/formatAccountName.ts
531
531
  function formatAccountName(accountName, isEmail) {
@@ -565,7 +565,8 @@ var PLACEHOLDER_FUNKIT_USER_INFO = {
565
565
  nameTruncated: "Guest",
566
566
  type: "unknown",
567
567
  typeLabel: "",
568
- iconSrc: ""
568
+ iconSrc: "",
569
+ isConnected: false
569
570
  };
570
571
 
571
572
  // src/utils/funLogger.ts
@@ -824,6 +825,7 @@ function useFunkitConfig() {
824
825
  // src/providers/provideFunkitConnectChains.ts
825
826
  import {
826
827
  BITCOIN_MAINNET_CHAIN_ID,
828
+ ETHEREAL_CHAIN_ID,
827
829
  HYPERCORE_CHAIN_ID,
828
830
  HYPER_EVM_CHAIN_ID,
829
831
  KATANA_CHAIN_ID,
@@ -870,6 +872,10 @@ var ethereumIcon = {
870
872
  iconBackground: "#484c50",
871
873
  iconUrl: "https://sdk-cdn.fun.xyz/images/ethereum.svg"
872
874
  };
875
+ var etherealIcon = {
876
+ iconBackground: "#000000",
877
+ iconUrl: "https://sdk-cdn.fun.xyz/images/ethereal.svg"
878
+ };
873
879
  var hardhatIcon = {
874
880
  iconBackground: "#f9f7ec",
875
881
  iconUrl: "https://sdk-cdn.fun.xyz/images/hardhat.svg"
@@ -954,6 +960,7 @@ var chainMetadataByName = {
954
960
  bscTestnet: { chainId: 97, name: "BSC Testnet", ...bscIcon },
955
961
  cronos: { chainId: 25, name: "Cronos", ...cronosIcon },
956
962
  cronosTestnet: { chainId: 338, name: "Cronos Testnet", ...cronosIcon },
963
+ ethereal: { chainId: ETHEREAL_CHAIN_ID, name: "Ethereal", ...etherealIcon },
957
964
  goerli: { chainId: 5, name: "Goerli", ...ethereumIcon },
958
965
  hardhat: { chainId: 31337, name: "Hardhat", ...hardhatIcon },
959
966
  holesky: { chainId: 17e3, name: "Holesky", ...ethereumIcon },
@@ -1080,13 +1087,13 @@ var useInitialChainId = () => useContext4(FunkitConnectChainContext).initialChai
1080
1087
  // src/providers/ModalContext.tsx
1081
1088
  import React226, {
1082
1089
  createContext as createContext16,
1083
- useCallback as useCallback47,
1090
+ useCallback as useCallback48,
1084
1091
  useContext as useContext16,
1085
1092
  useEffect as useEffect53,
1086
- useMemo as useMemo40,
1093
+ useMemo as useMemo41,
1087
1094
  useState as useState70
1088
1095
  } from "react";
1089
- import { useAccount as useAccount10, useAccountEffect as useAccountEffect2, useConfig as useConfig5 } from "wagmi";
1096
+ import { useAccount as useAccount10, useAccountEffect as useAccountEffect2, useConfig as useConfig6 } from "wagmi";
1090
1097
 
1091
1098
  // src/components/Dialog/Dialog.css.ts
1092
1099
  var DialogAnimationTimeIn = 0.25;
@@ -1172,7 +1179,7 @@ import {
1172
1179
  import { isNotNullish as isNotNullish3 } from "@funkit/utils";
1173
1180
  import React14, {
1174
1181
  createContext as createContext10,
1175
- useCallback as useCallback8,
1182
+ useCallback as useCallback9,
1176
1183
  useContext as useContext10,
1177
1184
  useEffect as useEffect8,
1178
1185
  useRef as useRef2,
@@ -1229,7 +1236,7 @@ import {
1229
1236
  } from "@funkit/core";
1230
1237
  import {
1231
1238
  formatCryptoAndStringify,
1232
- isTokenAddressEquivalent as isTokenAddressEquivalent3,
1239
+ isTokenAddressEquivalent as isTokenAddressEquivalent4,
1233
1240
  round as round2,
1234
1241
  roundUpToXDecimalPlaces
1235
1242
  } from "@funkit/utils";
@@ -1683,7 +1690,8 @@ function GeneralWalletProvider({ children }) {
1683
1690
  nameTruncated: ensName ? formatENS(ensName) : formatAddress2(address),
1684
1691
  type: "eoa",
1685
1692
  typeLabel: connector?.name || "",
1686
- iconSrc: ensAvatar || ""
1693
+ iconSrc: ensAvatar || "",
1694
+ isConnected: true
1687
1695
  };
1688
1696
  }
1689
1697
  return PLACEHOLDER_FUNKIT_USER_INFO;
@@ -2112,10 +2120,10 @@ import {
2112
2120
  initializeCheckout as postApiInitializeCheckout
2113
2121
  } from "@funkit/api-base";
2114
2122
  import { FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO3 } from "@funkit/chains";
2115
- import { FlagKey as FlagKey5, isNotNullish as isNotNullish2 } from "@funkit/utils";
2123
+ import { FlagKey as FlagKey6, isNotNullish as isNotNullish2 } from "@funkit/utils";
2116
2124
  import React13, {
2117
2125
  createContext as createContext9,
2118
- useCallback as useCallback7,
2126
+ useCallback as useCallback8,
2119
2127
  useContext as useContext9,
2120
2128
  useEffect as useEffect7,
2121
2129
  useState as useState6
@@ -2126,8 +2134,9 @@ import { v4 as uuid } from "uuid";
2126
2134
  // src/hooks/useCheckoutDirectExecution.ts
2127
2135
  import { DirectExecutionType, getCheckoutQuoteV2 } from "@funkit/api-base";
2128
2136
  import { executeRelayQuote } from "@funkit/fun-relay";
2129
- import { useCallback as useCallback4 } from "react";
2130
- import { useWalletClient } from "wagmi";
2137
+ import { FlagKey as FlagKey4 } from "@funkit/utils";
2138
+ import { useCallback as useCallback5 } from "react";
2139
+ import { useConfig as useConfig2, useWalletClient } from "wagmi";
2131
2140
 
2132
2141
  // src/consts/checkout.ts
2133
2142
  var CHECKOUT_STEP_MESSAGE = {
@@ -2144,48 +2153,10 @@ var WEB3_ACCOUNT_BALANCE_MESSAGE = {
2144
2153
  [2 /* APPROVE_TRANSFER */]: (tokenSymbol) => `Confirm ${tokenSymbol} transfer`
2145
2154
  };
2146
2155
 
2147
- // src/hooks/useRelayBypass.ts
2148
- import { FlagKey as FlagKey3, isTokenAddressEquivalent as isTokenAddressEquivalent2 } from "@funkit/utils";
2156
+ // src/hooks/useIsTokenWhitelisted.ts
2157
+ import { isTokenAddressEquivalent as isTokenAddressEquivalent2 } from "@funkit/utils";
2149
2158
  import { useCallback as useCallback3, useMemo as useMemo7 } from "react";
2150
2159
 
2151
- // src/consts/customers.ts
2152
- import {
2153
- BANKR_API_KEY,
2154
- BASED_API_KEY,
2155
- BSX_API_KEY,
2156
- ETHEREAL_API_KEY,
2157
- HYPERBEAT_API_KEY,
2158
- KALSHI_API_KEY,
2159
- KATANA_API_KEY,
2160
- MONKEY_TILT_API_KEY,
2161
- OSTIUM_API_KEY,
2162
- POLYMARKET_API_KEY
2163
- } from "@funkit/api-base";
2164
- function isPolymarketCustomer(apiKey) {
2165
- return apiKey === POLYMARKET_API_KEY;
2166
- }
2167
- function isOstiumCustomer(apiKey) {
2168
- return apiKey === OSTIUM_API_KEY;
2169
- }
2170
- function isBankrCustomer(apiKey) {
2171
- return apiKey === BANKR_API_KEY;
2172
- }
2173
- function isEtherealCustomer(apiKey) {
2174
- return apiKey === ETHEREAL_API_KEY;
2175
- }
2176
- function isKatanaCustomer(apiKey) {
2177
- return apiKey === KATANA_API_KEY;
2178
- }
2179
- function isHyperbeatCustomer(apiKey) {
2180
- return apiKey === HYPERBEAT_API_KEY;
2181
- }
2182
- function isBasedCustomer(apiKey) {
2183
- return apiKey === BASED_API_KEY;
2184
- }
2185
- function isKalshiCustomer(apiKey) {
2186
- return apiKey === KALSHI_API_KEY;
2187
- }
2188
-
2189
2160
  // src/providers/FunkitFlagsProvider.tsx
2190
2161
  import { datadogLogs as datadogLogs2 } from "@datadog/browser-logs";
2191
2162
  import { useQuery as useQuery2 } from "@tanstack/react-query";
@@ -2198,19 +2169,19 @@ import React12, {
2198
2169
 
2199
2170
  // src/utils/flags/config.ts
2200
2171
  import {
2201
- BANKR_API_KEY as BANKR_API_KEY2,
2202
- BASED_API_KEY as BASED_API_KEY2,
2172
+ BANKR_API_KEY,
2173
+ BASED_API_KEY,
2203
2174
  CAMBRIA_API_KEY,
2204
2175
  DEGEN_API_KEY,
2205
2176
  DEV_API_KEY as DEV_API_KEY2,
2206
- HYPERBEAT_API_KEY as HYPERBEAT_API_KEY2,
2177
+ HYPERBEAT_API_KEY,
2207
2178
  HYPERDASH_API_KEY,
2208
2179
  HYPERSWAP_API_KEY,
2209
- KALSHI_API_KEY as KALSHI_API_KEY2,
2210
- KATANA_API_KEY as KATANA_API_KEY2,
2211
- MONKEY_TILT_API_KEY as MONKEY_TILT_API_KEY2,
2212
- OSTIUM_API_KEY as OSTIUM_API_KEY2,
2213
- POLYMARKET_API_KEY as POLYMARKET_API_KEY2,
2180
+ KALSHI_API_KEY,
2181
+ KATANA_API_KEY,
2182
+ MONKEY_TILT_API_KEY,
2183
+ OSTIUM_API_KEY,
2184
+ POLYMARKET_API_KEY,
2214
2185
  SUSHI_API_KEY,
2215
2186
  VENTUALS_API_KEY
2216
2187
  } from "@funkit/api-base";
@@ -2299,7 +2270,7 @@ var flagConfig = {
2299
2270
  {
2300
2271
  key: "apiKey",
2301
2272
  type: "isAnyOf",
2302
- values: [DEGEN_API_KEY, BANKR_API_KEY2, BASED_API_KEY2]
2273
+ values: [DEGEN_API_KEY, BANKR_API_KEY, BASED_API_KEY]
2303
2274
  }
2304
2275
  ],
2305
2276
  // Do not block US for Degen, since its still pure slow flow
@@ -2313,7 +2284,7 @@ var flagConfig = {
2313
2284
  {
2314
2285
  key: "apiKey",
2315
2286
  type: "isAnyOf",
2316
- values: [POLYMARKET_API_KEY2, KATANA_API_KEY2, KALSHI_API_KEY2]
2287
+ values: [POLYMARKET_API_KEY, KATANA_API_KEY, KALSHI_API_KEY]
2317
2288
  }
2318
2289
  ],
2319
2290
  // Turn off geoblock for PM / Katana / Kalshi on our end.
@@ -2340,7 +2311,7 @@ var flagConfig = {
2340
2311
  {
2341
2312
  key: "apiKey",
2342
2313
  type: "isAnyOf",
2343
- values: [KATANA_API_KEY2]
2314
+ values: [KATANA_API_KEY]
2344
2315
  }
2345
2316
  ],
2346
2317
  value: true
@@ -2357,18 +2328,18 @@ var flagConfig = {
2357
2328
  key: "apiKey",
2358
2329
  type: "isAnyOf",
2359
2330
  values: [
2360
- POLYMARKET_API_KEY2,
2361
- OSTIUM_API_KEY2,
2362
- BANKR_API_KEY2,
2363
- BASED_API_KEY2,
2364
- KATANA_API_KEY2,
2331
+ POLYMARKET_API_KEY,
2332
+ OSTIUM_API_KEY,
2333
+ BANKR_API_KEY,
2334
+ BASED_API_KEY,
2335
+ KATANA_API_KEY,
2365
2336
  CAMBRIA_API_KEY,
2366
- HYPERBEAT_API_KEY2,
2337
+ HYPERBEAT_API_KEY,
2367
2338
  HYPERSWAP_API_KEY,
2368
2339
  HYPERDASH_API_KEY,
2369
- MONKEY_TILT_API_KEY2,
2340
+ MONKEY_TILT_API_KEY,
2370
2341
  VENTUALS_API_KEY,
2371
- KALSHI_API_KEY2
2342
+ KALSHI_API_KEY
2372
2343
  ]
2373
2344
  }
2374
2345
  ],
@@ -2413,8 +2384,8 @@ var flagConfig = {
2413
2384
  type: "isAnyOf",
2414
2385
  values: [
2415
2386
  DEV_API_KEY2,
2416
- POLYMARKET_API_KEY2,
2417
- OSTIUM_API_KEY2
2387
+ POLYMARKET_API_KEY,
2388
+ OSTIUM_API_KEY
2418
2389
  // HYPERBEAT_API_KEY,
2419
2390
  // HYPERDASH_API_KEY,
2420
2391
  // BASED_API_KEY,
@@ -2473,10 +2444,10 @@ var flagConfig = {
2473
2444
  key: "apiKey",
2474
2445
  type: "isAnyOf",
2475
2446
  values: [
2476
- POLYMARKET_API_KEY2,
2477
- OSTIUM_API_KEY2,
2478
- BANKR_API_KEY2,
2479
- KATANA_API_KEY2
2447
+ POLYMARKET_API_KEY,
2448
+ OSTIUM_API_KEY,
2449
+ BANKR_API_KEY,
2450
+ KATANA_API_KEY
2480
2451
  ]
2481
2452
  }
2482
2453
  ],
@@ -2500,7 +2471,7 @@ var flagConfig = {
2500
2471
  {
2501
2472
  key: "apiKey",
2502
2473
  type: "isAnyOf",
2503
- values: [OSTIUM_API_KEY2]
2474
+ values: [OSTIUM_API_KEY]
2504
2475
  }
2505
2476
  ],
2506
2477
  value: arbitrum.id.toString()
@@ -2510,7 +2481,7 @@ var flagConfig = {
2510
2481
  {
2511
2482
  key: "apiKey",
2512
2483
  type: "isAnyOf",
2513
- values: [BANKR_API_KEY2, KALSHI_API_KEY2]
2484
+ values: [BANKR_API_KEY, KALSHI_API_KEY]
2514
2485
  }
2515
2486
  ],
2516
2487
  value: base3.id.toString()
@@ -2533,11 +2504,11 @@ var flagConfig = {
2533
2504
  {
2534
2505
  key: "apiKey",
2535
2506
  type: "isAnyOf",
2536
- values: [OSTIUM_API_KEY2]
2507
+ values: [POLYMARKET_API_KEY]
2537
2508
  }
2538
2509
  ],
2539
2510
  value: JSON.stringify({
2540
- message: ""
2511
+ message: "Deposits on BSC are delayed and may take longer to process."
2541
2512
  })
2542
2513
  }
2543
2514
  ]
@@ -2651,7 +2622,7 @@ var flagConfig = {
2651
2622
  {
2652
2623
  key: "apiKey",
2653
2624
  type: "isAnyOf",
2654
- values: [KATANA_API_KEY2, KALSHI_API_KEY2]
2625
+ values: [KATANA_API_KEY, KALSHI_API_KEY]
2655
2626
  }
2656
2627
  ],
2657
2628
  value: false
@@ -2735,13 +2706,13 @@ var flagConfig = {
2735
2706
  values: [
2736
2707
  SUSHI_API_KEY,
2737
2708
  HYPERSWAP_API_KEY,
2738
- HYPERBEAT_API_KEY2,
2709
+ HYPERBEAT_API_KEY,
2739
2710
  HYPERDASH_API_KEY,
2740
- BASED_API_KEY2,
2741
- OSTIUM_API_KEY2,
2742
- POLYMARKET_API_KEY2,
2711
+ BASED_API_KEY,
2712
+ OSTIUM_API_KEY,
2713
+ POLYMARKET_API_KEY,
2743
2714
  VENTUALS_API_KEY,
2744
- KALSHI_API_KEY2
2715
+ KALSHI_API_KEY
2745
2716
  ]
2746
2717
  }
2747
2718
  ],
@@ -2793,14 +2764,6 @@ var flagConfig = {
2793
2764
  137: []
2794
2765
  })
2795
2766
  },
2796
- [FlagKey.WithdrawalExcludeChains]: {
2797
- type: "string",
2798
- default_value: JSON.stringify([56, 10])
2799
- },
2800
- [FlagKey.EnableSourceNavigationWidget]: {
2801
- type: "boolean",
2802
- default_value: false
2803
- },
2804
2767
  [FlagKey.TokenTransferDefaultTokens]: {
2805
2768
  type: "string",
2806
2769
  default_value: "",
@@ -2810,7 +2773,7 @@ var flagConfig = {
2810
2773
  {
2811
2774
  key: "apiKey",
2812
2775
  type: "isAnyOf",
2813
- values: [POLYMARKET_API_KEY2]
2776
+ values: [POLYMARKET_API_KEY]
2814
2777
  }
2815
2778
  ],
2816
2779
  value: JSON.stringify(["USDC", "USDC.e"])
@@ -2860,7 +2823,7 @@ var flagConfig = {
2860
2823
  {
2861
2824
  key: "apiKey",
2862
2825
  type: "isAnyOf",
2863
- values: [BASED_API_KEY2]
2826
+ values: [BASED_API_KEY]
2864
2827
  }
2865
2828
  ],
2866
2829
  value: JSON.stringify({
@@ -3000,6 +2963,44 @@ import React11, {
3000
2963
  } from "react";
3001
2964
  import { FlagKey as FlagKey2 } from "@funkit/utils";
3002
2965
 
2966
+ // src/consts/customers.ts
2967
+ import {
2968
+ BANKR_API_KEY as BANKR_API_KEY2,
2969
+ BASED_API_KEY as BASED_API_KEY2,
2970
+ BSX_API_KEY,
2971
+ ETHEREAL_API_KEY,
2972
+ HYPERBEAT_API_KEY as HYPERBEAT_API_KEY2,
2973
+ KALSHI_API_KEY as KALSHI_API_KEY2,
2974
+ KATANA_API_KEY as KATANA_API_KEY2,
2975
+ MONKEY_TILT_API_KEY as MONKEY_TILT_API_KEY2,
2976
+ OSTIUM_API_KEY as OSTIUM_API_KEY2,
2977
+ POLYMARKET_API_KEY as POLYMARKET_API_KEY2
2978
+ } from "@funkit/api-base";
2979
+ function isPolymarketCustomer(apiKey) {
2980
+ return apiKey === POLYMARKET_API_KEY2;
2981
+ }
2982
+ function isOstiumCustomer(apiKey) {
2983
+ return apiKey === OSTIUM_API_KEY2;
2984
+ }
2985
+ function isBankrCustomer(apiKey) {
2986
+ return apiKey === BANKR_API_KEY2;
2987
+ }
2988
+ function isEtherealCustomer(apiKey) {
2989
+ return apiKey === ETHEREAL_API_KEY;
2990
+ }
2991
+ function isKatanaCustomer(apiKey) {
2992
+ return apiKey === KATANA_API_KEY2;
2993
+ }
2994
+ function isHyperbeatCustomer(apiKey) {
2995
+ return apiKey === HYPERBEAT_API_KEY2;
2996
+ }
2997
+ function isBasedCustomer(apiKey) {
2998
+ return apiKey === BASED_API_KEY2;
2999
+ }
3000
+ function isKalshiCustomer(apiKey) {
3001
+ return apiKey === KALSHI_API_KEY2;
3002
+ }
3003
+
3003
3004
  // src/providers/FunkitSandboxContext.tsx
3004
3005
  import { createContext as createContext6, useContext as useContext6 } from "react";
3005
3006
  var FunkitSandboxContext = createContext6(false);
@@ -3209,13 +3210,57 @@ function safeJSONParse(src) {
3209
3210
  });
3210
3211
  }
3211
3212
 
3213
+ // src/hooks/useIsTokenWhitelisted.ts
3214
+ var MATCH_ALL = "*";
3215
+ var useIsTokenWhitelisted = (flagKey) => {
3216
+ const whitelistedTokensString = useFlag(flagKey);
3217
+ const whitelistedTokensByChainId = useMemo7(
3218
+ () => safeJSONParse(whitelistedTokensString),
3219
+ [whitelistedTokensString]
3220
+ );
3221
+ const isTokenWhitelisted = useCallback3(
3222
+ (chainId, tokenAddress) => {
3223
+ const tokensForChainId = toArrayIfString(whitelistedTokensByChainId?.[chainId]) ?? [];
3224
+ const tokensForAllChains = toArrayIfString(whitelistedTokensByChainId?.[MATCH_ALL]) ?? [];
3225
+ const tokens = [
3226
+ ...tokensForChainId,
3227
+ // whitelisted tokens for the `chainId` provided
3228
+ ...tokensForAllChains
3229
+ // whitelisted tokens for all chains
3230
+ ];
3231
+ if (tokens.length === 0) {
3232
+ return false;
3233
+ }
3234
+ if (tokens.includes("*")) {
3235
+ return true;
3236
+ }
3237
+ return tokens.some(
3238
+ (currentTokenAddress) => isTokenAddressEquivalent2({
3239
+ firstTokenAddress: currentTokenAddress,
3240
+ secondTokenAddress: tokenAddress
3241
+ })
3242
+ );
3243
+ },
3244
+ [whitelistedTokensByChainId]
3245
+ );
3246
+ return isTokenWhitelisted;
3247
+ };
3248
+ var toArrayIfString = (value) => {
3249
+ if (typeof value === "string") {
3250
+ return [value];
3251
+ }
3252
+ return value;
3253
+ };
3254
+
3212
3255
  // src/hooks/useRelayBypass.ts
3256
+ import { FlagKey as FlagKey3, isTokenAddressEquivalent as isTokenAddressEquivalent3 } from "@funkit/utils";
3257
+ import { useCallback as useCallback4, useMemo as useMemo8 } from "react";
3213
3258
  var isTokenFlagEnabled = (tokenList, tokenAddress) => {
3214
3259
  if (tokenList.includes("*")) {
3215
3260
  return true;
3216
3261
  }
3217
3262
  return tokenList.some(
3218
- (t) => isTokenAddressEquivalent2({
3263
+ (t) => isTokenAddressEquivalent3({
3219
3264
  firstTokenAddress: t,
3220
3265
  secondTokenAddress: tokenAddress
3221
3266
  })
@@ -3226,11 +3271,11 @@ function useSourceTokenRelayEnabled() {
3226
3271
  const sourceTokensJsonString = useFlag(
3227
3272
  FlagKey3.RelayBypassSourceChainsAndAssets
3228
3273
  );
3229
- const sourceTokens = useMemo7(
3274
+ const sourceTokens = useMemo8(
3230
3275
  () => safeJSONParse(sourceTokensJsonString),
3231
3276
  [sourceTokensJsonString]
3232
3277
  );
3233
- const isAllowed = useCallback3(
3278
+ const isAllowed = useCallback4(
3234
3279
  (chainId, tokenAddress) => {
3235
3280
  return isRelayBypassEnabled && isTokenFlagEnabled(
3236
3281
  sourceTokens?.[Number.parseInt(`${chainId}`)] || [],
@@ -3256,7 +3301,7 @@ function useRelayBypass() {
3256
3301
  const targetTokens = safeJSONParse(
3257
3302
  targetTokensJsonString
3258
3303
  );
3259
- const paymentMethodWhitelistConfig = useMemo7(() => {
3304
+ const paymentMethodWhitelistConfig = useMemo8(() => {
3260
3305
  if (isKatanaCustomer(apiKey)) {
3261
3306
  return {
3262
3307
  relayPaymentMethods: [
@@ -3274,7 +3319,7 @@ function useRelayBypass() {
3274
3319
  };
3275
3320
  }, [apiKey]);
3276
3321
  return {
3277
- getIsRelayEnabled: useCallback3(
3322
+ getIsRelayEnabled: useCallback4(
3278
3323
  ({
3279
3324
  fromChainId,
3280
3325
  fromTokenAddress,
@@ -3321,7 +3366,9 @@ function useCheckoutDirectExecution() {
3321
3366
  const { data: walletClient } = useWalletClient();
3322
3367
  const { getIsRelayEnabled } = useRelayBypass();
3323
3368
  const { apiKey } = useFunkitConfig();
3324
- const getRelayDirectExecutionBaseQuote = useCallback4(
3369
+ const isPermitEnabledForToken = useIsTokenWhitelisted(FlagKey4.Permit2Tokens);
3370
+ const wagmiConfig = useConfig2();
3371
+ const getRelayDirectExecutionBaseQuote = useCallback5(
3325
3372
  async (params) => {
3326
3373
  const {
3327
3374
  actionParams,
@@ -3332,6 +3379,13 @@ function useCheckoutDirectExecution() {
3332
3379
  recipientAddress,
3333
3380
  senderAddress = address
3334
3381
  } = params;
3382
+ const doesHaveGasToken = await hasGasToken(
3383
+ wagmiConfig,
3384
+ address,
3385
+ fromChainId
3386
+ );
3387
+ const usePermit = doesHaveGasToken === false && // Check if the wallet has gas token (e.g. ETH > 0 on eth mainnet)
3388
+ isPermitEnabledForToken(fromChainId, fromTokenAddress);
3335
3389
  const getCheckoutQuoteParams = {
3336
3390
  actionParams,
3337
3391
  apiKey,
@@ -3341,7 +3395,8 @@ function useCheckoutDirectExecution() {
3341
3395
  recipientAddress,
3342
3396
  toChainId,
3343
3397
  toTokenAddress,
3344
- userAddress: senderAddress
3398
+ userAddress: senderAddress,
3399
+ usePermit
3345
3400
  };
3346
3401
  if (params.isExactIn) {
3347
3402
  const { fromTokenDecimals, fromTokenAmount } = params;
@@ -3358,9 +3413,9 @@ function useCheckoutDirectExecution() {
3358
3413
  toAmountBaseUnit: BigInt(Math.floor(toTokenAmount * multiplier))
3359
3414
  });
3360
3415
  },
3361
- [address, apiKey]
3416
+ [address, apiKey, isPermitEnabledForToken, wagmiConfig]
3362
3417
  );
3363
- const checkAndSwitchChains = useCallback4(
3418
+ const checkAndSwitchChains = useCallback5(
3364
3419
  async ({
3365
3420
  executionChainId,
3366
3421
  stepMessageSetter
@@ -3384,7 +3439,7 @@ function useCheckoutDirectExecution() {
3384
3439
  },
3385
3440
  [connector, switchChainAsync]
3386
3441
  );
3387
- const startRelayDirectExecution = useCallback4(
3442
+ const startRelayDirectExecution = useCallback5(
3388
3443
  async ({
3389
3444
  checkoutItem,
3390
3445
  latestQuote,
@@ -3461,7 +3516,7 @@ function useCheckoutDirectExecution() {
3461
3516
  },
3462
3517
  [walletClient, checkAndSwitchChains]
3463
3518
  );
3464
- const getDirectExecutionInfo = useCallback4(
3519
+ const getDirectExecutionInfo = useCallback5(
3465
3520
  (checkoutItem) => {
3466
3521
  const noop10 = {
3467
3522
  isDirectExecution: false,
@@ -3499,7 +3554,7 @@ function useCheckoutDirectExecution() {
3499
3554
  startRelayDirectExecution
3500
3555
  ]
3501
3556
  );
3502
- const getWithdrawalDirectExecution = useCallback4(() => {
3557
+ const getWithdrawalDirectExecution = useCallback5(() => {
3503
3558
  const quoteAction = getRelayDirectExecutionBaseQuote;
3504
3559
  const executeAction = startRelayDirectExecution;
3505
3560
  return {
@@ -3519,9 +3574,9 @@ function useCheckoutDirectExecution() {
3519
3574
  import {
3520
3575
  initializeCheckoutTokenTransferAddress
3521
3576
  } from "@funkit/api-base";
3522
- import { FlagKey as FlagKey4 } from "@funkit/utils";
3577
+ import { FlagKey as FlagKey5 } from "@funkit/utils";
3523
3578
  import { useQuery as useQuery3 } from "@tanstack/react-query";
3524
- import { useCallback as useCallback5 } from "react";
3579
+ import { useCallback as useCallback6 } from "react";
3525
3580
 
3526
3581
  // src/domains/clientMetadata.ts
3527
3582
  function generateClientMetadataForBackend({
@@ -3594,7 +3649,7 @@ var useCheckoutTransferInit = () => {
3594
3649
  const checkoutConfig = checkoutItem?.initSettings.config;
3595
3650
  const { walletAddress, userInfo } = useGeneralWallet();
3596
3651
  const { apiKey } = useFunkitConfig();
3597
- const isQrCodeEnabled = useFlag(FlagKey4.EnableTokenTransfer, false);
3652
+ const isQrCodeEnabled = useFlag(FlagKey5.EnableTokenTransfer, false);
3598
3653
  const recipientAddr = checkoutConfig?.customRecipient || walletAddress || "0x";
3599
3654
  const queryKey = {
3600
3655
  userId: userInfo.id || "",
@@ -3604,7 +3659,7 @@ var useCheckoutTransferInit = () => {
3604
3659
  apiKey,
3605
3660
  actionType: checkoutConfig?.qrcodeActionType
3606
3661
  };
3607
- const queryFunction = useCallback5(
3662
+ const queryFunction = useCallback6(
3608
3663
  async (params) => {
3609
3664
  return await initializeCheckoutTokenTransferAddress({
3610
3665
  ...params,
@@ -3636,13 +3691,13 @@ var useCheckoutTransferInit = () => {
3636
3691
  };
3637
3692
 
3638
3693
  // src/hooks/useEffectEvent.ts
3639
- import { useCallback as useCallback6, useInsertionEffect, useRef } from "react";
3694
+ import { useCallback as useCallback7, useInsertionEffect, useRef } from "react";
3640
3695
  function useEffectEvent(fn) {
3641
3696
  const savedCallback = useRef(fn);
3642
3697
  useInsertionEffect(() => {
3643
3698
  savedCallback.current = fn;
3644
3699
  }, [fn]);
3645
- return useCallback6(
3700
+ return useCallback7(
3646
3701
  ((...args) => {
3647
3702
  const f = savedCallback.current;
3648
3703
  return f(...args);
@@ -3712,13 +3767,13 @@ function FunkitCheckoutProvider({ children }) {
3712
3767
  const [activeCheckout, setActiveCheckout] = useState6(null);
3713
3768
  const [activeWithdrawal, setActiveWithdrawal] = useState6(null);
3714
3769
  const [checkoutsProgress, setCheckoutsProgress] = useState6({});
3715
- const getCheckoutProgress = useCallback7(
3770
+ const getCheckoutProgress = useCallback8(
3716
3771
  (checkoutId) => {
3717
3772
  return checkoutsProgress[checkoutId];
3718
3773
  },
3719
3774
  [checkoutsProgress]
3720
3775
  );
3721
- const setCheckoutProgress = useCallback7(
3776
+ const setCheckoutProgress = useCallback8(
3722
3777
  (checkoutId, progress) => {
3723
3778
  setCheckoutsProgress((data) => ({ ...data, [checkoutId]: progress }));
3724
3779
  },
@@ -3740,7 +3795,7 @@ function FunkitCheckoutProvider({ children }) {
3740
3795
  });
3741
3796
  }
3742
3797
  );
3743
- const initNewWithdrawal = useCallback7(
3798
+ const initNewWithdrawal = useCallback8(
3744
3799
  (props) => {
3745
3800
  const { onWithdrawalConfirmation, onWithdrawalError, config } = props;
3746
3801
  const newWithdrawalId = uuid();
@@ -3758,7 +3813,7 @@ function FunkitCheckoutProvider({ children }) {
3758
3813
  },
3759
3814
  []
3760
3815
  );
3761
- const initNewCheckout = useCallback7(
3816
+ const initNewCheckout = useCallback8(
3762
3817
  ({ config, ...initSettings }) => {
3763
3818
  const newCheckoutId = uuid();
3764
3819
  const newActiveCheckoutItem = {
@@ -3833,7 +3888,7 @@ function FunkitCheckoutProvider({ children }) {
3833
3888
  });
3834
3889
  }
3835
3890
  );
3836
- const startDirectExecutionCheckout = useCallback7(
3891
+ const startDirectExecutionCheckout = useCallback8(
3837
3892
  async ({
3838
3893
  stepMessageSetter,
3839
3894
  latestQuote,
@@ -3919,7 +3974,7 @@ function FunkitCheckoutProvider({ children }) {
3919
3974
  manualFetch
3920
3975
  ]
3921
3976
  );
3922
- const startRegularCheckout = useCallback7(
3977
+ const startRegularCheckout = useCallback8(
3923
3978
  async ({
3924
3979
  stepMessageSetter,
3925
3980
  latestQuote,
@@ -4119,15 +4174,15 @@ function useFunkitCheckout(props) {
4119
4174
  const { openWithdrawalModal } = useWithdrawalModal();
4120
4175
  const { connectModalOpen, openConnectModal } = useConnectModal();
4121
4176
  const { isUserLoggedIn } = useGeneralWallet();
4122
- const isCheckoutActivated = useFlag(FlagKey5.IsCheckoutActivated);
4123
- const onErrorWrapper = useCallback7(
4177
+ const isCheckoutActivated = useFlag(FlagKey6.IsCheckoutActivated);
4178
+ const onErrorWrapper = useCallback8(
4124
4179
  (payload) => {
4125
4180
  logger.warn(payload.message, payload);
4126
4181
  onError?.(payload);
4127
4182
  },
4128
4183
  [onError]
4129
4184
  );
4130
- const onOpenWrapper = useCallback7(
4185
+ const onOpenWrapper = useCallback8(
4131
4186
  (newId) => {
4132
4187
  props?.onOpen?.();
4133
4188
  openFunCheckoutModal?.(newId);
@@ -4319,18 +4374,6 @@ async function validateCheckoutConfig(config) {
4319
4374
  message: `Invalid targetChain configuration: Unsupported chain id ${config.targetChain} for checkout.`
4320
4375
  };
4321
4376
  }
4322
- const chainCheckoutAssetWhitelist = FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO4[config.targetChain]?.checkoutAssetWhitelist || [];
4323
- if (chainCheckoutAssetWhitelist?.[0] !== "*" && !chainCheckoutAssetWhitelist.some(
4324
- (asset) => isTokenAddressEquivalent3({
4325
- firstTokenAddress: asset,
4326
- secondTokenAddress: config.targetAsset || ""
4327
- })
4328
- )) {
4329
- return {
4330
- isValid: false,
4331
- message: `Invalid targetAsset ${config.targetAsset} for targetChain ${config.targetChain}.`
4332
- };
4333
- }
4334
4377
  if (config.customRecipient && !isAddress(config.customRecipient)) {
4335
4378
  return {
4336
4379
  isValid: false,
@@ -4362,7 +4405,7 @@ async function validateCheckoutConfig(config) {
4362
4405
  };
4363
4406
  }
4364
4407
  var hasSufficientBalance = async (wagmiConfig, walletAddress, tokenAddress, tokenChainId, requiredAssetAmount) => {
4365
- const finalTokenAddress = isTokenAddressEquivalent3({
4408
+ const finalTokenAddress = isTokenAddressEquivalent4({
4366
4409
  firstTokenAddress: tokenAddress,
4367
4410
  secondTokenAddress: FUNKIT_CONNECT_CHECKOUT_NATIVE_CURRENCY_ADDRESS2
4368
4411
  }) ? void 0 : tokenAddress;
@@ -4383,6 +4426,27 @@ var hasSufficientBalance = async (wagmiConfig, walletAddress, tokenAddress, toke
4383
4426
  }
4384
4427
  return { balance, result: false, tokenTicker: null };
4385
4428
  };
4429
+ var hasGasToken = async (wagmiConfig, walletAddress, chainId) => {
4430
+ try {
4431
+ const data = await getBalance(wagmiConfig, {
4432
+ address: walletAddress,
4433
+ chainId: Number(chainId),
4434
+ blockTag: "latest"
4435
+ });
4436
+ logger.log("hasGasToken_info", {
4437
+ data,
4438
+ walletAddress,
4439
+ chainId
4440
+ });
4441
+ return data.value > 0;
4442
+ } catch (err) {
4443
+ logger.error("hasGasToken_error", err, {
4444
+ walletAddress,
4445
+ chainId
4446
+ });
4447
+ return false;
4448
+ }
4449
+ };
4386
4450
  function getFunkitEnvForCheckoutEstimation({
4387
4451
  chainId,
4388
4452
  bypassWalletInit
@@ -4705,7 +4769,7 @@ function FunkitCheckoutHistoryProvider({
4705
4769
  const [isInited, setIsInited] = useState7(false);
4706
4770
  const [isRefreshing, setIsRefreshing] = useState7(true);
4707
4771
  const isGuestUserOnCheckoutHistory = !isUserLoggedIn && !!historyDepositAddress;
4708
- const _refreshCheckoutHistory = useCallback8(async () => {
4772
+ const _refreshCheckoutHistory = useCallback9(async () => {
4709
4773
  if (!funkitConfig.apiKey) {
4710
4774
  return;
4711
4775
  }
@@ -4773,7 +4837,7 @@ function FunkitCheckoutHistoryProvider({
4773
4837
  clearInterval(intervalRef.current);
4774
4838
  }
4775
4839
  }, [logoutSymbol]);
4776
- const startCheckoutHistoryListener = useCallback8(
4840
+ const startCheckoutHistoryListener = useCallback9(
4777
4841
  (singleDepositAddr, expedited = false) => {
4778
4842
  setHistoryDepositAddress(singleDepositAddr);
4779
4843
  clearInterval(intervalRef.current);
@@ -4789,7 +4853,7 @@ function FunkitCheckoutHistoryProvider({
4789
4853
  },
4790
4854
  [triggerRefreshSymbol]
4791
4855
  );
4792
- const stopCheckoutHistoryListener = useCallback8(
4856
+ const stopCheckoutHistoryListener = useCallback9(
4793
4857
  (cancelIntervalId) => {
4794
4858
  clearInterval(cancelIntervalId);
4795
4859
  if (cancelIntervalId === intervalRef.current) {
@@ -4941,7 +5005,7 @@ var useFunkitPostCheckoutInternal = (checkoutId) => {
4941
5005
  };
4942
5006
 
4943
5007
  // src/components/FunCheckoutHistory/FunCheckoutStatus.tsx
4944
- import React22, { useEffect as useEffect11, useMemo as useMemo8, useState as useState10 } from "react";
5008
+ import React22, { useEffect as useEffect11, useMemo as useMemo9, useState as useState10 } from "react";
4945
5009
 
4946
5010
  // src/components/TransactionStatus/TransactionStatus.tsx
4947
5011
  import {
@@ -4950,7 +5014,7 @@ import {
4950
5014
  useAnimate
4951
5015
  } from "motion/react";
4952
5016
  import React21, {
4953
- useCallback as useCallback9,
5017
+ useCallback as useCallback10,
4954
5018
  useEffect as useEffect10,
4955
5019
  useRef as useRef3,
4956
5020
  useState as useState9
@@ -5673,11 +5737,11 @@ function TransactionStatus({
5673
5737
  const [transitioningToStatus, setTransitioningToStatus] = useState9(status);
5674
5738
  const [transitioningToStep, setTransitioningToStep] = useState9(step);
5675
5739
  const spinAnimationRef = useRef3();
5676
- const stopSpinning = useCallback9(() => {
5740
+ const stopSpinning = useCallback10(() => {
5677
5741
  spinAnimationRef.current?.cancel();
5678
5742
  spinAnimationRef.current = void 0;
5679
5743
  }, []);
5680
- const startSpinning = useCallback9(
5744
+ const startSpinning = useCallback10(
5681
5745
  (step2) => {
5682
5746
  stopSpinning();
5683
5747
  spinAnimationRef.current = animate(
@@ -5695,7 +5759,7 @@ function TransactionStatus({
5695
5759
  },
5696
5760
  [animate, stopSpinning]
5697
5761
  );
5698
- const animateCircleToSuccess = useCallback9(
5762
+ const animateCircleToSuccess = useCallback10(
5699
5763
  async (step2) => {
5700
5764
  const durationMs = 300;
5701
5765
  const checkmarkDelayMs = 50;
@@ -6091,7 +6155,7 @@ function FunCheckoutStatusLoaded({
6091
6155
  checkoutHistoryItem.state,
6092
6156
  checkoutHistoryItem.refundState
6093
6157
  );
6094
- const startTimeMs = useMemo8(
6158
+ const startTimeMs = useMemo9(
6095
6159
  () => extractStartTimeMs(
6096
6160
  checkoutHistoryItem.clientMetadata.id,
6097
6161
  activeCheckoutItem,
@@ -6347,7 +6411,7 @@ function isCustomWithdrawalConfig(config) {
6347
6411
  import { isMobile as isMobile2, isSafari } from "@funkit/utils";
6348
6412
  import clsx8 from "clsx";
6349
6413
  import React43, {
6350
- useCallback as useCallback12,
6414
+ useCallback as useCallback13,
6351
6415
  useContext as useContext12,
6352
6416
  useEffect as useEffect18,
6353
6417
  useRef as useRef8
@@ -6663,7 +6727,7 @@ var ErrorFallback = () => /* @__PURE__ */ React31.createElement(
6663
6727
  );
6664
6728
 
6665
6729
  // src/components/FunBottomBar/FunBottomBar.tsx
6666
- import { FlagKey as FlagKey6, isMobile } from "@funkit/utils";
6730
+ import { FlagKey as FlagKey7, isMobile } from "@funkit/utils";
6667
6731
  import React35 from "react";
6668
6732
 
6669
6733
  // src/components/FunButton/FunButton.tsx
@@ -6951,7 +7015,7 @@ var FunBottomBar = ({
6951
7015
  onClose
6952
7016
  }) => {
6953
7017
  const { uiCustomizations } = useFunkitConfig();
6954
- const showTagline = useFlag(FlagKey6.ShowPoweredTagline);
7018
+ const showTagline = useFlag(FlagKey7.ShowPoweredTagline);
6955
7019
  const defaultBottomSection = showTagline ? /* @__PURE__ */ React35.createElement(FunPoweredTagline, null) : void 0;
6956
7020
  const bottomSectionComponent = bottomSection ?? defaultBottomSection;
6957
7021
  const hasMultipleButtons = !!onClose;
@@ -7084,7 +7148,7 @@ function FunDivider({
7084
7148
 
7085
7149
  // src/components/FunTooltip/FunTooltip.tsx
7086
7150
  import React40, {
7087
- useCallback as useCallback10,
7151
+ useCallback as useCallback11,
7088
7152
  useEffect as useEffect14,
7089
7153
  useRef as useRef6,
7090
7154
  useState as useState14
@@ -7175,7 +7239,7 @@ var FunTooltip = ({
7175
7239
  const startDelayRef = useRef6();
7176
7240
  const delayRef = useRef6();
7177
7241
  const tooltipRef = useRef6(null);
7178
- const show = useCallback10(
7242
+ const show = useCallback11(
7179
7243
  (startHiding) => {
7180
7244
  startDelayRef.current = setTimeout(() => {
7181
7245
  setIsDisplayed(true);
@@ -7185,7 +7249,7 @@ var FunTooltip = ({
7185
7249
  },
7186
7250
  [startDelay]
7187
7251
  );
7188
- const hide = useCallback10(() => {
7252
+ const hide = useCallback11(() => {
7189
7253
  clearTimeout(startDelayRef.current);
7190
7254
  delayRef.current = setTimeout(() => {
7191
7255
  setIsDisplayed(false);
@@ -7298,7 +7362,7 @@ var HelpIcon = () => {
7298
7362
  };
7299
7363
 
7300
7364
  // src/components/Dialog/FocusTrap.tsx
7301
- import React42, { useCallback as useCallback11, useEffect as useEffect15, useRef as useRef7 } from "react";
7365
+ import React42, { useCallback as useCallback12, useEffect as useEffect15, useRef as useRef7 } from "react";
7302
7366
  var moveFocusWithin = (element2, position) => {
7303
7367
  const focusableElements = element2.querySelectorAll(
7304
7368
  "button:not(:disabled), a[href]"
@@ -7331,7 +7395,7 @@ function FocusTrap(props) {
7331
7395
  return /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement(
7332
7396
  "div",
7333
7397
  {
7334
- onFocus: useCallback11(
7398
+ onFocus: useCallback12(
7335
7399
  () => contentRef.current && moveFocusWithin(contentRef.current, "end"),
7336
7400
  []
7337
7401
  ),
@@ -7348,7 +7412,7 @@ function FocusTrap(props) {
7348
7412
  ), /* @__PURE__ */ React42.createElement(
7349
7413
  "div",
7350
7414
  {
7351
- onFocus: useCallback11(
7415
+ onFocus: useCallback12(
7352
7416
  () => contentRef.current && moveFocusWithin(contentRef.current, "start"),
7353
7417
  []
7354
7418
  ),
@@ -7484,7 +7548,7 @@ function Dialog({
7484
7548
  }
7485
7549
  return () => document.removeEventListener("keydown", handleEscape);
7486
7550
  }, [open, onClose, isSmartCloseable]);
7487
- const handleBackdropClick = useCallback12(
7551
+ const handleBackdropClick = useCallback13(
7488
7552
  () => isSmartCloseable ? onClose() : () => void 0,
7489
7553
  [isSmartCloseable, onClose]
7490
7554
  );
@@ -7840,17 +7904,17 @@ Dialog.BottomBar = FunBottomBar;
7840
7904
  // src/modals/WithdrwalModal/WithdrawalContent.tsx
7841
7905
  import { FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO7 } from "@funkit/chains";
7842
7906
  import {
7843
- FlagKey as FlagKey13,
7907
+ FlagKey as FlagKey14,
7844
7908
  formatCryptoAndStringify as formatCryptoAndStringify2,
7845
7909
  formatCurrencyAndStringify as formatCurrencyAndStringify3
7846
7910
  } from "@funkit/utils";
7847
- import React67, { useEffect as useEffect27, useMemo as useMemo13, useState as useState26 } from "react";
7911
+ import React67, { useEffect as useEffect27, useMemo as useMemo14, useState as useState26 } from "react";
7848
7912
  import { createPortal as createPortal2 } from "react-dom";
7849
7913
  import { useDebounce } from "use-debounce";
7850
7914
  import { useAccount as useAccount3 } from "wagmi";
7851
7915
 
7852
7916
  // src/components/AsyncImage/AsyncImage.tsx
7853
- import React44, { useMemo as useMemo9, useReducer as useReducer2, useState as useState16 } from "react";
7917
+ import React44, { useMemo as useMemo10, useReducer as useReducer2, useState as useState16 } from "react";
7854
7918
 
7855
7919
  // src/components/AsyncImage/useAsyncImage.ts
7856
7920
  import { useEffect as useEffect19, useReducer } from "react";
@@ -7918,7 +7982,7 @@ function AsyncImage({
7918
7982
  const [hasError, setHasError] = useState16(
7919
7983
  srcProp === void 0 && fallbackSrc === void 0
7920
7984
  );
7921
- const { asyncStyle, imgProps } = useMemo9(() => {
7985
+ const { asyncStyle, imgProps } = useMemo10(() => {
7922
7986
  const asyncStyle2 = !useAsImage ? getRemoteImageStyles(isRemoteImage, isRemoteImageLoaded, src) : {};
7923
7987
  if (useAsImage || isRemoteImage) {
7924
7988
  const imgProps2 = {
@@ -8020,13 +8084,13 @@ var getRemoteImageStyles = (isRemoteImage, isRemoteImageLoaded, src) => {
8020
8084
  import React59 from "react";
8021
8085
 
8022
8086
  // src/components/Dropdown/ChainDropdown.tsx
8023
- import { FlagKey as FlagKey7 } from "@funkit/utils";
8087
+ import { FlagKey as FlagKey8 } from "@funkit/utils";
8024
8088
  import React56 from "react";
8025
8089
 
8026
8090
  // src/components/Dropdown/BaseDropdown.tsx
8027
8091
  import { isMobile as isMobile3, noop as noop2 } from "@funkit/utils";
8028
8092
  import { AnimatePresence as AnimatePresence4, motion as motion5 } from "motion/react";
8029
- import React53, { useCallback as useCallback13, useEffect as useEffect22, useMemo as useMemo10, useRef as useRef10, useState as useState18 } from "react";
8093
+ import React53, { useCallback as useCallback14, useEffect as useEffect22, useMemo as useMemo11, useRef as useRef10, useState as useState18 } from "react";
8030
8094
 
8031
8095
  // src/consts/layout.ts
8032
8096
  var VERTICAL_SECTION_GAP = "18";
@@ -8650,13 +8714,13 @@ function BaseDropdown({
8650
8714
  const handleSearch = (event) => {
8651
8715
  setSearchInput(event.target.value);
8652
8716
  };
8653
- const filteredOptions = useMemo10(
8717
+ const filteredOptions = useMemo11(
8654
8718
  () => options.filter(
8655
8719
  (singleOption) => singleOption.label.toLowerCase().includes(searchInput?.toLowerCase())
8656
8720
  ),
8657
8721
  [options, searchInput]
8658
8722
  );
8659
- const closeDropdown = useCallback13(() => {
8723
+ const closeDropdown = useCallback14(() => {
8660
8724
  setIsOpened(false);
8661
8725
  resetSearchOnClose && setSearchInput("");
8662
8726
  }, [resetSearchOnClose]);
@@ -8929,9 +8993,9 @@ var ChainDropdown = ({
8929
8993
  maxDropdownHeight,
8930
8994
  tagComponent
8931
8995
  }) => {
8932
- const defaultChainIdJson = useFlag(FlagKey7.TokenTransferDefaultChainId);
8996
+ const defaultChainIdJson = useFlag(FlagKey8.TokenTransferDefaultChainId);
8933
8997
  const defaultChainId = safeJSONParse(defaultChainIdJson);
8934
- const chainSortOrderJson = useFlag(FlagKey7.ChainIdSortOrder);
8998
+ const chainSortOrderJson = useFlag(FlagKey8.ChainIdSortOrder);
8935
8999
  const chainSortOrder = safeJSONParse(chainSortOrderJson) || [];
8936
9000
  const chainIds = getSortedChainIds();
8937
9001
  const options = allowUnselect ? [DEFAULT_VALUE, ...chainIds] : chainIds;
@@ -9038,7 +9102,7 @@ var ChainDropdown = ({
9038
9102
  };
9039
9103
 
9040
9104
  // src/components/Dropdown/TokenDropdown.tsx
9041
- import { FlagKey as FlagKey8, safeParseJson as safeParseJson3 } from "@funkit/utils";
9105
+ import { FlagKey as FlagKey9, safeParseJson as safeParseJson3 } from "@funkit/utils";
9042
9106
  import React58, { useState as useState19 } from "react";
9043
9107
 
9044
9108
  // src/utils/flags/patches/enable-bitcoin-patch.ts
@@ -9179,12 +9243,12 @@ var NewTokenBadge = ({ iconSymbol }) => {
9179
9243
  // src/components/Dropdown/TokenDropdown.tsx
9180
9244
  var TOKEN_ICON_SIZE = 16;
9181
9245
  var useNewTokens = () => {
9182
- const enableBitcoin = useFlag(FlagKey8.EnableBitcoin);
9183
- const bannerJson = useFlag(FlagKey8.NewTokenAssetSelectionBanner);
9246
+ const enableBitcoin = useFlag(FlagKey9.EnableBitcoin);
9247
+ const bannerJson = useFlag(FlagKey9.NewTokenAssetSelectionBanner);
9184
9248
  const bannerData = safeParseJson3(bannerJson);
9185
9249
  const addBitcoinToNewTokensMiddleware = enableBitcoin ? addBitcoinToNewTokens : void 0;
9186
9250
  const newBadgeTokensJson = useFlag(
9187
- FlagKey8.TokenTransferNewTokens,
9251
+ FlagKey9.TokenTransferNewTokens,
9188
9252
  void 0,
9189
9253
  addBitcoinToNewTokensMiddleware
9190
9254
  );
@@ -9204,7 +9268,7 @@ var TokenDropdown = ({
9204
9268
  maxDropdownHeight,
9205
9269
  hideNewTokenBadge
9206
9270
  }) => {
9207
- const defaultTokensJson = useFlag(FlagKey8.TokenTransferDefaultTokens);
9271
+ const defaultTokensJson = useFlag(FlagKey9.TokenTransferDefaultTokens);
9208
9272
  const defaultTokens = safeJSONParse(defaultTokensJson);
9209
9273
  const enabledTokens = assets[selectedChainId];
9210
9274
  const allTokens = getSortedTokens();
@@ -9604,7 +9668,7 @@ import {
9604
9668
  formatPercent,
9605
9669
  noop as noop4
9606
9670
  } from "@funkit/utils";
9607
- import React64, { useEffect as useEffect23, useMemo as useMemo11, useState as useState20 } from "react";
9671
+ import React64, { useEffect as useEffect23, useMemo as useMemo12, useState as useState20 } from "react";
9608
9672
  import clsx14 from "clsx";
9609
9673
  import { motion as motion6, useAnimationControls } from "motion/react";
9610
9674
  import { mainnet as mainnet5 } from "viem/chains";
@@ -10000,7 +10064,7 @@ function PaymentFeesSummary({
10000
10064
  }
10001
10065
  }, [valuesNotAvailable, isExpanded]);
10002
10066
  const { uiCustomizations } = useFunkitConfig();
10003
- const { collapsed: collapsedItem, expanded: expandedItems } = useMemo11(() => {
10067
+ const { collapsed: collapsedItem, expanded: expandedItems } = useMemo12(() => {
10004
10068
  const fees = quote?.finalFeesBreakdown ?? fallbackFees;
10005
10069
  if (!fees) {
10006
10070
  return NO_DATA;
@@ -10154,7 +10218,7 @@ var EvmWallet = ({ size = 20 }) => /* @__PURE__ */ React65.createElement(
10154
10218
 
10155
10219
  // src/hooks/queries/useWithdrawalQuote.ts
10156
10220
  import { useQuery as useQuery6 } from "@tanstack/react-query";
10157
- import { useConfig as useConfig2 } from "wagmi";
10221
+ import { useConfig as useConfig3 } from "wagmi";
10158
10222
 
10159
10223
  // src/domains/quote.ts
10160
10224
  import { getCheckoutQuote as getApiCheckoutQuote } from "@funkit/api-base";
@@ -10590,7 +10654,7 @@ function useWithdrawalQuote({
10590
10654
  });
10591
10655
  const { loginType, userInfo } = useGeneralWallet();
10592
10656
  const { apiKey } = useFunkitConfig();
10593
- const wagmiConfig = useConfig2();
10657
+ const wagmiConfig = useConfig3();
10594
10658
  const { getWithdrawalDirectExecution } = useCheckoutDirectExecution();
10595
10659
  const { checkoutItem } = useCheckoutContext();
10596
10660
  const isInstantQuoting = (symbol === "USDC" || symbol === "USDT") && chainId !== "1";
@@ -10803,13 +10867,13 @@ var useAssetSymbolPrice = ({
10803
10867
  };
10804
10868
 
10805
10869
  // src/hooks/useTokenChain.ts
10806
- import { FlagKey as FlagKey10 } from "@funkit/utils";
10870
+ import { FlagKey as FlagKey11 } from "@funkit/utils";
10807
10871
  import { useEffect as useEffect24, useState as useState21 } from "react";
10808
10872
  import { polygon as polygon3 } from "viem/chains";
10809
10873
 
10810
10874
  // src/hooks/useEnabledTokenTransferChainTokens.ts
10811
10875
  import { bitcoinChain as bitcoinChain2, solanaChain as solanaChain3 } from "@funkit/chains";
10812
- import { FlagKey as FlagKey9 } from "@funkit/utils";
10876
+ import { FlagKey as FlagKey10 } from "@funkit/utils";
10813
10877
  import { base as base4 } from "viem/chains";
10814
10878
 
10815
10879
  // src/hooks/useIsUsUser.ts
@@ -10831,14 +10895,14 @@ function useIsUsKatanaUser() {
10831
10895
  // src/hooks/useEnabledTokenTransferChainTokens.ts
10832
10896
  function useEnabledTokenTransferChainTokens(transferInit, isWithdrawal) {
10833
10897
  const isBankrUsUser = useIsUsBankrUser();
10834
- const enableBitcoin = useFlag(FlagKey9.EnableBitcoin);
10898
+ const enableBitcoin = useFlag(FlagKey10.EnableBitcoin);
10835
10899
  const addBitcoinToSourceChainsAndAssetsMiddleware = enableBitcoin ? addBitcoinToSourceChainsAndAssets : void 0;
10836
10900
  const depositAssets = useFlag(
10837
- FlagKey9.TokenTransferSourceChainsAndAssets,
10901
+ FlagKey10.TokenTransferSourceChainsAndAssets,
10838
10902
  void 0,
10839
10903
  addBitcoinToSourceChainsAndAssetsMiddleware
10840
10904
  );
10841
- const withdrawalAssets = useFlag(FlagKey9.WithdrawalChainsAndAssets);
10905
+ const withdrawalAssets = useFlag(FlagKey10.WithdrawalChainsAndAssets);
10842
10906
  const assetsJsonString = isWithdrawal ? withdrawalAssets : depositAssets;
10843
10907
  const assets = safeJSONParse(assetsJsonString);
10844
10908
  if (!assets) {
@@ -10875,7 +10939,7 @@ var useTokenAndChainSelection = (transferInit, defaultValues, isWithdrawal) => {
10875
10939
  transferInit ?? null,
10876
10940
  isWithdrawal
10877
10941
  );
10878
- const defaultChainIdFlag = useFlag(FlagKey10.TokenTransferDefaultChainId);
10942
+ const defaultChainIdFlag = useFlag(FlagKey11.TokenTransferDefaultChainId);
10879
10943
  const defaultChainId = defaultValues?.chainId ?? Number(defaultChainIdFlag);
10880
10944
  const validDefaultChainId = filteredAssets[defaultChainId] !== void 0 ? defaultChainId : polygon3.id;
10881
10945
  const [selectedChainId, setSelectedChainId] = useState21(validDefaultChainId);
@@ -10930,7 +10994,7 @@ var useTokenAndChainSelection = (transferInit, defaultValues, isWithdrawal) => {
10930
10994
  import { useState as useState25 } from "react";
10931
10995
 
10932
10996
  // src/hooks/useAutoClearState.ts
10933
- import { useCallback as useCallback14, useEffect as useEffect25, useRef as useRef11, useState as useState22 } from "react";
10997
+ import { useCallback as useCallback15, useEffect as useEffect25, useRef as useRef11, useState as useState22 } from "react";
10934
10998
  function useAutoClearState(initialValue = null) {
10935
10999
  const [state, setState] = useState22(initialValue);
10936
11000
  const timeoutRef = useRef11();
@@ -10943,7 +11007,7 @@ function useAutoClearState(initialValue = null) {
10943
11007
  }, []);
10944
11008
  return [
10945
11009
  state,
10946
- useCallback14((newState, durationMs) => {
11010
+ useCallback15((newState, durationMs) => {
10947
11011
  if (timeoutRef.current) {
10948
11012
  clearTimeout(timeoutRef.current);
10949
11013
  timeoutRef.current = void 0;
@@ -10961,11 +11025,11 @@ import { ClientError as ClientError2 } from "@funkit/utils";
10961
11025
  import { useState as useState24 } from "react";
10962
11026
 
10963
11027
  // src/hooks/useIsBlacklisted.ts
10964
- import { FlagKey as FlagKey11 } from "@funkit/utils";
10965
- import { useMemo as useMemo12 } from "react";
11028
+ import { FlagKey as FlagKey12 } from "@funkit/utils";
11029
+ import { useMemo as useMemo13 } from "react";
10966
11030
  var useIsBlacklisted = (walletAddress, customRecipient) => {
10967
- const flagStr = useFlag(FlagKey11.AddressBlacklist);
10968
- const blacklist = useMemo12(
11031
+ const flagStr = useFlag(FlagKey12.AddressBlacklist);
11032
+ const blacklist = useMemo13(
10969
11033
  () => safeJSONParse(flagStr)?.map((addr) => addr.toLowerCase()) || [],
10970
11034
  [flagStr]
10971
11035
  );
@@ -10976,15 +11040,15 @@ var useIsBlacklisted = (walletAddress, customRecipient) => {
10976
11040
  };
10977
11041
 
10978
11042
  // src/providers/FunkitQuoteContext.tsx
10979
- import { FlagKey as FlagKey12, isNotNullish as isNotNullish4 } from "@funkit/utils";
11043
+ import { FlagKey as FlagKey13, isNotNullish as isNotNullish4 } from "@funkit/utils";
10980
11044
  import React66, {
10981
11045
  createContext as createContext13,
10982
- useCallback as useCallback15,
11046
+ useCallback as useCallback16,
10983
11047
  useContext as useContext13,
10984
11048
  useEffect as useEffect26,
10985
11049
  useState as useState23
10986
11050
  } from "react";
10987
- import { useConfig as useConfig3 } from "wagmi";
11051
+ import { useConfig as useConfig4 } from "wagmi";
10988
11052
 
10989
11053
  // src/consts/quote.ts
10990
11054
  import { ClientError } from "@funkit/utils";
@@ -11075,9 +11139,9 @@ var FunkitQuoteContext = createContext13({
11075
11139
  function FunkitQuoteProvider({ children }) {
11076
11140
  const { checkoutItem, setCheckout } = useCheckoutContext();
11077
11141
  const funkitConfig = useFunkitConfig();
11078
- const wagmiConfig = useConfig3();
11142
+ const wagmiConfig = useConfig4();
11079
11143
  const { walletAddress, logoutSymbol, loginType, userInfo } = useGeneralWallet();
11080
- const enableFrogProxyServer = useFlag(FlagKey12.EnableFrogProxyServer);
11144
+ const enableFrogProxyServer = useFlag(FlagKey13.EnableFrogProxyServer);
11081
11145
  const { getDirectExecutionInfo } = useCheckoutDirectExecution();
11082
11146
  const [latestQuote, setLatestQuote] = useState23(null);
11083
11147
  const [isQuoting, setIsQuoting] = useState23(false);
@@ -11093,7 +11157,7 @@ function FunkitQuoteProvider({ children }) {
11093
11157
  });
11094
11158
  }
11095
11159
  }, [logoutSymbol]);
11096
- const setQuoteProgress = useCallback15(
11160
+ const setQuoteProgress = useCallback16(
11097
11161
  (state) => {
11098
11162
  setQuoteErrorMessage(state.quoteErrorMessage);
11099
11163
  setQuoteStepMessage(state.quoteStepMessage);
@@ -11101,7 +11165,7 @@ function FunkitQuoteProvider({ children }) {
11101
11165
  },
11102
11166
  []
11103
11167
  );
11104
- const clearCheckoutQuoteMessages = useCallback15(() => {
11168
+ const clearCheckoutQuoteMessages = useCallback16(() => {
11105
11169
  setQuoteStepMessage("");
11106
11170
  setQuoteErrorMessage("");
11107
11171
  }, []);
@@ -11536,7 +11600,7 @@ function useWithdrawalAssets(config) {
11536
11600
  },
11537
11601
  true
11538
11602
  );
11539
- const excludedTokenStr = useFlag(FlagKey13.WithdrawalExcludeTokens);
11603
+ const excludedTokenStr = useFlag(FlagKey14.WithdrawalExcludeTokens);
11540
11604
  const excludedTokens = safeJSONParse(excludedTokenStr);
11541
11605
  if (excludedTokens) {
11542
11606
  for (const chainIdStr of Object.keys(excludedTokens)) {
@@ -11628,11 +11692,52 @@ function getErrorNotification(quoteErrorObject, withdrawalError, targetAssetFetc
11628
11692
  }
11629
11693
  return null;
11630
11694
  }
11695
+ function useShowConnectWallet({
11696
+ config
11697
+ }) {
11698
+ const withdrawalWalletAddress = "wallet" in config ? config.wallet.address() : "0x";
11699
+ const { isConnected, address: connectedWalletAddress } = useAccount3();
11700
+ const showUseConnected = !config.disableConnectedWallet && isConnected && connectedWalletAddress && withdrawalWalletAddress.toLowerCase() !== connectedWalletAddress.toLowerCase();
11701
+ useEffect27(() => {
11702
+ logger.debug("withdrawalContent:showUseConnected", {
11703
+ isConnected,
11704
+ connectedWalletAddress,
11705
+ withdrawalWalletAddress
11706
+ });
11707
+ }, [isConnected, connectedWalletAddress, withdrawalWalletAddress]);
11708
+ return showUseConnected;
11709
+ }
11710
+ function isValidWithdrawal({
11711
+ config,
11712
+ checkoutConfig,
11713
+ withdrawalUSD,
11714
+ recipientAddress,
11715
+ selectedChainId,
11716
+ sourceTokenBalance
11717
+ }) {
11718
+ const isValidAddress = isAddressSupported(recipientAddress);
11719
+ const isValidAddressAndChain = isAddressCompatibleWithChain(
11720
+ recipientAddress,
11721
+ selectedChainId
11722
+ );
11723
+ const minWithdrawalUsd = config.getMinWithdrawalUSD?.({
11724
+ tokenAddress: checkoutConfig?.sourceTokenAddress || "0x",
11725
+ tokenChainId: checkoutConfig?.sourceChain || "0"
11726
+ }) || 0.01;
11727
+ const isWithdrawAmountTooLow = Number(withdrawalUSD) < minWithdrawalUsd;
11728
+ const isWithdrawAmountValid = !isWithdrawAmountTooLow && Number(withdrawalUSD) <= sourceTokenBalance;
11729
+ return {
11730
+ isValidAddress,
11731
+ isValidAddressAndChain,
11732
+ isWithdrawAmountTooLow,
11733
+ isWithdrawAmountValid,
11734
+ minWithdrawalUsd
11735
+ };
11736
+ }
11631
11737
  var WithdrawContent = ({
11632
11738
  onContinue,
11633
11739
  config,
11634
11740
  withdrawalItem
11635
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: refactor this later
11636
11741
  }) => {
11637
11742
  const sourceTokenBalance = withdrawalItem?.withdrawalSourceTokenBalance?.() || 0;
11638
11743
  const token = config.sourceTokenSymbol;
@@ -11683,7 +11788,6 @@ var WithdrawContent = ({
11683
11788
  iconSrc: getTokenIconUrl(selectedToken)
11684
11789
  });
11685
11790
  }, [targetAssetInfo, updateTargetAsset, selectedChainId, selectedToken]);
11686
- const withdrawalWalletAddress = "wallet" in config ? config.wallet.address() : "0x";
11687
11791
  const {
11688
11792
  isLoading: isQuoteLoading,
11689
11793
  data: quote,
@@ -11699,11 +11803,7 @@ var WithdrawContent = ({
11699
11803
  symbol: selectedToken,
11700
11804
  targetAsset: targetAssetInfo?.address
11701
11805
  });
11702
- const {
11703
- isConnected,
11704
- connector,
11705
- address: connectedWalletAddress
11706
- } = useAccount3();
11806
+ const { connector, address: connectedWalletAddress } = useAccount3();
11707
11807
  const { handleWithdrawal, isWithdrawing, withdrawalError } = useWithdrawal({
11708
11808
  config,
11709
11809
  withdrawalItem,
@@ -11725,27 +11825,25 @@ var WithdrawContent = ({
11725
11825
  (wallet) => wallet.id === connector?.id
11726
11826
  )?.iconUrl;
11727
11827
  const normalizedSelectedToken = selectedToken.toUpperCase();
11728
- const isValidAddress = isAddressSupported(recipientAddress);
11729
- const isValidAddressAndChain = isAddressCompatibleWithChain(
11730
- recipientAddress,
11731
- selectedChainId
11732
- );
11733
11828
  const { checkoutItem } = useCheckoutContext();
11734
11829
  const checkoutConfig = checkoutItem?.initSettings.config;
11735
- const minWithdrawalUsd = config.getMinWithdrawalUSD?.({
11736
- tokenAddress: checkoutConfig?.sourceTokenAddress || "0x",
11737
- tokenChainId: checkoutConfig?.sourceChain || "0"
11738
- }) || 0.01;
11739
- const isWithdrawAmountTooLow = Number(withdrawalUSD) < minWithdrawalUsd;
11740
- const isWithdrawAmountValid = !isWithdrawAmountTooLow && Number(withdrawalUSD) <= sourceTokenBalance;
11741
- const showUseConnected = !config.disableConnectedWallet && isConnected && connectedWalletAddress && withdrawalWalletAddress.toLowerCase() !== connectedWalletAddress.toLowerCase();
11742
- useEffect27(() => {
11743
- logger.debug("withdrawalContent:showUseConnected", {
11744
- isConnected,
11745
- connectedWalletAddress,
11746
- withdrawalWalletAddress
11747
- });
11748
- }, [isConnected, connectedWalletAddress, withdrawalWalletAddress]);
11830
+ const {
11831
+ isValidAddress,
11832
+ isValidAddressAndChain,
11833
+ isWithdrawAmountTooLow,
11834
+ isWithdrawAmountValid,
11835
+ minWithdrawalUsd
11836
+ } = isValidWithdrawal({
11837
+ config,
11838
+ checkoutConfig,
11839
+ withdrawalUSD,
11840
+ sourceTokenBalance,
11841
+ recipientAddress,
11842
+ selectedChainId
11843
+ });
11844
+ const showUseConnected = useShowConnectWallet({
11845
+ config
11846
+ });
11749
11847
  const handleUseConnectedClick = () => {
11750
11848
  if (!connectedWalletAddress) {
11751
11849
  return;
@@ -11822,7 +11920,7 @@ var WithdrawContent = ({
11822
11920
  isValidAddressAndChain,
11823
11921
  selectedChainName
11824
11922
  });
11825
- const errorNotification = useMemo13(
11923
+ const errorNotification = useMemo14(
11826
11924
  () => getErrorNotification(
11827
11925
  quoteErrorObject,
11828
11926
  withdrawalError,
@@ -12068,7 +12166,7 @@ import { useAccount as useAccount6 } from "wagmi";
12068
12166
  // src/components/FunPayments/FunPaymentMethods.tsx
12069
12167
  import { BridgeCustomerStatus as BridgeCustomerStatus3 } from "@funkit/api-base";
12070
12168
  import {
12071
- FlagKey as FlagKey16,
12169
+ FlagKey as FlagKey17,
12072
12170
  formatCurrencyAndStringify as formatCurrencyAndStringify4,
12073
12171
  formatSecondsToReadableForm,
12074
12172
  safeParseJson as safeParseJson4
@@ -12155,9 +12253,9 @@ var isSoftRejected = (customer) => customer && isKycUninitialized(customer.statu
12155
12253
  var FIAT_PROCESSING_TIME = "1-2 business days";
12156
12254
 
12157
12255
  // src/hooks/useCheckoutTimeEstimate.ts
12158
- import { FlagKey as FlagKey14 } from "@funkit/utils";
12256
+ import { FlagKey as FlagKey15 } from "@funkit/utils";
12159
12257
  function useCheckoutTimeEstimate(originalTimeEstimationMs, paymentMethod = "card" /* CARD */, bypassFlag = false) {
12160
- const timeEstimatesJsonString = useFlag(FlagKey14.CheckoutTimeEstimateOverrides);
12258
+ const timeEstimatesJsonString = useFlag(FlagKey15.CheckoutTimeEstimateOverrides);
12161
12259
  const timeEstimates = safeJSONParse(
12162
12260
  timeEstimatesJsonString
12163
12261
  );
@@ -12174,9 +12272,9 @@ import {
12174
12272
  getBridgeKycLink
12175
12273
  } from "@funkit/api-base";
12176
12274
  import { FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO9 } from "@funkit/chains";
12177
- import { FlagKey as FlagKey15 } from "@funkit/utils";
12275
+ import { FlagKey as FlagKey16 } from "@funkit/utils";
12178
12276
  import { useQuery as useQuery10, useQueryClient } from "@tanstack/react-query";
12179
- import { useCallback as useCallback16 } from "react";
12277
+ import { useCallback as useCallback17 } from "react";
12180
12278
  var sepaCountryCode = [
12181
12279
  // EU countries that are part of SEPA
12182
12280
  "AT",
@@ -12254,8 +12352,8 @@ function useFiatEnabled() {
12254
12352
  const isEuSepaUser = sepaCountryCode.includes(
12255
12353
  userIpInfo?.alpha2 || "PLACEHOLDER"
12256
12354
  );
12257
- const isTokenTransferEnabled = useFlag(FlagKey15.EnableTokenTransfer);
12258
- const isFiatEnabled = useFlag(FlagKey15.EnableFiatDeposit);
12355
+ const isTokenTransferEnabled = useFlag(FlagKey16.EnableTokenTransfer);
12356
+ const isFiatEnabled = useFlag(FlagKey16.EnableFiatDeposit);
12259
12357
  return isEuSepaUser && isTokenTransferEnabled && isFiatEnabled;
12260
12358
  }
12261
12359
  function useFrogAccounts() {
@@ -12275,13 +12373,13 @@ function useFrogAccounts() {
12275
12373
  function useClearFrogAccountsCache() {
12276
12374
  const { walletAddress } = useGeneralWallet();
12277
12375
  const queryClient = useQueryClient();
12278
- const clearFrogAccounts = useCallback16(() => {
12376
+ const clearFrogAccounts = useCallback17(() => {
12279
12377
  queryClient.removeQueries({
12280
12378
  queryKey: ["frogSubAccounts", walletAddress],
12281
12379
  exact: true
12282
12380
  });
12283
12381
  }, [queryClient, walletAddress]);
12284
- const clearVirtualFiatAccounts = useCallback16(() => {
12382
+ const clearVirtualFiatAccounts = useCallback17(() => {
12285
12383
  queryClient.removeQueries({
12286
12384
  queryKey: ["useVirtualFiatAccounts"]
12287
12385
  });
@@ -12356,7 +12454,7 @@ function useCreateVirtualBankAccount() {
12356
12454
  const chainName = targetChainId && FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO9[targetChainId]?.name?.toLowerCase();
12357
12455
  const subAccountId = allFiatAccounts?.bridgeCustomer?.id;
12358
12456
  const { clearVirtualFiatAccounts } = useClearFrogAccountsCache();
12359
- const handleCreateVirtualFiatAccount = useCallback16(async () => {
12457
+ const handleCreateVirtualFiatAccount = useCallback17(async () => {
12360
12458
  try {
12361
12459
  if (!subAccountId || !chainName) {
12362
12460
  return {
@@ -12406,7 +12504,7 @@ import {
12406
12504
  FUNKIT_CONNECT_CHECKOUT_NATIVE_CURRENCY_ADDRESS as FUNKIT_CONNECT_CHECKOUT_NATIVE_CURRENCY_ADDRESS3,
12407
12505
  FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO10
12408
12506
  } from "@funkit/chains";
12409
- import { useMemo as useMemo14 } from "react";
12507
+ import { useMemo as useMemo15 } from "react";
12410
12508
 
12411
12509
  // src/hooks/useWalletAssets.ts
12412
12510
  import {
@@ -12583,7 +12681,7 @@ var processWalletAssets = (walletAssets, targetChain) => {
12583
12681
  };
12584
12682
  function useWalletAssetHoldings(targetChain) {
12585
12683
  const { walletAssets, isLoading, totalWalletAssetsUsd } = useWalletAssets();
12586
- const processedAssets = useMemo14(
12684
+ const processedAssets = useMemo15(
12587
12685
  () => processWalletAssets(walletAssets, targetChain),
12588
12686
  [targetChain, walletAssets]
12589
12687
  );
@@ -13831,16 +13929,6 @@ var CardPaymentMethodItem = ({
13831
13929
  valueIcon: customValueIcon ?? /* @__PURE__ */ React74.createElement(CombinedCreditCardOptionsIcon, null),
13832
13930
  onClick,
13833
13931
  isDisabled: !isClickable,
13834
- badge: /* @__PURE__ */ React74.createElement(
13835
- FunBadge,
13836
- {
13837
- background: "approvedBadgeBackground",
13838
- borderColor: "approvedBadgeBorder",
13839
- color: "approvedBadgeText",
13840
- hasShine: true
13841
- },
13842
- "NEW"
13843
- ),
13844
13932
  disclaimerText: `$50,000 limit \u2022 ${formatSecondsToReadableForm(timeEstimate, true)}`
13845
13933
  }
13846
13934
  );
@@ -13853,12 +13941,12 @@ var TransferPaymentMethodItem = ({
13853
13941
  paymentIcon
13854
13942
  }) => {
13855
13943
  const { textCustomizations } = useFunkitConfig();
13856
- const enableBitcoin = useFlag(FlagKey16.EnableBitcoin);
13857
- const bannerJson = useFlag(FlagKey16.NewTokenAssetSelectionBanner);
13944
+ const enableBitcoin = useFlag(FlagKey17.EnableBitcoin);
13945
+ const bannerJson = useFlag(FlagKey17.NewTokenAssetSelectionBanner);
13858
13946
  const bannerData = safeParseJson4(bannerJson);
13859
13947
  const addBitcoinToSourceChainsAndAssetsMiddleware = enableBitcoin ? addBitcoinToSourceChainsAndAssets : void 0;
13860
13948
  const depositAssetsJson = useFlag(
13861
- FlagKey16.TokenTransferSourceChainsAndAssets,
13949
+ FlagKey17.TokenTransferSourceChainsAndAssets,
13862
13950
  void 0,
13863
13951
  addBitcoinToSourceChainsAndAssetsMiddleware
13864
13952
  );
@@ -13975,16 +14063,6 @@ function PayPalPaymentMethodItem({
13975
14063
  keyText: "Deposit with PayPal",
13976
14064
  onClick,
13977
14065
  isDisabled: !isClickable,
13978
- badge: /* @__PURE__ */ React74.createElement(
13979
- FunBadge,
13980
- {
13981
- background: "approvedBadgeBackground",
13982
- borderColor: "approvedBadgeBorder",
13983
- color: "approvedBadgeText",
13984
- hasShine: true
13985
- },
13986
- "NEW"
13987
- ),
13988
14066
  disclaimerText: "$10,000 limit \u2022 5 min"
13989
14067
  }
13990
14068
  );
@@ -14076,7 +14154,7 @@ var BankIconActive = ({ size = 20 }) => {
14076
14154
 
14077
14155
  // src/components/FunConnectOptions/FunSignInStep.tsx
14078
14156
  import { groupBy, isMobile as isMobile8, isSafari as isSafari3, redirectInMobile as redirectInMobile2 } from "@funkit/utils";
14079
- import React191, { Fragment as Fragment2, useCallback as useCallback42, useMemo as useMemo37, useState as useState62 } from "react";
14157
+ import React191, { Fragment as Fragment2, useCallback as useCallback43, useMemo as useMemo38, useState as useState62 } from "react";
14080
14158
 
14081
14159
  // src/providers/walletConnectDeepLink.ts
14082
14160
  var storageKey = "WALLETCONNECT_DEEPLINK_CHOICE";
@@ -14494,10 +14572,10 @@ var SocialsIcon = () => {
14494
14572
  };
14495
14573
 
14496
14574
  // src/components/FunConnectOptions/FunConnectOptions.tsx
14497
- import React190, { useCallback as useCallback41, useMemo as useMemo36, useState as useState61 } from "react";
14575
+ import React190, { useCallback as useCallback42, useMemo as useMemo37, useState as useState61 } from "react";
14498
14576
 
14499
14577
  // src/hooks/useAnimatedNavigation.ts
14500
- import { useCallback as useCallback17, useState as useState28 } from "react";
14578
+ import { useCallback as useCallback18, useState as useState28 } from "react";
14501
14579
 
14502
14580
  // src/css/modalTransitionStyles.css.ts
14503
14581
  var animateContentInClass = "stgjxl2";
@@ -14525,7 +14603,7 @@ function useAnimatedNavigation(callback) {
14525
14603
  const [animateOut, setAnimateOut] = useState28(false);
14526
14604
  const [isSkipped, setIsSkipped] = useState28(false);
14527
14605
  const [isReversed, setIsReversed] = useState28(false);
14528
- const navigateTo = useCallback17(
14606
+ const navigateTo = useCallback18(
14529
14607
  (page, params = {}) => {
14530
14608
  setIsSkipped(!!params.skip);
14531
14609
  if (params.skip) {
@@ -14540,7 +14618,7 @@ function useAnimatedNavigation(callback) {
14540
14618
  },
14541
14619
  [callback]
14542
14620
  );
14543
- const animate = useCallback17(
14621
+ const animate = useCallback18(
14544
14622
  (callback2, params = {}) => {
14545
14623
  setIsSkipped(!!params.skip);
14546
14624
  if (params.skip) {
@@ -14568,17 +14646,17 @@ import React180, { useEffect as useEffect45, useRef as useRef23, useState as use
14568
14646
 
14569
14647
  // src/modals/CheckoutModal/stepTransition.ts
14570
14648
  import {
14571
- useCallback as useCallback37,
14649
+ useCallback as useCallback38,
14572
14650
  useRef as useRef22,
14573
14651
  useState as useState57
14574
14652
  } from "react";
14575
14653
 
14576
14654
  // src/hooks/useCheckoutQuoteNotification.ts
14577
- import { useMemo as useMemo15 } from "react";
14655
+ import { useMemo as useMemo16 } from "react";
14578
14656
  function useCheckoutQuoteNotification() {
14579
14657
  const { clearCheckoutQuoteMessages } = useQuoteContext();
14580
14658
  const { quoteErrorMessage, quoteStepMessage } = useQuoteContext();
14581
- const quoteNotification = useMemo15(() => {
14659
+ const quoteNotification = useMemo16(() => {
14582
14660
  if (quoteErrorMessage !== "") {
14583
14661
  return {
14584
14662
  messageType: "error",
@@ -14862,7 +14940,7 @@ import {
14862
14940
  BridgeCustomerStatus as BridgeCustomerStatus4
14863
14941
  } from "@funkit/api-base";
14864
14942
  import { exhaustiveCheck as exhaustiveCheck4 } from "@funkit/utils";
14865
- import React92, { useCallback as useCallback18, useState as useState30 } from "react";
14943
+ import React92, { useCallback as useCallback19, useState as useState30 } from "react";
14866
14944
  import { createPortal as createPortal4 } from "react-dom";
14867
14945
 
14868
14946
  // src/components/Icons/HomeIcon.tsx
@@ -15464,7 +15542,7 @@ var VerifyAccountScreen = ({
15464
15542
  const kycUninitialized = !isSoftRejected2 && customerStatus && isKycUninitialized(customerStatus);
15465
15543
  const canStartKyc = kycUninitialized || isSoftRejected2;
15466
15544
  const handleCreateVirtualFiatAccount = useCreateVirtualBankAccount();
15467
- const onClick = useCallback18(async () => {
15545
+ const onClick = useCallback19(async () => {
15468
15546
  if (customerStatus === BridgeCustomerStatus4.ACTIVE) {
15469
15547
  setCreating(true);
15470
15548
  const result = await handleCreateVirtualFiatAccount();
@@ -15996,7 +16074,7 @@ function getCheckoutCompletionTime(checkout) {
15996
16074
  }
15997
16075
 
15998
16076
  // src/components/FunCheckoutHistory/FunCheckoutHistoryDetail.tsx
15999
- import React108, { useCallback as useCallback20, useMemo as useMemo16, useState as useState32 } from "react";
16077
+ import React108, { useCallback as useCallback21, useMemo as useMemo17, useState as useState32 } from "react";
16000
16078
  import { createPortal as createPortal6 } from "react-dom";
16001
16079
 
16002
16080
  // src/components/HelpAlert/HelpAlert.tsx
@@ -16012,7 +16090,7 @@ var HelpAlert = ({ onHelp: onHelp2 }) => {
16012
16090
  };
16013
16091
 
16014
16092
  // src/hooks/useFunListeners.ts
16015
- import { useCallback as useCallback19, useEffect as useEffect28, useRef as useRef13 } from "react";
16093
+ import { useCallback as useCallback20, useEffect as useEffect28, useRef as useRef13 } from "react";
16016
16094
  function useCheckoutHistoryListener(activate = true, singleDepositAddr) {
16017
16095
  const activeIntervalRef = useRef13();
16018
16096
  const { startCheckoutHistoryListener, stopCheckoutHistoryListener } = useCheckoutHistoryContext();
@@ -16035,21 +16113,21 @@ function useSIWFarcasterListener(channelToken) {
16035
16113
  const { getFcConnectionStatus, handleFunkitWeb2Login } = useFunkitWeb2Login();
16036
16114
  const intervalRef = useRef13();
16037
16115
  const [refreshSymbol, triggerRefreshSymbol] = useSymbolRefresh_default();
16038
- const startStatusListener = useCallback19(() => {
16116
+ const startStatusListener = useCallback20(() => {
16039
16117
  clearInterval(intervalRef.current);
16040
16118
  triggerRefreshSymbol();
16041
16119
  intervalRef.current = setInterval(() => {
16042
16120
  triggerRefreshSymbol();
16043
16121
  }, FARCASTER_STATUS_INTERVAL);
16044
16122
  }, [triggerRefreshSymbol]);
16045
- const stopStatusListener = useCallback19(() => {
16123
+ const stopStatusListener = useCallback20(() => {
16046
16124
  clearInterval(intervalRef.current);
16047
16125
  }, []);
16048
16126
  useEffect28(() => {
16049
16127
  startStatusListener();
16050
16128
  return () => stopStatusListener();
16051
16129
  }, []);
16052
- const check = useCallback19(async () => {
16130
+ const check = useCallback20(async () => {
16053
16131
  if (!channelToken || !initalChainid) {
16054
16132
  return;
16055
16133
  }
@@ -16363,7 +16441,7 @@ function FunCheckoutHistoryDetail({
16363
16441
  useCheckoutHistoryListener(isProcessing, checkoutHistoryInfo?.depositAddr);
16364
16442
  useWalletAssets({ enableRefetchInterval: isProcessing || isCompleted });
16365
16443
  const { beginCheckout } = useFunkitCheckout({});
16366
- const handleNewCheckout = useCallback20(
16444
+ const handleNewCheckout = useCallback21(
16367
16445
  (fromCheckout) => {
16368
16446
  onClose({ isNewDeposit: true });
16369
16447
  const historicalCheckout = fromCheckout.clientMetadata;
@@ -16382,7 +16460,7 @@ function FunCheckoutHistoryDetail({
16382
16460
  isActiveCheckout
16383
16461
  ]
16384
16462
  );
16385
- const primaryButtonProps = useMemo16(() => {
16463
+ const primaryButtonProps = useMemo17(() => {
16386
16464
  if (!isCheckoutLoaded) {
16387
16465
  return void 0;
16388
16466
  }
@@ -16471,7 +16549,7 @@ var CheckoutAlert = ({ state, refundState, onHelp: onHelp2 }) => {
16471
16549
 
16472
16550
  // src/components/FunCheckoutHistory/FunCheckoutHistoryHelp.tsx
16473
16551
  import { sendSupportMessage } from "@funkit/api-base";
16474
- import React112, { useEffect as useEffect30, useMemo as useMemo17, useRef as useRef15, useState as useState33 } from "react";
16552
+ import React112, { useEffect as useEffect30, useMemo as useMemo18, useRef as useRef15, useState as useState33 } from "react";
16475
16553
  import { createPortal as createPortal7 } from "react-dom";
16476
16554
 
16477
16555
  // src/components/FunInput/FunTextAreaInput.tsx
@@ -16648,7 +16726,7 @@ function FunCheckoutHistoryHelp({
16648
16726
  );
16649
16727
  const [descriptionInput, setDescriptionInput] = useState33("");
16650
16728
  const [errorMessage, setErrorMessage] = useState33();
16651
- const isEmailInputValid = useMemo17(() => {
16729
+ const isEmailInputValid = useMemo18(() => {
16652
16730
  return validateEmailString(emailInput);
16653
16731
  }, [emailInput]);
16654
16732
  const [processStage, setProcessStage] = useState33(
@@ -16840,7 +16918,7 @@ import {
16840
16918
  formatTimestamp as formatTimestamp2,
16841
16919
  isTokenEquivalent as isTokenEquivalent3
16842
16920
  } from "@funkit/utils";
16843
- import React113, { useCallback as useCallback21, useMemo as useMemo18, useRef as useRef16, useState as useState34 } from "react";
16921
+ import React113, { useCallback as useCallback22, useMemo as useMemo19, useRef as useRef16, useState as useState34 } from "react";
16844
16922
  import { createPortal as createPortal8 } from "react-dom";
16845
16923
 
16846
16924
  // src/hooks/useReceiveAmountLabel.ts
@@ -16869,7 +16947,7 @@ function FunDirectExecutionHistoryDetail({
16869
16947
  const bottomSectionRef = document.getElementById(bottomBarId);
16870
16948
  const { checkoutItem } = useCheckoutContext();
16871
16949
  const { beginCheckout } = useFunkitCheckout({});
16872
- const handleNewCheckout = useCallback21(
16950
+ const handleNewCheckout = useCallback22(
16873
16951
  (fromCheckout) => {
16874
16952
  onClose({ isNewDeposit: true });
16875
16953
  const historicalCheckout = fromCheckout.clientMetadata;
@@ -16889,7 +16967,7 @@ function FunDirectExecutionHistoryDetail({
16889
16967
  ]
16890
16968
  );
16891
16969
  const isWithdrawal = directExecution?.clientMetadata?.isWithdrawal;
16892
- const buttonProps = useMemo18(() => {
16970
+ const buttonProps = useMemo19(() => {
16893
16971
  if (!isLoaded) {
16894
16972
  return void 0;
16895
16973
  }
@@ -17112,11 +17190,11 @@ function FunCheckoutHistoryContent({
17112
17190
  }
17113
17191
 
17114
17192
  // src/modals/CheckoutModal/CheckoutComplete/useLogCheckoutCompletion.ts
17115
- import { useCallback as useCallback22 } from "react";
17193
+ import { useCallback as useCallback23 } from "react";
17116
17194
  function useLogCheckoutCompletion() {
17117
17195
  const { latestQuote } = useQuoteContext();
17118
17196
  const { checkoutItem } = useCheckoutContext();
17119
- const logCheckoutCompletion = useCallback22(
17197
+ const logCheckoutCompletion = useCallback23(
17120
17198
  (depositAddress) => {
17121
17199
  if (depositAddress) {
17122
17200
  logger.log("checkoutFundingCompleted", {
@@ -17212,7 +17290,7 @@ function CheckoutHelp({
17212
17290
  }
17213
17291
 
17214
17292
  // src/modals/CheckoutModal/ConfirmationStep/ConfirmationStep.tsx
17215
- import React131, { useEffect as useEffect36, useMemo as useMemo23, useState as useState43 } from "react";
17293
+ import React131, { useEffect as useEffect36, useMemo as useMemo24, useState as useState43 } from "react";
17216
17294
  import { createPortal as createPortal10 } from "react-dom";
17217
17295
 
17218
17296
  // src/providers/UserPresenceContext.tsx
@@ -17253,7 +17331,7 @@ import { DirectExecutionType as DirectExecutionType2 } from "@funkit/api-base";
17253
17331
 
17254
17332
  // src/components/FunInfoBanner/FunInfoBanner.tsx
17255
17333
  import React119 from "react";
17256
- import { FlagKey as FlagKey17, safeParseJson as safeParseJson5 } from "@funkit/utils";
17334
+ import { FlagKey as FlagKey18, safeParseJson as safeParseJson5 } from "@funkit/utils";
17257
17335
 
17258
17336
  // src/components/FunInfoBanner/EphemeralInfoBanner.tsx
17259
17337
  import React118, { useState as useState36 } from "react";
@@ -17291,7 +17369,7 @@ var EphemeralInfoBanner = ({
17291
17369
 
17292
17370
  // src/components/FunInfoBanner/FunInfoBanner.tsx
17293
17371
  var FunInfoBanner = () => {
17294
- const bannerJson = useFlag(FlagKey17.ShowInfoBanner);
17372
+ const bannerJson = useFlag(FlagKey18.ShowInfoBanner);
17295
17373
  const bannerData = safeParseJson5(bannerJson);
17296
17374
  if (!bannerData || !bannerData.message) {
17297
17375
  return null;
@@ -17309,12 +17387,12 @@ var FunInfoBanner = () => {
17309
17387
  // src/components/FunTransactionSummary/PaymentAmountSummary.tsx
17310
17388
  import {
17311
17389
  formatCurrencyAndStringify as formatCurrencyAndStringify5,
17312
- isTokenAddressEquivalent as isTokenAddressEquivalent4,
17390
+ isTokenAddressEquivalent as isTokenAddressEquivalent5,
17313
17391
  isTokenEquivalent as isTokenEquivalent4
17314
17392
  } from "@funkit/utils";
17315
17393
  import NumberFlow from "@number-flow/react";
17316
17394
  import { motion as motion7 } from "motion/react";
17317
- import React121, { useMemo as useMemo20 } from "react";
17395
+ import React121, { useMemo as useMemo21 } from "react";
17318
17396
 
17319
17397
  // src/consts/design.ts
17320
17398
  var mapFontLineHeightToNumberFlowHeight = {
@@ -17327,7 +17405,7 @@ var defaultTransition = "all 150ms cubic-bezier(0.3, 0, 0.06, 1)";
17327
17405
  // src/components/FunAssetAvatar/FunAssetAvatar.tsx
17328
17406
  import { isNotNullish as isNotNullish5 } from "@funkit/utils";
17329
17407
  import clsx16 from "clsx";
17330
- import React120, { useMemo as useMemo19 } from "react";
17408
+ import React120, { useMemo as useMemo20 } from "react";
17331
17409
 
17332
17410
  // src/components/FunAssetAvatar/FunAssetAvatar.css.ts
17333
17411
  var chainContainerStyle = "uwrdc22 _1rsrm2f19 _1rsrm2fa _1rsrm2f4 _1rsrm2f4i";
@@ -17347,7 +17425,7 @@ function FunAssetAvatar({
17347
17425
  largeChainIcon = false
17348
17426
  }) {
17349
17427
  const chainMetadata = chainMetadataById[Number.parseInt((chainId || "").toString())] || null;
17350
- const finalAssetSrc = useMemo19(() => {
17428
+ const finalAssetSrc = useMemo20(() => {
17351
17429
  const normalizedTicker = assetTicker?.toUpperCase() || "";
17352
17430
  const defaultSrc = ASSET_LOGO_SRCS[normalizedTicker];
17353
17431
  if (prioritizeDefaults) {
@@ -17447,7 +17525,7 @@ function PaymentAmountSummary({
17447
17525
  })
17448
17526
  });
17449
17527
  const sourceTokenAmount = quote?.finalPaymentTokenAmount ? Number.parseFloat(quote.finalPaymentTokenAmount) : void 0;
17450
- const paymentTokenUsdAmount = useMemo20(() => {
17528
+ const paymentTokenUsdAmount = useMemo21(() => {
17451
17529
  if (!quote) {
17452
17530
  return void 0;
17453
17531
  }
@@ -17455,7 +17533,7 @@ function PaymentAmountSummary({
17455
17533
  quote.baseQuote.estSubtotalUsd + Number.parseFloat(quote.finalPaymentFeeUsd) - Number.parseFloat(quote.finalSpreadUsd)
17456
17534
  );
17457
17535
  }, [quote]);
17458
- const receiveTokenUsdAmount = useMemo20(() => {
17536
+ const receiveTokenUsdAmount = useMemo21(() => {
17459
17537
  if (!quote) {
17460
17538
  return void 0;
17461
17539
  }
@@ -17469,7 +17547,7 @@ function PaymentAmountSummary({
17469
17547
  const sourceChainId = sourceAssetInfo?.chainId;
17470
17548
  const areSameChains = sourceChainId === targetChainId;
17471
17549
  const sourceIcon = sourceAssetInfo?.iconSrc ?? void 0;
17472
- const isSameTokenAddress = isTokenAddressEquivalent4({
17550
+ const isSameTokenAddress = isTokenAddressEquivalent5({
17473
17551
  firstTokenAddress: sourceTokenAddress,
17474
17552
  secondTokenAddress: targetTokenAddress
17475
17553
  });
@@ -17746,7 +17824,7 @@ var DirectExecutionBrokerageAndCardAlert = () => {
17746
17824
  };
17747
17825
 
17748
17826
  // src/modals/CheckoutModal/ConfirmationStep/DisclaimerText.tsx
17749
- import React126, { useMemo as useMemo21 } from "react";
17827
+ import React126, { useMemo as useMemo22 } from "react";
17750
17828
  var DisclaimerText = ({
17751
17829
  continueText,
17752
17830
  isCardPayment,
@@ -17781,7 +17859,7 @@ var DisclaimerText = ({
17781
17859
  ), ", and the ", /* @__PURE__ */ React126.createElement(FunLinkButton, { href: "https://morpho.org/", inline: true, text: "terms" }), " applicable to third-party Morpho vaults", ".") : /* @__PURE__ */ React126.createElement(React126.Fragment, null, showCardDisclaimer && `${cardDisclaimer} `, "By clicking on ", continueText, ", you agree to our", " ", /* @__PURE__ */ React126.createElement(FunLinkButton, { href: FUN_TERMS_URL, inline: true, text: "terms" }), ".");
17782
17860
  };
17783
17861
  function useCardDisclaimer(checkoutItem, finalConvertedAssetName) {
17784
- const cardDisclaimer = useMemo21(() => {
17862
+ const cardDisclaimer = useMemo22(() => {
17785
17863
  if (!checkoutItem || !finalConvertedAssetName) {
17786
17864
  return null;
17787
17865
  }
@@ -17826,11 +17904,11 @@ import { useState as useState38 } from "react";
17826
17904
  import { useEffect as useEffect33, useState as useState37 } from "react";
17827
17905
 
17828
17906
  // src/hooks/useCheckoutAccountBalanceTransfer.ts
17829
- import { useCallback as useCallback23 } from "react";
17907
+ import { useCallback as useCallback24 } from "react";
17830
17908
  function useCheckoutAccountBalanceTransfer() {
17831
17909
  const { checkoutItem } = useCheckoutContext();
17832
17910
  const { funWallet, funWalletAuth } = useGeneralWallet();
17833
- const generateCheckoutTransferOpItems = useCallback23(
17911
+ const generateCheckoutTransferOpItems = useCallback24(
17834
17912
  async (toAddress, tokenAmount) => {
17835
17913
  if (checkoutItem?.selectedSourceAssetInfo?.chainId) {
17836
17914
  const newConfig = getFunkitEnvForCheckoutEstimation({
@@ -18040,7 +18118,7 @@ import React128, { useState as useState39 } from "react";
18040
18118
  // src/modals/CheckoutModal/ConfirmationStep/useAccountBalanceTransfer.ts
18041
18119
  import { getPaymasterDataForCheckoutSponsoredTransfer } from "@funkit/api-base";
18042
18120
  import { ERC20_ABI, USDT_ABI } from "@funkit/core";
18043
- import { useCallback as useCallback24 } from "react";
18121
+ import { useCallback as useCallback25 } from "react";
18044
18122
  import { useAccount as useAccount5, useSendTransaction, useWriteContract } from "wagmi";
18045
18123
 
18046
18124
  // src/utils/isMainnetUsdt.ts
@@ -18064,7 +18142,7 @@ function useWeb3AccountBalancePostCheckout(setPostCheckoutStepMessage) {
18064
18142
  const { sendTransactionAsync } = useSendTransaction();
18065
18143
  const { cancelCheckout, checkoutItem } = useCheckoutContext();
18066
18144
  const { latestQuote } = useQuoteContext();
18067
- const handleWeb3AccountBalancePostCheckout = useCallback24(
18145
+ const handleWeb3AccountBalancePostCheckout = useCallback25(
18068
18146
  async (depositAddress) => {
18069
18147
  if (!latestQuote?.baseQuote.estTotalFromAmountBaseUnit) {
18070
18148
  return;
@@ -18170,7 +18248,7 @@ function useWeb3AccountBalancePostCheckout(setPostCheckoutStepMessage) {
18170
18248
  function useWeb2AccountBalancePostCheckout(apiKey) {
18171
18249
  const { latestQuote } = useQuoteContext();
18172
18250
  const { generateCheckoutTransferOpItems } = useCheckoutAccountBalanceTransfer();
18173
- const handleWeb2AccountBalancePostCheckout = useCallback24(
18251
+ const handleWeb2AccountBalancePostCheckout = useCallback25(
18174
18252
  async (depositAddress) => {
18175
18253
  const { rFunWallet, rFunWalletAuth, transferOp, envConfig } = await generateCheckoutTransferOpItems(
18176
18254
  depositAddress,
@@ -18219,7 +18297,7 @@ function useAccountBalancePostCheckout(setPostCheckoutStepMessage, apiKey) {
18219
18297
  const { loginType } = useGeneralWallet();
18220
18298
  const handleWeb2AccountBalancePostCheckout = useWeb2AccountBalancePostCheckout(apiKey);
18221
18299
  const handleWeb3AccountBalancePostCheckout = useWeb3AccountBalancePostCheckout(setPostCheckoutStepMessage);
18222
- const handleAccountBalancePostCheckout = useCallback24(
18300
+ const handleAccountBalancePostCheckout = useCallback25(
18223
18301
  async (depositAddress) => {
18224
18302
  if (loginType === "web2" /* Web2 */) {
18225
18303
  await handleWeb2AccountBalancePostCheckout(depositAddress);
@@ -18370,15 +18448,15 @@ function usePostCheckout({
18370
18448
  }
18371
18449
 
18372
18450
  // src/modals/CheckoutModal/ConfirmationStep/useQuoteRefresh.ts
18373
- import { useCallback as useCallback27, useEffect as useEffect35, useMemo as useMemo22, useRef as useRef18, useState as useState42 } from "react";
18451
+ import { useCallback as useCallback28, useEffect as useEffect35, useMemo as useMemo23, useRef as useRef18, useState as useState42 } from "react";
18374
18452
 
18375
18453
  // src/hooks/useCountdown.tsx
18376
18454
  import React130 from "react";
18377
- import { useCallback as useCallback26, useState as useState41 } from "react";
18455
+ import { useCallback as useCallback27, useState as useState41 } from "react";
18378
18456
 
18379
18457
  // src/components/FunCountdown/FunCountdown.tsx
18380
18458
  import { noop as noop7 } from "@funkit/utils";
18381
- import React129, { useCallback as useCallback25, useEffect as useEffect34, useState as useState40 } from "react";
18459
+ import React129, { useCallback as useCallback26, useEffect as useEffect34, useState as useState40 } from "react";
18382
18460
 
18383
18461
  // src/components/FunCountdown/FunCountdown.css.ts
18384
18462
  var backgroundRing = "_1t0bc111 _1rsrm2f1l4";
@@ -18414,7 +18492,7 @@ var FunCountdown = ({
18414
18492
  const onCountdownEndedOnce = useEffectEvent(onCountdownEnded);
18415
18493
  const onBeforeCountdownEndsOnce = useEffectEvent(onBeforeCountdownEnds);
18416
18494
  const onCountdownLastSecondOnce = useEffectEvent(onCountdownLastSecond);
18417
- const handleInterval = useCallback25(() => {
18495
+ const handleInterval = useCallback26(() => {
18418
18496
  if (isPaused) {
18419
18497
  return;
18420
18498
  }
@@ -18532,7 +18610,7 @@ function useCountdown({
18532
18610
  }) {
18533
18611
  const [countdownKey, setCountdownKey] = useState41(0);
18534
18612
  const [isLastSecond, setIsLastSecond] = useState41(false);
18535
- const restartCountdown = useCallback26(() => {
18613
+ const restartCountdown = useCallback27(() => {
18536
18614
  setIsLastSecond(false);
18537
18615
  setCountdownKey((key) => key + 1);
18538
18616
  }, []);
@@ -18587,7 +18665,7 @@ function useQuoteRefresh({
18587
18665
  preloadedQuoteRef.current = data;
18588
18666
  }
18589
18667
  );
18590
- const preloadQuote = useCallback27(() => {
18668
+ const preloadQuote = useCallback28(() => {
18591
18669
  if (!isSourceAssetConfirming) {
18592
18670
  onSourceAssetConfirmed(true);
18593
18671
  }
@@ -18601,7 +18679,7 @@ function useQuoteRefresh({
18601
18679
  onBeforeCountdownEnds: preloadQuote,
18602
18680
  onCountdownEnded: () => refreshQuote()
18603
18681
  });
18604
- const refreshQuote = useCallback27(
18682
+ const refreshQuote = useCallback28(
18605
18683
  async (forceHardRefresh = false) => {
18606
18684
  if (isOnHold) {
18607
18685
  setIsPendingRefresh(true);
@@ -18633,7 +18711,7 @@ function useQuoteRefresh({
18633
18711
  },
18634
18712
  [isOnHold, restartCountdown, setCheckoutQuote, triggerAssetConfirm]
18635
18713
  );
18636
- const quoteError = useMemo22(() => {
18714
+ const quoteError = useMemo23(() => {
18637
18715
  if (quoteErrorMessage && !isQuoting) {
18638
18716
  return {
18639
18717
  message: quoteErrorMessage,
@@ -18771,7 +18849,7 @@ function ConfirmationStep({
18771
18849
  refreshIntervalSeconds: directExecutionType === DirectExecutionType2.RELAY ? RELAY_ESTIMATE_REFRESH_INTERVAL_SEC : DEFAULT_ESTIMATE_REFRESH_INTERVAL_SEC
18772
18850
  })
18773
18851
  );
18774
- const error = useMemo23(() => {
18852
+ const error = useMemo24(() => {
18775
18853
  if (!isInitialQuoting && moonpayAmountCheck?.isInvalid) {
18776
18854
  return {
18777
18855
  message: moonpayAmountCheck.message,
@@ -18786,7 +18864,7 @@ function ConfirmationStep({
18786
18864
  quoteError,
18787
18865
  isInitialQuoting
18788
18866
  ]);
18789
- const stepMessage = useMemo23(() => {
18867
+ const stepMessage = useMemo24(() => {
18790
18868
  if (initialQuoteStep) {
18791
18869
  return initialQuoteStep;
18792
18870
  }
@@ -18843,7 +18921,7 @@ function ConfirmationStep({
18843
18921
  const isStepLoading = isInitialQuoting || isContinuing || isRefreshing;
18844
18922
  const uiCustomizations = funkitConfig.uiCustomizations?.confirmationScreen;
18845
18923
  const customRecipient = checkoutItem?.initSettings.config.customRecipient;
18846
- const showKatanaBridgeAlert = useMemo23(() => {
18924
+ const showKatanaBridgeAlert = useMemo24(() => {
18847
18925
  const relayQuoteMetadata = latestQuote?.baseQuote?.metadata;
18848
18926
  if (!relayQuoteMetadata) {
18849
18927
  return false;
@@ -18857,7 +18935,7 @@ function ConfirmationStep({
18857
18935
  // https://fun-xyz.slack.com/archives/C08PVUDA1M2/p1752179735981389?thread_ts=1752176009.628309&cid=C08PVUDA1M2
18858
18936
  swapImpact + appFeePercent > KATANA_BRIDGE_ALERT_THRESHOLD_PERCENT;
18859
18937
  }, [funkitConfig.apiKey, latestQuote, checkoutItem]);
18860
- const showDirectExecutionNotificationBanner = useMemo23(() => {
18938
+ const showDirectExecutionNotificationBanner = useMemo24(() => {
18861
18939
  const isRelayEnabled = checkoutItem !== null && getIsRelayEnabled({
18862
18940
  fromChainId: checkoutItem.selectedSourceAssetInfo.chainId,
18863
18941
  fromTokenAddress: checkoutItem.selectedSourceAssetInfo.address || "",
@@ -19109,7 +19187,7 @@ import { getMeldDefaultFiat } from "@funkit/api-base";
19109
19187
  import { useQuery as useQuery13 } from "@tanstack/react-query";
19110
19188
 
19111
19189
  // src/hooks/queries/useMeldCryptoCurrencyCode.ts
19112
- import { FlagKey as FlagKey18 } from "@funkit/utils";
19190
+ import { FlagKey as FlagKey19 } from "@funkit/utils";
19113
19191
  import { arbitrum as arbitrum3, base as base6, polygon as polygon5 } from "viem/chains";
19114
19192
  var ARB_USDC = "0xaf88d065e77c8cC2239327C5EDb3A432268e5831".toLowerCase();
19115
19193
  var POLYGON_USDC = "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359".toLowerCase();
@@ -19142,7 +19220,7 @@ function useMeldCryptoCurrencyCode() {
19142
19220
  return mappedCurrency;
19143
19221
  }
19144
19222
  function useIsMeldEnabled() {
19145
- const meldEnabled = useFlag(FlagKey18.EnableMeldPayment);
19223
+ const meldEnabled = useFlag(FlagKey19.EnableMeldPayment);
19146
19224
  const meldCurrencyCode = useMeldCryptoCurrencyCode();
19147
19225
  return meldEnabled && !!meldCurrencyCode;
19148
19226
  }
@@ -19276,13 +19354,13 @@ import {
19276
19354
  MeldServiceProvider as MeldServiceProvider2
19277
19355
  } from "@funkit/api-base";
19278
19356
  import {
19279
- FlagKey as FlagKey21,
19357
+ FlagKey as FlagKey22,
19280
19358
  formatCryptoAndStringify as formatCryptoAndStringify4,
19281
19359
  formatCurrencyAndStringify as formatCurrencyAndStringify9,
19282
19360
  isTokenEquivalent as isTokenEquivalent6,
19283
19361
  round as round4
19284
19362
  } from "@funkit/utils";
19285
- import React145, { useMemo as useMemo25 } from "react";
19363
+ import React145, { useMemo as useMemo26 } from "react";
19286
19364
 
19287
19365
  // src/components/CurrencySelector/CurrencySelector.tsx
19288
19366
  import React134 from "react";
@@ -19548,7 +19626,7 @@ var MeldProviderLabel = ({
19548
19626
  };
19549
19627
 
19550
19628
  // src/components/SourcePaymentMethodItem/SourcePaymentMethodItem.tsx
19551
- import { FlagKey as FlagKey19 } from "@funkit/utils";
19629
+ import { FlagKey as FlagKey20 } from "@funkit/utils";
19552
19630
  import clsx17 from "clsx";
19553
19631
  import { useAnimate as useAnimate2 } from "motion/react";
19554
19632
  import React139 from "react";
@@ -20153,8 +20231,8 @@ var SourcePaymentMethodItem = ({
20153
20231
  icon: /* @__PURE__ */ React139.createElement(MasterCardPillIcon, { key: "mastercard", backdropColor })
20154
20232
  }
20155
20233
  ];
20156
- const isCardEnabled = useFlag(FlagKey19.EnableCard);
20157
- const isBrokerageEnabled = useFlag(FlagKey19.EnableBrokerage);
20234
+ const isCardEnabled = useFlag(FlagKey20.EnableCard);
20235
+ const isBrokerageEnabled = useFlag(FlagKey20.EnableBrokerage);
20158
20236
  const usableAlternativeIcons = icons.filter(({ paymentMethod }) => {
20159
20237
  if (paymentMethod === type || paymentMethod === "card" /* CARD */ && !isCardEnabled || paymentMethod === "brokerage" /* BROKERAGE */ && !isBrokerageEnabled) {
20160
20238
  return false;
@@ -20576,7 +20654,7 @@ import {
20576
20654
  katanaChain
20577
20655
  } from "@funkit/chains";
20578
20656
  import { getTokenAddressBySymbolAndChainId as getTokenAddressBySymbolAndChainId2 } from "@funkit/core";
20579
- import { useCallback as useCallback28, useState as useState44 } from "react";
20657
+ import { useCallback as useCallback29, useState as useState44 } from "react";
20580
20658
  import { mainnet as mainnet7, mantle, zksync as zksync2 } from "viem/chains";
20581
20659
  var pickSourceAssetForCard = async (checkoutItem, userIpInfo) => {
20582
20660
  if (!checkoutItem?.initSettings.config.targetChain) {
@@ -20637,7 +20715,7 @@ function useUpdateCardSourceAsset() {
20637
20715
  const { checkoutItem, updateSourceAsset } = useCheckoutContext();
20638
20716
  const { userIpInfo } = useFunkitUserIp();
20639
20717
  const [isUpdating, setIsUpdating] = useState44(false);
20640
- const onSelectCard = useCallback28(async () => {
20718
+ const onSelectCard = useCallback29(async () => {
20641
20719
  setIsUpdating(true);
20642
20720
  try {
20643
20721
  const source = await pickSourceAssetForCard(checkoutItem, userIpInfo);
@@ -20760,7 +20838,7 @@ function InputAmountLayout({
20760
20838
  }
20761
20839
 
20762
20840
  // src/modals/CheckoutModal/InputAmount/QuickOptions.tsx
20763
- import { FlagKey as FlagKey20, clamp as clamp2, formatCurrencyAndStringify as formatCurrencyAndStringify8 } from "@funkit/utils";
20841
+ import { FlagKey as FlagKey21, clamp as clamp2, formatCurrencyAndStringify as formatCurrencyAndStringify8 } from "@funkit/utils";
20764
20842
  import React144 from "react";
20765
20843
  var USD_AMOUNT_OPTIONS_PCT = [25, 50, 75, 100];
20766
20844
  function deduplicateArray(arr) {
@@ -20768,7 +20846,7 @@ function deduplicateArray(arr) {
20768
20846
  }
20769
20847
  function useFiatAmountOptions(currency) {
20770
20848
  const isMeldEnabled = useIsMeldEnabled();
20771
- const currencyQuickOptionStr = useFlag(FlagKey20.MeldQuickOptions);
20849
+ const currencyQuickOptionStr = useFlag(FlagKey21.MeldQuickOptions);
20772
20850
  const currencyQuickOption = safeJSONParse(
20773
20851
  currencyQuickOptionStr
20774
20852
  );
@@ -20834,19 +20912,19 @@ var QuickOptions = ({
20834
20912
 
20835
20913
  // src/modals/CheckoutModal/InputAmount/useAmountInput.ts
20836
20914
  import {
20837
- useCallback as useCallback30,
20915
+ useCallback as useCallback31,
20838
20916
  useEffect as useEffect37,
20839
- useMemo as useMemo24,
20917
+ useMemo as useMemo25,
20840
20918
  useReducer as useReducer3,
20841
20919
  useRef as useRef20,
20842
20920
  useState as useState45
20843
20921
  } from "react";
20844
20922
 
20845
20923
  // src/hooks/useTextMeasurer.ts
20846
- import { useCallback as useCallback29, useRef as useRef19 } from "react";
20924
+ import { useCallback as useCallback30, useRef as useRef19 } from "react";
20847
20925
  function useTextMeasurer(inputRef) {
20848
20926
  const canvasRef = useRef19(document.createElement("canvas"));
20849
- const measureText = useCallback29(
20927
+ const measureText = useCallback30(
20850
20928
  (text, fontSize) => {
20851
20929
  if (!inputRef.current) {
20852
20930
  return void 0;
@@ -21097,7 +21175,7 @@ var MAX_WIDTH = 310;
21097
21175
  function useAmountInput(options) {
21098
21176
  const isMeldEnabled = useIsMeldEnabled();
21099
21177
  const [state, dispatch] = useReducer3(reduceState, options, initializeState);
21100
- const derivedState = useMemo24(() => getDerivedState(state), [state]);
21178
+ const derivedState = useMemo25(() => getDerivedState(state), [state]);
21101
21179
  const inputRef = useRef20(null);
21102
21180
  const { inputValue, locale } = state;
21103
21181
  const { inputDecimals, inputPrefix, placeholder } = derivedState;
@@ -21132,7 +21210,7 @@ function useAmountInput(options) {
21132
21210
  quickOptions
21133
21211
  } = options;
21134
21212
  const unitPrice = isStablecoin(checkoutConfig.targetAssetTicker) ? 1 : realUnitPrice;
21135
- const dispatchAndGetNewState = useCallback30(
21213
+ const dispatchAndGetNewState = useCallback31(
21136
21214
  (action) => {
21137
21215
  dispatch(action);
21138
21216
  return getDerivedState(reduceState(state, action));
@@ -21320,7 +21398,7 @@ function useAmountInput(options) {
21320
21398
  return () => element2.removeEventListener("beforeinput", onBeforeInput2);
21321
21399
  }
21322
21400
  }, [inputDecimals, locale]);
21323
- const onChange = useCallback30(
21401
+ const onChange = useCallback31(
21324
21402
  (event) => {
21325
21403
  dispatch({
21326
21404
  type: "setInputValue",
@@ -21355,7 +21433,7 @@ function useAmountInput(options) {
21355
21433
  });
21356
21434
  }
21357
21435
  }, [defaultAmount]);
21358
- const setFiatAmount = useCallback30(
21436
+ const setFiatAmount = useCallback31(
21359
21437
  (fiatAmount) => {
21360
21438
  const newState = dispatchAndGetNewState({
21361
21439
  type: "setFiatAmount",
@@ -21367,7 +21445,7 @@ function useAmountInput(options) {
21367
21445
  },
21368
21446
  [dispatchAndGetNewState, unitPrice]
21369
21447
  );
21370
- const toggleInputInFiat = useCallback30(() => {
21448
+ const toggleInputInFiat = useCallback31(() => {
21371
21449
  dispatch({ type: "toggleInputInFiat" });
21372
21450
  inputRef.current?.focus();
21373
21451
  }, []);
@@ -21433,7 +21511,7 @@ function InputAmountLoaded({
21433
21511
  defaultFiatCurrency,
21434
21512
  textCustomizations
21435
21513
  }) {
21436
- const maxCheckoutUsdString = useFlag(FlagKey21.MaxCheckoutUsd);
21514
+ const maxCheckoutUsdString = useFlag(FlagKey22.MaxCheckoutUsd);
21437
21515
  const isSourceNavWidgetEnabled = modalState.startingStep === "select_asset" /* SELECT_ASSET */;
21438
21516
  const { paymentMethod } = modalState.paymentMethodInfo;
21439
21517
  const { quote: manuallySelectedQuote } = modalState;
@@ -21493,7 +21571,7 @@ function InputAmountLoaded({
21493
21571
  selectedQuote,
21494
21572
  isSelectedQuoteUnavailable
21495
21573
  } = useMeld(manuallySelectedQuote, fiatAmount, fiatCurrency);
21496
- const error = useMemo25(() => {
21574
+ const error = useMemo26(() => {
21497
21575
  if (isCardCheckout) {
21498
21576
  if (isSelectedQuoteUnavailable) {
21499
21577
  return {
@@ -21778,7 +21856,7 @@ function YouPayYouReceiveWrapper({
21778
21856
 
21779
21857
  // src/modals/CheckoutModal/InputAmount/InputAmountLoading.tsx
21780
21858
  import { formatCryptoAndStringify as formatCryptoAndStringify5 } from "@funkit/utils";
21781
- import React146, { useMemo as useMemo26 } from "react";
21859
+ import React146, { useMemo as useMemo27 } from "react";
21782
21860
  function InputAmountLoading({
21783
21861
  modalState,
21784
21862
  sourceHoldingError,
@@ -21790,7 +21868,7 @@ function InputAmountLoading({
21790
21868
  const isSourceNavWidgetEnabled = modalState.startingStep === "select_asset" /* SELECT_ASSET */;
21791
21869
  const targetAssetAmount = checkoutItem?.initSettings.config.targetAssetAmount;
21792
21870
  const targetAssetTicker = checkoutItem?.initSettings.config.targetAssetTicker;
21793
- const error = useMemo26(() => {
21871
+ const error = useMemo27(() => {
21794
21872
  if (sourceHoldingError) {
21795
21873
  return {
21796
21874
  message: /* @__PURE__ */ React146.createElement("div", null, "Unable to retrieve your account balance. Please try re-linking your account.", " "),
@@ -21870,7 +21948,7 @@ function InputAmountLoading({
21870
21948
  }
21871
21949
 
21872
21950
  // src/modals/CheckoutModal/InputAmount/useAvailableBalanceForCheckout.ts
21873
- import { useMemo as useMemo27 } from "react";
21951
+ import { useMemo as useMemo28 } from "react";
21874
21952
  function useAvailableBalanceForCheckout(paymentMethodInfo, targetChainId, assetChainId, assetSymbol) {
21875
21953
  const { data: walletAssetHoldings, isLoading: isLoadingWalletAssetHoldings } = useWalletAssetHoldings(targetChainId);
21876
21954
  const holdings = {
@@ -21880,7 +21958,7 @@ function useAvailableBalanceForCheckout(paymentMethodInfo, targetChainId, assetC
21880
21958
  ["token_transfer" /* TOKEN_TRANSFER */]: null,
21881
21959
  ["virtual_bank" /* VIRTUAL_BANK */]: null
21882
21960
  }[paymentMethodInfo.paymentMethod];
21883
- const holdingItem = useMemo27(() => {
21961
+ const holdingItem = useMemo28(() => {
21884
21962
  if (!assetSymbol || !holdings) {
21885
21963
  return;
21886
21964
  }
@@ -22003,14 +22081,14 @@ import { mainnet as mainnet8, polygon as polygon6 } from "viem/chains";
22003
22081
  var ASSETS_LOW_VALUE_THRESHOLD2 = 0.1;
22004
22082
 
22005
22083
  // src/hooks/usePaymentSources.ts
22006
- import { FlagKey as FlagKey22, isNotNullish as isNotNullish7 } from "@funkit/utils";
22084
+ import { FlagKey as FlagKey23, isNotNullish as isNotNullish7 } from "@funkit/utils";
22007
22085
  function usePaymentMethodEnablement({
22008
22086
  checkoutConfig
22009
22087
  }) {
22010
22088
  const { apiKey } = useFunkitConfig();
22011
- const isTokenTransferFlagEnabled = useFlag(FlagKey22.EnableTokenTransfer);
22089
+ const isTokenTransferFlagEnabled = useFlag(FlagKey23.EnableTokenTransfer);
22012
22090
  const isFiatFlagEnabled = useFiatEnabled();
22013
- const isCardFlagEnabled = useFlag(FlagKey22.EnableCard);
22091
+ const isCardFlagEnabled = useFlag(FlagKey23.EnableCard);
22014
22092
  const isKatanaEarnFlowAction = isKatanaEarnFlow({ apiKey, checkoutConfig });
22015
22093
  const isUsKatanaUser = useIsUsKatanaUser();
22016
22094
  const isFiatEnabled = isFiatFlagEnabled && !isKatanaEarnFlowAction;
@@ -22023,11 +22101,12 @@ function usePaymentMethodEnablement({
22023
22101
  };
22024
22102
  }
22025
22103
  var usePaymentSources = (paymentMethodInfo, targetChainId, checkoutConfig) => {
22026
- const { isUserLoggedIn, walletAddress } = useGeneralWallet();
22104
+ const { userInfo, walletAddress } = useGeneralWallet();
22027
22105
  const { data: allFiatAccounts } = useVirtualFiatAccounts();
22028
22106
  const matchingFiatAccount = useMatchingVirtualFiatAccount(allFiatAccounts);
22029
22107
  const { hasUsableBalance } = useWalletAssetHoldings(targetChainId);
22030
22108
  const { apiKey } = useFunkitConfig();
22109
+ const isConnected = userInfo.isConnected;
22031
22110
  const { isFiatEnabled, isTokenTransferEnabled, isCardEnabled } = usePaymentMethodEnablement({ checkoutConfig });
22032
22111
  const accountPaymentMethodInfo = createPaymentMethodInfo({
22033
22112
  paymentMethod: "balance" /* ACCOUNT_BALANCE */,
@@ -22039,17 +22118,17 @@ var usePaymentSources = (paymentMethodInfo, targetChainId, checkoutConfig) => {
22039
22118
  bridgeCustomer: allFiatAccounts.bridgeCustomer
22040
22119
  }) : null;
22041
22120
  const showBalanceOption = isKatanaCustomer(apiKey) || hasUsableBalance;
22042
- const connectedAccountInfo = paymentMethodInfo?.paymentMethod !== "balance" /* ACCOUNT_BALANCE */ && isUserLoggedIn && showBalanceOption ? accountPaymentMethodInfo : null;
22121
+ const connectedAccountInfo = paymentMethodInfo?.paymentMethod !== "balance" /* ACCOUNT_BALANCE */ && isConnected && showBalanceOption ? accountPaymentMethodInfo : null;
22043
22122
  const connected = [
22044
22123
  paymentMethodInfo,
22045
22124
  connectedAccountInfo,
22046
22125
  virtualBankPaymentMethodInfo
22047
22126
  ].filter(isNotNullish7);
22048
- const ignoreFallback = isUserLoggedIn && !hasUsableBalance;
22127
+ const ignoreFallback = isConnected && !hasUsableBalance;
22049
22128
  const fallback2 = connected.length === 0 && !ignoreFallback ? isTokenTransferEnabled ? ["token_transfer" /* TOKEN_TRANSFER */] : isCardEnabled ? ["card" /* CARD */] : ["balance" /* ACCOUNT_BALANCE */] : [];
22050
22129
  const isTokenInNewSources = !fallback2.includes("token_transfer" /* TOKEN_TRANSFER */) && isTokenTransferEnabled;
22051
- const isWalletInNewSources = !isUserLoggedIn;
22052
- const isBankInNewSources = !matchingFiatAccount && isUserLoggedIn && isFiatEnabled;
22130
+ const isWalletInNewSources = !isConnected;
22131
+ const isBankInNewSources = !matchingFiatAccount && isConnected && isFiatEnabled;
22053
22132
  const newSources = [
22054
22133
  isTokenInNewSources && "token_transfer" /* TOKEN_TRANSFER */,
22055
22134
  !fallback2.includes("card" /* CARD */) && isCardEnabled && "card" /* CARD */,
@@ -22303,7 +22382,7 @@ function LoadingAccount({
22303
22382
  modalState,
22304
22383
  onNext
22305
22384
  }) {
22306
- const { walletAddress } = useGeneralWallet();
22385
+ const { walletAddress, userInfo } = useGeneralWallet();
22307
22386
  const { apiKey } = useFunkitConfig();
22308
22387
  const { targetChainId, isDefiMode } = modalState;
22309
22388
  const { isLoading: isFetchingAssets, walletAssets } = useWalletAssets();
@@ -22327,7 +22406,7 @@ function LoadingAccount({
22327
22406
  if (isLoadingFlags || isLoadingFiat || !checkoutConfig) {
22328
22407
  return;
22329
22408
  }
22330
- if (startsOnSelectAssetStep) {
22409
+ if (startsOnSelectAssetStep && userInfo.isConnected) {
22331
22410
  const paymentMethodInfo = createPaymentMethodInfo({
22332
22411
  paymentMethod: "balance" /* ACCOUNT_BALANCE */,
22333
22412
  walletAddress
@@ -22379,14 +22458,15 @@ function LoadingAccount({
22379
22458
  targetChainId,
22380
22459
  onNext,
22381
22460
  updateSelectedPaymentMethodInfo,
22382
- checkoutConfig
22461
+ checkoutConfig,
22462
+ userInfo.isConnected
22383
22463
  ]);
22384
22464
  return startsOnConfirmationStep ? /* @__PURE__ */ React150.createElement(ConfirmationStepLoading, null) : /* @__PURE__ */ React150.createElement(FunAssetLoading, { count: 5 });
22385
22465
  }
22386
22466
 
22387
22467
  // src/modals/CheckoutModal/MeldCurrencySelect/MeldCurrencySelect.tsx
22388
22468
  import clsx18 from "clsx";
22389
- import React151, { useMemo as useMemo28, useState as useState46 } from "react";
22469
+ import React151, { useMemo as useMemo29, useState as useState46 } from "react";
22390
22470
 
22391
22471
  // src/css/scrollStyles.css.ts
22392
22472
  var hideScrollBar = "_163ehmk0";
@@ -22442,7 +22522,7 @@ function MeldCurrencySelect({
22442
22522
  const [selectedCurrency, setSelectedCurrency] = useState46(
22443
22523
  defaultCurrency
22444
22524
  );
22445
- const filteredOptions = useMemo28(() => {
22525
+ const filteredOptions = useMemo29(() => {
22446
22526
  const newOptions = data?.filter(
22447
22527
  ({ name, currencyCode }) => currencyCode.toLowerCase().includes(query.toLowerCase()) || name.toLowerCase().includes(query.toLowerCase())
22448
22528
  ) ?? [];
@@ -22578,7 +22658,7 @@ function MeldQuotes({
22578
22658
  }
22579
22659
 
22580
22660
  // src/modals/CheckoutModal/MoonpaySetup.tsx
22581
- import React154, { useCallback as useCallback31, useMemo as useMemo30, useState as useState48 } from "react";
22661
+ import React154, { useCallback as useCallback32, useMemo as useMemo31, useState as useState48 } from "react";
22582
22662
 
22583
22663
  // src/components/FunPayments/FunPaymentMoonpayType.css.ts
22584
22664
  var mpClass = "_1kmpeyf0";
@@ -22587,7 +22667,7 @@ var stretchStyle = "_1kmpeyf1";
22587
22667
  // src/components/FunPayments/FunPaymentMoonpayType.tsx
22588
22668
  import { getMoonpayUrlSignature } from "@funkit/api-base";
22589
22669
  import { colorToHex } from "@funkit/utils";
22590
- import React153, { Fragment, useEffect as useEffect40, useMemo as useMemo29, useState as useState47 } from "react";
22670
+ import React153, { Fragment, useEffect as useEffect40, useMemo as useMemo30, useState as useState47 } from "react";
22591
22671
  var LazyMoonPayBuyWidget = (props) => {
22592
22672
  const [MoonPayBuyWidget, setMoonPayBuyWidget] = useState47(null);
22593
22673
  useEffect40(() => {
@@ -22618,7 +22698,7 @@ function FunPaymentMoonpayType({
22618
22698
  const isSandboxMode = useIsFunkitSandboxMode();
22619
22699
  const funkitConfig = useFunkitConfig();
22620
22700
  const { userInfo } = useGeneralWallet();
22621
- const currencyCode = useMemo29(() => {
22701
+ const currencyCode = useMemo30(() => {
22622
22702
  return generateMoonpayCurrencyCode(depositToken, depositTokenChainId);
22623
22703
  }, [depositToken, depositTokenChainId]);
22624
22704
  const depositTokenAmountStringFormatted = formatTokenAmountForMoonpay(
@@ -22641,7 +22721,7 @@ function FunPaymentMoonpayType({
22641
22721
  });
22642
22722
  return signature || "";
22643
22723
  };
22644
- const moonpayButtonColor = useMemo29(() => {
22724
+ const moonpayButtonColor = useMemo30(() => {
22645
22725
  const primaryButtonHex = colorToHex(activeTheme.colors.buttonPrimary);
22646
22726
  if (["#FFF", "#FFFF", "#FFFFFF", "#FFFFFFFF"].includes(primaryButtonHex)) {
22647
22727
  return void 0;
@@ -22699,12 +22779,12 @@ function MoonpaySetup({
22699
22779
  const { paymentAddress, token, tokenChainId, depositAmount } = modalState;
22700
22780
  const [isSupportedRegion, setIsSupportedRegion] = useState48(true);
22701
22781
  const [isContinueEnabled, setIsContinueEnabled] = useState48(false);
22702
- const handleOnCompleted = useCallback31(() => {
22782
+ const handleOnCompleted = useCallback32(() => {
22703
22783
  onNext({
22704
22784
  depositAddress: paymentAddress
22705
22785
  });
22706
22786
  }, [onNext, paymentAddress]);
22707
- const MoonpayWidget = useMemo30(() => {
22787
+ const MoonpayWidget = useMemo31(() => {
22708
22788
  return /* @__PURE__ */ React154.createElement(
22709
22789
  FunPaymentMoonpayType,
22710
22790
  {
@@ -22735,7 +22815,7 @@ function MoonpaySetup({
22735
22815
  // src/modals/CheckoutModal/SelectAsset.tsx
22736
22816
  import { FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST as FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST2 } from "@funkit/chains";
22737
22817
  import { formatCurrencyAndStringify as formatCurrencyAndStringify11, isTokenEquivalent as isTokenEquivalent7 } from "@funkit/utils";
22738
- import React157, { useEffect as useEffect41, useMemo as useMemo32, useState as useState49 } from "react";
22818
+ import React157, { useEffect as useEffect41, useMemo as useMemo33, useState as useState49 } from "react";
22739
22819
  import { createPortal as createPortal14 } from "react-dom";
22740
22820
 
22741
22821
  // src/components/Dropdown/ReceiveTokenDropdown.tsx
@@ -22831,13 +22911,13 @@ var ReceiveTokenDropdown = ({
22831
22911
 
22832
22912
  // src/components/NewTokenDepositAlert/NewTokenDepositAlert.tsx
22833
22913
  import React156 from "react";
22834
- import { FlagKey as FlagKey23, safeParseJson as safeParseJson6 } from "@funkit/utils";
22914
+ import { FlagKey as FlagKey24, safeParseJson as safeParseJson6 } from "@funkit/utils";
22835
22915
  var NewTokenDepositAlert = ({
22836
22916
  onClick
22837
22917
  }) => {
22838
- const alertJson = useFlag(FlagKey23.NewTokenAssetSelectionBanner);
22918
+ const alertJson = useFlag(FlagKey24.NewTokenAssetSelectionBanner);
22839
22919
  const alertData = safeParseJson6(alertJson);
22840
- const isTokenTransferEnabled = useFlag(FlagKey23.EnableTokenTransfer);
22920
+ const isTokenTransferEnabled = useFlag(FlagKey24.EnableTokenTransfer);
22841
22921
  if (!alertData || !isTokenTransferEnabled) {
22842
22922
  return null;
22843
22923
  }
@@ -22865,7 +22945,7 @@ var NewTokenDepositAlert = ({
22865
22945
  // src/hooks/useAllowedAssets.ts
22866
22946
  import { getAllowedAssets } from "@funkit/api-base";
22867
22947
  import { useQuery as useQuery17 } from "@tanstack/react-query";
22868
- import { useCallback as useCallback32, useMemo as useMemo31 } from "react";
22948
+ import { useCallback as useCallback33, useMemo as useMemo32 } from "react";
22869
22949
  function useAllowedAssets() {
22870
22950
  const { apiKey } = useFunkitConfig();
22871
22951
  const { checkoutItem } = useCheckoutContext();
@@ -22879,7 +22959,7 @@ function useAllowedAssets() {
22879
22959
  staleTime: 5 * 60 * 1e3,
22880
22960
  gcTime: Number.POSITIVE_INFINITY
22881
22961
  });
22882
- const tokens = useMemo31(() => {
22962
+ const tokens = useMemo32(() => {
22883
22963
  if (!allowedAssets) {
22884
22964
  return {};
22885
22965
  }
@@ -22890,7 +22970,7 @@ function useAllowedAssets() {
22890
22970
  }
22891
22971
  return ret;
22892
22972
  }, [allowedAssets]);
22893
- const isAllowed = useCallback32(
22973
+ const isAllowed = useCallback33(
22894
22974
  (chainId, tokenAddress) => {
22895
22975
  const disabledByCustomerList = checkoutItem?.initSettings.config.disabledSourceTokens?.some(
22896
22976
  (token) => {
@@ -22956,7 +23036,7 @@ function useEnrichedAccountHoldings({
22956
23036
  }) {
22957
23037
  const { isAllowed, isLoading } = useAllowedAssets();
22958
23038
  const { loginType, walletAddress } = useGeneralWallet();
22959
- const enrichedAccountHoldings = useMemo32(() => {
23039
+ const enrichedAccountHoldings = useMemo33(() => {
22960
23040
  if (!checkoutConfig) {
22961
23041
  return [];
22962
23042
  }
@@ -22996,7 +23076,7 @@ function useAssetOptions({
22996
23076
  chainId,
22997
23077
  dynamicTargetAssetCandidates
22998
23078
  }) {
22999
- const assetOptions = useMemo32(() => {
23079
+ const assetOptions = useMemo33(() => {
23000
23080
  return enrichedAccountHoldings.filter(
23001
23081
  ({ asset }) => chainId !== void 0 ? asset.pickedChainId === chainId.toString() : true
23002
23082
  ).map(({ asset, usableForCheckout }) => {
@@ -23068,7 +23148,7 @@ function useScrollToSelectedAsset(selectedChainTokenSymbol) {
23068
23148
  }
23069
23149
  function useComputeDefault(checkoutConfig, accountHoldings) {
23070
23150
  const candidates = checkoutConfig?.dynamicTargetAssetCandidates;
23071
- const defaultTargetAsset = useMemo32(() => {
23151
+ const defaultTargetAsset = useMemo33(() => {
23072
23152
  if (!candidates || candidates.length <= 1) {
23073
23153
  return {
23074
23154
  tokenAddress: checkoutConfig?.targetAsset || "0x",
@@ -23082,7 +23162,7 @@ function useComputeDefault(checkoutConfig, accountHoldings) {
23082
23162
  (token) => token.tokenSymbol === checkoutConfig?.targetAssetTicker
23083
23163
  ) ?? candidates.find((token) => token.isDefault) ?? candidates[0];
23084
23164
  }, [candidates, checkoutConfig]);
23085
- const defaultTokenSymbols = useMemo32(() => {
23165
+ const defaultTokenSymbols = useMemo33(() => {
23086
23166
  if (!checkoutConfig) {
23087
23167
  return [];
23088
23168
  }
@@ -23175,7 +23255,7 @@ function AccountSelectAsset({
23175
23255
  handleTargetAssetUpdate(tokenItem);
23176
23256
  onFinish();
23177
23257
  });
23178
- const selectedChainTokenSymbol = useMemo32(() => {
23258
+ const selectedChainTokenSymbol = useMemo33(() => {
23179
23259
  if (explicitlySelectedChainTokenSymbol) {
23180
23260
  const assetExists = assetOptions.find(
23181
23261
  ({ asset }) => asset.chainSymbolKey === explicitlySelectedChainTokenSymbol
@@ -23425,7 +23505,7 @@ function SelectAsset({
23425
23505
 
23426
23506
  // src/modals/CheckoutModal/SourceChange/SourceChange.tsx
23427
23507
  import { BridgeCustomerStatus as BridgeCustomerStatus6, MeldServiceProvider as MeldServiceProvider4 } from "@funkit/api-base";
23428
- import React159, { useCallback as useCallback33, useEffect as useEffect42, useState as useState50 } from "react";
23508
+ import React159, { useCallback as useCallback34, useEffect as useEffect42, useState as useState50 } from "react";
23429
23509
  import { createPortal as createPortal15 } from "react-dom";
23430
23510
 
23431
23511
  // src/modals/CheckoutModal/SourceChange/DefiPurchaseSection.tsx
@@ -23559,7 +23639,7 @@ function PayPal() {
23559
23639
  const isMeldEnabled = useIsMeldEnabled();
23560
23640
  const { checkoutItem } = useCheckoutContext();
23561
23641
  const isPaypalReady = false;
23562
- const onClick = useCallback33(() => {
23642
+ const onClick = useCallback34(() => {
23563
23643
  if (isMeldEnabled && isPaypalReady) {
23564
23644
  openMeldPopup(() => mutateAsync(MeldServiceProvider4.PAYPAL));
23565
23645
  } else {
@@ -23773,13 +23853,13 @@ import { createPortal as createPortal16 } from "react-dom";
23773
23853
 
23774
23854
  // src/components/CopyAddress/CopyInputDisplayedAddress.tsx
23775
23855
  import { truncateMiddleOfAddress } from "@funkit/utils";
23776
- import React160, { useCallback as useCallback35, useState as useState52 } from "react";
23856
+ import React160, { useCallback as useCallback36, useState as useState52 } from "react";
23777
23857
 
23778
23858
  // src/hooks/useCopyToClipboard.ts
23779
- import { useCallback as useCallback34, useEffect as useEffect43, useState as useState51 } from "react";
23859
+ import { useCallback as useCallback35, useEffect as useEffect43, useState as useState51 } from "react";
23780
23860
  var useCopyToClipboard = (text, delay = 1500) => {
23781
23861
  const [isCopied, setCopied] = useState51(false);
23782
- const handleCopy = useCallback34(() => {
23862
+ const handleCopy = useCallback35(() => {
23783
23863
  if (!text) {
23784
23864
  return;
23785
23865
  }
@@ -23819,7 +23899,7 @@ function CopyInputDisplayedAddress({
23819
23899
  const { handleCopy } = useCopyToClipboard(address);
23820
23900
  const [isActive, setIsActive] = useState52(null);
23821
23901
  const displayAddress = truncateAddress ? truncateMiddleOfAddress(address, 40, 24, 8) : address;
23822
- const handleClick = useCallback35(() => {
23902
+ const handleClick = useCallback36(() => {
23823
23903
  if (isActive) {
23824
23904
  return;
23825
23905
  }
@@ -23859,12 +23939,12 @@ function CopyInputDisplayedAddress({
23859
23939
  }
23860
23940
 
23861
23941
  // src/components/FunInfoBanner/ChainInfoBanners.tsx
23862
- import { FlagKey as FlagKey24, safeParseJson as safeParseJson7 } from "@funkit/utils";
23942
+ import { FlagKey as FlagKey25, safeParseJson as safeParseJson7 } from "@funkit/utils";
23863
23943
  import React161 from "react";
23864
23944
  var ChainInfoBanners = ({
23865
23945
  chainId
23866
23946
  }) => {
23867
- const chainInfoBanners = useFlag(FlagKey24.ChainInfoBanners);
23947
+ const chainInfoBanners = useFlag(FlagKey25.ChainInfoBanners);
23868
23948
  const chainInfoBannersData = safeParseJson7(chainInfoBanners) ?? {};
23869
23949
  try {
23870
23950
  const chainBanners = chainInfoBannersData[chainId] ?? [];
@@ -23908,7 +23988,7 @@ var LightningBoltIcon = ({ size = 16 }) => /* @__PURE__ */ React162.createElemen
23908
23988
 
23909
23989
  // src/components/QRCode/QRCode.tsx
23910
23990
  import QRCodeUtil from "qrcode";
23911
- import React163, { useMemo as useMemo33 } from "react";
23991
+ import React163, { useMemo as useMemo34 } from "react";
23912
23992
  var generateMatrix = (value, errorCorrectionLevel) => {
23913
23993
  const { data } = QRCodeUtil.create(value, { errorCorrectionLevel }).modules;
23914
23994
  const sqrt = Math.sqrt(data.length);
@@ -23936,7 +24016,7 @@ function QRCode({
23936
24016
  }) {
23937
24017
  const { activeTheme } = useActiveTheme();
23938
24018
  const size = sizeProp - Number.parseInt(outsidePadding, 10) * 2;
23939
- const dots = useMemo33(() => {
24019
+ const dots = useMemo34(() => {
23940
24020
  const dots2 = [];
23941
24021
  const matrix = generateMatrix(uri, ecl);
23942
24022
  const cellSize = size / matrix.length;
@@ -24480,8 +24560,8 @@ var TransferTokenDetails = ({
24480
24560
 
24481
24561
  // src/hooks/useTokenTransfer.ts
24482
24562
  import { bitcoinChain as bitcoinChain3, solanaChain as solanaChain4 } from "@funkit/chains";
24483
- import { FlagKey as FlagKey25 } from "@funkit/utils";
24484
- import { useMemo as useMemo34 } from "react";
24563
+ import { FlagKey as FlagKey26 } from "@funkit/utils";
24564
+ import { useMemo as useMemo35 } from "react";
24485
24565
  import { arbitrum as arbitrum4, base as base7, mainnet as mainnet9, optimism, polygon as polygon7 } from "viem/chains";
24486
24566
 
24487
24567
  // src/utils/transfer.ts
@@ -24504,7 +24584,7 @@ var useTokenTransfer = (selectedChainId, selectedToken, chainIds) => {
24504
24584
  const { apiKey } = useFunkitConfig();
24505
24585
  const { checkoutItem } = useCheckoutContext();
24506
24586
  const enableUniversal = useFlag(
24507
- FlagKey25.EnableTokenTransferUniversalDepositAddress,
24587
+ FlagKey26.EnableTokenTransferUniversalDepositAddress,
24508
24588
  false
24509
24589
  );
24510
24590
  const estPriceImpact = usePriceImpactEstimation(
@@ -24556,7 +24636,7 @@ var useTokenTransfer = (selectedChainId, selectedToken, chainIds) => {
24556
24636
  };
24557
24637
  var useMinTransferLimits = () => {
24558
24638
  const { userIpInfo } = useFunkitUserIp();
24559
- const minTransferValueJsonString = useFlag(FlagKey25.MinTokenTransferValue);
24639
+ const minTransferValueJsonString = useFlag(FlagKey26.MinTokenTransferValue);
24560
24640
  const minTransferValue = safeJSONParse(
24561
24641
  minTransferValueJsonString
24562
24642
  );
@@ -24578,7 +24658,7 @@ var useMinTransferValue = (selectedChainId) => {
24578
24658
  };
24579
24659
  var useMinTransferValues = (chainIds) => {
24580
24660
  const limits = useMinTransferLimits();
24581
- return useMemo34(() => {
24661
+ return useMemo35(() => {
24582
24662
  return chainIds.reduce(
24583
24663
  (acc, id) => {
24584
24664
  const limit = getMinTransferValueForChain(id, limits);
@@ -25300,9 +25380,9 @@ var FiatAccountDetail = {
25300
25380
 
25301
25381
  // src/modals/CheckoutModal/VirtualFiatAccount/KycIframe.tsx
25302
25382
  import { BridgeCustomerStatus as BridgeCustomerStatus7 } from "@funkit/api-base";
25303
- import React179, { useCallback as useCallback36, useEffect as useEffect44, useMemo as useMemo35, useState as useState56 } from "react";
25383
+ import React179, { useCallback as useCallback37, useEffect as useEffect44, useMemo as useMemo36, useState as useState56 } from "react";
25304
25384
  function useIframeListener(listeners) {
25305
- const handleMessage = useCallback36(
25385
+ const handleMessage = useCallback37(
25306
25386
  (event) => {
25307
25387
  switch (event.data.name) {
25308
25388
  case "load": {
@@ -25353,7 +25433,7 @@ function KycIframe({
25353
25433
  const { clearVirtualFiatAccounts } = useClearFrogAccountsCache();
25354
25434
  const { data: kycLink, isLoading: isLinkLoading } = useLoadKycLink(modalState);
25355
25435
  const [iframeLoading, setIframeLoading] = useState56(true);
25356
- const listeners = useMemo35(
25436
+ const listeners = useMemo36(
25357
25437
  () => ({
25358
25438
  load: () => {
25359
25439
  logger.info("KYC iframe loaded");
@@ -25492,7 +25572,7 @@ function initialState(checkoutItem) {
25492
25572
  function useCheckoutModalTransition(checkoutItem, onClose) {
25493
25573
  const [modalState, setModalState] = useState57(() => initialState(checkoutItem));
25494
25574
  const { clearCheckoutQuoteMessages } = useCheckoutQuoteNotification();
25495
- const onCloseWrapper = useCallback37(
25575
+ const onCloseWrapper = useCallback38(
25496
25576
  (options) => {
25497
25577
  const normalizedIsNewDeposit = !!options?.isNewDeposit;
25498
25578
  checkoutItem.initSettings.onClose?.({
@@ -25512,7 +25592,7 @@ function useCheckoutModalTransition(checkoutItem, onClose) {
25512
25592
  const [stateHistory, setHistory] = useState57([]);
25513
25593
  const prevStep = useRef22(null);
25514
25594
  const hasHistoryEntry = stateHistory.length > 1;
25515
- const onNext = useCallback37(
25595
+ const onNext = useCallback38(
25516
25596
  (payload) => {
25517
25597
  if (prevStep.current === modalState.step) {
25518
25598
  return;
@@ -25545,7 +25625,7 @@ function useCheckoutModalTransition(checkoutItem, onClose) {
25545
25625
  },
25546
25626
  [clearCheckoutQuoteMessages, modalState, animate, hasHistoryEntry]
25547
25627
  );
25548
- const onStepChange = useCallback37(
25628
+ const onStepChange = useCallback38(
25549
25629
  (nextState) => {
25550
25630
  if (prevStep.current === modalState.step) {
25551
25631
  return;
@@ -25558,7 +25638,7 @@ function useCheckoutModalTransition(checkoutItem, onClose) {
25558
25638
  },
25559
25639
  [modalState, animate]
25560
25640
  );
25561
- const onBack = useCallback37(() => {
25641
+ const onBack = useCallback38(() => {
25562
25642
  clearCheckoutQuoteMessages();
25563
25643
  const backStepOverride = checkoutBackMap[modalState.step];
25564
25644
  const prevState = [...stateHistory].reverse().find((s) => s.step === backStepOverride) ?? stateHistory[stateHistory.length - 1];
@@ -25753,7 +25833,7 @@ var FunConnectResultStep = ({
25753
25833
 
25754
25834
  // src/components/FunConnectOptions/FunFarcasterConnectingStep.tsx
25755
25835
  import { isMobile as isMobile7, isSafari as isSafari2, redirectInMobile } from "@funkit/utils";
25756
- import React184, { useCallback as useCallback38, useEffect as useEffect47 } from "react";
25836
+ import React184, { useCallback as useCallback39, useEffect as useEffect47 } from "react";
25757
25837
 
25758
25838
  // src/components/CopyAddress/OldCopyAddressButton.tsx
25759
25839
  import React183 from "react";
@@ -25806,7 +25886,7 @@ function FunFarcasterConnectingStep({
25806
25886
  }
25807
25887
  }, [farcasterUri, mobile, safari]);
25808
25888
  useSIWFarcasterListener(farcasterToken);
25809
- const svgUrl = useCallback38(async () => {
25889
+ const svgUrl = useCallback39(async () => {
25810
25890
  return (await import("./farcaster-MF6WINBA.js")).default;
25811
25891
  }, []);
25812
25892
  const promptText = mobile ? "To sign in with Farcaster, please open the Warpcast app." : "Scan this QR code or open the link with your mobile phone.";
@@ -25854,11 +25934,11 @@ function FunFarcasterConnectingStep({
25854
25934
 
25855
25935
  // src/components/FunConnectOptions/FunWeb2ConnectingStep.tsx
25856
25936
  import { isNotNullish as isNotNullish9 } from "@funkit/utils";
25857
- import React187, { useCallback as useCallback40, useEffect as useEffect49, useState as useState60 } from "react";
25937
+ import React187, { useCallback as useCallback41, useEffect as useEffect49, useState as useState60 } from "react";
25858
25938
 
25859
25939
  // src/components/FunInput/FunTwoFaInput.tsx
25860
25940
  import React185, {
25861
- useCallback as useCallback39,
25941
+ useCallback as useCallback40,
25862
25942
  useEffect as useEffect48,
25863
25943
  useRef as useRef24,
25864
25944
  useState as useState59
@@ -25885,12 +25965,12 @@ var FunTwoFaInput = ({
25885
25965
  setFocusIndex(0);
25886
25966
  }
25887
25967
  }, [value]);
25888
- const ensureFocus = useCallback39((nextIndex) => {
25968
+ const ensureFocus = useCallback40((nextIndex) => {
25889
25969
  setTimeout(() => {
25890
25970
  inputRefs.current[nextIndex]?.focus();
25891
25971
  }, 10);
25892
25972
  }, []);
25893
- const handleBackspace = useCallback39(
25973
+ const handleBackspace = useCallback40(
25894
25974
  (index) => {
25895
25975
  if (index === maxInputLength - 1 && value.length === maxInputLength) {
25896
25976
  onChange(value.slice(0, index));
@@ -25914,7 +25994,7 @@ var FunTwoFaInput = ({
25914
25994
  },
25915
25995
  [currentLength, initialInputLength, maxInputLength, onChange, value]
25916
25996
  );
25917
- const handleChange = useCallback39(
25997
+ const handleChange = useCallback40(
25918
25998
  (changeEvent) => {
25919
25999
  changeEvent.stopPropagation();
25920
26000
  const nativeEvent = changeEvent.nativeEvent;
@@ -26083,7 +26163,7 @@ var FunWeb2ConnectingStep = ({
26083
26163
  useEffect49(() => {
26084
26164
  clearLoginError();
26085
26165
  }, []);
26086
- const handleOtpComplete = useCallback40(
26166
+ const handleOtpComplete = useCallback41(
26087
26167
  async (finalOtpInput) => {
26088
26168
  if (isNotNullish9(initialChainId)) {
26089
26169
  await handleFunkitWeb2Login({
@@ -26230,7 +26310,7 @@ function FunConnectOptions({
26230
26310
  const { loginConfig } = useFunkitConfig();
26231
26311
  const prioritizedLoginType = loginConfig.prioritizedLogin;
26232
26312
  const hasSecondarySignIn = prioritizedLoginType !== "none" && loginConfig.web2 && loginConfig.web3;
26233
- const changeStep = useCallback41((newStep) => {
26313
+ const changeStep = useCallback42((newStep) => {
26234
26314
  setStep(newStep);
26235
26315
  if (isSignIn(newStep)) {
26236
26316
  setSelectedWallet(void 0);
@@ -26238,7 +26318,7 @@ function FunConnectOptions({
26238
26318
  }
26239
26319
  }, []);
26240
26320
  const { animation, navigateTo } = useAnimatedNavigation(changeStep);
26241
- const handleBackToSignIn = useCallback41(
26321
+ const handleBackToSignIn = useCallback42(
26242
26322
  (type) => {
26243
26323
  const isPrimary = !hasSecondarySignIn || type === prioritizedLoginType;
26244
26324
  navigateTo(
@@ -26249,7 +26329,7 @@ function FunConnectOptions({
26249
26329
  [navigateTo, hasSecondarySignIn, prioritizedLoginType]
26250
26330
  );
26251
26331
  const walletConnectors = usePreparedWalletConnectors();
26252
- const onRegenerateQrCode = useCallback41(
26332
+ const onRegenerateQrCode = useCallback42(
26253
26333
  async (wallet) => {
26254
26334
  const sWallet = walletConnectors.find((w) => wallet.id === w.id);
26255
26335
  const uri = await sWallet?.getQrCodeUri?.();
@@ -26257,7 +26337,7 @@ function FunConnectOptions({
26257
26337
  },
26258
26338
  [walletConnectors]
26259
26339
  );
26260
- const connectToWallet = useCallback41(
26340
+ const connectToWallet = useCallback42(
26261
26341
  async (wallet) => {
26262
26342
  if (!wallet.ready) {
26263
26343
  return;
@@ -26276,7 +26356,7 @@ function FunConnectOptions({
26276
26356
  },
26277
26357
  [changeStep, onRegenerateQrCode]
26278
26358
  );
26279
- const handleRetry = useCallback41(() => {
26359
+ const handleRetry = useCallback42(() => {
26280
26360
  if (!selectedWallet || selectedWallet.id === FUNKIT_CONNECT_WALLET_ID) {
26281
26361
  handleBackToSignIn("web2");
26282
26362
  } else {
@@ -26324,7 +26404,7 @@ function FunConnectOptions({
26324
26404
  }
26325
26405
  }
26326
26406
  };
26327
- const stepComponent = useMemo36(() => {
26407
+ const stepComponent = useMemo37(() => {
26328
26408
  switch (step) {
26329
26409
  case 0 /* SIGNIN_PRIMARY */:
26330
26410
  case 1 /* SIGNIN_SECONDARY */:
@@ -26433,7 +26513,7 @@ var FULL_SOCIAL_LOGIN_OPTIONS = [
26433
26513
  function useEnabledSocialLogins() {
26434
26514
  const funkitConfig = useFunkitConfig();
26435
26515
  const { web2SocialLogins } = funkitConfig.loginConfig;
26436
- const enabledSocialItems = useMemo37(() => {
26516
+ const enabledSocialItems = useMemo38(() => {
26437
26517
  return FULL_SOCIAL_LOGIN_OPTIONS.filter(
26438
26518
  (oAuthItem) => !!web2SocialLogins[oAuthItem.funkitKey]
26439
26519
  );
@@ -26462,7 +26542,7 @@ function FunSignInStep({
26462
26542
  handleOauthRedirect,
26463
26543
  handleGenerateFcUri
26464
26544
  } = useFunkitWeb2Login();
26465
- const isEmailInputValid = useMemo37(() => {
26545
+ const isEmailInputValid = useMemo38(() => {
26466
26546
  return validateEmailString(emailInput);
26467
26547
  }, [emailInput]);
26468
26548
  const [emailError, setEmailError] = useState62();
@@ -26535,7 +26615,7 @@ function FunSignInStep({
26535
26615
  changeStep(3 /* PENDING_WALLET */);
26536
26616
  }
26537
26617
  };
26538
- const handleEmailSubmit = useCallback42(async () => {
26618
+ const handleEmailSubmit = useCallback43(async () => {
26539
26619
  if (!isEmailInputValid) {
26540
26620
  return;
26541
26621
  }
@@ -26874,7 +26954,7 @@ function PaymentMethodSummary({
26874
26954
 
26875
26955
  // src/modals/CheckoutModal/TransferToken/CheckoutNotifications.tsx
26876
26956
  import clsx21 from "clsx";
26877
- import React201, { useEffect as useEffect51, useMemo as useMemo38, useState as useState64 } from "react";
26957
+ import React201, { useEffect as useEffect51, useMemo as useMemo39, useState as useState64 } from "react";
26878
26958
 
26879
26959
  // src/components/FunNotificationBanner/FunNotificationShowMoreButton.tsx
26880
26960
  import React196 from "react";
@@ -26922,13 +27002,13 @@ var FunNotificationShowMoreButton = ({
26922
27002
  import {
26923
27003
  getCheckoutsByUserId as getCheckoutsByUserId2
26924
27004
  } from "@funkit/api-base";
26925
- import { FlagKey as FlagKey26 } from "@funkit/utils";
27005
+ import { FlagKey as FlagKey27 } from "@funkit/utils";
26926
27006
  import { useQuery as useQuery18 } from "@tanstack/react-query";
26927
27007
  var hasCorrectPaymentMethod = (checkout, paymentMethod) => !paymentMethod || checkout.clientMetadata.selectedPaymentMethodInfo?.paymentMethod === paymentMethod;
26928
27008
  var isRecent = (checkout, timestampCutoff) => checkout.createdTimeMs > timestampCutoff;
26929
27009
  var DEFAULT_NOTIF_CUTOFF = 7 * 24 * 60 * 60 * 1e3;
26930
27010
  function useCheckoutRefreshInterval() {
26931
- const str = useFlag(FlagKey26.CheckoutNotificationsRefreshInterval);
27011
+ const str = useFlag(FlagKey27.CheckoutNotificationsRefreshInterval);
26932
27012
  return safeJSONParse(str) || { listRefresh: 50 * 1e3, itemRefresh: 5 * 1e3 };
26933
27013
  }
26934
27014
  var useRecentCheckouts = ({
@@ -27008,7 +27088,7 @@ var showMoreButtonStyle = "_4yitd93 _1rsrm2f11m _1rsrm2f1f _1rsrm2f1c _1rsrm2fls
27008
27088
  // src/components/FunNotificationBanner/FunNotificationBannerIcon.tsx
27009
27089
  import clsx19 from "clsx";
27010
27090
  import { motion as motion12, useAnimate as useAnimate3 } from "motion/react";
27011
- import React197, { useCallback as useCallback43, useEffect as useEffect50, useRef as useRef25 } from "react";
27091
+ import React197, { useCallback as useCallback44, useEffect as useEffect50, useRef as useRef25 } from "react";
27012
27092
 
27013
27093
  // src/components/FunNotificationBanner/FunNotificationBannerIcon.css.ts
27014
27094
  var STATUS_SPINNER_BOTTOM_POSITION = -5;
@@ -27257,7 +27337,7 @@ var FunNotificationBannerIcon = ({
27257
27337
  fallbackIconUrl = FALLBACK_ASSET
27258
27338
  }) => {
27259
27339
  const [animationScope, animate] = useAnimate3();
27260
- const triggerAnimationProcessingToCompleted = useCallback43(async () => {
27340
+ const triggerAnimationProcessingToCompleted = useCallback44(async () => {
27261
27341
  const completedIconPath = document.querySelector(
27262
27342
  `.${generateAnimationPrefixClassName("icon-wrapper-completed")} path`
27263
27343
  );
@@ -27364,7 +27444,7 @@ var FunNotificationBannerIcon = ({
27364
27444
  )
27365
27445
  ]);
27366
27446
  }, [animate]);
27367
- const triggerAnimationDelayedToFailed = useCallback43(async () => {
27447
+ const triggerAnimationDelayedToFailed = useCallback44(async () => {
27368
27448
  await Promise.all([
27369
27449
  animate(
27370
27450
  `.${generateAnimationPrefixClassName("icon-wrapper")}`,
@@ -27955,19 +28035,19 @@ var CheckoutNotifications = ({
27955
28035
  }
27956
28036
  setInitialDirectExecutions(directExecutions);
27957
28037
  }, [initialDirectExecutions, directExecutions]);
27958
- const displayedDirectExecutions = useMemo38(() => {
28038
+ const displayedDirectExecutions = useMemo39(() => {
27959
28039
  if (!directExecutions) {
27960
28040
  return [];
27961
28041
  }
27962
28042
  return getUpdatedDirectExecutions(directExecutions, initialDirectExecutions).filter(({ txHash }) => !closedNotifications.includes(txHash)).slice(0, MAX_COUNT);
27963
28043
  }, [initialDirectExecutions, directExecutions, closedNotifications]);
27964
- const displayedCheckouts = useMemo38(() => {
28044
+ const displayedCheckouts = useMemo39(() => {
27965
28045
  if (!checkouts) {
27966
28046
  return [];
27967
28047
  }
27968
28048
  return getUpdatedCheckouts(checkouts, initialCheckouts).filter(({ depositAddr }) => !closedNotifications.includes(depositAddr)).slice(0, MAX_COUNT);
27969
28049
  }, [initialCheckouts, checkouts, closedNotifications]);
27970
- const combinedNotifications = useMemo38(() => {
28050
+ const combinedNotifications = useMemo39(() => {
27971
28051
  return [
27972
28052
  ...displayedDirectExecutions.map(
27973
28053
  (item) => ({ ...item, isDirectExecution: true })
@@ -27977,7 +28057,7 @@ var CheckoutNotifications = ({
27977
28057
  )
27978
28058
  ].sort((a, b) => b.createdTimeMs - a.createdTimeMs);
27979
28059
  }, [displayedDirectExecutions, displayedCheckouts]);
27980
- const displayedNotifications = useMemo38(() => {
28060
+ const displayedNotifications = useMemo39(() => {
27981
28061
  return isExpanded ? combinedNotifications : combinedNotifications.slice(0, COLLAPSED_COUNT);
27982
28062
  }, [isExpanded, combinedNotifications]);
27983
28063
  const handleNotificationClose = (id) => setClosedNotifications((prev) => [...prev, id]);
@@ -28254,7 +28334,7 @@ import React217 from "react";
28254
28334
  // src/modals/ProfileDetails/ActivityTraversalContext.tsx
28255
28335
  import React205, {
28256
28336
  createContext as createContext15,
28257
- useCallback as useCallback44,
28337
+ useCallback as useCallback45,
28258
28338
  useContext as useContext15,
28259
28339
  useState as useState66
28260
28340
  } from "react";
@@ -28275,7 +28355,7 @@ var ActivityTraversalProvider = ({
28275
28355
  const [returnViewPresets, setReturnViewPresets] = useState66(
28276
28356
  {}
28277
28357
  );
28278
- const onSelectActivity = useCallback44(
28358
+ const onSelectActivity = useCallback45(
28279
28359
  ({
28280
28360
  checkoutId,
28281
28361
  initialPage,
@@ -28293,7 +28373,7 @@ var ActivityTraversalProvider = ({
28293
28373
  },
28294
28374
  []
28295
28375
  );
28296
- const resetActivityTraversal = useCallback44(() => {
28376
+ const resetActivityTraversal = useCallback45(() => {
28297
28377
  setSelectedPurchaseId(void 0);
28298
28378
  setSelectedPurchaseInitView(void 0);
28299
28379
  setReturnView(void 0);
@@ -28313,7 +28393,7 @@ var useActivityTraversal = () => {
28313
28393
  };
28314
28394
 
28315
28395
  // src/modals/ProfileDetails/ProfileDetails.tsx
28316
- import React216, { useCallback as useCallback46, useState as useState69 } from "react";
28396
+ import React216, { useCallback as useCallback47, useState as useState69 } from "react";
28317
28397
 
28318
28398
  // src/hooks/useCheckoutModalTitle.ts
28319
28399
  function useCheckoutModalTitle(depositAddress, defaultTitle) {
@@ -28327,7 +28407,7 @@ function useCheckoutModalTitle(depositAddress, defaultTitle) {
28327
28407
  import { IN_PROGRESS_CHECKOUT_STATES as IN_PROGRESS_CHECKOUT_STATES2 } from "@funkit/api-base";
28328
28408
  import { formatTimestampToDate, fullMonthNames } from "@funkit/utils";
28329
28409
  import clsx23 from "clsx";
28330
- import React214, { useEffect as useEffect52, useMemo as useMemo39, useRef as useRef26, useState as useState68 } from "react";
28410
+ import React214, { useEffect as useEffect52, useMemo as useMemo40, useRef as useRef26, useState as useState68 } from "react";
28331
28411
  import { Virtuoso } from "react-virtuoso";
28332
28412
  import { useAccount as useAccount7 } from "wagmi";
28333
28413
 
@@ -28701,7 +28781,7 @@ var HomeTokenBalanceDisplayRowSkeleton = () => {
28701
28781
 
28702
28782
  // src/modals/ProfileDetails/FunProfileViews/Home/ProfileTitleSection.tsx
28703
28783
  import React213 from "react";
28704
- import { useCallback as useCallback45, useState as useState67 } from "react";
28784
+ import { useCallback as useCallback46, useState as useState67 } from "react";
28705
28785
 
28706
28786
  // src/components/Icons/LogoutIcon.tsx
28707
28787
  import React211 from "react";
@@ -28768,7 +28848,7 @@ var ProfileTitleSection = ({
28768
28848
  onClose
28769
28849
  }) => {
28770
28850
  const [isDisconnectExpanded, setIsDisconnectExpanded] = useState67(false);
28771
- const collapseDisconnect = useCallback45(
28851
+ const collapseDisconnect = useCallback46(
28772
28852
  () => setIsDisconnectExpanded(false),
28773
28853
  []
28774
28854
  );
@@ -28874,7 +28954,7 @@ function Home({
28874
28954
  const virtuosoDiv = virtuosoParentRef.current?.firstChild;
28875
28955
  virtuosoDiv?.classList.add(animateVirtuosoInClass);
28876
28956
  }, []);
28877
- const AssetsList = useMemo39(() => {
28957
+ const AssetsList = useMemo40(() => {
28878
28958
  if (walletAssets && !Object.keys(walletAssets).length) {
28879
28959
  return /* @__PURE__ */ React214.createElement(EmptyTabAlert, null);
28880
28960
  }
@@ -28901,7 +28981,7 @@ function Home({
28901
28981
  }
28902
28982
  ));
28903
28983
  }, [walletAssets]);
28904
- const CheckoutsList = useMemo39(() => {
28984
+ const CheckoutsList = useMemo40(() => {
28905
28985
  if (checkoutHistoryList.length === 0 && isCheckoutHistoryInited) {
28906
28986
  return /* @__PURE__ */ React214.createElement(EmptyTabAlert, null);
28907
28987
  }
@@ -29124,13 +29204,13 @@ function ProfileDetails({ onClose, defaultTab }) {
29124
29204
  const [singleActivityPage, setSingleActivityPage] = useState69(
29125
29205
  selectedPurchaseInitView ?? "detail" /* DETAIL */
29126
29206
  );
29127
- const resetView = useCallback46(() => {
29207
+ const resetView = useCallback47(() => {
29128
29208
  setView(returnView ?? 0 /* HOME */);
29129
29209
  setSelectedHomeTab("checkouts" /* CHECKOUTS */);
29130
29210
  resetActivityTraversal();
29131
29211
  }, [resetActivityTraversal, returnView]);
29132
29212
  const { animation, animate } = useAnimatedNavigation(void 0);
29133
- const onSelectActivityWrapper = useCallback46(
29213
+ const onSelectActivityWrapper = useCallback47(
29134
29214
  (activity) => {
29135
29215
  onSelectActivity({
29136
29216
  ...activity,
@@ -29167,7 +29247,7 @@ function ProfileDetails({ onClose, defaultTab }) {
29167
29247
  const isHelpPage = singleActivityPage === "help" /* HELP */;
29168
29248
  const isCheckoutDetailView = isSingleActivityView && singleActivityPage === "detail" /* DETAIL */;
29169
29249
  const withDivider = isSingleActivityView ? isHelpPage ? "scroll" : "always" : void 0;
29170
- const handleHelp = useCallback46(() => {
29250
+ const handleHelp = useCallback47(() => {
29171
29251
  animate(() => setSingleActivityPage("help" /* HELP */));
29172
29252
  }, [animate]);
29173
29253
  const { onScroll, topbar, withTopDivider } = useCustomStatusAnimationAboveTopbar({
@@ -29242,7 +29322,7 @@ function AccountModal({ onClose, open, defaultTab }) {
29242
29322
  // src/modals/ChainModal/ChainModal.tsx
29243
29323
  import { isMobile as isMobile13 } from "@funkit/utils";
29244
29324
  import React222 from "react";
29245
- import { useAccount as useAccount8, useConfig as useConfig4 } from "wagmi";
29325
+ import { useAccount as useAccount8, useConfig as useConfig5 } from "wagmi";
29246
29326
 
29247
29327
  // src/components/Icons/DisconnectSqIcon.tsx
29248
29328
  import React218 from "react";
@@ -29455,7 +29535,7 @@ var MobileScrollClassName = "_1d2b1vf1";
29455
29535
  // src/modals/ChainModal/ChainModal.tsx
29456
29536
  function ChainModal({ onClose, open }) {
29457
29537
  const { chainId } = useAccount8();
29458
- const { chains } = useConfig4();
29538
+ const { chains } = useConfig5();
29459
29539
  const { switchChain, pendingChainId } = useFunkitSwitchChains({
29460
29540
  onSettled: () => onClose()
29461
29541
  });
@@ -29574,7 +29654,7 @@ function ChainModal({ onClose, open }) {
29574
29654
  // src/modals/CheckoutModal/FunCheckoutModal.tsx
29575
29655
  import { FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST as FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST3 } from "@funkit/chains";
29576
29656
  import { LogLevel, initializeRelayClient } from "@funkit/fun-relay";
29577
- import { FlagKey as FlagKey27 } from "@funkit/utils";
29657
+ import { FlagKey as FlagKey28 } from "@funkit/utils";
29578
29658
  import React224, { useRef as useRef27 } from "react";
29579
29659
 
29580
29660
  // src/components/FunCheckoutBlocked/FunCheckoutBlocked.tsx
@@ -29661,7 +29741,7 @@ function FunCheckoutModalInner({
29661
29741
  const isBlocked = isUserGeoblocked || modalState.isBlocked;
29662
29742
  const hasBack = hasHistoryEntry && !disableBack;
29663
29743
  const checkoutConfig = checkoutItem.initSettings.config;
29664
- const helpButtonUrl = useFlag(FlagKey27.HelpTutorialUrl);
29744
+ const helpButtonUrl = useFlag(FlagKey28.HelpTutorialUrl);
29665
29745
  const { onScroll, topbar, withTopDivider } = useCustomStatusAnimationAboveTopbar({
29666
29746
  depositAddress: checkoutItem.depositAddress ?? void 0,
29667
29747
  isActiveCheckout: true,
@@ -29777,16 +29857,16 @@ function ConnectModal({
29777
29857
  function useModalStateValue() {
29778
29858
  const [isModalOpen, setModalOpen] = useState70(false);
29779
29859
  return {
29780
- closeModal: useCallback47(() => setModalOpen(false), []),
29860
+ closeModal: useCallback48(() => setModalOpen(false), []),
29781
29861
  isModalOpen,
29782
- openModal: useCallback47(() => setModalOpen(true), [])
29862
+ openModal: useCallback48(() => setModalOpen(true), [])
29783
29863
  };
29784
29864
  }
29785
29865
  function useModalStateValueWithProp() {
29786
29866
  const [isModalOpen, setModalOpen] = useState70(false);
29787
29867
  const [prop, setProp] = useState70(null);
29788
29868
  return {
29789
- closeModal: useCallback47(() => {
29869
+ closeModal: useCallback48(() => {
29790
29870
  setTimeout(
29791
29871
  () => {
29792
29872
  setProp(null);
@@ -29797,7 +29877,7 @@ function useModalStateValueWithProp() {
29797
29877
  }, []),
29798
29878
  isModalOpen,
29799
29879
  prop,
29800
- openModal: useCallback47((prop2) => {
29880
+ openModal: useCallback48((prop2) => {
29801
29881
  if (prop2 != null) {
29802
29882
  setProp(prop2);
29803
29883
  }
@@ -29846,7 +29926,7 @@ function ModalProvider({ children }) {
29846
29926
  } = useModalStateValueWithProp();
29847
29927
  const connectionStatus = useConnectionStatus();
29848
29928
  const { chainId } = useAccount10();
29849
- const { chains } = useConfig5();
29929
+ const { chains } = useConfig6();
29850
29930
  const isCurrentChainSupported = chains.some((chain) => chain.id === chainId);
29851
29931
  function closeModals(keepConnectModalOpen = false) {
29852
29932
  if (!keepConnectModalOpen) {
@@ -29868,7 +29948,7 @@ function ModalProvider({ children }) {
29868
29948
  return /* @__PURE__ */ React226.createElement(
29869
29949
  ModalContext.Provider,
29870
29950
  {
29871
- value: useMemo40(
29951
+ value: useMemo41(
29872
29952
  () => ({
29873
29953
  accountModalOpen,
29874
29954
  accountModalTab,
@@ -30273,7 +30353,7 @@ var FunkitWeb2Provider = ({
30273
30353
  children
30274
30354
  }) => {
30275
30355
  const { connectAsync } = useConnect2();
30276
- const { chains } = useConfig6();
30356
+ const { chains } = useConfig7();
30277
30357
  const { connectors, disconnectAsync } = useDisconnect2();
30278
30358
  const [privy, setPrivy] = useState71(null);
30279
30359
  const [privyIframeUrl, setPrivyIframeUrl] = useState71();
@@ -30284,7 +30364,7 @@ var FunkitWeb2Provider = ({
30284
30364
  const [isLoggingIn, setIsLoggingIn] = useState71(false);
30285
30365
  const [loginErrorMessage, setLoginErrorMessage] = useState71("");
30286
30366
  const [loggedInUser, setLoggedInUser] = useState71(null);
30287
- const setLoginMethodAndCache = useCallback48(
30367
+ const setLoginMethodAndCache = useCallback49(
30288
30368
  (method) => {
30289
30369
  try {
30290
30370
  setLoginMethod(method);
@@ -30308,7 +30388,7 @@ var FunkitWeb2Provider = ({
30308
30388
  setPrivyIframeUrl(newPrivy.embeddedWallet.getURL());
30309
30389
  setPrivy(newPrivy);
30310
30390
  }, [chains]);
30311
- const handleIframeMessage = useCallback48(
30391
+ const handleIframeMessage = useCallback49(
30312
30392
  (e) => {
30313
30393
  if (e.origin === PRIVY_AUTH_URL && privy) {
30314
30394
  const iframeHandler = privy.embeddedWallet.getMessageHandler();
@@ -30317,7 +30397,7 @@ var FunkitWeb2Provider = ({
30317
30397
  },
30318
30398
  [privy]
30319
30399
  );
30320
- const handleFunkitWeb2Logout = useCallback48(async () => {
30400
+ const handleFunkitWeb2Logout = useCallback49(async () => {
30321
30401
  if (privy) {
30322
30402
  logger.log("handleFunkitWeb2Logout_disconnecting_connectors", {
30323
30403
  numConnectors: connectors.length
@@ -30330,7 +30410,7 @@ var FunkitWeb2Provider = ({
30330
30410
  setLoginMethodAndCache(null);
30331
30411
  }
30332
30412
  }, [connectors, disconnectAsync, privy, setLoginMethodAndCache]);
30333
- const handleFreshPrivyLogin = useCallback48(
30413
+ const handleFreshPrivyLogin = useCallback49(
30334
30414
  async ({
30335
30415
  firstLoginCode,
30336
30416
  secondLoginCode,
@@ -30382,7 +30462,7 @@ var FunkitWeb2Provider = ({
30382
30462
  },
30383
30463
  [handleFunkitWeb2Logout, privy]
30384
30464
  );
30385
- const getPrivyUserEmbeddedWallet = useCallback48(
30465
+ const getPrivyUserEmbeddedWallet = useCallback49(
30386
30466
  async (inputPrivyUser) => {
30387
30467
  try {
30388
30468
  if (!privy || !inputPrivyUser) {
@@ -30401,7 +30481,7 @@ var FunkitWeb2Provider = ({
30401
30481
  },
30402
30482
  [privy]
30403
30483
  );
30404
- const getExistingPrivySession = useCallback48(async () => {
30484
+ const getExistingPrivySession = useCallback49(async () => {
30405
30485
  try {
30406
30486
  if (!privy) {
30407
30487
  throw new Error(ERROR_MESSAGES2.PRIVY_NOT_INITIALIZED);
@@ -30412,7 +30492,7 @@ var FunkitWeb2Provider = ({
30412
30492
  return null;
30413
30493
  }
30414
30494
  }, [privy]);
30415
- const handleFunkitWeb2Login = useCallback48(
30495
+ const handleFunkitWeb2Login = useCallback49(
30416
30496
  async ({
30417
30497
  chainId,
30418
30498
  firstLoginCode,
@@ -30489,9 +30569,9 @@ var FunkitWeb2Provider = ({
30489
30569
  wallets
30490
30570
  ]
30491
30571
  );
30492
- const clearLoginError = useCallback48(() => setLoginErrorMessage(""), []);
30572
+ const clearLoginError = useCallback49(() => setLoginErrorMessage(""), []);
30493
30573
  const initChainId = useInitialChainId();
30494
- const handleAutoLoginFlows = useCallback48(async () => {
30574
+ const handleAutoLoginFlows = useCallback49(async () => {
30495
30575
  if (isNotNullish11(loginMethod) && isNotNullish11(initChainId)) {
30496
30576
  const queryParams = new URLSearchParams(window.location.search);
30497
30577
  const oauthCode = queryParams.get(PRIVY_OAUTH_CODE_URL_PARAM);
@@ -30535,7 +30615,7 @@ var FunkitWeb2Provider = ({
30535
30615
  initChainId
30536
30616
  // Do not include `handleAutoLoginFlows`,
30537
30617
  ]);
30538
- const handleOauthRedirect = useCallback48(
30618
+ const handleOauthRedirect = useCallback49(
30539
30619
  async (authProvider) => {
30540
30620
  if (!privy) {
30541
30621
  throw new Error(ERROR_MESSAGES2.PRIVY_NOT_INITIALIZED);
@@ -30561,7 +30641,7 @@ var FunkitWeb2Provider = ({
30561
30641
  [privy, setLoginMethodAndCache]
30562
30642
  );
30563
30643
  const [isSendingOtpEmail, setIsSendingOtpEmail] = useState71(false);
30564
- const handleSendOtpEmail = useCallback48(
30644
+ const handleSendOtpEmail = useCallback49(
30565
30645
  async (emailAddress) => {
30566
30646
  try {
30567
30647
  if (!privy) {
@@ -30589,7 +30669,7 @@ var FunkitWeb2Provider = ({
30589
30669
  [privy, setLoginMethodAndCache]
30590
30670
  );
30591
30671
  const [isGeneratingFcUri, setIsGeneratingFcUri] = useState71(false);
30592
- const handleGenerateFcUri = useCallback48(async () => {
30672
+ const handleGenerateFcUri = useCallback49(async () => {
30593
30673
  try {
30594
30674
  if (!privy) {
30595
30675
  throw new Error(ERROR_MESSAGES2.PRIVY_NOT_INITIALIZED);
@@ -30616,7 +30696,7 @@ var FunkitWeb2Provider = ({
30616
30696
  setIsGeneratingFcUri(false);
30617
30697
  }
30618
30698
  }, [privy]);
30619
- const getFcConnectionStatus = useCallback48(
30699
+ const getFcConnectionStatus = useCallback49(
30620
30700
  async (channelToken) => {
30621
30701
  try {
30622
30702
  if (!privy) {
@@ -30639,7 +30719,7 @@ var FunkitWeb2Provider = ({
30639
30719
  },
30640
30720
  [privy]
30641
30721
  );
30642
- const web2UserInfo = useMemo41(() => {
30722
+ const web2UserInfo = useMemo42(() => {
30643
30723
  if (!loggedInUser || !loggedInUser?.linked_accounts || !loggedInUser?.linked_accounts?.length) {
30644
30724
  return PLACEHOLDER_FUNKIT_USER_INFO;
30645
30725
  }
@@ -30691,7 +30771,8 @@ var FunkitWeb2Provider = ({
30691
30771
  nameTruncated,
30692
30772
  type,
30693
30773
  typeLabel,
30694
- iconSrc
30774
+ iconSrc,
30775
+ isConnected: true
30695
30776
  };
30696
30777
  }, [loggedInUser, loginMethod]);
30697
30778
  const contextValue = {
@@ -30759,10 +30840,10 @@ var useShowBalance = () => useContext18(ShowBalanceContext);
30759
30840
  // src/components/ConnectButton/ConnectButtonRenderer.tsx
30760
30841
  import { formatCurrencyAndStringify as formatCurrencyAndStringify15, isMobile as isMobile14, noop as noop9 } from "@funkit/utils";
30761
30842
  import React229 from "react";
30762
- import { useAccount as useAccount12, useBalance, useConfig as useConfig7 } from "wagmi";
30843
+ import { useAccount as useAccount12, useBalance, useConfig as useConfig8 } from "wagmi";
30763
30844
 
30764
30845
  // src/hooks/useIsMounted.ts
30765
- import { useCallback as useCallback49, useEffect as useEffect55, useState as useState73 } from "react";
30846
+ import { useCallback as useCallback50, useEffect as useEffect55, useState as useState73 } from "react";
30766
30847
  function useIsMounted() {
30767
30848
  const [isMounted, setIsMounted] = useState73(false);
30768
30849
  useEffect55(() => {
@@ -30771,7 +30852,7 @@ function useIsMounted() {
30771
30852
  setIsMounted(false);
30772
30853
  };
30773
30854
  }, []);
30774
- return useCallback49(() => isMounted, [isMounted]);
30855
+ return useCallback50(() => isMounted, [isMounted]);
30775
30856
  }
30776
30857
 
30777
30858
  // src/components/ConnectButton/abbreviateETHBalance.ts
@@ -30817,7 +30898,7 @@ function ConnectButtonRenderer({
30817
30898
  const { totalWalletAssetsUsd } = useWalletAssets({
30818
30899
  enableRefetchInterval: false
30819
30900
  });
30820
- const { chains: wagmiChains } = useConfig7();
30901
+ const { chains: wagmiChains } = useConfig8();
30821
30902
  const isCurrentChainSupported = wagmiChains.some(
30822
30903
  (chain) => chain.id === chainId
30823
30904
  );
@@ -31580,18 +31661,18 @@ function cssStringFromTheme(theme, options = {}) {
31580
31661
  }
31581
31662
 
31582
31663
  // src/hooks/useIsFunkitCheckoutActivated.ts
31583
- import { FlagKey as FlagKey28 } from "@funkit/utils";
31664
+ import { FlagKey as FlagKey29 } from "@funkit/utils";
31584
31665
  var useIsFunkitCheckoutActivated = () => {
31585
- const isCheckoutActivated = useFlag(FlagKey28.IsCheckoutActivated);
31666
+ const isCheckoutActivated = useFlag(FlagKey29.IsCheckoutActivated);
31586
31667
  return {
31587
31668
  isActivated: isCheckoutActivated
31588
31669
  };
31589
31670
  };
31590
31671
 
31591
31672
  // src/hooks/useFunkitMaxCheckoutUsdInfo.ts
31592
- import { FlagKey as FlagKey29, formatCurrencyAndStringify as formatCurrencyAndStringify16 } from "@funkit/utils";
31673
+ import { FlagKey as FlagKey30, formatCurrencyAndStringify as formatCurrencyAndStringify16 } from "@funkit/utils";
31593
31674
  var useFunkitMaxCheckoutUsdInfo = () => {
31594
- const maxCheckoutUsd = Number(useFlag(FlagKey29.MaxCheckoutUsd));
31675
+ const maxCheckoutUsd = Number(useFlag(FlagKey30.MaxCheckoutUsd));
31595
31676
  const limitText = maxCheckoutUsd === Number.MAX_VALUE ? "no" : formatCurrencyAndStringify16(maxCheckoutUsd, {
31596
31677
  decimalPrecisionForSuffix: 0,
31597
31678
  minimumSignificantDigits: 0,
@@ -31624,16 +31705,16 @@ import React233, { createContext as createContext19, useContext as useContext19
31624
31705
  import { WagmiProvider, useAccountEffect as useAccountEffect3 } from "wagmi";
31625
31706
 
31626
31707
  // src/providers/useFingerprint.ts
31627
- import { useCallback as useCallback50, useEffect as useEffect57 } from "react";
31708
+ import { useCallback as useCallback51, useEffect as useEffect57 } from "react";
31628
31709
  var storageKey5 = "funkit-connect-version";
31629
31710
  function setFunkitConnectVersion({ version }) {
31630
31711
  localStorage.setItem(storageKey5, version);
31631
31712
  }
31632
31713
  function getCurrentSdkVersion() {
31633
- return "6.14.1";
31714
+ return "6.14.3";
31634
31715
  }
31635
31716
  function useFingerprint() {
31636
- const fingerprint = useCallback50(() => {
31717
+ const fingerprint = useCallback51(() => {
31637
31718
  setFunkitConnectVersion({ version: getCurrentSdkVersion() });
31638
31719
  }, []);
31639
31720
  useEffect57(() => {
@@ -31643,11 +31724,11 @@ function useFingerprint() {
31643
31724
 
31644
31725
  // src/providers/usePreloadImages.ts
31645
31726
  import { isNotNullish as isNotNullish12 } from "@funkit/utils";
31646
- import { useCallback as useCallback51, useEffect as useEffect58 } from "react";
31727
+ import { useCallback as useCallback52, useEffect as useEffect58 } from "react";
31647
31728
  function usePreloadImages() {
31648
31729
  const funkitConnectChains = useFunkitConnectChains();
31649
31730
  const walletConnectors = useWalletConnectors();
31650
- const preloadImages = useCallback51(() => {
31731
+ const preloadImages = useCallback52(() => {
31651
31732
  loadImages(
31652
31733
  ...walletConnectors.map((wallet) => wallet.iconUrl),
31653
31734
  ...funkitConnectChains.map((chain) => chain.iconUrl).filter(isNotNullish12)