@ape.swap/bonds-sdk 6.2.1 → 6.2.3

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 (263) hide show
  1. package/dist/components/MenuSelect/MenuSelect.d.ts +1 -1
  2. package/dist/components/MenuSelect/MenuSelect.js.map +1 -1
  3. package/dist/components/ProgressBar/ProgressBarWrapper.d.ts +1 -1
  4. package/dist/components/ProgressBar/ProgressBarWrapper.js.map +1 -1
  5. package/dist/components/TokenInfoAndName/index.d.ts +0 -1
  6. package/dist/components/TokenInfoAndName/index.js +1 -1
  7. package/dist/components/TokenInfoAndName/index.js.map +1 -1
  8. package/dist/components/TokenSelectorModal/TokenRow.js +2 -2
  9. package/dist/components/TokenSelectorModal/TokenRow.js.map +1 -1
  10. package/dist/components/TokenSelectorPanel/index.js +3 -3
  11. package/dist/components/TokenSelectorPanel/index.js.map +1 -1
  12. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  13. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  14. package/dist/components/uikit-sdk/Button/Button.js +0 -36
  15. package/dist/components/uikit-sdk/Button/Button.js.map +1 -1
  16. package/dist/components/uikit-sdk/Button/types.d.ts +6 -10
  17. package/dist/components/uikit-sdk/Button/types.js +0 -5
  18. package/dist/components/uikit-sdk/Button/types.js.map +1 -1
  19. package/dist/components/uikit-sdk/Checkbox/types.d.ts +2 -1
  20. package/dist/components/uikit-sdk/Checkbox/types.js.map +1 -1
  21. package/dist/components/uikit-sdk/Skeleton/styles.d.ts +0 -12
  22. package/dist/components/uikit-sdk/Skeleton/styles.js +1 -1
  23. package/dist/components/uikit-sdk/Skeleton/styles.js.map +1 -1
  24. package/dist/components/uikit-sdk/Svg/Icons/ZapIcon.d.ts +2 -2
  25. package/dist/components/uikit-sdk/Svg/styles.d.ts +0 -2
  26. package/dist/components/uikit-sdk/Svg/styles.js.map +1 -1
  27. package/dist/components/uikit-sdk/Text/types.d.ts +1 -1
  28. package/dist/components/uikit-sdk/Text/types.js +1 -1
  29. package/dist/components/uikit-sdk/Text/types.js.map +1 -1
  30. package/dist/components/uikit-sdk/TooltipBubble/types.d.ts +2 -1
  31. package/dist/components/uikit-sdk/TooltipBubble/types.js.map +1 -1
  32. package/dist/config/constants/aptosZapTokens.d.ts +0 -9
  33. package/dist/config/constants/aptosZapTokens.js +1 -2
  34. package/dist/config/constants/aptosZapTokens.js.map +1 -1
  35. package/dist/config/constants/networks.d.ts +0 -2
  36. package/dist/config/constants/networks.js +1 -1
  37. package/dist/config/constants/networks.js.map +1 -1
  38. package/dist/config/constants/tokens.d.ts +1 -2
  39. package/dist/constants/aptosConstants.d.ts +0 -6
  40. package/dist/constants/aptosConstants.js +15 -1
  41. package/dist/constants/aptosConstants.js.map +1 -1
  42. package/dist/constants/solanaConstants.d.ts +0 -6
  43. package/dist/constants/solanaConstants.js +0 -21
  44. package/dist/constants/solanaConstants.js.map +1 -1
  45. package/dist/constants/suiConstants.d.ts +0 -5
  46. package/dist/constants/suiConstants.js +11 -0
  47. package/dist/constants/suiConstants.js.map +1 -1
  48. package/dist/hooks/useSortedZapList.d.ts +1 -1
  49. package/dist/hooks/useSortedZapList.js +1 -2
  50. package/dist/hooks/useSortedZapList.js.map +1 -1
  51. package/dist/hooks/useTokenFromZapList.js +0 -1
  52. package/dist/hooks/useTokenFromZapList.js.map +1 -1
  53. package/dist/providers/index.d.ts +11 -0
  54. package/dist/providers/index.js +0 -6
  55. package/dist/providers/index.js.map +1 -1
  56. package/dist/state/allowance/useAllowance.js +2 -3
  57. package/dist/state/allowance/useAllowance.js.map +1 -1
  58. package/dist/state/balance/useCurrencyBalance.js +2 -3
  59. package/dist/state/balance/useCurrencyBalance.js.map +1 -1
  60. package/dist/state/balance/useCurrencyBalanceAptos.js +5 -5
  61. package/dist/state/balance/useCurrencyBalanceAptos.js.map +1 -1
  62. package/dist/state/balance/useCurrencyBalanceSolana.d.ts +0 -2
  63. package/dist/state/balance/useCurrencyBalanceSolana.js +3 -6
  64. package/dist/state/balance/useCurrencyBalanceSolana.js.map +1 -1
  65. package/dist/state/balance/useCurrencyBalanceSui.js +2 -2
  66. package/dist/state/balance/useCurrencyBalanceSui.js.map +1 -1
  67. package/dist/state/balance/useUserTokensBalance.js +3 -5
  68. package/dist/state/balance/useUserTokensBalance.js.map +1 -1
  69. package/dist/state/bondApiStats/useGetBondApiStats.d.ts +0 -1
  70. package/dist/state/bondApiStats/useGetBondApiStats.js +1 -1
  71. package/dist/state/bondApiStats/useGetBondApiStats.js.map +1 -1
  72. package/dist/state/bonds/fetchBondsData/cleanBillsData.js +16 -13
  73. package/dist/state/bonds/fetchBondsData/cleanBillsData.js.map +1 -1
  74. package/dist/state/bonds/fetchBondsData/fetchBondsDataAptos.d.ts +1 -1
  75. package/dist/state/bonds/fetchBondsData/fetchBondsDataAptos.js +4 -6
  76. package/dist/state/bonds/fetchBondsData/fetchBondsDataAptos.js.map +1 -1
  77. package/dist/state/bonds/fetchBondsData/fetchBondsDataEVM.d.ts +1 -1
  78. package/dist/state/bonds/fetchBondsData/fetchBondsDataEVM.js +4 -3
  79. package/dist/state/bonds/fetchBondsData/fetchBondsDataEVM.js.map +1 -1
  80. package/dist/state/bonds/fetchBondsData/fetchBondsDataSOL.d.ts +1 -1
  81. package/dist/state/bonds/fetchBondsData/fetchBondsDataSOL.js +2 -3
  82. package/dist/state/bonds/fetchBondsData/fetchBondsDataSOL.js.map +1 -1
  83. package/dist/state/bonds/fetchBondsData/fetchBondsDataSui.d.ts +1 -1
  84. package/dist/state/bonds/fetchBondsData/fetchBondsDataSui.js +5 -7
  85. package/dist/state/bonds/fetchBondsData/fetchBondsDataSui.js.map +1 -1
  86. package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsEVM.d.ts +1 -2
  87. package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsEVM.js +2 -5
  88. package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsEVM.js.map +1 -1
  89. package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsSOL.js +2 -5
  90. package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsSOL.js.map +1 -1
  91. package/dist/state/bonds/useBondsList.d.ts +1 -2
  92. package/dist/state/bonds/useBondsList.js +1 -1
  93. package/dist/state/bonds/useBondsList.js.map +1 -1
  94. package/dist/state/bonds/useBondsListPreTGE.d.ts +1 -2
  95. package/dist/state/bonds/useBondsListPreTGE.js +1 -1
  96. package/dist/state/bonds/useBondsListPreTGE.js.map +1 -1
  97. package/dist/state/bonds/useTierProofSignature.d.ts +0 -1
  98. package/dist/state/bonds/useTierProofSignature.js +1 -1
  99. package/dist/state/bonds/useTierProofSignature.js.map +1 -1
  100. package/dist/state/bonds/useUserBondsPreTGE.d.ts +3 -4
  101. package/dist/state/bonds/useUserBondsPreTGE.js +4 -7
  102. package/dist/state/bonds/useUserBondsPreTGE.js.map +1 -1
  103. package/dist/state/historicalPrice/useHistoricalPrice.d.ts +1 -2
  104. package/dist/state/historicalPrice/useHistoricalPrice.js +1 -1
  105. package/dist/state/historicalPrice/useHistoricalPrice.js.map +1 -1
  106. package/dist/state/hotBonds/useHotBonds.d.ts +0 -2
  107. package/dist/state/hotBonds/useHotBonds.js +1 -1
  108. package/dist/state/hotBonds/useHotBonds.js.map +1 -1
  109. package/dist/state/price/useCurrencyPrice.js +1 -2
  110. package/dist/state/price/useCurrencyPrice.js.map +1 -1
  111. package/dist/state/recommendations/useGetBondRecommendations.d.ts +0 -1
  112. package/dist/state/recommendations/useGetBondRecommendations.js +1 -1
  113. package/dist/state/recommendations/useGetBondRecommendations.js.map +1 -1
  114. package/dist/state/tiers/useTierPoints.d.ts +0 -6
  115. package/dist/state/tiers/useTierPoints.js +16 -17
  116. package/dist/state/tiers/useTierPoints.js.map +1 -1
  117. package/dist/state/zap/useAptosZapQuote.d.ts +1 -16
  118. package/dist/state/zap/useAptosZapQuote.js +4 -4
  119. package/dist/state/zap/useAptosZapQuote.js.map +1 -1
  120. package/dist/state/zap/useJupiterSolanaQuote.js +4 -11
  121. package/dist/state/zap/useJupiterSolanaQuote.js.map +1 -1
  122. package/dist/state/zap/useSoulZapBondQuote.js +12 -21
  123. package/dist/state/zap/useSoulZapBondQuote.js.map +1 -1
  124. package/dist/state/zap/useSuiZapQuote.d.ts +1 -1
  125. package/dist/state/zap/useSuiZapQuote.js +9 -14
  126. package/dist/state/zap/useSuiZapQuote.js.map +1 -1
  127. package/dist/theme/base.d.ts +1 -4
  128. package/dist/theme/base.js +1 -1
  129. package/dist/theme/base.js.map +1 -1
  130. package/dist/theme/components.d.ts +0 -20
  131. package/dist/theme/components.js +1 -1
  132. package/dist/theme/components.js.map +1 -1
  133. package/dist/types/aptosBonds.d.ts +0 -60
  134. package/dist/types/bondIssuanceCodec.d.ts +0 -1
  135. package/dist/types/bondIssuanceCodec.js.map +1 -1
  136. package/dist/types/bondTermCodec.d.ts +0 -1
  137. package/dist/types/bondTermCodec.js.map +1 -1
  138. package/dist/types/solanaBonds.d.ts +4 -3
  139. package/dist/utils/aptosHelpers.d.ts +1 -14
  140. package/dist/utils/aptosHelpers.js +30 -2
  141. package/dist/utils/aptosHelpers.js.map +1 -1
  142. package/dist/utils/bondPriceHelpers.d.ts +1 -1
  143. package/dist/utils/bondPriceHelpers.js +5 -11
  144. package/dist/utils/bondPriceHelpers.js.map +1 -1
  145. package/dist/utils/calculateSolanaTrueBillPrice.d.ts +0 -4
  146. package/dist/utils/calculateSolanaTrueBillPrice.js +33 -32
  147. package/dist/utils/calculateSolanaTrueBillPrice.js.map +1 -1
  148. package/dist/utils/convertToBigish.d.ts +0 -1
  149. package/dist/utils/convertToBigish.js +3 -18
  150. package/dist/utils/convertToBigish.js.map +1 -1
  151. package/dist/utils/displayHelpers.d.ts +3 -9
  152. package/dist/utils/displayHelpers.js +63 -47
  153. package/dist/utils/displayHelpers.js.map +1 -1
  154. package/dist/utils/fixedPoint.d.ts +28 -0
  155. package/dist/utils/fixedPoint.js +239 -0
  156. package/dist/utils/fixedPoint.js.map +1 -0
  157. package/dist/utils/formatNumber.d.ts +0 -7
  158. package/dist/utils/formatNumber.js +6 -12
  159. package/dist/utils/formatNumber.js.map +1 -1
  160. package/dist/utils/getBalanceNumber.d.ts +1 -2
  161. package/dist/utils/getBalanceNumber.js +5 -3
  162. package/dist/utils/getBalanceNumber.js.map +1 -1
  163. package/dist/utils/getNativeTicker.js +0 -1
  164. package/dist/utils/getNativeTicker.js.map +1 -1
  165. package/dist/utils/suiHelpers.d.ts +0 -2
  166. package/dist/utils/suiHelpers.js +13 -15
  167. package/dist/utils/suiHelpers.js.map +1 -1
  168. package/dist/views/Bonds/Bonds.d.ts +0 -4
  169. package/dist/views/Bonds/Bonds.js.map +1 -1
  170. package/dist/views/Bonds/components/BondRows/ActiveBondRows.d.ts +1 -1
  171. package/dist/views/Bonds/components/BondRows/ActiveBondRows.js +2 -3
  172. package/dist/views/Bonds/components/BondRows/ActiveBondRows.js.map +1 -1
  173. package/dist/views/Bonds/components/BonusComponents/BonusComponent.js +1 -2
  174. package/dist/views/Bonds/components/BonusComponents/BonusComponent.js.map +1 -1
  175. package/dist/views/Bonds/components/BonusComponents/BonusTable.js +1 -2
  176. package/dist/views/Bonds/components/BonusComponents/BonusTable.js.map +1 -1
  177. package/dist/views/Bonds/components/BuyAgainRow/index.js +2 -4
  178. package/dist/views/Bonds/components/BuyAgainRow/index.js.map +1 -1
  179. package/dist/views/Bonds/components/RecommendationCards/SmallRecommendationCard.d.ts +1 -1
  180. package/dist/views/Bonds/components/RecommendationCards/SmallRecommendationCard.js.map +1 -1
  181. package/dist/views/Bonds/utils.d.ts +0 -2
  182. package/dist/views/Bonds/utils.js +2 -3
  183. package/dist/views/Bonds/utils.js.map +1 -1
  184. package/dist/views/BuyBond/BuyBondModal.d.ts +1 -1
  185. package/dist/views/BuyBond/BuyBondModal.js.map +1 -1
  186. package/dist/views/BuyBond/BuyComponent.js +16 -17
  187. package/dist/views/BuyBond/BuyComponent.js.map +1 -1
  188. package/dist/views/BuyBond/BuyComponentAptos.d.ts +1 -1
  189. package/dist/views/BuyBond/BuyComponentAptos.js +20 -33
  190. package/dist/views/BuyBond/BuyComponentAptos.js.map +1 -1
  191. package/dist/views/BuyBond/BuyComponentPreTGE.js +6 -8
  192. package/dist/views/BuyBond/BuyComponentPreTGE.js.map +1 -1
  193. package/dist/views/BuyBond/BuyComponentSolana.d.ts +1 -1
  194. package/dist/views/BuyBond/BuyComponentSolana.js +20 -27
  195. package/dist/views/BuyBond/BuyComponentSolana.js.map +1 -1
  196. package/dist/views/BuyBond/BuyComponentSui.d.ts +1 -1
  197. package/dist/views/BuyBond/BuyComponentSui.js +15 -28
  198. package/dist/views/BuyBond/BuyComponentSui.js.map +1 -1
  199. package/dist/views/BuyBond/components/NewRateModal/NewRateModal.js +2 -2
  200. package/dist/views/BuyBond/components/NewRateModal/NewRateModal.js.map +1 -1
  201. package/dist/views/BuyBond/components/PointsLeftForNextTier/PointsLeftForNextTier.js +6 -9
  202. package/dist/views/BuyBond/components/PointsLeftForNextTier/PointsLeftForNextTier.js.map +1 -1
  203. package/dist/views/ProjectView/components/BondLeaderboard/components/SalesTable.d.ts +1 -1
  204. package/dist/views/ProjectView/components/BondLeaderboard/components/SalesTable.js.map +1 -1
  205. package/dist/views/ProjectView/components/BondLeaderboard/components/TopSaleCard.d.ts +1 -1
  206. package/dist/views/ProjectView/components/BondLeaderboard/components/TopSaleCard.js.map +1 -1
  207. package/dist/views/ProjectView/components/BondLeaderboard/components/TopThreeSalesCards.d.ts +1 -1
  208. package/dist/views/ProjectView/components/BondLeaderboard/components/TopThreeSalesCards.js.map +1 -1
  209. package/dist/views/ProjectView/components/BondStats/index.js +2 -4
  210. package/dist/views/ProjectView/components/BondStats/index.js.map +1 -1
  211. package/dist/views/ProjectView/components/BondStats/types.d.ts +2 -1
  212. package/dist/views/ProjectView/components/BondStats/types.js.map +1 -1
  213. package/dist/views/SingleBond/SoldOutBuyBondPlaceholder.d.ts +1 -1
  214. package/dist/views/SingleBond/SoldOutBuyBondPlaceholder.js.map +1 -1
  215. package/dist/views/YourBonds/components/UserBondRow/UserBondRowPreTGE.js +4 -5
  216. package/dist/views/YourBonds/components/UserBondRow/UserBondRowPreTGE.js.map +1 -1
  217. package/dist/views/YourBondsModal/components/LinkShare/htmlToJpeg.d.ts +8 -0
  218. package/dist/views/YourBondsModal/components/LinkShare/htmlToJpeg.js +43 -0
  219. package/dist/views/YourBondsModal/components/LinkShare/htmlToJpeg.js.map +1 -0
  220. package/dist/views/YourBondsModal/components/LinkShare/templateImageShare.d.ts +8 -1
  221. package/dist/views/YourBondsModal/components/LinkShare/templateImageShare.js +172 -15
  222. package/dist/views/YourBondsModal/components/LinkShare/templateImageShare.js.map +1 -1
  223. package/dist/views/YourBondsModal/components/LinkShare/utils.js +19 -10
  224. package/dist/views/YourBondsModal/components/LinkShare/utils.js.map +1 -1
  225. package/dist/views/YourBondsModal/components/TransferBondModal/index.js +1 -2
  226. package/dist/views/YourBondsModal/components/TransferBondModal/index.js.map +1 -1
  227. package/package.json +6 -8
  228. package/dist/components/AccordionText/index.d.ts +0 -6
  229. package/dist/components/RestrictedRegionModal/index.d.ts +0 -5
  230. package/dist/components/TabNavigation/index.d.ts +0 -8
  231. package/dist/components/uikit-sdk/Input/NumericInput.d.ts +0 -9
  232. package/dist/components/uikit-sdk/Modal/ModalFooter.d.ts +0 -4
  233. package/dist/components/uikit-sdk/Svg/Icons/Audit.d.ts +0 -4
  234. package/dist/components/uikit-sdk/Svg/Icons/Fire.d.ts +0 -4
  235. package/dist/components/uikit-sdk/Svg/Icons/FullLogo.d.ts +0 -4
  236. package/dist/components/uikit-sdk/Svg/Icons/Instagram.d.ts +0 -4
  237. package/dist/components/uikit-sdk/Svg/Icons/Language.d.ts +0 -4
  238. package/dist/components/uikit-sdk/Svg/Icons/Medium.d.ts +0 -4
  239. package/dist/components/uikit-sdk/Svg/Icons/Pool.d.ts +0 -4
  240. package/dist/components/uikit-sdk/Svg/Icons/Reddit.d.ts +0 -4
  241. package/dist/components/uikit-sdk/Svg/Icons/Telegram.d.ts +0 -4
  242. package/dist/components/uikit-sdk/Svg/Icons/Website.d.ts +0 -4
  243. package/dist/components/uikit-sdk/Svg/tokens/BSC.d.ts +0 -4
  244. package/dist/components/uikit-sdk/Svg/tokens/CELO.d.ts +0 -4
  245. package/dist/components/uikit-sdk/Svg/tokens/CRONOS.d.ts +0 -4
  246. package/dist/components/uikit-sdk/Svg/tokens/FANTOM.d.ts +0 -4
  247. package/dist/components/uikit-sdk/Svg/tokens/GNOSIS.d.ts +0 -4
  248. package/dist/components/uikit-sdk/Svg/tokens/OKX.d.ts +0 -4
  249. package/dist/components/uikit-sdk/Svg/tokens/OPTIMISM.d.ts +0 -4
  250. package/dist/components/uikit-sdk/Svg/tokens/POLYGONZK.d.ts +0 -4
  251. package/dist/config/constants/tokens.js +0 -36
  252. package/dist/config/constants/tokens.js.map +0 -1
  253. package/dist/contexts/RefreshContext.d.ts +0 -10
  254. package/dist/hooks/useRefresh.d.ts +0 -6
  255. package/dist/hooks/useTimer.d.ts +0 -2
  256. package/dist/state/bondApiStats/useUserApiStats.d.ts +0 -22
  257. package/dist/state/bonds/aptosBondsConfig.d.ts +0 -4
  258. package/dist/state/bonds/fetchUsersBonds/getBillNftData.d.ts +0 -9
  259. package/dist/state/geoFencing/useGeoFencing.d.ts +0 -5
  260. package/dist/state/zap/useSoulZapTokenQuote.d.ts +0 -3
  261. package/dist/state/zap/useTierOptimizationPreview.d.ts +0 -27
  262. package/dist/views/ZapModal/index.d.ts +0 -13
  263. package/dist/views/ZapModal/styles.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"aptosZapTokens.js","sources":["../../../src/config/constants/aptosZapTokens.ts"],"sourcesContent":["// =============================================================================\n// Aptos zap tokens — static list of tokens available for zap on Aptos\n// =============================================================================\n//\n// Equivalent to zapInputTokens[ChainId.SOL] from @ape.swap/apeswap-lists.\n// Until that package supports Aptos, we maintain this local list.\n//\n// Token addresses are FA (Fungible Asset) addresses from Panora's verified\n// token list. Only \"Native, Verified\" tokens are included for safety.\n//\n// TODO(aptos): Move to @ape.swap/apeswap-lists when it supports Aptos.\n\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { IS_APTOS_MAINNET } from '../../constants/aptosConstants'\n\nexport interface AptosZapToken {\n symbol: string\n name: string\n faAddress: string\n decimals: number\n logoUrl?: string\n}\n\nconst APTOS_KEY = ChainId.APTOS\n\n// APT is NOT included here — it is covered by the 'NATIVE' entry that\n// useSortedZapList injects automatically (via WNATIVE[ChainId.APTOS]).\n// Including it would cause a duplicate in the token selector.\nconst APTOS_ZAP_TOKENS_MAINNET: AptosZapToken[] = [\n {\n symbol: 'USDC',\n name: 'USD Coin',\n faAddress: '0xbae207659db88bea0cbead6da0ed00aac12edcdda169e591cd41c94180b46f3b',\n decimals: 6,\n },\n {\n symbol: 'USDt',\n name: 'Tether USD',\n faAddress: '0x357b0b74bc833e95a115ad22604854d6b0fca151cecd94111770e5d6ffc9dc2b',\n decimals: 6,\n },\n]\n\nconst APTOS_ZAP_TOKENS_TESTNET: AptosZapToken[] = [\n {\n symbol: 'USDC',\n name: 'USDC',\n faAddress: '0x69091fbab5f7d635ee7ac5098cf0c1efbe31d68fec0f2cd565e8d168daf52832',\n decimals: 6,\n },\n {\n symbol: 'USDt',\n name: 'Tether USD',\n // TODO(aptos): Replace with the correct testnet USDt FA address once identified.\n // Using mainnet address as placeholder — balance will show 0 on testnet.\n faAddress: '0x357b0b74bc833e95a115ad22604854d6b0fca151cecd94111770e5d6ffc9dc2b',\n decimals: 6,\n },\n]\n\nexport const APTOS_ZAP_TOKENS: AptosZapToken[] = IS_APTOS_MAINNET ? APTOS_ZAP_TOKENS_MAINNET : APTOS_ZAP_TOKENS_TESTNET\n\nexport const getAptosZapTokens = (): AptosZapToken[] => APTOS_ZAP_TOKENS\n\n// APT entry used only by findAptosZapToken for zap quote resolution.\n// Not in APTOS_ZAP_TOKENS to avoid duplicate in the selector (NATIVE covers it).\nconst APT_TOKEN: AptosZapToken = { symbol: 'APT', name: 'Aptos Coin', faAddress: '0xa', decimals: 8 }\n\n/**\n * Find a zap token by its FA address. Includes APT even though it's not in the\n * selector list (NATIVE resolves to APT for quote purposes).\n */\nexport const findAptosZapToken = (faAddress: string | undefined): AptosZapToken | undefined => {\n if (!faAddress) return undefined\n if (faAddress.toLowerCase() === '0xa') return APT_TOKEN\n return APTOS_ZAP_TOKENS.find((t) => t.faAddress.toLowerCase() === faAddress.toLowerCase())\n}\n\n/**\n * Check if a given FA address matches the bond's principal token.\n * Used to determine if zap is needed (input !== principal → zap).\n */\nexport const isAptosPrincipalToken = (\n faAddress: string | undefined,\n bond: { lpToken?: { address?: Record<number, string> } },\n): boolean => {\n if (!faAddress || !bond?.lpToken?.address?.[APTOS_KEY]) return false\n return faAddress.toLowerCase() === bond.lpToken.address[APTOS_KEY]!.toLowerCase()\n}\n"],"names":[],"mappings":";;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAakB,OAAO,CAAC;AAE1B;AACA;AACA;AACA,MAAM,wBAAwB,GAAoB;AAChD,IAAA;AACE,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,SAAS,EAAE,oEAAoE;AAC/E,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,SAAS,EAAE,oEAAoE;AAC/E,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;CACF;AAED,MAAM,wBAAwB,GAAoB;AAChD,IAAA;AACE,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,SAAS,EAAE,oEAAoE;AAC/E,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,IAAI,EAAE,YAAY;;;AAGlB,QAAA,SAAS,EAAE,oEAAoE;AAC/E,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;CACF;AAEM,MAAM,gBAAgB,GAAoB,gBAAgB,GAAG,wBAAwB,GAAG;AAI/F;AACA;AACA,MAAM,SAAS,GAAkB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;AAErG;;;AAGG;AACI,MAAM,iBAAiB,GAAG,CAAC,SAA6B,KAA+B;AAC5F,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,SAAS;AAChC,IAAA,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,KAAK;AAAE,QAAA,OAAO,SAAS;IACvD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC;AAC5F;;;;"}
1
+ {"version":3,"file":"aptosZapTokens.js","sources":["../../../src/config/constants/aptosZapTokens.ts"],"sourcesContent":["// =============================================================================\n// Aptos zap tokens — static list of tokens available for zap on Aptos\n// =============================================================================\n//\n// Equivalent to zapInputTokens[ChainId.SOL] from @ape.swap/apeswap-lists.\n// Until that package supports Aptos, we maintain this local list.\n//\n// Token addresses are FA (Fungible Asset) addresses from Panora's verified\n// token list. Only \"Native, Verified\" tokens are included for safety.\n//\n// TODO(aptos): Move to @ape.swap/apeswap-lists when it supports Aptos.\n\nimport { IS_APTOS_MAINNET } from '../../constants/aptosConstants'\n\nexport interface AptosZapToken {\n symbol: string\n name: string\n faAddress: string\n decimals: number\n logoUrl?: string\n}\n\n// const APTOS_KEY = ChainId.APTOS\n\n// APT is NOT included here — it is covered by the 'NATIVE' entry that\n// useSortedZapList injects automatically (via WNATIVE[ChainId.APTOS]).\n// Including it would cause a duplicate in the token selector.\nconst APTOS_ZAP_TOKENS_MAINNET: AptosZapToken[] = [\n {\n symbol: 'USDC',\n name: 'USD Coin',\n faAddress: '0xbae207659db88bea0cbead6da0ed00aac12edcdda169e591cd41c94180b46f3b',\n decimals: 6,\n },\n {\n symbol: 'USDt',\n name: 'Tether USD',\n faAddress: '0x357b0b74bc833e95a115ad22604854d6b0fca151cecd94111770e5d6ffc9dc2b',\n decimals: 6,\n },\n]\n\nconst APTOS_ZAP_TOKENS_TESTNET: AptosZapToken[] = [\n {\n symbol: 'USDC',\n name: 'USDC',\n faAddress: '0x69091fbab5f7d635ee7ac5098cf0c1efbe31d68fec0f2cd565e8d168daf52832',\n decimals: 6,\n },\n {\n symbol: 'USDt',\n name: 'Tether USD',\n // TODO(aptos): Replace with the correct testnet USDt FA address once identified.\n // Using mainnet address as placeholder — balance will show 0 on testnet.\n faAddress: '0x357b0b74bc833e95a115ad22604854d6b0fca151cecd94111770e5d6ffc9dc2b',\n decimals: 6,\n },\n]\n\nexport const APTOS_ZAP_TOKENS: AptosZapToken[] = IS_APTOS_MAINNET ? APTOS_ZAP_TOKENS_MAINNET : APTOS_ZAP_TOKENS_TESTNET\n\nexport const getAptosZapTokens = (): AptosZapToken[] => APTOS_ZAP_TOKENS\n\n// APT entry used only by findAptosZapToken for zap quote resolution.\n// Not in APTOS_ZAP_TOKENS to avoid duplicate in the selector (NATIVE covers it).\nconst APT_TOKEN: AptosZapToken = { symbol: 'APT', name: 'Aptos Coin', faAddress: '0xa', decimals: 8 }\n\n/**\n * Find a zap token by its FA address. Includes APT even though it's not in the\n * selector list (NATIVE resolves to APT for quote purposes).\n */\nexport const findAptosZapToken = (faAddress: string | undefined): AptosZapToken | undefined => {\n if (!faAddress) return undefined\n if (faAddress.toLowerCase() === '0xa') return APT_TOKEN\n return APTOS_ZAP_TOKENS.find((t) => t.faAddress.toLowerCase() === faAddress.toLowerCase())\n}\n"],"names":[],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAYA;AAEA;AACA;AACA;AACA,MAAM,wBAAwB,GAAoB;AAChD,IAAA;AACE,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,SAAS,EAAE,oEAAoE;AAC/E,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,SAAS,EAAE,oEAAoE;AAC/E,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;CACF;AAED,MAAM,wBAAwB,GAAoB;AAChD,IAAA;AACE,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,SAAS,EAAE,oEAAoE;AAC/E,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,IAAI,EAAE,YAAY;;;AAGlB,QAAA,SAAS,EAAE,oEAAoE;AAC/E,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;CACF;AAEM,MAAM,gBAAgB,GAAoB,gBAAgB,GAAG,wBAAwB,GAAG;AAI/F;AACA;AACA,MAAM,SAAS,GAAkB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;AAErG;;;AAGG;AACI,MAAM,iBAAiB,GAAG,CAAC,SAA6B,KAA+B;AAC5F,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,SAAS;AAChC,IAAA,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,KAAK;AAAE,QAAA,OAAO,SAAS;IACvD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC;AAC5F;;;;"}
@@ -1,7 +1,5 @@
1
1
  import { ChainId } from '@ape.swap/apeswap-lists';
2
2
  export declare const PUBLIC_RPC_URLS: Partial<Record<ChainId, string[]>>;
3
- export declare const HELIUS_SOL_RPC_ENDPOINTS: string[];
4
- export declare const getRandomHeliusRPC: () => string;
5
3
  export declare const HELIUS_SOL_RPC: string;
6
4
  export declare const setCustomRPCS: (urls: Partial<Record<ChainId, string[]>>) => void;
7
5
  export declare const getRPC: (chain: ChainId) => string;
@@ -99,5 +99,5 @@ const getRPC = (chain) => {
99
99
  return _customRPCS?.[chain]?.[0] ?? PUBLIC_RPC_URLS?.[chain]?.[0];
100
100
  };
101
101
 
102
- export { HELIUS_SOL_RPC, HELIUS_SOL_RPC_ENDPOINTS, PUBLIC_RPC_URLS, getRPC, getRandomHeliusRPC, setCustomRPCS };
102
+ export { HELIUS_SOL_RPC, PUBLIC_RPC_URLS, getRPC, setCustomRPCS };
103
103
  //# sourceMappingURL=networks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"networks.js","sources":["../../../src/config/constants/networks.ts"],"sourcesContent":["import { ChainId } from '@ape.swap/apeswap-lists'\nimport { APTOS_FULLNODE_URL } from '../../constants/aptosConstants'\n\nexport const PUBLIC_RPC_URLS: Partial<Record<ChainId, string[]>> = {\n [ChainId.BSC]: [\n 'https://bsc-dataseed.binance.org/',\n 'https://bsc-dataseed1.defibit.io',\n 'https://endpoints.omniatech.io/v1/bsc/mainnet/public',\n ],\n [ChainId.ARBITRUM]: ['https://arb1.arbitrum.io/rpc'],\n [ChainId.BSC_TESTNET]: ['https://data-seed-prebsc-2-s3.binance.org:8545/'],\n [ChainId.MATIC]: [\n 'https://polygon.drpc.org',\n 'https://1rpc.io/matic',\n 'https://polygon-rpc.com/', // this is now freemium\n 'https://polygon-mainnet.public.blastapi.io/',\n 'https://rpc-mainnet.matic.network',\n 'https://matic-mainnet.chainstacklabs.com',\n ],\n [ChainId.MAINNET]: [\n 'https://ethereum-rpc.publicnode.com',\n 'https://eth.drpc.org',\n 'https://eth-mainnet.public.blastapi.io',\n 'https://rpc.ankr.com/eth',\n ],\n [ChainId.TLOS]: ['https://mainnet.telos.net/evm'],\n [ChainId.INEVM]: ['https://mainnet.rpc.inevm.com/http'],\n [ChainId.SEPOLIA]: ['https://eth-sepolia-public.unifra.io'],\n [ChainId.LINEA]: [\n 'https://rpc.linea.build',\n 'https://linea.drpc.org',\n 'https://linea.blockpi.network/v1/rpc/public',\n 'https://linea.decubate.com',\n ],\n [ChainId.LIGHTLINK]: [\n 'https://replicator.phoenix.lightlink.io/rpc/v1',\n 'https://endpoints.omniatech.io/v1/lightlink/phoenix/public',\n ],\n [ChainId.IOTA]: ['https://json-rpc.evm.iotaledger.net/'],\n [ChainId.IOTA_TESTNET]: ['https://json-rpc.evm.testnet.iotaledger.net/'],\n [ChainId.BASE]: ['https://base-rpc.publicnode.com', 'https://mainnet.base.org'],\n [ChainId.GRAPHLINQ]: ['https://glq-dataseed.graphlinq.io'],\n [ChainId.AVAX]: ['https://avalanche-c-chain-rpc.publicnode.com', 'https://avax.meowrpc.com'],\n [ChainId.BLAST]: ['https://rpc.blast.io'],\n [ChainId.CROSSFI]: ['https://rpc.mainnet.ms'],\n [ChainId.MONAD_TESTNET]: ['https://testnet-rpc2.monad.xyz/52227f026fa8fac9e2014c58fbf5643369b3bfc6'],\n [ChainId.MONAD]: [\n 'https://rpc.monad.xyz',\n 'https://rpc1.monad.xyz',\n 'https://rpc2.monad.xyz',\n 'https://rpc3.monad.xyz',\n 'https://rpc4.monad.xyz',\n ],\n [ChainId.SONIC]: ['https://rpc.soniclabs.com'],\n [ChainId.BERACHAIN]: ['https://rpc.berachain.com', 'https://berachain.drpc.org'],\n [ChainId.KATANA]: ['https://rpc-katana.t.conduit.xyz/NRcSLqEG4Hw55GzTSu6Sratq94kKtUGfH'],\n [ChainId.UNICHAIN]: ['https://unichain-rpc.publicnode.com', 'https://unichain.drpc.org'],\n [ChainId.MEGAETH_TESTNET]: ['https://carrot.megaeth.com/rpc'],\n [ChainId.HYPEREVM]: ['https://rpc.hyperliquid.xyz/evm'],\n [ChainId.BITTENSOR_TESTNET]: ['https://bittensor-testnet-lite-public.nodies.app'],\n [ChainId.ROBINHOOD]: ['https://rpc.mainnet.chain.robinhood.com'],\n\n // Aptos fullnode — URL is clean; the API key goes in the Authorization\n // header, not as a query param (see aptosConstants.ts). The cast on\n // APTOS_CHAIN_ID is required because the synthetic id is not in the\n // ChainId enum yet.\n [ChainId.APTOS]: [APTOS_FULLNODE_URL],\n\n // Sui fullnode — public RPC, no API key required (see suiConstants.ts).\n [ChainId.SUI]: ['https://fullnode.mainnet.sui.io:443'],\n\n // SOL RPC is not public. Production URL (morning-autumn-dream) is domain-protected, development URL (ancient-cold-sailboat) is free, use with caution.\n [ChainId.SOL]:\n process.env.NODE_ENV === 'production'\n ? ['https://morning-autumn-dream.solana-mainnet.quiknode.pro/1ef6069950c798a43a112c0fe5eb157309427db8']\n : [\n 'https://ancient-cold-sailboat.solana-mainnet.quiknode.pro/da13400ad8d0035313f3e71c6a37c107d0d0334b',\n 'https://mainnet.helius-rpc.com/?api-key=d80b11e0-692f-4da0-91d6-830799c8c385',\n ], // mainnet\n // [ChainId.SOL]: ['https://devnet.helius-rpc.com/?api-key=095f6fc7-1be0-4d94-a737-4a5ee0d82ea5'], // devnet\n}\n\n// Multiple Helius SOL RPC endpoints for rotation\nexport const HELIUS_SOL_RPC_ENDPOINTS = [\n 'https://mainnet.helius-rpc.com/?api-key=d80b11e0-692f-4da0-91d6-830799c8c385', // apefede09@gmail.com\n 'https://mainnet.helius-rpc.com/?api-key=8631ce42-9000-490d-9ac3-f3a81de508b2', // apebond.design@gmail.com\n 'https://mainnet.helius-rpc.com/?api-key=c097651d-ae13-4ab4-ae4c-fef7e48d4561', // n0mbr3al3at0r10@gmail.com\n 'https://mainnet.helius-rpc.com/?api-key=a5c4ea36-fa6b-4bcc-a7a4-e10012b9ea7e', // RandomApe personal mail\n]\n\n// export const HELIUS_SOL_RPC_ENDPOINTS = ['https://devnet.helius-rpc.com/?api-key=095f6fc7-1be0-4d94-a737-4a5ee0d82ea5'] //devnet\n\n// Function to get a random Helius SOL RPC endpoint\nexport const getRandomHeliusRPC = (): string => {\n const randomIndex = Math.floor(Math.random() * HELIUS_SOL_RPC_ENDPOINTS.length)\n return HELIUS_SOL_RPC_ENDPOINTS[randomIndex]\n}\n\n// Keep the current export for backward compatibility\nexport const HELIUS_SOL_RPC = getRandomHeliusRPC()\n\n// Custom RPC registry — set by the consumer via the `customRPCS` prop\nlet _customRPCS: Partial<Record<ChainId, string[]>> = {}\n\nexport const setCustomRPCS = (urls: Partial<Record<ChainId, string[]>>) => {\n _customRPCS = urls\n}\n\nexport const getRPC = (chain: ChainId): string => {\n return _customRPCS?.[chain]?.[0] ?? (PUBLIC_RPC_URLS?.[chain]?.[0] as string)\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"networks.js","sources":["../../../src/config/constants/networks.ts"],"sourcesContent":["import { ChainId } from '@ape.swap/apeswap-lists'\nimport { APTOS_FULLNODE_URL } from '../../constants/aptosConstants'\n\nexport const PUBLIC_RPC_URLS: Partial<Record<ChainId, string[]>> = {\n [ChainId.BSC]: [\n 'https://bsc-dataseed.binance.org/',\n 'https://bsc-dataseed1.defibit.io',\n 'https://endpoints.omniatech.io/v1/bsc/mainnet/public',\n ],\n [ChainId.ARBITRUM]: ['https://arb1.arbitrum.io/rpc'],\n [ChainId.BSC_TESTNET]: ['https://data-seed-prebsc-2-s3.binance.org:8545/'],\n [ChainId.MATIC]: [\n 'https://polygon.drpc.org',\n 'https://1rpc.io/matic',\n 'https://polygon-rpc.com/', // this is now freemium\n 'https://polygon-mainnet.public.blastapi.io/',\n 'https://rpc-mainnet.matic.network',\n 'https://matic-mainnet.chainstacklabs.com',\n ],\n [ChainId.MAINNET]: [\n 'https://ethereum-rpc.publicnode.com',\n 'https://eth.drpc.org',\n 'https://eth-mainnet.public.blastapi.io',\n 'https://rpc.ankr.com/eth',\n ],\n [ChainId.TLOS]: ['https://mainnet.telos.net/evm'],\n [ChainId.INEVM]: ['https://mainnet.rpc.inevm.com/http'],\n [ChainId.SEPOLIA]: ['https://eth-sepolia-public.unifra.io'],\n [ChainId.LINEA]: [\n 'https://rpc.linea.build',\n 'https://linea.drpc.org',\n 'https://linea.blockpi.network/v1/rpc/public',\n 'https://linea.decubate.com',\n ],\n [ChainId.LIGHTLINK]: [\n 'https://replicator.phoenix.lightlink.io/rpc/v1',\n 'https://endpoints.omniatech.io/v1/lightlink/phoenix/public',\n ],\n [ChainId.IOTA]: ['https://json-rpc.evm.iotaledger.net/'],\n [ChainId.IOTA_TESTNET]: ['https://json-rpc.evm.testnet.iotaledger.net/'],\n [ChainId.BASE]: ['https://base-rpc.publicnode.com', 'https://mainnet.base.org'],\n [ChainId.GRAPHLINQ]: ['https://glq-dataseed.graphlinq.io'],\n [ChainId.AVAX]: ['https://avalanche-c-chain-rpc.publicnode.com', 'https://avax.meowrpc.com'],\n [ChainId.BLAST]: ['https://rpc.blast.io'],\n [ChainId.CROSSFI]: ['https://rpc.mainnet.ms'],\n [ChainId.MONAD_TESTNET]: ['https://testnet-rpc2.monad.xyz/52227f026fa8fac9e2014c58fbf5643369b3bfc6'],\n [ChainId.MONAD]: [\n 'https://rpc.monad.xyz',\n 'https://rpc1.monad.xyz',\n 'https://rpc2.monad.xyz',\n 'https://rpc3.monad.xyz',\n 'https://rpc4.monad.xyz',\n ],\n [ChainId.SONIC]: ['https://rpc.soniclabs.com'],\n [ChainId.BERACHAIN]: ['https://rpc.berachain.com', 'https://berachain.drpc.org'],\n [ChainId.KATANA]: ['https://rpc-katana.t.conduit.xyz/NRcSLqEG4Hw55GzTSu6Sratq94kKtUGfH'],\n [ChainId.UNICHAIN]: ['https://unichain-rpc.publicnode.com', 'https://unichain.drpc.org'],\n [ChainId.MEGAETH_TESTNET]: ['https://carrot.megaeth.com/rpc'],\n [ChainId.HYPEREVM]: ['https://rpc.hyperliquid.xyz/evm'],\n [ChainId.BITTENSOR_TESTNET]: ['https://bittensor-testnet-lite-public.nodies.app'],\n [ChainId.ROBINHOOD]: ['https://rpc.mainnet.chain.robinhood.com'],\n\n // Aptos fullnode — URL is clean; the API key goes in the Authorization\n // header, not as a query param (see aptosConstants.ts). The cast on\n // APTOS_CHAIN_ID is required because the synthetic id is not in the\n // ChainId enum yet.\n [ChainId.APTOS]: [APTOS_FULLNODE_URL],\n\n // Sui fullnode — public RPC, no API key required (see suiConstants.ts).\n [ChainId.SUI]: ['https://fullnode.mainnet.sui.io:443'],\n\n // SOL RPC is not public. Production URL (morning-autumn-dream) is domain-protected, development URL (ancient-cold-sailboat) is free, use with caution.\n [ChainId.SOL]:\n process.env.NODE_ENV === 'production'\n ? ['https://morning-autumn-dream.solana-mainnet.quiknode.pro/1ef6069950c798a43a112c0fe5eb157309427db8']\n : [\n 'https://ancient-cold-sailboat.solana-mainnet.quiknode.pro/da13400ad8d0035313f3e71c6a37c107d0d0334b',\n 'https://mainnet.helius-rpc.com/?api-key=d80b11e0-692f-4da0-91d6-830799c8c385',\n ], // mainnet\n // [ChainId.SOL]: ['https://devnet.helius-rpc.com/?api-key=095f6fc7-1be0-4d94-a737-4a5ee0d82ea5'], // devnet\n}\n\n// Multiple Helius SOL RPC endpoints for rotation\nconst HELIUS_SOL_RPC_ENDPOINTS = [\n 'https://mainnet.helius-rpc.com/?api-key=d80b11e0-692f-4da0-91d6-830799c8c385', // apefede09@gmail.com\n 'https://mainnet.helius-rpc.com/?api-key=8631ce42-9000-490d-9ac3-f3a81de508b2', // apebond.design@gmail.com\n 'https://mainnet.helius-rpc.com/?api-key=c097651d-ae13-4ab4-ae4c-fef7e48d4561', // n0mbr3al3at0r10@gmail.com\n 'https://mainnet.helius-rpc.com/?api-key=a5c4ea36-fa6b-4bcc-a7a4-e10012b9ea7e', // RandomApe personal mail\n]\n\n// export const HELIUS_SOL_RPC_ENDPOINTS = ['https://devnet.helius-rpc.com/?api-key=095f6fc7-1be0-4d94-a737-4a5ee0d82ea5'] //devnet\n\n// Function to get a random Helius SOL RPC endpoint\nconst getRandomHeliusRPC = (): string => {\n const randomIndex = Math.floor(Math.random() * HELIUS_SOL_RPC_ENDPOINTS.length)\n return HELIUS_SOL_RPC_ENDPOINTS[randomIndex]\n}\n\n// Keep the current export for backward compatibility\nexport const HELIUS_SOL_RPC = getRandomHeliusRPC()\n\n// Custom RPC registry — set by the consumer via the `customRPCS` prop\nlet _customRPCS: Partial<Record<ChainId, string[]>> = {}\n\nexport const setCustomRPCS = (urls: Partial<Record<ChainId, string[]>>) => {\n _customRPCS = urls\n}\n\nexport const getRPC = (chain: ChainId): string => {\n return _customRPCS?.[chain]?.[0] ?? (PUBLIC_RPC_URLS?.[chain]?.[0] as string)\n}\n"],"names":[],"mappings":";;;AAGO,MAAM,eAAe,GAAuC;AACjE,IAAA,CAAC,OAAO,CAAC,GAAG,GAAG;QACb,mCAAmC;QACnC,kCAAkC;QAClC,sDAAsD;AACvD,KAAA;AACD,IAAA,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,8BAA8B,CAAC;AACpD,IAAA,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,iDAAiD,CAAC;AAC1E,IAAA,CAAC,OAAO,CAAC,KAAK,GAAG;QACf,0BAA0B;QAC1B,uBAAuB;AACvB,QAAA,0BAA0B;QAC1B,6CAA6C;QAC7C,mCAAmC;QACnC,0CAA0C;AAC3C,KAAA;AACD,IAAA,CAAC,OAAO,CAAC,OAAO,GAAG;QACjB,qCAAqC;QACrC,sBAAsB;QACtB,wCAAwC;QACxC,0BAA0B;AAC3B,KAAA;AACD,IAAA,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,+BAA+B,CAAC;AACjD,IAAA,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,oCAAoC,CAAC;AACvD,IAAA,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,sCAAsC,CAAC;AAC3D,IAAA,CAAC,OAAO,CAAC,KAAK,GAAG;QACf,yBAAyB;QACzB,wBAAwB;QACxB,6CAA6C;QAC7C,4BAA4B;AAC7B,KAAA;AACD,IAAA,CAAC,OAAO,CAAC,SAAS,GAAG;QACnB,gDAAgD;QAChD,4DAA4D;AAC7D,KAAA;AACD,IAAA,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,sCAAsC,CAAC;AACxD,IAAA,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,8CAA8C,CAAC;IACxE,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,iCAAiC,EAAE,0BAA0B,CAAC;AAC/E,IAAA,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,mCAAmC,CAAC;IAC1D,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,8CAA8C,EAAE,0BAA0B,CAAC;AAC5F,IAAA,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,sBAAsB,CAAC;AACzC,IAAA,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,wBAAwB,CAAC;AAC7C,IAAA,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,yEAAyE,CAAC;AACpG,IAAA,CAAC,OAAO,CAAC,KAAK,GAAG;QACf,uBAAuB;QACvB,wBAAwB;QACxB,wBAAwB;QACxB,wBAAwB;QACxB,wBAAwB;AACzB,KAAA;AACD,IAAA,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,2BAA2B,CAAC;IAC9C,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,2BAA2B,EAAE,4BAA4B,CAAC;AAChF,IAAA,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,oEAAoE,CAAC;IACxF,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,qCAAqC,EAAE,2BAA2B,CAAC;AACxF,IAAA,CAAC,OAAO,CAAC,eAAe,GAAG,CAAC,gCAAgC,CAAC;AAC7D,IAAA,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,iCAAiC,CAAC;AACvD,IAAA,CAAC,OAAO,CAAC,iBAAiB,GAAG,CAAC,kDAAkD,CAAC;AACjF,IAAA,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,yCAAyC,CAAC;;;;;AAMhE,IAAA,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,kBAAkB,CAAC;;AAGrC,IAAA,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,qCAAqC,CAAC;;IAGtD,CAAC,OAAO,CAAC,GAAG,GACV,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK;UACrB,CAAC,mGAAmG;AACtG,UAAE;YACE,oGAAoG;YACpG,8EAA8E;AAC/E,SAAA;;;AAIT;AACA,MAAM,wBAAwB,GAAG;AAC/B,IAAA,8EAA8E;AAC9E,IAAA,8EAA8E;AAC9E,IAAA,8EAA8E;AAC9E,IAAA,8EAA8E;CAC/E;AAED;AAEA;AACA,MAAM,kBAAkB,GAAG,MAAa;AACtC,IAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,wBAAwB,CAAC,MAAM,CAAC;AAC/E,IAAA,OAAO,wBAAwB,CAAC,WAAW,CAAC;AAC9C,CAAC;AAED;AACO,MAAM,cAAc,GAAG,kBAAkB;AAEhD;AACA,IAAI,WAAW,GAAuC,EAAE;AAEjD,MAAM,aAAa,GAAG,CAAC,IAAwC,KAAI;IACxE,WAAW,GAAG,IAAI;AACpB;AAEO,MAAM,MAAM,GAAG,CAAC,KAAc,KAAY;AAC/C,IAAA,OAAO,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAK,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,CAAY;AAC/E;;;;"}
@@ -1,2 +1 @@
1
- import { WNATIVE, zapInputTokens } from '@ape.swap/apeswap-lists';
2
- export { WNATIVE, zapInputTokens };
1
+ export {};
@@ -1,14 +1,8 @@
1
1
  import { Network } from '@aptos-labs/ts-sdk';
2
2
  export declare const IS_APTOS_MAINNET: boolean;
3
3
  export declare const APTOS_NETWORK: Network;
4
- export declare const APTOS_CONTRACT_ADDRESS: string;
5
4
  export declare const APTOS_FULLNODE_URL: string;
6
- export declare const APTOS_INDEXER_URL: string;
7
- export declare const APTOS_EXPLORER_URL = "https://explorer.aptoslabs.com";
8
- export declare const APTOS_API_KEYS_TESTNET: string[];
9
- export declare const APTOS_API_KEYS_MAINNET: string[];
10
5
  export declare const getRandomAptosApiKey: () => string | undefined;
11
- export declare const APTOS_BOND_MODULE: string;
12
6
  export declare const APTOS_DEPOSIT_FUNCTION: `${string}::${string}::${string}`;
13
7
  export declare const APTOS_CLAIM_FUNCTION: `${string}::${string}::${string}`;
14
8
  export declare const APTOS_VIEW_MARKET_INFO: `${string}::${string}::${string}`;
@@ -34,6 +34,11 @@ if (typeof window !== 'undefined' &&
34
34
  const APTOS_FULLNODE_URL = IS_APTOS_MAINNET
35
35
  ? 'https://api.mainnet.aptoslabs.com/v1'
36
36
  : 'https://api.testnet.aptoslabs.com/v1';
37
+ // export const APTOS_INDEXER_URL = IS_APTOS_MAINNET
38
+ // ? 'https://api.mainnet.aptoslabs.com/v1/graphql'
39
+ // : 'https://api.testnet.aptoslabs.com/v1/graphql'
40
+ //
41
+ // export const APTOS_EXPLORER_URL = 'https://explorer.aptoslabs.com'
37
42
  // ---------------------------------------------------------------------------
38
43
  // API key rotation (same pattern as HELIUS_SOL_RPC_ENDPOINTS in networks.ts)
39
44
  // ---------------------------------------------------------------------------
@@ -50,6 +55,15 @@ const getRandomAptosApiKey = () => {
50
55
  return undefined;
51
56
  return pool[Math.floor(Math.random() * pool.length)];
52
57
  };
58
+ // ---------------------------------------------------------------------------
59
+ // Module / entry function paths (stable across networks)
60
+ // ---------------------------------------------------------------------------
61
+ // Built directly from `APTOS_CONTRACT_ADDRESS` so TypeScript infers each
62
+ // entry as `${string}::${string}::${string}`, which is exactly what the
63
+ // Aptos ts-sdk's `InputEntryFunctionData.function` field expects. Going via
64
+ // an intermediate `APTOS_BOND_MODULE` constant makes TS collapse the inner
65
+ // template literal and lose the third segment — avoid that.
66
+ // export const APTOS_BOND_MODULE = `${APTOS_CONTRACT_ADDRESS}::bond`
53
67
  // Typed narrowly so the Aptos ts-sdk `InputEntryFunctionData.function` field
54
68
  // (which expects `${string}::${string}::${string}`) accepts them directly.
55
69
  // Entry functions (write path)
@@ -74,5 +88,5 @@ const APTOS_VIEW_NFT_ADDRESS = `${APTOS_CONTRACT_ADDRESS}::bond_nft::nft_address
74
88
  // ---------------------------------------------------------------------------
75
89
  const APTOS_PLACEHOLDER_BILL_IMAGE = 'https://www.ape.bond/images/bills/hidden-bill.jpg';
76
90
 
77
- export { APTOS_API_KEYS_MAINNET, APTOS_API_KEYS_TESTNET, APTOS_CLAIM_FUNCTION, APTOS_CONTRACT_ADDRESS, APTOS_DEPOSIT_FUNCTION, APTOS_FULLNODE_URL, APTOS_NETWORK, APTOS_PLACEHOLDER_BILL_IMAGE, APTOS_VIEW_BILL_INFO, APTOS_VIEW_BOND_MARKET_BY_ID, APTOS_VIEW_MARKET_INFO, APTOS_VIEW_NFT_ADDRESS, APTOS_VIEW_USER_BILLS, APTOS_VIEW_VESTING_PROGRESS, IS_APTOS_MAINNET, getRandomAptosApiKey };
91
+ export { APTOS_CLAIM_FUNCTION, APTOS_DEPOSIT_FUNCTION, APTOS_FULLNODE_URL, APTOS_NETWORK, APTOS_PLACEHOLDER_BILL_IMAGE, APTOS_VIEW_BILL_INFO, APTOS_VIEW_BOND_MARKET_BY_ID, APTOS_VIEW_MARKET_INFO, APTOS_VIEW_NFT_ADDRESS, APTOS_VIEW_USER_BILLS, APTOS_VIEW_VESTING_PROGRESS, IS_APTOS_MAINNET, getRandomAptosApiKey };
78
92
  //# sourceMappingURL=aptosConstants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"aptosConstants.js","sources":["../../src/constants/aptosConstants.ts"],"sourcesContent":["import { Network } from '@aptos-labs/ts-sdk'\n\n// ---------------------------------------------------------------------------\n// Env gating — use NEXT_PUBLIC_APTOS_NETWORK to control mainnet vs testnet.\n// Defaults to testnet until mainnet contracts are deployed and verified.\n// Set NEXT_PUBLIC_APTOS_NETWORK=mainnet to switch to mainnet.\n// ---------------------------------------------------------------------------\nexport const IS_APTOS_MAINNET = typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_APTOS_NETWORK === 'mainnet'\n\nexport const APTOS_NETWORK: Network = IS_APTOS_MAINNET ? Network.MAINNET : Network.TESTNET\n\n// ---------------------------------------------------------------------------\n// Contract address (single Move package containing bond, factory, treasury)\n// ---------------------------------------------------------------------------\n// Testnet address is the current apebond-move deployment (see CLAUDE.md).\n// Mainnet is a placeholder until PLAN_002 or a future mainnet deploy lands.\n// TODO(aptos): Replace APTOS_CONTRACT_ADDRESS_MAINNET when mainnet is deployed.\nconst APTOS_CONTRACT_ADDRESS_TESTNET = '0xa1cec270b22272c801092d031ba609091f2164988a5b96cde8d9bdac0de4287b'\nconst APTOS_CONTRACT_ADDRESS_MAINNET = '0x0000000000000000000000000000000000000000000000000000000000000000'\n\nexport const APTOS_CONTRACT_ADDRESS = IS_APTOS_MAINNET ? APTOS_CONTRACT_ADDRESS_MAINNET : APTOS_CONTRACT_ADDRESS_TESTNET\n\n// Warn loudly if we ever end up in production with the placeholder address —\n// that would silently break every Aptos interaction.\nif (\n typeof window !== 'undefined' &&\n IS_APTOS_MAINNET &&\n APTOS_CONTRACT_ADDRESS === APTOS_CONTRACT_ADDRESS_MAINNET &&\n APTOS_CONTRACT_ADDRESS_MAINNET.startsWith('0x0000')\n) {\n console.warn(\n '[ApeBond SDK] APTOS_CONTRACT_ADDRESS is still the placeholder in production. ' +\n 'Replace APTOS_CONTRACT_ADDRESS_MAINNET in src/constants/aptosConstants.ts before shipping.',\n )\n}\n\n// ---------------------------------------------------------------------------\n// Network endpoints (fullnode + indexer + explorer)\n// ---------------------------------------------------------------------------\n// Note: Aptos Labs authenticates via the `Authorization: Bearer <key>` header,\n// NOT via query parameters (unlike Helius). We therefore keep the URLs clean\n// and inject the key through `clientConfig.HEADERS` (see aptosHelpers.ts).\nexport const APTOS_FULLNODE_URL = IS_APTOS_MAINNET\n ? 'https://api.mainnet.aptoslabs.com/v1'\n : 'https://api.testnet.aptoslabs.com/v1'\n\nexport const APTOS_INDEXER_URL = IS_APTOS_MAINNET\n ? 'https://api.mainnet.aptoslabs.com/v1/graphql'\n : 'https://api.testnet.aptoslabs.com/v1/graphql'\n\nexport const APTOS_EXPLORER_URL = 'https://explorer.aptoslabs.com'\n\n// ---------------------------------------------------------------------------\n// API key rotation (same pattern as HELIUS_SOL_RPC_ENDPOINTS in networks.ts)\n// ---------------------------------------------------------------------------\n// TODO(APTOS): the testnet key below is a temporary dev key owned by Tomás.\n// Rotate it and add more keys for load balancing before the public testnet\n// launch.\nexport const APTOS_API_KEYS_TESTNET: string[] = ['aptoslabs_WmE77ykde6q_5vYSpFBrmsexdQF71Rp44az5BQNt51DeV']\n\n// TODO(APTOS): mainnet keys are pending — they will be generated once a\n// production deployment exists.\nexport const APTOS_API_KEYS_MAINNET: string[] = []\n\nexport const getRandomAptosApiKey = (): string | undefined => {\n const pool = IS_APTOS_MAINNET ? APTOS_API_KEYS_MAINNET : APTOS_API_KEYS_TESTNET\n if (pool.length === 0) return undefined\n return pool[Math.floor(Math.random() * pool.length)]\n}\n\n// ---------------------------------------------------------------------------\n// Module / entry function paths (stable across networks)\n// ---------------------------------------------------------------------------\n// Built directly from `APTOS_CONTRACT_ADDRESS` so TypeScript infers each\n// entry as `${string}::${string}::${string}`, which is exactly what the\n// Aptos ts-sdk's `InputEntryFunctionData.function` field expects. Going via\n// an intermediate `APTOS_BOND_MODULE` constant makes TS collapse the inner\n// template literal and lose the third segment — avoid that.\nexport const APTOS_BOND_MODULE = `${APTOS_CONTRACT_ADDRESS}::bond`\n// Typed narrowly so the Aptos ts-sdk `InputEntryFunctionData.function` field\n// (which expects `${string}::${string}::${string}`) accepts them directly.\n\n// Entry functions (write path)\nexport const APTOS_DEPOSIT_FUNCTION: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::deposit`\nexport const APTOS_CLAIM_FUNCTION: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::claim`\n\n// View functions (read path, PLAN_001 Etapa 5b).\n// Names verified against apebond-move-playground routes:\n// - app/bond-market-info → bond::market_info\n// - app/bond-bill-info → bond::bill_info\n// - app/bond-nft-user-bills → bond_nft::user_bills\n// - app/bond-nft-vesting-progress → bond_nft::vesting_progress\n// - app/bond-nft-bond-market-by-id → bond_nft::bond_market_by_id\n// - app/bond-nft-nft-address → bond_nft::nft_address\nexport const APTOS_VIEW_MARKET_INFO: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::market_info`\nexport const APTOS_VIEW_BILL_INFO: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::bill_info`\nexport const APTOS_VIEW_USER_BILLS: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond_nft::user_bills`\nexport const APTOS_VIEW_VESTING_PROGRESS: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::vesting_progress`\nexport const APTOS_VIEW_BOND_MARKET_BY_ID: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond_nft::bond_market_by_id`\nexport const APTOS_VIEW_NFT_ADDRESS: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond_nft::nft_address`\n\n// ---------------------------------------------------------------------------\n// Placeholder bill image (shown until backend enrichment is available)\n// ---------------------------------------------------------------------------\nexport const APTOS_PLACEHOLDER_BILL_IMAGE = 'https://www.ape.bond/images/bills/hidden-bill.jpg'\n"],"names":[],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,GAAG,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,yBAAyB,KAAK;AAEtG,MAAM,aAAa,GAAY,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;AAEnF;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,8BAA8B,GAAG,oEAAoE;AAC3G,MAAM,8BAA8B,GAAG,oEAAoE;AAEpG,MAAM,sBAAsB,GAAG,gBAAgB,GAAG,8BAA8B,GAAG;AAE1F;AACA;AACA,IACE,OAAO,MAAM,KAAK,WAAW;IAC7B,gBAAgB;AAChB,IAAA,sBAAsB,KAAK,8BAA8B;AACzD,IAAA,8BAA8B,CAAC,UAAU,CAAC,QAAQ,CAAC,EACnD;IACA,OAAO,CAAC,IAAI,CACV,+EAA+E;AAC7E,QAAA,4FAA4F,CAC/F;AACH;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,kBAAkB,GAAG;AAChC,MAAE;MACA;AAQJ;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,sBAAsB,GAAa,CAAC,yDAAyD;AAE1G;AACA;AACO,MAAM,sBAAsB,GAAa;AAEzC,MAAM,oBAAoB,GAAG,MAAyB;IAC3D,MAAM,IAAI,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,sBAAsB;AAC/E,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,SAAS;AACvC,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD;AAWA;AACA;AAEA;AACO,MAAM,sBAAsB,GAAsC,CAAA,EAAG,sBAAsB;AAC3F,MAAM,oBAAoB,GAAsC,CAAA,EAAG,sBAAsB;AAEhG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,sBAAsB,GAAsC,CAAA,EAAG,sBAAsB;AAC3F,MAAM,oBAAoB,GAAsC,CAAA,EAAG,sBAAsB;AACzF,MAAM,qBAAqB,GAAsC,CAAA,EAAG,sBAAsB;AAC1F,MAAM,2BAA2B,GAAsC,CAAA,EAAG,sBAAsB;AAChG,MAAM,4BAA4B,GAAsC,CAAA,EAAG,sBAAsB;AACjG,MAAM,sBAAsB,GAAsC,CAAA,EAAG,sBAAsB;AAElG;AACA;AACA;AACO,MAAM,4BAA4B,GAAG;;;;"}
1
+ {"version":3,"file":"aptosConstants.js","sources":["../../src/constants/aptosConstants.ts"],"sourcesContent":["import { Network } from '@aptos-labs/ts-sdk'\n\n// ---------------------------------------------------------------------------\n// Env gating — use NEXT_PUBLIC_APTOS_NETWORK to control mainnet vs testnet.\n// Defaults to testnet until mainnet contracts are deployed and verified.\n// Set NEXT_PUBLIC_APTOS_NETWORK=mainnet to switch to mainnet.\n// ---------------------------------------------------------------------------\nexport const IS_APTOS_MAINNET = typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_APTOS_NETWORK === 'mainnet'\n\nexport const APTOS_NETWORK: Network = IS_APTOS_MAINNET ? Network.MAINNET : Network.TESTNET\n\n// ---------------------------------------------------------------------------\n// Contract address (single Move package containing bond, factory, treasury)\n// ---------------------------------------------------------------------------\n// Testnet address is the current apebond-move deployment (see CLAUDE.md).\n// Mainnet is a placeholder until PLAN_002 or a future mainnet deploy lands.\n// TODO(aptos): Replace APTOS_CONTRACT_ADDRESS_MAINNET when mainnet is deployed.\nconst APTOS_CONTRACT_ADDRESS_TESTNET = '0xa1cec270b22272c801092d031ba609091f2164988a5b96cde8d9bdac0de4287b'\nconst APTOS_CONTRACT_ADDRESS_MAINNET = '0x0000000000000000000000000000000000000000000000000000000000000000'\n\nconst APTOS_CONTRACT_ADDRESS = IS_APTOS_MAINNET ? APTOS_CONTRACT_ADDRESS_MAINNET : APTOS_CONTRACT_ADDRESS_TESTNET\n\n// Warn loudly if we ever end up in production with the placeholder address —\n// that would silently break every Aptos interaction.\nif (\n typeof window !== 'undefined' &&\n IS_APTOS_MAINNET &&\n APTOS_CONTRACT_ADDRESS === APTOS_CONTRACT_ADDRESS_MAINNET &&\n APTOS_CONTRACT_ADDRESS_MAINNET.startsWith('0x0000')\n) {\n console.warn(\n '[ApeBond SDK] APTOS_CONTRACT_ADDRESS is still the placeholder in production. ' +\n 'Replace APTOS_CONTRACT_ADDRESS_MAINNET in src/constants/aptosConstants.ts before shipping.',\n )\n}\n\n// ---------------------------------------------------------------------------\n// Network endpoints (fullnode + indexer + explorer)\n// ---------------------------------------------------------------------------\n// Note: Aptos Labs authenticates via the `Authorization: Bearer <key>` header,\n// NOT via query parameters (unlike Helius). We therefore keep the URLs clean\n// and inject the key through `clientConfig.HEADERS` (see aptosHelpers.ts).\nexport const APTOS_FULLNODE_URL = IS_APTOS_MAINNET\n ? 'https://api.mainnet.aptoslabs.com/v1'\n : 'https://api.testnet.aptoslabs.com/v1'\n\n// export const APTOS_INDEXER_URL = IS_APTOS_MAINNET\n// ? 'https://api.mainnet.aptoslabs.com/v1/graphql'\n// : 'https://api.testnet.aptoslabs.com/v1/graphql'\n//\n// export const APTOS_EXPLORER_URL = 'https://explorer.aptoslabs.com'\n\n// ---------------------------------------------------------------------------\n// API key rotation (same pattern as HELIUS_SOL_RPC_ENDPOINTS in networks.ts)\n// ---------------------------------------------------------------------------\n// TODO(APTOS): the testnet key below is a temporary dev key owned by Tomás.\n// Rotate it and add more keys for load balancing before the public testnet\n// launch.\nconst APTOS_API_KEYS_TESTNET: string[] = ['aptoslabs_WmE77ykde6q_5vYSpFBrmsexdQF71Rp44az5BQNt51DeV']\n\n// TODO(APTOS): mainnet keys are pending — they will be generated once a\n// production deployment exists.\nconst APTOS_API_KEYS_MAINNET: string[] = []\n\nexport const getRandomAptosApiKey = (): string | undefined => {\n const pool = IS_APTOS_MAINNET ? APTOS_API_KEYS_MAINNET : APTOS_API_KEYS_TESTNET\n if (pool.length === 0) return undefined\n return pool[Math.floor(Math.random() * pool.length)]\n}\n\n// ---------------------------------------------------------------------------\n// Module / entry function paths (stable across networks)\n// ---------------------------------------------------------------------------\n// Built directly from `APTOS_CONTRACT_ADDRESS` so TypeScript infers each\n// entry as `${string}::${string}::${string}`, which is exactly what the\n// Aptos ts-sdk's `InputEntryFunctionData.function` field expects. Going via\n// an intermediate `APTOS_BOND_MODULE` constant makes TS collapse the inner\n// template literal and lose the third segment — avoid that.\n// export const APTOS_BOND_MODULE = `${APTOS_CONTRACT_ADDRESS}::bond`\n// Typed narrowly so the Aptos ts-sdk `InputEntryFunctionData.function` field\n// (which expects `${string}::${string}::${string}`) accepts them directly.\n\n// Entry functions (write path)\nexport const APTOS_DEPOSIT_FUNCTION: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::deposit`\nexport const APTOS_CLAIM_FUNCTION: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::claim`\n\n// View functions (read path, PLAN_001 Etapa 5b).\n// Names verified against apebond-move-playground routes:\n// - app/bond-market-info → bond::market_info\n// - app/bond-bill-info → bond::bill_info\n// - app/bond-nft-user-bills → bond_nft::user_bills\n// - app/bond-nft-vesting-progress → bond_nft::vesting_progress\n// - app/bond-nft-bond-market-by-id → bond_nft::bond_market_by_id\n// - app/bond-nft-nft-address → bond_nft::nft_address\nexport const APTOS_VIEW_MARKET_INFO: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::market_info`\nexport const APTOS_VIEW_BILL_INFO: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::bill_info`\nexport const APTOS_VIEW_USER_BILLS: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond_nft::user_bills`\nexport const APTOS_VIEW_VESTING_PROGRESS: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::vesting_progress`\nexport const APTOS_VIEW_BOND_MARKET_BY_ID: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond_nft::bond_market_by_id`\nexport const APTOS_VIEW_NFT_ADDRESS: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond_nft::nft_address`\n\n// ---------------------------------------------------------------------------\n// Placeholder bill image (shown until backend enrichment is available)\n// ---------------------------------------------------------------------------\nexport const APTOS_PLACEHOLDER_BILL_IMAGE = 'https://www.ape.bond/images/bills/hidden-bill.jpg'\n"],"names":[],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,GAAG,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,yBAAyB,KAAK;AAEtG,MAAM,aAAa,GAAY,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;AAEnF;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,8BAA8B,GAAG,oEAAoE;AAC3G,MAAM,8BAA8B,GAAG,oEAAoE;AAE3G,MAAM,sBAAsB,GAAG,gBAAgB,GAAG,8BAA8B,GAAG,8BAA8B;AAEjH;AACA;AACA,IACE,OAAO,MAAM,KAAK,WAAW;IAC7B,gBAAgB;AAChB,IAAA,sBAAsB,KAAK,8BAA8B;AACzD,IAAA,8BAA8B,CAAC,UAAU,CAAC,QAAQ,CAAC,EACnD;IACA,OAAO,CAAC,IAAI,CACV,+EAA+E;AAC7E,QAAA,4FAA4F,CAC/F;AACH;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,kBAAkB,GAAG;AAChC,MAAE;MACA;AAEJ;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,sBAAsB,GAAa,CAAC,yDAAyD,CAAC;AAEpG;AACA;AACA,MAAM,sBAAsB,GAAa,EAAE;AAEpC,MAAM,oBAAoB,GAAG,MAAyB;IAC3D,MAAM,IAAI,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,sBAAsB;AAC/E,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,SAAS;AACvC,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACO,MAAM,sBAAsB,GAAsC,CAAA,EAAG,sBAAsB;AAC3F,MAAM,oBAAoB,GAAsC,CAAA,EAAG,sBAAsB;AAEhG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,sBAAsB,GAAsC,CAAA,EAAG,sBAAsB;AAC3F,MAAM,oBAAoB,GAAsC,CAAA,EAAG,sBAAsB;AACzF,MAAM,qBAAqB,GAAsC,CAAA,EAAG,sBAAsB;AAC1F,MAAM,2BAA2B,GAAsC,CAAA,EAAG,sBAAsB;AAChG,MAAM,4BAA4B,GAAsC,CAAA,EAAG,sBAAsB;AACjG,MAAM,sBAAsB,GAAsC,CAAA,EAAG,sBAAsB;AAElG;AACA;AACA;AACO,MAAM,4BAA4B,GAAG;;;;"}
@@ -2,7 +2,6 @@ import { PublicKey } from '@solana/web3.js';
2
2
  import { Buffer } from 'buffer';
3
3
  export declare const PROGRAM_ID: PublicKey;
4
4
  export declare const MPL_CORE_PROGRAM_ID: PublicKey;
5
- export declare const SOLANA_DUMMY_PUBLIC_KEY: PublicKey;
6
5
  export declare const BOND_DISCRIMINATOR: Uint8Array<ArrayBuffer>;
7
6
  export declare const BOND_ISSUANCE_DISCRIMINATOR: Uint8Array<ArrayBuffer>;
8
7
  export declare const BOND_PRICING_DISCRIMINATOR: Uint8Array<ArrayBuffer>;
@@ -10,8 +9,3 @@ export declare const BOND_TERM_DISCRIMINATOR: Uint8Array<ArrayBuffer>;
10
9
  export declare const DEPOSIT_DISCRIMINATOR: Buffer<ArrayBuffer>;
11
10
  export declare const CLAIM_DISCRIMINATOR: Buffer<ArrayBuffer>;
12
11
  export declare const CLAIMABLE_PAYOUT_DISCRIMINATOR: Buffer<ArrayBuffer>;
13
- export declare const TRUE_BILL_PRICE_DISCRIMINATOR: Buffer<ArrayBuffer>;
14
- export declare const FEE_PAYOUT_CONST_SEED: Buffer<ArrayBuffer>;
15
- export declare const FEE_PAYOUT_PDA_PROGRAM: PublicKey;
16
- export declare const COMMON_CONST_SEED: Buffer<ArrayBuffer>;
17
- export declare const COMMON_PDA_PROGRAM: PublicKey;
@@ -5,8 +5,6 @@ import { Buffer } from 'buffer';
5
5
  // Program constants
6
6
  const PROGRAM_ID = new PublicKey(solanaProgramIdl.address);
7
7
  const MPL_CORE_PROGRAM_ID = new PublicKey('CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d');
8
- // Used for fee payer in view transactions that don't require a fee payer
9
- new PublicKey('11111111111111111111111111111112');
10
8
  // Accounts discriminators
11
9
  const BOND_DISCRIMINATOR = new Uint8Array([224, 128, 48, 251, 182, 246, 111, 196]);
12
10
  const BOND_ISSUANCE_DISCRIMINATOR = new Uint8Array([243, 27, 35, 153, 15, 167, 245, 230]);
@@ -16,25 +14,6 @@ const BOND_TERM_DISCRIMINATOR = new Uint8Array([45, 207, 18, 171, 171, 222, 242,
16
14
  const DEPOSIT_DISCRIMINATOR = Buffer.from([242, 35, 198, 137, 82, 225, 242, 182]);
17
15
  const CLAIM_DISCRIMINATOR = Buffer.from([62, 198, 214, 193, 213, 159, 108, 210]);
18
16
  const CLAIMABLE_PAYOUT_DISCRIMINATOR = Buffer.from([180, 245, 240, 160, 170, 121, 123, 10]);
19
- Buffer.from([105, 2, 40, 104, 17, 101, 241, 72]);
20
- // PDA constants
21
- Buffer.from([
22
- 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58,
23
- 140, 245, 133, 126, 255, 0, 169,
24
- ]);
25
- new PublicKey(Buffer.from([
26
- 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142,
27
- 123, 216, 219, 233, 248, 89,
28
- ]));
29
- // Common constants
30
- Buffer.from([
31
- 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58,
32
- 140, 245, 133, 126, 255, 0, 169,
33
- ]);
34
- new PublicKey(Buffer.from([
35
- 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142,
36
- 123, 216, 219, 233, 248, 89,
37
- ]));
38
17
 
39
18
  export { BOND_DISCRIMINATOR, BOND_ISSUANCE_DISCRIMINATOR, BOND_PRICING_DISCRIMINATOR, BOND_TERM_DISCRIMINATOR, CLAIMABLE_PAYOUT_DISCRIMINATOR, CLAIM_DISCRIMINATOR, DEPOSIT_DISCRIMINATOR, MPL_CORE_PROGRAM_ID, PROGRAM_ID };
40
19
  //# sourceMappingURL=solanaConstants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"solanaConstants.js","sources":["../../src/constants/solanaConstants.ts"],"sourcesContent":["import { PublicKey } from '@solana/web3.js'\nimport solanaProgramIdl from '../config/idl/solanaProgramIdl.json'\nimport { Buffer } from 'buffer'\n\n// Program constants\nexport const PROGRAM_ID = new PublicKey(solanaProgramIdl.address)\nexport const MPL_CORE_PROGRAM_ID = new PublicKey('CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d')\n\n// Used for fee payer in view transactions that don't require a fee payer\nexport const SOLANA_DUMMY_PUBLIC_KEY = new PublicKey('11111111111111111111111111111112')\n\n// Accounts discriminators\nexport const BOND_DISCRIMINATOR = new Uint8Array([224, 128, 48, 251, 182, 246, 111, 196])\nexport const BOND_ISSUANCE_DISCRIMINATOR = new Uint8Array([243, 27, 35, 153, 15, 167, 245, 230])\nexport const BOND_PRICING_DISCRIMINATOR = new Uint8Array([61, 208, 225, 148, 202, 31, 36, 34])\nexport const BOND_TERM_DISCRIMINATOR = new Uint8Array([45, 207, 18, 171, 171, 222, 242, 107])\n\n// Instructions discriminators\nexport const DEPOSIT_DISCRIMINATOR = Buffer.from([242, 35, 198, 137, 82, 225, 242, 182])\nexport const CLAIM_DISCRIMINATOR = Buffer.from([62, 198, 214, 193, 213, 159, 108, 210])\nexport const CLAIMABLE_PAYOUT_DISCRIMINATOR = Buffer.from([180, 245, 240, 160, 170, 121, 123, 10])\nexport const TRUE_BILL_PRICE_DISCRIMINATOR = Buffer.from([105, 2, 40, 104, 17, 101, 241, 72])\n\n// PDA constants\nexport const FEE_PAYOUT_CONST_SEED = Buffer.from([\n 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58,\n 140, 245, 133, 126, 255, 0, 169,\n])\n\nexport const FEE_PAYOUT_PDA_PROGRAM = new PublicKey(\n Buffer.from([\n 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142,\n 123, 216, 219, 233, 248, 89,\n ]),\n)\n\n// Common constants\nexport const COMMON_CONST_SEED = Buffer.from([\n 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58,\n 140, 245, 133, 126, 255, 0, 169,\n])\n\nexport const COMMON_PDA_PROGRAM = new PublicKey(\n Buffer.from([\n 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142,\n 123, 216, 219, 233, 248, 89,\n ]),\n)\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"solanaConstants.js","sources":["../../src/constants/solanaConstants.ts"],"sourcesContent":["import { PublicKey } from '@solana/web3.js'\nimport solanaProgramIdl from '../config/idl/solanaProgramIdl.json'\nimport { Buffer } from 'buffer'\n\n// Program constants\nexport const PROGRAM_ID = new PublicKey(solanaProgramIdl.address)\nexport const MPL_CORE_PROGRAM_ID = new PublicKey('CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d')\n\n// Accounts discriminators\nexport const BOND_DISCRIMINATOR = new Uint8Array([224, 128, 48, 251, 182, 246, 111, 196])\nexport const BOND_ISSUANCE_DISCRIMINATOR = new Uint8Array([243, 27, 35, 153, 15, 167, 245, 230])\nexport const BOND_PRICING_DISCRIMINATOR = new Uint8Array([61, 208, 225, 148, 202, 31, 36, 34])\nexport const BOND_TERM_DISCRIMINATOR = new Uint8Array([45, 207, 18, 171, 171, 222, 242, 107])\n\n// Instructions discriminators\nexport const DEPOSIT_DISCRIMINATOR = Buffer.from([242, 35, 198, 137, 82, 225, 242, 182])\nexport const CLAIM_DISCRIMINATOR = Buffer.from([62, 198, 214, 193, 213, 159, 108, 210])\nexport const CLAIMABLE_PAYOUT_DISCRIMINATOR = Buffer.from([180, 245, 240, 160, 170, 121, 123, 10])\n"],"names":[],"mappings":";;;;AAIA;AACO,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,gBAAgB,CAAC,OAAO;MACnD,mBAAmB,GAAG,IAAI,SAAS,CAAC,8CAA8C;AAE/F;AACO,MAAM,kBAAkB,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACjF,MAAM,2BAA2B,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACxF,MAAM,0BAA0B,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACtF,MAAM,uBAAuB,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAE5F;AACO,MAAM,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAChF,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC/E,MAAM,8BAA8B,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;;;;"}
@@ -1,11 +1,6 @@
1
1
  export declare const IS_SUI_MAINNET = true;
2
2
  export declare const SUI_NETWORK: 'mainnet' | 'testnet';
3
3
  export declare const SUI_PACKAGE_ID: string;
4
- export declare const SUI_BOND_MODULE: string;
5
4
  export declare const SUI_DEPOSIT_FUNCTION: string;
6
5
  export declare const SUI_CLAIM_FUNCTION: string;
7
- export declare const SUI_VIEW_MARKET_INFO: string;
8
- export declare const SUI_VIEW_BILL_INFO: string;
9
- export declare const SUI_VIEW_VESTING_PROGRESS: string;
10
- export declare const SUI_VIEW_USER_BILLS: string;
11
6
  export declare const SUI_PLACEHOLDER_BILL_IMAGE = "https://www.ape.bond/images/bills/hidden-bill.jpg";
@@ -15,9 +15,20 @@ if (typeof window !== 'undefined' &&
15
15
  console.warn('[ApeBond SDK] SUI_PACKAGE_ID is still the placeholder in production. ' +
16
16
  'Replace SUI_PACKAGE_ID_MAINNET in src/constants/suiConstants.ts before shipping.');
17
17
  }
18
+ // ---------------------------------------------------------------------------
19
+ // Module / entry function paths (stable across networks)
20
+ // ---------------------------------------------------------------------------
21
+ // Built directly from `SUI_PACKAGE_ID` so each path follows the
22
+ // `package::module::function` convention used by the Sui Move VM.
23
+ // export const SUI_BOND_MODULE = `${SUI_PACKAGE_ID}::bond`
18
24
  // Entry functions (write path)
19
25
  const SUI_DEPOSIT_FUNCTION = `${SUI_PACKAGE_ID}::bond::deposit`;
20
26
  const SUI_CLAIM_FUNCTION = `${SUI_PACKAGE_ID}::bond::claim`;
27
+ // View / read functions
28
+ // export const SUI_VIEW_MARKET_INFO = `${SUI_PACKAGE_ID}::bond::market_info`
29
+ // export const SUI_VIEW_BILL_INFO = `${SUI_PACKAGE_ID}::bond::bill_info`
30
+ // export const SUI_VIEW_VESTING_PROGRESS = `${SUI_PACKAGE_ID}::bond::vesting_progress`
31
+ // export const SUI_VIEW_USER_BILLS = `${SUI_PACKAGE_ID}::bond_nft::user_bills`
21
32
  // ---------------------------------------------------------------------------
22
33
  // Placeholder bill image (shown until backend enrichment is available)
23
34
  // ---------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"suiConstants.js","sources":["../../src/constants/suiConstants.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\n// Env gating — use NEXT_PUBLIC_SUI_NETWORK to control mainnet vs testnet.\n// Defaults to testnet until mainnet contracts are deployed and verified.\n// Set NEXT_PUBLIC_SUI_NETWORK=mainnet to switch to mainnet.\n// ---------------------------------------------------------------------------\nexport const IS_SUI_MAINNET = true\n\nexport const SUI_NETWORK: 'mainnet' | 'testnet' = IS_SUI_MAINNET ? 'mainnet' : 'testnet'\n\n// ---------------------------------------------------------------------------\n// Package ID (single Move package containing bond, factory, treasury modules)\n// ---------------------------------------------------------------------------\n// Testnet address is the current apebond-move-sui deployment.\n// MAINNET-TODO: Replace with your mainnet package ID after deploying contracts.\nconst SUI_PACKAGE_ID_TESTNET = '0x50c08fbf9c330f7658e1400f847f46b76165c8a68630e09a2d5ade0ceaa47264'\nconst SUI_PACKAGE_ID_MAINNET = '0x802ed2854f6523fc106644da079e0758ca759f63d9d577774b79c51b91f1a460'\n\nexport const SUI_PACKAGE_ID = IS_SUI_MAINNET ? SUI_PACKAGE_ID_MAINNET : SUI_PACKAGE_ID_TESTNET\n\n// Warn loudly if we ever end up in production with the placeholder address —\n// that would silently break every Sui interaction.\nif (\n typeof window !== 'undefined' &&\n IS_SUI_MAINNET &&\n SUI_PACKAGE_ID === SUI_PACKAGE_ID_MAINNET &&\n SUI_PACKAGE_ID_MAINNET.startsWith('0x0000')\n) {\n console.warn(\n '[ApeBond SDK] SUI_PACKAGE_ID is still the placeholder in production. ' +\n 'Replace SUI_PACKAGE_ID_MAINNET in src/constants/suiConstants.ts before shipping.',\n )\n}\n\n// ---------------------------------------------------------------------------\n// Module / entry function paths (stable across networks)\n// ---------------------------------------------------------------------------\n// Built directly from `SUI_PACKAGE_ID` so each path follows the\n// `package::module::function` convention used by the Sui Move VM.\nexport const SUI_BOND_MODULE = `${SUI_PACKAGE_ID}::bond`\n\n// Entry functions (write path)\nexport const SUI_DEPOSIT_FUNCTION = `${SUI_PACKAGE_ID}::bond::deposit`\nexport const SUI_CLAIM_FUNCTION = `${SUI_PACKAGE_ID}::bond::claim`\n\n// View / read functions\nexport const SUI_VIEW_MARKET_INFO = `${SUI_PACKAGE_ID}::bond::market_info`\nexport const SUI_VIEW_BILL_INFO = `${SUI_PACKAGE_ID}::bond::bill_info`\nexport const SUI_VIEW_VESTING_PROGRESS = `${SUI_PACKAGE_ID}::bond::vesting_progress`\nexport const SUI_VIEW_USER_BILLS = `${SUI_PACKAGE_ID}::bond_nft::user_bills`\n\n// ---------------------------------------------------------------------------\n// Placeholder bill image (shown until backend enrichment is available)\n// ---------------------------------------------------------------------------\nexport const SUI_PLACEHOLDER_BILL_IMAGE = 'https://www.ape.bond/images/bills/hidden-bill.jpg'\n"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,GAAG;AAU9B,MAAM,sBAAsB,GAAG,oEAAoE;AAE5F,MAAM,cAAc,GAAoB,sBAAsB;AAErE;AACA;AACA,IACE,OAAO,MAAM,KAAK,WAAW;IAC7B,cAAc;AACd,IAAA,cAAc,KAAK,sBAAsB;AACzC,IAAA,sBAAsB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC3C;IACA,OAAO,CAAC,IAAI,CACV,uEAAuE;AACrE,QAAA,kFAAkF,CACrF;AACH;AASA;AACO,MAAM,oBAAoB,GAAG,CAAA,EAAG,cAAc;AAC9C,MAAM,kBAAkB,GAAG,CAAA,EAAG,cAAc;AAQnD;AACA;AACA;AACO,MAAM,0BAA0B,GAAG;;;;"}
1
+ {"version":3,"file":"suiConstants.js","sources":["../../src/constants/suiConstants.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\n// Env gating — use NEXT_PUBLIC_SUI_NETWORK to control mainnet vs testnet.\n// Defaults to testnet until mainnet contracts are deployed and verified.\n// Set NEXT_PUBLIC_SUI_NETWORK=mainnet to switch to mainnet.\n// ---------------------------------------------------------------------------\nexport const IS_SUI_MAINNET = true\n\nexport const SUI_NETWORK: 'mainnet' | 'testnet' = IS_SUI_MAINNET ? 'mainnet' : 'testnet'\n\n// ---------------------------------------------------------------------------\n// Package ID (single Move package containing bond, factory, treasury modules)\n// ---------------------------------------------------------------------------\n// Testnet address is the current apebond-move-sui deployment.\n// MAINNET-TODO: Replace with your mainnet package ID after deploying contracts.\nconst SUI_PACKAGE_ID_TESTNET = '0x50c08fbf9c330f7658e1400f847f46b76165c8a68630e09a2d5ade0ceaa47264'\nconst SUI_PACKAGE_ID_MAINNET = '0x802ed2854f6523fc106644da079e0758ca759f63d9d577774b79c51b91f1a460'\n\nexport const SUI_PACKAGE_ID = IS_SUI_MAINNET ? SUI_PACKAGE_ID_MAINNET : SUI_PACKAGE_ID_TESTNET\n\n// Warn loudly if we ever end up in production with the placeholder address —\n// that would silently break every Sui interaction.\nif (\n typeof window !== 'undefined' &&\n IS_SUI_MAINNET &&\n SUI_PACKAGE_ID === SUI_PACKAGE_ID_MAINNET &&\n SUI_PACKAGE_ID_MAINNET.startsWith('0x0000')\n) {\n console.warn(\n '[ApeBond SDK] SUI_PACKAGE_ID is still the placeholder in production. ' +\n 'Replace SUI_PACKAGE_ID_MAINNET in src/constants/suiConstants.ts before shipping.',\n )\n}\n\n// ---------------------------------------------------------------------------\n// Module / entry function paths (stable across networks)\n// ---------------------------------------------------------------------------\n// Built directly from `SUI_PACKAGE_ID` so each path follows the\n// `package::module::function` convention used by the Sui Move VM.\n// export const SUI_BOND_MODULE = `${SUI_PACKAGE_ID}::bond`\n\n// Entry functions (write path)\nexport const SUI_DEPOSIT_FUNCTION = `${SUI_PACKAGE_ID}::bond::deposit`\nexport const SUI_CLAIM_FUNCTION = `${SUI_PACKAGE_ID}::bond::claim`\n\n// View / read functions\n// export const SUI_VIEW_MARKET_INFO = `${SUI_PACKAGE_ID}::bond::market_info`\n// export const SUI_VIEW_BILL_INFO = `${SUI_PACKAGE_ID}::bond::bill_info`\n// export const SUI_VIEW_VESTING_PROGRESS = `${SUI_PACKAGE_ID}::bond::vesting_progress`\n// export const SUI_VIEW_USER_BILLS = `${SUI_PACKAGE_ID}::bond_nft::user_bills`\n\n// ---------------------------------------------------------------------------\n// Placeholder bill image (shown until backend enrichment is available)\n// ---------------------------------------------------------------------------\nexport const SUI_PLACEHOLDER_BILL_IMAGE = 'https://www.ape.bond/images/bills/hidden-bill.jpg'\n"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,GAAG;AAU9B,MAAM,sBAAsB,GAAG,oEAAoE;AAE5F,MAAM,cAAc,GAAoB,sBAAsB;AAErE;AACA;AACA,IACE,OAAO,MAAM,KAAK,WAAW;IAC7B,cAAc;AACd,IAAA,cAAc,KAAK,sBAAsB;AACzC,IAAA,sBAAsB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC3C;IACA,OAAO,CAAC,IAAI,CACV,uEAAuE;AACrE,QAAA,kFAAkF,CACrF;AACH;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACO,MAAM,oBAAoB,GAAG,CAAA,EAAG,cAAc;AAC9C,MAAM,kBAAkB,GAAG,CAAA,EAAG,cAAc;AAEnD;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACO,MAAM,0BAA0B,GAAG;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { ChainId, Token } from '@ape.swap/apeswap-lists';
2
- export interface SortedZapList {
2
+ interface SortedZapList {
3
3
  token: 'NATIVE' | Token;
4
4
  price: number;
5
5
  balance?: string;
@@ -1,8 +1,7 @@
1
- import '../config/constants/tokens.js';
1
+ import { zapInputTokens, WNATIVE } from '@ape.swap/apeswap-lists';
2
2
  import useTokenPrices from '../state/tokenPrices/useTokenPrices.js';
3
3
  import uniqBy from 'lodash-es/uniqBy.js';
4
4
  import useUserTokensBalance from '../state/balance/useUserTokensBalance.js';
5
- import { zapInputTokens, WNATIVE } from '@ape.swap/apeswap-lists';
6
5
 
7
6
  const useSortedZapList = (chainId, principalToken) => {
8
7
  const zapList = [...(zapInputTokens[chainId] ?? []), principalToken];
@@ -1 +1 @@
1
- {"version":3,"file":"useSortedZapList.js","sources":["../../src/hooks/useSortedZapList.ts"],"sourcesContent":["import { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { WNATIVE, zapInputTokens } from '../config/constants/tokens'\nimport useTokenPrices from '../state/tokenPrices/useTokenPrices'\nimport uniqBy from 'lodash-es/uniqBy.js'\nimport useUserTokensBalance from '../state/balance/useUserTokensBalance'\n\nexport interface SortedZapList {\n token: 'NATIVE' | Token\n price: number\n balance?: string\n usdValue: number\n}\nconst useSortedZapList = (\n chainId?: ChainId,\n principalToken?: Token,\n): { sortedZapList: SortedZapList[]; isFetched: boolean } => {\n const zapList = [...(zapInputTokens[chainId as ChainId] ?? []), principalToken]\n\n //@ts-ignore\n const uniqueTokensList: ('NATIVE' | Token)[] = getUniqueTokensList(zapList, chainId as ChainId, principalToken)\n const { data: tokenPrices, isFetched: tokensFetched } = useTokenPrices()\n const { data: balances, isFetched: balancesFetched } = useUserTokensBalance(uniqueTokensList, chainId as ChainId)\n\n //@ts-ignore\n const sortedZapList: SortedZapList[] = uniqueTokensList\n .map((list: 'NATIVE' | Token) => {\n const token: Token = list === 'NATIVE' && chainId ? (WNATIVE[chainId] as Token) : (list as Token)\n const findPrice = tokenPrices?.[chainId!]?.find(\n (tokenPrice) =>\n tokenPrice.chainId === chainId &&\n tokenPrice?.tokenAddress?.toLowerCase() === token?.address?.[chainId as ChainId]?.toLowerCase(),\n )\n const price = isNaN(Number(findPrice?.price)) ? 0 : Number(findPrice?.price)\n const balance = balances?.find((balance) =>\n list === 'NATIVE'\n ? balance.address === 'NATIVE'\n : balance.address.toLowerCase() === token?.address?.[chainId as ChainId]?.toLowerCase(),\n )?.balance\n return {\n token: list === 'NATIVE' ? 'NATIVE' : token,\n price,\n balance,\n usdValue: Number(balance) * price,\n }\n })\n .sort((a, b) => {\n return b.usdValue - a.usdValue\n })\n\n return { sortedZapList, isFetched: tokensFetched && balancesFetched }\n}\n\nconst getUniqueTokensList = (zapList: Token[], chainId: ChainId, principalToken?: Token): ('NATIVE' | Token)[] => {\n const parsedList =\n zapList?.filter((token) => {\n return token?.address?.[chainId]?.toLowerCase() !== principalToken?.address?.[chainId]?.toLowerCase()\n }) ?? []\n\n // If principal token IS the native token (e.g. APT on Aptos), skip adding it\n // separately — 'NATIVE' already covers it and uniqBy can't dedup them because\n // 'NATIVE' is a string without an .address property.\n const principalIsNative =\n principalToken?.address?.[chainId]?.toLowerCase() === WNATIVE[chainId]?.address?.[chainId]?.toLowerCase()\n\n const inputTokenList: (Token | 'NATIVE')[] =\n principalToken && !principalIsNative ? [principalToken, 'NATIVE', ...parsedList] : ['NATIVE', ...parsedList]\n\n return uniqBy(inputTokenList, `address.[${chainId}]`)\n}\n\nexport default useSortedZapList\n"],"names":[],"mappings":";;;;;;AAYA,MAAM,gBAAgB,GAAG,CACvB,OAAiB,EACjB,cAAsB,KACoC;AAC1D,IAAA,MAAM,OAAO,GAAG,CAAC,IAAI,cAAc,CAAC,OAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,cAAc,CAAC;;IAG/E,MAAM,gBAAgB,GAAyB,mBAAmB,CAAC,OAAO,EAAE,OAAkB,EAAE,cAAc,CAAC;AAC/G,IAAA,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,cAAc,EAAE;AACxE,IAAA,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,OAAkB,CAAC;;IAGjH,MAAM,aAAa,GAAoB;AACpC,SAAA,GAAG,CAAC,CAAC,IAAsB,KAAI;AAC9B,QAAA,MAAM,KAAK,GAAU,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAI,OAAO,CAAC,OAAO,CAAW,GAAI,IAAc;AACjG,QAAA,MAAM,SAAS,GAAG,WAAW,GAAG,OAAQ,CAAC,EAAE,IAAI,CAC7C,CAAC,UAAU,KACT,UAAU,CAAC,OAAO,KAAK,OAAO;AAC9B,YAAA,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,KAAK,EAAE,OAAO,GAAG,OAAkB,CAAC,EAAE,WAAW,EAAE,CAClG;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;AAC5E,QAAA,MAAM,OAAO,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,KACrC,IAAI,KAAK;AACP,cAAE,OAAO,CAAC,OAAO,KAAK;cACpB,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,OAAO,GAAG,OAAkB,CAAC,EAAE,WAAW,EAAE,CAC1F,EAAE,OAAO;QACV,OAAO;YACL,KAAK,EAAE,IAAI,KAAK,QAAQ,GAAG,QAAQ,GAAG,KAAK;YAC3C,KAAK;YACL,OAAO;AACP,YAAA,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK;SAClC;AACH,IAAA,CAAC;AACA,SAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACb,QAAA,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ;AAChC,IAAA,CAAC,CAAC;IAEJ,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,IAAI,eAAe,EAAE;AACvE;AAEA,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,OAAgB,EAAE,cAAsB,KAA0B;IAC/G,MAAM,UAAU,GACd,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,KAAI;QACxB,OAAO,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,WAAW,EAAE;IACvG,CAAC,CAAC,IAAI,EAAE;;;;IAKV,MAAM,iBAAiB,GACrB,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,WAAW,EAAE;IAE3G,MAAM,cAAc,GAClB,cAAc,IAAI,CAAC,iBAAiB,GAAG,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC;IAE9G,OAAO,MAAM,CAAC,cAAc,EAAE,YAAY,OAAO,CAAA,CAAA,CAAG,CAAC;AACvD,CAAC;;;;"}
1
+ {"version":3,"file":"useSortedZapList.js","sources":["../../src/hooks/useSortedZapList.ts"],"sourcesContent":["import { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { WNATIVE, zapInputTokens } from '@ape.swap/apeswap-lists'\nimport useTokenPrices from '../state/tokenPrices/useTokenPrices'\nimport uniqBy from 'lodash-es/uniqBy.js'\nimport useUserTokensBalance from '../state/balance/useUserTokensBalance'\n\ninterface SortedZapList {\n token: 'NATIVE' | Token\n price: number\n balance?: string\n usdValue: number\n}\nconst useSortedZapList = (\n chainId?: ChainId,\n principalToken?: Token,\n): { sortedZapList: SortedZapList[]; isFetched: boolean } => {\n const zapList = [...(zapInputTokens[chainId as ChainId] ?? []), principalToken]\n\n //@ts-ignore\n const uniqueTokensList: ('NATIVE' | Token)[] = getUniqueTokensList(zapList, chainId as ChainId, principalToken)\n const { data: tokenPrices, isFetched: tokensFetched } = useTokenPrices()\n const { data: balances, isFetched: balancesFetched } = useUserTokensBalance(uniqueTokensList, chainId as ChainId)\n\n //@ts-ignore\n const sortedZapList: SortedZapList[] = uniqueTokensList\n .map((list: 'NATIVE' | Token) => {\n const token: Token = list === 'NATIVE' && chainId ? (WNATIVE[chainId] as Token) : (list as Token)\n const findPrice = tokenPrices?.[chainId!]?.find(\n (tokenPrice) =>\n tokenPrice.chainId === chainId &&\n tokenPrice?.tokenAddress?.toLowerCase() === token?.address?.[chainId as ChainId]?.toLowerCase(),\n )\n const price = isNaN(Number(findPrice?.price)) ? 0 : Number(findPrice?.price)\n const balance = balances?.find((balance) =>\n list === 'NATIVE'\n ? balance.address === 'NATIVE'\n : balance.address.toLowerCase() === token?.address?.[chainId as ChainId]?.toLowerCase(),\n )?.balance\n return {\n token: list === 'NATIVE' ? 'NATIVE' : token,\n price,\n balance,\n usdValue: Number(balance) * price,\n }\n })\n .sort((a, b) => {\n return b.usdValue - a.usdValue\n })\n\n return { sortedZapList, isFetched: tokensFetched && balancesFetched }\n}\n\nconst getUniqueTokensList = (zapList: Token[], chainId: ChainId, principalToken?: Token): ('NATIVE' | Token)[] => {\n const parsedList =\n zapList?.filter((token) => {\n return token?.address?.[chainId]?.toLowerCase() !== principalToken?.address?.[chainId]?.toLowerCase()\n }) ?? []\n\n // If principal token IS the native token (e.g. APT on Aptos), skip adding it\n // separately — 'NATIVE' already covers it and uniqBy can't dedup them because\n // 'NATIVE' is a string without an .address property.\n const principalIsNative =\n principalToken?.address?.[chainId]?.toLowerCase() === WNATIVE[chainId]?.address?.[chainId]?.toLowerCase()\n\n const inputTokenList: (Token | 'NATIVE')[] =\n principalToken && !principalIsNative ? [principalToken, 'NATIVE', ...parsedList] : ['NATIVE', ...parsedList]\n\n return uniqBy(inputTokenList, `address.[${chainId}]`)\n}\n\nexport default useSortedZapList\n"],"names":[],"mappings":";;;;;AAYA,MAAM,gBAAgB,GAAG,CACvB,OAAiB,EACjB,cAAsB,KACoC;AAC1D,IAAA,MAAM,OAAO,GAAG,CAAC,IAAI,cAAc,CAAC,OAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,cAAc,CAAC;;IAG/E,MAAM,gBAAgB,GAAyB,mBAAmB,CAAC,OAAO,EAAE,OAAkB,EAAE,cAAc,CAAC;AAC/G,IAAA,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,cAAc,EAAE;AACxE,IAAA,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,OAAkB,CAAC;;IAGjH,MAAM,aAAa,GAAoB;AACpC,SAAA,GAAG,CAAC,CAAC,IAAsB,KAAI;AAC9B,QAAA,MAAM,KAAK,GAAU,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAI,OAAO,CAAC,OAAO,CAAW,GAAI,IAAc;AACjG,QAAA,MAAM,SAAS,GAAG,WAAW,GAAG,OAAQ,CAAC,EAAE,IAAI,CAC7C,CAAC,UAAU,KACT,UAAU,CAAC,OAAO,KAAK,OAAO;AAC9B,YAAA,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,KAAK,EAAE,OAAO,GAAG,OAAkB,CAAC,EAAE,WAAW,EAAE,CAClG;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;AAC5E,QAAA,MAAM,OAAO,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,KACrC,IAAI,KAAK;AACP,cAAE,OAAO,CAAC,OAAO,KAAK;cACpB,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,OAAO,GAAG,OAAkB,CAAC,EAAE,WAAW,EAAE,CAC1F,EAAE,OAAO;QACV,OAAO;YACL,KAAK,EAAE,IAAI,KAAK,QAAQ,GAAG,QAAQ,GAAG,KAAK;YAC3C,KAAK;YACL,OAAO;AACP,YAAA,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK;SAClC;AACH,IAAA,CAAC;AACA,SAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACb,QAAA,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ;AAChC,IAAA,CAAC,CAAC;IAEJ,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,IAAI,eAAe,EAAE;AACvE;AAEA,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,OAAgB,EAAE,cAAsB,KAA0B;IAC/G,MAAM,UAAU,GACd,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,KAAI;QACxB,OAAO,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,WAAW,EAAE;IACvG,CAAC,CAAC,IAAI,EAAE;;;;IAKV,MAAM,iBAAiB,GACrB,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,WAAW,EAAE;IAE3G,MAAM,cAAc,GAClB,cAAc,IAAI,CAAC,iBAAiB,GAAG,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC;IAE9G,OAAO,MAAM,CAAC,cAAc,EAAE,YAAY,OAAO,CAAA,CAAA,CAAG,CAAC;AACvD,CAAC;;;;"}
@@ -1,4 +1,3 @@
1
- import '../config/constants/tokens.js';
2
1
  import { zapInputTokens } from '@ape.swap/apeswap-lists';
3
2
 
4
3
  const useTokenFromZapList = (tokenString, chainId, principalToken) => {
@@ -1 +1 @@
1
- {"version":3,"file":"useTokenFromZapList.js","sources":["../../src/hooks/useTokenFromZapList.ts"],"sourcesContent":["import { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { zapInputTokens } from '../config/constants/tokens'\n\nconst useTokenFromZapList = (\n tokenString?: string,\n chainId?: ChainId,\n principalToken?: Token,\n): Token | 'NATIVE' | undefined => {\n if (tokenString === 'NATIVE') return 'NATIVE'\n if (!tokenString || !chainId) return undefined\n const zapList = principalToken ? [...(zapInputTokens[chainId] ?? []), principalToken] : zapInputTokens[chainId]\n return zapList?.find((token: Token) => token.address[chainId]?.toLowerCase() === tokenString?.toLowerCase())\n}\n\nexport default useTokenFromZapList\n"],"names":[],"mappings":";;;AAGA,MAAM,mBAAmB,GAAG,CAC1B,WAAoB,EACpB,OAAiB,EACjB,cAAsB,KACU;IAChC,IAAI,WAAW,KAAK,QAAQ;AAAE,QAAA,OAAO,QAAQ;AAC7C,IAAA,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,SAAS;IAC9C,MAAM,OAAO,GAAG,cAAc,GAAG,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,cAAc,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC;IAC/G,OAAO,OAAO,EAAE,IAAI,CAAC,CAAC,KAAY,KAAK,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,WAAW,EAAE,CAAC;AAC9G;;;;"}
1
+ {"version":3,"file":"useTokenFromZapList.js","sources":["../../src/hooks/useTokenFromZapList.ts"],"sourcesContent":["import { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { zapInputTokens } from '@ape.swap/apeswap-lists'\n\nconst useTokenFromZapList = (\n tokenString?: string,\n chainId?: ChainId,\n principalToken?: Token,\n): Token | 'NATIVE' | undefined => {\n if (tokenString === 'NATIVE') return 'NATIVE'\n if (!tokenString || !chainId) return undefined\n const zapList = principalToken ? [...(zapInputTokens[chainId] ?? []), principalToken] : zapInputTokens[chainId]\n return zapList?.find((token: Token) => token.address[chainId]?.toLowerCase() === tokenString?.toLowerCase())\n}\n\nexport default useTokenFromZapList\n"],"names":[],"mappings":";;AAGA,MAAM,mBAAmB,GAAG,CAC1B,WAAoB,EACpB,OAAiB,EACjB,cAAsB,KACU;IAChC,IAAI,WAAW,KAAK,QAAQ;AAAE,QAAA,OAAO,QAAQ;AAC7C,IAAA,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,SAAS;IAC9C,MAAM,OAAO,GAAG,cAAc,GAAG,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,cAAc,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC;IAC/G,OAAO,OAAO,EAAE,IAAI,CAAC,CAAC,KAAY,KAAK,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,WAAW,EAAE,CAAC;AAC9G;;;;"}
@@ -1,4 +1,15 @@
1
1
  import React from 'react';
2
+ /**
3
+ * This is the list of local providers that will be used internally by the SDK
4
+ *
5
+ * It is important to understand the difference between this component and the one located on the dev directory,
6
+ * which aims to simulate the providers required to be installed by the consumer of the SDK.
7
+ *
8
+ * Finally, it is important to note that this Providers component should NOT be used multiple times, so for instance:
9
+ * The components exported from the src/main.ts file are all wrapped with this Provider component. Though the FullBondsView
10
+ * component that imports the Bonds and YourBonds views, do NOT import the Bonds and YourBonds with providers, it imports
11
+ * the component directly without providers. This is important to understand.
12
+ */
2
13
  declare const Providers: ({ children, theme }: {
3
14
  children: React.ReactNode;
4
15
  theme: any;
@@ -2,7 +2,6 @@ import { jsx } from 'theme-ui/jsx-runtime';
2
2
  import ModalProvider from '../contexts/ModalContext.js';
3
3
  import { defaultTheme } from '../theme/index.js';
4
4
  import { ThemeUIProvider } from 'theme-ui';
5
- import BigNumber from 'bignumber.js';
6
5
  import Popups from '../contexts/Popups.js';
7
6
 
8
7
  /**
@@ -16,11 +15,6 @@ import Popups from '../contexts/Popups.js';
16
15
  * component that imports the Bonds and YourBonds views, do NOT import the Bonds and YourBonds with providers, it imports
17
16
  * the component directly without providers. This is important to understand.
18
17
  */
19
- // This config is required for number formatting
20
- BigNumber.config({
21
- EXPONENTIAL_AT: 1000,
22
- DECIMAL_PLACES: 80,
23
- });
24
18
  const Providers = ({ children, theme }) => {
25
19
  const themeToUse = defaultTheme;
26
20
  if (themeToUse?.colors?.primaryButton && theme?.colors?.primaryButton) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/providers/index.tsx"],"sourcesContent":["import React from 'react'\nimport ModalProvider from '../contexts/ModalContext'\nimport { defaultTheme } from '../theme'\nimport { ThemeUIProvider } from 'theme-ui'\nimport BigNumber from 'bignumber.js'\nimport Popups from '../contexts/Popups'\n\n/**\n * This is the list of local providers that will be used internally by the SDK\n *\n * It is important to understand the difference between this component and the one located on the dev directory,\n * which aims to simulate the providers required to be installed by the consumer of the SDK.\n *\n * Finally, it is important to note that this Providers component should NOT be used multiple times, so for instance:\n * The components exported from the src/main.ts file are all wrapped with this Provider component. Though the FullBondsView\n * component that imports the Bonds and YourBonds views, do NOT import the Bonds and YourBonds with providers, it imports\n * the component directly without providers. This is important to understand.\n */\n\n// This config is required for number formatting\nBigNumber.config({\n EXPONENTIAL_AT: 1000,\n DECIMAL_PLACES: 80,\n})\n\nconst Providers = ({ children, theme }: { children: React.ReactNode; theme: any }) => {\n const themeToUse = defaultTheme\n\n if (themeToUse?.colors?.primaryButton && theme?.colors?.primaryButton) {\n themeToUse.colors.primaryButton = theme?.colors?.primaryButton\n }\n if (themeToUse?.colors?.white1 && theme?.colors?.white1) {\n themeToUse.colors.white1 = theme?.colors?.white1\n }\n if (themeToUse?.colors?.white2 && theme?.colors?.white2) {\n themeToUse.colors.white2 = theme?.colors?.white2\n }\n if (themeToUse?.colors?.white3 && theme?.colors?.white3) {\n themeToUse.colors.white3 = theme?.colors?.white3\n }\n if (themeToUse?.colors?.white4 && theme?.colors?.white4) {\n themeToUse.colors.white4 = theme?.colors?.white4\n }\n if (themeToUse?.colors?.white5 && theme?.colors?.white5) {\n themeToUse.colors.white5 = theme?.colors?.white5\n }\n if (themeToUse?.colors?.text && theme?.colors?.text) {\n themeToUse.colors.text = theme?.colors?.text\n }\n if (themeToUse?.colors?.primaryBright && theme?.colors?.primaryBright) {\n themeToUse.colors.primaryBright = theme?.colors?.primaryBright\n }\n if (themeToUse?.radii && theme?.radii) {\n themeToUse.radii = { normal: theme?.radii }\n }\n if (themeToUse?.fonts && theme?.customFont) {\n themeToUse.fonts = {\n body: `${theme?.customFont}, sans-serif`,\n }\n }\n\n return (\n <ThemeUIProvider theme={themeToUse}>\n <ModalProvider>\n <Popups>{children}</Popups>\n </ModalProvider>\n </ThemeUIProvider>\n )\n}\n\nexport default Providers\n"],"names":["_jsx"],"mappings":";;;;;;;AAOA;;;;;;;;;;AAUG;AAEH;AACA,SAAS,CAAC,MAAM,CAAC;AACf,IAAA,cAAc,EAAE,IAAI;AACpB,IAAA,cAAc,EAAE,EAAE;AACnB,CAAA,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAA6C,KAAI;IACnF,MAAM,UAAU,GAAG,YAAY;AAE/B,IAAA,IAAI,UAAU,EAAE,MAAM,EAAE,aAAa,IAAI,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE;QACrE,UAAU,CAAC,MAAM,CAAC,aAAa,GAAG,KAAK,EAAE,MAAM,EAAE,aAAa;IAChE;AACA,IAAA,IAAI,UAAU,EAAE,MAAM,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;QACvD,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM;IAClD;AACA,IAAA,IAAI,UAAU,EAAE,MAAM,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;QACvD,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM;IAClD;AACA,IAAA,IAAI,UAAU,EAAE,MAAM,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;QACvD,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM;IAClD;AACA,IAAA,IAAI,UAAU,EAAE,MAAM,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;QACvD,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM;IAClD;AACA,IAAA,IAAI,UAAU,EAAE,MAAM,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;QACvD,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM;IAClD;AACA,IAAA,IAAI,UAAU,EAAE,MAAM,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;QACnD,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,EAAE,MAAM,EAAE,IAAI;IAC9C;AACA,IAAA,IAAI,UAAU,EAAE,MAAM,EAAE,aAAa,IAAI,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE;QACrE,UAAU,CAAC,MAAM,CAAC,aAAa,GAAG,KAAK,EAAE,MAAM,EAAE,aAAa;IAChE;IACA,IAAI,UAAU,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,EAAE;QACrC,UAAU,CAAC,KAAK,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;IAC7C;IACA,IAAI,UAAU,EAAE,KAAK,IAAI,KAAK,EAAE,UAAU,EAAE;QAC1C,UAAU,CAAC,KAAK,GAAG;AACjB,YAAA,IAAI,EAAE,CAAA,EAAG,KAAK,EAAE,UAAU,CAAA,YAAA,CAAc;SACzC;IACH;AAEA,IAAA,QACEA,GAAA,CAAC,eAAe,IAAC,KAAK,EAAE,UAAU,EAAA,QAAA,EAChCA,GAAA,CAAC,aAAa,EAAA,EAAA,QAAA,EACZA,GAAA,CAAC,MAAM,EAAA,EAAA,QAAA,EAAE,QAAQ,GAAU,EAAA,CACb,EAAA,CACA;AAEtB;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/providers/index.tsx"],"sourcesContent":["import React from 'react'\nimport ModalProvider from '../contexts/ModalContext'\nimport { defaultTheme } from '../theme'\nimport { ThemeUIProvider } from 'theme-ui'\nimport Popups from '../contexts/Popups'\n\n/**\n * This is the list of local providers that will be used internally by the SDK\n *\n * It is important to understand the difference between this component and the one located on the dev directory,\n * which aims to simulate the providers required to be installed by the consumer of the SDK.\n *\n * Finally, it is important to note that this Providers component should NOT be used multiple times, so for instance:\n * The components exported from the src/main.ts file are all wrapped with this Provider component. Though the FullBondsView\n * component that imports the Bonds and YourBonds views, do NOT import the Bonds and YourBonds with providers, it imports\n * the component directly without providers. This is important to understand.\n */\n\nconst Providers = ({ children, theme }: { children: React.ReactNode; theme: any }) => {\n const themeToUse = defaultTheme\n\n if (themeToUse?.colors?.primaryButton && theme?.colors?.primaryButton) {\n themeToUse.colors.primaryButton = theme?.colors?.primaryButton\n }\n if (themeToUse?.colors?.white1 && theme?.colors?.white1) {\n themeToUse.colors.white1 = theme?.colors?.white1\n }\n if (themeToUse?.colors?.white2 && theme?.colors?.white2) {\n themeToUse.colors.white2 = theme?.colors?.white2\n }\n if (themeToUse?.colors?.white3 && theme?.colors?.white3) {\n themeToUse.colors.white3 = theme?.colors?.white3\n }\n if (themeToUse?.colors?.white4 && theme?.colors?.white4) {\n themeToUse.colors.white4 = theme?.colors?.white4\n }\n if (themeToUse?.colors?.white5 && theme?.colors?.white5) {\n themeToUse.colors.white5 = theme?.colors?.white5\n }\n if (themeToUse?.colors?.text && theme?.colors?.text) {\n themeToUse.colors.text = theme?.colors?.text\n }\n if (themeToUse?.colors?.primaryBright && theme?.colors?.primaryBright) {\n themeToUse.colors.primaryBright = theme?.colors?.primaryBright\n }\n if (themeToUse?.radii && theme?.radii) {\n themeToUse.radii = { normal: theme?.radii }\n }\n if (themeToUse?.fonts && theme?.customFont) {\n themeToUse.fonts = {\n body: `${theme?.customFont}, sans-serif`,\n }\n }\n\n return (\n <ThemeUIProvider theme={themeToUse}>\n <ModalProvider>\n <Popups>{children}</Popups>\n </ModalProvider>\n </ThemeUIProvider>\n )\n}\n\nexport default Providers\n"],"names":["_jsx"],"mappings":";;;;;;AAMA;;;;;;;;;;AAUG;AAEH,MAAM,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAA6C,KAAI;IACnF,MAAM,UAAU,GAAG,YAAY;AAE/B,IAAA,IAAI,UAAU,EAAE,MAAM,EAAE,aAAa,IAAI,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE;QACrE,UAAU,CAAC,MAAM,CAAC,aAAa,GAAG,KAAK,EAAE,MAAM,EAAE,aAAa;IAChE;AACA,IAAA,IAAI,UAAU,EAAE,MAAM,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;QACvD,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM;IAClD;AACA,IAAA,IAAI,UAAU,EAAE,MAAM,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;QACvD,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM;IAClD;AACA,IAAA,IAAI,UAAU,EAAE,MAAM,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;QACvD,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM;IAClD;AACA,IAAA,IAAI,UAAU,EAAE,MAAM,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;QACvD,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM;IAClD;AACA,IAAA,IAAI,UAAU,EAAE,MAAM,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;QACvD,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM;IAClD;AACA,IAAA,IAAI,UAAU,EAAE,MAAM,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;QACnD,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,EAAE,MAAM,EAAE,IAAI;IAC9C;AACA,IAAA,IAAI,UAAU,EAAE,MAAM,EAAE,aAAa,IAAI,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE;QACrE,UAAU,CAAC,MAAM,CAAC,aAAa,GAAG,KAAK,EAAE,MAAM,EAAE,aAAa;IAChE;IACA,IAAI,UAAU,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,EAAE;QACrC,UAAU,CAAC,KAAK,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;IAC7C;IACA,IAAI,UAAU,EAAE,KAAK,IAAI,KAAK,EAAE,UAAU,EAAE;QAC1C,UAAU,CAAC,KAAK,GAAG;AACjB,YAAA,IAAI,EAAE,CAAA,EAAG,KAAK,EAAE,UAAU,CAAA,YAAA,CAAc;SACzC;IACH;AAEA,IAAA,QACEA,GAAA,CAAC,eAAe,IAAC,KAAK,EAAE,UAAU,EAAA,QAAA,EAChCA,GAAA,CAAC,aAAa,EAAA,EAAA,QAAA,EACZA,GAAA,CAAC,MAAM,EAAA,EAAA,QAAA,EAAE,QAAQ,GAAU,EAAA,CACb,EAAA,CACA;AAEtB;;;;"}
@@ -1,9 +1,9 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
- import BigNumber from 'bignumber.js';
3
2
  import erc20ABI from '../../config/abi/erc20.json.js';
4
3
  import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
5
4
  import multicall from '../../utils/multicall.js';
6
5
  import { convertToBigish } from '../../utils/convertToBigish.js';
6
+ import { getBalanceNumber } from '../../utils/getBalanceNumber.js';
7
7
  import USDT_ETH_ABI from '../../config/abi/usdtETH.json.js';
8
8
  import { useState, useEffect, useCallback } from 'react';
9
9
  import { useWriteContract } from 'wagmi';
@@ -60,8 +60,7 @@ const getTokenAllowance = async (currency, spender, account, chainId) => {
60
60
  },
61
61
  ];
62
62
  const data = await multicall(chainId, erc20ABI, calls);
63
- const value = new BigNumber(data[0] ?? 0).div(new BigNumber(10).pow(currency.decimals[chainId]));
64
- return value.toNumber();
63
+ return getBalanceNumber(data[0] ?? 0, currency.decimals[chainId]);
65
64
  };
66
65
  const useApproval = (amount, currency, spender, account, chainId) => {
67
66
  const apiUrl = useURLByEnvironment('apiV2');
@@ -1 +1 @@
1
- {"version":3,"file":"useAllowance.js","sources":["../../../src/state/allowance/useAllowance.ts"],"sourcesContent":["import { useQuery, UseQueryResult } from '@tanstack/react-query'\nimport BigNumber from 'bignumber.js'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport erc20ABI from '../../config/abi/erc20.json'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport multicall, { Call } from '../../utils/multicall'\nimport { convertToBigish } from '../../utils/convertToBigish'\nimport ERC_20_ABI from '../../config/abi/erc20.json'\nimport USDT_ETH_ABI from '../../config/abi/usdtETH.json'\nimport { useCallback, useEffect, useState } from 'react'\nimport { useWriteContract } from 'wagmi'\nimport { useMonitorTx } from '../../hooks/useMonitorTx'\nimport { usePopups } from '../popups/usePopups'\nimport { reportError } from '../../utils/reportError'\nimport { useURLByEnvironment } from '../useSDKConfig'\n\n/**\n * useAllowance hook: fetches the amount approved by the user for a given token\n * useApproval hook: returns the approval state (not approved, pending or approved) and a function to approve on chain\n * getTokenAllowance function fetches the allowance on chain\n */\n\nexport enum ApprovalState {\n NOT_APPROVED = 'NOT_APPROVED',\n PENDING = 'PENDING',\n APPROVED = 'APPROVED',\n}\n\nexport default function useAllowance(\n currency: 'NATIVE' | Token | null,\n spender: string | null,\n account: string | null,\n chainId: ChainId | null,\n): UseQueryResult<number | null> {\n return useQuery({\n queryKey: [\n QUERY_KEYS.ALLOWANCE,\n account ?? '',\n chainId,\n currency === 'NATIVE' ? currency : currency?.symbol,\n spender,\n ],\n queryFn: () => getTokenAllowance(currency, spender, account, chainId),\n refetchInterval: 10000, // i.e. 10 sec\n refetchOnWindowFocus: false,\n retry: 1,\n })\n}\n\nexport const getTokenAllowance = async (\n currency: 'NATIVE' | Token | null,\n spender: string | null,\n account: string | null,\n chainId: ChainId | null,\n): Promise<number | null> => {\n if (currency === 'NATIVE') return null\n // if (!account) {\n // console.log('Account disconnected')\n // } else if (!currency) {\n // console.log('No currency selected')\n // } else if (!chainId) {\n // console.log('No chainId selected')\n // } else if (!spender) {\n // console.log('No spender selected')\n // }\n if (!account || !currency || !chainId || !spender) return null\n const calls: Call[] = [\n {\n address: currency.address[chainId]!,\n name: 'allowance',\n params: [account, spender],\n },\n ]\n const data = await multicall(chainId, erc20ABI, calls)\n const value = new BigNumber(data[0] ?? 0).div(new BigNumber(10).pow(currency.decimals![chainId]!))\n return value.toNumber()\n}\n\nexport const useApproval = (\n amount: string,\n currency: 'NATIVE' | Token | null,\n spender: string | null,\n account: string | null,\n chainId: ChainId | null,\n): [ApprovalState, () => Promise<string | null | undefined>] => {\n const apiUrl = useURLByEnvironment('apiV2')\n const [confirmingTxOnWallet, setConfirmingTxOnWallet] = useState(false)\n const { data: allowance, refetch } = useAllowance(currency, spender, account, chainId)\n\n const { writeContractAsync, data: txHash, reset } = useWriteContract()\n const { isLoading: isConfirming, isSuccess: isConfirmed } = useMonitorTx(txHash, chainId as ChainId)\n const { addToastError } = usePopups()\n const confirmingTxOnChain = isConfirming && !isConfirmed\n\n useEffect(() => {\n if (txHash && isConfirmed) {\n setTimeout(() => {\n refetch()\n console.log('refetch allowance')\n reset()\n }, 1500)\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [txHash, confirmingTxOnChain, isConfirmed])\n\n const handleApprove = useCallback(async () => {\n if (!chainId || !amount || currency === 'NATIVE' || !currency) return null\n const decimals = currency.decimals![chainId]\n const tokenAddress = currency.address[chainId] as `0x${string}`\n if (!decimals || !tokenAddress) return null\n try {\n const bigishAmount = convertToBigish(amount, decimals)\n setConfirmingTxOnWallet(true)\n const hash = await writeContractAsync({\n address: tokenAddress,\n abi:\n tokenAddress?.toLowerCase() === '0xdAC17F958D2ee523a2206206994597C13D831ec7'.toLowerCase()\n ? USDT_ETH_ABI\n : ERC_20_ABI,\n functionName: 'approve',\n args: [spender, bigishAmount],\n account: account as `0x${string}`,\n chain: chainId as any,\n })\n setConfirmingTxOnWallet(false)\n // Adding a delay as I suspect RPCs need to catch up as the txs are indexed onchain too fast\n await new Promise((resolve) => setTimeout(resolve, 1500))\n return hash\n } catch (error: any) {\n setConfirmingTxOnWallet(false)\n console.error('Approval failed:', error)\n addToastError(error?.shortMessage || error?.details || error?.message)\n reportError({\n apiUrl,\n error,\n extraInfo: { type: 'approval', tokenAddress: tokenAddress, spenderAddress: spender, error },\n chainId,\n account: account!,\n })\n throw error\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [amount, currency, chainId])\n\n let approvalState: ApprovalState = ApprovalState.NOT_APPROVED\n\n if (allowance && amount) {\n approvalState = allowance >= parseFloat(amount) ? ApprovalState.APPROVED : ApprovalState.NOT_APPROVED\n }\n if (currency === 'NATIVE') {\n approvalState = ApprovalState.APPROVED\n }\n if (confirmingTxOnChain || confirmingTxOnWallet) {\n approvalState = ApprovalState.PENDING\n }\n\n return [approvalState ?? ApprovalState.NOT_APPROVED, handleApprove]\n}\n"],"names":["ERC_20_ABI"],"mappings":"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"}
1
+ {"version":3,"file":"useAllowance.js","sources":["../../../src/state/allowance/useAllowance.ts"],"sourcesContent":["import { useQuery, UseQueryResult } from '@tanstack/react-query'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport erc20ABI from '../../config/abi/erc20.json'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport multicall, { Call } from '../../utils/multicall'\nimport { convertToBigish } from '../../utils/convertToBigish'\nimport { getBalanceNumber } from '../../utils/getBalanceNumber'\nimport ERC_20_ABI from '../../config/abi/erc20.json'\nimport USDT_ETH_ABI from '../../config/abi/usdtETH.json'\nimport { useCallback, useEffect, useState } from 'react'\nimport { useWriteContract } from 'wagmi'\nimport { useMonitorTx } from '../../hooks/useMonitorTx'\nimport { usePopups } from '../popups/usePopups'\nimport { reportError } from '../../utils/reportError'\nimport { useURLByEnvironment } from '../useSDKConfig'\n\n/**\n * useAllowance hook: fetches the amount approved by the user for a given token\n * useApproval hook: returns the approval state (not approved, pending or approved) and a function to approve on chain\n * getTokenAllowance function fetches the allowance on chain\n */\n\nexport enum ApprovalState {\n NOT_APPROVED = 'NOT_APPROVED',\n PENDING = 'PENDING',\n APPROVED = 'APPROVED',\n}\n\nexport default function useAllowance(\n currency: 'NATIVE' | Token | null,\n spender: string | null,\n account: string | null,\n chainId: ChainId | null,\n): UseQueryResult<number | null> {\n return useQuery({\n queryKey: [\n QUERY_KEYS.ALLOWANCE,\n account ?? '',\n chainId,\n currency === 'NATIVE' ? currency : currency?.symbol,\n spender,\n ],\n queryFn: () => getTokenAllowance(currency, spender, account, chainId),\n refetchInterval: 10000, // i.e. 10 sec\n refetchOnWindowFocus: false,\n retry: 1,\n })\n}\n\nexport const getTokenAllowance = async (\n currency: 'NATIVE' | Token | null,\n spender: string | null,\n account: string | null,\n chainId: ChainId | null,\n): Promise<number | null> => {\n if (currency === 'NATIVE') return null\n // if (!account) {\n // console.log('Account disconnected')\n // } else if (!currency) {\n // console.log('No currency selected')\n // } else if (!chainId) {\n // console.log('No chainId selected')\n // } else if (!spender) {\n // console.log('No spender selected')\n // }\n if (!account || !currency || !chainId || !spender) return null\n const calls: Call[] = [\n {\n address: currency.address[chainId]!,\n name: 'allowance',\n params: [account, spender],\n },\n ]\n const data = await multicall(chainId, erc20ABI, calls)\n return getBalanceNumber(data[0] ?? 0, currency.decimals![chainId]!)\n}\n\nexport const useApproval = (\n amount: string,\n currency: 'NATIVE' | Token | null,\n spender: string | null,\n account: string | null,\n chainId: ChainId | null,\n): [ApprovalState, () => Promise<string | null | undefined>] => {\n const apiUrl = useURLByEnvironment('apiV2')\n const [confirmingTxOnWallet, setConfirmingTxOnWallet] = useState(false)\n const { data: allowance, refetch } = useAllowance(currency, spender, account, chainId)\n\n const { writeContractAsync, data: txHash, reset } = useWriteContract()\n const { isLoading: isConfirming, isSuccess: isConfirmed } = useMonitorTx(txHash, chainId as ChainId)\n const { addToastError } = usePopups()\n const confirmingTxOnChain = isConfirming && !isConfirmed\n\n useEffect(() => {\n if (txHash && isConfirmed) {\n setTimeout(() => {\n refetch()\n console.log('refetch allowance')\n reset()\n }, 1500)\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [txHash, confirmingTxOnChain, isConfirmed])\n\n const handleApprove = useCallback(async () => {\n if (!chainId || !amount || currency === 'NATIVE' || !currency) return null\n const decimals = currency.decimals![chainId]\n const tokenAddress = currency.address[chainId] as `0x${string}`\n if (!decimals || !tokenAddress) return null\n try {\n const bigishAmount = convertToBigish(amount, decimals)\n setConfirmingTxOnWallet(true)\n const hash = await writeContractAsync({\n address: tokenAddress,\n abi:\n tokenAddress?.toLowerCase() === '0xdAC17F958D2ee523a2206206994597C13D831ec7'.toLowerCase()\n ? USDT_ETH_ABI\n : ERC_20_ABI,\n functionName: 'approve',\n args: [spender, bigishAmount],\n account: account as `0x${string}`,\n chain: chainId as any,\n })\n setConfirmingTxOnWallet(false)\n // Adding a delay as I suspect RPCs need to catch up as the txs are indexed onchain too fast\n await new Promise((resolve) => setTimeout(resolve, 1500))\n return hash\n } catch (error: any) {\n setConfirmingTxOnWallet(false)\n console.error('Approval failed:', error)\n addToastError(error?.shortMessage || error?.details || error?.message)\n reportError({\n apiUrl,\n error,\n extraInfo: { type: 'approval', tokenAddress: tokenAddress, spenderAddress: spender, error },\n chainId,\n account: account!,\n })\n throw error\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [amount, currency, chainId])\n\n let approvalState: ApprovalState = ApprovalState.NOT_APPROVED\n\n if (allowance && amount) {\n approvalState = allowance >= parseFloat(amount) ? ApprovalState.APPROVED : ApprovalState.NOT_APPROVED\n }\n if (currency === 'NATIVE') {\n approvalState = ApprovalState.APPROVED\n }\n if (confirmingTxOnChain || confirmingTxOnWallet) {\n approvalState = ApprovalState.PENDING\n }\n\n return [approvalState ?? ApprovalState.NOT_APPROVED, handleApprove]\n}\n"],"names":["ERC_20_ABI"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
- import BigNumber from 'bignumber.js';
3
2
  import { ChainId } from '@ape.swap/apeswap-lists';
4
3
  import { MULTICALL_V2 } from '../../config/constants/addresses.js';
5
4
  import multicallV2Abi from '../../config/abi/multicallv2.json.js';
6
5
  import erc20ABI from '../../config/abi/erc20.json.js';
7
6
  import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
8
7
  import multicall from '../../utils/multicall.js';
8
+ import { formatUnits } from '../../utils/fixedPoint.js';
9
9
  import { getTokenBalanceAptos } from './useCurrencyBalanceAptos.js';
10
10
  import { getTokenBalanceSui } from './useCurrencyBalanceSui.js';
11
11
 
@@ -40,8 +40,7 @@ const getTokenBalance = async (currency, account, chainId) => {
40
40
  },
41
41
  ];
42
42
  const data = await multicall(chainId, currency === 'NATIVE' ? multicallV2Abi : erc20ABI, calls);
43
- const value = new BigNumber(data[0] ?? 0).div(new BigNumber(10).pow(currency === 'NATIVE' ? 18 : currency.decimals[chainId]));
44
- return value.toString();
43
+ return formatUnits(data[0] ?? 0, currency === 'NATIVE' ? 18 : currency.decimals[chainId]);
45
44
  };
46
45
 
47
46
  export { useCurrencyBalance as default, getTokenBalance };
@@ -1 +1 @@
1
- {"version":3,"file":"useCurrencyBalance.js","sources":["../../../src/state/balance/useCurrencyBalance.ts"],"sourcesContent":["import { useQuery, UseQueryResult } from '@tanstack/react-query'\nimport BigNumber from 'bignumber.js'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { MULTICALL_V2 } from '../../config/constants/addresses'\nimport multicallV2Abi from '../../config/abi/multicallv2.json'\nimport erc20ABI from '../../config/abi/erc20.json'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport multicall, { Call } from '../../utils/multicall'\nimport { getTokenBalanceAptos } from './useCurrencyBalanceAptos'\nimport { getTokenBalanceSui } from './useCurrencyBalanceSui'\n\nexport default function useCurrencyBalance(\n currency: 'NATIVE' | Token | null,\n account: string | null,\n chainId: ChainId | null,\n): UseQueryResult<string | null> {\n return useQuery({\n queryKey: [\n QUERY_KEYS.CURRENCY_BALANCE,\n account ?? '',\n currency === 'NATIVE' ? currency : currency?.symbol,\n chainId,\n ],\n queryFn: () => getTokenBalance(currency, account, chainId),\n refetchInterval: 10000, // i.e. 10 sec\n refetchOnWindowFocus: false,\n retry: 1,\n })\n}\n\nexport const getTokenBalance = async (\n currency: 'NATIVE' | Token | null,\n account: string | null,\n chainId: ChainId | null,\n): Promise<string | null> => {\n if (!account || !currency || !chainId) return null\n\n if (chainId === ChainId.APTOS) {\n return getTokenBalanceAptos(currency, account)\n }\n\n if (chainId === ChainId.SUI) {\n return getTokenBalanceSui(currency, account)\n }\n\n const calls: Call[] = [\n {\n address: currency === 'NATIVE' ? MULTICALL_V2[chainId]! : currency.address[chainId]!,\n name: currency === 'NATIVE' ? 'getEthBalance' : 'balanceOf',\n params: [account],\n },\n ]\n const data = await multicall(chainId, currency === 'NATIVE' ? multicallV2Abi : erc20ABI, calls)\n const value = new BigNumber(data[0] ?? 0).div(\n new BigNumber(10).pow(currency === 'NATIVE' ? 18 : currency.decimals![chainId]!),\n )\n return value.toString()\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAWc,SAAU,kBAAkB,CACxC,QAAiC,EACjC,OAAsB,EACtB,OAAuB,EAAA;AAEvB,IAAA,OAAO,QAAQ,CAAC;AACd,QAAA,QAAQ,EAAE;AACR,YAAA,UAAU,CAAC,gBAAgB;AAC3B,YAAA,OAAO,IAAI,EAAE;YACb,QAAQ,KAAK,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAAE,MAAM;YACnD,OAAO;AACR,SAAA;QACD,OAAO,EAAE,MAAM,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;QAC1D,eAAe,EAAE,KAAK;AACtB,QAAA,oBAAoB,EAAE,KAAK;AAC3B,QAAA,KAAK,EAAE,CAAC;AACT,KAAA,CAAC;AACJ;AAEO,MAAM,eAAe,GAAG,OAC7B,QAAiC,EACjC,OAAsB,EACtB,OAAuB,KACG;AAC1B,IAAA,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,IAAI;AAElD,IAAA,IAAI,OAAO,KAAK,OAAO,CAAC,KAAK,EAAE;AAC7B,QAAA,OAAO,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC;IAChD;AAEA,IAAA,IAAI,OAAO,KAAK,OAAO,CAAC,GAAG,EAAE;AAC3B,QAAA,OAAO,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC9C;AAEA,IAAA,MAAM,KAAK,GAAW;AACpB,QAAA;AACE,YAAA,OAAO,EAAE,QAAQ,KAAK,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAE;YACpF,IAAI,EAAE,QAAQ,KAAK,QAAQ,GAAG,eAAe,GAAG,WAAW;YAC3D,MAAM,EAAE,CAAC,OAAO,CAAC;AAClB,SAAA;KACF;IACD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,KAAK,QAAQ,GAAG,cAAc,GAAG,QAAQ,EAAE,KAAK,CAAC;AAC/F,IAAA,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAC3C,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,GAAG,EAAE,GAAG,QAAQ,CAAC,QAAS,CAAC,OAAO,CAAE,CAAC,CACjF;AACD,IAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;AACzB;;;;"}
1
+ {"version":3,"file":"useCurrencyBalance.js","sources":["../../../src/state/balance/useCurrencyBalance.ts"],"sourcesContent":["import { useQuery, UseQueryResult } from '@tanstack/react-query'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { MULTICALL_V2 } from '../../config/constants/addresses'\nimport multicallV2Abi from '../../config/abi/multicallv2.json'\nimport erc20ABI from '../../config/abi/erc20.json'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport multicall, { Call } from '../../utils/multicall'\nimport { formatUnits } from '../../utils/fixedPoint'\nimport { getTokenBalanceAptos } from './useCurrencyBalanceAptos'\nimport { getTokenBalanceSui } from './useCurrencyBalanceSui'\n\nexport default function useCurrencyBalance(\n currency: 'NATIVE' | Token | null,\n account: string | null,\n chainId: ChainId | null,\n): UseQueryResult<string | null> {\n return useQuery({\n queryKey: [\n QUERY_KEYS.CURRENCY_BALANCE,\n account ?? '',\n currency === 'NATIVE' ? currency : currency?.symbol,\n chainId,\n ],\n queryFn: () => getTokenBalance(currency, account, chainId),\n refetchInterval: 10000, // i.e. 10 sec\n refetchOnWindowFocus: false,\n retry: 1,\n })\n}\n\nexport const getTokenBalance = async (\n currency: 'NATIVE' | Token | null,\n account: string | null,\n chainId: ChainId | null,\n): Promise<string | null> => {\n if (!account || !currency || !chainId) return null\n\n if (chainId === ChainId.APTOS) {\n return getTokenBalanceAptos(currency, account)\n }\n\n if (chainId === ChainId.SUI) {\n return getTokenBalanceSui(currency, account)\n }\n\n const calls: Call[] = [\n {\n address: currency === 'NATIVE' ? MULTICALL_V2[chainId]! : currency.address[chainId]!,\n name: currency === 'NATIVE' ? 'getEthBalance' : 'balanceOf',\n params: [account],\n },\n ]\n const data = await multicall(chainId, currency === 'NATIVE' ? multicallV2Abi : erc20ABI, calls)\n return formatUnits(data[0] ?? 0, currency === 'NATIVE' ? 18 : currency.decimals![chainId]!)\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAWc,SAAU,kBAAkB,CACxC,QAAiC,EACjC,OAAsB,EACtB,OAAuB,EAAA;AAEvB,IAAA,OAAO,QAAQ,CAAC;AACd,QAAA,QAAQ,EAAE;AACR,YAAA,UAAU,CAAC,gBAAgB;AAC3B,YAAA,OAAO,IAAI,EAAE;YACb,QAAQ,KAAK,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAAE,MAAM;YACnD,OAAO;AACR,SAAA;QACD,OAAO,EAAE,MAAM,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;QAC1D,eAAe,EAAE,KAAK;AACtB,QAAA,oBAAoB,EAAE,KAAK;AAC3B,QAAA,KAAK,EAAE,CAAC;AACT,KAAA,CAAC;AACJ;AAEO,MAAM,eAAe,GAAG,OAC7B,QAAiC,EACjC,OAAsB,EACtB,OAAuB,KACG;AAC1B,IAAA,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,IAAI;AAElD,IAAA,IAAI,OAAO,KAAK,OAAO,CAAC,KAAK,EAAE;AAC7B,QAAA,OAAO,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC;IAChD;AAEA,IAAA,IAAI,OAAO,KAAK,OAAO,CAAC,GAAG,EAAE;AAC3B,QAAA,OAAO,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC9C;AAEA,IAAA,MAAM,KAAK,GAAW;AACpB,QAAA;AACE,YAAA,OAAO,EAAE,QAAQ,KAAK,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAE;YACpF,IAAI,EAAE,QAAQ,KAAK,QAAQ,GAAG,eAAe,GAAG,WAAW;YAC3D,MAAM,EAAE,CAAC,OAAO,CAAC;AAClB,SAAA;KACF;IACD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,KAAK,QAAQ,GAAG,cAAc,GAAG,QAAQ,EAAE,KAAK,CAAC;IAC/F,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,KAAK,QAAQ,GAAG,EAAE,GAAG,QAAQ,CAAC,QAAS,CAAC,OAAO,CAAE,CAAC;AAC7F;;;;"}