@funkit/connect 7.1.0 → 7.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @funkit/connect
2
2
 
3
+ ## 7.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - ea97213: Add EITGHTYEIGHTUPS customer configuration and API key support
8
+ - b2057f1: set wide as default modal size
9
+ - 3e40d89: feat(connect,fun-relay): add LIT spot asset
10
+ - 5561b62: Fix logger to queue logs before configure() is called and flush them afterwards. Refactor logging implementation to eliminate duplicate code by consolidating validation and processing logic.
11
+ - 911ab29: feat(connect): add meld preloader to empty window
12
+ - 51c6e23: feat(connect): added ui customization option to disable wallet balance option instead of hiding it when balance is insufficient
13
+ - 8c0df14: feat(connect): remove preference check on meld providers
14
+ - c3f4c4c: feat(connect): update meld max limit messaging
15
+ - 6c6fa01: do not hide fiat payment method for lighter new asset
16
+ - Updated dependencies [ea97213]
17
+ - Updated dependencies [3e40d89]
18
+ - Updated dependencies [965b34b]
19
+ - @funkit/api-base@1.12.23
20
+ - @funkit/fun-relay@2.2.1
21
+ - @funkit/chains@0.5.3
22
+
3
23
  ## 7.1.0
4
24
 
5
25
  ### Minor Changes
@@ -24,6 +24,7 @@ declare const _default: {
24
24
  readonly '0x1111111254EEB25477B68fb85Ed929f73A960582': "1inch V5 Router";
25
25
  readonly '0x881D40237659C251811CEC9c364ef91dC08D300C': "Metamask Swap Router";
26
26
  readonly '0x07d82CD44cd598ACf355Af8c8089b30b2a13B088': "Polymarket Withdrawal Block";
27
+ readonly '2ygdTkdUtN9PhoMko12bQi6PimJrqxcKmCvQGkCG6SN7': "Polymarket Withdrawal Block";
27
28
  };
28
29
  };
29
30
  readonly blockedcountries: {
@@ -137,6 +138,23 @@ declare const _default: {
137
138
  readonly path: "FUN_MAINNET_DEPOSIT";
138
139
  };
139
140
  }];
141
+ }, {
142
+ readonly routeId: "LIGHTER_LIT_SPOT_NEW_USER";
143
+ readonly rules: readonly [{
144
+ readonly when: {
145
+ readonly chainId: "1";
146
+ readonly tokenAddress: "0x232CE3bd40fCd6f80f3d55A522d03f25Df784Ee2";
147
+ };
148
+ readonly use: {
149
+ readonly path: "FUN_MAINNET_DEPOSIT";
150
+ readonly badge: "NATIVE";
151
+ };
152
+ }, {
153
+ readonly when: "*";
154
+ readonly use: {
155
+ readonly path: "FUN_MAINNET_DEPOSIT";
156
+ };
157
+ }];
140
158
  }, {
141
159
  readonly routeId: "LIGHTER_LINK_SPOT_NEW_USER";
142
160
  readonly rules: readonly [{
@@ -1,5 +1,6 @@
1
1
  import { type BridgeVirtualBankAccount, type Guid } from '@funkit/api-base';
2
2
  import { type AllFiatAccounts } from '../domains/bridge';
3
+ export declare function useIfFiatEnabledRegardlessOfUDA(): boolean;
3
4
  export declare function useFiatEnabled(): boolean;
4
5
  export declare function useFrogAccounts(): import("@tanstack/react-query").UseQueryResult<import("@funkit/api-base").SubAccount[] | null, Error>;
5
6
  export declare function useClearFrogAccountsCache(): {
@@ -12,4 +12,5 @@ export declare const usePaymentSources: (paymentMethodInfo: ConnectablePaymentMe
12
12
  preferred: PaymentMethod[] | (import("../domains/paymentMethods").PaymentMethodBrokerageInfo | import("../domains/paymentMethods").PaymentMethodAccountInfo | import("../domains/paymentMethods").PaymentMethodVirtualBankInfo)[];
13
13
  moreSources: PaymentMethod[];
14
14
  comingSoon: PaymentMethod[];
15
+ hasUsableBalance: boolean;
15
16
  };
@@ -4,6 +4,7 @@ interface UseWalletAssetHoldingsResponse {
4
4
  isLoading: boolean;
5
5
  totalBalance: number;
6
6
  hasUsableBalance: boolean;
7
+ minValueThreshold: number;
7
8
  }
8
9
  export declare function useWalletAssetHoldings(targetChain: string): UseWalletAssetHoldingsResponse;
9
10
  export {};
package/dist/index.js CHANGED
@@ -1427,7 +1427,7 @@ function setFunkitConnectVersion({ version }) {
1427
1427
  localStorage.setItem(storageKey, version);
1428
1428
  }
1429
1429
  function getCurrentSdkVersion() {
1430
- return "7.1.0";
1430
+ return "7.1.1";
1431
1431
  }
1432
1432
  function useFingerprint() {
1433
1433
  const fingerprint = useCallback3(() => {
@@ -1461,6 +1461,8 @@ var FunLogger = class {
1461
1461
  this.userLoginType = null;
1462
1462
  this.sdkVersion = null;
1463
1463
  this.l2Address = null;
1464
+ this.isConfigured = false;
1465
+ this.logQueue = [];
1464
1466
  }
1465
1467
  getFunLogEnv() {
1466
1468
  if (!this.apiKey || FUN_DEV_API_KEYS.includes(this.apiKey)) {
@@ -1495,41 +1497,50 @@ var FunLogger = class {
1495
1497
  datadogLogs.logger.error(title, datadogData, error);
1496
1498
  }
1497
1499
  }
1498
- onDebug({ title, data }) {
1499
- const isProd = this.getFunLogEnv() === "production" /* PRODUCTION */;
1500
- if (isProd) {
1501
- this.logDataDog("debug", title, data);
1500
+ processLog(level, title, data, error) {
1501
+ if (!this.isConfigured) {
1502
+ this.logQueue.push({ level, title, data, error });
1503
+ return;
1502
1504
  }
1503
- if (!isProd || this.isDebugMode) {
1504
- console.debug(title, data || "");
1505
+ if (!this.apiKey) {
1506
+ console.error(
1507
+ "FunLogger: apiKey is not set. Please call configure() with a valid apiKey."
1508
+ );
1509
+ return;
1505
1510
  }
1506
- }
1507
- onInfo({ title, data }) {
1508
1511
  const isProd = this.getFunLogEnv() === "production" /* PRODUCTION */;
1509
1512
  if (isProd) {
1510
- this.logDataDog("info", title, data);
1513
+ this.logDataDog(level, title, data, error);
1511
1514
  }
1512
1515
  if (!isProd || this.isDebugMode) {
1513
- console.log(title, data || "");
1516
+ const formattedData = data || "";
1517
+ switch (level) {
1518
+ case "debug":
1519
+ console.debug(title, formattedData);
1520
+ break;
1521
+ case "info":
1522
+ console.log(title, formattedData);
1523
+ break;
1524
+ case "warn":
1525
+ console.warn(title, formattedData);
1526
+ break;
1527
+ case "error":
1528
+ console.error(title, formattedData, error);
1529
+ break;
1530
+ }
1514
1531
  }
1515
1532
  }
1533
+ onDebug({ title, data }) {
1534
+ this.processLog("debug", title, data);
1535
+ }
1536
+ onInfo({ title, data }) {
1537
+ this.processLog("info", title, data);
1538
+ }
1516
1539
  onWarn({ title, data }) {
1517
- const isProd = this.getFunLogEnv() === "production" /* PRODUCTION */;
1518
- if (isProd) {
1519
- this.logDataDog("warn", title, data);
1520
- }
1521
- if (!isProd || this.isDebugMode) {
1522
- console.warn(title, data || "");
1523
- }
1540
+ this.processLog("warn", title, data);
1524
1541
  }
1525
1542
  onError({ title, error, data }) {
1526
- const isProd = this.getFunLogEnv() === "production" /* PRODUCTION */;
1527
- if (isProd) {
1528
- this.logDataDog("error", title, data, error);
1529
- }
1530
- if (!isProd || this.isDebugMode) {
1531
- console.error(title, data || "", error);
1532
- }
1543
+ this.processLog("error", title, data, error);
1533
1544
  }
1534
1545
  extractError(error) {
1535
1546
  if (error instanceof Error) {
@@ -1568,11 +1579,34 @@ var FunLogger = class {
1568
1579
  };
1569
1580
  this.onError({ title, error, data });
1570
1581
  }
1582
+ flushLogQueue() {
1583
+ const queueCopy = [...this.logQueue];
1584
+ this.logQueue = [];
1585
+ for (const queuedLog of queueCopy) {
1586
+ const { level, title, data, error } = queuedLog;
1587
+ switch (level) {
1588
+ case "debug":
1589
+ this.onDebug({ title, data });
1590
+ break;
1591
+ case "info":
1592
+ this.onInfo({ title, data });
1593
+ break;
1594
+ case "warn":
1595
+ this.onWarn({ title, data });
1596
+ break;
1597
+ case "error":
1598
+ this.onError({ title, data, error });
1599
+ break;
1600
+ }
1601
+ }
1602
+ }
1571
1603
  configure(apiKey, isDebug, sdkVersion) {
1572
1604
  this.apiKey = apiKey;
1573
1605
  this.isDebugMode = isDebug;
1574
1606
  this.sdkVersion = sdkVersion;
1607
+ this.isConfigured = true;
1575
1608
  setDdogEnv(this.getFunLogEnv());
1609
+ this.flushLogQueue();
1576
1610
  }
1577
1611
  getUserId() {
1578
1612
  return this.userId;
@@ -1764,7 +1798,8 @@ var DEFAULT_UI_CUSTOMIZATIONS = {
1764
1798
  showTransactionDigest: "none"
1765
1799
  },
1766
1800
  sourceChangeScreen: {
1767
- showTargetAssetSelection: false
1801
+ showTargetAssetSelection: false,
1802
+ showWalletOnInsufficientBalance: false
1768
1803
  },
1769
1804
  inputAmountScreen: {
1770
1805
  allowTokenAmountInput: true
@@ -2314,7 +2349,8 @@ var default_configs_default = {
2314
2349
  "0xDEF1C0ded9bec7F1a1670819833240f027b25EfF": "0x Exchange Proxy",
2315
2350
  "0x1111111254EEB25477B68fb85Ed929f73A960582": "1inch V5 Router",
2316
2351
  "0x881D40237659C251811CEC9c364ef91dC08D300C": "Metamask Swap Router",
2317
- "0x07d82CD44cd598ACf355Af8c8089b30b2a13B088": "Polymarket Withdrawal Block"
2352
+ "0x07d82CD44cd598ACf355Af8c8089b30b2a13B088": "Polymarket Withdrawal Block",
2353
+ "2ygdTkdUtN9PhoMko12bQi6PimJrqxcKmCvQGkCG6SN7": "Polymarket Withdrawal Block"
2318
2354
  }
2319
2355
  },
2320
2356
  blockedcountries: {
@@ -2464,6 +2500,27 @@ var default_configs_default = {
2464
2500
  }
2465
2501
  ]
2466
2502
  },
2503
+ {
2504
+ routeId: "LIGHTER_LIT_SPOT_NEW_USER",
2505
+ rules: [
2506
+ {
2507
+ when: {
2508
+ chainId: "1",
2509
+ tokenAddress: "0x232CE3bd40fCd6f80f3d55A522d03f25Df784Ee2"
2510
+ },
2511
+ use: {
2512
+ path: "FUN_MAINNET_DEPOSIT",
2513
+ badge: "NATIVE"
2514
+ }
2515
+ },
2516
+ {
2517
+ when: "*",
2518
+ use: {
2519
+ path: "FUN_MAINNET_DEPOSIT"
2520
+ }
2521
+ }
2522
+ ]
2523
+ },
2467
2524
  {
2468
2525
  routeId: "LIGHTER_LINK_SPOT_NEW_USER",
2469
2526
  rules: [
@@ -2747,6 +2804,7 @@ import {
2747
2804
  BASED_API_KEY as BASED_API_KEY2,
2748
2805
  BENTO_API_KEY,
2749
2806
  BULLPEN_API_KEY,
2807
+ EITGHTYEIGHTUPS_API_KEY,
2750
2808
  ETHEREAL_API_KEY as ETHEREAL_API_KEY3,
2751
2809
  FELIX_API_KEY,
2752
2810
  GINZA_API_KEY,
@@ -2908,7 +2966,8 @@ var flagConfig = {
2908
2966
  KATANA_API_KEY2,
2909
2967
  HYPERBEAT_API_KEY2,
2910
2968
  HYPERDASH_API_KEY2,
2911
- FELIX_API_KEY
2969
+ FELIX_API_KEY,
2970
+ BULLPEN_API_KEY
2912
2971
  ]
2913
2972
  }
2914
2973
  ],
@@ -3160,31 +3219,7 @@ var flagConfig = {
3160
3219
  [FlagKey.TokenTransferNewTokens]: {
3161
3220
  type: "string",
3162
3221
  default_value: "",
3163
- overrides: [
3164
- // To make sure we will not display new token badges for Monad
3165
- {
3166
- if_any: [
3167
- {
3168
- key: "apiKey",
3169
- type: "isAnyOf",
3170
- values: [MONAD_API_KEY2]
3171
- }
3172
- ],
3173
- value: ""
3174
- },
3175
- {
3176
- if_any: [
3177
- {
3178
- key: "apiKey",
3179
- type: "isAnyOf",
3180
- values: [POLYMARKET_API_KEY2]
3181
- }
3182
- ],
3183
- value: JSON.stringify({
3184
- [MONAD_CHAIN_ID]: ["MON"]
3185
- })
3186
- }
3187
- ]
3222
+ overrides: []
3188
3223
  },
3189
3224
  [FlagKey.NewTokenAssetSelectionBanner]: {
3190
3225
  type: "string",
@@ -3277,6 +3312,8 @@ var flagConfig = {
3277
3312
  BULLPEN_API_KEY,
3278
3313
  ETHEREAL_API_KEY3,
3279
3314
  FELIX_API_KEY,
3315
+ GINZA_API_KEY,
3316
+ EITGHTYEIGHTUPS_API_KEY,
3280
3317
  HYENA_API_KEY2,
3281
3318
  HYPERBEAT_API_KEY2,
3282
3319
  HYPERDASH_API_KEY2,
@@ -3326,6 +3363,7 @@ var flagConfig = {
3326
3363
  ETHEREAL_API_KEY3,
3327
3364
  FELIX_API_KEY,
3328
3365
  GINZA_API_KEY,
3366
+ EITGHTYEIGHTUPS_API_KEY,
3329
3367
  HYENA_API_KEY2,
3330
3368
  HYPERBEAT_API_KEY2,
3331
3369
  HYPEREDGE_API_KEY,
@@ -4982,7 +5020,8 @@ var LIGHTER_DYNAMIC_ROUTING_ID = {
4982
5020
  UNI_SPOT_NEW_USER: "LIGHTER_UNI_SPOT_NEW_USER",
4983
5021
  AAVE_SPOT_NEW_USER: "LIGHTER_AAVE_SPOT_NEW_USER",
4984
5022
  SKY_SPOT_NEW_USER: "LIGHTER_SKY_SPOT_NEW_USER",
4985
- LDO_SPOT_NEW_USER: "LIGHTER_LDO_SPOT_NEW_USER"
5023
+ LDO_SPOT_NEW_USER: "LIGHTER_LDO_SPOT_NEW_USER",
5024
+ LIT_SPOT_NEW_USER: "LIGHTER_LIT_SPOT_NEW_USER"
4986
5025
  };
4987
5026
  var LIGHTER_TOKEN_ADDRESS_BY_ROUTING_ID = {
4988
5027
  ["0x0000000000000000000000000000000000000001".toLowerCase()]: LIGHTER_DYNAMIC_ROUTING_ID.ETH_SPOT,
@@ -4993,7 +5032,8 @@ var LIGHTER_TOKEN_ADDRESS_BY_ROUTING_ID = {
4993
5032
  ["0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984".toLowerCase()]: LIGHTER_DYNAMIC_ROUTING_ID.UNI_SPOT_NEW_USER,
4994
5033
  ["0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9".toLowerCase()]: LIGHTER_DYNAMIC_ROUTING_ID.AAVE_SPOT_NEW_USER,
4995
5034
  ["0x56072C95FAA701256059aa122697B133aDEd9279".toLowerCase()]: LIGHTER_DYNAMIC_ROUTING_ID.SKY_SPOT_NEW_USER,
4996
- ["0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32".toLowerCase()]: LIGHTER_DYNAMIC_ROUTING_ID.LDO_SPOT_NEW_USER
5035
+ ["0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32".toLowerCase()]: LIGHTER_DYNAMIC_ROUTING_ID.LDO_SPOT_NEW_USER,
5036
+ ["0x232CE3bd40fCd6f80f3d55A522d03f25Df784Ee2".toLowerCase()]: LIGHTER_DYNAMIC_ROUTING_ID.LIT_SPOT_NEW_USER
4997
5037
  };
4998
5038
  var LIGHTER_ROUTING_ID_BY_TOKEN_ADDRESS = Object.fromEntries(
4999
5039
  Object.entries(LIGHTER_TOKEN_ADDRESS_BY_ROUTING_ID).map(
@@ -6559,7 +6599,8 @@ var ASSET_LOGO_SRCS = {
6559
6599
  AUSD: "https://sdk-cdn.fun.xyz/images/ausd.svg",
6560
6600
  SUSHI: "https://sdk-cdn.fun.xyz/images/sushi.svg",
6561
6601
  OP: "https://sdk-cdn.fun.xyz/images/optimism.svg",
6562
- SKY: "https://sdk-cdn.fun.xyz/images/sky.svg"
6602
+ SKY: "https://sdk-cdn.fun.xyz/images/sky.svg",
6603
+ LIT: "https://sdk-cdn.fun.xyz/images/lit.svg"
6563
6604
  };
6564
6605
  var FALLBACK_ASSET = "https://sdk-cdn.fun.xyz/images/dollar_circle.png";
6565
6606
  function getAssetLogoSrc(symbol) {
@@ -8075,7 +8116,7 @@ var en_default = {
8075
8116
  amountBelowMinimum: "Amount below minimum",
8076
8117
  amountAboveMaximum: "Amount above maximum",
8077
8118
  inputAmountGreaterThan: "Input an amount greater than {{limit}}.",
8078
- inputAmountLowerThan: "Input an amount lower than {{limit}}.",
8119
+ inputAmountLowerThan: "{{currency}} max limit {{limit}}. Other currencies may have higher limits.",
8079
8120
  unableToRetrieveBalance: "Unable to retrieve your account balance. Please reconnect your wallet.",
8080
8121
  unableFetchPrice: "Unable to fetch price for token. Please retry.",
8081
8122
  quickOptionsPercent: "{{percent}}%",
@@ -8128,6 +8169,7 @@ var en_default = {
8128
8169
  instant: "Instant",
8129
8170
  noLimit: "No limit",
8130
8171
  fiftyThousandDollars: "$50,000",
8172
+ twentyThousandDollars: "$20,000",
8131
8173
  tenThousandDollars: "$10,000",
8132
8174
  fiveMinutes: "5 min"
8133
8175
  },
@@ -8476,7 +8518,9 @@ var en_default = {
8476
8518
  more: "more",
8477
8519
  walletDisplayLabel: "{{walletLabel}}",
8478
8520
  brokerageDisplayLabel: "{{brokerageLabel}}",
8479
- virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
8521
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}",
8522
+ insufficientBalance: "Insufficient balance",
8523
+ insufficientBalanceTooltip: "At least one asset must be over {{currency}}{{minAmount}} to continue."
8480
8524
  },
8481
8525
  quote: {
8482
8526
  preparingYourQuote: "Preparing your quote...",
@@ -8584,7 +8628,7 @@ var es_default = {
8584
8628
  amountBelowMinimum: "Monto por debajo del m\xEDnimo",
8585
8629
  amountAboveMaximum: "Monto por encima del m\xE1ximo",
8586
8630
  inputAmountGreaterThan: "Ingresa un monto mayor que {{limit}}.",
8587
- inputAmountLowerThan: "Ingresa un monto menor que {{limit}}.",
8631
+ inputAmountLowerThan: "{{currency}} l\xEDmite m\xE1ximo {{limit}}. Otras monedas pueden tener l\xEDmites m\xE1s altos.",
8588
8632
  unableToRetrieveBalance: "No se puede obtener el saldo de tu cuenta. Por favor reconecta tu billetera.",
8589
8633
  unableFetchPrice: "No se puede obtener el precio del token. Por favor reintenta.",
8590
8634
  quickOptionsPercent: "{{percent}}%",
@@ -8637,6 +8681,7 @@ var es_default = {
8637
8681
  instant: "Instant\xE1neo",
8638
8682
  noLimit: "Sin l\xEDmite",
8639
8683
  fiftyThousandDollars: "$50,000",
8684
+ twentyThousandDollars: "$20,000",
8640
8685
  tenThousandDollars: "$10,000",
8641
8686
  fiveMinutes: "5 min"
8642
8687
  },
@@ -8985,7 +9030,9 @@ var es_default = {
8985
9030
  more: "m\xE1s",
8986
9031
  walletDisplayLabel: "{{walletLabel}}",
8987
9032
  brokerageDisplayLabel: "{{brokerageLabel}}",
8988
- virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
9033
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}",
9034
+ insufficientBalance: "Saldo insuficiente",
9035
+ insufficientBalanceTooltip: "Al menos un activo debe ser mayor a {{currency}}{{minAmount}} para continuar."
8989
9036
  },
8990
9037
  quote: {
8991
9038
  preparingYourQuote: "Preparando tu cotizaci\xF3n...",
@@ -9093,7 +9140,7 @@ var fr_default = {
9093
9140
  amountBelowMinimum: "Montant inf\xE9rieur au minimum",
9094
9141
  amountAboveMaximum: "Montant sup\xE9rieur au maximum",
9095
9142
  inputAmountGreaterThan: "Saisissez un montant sup\xE9rieur \xE0 {{limit}}.",
9096
- inputAmountLowerThan: "Saisissez un montant inf\xE9rieur \xE0 {{limit}}.",
9143
+ inputAmountLowerThan: "{{currency}} limite max {{limit}}. D'autres devises peuvent avoir des limites plus \xE9lev\xE9es.",
9097
9144
  unableToRetrieveBalance: "Impossible d'obtenir le solde de votre compte. Veuillez reconnecter votre portefeuille.",
9098
9145
  unableFetchPrice: "Impossible d'obtenir le prix de l'actif. Veuillez r\xE9essayer.",
9099
9146
  quickOptionsPercent: "{{percent}}%",
@@ -9146,6 +9193,7 @@ var fr_default = {
9146
9193
  instant: "Instantan\xE9",
9147
9194
  noLimit: "Pas de limite",
9148
9195
  fiftyThousandDollars: "$50,000",
9196
+ twentyThousandDollars: "$20,000",
9149
9197
  tenThousandDollars: "$10,000",
9150
9198
  fiveMinutes: "5 min"
9151
9199
  },
@@ -9494,7 +9542,9 @@ var fr_default = {
9494
9542
  more: "plus",
9495
9543
  walletDisplayLabel: "{{walletLabel}}",
9496
9544
  brokerageDisplayLabel: "{{brokerageLabel}}",
9497
- virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
9545
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}",
9546
+ insufficientBalance: "Solde insuffisant",
9547
+ insufficientBalanceTooltip: "Au moins un actif doit d\xE9passer {{currency}}{{minAmount}} pour continuer."
9498
9548
  },
9499
9549
  quote: {
9500
9550
  preparingYourQuote: "Pr\xE9paration de votre cotation...",
@@ -9602,7 +9652,7 @@ var ja_default = {
9602
9652
  amountBelowMinimum: "\u91D1\u984D\u304C\u6700\u5C0F\u5024\u3092\u4E0B\u56DE\u3063\u3066\u3044\u307E\u3059",
9603
9653
  amountAboveMaximum: "\u91D1\u984D\u304C\u6700\u5927\u5024\u3092\u8D85\u3048\u3066\u3044\u307E\u3059",
9604
9654
  inputAmountGreaterThan: "{{limit}}\u3088\u308A\u5927\u304D\u3044\u91D1\u984D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
9605
- inputAmountLowerThan: "{{limit}}\u3088\u308A\u5C0F\u3055\u3044\u91D1\u984D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
9655
+ inputAmountLowerThan: "{{currency}} \u4E0A\u9650 {{limit}}\u3002\u4ED6\u306E\u901A\u8CA8\u306F\u3088\u308A\u9AD8\u3044\u9650\u5EA6\u984D\u306E\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002",
9606
9656
  unableToRetrieveBalance: "\u30A2\u30AB\u30A6\u30F3\u30C8\u6B8B\u9AD8\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3002\u30A6\u30A9\u30EC\u30C3\u30C8\u3092\u518D\u63A5\u7D9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
9607
9657
  unableFetchPrice: "\u30C8\u30FC\u30AF\u30F3\u306E\u4FA1\u683C\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3002\u518D\u8A66\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
9608
9658
  quickOptionsPercent: "{{percent}}%",
@@ -9655,6 +9705,7 @@ var ja_default = {
9655
9705
  instant: "\u5373\u6642",
9656
9706
  noLimit: "\u5236\u9650\u306A\u3057",
9657
9707
  fiftyThousandDollars: "$50,000",
9708
+ twentyThousandDollars: "$20,000",
9658
9709
  tenThousandDollars: "$10,000",
9659
9710
  fiveMinutes: "5\u5206"
9660
9711
  },
@@ -10003,7 +10054,9 @@ var ja_default = {
10003
10054
  more: "\u3082\u3063\u3068\u898B\u308B",
10004
10055
  walletDisplayLabel: "{{walletLabel}}",
10005
10056
  brokerageDisplayLabel: "{{brokerageLabel}}",
10006
- virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
10057
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}",
10058
+ insufficientBalance: "\u6B8B\u9AD8\u4E0D\u8DB3",
10059
+ insufficientBalanceTooltip: "\u7D9A\u884C\u3059\u308B\u306B\u306F\u3001\u5C11\u306A\u304F\u3068\u30821\u3064\u306E\u8CC7\u7523\u304C{{currency}}{{minAmount}}\u3092\u8D85\u3048\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002"
10007
10060
  },
10008
10061
  quote: {
10009
10062
  preparingYourQuote: "\u898B\u7A4D\u3082\u308A\u3092\u6E96\u5099\u4E2D...",
@@ -10111,7 +10164,7 @@ var ko_default = {
10111
10164
  amountBelowMinimum: "\uCD5C\uC18C \uAE08\uC561 \uBBF8\uB9CC",
10112
10165
  amountAboveMaximum: "\uCD5C\uB300 \uAE08\uC561 \uCD08\uACFC",
10113
10166
  inputAmountGreaterThan: "{{limit}}\uBCF4\uB2E4 \uD070 \uAE08\uC561\uC744 \uC785\uB825\uD558\uC138\uC694.",
10114
- inputAmountLowerThan: "{{limit}}\uBCF4\uB2E4 \uC791\uC740 \uAE08\uC561\uC744 \uC785\uB825\uD558\uC138\uC694.",
10167
+ inputAmountLowerThan: "{{currency}} \uCD5C\uB300 \uD55C\uB3C4 {{limit}}. \uB2E4\uB978 \uD1B5\uD654\uB294 \uB354 \uB192\uC740 \uD55C\uB3C4\uAC00 \uC788\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",
10115
10168
  unableToRetrieveBalance: "\uACC4\uC815 \uC794\uC561\uC744 \uAC00\uC838\uC62C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC9C0\uAC11\uC744 \uB2E4\uC2DC \uC5F0\uACB0\uD574 \uC8FC\uC138\uC694.",
10116
10169
  unableFetchPrice: "\uD1A0\uD070 \uAC00\uACA9\uC744 \uAC00\uC838\uC62C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",
10117
10170
  quickOptionsPercent: "{{percent}}%",
@@ -10164,6 +10217,7 @@ var ko_default = {
10164
10217
  instant: "\uC989\uC2DC",
10165
10218
  noLimit: "\uC81C\uD55C \uC5C6\uC74C",
10166
10219
  fiftyThousandDollars: "$50,000",
10220
+ twentyThousandDollars: "$20,000",
10167
10221
  tenThousandDollars: "$10,000",
10168
10222
  fiveMinutes: "5\uBD84"
10169
10223
  },
@@ -10512,7 +10566,9 @@ var ko_default = {
10512
10566
  more: "\uB354 \uBCF4\uAE30",
10513
10567
  walletDisplayLabel: "{{walletLabel}}",
10514
10568
  brokerageDisplayLabel: "{{brokerageLabel}}",
10515
- virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
10569
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}",
10570
+ insufficientBalance: "\uC794\uC561 \uBD80\uC871",
10571
+ insufficientBalanceTooltip: "\uACC4\uC18D\uD558\uB824\uBA74 \uCD5C\uC18C \uD55C \uAC1C\uC758 \uC790\uC0B0\uC774 {{currency}}{{minAmount}} \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."
10516
10572
  },
10517
10573
  quote: {
10518
10574
  preparingYourQuote: "\uACAC\uC801 \uC900\uBE44 \uC911...",
@@ -10620,7 +10676,7 @@ var ru_default = {
10620
10676
  amountBelowMinimum: "\u0421\u0443\u043C\u043C\u0430 \u043D\u0438\u0436\u0435 \u043C\u0438\u043D\u0438\u043C\u0443\u043C\u0430",
10621
10677
  amountAboveMaximum: "\u0421\u0443\u043C\u043C\u0430 \u0432\u044B\u0448\u0435 \u043C\u0430\u043A\u0441\u0438\u043C\u0443\u043C\u0430",
10622
10678
  inputAmountGreaterThan: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u0443\u043C\u043C\u0443 \u0431\u043E\u043B\u044C\u0448\u0435 {{limit}}.",
10623
- inputAmountLowerThan: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u0443\u043C\u043C\u0443 \u043C\u0435\u043D\u044C\u0448\u0435 {{limit}}.",
10679
+ inputAmountLowerThan: "{{currency}} \u043C\u0430\u043A\u0441. \u043B\u0438\u043C\u0438\u0442 {{limit}}. \u0414\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u043B\u044E\u0442\u044B \u043C\u043E\u0433\u0443\u0442 \u0438\u043C\u0435\u0442\u044C \u0431\u043E\u043B\u0435\u0435 \u0432\u044B\u0441\u043E\u043A\u0438\u0435 \u043B\u0438\u043C\u0438\u0442\u044B.",
10624
10680
  unableToRetrieveBalance: "\u041D\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044F \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0431\u0430\u043B\u0430\u043D\u0441 \u0432\u0430\u0448\u0435\u0433\u043E \u0441\u0447\u0451\u0442\u0430. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u0435\u0440\u0435\u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u043A\u043E\u0448\u0435\u043B\u0451\u043A.",
10625
10681
  unableFetchPrice: "\u041D\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044F \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0446\u0435\u043D\u0443 \u0434\u043B\u044F \u0442\u043E\u043A\u0435\u043D\u0430. \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.",
10626
10682
  quickOptionsPercent: "{{percent}}%",
@@ -10673,6 +10729,7 @@ var ru_default = {
10673
10729
  instant: "\u041C\u0433\u043D\u043E\u0432\u0435\u043D\u043D\u043E",
10674
10730
  noLimit: "\u0411\u0435\u0437 \u043B\u0438\u043C\u0438\u0442\u0430",
10675
10731
  fiftyThousandDollars: "$50,000",
10732
+ twentyThousandDollars: "$20,000",
10676
10733
  tenThousandDollars: "$10,000",
10677
10734
  fiveMinutes: "5 \u043C\u0438\u043D"
10678
10735
  },
@@ -11021,7 +11078,9 @@ var ru_default = {
11021
11078
  more: "\u0431\u043E\u043B\u044C\u0448\u0435",
11022
11079
  walletDisplayLabel: "{{walletLabel}}",
11023
11080
  brokerageDisplayLabel: "{{brokerageLabel}}",
11024
- virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
11081
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}",
11082
+ insufficientBalance: "\u041D\u0435\u0434\u043E\u0441\u0442\u0430\u0442\u043E\u0447\u043D\u044B\u0439 \u0431\u0430\u043B\u0430\u043D\u0441",
11083
+ insufficientBalanceTooltip: "\u0414\u043B\u044F \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0435\u043D\u0438\u044F \u0445\u043E\u0442\u044F \u0431\u044B \u043E\u0434\u0438\u043D \u0430\u043A\u0442\u0438\u0432 \u0434\u043E\u043B\u0436\u0435\u043D \u043F\u0440\u0435\u0432\u044B\u0448\u0430\u0442\u044C {{currency}}{{minAmount}}."
11025
11084
  },
11026
11085
  quote: {
11027
11086
  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...",
@@ -11129,7 +11188,7 @@ var tr_default = {
11129
11188
  amountBelowMinimum: "Tutar minimumun alt\u0131nda",
11130
11189
  amountAboveMaximum: "Tutar maksimumun \xFCzerinde",
11131
11190
  inputAmountGreaterThan: "{{limit}} de\u011Ferinden b\xFCy\xFCk bir tutar girin.",
11132
- inputAmountLowerThan: "{{limit}} de\u011Ferinden k\xFC\xE7\xFCk bir tutar girin.",
11191
+ inputAmountLowerThan: "{{currency}} maksimum limit {{limit}}. Di\u011Fer para birimlerinin limitleri daha y\xFCksek olabilir.",
11133
11192
  unableToRetrieveBalance: "Hesap bakiyeniz al\u0131nam\u0131yor. L\xFCtfen hesab\u0131n\u0131z\u0131 yeniden ba\u011Flamay\u0131 deneyin.",
11134
11193
  unableFetchPrice: "Token fiyat\u0131 al\u0131nam\u0131yor. L\xFCtfen tekrar deneyin.",
11135
11194
  quickOptionsPercent: "{{percent}}%",
@@ -11182,6 +11241,7 @@ var tr_default = {
11182
11241
  instant: "An\u0131nda",
11183
11242
  noLimit: "Limit yok",
11184
11243
  fiftyThousandDollars: "$50,000",
11244
+ twentyThousandDollars: "$20,000",
11185
11245
  tenThousandDollars: "$10,000",
11186
11246
  fiveMinutes: "5 dk"
11187
11247
  },
@@ -11530,7 +11590,9 @@ var tr_default = {
11530
11590
  more: "daha fazla",
11531
11591
  walletDisplayLabel: "{{walletLabel}}",
11532
11592
  brokerageDisplayLabel: "{{brokerageLabel}}",
11533
- virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
11593
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}",
11594
+ insufficientBalance: "Yetersiz bakiye",
11595
+ insufficientBalanceTooltip: "Devam etmek i\xE7in en az bir varl\u0131\u011F\u0131n {{currency}}{{minAmount}} \xFCzerinde olmas\u0131 gerekiyor."
11534
11596
  },
11535
11597
  quote: {
11536
11598
  preparingYourQuote: "Teklifiniz haz\u0131rlan\u0131yor...",
@@ -11638,7 +11700,7 @@ var zh_default = {
11638
11700
  amountBelowMinimum: "\u91D1\u989D\u4F4E\u4E8E\u6700\u5C0F\u503C",
11639
11701
  amountAboveMaximum: "\u91D1\u989D\u8D85\u8FC7\u6700\u5927\u503C",
11640
11702
  inputAmountGreaterThan: "\u8BF7\u8F93\u5165\u5927\u4E8E {{limit}} \u7684\u91D1\u989D\u3002",
11641
- inputAmountLowerThan: "\u8BF7\u8F93\u5165\u5C0F\u4E8E {{limit}} \u7684\u91D1\u989D\u3002",
11703
+ inputAmountLowerThan: "{{currency}} \u6700\u5927\u9650\u989D {{limit}}\u3002\u5176\u4ED6\u8D27\u5E01\u53EF\u80FD\u6709\u66F4\u9AD8\u7684\u9650\u989D\u3002",
11642
11704
  unableToRetrieveBalance: "\u65E0\u6CD5\u83B7\u53D6\u60A8\u7684\u8D26\u6237\u4F59\u989D\u3002\u8BF7\u5C1D\u8BD5\u91CD\u65B0\u94FE\u63A5\u60A8\u7684\u8D26\u6237\u3002",
11643
11705
  unableFetchPrice: "\u65E0\u6CD5\u83B7\u53D6\u4EE3\u5E01\u4EF7\u683C\u3002\u8BF7\u91CD\u8BD5\u3002",
11644
11706
  quickOptionsPercent: "{{percent}}%",
@@ -11691,6 +11753,7 @@ var zh_default = {
11691
11753
  instant: "\u5373\u65F6",
11692
11754
  noLimit: "\u65E0\u9650\u989D",
11693
11755
  fiftyThousandDollars: "$50,000",
11756
+ twentyThousandDollars: "$20,000",
11694
11757
  tenThousandDollars: "$10,000",
11695
11758
  fiveMinutes: "5\u5206\u949F"
11696
11759
  },
@@ -12039,7 +12102,9 @@ var zh_default = {
12039
12102
  more: "\u66F4\u591A",
12040
12103
  walletDisplayLabel: "{{walletLabel}}",
12041
12104
  brokerageDisplayLabel: "{{brokerageLabel}}",
12042
- virtualFiatDisplayLabel: "{{virtualFiatLabel}}"
12105
+ virtualFiatDisplayLabel: "{{virtualFiatLabel}}",
12106
+ insufficientBalance: "\u4F59\u989D\u4E0D\u8DB3",
12107
+ insufficientBalanceTooltip: "\u81F3\u5C11\u6709\u4E00\u9879\u8D44\u4EA7\u5FC5\u987B\u8D85\u8FC7 {{currency}}{{minAmount}} \u624D\u80FD\u7EE7\u7EED\u3002"
12043
12108
  },
12044
12109
  quote: {
12045
12110
  preparingYourQuote: "\u6B63\u5728\u51C6\u5907\u60A8\u7684\u62A5\u4EF7...",
@@ -13178,9 +13243,7 @@ var ModalSizeOptions = {
13178
13243
  MEDIUM: "medium",
13179
13244
  WIDE: "wide"
13180
13245
  };
13181
- var ModalSizeContext = createContext13(
13182
- ModalSizeOptions.MEDIUM
13183
- );
13246
+ var ModalSizeContext = createContext13(ModalSizeOptions.WIDE);
13184
13247
  function ModalSizeProvider({
13185
13248
  children,
13186
13249
  modalSize
@@ -13574,7 +13637,7 @@ function FunkitProviderInner({
13574
13637
  }, [activeTheme, selector]);
13575
13638
  const avatarContext = avatar ?? defaultAvatar;
13576
13639
  const isSandboxMode = !!sandbox;
13577
- const modalSizeFinal = modalSize || ModalSizeOptions.MEDIUM;
13640
+ const modalSizeFinal = modalSize || ModalSizeOptions.WIDE;
13578
13641
  return /* @__PURE__ */ React36.createElement(FunkitI18nProvider, { locale }, /* @__PURE__ */ React36.createElement(FunkitStatsigProvider, { isDevelopment: debug }, /* @__PURE__ */ React36.createElement(FunkitConfigContext.Provider, { value: funkitConfig }, /* @__PURE__ */ React36.createElement(FunkitConnectChainProvider, { initialChain }, /* @__PURE__ */ React36.createElement(ModalSizeProvider, { modalSize: modalSizeFinal }, /* @__PURE__ */ React36.createElement(GeneralWalletProvider, null, /* @__PURE__ */ React36.createElement(FunkitFlagsProvider, null, /* @__PURE__ */ React36.createElement(FunkitCheckoutHistoryProvider, null, /* @__PURE__ */ React36.createElement(FunkitCheckoutProvider, null, /* @__PURE__ */ React36.createElement(FunkitSandboxContext.Provider, { value: isSandboxMode }, /* @__PURE__ */ React36.createElement(FunkitBrokerageProvider, null, /* @__PURE__ */ React36.createElement(FunkitQuoteProvider, null, /* @__PURE__ */ React36.createElement(AvatarContext.Provider, { value: avatarContext }, /* @__PURE__ */ React36.createElement(ThemeIdContext2.Provider, { value: id }, /* @__PURE__ */ React36.createElement(ShowBalanceProvider, null, /* @__PURE__ */ React36.createElement(UserPresenceProvider, null, /* @__PURE__ */ React36.createElement(ModalProvider, null, activeTheme ? /* @__PURE__ */ React36.createElement(
13579
13642
  "div",
13580
13643
  {
@@ -19220,14 +19283,18 @@ var sepaCountryCode = [
19220
19283
  // 'NL', // Netherlands
19221
19284
  // 'SI', // Slovenia
19222
19285
  ];
19223
- function useFiatEnabled() {
19286
+ function useIfFiatEnabledRegardlessOfUDA() {
19224
19287
  const { userIpInfo } = useFunkitUserIp();
19225
19288
  const isEuSepaUser = sepaCountryCode.includes(
19226
19289
  userIpInfo?.alpha2 || "PLACEHOLDER"
19227
19290
  );
19228
- const isTokenTransferEnabled = useIsQRCodeTransferEnabled();
19229
19291
  const isFiatEnabled = useFlag(FlagKey12.EnableFiatDeposit);
19230
- return isEuSepaUser && isTokenTransferEnabled && isFiatEnabled;
19292
+ return isEuSepaUser && isFiatEnabled;
19293
+ }
19294
+ function useFiatEnabled() {
19295
+ const isTokenTransferEnabled = useIsQRCodeTransferEnabled();
19296
+ const isFiatEnabledRegardlessOfUDA = useIfFiatEnabledRegardlessOfUDA();
19297
+ return isTokenTransferEnabled && isFiatEnabledRegardlessOfUDA;
19231
19298
  }
19232
19299
  function useFrogAccounts() {
19233
19300
  const { apiKey } = useFunkitConfig();
@@ -19415,15 +19482,30 @@ var processWalletAssets = (walletAssets, targetChain) => {
19415
19482
  };
19416
19483
  function useWalletAssetHoldings(targetChain) {
19417
19484
  const { walletAssets, isLoading, totalWalletAssetsUsd } = useWalletAssets();
19485
+ const { checkoutItem } = useCheckoutContext();
19486
+ const config = checkoutItem?.initSettings.config;
19418
19487
  const processedAssets = useMemo23(
19419
19488
  () => processWalletAssets(walletAssets, targetChain),
19420
19489
  [targetChain, walletAssets]
19421
19490
  );
19491
+ const minValueThreshold = (() => {
19492
+ const minTargetAssetUSD = config?.getMinDepositUSD?.({
19493
+ tokenAddress: config.targetAsset,
19494
+ tokenChainId: config.targetChain
19495
+ }) ?? 0;
19496
+ return Math.max(minTargetAssetUSD, MIN_CHECKOUT_AMOUNT_USD);
19497
+ })();
19498
+ const hasUsableBalance = (() => {
19499
+ return Object.values(processedAssets ?? {}).some(
19500
+ (asset) => asset.usdAmount && asset.usdAmount >= minValueThreshold
19501
+ );
19502
+ })();
19422
19503
  return {
19423
19504
  data: processedAssets,
19424
19505
  isLoading,
19425
19506
  totalBalance: totalWalletAssetsUsd,
19426
- hasUsableBalance: isLoading || totalWalletAssetsUsd >= MIN_CHECKOUT_AMOUNT_USD
19507
+ hasUsableBalance: hasUsableBalance || isLoading,
19508
+ minValueThreshold
19427
19509
  };
19428
19510
  }
19429
19511
 
@@ -19930,7 +20012,12 @@ var AccountBalancePaymentMethodItem = ({
19930
20012
  }) => {
19931
20013
  const { t } = useFunkitTranslation();
19932
20014
  const walletLabel = useWalletLabel();
19933
- const { isLoading: isLoadingAssets, totalBalance } = useWalletAssetHoldings(targetChainId);
20015
+ const {
20016
+ isLoading: isLoadingAssets,
20017
+ totalBalance,
20018
+ hasUsableBalance,
20019
+ minValueThreshold
20020
+ } = useWalletAssetHoldings(targetChainId);
19934
20021
  const paymentIcon = usePaymentMethodIcon("balance" /* ACCOUNT_BALANCE */);
19935
20022
  const dynamicLimit = formatCurrencyAndStringify4(totalBalance);
19936
20023
  const disclaimerText = dynamicLimit ? t("payment.disclaimerText", {
@@ -19941,6 +20028,14 @@ var AccountBalancePaymentMethodItem = ({
19941
20028
  time: t("payment.instant")
19942
20029
  });
19943
20030
  const keyIconSize = 20;
20031
+ const isDisabled = isLoadingAssets || !hasUsableBalance;
20032
+ const insufficientBalanceTooltip = t(
20033
+ "sourceChange.insufficientBalanceTooltip",
20034
+ {
20035
+ minAmount: minValueThreshold,
20036
+ currency: "$"
20037
+ }
20038
+ );
19944
20039
  return /* @__PURE__ */ React84.createElement(
19945
20040
  FunPaymentMethodItem,
19946
20041
  {
@@ -19954,8 +20049,9 @@ var AccountBalancePaymentMethodItem = ({
19954
20049
  ),
19955
20050
  keyText: walletLabel,
19956
20051
  valueIcon: isSelected && showSelectedCheckmark && /* @__PURE__ */ React84.createElement(CheckIcon, null),
20052
+ badge: !isLoadingAssets && !hasUsableBalance && /* @__PURE__ */ React84.createElement(FunTooltip, { content: insufficientBalanceTooltip, startDelay: 150 }, /* @__PURE__ */ React84.createElement(FunBadge, { borderColor: "generalBorder" }, t("sourceChange.insufficientBalance"))),
19957
20053
  onClick: onSelect,
19958
- isDisabled: isLoadingAssets,
20054
+ isDisabled,
19959
20055
  disclaimerText: isLoadingAssets ? t("payment.fetchingBalance") : disclaimerText,
19960
20056
  testId: testId || "wallet-payment-method"
19961
20057
  }
@@ -19986,7 +20082,7 @@ var CardPaymentMethodItem = ({
19986
20082
  onClick,
19987
20083
  isDisabled: !isClickable,
19988
20084
  disclaimerText: t("payment.disclaimerText", {
19989
- limit: t("payment.fiftyThousandDollars"),
20085
+ limit: t("payment.twentyThousandDollars"),
19990
20086
  time: estimatedTimeText
19991
20087
  }),
19992
20088
  testId: "card-payment-method"
@@ -28403,7 +28499,10 @@ var useMeldLimitError = (amount, fiatCurrency) => {
28403
28499
  );
28404
28500
  return {
28405
28501
  issue: t("inputAmount.amountAboveMaximum"),
28406
- suggestion: t("inputAmount.inputAmountLowerThan", { limit })
28502
+ suggestion: t("inputAmount.inputAmountLowerThan", {
28503
+ limit,
28504
+ currency: meldLimit.currencyCode
28505
+ })
28407
28506
  };
28408
28507
  }
28409
28508
  return void 0;
@@ -30357,10 +30456,7 @@ function autoPickBestQuote(quotes) {
30357
30456
  if ((sortedByScore[0]?.customerScore ?? 0) >= 30) {
30358
30457
  return sortedByScore[0];
30359
30458
  }
30360
- const coinbaseOrBinance = quotes.filter(
30361
- (q) => q.serviceProvider === MeldServiceProvider.COINBASEPAY || q.serviceProvider === MeldServiceProvider.BINANCECONNECT
30362
- );
30363
- const coinbase = coinbaseOrBinance.find(
30459
+ const coinbase = quotes.find(
30364
30460
  (q) => q.serviceProvider === MeldServiceProvider.COINBASEPAY
30365
30461
  );
30366
30462
  const moonpay = quotes.find(
@@ -30370,27 +30466,6 @@ function autoPickBestQuote(quotes) {
30370
30466
  if (moonpay && !coinbase || moonpay && !isCoinbaseOneToOne) {
30371
30467
  return moonpay;
30372
30468
  }
30373
- if (coinbaseOrBinance.length > 0) {
30374
- const highestCoinbaseOrBinanceDestAmount = [...coinbaseOrBinance].sort(
30375
- (a, b) => (b.destinationAmount ?? 0) - (a.destinationAmount ?? 0)
30376
- )[0];
30377
- const highestDestAmount = [...quotes].sort(
30378
- (a, b) => (b.destinationAmount ?? 0) - (a.destinationAmount ?? 0)
30379
- )[0];
30380
- const highestCoinbaseOrBinanceCustomerScore = [...coinbaseOrBinance].sort(
30381
- (a, b) => (b.customerScore ?? 0) - (a.customerScore ?? 0)
30382
- )[0];
30383
- if ((highestCoinbaseOrBinanceDestAmount?.destinationAmount ?? 0) >= 0.96 * (highestDestAmount?.destinationAmount ?? 0)) {
30384
- if (highestCoinbaseOrBinanceCustomerScore?.customerScore === highestDestAmount?.customerScore) {
30385
- return highestCoinbaseOrBinanceDestAmount;
30386
- }
30387
- return highestCoinbaseOrBinanceCustomerScore;
30388
- }
30389
- const sortedByDestAmount2 = [...coinbaseOrBinance].sort(
30390
- (a, b) => (b.destinationAmount ?? 0) - (a.destinationAmount ?? 0)
30391
- );
30392
- return sortedByDestAmount2[0];
30393
- }
30394
30469
  const sortedByDestAmount = [...quotes].sort(
30395
30470
  (a, b) => (b.destinationAmount ?? 0) - (a.destinationAmount ?? 0)
30396
30471
  );
@@ -30775,6 +30850,37 @@ async function openMeldPopup(linkGetter) {
30775
30850
  return;
30776
30851
  }
30777
30852
  popup.opener = null;
30853
+ const style = popup.document.createElement("style");
30854
+ style.textContent = `
30855
+ * { margin: 0; padding: 0; box-sizing: border-box; }
30856
+ body {
30857
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
30858
+ display: flex;
30859
+ align-items: center;
30860
+ justify-content: center;
30861
+ min-height: 100vh;
30862
+ background: #ffffff;
30863
+ }
30864
+ .spinner {
30865
+ width: 48px;
30866
+ height: 48px;
30867
+ border: 4px solid #e8e8e8;
30868
+ border-top-color: #2b2b2b;
30869
+ border-radius: 50%;
30870
+ animation: spin 0.8s linear infinite;
30871
+ margin: 0 auto 16px;
30872
+ }
30873
+ .loader-container { text-align: center; }
30874
+ @keyframes spin { to { transform: rotate(360deg); } }
30875
+ `;
30876
+ popup.document.head.appendChild(style);
30877
+ popup.document.title = "Meld | Buy & Sell Crypto";
30878
+ const loaderContainer = popup.document.createElement("div");
30879
+ loaderContainer.className = "loader-container";
30880
+ const spinner = popup.document.createElement("div");
30881
+ spinner.className = "spinner";
30882
+ loaderContainer.appendChild(spinner);
30883
+ popup.document.body.appendChild(loaderContainer);
30778
30884
  const result = await linkGetter();
30779
30885
  popup.location.href = result.widgetUrl;
30780
30886
  }
@@ -31539,14 +31645,16 @@ var usePaymentSources = (paymentMethodInfo, targetChainId, checkoutConfig) => {
31539
31645
  );
31540
31646
  const matchingFiatAccount = useMatchingVirtualFiatAccount(allFiatAccounts);
31541
31647
  const { hasUsableBalance } = useWalletAssetHoldings(targetChainId);
31542
- const { apiKey } = useFunkitConfig();
31648
+ const { apiKey, uiCustomizations } = useFunkitConfig();
31543
31649
  const isConnected = userInfo.isConnected;
31650
+ const showWalletOnInsufficientBalance = uiCustomizations.sourceChangeScreen.showWalletOnInsufficientBalance;
31544
31651
  const {
31545
31652
  isFiatEnabled,
31546
31653
  isTokenTransferEnabled,
31547
31654
  isMeldEnabled,
31548
31655
  isBrokerageEnabled
31549
31656
  } = usePaymentMethodEnablement({ checkoutConfig });
31657
+ const isFiatEnabledRegardlessOfUDA = useIfFiatEnabledRegardlessOfUDA();
31550
31658
  const accountPaymentMethodInfo = createPaymentMethodInfo({
31551
31659
  paymentMethod: "balance" /* ACCOUNT_BALANCE */,
31552
31660
  walletAddress
@@ -31556,8 +31664,8 @@ var usePaymentSources = (paymentMethodInfo, targetChainId, checkoutConfig) => {
31556
31664
  matchingFiatAccount,
31557
31665
  bridgeCustomer: allFiatAccounts.bridgeCustomer
31558
31666
  }) : null;
31559
- const showBalanceOption = isKatanaCustomer(apiKey) || hasUsableBalance;
31560
- const connectedAccountInfo = paymentMethodInfo?.paymentMethod !== "balance" /* ACCOUNT_BALANCE */ && isConnected && showBalanceOption ? accountPaymentMethodInfo : null;
31667
+ const showWallet = paymentMethodInfo?.paymentMethod !== "balance" /* ACCOUNT_BALANCE */ && isConnected && (showWalletOnInsufficientBalance || hasUsableBalance);
31668
+ const connectedAccountInfo = showWallet ? accountPaymentMethodInfo : null;
31561
31669
  const connected = [
31562
31670
  connectedAccountInfo,
31563
31671
  paymentMethodInfo,
@@ -31580,12 +31688,16 @@ var usePaymentSources = (paymentMethodInfo, targetChainId, checkoutConfig) => {
31580
31688
  if (isLighterxyzCustomer(apiKey) && !isTokenTransferEnabled) {
31581
31689
  comingSoon.push("token_transfer" /* TOKEN_TRANSFER */);
31582
31690
  comingSoon.push("card" /* CARD */);
31691
+ if (isFiatEnabledRegardlessOfUDA) {
31692
+ comingSoon.push("virtual_bank" /* VIRTUAL_BANK */);
31693
+ }
31583
31694
  comingSoon.push("brokerage" /* BROKERAGE */);
31584
31695
  }
31585
31696
  return {
31586
31697
  preferred: connected.length > 0 ? connected : fallback2,
31587
31698
  moreSources: newSources,
31588
- comingSoon
31699
+ comingSoon,
31700
+ hasUsableBalance
31589
31701
  };
31590
31702
  };
31591
31703
 
@@ -38847,10 +38959,10 @@ var isAssetUsableToPayForCheckout = ({
38847
38959
  config,
38848
38960
  walletAddress: payerAddress
38849
38961
  });
38850
- const minTargetAssetUSD = config ? config.getMinDepositUSD?.({
38962
+ const minTargetAssetUSD = config?.getMinDepositUSD?.({
38851
38963
  tokenAddress: config.targetAsset,
38852
38964
  tokenChainId: config.targetChain
38853
- }) : 0;
38965
+ }) ?? 0;
38854
38966
  const minValueThreshold = Math.max(
38855
38967
  minTargetAssetUSD ?? 0,
38856
38968
  MIN_CHECKOUT_AMOUNT_USD,
@@ -76,6 +76,8 @@ export interface FunkitUiCustomizationsConfig {
76
76
  sourceChangeScreen?: {
77
77
  /** Whether to show target asset selection menu if dynamicTargetAssetCandidates exist - defaults to false */
78
78
  showTargetAssetSelection?: boolean;
79
+ /** Whether to show wallet option when balance is insufficient - defaults to false (hides wallet) */
80
+ showWalletOnInsufficientBalance?: boolean;
79
81
  };
80
82
  }
81
83
  export type FunkitUiCustomizationsConfigInternal = Required<FunkitUiCustomizationsConfig> & {
@@ -7,7 +7,7 @@ export declare const flagConfig: {
7
7
  readonly if_any: [{
8
8
  readonly key: "apiKey";
9
9
  readonly type: "isAnyOf";
10
- readonly values: ["Y53dikxXdT4E3afI1l8BMBSWgyhKvf65k6Dut1k6", "OXLUmejkh9PlNDS4gSvi9gcEWacOpTz2KUVepVf4", "lUzTaIRxs95iin3pCAafB1ChA5akBiuQ1tjhXnau", "di9ZSqn1Ya68Y2XpBPUV1rCtNGXh8Xe5MGWzb1Xe", "cGlmpTmNh657m8TiV5RFdwna6FG5pxM6ajiNHvw3"];
10
+ readonly values: ["Y53dikxXdT4E3afI1l8BMBSWgyhKvf65k6Dut1k6", "OXLUmejkh9PlNDS4gSvi9gcEWacOpTz2KUVepVf4", "lUzTaIRxs95iin3pCAafB1ChA5akBiuQ1tjhXnau", "di9ZSqn1Ya68Y2XpBPUV1rCtNGXh8Xe5MGWzb1Xe", "cGlmpTmNh657m8TiV5RFdwna6FG5pxM6ajiNHvw3", "57G91zNoew4nYxIoqSCpS1vWr8JT3gGVasNqMwgG"];
11
11
  }];
12
12
  readonly value: "";
13
13
  }];
@@ -157,21 +157,7 @@ export declare const flagConfig: {
157
157
  readonly token_transfer_new_tokens: {
158
158
  readonly type: "string";
159
159
  readonly default_value: string;
160
- readonly overrides: [{
161
- readonly if_any: [{
162
- readonly key: "apiKey";
163
- readonly type: "isAnyOf";
164
- readonly values: ["2hicPxo2vy2NMHcg2cEU9crOeKtDpc14NEfMCthc"];
165
- }];
166
- readonly value: "";
167
- }, {
168
- readonly if_any: [{
169
- readonly key: "apiKey";
170
- readonly type: "isAnyOf";
171
- readonly values: ["Y53dikxXdT4E3afI1l8BMBSWgyhKvf65k6Dut1k6"];
172
- }];
173
- readonly value: string;
174
- }];
160
+ readonly overrides: [];
175
161
  };
176
162
  readonly new_token_asset_selection_banner: {
177
163
  readonly type: "string";
@@ -212,7 +198,7 @@ export declare const flagConfig: {
212
198
  readonly if_any: [{
213
199
  readonly key: "apiKey";
214
200
  readonly type: "isAnyOf";
215
- readonly values: ["6TUi99Tq3O9MWj1IFX8Pv6spmPXzcvhy9NvBoeW2", "clDebbfo9edXq1GydZ0CahSAfSimPj616lFa9p8e", "57G91zNoew4nYxIoqSCpS1vWr8JT3gGVasNqMwgG", "M3uox3cw0u8YCPV9cIREA6AugUMvPFTk6qOpm4um", "cGlmpTmNh657m8TiV5RFdwna6FG5pxM6ajiNHvw3", "pLQBJsA6zS9tg990rbdBD6UdABkWRv5O60vlrVcW", "lUzTaIRxs95iin3pCAafB1ChA5akBiuQ1tjhXnau", "di9ZSqn1Ya68Y2XpBPUV1rCtNGXh8Xe5MGWzb1Xe", "53OWivH0fK2VIAuMZTycr52EnSEnPWj97Jy3Dpiz", "AH7lRIhbsL167nptv6eub9xDJXVHnYUm2vL7FLjK", "1cRIX8XoWP801OILra02i13IJ08IARBP5B6ydcnp", "i6e1I8cfX625TTwRJlD2DshKyAoaUtO8aeoaR4i2", "2hicPxo2vy2NMHcg2cEU9crOeKtDpc14NEfMCthc", "SMbBD7DS9b3EPcyBVg4a8az1rRWR9xB068chHoUN", "wQDLu86Qab61vbtru7thf8Yj0xaeqVUH4ohoXESu", "Y53dikxXdT4E3afI1l8BMBSWgyhKvf65k6Dut1k6", "iMTsSsgDdI2FC0FjeEejS9LMxuJgDhFO3OHlwVjT", "HKHvPSPDezaxsTohFgDuG4WpKW6hB4SFYyztm9vc", "5UzOrcAE2F3rcuMX2EeIlaYv5VUcDe6Lyh0PeZX2"];
201
+ readonly values: ["6TUi99Tq3O9MWj1IFX8Pv6spmPXzcvhy9NvBoeW2", "clDebbfo9edXq1GydZ0CahSAfSimPj616lFa9p8e", "57G91zNoew4nYxIoqSCpS1vWr8JT3gGVasNqMwgG", "M3uox3cw0u8YCPV9cIREA6AugUMvPFTk6qOpm4um", "cGlmpTmNh657m8TiV5RFdwna6FG5pxM6ajiNHvw3", "1QxzeJ4XKT78ba86whLct6sc7dW60Dl461UVWFdw", "ODW4jUppoG3H87YcY9GZhoGj4hX5W0w9mr24LEU8", "pLQBJsA6zS9tg990rbdBD6UdABkWRv5O60vlrVcW", "lUzTaIRxs95iin3pCAafB1ChA5akBiuQ1tjhXnau", "di9ZSqn1Ya68Y2XpBPUV1rCtNGXh8Xe5MGWzb1Xe", "53OWivH0fK2VIAuMZTycr52EnSEnPWj97Jy3Dpiz", "AH7lRIhbsL167nptv6eub9xDJXVHnYUm2vL7FLjK", "1cRIX8XoWP801OILra02i13IJ08IARBP5B6ydcnp", "i6e1I8cfX625TTwRJlD2DshKyAoaUtO8aeoaR4i2", "2hicPxo2vy2NMHcg2cEU9crOeKtDpc14NEfMCthc", "SMbBD7DS9b3EPcyBVg4a8az1rRWR9xB068chHoUN", "wQDLu86Qab61vbtru7thf8Yj0xaeqVUH4ohoXESu", "Y53dikxXdT4E3afI1l8BMBSWgyhKvf65k6Dut1k6", "iMTsSsgDdI2FC0FjeEejS9LMxuJgDhFO3OHlwVjT", "HKHvPSPDezaxsTohFgDuG4WpKW6hB4SFYyztm9vc", "5UzOrcAE2F3rcuMX2EeIlaYv5VUcDe6Lyh0PeZX2"];
216
202
  }];
217
203
  readonly value: true;
218
204
  }];
@@ -231,7 +217,7 @@ export declare const flagConfig: {
231
217
  readonly if_any: [{
232
218
  readonly key: "apiKey";
233
219
  readonly type: "isAnyOf";
234
- readonly values: ["6TUi99Tq3O9MWj1IFX8Pv6spmPXzcvhy9NvBoeW2", "clDebbfo9edXq1GydZ0CahSAfSimPj616lFa9p8e", "Tkp90bAf246UQXfou5uHY9UHN7AUV6xK1tgEWKke", "57G91zNoew4nYxIoqSCpS1vWr8JT3gGVasNqMwgG", "M3uox3cw0u8YCPV9cIREA6AugUMvPFTk6qOpm4um", "cGlmpTmNh657m8TiV5RFdwna6FG5pxM6ajiNHvw3", "1QxzeJ4XKT78ba86whLct6sc7dW60Dl461UVWFdw", "pLQBJsA6zS9tg990rbdBD6UdABkWRv5O60vlrVcW", "lUzTaIRxs95iin3pCAafB1ChA5akBiuQ1tjhXnau", "53OWivH0fK2VIAuMZTycr52EnSEnPWj97Jy3Dpiz", "AH7lRIhbsL167nptv6eub9xDJXVHnYUm2vL7FLjK", "TY2G63jFfd7H29aHiJIzg5RqdXNdog2Q5jgb8tr7", "i6e1I8cfX625TTwRJlD2DshKyAoaUtO8aeoaR4i2", "1cRIX8XoWP801OILra02i13IJ08IARBP5B6ydcnp", "2hicPxo2vy2NMHcg2cEU9crOeKtDpc14NEfMCthc", "SMbBD7DS9b3EPcyBVg4a8az1rRWR9xB068chHoUN", "Y53dikxXdT4E3afI1l8BMBSWgyhKvf65k6Dut1k6", "wQDLu86Qab61vbtru7thf8Yj0xaeqVUH4ohoXESu", "iMTsSsgDdI2FC0FjeEejS9LMxuJgDhFO3OHlwVjT", "HKHvPSPDezaxsTohFgDuG4WpKW6hB4SFYyztm9vc", "5UzOrcAE2F3rcuMX2EeIlaYv5VUcDe6Lyh0PeZX2"];
220
+ readonly values: ["6TUi99Tq3O9MWj1IFX8Pv6spmPXzcvhy9NvBoeW2", "clDebbfo9edXq1GydZ0CahSAfSimPj616lFa9p8e", "Tkp90bAf246UQXfou5uHY9UHN7AUV6xK1tgEWKke", "57G91zNoew4nYxIoqSCpS1vWr8JT3gGVasNqMwgG", "M3uox3cw0u8YCPV9cIREA6AugUMvPFTk6qOpm4um", "cGlmpTmNh657m8TiV5RFdwna6FG5pxM6ajiNHvw3", "1QxzeJ4XKT78ba86whLct6sc7dW60Dl461UVWFdw", "ODW4jUppoG3H87YcY9GZhoGj4hX5W0w9mr24LEU8", "pLQBJsA6zS9tg990rbdBD6UdABkWRv5O60vlrVcW", "lUzTaIRxs95iin3pCAafB1ChA5akBiuQ1tjhXnau", "53OWivH0fK2VIAuMZTycr52EnSEnPWj97Jy3Dpiz", "AH7lRIhbsL167nptv6eub9xDJXVHnYUm2vL7FLjK", "TY2G63jFfd7H29aHiJIzg5RqdXNdog2Q5jgb8tr7", "i6e1I8cfX625TTwRJlD2DshKyAoaUtO8aeoaR4i2", "1cRIX8XoWP801OILra02i13IJ08IARBP5B6ydcnp", "2hicPxo2vy2NMHcg2cEU9crOeKtDpc14NEfMCthc", "SMbBD7DS9b3EPcyBVg4a8az1rRWR9xB068chHoUN", "Y53dikxXdT4E3afI1l8BMBSWgyhKvf65k6Dut1k6", "wQDLu86Qab61vbtru7thf8Yj0xaeqVUH4ohoXESu", "iMTsSsgDdI2FC0FjeEejS9LMxuJgDhFO3OHlwVjT", "HKHvPSPDezaxsTohFgDuG4WpKW6hB4SFYyztm9vc", "5UzOrcAE2F3rcuMX2EeIlaYv5VUcDe6Lyh0PeZX2"];
235
221
  }];
236
222
  readonly value: true;
237
223
  }, {
@@ -7,9 +7,12 @@ declare class FunLogger {
7
7
  protected userLoginType: string | null;
8
8
  protected sdkVersion: string | null;
9
9
  protected l2Address: string | null;
10
+ private isConfigured;
11
+ private logQueue;
10
12
  constructor();
11
13
  private getFunLogEnv;
12
14
  private logDataDog;
15
+ private processLog;
13
16
  private onDebug;
14
17
  private onInfo;
15
18
  private onWarn;
@@ -28,6 +31,7 @@ declare class FunLogger {
28
31
  * In a lot of places it's actually being used as a "data" prop, which also usually has an `.error` property representing an actual {@link Error} object.
29
32
  */
30
33
  error(title: string, errorOrData: unknown, _data?: object): void;
34
+ private flushLogQueue;
31
35
  configure(apiKey: string | null, isDebug: boolean, sdkVersion: string): void;
32
36
  getUserId(): string | null;
33
37
  getUserAddress(): string | null;
@@ -37,4 +41,4 @@ declare class FunLogger {
37
41
  setUserInfo(userId: string, userAddress: string, userName: string, userLoginType: string, l2Address?: string): void;
38
42
  }
39
43
  declare const logger: FunLogger;
40
- export { logger };
44
+ export { logger, FunLogger };
@@ -12,6 +12,7 @@ export declare const LIGHTER_DYNAMIC_ROUTING_ID: {
12
12
  AAVE_SPOT_NEW_USER: string;
13
13
  SKY_SPOT_NEW_USER: string;
14
14
  LDO_SPOT_NEW_USER: string;
15
+ LIT_SPOT_NEW_USER: string;
15
16
  };
16
17
  export declare const getLighterRoutingIdByTokenAddress: (address: Address) => string | undefined;
17
18
  export declare const getLighterTokenAddressByRoutingId: (id: string) => Address | undefined;
@@ -47,12 +47,12 @@ import {
47
47
  import {
48
48
  safeheronWallet
49
49
  } from "./chunk-QS2XIZEH.js";
50
- import {
51
- subWallet
52
- } from "./chunk-2E4PDCEJ.js";
53
50
  import {
54
51
  safepalWallet
55
52
  } from "./chunk-W7Y6I22Y.js";
53
+ import {
54
+ subWallet
55
+ } from "./chunk-2E4PDCEJ.js";
56
56
  import {
57
57
  metaMaskWallet
58
58
  } from "./chunk-RA7MCWF4.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@funkit/connect",
3
- "version": "7.1.0",
3
+ "version": "7.1.1",
4
4
  "description": "Funkit Connect SDK elevates DeFi apps via web2 sign-ins and one-click checkouts.",
5
5
  "files": [
6
6
  "dist",
@@ -52,7 +52,7 @@
52
52
  "@storybook/addon-links": "^10.1.3",
53
53
  "@storybook/react-vite": "^9.1.3",
54
54
  "@testing-library/jest-dom": "^6.2.0",
55
- "@testing-library/react": "^16.0.1",
55
+ "@testing-library/react": "^16.3.1",
56
56
  "@testing-library/user-event": "^14.5.2",
57
57
  "@types/qrcode": "^1.5.5",
58
58
  "@types/ua-parser-js": "^0.7.39",
@@ -60,7 +60,7 @@
60
60
  "@vanilla-extract/esbuild-plugin": "^2.3.16",
61
61
  "@vanilla-extract/private": "^1.0.7",
62
62
  "@vanilla-extract/vite-plugin": "^5.0.3",
63
- "@vitejs/plugin-react": "^5.0.2",
63
+ "@vitejs/plugin-react": "^5.1.2",
64
64
  "autoprefixer": "^10.4.16",
65
65
  "buffer": "^6.0.3",
66
66
  "dotenv": "^17.2.3",
@@ -102,9 +102,9 @@
102
102
  "ua-parser-js": "^1.0.37",
103
103
  "use-debounce": "^10.0.5",
104
104
  "uuid": "^9.0.1",
105
- "@funkit/api-base": "1.12.22",
106
- "@funkit/chains": "0.5.2",
107
- "@funkit/fun-relay": "2.2.0",
105
+ "@funkit/api-base": "1.12.23",
106
+ "@funkit/chains": "0.5.3",
107
+ "@funkit/fun-relay": "2.2.1",
108
108
  "@funkit/utils": "1.1.22"
109
109
  },
110
110
  "repository": {