@daimo/pay 1.19.1 → 1.19.2
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/build/package.json.js +2 -2
- package/build/src/components/DaimoPayModal/index.js +17 -3
- package/build/src/components/DaimoPayModal/index.js.map +1 -1
- package/build/src/components/Pages/SelectMethod/index.js +5 -2
- package/build/src/components/Pages/SelectMethod/index.js.map +1 -1
- package/build/src/hooks/useConnectors.js +12 -1
- package/build/src/hooks/useConnectors.js.map +1 -1
- package/build/src/hooks/usePaymentState.js +4 -1
- package/build/src/hooks/usePaymentState.js.map +1 -1
- package/build/src/wallets/useWallets.js +1 -0
- package/build/src/wallets/useWallets.js.map +1 -1
- package/package.json +2 -2
package/build/package.json.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var name = "@daimo/pay";
|
|
2
|
-
var version = "1.19.
|
|
2
|
+
var version = "1.19.2";
|
|
3
3
|
var author = "Daimo";
|
|
4
4
|
var homepage = "https://pay.daimo.com";
|
|
5
5
|
var license = "BSD-2-Clause license";
|
|
@@ -31,7 +31,7 @@ var scripts = {
|
|
|
31
31
|
lint: "eslint 'src/**/*.{js,jsx,ts,tsx}' --max-warnings=0"
|
|
32
32
|
};
|
|
33
33
|
var dependencies = {
|
|
34
|
-
"@daimo/pay-common": "1.19.
|
|
34
|
+
"@daimo/pay-common": "1.19.2",
|
|
35
35
|
"@solana/wallet-adapter-base": "^0.9.23",
|
|
36
36
|
"@solana/wallet-adapter-react": "^0.15.35",
|
|
37
37
|
"@solana/web3.js": "^1.95.4",
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useWallet } from '@solana/wallet-adapter-react';
|
|
3
|
-
import { useEffect } from 'react';
|
|
4
|
-
import { useAccount } from 'wagmi';
|
|
3
|
+
import { useRef, useEffect } from 'react';
|
|
4
|
+
import { useAccount, useConnect } from 'wagmi';
|
|
5
5
|
import { ExternalPaymentOptions, DepositAddressPaymentOptions } from '@daimo/pay-common';
|
|
6
6
|
import { ROUTES } from '../../constants/routes.js';
|
|
7
7
|
import { getAppName } from '../../defaultConfig.js';
|
|
8
8
|
import { useChainIsSupported } from '../../hooks/useChainIsSupported.js';
|
|
9
|
+
import { useConnector } from '../../hooks/useConnectors.js';
|
|
9
10
|
import { useDaimoPay } from '../../hooks/useDaimoPay.js';
|
|
10
11
|
import useIsMobile from '../../hooks/useIsMobile.js';
|
|
11
12
|
import { usePayContext } from '../../hooks/usePayContext.js';
|
|
@@ -81,6 +82,10 @@ const DaimoPayModal = ({
|
|
|
81
82
|
const { connected: isSolanaConnected } = useWallet();
|
|
82
83
|
const chainIsSupported = useChainIsSupported(chain?.id);
|
|
83
84
|
const pendingWallet = useWallet$1(context.pendingConnectorId || "");
|
|
85
|
+
const prioritizedWalletId = paymentState.buttonProps?.prioritizedWalletId;
|
|
86
|
+
const prioritizedConnector = useConnector(prioritizedWalletId ?? "");
|
|
87
|
+
const { connect } = useConnect();
|
|
88
|
+
const hasHandledInitialOpen = useRef(false);
|
|
84
89
|
const closeable = !(context.options?.enforceSupportedChains && isEthConnected && !chainIsSupported);
|
|
85
90
|
const showBackButton = closeable && context.route !== context.uniquePaymentMethodPage && context.route !== ROUTES.SELECT_METHOD && context.route !== ROUTES.CONFIRMATION && context.route !== ROUTES.SELECT_TOKEN && context.route !== ROUTES.ERROR && paymentFsmState !== "error" && paymentFsmState !== "warning";
|
|
86
91
|
const onBack = () => {
|
|
@@ -108,6 +113,7 @@ const DaimoPayModal = ({
|
|
|
108
113
|
} else if (context.route === ROUTES.WAITING_EXTERNAL) {
|
|
109
114
|
setPaymentWaitingMessage(void 0);
|
|
110
115
|
if (isDepositFlow) {
|
|
116
|
+
generatePreviewOrder();
|
|
111
117
|
context.setRoute(ROUTES.SELECT_EXTERNAL_AMOUNT, meta);
|
|
112
118
|
} else {
|
|
113
119
|
setSelectedExternalOption(void 0);
|
|
@@ -266,7 +272,10 @@ const DaimoPayModal = ({
|
|
|
266
272
|
};
|
|
267
273
|
const { isMobile } = useIsMobile();
|
|
268
274
|
useEffect(() => {
|
|
269
|
-
if (!context.open)
|
|
275
|
+
if (!context.open) {
|
|
276
|
+
hasHandledInitialOpen.current = false;
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
270
279
|
if (context.route !== ROUTES.SELECT_METHOD) return;
|
|
271
280
|
const paymentOptions = paymentState.buttonProps?.paymentOptions;
|
|
272
281
|
const hasUniqueOption = paymentOptions && paymentOptions.length === 1;
|
|
@@ -491,6 +500,10 @@ const DaimoPayModal = ({
|
|
|
491
500
|
const solanaOptionsCount = paymentState.solanaPaymentOptions.options?.length ?? 0;
|
|
492
501
|
const isSolanaLoading = paymentState.solanaPaymentOptions.isLoading;
|
|
493
502
|
if ((!hasUniqueOption || isWalletsUniquePaymentOption) && isEthConnected && !isSolanaConnected && (!isMobile || !disableMobileInjector) && !isEvmLoading && evmOptionsCount > 0) {
|
|
503
|
+
if (!hasHandledInitialOpen.current && prioritizedWalletId && prioritizedConnector && connector?.id !== prioritizedWalletId) {
|
|
504
|
+
connect({ connector: prioritizedConnector });
|
|
505
|
+
}
|
|
506
|
+
hasHandledInitialOpen.current = true;
|
|
494
507
|
paymentState.setTokenMode("evm");
|
|
495
508
|
context.setRoute(ROUTES.SELECT_TOKEN, {
|
|
496
509
|
event: "eth_connected_on_open",
|
|
@@ -499,6 +512,7 @@ const DaimoPayModal = ({
|
|
|
499
512
|
address
|
|
500
513
|
});
|
|
501
514
|
} else if ((!hasUniqueOption || isWalletsUniquePaymentOption) && isSolanaConnected && !isEthConnected && !disableMobileInjector && !isSolanaLoading && solanaOptionsCount > 0) {
|
|
515
|
+
hasHandledInitialOpen.current = true;
|
|
502
516
|
paymentState.setTokenMode("solana");
|
|
503
517
|
context.setRoute(ROUTES.SELECT_TOKEN, {
|
|
504
518
|
event: "solana_connected_on_open"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/DaimoPayModal/index.tsx"],"sourcesContent":["import { useWallet } from \"@solana/wallet-adapter-react\";\nimport { useEffect } from \"react\";\nimport { useAccount } from \"wagmi\";\n\nimport {\n DepositAddressPaymentOptions,\n ExternalPaymentOptions,\n} from \"@daimo/pay-common\";\nimport { ROUTES } from \"../../constants/routes\";\nimport { getAppName } from \"../../defaultConfig\";\nimport { useChainIsSupported } from \"../../hooks/useChainIsSupported\";\nimport { useDaimoPay } from \"../../hooks/useDaimoPay\";\nimport useIsMobile from \"../../hooks/useIsMobile\";\nimport { usePayContext } from \"../../hooks/usePayContext\";\nimport { CustomTheme, Languages, Mode, Theme } from \"../../types\";\nimport {\n isExternalWallet,\n useWallet as useWalletById,\n} from \"../../wallets/useWallets\";\nimport { walletConfigs } from \"../../wallets/walletConfigs\";\nimport Modal from \"../Common/Modal\";\nimport { DaimoPayThemeProvider } from \"../DaimoPayThemeProvider/DaimoPayThemeProvider\";\nimport About from \"../Pages/About\";\nimport Confirmation from \"../Pages/Confirmation\";\nimport Connectors from \"../Pages/Connectors\";\nimport ErrorPage from \"../Pages/Error\";\nimport MobileConnectors from \"../Pages/MobileConnectors\";\nimport Onboarding from \"../Pages/Onboarding\";\nimport PayWithToken from \"../Pages/PayWithToken\";\nimport SelectAmount from \"../Pages/SelectAmount\";\nimport SelectDepositAddressAmount from \"../Pages/SelectDepositAddressAmount\";\nimport SelectDepositAddressChain from \"../Pages/SelectDepositAddressChain\";\nimport SelectExchange from \"../Pages/SelectExchange\";\nimport SelectExternalAmount from \"../Pages/SelectExternalAmount\";\nimport SelectMethod from \"../Pages/SelectMethod\";\nimport SelectToken from \"../Pages/SelectToken\";\nimport SelectWalletAmount from \"../Pages/SelectWalletAmount\";\nimport SelectWalletChain from \"../Pages/SelectWalletChain\";\nimport SelectZKP from \"../Pages/SelectZKP\";\nimport ConnectorSolana from \"../Pages/Solana/ConnectorSolana\";\nimport PayWithSolanaToken from \"../Pages/Solana/PayWithSolanaToken\";\nimport SelectSolanaAmount from \"../Pages/Solana/SelectSolanaAmount\";\nimport SwitchNetworks from \"../Pages/SwitchNetworks\";\nimport WaitingDepositAddress, {\n beforeLeave as waitingDepositAddressBeforeLeave,\n} from \"../Pages/WaitingDepositAddress\";\nimport WaitingExternal from \"../Pages/WaitingExternal\";\nimport WaitingWallet from \"../Pages/WaitingWallet\";\nimport ConnectUsing from \"./ConnectUsing\";\n\n/** Helper to check if option string corresponds to a specific wallet */\nfunction isWalletOption(option: string): boolean {\n return Object.keys(walletConfigs).some((id) => {\n walletConfigs[id].name === option;\n });\n}\n\nexport const DaimoPayModal: React.FC<{\n mode: Mode;\n theme: Theme;\n customTheme: CustomTheme;\n lang: Languages;\n disableMobileInjector: boolean;\n}> = ({\n mode,\n theme,\n customTheme,\n lang,\n disableMobileInjector,\n}: {\n mode: Mode;\n theme: Theme;\n customTheme: CustomTheme;\n lang: Languages;\n disableMobileInjector: boolean;\n}) => {\n const context = usePayContext();\n const {\n setMode,\n setTheme,\n setCustomTheme,\n setLang,\n setDisableMobileInjector,\n } = context;\n const paymentState = context.paymentState;\n const {\n generatePreviewOrder,\n isDepositFlow,\n setPaymentWaitingMessage,\n setSelectedExternalOption,\n setSelectedTokenOption,\n setSelectedSolanaTokenOption,\n setSelectedDepositAddressOption,\n setSelectedWallet,\n } = paymentState;\n const daimo = useDaimoPay();\n const { paymentState: paymentFsmState, order } = daimo;\n\n const {\n isConnected: isEthConnected,\n connector,\n chain,\n address,\n } = useAccount();\n const { connected: isSolanaConnected } = useWallet();\n const chainIsSupported = useChainIsSupported(chain?.id);\n const pendingWallet = useWalletById(context.pendingConnectorId || \"\");\n\n // if chain is unsupported we enforce a \"switch chain\" prompt\n // closeable is independent of the warning state; warning is handled separately below\n const closeable = !(\n context.options?.enforceSupportedChains &&\n isEthConnected &&\n !chainIsSupported\n );\n\n const showBackButton =\n closeable &&\n context.route !== context.uniquePaymentMethodPage &&\n context.route !== ROUTES.SELECT_METHOD &&\n context.route !== ROUTES.CONFIRMATION &&\n context.route !== ROUTES.SELECT_TOKEN &&\n context.route !== ROUTES.ERROR &&\n paymentFsmState !== \"error\" &&\n paymentFsmState !== \"warning\";\n\n const onBack = () => {\n const meta = { event: \"click-back\" };\n if (context.route === ROUTES.CONNECTORS) {\n context.setRoute(context.uniquePaymentMethodPage, meta);\n } else if (context.route === ROUTES.SELECT_AMOUNT) {\n setSelectedTokenOption(undefined);\n context.setRoute(ROUTES.SELECT_TOKEN, meta);\n } else if (context.route === ROUTES.SELECT_EXTERNAL_AMOUNT) {\n setSelectedExternalOption(undefined);\n context.setRoute(context.uniquePaymentMethodPage, meta);\n } else if (context.route === ROUTES.SELECT_DEPOSIT_ADDRESS_AMOUNT) {\n // If Tron is a top-level option and we're on Tron, go back to SELECT_METHOD\n const isTronTopLevel = paymentState.topOptionsOrder.includes(\"Tron\");\n const isTronSelected =\n paymentState.selectedDepositAddressOption?.id ===\n DepositAddressPaymentOptions.TRON_USDT;\n if (isDepositFlow) {\n generatePreviewOrder();\n }\n setSelectedDepositAddressOption(undefined);\n if (isTronTopLevel && isTronSelected) {\n context.setRoute(ROUTES.SELECT_METHOD, meta);\n } else {\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, meta);\n }\n } else if (context.route === ROUTES.WAITING_EXTERNAL) {\n setPaymentWaitingMessage(undefined);\n if (isDepositFlow) {\n context.setRoute(ROUTES.SELECT_EXTERNAL_AMOUNT, meta);\n } else {\n setSelectedExternalOption(undefined);\n context.setRoute(context.uniquePaymentMethodPage, meta);\n }\n } else if (context.route === ROUTES.PAY_WITH_TOKEN) {\n if (isDepositFlow) {\n generatePreviewOrder();\n context.setRoute(ROUTES.SELECT_AMOUNT, meta);\n } else {\n setSelectedTokenOption(undefined);\n context.setRoute(ROUTES.SELECT_TOKEN, meta);\n }\n } else if (context.route === ROUTES.MOBILECONNECTORS) {\n context.setRoute(ROUTES.CONNECTORS, meta);\n } else if (context.route === ROUTES.ONBOARDING) {\n context.setRoute(ROUTES.CONNECTORS, meta);\n } else if (context.route === ROUTES.WAITING_DEPOSIT_ADDRESS) {\n // If Tron is a top-level option and we're on Tron, go back to SELECT_METHOD\n const isTronTopLevel = paymentState.topOptionsOrder.includes(\"Tron\");\n const isTronSelected =\n paymentState.selectedDepositAddressOption?.id ===\n DepositAddressPaymentOptions.TRON_USDT;\n if (isDepositFlow) {\n generatePreviewOrder();\n if (paymentState.selectedDepositAddressOption === undefined) {\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, meta);\n } else {\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_AMOUNT, meta);\n }\n } else {\n setSelectedDepositAddressOption(undefined);\n if (isTronTopLevel && isTronSelected) {\n context.setRoute(ROUTES.SELECT_METHOD, meta);\n } else {\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, meta);\n }\n }\n } else if (context.route === ROUTES.WAITING_WALLET) {\n if (isDepositFlow) {\n generatePreviewOrder();\n context.setRoute(ROUTES.SELECT_WALLET_AMOUNT, meta);\n } else {\n setSelectedWallet(undefined);\n context.setRoute(ROUTES.CONNECTORS, meta);\n }\n } else if (context.route === ROUTES.SOLANA_SELECT_AMOUNT) {\n setSelectedSolanaTokenOption(undefined);\n context.setRoute(ROUTES.SELECT_TOKEN, meta);\n } else if (context.route === ROUTES.SOLANA_PAY_WITH_TOKEN) {\n if (isDepositFlow) {\n generatePreviewOrder();\n context.setRoute(ROUTES.SOLANA_SELECT_AMOUNT, meta);\n } else {\n setSelectedSolanaTokenOption(undefined);\n context.setRoute(ROUTES.SELECT_TOKEN, meta);\n }\n } else if (context.route === ROUTES.CONNECT) {\n // For external wallets (World, MiniPay) in deposit mode, go back to amount selection\n if (isDepositFlow && isExternalWallet(pendingWallet)) {\n generatePreviewOrder();\n context.setRoute(ROUTES.SELECT_WALLET_AMOUNT, meta);\n } else {\n context.setRoute(context.uniquePaymentMethodPage, meta);\n }\n } else {\n context.setRoute(context.uniquePaymentMethodPage, meta);\n }\n };\n\n const pages: Record<ROUTES, React.ReactNode> = {\n [ROUTES.SELECT_METHOD]: <SelectMethod />,\n [ROUTES.SELECT_TOKEN]: <SelectToken />,\n [ROUTES.SELECT_AMOUNT]: <SelectAmount />,\n [ROUTES.SELECT_EXTERNAL_AMOUNT]: <SelectExternalAmount />,\n [ROUTES.SELECT_EXCHANGE]: <SelectExchange />,\n [ROUTES.SELECT_DEPOSIT_ADDRESS_AMOUNT]: <SelectDepositAddressAmount />,\n [ROUTES.SELECT_WALLET_AMOUNT]: <SelectWalletAmount />,\n [ROUTES.SELECT_WALLET_CHAIN]: <SelectWalletChain />,\n [ROUTES.WAITING_EXTERNAL]: <WaitingExternal />,\n [ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN]: <SelectDepositAddressChain />,\n [ROUTES.WAITING_DEPOSIT_ADDRESS]: <WaitingDepositAddress />,\n [ROUTES.SELECT_ZKP2P]: <SelectZKP />,\n [ROUTES.WAITING_WALLET]: <WaitingWallet />,\n [ROUTES.CONFIRMATION]: <Confirmation />,\n [ROUTES.ERROR]: <ErrorPage />,\n [ROUTES.PAY_WITH_TOKEN]: <PayWithToken />,\n [ROUTES.SOLANA_CONNECTOR]: <ConnectorSolana />,\n [ROUTES.SOLANA_SELECT_AMOUNT]: <SelectSolanaAmount />,\n [ROUTES.SOLANA_PAY_WITH_TOKEN]: <PayWithSolanaToken />,\n // Unused routes. Kept to minimize connectkit merge conflicts.\n [ROUTES.ONBOARDING]: <Onboarding />,\n [ROUTES.ABOUT]: <About />,\n [ROUTES.CONNECTORS]: <Connectors />,\n [ROUTES.MOBILECONNECTORS]: <MobileConnectors />,\n [ROUTES.CONNECT]: <ConnectUsing />,\n [ROUTES.SWITCHNETWORKS]: <SwitchNetworks />,\n };\n\n // Registry of page-level leave guards (hooks that run before navigation)\n // For WAITING_DEPOSIT_ADDRESS, we need to pass trpc and orderId\n const leaveGuards: Partial<Record<ROUTES, () => Promise<boolean> | boolean>> =\n {\n [ROUTES.WAITING_DEPOSIT_ADDRESS]: () =>\n waitingDepositAddressBeforeLeave(context.trpc, order?.id?.toString()),\n };\n\n // Helper to wrap navigation actions with leave guard check\n const guardedAction = async (action: () => void) => {\n const guard = leaveGuards[context.route];\n\n // If no guard exists for current page, proceed with action\n if (!guard) {\n action();\n return;\n }\n\n // Otherwise, call the guard and check if navigation is allowed\n let canProceed = false;\n try {\n canProceed = await guard();\n } catch (error) {\n console.error(\"error in leave guard:\", error);\n return;\n }\n\n if (!canProceed) return;\n\n try {\n action();\n } catch (error) {\n console.error(\"error performing guarded action:\", error);\n return;\n }\n\n // dismiss warning after navigation to avoid intermediate flash\n if (paymentFsmState === \"warning\") {\n try {\n daimo.dismissWarning();\n } catch (error) {\n console.error(\"error dismissing warning:\", error);\n }\n }\n };\n\n function hide() {\n if (isDepositFlow) {\n generatePreviewOrder();\n }\n context.setOpen(false, { event: \"click-close\" });\n }\n\n const goToManualAddressScreen = (eventSuffix: string) => {\n if (paymentState.isDepositFlow) {\n context.setUniquePaymentMethodPage(ROUTES.SELECT_DEPOSIT_ADDRESS_AMOUNT);\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_AMOUNT, {\n event: `unique_payment_option_deposit_${eventSuffix}`,\n });\n } else {\n context.setUniquePaymentMethodPage(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN);\n context.setRoute(ROUTES.WAITING_DEPOSIT_ADDRESS, {\n event: `unique_payment_option_${eventSuffix}`,\n });\n }\n };\n\n const goToExternalScreen = (eventSuffix: string) => {\n if (paymentState.isDepositFlow) {\n context.setUniquePaymentMethodPage(ROUTES.SELECT_EXTERNAL_AMOUNT);\n context.setRoute(ROUTES.SELECT_EXTERNAL_AMOUNT, {\n event: `unique_payment_option_${eventSuffix}_deposit`,\n });\n } else {\n context.setUniquePaymentMethodPage(ROUTES.WAITING_EXTERNAL);\n context.setRoute(ROUTES.WAITING_EXTERNAL, {\n event: `unique_payment_option_${eventSuffix}`,\n });\n }\n };\n\n const { isMobile } = useIsMobile();\n\n // Override the first screen upon opening the modal.\n // 1. If paymentOptions has exactly one option, navigate to that screen directly\n // 2. If the user has a wallet already connected upon opening the modal, go\n // straight to the select token screen\n // 3. If the user has no wallet connected upon opening the modal, go to the\n // select method screen\n useEffect(() => {\n if (!context.open) return;\n if (context.route !== ROUTES.SELECT_METHOD) return;\n\n const paymentOptions = paymentState.buttonProps?.paymentOptions;\n const hasUniqueOption = paymentOptions && paymentOptions.length === 1;\n\n if (hasUniqueOption) {\n const option = paymentOptions[0];\n // Handle nested array (wallet list)\n if (Array.isArray(option)) {\n context.setUniquePaymentMethodPage(ROUTES.CONNECTORS);\n context.setRoute(ROUTES.CONNECTORS, {\n event: \"unique_payment_option_wallets\",\n });\n return;\n }\n // Handle single string option\n switch (option) {\n case \"Tron\":\n // Find the Tron option from available deposit address options\n const tronOption = paymentState.depositAddressOptions.options?.find(\n (option) => option.id === DepositAddressPaymentOptions.TRON_USDT,\n );\n if (tronOption) {\n setSelectedDepositAddressOption(tronOption);\n goToManualAddressScreen(\"tron\");\n } else if (!paymentState.depositAddressOptions.loading) {\n // Data loaded but option not found, fallback to chain selection\n context.setUniquePaymentMethodPage(\n ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN,\n );\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, {\n event: \"unique_payment_option_tron_fallback\",\n });\n }\n // If still loading, do nothing and wait for next render\n break;\n case \"AllExchanges\":\n // Open exchanges list directly\n context.setUniquePaymentMethodPage(ROUTES.SELECT_EXCHANGE);\n context.setRoute(ROUTES.SELECT_EXCHANGE, {\n event: \"unique_payment_option_all_exchanges\",\n });\n break;\n case \"AllAddresses\":\n context.setUniquePaymentMethodPage(\n ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN,\n );\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, {\n event: \"unique_payment_option_manual_address\",\n });\n break;\n case \"Base\":\n // Find the Base option from available deposit address options\n const baseOption = paymentState.depositAddressOptions.options?.find(\n (option) => option.id === DepositAddressPaymentOptions.BASE,\n );\n if (baseOption) {\n setSelectedDepositAddressOption(baseOption);\n goToManualAddressScreen(\"base\");\n } else if (!paymentState.depositAddressOptions.loading) {\n context.setUniquePaymentMethodPage(\n ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN,\n );\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, {\n event: \"unique_payment_option_base_fallback\",\n });\n }\n break;\n case \"Arbitrum\":\n // Find the Arbitrum option from available deposit address options\n const arbitrumOption =\n paymentState.depositAddressOptions.options?.find(\n (option) => option.id === DepositAddressPaymentOptions.ARBITRUM,\n );\n if (arbitrumOption) {\n setSelectedDepositAddressOption(arbitrumOption);\n goToManualAddressScreen(\"arbitrum\");\n } else if (!paymentState.depositAddressOptions.loading) {\n context.setUniquePaymentMethodPage(\n ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN,\n );\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, {\n event: \"unique_payment_option_arbitrum_fallback\",\n });\n }\n break;\n case \"Optimism\":\n // Find the Optimism option from available deposit address options\n const optimismOption =\n paymentState.depositAddressOptions.options?.find(\n (option) => option.id === DepositAddressPaymentOptions.OP_MAINNET,\n );\n if (optimismOption) {\n setSelectedDepositAddressOption(optimismOption);\n goToManualAddressScreen(\"optimism\");\n } else if (!paymentState.depositAddressOptions.loading) {\n context.setUniquePaymentMethodPage(\n ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN,\n );\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, {\n event: \"unique_payment_option_optimism_fallback\",\n });\n }\n break;\n case \"Polygon\":\n // Find the Polygon option from available deposit address options\n const polygonOption =\n paymentState.depositAddressOptions.options?.find(\n (option) => option.id === DepositAddressPaymentOptions.POLYGON,\n );\n if (polygonOption) {\n setSelectedDepositAddressOption(polygonOption);\n goToManualAddressScreen(\"polygon\");\n } else if (!paymentState.depositAddressOptions.loading) {\n context.setUniquePaymentMethodPage(\n ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN,\n );\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, {\n event: \"unique_payment_option_polygon_fallback\",\n });\n }\n break;\n case \"Ethereum\":\n // Find the Ethereum option from available deposit address options\n const ethereumOption =\n paymentState.depositAddressOptions.options?.find(\n (option) => option.id === DepositAddressPaymentOptions.ETH_L1,\n );\n if (ethereumOption) {\n setSelectedDepositAddressOption(ethereumOption);\n goToManualAddressScreen(\"ethereum\");\n } else if (!paymentState.depositAddressOptions.loading) {\n context.setUniquePaymentMethodPage(\n ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN,\n );\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, {\n event: \"unique_payment_option_ethereum_fallback\",\n });\n }\n break;\n case \"Binance\":\n // Find the Binance option from available exchange options\n const exchangeOptions =\n paymentState.externalPaymentOptions.options.get(\"exchange\");\n const binanceOption = exchangeOptions?.find(\n (option) => option.id === ExternalPaymentOptions.Binance,\n );\n if (binanceOption) {\n setSelectedExternalOption(binanceOption);\n goToExternalScreen(\"binance\");\n } else if (!paymentState.externalPaymentOptions.loading) {\n context.setUniquePaymentMethodPage(ROUTES.SELECT_EXCHANGE);\n context.setRoute(ROUTES.SELECT_EXCHANGE, {\n event: \"unique_payment_option_binance_fallback\",\n });\n }\n break;\n case \"Coinbase\":\n // Find the Coinbase option from available exchange options\n const coinbaseExchangeOptions =\n paymentState.externalPaymentOptions.options.get(\"exchange\");\n const coinbaseOption = coinbaseExchangeOptions?.find(\n (option) => option.id === ExternalPaymentOptions.Coinbase,\n );\n if (coinbaseOption) {\n setSelectedExternalOption(coinbaseOption);\n goToExternalScreen(\"coinbase\");\n } else if (!paymentState.externalPaymentOptions.loading) {\n context.setUniquePaymentMethodPage(ROUTES.SELECT_EXCHANGE);\n context.setRoute(ROUTES.SELECT_EXCHANGE, {\n event: \"unique_payment_option_coinbase_fallback\",\n });\n }\n break;\n case \"Lemon\":\n // Find the Lemon option from available external options\n const lemonExternalOptions =\n paymentState.externalPaymentOptions.options.get(\"external\");\n const lemonOption = lemonExternalOptions?.find(\n (option) => option.id === ExternalPaymentOptions.Lemon,\n );\n if (lemonOption) {\n setSelectedExternalOption(lemonOption);\n goToExternalScreen(\"lemon\");\n } else if (!paymentState.externalPaymentOptions.loading) {\n // Lemon not found - may not be available in this environment/region\n console.warn(\n \"[DaimoPayModal] Lemon not found in external payment options\",\n );\n context.setUniquePaymentMethodPage(ROUTES.SELECT_METHOD);\n context.setRoute(ROUTES.SELECT_METHOD, {\n event: \"unique_payment_option_lemon_not_found\",\n });\n }\n // If still loading, wait for next render\n break;\n case \"AllWallets\":\n context.setUniquePaymentMethodPage(ROUTES.CONNECTORS);\n context.setRoute(ROUTES.CONNECTORS, {\n event: \"unique_payment_option_wallets\",\n });\n break;\n default:\n // Single wallet options like MiniPay, World, etc\n const singleOption = option;\n if (isWalletOption(singleOption)) {\n const walletId = Object.keys(walletConfigs).find((id) => {\n const wallet = walletConfigs[id];\n const optionLower = singleOption.toLowerCase();\n return (\n wallet.name?.toLowerCase() === optionLower ||\n wallet.shortName?.toLowerCase() === optionLower ||\n wallet.name?.toLowerCase().includes(optionLower) ||\n id.toLowerCase() === optionLower ||\n id.toLowerCase().includes(optionLower)\n );\n });\n if (walletId) {\n const wallet = walletConfigs[walletId];\n paymentState.setSelectedWallet(wallet);\n\n if (paymentState.isDepositFlow) {\n // For deposit mode, route to amount selection first\n context.setUniquePaymentMethodPage(ROUTES.SELECT_WALLET_AMOUNT);\n context.setRoute(ROUTES.SELECT_WALLET_AMOUNT, {\n event: \"single_option_wallet_deposit\",\n wallet: singleOption,\n });\n } else if (!isMobile && wallet.getDaimoPayDeeplink) {\n // On desktop, show QR code for wallet\n context.setPendingConnectorId(walletId);\n context.setUniquePaymentMethodPage(ROUTES.CONNECT);\n context.setRoute(ROUTES.CONNECT, {\n event: \"single_option_wallet_qr\",\n wallet: singleOption,\n });\n } else if (isMobile && wallet.getDaimoPayDeeplink) {\n // On mobile with deeplink, open wallet directly (no internal routing)\n paymentState.openInWalletBrowser(wallet);\n } else {\n // No deeplink - go to connectors to let user connect\n context.setRoute(ROUTES.CONNECTORS, {\n event: \"single_option_wallet\",\n wallet: singleOption,\n });\n }\n } else {\n context.setUniquePaymentMethodPage(ROUTES.SELECT_METHOD);\n }\n } else {\n context.setUniquePaymentMethodPage(ROUTES.SELECT_METHOD);\n }\n break;\n }\n }\n\n const isWalletsUniquePaymentOption =\n hasUniqueOption &&\n (Array.isArray(paymentOptions[0]) || paymentOptions[0] === \"AllWallets\");\n\n // Skip to token selection if exactly one wallet is connected. If both\n // wallets are connected, stay on the SELECT_METHOD screen to allow the\n // user to select which wallet to use\n // If mobile injector is disabled, don't show the connected wallets.\n // If there's a unique payment option, and the unique payment option is not\n // \"AllWallets\" or a wallet list, don't auto-connect the user's wallet.\n const evmOptionsCount =\n paymentState.walletPaymentOptions.options?.length ?? 0;\n const isEvmLoading = paymentState.walletPaymentOptions.isLoading;\n const solanaOptionsCount =\n paymentState.solanaPaymentOptions.options?.length ?? 0;\n const isSolanaLoading = paymentState.solanaPaymentOptions.isLoading;\n if (\n (!hasUniqueOption || isWalletsUniquePaymentOption) &&\n isEthConnected &&\n !isSolanaConnected &&\n (!isMobile || !disableMobileInjector) &&\n !isEvmLoading &&\n evmOptionsCount > 0\n ) {\n paymentState.setTokenMode(\"evm\");\n context.setRoute(ROUTES.SELECT_TOKEN, {\n event: \"eth_connected_on_open\",\n walletId: connector?.id,\n chainId: chain?.id,\n address,\n });\n } else if (\n (!hasUniqueOption || isWalletsUniquePaymentOption) &&\n isSolanaConnected &&\n !isEthConnected &&\n !disableMobileInjector &&\n !isSolanaLoading &&\n solanaOptionsCount > 0\n ) {\n paymentState.setTokenMode(\"solana\");\n context.setRoute(ROUTES.SELECT_TOKEN, {\n event: \"solana_connected_on_open\",\n });\n }\n // Don't include context.route in the dependency array otherwise the user\n // can't go back from the select token screen to the select method screen\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n context.open,\n paymentState.walletPaymentOptions.options,\n paymentState.walletPaymentOptions.isLoading,\n paymentState.solanaPaymentOptions.options,\n paymentState.solanaPaymentOptions.isLoading,\n paymentState.externalPaymentOptions.options,\n paymentState.externalPaymentOptions.loading,\n paymentState.depositAddressOptions.options,\n paymentState.depositAddressOptions.loading,\n address,\n chain?.id,\n connector?.id,\n context.uniquePaymentMethodPage,\n ]);\n\n // If we're on the connect page and the user successfully connects their\n // wallet, go to the select token page\n useEffect(() => {\n if (\n context.route === ROUTES.CONNECT ||\n context.route === ROUTES.CONNECTORS ||\n context.route === ROUTES.MOBILECONNECTORS\n ) {\n if (isEthConnected) {\n paymentState.setTokenMode(\"evm\");\n context.setRoute(ROUTES.SELECT_TOKEN, {\n event: \"connected\",\n walletId: connector?.id,\n chainId: chain?.id,\n address,\n });\n }\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isEthConnected, context.route, connector?.id, chain?.id, address]);\n\n useEffect(() => setMode(mode), [mode, setMode]);\n useEffect(() => setTheme(theme), [theme, setTheme]);\n useEffect(() => setCustomTheme(customTheme), [customTheme, setCustomTheme]);\n useEffect(() => setLang(lang), [lang, setLang]);\n useEffect(\n () => setDisableMobileInjector(disableMobileInjector),\n [disableMobileInjector, setDisableMobileInjector],\n );\n\n useEffect(() => {\n const appName = getAppName();\n if (!appName || !context.open) return;\n\n const title = document.createElement(\"meta\");\n title.setAttribute(\"property\", \"og:title\");\n title.setAttribute(\"content\", appName);\n document.head.prepend(title);\n\n return () => {\n try {\n document.head.removeChild(title);\n } catch {}\n };\n }, [context.open]);\n\n return (\n <DaimoPayThemeProvider theme={theme} customTheme={customTheme} mode={mode}>\n <Modal\n open={context.open}\n pages={pages}\n pageId={context.route}\n onClose={\n closeable && paymentFsmState !== \"warning\"\n ? () => guardedAction(hide)\n : undefined\n }\n onInfo={undefined}\n onBack={showBackButton ? () => guardedAction(onBack) : undefined}\n />\n </DaimoPayThemeProvider>\n );\n};\n"],"names":["useWalletById","ConnectorSolana","Onboarding","Connectors","waitingDepositAddressBeforeLeave","option"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/DaimoPayModal/index.tsx"],"sourcesContent":["import { useWallet } from \"@solana/wallet-adapter-react\";\nimport { useEffect, useRef } from \"react\";\nimport { useAccount, useConnect } from \"wagmi\";\n\nimport {\n DepositAddressPaymentOptions,\n ExternalPaymentOptions,\n} from \"@daimo/pay-common\";\nimport { ROUTES } from \"../../constants/routes\";\nimport { getAppName } from \"../../defaultConfig\";\nimport { useChainIsSupported } from \"../../hooks/useChainIsSupported\";\nimport { useConnector } from \"../../hooks/useConnectors\";\nimport { useDaimoPay } from \"../../hooks/useDaimoPay\";\nimport useIsMobile from \"../../hooks/useIsMobile\";\nimport { usePayContext } from \"../../hooks/usePayContext\";\nimport { CustomTheme, Languages, Mode, Theme } from \"../../types\";\nimport {\n isExternalWallet,\n useWallet as useWalletById,\n} from \"../../wallets/useWallets\";\nimport { walletConfigs } from \"../../wallets/walletConfigs\";\nimport Modal from \"../Common/Modal\";\nimport { DaimoPayThemeProvider } from \"../DaimoPayThemeProvider/DaimoPayThemeProvider\";\nimport About from \"../Pages/About\";\nimport Confirmation from \"../Pages/Confirmation\";\nimport Connectors from \"../Pages/Connectors\";\nimport ErrorPage from \"../Pages/Error\";\nimport MobileConnectors from \"../Pages/MobileConnectors\";\nimport Onboarding from \"../Pages/Onboarding\";\nimport PayWithToken from \"../Pages/PayWithToken\";\nimport SelectAmount from \"../Pages/SelectAmount\";\nimport SelectDepositAddressAmount from \"../Pages/SelectDepositAddressAmount\";\nimport SelectDepositAddressChain from \"../Pages/SelectDepositAddressChain\";\nimport SelectExchange from \"../Pages/SelectExchange\";\nimport SelectExternalAmount from \"../Pages/SelectExternalAmount\";\nimport SelectMethod from \"../Pages/SelectMethod\";\nimport SelectToken from \"../Pages/SelectToken\";\nimport SelectWalletAmount from \"../Pages/SelectWalletAmount\";\nimport SelectWalletChain from \"../Pages/SelectWalletChain\";\nimport SelectZKP from \"../Pages/SelectZKP\";\nimport ConnectorSolana from \"../Pages/Solana/ConnectorSolana\";\nimport PayWithSolanaToken from \"../Pages/Solana/PayWithSolanaToken\";\nimport SelectSolanaAmount from \"../Pages/Solana/SelectSolanaAmount\";\nimport SwitchNetworks from \"../Pages/SwitchNetworks\";\nimport WaitingDepositAddress, {\n beforeLeave as waitingDepositAddressBeforeLeave,\n} from \"../Pages/WaitingDepositAddress\";\nimport WaitingExternal from \"../Pages/WaitingExternal\";\nimport WaitingWallet from \"../Pages/WaitingWallet\";\nimport ConnectUsing from \"./ConnectUsing\";\n\n/** Helper to check if option string corresponds to a specific wallet */\nfunction isWalletOption(option: string): boolean {\n return Object.keys(walletConfigs).some((id) => {\n walletConfigs[id].name === option;\n });\n}\n\nexport const DaimoPayModal: React.FC<{\n mode: Mode;\n theme: Theme;\n customTheme: CustomTheme;\n lang: Languages;\n disableMobileInjector: boolean;\n}> = ({\n mode,\n theme,\n customTheme,\n lang,\n disableMobileInjector,\n}: {\n mode: Mode;\n theme: Theme;\n customTheme: CustomTheme;\n lang: Languages;\n disableMobileInjector: boolean;\n}) => {\n const context = usePayContext();\n const {\n setMode,\n setTheme,\n setCustomTheme,\n setLang,\n setDisableMobileInjector,\n } = context;\n const paymentState = context.paymentState;\n const {\n generatePreviewOrder,\n isDepositFlow,\n setPaymentWaitingMessage,\n setSelectedExternalOption,\n setSelectedTokenOption,\n setSelectedSolanaTokenOption,\n setSelectedDepositAddressOption,\n setSelectedWallet,\n } = paymentState;\n const daimo = useDaimoPay();\n const { paymentState: paymentFsmState, order } = daimo;\n\n const {\n isConnected: isEthConnected,\n connector,\n chain,\n address,\n } = useAccount();\n const { connected: isSolanaConnected } = useWallet();\n const chainIsSupported = useChainIsSupported(chain?.id);\n const pendingWallet = useWalletById(context.pendingConnectorId || \"\");\n\n // Get prioritized wallet connector if specified\n const prioritizedWalletId = paymentState.buttonProps?.prioritizedWalletId;\n const prioritizedConnector = useConnector(prioritizedWalletId ?? \"\");\n const { connect } = useConnect();\n\n // Track if we've already handled the initial modal open routing\n // This prevents auto-connecting to prioritized wallet after user navigates away\n const hasHandledInitialOpen = useRef(false);\n\n // if chain is unsupported we enforce a \"switch chain\" prompt\n // closeable is independent of the warning state; warning is handled separately below\n const closeable = !(\n context.options?.enforceSupportedChains &&\n isEthConnected &&\n !chainIsSupported\n );\n\n const showBackButton =\n closeable &&\n context.route !== context.uniquePaymentMethodPage &&\n context.route !== ROUTES.SELECT_METHOD &&\n context.route !== ROUTES.CONFIRMATION &&\n context.route !== ROUTES.SELECT_TOKEN &&\n context.route !== ROUTES.ERROR &&\n paymentFsmState !== \"error\" &&\n paymentFsmState !== \"warning\";\n\n const onBack = () => {\n const meta = { event: \"click-back\" };\n if (context.route === ROUTES.CONNECTORS) {\n context.setRoute(context.uniquePaymentMethodPage, meta);\n } else if (context.route === ROUTES.SELECT_AMOUNT) {\n setSelectedTokenOption(undefined);\n context.setRoute(ROUTES.SELECT_TOKEN, meta);\n } else if (context.route === ROUTES.SELECT_EXTERNAL_AMOUNT) {\n setSelectedExternalOption(undefined);\n context.setRoute(context.uniquePaymentMethodPage, meta);\n } else if (context.route === ROUTES.SELECT_DEPOSIT_ADDRESS_AMOUNT) {\n // If Tron is a top-level option and we're on Tron, go back to SELECT_METHOD\n const isTronTopLevel = paymentState.topOptionsOrder.includes(\"Tron\");\n const isTronSelected =\n paymentState.selectedDepositAddressOption?.id ===\n DepositAddressPaymentOptions.TRON_USDT;\n if (isDepositFlow) {\n generatePreviewOrder();\n }\n setSelectedDepositAddressOption(undefined);\n if (isTronTopLevel && isTronSelected) {\n context.setRoute(ROUTES.SELECT_METHOD, meta);\n } else {\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, meta);\n }\n } else if (context.route === ROUTES.WAITING_EXTERNAL) {\n setPaymentWaitingMessage(undefined);\n if (isDepositFlow) {\n generatePreviewOrder();\n context.setRoute(ROUTES.SELECT_EXTERNAL_AMOUNT, meta);\n } else {\n setSelectedExternalOption(undefined);\n context.setRoute(context.uniquePaymentMethodPage, meta);\n }\n } else if (context.route === ROUTES.PAY_WITH_TOKEN) {\n if (isDepositFlow) {\n generatePreviewOrder();\n context.setRoute(ROUTES.SELECT_AMOUNT, meta);\n } else {\n setSelectedTokenOption(undefined);\n context.setRoute(ROUTES.SELECT_TOKEN, meta);\n }\n } else if (context.route === ROUTES.MOBILECONNECTORS) {\n context.setRoute(ROUTES.CONNECTORS, meta);\n } else if (context.route === ROUTES.ONBOARDING) {\n context.setRoute(ROUTES.CONNECTORS, meta);\n } else if (context.route === ROUTES.WAITING_DEPOSIT_ADDRESS) {\n // If Tron is a top-level option and we're on Tron, go back to SELECT_METHOD\n const isTronTopLevel = paymentState.topOptionsOrder.includes(\"Tron\");\n const isTronSelected =\n paymentState.selectedDepositAddressOption?.id ===\n DepositAddressPaymentOptions.TRON_USDT;\n if (isDepositFlow) {\n generatePreviewOrder();\n if (paymentState.selectedDepositAddressOption === undefined) {\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, meta);\n } else {\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_AMOUNT, meta);\n }\n } else {\n setSelectedDepositAddressOption(undefined);\n if (isTronTopLevel && isTronSelected) {\n context.setRoute(ROUTES.SELECT_METHOD, meta);\n } else {\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, meta);\n }\n }\n } else if (context.route === ROUTES.WAITING_WALLET) {\n if (isDepositFlow) {\n generatePreviewOrder();\n context.setRoute(ROUTES.SELECT_WALLET_AMOUNT, meta);\n } else {\n setSelectedWallet(undefined);\n context.setRoute(ROUTES.CONNECTORS, meta);\n }\n } else if (context.route === ROUTES.SOLANA_SELECT_AMOUNT) {\n setSelectedSolanaTokenOption(undefined);\n context.setRoute(ROUTES.SELECT_TOKEN, meta);\n } else if (context.route === ROUTES.SOLANA_PAY_WITH_TOKEN) {\n if (isDepositFlow) {\n generatePreviewOrder();\n context.setRoute(ROUTES.SOLANA_SELECT_AMOUNT, meta);\n } else {\n setSelectedSolanaTokenOption(undefined);\n context.setRoute(ROUTES.SELECT_TOKEN, meta);\n }\n } else if (context.route === ROUTES.CONNECT) {\n // For external wallets (World, MiniPay) in deposit mode, go back to amount selection\n if (isDepositFlow && isExternalWallet(pendingWallet)) {\n generatePreviewOrder();\n context.setRoute(ROUTES.SELECT_WALLET_AMOUNT, meta);\n } else {\n context.setRoute(context.uniquePaymentMethodPage, meta);\n }\n } else {\n context.setRoute(context.uniquePaymentMethodPage, meta);\n }\n };\n\n const pages: Record<ROUTES, React.ReactNode> = {\n [ROUTES.SELECT_METHOD]: <SelectMethod />,\n [ROUTES.SELECT_TOKEN]: <SelectToken />,\n [ROUTES.SELECT_AMOUNT]: <SelectAmount />,\n [ROUTES.SELECT_EXTERNAL_AMOUNT]: <SelectExternalAmount />,\n [ROUTES.SELECT_EXCHANGE]: <SelectExchange />,\n [ROUTES.SELECT_DEPOSIT_ADDRESS_AMOUNT]: <SelectDepositAddressAmount />,\n [ROUTES.SELECT_WALLET_AMOUNT]: <SelectWalletAmount />,\n [ROUTES.SELECT_WALLET_CHAIN]: <SelectWalletChain />,\n [ROUTES.WAITING_EXTERNAL]: <WaitingExternal />,\n [ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN]: <SelectDepositAddressChain />,\n [ROUTES.WAITING_DEPOSIT_ADDRESS]: <WaitingDepositAddress />,\n [ROUTES.SELECT_ZKP2P]: <SelectZKP />,\n [ROUTES.WAITING_WALLET]: <WaitingWallet />,\n [ROUTES.CONFIRMATION]: <Confirmation />,\n [ROUTES.ERROR]: <ErrorPage />,\n [ROUTES.PAY_WITH_TOKEN]: <PayWithToken />,\n [ROUTES.SOLANA_CONNECTOR]: <ConnectorSolana />,\n [ROUTES.SOLANA_SELECT_AMOUNT]: <SelectSolanaAmount />,\n [ROUTES.SOLANA_PAY_WITH_TOKEN]: <PayWithSolanaToken />,\n // Unused routes. Kept to minimize connectkit merge conflicts.\n [ROUTES.ONBOARDING]: <Onboarding />,\n [ROUTES.ABOUT]: <About />,\n [ROUTES.CONNECTORS]: <Connectors />,\n [ROUTES.MOBILECONNECTORS]: <MobileConnectors />,\n [ROUTES.CONNECT]: <ConnectUsing />,\n [ROUTES.SWITCHNETWORKS]: <SwitchNetworks />,\n };\n\n // Registry of page-level leave guards (hooks that run before navigation)\n // For WAITING_DEPOSIT_ADDRESS, we need to pass trpc and orderId\n const leaveGuards: Partial<Record<ROUTES, () => Promise<boolean> | boolean>> =\n {\n [ROUTES.WAITING_DEPOSIT_ADDRESS]: () =>\n waitingDepositAddressBeforeLeave(context.trpc, order?.id?.toString()),\n };\n\n // Helper to wrap navigation actions with leave guard check\n const guardedAction = async (action: () => void) => {\n const guard = leaveGuards[context.route];\n\n // If no guard exists for current page, proceed with action\n if (!guard) {\n action();\n return;\n }\n\n // Otherwise, call the guard and check if navigation is allowed\n let canProceed = false;\n try {\n canProceed = await guard();\n } catch (error) {\n console.error(\"error in leave guard:\", error);\n return;\n }\n\n if (!canProceed) return;\n\n try {\n action();\n } catch (error) {\n console.error(\"error performing guarded action:\", error);\n return;\n }\n\n // dismiss warning after navigation to avoid intermediate flash\n if (paymentFsmState === \"warning\") {\n try {\n daimo.dismissWarning();\n } catch (error) {\n console.error(\"error dismissing warning:\", error);\n }\n }\n };\n\n function hide() {\n if (isDepositFlow) {\n generatePreviewOrder();\n }\n context.setOpen(false, { event: \"click-close\" });\n }\n\n const goToManualAddressScreen = (eventSuffix: string) => {\n if (paymentState.isDepositFlow) {\n context.setUniquePaymentMethodPage(ROUTES.SELECT_DEPOSIT_ADDRESS_AMOUNT);\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_AMOUNT, {\n event: `unique_payment_option_deposit_${eventSuffix}`,\n });\n } else {\n context.setUniquePaymentMethodPage(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN);\n context.setRoute(ROUTES.WAITING_DEPOSIT_ADDRESS, {\n event: `unique_payment_option_${eventSuffix}`,\n });\n }\n };\n\n const goToExternalScreen = (eventSuffix: string) => {\n if (paymentState.isDepositFlow) {\n context.setUniquePaymentMethodPage(ROUTES.SELECT_EXTERNAL_AMOUNT);\n context.setRoute(ROUTES.SELECT_EXTERNAL_AMOUNT, {\n event: `unique_payment_option_${eventSuffix}_deposit`,\n });\n } else {\n context.setUniquePaymentMethodPage(ROUTES.WAITING_EXTERNAL);\n context.setRoute(ROUTES.WAITING_EXTERNAL, {\n event: `unique_payment_option_${eventSuffix}`,\n });\n }\n };\n\n const { isMobile } = useIsMobile();\n\n // Override the first screen upon opening the modal.\n // 1. If paymentOptions has exactly one option, navigate to that screen directly\n // 2. If the user has a wallet already connected upon opening the modal, go\n // straight to the select token screen\n // 3. If the user has no wallet connected upon opening the modal, go to the\n // select method screen\n useEffect(() => {\n // Reset the flag when modal closes\n if (!context.open) {\n hasHandledInitialOpen.current = false;\n return;\n }\n if (context.route !== ROUTES.SELECT_METHOD) return;\n\n const paymentOptions = paymentState.buttonProps?.paymentOptions;\n const hasUniqueOption = paymentOptions && paymentOptions.length === 1;\n\n if (hasUniqueOption) {\n const option = paymentOptions[0];\n // Handle nested array (wallet list)\n if (Array.isArray(option)) {\n context.setUniquePaymentMethodPage(ROUTES.CONNECTORS);\n context.setRoute(ROUTES.CONNECTORS, {\n event: \"unique_payment_option_wallets\",\n });\n return;\n }\n // Handle single string option\n switch (option) {\n case \"Tron\":\n // Find the Tron option from available deposit address options\n const tronOption = paymentState.depositAddressOptions.options?.find(\n (option) => option.id === DepositAddressPaymentOptions.TRON_USDT,\n );\n if (tronOption) {\n setSelectedDepositAddressOption(tronOption);\n goToManualAddressScreen(\"tron\");\n } else if (!paymentState.depositAddressOptions.loading) {\n // Data loaded but option not found, fallback to chain selection\n context.setUniquePaymentMethodPage(\n ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN,\n );\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, {\n event: \"unique_payment_option_tron_fallback\",\n });\n }\n // If still loading, do nothing and wait for next render\n break;\n case \"AllExchanges\":\n // Open exchanges list directly\n context.setUniquePaymentMethodPage(ROUTES.SELECT_EXCHANGE);\n context.setRoute(ROUTES.SELECT_EXCHANGE, {\n event: \"unique_payment_option_all_exchanges\",\n });\n break;\n case \"AllAddresses\":\n context.setUniquePaymentMethodPage(\n ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN,\n );\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, {\n event: \"unique_payment_option_manual_address\",\n });\n break;\n case \"Base\":\n // Find the Base option from available deposit address options\n const baseOption = paymentState.depositAddressOptions.options?.find(\n (option) => option.id === DepositAddressPaymentOptions.BASE,\n );\n if (baseOption) {\n setSelectedDepositAddressOption(baseOption);\n goToManualAddressScreen(\"base\");\n } else if (!paymentState.depositAddressOptions.loading) {\n context.setUniquePaymentMethodPage(\n ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN,\n );\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, {\n event: \"unique_payment_option_base_fallback\",\n });\n }\n break;\n case \"Arbitrum\":\n // Find the Arbitrum option from available deposit address options\n const arbitrumOption =\n paymentState.depositAddressOptions.options?.find(\n (option) => option.id === DepositAddressPaymentOptions.ARBITRUM,\n );\n if (arbitrumOption) {\n setSelectedDepositAddressOption(arbitrumOption);\n goToManualAddressScreen(\"arbitrum\");\n } else if (!paymentState.depositAddressOptions.loading) {\n context.setUniquePaymentMethodPage(\n ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN,\n );\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, {\n event: \"unique_payment_option_arbitrum_fallback\",\n });\n }\n break;\n case \"Optimism\":\n // Find the Optimism option from available deposit address options\n const optimismOption =\n paymentState.depositAddressOptions.options?.find(\n (option) => option.id === DepositAddressPaymentOptions.OP_MAINNET,\n );\n if (optimismOption) {\n setSelectedDepositAddressOption(optimismOption);\n goToManualAddressScreen(\"optimism\");\n } else if (!paymentState.depositAddressOptions.loading) {\n context.setUniquePaymentMethodPage(\n ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN,\n );\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, {\n event: \"unique_payment_option_optimism_fallback\",\n });\n }\n break;\n case \"Polygon\":\n // Find the Polygon option from available deposit address options\n const polygonOption =\n paymentState.depositAddressOptions.options?.find(\n (option) => option.id === DepositAddressPaymentOptions.POLYGON,\n );\n if (polygonOption) {\n setSelectedDepositAddressOption(polygonOption);\n goToManualAddressScreen(\"polygon\");\n } else if (!paymentState.depositAddressOptions.loading) {\n context.setUniquePaymentMethodPage(\n ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN,\n );\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, {\n event: \"unique_payment_option_polygon_fallback\",\n });\n }\n break;\n case \"Ethereum\":\n // Find the Ethereum option from available deposit address options\n const ethereumOption =\n paymentState.depositAddressOptions.options?.find(\n (option) => option.id === DepositAddressPaymentOptions.ETH_L1,\n );\n if (ethereumOption) {\n setSelectedDepositAddressOption(ethereumOption);\n goToManualAddressScreen(\"ethereum\");\n } else if (!paymentState.depositAddressOptions.loading) {\n context.setUniquePaymentMethodPage(\n ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN,\n );\n context.setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN, {\n event: \"unique_payment_option_ethereum_fallback\",\n });\n }\n break;\n case \"Binance\":\n // Find the Binance option from available exchange options\n const exchangeOptions =\n paymentState.externalPaymentOptions.options.get(\"exchange\");\n const binanceOption = exchangeOptions?.find(\n (option) => option.id === ExternalPaymentOptions.Binance,\n );\n if (binanceOption) {\n setSelectedExternalOption(binanceOption);\n goToExternalScreen(\"binance\");\n } else if (!paymentState.externalPaymentOptions.loading) {\n context.setUniquePaymentMethodPage(ROUTES.SELECT_EXCHANGE);\n context.setRoute(ROUTES.SELECT_EXCHANGE, {\n event: \"unique_payment_option_binance_fallback\",\n });\n }\n break;\n case \"Coinbase\":\n // Find the Coinbase option from available exchange options\n const coinbaseExchangeOptions =\n paymentState.externalPaymentOptions.options.get(\"exchange\");\n const coinbaseOption = coinbaseExchangeOptions?.find(\n (option) => option.id === ExternalPaymentOptions.Coinbase,\n );\n if (coinbaseOption) {\n setSelectedExternalOption(coinbaseOption);\n goToExternalScreen(\"coinbase\");\n } else if (!paymentState.externalPaymentOptions.loading) {\n context.setUniquePaymentMethodPage(ROUTES.SELECT_EXCHANGE);\n context.setRoute(ROUTES.SELECT_EXCHANGE, {\n event: \"unique_payment_option_coinbase_fallback\",\n });\n }\n break;\n case \"Lemon\":\n // Find the Lemon option from available external options\n const lemonExternalOptions =\n paymentState.externalPaymentOptions.options.get(\"external\");\n const lemonOption = lemonExternalOptions?.find(\n (option) => option.id === ExternalPaymentOptions.Lemon,\n );\n if (lemonOption) {\n setSelectedExternalOption(lemonOption);\n goToExternalScreen(\"lemon\");\n } else if (!paymentState.externalPaymentOptions.loading) {\n // Lemon not found - may not be available in this environment/region\n console.warn(\n \"[DaimoPayModal] Lemon not found in external payment options\",\n );\n context.setUniquePaymentMethodPage(ROUTES.SELECT_METHOD);\n context.setRoute(ROUTES.SELECT_METHOD, {\n event: \"unique_payment_option_lemon_not_found\",\n });\n }\n // If still loading, wait for next render\n break;\n case \"AllWallets\":\n context.setUniquePaymentMethodPage(ROUTES.CONNECTORS);\n context.setRoute(ROUTES.CONNECTORS, {\n event: \"unique_payment_option_wallets\",\n });\n break;\n default:\n // Single wallet options like MiniPay, World, etc\n const singleOption = option;\n if (isWalletOption(singleOption)) {\n const walletId = Object.keys(walletConfigs).find((id) => {\n const wallet = walletConfigs[id];\n const optionLower = singleOption.toLowerCase();\n return (\n wallet.name?.toLowerCase() === optionLower ||\n wallet.shortName?.toLowerCase() === optionLower ||\n wallet.name?.toLowerCase().includes(optionLower) ||\n id.toLowerCase() === optionLower ||\n id.toLowerCase().includes(optionLower)\n );\n });\n if (walletId) {\n const wallet = walletConfigs[walletId];\n paymentState.setSelectedWallet(wallet);\n\n if (paymentState.isDepositFlow) {\n // For deposit mode, route to amount selection first\n context.setUniquePaymentMethodPage(ROUTES.SELECT_WALLET_AMOUNT);\n context.setRoute(ROUTES.SELECT_WALLET_AMOUNT, {\n event: \"single_option_wallet_deposit\",\n wallet: singleOption,\n });\n } else if (!isMobile && wallet.getDaimoPayDeeplink) {\n // On desktop, show QR code for wallet\n context.setPendingConnectorId(walletId);\n context.setUniquePaymentMethodPage(ROUTES.CONNECT);\n context.setRoute(ROUTES.CONNECT, {\n event: \"single_option_wallet_qr\",\n wallet: singleOption,\n });\n } else if (isMobile && wallet.getDaimoPayDeeplink) {\n // On mobile with deeplink, open wallet directly (no internal routing)\n paymentState.openInWalletBrowser(wallet);\n } else {\n // No deeplink - go to connectors to let user connect\n context.setRoute(ROUTES.CONNECTORS, {\n event: \"single_option_wallet\",\n wallet: singleOption,\n });\n }\n } else {\n context.setUniquePaymentMethodPage(ROUTES.SELECT_METHOD);\n }\n } else {\n context.setUniquePaymentMethodPage(ROUTES.SELECT_METHOD);\n }\n break;\n }\n }\n\n const isWalletsUniquePaymentOption =\n hasUniqueOption &&\n (Array.isArray(paymentOptions[0]) || paymentOptions[0] === \"AllWallets\");\n\n // Skip to token selection if exactly one wallet is connected. If both\n // wallets are connected, stay on the SELECT_METHOD screen to allow the\n // user to select which wallet to use\n // If mobile injector is disabled, don't show the connected wallets.\n // If there's a unique payment option, and the unique payment option is not\n // \"AllWallets\" or a wallet list, don't auto-connect the user's wallet.\n const evmOptionsCount =\n paymentState.walletPaymentOptions.options?.length ?? 0;\n const isEvmLoading = paymentState.walletPaymentOptions.isLoading;\n const solanaOptionsCount =\n paymentState.solanaPaymentOptions.options?.length ?? 0;\n const isSolanaLoading = paymentState.solanaPaymentOptions.isLoading;\n if (\n (!hasUniqueOption || isWalletsUniquePaymentOption) &&\n isEthConnected &&\n !isSolanaConnected &&\n (!isMobile || !disableMobileInjector) &&\n !isEvmLoading &&\n evmOptionsCount > 0\n ) {\n // Only auto-connect to prioritized wallet on first modal open\n if (\n !hasHandledInitialOpen.current &&\n prioritizedWalletId &&\n prioritizedConnector &&\n connector?.id !== prioritizedWalletId\n ) {\n connect({ connector: prioritizedConnector });\n }\n hasHandledInitialOpen.current = true;\n paymentState.setTokenMode(\"evm\");\n context.setRoute(ROUTES.SELECT_TOKEN, {\n event: \"eth_connected_on_open\",\n walletId: connector?.id,\n chainId: chain?.id,\n address,\n });\n } else if (\n (!hasUniqueOption || isWalletsUniquePaymentOption) &&\n isSolanaConnected &&\n !isEthConnected &&\n !disableMobileInjector &&\n !isSolanaLoading &&\n solanaOptionsCount > 0\n ) {\n hasHandledInitialOpen.current = true;\n paymentState.setTokenMode(\"solana\");\n context.setRoute(ROUTES.SELECT_TOKEN, {\n event: \"solana_connected_on_open\",\n });\n }\n // Don't include context.route in the dependency array otherwise the user\n // can't go back from the select token screen to the select method screen\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n context.open,\n paymentState.walletPaymentOptions.options,\n paymentState.walletPaymentOptions.isLoading,\n paymentState.solanaPaymentOptions.options,\n paymentState.solanaPaymentOptions.isLoading,\n paymentState.externalPaymentOptions.options,\n paymentState.externalPaymentOptions.loading,\n paymentState.depositAddressOptions.options,\n paymentState.depositAddressOptions.loading,\n address,\n chain?.id,\n connector?.id,\n context.uniquePaymentMethodPage,\n ]);\n\n // If we're on the connect page and the user successfully connects their\n // wallet, go to the select token page\n useEffect(() => {\n if (\n context.route === ROUTES.CONNECT ||\n context.route === ROUTES.CONNECTORS ||\n context.route === ROUTES.MOBILECONNECTORS\n ) {\n if (isEthConnected) {\n paymentState.setTokenMode(\"evm\");\n context.setRoute(ROUTES.SELECT_TOKEN, {\n event: \"connected\",\n walletId: connector?.id,\n chainId: chain?.id,\n address,\n });\n }\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isEthConnected, context.route, connector?.id, chain?.id, address]);\n\n useEffect(() => setMode(mode), [mode, setMode]);\n useEffect(() => setTheme(theme), [theme, setTheme]);\n useEffect(() => setCustomTheme(customTheme), [customTheme, setCustomTheme]);\n useEffect(() => setLang(lang), [lang, setLang]);\n useEffect(\n () => setDisableMobileInjector(disableMobileInjector),\n [disableMobileInjector, setDisableMobileInjector],\n );\n\n useEffect(() => {\n const appName = getAppName();\n if (!appName || !context.open) return;\n\n const title = document.createElement(\"meta\");\n title.setAttribute(\"property\", \"og:title\");\n title.setAttribute(\"content\", appName);\n document.head.prepend(title);\n\n return () => {\n try {\n document.head.removeChild(title);\n } catch {}\n };\n }, [context.open]);\n\n return (\n <DaimoPayThemeProvider theme={theme} customTheme={customTheme} mode={mode}>\n <Modal\n open={context.open}\n pages={pages}\n pageId={context.route}\n onClose={\n closeable && paymentFsmState !== \"warning\"\n ? () => guardedAction(hide)\n : undefined\n }\n onInfo={undefined}\n onBack={showBackButton ? () => guardedAction(onBack) : undefined}\n />\n </DaimoPayThemeProvider>\n );\n};\n"],"names":["useWalletById","ConnectorSolana","Onboarding","Connectors","waitingDepositAddressBeforeLeave","option"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { usePayContext } from '../../../hooks/usePayContext.js';
|
|
|
4
4
|
import { PageContent } from '../../Common/Modal/styles.js';
|
|
5
5
|
import { DepositAddressPaymentOptions, getAddressContraction } from '@daimo/pay-common';
|
|
6
6
|
import { useWallet } from '@solana/wallet-adapter-react';
|
|
7
|
-
import { useAccount, useDisconnect } from 'wagmi';
|
|
7
|
+
import { useAccount, useDisconnect, useConnections } from 'wagmi';
|
|
8
8
|
import { Ethereum, Solana, Polygon, Base, Tron } from '../../../assets/chains.js';
|
|
9
9
|
import { MetaMask, Trust, Rainbow, Phantom, Rabby, WalletIcon } from '../../../assets/logos.js';
|
|
10
10
|
import useIsMobile from '../../../hooks/useIsMobile.js';
|
|
@@ -34,6 +34,7 @@ function SelectMethod() {
|
|
|
34
34
|
} = useWallet();
|
|
35
35
|
const { setRoute, paymentState, log, disableMobileInjector } = usePayContext();
|
|
36
36
|
const { disconnectAsync } = useDisconnect();
|
|
37
|
+
const connections = useConnections();
|
|
37
38
|
const { externalPaymentOptions, senderEnsName, topOptionsOrder } = paymentState;
|
|
38
39
|
const showConnectedEth = isEthConnected && (!isMobile || !disableMobileInjector);
|
|
39
40
|
const showConnectedSolana = isSolanaConnected && (!isMobile || !disableMobileInjector);
|
|
@@ -135,7 +136,9 @@ function SelectMethod() {
|
|
|
135
136
|
title: isEthConnected || isSolanaConnected ? locales.payWithAnotherWallet : locales.payWithWallet,
|
|
136
137
|
icons: getBestUnconnectedWalletIcons(connector, isMobile, walletOrder),
|
|
137
138
|
onClick: async () => {
|
|
138
|
-
|
|
139
|
+
for (const connection of connections) {
|
|
140
|
+
await disconnectAsync({ connector: connection.connector });
|
|
141
|
+
}
|
|
139
142
|
await disconnectSolana();
|
|
140
143
|
setRoute(ROUTES.CONNECTORS);
|
|
141
144
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/components/Pages/SelectMethod/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { ROUTES } from \"../../../constants/routes\";\nimport { usePayContext } from \"../../../hooks/usePayContext\";\n\nimport { PageContent } from \"../../Common/Modal/styles\";\n\nimport {\n DepositAddressPaymentOptions,\n getAddressContraction,\n} from \"@daimo/pay-common\";\nimport { useWallet } from \"@solana/wallet-adapter-react\";\nimport { Connector, useAccount, useDisconnect } from \"wagmi\";\nimport { Base, Ethereum, Polygon, Solana, Tron } from \"../../../assets/chains\";\nimport {\n MetaMask,\n Phantom,\n Rabby,\n Rainbow,\n Trust,\n WalletIcon,\n} from \"../../../assets/logos\";\nimport useIsMobile from \"../../../hooks/useIsMobile\";\nimport useLocales from \"../../../hooks/useLocales\";\nimport { flattenChildren } from \"../../../utils\";\nimport { walletConfigs } from \"../../../wallets/walletConfigs\";\nimport { Option, OptionsList } from \"../../Common/OptionsList\";\nimport { OrderHeader } from \"../../Common/OrderHeader\";\nimport PoweredByFooter from \"../../Common/PoweredByFooter\";\nimport WalletChainLogo from \"../../Common/WalletChainLogo\";\n\nexport default function SelectMethod() {\n const locales = useLocales();\n const payWithString = flattenChildren(locales.payWith).join(\"\");\n const { isMobile } = useIsMobile();\n\n const {\n address,\n chain,\n isConnected: isEthConnected,\n connector,\n } = useAccount();\n const {\n connected: isSolanaConnected,\n wallet: solanaWallet,\n disconnect: disconnectSolana,\n publicKey,\n } = useWallet();\n const { setRoute, paymentState, log, disableMobileInjector } =\n usePayContext();\n const { disconnectAsync } = useDisconnect();\n\n const { externalPaymentOptions, senderEnsName, topOptionsOrder } =\n paymentState;\n\n // Decide whether to show the connected eth account, solana account, or both.\n // Desktop: Always show connected wallets when available\n // Mobile: Only show connected wallets when mobile injector is enabled (!disableMobileInjector)\n const showConnectedEth =\n isEthConnected && (!isMobile || !disableMobileInjector);\n const showConnectedSolana =\n isSolanaConnected && (!isMobile || !disableMobileInjector);\n\n const getConnectedWalletOptions = () => {\n const showChainLogo = isEthConnected && isSolanaConnected;\n\n const connectedOptions: Option[] = [];\n\n if (showConnectedEth) {\n const ethWalletDisplayName =\n senderEnsName ?? (address ? getAddressContraction(address) : \"wallet\");\n\n // Prefer icon from walletConfigs if there's a name match, otherwise fall back\n // to the connector-provided icon, and finally to the generic WalletIcon.\n let walletIcon: JSX.Element;\n\n const matchedConfig = Object.values(walletConfigs).find((cfg) => {\n if (!cfg.name || !connector?.name) return false;\n const cfgName = cfg.name.toLowerCase();\n const connName = connector.name.toLowerCase();\n return cfgName.includes(connName) || connName.includes(cfgName);\n });\n\n if (matchedConfig?.icon) {\n walletIcon =\n typeof matchedConfig.icon === \"string\" ? (\n <img src={matchedConfig.icon} alt={matchedConfig.name} />\n ) : (\n (matchedConfig.icon as JSX.Element)\n );\n } else if (connector?.icon) {\n walletIcon = (\n <div style={{ borderRadius: \"22.5%\", overflow: \"hidden\" }}>\n <img src={connector.icon} alt={connector.name} />\n </div>\n );\n } else {\n walletIcon = <WalletIcon />;\n }\n\n const connectedEthWalletOption = {\n id: \"connectedWallet\",\n title: `${payWithString} ${ethWalletDisplayName}`,\n icons: [\n <WalletChainLogo\n key=\"eth\"\n walletIcon={walletIcon}\n walletName={connector?.name || \"Wallet\"}\n chainLogo={showChainLogo ? <Ethereum /> : null}\n />,\n ],\n onClick: () => {\n paymentState.setTokenMode(\"evm\");\n setRoute(ROUTES.SELECT_TOKEN, {\n event: \"click-wallet\",\n walletId: connector?.id,\n chainId: chain?.id,\n address: address,\n });\n },\n };\n connectedOptions.push(connectedEthWalletOption);\n }\n\n if (showConnectedSolana) {\n const solWalletDisplayName = getAddressContraction(\n publicKey?.toBase58() ?? \"\",\n );\n\n // Prefer icon from walletConfigs if available\n let solWalletIcon: React.ReactNode;\n const solMatchedConfig = Object.values(walletConfigs).find((cfg) => {\n if (!cfg.name) return false;\n const cfgName = cfg.name.toLowerCase();\n const solName = solanaWallet?.adapter.name.toLowerCase() || \"\";\n return cfgName.includes(solName) || solName.includes(cfgName);\n });\n\n if (solMatchedConfig?.icon) {\n solWalletIcon =\n typeof solMatchedConfig.icon === \"string\" ? (\n <img src={solMatchedConfig.icon} alt={solMatchedConfig.name} />\n ) : (\n (solMatchedConfig.icon as JSX.Element)\n );\n } else if (solanaWallet?.adapter.icon) {\n solWalletIcon = solanaWallet.adapter.icon;\n } else {\n solWalletIcon = <Solana />;\n }\n\n const connectedSolWalletOption = {\n id: \"connectedSolanaWallet\",\n title: `${payWithString} ${solWalletDisplayName}`,\n icons: [\n <WalletChainLogo\n key=\"sol-wallet\"\n walletIcon={solWalletIcon}\n walletName={solanaWallet?.adapter.name || \"Wallet\"}\n chainLogo={showChainLogo && <Solana />}\n />,\n ],\n onClick: () => {\n paymentState.setTokenMode(\"solana\");\n setRoute(ROUTES.SELECT_TOKEN, {\n event: \"click-wallet\",\n walletId: solanaWallet?.adapter.name,\n chainId: \"solana\",\n address: publicKey?.toBase58(),\n });\n },\n };\n\n connectedOptions.push(connectedSolWalletOption);\n }\n\n return connectedOptions;\n };\n\n const connectedWalletOptions = getConnectedWalletOptions();\n\n // Get custom wallet list if specified\n const walletOrder =\n paymentState.externalPaymentOptions.parsedConfig.walletOrder;\n\n const unconnectedWalletOption = {\n id: \"unconnectedWallet\",\n title:\n isEthConnected || isSolanaConnected\n ? locales.payWithAnotherWallet\n : locales.payWithWallet,\n icons: getBestUnconnectedWalletIcons(connector, isMobile, walletOrder),\n onClick: async () => {\n await disconnectAsync();\n await disconnectSolana();\n setRoute(ROUTES.CONNECTORS);\n },\n };\n\n log(\n `[SELECT_METHOD] loading: ${externalPaymentOptions.loading}, options: ${JSON.stringify(\n externalPaymentOptions.options,\n )}`,\n );\n\n // Build categorized options\n type CategorizedOption = {\n id: string;\n title: string;\n subtitle?: string;\n icons: (React.ReactNode | string)[];\n onClick: () => void;\n disabled?: boolean;\n category: string;\n };\n\n const categorizedOptions: CategorizedOption[] = [];\n\n // Connected wallets always appear first\n connectedWalletOptions.forEach((opt) =>\n categorizedOptions.push({ ...opt, category: \"connected\" }),\n );\n\n // Wallet options (unconnected) - only if AllWallets is in topOptionsOrder\n if (topOptionsOrder.includes(\"AllWallets\")) {\n categorizedOptions.push({\n ...unconnectedWalletOption,\n category: \"AllWallets\",\n });\n }\n\n // Exchange options - only if AllExchanges is in topOptionsOrder\n const exchangeOptions = externalPaymentOptions.options.get(\"exchange\") ?? [];\n const showExchangePaymentMethod =\n exchangeOptions.length > 0 && topOptionsOrder.includes(\"AllExchanges\");\n if (showExchangePaymentMethod) {\n categorizedOptions.push({\n id: \"exchange\",\n title: locales.payWithExchange,\n icons: exchangeOptions.slice(0, 3).map((option) => option.logoURI),\n onClick: () => {\n setRoute(ROUTES.SELECT_EXCHANGE, {\n event: \"click-option\",\n option: \"exchange\",\n });\n },\n category: \"AllExchanges\",\n });\n }\n\n // Tron option - only if Tron is in topOptionsOrder\n if (topOptionsOrder.includes(\"Tron\")) {\n const tronOption = paymentState.depositAddressOptions.options?.find(\n (option) => option.id === DepositAddressPaymentOptions.TRON_USDT,\n );\n if (tronOption) {\n categorizedOptions.push({\n id: \"tron\",\n title: tronOption.id, // Use the actual title like \"USDT on Tron\"\n icons: [tronOption.logoURI],\n onClick: () => {\n paymentState.setSelectedDepositAddressOption(tronOption);\n setRoute(\n paymentState.isDepositFlow\n ? ROUTES.SELECT_DEPOSIT_ADDRESS_AMOUNT\n : ROUTES.WAITING_DEPOSIT_ADDRESS,\n { event: \"select_tron\" },\n );\n },\n category: \"Tron\",\n });\n }\n }\n\n // Deposit address options - only if AllAddresses is in topOptionsOrder\n if (topOptionsOrder.includes(\"AllAddresses\")) {\n const depositAddressOption = getDepositAddressOption(\n setRoute,\n locales,\n topOptionsOrder.includes(\"Tron\"), // exclude Tron if shown separately\n );\n categorizedOptions.push({\n ...depositAddressOption,\n category: \"AllAddresses\",\n });\n }\n\n // ZKP2P options - only if AllPaymentApps is in topOptionsOrder\n const zkp2pOptions = externalPaymentOptions.options.get(\"zkp2p\") ?? [];\n const showZkp2pPaymentMethod =\n !isMobile &&\n zkp2pOptions.length > 0 &&\n topOptionsOrder.includes(\"AllPaymentApps\");\n if (showZkp2pPaymentMethod) {\n categorizedOptions.push({\n id: \"ZKP2P\",\n title: locales.payViaPaymentApp,\n icons: zkp2pOptions.slice(0, 2).map((option) => option.logoURI),\n onClick: () => {\n setRoute(ROUTES.SELECT_ZKP2P);\n },\n category: \"AllPaymentApps\",\n });\n }\n\n // Sort based on topOptionsOrder, keeping connected wallets first\n const sortedOptions = categorizedOptions.sort((a, b) => {\n // Connected wallets always first\n if (a.category === \"connected\") return -1;\n if (b.category === \"connected\") return 1;\n\n // Then sort by topOptionsOrder\n const aIndex = topOptionsOrder.indexOf(a.category);\n const bIndex = topOptionsOrder.indexOf(b.category);\n\n // If not in order list, put at the end\n if (aIndex === -1 && bIndex === -1) return 0;\n if (aIndex === -1) return 1;\n if (bIndex === -1) return -1;\n\n return aIndex - bIndex;\n });\n\n // Remove category field for final options\n const options = sortedOptions.map(({ category, ...opt }) => opt);\n\n // Order disabled to bottom\n options.sort((a, b) => (a.disabled ? 1 : 0) - (b.disabled ? 1 : 0));\n\n return (\n <PageContent>\n <OrderHeader />\n\n <OptionsList\n requiredSkeletons={3}\n isLoading={externalPaymentOptions.loading}\n options={externalPaymentOptions.loading ? [] : options}\n />\n <PoweredByFooter />\n </PageContent>\n );\n}\n\n// Get 3 icons, skipping the one that is already connected\nfunction getBestUnconnectedWalletIcons(\n connector: Connector | undefined,\n isMobile: boolean,\n walletOrder?: string[],\n) {\n const icons: JSX.Element[] = [];\n const strippedId = connector?.id.toLowerCase();\n\n // If custom wallet list is provided, use those wallets\n if (walletOrder && walletOrder.length > 0 && isMobile) {\n const maxIcons = 3;\n for (const walletName of walletOrder) {\n if (icons.length >= maxIcons) break;\n\n // Skip if this wallet is already connected\n if (strippedId?.includes(walletName.toLowerCase())) continue;\n\n // Find wallet config\n const walletId = Object.keys(walletConfigs).find((id) => {\n const wallet = walletConfigs[id];\n const nameLower = walletName.toLowerCase();\n return (\n wallet.name?.toLowerCase().includes(nameLower) ||\n wallet.shortName?.toLowerCase().includes(nameLower) ||\n id.toLowerCase().includes(nameLower)\n );\n });\n\n if (walletId) {\n const wallet = walletConfigs[walletId];\n const icon = wallet.iconConnector || wallet.icon;\n if (icon) {\n icons.push(\n <div\n key={walletId}\n style={{ borderRadius: \"22.5%\", overflow: \"hidden\" }}\n >\n {icon}\n </div>,\n );\n }\n }\n }\n\n if (icons.length > 0) return icons;\n }\n\n // Default icons (fallback)\n const [isRainbow, isTrust, isPhantom, isMetaMask, isRabby] = [\n strippedId?.includes(\"rainbow\"),\n strippedId?.includes(\"trust\"),\n strippedId?.includes(\"phantom\"),\n strippedId?.includes(\"coinbase\"),\n strippedId?.includes(\"metamask\"),\n strippedId?.includes(\"rabby\"),\n ];\n\n if (isMobile) {\n if (!isMetaMask) icons.push(<MetaMask />);\n if (!isTrust) icons.push(<Trust background />);\n if (!isRainbow && icons.length < 3) icons.push(<Rainbow />);\n } else {\n if (!isMetaMask) icons.push(<MetaMask />);\n if (!isRainbow) icons.push(<Rainbow />);\n if (!isPhantom) icons.push(<Phantom />);\n if (!isRabby && icons.length < 3) icons.push(<Rabby />);\n }\n\n return icons;\n}\n\nfunction getDepositAddressOption(\n setRoute: (route: ROUTES, data?: Record<string, any>) => void,\n locales: ReturnType<typeof useLocales>,\n excludeTron: boolean = false,\n) {\n const icons = excludeTron\n ? [<Ethereum key=\"eth\" />, <Polygon key=\"polygon\" />, <Base key=\"base\" />]\n : [<Ethereum key=\"eth\" />, <Tron key=\"tron\" />, <Base key=\"base\" />];\n\n return {\n id: \"depositAddress\",\n title: locales.payToAddress,\n icons,\n onClick: () => {\n setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN);\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/Pages/SelectMethod/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { ROUTES } from \"../../../constants/routes\";\nimport { usePayContext } from \"../../../hooks/usePayContext\";\n\nimport { PageContent } from \"../../Common/Modal/styles\";\n\nimport {\n DepositAddressPaymentOptions,\n getAddressContraction,\n} from \"@daimo/pay-common\";\nimport { useWallet } from \"@solana/wallet-adapter-react\";\nimport { Connector, useAccount, useConnections, useDisconnect } from \"wagmi\";\nimport { Base, Ethereum, Polygon, Solana, Tron } from \"../../../assets/chains\";\nimport {\n MetaMask,\n Phantom,\n Rabby,\n Rainbow,\n Trust,\n WalletIcon,\n} from \"../../../assets/logos\";\nimport useIsMobile from \"../../../hooks/useIsMobile\";\nimport useLocales from \"../../../hooks/useLocales\";\nimport { flattenChildren } from \"../../../utils\";\nimport { walletConfigs } from \"../../../wallets/walletConfigs\";\nimport { Option, OptionsList } from \"../../Common/OptionsList\";\nimport { OrderHeader } from \"../../Common/OrderHeader\";\nimport PoweredByFooter from \"../../Common/PoweredByFooter\";\nimport WalletChainLogo from \"../../Common/WalletChainLogo\";\n\nexport default function SelectMethod() {\n const locales = useLocales();\n const payWithString = flattenChildren(locales.payWith).join(\"\");\n const { isMobile } = useIsMobile();\n\n const {\n address,\n chain,\n isConnected: isEthConnected,\n connector,\n } = useAccount();\n const {\n connected: isSolanaConnected,\n wallet: solanaWallet,\n disconnect: disconnectSolana,\n publicKey,\n } = useWallet();\n const { setRoute, paymentState, log, disableMobileInjector } =\n usePayContext();\n const { disconnectAsync } = useDisconnect();\n const connections = useConnections();\n\n const { externalPaymentOptions, senderEnsName, topOptionsOrder } =\n paymentState;\n\n // Decide whether to show the connected eth account, solana account, or both.\n // Desktop: Always show connected wallets when available\n // Mobile: Only show connected wallets when mobile injector is enabled (!disableMobileInjector)\n const showConnectedEth =\n isEthConnected && (!isMobile || !disableMobileInjector);\n const showConnectedSolana =\n isSolanaConnected && (!isMobile || !disableMobileInjector);\n\n const getConnectedWalletOptions = () => {\n const showChainLogo = isEthConnected && isSolanaConnected;\n\n const connectedOptions: Option[] = [];\n\n if (showConnectedEth) {\n const ethWalletDisplayName =\n senderEnsName ?? (address ? getAddressContraction(address) : \"wallet\");\n\n // Prefer icon from walletConfigs if there's a name match, otherwise fall back\n // to the connector-provided icon, and finally to the generic WalletIcon.\n let walletIcon: JSX.Element;\n\n const matchedConfig = Object.values(walletConfigs).find((cfg) => {\n if (!cfg.name || !connector?.name) return false;\n const cfgName = cfg.name.toLowerCase();\n const connName = connector.name.toLowerCase();\n return cfgName.includes(connName) || connName.includes(cfgName);\n });\n\n if (matchedConfig?.icon) {\n walletIcon =\n typeof matchedConfig.icon === \"string\" ? (\n <img src={matchedConfig.icon} alt={matchedConfig.name} />\n ) : (\n (matchedConfig.icon as JSX.Element)\n );\n } else if (connector?.icon) {\n walletIcon = (\n <div style={{ borderRadius: \"22.5%\", overflow: \"hidden\" }}>\n <img src={connector.icon} alt={connector.name} />\n </div>\n );\n } else {\n walletIcon = <WalletIcon />;\n }\n\n const connectedEthWalletOption = {\n id: \"connectedWallet\",\n title: `${payWithString} ${ethWalletDisplayName}`,\n icons: [\n <WalletChainLogo\n key=\"eth\"\n walletIcon={walletIcon}\n walletName={connector?.name || \"Wallet\"}\n chainLogo={showChainLogo ? <Ethereum /> : null}\n />,\n ],\n onClick: () => {\n paymentState.setTokenMode(\"evm\");\n setRoute(ROUTES.SELECT_TOKEN, {\n event: \"click-wallet\",\n walletId: connector?.id,\n chainId: chain?.id,\n address: address,\n });\n },\n };\n connectedOptions.push(connectedEthWalletOption);\n }\n\n if (showConnectedSolana) {\n const solWalletDisplayName = getAddressContraction(\n publicKey?.toBase58() ?? \"\",\n );\n\n // Prefer icon from walletConfigs if available\n let solWalletIcon: React.ReactNode;\n const solMatchedConfig = Object.values(walletConfigs).find((cfg) => {\n if (!cfg.name) return false;\n const cfgName = cfg.name.toLowerCase();\n const solName = solanaWallet?.adapter.name.toLowerCase() || \"\";\n return cfgName.includes(solName) || solName.includes(cfgName);\n });\n\n if (solMatchedConfig?.icon) {\n solWalletIcon =\n typeof solMatchedConfig.icon === \"string\" ? (\n <img src={solMatchedConfig.icon} alt={solMatchedConfig.name} />\n ) : (\n (solMatchedConfig.icon as JSX.Element)\n );\n } else if (solanaWallet?.adapter.icon) {\n solWalletIcon = solanaWallet.adapter.icon;\n } else {\n solWalletIcon = <Solana />;\n }\n\n const connectedSolWalletOption = {\n id: \"connectedSolanaWallet\",\n title: `${payWithString} ${solWalletDisplayName}`,\n icons: [\n <WalletChainLogo\n key=\"sol-wallet\"\n walletIcon={solWalletIcon}\n walletName={solanaWallet?.adapter.name || \"Wallet\"}\n chainLogo={showChainLogo && <Solana />}\n />,\n ],\n onClick: () => {\n paymentState.setTokenMode(\"solana\");\n setRoute(ROUTES.SELECT_TOKEN, {\n event: \"click-wallet\",\n walletId: solanaWallet?.adapter.name,\n chainId: \"solana\",\n address: publicKey?.toBase58(),\n });\n },\n };\n\n connectedOptions.push(connectedSolWalletOption);\n }\n\n return connectedOptions;\n };\n\n const connectedWalletOptions = getConnectedWalletOptions();\n\n // Get custom wallet list if specified\n const walletOrder =\n paymentState.externalPaymentOptions.parsedConfig.walletOrder;\n\n const unconnectedWalletOption = {\n id: \"unconnectedWallet\",\n title:\n isEthConnected || isSolanaConnected\n ? locales.payWithAnotherWallet\n : locales.payWithWallet,\n icons: getBestUnconnectedWalletIcons(connector, isMobile, walletOrder),\n onClick: async () => {\n // Disconnect all wagmi connections\n for (const connection of connections) {\n await disconnectAsync({ connector: connection.connector });\n }\n await disconnectSolana();\n setRoute(ROUTES.CONNECTORS);\n },\n };\n\n log(\n `[SELECT_METHOD] loading: ${externalPaymentOptions.loading}, options: ${JSON.stringify(\n externalPaymentOptions.options,\n )}`,\n );\n\n // Build categorized options\n type CategorizedOption = {\n id: string;\n title: string;\n subtitle?: string;\n icons: (React.ReactNode | string)[];\n onClick: () => void;\n disabled?: boolean;\n category: string;\n };\n\n const categorizedOptions: CategorizedOption[] = [];\n\n // Connected wallets always appear first\n connectedWalletOptions.forEach((opt) =>\n categorizedOptions.push({ ...opt, category: \"connected\" }),\n );\n\n // Wallet options (unconnected) - only if AllWallets is in topOptionsOrder\n if (topOptionsOrder.includes(\"AllWallets\")) {\n categorizedOptions.push({\n ...unconnectedWalletOption,\n category: \"AllWallets\",\n });\n }\n\n // Exchange options - only if AllExchanges is in topOptionsOrder\n const exchangeOptions = externalPaymentOptions.options.get(\"exchange\") ?? [];\n const showExchangePaymentMethod =\n exchangeOptions.length > 0 && topOptionsOrder.includes(\"AllExchanges\");\n if (showExchangePaymentMethod) {\n categorizedOptions.push({\n id: \"exchange\",\n title: locales.payWithExchange,\n icons: exchangeOptions.slice(0, 3).map((option) => option.logoURI),\n onClick: () => {\n setRoute(ROUTES.SELECT_EXCHANGE, {\n event: \"click-option\",\n option: \"exchange\",\n });\n },\n category: \"AllExchanges\",\n });\n }\n\n // Tron option - only if Tron is in topOptionsOrder\n if (topOptionsOrder.includes(\"Tron\")) {\n const tronOption = paymentState.depositAddressOptions.options?.find(\n (option) => option.id === DepositAddressPaymentOptions.TRON_USDT,\n );\n if (tronOption) {\n categorizedOptions.push({\n id: \"tron\",\n title: tronOption.id, // Use the actual title like \"USDT on Tron\"\n icons: [tronOption.logoURI],\n onClick: () => {\n paymentState.setSelectedDepositAddressOption(tronOption);\n setRoute(\n paymentState.isDepositFlow\n ? ROUTES.SELECT_DEPOSIT_ADDRESS_AMOUNT\n : ROUTES.WAITING_DEPOSIT_ADDRESS,\n { event: \"select_tron\" },\n );\n },\n category: \"Tron\",\n });\n }\n }\n\n // Deposit address options - only if AllAddresses is in topOptionsOrder\n if (topOptionsOrder.includes(\"AllAddresses\")) {\n const depositAddressOption = getDepositAddressOption(\n setRoute,\n locales,\n topOptionsOrder.includes(\"Tron\"), // exclude Tron if shown separately\n );\n categorizedOptions.push({\n ...depositAddressOption,\n category: \"AllAddresses\",\n });\n }\n\n // ZKP2P options - only if AllPaymentApps is in topOptionsOrder\n const zkp2pOptions = externalPaymentOptions.options.get(\"zkp2p\") ?? [];\n const showZkp2pPaymentMethod =\n !isMobile &&\n zkp2pOptions.length > 0 &&\n topOptionsOrder.includes(\"AllPaymentApps\");\n if (showZkp2pPaymentMethod) {\n categorizedOptions.push({\n id: \"ZKP2P\",\n title: locales.payViaPaymentApp,\n icons: zkp2pOptions.slice(0, 2).map((option) => option.logoURI),\n onClick: () => {\n setRoute(ROUTES.SELECT_ZKP2P);\n },\n category: \"AllPaymentApps\",\n });\n }\n\n // Sort based on topOptionsOrder, keeping connected wallets first\n const sortedOptions = categorizedOptions.sort((a, b) => {\n // Connected wallets always first\n if (a.category === \"connected\") return -1;\n if (b.category === \"connected\") return 1;\n\n // Then sort by topOptionsOrder\n const aIndex = topOptionsOrder.indexOf(a.category);\n const bIndex = topOptionsOrder.indexOf(b.category);\n\n // If not in order list, put at the end\n if (aIndex === -1 && bIndex === -1) return 0;\n if (aIndex === -1) return 1;\n if (bIndex === -1) return -1;\n\n return aIndex - bIndex;\n });\n\n // Remove category field for final options\n const options = sortedOptions.map(({ category, ...opt }) => opt);\n\n // Order disabled to bottom\n options.sort((a, b) => (a.disabled ? 1 : 0) - (b.disabled ? 1 : 0));\n\n return (\n <PageContent>\n <OrderHeader />\n\n <OptionsList\n requiredSkeletons={3}\n isLoading={externalPaymentOptions.loading}\n options={externalPaymentOptions.loading ? [] : options}\n />\n <PoweredByFooter />\n </PageContent>\n );\n}\n\n// Get 3 icons, skipping the one that is already connected\nfunction getBestUnconnectedWalletIcons(\n connector: Connector | undefined,\n isMobile: boolean,\n walletOrder?: string[],\n) {\n const icons: JSX.Element[] = [];\n const strippedId = connector?.id.toLowerCase();\n\n // If custom wallet list is provided, use those wallets\n if (walletOrder && walletOrder.length > 0 && isMobile) {\n const maxIcons = 3;\n for (const walletName of walletOrder) {\n if (icons.length >= maxIcons) break;\n\n // Skip if this wallet is already connected\n if (strippedId?.includes(walletName.toLowerCase())) continue;\n\n // Find wallet config\n const walletId = Object.keys(walletConfigs).find((id) => {\n const wallet = walletConfigs[id];\n const nameLower = walletName.toLowerCase();\n return (\n wallet.name?.toLowerCase().includes(nameLower) ||\n wallet.shortName?.toLowerCase().includes(nameLower) ||\n id.toLowerCase().includes(nameLower)\n );\n });\n\n if (walletId) {\n const wallet = walletConfigs[walletId];\n const icon = wallet.iconConnector || wallet.icon;\n if (icon) {\n icons.push(\n <div\n key={walletId}\n style={{ borderRadius: \"22.5%\", overflow: \"hidden\" }}\n >\n {icon}\n </div>,\n );\n }\n }\n }\n\n if (icons.length > 0) return icons;\n }\n\n // Default icons (fallback)\n const [isRainbow, isTrust, isPhantom, isMetaMask, isRabby] = [\n strippedId?.includes(\"rainbow\"),\n strippedId?.includes(\"trust\"),\n strippedId?.includes(\"phantom\"),\n strippedId?.includes(\"coinbase\"),\n strippedId?.includes(\"metamask\"),\n strippedId?.includes(\"rabby\"),\n ];\n\n if (isMobile) {\n if (!isMetaMask) icons.push(<MetaMask />);\n if (!isTrust) icons.push(<Trust background />);\n if (!isRainbow && icons.length < 3) icons.push(<Rainbow />);\n } else {\n if (!isMetaMask) icons.push(<MetaMask />);\n if (!isRainbow) icons.push(<Rainbow />);\n if (!isPhantom) icons.push(<Phantom />);\n if (!isRabby && icons.length < 3) icons.push(<Rabby />);\n }\n\n return icons;\n}\n\nfunction getDepositAddressOption(\n setRoute: (route: ROUTES, data?: Record<string, any>) => void,\n locales: ReturnType<typeof useLocales>,\n excludeTron: boolean = false,\n) {\n const icons = excludeTron\n ? [<Ethereum key=\"eth\" />, <Polygon key=\"polygon\" />, <Base key=\"base\" />]\n : [<Ethereum key=\"eth\" />, <Tron key=\"tron\" />, <Base key=\"base\" />];\n\n return {\n id: \"depositAddress\",\n title: locales.payToAddress,\n icons,\n onClick: () => {\n setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN);\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,17 @@ function useConnectors() {
|
|
|
4
4
|
const connectors = useConnectors$1();
|
|
5
5
|
return connectors ?? [];
|
|
6
6
|
}
|
|
7
|
+
function useConnector(id, uuid) {
|
|
8
|
+
const connectors = useConnectors();
|
|
9
|
+
if (id === "injected" && uuid) {
|
|
10
|
+
return connectors.find((c) => c.id === id && c.name === uuid);
|
|
11
|
+
} else if (id === "injected") {
|
|
12
|
+
return connectors.find(
|
|
13
|
+
(c) => c.id === id && c.name.includes("Injected")
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
return connectors.find((c) => c.id === id);
|
|
17
|
+
}
|
|
7
18
|
|
|
8
|
-
export { useConnectors };
|
|
19
|
+
export { useConnector, useConnectors };
|
|
9
20
|
//# sourceMappingURL=useConnectors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConnectors.js","sources":["../../../src/hooks/useConnectors.ts"],"sourcesContent":["import { type Connector, useConnectors as useWagmiConnectors } from \"wagmi\";\n\nexport function useConnectors() {\n const connectors = useWagmiConnectors();\n return connectors ?? [];\n}\n\nexport function useConnector(id: string, uuid?: string) {\n const connectors = useConnectors();\n if (id === \"injected\" && uuid) {\n return connectors.find((c) => c.id === id && c.name === uuid) as Connector;\n } else if (id === \"injected\") {\n return connectors.find(\n (c) => c.id === id && c.name.includes(\"Injected\"),\n ) as Connector;\n }\n return connectors.find((c) => c.id === id) as Connector;\n}\n"],"names":["useWagmiConnectors"],"mappings":";;AAEO,SAAS,aAAgB,GAAA;AAC9B,EAAA,MAAM,aAAaA,eAAmB,EAAA,CAAA;AACtC,EAAA,OAAO,cAAc,EAAC,CAAA;AACxB;;;;"}
|
|
1
|
+
{"version":3,"file":"useConnectors.js","sources":["../../../src/hooks/useConnectors.ts"],"sourcesContent":["import { type Connector, useConnectors as useWagmiConnectors } from \"wagmi\";\n\nexport function useConnectors() {\n const connectors = useWagmiConnectors();\n return connectors ?? [];\n}\n\nexport function useConnector(id: string, uuid?: string) {\n const connectors = useConnectors();\n if (id === \"injected\" && uuid) {\n return connectors.find((c) => c.id === id && c.name === uuid) as Connector;\n } else if (id === \"injected\") {\n return connectors.find(\n (c) => c.id === id && c.name.includes(\"Injected\"),\n ) as Connector;\n }\n return connectors.find((c) => c.id === id) as Connector;\n}\n"],"names":["useWagmiConnectors"],"mappings":";;AAEO,SAAS,aAAgB,GAAA;AAC9B,EAAA,MAAM,aAAaA,eAAmB,EAAA,CAAA;AACtC,EAAA,OAAO,cAAc,EAAC,CAAA;AACxB,CAAA;AAEgB,SAAA,YAAA,CAAa,IAAY,IAAe,EAAA;AACtD,EAAA,MAAM,aAAa,aAAc,EAAA,CAAA;AACjC,EAAI,IAAA,EAAA,KAAO,cAAc,IAAM,EAAA;AAC7B,IAAO,OAAA,UAAA,CAAW,KAAK,CAAC,CAAA,KAAM,EAAE,EAAO,KAAA,EAAA,IAAM,CAAE,CAAA,IAAA,KAAS,IAAI,CAAA,CAAA;AAAA,GAC9D,MAAA,IAAW,OAAO,UAAY,EAAA;AAC5B,IAAA,OAAO,UAAW,CAAA,IAAA;AAAA,MAChB,CAAC,MAAM,CAAE,CAAA,EAAA,KAAO,MAAM,CAAE,CAAA,IAAA,CAAK,SAAS,UAAU,CAAA;AAAA,KAClD,CAAA;AAAA,GACF;AACA,EAAA,OAAO,WAAW,IAAK,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,EAAE,CAAA,CAAA;AAC3C;;;;"}
|
|
@@ -143,7 +143,10 @@ function usePaymentState({
|
|
|
143
143
|
const paymentTxHash = await (async () => {
|
|
144
144
|
const dest = walletOption.passthroughAddress ?? hydratedOrder.intentAddr;
|
|
145
145
|
try {
|
|
146
|
-
if (isNativeToken(
|
|
146
|
+
if (isNativeToken(
|
|
147
|
+
required.token.chainId,
|
|
148
|
+
getAddress(required.token.token)
|
|
149
|
+
)) {
|
|
147
150
|
return await sendTransactionAsync({
|
|
148
151
|
to: dest,
|
|
149
152
|
value: paymentAmount
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePaymentState.js","sources":["../../../src/hooks/usePaymentState.ts"],"sourcesContent":["import {\n assert,\n assertNotNull,\n DaimoPayHydratedOrderWithOrg,\n debugJson,\n DepositAddressPaymentOptionData,\n DepositAddressPaymentOptionMetadata,\n DepositAddressPaymentOptions,\n ethereum,\n ExternalPaymentOptionMetadata,\n ExternalPaymentOptions,\n ExternalPaymentOptionsString,\n isNativeToken,\n PlatformType,\n readDaimoPayOrderID,\n SolanaPublicKey,\n WalletPaymentOption,\n writeDaimoPayOrderID,\n} from \"@daimo/pay-common\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { VersionedTransaction } from \"@solana/web3.js\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { erc20Abi, getAddress, Hex, hexToBytes, isHex } from \"viem\";\nimport {\n useAccount,\n useEnsName,\n useSendTransaction,\n useWriteContract,\n} from \"wagmi\";\n\nimport { PayButtonPaymentProps } from \"../components/DaimoPayButton\";\nimport { DEFAULT_USD_LIMIT } from \"../constants/limits\";\nimport {\n DEFAULT_TOP_OPTIONS_ORDER,\n inferTopLevelFromArray,\n TOP_LEVEL_PAYMENT_OPTIONS,\n} from \"../constants/paymentOptions\";\nimport { ROUTES } from \"../constants/routes\";\nimport { PayParams } from \"../payment/paymentFsm\";\nimport { detectPlatform } from \"../utils/platform\";\nimport { TrpcClient } from \"../utils/trpc\";\nimport { WalletConfigProps } from \"../wallets/walletConfigs\";\nimport { useDaimoPay } from \"./useDaimoPay\";\nimport { useDepositAddressOptions } from \"./useDepositAddressOptions\";\nimport { useExternalPaymentOptions } from \"./useExternalPaymentOptions\";\nimport useIsMobile from \"./useIsMobile\";\nimport { useOrderUsdLimits } from \"./useOrderUsdLimits\";\nimport { useSolanaPaymentOptions } from \"./useSolanaPaymentOptions\";\nimport { useUntronAvailability } from \"./useUntronAvailability\";\nimport { useWalletPaymentOptions } from \"./useWalletPaymentOptions\";\n\n/** Wallet payment details, sent to processSourcePayment after submitting tx. */\nexport type SourcePayment = Parameters<\n TrpcClient[\"processSourcePayment\"][\"mutate\"]\n>[0];\n\n/**\n * Extract the ordered list of top-level options from paymentOptions.\n * Returns an empty list if none are provided. Throws if top-level and\n * specific options are mixed.\n */\nfunction getTopLevelOptions(\n paymentOptions: (string | string[])[] | undefined,\n): ExternalPaymentOptionsString[] {\n if (!paymentOptions || paymentOptions.length === 0) return [];\n\n const topLevelOptions = TOP_LEVEL_PAYMENT_OPTIONS;\n const isString = (opt: unknown): opt is string => typeof opt === \"string\";\n\n const stringOptions = paymentOptions.filter(isString);\n const topLevel = stringOptions.filter((opt) =>\n topLevelOptions.includes(opt as ExternalPaymentOptionsString),\n );\n const specific = stringOptions.filter(\n (opt) => !topLevelOptions.includes(opt as ExternalPaymentOptionsString),\n );\n\n if (topLevel.length && specific.length) {\n throw new Error(\n `invalid paymentOptions: cannot mix top-level options ${JSON.stringify(topLevel)} with specific options ${JSON.stringify(specific)}. ` +\n `use either [\"AllWallets\", \"AllExchanges\", ...] or [\"MiniPay\", \"Binance\", ...], not both`,\n );\n }\n\n // Flatten nested arrays and infer a top-level entry when needed\n const flattened = paymentOptions.map((opt) =>\n Array.isArray(opt)\n ? (inferTopLevelFromArray(opt as string[]) ?? \"AllWallets\")\n : opt,\n );\n\n // Keep only top-level options, preserving order\n return flattened.filter((opt) =>\n topLevelOptions.includes(opt as ExternalPaymentOptionsString),\n ) as ExternalPaymentOptionsString[];\n}\n\n/** Creates (or loads) a payment and manages the corresponding modal. */\nexport interface PaymentState {\n generatePreviewOrder: () => void;\n resetOrder: (payParams?: Partial<PayParams>) => Promise<void>;\n\n /// DaimoPayButton props\n buttonProps: PayButtonPaymentProps | undefined;\n setButtonProps: (props: PayButtonPaymentProps | undefined) => void;\n /// Order of top-level payment options in SelectMethod\n topOptionsOrder: string[];\n\n /// Pay ID for loading an existing order\n setPayId: (id: string | undefined) => Promise<void>;\n /// Pay params for creating an order on the fly,\n setPayParams: (payParams: PayParams | undefined) => Promise<void>;\n\n /// True if the user is entering an amount (deposit) vs preset (checkout).\n isDepositFlow: boolean;\n paymentWaitingMessage: string | undefined;\n /// External payment options, loaded from server and filtered by EITHER\n /// 1. the DaimoPayButton paymentOptions, or 2. those of daimoPayOrder\n externalPaymentOptions: ReturnType<typeof useExternalPaymentOptions>;\n selectedWallet: WalletConfigProps | undefined;\n selectedWalletDeepLink: string | undefined;\n walletPaymentOptions: ReturnType<typeof useWalletPaymentOptions>;\n solanaPaymentOptions: ReturnType<typeof useSolanaPaymentOptions>;\n depositAddressOptions: ReturnType<typeof useDepositAddressOptions>;\n /** Whether Untron receivers are currently available. `null` when unknown. */\n untronAvailable: boolean | null;\n selectedExternalOption: ExternalPaymentOptionMetadata | undefined;\n selectedTokenOption: WalletPaymentOption | undefined;\n selectedSolanaTokenOption: WalletPaymentOption | undefined;\n selectedDepositAddressOption: DepositAddressPaymentOptionMetadata | undefined;\n getOrderUsdLimit: () => number;\n setPaymentWaitingMessage: (message: string | undefined) => void;\n tokenMode: \"evm\" | \"solana\" | \"all\";\n setTokenMode: (mode: \"evm\" | \"solana\" | \"all\") => void;\n setSelectedWallet: (wallet: WalletConfigProps | undefined) => void;\n setSelectedWalletDeepLink: (deepLink: string | undefined) => void;\n setSelectedExternalOption: (\n option: ExternalPaymentOptionMetadata | undefined,\n ) => void;\n setSelectedTokenOption: (option: WalletPaymentOption | undefined) => void;\n setSelectedSolanaTokenOption: (\n option: WalletPaymentOption | undefined,\n ) => void;\n setSelectedDepositAddressOption: (\n option: DepositAddressPaymentOptionMetadata | undefined,\n ) => void;\n setChosenUsd: (usd: number) => void;\n payWithToken: (\n walletOption: WalletPaymentOption,\n ) => Promise<{ txHash?: Hex; success: boolean }>;\n payWithExternal: (option: ExternalPaymentOptions) => Promise<string>;\n payWithDepositAddress: (\n option: DepositAddressPaymentOptions,\n ) => Promise<DepositAddressPaymentOptionData | null>;\n payWithSolanaToken: (\n inputToken: SolanaPublicKey,\n ) => Promise<{ txHash: string; success: boolean }>;\n openInWalletBrowser: (\n wallet: WalletConfigProps,\n amountUsd?: number,\n ) => Promise<void>;\n senderEnsName: string | undefined;\n}\n\nexport function usePaymentState({\n trpc,\n lockPayParams,\n setRoute,\n log,\n redirectReturnUrl,\n}: {\n trpc: TrpcClient;\n lockPayParams: boolean;\n setRoute: (route: ROUTES, data?: Record<string, any>) => void;\n log: (...args: any[]) => void;\n redirectReturnUrl?: string;\n}): PaymentState {\n const pay = useDaimoPay();\n\n // Browser state.\n const [platform, setPlatform] = useState<PlatformType>();\n useEffect(() => {\n setPlatform(detectPlatform(window.navigator.userAgent));\n }, []);\n\n // Wallet state.\n const { address: ethWalletAddress } = useAccount();\n const { data: senderEnsName } = useEnsName({\n chainId: ethereum.chainId,\n address: ethWalletAddress,\n });\n const { sendTransactionAsync } = useSendTransaction();\n const { writeContractAsync } = useWriteContract();\n\n // Solana wallet state.\n const solanaWallet = useWallet();\n const { connection } = useConnection();\n const solanaPubKey = solanaWallet.publicKey?.toBase58();\n\n // From DaimoPayButton props\n const [buttonProps, setButtonProps] = useState<PayButtonPaymentProps>();\n const [currPayParams, setCurrPayParams] = useState<PayParams>();\n\n const [paymentWaitingMessage, setPaymentWaitingMessage] = useState<string>();\n const [isDepositFlow, setIsDepositFlow] = useState<boolean>(false);\n\n // UI state. Selection for external payment (Binance, etc) vs wallet payment.\n const externalPaymentOptions = useExternalPaymentOptions({\n trpc,\n // allow <DaimoPayButton payId={...} paymentOptions={override} />\n filterIds:\n buttonProps?.paymentOptions ?? pay.order?.metadata.payer?.paymentOptions,\n platform,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n mode: pay.order?.mode,\n });\n const walletPaymentOptions = useWalletPaymentOptions({\n trpc,\n address: ethWalletAddress,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n destChainId: pay.order?.destFinalCallTokenAmount.token.chainId,\n destAddress: pay.order?.destFinalCall.to,\n preferredChains: pay.order?.metadata.payer?.preferredChains,\n preferredTokens: pay.order?.metadata.payer?.preferredTokens,\n evmChains: pay.order?.metadata.payer?.evmChains,\n passthroughTokens: pay.order?.metadata.payer?.passthroughTokens,\n isDepositFlow,\n log,\n });\n const solanaPaymentOptions = useSolanaPaymentOptions({\n trpc,\n address: solanaPubKey,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n isDepositFlow,\n });\n const depositAddressOptions = useDepositAddressOptions({\n trpc,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n mode: pay.order?.mode,\n });\n\n // Poll for Untron receiver availability so components can disable unsupported chains promptly.\n const { available: untronAvailable } = useUntronAvailability({ trpc });\n\n const chainOrderUsdLimits = useOrderUsdLimits({ trpc });\n\n const [selectedExternalOption, setSelectedExternalOption] =\n useState<ExternalPaymentOptionMetadata>();\n\n const [selectedTokenOption, setSelectedTokenOption] =\n useState<WalletPaymentOption>();\n\n const [selectedSolanaTokenOption, setSelectedSolanaTokenOption] =\n useState<WalletPaymentOption>();\n\n const [selectedDepositAddressOption, setSelectedDepositAddressOption] =\n useState<DepositAddressPaymentOptionMetadata>();\n\n const [selectedWallet, setSelectedWallet] = useState<WalletConfigProps>();\n const [selectedWalletDeepLink, setSelectedWalletDeepLink] =\n useState<string>();\n\n const getOrderUsdLimit = () => {\n if (pay.order == null || chainOrderUsdLimits.loading) {\n return DEFAULT_USD_LIMIT;\n }\n const destChainId = pay.order.destFinalCallTokenAmount.token.chainId;\n return destChainId in chainOrderUsdLimits.limits\n ? chainOrderUsdLimits.limits[destChainId]\n : DEFAULT_USD_LIMIT;\n };\n\n /** Commit to a token + amount = initiate payment. */\n const payWithToken = async (\n walletOption: WalletPaymentOption,\n ): Promise<{ txHash?: Hex; success: boolean }> => {\n assert(\n ethWalletAddress != null,\n `[PAY TOKEN] null ethWalletAddress when paying on ethereum`,\n );\n assert(\n pay.paymentState === \"preview\" ||\n pay.paymentState === \"unhydrated\" ||\n pay.paymentState === \"payment_unpaid\",\n `[PAY TOKEN] paymentState is ${pay.paymentState}, must be preview or unhydrated or payment_unpaid`,\n );\n\n let hydratedOrder: DaimoPayHydratedOrderWithOrg;\n const { required, fees } = walletOption;\n const paymentAmount = BigInt(required.amount) + BigInt(fees.amount);\n if (pay.paymentState !== \"payment_unpaid\") {\n assert(\n required.token.token === fees.token.token,\n `[PAY TOKEN] required token ${debugJson(required)} does not match fees token ${debugJson(fees)}`,\n );\n\n // Will refund to ethWalletAddress if refundAddress was not set in payParams\n const res = await pay.hydrateOrder(ethWalletAddress);\n hydratedOrder = res.order;\n\n log(\n `[PAY TOKEN] hydrated order: ${debugJson(\n hydratedOrder,\n )}, paying ${paymentAmount} of token ${required.token.token}`,\n );\n } else {\n hydratedOrder = pay.order;\n }\n\n const paymentTxHash = await (async () => {\n const dest = walletOption.passthroughAddress ?? hydratedOrder.intentAddr;\n try {\n if (isNativeToken(getAddress(required.token.token))) {\n return await sendTransactionAsync({\n to: dest,\n value: paymentAmount,\n });\n } else {\n return await writeContractAsync({\n abi: erc20Abi,\n address: getAddress(required.token.token),\n functionName: \"transfer\",\n args: [dest, paymentAmount],\n });\n }\n } catch (e) {\n console.error(`[PAY TOKEN] error sending token: ${e}`);\n throw e;\n }\n })();\n\n // Special case. Handle Rabby bug, where it returns the *Safe signature*\n // instead of a txHash for a queued, unsubmitted Safe transaction.\n if (!isHex(paymentTxHash) || paymentTxHash.length !== 66) {\n log(\n `[PAY TOKEN] wallet bug detected. ignoring invalid payment txHash: ${paymentTxHash}`,\n );\n return { success: true };\n }\n\n try {\n await pay.payEthSource({\n paymentTxHash,\n sourceChainId: required.token.chainId,\n payerAddress: ethWalletAddress,\n sourceToken: getAddress(required.token.token),\n sourceAmount: paymentAmount,\n });\n return { txHash: paymentTxHash, success: true };\n } catch {\n console.error(\n `[PAY TOKEN] could not verify payment tx on chain: ${paymentTxHash}`,\n );\n return { txHash: paymentTxHash, success: false };\n }\n };\n\n const payWithSolanaToken = async (\n inputToken: SolanaPublicKey,\n ): Promise<{ txHash: string; success: boolean }> => {\n const payerPublicKey = solanaWallet.publicKey;\n assert(\n payerPublicKey != null,\n \"[PAY SOLANA] null payerPublicKey when paying on solana\",\n );\n assert(\n pay.order?.id != null,\n \"[PAY SOLANA] null orderId when paying on solana\",\n );\n assert(\n pay.paymentState === \"preview\" ||\n pay.paymentState === \"unhydrated\" ||\n pay.paymentState === \"payment_unpaid\",\n `[PAY SOLANA] paymentState is ${pay.paymentState}, must be preview or unhydrated or payment_unpaid`,\n );\n\n let hydratedOrder: DaimoPayHydratedOrderWithOrg;\n if (pay.paymentState !== \"payment_unpaid\") {\n const res = await pay.hydrateOrder();\n hydratedOrder = res.order;\n\n log(\n `[PAY SOLANA] Hydrated order: ${JSON.stringify(\n hydratedOrder,\n )}, checking out with Solana ${inputToken}`,\n );\n } else {\n hydratedOrder = pay.order;\n }\n\n const paymentTxHash = await (async () => {\n try {\n const serializedTx = await trpc.getSolanaSwapAndBurnTx.query({\n orderId: pay.order.id.toString(),\n userPublicKey: assertNotNull(\n payerPublicKey,\n \"[PAY SOLANA] wallet.publicKey cannot be null\",\n ).toString(),\n inputTokenMint: inputToken,\n });\n const tx = VersionedTransaction.deserialize(hexToBytes(serializedTx));\n const txHash = await solanaWallet.sendTransaction(tx, connection);\n return txHash;\n } catch (e) {\n console.error(e);\n throw e;\n }\n })();\n\n try {\n await pay.paySolanaSource({\n paymentTxHash: paymentTxHash,\n sourceToken: inputToken,\n });\n return { txHash: paymentTxHash, success: true };\n } catch {\n console.error(\n `[PAY SOLANA] could not verify payment tx on chain: ${paymentTxHash}`,\n );\n return { txHash: paymentTxHash, success: false };\n }\n };\n\n const payWithExternal = async (option: ExternalPaymentOptions) => {\n assert(pay.order != null, \"[PAY EXTERNAL] order cannot be null\");\n assert(platform != null, \"[PAY EXTERNAL] platform cannot be null\");\n\n const { order } = await pay.hydrateOrder();\n const externalPaymentOptionData =\n await trpc.getExternalPaymentOptionData.query({\n id: order.id.toString(),\n externalPaymentOption: option,\n platform,\n redirectReturnUrl,\n });\n assert(\n externalPaymentOptionData != null,\n \"[PAY EXTERNAL] missing externalPaymentOptionData\",\n );\n\n log(\n `[PAY EXTERNAL] hydrated order: ${debugJson(\n order,\n )}, checking out with external payment: ${option}`,\n );\n\n setPaymentWaitingMessage(externalPaymentOptionData.waitingMessage);\n\n return externalPaymentOptionData.url;\n };\n\n const payWithDepositAddress = async (\n option: DepositAddressPaymentOptions,\n ) => {\n const { order } = await pay.hydrateOrder();\n\n log(\n `[PAY DEPOSIT ADDRESS] hydrated order ${order.id} for ${order.usdValue} USD, checking out with deposit address: ${option}`,\n );\n\n const result = await trpc.getDepositAddressForOrder.query({\n orderId: order.id.toString(),\n option,\n });\n\n return \"error\" in result ? null : result;\n };\n\n const { isIOS, isAndroid } = useIsMobile();\n\n const openInWalletBrowser = async (\n wallet: WalletConfigProps,\n amountUsd?: number,\n ) => {\n const paymentState = pay.paymentState;\n assert(\n paymentState === \"preview\" ||\n paymentState === \"unhydrated\" ||\n paymentState === \"payment_unpaid\",\n `[OPEN IN WALLET BROWSER] paymentState is ${paymentState}, must be preview or unhydrated or payment_unpaid`,\n );\n assert(\n wallet.getDaimoPayDeeplink != null,\n `openInWalletBrowser: missing deeplink for ${wallet.name}`,\n );\n\n // hydrate order if not already hydrated\n if (pay.paymentState !== \"payment_unpaid\") {\n await pay.hydrateOrder();\n }\n\n const payId = writeDaimoPayOrderID(pay.order.id);\n const platform = isIOS ? \"ios\" : isAndroid ? \"android\" : \"other\";\n const deeplink = wallet.getDaimoPayDeeplink(payId, platform);\n // If we are in IOS, we don't open the deeplink in a new window, because it\n // will not work, the link will be opened in the page WAITING_WALLET\n if (!isIOS) {\n window.open(deeplink, \"_blank\");\n }\n setSelectedWallet(wallet);\n setSelectedWalletDeepLink(deeplink);\n setRoute(ROUTES.WAITING_WALLET, {\n amountUsd,\n payId,\n wallet_name: wallet.name,\n });\n };\n\n /** User picked a different deposit amount. */\n const setChosenUsd = (usd: number) => {\n assert(\n pay.paymentState === \"preview\",\n \"[SET CHOSEN USD] paymentState is not preview\",\n );\n\n // Too expensive to make an API call to regenerate preview order each time\n // the user changes the amount. Instead, we modify the order in memory.\n pay.setChosenUsd(usd);\n };\n\n const setPayId = useCallback(\n async (payId: string | undefined) => {\n if (payId == null) return;\n const id = readDaimoPayOrderID(payId).toString();\n\n if (pay.order?.id && BigInt(id) == pay.order.id) {\n // Already loaded, ignore.\n return;\n }\n\n pay.reset();\n await pay.setPayId(payId);\n setIsDepositFlow(false);\n },\n [pay],\n );\n\n /** Called whenever params change. */\n const setPayParams = async (payParams: PayParams | undefined) => {\n if (lockPayParams) return;\n assert(payParams != null, \"[SET PAY PARAMS] payParams cannot be null\");\n\n log(\"[SET PAY PARAMS] setting payParams\", payParams);\n pay.reset();\n setCurrPayParams(payParams);\n setIsDepositFlow(payParams.toUnits == null);\n await pay.createPreviewOrder(payParams);\n };\n\n const generatePreviewOrder = async () => {\n pay.reset();\n if (currPayParams == null) return;\n await pay.createPreviewOrder(currPayParams);\n };\n\n const resetOrder = useCallback(\n async (payParams?: Partial<PayParams>) => {\n const mergedPayParams: PayParams | undefined =\n payParams != null && currPayParams != null\n ? { ...currPayParams, ...payParams }\n : currPayParams;\n\n // Clear the old order & state\n pay.reset();\n setSelectedExternalOption(undefined);\n setSelectedTokenOption(undefined);\n setSelectedSolanaTokenOption(undefined);\n setSelectedDepositAddressOption(undefined);\n setSelectedWallet(undefined);\n setSelectedWalletDeepLink(undefined);\n setPaymentWaitingMessage(undefined);\n\n // Set the new payParams\n if (mergedPayParams) {\n setCurrPayParams(mergedPayParams);\n setIsDepositFlow(mergedPayParams.toUnits == null);\n await pay.createPreviewOrder(mergedPayParams);\n }\n\n setRoute(ROUTES.SELECT_METHOD);\n },\n [setRoute, pay, currPayParams],\n );\n\n const [tokenMode, setTokenMode] = useState<\"evm\" | \"solana\" | \"all\">(\"evm\");\n\n // Compute the order of top-level payment options from paymentOptions\n const topOptionsOrder = (() => {\n const defaultOrder = DEFAULT_TOP_OPTIONS_ORDER;\n const paymentOptions =\n buttonProps?.paymentOptions ?? pay.order?.metadata.payer?.paymentOptions;\n const found = getTopLevelOptions(paymentOptions);\n return found.length ? found : defaultOrder;\n })();\n\n return {\n buttonProps,\n setButtonProps,\n topOptionsOrder,\n setPayId,\n setPayParams,\n tokenMode,\n setTokenMode,\n generatePreviewOrder,\n isDepositFlow,\n paymentWaitingMessage,\n selectedExternalOption,\n selectedTokenOption,\n selectedSolanaTokenOption,\n externalPaymentOptions,\n selectedWallet,\n selectedWalletDeepLink,\n walletPaymentOptions,\n solanaPaymentOptions,\n depositAddressOptions,\n selectedDepositAddressOption,\n getOrderUsdLimit,\n resetOrder,\n setSelectedWallet,\n setSelectedWalletDeepLink,\n setPaymentWaitingMessage,\n setSelectedExternalOption,\n setSelectedTokenOption,\n setSelectedSolanaTokenOption,\n setSelectedDepositAddressOption,\n setChosenUsd,\n payWithToken,\n payWithExternal,\n payWithDepositAddress,\n payWithSolanaToken,\n openInWalletBrowser,\n senderEnsName: senderEnsName ?? undefined,\n untronAvailable,\n };\n}\n"],"names":["platform"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"usePaymentState.js","sources":["../../../src/hooks/usePaymentState.ts"],"sourcesContent":["import {\n assert,\n assertNotNull,\n DaimoPayHydratedOrderWithOrg,\n debugJson,\n DepositAddressPaymentOptionData,\n DepositAddressPaymentOptionMetadata,\n DepositAddressPaymentOptions,\n ethereum,\n ExternalPaymentOptionMetadata,\n ExternalPaymentOptions,\n ExternalPaymentOptionsString,\n isNativeToken,\n PlatformType,\n readDaimoPayOrderID,\n SolanaPublicKey,\n WalletPaymentOption,\n writeDaimoPayOrderID,\n} from \"@daimo/pay-common\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { VersionedTransaction } from \"@solana/web3.js\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { erc20Abi, getAddress, Hex, hexToBytes, isHex } from \"viem\";\nimport {\n useAccount,\n useEnsName,\n useSendTransaction,\n useWriteContract,\n} from \"wagmi\";\n\nimport { PayButtonPaymentProps } from \"../components/DaimoPayButton\";\nimport { DEFAULT_USD_LIMIT } from \"../constants/limits\";\nimport {\n DEFAULT_TOP_OPTIONS_ORDER,\n inferTopLevelFromArray,\n TOP_LEVEL_PAYMENT_OPTIONS,\n} from \"../constants/paymentOptions\";\nimport { ROUTES } from \"../constants/routes\";\nimport { PayParams } from \"../payment/paymentFsm\";\nimport { detectPlatform } from \"../utils/platform\";\nimport { TrpcClient } from \"../utils/trpc\";\nimport { WalletConfigProps } from \"../wallets/walletConfigs\";\nimport { useDaimoPay } from \"./useDaimoPay\";\nimport { useDepositAddressOptions } from \"./useDepositAddressOptions\";\nimport { useExternalPaymentOptions } from \"./useExternalPaymentOptions\";\nimport useIsMobile from \"./useIsMobile\";\nimport { useOrderUsdLimits } from \"./useOrderUsdLimits\";\nimport { useSolanaPaymentOptions } from \"./useSolanaPaymentOptions\";\nimport { useUntronAvailability } from \"./useUntronAvailability\";\nimport { useWalletPaymentOptions } from \"./useWalletPaymentOptions\";\n\n/** Wallet payment details, sent to processSourcePayment after submitting tx. */\nexport type SourcePayment = Parameters<\n TrpcClient[\"processSourcePayment\"][\"mutate\"]\n>[0];\n\n/**\n * Extract the ordered list of top-level options from paymentOptions.\n * Returns an empty list if none are provided. Throws if top-level and\n * specific options are mixed.\n */\nfunction getTopLevelOptions(\n paymentOptions: (string | string[])[] | undefined,\n): ExternalPaymentOptionsString[] {\n if (!paymentOptions || paymentOptions.length === 0) return [];\n\n const topLevelOptions = TOP_LEVEL_PAYMENT_OPTIONS;\n const isString = (opt: unknown): opt is string => typeof opt === \"string\";\n\n const stringOptions = paymentOptions.filter(isString);\n const topLevel = stringOptions.filter((opt) =>\n topLevelOptions.includes(opt as ExternalPaymentOptionsString),\n );\n const specific = stringOptions.filter(\n (opt) => !topLevelOptions.includes(opt as ExternalPaymentOptionsString),\n );\n\n if (topLevel.length && specific.length) {\n throw new Error(\n `invalid paymentOptions: cannot mix top-level options ${JSON.stringify(topLevel)} with specific options ${JSON.stringify(specific)}. ` +\n `use either [\"AllWallets\", \"AllExchanges\", ...] or [\"MiniPay\", \"Binance\", ...], not both`,\n );\n }\n\n // Flatten nested arrays and infer a top-level entry when needed\n const flattened = paymentOptions.map((opt) =>\n Array.isArray(opt)\n ? (inferTopLevelFromArray(opt as string[]) ?? \"AllWallets\")\n : opt,\n );\n\n // Keep only top-level options, preserving order\n return flattened.filter((opt) =>\n topLevelOptions.includes(opt as ExternalPaymentOptionsString),\n ) as ExternalPaymentOptionsString[];\n}\n\n/** Creates (or loads) a payment and manages the corresponding modal. */\nexport interface PaymentState {\n generatePreviewOrder: () => void;\n resetOrder: (payParams?: Partial<PayParams>) => Promise<void>;\n\n /// DaimoPayButton props\n buttonProps: PayButtonPaymentProps | undefined;\n setButtonProps: (props: PayButtonPaymentProps | undefined) => void;\n /// Order of top-level payment options in SelectMethod\n topOptionsOrder: string[];\n\n /// Pay ID for loading an existing order\n setPayId: (id: string | undefined) => Promise<void>;\n /// Pay params for creating an order on the fly,\n setPayParams: (payParams: PayParams | undefined) => Promise<void>;\n\n /// True if the user is entering an amount (deposit) vs preset (checkout).\n isDepositFlow: boolean;\n paymentWaitingMessage: string | undefined;\n /// External payment options, loaded from server and filtered by EITHER\n /// 1. the DaimoPayButton paymentOptions, or 2. those of daimoPayOrder\n externalPaymentOptions: ReturnType<typeof useExternalPaymentOptions>;\n selectedWallet: WalletConfigProps | undefined;\n selectedWalletDeepLink: string | undefined;\n walletPaymentOptions: ReturnType<typeof useWalletPaymentOptions>;\n solanaPaymentOptions: ReturnType<typeof useSolanaPaymentOptions>;\n depositAddressOptions: ReturnType<typeof useDepositAddressOptions>;\n /** Whether Untron receivers are currently available. `null` when unknown. */\n untronAvailable: boolean | null;\n selectedExternalOption: ExternalPaymentOptionMetadata | undefined;\n selectedTokenOption: WalletPaymentOption | undefined;\n selectedSolanaTokenOption: WalletPaymentOption | undefined;\n selectedDepositAddressOption: DepositAddressPaymentOptionMetadata | undefined;\n getOrderUsdLimit: () => number;\n setPaymentWaitingMessage: (message: string | undefined) => void;\n tokenMode: \"evm\" | \"solana\" | \"all\";\n setTokenMode: (mode: \"evm\" | \"solana\" | \"all\") => void;\n setSelectedWallet: (wallet: WalletConfigProps | undefined) => void;\n setSelectedWalletDeepLink: (deepLink: string | undefined) => void;\n setSelectedExternalOption: (\n option: ExternalPaymentOptionMetadata | undefined,\n ) => void;\n setSelectedTokenOption: (option: WalletPaymentOption | undefined) => void;\n setSelectedSolanaTokenOption: (\n option: WalletPaymentOption | undefined,\n ) => void;\n setSelectedDepositAddressOption: (\n option: DepositAddressPaymentOptionMetadata | undefined,\n ) => void;\n setChosenUsd: (usd: number) => void;\n payWithToken: (\n walletOption: WalletPaymentOption,\n ) => Promise<{ txHash?: Hex; success: boolean }>;\n payWithExternal: (option: ExternalPaymentOptions) => Promise<string>;\n payWithDepositAddress: (\n option: DepositAddressPaymentOptions,\n ) => Promise<DepositAddressPaymentOptionData | null>;\n payWithSolanaToken: (\n inputToken: SolanaPublicKey,\n ) => Promise<{ txHash: string; success: boolean }>;\n openInWalletBrowser: (\n wallet: WalletConfigProps,\n amountUsd?: number,\n ) => Promise<void>;\n senderEnsName: string | undefined;\n}\n\nexport function usePaymentState({\n trpc,\n lockPayParams,\n setRoute,\n log,\n redirectReturnUrl,\n}: {\n trpc: TrpcClient;\n lockPayParams: boolean;\n setRoute: (route: ROUTES, data?: Record<string, any>) => void;\n log: (...args: any[]) => void;\n redirectReturnUrl?: string;\n}): PaymentState {\n const pay = useDaimoPay();\n\n // Browser state.\n const [platform, setPlatform] = useState<PlatformType>();\n useEffect(() => {\n setPlatform(detectPlatform(window.navigator.userAgent));\n }, []);\n\n // Wallet state.\n const { address: ethWalletAddress } = useAccount();\n const { data: senderEnsName } = useEnsName({\n chainId: ethereum.chainId,\n address: ethWalletAddress,\n });\n const { sendTransactionAsync } = useSendTransaction();\n const { writeContractAsync } = useWriteContract();\n\n // Solana wallet state.\n const solanaWallet = useWallet();\n const { connection } = useConnection();\n const solanaPubKey = solanaWallet.publicKey?.toBase58();\n\n // From DaimoPayButton props\n const [buttonProps, setButtonProps] = useState<PayButtonPaymentProps>();\n const [currPayParams, setCurrPayParams] = useState<PayParams>();\n\n const [paymentWaitingMessage, setPaymentWaitingMessage] = useState<string>();\n const [isDepositFlow, setIsDepositFlow] = useState<boolean>(false);\n\n // UI state. Selection for external payment (Binance, etc) vs wallet payment.\n const externalPaymentOptions = useExternalPaymentOptions({\n trpc,\n // allow <DaimoPayButton payId={...} paymentOptions={override} />\n filterIds:\n buttonProps?.paymentOptions ?? pay.order?.metadata.payer?.paymentOptions,\n platform,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n mode: pay.order?.mode,\n });\n const walletPaymentOptions = useWalletPaymentOptions({\n trpc,\n address: ethWalletAddress,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n destChainId: pay.order?.destFinalCallTokenAmount.token.chainId,\n destAddress: pay.order?.destFinalCall.to,\n preferredChains: pay.order?.metadata.payer?.preferredChains,\n preferredTokens: pay.order?.metadata.payer?.preferredTokens,\n evmChains: pay.order?.metadata.payer?.evmChains,\n passthroughTokens: pay.order?.metadata.payer?.passthroughTokens,\n isDepositFlow,\n log,\n });\n const solanaPaymentOptions = useSolanaPaymentOptions({\n trpc,\n address: solanaPubKey,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n isDepositFlow,\n });\n const depositAddressOptions = useDepositAddressOptions({\n trpc,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n mode: pay.order?.mode,\n });\n\n // Poll for Untron receiver availability so components can disable unsupported chains promptly.\n const { available: untronAvailable } = useUntronAvailability({ trpc });\n\n const chainOrderUsdLimits = useOrderUsdLimits({ trpc });\n\n const [selectedExternalOption, setSelectedExternalOption] =\n useState<ExternalPaymentOptionMetadata>();\n\n const [selectedTokenOption, setSelectedTokenOption] =\n useState<WalletPaymentOption>();\n\n const [selectedSolanaTokenOption, setSelectedSolanaTokenOption] =\n useState<WalletPaymentOption>();\n\n const [selectedDepositAddressOption, setSelectedDepositAddressOption] =\n useState<DepositAddressPaymentOptionMetadata>();\n\n const [selectedWallet, setSelectedWallet] = useState<WalletConfigProps>();\n const [selectedWalletDeepLink, setSelectedWalletDeepLink] =\n useState<string>();\n\n const getOrderUsdLimit = () => {\n if (pay.order == null || chainOrderUsdLimits.loading) {\n return DEFAULT_USD_LIMIT;\n }\n const destChainId = pay.order.destFinalCallTokenAmount.token.chainId;\n return destChainId in chainOrderUsdLimits.limits\n ? chainOrderUsdLimits.limits[destChainId]\n : DEFAULT_USD_LIMIT;\n };\n\n /** Commit to a token + amount = initiate payment. */\n const payWithToken = async (\n walletOption: WalletPaymentOption,\n ): Promise<{ txHash?: Hex; success: boolean }> => {\n assert(\n ethWalletAddress != null,\n `[PAY TOKEN] null ethWalletAddress when paying on ethereum`,\n );\n assert(\n pay.paymentState === \"preview\" ||\n pay.paymentState === \"unhydrated\" ||\n pay.paymentState === \"payment_unpaid\",\n `[PAY TOKEN] paymentState is ${pay.paymentState}, must be preview or unhydrated or payment_unpaid`,\n );\n\n let hydratedOrder: DaimoPayHydratedOrderWithOrg;\n const { required, fees } = walletOption;\n const paymentAmount = BigInt(required.amount) + BigInt(fees.amount);\n if (pay.paymentState !== \"payment_unpaid\") {\n assert(\n required.token.token === fees.token.token,\n `[PAY TOKEN] required token ${debugJson(required)} does not match fees token ${debugJson(fees)}`,\n );\n\n // Will refund to ethWalletAddress if refundAddress was not set in payParams\n const res = await pay.hydrateOrder(ethWalletAddress);\n hydratedOrder = res.order;\n\n log(\n `[PAY TOKEN] hydrated order: ${debugJson(\n hydratedOrder,\n )}, paying ${paymentAmount} of token ${required.token.token}`,\n );\n } else {\n hydratedOrder = pay.order;\n }\n\n const paymentTxHash = await (async () => {\n const dest = walletOption.passthroughAddress ?? hydratedOrder.intentAddr;\n try {\n if (\n isNativeToken(\n required.token.chainId,\n getAddress(required.token.token),\n )\n ) {\n return await sendTransactionAsync({\n to: dest,\n value: paymentAmount,\n });\n } else {\n return await writeContractAsync({\n abi: erc20Abi,\n address: getAddress(required.token.token),\n functionName: \"transfer\",\n args: [dest, paymentAmount],\n });\n }\n } catch (e) {\n console.error(`[PAY TOKEN] error sending token: ${e}`);\n throw e;\n }\n })();\n\n // Special case. Handle Rabby bug, where it returns the *Safe signature*\n // instead of a txHash for a queued, unsubmitted Safe transaction.\n if (!isHex(paymentTxHash) || paymentTxHash.length !== 66) {\n log(\n `[PAY TOKEN] wallet bug detected. ignoring invalid payment txHash: ${paymentTxHash}`,\n );\n return { success: true };\n }\n\n try {\n await pay.payEthSource({\n paymentTxHash,\n sourceChainId: required.token.chainId,\n payerAddress: ethWalletAddress,\n sourceToken: getAddress(required.token.token),\n sourceAmount: paymentAmount,\n });\n return { txHash: paymentTxHash, success: true };\n } catch {\n console.error(\n `[PAY TOKEN] could not verify payment tx on chain: ${paymentTxHash}`,\n );\n return { txHash: paymentTxHash, success: false };\n }\n };\n\n const payWithSolanaToken = async (\n inputToken: SolanaPublicKey,\n ): Promise<{ txHash: string; success: boolean }> => {\n const payerPublicKey = solanaWallet.publicKey;\n assert(\n payerPublicKey != null,\n \"[PAY SOLANA] null payerPublicKey when paying on solana\",\n );\n assert(\n pay.order?.id != null,\n \"[PAY SOLANA] null orderId when paying on solana\",\n );\n assert(\n pay.paymentState === \"preview\" ||\n pay.paymentState === \"unhydrated\" ||\n pay.paymentState === \"payment_unpaid\",\n `[PAY SOLANA] paymentState is ${pay.paymentState}, must be preview or unhydrated or payment_unpaid`,\n );\n\n let hydratedOrder: DaimoPayHydratedOrderWithOrg;\n if (pay.paymentState !== \"payment_unpaid\") {\n const res = await pay.hydrateOrder();\n hydratedOrder = res.order;\n\n log(\n `[PAY SOLANA] Hydrated order: ${JSON.stringify(\n hydratedOrder,\n )}, checking out with Solana ${inputToken}`,\n );\n } else {\n hydratedOrder = pay.order;\n }\n\n const paymentTxHash = await (async () => {\n try {\n const serializedTx = await trpc.getSolanaSwapAndBurnTx.query({\n orderId: pay.order.id.toString(),\n userPublicKey: assertNotNull(\n payerPublicKey,\n \"[PAY SOLANA] wallet.publicKey cannot be null\",\n ).toString(),\n inputTokenMint: inputToken,\n });\n const tx = VersionedTransaction.deserialize(hexToBytes(serializedTx));\n const txHash = await solanaWallet.sendTransaction(tx, connection);\n return txHash;\n } catch (e) {\n console.error(e);\n throw e;\n }\n })();\n\n try {\n await pay.paySolanaSource({\n paymentTxHash: paymentTxHash,\n sourceToken: inputToken,\n });\n return { txHash: paymentTxHash, success: true };\n } catch {\n console.error(\n `[PAY SOLANA] could not verify payment tx on chain: ${paymentTxHash}`,\n );\n return { txHash: paymentTxHash, success: false };\n }\n };\n\n const payWithExternal = async (option: ExternalPaymentOptions) => {\n assert(pay.order != null, \"[PAY EXTERNAL] order cannot be null\");\n assert(platform != null, \"[PAY EXTERNAL] platform cannot be null\");\n\n const { order } = await pay.hydrateOrder();\n const externalPaymentOptionData =\n await trpc.getExternalPaymentOptionData.query({\n id: order.id.toString(),\n externalPaymentOption: option,\n platform,\n redirectReturnUrl,\n });\n assert(\n externalPaymentOptionData != null,\n \"[PAY EXTERNAL] missing externalPaymentOptionData\",\n );\n\n log(\n `[PAY EXTERNAL] hydrated order: ${debugJson(\n order,\n )}, checking out with external payment: ${option}`,\n );\n\n setPaymentWaitingMessage(externalPaymentOptionData.waitingMessage);\n\n return externalPaymentOptionData.url;\n };\n\n const payWithDepositAddress = async (\n option: DepositAddressPaymentOptions,\n ) => {\n const { order } = await pay.hydrateOrder();\n\n log(\n `[PAY DEPOSIT ADDRESS] hydrated order ${order.id} for ${order.usdValue} USD, checking out with deposit address: ${option}`,\n );\n\n const result = await trpc.getDepositAddressForOrder.query({\n orderId: order.id.toString(),\n option,\n });\n\n return \"error\" in result ? null : result;\n };\n\n const { isIOS, isAndroid } = useIsMobile();\n\n const openInWalletBrowser = async (\n wallet: WalletConfigProps,\n amountUsd?: number,\n ) => {\n const paymentState = pay.paymentState;\n assert(\n paymentState === \"preview\" ||\n paymentState === \"unhydrated\" ||\n paymentState === \"payment_unpaid\",\n `[OPEN IN WALLET BROWSER] paymentState is ${paymentState}, must be preview or unhydrated or payment_unpaid`,\n );\n assert(\n wallet.getDaimoPayDeeplink != null,\n `openInWalletBrowser: missing deeplink for ${wallet.name}`,\n );\n\n // hydrate order if not already hydrated\n if (pay.paymentState !== \"payment_unpaid\") {\n await pay.hydrateOrder();\n }\n\n const payId = writeDaimoPayOrderID(pay.order.id);\n const platform = isIOS ? \"ios\" : isAndroid ? \"android\" : \"other\";\n const deeplink = wallet.getDaimoPayDeeplink(payId, platform);\n // If we are in IOS, we don't open the deeplink in a new window, because it\n // will not work, the link will be opened in the page WAITING_WALLET\n if (!isIOS) {\n window.open(deeplink, \"_blank\");\n }\n setSelectedWallet(wallet);\n setSelectedWalletDeepLink(deeplink);\n setRoute(ROUTES.WAITING_WALLET, {\n amountUsd,\n payId,\n wallet_name: wallet.name,\n });\n };\n\n /** User picked a different deposit amount. */\n const setChosenUsd = (usd: number) => {\n assert(\n pay.paymentState === \"preview\",\n \"[SET CHOSEN USD] paymentState is not preview\",\n );\n\n // Too expensive to make an API call to regenerate preview order each time\n // the user changes the amount. Instead, we modify the order in memory.\n pay.setChosenUsd(usd);\n };\n\n const setPayId = useCallback(\n async (payId: string | undefined) => {\n if (payId == null) return;\n const id = readDaimoPayOrderID(payId).toString();\n\n if (pay.order?.id && BigInt(id) == pay.order.id) {\n // Already loaded, ignore.\n return;\n }\n\n pay.reset();\n await pay.setPayId(payId);\n setIsDepositFlow(false);\n },\n [pay],\n );\n\n /** Called whenever params change. */\n const setPayParams = async (payParams: PayParams | undefined) => {\n if (lockPayParams) return;\n assert(payParams != null, \"[SET PAY PARAMS] payParams cannot be null\");\n\n log(\"[SET PAY PARAMS] setting payParams\", payParams);\n pay.reset();\n setCurrPayParams(payParams);\n setIsDepositFlow(payParams.toUnits == null);\n await pay.createPreviewOrder(payParams);\n };\n\n const generatePreviewOrder = async () => {\n pay.reset();\n if (currPayParams == null) return;\n await pay.createPreviewOrder(currPayParams);\n };\n\n const resetOrder = useCallback(\n async (payParams?: Partial<PayParams>) => {\n const mergedPayParams: PayParams | undefined =\n payParams != null && currPayParams != null\n ? { ...currPayParams, ...payParams }\n : currPayParams;\n\n // Clear the old order & state\n pay.reset();\n setSelectedExternalOption(undefined);\n setSelectedTokenOption(undefined);\n setSelectedSolanaTokenOption(undefined);\n setSelectedDepositAddressOption(undefined);\n setSelectedWallet(undefined);\n setSelectedWalletDeepLink(undefined);\n setPaymentWaitingMessage(undefined);\n\n // Set the new payParams\n if (mergedPayParams) {\n setCurrPayParams(mergedPayParams);\n setIsDepositFlow(mergedPayParams.toUnits == null);\n await pay.createPreviewOrder(mergedPayParams);\n }\n\n setRoute(ROUTES.SELECT_METHOD);\n },\n [setRoute, pay, currPayParams],\n );\n\n const [tokenMode, setTokenMode] = useState<\"evm\" | \"solana\" | \"all\">(\"evm\");\n\n // Compute the order of top-level payment options from paymentOptions\n const topOptionsOrder = (() => {\n const defaultOrder = DEFAULT_TOP_OPTIONS_ORDER;\n const paymentOptions =\n buttonProps?.paymentOptions ?? pay.order?.metadata.payer?.paymentOptions;\n const found = getTopLevelOptions(paymentOptions);\n return found.length ? found : defaultOrder;\n })();\n\n return {\n buttonProps,\n setButtonProps,\n topOptionsOrder,\n setPayId,\n setPayParams,\n tokenMode,\n setTokenMode,\n generatePreviewOrder,\n isDepositFlow,\n paymentWaitingMessage,\n selectedExternalOption,\n selectedTokenOption,\n selectedSolanaTokenOption,\n externalPaymentOptions,\n selectedWallet,\n selectedWalletDeepLink,\n walletPaymentOptions,\n solanaPaymentOptions,\n depositAddressOptions,\n selectedDepositAddressOption,\n getOrderUsdLimit,\n resetOrder,\n setSelectedWallet,\n setSelectedWalletDeepLink,\n setPaymentWaitingMessage,\n setSelectedExternalOption,\n setSelectedTokenOption,\n setSelectedSolanaTokenOption,\n setSelectedDepositAddressOption,\n setChosenUsd,\n payWithToken,\n payWithExternal,\n payWithDepositAddress,\n payWithSolanaToken,\n openInWalletBrowser,\n senderEnsName: senderEnsName ?? undefined,\n untronAvailable,\n };\n}\n"],"names":["platform"],"mappings":"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"}
|
|
@@ -57,6 +57,7 @@ const useWallets = (isMobile) => {
|
|
|
57
57
|
if (isBaseAccountConnector(connector.id)) return;
|
|
58
58
|
if (isGeminiConnector(connector.id)) return;
|
|
59
59
|
if (!isInjectedConnector(connector.type)) return;
|
|
60
|
+
if (mobileWallets.some((w) => w.id === connector.id)) return;
|
|
60
61
|
if (connector.name?.toLowerCase().includes("walletconnect")) return;
|
|
61
62
|
mobileWallets.push({
|
|
62
63
|
id: connector.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWallets.js","sources":["../../../src/wallets/useWallets.tsx"],"sourcesContent":["import { assertNotNull } from \"@daimo/pay-common\";\nimport { Connector } from \"wagmi\";\n\nimport { useWallet as useSolanaWalletAdapter } from \"@solana/wallet-adapter-react\";\nimport Logos, {\n createOtherWalletsIcon,\n SquircleIcon,\n WalletIcon,\n} from \"../assets/logos\";\nimport MobileWithLogos from \"../assets/MobileWithLogos\";\nimport {\n MOBILE_WALLETS_THRESHOLD_FOR_OTHER,\n RABBY_CONNECTOR_ID,\n WALLET_ID_MOBILE_WALLETS,\n WALLET_ID_OTHER_WALLET,\n} from \"../constants/wallets\";\nimport { useConnectors } from \"../hooks/useConnectors\";\nimport useLocales from \"../hooks/useLocales\";\nimport { usePayContext } from \"../hooks/usePayContext\";\nimport { SolanaWalletName } from \"../provider/SolanaContextProvider\";\nimport {\n flattenChildren,\n isBaseAccountConnector,\n isGeminiConnector,\n isInjectedConnector,\n} from \"../utils\";\nimport { WalletConfigProps, walletConfigs } from \"./walletConfigs\";\n\n// ids moved to ../constants/wallets\n\nexport type WalletProps = {\n id: string;\n connector?: Connector | null;\n isInstalled?: boolean;\n /** Name of the matching Solana wallet adapter (if any) */\n solanaConnectorName?: SolanaWalletName;\n} & WalletConfigProps;\n\n/** Check if wallet should show QR code/deeplink (no injected connector) */\nexport function isExternalWallet(\n wallet: WalletProps | WalletConfigProps | null | undefined,\n): boolean {\n if (!wallet) return false;\n // Special mobile wallets option always shows QR\n if (wallet.id === WALLET_ID_MOBILE_WALLETS) return true;\n // Wallets with deeplink but no connector use QR/deeplink flow\n const hasConnector = \"connector\" in wallet && !!wallet.connector;\n return !!wallet.getDaimoPayDeeplink && !hasConnector;\n}\n\nexport const useWallet = (id: string): WalletProps | null => {\n const wallets = useWallets();\n const wallet = wallets.find((c) => c.id === id);\n if (!wallet) return null;\n return wallet;\n};\n\nexport const useWallets = (isMobile?: boolean): WalletProps[] => {\n const connectors = useConnectors();\n const context = usePayContext();\n const { disableMobileInjector, paymentState } = context;\n // Solana wallets available in the session (desktop & mobile)\n const solanaWallet = useSolanaWalletAdapter();\n const locales = useLocales();\n\n // Use prioritized id from button props\n const prioritizedId = context.paymentState.buttonProps?.prioritizedWalletId;\n\n // Get wallet ordering from payment options\n const walletOrder =\n paymentState?.externalPaymentOptions?.parsedConfig?.walletOrder ?? [];\n\n // Helper to move a wallet to the front by id\n function movePrioritizedFirst<T extends { id: string }>(\n list: T[],\n prioritizedId?: string,\n ): void {\n if (!prioritizedId) return;\n if (prioritizedId === WALLET_ID_MOBILE_WALLETS) return;\n const index = list.findIndex((w) => w.id === prioritizedId);\n if (index <= 0) return;\n const [item] = list.splice(index, 1);\n list.unshift(item);\n }\n\n if (isMobile) {\n const mobileWallets: WalletProps[] = [];\n\n // Add injected wallet (if any) first, unless disabled\n if (!disableMobileInjector) {\n connectors.forEach((connector) => {\n if (isBaseAccountConnector(connector.id)) return;\n if (isGeminiConnector(connector.id)) return;\n if (!isInjectedConnector(connector.type)) return;\n // Skip any connectors that mention WalletConnect\n if (connector.name?.toLowerCase().includes(\"walletconnect\")) return;\n mobileWallets.push({\n id: connector.id,\n connector,\n shortName: connector.name,\n iconConnector: connector.icon ? (\n <img src={connector.icon} alt={connector.name} />\n ) : (\n <WalletIcon />\n ),\n iconShape: \"squircle\",\n });\n });\n }\n\n // If wallet order is specified, use that order\n if (walletOrder.length > 0) {\n for (const optionId of walletOrder) {\n const walletId = Object.keys(walletConfigs).find((id) => {\n const wallet = walletConfigs[id];\n const optionLower = optionId.toLowerCase();\n return (\n wallet.name?.toLowerCase() === optionLower ||\n wallet.shortName?.toLowerCase() === optionLower ||\n wallet.name?.toLowerCase().includes(optionLower) ||\n id.toLowerCase() === optionLower ||\n id.toLowerCase().includes(optionLower)\n );\n });\n if (walletId && !mobileWallets.find((w) => w.id === walletId)) {\n const wallet = walletConfigs[walletId];\n mobileWallets.push({\n id: walletId,\n ...wallet,\n });\n }\n }\n\n // Move prioritized wallet (if any) before determining truncation/\"Other\"\n movePrioritizedFirst(mobileWallets, prioritizedId);\n\n // Determine if we need \"Other\" button\n const totalWallets = walletOrder.length;\n\n // If we have more than threshold total, show max before \"Other\"\n // If we have threshold or fewer, show all\n if (\n totalWallets > MOBILE_WALLETS_THRESHOLD_FOR_OTHER ||\n mobileWallets.length > MOBILE_WALLETS_THRESHOLD_FOR_OTHER\n ) {\n // Get the wallets that will be in \"Other\" (those shown in main selector)\n const shownWallets = mobileWallets.slice(\n 0,\n MOBILE_WALLETS_THRESHOLD_FOR_OTHER - 1,\n );\n const shownWalletNames = shownWallets\n .map((w) => w.name?.toLowerCase() || w.shortName?.toLowerCase())\n .filter((name): name is string => !!name);\n\n // Find remaining wallets from the order\n const remainingWalletConfigs = walletOrder\n .filter((walletName) => {\n const nameLower = walletName.toLowerCase();\n return !shownWalletNames.some(\n (shown) =>\n shown === nameLower ||\n shown.includes(nameLower) ||\n nameLower.includes(shown),\n );\n })\n .map((walletName) => {\n const configKey = Object.keys(walletConfigs).find((key) => {\n const wallet = walletConfigs[key];\n const name =\n wallet.name?.toLowerCase() ||\n wallet.shortName?.toLowerCase() ||\n \"\";\n return (\n name.includes(walletName.toLowerCase()) ||\n walletName.toLowerCase().includes(name)\n );\n });\n return configKey ? walletConfigs[configKey] : null;\n })\n .filter(Boolean) as WalletConfigProps[];\n\n // Keep max wallets total (including injected)\n if (mobileWallets.length > MOBILE_WALLETS_THRESHOLD_FOR_OTHER - 1) {\n mobileWallets.splice(MOBILE_WALLETS_THRESHOLD_FOR_OTHER - 1);\n }\n\n const otherWalletsString = flattenChildren(locales.otherWallets).join(\n \"\",\n );\n const otherString = flattenChildren(locales.other).join(\"\");\n mobileWallets.push({\n id: WALLET_ID_OTHER_WALLET,\n name: otherWalletsString,\n shortName: otherString,\n iconConnector: createOtherWalletsIcon(remainingWalletConfigs),\n iconShape: \"square\",\n showInMobileConnectors: false,\n });\n }\n\n return mobileWallets;\n }\n\n // Default behavior: add MetaMask and Trust, then \"other\"\n function addIfNotPresent(idList: string) {\n if (mobileWallets.find((w) => idList.includes(w.id))) return;\n if (mobileWallets.length >= MOBILE_WALLETS_THRESHOLD_FOR_OTHER) return;\n const wallet = assertNotNull(\n walletConfigs[idList],\n () => `missing ${idList}`,\n );\n mobileWallets.push({\n id: idList,\n ...wallet,\n });\n }\n\n addIfNotPresent(\n \"metaMask, metaMask-io, io.metamask, io.metamask.mobile, metaMaskSDK\",\n );\n addIfNotPresent(\"com.trustwallet.app\");\n\n // Ensure prioritized wallet (if any) appears first\n movePrioritizedFirst(mobileWallets, prioritizedId);\n\n const otherWalletsString = flattenChildren(locales.otherWallets).join(\"\");\n const otherString = flattenChildren(locales.other).join(\"\");\n mobileWallets.push({\n id: WALLET_ID_OTHER_WALLET,\n name: otherWalletsString,\n shortName: otherString,\n iconConnector: <Logos.OtherWallets />,\n iconShape: \"square\",\n showInMobileConnectors: false,\n });\n\n return mobileWallets;\n }\n\n const wallets = connectors.map((connector): WalletProps => {\n // First, attempt to find a config by matching connector.id (existing logic).\n let walletConfigKey: string | undefined = Object.keys(walletConfigs).find(\n (id) =>\n id\n .split(\",\")\n .map((i) => i.trim())\n .includes(connector.id),\n );\n\n // If not found by id, attempt a fuzzy match on connector.name.\n if (!walletConfigKey && connector.name) {\n walletConfigKey = Object.keys(walletConfigs).find((key) => {\n const cfgName = walletConfigs[key].name?.toLowerCase();\n const connName = connector.name!.toLowerCase();\n return (\n cfgName && (cfgName.includes(connName) || connName.includes(cfgName))\n );\n });\n }\n\n const c: WalletProps = {\n id: connector.id,\n name: connector.name ?? connector.id ?? connector.type,\n icon: connector.icon ? (\n <img\n src={connector.icon}\n alt={connector.name}\n width={\"100%\"}\n height={\"100%\"}\n />\n ) : (\n <WalletIcon />\n ),\n connector,\n iconShape: connector.id === RABBY_CONNECTOR_ID ? \"circle\" : \"squircle\",\n isInstalled:\n connector.type === \"mock\" ||\n (connector.type === \"injected\" && connector.id !== \"metaMask\") ||\n connector.type === \"farcasterFrame\" ||\n isBaseAccountConnector(connector.id) ||\n isGeminiConnector(connector.id),\n };\n\n if (walletConfigKey) {\n const wallet = walletConfigs[walletConfigKey];\n return {\n ...c,\n iconConnector: connector.icon ? (\n <img\n src={connector.icon}\n alt={connector.name}\n width={\"100%\"}\n height={\"100%\"}\n />\n ) : undefined,\n ...wallet,\n };\n }\n\n return c;\n });\n\n wallets.push(walletConfigs.world as WalletProps);\n wallets.push(walletConfigs.minipay as WalletProps);\n\n wallets.push({\n id: WALLET_ID_MOBILE_WALLETS,\n name: \"Mobile Wallets\",\n shortName: \"Mobile\",\n icon: (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n overflow: \"hidden\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transform: \"scale(1.2)\",\n transformOrigin: \"center center\",\n }}\n >\n <MobileWithLogos />\n </div>\n ),\n iconConnector: (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n overflow: \"hidden\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transform: \"scale(1.2)\",\n transformOrigin: \"center center\",\n }}\n >\n <MobileWithLogos />\n </div>\n ),\n });\n\n const solanaAdapters = solanaWallet.wallets ?? [];\n\n // Merge by fuzzy name matching (includes comparison)\n wallets.forEach((w) => {\n // Skip wallets without a usable name to avoid matching everything\n if (!w.name) return;\n\n const evm = w.name.toLowerCase();\n const match = solanaAdapters.find((sw) => {\n const sol = sw.adapter.name.toLowerCase();\n return evm.includes(sol) || sol.includes(evm);\n });\n\n if (match) {\n w.solanaConnectorName = match.adapter.name;\n }\n });\n\n const unmatched = solanaAdapters.filter(\n (sw) => !wallets.find((w) => w.solanaConnectorName === sw.adapter.name),\n );\n\n unmatched.forEach((sw) => {\n wallets.push({\n id: `solana-${sw.adapter.name}`,\n name: sw.adapter.name,\n shortName: sw.adapter.name,\n icon: <SquircleIcon icon={sw.adapter.icon} alt={sw.adapter.name} />,\n iconConnector: (\n <SquircleIcon icon={sw.adapter.icon} alt={sw.adapter.name} />\n ),\n iconShape: \"squircle\",\n solanaConnectorName: sw.adapter.name,\n });\n });\n\n const sorted = wallets\n // remove duplicate ids\n .filter(\n (wallet, index, self) =>\n self.findIndex((w) => w.id === wallet.id) === index,\n )\n // remove wallet with id coinbaseWalletSDK if wallet with id 'com.coinbase.wallet' exists\n .filter(\n (wallet, index, self) =>\n !(\n wallet.id === \"coinbaseWalletSDK\" &&\n self.find((w) => w.id === \"com.coinbase.wallet\")\n ),\n )\n // remove wallet with id io.metamask if wallet with id 'metaMask' exists\n .filter(\n (wallet, index, self) =>\n !(\n (wallet.id === \"metaMaskSDK\" || wallet.id === \"metaMask\") &&\n self.find(\n (w) => w.id === \"io.metamask\" || w.id === \"io.metamask.mobile\",\n )\n ),\n )\n // remove wallet with id 'com.warpcast.mobile' if wallet with id 'farcaster' exists\n .filter(\n (wallet, index, self) =>\n !(\n wallet.id === \"com.warpcast.mobile\" &&\n self.find((w) => w.id === \"farcaster\")\n ),\n )\n // order by isInstalled injected connectors first\n .sort((a, b) => {\n const aIsInstalledInjected =\n a.isInstalled && isInjectedConnector(a.connector?.type);\n const bIsInstalledInjected =\n b.isInstalled && isInjectedConnector(b.connector?.type);\n\n if (aIsInstalledInjected && !bIsInstalledInjected) return -1;\n if (!aIsInstalledInjected && bIsInstalledInjected) return 1;\n return 0;\n })\n // order \"mobile wallets\" option last\n .sort((a, b) => {\n if (a.id === WALLET_ID_MOBILE_WALLETS) return 1;\n if (b.id === WALLET_ID_MOBILE_WALLETS) return -1;\n return 0;\n });\n\n // Finally ensure prioritized wallet (if any) is first\n movePrioritizedFirst(sorted, prioritizedId);\n\n return sorted;\n};\n"],"names":["useSolanaWalletAdapter","prioritizedId","addIfNotPresent","otherWalletsString","otherString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useWallets.js","sources":["../../../src/wallets/useWallets.tsx"],"sourcesContent":["import { assertNotNull } from \"@daimo/pay-common\";\nimport { Connector } from \"wagmi\";\n\nimport { useWallet as useSolanaWalletAdapter } from \"@solana/wallet-adapter-react\";\nimport Logos, {\n createOtherWalletsIcon,\n SquircleIcon,\n WalletIcon,\n} from \"../assets/logos\";\nimport MobileWithLogos from \"../assets/MobileWithLogos\";\nimport {\n MOBILE_WALLETS_THRESHOLD_FOR_OTHER,\n RABBY_CONNECTOR_ID,\n WALLET_ID_MOBILE_WALLETS,\n WALLET_ID_OTHER_WALLET,\n} from \"../constants/wallets\";\nimport { useConnectors } from \"../hooks/useConnectors\";\nimport useLocales from \"../hooks/useLocales\";\nimport { usePayContext } from \"../hooks/usePayContext\";\nimport { SolanaWalletName } from \"../provider/SolanaContextProvider\";\nimport {\n flattenChildren,\n isBaseAccountConnector,\n isGeminiConnector,\n isInjectedConnector,\n} from \"../utils\";\nimport { WalletConfigProps, walletConfigs } from \"./walletConfigs\";\n\n// ids moved to ../constants/wallets\n\nexport type WalletProps = {\n id: string;\n connector?: Connector | null;\n isInstalled?: boolean;\n /** Name of the matching Solana wallet adapter (if any) */\n solanaConnectorName?: SolanaWalletName;\n} & WalletConfigProps;\n\n/** Check if wallet should show QR code/deeplink (no injected connector) */\nexport function isExternalWallet(\n wallet: WalletProps | WalletConfigProps | null | undefined,\n): boolean {\n if (!wallet) return false;\n // Special mobile wallets option always shows QR\n if (wallet.id === WALLET_ID_MOBILE_WALLETS) return true;\n // Wallets with deeplink but no connector use QR/deeplink flow\n const hasConnector = \"connector\" in wallet && !!wallet.connector;\n return !!wallet.getDaimoPayDeeplink && !hasConnector;\n}\n\nexport const useWallet = (id: string): WalletProps | null => {\n const wallets = useWallets();\n const wallet = wallets.find((c) => c.id === id);\n if (!wallet) return null;\n return wallet;\n};\n\nexport const useWallets = (isMobile?: boolean): WalletProps[] => {\n const connectors = useConnectors();\n const context = usePayContext();\n const { disableMobileInjector, paymentState } = context;\n // Solana wallets available in the session (desktop & mobile)\n const solanaWallet = useSolanaWalletAdapter();\n const locales = useLocales();\n\n // Use prioritized id from button props\n const prioritizedId = context.paymentState.buttonProps?.prioritizedWalletId;\n\n // Get wallet ordering from payment options\n const walletOrder =\n paymentState?.externalPaymentOptions?.parsedConfig?.walletOrder ?? [];\n\n // Helper to move a wallet to the front by id\n function movePrioritizedFirst<T extends { id: string }>(\n list: T[],\n prioritizedId?: string,\n ): void {\n if (!prioritizedId) return;\n if (prioritizedId === WALLET_ID_MOBILE_WALLETS) return;\n const index = list.findIndex((w) => w.id === prioritizedId);\n if (index <= 0) return;\n const [item] = list.splice(index, 1);\n list.unshift(item);\n }\n\n if (isMobile) {\n const mobileWallets: WalletProps[] = [];\n\n // Add injected wallet (if any) first, unless disabled\n if (!disableMobileInjector) {\n connectors.forEach((connector) => {\n if (isBaseAccountConnector(connector.id)) return;\n if (isGeminiConnector(connector.id)) return;\n if (!isInjectedConnector(connector.type)) return;\n if (mobileWallets.some((w) => w.id === connector.id)) return;\n // Skip any connectors that mention WalletConnect\n if (connector.name?.toLowerCase().includes(\"walletconnect\")) return;\n mobileWallets.push({\n id: connector.id,\n connector,\n shortName: connector.name,\n iconConnector: connector.icon ? (\n <img src={connector.icon} alt={connector.name} />\n ) : (\n <WalletIcon />\n ),\n iconShape: \"squircle\",\n });\n });\n }\n\n // If wallet order is specified, use that order\n if (walletOrder.length > 0) {\n for (const optionId of walletOrder) {\n const walletId = Object.keys(walletConfigs).find((id) => {\n const wallet = walletConfigs[id];\n const optionLower = optionId.toLowerCase();\n return (\n wallet.name?.toLowerCase() === optionLower ||\n wallet.shortName?.toLowerCase() === optionLower ||\n wallet.name?.toLowerCase().includes(optionLower) ||\n id.toLowerCase() === optionLower ||\n id.toLowerCase().includes(optionLower)\n );\n });\n if (walletId && !mobileWallets.find((w) => w.id === walletId)) {\n const wallet = walletConfigs[walletId];\n mobileWallets.push({\n id: walletId,\n ...wallet,\n });\n }\n }\n\n // Move prioritized wallet (if any) before determining truncation/\"Other\"\n movePrioritizedFirst(mobileWallets, prioritizedId);\n\n // Determine if we need \"Other\" button\n const totalWallets = walletOrder.length;\n\n // If we have more than threshold total, show max before \"Other\"\n // If we have threshold or fewer, show all\n if (\n totalWallets > MOBILE_WALLETS_THRESHOLD_FOR_OTHER ||\n mobileWallets.length > MOBILE_WALLETS_THRESHOLD_FOR_OTHER\n ) {\n // Get the wallets that will be in \"Other\" (those shown in main selector)\n const shownWallets = mobileWallets.slice(\n 0,\n MOBILE_WALLETS_THRESHOLD_FOR_OTHER - 1,\n );\n const shownWalletNames = shownWallets\n .map((w) => w.name?.toLowerCase() || w.shortName?.toLowerCase())\n .filter((name): name is string => !!name);\n\n // Find remaining wallets from the order\n const remainingWalletConfigs = walletOrder\n .filter((walletName) => {\n const nameLower = walletName.toLowerCase();\n return !shownWalletNames.some(\n (shown) =>\n shown === nameLower ||\n shown.includes(nameLower) ||\n nameLower.includes(shown),\n );\n })\n .map((walletName) => {\n const configKey = Object.keys(walletConfigs).find((key) => {\n const wallet = walletConfigs[key];\n const name =\n wallet.name?.toLowerCase() ||\n wallet.shortName?.toLowerCase() ||\n \"\";\n return (\n name.includes(walletName.toLowerCase()) ||\n walletName.toLowerCase().includes(name)\n );\n });\n return configKey ? walletConfigs[configKey] : null;\n })\n .filter(Boolean) as WalletConfigProps[];\n\n // Keep max wallets total (including injected)\n if (mobileWallets.length > MOBILE_WALLETS_THRESHOLD_FOR_OTHER - 1) {\n mobileWallets.splice(MOBILE_WALLETS_THRESHOLD_FOR_OTHER - 1);\n }\n\n const otherWalletsString = flattenChildren(locales.otherWallets).join(\n \"\",\n );\n const otherString = flattenChildren(locales.other).join(\"\");\n mobileWallets.push({\n id: WALLET_ID_OTHER_WALLET,\n name: otherWalletsString,\n shortName: otherString,\n iconConnector: createOtherWalletsIcon(remainingWalletConfigs),\n iconShape: \"square\",\n showInMobileConnectors: false,\n });\n }\n\n return mobileWallets;\n }\n\n // Default behavior: add MetaMask and Trust, then \"other\"\n function addIfNotPresent(idList: string) {\n if (mobileWallets.find((w) => idList.includes(w.id))) return;\n if (mobileWallets.length >= MOBILE_WALLETS_THRESHOLD_FOR_OTHER) return;\n const wallet = assertNotNull(\n walletConfigs[idList],\n () => `missing ${idList}`,\n );\n mobileWallets.push({\n id: idList,\n ...wallet,\n });\n }\n\n addIfNotPresent(\n \"metaMask, metaMask-io, io.metamask, io.metamask.mobile, metaMaskSDK\",\n );\n addIfNotPresent(\"com.trustwallet.app\");\n\n // Ensure prioritized wallet (if any) appears first\n movePrioritizedFirst(mobileWallets, prioritizedId);\n\n const otherWalletsString = flattenChildren(locales.otherWallets).join(\"\");\n const otherString = flattenChildren(locales.other).join(\"\");\n mobileWallets.push({\n id: WALLET_ID_OTHER_WALLET,\n name: otherWalletsString,\n shortName: otherString,\n iconConnector: <Logos.OtherWallets />,\n iconShape: \"square\",\n showInMobileConnectors: false,\n });\n\n return mobileWallets;\n }\n // console.log(\"connectors \", connectors);\n\n const wallets = connectors.map((connector): WalletProps => {\n // First, attempt to find a config by matching connector.id (existing logic).\n let walletConfigKey: string | undefined = Object.keys(walletConfigs).find(\n (id) =>\n id\n .split(\",\")\n .map((i) => i.trim())\n .includes(connector.id),\n );\n\n // If not found by id, attempt a fuzzy match on connector.name.\n if (!walletConfigKey && connector.name) {\n walletConfigKey = Object.keys(walletConfigs).find((key) => {\n const cfgName = walletConfigs[key].name?.toLowerCase();\n const connName = connector.name!.toLowerCase();\n return (\n cfgName && (cfgName.includes(connName) || connName.includes(cfgName))\n );\n });\n }\n\n const c: WalletProps = {\n id: connector.id,\n name: connector.name ?? connector.id ?? connector.type,\n icon: connector.icon ? (\n <img\n src={connector.icon}\n alt={connector.name}\n width={\"100%\"}\n height={\"100%\"}\n />\n ) : (\n <WalletIcon />\n ),\n connector,\n iconShape: connector.id === RABBY_CONNECTOR_ID ? \"circle\" : \"squircle\",\n isInstalled:\n connector.type === \"mock\" ||\n (connector.type === \"injected\" && connector.id !== \"metaMask\") ||\n connector.type === \"farcasterFrame\" ||\n isBaseAccountConnector(connector.id) ||\n isGeminiConnector(connector.id),\n };\n\n if (walletConfigKey) {\n const wallet = walletConfigs[walletConfigKey];\n return {\n ...c,\n iconConnector: connector.icon ? (\n <img\n src={connector.icon}\n alt={connector.name}\n width={\"100%\"}\n height={\"100%\"}\n />\n ) : undefined,\n ...wallet,\n };\n }\n\n return c;\n });\n\n wallets.push(walletConfigs.world as WalletProps);\n wallets.push(walletConfigs.minipay as WalletProps);\n\n wallets.push({\n id: WALLET_ID_MOBILE_WALLETS,\n name: \"Mobile Wallets\",\n shortName: \"Mobile\",\n icon: (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n overflow: \"hidden\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transform: \"scale(1.2)\",\n transformOrigin: \"center center\",\n }}\n >\n <MobileWithLogos />\n </div>\n ),\n iconConnector: (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n overflow: \"hidden\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transform: \"scale(1.2)\",\n transformOrigin: \"center center\",\n }}\n >\n <MobileWithLogos />\n </div>\n ),\n });\n\n const solanaAdapters = solanaWallet.wallets ?? [];\n\n // Merge by fuzzy name matching (includes comparison)\n wallets.forEach((w) => {\n // Skip wallets without a usable name to avoid matching everything\n if (!w.name) return;\n\n const evm = w.name.toLowerCase();\n const match = solanaAdapters.find((sw) => {\n const sol = sw.adapter.name.toLowerCase();\n return evm.includes(sol) || sol.includes(evm);\n });\n\n if (match) {\n w.solanaConnectorName = match.adapter.name;\n }\n });\n\n const unmatched = solanaAdapters.filter(\n (sw) => !wallets.find((w) => w.solanaConnectorName === sw.adapter.name),\n );\n\n unmatched.forEach((sw) => {\n wallets.push({\n id: `solana-${sw.adapter.name}`,\n name: sw.adapter.name,\n shortName: sw.adapter.name,\n icon: <SquircleIcon icon={sw.adapter.icon} alt={sw.adapter.name} />,\n iconConnector: (\n <SquircleIcon icon={sw.adapter.icon} alt={sw.adapter.name} />\n ),\n iconShape: \"squircle\",\n solanaConnectorName: sw.adapter.name,\n });\n });\n\n const sorted = wallets\n // remove duplicate ids\n .filter(\n (wallet, index, self) =>\n self.findIndex((w) => w.id === wallet.id) === index,\n )\n // remove wallet with id coinbaseWalletSDK if wallet with id 'com.coinbase.wallet' exists\n .filter(\n (wallet, index, self) =>\n !(\n wallet.id === \"coinbaseWalletSDK\" &&\n self.find((w) => w.id === \"com.coinbase.wallet\")\n ),\n )\n // remove wallet with id io.metamask if wallet with id 'metaMask' exists\n .filter(\n (wallet, index, self) =>\n !(\n (wallet.id === \"metaMaskSDK\" || wallet.id === \"metaMask\") &&\n self.find(\n (w) => w.id === \"io.metamask\" || w.id === \"io.metamask.mobile\",\n )\n ),\n )\n // remove wallet with id 'com.warpcast.mobile' if wallet with id 'farcaster' exists\n .filter(\n (wallet, index, self) =>\n !(\n wallet.id === \"com.warpcast.mobile\" &&\n self.find((w) => w.id === \"farcaster\")\n ),\n )\n // order by isInstalled injected connectors first\n .sort((a, b) => {\n const aIsInstalledInjected =\n a.isInstalled && isInjectedConnector(a.connector?.type);\n const bIsInstalledInjected =\n b.isInstalled && isInjectedConnector(b.connector?.type);\n\n if (aIsInstalledInjected && !bIsInstalledInjected) return -1;\n if (!aIsInstalledInjected && bIsInstalledInjected) return 1;\n return 0;\n })\n // order \"mobile wallets\" option last\n .sort((a, b) => {\n if (a.id === WALLET_ID_MOBILE_WALLETS) return 1;\n if (b.id === WALLET_ID_MOBILE_WALLETS) return -1;\n return 0;\n });\n\n // Finally ensure prioritized wallet (if any) is first\n movePrioritizedFirst(sorted, prioritizedId);\n\n return sorted;\n};\n"],"names":["useSolanaWalletAdapter","prioritizedId","addIfNotPresent","otherWalletsString","otherString"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@daimo/pay",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.19.
|
|
4
|
+
"version": "1.19.2",
|
|
5
5
|
"author": "Daimo",
|
|
6
6
|
"homepage": "https://pay.daimo.com",
|
|
7
7
|
"license": "BSD-2-Clause license",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"lint": "eslint 'src/**/*.{js,jsx,ts,tsx}' --max-warnings=0"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@daimo/pay-common": "1.19.
|
|
36
|
+
"@daimo/pay-common": "1.19.2",
|
|
37
37
|
"@solana/wallet-adapter-base": "^0.9.23",
|
|
38
38
|
"@solana/wallet-adapter-react": "^0.15.35",
|
|
39
39
|
"@solana/web3.js": "^1.95.4",
|