@relayprotocol/relay-kit-ui 9.1.3 → 10.0.0

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.
Files changed (83) hide show
  1. package/_cjs/src/components/common/RefundReason.js.map +1 -1
  2. package/_cjs/src/components/common/TransactionModal/DepositAddressModalRenderer.js +7 -10
  3. package/_cjs/src/components/common/TransactionModal/DepositAddressModalRenderer.js.map +1 -1
  4. package/_cjs/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.js.map +1 -1
  5. package/_cjs/src/components/common/TransactionModal/steps/ErrorStep.js +2 -2
  6. package/_cjs/src/components/common/TransactionModal/steps/ErrorStep.js.map +1 -1
  7. package/_cjs/src/components/common/TransactionModal/steps/SwapSuccessStep.js +15 -16
  8. package/_cjs/src/components/common/TransactionModal/steps/SwapSuccessStep.js.map +1 -1
  9. package/_cjs/src/components/widgets/OnrampWidget/modals/OnrampModal.js +10 -13
  10. package/_cjs/src/components/widgets/OnrampWidget/modals/OnrampModal.js.map +1 -1
  11. package/_cjs/src/components/widgets/SwapWidget/index.js +4 -4
  12. package/_cjs/src/components/widgets/SwapWidget/index.js.map +1 -1
  13. package/_cjs/src/components/widgets/SwapWidgetRenderer.js +5 -6
  14. package/_cjs/src/components/widgets/SwapWidgetRenderer.js.map +1 -1
  15. package/_cjs/src/constants/maxGasBuffer.js +1 -2
  16. package/_cjs/src/constants/maxGasBuffer.js.map +1 -1
  17. package/_cjs/src/constants/walletCompatibility.js +5 -2
  18. package/_cjs/src/constants/walletCompatibility.js.map +1 -1
  19. package/_cjs/src/providers/RelayKitProvider.js +22 -1
  20. package/_cjs/src/providers/RelayKitProvider.js.map +1 -1
  21. package/_cjs/src/types/RelayTransaction.js.map +1 -1
  22. package/_cjs/src/utils/nativeMaxAmount.js +4 -4
  23. package/_cjs/src/utils/nativeMaxAmount.js.map +1 -1
  24. package/_cjs/src/utils/relayTransaction.js +14 -1
  25. package/_cjs/src/utils/relayTransaction.js.map +1 -1
  26. package/_cjs/src/version.js +1 -1
  27. package/_cjs/src/version.js.map +1 -1
  28. package/_cjs/tsconfig.build.tsbuildinfo +1 -1
  29. package/_esm/src/components/common/RefundReason.js.map +1 -1
  30. package/_esm/src/components/common/TransactionModal/DepositAddressModalRenderer.js +10 -10
  31. package/_esm/src/components/common/TransactionModal/DepositAddressModalRenderer.js.map +1 -1
  32. package/_esm/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.js +1 -1
  33. package/_esm/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.js.map +1 -1
  34. package/_esm/src/components/common/TransactionModal/steps/ErrorStep.js +2 -2
  35. package/_esm/src/components/common/TransactionModal/steps/ErrorStep.js.map +1 -1
  36. package/_esm/src/components/common/TransactionModal/steps/SwapSuccessStep.js +15 -16
  37. package/_esm/src/components/common/TransactionModal/steps/SwapSuccessStep.js.map +1 -1
  38. package/_esm/src/components/widgets/OnrampWidget/modals/OnrampModal.js +14 -14
  39. package/_esm/src/components/widgets/OnrampWidget/modals/OnrampModal.js.map +1 -1
  40. package/_esm/src/components/widgets/SwapWidget/index.js +4 -4
  41. package/_esm/src/components/widgets/SwapWidget/index.js.map +1 -1
  42. package/_esm/src/components/widgets/SwapWidgetRenderer.js +5 -6
  43. package/_esm/src/components/widgets/SwapWidgetRenderer.js.map +1 -1
  44. package/_esm/src/constants/maxGasBuffer.js +0 -1
  45. package/_esm/src/constants/maxGasBuffer.js.map +1 -1
  46. package/_esm/src/constants/walletCompatibility.js +5 -2
  47. package/_esm/src/constants/walletCompatibility.js.map +1 -1
  48. package/_esm/src/providers/RelayKitProvider.js +31 -2
  49. package/_esm/src/providers/RelayKitProvider.js.map +1 -1
  50. package/_esm/src/types/RelayTransaction.js.map +1 -1
  51. package/_esm/src/utils/nativeMaxAmount.js +4 -4
  52. package/_esm/src/utils/nativeMaxAmount.js.map +1 -1
  53. package/_esm/src/utils/relayTransaction.js +20 -0
  54. package/_esm/src/utils/relayTransaction.js.map +1 -1
  55. package/_esm/src/version.js +1 -1
  56. package/_esm/src/version.js.map +1 -1
  57. package/_esm/tsconfig.build.tsbuildinfo +1 -1
  58. package/_types/src/components/common/RefundReason.d.ts +1 -1
  59. package/_types/src/components/common/TransactionModal/DepositAddressModalRenderer.d.ts.map +1 -1
  60. package/_types/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.d.ts +2 -2
  61. package/_types/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.d.ts.map +1 -1
  62. package/_types/src/components/common/TransactionModal/steps/SwapSuccessStep.d.ts.map +1 -1
  63. package/_types/src/components/widgets/OnrampWidget/modals/OnrampModal.d.ts.map +1 -1
  64. package/_types/src/components/widgets/SwapWidget/index.d.ts +0 -2
  65. package/_types/src/components/widgets/SwapWidget/index.d.ts.map +1 -1
  66. package/_types/src/components/widgets/SwapWidgetRenderer.d.ts +0 -2
  67. package/_types/src/components/widgets/SwapWidgetRenderer.d.ts.map +1 -1
  68. package/_types/src/constants/maxGasBuffer.d.ts +0 -1
  69. package/_types/src/constants/maxGasBuffer.d.ts.map +1 -1
  70. package/_types/src/constants/walletCompatibility.d.ts.map +1 -1
  71. package/_types/src/providers/RelayKitProvider.d.ts +13 -5
  72. package/_types/src/providers/RelayKitProvider.d.ts.map +1 -1
  73. package/_types/src/types/RelayTransaction.d.ts +1 -1
  74. package/_types/src/utils/nativeMaxAmount.d.ts +2 -2
  75. package/_types/src/utils/nativeMaxAmount.d.ts.map +1 -1
  76. package/_types/src/utils/relayTransaction.d.ts +16 -0
  77. package/_types/src/utils/relayTransaction.d.ts.map +1 -1
  78. package/_types/src/utils/tokens.d.ts +1 -1
  79. package/_types/src/version.d.ts +1 -1
  80. package/_types/src/version.d.ts.map +1 -1
  81. package/_types/tsconfig.build.tsbuildinfo +1 -1
  82. package/package.json +3 -3
  83. package/readme.md +14 -0
@@ -1 +1 @@
1
- {"version":3,"file":"SwapWidgetRenderer.js","sourceRoot":"","sources":["../../../../src/components/widgets/SwapWidgetRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Dispatch, FC, ReactNode, SetStateAction } from 'react'\nimport { useCallback, useContext, useEffect, useMemo, useState } from 'react'\nimport {\n useCurrencyBalance,\n useRelayClient,\n useDebounceState,\n useWalletAddress,\n useDisconnected,\n usePreviousValueChange,\n useIsWalletCompatible,\n useFallbackState,\n useGasTopUpRequired,\n useExplicitDeposit,\n useDisplayName,\n useLighterAccount\n} from '../../hooks/index.js'\nimport type { Address, WalletClient } from 'viem'\nimport { formatUnits, parseUnits } from 'viem'\nimport { useAccount, useWalletClient } from 'wagmi'\nimport { useCapabilities } from 'wagmi/experimental'\nimport type { Token } from '../../types/index.js'\nimport { useQueryClient } from '@tanstack/react-query'\nimport type { ChainVM, Execute } from '@relayprotocol/relay-sdk'\nimport {\n calculatePriceTimeEstimate,\n calculateRelayerFeeProportionUsd,\n extractQuoteId,\n getCurrentStep,\n getSwapEventData,\n isHighRelayerServiceFeeUsd,\n parseFees\n} from '../../utils/quote.js'\nimport { useQuote, useTokenPrice } from '@relayprotocol/relay-kit-hooks'\nimport { EventNames } from '../../constants/events.js'\nimport {\n ProviderOptionsContext,\n useHapticEvent\n} from '../../providers/RelayKitProvider.js'\nimport type { DebouncedState } from 'usehooks-ts'\nimport type { AdaptedWallet } from '@relayprotocol/relay-sdk'\nimport type { LinkedWallet } from '../../types/index.js'\nimport {\n addressWithFallback,\n isValidAddress,\n findSupportedWallet,\n isChainVmTypeSupported\n} from '../../utils/address.js'\nimport { adaptViemWallet } from '@relayprotocol/relay-sdk'\nimport { errorToJSON } from '../../utils/errors.js'\nimport { useSwapButtonCta } from '../../hooks/widget/useSwapButtonCta.js'\nimport { sha256 } from '../../utils/hashing.js'\nimport { get15MinuteInterval } from '../../utils/time.js'\nimport { isLighterAddress } from '../../utils/lighter.js'\nimport type { FeeBreakdown } from '../../types/FeeBreakdown.js'\n\nexport type TradeType = 'EXACT_INPUT' | 'EXPECTED_OUTPUT'\n\ntype SwapWidgetRendererProps = {\n transactionModalOpen: boolean\n setTransactionModalOpen: React.Dispatch<React.SetStateAction<boolean>>\n depositAddressModalOpen: boolean\n children: (props: ChildrenProps) => ReactNode\n fromToken?: Token\n setFromToken?: (token?: Token) => void\n toToken?: Token\n setToToken?: (token?: Token) => void\n defaultToAddress?: Address\n defaultAmount?: string\n defaultTradeType?: TradeType\n slippageTolerance?: string\n context: 'Swap' | 'Deposit' | 'Withdraw'\n wallet?: AdaptedWallet\n linkedWallets?: LinkedWallet[]\n multiWalletSupportEnabled?: boolean\n supportedWalletVMs: Omit<ChainVM, 'hypevm' | 'lvm'>[]\n onConnectWallet?: () => void\n onAnalyticEvent?: (eventName: string, data?: any) => void\n onSwapError?: (error: string, data?: Execute) => void\n useSecureBaseUrl?: (parameters: Parameters<typeof useQuote>['2']) => boolean\n}\n\nexport type ChildrenProps = {\n quote?: ReturnType<typeof useQuote>['data']\n steps: Execute['steps'] | null\n setSteps: Dispatch<React.SetStateAction<Execute['steps'] | null>>\n swap: () => void\n transactionModalOpen: boolean\n details: null | Execute['details']\n feeBreakdown: FeeBreakdown | null\n fromToken?: Token\n setFromToken: Dispatch<React.SetStateAction<Token | undefined>>\n toToken?: Token\n setToToken: Dispatch<React.SetStateAction<Token | undefined>>\n swapError: Error | null\n error: Error | null\n toDisplayName?: string\n address?: Address | string\n recipient?: Address | string\n customToAddress?: Address | string\n setCustomToAddress: Dispatch<\n React.SetStateAction<Address | string | undefined>\n >\n tradeType: TradeType\n setTradeType: Dispatch<React.SetStateAction<TradeType>>\n isSameCurrencySameRecipientSwap: boolean\n amountInputValue: string\n debouncedInputAmountValue: string\n setAmountInputValue: (value: string) => void\n debouncedAmountInputControls: DebouncedState<(value: string) => void>\n amountOutputValue: string\n debouncedOutputAmountValue: string\n setAmountOutputValue: (value: string) => void\n debouncedAmountOutputControls: DebouncedState<(value: string) => void>\n toBalance?: bigint\n toBalancePending?: boolean\n fromBalance?: bigint\n fromBalancePending?: boolean\n isFetchingQuote: boolean\n isLoadingToBalance: boolean\n isLoadingFromBalance: boolean\n highRelayerServiceFee: boolean\n relayerFeeProportion: bigint\n hasInsufficientBalance: boolean\n isInsufficientLiquidityError?: boolean\n isCapacityExceededError?: boolean\n isCouldNotExecuteError?: boolean\n ctaCopy: string\n isFromNative: boolean\n slippageTolerance?: string\n timeEstimate?: { time: number; formattedTime: string }\n isSvmSwap: boolean\n isBvmSwap: boolean\n isValidFromAddress: boolean\n isValidToAddress: boolean\n supportedWalletVMs: Omit<ChainVM, 'hypevm' | 'lvm'>[]\n fromChainWalletVMSupported: boolean\n toChainWalletVMSupported: boolean\n isRecipientLinked?: boolean\n recipientWalletSupportsChain?: boolean\n gasTopUpEnabled: boolean\n setGasTopUpEnabled: Dispatch<React.SetStateAction<boolean>>\n gasTopUpBalance?: bigint\n gasTopUpRequired: boolean\n gasTopUpAmount?: bigint\n gasTopUpAmountUsd?: string\n quoteInProgress: null | Execute\n setQuoteInProgress: Dispatch<React.SetStateAction<null | Execute>>\n linkedWallet?: LinkedWallet\n quoteParameters?: Parameters<typeof useQuote>['2']\n invalidateBalanceQueries: () => void\n invalidateQuoteQuery: () => void\n setDetails: Dispatch<React.SetStateAction<Execute['details'] | null>>\n setSwapError: Dispatch<React.SetStateAction<Error | null>>\n abortController: AbortController | null\n fromTokenPriceData: ReturnType<typeof useTokenPrice>['data']\n isLoadingFromTokenPrice: boolean\n toTokenPriceData: ReturnType<typeof useTokenPrice>['data']\n isLoadingToTokenPrice: boolean\n useSecureBaseUrl?: (parameters: Parameters<typeof useQuote>['2']) => boolean\n}\n\n// shared query options for useTokenPrice\nconst tokenPriceQueryOptions = {\n staleTime: 60 * 1000, // 1 minute\n refetchInterval: 30 * 1000, // 30 seconds\n refetchOnWindowFocus: false\n}\n\nconst SwapWidgetRenderer: FC<SwapWidgetRendererProps> = ({\n transactionModalOpen,\n setTransactionModalOpen,\n depositAddressModalOpen,\n fromToken: _fromToken,\n setFromToken: _setFromToken,\n toToken: _toToken,\n setToToken: _setToToken,\n defaultToAddress,\n defaultAmount,\n defaultTradeType,\n slippageTolerance,\n context,\n wallet,\n multiWalletSupportEnabled = false,\n linkedWallets,\n supportedWalletVMs,\n useSecureBaseUrl,\n children,\n onAnalyticEvent,\n onSwapError\n}) => {\n const haptic = useHapticEvent()\n const [fromToken, setFromToken] = useFallbackState(\n _setFromToken ? _fromToken : undefined,\n _setFromToken\n ? [\n _fromToken,\n _setFromToken as Dispatch<SetStateAction<Token | undefined>>\n ]\n : undefined\n )\n const [toToken, setToToken] = useFallbackState(\n _setToToken ? _toToken : undefined,\n _setToToken\n ? [_toToken, _setToToken as Dispatch<SetStateAction<Token | undefined>>]\n : undefined\n )\n const providerOptionsContext = useContext(ProviderOptionsContext)\n const connectorKeyOverrides = providerOptionsContext.vmConnectorKeyOverrides\n const relayClient = useRelayClient()\n const { connector } = useAccount()\n const walletClient = useWalletClient()\n const [customToAddress, setCustomToAddress] = useState<\n Address | string | undefined\n >(defaultToAddress)\n const address = useWalletAddress(wallet, linkedWallets)\n\n const [tradeType, setTradeType] = useState<'EXACT_INPUT' | 'EXPECTED_OUTPUT'>(\n defaultTradeType ?? 'EXACT_INPUT'\n )\n const queryClient = useQueryClient()\n const [steps, setSteps] = useState<null | Execute['steps']>(null)\n const [quoteInProgress, setQuoteInProgress] = useState<null | Execute>(null)\n const [waitingForSteps, setWaitingForSteps] = useState(false)\n const [details, setDetails] = useState<null | Execute['details']>(null)\n const [gasTopUpEnabled, setGasTopUpEnabled] = useState(false)\n const [abortController, setAbortController] =\n useState<AbortController | null>(null)\n\n const {\n value: amountInputValue,\n debouncedValue: debouncedInputAmountValue,\n setValue: setAmountInputValue,\n debouncedControls: debouncedAmountInputControls\n } = useDebounceState<string>(\n !defaultTradeType || defaultTradeType === 'EXACT_INPUT'\n ? (defaultAmount ?? '')\n : '',\n 500\n )\n const {\n value: amountOutputValue,\n debouncedValue: debouncedOutputAmountValue,\n setValue: setAmountOutputValue,\n debouncedControls: debouncedAmountOutputControls\n } = useDebounceState<string>(\n defaultTradeType === 'EXPECTED_OUTPUT' ? (defaultAmount ?? '') : '',\n 500\n )\n\n const [swapError, setSwapError] = useState<Error | null>(null)\n\n const toChain = relayClient?.chains.find(\n (chain) => chain.id === toToken?.chainId\n )\n const fromChain = relayClient?.chains?.find(\n (chain) => chain.id === fromToken?.chainId\n )\n\n const fromChainWalletVMSupported =\n isChainVmTypeSupported(fromChain?.vmType, supportedWalletVMs) ||\n fromChain?.id === 1337\n const toChainWalletVMSupported =\n isChainVmTypeSupported(toChain?.vmType, supportedWalletVMs)\n\n const defaultRecipient = useMemo(() => {\n const _linkedWallet = linkedWallets?.find(\n (linkedWallet) =>\n address ===\n (linkedWallet.vmType === 'evm'\n ? linkedWallet.address.toLowerCase()\n : linkedWallet.address)\n )\n const _isValidToAddress = isValidAddress(\n toChain?.vmType,\n customToAddress ?? '',\n toChain?.id,\n !customToAddress && _linkedWallet?.address === address\n ? _linkedWallet?.connector\n : undefined,\n connectorKeyOverrides\n )\n if (\n multiWalletSupportEnabled &&\n toChain &&\n linkedWallets &&\n !_isValidToAddress\n ) {\n const supportedAddress = findSupportedWallet(\n toChain,\n customToAddress,\n linkedWallets,\n connectorKeyOverrides\n )\n\n return supportedAddress\n }\n }, [\n multiWalletSupportEnabled,\n toChain,\n customToAddress,\n address,\n linkedWallets,\n setCustomToAddress\n ])\n\n const recipient = customToAddress ?? defaultRecipient ?? address\n\n const {\n value: fromBalance,\n queryKey: fromBalanceQueryKey,\n isLoading: isLoadingFromBalance,\n isError: fromBalanceErrorFetching,\n isDuneBalance: fromBalanceIsDune,\n hasPendingBalance: fromBalancePending\n } = useCurrencyBalance({\n chain: fromChain,\n address: address,\n currency: fromToken?.address ? (fromToken.address as Address) : undefined,\n enabled: fromToken !== undefined,\n refreshInterval: undefined,\n wallet\n })\n\n const {\n value: toBalance,\n queryKey: toBalanceQueryKey,\n isLoading: isLoadingToBalance,\n isDuneBalance: toBalanceIsDune,\n hasPendingBalance: toBalancePending\n } = useCurrencyBalance({\n chain: toChain,\n address: recipient,\n currency: toToken?.address ? (toToken.address as Address) : undefined,\n enabled: toToken !== undefined,\n refreshInterval: undefined,\n wallet\n })\n\n const invalidateBalanceQueries = useCallback(() => {\n const invalidatePeriodically = (invalidateFn: () => void) => {\n let maxRefreshes = 4\n let refreshCount = 0\n const timer = setInterval(() => {\n if (maxRefreshes === refreshCount) {\n clearInterval(timer)\n return\n }\n refreshCount++\n invalidateFn()\n }, 3000)\n }\n\n queryClient.invalidateQueries({ queryKey: ['useDuneBalances'] })\n\n // Dune balances are sometimes stale, because of this we need to aggressively fetch them\n // for a predetermined period to make sure we get back a fresh response\n if (fromBalanceIsDune) {\n invalidatePeriodically(() => {\n queryClient.invalidateQueries({ queryKey: fromBalanceQueryKey })\n })\n } else {\n queryClient.invalidateQueries({ queryKey: fromBalanceQueryKey })\n }\n if (toBalanceIsDune) {\n invalidatePeriodically(() => {\n queryClient.invalidateQueries({ queryKey: toBalanceQueryKey })\n })\n } else {\n queryClient.invalidateQueries({ queryKey: toBalanceQueryKey })\n }\n }, [\n queryClient,\n fromBalanceQueryKey,\n toBalanceQueryKey,\n toBalanceIsDune,\n fromBalanceIsDune,\n address\n ])\n const { data: capabilities } = useCapabilities({\n query: {\n enabled:\n connector &&\n (connector.id === 'coinbaseWalletSDK' || connector.id === 'coinbase')\n }\n })\n const hasAuxiliaryFundsSupport = Boolean(\n fromToken?.chainId\n ? capabilities?.[fromToken?.chainId]?.auxiliaryFunds?.supported\n : false\n )\n\n const isSvmSwap = fromChain?.vmType === 'svm' || toChain?.vmType === 'svm'\n const isBvmSwap = fromChain?.vmType === 'bvm' || toChain?.vmType === 'bvm'\n const linkedWallet = linkedWallets?.find(\n (linkedWallet) =>\n address ===\n (linkedWallet.vmType === 'evm'\n ? linkedWallet.address.toLowerCase()\n : linkedWallet.address) || linkedWallet.address === address\n )\n\n const isRecipientLinked =\n (recipient\n ? linkedWallets?.find((wallet) => wallet.address === recipient)\n : undefined) !== undefined\n\n const isValidFromAddress = isValidAddress(\n fromChain?.vmType,\n address ?? '',\n fromChain?.id,\n linkedWallet?.connector,\n connectorKeyOverrides\n )\n const fromAddressWithFallback = addressWithFallback(\n fromChain?.vmType,\n address,\n fromChain?.id,\n linkedWallet?.connector,\n connectorKeyOverrides\n )\n\n const isValidToAddress = isValidAddress(\n toChain?.vmType,\n recipient ?? '',\n toChain?.id\n )\n\n const toAddressWithFallback = addressWithFallback(\n toChain?.vmType,\n recipient,\n toChain?.id\n )\n\n const { displayName: toDisplayName } = useDisplayName(\n recipient,\n toChain?.vmType,\n toChain?.id\n )\n\n const [currentSlippageTolerance, setCurrentSlippageTolerance] = useState<\n string | undefined\n >(slippageTolerance)\n\n useEffect(() => {\n setCurrentSlippageTolerance(slippageTolerance)\n }, [slippageTolerance])\n\n const {\n required: gasTopUpRequired,\n amount: _gasTopUpAmount,\n amountUsd: _gasTopUpAmountUsd,\n balance: gasTopUpBalance\n } = useGasTopUpRequired(toChain, fromChain, toToken, recipient)\n\n // Retrieve the price of the `from` token\n const { data: fromTokenPriceData, isLoading: isLoadingFromTokenPrice } =\n useTokenPrice(\n relayClient?.baseApiUrl,\n {\n address: fromToken?.address ?? '',\n chainId: fromToken?.chainId ?? 0,\n referrer: relayClient?.source\n },\n {\n enabled: !!(fromToken?.address && fromToken.chainId),\n ...tokenPriceQueryOptions\n }\n )\n\n // Retrieve the price of the `to` token\n const { data: toTokenPriceData, isLoading: isLoadingToTokenPrice } =\n useTokenPrice(\n relayClient?.baseApiUrl,\n {\n address: toToken?.address ?? '',\n chainId: toToken?.chainId ?? 0,\n referrer: relayClient?.source\n },\n {\n enabled: !!(toToken?.address && toToken.chainId),\n ...tokenPriceQueryOptions\n }\n )\n\n const isFromNative = fromToken?.address === fromChain?.currency?.address\n\n const explicitDeposit = useExplicitDeposit(\n wallet,\n fromToken?.chainId,\n fromChain?.vmType,\n address\n )\n\n const shouldSetQuoteParameters = fromToken && toToken\n\n const quoteParameters: Parameters<typeof useQuote>['2'] =\n shouldSetQuoteParameters\n ? {\n user: fromAddressWithFallback,\n originChainId: fromToken.chainId,\n destinationChainId: toToken.chainId,\n originCurrency: fromToken.address,\n destinationCurrency: toToken.address,\n recipient: toAddressWithFallback,\n tradeType,\n appFees: providerOptionsContext.appFees,\n amount:\n tradeType === 'EXACT_INPUT'\n ? parseUnits(\n debouncedInputAmountValue,\n fromToken.decimals\n ).toString()\n : parseUnits(\n debouncedOutputAmountValue,\n toToken.decimals\n ).toString(),\n referrer: relayClient?.source ?? undefined,\n useDepositAddress: !fromChainWalletVMSupported,\n refundTo: fromToken?.chainId === 1337 ? address : undefined,\n slippageTolerance: slippageTolerance,\n topupGas: gasTopUpEnabled && gasTopUpRequired,\n ...(linkedWallet?.vmType === 'bvm' && wallet?.metadata?.publicKey\n ? {\n additionalData: {\n userPublicKey: wallet?.metadata?.publicKey\n }\n }\n : {}),\n ...(explicitDeposit !== undefined &&\n fromChain?.vmType === 'evm' && {\n explicitDeposit: explicitDeposit\n })\n }\n : undefined\n\n const onQuoteRequested: Parameters<typeof useQuote>['3'] = (\n options,\n config\n ) => {\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...options, interval })\n onAnalyticEvent?.(EventNames.QUOTE_REQUESTED, {\n parameters: options,\n wallet_connector: linkedWallet?.connector,\n chain_id_in: options?.originChainId,\n chain_id_out: options?.destinationChainId,\n http_config: config,\n quote_request_id: quoteRequestId\n })\n }\n\n const onQuoteReceived: Parameters<typeof useQuote>['4'] = (\n { details, steps },\n options\n ) => {\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...options, interval })\n onAnalyticEvent?.(EventNames.QUOTE_RECEIVED, {\n parameters: options,\n wallet_connector: linkedWallet?.connector,\n amount_in: details?.currencyIn?.amountFormatted,\n amount_in_raw: details?.currencyIn?.amount,\n currency_in: details?.currencyIn?.currency?.symbol,\n chain_id_in: details?.currencyIn?.currency?.chainId,\n amount_out: details?.currencyOut?.amountFormatted,\n amount_out_raw: details?.currencyOut?.amount,\n currency_out: details?.currencyOut?.currency?.symbol,\n chain_id_out: details?.currencyOut?.currency?.chainId,\n slippage_tolerance_destination_percentage:\n details?.slippageTolerance?.destination?.percent,\n slippage_tolerance_origin_percentage:\n details?.slippageTolerance?.origin?.percent,\n steps,\n quote_request_id: quoteRequestId,\n quote_id: steps ? extractQuoteId(steps) : undefined\n })\n }\n\n const quoteFetchingEnabled = Boolean(\n relayClient &&\n ((tradeType === 'EXACT_INPUT' &&\n debouncedInputAmountValue &&\n debouncedInputAmountValue.length > 0 &&\n Number(debouncedInputAmountValue) !== 0) ||\n (tradeType === 'EXPECTED_OUTPUT' &&\n debouncedOutputAmountValue &&\n debouncedOutputAmountValue.length > 0 &&\n Number(debouncedOutputAmountValue) !== 0)) &&\n fromToken !== undefined &&\n toToken !== undefined &&\n !transactionModalOpen &&\n !depositAddressModalOpen\n )\n\n const {\n data: _quoteData,\n error: quoteError,\n isFetching: isFetchingQuote,\n executeQuote: executeSwap,\n queryKey: quoteQueryKey\n } = useQuote(\n relayClient ? relayClient : undefined,\n wallet,\n quoteParameters,\n onQuoteRequested,\n onQuoteReceived,\n {\n refetchOnWindowFocus: false,\n enabled: quoteFetchingEnabled && quoteParameters !== undefined,\n refetchInterval:\n !transactionModalOpen &&\n !depositAddressModalOpen &&\n debouncedInputAmountValue === amountInputValue &&\n debouncedOutputAmountValue === amountOutputValue\n ? 12000\n : undefined\n },\n (e: any) => {\n const errorMessage = errorToJSON(\n e?.response?.data?.message ? new Error(e?.response?.data?.message) : e\n )\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...quoteParameters, interval })\n onAnalyticEvent?.(EventNames.QUOTE_ERROR, {\n wallet_connector: linkedWallet?.connector,\n error_message: errorMessage,\n parameters: quoteParameters,\n quote_request_id: quoteRequestId,\n status_code: e?.response?.status ?? e?.status ?? ''\n })\n },\n undefined,\n useSecureBaseUrl?.(quoteParameters)\n ? providerOptionsContext?.secureBaseUrl\n : undefined\n )\n\n const invalidateQuoteQuery = useCallback(() => {\n queryClient.invalidateQueries({ queryKey: quoteQueryKey })\n }, [queryClient, quoteQueryKey])\n let error =\n _quoteData || (isFetchingQuote && quoteFetchingEnabled) ? null : quoteError\n let quote = error ? undefined : _quoteData\n const gasTopUpAmount = quote?.details?.currencyGasTopup?.amount\n ? BigInt(quote?.details?.currencyGasTopup?.amount)\n : _gasTopUpAmount\n const gasTopUpAmountUsd =\n quote?.details?.currencyGasTopup?.amountUsd ?? _gasTopUpAmountUsd\n\n useDisconnected(address, () => {\n setCustomToAddress(undefined)\n })\n\n // Auto-select Lighter account when switching to LVM chain\n const isLighterChain = toChain?.vmType === 'lvm'\n const { data: connectedLighterAccount } = useLighterAccount(\n isLighterChain && address ? address : undefined\n )\n\n useEffect(() => {\n if (\n isLighterChain &&\n connectedLighterAccount?.index &&\n // Only auto-set if no valid Lighter address is already set\n (!customToAddress || !isLighterAddress(customToAddress))\n ) {\n setCustomToAddress(connectedLighterAccount.index.toString())\n }\n }, [isLighterChain, connectedLighterAccount, customToAddress])\n\n useEffect(() => {\n if (tradeType === 'EXACT_INPUT') {\n const amountOut = quote?.details?.currencyOut?.amount ?? ''\n setAmountOutputValue(\n amountOut !== ''\n ? formatUnits(\n BigInt(amountOut),\n Number(quote?.details?.currencyOut?.currency?.decimals ?? 18)\n )\n : ''\n )\n } else if (tradeType === 'EXPECTED_OUTPUT') {\n const amountIn = quote?.details?.currencyIn?.amount ?? ''\n setAmountInputValue(\n amountIn !== ''\n ? formatUnits(\n BigInt(amountIn),\n Number(quote?.details?.currencyIn?.currency?.decimals ?? 18)\n )\n : ''\n )\n }\n debouncedAmountInputControls.flush()\n debouncedAmountOutputControls.flush()\n }, [quote, tradeType])\n\n const feeBreakdown = useMemo(() => {\n const chains = relayClient?.chains\n const fromChain = chains?.find((chain) => chain.id === fromToken?.chainId)\n const toChain = chains?.find((chain) => chain.id === toToken?.chainId)\n return fromToken && toToken && fromChain && toChain && quote\n ? parseFees(toChain, fromChain, quote)\n : null\n }, [quote, fromToken, toToken, relayClient])\n\n const totalAmount = BigInt(quote?.details?.currencyIn?.amount ?? 0n)\n\n const hasInsufficientBalance = Boolean(\n !fromBalanceErrorFetching &&\n totalAmount &&\n address &&\n (fromBalance ?? 0n) < totalAmount &&\n !hasAuxiliaryFundsSupport &&\n fromChainWalletVMSupported\n )\n\n const fetchQuoteErrorMessage = error\n ? error?.message\n ? (error?.message as string)\n : 'Unknown Error'\n : null\n const fetchQuoteDataErrorMessage = error\n ? (error as any)?.response?.data?.message\n ? ((error as any)?.response?.data.message as string)\n : 'Unknown Error'\n : null\n const isInsufficientLiquidityError = Boolean(\n fetchQuoteErrorMessage?.includes('No quotes available')\n )\n const isCapacityExceededError =\n fetchQuoteDataErrorMessage?.includes(\n 'Amount is higher than the available liquidity'\n ) || fetchQuoteDataErrorMessage?.includes('Insufficient relayer liquidity')\n const isCouldNotExecuteError =\n fetchQuoteDataErrorMessage?.includes('Could not execute')\n const highRelayerServiceFee = isHighRelayerServiceFeeUsd(quote)\n const relayerFeeProportion = calculateRelayerFeeProportionUsd(quote)\n const timeEstimate = calculatePriceTimeEstimate(quote?.details)\n\n const recipientWalletSupportsChain = useIsWalletCompatible(\n toChain?.id,\n recipient,\n linkedWallets,\n onAnalyticEvent\n )\n\n const isSameCurrencySameRecipientSwap =\n fromToken?.address === toToken?.address &&\n fromToken?.chainId === toToken?.chainId &&\n address === recipient\n\n const ctaCopy = useSwapButtonCta({\n fromToken,\n toToken,\n multiWalletSupportEnabled,\n isValidFromAddress,\n fromChainWalletVMSupported,\n isValidToAddress,\n toChainWalletVMSupported,\n fromChain,\n toChain,\n isSameCurrencySameRecipientSwap,\n debouncedInputAmountValue,\n debouncedOutputAmountValue,\n hasInsufficientBalance,\n isInsufficientLiquidityError,\n quote,\n operation: quote?.details?.operation\n })\n\n usePreviousValueChange(\n isCapacityExceededError,\n !isFetchingQuote,\n (capacityExceeded) => {\n if (capacityExceeded) {\n onAnalyticEvent?.(EventNames.CTA_MAX_CAPACITY_PROMPTED, {\n inputAmount: debouncedInputAmountValue,\n outputAmount: debouncedOutputAmountValue\n })\n }\n }\n )\n\n const swap = useCallback(async () => {\n let submittedEvents: string[] = []\n\n const swapErrorHandler = (\n error: any,\n currentSteps?: Execute['steps'] | null\n ) => {\n const errorMessage = errorToJSON(\n error?.response?.data?.message\n ? new Error(error?.response?.data?.message)\n : error\n )\n if (\n error &&\n ((typeof error.message === 'string' &&\n error.message.includes('rejected')) ||\n (typeof error === 'string' && error.includes('rejected')) ||\n (typeof error === 'string' && error.includes('Approval Denied')) ||\n (typeof error === 'string' && error.includes('denied transaction')) ||\n (typeof error.message === 'string' &&\n error.message.includes('Approval Denied')) ||\n (typeof error.message === 'string' &&\n error.message.includes('Plugin Closed')) ||\n (typeof error.message === 'string' &&\n error.message.includes('denied transaction')) ||\n (typeof error.message === 'string' &&\n error.message.includes('Failed to initialize request') &&\n fromChain?.id === 2741)) // Abstract @TODO: remove once privy improves handling rejected transactions\n ) {\n // Close the transaction modal if the user rejects the tx\n setTransactionModalOpen(false)\n onAnalyticEvent?.(EventNames.USER_REJECTED_WALLET, {\n error_message: errorMessage\n })\n return\n }\n\n const { step, stepItem } = getCurrentStep(currentSteps)\n const swapEventData = {\n ...getSwapEventData(\n quote?.details,\n quote?.fees,\n currentSteps ?? null,\n linkedWallet?.connector,\n quoteParameters\n ),\n error_message: errorMessage\n }\n const isApproval = step?.id === 'approve'\n const errorEvent = isApproval\n ? EventNames.APPROVAL_ERROR\n : EventNames.DEPOSIT_ERROR\n\n //Filter out receipt/deposit transaction errors, those are approval/deposit errors\n const isTransactionConfirmationError =\n (error &&\n typeof error.message === 'string' &&\n error.message.includes('TransactionConfirmationError')) ||\n (error.name && error.name.includes('TransactionConfirmationError'))\n if (\n stepItem?.receipt &&\n stepItem.check &&\n !isTransactionConfirmationError &&\n (typeof stepItem.receipt === 'object' && 'status' in stepItem.receipt\n ? stepItem.receipt.status !== 'reverted'\n : true) &&\n (!stepItem.checkStatus || stepItem.checkStatus !== 'unknown')\n ) {\n //In some cases there's a race condition where an error is thrown before the steps get a chance to call\n //the callback which triggers the success event. This is a workaround to ensure the success event is triggered when\n //we have a receipt and require a fill check if we haven't already send the success event.\n const successEvent = isApproval\n ? EventNames.APPROVAL_SUCCESS\n : EventNames.DEPOSIT_SUCCESS\n if (!submittedEvents.includes(successEvent)) {\n onAnalyticEvent?.(successEvent, swapEventData)\n submittedEvents.push(successEvent)\n //To preserve the order of events we need to delay sending the fill error event but mark that we did send it to avoid duplicates\n setTimeout(() => {\n onAnalyticEvent?.(EventNames.FILL_ERROR, swapEventData)\n }, 20)\n } else {\n onAnalyticEvent?.(EventNames.FILL_ERROR, swapEventData)\n }\n } else if (\n !stepItem?.receipt ||\n (typeof stepItem.receipt === 'object' &&\n 'status' in stepItem.receipt &&\n stepItem.receipt.status === 'reverted')\n ) {\n onAnalyticEvent?.(errorEvent, swapEventData)\n } else {\n onAnalyticEvent?.(EventNames.SWAP_ERROR, swapEventData)\n }\n\n haptic('error')\n setSwapError(errorMessage)\n onSwapError?.(errorMessage, { ...quote, steps: currentSteps } as Execute)\n }\n\n try {\n const swapEventData = getSwapEventData(\n quote?.details,\n quote?.fees,\n quote?.steps ? (quote?.steps as Execute['steps']) : null,\n linkedWallet?.connector,\n quoteParameters\n )\n onAnalyticEvent?.(EventNames.SWAP_CTA_CLICKED, swapEventData)\n setWaitingForSteps(true)\n\n if (!executeSwap) {\n throw new Error('Missing a quote')\n }\n\n if (!wallet && !walletClient.data) {\n throw new Error('Missing a wallet')\n }\n\n setSteps(quote?.steps as Execute['steps'])\n setQuoteInProgress(quote as Execute)\n setTransactionModalOpen(true)\n\n const _wallet =\n wallet ?? adaptViemWallet(walletClient.data as WalletClient)\n\n const activeWalletChainId = await _wallet?.getChainId()\n const activeWalletChain = relayClient?.chains?.find(\n (chain) => chain.id === activeWalletChainId\n )\n let targetChainId = fromToken?.chainId\n //Special case for Hyperliquid, to sign txs on an evm chain\n if (fromToken?.chainId === 1337) {\n targetChainId =\n activeWalletChain?.vmType !== 'evm' ? 1 : activeWalletChainId\n }\n\n if (fromToken && targetChainId && targetChainId !== activeWalletChainId) {\n onAnalyticEvent?.(EventNames.SWAP_SWITCH_NETWORK, {\n activeWalletChainId,\n ...swapEventData\n })\n await _wallet?.switchChain(targetChainId)\n }\n\n let _currentSteps: Execute['steps'] | undefined = undefined\n\n const execPromise = executeSwap(({ steps: currentSteps }) => {\n setSteps(currentSteps)\n _currentSteps = currentSteps\n\n const { step, stepItem } = getCurrentStep(currentSteps)\n const swapEventData = getSwapEventData(\n quote?.details,\n quote?.fees,\n currentSteps,\n linkedWallet?.connector,\n quoteParameters\n )\n if (step && stepItem) {\n //@ts-ignore\n const isApproval = step.id === 'approve' || step.id === 'approval'\n let submittedEvent = isApproval\n ? EventNames.APPROVAL_SUBMITTED\n : EventNames.DEPOSIT_SUBMITTED\n const successEvent = isApproval\n ? EventNames.APPROVAL_SUCCESS\n : EventNames.DEPOSIT_SUCCESS\n const isBatchTransaction = Boolean(\n Array.isArray(step.items) &&\n step.items.length > 1 &&\n wallet?.handleBatchTransactionStep\n )\n if (!isApproval && isBatchTransaction) {\n submittedEvent = EventNames.BATCH_TX_SUBMITTED\n }\n if (\n !submittedEvents.includes(submittedEvent) &&\n !stepItem.receipt &&\n stepItem?.txHashes &&\n stepItem?.txHashes?.length > 0\n ) {\n submittedEvents.push(submittedEvent)\n onAnalyticEvent?.(submittedEvent, swapEventData)\n } else if (\n !submittedEvents.includes(successEvent) &&\n ((stepItem.receipt &&\n !(\n typeof stepItem.receipt === 'object' &&\n 'status' in stepItem.receipt &&\n stepItem.receipt.status === 'reverted'\n )) ||\n stepItem.checkStatus === 'pending')\n ) {\n onAnalyticEvent?.(successEvent, swapEventData)\n submittedEvents.push(successEvent)\n }\n\n if (\n stepItem.status === 'complete' &&\n stepItem.check &&\n !submittedEvents.includes(EventNames.FILL_SUCCESS)\n ) {\n //Sometimes a fill may be quicker than the tx receipt is available, so we need to handle this scenario\n if (\n !submittedEvents.includes(EventNames.DEPOSIT_SUCCESS) &&\n !isBatchTransaction\n ) {\n onAnalyticEvent?.(EventNames.DEPOSIT_SUCCESS, swapEventData)\n submittedEvents.push(EventNames.DEPOSIT_SUCCESS)\n //To preserve the order of events we need to delay sending the fill success event but mark that we did send it to avoid duplicates\n setTimeout(() => {\n onAnalyticEvent?.(EventNames.FILL_SUCCESS, swapEventData)\n }, 20)\n } else {\n onAnalyticEvent?.(EventNames.FILL_SUCCESS, swapEventData)\n }\n submittedEvents.push(EventNames.FILL_SUCCESS)\n }\n } else if (\n currentSteps?.every((step) =>\n step.items?.every((item) => item.status === 'complete')\n ) &&\n !submittedEvents.includes(EventNames.FILL_SUCCESS)\n ) {\n //Sometimes a fill may be quicker than the tx receipt is available, so we need to handle this scenario\n if (\n !submittedEvents.includes(EventNames.DEPOSIT_SUCCESS) &&\n !submittedEvents.includes(EventNames.BATCH_TX_SUBMITTED)\n ) {\n onAnalyticEvent?.(EventNames.DEPOSIT_SUCCESS, swapEventData)\n submittedEvents.push(EventNames.DEPOSIT_SUCCESS)\n //To preserve the order of events we need to delay sending the fill success event but mark that we did send it to avoid duplicates\n setTimeout(() => {\n onAnalyticEvent?.(EventNames.FILL_SUCCESS, swapEventData)\n }, 20)\n } else {\n onAnalyticEvent?.(EventNames.FILL_SUCCESS, swapEventData)\n }\n submittedEvents.push(EventNames.FILL_SUCCESS)\n }\n })\n\n // Store the AbortController for potential cancellation immediately\n if (\n execPromise &&\n typeof execPromise === 'object' &&\n 'abortController' in execPromise\n ) {\n setAbortController((execPromise as any).abortController)\n }\n\n execPromise\n ?.catch((error: any) => {\n swapErrorHandler(error, _currentSteps)\n })\n .finally(() => {\n setWaitingForSteps(false)\n setAbortController(null)\n invalidateBalanceQueries()\n })\n } catch (error: any) {\n swapErrorHandler(error)\n setWaitingForSteps(false)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n relayClient,\n address,\n connector,\n wallet,\n walletClient,\n fromToken,\n toToken,\n customToAddress,\n recipient,\n debouncedInputAmountValue,\n debouncedOutputAmountValue,\n tradeType,\n waitingForSteps,\n executeSwap,\n setSteps,\n setQuoteInProgress,\n invalidateBalanceQueries,\n linkedWallet,\n abortController\n ])\n\n return (\n <>\n {children({\n quote,\n steps,\n setSteps,\n swap,\n transactionModalOpen,\n feeBreakdown,\n fromToken,\n setFromToken,\n toToken,\n setToToken,\n swapError,\n error,\n toDisplayName,\n address,\n recipient,\n customToAddress,\n setCustomToAddress,\n tradeType,\n setTradeType,\n details,\n isSameCurrencySameRecipientSwap,\n debouncedInputAmountValue,\n debouncedAmountInputControls,\n setAmountInputValue,\n amountInputValue,\n amountOutputValue,\n debouncedOutputAmountValue,\n debouncedAmountOutputControls,\n setAmountOutputValue,\n toBalance,\n toBalancePending,\n isLoadingToBalance,\n isFetchingQuote,\n isLoadingFromBalance,\n fromBalance,\n fromBalancePending,\n highRelayerServiceFee,\n relayerFeeProportion,\n hasInsufficientBalance,\n isInsufficientLiquidityError,\n isCapacityExceededError,\n isCouldNotExecuteError,\n ctaCopy,\n isFromNative,\n slippageTolerance: currentSlippageTolerance,\n timeEstimate,\n isSvmSwap,\n isBvmSwap,\n isValidFromAddress,\n isValidToAddress,\n supportedWalletVMs,\n fromChainWalletVMSupported,\n toChainWalletVMSupported,\n isRecipientLinked,\n recipientWalletSupportsChain,\n gasTopUpEnabled,\n setGasTopUpEnabled,\n gasTopUpBalance,\n gasTopUpRequired,\n gasTopUpAmount,\n gasTopUpAmountUsd,\n invalidateBalanceQueries,\n invalidateQuoteQuery,\n setDetails,\n setSwapError,\n quoteInProgress,\n setQuoteInProgress,\n linkedWallet,\n quoteParameters,\n abortController,\n fromTokenPriceData,\n toTokenPriceData,\n isLoadingFromTokenPrice,\n isLoadingToTokenPrice\n })}\n </>\n )\n}\n\nexport default SwapWidgetRenderer\n"]}
1
+ {"version":3,"file":"SwapWidgetRenderer.js","sourceRoot":"","sources":["../../../../src/components/widgets/SwapWidgetRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Dispatch, FC, ReactNode, SetStateAction } from 'react'\nimport { useCallback, useContext, useEffect, useMemo, useState } from 'react'\nimport {\n useCurrencyBalance,\n useRelayClient,\n useDebounceState,\n useWalletAddress,\n useDisconnected,\n usePreviousValueChange,\n useIsWalletCompatible,\n useFallbackState,\n useGasTopUpRequired,\n useExplicitDeposit,\n useDisplayName,\n useLighterAccount\n} from '../../hooks/index.js'\nimport type { Address, WalletClient } from 'viem'\nimport { formatUnits, parseUnits } from 'viem'\nimport { useAccount, useWalletClient } from 'wagmi'\nimport { useCapabilities } from 'wagmi/experimental'\nimport type { Token } from '../../types/index.js'\nimport { useQueryClient } from '@tanstack/react-query'\nimport type { ChainVM, Execute } from '@relayprotocol/relay-sdk'\nimport {\n calculatePriceTimeEstimate,\n calculateRelayerFeeProportionUsd,\n extractQuoteId,\n getCurrentStep,\n getSwapEventData,\n isHighRelayerServiceFeeUsd,\n parseFees\n} from '../../utils/quote.js'\nimport { useQuote, useTokenPrice } from '@relayprotocol/relay-kit-hooks'\nimport { EventNames } from '../../constants/events.js'\nimport {\n ProviderOptionsContext,\n useHapticEvent\n} from '../../providers/RelayKitProvider.js'\nimport type { DebouncedState } from 'usehooks-ts'\nimport type { AdaptedWallet } from '@relayprotocol/relay-sdk'\nimport type { LinkedWallet } from '../../types/index.js'\nimport {\n addressWithFallback,\n isValidAddress,\n findSupportedWallet,\n isChainVmTypeSupported\n} from '../../utils/address.js'\nimport { adaptViemWallet } from '@relayprotocol/relay-sdk'\nimport { errorToJSON } from '../../utils/errors.js'\nimport { useSwapButtonCta } from '../../hooks/widget/useSwapButtonCta.js'\nimport { sha256 } from '../../utils/hashing.js'\nimport { get15MinuteInterval } from '../../utils/time.js'\nimport { isLighterAddress } from '../../utils/lighter.js'\nimport type { FeeBreakdown } from '../../types/FeeBreakdown.js'\n\nexport type TradeType = 'EXACT_INPUT' | 'EXPECTED_OUTPUT'\n\ntype SwapWidgetRendererProps = {\n transactionModalOpen: boolean\n setTransactionModalOpen: React.Dispatch<React.SetStateAction<boolean>>\n depositAddressModalOpen: boolean\n children: (props: ChildrenProps) => ReactNode\n fromToken?: Token\n setFromToken?: (token?: Token) => void\n toToken?: Token\n setToToken?: (token?: Token) => void\n defaultToAddress?: Address\n defaultAmount?: string\n defaultTradeType?: TradeType\n slippageTolerance?: string\n context: 'Swap' | 'Deposit' | 'Withdraw'\n wallet?: AdaptedWallet\n linkedWallets?: LinkedWallet[]\n multiWalletSupportEnabled?: boolean\n supportedWalletVMs: Omit<ChainVM, 'hypevm' | 'lvm'>[]\n onConnectWallet?: () => void\n onAnalyticEvent?: (eventName: string, data?: any) => void\n onSwapError?: (error: string, data?: Execute) => void\n}\n\nexport type ChildrenProps = {\n quote?: ReturnType<typeof useQuote>['data']\n steps: Execute['steps'] | null\n setSteps: Dispatch<React.SetStateAction<Execute['steps'] | null>>\n swap: () => void\n transactionModalOpen: boolean\n details: null | Execute['details']\n feeBreakdown: FeeBreakdown | null\n fromToken?: Token\n setFromToken: Dispatch<React.SetStateAction<Token | undefined>>\n toToken?: Token\n setToToken: Dispatch<React.SetStateAction<Token | undefined>>\n swapError: Error | null\n error: Error | null\n toDisplayName?: string\n address?: Address | string\n recipient?: Address | string\n customToAddress?: Address | string\n setCustomToAddress: Dispatch<\n React.SetStateAction<Address | string | undefined>\n >\n tradeType: TradeType\n setTradeType: Dispatch<React.SetStateAction<TradeType>>\n isSameCurrencySameRecipientSwap: boolean\n amountInputValue: string\n debouncedInputAmountValue: string\n setAmountInputValue: (value: string) => void\n debouncedAmountInputControls: DebouncedState<(value: string) => void>\n amountOutputValue: string\n debouncedOutputAmountValue: string\n setAmountOutputValue: (value: string) => void\n debouncedAmountOutputControls: DebouncedState<(value: string) => void>\n toBalance?: bigint\n toBalancePending?: boolean\n fromBalance?: bigint\n fromBalancePending?: boolean\n isFetchingQuote: boolean\n isLoadingToBalance: boolean\n isLoadingFromBalance: boolean\n highRelayerServiceFee: boolean\n relayerFeeProportion: bigint\n hasInsufficientBalance: boolean\n isInsufficientLiquidityError?: boolean\n isCapacityExceededError?: boolean\n isCouldNotExecuteError?: boolean\n ctaCopy: string\n isFromNative: boolean\n slippageTolerance?: string\n timeEstimate?: { time: number; formattedTime: string }\n isSvmSwap: boolean\n isBvmSwap: boolean\n isValidFromAddress: boolean\n isValidToAddress: boolean\n supportedWalletVMs: Omit<ChainVM, 'hypevm' | 'lvm'>[]\n fromChainWalletVMSupported: boolean\n toChainWalletVMSupported: boolean\n isRecipientLinked?: boolean\n recipientWalletSupportsChain?: boolean\n gasTopUpEnabled: boolean\n setGasTopUpEnabled: Dispatch<React.SetStateAction<boolean>>\n gasTopUpBalance?: bigint\n gasTopUpRequired: boolean\n gasTopUpAmount?: bigint\n gasTopUpAmountUsd?: string\n quoteInProgress: null | Execute\n setQuoteInProgress: Dispatch<React.SetStateAction<null | Execute>>\n linkedWallet?: LinkedWallet\n quoteParameters?: Parameters<typeof useQuote>['2']\n invalidateBalanceQueries: () => void\n invalidateQuoteQuery: () => void\n setDetails: Dispatch<React.SetStateAction<Execute['details'] | null>>\n setSwapError: Dispatch<React.SetStateAction<Error | null>>\n abortController: AbortController | null\n fromTokenPriceData: ReturnType<typeof useTokenPrice>['data']\n isLoadingFromTokenPrice: boolean\n toTokenPriceData: ReturnType<typeof useTokenPrice>['data']\n isLoadingToTokenPrice: boolean\n}\n\n// shared query options for useTokenPrice\nconst tokenPriceQueryOptions = {\n staleTime: 60 * 1000, // 1 minute\n refetchInterval: 30 * 1000, // 30 seconds\n refetchOnWindowFocus: false\n}\n\nconst SwapWidgetRenderer: FC<SwapWidgetRendererProps> = ({\n transactionModalOpen,\n setTransactionModalOpen,\n depositAddressModalOpen,\n fromToken: _fromToken,\n setFromToken: _setFromToken,\n toToken: _toToken,\n setToToken: _setToToken,\n defaultToAddress,\n defaultAmount,\n defaultTradeType,\n slippageTolerance,\n context,\n wallet,\n multiWalletSupportEnabled = false,\n linkedWallets,\n supportedWalletVMs,\n children,\n onAnalyticEvent,\n onSwapError\n}) => {\n const haptic = useHapticEvent()\n const [fromToken, setFromToken] = useFallbackState(\n _setFromToken ? _fromToken : undefined,\n _setFromToken\n ? [\n _fromToken,\n _setFromToken as Dispatch<SetStateAction<Token | undefined>>\n ]\n : undefined\n )\n const [toToken, setToToken] = useFallbackState(\n _setToToken ? _toToken : undefined,\n _setToToken\n ? [_toToken, _setToToken as Dispatch<SetStateAction<Token | undefined>>]\n : undefined\n )\n const providerOptionsContext = useContext(ProviderOptionsContext)\n const connectorKeyOverrides = providerOptionsContext.vmConnectorKeyOverrides\n const relayClient = useRelayClient()\n const { connector } = useAccount()\n const walletClient = useWalletClient()\n const [customToAddress, setCustomToAddress] = useState<\n Address | string | undefined\n >(defaultToAddress)\n const address = useWalletAddress(wallet, linkedWallets)\n\n const [tradeType, setTradeType] = useState<'EXACT_INPUT' | 'EXPECTED_OUTPUT'>(\n defaultTradeType ?? 'EXACT_INPUT'\n )\n const queryClient = useQueryClient()\n const [steps, setSteps] = useState<null | Execute['steps']>(null)\n const [quoteInProgress, setQuoteInProgress] = useState<null | Execute>(null)\n const [waitingForSteps, setWaitingForSteps] = useState(false)\n const [details, setDetails] = useState<null | Execute['details']>(null)\n const [gasTopUpEnabled, setGasTopUpEnabled] = useState(false)\n const [abortController, setAbortController] =\n useState<AbortController | null>(null)\n\n const {\n value: amountInputValue,\n debouncedValue: debouncedInputAmountValue,\n setValue: setAmountInputValue,\n debouncedControls: debouncedAmountInputControls\n } = useDebounceState<string>(\n !defaultTradeType || defaultTradeType === 'EXACT_INPUT'\n ? (defaultAmount ?? '')\n : '',\n 500\n )\n const {\n value: amountOutputValue,\n debouncedValue: debouncedOutputAmountValue,\n setValue: setAmountOutputValue,\n debouncedControls: debouncedAmountOutputControls\n } = useDebounceState<string>(\n defaultTradeType === 'EXPECTED_OUTPUT' ? (defaultAmount ?? '') : '',\n 500\n )\n\n const [swapError, setSwapError] = useState<Error | null>(null)\n\n const toChain = relayClient?.chains.find(\n (chain) => chain.id === toToken?.chainId\n )\n const fromChain = relayClient?.chains?.find(\n (chain) => chain.id === fromToken?.chainId\n )\n\n const fromChainWalletVMSupported =\n isChainVmTypeSupported(fromChain?.vmType, supportedWalletVMs) ||\n fromChain?.id === 1337\n const toChainWalletVMSupported =\n isChainVmTypeSupported(toChain?.vmType, supportedWalletVMs)\n\n const defaultRecipient = useMemo(() => {\n const _linkedWallet = linkedWallets?.find(\n (linkedWallet) =>\n address ===\n (linkedWallet.vmType === 'evm'\n ? linkedWallet.address.toLowerCase()\n : linkedWallet.address)\n )\n const _isValidToAddress = isValidAddress(\n toChain?.vmType,\n customToAddress ?? '',\n toChain?.id,\n !customToAddress && _linkedWallet?.address === address\n ? _linkedWallet?.connector\n : undefined,\n connectorKeyOverrides\n )\n if (\n multiWalletSupportEnabled &&\n toChain &&\n linkedWallets &&\n !_isValidToAddress\n ) {\n const supportedAddress = findSupportedWallet(\n toChain,\n customToAddress,\n linkedWallets,\n connectorKeyOverrides\n )\n\n return supportedAddress\n }\n }, [\n multiWalletSupportEnabled,\n toChain,\n customToAddress,\n address,\n linkedWallets,\n setCustomToAddress\n ])\n\n const recipient = customToAddress ?? defaultRecipient ?? address\n\n const {\n value: fromBalance,\n queryKey: fromBalanceQueryKey,\n isLoading: isLoadingFromBalance,\n isError: fromBalanceErrorFetching,\n isDuneBalance: fromBalanceIsDune,\n hasPendingBalance: fromBalancePending\n } = useCurrencyBalance({\n chain: fromChain,\n address: address,\n currency: fromToken?.address ? (fromToken.address as Address) : undefined,\n enabled: fromToken !== undefined,\n refreshInterval: undefined,\n wallet\n })\n\n const {\n value: toBalance,\n queryKey: toBalanceQueryKey,\n isLoading: isLoadingToBalance,\n isDuneBalance: toBalanceIsDune,\n hasPendingBalance: toBalancePending\n } = useCurrencyBalance({\n chain: toChain,\n address: recipient,\n currency: toToken?.address ? (toToken.address as Address) : undefined,\n enabled: toToken !== undefined,\n refreshInterval: undefined,\n wallet\n })\n\n const invalidateBalanceQueries = useCallback(() => {\n const invalidatePeriodically = (invalidateFn: () => void) => {\n let maxRefreshes = 4\n let refreshCount = 0\n const timer = setInterval(() => {\n if (maxRefreshes === refreshCount) {\n clearInterval(timer)\n return\n }\n refreshCount++\n invalidateFn()\n }, 3000)\n }\n\n queryClient.invalidateQueries({ queryKey: ['useDuneBalances'] })\n\n // Dune balances are sometimes stale, because of this we need to aggressively fetch them\n // for a predetermined period to make sure we get back a fresh response\n if (fromBalanceIsDune) {\n invalidatePeriodically(() => {\n queryClient.invalidateQueries({ queryKey: fromBalanceQueryKey })\n })\n } else {\n queryClient.invalidateQueries({ queryKey: fromBalanceQueryKey })\n }\n if (toBalanceIsDune) {\n invalidatePeriodically(() => {\n queryClient.invalidateQueries({ queryKey: toBalanceQueryKey })\n })\n } else {\n queryClient.invalidateQueries({ queryKey: toBalanceQueryKey })\n }\n }, [\n queryClient,\n fromBalanceQueryKey,\n toBalanceQueryKey,\n toBalanceIsDune,\n fromBalanceIsDune,\n address\n ])\n const { data: capabilities } = useCapabilities({\n query: {\n enabled:\n connector &&\n (connector.id === 'coinbaseWalletSDK' || connector.id === 'coinbase')\n }\n })\n const hasAuxiliaryFundsSupport = Boolean(\n fromToken?.chainId\n ? capabilities?.[fromToken?.chainId]?.auxiliaryFunds?.supported\n : false\n )\n\n const isSvmSwap = fromChain?.vmType === 'svm' || toChain?.vmType === 'svm'\n const isBvmSwap = fromChain?.vmType === 'bvm' || toChain?.vmType === 'bvm'\n const linkedWallet = linkedWallets?.find(\n (linkedWallet) =>\n address ===\n (linkedWallet.vmType === 'evm'\n ? linkedWallet.address.toLowerCase()\n : linkedWallet.address) || linkedWallet.address === address\n )\n\n const isRecipientLinked =\n (recipient\n ? linkedWallets?.find((wallet) => wallet.address === recipient)\n : undefined) !== undefined\n\n const isValidFromAddress = isValidAddress(\n fromChain?.vmType,\n address ?? '',\n fromChain?.id,\n linkedWallet?.connector,\n connectorKeyOverrides\n )\n const fromAddressWithFallback = addressWithFallback(\n fromChain?.vmType,\n address,\n fromChain?.id,\n linkedWallet?.connector,\n connectorKeyOverrides\n )\n\n const isValidToAddress = isValidAddress(\n toChain?.vmType,\n recipient ?? '',\n toChain?.id\n )\n\n const toAddressWithFallback = addressWithFallback(\n toChain?.vmType,\n recipient,\n toChain?.id\n )\n\n const { displayName: toDisplayName } = useDisplayName(\n recipient,\n toChain?.vmType,\n toChain?.id\n )\n\n const [currentSlippageTolerance, setCurrentSlippageTolerance] = useState<\n string | undefined\n >(slippageTolerance)\n\n useEffect(() => {\n setCurrentSlippageTolerance(slippageTolerance)\n }, [slippageTolerance])\n\n const {\n required: gasTopUpRequired,\n amount: _gasTopUpAmount,\n amountUsd: _gasTopUpAmountUsd,\n balance: gasTopUpBalance\n } = useGasTopUpRequired(toChain, fromChain, toToken, recipient)\n\n // Retrieve the price of the `from` token\n const { data: fromTokenPriceData, isLoading: isLoadingFromTokenPrice } =\n useTokenPrice(\n relayClient?.baseApiUrl,\n {\n address: fromToken?.address ?? '',\n chainId: fromToken?.chainId ?? 0,\n referrer: relayClient?.source\n },\n {\n enabled: !!(fromToken?.address && fromToken.chainId),\n ...tokenPriceQueryOptions\n }\n )\n\n // Retrieve the price of the `to` token\n const { data: toTokenPriceData, isLoading: isLoadingToTokenPrice } =\n useTokenPrice(\n relayClient?.baseApiUrl,\n {\n address: toToken?.address ?? '',\n chainId: toToken?.chainId ?? 0,\n referrer: relayClient?.source\n },\n {\n enabled: !!(toToken?.address && toToken.chainId),\n ...tokenPriceQueryOptions\n }\n )\n\n const isFromNative = fromToken?.address === fromChain?.currency?.address\n\n const explicitDeposit = useExplicitDeposit(\n wallet,\n fromToken?.chainId,\n fromChain?.vmType,\n address\n )\n\n const shouldSetQuoteParameters = fromToken && toToken\n\n const quoteParameters: Parameters<typeof useQuote>['2'] =\n shouldSetQuoteParameters\n ? {\n user: fromAddressWithFallback,\n originChainId: fromToken.chainId,\n destinationChainId: toToken.chainId,\n originCurrency: fromToken.address,\n destinationCurrency: toToken.address,\n recipient: toAddressWithFallback,\n tradeType,\n appFees: providerOptionsContext.appFees,\n amount:\n tradeType === 'EXACT_INPUT'\n ? parseUnits(\n debouncedInputAmountValue,\n fromToken.decimals\n ).toString()\n : parseUnits(\n debouncedOutputAmountValue,\n toToken.decimals\n ).toString(),\n referrer: relayClient?.source ?? undefined,\n useDepositAddress: !fromChainWalletVMSupported,\n refundTo: fromToken?.chainId === 1337 ? address : undefined,\n slippageTolerance: slippageTolerance,\n topupGas: gasTopUpEnabled && gasTopUpRequired,\n ...(linkedWallet?.vmType === 'bvm' && wallet?.metadata?.publicKey\n ? {\n additionalData: {\n userPublicKey: wallet?.metadata?.publicKey\n }\n }\n : {}),\n ...(explicitDeposit !== undefined &&\n fromChain?.vmType === 'evm' && {\n explicitDeposit: explicitDeposit\n })\n }\n : undefined\n\n const onQuoteRequested: Parameters<typeof useQuote>['3'] = (\n options,\n config\n ) => {\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...options, interval })\n onAnalyticEvent?.(EventNames.QUOTE_REQUESTED, {\n parameters: options,\n wallet_connector: linkedWallet?.connector,\n chain_id_in: options?.originChainId,\n chain_id_out: options?.destinationChainId,\n http_config: config,\n quote_request_id: quoteRequestId\n })\n }\n\n const onQuoteReceived: Parameters<typeof useQuote>['4'] = (\n { details, steps },\n options\n ) => {\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...options, interval })\n onAnalyticEvent?.(EventNames.QUOTE_RECEIVED, {\n parameters: options,\n wallet_connector: linkedWallet?.connector,\n amount_in: details?.currencyIn?.amountFormatted,\n amount_in_raw: details?.currencyIn?.amount,\n currency_in: details?.currencyIn?.currency?.symbol,\n chain_id_in: details?.currencyIn?.currency?.chainId,\n amount_out: details?.currencyOut?.amountFormatted,\n amount_out_raw: details?.currencyOut?.amount,\n currency_out: details?.currencyOut?.currency?.symbol,\n chain_id_out: details?.currencyOut?.currency?.chainId,\n slippage_tolerance_destination_percentage:\n details?.slippageTolerance?.destination?.percent,\n slippage_tolerance_origin_percentage:\n details?.slippageTolerance?.origin?.percent,\n steps,\n quote_request_id: quoteRequestId,\n quote_id: steps ? extractQuoteId(steps) : undefined\n })\n }\n\n const quoteFetchingEnabled = Boolean(\n relayClient &&\n ((tradeType === 'EXACT_INPUT' &&\n debouncedInputAmountValue &&\n debouncedInputAmountValue.length > 0 &&\n Number(debouncedInputAmountValue) !== 0) ||\n (tradeType === 'EXPECTED_OUTPUT' &&\n debouncedOutputAmountValue &&\n debouncedOutputAmountValue.length > 0 &&\n Number(debouncedOutputAmountValue) !== 0)) &&\n fromToken !== undefined &&\n toToken !== undefined &&\n !transactionModalOpen &&\n !depositAddressModalOpen\n )\n\n const {\n data: _quoteData,\n error: quoteError,\n isFetching: isFetchingQuote,\n executeQuote: executeSwap,\n queryKey: quoteQueryKey\n } = useQuote(\n relayClient ? relayClient : undefined,\n wallet,\n quoteParameters,\n onQuoteRequested,\n onQuoteReceived,\n {\n refetchOnWindowFocus: false,\n enabled: quoteFetchingEnabled && quoteParameters !== undefined,\n refetchInterval:\n !transactionModalOpen &&\n !depositAddressModalOpen &&\n debouncedInputAmountValue === amountInputValue &&\n debouncedOutputAmountValue === amountOutputValue\n ? 12000\n : undefined\n },\n (e: any) => {\n const errorMessage = errorToJSON(\n e?.response?.data?.message ? new Error(e?.response?.data?.message) : e\n )\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...quoteParameters, interval })\n onAnalyticEvent?.(EventNames.QUOTE_ERROR, {\n wallet_connector: linkedWallet?.connector,\n error_message: errorMessage,\n parameters: quoteParameters,\n quote_request_id: quoteRequestId,\n status_code: e?.response?.status ?? e?.status ?? ''\n })\n },\n undefined\n )\n\n const invalidateQuoteQuery = useCallback(() => {\n queryClient.invalidateQueries({ queryKey: quoteQueryKey })\n }, [queryClient, quoteQueryKey])\n let error =\n _quoteData || (isFetchingQuote && quoteFetchingEnabled) ? null : quoteError\n let quote = error ? undefined : _quoteData\n const gasTopUpAmount = quote?.details?.currencyGasTopup?.amount\n ? BigInt(quote?.details?.currencyGasTopup?.amount)\n : _gasTopUpAmount\n const gasTopUpAmountUsd =\n quote?.details?.currencyGasTopup?.amountUsd ?? _gasTopUpAmountUsd\n\n useDisconnected(address, () => {\n setCustomToAddress(undefined)\n })\n\n // Auto-select Lighter account when switching to LVM chain\n const isLighterChain = toChain?.vmType === 'lvm'\n const { data: connectedLighterAccount } = useLighterAccount(\n isLighterChain && address ? address : undefined\n )\n\n useEffect(() => {\n if (\n isLighterChain &&\n connectedLighterAccount?.index &&\n // Only auto-set if no valid Lighter address is already set\n (!customToAddress || !isLighterAddress(customToAddress))\n ) {\n setCustomToAddress(connectedLighterAccount.index.toString())\n }\n }, [isLighterChain, connectedLighterAccount, customToAddress])\n\n useEffect(() => {\n if (tradeType === 'EXACT_INPUT') {\n const amountOut = quote?.details?.currencyOut?.amount ?? ''\n setAmountOutputValue(\n amountOut !== ''\n ? formatUnits(\n BigInt(amountOut),\n Number(quote?.details?.currencyOut?.currency?.decimals ?? 18)\n )\n : ''\n )\n } else if (tradeType === 'EXPECTED_OUTPUT') {\n const amountIn = quote?.details?.currencyIn?.amount ?? ''\n setAmountInputValue(\n amountIn !== ''\n ? formatUnits(\n BigInt(amountIn),\n Number(quote?.details?.currencyIn?.currency?.decimals ?? 18)\n )\n : ''\n )\n }\n debouncedAmountInputControls.flush()\n debouncedAmountOutputControls.flush()\n }, [quote, tradeType])\n\n const feeBreakdown = useMemo(() => {\n const chains = relayClient?.chains\n const fromChain = chains?.find((chain) => chain.id === fromToken?.chainId)\n const toChain = chains?.find((chain) => chain.id === toToken?.chainId)\n return fromToken && toToken && fromChain && toChain && quote\n ? parseFees(toChain, fromChain, quote)\n : null\n }, [quote, fromToken, toToken, relayClient])\n\n const totalAmount = BigInt(quote?.details?.currencyIn?.amount ?? 0n)\n\n const hasInsufficientBalance = Boolean(\n !fromBalanceErrorFetching &&\n totalAmount &&\n address &&\n (fromBalance ?? 0n) < totalAmount &&\n !hasAuxiliaryFundsSupport &&\n fromChainWalletVMSupported\n )\n\n const fetchQuoteErrorMessage = error\n ? error?.message\n ? (error?.message as string)\n : 'Unknown Error'\n : null\n const fetchQuoteDataErrorMessage = error\n ? (error as any)?.response?.data?.message\n ? ((error as any)?.response?.data.message as string)\n : 'Unknown Error'\n : null\n const isInsufficientLiquidityError = Boolean(\n fetchQuoteErrorMessage?.includes('No quotes available')\n )\n const isCapacityExceededError =\n fetchQuoteDataErrorMessage?.includes(\n 'Amount is higher than the available liquidity'\n ) || fetchQuoteDataErrorMessage?.includes('Insufficient relayer liquidity')\n const isCouldNotExecuteError =\n fetchQuoteDataErrorMessage?.includes('Could not execute')\n const highRelayerServiceFee = isHighRelayerServiceFeeUsd(quote)\n const relayerFeeProportion = calculateRelayerFeeProportionUsd(quote)\n const timeEstimate = calculatePriceTimeEstimate(quote?.details)\n\n const recipientWalletSupportsChain = useIsWalletCompatible(\n toChain?.id,\n recipient,\n linkedWallets,\n onAnalyticEvent\n )\n\n const isSameCurrencySameRecipientSwap =\n fromToken?.address === toToken?.address &&\n fromToken?.chainId === toToken?.chainId &&\n address === recipient\n\n const ctaCopy = useSwapButtonCta({\n fromToken,\n toToken,\n multiWalletSupportEnabled,\n isValidFromAddress,\n fromChainWalletVMSupported,\n isValidToAddress,\n toChainWalletVMSupported,\n fromChain,\n toChain,\n isSameCurrencySameRecipientSwap,\n debouncedInputAmountValue,\n debouncedOutputAmountValue,\n hasInsufficientBalance,\n isInsufficientLiquidityError,\n quote,\n operation: quote?.details?.operation\n })\n\n usePreviousValueChange(\n isCapacityExceededError,\n !isFetchingQuote,\n (capacityExceeded) => {\n if (capacityExceeded) {\n onAnalyticEvent?.(EventNames.CTA_MAX_CAPACITY_PROMPTED, {\n inputAmount: debouncedInputAmountValue,\n outputAmount: debouncedOutputAmountValue\n })\n }\n }\n )\n\n const swap = useCallback(async () => {\n let submittedEvents: string[] = []\n\n const swapErrorHandler = (\n error: any,\n currentSteps?: Execute['steps'] | null\n ) => {\n const errorMessage = errorToJSON(\n error?.response?.data?.message\n ? new Error(error?.response?.data?.message)\n : error\n )\n if (\n error &&\n ((typeof error.message === 'string' &&\n error.message.toLowerCase().includes('reject')) ||\n (typeof error === 'string' &&\n error.toLowerCase().includes('reject')) ||\n (typeof error === 'string' && error.includes('Approval Denied')) ||\n (typeof error === 'string' && error.includes('denied transaction')) ||\n (typeof error.message === 'string' &&\n error.message.includes('Approval Denied')) ||\n (typeof error.message === 'string' &&\n error.message.includes('Plugin Closed')) ||\n (typeof error.message === 'string' &&\n error.message.includes('denied transaction')) ||\n (typeof error.message === 'string' &&\n error.message.includes('Failed to initialize request') &&\n fromChain?.id === 2741)) // Abstract @TODO: remove once privy improves handling rejected transactions\n ) {\n // Close the transaction modal if the user rejects the tx\n setTransactionModalOpen(false)\n onAnalyticEvent?.(EventNames.USER_REJECTED_WALLET, {\n error_message: errorMessage\n })\n return\n }\n\n const { step, stepItem } = getCurrentStep(currentSteps)\n const swapEventData = {\n ...getSwapEventData(\n quote?.details,\n quote?.fees,\n currentSteps ?? null,\n linkedWallet?.connector,\n quoteParameters\n ),\n error_message: errorMessage\n }\n const isApproval = step?.id === 'approve'\n const errorEvent = isApproval\n ? EventNames.APPROVAL_ERROR\n : EventNames.DEPOSIT_ERROR\n\n //Filter out receipt/deposit transaction errors, those are approval/deposit errors\n const isTransactionConfirmationError =\n (error &&\n typeof error.message === 'string' &&\n error.message.includes('TransactionConfirmationError')) ||\n (error.name && error.name.includes('TransactionConfirmationError'))\n if (\n stepItem?.receipt &&\n stepItem.check &&\n !isTransactionConfirmationError &&\n (typeof stepItem.receipt === 'object' && 'status' in stepItem.receipt\n ? stepItem.receipt.status !== 'reverted'\n : true) &&\n (!stepItem.checkStatus || stepItem.checkStatus !== 'unknown')\n ) {\n //In some cases there's a race condition where an error is thrown before the steps get a chance to call\n //the callback which triggers the success event. This is a workaround to ensure the success event is triggered when\n //we have a receipt and require a fill check if we haven't already send the success event.\n const successEvent = isApproval\n ? EventNames.APPROVAL_SUCCESS\n : EventNames.DEPOSIT_SUCCESS\n if (!submittedEvents.includes(successEvent)) {\n onAnalyticEvent?.(successEvent, swapEventData)\n submittedEvents.push(successEvent)\n //To preserve the order of events we need to delay sending the fill error event but mark that we did send it to avoid duplicates\n setTimeout(() => {\n onAnalyticEvent?.(EventNames.FILL_ERROR, swapEventData)\n }, 20)\n } else {\n onAnalyticEvent?.(EventNames.FILL_ERROR, swapEventData)\n }\n } else if (\n !stepItem?.receipt ||\n (typeof stepItem.receipt === 'object' &&\n 'status' in stepItem.receipt &&\n stepItem.receipt.status === 'reverted')\n ) {\n onAnalyticEvent?.(errorEvent, swapEventData)\n } else {\n onAnalyticEvent?.(EventNames.SWAP_ERROR, swapEventData)\n }\n\n haptic('error')\n setSwapError(errorMessage)\n onSwapError?.(errorMessage, { ...quote, steps: currentSteps } as Execute)\n }\n\n try {\n const swapEventData = getSwapEventData(\n quote?.details,\n quote?.fees,\n quote?.steps ? (quote?.steps as Execute['steps']) : null,\n linkedWallet?.connector,\n quoteParameters\n )\n onAnalyticEvent?.(EventNames.SWAP_CTA_CLICKED, swapEventData)\n setWaitingForSteps(true)\n\n if (!executeSwap) {\n throw new Error('Missing a quote')\n }\n\n if (!wallet && !walletClient.data) {\n throw new Error('Missing a wallet')\n }\n\n setSteps(quote?.steps as Execute['steps'])\n setQuoteInProgress(quote as Execute)\n setTransactionModalOpen(true)\n\n const _wallet =\n wallet ?? adaptViemWallet(walletClient.data as WalletClient)\n\n const activeWalletChainId = await _wallet?.getChainId()\n const activeWalletChain = relayClient?.chains?.find(\n (chain) => chain.id === activeWalletChainId\n )\n let targetChainId = fromToken?.chainId\n //Special case for Hyperliquid, to sign txs on an evm chain\n if (fromToken?.chainId === 1337) {\n targetChainId =\n activeWalletChain?.vmType !== 'evm' ? 1 : activeWalletChainId\n }\n\n if (fromToken && targetChainId && targetChainId !== activeWalletChainId) {\n onAnalyticEvent?.(EventNames.SWAP_SWITCH_NETWORK, {\n activeWalletChainId,\n ...swapEventData\n })\n await _wallet?.switchChain(targetChainId)\n }\n\n let _currentSteps: Execute['steps'] | undefined = undefined\n\n const execPromise = executeSwap(({ steps: currentSteps }) => {\n setSteps(currentSteps)\n _currentSteps = currentSteps\n\n const { step, stepItem } = getCurrentStep(currentSteps)\n const swapEventData = getSwapEventData(\n quote?.details,\n quote?.fees,\n currentSteps,\n linkedWallet?.connector,\n quoteParameters\n )\n if (step && stepItem) {\n //@ts-ignore\n const isApproval = step.id === 'approve' || step.id === 'approval'\n let submittedEvent = isApproval\n ? EventNames.APPROVAL_SUBMITTED\n : EventNames.DEPOSIT_SUBMITTED\n const successEvent = isApproval\n ? EventNames.APPROVAL_SUCCESS\n : EventNames.DEPOSIT_SUCCESS\n const isBatchTransaction = Boolean(\n Array.isArray(step.items) &&\n step.items.length > 1 &&\n wallet?.handleBatchTransactionStep\n )\n if (!isApproval && isBatchTransaction) {\n submittedEvent = EventNames.BATCH_TX_SUBMITTED\n }\n if (\n !submittedEvents.includes(submittedEvent) &&\n !stepItem.receipt &&\n stepItem?.txHashes &&\n stepItem?.txHashes?.length > 0\n ) {\n submittedEvents.push(submittedEvent)\n onAnalyticEvent?.(submittedEvent, swapEventData)\n } else if (\n !submittedEvents.includes(successEvent) &&\n ((stepItem.receipt &&\n !(\n typeof stepItem.receipt === 'object' &&\n 'status' in stepItem.receipt &&\n stepItem.receipt.status === 'reverted'\n )) ||\n stepItem.checkStatus === 'pending')\n ) {\n onAnalyticEvent?.(successEvent, swapEventData)\n submittedEvents.push(successEvent)\n }\n\n if (\n stepItem.status === 'complete' &&\n stepItem.check &&\n !submittedEvents.includes(EventNames.FILL_SUCCESS)\n ) {\n //Sometimes a fill may be quicker than the tx receipt is available, so we need to handle this scenario\n if (\n !submittedEvents.includes(EventNames.DEPOSIT_SUCCESS) &&\n !isBatchTransaction\n ) {\n onAnalyticEvent?.(EventNames.DEPOSIT_SUCCESS, swapEventData)\n submittedEvents.push(EventNames.DEPOSIT_SUCCESS)\n //To preserve the order of events we need to delay sending the fill success event but mark that we did send it to avoid duplicates\n setTimeout(() => {\n onAnalyticEvent?.(EventNames.FILL_SUCCESS, swapEventData)\n }, 20)\n } else {\n onAnalyticEvent?.(EventNames.FILL_SUCCESS, swapEventData)\n }\n submittedEvents.push(EventNames.FILL_SUCCESS)\n }\n } else if (\n currentSteps?.every((step) =>\n step.items?.every((item) => item.status === 'complete')\n ) &&\n !submittedEvents.includes(EventNames.FILL_SUCCESS)\n ) {\n //Sometimes a fill may be quicker than the tx receipt is available, so we need to handle this scenario\n if (\n !submittedEvents.includes(EventNames.DEPOSIT_SUCCESS) &&\n !submittedEvents.includes(EventNames.BATCH_TX_SUBMITTED)\n ) {\n onAnalyticEvent?.(EventNames.DEPOSIT_SUCCESS, swapEventData)\n submittedEvents.push(EventNames.DEPOSIT_SUCCESS)\n //To preserve the order of events we need to delay sending the fill success event but mark that we did send it to avoid duplicates\n setTimeout(() => {\n onAnalyticEvent?.(EventNames.FILL_SUCCESS, swapEventData)\n }, 20)\n } else {\n onAnalyticEvent?.(EventNames.FILL_SUCCESS, swapEventData)\n }\n submittedEvents.push(EventNames.FILL_SUCCESS)\n }\n })\n\n // Store the AbortController for potential cancellation immediately\n if (\n execPromise &&\n typeof execPromise === 'object' &&\n 'abortController' in execPromise\n ) {\n setAbortController((execPromise as any).abortController)\n }\n\n execPromise\n ?.catch((error: any) => {\n swapErrorHandler(error, _currentSteps)\n })\n .finally(() => {\n setWaitingForSteps(false)\n setAbortController(null)\n invalidateBalanceQueries()\n })\n } catch (error: any) {\n swapErrorHandler(error)\n setWaitingForSteps(false)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n relayClient,\n address,\n connector,\n wallet,\n walletClient,\n fromToken,\n toToken,\n customToAddress,\n recipient,\n debouncedInputAmountValue,\n debouncedOutputAmountValue,\n tradeType,\n waitingForSteps,\n executeSwap,\n setSteps,\n setQuoteInProgress,\n invalidateBalanceQueries,\n linkedWallet,\n abortController\n ])\n\n return (\n <>\n {children({\n quote,\n steps,\n setSteps,\n swap,\n transactionModalOpen,\n feeBreakdown,\n fromToken,\n setFromToken,\n toToken,\n setToToken,\n swapError,\n error,\n toDisplayName,\n address,\n recipient,\n customToAddress,\n setCustomToAddress,\n tradeType,\n setTradeType,\n details,\n isSameCurrencySameRecipientSwap,\n debouncedInputAmountValue,\n debouncedAmountInputControls,\n setAmountInputValue,\n amountInputValue,\n amountOutputValue,\n debouncedOutputAmountValue,\n debouncedAmountOutputControls,\n setAmountOutputValue,\n toBalance,\n toBalancePending,\n isLoadingToBalance,\n isFetchingQuote,\n isLoadingFromBalance,\n fromBalance,\n fromBalancePending,\n highRelayerServiceFee,\n relayerFeeProportion,\n hasInsufficientBalance,\n isInsufficientLiquidityError,\n isCapacityExceededError,\n isCouldNotExecuteError,\n ctaCopy,\n isFromNative,\n slippageTolerance: currentSlippageTolerance,\n timeEstimate,\n isSvmSwap,\n isBvmSwap,\n isValidFromAddress,\n isValidToAddress,\n supportedWalletVMs,\n fromChainWalletVMSupported,\n toChainWalletVMSupported,\n isRecipientLinked,\n recipientWalletSupportsChain,\n gasTopUpEnabled,\n setGasTopUpEnabled,\n gasTopUpBalance,\n gasTopUpRequired,\n gasTopUpAmount,\n gasTopUpAmountUsd,\n invalidateBalanceQueries,\n invalidateQuoteQuery,\n setDetails,\n setSwapError,\n quoteInProgress,\n setQuoteInProgress,\n linkedWallet,\n quoteParameters,\n abortController,\n fromTokenPriceData,\n toTokenPriceData,\n isLoadingFromTokenPrice,\n isLoadingToTokenPrice\n })}\n </>\n )\n}\n\nexport default SwapWidgetRenderer\n"]}
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ECLIPSE_DEFAULT_FEE_WEI = exports.ECLIPSE_FEE_BUFFER_MULTIPLIER = exports.SOLANA_DEFAULT_FEE_LAMPORTS = exports.SOLANA_FEE_BUFFER_MULTIPLIER = exports.SVM_RELAY_REQUESTS_API_BASE_URL = exports.EVM_GAS_BUFFER_MULTIPLIER = exports.EVM_DEFAULT_FEE_WEI = exports.MINIMUM_GAS_PRICE_WEI = void 0;
3
+ exports.ECLIPSE_DEFAULT_FEE_WEI = exports.ECLIPSE_FEE_BUFFER_MULTIPLIER = exports.SOLANA_DEFAULT_FEE_LAMPORTS = exports.SOLANA_FEE_BUFFER_MULTIPLIER = exports.EVM_GAS_BUFFER_MULTIPLIER = exports.EVM_DEFAULT_FEE_WEI = exports.MINIMUM_GAS_PRICE_WEI = void 0;
4
4
  exports.MINIMUM_GAS_PRICE_WEI = 100000000n;
5
5
  exports.EVM_DEFAULT_FEE_WEI = 5000000000000000n;
6
6
  exports.EVM_GAS_BUFFER_MULTIPLIER = 2n;
7
- exports.SVM_RELAY_REQUESTS_API_BASE_URL = 'https://api.relay.link/requests/v2';
8
7
  exports.SOLANA_FEE_BUFFER_MULTIPLIER = 5n;
9
8
  exports.SOLANA_DEFAULT_FEE_LAMPORTS = 1000000n;
10
9
  exports.ECLIPSE_FEE_BUFFER_MULTIPLIER = 200n;
@@ -1 +1 @@
1
- {"version":3,"file":"maxGasBuffer.js","sourceRoot":"","sources":["../../../src/constants/maxGasBuffer.ts"],"names":[],"mappings":";;;AAAa,QAAA,qBAAqB,GAAG,UAAU,CAAA;AAClC,QAAA,mBAAmB,GAAG,iBAAiB,CAAA;AACvC,QAAA,yBAAyB,GAAG,EAAE,CAAA;AAC9B,QAAA,+BAA+B,GAC1C,oCAAoC,CAAA;AACzB,QAAA,4BAA4B,GAAG,EAAE,CAAA;AACjC,QAAA,2BAA2B,GAAG,QAAQ,CAAA;AACtC,QAAA,6BAA6B,GAAG,IAAI,CAAA;AACpC,QAAA,uBAAuB,GAAG,eAAe,CAAA","sourcesContent":["export const MINIMUM_GAS_PRICE_WEI = 100000000n // 0.1 Gwei\nexport const EVM_DEFAULT_FEE_WEI = 5000000000000000n // Default fee in Wei (0.005 ETH) for EVM\nexport const EVM_GAS_BUFFER_MULTIPLIER = 2n // 2x buffer\nexport const SVM_RELAY_REQUESTS_API_BASE_URL =\n 'https://api.relay.link/requests/v2'\nexport const SOLANA_FEE_BUFFER_MULTIPLIER = 5n // 5x buffer for Solana\nexport const SOLANA_DEFAULT_FEE_LAMPORTS = 1000000n // Default fee in lamports (0.001 SOL) for Solana\nexport const ECLIPSE_FEE_BUFFER_MULTIPLIER = 200n // 200x buffer for Eclipse\nexport const ECLIPSE_DEFAULT_FEE_WEI = 50000000000000n // Default fee in Wei (0.00005 ETH) for Eclipse\n"]}
1
+ {"version":3,"file":"maxGasBuffer.js","sourceRoot":"","sources":["../../../src/constants/maxGasBuffer.ts"],"names":[],"mappings":";;;AAAa,QAAA,qBAAqB,GAAG,UAAU,CAAA;AAClC,QAAA,mBAAmB,GAAG,iBAAiB,CAAA;AACvC,QAAA,yBAAyB,GAAG,EAAE,CAAA;AAC9B,QAAA,4BAA4B,GAAG,EAAE,CAAA;AACjC,QAAA,2BAA2B,GAAG,QAAQ,CAAA;AACtC,QAAA,6BAA6B,GAAG,IAAI,CAAA;AACpC,QAAA,uBAAuB,GAAG,eAAe,CAAA","sourcesContent":["export const MINIMUM_GAS_PRICE_WEI = 100000000n // 0.1 Gwei\nexport const EVM_DEFAULT_FEE_WEI = 5000000000000000n // Default fee in Wei (0.005 ETH) for EVM\nexport const EVM_GAS_BUFFER_MULTIPLIER = 2n // 2x buffer\nexport const SOLANA_FEE_BUFFER_MULTIPLIER = 5n // 5x buffer for Solana\nexport const SOLANA_DEFAULT_FEE_LAMPORTS = 1000000n // Default fee in lamports (0.001 SOL) for Solana\nexport const ECLIPSE_FEE_BUFFER_MULTIPLIER = 200n // 200x buffer for Eclipse\nexport const ECLIPSE_DEFAULT_FEE_WEI = 50000000000000n // Default fee in Wei (0.00005 ETH) for Eclipse\n"]}
@@ -16,7 +16,8 @@ exports.WalletChainRestricted = {
16
16
  };
17
17
  exports.WalletChainIncompatible = {
18
18
  binance: [7777777, 8453],
19
- binanceus: [7777777, 8453]
19
+ binanceus: [7777777, 8453],
20
+ coinbase: [4663]
20
21
  };
21
22
  exports.NormalizedWalletName = {
22
23
  phantomevm: 'phantom',
@@ -24,6 +25,8 @@ exports.NormalizedWalletName = {
24
25
  magicedensol: 'magiceden',
25
26
  roninwallet: 'ronin',
26
27
  portoevm: 'porto',
27
- trusttron: 'trust'
28
+ trusttron: 'trust',
29
+ coinbasewalletevm: 'coinbase',
30
+ baseevm: 'coinbase'
28
31
  };
29
32
  //# sourceMappingURL=walletCompatibility.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"walletCompatibility.js","sourceRoot":"","sources":["../../../src/constants/walletCompatibility.ts"],"names":[],"mappings":";;;AAAa,QAAA,qBAAqB,GAA6B;IAC7D,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;IACjE,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC;IACrE,SAAS,EAAE;QACT,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK;KAC7E;IACD,OAAO,EAAE;QACP,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;KACzE;IACD,QAAQ,EAAE,CAAC,IAAI,CAAC;IAChB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;IACtC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;CACnD,CAAA;AAEY,QAAA,uBAAuB,GAA6B;IAC/D,OAAO,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;IACxB,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;CAC3B,CAAA;AAEY,QAAA,oBAAoB,GAA2B;IAC1D,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,WAAW;IACzB,WAAW,EAAE,OAAO;IACpB,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,OAAO;CACnB,CAAA","sourcesContent":["export const WalletChainRestricted: Record<string, number[]> = {\n phantom: [1, 8453, 792703809, 137, 8253038, 101, 10143, 143, 999],\n backpack: [1, 8453, 137, 42161, 10, 10143, 80094, 9286185, 792703809],\n magiceden: [\n 1, 137, 8453, 33139, 8253038, 792703809, 1329, 2741, 42161, 80094, 56, 43114\n ],\n uniswap: [\n 1, 130, 42161, 43114, 8453, 81457, 56, 42220, 10, 137, 480, 324, 7777777\n ],\n abstract: [2741],\n ronin: [1, 56, 137, 42161, 8453, 2020],\n porto: [8453, 42161, 56, 42220, 1, 10, 137, 80094]\n}\n\nexport const WalletChainIncompatible: Record<string, number[]> = {\n binance: [7777777, 8453],\n binanceus: [7777777, 8453]\n}\n\nexport const NormalizedWalletName: Record<string, string> = {\n phantomevm: 'phantom',\n phantombtc: 'phantom',\n magicedensol: 'magiceden',\n roninwallet: 'ronin',\n portoevm: 'porto',\n trusttron: 'trust'\n}\n"]}
1
+ {"version":3,"file":"walletCompatibility.js","sourceRoot":"","sources":["../../../src/constants/walletCompatibility.ts"],"names":[],"mappings":";;;AAAa,QAAA,qBAAqB,GAA6B;IAC7D,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;IACjE,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC;IACrE,SAAS,EAAE;QACT,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK;KAC7E;IACD,OAAO,EAAE;QACP,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;KACzE;IACD,QAAQ,EAAE,CAAC,IAAI,CAAC;IAChB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;IACtC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;CACnD,CAAA;AAEY,QAAA,uBAAuB,GAA6B;IAC/D,OAAO,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;IACxB,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,IAAI,CAAC;CACjB,CAAA;AAEY,QAAA,oBAAoB,GAA2B;IAC1D,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,WAAW;IACzB,WAAW,EAAE,OAAO;IACpB,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,OAAO;IAClB,iBAAiB,EAAE,UAAU;IAC7B,OAAO,EAAE,UAAU;CACpB,CAAA","sourcesContent":["export const WalletChainRestricted: Record<string, number[]> = {\n phantom: [1, 8453, 792703809, 137, 8253038, 101, 10143, 143, 999],\n backpack: [1, 8453, 137, 42161, 10, 10143, 80094, 9286185, 792703809],\n magiceden: [\n 1, 137, 8453, 33139, 8253038, 792703809, 1329, 2741, 42161, 80094, 56, 43114\n ],\n uniswap: [\n 1, 130, 42161, 43114, 8453, 81457, 56, 42220, 10, 137, 480, 324, 7777777\n ],\n abstract: [2741],\n ronin: [1, 56, 137, 42161, 8453, 2020],\n porto: [8453, 42161, 56, 42220, 1, 10, 137, 80094]\n}\n\nexport const WalletChainIncompatible: Record<string, number[]> = {\n binance: [7777777, 8453],\n binanceus: [7777777, 8453],\n coinbase: [4663]\n}\n\nexport const NormalizedWalletName: Record<string, string> = {\n phantomevm: 'phantom',\n phantombtc: 'phantom',\n magicedensol: 'magiceden',\n roninwallet: 'ronin',\n portoevm: 'porto',\n trusttron: 'trust',\n coinbasewalletevm: 'coinbase',\n baseevm: 'coinbase'\n}\n"]}
@@ -4,6 +4,7 @@ exports.useHapticEvent = exports.RelayKitProvider = exports.themeOverrides = exp
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const RelayClientProvider_js_1 = require("./RelayClientProvider.js");
7
+ const relay_sdk_1 = require("@relayprotocol/relay-sdk");
7
8
  const theme_js_1 = require("../utils/theme.js");
8
9
  exports.ProviderOptionsContext = (0, react_1.createContext)({});
9
10
  exports.themeOverrides = {
@@ -99,7 +100,28 @@ exports.themeOverrides = {
99
100
  border: '--relay-borders-modal-border'
100
101
  }
101
102
  };
103
+ const warnedApiKeyExposure = new Set();
102
104
  const RelayKitProvider = function ({ children, options, theme }) {
105
+ (0, react_1.useEffect)(() => {
106
+ if (options.acknowledgeApiKeyExposure)
107
+ return;
108
+ const baseApiUrl = options.baseApiUrl ?? relay_sdk_1.MAINNET_RELAY_API;
109
+ if (!(0, relay_sdk_1.isRelayApiUrl)(baseApiUrl))
110
+ return;
111
+ if (warnedApiKeyExposure.has(baseApiUrl))
112
+ return;
113
+ warnedApiKeyExposure.add(baseApiUrl);
114
+ if (options.apiKey) {
115
+ console.error('[RelayKit] Your Relay API key is being sent from the browser because `baseApiUrl` points directly at the Relay API. ' +
116
+ 'Proxy Relay API calls through your own backend that injects the `x-api-key` header, and set `baseApiUrl` to that proxy. ' +
117
+ 'Pass `acknowledgeApiKeyExposure: true` to silence this.');
118
+ }
119
+ else {
120
+ console.warn('[RelayKit] `baseApiUrl` points directly at the Relay API with no proxy. ' +
121
+ 'GET /requests/v3 requires an API key and will fail without one — set `baseApiUrl` to a proxy on your backend that injects the `x-api-key` header. ' +
122
+ 'Pass `acknowledgeApiKeyExposure: true` to silence this.');
123
+ }
124
+ }, [options.acknowledgeApiKeyExposure, options.baseApiUrl, options.apiKey]);
103
125
  const providerOptions = (0, react_1.useMemo)(() => ({
104
126
  appName: options.appName,
105
127
  appFees: options.appFees,
@@ -108,7 +130,6 @@ const RelayKitProvider = function ({ children, options, theme }) {
108
130
  privateChainIds: options.privateChainIds,
109
131
  themeScheme: options.themeScheme,
110
132
  loader: options.loader,
111
- secureBaseUrl: options.secureBaseUrl,
112
133
  onHapticEvent: options.onHapticEvent
113
134
  }), [options]);
114
135
  const cssVariables = (0, react_1.useMemo)(() => (0, theme_js_1.generateCssVars)(theme, exports.themeOverrides), [theme]);
@@ -1 +1 @@
1
- {"version":3,"file":"RelayKitProvider.js","sourceRoot":"","sources":["../../../src/providers/RelayKitProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import { createContext, useCallback, useContext, useMemo } from 'react'\nimport type { FC, ReactElement, ReactNode } from 'react'\nimport { RelayClientProvider } from './RelayClientProvider.js'\nimport type { RelayClientOptions, paths } from '@relayprotocol/relay-sdk'\nimport type { RelayKitTheme } from '../themes/index.js'\nimport { generateCssVars } from '../utils/theme.js'\n\nexport type AppFees =\n paths['/quote/v2']['post']['requestBody']['content']['application/json']['appFees']\n\n/**\n * Haptic feedback intensity/type for UI interactions.\n *\n * - `light` — Subtle tap for minor interactions: token selection, chain starring, toggle switches, max button clicks\n * - `medium` — Noticeable tap for deliberate actions: swap CTA button press\n * - `heavy` — Strong tap for emphatic interactions: long-press actions\n * - `selection` — Ultra-light discrete tick for picker-like interactions: tab switches, chain filter selection\n * - `success` — Distinct success pattern: swap completed, onramp completed\n * - `error` — Distinct error pattern: swap failed, approval failed, onramp failed\n * - `warning` — Alert pattern: unverified token modal shown\n */\nexport type HapticEventType =\n | 'light'\n | 'medium'\n | 'heavy'\n | 'selection'\n | 'success'\n | 'error'\n | 'warning'\n\ntype RelayKitProviderOptions = {\n /**\n * The name of the application\n */\n appName?: string\n /**\n * An array of fee objects composing of a recipient address and the fee in BPS\n */\n appFees?: AppFees\n duneConfig?: {\n /**\n * The base url for the dune api, if omitted the default will be used. Override this config to protect your api key via a proxy.\n */\n apiBaseUrl?: string\n /**\n * This key is used to fetch token balances, to improve the general UX and suggest relevant tokens\n * Can be omitted and the ui will continue to function. Refer to the dune docs on how to get an api key\n */\n apiKey?: string\n }\n /**\n * An objecting mapping either a VM type (evm, svm, bvm) or a chain id to a connector key (metamask, backpacksol, etc).\n * Connector keys are used for differentiating which wallet maps to which vm/chain.\n * Only relevant for eclipse/solana at the moment.\n */\n vmConnectorKeyOverrides?: {\n [key in number | 'evm' | 'svm' | 'bvm']?: string[]\n }\n /**\n * An array of private chain ids to be used when querying the chains api within relay kit.\n */\n privateChainIds?: string[]\n /**\n * The icon theme to use for the chain icons. Defaults to light.\n */\n themeScheme?: 'dark' | 'light'\n /**\n * The loader to use for the loading spinner. Defaults to relay.\n */\n loader?: (options?: {\n width?: number | string\n height?: number | string\n fill?: string\n }) => ReactElement\n /**\n * The secure base url for the relay api, if omitted the default will be used. Override this config to protect your api key via a proxy.\n * Currently only relevant for the quote api in the SwapWidget\n */\n secureBaseUrl?: string\n /**\n * Optional callback for haptic feedback on UI interactions.\n * Relay Kit does not bundle any haptics library — integrators provide their own implementation.\n *\n * @example\n * ```tsx\n * import { useWebHaptics } from 'web-haptics/react'\n *\n * function App() {\n * const { trigger } = useWebHaptics()\n *\n * return (\n * <RelayKitProvider\n * options={{\n * ...otherOptions,\n * onHapticEvent: (type) => {\n * // Map Relay Kit types to your haptics library\n * const map = { light: 'nudge', medium: 'buzz', heavy: 'buzz', success: 'success', error: 'error', warning: 'error' }\n * trigger(map[type] ?? type)\n * }\n * }}\n * >\n * <SwapWidget />\n * </RelayKitProvider>\n * )\n * }\n * ```\n */\n onHapticEvent?: (type: HapticEventType) => void\n}\n\nexport interface RelayKitProviderProps {\n children: ReactNode\n options: RelayClientOptions & RelayKitProviderOptions\n theme?: RelayKitTheme\n}\n\nexport const ProviderOptionsContext = createContext<RelayKitProviderOptions>({})\n\nexport type ThemeOverridesMap = {\n [key: string]: string | ThemeOverridesMap\n}\n\nexport const themeOverrides: ThemeOverridesMap = {\n font: '--relay-fonts-body',\n fontHeading: '--relay-fonts-heading',\n primaryColor: '--relay-colors-primary-color',\n focusColor: '--relay-colors-focus-color',\n subtleBackgroundColor: '--relay-colors-subtle-background-color',\n subtleBorderColor: '--relay-colors-subtle-border-color',\n text: {\n default: '--relay-colors-text-default',\n subtle: '--relay-colors-text-subtle',\n error: '--relay-colors-text-error',\n success: '--relay-colors-text-success'\n },\n buttons: {\n borderRadius: '--relay-radii-button-border-radius',\n primary: {\n color: '--relay-colors-primary-button-color',\n background: '--relay-colors-primary-button-background',\n hover: {\n color: '--relay-colors-primary-button-hover-color',\n background: '--relay-colors-primary-button-hover-background'\n }\n },\n secondary: {\n color: '--relay-colors-secondary-button-color',\n background: '--relay-colors-secondary-button-background',\n hover: {\n color: '--relay-colors-secondary-button-hover-color',\n background: '--relay-colors-secondary-button-hover-background'\n }\n },\n white: {\n color: '--relay-colors-primary-button-color',\n background: '--relay-colors-primary-button-background',\n hover: {\n color: '--relay-colors-primary-button-hover-color',\n background: '--relay-colors-primary-button-hover-background'\n }\n },\n disabled: {\n color: '--relay-colors-button-disabled-color',\n background: '--relay-colors-button-disabled-background'\n },\n cta: {\n fontStyle: '--relay-fonts-button-cta-font-style'\n }\n },\n input: {\n background: '--relay-colors-input-background',\n borderRadius: '--relay-radii-input-border-radius',\n color: '--relay-colors-input-color'\n },\n skeleton: {\n background: '--relay-colors-skeleton-background'\n },\n anchor: {\n color: '--relay-colors-anchor-color',\n hover: {\n color: '--relay-colors-anchor-hover-color'\n }\n },\n dropdown: {\n background: '--relay-colors-dropdown-background',\n borderRadius: '--relay-radii-dropdown-border-radius',\n border: '--relay-borders-dropdown-border'\n },\n widget: {\n background: '--relay-colors-widget-background',\n borderRadius: '--relay-radii-widget-border-radius',\n border: '--relay-borders-widget-border',\n boxShadow: '--relay-shadows-widget-box-shadow',\n card: {\n background: '--relay-colors-widget-card-background',\n borderRadius: '--relay-radii-widget-card-border-radius',\n border: '--relay-borders-widget-card-border',\n gutter: '--relay-spacing-widget-card-section-gutter'\n },\n selector: {\n background: '--relay-colors-widget-selector-background',\n hover: {\n background: '--relay-colors-widget-selector-hover-background'\n }\n },\n swapCurrencyButtonBorderColor:\n '--relay-colors-widget-swap-currency-button-border-color',\n swapCurrencyButtonBorderWidth:\n '--relay-borders-widget-swap-currency-button-border-width',\n swapCurrencyButtonBorderRadius:\n '--relay-radii-widget-swap-currency-button-border-radius'\n },\n modal: {\n background: '--relay-colors-modal-background',\n borderRadius: '--relay-radii-modal-border-radius',\n border: '--relay-borders-modal-border'\n }\n}\n\nexport const RelayKitProvider: FC<RelayKitProviderProps> = function ({\n children,\n options,\n theme\n}: RelayKitProviderProps) {\n const providerOptions = useMemo(\n () => ({\n appName: options.appName,\n appFees: options.appFees,\n duneConfig: options.duneConfig,\n vmConnectorKeyOverrides: options.vmConnectorKeyOverrides,\n privateChainIds: options.privateChainIds,\n themeScheme: options.themeScheme,\n loader: options.loader,\n secureBaseUrl: options.secureBaseUrl,\n onHapticEvent: options.onHapticEvent\n }),\n [options]\n )\n\n // Generate the CSS variable declarations\n const cssVariables = useMemo(\n () => generateCssVars(theme, themeOverrides),\n [theme]\n )\n\n return (\n <ProviderOptionsContext.Provider value={providerOptions}>\n <RelayClientProvider options={options}>\n <style\n dangerouslySetInnerHTML={{\n __html: `.relay-kit-reset {\n ${cssVariables}\n }`\n }}\n />\n {children}\n </RelayClientProvider>\n </ProviderOptionsContext.Provider>\n )\n}\n\n/**\n * Hook that returns a stable haptic event callback from the RelayKitProvider context.\n * Wraps the integrator's callback in a try-catch to prevent haptic errors from breaking the UI.\n */\nexport function useHapticEvent() {\n const { onHapticEvent } = useContext(ProviderOptionsContext)\n return useCallback(\n (type: HapticEventType) => {\n try {\n onHapticEvent?.(type)\n } catch (e) {\n console.error('Error in onHapticEvent', type, e)\n }\n },\n [onHapticEvent]\n )\n}\n"]}
1
+ {"version":3,"file":"RelayKitProvider.js","sourceRoot":"","sources":["../../../src/providers/RelayKitProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo\n} from 'react'\nimport type { FC, ReactElement, ReactNode } from 'react'\nimport { RelayClientProvider } from './RelayClientProvider.js'\nimport { isRelayApiUrl, MAINNET_RELAY_API } from '@relayprotocol/relay-sdk'\nimport type { RelayClientOptions, paths } from '@relayprotocol/relay-sdk'\nimport type { RelayKitTheme } from '../themes/index.js'\nimport { generateCssVars } from '../utils/theme.js'\n\nexport type AppFees =\n paths['/quote/v2']['post']['requestBody']['content']['application/json']['appFees']\n\n/**\n * Haptic feedback intensity/type for UI interactions.\n *\n * - `light` — Subtle tap for minor interactions: token selection, chain starring, toggle switches, max button clicks\n * - `medium` — Noticeable tap for deliberate actions: swap CTA button press\n * - `heavy` — Strong tap for emphatic interactions: long-press actions\n * - `selection` — Ultra-light discrete tick for picker-like interactions: tab switches, chain filter selection\n * - `success` — Distinct success pattern: swap completed, onramp completed\n * - `error` — Distinct error pattern: swap failed, approval failed, onramp failed\n * - `warning` — Alert pattern: unverified token modal shown\n */\nexport type HapticEventType =\n | 'light'\n | 'medium'\n | 'heavy'\n | 'selection'\n | 'success'\n | 'error'\n | 'warning'\n\ntype RelayKitProviderOptions = {\n /**\n * Silences the client-side API key warnings shown when `baseApiUrl` points\n * directly at the Relay API instead of a proxy.\n *\n * This only silences the warnings — it does not change behavior. A proxy is\n * the only supported configuration: the requests hooks never send\n * `x-api-key` from the browser, so `GET /requests/v3` requires `baseApiUrl`\n * to point at your backend proxy (which injects the key server-side). Setting\n * an `apiKey` alongside a Relay `baseApiUrl` also exposes that key via other\n * SDK calls (e.g. quotes). Only set this to `true` if you accept that\n * exposure (e.g. a public, rate-limited key).\n */\n acknowledgeApiKeyExposure?: boolean\n /**\n * The name of the application\n */\n appName?: string\n /**\n * An array of fee objects composing of a recipient address and the fee in BPS\n */\n appFees?: AppFees\n duneConfig?: {\n /**\n * The base url for the dune api, if omitted the default will be used. Override this config to protect your api key via a proxy.\n */\n apiBaseUrl?: string\n /**\n * This key is used to fetch token balances, to improve the general UX and suggest relevant tokens\n * Can be omitted and the ui will continue to function. Refer to the dune docs on how to get an api key\n */\n apiKey?: string\n }\n /**\n * An objecting mapping either a VM type (evm, svm, bvm) or a chain id to a connector key (metamask, backpacksol, etc).\n * Connector keys are used for differentiating which wallet maps to which vm/chain.\n * Only relevant for eclipse/solana at the moment.\n */\n vmConnectorKeyOverrides?: {\n [key in number | 'evm' | 'svm' | 'bvm']?: string[]\n }\n /**\n * An array of private chain ids to be used when querying the chains api within relay kit.\n */\n privateChainIds?: string[]\n /**\n * The icon theme to use for the chain icons. Defaults to light.\n */\n themeScheme?: 'dark' | 'light'\n /**\n * The loader to use for the loading spinner. Defaults to relay.\n */\n loader?: (options?: {\n width?: number | string\n height?: number | string\n fill?: string\n }) => ReactElement\n /**\n * Optional callback for haptic feedback on UI interactions.\n * Relay Kit does not bundle any haptics library — integrators provide their own implementation.\n *\n * @example\n * ```tsx\n * import { useWebHaptics } from 'web-haptics/react'\n *\n * function App() {\n * const { trigger } = useWebHaptics()\n *\n * return (\n * <RelayKitProvider\n * options={{\n * ...otherOptions,\n * onHapticEvent: (type) => {\n * // Map Relay Kit types to your haptics library\n * const map = { light: 'nudge', medium: 'buzz', heavy: 'buzz', success: 'success', error: 'error', warning: 'error' }\n * trigger(map[type] ?? type)\n * }\n * }}\n * >\n * <SwapWidget />\n * </RelayKitProvider>\n * )\n * }\n * ```\n */\n onHapticEvent?: (type: HapticEventType) => void\n}\n\nexport interface RelayKitProviderProps {\n children: ReactNode\n options: RelayClientOptions & RelayKitProviderOptions\n theme?: RelayKitTheme\n}\n\nexport const ProviderOptionsContext = createContext<RelayKitProviderOptions>({})\n\nexport type ThemeOverridesMap = {\n [key: string]: string | ThemeOverridesMap\n}\n\nexport const themeOverrides: ThemeOverridesMap = {\n font: '--relay-fonts-body',\n fontHeading: '--relay-fonts-heading',\n primaryColor: '--relay-colors-primary-color',\n focusColor: '--relay-colors-focus-color',\n subtleBackgroundColor: '--relay-colors-subtle-background-color',\n subtleBorderColor: '--relay-colors-subtle-border-color',\n text: {\n default: '--relay-colors-text-default',\n subtle: '--relay-colors-text-subtle',\n error: '--relay-colors-text-error',\n success: '--relay-colors-text-success'\n },\n buttons: {\n borderRadius: '--relay-radii-button-border-radius',\n primary: {\n color: '--relay-colors-primary-button-color',\n background: '--relay-colors-primary-button-background',\n hover: {\n color: '--relay-colors-primary-button-hover-color',\n background: '--relay-colors-primary-button-hover-background'\n }\n },\n secondary: {\n color: '--relay-colors-secondary-button-color',\n background: '--relay-colors-secondary-button-background',\n hover: {\n color: '--relay-colors-secondary-button-hover-color',\n background: '--relay-colors-secondary-button-hover-background'\n }\n },\n white: {\n color: '--relay-colors-primary-button-color',\n background: '--relay-colors-primary-button-background',\n hover: {\n color: '--relay-colors-primary-button-hover-color',\n background: '--relay-colors-primary-button-hover-background'\n }\n },\n disabled: {\n color: '--relay-colors-button-disabled-color',\n background: '--relay-colors-button-disabled-background'\n },\n cta: {\n fontStyle: '--relay-fonts-button-cta-font-style'\n }\n },\n input: {\n background: '--relay-colors-input-background',\n borderRadius: '--relay-radii-input-border-radius',\n color: '--relay-colors-input-color'\n },\n skeleton: {\n background: '--relay-colors-skeleton-background'\n },\n anchor: {\n color: '--relay-colors-anchor-color',\n hover: {\n color: '--relay-colors-anchor-hover-color'\n }\n },\n dropdown: {\n background: '--relay-colors-dropdown-background',\n borderRadius: '--relay-radii-dropdown-border-radius',\n border: '--relay-borders-dropdown-border'\n },\n widget: {\n background: '--relay-colors-widget-background',\n borderRadius: '--relay-radii-widget-border-radius',\n border: '--relay-borders-widget-border',\n boxShadow: '--relay-shadows-widget-box-shadow',\n card: {\n background: '--relay-colors-widget-card-background',\n borderRadius: '--relay-radii-widget-card-border-radius',\n border: '--relay-borders-widget-card-border',\n gutter: '--relay-spacing-widget-card-section-gutter'\n },\n selector: {\n background: '--relay-colors-widget-selector-background',\n hover: {\n background: '--relay-colors-widget-selector-hover-background'\n }\n },\n swapCurrencyButtonBorderColor:\n '--relay-colors-widget-swap-currency-button-border-color',\n swapCurrencyButtonBorderWidth:\n '--relay-borders-widget-swap-currency-button-border-width',\n swapCurrencyButtonBorderRadius:\n '--relay-radii-widget-swap-currency-button-border-radius'\n },\n modal: {\n background: '--relay-colors-modal-background',\n borderRadius: '--relay-radii-modal-border-radius',\n border: '--relay-borders-modal-border'\n }\n}\n\n// Tracks base URLs we've already warned about so the message logs once, not on\n// every mount/render (incl. React StrictMode double-invocation).\nconst warnedApiKeyExposure = new Set<string>()\n\nexport const RelayKitProvider: FC<RelayKitProviderProps> = function ({\n children,\n options,\n theme\n}: RelayKitProviderProps) {\n // Warn when the Relay API is called directly instead of through a proxy.\n // GET /requests/v3 requires an API key, which must not be shipped to the\n // browser — integrators should proxy Relay API calls through their own\n // backend and point `baseApiUrl` at it. Runs client-side only (useEffect) and\n // re-checks only when the relevant options change.\n useEffect(() => {\n if (options.acknowledgeApiKeyExposure) return\n const baseApiUrl = options.baseApiUrl ?? MAINNET_RELAY_API\n // A proxy setup uses a non-Relay baseApiUrl, which is the desired state.\n if (!isRelayApiUrl(baseApiUrl)) return\n if (warnedApiKeyExposure.has(baseApiUrl)) return\n warnedApiKeyExposure.add(baseApiUrl)\n\n if (options.apiKey) {\n console.error(\n '[RelayKit] Your Relay API key is being sent from the browser because `baseApiUrl` points directly at the Relay API. ' +\n 'Proxy Relay API calls through your own backend that injects the `x-api-key` header, and set `baseApiUrl` to that proxy. ' +\n 'Pass `acknowledgeApiKeyExposure: true` to silence this.'\n )\n } else {\n console.warn(\n '[RelayKit] `baseApiUrl` points directly at the Relay API with no proxy. ' +\n 'GET /requests/v3 requires an API key and will fail without one — set `baseApiUrl` to a proxy on your backend that injects the `x-api-key` header. ' +\n 'Pass `acknowledgeApiKeyExposure: true` to silence this.'\n )\n }\n }, [options.acknowledgeApiKeyExposure, options.baseApiUrl, options.apiKey])\n\n const providerOptions = useMemo(\n () => ({\n appName: options.appName,\n appFees: options.appFees,\n duneConfig: options.duneConfig,\n vmConnectorKeyOverrides: options.vmConnectorKeyOverrides,\n privateChainIds: options.privateChainIds,\n themeScheme: options.themeScheme,\n loader: options.loader,\n onHapticEvent: options.onHapticEvent\n }),\n [options]\n )\n\n // Generate the CSS variable declarations\n const cssVariables = useMemo(\n () => generateCssVars(theme, themeOverrides),\n [theme]\n )\n\n return (\n <ProviderOptionsContext.Provider value={providerOptions}>\n <RelayClientProvider options={options}>\n <style\n dangerouslySetInnerHTML={{\n __html: `.relay-kit-reset {\n ${cssVariables}\n }`\n }}\n />\n {children}\n </RelayClientProvider>\n </ProviderOptionsContext.Provider>\n )\n}\n\n/**\n * Hook that returns a stable haptic event callback from the RelayKitProvider context.\n * Wraps the integrator's callback in a try-catch to prevent haptic errors from breaking the UI.\n */\nexport function useHapticEvent() {\n const { onHapticEvent } = useContext(ProviderOptionsContext)\n return useCallback(\n (type: HapticEventType) => {\n try {\n onHapticEvent?.(type)\n } catch (e) {\n console.error('Error in onHapticEvent', type, e)\n }\n },\n [onHapticEvent]\n )\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RelayTransaction.js","sourceRoot":"","sources":["../../../src/types/RelayTransaction.ts"],"names":[],"mappings":"","sourcesContent":["import type { paths } from '@relayprotocol/relay-sdk'\n\nexport type UserTransactionsResponse =\n paths['/requests/v2']['get']['responses']['200']['content']['application/json']\n\nexport type RelayTransaction = NonNullable<\n NonNullable<UserTransactionsResponse>['requests']\n>[0]\n"]}
1
+ {"version":3,"file":"RelayTransaction.js","sourceRoot":"","sources":["../../../src/types/RelayTransaction.ts"],"names":[],"mappings":"","sourcesContent":["import type { paths } from '@relayprotocol/relay-sdk'\n\nexport type UserTransactionsResponse =\n paths['/requests/v3']['get']['responses']['200']['content']['application/json']\n\nexport type RelayTransaction = NonNullable<\n NonNullable<UserTransactionsResponse>['requests']\n>[0]\n"]}
@@ -47,7 +47,7 @@ const calculateEvmNativeGasBuffer = async (publicClient, balance, gasLimit = 400
47
47
  }
48
48
  };
49
49
  exports.calculateEvmNativeGasBuffer = calculateEvmNativeGasBuffer;
50
- const calculateSvmNativeFeeBuffer = async (chainId) => {
50
+ const calculateSvmNativeFeeBuffer = async (chainId, baseApiUrl) => {
51
51
  const isEclipseChain = chainId === 9286185;
52
52
  const multiplier = isEclipseChain
53
53
  ? maxGasBuffer_js_1.ECLIPSE_FEE_BUFFER_MULTIPLIER
@@ -60,7 +60,7 @@ const calculateSvmNativeFeeBuffer = async (chainId) => {
60
60
  limit: 20,
61
61
  originChainId: chainId
62
62
  };
63
- const resp = await (0, relay_kit_hooks_1.queryRequests)(relay_sdk_1.MAINNET_RELAY_API, queryOptions);
63
+ const resp = await (0, relay_kit_hooks_1.queryRequests)(baseApiUrl ?? relay_sdk_1.MAINNET_RELAY_API, queryOptions);
64
64
  if (!resp || !Array.isArray(resp.requests) || resp.requests.length === 0) {
65
65
  console.warn('No valid fees found in response. Using fallback buffer.');
66
66
  return fallbackBuffer;
@@ -89,7 +89,7 @@ const calculateSvmNativeFeeBuffer = async (chainId) => {
89
89
  }
90
90
  };
91
91
  exports.calculateSvmNativeFeeBuffer = calculateSvmNativeFeeBuffer;
92
- const getFeeBufferAmount = async (vmType, chainId, balance, publicClient) => {
92
+ const getFeeBufferAmount = async (vmType, chainId, balance, publicClient, baseApiUrl) => {
93
93
  const cacheKey = `${vmType}FeeBuffer:${chainId}`;
94
94
  const cachedBufferStr = (0, localStorage_js_1.getCacheEntry)(cacheKey);
95
95
  if (cachedBufferStr) {
@@ -111,7 +111,7 @@ const getFeeBufferAmount = async (vmType, chainId, balance, publicClient) => {
111
111
  const fallbackBuffer = isEclipseChain
112
112
  ? maxGasBuffer_js_1.ECLIPSE_DEFAULT_FEE_WEI * maxGasBuffer_js_1.ECLIPSE_FEE_BUFFER_MULTIPLIER
113
113
  : maxGasBuffer_js_1.SOLANA_DEFAULT_FEE_LAMPORTS * maxGasBuffer_js_1.SOLANA_FEE_BUFFER_MULTIPLIER;
114
- calculationPromise = (0, exports.calculateSvmNativeFeeBuffer)(chainId).catch((error) => {
114
+ calculationPromise = (0, exports.calculateSvmNativeFeeBuffer)(chainId, baseApiUrl).catch((error) => {
115
115
  console.error(`Failed to calculate SVM fee buffer for chain ${chainId}:`, error);
116
116
  return fallbackBuffer;
117
117
  });
@@ -1 +1 @@
1
- {"version":3,"file":"nativeMaxAmount.js","sourceRoot":"","sources":["../../../src/utils/nativeMaxAmount.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PublicClient } from 'viem'\nimport {\n EVM_GAS_BUFFER_MULTIPLIER,\n MINIMUM_GAS_PRICE_WEI,\n SOLANA_FEE_BUFFER_MULTIPLIER,\n SOLANA_DEFAULT_FEE_LAMPORTS,\n ECLIPSE_FEE_BUFFER_MULTIPLIER,\n ECLIPSE_DEFAULT_FEE_WEI,\n EVM_DEFAULT_FEE_WEI\n} from '../constants/maxGasBuffer.js'\nimport { MAINNET_RELAY_API } from '@relayprotocol/relay-sdk'\nimport { queryRequests } from '@relayprotocol/relay-kit-hooks'\nimport type { ChainVM } from '@relayprotocol/relay-sdk'\nimport { getCacheEntry, setCacheEntry } from './localStorage.js'\n\n// Refs to store ongoing fetch promises\nconst fetchPromises: Record<string, Promise<bigint>> = {}\n\n/**\n * Calculates the gas buffer needed for a native EVM token transfer.\n * This buffer is estimated based on gas price and a standard limit,\n * then multiplied by a safety factor.\n *\n * @param publicClient - A VIEM PublicClient connected to the EVM chain.\n * @param balance - The total native balance of the user (used for early exit).\n * @param gasLimit - Optional: The gas limit to use for estimation (defaults to 400000n).\n * @returns The calculated gas buffer amount as a bigint, or 0n if estimation fails or balance is zero.\n */\nexport const calculateEvmNativeGasBuffer = async (\n publicClient: PublicClient,\n balance: bigint,\n gasLimit: bigint = 400000n\n): Promise<bigint> => {\n if (!balance || balance <= 0n) {\n return 0n\n }\n\n // Fixed fallback buffer: 0.005 ETH in Wei\n const defaultBuffer = EVM_DEFAULT_FEE_WEI\n\n try {\n let feeData\n try {\n feeData = await publicClient.estimateFeesPerGas()\n } catch (eip1559Error) {\n // Fallback to legacy gas price estimation\n try {\n const gasPrice = await publicClient.getGasPrice()\n feeData = {\n maxFeePerGas: gasPrice,\n gasPrice: gasPrice\n }\n } catch (legacyError) {\n // If both estimations fail, return fallback buffer\n console.error('Failed to estimate gas price:', legacyError)\n return defaultBuffer\n }\n }\n\n // Prefer EIP-1559 maxFeePerGas if available, otherwise use gasPrice\n let gasPriceToUse = feeData.maxFeePerGas ?? feeData.gasPrice\n\n if (!gasPriceToUse || gasPriceToUse <= 0n) {\n console.error('Invalid gas price data received:', feeData)\n return defaultBuffer\n }\n\n if (gasPriceToUse < MINIMUM_GAS_PRICE_WEI) {\n gasPriceToUse = MINIMUM_GAS_PRICE_WEI\n }\n\n const estimatedGasCost = gasPriceToUse * gasLimit\n const buffer = estimatedGasCost * EVM_GAS_BUFFER_MULTIPLIER\n\n // return the calculated buffer\n return buffer\n } catch (error) {\n console.error('Error calculating EVM native gas buffer:', error)\n return defaultBuffer\n }\n}\n\n/**\n * Calculates the fee buffer needed for a native SVM (e.g., Solana) or Eclipse transaction.\n * Uses specific multipliers and default fees for each type.\n * Falls back to a default fee if API data is unavailable or invalid.\n *\n * @param chainId - The chain ID of the SVM or Eclipse network.\n * @returns The calculated fee buffer amount (in lamports for Solana, Wei for Eclipse) as a bigint, or a fallback buffer if estimation fails.\n */\nexport const calculateSvmNativeFeeBuffer = async (\n chainId: number\n): Promise<bigint> => {\n const isEclipseChain = chainId === 9286185\n const multiplier = isEclipseChain\n ? ECLIPSE_FEE_BUFFER_MULTIPLIER\n : SOLANA_FEE_BUFFER_MULTIPLIER\n\n const fallbackBuffer = isEclipseChain\n ? ECLIPSE_DEFAULT_FEE_WEI * ECLIPSE_FEE_BUFFER_MULTIPLIER\n : SOLANA_DEFAULT_FEE_LAMPORTS * SOLANA_FEE_BUFFER_MULTIPLIER\n\n try {\n const queryOptions = {\n limit: 20,\n originChainId: chainId\n } as const\n\n const resp = await queryRequests(MAINNET_RELAY_API, queryOptions)\n\n if (!resp || !Array.isArray(resp.requests) || resp.requests.length === 0) {\n console.warn('No valid fees found in response. Using fallback buffer.')\n return fallbackBuffer\n }\n\n // Extract fees data from the response\n const fees: bigint[] = resp.requests\n .map((r: any) => {\n const feeStr = r?.data?.inTxs?.[0]?.fee\n try {\n return BigInt(feeStr)\n } catch {\n return null\n }\n })\n .filter((f: bigint | null): f is bigint => f !== null)\n\n if (fees.length === 0) {\n return fallbackBuffer\n }\n\n // Find the maximum fee among the valid fees\n const maxFee = fees.reduce(\n (max, current) => (current > max ? current : max),\n 0n\n )\n\n // Apply buffer multiplier to the maximum fee\n const buffer = maxFee * multiplier\n\n return buffer\n } catch (error) {\n console.error('Error calculating SVM native fee buffer:', error)\n return fallbackBuffer\n }\n}\n\n/**\n * Gets the fee buffer amount for a given chain and VM type.\n * Handles caching, ongoing fetch promises, and initiates calculation if needed.\n *\n * @param vmType - The virtual machine type ('evm' or 'svm').\n * @param chainId - The chain ID.\n * @param balance - The current balance (required for EVM calculation).\n * @param publicClient - VIEM PublicClient (required for EVM calculation).\n * @returns A promise that resolves to the fee buffer amount as a bigint.\n */\nexport const getFeeBufferAmount = async (\n vmType: ChainVM | undefined | null,\n chainId: number | undefined | null,\n balance: bigint,\n publicClient: PublicClient | null\n): Promise<bigint> => {\n const cacheKey = `${vmType}FeeBuffer:${chainId}`\n const cachedBufferStr = getCacheEntry(cacheKey)\n\n if (cachedBufferStr) {\n return BigInt(cachedBufferStr)\n }\n\n // Check if a fetch is already in progress\n if (Object.prototype.hasOwnProperty.call(fetchPromises, cacheKey)) {\n return fetchPromises[cacheKey]\n }\n\n // Initiate fetch\n let calculationPromise: Promise<bigint>\n\n if (vmType === 'evm') {\n if (!publicClient) {\n console.error('PublicClient is required for EVM fee buffer calculation.')\n return EVM_DEFAULT_FEE_WEI * EVM_GAS_BUFFER_MULTIPLIER\n }\n calculationPromise = calculateEvmNativeGasBuffer(publicClient, balance)\n } else if (vmType === 'svm') {\n const isEclipseChain = chainId === 9286185\n const fallbackBuffer = isEclipseChain\n ? ECLIPSE_DEFAULT_FEE_WEI * ECLIPSE_FEE_BUFFER_MULTIPLIER\n : SOLANA_DEFAULT_FEE_LAMPORTS * SOLANA_FEE_BUFFER_MULTIPLIER\n calculationPromise = calculateSvmNativeFeeBuffer(chainId!).catch(\n (error) => {\n console.error(\n `Failed to calculate SVM fee buffer for chain ${chainId}:`,\n error\n )\n return fallbackBuffer\n }\n )\n } else {\n console.warn(\n `Unsupported VM type encountered: ${vmType}. Returning default EVM buffer.`\n )\n return EVM_DEFAULT_FEE_WEI * EVM_GAS_BUFFER_MULTIPLIER\n }\n\n // Store the promise\n fetchPromises[cacheKey] = calculationPromise\n\n // Handle caching and cleanup after promise settles\n calculationPromise\n .then((buffer) => {\n setCacheEntry(cacheKey, buffer, 5)\n })\n .catch((error) => {\n console.error(`Error processing fee buffer for ${cacheKey}:`, error)\n })\n .finally(() => {\n delete fetchPromises[cacheKey]\n })\n\n return calculationPromise\n}\n"]}
1
+ {"version":3,"file":"nativeMaxAmount.js","sourceRoot":"","sources":["../../../src/utils/nativeMaxAmount.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PublicClient } from 'viem'\nimport {\n EVM_GAS_BUFFER_MULTIPLIER,\n MINIMUM_GAS_PRICE_WEI,\n SOLANA_FEE_BUFFER_MULTIPLIER,\n SOLANA_DEFAULT_FEE_LAMPORTS,\n ECLIPSE_FEE_BUFFER_MULTIPLIER,\n ECLIPSE_DEFAULT_FEE_WEI,\n EVM_DEFAULT_FEE_WEI\n} from '../constants/maxGasBuffer.js'\nimport { MAINNET_RELAY_API } from '@relayprotocol/relay-sdk'\nimport { queryRequests } from '@relayprotocol/relay-kit-hooks'\nimport type { ChainVM } from '@relayprotocol/relay-sdk'\nimport { getCacheEntry, setCacheEntry } from './localStorage.js'\n\n// Refs to store ongoing fetch promises\nconst fetchPromises: Record<string, Promise<bigint>> = {}\n\n/**\n * Calculates the gas buffer needed for a native EVM token transfer.\n * This buffer is estimated based on gas price and a standard limit,\n * then multiplied by a safety factor.\n *\n * @param publicClient - A VIEM PublicClient connected to the EVM chain.\n * @param balance - The total native balance of the user (used for early exit).\n * @param gasLimit - Optional: The gas limit to use for estimation (defaults to 400000n).\n * @returns The calculated gas buffer amount as a bigint, or 0n if estimation fails or balance is zero.\n */\nexport const calculateEvmNativeGasBuffer = async (\n publicClient: PublicClient,\n balance: bigint,\n gasLimit: bigint = 400000n\n): Promise<bigint> => {\n if (!balance || balance <= 0n) {\n return 0n\n }\n\n // Fixed fallback buffer: 0.005 ETH in Wei\n const defaultBuffer = EVM_DEFAULT_FEE_WEI\n\n try {\n let feeData\n try {\n feeData = await publicClient.estimateFeesPerGas()\n } catch (eip1559Error) {\n // Fallback to legacy gas price estimation\n try {\n const gasPrice = await publicClient.getGasPrice()\n feeData = {\n maxFeePerGas: gasPrice,\n gasPrice: gasPrice\n }\n } catch (legacyError) {\n // If both estimations fail, return fallback buffer\n console.error('Failed to estimate gas price:', legacyError)\n return defaultBuffer\n }\n }\n\n // Prefer EIP-1559 maxFeePerGas if available, otherwise use gasPrice\n let gasPriceToUse = feeData.maxFeePerGas ?? feeData.gasPrice\n\n if (!gasPriceToUse || gasPriceToUse <= 0n) {\n console.error('Invalid gas price data received:', feeData)\n return defaultBuffer\n }\n\n if (gasPriceToUse < MINIMUM_GAS_PRICE_WEI) {\n gasPriceToUse = MINIMUM_GAS_PRICE_WEI\n }\n\n const estimatedGasCost = gasPriceToUse * gasLimit\n const buffer = estimatedGasCost * EVM_GAS_BUFFER_MULTIPLIER\n\n // return the calculated buffer\n return buffer\n } catch (error) {\n console.error('Error calculating EVM native gas buffer:', error)\n return defaultBuffer\n }\n}\n\n/**\n * Calculates the fee buffer needed for a native SVM (e.g., Solana) or Eclipse transaction.\n * Uses specific multipliers and default fees for each type.\n * Falls back to a default fee if API data is unavailable or invalid.\n *\n * @param chainId - The chain ID of the SVM or Eclipse network.\n * @returns The calculated fee buffer amount (in lamports for Solana, Wei for Eclipse) as a bigint, or a fallback buffer if estimation fails.\n */\nexport const calculateSvmNativeFeeBuffer = async (\n chainId: number,\n baseApiUrl?: string\n): Promise<bigint> => {\n const isEclipseChain = chainId === 9286185\n const multiplier = isEclipseChain\n ? ECLIPSE_FEE_BUFFER_MULTIPLIER\n : SOLANA_FEE_BUFFER_MULTIPLIER\n\n const fallbackBuffer = isEclipseChain\n ? ECLIPSE_DEFAULT_FEE_WEI * ECLIPSE_FEE_BUFFER_MULTIPLIER\n : SOLANA_DEFAULT_FEE_LAMPORTS * SOLANA_FEE_BUFFER_MULTIPLIER\n\n try {\n const queryOptions = {\n limit: 20,\n originChainId: chainId\n } as const\n\n const resp = await queryRequests(baseApiUrl ?? MAINNET_RELAY_API, queryOptions)\n\n if (!resp || !Array.isArray(resp.requests) || resp.requests.length === 0) {\n console.warn('No valid fees found in response. Using fallback buffer.')\n return fallbackBuffer\n }\n\n // Extract fees data from the response\n const fees: bigint[] = resp.requests\n .map((r: any) => {\n const feeStr = r?.data?.inTxs?.[0]?.fee\n try {\n return BigInt(feeStr)\n } catch {\n return null\n }\n })\n .filter((f: bigint | null): f is bigint => f !== null)\n\n if (fees.length === 0) {\n return fallbackBuffer\n }\n\n // Find the maximum fee among the valid fees\n const maxFee = fees.reduce(\n (max, current) => (current > max ? current : max),\n 0n\n )\n\n // Apply buffer multiplier to the maximum fee\n const buffer = maxFee * multiplier\n\n return buffer\n } catch (error) {\n console.error('Error calculating SVM native fee buffer:', error)\n return fallbackBuffer\n }\n}\n\n/**\n * Gets the fee buffer amount for a given chain and VM type.\n * Handles caching, ongoing fetch promises, and initiates calculation if needed.\n *\n * @param vmType - The virtual machine type ('evm' or 'svm').\n * @param chainId - The chain ID.\n * @param balance - The current balance (required for EVM calculation).\n * @param publicClient - VIEM PublicClient (required for EVM calculation).\n * @returns A promise that resolves to the fee buffer amount as a bigint.\n */\nexport const getFeeBufferAmount = async (\n vmType: ChainVM | undefined | null,\n chainId: number | undefined | null,\n balance: bigint,\n publicClient: PublicClient | null,\n baseApiUrl?: string\n): Promise<bigint> => {\n const cacheKey = `${vmType}FeeBuffer:${chainId}`\n const cachedBufferStr = getCacheEntry(cacheKey)\n\n if (cachedBufferStr) {\n return BigInt(cachedBufferStr)\n }\n\n // Check if a fetch is already in progress\n if (Object.prototype.hasOwnProperty.call(fetchPromises, cacheKey)) {\n return fetchPromises[cacheKey]\n }\n\n // Initiate fetch\n let calculationPromise: Promise<bigint>\n\n if (vmType === 'evm') {\n if (!publicClient) {\n console.error('PublicClient is required for EVM fee buffer calculation.')\n return EVM_DEFAULT_FEE_WEI * EVM_GAS_BUFFER_MULTIPLIER\n }\n calculationPromise = calculateEvmNativeGasBuffer(publicClient, balance)\n } else if (vmType === 'svm') {\n const isEclipseChain = chainId === 9286185\n const fallbackBuffer = isEclipseChain\n ? ECLIPSE_DEFAULT_FEE_WEI * ECLIPSE_FEE_BUFFER_MULTIPLIER\n : SOLANA_DEFAULT_FEE_LAMPORTS * SOLANA_FEE_BUFFER_MULTIPLIER\n calculationPromise = calculateSvmNativeFeeBuffer(chainId!, baseApiUrl).catch(\n (error) => {\n console.error(\n `Failed to calculate SVM fee buffer for chain ${chainId}:`,\n error\n )\n return fallbackBuffer\n }\n )\n } else {\n console.warn(\n `Unsupported VM type encountered: ${vmType}. Returning default EVM buffer.`\n )\n return EVM_DEFAULT_FEE_WEI * EVM_GAS_BUFFER_MULTIPLIER\n }\n\n // Store the promise\n fetchPromises[cacheKey] = calculationPromise\n\n // Handle caching and cleanup after promise settles\n calculationPromise\n .then((buffer) => {\n setCacheEntry(cacheKey, buffer, 5)\n })\n .catch((error) => {\n console.error(`Error processing fee buffer for ${cacheKey}:`, error)\n })\n .finally(() => {\n delete fetchPromises[cacheKey]\n })\n\n return calculationPromise\n}\n"]}