@funkit/connect 6.15.5 → 6.15.7

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";
@@ -1514,7 +1514,7 @@ function setFunkitConnectVersion({ version }) {
1514
1514
  localStorage.setItem(storageKey, version);
1515
1515
  }
1516
1516
  function getCurrentSdkVersion() {
1517
- return "6.15.5";
1517
+ return "6.15.7";
1518
1518
  }
1519
1519
  function useFingerprint() {
1520
1520
  const fingerprint = useCallback2(() => {
@@ -1886,6 +1886,7 @@ var useFunkitSwitchChains = ({
1886
1886
  import { exhaustiveCheck, formatAddress as formatAddress2 } from "@funkit/utils";
1887
1887
 
1888
1888
  // src/consts/bluvo.tsx
1889
+ import { ETHEREAL_API_KEY } from "@funkit/api-base";
1889
1890
  import React15 from "react";
1890
1891
 
1891
1892
  // src/components/Icons/BinanceIcon.tsx
@@ -2027,6 +2028,9 @@ var KrakenIcon = ({ size = 24 }) => {
2027
2028
  };
2028
2029
 
2029
2030
  // src/consts/bluvo.tsx
2031
+ var BLUVO_MIN_DEPOSIT_BY_CUSTOMER = {
2032
+ [ETHEREAL_API_KEY]: 15
2033
+ };
2030
2034
  var SUPPORTED_EXCHANGES = [
2031
2035
  { exchange: "coinbase" /* Coinbase */, status: "live" /* Live */ },
2032
2036
  {
@@ -2405,7 +2409,7 @@ import {
2405
2409
  BANKR_API_KEY,
2406
2410
  BASED_API_KEY,
2407
2411
  BSX_API_KEY,
2408
- ETHEREAL_API_KEY,
2412
+ ETHEREAL_API_KEY as ETHEREAL_API_KEY2,
2409
2413
  HYENA_API_KEY,
2410
2414
  HYPERBEAT_API_KEY,
2411
2415
  HYPERDASH_API_KEY,
@@ -2426,7 +2430,7 @@ function isBankrCustomer(apiKey) {
2426
2430
  return apiKey === BANKR_API_KEY;
2427
2431
  }
2428
2432
  function isEtherealCustomer(apiKey) {
2429
- return apiKey === ETHEREAL_API_KEY;
2433
+ return apiKey === ETHEREAL_API_KEY2;
2430
2434
  }
2431
2435
  function isKatanaCustomer(apiKey) {
2432
2436
  return apiKey === KATANA_API_KEY;
@@ -2455,7 +2459,7 @@ import {
2455
2459
  BASED_API_KEY as BASED_API_KEY2,
2456
2460
  BULLPEN_API_KEY,
2457
2461
  CAMBRIA_API_KEY,
2458
- ETHEREAL_API_KEY as ETHEREAL_API_KEY2,
2462
+ ETHEREAL_API_KEY as ETHEREAL_API_KEY3,
2459
2463
  FELIX_API_KEY,
2460
2464
  HYENA_API_KEY as HYENA_API_KEY2,
2461
2465
  HYPERBEAT_API_KEY as HYPERBEAT_API_KEY2,
@@ -2549,7 +2553,7 @@ var COMMON_SUPPORT_CHAINS_AND_ASSETS = {
2549
2553
  // mainnet
2550
2554
  1: ["USDC", "DAI", "USDT", "ETH", "WETH", "POL", "MATIC", "CBBTC", "USDe"],
2551
2555
  // base
2552
- 8453: ["USDC", "USDT", "DAI", "ETH", "WETH", "CBBTC"],
2556
+ 8453: ["USDC", "USDT", "DAI", "ETH", "WETH", "CBBTC", "USDe"],
2553
2557
  // arbitrum
2554
2558
  42161: ["USDC", "USDT", "DAI", "ETH", "WETH", "ARB", "USDe"],
2555
2559
  // polygon
@@ -2557,7 +2561,7 @@ var COMMON_SUPPORT_CHAINS_AND_ASSETS = {
2557
2561
  // optimism
2558
2562
  10: ["USDC", "USDT", "DAI", "ETH", "WETH", "USDe"],
2559
2563
  // bsc
2560
- 56: ["USDC", "USDT", "BNB", "WBNB", "ETH", "DAI", "BUSD", "BTCB"]
2564
+ 56: ["USDC", "USDT", "BNB", "WBNB", "ETH", "DAI", "BUSD", "BTCB", "USDe"]
2561
2565
  };
2562
2566
  var QR_CODE_EVM = {
2563
2567
  ...COMMON_SUPPORT_CHAINS_AND_ASSETS,
@@ -2685,7 +2689,7 @@ var flagConfig = {
2685
2689
  HYPERDASH_API_KEY2,
2686
2690
  MONKEY_TILT_API_KEY2,
2687
2691
  VENTUALS_API_KEY,
2688
- ETHEREAL_API_KEY2,
2692
+ ETHEREAL_API_KEY3,
2689
2693
  AVANTIS_API_KEY2,
2690
2694
  MONAD_API_KEY,
2691
2695
  BULLPEN_API_KEY,
@@ -2737,7 +2741,7 @@ var flagConfig = {
2737
2741
  {
2738
2742
  key: "apiKey",
2739
2743
  type: "isAnyOf",
2740
- values: [ETHEREAL_API_KEY2]
2744
+ values: [ETHEREAL_API_KEY3]
2741
2745
  }
2742
2746
  ],
2743
2747
  // For Ethereal, sort USDe to the front of the list on Arbitrum so it becomes the default
@@ -2799,7 +2803,7 @@ var flagConfig = {
2799
2803
  {
2800
2804
  key: "apiKey",
2801
2805
  type: "isAnyOf",
2802
- values: [OSTIUM_API_KEY2, ETHEREAL_API_KEY2]
2806
+ values: [OSTIUM_API_KEY2, ETHEREAL_API_KEY3]
2803
2807
  }
2804
2808
  ],
2805
2809
  value: arbitrum2.id.toString()
@@ -3015,7 +3019,8 @@ var flagConfig = {
3015
3019
  POLYMARKET_API_KEY2,
3016
3020
  HYPERDASH_API_KEY2,
3017
3021
  HYENA_API_KEY2,
3018
- ETHEREAL_API_KEY2
3022
+ ETHEREAL_API_KEY3,
3023
+ MONAD_API_KEY
3019
3024
  ]
3020
3025
  }
3021
3026
  ],
@@ -3093,7 +3098,7 @@ var flagConfig = {
3093
3098
  VENTUALS_API_KEY,
3094
3099
  AVANTIS_API_KEY2,
3095
3100
  HYENA_API_KEY2,
3096
- ETHEREAL_API_KEY2,
3101
+ ETHEREAL_API_KEY3,
3097
3102
  MONAD_API_KEY
3098
3103
  ]
3099
3104
  }
@@ -3190,7 +3195,7 @@ var flagConfig = {
3190
3195
  {
3191
3196
  key: "apiKey",
3192
3197
  type: "isAnyOf",
3193
- values: [ETHEREAL_API_KEY2]
3198
+ values: [ETHEREAL_API_KEY3]
3194
3199
  }
3195
3200
  ],
3196
3201
  value: false
@@ -3863,6 +3868,60 @@ async function checkoutTransferFetch(params) {
3863
3868
  clientMetadata: COMMON_CLIENT_METADATA
3864
3869
  });
3865
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
+ }
3866
3925
  var useCheckoutTransferInit = () => {
3867
3926
  const { checkoutItem } = useCheckoutContext();
3868
3927
  const checkoutConfig = checkoutItem?.initSettings.config;
@@ -3870,21 +3929,20 @@ var useCheckoutTransferInit = () => {
3870
3929
  const { apiKey } = useFunkitConfig();
3871
3930
  const isQrCodeEnabled = useFlag(FlagKey4.EnableTokenTransfer, false);
3872
3931
  const recipientAddr = checkoutConfig?.customRecipient || walletAddress || "0x";
3873
- const queryKey = checkoutConfig?.targetAsset && checkoutConfig.targetAsset !== "0x" && checkoutConfig.targetChain && {
3874
- userId: userInfo.id || "",
3875
- toChainId: checkoutConfig.targetChain,
3876
- toTokenAddress: checkoutConfig.targetAsset,
3877
- recipientAddr,
3932
+ const userId = userInfo.id || "";
3933
+ const queryKey = getCheckoutTokenTransferParams({
3934
+ checkoutConfig,
3935
+ userId,
3878
3936
  apiKey,
3879
- actionType: checkoutConfig?.qrcodeActionType
3880
- };
3937
+ recipientAddr
3938
+ });
3881
3939
  const postActionOverride = isHyenaCustomer(apiKey);
3882
3940
  const isQRCodeEnabledWithPostAction = !!checkoutConfig && // either no post action required
3883
3941
  (!isCheckoutPostActionRequired(checkoutConfig) || // or action type is set
3884
3942
  !!checkoutConfig?.qrcodeActionType || postActionOverride);
3885
3943
  const { data, isFetching } = useQuery3({
3886
3944
  queryKey: ["initializeCheckoutTokenTransferAddress", queryKey],
3887
- queryFn: () => queryKey ? checkoutTransferFetch(queryKey) : void 0,
3945
+ queryFn: ({ queryKey: [_, queryKey2] }) => queryKey2 ? checkoutTransferFetch(queryKey2) : void 0,
3888
3946
  refetchOnWindowFocus: false,
3889
3947
  refetchOnMount: false,
3890
3948
  enabled: !!queryKey && // Is flag enabled
@@ -4256,16 +4314,27 @@ function FunkitCheckoutProvider({ children }) {
4256
4314
  });
4257
4315
  depositAddressOrHash = txHash;
4258
4316
  } else {
4259
- const newTransferInit = await checkoutTransferFetch({
4317
+ const queryParams = getCheckoutTokenTransferParams({
4318
+ checkoutConfig: checkoutItem.initSettings.config,
4260
4319
  userId: userInfo.id || "",
4261
- toChainId: checkoutItem.initSettings.config.targetChain,
4262
- toTokenAddress: checkoutItem.initSettings.config.targetAsset,
4263
4320
  recipientAddr: getCheckoutRecipient({
4264
4321
  config: checkoutItem.initSettings.config,
4265
4322
  walletAddress
4266
4323
  }),
4267
4324
  apiKey: funkitConfig.apiKey
4268
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);
4269
4338
  if (!newTransferInit?.depositAddr) {
4270
4339
  const missingDepositAddressError = new Error(
4271
4340
  "Unable to get transfer deposit address"
@@ -4646,12 +4715,17 @@ import { solanaChain as solanaChain2 } from "@funkit/chains";
4646
4715
  import { formatAddressLastFour } from "@funkit/utils";
4647
4716
  import { isAddress as isSolanaAddress } from "@solana/addresses";
4648
4717
  import { isAddress } from "viem";
4649
- var getWalletLabel = (textCustomizations, walletAddress) => {
4718
+ var getWalletLabel = (t, textCustomizations, walletAddress) => {
4650
4719
  if (walletAddress) {
4651
4720
  const formattedAddress = formatAddressLastFour(walletAddress);
4652
- return `${textCustomizations.accountBalance} (${formattedAddress})`;
4721
+ return t("checkout.walletLabelTemplate", {
4722
+ walletLabel: textCustomizations.accountBalance,
4723
+ formattedAddress
4724
+ });
4653
4725
  }
4654
- return `Connect ${textCustomizations.accountBalance}`;
4726
+ return t("checkout.connectWalletLabelTemplate", {
4727
+ walletLabel: textCustomizations.accountBalance
4728
+ });
4655
4729
  };
4656
4730
  function isAddressSupported(address) {
4657
4731
  return isAddress(address) || isSolanaAddress(address);
@@ -4974,7 +5048,7 @@ function computeDisplayDestinationToken(checkoutConfig, displayAssetAmount) {
4974
5048
  stakingTokenIcon
4975
5049
  };
4976
5050
  }
4977
- var LZOFT_CUSTOMERS = [ETHEREAL_API_KEY3, HYENA_API_KEY3];
5051
+ var LZOFT_CUSTOMERS = [ETHEREAL_API_KEY4, HYENA_API_KEY3];
4978
5052
  function isLayerZeroOftCheckout(apiKey, checkoutItem) {
4979
5053
  if (!LZOFT_CUSTOMERS.includes(apiKey)) {
4980
5054
  return false;
@@ -6965,7 +7039,8 @@ var ASSET_LOGO_SRCS = {
6965
7039
  WVLP: "https://sdk-cdn.fun.xyz/images/wvlp.svg",
6966
7040
  LIQUIDHYPE: "https://sdk-cdn.fun.xyz/images/liquidhype.svg",
6967
7041
  VHYPE: "https://sdk-cdn.fun.xyz/images/vhype.png",
6968
- HBHYPE: "https://sdk-cdn.fun.xyz/images/hbhype.svg"
7042
+ HBHYPE: "https://sdk-cdn.fun.xyz/images/hbhype.svg",
7043
+ MON: "https://sdk-cdn.fun.xyz/images/monad.svg"
6969
7044
  };
6970
7045
  var FALLBACK_ASSET = "https://sdk-cdn.fun.xyz/images/dollar_circle.png";
6971
7046
  function getAssetLogoSrc(symbol) {
@@ -12064,7 +12139,7 @@ var useMaxSlippage = ({
12064
12139
  // src/utils/bluvo.ts
12065
12140
  var ASSETS_LOW_VALUE_THRESHOLD2 = 0.1;
12066
12141
  var isBrokerageAsset = (asset) => "minAmount" in asset && "maxAmount" in asset && asset.usdAmount !== null;
12067
- function getBrokerageMinMax(asset, minTransferLimits) {
12142
+ function getBrokerageMinMax(asset, minTransferLimits, minDeposit = 1) {
12068
12143
  const chainId = Number(asset.pickedChainId);
12069
12144
  const unitPrice = asset.usdAmount / asset.amount;
12070
12145
  const brokerageMin = Number.parseFloat(asset.minAmount);
@@ -12076,7 +12151,7 @@ function getBrokerageMinMax(asset, minTransferLimits) {
12076
12151
  minTransferLimits
12077
12152
  );
12078
12153
  return {
12079
- minUsd: Math.ceil(Math.max(tokenTransferMin, brokerageMinUsd)),
12154
+ minUsd: Math.ceil(Math.max(tokenTransferMin, brokerageMinUsd, minDeposit)),
12080
12155
  maxUsd: brokerageMaxUsd
12081
12156
  };
12082
12157
  }
@@ -12288,6 +12363,7 @@ var FunkitBrokerageContext = createContext12(void 0);
12288
12363
  var FunkitBrokerageProvider = ({
12289
12364
  children
12290
12365
  }) => {
12366
+ const { apiKey } = useFunkitConfig();
12291
12367
  const isSandboxMode = useIsFunkitSandboxMode();
12292
12368
  const minTransferRef = useRef13(useMinTransferLimits());
12293
12369
  const ORG_ID = isSandboxMode ? STAGE_ORG_ID : PROD_ORG_ID;
@@ -12330,8 +12406,12 @@ var FunkitBrokerageProvider = ({
12330
12406
  if (!selectedBrokerageAsset || !isBrokerageAsset(selectedBrokerageAsset)) {
12331
12407
  return null;
12332
12408
  }
12333
- return getBrokerageMinMax(selectedBrokerageAsset, minTransferRef.current);
12334
- }, [selectedBrokerageAsset]);
12409
+ return getBrokerageMinMax(
12410
+ selectedBrokerageAsset,
12411
+ minTransferRef.current,
12412
+ BLUVO_MIN_DEPOSIT_BY_CUSTOMER[apiKey]
12413
+ );
12414
+ }, [selectedBrokerageAsset, apiKey]);
12335
12415
  function getAuthConnectedExchanges() {
12336
12416
  if (typeof localStorage !== "undefined") {
12337
12417
  const connections = localStorage.getItem(LOCAL_STORAGE_KEY) || void 0;
@@ -14238,11 +14318,13 @@ var useWalletLabel = () => {
14238
14318
  const { walletAddress } = useGeneralWallet();
14239
14319
  const { textCustomizations, apiKey } = useFunkitConfig();
14240
14320
  const { checkoutItem } = useCheckoutContext();
14321
+ const { t } = useFunkitTranslation();
14241
14322
  if (isOstiumCustomer(apiKey) && walletAddress && checkoutItem) {
14242
14323
  const { config } = checkoutItem.initSettings;
14243
14324
  return `Swap to ${config.targetAssetTicker}`;
14244
14325
  }
14245
- return getWalletLabel(textCustomizations, walletAddress);
14326
+ const label = getWalletLabel(t, textCustomizations, walletAddress);
14327
+ return t("sourceChange.walletDisplayLabel", { walletLabel: label });
14246
14328
  };
14247
14329
 
14248
14330
  // src/modals/CheckoutModal/useWalletAssetHoldings.ts
@@ -15634,6 +15716,9 @@ var ConnectedMeshPaymentMethodItem = ({
15634
15716
  } = useBluvoExchangeBalance({ exchange: paymentMethodInfo.exchange });
15635
15717
  const sourceBalance = assetHoldings ? getTotalAssetBalance(assetHoldings) : 0;
15636
15718
  const label = usePaymentMethodInfoLabel(paymentMethodInfo);
15719
+ const keyText = t("sourceChange.brokerageDisplayLabel", {
15720
+ brokerageLabel: label.text
15721
+ });
15637
15722
  const { estimatedTimeText } = useCheckoutTimeEstimate(
15638
15723
  apiKey,
15639
15724
  null,
@@ -15664,7 +15749,7 @@ var ConnectedMeshPaymentMethodItem = ({
15664
15749
  isError: !!isBalanceError,
15665
15750
  isActive: isSelected,
15666
15751
  keyIcon: icon,
15667
- keyText: label.text,
15752
+ keyText,
15668
15753
  valueIcon: isSelected && showSelectedCheckmark && /* @__PURE__ */ React79.createElement(CheckIcon, null),
15669
15754
  onClick: onSelect,
15670
15755
  disclaimerText
@@ -15831,13 +15916,16 @@ var ActiveFiatAccountPaymentMethodItem = ({
15831
15916
  const { t } = useFunkitTranslation();
15832
15917
  const label = usePaymentMethodInfoLabel(paymentMethodInfo);
15833
15918
  const customerStatus = paymentMethodInfo.bridgeCustomer?.status;
15919
+ const keyText = t("sourceChange.virtualFiatDisplayLabel", {
15920
+ virtualFiatLabel: label.text
15921
+ });
15834
15922
  return /* @__PURE__ */ React79.createElement(
15835
15923
  FunPaymentMethodItem,
15836
15924
  {
15837
15925
  isActive,
15838
15926
  keyIcon: label.icon,
15839
15927
  valueIcon: customValueIcon ?? (customerStatus === BridgeCustomerStatus3.OFFBOARDED && /* @__PURE__ */ React79.createElement(BridgeCustomerStatusBadge, { status: customerStatus })),
15840
- keyText: label.text,
15928
+ keyText,
15841
15929
  onClick,
15842
15930
  disclaimerText: t("payment.disclaimerText", {
15843
15931
  limit: t("payment.noLimit"),
@@ -18038,17 +18126,21 @@ var FunRedirectButton = ({
18038
18126
  }
18039
18127
  );
18040
18128
  };
18129
+ var normalizePath = (path) => {
18130
+ return path.startsWith("/") ? path.slice(1) : path;
18131
+ };
18041
18132
  var AddressRedirectButton = ({
18042
18133
  chainId,
18043
18134
  address,
18044
18135
  customRedirectUrl
18045
18136
  }) => {
18046
18137
  const explorerInfo = FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO12[chainId]?.explorerInfo;
18138
+ const addressPath = normalizePath(explorerInfo?.path?.address || "address");
18047
18139
  return /* @__PURE__ */ React109.createElement(
18048
18140
  FunRedirectButton,
18049
18141
  {
18050
18142
  color: "tertiaryText",
18051
- to: customRedirectUrl ?? `${explorerInfo?.url}/address/${address}`
18143
+ to: customRedirectUrl ?? `${explorerInfo?.url}/${addressPath}/${address}`
18052
18144
  }
18053
18145
  );
18054
18146
  };
@@ -18058,11 +18150,12 @@ var TransactionRedirectButton = ({
18058
18150
  customRedirectUrl
18059
18151
  }) => {
18060
18152
  const explorerInfo = FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO12[chainId]?.explorerInfo;
18153
+ const txPath = normalizePath(explorerInfo?.path?.tx || "tx");
18061
18154
  return /* @__PURE__ */ React109.createElement(
18062
18155
  FunRedirectButton,
18063
18156
  {
18064
18157
  color: "tertiaryText",
18065
- to: customRedirectUrl ?? `${explorerInfo?.url}/tx/${txHash}`
18158
+ to: customRedirectUrl ?? `${explorerInfo?.url}/${txPath}/${txHash}`
18066
18159
  }
18067
18160
  );
18068
18161
  };
@@ -18319,7 +18412,8 @@ function FunDirectExecutionHistoryDetail({
18319
18412
  customTextConfigStatus,
18320
18413
  customTextConfigSteps,
18321
18414
  dangerousCustomDelayedAutoTriggerCutoff,
18322
- disableAutoUpdate = false
18415
+ disableAutoUpdate = false,
18416
+ hideYouReceive = false
18323
18417
  }) {
18324
18418
  const { t } = useFunkitTranslation();
18325
18419
  const isLoaded = !!directExecution;
@@ -18384,7 +18478,8 @@ function FunDirectExecutionHistoryDetail({
18384
18478
  {
18385
18479
  directExecution,
18386
18480
  isLoaded,
18387
- disableAutoUpdate
18481
+ disableAutoUpdate,
18482
+ hideYouReceive
18388
18483
  }
18389
18484
  ), /* @__PURE__ */ React113.createElement(
18390
18485
  DirectExecutionOrderDetail,
@@ -18412,7 +18507,8 @@ function FunDirectExecutionHistoryDetail({
18412
18507
  function DirectExecutionSummaryHistory({
18413
18508
  directExecution,
18414
18509
  isLoaded,
18415
- disableAutoUpdate = false
18510
+ disableAutoUpdate = false,
18511
+ hideYouReceive = false
18416
18512
  }) {
18417
18513
  const { t } = useFunkitTranslation();
18418
18514
  const { uiCustomizations } = useFunkitConfig();
@@ -18471,7 +18567,7 @@ function DirectExecutionSummaryHistory({
18471
18567
  }
18472
18568
  )
18473
18569
  }
18474
- ) : /* @__PURE__ */ React113.createElement(PaymentRouteSummarySkeletonLoader, null)), /* @__PURE__ */ React113.createElement(FunTxSummaryBox, null, /* @__PURE__ */ React113.createElement(FunTxSummaryLineItem, null, /* @__PURE__ */ React113.createElement(FunTxSummaryLineItemKeyText, { text: receiveAmountLabel }), isLoaded && clientMetadata ? /* @__PURE__ */ React113.createElement(Box, { display: "flex", gap: "5", alignItems: "center" }, /* @__PURE__ */ React113.createElement(
18570
+ ) : /* @__PURE__ */ React113.createElement(PaymentRouteSummarySkeletonLoader, null)), hideYouReceive ? null : /* @__PURE__ */ React113.createElement(FunTxSummaryBox, null, /* @__PURE__ */ React113.createElement(FunTxSummaryLineItem, null, /* @__PURE__ */ React113.createElement(FunTxSummaryLineItemKeyText, { text: receiveAmountLabel }), isLoaded && clientMetadata ? /* @__PURE__ */ React113.createElement(Box, { display: "flex", gap: "5", alignItems: "center" }, /* @__PURE__ */ React113.createElement(
18475
18571
  AsyncImage,
18476
18572
  {
18477
18573
  src: clientMetadata.initSettings.config.iconSrc || "",
@@ -18727,14 +18823,14 @@ var overrideStatus = (de, status) => {
18727
18823
  } : void 0
18728
18824
  };
18729
18825
  };
18730
- var getFakeDirectExecution = (checkoutItem) => {
18826
+ var getFakeDirectExecution = (checkoutItem, walletAddress) => {
18731
18827
  return {
18732
18828
  // It must be empty as empty string disables auto refresh of data
18733
18829
  txHash: "",
18734
18830
  // version: 1,
18735
18831
  customerId: "",
18736
18832
  userId: "",
18737
- recipientAddr: checkoutItem.initSettings.config.customRecipient,
18833
+ recipientAddr: checkoutItem.initSettings.config.customRecipient ?? walletAddress,
18738
18834
  type: DirectExecutionType2.RELAY,
18739
18835
  fromChainId: checkoutItem.selectedSourceAssetInfo.chainId,
18740
18836
  fromTokenAddress: checkoutItem.selectedSourceAssetInfo.address,
@@ -18781,6 +18877,7 @@ var BrokerageSuccess = ({
18781
18877
  });
18782
18878
  const { checkoutItem, setCheckoutProgress } = useCheckoutContext();
18783
18879
  const { exchangeType } = useBluvo();
18880
+ const { walletAddress } = useGeneralWallet();
18784
18881
  const [directExecution, setDirectExecution] = useState33(null);
18785
18882
  useIsomorphicLayoutEffect(() => {
18786
18883
  if (!checkoutItem) {
@@ -18788,7 +18885,7 @@ var BrokerageSuccess = ({
18788
18885
  }
18789
18886
  if (!directExecution) {
18790
18887
  setCheckoutProgress(checkoutItem.id, { step: 1 });
18791
- setDirectExecution(getFakeDirectExecution(checkoutItem));
18888
+ setDirectExecution(getFakeDirectExecution(checkoutItem, walletAddress));
18792
18889
  }
18793
18890
  }, [directExecution, checkoutItem, setCheckoutProgress]);
18794
18891
  const latestDirectExecution = useMemo24(() => {
@@ -18883,7 +18980,8 @@ var BrokerageSuccess = ({
18883
18980
  isActiveCheckout: true,
18884
18981
  showCheckoutStatus: true,
18885
18982
  onClose: handleClose,
18886
- onAnimationComplete: handleNewDeposit
18983
+ onAnimationComplete: handleNewDeposit,
18984
+ hideYouReceive: true
18887
18985
  }
18888
18986
  );
18889
18987
  };
@@ -22443,13 +22541,86 @@ var useMeldDefaultCurrency = (paymentMethod) => {
22443
22541
  // src/hooks/queries/useMeldLimits.ts
22444
22542
  import { getMeldFiatLimits } from "@funkit/api-base";
22445
22543
  import { formatCurrencyAndStringify as formatCurrencyAndStringify6 } from "@funkit/utils";
22544
+ import { useQuery as useQuery18 } from "@tanstack/react-query";
22545
+
22546
+ // src/consts/meld.ts
22547
+ var MELD_MIN_LIMIT_BUFFER = 5;
22548
+ var getMeldProviderIconUrl = (provider) => `https://sdk-cdn.fun.xyz/images/meld/${provider.toLowerCase()}.svg`;
22549
+ var getCurrencySymbol = (currencyCode) => {
22550
+ const formatter = new Intl.NumberFormat("en-US", {
22551
+ style: "currency",
22552
+ currency: currencyCode,
22553
+ currencyDisplay: "narrowSymbol"
22554
+ });
22555
+ return formatter.formatToParts(1).find(({ type }) => type === "currency")?.value ?? currencyCode;
22556
+ };
22557
+
22558
+ // src/utils/getExchangeRate.ts
22559
+ var DEFAULT_BIPS_MARKUP = 500;
22560
+ var getExchangeRate = (currency, currencyExchangeRates, bipsMarkup = DEFAULT_BIPS_MARKUP) => {
22561
+ if (!currency || !currencyExchangeRates) {
22562
+ return void 0;
22563
+ }
22564
+ if (currency === "USD") {
22565
+ return 1;
22566
+ }
22567
+ const exchangeRate = currency in currencyExchangeRates ? currencyExchangeRates[currency] : void 0;
22568
+ if (!exchangeRate) {
22569
+ return void 0;
22570
+ }
22571
+ return exchangeRate * (1 + bipsMarkup / 1e4);
22572
+ };
22573
+
22574
+ // src/hooks/useFiatExchangeRates.ts
22575
+ import { getFiatExchangeRates } from "@funkit/api-base";
22446
22576
  import { useQuery as useQuery17 } from "@tanstack/react-query";
22577
+ function useFiatExchangeRates(enabled = true) {
22578
+ const { data, isLoading, error } = useQuery17({
22579
+ queryKey: ["fiatExchangeRates"],
22580
+ queryFn: () => getFiatExchangeRates(),
22581
+ refetchOnMount: false,
22582
+ refetchOnReconnect: false,
22583
+ refetchOnWindowFocus: false,
22584
+ gcTime: 1e3 * 60 * 60,
22585
+ // 1 hour
22586
+ enabled
22587
+ });
22588
+ return { data, isLoading, error };
22589
+ }
22590
+
22591
+ // src/hooks/useMinDeposit.ts
22592
+ function useMinCheckoutDeposit({
22593
+ currency = "USD",
22594
+ paymentMethod
22595
+ }) {
22596
+ const { checkoutItem } = useCheckoutContext();
22597
+ const { data: exchangeRates } = useFiatExchangeRates(
22598
+ !!checkoutItem && currency !== "USD"
22599
+ );
22600
+ if (!checkoutItem) {
22601
+ logger.warn("useMinCheckoutDeposit: No checkout item found");
22602
+ return 0;
22603
+ }
22604
+ const { getMinDepositUSD, ...config } = checkoutItem.initSettings.config;
22605
+ const exchangeRate = getExchangeRate(currency, exchangeRates, 0) || 1;
22606
+ const tokenChainId = config.targetChain;
22607
+ const tokenAddress = config.targetAsset;
22608
+ const minDepositUsd = getMinDepositUSD?.({ tokenChainId, tokenAddress }) || 0;
22609
+ const minDeposit = minDepositUsd * exchangeRate;
22610
+ if (paymentMethod === "card" /* CARD */ && minDeposit) {
22611
+ const meldBuffer = MELD_MIN_LIMIT_BUFFER * exchangeRate;
22612
+ return minDeposit + meldBuffer;
22613
+ }
22614
+ return minDeposit;
22615
+ }
22616
+
22617
+ // src/hooks/queries/useMeldLimits.ts
22447
22618
  var useMeldLimits = (isEnabled = true) => {
22448
22619
  const { apiKey } = useFunkitConfig();
22449
22620
  const { userIpInfo } = useFunkitUserIp();
22450
22621
  const cryptoCurrency = useMeldCryptoCurrencyCode();
22451
22622
  const countryCode = userIpInfo?.alpha2;
22452
- const query = useQuery17({
22623
+ const query = useQuery18({
22453
22624
  queryKey: ["meld", "limits", countryCode, cryptoCurrency],
22454
22625
  queryFn: async () => {
22455
22626
  if (!apiKey || !countryCode) {
@@ -22477,9 +22648,18 @@ var useMeldLimits = (isEnabled = true) => {
22477
22648
  };
22478
22649
  var useMeldLimit = (fiatCurrency) => {
22479
22650
  const query = useMeldLimits();
22651
+ const minCheckoutDeposit = useMinCheckoutDeposit({
22652
+ currency: fiatCurrency,
22653
+ paymentMethod: "card" /* CARD */
22654
+ });
22655
+ let limit = query.data?.find((limit2) => limit2.currencyCode === fiatCurrency);
22656
+ if (limit) {
22657
+ const minAmt = Math.ceil(Math.max(minCheckoutDeposit, limit.minimumAmount));
22658
+ limit = { ...limit, minimumAmount: minAmt };
22659
+ }
22480
22660
  return {
22481
22661
  ...query,
22482
- data: query.data?.find((limit) => limit.currencyCode === fiatCurrency)
22662
+ data: limit
22483
22663
  };
22484
22664
  };
22485
22665
  var useMeldLimitError = (amount, fiatCurrency) => {
@@ -22521,23 +22701,6 @@ var useMeldLimitError = (amount, fiatCurrency) => {
22521
22701
  return void 0;
22522
22702
  };
22523
22703
 
22524
- // src/hooks/useFiatExchangeRates.ts
22525
- import { getFiatExchangeRates } from "@funkit/api-base";
22526
- import { useQuery as useQuery18 } from "@tanstack/react-query";
22527
- function useFiatExchangeRates(enabled = true) {
22528
- const { data, isLoading, error } = useQuery18({
22529
- queryKey: ["fiatExchangeRates"],
22530
- queryFn: () => getFiatExchangeRates(),
22531
- refetchOnMount: false,
22532
- refetchOnReconnect: false,
22533
- refetchOnWindowFocus: false,
22534
- gcTime: 1e3 * 60 * 60,
22535
- // 1 hour
22536
- enabled
22537
- });
22538
- return { data, isLoading, error };
22539
- }
22540
-
22541
22704
  // src/modals/CheckoutModal/InputAmount/InputAmountLoaded.tsx
22542
22705
  import {
22543
22706
  FlagKey as FlagKey20,
@@ -23491,22 +23654,6 @@ var YouPayYouReceiveBottomBarLayoutWrapper = ({
23491
23654
  );
23492
23655
  };
23493
23656
 
23494
- // src/utils/getExchangeRate.ts
23495
- var DEFAULT_BIPS_MARKUP = 500;
23496
- var getExchangeRate = (currency, currencyExchangeRates, bipsMarkup = DEFAULT_BIPS_MARKUP) => {
23497
- if (!currency || !currencyExchangeRates) {
23498
- return void 0;
23499
- }
23500
- if (currency === "USD") {
23501
- return 1;
23502
- }
23503
- const exchangeRate = currency in currencyExchangeRates ? currencyExchangeRates[currency] : void 0;
23504
- if (!exchangeRate) {
23505
- return void 0;
23506
- }
23507
- return exchangeRate * (1 + bipsMarkup / 1e4);
23508
- };
23509
-
23510
23657
  // src/components/Icons/SwitchIcon.tsx
23511
23658
  import React156 from "react";
23512
23659
  var SwitchIcon = () => {
@@ -24328,19 +24475,6 @@ import {
24328
24475
  formatCurrencyAndStringify as formatCurrencyAndStringify8
24329
24476
  } from "@funkit/utils";
24330
24477
  import React159 from "react";
24331
-
24332
- // src/consts/meld.ts
24333
- var getMeldProviderIconUrl = (provider) => `https://sdk-cdn.fun.xyz/images/meld/${provider.toLowerCase()}.svg`;
24334
- var getCurrencySymbol = (currencyCode) => {
24335
- const formatter = new Intl.NumberFormat("en-US", {
24336
- style: "currency",
24337
- currency: currencyCode,
24338
- currencyDisplay: "narrowSymbol"
24339
- });
24340
- return formatter.formatToParts(1).find(({ type }) => type === "currency")?.value ?? currencyCode;
24341
- };
24342
-
24343
- // src/components/MeldQuoteItem/MeldQuoteItem.tsx
24344
24478
  var providerLabelMap = {
24345
24479
  COINBASEPAY: "Coinbase Pay",
24346
24480
  MOONPAY: "MoonPay",
@@ -27148,6 +27282,10 @@ var DefiPurchaseSection = ({ config }) => {
27148
27282
  );
27149
27283
  };
27150
27284
 
27285
+ // src/modals/CheckoutModal/SourceChange/sourceChange.css.ts
27286
+ var WITH_EMPTY_STATE_DATA_ATTRIBUTE = "data-with-empty-state";
27287
+ var emptyStateStyles = "_14kf6rb0";
27288
+
27151
27289
  // src/modals/CheckoutModal/SourceChange/SourceChange.tsx
27152
27290
  var SourceChangeInfo = {
27153
27291
  Component: SourceChange,
@@ -27478,15 +27616,36 @@ function SourceChange({
27478
27616
  );
27479
27617
  }
27480
27618
  const bottomSectionRef = useBottomSectionRef();
27481
- 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(
27482
- FunDivider,
27619
+ 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(
27620
+ Box,
27483
27621
  {
27484
- label: t("sourceChange.more"),
27485
- marginTop: "8",
27486
- marginBottom: "8",
27487
- borderColor: "selectedOptionBorder"
27622
+ display: "flex",
27623
+ flexDirection: "column",
27624
+ gap: "4",
27625
+ ...{
27626
+ [WITH_EMPTY_STATE_DATA_ATTRIBUTE]: true
27627
+ }
27628
+ },
27629
+ preferred.map(renderSource),
27630
+ preferred.length > 0 && moreSources.length > 0 && /* @__PURE__ */ React175.createElement(
27631
+ FunDivider,
27632
+ {
27633
+ label: t("sourceChange.more"),
27634
+ marginTop: "8",
27635
+ marginBottom: "8",
27636
+ borderColor: "selectedOptionBorder"
27637
+ }
27638
+ ),
27639
+ moreSources.map(renderSource),
27640
+ /* @__PURE__ */ React175.createElement(PayPal, null)
27641
+ ), /* @__PURE__ */ React175.createElement(Box, { className: emptyStateStyles }, /* @__PURE__ */ React175.createElement(
27642
+ FunNoResults,
27643
+ {
27644
+ text: t("checkout.noAvailableTokensMessage"),
27645
+ title: t("checkout.noAvailableTokens"),
27646
+ variant: "actionable"
27488
27647
  }
27489
- ), moreSources.map(renderSource), /* @__PURE__ */ React175.createElement(PayPal, null)), bottomSectionRef && createPortal18(
27648
+ ))), bottomSectionRef && createPortal18(
27490
27649
  /* @__PURE__ */ React175.createElement(
27491
27650
  Dialog.BottomBar,
27492
27651
  {
@@ -27621,7 +27780,7 @@ function CopyInputDisplayedAddressI18n({
27621
27780
  }
27622
27781
  function CopyInputDisplayedAddress(props) {
27623
27782
  const { i18n: i18n2 } = useFunkitTranslation();
27624
- const isEnglish = i18n2.language === "en";
27783
+ const isEnglish = i18n2.language === "en" || i18n2.language === "buy_en";
27625
27784
  return isEnglish ? /* @__PURE__ */ React176.createElement(CopyInputDisplayedAddressEN, { ...props }) : /* @__PURE__ */ React176.createElement(CopyInputDisplayedAddressI18n, { ...props });
27626
27785
  }
27627
27786
 
@@ -30483,32 +30642,38 @@ function usePaymentMethodIcon(paymentMethod, iconSize = DEFAULT_PAYMENT_METHOD_I
30483
30642
  }
30484
30643
  var usePaymentMethodInfoLabel = (methodInfo, iconSize = DEFAULT_PAYMENT_METHOD_ICON_SIZE) => {
30485
30644
  const { textCustomizations } = useFunkitConfig();
30645
+ const { t } = useFunkitTranslation();
30486
30646
  const paymentIcon = usePaymentMethodIcon(methodInfo.paymentMethod, iconSize);
30487
30647
  if (methodInfo.paymentMethod === "card" /* CARD */) {
30488
30648
  return { text: "", icon: /* @__PURE__ */ React209.createElement(CombinedCreditCardOptionsIcon, null) };
30489
30649
  }
30490
30650
  if (methodInfo.paymentMethod === "brokerage" /* BROKERAGE */) {
30491
30651
  const icon2 = getExchangeIcon(methodInfo.exchange, iconSize);
30492
- return { text: methodInfo.title, icon: icon2 };
30652
+ const brokerageLabel = methodInfo.title;
30653
+ const text = brokerageLabel;
30654
+ return { text, icon: icon2 };
30493
30655
  }
30494
30656
  if (methodInfo.paymentMethod === "virtual_bank" /* VIRTUAL_BANK */) {
30657
+ const virtualFiatLabel = getFiatAccountLabel(
30658
+ methodInfo.title,
30659
+ methodInfo.matchingFiatAccount
30660
+ );
30661
+ const text = virtualFiatLabel;
30662
+ const icon2 = /* @__PURE__ */ React209.createElement(
30663
+ PaymentMethodIcon,
30664
+ {
30665
+ keyIconSize: iconSize,
30666
+ paymentIcon: /* @__PURE__ */ React209.createElement(BankIconActive, { size: iconSize })
30667
+ }
30668
+ );
30495
30669
  return {
30496
- text: getFiatAccountLabel(
30497
- methodInfo.title,
30498
- methodInfo.matchingFiatAccount
30499
- ),
30500
- icon: /* @__PURE__ */ React209.createElement(
30501
- PaymentMethodIcon,
30502
- {
30503
- keyIconSize: iconSize,
30504
- paymentIcon: /* @__PURE__ */ React209.createElement(BankIconActive, { size: iconSize })
30505
- }
30506
- )
30670
+ text,
30671
+ icon: icon2
30507
30672
  };
30508
30673
  }
30509
30674
  const icon = /* @__PURE__ */ React209.createElement(Box, { display: "flex", alignItems: "center", justifyContent: "center" }, paymentIcon);
30510
30675
  if (methodInfo.paymentMethod === "balance" /* ACCOUNT_BALANCE */) {
30511
- const label = getWalletLabel(textCustomizations, methodInfo.description);
30676
+ const label = getWalletLabel(t, textCustomizations, methodInfo.description);
30512
30677
  return { text: label, icon };
30513
30678
  }
30514
30679
  return { text: methodInfo.title, icon };
@@ -30564,7 +30729,7 @@ var PaymentRouteSummary = ({
30564
30729
  {
30565
30730
  isSameDestination,
30566
30731
  paymentMethodInfo,
30567
- redirect: sourceRedirect,
30732
+ redirect: isSameDestination ? destinationRedirect : sourceRedirect,
30568
30733
  isWithdrawal
30569
30734
  }
30570
30735
  );
@@ -35495,6 +35660,87 @@ var useUpdateActiveFunkitCheckout = () => {
35495
35660
  import i18n from "i18next";
35496
35661
  import { initReactI18next } from "react-i18next";
35497
35662
 
35663
+ // src/locales/translations/buy_en.json
35664
+ var buy_en_default = {
35665
+ inputAmount: {
35666
+ depositMaxBalance: "Buy with max balance",
35667
+ maximumDeposit: "{{amount}} maximum purchase",
35668
+ minimumDeposit: "{{amount}} minimum purchase"
35669
+ },
35670
+ checkoutConfirmation: {
35671
+ depositMaxBalance: "Buy with max balance"
35672
+ },
35673
+ payment: {
35674
+ depositWithPayPal: "Buy with PayPal",
35675
+ depositWithCard: "Buy with Card"
35676
+ },
35677
+ common: {
35678
+ depositsLive: "{{tokenName}} purchases are live!",
35679
+ depositsLiveTryNow: "{{tokenName}} purchases are live! <TryNowLink>Try now</TryNowLink>"
35680
+ },
35681
+ disclaimer: {
35682
+ cardDisclaimer: "This transaction occurs in two steps. MoonPay powers only your purchase of {{depositToken}} ({{sourceChainName}}) which {{orgName}} then {{tokenActionDescription}}."
35683
+ },
35684
+ transferToken: {
35685
+ minDepositAmountTooltip: "Minimum purchase amount required for the selected chain.",
35686
+ yourDepositAddress: "Your purchase address",
35687
+ depositAddressOriginalRecipient: "Send any accepted token to this address",
35688
+ depositAddressUniversal: "Send any accepted token to this address and it will auto swap to {{targetToken}} in your account"
35689
+ },
35690
+ transaction: {
35691
+ depositSuccessful: "Purchase successful",
35692
+ depositSuccessfulDescription: "Your funds were successfully received.",
35693
+ depositReceivedPending: "Purchase received and pending...",
35694
+ depositCompleted: "Purchase completed",
35695
+ depositReceivedProcessing: "Purchase is processing...",
35696
+ depositWillBeCredited: "Your purchase will be credited to your account shortly.",
35697
+ depositHasBeenCredited: "Your purchase has been credited to your account.",
35698
+ depositRefundedOrReprocessed: "Your purchase has been refunded or reprocessed. Feel free to reach out for an update.",
35699
+ issueOccurredWithDeposit: "An issue occurred with your purchase. Please try again.",
35700
+ depositDidntCompleteFull: `Your purchase didn't complete. <ContactSupportLink text="Contact us" /> for more info.`,
35701
+ depositDelayedFundsSafeFull: 'Your purchase is delayed but funds are safe. <ContactSupportLink text="Contact us" /> for more info.',
35702
+ depositExpired: "Purchase expired",
35703
+ depositDidntCompleteError: "Your purchase didn't complete due to an error.",
35704
+ depositDidntCompleteFundsSafe: "Your purchase didn't complete. Your funds are safe your order will process shortly. Feel free to reach out for an update.",
35705
+ depositBeingProcessedFull: 'Your purchase is being processed. <ContactSupportLink text="Contact us" /> for more info.',
35706
+ depositingIntoAccount: "Purchasing into your account...",
35707
+ waitingForExchangeToSendFunds: "Waiting for {{exchangeName}} to send funds..."
35708
+ },
35709
+ checkoutHistory: {
35710
+ depositAddress: "Purchase address",
35711
+ newDeposit: "Buy More"
35712
+ },
35713
+ directExecution: {
35714
+ depositTx: "Purchase tx"
35715
+ },
35716
+ directExecutionNotif: {
35717
+ depositTransactionInitiated: "Purchase transaction initiated",
35718
+ depositCompletedNotification: "You will receive a notification here once the purchase is completed."
35719
+ },
35720
+ fees: {
35721
+ yourGasCostsTooltip: "Amount paid to send assets to your purchase address."
35722
+ },
35723
+ virtualFiatAccount: {
35724
+ 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."
35725
+ },
35726
+ textCustomizations: {
35727
+ virtualFiat: "Buy with SEPA",
35728
+ transferTokens: "Buy with QR Code",
35729
+ debitOrCredit: "Buy with Card",
35730
+ brokerageOrExchange: "Buy with Exchange"
35731
+ },
35732
+ sourceChange: {
35733
+ brokerageDisplayLabel: "Buy with {{brokerageLabel}}",
35734
+ walletDisplayLabel: "Buy with Wallet",
35735
+ virtualFiatDisplayLabel: "Buy with SEPA"
35736
+ },
35737
+ relay: {
35738
+ confirmTransaction: "Confirm transaction",
35739
+ waitingForConfirmation: "Waiting for confirmation",
35740
+ transactionConfirmed: "Transaction confirmed"
35741
+ }
35742
+ };
35743
+
35498
35744
  // src/locales/translations/en.json
35499
35745
  var en_default = {
35500
35746
  checkout: {
@@ -35502,7 +35748,9 @@ var en_default = {
35502
35748
  noAvailableTokensMessage: "You don't have any crypto tokens in your wallet. Top up or transfer crypto to your wallet to continue.",
35503
35749
  topUpWallet: "Top up wallet",
35504
35750
  refundProcessing: "Funds were withdrawn, but the transaction didn't complete. A refund is being processed.",
35505
- orderRefunded: "Your order was refunded."
35751
+ orderRefunded: "Your order was refunded.",
35752
+ walletLabelTemplate: "{{walletLabel}} ({{formattedAddress}})",
35753
+ connectWalletLabelTemplate: "Connect {{walletLabel}}"
35506
35754
  },
35507
35755
  inputAmount: {
35508
35756
  availableBalanceTooltip: "Your available balance after fees",
@@ -35916,7 +36164,10 @@ var en_default = {
35916
36164
  sourceChange: {
35917
36165
  selectPaymentMethod: "Select payment method",
35918
36166
  moreOptions: "More options",
35919
- more: "more"
36167
+ more: "more",
36168
+ walletDisplayLabel: "{{walletLabel}}",
36169
+ brokerageDisplayLabel: "{{brokerageLabel}}",
36170
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
35920
36171
  },
35921
36172
  quote: {
35922
36173
  preparingYourQuote: "Preparing your quote...",
@@ -36006,7 +36257,9 @@ var es_default = {
36006
36257
  noAvailableTokensMessage: "No tienes ning\xFAn token cripto en tu billetera. Recarga o transfiere cripto a tu billetera para continuar.",
36007
36258
  topUpWallet: "Recargar billetera",
36008
36259
  refundProcessing: "Los fondos fueron retirados, pero la transacci\xF3n no se complet\xF3. Se est\xE1 procesando un reembolso.",
36009
- orderRefunded: "Tu pedido fue reembolsado."
36260
+ orderRefunded: "Tu pedido fue reembolsado.",
36261
+ walletLabelTemplate: "{{walletLabel}} ({{formattedAddress}})",
36262
+ connectWalletLabelTemplate: "Conectar {{walletLabel}}"
36010
36263
  },
36011
36264
  inputAmount: {
36012
36265
  availableBalanceTooltip: "Tu saldo disponible despu\xE9s de las comisiones",
@@ -36420,7 +36673,10 @@ var es_default = {
36420
36673
  sourceChange: {
36421
36674
  selectPaymentMethod: "Seleccionar m\xE9todo de pago",
36422
36675
  moreOptions: "M\xE1s opciones",
36423
- more: "m\xE1s"
36676
+ more: "m\xE1s",
36677
+ walletDisplayLabel: "{{walletLabel}}",
36678
+ brokerageDisplayLabel: "{{brokerageLabel}}",
36679
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
36424
36680
  },
36425
36681
  quote: {
36426
36682
  preparingYourQuote: "Preparando tu cotizaci\xF3n...",
@@ -36510,7 +36766,9 @@ var ja_default = {
36510
36766
  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",
36511
36767
  topUpWallet: "\u30A6\u30A9\u30EC\u30C3\u30C8\u306B\u30C1\u30E3\u30FC\u30B8",
36512
36768
  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",
36513
- orderRefunded: "\u3054\u6CE8\u6587\u306F\u8FD4\u91D1\u3055\u308C\u307E\u3057\u305F\u3002"
36769
+ orderRefunded: "\u3054\u6CE8\u6587\u306F\u8FD4\u91D1\u3055\u308C\u307E\u3057\u305F\u3002",
36770
+ walletLabelTemplate: "{{walletLabel}} ({{formattedAddress}})",
36771
+ connectWalletLabelTemplate: "{{walletLabel}}\u3092\u63A5\u7D9A"
36514
36772
  },
36515
36773
  inputAmount: {
36516
36774
  availableBalanceTooltip: "\u624B\u6570\u6599\u3092\u5DEE\u3057\u5F15\u3044\u305F\u5F8C\u306E\u5229\u7528\u53EF\u80FD\u6B8B\u9AD8",
@@ -36924,7 +37182,10 @@ var ja_default = {
36924
37182
  sourceChange: {
36925
37183
  selectPaymentMethod: "\u652F\u6255\u3044\u65B9\u6CD5\u3092\u9078\u629E",
36926
37184
  moreOptions: "\u305D\u306E\u4ED6\u306E\u30AA\u30D7\u30B7\u30E7\u30F3",
36927
- more: "\u3082\u3063\u3068\u898B\u308B"
37185
+ more: "\u3082\u3063\u3068\u898B\u308B",
37186
+ walletDisplayLabel: "{{walletLabel}}",
37187
+ brokerageDisplayLabel: "{{brokerageLabel}}",
37188
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
36928
37189
  },
36929
37190
  quote: {
36930
37191
  preparingYourQuote: "\u898B\u7A4D\u3082\u308A\u3092\u6E96\u5099\u4E2D...",
@@ -37014,7 +37275,9 @@ var ko_default = {
37014
37275
  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.",
37015
37276
  topUpWallet: "\uC9C0\uAC11 \uCDA9\uC804",
37016
37277
  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.",
37017
- orderRefunded: "\uC8FC\uBB38\uC774 \uD658\uBD88\uB418\uC5C8\uC2B5\uB2C8\uB2E4."
37278
+ orderRefunded: "\uC8FC\uBB38\uC774 \uD658\uBD88\uB418\uC5C8\uC2B5\uB2C8\uB2E4.",
37279
+ walletLabelTemplate: "{{walletLabel}} ({{formattedAddress}})",
37280
+ connectWalletLabelTemplate: "{{walletLabel}} \uC5F0\uACB0"
37018
37281
  },
37019
37282
  inputAmount: {
37020
37283
  availableBalanceTooltip: "\uC218\uC218\uB8CC\uB97C \uC81C\uC678\uD55C \uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uC794\uC561",
@@ -37428,7 +37691,10 @@ var ko_default = {
37428
37691
  sourceChange: {
37429
37692
  selectPaymentMethod: "\uACB0\uC81C \uBC29\uBC95 \uC120\uD0DD",
37430
37693
  moreOptions: "\uB354 \uB9CE\uC740 \uC635\uC158",
37431
- more: "\uB354 \uBCF4\uAE30"
37694
+ more: "\uB354 \uBCF4\uAE30",
37695
+ walletDisplayLabel: "{{walletLabel}}",
37696
+ brokerageDisplayLabel: "{{brokerageLabel}}",
37697
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
37432
37698
  },
37433
37699
  quote: {
37434
37700
  preparingYourQuote: "\uACAC\uC801 \uC900\uBE44 \uC911...",
@@ -37518,7 +37784,9 @@ var ru_default = {
37518
37784
  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.",
37519
37785
  topUpWallet: "\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u043A\u043E\u0448\u0435\u043B\u0451\u043A",
37520
37786
  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.",
37521
- orderRefunded: "\u0412\u0430\u0448 \u0437\u0430\u043A\u0430\u0437 \u0431\u044B\u043B \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0451\u043D."
37787
+ orderRefunded: "\u0412\u0430\u0448 \u0437\u0430\u043A\u0430\u0437 \u0431\u044B\u043B \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0451\u043D.",
37788
+ walletLabelTemplate: "{{walletLabel}} ({{formattedAddress}})",
37789
+ connectWalletLabelTemplate: "\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C {{walletLabel}}"
37522
37790
  },
37523
37791
  inputAmount: {
37524
37792
  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",
@@ -37932,7 +38200,10 @@ var ru_default = {
37932
38200
  sourceChange: {
37933
38201
  selectPaymentMethod: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u043F\u043E\u0441\u043E\u0431 \u043E\u043F\u043B\u0430\u0442\u044B",
37934
38202
  moreOptions: "\u0411\u043E\u043B\u044C\u0448\u0435 \u043E\u043F\u0446\u0438\u0439",
37935
- more: "\u0431\u043E\u043B\u044C\u0448\u0435"
38203
+ more: "\u0431\u043E\u043B\u044C\u0448\u0435",
38204
+ walletDisplayLabel: "{{walletLabel}}",
38205
+ brokerageDisplayLabel: "{{brokerageLabel}}",
38206
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
37936
38207
  },
37937
38208
  quote: {
37938
38209
  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...",
@@ -38022,7 +38293,9 @@ var tr_default = {
38022
38293
  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.",
38023
38294
  topUpWallet: "C\xFCzdana para y\xFCkle",
38024
38295
  refundProcessing: "Fonlar \xE7ekildi, ancak i\u015Flem tamamlanmad\u0131. \u0130ade i\u015Flemi yap\u0131l\u0131yor.",
38025
- orderRefunded: "Sipari\u015Finiz iade edildi."
38296
+ orderRefunded: "Sipari\u015Finiz iade edildi.",
38297
+ walletLabelTemplate: "{{walletLabel}} ({{formattedAddress}})",
38298
+ connectWalletLabelTemplate: "{{walletLabel}} Ba\u011Fla"
38026
38299
  },
38027
38300
  inputAmount: {
38028
38301
  availableBalanceTooltip: "\xDCcretler sonras\u0131 kullan\u0131labilir bakiyeniz",
@@ -38436,7 +38709,10 @@ var tr_default = {
38436
38709
  sourceChange: {
38437
38710
  selectPaymentMethod: "\xD6deme y\xF6ntemi se\xE7in",
38438
38711
  moreOptions: "Daha fazla se\xE7enek",
38439
- more: "daha fazla"
38712
+ more: "daha fazla",
38713
+ walletDisplayLabel: "{{walletLabel}}",
38714
+ brokerageDisplayLabel: "{{brokerageLabel}}",
38715
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
38440
38716
  },
38441
38717
  quote: {
38442
38718
  preparingYourQuote: "Teklifiniz haz\u0131rlan\u0131yor...",
@@ -38526,7 +38802,9 @@ var zh_default = {
38526
38802
  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",
38527
38803
  topUpWallet: "\u5145\u503C\u94B1\u5305",
38528
38804
  refundProcessing: "\u8D44\u91D1\u5DF2\u63D0\u53D6\uFF0C\u4F46\u4EA4\u6613\u672A\u5B8C\u6210\u3002\u6B63\u5728\u5904\u7406\u9000\u6B3E\u3002",
38529
- orderRefunded: "\u60A8\u7684\u8BA2\u5355\u5DF2\u9000\u6B3E\u3002"
38805
+ orderRefunded: "\u60A8\u7684\u8BA2\u5355\u5DF2\u9000\u6B3E\u3002",
38806
+ walletLabelTemplate: "{{walletLabel}} ({{formattedAddress}})",
38807
+ connectWalletLabelTemplate: "\u8FDE\u63A5 {{walletLabel}}"
38530
38808
  },
38531
38809
  inputAmount: {
38532
38810
  availableBalanceTooltip: "\u6263\u9664\u624B\u7EED\u8D39\u540E\u7684\u53EF\u7528\u4F59\u989D",
@@ -38940,7 +39218,10 @@ var zh_default = {
38940
39218
  sourceChange: {
38941
39219
  selectPaymentMethod: "\u9009\u62E9\u652F\u4ED8\u65B9\u5F0F",
38942
39220
  moreOptions: "\u66F4\u591A\u9009\u9879",
38943
- more: "\u66F4\u591A"
39221
+ more: "\u66F4\u591A",
39222
+ walletDisplayLabel: "{{walletLabel}}",
39223
+ brokerageDisplayLabel: "{{brokerageLabel}}",
39224
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
38944
39225
  },
38945
39226
  quote: {
38946
39227
  preparingYourQuote: "\u6B63\u5728\u51C6\u5907\u60A8\u7684\u62A5\u4EF7...",
@@ -39032,7 +39313,8 @@ var localeMapping = {
39032
39313
  ja: "ja",
39033
39314
  tr: "tr",
39034
39315
  es: "es",
39035
- ru: "ru"
39316
+ ru: "ru",
39317
+ buy_en: "buy_en"
39036
39318
  };
39037
39319
  var resources = {
39038
39320
  en: {
@@ -39043,7 +39325,8 @@ var resources = {
39043
39325
  ja: { translation: ja_default },
39044
39326
  tr: { translation: tr_default },
39045
39327
  es: { translation: es_default },
39046
- ru: { translation: ru_default }
39328
+ ru: { translation: ru_default },
39329
+ buy_en: { translation: buy_en_default }
39047
39330
  };
39048
39331
  i18n.use(initReactI18next).init({
39049
39332
  resources,