@ape.swap/bonds-sdk 5.1.48 → 5.1.49-test-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/README.md +14 -7
  2. package/dist/components/ConnectAptosWalletButton/ConnectAptosWalletButton.d.ts +4 -0
  3. package/dist/components/ConnectAptosWalletButton/ConnectAptosWalletButton.js +39 -0
  4. package/dist/components/ConnectAptosWalletButton/ConnectAptosWalletButton.js.map +1 -0
  5. package/dist/components/ConnectSuiWalletButton/ConnectSuiWalletButton.d.ts +5 -0
  6. package/dist/components/ConnectoToVmBanners/ConnectToAptosBanner.d.ts +1 -0
  7. package/dist/components/ConnectoToVmBanners/ConnectToAptosBanner.js +49 -0
  8. package/dist/components/ConnectoToVmBanners/ConnectToAptosBanner.js.map +1 -0
  9. package/dist/components/ConnectoToVmBanners/ConnectToEvmBanner.js +11 -15
  10. package/dist/components/ConnectoToVmBanners/ConnectToEvmBanner.js.map +1 -1
  11. package/dist/components/ConnectoToVmBanners/ConnectToSolanaBanner.js +13 -17
  12. package/dist/components/ConnectoToVmBanners/ConnectToSolanaBanner.js.map +1 -1
  13. package/dist/components/ConnectoToVmBanners/ConnectToSuiBanner.d.ts +1 -0
  14. package/dist/components/ConnectoToVmBanners/ConnectToSuiBanner.js +44 -0
  15. package/dist/components/ConnectoToVmBanners/ConnectToSuiBanner.js.map +1 -0
  16. package/dist/components/TokenInfoAndName/index.js +2 -0
  17. package/dist/components/TokenInfoAndName/index.js.map +1 -1
  18. package/dist/components/TokenSelectorPanel/index.js +11 -1
  19. package/dist/components/TokenSelectorPanel/index.js.map +1 -1
  20. package/dist/components/Tooltip/Tooltip.js +11 -3
  21. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  22. package/dist/components/uikit-sdk/Svg/index.js +6 -0
  23. package/dist/components/uikit-sdk/Svg/index.js.map +1 -1
  24. package/dist/components/uikit-sdk/Svg/tokens/APTOS.d.ts +4 -0
  25. package/dist/components/uikit-sdk/Svg/tokens/APTOS.js +8 -0
  26. package/dist/components/uikit-sdk/Svg/tokens/APTOS.js.map +1 -0
  27. package/dist/components/uikit-sdk/Svg/tokens/SUI.d.ts +4 -0
  28. package/dist/components/uikit-sdk/Svg/tokens/SUI.js +8 -0
  29. package/dist/components/uikit-sdk/Svg/tokens/SUI.js.map +1 -0
  30. package/dist/components/uikit-sdk/Svg/types.d.ts +2 -0
  31. package/dist/components/uikit-sdk/Svg/types.js +2 -0
  32. package/dist/components/uikit-sdk/Svg/types.js.map +1 -1
  33. package/dist/components/uikit-sdk/TokenImage/index.js +15 -3
  34. package/dist/components/uikit-sdk/TokenImage/index.js.map +1 -1
  35. package/dist/config/constants/addresses.d.ts +1 -1
  36. package/dist/config/constants/addresses.js +2 -0
  37. package/dist/config/constants/addresses.js.map +1 -1
  38. package/dist/config/constants/aptosZapTokens.d.ts +23 -0
  39. package/dist/config/constants/aptosZapTokens.js +66 -0
  40. package/dist/config/constants/aptosZapTokens.js.map +1 -0
  41. package/dist/config/constants/chains.d.ts +3 -1
  42. package/dist/config/constants/chains.js +12 -0
  43. package/dist/config/constants/chains.js.map +1 -1
  44. package/dist/config/constants/networks.js +9 -0
  45. package/dist/config/constants/networks.js.map +1 -1
  46. package/dist/config/constants/queryKeys.js +23 -1
  47. package/dist/config/constants/queryKeys.js.map +1 -1
  48. package/dist/config/constants/suiZapTokens.d.ts +14 -0
  49. package/dist/config/constants/suiZapTokens.js +41 -0
  50. package/dist/config/constants/suiZapTokens.js.map +1 -0
  51. package/dist/config/constants/tokens.js +48 -0
  52. package/dist/config/constants/tokens.js.map +1 -0
  53. package/dist/config/constants/variables.d.ts +1 -1
  54. package/dist/config/constants/variables.js +2 -0
  55. package/dist/config/constants/variables.js.map +1 -1
  56. package/dist/constants/aptosConstants.d.ts +20 -0
  57. package/dist/constants/aptosConstants.js +78 -0
  58. package/dist/constants/aptosConstants.js.map +1 -0
  59. package/dist/constants/suiConstants.d.ts +18 -0
  60. package/dist/constants/suiConstants.js +61 -0
  61. package/dist/constants/suiConstants.js.map +1 -0
  62. package/dist/hooks/accounts/useAPTAccount.d.ts +30 -0
  63. package/dist/hooks/accounts/useAPTAccount.js +39 -0
  64. package/dist/hooks/accounts/useAPTAccount.js.map +1 -0
  65. package/dist/hooks/accounts/useSUIAccount.d.ts +7 -0
  66. package/dist/hooks/accounts/useSUIAccount.js +46 -0
  67. package/dist/hooks/accounts/useSUIAccount.js.map +1 -0
  68. package/dist/hooks/useMonitorTx.d.ts +2 -21
  69. package/dist/hooks/useMonitorTx.js.map +1 -1
  70. package/dist/hooks/useSortedZapList.js +7 -2
  71. package/dist/hooks/useSortedZapList.js.map +1 -1
  72. package/dist/hooks/useTokenFromZapList.js +1 -0
  73. package/dist/hooks/useTokenFromZapList.js.map +1 -1
  74. package/dist/providers/AptosWalletProvider.d.ts +5 -0
  75. package/dist/providers/SuiWalletProvider.d.ts +5 -0
  76. package/dist/state/balance/useCurrencyBalance.js +9 -0
  77. package/dist/state/balance/useCurrencyBalance.js.map +1 -1
  78. package/dist/state/balance/useCurrencyBalanceAptos.d.ts +14 -0
  79. package/dist/state/balance/useCurrencyBalanceAptos.js +75 -0
  80. package/dist/state/balance/useCurrencyBalanceAptos.js.map +1 -0
  81. package/dist/state/balance/useCurrencyBalanceSui.d.ts +14 -0
  82. package/dist/state/balance/useCurrencyBalanceSui.js +42 -0
  83. package/dist/state/balance/useCurrencyBalanceSui.js.map +1 -0
  84. package/dist/state/balance/useUserTokensBalance.js +19 -1
  85. package/dist/state/balance/useUserTokensBalance.js.map +1 -1
  86. package/dist/state/bonds/aptosBondsConfig.d.ts +4 -0
  87. package/dist/state/bonds/aptosBondsConfig.js +114 -0
  88. package/dist/state/bonds/aptosBondsConfig.js.map +1 -0
  89. package/dist/state/bonds/fetchBillsUserAptos.d.ts +4 -0
  90. package/dist/state/bonds/fetchBillsUserAptos.js +187 -0
  91. package/dist/state/bonds/fetchBillsUserAptos.js.map +1 -0
  92. package/dist/state/bonds/fetchBillsUserSui.d.ts +4 -0
  93. package/dist/state/bonds/fetchBillsUserSui.js +287 -0
  94. package/dist/state/bonds/fetchBillsUserSui.js.map +1 -0
  95. package/dist/state/bonds/fetchBondsDataAptos.d.ts +12 -0
  96. package/dist/state/bonds/fetchBondsDataAptos.js +114 -0
  97. package/dist/state/bonds/fetchBondsDataAptos.js.map +1 -0
  98. package/dist/state/bonds/fetchBondsDataSui.d.ts +13 -0
  99. package/dist/state/bonds/fetchBondsDataSui.js +205 -0
  100. package/dist/state/bonds/fetchBondsDataSui.js.map +1 -0
  101. package/dist/state/bonds/suiBondsConfig.d.ts +4 -0
  102. package/dist/state/bonds/suiBondsConfig.js +113 -0
  103. package/dist/state/bonds/suiBondsConfig.js.map +1 -0
  104. package/dist/state/bonds/useBondsData.js +32 -8
  105. package/dist/state/bonds/useBondsData.js.map +1 -1
  106. package/dist/state/bonds/useBondsList.js +15 -2
  107. package/dist/state/bonds/useBondsList.js.map +1 -1
  108. package/dist/state/bonds/useUserBonds.d.ts +1 -1
  109. package/dist/state/bonds/useUserBonds.js +34 -12
  110. package/dist/state/bonds/useUserBonds.js.map +1 -1
  111. package/dist/state/bonds/utils.js +8 -0
  112. package/dist/state/bonds/utils.js.map +1 -1
  113. package/dist/state/price/useCurrencyPrice.js +2 -1
  114. package/dist/state/price/useCurrencyPrice.js.map +1 -1
  115. package/dist/state/tiers/useTierPoints.js +1 -4
  116. package/dist/state/tiers/useTierPoints.js.map +1 -1
  117. package/dist/state/tokenPrices/useTokenPrices.js +16 -1
  118. package/dist/state/tokenPrices/useTokenPrices.js.map +1 -1
  119. package/dist/state/useSDKConfig.d.ts +4 -0
  120. package/dist/state/useSDKConfig.js.map +1 -1
  121. package/dist/state/zap/useAptosZapQuote.d.ts +28 -0
  122. package/dist/state/zap/useAptosZapQuote.js +83 -0
  123. package/dist/state/zap/useAptosZapQuote.js.map +1 -0
  124. package/dist/state/zap/useSoulZapBondQuote.js +1 -0
  125. package/dist/state/zap/useSoulZapBondQuote.js.map +1 -1
  126. package/dist/state/zap/useSuiZapQuote.d.ts +24 -0
  127. package/dist/state/zap/useSuiZapQuote.js +119 -0
  128. package/dist/state/zap/useSuiZapQuote.js.map +1 -0
  129. package/dist/types/aptosBonds.d.ts +152 -0
  130. package/dist/types/yourbonds.d.ts +3 -9
  131. package/dist/utils/aptosHelpers.d.ts +80 -0
  132. package/dist/utils/aptosHelpers.js +202 -0
  133. package/dist/utils/aptosHelpers.js.map +1 -0
  134. package/dist/utils/getNativeTicker.js +1 -0
  135. package/dist/utils/getNativeTicker.js.map +1 -1
  136. package/dist/utils/suiHelpers.d.ts +6 -0
  137. package/dist/utils/suiHelpers.js +106 -0
  138. package/dist/utils/suiHelpers.js.map +1 -0
  139. package/dist/views/Bonds/components/BondRows/ActiveBondRows.js +8 -2
  140. package/dist/views/Bonds/components/BondRows/ActiveBondRows.js.map +1 -1
  141. package/dist/views/Bonds/components/BondRows/ModalHandler.js +18 -1
  142. package/dist/views/Bonds/components/BondRows/ModalHandler.js.map +1 -1
  143. package/dist/views/Bonds/components/ChainBanner/ChainBanner.js +29 -0
  144. package/dist/views/Bonds/components/ChainBanner/ChainBanner.js.map +1 -1
  145. package/dist/views/BuyBond/BuyBondModal.js +4 -1
  146. package/dist/views/BuyBond/BuyBondModal.js.map +1 -1
  147. package/dist/views/BuyBond/BuyComponentAptos.d.ts +10 -0
  148. package/dist/views/BuyBond/BuyComponentAptos.js +349 -0
  149. package/dist/views/BuyBond/BuyComponentAptos.js.map +1 -0
  150. package/dist/views/BuyBond/BuyComponentSui.d.ts +10 -0
  151. package/dist/views/BuyBond/BuyComponentSui.js +459 -0
  152. package/dist/views/BuyBond/BuyComponentSui.js.map +1 -0
  153. package/dist/views/BuyBond/components/Estimations.js +2 -1
  154. package/dist/views/BuyBond/components/Estimations.js.map +1 -1
  155. package/dist/views/BuyBond/components/PointsLeftForNextTier/PointsLeftForNextTier.js +8 -23
  156. package/dist/views/BuyBond/components/PointsLeftForNextTier/PointsLeftForNextTier.js.map +1 -1
  157. package/dist/views/YourBonds/YourBonds.js +19 -2
  158. package/dist/views/YourBonds/YourBonds.js.map +1 -1
  159. package/dist/views/YourBonds/components/ClaimAll/ClaimAllModal.js +139 -5
  160. package/dist/views/YourBonds/components/ClaimAll/ClaimAllModal.js.map +1 -1
  161. package/dist/views/YourBonds/components/ClaimAll/index.js +6 -2
  162. package/dist/views/YourBonds/components/ClaimAll/index.js.map +1 -1
  163. package/dist/views/YourBonds/components/UserBondRow/UserBondRowAptos.d.ts +6 -0
  164. package/dist/views/YourBonds/components/UserBondRow/UserBondRowAptos.js +109 -0
  165. package/dist/views/YourBonds/components/UserBondRow/UserBondRowAptos.js.map +1 -0
  166. package/dist/views/YourBonds/components/UserBondRow/UserBondRowSui.d.ts +6 -0
  167. package/dist/views/YourBonds/components/UserBondRow/UserBondRowSui.js +126 -0
  168. package/dist/views/YourBonds/components/UserBondRow/UserBondRowSui.js.map +1 -0
  169. package/dist/views/YourBonds/components/UserBondRow/index.d.ts +2 -0
  170. package/dist/views/YourBondsModal/YourBondsModal.js +3 -1
  171. package/dist/views/YourBondsModal/YourBondsModal.js.map +1 -1
  172. package/dist/views/YourBondsModal/components/Actions/ActionsAptos.d.ts +6 -0
  173. package/dist/views/YourBondsModal/components/Actions/ActionsAptos.js +96 -0
  174. package/dist/views/YourBondsModal/components/Actions/ActionsAptos.js.map +1 -0
  175. package/dist/views/YourBondsModal/components/Actions/ActionsSui.d.ts +6 -0
  176. package/dist/views/YourBondsModal/components/Actions/ActionsSui.js +115 -0
  177. package/dist/views/YourBondsModal/components/Actions/ActionsSui.js.map +1 -0
  178. package/dist/views/YourBondsModal/components/TransferBondModal/TransferActionAptos.d.ts +8 -0
  179. package/dist/views/YourBondsModal/components/TransferBondModal/TransferActionAptos.js +18 -0
  180. package/dist/views/YourBondsModal/components/TransferBondModal/TransferActionAptos.js.map +1 -0
  181. package/dist/views/YourBondsModal/components/TransferBondModal/index.js +2 -1
  182. package/dist/views/YourBondsModal/components/TransferBondModal/index.js.map +1 -1
  183. package/package.json +7 -4
@@ -0,0 +1,39 @@
1
+ import { useWallet } from '@aptos-labs/wallet-adapter-react';
2
+ import { useSDKConfig } from '../../state/useSDKConfig.js';
3
+ import { safeExtractAddress } from '../../utils/aptosHelpers.js';
4
+
5
+ // ---------------------------------------------------------------------------
6
+ // useAPTAccount — Aptos account hook
7
+ // ---------------------------------------------------------------------------
8
+ //
9
+ // Thin wrapper around `@aptos-labs/wallet-adapter-react::useWallet`, mirroring
10
+ // the structure of `useSOLAccount`. Works in two modes:
11
+ //
12
+ // 1. Wallet-connected — returns the full wallet context state (account,
13
+ // connect, disconnect, signAndSubmitTransaction, wallets, etc.) from the
14
+ // adapter.
15
+ // 2. Headless / SSR — the consumer can inject `aptosAddress` through
16
+ // `SDKProps`; the hook returns a minimal object with just that address,
17
+ // overriding anything the wallet adapter might have set.
18
+ //
19
+ // The default `WalletContext` value from the adapter is `{ connected: false }`
20
+ // so calling `useWallet()` outside of `AptosWalletAdapterProvider` is safe —
21
+ // we just get undefined fields back. That keeps the hook callable from
22
+ // `useUserBonds` without forcing every SDK consumer to mount the Aptos
23
+ // provider when they do not use Aptos.
24
+ const useAPTAccount = () => {
25
+ const wallet = useWallet();
26
+ const { aptosAddress } = useSDKConfig();
27
+ // Prefer the injected SSR/headless address over the wallet adapter's.
28
+ // `wallet.account?.address` is an `AccountAddress` instance, so we run it
29
+ // through `safeExtractAddress` to get a canonical `0x…` string.
30
+ const adapterAddress = safeExtractAddress(wallet.account?.address);
31
+ const address = aptosAddress ?? adapterAddress;
32
+ return {
33
+ ...wallet,
34
+ address,
35
+ };
36
+ };
37
+
38
+ export { useAPTAccount as default };
39
+ //# sourceMappingURL=useAPTAccount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAPTAccount.js","sources":["../../../src/hooks/accounts/useAPTAccount.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\n// useAPTAccount — Aptos account hook\n// ---------------------------------------------------------------------------\n//\n// Thin wrapper around `@aptos-labs/wallet-adapter-react::useWallet`, mirroring\n// the structure of `useSOLAccount`. Works in two modes:\n//\n// 1. Wallet-connected — returns the full wallet context state (account,\n// connect, disconnect, signAndSubmitTransaction, wallets, etc.) from the\n// adapter.\n// 2. Headless / SSR — the consumer can inject `aptosAddress` through\n// `SDKProps`; the hook returns a minimal object with just that address,\n// overriding anything the wallet adapter might have set.\n//\n// The default `WalletContext` value from the adapter is `{ connected: false }`\n// so calling `useWallet()` outside of `AptosWalletAdapterProvider` is safe —\n// we just get undefined fields back. That keeps the hook callable from\n// `useUserBonds` without forcing every SDK consumer to mount the Aptos\n// provider when they do not use Aptos.\n\nimport { useWallet } from '@aptos-labs/wallet-adapter-react'\nimport { useSDKConfig } from '../../state/useSDKConfig'\nimport { safeExtractAddress } from '../../utils/aptosHelpers'\n\nconst useAPTAccount = () => {\n const wallet = useWallet()\n const { aptosAddress } = useSDKConfig()\n\n // Prefer the injected SSR/headless address over the wallet adapter's.\n // `wallet.account?.address` is an `AccountAddress` instance, so we run it\n // through `safeExtractAddress` to get a canonical `0x…` string.\n const adapterAddress = safeExtractAddress(wallet.account?.address)\n const address = aptosAddress ?? adapterAddress\n\n return {\n ...wallet,\n address,\n }\n}\n\nexport default useAPTAccount\n"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA,MAAM,aAAa,GAAG,MAAK;AACzB,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE;;;;IAKvC,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC;AAClE,IAAA,MAAM,OAAO,GAAG,YAAY,IAAI,cAAc;IAE9C,OAAO;AACL,QAAA,GAAG,MAAM;QACT,OAAO;KACR;AACH;;;;"}
@@ -0,0 +1,7 @@
1
+ declare const useSUIAccount: () => {
2
+ address: string | null;
3
+ signAndExecuteTransaction: import("@tanstack/react-query").UseMutateAsyncFunction<import("@mysten/wallet-standard").SuiSignAndExecuteTransactionOutput, Error | import("@mysten/dapp-kit/dist/cjs/errors/walletErrors").WalletFeatureNotSupportedError | import("@mysten/dapp-kit/dist/cjs/errors/walletErrors").WalletNoAccountSelectedError | import("@mysten/dapp-kit/dist/cjs/errors/walletErrors").WalletNotConnectedError, Omit<Omit<import("@mysten/wallet-standard").SuiSignAndExecuteTransactionInput, "transaction">, "account" | "chain"> & Partial<Omit<import("@mysten/wallet-standard").SuiSignAndExecuteTransactionInput, "transaction">> & {
4
+ transaction: import("@mysten/sui/dist/cjs/transactions").Transaction | string;
5
+ }, unknown> | null;
6
+ };
7
+ export default useSUIAccount;
@@ -0,0 +1,46 @@
1
+ import { useSignAndExecuteTransaction, useCurrentAccount } from '@mysten/dapp-kit';
2
+ import { useSDKConfig } from '../../state/useSDKConfig.js';
3
+
4
+ // ---------------------------------------------------------------------------
5
+ // useSUIAccount — Sui account hook
6
+ // ---------------------------------------------------------------------------
7
+ //
8
+ // Thin wrapper around `@mysten/dapp-kit` hooks, mirroring the structure of
9
+ // `useAPTAccount`. Works in two modes:
10
+ //
11
+ // 1. Wallet-connected — uses `useCurrentAccount` for the address and
12
+ // `useSignAndExecuteTransaction` for signing.
13
+ // 2. Headless / SSR — the consumer can inject `suiAddress` through
14
+ // `SDKProps`; the hook returns a minimal object with just that address.
15
+ //
16
+ // The dapp-kit hooks throw if called outside of their provider, so we wrap
17
+ // them in try-catch to keep the hook callable from shared code paths (e.g.
18
+ // `useUserBonds`) without forcing every SDK consumer to mount the Sui
19
+ // provider when they do not use Sui.
20
+ /**
21
+ * Safely call a hook that may throw if its provider is not mounted.
22
+ */
23
+ const safeUseHook = (hookFn, fallback) => {
24
+ try {
25
+ return hookFn();
26
+ }
27
+ catch {
28
+ return fallback;
29
+ }
30
+ };
31
+ const useSUIAccount = () => {
32
+ const { suiAddress } = useSDKConfig();
33
+ const currentAccount = safeUseHook(useCurrentAccount, null);
34
+ const txResult = safeUseHook(useSignAndExecuteTransaction, null);
35
+ const signAndExecuteTransaction = txResult?.mutateAsync ?? null;
36
+ // Prefer the injected SSR/headless address over the wallet adapter's.
37
+ const adapterAddress = currentAccount?.address ?? null;
38
+ const address = suiAddress ?? adapterAddress;
39
+ return {
40
+ address,
41
+ signAndExecuteTransaction,
42
+ };
43
+ };
44
+
45
+ export { useSUIAccount as default };
46
+ //# sourceMappingURL=useSUIAccount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSUIAccount.js","sources":["../../../src/hooks/accounts/useSUIAccount.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\n// useSUIAccount — Sui account hook\n// ---------------------------------------------------------------------------\n//\n// Thin wrapper around `@mysten/dapp-kit` hooks, mirroring the structure of\n// `useAPTAccount`. Works in two modes:\n//\n// 1. Wallet-connected — uses `useCurrentAccount` for the address and\n// `useSignAndExecuteTransaction` for signing.\n// 2. Headless / SSR — the consumer can inject `suiAddress` through\n// `SDKProps`; the hook returns a minimal object with just that address.\n//\n// The dapp-kit hooks throw if called outside of their provider, so we wrap\n// them in try-catch to keep the hook callable from shared code paths (e.g.\n// `useUserBonds`) without forcing every SDK consumer to mount the Sui\n// provider when they do not use Sui.\n\nimport { useCurrentAccount, useSignAndExecuteTransaction } from '@mysten/dapp-kit'\nimport { useSDKConfig } from '../../state/useSDKConfig'\n\n/**\n * Safely call a hook that may throw if its provider is not mounted.\n */\nconst safeUseHook = <T>(hookFn: () => T, fallback: T): T => {\n try {\n return hookFn()\n } catch {\n return fallback\n }\n}\n\nconst useSUIAccount = () => {\n const { suiAddress } = useSDKConfig()\n\n const currentAccount = safeUseHook(useCurrentAccount, null)\n const txResult = safeUseHook(useSignAndExecuteTransaction, null)\n\n const signAndExecuteTransaction = txResult?.mutateAsync ?? null\n\n // Prefer the injected SSR/headless address over the wallet adapter's.\n const adapterAddress = currentAccount?.address ?? null\n const address = suiAddress ?? adapterAddress\n\n return {\n address,\n signAndExecuteTransaction,\n }\n}\n\nexport default useSUIAccount\n"],"names":[],"mappings":";;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AAEG;AACH,MAAM,WAAW,GAAG,CAAI,MAAe,EAAE,QAAW,KAAO;AACzD,IAAA,IAAI;QACF,OAAO,MAAM,EAAE;IACjB;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,QAAQ;IACjB;AACF,CAAC;AAED,MAAM,aAAa,GAAG,MAAK;AACzB,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE;IAErC,MAAM,cAAc,GAAG,WAAW,CAAC,iBAAiB,EAAE,IAAI,CAAC;IAC3D,MAAM,QAAQ,GAAG,WAAW,CAAC,4BAA4B,EAAE,IAAI,CAAC;AAEhE,IAAA,MAAM,yBAAyB,GAAG,QAAQ,EAAE,WAAW,IAAI,IAAI;;AAG/D,IAAA,MAAM,cAAc,GAAG,cAAc,EAAE,OAAO,IAAI,IAAI;AACtD,IAAA,MAAM,OAAO,GAAG,UAAU,IAAI,cAAc;IAE5C,OAAO;QACL,OAAO;QACP,yBAAyB;KAC1B;AACH;;;;"}
@@ -1,26 +1,7 @@
1
1
  import { ChainId } from '@ape.swap/apeswap-lists';
2
+ import type { TransactionReceipt } from 'viem';
2
3
  export declare const useMonitorTx: (txHash?: string | null, chainId?: ChainId) => {
3
4
  isLoading: boolean;
4
5
  isSuccess: boolean;
5
- data: {
6
- blobGasPrice?: bigint | undefined;
7
- blobGasUsed?: bigint | undefined;
8
- blockHash: import("viem").Hash;
9
- blockNumber: bigint;
10
- blockTimestamp?: bigint | undefined;
11
- contractAddress: import("abitype").Address | null | undefined;
12
- cumulativeGasUsed: bigint;
13
- effectiveGasPrice: bigint;
14
- from: import("abitype").Address;
15
- gasUsed: bigint;
16
- logs: import("viem").Log<bigint, number, false>[];
17
- logsBloom: import("viem").Hex;
18
- root?: `0x${string}` | undefined;
19
- status: "success" | "reverted";
20
- to: import("abitype").Address | null;
21
- transactionHash: import("viem").Hash;
22
- transactionIndex: number;
23
- type: import("viem").TransactionType;
24
- chainId: number;
25
- } | undefined;
6
+ data: TransactionReceipt | undefined;
26
7
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useMonitorTx.js","sources":["../../src/hooks/useMonitorTx.ts"],"sourcesContent":["import { ChainId } from '@ape.swap/apeswap-lists'\nimport { useWaitForTransactionReceipt } from 'wagmi'\nimport { useEffect } from 'react'\nimport { usePopups } from '../state/popups/usePopups'\n\nexport const useMonitorTx = (txHash?: string | null, chainId?: ChainId) => {\n const { addToastError, addToastSuccess } = usePopups()\n const transactionReceipt = useWaitForTransactionReceipt({\n confirmations: 0,\n chainId: chainId,\n hash: txHash as `0x${string}`,\n })\n const { isLoading, isSuccess: isConfirmed, error, isError, data } = transactionReceipt ?? {}\n\n useEffect(() => {\n if (txHash && isError) {\n addToastError(error.message, txHash, chainId)\n }\n if (txHash && isConfirmed) {\n addToastSuccess(txHash, chainId)\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [txHash, isError, isConfirmed, isLoading])\n\n return { isLoading: txHash ? isLoading : false, isSuccess: txHash ? isConfirmed : false, data }\n}\n"],"names":[],"mappings":";;;;MAKa,YAAY,GAAG,CAAC,MAAsB,EAAE,OAAiB,KAAI;IACxE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,SAAS,EAAE;IACtD,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AACtD,QAAA,aAAa,EAAE,CAAC;AAChB,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,IAAI,EAAE,MAAuB;AAC9B,KAAA,CAAC;AACF,IAAA,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,kBAAkB,IAAI,EAAE;IAE5F,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,MAAM,IAAI,OAAO,EAAE;YACrB,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;QAC/C;AACA,QAAA,IAAI,MAAM,IAAI,WAAW,EAAE;AACzB,YAAA,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC;QAClC;;IAEF,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,KAAK,EAAE,IAAI,EAAE;AACjG;;;;"}
1
+ {"version":3,"file":"useMonitorTx.js","sources":["../../src/hooks/useMonitorTx.ts"],"sourcesContent":["import { ChainId } from '@ape.swap/apeswap-lists'\nimport { useWaitForTransactionReceipt } from 'wagmi'\nimport { useEffect } from 'react'\nimport { usePopups } from '../state/popups/usePopups'\nimport type { TransactionReceipt } from 'viem'\n\nexport const useMonitorTx = (txHash?: string | null, chainId?: ChainId): { isLoading: boolean; isSuccess: boolean; data: TransactionReceipt | undefined } => {\n const { addToastError, addToastSuccess } = usePopups()\n const transactionReceipt = useWaitForTransactionReceipt({\n confirmations: 0,\n chainId: chainId,\n hash: txHash as `0x${string}`,\n })\n const { isLoading, isSuccess: isConfirmed, error, isError, data } = transactionReceipt ?? {}\n\n useEffect(() => {\n if (txHash && isError) {\n addToastError(error.message, txHash, chainId)\n }\n if (txHash && isConfirmed) {\n addToastSuccess(txHash, chainId)\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [txHash, isError, isConfirmed, isLoading])\n\n return { isLoading: txHash ? isLoading : false, isSuccess: txHash ? isConfirmed : false, data }\n}\n"],"names":[],"mappings":";;;;MAMa,YAAY,GAAG,CAAC,MAAsB,EAAE,OAAiB,KAAsF;IAC1J,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,SAAS,EAAE;IACtD,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AACtD,QAAA,aAAa,EAAE,CAAC;AAChB,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,IAAI,EAAE,MAAuB;AAC9B,KAAA,CAAC;AACF,IAAA,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,kBAAkB,IAAI,EAAE;IAE5F,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,MAAM,IAAI,OAAO,EAAE;YACrB,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;QAC/C;AACA,QAAA,IAAI,MAAM,IAAI,WAAW,EAAE;AACzB,YAAA,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC;QAClC;;IAEF,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,KAAK,EAAE,IAAI,EAAE;AACjG;;;;"}
@@ -1,7 +1,8 @@
1
- import { zapInputTokens, WNATIVE } from '@ape.swap/apeswap-lists';
1
+ import '../config/constants/tokens.js';
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';
5
6
 
6
7
  const useSortedZapList = (chainId, principalToken) => {
7
8
  const zapList = [...(zapInputTokens[chainId] ?? []), principalToken];
@@ -35,7 +36,11 @@ const getUniqueTokensList = (zapList, chainId, principalToken) => {
35
36
  const parsedList = zapList?.filter((token) => {
36
37
  return token?.address?.[chainId]?.toLowerCase() !== principalToken?.address?.[chainId]?.toLowerCase();
37
38
  }) ?? [];
38
- const inputTokenList = principalToken
39
+ // If principal token IS the native token (e.g. APT on Aptos), skip adding it
40
+ // separately — 'NATIVE' already covers it and uniqBy can't dedup them because
41
+ // 'NATIVE' is a string without an .address property.
42
+ const principalIsNative = principalToken?.address?.[chainId]?.toLowerCase() === WNATIVE[chainId]?.address?.[chainId]?.toLowerCase();
43
+ const inputTokenList = principalToken && !principalIsNative
39
44
  ? [principalToken, 'NATIVE', ...parsedList]
40
45
  : ['NATIVE', ...parsedList];
41
46
  return uniqBy(inputTokenList, `address.[${chainId}]`);
@@ -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 const inputTokenList: (Token | 'NATIVE')[] = principalToken\n ? [principalToken, 'NATIVE', ...parsedList]\n : ['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;IAEV,MAAM,cAAc,GAAyB;UACzC,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,UAAU;AAC1C,UAAE,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC;IAE7B,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 '../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')[] = principalToken && !principalIsNative\n ? [principalToken, 'NATIVE', ...parsedList]\n : ['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;AAE3G,IAAA,MAAM,cAAc,GAAyB,cAAc,IAAI,CAAC;UAC5D,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,UAAU;AAC1C,UAAE,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC;IAE7B,OAAO,MAAM,CAAC,cAAc,EAAE,YAAY,OAAO,CAAA,CAAA,CAAG,CAAC;AACvD,CAAC;;;;"}
@@ -1,3 +1,4 @@
1
+ import '../config/constants/tokens.js';
1
2
  import { zapInputTokens } from '@ape.swap/apeswap-lists';
2
3
 
3
4
  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 '../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;;;;"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import '@aptos-labs/wallet-adapter-ant-design/dist/index.css';
3
+ export default function AptosWalletProvider({ children }: {
4
+ children: React.ReactNode;
5
+ }): React.JSX.Element;
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import '@mysten/dapp-kit/dist/index.css';
3
+ export default function SuiWalletProvider({ children }: {
4
+ children: React.ReactNode;
5
+ }): React.JSX.Element;
@@ -1,10 +1,13 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
2
  import BigNumber from 'bignumber.js';
3
+ import { ChainId } from '@ape.swap/apeswap-lists';
3
4
  import { MULTICALL_V2 } from '../../config/constants/addresses.js';
4
5
  import multicallV2Abi from '../../config/abi/multicallv2.json.js';
5
6
  import erc20ABI from '../../config/abi/erc20.json.js';
6
7
  import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
7
8
  import multicall from '../../utils/multicall.js';
9
+ import { getTokenBalanceAptos } from './useCurrencyBalanceAptos.js';
10
+ import { getTokenBalanceSui } from './useCurrencyBalanceSui.js';
8
11
 
9
12
  function useCurrencyBalance(currency, account, chainId) {
10
13
  return useQuery({
@@ -23,6 +26,12 @@ function useCurrencyBalance(currency, account, chainId) {
23
26
  const getTokenBalance = async (currency, account, chainId) => {
24
27
  if (!account || !currency || !chainId)
25
28
  return null;
29
+ if (chainId === ChainId.APTOS_MAINNET) {
30
+ return getTokenBalanceAptos(currency, account);
31
+ }
32
+ if (chainId === ChainId.SUI_MAINNET) {
33
+ return getTokenBalanceSui(currency, account);
34
+ }
26
35
  const calls = [
27
36
  {
28
37
  address: currency === 'NATIVE' ? MULTICALL_V2[chainId] : currency.address[chainId],
@@ -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'\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 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":";;;;;;;;AASc,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;AAClD,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 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_MAINNET) {\n return getTokenBalanceAptos(currency, account)\n }\n\n if (chainId === ChainId.SUI_MAINNET) {\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,aAAa,EAAE;AACrC,QAAA,OAAO,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC;IAChD;AAEA,IAAA,IAAI,OAAO,KAAK,OAAO,CAAC,WAAW,EAAE;AACnC,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;;;;"}
@@ -0,0 +1,14 @@
1
+ import { Token } from '@ape.swap/apeswap-lists';
2
+ /**
3
+ * Single-token balance read for Aptos.
4
+ * Used by `useCurrencyBalance` when `chainId === ChainId.APTOS`.
5
+ */
6
+ export declare const getTokenBalanceAptos: (currency: "NATIVE" | Token | null, account: string | null) => Promise<string | null>;
7
+ /**
8
+ * Multi-token balance read for Aptos.
9
+ * Used by `useUserTokensBalance` when `chainId === ChainId.APTOS`.
10
+ */
11
+ export declare const getTokensBalanceAptos: (account: string, tokens: ("NATIVE" | Token)[]) => Promise<{
12
+ address: string;
13
+ balance: string;
14
+ }[]>;
@@ -0,0 +1,75 @@
1
+ import BigNumber from 'bignumber.js';
2
+ import { ChainId } from '@ape.swap/apeswap-lists';
3
+ import { getAptosClient } from '../../utils/aptosHelpers.js';
4
+
5
+ // Aptos balance reads — mirrors useCurrencyBalanceSolana.ts
6
+ const APTOS_KEY = ChainId.APTOS_MAINNET;
7
+ /**
8
+ * Single-token balance read for Aptos.
9
+ * Used by `useCurrencyBalance` when `chainId === ChainId.APTOS`.
10
+ */
11
+ const getTokenBalanceAptos = async (currency, account) => {
12
+ if (!account || !currency)
13
+ return null;
14
+ try {
15
+ const aptos = getAptosClient();
16
+ if (currency === 'NATIVE') {
17
+ const amount = await aptos.getAccountAPTAmount({ accountAddress: account });
18
+ return new BigNumber(String(amount)).div(new BigNumber(10).pow(8)).toString();
19
+ }
20
+ const tokenAddress = currency.address[APTOS_KEY];
21
+ if (!tokenAddress)
22
+ return '0';
23
+ const isCoinType = tokenAddress.includes('::');
24
+ const amount = await aptos.getAccountCoinAmount({
25
+ accountAddress: account,
26
+ ...(isCoinType
27
+ ? { coinType: tokenAddress }
28
+ : { faMetadataAddress: tokenAddress }),
29
+ });
30
+ const decimals = currency.decimals?.[APTOS_KEY] ?? 8;
31
+ return new BigNumber(String(amount)).div(new BigNumber(10).pow(decimals)).toString();
32
+ }
33
+ catch {
34
+ return '0';
35
+ }
36
+ };
37
+ /**
38
+ * Multi-token balance read for Aptos.
39
+ * Used by `useUserTokensBalance` when `chainId === ChainId.APTOS`.
40
+ */
41
+ const getTokensBalanceAptos = async (account, tokens) => {
42
+ const aptos = getAptosClient();
43
+ return await Promise.all(tokens.map(async (token) => {
44
+ const address = token === 'NATIVE' ? 'NATIVE' : token.address[APTOS_KEY];
45
+ if (token === 'NATIVE') {
46
+ try {
47
+ const amount = await aptos.getAccountAPTAmount({ accountAddress: account });
48
+ return { address, balance: new BigNumber(String(amount)).div(new BigNumber(10).pow(8)).toString() };
49
+ }
50
+ catch {
51
+ return { address, balance: '0' };
52
+ }
53
+ }
54
+ try {
55
+ // FA tokens use faMetadataAddress; legacy coins use coinType.
56
+ // Detect by checking if address looks like a coin type (contains ::).
57
+ const isCoinType = address.includes('::');
58
+ const amount = await aptos.getAccountCoinAmount({
59
+ accountAddress: account,
60
+ ...(isCoinType ? { coinType: address } : { faMetadataAddress: address }),
61
+ });
62
+ const decimals = token.decimals?.[APTOS_KEY] ?? 8;
63
+ return {
64
+ address,
65
+ balance: new BigNumber(String(amount)).div(new BigNumber(10).pow(decimals)).toString(),
66
+ };
67
+ }
68
+ catch {
69
+ return { address, balance: '0' };
70
+ }
71
+ }));
72
+ };
73
+
74
+ export { getTokenBalanceAptos, getTokensBalanceAptos };
75
+ //# sourceMappingURL=useCurrencyBalanceAptos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCurrencyBalanceAptos.js","sources":["../../../src/state/balance/useCurrencyBalanceAptos.ts"],"sourcesContent":["// Aptos balance reads — mirrors useCurrencyBalanceSolana.ts\n\nimport BigNumber from 'bignumber.js'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { getAptosClient } from '../../utils/aptosHelpers'\n\nconst APTOS_KEY = ChainId.APTOS_MAINNET\n\n/**\n * Single-token balance read for Aptos.\n * Used by `useCurrencyBalance` when `chainId === ChainId.APTOS`.\n */\nexport const getTokenBalanceAptos = async (\n currency: 'NATIVE' | Token | null,\n account: string | null,\n): Promise<string | null> => {\n if (!account || !currency) return null\n\n try {\n const aptos = getAptosClient()\n if (currency === 'NATIVE') {\n const amount = await aptos.getAccountAPTAmount({ accountAddress: account })\n return new BigNumber(String(amount)).div(new BigNumber(10).pow(8)).toString()\n }\n const tokenAddress = currency.address[APTOS_KEY]\n if (!tokenAddress) return '0'\n const isCoinType = tokenAddress.includes('::')\n const amount = await aptos.getAccountCoinAmount({\n accountAddress: account,\n ...(isCoinType\n ? { coinType: tokenAddress as `${string}::${string}::${string}` }\n : { faMetadataAddress: tokenAddress }),\n })\n const decimals = currency.decimals?.[APTOS_KEY] ?? 8\n return new BigNumber(String(amount)).div(new BigNumber(10).pow(decimals)).toString()\n } catch {\n return '0'\n }\n}\n\n/**\n * Multi-token balance read for Aptos.\n * Used by `useUserTokensBalance` when `chainId === ChainId.APTOS`.\n */\nexport const getTokensBalanceAptos = async (\n account: string,\n tokens: ('NATIVE' | Token)[],\n): Promise<{ address: string; balance: string }[]> => {\n const aptos = getAptosClient()\n return await Promise.all(\n tokens.map(async (token) => {\n const address = token === 'NATIVE' ? 'NATIVE' : ((token as Token).address[APTOS_KEY] as string)\n if (token === 'NATIVE') {\n try {\n const amount = await aptos.getAccountAPTAmount({ accountAddress: account })\n return { address, balance: new BigNumber(String(amount)).div(new BigNumber(10).pow(8)).toString() }\n } catch {\n return { address, balance: '0' }\n }\n }\n try {\n // FA tokens use faMetadataAddress; legacy coins use coinType.\n // Detect by checking if address looks like a coin type (contains ::).\n const isCoinType = address.includes('::')\n const amount = await aptos.getAccountCoinAmount({\n accountAddress: account,\n ...(isCoinType ? { coinType: address as `${string}::${string}::${string}` } : { faMetadataAddress: address }),\n })\n const decimals = (token as Token).decimals?.[APTOS_KEY] ?? 8\n return {\n address,\n balance: new BigNumber(String(amount)).div(new BigNumber(10).pow(decimals)).toString(),\n }\n } catch {\n return { address, balance: '0' }\n }\n }),\n )\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Token } from '@ape.swap/apeswap-lists';
2
+ /**
3
+ * Single-token balance read for Sui.
4
+ * Used by `useCurrencyBalance` when `chainId === ChainId.SUI`.
5
+ */
6
+ export declare const getTokenBalanceSui: (currency: "NATIVE" | Token | null, account: string | null) => Promise<string | null>;
7
+ /**
8
+ * Multi-token balance read for Sui.
9
+ * Used by `useUserTokensBalance` when `chainId === ChainId.SUI`.
10
+ */
11
+ export declare const getTokensBalanceSui: (account: string, tokens: ("NATIVE" | Token)[]) => Promise<{
12
+ address: string;
13
+ balance: string;
14
+ }[]>;
@@ -0,0 +1,42 @@
1
+ import BigNumber from 'bignumber.js';
2
+ import { ChainId } from '@ape.swap/apeswap-lists';
3
+ import { getSuiClient } from '../../utils/suiHelpers.js';
4
+
5
+ // Sui balance reads — mirrors useCurrencyBalanceAptos.ts
6
+ const SUI_KEY = ChainId.SUI_MAINNET;
7
+ const SUI_NATIVE_COIN_TYPE = '0x2::sui::SUI';
8
+ const SUI_NATIVE_DECIMALS = 9;
9
+ /**
10
+ * Single-token balance read for Sui.
11
+ * Used by `useCurrencyBalance` when `chainId === ChainId.SUI`.
12
+ */
13
+ const getTokenBalanceSui = async (currency, account) => {
14
+ if (!account || !currency)
15
+ return null;
16
+ const coinType = currency === 'NATIVE' ? SUI_NATIVE_COIN_TYPE : currency.address[SUI_KEY];
17
+ if (!coinType)
18
+ return '0';
19
+ const decimals = currency === 'NATIVE' ? SUI_NATIVE_DECIMALS : (currency.decimals?.[SUI_KEY] ?? 9);
20
+ try {
21
+ const client = getSuiClient();
22
+ const result = await client.getBalance({ owner: account, coinType });
23
+ return new BigNumber(result.totalBalance).div(new BigNumber(10).pow(decimals)).toString();
24
+ }
25
+ catch {
26
+ return '0';
27
+ }
28
+ };
29
+ /**
30
+ * Multi-token balance read for Sui.
31
+ * Used by `useUserTokensBalance` when `chainId === ChainId.SUI`.
32
+ */
33
+ const getTokensBalanceSui = async (account, tokens) => {
34
+ return Promise.all(tokens.map(async (token) => {
35
+ const address = token === 'NATIVE' ? 'NATIVE' : token.address[SUI_KEY];
36
+ const balance = await getTokenBalanceSui(token, account);
37
+ return { address, balance: balance ?? '0' };
38
+ }));
39
+ };
40
+
41
+ export { getTokenBalanceSui, getTokensBalanceSui };
42
+ //# sourceMappingURL=useCurrencyBalanceSui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCurrencyBalanceSui.js","sources":["../../../src/state/balance/useCurrencyBalanceSui.ts"],"sourcesContent":["// Sui balance reads — mirrors useCurrencyBalanceAptos.ts\n\nimport BigNumber from 'bignumber.js'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { getSuiClient } from '../../utils/suiHelpers'\n\nconst SUI_KEY = ChainId.SUI_MAINNET\nconst SUI_NATIVE_COIN_TYPE = '0x2::sui::SUI'\nconst SUI_NATIVE_DECIMALS = 9\n\n/**\n * Single-token balance read for Sui.\n * Used by `useCurrencyBalance` when `chainId === ChainId.SUI`.\n */\nexport const getTokenBalanceSui = async (\n currency: 'NATIVE' | Token | null,\n account: string | null,\n): Promise<string | null> => {\n if (!account || !currency) return null\n\n const coinType = currency === 'NATIVE' ? SUI_NATIVE_COIN_TYPE : currency.address[SUI_KEY]\n if (!coinType) return '0'\n\n const decimals = currency === 'NATIVE' ? SUI_NATIVE_DECIMALS : (currency.decimals?.[SUI_KEY] ?? 9)\n\n try {\n const client = getSuiClient()\n const result = await client.getBalance({ owner: account, coinType })\n return new BigNumber(result.totalBalance).div(new BigNumber(10).pow(decimals)).toString()\n } catch {\n return '0'\n }\n}\n\n/**\n * Multi-token balance read for Sui.\n * Used by `useUserTokensBalance` when `chainId === ChainId.SUI`.\n */\nexport const getTokensBalanceSui = async (\n account: string,\n tokens: ('NATIVE' | Token)[],\n): Promise<{ address: string; balance: string }[]> => {\n return Promise.all(\n tokens.map(async (token) => {\n const address = token === 'NATIVE' ? 'NATIVE' : ((token as Token).address[SUI_KEY] as string)\n const balance = await getTokenBalanceSui(token, account)\n return { address, balance: balance ?? '0' }\n }),\n )\n}\n"],"names":[],"mappings":";;;;AAAA;AAMA,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW;AACnC,MAAM,oBAAoB,GAAG,eAAe;AAC5C,MAAM,mBAAmB,GAAG,CAAC;AAE7B;;;AAGG;AACI,MAAM,kBAAkB,GAAG,OAChC,QAAiC,EACjC,OAAsB,KACI;AAC1B,IAAA,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,IAAI;AAEtC,IAAA,MAAM,QAAQ,GAAG,QAAQ,KAAK,QAAQ,GAAG,oBAAoB,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;AACzF,IAAA,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,GAAG;IAEzB,MAAM,QAAQ,GAAG,QAAQ,KAAK,QAAQ,GAAG,mBAAmB,IAAI,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAElG,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAG,YAAY,EAAE;AAC7B,QAAA,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QACpE,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3F;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,GAAG;IACZ;AACF;AAEA;;;AAGG;AACI,MAAM,mBAAmB,GAAG,OACjC,OAAe,EACf,MAA4B,KACuB;AACnD,IAAA,OAAO,OAAO,CAAC,GAAG,CAChB,MAAM,CAAC,GAAG,CAAC,OAAO,KAAK,KAAI;AACzB,QAAA,MAAM,OAAO,GAAG,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAK,KAAe,CAAC,OAAO,CAAC,OAAO,CAAY;QAC7F,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;QACxD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE;IAC7C,CAAC,CAAC,CACH;AACH;;;;"}
@@ -11,12 +11,24 @@ import { useURLByEnvironment } from '../useSDKConfig.js';
11
11
  import useEVMAccount from '../../hooks/accounts/useEVMAccount.js';
12
12
  import { getTokenBalanceSolana } from './useCurrencyBalanceSolana.js';
13
13
  import useSOLAccount from '../../hooks/accounts/useSOLAccount.js';
14
+ import useAPTAccount from '../../hooks/accounts/useAPTAccount.js';
15
+ import useSUIAccount from '../../hooks/accounts/useSUIAccount.js';
16
+ import { getTokensBalanceAptos } from './useCurrencyBalanceAptos.js';
17
+ import { getTokensBalanceSui } from './useCurrencyBalanceSui.js';
14
18
 
15
19
  function useUserTokensBalance(tokens, chainId) {
16
20
  const keys = tokens.map((token) => (token === 'NATIVE' ? 'NATIVE' : token.address[chainId]));
17
21
  const { address: account } = useEVMAccount();
18
22
  const { publicKey: accountSolana } = useSOLAccount();
19
- const accountToUse = chainId === ChainId.SOL ? accountSolana?.toString() : account;
23
+ const { address: aptosAccount } = useAPTAccount();
24
+ const { address: suiAccount } = useSUIAccount();
25
+ const accountToUse = chainId === ChainId.SOL
26
+ ? accountSolana?.toString()
27
+ : chainId === ChainId.APTOS_MAINNET
28
+ ? aptosAccount
29
+ : chainId === ChainId.SUI_MAINNET
30
+ ? suiAccount
31
+ : account;
20
32
  const apiUrl = useURLByEnvironment('apiV2');
21
33
  return useQuery({
22
34
  queryKey: [`${QUERY_KEYS.USER_TOKENS_BALANCES}-${keys}-${accountToUse}`],
@@ -28,6 +40,12 @@ function useUserTokensBalance(tokens, chainId) {
28
40
  }
29
41
  const getTokensBalance = async (account, tokens, chainId, apiUrl) => {
30
42
  try {
43
+ if (chainId === ChainId.APTOS_MAINNET) {
44
+ return getTokensBalanceAptos(account, tokens);
45
+ }
46
+ if (chainId === ChainId.SUI_MAINNET) {
47
+ return getTokensBalanceSui(account, tokens);
48
+ }
31
49
  if (chainId !== ChainId.SOL) {
32
50
  const callsToken = tokens
33
51
  .filter((token) => token !== 'NATIVE')
@@ -1 +1 @@
1
- {"version":3,"file":"useUserTokensBalance.js","sources":["../../../src/state/balance/useUserTokensBalance.ts"],"sourcesContent":["import { useQuery, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport multicallV2Abi from '../../config/abi/multicallv2.json'\nimport erc20ABI from '../../config/abi/erc20.json'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport multicall, { Call } from '../../utils/multicall'\nimport { MULTICALL_V2 } from '../../config/constants/addresses'\nimport BigNumber from 'bignumber.js'\nimport { reportError } from '../../utils/reportError'\nimport { useURLByEnvironment } from '../useSDKConfig'\nimport useEVMAccount from '../../hooks/accounts/useEVMAccount'\nimport { getTokenBalanceSolana } from './useCurrencyBalanceSolana'\nimport useSOLAccount from '../../hooks/accounts/useSOLAccount'\n\nexport default function useUserTokensBalance(\n tokens: ('NATIVE' | Token)[],\n chainId: number,\n): UseQueryResult<{ address: string; balance: string }[]> {\n const keys = tokens.map((token) => (token === 'NATIVE' ? 'NATIVE' : token.address[chainId as ChainId]))\n const { address: account } = useEVMAccount()\n const { publicKey: accountSolana } = useSOLAccount()\n const accountToUse = chainId === ChainId.SOL ? accountSolana?.toString() : account\n const apiUrl = useURLByEnvironment('apiV2')\n return useQuery({\n queryKey: [`${QUERY_KEYS.USER_TOKENS_BALANCES}-${keys}-${accountToUse}`],\n queryFn: () => getTokensBalance(accountToUse!, tokens, chainId, apiUrl),\n staleTime: 45000,\n refetchOnWindowFocus: false,\n enabled: !!accountToUse,\n })\n}\n\nexport const getTokensBalance = async (\n account: string,\n tokens: ('NATIVE' | Token)[],\n chainId: number,\n apiUrl?: string,\n): Promise<{ address: string; balance: string }[]> => {\n try {\n if (chainId !== ChainId.SOL) {\n const callsToken: Call[] = tokens\n .filter((token) => token !== 'NATIVE')\n .map((token) => {\n return {\n address: token?.address?.[chainId as ChainId] ?? '',\n name: 'balanceOf',\n params: [account],\n }\n })\n const callNative: Call[] = tokens\n .filter((token) => token === 'NATIVE')\n .map(() => {\n return {\n address: MULTICALL_V2[chainId]!,\n name: 'getEthBalance',\n params: [account],\n }\n })\n const [dataToken, dataNative] = await Promise.all([\n multicall(chainId, erc20ABI, callsToken),\n multicall(chainId, multicallV2Abi, callNative),\n ])\n\n const balancesToken = dataToken.map((balance: any, i: number) => {\n const token = tokens.find(\n (token) =>\n token !== 'NATIVE' &&\n (token as Token)?.address?.[chainId as ChainId]?.toLowerCase() === callsToken[i].address.toLowerCase(),\n )\n return {\n address: (token as Token)?.address[chainId as ChainId],\n balance: new BigNumber(balance)\n .div(new BigNumber(10).pow((token as Token).decimals![chainId as ChainId]!))\n .toString(),\n }\n })\n const balancesNative = dataNative.map((balance: any) => {\n return {\n address: 'NATIVE',\n balance: new BigNumber(balance).div(new BigNumber(10).pow(18)).toString(),\n }\n })\n return [...balancesToken, ...balancesNative]\n } else {\n return await Promise.all(\n tokens.map(async (token) => {\n const balance = await getTokenBalanceSolana(token, account)\n return {\n address: token === 'NATIVE' ? 'NATIVE' : ((token as Token).address[ChainId.SOL] as string),\n balance: balance || '0',\n }\n }),\n )\n }\n } catch (e) {\n reportError({\n apiUrl,\n error: e,\n extraInfo: { type: 'getTokensBalance', tokens, e },\n account,\n chainId,\n })\n return []\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useUserTokensBalance.js","sources":["../../../src/state/balance/useUserTokensBalance.ts"],"sourcesContent":["import { useQuery, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport multicallV2Abi from '../../config/abi/multicallv2.json'\nimport erc20ABI from '../../config/abi/erc20.json'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport multicall, { Call } from '../../utils/multicall'\nimport { MULTICALL_V2 } from '../../config/constants/addresses'\nimport BigNumber from 'bignumber.js'\nimport { reportError } from '../../utils/reportError'\nimport { useURLByEnvironment } from '../useSDKConfig'\nimport useEVMAccount from '../../hooks/accounts/useEVMAccount'\nimport { getTokenBalanceSolana } from './useCurrencyBalanceSolana'\nimport useSOLAccount from '../../hooks/accounts/useSOLAccount'\nimport useAPTAccount from '../../hooks/accounts/useAPTAccount'\nimport useSUIAccount from '../../hooks/accounts/useSUIAccount'\nimport { getTokensBalanceAptos } from './useCurrencyBalanceAptos'\nimport { getTokensBalanceSui } from './useCurrencyBalanceSui'\n\nexport default function useUserTokensBalance(\n tokens: ('NATIVE' | Token)[],\n chainId: number,\n): UseQueryResult<{ address: string; balance: string }[]> {\n const keys = tokens.map((token) => (token === 'NATIVE' ? 'NATIVE' : token.address[chainId as ChainId]))\n const { address: account } = useEVMAccount()\n const { publicKey: accountSolana } = useSOLAccount()\n const { address: aptosAccount } = useAPTAccount()\n const { address: suiAccount } = useSUIAccount()\n const accountToUse =\n chainId === ChainId.SOL\n ? accountSolana?.toString()\n : chainId === ChainId.APTOS_MAINNET\n ? aptosAccount\n : chainId === ChainId.SUI_MAINNET\n ? suiAccount\n : account\n const apiUrl = useURLByEnvironment('apiV2')\n return useQuery({\n queryKey: [`${QUERY_KEYS.USER_TOKENS_BALANCES}-${keys}-${accountToUse}`],\n queryFn: () => getTokensBalance(accountToUse!, tokens, chainId, apiUrl),\n staleTime: 45000,\n refetchOnWindowFocus: false,\n enabled: !!accountToUse,\n })\n}\n\nexport const getTokensBalance = async (\n account: string,\n tokens: ('NATIVE' | Token)[],\n chainId: number,\n apiUrl?: string,\n): Promise<{ address: string; balance: string }[]> => {\n try {\n if (chainId === ChainId.APTOS_MAINNET) {\n return getTokensBalanceAptos(account, tokens)\n }\n\n if (chainId === ChainId.SUI_MAINNET) {\n return getTokensBalanceSui(account, tokens)\n }\n\n if (chainId !== ChainId.SOL) {\n const callsToken: Call[] = tokens\n .filter((token) => token !== 'NATIVE')\n .map((token) => {\n return {\n address: token?.address?.[chainId as ChainId] ?? '',\n name: 'balanceOf',\n params: [account],\n }\n })\n const callNative: Call[] = tokens\n .filter((token) => token === 'NATIVE')\n .map(() => {\n return {\n address: MULTICALL_V2[chainId]!,\n name: 'getEthBalance',\n params: [account],\n }\n })\n const [dataToken, dataNative] = await Promise.all([\n multicall(chainId, erc20ABI, callsToken),\n multicall(chainId, multicallV2Abi, callNative),\n ])\n\n const balancesToken = dataToken.map((balance: any, i: number) => {\n const token = tokens.find(\n (token) =>\n token !== 'NATIVE' &&\n (token as Token)?.address?.[chainId as ChainId]?.toLowerCase() === callsToken[i].address.toLowerCase(),\n )\n return {\n address: (token as Token)?.address[chainId as ChainId],\n balance: new BigNumber(balance)\n .div(new BigNumber(10).pow((token as Token).decimals![chainId as ChainId]!))\n .toString(),\n }\n })\n const balancesNative = dataNative.map((balance: any) => {\n return {\n address: 'NATIVE',\n balance: new BigNumber(balance).div(new BigNumber(10).pow(18)).toString(),\n }\n })\n return [...balancesToken, ...balancesNative]\n } else {\n return await Promise.all(\n tokens.map(async (token) => {\n const balance = await getTokenBalanceSolana(token, account)\n return {\n address: token === 'NATIVE' ? 'NATIVE' : ((token as Token).address[ChainId.SOL] as string),\n balance: balance || '0',\n }\n }),\n )\n }\n } catch (e) {\n reportError({\n apiUrl,\n error: e,\n extraInfo: { type: 'getTokensBalance', tokens, e },\n account,\n chainId,\n })\n return []\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { BillsConfig } from '@ape.swap/apeswap-lists';
2
+ import type { TokenPrices } from '../tokenPrices/useTokenPrices';
3
+ export declare const getAptosBondsList: () => BillsConfig[];
4
+ export declare const getAptosFallbackPrices: () => TokenPrices[];