@funkit/connect 7.0.3-next.0 → 7.0.3-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -844,7 +844,7 @@ function useMainnetEnsName(address) {
844
844
  import {
845
845
  getAllWalletTokens
846
846
  } from "@funkit/api-base";
847
- import { keepPreviousData as keepPreviousData2, useQuery as useQuery21 } from "@tanstack/react-query";
847
+ import { keepPreviousData as keepPreviousData2, useQuery as useQuery22 } from "@tanstack/react-query";
848
848
  import { arbitrum as arbitrum6, polygon as polygon7 } from "viem/chains";
849
849
  import { useAccount as useAccount11 } from "wagmi";
850
850
 
@@ -859,56 +859,7 @@ import {
859
859
  isTokenEquivalent as isTokenEquivalent7,
860
860
  round as round4
861
861
  } from "@funkit/utils";
862
- import { arbitrum as arbitrum5, base as base7, mainnet as mainnet11, optimism, polygon as polygon6 } from "viem/chains";
863
-
864
- // src/consts/customers.ts
865
- import {
866
- AVANTIS_API_KEY,
867
- BANKR_API_KEY,
868
- BASED_API_KEY,
869
- BSX_API_KEY,
870
- ETHEREAL_API_KEY,
871
- HYENA_API_KEY,
872
- HYPERBEAT_API_KEY,
873
- HYPERDASH_API_KEY,
874
- KATANA_API_KEY,
875
- LIGHTERXYZ_API_KEY,
876
- MONAD_API_KEY,
877
- MONKEY_TILT_API_KEY,
878
- OSTIUM_API_KEY,
879
- PERPL_API_KEY,
880
- POLYMARKET_API_KEY
881
- } from "@funkit/api-base";
882
- function isPolymarketCustomer(apiKey) {
883
- return apiKey === POLYMARKET_API_KEY;
884
- }
885
- function isOstiumCustomer(apiKey) {
886
- return apiKey === OSTIUM_API_KEY;
887
- }
888
- function isBankrCustomer(apiKey) {
889
- return apiKey === BANKR_API_KEY;
890
- }
891
- function isEtherealCustomer(apiKey) {
892
- return apiKey === ETHEREAL_API_KEY;
893
- }
894
- function isKatanaCustomer(apiKey) {
895
- return apiKey === KATANA_API_KEY;
896
- }
897
- function isMonadCustomer(apiKey) {
898
- return apiKey === MONAD_API_KEY;
899
- }
900
- function isBasedCustomer(apiKey) {
901
- return apiKey === BASED_API_KEY;
902
- }
903
- function isHyenaCustomer(apiKey) {
904
- return apiKey === HYENA_API_KEY;
905
- }
906
- function isLighterxyzCustomer(apiKey) {
907
- return apiKey === LIGHTERXYZ_API_KEY;
908
- }
909
- function isLighterEthSpot(apiKey, checkoutConfig) {
910
- return checkoutConfig && isLighterxyzCustomer(apiKey) && checkoutConfig.qrcodeActionType === "LIGHTER_ETH_SPOT_DEPOSIT";
911
- }
862
+ import { arbitrum as arbitrum5, base as base7, mainnet as mainnet13, optimism, polygon as polygon6 } from "viem/chains";
912
863
 
913
864
  // src/modals/CheckoutModal/InputAmount/utils.ts
914
865
  import { formatCurrencyAndStringify } from "@funkit/utils";
@@ -1114,7 +1065,7 @@ import {
1114
1065
  initializeCheckout as postApiInitializeCheckout
1115
1066
  } from "@funkit/api-base";
1116
1067
  import { FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO12 } from "@funkit/chains";
1117
- import { FlagKey as FlagKey22, isNotNullish as isNotNullish8 } from "@funkit/utils";
1068
+ import { FlagKey as FlagKey21, isNotNullish as isNotNullish8 } from "@funkit/utils";
1118
1069
  import React234, {
1119
1070
  createContext as createContext17,
1120
1071
  useCallback as useCallback49,
@@ -1138,7 +1089,7 @@ function getCheckoutRecipient({
1138
1089
  import { exhaustiveCheck, formatAddress } from "@funkit/utils";
1139
1090
 
1140
1091
  // src/consts/bluvo.tsx
1141
- import { ETHEREAL_API_KEY as ETHEREAL_API_KEY2 } from "@funkit/api-base";
1092
+ import { ETHEREAL_API_KEY } from "@funkit/api-base";
1142
1093
  import React16 from "react";
1143
1094
 
1144
1095
  // src/components/Icons/BinanceIcon.tsx
@@ -1254,7 +1205,7 @@ var KrakenIcon = ({ size = 24 }) => {
1254
1205
 
1255
1206
  // src/consts/bluvo.tsx
1256
1207
  var BLUVO_MIN_DEPOSIT_BY_CUSTOMER = {
1257
- [ETHEREAL_API_KEY2]: 15
1208
+ [ETHEREAL_API_KEY]: 15
1258
1209
  };
1259
1210
  var SUPPORTED_EXCHANGES = [
1260
1211
  { exchange: "coinbase" /* Coinbase */, status: "live" /* Live */ },
@@ -1426,7 +1377,7 @@ function setFunkitConnectVersion({ version }) {
1426
1377
  localStorage.setItem(storageKey, version);
1427
1378
  }
1428
1379
  function getCurrentSdkVersion() {
1429
- return "7.0.3-next.0";
1380
+ return "7.0.3-next.1";
1430
1381
  }
1431
1382
  function useFingerprint() {
1432
1383
  const fingerprint = useCallback3(() => {
@@ -1459,6 +1410,7 @@ var FunLogger = class {
1459
1410
  this.userName = null;
1460
1411
  this.userLoginType = null;
1461
1412
  this.sdkVersion = null;
1413
+ this.l2Address = null;
1462
1414
  }
1463
1415
  getFunLogEnv() {
1464
1416
  if (!this.apiKey || FUN_DEV_API_KEYS.includes(this.apiKey)) {
@@ -1584,11 +1536,15 @@ var FunLogger = class {
1584
1536
  getUserLoginType() {
1585
1537
  return this.userLoginType;
1586
1538
  }
1587
- setUserInfo(userId, userAddress, userName, userLoginType) {
1539
+ getL2Address() {
1540
+ return this.l2Address;
1541
+ }
1542
+ setUserInfo(userId, userAddress, userName, userLoginType, l2Address) {
1588
1543
  this.userId = userId;
1589
1544
  this.userAddress = userAddress;
1590
1545
  this.userName = userName;
1591
1546
  this.userLoginType = userLoginType;
1547
+ this.l2Address = l2Address ?? null;
1592
1548
  }
1593
1549
  };
1594
1550
  datadogLogs.init({
@@ -1648,7 +1604,8 @@ var useTrack = () => {
1648
1604
  userAgent,
1649
1605
  appVersion,
1650
1606
  customIDs: {
1651
- apiKey
1607
+ apiKey,
1608
+ l2Address: userInfo.l2Address
1652
1609
  },
1653
1610
  custom: {
1654
1611
  name: userInfo.name,
@@ -1813,6 +1770,7 @@ import React17, {
1813
1770
  useContext as useContext6,
1814
1771
  useEffect as useEffect6,
1815
1772
  useMemo as useMemo6,
1773
+ useRef,
1816
1774
  useState as useState7
1817
1775
  } from "react";
1818
1776
  import {
@@ -1822,6 +1780,116 @@ import {
1822
1780
  useSwitchChain
1823
1781
  } from "wagmi";
1824
1782
 
1783
+ // src/utils/customer.ts
1784
+ import { useQuery } from "@tanstack/react-query";
1785
+
1786
+ // src/consts/customers.ts
1787
+ import {
1788
+ AVANTIS_API_KEY,
1789
+ BANKR_API_KEY,
1790
+ BASED_API_KEY,
1791
+ BSX_API_KEY,
1792
+ ETHEREAL_API_KEY as ETHEREAL_API_KEY2,
1793
+ HYENA_API_KEY,
1794
+ HYPERBEAT_API_KEY,
1795
+ HYPERDASH_API_KEY,
1796
+ KATANA_API_KEY,
1797
+ LIGHTERXYZ_API_KEY,
1798
+ MONAD_API_KEY,
1799
+ MONKEY_TILT_API_KEY,
1800
+ OSTIUM_API_KEY,
1801
+ PERPL_API_KEY,
1802
+ POLYMARKET_API_KEY
1803
+ } from "@funkit/api-base";
1804
+ import { mainnet as mainnet4 } from "viem/chains";
1805
+ function isPolymarketCustomer(apiKey) {
1806
+ return apiKey === POLYMARKET_API_KEY;
1807
+ }
1808
+ function isOstiumCustomer(apiKey) {
1809
+ return apiKey === OSTIUM_API_KEY;
1810
+ }
1811
+ function isBankrCustomer(apiKey) {
1812
+ return apiKey === BANKR_API_KEY;
1813
+ }
1814
+ function isEtherealCustomer(apiKey) {
1815
+ return apiKey === ETHEREAL_API_KEY2;
1816
+ }
1817
+ function isKatanaCustomer(apiKey) {
1818
+ return apiKey === KATANA_API_KEY;
1819
+ }
1820
+ function isMonadCustomer(apiKey) {
1821
+ return apiKey === MONAD_API_KEY;
1822
+ }
1823
+ function isBasedCustomer(apiKey) {
1824
+ return apiKey === BASED_API_KEY;
1825
+ }
1826
+ function isHyenaCustomer(apiKey) {
1827
+ return apiKey === HYENA_API_KEY;
1828
+ }
1829
+ function isLighterxyzCustomer(apiKey) {
1830
+ return apiKey === LIGHTERXYZ_API_KEY;
1831
+ }
1832
+ function isLighterEthSpot(apiKey, checkoutConfig) {
1833
+ return checkoutConfig && isLighterxyzCustomer(apiKey) && ["LIGHTER_ETH_SPOT_NEW_USER", "LIGHTER_ETH_SPOT"].includes(
1834
+ checkoutConfig.dynamicRoutingId || ""
1835
+ );
1836
+ }
1837
+ function isLighterNativeFlow(apiKey, checkoutConfig) {
1838
+ return !!checkoutConfig && isLighterxyzCustomer(apiKey) && checkoutConfig.targetChain === mainnet4.id.toString();
1839
+ }
1840
+
1841
+ // src/utils/customer.ts
1842
+ function isKatanaEarnFlow({
1843
+ apiKey,
1844
+ checkoutConfig
1845
+ }) {
1846
+ return isKatanaCustomer(apiKey) && !!checkoutConfig && isCheckoutPostActionRequired(checkoutConfig);
1847
+ }
1848
+ async function getLighterAccountsByL1Address(address) {
1849
+ const response = await fetch(
1850
+ `https://mainnet.zklighter.elliot.ai/api/v1/accountsByL1Address?l1_address=${address}`
1851
+ );
1852
+ if (!response.ok) {
1853
+ throw new Error(`Failed to fetch lighter accounts: ${response.statusText}`);
1854
+ }
1855
+ const data = await response.json();
1856
+ return data;
1857
+ }
1858
+ function useLighterAccounts({
1859
+ address,
1860
+ isEnabled = true
1861
+ }) {
1862
+ const enabled = !!address && address !== "0x" && isEnabled;
1863
+ const query = useQuery({
1864
+ queryKey: ["lighterAccounts", address],
1865
+ queryFn: () => getLighterAccountsByL1Address(address),
1866
+ enabled,
1867
+ staleTime: Number.POSITIVE_INFINITY,
1868
+ gcTime: Number.POSITIVE_INFINITY,
1869
+ retry: false,
1870
+ // allows us to always refetch the data but return the previous data until the new data is fetched
1871
+ refetchOnMount: "always"
1872
+ });
1873
+ return {
1874
+ ...query,
1875
+ mainAccountIndex: query.data?.sub_accounts?.[0]?.index?.toString(),
1876
+ subAccounts: query.data?.sub_accounts
1877
+ };
1878
+ }
1879
+ function useLighterNativeFlowNeeded(apiKey, checkoutConfig) {
1880
+ const { walletAddress } = useGeneralWallet();
1881
+ const isLighter = isLighterxyzCustomer(apiKey);
1882
+ const { mainAccountIndex, isLoading } = useLighterAccounts({
1883
+ address: walletAddress || "0x",
1884
+ isEnabled: isLighter && !!walletAddress && walletAddress !== "0x"
1885
+ });
1886
+ const lighterNativeNeeded = checkoutConfig && isLighter && mainAccountIndex === void 0 && checkoutConfig.qrcodeActionType === "LIGHTER_ETH_SPOT_DEPOSIT";
1887
+ return {
1888
+ isLoading,
1889
+ lighterNativeNeeded
1890
+ };
1891
+ }
1892
+
1825
1893
  // src/utils/funkitProvider.ts
1826
1894
  function getInitialChainIdFromFunkitProviderProps(props) {
1827
1895
  if (!props.wagmiConfig) {
@@ -1973,6 +2041,7 @@ function GeneralWalletProvider({ children }) {
1973
2041
  const ensAvatar = useMainnetEnsAvatar(ensName);
1974
2042
  const { externalUserId, apiKey } = useFunkitConfig();
1975
2043
  const { updateUserAsync } = useTrack();
2044
+ const prevApiKeyRef = useRef(apiKey);
1976
2045
  const loginType = !connector ? "guest" /* Guest */ : "web3" /* Web3 */;
1977
2046
  const isUserLoggedIn = loginType !== "guest" /* Guest */ || !!externalUserId;
1978
2047
  const userInfo = useMemo6(() => {
@@ -2005,20 +2074,28 @@ function GeneralWalletProvider({ children }) {
2005
2074
  apiKey,
2006
2075
  externalUserId
2007
2076
  ]);
2077
+ const { mainAccountIndex: l2Address } = useLighterAccounts({
2078
+ address
2079
+ });
2008
2080
  useEffect6(() => {
2009
- if (userInfo.id !== logger.getUserId() || userInfo.address !== logger.getUserAddress() || userInfo.name !== logger.getUserName() || userInfo.type !== logger.getUserLoginType()) {
2010
- logger.log("settingUserInfo", userInfo);
2011
- updateUserAsync(userInfo, apiKey).catch(
2081
+ const apiKeyChanged = prevApiKeyRef.current !== apiKey;
2082
+ const userInfoChanged = userInfo.id !== logger.getUserId() || userInfo.address !== logger.getUserAddress() || userInfo.name !== logger.getUserName() || userInfo.type !== logger.getUserLoginType() || l2Address !== logger.getL2Address();
2083
+ if (apiKeyChanged || userInfoChanged) {
2084
+ const userInfoWithL2Address = { ...userInfo, l2Address };
2085
+ logger.log("settingUserInfo", userInfoWithL2Address);
2086
+ updateUserAsync(userInfoWithL2Address, apiKey).catch(
2012
2087
  (error) => logger.error("updateUserAsync:error", error)
2013
2088
  );
2014
2089
  logger.setUserInfo(
2015
2090
  userInfo.id,
2016
2091
  userInfo.address,
2017
2092
  userInfo.name,
2018
- userInfo.type
2093
+ userInfo.type,
2094
+ userInfoWithL2Address.l2Address
2019
2095
  );
2096
+ prevApiKeyRef.current = apiKey;
2020
2097
  }
2021
- }, [userInfo, updateUserAsync, apiKey]);
2098
+ }, [userInfo, updateUserAsync, apiKey, l2Address]);
2022
2099
  const [logoutSymbol, triggerLogoutSymbol] = useSymbolRefresh_default();
2023
2100
  const handleLogout = useCallback5(async () => {
2024
2101
  logger.log("handleLogout_called");
@@ -2167,69 +2244,13 @@ async function disableAtomicBatchIfSupported(wallet, chainId) {
2167
2244
  });
2168
2245
  }
2169
2246
 
2170
- // src/utils/lighter.ts
2171
- import { getAddress } from "viem";
2172
- var LIGHTER_DEPOSIT_ABI = [
2173
- {
2174
- inputs: [
2175
- { internalType: "address", name: "_to", type: "address" },
2176
- { internalType: "uint16", name: "_assetIndex", type: "uint16" },
2177
- {
2178
- internalType: "enum TxTypes.RouteType",
2179
- name: "_routeType",
2180
- type: "uint8"
2181
- },
2182
- { internalType: "uint256", name: "_amount", type: "uint256" }
2183
- ],
2184
- name: "deposit",
2185
- outputs: [],
2186
- stateMutability: "payable",
2187
- type: "function"
2188
- },
2189
- {
2190
- inputs: [{ internalType: "address", name: "", type: "address" }],
2191
- name: "addressToAccountIndex",
2192
- outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
2193
- stateMutability: "view",
2194
- type: "function"
2195
- },
2196
- {
2197
- inputs: [{ internalType: "uint16", name: "assetIndex", type: "uint16" }],
2198
- name: "assetConfigs",
2199
- outputs: [
2200
- { internalType: "address", name: "tokenAddress", type: "address" },
2201
- {
2202
- internalType: "uint8",
2203
- name: "withdrawalsEnabled",
2204
- type: "uint8"
2205
- },
2206
- {
2207
- internalType: "uint56",
2208
- name: "extensionMultiplier",
2209
- type: "uint56"
2210
- },
2211
- { internalType: "uint128", name: "tickSize", type: "uint128" },
2212
- { internalType: "uint64", name: "depositCapTicks", type: "uint64" },
2213
- { internalType: "uint64", name: "minDepositTicks", type: "uint64" }
2214
- ],
2215
- stateMutability: "view",
2216
- type: "function"
2217
- }
2218
- ];
2219
- var LIGHTER_DEPOSIT_ADDRESS = getAddress(
2220
- "0x3b4d794a66304f130a4db8f2551b0070dfcf5ca7"
2221
- );
2222
- var roundDownToTick = (amount, tickSize) => {
2223
- return amount - amount % tickSize;
2224
- };
2225
-
2226
2247
  // src/hooks/useRelayBypass.ts
2227
2248
  import { FlagKey as FlagKey3, isTokenAddressEquivalent } from "@funkit/utils";
2228
2249
  import { useCallback as useCallback6, useMemo as useMemo10 } from "react";
2229
2250
 
2230
2251
  // src/providers/FunkitFlagsProvider.tsx
2231
2252
  import { datadogLogs as datadogLogs2 } from "@datadog/browser-logs";
2232
- import { useQuery as useQuery2 } from "@tanstack/react-query";
2253
+ import { useQuery as useQuery3 } from "@tanstack/react-query";
2233
2254
  import React18, {
2234
2255
  createContext as createContext7,
2235
2256
  useContext as useContext7,
@@ -2243,31 +2264,26 @@ import {
2243
2264
  BANKR_API_KEY as BANKR_API_KEY2,
2244
2265
  BASED_API_KEY as BASED_API_KEY2,
2245
2266
  BULLPEN_API_KEY,
2246
- CAMBRIA_API_KEY,
2247
2267
  ETHEREAL_API_KEY as ETHEREAL_API_KEY3,
2248
2268
  FELIX_API_KEY,
2249
- GINZA_API_KEY,
2250
2269
  HYENA_API_KEY as HYENA_API_KEY2,
2251
2270
  HYPERBEAT_API_KEY as HYPERBEAT_API_KEY2,
2252
2271
  HYPERDASH_API_KEY as HYPERDASH_API_KEY2,
2253
2272
  HYPEREDGE_API_KEY,
2254
2273
  HYPERSWAP_API_KEY,
2255
2274
  KATANA_API_KEY as KATANA_API_KEY2,
2256
- LIGHTERXYZ_API_KEY as LIGHTERXYZ_API_KEY2,
2257
2275
  MEGAPOT_API_KEY,
2258
2276
  MONAD_API_KEY as MONAD_API_KEY2,
2259
- MONKEY_TILT_API_KEY as MONKEY_TILT_API_KEY2,
2260
2277
  OSTIUM_API_KEY as OSTIUM_API_KEY2,
2261
2278
  PERPL_API_KEY as PERPL_API_KEY2,
2262
2279
  POLYMARKET_API_KEY as POLYMARKET_API_KEY2,
2263
2280
  RAREBETSPORTS_API_KEY,
2264
2281
  SUSHI_API_KEY,
2265
- TRADEFOX_API_KEY,
2266
2282
  VENTUALS_API_KEY
2267
2283
  } from "@funkit/api-base";
2268
- import { MONAD_CHAIN_ID, bitcoinChain } from "@funkit/chains";
2284
+ import { MONAD_CHAIN_ID } from "@funkit/chains";
2269
2285
  import { FlagKey } from "@funkit/utils";
2270
- import { arbitrum, base as base3, polygon } from "viem/chains";
2286
+ import { arbitrum, base as base3, mainnet as mainnet5, polygon } from "viem/chains";
2271
2287
  var FUN_INTERNAL_USERS = [
2272
2288
  "0x6ec0c2f25d323e7779925Cc20c3740101f990d9F",
2273
2289
  // Chloe
@@ -2367,8 +2383,9 @@ var QR_CODE_WITH_SOLANA = {
2367
2383
  1151111081099710: ["SOL", "USDC", "USDT", "TRUMP", "USDe"]
2368
2384
  };
2369
2385
  var QR_CODE_WITH_BITCOIN = {
2370
- ...QR_CODE_WITH_SOLANA,
2371
- [bitcoinChain.id]: ["BTC"]
2386
+ ...QR_CODE_WITH_SOLANA
2387
+ // uncomment to re-enable bitcoin
2388
+ // [bitcoinChain.id]: ['BTC'],
2372
2389
  };
2373
2390
  var QR_CODE_WITH_MONAD = {
2374
2391
  ...QR_CODE_WITH_BITCOIN,
@@ -2445,7 +2462,7 @@ var flagConfig = {
2445
2462
  },
2446
2463
  [FlagKey.EnableTokenTransfer]: {
2447
2464
  type: "boolean",
2448
- default_value: false,
2465
+ default_value: true,
2449
2466
  overrides: [
2450
2467
  {
2451
2468
  if_any: [
@@ -2457,59 +2474,12 @@ var flagConfig = {
2457
2474
  ],
2458
2475
  value: true
2459
2476
  },
2460
- {
2461
- if_any: [
2462
- {
2463
- key: "userId",
2464
- type: "isAnyOf",
2465
- values: FUN_INTERNAL_USERS
2466
- }
2467
- ],
2468
- value: true
2469
- },
2470
- disableFlagForCountries(US_COUNTRY_CODES),
2471
- {
2472
- if_any: [
2473
- {
2474
- key: "apiKey",
2475
- type: "isAnyOf",
2476
- values: [
2477
- AVANTIS_API_KEY2,
2478
- BANKR_API_KEY2,
2479
- BASED_API_KEY2,
2480
- BULLPEN_API_KEY,
2481
- CAMBRIA_API_KEY,
2482
- ETHEREAL_API_KEY3,
2483
- FELIX_API_KEY,
2484
- GINZA_API_KEY,
2485
- HYENA_API_KEY2,
2486
- HYPERBEAT_API_KEY2,
2487
- HYPERDASH_API_KEY2,
2488
- HYPEREDGE_API_KEY,
2489
- HYPERSWAP_API_KEY,
2490
- KATANA_API_KEY2,
2491
- LIGHTERXYZ_API_KEY2,
2492
- LIGHTERXYZ_API_KEY2,
2493
- MEGAPOT_API_KEY,
2494
- MONAD_API_KEY2,
2495
- MONKEY_TILT_API_KEY2,
2496
- OSTIUM_API_KEY2,
2497
- PERPL_API_KEY2,
2498
- POLYMARKET_API_KEY2,
2499
- RAREBETSPORTS_API_KEY,
2500
- SUSHI_API_KEY,
2501
- VENTUALS_API_KEY,
2502
- TRADEFOX_API_KEY
2503
- ]
2504
- }
2505
- ],
2506
- value: true
2507
- }
2477
+ disableFlagForCountries(US_COUNTRY_CODES)
2508
2478
  ]
2509
2479
  },
2510
2480
  [FlagKey.EnableFiatDeposit]: {
2511
2481
  type: "boolean",
2512
- default_value: false,
2482
+ default_value: true,
2513
2483
  overrides: [
2514
2484
  {
2515
2485
  if_any: [
@@ -2521,17 +2491,7 @@ var flagConfig = {
2521
2491
  ],
2522
2492
  value: true
2523
2493
  },
2524
- disableFlagForCountries(US_COUNTRY_CODES),
2525
- {
2526
- if_any: [
2527
- {
2528
- key: "userId",
2529
- type: "pctRollout",
2530
- pct: 100
2531
- }
2532
- ],
2533
- value: true
2534
- }
2494
+ disableFlagForCountries(US_COUNTRY_CODES)
2535
2495
  ]
2536
2496
  },
2537
2497
  [FlagKey.TokenTransferSourceChainsAndAssets]: {
@@ -2557,6 +2517,24 @@ var flagConfig = {
2557
2517
  5064014: void 0
2558
2518
  })
2559
2519
  },
2520
+ {
2521
+ if_any: [
2522
+ {
2523
+ key: "apiKey",
2524
+ type: "isAnyOf",
2525
+ values: [KATANA_API_KEY2]
2526
+ }
2527
+ ],
2528
+ value: JSON.stringify({
2529
+ ...COMMON_SUPPORT_CHAINS_AND_ASSETS,
2530
+ // abstract
2531
+ 2741: ["USDC.e", "ETH", "WETH", "USDT"],
2532
+ // hyperevm.
2533
+ 999: ["USDC", "HYPE", "WETH", "USDT", "UBTC", "USDe"],
2534
+ // solana - only enable once customers are on v5.0.11, anything prior will break
2535
+ 1151111081099710: ["SOL", "USDC", "USDT", "TRUMP", "USDe"]
2536
+ })
2537
+ },
2560
2538
  // Omit MON as a source asset for Monad
2561
2539
  {
2562
2540
  if_any: [
@@ -2651,6 +2629,17 @@ var flagConfig = {
2651
2629
  value: base3.id.toString()
2652
2630
  },
2653
2631
  // Oct 20 - Default to Bitcoin chain on transfer crypto for Polymarket
2632
+ // {
2633
+ // if_any: [
2634
+ // {
2635
+ // key: 'apiKey',
2636
+ // type: 'isAnyOf',
2637
+ // values: [POLYMARKET_API_KEY],
2638
+ // },
2639
+ // ],
2640
+ // value: bitcoinChain.id.toString(),
2641
+ // },
2642
+ // December 11 - Default to ethereum since bitcoin is disabled
2654
2643
  {
2655
2644
  if_any: [
2656
2645
  {
@@ -2659,7 +2648,7 @@ var flagConfig = {
2659
2648
  values: [POLYMARKET_API_KEY2]
2660
2649
  }
2661
2650
  ],
2662
- value: bitcoinChain.id.toString()
2651
+ value: mainnet5.id.toString()
2663
2652
  }
2664
2653
  ]
2665
2654
  },
@@ -2771,32 +2760,15 @@ var flagConfig = {
2771
2760
  ]
2772
2761
  })
2773
2762
  },
2774
- [FlagKey.HelpTutorialUrl]: {
2775
- type: "string",
2776
- default_value: ""
2777
- },
2778
2763
  [FlagKey.EnableCard]: {
2779
2764
  type: "boolean",
2780
- default_value: true,
2781
- overrides: [
2782
- disableFlagForCountries(US_COUNTRY_CODES),
2783
- {
2784
- if_any: [
2785
- {
2786
- key: "apiKey",
2787
- type: "isAnyOf",
2788
- values: [KATANA_API_KEY2]
2789
- }
2790
- ],
2791
- value: false
2792
- }
2793
- ]
2765
+ default_value: false,
2766
+ overrides: []
2794
2767
  },
2795
2768
  // cannot re-use this flag for brokerage flow or clients that are using older versions of the SDK will be impacted
2796
2769
  [FlagKey.EnableBrokerage]: {
2797
2770
  type: "boolean",
2798
- default_value: false,
2799
- overrides: [disableFlagForCountries(US_COUNTRY_CODES)]
2771
+ default_value: false
2800
2772
  },
2801
2773
  [FlagKey.EnableBluvoBrokerage]: {
2802
2774
  type: "boolean",
@@ -2970,7 +2942,8 @@ var flagConfig = {
2970
2942
  },
2971
2943
  [FlagKey.EnableBitcoin]: {
2972
2944
  type: "boolean",
2973
- default_value: true,
2945
+ // uncomment to re-enable bitcoin
2946
+ default_value: false,
2974
2947
  overrides: [
2975
2948
  // Actually disable bitcoin for Ethereal
2976
2949
  {
@@ -3149,7 +3122,7 @@ function evalCondition(flagKey, condition, context) {
3149
3122
  }
3150
3123
 
3151
3124
  // src/providers/FunkitMoonpayProvider.tsx
3152
- import { useQuery } from "@tanstack/react-query";
3125
+ import { useQuery as useQuery2 } from "@tanstack/react-query";
3153
3126
  import { useMemo as useMemo7 } from "react";
3154
3127
  import { FlagKey as FlagKey2 } from "@funkit/utils";
3155
3128
  var MOONPAY_LIVE_API_KEY = "pk_live_IxayBRQuBC3RzpPZkbGPrwUsRWAaeO";
@@ -3196,7 +3169,7 @@ function useFunkitUserIp() {
3196
3169
  const { apiKey } = useFunkitConfig();
3197
3170
  const isPolymarket = isPolymarketCustomer(apiKey);
3198
3171
  const { isUserLoggedIn } = useGeneralWallet();
3199
- const { data: userIpInfo, isLoading: isLoadingGeoCheck } = useQuery({
3172
+ const { data: userIpInfo, isLoading: isLoadingGeoCheck } = useQuery2({
3200
3173
  queryKey: ["getUserIpInfo"],
3201
3174
  queryFn: async () => {
3202
3175
  try {
@@ -3260,7 +3233,7 @@ function FunkitFlagsProvider({ children }) {
3260
3233
  data: onlineConfig,
3261
3234
  error,
3262
3235
  isLoading
3263
- } = useQuery2({
3236
+ } = useQuery3({
3264
3237
  queryKey: ["flags"],
3265
3238
  queryFn: fetchConfigFromServer,
3266
3239
  refetchOnMount: false,
@@ -3468,19 +3441,17 @@ function useCheckoutDirectExecution() {
3468
3441
  const fromAmountBaseUnit = BigInt(
3469
3442
  Math.floor(fromTokenAmount * multiplier2)
3470
3443
  );
3471
- const roundedFromAmountBaseUnit = params.tickSize ? roundDownToTick(fromAmountBaseUnit, params.tickSize) : fromAmountBaseUnit;
3472
3444
  return await getCheckoutQuoteV2({
3473
3445
  ...getCheckoutQuoteParams,
3474
- fromAmountBaseUnit: roundedFromAmountBaseUnit
3446
+ fromAmountBaseUnit
3475
3447
  });
3476
3448
  }
3477
3449
  const { toTokenAmount, toTokenDecimals } = params;
3478
3450
  const multiplier = 10 ** toTokenDecimals;
3479
3451
  const toAmountBaseUnit = BigInt(Math.floor(toTokenAmount * multiplier));
3480
- const roundedToAmountBaseUnit = params.tickSize ? roundDownToTick(toAmountBaseUnit, params.tickSize) : toAmountBaseUnit;
3481
3452
  return await getCheckoutQuoteV2({
3482
3453
  ...getCheckoutQuoteParams,
3483
- toAmountBaseUnit: roundedToAmountBaseUnit
3454
+ toAmountBaseUnit
3484
3455
  });
3485
3456
  },
3486
3457
  [address, apiKey]
@@ -3659,8 +3630,301 @@ function useCheckoutDirectExecution() {
3659
3630
  import {
3660
3631
  initializeCheckoutTokenTransferAddress
3661
3632
  } from "@funkit/api-base";
3633
+ import { lighterChain } from "@funkit/chains";
3662
3634
  import { FlagKey as FlagKey4 } from "@funkit/utils";
3663
- import { useQuery as useQuery3 } from "@tanstack/react-query";
3635
+ import { useQuery as useQuery4 } from "@tanstack/react-query";
3636
+
3637
+ // src/hooks/useUDAParams.ts
3638
+ import { useMemo as useMemo12 } from "react";
3639
+
3640
+ // src/hooks/statsig/useDynamicConfig.ts
3641
+ import { useDynamicConfig as useStatsigDynamicConfig } from "@statsig/react-bindings";
3642
+ import { useMemo as useMemo11 } from "react";
3643
+
3644
+ // src/__generated__/default_configs.ts
3645
+ var default_configs_default = {
3646
+ addressblacklist: {
3647
+ value: [
3648
+ "0x7b97b46D35a28B561d47F50CFB9a2735E506e59d",
3649
+ "0x409ad08cc6CA757f69Fb80250a424B9eFeB99807",
3650
+ "0x02A86f51aA7B8b1c17c30364748d5Ae4a0727E23",
3651
+ "0x64131b60502C01362639CC5cfE1a1efB6Be1165A"
3652
+ ]
3653
+ },
3654
+ array_of_strings: {
3655
+ value: []
3656
+ },
3657
+ blockedcountries: {
3658
+ value: [
3659
+ "AF",
3660
+ "BY",
3661
+ "MM",
3662
+ "CF",
3663
+ "CU",
3664
+ "CD",
3665
+ "IR",
3666
+ "LB",
3667
+ "LY",
3668
+ "NI",
3669
+ "KP",
3670
+ "UA",
3671
+ "SO",
3672
+ "SS",
3673
+ "SY",
3674
+ "VE"
3675
+ ]
3676
+ },
3677
+ boolean: {
3678
+ value: false
3679
+ },
3680
+ brokerage_hide_you_receive: {
3681
+ value: false
3682
+ },
3683
+ chainidsortorder: {
3684
+ value: ["1", "1151111081099710", "8453", "56", "137", "42161", "10"]
3685
+ },
3686
+ checkoutnotificationsrefreshinterval: {
3687
+ value: {
3688
+ listRefresh: 5e3,
3689
+ itemRefresh: 2e3
3690
+ }
3691
+ },
3692
+ checkouttimeestimateoverrides: {
3693
+ value: {
3694
+ balance: 60,
3695
+ brokerage: 120,
3696
+ card: 300,
3697
+ token_transfer: 60
3698
+ }
3699
+ },
3700
+ dynamicrouting: {
3701
+ value: [
3702
+ {
3703
+ routeId: "LIGHTER_ETH_SPOT",
3704
+ rules: [
3705
+ {
3706
+ when: {
3707
+ chainId: "1",
3708
+ tokenAddress: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
3709
+ },
3710
+ use: {
3711
+ path: "FUN_MAINNET_DEPOSIT",
3712
+ badge: "NATIVE"
3713
+ }
3714
+ },
3715
+ {
3716
+ when: {
3717
+ chainId: "1",
3718
+ tokenAddress: "*"
3719
+ },
3720
+ use: {
3721
+ path: "FUN_MAINNET_DEPOSIT"
3722
+ }
3723
+ },
3724
+ {
3725
+ when: "*",
3726
+ use: {
3727
+ path: "RL_TRANSFER"
3728
+ }
3729
+ }
3730
+ ]
3731
+ },
3732
+ {
3733
+ routeId: "LIGHTER_USDC_PERPS",
3734
+ rules: [
3735
+ {
3736
+ when: {
3737
+ chainId: "1",
3738
+ tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
3739
+ },
3740
+ use: {
3741
+ path: "FUN_MAINNET_DEPOSIT",
3742
+ badge: "NATIVE"
3743
+ }
3744
+ },
3745
+ {
3746
+ when: {
3747
+ chainId: "1",
3748
+ tokenAddress: "*"
3749
+ },
3750
+ use: {
3751
+ path: "FUN_MAINNET_DEPOSIT"
3752
+ }
3753
+ },
3754
+ {
3755
+ when: "*",
3756
+ use: {
3757
+ path: "RL_TRANSFER"
3758
+ }
3759
+ }
3760
+ ]
3761
+ },
3762
+ {
3763
+ routeId: "LIGHTER_USDC_PERPS_NEW_USER",
3764
+ rules: [
3765
+ {
3766
+ when: {
3767
+ chainId: "1",
3768
+ tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
3769
+ },
3770
+ use: {
3771
+ path: "FUN_MAINNET_DEPOSIT",
3772
+ badge: "NATIVE"
3773
+ }
3774
+ },
3775
+ {
3776
+ when: "*",
3777
+ use: {
3778
+ path: "FUN_MAINNET_DEPOSIT"
3779
+ }
3780
+ }
3781
+ ]
3782
+ },
3783
+ {
3784
+ routeId: "LIGHTER_ETH_SPOT_NEW_USER",
3785
+ rules: [
3786
+ {
3787
+ when: {
3788
+ chainId: "1",
3789
+ tokenAddress: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
3790
+ },
3791
+ use: {
3792
+ path: "FUN_MAINNET_DEPOSIT",
3793
+ badge: "NATIVE"
3794
+ }
3795
+ },
3796
+ {
3797
+ when: "*",
3798
+ use: {
3799
+ path: "FUN_MAINNET_DEPOSIT"
3800
+ }
3801
+ }
3802
+ ]
3803
+ }
3804
+ ]
3805
+ },
3806
+ enablebitcoin: {
3807
+ value: true
3808
+ },
3809
+ enablebluvobrokerage: {
3810
+ value: false
3811
+ },
3812
+ enablefiatdeposit: {
3813
+ value: true
3814
+ },
3815
+ enablemeldpayment: {
3816
+ value: false
3817
+ },
3818
+ enabletokentransfer: {
3819
+ value: true
3820
+ },
3821
+ isrelaybypassenabled: {
3822
+ value: true
3823
+ },
3824
+ meldquickoptions: {
3825
+ value: {
3826
+ USD: [100, 500, 1e3],
3827
+ EUR: [90, 435, 870],
3828
+ JPY: [14500, 72500, 145e3],
3829
+ KRW: [137500, 69e4, 138e4],
3830
+ GBP: [75, 375, 745],
3831
+ CAD: [135, 685, 1365],
3832
+ AUD: [155, 770, 1540],
3833
+ CHF: [80, 410, 820],
3834
+ BRL: [550, 2750, 5500],
3835
+ INR: [8600, 43e3, 86e3],
3836
+ PHP: [5700, 28500, 57e3],
3837
+ TRY: [3950, 19800, 39500],
3838
+ RUB: [7850, 39300, 78600],
3839
+ PLN: [370, 1860, 3715],
3840
+ SGD: [130, 645, 1285]
3841
+ }
3842
+ },
3843
+ showinfobanner: {
3844
+ value: {
3845
+ message: "",
3846
+ expireAtMs: 0,
3847
+ type: "alert"
3848
+ }
3849
+ },
3850
+ showpoweredtagline: {
3851
+ value: false
3852
+ },
3853
+ supportedexchangesv2: {
3854
+ value: []
3855
+ },
3856
+ uda_params: {
3857
+ value: [
3858
+ {
3859
+ dynamicRoutingId: "LIGHTER_ETH_SPOT",
3860
+ params: {
3861
+ targetChain: "3586256",
3862
+ targetAsset: "0x0000000000000000000000000000000000000001",
3863
+ targetAssetTicker: "ETH (Spot)",
3864
+ iconSrc: "https://sdk-cdn.fun.xyz/images/eth.svg"
3865
+ }
3866
+ },
3867
+ {
3868
+ dynamicRoutingId: "LIGHTER_ETH_SPOT_NEW_USER",
3869
+ params: {
3870
+ targetChain: "1",
3871
+ targetAsset: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
3872
+ targetAssetTicker: "USDC (Perps)",
3873
+ iconSrc: "https://sdk-cdn.fun.xyz/images/usdc.svg",
3874
+ qrcodeActionType: "LIGHTER_USDC_DEPOSIT"
3875
+ }
3876
+ },
3877
+ {
3878
+ dynamicRoutingId: "LIGHTER_USDC_PERPS",
3879
+ params: {
3880
+ targetChain: "3586256",
3881
+ targetAsset: "0x0000000000000000000000000000000000000000",
3882
+ targetAssetTicker: "USDC (Perps)",
3883
+ iconSrc: "https://sdk-cdn.fun.xyz/images/usdc.svg"
3884
+ }
3885
+ },
3886
+ {
3887
+ dynamicRoutingId: "LIGHTER_USDC_PERPS_NEW_USER",
3888
+ params: {
3889
+ targetChain: "1",
3890
+ targetAsset: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
3891
+ targetAssetTicker: "USDC (Perps)",
3892
+ iconSrc: "https://sdk-cdn.fun.xyz/images/usdc.svg",
3893
+ qrcodeActionType: "LIGHTER_USDC_DEPOSIT"
3894
+ }
3895
+ }
3896
+ ]
3897
+ }
3898
+ };
3899
+
3900
+ // src/hooks/statsig/useDynamicConfig.ts
3901
+ var useDynamicConfig = (name) => {
3902
+ const config = useStatsigDynamicConfig(name);
3903
+ const fallback2 = useMemo11(() => default_configs_default[name], [name]);
3904
+ const value = useMemo11(
3905
+ () => config.get("value", fallback2.value),
3906
+ // confirmed that config is stable (https://cdn.jsdelivr.net/npm/@statsig/react-bindings@3.30.2/src/useDynamicConfig.js)
3907
+ // but .get might not be so we memoize it ourselves
3908
+ [config, fallback2]
3909
+ );
3910
+ return value;
3911
+ };
3912
+
3913
+ // src/hooks/useUDAParams.ts
3914
+ var useUDAParams = (_dynamicRoutingId) => {
3915
+ const { checkoutItem } = useCheckoutContext();
3916
+ const checkoutConfig = checkoutItem?.initSettings.config;
3917
+ const dynamicRoutingId = _dynamicRoutingId || checkoutConfig?.dynamicRoutingId;
3918
+ const udaParams = useDynamicConfig("uda_params");
3919
+ const currentParams = useMemo12(() => {
3920
+ return udaParams.find(
3921
+ (param) => param.dynamicRoutingId === dynamicRoutingId
3922
+ )?.params;
3923
+ }, [udaParams, dynamicRoutingId]);
3924
+ return currentParams;
3925
+ };
3926
+
3927
+ // src/hooks/useCheckoutTransferInit.ts
3664
3928
  var COMMON_CLIENT_METADATA = generateClientMetadataForTokenTransfer();
3665
3929
  async function checkoutTransferFetch(params) {
3666
3930
  return await initializeCheckoutTokenTransferAddress({
@@ -3673,7 +3937,8 @@ function getCheckoutTokenTransferParams({
3673
3937
  checkoutConfig,
3674
3938
  userId,
3675
3939
  recipientAddr,
3676
- apiKey
3940
+ apiKey,
3941
+ udaParams
3677
3942
  }) {
3678
3943
  if (!checkoutConfig) {
3679
3944
  return;
@@ -3687,6 +3952,14 @@ function getCheckoutTokenTransferParams({
3687
3952
  recipientAddr,
3688
3953
  actionType: checkoutConfig.qrcodeActionType
3689
3954
  };
3955
+ if (udaParams) {
3956
+ return {
3957
+ ...commonParams,
3958
+ toChainId: udaParams.targetChain,
3959
+ toTokenAddress: udaParams.targetAsset,
3960
+ actionType: udaParams.qrcodeActionType
3961
+ };
3962
+ }
3690
3963
  const dynamicTargetAssetCandidates = checkoutConfig.dynamicTargetAssetCandidates;
3691
3964
  if (dynamicTargetAssetCandidates?.[0]) {
3692
3965
  const defaultCandidate = dynamicTargetAssetCandidates.find((candidate) => candidate.isDefault) || dynamicTargetAssetCandidates[0];
@@ -3713,10 +3986,17 @@ function getCheckoutTokenTransferParams({
3713
3986
  }
3714
3987
  function useIsQRCodeTransferEnabled() {
3715
3988
  const { checkoutItem } = useCheckoutContext();
3716
- const checkoutConfig = checkoutItem?.initSettings.config;
3717
3989
  const isQrCodeEnabled = useFlag(FlagKey4.EnableTokenTransfer, false);
3718
- const { apiKey } = useFunkitConfig();
3719
- return isQrCodeEnabled && !isLighterEthSpot(apiKey, checkoutConfig);
3990
+ const checkoutConfig = checkoutItem?.initSettings.config;
3991
+ const udaParams = useUDAParams();
3992
+ if (!isQrCodeEnabled) {
3993
+ return false;
3994
+ }
3995
+ const dynamicRoutingId = checkoutConfig?.dynamicRoutingId;
3996
+ if (dynamicRoutingId) {
3997
+ return !!udaParams;
3998
+ }
3999
+ return true;
3720
4000
  }
3721
4001
  var useCheckoutTransferInit = (enabled = true) => {
3722
4002
  const { checkoutItem } = useCheckoutContext();
@@ -3724,19 +4004,31 @@ var useCheckoutTransferInit = (enabled = true) => {
3724
4004
  const isQrCodeEnabled = useIsQRCodeTransferEnabled();
3725
4005
  const { walletAddress, userInfo } = useGeneralWallet();
3726
4006
  const { apiKey } = useFunkitConfig();
3727
- const recipientAddr = checkoutConfig?.customRecipient || walletAddress || "0x";
4007
+ const udaParams = useUDAParams();
4008
+ const isLighter = isLighterxyzCustomer(apiKey);
4009
+ const { mainAccountIndex } = useLighterAccounts({
4010
+ address: walletAddress || "0x",
4011
+ isEnabled: isLighter && !!walletAddress && walletAddress !== "0x"
4012
+ });
4013
+ const recipientAddr = (() => {
4014
+ if (udaParams && udaParams.targetChain === lighterChain.id.toString() && !!mainAccountIndex) {
4015
+ return mainAccountIndex;
4016
+ }
4017
+ return checkoutConfig?.customRecipient || walletAddress || "0x";
4018
+ })();
3728
4019
  const userId = userInfo.id || "";
3729
4020
  const queryKey = getCheckoutTokenTransferParams({
3730
4021
  checkoutConfig,
3731
4022
  userId,
3732
4023
  apiKey,
3733
- recipientAddr
4024
+ recipientAddr,
4025
+ udaParams
3734
4026
  });
3735
4027
  const postActionOverride = isHyenaCustomer(apiKey);
3736
4028
  const isQRCodeEnabledWithPostAction = !!checkoutConfig && // either no post action required
3737
4029
  (!isCheckoutPostActionRequired(checkoutConfig) || // or action type is set
3738
- !!checkoutConfig?.qrcodeActionType || postActionOverride);
3739
- const { data, isFetching } = useQuery3({
4030
+ !!checkoutConfig?.qrcodeActionType || postActionOverride || !!queryKey?.actionType);
4031
+ const { data, isFetching } = useQuery4({
3740
4032
  queryKey: ["initializeCheckoutTokenTransferAddress", queryKey],
3741
4033
  queryFn: ({ queryKey: [_, queryKey2] }) => queryKey2 ? checkoutTransferFetch(queryKey2) : void 0,
3742
4034
  refetchOnWindowFocus: false,
@@ -3752,9 +4044,9 @@ var useCheckoutTransferInit = (enabled = true) => {
3752
4044
  };
3753
4045
 
3754
4046
  // src/hooks/useEffectEvent.ts
3755
- import { useCallback as useCallback8, useInsertionEffect, useRef } from "react";
4047
+ import { useCallback as useCallback8, useInsertionEffect, useRef as useRef2 } from "react";
3756
4048
  function useEffectEvent(fn) {
3757
- const savedCallback = useRef(fn);
4049
+ const savedCallback = useRef2(fn);
3758
4050
  useInsertionEffect(() => {
3759
4051
  savedCallback.current = fn;
3760
4052
  }, [fn]);
@@ -3800,11 +4092,11 @@ import React19, {
3800
4092
  useCallback as useCallback9,
3801
4093
  useContext as useContext8,
3802
4094
  useEffect as useEffect8,
3803
- useRef as useRef2,
4095
+ useRef as useRef3,
3804
4096
  useState as useState8
3805
4097
  } from "react";
3806
4098
  import { isHex } from "viem";
3807
- import { useQuery as useQuery5 } from "@tanstack/react-query";
4099
+ import { useQuery as useQuery6 } from "@tanstack/react-query";
3808
4100
 
3809
4101
  // src/utils/purifyCheckoutHistoryItem.ts
3810
4102
  import {
@@ -3823,7 +4115,7 @@ import {
3823
4115
  getDirectExecutionByTxHash
3824
4116
  } from "@funkit/api-base";
3825
4117
  import { RELAY_TERMINAL_STATUSES } from "@funkit/fun-relay";
3826
- import { useQuery as useQuery4 } from "@tanstack/react-query";
4118
+ import { useQuery as useQuery5 } from "@tanstack/react-query";
3827
4119
  var RELAY_FETCH_INTERVAL = 1500;
3828
4120
  var logPrefix = "useDirectExecutionInfoPolling";
3829
4121
  function useDirectExecutionInfoPolling({
@@ -3831,7 +4123,7 @@ function useDirectExecutionInfoPolling({
3831
4123
  disabled = false
3832
4124
  }) {
3833
4125
  const { apiKey } = useFunkitConfig();
3834
- const { data: directExecution, isLoading } = useQuery4({
4126
+ const { data: directExecution, isLoading } = useQuery5({
3835
4127
  queryKey: [logPrefix, initDirectExecution?.txHash],
3836
4128
  queryFn: async () => {
3837
4129
  try {
@@ -3987,7 +4279,7 @@ function FunkitCheckoutHistoryProvider({
3987
4279
  const { logoutSymbol, isUserLoggedIn, userInfo } = useGeneralWallet();
3988
4280
  const funkitConfig = useFunkitConfig();
3989
4281
  const [checkoutHistoryList, setCheckoutHistoryList] = useState8([]);
3990
- const intervalRef = useRef2();
4282
+ const intervalRef = useRef3();
3991
4283
  const [refreshSymbol, triggerRefreshSymbol] = useSymbolRefresh_default();
3992
4284
  const [historyDepositAddress, setHistoryDepositAddress] = useState8();
3993
4285
  const [isInited, setIsInited] = useState8(false);
@@ -4113,7 +4405,7 @@ function useCheckoutHistoryContext() {
4113
4405
  }
4114
4406
  function useCheckoutsListenerByUserId(userId) {
4115
4407
  const { apiKey } = useFunkitConfig();
4116
- const { data, isLoading } = useQuery5({
4408
+ const { data, isLoading } = useQuery6({
4117
4409
  enabled: !!userId,
4118
4410
  queryKey: ["getPurifiedCheckoutsByUserId", userId],
4119
4411
  queryFn: async () => {
@@ -4142,7 +4434,7 @@ function useCheckoutsListenerByUserId(userId) {
4142
4434
  }
4143
4435
  function useCheckoutListenerByCheckoutId(checkoutId) {
4144
4436
  const { apiKey } = useFunkitConfig();
4145
- const { data, isLoading } = useQuery5({
4437
+ const { data, isLoading } = useQuery6({
4146
4438
  enabled: !!checkoutId,
4147
4439
  queryKey: ["getPurifiedCheckoutById", checkoutId],
4148
4440
  queryFn: async () => {
@@ -4240,7 +4532,7 @@ import React233, {
4240
4532
  useCallback as useCallback48,
4241
4533
  useContext as useContext16,
4242
4534
  useEffect as useEffect54,
4243
- useMemo as useMemo46,
4535
+ useMemo as useMemo49,
4244
4536
  useState as useState73
4245
4537
  } from "react";
4246
4538
  import { useAccount as useAccount10, useAccountEffect as useAccountEffect2, useConfig as useConfig5 } from "wagmi";
@@ -4263,7 +4555,7 @@ import React107, { useCallback as useCallback23, useState as useState34 } from "
4263
4555
 
4264
4556
  // src/components/FunCheckoutHistory/useCustomStatusAnimationAboveTopbar.tsx
4265
4557
  import { clamp } from "@funkit/utils";
4266
- import React29, { useRef as useRef4, useState as useState13 } from "react";
4558
+ import React29, { useRef as useRef5, useState as useState13 } from "react";
4267
4559
 
4268
4560
  // src/domains/checkout.ts
4269
4561
  import {
@@ -4319,8 +4611,16 @@ function getCheckoutStateBooleans(checkoutState, refundState) {
4319
4611
  };
4320
4612
  }
4321
4613
 
4614
+ // src/utils/lighter.ts
4615
+ import { getAddress } from "viem";
4616
+ var LIGHTER_DEPOSIT_ADDRESS = getAddress(
4617
+ "0x3b4d794a66304f130a4db8f2551b0070dfcf5ca7"
4618
+ );
4619
+ var LIGHTER_NATIVE_FLOW_TIME_ESTIMATE_SECONDS = 110;
4620
+ var LIGHTER_DELAYED_AUTO_TRIGGER_CUTOFF = 60 * 5;
4621
+
4322
4622
  // src/components/FunCheckoutHistory/FunCheckoutStatus.tsx
4323
- import React27, { useEffect as useEffect11, useMemo as useMemo12, useState as useState11 } from "react";
4623
+ import React27, { useEffect as useEffect11, useMemo as useMemo14, useState as useState11 } from "react";
4324
4624
 
4325
4625
  // src/components/TransactionStatus/TransactionStatus.tsx
4326
4626
  import {
@@ -4331,8 +4631,8 @@ import {
4331
4631
  import React26, {
4332
4632
  useCallback as useCallback10,
4333
4633
  useEffect as useEffect10,
4334
- useMemo as useMemo11,
4335
- useRef as useRef3,
4634
+ useMemo as useMemo13,
4635
+ useRef as useRef4,
4336
4636
  useState as useState10
4337
4637
  } from "react";
4338
4638
  import { Trans } from "react-i18next";
@@ -5073,7 +5373,7 @@ function TransactionStatusLoading({
5073
5373
  )));
5074
5374
  }
5075
5375
  function TransactionStatus({
5076
- isLayerZero,
5376
+ isSlowTransaction,
5077
5377
  isWithdrawal,
5078
5378
  status,
5079
5379
  step,
@@ -5081,10 +5381,10 @@ function TransactionStatus({
5081
5381
  textConfigSteps
5082
5382
  }) {
5083
5383
  const { t } = useFunkitTranslation();
5084
- const finalTextConfigStatus = useMemo11(() => {
5384
+ const finalTextConfigStatus = useMemo13(() => {
5085
5385
  return textConfigStatus || getDefaultTextConfigStatus(t);
5086
5386
  }, [t, textConfigStatus]);
5087
- const finalTextConfigSteps = useMemo11(() => {
5387
+ const finalTextConfigSteps = useMemo13(() => {
5088
5388
  return textConfigSteps || getDefaultTextConfigSteps(t);
5089
5389
  }, [t, textConfigSteps]);
5090
5390
  const [initialStatus] = useState10(status);
@@ -5095,7 +5395,7 @@ function TransactionStatus({
5095
5395
  const [isDelayed2, setDelayed] = useState10(status === "delayed");
5096
5396
  const [transitioningToStatus, setTransitioningToStatus] = useState10(status);
5097
5397
  const [transitioningToStep, setTransitioningToStep] = useState10(step);
5098
- const spinAnimationRef = useRef3();
5398
+ const spinAnimationRef = useRef4();
5099
5399
  const stopSpinning = useCallback10(() => {
5100
5400
  spinAnimationRef.current?.cancel();
5101
5401
  spinAnimationRef.current = void 0;
@@ -5375,18 +5675,18 @@ function TransactionStatus({
5375
5675
  transitioningToStep
5376
5676
  ]);
5377
5677
  const textConfig = currentStatus === "progress" ? isDelayed2 ? finalTextConfigStatus.progress_delayed : finalTextConfigSteps[currentStep] : finalTextConfigStatus[currentStatus];
5378
- const { description, descriptionKey, title } = useMemo11(() => {
5379
- const translatedDurationUnits = isLayerZero ? t("transaction.minutes") : t("transaction.seconds");
5678
+ const { description, descriptionKey, title } = useMemo13(() => {
5679
+ const translatedDurationUnits = isSlowTransaction ? t("transaction.minutes") : t("transaction.seconds");
5380
5680
  const config = typeof textConfig === "function" ? textConfig({
5381
5681
  durationUnits: translatedDurationUnits,
5382
5682
  isWithdrawal,
5383
- finalizeVerb: isLayerZero ? t("transaction.credit") : t("transaction.finalize")
5683
+ finalizeVerb: isSlowTransaction ? t("transaction.credit") : t("transaction.finalize")
5384
5684
  }) : textConfig;
5385
5685
  return {
5386
5686
  ...config,
5387
5687
  descriptionKey: config.descriptionKey ?? config.description
5388
5688
  };
5389
- }, [isLayerZero, isWithdrawal, textConfig, t]);
5689
+ }, [isSlowTransaction, isWithdrawal, textConfig, t]);
5390
5690
  return /* @__PURE__ */ React26.createElement(
5391
5691
  Box,
5392
5692
  {
@@ -5524,7 +5824,7 @@ function FunCheckoutStatusLoaded({
5524
5824
  checkoutHistoryItem.state,
5525
5825
  checkoutHistoryItem.refundState
5526
5826
  );
5527
- const startTimeMs = useMemo12(
5827
+ const startTimeMs = useMemo14(
5528
5828
  () => extractStartTimeMs(
5529
5829
  checkoutHistoryItem.clientMetadata.id,
5530
5830
  activeCheckoutItem,
@@ -5551,7 +5851,7 @@ function FunCheckoutStatusLoaded({
5551
5851
  return /* @__PURE__ */ React27.createElement(
5552
5852
  TransactionStatus,
5553
5853
  {
5554
- isLayerZero: false,
5854
+ isSlowTransaction: false,
5555
5855
  isWithdrawal: false,
5556
5856
  key: checkoutHistoryItem.clientMetadata.id,
5557
5857
  onOrderDelayed,
@@ -5593,10 +5893,22 @@ function formatSecondsTranslated(seconds, t, specifyUnderMinute = false, omitSec
5593
5893
  var LAYERZEO_OFT_TIME_ESTIMATE_SECONDS = 180;
5594
5894
  function useCheckoutTimeEstimate(latestQuote, originalTimeEstimationMs, paymentMethod, bypassFlag) {
5595
5895
  const { t } = useFunkitTranslation();
5896
+ const { apiKey } = useFunkitConfig();
5897
+ const { checkoutItem } = useCheckoutContext();
5898
+ const checkoutConfig = checkoutItem?.initSettings.config;
5899
+ const lighterNativeFlow = isLighterNativeFlow(apiKey, checkoutConfig);
5596
5900
  const timeEstimatesJsonString = useFlag(FlagKey5.CheckoutTimeEstimateOverrides);
5597
5901
  const timeEstimates = safeJSONParse(
5598
5902
  timeEstimatesJsonString
5599
5903
  );
5904
+ if (lighterNativeFlow) {
5905
+ const estimatedTime2 = LIGHTER_NATIVE_FLOW_TIME_ESTIMATE_SECONDS;
5906
+ const estimatedTimeText2 = formatSecondsTranslated(estimatedTime2, t, true);
5907
+ return {
5908
+ estimatedTime: estimatedTime2,
5909
+ estimatedTimeText: estimatedTimeText2
5910
+ };
5911
+ }
5600
5912
  if (latestQuote?.baseQuote.metadata?.oftEnabled) {
5601
5913
  return {
5602
5914
  estimatedTime: LAYERZEO_OFT_TIME_ESTIMATE_SECONDS,
@@ -5652,6 +5964,9 @@ function FunDirectExecutionStatusLoaded({
5652
5964
  disabled: disableAutoUpdate
5653
5965
  });
5654
5966
  const { getCheckoutProgress } = useCheckoutContext();
5967
+ const { apiKey } = useFunkitConfig();
5968
+ const { checkoutItem } = useCheckoutContext();
5969
+ const checkoutConfig = checkoutItem?.initSettings.config;
5655
5970
  const progress = getCheckoutProgress(directExecution.clientMetadata.id);
5656
5971
  const startTimeMs = directExecution.createdTimeMs;
5657
5972
  const [currentTimeMs, setCurrentTimeMs] = useState12(Date.now());
@@ -5664,11 +5979,12 @@ function FunDirectExecutionStatusLoaded({
5664
5979
  if (isRefunded) {
5665
5980
  return null;
5666
5981
  }
5982
+ const isSlowTransaction = !!isLayerZero || isLighterNativeFlow(apiKey, checkoutConfig);
5667
5983
  const { clientMetadata } = directExecution;
5668
5984
  return /* @__PURE__ */ React28.createElement(
5669
5985
  TransactionStatus,
5670
5986
  {
5671
- isLayerZero: !!isLayerZero,
5987
+ isSlowTransaction,
5672
5988
  isWithdrawal: !!clientMetadata.isWithdrawal,
5673
5989
  key: clientMetadata.id,
5674
5990
  startTimeMs,
@@ -5691,10 +6007,11 @@ function useCustomStatusAnimationAboveTopbar({
5691
6007
  paddingTop,
5692
6008
  topbar,
5693
6009
  withTopDivider,
5694
- scrollableContent
6010
+ scrollableContent,
6011
+ isLighterNativeDeposit
5695
6012
  }) {
5696
6013
  const [scrollPos, setScrollPos] = useState13(0);
5697
- const lastY = useRef4(0);
6014
+ const lastY = useRef5(0);
5698
6015
  const { checkoutHistoryInfo, directExecutionInfo } = useFunkitPostCheckoutInternal(
5699
6016
  isCheckoutDetailView && depositAddress ? depositAddress : "0x"
5700
6017
  );
@@ -5751,7 +6068,8 @@ function useCustomStatusAnimationAboveTopbar({
5751
6068
  FunDirectExecutionStatus,
5752
6069
  {
5753
6070
  directExecution: directExecutionInfo,
5754
- isActiveCheckout
6071
+ isActiveCheckout,
6072
+ dangerousCustomDelayedAutoTriggerCutoff: isLighterNativeDeposit ? LIGHTER_DELAYED_AUTO_TRIGGER_CUTOFF : void 0
5755
6073
  }
5756
6074
  ) : /* @__PURE__ */ React29.createElement(
5757
6075
  FunCheckoutStatus,
@@ -5915,16 +6233,16 @@ import React45, {
5915
6233
  useCallback as useCallback12,
5916
6234
  useContext as useContext10,
5917
6235
  useEffect as useEffect17,
5918
- useRef as useRef7
6236
+ useRef as useRef8
5919
6237
  } from "react";
5920
6238
  import { createPortal } from "react-dom";
5921
6239
  import { RemoveScroll } from "react-remove-scroll";
5922
6240
  import { AnimatePresence as AnimatePresence2, motion as motion3 } from "motion/react";
5923
6241
 
5924
6242
  // src/hooks/useScrollDivider.ts
5925
- import { useEffect as useEffect13, useRef as useRef5, useState as useState14 } from "react";
6243
+ import { useEffect as useEffect13, useRef as useRef6, useState as useState14 } from "react";
5926
6244
  var useScrollDivider = () => {
5927
- const ref = useRef5(null);
6245
+ const ref = useRef6(null);
5928
6246
  const [isTop, setIsTop] = useState14(true);
5929
6247
  const [isScrollable, setIsScrollable] = useState14(false);
5930
6248
  const [isScrolling, setIsScrolling] = useState14(false);
@@ -6246,72 +6564,6 @@ var ErrorBoundary_default = ErrorBoundary;
6246
6564
  import { isMobile as isMobile2 } from "@funkit/utils";
6247
6565
  import React40 from "react";
6248
6566
 
6249
- // src/hooks/statsig/useDynamicConfig.ts
6250
- import { useDynamicConfig as useStatsigDynamicConfig } from "@statsig/react-bindings";
6251
-
6252
- // src/__generated__/default_configs.ts
6253
- var default_configs_default = {
6254
- addressblacklist: {
6255
- value: [
6256
- "0x7b97b46D35a28B561d47F50CFB9a2735E506e59d",
6257
- "0x409ad08cc6CA757f69Fb80250a424B9eFeB99807",
6258
- "0x02A86f51aA7B8b1c17c30364748d5Ae4a0727E23",
6259
- "0x64131b60502C01362639CC5cfE1a1efB6Be1165A",
6260
- "0xb84440Ee8BAD69c14755bBb7093f861c3512E3D1"
6261
- ]
6262
- },
6263
- array_of_strings: {
6264
- value: []
6265
- },
6266
- blockedcountries: {
6267
- value: [
6268
- "AF",
6269
- "BY",
6270
- "MM",
6271
- "CF",
6272
- "CU",
6273
- "CD",
6274
- "IR",
6275
- "LB",
6276
- "LY",
6277
- "NI",
6278
- "KP",
6279
- "UA",
6280
- "SO",
6281
- "SS",
6282
- "SY",
6283
- "VE"
6284
- ]
6285
- },
6286
- boolean: {
6287
- value: false
6288
- },
6289
- brokerage_hide_you_receive: {
6290
- value: false
6291
- },
6292
- showinfobanner: {
6293
- value: {
6294
- message: "",
6295
- expireAtMs: 1,
6296
- type: "announcement"
6297
- }
6298
- },
6299
- showpoweredtagline: {
6300
- value: false
6301
- },
6302
- supportedexchangesv2: {
6303
- value: []
6304
- }
6305
- };
6306
-
6307
- // src/hooks/statsig/useDynamicConfig.ts
6308
- var useDynamicConfig = (name) => {
6309
- const config = useStatsigDynamicConfig(name);
6310
- const fallback2 = default_configs_default[name];
6311
- const value = config.get("value", fallback2.value);
6312
- return value;
6313
- };
6314
-
6315
6567
  // src/components/FunButton/FunButton.tsx
6316
6568
  import clsx6 from "clsx";
6317
6569
  import React37 from "react";
@@ -6797,7 +7049,7 @@ function FunDivider({
6797
7049
  }
6798
7050
 
6799
7051
  // src/components/Dialog/FocusTrap.tsx
6800
- import React44, { useCallback as useCallback11, useEffect as useEffect14, useRef as useRef6 } from "react";
7052
+ import React44, { useCallback as useCallback11, useEffect as useEffect14, useRef as useRef7 } from "react";
6801
7053
  var moveFocusWithin = (element2, position) => {
6802
7054
  const focusableElements = element2.querySelectorAll(
6803
7055
  "button:not(:disabled), a[href]"
@@ -6808,7 +7060,7 @@ var moveFocusWithin = (element2, position) => {
6808
7060
  focusableElements[position === "end" ? focusableElements.length - 1 : 0].focus();
6809
7061
  };
6810
7062
  function FocusTrap(props) {
6811
- const contentRef = useRef6(null);
7063
+ const contentRef = useRef7(null);
6812
7064
  useEffect14(() => {
6813
7065
  const previouslyActiveElement = document.activeElement;
6814
7066
  return () => {
@@ -7184,7 +7436,7 @@ var DialogBottom = ({
7184
7436
  ...boxProps
7185
7437
  }) => {
7186
7438
  const { activeTheme } = useActiveTheme();
7187
- const ref = useRef7(null);
7439
+ const ref = useRef8(null);
7188
7440
  const extraBottomPadding = getValueFromPxString(activeTheme.spacing.modalBaseHorizontalPadding) * 2 - getValueFromPxString(activeTheme.spacing.modalPaddingBottomLower);
7189
7441
  const hasNoChildren = useBottomBarHasNoChildren();
7190
7442
  const paddingBottom = (() => {
@@ -7350,7 +7602,7 @@ import {
7350
7602
  formatCryptoAndStringify as formatCryptoAndStringify2,
7351
7603
  formatCurrencyAndStringify as formatCurrencyAndStringify3
7352
7604
  } from "@funkit/utils";
7353
- import React72, { useEffect as useEffect28, useMemo as useMemo19, useRef as useRef14, useState as useState27 } from "react";
7605
+ import React72, { useEffect as useEffect28, useMemo as useMemo21, useRef as useRef15, useState as useState27 } from "react";
7354
7606
  import { createPortal as createPortal2 } from "react-dom";
7355
7607
  import { useDebounce } from "use-debounce";
7356
7608
  import { useAccount as useAccount4 } from "wagmi";
@@ -7366,7 +7618,7 @@ import React59 from "react";
7366
7618
  import React47, {
7367
7619
  useCallback as useCallback13,
7368
7620
  useEffect as useEffect18,
7369
- useRef as useRef8,
7621
+ useRef as useRef9,
7370
7622
  useState as useState16
7371
7623
  } from "react";
7372
7624
  import clsx8 from "clsx";
@@ -7452,9 +7704,9 @@ var FunTooltip = ({
7452
7704
  const [isDisplayed, setIsDisplayed] = useState16(false);
7453
7705
  const [isSafeToRenderInCenter, setIsSafeToRenderInCenter] = useState16(false);
7454
7706
  const [isSafeToRenderInRight, setIsSafeToRenderInRight] = useState16(false);
7455
- const startDelayRef = useRef8();
7456
- const delayRef = useRef8();
7457
- const tooltipRef = useRef8(null);
7707
+ const startDelayRef = useRef9();
7708
+ const delayRef = useRef9();
7709
+ const tooltipRef = useRef9(null);
7458
7710
  const show = useCallback13(
7459
7711
  (startHiding) => {
7460
7712
  startDelayRef.current = setTimeout(() => {
@@ -7546,7 +7798,7 @@ var FunTooltip = ({
7546
7798
  // src/components/Dropdown/BaseDropdown.tsx
7547
7799
  import { isMobile as isMobile4, noop as noop2 } from "@funkit/utils";
7548
7800
  import { AnimatePresence as AnimatePresence4, motion as motion5 } from "motion/react";
7549
- import React56, { useCallback as useCallback14, useEffect as useEffect21, useMemo as useMemo13, useRef as useRef10, useState as useState18 } from "react";
7801
+ import React56, { useCallback as useCallback14, useEffect as useEffect21, useMemo as useMemo15, useRef as useRef11, useState as useState18 } from "react";
7550
7802
 
7551
7803
  // src/consts/layout.ts
7552
7804
  var VERTICAL_SECTION_GAP = "18";
@@ -7973,12 +8225,12 @@ var FunNoResults = ({
7973
8225
 
7974
8226
  // src/components/FunSelect/FunClickOutside.tsx
7975
8227
  import React53 from "react";
7976
- import { useEffect as useEffect20, useRef as useRef9 } from "react";
8228
+ import { useEffect as useEffect20, useRef as useRef10 } from "react";
7977
8229
  function FunClickOutside({
7978
8230
  children,
7979
8231
  onClick
7980
8232
  }) {
7981
- const wrapperRef = useRef9(null);
8233
+ const wrapperRef = useRef10(null);
7982
8234
  useEffect20(() => {
7983
8235
  const handleClickListener = (event) => {
7984
8236
  const clickedInside = wrapperRef.current?.contains(
@@ -8176,11 +8428,11 @@ function BaseDropdown({
8176
8428
  const [isOpened, setIsOpened] = useState18();
8177
8429
  const [searchInput, setSearchInput] = useState18("");
8178
8430
  const selectedOption = options.find((option) => option.value === value);
8179
- const prevIsOpenedRef = useRef10(false);
8431
+ const prevIsOpenedRef = useRef11(false);
8180
8432
  const handleSearch = (event) => {
8181
8433
  setSearchInput(event.target.value);
8182
8434
  };
8183
- const filteredOptions = useMemo13(
8435
+ const filteredOptions = useMemo15(
8184
8436
  () => options.filter(
8185
8437
  (singleOption) => singleOption.label.toLowerCase().includes(searchInput?.toLowerCase())
8186
8438
  ),
@@ -8629,7 +8881,7 @@ var getTokenIconUrl = (symbol, tokens) => {
8629
8881
 
8630
8882
  // src/components/FunBadge/FunBadge.tsx
8631
8883
  import clsx12 from "clsx";
8632
- import React60, { useMemo as useMemo14 } from "react";
8884
+ import React60, { useMemo as useMemo16 } from "react";
8633
8885
 
8634
8886
  // src/components/FunBadge/FunBadge.css.ts
8635
8887
  var badgeShineStyle = "bc2uzy2";
@@ -8653,7 +8905,7 @@ function FunBadge({
8653
8905
  hasShine = false
8654
8906
  }) {
8655
8907
  const { t } = useFunkitTranslation();
8656
- const borderStyle = useMemo14(() => {
8908
+ const borderStyle = useMemo16(() => {
8657
8909
  return borderColor ? { borderStyle: "solid", borderColor, borderWidth: "1" } : {};
8658
8910
  }, [borderColor]);
8659
8911
  return /* @__PURE__ */ React60.createElement(
@@ -9158,10 +9410,10 @@ import {
9158
9410
  formatPercent,
9159
9411
  noop as noop4
9160
9412
  } from "@funkit/utils";
9161
- import React67, { useEffect as useEffect22, useMemo as useMemo15, useState as useState20 } from "react";
9413
+ import React67, { useEffect as useEffect22, useMemo as useMemo17, useState as useState20 } from "react";
9162
9414
  import clsx14 from "clsx";
9163
9415
  import { motion as motion6, useAnimationControls } from "motion/react";
9164
- import { mainnet as mainnet4 } from "viem/chains";
9416
+ import { mainnet as mainnet6 } from "viem/chains";
9165
9417
 
9166
9418
  // src/domains/relay.ts
9167
9419
  var KATANA_BRIDGE_ALERT_THRESHOLD_PERCENT = 0.5;
@@ -9358,7 +9610,7 @@ function computeDigest(relayQuoteMetadata, uiCustomizations, totalPriceImpactPer
9358
9610
  value: void 0
9359
9611
  };
9360
9612
  }
9361
- const isMainnet = details?.currencyIn?.currency?.chainId === mainnet4.id || details?.currencyOut?.currency?.chainId === mainnet4.id;
9613
+ const isMainnet = details?.currencyIn?.currency?.chainId === mainnet6.id || details?.currencyOut?.currency?.chainId === mainnet6.id;
9362
9614
  const percent = formatPercent(totalPriceImpactPercent);
9363
9615
  return {
9364
9616
  isMainnet,
@@ -9644,7 +9896,7 @@ function PaymentFeesSummary({
9644
9896
  setIsExpanded(false);
9645
9897
  }
9646
9898
  }, [valuesNotAvailable, isExpanded]);
9647
- const { collapsed: collapsedItem, expanded: expandedItems } = useMemo15(() => {
9899
+ const { collapsed: collapsedItem, expanded: expandedItems } = useMemo17(() => {
9648
9900
  const fees = quote?.finalFeesBreakdown ?? fallbackFees;
9649
9901
  if (!fees) {
9650
9902
  return NO_DATA;
@@ -9808,7 +10060,7 @@ var EvmWallet = ({ size = 20 }) => /* @__PURE__ */ React68.createElement(
9808
10060
  );
9809
10061
 
9810
10062
  // src/hooks/queries/useWithdrawalQuote.ts
9811
- import { useQuery as useQuery6 } from "@tanstack/react-query";
10063
+ import { useQuery as useQuery7 } from "@tanstack/react-query";
9812
10064
  import { useConfig as useConfig2 } from "wagmi";
9813
10065
 
9814
10066
  // src/domains/quote.ts
@@ -9962,11 +10214,9 @@ async function getCheckoutBaseQuote(checkoutItem, userId, walletAddress, apiKey,
9962
10214
  const toTokenAddress = config.targetAsset;
9963
10215
  const fromChainId = selectedSourceAssetInfo.chainId;
9964
10216
  const fromTokenAddress = selectedSourceAssetInfo.address;
9965
- const isLighterSpot = isLighterEthSpot(apiKey, config);
9966
- const [toTokenDecimals, fromTokenDecimals, lighterTickSize] = await Promise.all([
10217
+ const [toTokenDecimals, fromTokenDecimals] = await Promise.all([
9967
10218
  getTokenDecimals(wagmiConfig, toChainId, toTokenAddress),
9968
- getTokenDecimals(wagmiConfig, fromChainId, fromTokenAddress),
9969
- isLighterSpot ? getLighterTickSize(wagmiConfig, toChainId, 1) : Promise.resolve(void 0)
10219
+ getTokenDecimals(wagmiConfig, fromChainId, fromTokenAddress)
9970
10220
  ]);
9971
10221
  const toTokenAmount = config.targetAssetAmount ?? 0;
9972
10222
  const fromTokenAmount = checkoutItem.sourceAssetAmount ?? 0;
@@ -9986,8 +10236,7 @@ async function getCheckoutBaseQuote(checkoutItem, userId, walletAddress, apiKey,
9986
10236
  senderAddress,
9987
10237
  fromTokenAmount,
9988
10238
  fromTokenDecimals,
9989
- isExactIn: isWithdrawal,
9990
- tickSize: lighterTickSize
10239
+ isExactIn: isWithdrawal
9991
10240
  }) : await getApiCheckoutQuote({
9992
10241
  userId,
9993
10242
  fromChainId,
@@ -10261,7 +10510,7 @@ function useWithdrawalQuote({
10261
10510
  );
10262
10511
  const enabled = !!apiKey && !!targetAsset && !!sourceAmount && !!recipientAddress && !!chainId && !!symbol && !!isValidAddress && !!checkoutItem;
10263
10512
  const { logEvent } = useTrack();
10264
- const query = useQuery6({
10513
+ const query = useQuery7({
10265
10514
  queryKey: [
10266
10515
  "withdrawal",
10267
10516
  "quote",
@@ -10337,12 +10586,12 @@ function useWithdrawalQuote({
10337
10586
  }
10338
10587
 
10339
10588
  // src/hooks/queries/useWithdrawalRisk.ts
10340
- import { useQuery as useQuery7 } from "@tanstack/react-query";
10341
- import { useEffect as useEffect23, useRef as useRef11 } from "react";
10589
+ import { useQuery as useQuery8 } from "@tanstack/react-query";
10590
+ import { useEffect as useEffect23, useRef as useRef12 } from "react";
10342
10591
  import { isAddress as isAddress2 } from "viem";
10343
10592
  var useWithdrawalRisk = (apiKey, receiveAddress) => {
10344
- const lastRiskyAddressRef = useRef11(null);
10345
- const query = useQuery7({
10593
+ const lastRiskyAddressRef = useRef12(null);
10594
+ const query = useQuery8({
10346
10595
  queryKey: ["withdrawal", "addressRisk", apiKey, receiveAddress],
10347
10596
  queryFn: async () => {
10348
10597
  try {
@@ -10382,17 +10631,17 @@ import {
10382
10631
  convertFunToRelayTokenAddress,
10383
10632
  getRelayAssetPriceInfo
10384
10633
  } from "@funkit/fun-relay";
10385
- import { skipToken, useQuery as useQuery9 } from "@tanstack/react-query";
10634
+ import { skipToken, useQuery as useQuery10 } from "@tanstack/react-query";
10386
10635
 
10387
10636
  // src/hooks/queries/useErc20Asset.ts
10388
10637
  import { getAssetErc20ByChainAndSymbol } from "@funkit/api-base";
10389
- import { useQuery as useQuery8 } from "@tanstack/react-query";
10638
+ import { useQuery as useQuery9 } from "@tanstack/react-query";
10390
10639
  var useErc20Asset = ({
10391
10640
  chainId,
10392
10641
  symbol
10393
10642
  }) => {
10394
10643
  const { apiKey } = useFunkitConfig();
10395
- const query = useQuery8({
10644
+ const query = useQuery9({
10396
10645
  queryKey: ["erc20Asset", chainId, symbol],
10397
10646
  queryFn: async () => {
10398
10647
  if (!apiKey || !chainId || !symbol) {
@@ -10444,7 +10693,7 @@ function useAssetAddressPrice({
10444
10693
  refetchInterval = 1e4
10445
10694
  }) {
10446
10695
  const { apiKey } = useFunkitConfig();
10447
- const { data, error, isLoading } = useQuery9({
10696
+ const { data, error, isLoading } = useQuery10({
10448
10697
  queryKey: ["getAssetPriceInfo", chainId, assetTokenAddress],
10449
10698
  queryFn: chainId && assetTokenAddress ? async () => {
10450
10699
  const isRelayPrimary = RELAY_SHORT_CIRCUIT_CHAIN_IDS.includes(chainId);
@@ -10507,7 +10756,7 @@ import { useEffect as useEffect24, useState as useState21 } from "react";
10507
10756
  import { polygon as polygon2 } from "viem/chains";
10508
10757
 
10509
10758
  // src/hooks/useEnabledTokenTransferChainTokens.ts
10510
- import { bitcoinChain as bitcoinChain2, solanaChain as solanaChain2 } from "@funkit/chains";
10759
+ import { bitcoinChain, solanaChain as solanaChain2 } from "@funkit/chains";
10511
10760
  import { FlagKey as FlagKey8 } from "@funkit/utils";
10512
10761
  import { base as base4 } from "viem/chains";
10513
10762
 
@@ -10547,7 +10796,7 @@ function useEnabledTokenTransferChainTokens(transferInit, isWithdrawal) {
10547
10796
  if (isSolana && !hasSolanaAddress && !isWithdrawal) {
10548
10797
  return acc;
10549
10798
  }
10550
- const isBitcoin = chainId === bitcoinChain2.id;
10799
+ const isBitcoin = chainId === bitcoinChain.id;
10551
10800
  if (isBitcoin && !hasBitcoinAddress && !isWithdrawal) {
10552
10801
  return acc;
10553
10802
  }
@@ -10868,10 +11117,10 @@ function usePreparedWalletConnectors() {
10868
11117
  import { useState as useState26 } from "react";
10869
11118
 
10870
11119
  // src/hooks/useAutoClearState.ts
10871
- import { useCallback as useCallback15, useEffect as useEffect25, useRef as useRef12, useState as useState22 } from "react";
11120
+ import { useCallback as useCallback15, useEffect as useEffect25, useRef as useRef13, useState as useState22 } from "react";
10872
11121
  function useAutoClearState(initialValue = null) {
10873
11122
  const [state, setState] = useState22(initialValue);
10874
- const timeoutRef = useRef12();
11123
+ const timeoutRef = useRef13();
10875
11124
  useEffect25(() => {
10876
11125
  return () => {
10877
11126
  if (timeoutRef.current !== void 0) {
@@ -10922,13 +11171,13 @@ import { useConfig as useConfig3 } from "wagmi";
10922
11171
  // src/hooks/useBluvo.ts
10923
11172
  import { bluvoGetWithdrawableBalanceById as bluvoGetWithdrawableBalanceById2 } from "@funkit/api-base";
10924
11173
  import { FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO4 } from "@funkit/chains";
10925
- import { keepPreviousData, useQuery as useQuery10 } from "@tanstack/react-query";
10926
- import { useCallback as useCallback16, useMemo as useMemo18 } from "react";
11174
+ import { keepPreviousData, useQuery as useQuery11 } from "@tanstack/react-query";
11175
+ import { useCallback as useCallback16, useMemo as useMemo20 } from "react";
10927
11176
 
10928
11177
  // src/domains/wallet.ts
10929
11178
  import { FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO2 } from "@funkit/chains";
10930
11179
  import { isNotNullish as isNotNullish2 } from "@funkit/utils";
10931
- import { mainnet as mainnet5, polygon as polygon3 } from "viem/chains";
11180
+ import { mainnet as mainnet7, polygon as polygon3 } from "viem/chains";
10932
11181
 
10933
11182
  // src/utils/assets.ts
10934
11183
  import { formatUnits } from "viem";
@@ -10974,14 +11223,14 @@ import { arbitrum as arbitrum3 } from "viem/chains";
10974
11223
 
10975
11224
  // src/hooks/useTokenTransfer.ts
10976
11225
  import {
10977
- bitcoinChain as bitcoinChain3,
11226
+ bitcoinChain as bitcoinChain2,
10978
11227
  hyperEvmChain,
10979
11228
  monadChain,
10980
11229
  solanaChain as solanaChain3
10981
11230
  } from "@funkit/chains";
10982
11231
  import { FlagKey as FlagKey10 } from "@funkit/utils";
10983
- import { useMemo as useMemo16 } from "react";
10984
- import { arbitrum as arbitrum2, mainnet as mainnet6, polygon as polygon4 } from "viem/chains";
11232
+ import { useMemo as useMemo18 } from "react";
11233
+ import { arbitrum as arbitrum2, mainnet as mainnet8, polygon as polygon4 } from "viem/chains";
10985
11234
 
10986
11235
  // src/utils/transfer.ts
10987
11236
  var getTransferTokenQrCodeUri = (props) => {
@@ -11026,12 +11275,12 @@ var useTokenTransfer = (selectedChainId, selectedToken, chainIds) => {
11026
11275
  const isUsdceOnPolygon = isPolygon && selectedToken === "USDC.e";
11027
11276
  const isUsdcOnPolygon = isPolygon && selectedToken === "USDC";
11028
11277
  const showOriginalRecipient = isBankrUsUser || !enableUniversal && (isUsdceOnPolygon || isUsdcOnPolygon);
11029
- const funDepositAddress = selectedChainId === solanaChain3.id ? transferInit?.solanaAddr : selectedChainId === bitcoinChain3.id ? transferInit?.btcAddrSegwit : transferInit?.depositAddr;
11278
+ const funDepositAddress = selectedChainId === solanaChain3.id ? transferInit?.solanaAddr : selectedChainId === bitcoinChain2.id ? transferInit?.btcAddrSegwit : transferInit?.depositAddr;
11030
11279
  const blockchainType = (() => {
11031
11280
  if (selectedChainId === solanaChain3.id) {
11032
11281
  return "solana";
11033
11282
  }
11034
- if (selectedChainId === bitcoinChain3.id) {
11283
+ if (selectedChainId === bitcoinChain2.id) {
11035
11284
  return "bitcoin";
11036
11285
  }
11037
11286
  return "ethereum";
@@ -11070,7 +11319,7 @@ var useMinTransferLimits = () => {
11070
11319
  return limits;
11071
11320
  };
11072
11321
  function getMinTransferValueForChain(chainId, limits) {
11073
- const MAINNET_IDS = [mainnet6.id, bitcoinChain3.id];
11322
+ const MAINNET_IDS = [mainnet8.id, bitcoinChain2.id];
11074
11323
  return MAINNET_IDS.includes(chainId) ? limits.mainnet : limits.nonMainnet;
11075
11324
  }
11076
11325
  var useMinTransferValue = (selectedChainId) => {
@@ -11088,7 +11337,7 @@ var useMinTransferValue = (selectedChainId) => {
11088
11337
  };
11089
11338
  var useMinTransferValues = (chainIds) => {
11090
11339
  const limits = useMinTransferLimits();
11091
- return useMemo16(() => {
11340
+ return useMemo18(() => {
11092
11341
  return chainIds.reduce(
11093
11342
  (acc, id) => {
11094
11343
  const limit = getMinTransferValueForChain(id, limits);
@@ -11359,8 +11608,8 @@ import { safeParseJson as safeParseJson3 } from "@funkit/utils";
11359
11608
  import React69, {
11360
11609
  useContext as useContext12,
11361
11610
  useEffect as useEffect26,
11362
- useMemo as useMemo17,
11363
- useRef as useRef13,
11611
+ useMemo as useMemo19,
11612
+ useRef as useRef14,
11364
11613
  useState as useState23
11365
11614
  } from "react";
11366
11615
  import { createContext as createContext12 } from "react";
@@ -11382,7 +11631,7 @@ var FunkitBrokerageProvider = ({
11382
11631
  }) => {
11383
11632
  const { apiKey } = useFunkitConfig();
11384
11633
  const isSandboxMode = useIsFunkitSandboxMode();
11385
- const minTransferRef = useRef13(useMinTransferLimits());
11634
+ const minTransferRef = useRef14(useMinTransferLimits());
11386
11635
  const ORG_ID = isSandboxMode ? STAGE_ORG_ID : PROD_ORG_ID;
11387
11636
  const PROJECT_ID = isSandboxMode ? STAGE_PROJECT_ID : PROD_PROJECT_ID;
11388
11637
  const [authConnections, setAuthConnections] = useState23(
@@ -11419,7 +11668,7 @@ var FunkitBrokerageProvider = ({
11419
11668
  setSelectedBrokerageAsset(null);
11420
11669
  }
11421
11670
  }, [bluvoClient.withdrawal?.status]);
11422
- const brokerageMinMax = useMemo17(() => {
11671
+ const brokerageMinMax = useMemo19(() => {
11423
11672
  if (!selectedBrokerageAsset || !isBrokerageAsset(selectedBrokerageAsset)) {
11424
11673
  return null;
11425
11674
  }
@@ -11493,7 +11742,7 @@ var useBluvoExchangeBalance = ({
11493
11742
  const deviceId = exchange && authorizedConnections?.[exchange] || "";
11494
11743
  const isEnabled = !!exchange && !!deviceId;
11495
11744
  const preferredChainId = checkoutItem?.initSettings.config.targetChain;
11496
- const { data, isLoading, isError } = useQuery10({
11745
+ const { data, isLoading, isError } = useQuery11({
11497
11746
  queryKey: ["bluvo-exchange-balance", deviceId, preferredChainId],
11498
11747
  queryFn: async () => {
11499
11748
  if (!exchange) {
@@ -11585,7 +11834,7 @@ var useBluvoSupportedExchanges = ({
11585
11834
  filterBy = ["live" /* Live */]
11586
11835
  }) => {
11587
11836
  const { authorizedConnections } = useFunkitBrokerageContext();
11588
- const exchangeOptions = useMemo18(
11837
+ const exchangeOptions = useMemo20(
11589
11838
  () => SUPPORTED_EXCHANGES.filter(
11590
11839
  ({ status: exchangeStatus }) => filterBy.includes(exchangeStatus)
11591
11840
  ).map(({ exchange, status }) => {
@@ -12590,10 +12839,10 @@ var WithdrawContent = ({
12590
12839
  recipientAddress
12591
12840
  );
12592
12841
  const isReceipentBlacklisted = isBlacklistedWithdrawAddress(recipientAddress);
12593
- const lastTargetAssetErrorRef = useRef14(null);
12594
- const lastQuoteErrorRef = useRef14(null);
12595
- const lastRiskyRecipientRef = useRef14(null);
12596
- const lastBlacklistedRecipientRef = useRef14(null);
12842
+ const lastTargetAssetErrorRef = useRef15(null);
12843
+ const lastQuoteErrorRef = useRef15(null);
12844
+ const lastRiskyRecipientRef = useRef15(null);
12845
+ const lastBlacklistedRecipientRef = useRef15(null);
12597
12846
  useEffect28(() => {
12598
12847
  if (!targetAssetFetchError) {
12599
12848
  return;
@@ -12689,7 +12938,7 @@ var WithdrawContent = ({
12689
12938
  selectedChainName,
12690
12939
  t
12691
12940
  });
12692
- const errorNotification = useMemo19(
12941
+ const errorNotification = useMemo21(
12693
12942
  () => getErrorNotification(
12694
12943
  quoteErrorObject,
12695
12944
  withdrawalError,
@@ -13122,7 +13371,7 @@ import {
13122
13371
  getBridgeKycLink
13123
13372
  } from "@funkit/api-base";
13124
13373
  import { FlagKey as FlagKey12 } from "@funkit/utils";
13125
- import { useQuery as useQuery11, useQueryClient } from "@tanstack/react-query";
13374
+ import { useQuery as useQuery12, useQueryClient } from "@tanstack/react-query";
13126
13375
  import { useCallback as useCallback18 } from "react";
13127
13376
  var sepaCountryCode = [
13128
13377
  // EU countries that are part of SEPA
@@ -13209,7 +13458,7 @@ function useFrogAccounts() {
13209
13458
  const { apiKey } = useFunkitConfig();
13210
13459
  const { userInfo, isUserLoggedIn } = useGeneralWallet();
13211
13460
  const userId = userInfo.id;
13212
- const query = useQuery11({
13461
+ const query = useQuery12({
13213
13462
  queryKey: ["frogSubAccounts", userId],
13214
13463
  queryFn: () => fetchFrogAccounts(userId, { apiKey, logger }),
13215
13464
  enabled: userId !== "0x" && isUserLoggedIn,
@@ -13245,7 +13494,7 @@ function useVirtualFiatAccounts() {
13245
13494
  const bridgeSubAccount = frogSubAccounts?.find(
13246
13495
  (subAccount) => subAccount.subAccountType === "bridge"
13247
13496
  );
13248
- const query = useQuery11({
13497
+ const query = useQuery12({
13249
13498
  queryKey: ["useVirtualFiatAccounts", bridgeSubAccount?.guid],
13250
13499
  queryFn: () => fetchAllFiatAccounts(bridgeSubAccount, { apiKey, logger }),
13251
13500
  enabled: !!bridgeSubAccount,
@@ -13272,7 +13521,7 @@ function useMatchingVirtualFiatAccount(accounts) {
13272
13521
  }
13273
13522
  function useLoadKycLink(linkLoad) {
13274
13523
  const { apiKey } = useFunkitConfig();
13275
- const query = useQuery11({
13524
+ const query = useQuery12({
13276
13525
  queryKey: ["kycLink", linkLoad.guid],
13277
13526
  queryFn: async () => {
13278
13527
  if (linkLoad.kycLink) {
@@ -13355,7 +13604,7 @@ import {
13355
13604
  FUNKIT_CONNECT_CHECKOUT_NATIVE_CURRENCY_ADDRESS as FUNKIT_CONNECT_CHECKOUT_NATIVE_CURRENCY_ADDRESS3,
13356
13605
  FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO7
13357
13606
  } from "@funkit/chains";
13358
- import { useMemo as useMemo20 } from "react";
13607
+ import { useMemo as useMemo22 } from "react";
13359
13608
  var processWalletAssets = (walletAssets, targetChain) => {
13360
13609
  if (!walletAssets) {
13361
13610
  return;
@@ -13404,7 +13653,7 @@ var processWalletAssets = (walletAssets, targetChain) => {
13404
13653
  };
13405
13654
  function useWalletAssetHoldings(targetChain) {
13406
13655
  const { walletAssets, isLoading, totalWalletAssetsUsd } = useWalletAssets();
13407
- const processedAssets = useMemo20(
13656
+ const processedAssets = useMemo22(
13408
13657
  () => processWalletAssets(walletAssets, targetChain),
13409
13658
  [targetChain, walletAssets]
13410
13659
  );
@@ -14243,7 +14492,7 @@ import React76 from "react";
14243
14492
 
14244
14493
  // src/components/FunOptionBox/FunOptionBox.tsx
14245
14494
  import clsx15 from "clsx";
14246
- import React75, { useRef as useRef15 } from "react";
14495
+ import React75, { useRef as useRef16 } from "react";
14247
14496
 
14248
14497
  // src/components/FunOptionBox/FunOptionBox.css.ts
14249
14498
  var funOptionBoxStyle = { baseStyle: "_1rfcluh0", defaultBorder: "_1rsrm2f15a _1rsrm2f13f", transparentBorder: "_1rsrm2f18s _1rsrm2f13f _1rsrm2f1k", activeBorder: "_1rsrm2f13a", disabledOptionBorder: "_1rsrm2f154", defaultBackground: "_1rsrm2fzy _1rsrm2fmh", activeBackground: "_1rsrm2fzy _1rsrm2fqn _1rsrm2fqo" };
@@ -14269,7 +14518,7 @@ function FunOptionBox({
14269
14518
  ...boxProps
14270
14519
  }) {
14271
14520
  const isClickable = !!onClick && !disabled;
14272
- const ref = useRef15(null);
14521
+ const ref = useRef16(null);
14273
14522
  return /* @__PURE__ */ React75.createElement(
14274
14523
  Box,
14275
14524
  {
@@ -15270,7 +15519,7 @@ var HelpAlert = ({ onHelp: onHelp2 }) => {
15270
15519
 
15271
15520
  // src/modals/CheckoutModal/TransferToken/CheckoutNotifications.tsx
15272
15521
  import clsx18 from "clsx";
15273
- import React98, { useCallback as useCallback21, useEffect as useEffect33, useMemo as useMemo23, useState as useState31 } from "react";
15522
+ import React98, { useCallback as useCallback21, useEffect as useEffect33, useMemo as useMemo25, useState as useState31 } from "react";
15274
15523
 
15275
15524
  // src/components/FunNotificationBanner/FunNotificationShowMoreButton.tsx
15276
15525
  import React88 from "react";
@@ -15323,7 +15572,7 @@ import {
15323
15572
  getCheckoutsByUserId as getCheckoutsByUserId2
15324
15573
  } from "@funkit/api-base";
15325
15574
  import { FlagKey as FlagKey14 } from "@funkit/utils";
15326
- import { useQuery as useQuery12 } from "@tanstack/react-query";
15575
+ import { useQuery as useQuery13 } from "@tanstack/react-query";
15327
15576
  var hasCorrectPaymentMethod = (checkout, paymentMethod) => !paymentMethod || checkout.clientMetadata.selectedPaymentMethodInfo?.paymentMethod === paymentMethod;
15328
15577
  var isRecent = (checkout, timestampCutoff) => checkout.createdTimeMs > timestampCutoff;
15329
15578
  var DEFAULT_NOTIF_CUTOFF = 7 * 24 * 60 * 60 * 1e3;
@@ -15338,7 +15587,7 @@ var useRecentCheckouts = ({
15338
15587
  const { isUserLoggedIn, userInfo } = useGeneralWallet();
15339
15588
  const { apiKey } = useFunkitConfig();
15340
15589
  const { listRefresh } = useCheckoutRefreshInterval();
15341
- const query = useQuery12({
15590
+ const query = useQuery13({
15342
15591
  queryKey: ["checkouts", userInfo.id],
15343
15592
  queryFn: async () => {
15344
15593
  const checkouts = await getCheckoutsByUserId2({
@@ -15361,8 +15610,8 @@ var useRecentCheckouts = ({
15361
15610
  import {
15362
15611
  getDirectExecutionsByUserId as getDirectExecutionsByUserId2
15363
15612
  } from "@funkit/api-base";
15364
- import { useQuery as useQuery13 } from "@tanstack/react-query";
15365
- import { useMemo as useMemo21 } from "react";
15613
+ import { useQuery as useQuery14 } from "@tanstack/react-query";
15614
+ import { useMemo as useMemo23 } from "react";
15366
15615
  var isRecent2 = (de, timestampCutoff) => de.createdTimeMs > timestampCutoff;
15367
15616
  function mergeMultiStepDirectExecutions(directExecutions) {
15368
15617
  const directExecutionsByToTxId = {};
@@ -15406,7 +15655,7 @@ var useRecentDirectExecutions = ({
15406
15655
  const { userInfo, isUserLoggedIn } = useGeneralWallet();
15407
15656
  const { apiKey } = useFunkitConfig();
15408
15657
  const { listRefresh } = useCheckoutRefreshInterval();
15409
- const { data: directExecutions } = useQuery13({
15658
+ const { data: directExecutions } = useQuery14({
15410
15659
  queryKey: ["directExecutions", userInfo.id],
15411
15660
  queryFn: async () => {
15412
15661
  const directExecutions2 = await getDirectExecutionsByUserId2({
@@ -15419,7 +15668,7 @@ var useRecentDirectExecutions = ({
15419
15668
  refetchInterval: listRefresh,
15420
15669
  enabled: isUserLoggedIn && isVisible
15421
15670
  });
15422
- const data = useMemo21(() => {
15671
+ const data = useMemo23(() => {
15423
15672
  if (!directExecutions) {
15424
15673
  return directExecutions;
15425
15674
  }
@@ -15491,7 +15740,7 @@ import { Trans as Trans3 } from "react-i18next";
15491
15740
  import { CheckoutState as CheckoutState3 } from "@funkit/api-base";
15492
15741
  import { SOLANA_MAINNET_CHAIN_ID } from "@funkit/chains";
15493
15742
  import { formatAddress as formatAddress4, formatTimestamp } from "@funkit/utils";
15494
- import React92, { useState as useState28, useRef as useRef16, useEffect as useEffect31 } from "react";
15743
+ import React92, { useState as useState28, useRef as useRef17, useEffect as useEffect31 } from "react";
15495
15744
 
15496
15745
  // src/utils/checkoutHistory.ts
15497
15746
  var storageKey4 = "fkc-last-report-submit-time";
@@ -15725,7 +15974,7 @@ function OrderDetail({
15725
15974
  }) {
15726
15975
  const { t } = useFunkitTranslation();
15727
15976
  const [isExpanded, setIsExpanded] = useState28(false);
15728
- const contentRef = useRef16(null);
15977
+ const contentRef = useRef17(null);
15729
15978
  const isCheckoutItemLoaded = checkoutHistoryItem !== void 0;
15730
15979
  return /* @__PURE__ */ React92.createElement(Box, { ref: contentRef, paddingX: "12" }, /* @__PURE__ */ React92.createElement(
15731
15980
  Box,
@@ -15793,7 +16042,7 @@ var showMoreButtonStyle = "_4yitd93 _1rsrm2f12m _1rsrm2f1f _1rsrm2f1c _1rsrm2fm4
15793
16042
  // src/components/FunNotificationBanner/FunNotificationBannerIcon.tsx
15794
16043
  import clsx16 from "clsx";
15795
16044
  import { motion as motion7, useAnimate as useAnimate2 } from "motion/react";
15796
- import React93, { useCallback as useCallback19, useEffect as useEffect32, useRef as useRef17 } from "react";
16045
+ import React93, { useCallback as useCallback19, useEffect as useEffect32, useRef as useRef18 } from "react";
15797
16046
 
15798
16047
  // src/components/FunNotificationBanner/FunNotificationBannerIcon.css.ts
15799
16048
  var STATUS_SPINNER_BOTTOM_POSITION = -5;
@@ -16242,7 +16491,7 @@ var FunNotificationBannerIcon = ({
16242
16491
  )
16243
16492
  ]);
16244
16493
  }, [animate]);
16245
- const statusRef = useRef17(status);
16494
+ const statusRef = useRef18(status);
16246
16495
  useEffect32(() => {
16247
16496
  if (statusRef.current !== status) {
16248
16497
  if (statusRef.current === "processing" && status === "completed") {
@@ -16474,11 +16723,11 @@ var FunNotificationBanner = ({
16474
16723
  import {
16475
16724
  getCheckoutByDepositAddress as getCheckoutByDepositAddress2
16476
16725
  } from "@funkit/api-base";
16477
- import { useQuery as useQuery14 } from "@tanstack/react-query";
16726
+ import { useQuery as useQuery15 } from "@tanstack/react-query";
16478
16727
  var useCheckout = (depositAddress, initial) => {
16479
16728
  const { apiKey } = useFunkitConfig();
16480
16729
  const { itemRefresh } = useCheckoutRefreshInterval();
16481
- const query = useQuery14({
16730
+ const query = useQuery15({
16482
16731
  queryKey: ["checkouts", "checkout", depositAddress],
16483
16732
  queryFn: () => (
16484
16733
  // biome-ignore lint/style/noNonNullAssertion: already checked for null
@@ -16683,7 +16932,7 @@ import {
16683
16932
  formatTimestamp as formatTimestamp2,
16684
16933
  isTokenEquivalent
16685
16934
  } from "@funkit/utils";
16686
- import React96, { useCallback as useCallback20, useMemo as useMemo22, useRef as useRef18, useState as useState30 } from "react";
16935
+ import React96, { useCallback as useCallback20, useMemo as useMemo24, useRef as useRef19, useState as useState30 } from "react";
16687
16936
  import { createPortal as createPortal3 } from "react-dom";
16688
16937
 
16689
16938
  // src/hooks/useReceiveAmountLabel.ts
@@ -16744,7 +16993,7 @@ function FunDirectExecutionHistoryDetail({
16744
16993
  ]
16745
16994
  );
16746
16995
  const isWithdrawal = directExecution?.clientMetadata?.isWithdrawal;
16747
- const buttonProps = useMemo22(() => {
16996
+ const buttonProps = useMemo24(() => {
16748
16997
  if (!isLoaded) {
16749
16998
  return void 0;
16750
16999
  }
@@ -16890,7 +17139,7 @@ function DirectExecutionOrderDetail({
16890
17139
  }) {
16891
17140
  const { t } = useFunkitTranslation();
16892
17141
  const [isExpanded, setIsExpanded] = useState30(false);
16893
- const contentRef = useRef18(null);
17142
+ const contentRef = useRef19(null);
16894
17143
  return /* @__PURE__ */ React96.createElement(Box, { ref: contentRef, paddingX: "12" }, /* @__PURE__ */ React96.createElement(
16895
17144
  Box,
16896
17145
  {
@@ -17123,7 +17372,7 @@ var CheckoutNotifications = ({
17123
17372
  const [initialDirectExecutions, setInitialDirectExecutions] = useState31();
17124
17373
  const [closedNotifications, setClosedNotifications] = useState31([]);
17125
17374
  const { data: checkouts } = useRecentCheckouts({ isVisible });
17126
- const filterFunc = useMemo23(() => {
17375
+ const filterFunc = useMemo25(() => {
17127
17376
  return variant && {
17128
17377
  token_transfer: isTokenTransferDirectExecution,
17129
17378
  withdrawal: isWithdrawalDirectExecution
@@ -17145,19 +17394,19 @@ var CheckoutNotifications = ({
17145
17394
  }
17146
17395
  setInitialDirectExecutions(directExecutions);
17147
17396
  }, [initialDirectExecutions, directExecutions]);
17148
- const displayedDirectExecutions = useMemo23(() => {
17397
+ const displayedDirectExecutions = useMemo25(() => {
17149
17398
  if (!directExecutions) {
17150
17399
  return [];
17151
17400
  }
17152
17401
  return getUpdatedDirectExecutions(directExecutions, initialDirectExecutions).filter(({ txHash }) => !closedNotifications.includes(txHash)).slice(0, MAX_COUNT);
17153
17402
  }, [initialDirectExecutions, directExecutions, closedNotifications]);
17154
- const displayedCheckouts = useMemo23(() => {
17403
+ const displayedCheckouts = useMemo25(() => {
17155
17404
  if (!checkouts) {
17156
17405
  return [];
17157
17406
  }
17158
17407
  return getUpdatedCheckouts(checkouts, initialCheckouts).filter(({ depositAddr }) => !closedNotifications.includes(depositAddr)).slice(0, MAX_COUNT);
17159
17408
  }, [initialCheckouts, checkouts, closedNotifications]);
17160
- const combinedNotifications = useMemo23(() => {
17409
+ const combinedNotifications = useMemo25(() => {
17161
17410
  return [
17162
17411
  ...displayedDirectExecutions.map(
17163
17412
  (item) => ({ ...item, isDirectExecution: true })
@@ -17167,7 +17416,7 @@ var CheckoutNotifications = ({
17167
17416
  )
17168
17417
  ].sort((a, b) => b.createdTimeMs - a.createdTimeMs);
17169
17418
  }, [displayedDirectExecutions, displayedCheckouts]);
17170
- const displayedNotifications = useMemo23(() => {
17419
+ const displayedNotifications = useMemo25(() => {
17171
17420
  return isExpanded ? combinedNotifications : combinedNotifications.slice(0, COLLAPSED_COUNT);
17172
17421
  }, [isExpanded, combinedNotifications]);
17173
17422
  const handleNotificationClose = (id) => setClosedNotifications((prev) => [...prev, id]);
@@ -17324,13 +17573,13 @@ import React106 from "react";
17324
17573
  import React105 from "react";
17325
17574
 
17326
17575
  // src/components/FunCheckoutHistory/FunCheckoutHistoryDetail.tsx
17327
- import React100, { useCallback as useCallback22, useMemo as useMemo24, useState as useState32 } from "react";
17576
+ import React100, { useCallback as useCallback22, useMemo as useMemo26, useState as useState32 } from "react";
17328
17577
  import { createPortal as createPortal5 } from "react-dom";
17329
17578
 
17330
17579
  // src/hooks/useFunListeners.ts
17331
- import { useEffect as useEffect34, useRef as useRef19 } from "react";
17580
+ import { useEffect as useEffect34, useRef as useRef20 } from "react";
17332
17581
  function useCheckoutHistoryListener(activate = true, singleDepositAddr) {
17333
- const activeIntervalRef = useRef19();
17582
+ const activeIntervalRef = useRef20();
17334
17583
  const { startCheckoutHistoryListener, stopCheckoutHistoryListener } = useCheckoutHistoryContext();
17335
17584
  useEffect34(() => {
17336
17585
  if (activate) {
@@ -17391,7 +17640,7 @@ function FunCheckoutHistoryDetail({
17391
17640
  isActiveCheckout
17392
17641
  ]
17393
17642
  );
17394
- const primaryButtonProps = useMemo24(() => {
17643
+ const primaryButtonProps = useMemo26(() => {
17395
17644
  if (!isCheckoutLoaded) {
17396
17645
  return void 0;
17397
17646
  }
@@ -17478,7 +17727,7 @@ var CheckoutAlert = ({ state, refundState, onHelp: onHelp2 }) => {
17478
17727
 
17479
17728
  // src/components/FunCheckoutHistory/FunCheckoutHistoryHelp.tsx
17480
17729
  import { sendSupportMessage } from "@funkit/api-base";
17481
- import React104, { useEffect as useEffect35, useMemo as useMemo25, useRef as useRef20, useState as useState33 } from "react";
17730
+ import React104, { useEffect as useEffect35, useMemo as useMemo27, useRef as useRef21, useState as useState33 } from "react";
17482
17731
  import { createPortal as createPortal6 } from "react-dom";
17483
17732
 
17484
17733
  // src/components/FunInput/FunTextAreaInput.tsx
@@ -17662,13 +17911,13 @@ function FunCheckoutHistoryHelp({
17662
17911
  );
17663
17912
  const [descriptionInput, setDescriptionInput] = useState33("");
17664
17913
  const [errorMessage, setErrorMessage] = useState33();
17665
- const isEmailInputValid = useMemo25(() => {
17914
+ const isEmailInputValid = useMemo27(() => {
17666
17915
  return validateEmailString(emailInput);
17667
17916
  }, [emailInput]);
17668
17917
  const [processStage, setProcessStage] = useState33(
17669
17918
  0 /* INPUT */
17670
17919
  );
17671
- const wrapperRef = useRef20(null);
17920
+ const wrapperRef = useRef21(null);
17672
17921
  useEffect35(() => wrapperRef.current?.scrollIntoView(), []);
17673
17922
  const handleShowErrorMessage = (message, timeMs = FIVE_SECONDS_MS) => {
17674
17923
  setErrorMessage(message);
@@ -17860,6 +18109,12 @@ function FunCheckoutHistoryContent({
17860
18109
  onHelp: onHelp2
17861
18110
  }) {
17862
18111
  const { checkoutHistoryInfo, directExecutionInfo } = useFunkitPostCheckoutInternal(depositAddress);
18112
+ const { apiKey } = useFunkitConfig();
18113
+ const { checkoutItem } = useCheckoutContext();
18114
+ const lighterNativeDeposit = isLighterNativeFlow(
18115
+ apiKey,
18116
+ checkoutItem?.initSettings.config
18117
+ );
17863
18118
  const { directExecution } = useDirectExecutionInfoPolling({
17864
18119
  initDirectExecution: directExecutionInfo
17865
18120
  });
@@ -17872,6 +18127,7 @@ function FunCheckoutHistoryContent({
17872
18127
  directExecution,
17873
18128
  isActiveCheckout,
17874
18129
  onClose,
18130
+ dangerousCustomDelayedAutoTriggerCutoff: lighterNativeDeposit ? LIGHTER_DELAYED_AUTO_TRIGGER_CUTOFF : void 0,
17875
18131
  onAnimationComplete
17876
18132
  }
17877
18133
  );
@@ -18058,7 +18314,7 @@ import React108, {
18058
18314
  createContext as createContext14,
18059
18315
  useCallback as useCallback24,
18060
18316
  useContext as useContext14,
18061
- useMemo as useMemo26,
18317
+ useMemo as useMemo28,
18062
18318
  useState as useState35
18063
18319
  } from "react";
18064
18320
  var ActivityTraversalContext = createContext14({
@@ -18101,7 +18357,7 @@ var ActivityTraversalProvider = ({
18101
18357
  setSelectedPurchaseInitView(void 0);
18102
18358
  setReturnView(void 0);
18103
18359
  }, []);
18104
- const contextValue = useMemo26(
18360
+ const contextValue = useMemo28(
18105
18361
  () => ({
18106
18362
  selectedPurchaseId,
18107
18363
  selectedPurchaseInitView,
@@ -18130,12 +18386,12 @@ import React217, { useCallback as useCallback46, useState as useState69 } from "
18130
18386
 
18131
18387
  // src/components/FunCheckoutModalHeightAnimationWrapper/FunCheckoutModalHeightAnimationWrapper.tsx
18132
18388
  import { motion as motion15 } from "motion/react";
18133
- import React204, { useEffect as useEffect51, useRef as useRef27, useState as useState66 } from "react";
18389
+ import React204, { useEffect as useEffect51, useRef as useRef28, useState as useState66 } from "react";
18134
18390
 
18135
18391
  // src/modals/CheckoutModal/stepTransition.ts
18136
18392
  import {
18137
18393
  useCallback as useCallback44,
18138
- useRef as useRef26,
18394
+ useRef as useRef27,
18139
18395
  useState as useState65
18140
18396
  } from "react";
18141
18397
 
@@ -18206,11 +18462,11 @@ function useAnimatedNavigation(callback) {
18206
18462
  }
18207
18463
 
18208
18464
  // src/hooks/useCheckoutQuoteNotification.ts
18209
- import { useMemo as useMemo27 } from "react";
18465
+ import { useMemo as useMemo29 } from "react";
18210
18466
  function useCheckoutQuoteNotification() {
18211
18467
  const { clearCheckoutQuoteMessages } = useQuoteContext();
18212
18468
  const { quoteErrorMessage, quoteStepMessage } = useQuoteContext();
18213
- const quoteNotification = useMemo27(() => {
18469
+ const quoteNotification = useMemo29(() => {
18214
18470
  if (quoteErrorMessage !== "") {
18215
18471
  return {
18216
18472
  messageType: "error",
@@ -19648,7 +19904,7 @@ import {
19648
19904
  DirectExecutionType as DirectExecutionType2,
19649
19905
  RelayExecutionStatus as RelayExecutionStatus3
19650
19906
  } from "@funkit/api-base";
19651
- import React130, { useCallback as useCallback27, useEffect as useEffect36, useMemo as useMemo28, useState as useState39 } from "react";
19907
+ import React130, { useCallback as useCallback27, useEffect as useEffect36, useMemo as useMemo30, useState as useState39 } from "react";
19652
19908
  var overrideAssetsData = (de, checkoutItem) => {
19653
19909
  return {
19654
19910
  ...de,
@@ -19723,7 +19979,7 @@ var BrokerageSuccess = ({
19723
19979
  }) => {
19724
19980
  const { t } = useFunkitTranslation();
19725
19981
  const [startTime] = useState39(() => Date.now());
19726
- const filterFunc = useMemo28(() => {
19982
+ const filterFunc = useMemo30(() => {
19727
19983
  return (execution) => execution.createdTimeMs > startTime && execution.listenerInfo?.status === RelayExecutionStatus3.SUCCESS;
19728
19984
  }, [startTime]);
19729
19985
  const { data: directExecutions } = useRecentDirectExecutions({
@@ -19743,7 +19999,7 @@ var BrokerageSuccess = ({
19743
19999
  setDirectExecution(getFakeDirectExecution(checkoutItem, walletAddress));
19744
20000
  }
19745
20001
  }, [directExecution, checkoutItem, setCheckoutProgress]);
19746
- const latestDirectExecution = useMemo28(() => {
20002
+ const latestDirectExecution = useMemo30(() => {
19747
20003
  return directExecutions?.[0];
19748
20004
  }, [directExecutions?.[0]?.txHash]);
19749
20005
  useEffect36(() => {
@@ -19798,7 +20054,7 @@ var BrokerageSuccess = ({
19798
20054
  // string
19799
20055
  directExecution?.txHash
19800
20056
  ]);
19801
- const customTextConfigSteps = useMemo28(() => {
20057
+ const customTextConfigSteps = useMemo30(() => {
19802
20058
  if (exchangeType) {
19803
20059
  return {
19804
20060
  ...getDefaultTextConfigSteps(t),
@@ -20855,7 +21111,7 @@ function CheckoutHelp({
20855
21111
  }
20856
21112
 
20857
21113
  // src/modals/CheckoutModal/ConfirmationStep/ConfirmationStep.tsx
20858
- import React156, { useEffect as useEffect43, useMemo as useMemo34, useState as useState51 } from "react";
21114
+ import React156, { useEffect as useEffect43, useMemo as useMemo36, useState as useState51 } from "react";
20859
21115
  import { createPortal as createPortal14 } from "react-dom";
20860
21116
 
20861
21117
  // src/providers/UserPresenceContext.tsx
@@ -20901,9 +21157,9 @@ import React145 from "react";
20901
21157
  import React144, { useState as useState44 } from "react";
20902
21158
 
20903
21159
  // src/hooks/useInterval.ts
20904
- import { useEffect as useEffect39, useRef as useRef21 } from "react";
21160
+ import { useEffect as useEffect39, useRef as useRef22 } from "react";
20905
21161
  function useInterval(callback, delay) {
20906
- const savedCallback = useRef21(callback);
21162
+ const savedCallback = useRef22(callback);
20907
21163
  useIsomorphicLayoutEffect(() => {
20908
21164
  savedCallback.current = callback;
20909
21165
  }, [callback]);
@@ -20961,7 +21217,7 @@ import {
20961
21217
  } from "@funkit/utils";
20962
21218
  import NumberFlow from "@number-flow/react";
20963
21219
  import { motion as motion9 } from "motion/react";
20964
- import React147, { useMemo as useMemo30 } from "react";
21220
+ import React147, { useMemo as useMemo32 } from "react";
20965
21221
 
20966
21222
  // src/consts/design.ts
20967
21223
  var mapFontLineHeightToNumberFlowHeight = {
@@ -20974,7 +21230,7 @@ var defaultTransition = "all 150ms cubic-bezier(0.3, 0, 0.06, 1)";
20974
21230
  // src/components/FunAssetAvatar/FunAssetAvatar.tsx
20975
21231
  import { isNotNullish as isNotNullish4 } from "@funkit/utils";
20976
21232
  import clsx20 from "clsx";
20977
- import React146, { useMemo as useMemo29 } from "react";
21233
+ import React146, { useMemo as useMemo31 } from "react";
20978
21234
 
20979
21235
  // src/components/FunAssetAvatar/FunAssetAvatar.css.ts
20980
21236
  var chainContainerStyle = "uwrdc22 _1rsrm2f19 _1rsrm2fa _1rsrm2f4 _1rsrm2f4o";
@@ -20995,7 +21251,7 @@ function FunAssetAvatar({
20995
21251
  isChainIconHidden = false
20996
21252
  }) {
20997
21253
  const chainMetadata = chainMetadataById[Number.parseInt((chainId || "").toString())] || null;
20998
- const finalAssetSrc = useMemo29(() => {
21254
+ const finalAssetSrc = useMemo31(() => {
20999
21255
  const normalizedTicker = assetTicker?.toUpperCase() || "";
21000
21256
  const defaultSrc = ASSET_LOGO_SRCS[normalizedTicker];
21001
21257
  if (prioritizeDefaults) {
@@ -21114,7 +21370,7 @@ function PaymentAmountSummary({
21114
21370
  const showYouWillPaySummary = !isExactSameToken && !isCardPayment || hasStakingToken;
21115
21371
  const feeBreakdown = quote?.baseQuote.metadata?.feeBreakdown;
21116
21372
  const swapImpactPct = checkoutConfig?.generateActionsParams ? feeBreakdown?.swapImpact + feeBreakdown?.appFeePercent || 0 : 0;
21117
- const receiveTokenUsdAmount = useMemo30(() => {
21373
+ const receiveTokenUsdAmount = useMemo32(() => {
21118
21374
  if (!quote) {
21119
21375
  return void 0;
21120
21376
  }
@@ -21246,24 +21502,16 @@ function useCheckoutItemDisplay({
21246
21502
  });
21247
21503
  }
21248
21504
 
21249
- // src/utils/customer.ts
21250
- function isKatanaEarnFlow({
21251
- apiKey,
21252
- checkoutConfig
21253
- }) {
21254
- return isKatanaCustomer(apiKey) && !!checkoutConfig && isCheckoutPostActionRequired(checkoutConfig);
21255
- }
21256
-
21257
21505
  // src/modals/CheckoutModal/ConfirmationStep/CheckoutPrimaryInfo.tsx
21258
21506
  import React150 from "react";
21259
21507
 
21260
21508
  // src/components/AnimatedDollarValue/AnimatedDollarValue.tsx
21261
21509
  import NumberFlow2 from "@number-flow/react";
21262
- import React148, { forwardRef as forwardRef4, useMemo as useMemo31 } from "react";
21510
+ import React148, { forwardRef as forwardRef4, useMemo as useMemo33 } from "react";
21263
21511
  var AnimatedDollarValue = forwardRef4((props, ref) => {
21264
21512
  const { value, dynamicMinFractionDigits, ...restProps } = props;
21265
21513
  const minimumFractionDigits = typeof value === "number" && !Number.isInteger(value) || !dynamicMinFractionDigits ? 2 : 0;
21266
- const formatOptions = useMemo31(
21514
+ const formatOptions = useMemo33(
21267
21515
  () => ({
21268
21516
  style: "currency",
21269
21517
  currency: "USD",
@@ -21412,7 +21660,7 @@ function CheckoutPrimaryInfo({
21412
21660
  }
21413
21661
 
21414
21662
  // src/modals/CheckoutModal/ConfirmationStep/DisclaimerText.tsx
21415
- import React151, { useMemo as useMemo32 } from "react";
21663
+ import React151, { useMemo as useMemo34 } from "react";
21416
21664
  import { Trans as Trans8 } from "react-i18next";
21417
21665
  var FunLinkButtonComponent = ({
21418
21666
  children,
@@ -21487,7 +21735,7 @@ var DisclaimerText = ({
21487
21735
  };
21488
21736
  function useCardDisclaimer(checkoutItem, finalConvertedAssetName) {
21489
21737
  const { t } = useFunkitTranslation();
21490
- const cardDisclaimer = useMemo32(() => {
21738
+ const cardDisclaimer = useMemo34(() => {
21491
21739
  if (!checkoutItem || !finalConvertedAssetName) {
21492
21740
  return null;
21493
21741
  }
@@ -21694,14 +21942,14 @@ import { useAccount as useAccount6, useSendTransaction, useWriteContract } from
21694
21942
 
21695
21943
  // src/utils/isMainnetUsdt.ts
21696
21944
  import { isTokenEquivalent as isTokenEquivalent3 } from "@funkit/utils";
21697
- import { mainnet as mainnet7 } from "viem/chains";
21945
+ import { mainnet as mainnet9 } from "viem/chains";
21698
21946
  var USDT_MAINNET_ADDRESS = "0xdAC17F958D2ee523a2206206994597C13D831ec7";
21699
21947
  function isMainnetUsdt(chainId, address) {
21700
21948
  return isTokenEquivalent3({
21701
21949
  firstTokenAddress: address,
21702
21950
  firstTokenChainId: chainId.toString(),
21703
21951
  secondTokenAddress: USDT_MAINNET_ADDRESS,
21704
- secondTokenChainId: mainnet7.id.toString()
21952
+ secondTokenChainId: mainnet9.id.toString()
21705
21953
  });
21706
21954
  }
21707
21955
 
@@ -21974,7 +22222,7 @@ function usePostCheckout({
21974
22222
  }
21975
22223
 
21976
22224
  // src/modals/CheckoutModal/ConfirmationStep/useQuoteRefresh.ts
21977
- import { useCallback as useCallback34, useEffect as useEffect42, useMemo as useMemo33, useRef as useRef22, useState as useState50 } from "react";
22225
+ import { useCallback as useCallback34, useEffect as useEffect42, useMemo as useMemo35, useRef as useRef23, useState as useState50 } from "react";
21978
22226
 
21979
22227
  // src/hooks/useCountdown.tsx
21980
22228
  import React155 from "react";
@@ -22172,8 +22420,8 @@ function useQuoteRefresh({
22172
22420
  refreshIntervalSeconds
22173
22421
  }) {
22174
22422
  const { setCheckoutQuote, isQuoting, quoteErrorMessage, quoteStepMessage } = useQuoteContext();
22175
- const preloadedQuoteRef = useRef22();
22176
- const quoteCallbackRef = useRef22();
22423
+ const preloadedQuoteRef = useRef23();
22424
+ const quoteCallbackRef = useRef23();
22177
22425
  const [isPendingRefresh, setIsPendingRefresh] = useState50(false);
22178
22426
  const {
22179
22427
  isSourceAssetConfirming,
@@ -22237,7 +22485,7 @@ function useQuoteRefresh({
22237
22485
  },
22238
22486
  [isOnHold, restartCountdown, setCheckoutQuote, triggerAssetConfirm]
22239
22487
  );
22240
- const quoteError = useMemo33(() => {
22488
+ const quoteError = useMemo35(() => {
22241
22489
  if (quoteErrorMessage && !isQuoting) {
22242
22490
  return {
22243
22491
  message: quoteErrorMessage,
@@ -22375,7 +22623,7 @@ function ConfirmationStep({
22375
22623
  })
22376
22624
  );
22377
22625
  const error = confirmationError ?? postCheckoutError ?? quoteError;
22378
- const stepMessage = useMemo34(() => {
22626
+ const stepMessage = useMemo36(() => {
22379
22627
  if (initialQuoteStep) {
22380
22628
  return initialQuoteStep;
22381
22629
  }
@@ -22433,7 +22681,7 @@ function ConfirmationStep({
22433
22681
  const isQuoteLoading = isInitialQuoting || isQuoting;
22434
22682
  const isStepLoading = isInitialQuoting || isContinuing || isRefreshing;
22435
22683
  const customRecipient = checkoutItem?.initSettings.config.customRecipient;
22436
- const showKatanaBridgeAlert = useMemo34(() => {
22684
+ const showKatanaBridgeAlert = useMemo36(() => {
22437
22685
  const relayQuoteMetadata = latestQuote?.baseQuote?.metadata;
22438
22686
  if (!relayQuoteMetadata) {
22439
22687
  return false;
@@ -22664,7 +22912,7 @@ import React173, { useEffect as useEffect45 } from "react";
22664
22912
 
22665
22913
  // src/hooks/queries/useMeldCurrencies.ts
22666
22914
  import { getMeldSupportedFiat } from "@funkit/api-base";
22667
- import { useQuery as useQuery15 } from "@tanstack/react-query";
22915
+ import { useQuery as useQuery16 } from "@tanstack/react-query";
22668
22916
  var getPriority = (currencyCode) => {
22669
22917
  if (currencyCode === "USD") {
22670
22918
  return 0;
@@ -22676,7 +22924,7 @@ var getPriority = (currencyCode) => {
22676
22924
  };
22677
22925
  var useMeldCurrencies = (isEnabled = true) => {
22678
22926
  const { apiKey } = useFunkitConfig();
22679
- const query = useQuery15({
22927
+ const query = useQuery16({
22680
22928
  queryKey: ["meld", "currencies"],
22681
22929
  queryFn: async () => {
22682
22930
  if (!apiKey) {
@@ -22702,7 +22950,7 @@ var useMeldCurrencies = (isEnabled = true) => {
22702
22950
 
22703
22951
  // src/hooks/queries/useMeldDefaultCurrency.ts
22704
22952
  import { getMeldDefaultFiat } from "@funkit/api-base";
22705
- import { useQuery as useQuery16 } from "@tanstack/react-query";
22953
+ import { useQuery as useQuery17 } from "@tanstack/react-query";
22706
22954
 
22707
22955
  // src/hooks/queries/useMeldCryptoCurrencyCode.ts
22708
22956
  import { FlagKey as FlagKey15 } from "@funkit/utils";
@@ -22748,7 +22996,7 @@ var useMeldDefaultCurrency = (paymentMethod) => {
22748
22996
  const { apiKey } = useFunkitConfig();
22749
22997
  const { userIpInfo } = useFunkitUserIp();
22750
22998
  const enableMeld = useIsMeldEnabled();
22751
- const query = useQuery16({
22999
+ const query = useQuery17({
22752
23000
  queryKey: ["meld", "defaultCurrency", paymentMethod],
22753
23001
  queryFn: async () => {
22754
23002
  if (!apiKey) {
@@ -22773,7 +23021,7 @@ var useMeldDefaultCurrency = (paymentMethod) => {
22773
23021
  // src/hooks/queries/useMeldLimits.ts
22774
23022
  import { getMeldFiatLimits } from "@funkit/api-base";
22775
23023
  import { formatCurrencyAndStringify as formatCurrencyAndStringify6 } from "@funkit/utils";
22776
- import { useQuery as useQuery18 } from "@tanstack/react-query";
23024
+ import { useQuery as useQuery19 } from "@tanstack/react-query";
22777
23025
 
22778
23026
  // src/consts/meld.ts
22779
23027
  var MELD_MIN_LIMIT_BUFFER = 5;
@@ -22805,9 +23053,9 @@ var getExchangeRate = (currency, currencyExchangeRates, bipsMarkup = DEFAULT_BIP
22805
23053
 
22806
23054
  // src/hooks/useFiatExchangeRates.ts
22807
23055
  import { getFiatExchangeRates } from "@funkit/api-base";
22808
- import { useQuery as useQuery17 } from "@tanstack/react-query";
23056
+ import { useQuery as useQuery18 } from "@tanstack/react-query";
22809
23057
  function useFiatExchangeRates(enabled = true) {
22810
- const { data, isLoading, error } = useQuery17({
23058
+ const { data, isLoading, error } = useQuery18({
22811
23059
  queryKey: ["fiatExchangeRates"],
22812
23060
  queryFn: () => getFiatExchangeRates(),
22813
23061
  refetchOnMount: false,
@@ -22852,7 +23100,7 @@ var useMeldLimits = (isEnabled = true) => {
22852
23100
  const { userIpInfo } = useFunkitUserIp();
22853
23101
  const cryptoCurrency = useMeldCryptoCurrencyCode();
22854
23102
  const countryCode = userIpInfo?.alpha2;
22855
- const query = useQuery18({
23103
+ const query = useQuery19({
22856
23104
  queryKey: ["meld", "limits", countryCode, cryptoCurrency],
22857
23105
  queryFn: async () => {
22858
23106
  if (!apiKey || !countryCode) {
@@ -22935,23 +23183,23 @@ var useMeldLimitError = (amount, fiatCurrency) => {
22935
23183
 
22936
23184
  // src/modals/CheckoutModal/InputAmount/InputAmountLoaded.tsx
22937
23185
  import {
22938
- FlagKey as FlagKey18,
23186
+ FlagKey as FlagKey17,
22939
23187
  formatCryptoAndStringify as formatCryptoAndStringify5,
22940
23188
  formatCurrencyAndStringify as formatCurrencyAndStringify9,
22941
23189
  isTokenEquivalent as isTokenEquivalent4,
22942
23190
  round as round2
22943
23191
  } from "@funkit/utils";
22944
23192
  import { motion as motion11 } from "motion/react";
22945
- import React171, { useMemo as useMemo36 } from "react";
23193
+ import React171, { useMemo as useMemo38 } from "react";
22946
23194
 
22947
23195
  // src/components/AnimatedWidthWrapper/AnimatedWidthWrapper.tsx
22948
23196
  import { motion as motion10 } from "motion/react";
22949
23197
  import React159 from "react";
22950
- import { useEffect as useEffect44, useRef as useRef23, useState as useState52 } from "react";
23198
+ import { useEffect as useEffect44, useRef as useRef24, useState as useState52 } from "react";
22951
23199
  function AnimatedWidthWrapper({ children }) {
22952
- const containerRef = useRef23(null);
22953
- const animationFrameRef = useRef23(null);
22954
- const resizeObserverRef = useRef23(null);
23200
+ const containerRef = useRef24(null);
23201
+ const animationFrameRef = useRef24(null);
23202
+ const resizeObserverRef = useRef24(null);
22955
23203
  const [width, setWidth] = useState52("auto");
22956
23204
  useEffect44(() => {
22957
23205
  if (containerRef.current) {
@@ -23988,7 +24236,7 @@ function InputAmountLayout({
23988
24236
  }
23989
24237
 
23990
24238
  // src/modals/CheckoutModal/InputAmount/QuickOptions.tsx
23991
- import { FlagKey as FlagKey17, clamp as clamp2, formatCurrencyAndStringify as formatCurrencyAndStringify7 } from "@funkit/utils";
24239
+ import { clamp as clamp2, formatCurrencyAndStringify as formatCurrencyAndStringify7 } from "@funkit/utils";
23992
24240
  import React167 from "react";
23993
24241
  var USD_AMOUNT_OPTIONS_PCT = [25, 50, 75, 100];
23994
24242
  function deduplicateArray(arr) {
@@ -23996,10 +24244,7 @@ function deduplicateArray(arr) {
23996
24244
  }
23997
24245
  function useFiatAmountOptions(currency) {
23998
24246
  const isMeldEnabled = useIsMeldEnabled();
23999
- const currencyQuickOptionStr = useFlag(FlagKey17.MeldQuickOptions);
24000
- const currencyQuickOption = safeJSONParse(
24001
- currencyQuickOptionStr
24002
- );
24247
+ const currencyQuickOption = useDynamicConfig("meldquickoptions");
24003
24248
  const { data: meldLimit, isPending } = useMeldLimit(currency);
24004
24249
  if (isPending || !meldLimit || !isMeldEnabled) {
24005
24250
  return [];
@@ -24007,9 +24252,7 @@ function useFiatAmountOptions(currency) {
24007
24252
  const minimumAmount = meldLimit.minimumAmount;
24008
24253
  const maximumAmount = meldLimit.maximumAmount;
24009
24254
  return deduplicateArray(
24010
- currencyQuickOption?.[currency ?? "USD"]?.map(
24011
- (val) => clamp2(val, minimumAmount, maximumAmount)
24012
- ) || []
24255
+ currencyQuickOption?.[currency ?? "USD"]?.map((val) => clamp2(val, minimumAmount, maximumAmount)) || []
24013
24256
  );
24014
24257
  }
24015
24258
  var QuickOptions = ({
@@ -24058,9 +24301,9 @@ var QuickOptions = ({
24058
24301
  // src/modals/CheckoutModal/InputAmount/useAmountInput.ts
24059
24302
  import {
24060
24303
  useCallback as useCallback36,
24061
- useMemo as useMemo35,
24304
+ useMemo as useMemo37,
24062
24305
  useReducer as useReducer3,
24063
- useRef as useRef24,
24306
+ useRef as useRef25,
24064
24307
  useState as useState54
24065
24308
  } from "react";
24066
24309
 
@@ -24373,11 +24616,11 @@ function useAmountInput(options) {
24373
24616
  quickOptions,
24374
24617
  paymentMethodInfo
24375
24618
  } = options;
24376
- const derivedState = useMemo35(
24619
+ const derivedState = useMemo37(
24377
24620
  () => getDerivedState(state, checkoutConfig.targetAssetTicker),
24378
24621
  [state, checkoutConfig]
24379
24622
  );
24380
- const inputRef = useRef24(null);
24623
+ const inputRef = useRef25(null);
24381
24624
  const { inputValue, locale } = state;
24382
24625
  const { inputDecimals, inputAffix, placeholder } = derivedState;
24383
24626
  const { measureText } = useTextMeasurer(inputRef);
@@ -24934,8 +25177,9 @@ function createMoonpayMeldQuote(quote) {
24934
25177
  };
24935
25178
  }
24936
25179
  function withMoonpayMeldQuote(quotes) {
24937
- if (!quotes) {
24938
- return quotes;
25180
+ if (!quotes || quotes.length === 0) {
25181
+ logger.error("withMoonpayMeldQuote:error", "No quotes could be found.");
25182
+ return void 0;
24939
25183
  }
24940
25184
  const topQuote = quotes[0];
24941
25185
  const moonpay = createMoonpayMeldQuote(topQuote);
@@ -24978,7 +25222,7 @@ var useMeldLink = (sourceAmount, sourceCurrencyCode = "USD") => {
24978
25222
 
24979
25223
  // src/modals/CheckoutModal/MeldQuotes/useMeldQuotes.tsx
24980
25224
  import { getMeldQuotes } from "@funkit/api-base";
24981
- import { useQuery as useQuery19 } from "@tanstack/react-query";
25225
+ import { useQuery as useQuery20 } from "@tanstack/react-query";
24982
25226
  import { useDebounce as useDebounce2 } from "use-debounce";
24983
25227
  var DEBOUNCE_DELAY = 500;
24984
25228
  var COUNTDOWN_INTERVAL_SEC = 60;
@@ -24991,7 +25235,7 @@ var useMeldQuotes = (sourceAmount, fiatCurrency, meldEnabled = true) => {
24991
25235
  const destinationCurrencyCode = useMeldCryptoCurrencyCode();
24992
25236
  const isPolymarket = isPolymarketCustomer(apiKey);
24993
25237
  const sourceCurrencyCode = fiatCurrency || "USD";
24994
- const query = useQuery19({
25238
+ const query = useQuery20({
24995
25239
  queryKey: [
24996
25240
  "meld",
24997
25241
  "quotes",
@@ -25051,7 +25295,7 @@ import {
25051
25295
  katanaChain
25052
25296
  } from "@funkit/chains";
25053
25297
  import { useCallback as useCallback37, useState as useState55 } from "react";
25054
- import { mainnet as mainnet8, mantle, zksync as zksync2 } from "viem/chains";
25298
+ import { mainnet as mainnet10, mantle, zksync as zksync2 } from "viem/chains";
25055
25299
  import { getAssetErc20ByChainAndSymbol as getAssetErc20ByChainAndSymbol2 } from "@funkit/api-base";
25056
25300
  var pickSourceAssetForCard = async (checkoutItem, userIpInfo, apiKey) => {
25057
25301
  if (!checkoutItem?.initSettings.config.targetChain) {
@@ -25085,7 +25329,7 @@ var pickSourceAssetForCard = async (checkoutItem, userIpInfo, apiKey) => {
25085
25329
  sourceTokenAddress = NATIVE_TOKEN;
25086
25330
  sourceTokenChainId = moonpayChainId;
25087
25331
  } else {
25088
- sourceTokenChainId = isNyOrTxOrVi ? mainnet8.id.toString() : moonpayChainId;
25332
+ sourceTokenChainId = isNyOrTxOrVi ? mainnet10.id.toString() : moonpayChainId;
25089
25333
  if (isTargetAssetEthOrWeth) {
25090
25334
  sourceTokenTicker = "ETH" /* ETH */;
25091
25335
  sourceTokenAddress = NATIVE_TOKEN;
@@ -25299,7 +25543,7 @@ function InputAmountLoaded({
25299
25543
  textCustomizations
25300
25544
  }) {
25301
25545
  const { t } = useFunkitTranslation();
25302
- const maxCheckoutUsdString = useFlag(FlagKey18.MaxCheckoutUsd);
25546
+ const maxCheckoutUsdString = useFlag(FlagKey17.MaxCheckoutUsd);
25303
25547
  const isSourceNavWidgetEnabled = modalState.startingStep === "select_asset" /* SELECT_ASSET */;
25304
25548
  const paymentMethodInfo = modalState.paymentMethodInfo;
25305
25549
  const { quote: manuallySelectedQuote } = modalState;
@@ -25358,7 +25602,7 @@ function InputAmountLoaded({
25358
25602
  onNext,
25359
25603
  onClose
25360
25604
  });
25361
- const error = useMemo36(() => {
25605
+ const error = useMemo38(() => {
25362
25606
  if (isCardCheckout) {
25363
25607
  const meldError = getMeldError();
25364
25608
  if (meldError) {
@@ -25760,7 +26004,7 @@ function YouPayYouReceiveWrapper({
25760
26004
 
25761
26005
  // src/modals/CheckoutModal/InputAmount/InputAmountLoading.tsx
25762
26006
  import { formatCryptoAndStringify as formatCryptoAndStringify6 } from "@funkit/utils";
25763
- import React172, { useMemo as useMemo37 } from "react";
26007
+ import React172, { useMemo as useMemo39 } from "react";
25764
26008
  function InputAmountLoading({
25765
26009
  modalState,
25766
26010
  sourceHoldingError,
@@ -25773,7 +26017,7 @@ function InputAmountLoading({
25773
26017
  const isSourceNavWidgetEnabled = modalState.startingStep === "select_asset" /* SELECT_ASSET */;
25774
26018
  const targetAssetAmount = checkoutItem?.initSettings.config.targetAssetAmount;
25775
26019
  const targetAssetTicker = checkoutItem?.initSettings.config.targetAssetTicker;
25776
- const error = useMemo37(() => {
26020
+ const error = useMemo39(() => {
25777
26021
  if (sourceHoldingError) {
25778
26022
  return {
25779
26023
  message: /* @__PURE__ */ React172.createElement("div", null, t("inputAmount.unableToRetrieveBalance"), " "),
@@ -25853,7 +26097,7 @@ function InputAmountLoading({
25853
26097
  }
25854
26098
 
25855
26099
  // src/modals/CheckoutModal/InputAmount/useAvailableBalanceForCheckout.ts
25856
- import { useMemo as useMemo38 } from "react";
26100
+ import { useMemo as useMemo40 } from "react";
25857
26101
  function useAvailableBalanceForCheckout(paymentMethodInfo, targetChainId, assetChainId, assetSymbol) {
25858
26102
  const paymentMethod = paymentMethodInfo.paymentMethod;
25859
26103
  const isBrokerage = paymentMethod === "brokerage" /* BROKERAGE */;
@@ -25868,7 +26112,7 @@ function useAvailableBalanceForCheckout(paymentMethodInfo, targetChainId, assetC
25868
26112
  ["virtual_bank" /* VIRTUAL_BANK */]: null
25869
26113
  }[paymentMethod];
25870
26114
  const isLoading = isBrokerage ? isLoadingBrokerageBalance : isLoadingWalletAssetHoldings;
25871
- const holdingItem = useMemo38(() => {
26115
+ const holdingItem = useMemo40(() => {
25872
26116
  if (!assetSymbol || !holdings) {
25873
26117
  return;
25874
26118
  }
@@ -25995,7 +26239,7 @@ function InputAmount(props) {
25995
26239
  import React176, { useEffect as useEffect46 } from "react";
25996
26240
 
25997
26241
  // src/hooks/usePaymentSources.ts
25998
- import { FlagKey as FlagKey19, isNotNullish as isNotNullish5 } from "@funkit/utils";
26242
+ import { FlagKey as FlagKey18, isNotNullish as isNotNullish5 } from "@funkit/utils";
25999
26243
  function usePaymentMethodEnablement({
26000
26244
  checkoutConfig
26001
26245
  }) {
@@ -26003,7 +26247,7 @@ function usePaymentMethodEnablement({
26003
26247
  const isTokenTransferFlagEnabled = useIsQRCodeTransferEnabled();
26004
26248
  const isFiatFlagEnabled = useFiatEnabled();
26005
26249
  const isMeldFlagEnabled = useIsMeldEnabled();
26006
- const isBrokerageFlagEnabled = useFlag(FlagKey19.EnableBluvoBrokerage);
26250
+ const isBrokerageFlagEnabled = useFlag(FlagKey18.EnableBluvoBrokerage);
26007
26251
  const isKatanaEarnFlowAction = isKatanaEarnFlow({ apiKey, checkoutConfig });
26008
26252
  const isFiatEnabled = isFiatFlagEnabled && !isKatanaEarnFlowAction;
26009
26253
  const isTokenTransferEnabled = isTokenTransferFlagEnabled && !isKatanaEarnFlowAction;
@@ -26400,7 +26644,7 @@ function LoadingAccount({
26400
26644
 
26401
26645
  // src/modals/CheckoutModal/MeldCurrencySelect/MeldCurrencySelect.tsx
26402
26646
  import clsx22 from "clsx";
26403
- import React177, { useMemo as useMemo39, useState as useState56 } from "react";
26647
+ import React177, { useMemo as useMemo41, useState as useState56 } from "react";
26404
26648
 
26405
26649
  // src/modals/CheckoutModal/MeldCurrencySelect/currenciesWithMultipleCountries.ts
26406
26650
  var currenciesWithMultipleCountries = {
@@ -26460,7 +26704,7 @@ function MeldCurrencySelect({
26460
26704
  const [selectedCurrency, setSelectedCurrency] = useState56(
26461
26705
  defaultCurrency
26462
26706
  );
26463
- const filteredOptions = useMemo39(() => {
26707
+ const filteredOptions = useMemo41(() => {
26464
26708
  const newOptions = data?.filter(
26465
26709
  ({ name, currencyCode }) => currencyCode.toLowerCase().includes(query.toLowerCase()) || name.toLowerCase().includes(query.toLowerCase())
26466
26710
  ) ?? [];
@@ -26678,9 +26922,9 @@ import {
26678
26922
  hyperEvmChain as hyperEvmChain5
26679
26923
  } from "@funkit/chains";
26680
26924
  import { formatCurrencyAndStringify as formatCurrencyAndStringify11, isTokenEquivalent as isTokenEquivalent5 } from "@funkit/utils";
26681
- import React182, { useEffect as useEffect47, useMemo as useMemo41, useState as useState57 } from "react";
26925
+ import React182, { useEffect as useEffect47, useMemo as useMemo44, useState as useState57 } from "react";
26682
26926
  import { createPortal as createPortal18 } from "react-dom";
26683
- import { mainnet as mainnet9 } from "viem/chains";
26927
+ import { mainnet as mainnet11 } from "viem/chains";
26684
26928
 
26685
26929
  // src/components/Dropdown/ReceiveTokenDropdown.tsx
26686
26930
  import React180 from "react";
@@ -26776,7 +27020,7 @@ var ReceiveTokenDropdown = ({
26776
27020
  // src/components/NewTokenDepositAlert/NewTokenDepositAlert.tsx
26777
27021
  import React181 from "react";
26778
27022
  import { Trans as Trans11 } from "react-i18next";
26779
- import { FlagKey as FlagKey20 } from "@funkit/utils";
27023
+ import { FlagKey as FlagKey19 } from "@funkit/utils";
26780
27024
  var FunLinkButtonComponent2 = ({
26781
27025
  children,
26782
27026
  onClick,
@@ -26796,7 +27040,7 @@ var NewTokenDepositAlert = ({
26796
27040
  onClick
26797
27041
  }) => {
26798
27042
  const { t } = useFunkitTranslation();
26799
- const alertJson = useFlag(FlagKey20.NewTokenAssetSelectionBanner);
27043
+ const alertJson = useFlag(FlagKey19.NewTokenAssetSelectionBanner);
26800
27044
  const alertData = useSafeJSONParse(alertJson);
26801
27045
  const isTokenTransferEnabled = useIsQRCodeTransferEnabled();
26802
27046
  if (!alertData || !isTokenTransferEnabled) {
@@ -26833,13 +27077,13 @@ var NewTokenDepositAlert = ({
26833
27077
 
26834
27078
  // src/hooks/useAllowedAssets.ts
26835
27079
  import { getAllowedAssets } from "@funkit/api-base";
26836
- import { useQuery as useQuery20 } from "@tanstack/react-query";
26837
- import { useCallback as useCallback39, useMemo as useMemo40 } from "react";
27080
+ import { useQuery as useQuery21 } from "@tanstack/react-query";
27081
+ import { useCallback as useCallback39, useMemo as useMemo42 } from "react";
26838
27082
  function useAllowedAssets() {
26839
27083
  const { apiKey } = useFunkitConfig();
26840
27084
  const { checkoutItem } = useCheckoutContext();
26841
27085
  const isRelayEnabled = useSourceTokenRelayEnabled();
26842
- const { data: allowedAssets, isLoading } = useQuery20({
27086
+ const { data: allowedAssets, isLoading } = useQuery21({
26843
27087
  queryKey: ["getAllowedAssets", apiKey],
26844
27088
  queryFn: () => getAllowedAssets({ apiKey, logger }),
26845
27089
  refetchOnMount: false,
@@ -26848,7 +27092,7 @@ function useAllowedAssets() {
26848
27092
  staleTime: 5 * 60 * 1e3,
26849
27093
  gcTime: Number.POSITIVE_INFINITY
26850
27094
  });
26851
- const tokens = useMemo40(() => {
27095
+ const tokens = useMemo42(() => {
26852
27096
  if (!allowedAssets) {
26853
27097
  return {};
26854
27098
  }
@@ -26881,6 +27125,32 @@ function useAllowedAssets() {
26881
27125
  };
26882
27126
  }
26883
27127
 
27128
+ // src/hooks/useDynamicRoutes.ts
27129
+ import { useMemo as useMemo43 } from "react";
27130
+ import { DYNAMIC_ROUTES, initDynamicRouting } from "@funkit/fun-relay";
27131
+ var toMutable = (obj) => {
27132
+ return obj;
27133
+ };
27134
+ var useDynamicRoutes = (_dynamicRoutingId) => {
27135
+ const dynamicRoutingConfig = useDynamicConfig("dynamicrouting");
27136
+ const { checkoutItem } = useCheckoutContext();
27137
+ const config = checkoutItem?.initSettings.config;
27138
+ const dynamicRoutingId = _dynamicRoutingId || config?.dynamicRoutingId;
27139
+ const findPath = useMemo43(() => {
27140
+ if (!dynamicRoutingId) {
27141
+ return () => null;
27142
+ }
27143
+ const indexedDynamicRoutes = initDynamicRouting(
27144
+ DYNAMIC_ROUTES,
27145
+ toMutable(dynamicRoutingConfig)
27146
+ );
27147
+ return indexedDynamicRoutes[dynamicRoutingId].findPath;
27148
+ }, [dynamicRoutingId, dynamicRoutingConfig]);
27149
+ return {
27150
+ findPath
27151
+ };
27152
+ };
27153
+
26884
27154
  // src/modals/CheckoutModal/SelectAsset.tsx
26885
27155
  var ASSET_ITEM_HEIGHT = 52;
26886
27156
  var VISIBLE_ITEMS_COUNT = 5;
@@ -26928,7 +27198,8 @@ function useEnrichedAccountHoldings({
26928
27198
  const { isAllowed, isLoading } = useAllowedAssets();
26929
27199
  const { walletAddress } = useGeneralWallet();
26930
27200
  const minTransferLimits = useMinTransferLimits();
26931
- const enrichedAccountHoldings = useMemo41(() => {
27201
+ const { isLoading: isLighterLoading, lighterNativeNeeded } = useLighterNativeFlowNeeded(apiKey, checkoutConfig);
27202
+ const enrichedAccountHoldings = useMemo44(() => {
26932
27203
  if (!checkoutConfig) {
26933
27204
  return [];
26934
27205
  }
@@ -26940,7 +27211,6 @@ function useEnrichedAccountHoldings({
26940
27211
  minUsdRequired = minUsd;
26941
27212
  }
26942
27213
  const usableForCheckout = isAssetUsableToPayForCheckout({
26943
- apiKey,
26944
27214
  config: checkoutConfig,
26945
27215
  targetTokenAddress: targetAssetInfo.tokenAddress,
26946
27216
  targetChainId: targetAssetInfo.tokenChainId,
@@ -26954,12 +27224,12 @@ function useEnrichedAccountHoldings({
26954
27224
  asset.pickedChainId,
26955
27225
  asset.tokenAddress
26956
27226
  ),
27227
+ isLighterNative: !!lighterNativeNeeded,
26957
27228
  t
26958
27229
  });
26959
27230
  return { asset, usableForCheckout };
26960
27231
  });
26961
27232
  }, [
26962
- apiKey,
26963
27233
  accountHoldings,
26964
27234
  checkoutConfig,
26965
27235
  isAllowed,
@@ -26967,9 +27237,10 @@ function useEnrichedAccountHoldings({
26967
27237
  walletAddress,
26968
27238
  targetAssetInfo,
26969
27239
  minTransferLimits,
27240
+ lighterNativeNeeded,
26970
27241
  t
26971
27242
  ]);
26972
- return { enrichedAccountHoldings, isLoading };
27243
+ return { enrichedAccountHoldings, isLoading: isLoading || isLighterLoading };
26973
27244
  }
26974
27245
  function useAssetOptions({
26975
27246
  enrichedAccountHoldings,
@@ -26979,7 +27250,8 @@ function useAssetOptions({
26979
27250
  }) {
26980
27251
  const { apiKey } = useFunkitConfig();
26981
27252
  const { t } = useFunkitTranslation();
26982
- const assetOptions = useMemo41(() => {
27253
+ const { findPath } = useDynamicRoutes();
27254
+ const assetOptions = useMemo44(() => {
26983
27255
  return enrichedAccountHoldings.filter(
26984
27256
  ({ asset }) => chainId !== void 0 ? asset.pickedChainId === chainId.toString() : true
26985
27257
  ).map(({ asset, usableForCheckout }) => {
@@ -27001,7 +27273,12 @@ function useAssetOptions({
27001
27273
  badgeText = reason;
27002
27274
  } else if (!isKnown) {
27003
27275
  badgeText = t("badge.unknown");
27004
- } else if (isTreatedAsNativeToken(apiKey, asset, dynamicTargetAssetCandidates)) {
27276
+ } else if (isTreatedAsNativeToken(
27277
+ apiKey,
27278
+ asset,
27279
+ dynamicTargetAssetCandidates,
27280
+ findPath
27281
+ )) {
27005
27282
  badgeText = "Native";
27006
27283
  if (showsNativeTokensOnTop(apiKey)) {
27007
27284
  priority = 1e3;
@@ -27030,7 +27307,8 @@ function useAssetOptions({
27030
27307
  enrichedAccountHoldings,
27031
27308
  chainId,
27032
27309
  userSelectedTargetAsset,
27033
- dynamicTargetAssetCandidates
27310
+ dynamicTargetAssetCandidates,
27311
+ findPath
27034
27312
  ]);
27035
27313
  return assetOptions;
27036
27314
  }
@@ -27076,7 +27354,19 @@ function AccountSelectAsset({
27076
27354
  const { t } = useFunkitTranslation();
27077
27355
  const [selectedChainId, setSelectedChainId] = useState57();
27078
27356
  const { apiKey, textCustomizations, uiCustomizations } = useFunkitConfig();
27079
- const { checkoutItem, updateSourceAsset, updateTargetAsset } = useCheckoutContext();
27357
+ const {
27358
+ checkoutItem,
27359
+ updateSourceAsset,
27360
+ updateTargetAsset,
27361
+ applyDynamicRouting
27362
+ } = useCheckoutContext();
27363
+ const { walletAddress } = useGeneralWallet();
27364
+ const isLighter = isLighterxyzCustomer(apiKey);
27365
+ const { mainAccountIndex } = useLighterAccounts({
27366
+ address: walletAddress || "0x",
27367
+ isEnabled: isLighter && !!walletAddress && walletAddress !== "0x"
27368
+ });
27369
+ const { findPath } = useDynamicRoutes();
27080
27370
  const { setSelectedBrokerageAsset } = useFunkitBrokerageContext();
27081
27371
  const [explicitlySelectedChainTokenSymbol, setSelectedChainTokenSymbol] = useState57("");
27082
27372
  const checkoutConfig = checkoutItem?.initSettings.config;
@@ -27099,6 +27389,37 @@ function AccountSelectAsset({
27099
27389
  });
27100
27390
  const showTargetAssetSelection = isTargetAssetSelectable && uiCustomizations.selectAssetScreen.showTargetAssetSelection;
27101
27391
  const handleTargetAssetUpdate = (tokenItem) => {
27392
+ const dynamicPath = findPath({
27393
+ chainId: tokenItem.pickedChainId,
27394
+ tokenAddress: tokenItem.tokenAddress
27395
+ });
27396
+ if (dynamicPath) {
27397
+ if (!walletAddress) {
27398
+ logger.error("handleTargetAssetUpdate_missingWalletAddress", {
27399
+ tokenItem,
27400
+ dynamicPath
27401
+ });
27402
+ return;
27403
+ }
27404
+ if (!mainAccountIndex) {
27405
+ logger.error("handleTargetAssetUpdate_missingMainAccountIndex", {
27406
+ tokenItem,
27407
+ dynamicPath
27408
+ });
27409
+ }
27410
+ applyDynamicRouting({
27411
+ targetAsset: dynamicPath.path.targetAsset,
27412
+ targetChain: dynamicPath.path.targetChain,
27413
+ targetAssetTicker: dynamicPath.path.targetAssetTicker,
27414
+ iconSrc: dynamicPath.path.iconSrc,
27415
+ generateActionsParams: walletAddress ? dynamicPath.path.generateActionsParams?.(walletAddress) : void 0,
27416
+ customRecipient: dynamicPath.path.getCustomRecipient?.({
27417
+ address: walletAddress,
27418
+ l2Address: mainAccountIndex
27419
+ })
27420
+ });
27421
+ return;
27422
+ }
27102
27423
  if (!isTargetAssetSelectable) {
27103
27424
  return;
27104
27425
  }
@@ -27145,7 +27466,7 @@ function AccountSelectAsset({
27145
27466
  handleTargetAssetUpdate(tokenItem);
27146
27467
  onFinish();
27147
27468
  });
27148
- const selectedChainTokenSymbol = useMemo41(() => {
27469
+ const selectedChainTokenSymbol = useMemo44(() => {
27149
27470
  if (explicitlySelectedChainTokenSymbol) {
27150
27471
  const assetExists = assetOptions.find(
27151
27472
  ({ asset }) => asset.chainSymbolKey === explicitlySelectedChainTokenSymbol
@@ -27429,10 +27750,17 @@ function SelectAsset({
27429
27750
  }
27430
27751
  ));
27431
27752
  }
27432
- function isTreatedAsNativeToken(apiKey, asset, dynamicTargetAssetCandidates) {
27753
+ function isTreatedAsNativeToken(apiKey, asset, dynamicTargetAssetCandidates, findDynamicPath) {
27754
+ const dynamicPath = findDynamicPath({
27755
+ chainId: asset.pickedChainId,
27756
+ tokenAddress: asset.tokenAddress
27757
+ });
27758
+ if (dynamicPath) {
27759
+ return dynamicPath.badge === "NATIVE";
27760
+ }
27433
27761
  if (isEtherealCustomer(apiKey)) {
27434
27762
  if (isTokenEquivalent5({
27435
- firstTokenChainId: mainnet9.id.toString(),
27763
+ firstTokenChainId: mainnet11.id.toString(),
27436
27764
  firstTokenAddress: "0x90d2af7d622ca3141efa4d8f1f24d86e5974cc8f",
27437
27765
  // eUSDe (Ethereum)
27438
27766
  secondTokenChainId: asset.pickedChainId,
@@ -27858,7 +28186,7 @@ function SourceChange({
27858
28186
 
27859
28187
  // src/modals/CheckoutModal/TransferToken/TransferToken.tsx
27860
28188
  import { motion as motion13, useAnimationControls as useAnimationControls3 } from "motion/react";
27861
- import React196, { useRef as useRef25, useState as useState62 } from "react";
28189
+ import React196, { useRef as useRef26, useState as useState62 } from "react";
27862
28190
  import { createPortal as createPortal20 } from "react-dom";
27863
28191
 
27864
28192
  // src/components/CopyAddress/CopyInputDisplayedAddress.tsx
@@ -27975,12 +28303,12 @@ function CopyInputDisplayedAddress(props) {
27975
28303
  }
27976
28304
 
27977
28305
  // src/components/FunInfoBanner/ChainInfoBanners.tsx
27978
- import { FlagKey as FlagKey21 } from "@funkit/utils";
28306
+ import { FlagKey as FlagKey20 } from "@funkit/utils";
27979
28307
  import React186 from "react";
27980
28308
  var ChainInfoBanners = ({
27981
28309
  chainId
27982
28310
  }) => {
27983
- const chainInfoBanners = useFlag(FlagKey21.ChainInfoBanners);
28311
+ const chainInfoBanners = useFlag(FlagKey20.ChainInfoBanners);
27984
28312
  const chainInfoBannersData = useSafeJSONParse(chainInfoBanners) ?? {};
27985
28313
  try {
27986
28314
  const chainBanners = chainInfoBannersData[chainId] ?? [];
@@ -28002,7 +28330,7 @@ var ChainInfoBanners = ({
28002
28330
 
28003
28331
  // src/components/QRCode/QRCode.tsx
28004
28332
  import QRCodeUtil from "qrcode";
28005
- import React187, { useMemo as useMemo42 } from "react";
28333
+ import React187, { useMemo as useMemo45 } from "react";
28006
28334
  var generateMatrix = (value, errorCorrectionLevel) => {
28007
28335
  const { data } = QRCodeUtil.create(value, { errorCorrectionLevel }).modules;
28008
28336
  const sqrt = Math.sqrt(data.length);
@@ -28030,7 +28358,7 @@ function QRCode({
28030
28358
  }) {
28031
28359
  const { activeTheme } = useActiveTheme();
28032
28360
  const size = sizeProp - Number.parseInt(outsidePadding, 10) * 2;
28033
- const dots = useMemo42(() => {
28361
+ const dots = useMemo45(() => {
28034
28362
  const dots2 = [];
28035
28363
  const matrix = generateMatrix(uri, ecl);
28036
28364
  const cellSize = size / matrix.length;
@@ -28596,7 +28924,7 @@ function TransferToken({
28596
28924
  const { checkoutItem } = useCheckoutContext();
28597
28925
  const checkoutConfig = checkoutItem?.initSettings.config;
28598
28926
  const { transferToken } = modalState;
28599
- const disclaimerTextWrapperRef = useRef25(null);
28927
+ const disclaimerTextWrapperRef = useRef26(null);
28600
28928
  const { transferInit } = useCheckoutTransferInit();
28601
28929
  const {
28602
28930
  assets,
@@ -29264,7 +29592,7 @@ var FiatAccountDetail = {
29264
29592
 
29265
29593
  // src/modals/CheckoutModal/VirtualFiatAccount/KycIframe.tsx
29266
29594
  import { BridgeCustomerStatus as BridgeCustomerStatus7 } from "@funkit/api-base";
29267
- import React203, { useCallback as useCallback43, useEffect as useEffect50, useMemo as useMemo43, useState as useState64 } from "react";
29595
+ import React203, { useCallback as useCallback43, useEffect as useEffect50, useMemo as useMemo46, useState as useState64 } from "react";
29268
29596
  function useIframeListener(listeners) {
29269
29597
  const handleMessage = useCallback43(
29270
29598
  (event) => {
@@ -29318,7 +29646,7 @@ function KycIframe({
29318
29646
  const { clearVirtualFiatAccounts } = useClearFrogAccountsCache();
29319
29647
  const { data: kycLink, isLoading: isLinkLoading } = useLoadKycLink(modalState);
29320
29648
  const [iframeLoading, setIframeLoading] = useState64(true);
29321
- const listeners = useMemo43(
29649
+ const listeners = useMemo46(
29322
29650
  () => ({
29323
29651
  load: () => {
29324
29652
  logger.info("KYC iframe loaded");
@@ -29535,7 +29863,7 @@ function useCheckoutModalTransition(checkoutItem, onClose) {
29535
29863
  );
29536
29864
  const { animation, animate } = useAnimatedNavigation(void 0);
29537
29865
  const [stateHistory, setHistory] = useState65([]);
29538
- const prevStep = useRef26(null);
29866
+ const prevStep = useRef27(null);
29539
29867
  const hasHistoryEntry = stateHistory.length > 1;
29540
29868
  const onNext = useCallback44(
29541
29869
  (payload) => {
@@ -29673,9 +30001,9 @@ function FunCheckoutModalHeightAnimationWrapper({
29673
30001
  children,
29674
30002
  checkoutStep
29675
30003
  }) {
29676
- const containerRef = useRef27(null);
29677
- const animationFrameRef = useRef27(null);
29678
- const resizeObserverRef = useRef27(null);
30004
+ const containerRef = useRef28(null);
30005
+ const animationFrameRef = useRef28(null);
30006
+ const resizeObserverRef = useRef28(null);
29679
30007
  const [height, setHeight] = useState66("auto");
29680
30008
  useEffect51(() => {
29681
30009
  if (containerRef.current) {
@@ -29735,7 +30063,7 @@ function useCheckoutModalTitle(depositAddress, defaultTitle) {
29735
30063
  import { IN_PROGRESS_CHECKOUT_STATES as IN_PROGRESS_CHECKOUT_STATES2 } from "@funkit/api-base";
29736
30064
  import { formatTimestampToDate, fullMonthNames } from "@funkit/utils";
29737
30065
  import clsx24 from "clsx";
29738
- import React213, { useEffect as useEffect52, useMemo as useMemo44, useRef as useRef28, useState as useState68 } from "react";
30066
+ import React213, { useEffect as useEffect52, useMemo as useMemo47, useRef as useRef29, useState as useState68 } from "react";
29739
30067
  import { Virtuoso } from "react-virtuoso";
29740
30068
  import { useAccount as useAccount7 } from "wagmi";
29741
30069
 
@@ -30269,8 +30597,8 @@ function Home({
30269
30597
  }) {
30270
30598
  const { t } = useFunkitTranslation();
30271
30599
  const [selectedView, setSelectedView] = useState68(defaultHomeTab);
30272
- const checkoutsListRef = useRef28(null);
30273
- const virtuosoParentRef = useRef28(null);
30600
+ const checkoutsListRef = useRef29(null);
30601
+ const virtuosoParentRef = useRef29(null);
30274
30602
  const account = useAccount7();
30275
30603
  useCheckoutHistoryListener();
30276
30604
  const { userInfo, handleLogout } = useGeneralWallet();
@@ -30282,7 +30610,7 @@ function Home({
30282
30610
  const virtuosoDiv = virtuosoParentRef.current?.firstChild;
30283
30611
  virtuosoDiv?.classList.add(animateVirtuosoInClass);
30284
30612
  }, []);
30285
- const AssetsList = useMemo44(() => {
30613
+ const AssetsList = useMemo47(() => {
30286
30614
  if (walletAssets && !Object.keys(walletAssets).length) {
30287
30615
  return /* @__PURE__ */ React213.createElement(EmptyTabAlert, null);
30288
30616
  }
@@ -30309,7 +30637,7 @@ function Home({
30309
30637
  }
30310
30638
  ));
30311
30639
  }, [walletAssets]);
30312
- const CheckoutsList = useMemo44(() => {
30640
+ const CheckoutsList = useMemo47(() => {
30313
30641
  if (checkoutHistoryList.length === 0 && isCheckoutHistoryInited) {
30314
30642
  return /* @__PURE__ */ React213.createElement(EmptyTabAlert, null);
30315
30643
  }
@@ -31029,10 +31357,10 @@ function ChainModal({ onClose, open }) {
31029
31357
  // src/modals/CheckoutModal/FunCheckoutModal.tsx
31030
31358
  import { FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST as FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST3 } from "@funkit/chains";
31031
31359
  import { LogLevel, initializeRelayClient } from "@funkit/fun-relay";
31032
- import React231, { useRef as useRef29 } from "react";
31360
+ import React231, { useRef as useRef30 } from "react";
31033
31361
 
31034
31362
  // src/components/FunConnectOptions/FunConnectOptions.tsx
31035
- import React229, { useCallback as useCallback47, useMemo as useMemo45, useState as useState72 } from "react";
31363
+ import React229, { useCallback as useCallback47, useMemo as useMemo48, useState as useState72 } from "react";
31036
31364
 
31037
31365
  // src/components/FunConnectOptions/FunConnectResultStep.tsx
31038
31366
  import React224, { useEffect as useEffect53 } from "react";
@@ -31492,7 +31820,7 @@ function FunConnectOptions({
31492
31820
  }
31493
31821
  }
31494
31822
  };
31495
- const stepComponent = useMemo45(() => {
31823
+ const stepComponent = useMemo48(() => {
31496
31824
  switch (step) {
31497
31825
  case 0 /* SIGNIN_PRIMARY */:
31498
31826
  return /* @__PURE__ */ React229.createElement(
@@ -31636,7 +31964,7 @@ function FunCheckoutModalInner({
31636
31964
  depositAddress
31637
31965
  });
31638
31966
  };
31639
- const animationCallbackRef = useRef29(null);
31967
+ const animationCallbackRef = useRef30(null);
31640
31968
  const handleAnimationCompleteRegister = (cb) => {
31641
31969
  animationCallbackRef.current = cb;
31642
31970
  };
@@ -31657,12 +31985,18 @@ function FunCheckoutModalInner({
31657
31985
  const isInitialStep = modalState.step === "loading_account" /* LOADING_ACCOUNT */;
31658
31986
  const isBlocked = isUserGeoblocked || modalState.isBlocked;
31659
31987
  const hasBack = hasHistoryEntry && !disableBack;
31988
+ const { apiKey } = useFunkitConfig();
31989
+ const lighterNativeDeposit = isLighterNativeFlow(
31990
+ apiKey,
31991
+ checkoutItem.initSettings.config
31992
+ );
31660
31993
  const checkoutConfig = hideModalTitleMetaIfTrue(
31661
31994
  checkoutItem.initSettings.config,
31662
31995
  HIDE_MODAL_META_TITLE_AND_DIVIDER.includes(modalState.step)
31663
31996
  );
31664
31997
  const { onScroll, topbar, withTopDivider } = useCustomStatusAnimationAboveTopbar({
31665
31998
  depositAddress: checkoutItem.depositAddress ?? void 0,
31999
+ isLighterNativeDeposit: lighterNativeDeposit,
31666
32000
  isActiveCheckout: true,
31667
32001
  isCheckoutDetailView: modalState.step === "checkout_complete" /* CHECKOUT_COMPLETE */,
31668
32002
  paddingTop: 0,
@@ -31881,7 +32215,7 @@ function ModalProvider({ children }) {
31881
32215
  return /* @__PURE__ */ React233.createElement(
31882
32216
  ModalContext.Provider,
31883
32217
  {
31884
- value: useMemo46(
32218
+ value: useMemo49(
31885
32219
  () => ({
31886
32220
  accountModalOpen,
31887
32221
  accountModalTab,
@@ -32014,7 +32348,8 @@ var FunkitCheckoutContext = createContext17({
32014
32348
  setCompletedTimestamp: () => void 0,
32015
32349
  withdrawalItem: null,
32016
32350
  initNewWithdrawal: () => "",
32017
- updateWithdrawalSourceAssetAmount: () => void 0
32351
+ updateWithdrawalSourceAssetAmount: () => void 0,
32352
+ applyDynamicRouting: () => void 0
32018
32353
  });
32019
32354
  function assertCheckoutItem(checkoutItem) {
32020
32355
  if (!checkoutItem) {
@@ -32031,6 +32366,9 @@ function FunkitCheckoutProvider({ children }) {
32031
32366
  const { logEvent } = useTrack();
32032
32367
  const [activeCheckout, setActiveCheckout] = useState74(null);
32033
32368
  const [activeWithdrawal, setActiveWithdrawal] = useState74(null);
32369
+ const udaParams = useUDAParams(
32370
+ activeCheckout?.initSettings.config?.dynamicRoutingId
32371
+ );
32034
32372
  const [checkoutsProgress, setCheckoutsProgress] = useState74({});
32035
32373
  const getCheckoutProgress = useCallback49(
32036
32374
  (checkoutId) => {
@@ -32278,7 +32616,8 @@ function FunkitCheckoutProvider({ children }) {
32278
32616
  config: checkoutItem.initSettings.config,
32279
32617
  walletAddress
32280
32618
  }),
32281
- apiKey: funkitConfig.apiKey
32619
+ apiKey: funkitConfig.apiKey,
32620
+ udaParams
32282
32621
  });
32283
32622
  if (!queryParams) {
32284
32623
  const missingQueryParamsError = new Error(
@@ -32324,7 +32663,8 @@ function FunkitCheckoutProvider({ children }) {
32324
32663
  updateActiveCheckout,
32325
32664
  walletAddress,
32326
32665
  getWithdrawalDirectExecution,
32327
- logEvent
32666
+ logEvent,
32667
+ udaParams
32328
32668
  ]
32329
32669
  );
32330
32670
  const startRegularCheckout = useCallback49(
@@ -32469,6 +32809,27 @@ function FunkitCheckoutProvider({ children }) {
32469
32809
  });
32470
32810
  }
32471
32811
  );
32812
+ const applyDynamicRouting = useEffectEvent(
32813
+ (path) => {
32814
+ updateActiveCheckout((checkoutItem) => {
32815
+ const config = checkoutItem.initSettings.config;
32816
+ return {
32817
+ initSettings: {
32818
+ ...checkoutItem.initSettings,
32819
+ config: {
32820
+ ...config,
32821
+ targetAsset: path.targetAsset,
32822
+ targetChain: path.targetChain,
32823
+ targetAssetTicker: path.targetAssetTicker ?? config.targetAssetTicker,
32824
+ iconSrc: path.iconSrc ?? config.iconSrc,
32825
+ generateActionsParams: path.generateActionsParams,
32826
+ customRecipient: path.customRecipient
32827
+ }
32828
+ }
32829
+ };
32830
+ });
32831
+ }
32832
+ );
32472
32833
  const updateModalTitleMeta = useEffectEvent((newMeta) => {
32473
32834
  updateActiveCheckout((checkoutItem) => {
32474
32835
  const config = checkoutItem.initSettings.config;
@@ -32525,7 +32886,8 @@ function FunkitCheckoutProvider({ children }) {
32525
32886
  withdrawalItem: activeWithdrawal,
32526
32887
  initNewWithdrawal,
32527
32888
  updateCustomRecipient,
32528
- updateWithdrawalSourceAssetAmount
32889
+ updateWithdrawalSourceAssetAmount,
32890
+ applyDynamicRouting
32529
32891
  };
32530
32892
  return /* @__PURE__ */ React234.createElement(FunkitCheckoutContext.Provider, { value: contextValue }, children);
32531
32893
  }
@@ -32544,7 +32906,7 @@ function useFunkitCheckout(props) {
32544
32906
  const { openWithdrawalModal } = useWithdrawalModal();
32545
32907
  const { connectModalOpen, openConnectModal } = useConnectModal();
32546
32908
  const { isUserLoggedIn } = useGeneralWallet();
32547
- const isCheckoutActivated = useFlag(FlagKey22.IsCheckoutActivated);
32909
+ const isCheckoutActivated = useFlag(FlagKey21.IsCheckoutActivated);
32548
32910
  const onErrorWrapper = useCallback49(
32549
32911
  (payload) => {
32550
32912
  logger.warn(payload.message, payload);
@@ -32715,21 +33077,6 @@ async function validateCheckoutConfig(config) {
32715
33077
  message: "Invalid generateActionsParams configuration: Must be a function."
32716
33078
  };
32717
33079
  }
32718
- if (parsedTargetAssetAmount === 0) {
32719
- return {
32720
- isValid: false,
32721
- message: "Invalid targetAssetAmount configuration: Has to be a number greater than 0"
32722
- };
32723
- }
32724
- const initialActionsParams = await config.generateActionsParams(
32725
- parsedTargetAssetAmount
32726
- );
32727
- if (!Array.isArray(initialActionsParams)) {
32728
- return {
32729
- isValid: false,
32730
- message: "Invalid generateActionsParams configuration: Must return an array. If no actions are required, please specify an empty array ([]) instead."
32731
- };
32732
- }
32733
33080
  }
32734
33081
  if (!config.targetAssetTicker) {
32735
33082
  return {
@@ -32892,16 +33239,6 @@ async function getTokenDecimals(wagmiConfig, chainId, tokenAddress) {
32892
33239
  }
32893
33240
  }
32894
33241
  }
32895
- async function getLighterTickSize(wagmiConfig, chainId, assetIndex) {
32896
- const assetConfig = await readContract(wagmiConfig, {
32897
- address: LIGHTER_DEPOSIT_ADDRESS,
32898
- abi: LIGHTER_DEPOSIT_ABI,
32899
- functionName: "assetConfigs",
32900
- args: [assetIndex],
32901
- chainId: Number.parseInt(chainId)
32902
- });
32903
- return assetConfig[3];
32904
- }
32905
33242
  async function evaluateCheckoutGenerateActionsParams(config) {
32906
33243
  if (!config.generateActionsParams) {
32907
33244
  return [];
@@ -32988,12 +33325,12 @@ function computeDisplayDestinationToken(checkoutConfig, displayAssetAmount) {
32988
33325
  }
32989
33326
 
32990
33327
  // src/domains/feeEstimate.ts
32991
- import { mainnet as mainnet10 } from "viem/chains";
33328
+ import { mainnet as mainnet12 } from "viem/chains";
32992
33329
  var L1_FEES_ESTIMATE = 1;
32993
33330
  var L2_FEES_ESTIMATE = 1;
32994
33331
  var BROKERAGE_FEES_ESTIMATE = 0;
32995
33332
  var getBaseFeeUsdEstimate = (targetChainId, assetChainId) => {
32996
- if (targetChainId !== mainnet10.id.toString() && assetChainId !== mainnet10.id.toString()) {
33333
+ if (targetChainId !== mainnet12.id.toString() && assetChainId !== mainnet12.id.toString()) {
32997
33334
  return L2_FEES_ESTIMATE;
32998
33335
  }
32999
33336
  return L1_FEES_ESTIMATE;
@@ -33009,7 +33346,7 @@ var getFeesUsdEstimate = (targetChainId, assetChainId, paymentMethod) => {
33009
33346
  var isStablecoin = (symbol) => STABLECOIN_SYMBOLS.find((s) => symbol.toLowerCase().includes(s.toLowerCase()));
33010
33347
  function isPreferredChain(chainId, additionalChains = []) {
33011
33348
  const chains = /* @__PURE__ */ new Set([
33012
- mainnet11.id,
33349
+ mainnet13.id,
33013
33350
  polygon6.id,
33014
33351
  base7.id,
33015
33352
  arbitrum5.id,
@@ -33027,7 +33364,6 @@ function isNativeTokenAddress(address) {
33027
33364
  }
33028
33365
  var isPolygonEcosystemToken = (chainId, tokenAddress) => chainId === polygon6.id.toString() && tokenAddress === "0x0000000000000000000000000000000000001010";
33029
33366
  var isAssetUsableToPayForCheckout = ({
33030
- apiKey,
33031
33367
  config,
33032
33368
  payerAddress,
33033
33369
  paymentMethod,
@@ -33038,6 +33374,7 @@ var isAssetUsableToPayForCheckout = ({
33038
33374
  assetUsdAmount,
33039
33375
  isAllowedForCheckout,
33040
33376
  minUsdRequired,
33377
+ isLighterNative,
33041
33378
  t
33042
33379
  }) => {
33043
33380
  const finalCheckoutRecipient = getCheckoutRecipient({
@@ -33054,6 +33391,9 @@ var isAssetUsableToPayForCheckout = ({
33054
33391
  minUsdRequired ?? 0
33055
33392
  );
33056
33393
  const isSameAsPurchasingToken = (() => {
33394
+ if (isLighterNative) {
33395
+ return false;
33396
+ }
33057
33397
  if (isCheckoutPostActionRequired(config)) {
33058
33398
  const vaultToken = config.stakingToken;
33059
33399
  return vaultToken && isTokenEquivalent7({
@@ -33093,12 +33433,11 @@ var isAssetUsableToPayForCheckout = ({
33093
33433
  };
33094
33434
  }
33095
33435
  let isSupported = isAllowedForCheckout && FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO14[assetChainId]?.isCheckoutSupported;
33096
- const isLighterEth = isLighterEthSpot(apiKey, config);
33097
- if (isSupported && isLighterEth) {
33436
+ if (isSupported && isLighterNative) {
33098
33437
  isSupported = isTokenEquivalent7({
33099
33438
  firstTokenChainId: assetChainId,
33100
33439
  firstTokenAddress: assetTokenAddress,
33101
- secondTokenChainId: mainnet11.id.toString(),
33440
+ secondTokenChainId: mainnet13.id.toString(),
33102
33441
  secondTokenAddress: NATIVE_TOKEN
33103
33442
  });
33104
33443
  }
@@ -33233,7 +33572,7 @@ var useWalletAssets = ({
33233
33572
  } = {}) => {
33234
33573
  const { address, isConnected } = useAccount11();
33235
33574
  const { apiKey } = useFunkitConfig();
33236
- const { data, isLoading, isFetching } = useQuery21({
33575
+ const { data, isLoading, isFetching } = useQuery22({
33237
33576
  queryKey: ["getWalletAssets", address, apiKey],
33238
33577
  queryFn: ({ queryKey: [_, addr, key] }) => fetchAssets(addr, key),
33239
33578
  placeholderData: keepPreviousData2,
@@ -34031,9 +34370,9 @@ function cssStringFromTheme(theme, options = {}) {
34031
34370
  }
34032
34371
 
34033
34372
  // src/hooks/useFunkitMaxCheckoutUsdInfo.ts
34034
- import { FlagKey as FlagKey23, formatCurrencyAndStringify as formatCurrencyAndStringify16 } from "@funkit/utils";
34373
+ import { FlagKey as FlagKey22, formatCurrencyAndStringify as formatCurrencyAndStringify16 } from "@funkit/utils";
34035
34374
  var useFunkitMaxCheckoutUsdInfo = () => {
34036
- const maxCheckoutUsd = Number(useFlag(FlagKey23.MaxCheckoutUsd));
34375
+ const maxCheckoutUsd = Number(useFlag(FlagKey22.MaxCheckoutUsd));
34037
34376
  const limitText = maxCheckoutUsd === Number.MAX_VALUE ? "no" : formatCurrencyAndStringify16(maxCheckoutUsd, {
34038
34377
  decimalPrecisionForSuffix: 0,
34039
34378
  minimumSignificantDigits: 0,
@@ -38195,7 +38534,7 @@ import React240, {
38195
38534
  createContext as createContext18,
38196
38535
  useContext as useContext18,
38197
38536
  useEffect as useEffect59,
38198
- useMemo as useMemo47
38537
+ useMemo as useMemo50
38199
38538
  } from "react";
38200
38539
  import { WagmiProvider, useAccountEffect as useAccountEffect3 } from "wagmi";
38201
38540
 
@@ -38281,7 +38620,7 @@ var createThemeRootSelector = (id) => {
38281
38620
  function FunkitProvider(props) {
38282
38621
  validateFunkitProviderProps(props);
38283
38622
  const initialChainId = getInitialChainIdFromFunkitProviderProps(props);
38284
- const finalWagmiConfig = useMemo47(() => {
38623
+ const finalWagmiConfig = useMemo50(() => {
38285
38624
  if (!props.wagmiConfig || !initialChainId) {
38286
38625
  return void 0;
38287
38626
  }
@@ -38291,7 +38630,7 @@ function FunkitProvider(props) {
38291
38630
  });
38292
38631
  }, [initialChainId, props.wagmiConfig, props.funkitConfig.appName]);
38293
38632
  const finalQueryClient = props.queryClient;
38294
- const sdkVersion = useMemo47(() => getCurrentSdkVersion(), []);
38633
+ const sdkVersion = useMemo50(() => getCurrentSdkVersion(), []);
38295
38634
  useEffect59(() => {
38296
38635
  logger.configure(props.funkitConfig.apiKey, !!props.debug, sdkVersion);
38297
38636
  }, [props.funkitConfig.apiKey, props.debug, sdkVersion]);
@@ -38326,9 +38665,9 @@ function FunkitProviderInner({
38326
38665
  useFingerprint();
38327
38666
  useAccountEffect3({ onDisconnect: clearWalletConnectDeepLink });
38328
38667
  const { activeTheme } = useActiveTheme();
38329
- const selector = useMemo47(() => createThemeRootSelector(id), [id]);
38330
- const themeRootProps = useMemo47(() => createThemeRootProps2(id), [id]);
38331
- const themeStyles = useMemo47(() => {
38668
+ const selector = useMemo50(() => createThemeRootSelector(id), [id]);
38669
+ const themeRootProps = useMemo50(() => createThemeRootProps2(id), [id]);
38670
+ const themeStyles = useMemo50(() => {
38332
38671
  if (!activeTheme) {
38333
38672
  return "";
38334
38673
  }