@relayprotocol/relay-kit-ui 9.1.4 → 10.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/_cjs/src/components/common/CustomAddressModal.js +18 -8
  2. package/_cjs/src/components/common/CustomAddressModal.js.map +1 -1
  3. package/_cjs/src/components/common/RefundReason.js +106 -3
  4. package/_cjs/src/components/common/RefundReason.js.map +1 -1
  5. package/_cjs/src/components/common/TransactionModal/DepositAddressModalRenderer.js +7 -10
  6. package/_cjs/src/components/common/TransactionModal/DepositAddressModalRenderer.js.map +1 -1
  7. package/_cjs/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.js.map +1 -1
  8. package/_cjs/src/components/common/TransactionModal/steps/ErrorStep.js +2 -2
  9. package/_cjs/src/components/common/TransactionModal/steps/ErrorStep.js.map +1 -1
  10. package/_cjs/src/components/common/TransactionModal/steps/SwapSuccessStep.js +15 -16
  11. package/_cjs/src/components/common/TransactionModal/steps/SwapSuccessStep.js.map +1 -1
  12. package/_cjs/src/components/primitives/ChainIcon.js +2 -1
  13. package/_cjs/src/components/primitives/ChainIcon.js.map +1 -1
  14. package/_cjs/src/components/primitives/ChainTokenIcon.js +6 -2
  15. package/_cjs/src/components/primitives/ChainTokenIcon.js.map +1 -1
  16. package/_cjs/src/components/widgets/OnrampWidget/modals/OnrampModal.js +10 -13
  17. package/_cjs/src/components/widgets/OnrampWidget/modals/OnrampModal.js.map +1 -1
  18. package/_cjs/src/components/widgets/OnrampWidget/widget/index.js +1 -1
  19. package/_cjs/src/components/widgets/OnrampWidget/widget/index.js.map +1 -1
  20. package/_cjs/src/components/widgets/SwapWidget/index.js +4 -4
  21. package/_cjs/src/components/widgets/SwapWidget/index.js.map +1 -1
  22. package/_cjs/src/components/widgets/SwapWidgetRenderer.js +22 -9
  23. package/_cjs/src/components/widgets/SwapWidgetRenderer.js.map +1 -1
  24. package/_cjs/src/components/widgets/WidgetContainer.js +1 -1
  25. package/_cjs/src/components/widgets/WidgetContainer.js.map +1 -1
  26. package/_cjs/src/constants/events.js +2 -1
  27. package/_cjs/src/constants/events.js.map +1 -1
  28. package/_cjs/src/constants/maxGasBuffer.js +1 -2
  29. package/_cjs/src/constants/maxGasBuffer.js.map +1 -1
  30. package/_cjs/src/hooks/index.js +3 -1
  31. package/_cjs/src/hooks/index.js.map +1 -1
  32. package/_cjs/src/hooks/useKnownTokenContract.js +45 -0
  33. package/_cjs/src/hooks/useKnownTokenContract.js.map +1 -0
  34. package/_cjs/src/providers/RelayKitProvider.js +22 -1
  35. package/_cjs/src/providers/RelayKitProvider.js.map +1 -1
  36. package/_cjs/src/types/RelayTransaction.js.map +1 -1
  37. package/_cjs/src/utils/nativeMaxAmount.js +4 -4
  38. package/_cjs/src/utils/nativeMaxAmount.js.map +1 -1
  39. package/_cjs/src/utils/relayTransaction.js +14 -1
  40. package/_cjs/src/utils/relayTransaction.js.map +1 -1
  41. package/_cjs/src/version.js +1 -1
  42. package/_cjs/src/version.js.map +1 -1
  43. package/_cjs/tsconfig.build.tsbuildinfo +1 -1
  44. package/_esm/src/components/common/CustomAddressModal.js +24 -10
  45. package/_esm/src/components/common/CustomAddressModal.js.map +1 -1
  46. package/_esm/src/components/common/RefundReason.js +107 -4
  47. package/_esm/src/components/common/RefundReason.js.map +1 -1
  48. package/_esm/src/components/common/TransactionModal/DepositAddressModalRenderer.js +10 -10
  49. package/_esm/src/components/common/TransactionModal/DepositAddressModalRenderer.js.map +1 -1
  50. package/_esm/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.js +1 -1
  51. package/_esm/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.js.map +1 -1
  52. package/_esm/src/components/common/TransactionModal/steps/ErrorStep.js +2 -2
  53. package/_esm/src/components/common/TransactionModal/steps/ErrorStep.js.map +1 -1
  54. package/_esm/src/components/common/TransactionModal/steps/SwapSuccessStep.js +15 -16
  55. package/_esm/src/components/common/TransactionModal/steps/SwapSuccessStep.js.map +1 -1
  56. package/_esm/src/components/primitives/ChainIcon.js +3 -2
  57. package/_esm/src/components/primitives/ChainIcon.js.map +1 -1
  58. package/_esm/src/components/primitives/ChainTokenIcon.js +6 -3
  59. package/_esm/src/components/primitives/ChainTokenIcon.js.map +1 -1
  60. package/_esm/src/components/widgets/OnrampWidget/modals/OnrampModal.js +14 -14
  61. package/_esm/src/components/widgets/OnrampWidget/modals/OnrampModal.js.map +1 -1
  62. package/_esm/src/components/widgets/OnrampWidget/widget/index.js +1 -1
  63. package/_esm/src/components/widgets/OnrampWidget/widget/index.js.map +1 -1
  64. package/_esm/src/components/widgets/SwapWidget/index.js +4 -4
  65. package/_esm/src/components/widgets/SwapWidget/index.js.map +1 -1
  66. package/_esm/src/components/widgets/SwapWidgetRenderer.js +27 -11
  67. package/_esm/src/components/widgets/SwapWidgetRenderer.js.map +1 -1
  68. package/_esm/src/components/widgets/WidgetContainer.js +1 -1
  69. package/_esm/src/components/widgets/WidgetContainer.js.map +1 -1
  70. package/_esm/src/constants/events.js +2 -1
  71. package/_esm/src/constants/events.js.map +1 -1
  72. package/_esm/src/constants/maxGasBuffer.js +0 -1
  73. package/_esm/src/constants/maxGasBuffer.js.map +1 -1
  74. package/_esm/src/hooks/index.js +2 -1
  75. package/_esm/src/hooks/index.js.map +1 -1
  76. package/_esm/src/hooks/useKnownTokenContract.js +52 -0
  77. package/_esm/src/hooks/useKnownTokenContract.js.map +1 -0
  78. package/_esm/src/providers/RelayKitProvider.js +31 -2
  79. package/_esm/src/providers/RelayKitProvider.js.map +1 -1
  80. package/_esm/src/types/RelayTransaction.js.map +1 -1
  81. package/_esm/src/utils/nativeMaxAmount.js +4 -4
  82. package/_esm/src/utils/nativeMaxAmount.js.map +1 -1
  83. package/_esm/src/utils/relayTransaction.js +20 -0
  84. package/_esm/src/utils/relayTransaction.js.map +1 -1
  85. package/_esm/src/version.js +1 -1
  86. package/_esm/src/version.js.map +1 -1
  87. package/_esm/tsconfig.build.tsbuildinfo +1 -1
  88. package/_types/src/components/common/CustomAddressModal.d.ts.map +1 -1
  89. package/_types/src/components/common/RefundReason.d.ts +1 -1
  90. package/_types/src/components/common/RefundReason.d.ts.map +1 -1
  91. package/_types/src/components/common/TransactionModal/DepositAddressModalRenderer.d.ts.map +1 -1
  92. package/_types/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.d.ts +2 -2
  93. package/_types/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.d.ts.map +1 -1
  94. package/_types/src/components/common/TransactionModal/steps/SwapSuccessStep.d.ts.map +1 -1
  95. package/_types/src/components/primitives/ChainIcon.d.ts.map +1 -1
  96. package/_types/src/components/primitives/ChainTokenIcon.d.ts.map +1 -1
  97. package/_types/src/components/widgets/OnrampWidget/modals/OnrampModal.d.ts.map +1 -1
  98. package/_types/src/components/widgets/OnrampWidget/widget/index.d.ts.map +1 -1
  99. package/_types/src/components/widgets/SwapWidget/index.d.ts +0 -2
  100. package/_types/src/components/widgets/SwapWidget/index.d.ts.map +1 -1
  101. package/_types/src/components/widgets/SwapWidgetRenderer.d.ts +0 -2
  102. package/_types/src/components/widgets/SwapWidgetRenderer.d.ts.map +1 -1
  103. package/_types/src/components/widgets/WidgetContainer.d.ts.map +1 -1
  104. package/_types/src/constants/events.d.ts +1 -0
  105. package/_types/src/constants/events.d.ts.map +1 -1
  106. package/_types/src/constants/maxGasBuffer.d.ts +0 -1
  107. package/_types/src/constants/maxGasBuffer.d.ts.map +1 -1
  108. package/_types/src/hooks/index.d.ts +2 -1
  109. package/_types/src/hooks/index.d.ts.map +1 -1
  110. package/_types/src/hooks/useKnownTokenContract.d.ts +35 -0
  111. package/_types/src/hooks/useKnownTokenContract.d.ts.map +1 -0
  112. package/_types/src/providers/RelayKitProvider.d.ts +13 -5
  113. package/_types/src/providers/RelayKitProvider.d.ts.map +1 -1
  114. package/_types/src/types/RelayTransaction.d.ts +1 -1
  115. package/_types/src/utils/nativeMaxAmount.d.ts +2 -2
  116. package/_types/src/utils/nativeMaxAmount.d.ts.map +1 -1
  117. package/_types/src/utils/relayTransaction.d.ts +16 -0
  118. package/_types/src/utils/relayTransaction.d.ts.map +1 -1
  119. package/_types/src/utils/tokens.d.ts +1 -1
  120. package/_types/src/version.d.ts +1 -1
  121. package/_types/src/version.d.ts.map +1 -1
  122. package/_types/tsconfig.build.tsbuildinfo +1 -1
  123. package/package.json +3 -3
  124. package/readme.md +14 -0
@@ -4,7 +4,7 @@ import { Text, Flex, Button, Input, Pill } from '../primitives/index.js';
4
4
  import { Modal } from '../common/Modal.js';
5
5
  import { isAddress } from 'viem';
6
6
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
7
- import { useENSResolver, useWalletAddress, useLighterAccount } from '../../hooks/index.js';
7
+ import { useENSResolver, useWalletAddress, useLighterAccount, useKnownTokenContract } from '../../hooks/index.js';
8
8
  import { isENSName } from '../../utils/ens.js';
9
9
  import { LoadingSpinner } from '../common/LoadingSpinner.js';
10
10
  import { EventNames } from '../../constants/events.js';
@@ -14,11 +14,11 @@ import { faClipboard } from '@fortawesome/free-solid-svg-icons/faClipboard';
14
14
  import { faCircleXmark } from '@fortawesome/free-solid-svg-icons/faCircleXmark';
15
15
  import { AnchorButton } from '../primitives/Anchor.js';
16
16
  import { truncateAddress } from '../../utils/truncate.js';
17
- import { isValidAddress } from '../../utils/address.js';
17
+ import { addressesEqual, isValidAddress } from '../../utils/address.js';
18
18
  import { ProviderOptionsContext, useHapticEvent } from '../../providers/RelayKitProvider.js';
19
19
  import { addCustomAddress, getCustomAddresses } from '../../utils/localStorage.js';
20
20
  import { isLighterAddress } from '../../utils/lighter.js';
21
- export const CustomAddressModal = ({ open, toAddress, toChain, linkedWallets, isConnected, multiWalletSupportEnabled, wallet, onAnalyticEvent, onOpenChange, onConfirmed, onClear }) => {
21
+ export const CustomAddressModal = ({ open, toToken, toAddress, toChain, linkedWallets, isConnected, multiWalletSupportEnabled, wallet, onAnalyticEvent, onOpenChange, onConfirmed, onClear }) => {
22
22
  const haptic = useHapticEvent();
23
23
  const connectedAddress = useWalletAddress(wallet, linkedWallets);
24
24
  const [address, setAddress] = useState('');
@@ -67,7 +67,17 @@ export const CustomAddressModal = ({ open, toAddress, toChain, linkedWallets, is
67
67
  }
68
68
  }, [open]);
69
69
  const { data: resolvedENS, isLoading: isLoadingENS } = useENSResolver(isENSName(input) ? input : '');
70
- const isLoading = isLoadingENS || isResolvingLighter;
70
+ // Synchronously block the selected destination token's contract address
71
+ const matchesToToken = Boolean(toToken &&
72
+ toChain &&
73
+ toToken.chainId === toChain.id &&
74
+ addressesEqual(toChain.vmType ?? 'evm', address, toToken.address));
75
+ // Asynchronously check if the address is a known token contract on the
76
+ // destination chain
77
+ const { tokenContract: knownCurrencyMatch, isChecking: isCheckingTokenContract } = useKnownTokenContract(toChain, address, !matchesToToken);
78
+ const knownTokenContract = matchesToToken ? toToken : knownCurrencyMatch;
79
+ const isKnownTokenContract = Boolean(knownTokenContract);
80
+ const isLoading = isLoadingENS || isResolvingLighter || isCheckingTokenContract;
71
81
  useEffect(() => {
72
82
  if (isLighterChain && isEvmInput) {
73
83
  setAddress(resolvedLighterIndex ?? '');
@@ -103,7 +113,7 @@ export const CustomAddressModal = ({ open, toAddress, toChain, linkedWallets, is
103
113
  e.preventDefault(); // Prevent input from losing focus
104
114
  }, onClick: () => {
105
115
  setInput('');
106
- }, children: _jsx(FontAwesomeIcon, { icon: faCircleXmark, width: 16, height: 16 }) })), isLoading && (_jsx("div", { className: "relay:absolute relay:right-2 relay:top-[12px]", children: _jsx(LoadingSpinner, {}) }))] }), isLighterError ? (_jsx(Text, { color: "red", style: "subtitle2", children: "Failed to resolve Lighter address" })) : isLighterChain &&
116
+ }, children: _jsx(FontAwesomeIcon, { icon: faCircleXmark, width: 16, height: 16 }) })), isLoading && (_jsx("div", { className: "relay:absolute relay:right-2 relay:top-[12px]", children: _jsx(LoadingSpinner, {}) }))] }), isKnownTokenContract ? (_jsxs(Text, { color: "red", style: "subtitle2", children: ["This address is the contract for", ' ', knownTokenContract?.symbol ?? 'a token', ", not a wallet. To continue, enter a wallet address or use the token selector."] })) : isLighterError ? (_jsx(Text, { color: "red", style: "subtitle2", children: "Failed to resolve Lighter address" })) : isLighterChain &&
107
117
  isEvmInput &&
108
118
  !isResolvingLighter &&
109
119
  !resolvedLighterIndex ? (_jsx(Text, { color: "red", style: "subtitle2", children: "No Lighter account found for this EVM address" })) : !address && input.length && !isLoading ? (_jsx(Text, { color: "red", style: "subtitle2", children: "Not a valid address" })) : null, didResolveLighterFromEvm && resolvedLighterIndex ? (_jsxs(Flex, { className: "relay:bg-[var(--relay-colors-green2)] relay:p-2 relay:rounded-lg relay:gap-2", align: "center", children: [_jsx(FontAwesomeIcon, { icon: faCircleCheck, color: "#30A46C", width: 16, height: 16 }), _jsxs(Text, { style: "subtitle3", children: ["Lighter Account ID: ", resolvedLighterIndex] })] })) : null, !connectedAddressSet && address && isConnected ? (_jsxs(Flex, { className: "relay:bg-[var(--relay-colors-amber2)] relay:p-2 relay:rounded-lg relay:gap-2", align: "center", children: [_jsx(FontAwesomeIcon, { icon: faTriangleExclamation, color: "#FFA01C", width: 16, height: 16, className: "relay:shrink-0" }), _jsxs(Text, { style: "subtitle3", color: "warning", children: ["This isn't the connected wallet address. Please ensure that the address provided is accurate.", ' '] })] })) : null, !multiWalletSupportEnabled && isConnected ? (connectedAddressSet ? (_jsxs(Flex, { className: "relay:bg-[var(--relay-colors-green2)] relay:p-2 relay:rounded-lg relay:gap-2", align: "center", children: [_jsx(FontAwesomeIcon, { icon: faCircleCheck, color: "#30A46C", width: 16, height: 16 }), _jsx(Text, { style: "subtitle3", children: "Connected Wallet" })] })) : (_jsx(AnchorButton, { onClick: () => {
@@ -111,14 +121,18 @@ export const CustomAddressModal = ({ open, toAddress, toChain, linkedWallets, is
111
121
  onOpenChange(false);
112
122
  }, children: "Use connected wallet address" }))) : null, filteredRecentCustomAddresses.length > 0 ? (_jsxs(_Fragment, { children: [_jsx(Text, { style: "subtitle2", children: "Recent addresses" }), _jsx(Flex, { className: "relay:gap-2 relay:flex-wrap", align: "center", children: filteredRecentCustomAddresses.map((address) => (_jsxs(Pill, { color: "transparent", bordered: true, radius: "squared", className: "relay:flex relay:items-center relay:gap-[6px] relay:cursor-pointer relay:px-2", onClick: () => {
113
123
  haptic('light');
114
- onConfirmed(address);
115
- onOpenChange(false);
116
- onAnalyticEvent?.(EventNames.ADDRESS_MODAL_CONFIRMED, {
124
+ // Route recent addresses through input validation
125
+ setInput(address);
126
+ onAnalyticEvent?.(EventNames.ADDRESS_MODAL_RECENT_SELECTED, {
117
127
  address: address,
118
128
  context: 'custom_address'
119
129
  });
120
- }, children: [_jsx(FontAwesomeIcon, { icon: faClipboard, width: 16, height: 16, color: "#9CA3AF" }), _jsx(Text, { style: "subtitle2", children: truncateAddress(address) })] }, address))) })] })) : null] }), _jsx(Button, { cta: true, disabled: isLoading || !isValidAddress(toChain?.vmType, address, toChain?.id), className: "relay:justify-center", onClick: () => {
121
- if (isValidAddress(toChain?.vmType, address, toChain?.id)) {
130
+ }, children: [_jsx(FontAwesomeIcon, { icon: faClipboard, width: 16, height: 16, color: "#9CA3AF" }), _jsx(Text, { style: "subtitle2", children: truncateAddress(address) })] }, address))) })] })) : null] }), _jsx(Button, { cta: true, disabled: isLoading ||
131
+ isKnownTokenContract ||
132
+ !isValidAddress(toChain?.vmType, address, toChain?.id), className: "relay:justify-center", onClick: () => {
133
+ if (!isKnownTokenContract &&
134
+ !isCheckingTokenContract &&
135
+ isValidAddress(toChain?.vmType, address, toChain?.id)) {
122
136
  // Save the address to custom addresses if it's not a connected wallet address
123
137
  const isConnectedWallet = availableWallets.some((wallet) => wallet.address === address);
124
138
  if (!isConnectedWallet && address !== connectedAddress) {
@@ -1 +1 @@
1
- {"version":3,"file":"CustomAddressModal.js","sourceRoot":"","sources":["../../../../src/components/common/CustomAddressModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { type FC, useState, useEffect, useMemo, useContext } from 'react'\nimport { Text, Flex, Button, Input, Pill } from '../primitives/index.js'\nimport { Modal } from '../common/Modal.js'\nimport { type Address, isAddress } from 'viem'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n useENSResolver,\n useWalletAddress,\n useLighterAccount\n} from '../../hooks/index.js'\nimport { isENSName } from '../../utils/ens.js'\nimport { LoadingSpinner } from '../common/LoadingSpinner.js'\nimport { EventNames } from '../../constants/events.js'\nimport type { Token } from '../../types/index.js'\nimport { faCircleCheck } from '@fortawesome/free-solid-svg-icons/faCircleCheck'\nimport { faTriangleExclamation } from '@fortawesome/free-solid-svg-icons/faTriangleExclamation'\nimport { faClipboard } from '@fortawesome/free-solid-svg-icons/faClipboard'\nimport { faCircleXmark } from '@fortawesome/free-solid-svg-icons/faCircleXmark'\nimport { AnchorButton } from '../primitives/Anchor.js'\nimport type { AdaptedWallet, RelayChain } from '@relayprotocol/relay-sdk'\nimport type { LinkedWallet } from '../../types/index.js'\nimport { truncateAddress } from '../../utils/truncate.js'\nimport { isValidAddress } from '../../utils/address.js'\nimport {\n ProviderOptionsContext,\n useHapticEvent\n} from '../../providers/RelayKitProvider.js'\nimport {\n addCustomAddress,\n getCustomAddresses\n} from '../../utils/localStorage.js'\nimport { isLighterAddress } from '../../utils/lighter.js'\n\ntype Props = {\n open: boolean\n toToken?: Token\n toAddress?: string\n toChain?: RelayChain\n isConnected?: boolean\n multiWalletSupportEnabled?: boolean\n linkedWallets: LinkedWallet[]\n wallet?: AdaptedWallet\n onAnalyticEvent?: (eventName: string, data?: any) => void\n onOpenChange: (open: boolean) => void\n onConfirmed: (address: Address | string) => void\n onClear: () => void\n}\n\nexport const CustomAddressModal: FC<Props> = ({\n open,\n toAddress,\n toChain,\n linkedWallets,\n isConnected,\n multiWalletSupportEnabled,\n wallet,\n onAnalyticEvent,\n onOpenChange,\n onConfirmed,\n onClear\n}) => {\n const haptic = useHapticEvent()\n const connectedAddress = useWalletAddress(wallet, linkedWallets)\n const [address, setAddress] = useState('')\n const [input, setInput] = useState('')\n const [recentCustomAddresses, setRecentCustomAddresses] = useState<string[]>(\n []\n )\n const providerOptionsContext = useContext(ProviderOptionsContext)\n const connectorKeyOverrides = providerOptionsContext.vmConnectorKeyOverrides\n\n // Lighter: allow resolving EVM address to Lighter account ID (and vice versa)\n const isLighterChain = toChain?.vmType === 'lvm'\n const isEvmInput = isAddress(input)\n const isLighterIndexInput = isLighterAddress(input)\n\n const {\n data: lighterAccount,\n isLoading: isResolvingLighter,\n isError: isLighterError\n } = useLighterAccount(\n isLighterChain && (isEvmInput || isLighterIndexInput) ? input : undefined\n )\n\n const resolvedLighterIndex = lighterAccount?.index?.toString()\n\n const didResolveLighterFromEvm =\n isLighterChain &&\n isEvmInput &&\n !!resolvedLighterIndex &&\n isLighterAddress(resolvedLighterIndex)\n\n const availableWallets = useMemo(\n () =>\n linkedWallets.filter((wallet) =>\n isValidAddress(\n toChain?.vmType,\n wallet.address,\n toChain?.id,\n wallet.connector,\n connectorKeyOverrides\n )\n ),\n [toChain, linkedWallets]\n )\n\n const filteredRecentCustomAddresses = useMemo(\n () =>\n recentCustomAddresses.filter((address) =>\n isValidAddress(toChain?.vmType, address, toChain?.id)\n ),\n [recentCustomAddresses, toChain]\n )\n\n // For Lighter: check if the EVM address (input or resolved) matches connected wallet\n const isLighterConnectedWallet =\n isLighterChain &&\n !!lighterAccount &&\n // User entered EVM address - check if it matches connected wallet\n ((isEvmInput && input.toLowerCase() === connectedAddress?.toLowerCase()) ||\n // User entered Lighter index - check if resolved l1_address matches connected wallet\n (isLighterIndexInput &&\n lighterAccount.l1_address?.toLowerCase() ===\n connectedAddress?.toLowerCase()))\n\n const connectedAddressSet =\n (!address && !toAddress) ||\n (toAddress === connectedAddress && address === connectedAddress) ||\n availableWallets.some((wallet) => wallet.address === toAddress) ||\n isLighterConnectedWallet\n\n useEffect(() => {\n if (!open) {\n setAddress('')\n setInput('')\n } else {\n if (isValidAddress(toChain?.vmType, toAddress ?? '', toChain?.id)) {\n setAddress(toAddress ? toAddress : '')\n setInput(toAddress ? toAddress : '')\n }\n // Load custom addresses when modal opens\n setRecentCustomAddresses(getCustomAddresses())\n onAnalyticEvent?.(EventNames.ADDRESS_MODAL_OPEN)\n }\n }, [open])\n\n const { data: resolvedENS, isLoading: isLoadingENS } = useENSResolver(\n isENSName(input) ? input : ''\n )\n\n const isLoading = isLoadingENS || isResolvingLighter\n\n useEffect(() => {\n if (isLighterChain && isEvmInput) {\n setAddress(resolvedLighterIndex ?? '')\n } else if (isValidAddress(toChain?.vmType, input, toChain?.id)) {\n setAddress(input)\n } else if (resolvedENS?.address) {\n setAddress(resolvedENS.address)\n } else {\n setAddress('')\n }\n }, [\n input,\n resolvedENS,\n resolvedLighterIndex,\n isLighterChain,\n isEvmInput,\n toChain\n ])\n\n return (\n <Modal\n trigger={null}\n open={open}\n onOpenChange={onOpenChange}\n className=\"relay:overflow-hidden\"\n >\n <Flex\n direction=\"column\"\n className=\"relay:w-full relay:h-full relay:gap-4 relay:sm:w-[386px]\"\n >\n <Text style=\"h6\">To Address</Text>\n <Flex direction=\"column\" className=\"relay:gap-2 relay:relative\">\n <Flex\n className=\"relay:relative relay:w-full\"\n >\n <Input\n type=\"text\"\n inputMode=\"text\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n className=\"ph-no-capture relay:w-full relay:h-12\"\n inputStyle={{\n paddingRight: input.length > 0 ? '42px' : '16px'\n }}\n placeholder={\n !toChain\n ? 'Enter address'\n : toChain.vmType === 'evm'\n ? 'Address or ENS'\n : isLighterChain\n ? `${toChain.displayName} address or EVM address`\n : `Enter ${toChain.displayName} address`\n }\n value={input}\n onChange={(e) => {\n setInput((e.target as HTMLInputElement).value)\n }}\n />\n {input.length > 0 && !isLoading && (\n <Button\n color=\"ghost\"\n size=\"none\"\n className=\"relay:absolute relay:right-[8px] relay:top-1/2 relay:-translate-y-1/2 relay:!w-[24px] relay:!h-[24px] relay:!min-w-0 relay:!min-h-0 relay:!leading-none relay:p-0 relay:rounded relay:flex relay:items-center relay:justify-center relay:bg-[var(--relay-colors-gray3)] relay:!text-[color:var(--relay-colors-gray8)]\"\n onMouseDown={(e) => {\n e.preventDefault() // Prevent input from losing focus\n }}\n onClick={() => {\n setInput('')\n }}\n >\n <FontAwesomeIcon icon={faCircleXmark} width={16} height={16} />\n </Button>\n )}\n {isLoading && (\n <div className=\"relay:absolute relay:right-2 relay:top-[12px]\">\n <LoadingSpinner />\n </div>\n )}\n </Flex>\n {isLighterError ? (\n <Text color=\"red\" style=\"subtitle2\">\n Failed to resolve Lighter address\n </Text>\n ) : isLighterChain &&\n isEvmInput &&\n !isResolvingLighter &&\n !resolvedLighterIndex ? (\n <Text color=\"red\" style=\"subtitle2\">\n No Lighter account found for this EVM address\n </Text>\n ) : !address && input.length && !isLoading ? (\n <Text color=\"red\" style=\"subtitle2\">\n Not a valid address\n </Text>\n ) : null}\n\n {didResolveLighterFromEvm && resolvedLighterIndex ? (\n <Flex\n className=\"relay:bg-[var(--relay-colors-green2)] relay:p-2 relay:rounded-lg relay:gap-2\"\n align=\"center\"\n >\n <FontAwesomeIcon\n icon={faCircleCheck}\n color=\"#30A46C\"\n width={16}\n height={16}\n />\n <Text style=\"subtitle3\">\n Lighter Account ID: {resolvedLighterIndex}\n </Text>\n </Flex>\n ) : null}\n\n {!connectedAddressSet && address && isConnected ? (\n <Flex\n className=\"relay:bg-[var(--relay-colors-amber2)] relay:p-2 relay:rounded-lg relay:gap-2\"\n align=\"center\"\n >\n <FontAwesomeIcon\n icon={faTriangleExclamation}\n color=\"#FFA01C\"\n width={16}\n height={16}\n className=\"relay:shrink-0\"\n />\n <Text style=\"subtitle3\" color=\"warning\">\n This isn't the connected wallet address. Please ensure that the\n address provided is accurate.{' '}\n </Text>\n </Flex>\n ) : null}\n\n {!multiWalletSupportEnabled && isConnected ? (\n connectedAddressSet ? (\n <Flex\n className=\"relay:bg-[var(--relay-colors-green2)] relay:p-2 relay:rounded-lg relay:gap-2\"\n align=\"center\"\n >\n <FontAwesomeIcon\n icon={faCircleCheck}\n color=\"#30A46C\"\n width={16}\n height={16}\n />\n <Text style=\"subtitle3\">Connected Wallet</Text>\n </Flex>\n ) : (\n <AnchorButton\n onClick={() => {\n onClear()\n onOpenChange(false)\n }}\n >\n Use connected wallet address\n </AnchorButton>\n )\n ) : null}\n\n {filteredRecentCustomAddresses.length > 0 ? (\n <>\n <Text style=\"subtitle2\">Recent addresses</Text>\n <Flex className=\"relay:gap-2 relay:flex-wrap\" align=\"center\">\n {filteredRecentCustomAddresses.map((address) => (\n <Pill\n key={address}\n color=\"transparent\"\n bordered\n radius=\"squared\"\n className=\"relay:flex relay:items-center relay:gap-[6px] relay:cursor-pointer relay:px-2\"\n onClick={() => {\n haptic('light')\n onConfirmed(address)\n onOpenChange(false)\n onAnalyticEvent?.(EventNames.ADDRESS_MODAL_CONFIRMED, {\n address: address,\n context: 'custom_address'\n })\n }}\n >\n <FontAwesomeIcon\n icon={faClipboard}\n width={16}\n height={16}\n color=\"#9CA3AF\"\n />\n <Text style=\"subtitle2\">{truncateAddress(address)}</Text>\n </Pill>\n ))}\n </Flex>\n </>\n ) : null}\n </Flex>\n <Button\n cta={true}\n disabled={\n isLoading || !isValidAddress(toChain?.vmType, address, toChain?.id)\n }\n className=\"relay:justify-center\"\n onClick={() => {\n if (isValidAddress(toChain?.vmType, address, toChain?.id)) {\n // Save the address to custom addresses if it's not a connected wallet address\n const isConnectedWallet = availableWallets.some(\n (wallet) => wallet.address === address\n )\n if (!isConnectedWallet && address !== connectedAddress) {\n addCustomAddress(address)\n setRecentCustomAddresses(getCustomAddresses())\n }\n\n haptic('light')\n onConfirmed(address)\n onAnalyticEvent?.(EventNames.ADDRESS_MODAL_CONFIRMED, {\n address: address,\n context: 'input'\n })\n }\n onOpenChange(false)\n }}\n data-testid=\"save-button\"\n >\n Save\n </Button>\n </Flex>\n </Modal>\n )\n}\n"]}
1
+ {"version":3,"file":"CustomAddressModal.js","sourceRoot":"","sources":["../../../../src/components/common/CustomAddressModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { type FC, useState, useEffect, useMemo, useContext } from 'react'\nimport { Text, Flex, Button, Input, Pill } from '../primitives/index.js'\nimport { Modal } from '../common/Modal.js'\nimport { type Address, isAddress } from 'viem'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n useENSResolver,\n useWalletAddress,\n useLighterAccount,\n useKnownTokenContract\n} from '../../hooks/index.js'\nimport { isENSName } from '../../utils/ens.js'\nimport { LoadingSpinner } from '../common/LoadingSpinner.js'\nimport { EventNames } from '../../constants/events.js'\nimport type { Token } from '../../types/index.js'\nimport { faCircleCheck } from '@fortawesome/free-solid-svg-icons/faCircleCheck'\nimport { faTriangleExclamation } from '@fortawesome/free-solid-svg-icons/faTriangleExclamation'\nimport { faClipboard } from '@fortawesome/free-solid-svg-icons/faClipboard'\nimport { faCircleXmark } from '@fortawesome/free-solid-svg-icons/faCircleXmark'\nimport { AnchorButton } from '../primitives/Anchor.js'\nimport type { AdaptedWallet, RelayChain } from '@relayprotocol/relay-sdk'\nimport type { LinkedWallet } from '../../types/index.js'\nimport { truncateAddress } from '../../utils/truncate.js'\nimport { addressesEqual, isValidAddress } from '../../utils/address.js'\nimport {\n ProviderOptionsContext,\n useHapticEvent\n} from '../../providers/RelayKitProvider.js'\nimport {\n addCustomAddress,\n getCustomAddresses\n} from '../../utils/localStorage.js'\nimport { isLighterAddress } from '../../utils/lighter.js'\n\ntype Props = {\n open: boolean\n toToken?: Token\n toAddress?: string\n toChain?: RelayChain\n isConnected?: boolean\n multiWalletSupportEnabled?: boolean\n linkedWallets: LinkedWallet[]\n wallet?: AdaptedWallet\n onAnalyticEvent?: (eventName: string, data?: any) => void\n onOpenChange: (open: boolean) => void\n onConfirmed: (address: Address | string) => void\n onClear: () => void\n}\n\nexport const CustomAddressModal: FC<Props> = ({\n open,\n toToken,\n toAddress,\n toChain,\n linkedWallets,\n isConnected,\n multiWalletSupportEnabled,\n wallet,\n onAnalyticEvent,\n onOpenChange,\n onConfirmed,\n onClear\n}) => {\n const haptic = useHapticEvent()\n const connectedAddress = useWalletAddress(wallet, linkedWallets)\n const [address, setAddress] = useState('')\n const [input, setInput] = useState('')\n const [recentCustomAddresses, setRecentCustomAddresses] = useState<string[]>(\n []\n )\n const providerOptionsContext = useContext(ProviderOptionsContext)\n const connectorKeyOverrides = providerOptionsContext.vmConnectorKeyOverrides\n\n // Lighter: allow resolving EVM address to Lighter account ID (and vice versa)\n const isLighterChain = toChain?.vmType === 'lvm'\n const isEvmInput = isAddress(input)\n const isLighterIndexInput = isLighterAddress(input)\n\n const {\n data: lighterAccount,\n isLoading: isResolvingLighter,\n isError: isLighterError\n } = useLighterAccount(\n isLighterChain && (isEvmInput || isLighterIndexInput) ? input : undefined\n )\n\n const resolvedLighterIndex = lighterAccount?.index?.toString()\n\n const didResolveLighterFromEvm =\n isLighterChain &&\n isEvmInput &&\n !!resolvedLighterIndex &&\n isLighterAddress(resolvedLighterIndex)\n\n const availableWallets = useMemo(\n () =>\n linkedWallets.filter((wallet) =>\n isValidAddress(\n toChain?.vmType,\n wallet.address,\n toChain?.id,\n wallet.connector,\n connectorKeyOverrides\n )\n ),\n [toChain, linkedWallets]\n )\n\n const filteredRecentCustomAddresses = useMemo(\n () =>\n recentCustomAddresses.filter((address) =>\n isValidAddress(toChain?.vmType, address, toChain?.id)\n ),\n [recentCustomAddresses, toChain]\n )\n\n // For Lighter: check if the EVM address (input or resolved) matches connected wallet\n const isLighterConnectedWallet =\n isLighterChain &&\n !!lighterAccount &&\n // User entered EVM address - check if it matches connected wallet\n ((isEvmInput && input.toLowerCase() === connectedAddress?.toLowerCase()) ||\n // User entered Lighter index - check if resolved l1_address matches connected wallet\n (isLighterIndexInput &&\n lighterAccount.l1_address?.toLowerCase() ===\n connectedAddress?.toLowerCase()))\n\n const connectedAddressSet =\n (!address && !toAddress) ||\n (toAddress === connectedAddress && address === connectedAddress) ||\n availableWallets.some((wallet) => wallet.address === toAddress) ||\n isLighterConnectedWallet\n\n useEffect(() => {\n if (!open) {\n setAddress('')\n setInput('')\n } else {\n if (isValidAddress(toChain?.vmType, toAddress ?? '', toChain?.id)) {\n setAddress(toAddress ? toAddress : '')\n setInput(toAddress ? toAddress : '')\n }\n // Load custom addresses when modal opens\n setRecentCustomAddresses(getCustomAddresses())\n onAnalyticEvent?.(EventNames.ADDRESS_MODAL_OPEN)\n }\n }, [open])\n\n const { data: resolvedENS, isLoading: isLoadingENS } = useENSResolver(\n isENSName(input) ? input : ''\n )\n\n // Synchronously block the selected destination token's contract address\n const matchesToToken = Boolean(\n toToken &&\n toChain &&\n toToken.chainId === toChain.id &&\n addressesEqual(toChain.vmType ?? 'evm', address, toToken.address)\n )\n\n // Asynchronously check if the address is a known token contract on the\n // destination chain\n const { tokenContract: knownCurrencyMatch, isChecking: isCheckingTokenContract } =\n useKnownTokenContract(toChain, address, !matchesToToken)\n\n const knownTokenContract = matchesToToken ? toToken : knownCurrencyMatch\n\n const isKnownTokenContract = Boolean(knownTokenContract)\n\n const isLoading =\n isLoadingENS || isResolvingLighter || isCheckingTokenContract\n\n useEffect(() => {\n if (isLighterChain && isEvmInput) {\n setAddress(resolvedLighterIndex ?? '')\n } else if (isValidAddress(toChain?.vmType, input, toChain?.id)) {\n setAddress(input)\n } else if (resolvedENS?.address) {\n setAddress(resolvedENS.address)\n } else {\n setAddress('')\n }\n }, [\n input,\n resolvedENS,\n resolvedLighterIndex,\n isLighterChain,\n isEvmInput,\n toChain\n ])\n\n return (\n <Modal\n trigger={null}\n open={open}\n onOpenChange={onOpenChange}\n className=\"relay:overflow-hidden\"\n >\n <Flex\n direction=\"column\"\n className=\"relay:w-full relay:h-full relay:gap-4 relay:sm:w-[386px]\"\n >\n <Text style=\"h6\">To Address</Text>\n <Flex direction=\"column\" className=\"relay:gap-2 relay:relative\">\n <Flex\n className=\"relay:relative relay:w-full\"\n >\n <Input\n type=\"text\"\n inputMode=\"text\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n className=\"ph-no-capture relay:w-full relay:h-12\"\n inputStyle={{\n paddingRight: input.length > 0 ? '42px' : '16px'\n }}\n placeholder={\n !toChain\n ? 'Enter address'\n : toChain.vmType === 'evm'\n ? 'Address or ENS'\n : isLighterChain\n ? `${toChain.displayName} address or EVM address`\n : `Enter ${toChain.displayName} address`\n }\n value={input}\n onChange={(e) => {\n setInput((e.target as HTMLInputElement).value)\n }}\n />\n {input.length > 0 && !isLoading && (\n <Button\n color=\"ghost\"\n size=\"none\"\n className=\"relay:absolute relay:right-[8px] relay:top-1/2 relay:-translate-y-1/2 relay:!w-[24px] relay:!h-[24px] relay:!min-w-0 relay:!min-h-0 relay:!leading-none relay:p-0 relay:rounded relay:flex relay:items-center relay:justify-center relay:bg-[var(--relay-colors-gray3)] relay:!text-[color:var(--relay-colors-gray8)]\"\n onMouseDown={(e) => {\n e.preventDefault() // Prevent input from losing focus\n }}\n onClick={() => {\n setInput('')\n }}\n >\n <FontAwesomeIcon icon={faCircleXmark} width={16} height={16} />\n </Button>\n )}\n {isLoading && (\n <div className=\"relay:absolute relay:right-2 relay:top-[12px]\">\n <LoadingSpinner />\n </div>\n )}\n </Flex>\n {isKnownTokenContract ? (\n <Text color=\"red\" style=\"subtitle2\">\n This address is the contract for{' '}\n {knownTokenContract?.symbol ?? 'a token'}, not a wallet. To\n continue, enter a wallet address or use the token selector.\n </Text>\n ) : isLighterError ? (\n <Text color=\"red\" style=\"subtitle2\">\n Failed to resolve Lighter address\n </Text>\n ) : isLighterChain &&\n isEvmInput &&\n !isResolvingLighter &&\n !resolvedLighterIndex ? (\n <Text color=\"red\" style=\"subtitle2\">\n No Lighter account found for this EVM address\n </Text>\n ) : !address && input.length && !isLoading ? (\n <Text color=\"red\" style=\"subtitle2\">\n Not a valid address\n </Text>\n ) : null}\n\n {didResolveLighterFromEvm && resolvedLighterIndex ? (\n <Flex\n className=\"relay:bg-[var(--relay-colors-green2)] relay:p-2 relay:rounded-lg relay:gap-2\"\n align=\"center\"\n >\n <FontAwesomeIcon\n icon={faCircleCheck}\n color=\"#30A46C\"\n width={16}\n height={16}\n />\n <Text style=\"subtitle3\">\n Lighter Account ID: {resolvedLighterIndex}\n </Text>\n </Flex>\n ) : null}\n\n {!connectedAddressSet && address && isConnected ? (\n <Flex\n className=\"relay:bg-[var(--relay-colors-amber2)] relay:p-2 relay:rounded-lg relay:gap-2\"\n align=\"center\"\n >\n <FontAwesomeIcon\n icon={faTriangleExclamation}\n color=\"#FFA01C\"\n width={16}\n height={16}\n className=\"relay:shrink-0\"\n />\n <Text style=\"subtitle3\" color=\"warning\">\n This isn't the connected wallet address. Please ensure that the\n address provided is accurate.{' '}\n </Text>\n </Flex>\n ) : null}\n\n {!multiWalletSupportEnabled && isConnected ? (\n connectedAddressSet ? (\n <Flex\n className=\"relay:bg-[var(--relay-colors-green2)] relay:p-2 relay:rounded-lg relay:gap-2\"\n align=\"center\"\n >\n <FontAwesomeIcon\n icon={faCircleCheck}\n color=\"#30A46C\"\n width={16}\n height={16}\n />\n <Text style=\"subtitle3\">Connected Wallet</Text>\n </Flex>\n ) : (\n <AnchorButton\n onClick={() => {\n onClear()\n onOpenChange(false)\n }}\n >\n Use connected wallet address\n </AnchorButton>\n )\n ) : null}\n\n {filteredRecentCustomAddresses.length > 0 ? (\n <>\n <Text style=\"subtitle2\">Recent addresses</Text>\n <Flex className=\"relay:gap-2 relay:flex-wrap\" align=\"center\">\n {filteredRecentCustomAddresses.map((address) => (\n <Pill\n key={address}\n color=\"transparent\"\n bordered\n radius=\"squared\"\n className=\"relay:flex relay:items-center relay:gap-[6px] relay:cursor-pointer relay:px-2\"\n onClick={() => {\n haptic('light')\n // Route recent addresses through input validation\n setInput(address)\n onAnalyticEvent?.(\n EventNames.ADDRESS_MODAL_RECENT_SELECTED,\n {\n address: address,\n context: 'custom_address'\n }\n )\n }}\n >\n <FontAwesomeIcon\n icon={faClipboard}\n width={16}\n height={16}\n color=\"#9CA3AF\"\n />\n <Text style=\"subtitle2\">{truncateAddress(address)}</Text>\n </Pill>\n ))}\n </Flex>\n </>\n ) : null}\n </Flex>\n <Button\n cta={true}\n disabled={\n isLoading ||\n isKnownTokenContract ||\n !isValidAddress(toChain?.vmType, address, toChain?.id)\n }\n className=\"relay:justify-center\"\n onClick={() => {\n if (\n !isKnownTokenContract &&\n !isCheckingTokenContract &&\n isValidAddress(toChain?.vmType, address, toChain?.id)\n ) {\n // Save the address to custom addresses if it's not a connected wallet address\n const isConnectedWallet = availableWallets.some(\n (wallet) => wallet.address === address\n )\n if (!isConnectedWallet && address !== connectedAddress) {\n addCustomAddress(address)\n setRecentCustomAddresses(getCustomAddresses())\n }\n\n haptic('light')\n onConfirmed(address)\n onAnalyticEvent?.(EventNames.ADDRESS_MODAL_CONFIRMED, {\n address: address,\n context: 'input'\n })\n }\n onOpenChange(false)\n }}\n data-testid=\"save-button\"\n >\n Save\n </Button>\n </Flex>\n </Modal>\n )\n}\n"]}
@@ -12,7 +12,8 @@ const RefundReason = ({ reasonCode }) => {
12
12
  case 'NEGATIVE_NEW_AMOUNT_AFTER_FEES': {
13
13
  return (_jsx(_Fragment, { children: "Your transaction has been refunded because the fees exceeded the expected amount. Try adjusting the slippage or amount." }));
14
14
  }
15
- case 'NO_QUOTES': {
15
+ case 'NO_QUOTES':
16
+ case 'NO_INTERNAL_SWAP_ROUTES_FOUND': {
16
17
  return (_jsx(_Fragment, { children: "Your transaction has been refunded because no swap routes were found for your request. Try a different token or amount." }));
17
18
  }
18
19
  case 'REVERSE_SWAP_FAILED': {
@@ -31,13 +32,115 @@ const RefundReason = ({ reasonCode }) => {
31
32
  return (_jsxs(_Fragment, { children: ["Your transaction amount is insufficient to cover the gas cost for an automatic refund. Please", ' ', _jsx(Anchor, { href: "https://docs.relay.link/what-is-relay#intercom", target: "_blank", children: "contact support" }), ' ', "if you need assistance.", ' '] }));
32
33
  }
33
34
  case 'EXECUTION_REVERTED':
35
+ case 'TRANSACTION_REVERTED':
36
+ case 'FLUID_DEX_ERROR':
34
37
  case 'MISSING_REVERT_DATA': {
35
38
  return (_jsx(_Fragment, { children: "Your transaction has been refunded because there was an issue during execution. Try adjusting the slippage or amount." }));
36
39
  }
37
- case 'DEPOSIT_ADDRESS_MISMATCH':
38
- case 'DEPOSIT_CHAIN_MISMATCH': //@ts-ignore: legacy reason code (insufficient balance)
39
- case 'INSUFFICIENT_BALANCE_FOR_REFUND':
40
+ case 'DEPOSIT_CHAIN_MISMATCH':
41
+ case 'INCORRECT_DEPOSIT_CURRENCY':
42
+ case 'ORIGIN_CURRENCY_MISMATCH': {
43
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because the chain or token received didn\u2019t match the quote." }));
44
+ }
45
+ case 'DOUBLE_SPEND': {
46
+ return (_jsxs(_Fragment, { children: ["Your transfer couldn\u2019t be processed because a deposit was already completed for this request. Please", ' ', _jsx(Anchor, { href: "https://docs.relay.link/what-is-relay#intercom", target: "_blank", children: "contact support" }), ' ', "if you have any further questions.", ' '] }));
47
+ }
48
+ case 'TTL_EXPIRED':
49
+ case 'DEPOSIT_CONFIRMATION_TIMEOUT': {
50
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because the deposit wasn\u2019t confirmed in time. Please try again." }));
51
+ }
52
+ case 'DEPOSIT_REORGED': {
53
+ return (_jsx(_Fragment, { children: "Your transaction could not be completed because of a temporary network issue affecting your deposit. Please try again." }));
54
+ }
55
+ case 'ORPHANED_DEPOSIT_REFUND': {
56
+ return (_jsx(_Fragment, { children: "Your deposit couldn\u2019t be matched to an active request, so it has been refunded." }));
57
+ }
58
+ case 'BLOCKED_WALLET': {
59
+ return (_jsxs(_Fragment, { children: ["This transaction couldn\u2019t be completed because an address associated with it didn\u2019t meet our risk management standards. Please", ' ', _jsx(Anchor, { href: "https://docs.relay.link/what-is-relay#intercom", target: "_blank", children: "contact support" }), ' ', "if you have any further questions.", ' '] }));
60
+ }
40
61
  case 'SOLVER_CAPACITY_EXCEEDED':
62
+ case 'SOLVER_BALANCE_TOO_LOW':
63
+ case 'SPONSOR_BALANCE_TOO_LOW': {
64
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because there wasn\u2019t enough capacity available for this route right now. Please try again later." }));
65
+ }
66
+ case 'GASLESS_PERMIT_BALANCE_TOO_LOW': {
67
+ return (_jsx(_Fragment, { children: "Your transaction could not be completed because the available balance was too low, so the funds have been refunded." }));
68
+ }
69
+ case 'INSUFFICIENT_FUNDS_FOR_RENT': {
70
+ return (_jsx(_Fragment, { children: "Your transaction could not be completed because the balance wasn\u2019t enough to cover Solana network fees. Please try again with a larger amount." }));
71
+ }
72
+ case 'SWAP_IMPACT_TOO_HIGH': {
73
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because the swap\u2019s price impact was too high. Try a smaller amount or a different token." }));
74
+ }
75
+ case 'INSUFFICIENT_POOL_LIQUIDITY': {
76
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because there wasn\u2019t enough liquidity to complete the swap. Try a smaller amount or try again later." }));
77
+ }
78
+ case 'TRANSACTION_TOO_LARGE':
79
+ case 'SWAP_USES_TOO_MUCH_GAS':
80
+ case 'QUOTED_GAS_LIMIT_EXCEEDED':
81
+ case 'INVALID_GAS_PRICE': {
82
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because it couldn\u2019t be executed within network limits. Try a smaller amount or a different route." }));
83
+ }
84
+ case 'JUPITER_INVALID_TOKEN_ACCOUNT': {
85
+ return (_jsx(_Fragment, { children: "Your transaction could not be completed because a required Solana token account was missing or invalid. Please try again." }));
86
+ }
87
+ case 'CONTRACT_PAUSED': {
88
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because the destination contract is currently paused. Please try again later." }));
89
+ }
90
+ case 'TOKEN_NOT_TRANSFERABLE':
91
+ case 'DESTINATION_TOKEN_TRANSFER_REJECTED':
92
+ case 'TRANSFER_FAILED': {
93
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because the token rejected the transfer. Some tokens have transfer restrictions, taxes, or limits." }));
94
+ }
95
+ case 'TRANSFER_FROM_FAILED':
96
+ case 'TRANSFER_AMOUNT_EXCEEDS_ALLOWANCE': {
97
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because the token approval was insufficient for the transfer amount. Please try again." }));
98
+ }
99
+ case 'TRANSFER_AMOUNT_EXCEEDS_BALANCE':
100
+ case 'INSUFFICIENT_NATIVE_TOKENS_SUPPLIED':
101
+ case 'INCORRECT_PAYMENT':
102
+ case 'ZERO_SELL_AMOUNT': {
103
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because the amount available didn\u2019t match what the transaction required." }));
104
+ }
105
+ case 'SIGNATURE_EXPIRED':
106
+ case 'INVALID_SIGNATURE':
107
+ case 'INVALID_NONCE':
108
+ case 'INVALID_SENDER':
109
+ case 'INVALID_SIGNER': {
110
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because there was a signature or authorization issue. Please try again." }));
111
+ }
112
+ case 'ORDER_EXPIRED':
113
+ case 'PROTOCOL_DEADLINE_EXPIRED': {
114
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because the order expired before it could be completed. Please try again." }));
115
+ }
116
+ case 'ORDER_ALREADY_FILLED': {
117
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because the order was already filled by another transaction. This can happen when multiple transactions target the same order simultaneously." }));
118
+ }
119
+ case 'ORDER_IS_CANCELLED': {
120
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because the order was canceled before it could be completed." }));
121
+ }
122
+ case 'MINT_NOT_ACTIVE': {
123
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because the mint is not currently active. The mint may not have started yet or may have already ended." }));
124
+ }
125
+ case 'SEAPORT_INEXACT_FRACTION':
126
+ case 'SEAPORT_INVALID_FULFILLER': {
127
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because the marketplace order couldn\u2019t be fulfilled." }));
128
+ }
129
+ case 'ACCOUNT_ABSTRACTION_INVALID_NONCE':
130
+ case 'ACCOUNT_ABSTRACTION_SIGNATURE_ERROR':
131
+ case 'ACCOUNT_ABSTRACTION_GAS_LIMIT': {
132
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because there was an issue with your smart account operation. Please try again." }));
133
+ }
134
+ case 'ERC_1155_TOO_MANY_REQUESTED':
135
+ case 'MINT_QUANTITY_EXCEEDS_MAX_PER_WALLET':
136
+ case 'MINT_QUANTITY_EXCEEDS_MAX_SUPPLY': {
137
+ return (_jsx(_Fragment, { children: "Your transaction has been refunded because the requested mint quantity exceeds what\u2019s allowed for this collection." }));
138
+ }
139
+ case 'MANUAL_ADMIN_REFUND': {
140
+ return (_jsxs(_Fragment, { children: ["Your transaction has been refunded manually by the Relay team. Please", ' ', _jsx(Anchor, { href: "https://docs.relay.link/what-is-relay#intercom", target: "_blank", children: "contact support" }), ' ', "if you have any further questions.", ' '] }));
141
+ }
142
+ case 'DEPOSIT_ADDRESS_MISMATCH': //@ts-ignore: legacy reason code (insufficient balance)
143
+ case 'INSUFFICIENT_BALANCE_FOR_REFUND':
41
144
  case 'UNKNOWN':
42
145
  default: {
43
146
  return (_jsxs(_Fragment, { children: ["It looks like an unknown issue occurred during the transaction. Please", ' ', _jsx(Anchor, { href: "https://docs.relay.link/what-is-relay#intercom", target: "_blank", children: "contact support" }), ' ', "if you have any further questions.", ' '] }));
@@ -1 +1 @@
1
- {"version":3,"file":"RefundReason.js","sourceRoot":"","sources":["../../../../src/components/common/RefundReason.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,yBAAyB,CAAA;AAS5C,MAAM,YAAY,GAAgC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;IACnE,IAAI,UAAU,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QACtC,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,CACL,kJAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,uCAAuC,CAAC,CAAC,CAAC;gBAC7C,OAAO,CACL,yIAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,gCAAgC,CAAC,CAAC,CAAC;gBACtC,OAAO,CACL,wJAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,OAAO,CACL,wJAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,CACL,8JAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,OAAO,CACL,8IAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,OAAO,CACL,6KAGK,GAAG,EACN,KAAC,MAAM,IACL,IAAI,EAAC,gDAAgD,EACrD,MAAM,EAAC,QAAQ,gCAGR,EAAC,GAAG,4BACU,GAAG,IACzB,CACJ,CAAA;YACH,CAAC;YACD,KAAK,kCAAkC,CAAC,CAAC,CAAC;gBACxC,OAAO,CACL,mJAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,0BAA0B,CAAC,CAAC,CAAC;gBAChC,OAAO,CACL,+HAE2B,GAAG,EAC5B,KAAC,MAAM,IACL,IAAI,EAAC,gDAAgD,EACrD,MAAM,EAAC,QAAQ,gCAGR,EAAC,GAAG,6BACW,GAAG,IAC1B,CACJ,CAAA;YACH,CAAC;YACD,KAAK,oBAAoB,CAAC;YAC1B,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,CACL,sJAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,0BAA0B,CAAC;YAChC,KAAK,wBAAwB,CAAC,CAAC,uDAAuD;YACtF,KAAK,iCAAiC,CAAC;YACvC,KAAK,0BAA0B,CAAC;YAChC,KAAK,SAAS,CAAC;YACf,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO,CACL,wGAES,GAAG,EACV,KAAC,MAAM,IACL,IAAI,EAAC,gDAAgD,EACrD,MAAM,EAAC,QAAQ,gCAGR,EAAC,GAAG,wCACsB,GAAG,IACrC,CACJ,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED,eAAe,YAAY,CAAA","sourcesContent":["import type { paths } from '@relayprotocol/relay-sdk'\nimport Anchor from '../primitives/Anchor.js'\n\ntype RefundReasonProps = {\n reasonCode: NonNullable<\n NonNullable<\n paths['/requests/v2']['get']['responses']['200']['content']['application/json']['requests']\n >[0]['data']\n >['failReason']\n}\nconst RefundReason: React.FC<RefundReasonProps> = ({ reasonCode }) => {\n if (reasonCode && reasonCode != 'N/A') {\n switch (reasonCode) {\n case 'TOO_LITTLE_RECEIVED': {\n return (\n <>\n Your transaction has been refunded because the received amount was\n too low. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NEW_CALLDATA_INCLUDES_HIGHER_RENT_FEE': {\n return (\n <>\n Your transaction has been refunded because network fees increased.\n Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NEGATIVE_NEW_AMOUNT_AFTER_FEES': {\n return (\n <>\n Your transaction has been refunded because the fees exceeded the\n expected amount. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NO_QUOTES': {\n return (\n <>\n Your transaction has been refunded because no swap routes were found\n for your request. Try a different token or amount.\n </>\n )\n }\n case 'REVERSE_SWAP_FAILED': {\n return (\n <>\n Your transaction has been refunded because the reverse swap couldn’t\n be completed. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'GENERATE_SWAP_FAILED': {\n return (\n <>\n Your transaction has been refunded because something went wrong\n while setting up your swap. Please try again.\n </>\n )\n }\n case 'SLIPPAGE': {\n return (\n <>\n Your transaction has been refunded because the market price shifted\n more than the allowed slippage. Try adjusting your slippage settings\n or{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if the issue persists.{' '}\n </>\n )\n }\n case 'DEPOSITED_AMOUNT_TOO_LOW_TO_FILL': {\n return (\n <>\n Your transaction has been refunded because the deposited amount was\n too low. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'AMOUNT_TOO_LOW_TO_REFUND': {\n return (\n <>\n Your transaction amount is insufficient to cover the gas cost for an\n automatic refund. Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you need assistance.{' '}\n </>\n )\n }\n case 'EXECUTION_REVERTED':\n case 'MISSING_REVERT_DATA': {\n return (\n <>\n  Your transaction has been refunded because there was an issue\n during execution. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'DEPOSIT_ADDRESS_MISMATCH':\n case 'DEPOSIT_CHAIN_MISMATCH': //@ts-ignore: legacy reason code (insufficient balance)\n case 'INSUFFICIENT_BALANCE_FOR_REFUND':\n case 'SOLVER_CAPACITY_EXCEEDED':\n case 'UNKNOWN':\n default: {\n return (\n <>\n It looks like an unknown issue occurred during the transaction.\n Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you have any further questions.{' '}\n </>\n )\n }\n }\n }\n}\n\nexport default RefundReason\n"]}
1
+ {"version":3,"file":"RefundReason.js","sourceRoot":"","sources":["../../../../src/components/common/RefundReason.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { paths } from '@relayprotocol/relay-sdk'\nimport Anchor from '../primitives/Anchor.js'\n\ntype RefundReasonProps = {\n reasonCode: NonNullable<\n NonNullable<\n paths['/requests/v3']['get']['responses']['200']['content']['application/json']['requests']\n >[0]['data']\n >['failReason']\n}\nconst RefundReason: React.FC<RefundReasonProps> = ({ reasonCode }) => {\n if (reasonCode && reasonCode != 'N/A') {\n switch (reasonCode) {\n case 'TOO_LITTLE_RECEIVED': {\n return (\n <>\n Your transaction has been refunded because the received amount was\n too low. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NEW_CALLDATA_INCLUDES_HIGHER_RENT_FEE': {\n return (\n <>\n Your transaction has been refunded because network fees increased.\n Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NEGATIVE_NEW_AMOUNT_AFTER_FEES': {\n return (\n <>\n Your transaction has been refunded because the fees exceeded the\n expected amount. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NO_QUOTES':\n case 'NO_INTERNAL_SWAP_ROUTES_FOUND': {\n return (\n <>\n Your transaction has been refunded because no swap routes were found\n for your request. Try a different token or amount.\n </>\n )\n }\n case 'REVERSE_SWAP_FAILED': {\n return (\n <>\n Your transaction has been refunded because the reverse swap couldn’t\n be completed. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'GENERATE_SWAP_FAILED': {\n return (\n <>\n Your transaction has been refunded because something went wrong\n while setting up your swap. Please try again.\n </>\n )\n }\n case 'SLIPPAGE': {\n return (\n <>\n Your transaction has been refunded because the market price shifted\n more than the allowed slippage. Try adjusting your slippage settings\n or{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if the issue persists.{' '}\n </>\n )\n }\n case 'DEPOSITED_AMOUNT_TOO_LOW_TO_FILL': {\n return (\n <>\n Your transaction has been refunded because the deposited amount was\n too low. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'AMOUNT_TOO_LOW_TO_REFUND': {\n return (\n <>\n Your transaction amount is insufficient to cover the gas cost for an\n automatic refund. Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you need assistance.{' '}\n </>\n )\n }\n case 'EXECUTION_REVERTED':\n case 'TRANSACTION_REVERTED':\n case 'FLUID_DEX_ERROR':\n case 'MISSING_REVERT_DATA': {\n return (\n <>\n  Your transaction has been refunded because there was an issue\n during execution. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'DEPOSIT_CHAIN_MISMATCH':\n case 'INCORRECT_DEPOSIT_CURRENCY':\n case 'ORIGIN_CURRENCY_MISMATCH': {\n return (\n <>\n Your transaction has been refunded because the chain or token\n received didn’t match the quote.\n </>\n )\n }\n case 'DOUBLE_SPEND': {\n return (\n <>\n Your transfer couldn’t be processed because a deposit was already\n completed for this request. Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you have any further questions.{' '}\n </>\n )\n }\n case 'TTL_EXPIRED':\n case 'DEPOSIT_CONFIRMATION_TIMEOUT': {\n return (\n <>\n Your transaction has been refunded because the deposit wasn’t\n confirmed in time. Please try again.\n </>\n )\n }\n case 'DEPOSIT_REORGED': {\n return (\n <>\n Your transaction could not be completed because of a temporary\n network issue affecting your deposit. Please try again.\n </>\n )\n }\n case 'ORPHANED_DEPOSIT_REFUND': {\n return (\n <>\n Your deposit couldn’t be matched to an active request, so it has\n been refunded.\n </>\n )\n }\n case 'BLOCKED_WALLET': {\n return (\n <>\n This transaction couldn’t be completed because an address\n associated with it didn’t meet our risk management standards.\n Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you have any further questions.{' '}\n </>\n )\n }\n case 'SOLVER_CAPACITY_EXCEEDED':\n case 'SOLVER_BALANCE_TOO_LOW':\n case 'SPONSOR_BALANCE_TOO_LOW': {\n return (\n <>\n Your transaction has been refunded because there wasn’t enough\n capacity available for this route right now. Please try again\n later.\n </>\n )\n }\n case 'GASLESS_PERMIT_BALANCE_TOO_LOW': {\n return (\n <>\n Your transaction could not be completed because the available\n balance was too low, so the funds have been refunded.\n </>\n )\n }\n case 'INSUFFICIENT_FUNDS_FOR_RENT': {\n return (\n <>\n Your transaction could not be completed because the balance wasn’t\n enough to cover Solana network fees. Please try again with a larger\n amount.\n </>\n )\n }\n case 'SWAP_IMPACT_TOO_HIGH': {\n return (\n <>\n Your transaction has been refunded because the swap’s price impact\n was too high. Try a smaller amount or a different token.\n </>\n )\n }\n case 'INSUFFICIENT_POOL_LIQUIDITY': {\n return (\n <>\n Your transaction has been refunded because there wasn’t enough\n liquidity to complete the swap. Try a smaller amount or try again\n later.\n </>\n )\n }\n case 'TRANSACTION_TOO_LARGE':\n case 'SWAP_USES_TOO_MUCH_GAS':\n case 'QUOTED_GAS_LIMIT_EXCEEDED':\n case 'INVALID_GAS_PRICE': {\n return (\n <>\n Your transaction has been refunded because it couldn’t be executed\n within network limits. Try a smaller amount or a different route.\n </>\n )\n }\n case 'JUPITER_INVALID_TOKEN_ACCOUNT': {\n return (\n <>\n Your transaction could not be completed because a required Solana\n token account was missing or invalid. Please try again.\n </>\n )\n }\n case 'CONTRACT_PAUSED': {\n return (\n <>\n Your transaction has been refunded because the destination contract\n is currently paused. Please try again later.\n </>\n )\n }\n case 'TOKEN_NOT_TRANSFERABLE':\n case 'DESTINATION_TOKEN_TRANSFER_REJECTED':\n case 'TRANSFER_FAILED': {\n return (\n <>\n Your transaction has been refunded because the token rejected the\n transfer. Some tokens have transfer restrictions, taxes, or limits.\n </>\n )\n }\n case 'TRANSFER_FROM_FAILED':\n case 'TRANSFER_AMOUNT_EXCEEDS_ALLOWANCE': {\n return (\n <>\n Your transaction has been refunded because the token approval was\n insufficient for the transfer amount. Please try again.\n </>\n )\n }\n case 'TRANSFER_AMOUNT_EXCEEDS_BALANCE':\n case 'INSUFFICIENT_NATIVE_TOKENS_SUPPLIED':\n case 'INCORRECT_PAYMENT':\n case 'ZERO_SELL_AMOUNT': {\n return (\n <>\n Your transaction has been refunded because the amount available\n didn’t match what the transaction required.\n </>\n )\n }\n case 'SIGNATURE_EXPIRED':\n case 'INVALID_SIGNATURE':\n case 'INVALID_NONCE':\n case 'INVALID_SENDER':\n case 'INVALID_SIGNER': {\n return (\n <>\n Your transaction has been refunded because there was a signature or\n authorization issue. Please try again.\n </>\n )\n }\n case 'ORDER_EXPIRED':\n case 'PROTOCOL_DEADLINE_EXPIRED': {\n return (\n <>\n Your transaction has been refunded because the order expired before\n it could be completed. Please try again.\n </>\n )\n }\n case 'ORDER_ALREADY_FILLED': {\n return (\n <>\n Your transaction has been refunded because the order was already\n filled by another transaction. This can happen when multiple\n transactions target the same order simultaneously.\n </>\n )\n }\n case 'ORDER_IS_CANCELLED': {\n return (\n <>\n Your transaction has been refunded because the order was canceled\n before it could be completed.\n </>\n )\n }\n case 'MINT_NOT_ACTIVE': {\n return (\n <>\n Your transaction has been refunded because the mint is not\n currently active. The mint may not have started yet or may have\n already ended.\n </>\n )\n }\n case 'SEAPORT_INEXACT_FRACTION':\n case 'SEAPORT_INVALID_FULFILLER': {\n return (\n <>\n Your transaction has been refunded because the marketplace order\n couldn’t be fulfilled.\n </>\n )\n }\n case 'ACCOUNT_ABSTRACTION_INVALID_NONCE':\n case 'ACCOUNT_ABSTRACTION_SIGNATURE_ERROR':\n case 'ACCOUNT_ABSTRACTION_GAS_LIMIT': {\n return (\n <>\n Your transaction has been refunded because there was an issue with\n your smart account operation. Please try again.\n </>\n )\n }\n case 'ERC_1155_TOO_MANY_REQUESTED':\n case 'MINT_QUANTITY_EXCEEDS_MAX_PER_WALLET':\n case 'MINT_QUANTITY_EXCEEDS_MAX_SUPPLY': {\n return (\n <>\n Your transaction has been refunded because the requested mint\n quantity exceeds what’s allowed for this collection.\n </>\n )\n }\n case 'MANUAL_ADMIN_REFUND': {\n return (\n <>\n Your transaction has been refunded manually by the Relay team.\n Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you have any further questions.{' '}\n </>\n )\n }\n case 'DEPOSIT_ADDRESS_MISMATCH': //@ts-ignore: legacy reason code (insufficient balance)\n case 'INSUFFICIENT_BALANCE_FOR_REFUND':\n case 'UNKNOWN':\n default: {\n return (\n <>\n It looks like an unknown issue occurred during the transaction.\n Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you have any further questions.{' '}\n </>\n )\n }\n }\n }\n}\n\nexport default RefundReason\n"]}
@@ -128,13 +128,12 @@ export const DepositAddressModalRenderer = ({ open, address, fromChain, fromToke
128
128
  const { data: executionStatus } = useDepositAddressStatus(depositAddress ? { depositAddress } : undefined, relayClient?.baseApiUrl, {
129
129
  enabled: depositAddress !== undefined && open,
130
130
  refetchInterval(query) {
131
- const observableStates = ['waiting', 'pending', 'depositing'];
132
- if (!query.state.data?.status ||
133
- (depositAddress &&
134
- observableStates.includes(query.state.data?.status))) {
135
- return 1000;
136
- }
137
- return 0;
131
+ // Keep polling until the request reaches a terminal state. Non-terminal
132
+ // states (waiting, pending, depositing, submitted) and an unknown
133
+ // status all continue polling.
134
+ const terminalStates = ['success', 'failure', 'refund'];
135
+ const status = query.state.data?.status;
136
+ return status && terminalStates.includes(status) ? 0 : 1000;
138
137
  }
139
138
  });
140
139
  useEffect(() => {
@@ -170,7 +169,9 @@ export const DepositAddressModalRenderer = ({ open, address, fromChain, fromToke
170
169
  setProgressStep(TransactionProgressStep.Success);
171
170
  invalidateBalanceQueries();
172
171
  }
173
- else if (executionStatus?.status === 'pending' || executionStatus?.status === 'depositing') {
172
+ else if (executionStatus?.status === 'pending' ||
173
+ executionStatus?.status === 'depositing' ||
174
+ executionStatus?.status === 'submitted') {
174
175
  const timeEstimateMs = ((quote?.details?.timeEstimate ?? 0) +
175
176
  (fromChain && fromChain.id === bitcoin.id ? 600 : 0)) *
176
177
  1000;
@@ -208,8 +209,7 @@ export const DepositAddressModalRenderer = ({ open, address, fromChain, fromToke
208
209
  progressStep === TransactionProgressStep.Error) &&
209
210
  allTxHashes[0]
210
211
  ? {
211
- user: address,
212
- hash: allTxHashes[0]?.txHash
212
+ term: allTxHashes[0]?.txHash
213
213
  }
214
214
  : undefined, relayClient?.baseApiUrl, {
215
215
  enabled: (progressStep === TransactionProgressStep.Success ||
@@ -1 +1 @@
1
- {"version":3,"file":"DepositAddressModalRenderer.js","sourceRoot":"","sources":["../../../../../src/components/common/TransactionModal/DepositAddressModalRenderer.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 useContext\n} from 'react'\nimport { parseUnits, type Address } from 'viem'\nimport {\n type AdaptedWallet,\n type Execute,\n type RelayChain\n} from '@relayprotocol/relay-sdk'\nimport {\n calculateFillTime,\n extractDepositRequestId\n} from '../../../utils/relayTransaction.js'\nimport type { Token } from '../../../types/index.js'\nimport {\n useRequests,\n useDepositAddressStatus,\n queryQuote,\n type DepositAddressStatusResponse\n} from '@relayprotocol/relay-kit-hooks'\nimport { useRelayClient } from '../../../hooks/index.js'\nimport { EventNames } from '../../../constants/events.js'\nimport { useHapticEvent } from '../../../providers/RelayKitProvider.js'\nimport { ProviderOptionsContext } from '../../../providers/RelayKitProvider.js'\nimport { useAccount } from 'wagmi'\nimport {\n calculatePriceTimeEstimate,\n extractDepositAddress,\n extractQuoteId\n} from '../../../utils/quote.js'\nimport { getDeadAddress } from '@relayprotocol/relay-sdk'\nimport { bitcoin } from '../../../utils/bitcoin.js'\nimport { errorToJSON } from '../../../utils/errors.js'\nimport { sha256 } from '../../../utils/hashing.js'\nimport { get15MinuteInterval } from '../../../utils/time.js'\n\nexport enum TransactionProgressStep {\n WaitingForDeposit,\n Validating,\n Success,\n Error\n}\n\nexport type TxHashes = { txHash: string; chainId: number }[]\n\nexport type ChildrenProps = {\n progressStep: TransactionProgressStep\n setProgressStep: Dispatch<SetStateAction<TransactionProgressStep>>\n quote?: Execute | null\n isFetchingQuote: boolean\n quoteError: Error | null\n swapError: Error | null\n setSwapError: Dispatch<SetStateAction<Error | null>>\n allTxHashes: TxHashes\n transaction?: ReturnType<typeof useRequests>['data']['0']\n seconds: number\n fillTime: string\n requestId: string | null\n depositAddress?: string\n executionStatus?: DepositAddressStatusResponse\n isLoadingTransaction: boolean\n toChain?: RelayChain | null\n timeEstimate?: { time: number; formattedTime: string }\n}\n\ntype Props = {\n open: boolean\n address?: string\n fromToken?: Token\n fromChain?: RelayChain\n toToken?: Token\n debouncedOutputAmountValue: string\n debouncedInputAmountValue: string\n recipient?: string\n customToAddress?: Address\n wallet?: AdaptedWallet\n invalidateBalanceQueries: () => void\n children: (props: ChildrenProps) => ReactNode\n onSuccess?: (\n quote?: Execute | null,\n executionStatus?: DepositAddressStatusResponse\n ) => void\n onAnalyticEvent?: (eventName: string, data?: any) => void\n onSwapError?: (error: string, data?: Execute) => void\n}\n\nexport const DepositAddressModalRenderer: FC<Props> = ({\n open,\n address,\n fromChain,\n fromToken,\n toToken,\n debouncedInputAmountValue,\n debouncedOutputAmountValue,\n recipient,\n invalidateBalanceQueries,\n children,\n onSuccess,\n onAnalyticEvent,\n onSwapError\n}) => {\n const haptic = useHapticEvent()\n const [quoteData, setQuoteData] = useState<Execute | null>(null)\n const [fetchingQuote, setFetchingQuote] = useState(false)\n const [quoteError, setQuoteError] = useState<Error | null>(null)\n const [progressStep, setProgressStep] = useState(\n TransactionProgressStep.WaitingForDeposit\n )\n const [swapError, setSwapError] = useState<Error | null>(null)\n\n const relayClient = useRelayClient()\n const providerOptionsContext = useContext(ProviderOptionsContext)\n const { connector } = useAccount()\n const deadAddress = getDeadAddress(fromChain?.vmType, fromChain?.id)\n\n const quote = fetchingQuote ? undefined : quoteData\n\n const requestId = useMemo(\n () => extractDepositRequestId(quote?.steps as Execute['steps']),\n [quote]\n )\n\n const depositAddress = useMemo(\n () => extractDepositAddress(quote?.steps as Execute['steps']),\n [quote]\n )\n\n useEffect(() => {\n if (!open) {\n if (quote) {\n onAnalyticEvent?.(EventNames.DEPOSIT_ADDRESS_MODAL_CLOSED)\n }\n setSwapError(null)\n setQuoteData(null)\n setFetchingQuote(false)\n setQuoteError(null)\n } else {\n setProgressStep(TransactionProgressStep.WaitingForDeposit)\n onAnalyticEvent?.(EventNames.DEPOSIT_ADDRESS_MODAL_OPEN)\n const quoteParameters: Parameters<typeof queryQuote>['1'] =\n fromToken && toToken\n ? {\n user: deadAddress,\n originChainId: fromToken.chainId,\n destinationChainId: toToken.chainId,\n originCurrency: fromToken.address,\n destinationCurrency: toToken.address,\n recipient: recipient as string,\n tradeType: 'EXACT_INPUT',\n appFees: providerOptionsContext.appFees,\n amount: parseUnits(\n debouncedInputAmountValue,\n fromToken.decimals\n ).toString(),\n referrer: relayClient?.source ?? undefined,\n useDepositAddress: true\n }\n : undefined\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...quoteParameters, interval })\n onAnalyticEvent?.(EventNames.QUOTE_REQUESTED, {\n parameters: quoteParameters,\n quote_request_id: quoteRequestId,\n chain_id_in: quoteParameters?.originChainId,\n chain_id_out: quoteParameters?.destinationChainId\n })\n queryQuote(relayClient?.baseApiUrl, quoteParameters, {\n headers: {\n 'relay-sdk-version': relayClient?.version ?? 'unknown',\n 'relay-kit-ui-version': relayClient?.uiVersion ?? 'unknown'\n }\n })\n .then((quote) => {\n setFetchingQuote(false)\n if (!open) {\n return\n }\n setQuoteData(quote as Execute)\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...quoteParameters, interval })\n onAnalyticEvent?.(EventNames.QUOTE_RECEIVED, {\n parameters: quoteParameters,\n wallet_connector: connector?.name,\n quote_id: quote.steps ? extractQuoteId(quote.steps) : undefined,\n quote_request_id: quoteRequestId,\n amount_in: quote.details?.currencyIn?.amountFormatted,\n amount_in_raw: quote.details?.currencyIn?.amount,\n currency_in: quote.details?.currencyIn?.currency?.symbol,\n chain_id_in: quote.details?.currencyIn?.currency?.chainId,\n amount_out: quote.details?.currencyOut?.amountFormatted,\n amount_out_raw: quote.details?.currencyOut?.amount,\n currency_out: quote.details?.currencyOut?.currency?.symbol,\n chain_id_out: quote.details?.currencyOut?.currency?.chainId,\n slippage_tolerance_destination_percentage:\n quote.details?.slippageTolerance?.destination?.percent,\n slippage_tolerance_origin_percentage:\n quote.details?.slippageTolerance?.origin?.percent,\n steps: quote.steps\n })\n })\n .catch((e) => {\n setFetchingQuote(false)\n if (!open) {\n return\n }\n const errorMessage = errorToJSON(\n e?.response?.data?.message\n ? new Error(e?.response?.data?.message)\n : e\n )\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...quoteParameters, interval })\n onAnalyticEvent?.(EventNames.QUOTE_ERROR, {\n wallet_connector: connector?.name,\n error_message: errorMessage,\n parameters: quoteParameters,\n quote_request_id: quoteRequestId\n })\n setQuoteError(e)\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const { data: executionStatus } = useDepositAddressStatus(\n depositAddress ? { depositAddress } : undefined,\n relayClient?.baseApiUrl,\n {\n enabled: depositAddress !== undefined && open,\n refetchInterval(query) {\n const observableStates = ['waiting', 'pending', 'depositing']\n\n if (\n !query.state.data?.status ||\n (depositAddress &&\n observableStates.includes(query.state.data?.status))\n ) {\n return 1000\n }\n return 0\n }\n }\n )\n\n useEffect(() => {\n if (\n executionStatus?.status === 'failure' ||\n executionStatus?.status === 'refund' ||\n quoteError\n ) {\n const swapError = new Error(\n executionStatus?.details ??\n 'Oops! Something went wrong while processing your transaction.'\n )\n if (progressStep !== TransactionProgressStep.Error) {\n onSwapError?.(swapError.message, quote as Execute)\n }\n setProgressStep(TransactionProgressStep.Error)\n haptic('error')\n onAnalyticEvent?.(EventNames.DEPOSIT_ADDRESS_SWAP_ERROR, {\n error_message: errorToJSON(executionStatus?.details ?? quoteError),\n wallet_connector: connector?.name,\n quote_id: requestId,\n amount_in: parseFloat(`${debouncedInputAmountValue}`),\n currency_in: fromToken?.symbol,\n chain_id_in: fromToken?.chainId,\n amount_out: parseFloat(`${debouncedOutputAmountValue}`),\n currency_out: toToken?.symbol,\n chain_id_out: toToken?.chainId,\n txHashes: executionStatus?.txHashes ?? []\n })\n setSwapError(swapError)\n invalidateBalanceQueries()\n } else if (executionStatus?.status === 'success') {\n if (progressStep !== TransactionProgressStep.Success) {\n onSuccess?.(quote, executionStatus)\n }\n setProgressStep(TransactionProgressStep.Success)\n invalidateBalanceQueries()\n } else if (executionStatus?.status === 'pending' || executionStatus?.status === 'depositing') {\n const timeEstimateMs =\n ((quote?.details?.timeEstimate ?? 0) +\n (fromChain && fromChain.id === bitcoin.id ? 600 : 0)) *\n 1000\n const isDelayedTx =\n timeEstimateMs >\n (relayClient?.maxPollingAttemptsBeforeTimeout ?? 30) *\n (relayClient?.pollingInterval ?? 5000)\n if (isDelayedTx) {\n setProgressStep(TransactionProgressStep.Success)\n } else {\n setProgressStep(TransactionProgressStep.Validating)\n }\n }\n }, [executionStatus?.status, quoteError])\n\n const allTxHashes = useMemo(() => {\n const isRefund = executionStatus?.status === 'refund'\n const _allTxHashes: TxHashes = []\n\n executionStatus?.txHashes?.forEach((txHash) => {\n _allTxHashes.push({\n txHash,\n chainId: isRefund\n ? (toToken?.chainId as number) // Fixed: refund txs are on destination chain\n : (toToken?.chainId as number)\n })\n })\n\n executionStatus?.inTxHashes?.forEach((txHash) => {\n _allTxHashes.push({\n txHash,\n chainId: fromToken?.chainId as number\n })\n })\n\n return _allTxHashes\n }, [executionStatus?.txHashes, executionStatus?.inTxHashes])\n\n const { data: transactions, isLoading: isLoadingTransaction } = useRequests(\n (progressStep === TransactionProgressStep.Success ||\n progressStep === TransactionProgressStep.Error) &&\n allTxHashes[0]\n ? {\n user: address,\n hash: allTxHashes[0]?.txHash\n }\n : undefined,\n relayClient?.baseApiUrl,\n {\n enabled:\n (progressStep === TransactionProgressStep.Success ||\n progressStep === TransactionProgressStep.Error) &&\n allTxHashes[0]\n ? true\n : false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchInterval: false,\n retryOnMount: false\n }\n )\n\n const transaction = transactions[0]\n\n const { fillTime, seconds } = calculateFillTime(transaction)\n const timeEstimate = calculatePriceTimeEstimate(quote?.details)\n const toChain = toToken?.chainId\n ? relayClient?.chains.find((chain) => chain.id === toToken?.chainId)\n : null\n\n return (\n <>\n {children({\n progressStep,\n setProgressStep,\n quote,\n isFetchingQuote: fetchingQuote,\n quoteError,\n swapError,\n setSwapError,\n allTxHashes,\n transaction,\n fillTime,\n seconds,\n requestId,\n depositAddress,\n executionStatus,\n isLoadingTransaction,\n toChain,\n timeEstimate\n })}\n </>\n )\n}\n"]}
1
+ {"version":3,"file":"DepositAddressModalRenderer.js","sourceRoot":"","sources":["../../../../../src/components/common/TransactionModal/DepositAddressModalRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAEL,OAAO,EACP,QAAQ,EACR,SAAS,EAIT,UAAU,EACX,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,UAAU,EAAgB,MAAM,MAAM,CAAA;AAC/C,OAAO,EAIN,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,oCAAoC,CAAA;AAE3C,OAAO,EACL,WAAW,EACX,uBAAuB,EACvB,UAAU,EAEX,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAA;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,cAAc,EACf,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAE5D,MAAM,CAAN,IAAY,uBAKX;AALD,WAAY,uBAAuB;IACjC,+FAAiB,CAAA;IACjB,iFAAU,CAAA;IACV,2EAAO,CAAA;IACP,uEAAK,CAAA;AACP,CAAC,EALW,uBAAuB,KAAvB,uBAAuB,QAKlC;AA6CD,MAAM,CAAC,MAAM,2BAA2B,GAAc,CAAC,EACrD,IAAI,EACJ,OAAO,EACP,SAAS,EACT,SAAS,EACT,OAAO,EACP,yBAAyB,EACzB,0BAA0B,EAC1B,SAAS,EACT,wBAAwB,EACxB,QAAQ,EACR,SAAS,EACT,eAAe,EACf,WAAW,EACZ,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAiB,IAAI,CAAC,CAAA;IAChE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACzD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAA;IAChE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAC9C,uBAAuB,CAAC,iBAAiB,CAC1C,CAAA;IACD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAA;IAE9D,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IACpC,MAAM,sBAAsB,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAA;IACjE,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAA;IAEpE,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;IAEnD,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAyB,CAAC,EAC/D,CAAC,KAAK,CAAC,CACR,CAAA;IAED,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAyB,CAAC,EAC7D,CAAC,KAAK,CAAC,CACR,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,KAAK,EAAE,CAAC;gBACV,eAAe,EAAE,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAA;YAC5D,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,CAAA;YAClB,YAAY,CAAC,IAAI,CAAC,CAAA;YAClB,gBAAgB,CAAC,KAAK,CAAC,CAAA;YACvB,aAAa,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,CAAA;YAC1D,eAAe,EAAE,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAA;YACxD,MAAM,eAAe,GACnB,SAAS,IAAI,OAAO;gBAClB,CAAC,CAAC;oBACE,IAAI,EAAE,WAAW;oBACjB,aAAa,EAAE,SAAS,CAAC,OAAO;oBAChC,kBAAkB,EAAE,OAAO,CAAC,OAAO;oBACnC,cAAc,EAAE,SAAS,CAAC,OAAO;oBACjC,mBAAmB,EAAE,OAAO,CAAC,OAAO;oBACpC,SAAS,EAAE,SAAmB;oBAC9B,SAAS,EAAE,aAAa;oBACxB,OAAO,EAAE,sBAAsB,CAAC,OAAO;oBACvC,MAAM,EAAE,UAAU,CAChB,yBAAyB,EACzB,SAAS,CAAC,QAAQ,CACnB,CAAC,QAAQ,EAAE;oBACZ,QAAQ,EAAE,WAAW,EAAE,MAAM,IAAI,SAAS;oBAC1C,iBAAiB,EAAE,IAAI;iBACxB;gBACH,CAAC,CAAC,SAAS,CAAA;YACf,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAA;YACtC,MAAM,cAAc,GAAG,MAAM,CAAC,EAAE,GAAG,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAA;YAC/D,eAAe,EAAE,CAAC,UAAU,CAAC,eAAe,EAAE;gBAC5C,UAAU,EAAE,eAAe;gBAC3B,gBAAgB,EAAE,cAAc;gBAChC,WAAW,EAAE,eAAe,EAAE,aAAa;gBAC3C,YAAY,EAAE,eAAe,EAAE,kBAAkB;aAClD,CAAC,CAAA;YACF,UAAU,CAAC,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE;gBACnD,OAAO,EAAE;oBACP,mBAAmB,EAAE,WAAW,EAAE,OAAO,IAAI,SAAS;oBACtD,sBAAsB,EAAE,WAAW,EAAE,SAAS,IAAI,SAAS;iBAC5D;aACF,CAAC;iBACC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBACd,gBAAgB,CAAC,KAAK,CAAC,CAAA;gBACvB,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAM;gBACR,CAAC;gBACD,YAAY,CAAC,KAAgB,CAAC,CAAA;gBAC9B,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAA;gBACtC,MAAM,cAAc,GAAG,MAAM,CAAC,EAAE,GAAG,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAA;gBAC/D,eAAe,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE;oBAC3C,UAAU,EAAE,eAAe;oBAC3B,gBAAgB,EAAE,SAAS,EAAE,IAAI;oBACjC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;oBAC/D,gBAAgB,EAAE,cAAc;oBAChC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,eAAe;oBACrD,aAAa,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM;oBAChD,WAAW,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM;oBACxD,WAAW,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO;oBACzD,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,eAAe;oBACvD,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM;oBAClD,YAAY,EAAE,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM;oBAC1D,YAAY,EAAE,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO;oBAC3D,yCAAyC,EACvC,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO;oBACxD,oCAAoC,EAClC,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO;oBACnD,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB,CAAC,CAAA;YACJ,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACX,gBAAgB,CAAC,KAAK,CAAC,CAAA;gBACvB,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAM;gBACR,CAAC;gBACD,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO;oBACxB,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC;oBACvC,CAAC,CAAC,CAAC,CACN,CAAA;gBACD,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAA;gBACtC,MAAM,cAAc,GAAG,MAAM,CAAC,EAAE,GAAG,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAA;gBAC/D,eAAe,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE;oBACxC,gBAAgB,EAAE,SAAS,EAAE,IAAI;oBACjC,aAAa,EAAE,YAAY;oBAC3B,UAAU,EAAE,eAAe;oBAC3B,gBAAgB,EAAE,cAAc;iBACjC,CAAC,CAAA;gBACF,aAAa,CAAC,CAAC,CAAC,CAAA;YAClB,CAAC,CAAC,CAAA;QACN,CAAC;QACD,uDAAuD;IACzD,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,uBAAuB,CACvD,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,EAC/C,WAAW,EAAE,UAAU,EACvB;QACE,OAAO,EAAE,cAAc,KAAK,SAAS,IAAI,IAAI;QAC7C,eAAe,CAAC,KAAK;YACnB,wEAAwE;YACxE,kEAAkE;YAClE,+BAA+B;YAC/B,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;YACvD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAA;YACvC,OAAO,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC7D,CAAC;KACF,CACF,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,IACE,eAAe,EAAE,MAAM,KAAK,SAAS;YACrC,eAAe,EAAE,MAAM,KAAK,QAAQ;YACpC,UAAU,EACV,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,KAAK,CACzB,eAAe,EAAE,OAAO;gBACtB,+DAA+D,CAClE,CAAA;YACD,IAAI,YAAY,KAAK,uBAAuB,CAAC,KAAK,EAAE,CAAC;gBACnD,WAAW,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,KAAgB,CAAC,CAAA;YACpD,CAAC;YACD,eAAe,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAA;YAC9C,MAAM,CAAC,OAAO,CAAC,CAAA;YACf,eAAe,EAAE,CAAC,UAAU,CAAC,0BAA0B,EAAE;gBACvD,aAAa,EAAE,WAAW,CAAC,eAAe,EAAE,OAAO,IAAI,UAAU,CAAC;gBAClE,gBAAgB,EAAE,SAAS,EAAE,IAAI;gBACjC,QAAQ,EAAE,SAAS;gBACnB,SAAS,EAAE,UAAU,CAAC,GAAG,yBAAyB,EAAE,CAAC;gBACrD,WAAW,EAAE,SAAS,EAAE,MAAM;gBAC9B,WAAW,EAAE,SAAS,EAAE,OAAO;gBAC/B,UAAU,EAAE,UAAU,CAAC,GAAG,0BAA0B,EAAE,CAAC;gBACvD,YAAY,EAAE,OAAO,EAAE,MAAM;gBAC7B,YAAY,EAAE,OAAO,EAAE,OAAO;gBAC9B,QAAQ,EAAE,eAAe,EAAE,QAAQ,IAAI,EAAE;aAC1C,CAAC,CAAA;YACF,YAAY,CAAC,SAAS,CAAC,CAAA;YACvB,wBAAwB,EAAE,CAAA;QAC5B,CAAC;aAAM,IAAI,eAAe,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;YACjD,IAAI,YAAY,KAAK,uBAAuB,CAAC,OAAO,EAAE,CAAC;gBACrD,SAAS,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;YACrC,CAAC;YACD,eAAe,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAA;YAChD,wBAAwB,EAAE,CAAA;QAC5B,CAAC;aAAM,IACL,eAAe,EAAE,MAAM,KAAK,SAAS;YACrC,eAAe,EAAE,MAAM,KAAK,YAAY;YACxC,eAAe,EAAE,MAAM,KAAK,WAAW,EACvC,CAAC;YACD,MAAM,cAAc,GAClB,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,IAAI,CAAC,CAAC;gBAClC,CAAC,SAAS,IAAI,SAAS,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvD,IAAI,CAAA;YACN,MAAM,WAAW,GACf,cAAc;gBACd,CAAC,WAAW,EAAE,+BAA+B,IAAI,EAAE,CAAC;oBAClD,CAAC,WAAW,EAAE,eAAe,IAAI,IAAI,CAAC,CAAA;YAC1C,IAAI,WAAW,EAAE,CAAC;gBAChB,eAAe,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAA;YAClD,CAAC;iBAAM,CAAC;gBACN,eAAe,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAA;YACrD,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;IAEzC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/B,MAAM,QAAQ,GAAG,eAAe,EAAE,MAAM,KAAK,QAAQ,CAAA;QACrD,MAAM,YAAY,GAAa,EAAE,CAAA;QAEjC,eAAe,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC5C,YAAY,CAAC,IAAI,CAAC;gBAChB,MAAM;gBACN,OAAO,EAAE,QAAQ;oBACf,CAAC,CAAE,OAAO,EAAE,OAAkB,CAAC,6CAA6C;oBAC5E,CAAC,CAAE,OAAO,EAAE,OAAkB;aACjC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,eAAe,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9C,YAAY,CAAC,IAAI,CAAC;gBAChB,MAAM;gBACN,OAAO,EAAE,SAAS,EAAE,OAAiB;aACtC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,OAAO,YAAY,CAAA;IACrB,CAAC,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC,CAAA;IAE5D,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,oBAAoB,EAAE,GAAG,WAAW,CACzE,CAAC,YAAY,KAAK,uBAAuB,CAAC,OAAO;QAC/C,YAAY,KAAK,uBAAuB,CAAC,KAAK,CAAC;QAC/C,WAAW,CAAC,CAAC,CAAC;QACd,CAAC,CAAC;YACE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM;SAC7B;QACH,CAAC,CAAC,SAAS,EACb,WAAW,EAAE,UAAU,EACvB;QACE,OAAO,EACL,CAAC,YAAY,KAAK,uBAAuB,CAAC,OAAO;YAC/C,YAAY,KAAK,uBAAuB,CAAC,KAAK,CAAC;YACjD,WAAW,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,KAAK;QACX,oBAAoB,EAAE,KAAK;QAC3B,kBAAkB,EAAE,KAAK;QACzB,eAAe,EAAE,KAAK;QACtB,YAAY,EAAE,KAAK;KACpB,CACF,CAAA;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;IAEnC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAA;IAC5D,MAAM,YAAY,GAAG,0BAA0B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC/D,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO;QAC9B,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,EAAE,OAAO,CAAC;QACpE,CAAC,CAAC,IAAI,CAAA;IAER,OAAO,CACL,4BACG,QAAQ,CAAC;YACR,YAAY;YACZ,eAAe;YACf,KAAK;YACL,eAAe,EAAE,aAAa;YAC9B,UAAU;YACV,SAAS;YACT,YAAY;YACZ,WAAW;YACX,WAAW;YACX,QAAQ;YACR,OAAO;YACP,SAAS;YACT,cAAc;YACd,eAAe;YACf,oBAAoB;YACpB,OAAO;YACP,YAAY;SACb,CAAC,GACD,CACJ,CAAA;AACH,CAAC,CAAA","sourcesContent":["import {\n type FC,\n useMemo,\n useState,\n useEffect,\n type ReactNode,\n type SetStateAction,\n type Dispatch,\n useContext\n} from 'react'\nimport { parseUnits, type Address } from 'viem'\nimport {\n type AdaptedWallet,\n type Execute,\n type RelayChain\n} from '@relayprotocol/relay-sdk'\nimport {\n calculateFillTime,\n extractDepositRequestId\n} from '../../../utils/relayTransaction.js'\nimport type { Token } from '../../../types/index.js'\nimport {\n useRequests,\n useDepositAddressStatus,\n queryQuote,\n type DepositAddressStatusResponse\n} from '@relayprotocol/relay-kit-hooks'\nimport { useRelayClient } from '../../../hooks/index.js'\nimport { EventNames } from '../../../constants/events.js'\nimport { useHapticEvent } from '../../../providers/RelayKitProvider.js'\nimport { ProviderOptionsContext } from '../../../providers/RelayKitProvider.js'\nimport { useAccount } from 'wagmi'\nimport {\n calculatePriceTimeEstimate,\n extractDepositAddress,\n extractQuoteId\n} from '../../../utils/quote.js'\nimport { getDeadAddress } from '@relayprotocol/relay-sdk'\nimport { bitcoin } from '../../../utils/bitcoin.js'\nimport { errorToJSON } from '../../../utils/errors.js'\nimport { sha256 } from '../../../utils/hashing.js'\nimport { get15MinuteInterval } from '../../../utils/time.js'\n\nexport enum TransactionProgressStep {\n WaitingForDeposit,\n Validating,\n Success,\n Error\n}\n\nexport type TxHashes = { txHash: string; chainId: number }[]\n\nexport type ChildrenProps = {\n progressStep: TransactionProgressStep\n setProgressStep: Dispatch<SetStateAction<TransactionProgressStep>>\n quote?: Execute | null\n isFetchingQuote: boolean\n quoteError: Error | null\n swapError: Error | null\n setSwapError: Dispatch<SetStateAction<Error | null>>\n allTxHashes: TxHashes\n transaction?: ReturnType<typeof useRequests>['data']['0']\n seconds: number\n fillTime: string\n requestId: string | null\n depositAddress?: string\n executionStatus?: DepositAddressStatusResponse\n isLoadingTransaction: boolean\n toChain?: RelayChain | null\n timeEstimate?: { time: number; formattedTime: string }\n}\n\ntype Props = {\n open: boolean\n address?: string\n fromToken?: Token\n fromChain?: RelayChain\n toToken?: Token\n debouncedOutputAmountValue: string\n debouncedInputAmountValue: string\n recipient?: string\n customToAddress?: Address\n wallet?: AdaptedWallet\n invalidateBalanceQueries: () => void\n children: (props: ChildrenProps) => ReactNode\n onSuccess?: (\n quote?: Execute | null,\n executionStatus?: DepositAddressStatusResponse\n ) => void\n onAnalyticEvent?: (eventName: string, data?: any) => void\n onSwapError?: (error: string, data?: Execute) => void\n}\n\nexport const DepositAddressModalRenderer: FC<Props> = ({\n open,\n address,\n fromChain,\n fromToken,\n toToken,\n debouncedInputAmountValue,\n debouncedOutputAmountValue,\n recipient,\n invalidateBalanceQueries,\n children,\n onSuccess,\n onAnalyticEvent,\n onSwapError\n}) => {\n const haptic = useHapticEvent()\n const [quoteData, setQuoteData] = useState<Execute | null>(null)\n const [fetchingQuote, setFetchingQuote] = useState(false)\n const [quoteError, setQuoteError] = useState<Error | null>(null)\n const [progressStep, setProgressStep] = useState(\n TransactionProgressStep.WaitingForDeposit\n )\n const [swapError, setSwapError] = useState<Error | null>(null)\n\n const relayClient = useRelayClient()\n const providerOptionsContext = useContext(ProviderOptionsContext)\n const { connector } = useAccount()\n const deadAddress = getDeadAddress(fromChain?.vmType, fromChain?.id)\n\n const quote = fetchingQuote ? undefined : quoteData\n\n const requestId = useMemo(\n () => extractDepositRequestId(quote?.steps as Execute['steps']),\n [quote]\n )\n\n const depositAddress = useMemo(\n () => extractDepositAddress(quote?.steps as Execute['steps']),\n [quote]\n )\n\n useEffect(() => {\n if (!open) {\n if (quote) {\n onAnalyticEvent?.(EventNames.DEPOSIT_ADDRESS_MODAL_CLOSED)\n }\n setSwapError(null)\n setQuoteData(null)\n setFetchingQuote(false)\n setQuoteError(null)\n } else {\n setProgressStep(TransactionProgressStep.WaitingForDeposit)\n onAnalyticEvent?.(EventNames.DEPOSIT_ADDRESS_MODAL_OPEN)\n const quoteParameters: Parameters<typeof queryQuote>['1'] =\n fromToken && toToken\n ? {\n user: deadAddress,\n originChainId: fromToken.chainId,\n destinationChainId: toToken.chainId,\n originCurrency: fromToken.address,\n destinationCurrency: toToken.address,\n recipient: recipient as string,\n tradeType: 'EXACT_INPUT',\n appFees: providerOptionsContext.appFees,\n amount: parseUnits(\n debouncedInputAmountValue,\n fromToken.decimals\n ).toString(),\n referrer: relayClient?.source ?? undefined,\n useDepositAddress: true\n }\n : undefined\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...quoteParameters, interval })\n onAnalyticEvent?.(EventNames.QUOTE_REQUESTED, {\n parameters: quoteParameters,\n quote_request_id: quoteRequestId,\n chain_id_in: quoteParameters?.originChainId,\n chain_id_out: quoteParameters?.destinationChainId\n })\n queryQuote(relayClient?.baseApiUrl, quoteParameters, {\n headers: {\n 'relay-sdk-version': relayClient?.version ?? 'unknown',\n 'relay-kit-ui-version': relayClient?.uiVersion ?? 'unknown'\n }\n })\n .then((quote) => {\n setFetchingQuote(false)\n if (!open) {\n return\n }\n setQuoteData(quote as Execute)\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...quoteParameters, interval })\n onAnalyticEvent?.(EventNames.QUOTE_RECEIVED, {\n parameters: quoteParameters,\n wallet_connector: connector?.name,\n quote_id: quote.steps ? extractQuoteId(quote.steps) : undefined,\n quote_request_id: quoteRequestId,\n amount_in: quote.details?.currencyIn?.amountFormatted,\n amount_in_raw: quote.details?.currencyIn?.amount,\n currency_in: quote.details?.currencyIn?.currency?.symbol,\n chain_id_in: quote.details?.currencyIn?.currency?.chainId,\n amount_out: quote.details?.currencyOut?.amountFormatted,\n amount_out_raw: quote.details?.currencyOut?.amount,\n currency_out: quote.details?.currencyOut?.currency?.symbol,\n chain_id_out: quote.details?.currencyOut?.currency?.chainId,\n slippage_tolerance_destination_percentage:\n quote.details?.slippageTolerance?.destination?.percent,\n slippage_tolerance_origin_percentage:\n quote.details?.slippageTolerance?.origin?.percent,\n steps: quote.steps\n })\n })\n .catch((e) => {\n setFetchingQuote(false)\n if (!open) {\n return\n }\n const errorMessage = errorToJSON(\n e?.response?.data?.message\n ? new Error(e?.response?.data?.message)\n : e\n )\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...quoteParameters, interval })\n onAnalyticEvent?.(EventNames.QUOTE_ERROR, {\n wallet_connector: connector?.name,\n error_message: errorMessage,\n parameters: quoteParameters,\n quote_request_id: quoteRequestId\n })\n setQuoteError(e)\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const { data: executionStatus } = useDepositAddressStatus(\n depositAddress ? { depositAddress } : undefined,\n relayClient?.baseApiUrl,\n {\n enabled: depositAddress !== undefined && open,\n refetchInterval(query) {\n // Keep polling until the request reaches a terminal state. Non-terminal\n // states (waiting, pending, depositing, submitted) and an unknown\n // status all continue polling.\n const terminalStates = ['success', 'failure', 'refund']\n const status = query.state.data?.status\n return status && terminalStates.includes(status) ? 0 : 1000\n }\n }\n )\n\n useEffect(() => {\n if (\n executionStatus?.status === 'failure' ||\n executionStatus?.status === 'refund' ||\n quoteError\n ) {\n const swapError = new Error(\n executionStatus?.details ??\n 'Oops! Something went wrong while processing your transaction.'\n )\n if (progressStep !== TransactionProgressStep.Error) {\n onSwapError?.(swapError.message, quote as Execute)\n }\n setProgressStep(TransactionProgressStep.Error)\n haptic('error')\n onAnalyticEvent?.(EventNames.DEPOSIT_ADDRESS_SWAP_ERROR, {\n error_message: errorToJSON(executionStatus?.details ?? quoteError),\n wallet_connector: connector?.name,\n quote_id: requestId,\n amount_in: parseFloat(`${debouncedInputAmountValue}`),\n currency_in: fromToken?.symbol,\n chain_id_in: fromToken?.chainId,\n amount_out: parseFloat(`${debouncedOutputAmountValue}`),\n currency_out: toToken?.symbol,\n chain_id_out: toToken?.chainId,\n txHashes: executionStatus?.txHashes ?? []\n })\n setSwapError(swapError)\n invalidateBalanceQueries()\n } else if (executionStatus?.status === 'success') {\n if (progressStep !== TransactionProgressStep.Success) {\n onSuccess?.(quote, executionStatus)\n }\n setProgressStep(TransactionProgressStep.Success)\n invalidateBalanceQueries()\n } else if (\n executionStatus?.status === 'pending' ||\n executionStatus?.status === 'depositing' ||\n executionStatus?.status === 'submitted'\n ) {\n const timeEstimateMs =\n ((quote?.details?.timeEstimate ?? 0) +\n (fromChain && fromChain.id === bitcoin.id ? 600 : 0)) *\n 1000\n const isDelayedTx =\n timeEstimateMs >\n (relayClient?.maxPollingAttemptsBeforeTimeout ?? 30) *\n (relayClient?.pollingInterval ?? 5000)\n if (isDelayedTx) {\n setProgressStep(TransactionProgressStep.Success)\n } else {\n setProgressStep(TransactionProgressStep.Validating)\n }\n }\n }, [executionStatus?.status, quoteError])\n\n const allTxHashes = useMemo(() => {\n const isRefund = executionStatus?.status === 'refund'\n const _allTxHashes: TxHashes = []\n\n executionStatus?.txHashes?.forEach((txHash) => {\n _allTxHashes.push({\n txHash,\n chainId: isRefund\n ? (toToken?.chainId as number) // Fixed: refund txs are on destination chain\n : (toToken?.chainId as number)\n })\n })\n\n executionStatus?.inTxHashes?.forEach((txHash) => {\n _allTxHashes.push({\n txHash,\n chainId: fromToken?.chainId as number\n })\n })\n\n return _allTxHashes\n }, [executionStatus?.txHashes, executionStatus?.inTxHashes])\n\n const { data: transactions, isLoading: isLoadingTransaction } = useRequests(\n (progressStep === TransactionProgressStep.Success ||\n progressStep === TransactionProgressStep.Error) &&\n allTxHashes[0]\n ? {\n term: allTxHashes[0]?.txHash\n }\n : undefined,\n relayClient?.baseApiUrl,\n {\n enabled:\n (progressStep === TransactionProgressStep.Success ||\n progressStep === TransactionProgressStep.Error) &&\n allTxHashes[0]\n ? true\n : false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchInterval: false,\n retryOnMount: false\n }\n )\n\n const transaction = transactions[0]\n\n const { fillTime, seconds } = calculateFillTime(transaction)\n const timeEstimate = calculatePriceTimeEstimate(quote?.details)\n const toChain = toToken?.chainId\n ? relayClient?.chains.find((chain) => chain.id === toToken?.chainId)\n : null\n\n return (\n <>\n {children({\n progressStep,\n setProgressStep,\n quote,\n isFetchingQuote: fetchingQuote,\n quoteError,\n swapError,\n setSwapError,\n allTxHashes,\n transaction,\n fillTime,\n seconds,\n requestId,\n depositAddress,\n executionStatus,\n isLoadingTransaction,\n toChain,\n timeEstimate\n })}\n </>\n )\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { Anchor, Button, Flex, Text } from '../../../primitives/index.js';
3
3
  import { LoadingSpinner } from '../../LoadingSpinner.js';
4
- import { useExecutionStatus } from '@relayprotocol/relay-kit-hooks';
4
+ import { useDepositAddressStatus } from '@relayprotocol/relay-kit-hooks';
5
5
  import { useRelayClient } from '../../../../hooks/index.js';
6
6
  export const DepositAddressValidatingStep = ({ txHashes, status }) => {
7
7
  const relayClient = useRelayClient();
@@ -1 +1 @@
1
- {"version":3,"file":"DepositAddressValidatingStep.js","sourceRoot":"","sources":["../../../../../../src/components/common/TransactionModal/steps/DepositAddressValidatingStep.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAO3D,MAAM,CAAC,MAAM,4BAA4B,GAErC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;IAC3B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IACpC,MAAM,kBAAkB,GACtB,WAAW,EAAE,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;QACnE,CAAC,CAAC,6BAA6B;QAC/B,CAAC,CAAC,oBAAoB,CAAA;IAC1B,MAAM,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAEhE,OAAO,CACL,8BACE,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,aACvD,KAAC,cAAc,IACb,SAAS,EAAC,sEAAsE,GAChF,EACF,KAAC,IAAI,IAAC,KAAK,EAAC,WAAW,EAAC,SAAS,EAAC,yCAAyC,qEAEpE,EACP,MAAC,IAAI,IACH,KAAK,EAAC,QAAQ,EACd,KAAK,EAAC,OAAO,EACb,SAAS,EAAC,8BAA8B,uFAE+B,GAAG,EAC1E,MAAC,MAAM,IACL,IAAI,EAAE,GAAG,kBAAkB,gBAAgB,MAAM,EAAE,EACnD,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,UAAU,aAEb,GAAG,wBAEG,SAEJ,IACF,EACP,MAAC,MAAM,IACL,QAAQ,EAAE,IAAI,EACd,SAAS,EAAC,yGAAyG,aAEnH,KAAC,cAAc,IACb,SAAS,EAAC,4EAA4E,GACtF,8BAEK,IACR,CACJ,CAAA;AACH,CAAC,CAAA","sourcesContent":["import type { FC } from 'react'\nimport { Anchor, Button, Flex, Text } from '../../../primitives/index.js'\nimport { LoadingSpinner } from '../../LoadingSpinner.js'\nimport { useExecutionStatus } from '@relayprotocol/relay-kit-hooks'\nimport { useRelayClient } from '../../../../hooks/index.js'\n\ntype DepositAddressValidatingStepProps = {\n txHashes: string[]\n status: NonNullable<ReturnType<typeof useExecutionStatus>['data']>['status']\n}\n\nexport const DepositAddressValidatingStep: FC<\n DepositAddressValidatingStepProps\n> = ({ txHashes, status }) => {\n const relayClient = useRelayClient()\n const transactionBaseUrl =\n relayClient?.baseApiUrl && relayClient.baseApiUrl.includes('testnet')\n ? 'https://testnets.relay.link'\n : 'https://relay.link'\n const txHash = txHashes && txHashes[0] ? txHashes[0] : undefined\n\n return (\n <>\n <Flex direction=\"column\" align=\"center\" justify=\"between\">\n <LoadingSpinner\n className=\"relay:h-10 relay:w-10 relay:fill-[var(--relay-colors-primary-color)]\"\n />\n <Text style=\"subtitle2\" className=\"relay:mt-4 relay:mb-2 relay:text-center\">\n Funds received. Your transaction is now in progress.\n </Text>\n <Text\n color=\"subtle\"\n style=\"body2\"\n className=\"relay:mt-3 relay:text-center\"\n >\n Feel free to leave at any time, you can track your progress within the{' '}\n <Anchor\n href={`${transactionBaseUrl}/transaction/${txHash}`}\n target=\"_blank\"\n rel=\"noreffer\"\n >\n {' '}\n transaction page\n </Anchor>\n .\n </Text>\n </Flex>\n <Button\n disabled={true}\n className=\"relay:text-[color:var(--relay-colors-button-disabled-color)_!important] relay:mt-2 relay:justify-center\"\n >\n <LoadingSpinner\n className=\"relay:h-4 relay:w-4 relay:fill-[var(--relay-colors-button-disabled-color)]\"\n />\n Validating Transaction\n </Button>\n </>\n )\n}\n"]}
1
+ {"version":3,"file":"DepositAddressValidatingStep.js","sourceRoot":"","sources":["../../../../../../src/components/common/TransactionModal/steps/DepositAddressValidatingStep.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAS3D,MAAM,CAAC,MAAM,4BAA4B,GAErC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;IAC3B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IACpC,MAAM,kBAAkB,GACtB,WAAW,EAAE,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;QACnE,CAAC,CAAC,6BAA6B;QAC/B,CAAC,CAAC,oBAAoB,CAAA;IAC1B,MAAM,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAEhE,OAAO,CACL,8BACE,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,aACvD,KAAC,cAAc,IACb,SAAS,EAAC,sEAAsE,GAChF,EACF,KAAC,IAAI,IAAC,KAAK,EAAC,WAAW,EAAC,SAAS,EAAC,yCAAyC,qEAEpE,EACP,MAAC,IAAI,IACH,KAAK,EAAC,QAAQ,EACd,KAAK,EAAC,OAAO,EACb,SAAS,EAAC,8BAA8B,uFAE+B,GAAG,EAC1E,MAAC,MAAM,IACL,IAAI,EAAE,GAAG,kBAAkB,gBAAgB,MAAM,EAAE,EACnD,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,UAAU,aAEb,GAAG,wBAEG,SAEJ,IACF,EACP,MAAC,MAAM,IACL,QAAQ,EAAE,IAAI,EACd,SAAS,EAAC,yGAAyG,aAEnH,KAAC,cAAc,IACb,SAAS,EAAC,4EAA4E,GACtF,8BAEK,IACR,CACJ,CAAA;AACH,CAAC,CAAA","sourcesContent":["import type { FC } from 'react'\nimport { Anchor, Button, Flex, Text } from '../../../primitives/index.js'\nimport { LoadingSpinner } from '../../LoadingSpinner.js'\nimport { useDepositAddressStatus } from '@relayprotocol/relay-kit-hooks'\nimport { useRelayClient } from '../../../../hooks/index.js'\n\ntype DepositAddressValidatingStepProps = {\n txHashes: string[]\n status: NonNullable<\n ReturnType<typeof useDepositAddressStatus>['data']\n >['status']\n}\n\nexport const DepositAddressValidatingStep: FC<\n DepositAddressValidatingStepProps\n> = ({ txHashes, status }) => {\n const relayClient = useRelayClient()\n const transactionBaseUrl =\n relayClient?.baseApiUrl && relayClient.baseApiUrl.includes('testnet')\n ? 'https://testnets.relay.link'\n : 'https://relay.link'\n const txHash = txHashes && txHashes[0] ? txHashes[0] : undefined\n\n return (\n <>\n <Flex direction=\"column\" align=\"center\" justify=\"between\">\n <LoadingSpinner\n className=\"relay:h-10 relay:w-10 relay:fill-[var(--relay-colors-primary-color)]\"\n />\n <Text style=\"subtitle2\" className=\"relay:mt-4 relay:mb-2 relay:text-center\">\n Funds received. Your transaction is now in progress.\n </Text>\n <Text\n color=\"subtle\"\n style=\"body2\"\n className=\"relay:mt-3 relay:text-center\"\n >\n Feel free to leave at any time, you can track your progress within the{' '}\n <Anchor\n href={`${transactionBaseUrl}/transaction/${txHash}`}\n target=\"_blank\"\n rel=\"noreffer\"\n >\n {' '}\n transaction page\n </Anchor>\n .\n </Text>\n </Flex>\n <Button\n disabled={true}\n className=\"relay:text-[color:var(--relay-colors-button-disabled-color)_!important] relay:mt-2 relay:justify-center\"\n >\n <LoadingSpinner\n className=\"relay:h-4 relay:w-4 relay:fill-[var(--relay-colors-button-disabled-color)]\"\n />\n Validating Transaction\n </Button>\n </>\n )\n}\n"]}
@@ -36,7 +36,7 @@ export const ErrorStep = ({ error, address, allTxHashes, transaction, fromChain,
36
36
  transaction.data?.outTxs &&
37
37
  transaction.data.outTxs.length > 0) {
38
38
  fillTx = {
39
- txHash: transaction.data.outTxs[0].hash,
39
+ txHash: transaction.data.outTxs[0].txHash,
40
40
  chainId: transaction.data.outTxs[0].chainId
41
41
  };
42
42
  }
@@ -56,7 +56,7 @@ export const ErrorStep = ({ error, address, allTxHashes, transaction, fromChain,
56
56
  const isWithdrawable = Boolean(transaction?.protocol?.isWithdrawable);
57
57
  const depositOrigin = transaction?.protocol?.deposit?.origin;
58
58
  const inTx = transaction?.data?.inTxs?.[0];
59
- const withdrawTxHash = depositOrigin?.transactionId ?? inTx?.hash;
59
+ const withdrawTxHash = depositOrigin?.transactionId ?? inTx?.txHash;
60
60
  const withdrawChainId = depositOrigin?.chainId ?? inTx?.chainId;
61
61
  const showWithdrawLink = !isRefund && isWithdrawable && withdrawTxHash && withdrawChainId;
62
62
  const withdrawHref = showWithdrawLink