@funkit/connect 7.1.0-next.5 → 7.1.0-next.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/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @funkit/connect
2
2
 
3
+ ## 7.1.0-next.7
4
+
5
+ ### Patch Changes
6
+
7
+ - 656587e: fix(connect): disable withdrawal quote for blacklisted withdrawal addresses
8
+
9
+ ## 7.1.0-next.6
10
+
11
+ ### Patch Changes
12
+
13
+ - f07bdfb: refactor(connect): cleanup remaining mesh references in bluvo screens
14
+ - 652c5c2: feat(connect): add blacklisted withdrawal address to statsig
15
+ - d336735: feat: add tron chain object
16
+ - 3df0c66: feat(connect): add insufficient gas error during execution
17
+ - 29b449c: Use ETH as source amount on input screen instead of USD for Lighter ETH Spot
18
+ - Updated dependencies [d336735]
19
+ - @funkit/chains@0.5.2-next.1
20
+
3
21
  ## 7.1.0-next.5
4
22
 
5
23
  ### Patch Changes
@@ -5,6 +5,27 @@ declare const _default: {
5
5
  readonly array_of_strings: {
6
6
  readonly value: readonly [];
7
7
  };
8
+ readonly blacklistedwithdrawaladdress: {
9
+ readonly value: {
10
+ readonly '0x2791bca1f2de4661ed88a30c99a7a9449aa84174': "USDC.e - Polygon";
11
+ readonly '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8': "USDC.e - Arbitrum";
12
+ readonly '0x7f5c764cbc14f9669b88837ca1490cca17c31607': "USDC.e - Optimism";
13
+ readonly '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': "USDC - Ethereum";
14
+ readonly '0x66a9893cC07D91D95644AEDD05D03f95e1dBA8Af': "Uniswap V4 Router - Etheruem";
15
+ readonly '0x1095692A6237d83C6a72F3F5eFEdb9A670C49223': "Uniswap V4 Router - Polygon";
16
+ readonly '0x0000000000000000000000000000000000000000': "Zero/Null Address";
17
+ readonly '0x000000000000000000000000000000000000dEaD': "Burn Address";
18
+ readonly '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': "Uniswap V2 Router";
19
+ readonly '0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45': "Uniswap V3: Old Deployer";
20
+ readonly '0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD': "Uniswap Universal Router";
21
+ readonly '0xE592427A0AEce92De3Edee1F18E0157C05861564': "Uniswap V3 Router";
22
+ readonly '0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F': "SushiSwap Router";
23
+ readonly '0xDEF1C0ded9bec7F1a1670819833240f027b25EfF': "0x Exchange Proxy";
24
+ readonly '0x1111111254EEB25477B68fb85Ed929f73A960582': "1inch V5 Router";
25
+ readonly '0x881D40237659C251811CEC9c364ef91dC08D300C': "Metamask Swap Router";
26
+ readonly '0x07d82CD44cd598ACf355Af8c8089b30b2a13B088': "Polymarket Withdrawal Block";
27
+ };
28
+ };
8
29
  readonly blockedcountries: {
9
30
  readonly value: readonly ["AF", "BY", "MM", "CF", "CU", "CD", "IR", "LB", "LY", "NI", "KP", "UA", "SO", "SS", "SY", "VE"];
10
31
  };
@@ -133,6 +154,23 @@ declare const _default: {
133
154
  readonly enabletokentransfer: {
134
155
  readonly value: true;
135
156
  };
157
+ readonly enabletokentransfertest: {
158
+ readonly variants: readonly [{
159
+ readonly conditions: {
160
+ readonly all: readonly [{
161
+ readonly type: "allowedCountries";
162
+ readonly countries: readonly ["SG", "DE"];
163
+ }];
164
+ };
165
+ readonly value: true;
166
+ }];
167
+ readonly value: false;
168
+ };
169
+ readonly ismexico: {
170
+ readonly value: {
171
+ readonly mexico: false;
172
+ };
173
+ };
136
174
  readonly isrelaybypassenabled: {
137
175
  readonly value: true;
138
176
  };
@@ -174,16 +212,44 @@ declare const _default: {
174
212
  readonly params: {
175
213
  readonly targetChain: "3586256";
176
214
  readonly targetAsset: "0x0000000000000000000000000000000000000001";
177
- readonly targetAssetTicker: "ETH (Spot)";
215
+ readonly targetAssetTicker: "ETH";
216
+ readonly iconSrc: "https://sdk-cdn.fun.xyz/images/eth.svg";
217
+ readonly qrcodeActionType: "LIGHTER_SPOT";
218
+ readonly defaultChainId: "1";
219
+ readonly defaultTokenSymbol: "ETH";
220
+ };
221
+ }, {
222
+ readonly dynamicRoutingId: "LIGHTER_ETH_SPOT_NEW_USER";
223
+ readonly params: {
224
+ readonly targetChain: "1";
225
+ readonly targetAsset: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2";
226
+ readonly targetAssetTicker: "ETH";
178
227
  readonly iconSrc: "https://sdk-cdn.fun.xyz/images/eth.svg";
228
+ readonly qrcodeActionType: "LIGHTER_SPOT";
229
+ readonly defaultChainId: "1";
230
+ readonly defaultTokenSymbol: "ETH";
179
231
  };
180
232
  }, {
181
233
  readonly dynamicRoutingId: "LIGHTER_USDC_PERPS";
182
234
  readonly params: {
183
235
  readonly targetChain: "3586256";
184
236
  readonly targetAsset: "0x0000000000000000000000000000000000000000";
185
- readonly targetAssetTicker: "USDC (Perps)";
237
+ readonly targetAssetTicker: "USDC";
238
+ readonly iconSrc: "https://sdk-cdn.fun.xyz/images/usdc.svg";
239
+ readonly qrcodeActionType: "LIGHTER_PERPS";
240
+ readonly defaultChainId: "42161";
241
+ readonly defaultTokenSymbol: "USDC";
242
+ };
243
+ }, {
244
+ readonly dynamicRoutingId: "LIGHTER_USDC_PERPS_NEW_USER";
245
+ readonly params: {
246
+ readonly targetChain: "1";
247
+ readonly targetAsset: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48";
248
+ readonly targetAssetTicker: "USDC";
186
249
  readonly iconSrc: "https://sdk-cdn.fun.xyz/images/usdc.svg";
250
+ readonly qrcodeActionType: "LIGHTER_PERPS";
251
+ readonly defaultChainId: "42161";
252
+ readonly defaultTokenSymbol: "USDC";
187
253
  };
188
254
  }];
189
255
  };
@@ -5,15 +5,16 @@ export declare function PaymentMethodIcon({ paymentIcon, keyIconSize, }: {
5
5
  paymentIcon: ReactNode;
6
6
  keyIconSize: number;
7
7
  }): React.JSX.Element;
8
- interface ConnectedMeshPaymentMethodItemProps extends ConnectedPaymentMethodItemProps {
8
+ interface ConnectedBluvoPaymentMethodItemProps extends ConnectedPaymentMethodItemProps {
9
9
  paymentMethodInfo: PaymentMethodBrokerageInfo;
10
10
  onBrokerageError?: () => void;
11
11
  }
12
- /** it is different from BrokeragePaymentMethodItem
13
- * this component is for connected mesh brokerage like robinhood
14
- * the other one is for connecting new brokerage button
15
- * */
16
- export declare const ConnectedMeshPaymentMethodItem: ({ paymentMethodInfo, isSelected, onSelect, onBrokerageError, showSelectedCheckmark, }: ConnectedMeshPaymentMethodItemProps) => React.JSX.Element;
12
+ /**
13
+ * Note: This is different from `BrokeragePaymentMethodItem`, which is used as a
14
+ * button to initiate connecting a new brokerage account.
15
+ * This is for connected Bluvo brokerage like coinbase etc.
16
+ */
17
+ export declare const ConnectedBluvoPaymentMethodItem: ({ paymentMethodInfo, isSelected, onSelect, onBrokerageError, showSelectedCheckmark, }: ConnectedBluvoPaymentMethodItemProps) => React.JSX.Element;
17
18
  interface ConnectedPaymentMethodItemProps {
18
19
  isSelected: boolean;
19
20
  showSelectedCheckmark?: boolean;
@@ -28,8 +28,4 @@ export declare const isAssetUsableToPayForCheckout: ({ config, payerAddress, pay
28
28
  minUsdRequired?: number;
29
29
  };
30
30
  export declare function getUsdAvailableAmount(targetChainId: string, assetChainId: string | undefined, assetUsdAmount: number | null | undefined, paymentMethod: PaymentMethod | undefined): number | null;
31
- /**
32
- * Attempt to safeguard user from irrecoverable losses
33
- */
34
- export declare function isBlacklistedWithdrawAddress(address: string): boolean;
35
31
  export {};
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Attempt to safeguard user from irrecoverable losses
3
+ */
4
+ export declare function useIsBlacklistedWithdrawalAddress(address: string): boolean;
package/dist/index.js CHANGED
@@ -781,7 +781,7 @@ var getRemoteImageStyles = (isRemoteImage, isRemoteImageLoaded, src) => {
781
781
  // src/components/ConnectButton/ConnectButtonRenderer.tsx
782
782
  import { formatCurrencyAndStringify as formatCurrencyAndStringify15, isMobile as isMobile14, noop as noop9 } from "@funkit/utils";
783
783
  import React238 from "react";
784
- import { useAccount as useAccount12, useBalance, useConfig as useConfig6 } from "wagmi";
784
+ import { useAccount as useAccount12, useBalance, useConfig as useConfig8 } from "wagmi";
785
785
 
786
786
  // src/hooks/useIsMounted.ts
787
787
  import { useCallback as useCallback2, useEffect as useEffect4, useState as useState5 } from "react";
@@ -855,7 +855,7 @@ import {
855
855
  } from "@funkit/chains";
856
856
  import { STABLECOIN_SYMBOLS } from "@funkit/utils";
857
857
  import {
858
- isTokenAddressEquivalent as isTokenAddressEquivalent4,
858
+ isTokenAddressEquivalent as isTokenAddressEquivalent5,
859
859
  isTokenEquivalent as isTokenEquivalent7,
860
860
  round as round4
861
861
  } from "@funkit/utils";
@@ -1051,7 +1051,7 @@ import { getRelayAssetInfo } from "@funkit/fun-relay";
1051
1051
  import {
1052
1052
  formatCryptoAndStringify as formatCryptoAndStringify9,
1053
1053
  isNumericString,
1054
- isTokenAddressEquivalent as isTokenAddressEquivalent3,
1054
+ isTokenAddressEquivalent as isTokenAddressEquivalent4,
1055
1055
  isTokenEquivalent as isTokenEquivalent6,
1056
1056
  round as round3
1057
1057
  } from "@funkit/utils";
@@ -1432,7 +1432,7 @@ function setFunkitConnectVersion({ version }) {
1432
1432
  localStorage.setItem(storageKey, version);
1433
1433
  }
1434
1434
  function getCurrentSdkVersion() {
1435
- return "7.1.0-next.5";
1435
+ return "7.1.0-next.7";
1436
1436
  }
1437
1437
  function useFingerprint() {
1438
1438
  const fingerprint = useCallback3(() => {
@@ -2775,12 +2775,7 @@ var flagConfig = {
2775
2775
  // Lighter
2776
2776
  3586256: ["*"],
2777
2777
  // Solana
2778
- 1151111081099710: [
2779
- NATIVE_TOKEN,
2780
- "11111111111111111111111111111111",
2781
- "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
2782
- "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"
2783
- ]
2778
+ 1151111081099710: ["*"]
2784
2779
  })
2785
2780
  },
2786
2781
  [FlagKey.EnableCard]: {
@@ -3689,6 +3684,27 @@ var default_configs_default = {
3689
3684
  array_of_strings: {
3690
3685
  value: []
3691
3686
  },
3687
+ blacklistedwithdrawaladdress: {
3688
+ value: {
3689
+ "0x2791bca1f2de4661ed88a30c99a7a9449aa84174": "USDC.e - Polygon",
3690
+ "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8": "USDC.e - Arbitrum",
3691
+ "0x7f5c764cbc14f9669b88837ca1490cca17c31607": "USDC.e - Optimism",
3692
+ "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": "USDC - Ethereum",
3693
+ "0x66a9893cC07D91D95644AEDD05D03f95e1dBA8Af": "Uniswap V4 Router - Etheruem",
3694
+ "0x1095692A6237d83C6a72F3F5eFEdb9A670C49223": "Uniswap V4 Router - Polygon",
3695
+ "0x0000000000000000000000000000000000000000": "Zero/Null Address",
3696
+ "0x000000000000000000000000000000000000dEaD": "Burn Address",
3697
+ "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D": "Uniswap V2 Router",
3698
+ "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45": "Uniswap V3: Old Deployer",
3699
+ "0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD": "Uniswap Universal Router",
3700
+ "0xE592427A0AEce92De3Edee1F18E0157C05861564": "Uniswap V3 Router",
3701
+ "0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F": "SushiSwap Router",
3702
+ "0xDEF1C0ded9bec7F1a1670819833240f027b25EfF": "0x Exchange Proxy",
3703
+ "0x1111111254EEB25477B68fb85Ed929f73A960582": "1inch V5 Router",
3704
+ "0x881D40237659C251811CEC9c364ef91dC08D300C": "Metamask Swap Router",
3705
+ "0x07d82CD44cd598ACf355Af8c8089b30b2a13B088": "Polymarket Withdrawal Block"
3706
+ }
3707
+ },
3692
3708
  blockedcountries: {
3693
3709
  value: [
3694
3710
  "AF",
@@ -3853,6 +3869,27 @@ var default_configs_default = {
3853
3869
  enabletokentransfer: {
3854
3870
  value: true
3855
3871
  },
3872
+ enabletokentransfertest: {
3873
+ variants: [
3874
+ {
3875
+ conditions: {
3876
+ all: [
3877
+ {
3878
+ type: "allowedCountries",
3879
+ countries: ["SG", "DE"]
3880
+ }
3881
+ ]
3882
+ },
3883
+ value: true
3884
+ }
3885
+ ],
3886
+ value: false
3887
+ },
3888
+ ismexico: {
3889
+ value: {
3890
+ mexico: false
3891
+ }
3892
+ },
3856
3893
  isrelaybypassenabled: {
3857
3894
  value: true
3858
3895
  },
@@ -3895,8 +3932,23 @@ var default_configs_default = {
3895
3932
  params: {
3896
3933
  targetChain: "3586256",
3897
3934
  targetAsset: "0x0000000000000000000000000000000000000001",
3898
- targetAssetTicker: "ETH (Spot)",
3899
- iconSrc: "https://sdk-cdn.fun.xyz/images/eth.svg"
3935
+ targetAssetTicker: "ETH",
3936
+ iconSrc: "https://sdk-cdn.fun.xyz/images/eth.svg",
3937
+ qrcodeActionType: "LIGHTER_SPOT",
3938
+ defaultChainId: "1",
3939
+ defaultTokenSymbol: "ETH"
3940
+ }
3941
+ },
3942
+ {
3943
+ dynamicRoutingId: "LIGHTER_ETH_SPOT_NEW_USER",
3944
+ params: {
3945
+ targetChain: "1",
3946
+ targetAsset: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
3947
+ targetAssetTicker: "ETH",
3948
+ iconSrc: "https://sdk-cdn.fun.xyz/images/eth.svg",
3949
+ qrcodeActionType: "LIGHTER_SPOT",
3950
+ defaultChainId: "1",
3951
+ defaultTokenSymbol: "ETH"
3900
3952
  }
3901
3953
  },
3902
3954
  {
@@ -3904,8 +3956,23 @@ var default_configs_default = {
3904
3956
  params: {
3905
3957
  targetChain: "3586256",
3906
3958
  targetAsset: "0x0000000000000000000000000000000000000000",
3907
- targetAssetTicker: "USDC (Perps)",
3908
- iconSrc: "https://sdk-cdn.fun.xyz/images/usdc.svg"
3959
+ targetAssetTicker: "USDC",
3960
+ iconSrc: "https://sdk-cdn.fun.xyz/images/usdc.svg",
3961
+ qrcodeActionType: "LIGHTER_PERPS",
3962
+ defaultChainId: "42161",
3963
+ defaultTokenSymbol: "USDC"
3964
+ }
3965
+ },
3966
+ {
3967
+ dynamicRoutingId: "LIGHTER_USDC_PERPS_NEW_USER",
3968
+ params: {
3969
+ targetChain: "1",
3970
+ targetAsset: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
3971
+ targetAssetTicker: "USDC",
3972
+ iconSrc: "https://sdk-cdn.fun.xyz/images/usdc.svg",
3973
+ qrcodeActionType: "LIGHTER_PERPS",
3974
+ defaultChainId: "42161",
3975
+ defaultTokenSymbol: "USDC"
3909
3976
  }
3910
3977
  }
3911
3978
  ]
@@ -4552,7 +4619,7 @@ import React236, {
4552
4619
  useMemo as useMemo50,
4553
4620
  useState as useState73
4554
4621
  } from "react";
4555
- import { useAccount as useAccount10, useAccountEffect as useAccountEffect3, useConfig as useConfig5 } from "wagmi";
4622
+ import { useAccount as useAccount10, useAccountEffect as useAccountEffect3, useConfig as useConfig7 } from "wagmi";
4556
4623
 
4557
4624
  // src/components/Dialog/Dialog.css.ts
4558
4625
  var DialogAnimationTimeIn = 0.25;
@@ -7928,6 +7995,7 @@ var en_default = {
7928
7995
  quoteExpired: "Quote expired. Please try again.",
7929
7996
  riskErrorMessage: "{{orgName}} is unable to process this deposit for security reasons.",
7930
7997
  signatureDeclined: "Signature declined. Please try again.",
7998
+ insufficientGas: "Insufficient gas to complete the transaction.",
7931
7999
  unableToSwitchChains: "Unable to switch networks. Please ensure your wallet supports the network.",
7932
8000
  walletClientUndefined: "Your wallet connection wasn't successful. Please try again.",
7933
8001
  genericErrorMessage: "An error occurred. Please try again.",
@@ -8285,8 +8353,8 @@ var en_default = {
8285
8353
  somethingWentWrong: "Something went wrong. Please try again.",
8286
8354
  invalid2FACode: "Invalid 2FA code. Please try again.",
8287
8355
  withdrawalError: "Unable to withdraw from exchange. Please try again.",
8288
- meshExecutionError: "We failed to process your deposit. Please try again.",
8289
- meshExecutionErrorFull: "We failed to process your deposit.<br />Please retry or <ContactSupportLink></ContactSupportLink> for help.",
8356
+ bluvoExecutionError: "We failed to process your deposit. Please try again.",
8357
+ bluvoExecutionErrorFull: "We failed to process your deposit.<br />Please retry or <ContactSupportLink></ContactSupportLink> for help.",
8290
8358
  executingBrokerageTransfer: "Executing brokerage transfer",
8291
8359
  goBack: "Go Back",
8292
8360
  continue: "Continue",
@@ -8294,7 +8362,7 @@ var en_default = {
8294
8362
  dataEncrypted: "All data is encrypted between {{appName}} and {{exchangeName}}.",
8295
8363
  twoFaAlwaysRequired: "2fa always required",
8296
8364
  transfersRequireApproval: "Transfers cannot be made without your approval.",
8297
- meshConnectionError: "Failed to connect to your exchange. Please try again.",
8365
+ bluvoConnectionError: "Failed to connect to your exchange. Please try again.",
8298
8366
  thirdPartyConnectionMessage: "{{appName}} will use a 3rd party to connect your {{exchangeName}} account."
8299
8367
  },
8300
8368
  sourceChange: {
@@ -8430,6 +8498,7 @@ var es_default = {
8430
8498
  quoteExpired: "La cotizaci\xF3n expir\xF3. Por favor intenta nuevamente.",
8431
8499
  riskErrorMessage: "{{orgName}} no puede procesar este dep\xF3sito por razones de seguridad.",
8432
8500
  signatureDeclined: "Firma rechazada. Por favor intenta nuevamente.",
8501
+ insufficientGas: "Gas insuficiente para esta transacci\xF3n.",
8433
8502
  unableToSwitchChains: "No se puede cambiar de red. Aseg\xFArate de que tu billetera soporte la red.",
8434
8503
  walletClientUndefined: "Tu conexi\xF3n de billetera no fue exitosa. Por favor intenta nuevamente.",
8435
8504
  genericErrorMessage: "Ocurri\xF3 un error. Por favor intenta nuevamente.",
@@ -8787,8 +8856,8 @@ var es_default = {
8787
8856
  somethingWentWrong: "Algo sali\xF3 mal. Por favor intenta nuevamente.",
8788
8857
  invalid2FACode: "C\xF3digo 2FA inv\xE1lido. Por favor intenta nuevamente.",
8789
8858
  withdrawalError: "No se puede retirar del exchange. Por favor intenta nuevamente.",
8790
- meshExecutionError: "No pudimos procesar tu dep\xF3sito. Por favor intenta nuevamente.",
8791
- meshExecutionErrorFull: "No pudimos procesar tu dep\xF3sito.<br />Por favor reintenta o <ContactSupportLink></ContactSupportLink> para ayuda.",
8859
+ bluvoExecutionError: "No pudimos procesar tu dep\xF3sito. Por favor intenta nuevamente.",
8860
+ bluvoExecutionErrorFull: "No pudimos procesar tu dep\xF3sito.<br />Por favor reintenta o <ContactSupportLink></ContactSupportLink> para ayuda.",
8792
8861
  executingBrokerageTransfer: "Ejecutando transferencia de corretaje",
8793
8862
  goBack: "Volver",
8794
8863
  continue: "Continuar",
@@ -8796,7 +8865,7 @@ var es_default = {
8796
8865
  dataEncrypted: "Todos los datos est\xE1n encriptados entre {{appName}} y {{exchangeName}}.",
8797
8866
  twoFaAlwaysRequired: "2fa siempre requerido",
8798
8867
  transfersRequireApproval: "Las transferencias no se pueden realizar sin tu aprobaci\xF3n.",
8799
- meshConnectionError: "Error al conectar con tu exchange. Por favor intenta nuevamente.",
8868
+ bluvoConnectionError: "Error al conectar con tu exchange. Por favor intenta nuevamente.",
8800
8869
  thirdPartyConnectionMessage: "{{appName}} usar\xE1 un tercero para conectar tu cuenta de {{exchangeName}}."
8801
8870
  },
8802
8871
  sourceChange: {
@@ -8932,6 +9001,7 @@ var fr_default = {
8932
9001
  quoteExpired: "Cotation expir\xE9e. Veuillez r\xE9essayer.",
8933
9002
  riskErrorMessage: "{{orgName}} ne peut pas traiter ce d\xE9p\xF4t pour des raisons de s\xE9curit\xE9.",
8934
9003
  signatureDeclined: "Signature refus\xE9e. Veuillez r\xE9essayer.",
9004
+ insufficientGas: "Gas insuffisant pour cette transaction.",
8935
9005
  unableToSwitchChains: "Impossible de changer de r\xE9seau. Assurez-vous que votre portefeuille prend en charge le r\xE9seau.",
8936
9006
  walletClientUndefined: "La connexion de votre portefeuille n'a pas r\xE9ussi. Veuillez r\xE9essayer.",
8937
9007
  genericErrorMessage: "Une erreur s'est produite. Veuillez r\xE9essayer.",
@@ -9289,8 +9359,8 @@ var fr_default = {
9289
9359
  somethingWentWrong: "Une erreur s'est produite. Veuillez r\xE9essayer.",
9290
9360
  invalid2FACode: "Code 2FA invalide. Veuillez r\xE9essayer.",
9291
9361
  withdrawalError: "Impossible de retirer de l'exchange. Veuillez r\xE9essayer.",
9292
- meshExecutionError: "Nous n'avons pas pu traiter votre d\xE9p\xF4t. Veuillez r\xE9essayer.",
9293
- meshExecutionErrorFull: "Nous n'avons pas pu traiter votre d\xE9p\xF4t.<br />Veuillez r\xE9essayer ou <ContactSupportLink></ContactSupportLink> pour obtenir de l'aide.",
9362
+ bluvoExecutionError: "Nous n'avons pas pu traiter votre d\xE9p\xF4t. Veuillez r\xE9essayer.",
9363
+ bluvoExecutionErrorFull: "Nous n'avons pas pu traiter votre d\xE9p\xF4t.<br />Veuillez r\xE9essayer ou <ContactSupportLink></ContactSupportLink> pour obtenir de l'aide.",
9294
9364
  executingBrokerageTransfer: "Ex\xE9cution du transfert de courtage",
9295
9365
  goBack: "Retour",
9296
9366
  continue: "Continuer",
@@ -9298,7 +9368,7 @@ var fr_default = {
9298
9368
  dataEncrypted: "Toutes les donn\xE9es sont chiffr\xE9es entre {{appName}} et {{exchangeName}}.",
9299
9369
  twoFaAlwaysRequired: "2FA toujours requis",
9300
9370
  transfersRequireApproval: "Les transferts ne peuvent pas \xEAtre effectu\xE9s sans votre approbation.",
9301
- meshConnectionError: "\xC9chec de la connexion \xE0 votre exchange. Veuillez r\xE9essayer.",
9371
+ bluvoConnectionError: "\xC9chec de la connexion \xE0 votre exchange. Veuillez r\xE9essayer.",
9302
9372
  thirdPartyConnectionMessage: "{{appName}} utilisera un tiers pour connecter votre compte {{exchangeName}}."
9303
9373
  },
9304
9374
  sourceChange: {
@@ -9434,6 +9504,7 @@ var ja_default = {
9434
9504
  quoteExpired: "\u898B\u7A4D\u3082\u308A\u306E\u6709\u52B9\u671F\u9650\u304C\u5207\u308C\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",
9435
9505
  riskErrorMessage: "\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u4E0A\u306E\u7406\u7531\u306B\u3088\u308A\u3001{{orgName}}\u306F\u3053\u306E\u5165\u91D1\u3092\u51E6\u7406\u3067\u304D\u307E\u305B\u3093\u3002",
9436
9506
  signatureDeclined: "\u7F72\u540D\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",
9507
+ insufficientGas: "\u30AC\u30B9\u304C\u4E0D\u8DB3\u3057\u3066\u3044\u307E\u3059\u3002",
9437
9508
  unableToSwitchChains: "\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u5207\u308A\u66FF\u3048\u3089\u308C\u307E\u305B\u3093\u3002\u30A6\u30A9\u30EC\u30C3\u30C8\u304C\u305D\u306E\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u306B\u5BFE\u5FDC\u3057\u3066\u3044\u308B\u304B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
9438
9509
  walletClientUndefined: "\u30A6\u30A9\u30EC\u30C3\u30C8\u63A5\u7D9A\u304C\u6210\u529F\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",
9439
9510
  genericErrorMessage: "\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",
@@ -9791,8 +9862,8 @@ var ja_default = {
9791
9862
  somethingWentWrong: "\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",
9792
9863
  invalid2FACode: "2FA\u30B3\u30FC\u30C9\u304C\u7121\u52B9\u3067\u3059\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",
9793
9864
  withdrawalError: "\u53D6\u5F15\u6240\u304B\u3089\u51FA\u91D1\u3067\u304D\u307E\u305B\u3093\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",
9794
- meshExecutionError: "\u5165\u91D1\u306E\u51E6\u7406\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",
9795
- meshExecutionErrorFull: "\u5165\u91D1\u306E\u51E6\u7406\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002<br />\u518D\u8A66\u884C\u3059\u308B\u304B\u3001<ContactSupportLink></ContactSupportLink>\u306B\u304A\u554F\u3044\u5408\u308F\u305B\u304F\u3060\u3055\u3044\u3002",
9865
+ bluvoExecutionError: "\u5165\u91D1\u306E\u51E6\u7406\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",
9866
+ bluvoExecutionErrorFull: "\u5165\u91D1\u306E\u51E6\u7406\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002<br />\u518D\u8A66\u884C\u3059\u308B\u304B\u3001<ContactSupportLink></ContactSupportLink>\u306B\u304A\u554F\u3044\u5408\u308F\u305B\u304F\u3060\u3055\u3044\u3002",
9796
9867
  executingBrokerageTransfer: "\u8A3C\u5238\u4F1A\u793E\u306E\u9001\u91D1\u3092\u5B9F\u884C\u4E2D",
9797
9868
  goBack: "\u623B\u308B",
9798
9869
  continue: "\u7D9A\u3051\u308B",
@@ -9800,7 +9871,7 @@ var ja_default = {
9800
9871
  dataEncrypted: "\u3059\u3079\u3066\u306E\u30C7\u30FC\u30BF\u306F{{appName}}\u3068{{exchangeName}}\u306E\u9593\u3067\u6697\u53F7\u5316\u3055\u308C\u3066\u3044\u307E\u3059\u3002",
9801
9872
  twoFaAlwaysRequired: "2fa\u306F\u5E38\u306B\u5FC5\u8981\u3067\u3059",
9802
9873
  transfersRequireApproval: "\u9001\u91D1\u306F\u3042\u306A\u305F\u306E\u627F\u8A8D\u306A\u3057\u306B\u5B9F\u884C\u3067\u304D\u307E\u305B\u3093\u3002",
9803
- meshConnectionError: "\u53D6\u5F15\u6240\u3078\u306E\u63A5\u7D9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",
9874
+ bluvoConnectionError: "\u53D6\u5F15\u6240\u3078\u306E\u63A5\u7D9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",
9804
9875
  thirdPartyConnectionMessage: "{{appName}}\u306F\u30B5\u30FC\u30C9\u30D1\u30FC\u30C6\u30A3\u3092\u4F7F\u7528\u3057\u3066{{exchangeName}}\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u63A5\u7D9A\u3057\u307E\u3059\u3002"
9805
9876
  },
9806
9877
  sourceChange: {
@@ -9935,6 +10006,7 @@ var ko_default = {
9935
10006
  checkoutConfirmation: {
9936
10007
  quoteExpired: "\uACAC\uC801\uC774 \uB9CC\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",
9937
10008
  riskErrorMessage: "\uBCF4\uC548\uC0C1\uC758 \uC774\uC720\uB85C {{orgName}}\uC774(\uAC00) \uC774 \uC785\uAE08\uC744 \uCC98\uB9AC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.",
10009
+ insufficientGas: "\uAC00\uC2A4\uAC00 \uBD80\uC871\uD569\uB2C8\uB2E4.",
9938
10010
  signatureDeclined: "\uC11C\uBA85\uC774 \uAC70\uBD80\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",
9939
10011
  unableToSwitchChains: "\uB124\uD2B8\uC6CC\uD06C\uB97C \uC804\uD658\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC9C0\uAC11\uC774 \uD574\uB2F9 \uB124\uD2B8\uC6CC\uD06C\uB97C \uC9C0\uC6D0\uD558\uB294\uC9C0 \uD655\uC778\uD574 \uC8FC\uC138\uC694.",
9940
10012
  walletClientUndefined: "\uC9C0\uAC11 \uC5F0\uACB0\uC774 \uC131\uACF5\uC801\uC774\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",
@@ -10293,8 +10365,8 @@ var ko_default = {
10293
10365
  somethingWentWrong: "\uBB38\uC81C\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",
10294
10366
  invalid2FACode: "\uC798\uBABB\uB41C 2FA \uCF54\uB4DC\uC785\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",
10295
10367
  withdrawalError: "\uAC70\uB798\uC18C\uC5D0\uC11C \uCD9C\uAE08\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",
10296
- meshExecutionError: "\uC785\uAE08\uC744 \uCC98\uB9AC\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",
10297
- meshExecutionErrorFull: "\uC785\uAE08\uC744 \uCC98\uB9AC\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.<br />\uB2E4\uC2DC \uC2DC\uB3C4\uD558\uAC70\uB098 \uB3C4\uC6C0\uC774 \uD544\uC694\uD558\uBA74 <ContactSupportLink></ContactSupportLink>\uB97C \uD074\uB9AD\uD558\uC138\uC694.",
10368
+ bluvoExecutionError: "\uC785\uAE08\uC744 \uCC98\uB9AC\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",
10369
+ bluvoExecutionErrorFull: "\uC785\uAE08\uC744 \uCC98\uB9AC\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.<br />\uB2E4\uC2DC \uC2DC\uB3C4\uD558\uAC70\uB098 \uB3C4\uC6C0\uC774 \uD544\uC694\uD558\uBA74 <ContactSupportLink></ContactSupportLink>\uB97C \uD074\uB9AD\uD558\uC138\uC694.",
10298
10370
  executingBrokerageTransfer: "\uBE0C\uB85C\uCEE4\uB9AC\uC9C0 \uC804\uC1A1 \uC2E4\uD589 \uC911",
10299
10371
  goBack: "\uB4A4\uB85C \uAC00\uAE30",
10300
10372
  continue: "\uACC4\uC18D",
@@ -10302,7 +10374,7 @@ var ko_default = {
10302
10374
  dataEncrypted: "\uBAA8\uB4E0 \uB370\uC774\uD130\uB294 {{appName}}\uACFC(\uC640) {{exchangeName}} \uAC04\uC5D0 \uC554\uD638\uD654\uB429\uB2C8\uB2E4.",
10303
10375
  twoFaAlwaysRequired: "2fa\uB294 \uD56D\uC0C1 \uD544\uC694\uD569\uB2C8\uB2E4",
10304
10376
  transfersRequireApproval: "\uC804\uC1A1\uC740 \uADC0\uD558\uC758 \uC2B9\uC778 \uC5C6\uC774 \uC774\uB8E8\uC5B4\uC9C8 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.",
10305
- meshConnectionError: "\uAC70\uB798\uC18C \uC5F0\uACB0\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",
10377
+ bluvoConnectionError: "\uAC70\uB798\uC18C \uC5F0\uACB0\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",
10306
10378
  thirdPartyConnectionMessage: "{{appName}}\uC740(\uB294) {{exchangeName}} \uACC4\uC815\uC744 \uC5F0\uACB0\uD558\uAE30 \uC704\uD574 \uC81C3\uC790\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4."
10307
10379
  },
10308
10380
  sourceChange: {
@@ -10437,6 +10509,7 @@ var ru_default = {
10437
10509
  checkoutConfirmation: {
10438
10510
  quoteExpired: "\u041A\u043E\u0442\u0438\u0440\u043E\u0432\u043A\u0430 \u0438\u0441\u0442\u0435\u043A\u043B\u0430. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.",
10439
10511
  riskErrorMessage: "{{orgName}} \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u044D\u0442\u043E\u0442 \u0434\u0435\u043F\u043E\u0437\u0438\u0442 \u043F\u043E \u0441\u043E\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u043C \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438.",
10512
+ insufficientGas: "\u041D\u0435\u0434\u043E\u0441\u0442\u0430\u0442\u043E\u0447\u043D\u043E \u0433\u0430\u0437\u0430 \u0434\u043B\u044F \u044D\u0442\u043E\u0439 \u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u0438",
10440
10513
  signatureDeclined: "\u041F\u043E\u0434\u043F\u0438\u0441\u044C \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0430. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.",
10441
10514
  unableToSwitchChains: "\u041D\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044F \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0441\u0435\u0442\u0438. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044C, \u0447\u0442\u043E \u0432\u0430\u0448 \u043A\u043E\u0448\u0435\u043B\u0451\u043A \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u044D\u0442\u0443 \u0441\u0435\u0442\u044C.",
10442
10515
  walletClientUndefined: "\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u0432\u0430\u0448\u0435\u0433\u043E \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0430 \u043D\u0435 \u0431\u044B\u043B\u043E \u0443\u0441\u043F\u0435\u0448\u043D\u044B\u043C. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.",
@@ -10795,8 +10868,8 @@ var ru_default = {
10795
10868
  somethingWentWrong: "\u0427\u0442\u043E-\u0442\u043E \u043F\u043E\u0448\u043B\u043E \u043D\u0435 \u0442\u0430\u043A. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.",
10796
10869
  invalid2FACode: "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043E\u0434 2FA. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.",
10797
10870
  withdrawalError: "\u041D\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044F \u0432\u044B\u0432\u0435\u0441\u0442\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0441 \u0431\u0438\u0440\u0436\u0438. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.",
10798
- meshExecutionError: "\u041D\u0430\u043C \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u0432\u0430\u0448 \u0434\u0435\u043F\u043E\u0437\u0438\u0442. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.",
10799
- meshExecutionErrorFull: "\u041D\u0430\u043C \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u0432\u0430\u0448 \u0434\u0435\u043F\u043E\u0437\u0438\u0442.<br />\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u043F\u043E\u043F\u044B\u0442\u043A\u0443 \u0438\u043B\u0438 <ContactSupportLink></ContactSupportLink> \u0434\u043B\u044F \u043F\u043E\u043C\u043E\u0449\u0438.",
10871
+ bluvoExecutionError: "\u041D\u0430\u043C \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u0432\u0430\u0448 \u0434\u0435\u043F\u043E\u0437\u0438\u0442. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.",
10872
+ bluvoExecutionErrorFull: "\u041D\u0430\u043C \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u0432\u0430\u0448 \u0434\u0435\u043F\u043E\u0437\u0438\u0442.<br />\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u043F\u043E\u043F\u044B\u0442\u043A\u0443 \u0438\u043B\u0438 <ContactSupportLink></ContactSupportLink> \u0434\u043B\u044F \u043F\u043E\u043C\u043E\u0449\u0438.",
10800
10873
  executingBrokerageTransfer: "\u0412\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0431\u0440\u043E\u043A\u0435\u0440\u0441\u043A\u043E\u0433\u043E \u043F\u0435\u0440\u0435\u0432\u043E\u0434\u0430",
10801
10874
  goBack: "\u041D\u0430\u0437\u0430\u0434",
10802
10875
  continue: "\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C",
@@ -10804,7 +10877,7 @@ var ru_default = {
10804
10877
  dataEncrypted: "\u0412\u0441\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u044B \u043C\u0435\u0436\u0434\u0443 {{appName}} \u0438 {{exchangeName}}.",
10805
10878
  twoFaAlwaysRequired: "2fa \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F",
10806
10879
  transfersRequireApproval: "\u041F\u0435\u0440\u0435\u0432\u043E\u0434\u044B \u043D\u0435 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u044B \u0431\u0435\u0437 \u0432\u0430\u0448\u0435\u0433\u043E \u043E\u0434\u043E\u0431\u0440\u0435\u043D\u0438\u044F.",
10807
- meshConnectionError: "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043A \u0432\u0430\u0448\u0435\u0439 \u0431\u0438\u0440\u0436\u0435. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.",
10880
+ bluvoConnectionError: "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043A \u0432\u0430\u0448\u0435\u0439 \u0431\u0438\u0440\u0436\u0435. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.",
10808
10881
  thirdPartyConnectionMessage: "{{appName}} \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0441\u0442\u043E\u0440\u043E\u043D\u043D\u0435\u0433\u043E \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0434\u043B\u044F \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u0432\u0430\u0448\u0435\u0433\u043E \u0430\u043A\u043A\u0430\u0443\u043D\u0442\u0430 {{exchangeName}}."
10809
10882
  },
10810
10883
  sourceChange: {
@@ -10939,6 +11012,7 @@ var tr_default = {
10939
11012
  checkoutConfirmation: {
10940
11013
  quoteExpired: "Teklif s\xFCresi doldu. L\xFCtfen tekrar deneyin.",
10941
11014
  riskErrorMessage: "{{orgName}} g\xFCvenlik nedeniyle bu yat\u0131r\u0131m\u0131 i\u015Fleyemiyor.",
11015
+ insufficientGas: "Bu i\u015Flem i\xE7in yeterli gaz yok.",
10942
11016
  signatureDeclined: "\u0130mza reddedildi. L\xFCtfen tekrar deneyin.",
10943
11017
  unableToSwitchChains: "A\u011F de\u011Fi\u015Ftirilemiyor. L\xFCtfen c\xFCzdan\u0131n\u0131z\u0131n a\u011F\u0131 destekledi\u011Finden emin olun.",
10944
11018
  walletClientUndefined: "C\xFCzdan ba\u011Flant\u0131n\u0131z ba\u015Far\u0131l\u0131 olmad\u0131. L\xFCtfen tekrar deneyin.",
@@ -11297,8 +11371,8 @@ var tr_default = {
11297
11371
  somethingWentWrong: "Bir \u015Feyler yanl\u0131\u015F gitti. L\xFCtfen tekrar deneyin.",
11298
11372
  invalid2FACode: "Ge\xE7ersiz 2FA kodu. L\xFCtfen tekrar deneyin.",
11299
11373
  withdrawalError: "Borsadan \xE7ekim yap\u0131lam\u0131yor. L\xFCtfen tekrar deneyin.",
11300
- meshExecutionError: "Yat\u0131r\u0131m\u0131n\u0131z\u0131 i\u015Fleyemedik. L\xFCtfen tekrar deneyin.",
11301
- meshExecutionErrorFull: "Yat\u0131r\u0131m\u0131n\u0131z\u0131 i\u015Fleyemedik.<br />L\xFCtfen tekrar deneyin veya yard\u0131m i\xE7in <ContactSupportLink></ContactSupportLink>.",
11374
+ bluvoExecutionError: "Yat\u0131r\u0131m\u0131n\u0131z\u0131 i\u015Fleyemedik. L\xFCtfen tekrar deneyin.",
11375
+ bluvoExecutionErrorFull: "Yat\u0131r\u0131m\u0131n\u0131z\u0131 i\u015Fleyemedik.<br />L\xFCtfen tekrar deneyin veya yard\u0131m i\xE7in <ContactSupportLink></ContactSupportLink>.",
11302
11376
  executingBrokerageTransfer: "Arac\u0131 kurum transferi y\xFCr\xFCt\xFCl\xFCyor",
11303
11377
  goBack: "Geri D\xF6n",
11304
11378
  continue: "Devam Et",
@@ -11306,7 +11380,7 @@ var tr_default = {
11306
11380
  dataEncrypted: "T\xFCm veriler {{appName}} ve {{exchangeName}} aras\u0131nda \u015Fifrelenir.",
11307
11381
  twoFaAlwaysRequired: "2fa her zaman gereklidir",
11308
11382
  transfersRequireApproval: "Transferler onay\u0131n\u0131z olmadan yap\u0131lamaz.",
11309
- meshConnectionError: "Borsan\u0131za ba\u011Flan\u0131lamad\u0131. L\xFCtfen tekrar deneyin.",
11383
+ bluvoConnectionError: "Borsan\u0131za ba\u011Flan\u0131lamad\u0131. L\xFCtfen tekrar deneyin.",
11310
11384
  thirdPartyConnectionMessage: "{{appName}}, {{exchangeName}} hesab\u0131n\u0131z\u0131 ba\u011Flamak i\xE7in 3. parti bir hizmet kullanacakt\u0131r."
11311
11385
  },
11312
11386
  sourceChange: {
@@ -11441,6 +11515,7 @@ var zh_default = {
11441
11515
  checkoutConfirmation: {
11442
11516
  quoteExpired: "\u62A5\u4EF7\u5DF2\u8FC7\u671F\u3002\u8BF7\u91CD\u8BD5\u3002",
11443
11517
  riskErrorMessage: "\u7531\u4E8E\u5B89\u5168\u539F\u56E0\uFF0C{{orgName}} \u65E0\u6CD5\u5904\u7406\u6B64\u5B58\u6B3E\u3002",
11518
+ insufficientGas: "\u71C3\u6599\u4E0D\u8DB3\uFF0C\u65E0\u6CD5\u5B8C\u6210\u6B64\u4EA4\u6613\u3002",
11444
11519
  signatureDeclined: "\u7B7E\u540D\u88AB\u62D2\u7EDD\u3002\u8BF7\u91CD\u8BD5\u3002",
11445
11520
  unableToSwitchChains: "\u65E0\u6CD5\u5207\u6362\u7F51\u7EDC\u3002\u8BF7\u786E\u4FDD\u60A8\u7684\u94B1\u5305\u652F\u6301\u8BE5\u7F51\u7EDC\u3002",
11446
11521
  walletClientUndefined: "\u60A8\u7684\u94B1\u5305\u8FDE\u63A5\u4E0D\u6210\u529F\u3002\u8BF7\u91CD\u8BD5\u3002",
@@ -11799,8 +11874,8 @@ var zh_default = {
11799
11874
  somethingWentWrong: "\u51FA\u73B0\u95EE\u9898\u3002\u8BF7\u91CD\u8BD5\u3002",
11800
11875
  invalid2FACode: "2FA\u4EE3\u7801\u65E0\u6548\u3002\u8BF7\u91CD\u8BD5\u3002",
11801
11876
  withdrawalError: "\u65E0\u6CD5\u4ECE\u4EA4\u6613\u6240\u63D0\u6B3E\u3002\u8BF7\u91CD\u8BD5\u3002",
11802
- meshExecutionError: "\u6211\u4EEC\u672A\u80FD\u5904\u7406\u60A8\u7684\u5B58\u6B3E\u3002\u8BF7\u91CD\u8BD5\u3002",
11803
- meshExecutionErrorFull: "\u6211\u4EEC\u672A\u80FD\u5904\u7406\u60A8\u7684\u5B58\u6B3E\u3002<br />\u8BF7\u91CD\u8BD5\u6216<ContactSupportLink></ContactSupportLink>\u5BFB\u6C42\u5E2E\u52A9\u3002",
11877
+ bluvoExecutionError: "\u6211\u4EEC\u672A\u80FD\u5904\u7406\u60A8\u7684\u5B58\u6B3E\u3002\u8BF7\u91CD\u8BD5\u3002",
11878
+ bluvoExecutionErrorFull: "\u6211\u4EEC\u672A\u80FD\u5904\u7406\u60A8\u7684\u5B58\u6B3E\u3002<br />\u8BF7\u91CD\u8BD5\u6216<ContactSupportLink></ContactSupportLink>\u5BFB\u6C42\u5E2E\u52A9\u3002",
11804
11879
  executingBrokerageTransfer: "\u6B63\u5728\u6267\u884C\u7ECF\u7EAA\u8F6C\u8D26",
11805
11880
  goBack: "\u8FD4\u56DE",
11806
11881
  continue: "\u7EE7\u7EED",
@@ -11808,7 +11883,7 @@ var zh_default = {
11808
11883
  dataEncrypted: "{{appName}} \u548C {{exchangeName}} \u4E4B\u95F4\u7684\u6240\u6709\u6570\u636E\u90FD\u7ECF\u8FC7\u52A0\u5BC6\u3002",
11809
11884
  twoFaAlwaysRequired: "\u59CB\u7EC8\u9700\u8981\u53CC\u91CD\u9A8C\u8BC1",
11810
11885
  transfersRequireApproval: "\u672A\u7ECF\u60A8\u7684\u6279\u51C6\uFF0C\u65E0\u6CD5\u8FDB\u884C\u8F6C\u8D26\u3002",
11811
- meshConnectionError: "\u65E0\u6CD5\u8FDE\u63A5\u5230\u60A8\u7684\u4EA4\u6613\u6240\u3002\u8BF7\u91CD\u8BD5\u3002",
11886
+ bluvoConnectionError: "\u65E0\u6CD5\u8FDE\u63A5\u5230\u60A8\u7684\u4EA4\u6613\u6240\u3002\u8BF7\u91CD\u8BD5\u3002",
11812
11887
  thirdPartyConnectionMessage: "{{appName}} \u5C06\u4F7F\u7528\u7B2C\u4E09\u65B9\u8FDE\u63A5\u60A8\u7684 {{exchangeName}} \u8D26\u6237\u3002"
11813
11888
  },
11814
11889
  sourceChange: {
@@ -17038,6 +17113,18 @@ function isAddressCompatibleWithChain(address, chainId) {
17038
17113
  return isAddressSupported(address) && isEvmChain === isEvmAddr;
17039
17114
  }
17040
17115
 
17116
+ // src/hooks/useIsBlacklistedWithdrawalAddress.ts
17117
+ import { isTokenAddressEquivalent as isTokenAddressEquivalent2 } from "@funkit/utils";
17118
+ function useIsBlacklistedWithdrawalAddress(address) {
17119
+ const addressBlacklist = useDynamicConfig("blacklistedwithdrawaladdress");
17120
+ return Object.keys(addressBlacklist).some(
17121
+ (blacklistedAddress) => isTokenAddressEquivalent2({
17122
+ firstTokenAddress: blacklistedAddress,
17123
+ secondTokenAddress: address
17124
+ })
17125
+ );
17126
+ }
17127
+
17041
17128
  // src/hooks/queries/useWithdrawalQuote.ts
17042
17129
  var QUOTE_REFRESH_INTERVAL_MS = 25e3;
17043
17130
  function useWithdrawalQuote({
@@ -17057,12 +17144,13 @@ function useWithdrawalQuote({
17057
17144
  const wagmiConfig = useConfig3();
17058
17145
  const { getWithdrawalDirectExecution } = useCheckoutDirectExecution();
17059
17146
  const { checkoutItem } = useCheckoutContext();
17147
+ const isRecipientBlacklisted = useIsBlacklistedWithdrawalAddress(recipientAddress);
17060
17148
  const isInstantQuoting = (symbol === "USDC" || symbol === "USDT") && chainId !== "1";
17061
17149
  const isValidAddress = isAddressCompatibleWithChain(
17062
17150
  recipientAddress,
17063
17151
  Number(chainId)
17064
17152
  );
17065
- const enabled = !!apiKey && !!targetAsset && !!checkoutItem?.sourceAssetAmount && !!recipientAddress && !!chainId && !!symbol && !!isValidAddress && !!checkoutItem;
17153
+ const enabled = !!apiKey && !!targetAsset && !!checkoutItem?.sourceAssetAmount && !!recipientAddress && !!chainId && !!symbol && !!isValidAddress && !!checkoutItem && !isRecipientBlacklisted;
17066
17154
  const { logEvent } = useTrack();
17067
17155
  const query = useQuery8({
17068
17156
  queryKey: [
@@ -17411,6 +17499,7 @@ var useTokenAndChainSelection = (transferInit, defaultValues, isWithdrawal) => {
17411
17499
 
17412
17500
  // src/modals/WithdrwalModal/useWithdrawal.ts
17413
17501
  import { useState as useState27 } from "react";
17502
+ import { useConfig as useConfig5 } from "wagmi";
17414
17503
 
17415
17504
  // src/hooks/useAutoClearState.ts
17416
17505
  import { useCallback as useCallback18, useEffect as useEffect31, useRef as useRef15, useState as useState25 } from "react";
@@ -17441,7 +17530,9 @@ function useAutoClearState(initialValue = null) {
17441
17530
 
17442
17531
  // src/modals/CheckoutModal/ConfirmationStep/useCheckoutConfirmation.tsx
17443
17532
  import { ClientError as ClientError2 } from "@funkit/utils";
17533
+ import { getTransaction } from "@wagmi/core";
17444
17534
  import { useState as useState26 } from "react";
17535
+ import { useConfig as useConfig4 } from "wagmi";
17445
17536
 
17446
17537
  // src/hooks/useIsBlacklisted.ts
17447
17538
  var useIsBlacklisted = (walletAddress, customRecipient) => {
@@ -17476,7 +17567,7 @@ function isQuoteExpiredError(error) {
17476
17567
  function isWalletClientUndefinedError(error) {
17477
17568
  return error.message.includes("wallet client is not defined");
17478
17569
  }
17479
- function toCheckoutConfirmationError(t, error) {
17570
+ async function toCheckoutConfirmationError(t, error, wagmiConfig) {
17480
17571
  const CHECKOUT_CONFIRMATION_UI_ERRORS = {
17481
17572
  QUOTE_EXPIRED: {
17482
17573
  durationMs: 5e3,
@@ -17489,6 +17580,11 @@ function toCheckoutConfirmationError(t, error) {
17489
17580
  type: "hint",
17490
17581
  code: "GENERIC_ERROR" /* GENERIC_ERROR */
17491
17582
  },
17583
+ INSUFFICIENT_GAS: {
17584
+ message: t("checkoutConfirmation.insufficientGas"),
17585
+ type: "hint",
17586
+ code: "INSUFFICIENT_GAS" /* INSUFFICIENT_GAS */
17587
+ },
17492
17588
  RISK_ERROR: {
17493
17589
  message: t("checkoutConfirmation.riskErrorMessage", {
17494
17590
  orgName: FUN_ORG_NAME
@@ -17526,7 +17622,31 @@ function toCheckoutConfirmationError(t, error) {
17526
17622
  return CHECKOUT_CONFIRMATION_UI_ERRORS.SWITCH_CHAIN_ERROR;
17527
17623
  }
17528
17624
  if (error instanceof Error) {
17529
- const confirmationError = CHECKOUT_CONFIRMATION_UI_ERRORS[error.message];
17625
+ if (error.message.match(
17626
+ /gas too low|insufficient funds|exceeds the balance of the account/i
17627
+ )) {
17628
+ return CHECKOUT_CONFIRMATION_UI_ERRORS.INSUFFICIENT_GAS;
17629
+ }
17630
+ if (error.message.match(/reverted/i) && "receipt" in error) {
17631
+ const receipt = error.receipt;
17632
+ if (receipt && "transactionHash" in receipt) {
17633
+ try {
17634
+ const tx = await getTransaction(wagmiConfig, {
17635
+ hash: receipt.transactionHash
17636
+ });
17637
+ if (receipt.gasUsed === tx.gas) {
17638
+ return CHECKOUT_CONFIRMATION_UI_ERRORS.INSUFFICIENT_GAS;
17639
+ }
17640
+ } catch (err) {
17641
+ logger.error(
17642
+ "handleCheckoutConfirmation_error:getTransactionByHashFailed",
17643
+ err
17644
+ );
17645
+ }
17646
+ }
17647
+ }
17648
+ const code = error.message;
17649
+ const confirmationError = CHECKOUT_CONFIRMATION_UI_ERRORS[code];
17530
17650
  if (confirmationError) {
17531
17651
  return confirmationError;
17532
17652
  }
@@ -17547,6 +17667,7 @@ function useCheckoutConfirmation({
17547
17667
  const { t } = useFunkitTranslation();
17548
17668
  const { checkoutItem, confirmCheckout } = useCheckoutContext();
17549
17669
  const customRecipient = checkoutItem?.initSettings.config.customRecipient;
17670
+ const wagmiConfig = useConfig4();
17550
17671
  const { apiKey } = useFunkitConfig();
17551
17672
  const { latestQuote } = useQuoteContext();
17552
17673
  const { walletAddress } = useGeneralWallet();
@@ -17581,7 +17702,8 @@ function useCheckoutConfirmation({
17581
17702
  onSuccess(depositAddress);
17582
17703
  } catch (err) {
17583
17704
  logger.error("handleCheckoutConfirmation_error", err);
17584
- const error2 = toCheckoutConfirmationError(t, err);
17705
+ const error2 = await toCheckoutConfirmationError(t, err, wagmiConfig);
17706
+ logger.info("toCheckoutConfirmationError:resulting_error", error2);
17585
17707
  setError(error2, error2.durationMs);
17586
17708
  onError(error2);
17587
17709
  } finally {
@@ -17611,6 +17733,7 @@ function useWithdrawal({
17611
17733
  const [error, setError] = useAutoClearState();
17612
17734
  const [isWithdrawing, setIsWithdrawing] = useState27(false);
17613
17735
  const [step, setStep] = useState27(null);
17736
+ const wagmiConfig = useConfig5();
17614
17737
  const configType = isWalletWithdrawalConfig(config) ? "wallet" : isCustomWithdrawalConfig(config) ? "custom" : "unknown";
17615
17738
  const handleWithdrawal = useEffectEvent(
17616
17739
  async (formData) => {
@@ -17675,7 +17798,8 @@ function useWithdrawal({
17675
17798
  stepMessage: step
17676
17799
  });
17677
17800
  }
17678
- const error2 = toCheckoutConfirmationError(t, err);
17801
+ const error2 = await toCheckoutConfirmationError(t, err, wagmiConfig);
17802
+ logger.info("toCheckoutConfirmationError:resulting_error", error2);
17679
17803
  setError(error2, error2.durationMs);
17680
17804
  withdrawalItem?.initSettings.onWithdrawalError?.({
17681
17805
  type: "error",
@@ -17834,7 +17958,7 @@ function getWithdrawButtonText({
17834
17958
  confirmingQuote,
17835
17959
  isWithdrawing,
17836
17960
  isValidAddress,
17837
- isReceipentBlacklisted,
17961
+ isRecipientBlacklisted,
17838
17962
  withdrawalUSD,
17839
17963
  isWithdrawAmountValid,
17840
17964
  isValidAddressAndChain,
@@ -17850,7 +17974,7 @@ function getWithdrawButtonText({
17850
17974
  if (!isValidAddress) {
17851
17975
  return t("withdrawal.enterRecipientAddress");
17852
17976
  }
17853
- if (isReceipentBlacklisted) {
17977
+ if (isRecipientBlacklisted) {
17854
17978
  return t("withdrawal.unsupportedRecipientAddress");
17855
17979
  }
17856
17980
  if (!withdrawalUSD || !isWithdrawAmountValid) {
@@ -18081,7 +18205,7 @@ var WithdrawContent = ({
18081
18205
  apiKey,
18082
18206
  recipientAddress
18083
18207
  );
18084
- const isReceipentBlacklisted = isBlacklistedWithdrawAddress(recipientAddress);
18208
+ const isRecipientBlacklisted = useIsBlacklistedWithdrawalAddress(recipientAddress);
18085
18209
  const lastTargetAssetErrorRef = useRef16(null);
18086
18210
  const lastQuoteErrorRef = useRef16(null);
18087
18211
  const lastRiskyRecipientRef = useRef16(null);
@@ -18143,7 +18267,7 @@ var WithdrawContent = ({
18143
18267
  lastRiskyRecipientRef.current = warningKey;
18144
18268
  }, [isRisky, recipientAddress, selectedChainId, selectedToken]);
18145
18269
  useEffect32(() => {
18146
- if (!isReceipentBlacklisted) {
18270
+ if (!isRecipientBlacklisted) {
18147
18271
  return;
18148
18272
  }
18149
18273
  const warningKey = `${recipientAddress}:${selectedChainId}`;
@@ -18156,12 +18280,12 @@ var WithdrawContent = ({
18156
18280
  tokenSymbol: selectedToken
18157
18281
  });
18158
18282
  lastBlacklistedRecipientRef.current = warningKey;
18159
- }, [isReceipentBlacklisted, recipientAddress, selectedChainId, selectedToken]);
18283
+ }, [isRecipientBlacklisted, recipientAddress, selectedChainId, selectedToken]);
18160
18284
  const bottomSectionRef = useBottomSectionRef("withdrawal");
18161
18285
  const hasAddressError = !isValidAddress && recipientAddress !== "";
18162
18286
  const hasAmountError = withdrawalUSD !== "" && !isWithdrawAmountValid;
18163
18287
  function computeCanContinue() {
18164
- return recipientAddress && withdrawalUSD && token && selectedChainId && (quote || isPlaceholderData || isQuoteLoading && isInstantQuoting) && !hasAmountError && !hasAddressError && !isCheckingAddressRisk && !isRisky && !isReceipentBlacklisted && isValidAddressAndChain && withdrawalUSD === debouncedUSD;
18288
+ return recipientAddress && withdrawalUSD && token && selectedChainId && (quote || isPlaceholderData || isQuoteLoading && isInstantQuoting) && !hasAmountError && !hasAddressError && !isCheckingAddressRisk && !isRisky && !isRecipientBlacklisted && isValidAddressAndChain && withdrawalUSD === debouncedUSD;
18165
18289
  }
18166
18290
  const canContinue = computeCanContinue();
18167
18291
  const { swapImpactUsd, appFeeUsd, gasUsd } = extractRelayFeeInfo(
@@ -18174,7 +18298,7 @@ var WithdrawContent = ({
18174
18298
  confirmingQuote,
18175
18299
  isWithdrawing,
18176
18300
  isValidAddress,
18177
- isReceipentBlacklisted,
18301
+ isRecipientBlacklisted,
18178
18302
  withdrawalUSD,
18179
18303
  isWithdrawAmountValid,
18180
18304
  isValidAddressAndChain,
@@ -19333,7 +19457,7 @@ function PaymentMethodIcon({
19333
19457
  paymentIcon
19334
19458
  );
19335
19459
  }
19336
- var ConnectedMeshPaymentMethodItem = ({
19460
+ var ConnectedBluvoPaymentMethodItem = ({
19337
19461
  paymentMethodInfo,
19338
19462
  isSelected,
19339
19463
  onSelect,
@@ -24955,7 +25079,7 @@ function BrokerageTwoFA({
24955
25079
  Trans7,
24956
25080
  {
24957
25081
  t,
24958
- i18nKey: "brokerage.meshExecutionErrorFull",
25082
+ i18nKey: "brokerage.bluvoExecutionErrorFull",
24959
25083
  components: {
24960
25084
  ContactSupportLink: /* @__PURE__ */ React138.createElement(ContactSupportLink, { size: "10" }),
24961
25085
  br: /* @__PURE__ */ React138.createElement("br", null)
@@ -25263,15 +25387,15 @@ function ConnectExchange({
25263
25387
  const { updateSelectedPaymentMethodInfo } = useCheckoutContext();
25264
25388
  const [authError, setAuthError] = useState42("");
25265
25389
  const { exchangeType, walletId, isConnected, handleStartWithdrawal } = useBluvo();
25266
- const [isLoadingMeshModal, setIsLoadingMeshModal] = useState42(false);
25390
+ const [isLoadingBluvoModal, setIsLoadingBluvoModal] = useState42(false);
25267
25391
  const icon = getExchangeIcon(brokerType, 48);
25268
- const isLoading = isLoadingMeshModal;
25392
+ const isLoading = isLoadingBluvoModal;
25269
25393
  const exchangeName = getExchangeName(brokerType);
25270
25394
  const navigateToBrokerage = useEffectEvent(() => {
25271
25395
  if (exchangeType !== brokerType || !walletId) {
25272
25396
  return;
25273
25397
  }
25274
- setIsLoadingMeshModal(false);
25398
+ setIsLoadingBluvoModal(false);
25275
25399
  const paymentInfo = createPaymentMethodInfo({
25276
25400
  paymentMethod: "brokerage" /* BROKERAGE */,
25277
25401
  deviceId: walletId,
@@ -25282,7 +25406,7 @@ function ConnectExchange({
25282
25406
  });
25283
25407
  const handleAuthError = useEffectEvent((errorMessage) => {
25284
25408
  setAuthError(errorMessage);
25285
- setIsLoadingMeshModal(false);
25409
+ setIsLoadingBluvoModal(false);
25286
25410
  });
25287
25411
  useEffect41(() => {
25288
25412
  if (isConnected) {
@@ -25291,14 +25415,14 @@ function ConnectExchange({
25291
25415
  }, [isConnected]);
25292
25416
  const onClickContinue = useCallback29(async () => {
25293
25417
  try {
25294
- setIsLoadingMeshModal(true);
25418
+ setIsLoadingBluvoModal(true);
25295
25419
  setAuthError("");
25296
25420
  await handleStartWithdrawal(brokerType);
25297
25421
  } catch (err) {
25298
- logger.error("Unable to connect to mesh", err);
25299
- handleAuthError(t("brokerage.meshConnectionError"));
25422
+ logger.error("Unable to connect to bluvo", err);
25423
+ handleAuthError(t("brokerage.bluvoConnectionError"));
25300
25424
  } finally {
25301
- setIsLoadingMeshModal(false);
25425
+ setIsLoadingBluvoModal(false);
25302
25426
  }
25303
25427
  }, [brokerType, handleStartWithdrawal, handleAuthError, t]);
25304
25428
  const bottomSectionRef = useBottomSectionRef();
@@ -25711,7 +25835,7 @@ var FunInfoBanner = () => {
25711
25835
  // src/components/FunTransactionSummary/PaymentAmountSummary.tsx
25712
25836
  import {
25713
25837
  formatCurrencyAndStringify as formatCurrencyAndStringify5,
25714
- isTokenAddressEquivalent as isTokenAddressEquivalent2,
25838
+ isTokenAddressEquivalent as isTokenAddressEquivalent3,
25715
25839
  isTokenEquivalent as isTokenEquivalent2
25716
25840
  } from "@funkit/utils";
25717
25841
  import NumberFlow from "@number-flow/react";
@@ -25861,7 +25985,7 @@ function PaymentAmountSummary({
25861
25985
  const sourceChainId = sourceAssetInfo?.chainId;
25862
25986
  const areSameChains = sourceChainId === targetChainId;
25863
25987
  const sourceIcon = sourceAssetInfo?.iconSrc ?? void 0;
25864
- const isSameTokenAddress = isTokenAddressEquivalent2({
25988
+ const isSameTokenAddress = isTokenAddressEquivalent3({
25865
25989
  firstTokenAddress: sourceTokenAddress,
25866
25990
  secondTokenAddress: targetTokenAddress
25867
25991
  });
@@ -28954,11 +29078,12 @@ function initializeState({
28954
29078
  sourceHolding,
28955
29079
  unitPrice: realUnitPrice,
28956
29080
  fiatCurrencyExchangeRate,
28957
- meldEnabled
29081
+ meldEnabled,
29082
+ apiKey
28958
29083
  }) {
28959
29084
  const { targetAssetAmount, targetChain, targetAssetTicker, isDefiMode } = checkoutConfig;
28960
29085
  const isVaultDeposit = !!checkoutConfig.stakingToken;
28961
- const isInputInFiat = !isVaultDeposit;
29086
+ const isInputInFiat = !isVaultDeposit && !isLighterEthSpot(apiKey, checkoutConfig);
28962
29087
  const unitPrice = isStablecoin(targetAssetTicker) ? 1 : realUnitPrice;
28963
29088
  const usdAvailableAmount = getUsdAvailableAmount(
28964
29089
  targetChain,
@@ -30081,6 +30206,7 @@ function InputAmountLoaded({
30081
30206
  textCustomizations
30082
30207
  }) {
30083
30208
  const { t } = useFunkitTranslation();
30209
+ const { apiKey } = useFunkitConfig();
30084
30210
  const maxCheckoutUsdString = useFlag(FlagKey18.MaxCheckoutUsd);
30085
30211
  const isSourceNavWidgetEnabled = modalState.startingStep === "select_asset" /* SELECT_ASSET */;
30086
30212
  const paymentMethodInfo = modalState.paymentMethodInfo;
@@ -30115,7 +30241,8 @@ function InputAmountLoaded({
30115
30241
  sourceHolding,
30116
30242
  unitPrice,
30117
30243
  fiatCurrencyExchangeRate,
30118
- meldEnabled
30244
+ meldEnabled,
30245
+ apiKey
30119
30246
  });
30120
30247
  const {
30121
30248
  fiatAmount,
@@ -30181,7 +30308,8 @@ function InputAmountLoaded({
30181
30308
  checkoutConfig,
30182
30309
  meldEnabled,
30183
30310
  fiatCurrency,
30184
- handleSubmit
30311
+ handleSubmit,
30312
+ previousStep: modalState.previousStep
30185
30313
  }
30186
30314
  );
30187
30315
  return /* @__PURE__ */ React175.createElement(
@@ -30260,18 +30388,29 @@ function useAmountInputUI({
30260
30388
  checkoutConfig,
30261
30389
  meldEnabled,
30262
30390
  fiatCurrency,
30263
- handleSubmit
30391
+ handleSubmit,
30392
+ previousStep
30264
30393
  }) {
30265
- const [isLayoutAnimating, setisLayoutAnimating] = React175.useState(true);
30394
+ const [isLayoutAnimating, setIsLayoutAnimating] = React175.useState(
30395
+ previousStep === "confirmation" /* CONFIRMATION */
30396
+ );
30397
+ React175.useEffect(() => {
30398
+ const id = requestAnimationFrame(() => {
30399
+ requestAnimationFrame(() => {
30400
+ setIsLayoutAnimating(true);
30401
+ });
30402
+ });
30403
+ return () => cancelAnimationFrame(id);
30404
+ }, []);
30266
30405
  const { targetAssetTicker, stakingToken } = checkoutConfig;
30267
30406
  const handleIsAmountInAbsoluteToggle = () => {
30268
- setisLayoutAnimating(true);
30407
+ setIsLayoutAnimating(true);
30269
30408
  if (!stakingToken) {
30270
30409
  toggleInputInFiat();
30271
30410
  }
30272
30411
  };
30273
30412
  const handleKeyDown = (event) => {
30274
- setisLayoutAnimating(false);
30413
+ setIsLayoutAnimating(false);
30275
30414
  if (event.key !== "Enter") {
30276
30415
  return;
30277
30416
  }
@@ -30322,6 +30461,7 @@ function useAmountInputUI({
30322
30461
  duration: 0.2,
30323
30462
  ease: [0.25, 1, 0.5, 1],
30324
30463
  layout: {
30464
+ delay: isLayoutAnimating ? 0.05 : 0,
30325
30465
  duration: isLayoutAnimating ? 0.2 : 0,
30326
30466
  ease: [0.25, 1, 0.5, 1]
30327
30467
  }
@@ -32492,7 +32632,7 @@ var ConnectedSource = ({
32492
32632
  if (paymentInfo.paymentMethod === "brokerage" /* BROKERAGE */) {
32493
32633
  const isSelected = selectedPaymentInfo?.paymentMethod === "brokerage" /* BROKERAGE */;
32494
32634
  return /* @__PURE__ */ React188.createElement(
32495
- ConnectedMeshPaymentMethodItem,
32635
+ ConnectedBluvoPaymentMethodItem,
32496
32636
  {
32497
32637
  paymentMethodInfo: paymentInfo,
32498
32638
  isSelected,
@@ -34461,6 +34601,7 @@ function useCheckoutModalTransition(checkoutItem, onClose) {
34461
34601
  animate(
34462
34602
  () => {
34463
34603
  const nextState = nextWithStep(modalState, payload);
34604
+ nextState.previousStep = modalState.step;
34464
34605
  if (payload.wipeHistory) {
34465
34606
  setHistory([]);
34466
34607
  } else if (payload.navigateToHistoryStep) {
@@ -35609,7 +35750,7 @@ function AccountModal({ onClose, open, defaultTab }) {
35609
35750
  // src/modals/ChainModal/ChainModal.tsx
35610
35751
  import { isMobile as isMobile12 } from "@funkit/utils";
35611
35752
  import React226 from "react";
35612
- import { useAccount as useAccount8, useConfig as useConfig4 } from "wagmi";
35753
+ import { useAccount as useAccount8, useConfig as useConfig6 } from "wagmi";
35613
35754
 
35614
35755
  // src/components/Icons/DisconnectSqIcon.tsx
35615
35756
  import React222 from "react";
@@ -35823,7 +35964,7 @@ var MobileScrollClassName = "_1d2b1vf1";
35823
35964
  function ChainModal({ onClose, open }) {
35824
35965
  const { t } = useFunkitTranslation();
35825
35966
  const { chainId } = useAccount8();
35826
- const { chains } = useConfig4();
35967
+ const { chains } = useConfig6();
35827
35968
  const { switchChain, pendingChainId } = useFunkitSwitchChains({
35828
35969
  onSettled: () => onClose()
35829
35970
  });
@@ -36787,7 +36928,7 @@ function ModalProvider({ children }) {
36787
36928
  } = useModalStateValueWithProp();
36788
36929
  const connectionStatus = useConnectionStatus();
36789
36930
  const { chainId } = useAccount10();
36790
- const { chains } = useConfig5();
36931
+ const { chains } = useConfig7();
36791
36932
  const isCurrentChainSupported = chains.some((chain) => chain.id === chainId);
36792
36933
  function closeModals(keepConnectModalOpen = false) {
36793
36934
  if (!keepConnectModalOpen) {
@@ -37783,7 +37924,7 @@ async function validateCheckoutConfig(config) {
37783
37924
  };
37784
37925
  }
37785
37926
  var hasSufficientBalance = async (wagmiConfig, walletAddress, tokenAddress, tokenChainId, requiredAssetAmount) => {
37786
- const finalTokenAddress = isTokenAddressEquivalent3({
37927
+ const finalTokenAddress = isTokenAddressEquivalent4({
37787
37928
  firstTokenAddress: tokenAddress,
37788
37929
  secondTokenAddress: FUNKIT_CONNECT_CHECKOUT_NATIVE_CURRENCY_ADDRESS4
37789
37930
  }) ? void 0 : tokenAddress;
@@ -38016,7 +38157,7 @@ function isPreferredChain(chainId, additionalChains = []) {
38016
38157
  return chains.has(chainId);
38017
38158
  }
38018
38159
  function isNativeTokenAddress(address) {
38019
- return isTokenAddressEquivalent4({
38160
+ return isTokenAddressEquivalent5({
38020
38161
  firstTokenAddress: address,
38021
38162
  secondTokenAddress: NATIVE_TOKEN
38022
38163
  });
@@ -38104,34 +38245,6 @@ function getUsdAvailableAmount(targetChainId, assetChainId, assetUsdAmount, paym
38104
38245
  const fees = getFeesUsdEstimate(targetChainId, assetChainId, paymentMethod);
38105
38246
  return Math.max(round4(assetUsdAmount - fees, USD_DECIMALS, "floor"), 0);
38106
38247
  }
38107
- var WITHDRAW_BLACK_LIST = {
38108
- // Stablecoins
38109
- "0x2791bca1f2de4661ed88a30c99a7a9449aa84174": "USDC.e - Polygon",
38110
- "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8": "USDC.e - Arbitrum",
38111
- "0x7f5c764cbc14f9669b88837ca1490cca17c31607": "USDC.e - Optimism",
38112
- "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": "USDC - Ethereum",
38113
- // Uniswap
38114
- "0x66a9893cC07D91D95644AEDD05D03f95e1dBA8Af": "Uniswap V4 Router - Etheruem",
38115
- "0x1095692A6237d83C6a72F3F5eFEdb9A670C49223": "Uniswap V4 Router - Polygon",
38116
- // Burn addresses
38117
- "0x0000000000000000000000000000000000000000": "Zero/Null Address",
38118
- "0x000000000000000000000000000000000000dEaD": "Burn Address",
38119
- // Misc DEX/Protocol contracts (pools, routers)
38120
- "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D": "Uniswap V2 Router",
38121
- "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45": "Uniswap V3: Old Deployer",
38122
- "0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD": "Uniswap Universal Router",
38123
- "0xE592427A0AEce92De3Edee1F18E0157C05861564": "Uniswap V3 Router",
38124
- "0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F": "SushiSwap Router",
38125
- "0xDEF1C0ded9bec7F1a1670819833240f027b25EfF": "0x Exchange Proxy",
38126
- "0x1111111254EEB25477B68fb85Ed929f73A960582": "1inch V5 Router",
38127
- "0x881D40237659C251811CEC9c364ef91dC08D300C": "Metamask Swap Router"
38128
- };
38129
- var blacklistedWithdrawAddresses = new Set(
38130
- Object.keys(WITHDRAW_BLACK_LIST).map((address) => address.toLowerCase())
38131
- );
38132
- function isBlacklistedWithdrawAddress(address) {
38133
- return blacklistedWithdrawAddresses.has(address.toLowerCase());
38134
- }
38135
38248
 
38136
38249
  // src/hooks/useWalletAssets.ts
38137
38250
  import { isTokenEquivalent as isTokenEquivalent8 } from "@funkit/utils";
@@ -38282,7 +38395,7 @@ function ConnectButtonRenderer({
38282
38395
  const { totalWalletAssetsUsd } = useWalletAssets({
38283
38396
  enableRefetchInterval: false
38284
38397
  });
38285
- const { chains: wagmiChains } = useConfig6();
38398
+ const { chains: wagmiChains } = useConfig8();
38286
38399
  const isCurrentChainSupported = wagmiChains.some(
38287
38400
  (chain) => chain.id === chainId
38288
38401
  );
@@ -1,5 +1,6 @@
1
1
  import type { TFunction } from 'i18next';
2
2
  import type { Address } from 'viem';
3
+ import { type Config } from 'wagmi';
3
4
  import type { ErrorNotification } from '~/components/FunNotification/FunNotification';
4
5
  export interface CheckoutConfirmationError extends ErrorNotification {
5
6
  durationMs?: number;
@@ -11,7 +12,8 @@ export declare enum ConfirmationErrorCode {
11
12
  RISK_ERROR = "RISK_ERROR",
12
13
  SIGNATURE_DENIED = "SIGNATURE_DENIED",
13
14
  SWITCH_CHAIN_ERROR = "SWITCH_CHAIN_ERROR",
14
- WALLET_CLIENT_UNDEFINED = "WALLET_CLIENT_UNDEFINED"
15
+ WALLET_CLIENT_UNDEFINED = "WALLET_CLIENT_UNDEFINED",
16
+ INSUFFICIENT_GAS = "INSUFFICIENT_GAS"
15
17
  }
16
18
  interface UseCheckoutConfirmationOptions {
17
19
  onError(error: CheckoutConfirmationError): void;
@@ -23,6 +25,6 @@ interface UseCheckoutConfirmationResult {
23
25
  handleCheckoutConfirmation(): Promise<void>;
24
26
  isConfirming: boolean;
25
27
  }
26
- export declare function toCheckoutConfirmationError(t: TFunction, error: unknown): CheckoutConfirmationError;
28
+ export declare function toCheckoutConfirmationError(t: TFunction, error: unknown, wagmiConfig: Config): Promise<CheckoutConfirmationError>;
27
29
  export declare function useCheckoutConfirmation({ onError, onSuccess, }: UseCheckoutConfirmationOptions): UseCheckoutConfirmationResult;
28
30
  export {};
@@ -1,6 +1,6 @@
1
1
  import type { ExchangeRates } from '@funkit/api-base';
2
2
  import React from 'react';
3
- import type { FunkitTextCustomizationsConfig } from '~/providers/FunkitConfigContext';
3
+ import { type FunkitTextCustomizationsConfig } from '~/providers/FunkitConfigContext';
4
4
  import type { AssetHoldingsItem } from '~/utils/assets';
5
5
  import type { FunkitCheckoutConfig } from '../../../providers/FunkitCheckoutContext';
6
6
  import { FunCheckoutStep, type ModalStepComponentProps } from '../stepTransition';
@@ -23,6 +23,7 @@ export interface AmountInputInitOptions {
23
23
  fiatCurrencyExchangeRate: number | undefined;
24
24
  /** Whether meld is enabled */
25
25
  meldEnabled: boolean;
26
+ apiKey: string;
26
27
  }
27
28
  export interface AmountInputState {
28
29
  /** Current amount, in target asset. Undefined if input is empty */
@@ -105,6 +106,6 @@ export type AmountInputError = {
105
106
  * Return half the balance and round up to nearest 10, 100, 1000 etc
106
107
  */
107
108
  export declare function calcInitialFiatAmount(balance: number): number;
108
- export declare function initializeState({ checkoutConfig, defaultAmount, fiatCurrency, locale, maxUsd, minUsd, paymentMethodInfo, quickOptions, sourceHolding, unitPrice: realUnitPrice, fiatCurrencyExchangeRate, meldEnabled, }: AmountInputInitOptions): AmountInputState;
109
+ export declare function initializeState({ checkoutConfig, defaultAmount, fiatCurrency, locale, maxUsd, minUsd, paymentMethodInfo, quickOptions, sourceHolding, unitPrice: realUnitPrice, fiatCurrencyExchangeRate, meldEnabled, apiKey, }: AmountInputInitOptions): AmountInputState;
109
110
  export declare function reduceState(state: AmountInputState, action: AmountInputAction): AmountInputState;
110
111
  export declare function getDerivedState(state: AmountInputState, targetAssetTicker: string): AmountInputDerivedState;
@@ -95,6 +95,7 @@ export type CheckoutModalState<S extends FunCheckoutStep = FunCheckoutStep> = {
95
95
  [FunCheckoutStep.BROKERAGE_SUCCESS]: BrokerageSuccessState;
96
96
  }[T] & {
97
97
  step: T;
98
+ previousStep?: FunCheckoutStep | null;
98
99
  };
99
100
  }[S];
100
101
  export type NextPayload<S extends FunCheckoutStep = FunCheckoutStep> = {
@@ -23,12 +23,12 @@ import {
23
23
  import {
24
24
  uniswapWallet
25
25
  } from "./chunk-LH7BMNFZ.js";
26
- import {
27
- xdefiWallet
28
- } from "./chunk-BOU4WKRZ.js";
29
26
  import {
30
27
  walletConnectWallet
31
28
  } from "./chunk-NP5QGWNL.js";
29
+ import {
30
+ xdefiWallet
31
+ } from "./chunk-BOU4WKRZ.js";
32
32
  import {
33
33
  rabbyWallet
34
34
  } from "./chunk-BBOM42DL.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@funkit/connect",
3
- "version": "7.1.0-next.5",
3
+ "version": "7.1.0-next.7",
4
4
  "description": "Funkit Connect SDK elevates DeFi apps via web2 sign-ins and one-click checkouts.",
5
5
  "files": [
6
6
  "dist",
@@ -101,9 +101,9 @@
101
101
  "use-debounce": "^10.0.5",
102
102
  "uuid": "^9.0.1",
103
103
  "@funkit/api-base": "1.12.22-next.1",
104
- "@funkit/chains": "0.5.2-next.0",
105
- "@funkit/utils": "1.1.22-next.0",
106
- "@funkit/fun-relay": "2.1.16-next.2"
104
+ "@funkit/chains": "0.5.2-next.1",
105
+ "@funkit/fun-relay": "2.1.16-next.2",
106
+ "@funkit/utils": "1.1.22-next.0"
107
107
  },
108
108
  "repository": {
109
109
  "type": "git",