@velora-dex/widget 0.8.1-dev.0 → 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 (615) 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.d.ts +1 -0
  16. package/dist/components/web3/ConnectExternalProvider/metamaskProviderWrapper.d.ts.map +1 -1
  17. package/dist/components/web3/ConnectExternalProvider/metamaskProviderWrapper.js +30 -16
  18. package/dist/components/web3/ConnectExternalProvider/metamaskProviderWrapper.js.map +1 -1
  19. package/dist/components/web3/ConnectExternalProvider/safeProviderWrapper.js.map +1 -1
  20. package/dist/components/web3/ConnectExternalProvider/utils.js.map +1 -1
  21. package/dist/components/web3/ConnectWallets/WalletConnectButtons.js.map +1 -1
  22. package/dist/components/web3/ConnectWallets/index.js +1 -1
  23. package/dist/components/web3/ConnectWallets/index.js.map +1 -1
  24. package/dist/components/web3/ConnectWallets/privy/button.js.map +1 -1
  25. package/dist/components/web3/ConnectWallets/privy/connectRunner.js.map +1 -1
  26. package/dist/components/web3/ConnectWallets/privy/iframe.js.map +1 -1
  27. package/dist/components/web3/ConnectWallets/privy/provider.js.map +1 -1
  28. package/dist/components/web3/ConnectWallets/walletFlags.js.map +1 -1
  29. package/dist/components/web3/ConnectWallets/walletIcons.js +1 -1
  30. package/dist/components/web3/ConnectWallets/walletIcons.js.map +1 -1
  31. package/dist/components/web3/ConnectedWallet/ConnectedWallet.js.map +1 -1
  32. package/dist/components/web3/providers.js.map +1 -1
  33. package/dist/components/widget/AppHeader/Activities/Activities.js.map +1 -1
  34. package/dist/components/widget/AppHeader/Activities/ActivitiesScreen.js.map +1 -1
  35. package/dist/components/widget/AppHeader/Activities/ActivityItems.js.map +1 -1
  36. package/dist/components/widget/AppHeader/Activities/Drawers.js.map +1 -1
  37. package/dist/components/widget/AppHeader/Activities/hooks.js.map +1 -1
  38. package/dist/components/widget/AppHeader/Activities/utils.js.map +1 -1
  39. package/dist/components/widget/AppHeader/ActivityButton.js.map +1 -1
  40. package/dist/components/widget/AppHeader/AppHeader.js.map +1 -1
  41. package/dist/components/widget/AppHeader/TradeModeSwitcher.d.ts.map +1 -1
  42. package/dist/components/widget/AppHeader/TradeModeSwitcher.js +61 -53
  43. package/dist/components/widget/AppHeader/TradeModeSwitcher.js.map +1 -1
  44. package/dist/components/widget/AppHeader/state/showMoreAtom.js.map +1 -1
  45. package/dist/components/widget/BridgeList/BridgeListItem.js.map +1 -1
  46. package/dist/components/widget/BridgeList/BridgeProtocolsList.js.map +1 -1
  47. package/dist/components/widget/BridgeList/BridgesList.js.map +1 -1
  48. package/dist/components/widget/BridgeList/hooks.js.map +1 -1
  49. package/dist/components/widget/BridgePreferences/BridgePreferences.js.map +1 -1
  50. package/dist/components/widget/BridgeSelectorExpandable/BridgeSelectorExpandable.js.map +1 -1
  51. package/dist/components/widget/Button/CancelButton/CancelButton.js.map +1 -1
  52. package/dist/components/widget/Button/CancelButton/CancelButtonWithDrawer.js.map +1 -1
  53. package/dist/components/widget/Button/DismissButton.js.map +1 -1
  54. package/dist/components/widget/Button/RefreshButton.d.ts +3 -0
  55. package/dist/components/widget/Button/RefreshButton.d.ts.map +1 -0
  56. package/dist/components/widget/Button/RefreshButton.js +28 -0
  57. package/dist/components/widget/Button/RefreshButton.js.map +1 -0
  58. package/dist/components/widget/Button/types.d.ts +7 -0
  59. package/dist/components/widget/Button/types.d.ts.map +1 -0
  60. package/dist/components/widget/CompareQuotes/CompareQuotes.d.ts.map +1 -1
  61. package/dist/components/widget/CompareQuotes/CompareQuotes.js +67 -73
  62. package/dist/components/widget/CompareQuotes/CompareQuotes.js.map +1 -1
  63. package/dist/components/widget/Details/DetailWithTooltip.js.map +1 -1
  64. package/dist/components/widget/Details/DetailWithValueList.js.map +1 -1
  65. package/dist/components/widget/Details/DetailWithValueListExpandable.js.map +1 -1
  66. package/dist/components/widget/Details/SwapDetailsExpandable.js.map +1 -1
  67. package/dist/components/widget/DexesList/DexItem.js.map +1 -1
  68. package/dist/components/widget/DexesList/DexesList.js.map +1 -1
  69. package/dist/components/widget/DexesList/getDexProps.js.map +1 -1
  70. package/dist/components/widget/Dialog/ReceiverAddressDialog/ReceiverAddressDialog.js.map +1 -1
  71. package/dist/components/widget/Dialog/ReceiverAddressDialog/ReceiverAddressInput.js.map +1 -1
  72. package/dist/components/widget/Dialog/SelectTokenDialog/SelectTokenDialog.js.map +1 -1
  73. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/AcrossTokenList.js.map +1 -1
  74. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/RegularTokenList.js.map +1 -1
  75. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenCloud/index.js.map +1 -1
  76. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListBody.js.map +1 -1
  77. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListRow.js.map +1 -1
  78. package/dist/components/widget/Dialog/SelectTokenDialog/TokenSearch.js.map +1 -1
  79. package/dist/components/widget/Drawer/Overlay.js.map +1 -1
  80. package/dist/components/widget/Drawer/index.js.map +1 -1
  81. package/dist/components/widget/Drawer/state/useDrawerControls.js.map +1 -1
  82. package/dist/components/widget/Dropdown/DropdownWithItems.d.ts.map +1 -1
  83. package/dist/components/widget/Dropdown/DropdownWithItems.js +3 -2
  84. package/dist/components/widget/Dropdown/DropdownWithItems.js.map +1 -1
  85. package/dist/components/widget/Dropdown/types.d.ts +1 -1
  86. package/dist/components/widget/Dropdown/types.d.ts.map +1 -1
  87. package/dist/components/widget/Duration/Duration.js.map +1 -1
  88. package/dist/components/widget/Duration/utils.js.map +1 -1
  89. package/dist/components/widget/EnabledExchanges/EnabledExchanges.js.map +1 -1
  90. package/dist/components/widget/EnabledExchanges/EnabledExchangesList.js.map +1 -1
  91. package/dist/components/widget/EnabledList/EnabledList.js.map +1 -1
  92. package/dist/components/widget/FetchingQuotes/FetchingQuotes.js.map +1 -1
  93. package/dist/components/widget/Icon/CheckIcon.js.map +1 -1
  94. package/dist/components/widget/Icon/ChevronIcon.js.map +1 -1
  95. package/dist/components/widget/Icon/DeltaIcon.js.map +1 -1
  96. package/dist/components/widget/Icon/EllipseIcon.js.map +1 -1
  97. package/dist/components/widget/Icon/InfoIcon.js.map +1 -1
  98. package/dist/components/widget/Icon/MarketIcon.js.map +1 -1
  99. package/dist/components/widget/Icon/SliderIcon.js.map +1 -1
  100. package/dist/components/widget/ImportToken/ImportToken.js.map +1 -1
  101. package/dist/components/widget/ImportToken/useImportTokenDrawer.js.map +1 -1
  102. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/Controls.js.map +1 -1
  103. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/LimitOrderDetails.js.map +1 -1
  104. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/utils.js.map +1 -1
  105. package/dist/components/widget/LimitOrderItem/LimitOrderListItem.js +5 -8
  106. package/dist/components/widget/LimitOrderItem/LimitOrderListItem.js.map +1 -1
  107. package/dist/components/widget/LimitOrderItem/constants.js.map +1 -1
  108. package/dist/components/widget/LimitOrderItem/utils.js.map +1 -1
  109. package/dist/components/widget/LimitPriceInput/index.js +6 -6
  110. package/dist/components/widget/LimitPriceInput/index.js.map +1 -1
  111. package/dist/components/widget/Line/Line.js.map +1 -1
  112. package/dist/components/widget/ListItem/ListItemWithSwitch.js.map +1 -1
  113. package/dist/components/widget/NetworkIcon/NetworkIconSquare.js.map +1 -1
  114. package/dist/components/widget/NetworkSwitcher/CompactNetworkSwitcher.js.map +1 -1
  115. package/dist/components/widget/NetworkSwitcher/NetworkSwitcherDropdown.js.map +1 -1
  116. package/dist/components/widget/NetworkSwitcher/NetworkSwitcherList.js.map +1 -1
  117. package/dist/components/widget/NetworkSwitcher/common/AllNetworksItem.js.map +1 -1
  118. package/dist/components/widget/NetworkSwitcher/common/NetworkItem.js.map +1 -1
  119. package/dist/components/widget/NetworkSwitcher/utils/items.js.map +1 -1
  120. package/dist/components/widget/NetworkWithIcon/NetworkIconWithChevron.js.map +1 -1
  121. package/dist/components/widget/NetworkWithIcon/NetworkWithIcon.js.map +1 -1
  122. package/dist/components/widget/NumberInput/NumberInput.js.map +1 -1
  123. package/dist/components/widget/OrderExpiryInput/index.js.map +1 -1
  124. package/dist/components/widget/OtcOrderItem/OtcOrderDetails/Controls.js.map +1 -1
  125. package/dist/components/widget/OtcOrderItem/OtcOrderDetails/OtcOrderDetails.js.map +1 -1
  126. package/dist/components/widget/OtcOrderItem/OtcOrderDetails/utils.js.map +1 -1
  127. package/dist/components/widget/OtcOrderItem/OtcOrderListItem.js +5 -8
  128. package/dist/components/widget/OtcOrderItem/OtcOrderListItem.js.map +1 -1
  129. package/dist/components/widget/OtcOrderItem/constants.js.map +1 -1
  130. package/dist/components/widget/OtcOrderItem/utils.js.map +1 -1
  131. package/dist/components/widget/PayReceiveInfo/PayReceiveInfo.js.map +1 -1
  132. package/dist/components/widget/PoweredBy/PoweredBy.js.map +1 -1
  133. package/dist/components/widget/ReceiverAddress/ReceiverAddress.js.map +1 -1
  134. package/dist/components/widget/ReceiverAddress/state/receiverAddressAtom.js.map +1 -1
  135. package/dist/components/widget/ReceiverAddress/state/subscriptions.js.map +1 -1
  136. package/dist/components/widget/ReviewAndConfirm/FillOtcReviewAndConfirm/FillOtcControls.js.map +1 -1
  137. package/dist/components/widget/ReviewAndConfirm/FillOtcReviewAndConfirm/FillOtcReviewAndConfirm.js.map +1 -1
  138. package/dist/components/widget/ReviewAndConfirm/FillOtcReviewAndConfirm/utils.js.map +1 -1
  139. package/dist/components/widget/RowVirtualizer/RowVirtualizerFixed.js.map +1 -1
  140. package/dist/components/widget/Screen/GenericScreen.js.map +1 -1
  141. package/dist/components/widget/Screen/ScreenContainer.js.map +1 -1
  142. package/dist/components/widget/SelectToken/SelectTokenButton.js.map +1 -1
  143. package/dist/components/widget/SettingsButton/SettingsButton.js.map +1 -1
  144. package/dist/components/widget/SwapModeSwitcher/SwapModeSwitcherExpandable.js.map +1 -1
  145. package/dist/components/widget/SwapModeSwitcher/state/swapModeActionsAtom.js.map +1 -1
  146. package/dist/components/widget/SwapModeSwitcher/state/swapSideAtom.js.map +1 -1
  147. package/dist/components/widget/SwapRate/SwapRate.js.map +1 -1
  148. package/dist/components/widget/SwapRate/SwapRateWithTooltip.js.map +1 -1
  149. package/dist/components/widget/SwapRate/utils.js.map +1 -1
  150. package/dist/components/widget/SwapRateWithPriceImpactRow/SwapRateWithPriceImpactRow.d.ts +4 -1
  151. package/dist/components/widget/SwapRateWithPriceImpactRow/SwapRateWithPriceImpactRow.d.ts.map +1 -1
  152. package/dist/components/widget/SwapRateWithPriceImpactRow/SwapRateWithPriceImpactRow.js +51 -28
  153. package/dist/components/widget/SwapRateWithPriceImpactRow/SwapRateWithPriceImpactRow.js.map +1 -1
  154. package/dist/components/widget/Tabs/Tabs.js.map +1 -1
  155. package/dist/components/widget/Toasts/CustomToast.js.map +1 -1
  156. package/dist/components/widget/TokenBadge/TokenBadge.js.map +1 -1
  157. package/dist/components/widget/TokenBadge/TokenLink.js.map +1 -1
  158. package/dist/components/widget/TokenInput/InputContainer.js.map +1 -1
  159. package/dist/components/widget/TokenInput/InputField.js.map +1 -1
  160. package/dist/components/widget/TokenInput/InputFooter.js.map +1 -1
  161. package/dist/components/widget/TokenInput/InputHeader.js.map +1 -1
  162. package/dist/components/widget/TokenInput/common/Balance.js.map +1 -1
  163. package/dist/components/widget/TokenInput/common/MaxButtons.js.map +1 -1
  164. package/dist/components/widget/TokenInput/index.js.map +1 -1
  165. package/dist/components/widget/TokenSwitcher/TokenSwitcher.js.map +1 -1
  166. package/dist/components/widget/TradeOverview/CancelButtonWithDrawer.js.map +1 -1
  167. package/dist/components/widget/TradeOverview/CancelOrder/ConfirmCancel.js.map +1 -1
  168. package/dist/components/widget/TradeOverview/CancelOrder/utils.js.map +1 -1
  169. package/dist/components/widget/TradeOverview/DeltaOrderTradeOverview.js.map +1 -1
  170. package/dist/components/widget/TradeOverview/FillOtcOrderTradeOverview.js.map +1 -1
  171. package/dist/components/widget/TradeOverview/LimitOrderTradeOverview.js.map +1 -1
  172. package/dist/components/widget/TradeOverview/MarketSwapTradeOverview.js.map +1 -1
  173. package/dist/components/widget/TradeOverview/OtcOrderTradeOverview.js.map +1 -1
  174. package/dist/components/widget/TradeOverview/Step/Step.js.map +1 -1
  175. package/dist/components/widget/TradeOverview/Step/utils.js.map +1 -1
  176. package/dist/components/widget/TradeOverview/Stepper.js.map +1 -1
  177. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteFooter.js.map +1 -1
  178. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteHeader.js.map +1 -1
  179. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompletedDetails.js.map +1 -1
  180. package/dist/components/widget/TradeOverview/TradeComplete/index.js.map +1 -1
  181. package/dist/components/widget/TradeOverview/TradeComplete/useTradeCompleteDetails.js.map +1 -1
  182. package/dist/components/widget/TradeOverview/TradeComplete/utils.js.map +1 -1
  183. package/dist/components/widget/TradeOverview/TradeDetails.js.map +1 -1
  184. package/dist/components/widget/TradeOverview/TradeDetailsDisplay.js.map +1 -1
  185. package/dist/components/widget/TradeOverview/TradeError/TradeErrorDetails.js.map +1 -1
  186. package/dist/components/widget/TradeOverview/TradeError/TradeErrorFooter.js.map +1 -1
  187. package/dist/components/widget/TradeOverview/TradeError/index.js.map +1 -1
  188. package/dist/components/widget/TradeOverview/TradeError/utils.js.map +1 -1
  189. package/dist/components/widget/TradeOverview/TradeOverview.js.map +1 -1
  190. package/dist/components/widget/TradeOverview/TradeOverviewFooter.js.map +1 -1
  191. package/dist/components/widget/TradeOverview/TradeOverviewHeader.js.map +1 -1
  192. package/dist/components/widget/TradeOverview/TradeOverviewScreen.js.map +1 -1
  193. package/dist/components/widget/TradeOverview/TwapOrderTradeOverview.js.map +1 -1
  194. package/dist/components/widget/TradeOverview/VerticalDash.js.map +1 -1
  195. package/dist/components/widget/TradeOverview/tradeFlowContext.js.map +1 -1
  196. package/dist/components/widget/TradeOverview/utils/isNonFlowStep.js.map +1 -1
  197. package/dist/components/widget/TradeOverview/utils/preWrap.js.map +1 -1
  198. package/dist/components/widget/TradeOverview/utils/useSwapAmountsWithSlippage.js.map +1 -1
  199. package/dist/components/widget/TradeParameters/BridgePreferenceParameters/BridgePreferenceParameters.js.map +1 -1
  200. package/dist/components/widget/TradeParameters/BridgePreferenceParameters/useDraftBridgePreferencesState.js.map +1 -1
  201. package/dist/components/widget/TradeParameters/DegenModeConfirmation.js.map +1 -1
  202. package/dist/components/widget/TradeParameters/DegenModeParameter.js.map +1 -1
  203. package/dist/components/widget/TradeParameters/DeltaParameter.js.map +1 -1
  204. package/dist/components/widget/TradeParameters/EIP1559Parameter.js.map +1 -1
  205. package/dist/components/widget/TradeParameters/EnabledExchangesParameters/EnabledExchangesParameters.js.map +1 -1
  206. package/dist/components/widget/TradeParameters/EnabledExchangesParameters/useDraftEnabledExchangesState.js.map +1 -1
  207. package/dist/components/widget/TradeParameters/SlippageParameter/CustomSlippageInput.js.map +1 -1
  208. package/dist/components/widget/TradeParameters/SlippageParameter/EditSlippage.js.map +1 -1
  209. package/dist/components/widget/TradeParameters/SlippageParameter/SlippageParameter.js.map +1 -1
  210. package/dist/components/widget/TradeParameters/SlippageParameter/hooks/useCustomSlippageProps.js.map +1 -1
  211. package/dist/components/widget/TradeParameters/TradeParameters.js.map +1 -1
  212. package/dist/components/widget/TradeParameters/TransactionSpeedParameter.js.map +1 -1
  213. package/dist/components/widget/TradeParameters/hooks/useIsNotDefaultAnyParameter.js.map +1 -1
  214. package/dist/components/widget/TradeParameters/state/bridgePreferences/bridgePreferenceAtom.js.map +1 -1
  215. package/dist/components/widget/TradeParameters/state/bridgePreferences/disabledBridgesAtom.js.map +1 -1
  216. package/dist/components/widget/TradeParameters/state/bridgePreferences/excludeBridgesAtom.js.map +1 -1
  217. package/dist/components/widget/TradeParameters/state/bridgePreferences/protocolNameAtom.js.map +1 -1
  218. package/dist/components/widget/TradeParameters/state/bridgePreferences/resetDraftsAtom.js.map +1 -1
  219. package/dist/components/widget/TradeParameters/state/bridgePreferences/useBridgePreferences.js.map +1 -1
  220. package/dist/components/widget/TradeParameters/state/deltaParamActionsAtom.js.map +1 -1
  221. package/dist/components/widget/TradeParameters/state/enabledExchanges/disabledDexesAtomFamily.js.map +1 -1
  222. package/dist/components/widget/TradeParameters/state/enabledExchanges/useDisabledDexes.js.map +1 -1
  223. package/dist/components/widget/TradeParameters/state/slippageParamAtom.js.map +1 -1
  224. package/dist/components/widget/TradeParameters/state/tradePreferencesAtom.js.map +1 -1
  225. package/dist/components/widget/TradeParameters/useTempTradeParameters.js.map +1 -1
  226. package/dist/components/widget/TransactionDetails/LimitOrderDetails/Controls.js.map +1 -1
  227. package/dist/components/widget/TransactionDetails/LimitOrderDetails/TransactionDetails.js.map +1 -1
  228. package/dist/components/widget/TransactionDetails/LimitOrderDetails/utils.js.map +1 -1
  229. package/dist/components/widget/TransactionDetails/TransactionListItem.js.map +1 -1
  230. package/dist/components/widget/TransactionDetails/utils.js.map +1 -1
  231. package/dist/components/widget/Twap/CustomDurationDrawer.js.map +1 -1
  232. package/dist/components/widget/Twap/OrderDuration.js.map +1 -1
  233. package/dist/components/widget/Twap/OrderSplit.js.map +1 -1
  234. package/dist/components/widget/Twap/RateProtection.js.map +1 -1
  235. package/dist/components/widget/Twap/TwapDetailWithTooltip.js.map +1 -1
  236. package/dist/components/widget/Warning/InsufficientBalanceMessage.js.map +1 -1
  237. package/dist/components/widget/Warning/Warning.js.map +1 -1
  238. package/dist/components/widget/Warning/WarningMessage.js.map +1 -1
  239. package/dist/components/widget/WrapEth/WrapEthContent.js.map +1 -1
  240. package/dist/components/widget/WrapEth/WrapEthDrawerButton.js.map +1 -1
  241. package/dist/components/widget/WrapEth/hooks/useSubmitDepositTxMutation.js.map +1 -1
  242. package/dist/components/widget/WrapEth/hooks/useWrapEthProps.js.map +1 -1
  243. package/dist/components/widget/YouGet/YouGet.js.map +1 -1
  244. package/dist/core/ConnectWalletDrawerButton.js.map +1 -1
  245. package/dist/core/LimitOrderButton.js.map +1 -1
  246. package/dist/core/LimitOrderDetails.js.map +1 -1
  247. package/dist/core/OtcOrderButton.js.map +1 -1
  248. package/dist/core/OtcOrderDetails.js.map +1 -1
  249. package/dist/core/Toaster.js.map +1 -1
  250. package/dist/core/TradeFlowScreenButton.js.map +1 -1
  251. package/dist/core/TwapDetails.js.map +1 -1
  252. package/dist/core/Updaters.js.map +1 -1
  253. package/dist/core/Warnings.js.map +1 -1
  254. package/dist/core/across/isCrosschainPossible.js.map +1 -1
  255. package/dist/core/across/utils.js.map +1 -1
  256. package/dist/core/button/hooks/useWidgetButtonExtraProps.js.map +1 -1
  257. package/dist/core/index.js.map +1 -1
  258. package/dist/core/inputs/hooks/useMaxButtonProps.js.map +1 -1
  259. package/dist/core/inputs/hooks/useTokenFromInputProps.js.map +1 -1
  260. package/dist/core/inputs/hooks/useTokenSwitcherProps.js.map +1 -1
  261. package/dist/core/inputs/hooks/useTokenToInputProps.js.map +1 -1
  262. package/dist/core/inputs/hooks/useWarningMessage.js.map +1 -1
  263. package/dist/core/inputs/hooks/utils.js.map +1 -1
  264. package/dist/core/inputs/state/common.js.map +1 -1
  265. package/dist/core/inputs/state/inputAmountAtom.js.map +1 -1
  266. package/dist/core/inputs/state/selectedTokenActionsAtom.js.map +1 -1
  267. package/dist/core/inputs/state/selectedTokenAtom.js.map +1 -1
  268. package/dist/core/inputs/state/setTokenByAddressAtom.d.ts.map +1 -1
  269. package/dist/core/inputs/state/setTokenByAddressAtom.js +1 -1
  270. package/dist/core/inputs/state/setTokenByAddressAtom.js.map +1 -1
  271. package/dist/core/inputs/state/subscriptions.js.map +1 -1
  272. package/dist/core/limit/state/deadlineAtom.js.map +1 -1
  273. package/dist/core/limit/state/isCrosschainAtom.js.map +1 -1
  274. package/dist/core/limit/state/limitInputActionsAtom.js.map +1 -1
  275. package/dist/core/limit/state/limitInputAmountAtom.js.map +1 -1
  276. package/dist/core/limit/state/receiverAddressAtom.js.map +1 -1
  277. package/dist/core/limit/state/selectedTokenActionsAtom.js.map +1 -1
  278. package/dist/core/limit/state/selectedTokenAtom.js.map +1 -1
  279. package/dist/core/limit/state/utils.js.map +1 -1
  280. package/dist/core/limit/useLimitDetailsListProps.js.map +1 -1
  281. package/dist/core/limit/useLimitNotSupported.js.map +1 -1
  282. package/dist/core/limit/useLimitPriceDifference.js.map +1 -1
  283. package/dist/core/limit/useLimitPriceInputProps.js.map +1 -1
  284. package/dist/core/limit/useLimitRate.js.map +1 -1
  285. package/dist/core/limit/useLimitTokenFromInputProps.js.map +1 -1
  286. package/dist/core/limit/useLimitTokenSwitcherProps.js.map +1 -1
  287. package/dist/core/limit/useLimitTokenToInputProps.js.map +1 -1
  288. package/dist/core/logger.js.map +1 -1
  289. package/dist/core/otc/state/deadlineAtom.js.map +1 -1
  290. package/dist/core/otc/state/otcInputActionsAtom.js.map +1 -1
  291. package/dist/core/otc/state/otcInputAmountAtom.js.map +1 -1
  292. package/dist/core/otc/state/receiverAddressAtom.js.map +1 -1
  293. package/dist/core/otc/state/selectedTokenActionsAtom.js.map +1 -1
  294. package/dist/core/otc/state/selectedTokenAtom.js.map +1 -1
  295. package/dist/core/otc/useOtcDetailsListProps.js.map +1 -1
  296. package/dist/core/otc/useOtcNotSupported.js.map +1 -1
  297. package/dist/core/otc/useOtcPriceDifference.js.map +1 -1
  298. package/dist/core/otc/useOtcPriceInputProps.js.map +1 -1
  299. package/dist/core/otc/useOtcTokenFromInputProps.js.map +1 -1
  300. package/dist/core/otc/useOtcTokenSwitcherProps.js.map +1 -1
  301. package/dist/core/otc/useOtcTokenToInputProps.js.map +1 -1
  302. package/dist/core/screen/hooks/useInitialValue.js.map +1 -1
  303. package/dist/core/screen/hooks/useOnClickOutside.js.map +1 -1
  304. package/dist/core/screen/hooks/useResizeObserver.js.map +1 -1
  305. package/dist/core/screen/hooks/useRunOnMount.js.map +1 -1
  306. package/dist/core/screen/state/hooks/useScreen.js.map +1 -1
  307. package/dist/core/screen/state/hooks/useScreenValue.js.map +1 -1
  308. package/dist/core/screen/state/hooks/useSetScreen.js.map +1 -1
  309. package/dist/core/screen/state/screenAtom.js.map +1 -1
  310. package/dist/core/state/apiConfigAtom.js.map +1 -1
  311. package/dist/core/state/chainToAtom.js.map +1 -1
  312. package/dist/core/state/configActionsAtom.js.map +1 -1
  313. package/dist/core/state/configAtom.js +2 -2
  314. package/dist/core/state/configAtom.js.map +1 -1
  315. package/dist/core/state/configEffectAtom.js.map +1 -1
  316. package/dist/core/state/containerAtom.js.map +1 -1
  317. package/dist/core/state/enabledChainsAtom.js.map +1 -1
  318. package/dist/core/state/enabledTradeModesAtom.d.ts +7 -1
  319. package/dist/core/state/enabledTradeModesAtom.d.ts.map +1 -1
  320. package/dist/core/state/enabledTradeModesAtom.js +1 -1
  321. package/dist/core/state/enabledTradeModesAtom.js.map +1 -1
  322. package/dist/core/state/externalProviderAtom.js.map +1 -1
  323. package/dist/core/state/getSelectableDestChains.js.map +1 -1
  324. package/dist/core/state/isCrosschainAtom.js.map +1 -1
  325. package/dist/core/state/tradeModeAtom.js +1 -1
  326. package/dist/core/state/tradeModeAtom.js.map +1 -1
  327. package/dist/core/state/validatedPartnerConfigAtom.js.map +1 -1
  328. package/dist/core/state/validatedReferrerConfigAtom.js.map +1 -1
  329. package/dist/core/state/widgetEventsAtom.js.map +1 -1
  330. package/dist/core/subscriptions.js.map +1 -1
  331. package/dist/core/swapDetails/fees.js.map +1 -1
  332. package/dist/core/swapDetails/maxToPay.js.map +1 -1
  333. package/dist/core/swapDetails/orderRouting.js.map +1 -1
  334. package/dist/core/swapDetails/priceImpact.js.map +1 -1
  335. package/dist/core/swapDetails/useSwapDetailsListProps.d.ts.map +1 -1
  336. package/dist/core/swapDetails/useSwapDetailsListProps.js +37 -31
  337. package/dist/core/swapDetails/useSwapDetailsListProps.js.map +1 -1
  338. package/dist/core/swapDetails/youGet.js.map +1 -1
  339. package/dist/core/twap/state/isCrosschainAtom.js.map +1 -1
  340. package/dist/core/twap/state/selectedTokenActionsAtom.js.map +1 -1
  341. package/dist/core/twap/state/twapInputAmountAtom.js.map +1 -1
  342. package/dist/core/twap/state/twapParamsAtom.js.map +1 -1
  343. package/dist/core/twap/state/twapSideAtom.js.map +1 -1
  344. package/dist/core/twap/twapDetails/minimumReceiveable.js.map +1 -1
  345. package/dist/core/twap/useTwapDetailsListProps.d.ts.map +1 -1
  346. package/dist/core/twap/useTwapDetailsListProps.js +36 -31
  347. package/dist/core/twap/useTwapDetailsListProps.js.map +1 -1
  348. package/dist/core/twap/useTwapTokenFromInputProps.js.map +1 -1
  349. package/dist/core/twap/useTwapTokenSwitcherProps.js.map +1 -1
  350. package/dist/core/twap/useTwapTokenToInputProps.js.map +1 -1
  351. package/dist/events/effects/formInput.js.map +1 -1
  352. package/dist/events/effects/price.js.map +1 -1
  353. package/dist/events/effects/swapMode.js.map +1 -1
  354. package/dist/events/getters/limit.js.map +1 -1
  355. package/dist/events/getters/otc.js.map +1 -1
  356. package/dist/events/getters/settings.js.map +1 -1
  357. package/dist/events/getters/swap.js.map +1 -1
  358. package/dist/events/getters/twap.js.map +1 -1
  359. package/dist/events/getters/widgetState.js.map +1 -1
  360. package/dist/events/hooks/useActivateEffects.js.map +1 -1
  361. package/dist/events/hooks/useOnPriceUpdates.js.map +1 -1
  362. package/dist/events/hooks/useOnWalletConnect.js.map +1 -1
  363. package/dist/external/.pnpm/vaul@1.1.2_patch_hash_07b36ba5def3805dde9d543a880ba9e4caf55e5eb58e544faaa2c186846bf3c1__6feb48fe37bd41e9af5c8e81d5a6f4e1/external/vaul/dist/index.js.map +1 -1
  364. package/dist/hooks/batch/useAwaitCalls.js.map +1 -1
  365. package/dist/hooks/batch/useBatchWithApproveTxs.js.map +1 -1
  366. package/dist/hooks/batch/useCanBatchTxs.js.map +1 -1
  367. package/dist/hooks/batch/useSendBatchTx.js.map +1 -1
  368. package/dist/hooks/connectors/useIsConnectedSafe.js.map +1 -1
  369. package/dist/hooks/connectors/useIsGnosisSafeConnector.js.map +1 -1
  370. package/dist/hooks/connectors/useIsSafeThroughWalletConnect.js.map +1 -1
  371. package/dist/hooks/gas/useGasPrices.js.map +1 -1
  372. package/dist/hooks/gas/utils.js.map +1 -1
  373. package/dist/hooks/getCode/query.js.map +1 -1
  374. package/dist/hooks/getCode/useIsAccountContract.js.map +1 -1
  375. package/dist/hooks/getCode/useIsContractAtAddress.js.map +1 -1
  376. package/dist/hooks/otc/mutations/useCancelLimitOrder.js.map +1 -1
  377. package/dist/hooks/otc/mutations/useCreateLimitOrder.js.map +1 -1
  378. package/dist/hooks/otc/mutations/useFillOrder.js.map +1 -1
  379. package/dist/hooks/otc/mutations/utils.js.map +1 -1
  380. package/dist/hooks/otc/queries/useLimitOrderRequiredBalance.js.map +1 -1
  381. package/dist/hooks/otc/queries/useLimitOrders.js.map +1 -1
  382. package/dist/hooks/otc/tradeFlow/useFillOtcOrderFlow.js.map +1 -1
  383. package/dist/hooks/otc/tradeFlow/useFillOtcOrderStep.js.map +1 -1
  384. package/dist/hooks/otc/tradeFlow/useOtcOrderFlow.js.map +1 -1
  385. package/dist/hooks/otc/tradeFlow/useOtcOrderStep.js.map +1 -1
  386. package/dist/hooks/permit/hooks/common/useSignArbitraryTypedData.js.map +1 -1
  387. package/dist/hooks/permit/hooks/common/useSignPermit.js.map +1 -1
  388. package/dist/hooks/permit/hooks/common/useWalletSupportsPermit.js.map +1 -1
  389. package/dist/hooks/permit/hooks/permit1/useGetPermitInfo.js.map +1 -1
  390. package/dist/hooks/permit/hooks/permit1/useGetSafePermitInfo.js.map +1 -1
  391. package/dist/hooks/permit/hooks/permit1/usePermit1Nonce.js.map +1 -1
  392. package/dist/hooks/permit/hooks/permit1/useSignTokenPermit1.js.map +1 -1
  393. package/dist/hooks/permit/hooks/permit1/useTokenFromPermit1Nonce.js.map +1 -1
  394. package/dist/hooks/permit/hooks/permit1/useTokenFromPermitInfo.js.map +1 -1
  395. package/dist/hooks/permit/hooks/permit1/useTryToSignPermit1.js.map +1 -1
  396. package/dist/hooks/permit/hooks/permit2/usePermit2Allowance.js.map +1 -1
  397. package/dist/hooks/permit/hooks/permit2/usePermit2TransferFromNonce.js.map +1 -1
  398. package/dist/hooks/permit/hooks/permit2/useSignTokenPermit2TransferFrom.js.map +1 -1
  399. package/dist/hooks/permit/hooks/permit2/useTokenFromPermit2Allowance.js.map +1 -1
  400. package/dist/hooks/permit/hooks/permit2/useTokenFromPermit2TransferFromNonce.js.map +1 -1
  401. package/dist/hooks/permit/utils/constants.js.map +1 -1
  402. package/dist/hooks/permit/utils/construct.js.map +1 -1
  403. package/dist/hooks/permit/utils/deadlines.js.map +1 -1
  404. package/dist/hooks/permit/utils/detect.js.map +1 -1
  405. package/dist/hooks/permit/utils/domainSeparator.js.map +1 -1
  406. package/dist/hooks/permit/utils/encodeArgs.js.map +1 -1
  407. package/dist/hooks/permit/utils/trySignPermit1.js.map +1 -1
  408. package/dist/hooks/permit/utils/utils.js.map +1 -1
  409. package/dist/hooks/sdk/useGetContracts.js.map +1 -1
  410. package/dist/hooks/sdk/useSpender.js.map +1 -1
  411. package/dist/hooks/swap/prices/delta/bridge/useSelectedBridgePrice.js.map +1 -1
  412. package/dist/hooks/swap/prices/delta/bridge/utils.js.map +1 -1
  413. package/dist/hooks/swap/prices/delta/mutations/twap/useCreatePreSignableTwapOrder.js.map +1 -1
  414. package/dist/hooks/swap/prices/delta/mutations/twap/useCreateTwapOrder.js.map +1 -1
  415. package/dist/hooks/swap/prices/delta/mutations/twap/useDepositAndSubmitTwapOrder.js.map +1 -1
  416. package/dist/hooks/swap/prices/delta/mutations/twap/usePostTwapOrder.js.map +1 -1
  417. package/dist/hooks/swap/prices/delta/mutations/twap/usePreSignAndSubmitTwapOrder.js.map +1 -1
  418. package/dist/hooks/swap/prices/delta/mutations/twap/useTwapOrderToPost.js.map +1 -1
  419. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrders.js.map +1 -1
  420. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrdersEvents.js.map +1 -1
  421. package/dist/hooks/swap/prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder.js.map +1 -1
  422. package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.js.map +1 -1
  423. package/dist/hooks/swap/prices/delta/mutations/useCreatePreSignableDeltaOrder.js.map +1 -1
  424. package/dist/hooks/swap/prices/delta/mutations/useDeltaOrderToPost.js.map +1 -1
  425. package/dist/hooks/swap/prices/delta/mutations/useIsDeltaOrderCancellable.js.map +1 -1
  426. package/dist/hooks/swap/prices/delta/mutations/usePostDeltaOrder.js.map +1 -1
  427. package/dist/hooks/swap/prices/delta/mutations/useSendDepositPreSignDeltaOrderTx.js.map +1 -1
  428. package/dist/hooks/swap/prices/delta/mutations/useWithdrawAndCancelDeltaOrder.js.map +1 -1
  429. package/dist/hooks/swap/prices/delta/mutations/utils.js.map +1 -1
  430. package/dist/hooks/swap/prices/delta/orders/unposted/effect.js.map +1 -1
  431. package/dist/hooks/swap/prices/delta/orders/unposted/index.js.map +1 -1
  432. package/dist/hooks/swap/prices/delta/orders/unposted/storage.js.map +1 -1
  433. package/dist/hooks/swap/prices/delta/orders/unposted/utils.js.map +1 -1
  434. package/dist/hooks/swap/prices/delta/orders/utils.js.map +1 -1
  435. package/dist/hooks/swap/prices/delta/queries/bridgeInfo/bridgeInfosLoadedAtom.js.map +1 -1
  436. package/dist/hooks/swap/prices/delta/queries/bridgeInfo/common.js.map +1 -1
  437. package/dist/hooks/swap/prices/delta/queries/bridgeInfo/getBridgeInfoQueryData.js.map +1 -1
  438. package/dist/hooks/swap/prices/delta/queries/bridgeInfo/useBridgeInfo.js.map +1 -1
  439. package/dist/hooks/swap/prices/delta/queries/bridgeProtocols/useBridgeProtocols.js.map +1 -1
  440. package/dist/hooks/swap/prices/delta/queries/errors.js.map +1 -1
  441. package/dist/hooks/swap/prices/delta/queries/useDeltaLimitOrderRequiredBalance.js.map +1 -1
  442. package/dist/hooks/swap/prices/delta/queries/useDeltaOrderPreConditions.js.map +1 -1
  443. package/dist/hooks/swap/prices/delta/queries/useDeltaOrders.js.map +1 -1
  444. package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.js.map +1 -1
  445. package/dist/hooks/swap/prices/delta/queries/useIsTokenSupportedInDelta.js.map +1 -1
  446. package/dist/hooks/swap/prices/delta/queries/useWatchDeltaOrder.js.map +1 -1
  447. package/dist/hooks/swap/prices/factory.js.map +1 -1
  448. package/dist/hooks/swap/prices/market/mutations/useBuildTx.js.map +1 -1
  449. package/dist/hooks/swap/prices/market/mutations/useSendMarketSwapTx.js.map +1 -1
  450. package/dist/hooks/swap/prices/market/queries/dexesList/useDexesList.js.map +1 -1
  451. package/dist/hooks/swap/prices/market/queries/errors.js.map +1 -1
  452. package/dist/hooks/swap/prices/market/queries/useMarketPriceQuery.js.map +1 -1
  453. package/dist/hooks/swap/prices/market/queries/useSpenderAndContracts.js.map +1 -1
  454. package/dist/hooks/swap/prices/usePricesParams.js.map +1 -1
  455. package/dist/hooks/swap/prices/useSwapPrices.d.ts +4 -7
  456. package/dist/hooks/swap/prices/useSwapPrices.d.ts.map +1 -1
  457. package/dist/hooks/swap/prices/useSwapPrices.js +28 -24
  458. package/dist/hooks/swap/prices/useSwapPrices.js.map +1 -1
  459. package/dist/hooks/swap/prices/useTokenInputsFromPrice.js.map +1 -1
  460. package/dist/hooks/swap/prices/useTokenInputsFromTwapPrice.js.map +1 -1
  461. package/dist/hooks/swap/prices/useTwapPrices.js.map +1 -1
  462. package/dist/hooks/swap/tradeFlow/common/errors.js.map +1 -1
  463. package/dist/hooks/swap/tradeFlow/common/factory/depositAndSubmitOrderFactory.js.map +1 -1
  464. package/dist/hooks/swap/tradeFlow/common/factory/preSignAndSubmitOrderFactory.js.map +1 -1
  465. package/dist/hooks/swap/tradeFlow/common/useApproveOrPermit.js.map +1 -1
  466. package/dist/hooks/swap/tradeFlow/common/useApproveOrPermitEvents.js.map +1 -1
  467. package/dist/hooks/swap/tradeFlow/common/useBatchWrapAndApprove.js.map +1 -1
  468. package/dist/hooks/swap/tradeFlow/common/useConstructGasParams.js.map +1 -1
  469. package/dist/hooks/swap/tradeFlow/common/useDepositAndSubmitDeltaOrder.js.map +1 -1
  470. package/dist/hooks/swap/tradeFlow/common/usePreSignAndSubmitDeltaOrder.js.map +1 -1
  471. package/dist/hooks/swap/tradeFlow/common/useRequiredAllowanceForOrders.js.map +1 -1
  472. package/dist/hooks/swap/tradeFlow/common/useSignPermit1Or2.js.map +1 -1
  473. package/dist/hooks/swap/tradeFlow/common/utils.js.map +1 -1
  474. package/dist/hooks/swap/tradeFlow/useDeltaFlow.js.map +1 -1
  475. package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.js.map +1 -1
  476. package/dist/hooks/swap/tradeFlow/useLimitOrderFlow.js.map +1 -1
  477. package/dist/hooks/swap/tradeFlow/useLimitOrderStep.js.map +1 -1
  478. package/dist/hooks/swap/tradeFlow/useMarketFlow.js.map +1 -1
  479. package/dist/hooks/swap/tradeFlow/useMarketSwapStep.js.map +1 -1
  480. package/dist/hooks/swap/tradeFlow/useTwapFlow.js.map +1 -1
  481. package/dist/hooks/swap/tradeFlow/useTwapSwapStep.js.map +1 -1
  482. package/dist/hooks/tokens/allowance/useGenericTokenAllowance.js.map +1 -1
  483. package/dist/hooks/tokens/allowance/useTokenAllowance.js.map +1 -1
  484. package/dist/hooks/tokens/allowance/utils.js.map +1 -1
  485. package/dist/hooks/tokens/balances/queries.js.map +1 -1
  486. package/dist/hooks/tokens/balances/useAttachTokenBalanceMultichain.js.map +1 -1
  487. package/dist/hooks/tokens/balances/useInvalidateTokenData.js.map +1 -1
  488. package/dist/hooks/tokens/balances/useIsInsufficientTokenBalance.js.map +1 -1
  489. package/dist/hooks/tokens/balances/useIsLimitOrderInsufficientBalance.js.map +1 -1
  490. package/dist/hooks/tokens/balances/useMultichainTokenBalances.js.map +1 -1
  491. package/dist/hooks/tokens/balances/useSelectedTokenBalances.js.map +1 -1
  492. package/dist/hooks/tokens/balances/useTokenBalance.js.map +1 -1
  493. package/dist/hooks/tokens/data/useCombineTokensWithFetched.js.map +1 -1
  494. package/dist/hooks/tokens/data/useFetchTokens.js.map +1 -1
  495. package/dist/hooks/tokens/data/useMultichainTokensData.js.map +1 -1
  496. package/dist/hooks/tokens/prices/queries.js.map +1 -1
  497. package/dist/hooks/tokens/prices/useMultichainTokenPrices.js.map +1 -1
  498. package/dist/hooks/tokens/prices/useTokenPrices.js.map +1 -1
  499. package/dist/hooks/tokens/useAllTokensWithFilter.js.map +1 -1
  500. package/dist/hooks/tokens/useNativeToken.js.map +1 -1
  501. package/dist/hooks/tokens/useTokenTaxFee.js.map +1 -1
  502. package/dist/hooks/tokens/useTokensByAddress.js.map +1 -1
  503. package/dist/hooks/tokens/useTokensFromAcross.js.map +1 -1
  504. package/dist/hooks/txs/mutations/useApprove.js.map +1 -1
  505. package/dist/hooks/txs/mutations/useDepositWeth.js.map +1 -1
  506. package/dist/hooks/txs/mutations/useReplaceTx.js.map +1 -1
  507. package/dist/hooks/txs/mutations/useSendTx.js.map +1 -1
  508. package/dist/hooks/txs/queries/useAccountNonce.js.map +1 -1
  509. package/dist/hooks/txs/queries/useAwaitTx.js.map +1 -1
  510. package/dist/hooks/txs/queries/useTxFees.js.map +1 -1
  511. package/dist/hooks/txs/queries/useTxHistory.js.map +1 -1
  512. package/dist/hooks/txs/queries/useTxResponse.js.map +1 -1
  513. package/dist/hooks/txs/queries/useWalletCanReplaceTx.js.map +1 -1
  514. package/dist/hooks/txs/queries/utils.js.map +1 -1
  515. package/dist/hooks/useAvailableCrosses.js.map +1 -1
  516. package/dist/hooks/useBreakpoints.js.map +1 -1
  517. package/dist/hooks/useBridgeInfo.js.map +1 -1
  518. package/dist/hooks/useBridgeProtocols.js.map +1 -1
  519. package/dist/hooks/useCachedQueryError.js.map +1 -1
  520. package/dist/hooks/useChainMatches.js.map +1 -1
  521. package/dist/hooks/useClickOutside.js.map +1 -1
  522. package/dist/hooks/useCurrentChain.js.map +1 -1
  523. package/dist/hooks/useDebouncedInputState.js.map +1 -1
  524. package/dist/hooks/useEIP1559Enabled.js.map +1 -1
  525. package/dist/hooks/useGlobalDeltaEnabled.js.map +1 -1
  526. package/dist/hooks/useIsCrosschainPossible.js.map +1 -1
  527. package/dist/hooks/useMinViemClient.js.map +1 -1
  528. package/dist/hooks/useSDK.js.map +1 -1
  529. package/dist/hooks/useSelectableDestChains.js.map +1 -1
  530. package/dist/hooks/useSlippage.js.map +1 -1
  531. package/dist/hooks/useSwitchChainWithGuard.js.map +1 -1
  532. package/dist/lib/constants/urls.js.map +1 -1
  533. package/dist/lib/ipfs.js.map +1 -1
  534. package/dist/lib/queryClient.js.map +1 -1
  535. package/dist/lib/tradeMode.d.ts +1 -0
  536. package/dist/lib/tradeMode.d.ts.map +1 -1
  537. package/dist/lib/tradeMode.js +4 -1
  538. package/dist/lib/tradeMode.js.map +1 -1
  539. package/dist/lib/utils/approval.js.map +1 -1
  540. package/dist/lib/utils/atomWithCompare.js.map +1 -1
  541. package/dist/lib/utils/copyToClipboard.js.map +1 -1
  542. package/dist/lib/utils/delta.js.map +1 -1
  543. package/dist/lib/utils/dexes.js.map +1 -1
  544. package/dist/lib/utils/explorer.js.map +1 -1
  545. package/dist/lib/utils/fee.js.map +1 -1
  546. package/dist/lib/utils/formatFiatPrice.js.map +1 -1
  547. package/dist/lib/utils/formatPercent.js.map +1 -1
  548. package/dist/lib/utils/formatTokenBalance.js.map +1 -1
  549. package/dist/lib/utils/index.js.map +1 -1
  550. package/dist/lib/utils/logger.js.map +1 -1
  551. package/dist/lib/utils/metabase.js.map +1 -1
  552. package/dist/lib/utils/mobile.js.map +1 -1
  553. package/dist/lib/utils/price.js.map +1 -1
  554. package/dist/lib/utils/priceImpact.js.map +1 -1
  555. package/dist/lib/utils/providerErrors.js.map +1 -1
  556. package/dist/lib/utils/rate.js.map +1 -1
  557. package/dist/lib/utils/removeZeroDecimals.js.map +1 -1
  558. package/dist/lib/utils/savedAmountUSD.js.map +1 -1
  559. package/dist/lib/utils/scaleFactor.js.map +1 -1
  560. package/dist/lib/utils/slippage.js.map +1 -1
  561. package/dist/lib/utils/time.js.map +1 -1
  562. package/dist/lib/utils/toDecimal.js.map +1 -1
  563. package/dist/lib/utils/toasts.js.map +1 -1
  564. package/dist/lib/utils/tradeFlow.js.map +1 -1
  565. package/dist/lib/utils/transactionHandlers.js.map +1 -1
  566. package/dist/lib/utils/tuple.js.map +1 -1
  567. package/dist/lib/utils/twap.js.map +1 -1
  568. package/dist/lib/utils/useDateNow.js.map +1 -1
  569. package/dist/lib/web3/wagmi/config.d.ts +0 -18
  570. package/dist/lib/web3/wagmi/config.d.ts.map +1 -1
  571. package/dist/lib/web3/wagmi/config.js +19 -6
  572. package/dist/lib/web3/wagmi/config.js.map +1 -1
  573. package/dist/lib/web3/wagmi/external.js.map +1 -1
  574. package/dist/lib/web3/wagmi/isInsideSafeIframe.js.map +1 -1
  575. package/dist/lib/web3/wagmi/switchChain.js.map +1 -1
  576. package/dist/lib/web3/wagmi/utils.js.map +1 -1
  577. package/dist/styles.css +1 -1
  578. package/dist/tokens/blacklist.js.map +1 -1
  579. package/dist/tokens/constructor.js.map +1 -1
  580. package/dist/tokens/defaultTokens.js.map +1 -1
  581. package/dist/tokens/hooks.js.map +1 -1
  582. package/dist/tokens/lists/constants.js.map +1 -1
  583. package/dist/tokens/lists/download.js.map +1 -1
  584. package/dist/tokens/lists/state/effects.js.map +1 -1
  585. package/dist/tokens/lists/state/tokenListsActionsAtom.js.map +1 -1
  586. package/dist/tokens/lists/state/tokenListsStateAtom.js.map +1 -1
  587. package/dist/tokens/overrides.js.map +1 -1
  588. package/dist/tokens/queries.js.map +1 -1
  589. package/dist/tokens/stabeCoins/hooks.js.map +1 -1
  590. package/dist/tokens/stabeCoins/index.js.map +1 -1
  591. package/dist/tokens/state/addImportedTokenAtom.js.map +1 -1
  592. package/dist/tokens/state/allTokensByChainAtom.js.map +1 -1
  593. package/dist/tokens/state/constructTokens.js.map +1 -1
  594. package/dist/tokens/state/fromListsAtom.js.map +1 -1
  595. package/dist/tokens/utils/areTokensSame.js.map +1 -1
  596. package/dist/tokens/utils/brand.js.map +1 -1
  597. package/dist/tokens/utils/eth.js.map +1 -1
  598. package/dist/tokens/utils/filtering.js.map +1 -1
  599. package/dist/tokens/utils/sets.js.map +1 -1
  600. package/dist/tokens/utils/sorting.js.map +1 -1
  601. package/dist/tokens/utils/transferAmountsFromReceipt.js.map +1 -1
  602. package/dist/transactions/hash.js.map +1 -1
  603. package/dist/transactions/queries/ensureCallsStatus.js.map +1 -1
  604. package/dist/transactions/queries/ensureEstimateFeesPerGas.js.map +1 -1
  605. package/dist/transactions/queries/ensureTxReceipt.js.map +1 -1
  606. package/dist/transactions/queries/ensureTxResponse.js.map +1 -1
  607. package/dist/transactions/state/effects/finalize.js.map +1 -1
  608. package/dist/transactions/state/hooks/useActivateEffects.js.map +1 -1
  609. package/dist/transactions/state/hooks/useMarkTxAsDropped.js.map +1 -1
  610. package/dist/transactions/state/hooks/useTransactions.js.map +1 -1
  611. package/dist/transactions/state/transactionsActionAtom.js.map +1 -1
  612. package/dist/transactions/state/transactionsAtom.js.map +1 -1
  613. package/dist/transactions/status.js.map +1 -1
  614. package/dist/transactions/utils.js.map +1 -1
  615. package/package.json +6 -6
@@ -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":";AA0CA,IAAM4B,IAAa;CAEjBjB,SAAS;CAGTkB,QAAQ;CACRC,QAAQ;CACRC,SAAS;CACTC,MAAM;CACNC,WAAW;CACXC,QAAQ;CACRC,OAAO;CACPC,UAAU;CACVC,QAAQ;CACRC,QAAQ;CAGRlC,OAAO;CACPmC,SAAS;CACTvB,SAAS;CAGTwB,UAAU;EACRvC,KAAK;EACLE,MAAM;EACNC,OAAO;EACPC,MAAM;EACR;CACD,EAGKqC,KAAQ,GAAGxC,MAAoB,IAK/ByC,IAA6B;CACjC1C,KAAKyC;CACLvC,MAAMuC;CACNtC,OAAOsC;CACPrC,MAAMqC;CACN1B,SAAS0B;CACTzB,OAAOyB;CACPxB,OAAOwB;CACPrB,OAAOqB;CACPnB,gBAAgBmB;CAChBlB,UAAUkB;CACV3B,MAAM;EACJd,KAAKyC;EACLvC,MAAMuC;EACNtC,OAAOsC;EACPrC,MAAMqC;EACNnC,OAAOmC;EACPlC,sBAAsByB,KAAAA;EACxB;CACD,EAEYW,UAA0CD,GAE1CE,IAAgCC;AAK7C,SAASC,EAAcC,GAGrB;AACA,KAAIA,MAAU,KACZ,QAAO;EAAEC,OAAOrB,EAAWI;EAAMkB,cAAc;EAAQ;AAGzD,KAAIF,MAAUf,KAAAA,EACZ,QAAO;EAAEgB,OAAOrB,EAAWK;EAAWiB,cAAc;EAAa;AAKnE,SAFa,OAAOF,GAEpB;EACE,KAAK,SACH,QAAO;GAAEC,OAAOrB,EAAWC;GAAQqB,cAAc,IAAIF,EAAK;GAAK;EAEjE,KAAK,SACH,QAAO;GAAEC,OAAOrB,EAAWE;GAAQoB,cAAcE,OAAOJ,EAAK;GAAG;EAElE,KAAK,UACH,QAAO;GAAEC,OAAOrB,EAAWG;GAASmB,cAAcE,OAAOJ,EAAK;GAAG;EAEnE,KAAK,SACH,QAAO;GAAEC,OAAOrB,EAAWS;GAAQa,cAAc,GAAGF,EAAK;GAAK;EAEhE,KAAK,SACH,QAAO;GAAEC,OAAOrB,EAAWU;GAAQY,cAAcE,OAAOJ,EAAK;GAAG;EAElE,KAAK,WACH,QAAO;GACLC,OAAOrB,EAAWQ;GAClBc,cAAc,cAAeF,EAA4BK,QAAQ,YAAW;GAC7E;EAEH,KAAK,SAOH,QANIC,MAAMC,QAAQP,EAAM,GACf;GACLC,OAAOrB,EAAWO;GAClBe,cAAc,IAAIF,EAAMQ,OAAM;GAC/B,GAEI;GACLP,OAAOrB,EAAWM;GAClBgB,cAAc,IAAIO,OAAOC,KAAKV,EAAgB,CAACQ,OAAM;GACtD;EAEH,QACE,QAAO;GAAEP,OAAO;GAAIC,cAAcE,OAAOJ,EAAK;GAAG;;;AAOvD,SAASW,EACPzD,GACAS,GACAc,IAAiB,IACN;CACX,IAAImC,IAAU,IACRC,IAAmB,EAAE,EACrBC,IAA0B,EAAE;AA4ChC,QAzCEnD,MACEc,KACFmC,KAAW,KAAKjD,EAAO,KACvBkD,EAAOE,KAAKnC,EAAWjB,QAAQ,IAE/BiD,KAAW,GAAGjD,EAAO,MAIzBT,EAAK8D,SAASC,MAAQ;EACpB,IAAMd,IAAO,OAAOc;AAMpB,OAJGd,MAAS,YAAYc,MAAQ,QAASd,MAAS,gBAM/CG,MAAMC,QAAQU,EAAI,IACjBR,OAAOU,UAAUC,SAASC,KAAKJ,EAAI,KAAK,mBAI1CH,CADIF,EAAQJ,SAAS,MAAGI,KAAW,MACnCE,EAAaC,KAAKE,EAAI;OACjB;GACL,IAAM,EAAEhB,UAAOC,oBAAiBH,EAAckB,EAAI;AAClD,GAAIxC,KACFmC,KAAW,GAAGA,EAAQJ,SAAS,IAAI,MAAM,GAAE,IAAKN,KAChDW,EAAOE,KAAKd,EAAM,IAElBW,KAAW,GAAGA,EAAQJ,SAAS,IAAI,MAAM,KAAKN;;GAGlD,EAGE,CAACU,KAAWE,EAAaN,SAAeM,IAExCrC,IACK;EAACmC;EAAS,GAAGC;EAAQ,GAAGC;EAAa,GAErC,CAACF,GAAS,GAAGE,EAAa;;AAUrC,SAAShB,EACPnC,GACAC,GACgB;CAChB,IAAMa,IAAQb,GAASa,UAAU,IAC3BE,IAAOf,GAASe,eAAe,KAG/B4C,IAAyD;EAC7DtE,KAAKgC,KAAAA;EACL9B,MAAM8B,KAAAA;EACN7B,OAAO6B,KAAAA;EACP5B,MAAM4B,KAAAA;EACP,EAEKwC,KAAiB,GAAGvE,MACjByD,EAAqBzD,GAAMS,GAASc,EAAM,EAG7CiD,KAAgBC,GAAc3B,MAC9B,OAAOA,KAAU,WACZA,EAAMoB,UAAU,GAErB,OAAOpB,KAAU,aACZ,eAEFA,GAGH4B,KAAWnE,GAAqB,GAAGP,MAA0B;AACjE,MAAI,CAACyB,GAAM,CACT;EAGF,IAAMiC,IAAU1D,EACb2E,KAAKC,MAAQC,KAAKC,UAAUF,GAAKJ,EAAa,CAAC,CAC/CO,KAAK,IAAI;AAEZ,MAAIrB,MAAYW,EAAa9D,GAC3B;AAGF8D,IAAa9D,KAASmD;EAEtB,IAAMsB,IAAgBT,EAAc,GAAGvE,EAAK;AAO5C,UALIU,GAASc,iBAAiB,MAG5ByD,QAAQC,MAAM,cAAc,EAEtB3E,GAAR;GACE,KAAK;AACH0E,YAAQhF,KAAK,GAAG+E,EAAc;AAC9B;GACF,KAAK;AACHC,YAAQ/E,MAAM,GAAG8E,EAAc;AAC/B;GACF,KAAK;AACHC,YAAQ9E,KAAK,GAAG6E,EAAc;AAC9B;GACF,QACEC,SAAQlF,IAAI,GAAGiF,EAAc;;IAI7BG,IAAyB;EAC7BpF,MAAM,GAAGC,MAAS0E,EAAQ,OAAO,GAAG1E,EAAK;EACzCC,OAAO,GAAGD,MAAS0E,EAAQ,QAAQ,GAAG1E,EAAK;EAC3CE,QAAQ,GAAGF,MAAS0E,EAAQ,SAAS,GAAG1E,EAAK;EAC7CG,OAAO,GAAGH,MAAS0E,EAAQ,QAAQ,GAAG1E,EAAK;EAC3CK,aAAa;AAIXgE,GAHAA,EAAatE,MAAMgC,KAAAA,GACnBsC,EAAapE,OAAO8B,KAAAA,GACpBsC,EAAanE,QAAQ6B,KAAAA,GACrBsC,EAAalE,OAAO4B,KAAAA;;EAEtBzB,iBAAiBC,IAAsB,UAC9B8D,EAAa9D;EAEvB,EAIKR,KAAOQ,GAAiB,GAAGP,MAAoB;AAC9CyB,SAAM,CAGX,SAAQlB,GAAR;GACE,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;AACH0E,YAAQ1E,GAAO,GAAGgE,EAAc,GAAGvE,EAAK,CAAC;AACzC;GACF,KAAK,WAAW;IACd,IAAMsF,IAAc;KAClB;KACA5D,EAAWZ;KACX,GAAGyD,EAAc,GAAGvE,EAAK;KAC1B;AACDiF,YAAQlF,IAAI,GAAGuF,EAAY;AAC3B;;GAEF,KAAK,SAAS;IACZ,IAAMrE,IAAOjB,EAAK,IACZkB,IAAalB,EAAK;AACxB,IAAIS,KACFwE,QAAQ9D,MAAM,KAAKV,EAAO,KAAMiB,EAAWjB,QAAQ,EACnDwE,QAAQjE,MAAMC,GAAMC,EAAW,EAC/B+D,QAAQ3D,UAAU,IAElB2D,QAAQjE,MAAMC,GAAMC,EAAW;AAEjC;;GAEF,KAAK;GACL,KAAK,kBAAkB;IACrB,IAAME,IAAQpB,EAAK;AACnB,IAAIS,IACFwE,QAAQ1E,GAAO,KAAKE,EAAO,KAAMW,KAASM,EAAWjB,QAAQ,GAE7DwE,QAAQ1E,GAAOa,EAAM;AAEvB;;GAEF,KAAK;AACH6D,YAAQ3D,UAAU;AAClB;;;AAKN,QAAO;EACLvB,MAAM,GAAGC,MAAoBD,EAAI,OAAO,GAAGC,EAAK;EAChDC,OAAO,GAAGD,MAAoBD,EAAI,QAAQ,GAAGC,EAAK;EAClDE,QAAQ,GAAGF,MAAoBD,EAAI,SAAS,GAAGC,EAAK;EACpDG,OAAO,GAAGH,MAAoBD,EAAI,QAAQ,GAAGC,EAAK;EAClDc,UAAU,GAAGd,MAAoB;AAC/BD,KAAI,WAAW,GAAGC,EAAK;;EAEzBe,QAAQ,GAAGf,MAAoB;AAC7BD,KAAI,SAAS,GAAGC,EAAK;;EAEvBgB,QAAQC,GAAeC,MAA0B;AAC/CnB,KAAI,SAASkB,GAAMC,EAAW;;EAEhCC,QAAQC,MAAkB;AACxBrB,KAAI,SAASqB,EAAM;;EAErBC,iBAAiBD,MAAkB;AACjCrB,KAAI,kBAAkBqB,EAAM;;EAE9BE,gBAAgB;AACdvB,KAAI,WAAW;;EAEjBc,MAAMsE;EACP"}
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 +1 @@
1
- {"version":3,"file":"metabase.js","names":["isNonNullableEntry","VarType2ValType","category","T","ValType2MetaVarType","MetaVarType","MetaParam","type","VarType","value","target","ParamEntry","varType","MetaParams","K","ParamValue","Params","Record","TValue","ParamsToMetaParamsObject","P","ArrayOfMetaParams","MetabaseResponse","data","rows","Rows","database_id","started_at","Date","json_query","average_execution_time","status","context","row_count","running_time","constructMetaParams","params","Res","truthy","NonNullable","Object","fromEntries","entries","filter","metaParams","reduce","acc","key","metaParam","toLowerCase","push","toString"],"sources":["../../../src/lib/utils/metabase.ts"],"sourcesContent":["import { isNonNullableEntry } from \"@/lib/utils\";\n\ninterface VarType2ValType<T> {\n category: T;\n \"number/=\": [T];\n}\n\ntype ValType2MetaVarType<T> = T extends string\n ? \"category\"\n : T extends number\n ? \"number/=\"\n : never;\n\ntype MetaVarType = \"category\" | \"number/=\";\n\ninterface MetaParam<T extends string, VarType extends MetaVarType> {\n type: VarType;\n value: VarType2ValType<string>[VarType];\n target: [\"variable\", [\"template-tag\", T]];\n}\n\ninterface ParamEntry {\n value: string;\n varType: MetaVarType;\n}\ntype MetaParams<\n T extends {\n value: string;\n varType: MetaVarType;\n }[],\n> = {\n [K in keyof T]: T[K] extends ParamEntry\n ? MetaParam<T[K][\"value\"], T[K][\"varType\"]>\n : never;\n};\ntype ParamValue = string | number | undefined;\n\ntype Params<TValue = ParamValue> = Record<string, TValue>;\n\ntype ParamsToMetaParamsObject<P extends Params> = {\n [K in keyof P]: K extends string\n ? MetaParam<K, ValType2MetaVarType<P[K]>>\n : never;\n};\n\ntype ArrayOfMetaParams<P extends ParamsToMetaParamsObject<Params>> =\n P[keyof P][];\n\nexport interface MetabaseResponse<Rows> {\n data: {\n rows: Rows[];\n };\n database_id: number;\n started_at: Date;\n json_query: unknown;\n average_execution_time: null;\n status: string;\n context: string;\n row_count: number;\n running_time: number;\n}\n\n/* const SwapTxParams = [\n {\n type: \"category\",\n value: \"0x7805cad44a0e58270c666e8b932c315457b0042b\",\n target: [\"variable\", [\"template-tag\", \"account\"]],\n },\n]; */\nexport function constructMetaParams<P extends Params>(\n params: P\n): ArrayOfMetaParams<ParamsToMetaParamsObject<P>> {\n type Res = ArrayOfMetaParams<ParamsToMetaParamsObject<P>>;\n\n // Filter out falsy parameters\n const truthy: Params<NonNullable<ParamValue>> = Object.fromEntries(\n Object.entries(params).filter(isNonNullableEntry)\n );\n\n const metaParams = Object.entries(truthy).reduce<\n MetaParams<{ value: string; varType: MetaVarType }[]>\n >((acc, [key, value]) => {\n if (typeof value === \"string\") {\n const metaParam: MetaParam<string, \"category\"> = {\n type: \"category\",\n value: value.toLowerCase(),\n target: [\"variable\", [\"template-tag\", key]],\n };\n\n acc.push(metaParam);\n } else {\n const metaParam: MetaParam<string, \"number/=\"> = {\n type: \"number/=\",\n value: [value.toString()],\n target: [\"variable\", [\"template-tag\", key]],\n };\n\n acc.push(metaParam);\n }\n\n return acc;\n }, []);\n\n return metaParams as Res;\n}\n"],"mappings":";;AAqEA,SAAgBmC,EACdC,GACgD;CAIhD,IAAME,IAA0CE,OAAOC,YACrDD,OAAOE,QAAQN,EAAO,CAACO,OAAO3C,EAChC,CAAC;AA0BD,QAxBmBwC,OAAOE,QAAQJ,EAAO,CAACO,QAEvCC,GAAK,CAACC,GAAKtC,OAAW;AACvB,MAAI,OAAOA,KAAU,UAAU;GAC7B,IAAMuC,IAA2C;IAC/CzC,MAAM;IACNE,OAAOA,EAAMwC,aAAa;IAC1BvC,QAAQ,CAAC,YAAY,CAAC,gBAAgBqC,EAAI,CAAA;IAC3C;AAEDD,KAAII,KAAKF,EAAU;SACd;GACL,IAAMA,IAA2C;IAC/CzC,MAAM;IACNE,OAAO,CAACA,EAAM0C,UAAU,CAAC;IACzBzC,QAAQ,CAAC,YAAY,CAAC,gBAAgBqC,EAAI,CAAA;IAC3C;AAEDD,KAAII,KAAKF,EAAU;;AAGrB,SAAOF;IACN,EAAE,CAAC"}
1
+ {"version":3,"file":"metabase.js","names":["isNonNullableEntry","VarType2ValType","category","T","ValType2MetaVarType","MetaVarType","MetaParam","type","VarType","value","target","ParamEntry","varType","MetaParams","K","ParamValue","Params","Record","TValue","ParamsToMetaParamsObject","P","ArrayOfMetaParams","MetabaseResponse","data","rows","Rows","database_id","started_at","Date","json_query","average_execution_time","status","context","row_count","running_time","constructMetaParams","params","Res","truthy","NonNullable","Object","fromEntries","entries","filter","metaParams","reduce","acc","key","metaParam","toLowerCase","push","toString"],"sources":["../../../src/lib/utils/metabase.ts"],"sourcesContent":["import { isNonNullableEntry } from \"@/lib/utils\";\n\ninterface VarType2ValType<T> {\n category: T;\n \"number/=\": [T];\n}\n\ntype ValType2MetaVarType<T> = T extends string\n ? \"category\"\n : T extends number\n ? \"number/=\"\n : never;\n\ntype MetaVarType = \"category\" | \"number/=\";\n\ninterface MetaParam<T extends string, VarType extends MetaVarType> {\n type: VarType;\n value: VarType2ValType<string>[VarType];\n target: [\"variable\", [\"template-tag\", T]];\n}\n\ninterface ParamEntry {\n value: string;\n varType: MetaVarType;\n}\ntype MetaParams<\n T extends {\n value: string;\n varType: MetaVarType;\n }[],\n> = {\n [K in keyof T]: T[K] extends ParamEntry\n ? MetaParam<T[K][\"value\"], T[K][\"varType\"]>\n : never;\n};\ntype ParamValue = string | number | undefined;\n\ntype Params<TValue = ParamValue> = Record<string, TValue>;\n\ntype ParamsToMetaParamsObject<P extends Params> = {\n [K in keyof P]: K extends string\n ? MetaParam<K, ValType2MetaVarType<P[K]>>\n : never;\n};\n\ntype ArrayOfMetaParams<P extends ParamsToMetaParamsObject<Params>> =\n P[keyof P][];\n\nexport interface MetabaseResponse<Rows> {\n data: {\n rows: Rows[];\n };\n database_id: number;\n started_at: Date;\n json_query: unknown;\n average_execution_time: null;\n status: string;\n context: string;\n row_count: number;\n running_time: number;\n}\n\n/* const SwapTxParams = [\n {\n type: \"category\",\n value: \"0x7805cad44a0e58270c666e8b932c315457b0042b\",\n target: [\"variable\", [\"template-tag\", \"account\"]],\n },\n]; */\nexport function constructMetaParams<P extends Params>(\n params: P\n): ArrayOfMetaParams<ParamsToMetaParamsObject<P>> {\n type Res = ArrayOfMetaParams<ParamsToMetaParamsObject<P>>;\n\n // Filter out falsy parameters\n const truthy: Params<NonNullable<ParamValue>> = Object.fromEntries(\n Object.entries(params).filter(isNonNullableEntry)\n );\n\n const metaParams = Object.entries(truthy).reduce<\n MetaParams<{ value: string; varType: MetaVarType }[]>\n >((acc, [key, value]) => {\n if (typeof value === \"string\") {\n const metaParam: MetaParam<string, \"category\"> = {\n type: \"category\",\n value: value.toLowerCase(),\n target: [\"variable\", [\"template-tag\", key]],\n };\n\n acc.push(metaParam);\n } else {\n const metaParam: MetaParam<string, \"number/=\"> = {\n type: \"number/=\",\n value: [value.toString()],\n target: [\"variable\", [\"template-tag\", key]],\n };\n\n acc.push(metaParam);\n }\n\n return acc;\n }, []);\n\n return metaParams as Res;\n}\n"],"mappings":";;AAqEA,SAAgBmC,EACdC,GACgD;CAIhD,IAAME,IAA0CE,OAAOC,YACrDD,OAAOE,QAAQN,EAAO,CAACO,OAAO3C,EAChC,CAAC;CA0BD,OAxBmBwC,OAAOE,QAAQJ,EAAO,CAACO,QAEvCC,GAAK,CAACC,GAAKtC,OAAW;EACvB,IAAI,OAAOA,KAAU,UAAU;GAC7B,IAAMuC,IAA2C;IAC/CzC,MAAM;IACNE,OAAOA,EAAMwC,aAAa;IAC1BvC,QAAQ,CAAC,YAAY,CAAC,gBAAgBqC,EAAI,CAAA;IAC3C;GAEDD,EAAII,KAAKF,EAAU;SACd;GACL,IAAMA,IAA2C;IAC/CzC,MAAM;IACNE,OAAO,CAACA,EAAM0C,UAAU,CAAC;IACzBzC,QAAQ,CAAC,YAAY,CAAC,gBAAgBqC,EAAI,CAAA;IAC3C;GAEDD,EAAII,KAAKF,EAAU;;EAGrB,OAAOF;IACN,EAAE,CAEEF"}
@@ -1 +1 @@
1
- {"version":3,"file":"mobile.js","names":["mobile","isMobileDevice","tablet"],"sources":["../../../src/lib/utils/mobile.ts"],"sourcesContent":["import mobile from \"is-mobile\";\n\n/**\n * Check if the device is mobile or tablet. The detection is based on the navigator.userAgent property.\n * @returns True if the device is mobile or tablet, false otherwise.\n */\nexport function isMobileDevice() {\n return mobile({ tablet: true });\n}\n"],"mappings":";;AAMA,SAAgBC,IAAiB;AAC/B,QAAOD,EAAO,EAAEE,QAAQ,IAAM,CAAC"}
1
+ {"version":3,"file":"mobile.js","names":["mobile","isMobileDevice","tablet"],"sources":["../../../src/lib/utils/mobile.ts"],"sourcesContent":["import mobile from \"is-mobile\";\n\n/**\n * Check if the device is mobile or tablet. The detection is based on the navigator.userAgent property.\n * @returns True if the device is mobile or tablet, false otherwise.\n */\nexport function isMobileDevice() {\n return mobile({ tablet: true });\n}\n"],"mappings":";;AAMA,SAAgBC,IAAiB;CAC/B,OAAOD,EAAO,EAAEE,QAAQ,IAAM,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"price.js","names":["DeltaOrMarketPrice","amountAfterSlippage","subtractSlippage","subtractFee","Big","isDeltaPrice","applySlippage","srcAmount","destAmount","Pick","slippage","side","srcAmountAfterSlippage","toFixed","destAmountAfterSlippage","getDestAmountAfterFee","price","receivedDestAmount","partnerFee","getDestAmountAfterFeeAndSlippage","slippagePercent","destAmountAfterFee","getPercentDifference","a","b","minus","div","mul","toNumber"],"sources":["../../../src/lib/utils/price.ts"],"sourcesContent":["import type { DeltaOrMarketPrice } from \"@/hooks/swap/prices/types\";\nimport { amountAfterSlippage, subtractSlippage } from \"./slippage\";\nimport { subtractFee } from \"./fee\";\nimport Big from \"big.js\";\nimport { isDeltaPrice } from \"@/hooks/swap/prices/delta/queries/useDeltaPriceQuery\";\n\n/**\n * Applies slippage to the srcAmount and destAmount of a DeltaOrMarketPrice.\n *\n * @param srcAmount - The source amount of the trade.\n * @param destAmount - The destination amount of the trade.\n * @param slippage - The slippage percentage to apply (e.g., 0.5 for 0.5%).\n * @param side - The side of the trade, either \"BUY\" or \"SELL\".\n * @returns An object containing the adjusted srcAmount and destAmount after applying slippage.\n */\nexport function applySlippage(\n {\n srcAmount,\n destAmount,\n }: Pick<DeltaOrMarketPrice, \"srcAmount\" | \"destAmount\">,\n slippage: number,\n side: \"BUY\" | \"SELL\"\n) {\n if (side === \"BUY\") {\n const srcAmountAfterSlippage = amountAfterSlippage(\n srcAmount,\n slippage,\n side\n ).toFixed(0);\n\n return {\n srcAmount: srcAmountAfterSlippage,\n destAmount,\n };\n }\n\n const destAmountAfterSlippage = amountAfterSlippage(\n destAmount,\n slippage,\n side\n ).toFixed(0);\n\n return {\n srcAmount,\n destAmount: destAmountAfterSlippage,\n };\n}\n\n/**\n * Calculates the destination amount after applying partner fee.\n *\n * @param price - The DeltaOrMarketPrice object containing destAmounts and partnerFee.\n * @returns The destination amount after applying partner fee.\n */\nexport function getDestAmountAfterFee(price: DeltaOrMarketPrice) {\n // destAmount has swapFees (and bridgeFees for Crosschain Delta) applied,\n // but not partnerFee\n const destAmount = isDeltaPrice(price)\n ? price.receivedDestAmount\n : price.destAmount;\n\n return subtractFee(destAmount, price.partnerFee);\n}\n\n/**\n * Calculates the destination amount after applying partner fee and slippage.\n *\n * @param price - The DeltaOrMarketPrice object containing destAmounts and partnerFee.\n * @param slippagePercent - The slippage percentage to apply.\n * @param priceMode - The mode of the price, either \"delta\" or \"market\".\n * @returns The destination amount after applying partner fee and slippage.\n */\nexport function getDestAmountAfterFeeAndSlippage({\n price,\n slippagePercent,\n}: {\n price: DeltaOrMarketPrice;\n slippagePercent: number;\n}) {\n const destAmountAfterFee = getDestAmountAfterFee(price);\n return subtractSlippage(destAmountAfterFee, slippagePercent);\n}\n\nexport function getPercentDifference(a: number, b: number) {\n if (b === 0 || a === b) return 0;\n return Big(a).minus(b).div(b).mul(100).toNumber();\n}\n"],"mappings":";;;;;AAeA,SAAgBM,EACd,EACEC,cACAC,iBAEFE,GACAC,GACA;AAoBA,QAnBIA,MAAS,QAOJ;EACLJ,WAP6BN,EAC7BM,GACAG,GACAC,EACD,CAACE,QAAQ,EAAE;EAIVL;EACD,GASI;EACLD;EACAC,YAR8BP,EAC9BO,GACAE,GACAC,EACD,CAACE,QAAQ,EAAE;EAKX;;AASH,SAAgBE,EAAsBC,GAA2B;AAO/D,QAAOb,EAJYE,EAAaW,EAAM,GAClCA,EAAMC,qBACND,EAAMR,YAEqBQ,EAAME,WAAW;;AAWlD,SAAgBC,EAAiC,EAC/CH,UACAI,sBAIC;AAED,QAAOlB,EADoBa,EAAsBC,EAAM,EACXI,EAAgB;;AAG9D,SAAgBE,EAAqBC,GAAWC,GAAW;AAEzD,QADIA,MAAM,KAAKD,MAAMC,IAAU,IACxBpB,EAAImB,EAAE,CAACE,MAAMD,EAAE,CAACE,IAAIF,EAAE,CAACG,IAAI,IAAI,CAACC,UAAU"}
1
+ {"version":3,"file":"price.js","names":["DeltaOrMarketPrice","amountAfterSlippage","subtractSlippage","subtractFee","Big","isDeltaPrice","applySlippage","srcAmount","destAmount","Pick","slippage","side","srcAmountAfterSlippage","toFixed","destAmountAfterSlippage","getDestAmountAfterFee","price","receivedDestAmount","partnerFee","getDestAmountAfterFeeAndSlippage","slippagePercent","destAmountAfterFee","getPercentDifference","a","b","minus","div","mul","toNumber"],"sources":["../../../src/lib/utils/price.ts"],"sourcesContent":["import type { DeltaOrMarketPrice } from \"@/hooks/swap/prices/types\";\nimport { amountAfterSlippage, subtractSlippage } from \"./slippage\";\nimport { subtractFee } from \"./fee\";\nimport Big from \"big.js\";\nimport { isDeltaPrice } from \"@/hooks/swap/prices/delta/queries/useDeltaPriceQuery\";\n\n/**\n * Applies slippage to the srcAmount and destAmount of a DeltaOrMarketPrice.\n *\n * @param srcAmount - The source amount of the trade.\n * @param destAmount - The destination amount of the trade.\n * @param slippage - The slippage percentage to apply (e.g., 0.5 for 0.5%).\n * @param side - The side of the trade, either \"BUY\" or \"SELL\".\n * @returns An object containing the adjusted srcAmount and destAmount after applying slippage.\n */\nexport function applySlippage(\n {\n srcAmount,\n destAmount,\n }: Pick<DeltaOrMarketPrice, \"srcAmount\" | \"destAmount\">,\n slippage: number,\n side: \"BUY\" | \"SELL\"\n) {\n if (side === \"BUY\") {\n const srcAmountAfterSlippage = amountAfterSlippage(\n srcAmount,\n slippage,\n side\n ).toFixed(0);\n\n return {\n srcAmount: srcAmountAfterSlippage,\n destAmount,\n };\n }\n\n const destAmountAfterSlippage = amountAfterSlippage(\n destAmount,\n slippage,\n side\n ).toFixed(0);\n\n return {\n srcAmount,\n destAmount: destAmountAfterSlippage,\n };\n}\n\n/**\n * Calculates the destination amount after applying partner fee.\n *\n * @param price - The DeltaOrMarketPrice object containing destAmounts and partnerFee.\n * @returns The destination amount after applying partner fee.\n */\nexport function getDestAmountAfterFee(price: DeltaOrMarketPrice) {\n // destAmount has swapFees (and bridgeFees for Crosschain Delta) applied,\n // but not partnerFee\n const destAmount = isDeltaPrice(price)\n ? price.receivedDestAmount\n : price.destAmount;\n\n return subtractFee(destAmount, price.partnerFee);\n}\n\n/**\n * Calculates the destination amount after applying partner fee and slippage.\n *\n * @param price - The DeltaOrMarketPrice object containing destAmounts and partnerFee.\n * @param slippagePercent - The slippage percentage to apply.\n * @param priceMode - The mode of the price, either \"delta\" or \"market\".\n * @returns The destination amount after applying partner fee and slippage.\n */\nexport function getDestAmountAfterFeeAndSlippage({\n price,\n slippagePercent,\n}: {\n price: DeltaOrMarketPrice;\n slippagePercent: number;\n}) {\n const destAmountAfterFee = getDestAmountAfterFee(price);\n return subtractSlippage(destAmountAfterFee, slippagePercent);\n}\n\nexport function getPercentDifference(a: number, b: number) {\n if (b === 0 || a === b) return 0;\n return Big(a).minus(b).div(b).mul(100).toNumber();\n}\n"],"mappings":";;;;;AAeA,SAAgBM,EACd,EACEC,cACAC,iBAEFE,GACAC,GACA;CAoBA,OAnBIA,MAAS,QAOJ;EACLJ,WAP6BN,EAC7BM,GACAG,GACAC,EACD,CAACE,QAAQ,EAGGD;EACXJ;EACD,GASI;EACLD;EACAC,YAR8BP,EAC9BO,GACAE,GACAC,EACD,CAACE,QAAQ,EAIIC;EACb;;AASH,SAAgBC,EAAsBC,GAA2B;CAO/D,OAAOb,EAJYE,EAAaW,EAAM,GAClCA,EAAMC,qBACND,EAAMR,YAEqBQ,EAAME,WAAW;;AAWlD,SAAgBC,EAAiC,EAC/CH,UACAI,sBAIC;CAED,OAAOlB,EADoBa,EAAsBC,EACzBK,EAAoBD,EAAgB;;AAG9D,SAAgBE,EAAqBC,GAAWC,GAAW;CAEzD,OADIA,MAAM,KAAKD,MAAMC,IAAU,IACxBpB,EAAImB,EAAE,CAACE,MAAMD,EAAE,CAACE,IAAIF,EAAE,CAACG,IAAI,IAAI,CAACC,UAAU"}
@@ -1 +1 @@
1
- {"version":3,"file":"priceImpact.js","names":["Big","calculatePriceImpactPercent","fromUSD","toUSD","toBN","gte","calculatedImpact","minus","div","times","Math","min","toNumber","PriceImpactResult","priceImpact","isHighImpact","isMediumImpact","isUnavailable","MEDIUM_IMPACT_THRESHOLD","HIGH_IMPACT_THRESHOLD","getPriceImpact","srcUSD","destUSD","impact","undefined","impactAbsoluteValue","abs","gt","formatPriceImpactPercent","toFixed"],"sources":["../../../src/lib/utils/priceImpact.ts"],"sourcesContent":["import Big from \"big.js\";\n\nexport function calculatePriceImpactPercent(\n fromUSD: string,\n toUSD: string\n): Big {\n if (fromUSD === \"0\" || toUSD === \"0\") {\n return new Big(0);\n }\n\n const toBN = Big(toUSD);\n if (toBN.gte(fromUSD)) return Big(0);\n const calculatedImpact = Big(1).minus(toBN.div(fromUSD)).times(100);\n\n return Big(Math.min(calculatedImpact.toNumber(), 100));\n}\n\nexport type PriceImpactResult = {\n /** @description The price impact in percentage (e.g. 0.5 means 0.5%) */\n priceImpact?: number;\n /** @description The impact is above the high threshold (e.g. 5%) */\n isHighImpact: boolean;\n /** @description Medium impact means it's above the medium threshold but below the high threshold */\n isMediumImpact: boolean;\n /** @description Unavailable to calculate due to missing one of the USD prices */\n isUnavailable: boolean;\n};\n\nconst MEDIUM_IMPACT_THRESHOLD = 2; // 2%\nconst HIGH_IMPACT_THRESHOLD = 5; // 5%\n\nexport function getPriceImpact({\n srcUSD,\n destUSD,\n}: {\n srcUSD: string | null;\n destUSD: string | null;\n}): PriceImpactResult {\n const impact =\n // can't calc priceImpact without knowing USD prices of tokens\n srcUSD && destUSD ? calculatePriceImpactPercent(srcUSD, destUSD) : null;\n\n if (impact === null) {\n return {\n priceImpact: undefined,\n isMediumImpact: false,\n isHighImpact: false,\n isUnavailable: true,\n };\n }\n\n const impactAbsoluteValue = impact.abs();\n\n const isMediumImpact = impactAbsoluteValue.gt(MEDIUM_IMPACT_THRESHOLD);\n const isHighImpact = impactAbsoluteValue.gt(HIGH_IMPACT_THRESHOLD);\n\n return {\n priceImpact: impactAbsoluteValue.toNumber(),\n isMediumImpact: isMediumImpact && !isHighImpact,\n isHighImpact,\n isUnavailable: false,\n };\n}\n\nexport function formatPriceImpactPercent(priceImpact: number): `${string}%` {\n return `${priceImpact.toFixed(2)}%`;\n}\n"],"mappings":";;AAEA,SAAgBC,EACdC,GACAC,GACK;AACL,KAAID,MAAY,OAAOC,MAAU,IAC/B,QAAO,IAAIH,EAAI,EAAE;CAGnB,IAAMI,IAAOJ,EAAIG,EAAM;AACvB,KAAIC,EAAKC,IAAIH,EAAQ,CAAE,QAAOF,EAAI,EAAE;CACpC,IAAMM,IAAmBN,EAAI,EAAE,CAACO,MAAMH,EAAKI,IAAIN,EAAQ,CAAC,CAACO,MAAM,IAAI;AAEnE,QAAOT,EAAIU,KAAKC,IAAIL,EAAiBM,UAAU,EAAE,IAAI,CAAC;;AAcxD,IAAMM,IAA0B,GAC1BC,IAAwB;AAE9B,SAAgBC,EAAe,EAC7BC,WACAC,cAIoB;CACpB,IAAMC,IAEJF,KAAUC,IAAUrB,EAA4BoB,GAAQC,EAAQ,GAAG;AAErE,KAAIC,MAAW,KACb,QAAO;EACLT,aAAaU,KAAAA;EACbR,gBAAgB;EAChBD,cAAc;EACdE,eAAe;EAChB;CAGH,IAAMQ,IAAsBF,EAAOG,KAAK,EAElCV,IAAiBS,EAAoBE,GAAGT,EAAwB,EAChEH,IAAeU,EAAoBE,GAAGR,EAAsB;AAElE,QAAO;EACLL,aAAaW,EAAoBb,UAAU;EAC3CI,gBAAgBA,KAAkB,CAACD;EACnCA;EACAE,eAAe;EAChB;;AAGH,SAAgBW,EAAyBd,GAAmC;AAC1E,QAAO,GAAGA,EAAYe,QAAQ,EAAE,CAAA"}
1
+ {"version":3,"file":"priceImpact.js","names":["Big","calculatePriceImpactPercent","fromUSD","toUSD","toBN","gte","calculatedImpact","minus","div","times","Math","min","toNumber","PriceImpactResult","priceImpact","isHighImpact","isMediumImpact","isUnavailable","MEDIUM_IMPACT_THRESHOLD","HIGH_IMPACT_THRESHOLD","getPriceImpact","srcUSD","destUSD","impact","undefined","impactAbsoluteValue","abs","gt","formatPriceImpactPercent","toFixed"],"sources":["../../../src/lib/utils/priceImpact.ts"],"sourcesContent":["import Big from \"big.js\";\n\nexport function calculatePriceImpactPercent(\n fromUSD: string,\n toUSD: string\n): Big {\n if (fromUSD === \"0\" || toUSD === \"0\") {\n return new Big(0);\n }\n\n const toBN = Big(toUSD);\n if (toBN.gte(fromUSD)) return Big(0);\n const calculatedImpact = Big(1).minus(toBN.div(fromUSD)).times(100);\n\n return Big(Math.min(calculatedImpact.toNumber(), 100));\n}\n\nexport type PriceImpactResult = {\n /** @description The price impact in percentage (e.g. 0.5 means 0.5%) */\n priceImpact?: number;\n /** @description The impact is above the high threshold (e.g. 5%) */\n isHighImpact: boolean;\n /** @description Medium impact means it's above the medium threshold but below the high threshold */\n isMediumImpact: boolean;\n /** @description Unavailable to calculate due to missing one of the USD prices */\n isUnavailable: boolean;\n};\n\nconst MEDIUM_IMPACT_THRESHOLD = 2; // 2%\nconst HIGH_IMPACT_THRESHOLD = 5; // 5%\n\nexport function getPriceImpact({\n srcUSD,\n destUSD,\n}: {\n srcUSD: string | null;\n destUSD: string | null;\n}): PriceImpactResult {\n const impact =\n // can't calc priceImpact without knowing USD prices of tokens\n srcUSD && destUSD ? calculatePriceImpactPercent(srcUSD, destUSD) : null;\n\n if (impact === null) {\n return {\n priceImpact: undefined,\n isMediumImpact: false,\n isHighImpact: false,\n isUnavailable: true,\n };\n }\n\n const impactAbsoluteValue = impact.abs();\n\n const isMediumImpact = impactAbsoluteValue.gt(MEDIUM_IMPACT_THRESHOLD);\n const isHighImpact = impactAbsoluteValue.gt(HIGH_IMPACT_THRESHOLD);\n\n return {\n priceImpact: impactAbsoluteValue.toNumber(),\n isMediumImpact: isMediumImpact && !isHighImpact,\n isHighImpact,\n isUnavailable: false,\n };\n}\n\nexport function formatPriceImpactPercent(priceImpact: number): `${string}%` {\n return `${priceImpact.toFixed(2)}%`;\n}\n"],"mappings":";;AAEA,SAAgBC,EACdC,GACAC,GACK;CACL,IAAID,MAAY,OAAOC,MAAU,KAC/B,OAAO,IAAIH,EAAI,EAAE;CAGnB,IAAMI,IAAOJ,EAAIG,EAAM;CACvB,IAAIC,EAAKC,IAAIH,EAAQ,EAAE,OAAOF,EAAI,EAAE;CACpC,IAAMM,IAAmBN,EAAI,EAAE,CAACO,MAAMH,EAAKI,IAAIN,EAAQ,CAAC,CAACO,MAAM,IAAI;CAEnE,OAAOT,EAAIU,KAAKC,IAAIL,EAAiBM,UAAU,EAAE,IAAI,CAAC;;AAcxD,IAAMM,IAA0B,GAC1BC,IAAwB;AAE9B,SAAgBC,EAAe,EAC7BC,WACAC,cAIoB;CACpB,IAAMC,IAEJF,KAAUC,IAAUrB,EAA4BoB,GAAQC,EAAQ,GAAG;CAErE,IAAIC,MAAW,MACb,OAAO;EACLT,aAAaU,KAAAA;EACbR,gBAAgB;EAChBD,cAAc;EACdE,eAAe;EAChB;CAGH,IAAMQ,IAAsBF,EAAOG,KAAK,EAElCV,IAAiBS,EAAoBE,GAAGT,EAAwB,EAChEH,IAAeU,EAAoBE,GAAGR,EAAsB;CAElE,OAAO;EACLL,aAAaW,EAAoBb,UAAU;EAC3CI,gBAAgBA,KAAkB,CAACD;EACnCA;EACAE,eAAe;EAChB;;AAGH,SAAgBW,EAAyBd,GAAmC;CAC1E,OAAO,GAAGA,EAAYe,QAAQ,EAAE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"providerErrors.js","names":["getProviderErrorMessage","error","message","toString","getErrorCode","code","PROVIDER_REJECT_REQUEST_CODES","PROVIDER_REJECT_REQUEST_ERROR_MESSAGES","isRejectRequestProviderError","errorCode","includes","some","rejectMessage","toLowerCase"],"sources":["../../../src/lib/utils/providerErrors.ts"],"sourcesContent":["/**\n * Convenient method to get the error message from the error raised by a provider.\n */\nexport function getProviderErrorMessage(error: unknown): string | undefined {\n if (typeof error === \"string\") return error;\n if (error && typeof error === \"object\" && \"message\" in error)\n return error.message as string;\n return error?.toString();\n}\n\nexport function getErrorCode(error: unknown): number | undefined {\n if (error && typeof error === \"object\" && \"code\" in error) {\n const code = error.code;\n if (typeof code === \"number\") return code;\n }\n}\n\nconst PROVIDER_REJECT_REQUEST_CODES = [4001, -32000]; // See https://eips.ethereum.org/EIPS/eip-1193\n\nconst PROVIDER_REJECT_REQUEST_ERROR_MESSAGES = [\n \"User denied message signature\",\n \"User rejected\",\n \"User denied\",\n \"rejected transaction\",\n \"Transaction was rejected\",\n];\n\n/**\n *\n * @param error Optional error object return by a provider.\n * @returns true if the user rejected the request in their wallet\n */\n\nexport function isRejectRequestProviderError(error: unknown) {\n if (error) {\n // check the error code is the user rejection as described in eip-1193\n const errorCode = getErrorCode(error);\n if (errorCode && PROVIDER_REJECT_REQUEST_CODES.includes(errorCode)) {\n return true;\n }\n\n // check for some specific messages returned by some wallets when rejecting requests\n const message = getProviderErrorMessage(error);\n if (\n PROVIDER_REJECT_REQUEST_ERROR_MESSAGES.some(\n (rejectMessage) =>\n message &&\n rejectMessage &&\n message.toLowerCase().includes(rejectMessage.toLowerCase())\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n"],"mappings":";AAGA,SAAgBA,EAAwBC,GAAoC;AAI1E,QAHI,OAAOA,KAAU,WAAiBA,IAClCA,KAAS,OAAOA,KAAU,YAAY,aAAaA,IAC9CA,EAAMC,UACRD,GAAOE,UAAU;;AAG1B,SAAgBC,EAAaH,GAAoC;AAC/D,KAAIA,KAAS,OAAOA,KAAU,YAAY,UAAUA,GAAO;EACzD,IAAMI,IAAOJ,EAAMI;AACnB,MAAI,OAAOA,KAAS,SAAU,QAAOA;;;AAIzC,IAAMC,IAAgC,CAAC,MAAM,MAAO,EAE9CC,IAAyC;CAC7C;CACA;CACA;CACA;CACA;CACD;AAQD,SAAgBC,EAA6BP,GAAgB;AAC3D,KAAIA,GAAO;EAET,IAAMQ,IAAYL,EAAaH,EAAM;AACrC,MAAIQ,KAAaH,EAA8BI,SAASD,EAAU,CAChE,QAAO;EAIT,IAAMP,IAAUF,EAAwBC,EAAM;AAC9C,MACEM,EAAuCI,MACpCC,MACCV,KACAU,KACAV,EAAQW,aAAa,CAACH,SAASE,EAAcC,aAAa,CAC9D,CAAC,CAED,QAAO;;AAIX,QAAO"}
1
+ {"version":3,"file":"providerErrors.js","names":["getProviderErrorMessage","error","message","toString","getErrorCode","code","PROVIDER_REJECT_REQUEST_CODES","PROVIDER_REJECT_REQUEST_ERROR_MESSAGES","isRejectRequestProviderError","errorCode","includes","some","rejectMessage","toLowerCase"],"sources":["../../../src/lib/utils/providerErrors.ts"],"sourcesContent":["/**\n * Convenient method to get the error message from the error raised by a provider.\n */\nexport function getProviderErrorMessage(error: unknown): string | undefined {\n if (typeof error === \"string\") return error;\n if (error && typeof error === \"object\" && \"message\" in error)\n return error.message as string;\n return error?.toString();\n}\n\nexport function getErrorCode(error: unknown): number | undefined {\n if (error && typeof error === \"object\" && \"code\" in error) {\n const code = error.code;\n if (typeof code === \"number\") return code;\n }\n}\n\nconst PROVIDER_REJECT_REQUEST_CODES = [4001, -32000]; // See https://eips.ethereum.org/EIPS/eip-1193\n\nconst PROVIDER_REJECT_REQUEST_ERROR_MESSAGES = [\n \"User denied message signature\",\n \"User rejected\",\n \"User denied\",\n \"rejected transaction\",\n \"Transaction was rejected\",\n];\n\n/**\n *\n * @param error Optional error object return by a provider.\n * @returns true if the user rejected the request in their wallet\n */\n\nexport function isRejectRequestProviderError(error: unknown) {\n if (error) {\n // check the error code is the user rejection as described in eip-1193\n const errorCode = getErrorCode(error);\n if (errorCode && PROVIDER_REJECT_REQUEST_CODES.includes(errorCode)) {\n return true;\n }\n\n // check for some specific messages returned by some wallets when rejecting requests\n const message = getProviderErrorMessage(error);\n if (\n PROVIDER_REJECT_REQUEST_ERROR_MESSAGES.some(\n (rejectMessage) =>\n message &&\n rejectMessage &&\n message.toLowerCase().includes(rejectMessage.toLowerCase())\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n"],"mappings":";AAGA,SAAgBA,EAAwBC,GAAoC;CAI1E,OAHI,OAAOA,KAAU,WAAiBA,IAClCA,KAAS,OAAOA,KAAU,YAAY,aAAaA,IAC9CA,EAAMC,UACRD,GAAOE,UAAU;;AAG1B,SAAgBC,EAAaH,GAAoC;CAC/D,IAAIA,KAAS,OAAOA,KAAU,YAAY,UAAUA,GAAO;EACzD,IAAMI,IAAOJ,EAAMI;EACnB,IAAI,OAAOA,KAAS,UAAU,OAAOA;;;AAIzC,IAAMC,IAAgC,CAAC,MAAM,MAAO,EAE9CC,IAAyC;CAC7C;CACA;CACA;CACA;CACA;CACD;AAQD,SAAgBC,EAA6BP,GAAgB;CAC3D,IAAIA,GAAO;EAET,IAAMQ,IAAYL,EAAaH,EAAM;EACrC,IAAIQ,KAAaH,EAA8BI,SAASD,EAAU,EAChE,OAAO;EAIT,IAAMP,IAAUF,EAAwBC,EAAM;EAC9C,IACEM,EAAuCI,MACpCC,MACCV,KACAU,KACAV,EAAQW,aAAa,CAACH,SAASE,EAAcC,aAAa,CAC9D,CAAC,EAED,OAAO;;CAIX,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"rate.js","names":["Big","removeTrailingZeros","calcRate","fromAmount","toAmount","rate","rateFormatted","fromUnits","toUnits","eq","div","decimalPrecision","gt","toFixed","roundDown"],"sources":["../../../src/lib/utils/rate.ts"],"sourcesContent":["import Big from \"big.js\";\nimport { removeTrailingZeros } from \"./removeZeroDecimals\";\n\nexport function calcRate(\n fromAmount: string | number | Big,\n toAmount: string | number | Big\n): {\n rate: Big;\n rateFormatted: string;\n} | null {\n const fromUnits = Big(fromAmount);\n const toUnits = Big(toAmount);\n if (fromUnits.eq(0) || toUnits.eq(0)) return null;\n\n const rate = toUnits.div(fromUnits);\n\n const decimalPrecision = rate.gt(1e6)\n ? 0 // no need fraction digits for big numbers\n : rate.gt(1e-1)\n ? 4 // 4 digits for smaller numbers (between 1 mil and 0.1)\n : 10; // at the time of writing 1 PSP = 0.0000001827 WBTC\n\n const rateFormatted = removeTrailingZeros(\n rate.toFixed(decimalPrecision, Big.roundDown)\n );\n\n return {\n rate,\n rateFormatted,\n };\n}\n"],"mappings":";;;AAGA,SAAgBE,EACdC,GACAC,GAIO;CACP,IAAMG,IAAYP,EAAIG,EAAW,EAC3BK,IAAUR,EAAII,EAAS;AAC7B,KAAIG,EAAUE,GAAG,EAAE,IAAID,EAAQC,GAAG,EAAE,CAAE,QAAO;CAE7C,IAAMJ,IAAOG,EAAQE,IAAIH,EAAU,EAE7BI,IAAmBN,EAAKO,GAAG,IAAI,GACjC,IACAP,EAAKO,GAAG,GAAK,GACX,IACA;AAMN,QAAO;EACLP;EACAC,eANoBL,EACpBI,EAAKQ,QAAQF,GAAkBX,EAAIc,UACrC,CAAC;EAKA"}
1
+ {"version":3,"file":"rate.js","names":["Big","removeTrailingZeros","calcRate","fromAmount","toAmount","rate","rateFormatted","fromUnits","toUnits","eq","div","decimalPrecision","gt","toFixed","roundDown"],"sources":["../../../src/lib/utils/rate.ts"],"sourcesContent":["import Big from \"big.js\";\nimport { removeTrailingZeros } from \"./removeZeroDecimals\";\n\nexport function calcRate(\n fromAmount: string | number | Big,\n toAmount: string | number | Big\n): {\n rate: Big;\n rateFormatted: string;\n} | null {\n const fromUnits = Big(fromAmount);\n const toUnits = Big(toAmount);\n if (fromUnits.eq(0) || toUnits.eq(0)) return null;\n\n const rate = toUnits.div(fromUnits);\n\n const decimalPrecision = rate.gt(1e6)\n ? 0 // no need fraction digits for big numbers\n : rate.gt(1e-1)\n ? 4 // 4 digits for smaller numbers (between 1 mil and 0.1)\n : 10; // at the time of writing 1 PSP = 0.0000001827 WBTC\n\n const rateFormatted = removeTrailingZeros(\n rate.toFixed(decimalPrecision, Big.roundDown)\n );\n\n return {\n rate,\n rateFormatted,\n };\n}\n"],"mappings":";;;AAGA,SAAgBE,EACdC,GACAC,GAIO;CACP,IAAMG,IAAYP,EAAIG,EAAW,EAC3BK,IAAUR,EAAII,EAAS;CAC7B,IAAIG,EAAUE,GAAG,EAAE,IAAID,EAAQC,GAAG,EAAE,EAAE,OAAO;CAE7C,IAAMJ,IAAOG,EAAQE,IAAIH,EAAU,EAE7BI,IAAmBN,EAAKO,GAAG,IAAI,GACjC,IACAP,EAAKO,GAAG,GAAK,GACX,IACA;CAMN,OAAO;EACLP;EACAC,eANoBL,EACpBI,EAAKQ,QAAQF,GAAkBX,EAAIc,UACrC,CAIER;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"removeZeroDecimals.js","names":["getFirstTrailingZeroIndex","value","i","length","removeTrailingZeros","separator","includes","trimmed","slice"],"sources":["../../../src/lib/utils/removeZeroDecimals.ts"],"sourcesContent":["/**\n * Returns the index of the first non-zero character from the end of the string.\n * If all characters are zero, it returns the length of the string.\n * * Examples:\n * - 0.1000 -> 5\n * - 0.0000 -> 6\n * - 1.0000 -> 2\n * - 1000 -> 4\n * - 0 -> 1\n */\nfunction getFirstTrailingZeroIndex(value: string): number {\n for (let i = value.length - 1; i > 0; i--) {\n if (value[i] !== \"0\") return i + 1;\n }\n\n return value.length;\n}\n\n/**\n * Returns the trimmed value by removing trailing zeros.\n * * Examples:\n * - 0.10 -> 0.1\n * - 0.00 -> 0\n * - 1.00 -> 1\n */\nexport function removeTrailingZeros(value: string, separator = \".\"): string {\n if (!value.includes(separator)) return value;\n\n const trimmed = value.slice(0, getFirstTrailingZeroIndex(value));\n\n // Remove trailing zeros after the decimal point\n if (trimmed[trimmed.length - 1] === separator) return trimmed.slice(0, -1);\n\n return trimmed;\n}\n"],"mappings":";AAUA,SAASA,EAA0BC,GAAuB;AACxD,MAAK,IAAIC,IAAID,EAAME,SAAS,GAAGD,IAAI,GAAGA,IACpC,KAAID,EAAMC,OAAO,IAAK,QAAOA,IAAI;AAGnC,QAAOD,EAAME;;AAUf,SAAgBC,EAAoBH,GAAeI,IAAY,KAAa;AAC1E,KAAI,CAACJ,EAAMK,SAASD,EAAU,CAAE,QAAOJ;CAEvC,IAAMM,IAAUN,EAAMO,MAAM,GAAGR,EAA0BC,EAAM,CAAC;AAKhE,QAFIM,EAAQA,EAAQJ,SAAS,OAAOE,IAAkBE,EAAQC,MAAM,GAAG,GAAG,GAEnED"}
1
+ {"version":3,"file":"removeZeroDecimals.js","names":["getFirstTrailingZeroIndex","value","i","length","removeTrailingZeros","separator","includes","trimmed","slice"],"sources":["../../../src/lib/utils/removeZeroDecimals.ts"],"sourcesContent":["/**\n * Returns the index of the first non-zero character from the end of the string.\n * If all characters are zero, it returns the length of the string.\n * * Examples:\n * - 0.1000 -> 5\n * - 0.0000 -> 6\n * - 1.0000 -> 2\n * - 1000 -> 4\n * - 0 -> 1\n */\nfunction getFirstTrailingZeroIndex(value: string): number {\n for (let i = value.length - 1; i > 0; i--) {\n if (value[i] !== \"0\") return i + 1;\n }\n\n return value.length;\n}\n\n/**\n * Returns the trimmed value by removing trailing zeros.\n * * Examples:\n * - 0.10 -> 0.1\n * - 0.00 -> 0\n * - 1.00 -> 1\n */\nexport function removeTrailingZeros(value: string, separator = \".\"): string {\n if (!value.includes(separator)) return value;\n\n const trimmed = value.slice(0, getFirstTrailingZeroIndex(value));\n\n // Remove trailing zeros after the decimal point\n if (trimmed[trimmed.length - 1] === separator) return trimmed.slice(0, -1);\n\n return trimmed;\n}\n"],"mappings":";AAUA,SAASA,EAA0BC,GAAuB;CACxD,KAAK,IAAIC,IAAID,EAAME,SAAS,GAAGD,IAAI,GAAGA,KACpC,IAAID,EAAMC,OAAO,KAAK,OAAOA,IAAI;CAGnC,OAAOD,EAAME;;AAUf,SAAgBC,EAAoBH,GAAeI,IAAY,KAAa;CAC1E,IAAI,CAACJ,EAAMK,SAASD,EAAU,EAAE,OAAOJ;CAEvC,IAAMM,IAAUN,EAAMO,MAAM,GAAGR,EAA0BC,EAAM,CAAC;CAKhE,OAFIM,EAAQA,EAAQJ,SAAS,OAAOE,IAAkBE,EAAQC,MAAM,GAAG,GAAG,GAEnED"}
@@ -1 +1 @@
1
- {"version":3,"file":"savedAmountUSD.js","names":["subtractFee","OptimalRate","Big","isFilledArray","DEST_AMOUNT_THRESHOLD","getSavedAmountUSD","priceRoute","Pick","others","destAmount","destUSD","gasCostUSD","partnerFee","veloraDestAmount","eq","dollarsPerUnit","div","totalUSD","bestOthersDexTotalUsd","bestOthersDexDestAmount","reduce","Record","maxTotal","exchange","data","gasUSD","destAmountBN","mul","minus","gt","lte","veloraTotalUsd","youSaveUsd","toNumber"],"sources":["../../../src/lib/utils/savedAmountUSD.ts"],"sourcesContent":["import { subtractFee } from \"@/lib/utils/fee\";\nimport type { OptimalRate } from \"@velora-dex/sdk\";\nimport Big from \"big.js\";\nimport { isFilledArray } from \"./tuple\";\n\n// if other DEXs have less than destAmount\n// don't count in `You save`\nconst DEST_AMOUNT_THRESHOLD = 0.5; // 50%\n\nexport const getSavedAmountUSD = (\n priceRoute: Pick<\n OptimalRate,\n \"others\" | \"destUSD\" | \"gasCostUSD\" | \"destAmount\" | \"partnerFee\"\n >\n): number | undefined => {\n const { others, destAmount, destUSD, gasCostUSD, partnerFee } = priceRoute;\n\n // missing arguments required for calc - early return\n if (\n !destUSD ||\n !others ||\n !isFilledArray(others) // others must have at least one dex to compare to\n )\n return;\n\n const veloraDestAmount = new Big(destAmount);\n\n if (veloraDestAmount.eq(0)) return;\n\n const dollarsPerUnit = new Big(destUSD).div(veloraDestAmount);\n\n const {\n totalUSD: bestOthersDexTotalUsd,\n destAmount: bestOthersDexDestAmount,\n } = others.reduce<Record<\"totalUSD\" | \"destAmount\", Big>>(\n (maxTotal, exchange) => {\n // don't have data for this exchange -> skip it from calculation of the best of others\n if (!exchange?.data?.gasUSD) return maxTotal;\n\n const destAmount = subtractFee(exchange.destAmount, partnerFee);\n const {\n data: { gasUSD },\n } = exchange;\n\n const destAmountBN = new Big(destAmount);\n const destUSD = destAmountBN.mul(dollarsPerUnit);\n const totalUSD = destUSD.minus(gasUSD);\n\n if (totalUSD.gt(maxTotal.totalUSD)) {\n return {\n totalUSD,\n destAmount: destAmountBN,\n };\n }\n\n return maxTotal;\n },\n { totalUSD: new Big(0), destAmount: new Big(0) }\n );\n\n // no exchange from priceRoute.others had `gasUSD`\n if (bestOthersDexTotalUsd.eq(0)) return;\n\n if (\n // destAmount of the best Other DEX is < DEST_AMOUNT_THRESHOLD of Velora destAmount\n // means that that DEX alone can't cover the whole srcAmount\n // so You Save would be a large number not representative of reality\n bestOthersDexDestAmount.div(veloraDestAmount).lte(DEST_AMOUNT_THRESHOLD)\n )\n return;\n\n const veloraTotalUsd = new Big(subtractFee(destUSD, partnerFee)).minus(\n gasCostUSD\n );\n\n const youSaveUsd = veloraTotalUsd.minus(bestOthersDexTotalUsd);\n // very small amount or negative\n if (youSaveUsd.lte(0.01)) return;\n\n return youSaveUsd.toNumber();\n};\n"],"mappings":";;;;AAOA,IAAMI,IAAwB,IAEjBC,KACXC,MAIuB;CACvB,IAAM,EAAEE,WAAQC,eAAYC,YAASC,eAAYC,kBAAeN;AAGhE,KACE,CAACI,KACD,CAACF,KACD,CAACL,EAAcK,EAAO,CAEtB;CAEF,IAAMK,IAAmB,IAAIX,EAAIO,EAAW;AAE5C,KAAII,EAAiBC,GAAG,EAAE,CAAE;CAE5B,IAAMC,IAAiB,IAAIb,EAAIQ,EAAQ,CAACM,IAAIH,EAAiB,EAEvD,EACJI,UAAUC,GACVT,YAAYU,MACVX,EAAOY,QACRE,GAAUC,MAAa;AAEtB,MAAI,CAACA,GAAUC,MAAMC,OAAQ,QAAOH;EAEpC,IAAMb,IAAaT,EAAYuB,EAASd,YAAYG,EAAW,EACzD,EACJY,MAAM,EAAEC,gBACNF,GAEEG,IAAe,IAAIxB,EAAIO,EAAW,EAElCQ,IADUS,EAAaC,IAAIZ,EAAe,CACvBa,MAAMH,EAAO;AAStC,SAPIR,EAASY,GAAGP,EAASL,SAAS,GACzB;GACLA;GACAR,YAAYiB;GACb,GAGIJ;IAET;EAAEL,UAAU,IAAIf,EAAI,EAAE;EAAEO,YAAY,IAAIP,EAAI,EAAC;EAC/C,CAAC;AAKD,KAFIgB,EAAsBJ,GAAG,EAAE,IAM7BK,EAAwBH,IAAIH,EAAiB,CAACiB,IAAI1B,EAAsB,CAExE;CAMF,IAAM4B,IAJiB,IAAI9B,EAAIF,EAAYU,GAASE,EAAW,CAAC,CAACgB,MAC/DjB,EACD,CAEiCiB,MAAMV,EAAsB;AAE1Dc,QAAWF,IAAI,IAAK,CAExB,QAAOE,EAAWC,UAAU"}
1
+ {"version":3,"file":"savedAmountUSD.js","names":["subtractFee","OptimalRate","Big","isFilledArray","DEST_AMOUNT_THRESHOLD","getSavedAmountUSD","priceRoute","Pick","others","destAmount","destUSD","gasCostUSD","partnerFee","veloraDestAmount","eq","dollarsPerUnit","div","totalUSD","bestOthersDexTotalUsd","bestOthersDexDestAmount","reduce","Record","maxTotal","exchange","data","gasUSD","destAmountBN","mul","minus","gt","lte","veloraTotalUsd","youSaveUsd","toNumber"],"sources":["../../../src/lib/utils/savedAmountUSD.ts"],"sourcesContent":["import { subtractFee } from \"@/lib/utils/fee\";\nimport type { OptimalRate } from \"@velora-dex/sdk\";\nimport Big from \"big.js\";\nimport { isFilledArray } from \"./tuple\";\n\n// if other DEXs have less than destAmount\n// don't count in `You save`\nconst DEST_AMOUNT_THRESHOLD = 0.5; // 50%\n\nexport const getSavedAmountUSD = (\n priceRoute: Pick<\n OptimalRate,\n \"others\" | \"destUSD\" | \"gasCostUSD\" | \"destAmount\" | \"partnerFee\"\n >\n): number | undefined => {\n const { others, destAmount, destUSD, gasCostUSD, partnerFee } = priceRoute;\n\n // missing arguments required for calc - early return\n if (\n !destUSD ||\n !others ||\n !isFilledArray(others) // others must have at least one dex to compare to\n )\n return;\n\n const veloraDestAmount = new Big(destAmount);\n\n if (veloraDestAmount.eq(0)) return;\n\n const dollarsPerUnit = new Big(destUSD).div(veloraDestAmount);\n\n const {\n totalUSD: bestOthersDexTotalUsd,\n destAmount: bestOthersDexDestAmount,\n } = others.reduce<Record<\"totalUSD\" | \"destAmount\", Big>>(\n (maxTotal, exchange) => {\n // don't have data for this exchange -> skip it from calculation of the best of others\n if (!exchange?.data?.gasUSD) return maxTotal;\n\n const destAmount = subtractFee(exchange.destAmount, partnerFee);\n const {\n data: { gasUSD },\n } = exchange;\n\n const destAmountBN = new Big(destAmount);\n const destUSD = destAmountBN.mul(dollarsPerUnit);\n const totalUSD = destUSD.minus(gasUSD);\n\n if (totalUSD.gt(maxTotal.totalUSD)) {\n return {\n totalUSD,\n destAmount: destAmountBN,\n };\n }\n\n return maxTotal;\n },\n { totalUSD: new Big(0), destAmount: new Big(0) }\n );\n\n // no exchange from priceRoute.others had `gasUSD`\n if (bestOthersDexTotalUsd.eq(0)) return;\n\n if (\n // destAmount of the best Other DEX is < DEST_AMOUNT_THRESHOLD of Velora destAmount\n // means that that DEX alone can't cover the whole srcAmount\n // so You Save would be a large number not representative of reality\n bestOthersDexDestAmount.div(veloraDestAmount).lte(DEST_AMOUNT_THRESHOLD)\n )\n return;\n\n const veloraTotalUsd = new Big(subtractFee(destUSD, partnerFee)).minus(\n gasCostUSD\n );\n\n const youSaveUsd = veloraTotalUsd.minus(bestOthersDexTotalUsd);\n // very small amount or negative\n if (youSaveUsd.lte(0.01)) return;\n\n return youSaveUsd.toNumber();\n};\n"],"mappings":";;;;AAOA,IAAMI,IAAwB,IAEjBC,KACXC,MAIuB;CACvB,IAAM,EAAEE,WAAQC,eAAYC,YAASC,eAAYC,kBAAeN;CAGhE,IACE,CAACI,KACD,CAACF,KACD,CAACL,EAAcK,EAAO,EAEtB;CAEF,IAAMK,IAAmB,IAAIX,EAAIO,EAAW;CAE5C,IAAII,EAAiBC,GAAG,EAAE,EAAE;CAE5B,IAAMC,IAAiB,IAAIb,EAAIQ,EAAQ,CAACM,IAAIH,EAAiB,EAEvD,EACJI,UAAUC,GACVT,YAAYU,MACVX,EAAOY,QACRE,GAAUC,MAAa;EAEtB,IAAI,CAACA,GAAUC,MAAMC,QAAQ,OAAOH;EAEpC,IAAMb,IAAaT,EAAYuB,EAASd,YAAYG,EAAW,EACzD,EACJY,MAAM,EAAEC,gBACNF,GAEEG,IAAe,IAAIxB,EAAIO,EAAW,EAElCQ,IADUS,EAAaC,IAAIZ,EAChBL,CAAQkB,MAAMH,EAAO;EAStC,OAPIR,EAASY,GAAGP,EAASL,SAAS,GACzB;GACLA;GACAR,YAAYiB;GACb,GAGIJ;IAET;EAAEL,UAAU,IAAIf,EAAI,EAAE;EAAEO,YAAY,IAAIP,EAAI,EAAC;EAC/C,CAAC;CAKD,IAFIgB,EAAsBJ,GAAG,EAAE,IAM7BK,EAAwBH,IAAIH,EAAiB,CAACiB,IAAI1B,EAAsB,EAExE;CAMF,IAAM4B,IAJiB,IAAI9B,EAAIF,EAAYU,GAASE,EAAW,CAAC,CAACgB,MAC/DjB,EAGiBoB,CAAeH,MAAMV,EAAsB;CAE1Dc,OAAWF,IAAI,IAAK,EAExB,OAAOE,EAAWC,UAAU"}
@@ -1 +1 @@
1
- {"version":3,"file":"scaleFactor.js","names":["Big","scaleByFactor","amount","BigSource","scalingFactor","bigAmount","undefined","bigBase","div","pow","times"],"sources":["../../../src/lib/utils/scaleFactor.ts"],"sourcesContent":["import Big from \"big.js\";\n\nexport function scaleByFactor(\n amount?: Big.BigSource,\n scalingFactor?: number\n): Big {\n if (!amount) return new Big(0);\n\n const bigAmount = new Big(amount);\n\n if (scalingFactor === undefined) return bigAmount;\n\n const bigBase = new Big(10);\n\n return scalingFactor < 0\n ? bigAmount.div(bigBase.pow(-scalingFactor))\n : bigAmount.times(bigBase.pow(scalingFactor));\n}\n"],"mappings":";;AAEA,SAAgBC,EACdC,GACAE,GACK;AACL,KAAI,CAACF,EAAQ,QAAO,IAAIF,EAAI,EAAE;CAE9B,IAAMK,IAAY,IAAIL,EAAIE,EAAO;AAEjC,KAAIE,MAAkBE,KAAAA,EAAW,QAAOD;CAExC,IAAME,IAAU,IAAIP,EAAI,GAAG;AAE3B,QAAOI,IAAgB,IACnBC,EAAUG,IAAID,EAAQE,IAAI,CAACL,EAAc,CAAC,GAC1CC,EAAUK,MAAMH,EAAQE,IAAIL,EAAc,CAAC"}
1
+ {"version":3,"file":"scaleFactor.js","names":["Big","scaleByFactor","amount","BigSource","scalingFactor","bigAmount","undefined","bigBase","div","pow","times"],"sources":["../../../src/lib/utils/scaleFactor.ts"],"sourcesContent":["import Big from \"big.js\";\n\nexport function scaleByFactor(\n amount?: Big.BigSource,\n scalingFactor?: number\n): Big {\n if (!amount) return new Big(0);\n\n const bigAmount = new Big(amount);\n\n if (scalingFactor === undefined) return bigAmount;\n\n const bigBase = new Big(10);\n\n return scalingFactor < 0\n ? bigAmount.div(bigBase.pow(-scalingFactor))\n : bigAmount.times(bigBase.pow(scalingFactor));\n}\n"],"mappings":";;AAEA,SAAgBC,EACdC,GACAE,GACK;CACL,IAAI,CAACF,GAAQ,OAAO,IAAIF,EAAI,EAAE;CAE9B,IAAMK,IAAY,IAAIL,EAAIE,EAAO;CAEjC,IAAIE,MAAkBE,KAAAA,GAAW,OAAOD;CAExC,IAAME,IAAU,IAAIP,EAAI,GAAG;CAE3B,OAAOI,IAAgB,IACnBC,EAAUG,IAAID,EAAQE,IAAI,CAACL,EAAc,CAAC,GAC1CC,EAAUK,MAAMH,EAAQE,IAAIL,EAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"slippage.js","names":["Big","subtractSlippage","amount","slippagePercent","toFixed","multiplier","minus","mul","amountAfterSlippage","slippage","type"],"sources":["../../../src/lib/utils/slippage.ts"],"sourcesContent":["import Big from \"big.js\";\n\nexport function subtractSlippage(\n amount: string | Big,\n slippagePercent: number // e.g. 0.5 for 0.5%\n): string {\n if (slippagePercent === 0)\n return typeof amount === \"string\" ? amount : amount.toFixed(); // avoid e-notation\n\n const multiplier = Big(1).minus(slippagePercent / 100);\n return Big(amount).mul(multiplier).toFixed(0);\n}\n\n/**\n * Calculates the amount after applying slippage. Decimals are possible after the operation.\n * take care that the resulting amount will be with a decimal number,\n * if afterwards it needs to be treated as an int (e.g.BigInt(amount)), apply .toFixed(0)\n */\nexport function amountAfterSlippage(\n amount: string,\n slippage: number, // e.g. 0.5 for 0.5%\n type: \"SELL\" | \"BUY\"\n): Big {\n const multiplier = type === \"BUY\" ? 1 + slippage / 100 : 1 - slippage / 100;\n return new Big(amount).mul(multiplier);\n}\n"],"mappings":";;AAEA,SAAgBC,EACdC,GACAC,GACQ;AACR,KAAIA,MAAoB,EACtB,QAAO,OAAOD,KAAW,WAAWA,IAASA,EAAOE,SAAS;CAE/D,IAAMC,IAAaL,EAAI,EAAE,CAACM,MAAMH,IAAkB,IAAI;AACtD,QAAOH,EAAIE,EAAO,CAACK,IAAIF,EAAW,CAACD,QAAQ,EAAE;;AAQ/C,SAAgBI,EACdN,GACAO,GACAC,GACK;CACL,IAAML,IAAaK,MAAS,QAAQ,IAAID,IAAW,MAAM,IAAIA,IAAW;AACxE,QAAO,IAAIT,EAAIE,EAAO,CAACK,IAAIF,EAAW"}
1
+ {"version":3,"file":"slippage.js","names":["Big","subtractSlippage","amount","slippagePercent","toFixed","multiplier","minus","mul","amountAfterSlippage","slippage","type"],"sources":["../../../src/lib/utils/slippage.ts"],"sourcesContent":["import Big from \"big.js\";\n\nexport function subtractSlippage(\n amount: string | Big,\n slippagePercent: number // e.g. 0.5 for 0.5%\n): string {\n if (slippagePercent === 0)\n return typeof amount === \"string\" ? amount : amount.toFixed(); // avoid e-notation\n\n const multiplier = Big(1).minus(slippagePercent / 100);\n return Big(amount).mul(multiplier).toFixed(0);\n}\n\n/**\n * Calculates the amount after applying slippage. Decimals are possible after the operation.\n * take care that the resulting amount will be with a decimal number,\n * if afterwards it needs to be treated as an int (e.g.BigInt(amount)), apply .toFixed(0)\n */\nexport function amountAfterSlippage(\n amount: string,\n slippage: number, // e.g. 0.5 for 0.5%\n type: \"SELL\" | \"BUY\"\n): Big {\n const multiplier = type === \"BUY\" ? 1 + slippage / 100 : 1 - slippage / 100;\n return new Big(amount).mul(multiplier);\n}\n"],"mappings":";;AAEA,SAAgBC,EACdC,GACAC,GACQ;CACR,IAAIA,MAAoB,GACtB,OAAO,OAAOD,KAAW,WAAWA,IAASA,EAAOE,SAAS;CAE/D,IAAMC,IAAaL,EAAI,EAAE,CAACM,MAAMH,IAAkB,IAAI;CACtD,OAAOH,EAAIE,EAAO,CAACK,IAAIF,EAAW,CAACD,QAAQ,EAAE;;AAQ/C,SAAgBI,EACdN,GACAO,GACAC,GACK;CACL,IAAML,IAAaK,MAAS,QAAQ,IAAID,IAAW,MAAM,IAAIA,IAAW;CACxE,OAAO,IAAIT,EAAIE,EAAO,CAACK,IAAIF,EAAW"}
@@ -1 +1 @@
1
- {"version":3,"file":"time.js","names":["dayjs","duration","relativeTime","extend","getDuration","deadline","minutesToMilliseconds","minutes","millisecondsToSeconds","milliseconds","Math","floor"],"sources":["../../../src/lib/utils/time.ts"],"sourcesContent":["import dayjs from \"dayjs\";\nimport duration from \"dayjs/plugin/duration\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\n\ndayjs.extend(duration);\ndayjs.extend(relativeTime);\n\nexport function getDuration(deadline: number) {\n return dayjs.duration(deadline);\n}\n\nexport function minutesToMilliseconds(minutes: number) {\n return minutes * 60 * 1000;\n}\n\nexport function millisecondsToSeconds(milliseconds: number) {\n return Math.floor(milliseconds / 1000);\n}\n"],"mappings":";;;AAIAA,EAAMG,OAAOF,EAAS,EACtBD,EAAMG,OAAOD,EAAa;AAE1B,SAAgBE,EAAYC,GAAkB;AAC5C,QAAOL,EAAMC,SAASI,EAAS;;AAGjC,SAAgBC,EAAsBC,GAAiB;AACrD,QAAOA,IAAU,KAAK;;AAGxB,SAAgBC,EAAsBC,GAAsB;AAC1D,QAAOC,KAAKC,MAAMF,IAAe,IAAK"}
1
+ {"version":3,"file":"time.js","names":["dayjs","duration","relativeTime","extend","getDuration","deadline","minutesToMilliseconds","minutes","millisecondsToSeconds","milliseconds","Math","floor"],"sources":["../../../src/lib/utils/time.ts"],"sourcesContent":["import dayjs from \"dayjs\";\nimport duration from \"dayjs/plugin/duration\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\n\ndayjs.extend(duration);\ndayjs.extend(relativeTime);\n\nexport function getDuration(deadline: number) {\n return dayjs.duration(deadline);\n}\n\nexport function minutesToMilliseconds(minutes: number) {\n return minutes * 60 * 1000;\n}\n\nexport function millisecondsToSeconds(milliseconds: number) {\n return Math.floor(milliseconds / 1000);\n}\n"],"mappings":";;;AAIAA,EAAMG,OAAOF,EAAS,EACtBD,EAAMG,OAAOD,EAAa;AAE1B,SAAgBE,EAAYC,GAAkB;CAC5C,OAAOL,EAAMC,SAASI,EAAS;;AAGjC,SAAgBC,EAAsBC,GAAiB;CACrD,OAAOA,IAAU,KAAK;;AAGxB,SAAgBC,EAAsBC,GAAsB;CAC1D,OAAOC,KAAKC,MAAMF,IAAe,IAAK"}
@@ -1 +1 @@
1
- {"version":3,"file":"toDecimal.js","names":["Big","removeTrailingZeros","DECIMAL_PRECISION","TEN_POWER_DECIMAL_PRECISION","MAX_DECIMAL_PLACES","RM","roundDown","DP","toDecimal","number","Number","isNaN","isFinite","big","toFixed","toPrecision","toDecimalTrimmed","undefined","decimal"],"sources":["../../../src/lib/utils/toDecimal.ts"],"sourcesContent":["import Big from \"big.js\";\nimport { removeTrailingZeros } from \"./removeZeroDecimals\";\n\nconst DECIMAL_PRECISION = 6;\nconst TEN_POWER_DECIMAL_PRECISION = 10 ** DECIMAL_PRECISION;\n\nconst MAX_DECIMAL_PLACES = 30;\n\n/*\n Let's set the rounding mode to round down.\n\n The reason its because the div function in Big always applies rounding,\n so we want it to round below the user balance (otherwise swap could fail)\n\n Also, let's set decimal places to 30, the reason is that the default on Big is 20\n and there are tokens that have 18 decimals (i.e ETH) and if a user wants to trade\n 0.0001 ETH, we wont have the entire value when converting it to decimals (WEI).\n*/\nBig.RM = Big.roundDown; // ex: 1.23456789 -> 1.234567\nBig.DP = MAX_DECIMAL_PLACES;\n\n/*\n Let's be careful about which rounding mode we use with `Big.toFixed()`:\n\n If the value of this Big number in normal notation has more digits to the right of the decimal point than is specified by dp, \n the return value will be rounded to dp decimal places using rounding mode rm.\n\n If the value of this Big number in normal notation has fewer fraction digits then is specified by dp,\n the return value will be appended with zeros accordingly.\n*/\n\nexport const toDecimal = (number: number): string => {\n if (Number.isNaN(number) || !Number.isFinite(number)) return \"\";\n const big = Big(number);\n\n if (number > TEN_POWER_DECIMAL_PRECISION) return big.toFixed(0); // avoid e-notation for large numbers\n\n if (number > 0 && number < 1 / TEN_POWER_DECIMAL_PRECISION)\n return big.toFixed(); // avoid e-notation for small numbers\n\n return big.toPrecision(DECIMAL_PRECISION);\n};\n\n/*\n Same as toDecimal, but removes trailing zeros.\n*/\nexport const toDecimalTrimmed = (number?: number | bigint | string): string => {\n if (number === undefined) return \"\";\n\n const decimal = toDecimal(Number(number));\n return removeTrailingZeros(decimal);\n};\n"],"mappings":";;;AAGA,IAAME,IAAoB,GACpBC,IAA8B,MAAMD;AAc1CF,EAAIK,KAAKL,EAAIM,WACbN,EAAIO,KAbuB;AAyB3B,IAAaC,KAAaC,MAA2B;AACnD,KAAIC,OAAOC,MAAMF,EAAO,IAAI,CAACC,OAAOE,SAASH,EAAO,CAAE,QAAO;CAC7D,IAAMI,IAAMb,EAAIS,EAAO;AAOvB,QALIA,IAASN,IAAoCU,EAAIC,QAAQ,EAAE,GAE3DL,IAAS,KAAKA,IAAS,IAAIN,IACtBU,EAAIC,SAAS,GAEfD,EAAIE,YAAYb,EAAkB;GAM9Bc,KAAoBP,MAC3BA,MAAWQ,KAAAA,IAAkB,KAG1BhB,EADSO,EAAUE,OAAOD,EAAO,CAAC,CACN"}
1
+ {"version":3,"file":"toDecimal.js","names":["Big","removeTrailingZeros","DECIMAL_PRECISION","TEN_POWER_DECIMAL_PRECISION","MAX_DECIMAL_PLACES","RM","roundDown","DP","toDecimal","number","Number","isNaN","isFinite","big","toFixed","toPrecision","toDecimalTrimmed","undefined","decimal"],"sources":["../../../src/lib/utils/toDecimal.ts"],"sourcesContent":["import Big from \"big.js\";\nimport { removeTrailingZeros } from \"./removeZeroDecimals\";\n\nconst DECIMAL_PRECISION = 6;\nconst TEN_POWER_DECIMAL_PRECISION = 10 ** DECIMAL_PRECISION;\n\nconst MAX_DECIMAL_PLACES = 30;\n\n/*\n Let's set the rounding mode to round down.\n\n The reason its because the div function in Big always applies rounding,\n so we want it to round below the user balance (otherwise swap could fail)\n\n Also, let's set decimal places to 30, the reason is that the default on Big is 20\n and there are tokens that have 18 decimals (i.e ETH) and if a user wants to trade\n 0.0001 ETH, we wont have the entire value when converting it to decimals (WEI).\n*/\nBig.RM = Big.roundDown; // ex: 1.23456789 -> 1.234567\nBig.DP = MAX_DECIMAL_PLACES;\n\n/*\n Let's be careful about which rounding mode we use with `Big.toFixed()`:\n\n If the value of this Big number in normal notation has more digits to the right of the decimal point than is specified by dp, \n the return value will be rounded to dp decimal places using rounding mode rm.\n\n If the value of this Big number in normal notation has fewer fraction digits then is specified by dp,\n the return value will be appended with zeros accordingly.\n*/\n\nexport const toDecimal = (number: number): string => {\n if (Number.isNaN(number) || !Number.isFinite(number)) return \"\";\n const big = Big(number);\n\n if (number > TEN_POWER_DECIMAL_PRECISION) return big.toFixed(0); // avoid e-notation for large numbers\n\n if (number > 0 && number < 1 / TEN_POWER_DECIMAL_PRECISION)\n return big.toFixed(); // avoid e-notation for small numbers\n\n return big.toPrecision(DECIMAL_PRECISION);\n};\n\n/*\n Same as toDecimal, but removes trailing zeros.\n*/\nexport const toDecimalTrimmed = (number?: number | bigint | string): string => {\n if (number === undefined) return \"\";\n\n const decimal = toDecimal(Number(number));\n return removeTrailingZeros(decimal);\n};\n"],"mappings":";;;AAGA,IAAME,IAAoB,GACpBC,IAA8B,MAAMD;AAc1CF,EAAIK,KAAKL,EAAIM,WACbN,EAAIO,KAAKH;AAYT,IAAaI,KAAaC,MAA2B;CACnD,IAAIC,OAAOC,MAAMF,EAAO,IAAI,CAACC,OAAOE,SAASH,EAAO,EAAE,OAAO;CAC7D,IAAMI,IAAMb,EAAIS,EAAO;CAOvB,OALIA,IAASN,IAAoCU,EAAIC,QAAQ,EAAE,GAE3DL,IAAS,KAAKA,IAAS,IAAIN,IACtBU,EAAIC,SAAS,GAEfD,EAAIE,YAAYb,EAAkB;GAM9Bc,KAAoBP,MAC3BA,MAAWQ,KAAAA,IAAkB,KAG1BhB,EADSO,EAAUE,OAAOD,EAAO,CACbS,CAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"toasts.js","names":["CustomToast","toast","Hash","TransactionReceipt","constructExplorerOrderDetailsLink","constructTxLinkForChain","CallsReceipt","SupportedChainId","getStandaloneTxHash","DeltaAuction","ToastPromiseData","NonNullable","Parameters","promise","T","OrderSentObject","order","lastOrderState","Promise","addTxToast","transactionHash","_transactionHash","receiptPromise","chainId","toastId","crypto","randomUUID","_detailsLink","txHash","undefined","toastOptions","id","loading","success","receipt","detailsLink","error","addDeltaOrderToast","orderSent","customToastProps"],"sources":["../../../src/lib/utils/toasts.tsx"],"sourcesContent":["import { CustomToast } from \"@/components/widget/Toasts/CustomToast\";\nimport { toast } from \"sonner\";\nimport { type Hash, type TransactionReceipt } from \"viem\";\nimport {\n constructExplorerOrderDetailsLink,\n constructTxLinkForChain,\n} from \"./explorer\";\nimport type { CallsReceipt } from \"@/hooks/batch/useAwaitCalls\";\nimport type { SupportedChainId } from \"../web3/wagmi/types\";\nimport { getStandaloneTxHash } from \"@/transactions/hash\";\nimport type { DeltaAuction } from \"@velora-dex/sdk\";\n\ntype ToastPromiseData<T> = NonNullable<Parameters<typeof toast.promise<T>>[1]>;\n\nexport type OrderSentObject = {\n order: DeltaAuction;\n lastOrderState: Promise<DeltaAuction>;\n};\n\nexport function addTxToast({\n transactionHash: _transactionHash,\n receiptPromise,\n chainId,\n}: {\n chainId: SupportedChainId;\n receiptPromise: Promise<TransactionReceipt | CallsReceipt | undefined>;\n transactionHash?: Hash;\n}) {\n const toastId = crypto.randomUUID();\n\n const transactionHash = getStandaloneTxHash({\n transactionHash: _transactionHash,\n });\n const _detailsLink = transactionHash\n ? constructTxLinkForChain({ chainId, txHash: transactionHash })\n : undefined;\n\n const toastOptions: ToastPromiseData<\n TransactionReceipt | CallsReceipt | undefined\n > = {\n id: toastId,\n loading: (\n <CustomToast\n variant=\"loading\"\n label=\"Pending Transaction\"\n toastId={toastId}\n detailsLink={_detailsLink}\n />\n ),\n success: (receipt) => {\n let detailsLink = _detailsLink;\n if (!detailsLink && receipt) {\n detailsLink = constructTxLinkForChain({\n chainId,\n txHash: receipt.transactionHash,\n });\n }\n\n return (\n <CustomToast\n variant=\"success\"\n label=\"Transaction Confirmed\"\n toastId={toastId}\n detailsLink={detailsLink}\n />\n );\n },\n error: (\n <CustomToast\n variant=\"error\"\n label=\"Transaction Failed\"\n toastId={toastId}\n detailsLink={_detailsLink}\n />\n ),\n };\n\n toast.promise(receiptPromise, toastOptions);\n}\n\nexport function addDeltaOrderToast(orderSent: OrderSentObject) {\n const customToastProps = {\n toastId: crypto.randomUUID(),\n detailsLink: constructExplorerOrderDetailsLink(orderSent.order.id),\n };\n\n const toastOptions = {\n id: customToastProps.toastId,\n loading: (\n <CustomToast\n variant=\"loading\"\n label=\"Pending Order\"\n {...customToastProps}\n />\n ),\n success: (\n <CustomToast\n variant=\"success\"\n label=\"Order Confirmed\"\n {...customToastProps}\n />\n ),\n error: (\n <CustomToast variant=\"error\" label=\"Order Failed\" {...customToastProps} />\n ),\n };\n\n toast.promise(orderSent.lastOrderState, toastOptions);\n}\n"],"mappings":";;;;;;;AAmBA,SAAgBmB,EAAW,EACzBC,iBAAiBC,GACjBC,mBACAC,cAKC;CACD,IAAMC,IAAUC,OAAOC,YAAY,EAE7BN,IAAkBZ,EAAoB,EAC1CY,iBAAiBC,GAClB,CAAC,EACIM,IAAeP,IACjBf,EAAwB;EAAEkB;EAASK,QAAQR;EAAiB,CAAC,GAC7DS,KAAAA,GAEEC,IAEF;EACFC,IAAIP;EACJQ,SACE,kBAAC,GAAD;GACE,SAAQ;GACR,OAAM;GACGR;GACT,aAAaG;GAEhB,CAAA;EACDM,UAAUC,MAAY;GACpB,IAAIC,IAAcR;AAQlB,UAPI,CAACQ,KAAeD,MAClBC,IAAc9B,EAAwB;IACpCkB;IACAK,QAAQM,EAAQd;IACjB,CAAC,GAIF,kBAAC,GAAD;IACE,SAAQ;IACR,OAAM;IACGI;IACIW;IACb,CAAA;;EAGNC,OACE,kBAAC,GAAD;GACE,SAAQ;GACR,OAAM;GACGZ;GACT,aAAaG;GAAa,CAAA;EAG/B;AAED1B,GAAMY,QAAQS,GAAgBQ,EAAa;;AAG7C,SAAgBO,EAAmBC,GAA4B;CAC7D,IAAMC,IAAmB;EACvBf,SAASC,OAAOC,YAAY;EAC5BS,aAAa/B,EAAkCkC,EAAUtB,MAAMe,GAAE;EAClE,EAEKD,IAAe;EACnBC,IAAIQ,EAAiBf;EACrBQ,SACE,kBAAC,GAAD;GACE,SAAQ;GACR,OAAM;GACN,GAAIO;GAEP,CAAA;EACDN,SACE,kBAAC,GAAD;GACE,SAAQ;GACR,OAAM;GACN,GAAIM;GAEP,CAAA;EACDH,OACE,kBAAC,GAAD;GAAa,SAAQ;GAAQ,OAAM;GAAe,GAAIG;GAAiB,CAAA;EAE1E;AAEDtC,GAAMY,QAAQyB,EAAUrB,gBAAgBa,EAAa"}
1
+ {"version":3,"file":"toasts.js","names":["CustomToast","toast","Hash","TransactionReceipt","constructExplorerOrderDetailsLink","constructTxLinkForChain","CallsReceipt","SupportedChainId","getStandaloneTxHash","DeltaAuction","ToastPromiseData","NonNullable","Parameters","promise","T","OrderSentObject","order","lastOrderState","Promise","addTxToast","transactionHash","_transactionHash","receiptPromise","chainId","toastId","crypto","randomUUID","_detailsLink","txHash","undefined","toastOptions","id","loading","success","receipt","detailsLink","error","addDeltaOrderToast","orderSent","customToastProps"],"sources":["../../../src/lib/utils/toasts.tsx"],"sourcesContent":["import { CustomToast } from \"@/components/widget/Toasts/CustomToast\";\nimport { toast } from \"sonner\";\nimport { type Hash, type TransactionReceipt } from \"viem\";\nimport {\n constructExplorerOrderDetailsLink,\n constructTxLinkForChain,\n} from \"./explorer\";\nimport type { CallsReceipt } from \"@/hooks/batch/useAwaitCalls\";\nimport type { SupportedChainId } from \"../web3/wagmi/types\";\nimport { getStandaloneTxHash } from \"@/transactions/hash\";\nimport type { DeltaAuction } from \"@velora-dex/sdk\";\n\ntype ToastPromiseData<T> = NonNullable<Parameters<typeof toast.promise<T>>[1]>;\n\nexport type OrderSentObject = {\n order: DeltaAuction;\n lastOrderState: Promise<DeltaAuction>;\n};\n\nexport function addTxToast({\n transactionHash: _transactionHash,\n receiptPromise,\n chainId,\n}: {\n chainId: SupportedChainId;\n receiptPromise: Promise<TransactionReceipt | CallsReceipt | undefined>;\n transactionHash?: Hash;\n}) {\n const toastId = crypto.randomUUID();\n\n const transactionHash = getStandaloneTxHash({\n transactionHash: _transactionHash,\n });\n const _detailsLink = transactionHash\n ? constructTxLinkForChain({ chainId, txHash: transactionHash })\n : undefined;\n\n const toastOptions: ToastPromiseData<\n TransactionReceipt | CallsReceipt | undefined\n > = {\n id: toastId,\n loading: (\n <CustomToast\n variant=\"loading\"\n label=\"Pending Transaction\"\n toastId={toastId}\n detailsLink={_detailsLink}\n />\n ),\n success: (receipt) => {\n let detailsLink = _detailsLink;\n if (!detailsLink && receipt) {\n detailsLink = constructTxLinkForChain({\n chainId,\n txHash: receipt.transactionHash,\n });\n }\n\n return (\n <CustomToast\n variant=\"success\"\n label=\"Transaction Confirmed\"\n toastId={toastId}\n detailsLink={detailsLink}\n />\n );\n },\n error: (\n <CustomToast\n variant=\"error\"\n label=\"Transaction Failed\"\n toastId={toastId}\n detailsLink={_detailsLink}\n />\n ),\n };\n\n toast.promise(receiptPromise, toastOptions);\n}\n\nexport function addDeltaOrderToast(orderSent: OrderSentObject) {\n const customToastProps = {\n toastId: crypto.randomUUID(),\n detailsLink: constructExplorerOrderDetailsLink(orderSent.order.id),\n };\n\n const toastOptions = {\n id: customToastProps.toastId,\n loading: (\n <CustomToast\n variant=\"loading\"\n label=\"Pending Order\"\n {...customToastProps}\n />\n ),\n success: (\n <CustomToast\n variant=\"success\"\n label=\"Order Confirmed\"\n {...customToastProps}\n />\n ),\n error: (\n <CustomToast variant=\"error\" label=\"Order Failed\" {...customToastProps} />\n ),\n };\n\n toast.promise(orderSent.lastOrderState, toastOptions);\n}\n"],"mappings":";;;;;;;AAmBA,SAAgBmB,EAAW,EACzBC,iBAAiBC,GACjBC,mBACAC,cAKC;CACD,IAAMC,IAAUC,OAAOC,YAAY,EAE7BN,IAAkBZ,EAAoB,EAC1CY,iBAAiBC,GAClB,CAAC,EACIM,IAAeP,IACjBf,EAAwB;EAAEkB;EAASK,QAAQR;EAAiB,CAAC,GAC7DS,KAAAA,GAEEC,IAEF;EACFC,IAAIP;EACJQ,SACE,kBAAC,GAAD;GACE,SAAQ;GACR,OAAM;GACGR;GACT,aAAaG;GAEhB,CAAA;EACDM,UAAUC,MAAY;GACpB,IAAIC,IAAcR;GAQlB,OAPI,CAACQ,KAAeD,MAClBC,IAAc9B,EAAwB;IACpCkB;IACAK,QAAQM,EAAQd;IACjB,CAAC,GAIF,kBAAC,GAAD;IACE,SAAQ;IACR,OAAM;IACGI;IACIW;IACb,CAAA;;EAGNC,OACE,kBAAC,GAAD;GACE,SAAQ;GACR,OAAM;GACGZ;GACT,aAAaG;GAAa,CAAA;EAG/B;CAED1B,EAAMY,QAAQS,GAAgBQ,EAAa;;AAG7C,SAAgBO,EAAmBC,GAA4B;CAC7D,IAAMC,IAAmB;EACvBf,SAASC,OAAOC,YAAY;EAC5BS,aAAa/B,EAAkCkC,EAAUtB,MAAMe,GAAE;EAClE,EAEKD,IAAe;EACnBC,IAAIQ,EAAiBf;EACrBQ,SACE,kBAAC,GAAD;GACE,SAAQ;GACR,OAAM;GACN,GAAIO;GAEP,CAAA;EACDN,SACE,kBAAC,GAAD;GACE,SAAQ;GACR,OAAM;GACN,GAAIM;GAEP,CAAA;EACDH,OACE,kBAAC,GAAD;GAAa,SAAQ;GAAQ,OAAM;GAAe,GAAIG;GAAiB,CAAA;EAE1E;CAEDtC,EAAMY,QAAQyB,EAAUrB,gBAAgBa,EAAa"}
@@ -1 +1 @@
1
- {"version":3,"file":"tradeFlow.js","names":["MinTradeFlowToken","sanitizeTradeFlowToken","token","address","decimals","symbol","img","network"],"sources":["../../../src/lib/utils/tradeFlow.ts"],"sourcesContent":["import type { MinTradeFlowToken } from \"@/components/widget/TradeOverview\";\n\nexport function sanitizeTradeFlowToken(\n token: MinTradeFlowToken\n): MinTradeFlowToken {\n return {\n address: token.address,\n decimals: token.decimals,\n symbol: token.symbol,\n img: token.img,\n network: token.network,\n };\n}\n"],"mappings":";AAEA,SAAgBC,EACdC,GACmB;AACnB,QAAO;EACLC,SAASD,EAAMC;EACfC,UAAUF,EAAME;EAChBC,QAAQH,EAAMG;EACdC,KAAKJ,EAAMI;EACXC,SAASL,EAAMK;EAChB"}
1
+ {"version":3,"file":"tradeFlow.js","names":["MinTradeFlowToken","sanitizeTradeFlowToken","token","address","decimals","symbol","img","network"],"sources":["../../../src/lib/utils/tradeFlow.ts"],"sourcesContent":["import type { MinTradeFlowToken } from \"@/components/widget/TradeOverview\";\n\nexport function sanitizeTradeFlowToken(\n token: MinTradeFlowToken\n): MinTradeFlowToken {\n return {\n address: token.address,\n decimals: token.decimals,\n symbol: token.symbol,\n img: token.img,\n network: token.network,\n };\n}\n"],"mappings":";AAEA,SAAgBC,EACdC,GACmB;CACnB,OAAO;EACLC,SAASD,EAAMC;EACfC,UAAUF,EAAME;EAChBC,QAAQH,EAAMG;EACdC,KAAKJ,EAAMI;EACXC,SAASL,EAAMK;EAChB"}
@@ -1 +1 @@
1
- {"version":3,"file":"transactionHandlers.js","names":["TransactionReceipt","CallsReceipt","BatchTransactionItem","TransactionWithoutMeta","StandaloneTransactionItem","addTx","addTxToast","TxSentObject","receiptPromise","Promise","CallsSentObject","handleTxSent","txData"],"sources":["../../../src/lib/utils/transactionHandlers.tsx"],"sourcesContent":["import { type TransactionReceipt } from \"viem\";\n\nimport type { CallsReceipt } from \"@/hooks/batch/useAwaitCalls\";\nimport type {\n BatchTransactionItem,\n TransactionWithoutMeta,\n StandaloneTransactionItem,\n} from \"@/transactions/types\";\nimport { addTx } from \"@/transactions/state/transactionsActionAtom\";\nimport { addTxToast } from \"./toasts\";\n\nexport type TxSentObject = {\n receiptPromise: Promise<TransactionReceipt>;\n} & TransactionWithoutMeta<StandaloneTransactionItem>;\n\nexport type CallsSentObject = {\n receiptPromise: Promise<CallsReceipt | undefined>;\n} & TransactionWithoutMeta<BatchTransactionItem>;\n\nexport function handleTxSent({\n receiptPromise,\n ...txData\n}: TxSentObject | CallsSentObject): void {\n addTx(txData);\n addTxToast({\n ...txData,\n receiptPromise,\n });\n}\n"],"mappings":";;;;AAmBA,SAAgBW,EAAa,EAC3BH,mBACA,GAAGI,KACoC;AAEvCN,CADAD,EAAMO,EAAO,EACbN,EAAW;EACT,GAAGM;EACHJ;EACD,CAAC"}
1
+ {"version":3,"file":"transactionHandlers.js","names":["TransactionReceipt","CallsReceipt","BatchTransactionItem","TransactionWithoutMeta","StandaloneTransactionItem","addTx","addTxToast","TxSentObject","receiptPromise","Promise","CallsSentObject","handleTxSent","txData"],"sources":["../../../src/lib/utils/transactionHandlers.tsx"],"sourcesContent":["import { type TransactionReceipt } from \"viem\";\n\nimport type { CallsReceipt } from \"@/hooks/batch/useAwaitCalls\";\nimport type {\n BatchTransactionItem,\n TransactionWithoutMeta,\n StandaloneTransactionItem,\n} from \"@/transactions/types\";\nimport { addTx } from \"@/transactions/state/transactionsActionAtom\";\nimport { addTxToast } from \"./toasts\";\n\nexport type TxSentObject = {\n receiptPromise: Promise<TransactionReceipt>;\n} & TransactionWithoutMeta<StandaloneTransactionItem>;\n\nexport type CallsSentObject = {\n receiptPromise: Promise<CallsReceipt | undefined>;\n} & TransactionWithoutMeta<BatchTransactionItem>;\n\nexport function handleTxSent({\n receiptPromise,\n ...txData\n}: TxSentObject | CallsSentObject): void {\n addTx(txData);\n addTxToast({\n ...txData,\n receiptPromise,\n });\n}\n"],"mappings":";;;;AAmBA,SAAgBW,EAAa,EAC3BH,mBACA,GAAGI,KACoC;CAEvCN,AADAD,EAAMO,EAAO,EACbN,EAAW;EACT,GAAGM;EACHJ;EACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tuple.js","names":["assert","NonEmptyArray","isFilledArray","array","T","length","assertFilledArray","nonEmptyArrayOrUndefined","arr","undefined","isTupleOfLength","len","N","TupleOfLength","isTupleAtLeastLength","TupleOfLengthAtLeast","_TupleOf","R","_TupleOfAtLeast"],"sources":["../../../src/lib/utils/tuple.ts"],"sourcesContent":["import { assert, type NonEmptyArray } from \"ts-essentials\";\n\n// checks that array has at least one element\nexport const isFilledArray = <T>(array: T[]): array is NonEmptyArray<T> => {\n return array.length > 0;\n};\n\nexport function assertFilledArray<T>(\n array: T[]\n): asserts array is NonEmptyArray<T> {\n assert(isFilledArray(array), \"array must not be empty\");\n}\n\nexport function nonEmptyArrayOrUndefined<T>(\n arr?: T[]\n): NonEmptyArray<T> | undefined {\n if (!arr) return;\n return isFilledArray(arr) ? arr : undefined;\n}\n\nexport function isTupleOfLength<T, N extends number>(\n array: T[],\n len: N\n): array is TupleOfLength<T, N> {\n return array.length === len;\n}\n\nexport function isTupleAtLeastLength<T, N extends number>(\n array: T[],\n len: N\n): array is TupleOfLengthAtLeast<T, N> {\n return array.length >= len;\n}\n\n// based on https://stackoverflow.com/a/52490977/7316062\nexport type TupleOfLength<T, N extends number> = number extends N\n ? never\n : _TupleOf<T, N, []>;\ntype _TupleOf<T, N extends number, R extends unknown[]> = R[\"length\"] extends N\n ? R\n : _TupleOf<T, N, [T, ...R]>;\n\nexport type TupleOfLengthAtLeast<T, N extends number> = number extends N\n ? never\n : _TupleOfAtLeast<T, N, []>;\ntype _TupleOfAtLeast<\n T,\n N extends number,\n R extends unknown[],\n> = R[\"length\"] extends N ? [...R, ...T[]] : _TupleOfAtLeast<T, N, [T, ...R]>;\n"],"mappings":";;AAGA,IAAaE,KAAoBC,MACxBA,EAAME,SAAS;AASxB,SAAgBE,EACdC,GAC8B;AACzBA,OACL,QAAON,EAAcM,EAAI,GAAGA,IAAMC,KAAAA;;AAUpC,SAAgBK,EACdX,GACAQ,GACqC;AACrC,QAAOR,EAAME,UAAUM"}
1
+ {"version":3,"file":"tuple.js","names":["assert","NonEmptyArray","isFilledArray","array","T","length","assertFilledArray","nonEmptyArrayOrUndefined","arr","undefined","isTupleOfLength","len","N","TupleOfLength","isTupleAtLeastLength","TupleOfLengthAtLeast","_TupleOf","R","_TupleOfAtLeast"],"sources":["../../../src/lib/utils/tuple.ts"],"sourcesContent":["import { assert, type NonEmptyArray } from \"ts-essentials\";\n\n// checks that array has at least one element\nexport const isFilledArray = <T>(array: T[]): array is NonEmptyArray<T> => {\n return array.length > 0;\n};\n\nexport function assertFilledArray<T>(\n array: T[]\n): asserts array is NonEmptyArray<T> {\n assert(isFilledArray(array), \"array must not be empty\");\n}\n\nexport function nonEmptyArrayOrUndefined<T>(\n arr?: T[]\n): NonEmptyArray<T> | undefined {\n if (!arr) return;\n return isFilledArray(arr) ? arr : undefined;\n}\n\nexport function isTupleOfLength<T, N extends number>(\n array: T[],\n len: N\n): array is TupleOfLength<T, N> {\n return array.length === len;\n}\n\nexport function isTupleAtLeastLength<T, N extends number>(\n array: T[],\n len: N\n): array is TupleOfLengthAtLeast<T, N> {\n return array.length >= len;\n}\n\n// based on https://stackoverflow.com/a/52490977/7316062\nexport type TupleOfLength<T, N extends number> = number extends N\n ? never\n : _TupleOf<T, N, []>;\ntype _TupleOf<T, N extends number, R extends unknown[]> = R[\"length\"] extends N\n ? R\n : _TupleOf<T, N, [T, ...R]>;\n\nexport type TupleOfLengthAtLeast<T, N extends number> = number extends N\n ? never\n : _TupleOfAtLeast<T, N, []>;\ntype _TupleOfAtLeast<\n T,\n N extends number,\n R extends unknown[],\n> = R[\"length\"] extends N ? [...R, ...T[]] : _TupleOfAtLeast<T, N, [T, ...R]>;\n"],"mappings":";;AAGA,IAAaE,KAAoBC,MACxBA,EAAME,SAAS;AASxB,SAAgBE,EACdC,GAC8B;CACzBA,OACL,OAAON,EAAcM,EAAI,GAAGA,IAAMC,KAAAA;;AAUpC,SAAgBK,EACdX,GACAQ,GACqC;CACrC,OAAOR,EAAME,UAAUM"}
@@ -1 +1 @@
1
- {"version":3,"file":"twap.js","names":["DeltaOrBridgePrice","Big","millisecondsToSeconds","minutesToMilliseconds","TEN_MINUTES_MS","produceDeltaOrderDeadline","DeltaAuctionWithTwapOrder","getTwapChunkAmount","totalWei","numSlices","div","toFixed","getTotalTwapAmount","chunkWei","mul","getTwapAmountsFromPrice","price","srcAmount","destAmount","receivedDestAmount","produceTwapDeadlines","durationMin","orderDurationMs","orderDeadline","orderInterval","Math","floor","Number","getTwapAuctionDeadlines","order","createdAt","Pick","durationMs","interval","endsInMs","Date","getTime"],"sources":["../../../src/lib/utils/twap.ts"],"sourcesContent":["import type { DeltaOrBridgePrice } from \"@/hooks/swap/prices/types\";\nimport Big from \"big.js\";\nimport { millisecondsToSeconds, minutesToMilliseconds } from \"./time\";\nimport { TEN_MINUTES_MS } from \"../constants/time\";\nimport { produceDeltaOrderDeadline } from \"./delta\";\nimport type { DeltaAuctionWithTwapOrder } from \"@/hooks/swap/prices/delta/orders/types\";\n\nexport function getTwapChunkAmount({\n totalWei,\n numSlices,\n}: {\n totalWei: string;\n numSlices: number;\n}): string {\n if (numSlices <= 0 || totalWei === \"0\") return totalWei;\n return Big(totalWei).div(numSlices).toFixed(0, 0); // roundDown to avoid overestimating\n}\n\nexport function getTotalTwapAmount({\n chunkWei,\n numSlices,\n}: {\n chunkWei: string;\n numSlices: number;\n}): string {\n if (numSlices <= 0 || chunkWei === \"0\") return chunkWei;\n return Big(chunkWei).mul(numSlices).toFixed();\n}\n\nexport function getTwapAmountsFromPrice({\n price,\n numSlices,\n}: {\n price: DeltaOrBridgePrice;\n numSlices: number;\n}) {\n return {\n srcAmount: getTotalTwapAmount({ chunkWei: price.srcAmount, numSlices }),\n destAmount: getTotalTwapAmount({\n chunkWei: price.receivedDestAmount,\n numSlices,\n }),\n };\n}\nexport function produceTwapDeadlines({\n durationMin,\n numSlices,\n}: {\n durationMin: number;\n numSlices: number;\n}) {\n const orderDurationMs = minutesToMilliseconds(durationMin);\n const orderDeadline = produceDeltaOrderDeadline(\n // 10 min buffer for possible delays in order creation or slice executions\n orderDurationMs + TEN_MINUTES_MS\n );\n const orderInterval = Math.floor(\n millisecondsToSeconds(orderDurationMs) / numSlices\n );\n\n return {\n orderDeadline: Number(orderDeadline),\n orderInterval,\n };\n}\n\nexport function getTwapAuctionDeadlines({\n order,\n createdAt,\n}: Pick<DeltaAuctionWithTwapOrder, \"order\" | \"createdAt\">) {\n const durationMs = order.numSlices * order.interval * 1000;\n const endsInMs = new Date(createdAt).getTime() + durationMs;\n return { endsInMs, durationMs };\n}\n"],"mappings":";;;;;AAOA,SAAgBO,EAAmB,EACjCC,aACAC,gBAIS;AAET,QADIA,KAAa,KAAKD,MAAa,MAAYA,IACxCP,EAAIO,EAAS,CAACE,IAAID,EAAU,CAACE,QAAQ,GAAG,EAAE;;AAGnD,SAAgBC,EAAmB,EACjCC,aACAJ,gBAIS;AAET,QADIA,KAAa,KAAKI,MAAa,MAAYA,IACxCZ,EAAIY,EAAS,CAACC,IAAIL,EAAU,CAACE,SAAS;;AAG/C,SAAgBI,EAAwB,EACtCC,UACAP,gBAIC;AACD,QAAO;EACLQ,WAAWL,EAAmB;GAAEC,UAAUG,EAAMC;GAAWR;GAAW,CAAC;EACvES,YAAYN,EAAmB;GAC7BC,UAAUG,EAAMG;GAChBV;GACD,CAAA;EACF;;AAEH,SAAgBW,EAAqB,EACnCC,gBACAZ,gBAIC;CACD,IAAMa,IAAkBnB,EAAsBkB,EAAY,EACpDE,IAAgBlB,EAEpBiB,IAAkBlB,EACnB,EACKoB,IAAgBC,KAAKC,MACzBxB,EAAsBoB,EAAgB,GAAGb,EAC1C;AAED,QAAO;EACLc,eAAeI,OAAOJ,EAAc;EACpCC;EACD;;AAGH,SAAgBI,EAAwB,EACtCC,UACAC,gBACyD;CACzD,IAAME,IAAaH,EAAMpB,YAAYoB,EAAMI,WAAW;AAEtD,QAAO;EAAEC,UADQ,IAAIC,KAAKL,EAAU,CAACM,SAAS,GAAGJ;EAC9BA;EAAY"}
1
+ {"version":3,"file":"twap.js","names":["DeltaOrBridgePrice","Big","millisecondsToSeconds","minutesToMilliseconds","TEN_MINUTES_MS","produceDeltaOrderDeadline","DeltaAuctionWithTwapOrder","getTwapChunkAmount","totalWei","numSlices","div","toFixed","getTotalTwapAmount","chunkWei","mul","getTwapAmountsFromPrice","price","srcAmount","destAmount","receivedDestAmount","produceTwapDeadlines","durationMin","orderDurationMs","orderDeadline","orderInterval","Math","floor","Number","getTwapAuctionDeadlines","order","createdAt","Pick","durationMs","interval","endsInMs","Date","getTime"],"sources":["../../../src/lib/utils/twap.ts"],"sourcesContent":["import type { DeltaOrBridgePrice } from \"@/hooks/swap/prices/types\";\nimport Big from \"big.js\";\nimport { millisecondsToSeconds, minutesToMilliseconds } from \"./time\";\nimport { TEN_MINUTES_MS } from \"../constants/time\";\nimport { produceDeltaOrderDeadline } from \"./delta\";\nimport type { DeltaAuctionWithTwapOrder } from \"@/hooks/swap/prices/delta/orders/types\";\n\nexport function getTwapChunkAmount({\n totalWei,\n numSlices,\n}: {\n totalWei: string;\n numSlices: number;\n}): string {\n if (numSlices <= 0 || totalWei === \"0\") return totalWei;\n return Big(totalWei).div(numSlices).toFixed(0, 0); // roundDown to avoid overestimating\n}\n\nexport function getTotalTwapAmount({\n chunkWei,\n numSlices,\n}: {\n chunkWei: string;\n numSlices: number;\n}): string {\n if (numSlices <= 0 || chunkWei === \"0\") return chunkWei;\n return Big(chunkWei).mul(numSlices).toFixed();\n}\n\nexport function getTwapAmountsFromPrice({\n price,\n numSlices,\n}: {\n price: DeltaOrBridgePrice;\n numSlices: number;\n}) {\n return {\n srcAmount: getTotalTwapAmount({ chunkWei: price.srcAmount, numSlices }),\n destAmount: getTotalTwapAmount({\n chunkWei: price.receivedDestAmount,\n numSlices,\n }),\n };\n}\nexport function produceTwapDeadlines({\n durationMin,\n numSlices,\n}: {\n durationMin: number;\n numSlices: number;\n}) {\n const orderDurationMs = minutesToMilliseconds(durationMin);\n const orderDeadline = produceDeltaOrderDeadline(\n // 10 min buffer for possible delays in order creation or slice executions\n orderDurationMs + TEN_MINUTES_MS\n );\n const orderInterval = Math.floor(\n millisecondsToSeconds(orderDurationMs) / numSlices\n );\n\n return {\n orderDeadline: Number(orderDeadline),\n orderInterval,\n };\n}\n\nexport function getTwapAuctionDeadlines({\n order,\n createdAt,\n}: Pick<DeltaAuctionWithTwapOrder, \"order\" | \"createdAt\">) {\n const durationMs = order.numSlices * order.interval * 1000;\n const endsInMs = new Date(createdAt).getTime() + durationMs;\n return { endsInMs, durationMs };\n}\n"],"mappings":";;;;;AAOA,SAAgBO,EAAmB,EACjCC,aACAC,gBAIS;CAET,OADIA,KAAa,KAAKD,MAAa,MAAYA,IACxCP,EAAIO,EAAS,CAACE,IAAID,EAAU,CAACE,QAAQ,GAAG,EAAE;;AAGnD,SAAgBC,EAAmB,EACjCC,aACAJ,gBAIS;CAET,OADIA,KAAa,KAAKI,MAAa,MAAYA,IACxCZ,EAAIY,EAAS,CAACC,IAAIL,EAAU,CAACE,SAAS;;AAG/C,SAAgBI,EAAwB,EACtCC,UACAP,gBAIC;CACD,OAAO;EACLQ,WAAWL,EAAmB;GAAEC,UAAUG,EAAMC;GAAWR;GAAW,CAAC;EACvES,YAAYN,EAAmB;GAC7BC,UAAUG,EAAMG;GAChBV;GACD,CAAA;EACF;;AAEH,SAAgBW,EAAqB,EACnCC,gBACAZ,gBAIC;CACD,IAAMa,IAAkBnB,EAAsBkB,EAAY,EACpDE,IAAgBlB,EAEpBiB,IAAkBlB,EACnB,EACKoB,IAAgBC,KAAKC,MACzBxB,EAAsBoB,EAAgB,GAAGb,EAC1C;CAED,OAAO;EACLc,eAAeI,OAAOJ,EAAc;EACpCC;EACD;;AAGH,SAAgBI,EAAwB,EACtCC,UACAC,gBACyD;CACzD,IAAME,IAAaH,EAAMpB,YAAYoB,EAAMI,WAAW;CAEtD,OAAO;EAAEC,UADQ,IAAIC,KAAKL,EAAU,CAACM,SAAS,GAAGJ;EAC9BA;EAAY"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDateNow.js","names":["useDateNow","Date","now"],"sources":["../../../src/lib/utils/useDateNow.ts"],"sourcesContent":["// workaround for react-compiler trying to memoize Date.now() result based on an unrelated cached value\nexport function useDateNow(): number {\n \"use no memo\";\n return Date.now();\n}\n"],"mappings":";AACA,SAAgBA,IAAqB;AACnC;AACA,QAAOC,KAAKC,KAAK"}
1
+ {"version":3,"file":"useDateNow.js","names":["useDateNow","Date","now"],"sources":["../../../src/lib/utils/useDateNow.ts"],"sourcesContent":["// workaround for react-compiler trying to memoize Date.now() result based on an unrelated cached value\nexport function useDateNow(): number {\n \"use no memo\";\n return Date.now();\n}\n"],"mappings":";AACA,SAAgBA,IAAqB;AACnC;CACA,OAAOC,KAAKC,KAAK"}
@@ -1135,22 +1135,4 @@ declare module "wagmi" {
1135
1135
  config: typeof wagmiConfig;
1136
1136
  }
1137
1137
  }
1138
- /**
1139
- * Normal flow:
1140
- * 1. connector.setup() (optional func) is called on connector creation inside wagmi config
1141
- * 1.1. connector.getProvider() is called inside connector.setup() (usually)
1142
- * 2. connector.getProvider() is called inside reconnect in wagmi config
1143
- * 3. connector.connect() is called on wallet connection
1144
- * 3.1. connector.getProvider() is called inside connector.connect()
1145
- *
1146
- * if getProvider contains some singleton init logic, it may break if called again in a different context:
1147
- * e.g. WalletConnect connection in Widget + in integrating app.
1148
- * WConnectProvider.init() called inside Widget and in the integrating App can interfere with each other,
1149
- * especially if inside Widget is called first.
1150
- *
1151
- * Delayed flow:
1152
- * 1. connector.setup removed
1153
- * 2. connector.getProvider() throws until connector.connect() is called (drawback:this disables reconnection on page load)
1154
- * 3. connector.getProvider() is called on wallet connection inside connector.connect()
1155
- */
1156
1138
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/lib/web3/wagmi/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/lib/web3/wagmi/config.ts"],"names":[],"mappings":"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"}
@@ -3,22 +3,35 @@ import { LOCAL_STORAGE_PREFIX as t } from "../../constants/storage.js";
3
3
  import { chains as n } from "./constants.js";
4
4
  import { transports as r } from "./transports.js";
5
5
  import { createConfig as i, createStorage as a } from "wagmi";
6
- import { coinbaseWallet as o, injected as s, safe as c } from "wagmi/connectors";
6
+ import { coinbaseWallet as o, injected as s, safe as c, walletConnect as l } from "wagmi/connectors";
7
7
  //#region src/lib/web3/wagmi/config.ts
8
- var l = [s(), o()];
9
- e && l.unshift(c());
10
- var u = i({
8
+ var u = [
9
+ f(l({ projectId: "7535ce67d223b89670980f2442899904" })),
10
+ s(),
11
+ o()
12
+ ];
13
+ e && u.unshift(c());
14
+ var d = i({
11
15
  storage: a({
12
16
  storage: typeof window < "u" ? window.localStorage : void 0,
13
17
  key: `${t}_wagmi`
14
18
  }),
15
19
  chains: n,
16
- connectors: l,
20
+ connectors: u,
17
21
  transports: r,
18
22
  syncConnectedChain: !1,
19
23
  batch: { multicall: { wait: 20 } }
20
24
  });
25
+ function f(e) {
26
+ return ((t) => {
27
+ let n = e(t), r = { ...n }, i = !1;
28
+ return r.connect = async (...e) => (i || (i = !0, await n.setup?.()), n.connect(...e)), r.getProvider = async (...e) => {
29
+ if (!i) throw Error("Provider not available until connector.connect() is called");
30
+ return n.getProvider(...e);
31
+ }, delete r.setup, r;
32
+ });
33
+ }
21
34
  //#endregion
22
- export { u as wagmiConfig };
35
+ export { d as wagmiConfig };
23
36
 
24
37
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","names":["createConfig","createStorage","CreateConnectorFn","injected","safe","coinbaseWallet","chains","transports","isInIframe","LOCAL_STORAGE_PREFIX","connectors","unshift","wagmiConfig","storage","window","localStorage","undefined","key","syncConnectedChain","batch","multicall","wait","Register","config"],"sources":["../../../../src/lib/web3/wagmi/config.ts"],"sourcesContent":["import { createConfig, createStorage, type CreateConnectorFn } from \"wagmi\";\nimport {\n injected,\n // metaMask,\n safe,\n // walletConnect,\n coinbaseWallet,\n} from \"wagmi/connectors\";\nimport { chains } from \"./constants\";\nimport { transports } from \"./transports\";\nimport { isInIframe } from \"./isInIframe\";\nimport { LOCAL_STORAGE_PREFIX } from \"@/lib/constants/storage\";\n\n// can add more connectors to cover wallets Privy doesn't support, but need to change UI to allow connection\nconst connectors = [\n // delayConnector(\n // walletConnect({\n // projectId: import.meta.env.VITE_WALLET_CONNECT_ID,\n // }) as CreateConnectorFn\n // ),\n injected() as CreateConnectorFn,\n // metaMask() as CreateConnectorFn, // injected() detects metamask already\n coinbaseWallet() as CreateConnectorFn,\n // raw returned types result in\n // The inferred type of 'config' cannot be named without a reference to '.pnpm/@safe-global+safe-apps-provider@0.18.6_typescript@5.8.3/node_modules/@safe-global/safe-apps-provider'. This is likely not portable. A type annotation is necessary.\n\n // getPrivyWalletConnector(), // only CorssApp Privy connector is available, not our use case\n];\n// @TODO see how we can implement Ledger connector, borrow it from rainbowkit?\n\nif (isInIframe) {\n // when widget is in an App inside iframe, chances are we are in Safe web app,\n // allow Safe connector to be used.\n // we can't know if we are inside specifically Safe iframe until we try to connect, though.\n // A check for that is in isInsideSafeIframe.ts\n connectors.unshift(safe());\n}\n\nexport const wagmiConfig = createConfig({\n storage: createStorage({\n storage: typeof window !== \"undefined\" ? window.localStorage : undefined,\n key: `${LOCAL_STORAGE_PREFIX}_wagmi`,\n }),\n chains,\n connectors,\n transports,\n syncConnectedChain: false,\n batch: {\n multicall: {\n wait: 20,\n },\n },\n});\n\ndeclare module \"wagmi\" {\n interface Register {\n config: typeof wagmiConfig;\n }\n}\n\n/**\n * Normal flow:\n * 1. connector.setup() (optional func) is called on connector creation inside wagmi config\n * 1.1. connector.getProvider() is called inside connector.setup() (usually)\n * 2. connector.getProvider() is called inside reconnect in wagmi config\n * 3. connector.connect() is called on wallet connection\n * 3.1. connector.getProvider() is called inside connector.connect()\n *\n * if getProvider contains some singleton init logic, it may break if called again in a different context:\n * e.g. WalletConnect connection in Widget + in integrating app.\n * WConnectProvider.init() called inside Widget and in the integrating App can interfere with each other,\n * especially if inside Widget is called first.\n *\n * Delayed flow:\n * 1. connector.setup removed\n * 2. connector.getProvider() throws until connector.connect() is called (drawback:this disables reconnection on page load)\n * 3. connector.getProvider() is called on wallet connection inside connector.connect()\n */\n/* function delayConnector<C extends CreateConnectorFn>(connectorFn: C): C {\n const modifiedFn = ((config) => {\n const connector = connectorFn(config);\n const modified = {\n ...connector,\n };\n\n let connectCalled = false;\n\n modified.connect = async (...args) => {\n if (!connectCalled) {\n // first call to connect() will call setup() that was skipped in delayed flow\n connectCalled = true;\n await connector.setup?.(); // getProvvider is called inside setup(), at least in WalletConnect connector\n }\n return connector.connect(...args);\n };\n\n modified.getProvider = async (...args) => {\n // disallow provider specific logic until connect() is called explicitly\n if (!connectCalled) {\n throw new Error(\n \"Provider not available until connector.connect() is called\"\n );\n }\n return connector.getProvider(...args);\n };\n\n delete modified.setup;\n return modified;\n }) as C;\n\n return modifiedFn;\n}\n */\n"],"mappings":";;;;;;;AAcA,IAAMU,IAAa,CAMjBP,GAAU,EAEVE,GAAgB,CAKjB;AAGGG,KAKFE,EAAWC,QAAQP,GAAM,CAAC;AAG5B,IAAaQ,IAAcZ,EAAa;CACtCa,SAASZ,EAAc;EACrBY,SAAS,OAAOC,SAAW,MAAcA,OAAOC,eAAeC,KAAAA;EAC/DC,KAAK,GAAGR,EAAoB;EAC7B,CAAC;CACFH;CACAI;CACAH;CACAW,oBAAoB;CACpBC,OAAO,EACLC,WAAW,EACTC,MAAM,IACR,EACF;CACD,CAAC"}
1
+ {"version":3,"file":"config.js","names":["createConfig","createStorage","CreateConnectorFn","injected","safe","walletConnect","coinbaseWallet","chains","transports","isInIframe","LOCAL_STORAGE_PREFIX","connectors","delayConnector","projectId","import","meta","env","VITE_WALLET_CONNECT_ID","unshift","wagmiConfig","storage","window","localStorage","undefined","key","syncConnectedChain","batch","multicall","wait","Register","config","connectorFn","C","modifiedFn","connector","modified","connectCalled","connect","args","setup","getProvider","Error"],"sources":["../../../../src/lib/web3/wagmi/config.ts"],"sourcesContent":["import { createConfig, createStorage, type CreateConnectorFn } from \"wagmi\";\nimport {\n injected,\n // metaMask,\n safe,\n walletConnect,\n coinbaseWallet,\n} from \"wagmi/connectors\";\nimport { chains } from \"./constants\";\nimport { transports } from \"./transports\";\nimport { isInIframe } from \"./isInIframe\";\nimport { LOCAL_STORAGE_PREFIX } from \"@/lib/constants/storage\";\n\n// can add more connectors to cover wallets Privy doesn't support, but need to change UI to allow connection\nconst connectors = [\n delayConnector(\n walletConnect({\n projectId: import.meta.env.VITE_WALLET_CONNECT_ID,\n }) as CreateConnectorFn\n ),\n injected() as CreateConnectorFn,\n // metaMask() as CreateConnectorFn, // injected() detects metamask already\n coinbaseWallet() as CreateConnectorFn,\n // raw returned types result in\n // The inferred type of 'config' cannot be named without a reference to '.pnpm/@safe-global+safe-apps-provider@0.18.6_typescript@5.8.3/node_modules/@safe-global/safe-apps-provider'. This is likely not portable. A type annotation is necessary.\n\n // getPrivyWalletConnector(), // only CorssApp Privy connector is available, not our use case\n];\n// @TODO see how we can implement Ledger connector, borrow it from rainbowkit?\n\nif (isInIframe) {\n // when widget is in an App inside iframe, chances are we are in Safe web app,\n // allow Safe connector to be used.\n // we can't know if we are inside specifically Safe iframe until we try to connect, though.\n // A check for that is in isInsideSafeIframe.ts\n connectors.unshift(safe());\n}\n\nexport const wagmiConfig = createConfig({\n storage: createStorage({\n storage: typeof window !== \"undefined\" ? window.localStorage : undefined,\n key: `${LOCAL_STORAGE_PREFIX}_wagmi`,\n }),\n chains,\n connectors,\n transports,\n syncConnectedChain: false,\n batch: {\n multicall: {\n wait: 20,\n },\n },\n});\n\ndeclare module \"wagmi\" {\n interface Register {\n config: typeof wagmiConfig;\n }\n}\n\n/**\n * Normal flow:\n * 1. connector.setup() (optional func) is called on connector creation inside wagmi config\n * 1.1. connector.getProvider() is called inside connector.setup() (usually)\n * 2. connector.getProvider() is called inside reconnect in wagmi config\n * 3. connector.connect() is called on wallet connection\n * 3.1. connector.getProvider() is called inside connector.connect()\n *\n * if getProvider contains some singleton init logic, it may break if called again in a different context:\n * e.g. WalletConnect connection in Widget + in integrating app.\n * WConnectProvider.init() called inside Widget and in the integrating App can interfere with each other,\n * especially if inside Widget is called first.\n *\n * Delayed flow:\n * 1. connector.setup removed\n * 2. connector.getProvider() throws until connector.connect() is called (drawback:this disables reconnection on page load)\n * 3. connector.getProvider() is called on wallet connection inside connector.connect()\n */\nfunction delayConnector<C extends CreateConnectorFn>(connectorFn: C): C {\n const modifiedFn = ((config) => {\n const connector = connectorFn(config);\n const modified = {\n ...connector,\n };\n\n let connectCalled = false;\n\n modified.connect = async (...args) => {\n if (!connectCalled) {\n // first call to connect() will call setup() that was skipped in delayed flow\n connectCalled = true;\n await connector.setup?.(); // getProvvider is called inside setup(), at least in WalletConnect connector\n }\n return connector.connect(...args);\n };\n\n modified.getProvider = async (...args) => {\n // disallow provider specific logic until connect() is called explicitly\n if (!connectCalled) {\n throw new Error(\n \"Provider not available until connector.connect() is called\"\n );\n }\n return connector.getProvider(...args);\n };\n\n delete modified.setup;\n return modified;\n }) as C;\n\n return modifiedFn;\n}\n"],"mappings":";;;;;;;AAcA,IAAMW,IAAa;CACjBC,EACEP,EAAc,EACZQ,WAAAA,oCACD,CAAC,CACH;CACDV,GAAU;CAEVG,GAAgB;CAKjB;AAGGG,KAKFE,EAAWO,QAAQd,GAAM,CAAC;AAG5B,IAAae,IAAcnB,EAAa;CACtCoB,SAASnB,EAAc;EACrBmB,SAAS,OAAOC,SAAW,MAAcA,OAAOC,eAAeC,KAAAA;EAC/DC,KAAK,GAAGd,EAAoB;EAC7B,CAAC;CACFH;CACAI;CACAH;CACAiB,oBAAoB;CACpBC,OAAO,EACLC,WAAW,EACTC,MAAM,IACR,EACF;CACD,CAAC;AA0BF,SAAShB,EAA4CmB,GAAmB;CAgCtE,SA/BqBD,MAAW;EAC9B,IAAMI,IAAYH,EAAYD,EAAO,EAC/BK,IAAW,EACf,GAAGD,GACJ,EAEGE,IAAgB;EAsBpB,OApBAD,EAASE,UAAU,OAAO,GAAGC,OACtBF,MAEHA,IAAgB,IAChB,MAAMF,EAAUK,SAAS,GAEpBL,EAAUG,QAAQ,GAAGC,EAAK,GAGnCH,EAASK,cAAc,OAAO,GAAGF,MAAS;GAExC,IAAI,CAACF,GACH,MAAUK,MACR,6DACD;GAEH,OAAOP,EAAUM,YAAY,GAAGF,EAAK;KAGvC,OAAOH,EAASI,OACTJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"external.js","names":["getAccount","wagmiConfig","atom","atomWithCompare","constructPropertiesEqual","isConnectorWithSafeProvider","isWalletConnectConnectorWithSafe","loadable","getMinAccount","address","chainId","connector","accountAtom","addressAtom","get","isConnectorWithSafeAsyncAtom","isConnectorWithSafeAsyncAtomLoadableAtom"],"sources":["../../../../src/lib/web3/wagmi/external.ts"],"sourcesContent":["import { getAccount } from \"@wagmi/core\";\nimport { wagmiConfig } from \"./config\";\nimport { atom } from \"jotai\";\nimport { atomWithCompare } from \"@/lib/utils/atomWithCompare\";\nimport { constructPropertiesEqual } from \"@/lib/utils\";\nimport { isConnectorWithSafeProvider } from \"@/components/web3/ConnectExternalProvider/utils\";\nimport { isWalletConnectConnectorWithSafe } from \"@/hooks/connectors/useIsSafeThroughWalletConnect\";\nimport { loadable } from \"jotai/utils\";\n\nfunction getMinAccount() {\n const { address, chainId, connector } = getAccount(wagmiConfig);\n return { address, chainId, connector };\n}\n\nexport const accountAtom = atomWithCompare(\n getMinAccount(),\n constructPropertiesEqual([\"address\", \"chainId\", \"connector\"])\n);\n\nexport const addressAtom = atom((get) => get(accountAtom).address);\n\nconst isConnectorWithSafeAsyncAtom = atom(async (get) => {\n const { connector } = get(accountAtom);\n if (!connector) return false;\n return (\n isConnectorWithSafeProvider(connector) ||\n isWalletConnectConnectorWithSafe(connector)\n );\n});\n\nexport const isConnectorWithSafeAsyncAtomLoadableAtom = loadable(\n isConnectorWithSafeAsyncAtom\n);\n"],"mappings":";;;;;;;;;AASA,SAASQ,IAAgB;CACvB,IAAM,EAAEC,YAASC,YAASC,iBAAcX,EAAWC,EAAY;AAC/D,QAAO;EAAEQ;EAASC;EAASC;EAAW;;AAGxC,IAAaC,IAAcT,EACzBK,GAAe,EACfJ,EAAyB;CAAC;CAAW;CAAW;CAAY,CAC9D,CAAC,EAEYS,IAAcX,GAAMY,MAAQA,EAAIF,EAAY,CAACH,QAAQ,EAWrDO,IAA2CT,EATnBL,EAAK,OAAOY,MAAQ;CACvD,IAAM,EAAEH,iBAAcG,EAAIF,EAAY;AAEtC,QADKD,IAEHN,EAA4BM,EAAU,IACtCL,EAAiCK,EAAU,GAHtB;EAKvB,CAID"}
1
+ {"version":3,"file":"external.js","names":["getAccount","wagmiConfig","atom","atomWithCompare","constructPropertiesEqual","isConnectorWithSafeProvider","isWalletConnectConnectorWithSafe","loadable","getMinAccount","address","chainId","connector","accountAtom","addressAtom","get","isConnectorWithSafeAsyncAtom","isConnectorWithSafeAsyncAtomLoadableAtom"],"sources":["../../../../src/lib/web3/wagmi/external.ts"],"sourcesContent":["import { getAccount } from \"@wagmi/core\";\nimport { wagmiConfig } from \"./config\";\nimport { atom } from \"jotai\";\nimport { atomWithCompare } from \"@/lib/utils/atomWithCompare\";\nimport { constructPropertiesEqual } from \"@/lib/utils\";\nimport { isConnectorWithSafeProvider } from \"@/components/web3/ConnectExternalProvider/utils\";\nimport { isWalletConnectConnectorWithSafe } from \"@/hooks/connectors/useIsSafeThroughWalletConnect\";\nimport { loadable } from \"jotai/utils\";\n\nfunction getMinAccount() {\n const { address, chainId, connector } = getAccount(wagmiConfig);\n return { address, chainId, connector };\n}\n\nexport const accountAtom = atomWithCompare(\n getMinAccount(),\n constructPropertiesEqual([\"address\", \"chainId\", \"connector\"])\n);\n\nexport const addressAtom = atom((get) => get(accountAtom).address);\n\nconst isConnectorWithSafeAsyncAtom = atom(async (get) => {\n const { connector } = get(accountAtom);\n if (!connector) return false;\n return (\n isConnectorWithSafeProvider(connector) ||\n isWalletConnectConnectorWithSafe(connector)\n );\n});\n\nexport const isConnectorWithSafeAsyncAtomLoadableAtom = loadable(\n isConnectorWithSafeAsyncAtom\n);\n"],"mappings":";;;;;;;;;AASA,SAASQ,IAAgB;CACvB,IAAM,EAAEC,YAASC,YAASC,iBAAcX,EAAWC,EAAY;CAC/D,OAAO;EAAEQ;EAASC;EAASC;EAAW;;AAGxC,IAAaC,IAAcT,EACzBK,GAAe,EACfJ,EAAyB;CAAC;CAAW;CAAW;CAAY,CAC9D,CAAC,EAEYS,IAAcX,GAAMY,MAAQA,EAAIF,EAAY,CAACH,QAAQ,EAWrDO,IAA2CT,EATnBL,EAAK,OAAOY,MAAQ;CACvD,IAAM,EAAEH,iBAAcG,EAAIF,EAAY;CAEtC,OADKD,IAEHN,EAA4BM,EAAU,IACtCL,EAAiCK,EAAU,GAHtB;EAQvBI,CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"isInsideSafeIframe.js","names":["getLogger","useQuery","withTimeout","isInIframe","SafeInfo","safeAddress","chainId","threshold","owners","isReadOnly","SafeInfoExtended","nonce","implementation","modules","fallbackHandler","guard","version","SafeMessageEvent","id","data","T","success","error","SafeRequest","method","params","env","sdkVersion","logger","useSafeInfo","$","_c","t0","Symbol","for","t1","queryKey","queryFn","_temp","staleTime","Infinity","gcTime","initialData","undefined","isLoading","isSuccess","isError","error_0","t2","errorInstance","Error","safeInfo","requestSafeInfo","timeout","signal","info","AbortSignal","Promise","request","Date","getTime","toString","resolve","reject","listener","event","MessageEvent","window","removeEventListener","addEventListener","reason","parent","postMessage"],"sources":["../../../../src/lib/web3/wagmi/isInsideSafeIframe.ts"],"sourcesContent":["import { getLogger } from \"@/core/logger\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { withTimeout } from \"viem\";\nimport { isInIframe } from \"./isInIframe\";\n\ntype SafeInfo = {\n safeAddress: string;\n chainId: number;\n threshold: number;\n owners: string[];\n isReadOnly: boolean;\n};\n\ntype SafeInfoExtended = SafeInfo & {\n nonce: number;\n implementation: string;\n modules: string[] | null;\n fallbackHandler: string | null;\n guard: string | null;\n version: string | null;\n};\n\ntype SafeMessageEvent<T = unknown> = {\n id: string;\n data: T;\n version?: string;\n success: boolean;\n error?: string;\n};\n\ntype SafeRequest = {\n id: string;\n method: string;\n params: undefined;\n env: {\n sdkVersion: string;\n };\n};\n\nconst logger = getLogger(\"SafeWallet\");\n\nexport function useSafeInfo(): {\n data?: SafeInfoExtended | null;\n isLoading: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n} {\n const { data, isLoading, isSuccess, isError, error } = useQuery({\n queryKey: [\"safeInfo\"],\n queryFn: async () => {\n if (isInIframe) {\n const errorInstance = new Error(\"Safe info request timed out\");\n try {\n const safeInfo = await withTimeout(requestSafeInfo, {\n timeout: 200,\n signal: true,\n // non-safe iframe will never answer the request, so we need to timeout\n errorInstance,\n });\n\n logger.info(\"Safe info request successful\", safeInfo);\n\n return safeInfo;\n } catch (error) {\n if (error === errorInstance) {\n logger.info(\"Safe Wallet not detected\");\n return null;\n }\n\n logger.error(\"Safe info request failed\", error);\n throw error;\n }\n }\n\n return null;\n },\n staleTime: Infinity,\n gcTime: Infinity,\n // shortcut when we are not in iframe\n initialData: isInIframe ? undefined : null,\n });\n\n return { data, isLoading, isSuccess, isError, error };\n}\n\nfunction requestSafeInfo({\n signal,\n}: {\n signal: AbortSignal | null;\n}): Promise<SafeInfoExtended> {\n const request: SafeRequest = {\n id: new Date().getTime().toString(36),\n method: \"getSafeInfo\",\n params: undefined,\n env: {\n sdkVersion: \"9.1.0\", // latest version of Safe SDK\n },\n };\n\n return new Promise((resolve, reject) => {\n const listener = (\n event: MessageEvent<SafeMessageEvent<SafeInfoExtended>>\n ) => {\n if (event.data?.id === request.id) {\n window.removeEventListener(\"message\", listener);\n if (event.data.success) {\n resolve(event.data.data);\n } else {\n reject(new Error(event.data.error));\n }\n }\n };\n\n signal?.addEventListener(\"abort\", () => {\n window.removeEventListener(\"message\", listener);\n reject(signal.reason);\n });\n\n window.addEventListener(\"message\", listener);\n\n // If inside Safe iframe, Safe web app will respond to the request\n window.parent.postMessage(request, \"*\");\n });\n}\n"],"mappings":";;;;;;AAuCA,IAAM4B,IAAS5B,EAAU,aAAa;AAEtC,SAAO6B,IAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EAAAC;AAAA,CAAAF,EAAA,OAAAG,OAAAC,IAAA,4BAAA,IAQOF,IAAA,CAAC,WAAW,EAAAF,EAAA,KAAAE,KAAAA,IAAAF,EAAA;CAAA,IAAAK;AAAA,CAAAL,EAAA,OAAAG,OAAAC,IAAA,4BAAA,IADwCC,IAAA;EAAAC,UACpDJ;EAAYK,SACbC;EA0BRC,WACUC;EAAQC,QACXD;EAAQE,aAEHvC,IAAAwC,KAAAA,IAAA;EACd,EAAAb,EAAA,KAAAK,KAAAA,IAAAL,EAAA;CAjCD,IAAA,EAAAX,SAAAyB,cAAAC,cAAAC,YAAAxB,OAAAyB,MAAuD9C,EAASkC,EAiC9D,EAACa;AAEkD,QAFlDlB,EAAA,OAAAX,KAAAW,EAAA,OAAAiB,KAAAjB,EAAA,OAAAgB,KAAAhB,EAAA,OAAAc,KAAAd,EAAA,OAAAe,KAEIG,IAAA;EAAA7B;EAAAyB;EAAAC;EAAAC;EAAAxB,OAAuCA;EAAO,EAAAQ,EAAA,KAAAX,GAAAW,EAAA,KAAAiB,GAAAjB,EAAA,KAAAgB,GAAAhB,EAAA,KAAAc,GAAAd,EAAA,KAAAe,GAAAf,EAAA,KAAAkB,KAAAA,IAAAlB,EAAA,IAA9CkB;;AA1CF,eAAAV,IAAA;AAUD,KAAInC,GAAU;EACZ,IAAA8C,IAAsB,gBAAIC,MAAM,8BAA8B;AAC9D,MAAA;GACE,IAAAC,IAAiB,MAAMjD,EAAYkD,GAAiB;IAAAC,SACzC;IAAGC,QACJ;IAAIL;IAGb,CAAC;AAEmD,UAArDrB,EAAM2B,KAAM,gCAAgCJ,EAAS,EAE9CA;WAAQnB,GAAA;GACRV,IAAAA,IAAAA;AACP,OAAIA,MAAU2B,EAC2B,QAAvCrB,EAAM2B,KAAM,2BAA2B,EAChC;AAIT,SADA3B,EAAMN,MAAO,4BAA4BA,EAAM,EACzCA;;;AAET,QAEM;;AAWb,SAAS8B,EAAgB,EACvBE,aAG4B;CAC5B,IAAMI,IAAuB;EAC3BxC,qBAAI,IAAIyC,MAAM,EAACC,SAAS,CAACC,SAAS,GAAG;EACrCrC,QAAQ;EACRC,QAAQkB,KAAAA;EACRjB,KAAK,EACHC,YAAY,SACd;EACD;AAED,QAAO,IAAI8B,SAASK,GAASC,MAAW;EACtC,IAAMC,KACJC,MACG;AACH,GAAIA,EAAM9C,MAAMD,OAAOwC,EAAQxC,OAC7BiD,OAAOC,oBAAoB,WAAWJ,EAAS,EAC3CC,EAAM9C,KAAKE,UACbyC,EAAQG,EAAM9C,KAAKA,KAAK,GAExB4C,EAAWb,MAAMe,EAAM9C,KAAKG,MAAM,CAAC;;AAazC6C,EARAb,GAAQe,iBAAiB,eAAe;AAEtCN,GADAI,OAAOC,oBAAoB,WAAWJ,EAAS,EAC/CD,EAAOT,EAAOgB,OAAO;IACrB,EAEFH,OAAOE,iBAAiB,WAAWL,EAAS,EAG5CG,OAAOI,OAAOC,YAAYd,GAAS,IAAI;GACvC"}
1
+ {"version":3,"file":"isInsideSafeIframe.js","names":["getLogger","useQuery","withTimeout","isInIframe","SafeInfo","safeAddress","chainId","threshold","owners","isReadOnly","SafeInfoExtended","nonce","implementation","modules","fallbackHandler","guard","version","SafeMessageEvent","id","data","T","success","error","SafeRequest","method","params","env","sdkVersion","logger","useSafeInfo","$","_c","t0","Symbol","for","t1","queryKey","queryFn","_temp","staleTime","Infinity","gcTime","initialData","undefined","isLoading","isSuccess","isError","error_0","t2","errorInstance","Error","safeInfo","requestSafeInfo","timeout","signal","info","AbortSignal","Promise","request","Date","getTime","toString","resolve","reject","listener","event","MessageEvent","window","removeEventListener","addEventListener","reason","parent","postMessage"],"sources":["../../../../src/lib/web3/wagmi/isInsideSafeIframe.ts"],"sourcesContent":["import { getLogger } from \"@/core/logger\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { withTimeout } from \"viem\";\nimport { isInIframe } from \"./isInIframe\";\n\ntype SafeInfo = {\n safeAddress: string;\n chainId: number;\n threshold: number;\n owners: string[];\n isReadOnly: boolean;\n};\n\ntype SafeInfoExtended = SafeInfo & {\n nonce: number;\n implementation: string;\n modules: string[] | null;\n fallbackHandler: string | null;\n guard: string | null;\n version: string | null;\n};\n\ntype SafeMessageEvent<T = unknown> = {\n id: string;\n data: T;\n version?: string;\n success: boolean;\n error?: string;\n};\n\ntype SafeRequest = {\n id: string;\n method: string;\n params: undefined;\n env: {\n sdkVersion: string;\n };\n};\n\nconst logger = getLogger(\"SafeWallet\");\n\nexport function useSafeInfo(): {\n data?: SafeInfoExtended | null;\n isLoading: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n} {\n const { data, isLoading, isSuccess, isError, error } = useQuery({\n queryKey: [\"safeInfo\"],\n queryFn: async () => {\n if (isInIframe) {\n const errorInstance = new Error(\"Safe info request timed out\");\n try {\n const safeInfo = await withTimeout(requestSafeInfo, {\n timeout: 200,\n signal: true,\n // non-safe iframe will never answer the request, so we need to timeout\n errorInstance,\n });\n\n logger.info(\"Safe info request successful\", safeInfo);\n\n return safeInfo;\n } catch (error) {\n if (error === errorInstance) {\n logger.info(\"Safe Wallet not detected\");\n return null;\n }\n\n logger.error(\"Safe info request failed\", error);\n throw error;\n }\n }\n\n return null;\n },\n staleTime: Infinity,\n gcTime: Infinity,\n // shortcut when we are not in iframe\n initialData: isInIframe ? undefined : null,\n });\n\n return { data, isLoading, isSuccess, isError, error };\n}\n\nfunction requestSafeInfo({\n signal,\n}: {\n signal: AbortSignal | null;\n}): Promise<SafeInfoExtended> {\n const request: SafeRequest = {\n id: new Date().getTime().toString(36),\n method: \"getSafeInfo\",\n params: undefined,\n env: {\n sdkVersion: \"9.1.0\", // latest version of Safe SDK\n },\n };\n\n return new Promise((resolve, reject) => {\n const listener = (\n event: MessageEvent<SafeMessageEvent<SafeInfoExtended>>\n ) => {\n if (event.data?.id === request.id) {\n window.removeEventListener(\"message\", listener);\n if (event.data.success) {\n resolve(event.data.data);\n } else {\n reject(new Error(event.data.error));\n }\n }\n };\n\n signal?.addEventListener(\"abort\", () => {\n window.removeEventListener(\"message\", listener);\n reject(signal.reason);\n });\n\n window.addEventListener(\"message\", listener);\n\n // If inside Safe iframe, Safe web app will respond to the request\n window.parent.postMessage(request, \"*\");\n });\n}\n"],"mappings":";;;;;;AAuCA,IAAM4B,IAAS5B,EAAU,aAAa;AAEtC,SAAO6B,IAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EAAAC;CAAA,AAAAF,EAAA,OAAAG,OAAAC,IAAA,4BAAA,IAQOF,IAAA,CAAC,WAAW,EAAAF,EAAA,KAAAE,KAAAA,IAAAF,EAAA;CAAA,IAAAK;CAAA,AAAAL,EAAA,OAAAG,OAAAC,IAAA,4BAAA,IADwCC,IAAA;EAAAC,UACpDJ;EAAYK,SACbC;EA0BRC,WACUC;EAAQC,QACXD;EAAQE,aAEHvC,IAAAwC,KAAAA,IAAA;EACd,EAAAb,EAAA,KAAAK,KAAAA,IAAAL,EAAA;CAjCD,IAAA,EAAAX,SAAAyB,cAAAC,cAAAC,YAAAxB,OAAAyB,MAAuD9C,EAASkC,EAiC9D,EAACa;CAEkD,OAFlDlB,EAAA,OAAAX,KAAAW,EAAA,OAAAiB,KAAAjB,EAAA,OAAAgB,KAAAhB,EAAA,OAAAc,KAAAd,EAAA,OAAAe,KAEIG,IAAA;EAAA7B;EAAAyB;EAAAC;EAAAC;EAAAxB,OAAuCA;EAAO,EAAAQ,EAAA,KAAAX,GAAAW,EAAA,KAAAiB,GAAAjB,EAAA,KAAAgB,GAAAhB,EAAA,KAAAc,GAAAd,EAAA,KAAAe,GAAAf,EAAA,KAAAkB,KAAAA,IAAAlB,EAAA,IAA9CkB;;AA1CF,eAAAV,IAAA;CAUD,IAAInC,GAAU;EACZ,IAAA8C,IAAsB,gBAAIC,MAAM,8BAA8B;EAC9D,IAAA;GACE,IAAAC,IAAiB,MAAMjD,EAAYkD,GAAiB;IAAAC,SACzC;IAAGC,QACJ;IAAIL;IAGb,CAAC;GAEmD,OAArDrB,EAAM2B,KAAM,gCAAgCJ,EAAS,EAE9CA;WAAQnB,GAAA;GACRV,IAAAA,IAAAA;GACP,IAAIA,MAAU2B,GAC2B,OAAvCrB,EAAM2B,KAAM,2BAA2B,EAChC;GAIT,MADA3B,EAAMN,MAAO,4BAA4BA,EAAM,EACzCA;;;CAET,OAEM;;AAWb,SAAS8B,EAAgB,EACvBE,aAG4B;CAC5B,IAAMI,IAAuB;EAC3BxC,qBAAI,IAAIyC,MAAM,EAACC,SAAS,CAACC,SAAS,GAAG;EACrCrC,QAAQ;EACRC,QAAQkB,KAAAA;EACRjB,KAAK,EACHC,YAAY,SACd;EACD;CAED,OAAO,IAAI8B,SAASK,GAASC,MAAW;EACtC,IAAMC,KACJC,MACG;GACH,AAAIA,EAAM9C,MAAMD,OAAOwC,EAAQxC,OAC7BiD,OAAOC,oBAAoB,WAAWJ,EAAS,EAC3CC,EAAM9C,KAAKE,UACbyC,EAAQG,EAAM9C,KAAKA,KAAK,GAExB4C,EAAWb,MAAMe,EAAM9C,KAAKG,MAAM,CAAC;;EAazC6C,AARAb,GAAQe,iBAAiB,eAAe;GAEtCN,AADAI,OAAOC,oBAAoB,WAAWJ,EAAS,EAC/CD,EAAOT,EAAOgB,OAAO;IACrB,EAEFH,OAAOE,iBAAiB,WAAWL,EAAS,EAG5CG,OAAOI,OAAOC,YAAYd,GAAS,IAAI;GACvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"switchChain.js","names":["wagmi","wagmiConfig","SupportedChainId","isConnectorWithSafeIframeProvider","switchChain","chainId","connector","isConnected","getAccount","isSafeIframeProvider","setState","prev"],"sources":["../../../../src/lib/web3/wagmi/switchChain.ts"],"sourcesContent":["import * as wagmi from \"@wagmi/core\";\nimport { wagmiConfig } from \"./config\";\nimport type { SupportedChainId } from \"./types\";\nimport { isConnectorWithSafeIframeProvider } from \"@/components/web3/ConnectExternalProvider/utils\";\n\nexport async function switchChain({ chainId }: { chainId: SupportedChainId }) {\n const { connector, isConnected } = wagmi.getAccount(wagmiConfig);\n\n // check if connected to Safe iframe provider (whether through safe connector or as external provider)\n const isSafeIframeProvider =\n connector && isConnectorWithSafeIframeProvider(connector);\n\n // wagmi doesn't autoswitch state chainId with syncConnectedChain=false if connected\n if (isConnected) wagmiConfig.setState((prev) => ({ ...prev, chainId }));\n\n // safe doesn't support programmatic chain switching\n if (!isSafeIframeProvider) return wagmi.switchChain(wagmiConfig, { chainId });\n}\n"],"mappings":";;;;AAKA,eAAsBI,EAAY,EAAEC,cAA0C;CAC5E,IAAM,EAAEC,cAAWC,mBAAgBP,EAAMQ,WAAWP,EAAY,EAG1DQ,IACJH,KAAaH,EAAkCG,EAAU;AAM3D,KAHIC,KAAaN,EAAYS,UAAUC,OAAU;EAAE,GAAGA;EAAMN;EAAS,EAAE,EAGnE,CAACI,EAAsB,QAAOT,EAAMI,YAAYH,GAAa,EAAEI,YAAS,CAAC"}
1
+ {"version":3,"file":"switchChain.js","names":["wagmi","wagmiConfig","SupportedChainId","isConnectorWithSafeIframeProvider","switchChain","chainId","connector","isConnected","getAccount","isSafeIframeProvider","setState","prev"],"sources":["../../../../src/lib/web3/wagmi/switchChain.ts"],"sourcesContent":["import * as wagmi from \"@wagmi/core\";\nimport { wagmiConfig } from \"./config\";\nimport type { SupportedChainId } from \"./types\";\nimport { isConnectorWithSafeIframeProvider } from \"@/components/web3/ConnectExternalProvider/utils\";\n\nexport async function switchChain({ chainId }: { chainId: SupportedChainId }) {\n const { connector, isConnected } = wagmi.getAccount(wagmiConfig);\n\n // check if connected to Safe iframe provider (whether through safe connector or as external provider)\n const isSafeIframeProvider =\n connector && isConnectorWithSafeIframeProvider(connector);\n\n // wagmi doesn't autoswitch state chainId with syncConnectedChain=false if connected\n if (isConnected) wagmiConfig.setState((prev) => ({ ...prev, chainId }));\n\n // safe doesn't support programmatic chain switching\n if (!isSafeIframeProvider) return wagmi.switchChain(wagmiConfig, { chainId });\n}\n"],"mappings":";;;;AAKA,eAAsBI,EAAY,EAAEC,cAA0C;CAC5E,IAAM,EAAEC,cAAWC,mBAAgBP,EAAMQ,WAAWP,EAAY,EAG1DQ,IACJH,KAAaH,EAAkCG,EAAU;CAM3D,IAHIC,KAAaN,EAAYS,UAAUC,OAAU;EAAE,GAAGA;EAAMN;EAAS,EAAE,EAGnE,CAACI,GAAsB,OAAOT,EAAMI,YAAYH,GAAa,EAAEI,YAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["assert","supportedChainIds","SupportedChainId","isSupportedChainId","chainId","includes","assertSupportedChainId"],"sources":["../../../../src/lib/web3/wagmi/utils.ts"],"sourcesContent":["import { assert } from \"ts-essentials\";\nimport { supportedChainIds } from \"./constants\";\nimport type { SupportedChainId } from \"./types\";\n\nexport function isSupportedChainId(\n chainId: number\n): chainId is SupportedChainId {\n return supportedChainIds.includes(chainId as SupportedChainId);\n}\n\nexport function assertSupportedChainId(\n chainId?: number\n): asserts chainId is SupportedChainId {\n assert(\n chainId && isSupportedChainId(chainId),\n `Chain ID ${chainId} is not a supported chain ID.`\n );\n}\n"],"mappings":";;;AAIA,SAAgBG,EACdC,GAC6B;AAC7B,QAAOH,EAAkBI,SAASD,EAA4B"}
1
+ {"version":3,"file":"utils.js","names":["assert","supportedChainIds","SupportedChainId","isSupportedChainId","chainId","includes","assertSupportedChainId"],"sources":["../../../../src/lib/web3/wagmi/utils.ts"],"sourcesContent":["import { assert } from \"ts-essentials\";\nimport { supportedChainIds } from \"./constants\";\nimport type { SupportedChainId } from \"./types\";\n\nexport function isSupportedChainId(\n chainId: number\n): chainId is SupportedChainId {\n return supportedChainIds.includes(chainId as SupportedChainId);\n}\n\nexport function assertSupportedChainId(\n chainId?: number\n): asserts chainId is SupportedChainId {\n assert(\n chainId && isSupportedChainId(chainId),\n `Chain ID ${chainId} is not a supported chain ID.`\n );\n}\n"],"mappings":";;;AAIA,SAAgBG,EACdC,GAC6B;CAC7B,OAAOH,EAAkBI,SAASD,EAA4B"}