@velora-dex/widget 0.8.1 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (575) hide show
  1. package/dist/components/SearchInput/SearchInput.js.map +1 -1
  2. package/dist/components/ui/accordion.js.map +1 -1
  3. package/dist/components/ui/button.js.map +1 -1
  4. package/dist/components/ui/card.js.map +1 -1
  5. package/dist/components/ui/drawer.js.map +1 -1
  6. package/dist/components/ui/dropdown-menu.js.map +1 -1
  7. package/dist/components/ui/input.js.map +1 -1
  8. package/dist/components/ui/progress.js.map +1 -1
  9. package/dist/components/ui/skeleton.js.map +1 -1
  10. package/dist/components/ui/sonner.js.map +1 -1
  11. package/dist/components/ui/switch.js.map +1 -1
  12. package/dist/components/ui/tooltip.js.map +1 -1
  13. package/dist/components/web3/AccountButton.js.map +1 -1
  14. package/dist/components/web3/ConnectExternalProvider/AutoconnectExternal.js.map +1 -1
  15. package/dist/components/web3/ConnectExternalProvider/metamaskProviderWrapper.js.map +1 -1
  16. package/dist/components/web3/ConnectExternalProvider/safeProviderWrapper.js.map +1 -1
  17. package/dist/components/web3/ConnectExternalProvider/utils.js.map +1 -1
  18. package/dist/components/web3/ConnectWallets/WalletConnectButtons.js.map +1 -1
  19. package/dist/components/web3/ConnectWallets/index.js +1 -1
  20. package/dist/components/web3/ConnectWallets/index.js.map +1 -1
  21. package/dist/components/web3/ConnectWallets/privy/button.js.map +1 -1
  22. package/dist/components/web3/ConnectWallets/privy/connectRunner.js.map +1 -1
  23. package/dist/components/web3/ConnectWallets/privy/iframe.js.map +1 -1
  24. package/dist/components/web3/ConnectWallets/privy/provider.js.map +1 -1
  25. package/dist/components/web3/ConnectWallets/walletFlags.js.map +1 -1
  26. package/dist/components/web3/ConnectWallets/walletIcons.js.map +1 -1
  27. package/dist/components/web3/ConnectedWallet/ConnectedWallet.js.map +1 -1
  28. package/dist/components/web3/providers.js.map +1 -1
  29. package/dist/components/widget/AppHeader/Activities/Activities.js.map +1 -1
  30. package/dist/components/widget/AppHeader/Activities/ActivitiesScreen.js.map +1 -1
  31. package/dist/components/widget/AppHeader/Activities/ActivityItems.js.map +1 -1
  32. package/dist/components/widget/AppHeader/Activities/Drawers.js.map +1 -1
  33. package/dist/components/widget/AppHeader/Activities/hooks.js.map +1 -1
  34. package/dist/components/widget/AppHeader/Activities/utils.js.map +1 -1
  35. package/dist/components/widget/AppHeader/ActivityButton.js.map +1 -1
  36. package/dist/components/widget/AppHeader/AppHeader.js.map +1 -1
  37. package/dist/components/widget/AppHeader/TradeModeSwitcher.js.map +1 -1
  38. package/dist/components/widget/AppHeader/state/showMoreAtom.js.map +1 -1
  39. package/dist/components/widget/BridgeList/BridgeListItem.js.map +1 -1
  40. package/dist/components/widget/BridgeList/BridgeProtocolsList.js.map +1 -1
  41. package/dist/components/widget/BridgeList/BridgesList.js.map +1 -1
  42. package/dist/components/widget/BridgeList/hooks.js.map +1 -1
  43. package/dist/components/widget/BridgePreferences/BridgePreferences.js.map +1 -1
  44. package/dist/components/widget/BridgeSelectorExpandable/BridgeSelectorExpandable.js.map +1 -1
  45. package/dist/components/widget/Button/CancelButton/CancelButton.js.map +1 -1
  46. package/dist/components/widget/Button/CancelButton/CancelButtonWithDrawer.js.map +1 -1
  47. package/dist/components/widget/Button/DismissButton.js.map +1 -1
  48. package/dist/components/widget/Button/RefreshButton.js.map +1 -1
  49. package/dist/components/widget/CompareQuotes/CompareQuotes.js.map +1 -1
  50. package/dist/components/widget/Details/DetailWithTooltip.js.map +1 -1
  51. package/dist/components/widget/Details/DetailWithValueList.js.map +1 -1
  52. package/dist/components/widget/Details/DetailWithValueListExpandable.js.map +1 -1
  53. package/dist/components/widget/Details/SwapDetailsExpandable.js.map +1 -1
  54. package/dist/components/widget/DexesList/DexItem.js.map +1 -1
  55. package/dist/components/widget/DexesList/DexesList.js.map +1 -1
  56. package/dist/components/widget/DexesList/getDexProps.js.map +1 -1
  57. package/dist/components/widget/Dialog/ReceiverAddressDialog/ReceiverAddressDialog.js.map +1 -1
  58. package/dist/components/widget/Dialog/ReceiverAddressDialog/ReceiverAddressInput.js.map +1 -1
  59. package/dist/components/widget/Dialog/SelectTokenDialog/SelectTokenDialog.js.map +1 -1
  60. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/AcrossTokenList.js.map +1 -1
  61. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/RegularTokenList.js.map +1 -1
  62. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenCloud/index.js.map +1 -1
  63. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListBody.js.map +1 -1
  64. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListRow.js.map +1 -1
  65. package/dist/components/widget/Dialog/SelectTokenDialog/TokenSearch.js.map +1 -1
  66. package/dist/components/widget/Drawer/Overlay.js.map +1 -1
  67. package/dist/components/widget/Drawer/index.js.map +1 -1
  68. package/dist/components/widget/Drawer/state/useDrawerControls.js.map +1 -1
  69. package/dist/components/widget/Duration/Duration.js.map +1 -1
  70. package/dist/components/widget/Duration/utils.js.map +1 -1
  71. package/dist/components/widget/EnabledExchanges/EnabledExchanges.js.map +1 -1
  72. package/dist/components/widget/EnabledExchanges/EnabledExchangesList.js.map +1 -1
  73. package/dist/components/widget/EnabledList/EnabledList.js.map +1 -1
  74. package/dist/components/widget/FetchingQuotes/FetchingQuotes.js.map +1 -1
  75. package/dist/components/widget/Icon/CheckIcon.js.map +1 -1
  76. package/dist/components/widget/Icon/ChevronIcon.js.map +1 -1
  77. package/dist/components/widget/Icon/DeltaIcon.js.map +1 -1
  78. package/dist/components/widget/Icon/EllipseIcon.js.map +1 -1
  79. package/dist/components/widget/Icon/InfoIcon.js.map +1 -1
  80. package/dist/components/widget/Icon/MarketIcon.js.map +1 -1
  81. package/dist/components/widget/Icon/SliderIcon.js.map +1 -1
  82. package/dist/components/widget/ImportToken/ImportToken.js.map +1 -1
  83. package/dist/components/widget/ImportToken/useImportTokenDrawer.js.map +1 -1
  84. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/Controls.js.map +1 -1
  85. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/LimitOrderDetails.js.map +1 -1
  86. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/utils.js.map +1 -1
  87. package/dist/components/widget/LimitOrderItem/LimitOrderListItem.js +5 -8
  88. package/dist/components/widget/LimitOrderItem/LimitOrderListItem.js.map +1 -1
  89. package/dist/components/widget/LimitOrderItem/constants.js.map +1 -1
  90. package/dist/components/widget/LimitOrderItem/utils.js.map +1 -1
  91. package/dist/components/widget/LimitPriceInput/index.js +6 -6
  92. package/dist/components/widget/LimitPriceInput/index.js.map +1 -1
  93. package/dist/components/widget/Line/Line.js.map +1 -1
  94. package/dist/components/widget/ListItem/ListItemWithSwitch.js.map +1 -1
  95. package/dist/components/widget/NetworkIcon/NetworkIconSquare.js.map +1 -1
  96. package/dist/components/widget/NetworkSwitcher/CompactNetworkSwitcher.js.map +1 -1
  97. package/dist/components/widget/NetworkSwitcher/NetworkSwitcherDropdown.js.map +1 -1
  98. package/dist/components/widget/NetworkSwitcher/NetworkSwitcherList.js.map +1 -1
  99. package/dist/components/widget/NetworkSwitcher/common/AllNetworksItem.js.map +1 -1
  100. package/dist/components/widget/NetworkSwitcher/common/NetworkItem.js.map +1 -1
  101. package/dist/components/widget/NetworkSwitcher/utils/items.js.map +1 -1
  102. package/dist/components/widget/NetworkWithIcon/NetworkIconWithChevron.js.map +1 -1
  103. package/dist/components/widget/NetworkWithIcon/NetworkWithIcon.js.map +1 -1
  104. package/dist/components/widget/NumberInput/NumberInput.js.map +1 -1
  105. package/dist/components/widget/OrderExpiryInput/index.js.map +1 -1
  106. package/dist/components/widget/OtcOrderItem/OtcOrderDetails/Controls.js.map +1 -1
  107. package/dist/components/widget/OtcOrderItem/OtcOrderDetails/OtcOrderDetails.js.map +1 -1
  108. package/dist/components/widget/OtcOrderItem/OtcOrderDetails/utils.js.map +1 -1
  109. package/dist/components/widget/OtcOrderItem/OtcOrderListItem.js +5 -8
  110. package/dist/components/widget/OtcOrderItem/OtcOrderListItem.js.map +1 -1
  111. package/dist/components/widget/OtcOrderItem/constants.js.map +1 -1
  112. package/dist/components/widget/OtcOrderItem/utils.js.map +1 -1
  113. package/dist/components/widget/PayReceiveInfo/PayReceiveInfo.js.map +1 -1
  114. package/dist/components/widget/PoweredBy/PoweredBy.js.map +1 -1
  115. package/dist/components/widget/ReceiverAddress/ReceiverAddress.js.map +1 -1
  116. package/dist/components/widget/ReceiverAddress/state/receiverAddressAtom.js.map +1 -1
  117. package/dist/components/widget/ReceiverAddress/state/subscriptions.js.map +1 -1
  118. package/dist/components/widget/ReviewAndConfirm/FillOtcReviewAndConfirm/FillOtcControls.js.map +1 -1
  119. package/dist/components/widget/ReviewAndConfirm/FillOtcReviewAndConfirm/FillOtcReviewAndConfirm.js.map +1 -1
  120. package/dist/components/widget/ReviewAndConfirm/FillOtcReviewAndConfirm/utils.js.map +1 -1
  121. package/dist/components/widget/RowVirtualizer/RowVirtualizerFixed.js.map +1 -1
  122. package/dist/components/widget/Screen/GenericScreen.js.map +1 -1
  123. package/dist/components/widget/Screen/ScreenContainer.js.map +1 -1
  124. package/dist/components/widget/SelectToken/SelectTokenButton.js.map +1 -1
  125. package/dist/components/widget/SettingsButton/SettingsButton.js.map +1 -1
  126. package/dist/components/widget/SwapModeSwitcher/SwapModeSwitcherExpandable.js.map +1 -1
  127. package/dist/components/widget/SwapModeSwitcher/state/swapModeActionsAtom.js.map +1 -1
  128. package/dist/components/widget/SwapModeSwitcher/state/swapSideAtom.js.map +1 -1
  129. package/dist/components/widget/SwapRate/SwapRate.js.map +1 -1
  130. package/dist/components/widget/SwapRate/SwapRateWithTooltip.js.map +1 -1
  131. package/dist/components/widget/SwapRate/utils.js.map +1 -1
  132. package/dist/components/widget/SwapRateWithPriceImpactRow/SwapRateWithPriceImpactRow.js.map +1 -1
  133. package/dist/components/widget/Tabs/Tabs.js.map +1 -1
  134. package/dist/components/widget/Toasts/CustomToast.js.map +1 -1
  135. package/dist/components/widget/TokenBadge/TokenBadge.js.map +1 -1
  136. package/dist/components/widget/TokenBadge/TokenLink.js.map +1 -1
  137. package/dist/components/widget/TokenInput/InputContainer.js.map +1 -1
  138. package/dist/components/widget/TokenInput/InputField.js.map +1 -1
  139. package/dist/components/widget/TokenInput/InputFooter.js.map +1 -1
  140. package/dist/components/widget/TokenInput/InputHeader.js.map +1 -1
  141. package/dist/components/widget/TokenInput/common/Balance.js.map +1 -1
  142. package/dist/components/widget/TokenInput/common/MaxButtons.js.map +1 -1
  143. package/dist/components/widget/TokenInput/index.js.map +1 -1
  144. package/dist/components/widget/TokenSwitcher/TokenSwitcher.js.map +1 -1
  145. package/dist/components/widget/TradeOverview/CancelButtonWithDrawer.js.map +1 -1
  146. package/dist/components/widget/TradeOverview/CancelOrder/ConfirmCancel.js.map +1 -1
  147. package/dist/components/widget/TradeOverview/CancelOrder/utils.js.map +1 -1
  148. package/dist/components/widget/TradeOverview/DeltaOrderTradeOverview.js.map +1 -1
  149. package/dist/components/widget/TradeOverview/FillOtcOrderTradeOverview.js.map +1 -1
  150. package/dist/components/widget/TradeOverview/LimitOrderTradeOverview.js.map +1 -1
  151. package/dist/components/widget/TradeOverview/MarketSwapTradeOverview.js.map +1 -1
  152. package/dist/components/widget/TradeOverview/OtcOrderTradeOverview.js.map +1 -1
  153. package/dist/components/widget/TradeOverview/Step/Step.js.map +1 -1
  154. package/dist/components/widget/TradeOverview/Step/utils.js.map +1 -1
  155. package/dist/components/widget/TradeOverview/Stepper.js.map +1 -1
  156. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteFooter.js.map +1 -1
  157. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteHeader.js.map +1 -1
  158. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompletedDetails.js.map +1 -1
  159. package/dist/components/widget/TradeOverview/TradeComplete/index.js.map +1 -1
  160. package/dist/components/widget/TradeOverview/TradeComplete/useTradeCompleteDetails.js.map +1 -1
  161. package/dist/components/widget/TradeOverview/TradeComplete/utils.js.map +1 -1
  162. package/dist/components/widget/TradeOverview/TradeDetails.js.map +1 -1
  163. package/dist/components/widget/TradeOverview/TradeDetailsDisplay.js.map +1 -1
  164. package/dist/components/widget/TradeOverview/TradeError/TradeErrorDetails.js.map +1 -1
  165. package/dist/components/widget/TradeOverview/TradeError/TradeErrorFooter.js.map +1 -1
  166. package/dist/components/widget/TradeOverview/TradeError/index.js.map +1 -1
  167. package/dist/components/widget/TradeOverview/TradeError/utils.js.map +1 -1
  168. package/dist/components/widget/TradeOverview/TradeOverview.js.map +1 -1
  169. package/dist/components/widget/TradeOverview/TradeOverviewFooter.js.map +1 -1
  170. package/dist/components/widget/TradeOverview/TradeOverviewHeader.js.map +1 -1
  171. package/dist/components/widget/TradeOverview/TradeOverviewScreen.js.map +1 -1
  172. package/dist/components/widget/TradeOverview/TwapOrderTradeOverview.js.map +1 -1
  173. package/dist/components/widget/TradeOverview/VerticalDash.js.map +1 -1
  174. package/dist/components/widget/TradeOverview/tradeFlowContext.js.map +1 -1
  175. package/dist/components/widget/TradeOverview/utils/isNonFlowStep.js.map +1 -1
  176. package/dist/components/widget/TradeOverview/utils/preWrap.js.map +1 -1
  177. package/dist/components/widget/TradeOverview/utils/useSwapAmountsWithSlippage.js.map +1 -1
  178. package/dist/components/widget/TradeParameters/BridgePreferenceParameters/BridgePreferenceParameters.js.map +1 -1
  179. package/dist/components/widget/TradeParameters/BridgePreferenceParameters/useDraftBridgePreferencesState.js.map +1 -1
  180. package/dist/components/widget/TradeParameters/DegenModeConfirmation.js.map +1 -1
  181. package/dist/components/widget/TradeParameters/DegenModeParameter.js.map +1 -1
  182. package/dist/components/widget/TradeParameters/DeltaParameter.js.map +1 -1
  183. package/dist/components/widget/TradeParameters/EIP1559Parameter.js.map +1 -1
  184. package/dist/components/widget/TradeParameters/EnabledExchangesParameters/EnabledExchangesParameters.js.map +1 -1
  185. package/dist/components/widget/TradeParameters/EnabledExchangesParameters/useDraftEnabledExchangesState.js.map +1 -1
  186. package/dist/components/widget/TradeParameters/SlippageParameter/CustomSlippageInput.js.map +1 -1
  187. package/dist/components/widget/TradeParameters/SlippageParameter/EditSlippage.js.map +1 -1
  188. package/dist/components/widget/TradeParameters/SlippageParameter/SlippageParameter.js.map +1 -1
  189. package/dist/components/widget/TradeParameters/SlippageParameter/hooks/useCustomSlippageProps.js.map +1 -1
  190. package/dist/components/widget/TradeParameters/TradeParameters.js.map +1 -1
  191. package/dist/components/widget/TradeParameters/TransactionSpeedParameter.js.map +1 -1
  192. package/dist/components/widget/TradeParameters/hooks/useIsNotDefaultAnyParameter.js.map +1 -1
  193. package/dist/components/widget/TradeParameters/state/bridgePreferences/bridgePreferenceAtom.js.map +1 -1
  194. package/dist/components/widget/TradeParameters/state/bridgePreferences/disabledBridgesAtom.js.map +1 -1
  195. package/dist/components/widget/TradeParameters/state/bridgePreferences/excludeBridgesAtom.js.map +1 -1
  196. package/dist/components/widget/TradeParameters/state/bridgePreferences/protocolNameAtom.js.map +1 -1
  197. package/dist/components/widget/TradeParameters/state/bridgePreferences/resetDraftsAtom.js.map +1 -1
  198. package/dist/components/widget/TradeParameters/state/bridgePreferences/useBridgePreferences.js.map +1 -1
  199. package/dist/components/widget/TradeParameters/state/deltaParamActionsAtom.js.map +1 -1
  200. package/dist/components/widget/TradeParameters/state/enabledExchanges/disabledDexesAtomFamily.js.map +1 -1
  201. package/dist/components/widget/TradeParameters/state/enabledExchanges/useDisabledDexes.js.map +1 -1
  202. package/dist/components/widget/TradeParameters/state/slippageParamAtom.js.map +1 -1
  203. package/dist/components/widget/TradeParameters/state/tradePreferencesAtom.js.map +1 -1
  204. package/dist/components/widget/TradeParameters/useTempTradeParameters.js.map +1 -1
  205. package/dist/components/widget/TransactionDetails/LimitOrderDetails/Controls.js.map +1 -1
  206. package/dist/components/widget/TransactionDetails/LimitOrderDetails/TransactionDetails.js.map +1 -1
  207. package/dist/components/widget/TransactionDetails/LimitOrderDetails/utils.js.map +1 -1
  208. package/dist/components/widget/TransactionDetails/TransactionListItem.js.map +1 -1
  209. package/dist/components/widget/TransactionDetails/utils.js.map +1 -1
  210. package/dist/components/widget/Twap/CustomDurationDrawer.js.map +1 -1
  211. package/dist/components/widget/Twap/OrderDuration.js.map +1 -1
  212. package/dist/components/widget/Twap/OrderSplit.js.map +1 -1
  213. package/dist/components/widget/Twap/RateProtection.js.map +1 -1
  214. package/dist/components/widget/Twap/TwapDetailWithTooltip.js.map +1 -1
  215. package/dist/components/widget/Warning/InsufficientBalanceMessage.js.map +1 -1
  216. package/dist/components/widget/Warning/Warning.js.map +1 -1
  217. package/dist/components/widget/Warning/WarningMessage.js.map +1 -1
  218. package/dist/components/widget/WrapEth/WrapEthContent.js.map +1 -1
  219. package/dist/components/widget/WrapEth/WrapEthDrawerButton.js.map +1 -1
  220. package/dist/components/widget/WrapEth/hooks/useSubmitDepositTxMutation.js.map +1 -1
  221. package/dist/components/widget/WrapEth/hooks/useWrapEthProps.js.map +1 -1
  222. package/dist/components/widget/YouGet/YouGet.js.map +1 -1
  223. package/dist/core/ConnectWalletDrawerButton.js.map +1 -1
  224. package/dist/core/LimitOrderButton.js.map +1 -1
  225. package/dist/core/LimitOrderDetails.js.map +1 -1
  226. package/dist/core/OtcOrderButton.js.map +1 -1
  227. package/dist/core/OtcOrderDetails.js.map +1 -1
  228. package/dist/core/Toaster.js.map +1 -1
  229. package/dist/core/TradeFlowScreenButton.js.map +1 -1
  230. package/dist/core/TwapDetails.js.map +1 -1
  231. package/dist/core/Updaters.js.map +1 -1
  232. package/dist/core/Warnings.js.map +1 -1
  233. package/dist/core/across/isCrosschainPossible.js.map +1 -1
  234. package/dist/core/across/utils.js.map +1 -1
  235. package/dist/core/button/hooks/useWidgetButtonExtraProps.js.map +1 -1
  236. package/dist/core/index.js.map +1 -1
  237. package/dist/core/inputs/hooks/useMaxButtonProps.js.map +1 -1
  238. package/dist/core/inputs/hooks/useTokenFromInputProps.js.map +1 -1
  239. package/dist/core/inputs/hooks/useTokenSwitcherProps.js.map +1 -1
  240. package/dist/core/inputs/hooks/useTokenToInputProps.js.map +1 -1
  241. package/dist/core/inputs/hooks/useWarningMessage.js.map +1 -1
  242. package/dist/core/inputs/hooks/utils.js.map +1 -1
  243. package/dist/core/inputs/state/common.js.map +1 -1
  244. package/dist/core/inputs/state/inputAmountAtom.js.map +1 -1
  245. package/dist/core/inputs/state/selectedTokenActionsAtom.js.map +1 -1
  246. package/dist/core/inputs/state/selectedTokenAtom.js.map +1 -1
  247. package/dist/core/inputs/state/setTokenByAddressAtom.js.map +1 -1
  248. package/dist/core/inputs/state/subscriptions.js.map +1 -1
  249. package/dist/core/limit/state/deadlineAtom.js.map +1 -1
  250. package/dist/core/limit/state/isCrosschainAtom.js.map +1 -1
  251. package/dist/core/limit/state/limitInputActionsAtom.js.map +1 -1
  252. package/dist/core/limit/state/limitInputAmountAtom.js.map +1 -1
  253. package/dist/core/limit/state/receiverAddressAtom.js.map +1 -1
  254. package/dist/core/limit/state/selectedTokenActionsAtom.js.map +1 -1
  255. package/dist/core/limit/state/selectedTokenAtom.js.map +1 -1
  256. package/dist/core/limit/state/utils.js.map +1 -1
  257. package/dist/core/limit/useLimitDetailsListProps.js.map +1 -1
  258. package/dist/core/limit/useLimitNotSupported.js.map +1 -1
  259. package/dist/core/limit/useLimitPriceDifference.js.map +1 -1
  260. package/dist/core/limit/useLimitPriceInputProps.js.map +1 -1
  261. package/dist/core/limit/useLimitRate.js.map +1 -1
  262. package/dist/core/limit/useLimitTokenFromInputProps.js.map +1 -1
  263. package/dist/core/limit/useLimitTokenSwitcherProps.js.map +1 -1
  264. package/dist/core/limit/useLimitTokenToInputProps.js.map +1 -1
  265. package/dist/core/logger.js.map +1 -1
  266. package/dist/core/otc/state/deadlineAtom.js.map +1 -1
  267. package/dist/core/otc/state/otcInputActionsAtom.js.map +1 -1
  268. package/dist/core/otc/state/otcInputAmountAtom.js.map +1 -1
  269. package/dist/core/otc/state/receiverAddressAtom.js.map +1 -1
  270. package/dist/core/otc/state/selectedTokenActionsAtom.js.map +1 -1
  271. package/dist/core/otc/state/selectedTokenAtom.js.map +1 -1
  272. package/dist/core/otc/useOtcDetailsListProps.js.map +1 -1
  273. package/dist/core/otc/useOtcNotSupported.js.map +1 -1
  274. package/dist/core/otc/useOtcPriceDifference.js.map +1 -1
  275. package/dist/core/otc/useOtcPriceInputProps.js.map +1 -1
  276. package/dist/core/otc/useOtcTokenFromInputProps.js.map +1 -1
  277. package/dist/core/otc/useOtcTokenSwitcherProps.js.map +1 -1
  278. package/dist/core/otc/useOtcTokenToInputProps.js.map +1 -1
  279. package/dist/core/screen/hooks/useInitialValue.js.map +1 -1
  280. package/dist/core/screen/hooks/useOnClickOutside.js.map +1 -1
  281. package/dist/core/screen/hooks/useResizeObserver.js.map +1 -1
  282. package/dist/core/screen/hooks/useRunOnMount.js.map +1 -1
  283. package/dist/core/screen/state/hooks/useScreen.js.map +1 -1
  284. package/dist/core/screen/state/hooks/useScreenValue.js.map +1 -1
  285. package/dist/core/screen/state/hooks/useSetScreen.js.map +1 -1
  286. package/dist/core/screen/state/screenAtom.js.map +1 -1
  287. package/dist/core/state/apiConfigAtom.js.map +1 -1
  288. package/dist/core/state/chainToAtom.js.map +1 -1
  289. package/dist/core/state/configActionsAtom.js.map +1 -1
  290. package/dist/core/state/configEffectAtom.js.map +1 -1
  291. package/dist/core/state/containerAtom.js.map +1 -1
  292. package/dist/core/state/enabledChainsAtom.js.map +1 -1
  293. package/dist/core/state/enabledTradeModesAtom.js.map +1 -1
  294. package/dist/core/state/externalProviderAtom.js.map +1 -1
  295. package/dist/core/state/getSelectableDestChains.js.map +1 -1
  296. package/dist/core/state/isCrosschainAtom.js.map +1 -1
  297. package/dist/core/state/tradeModeAtom.js.map +1 -1
  298. package/dist/core/state/validatedPartnerConfigAtom.js.map +1 -1
  299. package/dist/core/state/validatedReferrerConfigAtom.js.map +1 -1
  300. package/dist/core/state/widgetEventsAtom.js.map +1 -1
  301. package/dist/core/subscriptions.js.map +1 -1
  302. package/dist/core/swapDetails/fees.js.map +1 -1
  303. package/dist/core/swapDetails/maxToPay.js.map +1 -1
  304. package/dist/core/swapDetails/orderRouting.js.map +1 -1
  305. package/dist/core/swapDetails/priceImpact.js.map +1 -1
  306. package/dist/core/swapDetails/useSwapDetailsListProps.js.map +1 -1
  307. package/dist/core/swapDetails/youGet.js.map +1 -1
  308. package/dist/core/twap/state/isCrosschainAtom.js.map +1 -1
  309. package/dist/core/twap/state/selectedTokenActionsAtom.js.map +1 -1
  310. package/dist/core/twap/state/twapInputAmountAtom.js.map +1 -1
  311. package/dist/core/twap/state/twapParamsAtom.js.map +1 -1
  312. package/dist/core/twap/state/twapSideAtom.js.map +1 -1
  313. package/dist/core/twap/twapDetails/minimumReceiveable.js.map +1 -1
  314. package/dist/core/twap/useTwapDetailsListProps.js.map +1 -1
  315. package/dist/core/twap/useTwapTokenFromInputProps.js.map +1 -1
  316. package/dist/core/twap/useTwapTokenSwitcherProps.js.map +1 -1
  317. package/dist/core/twap/useTwapTokenToInputProps.js.map +1 -1
  318. package/dist/events/effects/formInput.js.map +1 -1
  319. package/dist/events/effects/price.js.map +1 -1
  320. package/dist/events/effects/swapMode.js.map +1 -1
  321. package/dist/events/getters/limit.js.map +1 -1
  322. package/dist/events/getters/otc.js.map +1 -1
  323. package/dist/events/getters/settings.js.map +1 -1
  324. package/dist/events/getters/swap.js.map +1 -1
  325. package/dist/events/getters/twap.js.map +1 -1
  326. package/dist/events/getters/widgetState.js.map +1 -1
  327. package/dist/events/hooks/useActivateEffects.js.map +1 -1
  328. package/dist/events/hooks/useOnPriceUpdates.js.map +1 -1
  329. package/dist/events/hooks/useOnWalletConnect.js.map +1 -1
  330. package/dist/external/.pnpm/vaul@1.1.2_patch_hash_07b36ba5def3805dde9d543a880ba9e4caf55e5eb58e544faaa2c186846bf3c1__6feb48fe37bd41e9af5c8e81d5a6f4e1/external/vaul/dist/index.js.map +1 -1
  331. package/dist/hooks/batch/useAwaitCalls.js.map +1 -1
  332. package/dist/hooks/batch/useBatchWithApproveTxs.js.map +1 -1
  333. package/dist/hooks/batch/useCanBatchTxs.js.map +1 -1
  334. package/dist/hooks/batch/useSendBatchTx.js.map +1 -1
  335. package/dist/hooks/connectors/useIsConnectedSafe.js.map +1 -1
  336. package/dist/hooks/connectors/useIsGnosisSafeConnector.js.map +1 -1
  337. package/dist/hooks/connectors/useIsSafeThroughWalletConnect.js.map +1 -1
  338. package/dist/hooks/gas/useGasPrices.js.map +1 -1
  339. package/dist/hooks/gas/utils.js.map +1 -1
  340. package/dist/hooks/getCode/query.js.map +1 -1
  341. package/dist/hooks/getCode/useIsAccountContract.js.map +1 -1
  342. package/dist/hooks/getCode/useIsContractAtAddress.js.map +1 -1
  343. package/dist/hooks/otc/mutations/useCancelLimitOrder.js.map +1 -1
  344. package/dist/hooks/otc/mutations/useCreateLimitOrder.js.map +1 -1
  345. package/dist/hooks/otc/mutations/useFillOrder.js.map +1 -1
  346. package/dist/hooks/otc/mutations/utils.js.map +1 -1
  347. package/dist/hooks/otc/queries/useLimitOrderRequiredBalance.js.map +1 -1
  348. package/dist/hooks/otc/queries/useLimitOrders.js.map +1 -1
  349. package/dist/hooks/otc/tradeFlow/useFillOtcOrderFlow.js.map +1 -1
  350. package/dist/hooks/otc/tradeFlow/useFillOtcOrderStep.js.map +1 -1
  351. package/dist/hooks/otc/tradeFlow/useOtcOrderFlow.js.map +1 -1
  352. package/dist/hooks/otc/tradeFlow/useOtcOrderStep.js.map +1 -1
  353. package/dist/hooks/permit/hooks/common/useSignArbitraryTypedData.js.map +1 -1
  354. package/dist/hooks/permit/hooks/common/useSignPermit.js.map +1 -1
  355. package/dist/hooks/permit/hooks/common/useWalletSupportsPermit.js.map +1 -1
  356. package/dist/hooks/permit/hooks/permit1/useGetPermitInfo.js.map +1 -1
  357. package/dist/hooks/permit/hooks/permit1/useGetSafePermitInfo.js.map +1 -1
  358. package/dist/hooks/permit/hooks/permit1/usePermit1Nonce.js.map +1 -1
  359. package/dist/hooks/permit/hooks/permit1/useSignTokenPermit1.js.map +1 -1
  360. package/dist/hooks/permit/hooks/permit1/useTokenFromPermit1Nonce.js.map +1 -1
  361. package/dist/hooks/permit/hooks/permit1/useTokenFromPermitInfo.js.map +1 -1
  362. package/dist/hooks/permit/hooks/permit1/useTryToSignPermit1.js.map +1 -1
  363. package/dist/hooks/permit/hooks/permit2/usePermit2Allowance.js.map +1 -1
  364. package/dist/hooks/permit/hooks/permit2/usePermit2TransferFromNonce.js.map +1 -1
  365. package/dist/hooks/permit/hooks/permit2/useSignTokenPermit2TransferFrom.js.map +1 -1
  366. package/dist/hooks/permit/hooks/permit2/useTokenFromPermit2Allowance.js.map +1 -1
  367. package/dist/hooks/permit/hooks/permit2/useTokenFromPermit2TransferFromNonce.js.map +1 -1
  368. package/dist/hooks/permit/utils/constants.js.map +1 -1
  369. package/dist/hooks/permit/utils/construct.js.map +1 -1
  370. package/dist/hooks/permit/utils/deadlines.js.map +1 -1
  371. package/dist/hooks/permit/utils/detect.js.map +1 -1
  372. package/dist/hooks/permit/utils/domainSeparator.js.map +1 -1
  373. package/dist/hooks/permit/utils/encodeArgs.js.map +1 -1
  374. package/dist/hooks/permit/utils/trySignPermit1.js.map +1 -1
  375. package/dist/hooks/permit/utils/utils.js.map +1 -1
  376. package/dist/hooks/sdk/useGetContracts.js.map +1 -1
  377. package/dist/hooks/sdk/useSpender.js.map +1 -1
  378. package/dist/hooks/swap/prices/delta/bridge/useSelectedBridgePrice.js.map +1 -1
  379. package/dist/hooks/swap/prices/delta/bridge/utils.js.map +1 -1
  380. package/dist/hooks/swap/prices/delta/mutations/twap/useCreatePreSignableTwapOrder.js.map +1 -1
  381. package/dist/hooks/swap/prices/delta/mutations/twap/useCreateTwapOrder.js.map +1 -1
  382. package/dist/hooks/swap/prices/delta/mutations/twap/useDepositAndSubmitTwapOrder.js.map +1 -1
  383. package/dist/hooks/swap/prices/delta/mutations/twap/usePostTwapOrder.js.map +1 -1
  384. package/dist/hooks/swap/prices/delta/mutations/twap/usePreSignAndSubmitTwapOrder.js.map +1 -1
  385. package/dist/hooks/swap/prices/delta/mutations/twap/useTwapOrderToPost.js.map +1 -1
  386. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrders.js.map +1 -1
  387. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrdersEvents.js.map +1 -1
  388. package/dist/hooks/swap/prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder.js.map +1 -1
  389. package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.js.map +1 -1
  390. package/dist/hooks/swap/prices/delta/mutations/useCreatePreSignableDeltaOrder.js.map +1 -1
  391. package/dist/hooks/swap/prices/delta/mutations/useDeltaOrderToPost.js.map +1 -1
  392. package/dist/hooks/swap/prices/delta/mutations/useIsDeltaOrderCancellable.js.map +1 -1
  393. package/dist/hooks/swap/prices/delta/mutations/usePostDeltaOrder.js.map +1 -1
  394. package/dist/hooks/swap/prices/delta/mutations/useSendDepositPreSignDeltaOrderTx.js.map +1 -1
  395. package/dist/hooks/swap/prices/delta/mutations/useWithdrawAndCancelDeltaOrder.js.map +1 -1
  396. package/dist/hooks/swap/prices/delta/mutations/utils.js.map +1 -1
  397. package/dist/hooks/swap/prices/delta/orders/unposted/effect.js.map +1 -1
  398. package/dist/hooks/swap/prices/delta/orders/unposted/index.js.map +1 -1
  399. package/dist/hooks/swap/prices/delta/orders/unposted/storage.js.map +1 -1
  400. package/dist/hooks/swap/prices/delta/orders/unposted/utils.d.ts +8 -11
  401. package/dist/hooks/swap/prices/delta/orders/unposted/utils.d.ts.map +1 -1
  402. package/dist/hooks/swap/prices/delta/orders/unposted/utils.js.map +1 -1
  403. package/dist/hooks/swap/prices/delta/orders/utils.js.map +1 -1
  404. package/dist/hooks/swap/prices/delta/queries/bridgeInfo/bridgeInfosLoadedAtom.js.map +1 -1
  405. package/dist/hooks/swap/prices/delta/queries/bridgeInfo/common.js.map +1 -1
  406. package/dist/hooks/swap/prices/delta/queries/bridgeInfo/getBridgeInfoQueryData.js.map +1 -1
  407. package/dist/hooks/swap/prices/delta/queries/bridgeInfo/useBridgeInfo.js.map +1 -1
  408. package/dist/hooks/swap/prices/delta/queries/bridgeProtocols/useBridgeProtocols.js.map +1 -1
  409. package/dist/hooks/swap/prices/delta/queries/errors.js.map +1 -1
  410. package/dist/hooks/swap/prices/delta/queries/useDeltaLimitOrderRequiredBalance.js.map +1 -1
  411. package/dist/hooks/swap/prices/delta/queries/useDeltaOrderPreConditions.js.map +1 -1
  412. package/dist/hooks/swap/prices/delta/queries/useDeltaOrders.js.map +1 -1
  413. package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.d.ts +1 -1
  414. package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.js.map +1 -1
  415. package/dist/hooks/swap/prices/delta/queries/useIsTokenSupportedInDelta.js.map +1 -1
  416. package/dist/hooks/swap/prices/delta/queries/useWatchDeltaOrder.js.map +1 -1
  417. package/dist/hooks/swap/prices/factory.js.map +1 -1
  418. package/dist/hooks/swap/prices/market/mutations/useBuildTx.js.map +1 -1
  419. package/dist/hooks/swap/prices/market/mutations/useSendMarketSwapTx.js.map +1 -1
  420. package/dist/hooks/swap/prices/market/queries/dexesList/useDexesList.js.map +1 -1
  421. package/dist/hooks/swap/prices/market/queries/errors.js.map +1 -1
  422. package/dist/hooks/swap/prices/market/queries/useMarketPriceQuery.js.map +1 -1
  423. package/dist/hooks/swap/prices/market/queries/useSpenderAndContracts.js.map +1 -1
  424. package/dist/hooks/swap/prices/usePricesParams.js.map +1 -1
  425. package/dist/hooks/swap/prices/useSwapPrices.js.map +1 -1
  426. package/dist/hooks/swap/prices/useTokenInputsFromPrice.js.map +1 -1
  427. package/dist/hooks/swap/prices/useTokenInputsFromTwapPrice.js.map +1 -1
  428. package/dist/hooks/swap/prices/useTwapPrices.js.map +1 -1
  429. package/dist/hooks/swap/tradeFlow/common/errors.js.map +1 -1
  430. package/dist/hooks/swap/tradeFlow/common/factory/depositAndSubmitOrderFactory.js.map +1 -1
  431. package/dist/hooks/swap/tradeFlow/common/factory/preSignAndSubmitOrderFactory.js.map +1 -1
  432. package/dist/hooks/swap/tradeFlow/common/useApproveOrPermit.js.map +1 -1
  433. package/dist/hooks/swap/tradeFlow/common/useApproveOrPermitEvents.js.map +1 -1
  434. package/dist/hooks/swap/tradeFlow/common/useBatchWrapAndApprove.js.map +1 -1
  435. package/dist/hooks/swap/tradeFlow/common/useConstructGasParams.js.map +1 -1
  436. package/dist/hooks/swap/tradeFlow/common/useDepositAndSubmitDeltaOrder.js.map +1 -1
  437. package/dist/hooks/swap/tradeFlow/common/usePreSignAndSubmitDeltaOrder.js.map +1 -1
  438. package/dist/hooks/swap/tradeFlow/common/useRequiredAllowanceForOrders.js.map +1 -1
  439. package/dist/hooks/swap/tradeFlow/common/useSignPermit1Or2.js.map +1 -1
  440. package/dist/hooks/swap/tradeFlow/common/utils.js.map +1 -1
  441. package/dist/hooks/swap/tradeFlow/useDeltaFlow.js.map +1 -1
  442. package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.js.map +1 -1
  443. package/dist/hooks/swap/tradeFlow/useLimitOrderFlow.js.map +1 -1
  444. package/dist/hooks/swap/tradeFlow/useLimitOrderStep.js.map +1 -1
  445. package/dist/hooks/swap/tradeFlow/useMarketFlow.js.map +1 -1
  446. package/dist/hooks/swap/tradeFlow/useMarketSwapStep.js.map +1 -1
  447. package/dist/hooks/swap/tradeFlow/useTwapFlow.js.map +1 -1
  448. package/dist/hooks/swap/tradeFlow/useTwapSwapStep.js.map +1 -1
  449. package/dist/hooks/tokens/allowance/useGenericTokenAllowance.js.map +1 -1
  450. package/dist/hooks/tokens/allowance/useTokenAllowance.js.map +1 -1
  451. package/dist/hooks/tokens/allowance/utils.js.map +1 -1
  452. package/dist/hooks/tokens/balances/queries.js.map +1 -1
  453. package/dist/hooks/tokens/balances/useAttachTokenBalanceMultichain.js.map +1 -1
  454. package/dist/hooks/tokens/balances/useInvalidateTokenData.js.map +1 -1
  455. package/dist/hooks/tokens/balances/useIsInsufficientTokenBalance.js.map +1 -1
  456. package/dist/hooks/tokens/balances/useIsLimitOrderInsufficientBalance.js.map +1 -1
  457. package/dist/hooks/tokens/balances/useMultichainTokenBalances.js.map +1 -1
  458. package/dist/hooks/tokens/balances/useSelectedTokenBalances.js.map +1 -1
  459. package/dist/hooks/tokens/balances/useTokenBalance.js.map +1 -1
  460. package/dist/hooks/tokens/data/useCombineTokensWithFetched.js.map +1 -1
  461. package/dist/hooks/tokens/data/useFetchTokens.js.map +1 -1
  462. package/dist/hooks/tokens/data/useMultichainTokensData.js.map +1 -1
  463. package/dist/hooks/tokens/prices/queries.js.map +1 -1
  464. package/dist/hooks/tokens/prices/useMultichainTokenPrices.js.map +1 -1
  465. package/dist/hooks/tokens/prices/useTokenPrices.js.map +1 -1
  466. package/dist/hooks/tokens/useAllTokensWithFilter.js.map +1 -1
  467. package/dist/hooks/tokens/useNativeToken.js.map +1 -1
  468. package/dist/hooks/tokens/useTokenTaxFee.js.map +1 -1
  469. package/dist/hooks/tokens/useTokensByAddress.js.map +1 -1
  470. package/dist/hooks/tokens/useTokensFromAcross.js.map +1 -1
  471. package/dist/hooks/txs/mutations/useApprove.js.map +1 -1
  472. package/dist/hooks/txs/mutations/useDepositWeth.js.map +1 -1
  473. package/dist/hooks/txs/mutations/useReplaceTx.js.map +1 -1
  474. package/dist/hooks/txs/mutations/useSendTx.js.map +1 -1
  475. package/dist/hooks/txs/queries/useAccountNonce.js.map +1 -1
  476. package/dist/hooks/txs/queries/useAwaitTx.js.map +1 -1
  477. package/dist/hooks/txs/queries/useTxFees.js.map +1 -1
  478. package/dist/hooks/txs/queries/useTxHistory.js.map +1 -1
  479. package/dist/hooks/txs/queries/useTxResponse.js.map +1 -1
  480. package/dist/hooks/txs/queries/useWalletCanReplaceTx.js.map +1 -1
  481. package/dist/hooks/txs/queries/utils.js.map +1 -1
  482. package/dist/hooks/useAvailableCrosses.js.map +1 -1
  483. package/dist/hooks/useBreakpoints.js.map +1 -1
  484. package/dist/hooks/useBridgeInfo.js.map +1 -1
  485. package/dist/hooks/useBridgeProtocols.js.map +1 -1
  486. package/dist/hooks/useCachedQueryError.js.map +1 -1
  487. package/dist/hooks/useChainMatches.js.map +1 -1
  488. package/dist/hooks/useClickOutside.js.map +1 -1
  489. package/dist/hooks/useCurrentChain.js.map +1 -1
  490. package/dist/hooks/useDebouncedInputState.js.map +1 -1
  491. package/dist/hooks/useEIP1559Enabled.js.map +1 -1
  492. package/dist/hooks/useGlobalDeltaEnabled.js.map +1 -1
  493. package/dist/hooks/useIsCrosschainPossible.js.map +1 -1
  494. package/dist/hooks/useMinViemClient.js.map +1 -1
  495. package/dist/hooks/useSDK.js.map +1 -1
  496. package/dist/hooks/useSelectableDestChains.js.map +1 -1
  497. package/dist/hooks/useSlippage.js.map +1 -1
  498. package/dist/hooks/useSwitchChainWithGuard.js.map +1 -1
  499. package/dist/lib/constants/urls.js.map +1 -1
  500. package/dist/lib/ipfs.js.map +1 -1
  501. package/dist/lib/queryClient.js.map +1 -1
  502. package/dist/lib/tradeMode.js.map +1 -1
  503. package/dist/lib/utils/approval.js.map +1 -1
  504. package/dist/lib/utils/atomWithCompare.js.map +1 -1
  505. package/dist/lib/utils/copyToClipboard.js.map +1 -1
  506. package/dist/lib/utils/delta.js.map +1 -1
  507. package/dist/lib/utils/dexes.js.map +1 -1
  508. package/dist/lib/utils/explorer.js.map +1 -1
  509. package/dist/lib/utils/fee.js.map +1 -1
  510. package/dist/lib/utils/formatFiatPrice.js.map +1 -1
  511. package/dist/lib/utils/formatPercent.js.map +1 -1
  512. package/dist/lib/utils/formatTokenBalance.js.map +1 -1
  513. package/dist/lib/utils/index.js.map +1 -1
  514. package/dist/lib/utils/logger.js.map +1 -1
  515. package/dist/lib/utils/metabase.js.map +1 -1
  516. package/dist/lib/utils/mobile.js.map +1 -1
  517. package/dist/lib/utils/price.js.map +1 -1
  518. package/dist/lib/utils/priceImpact.js.map +1 -1
  519. package/dist/lib/utils/providerErrors.js.map +1 -1
  520. package/dist/lib/utils/rate.js.map +1 -1
  521. package/dist/lib/utils/removeZeroDecimals.js.map +1 -1
  522. package/dist/lib/utils/savedAmountUSD.js.map +1 -1
  523. package/dist/lib/utils/scaleFactor.js.map +1 -1
  524. package/dist/lib/utils/slippage.js.map +1 -1
  525. package/dist/lib/utils/time.js.map +1 -1
  526. package/dist/lib/utils/toDecimal.js.map +1 -1
  527. package/dist/lib/utils/toasts.js.map +1 -1
  528. package/dist/lib/utils/tradeFlow.js.map +1 -1
  529. package/dist/lib/utils/transactionHandlers.js.map +1 -1
  530. package/dist/lib/utils/tuple.js.map +1 -1
  531. package/dist/lib/utils/twap.js.map +1 -1
  532. package/dist/lib/utils/useDateNow.js.map +1 -1
  533. package/dist/lib/web3/wagmi/config.js.map +1 -1
  534. package/dist/lib/web3/wagmi/external.js.map +1 -1
  535. package/dist/lib/web3/wagmi/isInsideSafeIframe.js.map +1 -1
  536. package/dist/lib/web3/wagmi/switchChain.js.map +1 -1
  537. package/dist/lib/web3/wagmi/utils.js.map +1 -1
  538. package/dist/tokens/blacklist.js.map +1 -1
  539. package/dist/tokens/constructor.js.map +1 -1
  540. package/dist/tokens/defaultTokens.js.map +1 -1
  541. package/dist/tokens/hooks.js.map +1 -1
  542. package/dist/tokens/lists/constants.js.map +1 -1
  543. package/dist/tokens/lists/download.js.map +1 -1
  544. package/dist/tokens/lists/state/effects.js.map +1 -1
  545. package/dist/tokens/lists/state/tokenListsActionsAtom.js.map +1 -1
  546. package/dist/tokens/lists/state/tokenListsStateAtom.js.map +1 -1
  547. package/dist/tokens/overrides.js.map +1 -1
  548. package/dist/tokens/queries.js.map +1 -1
  549. package/dist/tokens/stabeCoins/hooks.js.map +1 -1
  550. package/dist/tokens/stabeCoins/index.js.map +1 -1
  551. package/dist/tokens/state/addImportedTokenAtom.js.map +1 -1
  552. package/dist/tokens/state/allTokensByChainAtom.js.map +1 -1
  553. package/dist/tokens/state/constructTokens.js.map +1 -1
  554. package/dist/tokens/state/fromListsAtom.js.map +1 -1
  555. package/dist/tokens/utils/areTokensSame.js.map +1 -1
  556. package/dist/tokens/utils/brand.js.map +1 -1
  557. package/dist/tokens/utils/eth.js.map +1 -1
  558. package/dist/tokens/utils/filtering.js.map +1 -1
  559. package/dist/tokens/utils/sets.js.map +1 -1
  560. package/dist/tokens/utils/sorting.js.map +1 -1
  561. package/dist/tokens/utils/transferAmountsFromReceipt.js.map +1 -1
  562. package/dist/transactions/hash.js.map +1 -1
  563. package/dist/transactions/queries/ensureCallsStatus.js.map +1 -1
  564. package/dist/transactions/queries/ensureEstimateFeesPerGas.js.map +1 -1
  565. package/dist/transactions/queries/ensureTxReceipt.js.map +1 -1
  566. package/dist/transactions/queries/ensureTxResponse.js.map +1 -1
  567. package/dist/transactions/state/effects/finalize.js.map +1 -1
  568. package/dist/transactions/state/hooks/useActivateEffects.js.map +1 -1
  569. package/dist/transactions/state/hooks/useMarkTxAsDropped.js.map +1 -1
  570. package/dist/transactions/state/hooks/useTransactions.js.map +1 -1
  571. package/dist/transactions/state/transactionsActionAtom.js.map +1 -1
  572. package/dist/transactions/state/transactionsAtom.js.map +1 -1
  573. package/dist/transactions/status.js.map +1 -1
  574. package/dist/transactions/utils.js.map +1 -1
  575. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"useSDK.js","names":["axios","useMemo","constructAxiosFetcher","constructFetchFetcher","constructPartialSDK","constructGetSpender","constructGetAdapters","constructBuildTx","constructAllLimitOrdersHandlers","constructGetRate","constructGetDeltaPrice","constructGetDeltaOrders","constructBuildDeltaOrder","constructSignDeltaOrder","constructPreSignDeltaOrder","constructPostDeltaOrder","constructCancelDeltaOrder","constructGetBridgeInfo","constructIsTokenSupportedInDelta","constructDeltaTokenModule","constructViemContractCaller","LimitOrderHandlers","GetRateFunctions","APIVersion","GetDeltaOrdersFunctions","GetDeltaPriceFunctions","PostDeltaOrderFunctions","BuildDeltaOrderFunctions","SignDeltaOrderFunctions","PreSignDeltaOrderFunctions","CancelDeltaOrderFunctions","GetBridgeInfoFunctions","IsTokenSupportedInDeltaFunctions","BuildTxFunctions","GetSpenderFunctions","GetAdaptersFunctions","MinViemClient","constructGetLimitOrders","constructBuildLimitOrder","constructPostLimitOrder","constructFillOrderDirectly","GetLimitOrdersFunctions","BuildLimitOrderFunctions","PostLimitOrderFunctions","FillOrderDirectlyFunctions","ContractCallerFunctions","DeltaTokenModuleFunctions","BuildTWAPDeltaOrderFunctions","PostTWAPDeltaOrderFunctions","constructPreSignTWAPDeltaOrder","constructBuildTWAPDeltaOrder","PreSignTWAPDeltaOrderFunctions","constructPostTWAPDeltaOrder","constructSignTWAPDeltaOrder","constructSubmitTWAPDeltaOrder","SignTWAPDeltaOrderFunctions","encodeFunctionData","Address","Hash","Hex","Prettify","getLogger","getApiURL","useApiConfig","useSDKFetcher","apiConfig","useKeepAliveSDKFetcher","window","fetch","keepalive","SDKCreateParams","chainId","apiURL","account","MarketSwapSDK","ConstructedSDKOutput","sdk","T","appVersion","useMarketSwapSDK","fetcher","SDKconfig","version","LimitOrdersSDKCreateParams","client","ReadOnlyLimitOrdersSDK","LimitOrdersSDK","limitSDKLogger","useLimitOrdersSDK","once","log","contractCaller","CalldataContractCaller","constructCalldataContractCaller","transactCall","params","abi","contractMethod","functionName","args","calldata","staticCall","Error","signTypedDataCall","useFetchOnlySDK","Partial","calldataSDKLogger","useCalldataSDK","Omit","ReadOnlyDeltaSDK","DeltaSDK","DeltaSDKCreateParams","deltaSDKLogger","useDeltaSDK"],"sources":["../../src/hooks/useSDK.ts"],"sourcesContent":["import axios from \"axios\";\nimport { useMemo } from \"react\";\n\nimport {\n constructAxiosFetcher,\n constructFetchFetcher,\n constructPartialSDK,\n constructGetSpender,\n constructGetAdapters,\n constructBuildTx,\n constructAllLimitOrdersHandlers,\n constructGetRate,\n constructGetDeltaPrice,\n constructGetDeltaOrders,\n constructBuildDeltaOrder,\n constructSignDeltaOrder,\n constructPreSignDeltaOrder,\n constructPostDeltaOrder,\n constructCancelDeltaOrder,\n constructGetBridgeInfo,\n constructIsTokenSupportedInDelta,\n constructDeltaTokenModule,\n constructViemContractCaller,\n type LimitOrderHandlers,\n type GetRateFunctions,\n type APIVersion,\n type GetDeltaOrdersFunctions,\n type GetDeltaPriceFunctions,\n type PostDeltaOrderFunctions,\n type BuildDeltaOrderFunctions,\n type SignDeltaOrderFunctions,\n type PreSignDeltaOrderFunctions,\n type CancelDeltaOrderFunctions,\n type GetBridgeInfoFunctions,\n type IsTokenSupportedInDeltaFunctions,\n type BuildTxFunctions,\n type GetSpenderFunctions,\n type GetAdaptersFunctions,\n type MinViemClient,\n constructGetLimitOrders,\n constructBuildLimitOrder,\n constructPostLimitOrder,\n constructFillOrderDirectly,\n type GetLimitOrdersFunctions,\n type BuildLimitOrderFunctions,\n type PostLimitOrderFunctions,\n type FillOrderDirectlyFunctions,\n type ContractCallerFunctions,\n type DeltaTokenModuleFunctions,\n type BuildTWAPDeltaOrderFunctions,\n type PostTWAPDeltaOrderFunctions,\n constructPreSignTWAPDeltaOrder,\n constructBuildTWAPDeltaOrder,\n type PreSignTWAPDeltaOrderFunctions,\n constructPostTWAPDeltaOrder,\n constructSignTWAPDeltaOrder,\n constructSubmitTWAPDeltaOrder,\n type SignTWAPDeltaOrderFunctions,\n} from \"@velora-dex/sdk\";\nimport { encodeFunctionData, type Address, type Hash, type Hex } from \"viem\";\nimport type { Prettify } from \"ts-essentials\";\nimport { getLogger } from \"@/core/logger\";\nimport { getApiURL } from \"@/lib/constants/urls\";\nimport { useApiConfig } from \"@/core/state/apiConfigAtom\";\n\nfunction useSDKFetcher() {\n \"use no memo\";\n\n const apiConfig = useApiConfig();\n\n return useMemo(() => {\n return constructAxiosFetcher(axios, apiConfig);\n }, [apiConfig]);\n}\n\nfunction useKeepAliveSDKFetcher() {\n \"use no memo\";\n\n const apiConfig = useApiConfig();\n\n return useMemo(() => {\n if (typeof window === \"undefined\") return;\n return constructFetchFetcher(window.fetch, {\n ...apiConfig,\n keepalive: true,\n });\n }, [apiConfig]);\n}\n\ntype SDKCreateParams = {\n chainId: number;\n apiURL?: string;\n account?: Address;\n};\n\nexport type MarketSwapSDK = Prettify<\n GetSpenderFunctions &\n BuildTxFunctions &\n GetRateFunctions &\n GetAdaptersFunctions\n>;\n\ntype ConstructedSDKOutput<T> = {\n sdk: T;\n appVersion: APIVersion;\n chainId: number;\n apiURL: string;\n};\n\nexport function useMarketSwapSDK({\n chainId,\n apiURL,\n}: SDKCreateParams): ConstructedSDKOutput<MarketSwapSDK> {\n \"use no memo\";\n\n const fetcher = useSDKFetcher();\n\n const sdk = useMemo(() => {\n const SDKconfig = {\n apiURL: apiURL ?? getApiURL(),\n chainId,\n fetcher,\n };\n\n return constructPartialSDK(\n SDKconfig,\n constructGetRate,\n constructGetSpender,\n constructGetAdapters,\n constructBuildTx\n );\n }, [apiURL, chainId, fetcher]);\n\n return {\n appVersion: sdk.version,\n chainId: sdk.chainId,\n apiURL: sdk.apiURL,\n sdk,\n };\n}\ntype LimitOrdersSDKCreateParams = SDKCreateParams & {\n client?: MinViemClient;\n};\n\ntype ReadOnlyLimitOrdersSDK = Prettify<\n GetLimitOrdersFunctions & BuildLimitOrderFunctions & PostLimitOrderFunctions\n>;\n\nexport type LimitOrdersSDK = Prettify<LimitOrderHandlers<Hash>>;\n\nconst limitSDKLogger = getLogger(\"LimitOrdersSDK\");\n\n// can paraswap.fillOrder from a taker address to simulate happy path\n// @TODO check that we always use correct SDK version\nexport function useLimitOrdersSDK({\n chainId,\n apiURL,\n account,\n client,\n}: LimitOrdersSDKCreateParams & {\n account?: undefined;\n client?: undefined;\n}): ConstructedSDKOutput<ReadOnlyLimitOrdersSDK>;\nexport function useLimitOrdersSDK({\n chainId,\n apiURL,\n account,\n client,\n}: LimitOrdersSDKCreateParams & {\n account: Address;\n client: MinViemClient;\n}): ConstructedSDKOutput<LimitOrdersSDK>;\nexport function useLimitOrdersSDK({\n chainId,\n apiURL,\n account,\n client,\n}: LimitOrdersSDKCreateParams): ConstructedSDKOutput<\n LimitOrdersSDK | ReadOnlyLimitOrdersSDK\n>;\nexport function useLimitOrdersSDK({\n chainId,\n apiURL,\n account,\n client,\n}: LimitOrdersSDKCreateParams): ConstructedSDKOutput<\n LimitOrdersSDK | ReadOnlyLimitOrdersSDK\n> {\n \"use no memo\";\n\n const fetcher = useSDKFetcher();\n\n const sdk = useMemo(() => {\n limitSDKLogger.once.log(\"init sdk\");\n const SDKconfig = {\n apiURL: apiURL ?? getApiURL(),\n chainId,\n fetcher,\n };\n\n if (!client || !account) {\n return constructPartialSDK(\n SDKconfig,\n constructGetLimitOrders,\n constructBuildLimitOrder,\n constructPostLimitOrder\n );\n }\n\n const contractCaller = constructViemContractCaller(client, account);\n\n return constructPartialSDK(\n { ...SDKconfig, contractCaller },\n constructAllLimitOrdersHandlers\n );\n }, [client, account, apiURL, chainId, fetcher]);\n\n return {\n appVersion: sdk.version,\n chainId: sdk.chainId,\n apiURL: sdk.apiURL,\n sdk,\n };\n}\n\n// ContractCaller that returns Contract[method](args) calldata instead of sending out a transaction\ntype CalldataContractCaller = ContractCallerFunctions<Hex>;\n\nconst constructCalldataContractCaller = (): CalldataContractCaller => {\n const transactCall: CalldataContractCaller[\"transactCall\"] = async (\n params\n ) => {\n const { abi, contractMethod: functionName, args } = params;\n const calldata = encodeFunctionData<typeof abi, string>({\n abi,\n functionName,\n args,\n });\n return calldata;\n };\n\n // won't be used, but needed for types\n const staticCall = () => {\n throw new Error(\"Not implemented\");\n };\n\n return {\n transactCall,\n staticCall,\n signTypedDataCall: staticCall,\n };\n};\n\n// can be used to POST final data before page is closed\nexport const useFetchOnlySDK = ({\n chainId,\n apiURL,\n}: SDKCreateParams): Partial<ConstructedSDKOutput<PostDeltaOrderFunctions>> => {\n \"use no memo\";\n\n // fetch, unlike axios allows for `keepalive` parameter,\n // so we can use it to keep the request alive a bit after the page is closed.\n // the alternative of using navigator.sendBeacon doesn't work with API because it includes credentials=always\n // which is incompatible with API CORS settings\n const fetcher = useKeepAliveSDKFetcher();\n\n const sdk = useMemo(() => {\n if (!fetcher) return;\n\n return constructPartialSDK(\n {\n apiURL: apiURL ?? getApiURL(),\n chainId,\n fetcher,\n },\n constructPostDeltaOrder\n );\n }, [apiURL, chainId, fetcher]);\n\n return {\n appVersion: sdk?.version,\n chainId: sdk?.chainId,\n apiURL: sdk?.apiURL,\n sdk,\n };\n};\n\nconst calldataSDKLogger = getLogger(\"CalldataSDK\");\n\nexport const useCalldataSDK = ({\n chainId,\n apiURL,\n client,\n}: Omit<LimitOrdersSDKCreateParams, \"account\">): Partial<\n ConstructedSDKOutput<\n FillOrderDirectlyFunctions<Hex> &\n PreSignDeltaOrderFunctions<Hex> &\n BuildDeltaOrderFunctions &\n PreSignTWAPDeltaOrderFunctions<Hex> &\n BuildTWAPDeltaOrderFunctions\n >\n> => {\n \"use no memo\";\n\n const fetcher = useSDKFetcher();\n\n const sdk = useMemo(() => {\n if (!client) return;\n calldataSDKLogger.once.log(\"init sdk\");\n\n const contractCaller = constructCalldataContractCaller();\n\n const SDKconfig = {\n apiURL: apiURL ?? getApiURL(),\n chainId,\n fetcher,\n contractCaller,\n };\n\n return constructPartialSDK(\n SDKconfig,\n constructFillOrderDirectly,\n constructPreSignDeltaOrder,\n constructBuildDeltaOrder,\n constructPreSignTWAPDeltaOrder,\n constructBuildTWAPDeltaOrder\n );\n }, [apiURL, chainId, client, fetcher]);\n\n return {\n appVersion: sdk?.version,\n chainId: sdk?.chainId,\n apiURL: sdk?.apiURL,\n sdk,\n };\n};\n\ntype ReadOnlyDeltaSDK = Prettify<\n GetDeltaOrdersFunctions &\n GetDeltaPriceFunctions &\n BuildDeltaOrderFunctions &\n PostDeltaOrderFunctions &\n BuildTWAPDeltaOrderFunctions &\n PostTWAPDeltaOrderFunctions &\n GetBridgeInfoFunctions &\n IsTokenSupportedInDeltaFunctions & { chainId: number }\n>;\n\nexport type DeltaSDK = Prettify<\n ReadOnlyDeltaSDK &\n SignDeltaOrderFunctions &\n CancelDeltaOrderFunctions &\n PreSignDeltaOrderFunctions<Hash> &\n DeltaTokenModuleFunctions<Hash> &\n SignTWAPDeltaOrderFunctions &\n PreSignTWAPDeltaOrderFunctions<Hash>\n>;\n\ntype DeltaSDKCreateParams = SDKCreateParams & {\n client?: MinViemClient;\n};\n\nconst deltaSDKLogger = getLogger(\"DeltaSDK\");\n\nexport function useDeltaSDK({\n chainId,\n apiURL,\n account,\n client,\n}: DeltaSDKCreateParams & {\n account?: undefined;\n client?: undefined;\n}): ConstructedSDKOutput<ReadOnlyDeltaSDK>;\nexport function useDeltaSDK({\n chainId,\n apiURL,\n account,\n client,\n}: DeltaSDKCreateParams & {\n account: Address;\n client: MinViemClient;\n}): ConstructedSDKOutput<DeltaSDK>;\nexport function useDeltaSDK({\n chainId,\n apiURL,\n account,\n client,\n}: DeltaSDKCreateParams): ConstructedSDKOutput<DeltaSDK | ReadOnlyDeltaSDK>;\nexport function useDeltaSDK({\n chainId,\n apiURL,\n account,\n client,\n}: DeltaSDKCreateParams): ConstructedSDKOutput<DeltaSDK | ReadOnlyDeltaSDK> {\n \"use no memo\";\n // react-compiler fails here and sdk is created anew\n\n const fetcher = useSDKFetcher();\n\n const sdk = useMemo(() => {\n deltaSDKLogger.once.log(\"init sdk\");\n const SDKconfig = {\n apiURL: apiURL ?? getApiURL(),\n chainId,\n fetcher,\n };\n\n if (!client || !account) {\n return constructPartialSDK(\n SDKconfig,\n constructGetDeltaOrders,\n constructGetDeltaPrice,\n constructBuildDeltaOrder,\n constructPostDeltaOrder,\n constructBuildTWAPDeltaOrder,\n constructPostTWAPDeltaOrder,\n constructGetBridgeInfo,\n constructIsTokenSupportedInDelta\n );\n }\n\n const contractCaller = constructViemContractCaller(client, account);\n\n return constructPartialSDK(\n { ...SDKconfig, contractCaller },\n constructGetDeltaOrders,\n constructGetDeltaPrice,\n constructBuildDeltaOrder,\n constructPostDeltaOrder,\n constructCancelDeltaOrder,\n constructGetBridgeInfo,\n constructIsTokenSupportedInDelta,\n constructSignDeltaOrder,\n constructPreSignDeltaOrder,\n constructPostTWAPDeltaOrder,\n constructBuildTWAPDeltaOrder,\n constructSignTWAPDeltaOrder,\n constructPreSignTWAPDeltaOrder,\n constructSubmitTWAPDeltaOrder,\n constructDeltaTokenModule\n );\n }, [apiURL, chainId, client, account, fetcher]);\n\n return {\n appVersion: sdk.version,\n chainId: sdk.chainId,\n apiURL: sdk.apiURL,\n sdk,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useSDK.js","names":["axios","useMemo","constructAxiosFetcher","constructFetchFetcher","constructPartialSDK","constructGetSpender","constructGetAdapters","constructBuildTx","constructAllLimitOrdersHandlers","constructGetRate","constructGetDeltaPrice","constructGetDeltaOrders","constructBuildDeltaOrder","constructSignDeltaOrder","constructPreSignDeltaOrder","constructPostDeltaOrder","constructCancelDeltaOrder","constructGetBridgeInfo","constructIsTokenSupportedInDelta","constructDeltaTokenModule","constructViemContractCaller","LimitOrderHandlers","GetRateFunctions","APIVersion","GetDeltaOrdersFunctions","GetDeltaPriceFunctions","PostDeltaOrderFunctions","BuildDeltaOrderFunctions","SignDeltaOrderFunctions","PreSignDeltaOrderFunctions","CancelDeltaOrderFunctions","GetBridgeInfoFunctions","IsTokenSupportedInDeltaFunctions","BuildTxFunctions","GetSpenderFunctions","GetAdaptersFunctions","MinViemClient","constructGetLimitOrders","constructBuildLimitOrder","constructPostLimitOrder","constructFillOrderDirectly","GetLimitOrdersFunctions","BuildLimitOrderFunctions","PostLimitOrderFunctions","FillOrderDirectlyFunctions","ContractCallerFunctions","DeltaTokenModuleFunctions","BuildTWAPDeltaOrderFunctions","PostTWAPDeltaOrderFunctions","constructPreSignTWAPDeltaOrder","constructBuildTWAPDeltaOrder","PreSignTWAPDeltaOrderFunctions","constructPostTWAPDeltaOrder","constructSignTWAPDeltaOrder","constructSubmitTWAPDeltaOrder","SignTWAPDeltaOrderFunctions","encodeFunctionData","Address","Hash","Hex","Prettify","getLogger","getApiURL","useApiConfig","useSDKFetcher","apiConfig","useKeepAliveSDKFetcher","window","fetch","keepalive","SDKCreateParams","chainId","apiURL","account","MarketSwapSDK","ConstructedSDKOutput","sdk","T","appVersion","useMarketSwapSDK","fetcher","SDKconfig","version","LimitOrdersSDKCreateParams","client","ReadOnlyLimitOrdersSDK","LimitOrdersSDK","limitSDKLogger","useLimitOrdersSDK","once","log","contractCaller","CalldataContractCaller","constructCalldataContractCaller","transactCall","params","abi","contractMethod","functionName","args","calldata","staticCall","Error","signTypedDataCall","useFetchOnlySDK","Partial","calldataSDKLogger","useCalldataSDK","Omit","ReadOnlyDeltaSDK","DeltaSDK","DeltaSDKCreateParams","deltaSDKLogger","useDeltaSDK"],"sources":["../../src/hooks/useSDK.ts"],"sourcesContent":["import axios from \"axios\";\nimport { useMemo } from \"react\";\n\nimport {\n constructAxiosFetcher,\n constructFetchFetcher,\n constructPartialSDK,\n constructGetSpender,\n constructGetAdapters,\n constructBuildTx,\n constructAllLimitOrdersHandlers,\n constructGetRate,\n constructGetDeltaPrice,\n constructGetDeltaOrders,\n constructBuildDeltaOrder,\n constructSignDeltaOrder,\n constructPreSignDeltaOrder,\n constructPostDeltaOrder,\n constructCancelDeltaOrder,\n constructGetBridgeInfo,\n constructIsTokenSupportedInDelta,\n constructDeltaTokenModule,\n constructViemContractCaller,\n type LimitOrderHandlers,\n type GetRateFunctions,\n type APIVersion,\n type GetDeltaOrdersFunctions,\n type GetDeltaPriceFunctions,\n type PostDeltaOrderFunctions,\n type BuildDeltaOrderFunctions,\n type SignDeltaOrderFunctions,\n type PreSignDeltaOrderFunctions,\n type CancelDeltaOrderFunctions,\n type GetBridgeInfoFunctions,\n type IsTokenSupportedInDeltaFunctions,\n type BuildTxFunctions,\n type GetSpenderFunctions,\n type GetAdaptersFunctions,\n type MinViemClient,\n constructGetLimitOrders,\n constructBuildLimitOrder,\n constructPostLimitOrder,\n constructFillOrderDirectly,\n type GetLimitOrdersFunctions,\n type BuildLimitOrderFunctions,\n type PostLimitOrderFunctions,\n type FillOrderDirectlyFunctions,\n type ContractCallerFunctions,\n type DeltaTokenModuleFunctions,\n type BuildTWAPDeltaOrderFunctions,\n type PostTWAPDeltaOrderFunctions,\n constructPreSignTWAPDeltaOrder,\n constructBuildTWAPDeltaOrder,\n type PreSignTWAPDeltaOrderFunctions,\n constructPostTWAPDeltaOrder,\n constructSignTWAPDeltaOrder,\n constructSubmitTWAPDeltaOrder,\n type SignTWAPDeltaOrderFunctions,\n} from \"@velora-dex/sdk\";\nimport { encodeFunctionData, type Address, type Hash, type Hex } from \"viem\";\nimport type { Prettify } from \"ts-essentials\";\nimport { getLogger } from \"@/core/logger\";\nimport { getApiURL } from \"@/lib/constants/urls\";\nimport { useApiConfig } from \"@/core/state/apiConfigAtom\";\n\nfunction useSDKFetcher() {\n \"use no memo\";\n\n const apiConfig = useApiConfig();\n\n return useMemo(() => {\n return constructAxiosFetcher(axios, apiConfig);\n }, [apiConfig]);\n}\n\nfunction useKeepAliveSDKFetcher() {\n \"use no memo\";\n\n const apiConfig = useApiConfig();\n\n return useMemo(() => {\n if (typeof window === \"undefined\") return;\n return constructFetchFetcher(window.fetch, {\n ...apiConfig,\n keepalive: true,\n });\n }, [apiConfig]);\n}\n\ntype SDKCreateParams = {\n chainId: number;\n apiURL?: string;\n account?: Address;\n};\n\nexport type MarketSwapSDK = Prettify<\n GetSpenderFunctions &\n BuildTxFunctions &\n GetRateFunctions &\n GetAdaptersFunctions\n>;\n\ntype ConstructedSDKOutput<T> = {\n sdk: T;\n appVersion: APIVersion;\n chainId: number;\n apiURL: string;\n};\n\nexport function useMarketSwapSDK({\n chainId,\n apiURL,\n}: SDKCreateParams): ConstructedSDKOutput<MarketSwapSDK> {\n \"use no memo\";\n\n const fetcher = useSDKFetcher();\n\n const sdk = useMemo(() => {\n const SDKconfig = {\n apiURL: apiURL ?? getApiURL(),\n chainId,\n fetcher,\n };\n\n return constructPartialSDK(\n SDKconfig,\n constructGetRate,\n constructGetSpender,\n constructGetAdapters,\n constructBuildTx\n );\n }, [apiURL, chainId, fetcher]);\n\n return {\n appVersion: sdk.version,\n chainId: sdk.chainId,\n apiURL: sdk.apiURL,\n sdk,\n };\n}\ntype LimitOrdersSDKCreateParams = SDKCreateParams & {\n client?: MinViemClient;\n};\n\ntype ReadOnlyLimitOrdersSDK = Prettify<\n GetLimitOrdersFunctions & BuildLimitOrderFunctions & PostLimitOrderFunctions\n>;\n\nexport type LimitOrdersSDK = Prettify<LimitOrderHandlers<Hash>>;\n\nconst limitSDKLogger = getLogger(\"LimitOrdersSDK\");\n\n// can paraswap.fillOrder from a taker address to simulate happy path\n// @TODO check that we always use correct SDK version\nexport function useLimitOrdersSDK({\n chainId,\n apiURL,\n account,\n client,\n}: LimitOrdersSDKCreateParams & {\n account?: undefined;\n client?: undefined;\n}): ConstructedSDKOutput<ReadOnlyLimitOrdersSDK>;\nexport function useLimitOrdersSDK({\n chainId,\n apiURL,\n account,\n client,\n}: LimitOrdersSDKCreateParams & {\n account: Address;\n client: MinViemClient;\n}): ConstructedSDKOutput<LimitOrdersSDK>;\nexport function useLimitOrdersSDK({\n chainId,\n apiURL,\n account,\n client,\n}: LimitOrdersSDKCreateParams): ConstructedSDKOutput<\n LimitOrdersSDK | ReadOnlyLimitOrdersSDK\n>;\nexport function useLimitOrdersSDK({\n chainId,\n apiURL,\n account,\n client,\n}: LimitOrdersSDKCreateParams): ConstructedSDKOutput<\n LimitOrdersSDK | ReadOnlyLimitOrdersSDK\n> {\n \"use no memo\";\n\n const fetcher = useSDKFetcher();\n\n const sdk = useMemo(() => {\n limitSDKLogger.once.log(\"init sdk\");\n const SDKconfig = {\n apiURL: apiURL ?? getApiURL(),\n chainId,\n fetcher,\n };\n\n if (!client || !account) {\n return constructPartialSDK(\n SDKconfig,\n constructGetLimitOrders,\n constructBuildLimitOrder,\n constructPostLimitOrder\n );\n }\n\n const contractCaller = constructViemContractCaller(client, account);\n\n return constructPartialSDK(\n { ...SDKconfig, contractCaller },\n constructAllLimitOrdersHandlers\n );\n }, [client, account, apiURL, chainId, fetcher]);\n\n return {\n appVersion: sdk.version,\n chainId: sdk.chainId,\n apiURL: sdk.apiURL,\n sdk,\n };\n}\n\n// ContractCaller that returns Contract[method](args) calldata instead of sending out a transaction\ntype CalldataContractCaller = ContractCallerFunctions<Hex>;\n\nconst constructCalldataContractCaller = (): CalldataContractCaller => {\n const transactCall: CalldataContractCaller[\"transactCall\"] = async (\n params\n ) => {\n const { abi, contractMethod: functionName, args } = params;\n const calldata = encodeFunctionData<typeof abi, string>({\n abi,\n functionName,\n args,\n });\n return calldata;\n };\n\n // won't be used, but needed for types\n const staticCall = () => {\n throw new Error(\"Not implemented\");\n };\n\n return {\n transactCall,\n staticCall,\n signTypedDataCall: staticCall,\n };\n};\n\n// can be used to POST final data before page is closed\nexport const useFetchOnlySDK = ({\n chainId,\n apiURL,\n}: SDKCreateParams): Partial<ConstructedSDKOutput<PostDeltaOrderFunctions>> => {\n \"use no memo\";\n\n // fetch, unlike axios allows for `keepalive` parameter,\n // so we can use it to keep the request alive a bit after the page is closed.\n // the alternative of using navigator.sendBeacon doesn't work with API because it includes credentials=always\n // which is incompatible with API CORS settings\n const fetcher = useKeepAliveSDKFetcher();\n\n const sdk = useMemo(() => {\n if (!fetcher) return;\n\n return constructPartialSDK(\n {\n apiURL: apiURL ?? getApiURL(),\n chainId,\n fetcher,\n },\n constructPostDeltaOrder\n );\n }, [apiURL, chainId, fetcher]);\n\n return {\n appVersion: sdk?.version,\n chainId: sdk?.chainId,\n apiURL: sdk?.apiURL,\n sdk,\n };\n};\n\nconst calldataSDKLogger = getLogger(\"CalldataSDK\");\n\nexport const useCalldataSDK = ({\n chainId,\n apiURL,\n client,\n}: Omit<LimitOrdersSDKCreateParams, \"account\">): Partial<\n ConstructedSDKOutput<\n FillOrderDirectlyFunctions<Hex> &\n PreSignDeltaOrderFunctions<Hex> &\n BuildDeltaOrderFunctions &\n PreSignTWAPDeltaOrderFunctions<Hex> &\n BuildTWAPDeltaOrderFunctions\n >\n> => {\n \"use no memo\";\n\n const fetcher = useSDKFetcher();\n\n const sdk = useMemo(() => {\n if (!client) return;\n calldataSDKLogger.once.log(\"init sdk\");\n\n const contractCaller = constructCalldataContractCaller();\n\n const SDKconfig = {\n apiURL: apiURL ?? getApiURL(),\n chainId,\n fetcher,\n contractCaller,\n };\n\n return constructPartialSDK(\n SDKconfig,\n constructFillOrderDirectly,\n constructPreSignDeltaOrder,\n constructBuildDeltaOrder,\n constructPreSignTWAPDeltaOrder,\n constructBuildTWAPDeltaOrder\n );\n }, [apiURL, chainId, client, fetcher]);\n\n return {\n appVersion: sdk?.version,\n chainId: sdk?.chainId,\n apiURL: sdk?.apiURL,\n sdk,\n };\n};\n\ntype ReadOnlyDeltaSDK = Prettify<\n GetDeltaOrdersFunctions &\n GetDeltaPriceFunctions &\n BuildDeltaOrderFunctions &\n PostDeltaOrderFunctions &\n BuildTWAPDeltaOrderFunctions &\n PostTWAPDeltaOrderFunctions &\n GetBridgeInfoFunctions &\n IsTokenSupportedInDeltaFunctions & { chainId: number }\n>;\n\nexport type DeltaSDK = Prettify<\n ReadOnlyDeltaSDK &\n SignDeltaOrderFunctions &\n CancelDeltaOrderFunctions &\n PreSignDeltaOrderFunctions<Hash> &\n DeltaTokenModuleFunctions<Hash> &\n SignTWAPDeltaOrderFunctions &\n PreSignTWAPDeltaOrderFunctions<Hash>\n>;\n\ntype DeltaSDKCreateParams = SDKCreateParams & {\n client?: MinViemClient;\n};\n\nconst deltaSDKLogger = getLogger(\"DeltaSDK\");\n\nexport function useDeltaSDK({\n chainId,\n apiURL,\n account,\n client,\n}: DeltaSDKCreateParams & {\n account?: undefined;\n client?: undefined;\n}): ConstructedSDKOutput<ReadOnlyDeltaSDK>;\nexport function useDeltaSDK({\n chainId,\n apiURL,\n account,\n client,\n}: DeltaSDKCreateParams & {\n account: Address;\n client: MinViemClient;\n}): ConstructedSDKOutput<DeltaSDK>;\nexport function useDeltaSDK({\n chainId,\n apiURL,\n account,\n client,\n}: DeltaSDKCreateParams): ConstructedSDKOutput<DeltaSDK | ReadOnlyDeltaSDK>;\nexport function useDeltaSDK({\n chainId,\n apiURL,\n account,\n client,\n}: DeltaSDKCreateParams): ConstructedSDKOutput<DeltaSDK | ReadOnlyDeltaSDK> {\n \"use no memo\";\n // react-compiler fails here and sdk is created anew\n\n const fetcher = useSDKFetcher();\n\n const sdk = useMemo(() => {\n deltaSDKLogger.once.log(\"init sdk\");\n const SDKconfig = {\n apiURL: apiURL ?? getApiURL(),\n chainId,\n fetcher,\n };\n\n if (!client || !account) {\n return constructPartialSDK(\n SDKconfig,\n constructGetDeltaOrders,\n constructGetDeltaPrice,\n constructBuildDeltaOrder,\n constructPostDeltaOrder,\n constructBuildTWAPDeltaOrder,\n constructPostTWAPDeltaOrder,\n constructGetBridgeInfo,\n constructIsTokenSupportedInDelta\n );\n }\n\n const contractCaller = constructViemContractCaller(client, account);\n\n return constructPartialSDK(\n { ...SDKconfig, contractCaller },\n constructGetDeltaOrders,\n constructGetDeltaPrice,\n constructBuildDeltaOrder,\n constructPostDeltaOrder,\n constructCancelDeltaOrder,\n constructGetBridgeInfo,\n constructIsTokenSupportedInDelta,\n constructSignDeltaOrder,\n constructPreSignDeltaOrder,\n constructPostTWAPDeltaOrder,\n constructBuildTWAPDeltaOrder,\n constructSignTWAPDeltaOrder,\n constructPreSignTWAPDeltaOrder,\n constructSubmitTWAPDeltaOrder,\n constructDeltaTokenModule\n );\n }, [apiURL, chainId, client, account, fetcher]);\n\n return {\n appVersion: sdk.version,\n chainId: sdk.chainId,\n apiURL: sdk.apiURL,\n sdk,\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useSelectableDestChains.js","names":["SupportedChainId","useWidgetConfig","useEnabledDestChains","useGlobalDeltaEnabled","useAvailableCrosses","emptyArray","NonEmptyArray","BridgeInfoMode","useSelectableDestChains","t0","$","_c","fromChainId","mode","t1","availableCrosses","t2","undefined","enabledGlobally","deltaEnabledGlobally","enableCrossChain","enabledDestChains","t3","computeSelectableDestChains","selectableChains","t4","chain","includes","t5","isChainSelectable","canCrossChain","length","filter","unshift"],"sources":["../../src/hooks/useSelectableDestChains.ts"],"sourcesContent":["import type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { useWidgetConfig } from \"@/core/state/configAtom\";\nimport { useEnabledDestChains } from \"@/core/state/enabledChainsAtom\";\nimport { useGlobalDeltaEnabled } from \"./useGlobalDeltaEnabled\";\nimport { useAvailableCrosses } from \"./useAvailableCrosses\";\nimport { emptyArray } from \"@/lib/constants\";\nimport type { NonEmptyArray } from \"ts-essentials\";\nimport type { BridgeInfoMode } from \"./swap/prices/delta/queries/bridgeInfo/types\";\n\nexport function useSelectableDestChains({\n fromChainId,\n mode,\n}: {\n fromChainId: SupportedChainId;\n mode: BridgeInfoMode;\n}): {\n selectableChains: SupportedChainId[];\n isChainSelectable: (chain: SupportedChainId) => boolean;\n} {\n const { availableCrosses = emptyArray } = useAvailableCrosses({\n fromChainId,\n mode,\n });\n const { enabledGlobally: deltaEnabledGlobally } = useGlobalDeltaEnabled();\n const { enableCrossChain } = useWidgetConfig();\n const enabledDestChains = useEnabledDestChains();\n\n const selectableChains = computeSelectableDestChains({\n enableCrossChain,\n deltaEnabledGlobally,\n enabledDestChains,\n availableCrosses,\n fromChainId,\n });\n\n return {\n selectableChains,\n isChainSelectable: (chain) => selectableChains.includes(chain),\n };\n}\n\nexport function computeSelectableDestChains({\n enableCrossChain,\n deltaEnabledGlobally,\n enabledDestChains,\n availableCrosses,\n fromChainId,\n}: {\n enableCrossChain: boolean;\n deltaEnabledGlobally: boolean;\n enabledDestChains: NonEmptyArray<SupportedChainId>;\n availableCrosses: SupportedChainId[];\n fromChainId: SupportedChainId;\n}) {\n const canCrossChain =\n enableCrossChain && deltaEnabledGlobally && availableCrosses.length;\n\n if (!canCrossChain) {\n return [fromChainId];\n }\n\n const selectableChains = availableCrosses.filter((chain) =>\n enabledDestChains.includes(chain)\n );\n\n if (!selectableChains.includes(fromChainId)) {\n selectableChains.unshift(fromChainId);\n }\n\n return selectableChains;\n}\n"],"mappings":";;;;;;;AASA,SAAOQ,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAAiC,EAAAC,gBAAAC,YAAAJ,GAMvCK;AAAA,CAAAJ,EAAA,OAAAE,KAAAF,EAAA,OAAAG,KAI+DC,IAAA;EAAAF;EAAAC;EAG7D,EAAAH,EAAA,KAAAE,GAAAF,EAAA,KAAAG,GAAAH,EAAA,KAAAI,KAAAA,IAAAJ,EAAA;CAHD,IAAA,EAAAK,kBAAAC,MAA0CZ,EAAoBU,EAG5D,EAHMC,IAAAC,MAAAC,KAAAA,IAAAZ,IAAAW,GAIR,EAAAE,iBAAAC,MAAkDhB,GAAuB,EACzE,EAAAiB,wBAA6BnB,GAAiB,EAC9CoB,IAA0BnB,GAAsB,EAACoB;AAAA,CAAAZ,EAAA,OAAAK,KAAAL,EAAA,OAAAS,KAAAT,EAAA,OAAAU,KAAAV,EAAA,OAAAW,KAAAX,EAAA,OAAAE,KAExBU,IAAAC,EAA4B;EAAAH;EAAAD;EAAAE;EAAAN;EAAAH;EAMpD,CAAC,EAAAF,EAAA,KAAAK,GAAAL,EAAA,KAAAS,GAAAT,EAAA,KAAAU,GAAAV,EAAA,KAAAW,GAAAX,EAAA,KAAAE,GAAAF,EAAA,KAAAY,KAAAA,IAAAZ,EAAA;CANF,IAAAc,IAAyBF,GAMtBG;AAAA,CAAAf,EAAA,OAAAc,IAI6DC,IAAAf,EAAA,OAA3Ce,KAAAC,MAAWF,EAAgBG,SAAUD,EAAM,EAAAhB,EAAA,KAAAc,GAAAd,EAAA,MAAAe;CAAA,IAAAG;AAC/D,QAD+DlB,EAAA,QAAAc,KAAAd,EAAA,QAAAe,KAFzDG,IAAA;EAAAJ;EAAAK,mBAEcJ;EACpB,EAAAf,EAAA,MAAAc,GAAAd,EAAA,MAAAe,GAAAf,EAAA,MAAAkB,KAAAA,IAAAlB,EAAA,KAHMkB;;AAMT,SAAgBL,EAA4B,EAC1CH,qBACAD,yBACAE,sBACAN,qBACAH,kBAOC;AAID,KAAI,EAFFQ,KAAoBD,KAAwBJ,EAAiBgB,QAG7D,QAAO,CAACnB,EAAY;CAGtB,IAAMY,IAAmBT,EAAiBiB,QAAQN,MAChDL,EAAkBM,SAASD,EAC7B,CAAC;AAMD,QAJKF,EAAiBG,SAASf,EAAY,IACzCY,EAAiBS,QAAQrB,EAAY,EAGhCY"}
1
+ {"version":3,"file":"useSelectableDestChains.js","names":["SupportedChainId","useWidgetConfig","useEnabledDestChains","useGlobalDeltaEnabled","useAvailableCrosses","emptyArray","NonEmptyArray","BridgeInfoMode","useSelectableDestChains","t0","$","_c","fromChainId","mode","t1","availableCrosses","t2","undefined","enabledGlobally","deltaEnabledGlobally","enableCrossChain","enabledDestChains","t3","computeSelectableDestChains","selectableChains","t4","chain","includes","t5","isChainSelectable","canCrossChain","length","filter","unshift"],"sources":["../../src/hooks/useSelectableDestChains.ts"],"sourcesContent":["import type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { useWidgetConfig } from \"@/core/state/configAtom\";\nimport { useEnabledDestChains } from \"@/core/state/enabledChainsAtom\";\nimport { useGlobalDeltaEnabled } from \"./useGlobalDeltaEnabled\";\nimport { useAvailableCrosses } from \"./useAvailableCrosses\";\nimport { emptyArray } from \"@/lib/constants\";\nimport type { NonEmptyArray } from \"ts-essentials\";\nimport type { BridgeInfoMode } from \"./swap/prices/delta/queries/bridgeInfo/types\";\n\nexport function useSelectableDestChains({\n fromChainId,\n mode,\n}: {\n fromChainId: SupportedChainId;\n mode: BridgeInfoMode;\n}): {\n selectableChains: SupportedChainId[];\n isChainSelectable: (chain: SupportedChainId) => boolean;\n} {\n const { availableCrosses = emptyArray } = useAvailableCrosses({\n fromChainId,\n mode,\n });\n const { enabledGlobally: deltaEnabledGlobally } = useGlobalDeltaEnabled();\n const { enableCrossChain } = useWidgetConfig();\n const enabledDestChains = useEnabledDestChains();\n\n const selectableChains = computeSelectableDestChains({\n enableCrossChain,\n deltaEnabledGlobally,\n enabledDestChains,\n availableCrosses,\n fromChainId,\n });\n\n return {\n selectableChains,\n isChainSelectable: (chain) => selectableChains.includes(chain),\n };\n}\n\nexport function computeSelectableDestChains({\n enableCrossChain,\n deltaEnabledGlobally,\n enabledDestChains,\n availableCrosses,\n fromChainId,\n}: {\n enableCrossChain: boolean;\n deltaEnabledGlobally: boolean;\n enabledDestChains: NonEmptyArray<SupportedChainId>;\n availableCrosses: SupportedChainId[];\n fromChainId: SupportedChainId;\n}) {\n const canCrossChain =\n enableCrossChain && deltaEnabledGlobally && availableCrosses.length;\n\n if (!canCrossChain) {\n return [fromChainId];\n }\n\n const selectableChains = availableCrosses.filter((chain) =>\n enabledDestChains.includes(chain)\n );\n\n if (!selectableChains.includes(fromChainId)) {\n selectableChains.unshift(fromChainId);\n }\n\n return selectableChains;\n}\n"],"mappings":";;;;;;;AASA,SAAOQ,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAAiC,EAAAC,gBAAAC,YAAAJ,GAMvCK;CAAA,AAAAJ,EAAA,OAAAE,KAAAF,EAAA,OAAAG,KAI+DC,IAAA;EAAAF;EAAAC;EAG7D,EAAAH,EAAA,KAAAE,GAAAF,EAAA,KAAAG,GAAAH,EAAA,KAAAI,KAAAA,IAAAJ,EAAA;CAHD,IAAA,EAAAK,kBAAAC,MAA0CZ,EAAoBU,EAG5D,EAHMC,IAAAC,MAAAC,KAAAA,IAAAZ,IAAAW,GAIR,EAAAE,iBAAAC,MAAkDhB,GAAuB,EACzE,EAAAiB,wBAA6BnB,GAAiB,EAC9CoB,IAA0BnB,GAAsB,EAACoB;CAAA,AAAAZ,EAAA,OAAAK,KAAAL,EAAA,OAAAS,KAAAT,EAAA,OAAAU,KAAAV,EAAA,OAAAW,KAAAX,EAAA,OAAAE,KAExBU,IAAAC,EAA4B;EAAAH;EAAAD;EAAAE;EAAAN;EAAAH;EAMpD,CAAC,EAAAF,EAAA,KAAAK,GAAAL,EAAA,KAAAS,GAAAT,EAAA,KAAAU,GAAAV,EAAA,KAAAW,GAAAX,EAAA,KAAAE,GAAAF,EAAA,KAAAY,KAAAA,IAAAZ,EAAA;CANF,IAAAc,IAAyBF,GAMtBG;CAAA,AAAAf,EAAA,OAAAc,IAI6DC,IAAAf,EAAA,OAA3Ce,KAAAC,MAAWF,EAAgBG,SAAUD,EAAM,EAAAhB,EAAA,KAAAc,GAAAd,EAAA,MAAAe;CAAA,IAAAG;CAC/D,OAD+DlB,EAAA,QAAAc,KAAAd,EAAA,QAAAe,KAFzDG,IAAA;EAAAJ;EAAAK,mBAEcJ;EACpB,EAAAf,EAAA,MAAAc,GAAAd,EAAA,MAAAe,GAAAf,EAAA,MAAAkB,KAAAA,IAAAlB,EAAA,KAHMkB;;AAMT,SAAgBL,EAA4B,EAC1CH,qBACAD,yBACAE,sBACAN,qBACAH,kBAOC;CAID,IAAI,EAFFQ,KAAoBD,KAAwBJ,EAAiBgB,SAG7D,OAAO,CAACnB,EAAY;CAGtB,IAAMY,IAAmBT,EAAiBiB,QAAQN,MAChDL,EAAkBM,SAASD,EAC7B,CAAC;CAMD,OAJKF,EAAiBG,SAASf,EAAY,IACzCY,EAAiBS,QAAQrB,EAAY,EAGhCY"}
@@ -1 +1 @@
1
- {"version":3,"file":"useSlippage.js","names":["stablecoinDefaultSlippage","slippageParamAtom","useIsAddressStablecoin","useWidgetTokens","useAtomValue","useChainId","TradeMode","twapSlippageAtom","useSlippage","tradeMode","$","_c","slippageFromParams","chainId","tokenFrom","tokenTo","t0","address","t1","t2","tokensAreStablecoins","resolvedSlippage","t3"],"sources":["../../src/hooks/useSlippage.ts"],"sourcesContent":["import { stablecoinDefaultSlippage } from \"@/components/widget/TradeParameters/state/constants\";\nimport { slippageParamAtom } from \"@/components/widget/TradeParameters/state/slippageParamAtom\";\nimport { useIsAddressStablecoin } from \"@/tokens/stabeCoins/hooks\";\nimport { useWidgetTokens } from \"@/core/inputs/state/common\";\nimport { useAtomValue } from \"@/core/store\";\nimport { useChainId } from \"wagmi\";\nimport type { TradeMode } from \"@/core/state/tradeModeAtom\";\nimport { twapSlippageAtom } from \"@/core/twap/state/twapParamsAtom\";\n\nexport const useSlippage = (tradeMode: TradeMode) => {\n const slippageFromParams = useAtomValue(\n tradeMode === \"twap\" ? twapSlippageAtom : slippageParamAtom\n );\n const chainId = useChainId();\n const { tokenFrom, tokenTo } = useWidgetTokens(tradeMode);\n\n const tokensAreStablecoins = useIsAddressStablecoin(\n // overhead of this is minimal, don't memoize\n [tokenFrom?.address, tokenTo?.address], // undefined will result in false\n chainId\n );\n\n const resolvedSlippage = tokensAreStablecoins\n ? stablecoinDefaultSlippage // override slippage for stablecoins\n : slippageFromParams; // otherwise use user-defined slippage\n\n return { resolvedSlippage, slippageFromParams };\n};\n"],"mappings":";;;;;;;;;AASA,IAAaQ,KAAcC,MAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EACzBC,IAA2BR,EACzBK,MAAc,SAAdF,IAAAN,EACD,EACDY,IAAgBR,GAAY,EAC5B,EAAAS,cAAAC,eAA+BZ,EAAgBM,EAAU,EAItDO,IAAAF,GAASG,SAAWC,IAAAH,GAAOE,SAASE;AAAA,CAAAT,EAAA,OAAAM,KAAAN,EAAA,OAAAQ,KAArCC,IAAA,CAACH,GAAoBE,EAAiB,EAAAR,EAAA,KAAAM,GAAAN,EAAA,KAAAQ,GAAAR,EAAA,KAAAS,KAAAA,IAAAT,EAAA;CAIxC,IAAAW,IAN6BnB,EAE3BiB,GACAN,EACD,GAEwBb,IAAAY,GAEFU;AAEwB,QAFxBZ,EAAA,OAAAW,KAAAX,EAAA,OAAAE,KAEhBU,IAAA;EAAAD;EAAAT;EAAwC,EAAAF,EAAA,KAAAW,GAAAX,EAAA,KAAAE,GAAAF,EAAA,KAAAY,KAAAA,IAAAZ,EAAA,IAAxCY"}
1
+ {"version":3,"file":"useSlippage.js","names":["stablecoinDefaultSlippage","slippageParamAtom","useIsAddressStablecoin","useWidgetTokens","useAtomValue","useChainId","TradeMode","twapSlippageAtom","useSlippage","tradeMode","$","_c","slippageFromParams","chainId","tokenFrom","tokenTo","t0","address","t1","t2","tokensAreStablecoins","resolvedSlippage","t3"],"sources":["../../src/hooks/useSlippage.ts"],"sourcesContent":["import { stablecoinDefaultSlippage } from \"@/components/widget/TradeParameters/state/constants\";\nimport { slippageParamAtom } from \"@/components/widget/TradeParameters/state/slippageParamAtom\";\nimport { useIsAddressStablecoin } from \"@/tokens/stabeCoins/hooks\";\nimport { useWidgetTokens } from \"@/core/inputs/state/common\";\nimport { useAtomValue } from \"@/core/store\";\nimport { useChainId } from \"wagmi\";\nimport type { TradeMode } from \"@/core/state/tradeModeAtom\";\nimport { twapSlippageAtom } from \"@/core/twap/state/twapParamsAtom\";\n\nexport const useSlippage = (tradeMode: TradeMode) => {\n const slippageFromParams = useAtomValue(\n tradeMode === \"twap\" ? twapSlippageAtom : slippageParamAtom\n );\n const chainId = useChainId();\n const { tokenFrom, tokenTo } = useWidgetTokens(tradeMode);\n\n const tokensAreStablecoins = useIsAddressStablecoin(\n // overhead of this is minimal, don't memoize\n [tokenFrom?.address, tokenTo?.address], // undefined will result in false\n chainId\n );\n\n const resolvedSlippage = tokensAreStablecoins\n ? stablecoinDefaultSlippage // override slippage for stablecoins\n : slippageFromParams; // otherwise use user-defined slippage\n\n return { resolvedSlippage, slippageFromParams };\n};\n"],"mappings":";;;;;;;;;AASA,IAAaQ,KAAcC,MAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EACzBC,IAA2BR,EACzBK,MAAc,SAAdF,IAAAN,EACD,EACDY,IAAgBR,GAAY,EAC5B,EAAAS,cAAAC,eAA+BZ,EAAgBM,EAAU,EAItDO,IAAAF,GAASG,SAAWC,IAAAH,GAAOE,SAASE;CAAA,AAAAT,EAAA,OAAAM,KAAAN,EAAA,OAAAQ,KAArCC,IAAA,CAACH,GAAoBE,EAAiB,EAAAR,EAAA,KAAAM,GAAAN,EAAA,KAAAQ,GAAAR,EAAA,KAAAS,KAAAA,IAAAT,EAAA;CAIxC,IAAAW,IAN6BnB,EAE3BiB,GACAN,EAGuBO,GAAApB,IAAAY,GAEFU;CAEwB,OAFxBZ,EAAA,OAAAW,KAAAX,EAAA,OAAAE,KAEhBU,IAAA;EAAAD;EAAAT;EAAwC,EAAAF,EAAA,KAAAW,GAAAX,EAAA,KAAAE,GAAAF,EAAA,KAAAY,KAAAA,IAAAZ,EAAA,IAAxCY"}
@@ -1 +1 @@
1
- {"version":3,"file":"useSwitchChainWithGuard.js","names":["switchChain","switchChainUtil","SupportedChainId","useEnsureConnectorClient","useAccount","useMutation","UseMutationOptions","SwitchChainWithGuardInput","chainId","UseSwitchChainWithGuardMutationOption","Omit","Error","UseSwitchChainWithGuardInput","mutationOptions","useSwitchChainWithGuard","t0","$","_c","t1","undefined","address","account","ensureViemClient","t2","Symbol","for","t3","t4","mutationKey","mutationFn"],"sources":["../../src/hooks/useSwitchChainWithGuard.ts"],"sourcesContent":["import { switchChain as switchChainUtil } from \"@/lib/web3/wagmi/switchChain\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { useEnsureConnectorClient } from \"./useMinViemClient\";\nimport { useAccount } from \"wagmi\";\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\n\ntype SwitchChainWithGuardInput = {\n chainId: SupportedChainId;\n};\n\ntype UseSwitchChainWithGuardMutationOption = Omit<\n UseMutationOptions<void, Error, SwitchChainWithGuardInput, void>,\n \"mutationFn\" | \"mutationKey\"\n>;\n\ntype UseSwitchChainWithGuardInput = {\n mutationOptions?: UseSwitchChainWithGuardMutationOption;\n};\n\nexport function useSwitchChainWithGuard({\n mutationOptions,\n}: UseSwitchChainWithGuardInput = {}) {\n const { address: account } = useAccount();\n const { ensureViemClient } = useEnsureConnectorClient();\n\n return useMutation<void, Error, SwitchChainWithGuardInput, void>({\n mutationKey: [\"switchChainWithGuard\"],\n mutationFn: async ({ chainId }) => {\n await switchChainUtil({\n chainId,\n });\n // guard against using minClient with wrong chainId\n await ensureViemClient({\n chainId,\n account,\n });\n },\n ...mutationOptions,\n });\n}\n"],"mappings":";;;;;;AAmBA,SAAOc,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EAAAC;AAAA,CAAAF,EAAA,OAAAD,IAE6BG,IAAAF,EAAA,MAFIE,IAAAH,MAAAI,KAAAA,IAAA,EAEJ,GAFIJ,GAEJC,EAAA,KAAAD,GAAAC,EAAA,KAAAE;CAFI,IAAA,EAAAL,uBAAAK,GAGtC,EAAAE,SAAAC,MAA6BjB,GAAY,EACzC,EAAAkB,wBAA6BnB,GAA0B,EAACoB;AAAA,CAAAP,EAAA,OAAAQ,OAAAC,IAAA,4BAAA,IAGzCF,IAAA,CAAC,uBAAuB,EAAAP,EAAA,KAAAO,KAAAA,IAAAP,EAAA;CAAA,IAAAU;AAAA,CAAAV,EAAA,OAAAK,KAAAL,EAAA,OAAAM,KACzBI,IAAA,OAAAC,MAAA;EAAO,IAAA,EAAAnB,eAAAmB;AAKjB,EAJA,MAAM1B,EAAgB,EAAAO,YAErB,CAAC,EAEF,MAAMc,EAAiB;GAAAd;GAAAa;GAGtB,CAAC;IACHL,EAAA,KAAAK,GAAAL,EAAA,KAAAM,GAAAN,EAAA,KAAAU,KAAAA,IAAAV,EAAA;CAAA,IAAAW;AAEF,QAFEX,EAAA,OAAAH,KAAAG,EAAA,OAAAU,KAX8DC,IAAA;EAAAC,aAClDL;EAAwBM,YACzBH;EASX,GACEb;EACJ,EAAAG,EAAA,KAAAH,GAAAG,EAAA,KAAAU,GAAAV,EAAA,KAAAW,KAAAA,IAAAX,EAAA,IAbMX,EAA0DsB,EAa/D"}
1
+ {"version":3,"file":"useSwitchChainWithGuard.js","names":["switchChain","switchChainUtil","SupportedChainId","useEnsureConnectorClient","useAccount","useMutation","UseMutationOptions","SwitchChainWithGuardInput","chainId","UseSwitchChainWithGuardMutationOption","Omit","Error","UseSwitchChainWithGuardInput","mutationOptions","useSwitchChainWithGuard","t0","$","_c","t1","undefined","address","account","ensureViemClient","t2","Symbol","for","t3","t4","mutationKey","mutationFn"],"sources":["../../src/hooks/useSwitchChainWithGuard.ts"],"sourcesContent":["import { switchChain as switchChainUtil } from \"@/lib/web3/wagmi/switchChain\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { useEnsureConnectorClient } from \"./useMinViemClient\";\nimport { useAccount } from \"wagmi\";\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\n\ntype SwitchChainWithGuardInput = {\n chainId: SupportedChainId;\n};\n\ntype UseSwitchChainWithGuardMutationOption = Omit<\n UseMutationOptions<void, Error, SwitchChainWithGuardInput, void>,\n \"mutationFn\" | \"mutationKey\"\n>;\n\ntype UseSwitchChainWithGuardInput = {\n mutationOptions?: UseSwitchChainWithGuardMutationOption;\n};\n\nexport function useSwitchChainWithGuard({\n mutationOptions,\n}: UseSwitchChainWithGuardInput = {}) {\n const { address: account } = useAccount();\n const { ensureViemClient } = useEnsureConnectorClient();\n\n return useMutation<void, Error, SwitchChainWithGuardInput, void>({\n mutationKey: [\"switchChainWithGuard\"],\n mutationFn: async ({ chainId }) => {\n await switchChainUtil({\n chainId,\n });\n // guard against using minClient with wrong chainId\n await ensureViemClient({\n chainId,\n account,\n });\n },\n ...mutationOptions,\n });\n}\n"],"mappings":";;;;;;AAmBA,SAAOc,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EAAAC;CAAA,AAAAF,EAAA,OAAAD,IAE6BG,IAAAF,EAAA,MAFIE,IAAAH,MAAAI,KAAAA,IAAA,EAEJ,GAFIJ,GAEJC,EAAA,KAAAD,GAAAC,EAAA,KAAAE;CAFI,IAAA,EAAAL,uBAAAK,GAGtC,EAAAE,SAAAC,MAA6BjB,GAAY,EACzC,EAAAkB,wBAA6BnB,GAA0B,EAACoB;CAAA,AAAAP,EAAA,OAAAQ,OAAAC,IAAA,4BAAA,IAGzCF,IAAA,CAAC,uBAAuB,EAAAP,EAAA,KAAAO,KAAAA,IAAAP,EAAA;CAAA,IAAAU;CAAA,AAAAV,EAAA,OAAAK,KAAAL,EAAA,OAAAM,KACzBI,IAAA,OAAAC,MAAA;EAAO,IAAA,EAAAnB,eAAAmB;EAKjB,AAJA,MAAM1B,EAAgB,EAAAO,YAErB,CAAC,EAEF,MAAMc,EAAiB;GAAAd;GAAAa;GAGtB,CAAC;IACHL,EAAA,KAAAK,GAAAL,EAAA,KAAAM,GAAAN,EAAA,KAAAU,KAAAA,IAAAV,EAAA;CAAA,IAAAW;CAEF,OAFEX,EAAA,OAAAH,KAAAG,EAAA,OAAAU,KAX8DC,IAAA;EAAAC,aAClDL;EAAwBM,YACzBH;EASX,GACEb;EACJ,EAAAG,EAAA,KAAAH,GAAAG,EAAA,KAAAU,GAAAV,EAAA,KAAAW,KAAAA,IAAAX,EAAA,IAbMX,EAA0DsB,EAa/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"urls.js","names":["jotaiStore","devURLsAtom","PROD_API_URL","PROD_PROXY_API_URL","PROD_EXPLORER_URL","getApiURL","apiURL","get","getApiProxyURL","apiProxyURL","getExplorerURL","explorerURL"],"sources":["../../../src/lib/constants/urls.ts"],"sourcesContent":["import { jotaiStore } from \"@/core/store\";\nimport { devURLsAtom } from \"@/core/state/configAtom\";\n\nconst PROD_API_URL = \"https://api.paraswap.io\";\nconst PROD_PROXY_API_URL = \"https://proxy.paraswap.io\";\nconst PROD_EXPLORER_URL = \"https://explorer.velora.xyz\";\n\nexport function getApiURL(): string {\n const { apiURL } = jotaiStore.get(devURLsAtom);\n if (apiURL) return apiURL;\n\n return PROD_API_URL;\n}\n\nexport function getApiProxyURL(): string {\n const { apiProxyURL } = jotaiStore.get(devURLsAtom);\n if (apiProxyURL) return apiProxyURL;\n\n return PROD_PROXY_API_URL;\n}\n\nexport function getExplorerURL(): string {\n const { explorerURL } = jotaiStore.get(devURLsAtom);\n if (explorerURL) return explorerURL;\n return PROD_EXPLORER_URL;\n}\n"],"mappings":";;;AAGA,IAAME,IAAe,2BACfC,IAAqB,6BACrBC,IAAoB;AAE1B,SAAgBC,IAAoB;CAClC,IAAM,EAAEC,cAAWN,EAAWO,IAAIN,EAAY;AAG9C,QAFIK,KAEGJ;;AAGT,SAAgBM,IAAyB;CACvC,IAAM,EAAEC,mBAAgBT,EAAWO,IAAIN,EAAY;AAGnD,QAFIQ,KAEGN;;AAGT,SAAgBO,IAAyB;CACvC,IAAM,EAAEC,mBAAgBX,EAAWO,IAAIN,EAAY;AAEnD,QADIU,KACGP"}
1
+ {"version":3,"file":"urls.js","names":["jotaiStore","devURLsAtom","PROD_API_URL","PROD_PROXY_API_URL","PROD_EXPLORER_URL","getApiURL","apiURL","get","getApiProxyURL","apiProxyURL","getExplorerURL","explorerURL"],"sources":["../../../src/lib/constants/urls.ts"],"sourcesContent":["import { jotaiStore } from \"@/core/store\";\nimport { devURLsAtom } from \"@/core/state/configAtom\";\n\nconst PROD_API_URL = \"https://api.paraswap.io\";\nconst PROD_PROXY_API_URL = \"https://proxy.paraswap.io\";\nconst PROD_EXPLORER_URL = \"https://explorer.velora.xyz\";\n\nexport function getApiURL(): string {\n const { apiURL } = jotaiStore.get(devURLsAtom);\n if (apiURL) return apiURL;\n\n return PROD_API_URL;\n}\n\nexport function getApiProxyURL(): string {\n const { apiProxyURL } = jotaiStore.get(devURLsAtom);\n if (apiProxyURL) return apiProxyURL;\n\n return PROD_PROXY_API_URL;\n}\n\nexport function getExplorerURL(): string {\n const { explorerURL } = jotaiStore.get(devURLsAtom);\n if (explorerURL) return explorerURL;\n return PROD_EXPLORER_URL;\n}\n"],"mappings":";;;AAGA,IAAME,IAAe,2BACfC,IAAqB,6BACrBC,IAAoB;AAE1B,SAAgBC,IAAoB;CAClC,IAAM,EAAEC,cAAWN,EAAWO,IAAIN,EAAY;CAG9C,OAFIK,KAEGJ;;AAGT,SAAgBM,IAAyB;CACvC,IAAM,EAAEC,mBAAgBT,EAAWO,IAAIN,EAAY;CAGnD,OAFIQ,KAEGN;;AAGT,SAAgBO,IAAyB;CACvC,IAAM,EAAEC,mBAAgBX,EAAWO,IAAIN,EAAY;CAEnD,OADIU,KACGP"}
@@ -1 +1 @@
1
- {"version":3,"file":"ipfs.js","names":["axios","AxiosResponse","ipfsRegEx","IPFStransformer","TransformURI","uri","match","protocol","hash","createURItoHttpURLTransformer","transformers","httpURL","reduce","result","transformer","uriToHttpURL","constructIpfsFetcher","baseUrl","ipfsHash","signal","AbortSignal","get","T","pinataFetcher","cloudflareFetcher","fetchDataOnIpfs","Promise"],"sources":["../../src/lib/ipfs.ts"],"sourcesContent":["import axios, { type AxiosResponse } from \"axios\";\n\nconst ipfsRegEx = /^(ipfs|ipns):\\/\\/(.*)$/i;\n\nexport const IPFStransformer: TransformURI = (uri) => {\n const match = uri.match(ipfsRegEx);\n // likely http:// , https:// or // uri\n if (!match) return null;\n\n const [, protocol, hash] = match;\n if (!protocol || !hash) return null;\n\n return `https://ipfs.io/${protocol}/${hash}/`;\n};\n\n// takes URI, returns string if applicable or null\ntype TransformURI = (uri: string) => string | null;\n\nconst createURItoHttpURLTransformer = (\n ...transformers: TransformURI[]\n): ((uri: string) => string) => {\n return (uri) => {\n // try each transformer\n const httpURL = transformers.reduce<string | null>(\n (result, transformer) => {\n // as soon as transformer returns string, skip further transformers\n if (result !== null) return result;\n // no transformer returned string yet, so try current transformer\n return transformer(uri);\n },\n null\n );\n\n return httpURL || uri;\n };\n};\n\n// uri can be\n// IPFS ipfs://QmV8AfDE8GFSGQvt3vck8EwAzsPuNTmtP8VcQJE3qxRPaZ\n// IPNS ipns://app.uniswap.org\n// http, https or // (match current protocol)\n\nexport const uriToHttpURL = createURItoHttpURLTransformer(IPFStransformer);\n\nconst constructIpfsFetcher =\n (baseUrl: string) =>\n async <T>(ipfsHash: string, signal?: AbortSignal) =>\n axios.get<T>(baseUrl + ipfsHash, { signal });\nconst pinataFetcher = constructIpfsFetcher(\n \"https://gateway.pinata.cloud/ipfs/\"\n);\nconst cloudflareFetcher = constructIpfsFetcher(\n \"https://cloudflare-ipfs.com/ipfs/\"\n);\n\nexport const fetchDataOnIpfs = async <T>(\n ipfsHash: string,\n signal?: AbortSignal\n): Promise<AxiosResponse<T>> => {\n try {\n return await pinataFetcher<T>(ipfsHash, signal);\n } catch {\n return await cloudflareFetcher<T>(ipfsHash, signal);\n }\n};\n"],"mappings":";;AAEA,IAAME,IAAY,2BAwCLa,MAvBX,GAAGL,OAEKL,MAEUK,EAAaE,QAC1BC,GAAQC,MAEHD,MAAW,OAERC,EAAYT,EAAI,GAFKQ,GAI9B,KACD,IAEiBR,IA7BwBA,MAAQ;CACpD,IAAMC,IAAQD,EAAIC,MAAMJ,EAAU;AAElC,KAAI,CAACI,EAAO,QAAO;CAEnB,IAAM,GAAGC,GAAUC,KAAQF;AAG3B,QAFI,CAACC,KAAY,CAACC,IAAa,OAExB,mBAAmBD,EAAQ,GAAIC,EAAI;EA8B8B"}
1
+ {"version":3,"file":"ipfs.js","names":["axios","AxiosResponse","ipfsRegEx","IPFStransformer","TransformURI","uri","match","protocol","hash","createURItoHttpURLTransformer","transformers","httpURL","reduce","result","transformer","uriToHttpURL","constructIpfsFetcher","baseUrl","ipfsHash","signal","AbortSignal","get","T","pinataFetcher","cloudflareFetcher","fetchDataOnIpfs","Promise"],"sources":["../../src/lib/ipfs.ts"],"sourcesContent":["import axios, { type AxiosResponse } from \"axios\";\n\nconst ipfsRegEx = /^(ipfs|ipns):\\/\\/(.*)$/i;\n\nexport const IPFStransformer: TransformURI = (uri) => {\n const match = uri.match(ipfsRegEx);\n // likely http:// , https:// or // uri\n if (!match) return null;\n\n const [, protocol, hash] = match;\n if (!protocol || !hash) return null;\n\n return `https://ipfs.io/${protocol}/${hash}/`;\n};\n\n// takes URI, returns string if applicable or null\ntype TransformURI = (uri: string) => string | null;\n\nconst createURItoHttpURLTransformer = (\n ...transformers: TransformURI[]\n): ((uri: string) => string) => {\n return (uri) => {\n // try each transformer\n const httpURL = transformers.reduce<string | null>(\n (result, transformer) => {\n // as soon as transformer returns string, skip further transformers\n if (result !== null) return result;\n // no transformer returned string yet, so try current transformer\n return transformer(uri);\n },\n null\n );\n\n return httpURL || uri;\n };\n};\n\n// uri can be\n// IPFS ipfs://QmV8AfDE8GFSGQvt3vck8EwAzsPuNTmtP8VcQJE3qxRPaZ\n// IPNS ipns://app.uniswap.org\n// http, https or // (match current protocol)\n\nexport const uriToHttpURL = createURItoHttpURLTransformer(IPFStransformer);\n\nconst constructIpfsFetcher =\n (baseUrl: string) =>\n async <T>(ipfsHash: string, signal?: AbortSignal) =>\n axios.get<T>(baseUrl + ipfsHash, { signal });\nconst pinataFetcher = constructIpfsFetcher(\n \"https://gateway.pinata.cloud/ipfs/\"\n);\nconst cloudflareFetcher = constructIpfsFetcher(\n \"https://cloudflare-ipfs.com/ipfs/\"\n);\n\nexport const fetchDataOnIpfs = async <T>(\n ipfsHash: string,\n signal?: AbortSignal\n): Promise<AxiosResponse<T>> => {\n try {\n return await pinataFetcher<T>(ipfsHash, signal);\n } catch {\n return await cloudflareFetcher<T>(ipfsHash, signal);\n }\n};\n"],"mappings":";;AAEA,IAAME,IAAY,2BAwCLa,MAvBX,GAAGL,OAEKL,MAEUK,EAAaE,QAC1BC,GAAQC,MAEHD,MAAW,OAERC,EAAYT,EAAI,GAFKQ,GAI9B,KAGKF,IAAWN,IA7BwBA,MAAQ;CACpD,IAAMC,IAAQD,EAAIC,MAAMJ,EAAU;CAElC,IAAI,CAACI,GAAO,OAAO;CAEnB,IAAM,GAAGC,GAAUC,KAAQF;CAG3B,OAFI,CAACC,KAAY,CAACC,IAAa,OAExB,mBAAmBD,EAAQ,GAAIC,EAAI;EA8B8B"}
@@ -1 +1 @@
1
- {"version":3,"file":"queryClient.js","names":["getLogger","notifyOnPriceChange","isDeltaAuctionData","isExecutedDeltaAuction","DeltaPriceQueryKeyPrefix","isDataDeltaOrBridgePrice","deltaAuctionPollingQueryKey","isDataMarketPrice","MarketPriceQueryKeyPrefix","invalidateBalancesAndAllowancesFactory","isReceiptsInWaitForCallsStatusData","isTransactionReceipt","isWaitForCallsStatusData","QueryCache","QueryClient","hashFn","waitForCallsStatusQueryKey","waitForTransactionReceiptQueryKey","logger","queryClient","defaultOptions","queries","queryKeyHashFn","queryCache","onSuccess","data","query","queryKeyPrefix","queryKey","waitForTransactionReceiptQueryKeyPrefix","log","transactionHash","invalidateBalancesAndAllowances","nonces","waitForCallsStatusDataQueryKeyPrefix","status","id","deltaAuctionPollingQueryKeyPrefix","order","permit"],"sources":["../../src/lib/queryClient.ts"],"sourcesContent":["import { getLogger } from \"@/core/logger\";\nimport { notifyOnPriceChange } from \"@/events/effects/price\";\nimport {\n isDeltaAuctionData,\n isExecutedDeltaAuction,\n} from \"@/hooks/swap/prices/delta/orders/utils\";\nimport {\n DeltaPriceQueryKeyPrefix,\n isDataDeltaOrBridgePrice,\n} from \"@/hooks/swap/prices/delta/queries/useDeltaPriceQuery\";\nimport { deltaAuctionPollingQueryKey } from \"@/hooks/swap/prices/delta/queries/useWatchDeltaOrder\";\nimport {\n isDataMarketPrice,\n MarketPriceQueryKeyPrefix,\n} from \"@/hooks/swap/prices/market/queries/useMarketPriceQuery\";\nimport { invalidateBalancesAndAllowancesFactory } from \"@/hooks/tokens/balances/useInvalidateTokenData\";\nimport {\n isReceiptsInWaitForCallsStatusData,\n isTransactionReceipt,\n isWaitForCallsStatusData,\n} from \"@/hooks/txs/queries/utils\";\nimport { QueryCache, QueryClient } from \"@tanstack/react-query\";\nimport {\n hashFn,\n waitForCallsStatusQueryKey,\n waitForTransactionReceiptQueryKey,\n} from \"wagmi/query\";\n\nconst logger = getLogger(\"QueryCache\");\n\nexport const queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n queryKeyHashFn: hashFn, // for bigint support\n },\n },\n queryCache: new QueryCache({\n onSuccess(data, query) {\n const queryKeyPrefix = query.queryKey[0];\n\n if (\n queryKeyPrefix === waitForTransactionReceiptQueryKeyPrefix &&\n isTransactionReceipt(data)\n ) {\n logger.log(\n `waitForTransactionReceiptQuery:: tx ${data.transactionHash} is mined, invalidating balances and allowances`\n );\n invalidateBalancesAndAllowances({ nonces: true });\n return;\n }\n\n if (\n queryKeyPrefix === waitForCallsStatusDataQueryKeyPrefix &&\n isWaitForCallsStatusData(data) &&\n data.status === \"success\" &&\n isReceiptsInWaitForCallsStatusData(data)\n ) {\n logger.log(\n `waitForCallsStatusDataQuery:: batch ${data.id} success, invalidating balances and allowances`\n );\n invalidateBalancesAndAllowances({ nonces: false });\n return;\n }\n\n if (\n queryKeyPrefix === deltaAuctionPollingQueryKeyPrefix &&\n isDeltaAuctionData(data) &&\n isExecutedDeltaAuction(data)\n ) {\n logger.log(\n `deltaAuctionPollingQueryKey:: order ${data.id} is executed, invalidating balances and allowances`\n );\n invalidateBalancesAndAllowances({ nonces: !!data.order.permit });\n return;\n }\n\n if (\n queryKeyPrefix === DeltaPriceQueryKeyPrefix &&\n isDataDeltaOrBridgePrice(data)\n ) {\n notifyOnPriceChange(data, queryClient);\n return;\n }\n\n if (\n queryKeyPrefix === MarketPriceQueryKeyPrefix &&\n isDataMarketPrice(data)\n ) {\n notifyOnPriceChange(data, queryClient);\n return;\n }\n },\n }),\n});\n\nconst invalidateBalancesAndAllowances =\n invalidateBalancesAndAllowancesFactory(queryClient);\n\nconst waitForTransactionReceiptQueryKeyPrefix =\n waitForTransactionReceiptQueryKey()[0];\nconst waitForCallsStatusDataQueryKeyPrefix = waitForCallsStatusQueryKey({})[0];\nconst deltaAuctionPollingQueryKeyPrefix = deltaAuctionPollingQueryKey()[0];\n"],"mappings":";;;;;;;;;;;AA4BA,IAAMkB,IAASlB,EAAU,aAAa,EAEzBmB,IAAc,IAAIL,EAAY;CACzCM,gBAAgB,EACdC,SAAS,EACPC,gBAAgBP,GAClB,EACD;CACDQ,YAAY,IAAIV,EAAW,EACzBW,UAAUC,GAAMC,GAAO;EACrB,IAAMC,IAAiBD,EAAME,SAAS;AAEtC,MACED,MAAmBE,KACnBlB,EAAqBc,EAAK,EAC1B;AAIAO,GAHAd,EAAOY,IACL,uCAAuCL,EAAKM,gBAAe,iDAC5D,EACDC,EAAgC,EAAEC,QAAQ,IAAM,CAAC;AACjD;;AAGF,MACEN,MAAmBO,KACnBtB,EAAyBa,EAAK,IAC9BA,EAAKU,WAAW,aAChBzB,EAAmCe,EAAK,EACxC;AAIAO,GAHAd,EAAOY,IACL,uCAAuCL,EAAKW,GAAE,gDAC/C,EACDJ,EAAgC,EAAEC,QAAQ,IAAO,CAAC;AAClD;;AAGF,MACEN,MAAmBU,KACnBnC,EAAmBuB,EAAK,IACxBtB,EAAuBsB,EAAK,EAC5B;AAIAO,GAHAd,EAAOY,IACL,uCAAuCL,EAAKW,GAAE,oDAC/C,EACDJ,EAAgC,EAAEC,QAAQ,CAAC,CAACR,EAAKa,MAAMC,QAAQ,CAAC;AAChE;;AAGF,MACEZ,MAAAA,uBACAtB,EAAyBoB,EAAK,EAC9B;AACAxB,KAAoBwB,GAAMN,EAAY;AACtC;;AAGF,MACEQ,MAAAA,wBACApB,EAAkBkB,EAAK,EACvB;AACAxB,KAAoBwB,GAAMN,EAAY;AACtC;;IAGL,CAAA;CACF,CAAC,EAEIa,IACJvB,EAAuCU,EAAY,EAE/CU,IACJZ,GAAmC,CAAC,IAChCiB,IAAuClB,EAA2B,EAAE,CAAC,CAAC,IACtEqB,IAAoC/B,GAA6B,CAAC"}
1
+ {"version":3,"file":"queryClient.js","names":["getLogger","notifyOnPriceChange","isDeltaAuctionData","isExecutedDeltaAuction","DeltaPriceQueryKeyPrefix","isDataDeltaOrBridgePrice","deltaAuctionPollingQueryKey","isDataMarketPrice","MarketPriceQueryKeyPrefix","invalidateBalancesAndAllowancesFactory","isReceiptsInWaitForCallsStatusData","isTransactionReceipt","isWaitForCallsStatusData","QueryCache","QueryClient","hashFn","waitForCallsStatusQueryKey","waitForTransactionReceiptQueryKey","logger","queryClient","defaultOptions","queries","queryKeyHashFn","queryCache","onSuccess","data","query","queryKeyPrefix","queryKey","waitForTransactionReceiptQueryKeyPrefix","log","transactionHash","invalidateBalancesAndAllowances","nonces","waitForCallsStatusDataQueryKeyPrefix","status","id","deltaAuctionPollingQueryKeyPrefix","order","permit"],"sources":["../../src/lib/queryClient.ts"],"sourcesContent":["import { getLogger } from \"@/core/logger\";\nimport { notifyOnPriceChange } from \"@/events/effects/price\";\nimport {\n isDeltaAuctionData,\n isExecutedDeltaAuction,\n} from \"@/hooks/swap/prices/delta/orders/utils\";\nimport {\n DeltaPriceQueryKeyPrefix,\n isDataDeltaOrBridgePrice,\n} from \"@/hooks/swap/prices/delta/queries/useDeltaPriceQuery\";\nimport { deltaAuctionPollingQueryKey } from \"@/hooks/swap/prices/delta/queries/useWatchDeltaOrder\";\nimport {\n isDataMarketPrice,\n MarketPriceQueryKeyPrefix,\n} from \"@/hooks/swap/prices/market/queries/useMarketPriceQuery\";\nimport { invalidateBalancesAndAllowancesFactory } from \"@/hooks/tokens/balances/useInvalidateTokenData\";\nimport {\n isReceiptsInWaitForCallsStatusData,\n isTransactionReceipt,\n isWaitForCallsStatusData,\n} from \"@/hooks/txs/queries/utils\";\nimport { QueryCache, QueryClient } from \"@tanstack/react-query\";\nimport {\n hashFn,\n waitForCallsStatusQueryKey,\n waitForTransactionReceiptQueryKey,\n} from \"wagmi/query\";\n\nconst logger = getLogger(\"QueryCache\");\n\nexport const queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n queryKeyHashFn: hashFn, // for bigint support\n },\n },\n queryCache: new QueryCache({\n onSuccess(data, query) {\n const queryKeyPrefix = query.queryKey[0];\n\n if (\n queryKeyPrefix === waitForTransactionReceiptQueryKeyPrefix &&\n isTransactionReceipt(data)\n ) {\n logger.log(\n `waitForTransactionReceiptQuery:: tx ${data.transactionHash} is mined, invalidating balances and allowances`\n );\n invalidateBalancesAndAllowances({ nonces: true });\n return;\n }\n\n if (\n queryKeyPrefix === waitForCallsStatusDataQueryKeyPrefix &&\n isWaitForCallsStatusData(data) &&\n data.status === \"success\" &&\n isReceiptsInWaitForCallsStatusData(data)\n ) {\n logger.log(\n `waitForCallsStatusDataQuery:: batch ${data.id} success, invalidating balances and allowances`\n );\n invalidateBalancesAndAllowances({ nonces: false });\n return;\n }\n\n if (\n queryKeyPrefix === deltaAuctionPollingQueryKeyPrefix &&\n isDeltaAuctionData(data) &&\n isExecutedDeltaAuction(data)\n ) {\n logger.log(\n `deltaAuctionPollingQueryKey:: order ${data.id} is executed, invalidating balances and allowances`\n );\n invalidateBalancesAndAllowances({ nonces: !!data.order.permit });\n return;\n }\n\n if (\n queryKeyPrefix === DeltaPriceQueryKeyPrefix &&\n isDataDeltaOrBridgePrice(data)\n ) {\n notifyOnPriceChange(data, queryClient);\n return;\n }\n\n if (\n queryKeyPrefix === MarketPriceQueryKeyPrefix &&\n isDataMarketPrice(data)\n ) {\n notifyOnPriceChange(data, queryClient);\n return;\n }\n },\n }),\n});\n\nconst invalidateBalancesAndAllowances =\n invalidateBalancesAndAllowancesFactory(queryClient);\n\nconst waitForTransactionReceiptQueryKeyPrefix =\n waitForTransactionReceiptQueryKey()[0];\nconst waitForCallsStatusDataQueryKeyPrefix = waitForCallsStatusQueryKey({})[0];\nconst deltaAuctionPollingQueryKeyPrefix = deltaAuctionPollingQueryKey()[0];\n"],"mappings":";;;;;;;;;;;AA4BA,IAAMkB,IAASlB,EAAU,aAAa,EAEzBmB,IAAc,IAAIL,EAAY;CACzCM,gBAAgB,EACdC,SAAS,EACPC,gBAAgBP,GAClB,EACD;CACDQ,YAAY,IAAIV,EAAW,EACzBW,UAAUC,GAAMC,GAAO;EACrB,IAAMC,IAAiBD,EAAME,SAAS;EAEtC,IACED,MAAmBE,KACnBlB,EAAqBc,EAAK,EAC1B;GAIAO,AAHAd,EAAOY,IACL,uCAAuCL,EAAKM,gBAAe,iDAC5D,EACDC,EAAgC,EAAEC,QAAQ,IAAM,CAAC;GACjD;;EAGF,IACEN,MAAmBO,KACnBtB,EAAyBa,EAAK,IAC9BA,EAAKU,WAAW,aAChBzB,EAAmCe,EAAK,EACxC;GAIAO,AAHAd,EAAOY,IACL,uCAAuCL,EAAKW,GAAE,gDAC/C,EACDJ,EAAgC,EAAEC,QAAQ,IAAO,CAAC;GAClD;;EAGF,IACEN,MAAmBU,KACnBnC,EAAmBuB,EAAK,IACxBtB,EAAuBsB,EAAK,EAC5B;GAIAO,AAHAd,EAAOY,IACL,uCAAuCL,EAAKW,GAAE,oDAC/C,EACDJ,EAAgC,EAAEC,QAAQ,CAAC,CAACR,EAAKa,MAAMC,QAAQ,CAAC;GAChE;;EAGF,IACEZ,MAAAA,uBACAtB,EAAyBoB,EAAK,EAC9B;GACAxB,EAAoBwB,GAAMN,EAAY;GACtC;;EAGF,IACEQ,MAAAA,wBACApB,EAAkBkB,EAAK,EACvB;GACAxB,EAAoBwB,GAAMN,EAAY;GACtC;;IAGL,CAAA;CACF,CAAC,EAEIa,IACJvB,EAAuCU,EAAY,EAE/CU,IACJZ,GAAmC,CAAC,IAChCiB,IAAuClB,EAA2B,EAAE,CAAC,CAAC,IACtEqB,IAAoC/B,GAA6B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tradeMode.js","names":["TradeMode","NonEmptyArray","supportedTradeModes","const","validTradeModes","tradeModesWithCrosschain","Set","tradeModesWithSide","isTradeMode","mode","includes","sortTradeModes","a","b","indexOf"],"sources":["../../src/lib/tradeMode.ts"],"sourcesContent":["import type { TradeMode } from \"@/core/state/tradeModeAtom\";\nimport type { NonEmptyArray } from \"ts-essentials\";\n\nexport const supportedTradeModes = [\n \"swap\",\n \"limit\",\n \"otc\",\n \"twap\",\n] as const satisfies NonEmptyArray<TradeMode>;\n\nconst validTradeModes: string[] = supportedTradeModes;\n\n/**\n * Trade modes that support cross-chain.\n */\nexport const tradeModesWithCrosschain = new Set<TradeMode>([\n \"swap\",\n \"limit\",\n \"twap\",\n]);\n\n/**\n * Trade modes that have a side (BUY/SELL) selection in the form.\n */\nexport const tradeModesWithSide = new Set<TradeMode>([\"swap\", \"twap\"]);\n\nexport function isTradeMode(mode: string): mode is TradeMode {\n return validTradeModes.includes(mode);\n}\n\nexport function sortTradeModes(a: TradeMode, b: TradeMode) {\n return supportedTradeModes.indexOf(a) - supportedTradeModes.indexOf(b);\n}\n"],"mappings":";AAGA,IAAaE,IAAsB;CACjC;CACA;CACA;CACA;CACD,EAEKE,IAA4BF,GAKrBG,IAA2B,IAAIC,IAAe;CACzD;CACA;CACA;CACD,CAAC,EAKWC,IAAqB,IAAID,IAAe,CAAC,QAAQ,OAAO,CAAC;AAEtE,SAAgBE,EAAYC,GAAiC;AAC3D,QAAOL,EAAgBM,SAASD,EAAK;;AAGvC,SAAgBE,EAAeC,GAAcC,GAAc;AACzD,QAAOX,EAAoBY,QAAQF,EAAE,GAAGV,EAAoBY,QAAQD,EAAE"}
1
+ {"version":3,"file":"tradeMode.js","names":["TradeMode","NonEmptyArray","supportedTradeModes","const","validTradeModes","tradeModesWithCrosschain","Set","tradeModesWithSide","isTradeMode","mode","includes","sortTradeModes","a","b","indexOf"],"sources":["../../src/lib/tradeMode.ts"],"sourcesContent":["import type { TradeMode } from \"@/core/state/tradeModeAtom\";\nimport type { NonEmptyArray } from \"ts-essentials\";\n\nexport const supportedTradeModes = [\n \"swap\",\n \"limit\",\n \"otc\",\n \"twap\",\n] as const satisfies NonEmptyArray<TradeMode>;\n\nconst validTradeModes: string[] = supportedTradeModes;\n\n/**\n * Trade modes that support cross-chain.\n */\nexport const tradeModesWithCrosschain = new Set<TradeMode>([\n \"swap\",\n \"limit\",\n \"twap\",\n]);\n\n/**\n * Trade modes that have a side (BUY/SELL) selection in the form.\n */\nexport const tradeModesWithSide = new Set<TradeMode>([\"swap\", \"twap\"]);\n\nexport function isTradeMode(mode: string): mode is TradeMode {\n return validTradeModes.includes(mode);\n}\n\nexport function sortTradeModes(a: TradeMode, b: TradeMode) {\n return supportedTradeModes.indexOf(a) - supportedTradeModes.indexOf(b);\n}\n"],"mappings":";AAGA,IAAaE,IAAsB;CACjC;CACA;CACA;CACA;CACD,EAEKE,IAA4BF,GAKrBG,IAA2B,IAAIC,IAAe;CACzD;CACA;CACA;CACD,CAAC,EAKWC,IAAqB,IAAID,IAAe,CAAC,QAAQ,OAAO,CAAC;AAEtE,SAAgBE,EAAYC,GAAiC;CAC3D,OAAOL,EAAgBM,SAASD,EAAK;;AAGvC,SAAgBE,EAAeC,GAAcC,GAAc;CACzD,OAAOX,EAAoBY,QAAQF,EAAE,GAAGV,EAAoBY,QAAQD,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"approval.js","names":["useQueryClient","readContract","useCallback","erc20Abi","encodeFunctionData","Address","Call","Hex","useConfig","Config","mainnet","TokenApprovalPolicy","CAN_APPROVE_DIRECTLY","SHOULD_RESET_BEFORE_APPROVE","approveCheckerAddressMap","Record","id","ApprovalCheckerABI","inputs","internalType","name","type","outputs","stateMutability","const","TokenApprovalPolicyInput","address","chainId","config","getTokenApprovalPolicy","Promise","contractAddress","res","abi","functionName","args","GetTokenApprovalPolicyInput","GetTokenApprovalPolicyFunction","input","useGetTokenApprovalPolicy","$","_c","client","wagmiConfig","t0","t1","data","ensureQueryData","queryKey","queryFn","staleTime","Infinity","gcTime","ApprovalTxInput","spender","amount","encodeApprovalCalldata","ConstructApproveCallInput","token","constructApproveCall","to","value"],"sources":["../../../src/lib/utils/approval.ts"],"sourcesContent":["import { useQueryClient } from \"@tanstack/react-query\";\nimport { readContract } from \"@wagmi/core\";\nimport { useCallback } from \"react\";\nimport {\n erc20Abi,\n encodeFunctionData,\n type Address,\n type Call,\n type Hex,\n} from \"viem\";\nimport { useConfig, type Config } from \"wagmi\";\nimport { mainnet } from \"wagmi/chains\";\n\nexport enum TokenApprovalPolicy {\n CAN_APPROVE_DIRECTLY = \"CAN_APPROVE_DIRECTLY\",\n SHOULD_RESET_BEFORE_APPROVE = \"SHOULD_RESET_BEFORE_APPROVE\",\n}\n\nconst approveCheckerAddressMap: Record<number, Address> = {\n [mainnet.id]: \"0xC577E172a114782E4a56F83cf205f479d18B41b2\",\n};\n\nconst ApprovalCheckerABI = [\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"checkApproval\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\", // need to change to view from nonpayable for reeadContracts to infer types correctly\n // writeContract accepts nonpayable|payable, readContract accepts view|pure\n type: \"function\",\n },\n] as const;\n\ntype TokenApprovalPolicyInput = {\n address: Address;\n chainId: number;\n config: Config;\n};\n\n/**\n * This function is meant to detect non standard ERC20 tokens (USDT) that presents wrong amount to approve function.\n * For this kind of \"broken\" token, users have to reset allowance (approve(0)) before approving our smart contract again for a non-zero value\n *\n * The smart contract ApproveChecker works likewise, if token:\n * - broken (not really a contract) return 0\n * - needs straight approval return 1\n * - needs to reset allowance then ask approval return 2\n *\n * N.B: case 0 has intentionally been mapped to the same output as 1\n * just in case a token is broken but can still be approved straight away.\n */\nexport async function getTokenApprovalPolicy({\n address,\n config,\n chainId,\n}: TokenApprovalPolicyInput & {\n chainId: number;\n}): Promise<TokenApprovalPolicy> {\n const contractAddress = approveCheckerAddressMap[chainId];\n // assume default\n if (!contractAddress) return TokenApprovalPolicy.CAN_APPROVE_DIRECTLY;\n\n try {\n const res = await readContract(config, {\n abi: ApprovalCheckerABI,\n functionName: \"checkApproval\",\n address: contractAddress,\n args: [address],\n chainId,\n });\n\n switch (res) {\n case 2n:\n return TokenApprovalPolicy.SHOULD_RESET_BEFORE_APPROVE;\n case 0n:\n case 1n:\n default:\n return TokenApprovalPolicy.CAN_APPROVE_DIRECTLY;\n }\n } catch {\n return TokenApprovalPolicy.CAN_APPROVE_DIRECTLY;\n }\n}\n\ntype GetTokenApprovalPolicyInput = {\n address: Address;\n chainId: number;\n};\n\nexport type GetTokenApprovalPolicyFunction = (\n input: GetTokenApprovalPolicyInput\n) => Promise<TokenApprovalPolicy>;\n\n// better to have an on-deman function to fetch TokenApprovalPolicyInput and put it in cache forever,\n// than to rely on useReadContract which will fetch only async and would be disabled when ApprovalChecker is not available\nexport function useGetTokenApprovalPolicy(): GetTokenApprovalPolicyFunction {\n const client = useQueryClient();\n const wagmiConfig = useConfig();\n\n return useCallback<GetTokenApprovalPolicyFunction>(\n async ({ address, chainId }) => {\n const data = await client.ensureQueryData({\n queryKey: [\"token-approval-policy\", address, chainId],\n queryFn: () =>\n getTokenApprovalPolicy({ address, chainId, config: wagmiConfig }),\n staleTime: Infinity,\n gcTime: Infinity,\n });\n\n return data;\n },\n [client, wagmiConfig]\n );\n}\n\ntype ApprovalTxInput = {\n spender: Address;\n amount: bigint;\n};\n\nexport function encodeApprovalCalldata({\n spender,\n amount,\n}: ApprovalTxInput): Hex {\n return encodeFunctionData({\n abi: erc20Abi,\n functionName: \"approve\",\n args: [spender, amount],\n });\n}\n\ntype ConstructApproveCallInput = ApprovalTxInput & {\n token: Address;\n};\n\nexport function constructApproveCall({\n spender,\n amount,\n token,\n}: ConstructApproveCallInput): Call {\n return {\n to: token,\n data: encodeApprovalCalldata({ spender, amount }),\n value: 0n,\n };\n}\n"],"mappings":";;;;;;;;AAaA,IAAYW,IAAL,yBAAA,GAAA;QACLC,EAAAA,uBAAAA,wBACAC,EAAAA,8BAAAA;KACF,EAEMC,IAAoD,GACvDJ,EAAQM,KAAK,8CACf,EAEKC,IAAqB,CACzB;CACEC,QAAQ,CACN;EACEC,cAAc;EACdC,MAAM;EACNC,MAAM;EACP,CACF;CACDD,MAAM;CACNE,SAAS,CACP;EACEH,cAAc;EACdC,MAAM;EACNC,MAAM;EACP,CACF;CACDE,iBAAiB;CAEjBF,MAAM;CACP,CACF;AAoBD,eAAsBQ,EAAuB,EAC3CH,YACAE,WACAD,cAG+B;CAC/B,IAAMI,IAAkBjB,EAAyBa;AAEjD,KAAI,CAACI,EAAiB,QAAOpB,EAAoBC;AAEjD,KAAI;AASF,UARY,MAAMX,EAAa2B,GAAQ;GACrCK,KAAKhB;GACLiB,cAAc;GACdR,SAASK;GACTI,MAAM,CAACT,EAAQ;GACfC;GACD,CAAC,EAEF;GACE,KAAK,GACH,QAAOhB,EAAoBE;GAG7B,QACE,QAAOF,EAAoBC;;SAEzB;AACN,SAAOD,EAAoBC;;;AAe/B,SAAO2B,IAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EACLC,IAAe1C,GAAgB,EAC/B2C,IAAoBnC,GAAW,EAACoC;AAa7B,QAb6BJ,EAAA,OAAAE,KAAAF,EAAA,OAAAG,KAG9BC,IAAA,OAAAC,MAAA;EAAO,IAAA,EAAAnB,YAAAC,eAAAkB;AAOF,SANU,MAAMH,EAAMK,gBAAiB;GAAAC,UAC9B;IAAC;IAAyBtB;IAASC;IAAQ;GAAAsB,eAEnDpB,EAAuB;IAAAH;IAAAC;IAAAC,QAA4Be;IAAa,CAAC;GAAAO,WACxDC;GAAQC,QACXD;GACT,CAAC;IAGHX,EAAA,KAAAE,GAAAF,EAAA,KAAAG,GAAAH,EAAA,KAAAI,KAAAA,IAAAJ,EAAA,IAXII;;AAqBT,SAAgBY,EAAuB,EACrCF,YACAC,aACuB;AACvB,QAAOnD,EAAmB;EACxB6B,KAAK9B;EACL+B,cAAc;EACdC,MAAM,CAACmB,GAASC,EAAM;EACvB,CAAC;;AAOJ,SAAgBI,EAAqB,EACnCL,YACAC,WACAG,YACkC;AAClC,QAAO;EACLE,IAAIF;EACJZ,MAAMU,EAAuB;GAAEF;GAASC;GAAQ,CAAC;EACjDM,OAAO;EACR"}
1
+ {"version":3,"file":"approval.js","names":["useQueryClient","readContract","useCallback","erc20Abi","encodeFunctionData","Address","Call","Hex","useConfig","Config","mainnet","TokenApprovalPolicy","CAN_APPROVE_DIRECTLY","SHOULD_RESET_BEFORE_APPROVE","approveCheckerAddressMap","Record","id","ApprovalCheckerABI","inputs","internalType","name","type","outputs","stateMutability","const","TokenApprovalPolicyInput","address","chainId","config","getTokenApprovalPolicy","Promise","contractAddress","res","abi","functionName","args","GetTokenApprovalPolicyInput","GetTokenApprovalPolicyFunction","input","useGetTokenApprovalPolicy","$","_c","client","wagmiConfig","t0","t1","data","ensureQueryData","queryKey","queryFn","staleTime","Infinity","gcTime","ApprovalTxInput","spender","amount","encodeApprovalCalldata","ConstructApproveCallInput","token","constructApproveCall","to","value"],"sources":["../../../src/lib/utils/approval.ts"],"sourcesContent":["import { useQueryClient } from \"@tanstack/react-query\";\nimport { readContract } from \"@wagmi/core\";\nimport { useCallback } from \"react\";\nimport {\n erc20Abi,\n encodeFunctionData,\n type Address,\n type Call,\n type Hex,\n} from \"viem\";\nimport { useConfig, type Config } from \"wagmi\";\nimport { mainnet } from \"wagmi/chains\";\n\nexport enum TokenApprovalPolicy {\n CAN_APPROVE_DIRECTLY = \"CAN_APPROVE_DIRECTLY\",\n SHOULD_RESET_BEFORE_APPROVE = \"SHOULD_RESET_BEFORE_APPROVE\",\n}\n\nconst approveCheckerAddressMap: Record<number, Address> = {\n [mainnet.id]: \"0xC577E172a114782E4a56F83cf205f479d18B41b2\",\n};\n\nconst ApprovalCheckerABI = [\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"checkApproval\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\", // need to change to view from nonpayable for reeadContracts to infer types correctly\n // writeContract accepts nonpayable|payable, readContract accepts view|pure\n type: \"function\",\n },\n] as const;\n\ntype TokenApprovalPolicyInput = {\n address: Address;\n chainId: number;\n config: Config;\n};\n\n/**\n * This function is meant to detect non standard ERC20 tokens (USDT) that presents wrong amount to approve function.\n * For this kind of \"broken\" token, users have to reset allowance (approve(0)) before approving our smart contract again for a non-zero value\n *\n * The smart contract ApproveChecker works likewise, if token:\n * - broken (not really a contract) return 0\n * - needs straight approval return 1\n * - needs to reset allowance then ask approval return 2\n *\n * N.B: case 0 has intentionally been mapped to the same output as 1\n * just in case a token is broken but can still be approved straight away.\n */\nexport async function getTokenApprovalPolicy({\n address,\n config,\n chainId,\n}: TokenApprovalPolicyInput & {\n chainId: number;\n}): Promise<TokenApprovalPolicy> {\n const contractAddress = approveCheckerAddressMap[chainId];\n // assume default\n if (!contractAddress) return TokenApprovalPolicy.CAN_APPROVE_DIRECTLY;\n\n try {\n const res = await readContract(config, {\n abi: ApprovalCheckerABI,\n functionName: \"checkApproval\",\n address: contractAddress,\n args: [address],\n chainId,\n });\n\n switch (res) {\n case 2n:\n return TokenApprovalPolicy.SHOULD_RESET_BEFORE_APPROVE;\n case 0n:\n case 1n:\n default:\n return TokenApprovalPolicy.CAN_APPROVE_DIRECTLY;\n }\n } catch {\n return TokenApprovalPolicy.CAN_APPROVE_DIRECTLY;\n }\n}\n\ntype GetTokenApprovalPolicyInput = {\n address: Address;\n chainId: number;\n};\n\nexport type GetTokenApprovalPolicyFunction = (\n input: GetTokenApprovalPolicyInput\n) => Promise<TokenApprovalPolicy>;\n\n// better to have an on-deman function to fetch TokenApprovalPolicyInput and put it in cache forever,\n// than to rely on useReadContract which will fetch only async and would be disabled when ApprovalChecker is not available\nexport function useGetTokenApprovalPolicy(): GetTokenApprovalPolicyFunction {\n const client = useQueryClient();\n const wagmiConfig = useConfig();\n\n return useCallback<GetTokenApprovalPolicyFunction>(\n async ({ address, chainId }) => {\n const data = await client.ensureQueryData({\n queryKey: [\"token-approval-policy\", address, chainId],\n queryFn: () =>\n getTokenApprovalPolicy({ address, chainId, config: wagmiConfig }),\n staleTime: Infinity,\n gcTime: Infinity,\n });\n\n return data;\n },\n [client, wagmiConfig]\n );\n}\n\ntype ApprovalTxInput = {\n spender: Address;\n amount: bigint;\n};\n\nexport function encodeApprovalCalldata({\n spender,\n amount,\n}: ApprovalTxInput): Hex {\n return encodeFunctionData({\n abi: erc20Abi,\n functionName: \"approve\",\n args: [spender, amount],\n });\n}\n\ntype ConstructApproveCallInput = ApprovalTxInput & {\n token: Address;\n};\n\nexport function constructApproveCall({\n spender,\n amount,\n token,\n}: ConstructApproveCallInput): Call {\n return {\n to: token,\n data: encodeApprovalCalldata({ spender, amount }),\n value: 0n,\n };\n}\n"],"mappings":";;;;;;;;AAaA,IAAYW,IAAL,yBAAA,GAAA;QACLC,EAAAA,uBAAuB,wBACvBC,EAAAA,8BAA8B;KAChC,EAEMC,IAAoD,GACvDJ,EAAQM,KAAK,8CACf,EAEKC,IAAqB,CACzB;CACEC,QAAQ,CACN;EACEC,cAAc;EACdC,MAAM;EACNC,MAAM;EACP,CACF;CACDD,MAAM;CACNE,SAAS,CACP;EACEH,cAAc;EACdC,MAAM;EACNC,MAAM;EACP,CACF;CACDE,iBAAiB;CAEjBF,MAAM;CACP,CACF;AAoBD,eAAsBQ,EAAuB,EAC3CH,YACAE,WACAD,cAG+B;CAC/B,IAAMI,IAAkBjB,EAAyBa;CAEjD,IAAI,CAACI,GAAiB,OAAOpB,EAAoBC;CAEjD,IAAI;EASF,QAAQoB,MARU/B,EAAa2B,GAAQ;GACrCK,KAAKhB;GACLiB,cAAc;GACdR,SAASK;GACTI,MAAM,CAACT,EAAQ;GACfC;GACD,CAAC,EAEF;GACE,KAAK,IACH,OAAOhB,EAAoBE;GAG7B,SACE,OAAOF,EAAoBC;;SAEzB;EACN,OAAOD,EAAoBC;;;AAe/B,SAAO2B,IAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EACLC,IAAe1C,GAAgB,EAC/B2C,IAAoBnC,GAAW,EAACoC;CAa7B,OAb6BJ,EAAA,OAAAE,KAAAF,EAAA,OAAAG,KAG9BC,IAAA,OAAAC,MAAA;EAAO,IAAA,EAAAnB,YAAAC,eAAAkB;EAOF,OAEIC,MARYJ,EAAMK,gBAAiB;GAAAC,UAC9B;IAAC;IAAyBtB;IAASC;IAAQ;GAAAsB,eAEnDpB,EAAuB;IAAAH;IAAAC;IAAAC,QAA4Be;IAAa,CAAC;GAAAO,WACxDC;GAAQC,QACXD;GACT,CAAC;IAGHX,EAAA,KAAAE,GAAAF,EAAA,KAAAG,GAAAH,EAAA,KAAAI,KAAAA,IAAAJ,EAAA,IAXII;;AAqBT,SAAgBY,EAAuB,EACrCF,YACAC,aACuB;CACvB,OAAOnD,EAAmB;EACxB6B,KAAK9B;EACL+B,cAAc;EACdC,MAAM,CAACmB,GAASC,EAAM;EACvB,CAAC;;AAOJ,SAAgBI,EAAqB,EACnCL,YACAC,WACAG,YACkC;CAClC,OAAO;EACLE,IAAIF;EACJZ,MAAMU,EAAuB;GAAEF;GAASC;GAAQ,CAAC;EACjDM,OAAO;EACR"}
@@ -1 +1 @@
1
- {"version":3,"file":"atomWithCompare.js","names":["atomWithReducer","atomWithCompare","initialValue","Value","areEqual","prev","next"],"sources":["../../../src/lib/utils/atomWithCompare.ts"],"sourcesContent":["import { atomWithReducer } from \"jotai/utils\";\n\nexport function atomWithCompare<Value>(\n initialValue: Value,\n areEqual: (prev: Value, next: Value) => boolean\n) {\n return atomWithReducer(initialValue, (prev: Value, next: Value) => {\n if (areEqual(prev, next)) {\n return prev;\n }\n\n return next;\n });\n}\n"],"mappings":";;AAEA,SAAgBC,EACdC,GACAE,GACA;AACA,QAAOJ,EAAgBE,IAAeG,GAAaC,MAC7CF,EAASC,GAAMC,EAAK,GACfD,IAGFC,EACP"}
1
+ {"version":3,"file":"atomWithCompare.js","names":["atomWithReducer","atomWithCompare","initialValue","Value","areEqual","prev","next"],"sources":["../../../src/lib/utils/atomWithCompare.ts"],"sourcesContent":["import { atomWithReducer } from \"jotai/utils\";\n\nexport function atomWithCompare<Value>(\n initialValue: Value,\n areEqual: (prev: Value, next: Value) => boolean\n) {\n return atomWithReducer(initialValue, (prev: Value, next: Value) => {\n if (areEqual(prev, next)) {\n return prev;\n }\n\n return next;\n });\n}\n"],"mappings":";;AAEA,SAAgBC,EACdC,GACAE,GACA;CACA,OAAOJ,EAAgBE,IAAeG,GAAaC,MAC7CF,EAASC,GAAMC,EAAK,GACfD,IAGFC,EACP"}
@@ -1 +1 @@
1
- {"version":3,"file":"copyToClipboard.js","names":["copy","copyToClipboard","text","Promise","navigator","clipboard","writeText","debug","import","meta","env","DEV"],"sources":["../../../src/lib/utils/copyToClipboard.ts"],"sourcesContent":["import copy from \"copy-to-clipboard\";\n\nexport async function copyToClipboard(text: string): Promise<void> {\n try {\n // breaks inside iframe without 'clipboard-write' permission\n return await navigator.clipboard.writeText(text);\n } catch {\n // uses a deprecated document.execCommand('copy')\n copy(text, { debug: import.meta.env.DEV });\n }\n}\n"],"mappings":";;AAEA,eAAsBC,EAAgBC,GAA6B;AACjE,KAAI;AAEF,SAAO,MAAME,UAAUC,UAAUC,UAAUJ,EAAK;SAC1C;AAENF,IAAKE,GAAM,EAAEK,OAAAA,IAA4B,CAAC"}
1
+ {"version":3,"file":"copyToClipboard.js","names":["copy","copyToClipboard","text","Promise","navigator","clipboard","writeText","debug","import","meta","env","DEV"],"sources":["../../../src/lib/utils/copyToClipboard.ts"],"sourcesContent":["import copy from \"copy-to-clipboard\";\n\nexport async function copyToClipboard(text: string): Promise<void> {\n try {\n // breaks inside iframe without 'clipboard-write' permission\n return await navigator.clipboard.writeText(text);\n } catch {\n // uses a deprecated document.execCommand('copy')\n copy(text, { debug: import.meta.env.DEV });\n }\n}\n"],"mappings":";;AAEA,eAAsBC,EAAgBC,GAA6B;CACjE,IAAI;EAEF,OAAO,MAAME,UAAUC,UAAUC,UAAUJ,EAAK;SAC1C;EAENF,EAAKE,GAAM,EAAEK,OAAAA,IAA4B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"delta.js","names":["Token","axios","isAddress","isTruthy","getErrorData","error","Error","Record","isAxiosError","errorData","response","data","KnownErrorTypes","DeltaPriceError","errorType","description","parseDeltaApiError","isUnsupportedTokenError","replaceUnsupportedTokenMessage","unsupportedTokenMessage","tokens","Pick","maybeAddress","split","token","symbol","toLowerCase","address","customUnsupportedTokenMessage","getInsufficientBalanceToFillOrderMessage","requiredBalanceToFill","getDeltaWarningMessage","tokenFrom","tokenTo","priceError","tokenSupported","hasTokens","isCrosschain","deltaPriceError","deltaErrorToShow","filter","crosschainDeltaWarning","undefined","warningMessage","DELTA_DEFAULT_EXPIRY_MS","produceDeltaOrderDeadline","expiryMs","toDeadline","expiration","deadline","Math","floor","Date","now","BigInt"],"sources":["../../../src/lib/utils/delta.ts"],"sourcesContent":["import type { Token } from \"@/tokens/state/types\";\nimport axios from \"axios\";\nimport { isAddress } from \"viem\";\nimport { isTruthy } from \".\";\n\nfunction getErrorData(error: Error): Record<string, unknown> | null {\n if (!axios.isAxiosError(error)) return null;\n\n const errorData = error.response?.data;\n if (!errorData || typeof errorData !== \"object\") return null;\n\n return errorData;\n}\n\n// API Errors Across Error\ntype KnownErrorTypes = \"UnsupportedToken\" | \"BridgeQuoteFailed\";\ntype DeltaPriceError =\n | { errorType: string | KnownErrorTypes; description: string }\n | { errorType?: undefined; description?: undefined };\n\n/**\n * Parses a Delta API error and extracts known error types and descriptions.\n */\nexport function parseDeltaApiError(error: Error | null): DeltaPriceError {\n if (!axios.isAxiosError(error)) return {};\n\n const errorData = getErrorData(error);\n\n if (!errorData) return {};\n\n if (\"errorType\" in errorData) {\n const errorType = errorData[\"errorType\"];\n const description =\n errorData[\"description\"] || errorData[\"message\"] || errorData[\"details\"]; // Across error has .details\n\n if (typeof errorType === \"string\" && typeof description === \"string\")\n return { errorType, description };\n }\n\n return {};\n}\n\nexport function isUnsupportedTokenError(error: DeltaPriceError): error is {\n errorType: \"UnsupportedToken\";\n description: string;\n} {\n return error.errorType === \"UnsupportedToken\";\n}\n\nexport function replaceUnsupportedTokenMessage(\n unsupportedTokenMessage: string, // \"Token ADDRESS is not supported\"\n tokens: Pick<Token, \"symbol\" | \"address\">[] // src and dest token, we don't know which one is unsupported\n): string {\n const maybeAddress = unsupportedTokenMessage.split(\" \")[1];\n if (!maybeAddress || !isAddress(maybeAddress)) return unsupportedTokenMessage; // unexpected format\n\n for (const token of tokens) {\n if (\n token.symbol &&\n maybeAddress.toLowerCase() === token.address.toLowerCase()\n ) {\n return customUnsupportedTokenMessage({\n symbol: token.symbol,\n });\n }\n }\n return unsupportedTokenMessage; // fallback to original message\n}\n\nexport function customUnsupportedTokenMessage({\n symbol,\n}: Pick<Token, \"symbol\">): string {\n return `Token ${symbol} is not supported for this swap`;\n}\n\nexport function getInsufficientBalanceToFillOrderMessage(\n { address, symbol }: Pick<Token, \"symbol\" | \"address\">,\n requiredBalanceToFill: string\n) {\n // @TODO this message needs to be changed\n return `Insufficient ${symbol || address} balance to cover existing orders balance of ${requiredBalanceToFill}`;\n}\n\nexport function getDeltaWarningMessage({\n tokenFrom,\n tokenTo,\n priceError,\n tokenSupported,\n hasTokens,\n isCrosschain,\n}: {\n tokenFrom: Token;\n tokenTo?: Token;\n priceError?: Error | null;\n tokenSupported?: boolean;\n hasTokens?: boolean;\n isCrosschain: boolean;\n}) {\n const deltaPriceError = priceError && parseDeltaApiError(priceError);\n\n const deltaErrorToShow = deltaPriceError\n ? isUnsupportedTokenError(deltaPriceError)\n ? replaceUnsupportedTokenMessage(\n deltaPriceError.description,\n [tokenFrom, tokenTo].filter(isTruthy)\n )\n : deltaPriceError?.description\n : null;\n\n const crosschainDeltaWarning = isCrosschain\n ? tokenSupported === false\n ? customUnsupportedTokenMessage(tokenFrom)\n : hasTokens === false\n ? \"Chain selection isn't supported for Crosschain Swap\"\n : undefined\n : undefined;\n\n const warningMessage = deltaErrorToShow || crosschainDeltaWarning;\n\n return warningMessage;\n}\n\n// default deadline = 10 min for Delta Order\nconst DELTA_DEFAULT_EXPIRY_MS = 10 * 60 * 1000; // 10 minutes in milliseconds\n\n// deadline for Permit2 TransferFrom signature expiration,\n// and for Delta Order deadline;\n// they must match exactly\nexport function produceDeltaOrderDeadline(\n expiryMs = DELTA_DEFAULT_EXPIRY_MS\n): bigint {\n return toDeadline(expiryMs);\n}\n\n// given expiration in milliseconds, return the deadline(now+expiration) in seconds\nexport function toDeadline(expiration: number): bigint {\n const deadline = Math.floor((Date.now() + expiration) / 1000);\n\n return BigInt(deadline);\n}\n"],"mappings":";;;;AAKA,SAASI,EAAaC,GAA8C;AAClE,KAAI,CAACJ,EAAMO,aAAaH,EAAM,CAAE,QAAO;CAEvC,IAAMI,IAAYJ,EAAMK,UAAUC;AAGlC,QAFI,CAACF,KAAa,OAAOA,KAAc,WAAiB,OAEjDA;;AAYT,SAAgBO,EAAmBX,GAAsC;AACvE,KAAI,CAACJ,EAAMO,aAAaH,EAAM,CAAE,QAAO,EAAE;CAEzC,IAAMI,IAAYL,EAAaC,EAAM;AAErC,KAAI,CAACI,EAAW,QAAO,EAAE;AAEzB,KAAI,eAAeA,GAAW;EAC5B,IAAMK,IAAYL,EAAU,WACtBM,IACJN,EAAU,eAAkBA,EAAU,WAAcA,EAAU;AAEhE,MAAI,OAAOK,KAAc,YAAY,OAAOC,KAAgB,SAC1D,QAAO;GAAED;GAAWC;GAAa;;AAGrC,QAAO,EAAE;;AAGX,SAAgBE,EAAwBZ,GAGtC;AACA,QAAOA,EAAMS,cAAc;;AAG7B,SAAgBI,EACdC,GACAC,GACQ;CACR,IAAME,IAAeH,EAAwBI,MAAM,IAAI,CAAC;AACxD,KAAI,CAACD,KAAgB,CAACpB,EAAUoB,EAAa,CAAE,QAAOH;AAEtD,MAAK,IAAMK,KAASJ,EAClB,KACEI,EAAMC,UACNH,EAAaI,aAAa,KAAKF,EAAMG,QAAQD,aAAa,CAE1D,QAAOE,EAA8B,EACnCH,QAAQD,EAAMC,QACf,CAAC;AAGN,QAAON;;AAGT,SAAgBS,EAA8B,EAC5CH,aACgC;AAChC,QAAO,SAASA,EAAM;;AAGxB,SAAgBI,EACd,EAAEF,YAASF,aACXK,GACA;AAEA,QAAO,gBAAgBL,KAAUE,EAAO,+CAAgDG;;AAG1F,SAAgBC,EAAuB,EACrCC,cACAC,YACAC,eACAC,mBACAC,cACAC,mBAQC;CACD,IAAMC,IAAkBJ,KAAclB,EAAmBkB,EAAW,EAE9DK,IAAmBD,IACrBrB,EAAwBqB,EAAgB,GACtCpB,EACEoB,EAAgBvB,aAChB,CAACiB,GAAWC,EAAQ,CAACO,OAAOrC,EAC9B,CAAC,GACDmC,GAAiBvB,cACnB,MAEE0B,IAAyBJ,IAC3BF,MAAmB,KACjBP,EAA8BI,EAAU,GACxCI,MAAc,KACZ,wDACAM,KAAAA,IACJA,KAAAA;AAIJ,QAFuBH,KAAoBE;;AAM7C,IAAMG,IAA0B,MAAU;AAK1C,SAAgBC,EACdC,IAAWF,GACH;AACR,QAAOG,EAAWD,EAAS;;AAI7B,SAAgBC,EAAWC,GAA4B;CACrD,IAAMC,IAAWC,KAAKC,OAAOC,KAAKC,KAAK,GAAGL,KAAc,IAAK;AAE7D,QAAOM,OAAOL,EAAS"}
1
+ {"version":3,"file":"delta.js","names":["Token","axios","isAddress","isTruthy","getErrorData","error","Error","Record","isAxiosError","errorData","response","data","KnownErrorTypes","DeltaPriceError","errorType","description","parseDeltaApiError","isUnsupportedTokenError","replaceUnsupportedTokenMessage","unsupportedTokenMessage","tokens","Pick","maybeAddress","split","token","symbol","toLowerCase","address","customUnsupportedTokenMessage","getInsufficientBalanceToFillOrderMessage","requiredBalanceToFill","getDeltaWarningMessage","tokenFrom","tokenTo","priceError","tokenSupported","hasTokens","isCrosschain","deltaPriceError","deltaErrorToShow","filter","crosschainDeltaWarning","undefined","warningMessage","DELTA_DEFAULT_EXPIRY_MS","produceDeltaOrderDeadline","expiryMs","toDeadline","expiration","deadline","Math","floor","Date","now","BigInt"],"sources":["../../../src/lib/utils/delta.ts"],"sourcesContent":["import type { Token } from \"@/tokens/state/types\";\nimport axios from \"axios\";\nimport { isAddress } from \"viem\";\nimport { isTruthy } from \".\";\n\nfunction getErrorData(error: Error): Record<string, unknown> | null {\n if (!axios.isAxiosError(error)) return null;\n\n const errorData = error.response?.data;\n if (!errorData || typeof errorData !== \"object\") return null;\n\n return errorData;\n}\n\n// API Errors Across Error\ntype KnownErrorTypes = \"UnsupportedToken\" | \"BridgeQuoteFailed\";\ntype DeltaPriceError =\n | { errorType: string | KnownErrorTypes; description: string }\n | { errorType?: undefined; description?: undefined };\n\n/**\n * Parses a Delta API error and extracts known error types and descriptions.\n */\nexport function parseDeltaApiError(error: Error | null): DeltaPriceError {\n if (!axios.isAxiosError(error)) return {};\n\n const errorData = getErrorData(error);\n\n if (!errorData) return {};\n\n if (\"errorType\" in errorData) {\n const errorType = errorData[\"errorType\"];\n const description =\n errorData[\"description\"] || errorData[\"message\"] || errorData[\"details\"]; // Across error has .details\n\n if (typeof errorType === \"string\" && typeof description === \"string\")\n return { errorType, description };\n }\n\n return {};\n}\n\nexport function isUnsupportedTokenError(error: DeltaPriceError): error is {\n errorType: \"UnsupportedToken\";\n description: string;\n} {\n return error.errorType === \"UnsupportedToken\";\n}\n\nexport function replaceUnsupportedTokenMessage(\n unsupportedTokenMessage: string, // \"Token ADDRESS is not supported\"\n tokens: Pick<Token, \"symbol\" | \"address\">[] // src and dest token, we don't know which one is unsupported\n): string {\n const maybeAddress = unsupportedTokenMessage.split(\" \")[1];\n if (!maybeAddress || !isAddress(maybeAddress)) return unsupportedTokenMessage; // unexpected format\n\n for (const token of tokens) {\n if (\n token.symbol &&\n maybeAddress.toLowerCase() === token.address.toLowerCase()\n ) {\n return customUnsupportedTokenMessage({\n symbol: token.symbol,\n });\n }\n }\n return unsupportedTokenMessage; // fallback to original message\n}\n\nexport function customUnsupportedTokenMessage({\n symbol,\n}: Pick<Token, \"symbol\">): string {\n return `Token ${symbol} is not supported for this swap`;\n}\n\nexport function getInsufficientBalanceToFillOrderMessage(\n { address, symbol }: Pick<Token, \"symbol\" | \"address\">,\n requiredBalanceToFill: string\n) {\n // @TODO this message needs to be changed\n return `Insufficient ${symbol || address} balance to cover existing orders balance of ${requiredBalanceToFill}`;\n}\n\nexport function getDeltaWarningMessage({\n tokenFrom,\n tokenTo,\n priceError,\n tokenSupported,\n hasTokens,\n isCrosschain,\n}: {\n tokenFrom: Token;\n tokenTo?: Token;\n priceError?: Error | null;\n tokenSupported?: boolean;\n hasTokens?: boolean;\n isCrosschain: boolean;\n}) {\n const deltaPriceError = priceError && parseDeltaApiError(priceError);\n\n const deltaErrorToShow = deltaPriceError\n ? isUnsupportedTokenError(deltaPriceError)\n ? replaceUnsupportedTokenMessage(\n deltaPriceError.description,\n [tokenFrom, tokenTo].filter(isTruthy)\n )\n : deltaPriceError?.description\n : null;\n\n const crosschainDeltaWarning = isCrosschain\n ? tokenSupported === false\n ? customUnsupportedTokenMessage(tokenFrom)\n : hasTokens === false\n ? \"Chain selection isn't supported for Crosschain Swap\"\n : undefined\n : undefined;\n\n const warningMessage = deltaErrorToShow || crosschainDeltaWarning;\n\n return warningMessage;\n}\n\n// default deadline = 10 min for Delta Order\nconst DELTA_DEFAULT_EXPIRY_MS = 10 * 60 * 1000; // 10 minutes in milliseconds\n\n// deadline for Permit2 TransferFrom signature expiration,\n// and for Delta Order deadline;\n// they must match exactly\nexport function produceDeltaOrderDeadline(\n expiryMs = DELTA_DEFAULT_EXPIRY_MS\n): bigint {\n return toDeadline(expiryMs);\n}\n\n// given expiration in milliseconds, return the deadline(now+expiration) in seconds\nexport function toDeadline(expiration: number): bigint {\n const deadline = Math.floor((Date.now() + expiration) / 1000);\n\n return BigInt(deadline);\n}\n"],"mappings":";;;;AAKA,SAASI,EAAaC,GAA8C;CAClE,IAAI,CAACJ,EAAMO,aAAaH,EAAM,EAAE,OAAO;CAEvC,IAAMI,IAAYJ,EAAMK,UAAUC;CAGlC,OAFI,CAACF,KAAa,OAAOA,KAAc,WAAiB,OAEjDA;;AAYT,SAAgBO,EAAmBX,GAAsC;CACvE,IAAI,CAACJ,EAAMO,aAAaH,EAAM,EAAE,OAAO,EAAE;CAEzC,IAAMI,IAAYL,EAAaC,EAAM;CAErC,IAAI,CAACI,GAAW,OAAO,EAAE;CAEzB,IAAI,eAAeA,GAAW;EAC5B,IAAMK,IAAYL,EAAU,WACtBM,IACJN,EAAU,eAAkBA,EAAU,WAAcA,EAAU;EAEhE,IAAI,OAAOK,KAAc,YAAY,OAAOC,KAAgB,UAC1D,OAAO;GAAED;GAAWC;GAAa;;CAGrC,OAAO,EAAE;;AAGX,SAAgBE,EAAwBZ,GAGtC;CACA,OAAOA,EAAMS,cAAc;;AAG7B,SAAgBI,EACdC,GACAC,GACQ;CACR,IAAME,IAAeH,EAAwBI,MAAM,IAAI,CAAC;CACxD,IAAI,CAACD,KAAgB,CAACpB,EAAUoB,EAAa,EAAE,OAAOH;CAEtD,KAAK,IAAMK,KAASJ,GAClB,IACEI,EAAMC,UACNH,EAAaI,aAAa,KAAKF,EAAMG,QAAQD,aAAa,EAE1D,OAAOE,EAA8B,EACnCH,QAAQD,EAAMC,QACf,CAAC;CAGN,OAAON;;AAGT,SAAgBS,EAA8B,EAC5CH,aACgC;CAChC,OAAO,SAASA,EAAM;;AAGxB,SAAgBI,EACd,EAAEF,YAASF,aACXK,GACA;CAEA,OAAO,gBAAgBL,KAAUE,EAAO,+CAAgDG;;AAG1F,SAAgBC,EAAuB,EACrCC,cACAC,YACAC,eACAC,mBACAC,cACAC,mBAQC;CACD,IAAMC,IAAkBJ,KAAclB,EAAmBkB,EAAW,EAE9DK,IAAmBD,IACrBrB,EAAwBqB,EAAgB,GACtCpB,EACEoB,EAAgBvB,aAChB,CAACiB,GAAWC,EAAQ,CAACO,OAAOrC,EAC9B,CAAC,GACDmC,GAAiBvB,cACnB,MAEE0B,IAAyBJ,IAC3BF,MAAmB,KACjBP,EAA8BI,EAAU,GACxCI,MAAc,KACZ,wDACAM,KAAAA,IACJA,KAAAA;CAIJ,OAFuBH,KAAoBE;;AAM7C,IAAMG,IAA0B,MAAU;AAK1C,SAAgBC,EACdC,IAAWF,GACH;CACR,OAAOG,EAAWD,EAAS;;AAI7B,SAAgBC,EAAWC,GAA4B;CACrD,IAAMC,IAAWC,KAAKC,OAAOC,KAAKC,KAAK,GAAGL,KAAc,IAAK;CAE7D,OAAOM,OAAOL,EAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"dexes.js","names":["OptimalRate","DEXES_TO_EXCLUDE_ON_SAFE_LOWERCASE_SET","OptimalRoute","OptimalSwap","isSimplePath","bestRoute","percent","swaps","length","isMultiSwap","isMegaSwap","filterOutDexesForSafe","dexes","filter","dex","has","toLowerCase"],"sources":["../../../src/lib/utils/dexes.ts"],"sourcesContent":["import type { OptimalRate } from \"@velora-dex/sdk\";\nimport { DEXES_TO_EXCLUDE_ON_SAFE_LOWERCASE_SET } from \"../constants/dexes\";\n\ntype OptimalRoute = OptimalRate[\"bestRoute\"][0];\ntype OptimalSwap = OptimalRoute[\"swaps\"][0];\n\n// e.g.\n// USDC -- 66% ParaswapPool1 -- USDT\n// USDC -- 34% ParaswapPool2 -- USDT\n// bestRoute.length === 1 && swaps.length === 1\nexport const isSimplePath = (\n bestRoute: OptimalRoute[]\n): bestRoute is [{ percent: number; swaps: [OptimalSwap] }] => {\n return bestRoute.length === 1 && bestRoute[0]?.swaps.length === 1;\n};\n\n// e.g. MATIC -- USDC -- maUSDC\n// bestRoute.length === 1 && swaps.length > 1\nexport const isMultiSwap = (\n bestRoute: OptimalRoute[]\n): bestRoute is [\n { percent: number; swaps: [OptimalSwap, OptimalSwap, ...OptimalSwap[]] },\n] => {\n return !!(\n bestRoute.length === 1 &&\n bestRoute[0] &&\n bestRoute[0].swaps.length > 1\n );\n};\n\n/**\n e.g.\n MATIC --------- USDC\n MATIC -- ETH -- USDC\n */\n// bestRoute.length > 1\nexport const isMegaSwap = (\n bestRoute: OptimalRoute[]\n): bestRoute is [OptimalRoute, OptimalRoute, ...OptimalRoute[]] => {\n return bestRoute.length > 1;\n};\n\nexport function filterOutDexesForSafe(dexes: string[]) {\n return dexes.filter(\n (dex) => !DEXES_TO_EXCLUDE_ON_SAFE_LOWERCASE_SET.has(dex.toLowerCase())\n );\n}\n"],"mappings":";;AAUA,IAAaI,KACXC,MAEOA,EAAUG,WAAW,KAAKH,EAAU,IAAIE,MAAMC,WAAW,GAKrDC,KACXJ,MAIO,CAAC,EACNA,EAAUG,WAAW,KACrBH,EAAU,MACVA,EAAU,GAAGE,MAAMC,SAAS,IAUnBE,KACXL,MAEOA,EAAUG,SAAS;AAG5B,SAAgBG,EAAsBC,GAAiB;AACrD,QAAOA,EAAMC,QACVC,MAAQ,CAACb,EAAuCc,IAAID,EAAIE,aAAa,CACxE,CAAC"}
1
+ {"version":3,"file":"dexes.js","names":["OptimalRate","DEXES_TO_EXCLUDE_ON_SAFE_LOWERCASE_SET","OptimalRoute","OptimalSwap","isSimplePath","bestRoute","percent","swaps","length","isMultiSwap","isMegaSwap","filterOutDexesForSafe","dexes","filter","dex","has","toLowerCase"],"sources":["../../../src/lib/utils/dexes.ts"],"sourcesContent":["import type { OptimalRate } from \"@velora-dex/sdk\";\nimport { DEXES_TO_EXCLUDE_ON_SAFE_LOWERCASE_SET } from \"../constants/dexes\";\n\ntype OptimalRoute = OptimalRate[\"bestRoute\"][0];\ntype OptimalSwap = OptimalRoute[\"swaps\"][0];\n\n// e.g.\n// USDC -- 66% ParaswapPool1 -- USDT\n// USDC -- 34% ParaswapPool2 -- USDT\n// bestRoute.length === 1 && swaps.length === 1\nexport const isSimplePath = (\n bestRoute: OptimalRoute[]\n): bestRoute is [{ percent: number; swaps: [OptimalSwap] }] => {\n return bestRoute.length === 1 && bestRoute[0]?.swaps.length === 1;\n};\n\n// e.g. MATIC -- USDC -- maUSDC\n// bestRoute.length === 1 && swaps.length > 1\nexport const isMultiSwap = (\n bestRoute: OptimalRoute[]\n): bestRoute is [\n { percent: number; swaps: [OptimalSwap, OptimalSwap, ...OptimalSwap[]] },\n] => {\n return !!(\n bestRoute.length === 1 &&\n bestRoute[0] &&\n bestRoute[0].swaps.length > 1\n );\n};\n\n/**\n e.g.\n MATIC --------- USDC\n MATIC -- ETH -- USDC\n */\n// bestRoute.length > 1\nexport const isMegaSwap = (\n bestRoute: OptimalRoute[]\n): bestRoute is [OptimalRoute, OptimalRoute, ...OptimalRoute[]] => {\n return bestRoute.length > 1;\n};\n\nexport function filterOutDexesForSafe(dexes: string[]) {\n return dexes.filter(\n (dex) => !DEXES_TO_EXCLUDE_ON_SAFE_LOWERCASE_SET.has(dex.toLowerCase())\n );\n}\n"],"mappings":";;AAUA,IAAaI,KACXC,MAEOA,EAAUG,WAAW,KAAKH,EAAU,IAAIE,MAAMC,WAAW,GAKrDC,KACXJ,MAIO,CAAC,EACNA,EAAUG,WAAW,KACrBH,EAAU,MACVA,EAAU,GAAGE,MAAMC,SAAS,IAUnBE,KACXL,MAEOA,EAAUG,SAAS;AAG5B,SAAgBG,EAAsBC,GAAiB;CACrD,OAAOA,EAAMC,QACVC,MAAQ,CAACb,EAAuCc,IAAID,EAAIE,aAAa,CACxE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"explorer.js","names":["SupportedChainId","chainConfigMap","Address","getExplorerURL","constructAddressLink","explorer","address","constructTokenLink","constructTxLink","constructExplorerOrderDetailsLink","orderId","constructExplorerUserDetailsLink","userAddress","ConstructAddressLinkForChainInput","chainId","constructAddressLinkForChain","blockExplorers","default","url","constructTokenLinkForChain","ConstructTxLinkForChainInput","txHash","constructTxLinkForChain"],"sources":["../../../src/lib/utils/explorer.ts"],"sourcesContent":["import type { SupportedChainId } from \"../web3/wagmi/types\";\nimport { chainConfigMap } from \"../web3/wagmi/constants\";\nimport type { Address } from \"viem\";\nimport { getExplorerURL } from \"../constants/urls\";\n\nexport const constructAddressLink = (\n explorer: string,\n address: string\n): string => {\n return `${explorer}/address/${address}`;\n};\n\nexport const constructTokenLink = (\n explorer: string,\n address: string\n): string => {\n return `${explorer}/token/${address}`;\n};\n\nexport const constructTxLink = (explorer: string, address: string): string => {\n return `${explorer}/tx/${address}`;\n};\n\nexport function constructExplorerOrderDetailsLink(orderId: string): string {\n return `${getExplorerURL()}/order/${orderId}`;\n}\n\nexport function constructExplorerUserDetailsLink(userAddress: Address): string {\n return `${getExplorerURL()}/address/${userAddress}`;\n}\n\ntype ConstructAddressLinkForChainInput = {\n chainId: SupportedChainId;\n address: string;\n};\n\nexport const constructAddressLinkForChain = ({\n chainId,\n address,\n}: ConstructAddressLinkForChainInput): string | undefined => {\n const explorer = chainConfigMap[chainId].blockExplorers?.default.url;\n if (!explorer) return;\n\n return constructAddressLink(explorer, address);\n};\n\nexport const constructTokenLinkForChain = ({\n chainId,\n address,\n}: ConstructAddressLinkForChainInput): string | undefined => {\n const explorer = chainConfigMap[chainId].blockExplorers?.default.url;\n if (!explorer) return;\n\n return constructTokenLink(explorer, address);\n};\n\ntype ConstructTxLinkForChainInput = {\n chainId: SupportedChainId;\n txHash: string;\n};\n\nexport const constructTxLinkForChain = ({\n chainId,\n txHash,\n}: ConstructTxLinkForChainInput): string | undefined => {\n const explorer = chainConfigMap[chainId].blockExplorers?.default.url;\n if (!explorer) return;\n\n return constructTxLink(explorer, txHash);\n};\n"],"mappings":";;;AAKA,IAAaI,KACXC,GACAC,MAEO,GAAGD,EAAQ,WAAYC,KAGnBC,KACXF,GACAC,MAEO,GAAGD,EAAQ,SAAUC,KAGjBE,KAAmBH,GAAkBC,MACzC,GAAGD,EAAQ,MAAOC;AAG3B,SAAgBG,EAAkCC,GAAyB;AACzE,QAAO,GAAGP,GAAgB,CAAA,SAAUO;;AAGtC,SAAgBC,EAAiCC,GAA8B;AAC7E,QAAO,GAAGT,GAAgB,CAAA,WAAYS;;AAQxC,IAAaG,KAAgC,EAC3CD,YACAR,iBAC2D;CAC3D,IAAMD,IAAWJ,EAAea,GAASE,gBAAgBC,QAAQC;AAC5Db,OAEL,QAAOD,EAAqBC,GAAUC,EAAQ;GAGnCa,KAA8B,EACzCL,YACAR,iBAC2D;CAC3D,IAAMD,IAAWJ,EAAea,GAASE,gBAAgBC,QAAQC;AAC5Db,OAEL,QAAOE,EAAmBF,GAAUC,EAAQ;GAQjCgB,KAA2B,EACtCR,YACAO,gBACsD;CACtD,IAAMhB,IAAWJ,EAAea,GAASE,gBAAgBC,QAAQC;AAC5Db,OAEL,QAAOG,EAAgBH,GAAUgB,EAAO"}
1
+ {"version":3,"file":"explorer.js","names":["SupportedChainId","chainConfigMap","Address","getExplorerURL","constructAddressLink","explorer","address","constructTokenLink","constructTxLink","constructExplorerOrderDetailsLink","orderId","constructExplorerUserDetailsLink","userAddress","ConstructAddressLinkForChainInput","chainId","constructAddressLinkForChain","blockExplorers","default","url","constructTokenLinkForChain","ConstructTxLinkForChainInput","txHash","constructTxLinkForChain"],"sources":["../../../src/lib/utils/explorer.ts"],"sourcesContent":["import type { SupportedChainId } from \"../web3/wagmi/types\";\nimport { chainConfigMap } from \"../web3/wagmi/constants\";\nimport type { Address } from \"viem\";\nimport { getExplorerURL } from \"../constants/urls\";\n\nexport const constructAddressLink = (\n explorer: string,\n address: string\n): string => {\n return `${explorer}/address/${address}`;\n};\n\nexport const constructTokenLink = (\n explorer: string,\n address: string\n): string => {\n return `${explorer}/token/${address}`;\n};\n\nexport const constructTxLink = (explorer: string, address: string): string => {\n return `${explorer}/tx/${address}`;\n};\n\nexport function constructExplorerOrderDetailsLink(orderId: string): string {\n return `${getExplorerURL()}/order/${orderId}`;\n}\n\nexport function constructExplorerUserDetailsLink(userAddress: Address): string {\n return `${getExplorerURL()}/address/${userAddress}`;\n}\n\ntype ConstructAddressLinkForChainInput = {\n chainId: SupportedChainId;\n address: string;\n};\n\nexport const constructAddressLinkForChain = ({\n chainId,\n address,\n}: ConstructAddressLinkForChainInput): string | undefined => {\n const explorer = chainConfigMap[chainId].blockExplorers?.default.url;\n if (!explorer) return;\n\n return constructAddressLink(explorer, address);\n};\n\nexport const constructTokenLinkForChain = ({\n chainId,\n address,\n}: ConstructAddressLinkForChainInput): string | undefined => {\n const explorer = chainConfigMap[chainId].blockExplorers?.default.url;\n if (!explorer) return;\n\n return constructTokenLink(explorer, address);\n};\n\ntype ConstructTxLinkForChainInput = {\n chainId: SupportedChainId;\n txHash: string;\n};\n\nexport const constructTxLinkForChain = ({\n chainId,\n txHash,\n}: ConstructTxLinkForChainInput): string | undefined => {\n const explorer = chainConfigMap[chainId].blockExplorers?.default.url;\n if (!explorer) return;\n\n return constructTxLink(explorer, txHash);\n};\n"],"mappings":";;;AAKA,IAAaI,KACXC,GACAC,MAEO,GAAGD,EAAQ,WAAYC,KAGnBC,KACXF,GACAC,MAEO,GAAGD,EAAQ,SAAUC,KAGjBE,KAAmBH,GAAkBC,MACzC,GAAGD,EAAQ,MAAOC;AAG3B,SAAgBG,EAAkCC,GAAyB;CACzE,OAAO,GAAGP,GAAgB,CAAA,SAAUO;;AAGtC,SAAgBC,EAAiCC,GAA8B;CAC7E,OAAO,GAAGT,GAAgB,CAAA,WAAYS;;AAQxC,IAAaG,KAAgC,EAC3CD,YACAR,iBAC2D;CAC3D,IAAMD,IAAWJ,EAAea,GAASE,gBAAgBC,QAAQC;CAC5Db,OAEL,OAAOD,EAAqBC,GAAUC,EAAQ;GAGnCa,KAA8B,EACzCL,YACAR,iBAC2D;CAC3D,IAAMD,IAAWJ,EAAea,GAASE,gBAAgBC,QAAQC;CAC5Db,OAEL,OAAOE,EAAmBF,GAAUC,EAAQ;GAQjCgB,KAA2B,EACtCR,YACAO,gBACsD;CACtD,IAAMhB,IAAWJ,EAAea,GAASE,gBAAgBC,QAAQC;CAC5Db,OAEL,OAAOG,EAAgBH,GAAUgB,EAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"fee.js","names":["Big","calculateFeeUSD","partnerFeePercent","destUSD","times","div","subtractFee","amount","fee","toFixed","feePercent","multiplier","minus","mul"],"sources":["../../../src/lib/utils/fee.ts"],"sourcesContent":["import Big from \"big.js\";\n\nexport function calculateFeeUSD(partnerFeePercent: number, destUSD: string) {\n if (partnerFeePercent === 0 || destUSD === \"0\") return Big(0);\n\n return Big(destUSD).times(partnerFeePercent).div(100);\n}\n\nexport function subtractFee(\n amount: string | Big,\n fee: number // e.g. 1 for 1%\n): string {\n if (fee === 0) return typeof amount === \"string\" ? amount : amount.toFixed(); // avoid e-notation\n\n const feePercent = Big(fee).div(100);\n const multiplier = Big(1).minus(feePercent);\n return Big(amount).mul(multiplier).toFixed(0);\n}\n"],"mappings":";;AAEA,SAAgBC,EAAgBC,GAA2BC,GAAiB;AAG1E,QAFID,MAAsB,KAAKC,MAAY,MAAYH,EAAI,EAAE,GAEtDA,EAAIG,EAAQ,CAACC,MAAMF,EAAkB,CAACG,IAAI,IAAI;;AAGvD,SAAgBC,EACdC,GACAC,GACQ;AACR,KAAIA,MAAQ,EAAG,QAAO,OAAOD,KAAW,WAAWA,IAASA,EAAOE,SAAS;CAE5E,IAAMC,IAAaV,EAAIQ,EAAI,CAACH,IAAI,IAAI,EAC9BM,IAAaX,EAAI,EAAE,CAACY,MAAMF,EAAW;AAC3C,QAAOV,EAAIO,EAAO,CAACM,IAAIF,EAAW,CAACF,QAAQ,EAAE"}
1
+ {"version":3,"file":"fee.js","names":["Big","calculateFeeUSD","partnerFeePercent","destUSD","times","div","subtractFee","amount","fee","toFixed","feePercent","multiplier","minus","mul"],"sources":["../../../src/lib/utils/fee.ts"],"sourcesContent":["import Big from \"big.js\";\n\nexport function calculateFeeUSD(partnerFeePercent: number, destUSD: string) {\n if (partnerFeePercent === 0 || destUSD === \"0\") return Big(0);\n\n return Big(destUSD).times(partnerFeePercent).div(100);\n}\n\nexport function subtractFee(\n amount: string | Big,\n fee: number // e.g. 1 for 1%\n): string {\n if (fee === 0) return typeof amount === \"string\" ? amount : amount.toFixed(); // avoid e-notation\n\n const feePercent = Big(fee).div(100);\n const multiplier = Big(1).minus(feePercent);\n return Big(amount).mul(multiplier).toFixed(0);\n}\n"],"mappings":";;AAEA,SAAgBC,EAAgBC,GAA2BC,GAAiB;CAG1E,OAFID,MAAsB,KAAKC,MAAY,MAAYH,EAAI,EAAE,GAEtDA,EAAIG,EAAQ,CAACC,MAAMF,EAAkB,CAACG,IAAI,IAAI;;AAGvD,SAAgBC,EACdC,GACAC,GACQ;CACR,IAAIA,MAAQ,GAAG,OAAO,OAAOD,KAAW,WAAWA,IAASA,EAAOE,SAAS;CAE5E,IAAMC,IAAaV,EAAIQ,EAAI,CAACH,IAAI,IAAI,EAC9BM,IAAaX,EAAI,EAAE,CAACY,MAAMF,EAAW;CAC3C,OAAOV,EAAIO,EAAO,CAACM,IAAIF,EAAW,CAACF,QAAQ,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"formatFiatPrice.js","names":["Nullish","T","formatFiatPrice","price","options","Intl","NumberFormatOptions","undefined","NumberFormat","style","currency","notation","format"],"sources":["../../../src/lib/utils/formatFiatPrice.ts"],"sourcesContent":["type Nullish<T> = T | null | undefined;\n\n/** Formats USD and non-USD prices */\nexport function formatFiatPrice(\n price: Nullish<number>,\n options?: Intl.NumberFormatOptions\n): string {\n if (price === null || price === undefined) return \"-\";\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n notation: price > 1_000_000_000 ? \"compact\" : undefined,\n ...options,\n }).format(price);\n}\n"],"mappings":";AAGA,SAAgBE,EACdC,GACAC,GACQ;AAER,QADID,KAAU,OAAoC,MAC3C,IAAIE,KAAKG,aAAa,SAAS;EACpCC,OAAO;EACPC,UAAU;EACVC,UAAUR,IAAQ,MAAgB,YAAYI,KAAAA;EAC9C,GAAGH;EACJ,CAAC,CAACQ,OAAOT,EAAM"}
1
+ {"version":3,"file":"formatFiatPrice.js","names":["Nullish","T","formatFiatPrice","price","options","Intl","NumberFormatOptions","undefined","NumberFormat","style","currency","notation","format"],"sources":["../../../src/lib/utils/formatFiatPrice.ts"],"sourcesContent":["type Nullish<T> = T | null | undefined;\n\n/** Formats USD and non-USD prices */\nexport function formatFiatPrice(\n price: Nullish<number>,\n options?: Intl.NumberFormatOptions\n): string {\n if (price === null || price === undefined) return \"-\";\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n notation: price > 1_000_000_000 ? \"compact\" : undefined,\n ...options,\n }).format(price);\n}\n"],"mappings":";AAGA,SAAgBE,EACdC,GACAC,GACQ;CAER,OADID,KAAU,OAAoC,MAC3C,IAAIE,KAAKG,aAAa,SAAS;EACpCC,OAAO;EACPC,UAAU;EACVC,UAAUR,IAAQ,MAAgB,YAAYI,KAAAA;EAC9C,GAAGH;EACJ,CAAC,CAACQ,OAAOT,EAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"formatPercent.js","names":["Nullish","T","formatPercent","number","undefined","Intl","NumberFormat","notation","style","format"],"sources":["../../../src/lib/utils/formatPercent.ts"],"sourcesContent":["type Nullish<T> = T | null | undefined;\n\nexport function formatPercent(number: Nullish<number>): string {\n if (number === null || number === undefined) return \"-\";\n return new Intl.NumberFormat(\"en-US\", {\n notation: \"compact\",\n style: \"percent\",\n }).format(number);\n}\n"],"mappings":";AAEA,SAAgBE,EAAcC,GAAiC;AAE7D,QADIA,KAAW,OAAqC,MAC7C,IAAIE,KAAKC,aAAa,SAAS;EACpCC,UAAU;EACVC,OAAO;EACR,CAAC,CAACC,OAAON,EAAO"}
1
+ {"version":3,"file":"formatPercent.js","names":["Nullish","T","formatPercent","number","undefined","Intl","NumberFormat","notation","style","format"],"sources":["../../../src/lib/utils/formatPercent.ts"],"sourcesContent":["type Nullish<T> = T | null | undefined;\n\nexport function formatPercent(number: Nullish<number>): string {\n if (number === null || number === undefined) return \"-\";\n return new Intl.NumberFormat(\"en-US\", {\n notation: \"compact\",\n style: \"percent\",\n }).format(number);\n}\n"],"mappings":";AAEA,SAAgBE,EAAcC,GAAiC;CAE7D,OADIA,KAAW,OAAqC,MAC7C,IAAIE,KAAKC,aAAa,SAAS;EACpCC,UAAU;EACVC,OAAO;EACR,CAAC,CAACC,OAAON,EAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"formatTokenBalance.js","names":["formatUnits","removeTrailingZeros","formatTokenBalance","balance","decimals","precision","tokenUnits","BigInt","num","Number","maxPrecision","toFixed","formatTokenBalanceClean","formatted","formatTokenAmount","amount","maxDecimals","formatAmount"],"sources":["../../../src/lib/utils/formatTokenBalance.ts"],"sourcesContent":["import { formatUnits } from \"viem\";\nimport { removeTrailingZeros } from \"./removeZeroDecimals\";\n\n/**\n * Formats a token balance from wei to human-readable format with specified precision\n * @param balance - Balance in wei as string or bigint\n * @param decimals - Token decimals\n * @param precision - Number of decimal places to show (default: 6)\n * @returns Formatted balance string\n */\nexport function formatTokenBalance(\n balance: string | bigint,\n decimals: number,\n precision: number = 6\n): string {\n if (!balance || balance === \"0\") return \"0\";\n\n // Convert wei to token units using viem\n const tokenUnits = formatUnits(BigInt(balance), decimals);\n\n // Convert to number for precision handling\n const num = Number(tokenUnits);\n\n // Handle very large numbers (show as whole numbers)\n const maxPrecision = 10 ** precision;\n if (num >= maxPrecision) {\n return num.toFixed(0);\n }\n\n // Format with specified precision\n return num.toFixed(precision);\n}\n\n/**\n * Formats a token balance and removes trailing zeros\n * @param balance - Balance in wei as string or bigint\n * @param decimals - Token decimals\n * @param precision - Number of decimal places to show (default: 6)\n * @returns Formatted balance string with trailing zeros removed\n */\nexport function formatTokenBalanceClean(\n balance: string | bigint,\n decimals: number,\n precision: number = 6\n): string {\n const formatted = formatTokenBalance(balance, decimals, precision);\n return removeTrailingZeros(formatted);\n}\n\n/**\n * Formats a token amount (already in token units) with nice formatting for large numbers\n * @param amount - Amount in token units (e.g., 12.4335)\n * @param maxDecimals - Maximum decimal places to show (default: 6)\n * @returns Formatted amount string with K/M/B suffixes for large numbers\n */\nexport function formatTokenAmount(\n amount: number | string | bigint,\n maxDecimals: number = 6\n): string {\n // Convert to number\n const num = Number(amount);\n\n if (!num || num === 0) return \"0\";\n\n // Handle amounts less than 100 with maximum precision\n if (num < 100) {\n return removeTrailingZeros(num.toFixed(maxDecimals));\n }\n\n // Handle large numbers with K/M/B suffixes\n if (num >= 1e9) {\n return removeTrailingZeros((num / 1e9).toFixed(2)) + \"B\";\n } else if (num >= 1e6) {\n return removeTrailingZeros((num / 1e6).toFixed(2)) + \"M\";\n } else if (num >= 1e3) {\n return removeTrailingZeros((num / 1e3).toFixed(2)) + \"K\";\n } else {\n // For numbers between 100 and 1000, show up to 2 decimal places\n return removeTrailingZeros(num.toFixed(2));\n }\n}\n\n/**\n * Formats an amount with nice formatting for large numbers\n * @param amount - Amount in token units (e.g., 12.4335)\n * @param maxDecimals - Maximum decimal places to show (default: 6)\n * @returns Formatted amount string without trailing zeros\n */\nexport function formatAmount(\n amount: number | string | bigint,\n maxDecimals: number = 6\n): string {\n const num = Number(amount);\n\n if (!num || num === 0) return \"0\";\n\n return removeTrailingZeros(num.toFixed(maxDecimals));\n}\n"],"mappings":";;;AAUA,SAAgBE,EACdC,GACAC,GACAC,IAAoB,GACZ;AACR,KAAI,CAACF,KAAWA,MAAY,IAAK,QAAO;CAGxC,IAAMG,IAAaN,EAAYO,OAAOJ,EAAQ,EAAEC,EAAS,EAGnDI,IAAMC,OAAOH,EAAW;AAS9B,QALIE,KADiB,MAAMH,IAElBG,EAAIG,QAAQ,EAAE,GAIhBH,EAAIG,QAAQN,EAAU;;AAU/B,SAAgBO,EACdT,GACAC,GACAC,IAAoB,GACZ;AAER,QAAOJ,EADWC,EAAmBC,GAASC,GAAUC,EAAU,CAC7B;;AASvC,SAAgBS,EACdC,GACAC,IAAsB,GACd;CAER,IAAMR,IAAMC,OAAOM,EAAO;AAkBxB,QAhBE,CAACP,KAAOA,MAAQ,IAAU,MAG1BA,IAAM,MACDP,EAAoBO,EAAIG,QAAQK,EAAY,CAAC,GAIlDR,KAAO,MACFP,GAAqBO,IAAM,KAAKG,QAAQ,EAAE,CAAC,GAAG,MAC5CH,KAAO,MACTP,GAAqBO,IAAM,KAAKG,QAAQ,EAAE,CAAC,GAAG,MAC5CH,KAAO,MACTP,GAAqBO,IAAM,KAAKG,QAAQ,EAAE,CAAC,GAAG,MAG9CV,EAAoBO,EAAIG,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"formatTokenBalance.js","names":["formatUnits","removeTrailingZeros","formatTokenBalance","balance","decimals","precision","tokenUnits","BigInt","num","Number","maxPrecision","toFixed","formatTokenBalanceClean","formatted","formatTokenAmount","amount","maxDecimals","formatAmount"],"sources":["../../../src/lib/utils/formatTokenBalance.ts"],"sourcesContent":["import { formatUnits } from \"viem\";\nimport { removeTrailingZeros } from \"./removeZeroDecimals\";\n\n/**\n * Formats a token balance from wei to human-readable format with specified precision\n * @param balance - Balance in wei as string or bigint\n * @param decimals - Token decimals\n * @param precision - Number of decimal places to show (default: 6)\n * @returns Formatted balance string\n */\nexport function formatTokenBalance(\n balance: string | bigint,\n decimals: number,\n precision: number = 6\n): string {\n if (!balance || balance === \"0\") return \"0\";\n\n // Convert wei to token units using viem\n const tokenUnits = formatUnits(BigInt(balance), decimals);\n\n // Convert to number for precision handling\n const num = Number(tokenUnits);\n\n // Handle very large numbers (show as whole numbers)\n const maxPrecision = 10 ** precision;\n if (num >= maxPrecision) {\n return num.toFixed(0);\n }\n\n // Format with specified precision\n return num.toFixed(precision);\n}\n\n/**\n * Formats a token balance and removes trailing zeros\n * @param balance - Balance in wei as string or bigint\n * @param decimals - Token decimals\n * @param precision - Number of decimal places to show (default: 6)\n * @returns Formatted balance string with trailing zeros removed\n */\nexport function formatTokenBalanceClean(\n balance: string | bigint,\n decimals: number,\n precision: number = 6\n): string {\n const formatted = formatTokenBalance(balance, decimals, precision);\n return removeTrailingZeros(formatted);\n}\n\n/**\n * Formats a token amount (already in token units) with nice formatting for large numbers\n * @param amount - Amount in token units (e.g., 12.4335)\n * @param maxDecimals - Maximum decimal places to show (default: 6)\n * @returns Formatted amount string with K/M/B suffixes for large numbers\n */\nexport function formatTokenAmount(\n amount: number | string | bigint,\n maxDecimals: number = 6\n): string {\n // Convert to number\n const num = Number(amount);\n\n if (!num || num === 0) return \"0\";\n\n // Handle amounts less than 100 with maximum precision\n if (num < 100) {\n return removeTrailingZeros(num.toFixed(maxDecimals));\n }\n\n // Handle large numbers with K/M/B suffixes\n if (num >= 1e9) {\n return removeTrailingZeros((num / 1e9).toFixed(2)) + \"B\";\n } else if (num >= 1e6) {\n return removeTrailingZeros((num / 1e6).toFixed(2)) + \"M\";\n } else if (num >= 1e3) {\n return removeTrailingZeros((num / 1e3).toFixed(2)) + \"K\";\n } else {\n // For numbers between 100 and 1000, show up to 2 decimal places\n return removeTrailingZeros(num.toFixed(2));\n }\n}\n\n/**\n * Formats an amount with nice formatting for large numbers\n * @param amount - Amount in token units (e.g., 12.4335)\n * @param maxDecimals - Maximum decimal places to show (default: 6)\n * @returns Formatted amount string without trailing zeros\n */\nexport function formatAmount(\n amount: number | string | bigint,\n maxDecimals: number = 6\n): string {\n const num = Number(amount);\n\n if (!num || num === 0) return \"0\";\n\n return removeTrailingZeros(num.toFixed(maxDecimals));\n}\n"],"mappings":";;;AAUA,SAAgBE,EACdC,GACAC,GACAC,IAAoB,GACZ;CACR,IAAI,CAACF,KAAWA,MAAY,KAAK,OAAO;CAGxC,IAAMG,IAAaN,EAAYO,OAAOJ,EAAQ,EAAEC,EAAS,EAGnDI,IAAMC,OAAOH,EAAW;CAS9B,OALIE,KADiB,MAAMH,IAElBG,EAAIG,QAAQ,EAAE,GAIhBH,EAAIG,QAAQN,EAAU;;AAU/B,SAAgBO,EACdT,GACAC,GACAC,IAAoB,GACZ;CAER,OAAOJ,EADWC,EAAmBC,GAASC,GAAUC,EAC7BQ,CAAU;;AASvC,SAAgBC,EACdC,GACAC,IAAsB,GACd;CAER,IAAMR,IAAMC,OAAOM,EAAO;CAkBxB,OAhBE,CAACP,KAAOA,MAAQ,IAAU,MAG1BA,IAAM,MACDP,EAAoBO,EAAIG,QAAQK,EAAY,CAAC,GAIlDR,KAAO,MACFP,GAAqBO,IAAM,KAAKG,QAAQ,EAAE,CAAC,GAAG,MAC5CH,KAAO,MACTP,GAAqBO,IAAM,KAAKG,QAAQ,EAAE,CAAC,GAAG,MAC5CH,KAAO,MACTP,GAAqBO,IAAM,KAAKG,QAAQ,EAAE,CAAC,GAAG,MAG9CV,EAAoBO,EAAIG,QAAQ,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Token","clsx","ClassValue","twMerge","assert","Prettify","cn","inputs","gatherObjectsByProp","elements","T","pickProp","elem","Record","transform","accumElem","U","reduce","accum","element","key","transformedElement","RemoveNullableElements","Head","Tail","MergeRecordsWithStrings","R1","R2","K","ConcatString","_ConcatString","Parts","Delim","RecordOfStrings","_MergeNStrings","Tuple","Result","MergeNStrings","MergeWithoutNullable","concatClassNamesMaps","maps","length","gathered","map","value","undefined","filterUnique","constructUniqueKeys","hasSeen","Set","filter","keys","some","has","forEach","add","isTruthy","x","isNonNullableEntry","entry","ReturnIfTruthy","assertProp","obj","prop","P","String","hasCorrectAddressLength","maybeAddress","filterInvalidTokenAddress","address","Pick","stringIncludes","a","b","toLowerCase","includes","shortenText","str","start","end","regexp","RegExp","replace","shortenAddress","slashIndex","rightCutLength","replaceUnderscoresWithSpaces","isValidUrl","url","URL","unorderedShallowEqual","setA","item","constructPropertiesEqual","properties","Partial","every","shallowEqual","aKeys","Object","bKeys","prototype","hasOwnProperty","call","getNumberWithinRange","num","min","max","Math"],"sources":["../../../src/lib/utils/index.ts"],"sourcesContent":["import type { Token } from \"@/tokens/state/types\";\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport { assert, type Prettify } from \"ts-essentials\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n// reduce element[] to Object{key: prop, val?: element}\n// for example\n// gatherObjectsByProp(Token[], token => token.address) => Record<address, Token|undefined>\nexport function gatherObjectsByProp<T>(\n elements: T[],\n pickProp: (elem: T) => string\n): Record<string, T>;\nexport function gatherObjectsByProp<T, U>(\n elements: T[],\n pickProp: (elem: T) => string,\n transform: (elem: T, accumElem?: U) => U\n): Record<string, U>;\nexport function gatherObjectsByProp<T, U>(\n elements: T[],\n pickProp: (elem: T) => string,\n transform?: (elem: T, accumElem?: U) => U\n): Record<string, T> | Record<string, U> {\n return elements.reduce<Record<string, T> | Record<string, U>>(\n (accum, element) => {\n const key = pickProp(element);\n\n const accumElem: T | U | undefined = accum[key];\n const transformedElement = transform\n ? // if transform is available, can only be U | undefined\n transform(element, accumElem as U | undefined)\n : element;\n\n accum[key] = transformedElement;\n\n return accum;\n },\n {}\n );\n}\n\ntype RemoveNullableElements<T extends readonly unknown[]> = T extends readonly [\n infer Head,\n ...infer Tail,\n]\n ? Head extends undefined | null\n ? RemoveNullableElements<Tail>\n : [Head, ...RemoveNullableElements<Tail>]\n : [];\n\ntype MergeRecordsWithStrings<\n R1 extends Record<string, string>,\n R2 extends Record<string, string>,\n> = {\n [K in keyof R1 | keyof R2]: K extends keyof R1\n ? K extends keyof R2\n ? ConcatString<\" \", [R1[K], R2[K]]>\n : R1[K]\n : K extends keyof R2\n ? R2[K]\n : never;\n};\n\ntype _ConcatString<\n Delim extends string,\n Parts extends readonly string[],\n> = Parts extends readonly []\n ? \"\"\n : Parts extends readonly [\n infer Head extends string,\n ...infer Tail extends readonly string[],\n ]\n ? Tail extends readonly []\n ? Head\n : `${Head}${Delim}${_ConcatString<Delim, Tail>}`\n : never;\n\nexport type ConcatString<\n Delim extends string = \"\",\n Parts extends readonly string[] = [],\n> = _ConcatString<Delim, Parts>;\n\ntype RecordOfStrings = Record<string, string>;\n\ntype _MergeNStrings<\n Tuple extends readonly RecordOfStrings[],\n Result extends RecordOfStrings,\n> = Tuple extends readonly [\n infer Head extends RecordOfStrings,\n ...infer Tail extends readonly RecordOfStrings[],\n]\n ? _MergeNStrings<Tail, MergeRecordsWithStrings<Result, Head>>\n : Result;\ntype MergeNStrings<Tuple extends readonly RecordOfStrings[]> = _MergeNStrings<\n Tuple,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n {}\n>;\n\ntype MergeWithoutNullable<\n Tuple extends readonly (RecordOfStrings | undefined | null)[],\n> = MergeNStrings<RemoveNullableElements<Tuple>>;\n\nexport function concatClassNamesMaps<\n T extends readonly (RecordOfStrings | undefined | null)[],\n>(...maps: T): Prettify<MergeWithoutNullable<T>> {\n if (maps.length <= 1)\n return (maps[0] || {}) as Prettify<MergeWithoutNullable<T>>;\n\n const gathered: Record<string, string> = {};\n\n for (const map of maps) {\n if (!map) continue;\n\n for (const key in map) {\n const value = map[key];\n if (value !== undefined) {\n gathered[key] = cn(gathered[key], value);\n }\n }\n }\n\n return gathered as Prettify<MergeWithoutNullable<T>>;\n}\n\nexport function filterUnique<T, U>(\n elements: T[],\n // supports multikey filtering, if only one key required return [U]\n constructUniqueKeys: (element: T) => U[]\n): T[] {\n if (elements.length <= 1) return elements;\n const hasSeen = new Set<U>();\n\n return elements.filter((element) => {\n const keys = constructUniqueKeys(element);\n if (keys.some((key) => hasSeen.has(key))) return false;\n\n keys.forEach((key) => hasSeen.add(key));\n return true;\n });\n}\n\nexport const isTruthy = <T>(\n x: T | false | 0 | 0n | \"\" | null | undefined\n): x is T => !!x;\n\nexport function isNonNullableEntry<T>(\n entry: [key: string, value: T | null | undefined]\n): entry is [string, T] {\n return entry[1] !== null && entry[1] !== undefined;\n}\n\ntype ReturnIfTruthy<T> = typeof isTruthy<T>;\n\nexport function assertProp<\n T extends Record<string, unknown>,\n K extends keyof T,\n>(obj: T, prop: K): asserts obj is T & { [P in K]-?: ReturnIfTruthy<T[P]> } {\n assert(isTruthy(obj[prop]), `${String(prop)} is required`);\n}\n\nexport function hasCorrectAddressLength(maybeAddress: string): boolean {\n return maybeAddress.length === 42;\n}\n\nexport const filterInvalidTokenAddress = ({\n address,\n}: Pick<Token, \"address\">) => hasCorrectAddressLength(address);\n\nexport const stringIncludes = (a: string, b: string): boolean => {\n return a.toLowerCase().includes(b.toLowerCase());\n};\n\n/**\n * Shorten any string with more than 6 characters (included) by inserting ellipsis placeholder in between\n *\n * @param {string} str the string to shorten\n * @param {number} start how much to leave off the start\n * @param {number} [end=0] how much to leave off the end\n * @returns {string} shortened text\n */\nexport const shortenText = (\n str: string,\n start: number,\n end: number = 0\n): string => {\n const regexp = new RegExp(`(.{${start}}).{3,}(.{${end}})`);\n return str.replace(regexp, \"$1...$2\");\n};\n\nexport function shortenAddress(\n address: string,\n slashIndex = 6,\n rightCutLength = 4\n): string {\n // An ethereum address has 42 characters\n return shortenText(address, slashIndex, rightCutLength);\n}\n\nexport function replaceUnderscoresWithSpaces(str: string): string {\n return str.replace(/_/g, \" \");\n}\n\nexport function isValidUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function unorderedShallowEqual<T>(a: T[], b: T[]): boolean {\n if (a.length !== b.length) return false;\n const setA = new Set(a);\n for (const item of b) {\n if (!setA.has(item)) return false;\n }\n return true;\n}\n\nexport function constructPropertiesEqual<K extends string>(\n properties: readonly K[]\n): (a: Partial<Record<K, unknown>>, b: Partial<Record<K, unknown>>) => boolean {\n return (a, b) => {\n return properties.every((key) => a[key] === b[key]);\n };\n}\n\nexport function shallowEqual<T>(a: T, b: T): boolean {\n // both the same value, check would pass for primitive values\n if (a === b) {\n return true;\n }\n\n // not an object, and checks for primitive have already been made\n if (typeof a !== \"object\" || typeof b !== \"object\" || !a || !b) {\n return false;\n }\n // both objects, check if they have the same keys\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n // different number of keys\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n return aKeys.every(\n (key) =>\n // b[key] exists, and not a[key] === undefined && b[key] doesn't exist\n Object.prototype.hasOwnProperty.call(b, key) &&\n a[key as keyof typeof a] === b[key as keyof typeof b]\n );\n}\n\nexport function getNumberWithinRange(\n num: number,\n min: number,\n max: number\n): number {\n return Math.min(Math.max(num, min), max);\n}\n"],"mappings":";;;;AAKA,SAAgBM,EAAG,GAAGC,GAAsB;AAC1C,QAAOJ,EAAQF,EAAKM,EAAO,CAAC;;AAe9B,SAAgBC,EACdC,GACAE,GACAG,GACuC;AACvC,QAAOL,EAASQ,QACbC,GAAOC,MAAY;EAClB,IAAMC,IAAMT,EAASQ,EAAQ,EAEvBJ,IAA+BG,EAAME;AAQ3C,SAFAF,EAAME,KALqBN,IAEvBA,EAAUK,GAASJ,EAA2B,GAC9CI,GAIGD;IAET,EACF,CAAC;;AAiEH,SAAgBqB,EAEd,GAAGC,GAA4C;AAC/C,KAAIA,EAAKC,UAAU,EACjB,QAAQD,EAAK,MAAM,EAAE;CAEvB,IAAME,IAAmC,EAAE;AAE3C,MAAK,IAAMC,KAAOH,EACXG,OAEL,MAAK,IAAMvB,KAAOuB,GAAK;EACrB,IAAMC,IAAQD,EAAIvB;AAClB,EAAIwB,MAAUC,KAAAA,MACZH,EAAStB,KAAOd,EAAGoC,EAAStB,IAAMwB,EAAM;;AAK9C,QAAOF;;AAGT,SAAgBI,EACdrC,GAEAsC,GACK;AACL,KAAItC,EAASgC,UAAU,EAAG,QAAOhC;CACjC,IAAMuC,oBAAU,IAAIC,KAAQ;AAE5B,QAAOxC,EAASyC,QAAQ/B,MAAY;EAClC,IAAMgC,IAAOJ,EAAoB5B,EAAQ;AAIzC,SAHIgC,EAAKC,MAAMhC,MAAQ4B,EAAQK,IAAIjC,EAAI,CAAC,GAAS,MAEjD+B,EAAKG,SAASlC,MAAQ4B,EAAQO,IAAInC,EAAI,CAAC,EAChC;GACP;;AAGJ,IAAaoC,KACXC,MACW,CAAC,CAACA;AAEf,SAAgBC,EACdC,GACsB;AACtB,QAAOA,EAAM,OAAO,QAAQA,EAAM,OAAOd,KAAAA;;AAK3C,SAAgBgB,EAGdC,GAAQC,GAAkE;AAC1E3D,GAAOoD,EAASM,EAAIC,GAAM,EAAE,GAAGE,OAAOF,EAAK,CAAA,cAAe;;AAG5D,SAAgBG,EAAwBC,GAA+B;AACrE,QAAOA,EAAa1B,WAAW;;AAGjC,IAAa2B,KAA6B,EACxCC,iBAC4BH,EAAwBG,EAAQ,EAEjDE,KAAkBC,GAAWC,MACjCD,EAAEE,aAAa,CAACC,SAASF,EAAEC,aAAa,CAAC,EAWrCE,KACXC,GACAC,GACAC,IAAc,MACH;CACX,IAAMC,IAAaC,OAAO,MAAMH,EAAK,YAAaC,EAAG,IAAK;AAC1D,QAAOF,EAAIK,QAAQF,GAAQ,UAAU;;AAGvC,SAAgBG,EACdd,GACAe,IAAa,GACbC,IAAiB,GACT;AAER,QAAOT,EAAYP,GAASe,GAAYC,EAAe;;AAGzD,SAAgBC,EAA6BT,GAAqB;AAChE,QAAOA,EAAIK,QAAQ,MAAM,IAAI;;AAG/B,SAAgBK,EAAWC,GAAsB;AAC/C,KAAI;AAEF,SADA,IAAIC,IAAID,EAAI,EACL;SACD;AACN,SAAO;;;AAIX,SAAgBE,EAAyBlB,GAAQC,GAAiB;AAChE,KAAID,EAAE/B,WAAWgC,EAAEhC,OAAQ,QAAO;CAClC,IAAMkD,IAAO,IAAI1C,IAAIuB,EAAE;AACvB,MAAK,IAAMoB,KAAQnB,EACjB,KAAI,CAACkB,EAAKtC,IAAIuC,EAAK,CAAE,QAAO;AAE9B,QAAO;;AAGT,SAAgBC,EACdC,GAC6E;AAC7E,SAAQtB,GAAGC,MACFqB,EAAWE,OAAO5E,MAAQoD,EAAEpD,OAASqD,EAAErD,GAAK;;AAIvD,SAAgB6E,EAAgBzB,GAAMC,GAAe;AAEnD,KAAID,MAAMC,EACR,QAAO;AAIT,KAAI,OAAOD,KAAM,YAAY,OAAOC,KAAM,YAAY,CAACD,KAAK,CAACC,EAC3D,QAAO;CAGT,IAAMyB,IAAQC,OAAOhD,KAAKqB,EAAE,EACtB4B,IAAQD,OAAOhD,KAAKsB,EAAE;AAK5B,QAHIyB,EAAMzD,WAAW2D,EAAM3D,SAGpByD,EAAMF,OACV5E,MAEC+E,OAAOE,UAAUC,eAAeC,KAAK9B,GAAGrD,EAAI,IAC5CoD,EAAEpD,OAA2BqD,EAAErD,GAClC,GAPQ;;AAUX,SAAgBoF,EACdC,GACAC,GACAC,GACQ;AACR,QAAOC,KAAKF,IAAIE,KAAKD,IAAIF,GAAKC,EAAI,EAAEC,EAAI"}
1
+ {"version":3,"file":"index.js","names":["Token","clsx","ClassValue","twMerge","assert","Prettify","cn","inputs","gatherObjectsByProp","elements","T","pickProp","elem","Record","transform","accumElem","U","reduce","accum","element","key","transformedElement","RemoveNullableElements","Head","Tail","MergeRecordsWithStrings","R1","R2","K","ConcatString","_ConcatString","Parts","Delim","RecordOfStrings","_MergeNStrings","Tuple","Result","MergeNStrings","MergeWithoutNullable","concatClassNamesMaps","maps","length","gathered","map","value","undefined","filterUnique","constructUniqueKeys","hasSeen","Set","filter","keys","some","has","forEach","add","isTruthy","x","isNonNullableEntry","entry","ReturnIfTruthy","assertProp","obj","prop","P","String","hasCorrectAddressLength","maybeAddress","filterInvalidTokenAddress","address","Pick","stringIncludes","a","b","toLowerCase","includes","shortenText","str","start","end","regexp","RegExp","replace","shortenAddress","slashIndex","rightCutLength","replaceUnderscoresWithSpaces","isValidUrl","url","URL","unorderedShallowEqual","setA","item","constructPropertiesEqual","properties","Partial","every","shallowEqual","aKeys","Object","bKeys","prototype","hasOwnProperty","call","getNumberWithinRange","num","min","max","Math"],"sources":["../../../src/lib/utils/index.ts"],"sourcesContent":["import type { Token } from \"@/tokens/state/types\";\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport { assert, type Prettify } from \"ts-essentials\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n// reduce element[] to Object{key: prop, val?: element}\n// for example\n// gatherObjectsByProp(Token[], token => token.address) => Record<address, Token|undefined>\nexport function gatherObjectsByProp<T>(\n elements: T[],\n pickProp: (elem: T) => string\n): Record<string, T>;\nexport function gatherObjectsByProp<T, U>(\n elements: T[],\n pickProp: (elem: T) => string,\n transform: (elem: T, accumElem?: U) => U\n): Record<string, U>;\nexport function gatherObjectsByProp<T, U>(\n elements: T[],\n pickProp: (elem: T) => string,\n transform?: (elem: T, accumElem?: U) => U\n): Record<string, T> | Record<string, U> {\n return elements.reduce<Record<string, T> | Record<string, U>>(\n (accum, element) => {\n const key = pickProp(element);\n\n const accumElem: T | U | undefined = accum[key];\n const transformedElement = transform\n ? // if transform is available, can only be U | undefined\n transform(element, accumElem as U | undefined)\n : element;\n\n accum[key] = transformedElement;\n\n return accum;\n },\n {}\n );\n}\n\ntype RemoveNullableElements<T extends readonly unknown[]> = T extends readonly [\n infer Head,\n ...infer Tail,\n]\n ? Head extends undefined | null\n ? RemoveNullableElements<Tail>\n : [Head, ...RemoveNullableElements<Tail>]\n : [];\n\ntype MergeRecordsWithStrings<\n R1 extends Record<string, string>,\n R2 extends Record<string, string>,\n> = {\n [K in keyof R1 | keyof R2]: K extends keyof R1\n ? K extends keyof R2\n ? ConcatString<\" \", [R1[K], R2[K]]>\n : R1[K]\n : K extends keyof R2\n ? R2[K]\n : never;\n};\n\ntype _ConcatString<\n Delim extends string,\n Parts extends readonly string[],\n> = Parts extends readonly []\n ? \"\"\n : Parts extends readonly [\n infer Head extends string,\n ...infer Tail extends readonly string[],\n ]\n ? Tail extends readonly []\n ? Head\n : `${Head}${Delim}${_ConcatString<Delim, Tail>}`\n : never;\n\nexport type ConcatString<\n Delim extends string = \"\",\n Parts extends readonly string[] = [],\n> = _ConcatString<Delim, Parts>;\n\ntype RecordOfStrings = Record<string, string>;\n\ntype _MergeNStrings<\n Tuple extends readonly RecordOfStrings[],\n Result extends RecordOfStrings,\n> = Tuple extends readonly [\n infer Head extends RecordOfStrings,\n ...infer Tail extends readonly RecordOfStrings[],\n]\n ? _MergeNStrings<Tail, MergeRecordsWithStrings<Result, Head>>\n : Result;\ntype MergeNStrings<Tuple extends readonly RecordOfStrings[]> = _MergeNStrings<\n Tuple,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n {}\n>;\n\ntype MergeWithoutNullable<\n Tuple extends readonly (RecordOfStrings | undefined | null)[],\n> = MergeNStrings<RemoveNullableElements<Tuple>>;\n\nexport function concatClassNamesMaps<\n T extends readonly (RecordOfStrings | undefined | null)[],\n>(...maps: T): Prettify<MergeWithoutNullable<T>> {\n if (maps.length <= 1)\n return (maps[0] || {}) as Prettify<MergeWithoutNullable<T>>;\n\n const gathered: Record<string, string> = {};\n\n for (const map of maps) {\n if (!map) continue;\n\n for (const key in map) {\n const value = map[key];\n if (value !== undefined) {\n gathered[key] = cn(gathered[key], value);\n }\n }\n }\n\n return gathered as Prettify<MergeWithoutNullable<T>>;\n}\n\nexport function filterUnique<T, U>(\n elements: T[],\n // supports multikey filtering, if only one key required return [U]\n constructUniqueKeys: (element: T) => U[]\n): T[] {\n if (elements.length <= 1) return elements;\n const hasSeen = new Set<U>();\n\n return elements.filter((element) => {\n const keys = constructUniqueKeys(element);\n if (keys.some((key) => hasSeen.has(key))) return false;\n\n keys.forEach((key) => hasSeen.add(key));\n return true;\n });\n}\n\nexport const isTruthy = <T>(\n x: T | false | 0 | 0n | \"\" | null | undefined\n): x is T => !!x;\n\nexport function isNonNullableEntry<T>(\n entry: [key: string, value: T | null | undefined]\n): entry is [string, T] {\n return entry[1] !== null && entry[1] !== undefined;\n}\n\ntype ReturnIfTruthy<T> = typeof isTruthy<T>;\n\nexport function assertProp<\n T extends Record<string, unknown>,\n K extends keyof T,\n>(obj: T, prop: K): asserts obj is T & { [P in K]-?: ReturnIfTruthy<T[P]> } {\n assert(isTruthy(obj[prop]), `${String(prop)} is required`);\n}\n\nexport function hasCorrectAddressLength(maybeAddress: string): boolean {\n return maybeAddress.length === 42;\n}\n\nexport const filterInvalidTokenAddress = ({\n address,\n}: Pick<Token, \"address\">) => hasCorrectAddressLength(address);\n\nexport const stringIncludes = (a: string, b: string): boolean => {\n return a.toLowerCase().includes(b.toLowerCase());\n};\n\n/**\n * Shorten any string with more than 6 characters (included) by inserting ellipsis placeholder in between\n *\n * @param {string} str the string to shorten\n * @param {number} start how much to leave off the start\n * @param {number} [end=0] how much to leave off the end\n * @returns {string} shortened text\n */\nexport const shortenText = (\n str: string,\n start: number,\n end: number = 0\n): string => {\n const regexp = new RegExp(`(.{${start}}).{3,}(.{${end}})`);\n return str.replace(regexp, \"$1...$2\");\n};\n\nexport function shortenAddress(\n address: string,\n slashIndex = 6,\n rightCutLength = 4\n): string {\n // An ethereum address has 42 characters\n return shortenText(address, slashIndex, rightCutLength);\n}\n\nexport function replaceUnderscoresWithSpaces(str: string): string {\n return str.replace(/_/g, \" \");\n}\n\nexport function isValidUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function unorderedShallowEqual<T>(a: T[], b: T[]): boolean {\n if (a.length !== b.length) return false;\n const setA = new Set(a);\n for (const item of b) {\n if (!setA.has(item)) return false;\n }\n return true;\n}\n\nexport function constructPropertiesEqual<K extends string>(\n properties: readonly K[]\n): (a: Partial<Record<K, unknown>>, b: Partial<Record<K, unknown>>) => boolean {\n return (a, b) => {\n return properties.every((key) => a[key] === b[key]);\n };\n}\n\nexport function shallowEqual<T>(a: T, b: T): boolean {\n // both the same value, check would pass for primitive values\n if (a === b) {\n return true;\n }\n\n // not an object, and checks for primitive have already been made\n if (typeof a !== \"object\" || typeof b !== \"object\" || !a || !b) {\n return false;\n }\n // both objects, check if they have the same keys\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n // different number of keys\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n return aKeys.every(\n (key) =>\n // b[key] exists, and not a[key] === undefined && b[key] doesn't exist\n Object.prototype.hasOwnProperty.call(b, key) &&\n a[key as keyof typeof a] === b[key as keyof typeof b]\n );\n}\n\nexport function getNumberWithinRange(\n num: number,\n min: number,\n max: number\n): number {\n return Math.min(Math.max(num, min), max);\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","names":["BaseLogger","log","args","warn","error","info","OnceLogger","reset","getLastMessage","level","CreateLoggerFn","context","options","LoggerOptions","LoggerInstance","once","success","debug","table","data","properties","group","label","groupCollapsed","groupEnd","color","showCallSite","isOn","LOG_STYLES","string","number","boolean","null","undefined","object","array","function","bigint","symbol","warning","logLevel","const","noop","noopLogger","_createNoopLogger","_createLogger","createLoggerBase","getValueStyle","value","style","displayValue","type","String","name","Array","isArray","length","Object","keys","createColoredMessage","message","styles","nativeValues","push","forEach","arg","isObjectLike","prototype","toString","call","LogOnceLevel","lastMessages","Record","formatMessage","jsonReplacer","_key","logOnce","map","val","JSON","stringify","join","formattedArgs","console","trace","onceLogger","LogLevel","Exclude","successArgs"],"sources":["../../../src/lib/utils/logger.ts"],"sourcesContent":["/**\n * A console log utility that prevents logging the same message twice in a row\n * with semantic coloring for different data types\n */\n\ntype BaseLogger = {\n log: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n};\n\ntype OnceLogger = BaseLogger & {\n reset: () => void;\n getLastMessage: (\n level?: \"log\" | \"warn\" | \"error\" | \"info\"\n ) => string | undefined;\n};\n\nexport type CreateLoggerFn = (\n context?: string,\n options?: LoggerOptions\n) => LoggerInstance;\n\nexport type LoggerInstance = BaseLogger & {\n once: OnceLogger;\n // Utility methods for common logging patterns\n success: (...args: unknown[]) => void;\n debug: (...args: unknown[]) => void;\n table: (data: unknown, properties?: string[]) => void;\n group: (label: string) => void;\n groupCollapsed: (label: string) => void;\n groupEnd: () => void;\n};\n\nexport type LoggerOptions = {\n color?: boolean;\n showCallSite?: boolean;\n isOn?: () => boolean;\n};\n\n// CSS styles for semantic coloring\nconst LOG_STYLES = {\n // Context styling\n context: \"color: #6366f1; font-weight: bold;\",\n\n // Data type styling\n string: \"color: #059669; font-weight: 500;\",\n number: \"color: #dc2626; font-weight: 500;\",\n boolean: \"color: #7c3aed; font-weight: 500;\",\n null: \"color: #6b7280; font-style: italic;\",\n undefined: \"color: #6b7280; font-style: italic;\",\n object: \"color: #ea580c; font-weight: 500;\",\n array: \"color: #0891b2; font-weight: 500;\",\n function: \"color: #be185d; font-style: italic;\",\n bigint: \"color: #dc2626; font-weight: 500;\",\n symbol: \"color: #7c3aed; font-weight: 500;\",\n\n // Special values\n error: \"color: #dc2626; font-weight: bold;\",\n warning: \"color: #d97706; font-weight: bold;\",\n success: \"color: #059669; font-weight: bold;\",\n\n // Log level styling\n logLevel: {\n log: \"color: #1f2937;\",\n warn: \"color: #d97706; font-weight: bold;\",\n error: \"color: #dc2626; font-weight: bold;\",\n info: \"color: #0891b2; font-weight: bold;\",\n },\n} as const;\n\n// No-op functions for production\nconst noop = (...args: unknown[]) => {\n // Intentionally empty - no-op function\n void args;\n};\n\nconst noopLogger: LoggerInstance = {\n log: noop,\n warn: noop,\n error: noop,\n info: noop,\n success: noop,\n debug: noop,\n table: noop,\n group: noop,\n groupCollapsed: noop,\n groupEnd: noop,\n once: {\n log: noop,\n warn: noop,\n error: noop,\n info: noop,\n reset: noop,\n getLastMessage: () => undefined,\n },\n};\n\nexport const _createNoopLogger: CreateLoggerFn = () => noopLogger;\n\nexport const _createLogger: CreateLoggerFn = createLoggerBase;\n\n/**\n * Determines the type and style for a value\n */\nfunction getValueStyle(value: unknown): {\n style: string;\n displayValue: string;\n} {\n if (value === null) {\n return { style: LOG_STYLES.null, displayValue: \"null\" };\n }\n\n if (value === undefined) {\n return { style: LOG_STYLES.undefined, displayValue: \"undefined\" };\n }\n\n const type = typeof value;\n\n switch (type) {\n case \"string\":\n return { style: LOG_STYLES.string, displayValue: `\"${value}\"` };\n\n case \"number\":\n return { style: LOG_STYLES.number, displayValue: String(value) };\n\n case \"boolean\":\n return { style: LOG_STYLES.boolean, displayValue: String(value) };\n\n case \"bigint\":\n return { style: LOG_STYLES.bigint, displayValue: `${value}n` };\n\n case \"symbol\":\n return { style: LOG_STYLES.symbol, displayValue: String(value) };\n\n case \"function\":\n return {\n style: LOG_STYLES.function,\n displayValue: `[function: ${(value as { name?: string }).name || \"anonymous\"}]`,\n };\n\n case \"object\":\n if (Array.isArray(value)) {\n return {\n style: LOG_STYLES.array,\n displayValue: `[${value.length} items]`,\n };\n }\n return {\n style: LOG_STYLES.object,\n displayValue: `{${Object.keys(value as object).length} keys}`,\n };\n\n default:\n return { style: \"\", displayValue: String(value) };\n }\n}\n\n/**\n * Creates a formatted message with semantic coloring\n */\nfunction createColoredMessage(\n args: unknown[],\n context?: string,\n color: boolean = true\n): unknown[] {\n let message = \"\";\n const styles: string[] = [];\n const nativeValues: unknown[] = [];\n\n // Add context if provided\n if (context) {\n if (color) {\n message += `%c${context}::`;\n styles.push(LOG_STYLES.context);\n } else {\n message += `${context}::`;\n }\n }\n\n args.forEach((arg) => {\n const type = typeof arg;\n const isObjectLike =\n (type === \"object\" && arg !== null) || type === \"function\";\n\n // Only treat plain objects (not arrays, dates, etc) as expandable objects\n // typeof is not enough: Object.prototype.toString.call(arg) === '[object Object]' ensures it's a plain object\n if (\n isObjectLike &&\n (Array.isArray(arg) ||\n Object.prototype.toString.call(arg) === \"[object Object]\")\n ) {\n // Add a space before object/array if needed\n if (message.length > 0) message += \" \";\n nativeValues.push(arg);\n } else {\n const { style, displayValue } = getValueStyle(arg);\n if (color) {\n message += `${message.length > 0 ? \" \" : \"\"}%c${displayValue}`;\n styles.push(style);\n } else {\n message += `${message.length > 0 ? \" \" : \"\"}${displayValue}`;\n }\n }\n });\n\n // If message is empty (all objects), just return the objects\n if (!message && nativeValues.length) return nativeValues;\n\n if (color) {\n return [message, ...styles, ...nativeValues];\n } else {\n return [message, ...nativeValues];\n }\n}\n\n/**\n * Creates a logger instance that provides both regular logging and once logging\n * Regular logging always outputs to console\n * Once logging prevents logging the same message twice in a row per level\n * @param context - Optional context string to prepend to all log messages\n */\nfunction createLoggerBase(\n context?: string,\n options?: LoggerOptions\n): LoggerInstance {\n const color = options?.color !== false;\n const isOn = options?.isOn || (() => true);\n\n type LogOnceLevel = keyof BaseLogger;\n const lastMessages: Record<LogOnceLevel, string | undefined> = {\n log: undefined,\n warn: undefined,\n error: undefined,\n info: undefined,\n };\n\n const formatMessage = (...args: unknown[]): unknown[] => {\n return createColoredMessage(args, context, color);\n };\n\n const jsonReplacer = (_key: string, value: unknown): unknown => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n if (typeof value === \"function\") {\n return \"[function]\";\n }\n return value;\n };\n\n const logOnce = (level: LogOnceLevel, ...args: unknown[]): void => {\n if (!isOn()) {\n return;\n }\n\n const message = args\n .map((val) => JSON.stringify(val, jsonReplacer))\n .join(\" \");\n\n if (message === lastMessages[level]) {\n return;\n }\n\n lastMessages[level] = message;\n\n const formattedArgs = formatMessage(...args);\n\n if (options?.showCallSite === true) {\n // to see where logger.log was called,\n // otherwise we only see where console.log was called on the next line\n console.trace(\"Call stack:\");\n }\n switch (level) {\n case \"warn\":\n console.warn(...formattedArgs);\n break;\n case \"error\":\n console.error(...formattedArgs);\n break;\n case \"info\":\n console.info(...formattedArgs);\n break;\n default:\n console.log(...formattedArgs);\n }\n };\n\n const onceLogger: OnceLogger = {\n log: (...args) => logOnce(\"log\", ...args),\n warn: (...args) => logOnce(\"warn\", ...args),\n error: (...args) => logOnce(\"error\", ...args),\n info: (...args) => logOnce(\"info\", ...args),\n reset: () => {\n lastMessages.log = undefined;\n lastMessages.warn = undefined;\n lastMessages.error = undefined;\n lastMessages.info = undefined;\n },\n getLastMessage: (level: LogOnceLevel = \"log\") => {\n return lastMessages[level];\n },\n };\n\n type LogLevel = Exclude<keyof LoggerInstance, \"once\">;\n\n const log = (level: LogLevel, ...args: unknown[]) => {\n if (!isOn()) {\n return;\n }\n switch (level) {\n case \"log\":\n case \"warn\":\n case \"error\":\n case \"info\":\n case \"debug\":\n console[level](...formatMessage(...args));\n break;\n case \"success\": {\n const successArgs = [\n `%c✅ `,\n LOG_STYLES.success,\n ...formatMessage(...args),\n ];\n console.log(...successArgs);\n break;\n }\n case \"table\": {\n const data = args[0];\n const properties = args[1] as string[] | undefined;\n if (context) {\n console.group(`%c${context}::`, LOG_STYLES.context);\n console.table(data, properties);\n console.groupEnd();\n } else {\n console.table(data, properties);\n }\n break;\n }\n case \"group\":\n case \"groupCollapsed\": {\n const label = args[0];\n if (context) {\n console[level](`%c${context}:: ${label}`, LOG_STYLES.context);\n } else {\n console[level](label);\n }\n break;\n }\n case \"groupEnd\": {\n console.groupEnd();\n break;\n }\n }\n };\n\n return {\n log: (...args: unknown[]) => log(\"log\", ...args),\n warn: (...args: unknown[]) => log(\"warn\", ...args),\n error: (...args: unknown[]) => log(\"error\", ...args),\n info: (...args: unknown[]) => log(\"info\", ...args),\n success: (...args: unknown[]) => {\n log(\"success\", ...args);\n },\n debug: (...args: unknown[]) => {\n log(\"debug\", ...args);\n },\n table: (data: unknown, properties?: string[]) => {\n log(\"table\", data, properties);\n },\n group: (label: string) => {\n log(\"group\", label);\n },\n groupCollapsed: (label: string) => {\n log(\"groupCollapsed\", label);\n },\n groupEnd: () => {\n log(\"groupEnd\");\n },\n once: onceLogger,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","names":["BaseLogger","log","args","warn","error","info","OnceLogger","reset","getLastMessage","level","CreateLoggerFn","context","options","LoggerOptions","LoggerInstance","once","success","debug","table","data","properties","group","label","groupCollapsed","groupEnd","color","showCallSite","isOn","LOG_STYLES","string","number","boolean","null","undefined","object","array","function","bigint","symbol","warning","logLevel","const","noop","noopLogger","_createNoopLogger","_createLogger","createLoggerBase","getValueStyle","value","style","displayValue","type","String","name","Array","isArray","length","Object","keys","createColoredMessage","message","styles","nativeValues","push","forEach","arg","isObjectLike","prototype","toString","call","LogOnceLevel","lastMessages","Record","formatMessage","jsonReplacer","_key","logOnce","map","val","JSON","stringify","join","formattedArgs","console","trace","onceLogger","LogLevel","Exclude","successArgs"],"sources":["../../../src/lib/utils/logger.ts"],"sourcesContent":["/**\n * A console log utility that prevents logging the same message twice in a row\n * with semantic coloring for different data types\n */\n\ntype BaseLogger = {\n log: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n};\n\ntype OnceLogger = BaseLogger & {\n reset: () => void;\n getLastMessage: (\n level?: \"log\" | \"warn\" | \"error\" | \"info\"\n ) => string | undefined;\n};\n\nexport type CreateLoggerFn = (\n context?: string,\n options?: LoggerOptions\n) => LoggerInstance;\n\nexport type LoggerInstance = BaseLogger & {\n once: OnceLogger;\n // Utility methods for common logging patterns\n success: (...args: unknown[]) => void;\n debug: (...args: unknown[]) => void;\n table: (data: unknown, properties?: string[]) => void;\n group: (label: string) => void;\n groupCollapsed: (label: string) => void;\n groupEnd: () => void;\n};\n\nexport type LoggerOptions = {\n color?: boolean;\n showCallSite?: boolean;\n isOn?: () => boolean;\n};\n\n// CSS styles for semantic coloring\nconst LOG_STYLES = {\n // Context styling\n context: \"color: #6366f1; font-weight: bold;\",\n\n // Data type styling\n string: \"color: #059669; font-weight: 500;\",\n number: \"color: #dc2626; font-weight: 500;\",\n boolean: \"color: #7c3aed; font-weight: 500;\",\n null: \"color: #6b7280; font-style: italic;\",\n undefined: \"color: #6b7280; font-style: italic;\",\n object: \"color: #ea580c; font-weight: 500;\",\n array: \"color: #0891b2; font-weight: 500;\",\n function: \"color: #be185d; font-style: italic;\",\n bigint: \"color: #dc2626; font-weight: 500;\",\n symbol: \"color: #7c3aed; font-weight: 500;\",\n\n // Special values\n error: \"color: #dc2626; font-weight: bold;\",\n warning: \"color: #d97706; font-weight: bold;\",\n success: \"color: #059669; font-weight: bold;\",\n\n // Log level styling\n logLevel: {\n log: \"color: #1f2937;\",\n warn: \"color: #d97706; font-weight: bold;\",\n error: \"color: #dc2626; font-weight: bold;\",\n info: \"color: #0891b2; font-weight: bold;\",\n },\n} as const;\n\n// No-op functions for production\nconst noop = (...args: unknown[]) => {\n // Intentionally empty - no-op function\n void args;\n};\n\nconst noopLogger: LoggerInstance = {\n log: noop,\n warn: noop,\n error: noop,\n info: noop,\n success: noop,\n debug: noop,\n table: noop,\n group: noop,\n groupCollapsed: noop,\n groupEnd: noop,\n once: {\n log: noop,\n warn: noop,\n error: noop,\n info: noop,\n reset: noop,\n getLastMessage: () => undefined,\n },\n};\n\nexport const _createNoopLogger: CreateLoggerFn = () => noopLogger;\n\nexport const _createLogger: CreateLoggerFn = createLoggerBase;\n\n/**\n * Determines the type and style for a value\n */\nfunction getValueStyle(value: unknown): {\n style: string;\n displayValue: string;\n} {\n if (value === null) {\n return { style: LOG_STYLES.null, displayValue: \"null\" };\n }\n\n if (value === undefined) {\n return { style: LOG_STYLES.undefined, displayValue: \"undefined\" };\n }\n\n const type = typeof value;\n\n switch (type) {\n case \"string\":\n return { style: LOG_STYLES.string, displayValue: `\"${value}\"` };\n\n case \"number\":\n return { style: LOG_STYLES.number, displayValue: String(value) };\n\n case \"boolean\":\n return { style: LOG_STYLES.boolean, displayValue: String(value) };\n\n case \"bigint\":\n return { style: LOG_STYLES.bigint, displayValue: `${value}n` };\n\n case \"symbol\":\n return { style: LOG_STYLES.symbol, displayValue: String(value) };\n\n case \"function\":\n return {\n style: LOG_STYLES.function,\n displayValue: `[function: ${(value as { name?: string }).name || \"anonymous\"}]`,\n };\n\n case \"object\":\n if (Array.isArray(value)) {\n return {\n style: LOG_STYLES.array,\n displayValue: `[${value.length} items]`,\n };\n }\n return {\n style: LOG_STYLES.object,\n displayValue: `{${Object.keys(value as object).length} keys}`,\n };\n\n default:\n return { style: \"\", displayValue: String(value) };\n }\n}\n\n/**\n * Creates a formatted message with semantic coloring\n */\nfunction createColoredMessage(\n args: unknown[],\n context?: string,\n color: boolean = true\n): unknown[] {\n let message = \"\";\n const styles: string[] = [];\n const nativeValues: unknown[] = [];\n\n // Add context if provided\n if (context) {\n if (color) {\n message += `%c${context}::`;\n styles.push(LOG_STYLES.context);\n } else {\n message += `${context}::`;\n }\n }\n\n args.forEach((arg) => {\n const type = typeof arg;\n const isObjectLike =\n (type === \"object\" && arg !== null) || type === \"function\";\n\n // Only treat plain objects (not arrays, dates, etc) as expandable objects\n // typeof is not enough: Object.prototype.toString.call(arg) === '[object Object]' ensures it's a plain object\n if (\n isObjectLike &&\n (Array.isArray(arg) ||\n Object.prototype.toString.call(arg) === \"[object Object]\")\n ) {\n // Add a space before object/array if needed\n if (message.length > 0) message += \" \";\n nativeValues.push(arg);\n } else {\n const { style, displayValue } = getValueStyle(arg);\n if (color) {\n message += `${message.length > 0 ? \" \" : \"\"}%c${displayValue}`;\n styles.push(style);\n } else {\n message += `${message.length > 0 ? \" \" : \"\"}${displayValue}`;\n }\n }\n });\n\n // If message is empty (all objects), just return the objects\n if (!message && nativeValues.length) return nativeValues;\n\n if (color) {\n return [message, ...styles, ...nativeValues];\n } else {\n return [message, ...nativeValues];\n }\n}\n\n/**\n * Creates a logger instance that provides both regular logging and once logging\n * Regular logging always outputs to console\n * Once logging prevents logging the same message twice in a row per level\n * @param context - Optional context string to prepend to all log messages\n */\nfunction createLoggerBase(\n context?: string,\n options?: LoggerOptions\n): LoggerInstance {\n const color = options?.color !== false;\n const isOn = options?.isOn || (() => true);\n\n type LogOnceLevel = keyof BaseLogger;\n const lastMessages: Record<LogOnceLevel, string | undefined> = {\n log: undefined,\n warn: undefined,\n error: undefined,\n info: undefined,\n };\n\n const formatMessage = (...args: unknown[]): unknown[] => {\n return createColoredMessage(args, context, color);\n };\n\n const jsonReplacer = (_key: string, value: unknown): unknown => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n if (typeof value === \"function\") {\n return \"[function]\";\n }\n return value;\n };\n\n const logOnce = (level: LogOnceLevel, ...args: unknown[]): void => {\n if (!isOn()) {\n return;\n }\n\n const message = args\n .map((val) => JSON.stringify(val, jsonReplacer))\n .join(\" \");\n\n if (message === lastMessages[level]) {\n return;\n }\n\n lastMessages[level] = message;\n\n const formattedArgs = formatMessage(...args);\n\n if (options?.showCallSite === true) {\n // to see where logger.log was called,\n // otherwise we only see where console.log was called on the next line\n console.trace(\"Call stack:\");\n }\n switch (level) {\n case \"warn\":\n console.warn(...formattedArgs);\n break;\n case \"error\":\n console.error(...formattedArgs);\n break;\n case \"info\":\n console.info(...formattedArgs);\n break;\n default:\n console.log(...formattedArgs);\n }\n };\n\n const onceLogger: OnceLogger = {\n log: (...args) => logOnce(\"log\", ...args),\n warn: (...args) => logOnce(\"warn\", ...args),\n error: (...args) => logOnce(\"error\", ...args),\n info: (...args) => logOnce(\"info\", ...args),\n reset: () => {\n lastMessages.log = undefined;\n lastMessages.warn = undefined;\n lastMessages.error = undefined;\n lastMessages.info = undefined;\n },\n getLastMessage: (level: LogOnceLevel = \"log\") => {\n return lastMessages[level];\n },\n };\n\n type LogLevel = Exclude<keyof LoggerInstance, \"once\">;\n\n const log = (level: LogLevel, ...args: unknown[]) => {\n if (!isOn()) {\n return;\n }\n switch (level) {\n case \"log\":\n case \"warn\":\n case \"error\":\n case \"info\":\n case \"debug\":\n console[level](...formatMessage(...args));\n break;\n case \"success\": {\n const successArgs = [\n `%c✅ `,\n LOG_STYLES.success,\n ...formatMessage(...args),\n ];\n console.log(...successArgs);\n break;\n }\n case \"table\": {\n const data = args[0];\n const properties = args[1] as string[] | undefined;\n if (context) {\n console.group(`%c${context}::`, LOG_STYLES.context);\n console.table(data, properties);\n console.groupEnd();\n } else {\n console.table(data, properties);\n }\n break;\n }\n case \"group\":\n case \"groupCollapsed\": {\n const label = args[0];\n if (context) {\n console[level](`%c${context}:: ${label}`, LOG_STYLES.context);\n } else {\n console[level](label);\n }\n break;\n }\n case \"groupEnd\": {\n console.groupEnd();\n break;\n }\n }\n };\n\n return {\n log: (...args: unknown[]) => log(\"log\", ...args),\n warn: (...args: unknown[]) => log(\"warn\", ...args),\n error: (...args: unknown[]) => log(\"error\", ...args),\n info: (...args: unknown[]) => log(\"info\", ...args),\n success: (...args: unknown[]) => {\n log(\"success\", ...args);\n },\n debug: (...args: unknown[]) => {\n log(\"debug\", ...args);\n },\n table: (data: unknown, properties?: string[]) => {\n log(\"table\", data, properties);\n },\n group: (label: string) => {\n log(\"group\", label);\n },\n groupCollapsed: (label: string) => {\n log(\"groupCollapsed\", label);\n },\n groupEnd: () => {\n log(\"groupEnd\");\n },\n once: onceLogger,\n };\n}\n"],"mappings":"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"}