@ape.swap/bonds-sdk 3.2.0 → 3.3.0-test.5

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 (213) hide show
  1. package/dist/components/BondFilters/BondFilters.js +0 -12
  2. package/dist/components/BondFilters/BondFilters.js.map +1 -1
  3. package/dist/components/ChainOptionList/ChainOptionsButtons.js +1 -13
  4. package/dist/components/ChainOptionList/ChainOptionsButtons.js.map +1 -1
  5. package/dist/components/ChainOptionList/ChainOptionsList.js +1 -13
  6. package/dist/components/ChainOptionList/ChainOptionsList.js.map +1 -1
  7. package/dist/components/ConnectButton/index.js +3 -17
  8. package/dist/components/ConnectButton/index.js.map +1 -1
  9. package/dist/components/FavIcons/AddFavToken.js +1 -12
  10. package/dist/components/FavIcons/AddFavToken.js.map +1 -1
  11. package/dist/components/FavIcons/FavFilter.js +1 -13
  12. package/dist/components/FavIcons/FavFilter.js.map +1 -1
  13. package/dist/components/LoadingSpinner/index.js +0 -13
  14. package/dist/components/LoadingSpinner/index.js.map +1 -1
  15. package/dist/components/MenuSelect/MenuSelect.js +1 -12
  16. package/dist/components/MenuSelect/MenuSelect.js.map +1 -1
  17. package/dist/components/MenuSelect/RecommendationSelector.js +0 -13
  18. package/dist/components/MenuSelect/RecommendationSelector.js.map +1 -1
  19. package/dist/components/NetworkFilter/index.js +2 -12
  20. package/dist/components/NetworkFilter/index.js.map +1 -1
  21. package/dist/components/PlaceholderMonkey/index.js +3 -14
  22. package/dist/components/PlaceholderMonkey/index.js.map +1 -1
  23. package/dist/components/ProgressBar/ProgressBarWrapper.js +1 -9
  24. package/dist/components/ProgressBar/ProgressBarWrapper.js.map +1 -1
  25. package/dist/components/SlippageModal/index.js +1 -13
  26. package/dist/components/SlippageModal/index.js.map +1 -1
  27. package/dist/components/StepBubble/index.js +1 -12
  28. package/dist/components/StepBubble/index.js.map +1 -1
  29. package/dist/components/Toast/index.js +2 -10
  30. package/dist/components/Toast/index.js.map +1 -1
  31. package/dist/components/TokenInfoAndName/index.js +2 -14
  32. package/dist/components/TokenInfoAndName/index.js.map +1 -1
  33. package/dist/components/TokenSelectorModal/TokenRow.js +1 -13
  34. package/dist/components/TokenSelectorModal/TokenRow.js.map +1 -1
  35. package/dist/components/TokenSelectorModal/index.js +2 -17
  36. package/dist/components/TokenSelectorModal/index.js.map +1 -1
  37. package/dist/components/TokenSelectorPanel/index.js +1 -13
  38. package/dist/components/TokenSelectorPanel/index.js.map +1 -1
  39. package/dist/components/Tooltip/ButtonsRow.js +1 -12
  40. package/dist/components/Tooltip/ButtonsRow.js.map +1 -1
  41. package/dist/components/Tooltip/Tooltip.js +0 -12
  42. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  43. package/dist/components/YouTooltip/YouTooltip.js +0 -13
  44. package/dist/components/YouTooltip/YouTooltip.js.map +1 -1
  45. package/dist/components/uikit-sdk/LoadingDots/index.js +0 -13
  46. package/dist/components/uikit-sdk/LoadingDots/index.js.map +1 -1
  47. package/dist/components/uikit-sdk/Svg/Icons/Timer.js +1 -1
  48. package/dist/components/uikit-sdk/Svg/Icons/Timer.js.map +1 -1
  49. package/dist/components/uikit-sdk/Toggle/index.js +1 -1
  50. package/dist/components/uikit-sdk/Toggle/index.js.map +1 -1
  51. package/dist/components/uikit-sdk/TokenImage/index.js +0 -13
  52. package/dist/components/uikit-sdk/TokenImage/index.js.map +1 -1
  53. package/dist/config/abi/launchBond_v2_4_1.json.js +2 -2
  54. package/dist/config/constants/walletConnectors.d.ts +3 -0
  55. package/dist/config/constants/walletConnectors.js +18 -0
  56. package/dist/config/constants/walletConnectors.js.map +1 -0
  57. package/dist/contexts/ModalContext.js +0 -11
  58. package/dist/contexts/ModalContext.js.map +1 -1
  59. package/dist/contexts/Popups.js +0 -13
  60. package/dist/contexts/Popups.js.map +1 -1
  61. package/dist/state/allowance/useAllowance.js +2 -2
  62. package/dist/state/allowance/useAllowance.js.map +1 -1
  63. package/dist/state/bonds/utils.js +2 -2
  64. package/dist/state/preTGEBonds/usePreTGEUserBonds.js +3 -3
  65. package/dist/state/useSDKConfig.d.ts +7 -2
  66. package/dist/state/useSDKConfig.js +10 -2
  67. package/dist/state/useSDKConfig.js.map +1 -1
  68. package/dist/utils/convertToTokenValue.d.ts +1 -3
  69. package/dist/utils/convertToTokenValue.js +7 -9
  70. package/dist/utils/convertToTokenValue.js.map +1 -1
  71. package/dist/utils/formatNumbers.d.ts +0 -1
  72. package/dist/utils/formatNumbers.js +19 -13
  73. package/dist/utils/formatNumbers.js.map +1 -1
  74. package/dist/utils/multicall.js +34 -18
  75. package/dist/utils/multicall.js.map +1 -1
  76. package/dist/utils/numbers.d.ts +0 -4
  77. package/dist/utils/numbers.js +0 -2
  78. package/dist/utils/numbers.js.map +1 -1
  79. package/dist/views/Bonds/Bonds.js +0 -11
  80. package/dist/views/Bonds/Bonds.js.map +1 -1
  81. package/dist/views/Bonds/components/BannerTestnet/BannerTestnet.js +1 -13
  82. package/dist/views/Bonds/components/BannerTestnet/BannerTestnet.js.map +1 -1
  83. package/dist/views/Bonds/components/BondRows/BondRow.js +1 -13
  84. package/dist/views/Bonds/components/BondRows/BondRow.js.map +1 -1
  85. package/dist/views/Bonds/components/BondRows/ChainTitle.js +1 -12
  86. package/dist/views/Bonds/components/BondRows/ChainTitle.js.map +1 -1
  87. package/dist/views/Bonds/components/BondsMenu/BondsMenu.js +0 -13
  88. package/dist/views/Bonds/components/BondsMenu/BondsMenu.js.map +1 -1
  89. package/dist/views/Bonds/components/BonusComponents/BonusComponent.js +2 -14
  90. package/dist/views/Bonds/components/BonusComponents/BonusComponent.js.map +1 -1
  91. package/dist/views/Bonds/components/BonusComponents/BonusTable.js +1 -14
  92. package/dist/views/Bonds/components/BonusComponents/BonusTable.js.map +1 -1
  93. package/dist/views/Bonds/components/BuyAgainRow/index.js +0 -11
  94. package/dist/views/Bonds/components/BuyAgainRow/index.js.map +1 -1
  95. package/dist/views/Bonds/components/HotBondCards/HotBondCard.js +1 -13
  96. package/dist/views/Bonds/components/HotBondCards/HotBondCard.js.map +1 -1
  97. package/dist/views/Bonds/components/HotBondCards/index.js +0 -12
  98. package/dist/views/Bonds/components/HotBondCards/index.js.map +1 -1
  99. package/dist/views/Bonds/components/RecommendationCards/SmallRecommendationCard.js +0 -13
  100. package/dist/views/Bonds/components/RecommendationCards/SmallRecommendationCard.js.map +1 -1
  101. package/dist/views/Bonds/components/RecommendationCards/index.js +0 -12
  102. package/dist/views/Bonds/components/RecommendationCards/index.js.map +1 -1
  103. package/dist/views/BuyBond/BuyBond.js +2 -12
  104. package/dist/views/BuyBond/BuyBond.js.map +1 -1
  105. package/dist/views/BuyBond/BuyBondModal.js +0 -12
  106. package/dist/views/BuyBond/BuyBondModal.js.map +1 -1
  107. package/dist/views/BuyBond/components/BondModalHeader.js +1 -14
  108. package/dist/views/BuyBond/components/BondModalHeader.js.map +1 -1
  109. package/dist/views/BuyBond/components/BondModalMinTierHeader.js +0 -12
  110. package/dist/views/BuyBond/components/BondModalMinTierHeader.js.map +1 -1
  111. package/dist/views/BuyBond/components/ExpandedViewButton.js +1 -14
  112. package/dist/views/BuyBond/components/ExpandedViewButton.js.map +1 -1
  113. package/dist/views/BuyBond/components/GetUpToComponent/GetUpToComponent.js +2 -13
  114. package/dist/views/BuyBond/components/GetUpToComponent/GetUpToComponent.js.map +1 -1
  115. package/dist/views/BuyBond/components/NewRateModal/NewRateModal.js +1 -12
  116. package/dist/views/BuyBond/components/NewRateModal/NewRateModal.js.map +1 -1
  117. package/dist/views/BuyBond/components/NoBonusModal/NoBonusModal.js +1 -11
  118. package/dist/views/BuyBond/components/NoBonusModal/NoBonusModal.js.map +1 -1
  119. package/dist/views/BuyBond/components/ProjectDescription.js +0 -11
  120. package/dist/views/BuyBond/components/ProjectDescription.js.map +1 -1
  121. package/dist/views/BuyBond/index.d.ts +2 -2
  122. package/dist/views/BuyBond/index.js.map +1 -1
  123. package/dist/views/FullBondsView/FullBondsView.d.ts +0 -4
  124. package/dist/views/FullBondsView/FullBondsView.js +2 -19
  125. package/dist/views/FullBondsView/FullBondsView.js.map +1 -1
  126. package/dist/views/PreTGEBonds/components/BuyComponent/BondCards.js +1 -13
  127. package/dist/views/PreTGEBonds/components/BuyComponent/BondCards.js.map +1 -1
  128. package/dist/views/PreTGEBonds/components/BuyComponent/ParticipationSuccessful.js +4 -14
  129. package/dist/views/PreTGEBonds/components/BuyComponent/ParticipationSuccessful.js.map +1 -1
  130. package/dist/views/PreTGEBonds/components/BuyComponent/PreTGEBuyComponent.js +4 -13
  131. package/dist/views/PreTGEBonds/components/BuyComponent/PreTGEBuyComponent.js.map +1 -1
  132. package/dist/views/PreTGEBonds/components/PreTGEUserRows/PreTGEActions.js +3 -15
  133. package/dist/views/PreTGEBonds/components/PreTGEUserRows/PreTGEActions.js.map +1 -1
  134. package/dist/views/PreTGEBonds/components/PreTGEUserRows/PreTGEUserRow.js +1 -12
  135. package/dist/views/PreTGEBonds/components/PreTGEUserRows/PreTGEUserRow.js.map +1 -1
  136. package/dist/views/TransactionModal/TransactionModal.js +2 -13
  137. package/dist/views/TransactionModal/TransactionModal.js.map +1 -1
  138. package/dist/views/YourBonds/components/ClaimAll/ClaimAllModal.js +3 -13
  139. package/dist/views/YourBonds/components/ClaimAll/ClaimAllModal.js.map +1 -1
  140. package/dist/views/YourBonds/components/ClaimAll/index.js +0 -13
  141. package/dist/views/YourBonds/components/ClaimAll/index.js.map +1 -1
  142. package/dist/views/YourBonds/components/YourBondsMenu/YourBondsMenu.js +0 -13
  143. package/dist/views/YourBonds/components/YourBondsMenu/YourBondsMenu.js.map +1 -1
  144. package/dist/views/YourBondsModal/components/TransferBondModal/TransferAction.js +0 -12
  145. package/dist/views/YourBondsModal/components/TransferBondModal/TransferAction.js.map +1 -1
  146. package/dist/views/YourBondsModal/components/TransferBondModal/index.js +3 -13
  147. package/dist/views/YourBondsModal/components/TransferBondModal/index.js.map +1 -1
  148. package/dist/views/ZapModal/index.js +4 -13
  149. package/dist/views/ZapModal/index.js.map +1 -1
  150. package/package.json +22 -13
  151. package/dist/components/ConnectButton/AppKitButton.d.ts +0 -3
  152. package/dist/components/ConnectButton/AppKitButton.js +0 -22
  153. package/dist/components/ConnectButton/AppKitButton.js.map +0 -1
  154. package/dist/components/ConnectButton/RainbowKitButton.d.ts +0 -3
  155. package/dist/components/ConnectButton/RainbowKitButton.js +0 -35
  156. package/dist/components/ConnectButton/RainbowKitButton.js.map +0 -1
  157. package/dist/components/uikit-sdk/index.d.ts +0 -15
  158. package/dist/config/abi/types/Banana.d.ts +0 -394
  159. package/dist/config/abi/types/Bond.d.ts +0 -758
  160. package/dist/config/abi/types/BondNft.d.ts +0 -556
  161. package/dist/config/abi/types/EnsPublicResolver.d.ts +0 -437
  162. package/dist/config/abi/types/EnsRegistrar.d.ts +0 -254
  163. package/dist/config/abi/types/Erc20.d.ts +0 -156
  164. package/dist/config/abi/types/Erc20_bytes32.d.ts +0 -50
  165. package/dist/config/abi/types/JungleChef.d.ts +0 -245
  166. package/dist/config/abi/types/LaunchBonds.d.ts +0 -1306
  167. package/dist/config/abi/types/LensContract.d.ts +0 -276
  168. package/dist/config/abi/types/LockVeAbond.d.ts +0 -1173
  169. package/dist/config/abi/types/MigrationBond.d.ts +0 -1074
  170. package/dist/config/abi/types/MigrationFveAbond.d.ts +0 -284
  171. package/dist/config/abi/types/MiniComplexRewarder.d.ts +0 -423
  172. package/dist/config/abi/types/Multicallv2.d.ts +0 -139
  173. package/dist/config/abi/types/Multicallv3.d.ts +0 -98
  174. package/dist/config/abi/types/NonFungibleApes.d.ts +0 -492
  175. package/dist/config/abi/types/NonFungibleBananas.d.ts +0 -468
  176. package/dist/config/abi/types/PriceGetter.d.ts +0 -676
  177. package/dist/config/abi/types/PriceGetterLinea.d.ts +0 -756
  178. package/dist/config/abi/types/PriceGetterV2.d.ts +0 -692
  179. package/dist/config/abi/types/SousChef.d.ts +0 -542
  180. package/dist/config/abi/types/Treasury.d.ts +0 -274
  181. package/dist/config/abi/types/Weth.d.ts +0 -206
  182. package/dist/config/abi/types/Zap.d.ts +0 -484
  183. package/dist/config/abi/types/common.d.ts +0 -22
  184. package/dist/config/abi/types/factories/Banana__factory.d.ts +0 -475
  185. package/dist/config/abi/types/factories/BondNft__factory.d.ts +0 -723
  186. package/dist/config/abi/types/factories/Bond__factory.d.ts +0 -799
  187. package/dist/config/abi/types/factories/EnsPublicResolver__factory.d.ts +0 -649
  188. package/dist/config/abi/types/factories/EnsRegistrar__factory.d.ts +0 -338
  189. package/dist/config/abi/types/factories/Erc20__factory.d.ts +0 -175
  190. package/dist/config/abi/types/factories/Erc20_bytes32__factory.d.ts +0 -30
  191. package/dist/config/abi/types/factories/JungleChef__factory.d.ts +0 -247
  192. package/dist/config/abi/types/factories/LaunchBonds__factory.d.ts +0 -1560
  193. package/dist/config/abi/types/factories/LensContract__factory.d.ts +0 -254
  194. package/dist/config/abi/types/factories/LockVeAbond__factory.d.ts +0 -1698
  195. package/dist/config/abi/types/factories/MigrationBond__factory.d.ts +0 -1268
  196. package/dist/config/abi/types/factories/MigrationFveAbond__factory.d.ts +0 -262
  197. package/dist/config/abi/types/factories/MiniComplexRewarder__factory.d.ts +0 -448
  198. package/dist/config/abi/types/factories/Multicallv2__factory.d.ts +0 -115
  199. package/dist/config/abi/types/factories/Multicallv3__factory.d.ts +0 -76
  200. package/dist/config/abi/types/factories/NonFungibleApes__factory.d.ts +0 -617
  201. package/dist/config/abi/types/factories/NonFungibleBananas__factory.d.ts +0 -576
  202. package/dist/config/abi/types/factories/PriceGetterLinea__factory.d.ts +0 -1105
  203. package/dist/config/abi/types/factories/PriceGetterV2__factory.d.ts +0 -1027
  204. package/dist/config/abi/types/factories/PriceGetter__factory.d.ts +0 -999
  205. package/dist/config/abi/types/factories/SousChef__factory.d.ts +0 -511
  206. package/dist/config/abi/types/factories/Treasury__factory.d.ts +0 -235
  207. package/dist/config/abi/types/factories/Weth__factory.d.ts +0 -220
  208. package/dist/config/abi/types/factories/Zap__factory.d.ts +0 -695
  209. package/dist/config/abi/types/factories/index.d.ts +0 -25
  210. package/dist/config/abi/types/index.d.ts +0 -51
  211. package/dist/utils/index.d.ts +0 -1
  212. package/dist/utils/index.js +0 -16
  213. package/dist/utils/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/uikit-sdk/Toggle/index.tsx"],"sourcesContent":["import React from 'react'\nimport styles from './styles'\nimport Flex from '../Flex'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { BondsViewOptions } from '../../../views/FullBondsView/FullBondsView'\n\nconst Toggle = ({\n options,\n activeOption,\n handleToggle,\n claimableBillsAmount,\n}: {\n options: string[]\n activeOption: string\n handleToggle: (newOption: string) => void\n claimableBillsAmount?: string\n}) => {\n return (\n <Flex sx={styles.container}>\n <AnimatePresence initial={false}>\n {options.map((option) => {\n return (\n <motion.div\n key={option}\n animate={{ opacity: option === activeOption ? 1 : 0.6, scale: option === activeOption ? 1 : 0.9 }}\n exit={{ opacity: 0, scale: 0.9 }}\n transition={{ duration: 0.2, type: 'spring', stiffness: 50 }}\n sx={{ overflow: 'hidden', width: '100%' }}\n >\n <Flex\n sx={{\n ...styles.switch,\n background: option === activeOption ? 'primaryButton' : 'white2',\n color: option === activeOption ? 'primaryBright' : 'primaryButtonDisable',\n }}\n onClick={() => handleToggle(option)}\n >\n {option}\n {option === BondsViewOptions.YOURBONDS && claimableBillsAmount ? ` (${claimableBillsAmount})` : ''}\n </Flex>\n </motion.div>\n )\n })}\n </AnimatePresence>\n </Flex>\n )\n}\n\nexport default Toggle\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;AAMA,MAAM,MAAM,GAAG,CAAC,EACd,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,oBAAoB,GAMrB,KAAI;IACH,QACEA,GAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAA,QAAA,EACxBA,GAAA,CAAC,eAAe,IAAC,OAAO,EAAE,KAAK,EAAA,QAAA,EAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AACtB,gBAAA,QACEA,GAAA,CAAC,MAAM,CAAC,GAAG,IAET,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,YAAY,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK,YAAY,GAAG,CAAC,GAAG,GAAG,EAAE,EACjG,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAChC,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,EAC5D,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAA,QAAA,EAEzCC,KAAC,IAAI,EAAA,EACH,EAAE,EAAE;4BACF,GAAG,MAAM,CAAC,MAAM;4BAChB,UAAU,EAAE,MAAM,KAAK,YAAY,GAAG,eAAe,GAAG,QAAQ;4BAChE,KAAK,EAAE,MAAM,KAAK,YAAY,GAAG,eAAe,GAAG,sBAAsB;AAC1E,yBAAA,EACD,OAAO,EAAE,MAAM,YAAY,CAAC,MAAM,CAAC,aAElC,MAAM,EACN,MAAM,KAAK,gBAAgB,CAAC,SAAS,IAAI,oBAAoB,GAAG,CAAA,EAAA,EAAK,oBAAoB,CAAA,CAAA,CAAG,GAAG,EAAE,CAAA,EAAA,CAC7F,EAAA,EAhBF,MAAM,CAiBA;AAEjB,YAAA,CAAC,CAAC,EAAA,CACc,EAAA,CACb;AAEX;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/uikit-sdk/Toggle/index.tsx"],"sourcesContent":["import React from 'react'\nimport styles from './styles'\nimport Flex from '../Flex'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { BondsViewOptions } from '../../../state/activeView'\n\nconst Toggle = ({\n options,\n activeOption,\n handleToggle,\n claimableBillsAmount,\n}: {\n options: string[]\n activeOption: string\n handleToggle: (newOption: string) => void\n claimableBillsAmount?: string\n}) => {\n return (\n <Flex sx={styles.container}>\n <AnimatePresence initial={false}>\n {options.map((option) => {\n return (\n <motion.div\n key={option}\n animate={{ opacity: option === activeOption ? 1 : 0.6, scale: option === activeOption ? 1 : 0.9 }}\n exit={{ opacity: 0, scale: 0.9 }}\n transition={{ duration: 0.2, type: 'spring', stiffness: 50 }}\n sx={{ overflow: 'hidden', width: '100%' }}\n >\n <Flex\n sx={{\n ...styles.switch,\n background: option === activeOption ? 'primaryButton' : 'white2',\n color: option === activeOption ? 'primaryBright' : 'primaryButtonDisable',\n }}\n onClick={() => handleToggle(option)}\n >\n {option}\n {option === BondsViewOptions.YOURBONDS && claimableBillsAmount ? ` (${claimableBillsAmount})` : ''}\n </Flex>\n </motion.div>\n )\n })}\n </AnimatePresence>\n </Flex>\n )\n}\n\nexport default Toggle\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;AAMA,MAAM,MAAM,GAAG,CAAC,EACd,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,oBAAoB,GAMrB,KAAI;IACH,QACEA,GAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAA,QAAA,EACxBA,GAAA,CAAC,eAAe,IAAC,OAAO,EAAE,KAAK,EAAA,QAAA,EAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AACtB,gBAAA,QACEA,GAAA,CAAC,MAAM,CAAC,GAAG,IAET,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,YAAY,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK,YAAY,GAAG,CAAC,GAAG,GAAG,EAAE,EACjG,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAChC,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,EAC5D,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAA,QAAA,EAEzCC,KAAC,IAAI,EAAA,EACH,EAAE,EAAE;4BACF,GAAG,MAAM,CAAC,MAAM;4BAChB,UAAU,EAAE,MAAM,KAAK,YAAY,GAAG,eAAe,GAAG,QAAQ;4BAChE,KAAK,EAAE,MAAM,KAAK,YAAY,GAAG,eAAe,GAAG,sBAAsB;AAC1E,yBAAA,EACD,OAAO,EAAE,MAAM,YAAY,CAAC,MAAM,CAAC,aAElC,MAAM,EACN,MAAM,KAAK,gBAAgB,CAAC,SAAS,IAAI,oBAAoB,GAAG,CAAA,EAAA,EAAK,oBAAoB,CAAA,CAAA,CAAG,GAAG,EAAE,CAAA,EAAA,CAC7F,EAAA,EAhBF,MAAM,CAiBA;AAEjB,YAAA,CAAC,CAAC,EAAA,CACc,EAAA,CACb;AAEX;;;;"}
@@ -2,19 +2,6 @@ import { jsxs, jsx } from 'theme-ui/jsx-runtime';
2
2
  import Flex from '../Flex/index.js';
3
3
  import { NETWORK_ICONS } from '../../../config/constants/chains.js';
4
4
  import Svg from '../Svg/index.js';
5
- import 'theme-ui';
6
- import '../Text/types.js';
7
- import '../Checkbox/types.js';
8
- import '../Skeleton/types.js';
9
- import '../Skeleton/styles.js';
10
- import '../TooltipBubble/index.js';
11
- import 'react';
12
- import 'framer-motion';
13
- import '../Button/types.js';
14
- import '../Svg/types.js';
15
- import '../../../contexts/ModalContext.js';
16
- import '../../../views/FullBondsView/FullBondsView.js';
17
- import '../Select/types.js';
18
5
  import { APEBOND } from '../../../config/constants/variables.js';
19
6
 
20
7
  const TokenImage = ({ symbol, symbol2, size, chain, }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/uikit-sdk/TokenImage/index.tsx"],"sourcesContent":["import React from 'react'\nimport Flex from '../Flex'\nimport { NETWORK_ICONS } from '../../../config/constants/chains'\nimport { Svg } from '../index'\nimport { APEBOND } from '../../../config/constants/variables'\n\nconst TokenImage = ({\n symbol,\n symbol2,\n size,\n chain,\n}: {\n symbol?: string\n symbol2?: string\n size: number\n chain?: number\n}) => {\n const token1 = symbol === 'USDC.e' ? 'USDC' : symbol\n const token2 = symbol2 === 'USDC.e' ? 'USDC' : symbol2\n return token2 ? (\n <Flex\n sx={{\n minWidth: size * 1.5 - 2,\n height: size - 2,\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: '55px',\n position: 'relative',\n }}\n >\n <img\n src={`${APEBOND}/tokenImages/${token1?.toUpperCase()}.png`}\n alt={`tokenImgFor:${token1}`}\n width={size}\n height={size}\n style={{ position: 'absolute', zIndex: 4001, left: 0 }}\n />\n <img\n src={`${APEBOND}/tokenImages/${token2.toUpperCase()}.png`}\n alt={`tokenImgFor:${token2}`}\n width={size}\n height={size}\n style={{ position: 'absolute', zIndex: 4000, left: '33%' }}\n />\n {chain && (\n <Flex\n sx={{\n zIndex: 4002,\n position: 'absolute',\n top: '-2px',\n right: `-${size / 5}px`,\n overflow: 'hidden',\n borderRadius: '50px',\n }}\n >\n <Svg width={size / 2.5} height={size / 2.5} icon={NETWORK_ICONS?.[chain] ?? 'question'} />\n </Flex>\n )}\n </Flex>\n ) : (\n <Flex\n sx={{\n width: size - 2,\n height: size - 2,\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: '55px',\n position: 'relative',\n }}\n >\n <img\n src={`${APEBOND}/tokenImages/${token1?.toUpperCase()}.png`}\n alt={`tokenImgFor:${token1}`}\n width={size}\n height={token1 === 'BNB-ICHI' ? 19 : size}\n />\n {chain && (\n <Flex\n sx={{\n zIndex: 5,\n position: 'absolute',\n top: '-2px',\n right: '-4px',\n overflow: 'hidden',\n borderRadius: '50px',\n width: `${size / 2.5}px`,\n height: `${size / 2.5}px`,\n }}\n >\n <Svg width={size / 2.5} height={size / 2.5} icon={NETWORK_ICONS?.[chain] ?? 'question'} />\n </Flex>\n )}\n </Flex>\n )\n}\n\nexport default TokenImage\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/uikit-sdk/TokenImage/index.tsx"],"sourcesContent":["import React from 'react'\nimport Flex from '../Flex'\nimport { NETWORK_ICONS } from '../../../config/constants/chains'\nimport Svg from '../Svg'\nimport { APEBOND } from '../../../config/constants/variables'\n\nconst TokenImage = ({\n symbol,\n symbol2,\n size,\n chain,\n}: {\n symbol?: string\n symbol2?: string\n size: number\n chain?: number\n}) => {\n const token1 = symbol === 'USDC.e' ? 'USDC' : symbol\n const token2 = symbol2 === 'USDC.e' ? 'USDC' : symbol2\n return token2 ? (\n <Flex\n sx={{\n minWidth: size * 1.5 - 2,\n height: size - 2,\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: '55px',\n position: 'relative',\n }}\n >\n <img\n src={`${APEBOND}/tokenImages/${token1?.toUpperCase()}.png`}\n alt={`tokenImgFor:${token1}`}\n width={size}\n height={size}\n style={{ position: 'absolute', zIndex: 4001, left: 0 }}\n />\n <img\n src={`${APEBOND}/tokenImages/${token2.toUpperCase()}.png`}\n alt={`tokenImgFor:${token2}`}\n width={size}\n height={size}\n style={{ position: 'absolute', zIndex: 4000, left: '33%' }}\n />\n {chain && (\n <Flex\n sx={{\n zIndex: 4002,\n position: 'absolute',\n top: '-2px',\n right: `-${size / 5}px`,\n overflow: 'hidden',\n borderRadius: '50px',\n }}\n >\n <Svg width={size / 2.5} height={size / 2.5} icon={NETWORK_ICONS?.[chain] ?? 'question'} />\n </Flex>\n )}\n </Flex>\n ) : (\n <Flex\n sx={{\n width: size - 2,\n height: size - 2,\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: '55px',\n position: 'relative',\n }}\n >\n <img\n src={`${APEBOND}/tokenImages/${token1?.toUpperCase()}.png`}\n alt={`tokenImgFor:${token1}`}\n width={size}\n height={token1 === 'BNB-ICHI' ? 19 : size}\n />\n {chain && (\n <Flex\n sx={{\n zIndex: 5,\n position: 'absolute',\n top: '-2px',\n right: '-4px',\n overflow: 'hidden',\n borderRadius: '50px',\n width: `${size / 2.5}px`,\n height: `${size / 2.5}px`,\n }}\n >\n <Svg width={size / 2.5} height={size / 2.5} icon={NETWORK_ICONS?.[chain] ?? 'question'} />\n </Flex>\n )}\n </Flex>\n )\n}\n\nexport default TokenImage\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- var launchBondsABI_V2_2_0 = [
1
+ var LaunchBondABI_V_2_4_1 = [
2
2
  {
3
3
  anonymous: false,
4
4
  inputs: [
@@ -2354,5 +2354,5 @@ var launchBondsABI_V2_2_0 = [
2354
2354
  }
2355
2355
  ];
2356
2356
 
2357
- export { launchBondsABI_V2_2_0 as default };
2357
+ export { LaunchBondABI_V_2_4_1 as default };
2358
2358
  //# sourceMappingURL=launchBond_v2_4_1.json.js.map
@@ -0,0 +1,3 @@
1
+ export type Ecosystem = 'evm';
2
+ export declare const setWalletConnectorOpener: (ecosystem: Ecosystem, fn?: () => void) => void;
3
+ export declare const openEvmWalletConnector: () => void;
@@ -0,0 +1,18 @@
1
+ // Module-level singleton for wallet-connect-modal openers injected by the SDK consumer via `SDKPropsDTO.openWalletConnector`.
2
+ const openers = {};
3
+ const setWalletConnectorOpener = (ecosystem, fn) => {
4
+ openers[ecosystem] = fn;
5
+ };
6
+ const callOpener = (ecosystem) => {
7
+ const fn = openers[ecosystem];
8
+ if (!fn) {
9
+ console.error(`[ApeBond SDK] openWalletConnector.${ecosystem} was called but no opener has been registered via SDKPropsDTO.openWalletConnector.${ecosystem}`);
10
+ }
11
+ else {
12
+ fn();
13
+ }
14
+ };
15
+ const openEvmWalletConnector = () => callOpener('evm');
16
+
17
+ export { openEvmWalletConnector, setWalletConnectorOpener };
18
+ //# sourceMappingURL=walletConnectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletConnectors.js","sources":["../../../src/config/constants/walletConnectors.ts"],"sourcesContent":["// Module-level singleton for wallet-connect-modal openers injected by the SDK consumer via `SDKPropsDTO.openWalletConnector`.\n\nexport type Ecosystem = 'evm'\n\nconst openers: Partial<Record<Ecosystem, () => void>> = {}\n\nexport const setWalletConnectorOpener = (ecosystem: Ecosystem, fn?: () => void) => {\n openers[ecosystem] = fn\n}\n\nconst callOpener = (ecosystem: Ecosystem) => {\n const fn = openers[ecosystem]\n if (!fn) {\n console.error(\n `[ApeBond SDK] openWalletConnector.${ecosystem} was called but no opener has been registered via SDKPropsDTO.openWalletConnector.${ecosystem}`,\n )\n } else {\n fn()\n }\n}\n\nexport const openEvmWalletConnector = () => callOpener('evm')\n"],"names":[],"mappings":"AAAA;AAIA,MAAM,OAAO,GAA2C,EAAE;MAE7C,wBAAwB,GAAG,CAAC,SAAoB,EAAE,EAAe,KAAI;AAChF,IAAA,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE;AACzB;AAEA,MAAM,UAAU,GAAG,CAAC,SAAoB,KAAI;AAC1C,IAAA,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAC7B,IAAI,CAAC,EAAE,EAAE;QACP,OAAO,CAAC,KAAK,CACX,CAAA,kCAAA,EAAqC,SAAS,CAAA,kFAAA,EAAqF,SAAS,CAAA,CAAE,CAC/I;IACH;SAAO;AACL,QAAA,EAAE,EAAE;IACN;AACF,CAAC;AAEM,MAAM,sBAAsB,GAAG,MAAM,UAAU,CAAC,KAAK;;;;"}
@@ -1,17 +1,6 @@
1
1
  import { jsxs, jsx } from 'theme-ui/jsx-runtime';
2
- import '../components/uikit-sdk/Svg/types.js';
3
- import 'theme-ui';
4
2
  import Flex from '../components/uikit-sdk/Flex/index.js';
5
- import '../components/uikit-sdk/Text/types.js';
6
- import '../components/uikit-sdk/Checkbox/types.js';
7
- import '../components/uikit-sdk/Skeleton/types.js';
8
- import '../components/uikit-sdk/Skeleton/styles.js';
9
- import '../components/uikit-sdk/TooltipBubble/index.js';
10
3
  import React, { createContext, useState } from 'react';
11
- import 'framer-motion';
12
- import '../components/uikit-sdk/Button/types.js';
13
- import '../views/FullBondsView/FullBondsView.js';
14
- import '../components/uikit-sdk/Select/types.js';
15
4
 
16
5
  const Context = createContext({
17
6
  nodeId: [],
@@ -1 +1 @@
1
- {"version":3,"file":"ModalContext.js","sources":["../../src/contexts/ModalContext.tsx"],"sourcesContent":["import { Flex } from '../components/uikit-sdk'\nimport React, { createContext, useState } from 'react'\n\ninterface ModalsContext {\n nodeId: string[]\n modalNode: React.ReactNode[]\n setModalNode: React.Dispatch<React.SetStateAction<React.ReactNode[]>>\n onPresent: (node: React.ReactNode, newNodeId: string, clearModalStack: boolean) => void\n handleClose: () => void\n setCloseOnOverlayClick: React.Dispatch<React.SetStateAction<boolean>>\n}\n\nexport const Context = createContext<ModalsContext>({\n nodeId: [],\n modalNode: [],\n setModalNode: () => null,\n onPresent: () => null,\n handleClose: () => null,\n setCloseOnOverlayClick: () => true,\n})\n\nconst ModalProvider = ({ children }: { children: React.ReactNode }) => {\n const [nodeId, setNodeId] = useState<string[]>([])\n const [modalNode, setModalNode] = useState<React.ReactNode[]>([])\n const [closeOnOverlayClick, setCloseOnOverlayClick] = useState(true)\n\n const handlePresent = (node: React.ReactNode, newNodeId: string, clearModalStack: boolean) => {\n if (clearModalStack) {\n setModalNode([node])\n setNodeId([newNodeId])\n } else {\n setModalNode((prev) => [...prev, node])\n setNodeId((prev) => [...prev, newNodeId])\n }\n }\n\n const handleDismiss = () => {\n if (modalNode.length > 0) {\n if (React.isValidElement(modalNode[modalNode.length - 1])) {\n // @ts-ignore\n modalNode[modalNode.length - 1].props.onDismiss?.()\n }\n }\n setModalNode(modalNode.slice(0, modalNode.length - 1))\n setNodeId(nodeId.slice(0, nodeId.length - 1))\n }\n\n const handleOverlayDismiss = () => {\n if (closeOnOverlayClick) {\n handleDismiss()\n }\n }\n\n return (\n <Context.Provider\n value={{\n nodeId,\n modalNode,\n setModalNode,\n onPresent: handlePresent,\n handleClose: handleDismiss,\n setCloseOnOverlayClick,\n }}\n >\n {modalNode.map((modal, i) => {\n return (\n <Flex key={nodeId[i]}>\n <Flex onClick={handleOverlayDismiss} />\n {React.isValidElement(modal) &&\n React.cloneElement(modal, {\n // @ts-ignore\n onDismiss: handleDismiss,\n })}\n </Flex>\n )\n })}\n {children}\n </Context.Provider>\n )\n}\n\nexport default ModalProvider\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;;;;;AAYO,MAAM,OAAO,GAAG,aAAa,CAAgB;AAClD,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,YAAY,EAAE,MAAM,IAAI;AACxB,IAAA,SAAS,EAAE,MAAM,IAAI;AACrB,IAAA,WAAW,EAAE,MAAM,IAAI;AACvB,IAAA,sBAAsB,EAAE,MAAM,IAAI;AACnC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,EAAE,QAAQ,EAAiC,KAAI;IACpE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC;IAClD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAoB,EAAE,CAAC;IACjE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;IAEpE,MAAM,aAAa,GAAG,CAAC,IAAqB,EAAE,SAAiB,EAAE,eAAwB,KAAI;QAC3F,IAAI,eAAe,EAAE;AACnB,YAAA,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AACpB,YAAA,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC;QACxB;aAAO;AACL,YAAA,YAAY,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;AACvC,YAAA,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3C;AACF,IAAA,CAAC;IAED,MAAM,aAAa,GAAG,MAAK;AACzB,QAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,YAAA,IAAI,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE;;AAEzD,gBAAA,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI;YACrD;QACF;AACA,QAAA,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACtD,QAAA,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC/C,IAAA,CAAC;IAED,MAAM,oBAAoB,GAAG,MAAK;QAChC,IAAI,mBAAmB,EAAE;AACvB,YAAA,aAAa,EAAE;QACjB;AACF,IAAA,CAAC;AAED,IAAA,QACEA,IAAA,CAAC,OAAO,CAAC,QAAQ,EAAA,EACf,KAAK,EAAE;YACL,MAAM;YACN,SAAS;YACT,YAAY;AACZ,YAAA,SAAS,EAAE,aAAa;AACxB,YAAA,WAAW,EAAE,aAAa;YAC1B,sBAAsB;SACvB,EAAA,QAAA,EAAA,CAEA,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;AAC1B,gBAAA,QACEA,IAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAAA,CACHC,GAAA,CAAC,IAAI,EAAA,EAAC,OAAO,EAAE,oBAAoB,GAAI,EACtC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;AAC1B,4BAAA,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE;;AAExB,gCAAA,SAAS,EAAE,aAAa;AACzB,6BAAA,CAAC,KANK,MAAM,CAAC,CAAC,CAAC,CAOb;AAEX,YAAA,CAAC,CAAC,EACD,QAAQ,CAAA,EAAA,CACQ;AAEvB;;;;"}
1
+ {"version":3,"file":"ModalContext.js","sources":["../../src/contexts/ModalContext.tsx"],"sourcesContent":["import Flex from '../components/uikit-sdk/Flex'\nimport React, { createContext, useState } from 'react'\n\ninterface ModalsContext {\n nodeId: string[]\n modalNode: React.ReactNode[]\n setModalNode: React.Dispatch<React.SetStateAction<React.ReactNode[]>>\n onPresent: (node: React.ReactNode, newNodeId: string, clearModalStack: boolean) => void\n handleClose: () => void\n setCloseOnOverlayClick: React.Dispatch<React.SetStateAction<boolean>>\n}\n\nexport const Context = createContext<ModalsContext>({\n nodeId: [],\n modalNode: [],\n setModalNode: () => null,\n onPresent: () => null,\n handleClose: () => null,\n setCloseOnOverlayClick: () => true,\n})\n\nconst ModalProvider = ({ children }: { children: React.ReactNode }) => {\n const [nodeId, setNodeId] = useState<string[]>([])\n const [modalNode, setModalNode] = useState<React.ReactNode[]>([])\n const [closeOnOverlayClick, setCloseOnOverlayClick] = useState(true)\n\n const handlePresent = (node: React.ReactNode, newNodeId: string, clearModalStack: boolean) => {\n if (clearModalStack) {\n setModalNode([node])\n setNodeId([newNodeId])\n } else {\n setModalNode((prev) => [...prev, node])\n setNodeId((prev) => [...prev, newNodeId])\n }\n }\n\n const handleDismiss = () => {\n if (modalNode.length > 0) {\n if (React.isValidElement(modalNode[modalNode.length - 1])) {\n // @ts-ignore\n modalNode[modalNode.length - 1].props.onDismiss?.()\n }\n }\n setModalNode(modalNode.slice(0, modalNode.length - 1))\n setNodeId(nodeId.slice(0, nodeId.length - 1))\n }\n\n const handleOverlayDismiss = () => {\n if (closeOnOverlayClick) {\n handleDismiss()\n }\n }\n\n return (\n <Context.Provider\n value={{\n nodeId,\n modalNode,\n setModalNode,\n onPresent: handlePresent,\n handleClose: handleDismiss,\n setCloseOnOverlayClick,\n }}\n >\n {modalNode.map((modal, i) => {\n return (\n <Flex key={nodeId[i]}>\n <Flex onClick={handleOverlayDismiss} />\n {React.isValidElement(modal) &&\n React.cloneElement(modal, {\n // @ts-ignore\n onDismiss: handleDismiss,\n })}\n </Flex>\n )\n })}\n {children}\n </Context.Provider>\n )\n}\n\nexport default ModalProvider\n"],"names":["_jsxs","_jsx"],"mappings":";;;;AAYO,MAAM,OAAO,GAAG,aAAa,CAAgB;AAClD,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,YAAY,EAAE,MAAM,IAAI;AACxB,IAAA,SAAS,EAAE,MAAM,IAAI;AACrB,IAAA,WAAW,EAAE,MAAM,IAAI;AACvB,IAAA,sBAAsB,EAAE,MAAM,IAAI;AACnC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,EAAE,QAAQ,EAAiC,KAAI;IACpE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC;IAClD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAoB,EAAE,CAAC;IACjE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;IAEpE,MAAM,aAAa,GAAG,CAAC,IAAqB,EAAE,SAAiB,EAAE,eAAwB,KAAI;QAC3F,IAAI,eAAe,EAAE;AACnB,YAAA,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AACpB,YAAA,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC;QACxB;aAAO;AACL,YAAA,YAAY,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;AACvC,YAAA,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3C;AACF,IAAA,CAAC;IAED,MAAM,aAAa,GAAG,MAAK;AACzB,QAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,YAAA,IAAI,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE;;AAEzD,gBAAA,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI;YACrD;QACF;AACA,QAAA,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACtD,QAAA,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC/C,IAAA,CAAC;IAED,MAAM,oBAAoB,GAAG,MAAK;QAChC,IAAI,mBAAmB,EAAE;AACvB,YAAA,aAAa,EAAE;QACjB;AACF,IAAA,CAAC;AAED,IAAA,QACEA,IAAA,CAAC,OAAO,CAAC,QAAQ,EAAA,EACf,KAAK,EAAE;YACL,MAAM;YACN,SAAS;YACT,YAAY;AACZ,YAAA,SAAS,EAAE,aAAa;AACxB,YAAA,WAAW,EAAE,aAAa;YAC1B,sBAAsB;SACvB,EAAA,QAAA,EAAA,CAEA,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;AAC1B,gBAAA,QACEA,IAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAAA,CACHC,GAAA,CAAC,IAAI,EAAA,EAAC,OAAO,EAAE,oBAAoB,GAAI,EACtC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;AAC1B,4BAAA,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE;;AAExB,gCAAA,SAAS,EAAE,aAAa;AACzB,6BAAA,CAAC,KANK,MAAM,CAAC,CAAC,CAAC,CAOb;AAEX,YAAA,CAAC,CAAC,EACD,QAAQ,CAAA,EAAA,CACQ;AAEvB;;;;"}
@@ -1,18 +1,5 @@
1
1
  import { jsxs, jsx } from 'theme-ui/jsx-runtime';
2
- import '../components/uikit-sdk/Svg/types.js';
3
- import 'theme-ui';
4
2
  import Flex from '../components/uikit-sdk/Flex/index.js';
5
- import '../components/uikit-sdk/Text/types.js';
6
- import '../components/uikit-sdk/Checkbox/types.js';
7
- import '../components/uikit-sdk/Skeleton/types.js';
8
- import '../components/uikit-sdk/Skeleton/styles.js';
9
- import '../components/uikit-sdk/TooltipBubble/index.js';
10
- import 'react';
11
- import 'framer-motion';
12
- import '../components/uikit-sdk/Button/types.js';
13
- import './ModalContext.js';
14
- import '../views/FullBondsView/FullBondsView.js';
15
- import '../components/uikit-sdk/Select/types.js';
16
3
  import Toast from '../components/Toast/index.js';
17
4
  import { usePopups } from '../state/popups/usePopups.js';
18
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"Popups.js","sources":["../../src/contexts/Popups.tsx"],"sourcesContent":["import React from 'react'\nimport { Flex } from '../components/uikit-sdk'\nimport Toast from '../components/Toast'\nimport { PopupProps, usePopups } from '../state/popups/usePopups'\n\nconst Popups = ({ children }: { children: React.ReactNode }) => {\n const { data: activePopups } = usePopups()\n\n const filteredPopups = activePopups?.filter((popup: PopupProps) => popup.timestamp > Date.now() - 10000)\n\n return (\n <Flex sx={{ width: '100%', height: '100%', position: 'relative', flexDirection: 'column' }}>\n <Flex sx={{ position: 'absolute', top: 0, right: 0 }}>\n {filteredPopups?.map((popup: PopupProps, i) => {\n return <Toast key={popup.timestamp} popIndex={i + 1} popup={popup} />\n })}\n </Flex>\n {children}\n </Flex>\n )\n}\n\nexport default Popups\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;;;;;;;;AAKA,MAAM,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAiC,KAAI;IAC7D,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,SAAS,EAAE;IAE1C,MAAM,cAAc,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC,KAAiB,KAAK,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;IAExG,QACEA,IAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAA,QAAA,EAAA,CACxFC,GAAA,CAAC,IAAI,IAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAA,QAAA,EACjD,cAAc,EAAE,GAAG,CAAC,CAAC,KAAiB,EAAE,CAAC,KAAI;AAC5C,oBAAA,OAAOA,IAAC,KAAK,EAAA,EAAuB,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA,EAA9C,KAAK,CAAC,SAAS,CAAmC;AACvE,gBAAA,CAAC,CAAC,EAAA,CACG,EACN,QAAQ,CAAA,EAAA,CACJ;AAEX;;;;"}
1
+ {"version":3,"file":"Popups.js","sources":["../../src/contexts/Popups.tsx"],"sourcesContent":["import React from 'react'\nimport Flex from '../components/uikit-sdk/Flex'\nimport Toast from '../components/Toast'\nimport { PopupProps, usePopups } from '../state/popups/usePopups'\n\nconst Popups = ({ children }: { children: React.ReactNode }) => {\n const { data: activePopups } = usePopups()\n\n const filteredPopups = activePopups?.filter((popup: PopupProps) => popup.timestamp > Date.now() - 10000)\n\n return (\n <Flex sx={{ width: '100%', height: '100%', position: 'relative', flexDirection: 'column' }}>\n <Flex sx={{ position: 'absolute', top: 0, right: 0 }}>\n {filteredPopups?.map((popup: PopupProps, i) => {\n return <Toast key={popup.timestamp} popIndex={i + 1} popup={popup} />\n })}\n </Flex>\n {children}\n </Flex>\n )\n}\n\nexport default Popups\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;AAKA,MAAM,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAiC,KAAI;IAC7D,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,SAAS,EAAE;IAE1C,MAAM,cAAc,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC,KAAiB,KAAK,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;IAExG,QACEA,IAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAA,QAAA,EAAA,CACxFC,GAAA,CAAC,IAAI,IAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAA,QAAA,EACjD,cAAc,EAAE,GAAG,CAAC,CAAC,KAAiB,EAAE,CAAC,KAAI;AAC5C,oBAAA,OAAOA,IAAC,KAAK,EAAA,EAAuB,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA,EAA9C,KAAK,CAAC,SAAS,CAAmC;AACvE,gBAAA,CAAC,CAAC,EAAA,CACG,EACN,QAAQ,CAAA,EAAA,CACJ;AAEX;;;;"}
@@ -3,7 +3,7 @@ import BigNumber from 'bignumber.js';
3
3
  import ERC_20_ABI from '../../config/abi/erc20.json.js';
4
4
  import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
5
5
  import multicall from '../../utils/multicall.js';
6
- import convertToTokenValue from '../../utils/convertToTokenValue.js';
6
+ import { convertToBigish } from '../../utils/convertToTokenValue.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';
@@ -88,7 +88,7 @@ const useApproval = (amount, currency, spender, account, chainId) => {
88
88
  if (!decimals || !tokenAddress)
89
89
  return null;
90
90
  try {
91
- const bigishAmount = convertToTokenValue(amount, decimals);
91
+ const bigishAmount = convertToBigish(amount, decimals);
92
92
  setConfirmingTxOnWallet(true);
93
93
  const hash = await writeContractAsync({
94
94
  address: tokenAddress,
@@ -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 convertToTokenValue from '../../utils/convertToTokenValue'\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 { useMonitorTxHash } from '../../hooks/useMonitorTxHash'\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 [txHash, setTxHash] = useState('')\n const { data: allowance, refetch } = useAllowance(currency, spender, account, chainId)\n\n const { writeContractAsync } = useWriteContract()\n const { isLoading: isConfirming, isSuccess: isConfirmed } = useMonitorTxHash(txHash, chainId as ChainId)\n const { addToastError } = usePopups()\n const confirmingTxOnChain = isConfirming && !isConfirmed\n\n useEffect(() => {\n if (txHash && isConfirmed) {\n setTxHash('')\n refetch()\n console.log('refetch allowance')\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [txHash, confirmingTxOnChain])\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 = convertToTokenValue(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 setTxHash(hash)\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":["erc20ABI"],"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 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/convertToTokenValue'\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 { useMonitorTxHash } from '../../hooks/useMonitorTxHash'\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 [txHash, setTxHash] = useState('')\n const { data: allowance, refetch } = useAllowance(currency, spender, account, chainId)\n\n const { writeContractAsync } = useWriteContract()\n const { isLoading: isConfirming, isSuccess: isConfirmed } = useMonitorTxHash(txHash, chainId as ChainId)\n const { addToastError } = usePopups()\n const confirmingTxOnChain = isConfirming && !isConfirmed\n\n useEffect(() => {\n if (txHash && isConfirmed) {\n setTxHash('')\n refetch()\n console.log('refetch allowance')\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [txHash, confirmingTxOnChain])\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 setTxHash(hash)\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":["erc20ABI"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { getBalanceNumber } from '../../utils/getBalanceNumber.js';
2
2
  import { BillVersion } from '@ape.swap/apeswap-lists';
3
3
  import multicall from '../../utils/multicall.js';
4
- import launchBondsABI_V2_2_0 from '../../config/abi/launchBond_v2_4_1.json.js';
4
+ import LaunchBondABI_V_2_4_1 from '../../config/abi/launchBond_v2_4_1.json.js';
5
5
  import BOND_ABI from '../../config/abi/BOND_2_4_0.json.js';
6
6
  import ERC_20_ABI from '../../config/abi/erc20.json.js';
7
7
  import { reportError } from '../../utils/reportError.js';
@@ -51,7 +51,7 @@ const fetchBondsDataPreTGE = async (chain, tokenPrices, preTGEBonds, apiUrl) =>
51
51
  },
52
52
  ];
53
53
  });
54
- const vals = await multicall(chainId, launchBondsABI_V2_2_0, launchBondsCalls);
54
+ const vals = await multicall(chainId, LaunchBondABI_V_2_4_1, launchBondsCalls);
55
55
  const chunkSize = vals.length / preTGEBonds.length;
56
56
  const chunkedBills = chunk(vals, chunkSize);
57
57
  const returnedBills = chunkedBills?.map((chunk, index) => {
@@ -1,7 +1,7 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
2
  import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
3
3
  import multicall from '../../utils/multicall.js';
4
- import launchBondsABI_V2_2_0 from '../../config/abi/launchBond_v2_4_1.json.js';
4
+ import LaunchBondABI_V_2_4_1 from '../../config/abi/launchBond_v2_4_1.json.js';
5
5
  import BigNumber from 'bignumber.js';
6
6
  import { reportError } from '../../utils/reportError.js';
7
7
  import { useURLByEnvironment, useSDKConfig } from '../useSDKConfig.js';
@@ -58,7 +58,7 @@ const fetchPreTGEUserBonds = async (chains, tokenPrices, preTGEList, account, ap
58
58
  name: 'trueBillPrice',
59
59
  },
60
60
  ];
61
- const res = await multicall(bond.chainId, launchBondsABI_V2_2_0, calls);
61
+ const res = await multicall(bond.chainId, LaunchBondABI_V_2_4_1, calls);
62
62
  const billId = res?.[0]?.[0]?.[0]?.toString();
63
63
  let userOwnedBillsData;
64
64
  if (billId) {
@@ -78,7 +78,7 @@ const fetchPreTGEUserBonds = async (chains, tokenPrices, preTGEList, account, ap
78
78
  params: [billId],
79
79
  },
80
80
  ];
81
- const billData = await multicall(bond.chainId, launchBondsABI_V2_2_0, billDataCalls);
81
+ const billData = await multicall(bond.chainId, LaunchBondABI_V_2_4_1, billDataCalls);
82
82
  userOwnedBillsData = {
83
83
  address: bond.contractAddress[bond.chainId] ?? '',
84
84
  id: billId,
@@ -1,9 +1,11 @@
1
1
  import { ChainId } from '@ape.swap/apeswap-lists';
2
+ export interface OpenWalletConnectorsDTO {
3
+ evm?: () => void;
4
+ }
2
5
  export interface SDKPropsDTO {
3
6
  referenceId: string;
4
7
  chains: number[];
5
8
  hotBondChains?: number[];
6
- connector?: 'rainbowkit' | 'appkit' | 'default';
7
9
  useHotBonds?: boolean;
8
10
  useTiers?: boolean;
9
11
  useTGEBonds?: boolean;
@@ -14,12 +16,12 @@ export interface SDKPropsDTO {
14
16
  theme?: any;
15
17
  highestCompatibleVersion?: string;
16
18
  customRPCS?: Partial<Record<ChainId, string[]>>;
19
+ openWalletConnectors?: OpenWalletConnectorsDTO;
17
20
  }
18
21
  export interface SDKProps {
19
22
  referenceId: string;
20
23
  chains: number[];
21
24
  hotBondChains: number[];
22
- connector?: 'rainbowkit' | 'appkit' | 'default';
23
25
  useHotBonds: boolean;
24
26
  useTiers: boolean;
25
27
  useTGEBonds: boolean;
@@ -30,6 +32,9 @@ export interface SDKProps {
30
32
  theme?: any;
31
33
  highestCompatibleVersion?: string;
32
34
  customRPCS?: Partial<Record<ChainId, string[]>>;
35
+ openWalletConnectors: {
36
+ evm: boolean;
37
+ };
33
38
  }
34
39
  export declare const useSDKConfig: (config?: SDKPropsDTO) => SDKProps;
35
40
  export type URLKeys = 'apiV2' | 'realTimeApi' | 'mainUrl' | 'priceApi';
@@ -3,6 +3,7 @@ import { QUERY_KEYS } from '../config/constants/queryKeys.js';
3
3
  import { ChainId } from '@ape.swap/apeswap-lists';
4
4
  import { useEffect } from 'react';
5
5
  import { setCustomRPCS } from '../config/constants/networks.js';
6
+ import { setWalletConnectorOpener } from '../config/constants/walletConnectors.js';
6
7
 
7
8
  // Prod URLS. Do not make changes here
8
9
  const defaultUrls = {
@@ -25,21 +26,28 @@ const useSDKConfig = (config) => {
25
26
  chains: [],
26
27
  hotBondChains: [ChainId.BSC, ChainId.MATIC],
27
28
  useHotBonds: true,
28
- connector: 'default',
29
29
  useTiers: false,
30
30
  useTGEBonds: false,
31
31
  showLowValueBonds: false,
32
32
  bondPartner: undefined,
33
33
  namingPreference: 'Bonus',
34
34
  ...config,
35
+ openWalletConnectors: {
36
+ evm: !!config?.openWalletConnectors?.evm,
37
+ },
35
38
  urls: { ...urls, ...config?.urls },
36
39
  highestCompatibleVersion: '2.1.3',
37
40
  };
41
+ const evmConnectorOpener = config?.openWalletConnectors?.evm;
38
42
  useEffect(() => {
39
43
  if (config?.customRPCS) {
40
44
  setCustomRPCS(config.customRPCS);
41
45
  }
42
- }, [config?.customRPCS]);
46
+ if (evmConnectorOpener) {
47
+ console.log('set evm wallet opener');
48
+ setWalletConnectorOpener('evm', evmConnectorOpener);
49
+ }
50
+ }, [config?.customRPCS, evmConnectorOpener]);
43
51
  const { data } = useQuery({
44
52
  queryKey: [QUERY_KEYS.SDK_CONFIG],
45
53
  queryFn: () => {
@@ -1 +1 @@
1
- {"version":3,"file":"useSDKConfig.js","sources":["../../src/state/useSDKConfig.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../config/constants/queryKeys'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { useEffect } from 'react'\nimport { setCustomRPCS } from '../config/constants/networks'\n\n// Prod URLS. Do not make changes here\nconst defaultUrls = {\n apiV2: 'https://api.ape.bond',\n realTimeApi: 'https://realtime-api.ape.bond',\n mainUrl: 'https://ape.bond',\n priceApi: 'https://price-api.ape.bond',\n}\n\n// Staging URLS.\nconst stagingUrls = {\n apiV2: 'https://staging-api.ape.bond',\n realTimeApi: 'https://realtime-api-staging.ape.bond',\n mainUrl: 'https://staging.ape.bond',\n priceApi: 'https://price-api.ape.bond',\n}\n\nexport interface SDKPropsDTO {\n referenceId: string\n chains: number[]\n hotBondChains?: number[]\n connector?: 'rainbowkit' | 'appkit' | 'default'\n useHotBonds?: boolean\n useTiers?: boolean\n useTGEBonds?: boolean\n showLowValueBonds?: boolean\n bondPartner?: string\n namingPreference?: 'Discount' | 'Bonus'\n urls?: Partial<Record<URLKeys, string>>\n theme?: any\n highestCompatibleVersion?: string\n customRPCS?: Partial<Record<ChainId, string[]>>\n}\n\nexport interface SDKProps {\n referenceId: string\n chains: number[]\n hotBondChains: number[]\n connector?: 'rainbowkit' | 'appkit' | 'default'\n useHotBonds: boolean\n useTiers: boolean\n useTGEBonds: boolean\n showLowValueBonds: boolean\n bondPartner?: string\n namingPreference: 'Discount' | 'Bonus'\n urls: Record<URLKeys, string>\n theme?: any\n highestCompatibleVersion?: string\n customRPCS?: Partial<Record<ChainId, string[]>>\n}\n\nexport const useSDKConfig = (config?: SDKPropsDTO): SDKProps => {\n const urls = process.env.NODE_ENV === 'production' ? defaultUrls : stagingUrls\n\n const initialData: SDKProps = {\n referenceId: '',\n chains: [],\n hotBondChains: [ChainId.BSC, ChainId.MATIC],\n useHotBonds: true,\n connector: 'default',\n useTiers: false,\n useTGEBonds: false,\n showLowValueBonds: false,\n bondPartner: undefined,\n namingPreference: 'Bonus',\n ...config,\n urls: { ...urls, ...config?.urls },\n highestCompatibleVersion: '2.1.3',\n }\n\n useEffect(() => {\n if (config?.customRPCS) {\n setCustomRPCS(config.customRPCS)\n }\n }, [config?.customRPCS])\n\n const { data } = useQuery({\n queryKey: [QUERY_KEYS.SDK_CONFIG],\n queryFn: () => {\n throw new Error('Just a hotfix for latest versions of react-query that make queryFn a required prop')\n },\n initialData,\n })\n return data as SDKProps\n}\n\nexport type URLKeys = 'apiV2' | 'realTimeApi' | 'mainUrl' | 'priceApi'\n\nexport const useURLByEnvironment = (key: URLKeys) => {\n const config = useSDKConfig()\n return config?.urls?.[key] as string\n}\n"],"names":[],"mappings":";;;;;;AAMA;AACA,MAAM,WAAW,GAAG;AAClB,IAAA,KAAK,EAAE,sBAAsB;AAC7B,IAAA,WAAW,EAAE,+BAA+B;AAC5C,IAAA,OAAO,EAAE,kBAAkB;AAC3B,IAAA,QAAQ,EAAE,4BAA4B;CACvC;AAED;AACA,MAAM,WAAW,GAAG;AAClB,IAAA,KAAK,EAAE,8BAA8B;AACrC,IAAA,WAAW,EAAE,uCAAuC;AACpD,IAAA,OAAO,EAAE,0BAA0B;AACnC,IAAA,QAAQ,EAAE,4BAA4B;CACvC;AAoCM,MAAM,YAAY,GAAG,CAAC,MAAoB,KAAc;AAC7D,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,GAAG,WAAW,GAAG,WAAW;AAE9E,IAAA,MAAM,WAAW,GAAa;AAC5B,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;AAC3C,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,iBAAiB,EAAE,KAAK;AACxB,QAAA,WAAW,EAAE,SAAS;AACtB,QAAA,gBAAgB,EAAE,OAAO;AACzB,QAAA,GAAG,MAAM;QACT,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE;AAClC,QAAA,wBAAwB,EAAE,OAAO;KAClC;IAED,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,MAAM,EAAE,UAAU,EAAE;AACtB,YAAA,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC;QAClC;AACF,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAExB,IAAA,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;AACxB,QAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QACjC,OAAO,EAAE,MAAK;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC;QACvG,CAAC;QACD,WAAW;AACZ,KAAA,CAAC;AACF,IAAA,OAAO,IAAgB;AACzB;AAIO,MAAM,mBAAmB,GAAG,CAAC,GAAY,KAAI;AAClD,IAAA,MAAM,MAAM,GAAG,YAAY,EAAE;AAC7B,IAAA,OAAO,MAAM,EAAE,IAAI,GAAG,GAAG,CAAW;AACtC;;;;"}
1
+ {"version":3,"file":"useSDKConfig.js","sources":["../../src/state/useSDKConfig.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../config/constants/queryKeys'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { useEffect } from 'react'\nimport { setCustomRPCS } from '../config/constants/networks'\nimport { setWalletConnectorOpener } from '../config/constants/walletConnectors'\n\n// Prod URLS. Do not make changes here\nconst defaultUrls = {\n apiV2: 'https://api.ape.bond',\n realTimeApi: 'https://realtime-api.ape.bond',\n mainUrl: 'https://ape.bond',\n priceApi: 'https://price-api.ape.bond',\n}\n\n// Staging URLS.\nconst stagingUrls = {\n apiV2: 'https://staging-api.ape.bond',\n realTimeApi: 'https://realtime-api-staging.ape.bond',\n mainUrl: 'https://staging.ape.bond',\n priceApi: 'https://price-api.ape.bond',\n}\n\nexport interface OpenWalletConnectorsDTO {\n evm?: () => void\n}\n\nexport interface SDKPropsDTO {\n referenceId: string\n chains: number[]\n hotBondChains?: number[]\n useHotBonds?: boolean\n useTiers?: boolean\n useTGEBonds?: boolean\n showLowValueBonds?: boolean\n bondPartner?: string\n namingPreference?: 'Discount' | 'Bonus'\n urls?: Partial<Record<URLKeys, string>>\n theme?: any\n highestCompatibleVersion?: string\n customRPCS?: Partial<Record<ChainId, string[]>>\n openWalletConnectors?: OpenWalletConnectorsDTO\n}\n\nexport interface SDKProps {\n referenceId: string\n chains: number[]\n hotBondChains: number[]\n useHotBonds: boolean\n useTiers: boolean\n useTGEBonds: boolean\n showLowValueBonds: boolean\n bondPartner?: string\n namingPreference: 'Discount' | 'Bonus'\n urls: Record<URLKeys, string>\n theme?: any\n highestCompatibleVersion?: string\n customRPCS?: Partial<Record<ChainId, string[]>>\n openWalletConnectors: {\n evm: boolean\n }\n}\n\nexport const useSDKConfig = (config?: SDKPropsDTO): SDKProps => {\n const urls = process.env.NODE_ENV === 'production' ? defaultUrls : stagingUrls\n\n const initialData: SDKProps = {\n referenceId: '',\n chains: [],\n hotBondChains: [ChainId.BSC, ChainId.MATIC],\n useHotBonds: true,\n useTiers: false,\n useTGEBonds: false,\n showLowValueBonds: false,\n bondPartner: undefined,\n namingPreference: 'Bonus',\n ...config,\n openWalletConnectors: {\n evm: !!config?.openWalletConnectors?.evm,\n },\n urls: { ...urls, ...config?.urls },\n highestCompatibleVersion: '2.1.3',\n }\n\n const evmConnectorOpener = config?.openWalletConnectors?.evm\n\n useEffect(() => {\n if (config?.customRPCS) {\n setCustomRPCS(config.customRPCS)\n }\n if (evmConnectorOpener) {\n console.log('set evm wallet opener')\n setWalletConnectorOpener('evm', evmConnectorOpener)\n }\n }, [config?.customRPCS, evmConnectorOpener])\n\n const { data } = useQuery({\n queryKey: [QUERY_KEYS.SDK_CONFIG],\n queryFn: () => {\n throw new Error('Just a hotfix for latest versions of react-query that make queryFn a required prop')\n },\n initialData,\n })\n return data as SDKProps\n}\n\nexport type URLKeys = 'apiV2' | 'realTimeApi' | 'mainUrl' | 'priceApi'\n\nexport const useURLByEnvironment = (key: URLKeys) => {\n const config = useSDKConfig()\n return config?.urls?.[key] as string\n}\n"],"names":[],"mappings":";;;;;;;AAOA;AACA,MAAM,WAAW,GAAG;AAClB,IAAA,KAAK,EAAE,sBAAsB;AAC7B,IAAA,WAAW,EAAE,+BAA+B;AAC5C,IAAA,OAAO,EAAE,kBAAkB;AAC3B,IAAA,QAAQ,EAAE,4BAA4B;CACvC;AAED;AACA,MAAM,WAAW,GAAG;AAClB,IAAA,KAAK,EAAE,8BAA8B;AACrC,IAAA,WAAW,EAAE,uCAAuC;AACpD,IAAA,OAAO,EAAE,0BAA0B;AACnC,IAAA,QAAQ,EAAE,4BAA4B;CACvC;AA0CM,MAAM,YAAY,GAAG,CAAC,MAAoB,KAAc;AAC7D,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,GAAG,WAAW,GAAG,WAAW;AAE9E,IAAA,MAAM,WAAW,GAAa;AAC5B,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;AAC3C,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,iBAAiB,EAAE,KAAK;AACxB,QAAA,WAAW,EAAE,SAAS;AACtB,QAAA,gBAAgB,EAAE,OAAO;AACzB,QAAA,GAAG,MAAM;AACT,QAAA,oBAAoB,EAAE;AACpB,YAAA,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG;AACzC,SAAA;QACD,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE;AAClC,QAAA,wBAAwB,EAAE,OAAO;KAClC;AAED,IAAA,MAAM,kBAAkB,GAAG,MAAM,EAAE,oBAAoB,EAAE,GAAG;IAE5D,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,MAAM,EAAE,UAAU,EAAE;AACtB,YAAA,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC;QAClC;QACA,IAAI,kBAAkB,EAAE;AACtB,YAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;AACpC,YAAA,wBAAwB,CAAC,KAAK,EAAE,kBAAkB,CAAC;QACrD;IACF,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC;AAE5C,IAAA,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;AACxB,QAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QACjC,OAAO,EAAE,MAAK;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC;QACvG,CAAC;QACD,WAAW;AACZ,KAAA,CAAC;AACF,IAAA,OAAO,IAAgB;AACzB;AAIO,MAAM,mBAAmB,GAAG,CAAC,GAAY,KAAI;AAClD,IAAA,MAAM,MAAM,GAAG,YAAY,EAAE;AAC7B,IAAA,OAAO,MAAM,EAAE,IAAI,GAAG,GAAG,CAAW;AACtC;;;;"}
@@ -1,4 +1,2 @@
1
- import { ethers } from 'ethers';
2
1
  export declare function adjustDecimals(numStr: string): string;
3
- declare const convertToTokenValue: (numberString: string, decimals: number) => ethers.BigNumber;
4
- export default convertToTokenValue;
2
+ export declare const convertToBigish: (numberString?: string, decimals?: number) => string;
@@ -1,4 +1,4 @@
1
- import { ethers } from 'ethers';
1
+ import BigNumber from 'bignumber.js';
2
2
 
3
3
  function adjustDecimals(numStr) {
4
4
  const parts = numStr.split('.');
@@ -14,14 +14,12 @@ function adjustDecimals(numStr) {
14
14
  return numStr;
15
15
  }
16
16
  }
17
- const convertToTokenValue = (numberString, decimals) => {
18
- if (isNaN(parseFloat(numberString))) {
19
- console.error('Error: numberString to parse is not a number');
20
- return ethers.utils.parseUnits('0', decimals);
21
- }
22
- const tokenValue = ethers.utils.parseUnits(adjustDecimals(numberString), decimals);
23
- return tokenValue;
17
+ const convertToBigish = (numberString, decimals = 18) => {
18
+ if (!numberString || !decimals)
19
+ return '';
20
+ const adjustedDecimals = adjustDecimals(numberString);
21
+ return new BigNumber(adjustedDecimals).times(new BigNumber(10).pow(decimals)).toFixed(0);
24
22
  };
25
23
 
26
- export { adjustDecimals, convertToTokenValue as default };
24
+ export { adjustDecimals, convertToBigish };
27
25
  //# sourceMappingURL=convertToTokenValue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"convertToTokenValue.js","sources":["../../src/utils/convertToTokenValue.ts"],"sourcesContent":["import { ethers } from 'ethers'\n\nexport function adjustDecimals(numStr: string) {\n const parts = numStr.split('.')\n if (parts.length < 2) {\n // This means the number doesn't have any decimals\n return numStr\n }\n if (parts[1].length > 18) {\n parts[1] = parts[1].slice(0, 18) // Take the first 18 decimals\n return parts[0] + '.' + parts[1]\n } else {\n return numStr\n }\n}\n\nconst convertToTokenValue = (numberString: string, decimals: number): ethers.BigNumber => {\n if (isNaN(parseFloat(numberString))) {\n console.error('Error: numberString to parse is not a number')\n return ethers.utils.parseUnits('0', decimals)\n }\n const tokenValue = ethers.utils.parseUnits(adjustDecimals(numberString), decimals)\n return tokenValue\n}\n\nexport default convertToTokenValue\n"],"names":[],"mappings":";;AAEM,SAAU,cAAc,CAAC,MAAc,EAAA;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AAC/B,IAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEpB,QAAA,OAAO,MAAM;IACf;IACA,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE;AACxB,QAAA,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAChC,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IAClC;SAAO;AACL,QAAA,OAAO,MAAM;IACf;AACF;AAEA,MAAM,mBAAmB,GAAG,CAAC,YAAoB,EAAE,QAAgB,KAAsB;IACvF,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE;AACnC,QAAA,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC;QAC7D,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;IAC/C;AACA,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC;AAClF,IAAA,OAAO,UAAU;AACnB;;;;"}
1
+ {"version":3,"file":"convertToTokenValue.js","sources":["../../src/utils/convertToTokenValue.ts"],"sourcesContent":["import BigNumber from 'bignumber.js'\n\nexport function adjustDecimals(numStr: string) {\n const parts = numStr.split('.')\n if (parts.length < 2) {\n // This means the number doesn't have any decimals\n return numStr\n }\n if (parts[1].length > 18) {\n parts[1] = parts[1].slice(0, 18) // Take the first 18 decimals\n return parts[0] + '.' + parts[1]\n } else {\n return numStr\n }\n}\n\nexport const convertToBigish = (numberString?: string, decimals: number = 18) => {\n if (!numberString || !decimals) return ''\n\n const adjustedDecimals = adjustDecimals(numberString)\n\n return new BigNumber(adjustedDecimals).times(new BigNumber(10).pow(decimals)).toFixed(0)\n}\n"],"names":[],"mappings":";;AAEM,SAAU,cAAc,CAAC,MAAc,EAAA;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AAC/B,IAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEpB,QAAA,OAAO,MAAM;IACf;IACA,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE;AACxB,QAAA,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAChC,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IAClC;SAAO;AACL,QAAA,OAAO,MAAM;IACf;AACF;AAEO,MAAM,eAAe,GAAG,CAAC,YAAqB,EAAE,QAAA,GAAmB,EAAE,KAAI;AAC9E,IAAA,IAAI,CAAC,YAAY,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,EAAE;AAEzC,IAAA,MAAM,gBAAgB,GAAG,cAAc,CAAC,YAAY,CAAC;IAErD,OAAO,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1F;;;;"}
@@ -19,7 +19,6 @@ interface FormatDollarArgs {
19
19
  * @param round whether or not to round up non-price amounts
20
20
  */
21
21
  export declare const formatDollar: ({ num, isPrice, lessPreciseStablecoinValues, digits, round, }: FormatDollarArgs) => string;
22
- export declare const formatValue: ({ num, digits, round }: any) => string;
23
22
  /**
24
23
  * Returns a numerical amount of any token formatted in human readable string for use in template.
25
24
  *
@@ -1,6 +1,21 @@
1
- import numbro from 'numbro';
2
-
3
- /* Copied from Uniswap/v-3: https://github.com/Uniswap/v3-info/blob/master/src/utils/numbers.ts */
1
+ const dollarAbbreviations = [
2
+ { value: 1e12, suffix: 'T' },
3
+ { value: 1e9, suffix: 'B' },
4
+ { value: 1e6, suffix: 'M' },
5
+ // { value: 1e3, suffix: 'K' },
6
+ ];
7
+ const formatDollarAmount = (num, digits, round) => {
8
+ const mantissa = num > 1000 ? 2 : digits;
9
+ const sign = num < 0 ? '-' : '';
10
+ const absoluteNum = Math.abs(num);
11
+ if (round) {
12
+ const abbreviation = dollarAbbreviations.find(({ value }) => absoluteNum >= value);
13
+ if (abbreviation) {
14
+ return `${sign}$${(absoluteNum / abbreviation.value).toFixed(mantissa)}${abbreviation.suffix}`;
15
+ }
16
+ }
17
+ return `${sign}$${absoluteNum.toFixed(mantissa)}`;
18
+ };
4
19
  /**
5
20
  * Returns a USD dollar or equivalent denominated numerical value formatted
6
21
  * in human readable string for use in template.
@@ -49,16 +64,7 @@ const formatDollar = ({ num, isPrice = false, lessPreciseStablecoinValues = fals
49
64
  if (num >= 0.1 && num < 1.05) {
50
65
  return `$${num.toFixed(3)}`;
51
66
  }
52
- return numbro(num)
53
- .formatCurrency({
54
- average: round,
55
- mantissa: num > 1000 ? 2 : digits,
56
- abbreviations: {
57
- million: 'M',
58
- billion: 'B',
59
- },
60
- })
61
- .toUpperCase();
67
+ return formatDollarAmount(num, digits, round);
62
68
  }
63
69
  };
64
70
 
@@ -1 +1 @@
1
- {"version":3,"file":"formatNumbers.js","sources":["../../src/utils/formatNumbers.ts"],"sourcesContent":["/* Copied from Uniswap/v-3: https://github.com/Uniswap/v3-info/blob/master/src/utils/numbers.ts */\nimport numbro from 'numbro'\n\ninterface FormatDollarArgs {\n num: number | undefined | null\n isPrice?: boolean\n lessPreciseStablecoinValues?: boolean\n digits?: number\n round?: boolean\n}\n\n/**\n * Returns a USD dollar or equivalent denominated numerical value formatted\n * in human readable string for use in template.\n *\n * Adheres to guidelines for prices and other numbers defined here:\n * https://www.notion.so/uniswaplabs/Number-standards-fbb9f533f10e4e22820722c2f66d23c0\n * @param num numerical value denominated in USD or USD equivalent\n * @param isPrice whether the amount represents a price or not\n * @param lessPreciseStablecoinValues whether or not we should show less precise values for\n * stablecoins (around 1$ in value always) for the sake of readability\n * @param digits number of digits after the decimal for non-price amounts\n * @param round whether or not to round up non-price amounts\n */\nexport const formatDollar = ({\n num,\n isPrice = false,\n lessPreciseStablecoinValues = false,\n digits = 2,\n round = true,\n}: FormatDollarArgs): string => {\n // For USD dollar denominated prices.\n if (isPrice) {\n if (num === 0) return '$0.00'\n if (!num) return '-'\n if (num < 0.000001) {\n return `$${num.toExponential(2)}`\n }\n if ((num >= 0.000001 && num < 0.1) || num > 1000000) {\n return `$${Number(num).toPrecision(3)}`\n }\n // We only show 2 decimal places in explore table for stablecoin value ranges\n // for the sake of readability (as opposed to the usual 3 elsewhere).\n if (num >= 0.1 && num < (lessPreciseStablecoinValues ? 0.9995 : 1.05)) {\n return `$${num.toFixed(3)}`\n }\n return `$${Number(num.toFixed(2)).toLocaleString('en-US', { minimumFractionDigits: 2 })}`\n }\n // For volume dollar amounts, like market cap, total value locked, etc.\n else {\n if (num === 0) return '$0.00'\n if (!num) return '-'\n if (num < 0.000001) {\n return '$<0.000001'\n }\n if (num >= 0.000001 && num < 0.1) {\n return `$${Number(num).toPrecision(3)}`\n }\n if (num >= 0.1 && num < 1.05) {\n return `$${num.toFixed(3)}`\n }\n\n return numbro(num)\n .formatCurrency({\n average: round,\n mantissa: num > 1000 ? 2 : digits,\n abbreviations: {\n million: 'M',\n billion: 'B',\n },\n })\n .toUpperCase()\n }\n}\n\nexport const formatValue = ({ num, digits = 2, round = true }: any): string => {\n if (num === 0) return '0.00'\n if (!num) return '-'\n if (num < 0.000001) {\n return '<0.000001'\n }\n if (num >= 0.000001 && num < 0.1) {\n return `${Number(num).toPrecision(3)}`\n }\n if (num >= 0.1 && num < 1.05) {\n return `${num.toFixed(3)}`\n }\n\n return numbro(num)\n .format({\n average: round,\n mantissa: num > 1000 ? 2 : digits,\n abbreviations: {\n million: 'M',\n billion: 'B',\n },\n })\n .toUpperCase()\n}\n\n/**\n * Returns a numerical amount of any token formatted in human readable string for use in template.\n *\n * For transaction review numbers, such as token quantities, NFT price (token-denominated),\n * network fees, transaction history items. Adheres to guidelines defined here:\n * https://www.notion.so/uniswaplabs/Number-standards-fbb9f533f10e4e22820722c2f66d23c0\n * @param num numerical value denominated in any token\n * @param maxDigits the maximum number of digits that should be shown for the quantity\n */\nexport const formatTransactionAmount = (num: number | undefined | null, maxDigits = 9) => {\n if (num === 0) return '0.00'\n if (!num) return ''\n if (num < 0.00001) {\n return '<0.00001'\n }\n if (num >= 0.00001 && num < 1) {\n return `${Number(num.toFixed(5)).toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 5,\n })}`\n }\n if (num >= 1 && num < 10000) {\n return `${Number(num.toPrecision(6)).toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 6,\n })}`\n }\n if (num >= 10000 && num < 1000000) {\n return `${Number(num.toFixed(2)).toLocaleString('en-US', { minimumFractionDigits: 2 })}`\n }\n // For very large numbers, switch to scientific notation and show as much precision\n // as permissible by maxDigits param.\n if (num >= Math.pow(10, maxDigits - 1)) {\n return `${num.toExponential(maxDigits - 3)}`\n }\n return `${Number(num.toFixed(2)).toLocaleString('en-US', { minimumFractionDigits: 2 })}`\n}\n"],"names":[],"mappings":";;AAAA;AAWA;;;;;;;;;;;;AAYG;AACI,MAAM,YAAY,GAAG,CAAC,EAC3B,GAAG,EACH,OAAO,GAAG,KAAK,EACf,2BAA2B,GAAG,KAAK,EACnC,MAAM,GAAG,CAAC,EACV,KAAK,GAAG,IAAI,GACK,KAAY;;IAE7B,IAAI,OAAO,EAAE;QACX,IAAI,GAAG,KAAK,CAAC;AAAE,YAAA,OAAO,OAAO;AAC7B,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,GAAG;AACpB,QAAA,IAAI,GAAG,GAAG,QAAQ,EAAE;YAClB,OAAO,CAAA,CAAA,EAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;QACnC;AACA,QAAA,IAAI,CAAC,GAAG,IAAI,QAAQ,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,OAAO,EAAE;YACnD,OAAO,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA,CAAE;QACzC;;;AAGA,QAAA,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,2BAA2B,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE;YACrE,OAAO,CAAA,CAAA,EAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC7B;QACA,OAAO,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAA,CAAE;IAC3F;;SAEK;QACH,IAAI,GAAG,KAAK,CAAC;AAAE,YAAA,OAAO,OAAO;AAC7B,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,GAAG;AACpB,QAAA,IAAI,GAAG,GAAG,QAAQ,EAAE;AAClB,YAAA,OAAO,YAAY;QACrB;QACA,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,GAAG,GAAG,EAAE;YAChC,OAAO,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA,CAAE;QACzC;QACA,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,EAAE;YAC5B,OAAO,CAAA,CAAA,EAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC7B;QAEA,OAAO,MAAM,CAAC,GAAG;AACd,aAAA,cAAc,CAAC;AACd,YAAA,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,MAAM;AACjC,YAAA,aAAa,EAAE;AACb,gBAAA,OAAO,EAAE,GAAG;AACZ,gBAAA,OAAO,EAAE,GAAG;AACb,aAAA;SACF;AACA,aAAA,WAAW,EAAE;IAClB;AACF;;;;"}
1
+ {"version":3,"file":"formatNumbers.js","sources":["../../src/utils/formatNumbers.ts"],"sourcesContent":["interface FormatDollarArgs {\n num: number | undefined | null\n isPrice?: boolean\n lessPreciseStablecoinValues?: boolean\n digits?: number\n round?: boolean\n}\n\nconst dollarAbbreviations = [\n { value: 1e12, suffix: 'T' },\n { value: 1e9, suffix: 'B' },\n { value: 1e6, suffix: 'M' },\n // { value: 1e3, suffix: 'K' },\n]\n\nconst formatDollarAmount = (num: number, digits: number, round: boolean): string => {\n const mantissa = num > 1000 ? 2 : digits\n const sign = num < 0 ? '-' : ''\n const absoluteNum = Math.abs(num)\n\n if (round) {\n const abbreviation = dollarAbbreviations.find(({ value }) => absoluteNum >= value)\n\n if (abbreviation) {\n return `${sign}$${(absoluteNum / abbreviation.value).toFixed(mantissa)}${abbreviation.suffix}`\n }\n }\n\n return `${sign}$${absoluteNum.toFixed(mantissa)}`\n}\n\n/**\n * Returns a USD dollar or equivalent denominated numerical value formatted\n * in human readable string for use in template.\n *\n * Adheres to guidelines for prices and other numbers defined here:\n * https://www.notion.so/uniswaplabs/Number-standards-fbb9f533f10e4e22820722c2f66d23c0\n * @param num numerical value denominated in USD or USD equivalent\n * @param isPrice whether the amount represents a price or not\n * @param lessPreciseStablecoinValues whether or not we should show less precise values for\n * stablecoins (around 1$ in value always) for the sake of readability\n * @param digits number of digits after the decimal for non-price amounts\n * @param round whether or not to round up non-price amounts\n */\nexport const formatDollar = ({\n num,\n isPrice = false,\n lessPreciseStablecoinValues = false,\n digits = 2,\n round = true,\n}: FormatDollarArgs): string => {\n // For USD dollar denominated prices.\n if (isPrice) {\n if (num === 0) return '$0.00'\n if (!num) return '-'\n if (num < 0.000001) {\n return `$${num.toExponential(2)}`\n }\n if ((num >= 0.000001 && num < 0.1) || num > 1000000) {\n return `$${Number(num).toPrecision(3)}`\n }\n // We only show 2 decimal places in explore table for stablecoin value ranges\n // for the sake of readability (as opposed to the usual 3 elsewhere).\n if (num >= 0.1 && num < (lessPreciseStablecoinValues ? 0.9995 : 1.05)) {\n return `$${num.toFixed(3)}`\n }\n return `$${Number(num.toFixed(2)).toLocaleString('en-US', { minimumFractionDigits: 2 })}`\n }\n // For volume dollar amounts, like market cap, total value locked, etc.\n else {\n if (num === 0) return '$0.00'\n if (!num) return '-'\n if (num < 0.000001) {\n return '$<0.000001'\n }\n if (num >= 0.000001 && num < 0.1) {\n return `$${Number(num).toPrecision(3)}`\n }\n if (num >= 0.1 && num < 1.05) {\n return `$${num.toFixed(3)}`\n }\n\n return formatDollarAmount(num, digits, round)\n }\n}\n\n/**\n * Returns a numerical amount of any token formatted in human readable string for use in template.\n *\n * For transaction review numbers, such as token quantities, NFT price (token-denominated),\n * network fees, transaction history items. Adheres to guidelines defined here:\n * https://www.notion.so/uniswaplabs/Number-standards-fbb9f533f10e4e22820722c2f66d23c0\n * @param num numerical value denominated in any token\n * @param maxDigits the maximum number of digits that should be shown for the quantity\n */\nexport const formatTransactionAmount = (num: number | undefined | null, maxDigits = 9) => {\n if (num === 0) return '0.00'\n if (!num) return ''\n if (num < 0.00001) {\n return '<0.00001'\n }\n if (num >= 0.00001 && num < 1) {\n return `${Number(num.toFixed(5)).toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 5,\n })}`\n }\n if (num >= 1 && num < 10000) {\n return `${Number(num.toPrecision(6)).toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 6,\n })}`\n }\n if (num >= 10000 && num < 1000000) {\n return `${Number(num.toFixed(2)).toLocaleString('en-US', { minimumFractionDigits: 2 })}`\n }\n // For very large numbers, switch to scientific notation and show as much precision\n // as permissible by maxDigits param.\n if (num >= Math.pow(10, maxDigits - 1)) {\n return `${num.toExponential(maxDigits - 3)}`\n }\n return `${Number(num.toFixed(2)).toLocaleString('en-US', { minimumFractionDigits: 2 })}`\n}\n"],"names":[],"mappings":"AAQA,MAAM,mBAAmB,GAAG;AAC1B,IAAA,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AAC5B,IAAA,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;AAC3B,IAAA,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;;CAE5B;AAED,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAE,MAAc,EAAE,KAAc,KAAY;AACjF,IAAA,MAAM,QAAQ,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,MAAM;AACxC,IAAA,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAEjC,IAAI,KAAK,EAAE;AACT,QAAA,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,WAAW,IAAI,KAAK,CAAC;QAElF,IAAI,YAAY,EAAE;YAChB,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,CAAC,WAAW,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA,EAAG,YAAY,CAAC,MAAM,EAAE;QAChG;IACF;IAEA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA,CAAE;AACnD,CAAC;AAED;;;;;;;;;;;;AAYG;AACI,MAAM,YAAY,GAAG,CAAC,EAC3B,GAAG,EACH,OAAO,GAAG,KAAK,EACf,2BAA2B,GAAG,KAAK,EACnC,MAAM,GAAG,CAAC,EACV,KAAK,GAAG,IAAI,GACK,KAAY;;IAE7B,IAAI,OAAO,EAAE;QACX,IAAI,GAAG,KAAK,CAAC;AAAE,YAAA,OAAO,OAAO;AAC7B,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,GAAG;AACpB,QAAA,IAAI,GAAG,GAAG,QAAQ,EAAE;YAClB,OAAO,CAAA,CAAA,EAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;QACnC;AACA,QAAA,IAAI,CAAC,GAAG,IAAI,QAAQ,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,OAAO,EAAE;YACnD,OAAO,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA,CAAE;QACzC;;;AAGA,QAAA,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,2BAA2B,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE;YACrE,OAAO,CAAA,CAAA,EAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC7B;QACA,OAAO,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAA,CAAE;IAC3F;;SAEK;QACH,IAAI,GAAG,KAAK,CAAC;AAAE,YAAA,OAAO,OAAO;AAC7B,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,GAAG;AACpB,QAAA,IAAI,GAAG,GAAG,QAAQ,EAAE;AAClB,YAAA,OAAO,YAAY;QACrB;QACA,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,GAAG,GAAG,EAAE;YAChC,OAAO,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA,CAAE;QACzC;QACA,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,EAAE;YAC5B,OAAO,CAAA,CAAA,EAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC7B;QAEA,OAAO,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC;IAC/C;AACF;;;;"}
@@ -1,33 +1,49 @@
1
- import { Interface } from '@ethersproject/abi';
1
+ import { createPublicClient, http, encodeFunctionData, decodeFunctionResult } from 'viem';
2
2
  import multicallV2Abi from '../config/abi/multicallv2.json.js';
3
- import { ethers } from 'ethers';
4
- import { chunk, flatten } from 'lodash';
5
3
  import { getRPC } from '../config/constants/networks.js';
6
4
  import { MULTICALL_V2 } from '../config/constants/addresses.js';
5
+ import { ChainId } from '@ape.swap/apeswap-lists';
6
+ import { chunk, flatten } from 'lodash';
7
7
 
8
+ // Wraps decoded result in an array when the function has a single output,
9
+ // matching ethers v5 Result behavior so consuming code doesn't need to change.
10
+ // Multi-output functions already return an array from viem, so they're left as-is.
11
+ const decodeResult = (abi, functionName, data) => {
12
+ const decoded = decodeFunctionResult({ abi, functionName, data });
13
+ const fn = abi.find((item) => item.type === 'function' && item.name === functionName);
14
+ return fn?.outputs?.length === 1 ? [decoded] : decoded;
15
+ };
8
16
  // This is the legacy multicall
9
17
  // Try to use multicall hooks
10
18
  const multicall = async (chainId, abi, calls, batch, batchSize) => {
11
19
  try {
20
+ if (chainId === ChainId.SOL)
21
+ return;
12
22
  const multicallAddress = MULTICALL_V2[chainId];
13
- const provider = new ethers.providers.JsonRpcProvider(getRPC(chainId), chainId);
14
- const multi = new ethers.Contract(multicallAddress, multicallV2Abi, provider);
15
- const itf = new Interface(abi);
16
- const calldata = calls.map((call) => [call.address.toLowerCase(), itf.encodeFunctionData(call.name, call.params)]);
23
+ const client = createPublicClient({
24
+ transport: http(getRPC(chainId)),
25
+ });
26
+ const calldata = calls.map((call) => ({
27
+ target: call.address.toLowerCase(),
28
+ callData: encodeFunctionData({ abi: abi, functionName: call.name, args: call.params }),
29
+ }));
30
+ const aggregate = async (calldataChunk, callsChunk) => {
31
+ const [, returnData] = (await client.readContract({
32
+ address: multicallAddress,
33
+ abi: multicallV2Abi,
34
+ functionName: 'aggregate',
35
+ args: [calldataChunk],
36
+ }));
37
+ return returnData.map((data, i) => decodeResult(abi, callsChunk[i].name, data));
38
+ };
17
39
  if (batch) {
18
- const chunkedCalls = chunk(calldata, batchSize);
19
- const chunkedCallNames = chunk(calls, batchSize);
20
- const chunkedData = chunkedCalls.flatMap(async (chunkedCallSet, i) => {
21
- const { returnData } = await multi.aggregate(chunkedCallSet);
22
- return returnData.map((call, j) => itf.decodeFunctionResult(chunkedCallNames[i][j].name, call));
23
- });
24
- const resolveCall = await Promise.all(chunkedData);
25
- const flattenCalls = flatten(resolveCall);
26
- return flattenCalls;
40
+ const chunkedCalldata = chunk(calldata, batchSize);
41
+ const chunkedCalls = chunk(calls, batchSize);
42
+ const results = await Promise.all(chunkedCalls.map((callsChunk, i) => aggregate(chunkedCalldata[i], callsChunk)));
43
+ return flatten(results);
27
44
  }
28
45
  else {
29
- const { returnData } = await multi.aggregate(calldata);
30
- return returnData.map((call, i) => itf.decodeFunctionResult(calls[i].name, call));
46
+ return aggregate(calldata, calls);
31
47
  }
32
48
  }
33
49
  catch (e) {