@funkit/connect 6.15.4 → 6.15.6

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
@@ -1266,7 +1266,7 @@ function abortCheckoutQuote() {
1266
1266
  // src/utils/checkout.ts
1267
1267
  import {
1268
1268
  CheckoutState as CheckoutState2,
1269
- ETHEREAL_API_KEY as ETHEREAL_API_KEY3,
1269
+ ETHEREAL_API_KEY as ETHEREAL_API_KEY4,
1270
1270
  HYENA_API_KEY as HYENA_API_KEY3,
1271
1271
  getAssetPriceInfo
1272
1272
  } from "@funkit/api-base";
@@ -1284,6 +1284,7 @@ import {
1284
1284
  import { getRelayAssetInfo } from "@funkit/fun-relay";
1285
1285
  import {
1286
1286
  formatCryptoAndStringify,
1287
+ isNumericString,
1287
1288
  isTokenAddressEquivalent as isTokenAddressEquivalent3,
1288
1289
  isTokenEquivalent as isTokenEquivalent2,
1289
1290
  round as round2
@@ -1513,7 +1514,7 @@ function setFunkitConnectVersion({ version }) {
1513
1514
  localStorage.setItem(storageKey, version);
1514
1515
  }
1515
1516
  function getCurrentSdkVersion() {
1516
- return "6.15.4";
1517
+ return "6.15.6";
1517
1518
  }
1518
1519
  function useFingerprint() {
1519
1520
  const fingerprint = useCallback2(() => {
@@ -1885,6 +1886,7 @@ var useFunkitSwitchChains = ({
1885
1886
  import { exhaustiveCheck, formatAddress as formatAddress2 } from "@funkit/utils";
1886
1887
 
1887
1888
  // src/consts/bluvo.tsx
1889
+ import { ETHEREAL_API_KEY } from "@funkit/api-base";
1888
1890
  import React15 from "react";
1889
1891
 
1890
1892
  // src/components/Icons/BinanceIcon.tsx
@@ -2026,6 +2028,9 @@ var KrakenIcon = ({ size = 24 }) => {
2026
2028
  };
2027
2029
 
2028
2030
  // src/consts/bluvo.tsx
2031
+ var BLUVO_MIN_DEPOSIT_BY_CUSTOMER = {
2032
+ [ETHEREAL_API_KEY]: 15
2033
+ };
2029
2034
  var SUPPORTED_EXCHANGES = [
2030
2035
  { exchange: "coinbase" /* Coinbase */, status: "live" /* Live */ },
2031
2036
  {
@@ -2404,7 +2409,7 @@ import {
2404
2409
  BANKR_API_KEY,
2405
2410
  BASED_API_KEY,
2406
2411
  BSX_API_KEY,
2407
- ETHEREAL_API_KEY,
2412
+ ETHEREAL_API_KEY as ETHEREAL_API_KEY2,
2408
2413
  HYENA_API_KEY,
2409
2414
  HYPERBEAT_API_KEY,
2410
2415
  HYPERDASH_API_KEY,
@@ -2425,7 +2430,7 @@ function isBankrCustomer(apiKey) {
2425
2430
  return apiKey === BANKR_API_KEY;
2426
2431
  }
2427
2432
  function isEtherealCustomer(apiKey) {
2428
- return apiKey === ETHEREAL_API_KEY;
2433
+ return apiKey === ETHEREAL_API_KEY2;
2429
2434
  }
2430
2435
  function isKatanaCustomer(apiKey) {
2431
2436
  return apiKey === KATANA_API_KEY;
@@ -2454,7 +2459,7 @@ import {
2454
2459
  BASED_API_KEY as BASED_API_KEY2,
2455
2460
  BULLPEN_API_KEY,
2456
2461
  CAMBRIA_API_KEY,
2457
- ETHEREAL_API_KEY as ETHEREAL_API_KEY2,
2462
+ ETHEREAL_API_KEY as ETHEREAL_API_KEY3,
2458
2463
  FELIX_API_KEY,
2459
2464
  HYENA_API_KEY as HYENA_API_KEY2,
2460
2465
  HYPERBEAT_API_KEY as HYPERBEAT_API_KEY2,
@@ -2546,29 +2551,31 @@ var DEFAULT_BLOCKED_COUNTRIES = [
2546
2551
  ];
2547
2552
  var COMMON_SUPPORT_CHAINS_AND_ASSETS = {
2548
2553
  // mainnet
2549
- 1: ["USDC", "DAI", "USDT", "ETH", "WETH", "POL", "MATIC", "CBBTC"],
2554
+ 1: ["USDC", "DAI", "USDT", "ETH", "WETH", "POL", "MATIC", "CBBTC", "USDe"],
2550
2555
  // base
2551
- 8453: ["USDC", "USDT", "DAI", "ETH", "WETH", "CBBTC"],
2556
+ 8453: ["USDC", "USDT", "DAI", "ETH", "WETH", "CBBTC", "USDe"],
2552
2557
  // arbitrum
2553
- 42161: ["USDC", "USDT", "DAI", "ETH", "WETH", "ARB"],
2558
+ 42161: ["USDC", "USDT", "DAI", "ETH", "WETH", "ARB", "USDe"],
2554
2559
  // polygon
2555
2560
  137: ["USDC", "USDC.e", "USDT", "POL", "MATIC", "DAI", "WETH"],
2556
2561
  // optimism
2557
- 10: ["USDC", "USDT", "DAI", "ETH", "WETH"],
2562
+ 10: ["USDC", "USDT", "DAI", "ETH", "WETH", "USDe"],
2558
2563
  // bsc
2559
- 56: ["USDC", "USDT", "BNB", "WBNB", "ETH", "DAI", "BUSD", "BTCB"]
2564
+ 56: ["USDC", "USDT", "BNB", "WBNB", "ETH", "DAI", "BUSD", "BTCB", "USDe"]
2560
2565
  };
2561
2566
  var QR_CODE_EVM = {
2562
2567
  ...COMMON_SUPPORT_CHAINS_AND_ASSETS,
2563
2568
  // abstract
2564
2569
  2741: ["USDC.e", "ETH", "WETH", "USDT"],
2565
2570
  // hyperevm. TODO: Consider adding UETH, hbHYPE, stHYPE once their icons are in assets.ts. Also holding back as they are lower mkt cap tokens and would overcrowd our UI.
2566
- 999: ["USDC", "HYPE", "WETH", "USDT", "UBTC", "USDe"]
2571
+ 999: ["USDC", "HYPE", "WETH", "USDT", "UBTC", "USDe"],
2572
+ // ethereal
2573
+ 5064014: ["USDe"]
2567
2574
  };
2568
2575
  var QR_CODE_WITH_SOLANA = {
2569
2576
  ...QR_CODE_EVM,
2570
2577
  // solana - only enable once customers are on v5.0.11, anything prior will break
2571
- 1151111081099710: ["SOL", "USDC", "USDT", "TRUMP"]
2578
+ 1151111081099710: ["SOL", "USDC", "USDT", "TRUMP", "USDe"]
2572
2579
  };
2573
2580
  var WITHDRAWAL_CHAINS_AND_ASSETS = {
2574
2581
  ...COMMON_SUPPORT_CHAINS_AND_ASSETS,
@@ -2682,14 +2689,15 @@ var flagConfig = {
2682
2689
  HYPERDASH_API_KEY2,
2683
2690
  MONKEY_TILT_API_KEY2,
2684
2691
  VENTUALS_API_KEY,
2685
- ETHEREAL_API_KEY2,
2692
+ ETHEREAL_API_KEY3,
2686
2693
  AVANTIS_API_KEY2,
2687
2694
  MONAD_API_KEY,
2688
2695
  BULLPEN_API_KEY,
2689
2696
  LIGHTERXYZ_API_KEY2,
2690
2697
  PERPL_API_KEY2,
2691
2698
  HYPEREDGE_API_KEY,
2692
- FELIX_API_KEY
2699
+ FELIX_API_KEY,
2700
+ LIGHTERXYZ_API_KEY2
2693
2701
  ]
2694
2702
  }
2695
2703
  ],
@@ -2726,7 +2734,26 @@ var flagConfig = {
2726
2734
  },
2727
2735
  [FlagKey.TokenTransferSourceChainsAndAssets]: {
2728
2736
  type: "string",
2729
- default_value: JSON.stringify(QR_CODE_WITH_SOLANA)
2737
+ default_value: JSON.stringify(QR_CODE_WITH_SOLANA),
2738
+ overrides: [
2739
+ {
2740
+ if_any: [
2741
+ {
2742
+ key: "apiKey",
2743
+ type: "isAnyOf",
2744
+ values: [ETHEREAL_API_KEY3]
2745
+ }
2746
+ ],
2747
+ // For Ethereal, sort USDe to the front of the list on Arbitrum so it becomes the default
2748
+ value: JSON.stringify({
2749
+ ...QR_CODE_WITH_SOLANA,
2750
+ 42161: [
2751
+ "USDe",
2752
+ ...QR_CODE_WITH_SOLANA[42161].filter((token) => token !== "USDe")
2753
+ ]
2754
+ })
2755
+ }
2756
+ ]
2730
2757
  },
2731
2758
  [FlagKey.WithdrawalChainsAndAssets]: {
2732
2759
  type: "string",
@@ -2757,32 +2784,15 @@ var flagConfig = {
2757
2784
  },
2758
2785
  [FlagKey.CheckoutTimeEstimateOverrides]: {
2759
2786
  type: "string",
2760
- default_value: "",
2761
- // Do not override by default
2762
- overrides: [
2763
- {
2764
- if_any: [
2765
- {
2766
- key: "apiKey",
2767
- type: "isAnyOf",
2768
- values: [
2769
- POLYMARKET_API_KEY2,
2770
- OSTIUM_API_KEY2,
2771
- BANKR_API_KEY2,
2772
- KATANA_API_KEY2
2773
- ]
2774
- }
2775
- ],
2776
- value: JSON.stringify({
2777
- ["balance" /* ACCOUNT_BALANCE */]: 1 * 60,
2778
- // 1 minute
2779
- ["brokerage" /* BROKERAGE */]: 2 * 60,
2780
- // 2 minutes
2781
- ["card" /* CARD */]: 5 * 60
2782
- // 5 minutes
2783
- })
2784
- }
2785
- ]
2787
+ default_value: JSON.stringify({
2788
+ ["balance" /* ACCOUNT_BALANCE */]: 1 * 60,
2789
+ // 1 minute
2790
+ ["brokerage" /* BROKERAGE */]: 2 * 60,
2791
+ // 2 minutes
2792
+ ["card" /* CARD */]: 5 * 60,
2793
+ // 5 minutes
2794
+ ["token_transfer" /* TOKEN_TRANSFER */]: 1 * 60
2795
+ })
2786
2796
  },
2787
2797
  [FlagKey.TokenTransferDefaultChainId]: {
2788
2798
  type: "string",
@@ -2793,7 +2803,7 @@ var flagConfig = {
2793
2803
  {
2794
2804
  key: "apiKey",
2795
2805
  type: "isAnyOf",
2796
- values: [OSTIUM_API_KEY2]
2806
+ values: [OSTIUM_API_KEY2, ETHEREAL_API_KEY3]
2797
2807
  }
2798
2808
  ],
2799
2809
  value: arbitrum2.id.toString()
@@ -2998,7 +3008,7 @@ var flagConfig = {
2998
3008
  {
2999
3009
  if_all: [
3000
3010
  {
3001
- pct: 30,
3011
+ pct: 50,
3002
3012
  type: "pctRollout",
3003
3013
  key: "userId"
3004
3014
  },
@@ -3009,7 +3019,8 @@ var flagConfig = {
3009
3019
  POLYMARKET_API_KEY2,
3010
3020
  HYPERDASH_API_KEY2,
3011
3021
  HYENA_API_KEY2,
3012
- ETHEREAL_API_KEY2
3022
+ ETHEREAL_API_KEY3,
3023
+ MONAD_API_KEY
3013
3024
  ]
3014
3025
  }
3015
3026
  ],
@@ -3087,7 +3098,7 @@ var flagConfig = {
3087
3098
  VENTUALS_API_KEY,
3088
3099
  AVANTIS_API_KEY2,
3089
3100
  HYENA_API_KEY2,
3090
- ETHEREAL_API_KEY2,
3101
+ ETHEREAL_API_KEY3,
3091
3102
  MONAD_API_KEY
3092
3103
  ]
3093
3104
  }
@@ -3184,7 +3195,7 @@ var flagConfig = {
3184
3195
  {
3185
3196
  key: "apiKey",
3186
3197
  type: "isAnyOf",
3187
- values: [ETHEREAL_API_KEY2]
3198
+ values: [ETHEREAL_API_KEY3]
3188
3199
  }
3189
3200
  ],
3190
3201
  value: false
@@ -3857,6 +3868,60 @@ async function checkoutTransferFetch(params) {
3857
3868
  clientMetadata: COMMON_CLIENT_METADATA
3858
3869
  });
3859
3870
  }
3871
+ function getCheckoutTokenTransferParams({
3872
+ checkoutConfig,
3873
+ userId,
3874
+ recipientAddr,
3875
+ apiKey
3876
+ }) {
3877
+ if (!checkoutConfig) {
3878
+ return;
3879
+ }
3880
+ if (!checkoutConfig.targetChain) {
3881
+ return;
3882
+ }
3883
+ const commonParams = {
3884
+ userId,
3885
+ apiKey,
3886
+ recipientAddr,
3887
+ actionType: checkoutConfig.qrcodeActionType
3888
+ };
3889
+ const dynamicTargetAssetCandidates = checkoutConfig.dynamicTargetAssetCandidates;
3890
+ if (dynamicTargetAssetCandidates?.[0]) {
3891
+ const defaultCandidate = dynamicTargetAssetCandidates.find(
3892
+ (candidate) => candidate.isDefault
3893
+ );
3894
+ if (!defaultCandidate) {
3895
+ logger.error(
3896
+ "No default candidate found for dynamic target asset candidates",
3897
+ void 0,
3898
+ {
3899
+ checkoutConfig
3900
+ }
3901
+ );
3902
+ return;
3903
+ }
3904
+ return {
3905
+ ...commonParams,
3906
+ toChainId: defaultCandidate.tokenChainId,
3907
+ toTokenAddress: defaultCandidate.tokenAddress
3908
+ };
3909
+ }
3910
+ if (!checkoutConfig.targetAsset) {
3911
+ return;
3912
+ }
3913
+ if (checkoutConfig.targetAsset === "0x") {
3914
+ return;
3915
+ }
3916
+ if (!checkoutConfig.targetChain) {
3917
+ return;
3918
+ }
3919
+ return {
3920
+ ...commonParams,
3921
+ toChainId: checkoutConfig.targetChain,
3922
+ toTokenAddress: checkoutConfig.targetAsset
3923
+ };
3924
+ }
3860
3925
  var useCheckoutTransferInit = () => {
3861
3926
  const { checkoutItem } = useCheckoutContext();
3862
3927
  const checkoutConfig = checkoutItem?.initSettings.config;
@@ -3864,21 +3929,20 @@ var useCheckoutTransferInit = () => {
3864
3929
  const { apiKey } = useFunkitConfig();
3865
3930
  const isQrCodeEnabled = useFlag(FlagKey4.EnableTokenTransfer, false);
3866
3931
  const recipientAddr = checkoutConfig?.customRecipient || walletAddress || "0x";
3867
- const queryKey = checkoutConfig?.targetAsset && checkoutConfig.targetAsset !== "0x" && checkoutConfig.targetChain && {
3868
- userId: userInfo.id || "",
3869
- toChainId: checkoutConfig.targetChain,
3870
- toTokenAddress: checkoutConfig.targetAsset,
3871
- recipientAddr,
3932
+ const userId = userInfo.id || "";
3933
+ const queryKey = getCheckoutTokenTransferParams({
3934
+ checkoutConfig,
3935
+ userId,
3872
3936
  apiKey,
3873
- actionType: checkoutConfig?.qrcodeActionType
3874
- };
3937
+ recipientAddr
3938
+ });
3875
3939
  const postActionOverride = isHyenaCustomer(apiKey);
3876
3940
  const isQRCodeEnabledWithPostAction = !!checkoutConfig && // either no post action required
3877
3941
  (!isCheckoutPostActionRequired(checkoutConfig) || // or action type is set
3878
3942
  !!checkoutConfig?.qrcodeActionType || postActionOverride);
3879
3943
  const { data, isFetching } = useQuery3({
3880
3944
  queryKey: ["initializeCheckoutTokenTransferAddress", queryKey],
3881
- queryFn: () => queryKey ? checkoutTransferFetch(queryKey) : void 0,
3945
+ queryFn: ({ queryKey: [_, queryKey2] }) => queryKey2 ? checkoutTransferFetch(queryKey2) : void 0,
3882
3946
  refetchOnWindowFocus: false,
3883
3947
  refetchOnMount: false,
3884
3948
  enabled: !!queryKey && // Is flag enabled
@@ -4250,16 +4314,27 @@ function FunkitCheckoutProvider({ children }) {
4250
4314
  });
4251
4315
  depositAddressOrHash = txHash;
4252
4316
  } else {
4253
- const newTransferInit = await checkoutTransferFetch({
4317
+ const queryParams = getCheckoutTokenTransferParams({
4318
+ checkoutConfig: checkoutItem.initSettings.config,
4254
4319
  userId: userInfo.id || "",
4255
- toChainId: checkoutItem.initSettings.config.targetChain,
4256
- toTokenAddress: checkoutItem.initSettings.config.targetAsset,
4257
4320
  recipientAddr: getCheckoutRecipient({
4258
4321
  config: checkoutItem.initSettings.config,
4259
4322
  walletAddress
4260
4323
  }),
4261
4324
  apiKey: funkitConfig.apiKey
4262
4325
  });
4326
+ if (!queryParams) {
4327
+ const missingQueryParamsError = new Error(
4328
+ "Unable to get query params"
4329
+ );
4330
+ logger.error(
4331
+ "directExecutionCheckout:missingQueryParams",
4332
+ missingQueryParamsError,
4333
+ { ...directExecutionLogContext, directExecutionType }
4334
+ );
4335
+ throw missingQueryParamsError;
4336
+ }
4337
+ const newTransferInit = await checkoutTransferFetch(queryParams);
4263
4338
  if (!newTransferInit?.depositAddr) {
4264
4339
  const missingDepositAddressError = new Error(
4265
4340
  "Unable to get transfer deposit address"
@@ -4640,12 +4715,17 @@ import { solanaChain as solanaChain2 } from "@funkit/chains";
4640
4715
  import { formatAddressLastFour } from "@funkit/utils";
4641
4716
  import { isAddress as isSolanaAddress } from "@solana/addresses";
4642
4717
  import { isAddress } from "viem";
4643
- var getWalletLabel = (textCustomizations, walletAddress) => {
4718
+ var getWalletLabel = (t, textCustomizations, walletAddress) => {
4644
4719
  if (walletAddress) {
4645
4720
  const formattedAddress = formatAddressLastFour(walletAddress);
4646
- return `${textCustomizations.accountBalance} (${formattedAddress})`;
4721
+ return t("checkout.walletLabelTemplate", {
4722
+ walletLabel: textCustomizations.accountBalance,
4723
+ formattedAddress
4724
+ });
4647
4725
  }
4648
- return `Connect ${textCustomizations.accountBalance}`;
4726
+ return t("checkout.connectWalletLabelTemplate", {
4727
+ walletLabel: textCustomizations.accountBalance
4728
+ });
4649
4729
  };
4650
4730
  function isAddressSupported(address) {
4651
4731
  return isAddress(address) || isSolanaAddress(address);
@@ -4735,7 +4815,7 @@ async function validateCheckoutConfig(config) {
4735
4815
  if (config.customRecipient && !isAddressCompatibleWithChain(
4736
4816
  config.customRecipient,
4737
4817
  Number(config.targetChain)
4738
- )) {
4818
+ ) && !isNumericString(config.customRecipient)) {
4739
4819
  return {
4740
4820
  isValid: false,
4741
4821
  message: "Invalid customRecipient configuration: Has to be a valid address."
@@ -4968,7 +5048,7 @@ function computeDisplayDestinationToken(checkoutConfig, displayAssetAmount) {
4968
5048
  stakingTokenIcon
4969
5049
  };
4970
5050
  }
4971
- var LZOFT_CUSTOMERS = [ETHEREAL_API_KEY3, HYENA_API_KEY3];
5051
+ var LZOFT_CUSTOMERS = [ETHEREAL_API_KEY4, HYENA_API_KEY3];
4972
5052
  function isLayerZeroOftCheckout(apiKey, checkoutItem) {
4973
5053
  if (!LZOFT_CUSTOMERS.includes(apiKey)) {
4974
5054
  return false;
@@ -6190,10 +6270,12 @@ function TransactionStatus({
6190
6270
  textConfigSteps
6191
6271
  }) {
6192
6272
  const { t } = useFunkitTranslation();
6193
- const defaultTextConfigStatus = getDefaultTextConfigStatus(t);
6194
- const defaultTextConfigSteps = getDefaultTextConfigSteps(t);
6195
- const finalTextConfigStatus = textConfigStatus || defaultTextConfigStatus;
6196
- const finalTextConfigSteps = textConfigSteps || defaultTextConfigSteps;
6273
+ const finalTextConfigStatus = useMemo10(() => {
6274
+ return textConfigStatus || getDefaultTextConfigStatus(t);
6275
+ }, [t, textConfigStatus]);
6276
+ const finalTextConfigSteps = useMemo10(() => {
6277
+ return textConfigSteps || getDefaultTextConfigSteps(t);
6278
+ }, [t, textConfigSteps]);
6197
6279
  const [initialStatus] = useState8(status);
6198
6280
  const [initialStep] = useState8(step);
6199
6281
  const [scope, animate] = useAnimate();
@@ -12056,7 +12138,7 @@ var useMaxSlippage = ({
12056
12138
  // src/utils/bluvo.ts
12057
12139
  var ASSETS_LOW_VALUE_THRESHOLD2 = 0.1;
12058
12140
  var isBrokerageAsset = (asset) => "minAmount" in asset && "maxAmount" in asset && asset.usdAmount !== null;
12059
- function getBrokerageMinMax(asset, minTransferLimits) {
12141
+ function getBrokerageMinMax(asset, minTransferLimits, minDeposit = 1) {
12060
12142
  const chainId = Number(asset.pickedChainId);
12061
12143
  const unitPrice = asset.usdAmount / asset.amount;
12062
12144
  const brokerageMin = Number.parseFloat(asset.minAmount);
@@ -12068,7 +12150,7 @@ function getBrokerageMinMax(asset, minTransferLimits) {
12068
12150
  minTransferLimits
12069
12151
  );
12070
12152
  return {
12071
- minUsd: Math.ceil(Math.max(tokenTransferMin, brokerageMinUsd)),
12153
+ minUsd: Math.ceil(Math.max(tokenTransferMin, brokerageMinUsd, minDeposit)),
12072
12154
  maxUsd: brokerageMaxUsd
12073
12155
  };
12074
12156
  }
@@ -12280,6 +12362,7 @@ var FunkitBrokerageContext = createContext12(void 0);
12280
12362
  var FunkitBrokerageProvider = ({
12281
12363
  children
12282
12364
  }) => {
12365
+ const { apiKey } = useFunkitConfig();
12283
12366
  const isSandboxMode = useIsFunkitSandboxMode();
12284
12367
  const minTransferRef = useRef13(useMinTransferLimits());
12285
12368
  const ORG_ID = isSandboxMode ? STAGE_ORG_ID : PROD_ORG_ID;
@@ -12322,8 +12405,12 @@ var FunkitBrokerageProvider = ({
12322
12405
  if (!selectedBrokerageAsset || !isBrokerageAsset(selectedBrokerageAsset)) {
12323
12406
  return null;
12324
12407
  }
12325
- return getBrokerageMinMax(selectedBrokerageAsset, minTransferRef.current);
12326
- }, [selectedBrokerageAsset]);
12408
+ return getBrokerageMinMax(
12409
+ selectedBrokerageAsset,
12410
+ minTransferRef.current,
12411
+ BLUVO_MIN_DEPOSIT_BY_CUSTOMER[apiKey]
12412
+ );
12413
+ }, [selectedBrokerageAsset, apiKey]);
12327
12414
  function getAuthConnectedExchanges() {
12328
12415
  if (typeof localStorage !== "undefined") {
12329
12416
  const connections = localStorage.getItem(LOCAL_STORAGE_KEY) || void 0;
@@ -14230,11 +14317,13 @@ var useWalletLabel = () => {
14230
14317
  const { walletAddress } = useGeneralWallet();
14231
14318
  const { textCustomizations, apiKey } = useFunkitConfig();
14232
14319
  const { checkoutItem } = useCheckoutContext();
14320
+ const { t } = useFunkitTranslation();
14233
14321
  if (isOstiumCustomer(apiKey) && walletAddress && checkoutItem) {
14234
14322
  const { config } = checkoutItem.initSettings;
14235
14323
  return `Swap to ${config.targetAssetTicker}`;
14236
14324
  }
14237
- return getWalletLabel(textCustomizations, walletAddress);
14325
+ const label = getWalletLabel(t, textCustomizations, walletAddress);
14326
+ return t("sourceChange.walletDisplayLabel", { walletLabel: label });
14238
14327
  };
14239
14328
 
14240
14329
  // src/modals/CheckoutModal/useWalletAssetHoldings.ts
@@ -17959,6 +18048,7 @@ import {
17959
18048
  import React114, { useCallback as useCallback22, useEffect as useEffect32, useMemo as useMemo24, useState as useState33 } from "react";
17960
18049
 
17961
18050
  // src/components/FunCheckoutHistory/FunDirectExecutionHistoryDetail.tsx
18051
+ import { hyperEvmChain as hyperEvmChain2 } from "@funkit/chains";
17962
18052
  import {
17963
18053
  formatAddress as formatAddress4,
17964
18054
  formatTimestamp as formatTimestamp2,
@@ -18029,17 +18119,21 @@ var FunRedirectButton = ({
18029
18119
  }
18030
18120
  );
18031
18121
  };
18122
+ var normalizePath = (path) => {
18123
+ return path.startsWith("/") ? path.slice(1) : path;
18124
+ };
18032
18125
  var AddressRedirectButton = ({
18033
18126
  chainId,
18034
18127
  address,
18035
18128
  customRedirectUrl
18036
18129
  }) => {
18037
18130
  const explorerInfo = FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO12[chainId]?.explorerInfo;
18131
+ const addressPath = normalizePath(explorerInfo?.path?.address || "address");
18038
18132
  return /* @__PURE__ */ React109.createElement(
18039
18133
  FunRedirectButton,
18040
18134
  {
18041
18135
  color: "tertiaryText",
18042
- to: customRedirectUrl ?? `${explorerInfo?.url}/address/${address}`
18136
+ to: customRedirectUrl ?? `${explorerInfo?.url}/${addressPath}/${address}`
18043
18137
  }
18044
18138
  );
18045
18139
  };
@@ -18049,11 +18143,12 @@ var TransactionRedirectButton = ({
18049
18143
  customRedirectUrl
18050
18144
  }) => {
18051
18145
  const explorerInfo = FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO12[chainId]?.explorerInfo;
18146
+ const txPath = normalizePath(explorerInfo?.path?.tx || "tx");
18052
18147
  return /* @__PURE__ */ React109.createElement(
18053
18148
  FunRedirectButton,
18054
18149
  {
18055
18150
  color: "tertiaryText",
18056
- to: customRedirectUrl ?? `${explorerInfo?.url}/tx/${txHash}`
18151
+ to: customRedirectUrl ?? `${explorerInfo?.url}/${txPath}/${txHash}`
18057
18152
  }
18058
18153
  );
18059
18154
  };
@@ -18540,7 +18635,7 @@ function DirectExecutionOrderDetailSection({
18540
18635
  } = useMultiStepDirectExecutionStatus(directExecution, disabled);
18541
18636
  const { txHash: fromTxHash, fromChainId } = directExecution;
18542
18637
  const createdTime = getDirectExecutionCreatedTimeMs(directExecution);
18543
- const { toChainId } = latestDirectExecution;
18638
+ const toChainId = getLzOftDestinationChain(latestDirectExecution) ?? latestDirectExecution.toChainId;
18544
18639
  const listenerInfoTxHashes = latestDirectExecution.listenerInfo?.txHashes || [];
18545
18640
  const toTxHash = (
18546
18641
  // BE appends additional hashes outside of relay flow via listenerInfo.txHashes
@@ -18559,6 +18654,14 @@ function DirectExecutionOrderDetailSection({
18559
18654
  status: isFailed ? t("directExecution.statusFailed") : isRefunded ? t("directExecution.statusRefunded") : t("directExecution.statusFilled")
18560
18655
  })), /* @__PURE__ */ React113.createElement(Text, { color: "tertiaryText", size: "12" }, getTimestamp2(updatedTime))));
18561
18656
  }
18657
+ var lzOftChainEnumToChainId = {
18658
+ hyperliquid: hyperEvmChain2.id
18659
+ };
18660
+ function getLzOftDestinationChain(de) {
18661
+ const lzData = de.listenerInfo?.layerzeroExecutionStatusResponse?.data?.[0];
18662
+ const lzChainEnum = lzData?.pathway?.receiver.chain;
18663
+ return lzChainEnum && lzOftChainEnumToChainId[lzChainEnum]?.toString();
18664
+ }
18562
18665
 
18563
18666
  // src/hooks/queries/useRecentDirectExecutions.ts
18564
18667
  import {
@@ -19080,11 +19183,11 @@ function BrokerageTwoFA({
19080
19183
  });
19081
19184
  return quote;
19082
19185
  };
19083
- const handleFatalErrorState = (errorMessage, error) => {
19084
- logger.error(`${logPrefix2}handleFatalErrorState`, errorMessage, {
19085
- error
19186
+ const handleFatalErrorState = (error) => {
19187
+ logger.error(`${logPrefix2}handleFatalErrorState`, error, {
19188
+ bluvoContext: bluvoClient?.context
19086
19189
  });
19087
- setExecutionError(errorMessage || t("brokerage.somethingWentWrong"));
19190
+ setExecutionError(t("brokerage.somethingWentWrong"));
19088
19191
  setScreen(1 /* TWO_FACTOR */);
19089
19192
  setIsQuoteExpired(true);
19090
19193
  };
@@ -19096,19 +19199,13 @@ function BrokerageTwoFA({
19096
19199
  const handleEnterTwoFactor = async (finalOtpInput, _quoteId, attempt = 1) => {
19097
19200
  const walletId = bluvoClient.context?.walletId;
19098
19201
  if (!walletId) {
19099
- logger.error(`${logPrefix2}handleEnterTwoFactor:noWalletId`, {
19100
- walletId
19101
- });
19102
- handleFatalErrorState();
19202
+ handleFatalErrorState(new Error("No wallet ID found"));
19103
19203
  return;
19104
19204
  }
19105
19205
  const idempotencyKey = uuidv4();
19106
19206
  const quoteId = _quoteId || bluvoClient.context?.quote?.id;
19107
19207
  if (!quoteId) {
19108
- logger.error(`${logPrefix2}handleEnterTwoFactor:noQuoteId`, {
19109
- quoteId
19110
- });
19111
- handleFatalErrorState();
19208
+ handleFatalErrorState(new Error("No quote ID found"));
19112
19209
  return;
19113
19210
  }
19114
19211
  try {
@@ -19165,7 +19262,7 @@ function BrokerageTwoFA({
19165
19262
  code: error.errorCode
19166
19263
  }
19167
19264
  );
19168
- handleFatalErrorState(t("brokerage.somethingWentWrong"));
19265
+ handleFatalErrorState(error);
19169
19266
  return;
19170
19267
  }
19171
19268
  const newResponse = await bluvoExecuteWithdrawal2({
@@ -19181,7 +19278,7 @@ function BrokerageTwoFA({
19181
19278
  attempt + 1
19182
19279
  );
19183
19280
  }
19184
- handleFatalErrorState(t("brokerage.somethingWentWrong"));
19281
+ handleFatalErrorState(error);
19185
19282
  return;
19186
19283
  }
19187
19284
  case TypeEnum2.WITHDRAWAL_KYC_REQUIRED: {
@@ -19189,11 +19286,13 @@ function BrokerageTwoFA({
19189
19286
  return;
19190
19287
  }
19191
19288
  default:
19192
- handleFatalErrorState(error.message);
19289
+ handleFatalErrorState(error);
19193
19290
  return;
19194
19291
  }
19195
19292
  }
19196
- handleFatalErrorState(t("brokerage.withdrawalError"));
19293
+ handleFatalErrorState(
19294
+ error instanceof Error ? error : new Error("Unable to execute withdrawal due to unknown error")
19295
+ );
19197
19296
  }
19198
19297
  };
19199
19298
  const handleCompletion = useEffectEvent(async (finalOtpInput) => {
@@ -22430,13 +22529,86 @@ var useMeldDefaultCurrency = (paymentMethod) => {
22430
22529
  // src/hooks/queries/useMeldLimits.ts
22431
22530
  import { getMeldFiatLimits } from "@funkit/api-base";
22432
22531
  import { formatCurrencyAndStringify as formatCurrencyAndStringify6 } from "@funkit/utils";
22532
+ import { useQuery as useQuery18 } from "@tanstack/react-query";
22533
+
22534
+ // src/consts/meld.ts
22535
+ var MELD_MIN_LIMIT_BUFFER = 5;
22536
+ var getMeldProviderIconUrl = (provider) => `https://sdk-cdn.fun.xyz/images/meld/${provider.toLowerCase()}.svg`;
22537
+ var getCurrencySymbol = (currencyCode) => {
22538
+ const formatter = new Intl.NumberFormat("en-US", {
22539
+ style: "currency",
22540
+ currency: currencyCode,
22541
+ currencyDisplay: "narrowSymbol"
22542
+ });
22543
+ return formatter.formatToParts(1).find(({ type }) => type === "currency")?.value ?? currencyCode;
22544
+ };
22545
+
22546
+ // src/utils/getExchangeRate.ts
22547
+ var DEFAULT_BIPS_MARKUP = 500;
22548
+ var getExchangeRate = (currency, currencyExchangeRates, bipsMarkup = DEFAULT_BIPS_MARKUP) => {
22549
+ if (!currency || !currencyExchangeRates) {
22550
+ return void 0;
22551
+ }
22552
+ if (currency === "USD") {
22553
+ return 1;
22554
+ }
22555
+ const exchangeRate = currency in currencyExchangeRates ? currencyExchangeRates[currency] : void 0;
22556
+ if (!exchangeRate) {
22557
+ return void 0;
22558
+ }
22559
+ return exchangeRate * (1 + bipsMarkup / 1e4);
22560
+ };
22561
+
22562
+ // src/hooks/useFiatExchangeRates.ts
22563
+ import { getFiatExchangeRates } from "@funkit/api-base";
22433
22564
  import { useQuery as useQuery17 } from "@tanstack/react-query";
22565
+ function useFiatExchangeRates(enabled = true) {
22566
+ const { data, isLoading, error } = useQuery17({
22567
+ queryKey: ["fiatExchangeRates"],
22568
+ queryFn: () => getFiatExchangeRates(),
22569
+ refetchOnMount: false,
22570
+ refetchOnReconnect: false,
22571
+ refetchOnWindowFocus: false,
22572
+ gcTime: 1e3 * 60 * 60,
22573
+ // 1 hour
22574
+ enabled
22575
+ });
22576
+ return { data, isLoading, error };
22577
+ }
22578
+
22579
+ // src/hooks/useMinDeposit.ts
22580
+ function useMinCheckoutDeposit({
22581
+ currency = "USD",
22582
+ paymentMethod
22583
+ }) {
22584
+ const { checkoutItem } = useCheckoutContext();
22585
+ const { data: exchangeRates } = useFiatExchangeRates(
22586
+ !!checkoutItem && currency !== "USD"
22587
+ );
22588
+ if (!checkoutItem) {
22589
+ logger.warn("useMinCheckoutDeposit: No checkout item found");
22590
+ return 0;
22591
+ }
22592
+ const { getMinDepositUSD, ...config } = checkoutItem.initSettings.config;
22593
+ const exchangeRate = getExchangeRate(currency, exchangeRates, 0) || 1;
22594
+ const tokenChainId = config.targetChain;
22595
+ const tokenAddress = config.targetAsset;
22596
+ const minDepositUsd = getMinDepositUSD?.({ tokenChainId, tokenAddress }) || 0;
22597
+ const minDeposit = minDepositUsd * exchangeRate;
22598
+ if (paymentMethod === "card" /* CARD */ && minDeposit) {
22599
+ const meldBuffer = MELD_MIN_LIMIT_BUFFER * exchangeRate;
22600
+ return minDeposit + meldBuffer;
22601
+ }
22602
+ return minDeposit;
22603
+ }
22604
+
22605
+ // src/hooks/queries/useMeldLimits.ts
22434
22606
  var useMeldLimits = (isEnabled = true) => {
22435
22607
  const { apiKey } = useFunkitConfig();
22436
22608
  const { userIpInfo } = useFunkitUserIp();
22437
22609
  const cryptoCurrency = useMeldCryptoCurrencyCode();
22438
22610
  const countryCode = userIpInfo?.alpha2;
22439
- const query = useQuery17({
22611
+ const query = useQuery18({
22440
22612
  queryKey: ["meld", "limits", countryCode, cryptoCurrency],
22441
22613
  queryFn: async () => {
22442
22614
  if (!apiKey || !countryCode) {
@@ -22464,9 +22636,18 @@ var useMeldLimits = (isEnabled = true) => {
22464
22636
  };
22465
22637
  var useMeldLimit = (fiatCurrency) => {
22466
22638
  const query = useMeldLimits();
22639
+ const minCheckoutDeposit = useMinCheckoutDeposit({
22640
+ currency: fiatCurrency,
22641
+ paymentMethod: "card" /* CARD */
22642
+ });
22643
+ let limit = query.data?.find((limit2) => limit2.currencyCode === fiatCurrency);
22644
+ if (limit) {
22645
+ const minAmt = Math.ceil(Math.max(minCheckoutDeposit, limit.minimumAmount));
22646
+ limit = { ...limit, minimumAmount: minAmt };
22647
+ }
22467
22648
  return {
22468
22649
  ...query,
22469
- data: query.data?.find((limit) => limit.currencyCode === fiatCurrency)
22650
+ data: limit
22470
22651
  };
22471
22652
  };
22472
22653
  var useMeldLimitError = (amount, fiatCurrency) => {
@@ -22508,23 +22689,6 @@ var useMeldLimitError = (amount, fiatCurrency) => {
22508
22689
  return void 0;
22509
22690
  };
22510
22691
 
22511
- // src/hooks/useFiatExchangeRates.ts
22512
- import { getFiatExchangeRates } from "@funkit/api-base";
22513
- import { useQuery as useQuery18 } from "@tanstack/react-query";
22514
- function useFiatExchangeRates(enabled = true) {
22515
- const { data, isLoading, error } = useQuery18({
22516
- queryKey: ["fiatExchangeRates"],
22517
- queryFn: () => getFiatExchangeRates(),
22518
- refetchOnMount: false,
22519
- refetchOnReconnect: false,
22520
- refetchOnWindowFocus: false,
22521
- gcTime: 1e3 * 60 * 60,
22522
- // 1 hour
22523
- enabled
22524
- });
22525
- return { data, isLoading, error };
22526
- }
22527
-
22528
22692
  // src/modals/CheckoutModal/InputAmount/InputAmountLoaded.tsx
22529
22693
  import {
22530
22694
  FlagKey as FlagKey20,
@@ -23478,22 +23642,6 @@ var YouPayYouReceiveBottomBarLayoutWrapper = ({
23478
23642
  );
23479
23643
  };
23480
23644
 
23481
- // src/utils/getExchangeRate.ts
23482
- var DEFAULT_BIPS_MARKUP = 500;
23483
- var getExchangeRate = (currency, currencyExchangeRates, bipsMarkup = DEFAULT_BIPS_MARKUP) => {
23484
- if (!currency || !currencyExchangeRates) {
23485
- return void 0;
23486
- }
23487
- if (currency === "USD") {
23488
- return 1;
23489
- }
23490
- const exchangeRate = currency in currencyExchangeRates ? currencyExchangeRates[currency] : void 0;
23491
- if (!exchangeRate) {
23492
- return void 0;
23493
- }
23494
- return exchangeRate * (1 + bipsMarkup / 1e4);
23495
- };
23496
-
23497
23645
  // src/components/Icons/SwitchIcon.tsx
23498
23646
  import React156 from "react";
23499
23647
  var SwitchIcon = () => {
@@ -24315,19 +24463,6 @@ import {
24315
24463
  formatCurrencyAndStringify as formatCurrencyAndStringify8
24316
24464
  } from "@funkit/utils";
24317
24465
  import React159 from "react";
24318
-
24319
- // src/consts/meld.ts
24320
- var getMeldProviderIconUrl = (provider) => `https://sdk-cdn.fun.xyz/images/meld/${provider.toLowerCase()}.svg`;
24321
- var getCurrencySymbol = (currencyCode) => {
24322
- const formatter = new Intl.NumberFormat("en-US", {
24323
- style: "currency",
24324
- currency: currencyCode,
24325
- currencyDisplay: "narrowSymbol"
24326
- });
24327
- return formatter.formatToParts(1).find(({ type }) => type === "currency")?.value ?? currencyCode;
24328
- };
24329
-
24330
- // src/components/MeldQuoteItem/MeldQuoteItem.tsx
24331
24466
  var providerLabelMap = {
24332
24467
  COINBASEPAY: "Coinbase Pay",
24333
24468
  MOONPAY: "MoonPay",
@@ -24697,7 +24832,7 @@ var useMeldQuotes = (sourceAmount, fiatCurrency, meldEnabled = true) => {
24697
24832
  // src/modals/CheckoutModal/SourceChange/useUpdateSourceAssetForCard.ts
24698
24833
  import {
24699
24834
  FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO13,
24700
- hyperEvmChain as hyperEvmChain2,
24835
+ hyperEvmChain as hyperEvmChain3,
24701
24836
  katanaChain
24702
24837
  } from "@funkit/chains";
24703
24838
  import { getTokenAddressBySymbolAndChainId as getTokenAddressBySymbolAndChainId2 } from "@funkit/core";
@@ -24716,7 +24851,7 @@ var pickSourceAssetForCard = async (checkoutItem, userIpInfo) => {
24716
24851
  zksync2.id.toString(),
24717
24852
  mantle.id.toString(),
24718
24853
  katanaChain.id.toString(),
24719
- hyperEvmChain2.id.toString()
24854
+ hyperEvmChain3.id.toString()
24720
24855
  ]
24721
24856
  );
24722
24857
  const wethAddrOnTargetChain = (await getTokenAddressBySymbolAndChainId2("weth", moonpayChainId)).toLowerCase();
@@ -26314,7 +26449,7 @@ function MeldRedirect({
26314
26449
  import {
26315
26450
  FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST as FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST2,
26316
26451
  etherealChain,
26317
- hyperEvmChain as hyperEvmChain3
26452
+ hyperEvmChain as hyperEvmChain4
26318
26453
  } from "@funkit/chains";
26319
26454
  import { formatCurrencyAndStringify as formatCurrencyAndStringify11, isTokenEquivalent as isTokenEquivalent8 } from "@funkit/utils";
26320
26455
  import React173, { useEffect as useEffect45, useMemo as useMemo39, useState as useState53 } from "react";
@@ -27089,7 +27224,7 @@ function isTreatedAsNativeToken(apiKey, asset, dynamicTargetAssetCandidates) {
27089
27224
  }
27090
27225
  if (isHyenaCustomer(apiKey)) {
27091
27226
  if (isTokenEquivalent8({
27092
- firstTokenChainId: hyperEvmChain3.id.toString(),
27227
+ firstTokenChainId: hyperEvmChain4.id.toString(),
27093
27228
  firstTokenAddress: "0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34",
27094
27229
  secondTokenChainId: asset.pickedChainId,
27095
27230
  secondTokenAddress: asset.tokenAddress
@@ -27135,6 +27270,10 @@ var DefiPurchaseSection = ({ config }) => {
27135
27270
  );
27136
27271
  };
27137
27272
 
27273
+ // src/modals/CheckoutModal/SourceChange/sourceChange.css.ts
27274
+ var WITH_EMPTY_STATE_DATA_ATTRIBUTE = "data-with-empty-state";
27275
+ var emptyStateStyles = "_14kf6rb0";
27276
+
27138
27277
  // src/modals/CheckoutModal/SourceChange/SourceChange.tsx
27139
27278
  var SourceChangeInfo = {
27140
27279
  Component: SourceChange,
@@ -27465,15 +27604,36 @@ function SourceChange({
27465
27604
  );
27466
27605
  }
27467
27606
  const bottomSectionRef = useBottomSectionRef();
27468
- return /* @__PURE__ */ React175.createElement(React175.Fragment, null, isDefiMode ? /* @__PURE__ */ React175.createElement(Box, { display: "flex", flexDirection: "column", gap: "28" }, /* @__PURE__ */ React175.createElement(DefiPurchaseSection, { config: checkoutItem.initSettings.config }), /* @__PURE__ */ React175.createElement(Box, { display: "flex", flexDirection: "column", gap: "16" }, /* @__PURE__ */ React175.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React175.createElement(Text, { size: "13", color: "secondaryText" }, t("sourceChange.selectPaymentMethod")), preferred.map(renderSource)), /* @__PURE__ */ React175.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React175.createElement(Text, { size: "13", color: "secondaryText" }, t("sourceChange.moreOptions")), moreSources.map(renderSource)))) : /* @__PURE__ */ React175.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, preferred.map(renderSource), preferred.length > 0 && moreSources.length > 0 && /* @__PURE__ */ React175.createElement(
27469
- FunDivider,
27607
+ return /* @__PURE__ */ React175.createElement(React175.Fragment, null, isDefiMode ? /* @__PURE__ */ React175.createElement(Box, { display: "flex", flexDirection: "column", gap: "28" }, /* @__PURE__ */ React175.createElement(DefiPurchaseSection, { config: checkoutItem.initSettings.config }), /* @__PURE__ */ React175.createElement(Box, { display: "flex", flexDirection: "column", gap: "16" }, /* @__PURE__ */ React175.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React175.createElement(Text, { size: "13", color: "secondaryText" }, t("sourceChange.selectPaymentMethod")), preferred.map(renderSource)), /* @__PURE__ */ React175.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React175.createElement(Text, { size: "13", color: "secondaryText" }, t("sourceChange.moreOptions")), moreSources.map(renderSource)))) : /* @__PURE__ */ React175.createElement(React175.Fragment, null, /* @__PURE__ */ React175.createElement(
27608
+ Box,
27470
27609
  {
27471
- label: t("sourceChange.more"),
27472
- marginTop: "8",
27473
- marginBottom: "8",
27474
- borderColor: "selectedOptionBorder"
27610
+ display: "flex",
27611
+ flexDirection: "column",
27612
+ gap: "4",
27613
+ ...{
27614
+ [WITH_EMPTY_STATE_DATA_ATTRIBUTE]: true
27615
+ }
27616
+ },
27617
+ preferred.map(renderSource),
27618
+ preferred.length > 0 && moreSources.length > 0 && /* @__PURE__ */ React175.createElement(
27619
+ FunDivider,
27620
+ {
27621
+ label: t("sourceChange.more"),
27622
+ marginTop: "8",
27623
+ marginBottom: "8",
27624
+ borderColor: "selectedOptionBorder"
27625
+ }
27626
+ ),
27627
+ moreSources.map(renderSource),
27628
+ /* @__PURE__ */ React175.createElement(PayPal, null)
27629
+ ), /* @__PURE__ */ React175.createElement(Box, { className: emptyStateStyles }, /* @__PURE__ */ React175.createElement(
27630
+ FunNoResults,
27631
+ {
27632
+ text: t("checkout.noAvailableTokensMessage"),
27633
+ title: t("checkout.noAvailableTokens"),
27634
+ variant: "actionable"
27475
27635
  }
27476
- ), moreSources.map(renderSource), /* @__PURE__ */ React175.createElement(PayPal, null)), bottomSectionRef && createPortal18(
27636
+ ))), bottomSectionRef && createPortal18(
27477
27637
  /* @__PURE__ */ React175.createElement(
27478
27638
  Dialog.BottomBar,
27479
27639
  {
@@ -30470,32 +30630,42 @@ function usePaymentMethodIcon(paymentMethod, iconSize = DEFAULT_PAYMENT_METHOD_I
30470
30630
  }
30471
30631
  var usePaymentMethodInfoLabel = (methodInfo, iconSize = DEFAULT_PAYMENT_METHOD_ICON_SIZE) => {
30472
30632
  const { textCustomizations } = useFunkitConfig();
30633
+ const { t } = useFunkitTranslation();
30473
30634
  const paymentIcon = usePaymentMethodIcon(methodInfo.paymentMethod, iconSize);
30474
30635
  if (methodInfo.paymentMethod === "card" /* CARD */) {
30475
30636
  return { text: "", icon: /* @__PURE__ */ React209.createElement(CombinedCreditCardOptionsIcon, null) };
30476
30637
  }
30477
30638
  if (methodInfo.paymentMethod === "brokerage" /* BROKERAGE */) {
30478
30639
  const icon2 = getExchangeIcon(methodInfo.exchange, iconSize);
30479
- return { text: methodInfo.title, icon: icon2 };
30640
+ const brokerageLabel = methodInfo.title;
30641
+ const text = t("sourceChange.brokerageDisplayLabel", {
30642
+ brokerageLabel
30643
+ });
30644
+ return { text, icon: icon2 };
30480
30645
  }
30481
30646
  if (methodInfo.paymentMethod === "virtual_bank" /* VIRTUAL_BANK */) {
30647
+ const virtualFiatLabel = getFiatAccountLabel(
30648
+ methodInfo.title,
30649
+ methodInfo.matchingFiatAccount
30650
+ );
30651
+ const text = t("sourceChange.virtualFiatDisplayLabel", {
30652
+ virtualFiatLabel
30653
+ });
30654
+ const icon2 = /* @__PURE__ */ React209.createElement(
30655
+ PaymentMethodIcon,
30656
+ {
30657
+ keyIconSize: iconSize,
30658
+ paymentIcon: /* @__PURE__ */ React209.createElement(BankIconActive, { size: iconSize })
30659
+ }
30660
+ );
30482
30661
  return {
30483
- text: getFiatAccountLabel(
30484
- methodInfo.title,
30485
- methodInfo.matchingFiatAccount
30486
- ),
30487
- icon: /* @__PURE__ */ React209.createElement(
30488
- PaymentMethodIcon,
30489
- {
30490
- keyIconSize: iconSize,
30491
- paymentIcon: /* @__PURE__ */ React209.createElement(BankIconActive, { size: iconSize })
30492
- }
30493
- )
30662
+ text,
30663
+ icon: icon2
30494
30664
  };
30495
30665
  }
30496
30666
  const icon = /* @__PURE__ */ React209.createElement(Box, { display: "flex", alignItems: "center", justifyContent: "center" }, paymentIcon);
30497
30667
  if (methodInfo.paymentMethod === "balance" /* ACCOUNT_BALANCE */) {
30498
- const label = getWalletLabel(textCustomizations, methodInfo.description);
30668
+ const label = getWalletLabel(t, textCustomizations, methodInfo.description);
30499
30669
  return { text: label, icon };
30500
30670
  }
30501
30671
  return { text: methodInfo.title, icon };
@@ -35482,6 +35652,87 @@ var useUpdateActiveFunkitCheckout = () => {
35482
35652
  import i18n from "i18next";
35483
35653
  import { initReactI18next } from "react-i18next";
35484
35654
 
35655
+ // src/locales/translations/buy_en.json
35656
+ var buy_en_default = {
35657
+ inputAmount: {
35658
+ depositMaxBalance: "Buy with max balance",
35659
+ maximumDeposit: "{{amount}} maximum purchase",
35660
+ minimumDeposit: "{{amount}} minimum purchase"
35661
+ },
35662
+ checkoutConfirmation: {
35663
+ depositMaxBalance: "Buy with max balance"
35664
+ },
35665
+ payment: {
35666
+ depositWithPayPal: "Buy with PayPal",
35667
+ depositWithCard: "Buy with Card"
35668
+ },
35669
+ common: {
35670
+ depositsLive: "{{tokenName}} purchases are live!",
35671
+ depositsLiveTryNow: "{{tokenName}} purchases are live! <TryNowLink>Try now</TryNowLink>"
35672
+ },
35673
+ disclaimer: {
35674
+ cardDisclaimer: "This transaction occurs in two steps. MoonPay powers only your purchase of {{depositToken}} ({{sourceChainName}}) which {{orgName}} then {{tokenActionDescription}}."
35675
+ },
35676
+ transferToken: {
35677
+ minDepositAmountTooltip: "Minimum purchase amount required for the selected chain.",
35678
+ yourDepositAddress: "Your purchase address",
35679
+ depositAddressOriginalRecipient: "Send any accepted token to this address",
35680
+ depositAddressUniversal: "Send any accepted token to this address and it will auto swap to {{targetToken}} in your account"
35681
+ },
35682
+ transaction: {
35683
+ depositSuccessful: "Purchase successful",
35684
+ depositSuccessfulDescription: "Your funds were successfully received.",
35685
+ depositReceivedPending: "Purchase received and pending...",
35686
+ depositCompleted: "Purchase completed",
35687
+ depositReceivedProcessing: "Purchase is processing...",
35688
+ depositWillBeCredited: "Your purchase will be credited to your account shortly.",
35689
+ depositHasBeenCredited: "Your purchase has been credited to your account.",
35690
+ depositRefundedOrReprocessed: "Your purchase has been refunded or reprocessed. Feel free to reach out for an update.",
35691
+ issueOccurredWithDeposit: "An issue occurred with your purchase. Please try again.",
35692
+ depositDidntCompleteFull: `Your purchase didn't complete. <ContactSupportLink text="Contact us" /> for more info.`,
35693
+ depositDelayedFundsSafeFull: 'Your purchase is delayed but funds are safe. <ContactSupportLink text="Contact us" /> for more info.',
35694
+ depositExpired: "Purchase expired",
35695
+ depositDidntCompleteError: "Your purchase didn't complete due to an error.",
35696
+ depositDidntCompleteFundsSafe: "Your purchase didn't complete. Your funds are safe your order will process shortly. Feel free to reach out for an update.",
35697
+ depositBeingProcessedFull: 'Your purchase is being processed. <ContactSupportLink text="Contact us" /> for more info.',
35698
+ depositingIntoAccount: "Purchasing into your account...",
35699
+ waitingForExchangeToSendFunds: "Waiting for {{exchangeName}} to send funds..."
35700
+ },
35701
+ checkoutHistory: {
35702
+ depositAddress: "Purchase address",
35703
+ newDeposit: "Buy More"
35704
+ },
35705
+ directExecution: {
35706
+ depositTx: "Purchase tx"
35707
+ },
35708
+ directExecutionNotif: {
35709
+ depositTransactionInitiated: "Purchase transaction initiated",
35710
+ depositCompletedNotification: "You will receive a notification here once the purchase is completed."
35711
+ },
35712
+ fees: {
35713
+ yourGasCostsTooltip: "Amount paid to send assets to your purchase address."
35714
+ },
35715
+ virtualFiatAccount: {
35716
+ transferDetails: "You will be provided with the transfer details for SEPA payments. Once processed, the funds you will send to the account will be automatically purchased to your {{appName}} account."
35717
+ },
35718
+ textCustomizations: {
35719
+ virtualFiat: "Buy with SEPA",
35720
+ transferTokens: "Buy with QR Code",
35721
+ debitOrCredit: "Buy with Card",
35722
+ brokerageOrExchange: "Buy with Exchange"
35723
+ },
35724
+ sourceChange: {
35725
+ brokerageDisplayLabel: "Buy with {{brokerageLabel}}",
35726
+ walletDisplayLabel: "Buy with Wallet",
35727
+ virtualFiatDisplayLabel: "Buy with SEPA"
35728
+ },
35729
+ relay: {
35730
+ confirmTransaction: "Confirm transaction",
35731
+ waitingForConfirmation: "Waiting for confirmation",
35732
+ transactionConfirmed: "Transaction confirmed"
35733
+ }
35734
+ };
35735
+
35485
35736
  // src/locales/translations/en.json
35486
35737
  var en_default = {
35487
35738
  checkout: {
@@ -35489,7 +35740,9 @@ var en_default = {
35489
35740
  noAvailableTokensMessage: "You don't have any crypto tokens in your wallet. Top up or transfer crypto to your wallet to continue.",
35490
35741
  topUpWallet: "Top up wallet",
35491
35742
  refundProcessing: "Funds were withdrawn, but the transaction didn't complete. A refund is being processed.",
35492
- orderRefunded: "Your order was refunded."
35743
+ orderRefunded: "Your order was refunded.",
35744
+ walletLabelTemplate: "{{walletLabel}} ({{formattedAddress}})",
35745
+ connectWalletLabelTemplate: "Connect {{walletLabel}}"
35493
35746
  },
35494
35747
  inputAmount: {
35495
35748
  availableBalanceTooltip: "Your available balance after fees",
@@ -35903,7 +36156,10 @@ var en_default = {
35903
36156
  sourceChange: {
35904
36157
  selectPaymentMethod: "Select payment method",
35905
36158
  moreOptions: "More options",
35906
- more: "more"
36159
+ more: "more",
36160
+ walletDisplayLabel: "{{walletLabel}}",
36161
+ brokerageDisplayLabel: "{{brokerageLabel}}",
36162
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
35907
36163
  },
35908
36164
  quote: {
35909
36165
  preparingYourQuote: "Preparing your quote...",
@@ -35993,7 +36249,9 @@ var es_default = {
35993
36249
  noAvailableTokensMessage: "No tienes ning\xFAn token cripto en tu billetera. Recarga o transfiere cripto a tu billetera para continuar.",
35994
36250
  topUpWallet: "Recargar billetera",
35995
36251
  refundProcessing: "Los fondos fueron retirados, pero la transacci\xF3n no se complet\xF3. Se est\xE1 procesando un reembolso.",
35996
- orderRefunded: "Tu pedido fue reembolsado."
36252
+ orderRefunded: "Tu pedido fue reembolsado.",
36253
+ walletLabelTemplate: "{{walletLabel}} ({{formattedAddress}})",
36254
+ connectWalletLabelTemplate: "Conectar {{walletLabel}}"
35997
36255
  },
35998
36256
  inputAmount: {
35999
36257
  availableBalanceTooltip: "Tu saldo disponible despu\xE9s de las comisiones",
@@ -36407,7 +36665,10 @@ var es_default = {
36407
36665
  sourceChange: {
36408
36666
  selectPaymentMethod: "Seleccionar m\xE9todo de pago",
36409
36667
  moreOptions: "M\xE1s opciones",
36410
- more: "m\xE1s"
36668
+ more: "m\xE1s",
36669
+ walletDisplayLabel: "{{walletLabel}}",
36670
+ brokerageDisplayLabel: "{{brokerageLabel}}",
36671
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
36411
36672
  },
36412
36673
  quote: {
36413
36674
  preparingYourQuote: "Preparando tu cotizaci\xF3n...",
@@ -36497,7 +36758,9 @@ var ja_default = {
36497
36758
  noAvailableTokensMessage: "\u30A6\u30A9\u30EC\u30C3\u30C8\u306B\u6697\u53F7\u8CC7\u7523\u30C8\u30FC\u30AF\u30F3\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u7D9A\u884C\u3059\u308B\u306B\u306F\u3001\u30A6\u30A9\u30EC\u30C3\u30C8\u306B\u6697\u53F7\u8CC7\u7523\u3092\u30C1\u30E3\u30FC\u30B8\u307E\u305F\u306F\u9001\u91D1\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
36498
36759
  topUpWallet: "\u30A6\u30A9\u30EC\u30C3\u30C8\u306B\u30C1\u30E3\u30FC\u30B8",
36499
36760
  refundProcessing: "\u8CC7\u91D1\u306F\u5F15\u304D\u51FA\u3055\u308C\u307E\u3057\u305F\u304C\u3001\u53D6\u5F15\u306F\u5B8C\u4E86\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u8FD4\u91D1\u51E6\u7406\u4E2D\u3067\u3059\u3002",
36500
- orderRefunded: "\u3054\u6CE8\u6587\u306F\u8FD4\u91D1\u3055\u308C\u307E\u3057\u305F\u3002"
36761
+ orderRefunded: "\u3054\u6CE8\u6587\u306F\u8FD4\u91D1\u3055\u308C\u307E\u3057\u305F\u3002",
36762
+ walletLabelTemplate: "{{walletLabel}} ({{formattedAddress}})",
36763
+ connectWalletLabelTemplate: "{{walletLabel}}\u3092\u63A5\u7D9A"
36501
36764
  },
36502
36765
  inputAmount: {
36503
36766
  availableBalanceTooltip: "\u624B\u6570\u6599\u3092\u5DEE\u3057\u5F15\u3044\u305F\u5F8C\u306E\u5229\u7528\u53EF\u80FD\u6B8B\u9AD8",
@@ -36911,7 +37174,10 @@ var ja_default = {
36911
37174
  sourceChange: {
36912
37175
  selectPaymentMethod: "\u652F\u6255\u3044\u65B9\u6CD5\u3092\u9078\u629E",
36913
37176
  moreOptions: "\u305D\u306E\u4ED6\u306E\u30AA\u30D7\u30B7\u30E7\u30F3",
36914
- more: "\u3082\u3063\u3068\u898B\u308B"
37177
+ more: "\u3082\u3063\u3068\u898B\u308B",
37178
+ walletDisplayLabel: "{{walletLabel}}",
37179
+ brokerageDisplayLabel: "{{brokerageLabel}}",
37180
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
36915
37181
  },
36916
37182
  quote: {
36917
37183
  preparingYourQuote: "\u898B\u7A4D\u3082\u308A\u3092\u6E96\u5099\u4E2D...",
@@ -37001,7 +37267,9 @@ var ko_default = {
37001
37267
  noAvailableTokensMessage: "\uC9C0\uAC11\uC5D0 \uC554\uD638\uD654\uD3D0 \uD1A0\uD070\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \uACC4\uC18D\uD558\uB824\uBA74 \uC9C0\uAC11\uC5D0 \uC554\uD638\uD654\uD3D0\uB97C \uCDA9\uC804\uD558\uAC70\uB098 \uC804\uC1A1\uD558\uC138\uC694.",
37002
37268
  topUpWallet: "\uC9C0\uAC11 \uCDA9\uC804",
37003
37269
  refundProcessing: "\uC790\uAE08\uC774 \uCD9C\uAE08\uB418\uC5C8\uC9C0\uB9CC \uAC70\uB798\uAC00 \uC644\uB8CC\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uD658\uBD88\uC774 \uCC98\uB9AC\uB418\uACE0 \uC788\uC2B5\uB2C8\uB2E4.",
37004
- orderRefunded: "\uC8FC\uBB38\uC774 \uD658\uBD88\uB418\uC5C8\uC2B5\uB2C8\uB2E4."
37270
+ orderRefunded: "\uC8FC\uBB38\uC774 \uD658\uBD88\uB418\uC5C8\uC2B5\uB2C8\uB2E4.",
37271
+ walletLabelTemplate: "{{walletLabel}} ({{formattedAddress}})",
37272
+ connectWalletLabelTemplate: "{{walletLabel}} \uC5F0\uACB0"
37005
37273
  },
37006
37274
  inputAmount: {
37007
37275
  availableBalanceTooltip: "\uC218\uC218\uB8CC\uB97C \uC81C\uC678\uD55C \uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uC794\uC561",
@@ -37415,7 +37683,10 @@ var ko_default = {
37415
37683
  sourceChange: {
37416
37684
  selectPaymentMethod: "\uACB0\uC81C \uBC29\uBC95 \uC120\uD0DD",
37417
37685
  moreOptions: "\uB354 \uB9CE\uC740 \uC635\uC158",
37418
- more: "\uB354 \uBCF4\uAE30"
37686
+ more: "\uB354 \uBCF4\uAE30",
37687
+ walletDisplayLabel: "{{walletLabel}}",
37688
+ brokerageDisplayLabel: "{{brokerageLabel}}",
37689
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
37419
37690
  },
37420
37691
  quote: {
37421
37692
  preparingYourQuote: "\uACAC\uC801 \uC900\uBE44 \uC911...",
@@ -37505,7 +37776,9 @@ var ru_default = {
37505
37776
  noAvailableTokensMessage: "\u0423 \u0432\u0430\u0441 \u043D\u0435\u0442 \u043A\u0440\u0438\u043F\u0442\u043E\u0432\u0430\u043B\u044E\u0442\u043D\u044B\u0445 \u0442\u043E\u043A\u0435\u043D\u043E\u0432 \u0432 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0435. \u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u0438\u043B\u0438 \u043F\u0435\u0440\u0435\u0432\u0435\u0434\u0438\u0442\u0435 \u043A\u0440\u0438\u043F\u0442\u043E\u0432\u0430\u043B\u044E\u0442\u0443 \u0432 \u043A\u043E\u0448\u0435\u043B\u0451\u043A \u0434\u043B\u044F \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0435\u043D\u0438\u044F.",
37506
37777
  topUpWallet: "\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u043A\u043E\u0448\u0435\u043B\u0451\u043A",
37507
37778
  refundProcessing: "\u0421\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0431\u044B\u043B\u0438 \u0432\u044B\u0432\u0435\u0434\u0435\u043D\u044B, \u043D\u043E \u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u044F \u043D\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0430. \u041E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0432\u043E\u0437\u0432\u0440\u0430\u0442.",
37508
- orderRefunded: "\u0412\u0430\u0448 \u0437\u0430\u043A\u0430\u0437 \u0431\u044B\u043B \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0451\u043D."
37779
+ orderRefunded: "\u0412\u0430\u0448 \u0437\u0430\u043A\u0430\u0437 \u0431\u044B\u043B \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0451\u043D.",
37780
+ walletLabelTemplate: "{{walletLabel}} ({{formattedAddress}})",
37781
+ connectWalletLabelTemplate: "\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C {{walletLabel}}"
37509
37782
  },
37510
37783
  inputAmount: {
37511
37784
  availableBalanceTooltip: "\u0412\u0430\u0448 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0439 \u0431\u0430\u043B\u0430\u043D\u0441 \u043F\u043E\u0441\u043B\u0435 \u043A\u043E\u043C\u0438\u0441\u0441\u0438\u0439",
@@ -37919,7 +38192,10 @@ var ru_default = {
37919
38192
  sourceChange: {
37920
38193
  selectPaymentMethod: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u043F\u043E\u0441\u043E\u0431 \u043E\u043F\u043B\u0430\u0442\u044B",
37921
38194
  moreOptions: "\u0411\u043E\u043B\u044C\u0448\u0435 \u043E\u043F\u0446\u0438\u0439",
37922
- more: "\u0431\u043E\u043B\u044C\u0448\u0435"
38195
+ more: "\u0431\u043E\u043B\u044C\u0448\u0435",
38196
+ walletDisplayLabel: "{{walletLabel}}",
38197
+ brokerageDisplayLabel: "{{brokerageLabel}}",
38198
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
37923
38199
  },
37924
38200
  quote: {
37925
38201
  preparingYourQuote: "\u041F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043A\u0430 \u0432\u0430\u0448\u0435\u0439 \u043A\u043E\u0442\u0438\u0440\u043E\u0432\u043A\u0438...",
@@ -38009,7 +38285,9 @@ var tr_default = {
38009
38285
  noAvailableTokensMessage: "C\xFCzdan\u0131n\u0131zda kripto token bulunmamaktad\u0131r. Devam etmek i\xE7in c\xFCzdan\u0131n\u0131za para yat\u0131r\u0131n veya kripto transfer edin.",
38010
38286
  topUpWallet: "C\xFCzdana para y\xFCkle",
38011
38287
  refundProcessing: "Fonlar \xE7ekildi, ancak i\u015Flem tamamlanmad\u0131. \u0130ade i\u015Flemi yap\u0131l\u0131yor.",
38012
- orderRefunded: "Sipari\u015Finiz iade edildi."
38288
+ orderRefunded: "Sipari\u015Finiz iade edildi.",
38289
+ walletLabelTemplate: "{{walletLabel}} ({{formattedAddress}})",
38290
+ connectWalletLabelTemplate: "{{walletLabel}} Ba\u011Fla"
38013
38291
  },
38014
38292
  inputAmount: {
38015
38293
  availableBalanceTooltip: "\xDCcretler sonras\u0131 kullan\u0131labilir bakiyeniz",
@@ -38423,7 +38701,10 @@ var tr_default = {
38423
38701
  sourceChange: {
38424
38702
  selectPaymentMethod: "\xD6deme y\xF6ntemi se\xE7in",
38425
38703
  moreOptions: "Daha fazla se\xE7enek",
38426
- more: "daha fazla"
38704
+ more: "daha fazla",
38705
+ walletDisplayLabel: "{{walletLabel}}",
38706
+ brokerageDisplayLabel: "{{brokerageLabel}}",
38707
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
38427
38708
  },
38428
38709
  quote: {
38429
38710
  preparingYourQuote: "Teklifiniz haz\u0131rlan\u0131yor...",
@@ -38513,7 +38794,9 @@ var zh_default = {
38513
38794
  noAvailableTokensMessage: "\u60A8\u7684\u94B1\u5305\u4E2D\u6CA1\u6709\u4EFB\u4F55\u52A0\u5BC6\u4EE3\u5E01\u3002\u5145\u503C\u6216\u8F6C\u8D26\u52A0\u5BC6\u8D27\u5E01\u5230\u60A8\u7684\u94B1\u5305\u4EE5\u7EE7\u7EED\u3002",
38514
38795
  topUpWallet: "\u5145\u503C\u94B1\u5305",
38515
38796
  refundProcessing: "\u8D44\u91D1\u5DF2\u63D0\u53D6\uFF0C\u4F46\u4EA4\u6613\u672A\u5B8C\u6210\u3002\u6B63\u5728\u5904\u7406\u9000\u6B3E\u3002",
38516
- orderRefunded: "\u60A8\u7684\u8BA2\u5355\u5DF2\u9000\u6B3E\u3002"
38797
+ orderRefunded: "\u60A8\u7684\u8BA2\u5355\u5DF2\u9000\u6B3E\u3002",
38798
+ walletLabelTemplate: "{{walletLabel}} ({{formattedAddress}})",
38799
+ connectWalletLabelTemplate: "\u8FDE\u63A5 {{walletLabel}}"
38517
38800
  },
38518
38801
  inputAmount: {
38519
38802
  availableBalanceTooltip: "\u6263\u9664\u624B\u7EED\u8D39\u540E\u7684\u53EF\u7528\u4F59\u989D",
@@ -38927,7 +39210,10 @@ var zh_default = {
38927
39210
  sourceChange: {
38928
39211
  selectPaymentMethod: "\u9009\u62E9\u652F\u4ED8\u65B9\u5F0F",
38929
39212
  moreOptions: "\u66F4\u591A\u9009\u9879",
38930
- more: "\u66F4\u591A"
39213
+ more: "\u66F4\u591A",
39214
+ walletDisplayLabel: "{{walletLabel}}",
39215
+ brokerageDisplayLabel: "{{brokerageLabel}}",
39216
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
38931
39217
  },
38932
39218
  quote: {
38933
39219
  preparingYourQuote: "\u6B63\u5728\u51C6\u5907\u60A8\u7684\u62A5\u4EF7...",
@@ -39019,7 +39305,8 @@ var localeMapping = {
39019
39305
  ja: "ja",
39020
39306
  tr: "tr",
39021
39307
  es: "es",
39022
- ru: "ru"
39308
+ ru: "ru",
39309
+ buy_en: "buy_en"
39023
39310
  };
39024
39311
  var resources = {
39025
39312
  en: {
@@ -39030,7 +39317,8 @@ var resources = {
39030
39317
  ja: { translation: ja_default },
39031
39318
  tr: { translation: tr_default },
39032
39319
  es: { translation: es_default },
39033
- ru: { translation: ru_default }
39320
+ ru: { translation: ru_default },
39321
+ buy_en: { translation: buy_en_default }
39034
39322
  };
39035
39323
  i18n.use(initReactI18next).init({
39036
39324
  resources,