@relayprotocol/relay-kit-ui 11.0.3 → 11.0.5

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 (45) hide show
  1. package/_cjs/src/components/common/TransactionModal/TransactionModalRenderer.js +6 -0
  2. package/_cjs/src/components/common/TransactionModal/TransactionModalRenderer.js.map +1 -1
  3. package/_cjs/src/components/widgets/FeeBreakdown.js +1 -1
  4. package/_cjs/src/components/widgets/FeeBreakdown.js.map +1 -1
  5. package/_cjs/src/components/widgets/PriceImpactTooltip.js +3 -2
  6. package/_cjs/src/components/widgets/PriceImpactTooltip.js.map +1 -1
  7. package/_cjs/src/constants/walletCompatibility.js +2 -1
  8. package/_cjs/src/constants/walletCompatibility.js.map +1 -1
  9. package/_cjs/src/utils/quote.js +17 -5
  10. package/_cjs/src/utils/quote.js.map +1 -1
  11. package/_cjs/src/utils/relayTransaction.js +4 -3
  12. package/_cjs/src/utils/relayTransaction.js.map +1 -1
  13. package/_cjs/src/utils/solana.js +1 -1
  14. package/_cjs/src/utils/solana.js.map +1 -1
  15. package/_cjs/src/version.js +1 -1
  16. package/_cjs/src/version.js.map +1 -1
  17. package/_cjs/tsconfig.build.tsbuildinfo +1 -1
  18. package/_esm/src/components/common/TransactionModal/TransactionModalRenderer.js +8 -0
  19. package/_esm/src/components/common/TransactionModal/TransactionModalRenderer.js.map +1 -1
  20. package/_esm/src/components/widgets/FeeBreakdown.js +1 -1
  21. package/_esm/src/components/widgets/FeeBreakdown.js.map +1 -1
  22. package/_esm/src/components/widgets/PriceImpactTooltip.js +4 -2
  23. package/_esm/src/components/widgets/PriceImpactTooltip.js.map +1 -1
  24. package/_esm/src/constants/walletCompatibility.js +2 -1
  25. package/_esm/src/constants/walletCompatibility.js.map +1 -1
  26. package/_esm/src/utils/quote.js +20 -6
  27. package/_esm/src/utils/quote.js.map +1 -1
  28. package/_esm/src/utils/relayTransaction.js +11 -3
  29. package/_esm/src/utils/relayTransaction.js.map +1 -1
  30. package/_esm/src/utils/solana.js +1 -1
  31. package/_esm/src/utils/solana.js.map +1 -1
  32. package/_esm/src/version.js +1 -1
  33. package/_esm/src/version.js.map +1 -1
  34. package/_esm/tsconfig.build.tsbuildinfo +1 -1
  35. package/_types/src/components/common/TransactionModal/TransactionModalRenderer.d.ts.map +1 -1
  36. package/_types/src/components/widgets/FeeBreakdown.d.ts.map +1 -1
  37. package/_types/src/components/widgets/PriceImpactTooltip.d.ts.map +1 -1
  38. package/_types/src/constants/walletCompatibility.d.ts.map +1 -1
  39. package/_types/src/utils/quote.d.ts.map +1 -1
  40. package/_types/src/utils/relayTransaction.d.ts +6 -0
  41. package/_types/src/utils/relayTransaction.d.ts.map +1 -1
  42. package/_types/src/utils/solana.d.ts.map +1 -1
  43. package/_types/src/version.d.ts +1 -1
  44. package/_types/tsconfig.build.tsbuildinfo +1 -1
  45. package/package.json +1 -1
@@ -113,6 +113,12 @@ const TransactionModalRenderer = ({ open, slippageTolerance, wallet, steps, quot
113
113
  if (!transaction) {
114
114
  return 2500;
115
115
  }
116
+ const isTerminalStatus = transaction.status === 'success' ||
117
+ transaction.status === 'failure' ||
118
+ transaction.status === 'refund';
119
+ if (!isTerminalStatus) {
120
+ return 2500;
121
+ }
116
122
  const isRefund = transaction.status === 'refund' ||
117
123
  transaction.data?.refundCurrencyData;
118
124
  if (isRefund &&
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionModalRenderer.js","sourceRoot":"","sources":["../../../../../src/components/common/TransactionModal/TransactionModalRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n type FC,\n useMemo,\n useState,\n useEffect,\n type ReactNode,\n type SetStateAction,\n type Dispatch\n} from 'react'\nimport { type Address } from 'viem'\nimport {\n type AdaptedWallet,\n type Execute,\n type ExecuteStep,\n type ExecuteStepItem\n} from '@relayprotocol/relay-sdk'\nimport {\n calculateFillTime,\n extractDepositRequestId\n} from '../../../utils/relayTransaction.js'\nimport type { Token } from '../../../types/index.js'\nimport { useRequests } from '@relayprotocol/relay-kit-hooks'\nimport { useRelayClient } from '../../../hooks/index.js'\nimport {\n calculatePriceTimeEstimate,\n isGasSponsored\n} from '../../../utils/quote.js'\nexport enum TransactionProgressStep {\n Confirmation,\n Submitted,\n Success,\n Error\n}\n\nexport type TxHashes = {\n txHash: string\n chainId: number\n isBatchTx?: boolean\n}[]\n\nexport type ChildrenProps = {\n wallet?: AdaptedWallet\n progressStep: TransactionProgressStep\n setProgressStep: Dispatch<SetStateAction<TransactionProgressStep>>\n currentStep?: ExecuteStep | null\n setCurrentStep: Dispatch<SetStateAction<ExecuteStep | undefined | null>>\n currentStepItem: ExecuteStepItem | null | undefined\n setCurrentStepItem: Dispatch<\n SetStateAction<ExecuteStepItem | null | undefined>\n >\n quote: Execute | null\n swapError: Error | null\n setSwapError: Dispatch<SetStateAction<Error | null>>\n steps: Execute['steps'] | null\n waitingForSteps: boolean\n allTxHashes: TxHashes\n setAllTxHashes: Dispatch<SetStateAction<TxHashes>>\n transaction: ReturnType<typeof useRequests>['data']['0']\n seconds: number\n fillTime: string\n requestId: string | null\n isLoadingTransaction: boolean\n isAutoSlippage: boolean\n timeEstimate?: { time: number; formattedTime: string }\n isGasSponsored: boolean\n currentCheckStatus?: ExecuteStepItem['checkStatus']\n}\n\ntype Props = {\n open: boolean\n address?: Address | string\n fromToken?: Token\n toToken?: Token\n slippageTolerance?: string\n wallet?: AdaptedWallet\n steps: Execute['steps'] | null\n quote: Execute | null\n swapError: Error | null\n setSwapError: Dispatch<SetStateAction<Error | null>>\n children: (props: ChildrenProps) => ReactNode\n onSuccess?: (quote: Execute, steps: Execute['steps']) => void\n onValidating?: (quote: Execute) => void\n}\n\nexport const TransactionModalRenderer: FC<Props> = ({\n open,\n slippageTolerance,\n wallet,\n steps,\n quote,\n swapError,\n setSwapError,\n children,\n onSuccess,\n onValidating\n}) => {\n const relayClient = useRelayClient()\n const chainId = quote?.details?.currencyIn?.currency?.chainId || 1\n\n const [progressStep, setProgressStep] = useState(\n TransactionProgressStep.Confirmation\n )\n const [currentStep, setCurrentStep] = useState<\n null | NonNullable<Execute['steps']>['0']\n >()\n const [currentStepItem, setCurrentStepItem] = useState<\n null | NonNullable<NonNullable<Execute['steps']>['0']['items']>['0']\n >()\n const [allTxHashes, setAllTxHashes] = useState<TxHashes>([])\n const [waitingForSteps, setWaitingForSteps] = useState(false)\n const [hasStartedValidation, setHasStartedValidation] = useState(false)\n\n useEffect(() => {\n if (!open) {\n setHasStartedValidation(false)\n }\n }, [open])\n\n useEffect(() => {\n if (swapError) {\n setProgressStep(TransactionProgressStep.Error)\n return\n }\n if (!steps) {\n return\n }\n\n const executableSteps = steps.filter(\n (step) => step.items && step.items.length > 0\n )\n\n let stepCount = executableSteps.length\n let txHashes: TxHashes = []\n let currentStep: NonNullable<Execute['steps']>['0'] | null = null\n let currentStepItem:\n | NonNullable<Execute['steps'][0]['items']>[0]\n | undefined\n\n for (const step of executableSteps) {\n for (const item of step.items || []) {\n if (item.txHashes && item.txHashes.length > 0) {\n txHashes = item.txHashes.concat([...txHashes])\n }\n if (item.internalTxHashes && item.internalTxHashes.length > 0) {\n txHashes = item.internalTxHashes.concat([...txHashes])\n }\n if (item.status === 'incomplete') {\n currentStep = step\n currentStepItem = item\n\n break // Exit the inner loop once the first incomplete item is found\n }\n }\n if (currentStep && currentStepItem) break // Exit the outer loop if the current step and item have been found\n }\n\n setAllTxHashes(txHashes)\n\n if (\n !hasStartedValidation &&\n (txHashes.length > 0 || currentStepItem?.isValidatingSignature == true) &&\n progressStep === TransactionProgressStep.Confirmation\n ) {\n onValidating?.(quote as Execute)\n setHasStartedValidation(true)\n }\n\n if (!currentStep) {\n currentStep = executableSteps[stepCount - 1]\n }\n\n setCurrentStep(currentStep)\n setCurrentStepItem(currentStepItem)\n\n const isBitcoinDestination =\n quote?.details?.currencyOut?.currency?.chainId === 8253038\n\n const allStepsComplete = steps.every(\n (step) =>\n !step.items ||\n step.items.length == 0 ||\n step.items?.every((item) => {\n if (isBitcoinDestination && item.checkStatus === 'submitted') {\n return true\n }\n return item.status === 'complete'\n })\n )\n\n const hasPendingItems = steps.some((step) =>\n step.items?.some((item) => item.checkStatus === 'pending')\n )\n\n const hasSubmittedItems = steps.some((step) =>\n step.items?.some((item) => item.checkStatus === 'submitted')\n )\n\n // Check if any step items are still validating\n const hasValidatingItems = steps.some((step) =>\n step.items?.some(\n (item) =>\n item.isValidatingSignature === true ||\n item.progressState === 'validating'\n )\n )\n\n // Transition to Submitted state when items are pending or submitted\n if (\n (hasPendingItems || hasSubmittedItems) &&\n progressStep === TransactionProgressStep.Confirmation &&\n !hasValidatingItems\n ) {\n setProgressStep(TransactionProgressStep.Submitted)\n onValidating?.(quote as Execute)\n }\n\n // Only show success if all steps are complete\n if (allStepsComplete && progressStep !== TransactionProgressStep.Success) {\n setProgressStep(TransactionProgressStep.Success)\n onSuccess?.(quote as Execute, steps)\n }\n }, [steps, swapError])\n\n const requestId = useMemo(() => extractDepositRequestId(steps), [steps])\n\n // Fetch Success Tx\n const { data: transactions, isInitialLoading: isLoadingTransaction } =\n useRequests(\n (progressStep === TransactionProgressStep.Success ||\n progressStep === TransactionProgressStep.Error) &&\n requestId\n ? { id: requestId }\n : undefined,\n relayClient?.baseApiUrl,\n {\n enabled:\n (progressStep === TransactionProgressStep.Success ||\n progressStep === TransactionProgressStep.Error) &&\n (requestId || allTxHashes[0])\n ? true\n : false,\n refetchInterval(query) {\n if (query.state.dataUpdateCount > 10) {\n return 0\n }\n const transaction = query.state.data?.pages[0].requests?.[0]\n if (!transaction) {\n return 2500\n }\n // If this is a refund but outTxs is not populated yet, keep polling\n const isRefund =\n transaction.status === 'refund' ||\n transaction.data?.refundCurrencyData\n if (\n isRefund &&\n (!transaction.data?.outTxs || transaction.data.outTxs.length === 0)\n ) {\n return 2500\n }\n return 0\n }\n }\n )\n const transaction = transactions[0]\n const { fillTime, seconds } = calculateFillTime(transaction)\n\n const isAutoSlippage = slippageTolerance === undefined\n const timeEstimate = calculatePriceTimeEstimate(quote?.details)\n const _isGasSponsored = isGasSponsored(quote as Execute)\n\n return (\n <>\n {children({\n wallet,\n progressStep,\n setProgressStep,\n currentStep,\n setCurrentStep,\n currentStepItem,\n setCurrentStepItem,\n quote,\n steps,\n waitingForSteps,\n swapError,\n setSwapError,\n allTxHashes,\n setAllTxHashes,\n transaction,\n fillTime,\n seconds,\n requestId,\n isLoadingTransaction,\n isAutoSlippage,\n timeEstimate,\n isGasSponsored: _isGasSponsored,\n currentCheckStatus: currentStepItem?.checkStatus\n })}\n </>\n )\n}\n"]}
1
+ {"version":3,"file":"TransactionModalRenderer.js","sourceRoot":"","sources":["../../../../../src/components/common/TransactionModal/TransactionModalRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n type FC,\n useMemo,\n useState,\n useEffect,\n type ReactNode,\n type SetStateAction,\n type Dispatch\n} from 'react'\nimport { type Address } from 'viem'\nimport {\n type AdaptedWallet,\n type Execute,\n type ExecuteStep,\n type ExecuteStepItem\n} from '@relayprotocol/relay-sdk'\nimport {\n calculateFillTime,\n extractDepositRequestId\n} from '../../../utils/relayTransaction.js'\nimport type { Token } from '../../../types/index.js'\nimport { useRequests } from '@relayprotocol/relay-kit-hooks'\nimport { useRelayClient } from '../../../hooks/index.js'\nimport {\n calculatePriceTimeEstimate,\n isGasSponsored\n} from '../../../utils/quote.js'\nexport enum TransactionProgressStep {\n Confirmation,\n Submitted,\n Success,\n Error\n}\n\nexport type TxHashes = {\n txHash: string\n chainId: number\n isBatchTx?: boolean\n}[]\n\nexport type ChildrenProps = {\n wallet?: AdaptedWallet\n progressStep: TransactionProgressStep\n setProgressStep: Dispatch<SetStateAction<TransactionProgressStep>>\n currentStep?: ExecuteStep | null\n setCurrentStep: Dispatch<SetStateAction<ExecuteStep | undefined | null>>\n currentStepItem: ExecuteStepItem | null | undefined\n setCurrentStepItem: Dispatch<\n SetStateAction<ExecuteStepItem | null | undefined>\n >\n quote: Execute | null\n swapError: Error | null\n setSwapError: Dispatch<SetStateAction<Error | null>>\n steps: Execute['steps'] | null\n waitingForSteps: boolean\n allTxHashes: TxHashes\n setAllTxHashes: Dispatch<SetStateAction<TxHashes>>\n transaction: ReturnType<typeof useRequests>['data']['0']\n seconds: number\n fillTime: string\n requestId: string | null\n isLoadingTransaction: boolean\n isAutoSlippage: boolean\n timeEstimate?: { time: number; formattedTime: string }\n isGasSponsored: boolean\n currentCheckStatus?: ExecuteStepItem['checkStatus']\n}\n\ntype Props = {\n open: boolean\n address?: Address | string\n fromToken?: Token\n toToken?: Token\n slippageTolerance?: string\n wallet?: AdaptedWallet\n steps: Execute['steps'] | null\n quote: Execute | null\n swapError: Error | null\n setSwapError: Dispatch<SetStateAction<Error | null>>\n children: (props: ChildrenProps) => ReactNode\n onSuccess?: (quote: Execute, steps: Execute['steps']) => void\n onValidating?: (quote: Execute) => void\n}\n\nexport const TransactionModalRenderer: FC<Props> = ({\n open,\n slippageTolerance,\n wallet,\n steps,\n quote,\n swapError,\n setSwapError,\n children,\n onSuccess,\n onValidating\n}) => {\n const relayClient = useRelayClient()\n const chainId = quote?.details?.currencyIn?.currency?.chainId || 1\n\n const [progressStep, setProgressStep] = useState(\n TransactionProgressStep.Confirmation\n )\n const [currentStep, setCurrentStep] = useState<\n null | NonNullable<Execute['steps']>['0']\n >()\n const [currentStepItem, setCurrentStepItem] = useState<\n null | NonNullable<NonNullable<Execute['steps']>['0']['items']>['0']\n >()\n const [allTxHashes, setAllTxHashes] = useState<TxHashes>([])\n const [waitingForSteps, setWaitingForSteps] = useState(false)\n const [hasStartedValidation, setHasStartedValidation] = useState(false)\n\n useEffect(() => {\n if (!open) {\n setHasStartedValidation(false)\n }\n }, [open])\n\n useEffect(() => {\n if (swapError) {\n setProgressStep(TransactionProgressStep.Error)\n return\n }\n if (!steps) {\n return\n }\n\n const executableSteps = steps.filter(\n (step) => step.items && step.items.length > 0\n )\n\n let stepCount = executableSteps.length\n let txHashes: TxHashes = []\n let currentStep: NonNullable<Execute['steps']>['0'] | null = null\n let currentStepItem:\n | NonNullable<Execute['steps'][0]['items']>[0]\n | undefined\n\n for (const step of executableSteps) {\n for (const item of step.items || []) {\n if (item.txHashes && item.txHashes.length > 0) {\n txHashes = item.txHashes.concat([...txHashes])\n }\n if (item.internalTxHashes && item.internalTxHashes.length > 0) {\n txHashes = item.internalTxHashes.concat([...txHashes])\n }\n if (item.status === 'incomplete') {\n currentStep = step\n currentStepItem = item\n\n break // Exit the inner loop once the first incomplete item is found\n }\n }\n if (currentStep && currentStepItem) break // Exit the outer loop if the current step and item have been found\n }\n\n setAllTxHashes(txHashes)\n\n if (\n !hasStartedValidation &&\n (txHashes.length > 0 || currentStepItem?.isValidatingSignature == true) &&\n progressStep === TransactionProgressStep.Confirmation\n ) {\n onValidating?.(quote as Execute)\n setHasStartedValidation(true)\n }\n\n if (!currentStep) {\n currentStep = executableSteps[stepCount - 1]\n }\n\n setCurrentStep(currentStep)\n setCurrentStepItem(currentStepItem)\n\n const isBitcoinDestination =\n quote?.details?.currencyOut?.currency?.chainId === 8253038\n\n const allStepsComplete = steps.every(\n (step) =>\n !step.items ||\n step.items.length == 0 ||\n step.items?.every((item) => {\n if (isBitcoinDestination && item.checkStatus === 'submitted') {\n return true\n }\n return item.status === 'complete'\n })\n )\n\n const hasPendingItems = steps.some((step) =>\n step.items?.some((item) => item.checkStatus === 'pending')\n )\n\n const hasSubmittedItems = steps.some((step) =>\n step.items?.some((item) => item.checkStatus === 'submitted')\n )\n\n // Check if any step items are still validating\n const hasValidatingItems = steps.some((step) =>\n step.items?.some(\n (item) =>\n item.isValidatingSignature === true ||\n item.progressState === 'validating'\n )\n )\n\n // Transition to Submitted state when items are pending or submitted\n if (\n (hasPendingItems || hasSubmittedItems) &&\n progressStep === TransactionProgressStep.Confirmation &&\n !hasValidatingItems\n ) {\n setProgressStep(TransactionProgressStep.Submitted)\n onValidating?.(quote as Execute)\n }\n\n // Only show success if all steps are complete\n if (allStepsComplete && progressStep !== TransactionProgressStep.Success) {\n setProgressStep(TransactionProgressStep.Success)\n onSuccess?.(quote as Execute, steps)\n }\n }, [steps, swapError])\n\n const requestId = useMemo(() => extractDepositRequestId(steps), [steps])\n\n // Fetch Success Tx\n const { data: transactions, isInitialLoading: isLoadingTransaction } =\n useRequests(\n (progressStep === TransactionProgressStep.Success ||\n progressStep === TransactionProgressStep.Error) &&\n requestId\n ? { id: requestId }\n : undefined,\n relayClient?.baseApiUrl,\n {\n enabled:\n (progressStep === TransactionProgressStep.Success ||\n progressStep === TransactionProgressStep.Error) &&\n (requestId || allTxHashes[0])\n ? true\n : false,\n refetchInterval(query) {\n if (query.state.dataUpdateCount > 10) {\n return 0\n }\n const transaction = query.state.data?.pages[0].requests?.[0]\n if (!transaction) {\n return 2500\n }\n // Keep polling until the request reaches a terminal status so the\n // success view can replace quoted values with the final actual ones\n const isTerminalStatus =\n transaction.status === 'success' ||\n transaction.status === 'failure' ||\n transaction.status === 'refund'\n if (!isTerminalStatus) {\n return 2500\n }\n // If this is a refund but outTxs is not populated yet, keep polling\n const isRefund =\n transaction.status === 'refund' ||\n transaction.data?.refundCurrencyData\n if (\n isRefund &&\n (!transaction.data?.outTxs || transaction.data.outTxs.length === 0)\n ) {\n return 2500\n }\n return 0\n }\n }\n )\n const transaction = transactions[0]\n const { fillTime, seconds } = calculateFillTime(transaction)\n\n const isAutoSlippage = slippageTolerance === undefined\n const timeEstimate = calculatePriceTimeEstimate(quote?.details)\n const _isGasSponsored = isGasSponsored(quote as Execute)\n\n return (\n <>\n {children({\n wallet,\n progressStep,\n setProgressStep,\n currentStep,\n setCurrentStep,\n currentStepItem,\n setCurrentStepItem,\n quote,\n steps,\n waitingForSteps,\n swapError,\n setSwapError,\n allTxHashes,\n setAllTxHashes,\n transaction,\n fillTime,\n seconds,\n requestId,\n isLoadingTransaction,\n isAutoSlippage,\n timeEstimate,\n isGasSponsored: _isGasSponsored,\n currentCheckStatus: currentStepItem?.checkStatus\n })}\n </>\n )\n}\n"]}
@@ -55,7 +55,7 @@ const FeeBreakdown = ({ feeBreakdown, isFetchingQuote, quote, toToken, fromToken
55
55
  }, children: [(0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { icon: faClock_1.faClock, width: 16 }), (0, jsx_runtime_1.jsxs)(index_js_1.Text, { style: "subtitle2", children: ["~ ", timeEstimate?.formattedTime] })] }))
56
56
  },
57
57
  {
58
- title: 'Network cost',
58
+ title: 'Deposit gas',
59
59
  value: ((0, jsx_runtime_1.jsxs)(index_js_1.Flex, { align: "center", className: "relay:gap-1", children: [(0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { icon: faGasPump_1.faGasPump, width: 16, className: "relay:text-[#C1C8CD]" }), (0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle2", children: originGasFeeFormatted })] }))
60
60
  },
61
61
  {
@@ -1 +1 @@
1
- {"version":3,"file":"FeeBreakdown.js","sourceRoot":"","sources":["../../../../src/components/widgets/FeeBreakdown.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, type FC } from 'react'\nimport { Box, Button, Flex, Text } from '../primitives/index.js'\nimport type { ChildrenProps } from './SwapWidgetRenderer.js'\nimport { formatBN, formatDollar } from '../../utils/numbers.js'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faGasPump } from '@fortawesome/free-solid-svg-icons/faGasPump'\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons/faChevronDown'\nimport FetchingQuoteLoader from '../widgets/FetchingQuoteLoader.js'\nimport type { RelayChain } from '@relayprotocol/relay-sdk'\nimport {\n CollapsibleContent,\n CollapsibleRoot,\n CollapsibleTrigger\n} from '../primitives/Collapsible.js'\nimport { faClock } from '@fortawesome/free-solid-svg-icons/faClock'\nimport { faInfoCircle } from '@fortawesome/free-solid-svg-icons/faInfoCircle'\nimport { PriceImpactTooltip } from './PriceImpactTooltip.js'\nimport { getSlippageRating, ratingToColor } from '../../utils/slippage.js'\nimport Tooltip from '../primitives/Tooltip.js'\nimport React from 'react'\nimport { cn } from '../../utils/cn.js'\n\ntype Props = Pick<\n ChildrenProps,\n | 'feeBreakdown'\n | 'isFetchingQuote'\n | 'quote'\n | 'toToken'\n | 'fromToken'\n | 'timeEstimate'\n> & {\n toChain?: RelayChain\n isSingleChainLocked?: boolean\n fromChainWalletVMSupported?: boolean\n isAutoSlippage: boolean\n slippageInputBps?: string\n error?: any\n onOpenSlippageConfig?: () => void\n}\n\nconst formatSwapRate = (rate: number) => {\n return rate >= 1 ? formatBN(rate, 2, 18, false) : formatBN(rate, 4, 18, false)\n}\n\nconst FeeBreakdown: FC<Props> = ({\n feeBreakdown,\n isFetchingQuote,\n quote,\n toToken,\n fromToken,\n toChain,\n timeEstimate,\n isSingleChainLocked,\n fromChainWalletVMSupported,\n isAutoSlippage,\n slippageInputBps,\n error,\n onOpenSlippageConfig\n}) => {\n const [isOpen, setIsOpen] = useState(false)\n const swapRate = quote?.details?.rate\n const isFixedRate = quote?.details?.isFixedRate\n const originGasFee = feeBreakdown?.breakdown?.find(\n (fee) => fee.id === 'origin-gas'\n )\n const originGasFeeFormatted = formatDollar(\n Math.abs(originGasFee?.usd.value ?? 0)\n )\n\n const [rateMode, setRateMode] = useState<'input' | 'output'>('input')\n const isHighPriceImpact = Number(quote?.details?.totalImpact?.percent) < -3.5\n\n const isSameChain = toToken?.chainId === fromToken?.chainId\n const originSlippageTolerance =\n quote?.details?.slippageTolerance?.origin?.percent\n const destinationSlippageTolerance =\n quote?.details?.slippageTolerance?.destination?.percent\n const quoteSlippage = isFixedRate\n ? '0'\n : ((isSameChain\n ? destinationSlippageTolerance === '0'\n ? originSlippageTolerance\n : destinationSlippageTolerance\n : destinationSlippageTolerance) ?? '0')\n const slippageInputNumber = Number(\n (Number(slippageInputBps ?? '0') / 100).toFixed(2)\n )\n const slippage = `${Math.max(Number(quoteSlippage), slippageInputNumber)}`\n\n const slippageRating = getSlippageRating(slippage)\n const slippageRatingColor = ratingToColor[slippageRating]\n const minimumAmountFormatted = quote?.details?.currencyOut?.minimumAmount\n ? formatBN(\n quote.details.currencyOut.minimumAmount,\n 6,\n toToken?.decimals,\n false\n )\n : undefined\n\n const breakdown = [\n {\n title: 'Estimated time',\n value: (\n <Flex\n align=\"center\"\n className=\"relay:gap-1\"\n style={{\n color:\n timeEstimate && timeEstimate.time <= 30\n ? 'var(--relay-colors-grass-9)'\n : 'var(--relay-colors-amber-9)'\n }}\n >\n <FontAwesomeIcon icon={faClock} width={16} />\n <Text style=\"subtitle2\">~ {timeEstimate?.formattedTime}</Text>\n </Flex>\n )\n },\n {\n title: 'Network cost',\n value: (\n <Flex align=\"center\" className=\"relay:gap-1\">\n <FontAwesomeIcon\n icon={faGasPump}\n width={16}\n className=\"relay:text-[#C1C8CD]\"\n />\n <Text style=\"subtitle2\">{originGasFeeFormatted}</Text>\n </Flex>\n )\n },\n {\n title: 'Price Impact',\n value: (\n <PriceImpactTooltip\n feeBreakdown={feeBreakdown}\n tooltipProps={{ side: 'top', align: 'end' }}\n >\n {\n <div>\n <Flex\n align=\"center\"\n className=\"relay:gap-1 relay:text-[color:var(--relay-colors-gray8)]\"\n >\n <Text\n style=\"subtitle2\"\n className={cn(\n isHighPriceImpact &&\n 'relay:text-[color:var(--relay-colors-red11)]'\n )}\n >\n {feeBreakdown?.totalFees?.priceImpactPercentage}\n </Text>\n <FontAwesomeIcon\n icon={faInfoCircle}\n width={14}\n height={14}\n className=\"relay:inline-block relay:ml-[4px]\"\n />\n </Flex>\n </div>\n }\n </PriceImpactTooltip>\n )\n }\n ]\n\n if (!feeBreakdown) {\n if (isFetchingQuote) {\n return (\n <Box\n id={'fee-breakdown-section'}\n className=\"relay:rounded-[var(--relay-radii-widget-card-border-radius)] relay:bg-[var(--relay-colors-widget-background)] relay:border-widget-card relay:overflow-hidden relay:mb-[var(--relay-spacing-widget-card-section-gutter)]\"\n >\n <div className=\"relay:mt-0 relay:mb-0 relay:px-3 relay:py-[12px] relay:w-full relay:flex relay:justify-center\">\n <FetchingQuoteLoader isLoading={isFetchingQuote} containerClassName=\"relay:!my-0 relay:!py-0\" />\n </div>\n </Box>\n )\n } else {\n return null\n }\n }\n\n return (\n <Flex\n className=\"relay:rounded-[var(--relay-radii-widget-card-border-radius)] relay:bg-[var(--relay-colors-widget-background)] relay:overflow-hidden relay:mb-[var(--relay-spacing-widget-card-section-gutter)] relay:border-widget-card\"\n direction=\"column\"\n >\n <Flex justify=\"between\" align=\"center\" className=\"relay:p-3 relay:pb-0\">\n <Text style=\"subtitle2\">Max Slippage</Text>\n <Flex align=\"center\" className=\"relay:gap-2\">\n {isAutoSlippage ? (\n <Button\n aria-label=\"Auto\"\n className=\"relay:font-medium relay:px-[6px] relay:py-[2px] relay:min-h-0 relay:leading-[20px] relay:bg-[var(--relay-colors-widget-selector-background)] relay:border-none relay:hover:bg-[var(--relay-colors-widget-selector-hover-background)]\"\n style={{ fontSize: '12px' }}\n color=\"white\"\n size=\"none\"\n onClick={(e) => {\n e.preventDefault()\n onOpenSlippageConfig?.()\n }}\n >\n Auto\n </Button>\n ) : null}\n <Tooltip\n side=\"top\"\n align=\"end\"\n content={\n minimumAmountFormatted ? (\n <Flex direction=\"row\" className=\"relay:gap-2\">\n <Text style=\"subtitle2\" color=\"subtle\">\n Min. received\n </Text>\n <Text style=\"subtitle2\">\n {minimumAmountFormatted} {toToken?.symbol}\n </Text>\n </Flex>\n ) : null\n }\n >\n <Text style=\"subtitle2\">\n <span\n style={{\n color: slippageRatingColor\n ? `var(--relay-colors-${slippageRatingColor})`\n : undefined\n }}\n >\n {slippage}%\n </span>\n </Text>\n </Tooltip>\n </Flex>\n </Flex>\n <CollapsibleRoot open={isOpen} onOpenChange={setIsOpen}>\n <CollapsibleTrigger id={'fee-breakdown-section'}>\n <Flex\n justify=\"between\"\n align=\"center\"\n className=\"relay:flex-row relay:gap-2 relay:w-full relay:p-3\"\n >\n <span\n className=\"relay:cursor-pointer relay:shrink relay:overflow-hidden relay:h-[21px]\"\n onClick={(e) => {\n setRateMode(rateMode === 'input' ? 'output' : 'input')\n e.preventDefault()\n }}\n >\n <ConversionRate\n fromToken={fromToken}\n toToken={toToken}\n rate={Number(swapRate)}\n isInputMode={rateMode === 'input'}\n />\n </span>\n\n <Flex\n className=\"relay:gap-2 relay:shrink-0\"\n style={{\n color:\n timeEstimate && timeEstimate.time <= 30\n ? 'var(--relay-colors-grass-9)'\n : 'var(--relay-colors-amber-9)'\n }}\n align=\"center\"\n >\n {!isOpen && timeEstimate && timeEstimate?.time !== 0 ? (\n <>\n <FontAwesomeIcon icon={faClock} width={16} />\n <Text style=\"subtitle2\" className=\"relay:shrink-0\">\n ~ {timeEstimate?.formattedTime}\n </Text>\n <Flex\n justify=\"center\"\n align=\"center\"\n className=\"relay:text-[color:var(--relay-colors-gray6)] relay:h-[4px]\"\n >\n &#8226;\n </Flex>\n </>\n ) : null}\n {!isOpen && (\n <>\n <FontAwesomeIcon\n icon={faGasPump}\n width={16}\n className=\"relay:text-[#C1C8CD]\"\n />\n <Text style=\"subtitle2\" className=\"relay:shrink-0\">\n {originGasFeeFormatted}\n </Text>\n </>\n )}\n <div\n className=\"relay:ml-2 relay:transition-transform relay:duration-300 relay:text-[color:var(--relay-colors-gray9)]\"\n style={{\n transform: isOpen ? 'rotate(-180deg)' : 'rotate(0)'\n }}\n >\n <FontAwesomeIcon icon={faChevronDown} width={12} />\n </div>\n </Flex>\n </Flex>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <Flex\n direction=\"column\"\n className=\"relay:px-3 relay:pb-3 relay:pt-0 relay:gap-2 relay:bg-[var(--relay-colors-widget-background)]\"\n >\n {breakdown.map((item) => {\n return (\n <React.Fragment key={item.title}>\n <Flex\n justify=\"between\"\n align=\"center\"\n className=\"relay:w-full relay:gap-4\"\n >\n <Text\n style=\"subtitle2\"\n color={'subtle'}\n className=\"relay:self-start\"\n >\n {item.title}\n </Text>\n {item.value}\n </Flex>\n </React.Fragment>\n )\n })}\n </Flex>\n </CollapsibleContent>\n </CollapsibleRoot>\n </Flex>\n )\n}\n\nexport default FeeBreakdown\n\ntype ConversionRateProps = {\n fromToken?: { symbol: string }\n toToken?: { symbol: string }\n rate: number\n isInputMode: boolean\n}\n\nconst ConversionRate: FC<ConversionRateProps> = ({\n fromToken,\n toToken,\n rate,\n isInputMode\n}) => {\n const displayRate = isInputMode ? rate : 1 / rate\n const fromSymbol = isInputMode ? fromToken?.symbol : toToken?.symbol\n const toSymbol = isInputMode ? toToken?.symbol : fromToken?.symbol\n\n const rateText = `1 ${fromSymbol} = ${formatSwapRate(displayRate)} ${toSymbol}`\n const shouldShowTooltip = rateText.length > 22\n\n const content = (\n <div className=\"relay:w-full relay:min-w-0\">\n <Text style=\"subtitle2\" ellipsify>\n {rateText}\n </Text>\n </div>\n )\n\n if (shouldShowTooltip) {\n return (\n <Tooltip\n content={<Text style=\"subtitle2\">{rateText}</Text>}\n asChild={true}\n >\n {content}\n </Tooltip>\n )\n }\n\n return content\n}\n"]}
1
+ {"version":3,"file":"FeeBreakdown.js","sourceRoot":"","sources":["../../../../src/components/widgets/FeeBreakdown.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, type FC } from 'react'\nimport { Box, Button, Flex, Text } from '../primitives/index.js'\nimport type { ChildrenProps } from './SwapWidgetRenderer.js'\nimport { formatBN, formatDollar } from '../../utils/numbers.js'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faGasPump } from '@fortawesome/free-solid-svg-icons/faGasPump'\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons/faChevronDown'\nimport FetchingQuoteLoader from '../widgets/FetchingQuoteLoader.js'\nimport type { RelayChain } from '@relayprotocol/relay-sdk'\nimport {\n CollapsibleContent,\n CollapsibleRoot,\n CollapsibleTrigger\n} from '../primitives/Collapsible.js'\nimport { faClock } from '@fortawesome/free-solid-svg-icons/faClock'\nimport { faInfoCircle } from '@fortawesome/free-solid-svg-icons/faInfoCircle'\nimport { PriceImpactTooltip } from './PriceImpactTooltip.js'\nimport { getSlippageRating, ratingToColor } from '../../utils/slippage.js'\nimport Tooltip from '../primitives/Tooltip.js'\nimport React from 'react'\nimport { cn } from '../../utils/cn.js'\n\ntype Props = Pick<\n ChildrenProps,\n | 'feeBreakdown'\n | 'isFetchingQuote'\n | 'quote'\n | 'toToken'\n | 'fromToken'\n | 'timeEstimate'\n> & {\n toChain?: RelayChain\n isSingleChainLocked?: boolean\n fromChainWalletVMSupported?: boolean\n isAutoSlippage: boolean\n slippageInputBps?: string\n error?: any\n onOpenSlippageConfig?: () => void\n}\n\nconst formatSwapRate = (rate: number) => {\n return rate >= 1 ? formatBN(rate, 2, 18, false) : formatBN(rate, 4, 18, false)\n}\n\nconst FeeBreakdown: FC<Props> = ({\n feeBreakdown,\n isFetchingQuote,\n quote,\n toToken,\n fromToken,\n toChain,\n timeEstimate,\n isSingleChainLocked,\n fromChainWalletVMSupported,\n isAutoSlippage,\n slippageInputBps,\n error,\n onOpenSlippageConfig\n}) => {\n const [isOpen, setIsOpen] = useState(false)\n const swapRate = quote?.details?.rate\n const isFixedRate = quote?.details?.isFixedRate\n const originGasFee = feeBreakdown?.breakdown?.find(\n (fee) => fee.id === 'origin-gas'\n )\n const originGasFeeFormatted = formatDollar(\n Math.abs(originGasFee?.usd.value ?? 0)\n )\n\n const [rateMode, setRateMode] = useState<'input' | 'output'>('input')\n const isHighPriceImpact = Number(quote?.details?.totalImpact?.percent) < -3.5\n\n const isSameChain = toToken?.chainId === fromToken?.chainId\n const originSlippageTolerance =\n quote?.details?.slippageTolerance?.origin?.percent\n const destinationSlippageTolerance =\n quote?.details?.slippageTolerance?.destination?.percent\n const quoteSlippage = isFixedRate\n ? '0'\n : ((isSameChain\n ? destinationSlippageTolerance === '0'\n ? originSlippageTolerance\n : destinationSlippageTolerance\n : destinationSlippageTolerance) ?? '0')\n const slippageInputNumber = Number(\n (Number(slippageInputBps ?? '0') / 100).toFixed(2)\n )\n const slippage = `${Math.max(Number(quoteSlippage), slippageInputNumber)}`\n\n const slippageRating = getSlippageRating(slippage)\n const slippageRatingColor = ratingToColor[slippageRating]\n const minimumAmountFormatted = quote?.details?.currencyOut?.minimumAmount\n ? formatBN(\n quote.details.currencyOut.minimumAmount,\n 6,\n toToken?.decimals,\n false\n )\n : undefined\n\n const breakdown = [\n {\n title: 'Estimated time',\n value: (\n <Flex\n align=\"center\"\n className=\"relay:gap-1\"\n style={{\n color:\n timeEstimate && timeEstimate.time <= 30\n ? 'var(--relay-colors-grass-9)'\n : 'var(--relay-colors-amber-9)'\n }}\n >\n <FontAwesomeIcon icon={faClock} width={16} />\n <Text style=\"subtitle2\">~ {timeEstimate?.formattedTime}</Text>\n </Flex>\n )\n },\n {\n title: 'Deposit gas',\n value: (\n <Flex align=\"center\" className=\"relay:gap-1\">\n <FontAwesomeIcon\n icon={faGasPump}\n width={16}\n className=\"relay:text-[#C1C8CD]\"\n />\n <Text style=\"subtitle2\">{originGasFeeFormatted}</Text>\n </Flex>\n )\n },\n {\n title: 'Price Impact',\n value: (\n <PriceImpactTooltip\n feeBreakdown={feeBreakdown}\n tooltipProps={{ side: 'top', align: 'end' }}\n >\n {\n <div>\n <Flex\n align=\"center\"\n className=\"relay:gap-1 relay:text-[color:var(--relay-colors-gray8)]\"\n >\n <Text\n style=\"subtitle2\"\n className={cn(\n isHighPriceImpact &&\n 'relay:text-[color:var(--relay-colors-red11)]'\n )}\n >\n {feeBreakdown?.totalFees?.priceImpactPercentage}\n </Text>\n <FontAwesomeIcon\n icon={faInfoCircle}\n width={14}\n height={14}\n className=\"relay:inline-block relay:ml-[4px]\"\n />\n </Flex>\n </div>\n }\n </PriceImpactTooltip>\n )\n }\n ]\n\n if (!feeBreakdown) {\n if (isFetchingQuote) {\n return (\n <Box\n id={'fee-breakdown-section'}\n className=\"relay:rounded-[var(--relay-radii-widget-card-border-radius)] relay:bg-[var(--relay-colors-widget-background)] relay:border-widget-card relay:overflow-hidden relay:mb-[var(--relay-spacing-widget-card-section-gutter)]\"\n >\n <div className=\"relay:mt-0 relay:mb-0 relay:px-3 relay:py-[12px] relay:w-full relay:flex relay:justify-center\">\n <FetchingQuoteLoader\n isLoading={isFetchingQuote}\n containerClassName=\"relay:!my-0 relay:!py-0\"\n />\n </div>\n </Box>\n )\n } else {\n return null\n }\n }\n\n return (\n <Flex\n className=\"relay:rounded-[var(--relay-radii-widget-card-border-radius)] relay:bg-[var(--relay-colors-widget-background)] relay:overflow-hidden relay:mb-[var(--relay-spacing-widget-card-section-gutter)] relay:border-widget-card\"\n direction=\"column\"\n >\n <Flex justify=\"between\" align=\"center\" className=\"relay:p-3 relay:pb-0\">\n <Text style=\"subtitle2\">Max Slippage</Text>\n <Flex align=\"center\" className=\"relay:gap-2\">\n {isAutoSlippage ? (\n <Button\n aria-label=\"Auto\"\n className=\"relay:font-medium relay:px-[6px] relay:py-[2px] relay:min-h-0 relay:leading-[20px] relay:bg-[var(--relay-colors-widget-selector-background)] relay:border-none relay:hover:bg-[var(--relay-colors-widget-selector-hover-background)]\"\n style={{ fontSize: '12px' }}\n color=\"white\"\n size=\"none\"\n onClick={(e) => {\n e.preventDefault()\n onOpenSlippageConfig?.()\n }}\n >\n Auto\n </Button>\n ) : null}\n <Tooltip\n side=\"top\"\n align=\"end\"\n content={\n minimumAmountFormatted ? (\n <Flex direction=\"row\" className=\"relay:gap-2\">\n <Text style=\"subtitle2\" color=\"subtle\">\n Min. received\n </Text>\n <Text style=\"subtitle2\">\n {minimumAmountFormatted} {toToken?.symbol}\n </Text>\n </Flex>\n ) : null\n }\n >\n <Text style=\"subtitle2\">\n <span\n style={{\n color: slippageRatingColor\n ? `var(--relay-colors-${slippageRatingColor})`\n : undefined\n }}\n >\n {slippage}%\n </span>\n </Text>\n </Tooltip>\n </Flex>\n </Flex>\n <CollapsibleRoot open={isOpen} onOpenChange={setIsOpen}>\n <CollapsibleTrigger id={'fee-breakdown-section'}>\n <Flex\n justify=\"between\"\n align=\"center\"\n className=\"relay:flex-row relay:gap-2 relay:w-full relay:p-3\"\n >\n <span\n className=\"relay:cursor-pointer relay:shrink relay:overflow-hidden relay:h-[21px]\"\n onClick={(e) => {\n setRateMode(rateMode === 'input' ? 'output' : 'input')\n e.preventDefault()\n }}\n >\n <ConversionRate\n fromToken={fromToken}\n toToken={toToken}\n rate={Number(swapRate)}\n isInputMode={rateMode === 'input'}\n />\n </span>\n\n <Flex\n className=\"relay:gap-2 relay:shrink-0\"\n style={{\n color:\n timeEstimate && timeEstimate.time <= 30\n ? 'var(--relay-colors-grass-9)'\n : 'var(--relay-colors-amber-9)'\n }}\n align=\"center\"\n >\n {!isOpen && timeEstimate && timeEstimate?.time !== 0 ? (\n <>\n <FontAwesomeIcon icon={faClock} width={16} />\n <Text style=\"subtitle2\" className=\"relay:shrink-0\">\n ~ {timeEstimate?.formattedTime}\n </Text>\n <Flex\n justify=\"center\"\n align=\"center\"\n className=\"relay:text-[color:var(--relay-colors-gray6)] relay:h-[4px]\"\n >\n &#8226;\n </Flex>\n </>\n ) : null}\n {!isOpen && (\n <>\n <FontAwesomeIcon\n icon={faGasPump}\n width={16}\n className=\"relay:text-[#C1C8CD]\"\n />\n <Text style=\"subtitle2\" className=\"relay:shrink-0\">\n {originGasFeeFormatted}\n </Text>\n </>\n )}\n <div\n className=\"relay:ml-2 relay:transition-transform relay:duration-300 relay:text-[color:var(--relay-colors-gray9)]\"\n style={{\n transform: isOpen ? 'rotate(-180deg)' : 'rotate(0)'\n }}\n >\n <FontAwesomeIcon icon={faChevronDown} width={12} />\n </div>\n </Flex>\n </Flex>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <Flex\n direction=\"column\"\n className=\"relay:px-3 relay:pb-3 relay:pt-0 relay:gap-2 relay:bg-[var(--relay-colors-widget-background)]\"\n >\n {breakdown.map((item) => {\n return (\n <React.Fragment key={item.title}>\n <Flex\n justify=\"between\"\n align=\"center\"\n className=\"relay:w-full relay:gap-4\"\n >\n <Text\n style=\"subtitle2\"\n color={'subtle'}\n className=\"relay:self-start\"\n >\n {item.title}\n </Text>\n {item.value}\n </Flex>\n </React.Fragment>\n )\n })}\n </Flex>\n </CollapsibleContent>\n </CollapsibleRoot>\n </Flex>\n )\n}\n\nexport default FeeBreakdown\n\ntype ConversionRateProps = {\n fromToken?: { symbol: string }\n toToken?: { symbol: string }\n rate: number\n isInputMode: boolean\n}\n\nconst ConversionRate: FC<ConversionRateProps> = ({\n fromToken,\n toToken,\n rate,\n isInputMode\n}) => {\n const displayRate = isInputMode ? rate : 1 / rate\n const fromSymbol = isInputMode ? fromToken?.symbol : toToken?.symbol\n const toSymbol = isInputMode ? toToken?.symbol : fromToken?.symbol\n\n const rateText = `1 ${fromSymbol} = ${formatSwapRate(displayRate)} ${toSymbol}`\n const shouldShowTooltip = rateText.length > 22\n\n const content = (\n <div className=\"relay:w-full relay:min-w-0\">\n <Text style=\"subtitle2\" ellipsify>\n {rateText}\n </Text>\n </div>\n )\n\n if (shouldShowTooltip) {\n return (\n <Tooltip\n content={<Text style=\"subtitle2\">{rateText}</Text>}\n asChild={true}\n >\n {content}\n </Tooltip>\n )\n }\n\n return content\n}\n"]}
@@ -11,11 +11,12 @@ const getFeeColor = (value) => {
11
11
  return value > 0 ? 'success' : undefined;
12
12
  };
13
13
  const PriceImpactTooltip = ({ feeBreakdown, children, tooltipProps }) => {
14
- return ((0, jsx_runtime_1.jsx)(Tooltip_js_1.default, { content: (0, jsx_runtime_1.jsxs)(index_js_1.Flex, { className: "relay:min-w-[200px]", direction: "column", children: [(0, jsx_runtime_1.jsxs)(index_js_1.Flex, { align: "center", className: "relay:w-full", children: [(0, jsx_runtime_1.jsxs)(index_js_1.Text, { style: "subtitle3", className: "relay:mr-auto", children: ["Total Price Impact", ' '] }), (0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle3", className: "relay:mr-1 relay:ml-2", color: feeBreakdown?.totalFees?.priceImpactColor, children: feeBreakdown?.totalFees.priceImpact }), (0, jsx_runtime_1.jsxs)(index_js_1.Text, { style: "subtitle3", color: feeBreakdown?.totalFees?.priceImpactColor, children: ["(", feeBreakdown?.totalFees.priceImpactPercentage, ")"] })] }), (0, jsx_runtime_1.jsx)("div", { className: "relay:w-full relay:h-px relay:bg-[var(--relay-colors-slate-6)] relay:my-2" }), (0, jsx_runtime_1.jsxs)(index_js_1.Flex, { align: "center", className: "relay:w-full", children: [(0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle3", color: "subtle", className: "relay:mr-auto", children: "Swap Impact" }), (0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle3", color: getFeeColor(feeBreakdown?.totalFees?.swapImpact?.value), children: feeBreakdown?.totalFees?.swapImpact?.formatted })] }), feeBreakdown?.breakdown.map((fee) => {
14
+ return ((0, jsx_runtime_1.jsx)(Tooltip_js_1.default, { content: (0, jsx_runtime_1.jsxs)(index_js_1.Flex, { className: "relay:min-w-[200px]", direction: "column", children: [(0, jsx_runtime_1.jsxs)(index_js_1.Flex, { align: "center", className: "relay:w-full", children: [(0, jsx_runtime_1.jsxs)(index_js_1.Text, { style: "subtitle3", className: "relay:mr-auto", children: ["Total Price Impact", ' '] }), (0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle3", className: "relay:mr-1 relay:ml-2", color: feeBreakdown?.totalFees?.priceImpactColor, children: feeBreakdown?.totalFees.priceImpact }), (0, jsx_runtime_1.jsxs)(index_js_1.Text, { style: "subtitle3", color: feeBreakdown?.totalFees?.priceImpactColor, children: ["(", feeBreakdown?.totalFees.priceImpactPercentage, ")"] })] }), (0, jsx_runtime_1.jsx)("div", { className: "relay:w-full relay:h-px relay:bg-[var(--relay-colors-slate-6)] relay:my-2" }), (0, jsx_runtime_1.jsxs)(index_js_1.Flex, { align: "center", className: "relay:w-full", children: [(0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle3", color: "subtle", className: "relay:mr-auto", children: "Swap Cost" }), (0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle3", color: getFeeColor(feeBreakdown?.totalFees?.swapImpact?.value), children: feeBreakdown?.totalFees?.swapImpact?.formatted })] }), feeBreakdown?.breakdown.map((fee) => {
15
15
  if (fee.id === 'origin-gas') {
16
16
  return null;
17
17
  }
18
- return ((0, jsx_runtime_1.jsxs)(index_js_1.Flex, { align: "center", className: "relay:w-full", children: [(0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle3", color: "subtle", className: "relay:mr-auto", children: fee.name }), feeBreakdown.isGasSponsored && fee.usd.value === 0 ? ((0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle3", color: "success", children: "Free" })) : ((0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle3", color: getFeeColor(fee.usd.value), children: fee.usd.formatted }))] }, fee.id));
18
+ const isReward = fee.id === 'relayer-fee' && fee.usd.value > 0;
19
+ return ((0, jsx_runtime_1.jsxs)(index_js_1.Flex, { align: "center", className: "relay:w-full", children: [(0, jsx_runtime_1.jsxs)(index_js_1.Flex, { align: "center", className: "relay:mr-auto relay:gap-1", children: [(0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle3", color: "subtle", children: fee.name }), isReward && ((0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle3", color: "success", children: "(Reward)" }))] }), feeBreakdown.isGasSponsored && fee.usd.value === 0 ? ((0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle3", color: "success", children: "Free" })) : ((0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle3", color: getFeeColor(fee.usd.value), children: fee.usd.formatted }))] }, fee.id));
19
20
  }), (0, jsx_runtime_1.jsx)(index_js_1.Anchor, { href: "https://docs.relay.link/references/api/api_core_concepts/fees#relay-fees", target: "_blank", rel: "noopener noreferrer", className: "relay:text-[color:var(--relay-colors-primary11)] relay:!text-[12px]", children: "Learn more about the fees" })] }), ...tooltipProps, children: children }));
20
21
  };
21
22
  exports.PriceImpactTooltip = PriceImpactTooltip;
@@ -1 +1 @@
1
- {"version":3,"file":"PriceImpactTooltip.js","sourceRoot":"","sources":["../../../../src/components/widgets/PriceImpactTooltip.tsx"],"names":[],"mappings":";;;;;AACA,qDAA2D;AAC3D,kFAA8C;AAS9C,MAAM,WAAW,GAAG,CAAC,KAAyB,EAAE,EAAE;IAChD,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACxD,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;AAC1C,CAAC,CAAA;AAEM,MAAM,kBAAkB,GAAgC,CAAC,EAC9D,YAAY,EACZ,QAAQ,EACR,YAAY,EACb,EAAE,EAAE;IACH,OAAO,CACL,uBAAC,oBAAO,IACN,OAAO,EACL,wBAAC,eAAI,IAAC,SAAS,EAAC,qBAAqB,EAAC,SAAS,EAAC,QAAQ,aACtD,wBAAC,eAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,SAAS,EAAC,cAAc,aAC3C,wBAAC,eAAI,IAAC,KAAK,EAAC,WAAW,EAAC,SAAS,EAAC,eAAe,mCAC5B,GAAG,IACjB,EACP,uBAAC,eAAI,IACH,KAAK,EAAC,WAAW,EACjB,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,YAE/C,YAAY,EAAE,SAAS,CAAC,WAAW,GAC/B,EACP,wBAAC,eAAI,IACH,KAAK,EAAC,WAAW,EACjB,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,kBAE9C,YAAY,EAAE,SAAS,CAAC,qBAAqB,SAC1C,IACF,EACP,gCACE,SAAS,EAAC,2EAA2E,GACrF,EACF,wBAAC,eAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,SAAS,EAAC,cAAc,aAC3C,uBAAC,eAAI,IAAC,KAAK,EAAC,WAAW,EAAC,KAAK,EAAC,QAAQ,EAAC,SAAS,EAAC,eAAe,4BAEzD,EACP,uBAAC,eAAI,IACH,KAAK,EAAC,WAAW,EACjB,KAAK,EAAE,WAAW,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,YAE7D,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,GAC1C,IACF,EACN,YAAY,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBACnC,IAAI,GAAG,CAAC,EAAE,KAAK,YAAY,EAAE,CAAC;wBAC5B,OAAO,IAAI,CAAA;oBACb,CAAC;oBACD,OAAO,CACL,wBAAC,eAAI,IAAc,KAAK,EAAC,QAAQ,EAAC,SAAS,EAAC,cAAc,aACxD,uBAAC,eAAI,IAAC,KAAK,EAAC,WAAW,EAAC,KAAK,EAAC,QAAQ,EAAC,SAAS,EAAC,eAAe,YAC7D,GAAG,CAAC,IAAI,GACJ,EACN,YAAY,CAAC,cAAc,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CACpD,uBAAC,eAAI,IAAC,KAAK,EAAC,WAAW,EAAC,KAAK,EAAC,SAAS,qBAEhC,CACR,CAAC,CAAC,CAAC,CACF,uBAAC,eAAI,IAAC,KAAK,EAAC,WAAW,EAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,YACtD,GAAG,CAAC,GAAG,CAAC,SAAS,GACb,CACR,KAZQ,GAAG,CAAC,EAAE,CAaV,CACR,CAAA;gBACH,CAAC,CAAC,EAGF,uBAAC,iBAAM,IACL,IAAI,EAAC,0EAA0E,EAC/E,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,qEAAqE,0CAGxE,IACJ,KAEL,YAAY,YAEf,QAAQ,GACD,CACX,CAAA;AACH,CAAC,CAAA;AA/EY,QAAA,kBAAkB,sBA+E9B","sourcesContent":["import type { FC, ReactNode } from 'react'\nimport { Anchor, Flex, Text } from '../primitives/index.js'\nimport Tooltip from '../primitives/Tooltip.js'\nimport type { ChildrenProps } from '../widgets/SwapWidgetRenderer.js'\n\ntype PriceImpactTooltipProps = {\n feeBreakdown: ChildrenProps['feeBreakdown']\n children: ReactNode\n tooltipProps?: any\n}\n\nconst getFeeColor = (value: number | undefined) => {\n if (value === 0 || value === undefined) return undefined\n return value > 0 ? 'success' : undefined\n}\n\nexport const PriceImpactTooltip: FC<PriceImpactTooltipProps> = ({\n feeBreakdown,\n children,\n tooltipProps\n}) => {\n return (\n <Tooltip\n content={\n <Flex className=\"relay:min-w-[200px]\" direction=\"column\">\n <Flex align=\"center\" className=\"relay:w-full\">\n <Text style=\"subtitle3\" className=\"relay:mr-auto\">\n Total Price Impact{' '}\n </Text>\n <Text\n style=\"subtitle3\"\n className=\"relay:mr-1 relay:ml-2\"\n color={feeBreakdown?.totalFees?.priceImpactColor}\n >\n {feeBreakdown?.totalFees.priceImpact}\n </Text>\n <Text\n style=\"subtitle3\"\n color={feeBreakdown?.totalFees?.priceImpactColor}\n >\n ({feeBreakdown?.totalFees.priceImpactPercentage})\n </Text>\n </Flex>\n <div\n className=\"relay:w-full relay:h-px relay:bg-[var(--relay-colors-slate-6)] relay:my-2\"\n />\n <Flex align=\"center\" className=\"relay:w-full\">\n <Text style=\"subtitle3\" color=\"subtle\" className=\"relay:mr-auto\">\n Swap Impact\n </Text>\n <Text\n style=\"subtitle3\"\n color={getFeeColor(feeBreakdown?.totalFees?.swapImpact?.value)}\n >\n {feeBreakdown?.totalFees?.swapImpact?.formatted}\n </Text>\n </Flex>\n {feeBreakdown?.breakdown.map((fee) => {\n if (fee.id === 'origin-gas') {\n return null\n }\n return (\n <Flex key={fee.id} align=\"center\" className=\"relay:w-full\">\n <Text style=\"subtitle3\" color=\"subtle\" className=\"relay:mr-auto\">\n {fee.name}\n </Text>\n {feeBreakdown.isGasSponsored && fee.usd.value === 0 ? (\n <Text style=\"subtitle3\" color=\"success\">\n Free\n </Text>\n ) : (\n <Text style=\"subtitle3\" color={getFeeColor(fee.usd.value)}>\n {fee.usd.formatted}\n </Text>\n )}\n </Flex>\n )\n })}\n\n {/* Learn More Link */}\n <Anchor\n href=\"https://docs.relay.link/references/api/api_core_concepts/fees#relay-fees\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"relay:text-[color:var(--relay-colors-primary11)] relay:!text-[12px]\"\n >\n Learn more about the fees\n </Anchor>\n </Flex>\n }\n {...tooltipProps}\n >\n {children}\n </Tooltip>\n )\n}\n"]}
1
+ {"version":3,"file":"PriceImpactTooltip.js","sourceRoot":"","sources":["../../../../src/components/widgets/PriceImpactTooltip.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { FC, ReactNode } from 'react'\nimport { Anchor, Flex, Text } from '../primitives/index.js'\nimport Tooltip from '../primitives/Tooltip.js'\nimport type { ChildrenProps } from '../widgets/SwapWidgetRenderer.js'\n\ntype PriceImpactTooltipProps = {\n feeBreakdown: ChildrenProps['feeBreakdown']\n children: ReactNode\n tooltipProps?: any\n}\n\nconst getFeeColor = (value: number | undefined) => {\n if (value === 0 || value === undefined) return undefined\n return value > 0 ? 'success' : undefined\n}\n\nexport const PriceImpactTooltip: FC<PriceImpactTooltipProps> = ({\n feeBreakdown,\n children,\n tooltipProps\n}) => {\n return (\n <Tooltip\n content={\n <Flex className=\"relay:min-w-[200px]\" direction=\"column\">\n <Flex align=\"center\" className=\"relay:w-full\">\n <Text style=\"subtitle3\" className=\"relay:mr-auto\">\n Total Price Impact{' '}\n </Text>\n <Text\n style=\"subtitle3\"\n className=\"relay:mr-1 relay:ml-2\"\n color={feeBreakdown?.totalFees?.priceImpactColor}\n >\n {feeBreakdown?.totalFees.priceImpact}\n </Text>\n <Text\n style=\"subtitle3\"\n color={feeBreakdown?.totalFees?.priceImpactColor}\n >\n ({feeBreakdown?.totalFees.priceImpactPercentage})\n </Text>\n </Flex>\n <div\n className=\"relay:w-full relay:h-px relay:bg-[var(--relay-colors-slate-6)] relay:my-2\"\n />\n <Flex align=\"center\" className=\"relay:w-full\">\n <Text style=\"subtitle3\" color=\"subtle\" className=\"relay:mr-auto\">\n Swap Cost\n </Text>\n <Text\n style=\"subtitle3\"\n color={getFeeColor(feeBreakdown?.totalFees?.swapImpact?.value)}\n >\n {feeBreakdown?.totalFees?.swapImpact?.formatted}\n </Text>\n </Flex>\n {feeBreakdown?.breakdown.map((fee) => {\n if (fee.id === 'origin-gas') {\n return null\n }\n // Positive platform fee = rebalancing reward paid to the user.\n const isReward = fee.id === 'relayer-fee' && fee.usd.value > 0\n return (\n <Flex key={fee.id} align=\"center\" className=\"relay:w-full\">\n <Flex align=\"center\" className=\"relay:mr-auto relay:gap-1\">\n <Text style=\"subtitle3\" color=\"subtle\">\n {fee.name}\n </Text>\n {isReward && (\n <Text style=\"subtitle3\" color=\"success\">\n (Reward)\n </Text>\n )}\n </Flex>\n {feeBreakdown.isGasSponsored && fee.usd.value === 0 ? (\n <Text style=\"subtitle3\" color=\"success\">\n Free\n </Text>\n ) : (\n <Text style=\"subtitle3\" color={getFeeColor(fee.usd.value)}>\n {fee.usd.formatted}\n </Text>\n )}\n </Flex>\n )\n })}\n\n {/* Learn More Link */}\n <Anchor\n href=\"https://docs.relay.link/references/api/api_core_concepts/fees#relay-fees\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"relay:text-[color:var(--relay-colors-primary11)] relay:!text-[12px]\"\n >\n Learn more about the fees\n </Anchor>\n </Flex>\n }\n {...tooltipProps}\n >\n {children}\n </Tooltip>\n )\n}\n"]}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NormalizedWalletName = exports.WalletChainIncompatible = exports.WalletChainRestricted = void 0;
4
4
  exports.WalletChainRestricted = {
5
5
  phantom: [1, 8453, 792703809, 137, 8253038, 101, 10143, 143, 999],
6
- backpack: [1, 8453, 137, 42161, 10, 10143, 80094, 9286185, 792703809],
6
+ backpack: [1, 8453, 137, 42161, 10, 10143, 80094, 792703809],
7
7
  magiceden: [
8
8
  1, 137, 8453, 33139, 8253038, 792703809, 1329, 2741, 42161, 80094, 56, 43114
9
9
  ],
@@ -22,6 +22,7 @@ exports.WalletChainIncompatible = {
22
22
  coinbase: [4663]
23
23
  };
24
24
  exports.NormalizedWalletName = {
25
+ backpackeclipse: 'backpack',
25
26
  phantomevm: 'phantom',
26
27
  phantombtc: 'phantom',
27
28
  magicedensol: 'magiceden',
@@ -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;QACxE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;KACnC;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;IAClD,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC;CAC/D,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,eAAe,EAAE,WAAW;IAC5B,aAAa,EAAE,SAAS;IACxB,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 4663, 59144, 143, 1868, 4326, 4217\n ],\n abstract: [2741],\n ronin: [1, 56, 137, 42161, 8453, 2020],\n porto: [8453, 42161, 56, 42220, 1, 10, 137, 80094],\n robinhood: [1, 10, 137, 4663, 8453, 42161, 8253038, 792703809]\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 robinhoodwallet: 'robinhood',\n uniswapwallet: 'uniswap',\n portoevm: 'porto',\n trusttron: 'trust',\n coinbasewalletevm: 'coinbase',\n baseevm: 'coinbase'\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,SAAS,CAAC;IAC5D,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;QACxE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;KACnC;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;IAClD,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC;CAC/D,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,eAAe,EAAE,UAAU;IAC3B,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,WAAW;IACzB,WAAW,EAAE,OAAO;IACpB,eAAe,EAAE,WAAW;IAC5B,aAAa,EAAE,SAAS;IACxB,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, 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 4663, 59144, 143, 1868, 4326, 4217\n ],\n abstract: [2741],\n ronin: [1, 56, 137, 42161, 8453, 2020],\n porto: [8453, 42161, 56, 42220, 1, 10, 137, 80094],\n robinhood: [1, 10, 137, 4663, 8453, 42161, 8253038, 792703809]\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 backpackeclipse: 'backpack',\n phantomevm: 'phantom',\n phantombtc: 'phantom',\n magicedensol: 'magiceden',\n roninwallet: 'ronin',\n robinhoodwallet: 'robinhood',\n uniswapwallet: 'uniswap',\n portoevm: 'porto',\n trusttron: 'trust',\n coinbasewalletevm: 'coinbase',\n baseevm: 'coinbase'\n}\n"]}
@@ -10,9 +10,22 @@ const hashing_js_1 = require("./hashing.js");
10
10
  const formatUsdFee = (amountUsd, shouldFlipSign = false) => {
11
11
  const value = Number(amountUsd ?? 0);
12
12
  const finalValue = shouldFlipSign ? -value : value;
13
+ let formatted;
14
+ if (finalValue === 0) {
15
+ formatted = '$0.00';
16
+ }
17
+ else if (Math.abs(finalValue) < 0.01) {
18
+ formatted = `${finalValue > 0 ? '+' : '-'}< $0.01`;
19
+ }
20
+ else {
21
+ formatted = (0, numbers_js_1.formatDollar)(finalValue);
22
+ if (finalValue > 0) {
23
+ formatted = `+${formatted}`;
24
+ }
25
+ }
13
26
  return {
14
27
  value: finalValue,
15
- formatted: (0, numbers_js_1.formatDollar)(finalValue)
28
+ formatted
16
29
  };
17
30
  };
18
31
  const parseFees = (selectedTo, selectedFrom, quote) => {
@@ -22,7 +35,6 @@ const parseFees = (selectedTo, selectedFrom, quote) => {
22
35
  const formattedGasFee = (0, numbers_js_1.formatBN)(gasFee, 5, Number(fees?.gas?.currency?.decimals ?? 18));
23
36
  const executionFeeUsd = expandedPriceImpact?.execution?.usd;
24
37
  const relayFeeUsd = expandedPriceImpact?.relay?.usd;
25
- const relayFeeIsReward = Number(relayFeeUsd ?? 0) > 0;
26
38
  const appFeeUsd = expandedPriceImpact?.app?.usd;
27
39
  const hasAppFee = appFeeUsd && Number(appFeeUsd) !== 0;
28
40
  const totalFeesUsd = Number(fees?.relayer?.amountUsd ?? 0) + Number(fees?.app?.amountUsd ?? 0);
@@ -32,7 +44,7 @@ const parseFees = (selectedTo, selectedFrom, quote) => {
32
44
  raw: gasFee,
33
45
  formatted: `${formattedGasFee}`,
34
46
  usd: formatUsdFee(fees?.gas?.amountUsd, true),
35
- name: `Deposit Gas (${selectedFrom.displayName})`,
47
+ name: `Deposit gas (${selectedFrom.displayName})`,
36
48
  tooltip: null,
37
49
  type: 'gas',
38
50
  id: 'origin-gas',
@@ -44,7 +56,7 @@ const parseFees = (selectedTo, selectedFrom, quote) => {
44
56
  usd: _isGasSponsored
45
57
  ? { value: 0, formatted: '0' }
46
58
  : formatUsdFee(executionFeeUsd, false),
47
- name: `Execution Fee (${selectedTo.displayName})`,
59
+ name: `Execution Cost (${selectedTo.displayName})`,
48
60
  tooltip: null,
49
61
  type: 'gas',
50
62
  id: 'destination-gas',
@@ -56,7 +68,7 @@ const parseFees = (selectedTo, selectedFrom, quote) => {
56
68
  usd: _isGasSponsored
57
69
  ? { value: 0, formatted: '0' }
58
70
  : formatUsdFee(relayFeeUsd, false),
59
- name: relayFeeIsReward ? 'Reward' : 'Relay Fee',
71
+ name: 'Platform Fee',
60
72
  tooltip: null,
61
73
  type: 'relayer',
62
74
  id: 'relayer-fee',
@@ -1 +1 @@
1
- {"version":3,"file":"quote.js","sourceRoot":"","sources":["../../../src/utils/quote.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Execute,\n ExecuteStep,\n ExecuteStepItem,\n paths,\n RelayChain\n} from '@relayprotocol/relay-sdk'\nimport { formatBN, formatDollar } from './numbers.js'\nimport type { BridgeFee } from '../types/index.js'\nimport { formatSeconds, get15MinuteInterval } from './time.js'\nimport type { QuoteResponse, useQuote } from '@relayprotocol/relay-kit-hooks'\nimport type { ComponentPropsWithoutRef } from 'react'\nimport type Text from '../components/primitives/Text.js'\nimport { bitcoin } from '../utils/bitcoin.js'\nimport axios from 'axios'\nimport { sha256 } from './hashing.js'\nimport type { FeeBreakdown } from '../types/FeeBreakdown.js'\n\nconst formatUsdFee = (\n amountUsd: string | undefined,\n shouldFlipSign: boolean = false\n) => {\n const value = Number(amountUsd ?? 0)\n const finalValue = shouldFlipSign ? -value : value\n return {\n value: finalValue,\n formatted: formatDollar(finalValue)\n }\n}\n\nexport const parseFees = (\n selectedTo: RelayChain,\n selectedFrom: RelayChain,\n quote?: ReturnType<typeof useQuote>['data']\n): FeeBreakdown => {\n const fees = quote?.fees\n const expandedPriceImpact = quote?.details?.expandedPriceImpact\n\n const gasFee = BigInt(fees?.gas?.amount ?? 0)\n const formattedGasFee = formatBN(\n gasFee,\n 5,\n Number(fees?.gas?.currency?.decimals ?? 18)\n )\n\n // Execution fee\n const executionFeeUsd = expandedPriceImpact?.execution?.usd\n\n // Relay fee\n const relayFeeUsd = expandedPriceImpact?.relay?.usd\n const relayFeeIsReward = Number(relayFeeUsd ?? 0) > 0\n\n // App fee\n const appFeeUsd = expandedPriceImpact?.app?.usd\n const hasAppFee = appFeeUsd && Number(appFeeUsd) !== 0\n\n const totalFeesUsd =\n Number(fees?.relayer?.amountUsd ?? 0) + Number(fees?.app?.amountUsd ?? 0)\n const _isGasSponsored = isGasSponsored(quote)\n\n const breakdown: BridgeFee[] = [\n {\n raw: gasFee,\n formatted: `${formattedGasFee}`,\n usd: formatUsdFee(fees?.gas?.amountUsd, true),\n name: `Deposit Gas (${selectedFrom.displayName})`,\n tooltip: null,\n type: 'gas',\n id: 'origin-gas',\n currency: fees?.gas?.currency\n },\n {\n raw: 0n,\n formatted: '0',\n usd: _isGasSponsored\n ? { value: 0, formatted: '0' }\n : formatUsdFee(executionFeeUsd, false),\n name: `Execution Fee (${selectedTo.displayName})`,\n tooltip: null,\n type: 'gas',\n id: 'destination-gas',\n currency: fees?.relayer?.currency\n },\n {\n raw: 0n,\n formatted: '0',\n usd: _isGasSponsored\n ? { value: 0, formatted: '0' }\n : formatUsdFee(relayFeeUsd, false),\n name: relayFeeIsReward ? 'Reward' : 'Relay Fee',\n tooltip: null,\n type: 'relayer',\n id: 'relayer-fee',\n currency: fees?.relayer?.currency\n }\n ]\n if (hasAppFee) {\n breakdown.push({\n raw: 0n,\n formatted: '0',\n usd: _isGasSponsored\n ? { value: 0, formatted: '0' }\n : formatUsdFee(appFeeUsd, false),\n name: 'App Fee',\n tooltip: null,\n type: 'relayer',\n id: 'app-fee',\n currency: fees?.app?.currency\n })\n }\n\n let priceImpactColor: ComponentPropsWithoutRef<typeof Text>['color'] =\n 'subtleSecondary'\n\n if (quote?.details?.totalImpact?.percent === '-0.00') {\n quote.details.totalImpact.percent = '-0.01'\n }\n\n if (quote?.details?.totalImpact?.percent) {\n let percent = Number(quote.details.totalImpact.percent)\n if (percent <= -3) {\n priceImpactColor = 'red'\n } else if (percent > 0) {\n priceImpactColor = 'success'\n } else if (_isGasSponsored) {\n priceImpactColor = 'success'\n }\n }\n return {\n breakdown,\n totalFees: {\n usd: formatDollar(totalFeesUsd),\n priceImpactPercentage: quote?.details?.totalImpact?.percent\n ? `${quote?.details?.totalImpact?.percent}%`\n : undefined,\n priceImpact:\n quote?.details?.totalImpact?.usd &&\n quote?.details?.totalImpact?.usd != '0'\n ? formatDollar(parseFloat(quote?.details?.totalImpact?.usd ?? 0))\n : undefined,\n priceImpactColor,\n swapImpact: formatUsdFee(expandedPriceImpact?.swap?.usd, false)\n },\n isGasSponsored: _isGasSponsored\n }\n}\n\nexport const calculateRelayerFeeProportionUsd = (quote?: QuoteResponse) => {\n const usdIn = quote?.details?.currencyIn?.amountUsd\n ? Number(quote.details.currencyIn.amountUsd)\n : null\n const relayerServiceFeeUsd = quote?.fees?.relayerService?.amountUsd\n ? Number(quote.fees.relayerService.amountUsd)\n : null\n\n if (!usdIn || !relayerServiceFeeUsd) {\n return 0n\n }\n\n return BigInt(Math.floor((relayerServiceFeeUsd * 100) / usdIn))\n}\n\nexport const calculateRelayerFeeProportion = (\n totalAmount: { rawExcludingOriginGas: bigint },\n feeBreakdown: BridgeFee[]\n) => {\n if (totalAmount.rawExcludingOriginGas > 0n) {\n const relayerFeeRaw =\n feeBreakdown.find((fee) => fee.id === 'relayer-fee')?.raw ?? 0n\n return (relayerFeeRaw * 100n) / totalAmount.rawExcludingOriginGas\n }\n return 0n\n}\n\nexport const isHighRelayerServiceFeeUsd = (quote?: QuoteResponse) => {\n const usdIn = quote?.details?.currencyIn?.amountUsd\n ? Number(quote.details.currencyIn.amountUsd)\n : null\n const relayerServiceFeeUsd = quote?.fees?.relayerService?.amountUsd\n ? Number(quote.fees.relayerService.amountUsd)\n : null\n\n if (!usdIn || !relayerServiceFeeUsd) {\n return false\n }\n\n const feeThresholdPercentage = (usdIn * 1.5) / 100\n const feeThresholdUsd = 25\n return (\n relayerServiceFeeUsd > feeThresholdPercentage &&\n relayerServiceFeeUsd > feeThresholdUsd\n )\n}\n\nexport const extractQuoteId = (\n steps?: Execute['steps'] | QuoteResponse['steps']\n) => {\n return steps && steps[0] ? steps[0].requestId : undefined\n}\n\nexport const extractDepositAddress = (steps?: Execute['steps']) => {\n const depositStep = steps?.find((step) => step.id === 'deposit')\n return depositStep?.depositAddress\n}\n\nexport const calculatePriceTimeEstimate = (\n details?: QuoteResponse['details']\n) => {\n const isBitcoin =\n details?.currencyIn?.currency?.chainId === bitcoin.id ||\n details?.currencyOut?.currency?.chainId === bitcoin.id\n\n //If the relay is interacting with bitcoin we hardcode the time estime to 10m\n const time = isBitcoin ? 1200 : (details?.timeEstimate ?? 0)\n const formattedTime = formatSeconds(time)\n\n return {\n time,\n formattedTime\n }\n}\n\nexport const appendMetadataToRequest = (\n baseUrl?: string,\n requestId?: string,\n additionalMetadata?: paths['/requests/metadata']['post']['requestBody']['content']['application/json']['additionalMetadata'],\n referrer?: string\n) => {\n if (requestId && additionalMetadata) {\n const triggerData: paths['/requests/metadata']['post']['requestBody']['content']['application/json'] & {\n referrer?: string\n } = {\n requestId,\n additionalMetadata,\n referrer\n }\n\n return axios.request({\n url: `${baseUrl}/requests/metadata`,\n method: 'POST',\n data: triggerData\n })\n }\n}\n\nexport const getCurrentStep = (\n steps?: Execute['steps'] | null\n): {\n step: ExecuteStep | null | undefined\n stepItem: ExecuteStepItem | null | undefined\n} => {\n if (!steps) {\n return { step: null, stepItem: null }\n }\n\n const executableSteps = steps.filter(\n (step) => step.items && step.items.length > 0\n )\n\n const step = executableSteps.find((step) =>\n step.items.some((item) => item.status === 'incomplete')\n )\n const stepItem = step?.items.find((item) => item.status === 'incomplete')\n return { step, stepItem }\n}\n\nexport const getSwapEventData = (\n details: Execute['details'],\n fees: Execute['fees'],\n steps: Execute['steps'] | null,\n connector?: string,\n quoteParameters?: Parameters<typeof useQuote>['2']\n) => {\n let operation: string | undefined = details?.operation\n\n if (operation === 'swap') {\n const isSameChain =\n details?.currencyIn?.currency?.chainId ===\n details?.currencyOut?.currency?.chainId\n if (isSameChain) {\n operation = 'same_chain_swap'\n } else if (\n details?.currencyIn?.currency?.symbol ===\n details?.currencyOut?.currency?.symbol\n ) {\n operation = 'bridge'\n } else {\n operation = 'cross_chain_swap'\n }\n }\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...quoteParameters, interval })\n\n return {\n wallet_connector: connector,\n quote_request_id: quoteRequestId,\n quote_id: steps ? extractQuoteId(steps) : undefined,\n amount_in: details?.currencyIn?.amount,\n amount_in_formatted: parseFloat(\n `${details?.currencyIn?.amountFormatted ?? '0'}`\n ),\n currency_in: details?.currencyIn?.currency?.symbol,\n currency_in_address: details?.currencyIn?.currency?.address,\n chain_id_in: details?.currencyIn?.currency?.chainId,\n currency_in_decimals: details?.currencyIn?.currency?.decimals,\n amount_out: details?.currencyOut?.amount,\n amount_out_formatted: parseFloat(\n `${details?.currencyOut?.amountFormatted ?? '0'}`\n ),\n currency_out_decimals: details?.currencyOut?.currency?.decimals,\n currency_out: details?.currencyOut?.currency?.symbol,\n currency_out_address: details?.currencyOut?.currency?.address,\n chain_id_out: details?.currencyOut?.currency?.chainId,\n currency_in_usd: details?.currencyIn?.amountUsd,\n currency_out_usd: details?.currencyOut?.amountUsd,\n deposit_address: steps?.find((step) => step.depositAddress)?.depositAddress,\n txHashes: steps\n ?.map((step) => {\n let txHashes: { chainId: number; txHash: string }[] = []\n step.items?.forEach((item) => {\n if (item.txHashes) {\n txHashes = txHashes.concat([\n ...(item.txHashes ?? []),\n ...(item.internalTxHashes ?? [])\n ])\n }\n })\n return txHashes\n })\n .flat(),\n operation,\n checkStatuses: steps\n ?.map((step) => {\n let checkStatuses: { stepId: string; checkStatus: string }[] = []\n step.items?.forEach((item) => {\n if (item.checkStatus) {\n checkStatuses.push({\n stepId: step.id,\n checkStatus: item.checkStatus\n })\n }\n })\n return checkStatuses\n })\n .flat(),\n subsidized:\n fees?.subsidized !== undefined && fees.subsidized.amount !== '0'\n ? true\n : false\n }\n}\n\nexport const calculateUsdValue = (\n price?: number,\n amountString?: string\n): number | undefined => {\n if (price && price > 0 && amountString && Number(amountString) > 0) {\n try {\n return parseFloat(amountString) * price\n } catch (e) {\n console.error(\n 'Failed to parse amount string for USD calculation',\n amountString,\n e\n )\n }\n }\n return undefined\n}\n\nexport const isGasSponsored = (quote?: QuoteResponse) => {\n return (\n quote?.fees?.subsidized?.amount != undefined &&\n quote?.fees?.subsidized?.amount != '0'\n )\n}\n"]}
1
+ {"version":3,"file":"quote.js","sourceRoot":"","sources":["../../../src/utils/quote.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Execute,\n ExecuteStep,\n ExecuteStepItem,\n paths,\n RelayChain\n} from '@relayprotocol/relay-sdk'\nimport { formatBN, formatDollar } from './numbers.js'\nimport type { BridgeFee } from '../types/index.js'\nimport { formatSeconds, get15MinuteInterval } from './time.js'\nimport type { QuoteResponse, useQuote } from '@relayprotocol/relay-kit-hooks'\nimport type { ComponentPropsWithoutRef } from 'react'\nimport type Text from '../components/primitives/Text.js'\nimport { bitcoin } from '../utils/bitcoin.js'\nimport axios from 'axios'\nimport { sha256 } from './hashing.js'\nimport type { FeeBreakdown } from '../types/FeeBreakdown.js'\n\nconst formatUsdFee = (\n amountUsd: string | undefined,\n shouldFlipSign: boolean = false\n) => {\n const value = Number(amountUsd ?? 0)\n const finalValue = shouldFlipSign ? -value : value\n // Explicit zero and sub-cent forms: formatDollar renders 0 as \"-\" and\n // sub-cent negatives as \"-$0.00\".\n let formatted: string\n if (finalValue === 0) {\n formatted = '$0.00'\n } else if (Math.abs(finalValue) < 0.01) {\n formatted = `${finalValue > 0 ? '+' : '-'}< $0.01`\n } else {\n formatted = formatDollar(finalValue)\n if (finalValue > 0) {\n formatted = `+${formatted}`\n }\n }\n return {\n value: finalValue,\n formatted\n }\n}\n\nexport const parseFees = (\n selectedTo: RelayChain,\n selectedFrom: RelayChain,\n quote?: ReturnType<typeof useQuote>['data']\n): FeeBreakdown => {\n const fees = quote?.fees\n const expandedPriceImpact = quote?.details?.expandedPriceImpact\n\n const gasFee = BigInt(fees?.gas?.amount ?? 0)\n const formattedGasFee = formatBN(\n gasFee,\n 5,\n Number(fees?.gas?.currency?.decimals ?? 18)\n )\n\n // Execution fee\n const executionFeeUsd = expandedPriceImpact?.execution?.usd\n\n // Platform fee (v2 name: relay fee)\n const relayFeeUsd = expandedPriceImpact?.relay?.usd\n\n // App fee\n const appFeeUsd = expandedPriceImpact?.app?.usd\n const hasAppFee = appFeeUsd && Number(appFeeUsd) !== 0\n\n const totalFeesUsd =\n Number(fees?.relayer?.amountUsd ?? 0) + Number(fees?.app?.amountUsd ?? 0)\n const _isGasSponsored = isGasSponsored(quote)\n\n const breakdown: BridgeFee[] = [\n {\n raw: gasFee,\n formatted: `${formattedGasFee}`,\n usd: formatUsdFee(fees?.gas?.amountUsd, true),\n name: `Deposit gas (${selectedFrom.displayName})`,\n tooltip: null,\n type: 'gas',\n id: 'origin-gas',\n currency: fees?.gas?.currency\n },\n {\n raw: 0n,\n formatted: '0',\n usd: _isGasSponsored\n ? { value: 0, formatted: '0' }\n : formatUsdFee(executionFeeUsd, false),\n name: `Execution Cost (${selectedTo.displayName})`,\n tooltip: null,\n type: 'gas',\n id: 'destination-gas',\n currency: fees?.relayer?.currency\n },\n {\n raw: 0n,\n formatted: '0',\n usd: _isGasSponsored\n ? { value: 0, formatted: '0' }\n : formatUsdFee(relayFeeUsd, false),\n name: 'Platform Fee',\n tooltip: null,\n type: 'relayer',\n id: 'relayer-fee',\n currency: fees?.relayer?.currency\n }\n ]\n if (hasAppFee) {\n breakdown.push({\n raw: 0n,\n formatted: '0',\n usd: _isGasSponsored\n ? { value: 0, formatted: '0' }\n : formatUsdFee(appFeeUsd, false),\n name: 'App Fee',\n tooltip: null,\n type: 'relayer',\n id: 'app-fee',\n currency: fees?.app?.currency\n })\n }\n\n let priceImpactColor: ComponentPropsWithoutRef<typeof Text>['color'] =\n 'subtleSecondary'\n\n if (quote?.details?.totalImpact?.percent === '-0.00') {\n quote.details.totalImpact.percent = '-0.01'\n }\n\n if (quote?.details?.totalImpact?.percent) {\n let percent = Number(quote.details.totalImpact.percent)\n if (percent <= -3) {\n priceImpactColor = 'red'\n } else if (percent > 0) {\n priceImpactColor = 'success'\n } else if (_isGasSponsored) {\n priceImpactColor = 'success'\n }\n }\n return {\n breakdown,\n totalFees: {\n usd: formatDollar(totalFeesUsd),\n priceImpactPercentage: quote?.details?.totalImpact?.percent\n ? `${quote?.details?.totalImpact?.percent}%`\n : undefined,\n priceImpact:\n quote?.details?.totalImpact?.usd &&\n quote?.details?.totalImpact?.usd != '0'\n ? formatDollar(parseFloat(quote?.details?.totalImpact?.usd ?? 0))\n : undefined,\n priceImpactColor,\n swapImpact: formatUsdFee(expandedPriceImpact?.swap?.usd, false)\n },\n isGasSponsored: _isGasSponsored\n }\n}\n\nexport const calculateRelayerFeeProportionUsd = (quote?: QuoteResponse) => {\n const usdIn = quote?.details?.currencyIn?.amountUsd\n ? Number(quote.details.currencyIn.amountUsd)\n : null\n const relayerServiceFeeUsd = quote?.fees?.relayerService?.amountUsd\n ? Number(quote.fees.relayerService.amountUsd)\n : null\n\n if (!usdIn || !relayerServiceFeeUsd) {\n return 0n\n }\n\n return BigInt(Math.floor((relayerServiceFeeUsd * 100) / usdIn))\n}\n\nexport const calculateRelayerFeeProportion = (\n totalAmount: { rawExcludingOriginGas: bigint },\n feeBreakdown: BridgeFee[]\n) => {\n if (totalAmount.rawExcludingOriginGas > 0n) {\n const relayerFeeRaw =\n feeBreakdown.find((fee) => fee.id === 'relayer-fee')?.raw ?? 0n\n return (relayerFeeRaw * 100n) / totalAmount.rawExcludingOriginGas\n }\n return 0n\n}\n\nexport const isHighRelayerServiceFeeUsd = (quote?: QuoteResponse) => {\n const usdIn = quote?.details?.currencyIn?.amountUsd\n ? Number(quote.details.currencyIn.amountUsd)\n : null\n const relayerServiceFeeUsd = quote?.fees?.relayerService?.amountUsd\n ? Number(quote.fees.relayerService.amountUsd)\n : null\n\n if (!usdIn || !relayerServiceFeeUsd) {\n return false\n }\n\n const feeThresholdPercentage = (usdIn * 1.5) / 100\n const feeThresholdUsd = 25\n return (\n relayerServiceFeeUsd > feeThresholdPercentage &&\n relayerServiceFeeUsd > feeThresholdUsd\n )\n}\n\nexport const extractQuoteId = (\n steps?: Execute['steps'] | QuoteResponse['steps']\n) => {\n return steps && steps[0] ? steps[0].requestId : undefined\n}\n\nexport const extractDepositAddress = (steps?: Execute['steps']) => {\n const depositStep = steps?.find((step) => step.id === 'deposit')\n return depositStep?.depositAddress\n}\n\nexport const calculatePriceTimeEstimate = (\n details?: QuoteResponse['details']\n) => {\n const isBitcoin =\n details?.currencyIn?.currency?.chainId === bitcoin.id ||\n details?.currencyOut?.currency?.chainId === bitcoin.id\n\n //If the relay is interacting with bitcoin we hardcode the time estime to 10m\n const time = isBitcoin ? 1200 : (details?.timeEstimate ?? 0)\n const formattedTime = formatSeconds(time)\n\n return {\n time,\n formattedTime\n }\n}\n\nexport const appendMetadataToRequest = (\n baseUrl?: string,\n requestId?: string,\n additionalMetadata?: paths['/requests/metadata']['post']['requestBody']['content']['application/json']['additionalMetadata'],\n referrer?: string\n) => {\n if (requestId && additionalMetadata) {\n const triggerData: paths['/requests/metadata']['post']['requestBody']['content']['application/json'] & {\n referrer?: string\n } = {\n requestId,\n additionalMetadata,\n referrer\n }\n\n return axios.request({\n url: `${baseUrl}/requests/metadata`,\n method: 'POST',\n data: triggerData\n })\n }\n}\n\nexport const getCurrentStep = (\n steps?: Execute['steps'] | null\n): {\n step: ExecuteStep | null | undefined\n stepItem: ExecuteStepItem | null | undefined\n} => {\n if (!steps) {\n return { step: null, stepItem: null }\n }\n\n const executableSteps = steps.filter(\n (step) => step.items && step.items.length > 0\n )\n\n const step = executableSteps.find((step) =>\n step.items.some((item) => item.status === 'incomplete')\n )\n const stepItem = step?.items.find((item) => item.status === 'incomplete')\n return { step, stepItem }\n}\n\nexport const getSwapEventData = (\n details: Execute['details'],\n fees: Execute['fees'],\n steps: Execute['steps'] | null,\n connector?: string,\n quoteParameters?: Parameters<typeof useQuote>['2']\n) => {\n let operation: string | undefined = details?.operation\n\n if (operation === 'swap') {\n const isSameChain =\n details?.currencyIn?.currency?.chainId ===\n details?.currencyOut?.currency?.chainId\n if (isSameChain) {\n operation = 'same_chain_swap'\n } else if (\n details?.currencyIn?.currency?.symbol ===\n details?.currencyOut?.currency?.symbol\n ) {\n operation = 'bridge'\n } else {\n operation = 'cross_chain_swap'\n }\n }\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...quoteParameters, interval })\n\n return {\n wallet_connector: connector,\n quote_request_id: quoteRequestId,\n quote_id: steps ? extractQuoteId(steps) : undefined,\n amount_in: details?.currencyIn?.amount,\n amount_in_formatted: parseFloat(\n `${details?.currencyIn?.amountFormatted ?? '0'}`\n ),\n currency_in: details?.currencyIn?.currency?.symbol,\n currency_in_address: details?.currencyIn?.currency?.address,\n chain_id_in: details?.currencyIn?.currency?.chainId,\n currency_in_decimals: details?.currencyIn?.currency?.decimals,\n amount_out: details?.currencyOut?.amount,\n amount_out_formatted: parseFloat(\n `${details?.currencyOut?.amountFormatted ?? '0'}`\n ),\n currency_out_decimals: details?.currencyOut?.currency?.decimals,\n currency_out: details?.currencyOut?.currency?.symbol,\n currency_out_address: details?.currencyOut?.currency?.address,\n chain_id_out: details?.currencyOut?.currency?.chainId,\n currency_in_usd: details?.currencyIn?.amountUsd,\n currency_out_usd: details?.currencyOut?.amountUsd,\n deposit_address: steps?.find((step) => step.depositAddress)?.depositAddress,\n txHashes: steps\n ?.map((step) => {\n let txHashes: { chainId: number; txHash: string }[] = []\n step.items?.forEach((item) => {\n if (item.txHashes) {\n txHashes = txHashes.concat([\n ...(item.txHashes ?? []),\n ...(item.internalTxHashes ?? [])\n ])\n }\n })\n return txHashes\n })\n .flat(),\n operation,\n checkStatuses: steps\n ?.map((step) => {\n let checkStatuses: { stepId: string; checkStatus: string }[] = []\n step.items?.forEach((item) => {\n if (item.checkStatus) {\n checkStatuses.push({\n stepId: step.id,\n checkStatus: item.checkStatus\n })\n }\n })\n return checkStatuses\n })\n .flat(),\n subsidized:\n fees?.subsidized !== undefined && fees.subsidized.amount !== '0'\n ? true\n : false\n }\n}\n\nexport const calculateUsdValue = (\n price?: number,\n amountString?: string\n): number | undefined => {\n if (price && price > 0 && amountString && Number(amountString) > 0) {\n try {\n return parseFloat(amountString) * price\n } catch (e) {\n console.error(\n 'Failed to parse amount string for USD calculation',\n amountString,\n e\n )\n }\n }\n return undefined\n}\n\nexport const isGasSponsored = (quote?: QuoteResponse) => {\n return (\n quote?.fees?.subsidized?.amount != undefined &&\n quote?.fees?.subsidized?.amount != '0'\n )\n}\n"]}
@@ -7,11 +7,12 @@ const getRequestCurrencies = (transaction) => {
7
7
  const actual = route?.actual;
8
8
  const quoted = route?.quoted;
9
9
  const currencyIn = actual?.origin?.inputCurrency ?? quoted?.origin?.inputCurrency;
10
- const currencyOut = actual?.destination?.outputCurrency ??
10
+ const settledActual = transaction?.status === 'success' ? actual : undefined;
11
+ const currencyOut = settledActual?.destination?.outputCurrency ??
11
12
  quoted?.destination?.outputCurrency ??
12
- actual?.origin?.outputCurrency ??
13
+ settledActual?.origin?.outputCurrency ??
13
14
  quoted?.origin?.outputCurrency;
14
- const currencyGasTopup = actual?.destination?.currencyGasTopup;
15
+ const currencyGasTopup = settledActual?.destination?.currencyGasTopup;
15
16
  return { currencyIn, currencyOut, currencyGasTopup };
16
17
  };
17
18
  exports.getRequestCurrencies = getRequestCurrencies;
@@ -1 +1 @@
1
- {"version":3,"file":"relayTransaction.js","sourceRoot":"","sources":["../../../src/utils/relayTransaction.ts"],"names":[],"mappings":";;;AAEA,uCAAyC;AAelC,MAAM,oBAAoB,GAAG,CAClC,WAAqC,EAKrC,EAAE;IACF,MAAM,KAAK,GAAG,WAAW,EAAE,IAAI,EAAE,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,CAAA;IAC5B,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,CAAA;IAE5B,MAAM,UAAU,GACd,MAAM,EAAE,MAAM,EAAE,aAAa,IAAI,MAAM,EAAE,MAAM,EAAE,aAAa,CAAA;IAEhE,MAAM,WAAW,GACf,MAAM,EAAE,WAAW,EAAE,cAAc;QACnC,MAAM,EAAE,WAAW,EAAE,cAAc;QACnC,MAAM,EAAE,MAAM,EAAE,cAAc;QAC9B,MAAM,EAAE,MAAM,EAAE,cAAc,CAAA;IAEhC,MAAM,gBAAgB,GAAG,MAAM,EAAE,WAAW,EAAE,gBAAgB,CAAA;IAE9D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAA;AACtD,CAAC,CAAA;AAvBY,QAAA,oBAAoB,wBAuBhC;AAEM,MAAM,gBAAgB,GAAG,CAC9B,WAAqC,EACrC,MAA2B,EAC3B,EAAE;IACF,MAAM,OAAO,GAAG,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAA;IACtD,OAAO,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;AAC7D,CAAC,CAAA;AANY,QAAA,gBAAgB,oBAM5B;AAEM,MAAM,cAAc,GAAG,CAC5B,WAAqC,EACrC,MAA2B,EAC3B,EAAE;IACF,MAAM,OAAO,GAAG,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAA;IACvD,OAAO,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;AAC7D,CAAC,CAAA;AANY,QAAA,cAAc,kBAM1B;AAEM,MAAM,iBAAiB,GAAG,CAAC,WAAqC,EAAE,EAAE;IACzE,IAAI,QAAQ,GAAG,GAAG,CAAA;IAClB,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,WAAW,EAAE,MAAM,KAAK,SAAS,IAAI,WAAW,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QAC3E,MAAM,cAAc,GAClB,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAmB,CAAC,IAAI,IAAI,CAAA;QACvE,MAAM,gBAAgB,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC5E,MAAM,eAAe,GACnB,WAAW,EAAE,IAAI,EAAE,MAAM;YACvB,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAC9B,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAmB,CAAC,IAAI,IAAI,CAAA;QAEjD,MAAM,cAAc,GAClB,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;YAC3C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC;YAC9B,CAAC,CAAC,IAAI,CAAA;QAEV,IAAI,gBAAgB,IAAI,cAAc,EAAE,CAAC;YACvC,OAAO,GAAG,cAAc,GAAG,gBAAgB,CAAA;YAE3C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,QAAQ,GAAG,GAAG,CAAA;gBACd,OAAO,GAAG,CAAC,CAAA;YACb,CAAC;iBAAM,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;gBACxB,QAAQ,GAAG,IAAA,uBAAa,EAAC,OAAO,CAAC,CAAA;YACnC,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,GAAG,OAAO,GAAG,CAAA;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;AAC9B,CAAC,CAAA;AA/BY,QAAA,iBAAiB,qBA+B7B;AAEM,MAAM,uBAAuB,GAAG,CAAC,KAA+B,EAAE,EAAE;IACzE,IAAI,CAAC,KAAK,EAAE,MAAM;QAAE,OAAO,IAAI,CAAA;IAG/B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,IAAI,IAAI,CAAA;AAChE,CAAC,CAAA;AALY,QAAA,uBAAuB,2BAKnC;AAEY,QAAA,YAAY,GAAG;IAC1B,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;CACrB,CAAA","sourcesContent":["import { type Execute, RelayClient } from '@relayprotocol/relay-sdk'\nimport { type RelayTransaction } from '../types/index.js'\nimport { formatSeconds } from './time.js'\n\ntype RequestRoute = NonNullable<NonNullable<RelayTransaction['data']>['route']>\ntype RouteAmount = NonNullable<\n NonNullable<NonNullable<RequestRoute['quoted']>['origin']>['inputCurrency']\n>\n\n/**\n * Resolves the input/output currency amounts to display for a request from\n * `data.route`, preferring actual over quoted values.\n *\n * - currencyIn: the token deposited on the origin side.\n * - currencyOut: the token received, preferring the destination output and\n * falling back to the origin output (e.g. same-chain swaps).\n */\nexport const getRequestCurrencies = (\n transaction?: RelayTransaction | null\n): {\n currencyIn?: RouteAmount | null\n currencyOut?: RouteAmount | null\n currencyGasTopup?: RouteAmount | null\n} => {\n const route = transaction?.data?.route\n const actual = route?.actual\n const quoted = route?.quoted\n\n const currencyIn =\n actual?.origin?.inputCurrency ?? quoted?.origin?.inputCurrency\n\n const currencyOut =\n actual?.destination?.outputCurrency ??\n quoted?.destination?.outputCurrency ??\n actual?.origin?.outputCurrency ??\n quoted?.origin?.outputCurrency\n\n const currencyGasTopup = actual?.destination?.currencyGasTopup\n\n return { currencyIn, currencyOut, currencyGasTopup }\n}\n\nexport const extractFromChain = (\n transaction?: RelayTransaction | null,\n client?: RelayClient | null\n) => {\n const chainId = transaction?.data?.inTxs?.[0]?.chainId\n return client?.chains.find((chain) => chain.id === chainId)\n}\n\nexport const extractToChain = (\n transaction?: RelayTransaction | null,\n client?: RelayClient | null\n) => {\n const chainId = transaction?.data?.outTxs?.[0]?.chainId\n return client?.chains.find((chain) => chain.id === chainId)\n}\n\nexport const calculateFillTime = (transaction?: RelayTransaction | null) => {\n let fillTime = '-'\n let seconds = 0\n if (transaction?.status !== 'pending' && transaction?.status !== 'waiting') {\n const inTxTimestamps =\n transaction?.data?.inTxs?.map((tx) => tx.timestamp as number) ?? null\n const txStartTimestamp = inTxTimestamps ? Math.min(...inTxTimestamps) : null\n const outTxTimestamps =\n transaction?.data?.outTxs\n ?.filter((tx) => tx.timestamp)\n ?.map((tx) => tx.timestamp as number) ?? null\n\n const txEndTimestamp =\n outTxTimestamps && outTxTimestamps.length > 0\n ? Math.max(...outTxTimestamps)\n : null\n\n if (txStartTimestamp && txEndTimestamp) {\n seconds = txEndTimestamp - txStartTimestamp\n // Guard against negative time (invalid timestamps or timing issues)\n if (seconds < 0) {\n fillTime = '-'\n seconds = 0\n } else if (seconds > 60) {\n fillTime = formatSeconds(seconds)\n } else {\n fillTime = `${seconds}s`\n }\n }\n }\n return { fillTime, seconds }\n}\n\nexport const extractDepositRequestId = (steps?: Execute['steps'] | null) => {\n if (!steps?.length) return null\n\n // Find the first step that has a requestId\n return steps.find((step) => step.requestId)?.requestId || null\n}\n\nexport const statusToText = {\n pending: 'Pending',\n failure: 'Failure',\n received: 'Received',\n success: 'Success',\n fallback: 'Refunded'\n}\n"]}
1
+ {"version":3,"file":"relayTransaction.js","sourceRoot":"","sources":["../../../src/utils/relayTransaction.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Execute, RelayClient } from '@relayprotocol/relay-sdk'\nimport { type RelayTransaction } from '../types/index.js'\nimport { formatSeconds } from './time.js'\n\ntype RequestRoute = NonNullable<NonNullable<RelayTransaction['data']>['route']>\ntype RouteAmount = NonNullable<\n NonNullable<NonNullable<RequestRoute['quoted']>['origin']>['inputCurrency']\n>\n\n/**\n * Resolves the input/output currency amounts to display for a request from\n * `data.route`, preferring actual over quoted values.\n *\n * - currencyIn: the token deposited on the origin side.\n * - currencyOut: the token received, preferring the destination output and\n * falling back to the origin output (e.g. same-chain swaps).\n *\n * `route.actual` is populated progressively while a request is in flight, so\n * before the request status is `success` it can hold provisional values (e.g.\n * the intermediate origin swap output). Output-side actual values are only\n * used once the request status is `success`; until then the quoted values are\n * returned so the UI never presents a provisional token/amount as received.\n */\nexport const getRequestCurrencies = (\n transaction?: RelayTransaction | null\n): {\n currencyIn?: RouteAmount | null\n currencyOut?: RouteAmount | null\n currencyGasTopup?: RouteAmount | null\n} => {\n const route = transaction?.data?.route\n const actual = route?.actual\n const quoted = route?.quoted\n\n const currencyIn =\n actual?.origin?.inputCurrency ?? quoted?.origin?.inputCurrency\n\n // Only trust output-side actual values once the request has succeeded\n const settledActual = transaction?.status === 'success' ? actual : undefined\n\n const currencyOut =\n settledActual?.destination?.outputCurrency ??\n quoted?.destination?.outputCurrency ??\n settledActual?.origin?.outputCurrency ??\n quoted?.origin?.outputCurrency\n\n const currencyGasTopup = settledActual?.destination?.currencyGasTopup\n\n return { currencyIn, currencyOut, currencyGasTopup }\n}\n\nexport const extractFromChain = (\n transaction?: RelayTransaction | null,\n client?: RelayClient | null\n) => {\n const chainId = transaction?.data?.inTxs?.[0]?.chainId\n return client?.chains.find((chain) => chain.id === chainId)\n}\n\nexport const extractToChain = (\n transaction?: RelayTransaction | null,\n client?: RelayClient | null\n) => {\n const chainId = transaction?.data?.outTxs?.[0]?.chainId\n return client?.chains.find((chain) => chain.id === chainId)\n}\n\nexport const calculateFillTime = (transaction?: RelayTransaction | null) => {\n let fillTime = '-'\n let seconds = 0\n if (transaction?.status !== 'pending' && transaction?.status !== 'waiting') {\n const inTxTimestamps =\n transaction?.data?.inTxs?.map((tx) => tx.timestamp as number) ?? null\n const txStartTimestamp = inTxTimestamps ? Math.min(...inTxTimestamps) : null\n const outTxTimestamps =\n transaction?.data?.outTxs\n ?.filter((tx) => tx.timestamp)\n ?.map((tx) => tx.timestamp as number) ?? null\n\n const txEndTimestamp =\n outTxTimestamps && outTxTimestamps.length > 0\n ? Math.max(...outTxTimestamps)\n : null\n\n if (txStartTimestamp && txEndTimestamp) {\n seconds = txEndTimestamp - txStartTimestamp\n // Guard against negative time (invalid timestamps or timing issues)\n if (seconds < 0) {\n fillTime = '-'\n seconds = 0\n } else if (seconds > 60) {\n fillTime = formatSeconds(seconds)\n } else {\n fillTime = `${seconds}s`\n }\n }\n }\n return { fillTime, seconds }\n}\n\nexport const extractDepositRequestId = (steps?: Execute['steps'] | null) => {\n if (!steps?.length) return null\n\n // Find the first step that has a requestId\n return steps.find((step) => step.requestId)?.requestId || null\n}\n\nexport const statusToText = {\n pending: 'Pending',\n failure: 'Failure',\n received: 'Received',\n success: 'Success',\n fallback: 'Refunded'\n}\n"]}
@@ -8,7 +8,7 @@ exports.solana = {
8
8
  exports.eclipse = {
9
9
  id: 9286185
10
10
  };
11
- exports.eclipseWallets = ['backpackeclipse'];
11
+ exports.eclipseWallets = ['nightlyeclipse', 'okxeclipse'];
12
12
  function isSolanaAddress(address) {
13
13
  return exports.solanaAddressRegex.test(address);
14
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"solana.js","sourceRoot":"","sources":["../../../src/utils/solana.ts"],"names":[],"mappings":";;;AAAa,QAAA,kBAAkB,GAC7B,gHAAgH,CAAA;AACrG,QAAA,MAAM,GAAG;IACpB,EAAE,EAAE,SAAS;CACd,CAAA;AACY,QAAA,OAAO,GAAG;IACrB,EAAE,EAAE,OAAO;CACZ,CAAA;AACY,QAAA,cAAc,GAAG,CAAC,iBAAiB,CAAC,CAAA;AAEjD,SAAgB,eAAe,CAAC,OAAe;IAC7C,OAAO,0BAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACzC,CAAC;AAFD,0CAEC","sourcesContent":["export const solanaAddressRegex =\n /^(?!T[1-9A-HJ-NP-Za-km-z]{33}$)(?!0x[0-9a-fA-F]{40}$)(?!0x[0-9a-fA-F]{64}$)(?!bc1)[1-9A-HJ-NP-Za-km-z]{32,44}$/\nexport const solana = {\n id: 792703809\n}\nexport const eclipse = {\n id: 9286185\n}\nexport const eclipseWallets = ['backpackeclipse']\n\nexport function isSolanaAddress(address: string): boolean {\n return solanaAddressRegex.test(address)\n}\n"]}
1
+ {"version":3,"file":"solana.js","sourceRoot":"","sources":["../../../src/utils/solana.ts"],"names":[],"mappings":";;;AAAa,QAAA,kBAAkB,GAC7B,gHAAgH,CAAA;AACrG,QAAA,MAAM,GAAG;IACpB,EAAE,EAAE,SAAS;CACd,CAAA;AACY,QAAA,OAAO,GAAG;IACrB,EAAE,EAAE,OAAO;CACZ,CAAA;AACY,QAAA,cAAc,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAA;AAE9D,SAAgB,eAAe,CAAC,OAAe;IAC7C,OAAO,0BAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACzC,CAAC;AAFD,0CAEC","sourcesContent":["export const solanaAddressRegex =\n /^(?!T[1-9A-HJ-NP-Za-km-z]{33}$)(?!0x[0-9a-fA-F]{40}$)(?!0x[0-9a-fA-F]{64}$)(?!bc1)[1-9A-HJ-NP-Za-km-z]{32,44}$/\nexport const solana = {\n id: 792703809\n}\nexport const eclipse = {\n id: 9286185\n}\nexport const eclipseWallets = ['nightlyeclipse', 'okxeclipse']\n\nexport function isSolanaAddress(address: string): boolean {\n return solanaAddressRegex.test(address)\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UI_VERSION = void 0;
4
- exports.UI_VERSION = '11.0.3';
4
+ exports.UI_VERSION = '11.0.5';
5
5
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAG,QAAQ,CAAC","sourcesContent":["export const UI_VERSION = '11.0.3';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAG,QAAQ,CAAC","sourcesContent":["export const UI_VERSION = '11.0.5';\n"]}