@funkit/connect 3.4.2 → 3.4.3

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,21 @@
1
1
  # @funkit/connect
2
2
 
3
+ ## 3.4.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 3f47f1d: feat(connect): disable amount input/options while quoting
8
+ - 2819f86: fix: always wait for account balance loaded
9
+ - c15a773: fix(connect): do not run risk assessment without walletAddress
10
+ - cc71e58: tooling: fix fingerprinting at build time
11
+ - 769bbf5: feat: direct deposit help guide linkout
12
+ - b66eb91: feat(connect): expose useConnectonStatus hook
13
+ - f6a1693: feat: support new emailConfirmationApprovalRequired mesh status
14
+ - Updated dependencies [f6a1693]
15
+ - @funkit/api-base@1.3.1
16
+ - @funkit/core@2.2.3
17
+ - @funkit/wagmi-tools@3.0.14
18
+
3
19
  ## 3.4.2
4
20
 
5
21
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export { FunkitSocialLoginMethod, NATIVE_TOKEN } from './consts/funkit';
8
8
  export { cssObjectFromTheme } from './css/cssObjectFromTheme';
9
9
  export { cssStringFromTheme } from './css/cssStringFromTheme';
10
10
  export { PaymentMethod } from './domains/paymentMethods';
11
+ export { useConnectionStatus } from './hooks/useConnectionStatus';
11
12
  export type { Locale } from './locales/';
12
13
  export type { DisclaimerComponent } from './providers/AppContext';
13
14
  export type { AuthenticationConfig, AuthenticationStatus, } from './providers/AuthenticationContext';
package/dist/index.js CHANGED
@@ -508,7 +508,7 @@ import PrivyJS, {
508
508
  } from "@privy-io/js-sdk-core";
509
509
  import React188, {
510
510
  createContext as createContext16,
511
- useCallback as useCallback34,
511
+ useCallback as useCallback35,
512
512
  useContext as useContext18,
513
513
  useEffect as useEffect37,
514
514
  useMemo as useMemo35,
@@ -1021,7 +1021,7 @@ var useInitialChainId = () => useContext4(FunkitConnectChainContext).initialChai
1021
1021
  // src/providers/ModalContext.tsx
1022
1022
  import React187, {
1023
1023
  createContext as createContext15,
1024
- useCallback as useCallback33,
1024
+ useCallback as useCallback34,
1025
1025
  useContext as useContext17,
1026
1026
  useEffect as useEffect36,
1027
1027
  useMemo as useMemo34,
@@ -9569,7 +9569,10 @@ var statusNamingMap = {
9569
9569
  function StatusTag({ state, refundState, isDelayed }) {
9570
9570
  const { status, isCompleted } = useCheckoutStateBooleans(state);
9571
9571
  const color = isCompleted ? "success" : "secondaryText";
9572
- return /* @__PURE__ */ React99.createElement(Text, { color, size: "12", weight: "medium" }, refundState === "REFUNDED" ? "Refunded" : isDelayed ? "Pending" : statusNamingMap[status]);
9572
+ return /* @__PURE__ */ React99.createElement(Text, { color, size: "12", weight: "medium" }, refundState === "REFUNDED" ? "Refunded" : (
9573
+ // With some hardcoded timings in `FunCheckoutStatus`, it is possible for isDelayed to stay true while isCompleted is already true
9574
+ isDelayed && !isCompleted ? "Pending" : statusNamingMap[status]
9575
+ ));
9573
9576
  }
9574
9577
  var ReceivedAmount = ({ config }) => {
9575
9578
  const targetAmount = getCheckoutItemDisplay(config);
@@ -12564,10 +12567,10 @@ import { getRiskAssessmentForAddress } from "@funkit/api-base";
12564
12567
  import { useQuery as useQuery4 } from "@tanstack/react-query";
12565
12568
  var BLOCKED_RISK_LEVELS = ["Severe", "High"];
12566
12569
  var hasRisk = async (apiKey, walletAddress, customRecipient) => {
12567
- const getUserWalletRisk = getRiskAssessmentForAddress({
12570
+ const getUserWalletRisk = walletAddress ? getRiskAssessmentForAddress({
12568
12571
  address: walletAddress,
12569
12572
  apiKey
12570
- }).then((assessment) => assessment?.risk);
12573
+ }).then((assessment) => assessment?.risk) : null;
12571
12574
  const getRecipientWalletRisk = customRecipient ? getRiskAssessmentForAddress({
12572
12575
  address: customRecipient,
12573
12576
  apiKey
@@ -12576,8 +12579,14 @@ var hasRisk = async (apiKey, walletAddress, customRecipient) => {
12576
12579
  getUserWalletRisk,
12577
12580
  getRecipientWalletRisk
12578
12581
  ]);
12579
- logger.log("addressRiskAssessments", addressRisks);
12580
- return addressRisks.some((risk) => BLOCKED_RISK_LEVELS.includes(risk || ""));
12582
+ const isCheckoutRisky = addressRisks.some(
12583
+ (risk) => BLOCKED_RISK_LEVELS.includes(risk || "")
12584
+ );
12585
+ logger.log("riskAssessment_isCheckoutRisky", {
12586
+ isCheckoutRisky,
12587
+ addressRisks
12588
+ });
12589
+ return isCheckoutRisky;
12581
12590
  };
12582
12591
  var useIsCheckoutRisky = (checkoutItem) => {
12583
12592
  const { walletAddress } = useGeneralWallet();
@@ -12868,7 +12877,7 @@ function CheckoutComplete({ modalState, onClose }) {
12868
12877
 
12869
12878
  // src/modals/CheckoutModal/ConfirmationStep.tsx
12870
12879
  import { ClientError as ClientError3, meshPreviewTransfer as meshPreviewTransfer2 } from "@funkit/api-base";
12871
- import React182, { useCallback as useCallback32, useEffect as useEffect35, useMemo as useMemo33, useState as useState49 } from "react";
12880
+ import React182, { useCallback as useCallback33, useEffect as useEffect35, useMemo as useMemo33, useState as useState49 } from "react";
12872
12881
  import { createPortal as createPortal9 } from "react-dom";
12873
12882
  import { isAddress as isAddress3 } from "viem";
12874
12883
 
@@ -14377,6 +14386,9 @@ function FunPaymentMethods({
14377
14386
  if (selectablePaymentMethods.includes("balance" /* ACCOUNT_BALANCE */) && hasSufficientBalance2) {
14378
14387
  return "balance" /* ACCOUNT_BALANCE */;
14379
14388
  }
14389
+ if (selectablePaymentMethods.includes("token_transfer" /* TOKEN_TRANSFER */)) {
14390
+ return "token_transfer" /* TOKEN_TRANSFER */;
14391
+ }
14380
14392
  if (selectablePaymentMethods.includes("card" /* CARD */)) {
14381
14393
  return "card" /* CARD */;
14382
14394
  }
@@ -14408,7 +14420,7 @@ function FunPaymentMethods({
14408
14420
  const { textCustomizations } = useFunkitConfig();
14409
14421
  const onClickContinue = useCallback20(async () => {
14410
14422
  setIsContinuing(true);
14411
- const executeContinue = async () => {
14423
+ const executeContinue = () => {
14412
14424
  if (canContinue && selectedOption === "card" /* CARD */ && apiKey === POLYMARKET_API_KEY) {
14413
14425
  onPolymarketCardSwitchWrapper();
14414
14426
  return;
@@ -14446,7 +14458,7 @@ function FunPaymentMethods({
14446
14458
  }
14447
14459
  };
14448
14460
  try {
14449
- await executeContinue();
14461
+ executeContinue();
14450
14462
  } finally {
14451
14463
  setIsContinuing(false);
14452
14464
  }
@@ -14785,7 +14797,7 @@ function CheckoutPrimaryInfo({
14785
14797
  }
14786
14798
 
14787
14799
  // src/modals/CheckoutModal/stepTransition.ts
14788
- import { useCallback as useCallback30, useRef as useRef15, useState as useState48 } from "react";
14800
+ import { useCallback as useCallback31, useRef as useRef15, useState as useState48 } from "react";
14789
14801
 
14790
14802
  // src/hooks/useCheckoutQuoteNotification.ts
14791
14803
  import { useMemo as useMemo22 } from "react";
@@ -15827,6 +15839,7 @@ function InputAmountLoaded({
15827
15839
  inputProps: {
15828
15840
  type: isInputInUsd ? "text" : "number",
15829
15841
  autoFocus: true,
15842
+ disabled: isQuoting,
15830
15843
  // get ios to use numpad key with period
15831
15844
  inputMode: "decimal"
15832
15845
  },
@@ -15855,6 +15868,7 @@ function InputAmountLoaded({
15855
15868
  FunIconButton,
15856
15869
  {
15857
15870
  icon: /* @__PURE__ */ React154.createElement(SwitchIcon, null),
15871
+ isDisabled: isQuoting,
15858
15872
  paddingY: "1",
15859
15873
  paddingX: "6",
15860
15874
  color: { base: "actionColor", hover: "actionColorHover" },
@@ -15869,6 +15883,7 @@ function InputAmountLoaded({
15869
15883
  !!usdAvailableAmount && USD_AMOUNT_OPTIONS_PCT.map((percent) => /* @__PURE__ */ React154.createElement(
15870
15884
  FunIconButton,
15871
15885
  {
15886
+ isDisabled: isQuoting,
15872
15887
  fontSize: "14",
15873
15888
  fontWeight: "medium",
15874
15889
  icon: null,
@@ -16360,11 +16375,6 @@ function loadingAccountNext(state, payload) {
16360
16375
  step: "select_asset" /* SELECT_ASSET */,
16361
16376
  paymentMethodInfo: payload.paymentMethodInfo
16362
16377
  };
16363
- case "token_transfer" /* TOKEN_TRANSFER */:
16364
- return {
16365
- ...state,
16366
- step: "transfer_token" /* TRANSFER_TOKEN */
16367
- };
16368
16378
  default:
16369
16379
  return {
16370
16380
  ...state,
@@ -16386,7 +16396,6 @@ function LoadingAccount({
16386
16396
  onNext
16387
16397
  }) {
16388
16398
  const { apiKey } = useFunkitConfig();
16389
- const { isLoading: isLoadingFlags, flags } = useFlags();
16390
16399
  const { walletAddress } = useGeneralWallet();
16391
16400
  const { targetChainId } = modalState;
16392
16401
  const { isLoading: isFetchingAssets, totalWalletAssetsUsd } = useWalletAssets(
@@ -16399,9 +16408,7 @@ function LoadingAccount({
16399
16408
  connection
16400
16409
  );
16401
16410
  const { updateSelectedPaymentMethodInfo } = useCheckoutContext();
16402
- const isTokenTransferEnabled = flags?.["enable_token_transfer" /* EnableTokenTransfer */];
16403
16411
  useEffect30(() => {
16404
- if (isLoadingFlags) return;
16405
16412
  if (totalWalletAssetsUsd >= USABLE_AMOUNT) {
16406
16413
  const paymentMethodInfo = createPaymentMethodInfo({
16407
16414
  paymentMethod: "balance" /* ACCOUNT_BALANCE */,
@@ -16413,7 +16420,9 @@ function LoadingAccount({
16413
16420
  usablePaymentMethod: "balance" /* ACCOUNT_BALANCE */,
16414
16421
  paymentMethodInfo
16415
16422
  });
16416
- } else if (connection && hasNonZeroDollarToken(data)) {
16423
+ return;
16424
+ }
16425
+ if (connection && hasNonZeroDollarToken(data)) {
16417
16426
  const paymentMethodInfo = createPaymentMethodInfo({
16418
16427
  paymentMethod: "brokerage" /* BROKERAGE */,
16419
16428
  brokerage: connection.brokerage,
@@ -16425,27 +16434,19 @@ function LoadingAccount({
16425
16434
  usablePaymentMethod: "brokerage" /* BROKERAGE */,
16426
16435
  paymentMethodInfo
16427
16436
  });
16428
- } else if (isTokenTransferEnabled && apiKey === POLYMARKET_API_KEY) {
16429
- const paymentMethodInfo = createPaymentMethodInfo({
16430
- paymentMethod: "token_transfer" /* TOKEN_TRANSFER */
16431
- });
16432
- updateSelectedPaymentMethodInfo(paymentMethodInfo);
16433
- onNext({
16434
- step: "loading_account" /* LOADING_ACCOUNT */,
16435
- usablePaymentMethod: "token_transfer" /* TOKEN_TRANSFER */
16436
- });
16437
- } else if (!isLoadingMesh && !isFetchingAssets) {
16438
- onNext({
16439
- step: "loading_account" /* LOADING_ACCOUNT */,
16440
- usablePaymentMethod: null
16441
- });
16437
+ return;
16438
+ }
16439
+ if (isLoadingMesh || isFetchingAssets) {
16440
+ return;
16442
16441
  }
16442
+ onNext({
16443
+ step: "loading_account" /* LOADING_ACCOUNT */,
16444
+ usablePaymentMethod: null
16445
+ });
16443
16446
  }, [
16444
16447
  walletAddress,
16445
16448
  isLoadingMesh,
16446
- isLoadingFlags,
16447
16449
  apiKey,
16448
- isTokenTransferEnabled,
16449
16450
  isFetchingAssets,
16450
16451
  data,
16451
16452
  onNext,
@@ -16643,6 +16644,7 @@ function MeshVerification({
16643
16644
  setExecutionError(transferResponse.errorMessage || "");
16644
16645
  break;
16645
16646
  case MeshExecuteTransferStatus.emailConfirmationRequired:
16647
+ case MeshExecuteTransferStatus.emailConfirmationApprovalRequired:
16646
16648
  setScreen(3 /* EMAIL_CONFIRMATION */);
16647
16649
  break;
16648
16650
  case MeshExecuteTransferStatus.deviceConfirmationRequired:
@@ -16686,6 +16688,7 @@ function MeshVerification({
16686
16688
  case MeshExecuteTransferStatus.deviceConfirmationRequired:
16687
16689
  return "Device confirmation required";
16688
16690
  case MeshExecuteTransferStatus.emailConfirmationRequired:
16691
+ case MeshExecuteTransferStatus.emailConfirmationApprovalRequired:
16689
16692
  return "Email confirmation required";
16690
16693
  case MeshExecuteTransferStatus.addressWhitelistRequired:
16691
16694
  return "Manual whitelist required";
@@ -16702,6 +16705,7 @@ function MeshVerification({
16702
16705
  case MeshExecuteTransferStatus.deviceConfirmationRequired:
16703
16706
  return `Open the ${exchange} app and verify your transaction. After you've approved this transaction, click \u201CContinue.\u201D`;
16704
16707
  case MeshExecuteTransferStatus.emailConfirmationRequired:
16708
+ case MeshExecuteTransferStatus.emailConfirmationApprovalRequired:
16705
16709
  return `Click the link sent to your email to confirm this transaction. Click \u201CContinue\u201D after you've approved this transaction.`;
16706
16710
  case MeshExecuteTransferStatus.addressWhitelistRequired:
16707
16711
  return `Go to ${exchange} to manually whitelist your address. After you've whitelisted this address you can retry your transaction.`;
@@ -17854,7 +17858,7 @@ function useRemainingMeshExchangeConnections(selected) {
17854
17858
  }
17855
17859
 
17856
17860
  // src/modals/CheckoutModal/TransferToken.tsx
17857
- import React181, { useState as useState47 } from "react";
17861
+ import React181, { useCallback as useCallback30, useState as useState47 } from "react";
17858
17862
  import { mainnet as mainnet6, polygon as polygon3 } from "viem/chains";
17859
17863
 
17860
17864
  // src/components/Dropdown/TokenDropdown.tsx
@@ -18295,9 +18299,9 @@ function CircleWithText({ text }) {
18295
18299
  /* @__PURE__ */ React181.createElement(Text, { size: "13", color: "accentColor", weight: "bold" }, text)
18296
18300
  );
18297
18301
  }
18298
- function TransferToken({ onNext }) {
18302
+ var TRANSFER_TOKEN_LOG_PREFIX = "transferToken";
18303
+ function TransferToken({ onBack }) {
18299
18304
  const filteredAssets = useEnabledTokenTransferChainTokens();
18300
- const { textCustomizations } = useFunkitConfig();
18301
18305
  const [selectedChainId, setSelectedChainId] = useState47(polygon3.id);
18302
18306
  const selectedChainInfo = chainMetadataById[selectedChainId];
18303
18307
  const [selectedToken, setSelectedToken] = useState47(
@@ -18305,6 +18309,18 @@ function TransferToken({ onNext }) {
18305
18309
  );
18306
18310
  const { depositAddress, minTransferUsd, showOriginalRecipient } = useTokenTransfer(selectedChainId, selectedToken);
18307
18311
  const isLoadingDepositAddress = depositAddress === void 0;
18312
+ const onHelp = useCallback30(() => {
18313
+ logger.log(`${TRANSFER_TOKEN_LOG_PREFIX}_getHelpClicked`, {
18314
+ selectedChainId,
18315
+ selectedToken,
18316
+ depositAddress
18317
+ });
18318
+ window.open(
18319
+ "https://intercom.help/funxyz/en/articles/10003876-direct-deposit-guide-faqs",
18320
+ "_blank",
18321
+ "noopener,noreferrer"
18322
+ );
18323
+ }, [depositAddress, selectedChainId, selectedToken]);
18308
18324
  return /* @__PURE__ */ React181.createElement(Box, { id: "token-transfer-page" }, /* @__PURE__ */ React181.createElement(
18309
18325
  Box,
18310
18326
  {
@@ -18314,16 +18330,6 @@ function TransferToken({ onNext }) {
18314
18330
  justifyContent: "center",
18315
18331
  gap: "14"
18316
18332
  },
18317
- /* @__PURE__ */ React181.createElement(Box, { display: "flex", flexDirection: "column", width: "full" }, /* @__PURE__ */ React181.createElement(
18318
- FunPaymentMethodItem,
18319
- {
18320
- isSource: true,
18321
- keyText: textCustomizations.transferTokens,
18322
- disclaimerText: "No limit",
18323
- keyIcon: /* @__PURE__ */ React181.createElement(LightningBoltIcon, null),
18324
- onClick: () => onNext({ step: "transfer_token" /* TRANSFER_TOKEN */ })
18325
- }
18326
- )),
18327
18333
  /* @__PURE__ */ React181.createElement(Box, { display: "flex", alignItems: "center", justifyContent: "center" }, isLoadingDepositAddress ? /* @__PURE__ */ React181.createElement(
18328
18334
  Box,
18329
18335
  {
@@ -18390,7 +18396,15 @@ function TransferToken({ onNext }) {
18390
18396
  ChainDropdown_default,
18391
18397
  {
18392
18398
  assets: filteredAssets,
18393
- onChainSelected: (chainId) => setSelectedChainId(chainId)
18399
+ onChainSelected: (chainId) => {
18400
+ logger.log(`${TRANSFER_TOKEN_LOG_PREFIX}_changeChain`, {
18401
+ previousChainId: selectedChainId,
18402
+ newChainId: chainId,
18403
+ selectedToken,
18404
+ depositAddress
18405
+ });
18406
+ setSelectedChainId(chainId);
18407
+ }
18394
18408
  }
18395
18409
  )
18396
18410
  ),
@@ -18409,7 +18423,15 @@ function TransferToken({ onNext }) {
18409
18423
  {
18410
18424
  selectedChainId,
18411
18425
  assets: filteredAssets,
18412
- onTokenSelected: (token) => setSelectedToken(token)
18426
+ onTokenSelected: (token) => {
18427
+ logger.log(`${TRANSFER_TOKEN_LOG_PREFIX}_changeToken`, {
18428
+ previousToken: selectedToken,
18429
+ newToken: token,
18430
+ selectedChainId,
18431
+ depositAddress
18432
+ });
18433
+ setSelectedToken(token);
18434
+ }
18413
18435
  }
18414
18436
  )
18415
18437
  ),
@@ -18426,7 +18448,13 @@ function TransferToken({ onNext }) {
18426
18448
  /* @__PURE__ */ React181.createElement(Text, { size: "12", color: "primaryText", weight: "medium" }, minTransferUsd === 0 ? "No minimum" : formatCurrencyAndStringify(minTransferUsd))
18427
18449
  )
18428
18450
  ),
18429
- showOriginalRecipient ? null : /* @__PURE__ */ React181.createElement(Box, { display: "flex", flexDirection: "column", gap: "14" }, /* @__PURE__ */ React181.createElement(Text, { size: "12", color: "secondaryText", weight: "medium" }, "Transfer ", selectedToken, " (", selectedChainInfo.name, ") to the deposit address above. The equivalent USD value (minus fees) will be automatically deposited into your account within ~60 seconds."), /* @__PURE__ */ React181.createElement(
18451
+ showOriginalRecipient ? null : /* @__PURE__ */ React181.createElement(Box, { display: "flex", flexDirection: "column", gap: "14", width: "full" }, /* @__PURE__ */ React181.createElement(Text, { size: "12", color: "secondaryText", weight: "medium" }, "Transfer ", selectedToken, " (", selectedChainInfo.name, ") to the deposit address above. The equivalent USD value (minus fees) will be automatically deposited into your account within ~60 seconds."), /* @__PURE__ */ React181.createElement(
18452
+ FunAlert,
18453
+ {
18454
+ icon: /* @__PURE__ */ React181.createElement(FunInfoIcon, null),
18455
+ description: /* @__PURE__ */ React181.createElement(Box, { display: "flex" }, /* @__PURE__ */ React181.createElement(Text, { size: "10", color: "secondaryText" }, "Experiencing problems?"), /* @__PURE__ */ React181.createElement(FunLinkButton, { text: "Get help.", onClick: onHelp }))
18456
+ }
18457
+ ), /* @__PURE__ */ React181.createElement(
18430
18458
  Text,
18431
18459
  {
18432
18460
  size: "10",
@@ -18515,7 +18543,7 @@ function initialState(checkoutItem) {
18515
18543
  function useCheckoutModalTransition(checkoutItem, onClose) {
18516
18544
  const [modalState, setModalState] = useState48(() => initialState(checkoutItem));
18517
18545
  const { clearCheckoutQuoteMessages } = useCheckoutQuoteNotification();
18518
- const onCloseWrapper = useCallback30(() => {
18546
+ const onCloseWrapper = useCallback31(() => {
18519
18547
  checkoutItem.initSettings.onClose?.();
18520
18548
  logger.log("closingCheckoutModal", {
18521
18549
  checkoutStep: modalState.step,
@@ -18526,7 +18554,7 @@ function useCheckoutModalTransition(checkoutItem, onClose) {
18526
18554
  }, [checkoutItem, modalState.step, onClose]);
18527
18555
  const { animateOut, navigateTo } = useAnimatedNavigation(setModalState);
18528
18556
  const stateHistory = useRef15([]);
18529
- const onNext = useCallback30(
18557
+ const onNext = useCallback31(
18530
18558
  (payload) => {
18531
18559
  clearCheckoutQuoteMessages();
18532
18560
  stateHistory.current.push(modalState);
@@ -18535,7 +18563,7 @@ function useCheckoutModalTransition(checkoutItem, onClose) {
18535
18563
  },
18536
18564
  [modalState, navigateTo, clearCheckoutQuoteMessages]
18537
18565
  );
18538
- const onBack = useCallback30(() => {
18566
+ const onBack = useCallback31(() => {
18539
18567
  clearCheckoutQuoteMessages();
18540
18568
  const prevState = stateHistory.current.pop();
18541
18569
  if (prevState) {
@@ -18624,7 +18652,7 @@ function useTitleConfig(checkoutItem, state) {
18624
18652
  };
18625
18653
  case "transfer_token" /* TRANSFER_TOKEN */:
18626
18654
  return {
18627
- hasBack: false,
18655
+ hasBack: true,
18628
18656
  title: textCustomizations.transferTokens,
18629
18657
  showFullHeight: false
18630
18658
  };
@@ -18636,7 +18664,7 @@ function useTitleConfig(checkoutItem, state) {
18636
18664
  // src/modals/CheckoutModal/useAccountBalancePostCheckout.ts
18637
18665
  import { getPaymasterDataForCheckoutSponsoredTransfer } from "@funkit/api-base";
18638
18666
  import { ERC20_ABI, USDT_ABI } from "@funkit/core";
18639
- import { useCallback as useCallback31 } from "react";
18667
+ import { useCallback as useCallback32 } from "react";
18640
18668
  import { useAccount as useAccount8, useSendTransaction, useWriteContract } from "wagmi";
18641
18669
 
18642
18670
  // src/utils/isMainnetUsdt.ts
@@ -18653,7 +18681,7 @@ function useWeb3AccountBalancePostCheckout(setPostCheckoutStepMessage) {
18653
18681
  const { writeContractAsync } = useWriteContract();
18654
18682
  const { sendTransactionAsync } = useSendTransaction();
18655
18683
  const { cancelCheckout, checkoutItem } = useCheckoutContext();
18656
- const handleWeb3AccountBalancePostCheckout = useCallback31(
18684
+ const handleWeb3AccountBalancePostCheckout = useCallback32(
18657
18685
  async (depositAddress) => {
18658
18686
  if (!checkoutItem?.latestQuote?.baseQuote.estTotalFromAmountBaseUnit) {
18659
18687
  return;
@@ -18748,7 +18776,7 @@ function useWeb3AccountBalancePostCheckout(setPostCheckoutStepMessage) {
18748
18776
  function useWeb2AccountBalancePostCheckout(apiKey) {
18749
18777
  const { checkoutItem } = useCheckoutContext();
18750
18778
  const { generateCheckoutTransferOpItems } = useCheckoutAccountBalanceTransfer();
18751
- const handleWeb2AccountBalancePostCheckout = useCallback31(
18779
+ const handleWeb2AccountBalancePostCheckout = useCallback32(
18752
18780
  async (depositAddress) => {
18753
18781
  const { rFunWallet, rFunWalletAuth, transferOp, envConfig } = await generateCheckoutTransferOpItems(
18754
18782
  depositAddress,
@@ -18796,7 +18824,7 @@ function useAccountBalancePostCheckout(setPostCheckoutStepMessage, apiKey) {
18796
18824
  const { isWeb2Login, isWeb3Login } = useGeneralWallet();
18797
18825
  const handleWeb2AccountBalancePostCheckout = useWeb2AccountBalancePostCheckout(apiKey);
18798
18826
  const handleWeb3AccountBalancePostCheckout = useWeb3AccountBalancePostCheckout(setPostCheckoutStepMessage);
18799
- const handleAccountBalancePostCheckout = useCallback31(
18827
+ const handleAccountBalancePostCheckout = useCallback32(
18800
18828
  async (depositAddress) => {
18801
18829
  if (isWeb2Login) {
18802
18830
  await handleWeb2AccountBalancePostCheckout(depositAddress);
@@ -18900,7 +18928,7 @@ function ConfirmationStep({
18900
18928
  const [postCheckoutError, setPostCheckoutError] = useState49();
18901
18929
  const hasPostCheckoutError = postCheckoutError !== void 0;
18902
18930
  const isContinuing = isConfirming || isPostCheckoutLoading;
18903
- const handleMeshPostCheckout = useCallback32(
18931
+ const handleMeshPostCheckout = useCallback33(
18904
18932
  async (depositAddress) => {
18905
18933
  if (!funkitConfig.apiKey) {
18906
18934
  throw new Error("Invalid funkit apiKey");
@@ -19014,11 +19042,11 @@ function ConfirmationStep({
19014
19042
  setTimeout(() => setPostCheckoutError(void 0), timeMs);
19015
19043
  }
19016
19044
  };
19017
- const restartCountdown = useCallback32(() => {
19045
+ const restartCountdown = useCallback33(() => {
19018
19046
  setCountdownKey((key) => key + 1);
19019
19047
  setIsBeforeRegeneratingQuote(false);
19020
19048
  }, []);
19021
- const refreshQuote = useCallback32(async () => {
19049
+ const refreshQuote = useCallback33(async () => {
19022
19050
  singletonCheckoutAbort.abort("Abort checkout data pre-loading");
19023
19051
  singletonCheckoutAbort.setAbortController(new AbortController());
19024
19052
  try {
@@ -19039,7 +19067,7 @@ function ConfirmationStep({
19039
19067
  restartCountdown,
19040
19068
  setCheckoutQuote
19041
19069
  ]);
19042
- const onClickConfirm = useCallback32(async () => {
19070
+ const onClickConfirm = useCallback33(async () => {
19043
19071
  if (!checkoutItem) {
19044
19072
  return;
19045
19073
  }
@@ -19426,16 +19454,16 @@ function FunCheckoutHistoryModal({
19426
19454
  function useModalStateValue() {
19427
19455
  const [isModalOpen, setModalOpen] = useState51(false);
19428
19456
  return {
19429
- closeModal: useCallback33(() => setModalOpen(false), []),
19457
+ closeModal: useCallback34(() => setModalOpen(false), []),
19430
19458
  isModalOpen,
19431
- openModal: useCallback33(() => setModalOpen(true), [])
19459
+ openModal: useCallback34(() => setModalOpen(true), [])
19432
19460
  };
19433
19461
  }
19434
19462
  function useModalStateValueWithProp() {
19435
19463
  const [isModalOpen, setModalOpen] = useState51(false);
19436
19464
  const [prop, setProp] = useState51(null);
19437
19465
  return {
19438
- closeModal: useCallback33(() => {
19466
+ closeModal: useCallback34(() => {
19439
19467
  setTimeout(() => {
19440
19468
  setProp(null);
19441
19469
  }, DialogAnimationTimeOut);
@@ -19443,7 +19471,7 @@ function useModalStateValueWithProp() {
19443
19471
  }, []),
19444
19472
  isModalOpen,
19445
19473
  prop,
19446
- openModal: useCallback33((prop2) => {
19474
+ openModal: useCallback34((prop2) => {
19447
19475
  if (prop2 != null) setProp(prop2);
19448
19476
  setModalOpen(true);
19449
19477
  }, [])
@@ -19929,7 +19957,7 @@ var FunkitWeb2Provider = ({
19929
19957
  const [isLoggingIn, setIsLoggingIn] = useState52(false);
19930
19958
  const [loginErrorMessage, setLoginErrorMessage] = useState52("");
19931
19959
  const [loggedInUser, setLoggedInUser] = useState52(null);
19932
- const setLoginMethodAndCache = useCallback34(
19960
+ const setLoginMethodAndCache = useCallback35(
19933
19961
  (method) => {
19934
19962
  try {
19935
19963
  setLoginMethod(method);
@@ -19953,7 +19981,7 @@ var FunkitWeb2Provider = ({
19953
19981
  setPrivyIframeUrl(newPrivy.embeddedWallet.getURL());
19954
19982
  setPrivy(newPrivy);
19955
19983
  }, [chains]);
19956
- const handleIframeMessage = useCallback34(
19984
+ const handleIframeMessage = useCallback35(
19957
19985
  (e) => {
19958
19986
  if (e.origin === PRIVY_AUTH_URL && privy) {
19959
19987
  const iframeHandler = privy.embeddedWallet.getMessageHandler();
@@ -19962,7 +19990,7 @@ var FunkitWeb2Provider = ({
19962
19990
  },
19963
19991
  [privy]
19964
19992
  );
19965
- const handleFunkitWeb2Logout = useCallback34(async () => {
19993
+ const handleFunkitWeb2Logout = useCallback35(async () => {
19966
19994
  if (privy) {
19967
19995
  logger.log("handleFunkitWeb2Logout_disconnecting_connectors", {
19968
19996
  numConnectors: connectors.length
@@ -19975,7 +20003,7 @@ var FunkitWeb2Provider = ({
19975
20003
  setLoginMethodAndCache(null);
19976
20004
  }
19977
20005
  }, [connectors, disconnectAsync, privy, setLoginMethodAndCache]);
19978
- const handleFreshPrivyLogin = useCallback34(
20006
+ const handleFreshPrivyLogin = useCallback35(
19979
20007
  async ({
19980
20008
  firstLoginCode,
19981
20009
  secondLoginCode,
@@ -20021,7 +20049,7 @@ var FunkitWeb2Provider = ({
20021
20049
  },
20022
20050
  [handleFunkitWeb2Logout, privy]
20023
20051
  );
20024
- const getPrivyUserEmbeddedWallet = useCallback34(
20052
+ const getPrivyUserEmbeddedWallet = useCallback35(
20025
20053
  async (inputPrivyUser) => {
20026
20054
  try {
20027
20055
  if (!privy || !inputPrivyUser)
@@ -20040,7 +20068,7 @@ var FunkitWeb2Provider = ({
20040
20068
  },
20041
20069
  [privy]
20042
20070
  );
20043
- const getExistingPrivySession = useCallback34(async () => {
20071
+ const getExistingPrivySession = useCallback35(async () => {
20044
20072
  try {
20045
20073
  if (!privy) throw new Error(ERROR_MESSAGES.PRIVY_NOT_INITIALIZED);
20046
20074
  const existingSession = await privy.user.get();
@@ -20049,7 +20077,7 @@ var FunkitWeb2Provider = ({
20049
20077
  return null;
20050
20078
  }
20051
20079
  }, [privy]);
20052
- const handleFunkitWeb2Login = useCallback34(
20080
+ const handleFunkitWeb2Login = useCallback35(
20053
20081
  async ({
20054
20082
  chainId,
20055
20083
  firstLoginCode,
@@ -20122,9 +20150,9 @@ var FunkitWeb2Provider = ({
20122
20150
  wallets
20123
20151
  ]
20124
20152
  );
20125
- const clearLoginError = useCallback34(() => setLoginErrorMessage(""), []);
20153
+ const clearLoginError = useCallback35(() => setLoginErrorMessage(""), []);
20126
20154
  const initChainId = useInitialChainId();
20127
- const handleAutoLoginFlows = useCallback34(async () => {
20155
+ const handleAutoLoginFlows = useCallback35(async () => {
20128
20156
  if (isNotNullish(loginMethod) && isNotNullish(initChainId)) {
20129
20157
  const queryParams = new URLSearchParams(window.location.search);
20130
20158
  const oauthCode = queryParams.get(PRIVY_OAUTH_CODE_URL_PARAM);
@@ -20166,7 +20194,7 @@ var FunkitWeb2Provider = ({
20166
20194
  initChainId
20167
20195
  // Do not include `handleAutoLoginFlows`,
20168
20196
  ]);
20169
- const handleOauthRedirect = useCallback34(
20197
+ const handleOauthRedirect = useCallback35(
20170
20198
  async (authProvider) => {
20171
20199
  if (!privy) throw new Error(ERROR_MESSAGES.PRIVY_NOT_INITIALIZED);
20172
20200
  try {
@@ -20190,7 +20218,7 @@ var FunkitWeb2Provider = ({
20190
20218
  [privy, setLoginMethodAndCache]
20191
20219
  );
20192
20220
  const [isSendingOtpEmail, setIsSendingOtpEmail] = useState52(false);
20193
- const handleSendOtpEmail = useCallback34(
20221
+ const handleSendOtpEmail = useCallback35(
20194
20222
  async (emailAddress) => {
20195
20223
  try {
20196
20224
  if (!privy) throw new Error(ERROR_MESSAGES.PRIVY_NOT_INITIALIZED);
@@ -20217,7 +20245,7 @@ var FunkitWeb2Provider = ({
20217
20245
  [privy, setLoginMethodAndCache]
20218
20246
  );
20219
20247
  const [isGeneratingFcUri, setIsGeneratingFcUri] = useState52(false);
20220
- const handleGenerateFcUri = useCallback34(async () => {
20248
+ const handleGenerateFcUri = useCallback35(async () => {
20221
20249
  try {
20222
20250
  if (!privy) throw new Error(ERROR_MESSAGES.PRIVY_NOT_INITIALIZED);
20223
20251
  setIsGeneratingFcUri(true);
@@ -20242,7 +20270,7 @@ var FunkitWeb2Provider = ({
20242
20270
  setIsGeneratingFcUri(false);
20243
20271
  }
20244
20272
  }, [privy]);
20245
- const getFcConnectionStatus = useCallback34(
20273
+ const getFcConnectionStatus = useCallback35(
20246
20274
  async (channelToken) => {
20247
20275
  try {
20248
20276
  if (!privy) throw new Error(ERROR_MESSAGES.PRIVY_NOT_INITIALIZED);
@@ -20376,7 +20404,7 @@ import React190 from "react";
20376
20404
  import { useAccount as useAccount12, useBalance, useConfig as useConfig6 } from "wagmi";
20377
20405
 
20378
20406
  // src/hooks/useIsMounted.ts
20379
- import { useCallback as useCallback35, useEffect as useEffect38, useState as useState54 } from "react";
20407
+ import { useCallback as useCallback36, useEffect as useEffect38, useState as useState54 } from "react";
20380
20408
  function useIsMounted() {
20381
20409
  const [isMounted, setIsMounted] = useState54(false);
20382
20410
  useEffect38(() => {
@@ -20385,7 +20413,7 @@ function useIsMounted() {
20385
20413
  setIsMounted(false);
20386
20414
  };
20387
20415
  }, []);
20388
- return useCallback35(() => isMounted, [isMounted]);
20416
+ return useCallback36(() => isMounted, [isMounted]);
20389
20417
  }
20390
20418
 
20391
20419
  // src/components/ConnectButton/abbreviateETHBalance.ts
@@ -21253,16 +21281,16 @@ var defaultAppInfo = {
21253
21281
  var AppContext = createContext18(defaultAppInfo);
21254
21282
 
21255
21283
  // src/providers/useFingerprint.ts
21256
- import { useCallback as useCallback36, useEffect as useEffect40 } from "react";
21284
+ import { useCallback as useCallback37, useEffect as useEffect40 } from "react";
21257
21285
  var storageKey5 = "funkit-connect-version";
21258
21286
  function setFunkitConnectVersion({ version }) {
21259
21287
  localStorage.setItem(storageKey5, version);
21260
21288
  }
21261
21289
  function getCurrentSdkVersion() {
21262
- return "__buildVersion";
21290
+ return "3.4.3";
21263
21291
  }
21264
21292
  function useFingerprint() {
21265
- const fingerprint = useCallback36(() => {
21293
+ const fingerprint = useCallback37(() => {
21266
21294
  setFunkitConnectVersion({ version: getCurrentSdkVersion() });
21267
21295
  }, []);
21268
21296
  useEffect40(() => {
@@ -21271,7 +21299,7 @@ function useFingerprint() {
21271
21299
  }
21272
21300
 
21273
21301
  // src/providers/usePreloadImages.ts
21274
- import { useCallback as useCallback37, useEffect as useEffect41 } from "react";
21302
+ import { useCallback as useCallback38, useEffect as useEffect41 } from "react";
21275
21303
 
21276
21304
  // src/components/Icons/Assets.tsx
21277
21305
  import React194 from "react";
@@ -21287,7 +21315,7 @@ var preloadLoginIcon = () => loadImages(src2);
21287
21315
  function usePreloadImages() {
21288
21316
  const funkitConnectChains = useFunkitConnectChains();
21289
21317
  const walletConnectors = useWalletConnectors();
21290
- const preloadImages = useCallback37(() => {
21318
+ const preloadImages = useCallback38(() => {
21291
21319
  loadImages(
21292
21320
  ...walletConnectors.map((wallet) => wallet.iconUrl),
21293
21321
  ...funkitConnectChains.map((chain) => chain.iconUrl).filter(isNotNullish)
@@ -21451,6 +21479,7 @@ export {
21451
21479
  useCheckoutListenerByCheckoutId,
21452
21480
  useCheckoutsListenerByUserId,
21453
21481
  useConnectModal,
21482
+ useConnectionStatus,
21454
21483
  useFunkitAccount,
21455
21484
  useFunkitCheckout,
21456
21485
  useFunkitDisconnect,
@@ -11,7 +11,7 @@ export type LoadingAccountNext = ({
11
11
  usablePaymentMethod: PaymentMethod.BROKERAGE;
12
12
  paymentMethodInfo: PaymentMethodBrokerageInfo;
13
13
  } | {
14
- usablePaymentMethod: PaymentMethod.TOKEN_TRANSFER | null;
14
+ usablePaymentMethod: null;
15
15
  }) & {
16
16
  step: FunCheckoutStep.LOADING_ACCOUNT;
17
17
  };
@@ -13,5 +13,5 @@ export interface TokenTransferSourceChainsAndAssets {
13
13
  }
14
14
  export declare function transferTokenNext(state: TransferTokenState, _: TransferTokenNext): StepTransition[FunCheckoutStep.TRANSFER_TOKEN];
15
15
  type Props = StateTransitionProps<TransferTokenState, TransferTokenNext>;
16
- export declare function TransferToken({ onNext }: Props): React.JSX.Element;
16
+ export declare function TransferToken({ onBack }: Props): React.JSX.Element;
17
17
  export {};