@relayprotocol/relay-kit-ui 10.0.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) 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/TokenSelector/PaymentMethod.js +9 -9
  6. package/_cjs/src/components/common/TokenSelector/PaymentMethod.js.map +1 -1
  7. package/_cjs/src/components/common/TokenSelector/TokenSelector.js +8 -8
  8. package/_cjs/src/components/common/TokenSelector/TokenSelector.js.map +1 -1
  9. package/_cjs/src/components/primitives/ChainIcon.js +2 -1
  10. package/_cjs/src/components/primitives/ChainIcon.js.map +1 -1
  11. package/_cjs/src/components/primitives/ChainTokenIcon.js +6 -2
  12. package/_cjs/src/components/primitives/ChainTokenIcon.js.map +1 -1
  13. package/_cjs/src/components/widgets/OnrampWidget/widget/index.js +1 -1
  14. package/_cjs/src/components/widgets/OnrampWidget/widget/index.js.map +1 -1
  15. package/_cjs/src/components/widgets/SwapWidgetRenderer.js +23 -42
  16. package/_cjs/src/components/widgets/SwapWidgetRenderer.js.map +1 -1
  17. package/_cjs/src/components/widgets/WidgetContainer.js +1 -1
  18. package/_cjs/src/components/widgets/WidgetContainer.js.map +1 -1
  19. package/_cjs/src/constants/events.js +2 -1
  20. package/_cjs/src/constants/events.js.map +1 -1
  21. package/_cjs/src/constants/walletCompatibility.js +3 -1
  22. package/_cjs/src/constants/walletCompatibility.js.map +1 -1
  23. package/_cjs/src/hooks/index.js +7 -3
  24. package/_cjs/src/hooks/index.js.map +1 -1
  25. package/_cjs/src/hooks/useCodexBalances.js +305 -0
  26. package/_cjs/src/hooks/useCodexBalances.js.map +1 -0
  27. package/_cjs/src/hooks/useCurrencyBalance.js +18 -74
  28. package/_cjs/src/hooks/useCurrencyBalance.js.map +1 -1
  29. package/_cjs/src/hooks/useEnhancedTokensList.js.map +1 -1
  30. package/_cjs/src/hooks/useKnownTokenContract.js +45 -0
  31. package/_cjs/src/hooks/useKnownTokenContract.js.map +1 -0
  32. package/_cjs/src/hooks/useMultiWalletBalances.js +19 -37
  33. package/_cjs/src/hooks/useMultiWalletBalances.js.map +1 -1
  34. package/_cjs/src/hooks/useSolanaBalance.js +60 -0
  35. package/_cjs/src/hooks/useSolanaBalance.js.map +1 -0
  36. package/_cjs/src/providers/RelayKitProvider.js +1 -1
  37. package/_cjs/src/providers/RelayKitProvider.js.map +1 -1
  38. package/_cjs/src/version.js +1 -1
  39. package/_cjs/src/version.js.map +1 -1
  40. package/_cjs/tsconfig.build.tsbuildinfo +1 -1
  41. package/_esm/src/components/common/CustomAddressModal.js +24 -10
  42. package/_esm/src/components/common/CustomAddressModal.js.map +1 -1
  43. package/_esm/src/components/common/RefundReason.js +107 -4
  44. package/_esm/src/components/common/RefundReason.js.map +1 -1
  45. package/_esm/src/components/common/TokenSelector/PaymentMethod.js +9 -9
  46. package/_esm/src/components/common/TokenSelector/PaymentMethod.js.map +1 -1
  47. package/_esm/src/components/common/TokenSelector/TokenSelector.js +10 -10
  48. package/_esm/src/components/common/TokenSelector/TokenSelector.js.map +1 -1
  49. package/_esm/src/components/primitives/ChainIcon.js +3 -2
  50. package/_esm/src/components/primitives/ChainIcon.js.map +1 -1
  51. package/_esm/src/components/primitives/ChainTokenIcon.js +6 -3
  52. package/_esm/src/components/primitives/ChainTokenIcon.js.map +1 -1
  53. package/_esm/src/components/widgets/OnrampWidget/widget/index.js +1 -1
  54. package/_esm/src/components/widgets/OnrampWidget/widget/index.js.map +1 -1
  55. package/_esm/src/components/widgets/SwapWidgetRenderer.js +28 -46
  56. package/_esm/src/components/widgets/SwapWidgetRenderer.js.map +1 -1
  57. package/_esm/src/components/widgets/WidgetContainer.js +1 -1
  58. package/_esm/src/components/widgets/WidgetContainer.js.map +1 -1
  59. package/_esm/src/constants/events.js +2 -1
  60. package/_esm/src/constants/events.js.map +1 -1
  61. package/_esm/src/constants/walletCompatibility.js +3 -1
  62. package/_esm/src/constants/walletCompatibility.js.map +1 -1
  63. package/_esm/src/hooks/index.js +4 -2
  64. package/_esm/src/hooks/index.js.map +1 -1
  65. package/_esm/src/hooks/useCodexBalances.js +311 -0
  66. package/_esm/src/hooks/useCodexBalances.js.map +1 -0
  67. package/_esm/src/hooks/useCurrencyBalance.js +18 -74
  68. package/_esm/src/hooks/useCurrencyBalance.js.map +1 -1
  69. package/_esm/src/hooks/useEnhancedTokensList.js.map +1 -1
  70. package/_esm/src/hooks/useKnownTokenContract.js +52 -0
  71. package/_esm/src/hooks/useKnownTokenContract.js.map +1 -0
  72. package/_esm/src/hooks/useMultiWalletBalances.js +18 -39
  73. package/_esm/src/hooks/useMultiWalletBalances.js.map +1 -1
  74. package/_esm/src/hooks/useSolanaBalance.js +58 -0
  75. package/_esm/src/hooks/useSolanaBalance.js.map +1 -0
  76. package/_esm/src/providers/RelayKitProvider.js +1 -1
  77. package/_esm/src/providers/RelayKitProvider.js.map +1 -1
  78. package/_esm/src/version.js +1 -1
  79. package/_esm/src/version.js.map +1 -1
  80. package/_esm/tsconfig.build.tsbuildinfo +1 -1
  81. package/_types/src/components/common/CustomAddressModal.d.ts.map +1 -1
  82. package/_types/src/components/common/RefundReason.d.ts.map +1 -1
  83. package/_types/src/components/common/TokenSelector/PaymentMethod.d.ts.map +1 -1
  84. package/_types/src/components/common/TokenSelector/TokenSelector.d.ts.map +1 -1
  85. package/_types/src/components/primitives/ChainIcon.d.ts.map +1 -1
  86. package/_types/src/components/primitives/ChainTokenIcon.d.ts.map +1 -1
  87. package/_types/src/components/widgets/OnrampWidget/widget/index.d.ts.map +1 -1
  88. package/_types/src/components/widgets/SwapWidgetRenderer.d.ts.map +1 -1
  89. package/_types/src/components/widgets/WidgetContainer.d.ts.map +1 -1
  90. package/_types/src/constants/events.d.ts +1 -0
  91. package/_types/src/constants/events.d.ts.map +1 -1
  92. package/_types/src/constants/walletCompatibility.d.ts.map +1 -1
  93. package/_types/src/hooks/index.d.ts +4 -2
  94. package/_types/src/hooks/index.d.ts.map +1 -1
  95. package/_types/src/hooks/useCodexBalances.d.ts +45 -0
  96. package/_types/src/hooks/useCodexBalances.d.ts.map +1 -0
  97. package/_types/src/hooks/useCurrencyBalance.d.ts +0 -1
  98. package/_types/src/hooks/useCurrencyBalance.d.ts.map +1 -1
  99. package/_types/src/hooks/useEnhancedTokensList.d.ts +1 -1
  100. package/_types/src/hooks/useEnhancedTokensList.d.ts.map +1 -1
  101. package/_types/src/hooks/useKnownTokenContract.d.ts +35 -0
  102. package/_types/src/hooks/useKnownTokenContract.d.ts.map +1 -0
  103. package/_types/src/hooks/useMultiWalletBalances.d.ts +3 -12
  104. package/_types/src/hooks/useMultiWalletBalances.d.ts.map +1 -1
  105. package/_types/src/hooks/{useEclipseBalance.d.ts → useSolanaBalance.d.ts} +2 -2
  106. package/_types/src/hooks/useSolanaBalance.d.ts.map +1 -0
  107. package/_types/src/providers/RelayKitProvider.d.ts +3 -3
  108. package/_types/src/providers/RelayKitProvider.d.ts.map +1 -1
  109. package/_types/src/version.d.ts +1 -1
  110. package/_types/tsconfig.build.tsbuildinfo +1 -1
  111. package/package.json +3 -3
  112. package/_cjs/src/hooks/useDuneBalances.js +0 -100
  113. package/_cjs/src/hooks/useDuneBalances.js.map +0 -1
  114. package/_cjs/src/hooks/useEclipseBalance.js +0 -47
  115. package/_cjs/src/hooks/useEclipseBalance.js.map +0 -1
  116. package/_esm/src/hooks/useDuneBalances.js +0 -102
  117. package/_esm/src/hooks/useDuneBalances.js.map +0 -1
  118. package/_esm/src/hooks/useEclipseBalance.js +0 -44
  119. package/_esm/src/hooks/useEclipseBalance.js.map +0 -1
  120. package/_types/src/hooks/useDuneBalances.d.ts +0 -25
  121. package/_types/src/hooks/useDuneBalances.d.ts.map +0 -1
  122. package/_types/src/hooks/useEclipseBalance.d.ts.map +0 -1
@@ -21,7 +21,7 @@ const address_js_1 = require("../../utils/address.js");
21
21
  const RelayKitProvider_js_1 = require("../../providers/RelayKitProvider.js");
22
22
  const localStorage_js_1 = require("../../utils/localStorage.js");
23
23
  const lighter_js_1 = require("../../utils/lighter.js");
24
- const CustomAddressModal = ({ open, toAddress, toChain, linkedWallets, isConnected, multiWalletSupportEnabled, wallet, onAnalyticEvent, onOpenChange, onConfirmed, onClear }) => {
24
+ const CustomAddressModal = ({ open, toToken, toAddress, toChain, linkedWallets, isConnected, multiWalletSupportEnabled, wallet, onAnalyticEvent, onOpenChange, onConfirmed, onClear }) => {
25
25
  const haptic = (0, RelayKitProvider_js_1.useHapticEvent)();
26
26
  const connectedAddress = (0, index_js_2.useWalletAddress)(wallet, linkedWallets);
27
27
  const [address, setAddress] = (0, react_1.useState)('');
@@ -65,7 +65,14 @@ const CustomAddressModal = ({ open, toAddress, toChain, linkedWallets, isConnect
65
65
  }
66
66
  }, [open]);
67
67
  const { data: resolvedENS, isLoading: isLoadingENS } = (0, index_js_2.useENSResolver)((0, ens_js_1.isENSName)(input) ? input : '');
68
- const isLoading = isLoadingENS || isResolvingLighter;
68
+ const matchesToToken = Boolean(toToken &&
69
+ toChain &&
70
+ toToken.chainId === toChain.id &&
71
+ (0, address_js_1.addressesEqual)(toChain.vmType ?? 'evm', address, toToken.address));
72
+ const { tokenContract: knownCurrencyMatch, isChecking: isCheckingTokenContract } = (0, index_js_2.useKnownTokenContract)(toChain, address, !matchesToToken);
73
+ const knownTokenContract = matchesToToken ? toToken : knownCurrencyMatch;
74
+ const isKnownTokenContract = Boolean(knownTokenContract);
75
+ const isLoading = isLoadingENS || isResolvingLighter || isCheckingTokenContract;
69
76
  (0, react_1.useEffect)(() => {
70
77
  if (isLighterChain && isEvmInput) {
71
78
  setAddress(resolvedLighterIndex ?? '');
@@ -101,7 +108,7 @@ const CustomAddressModal = ({ open, toAddress, toChain, linkedWallets, isConnect
101
108
  e.preventDefault();
102
109
  }, onClick: () => {
103
110
  setInput('');
104
- }, children: (0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { icon: faCircleXmark_1.faCircleXmark, width: 16, height: 16 }) })), isLoading && ((0, jsx_runtime_1.jsx)("div", { className: "relay:absolute relay:right-2 relay:top-[12px]", children: (0, jsx_runtime_1.jsx)(LoadingSpinner_js_1.LoadingSpinner, {}) }))] }), isLighterError ? ((0, jsx_runtime_1.jsx)(index_js_1.Text, { color: "red", style: "subtitle2", children: "Failed to resolve Lighter address" })) : isLighterChain &&
111
+ }, children: (0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { icon: faCircleXmark_1.faCircleXmark, width: 16, height: 16 }) })), isLoading && ((0, jsx_runtime_1.jsx)("div", { className: "relay:absolute relay:right-2 relay:top-[12px]", children: (0, jsx_runtime_1.jsx)(LoadingSpinner_js_1.LoadingSpinner, {}) }))] }), isKnownTokenContract ? ((0, jsx_runtime_1.jsxs)(index_js_1.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 ? ((0, jsx_runtime_1.jsx)(index_js_1.Text, { color: "red", style: "subtitle2", children: "Failed to resolve Lighter address" })) : isLighterChain &&
105
112
  isEvmInput &&
106
113
  !isResolvingLighter &&
107
114
  !resolvedLighterIndex ? ((0, jsx_runtime_1.jsx)(index_js_1.Text, { color: "red", style: "subtitle2", children: "No Lighter account found for this EVM address" })) : !address && input.length && !isLoading ? ((0, jsx_runtime_1.jsx)(index_js_1.Text, { color: "red", style: "subtitle2", children: "Not a valid address" })) : null, didResolveLighterFromEvm && resolvedLighterIndex ? ((0, jsx_runtime_1.jsxs)(index_js_1.Flex, { className: "relay:bg-[var(--relay-colors-green2)] relay:p-2 relay:rounded-lg relay:gap-2", align: "center", children: [(0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { icon: faCircleCheck_1.faCircleCheck, color: "#30A46C", width: 16, height: 16 }), (0, jsx_runtime_1.jsxs)(index_js_1.Text, { style: "subtitle3", children: ["Lighter Account ID: ", resolvedLighterIndex] })] })) : null, !connectedAddressSet && address && isConnected ? ((0, jsx_runtime_1.jsxs)(index_js_1.Flex, { className: "relay:bg-[var(--relay-colors-amber2)] relay:p-2 relay:rounded-lg relay:gap-2", align: "center", children: [(0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { icon: faTriangleExclamation_1.faTriangleExclamation, color: "#FFA01C", width: 16, height: 16, className: "relay:shrink-0" }), (0, jsx_runtime_1.jsxs)(index_js_1.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 ? ((0, jsx_runtime_1.jsxs)(index_js_1.Flex, { className: "relay:bg-[var(--relay-colors-green2)] relay:p-2 relay:rounded-lg relay:gap-2", align: "center", children: [(0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { icon: faCircleCheck_1.faCircleCheck, color: "#30A46C", width: 16, height: 16 }), (0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle3", children: "Connected Wallet" })] })) : ((0, jsx_runtime_1.jsx)(Anchor_js_1.AnchorButton, { onClick: () => {
@@ -109,14 +116,17 @@ const CustomAddressModal = ({ open, toAddress, toChain, linkedWallets, isConnect
109
116
  onOpenChange(false);
110
117
  }, children: "Use connected wallet address" }))) : null, filteredRecentCustomAddresses.length > 0 ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle2", children: "Recent addresses" }), (0, jsx_runtime_1.jsx)(index_js_1.Flex, { className: "relay:gap-2 relay:flex-wrap", align: "center", children: filteredRecentCustomAddresses.map((address) => ((0, jsx_runtime_1.jsxs)(index_js_1.Pill, { color: "transparent", bordered: true, radius: "squared", className: "relay:flex relay:items-center relay:gap-[6px] relay:cursor-pointer relay:px-2", onClick: () => {
111
118
  haptic('light');
112
- onConfirmed(address);
113
- onOpenChange(false);
114
- onAnalyticEvent?.(events_js_1.EventNames.ADDRESS_MODAL_CONFIRMED, {
119
+ setInput(address);
120
+ onAnalyticEvent?.(events_js_1.EventNames.ADDRESS_MODAL_RECENT_SELECTED, {
115
121
  address: address,
116
122
  context: 'custom_address'
117
123
  });
118
- }, children: [(0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { icon: faClipboard_1.faClipboard, width: 16, height: 16, color: "#9CA3AF" }), (0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle2", children: (0, truncate_js_1.truncateAddress)(address) })] }, address))) })] })) : null] }), (0, jsx_runtime_1.jsx)(index_js_1.Button, { cta: true, disabled: isLoading || !(0, address_js_1.isValidAddress)(toChain?.vmType, address, toChain?.id), className: "relay:justify-center", onClick: () => {
119
- if ((0, address_js_1.isValidAddress)(toChain?.vmType, address, toChain?.id)) {
124
+ }, children: [(0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { icon: faClipboard_1.faClipboard, width: 16, height: 16, color: "#9CA3AF" }), (0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle2", children: (0, truncate_js_1.truncateAddress)(address) })] }, address))) })] })) : null] }), (0, jsx_runtime_1.jsx)(index_js_1.Button, { cta: true, disabled: isLoading ||
125
+ isKnownTokenContract ||
126
+ !(0, address_js_1.isValidAddress)(toChain?.vmType, address, toChain?.id), className: "relay:justify-center", onClick: () => {
127
+ if (!isKnownTokenContract &&
128
+ !isCheckingTokenContract &&
129
+ (0, address_js_1.isValidAddress)(toChain?.vmType, address, toChain?.id)) {
120
130
  const isConnectedWallet = availableWallets.some((wallet) => wallet.address === address);
121
131
  if (!isConnectedWallet && address !== connectedAddress) {
122
132
  (0, localStorage_js_1.addCustomAddress)(address);
@@ -1 +1 @@
1
- {"version":3,"file":"CustomAddressModal.js","sourceRoot":"","sources":["../../../../src/components/common/CustomAddressModal.tsx"],"names":[],"mappings":";;;;AAAA,iCAAyE;AACzE,qDAAwE;AACxE,iDAA0C;AAC1C,+BAA8C;AAC9C,sEAAgE;AAChE,mDAI6B;AAC7B,+CAA8C;AAC9C,mEAA4D;AAC5D,yDAAsD;AAEtD,mFAA+E;AAC/E,mGAA+F;AAC/F,+EAA2E;AAC3E,mFAA+E;AAC/E,uDAAsD;AAGtD,yDAAyD;AACzD,uDAAuD;AACvD,6EAG4C;AAC5C,iEAGoC;AACpC,uDAAyD;AAiBlD,MAAM,kBAAkB,GAAc,CAAC,EAC5C,IAAI,EACJ,SAAS,EACT,OAAO,EACP,aAAa,EACb,WAAW,EACX,yBAAyB,EACzB,MAAM,EACN,eAAe,EACf,YAAY,EACZ,WAAW,EACX,OAAO,EACR,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,IAAA,oCAAc,GAAE,CAAA;IAC/B,MAAM,gBAAgB,GAAG,IAAA,2BAAgB,EAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAChE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,EAAE,CAAC,CAAA;IAC1C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAC,EAAE,CAAC,CAAA;IACtC,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,IAAA,gBAAQ,EAChE,EAAE,CACH,CAAA;IACD,MAAM,sBAAsB,GAAG,IAAA,kBAAU,EAAC,4CAAsB,CAAC,CAAA;IACjE,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,uBAAuB,CAAA;IAG5E,MAAM,cAAc,GAAG,OAAO,EAAE,MAAM,KAAK,KAAK,CAAA;IAChD,MAAM,UAAU,GAAG,IAAA,gBAAS,EAAC,KAAK,CAAC,CAAA;IACnC,MAAM,mBAAmB,GAAG,IAAA,6BAAgB,EAAC,KAAK,CAAC,CAAA;IAEnD,MAAM,EACJ,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,kBAAkB,EAC7B,OAAO,EAAE,cAAc,EACxB,GAAG,IAAA,4BAAiB,EACnB,cAAc,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC1E,CAAA;IAED,MAAM,oBAAoB,GAAG,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;IAE9D,MAAM,wBAAwB,GAC5B,cAAc;QACd,UAAU;QACV,CAAC,CAAC,oBAAoB;QACtB,IAAA,6BAAgB,EAAC,oBAAoB,CAAC,CAAA;IAExC,MAAM,gBAAgB,GAAG,IAAA,eAAO,EAC9B,GAAG,EAAE,CACH,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAC9B,IAAA,2BAAc,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,OAAO,EACd,OAAO,EAAE,EAAE,EACX,MAAM,CAAC,SAAS,EAChB,qBAAqB,CACtB,CACF,EACH,CAAC,OAAO,EAAE,aAAa,CAAC,CACzB,CAAA;IAED,MAAM,6BAA6B,GAAG,IAAA,eAAO,EAC3C,GAAG,EAAE,CACH,qBAAqB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CACvC,IAAA,2BAAc,EAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CACtD,EACH,CAAC,qBAAqB,EAAE,OAAO,CAAC,CACjC,CAAA;IAGD,MAAM,wBAAwB,GAC5B,cAAc;QACd,CAAC,CAAC,cAAc;QAEhB,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,gBAAgB,EAAE,WAAW,EAAE,CAAC;YAEtE,CAAC,mBAAmB;gBAClB,cAAc,CAAC,UAAU,EAAE,WAAW,EAAE;oBACtC,gBAAgB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;IAEzC,MAAM,mBAAmB,GACvB,CAAC,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC,SAAS,KAAK,gBAAgB,IAAI,OAAO,KAAK,gBAAgB,CAAC;QAChE,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC;QAC/D,wBAAwB,CAAA;IAE1B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,UAAU,CAAC,EAAE,CAAC,CAAA;YACd,QAAQ,CAAC,EAAE,CAAC,CAAA;QACd,CAAC;aAAM,CAAC;YACN,IAAI,IAAA,2BAAc,EAAC,OAAO,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;gBAClE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;gBACtC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YACtC,CAAC;YAED,wBAAwB,CAAC,IAAA,oCAAkB,GAAE,CAAC,CAAA;YAC9C,eAAe,EAAE,CAAC,sBAAU,CAAC,kBAAkB,CAAC,CAAA;QAClD,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,IAAA,yBAAc,EACnE,IAAA,kBAAS,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAC9B,CAAA;IAED,MAAM,SAAS,GAAG,YAAY,IAAI,kBAAkB,CAAA;IAEpD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,cAAc,IAAI,UAAU,EAAE,CAAC;YACjC,UAAU,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAA;QACxC,CAAC;aAAM,IAAI,IAAA,2BAAc,EAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;YAC/D,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;aAAM,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;YAChC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QACjC,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC;IACH,CAAC,EAAE;QACD,KAAK;QACL,WAAW;QACX,oBAAoB;QACpB,cAAc;QACd,UAAU;QACV,OAAO;KACR,CAAC,CAAA;IAEF,OAAO,CACL,uBAAC,gBAAK,IACJ,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAC,uBAAuB,YAEjC,wBAAC,eAAI,IACH,SAAS,EAAC,QAAQ,EAClB,SAAS,EAAC,0DAA0D,aAEpE,uBAAC,eAAI,IAAC,KAAK,EAAC,IAAI,2BAAkB,EAClC,wBAAC,eAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,SAAS,EAAC,4BAA4B,aAC7D,wBAAC,eAAI,IACH,SAAS,EAAC,6BAA6B,aAEvC,uBAAC,gBAAK,IACJ,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,MAAM,EAChB,YAAY,EAAC,KAAK,EAClB,WAAW,EAAC,KAAK,EACjB,SAAS,EAAC,uCAAuC,EACjD,UAAU,EAAE;wCACV,YAAY,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;qCACjD,EACD,WAAW,EACT,CAAC,OAAO;wCACN,CAAC,CAAC,eAAe;wCACjB,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK;4CACxB,CAAC,CAAC,gBAAgB;4CAClB,CAAC,CAAC,cAAc;gDACd,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,yBAAyB;gDACjD,CAAC,CAAC,SAAS,OAAO,CAAC,WAAW,UAAU,EAEhD,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;wCACd,QAAQ,CAAE,CAAC,CAAC,MAA2B,CAAC,KAAK,CAAC,CAAA;oCAChD,CAAC,GACD,EACD,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,CACjC,uBAAC,iBAAM,IACL,KAAK,EAAC,OAAO,EACb,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,uTAAuT,EACjU,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;wCACjB,CAAC,CAAC,cAAc,EAAE,CAAA;oCACpB,CAAC,EACD,OAAO,EAAE,GAAG,EAAE;wCACZ,QAAQ,CAAC,EAAE,CAAC,CAAA;oCACd,CAAC,YAED,uBAAC,mCAAe,IAAC,IAAI,EAAE,6BAAa,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAI,GACxD,CACV,EACA,SAAS,IAAI,CACZ,gCAAK,SAAS,EAAC,+CAA+C,YAC5D,uBAAC,kCAAc,KAAG,GACd,CACP,IACI,EACN,cAAc,CAAC,CAAC,CAAC,CAChB,uBAAC,eAAI,IAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,WAAW,kDAE5B,CACR,CAAC,CAAC,CAAC,cAAc;4BAChB,UAAU;4BACV,CAAC,kBAAkB;4BACnB,CAAC,oBAAoB,CAAC,CAAC,CAAC,CACxB,uBAAC,eAAI,IAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,WAAW,8DAE5B,CACR,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAC3C,uBAAC,eAAI,IAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,WAAW,oCAE5B,CACR,CAAC,CAAC,CAAC,IAAI,EAEP,wBAAwB,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAClD,wBAAC,eAAI,IACH,SAAS,EAAC,8EAA8E,EACxF,KAAK,EAAC,QAAQ,aAEd,uBAAC,mCAAe,IACd,IAAI,EAAE,6BAAa,EACnB,KAAK,EAAC,SAAS,EACf,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,GACV,EACF,wBAAC,eAAI,IAAC,KAAK,EAAC,WAAW,qCACA,oBAAoB,IACpC,IACF,CACR,CAAC,CAAC,CAAC,IAAI,EAEP,CAAC,mBAAmB,IAAI,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,CAChD,wBAAC,eAAI,IACH,SAAS,EAAC,8EAA8E,EACxF,KAAK,EAAC,QAAQ,aAEd,uBAAC,mCAAe,IACd,IAAI,EAAE,6CAAqB,EAC3B,KAAK,EAAC,SAAS,EACf,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,SAAS,EAAC,gBAAgB,GAC1B,EACF,wBAAC,eAAI,IAAC,KAAK,EAAC,WAAW,EAAC,KAAK,EAAC,SAAS,8GAEP,GAAG,IAC5B,IACF,CACR,CAAC,CAAC,CAAC,IAAI,EAEP,CAAC,yBAAyB,IAAI,WAAW,CAAC,CAAC,CAAC,CAC3C,mBAAmB,CAAC,CAAC,CAAC,CACpB,wBAAC,eAAI,IACH,SAAS,EAAC,8EAA8E,EACxF,KAAK,EAAC,QAAQ,aAEd,uBAAC,mCAAe,IACd,IAAI,EAAE,6BAAa,EACnB,KAAK,EAAC,SAAS,EACf,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,GACV,EACF,uBAAC,eAAI,IAAC,KAAK,EAAC,WAAW,iCAAwB,IAC1C,CACR,CAAC,CAAC,CAAC,CACF,uBAAC,wBAAY,IACX,OAAO,EAAE,GAAG,EAAE;gCACZ,OAAO,EAAE,CAAA;gCACT,YAAY,CAAC,KAAK,CAAC,CAAA;4BACrB,CAAC,6CAGY,CAChB,CACF,CAAC,CAAC,CAAC,IAAI,EAEP,6BAA6B,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAC1C,6DACE,uBAAC,eAAI,IAAC,KAAK,EAAC,WAAW,iCAAwB,EAC/C,uBAAC,eAAI,IAAC,SAAS,EAAC,6BAA6B,EAAC,KAAK,EAAC,QAAQ,YACzD,6BAA6B,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAC9C,wBAAC,eAAI,IAEH,KAAK,EAAC,aAAa,EACnB,QAAQ,QACR,MAAM,EAAC,SAAS,EAChB,SAAS,EAAC,+EAA+E,EACzF,OAAO,EAAE,GAAG,EAAE;4CACZ,MAAM,CAAC,OAAO,CAAC,CAAA;4CACf,WAAW,CAAC,OAAO,CAAC,CAAA;4CACpB,YAAY,CAAC,KAAK,CAAC,CAAA;4CACnB,eAAe,EAAE,CAAC,sBAAU,CAAC,uBAAuB,EAAE;gDACpD,OAAO,EAAE,OAAO;gDAChB,OAAO,EAAE,gBAAgB;6CAC1B,CAAC,CAAA;wCACJ,CAAC,aAED,uBAAC,mCAAe,IACd,IAAI,EAAE,yBAAW,EACjB,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,KAAK,EAAC,SAAS,GACf,EACF,uBAAC,eAAI,IAAC,KAAK,EAAC,WAAW,YAAE,IAAA,6BAAe,EAAC,OAAO,CAAC,GAAQ,KArBpD,OAAO,CAsBP,CACR,CAAC,GACG,IACN,CACJ,CAAC,CAAC,CAAC,IAAI,IACH,EACP,uBAAC,iBAAM,IACL,GAAG,EAAE,IAAI,EACT,QAAQ,EACN,SAAS,IAAI,CAAC,IAAA,2BAAc,EAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAErE,SAAS,EAAC,sBAAsB,EAChC,OAAO,EAAE,GAAG,EAAE;wBACZ,IAAI,IAAA,2BAAc,EAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;4BAE1D,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,CAC7C,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,OAAO,CACvC,CAAA;4BACD,IAAI,CAAC,iBAAiB,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;gCACvD,IAAA,kCAAgB,EAAC,OAAO,CAAC,CAAA;gCACzB,wBAAwB,CAAC,IAAA,oCAAkB,GAAE,CAAC,CAAA;4BAChD,CAAC;4BAED,MAAM,CAAC,OAAO,CAAC,CAAA;4BACf,WAAW,CAAC,OAAO,CAAC,CAAA;4BACpB,eAAe,EAAE,CAAC,sBAAU,CAAC,uBAAuB,EAAE;gCACpD,OAAO,EAAE,OAAO;gCAChB,OAAO,EAAE,OAAO;6BACjB,CAAC,CAAA;wBACJ,CAAC;wBACD,YAAY,CAAC,KAAK,CAAC,CAAA;oBACrB,CAAC,iBACW,aAAa,qBAGlB,IACJ,GACD,CACT,CAAA;AACH,CAAC,CAAA;AAzUY,QAAA,kBAAkB,sBAyU9B","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"]}
@@ -15,7 +15,8 @@ const RefundReason = ({ reasonCode }) => {
15
15
  case 'NEGATIVE_NEW_AMOUNT_AFTER_FEES': {
16
16
  return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the fees exceeded the expected amount. Try adjusting the slippage or amount." }));
17
17
  }
18
- case 'NO_QUOTES': {
18
+ case 'NO_QUOTES':
19
+ case 'NO_INTERNAL_SWAP_ROUTES_FOUND': {
19
20
  return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because no swap routes were found for your request. Try a different token or amount." }));
20
21
  }
21
22
  case 'REVERSE_SWAP_FAILED': {
@@ -34,13 +35,115 @@ const RefundReason = ({ reasonCode }) => {
34
35
  return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Your transaction amount is insufficient to cover the gas cost for an automatic refund. Please", ' ', (0, jsx_runtime_1.jsx)(Anchor_js_1.default, { href: "https://docs.relay.link/what-is-relay#intercom", target: "_blank", children: "contact support" }), ' ', "if you need assistance.", ' '] }));
35
36
  }
36
37
  case 'EXECUTION_REVERTED':
38
+ case 'TRANSACTION_REVERTED':
39
+ case 'FLUID_DEX_ERROR':
37
40
  case 'MISSING_REVERT_DATA': {
38
41
  return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because there was an issue during execution. Try adjusting the slippage or amount." }));
39
42
  }
40
- case 'DEPOSIT_ADDRESS_MISMATCH':
41
43
  case 'DEPOSIT_CHAIN_MISMATCH':
42
- case 'INSUFFICIENT_BALANCE_FOR_REFUND':
44
+ case 'INCORRECT_DEPOSIT_CURRENCY':
45
+ case 'ORIGIN_CURRENCY_MISMATCH': {
46
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the chain or token received didn\u2019t match the quote." }));
47
+ }
48
+ case 'DOUBLE_SPEND': {
49
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Your transfer couldn\u2019t be processed because a deposit was already completed for this request. Please", ' ', (0, jsx_runtime_1.jsx)(Anchor_js_1.default, { href: "https://docs.relay.link/what-is-relay#intercom", target: "_blank", children: "contact support" }), ' ', "if you have any further questions.", ' '] }));
50
+ }
51
+ case 'TTL_EXPIRED':
52
+ case 'DEPOSIT_CONFIRMATION_TIMEOUT': {
53
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the deposit wasn\u2019t confirmed in time. Please try again." }));
54
+ }
55
+ case 'DEPOSIT_REORGED': {
56
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction could not be completed because of a temporary network issue affecting your deposit. Please try again." }));
57
+ }
58
+ case 'ORPHANED_DEPOSIT_REFUND': {
59
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your deposit couldn\u2019t be matched to an active request, so it has been refunded." }));
60
+ }
61
+ case 'BLOCKED_WALLET': {
62
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["This transaction couldn\u2019t be completed because an address associated with it didn\u2019t meet our risk management standards. Please", ' ', (0, jsx_runtime_1.jsx)(Anchor_js_1.default, { href: "https://docs.relay.link/what-is-relay#intercom", target: "_blank", children: "contact support" }), ' ', "if you have any further questions.", ' '] }));
63
+ }
43
64
  case 'SOLVER_CAPACITY_EXCEEDED':
65
+ case 'SOLVER_BALANCE_TOO_LOW':
66
+ case 'SPONSOR_BALANCE_TOO_LOW': {
67
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because there wasn\u2019t enough capacity available for this route right now. Please try again later." }));
68
+ }
69
+ case 'GASLESS_PERMIT_BALANCE_TOO_LOW': {
70
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction could not be completed because the available balance was too low, so the funds have been refunded." }));
71
+ }
72
+ case 'INSUFFICIENT_FUNDS_FOR_RENT': {
73
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.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." }));
74
+ }
75
+ case 'SWAP_IMPACT_TOO_HIGH': {
76
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the swap\u2019s price impact was too high. Try a smaller amount or a different token." }));
77
+ }
78
+ case 'INSUFFICIENT_POOL_LIQUIDITY': {
79
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.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." }));
80
+ }
81
+ case 'TRANSACTION_TOO_LARGE':
82
+ case 'SWAP_USES_TOO_MUCH_GAS':
83
+ case 'QUOTED_GAS_LIMIT_EXCEEDED':
84
+ case 'INVALID_GAS_PRICE': {
85
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because it couldn\u2019t be executed within network limits. Try a smaller amount or a different route." }));
86
+ }
87
+ case 'JUPITER_INVALID_TOKEN_ACCOUNT': {
88
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction could not be completed because a required Solana token account was missing or invalid. Please try again." }));
89
+ }
90
+ case 'CONTRACT_PAUSED': {
91
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the destination contract is currently paused. Please try again later." }));
92
+ }
93
+ case 'TOKEN_NOT_TRANSFERABLE':
94
+ case 'DESTINATION_TOKEN_TRANSFER_REJECTED':
95
+ case 'TRANSFER_FAILED': {
96
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the token rejected the transfer. Some tokens have transfer restrictions, taxes, or limits." }));
97
+ }
98
+ case 'TRANSFER_FROM_FAILED':
99
+ case 'TRANSFER_AMOUNT_EXCEEDS_ALLOWANCE': {
100
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the token approval was insufficient for the transfer amount. Please try again." }));
101
+ }
102
+ case 'TRANSFER_AMOUNT_EXCEEDS_BALANCE':
103
+ case 'INSUFFICIENT_NATIVE_TOKENS_SUPPLIED':
104
+ case 'INCORRECT_PAYMENT':
105
+ case 'ZERO_SELL_AMOUNT': {
106
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the amount available didn\u2019t match what the transaction required." }));
107
+ }
108
+ case 'SIGNATURE_EXPIRED':
109
+ case 'INVALID_SIGNATURE':
110
+ case 'INVALID_NONCE':
111
+ case 'INVALID_SENDER':
112
+ case 'INVALID_SIGNER': {
113
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because there was a signature or authorization issue. Please try again." }));
114
+ }
115
+ case 'ORDER_EXPIRED':
116
+ case 'PROTOCOL_DEADLINE_EXPIRED': {
117
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the order expired before it could be completed. Please try again." }));
118
+ }
119
+ case 'ORDER_ALREADY_FILLED': {
120
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.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." }));
121
+ }
122
+ case 'ORDER_IS_CANCELLED': {
123
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the order was canceled before it could be completed." }));
124
+ }
125
+ case 'MINT_NOT_ACTIVE': {
126
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.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." }));
127
+ }
128
+ case 'SEAPORT_INEXACT_FRACTION':
129
+ case 'SEAPORT_INVALID_FULFILLER': {
130
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the marketplace order couldn\u2019t be fulfilled." }));
131
+ }
132
+ case 'ACCOUNT_ABSTRACTION_INVALID_NONCE':
133
+ case 'ACCOUNT_ABSTRACTION_SIGNATURE_ERROR':
134
+ case 'ACCOUNT_ABSTRACTION_GAS_LIMIT': {
135
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because there was an issue with your smart account operation. Please try again." }));
136
+ }
137
+ case 'ERC_1155_TOO_MANY_REQUESTED':
138
+ case 'MINT_QUANTITY_EXCEEDS_MAX_PER_WALLET':
139
+ case 'MINT_QUANTITY_EXCEEDS_MAX_SUPPLY': {
140
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the requested mint quantity exceeds what\u2019s allowed for this collection." }));
141
+ }
142
+ case 'MANUAL_ADMIN_REFUND': {
143
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Your transaction has been refunded manually by the Relay team. Please", ' ', (0, jsx_runtime_1.jsx)(Anchor_js_1.default, { href: "https://docs.relay.link/what-is-relay#intercom", target: "_blank", children: "contact support" }), ' ', "if you have any further questions.", ' '] }));
144
+ }
145
+ case 'DEPOSIT_ADDRESS_MISMATCH':
146
+ case 'INSUFFICIENT_BALANCE_FOR_REFUND':
44
147
  case 'UNKNOWN':
45
148
  default: {
46
149
  return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["It looks like an unknown issue occurred during the transaction. Please", ' ', (0, jsx_runtime_1.jsx)(Anchor_js_1.default, { 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,gFAA4C;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,iLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,uCAAuC,CAAC,CAAC,CAAC;gBAC7C,OAAO,CACL,wKAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,gCAAgC,CAAC,CAAC,CAAC;gBACtC,OAAO,CACL,uLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,OAAO,CACL,uLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,CACL,6LAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,OAAO,CACL,6KAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,OAAO,CACL,4MAGK,GAAG,EACN,uBAAC,mBAAM,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,kLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,0BAA0B,CAAC,CAAC,CAAC;gBAChC,OAAO,CACL,8JAE2B,GAAG,EAC5B,uBAAC,mBAAM,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,qLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,0BAA0B,CAAC;YAChC,KAAK,wBAAwB,CAAC;YAC9B,KAAK,iCAAiC,CAAC;YACvC,KAAK,0BAA0B,CAAC;YAChC,KAAK,SAAS,CAAC;YACf,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO,CACL,uIAES,GAAG,EACV,uBAAC,mBAAM,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,kBAAe,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/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 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":";;;;AACA,gFAA4C;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,iLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,uCAAuC,CAAC,CAAC,CAAC;gBAC7C,OAAO,CACL,wKAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,gCAAgC,CAAC,CAAC,CAAC;gBACtC,OAAO,CACL,uLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,WAAW,CAAC;YACjB,KAAK,+BAA+B,CAAC,CAAC,CAAC;gBACrC,OAAO,CACL,uLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,CACL,6LAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,OAAO,CACL,6KAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,OAAO,CACL,4MAGK,GAAG,EACN,uBAAC,mBAAM,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,kLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,0BAA0B,CAAC,CAAC,CAAC;gBAChC,OAAO,CACL,8JAE2B,GAAG,EAC5B,uBAAC,mBAAM,IACL,IAAI,EAAC,gDAAgD,EACrD,MAAM,EAAC,QAAQ,gCAGR,EAAC,GAAG,6BACW,GAAG,IAC1B,CACJ,CAAA;YACH,CAAC;YACD,KAAK,oBAAoB,CAAC;YAC1B,KAAK,sBAAsB,CAAC;YAC5B,KAAK,iBAAiB,CAAC;YACvB,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,CACL,qLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,wBAAwB,CAAC;YAC9B,KAAK,4BAA4B,CAAC;YAClC,KAAK,0BAA0B,CAAC,CAAC,CAAC;gBAChC,OAAO,CACL,mKAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,OAAO,CACL,0KAEqC,GAAG,EACtC,uBAAC,mBAAM,IACL,IAAI,EAAC,gDAAgD,EACrD,MAAM,EAAC,QAAQ,gCAGR,EAAC,GAAG,wCACsB,GAAG,IACrC,CACJ,CAAA;YACH,CAAC;YACD,KAAK,aAAa,CAAC;YACnB,KAAK,8BAA8B,CAAC,CAAC,CAAC;gBACpC,OAAO,CACL,uKAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,OAAO,CACL,sLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,yBAAyB,CAAC,CAAC,CAAC;gBAC/B,OAAO,CACL,oJAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,OAAO,CACL,yMAGS,GAAG,EACV,uBAAC,mBAAM,IACL,IAAI,EAAC,gDAAgD,EACrD,MAAM,EAAC,QAAQ,gCAGR,EAAC,GAAG,wCACsB,GAAG,IACrC,CACJ,CAAA;YACH,CAAC;YACD,KAAK,0BAA0B,CAAC;YAChC,KAAK,wBAAwB,CAAC;YAC9B,KAAK,yBAAyB,CAAC,CAAC,CAAC;gBAC/B,OAAO,CACL,wMAIG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,gCAAgC,CAAC,CAAC,CAAC;gBACtC,OAAO,CACL,mLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,6BAA6B,CAAC,CAAC,CAAC;gBACnC,OAAO,CACL,mNAIG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,OAAO,CACL,gMAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,6BAA6B,CAAC,CAAC,CAAC;gBACnC,OAAO,CACL,4MAIG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,uBAAuB,CAAC;YAC7B,KAAK,wBAAwB,CAAC;YAC9B,KAAK,2BAA2B,CAAC;YACjC,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,OAAO,CACL,yMAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,+BAA+B,CAAC,CAAC,CAAC;gBACrC,OAAO,CACL,yLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,OAAO,CACL,gLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,wBAAwB,CAAC;YAC9B,KAAK,qCAAqC,CAAC;YAC3C,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,OAAO,CACL,qMAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,sBAAsB,CAAC;YAC5B,KAAK,mCAAmC,CAAC,CAAC,CAAC;gBACzC,OAAO,CACL,yLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,iCAAiC,CAAC;YACvC,KAAK,qCAAqC,CAAC;YAC3C,KAAK,mBAAmB,CAAC;YACzB,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,OAAO,CACL,gLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,mBAAmB,CAAC;YACzB,KAAK,mBAAmB,CAAC;YACzB,KAAK,eAAe,CAAC;YACrB,KAAK,gBAAgB,CAAC;YACtB,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,OAAO,CACL,0KAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,eAAe,CAAC;YACrB,KAAK,2BAA2B,CAAC,CAAC,CAAC;gBACjC,OAAO,CACL,4KAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,OAAO,CACL,gPAIG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,oBAAoB,CAAC,CAAC,CAAC;gBAC1B,OAAO,CACL,+JAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,OAAO,CACL,yMAIG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,0BAA0B,CAAC;YAChC,KAAK,2BAA2B,CAAC,CAAC,CAAC;gBACjC,OAAO,CACL,4JAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,mCAAmC,CAAC;YACzC,KAAK,qCAAqC,CAAC;YAC3C,KAAK,+BAA+B,CAAC,CAAC,CAAC;gBACrC,OAAO,CACL,kLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,6BAA6B,CAAC;YACnC,KAAK,sCAAsC,CAAC;YAC5C,KAAK,kCAAkC,CAAC,CAAC,CAAC;gBACxC,OAAO,CACL,uLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,CACL,sIAES,GAAG,EACV,uBAAC,mBAAM,IACL,IAAI,EAAC,gDAAgD,EACrD,MAAM,EAAC,QAAQ,gCAGR,EAAC,GAAG,wCACsB,GAAG,IACrC,CACJ,CAAA;YACH,CAAC;YACD,KAAK,0BAA0B,CAAC;YAChC,KAAK,iCAAiC,CAAC;YACvC,KAAK,SAAS,CAAC;YACf,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO,CACL,uIAES,GAAG,EACV,uBAAC,mBAAM,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,kBAAe,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/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"]}
@@ -99,13 +99,13 @@ const PaymentMethod = ({ token, trigger, chainIdsFilter, lockedChainIds, context
99
99
  ...chainFilterOptions
100
100
  ], [isReceivingDepositAddress, chainFilterOptions]);
101
101
  const useDefaultTokenList = debouncedTokenSearchValue === '';
102
- const { balanceMap: tokenBalances, data: duneTokens, isLoading: isLoadingBalances } = (0, useMultiWalletBalances_js_1.useMultiWalletBalances)(linkedWallets, address, relayClient?.baseApiUrl?.includes('testnet') ? 'testnet' : 'mainnet');
103
- const filteredDuneTokenBalances = (0, react_1.useMemo)(() => {
104
- return duneTokens?.balances;
105
- }, [duneTokens?.balances]);
102
+ const { balanceMap: tokenBalances, data: walletTokens, isLoading: isLoadingBalances } = (0, useMultiWalletBalances_js_1.useMultiWalletBalances)(linkedWallets, address);
103
+ const filteredTokenBalances = (0, react_1.useMemo)(() => {
104
+ return walletTokens?.balances;
105
+ }, [walletTokens?.balances]);
106
106
  const userTokensQuery = (0, react_1.useMemo)(() => {
107
- if (filteredDuneTokenBalances && filteredDuneTokenBalances.length > 0) {
108
- const sortedBalances = [...filteredDuneTokenBalances]
107
+ if (filteredTokenBalances && filteredTokenBalances.length > 0) {
108
+ const sortedBalances = [...filteredTokenBalances]
109
109
  .sort((a, b) => {
110
110
  const aValue = a.value_usd || 0;
111
111
  const bValue = b.value_usd || 0;
@@ -115,7 +115,7 @@ const PaymentMethod = ({ token, trigger, chainIdsFilter, lockedChainIds, context
115
115
  return sortedBalances.map((balance) => `${balance.chain_id}:${balance.address}`);
116
116
  }
117
117
  return undefined;
118
- }, [filteredDuneTokenBalances]);
118
+ }, [filteredTokenBalances]);
119
119
  const { data: userTokens, isLoading: isLoadingUserTokens } = (0, relay_kit_hooks_1.useTokenList)(relayClient?.baseApiUrl, userTokensQuery
120
120
  ? {
121
121
  tokens: userTokensQuery,
@@ -124,7 +124,7 @@ const PaymentMethod = ({ token, trigger, chainIdsFilter, lockedChainIds, context
124
124
  referrer: relayClient?.source
125
125
  }
126
126
  : undefined, {
127
- enabled: !!filteredDuneTokenBalances
127
+ enabled: !!filteredTokenBalances
128
128
  });
129
129
  const isSearchTermValidAddress = (0, address_js_1.isValidAddress)(chainFilter.vmType, debouncedTokenSearchValue, chainFilter.id);
130
130
  const { data: trendingTokens, isLoading: isLoadingTrendingTokens } = (0, relay_kit_hooks_2.useTrendingCurrencies)(relayClient?.baseApiUrl, {
@@ -336,7 +336,7 @@ const PaymentMethod = ({ token, trigger, chainIdsFilter, lockedChainIds, context
336
336
  handleTokenSelection(token);
337
337
  } })) : null, tokenSearchInput.length > 0 ? ((0, jsx_runtime_1.jsx)(TokenList_js_1.TokenList, { title: "Results", tokens: sortedCombinedTokens, isLoading: isLoadingTokenList ||
338
338
  tokenSearchInput !== debouncedTokenSearchValue, isLoadingBalances: isLoadingBalances, chainFilterId: chainFilter.id })) : chainFilter.id ? ((0, jsx_runtime_1.jsx)(TokenList_js_1.TokenList, { title: "Tokens", tokens: sortedCombinedTokens, isLoading: isLoadingTokenList, isLoadingBalances: isLoadingBalances, chainFilterId: chainFilter.id })) : ((0, jsx_runtime_1.jsx)(index_js_1.Flex, { direction: "column", className: "relay:gap-3", children: (() => {
339
- const hasLoadedBalanceData = Boolean(duneTokens);
339
+ const hasLoadedBalanceData = Boolean(walletTokens);
340
340
  const userTokensReady = !isLoadingUserTokens;
341
341
  const isWaitingForBalanceData = address &&
342
342
  (isLoadingBalances || isLoadingUserTokens) &&