@0xsequence/hooks 5.1.1 → 5.2.1

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 (158) hide show
  1. package/README.md +17 -24
  2. package/dist/cjs/constants.d.ts +1 -1
  3. package/dist/cjs/constants.js +1 -1
  4. package/dist/cjs/constants.js.map +1 -1
  5. package/dist/cjs/hooks/Combination/useGetSwapQuote.d.ts.map +1 -1
  6. package/dist/cjs/hooks/Combination/useGetSwapQuote.js +7 -1
  7. package/dist/cjs/hooks/Combination/useGetSwapQuote.js.map +1 -1
  8. package/dist/cjs/hooks/Indexer/useGetTransactionHistory.d.ts +30 -29
  9. package/dist/cjs/hooks/Indexer/useGetTransactionHistory.d.ts.map +1 -1
  10. package/dist/cjs/hooks/Indexer/useGetTransactionHistory.js +28 -13
  11. package/dist/cjs/hooks/Indexer/useGetTransactionHistory.js.map +1 -1
  12. package/dist/cjs/hooks/Indexer/useGetTransactionHistorySummary.d.ts +2 -2
  13. package/dist/cjs/hooks/Indexer/useGetTransactionHistorySummary.d.ts.map +1 -1
  14. package/dist/cjs/hooks/Indexer/useGetTransactionHistorySummary.js +4 -4
  15. package/dist/cjs/hooks/Indexer/useGetTransactionHistorySummary.js.map +1 -1
  16. package/dist/cjs/hooks/IndexerGateway/useGetNativeTokenBalance.d.ts +30 -2
  17. package/dist/cjs/hooks/IndexerGateway/useGetNativeTokenBalance.d.ts.map +1 -1
  18. package/dist/cjs/hooks/IndexerGateway/useGetNativeTokenBalance.js +35 -7
  19. package/dist/cjs/hooks/IndexerGateway/useGetNativeTokenBalance.js.map +1 -1
  20. package/dist/cjs/hooks/IndexerGateway/useGetSingleTokenBalance.d.ts +49 -0
  21. package/dist/cjs/hooks/IndexerGateway/useGetSingleTokenBalance.d.ts.map +1 -0
  22. package/dist/cjs/hooks/IndexerGateway/useGetSingleTokenBalance.js +82 -0
  23. package/dist/cjs/hooks/IndexerGateway/useGetSingleTokenBalance.js.map +1 -0
  24. package/dist/cjs/hooks/IndexerGateway/useGetTokenBalancesByContract.d.ts +58 -4
  25. package/dist/cjs/hooks/IndexerGateway/useGetTokenBalancesByContract.d.ts.map +1 -1
  26. package/dist/cjs/hooks/IndexerGateway/useGetTokenBalancesByContract.js +68 -16
  27. package/dist/cjs/hooks/IndexerGateway/useGetTokenBalancesByContract.js.map +1 -1
  28. package/dist/cjs/hooks/IndexerGateway/useGetTokenBalancesDetails.d.ts +95 -3
  29. package/dist/cjs/hooks/IndexerGateway/useGetTokenBalancesDetails.d.ts.map +1 -1
  30. package/dist/cjs/hooks/IndexerGateway/useGetTokenBalancesDetails.js +110 -16
  31. package/dist/cjs/hooks/IndexerGateway/useGetTokenBalancesDetails.js.map +1 -1
  32. package/dist/cjs/hooks/IndexerGateway/useGetTokenBalancesSummary.d.ts +70 -3
  33. package/dist/cjs/hooks/IndexerGateway/useGetTokenBalancesSummary.d.ts.map +1 -1
  34. package/dist/cjs/hooks/IndexerGateway/useGetTokenBalancesSummary.js +85 -16
  35. package/dist/cjs/hooks/IndexerGateway/useGetTokenBalancesSummary.js.map +1 -1
  36. package/dist/cjs/hooks/IndexerGateway/useIndexerGatewayClient.d.ts +26 -0
  37. package/dist/cjs/hooks/IndexerGateway/useIndexerGatewayClient.d.ts.map +1 -1
  38. package/dist/cjs/hooks/IndexerGateway/useIndexerGatewayClient.js +26 -0
  39. package/dist/cjs/hooks/IndexerGateway/useIndexerGatewayClient.js.map +1 -1
  40. package/dist/cjs/hooks/Metadata/useGetContractInfo.d.ts +1 -1
  41. package/dist/cjs/hooks/Metadata/useGetContractInfo.d.ts.map +1 -1
  42. package/dist/cjs/hooks/Metadata/useGetContractInfo.js +6 -6
  43. package/dist/cjs/hooks/Metadata/useGetContractInfo.js.map +1 -1
  44. package/dist/cjs/hooks/Metadata/useGetMultipleContractsInfo.d.ts +1 -1
  45. package/dist/cjs/hooks/Metadata/useGetMultipleContractsInfo.d.ts.map +1 -1
  46. package/dist/cjs/hooks/Metadata/useGetMultipleContractsInfo.js +5 -5
  47. package/dist/cjs/hooks/Metadata/useGetMultipleContractsInfo.js.map +1 -1
  48. package/dist/cjs/hooks/Metadata/useGetTokenMetadata.d.ts +1 -1
  49. package/dist/cjs/hooks/Metadata/useGetTokenMetadata.d.ts.map +1 -1
  50. package/dist/cjs/hooks/Metadata/useGetTokenMetadata.js +4 -4
  51. package/dist/cjs/hooks/Metadata/useGetTokenMetadata.js.map +1 -1
  52. package/dist/cjs/hooks/useClearCachedBalances.d.ts.map +1 -1
  53. package/dist/cjs/hooks/useClearCachedBalances.js +1 -17
  54. package/dist/cjs/hooks/useClearCachedBalances.js.map +1 -1
  55. package/dist/cjs/index.d.ts +1 -1
  56. package/dist/cjs/index.d.ts.map +1 -1
  57. package/dist/cjs/index.js +3 -3
  58. package/dist/cjs/index.js.map +1 -1
  59. package/dist/cjs/tests/Indexer/useGetTransactionHistory.test.js +3 -3
  60. package/dist/cjs/tests/Indexer/useGetTransactionHistory.test.js.map +1 -1
  61. package/dist/cjs/tests/Indexer/useGetTransactionHistorySummary.test.js +1 -1
  62. package/dist/cjs/tests/Indexer/useGetTransactionHistorySummary.test.js.map +1 -1
  63. package/dist/cjs/tests/IndexerGateway/useGetSingleTokenBalanceSummary.test.js +5 -5
  64. package/dist/cjs/tests/IndexerGateway/useGetSingleTokenBalanceSummary.test.js.map +1 -1
  65. package/dist/cjs/tests/IndexerGateway/useGetTokenBalancesByContract.test.js +1 -1
  66. package/dist/cjs/tests/IndexerGateway/useGetTokenBalancesByContract.test.js.map +1 -1
  67. package/dist/cjs/tests/IndexerGateway/useGetTokenBalancesDetails.test.js +1 -1
  68. package/dist/cjs/tests/IndexerGateway/useGetTokenBalancesDetails.test.js.map +1 -1
  69. package/dist/cjs/tests/IndexerGateway/useGetTokenBalancesSummary.test.js +1 -1
  70. package/dist/cjs/tests/IndexerGateway/useGetTokenBalancesSummary.test.js.map +1 -1
  71. package/dist/cjs/tests/handlers.d.ts.map +1 -1
  72. package/dist/cjs/tests/handlers.js +20 -0
  73. package/dist/cjs/tests/handlers.js.map +1 -1
  74. package/dist/cjs/types/hooks.d.ts +0 -3
  75. package/dist/cjs/types/hooks.d.ts.map +1 -1
  76. package/dist/esm/constants.d.ts +1 -1
  77. package/dist/esm/constants.js +1 -1
  78. package/dist/esm/constants.js.map +1 -1
  79. package/dist/esm/hooks/Combination/useGetSwapQuote.d.ts.map +1 -1
  80. package/dist/esm/hooks/Combination/useGetSwapQuote.js +7 -1
  81. package/dist/esm/hooks/Combination/useGetSwapQuote.js.map +1 -1
  82. package/dist/esm/hooks/Indexer/useGetTransactionHistory.d.ts +30 -29
  83. package/dist/esm/hooks/Indexer/useGetTransactionHistory.d.ts.map +1 -1
  84. package/dist/esm/hooks/Indexer/useGetTransactionHistory.js +28 -13
  85. package/dist/esm/hooks/Indexer/useGetTransactionHistory.js.map +1 -1
  86. package/dist/esm/hooks/Indexer/useGetTransactionHistorySummary.d.ts +2 -2
  87. package/dist/esm/hooks/Indexer/useGetTransactionHistorySummary.d.ts.map +1 -1
  88. package/dist/esm/hooks/Indexer/useGetTransactionHistorySummary.js +4 -4
  89. package/dist/esm/hooks/Indexer/useGetTransactionHistorySummary.js.map +1 -1
  90. package/dist/esm/hooks/IndexerGateway/useGetNativeTokenBalance.d.ts +30 -2
  91. package/dist/esm/hooks/IndexerGateway/useGetNativeTokenBalance.d.ts.map +1 -1
  92. package/dist/esm/hooks/IndexerGateway/useGetNativeTokenBalance.js +35 -7
  93. package/dist/esm/hooks/IndexerGateway/useGetNativeTokenBalance.js.map +1 -1
  94. package/dist/esm/hooks/IndexerGateway/useGetSingleTokenBalance.d.ts +49 -0
  95. package/dist/esm/hooks/IndexerGateway/useGetSingleTokenBalance.d.ts.map +1 -0
  96. package/dist/esm/hooks/IndexerGateway/useGetSingleTokenBalance.js +78 -0
  97. package/dist/esm/hooks/IndexerGateway/useGetSingleTokenBalance.js.map +1 -0
  98. package/dist/esm/hooks/IndexerGateway/useGetTokenBalancesByContract.d.ts +58 -4
  99. package/dist/esm/hooks/IndexerGateway/useGetTokenBalancesByContract.d.ts.map +1 -1
  100. package/dist/esm/hooks/IndexerGateway/useGetTokenBalancesByContract.js +69 -17
  101. package/dist/esm/hooks/IndexerGateway/useGetTokenBalancesByContract.js.map +1 -1
  102. package/dist/esm/hooks/IndexerGateway/useGetTokenBalancesDetails.d.ts +95 -3
  103. package/dist/esm/hooks/IndexerGateway/useGetTokenBalancesDetails.d.ts.map +1 -1
  104. package/dist/esm/hooks/IndexerGateway/useGetTokenBalancesDetails.js +111 -17
  105. package/dist/esm/hooks/IndexerGateway/useGetTokenBalancesDetails.js.map +1 -1
  106. package/dist/esm/hooks/IndexerGateway/useGetTokenBalancesSummary.d.ts +70 -3
  107. package/dist/esm/hooks/IndexerGateway/useGetTokenBalancesSummary.d.ts.map +1 -1
  108. package/dist/esm/hooks/IndexerGateway/useGetTokenBalancesSummary.js +86 -17
  109. package/dist/esm/hooks/IndexerGateway/useGetTokenBalancesSummary.js.map +1 -1
  110. package/dist/esm/hooks/IndexerGateway/useIndexerGatewayClient.d.ts +26 -0
  111. package/dist/esm/hooks/IndexerGateway/useIndexerGatewayClient.d.ts.map +1 -1
  112. package/dist/esm/hooks/IndexerGateway/useIndexerGatewayClient.js +26 -0
  113. package/dist/esm/hooks/IndexerGateway/useIndexerGatewayClient.js.map +1 -1
  114. package/dist/esm/hooks/Metadata/useGetContractInfo.d.ts +1 -1
  115. package/dist/esm/hooks/Metadata/useGetContractInfo.d.ts.map +1 -1
  116. package/dist/esm/hooks/Metadata/useGetContractInfo.js +6 -6
  117. package/dist/esm/hooks/Metadata/useGetContractInfo.js.map +1 -1
  118. package/dist/esm/hooks/Metadata/useGetMultipleContractsInfo.d.ts +1 -1
  119. package/dist/esm/hooks/Metadata/useGetMultipleContractsInfo.d.ts.map +1 -1
  120. package/dist/esm/hooks/Metadata/useGetMultipleContractsInfo.js +5 -5
  121. package/dist/esm/hooks/Metadata/useGetMultipleContractsInfo.js.map +1 -1
  122. package/dist/esm/hooks/Metadata/useGetTokenMetadata.d.ts +1 -1
  123. package/dist/esm/hooks/Metadata/useGetTokenMetadata.d.ts.map +1 -1
  124. package/dist/esm/hooks/Metadata/useGetTokenMetadata.js +4 -4
  125. package/dist/esm/hooks/Metadata/useGetTokenMetadata.js.map +1 -1
  126. package/dist/esm/hooks/useClearCachedBalances.d.ts.map +1 -1
  127. package/dist/esm/hooks/useClearCachedBalances.js +1 -17
  128. package/dist/esm/hooks/useClearCachedBalances.js.map +1 -1
  129. package/dist/esm/index.d.ts +1 -1
  130. package/dist/esm/index.d.ts.map +1 -1
  131. package/dist/esm/index.js +1 -1
  132. package/dist/esm/index.js.map +1 -1
  133. package/dist/esm/tests/Indexer/useGetTransactionHistory.test.js +4 -4
  134. package/dist/esm/tests/Indexer/useGetTransactionHistory.test.js.map +1 -1
  135. package/dist/esm/tests/Indexer/useGetTransactionHistorySummary.test.js +1 -1
  136. package/dist/esm/tests/Indexer/useGetTransactionHistorySummary.test.js.map +1 -1
  137. package/dist/esm/tests/IndexerGateway/useGetSingleTokenBalanceSummary.test.js +5 -5
  138. package/dist/esm/tests/IndexerGateway/useGetSingleTokenBalanceSummary.test.js.map +1 -1
  139. package/dist/esm/tests/IndexerGateway/useGetTokenBalancesByContract.test.js +1 -1
  140. package/dist/esm/tests/IndexerGateway/useGetTokenBalancesByContract.test.js.map +1 -1
  141. package/dist/esm/tests/IndexerGateway/useGetTokenBalancesDetails.test.js +1 -1
  142. package/dist/esm/tests/IndexerGateway/useGetTokenBalancesDetails.test.js.map +1 -1
  143. package/dist/esm/tests/IndexerGateway/useGetTokenBalancesSummary.test.js +1 -1
  144. package/dist/esm/tests/IndexerGateway/useGetTokenBalancesSummary.test.js.map +1 -1
  145. package/dist/esm/tests/handlers.d.ts.map +1 -1
  146. package/dist/esm/tests/handlers.js +20 -0
  147. package/dist/esm/tests/handlers.js.map +1 -1
  148. package/dist/esm/types/hooks.d.ts +0 -3
  149. package/dist/esm/types/hooks.d.ts.map +1 -1
  150. package/package.json +11 -11
  151. package/dist/cjs/hooks/IndexerGateway/useGetSingleTokenBalanceSummary.d.ts +0 -11
  152. package/dist/cjs/hooks/IndexerGateway/useGetSingleTokenBalanceSummary.d.ts.map +0 -1
  153. package/dist/cjs/hooks/IndexerGateway/useGetSingleTokenBalanceSummary.js +0 -46
  154. package/dist/cjs/hooks/IndexerGateway/useGetSingleTokenBalanceSummary.js.map +0 -1
  155. package/dist/esm/hooks/IndexerGateway/useGetSingleTokenBalanceSummary.d.ts +0 -11
  156. package/dist/esm/hooks/IndexerGateway/useGetSingleTokenBalanceSummary.d.ts.map +0 -1
  157. package/dist/esm/hooks/IndexerGateway/useGetSingleTokenBalanceSummary.js +0 -42
  158. package/dist/esm/hooks/IndexerGateway/useGetSingleTokenBalanceSummary.js.map +0 -1
@@ -0,0 +1,78 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import { ZERO_ADDRESS, QUERY_KEYS, time } from '../../constants';
3
+ import { compareAddress, createNativeTokenBalance } from '../../utils/helpers';
4
+ import { useIndexerGatewayClient } from './useIndexerGatewayClient';
5
+ const getSingleTokenBalance = async (args, indexerGatewayClient) => {
6
+ const balance = await indexerGatewayClient.getTokenBalancesDetails({
7
+ chainIds: [args.chainId],
8
+ filter: {
9
+ accountAddresses: [args.accountAddress],
10
+ contractWhitelist: [args.contractAddress],
11
+ omitNativeBalances: false
12
+ }
13
+ });
14
+ if (compareAddress(args.contractAddress, ZERO_ADDRESS)) {
15
+ return createNativeTokenBalance(args.chainId, args.accountAddress, balance.nativeBalances[0].results[0].balance);
16
+ }
17
+ else {
18
+ if (args.tokenId) {
19
+ return balance.balances[0].results.find(result => result.tokenID === args.tokenId);
20
+ }
21
+ else {
22
+ return balance.balances[0].results[0];
23
+ }
24
+ }
25
+ };
26
+ /**
27
+ * Hook to fetch the balance of a specific token (native or ERC20) for an account on a specific chain.
28
+ * For native tokens, use ZERO_ADDRESS (0x0000...0000) as the contractAddress.
29
+ *
30
+ * @param args - Arguments for fetching the token balance
31
+ * @param args.chainId - The chain ID to fetch the balance from
32
+ * @param args.accountAddress - The address to fetch the balance for
33
+ * @param args.contractAddress - The token contract address (use ZERO_ADDRESS for native tokens)
34
+ * @param options - Optional configuration for the query behavior
35
+ * @param options.hideCollectibles - If true, filters out ERC721 and ERC1155 tokens
36
+ *
37
+ * @returns Query result containing the token balance
38
+ *
39
+ * @see {@link https://docs.sequence.xyz/sdk/web/hooks/useGetSingleTokenBalanceSummary} for more detailed documentation.
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * import { useGetSingleTokenBalanceSummary, ZERO_ADDRESS } from '@0xsequence/hooks'
44
+ *
45
+ * // Fetch native ETH balance
46
+ * function NativeBalance() {
47
+ * const { data: ethBalance } = useGetSingleTokenBalanceSummary({
48
+ * chainId: 1,
49
+ * accountAddress: '0x123...',
50
+ * contractAddress: ZERO_ADDRESS
51
+ * })
52
+ * return <div>ETH Balance: {ethBalance?.balance}</div>
53
+ * }
54
+ *
55
+ * // Fetch USDC balance
56
+ * function TokenBalance() {
57
+ * const { data: usdcBalance } = useGetSingleTokenBalanceSummary({
58
+ * chainId: 1,
59
+ * accountAddress: '0x123...',
60
+ * contractAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' // USDC
61
+ * })
62
+ * return <div>USDC Balance: {usdcBalance?.balance}</div>
63
+ * }
64
+ * ```
65
+ */
66
+ export const useGetSingleTokenBalance = (args, options) => {
67
+ const indexerGatewayClient = useIndexerGatewayClient();
68
+ return useQuery({
69
+ queryKey: [QUERY_KEYS.useGetSingleTokenBalance, args, options],
70
+ queryFn: async () => {
71
+ return await getSingleTokenBalance(args, indexerGatewayClient);
72
+ },
73
+ retry: options?.retry ?? true,
74
+ staleTime: time.oneSecond * 30,
75
+ enabled: !!args.chainId && !!args.accountAddress && !options?.disabled
76
+ });
77
+ };
78
+ //# sourceMappingURL=useGetSingleTokenBalance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGetSingleTokenBalance.js","sourceRoot":"","sources":["../../../../src/hooks/IndexerGateway/useGetSingleTokenBalance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEhE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAE9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AASnE,MAAM,qBAAqB,GAAG,KAAK,EAAE,IAA+B,EAAE,oBAA4C,EAAE,EAAE;IACpH,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,uBAAuB,CAAC;QACjE,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;QACxB,MAAM,EAAE;YACN,gBAAgB,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC;YACvC,iBAAiB,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC;YACzC,kBAAkB,EAAE,KAAK;SAC1B;KACF,CAAC,CAAA;IAEF,IAAI,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,CAAC;QACvD,OAAO,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAClH,CAAC;SAAM,CAAC;QACN,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,CAAA;QACpF,CAAC;aAAM,CAAC;YACN,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,IAA+B,EAAE,OAAsB,EAAE,EAAE;IAClG,MAAM,oBAAoB,GAAG,uBAAuB,EAAE,CAAA;IAEtD,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,UAAU,CAAC,wBAAwB,EAAE,IAAI,EAAE,OAAO,CAAC;QAC9D,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO,MAAM,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAA;QAChE,CAAC;QACD,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;QAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE;QAC9B,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,OAAO,EAAE,QAAQ;KACvE,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -1,7 +1,61 @@
1
- import { IndexerGateway, TokenBalance } from '@0xsequence/indexer';
2
- import { BalanceHookOptions } from '../../types';
1
+ import { IndexerGateway } from '@0xsequence/indexer';
2
+ import { HooksOptions } from '../../types';
3
3
  /**
4
- * @description Gets the token balances for a given list of contractAddresses
4
+ * Hook to fetch token balances by contract address.
5
+ * Can be used to fetch multiple token balances in a single request.
6
+ *
7
+ * @param getTokenBalancesByContractArgs - Arguments for fetching token balances
8
+ * @param getTokenBalancesByContractArgs.chainIds - Array of chain IDs to fetch balances from
9
+ * @param getTokenBalancesByContractArgs.filter - Filter criteria for the query
10
+ * @param getTokenBalancesByContractArgs.filter.contractAddresses - List of token contract addresses to fetch balances for
11
+ * @param getTokenBalancesByContractArgs.filter.accountAddresses - Optional list of account addresses to fetch balances for
12
+ * @param getTokenBalancesByContractArgs.filter.contractStatus - Optional filter for contract verification status
13
+ * @param options - Optional configuration for the query behavior
14
+ * @param options.hideCollectibles - If true, filters out ERC721 and ERC1155 tokens from the results
15
+ * @param options.disabled - If true, disables the query from automatically running
16
+ * @param options.retry - If true, retries failed queries
17
+ *
18
+ * @returns Query result containing an array of TokenBalance objects with the following properties:
19
+ * - `contractType`: Type of the token contract (ERC20, ERC721, ERC1155)
20
+ * - `contractAddress`: Address of the token contract
21
+ * - `accountAddress`: Address of the account holding the tokens
22
+ * - `tokenID`: (for ERC721/ERC1155) ID of the token
23
+ * - `balance`: Token balance as a string
24
+ * - `blockHash`: Hash of the block where this balance was last updated
25
+ * - `blockNumber`: Block number where this balance was last updated
26
+ * - `chainId`: Chain ID where the token exists
27
+ * - `contractInfo`: (optional) Additional token contract information including:
28
+ * - `name`: Token name
29
+ * - `symbol`: Token symbol
30
+ * - `decimals`: Number of decimals (for ERC20)
31
+ * - `logoURI`: URL of the token logo
32
+ *
33
+ * @see {@link https://docs.sequence.xyz/sdk/web/hooks/useGetTokenBalancesByContract} for more detailed documentation.
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * function TokenBalances() {
38
+ * const { data: balances } = useGetTokenBalancesByContract({
39
+ * chainIds: [1], // Ethereum mainnet
40
+ * filter: {
41
+ * contractAddresses: [
42
+ * '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
43
+ * '0xdac17f958d2ee523a2206206994597c13d831ec7' // USDT
44
+ * ],
45
+ * accountAddresses: ['0x123...']
46
+ * }
47
+ * })
48
+ *
49
+ * return balances?.map(balance => (
50
+ * <div key={balance.contractAddress}>
51
+ * {balance.contractInfo?.symbol}: {balance.balance}
52
+ * </div>
53
+ * ))
54
+ * }
55
+ * ```
5
56
  */
6
- export declare const useGetTokenBalancesByContract: (getTokenBalancesByContractArgs: IndexerGateway.GetTokenBalancesByContractArgs, options?: BalanceHookOptions) => import("@tanstack/react-query").UseQueryResult<TokenBalance[], Error>;
57
+ export declare const useGetTokenBalancesByContract: (args: IndexerGateway.GetTokenBalancesByContractArgs, options?: HooksOptions) => import("@tanstack/react-query").UseInfiniteQueryResult<import("@tanstack/react-query").InfiniteData<{
58
+ balances: IndexerGateway.TokenBalance[];
59
+ page: IndexerGateway.Page;
60
+ }, unknown>, Error>;
7
61
  //# sourceMappingURL=useGetTokenBalancesByContract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useGetTokenBalancesByContract.d.ts","sourceRoot":"","sources":["../../../../src/hooks/IndexerGateway/useGetTokenBalancesByContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,cAAc,EAA0B,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAIxG,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAsBhD;;GAEG;AACH,eAAO,MAAM,6BAA6B,GACxC,gCAAgC,cAAc,CAAC,8BAA8B,EAC7E,UAAU,kBAAkB,0EAiB7B,CAAA"}
1
+ {"version":3,"file":"useGetTokenBalancesByContract.d.ts","sourceRoot":"","sources":["../../../../src/hooks/IndexerGateway/useGetTokenBalancesByContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgC,MAAM,qBAAqB,CAAA;AAIlF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAgB1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,eAAO,MAAM,6BAA6B,GAAI,MAAM,cAAc,CAAC,8BAA8B,EAAE,UAAU,YAAY;;;mBAgBxH,CAAA"}
@@ -1,29 +1,81 @@
1
- import { ContractType } from '@0xsequence/indexer';
2
- import { useQuery } from '@tanstack/react-query';
1
+ import { useInfiniteQuery } from '@tanstack/react-query';
3
2
  import { QUERY_KEYS, time } from '../../constants';
4
3
  import { useIndexerGatewayClient } from './useIndexerGatewayClient';
5
- const getTokenBalancesByContract = async (indexerGatewayClient, getTokenBalancesByContractArgs, hideCollectibles) => {
6
- const res = await indexerGatewayClient.getTokenBalancesByContract(getTokenBalancesByContractArgs);
7
- if (hideCollectibles) {
8
- for (const chainBalance of res.balances) {
9
- chainBalance.results = chainBalance.results.filter(result => result.contractType !== ContractType.ERC721 && result.contractType !== ContractType.ERC1155);
10
- }
11
- }
12
- return res.balances.flatMap(balance => balance.results);
4
+ const getTokenBalancesByContract = async (indexerGatewayClient, args) => {
5
+ const res = await indexerGatewayClient.getTokenBalancesByContract(args);
6
+ return {
7
+ balances: res.balances.flatMap(balance => balance.results),
8
+ page: res.page
9
+ };
13
10
  };
14
11
  /**
15
- * @description Gets the token balances for a given list of contractAddresses
12
+ * Hook to fetch token balances by contract address.
13
+ * Can be used to fetch multiple token balances in a single request.
14
+ *
15
+ * @param getTokenBalancesByContractArgs - Arguments for fetching token balances
16
+ * @param getTokenBalancesByContractArgs.chainIds - Array of chain IDs to fetch balances from
17
+ * @param getTokenBalancesByContractArgs.filter - Filter criteria for the query
18
+ * @param getTokenBalancesByContractArgs.filter.contractAddresses - List of token contract addresses to fetch balances for
19
+ * @param getTokenBalancesByContractArgs.filter.accountAddresses - Optional list of account addresses to fetch balances for
20
+ * @param getTokenBalancesByContractArgs.filter.contractStatus - Optional filter for contract verification status
21
+ * @param options - Optional configuration for the query behavior
22
+ * @param options.hideCollectibles - If true, filters out ERC721 and ERC1155 tokens from the results
23
+ * @param options.disabled - If true, disables the query from automatically running
24
+ * @param options.retry - If true, retries failed queries
25
+ *
26
+ * @returns Query result containing an array of TokenBalance objects with the following properties:
27
+ * - `contractType`: Type of the token contract (ERC20, ERC721, ERC1155)
28
+ * - `contractAddress`: Address of the token contract
29
+ * - `accountAddress`: Address of the account holding the tokens
30
+ * - `tokenID`: (for ERC721/ERC1155) ID of the token
31
+ * - `balance`: Token balance as a string
32
+ * - `blockHash`: Hash of the block where this balance was last updated
33
+ * - `blockNumber`: Block number where this balance was last updated
34
+ * - `chainId`: Chain ID where the token exists
35
+ * - `contractInfo`: (optional) Additional token contract information including:
36
+ * - `name`: Token name
37
+ * - `symbol`: Token symbol
38
+ * - `decimals`: Number of decimals (for ERC20)
39
+ * - `logoURI`: URL of the token logo
40
+ *
41
+ * @see {@link https://docs.sequence.xyz/sdk/web/hooks/useGetTokenBalancesByContract} for more detailed documentation.
42
+ *
43
+ * @example
44
+ * ```tsx
45
+ * function TokenBalances() {
46
+ * const { data: balances } = useGetTokenBalancesByContract({
47
+ * chainIds: [1], // Ethereum mainnet
48
+ * filter: {
49
+ * contractAddresses: [
50
+ * '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
51
+ * '0xdac17f958d2ee523a2206206994597c13d831ec7' // USDT
52
+ * ],
53
+ * accountAddresses: ['0x123...']
54
+ * }
55
+ * })
56
+ *
57
+ * return balances?.map(balance => (
58
+ * <div key={balance.contractAddress}>
59
+ * {balance.contractInfo?.symbol}: {balance.balance}
60
+ * </div>
61
+ * ))
62
+ * }
63
+ * ```
16
64
  */
17
- export const useGetTokenBalancesByContract = (getTokenBalancesByContractArgs, options) => {
65
+ export const useGetTokenBalancesByContract = (args, options) => {
18
66
  const indexerGatewayClient = useIndexerGatewayClient();
19
- return useQuery({
20
- queryKey: [QUERY_KEYS.useGetTokenBalancesByContract, getTokenBalancesByContractArgs, options],
21
- queryFn: async () => {
22
- return await getTokenBalancesByContract(indexerGatewayClient, getTokenBalancesByContractArgs, options?.hideCollectibles ?? false);
67
+ return useInfiniteQuery({
68
+ queryKey: [QUERY_KEYS.useGetTokenBalancesByContract, args, options],
69
+ queryFn: ({ pageParam }) => {
70
+ return getTokenBalancesByContract(indexerGatewayClient, { ...args, page: pageParam });
23
71
  },
72
+ getNextPageParam: ({ page }) => {
73
+ return page?.more ? page : undefined;
74
+ },
75
+ initialPageParam: { pageSize: args.page?.pageSize },
24
76
  retry: options?.retry ?? true,
25
77
  staleTime: time.oneSecond * 30,
26
- enabled: !!getTokenBalancesByContractArgs.filter.accountAddresses?.[0] && !options?.disabled
78
+ enabled: args.filter.contractAddresses.length > 0 && !options?.disabled
27
79
  });
28
80
  };
29
81
  //# sourceMappingURL=useGetTokenBalancesByContract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useGetTokenBalancesByContract.js","sourceRoot":"","sources":["../../../../src/hooks/IndexerGateway/useGetTokenBalancesByContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAwD,MAAM,qBAAqB,CAAA;AACxG,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGlD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAEnE,MAAM,0BAA0B,GAAG,KAAK,EACtC,oBAA4C,EAC5C,8BAA6E,EAC7E,gBAAyB,EACA,EAAE;IAC3B,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,0BAA0B,CAAC,8BAA8B,CAAC,CAAA;IAEjG,IAAI,gBAAgB,EAAE,CAAC;QACrB,KAAK,MAAM,YAAY,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACxC,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAChD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,KAAK,YAAY,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,KAAK,YAAY,CAAC,OAAO,CACtG,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AACzD,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,8BAA6E,EAC7E,OAA4B,EAC5B,EAAE;IACF,MAAM,oBAAoB,GAAG,uBAAuB,EAAE,CAAA;IAEtD,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,UAAU,CAAC,6BAA6B,EAAE,8BAA8B,EAAE,OAAO,CAAC;QAC7F,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO,MAAM,0BAA0B,CACrC,oBAAoB,EACpB,8BAA8B,EAC9B,OAAO,EAAE,gBAAgB,IAAI,KAAK,CACnC,CAAA;QACH,CAAC;QACD,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;QAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE;QAC9B,OAAO,EAAE,CAAC,CAAC,8BAA8B,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ;KAC7F,CAAC,CAAA;AACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"useGetTokenBalancesByContract.js","sourceRoot":"","sources":["../../../../src/hooks/IndexerGateway/useGetTokenBalancesByContract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGlD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAEnE,MAAM,0BAA0B,GAAG,KAAK,EACtC,oBAA4C,EAC5C,IAAmD,EACnD,EAAE;IACF,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAA;IAEvE,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;QAC1D,IAAI,EAAE,GAAG,CAAC,IAAI;KACf,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,IAAmD,EAAE,OAAsB,EAAE,EAAE;IAC3H,MAAM,oBAAoB,GAAG,uBAAuB,EAAE,CAAA;IAEtD,OAAO,gBAAgB,CAAC;QACtB,QAAQ,EAAE,CAAC,UAAU,CAAC,6BAA6B,EAAE,IAAI,EAAE,OAAO,CAAC;QACnE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;YACzB,OAAO,0BAA0B,CAAC,oBAAoB,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;QACvF,CAAC;QACD,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YAC7B,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;QACtC,CAAC;QACD,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAU;QAC3D,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;QAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE;QAC9B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ;KACxE,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -1,7 +1,99 @@
1
1
  import { IndexerGateway, TokenBalance } from '@0xsequence/indexer';
2
- import { BalanceHookOptions } from '../../types';
2
+ import { HooksOptions } from '../../types';
3
3
  /**
4
- * @description Gets token balances, with individual token details
4
+ * Hook to fetch detailed token balances including individual token metadata.
5
+ *
6
+ * Key differences from other balance hooks:
7
+ * - useGetTokenBalancesSummary: Returns basic token info, faster but less detailed
8
+ * - useGetTokenBalancesByContract: Only fetches specific contracts
9
+ * - useGetSingleTokenBalanceSummary: Fetches a single token balance
10
+ *
11
+ * This hook is best used when you need full token details, especially for NFTs and collectibles
12
+ * where metadata is important (images, attributes, etc).
13
+ * Results are sorted by type: native tokens first, then ERC20s, then collectibles.
14
+ *
15
+ * @param getTokenBalancesDetailsArgs - Arguments for fetching token balances
16
+ * @param getTokenBalancesDetailsArgs.chainIds - Array of chain IDs to fetch balances from
17
+ * @param getTokenBalancesDetailsArgs.filter - Filter criteria for the query
18
+ * @param getTokenBalancesDetailsArgs.filter.accountAddresses - List of account addresses to fetch balances for
19
+ * @param getTokenBalancesDetailsArgs.filter.contractWhitelist - Optional list of contracts to include
20
+ * @param getTokenBalancesDetailsArgs.filter.contractBlacklist - Optional list of contracts to exclude
21
+ * @param getTokenBalancesDetailsArgs.filter.omitNativeBalances - If true, excludes native token balances
22
+ * @param getTokenBalancesDetailsArgs.filter.contractStatus - Optional filter for contract verification status
23
+ * @param options - Optional configuration for the query behavior
24
+ * @param options.hideCollectibles - If true, filters out ERC721 and ERC1155 tokens
25
+ * @param options.disabled - If true, disables the query from automatically running
26
+ * @param options.retry - If true (default), retries failed queries
27
+ *
28
+ * Query configuration:
29
+ * - Marks data as stale after 30 seconds
30
+ * - Retries failed requests by default
31
+ * - Only enabled when account address is present and not explicitly disabled
32
+ *
33
+ * @returns Query result containing an array of TokenBalance objects with detailed information:
34
+ * - `contractType`: Type of the token contract (NATIVE, ERC20, ERC721, ERC1155)
35
+ * - `contractAddress`: Address of the token contract
36
+ * - `accountAddress`: Address of the account holding the tokens
37
+ * - `tokenID`: (for NFTs) ID of the token
38
+ * - `balance`: Token balance as a string
39
+ * - `blockHash`: Hash of the block where this balance was last updated
40
+ * - `blockNumber`: Block number where this balance was last updated
41
+ * - `chainId`: Chain ID where the token exists
42
+ * - `contractInfo`: Additional token contract information including:
43
+ * - `name`: Token name
44
+ * - `symbol`: Token symbol
45
+ * - `decimals`: Number of decimals
46
+ * - `logoURI`: URL of the token logo
47
+ * - `tokenMetadata`: (for NFTs) Detailed token metadata including:
48
+ * - `name`: Token name
49
+ * - `description`: Token description
50
+ * - `image`: Token image URL
51
+ * - `attributes`: Array of token attributes
52
+ *
53
+ * @see {@link https://docs.sequence.xyz/sdk/web/hooks/useGetTokenBalancesDetails} for more detailed documentation.
54
+ *
55
+ * @example
56
+ * ```tsx
57
+ * import { useGetTokenBalancesDetails } from '@0xsequence/hooks'
58
+ *
59
+ * // Fetch all token balances with full details
60
+ * function TokenList() {
61
+ * const { data: tokens } = useGetTokenBalancesDetails({
62
+ * chainIds: [1], // Ethereum mainnet
63
+ * filter: {
64
+ * accountAddresses: ['0x123...'],
65
+ * omitNativeBalances: false,
66
+ * // Optional: only include specific tokens
67
+ * contractWhitelist: ['0x...', '0x...'],
68
+ * // Optional: exclude specific tokens
69
+ * contractBlacklist: ['0x...']
70
+ * }
71
+ * })
72
+ *
73
+ * return tokens?.map(token => (
74
+ * <div key={`${token.chainId}-${token.contractAddress}-${token.tokenID}`}>
75
+ * {token.contractType === 'ERC721' ? (
76
+ * // NFT display with metadata
77
+ * <NFTCard
78
+ * name={token.tokenMetadata?.name}
79
+ * image={token.tokenMetadata?.image}
80
+ * attributes={token.tokenMetadata?.attributes}
81
+ * />
82
+ * ) : (
83
+ * // Regular token display
84
+ * <TokenRow
85
+ * symbol={token.contractInfo?.symbol}
86
+ * balance={token.balance}
87
+ * decimals={token.contractInfo?.decimals}
88
+ * />
89
+ * )}
90
+ * </div>
91
+ * ))
92
+ * }
93
+ * ```
5
94
  */
6
- export declare const useGetTokenBalancesDetails: (getTokenBalancesDetailsArgs: IndexerGateway.GetTokenBalancesDetailsArgs, options?: BalanceHookOptions) => import("@tanstack/react-query").UseQueryResult<TokenBalance[], Error>;
95
+ export declare const useGetTokenBalancesDetails: (args: IndexerGateway.GetTokenBalancesDetailsArgs, options?: HooksOptions) => import("@tanstack/react-query").UseInfiniteQueryResult<import("@tanstack/react-query").InfiniteData<{
96
+ balances: TokenBalance[];
97
+ page: IndexerGateway.Page;
98
+ }, unknown>, Error>;
7
99
  //# sourceMappingURL=useGetTokenBalancesDetails.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useGetTokenBalancesDetails.d.ts","sourceRoot":"","sources":["../../../../src/hooks/IndexerGateway/useGetTokenBalancesDetails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,cAAc,EAA0B,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAIxG,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAqChD;;GAEG;AACH,eAAO,MAAM,0BAA0B,GACrC,6BAA6B,cAAc,CAAC,2BAA2B,EACvE,UAAU,kBAAkB,0EAa7B,CAAA"}
1
+ {"version":3,"file":"useGetTokenBalancesDetails.d.ts","sourceRoot":"","sources":["../../../../src/hooks/IndexerGateway/useGetTokenBalancesDetails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgC,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAIhG,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAmC1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2FG;AACH,eAAO,MAAM,0BAA0B,GAAI,MAAM,cAAc,CAAC,2BAA2B,EAAE,UAAU,YAAY;;;mBAgBlH,CAAA"}
@@ -1,38 +1,132 @@
1
- import { ContractType } from '@0xsequence/indexer';
2
- import { useQuery } from '@tanstack/react-query';
1
+ import { useInfiniteQuery } from '@tanstack/react-query';
3
2
  import { QUERY_KEYS, time } from '../../constants';
4
3
  import { createNativeTokenBalance, sortBalancesByType } from '../../utils/helpers';
5
4
  import { useIndexerGatewayClient } from './useIndexerGatewayClient';
6
- const getTokenBalancesDetails = async (getTokenBalancesDetailsArgs, indexerGatewayClient, hideCollectibles) => {
5
+ const getTokenBalancesDetails = async (indexerGatewayClient, args) => {
7
6
  try {
8
- const res = await indexerGatewayClient.getTokenBalancesDetails(getTokenBalancesDetailsArgs);
9
- if (hideCollectibles) {
10
- for (const chainBalance of res.balances) {
11
- chainBalance.results = chainBalance.results.filter(result => result.contractType !== ContractType.ERC721 && result.contractType !== ContractType.ERC1155);
12
- }
13
- }
7
+ const res = await indexerGatewayClient.getTokenBalancesDetails(args);
14
8
  const nativeTokens = res.nativeBalances.flatMap(nativeChainBalance => nativeChainBalance.results.map(nativeTokenBalance => createNativeTokenBalance(nativeChainBalance.chainId, nativeTokenBalance.accountAddress, nativeTokenBalance.balance)));
15
9
  const tokens = res.balances.flatMap(chainBalance => chainBalance.results);
16
10
  const sortedBalances = sortBalancesByType([...nativeTokens, ...tokens]);
17
- return [...sortedBalances.nativeTokens, ...sortedBalances.erc20Tokens, ...sortedBalances.collectibles];
11
+ return {
12
+ balances: [
13
+ ...(res.page.after ? [] : [...sortedBalances.nativeTokens]),
14
+ ...sortedBalances.erc20Tokens,
15
+ ...sortedBalances.collectibles
16
+ ],
17
+ page: res.page
18
+ };
18
19
  }
19
20
  catch (e) {
20
21
  throw e;
21
22
  }
22
23
  };
23
24
  /**
24
- * @description Gets token balances, with individual token details
25
+ * Hook to fetch detailed token balances including individual token metadata.
26
+ *
27
+ * Key differences from other balance hooks:
28
+ * - useGetTokenBalancesSummary: Returns basic token info, faster but less detailed
29
+ * - useGetTokenBalancesByContract: Only fetches specific contracts
30
+ * - useGetSingleTokenBalanceSummary: Fetches a single token balance
31
+ *
32
+ * This hook is best used when you need full token details, especially for NFTs and collectibles
33
+ * where metadata is important (images, attributes, etc).
34
+ * Results are sorted by type: native tokens first, then ERC20s, then collectibles.
35
+ *
36
+ * @param getTokenBalancesDetailsArgs - Arguments for fetching token balances
37
+ * @param getTokenBalancesDetailsArgs.chainIds - Array of chain IDs to fetch balances from
38
+ * @param getTokenBalancesDetailsArgs.filter - Filter criteria for the query
39
+ * @param getTokenBalancesDetailsArgs.filter.accountAddresses - List of account addresses to fetch balances for
40
+ * @param getTokenBalancesDetailsArgs.filter.contractWhitelist - Optional list of contracts to include
41
+ * @param getTokenBalancesDetailsArgs.filter.contractBlacklist - Optional list of contracts to exclude
42
+ * @param getTokenBalancesDetailsArgs.filter.omitNativeBalances - If true, excludes native token balances
43
+ * @param getTokenBalancesDetailsArgs.filter.contractStatus - Optional filter for contract verification status
44
+ * @param options - Optional configuration for the query behavior
45
+ * @param options.hideCollectibles - If true, filters out ERC721 and ERC1155 tokens
46
+ * @param options.disabled - If true, disables the query from automatically running
47
+ * @param options.retry - If true (default), retries failed queries
48
+ *
49
+ * Query configuration:
50
+ * - Marks data as stale after 30 seconds
51
+ * - Retries failed requests by default
52
+ * - Only enabled when account address is present and not explicitly disabled
53
+ *
54
+ * @returns Query result containing an array of TokenBalance objects with detailed information:
55
+ * - `contractType`: Type of the token contract (NATIVE, ERC20, ERC721, ERC1155)
56
+ * - `contractAddress`: Address of the token contract
57
+ * - `accountAddress`: Address of the account holding the tokens
58
+ * - `tokenID`: (for NFTs) ID of the token
59
+ * - `balance`: Token balance as a string
60
+ * - `blockHash`: Hash of the block where this balance was last updated
61
+ * - `blockNumber`: Block number where this balance was last updated
62
+ * - `chainId`: Chain ID where the token exists
63
+ * - `contractInfo`: Additional token contract information including:
64
+ * - `name`: Token name
65
+ * - `symbol`: Token symbol
66
+ * - `decimals`: Number of decimals
67
+ * - `logoURI`: URL of the token logo
68
+ * - `tokenMetadata`: (for NFTs) Detailed token metadata including:
69
+ * - `name`: Token name
70
+ * - `description`: Token description
71
+ * - `image`: Token image URL
72
+ * - `attributes`: Array of token attributes
73
+ *
74
+ * @see {@link https://docs.sequence.xyz/sdk/web/hooks/useGetTokenBalancesDetails} for more detailed documentation.
75
+ *
76
+ * @example
77
+ * ```tsx
78
+ * import { useGetTokenBalancesDetails } from '@0xsequence/hooks'
79
+ *
80
+ * // Fetch all token balances with full details
81
+ * function TokenList() {
82
+ * const { data: tokens } = useGetTokenBalancesDetails({
83
+ * chainIds: [1], // Ethereum mainnet
84
+ * filter: {
85
+ * accountAddresses: ['0x123...'],
86
+ * omitNativeBalances: false,
87
+ * // Optional: only include specific tokens
88
+ * contractWhitelist: ['0x...', '0x...'],
89
+ * // Optional: exclude specific tokens
90
+ * contractBlacklist: ['0x...']
91
+ * }
92
+ * })
93
+ *
94
+ * return tokens?.map(token => (
95
+ * <div key={`${token.chainId}-${token.contractAddress}-${token.tokenID}`}>
96
+ * {token.contractType === 'ERC721' ? (
97
+ * // NFT display with metadata
98
+ * <NFTCard
99
+ * name={token.tokenMetadata?.name}
100
+ * image={token.tokenMetadata?.image}
101
+ * attributes={token.tokenMetadata?.attributes}
102
+ * />
103
+ * ) : (
104
+ * // Regular token display
105
+ * <TokenRow
106
+ * symbol={token.contractInfo?.symbol}
107
+ * balance={token.balance}
108
+ * decimals={token.contractInfo?.decimals}
109
+ * />
110
+ * )}
111
+ * </div>
112
+ * ))
113
+ * }
114
+ * ```
25
115
  */
26
- export const useGetTokenBalancesDetails = (getTokenBalancesDetailsArgs, options) => {
116
+ export const useGetTokenBalancesDetails = (args, options) => {
27
117
  const indexerGatewayClient = useIndexerGatewayClient();
28
- return useQuery({
29
- queryKey: [QUERY_KEYS.useGetTokenBalancesDetails, getTokenBalancesDetailsArgs, options],
30
- queryFn: async () => {
31
- return await getTokenBalancesDetails(getTokenBalancesDetailsArgs, indexerGatewayClient, options?.hideCollectibles ?? false);
118
+ return useInfiniteQuery({
119
+ queryKey: [QUERY_KEYS.useGetTokenBalancesDetails, args, options],
120
+ queryFn: ({ pageParam }) => {
121
+ return getTokenBalancesDetails(indexerGatewayClient, { ...args, page: pageParam });
32
122
  },
123
+ getNextPageParam: ({ page }) => {
124
+ return page?.more ? page : undefined;
125
+ },
126
+ initialPageParam: { pageSize: args.page?.pageSize },
33
127
  retry: options?.retry ?? true,
34
128
  staleTime: time.oneSecond * 30,
35
- enabled: !!getTokenBalancesDetailsArgs.filter.accountAddresses[0] && !options?.disabled
129
+ enabled: args.filter.accountAddresses.length > 0 && !options?.disabled
36
130
  });
37
131
  };
38
132
  //# sourceMappingURL=useGetTokenBalancesDetails.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useGetTokenBalancesDetails.js","sourceRoot":"","sources":["../../../../src/hooks/IndexerGateway/useGetTokenBalancesDetails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAwD,MAAM,qBAAqB,CAAA;AACxG,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAElF,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAEnE,MAAM,uBAAuB,GAAG,KAAK,EACnC,2BAAuE,EACvE,oBAA4C,EAC5C,gBAAyB,EACA,EAAE;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,uBAAuB,CAAC,2BAA2B,CAAC,CAAA;QAE3F,IAAI,gBAAgB,EAAE,CAAC;YACrB,KAAK,MAAM,YAAY,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACxC,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAChD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,KAAK,YAAY,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,KAAK,YAAY,CAAC,OAAO,CACtG,CAAA;YACH,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAmB,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CACnF,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAClD,wBAAwB,CAAC,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,CAAC,cAAc,EAAE,kBAAkB,CAAC,OAAO,CAAC,CACpH,CACF,CAAA;QAED,MAAM,MAAM,GAAmB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAEzF,MAAM,cAAc,GAAG,kBAAkB,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC,CAAC,CAAA;QAEvE,OAAO,CAAC,GAAG,cAAc,CAAC,YAAY,EAAE,GAAG,cAAc,CAAC,WAAW,EAAE,GAAG,cAAc,CAAC,YAAY,CAAC,CAAA;IACxG,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,CAAA;IACT,CAAC;AACH,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,2BAAuE,EACvE,OAA4B,EAC5B,EAAE;IACF,MAAM,oBAAoB,GAAG,uBAAuB,EAAE,CAAA;IAEtD,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,UAAU,CAAC,0BAA0B,EAAE,2BAA2B,EAAE,OAAO,CAAC;QACvF,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO,MAAM,uBAAuB,CAAC,2BAA2B,EAAE,oBAAoB,EAAE,OAAO,EAAE,gBAAgB,IAAI,KAAK,CAAC,CAAA;QAC7H,CAAC;QACD,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;QAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE;QAC9B,OAAO,EAAE,CAAC,CAAC,2BAA2B,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ;KACxF,CAAC,CAAA;AACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"useGetTokenBalancesDetails.js","sourceRoot":"","sources":["../../../../src/hooks/IndexerGateway/useGetTokenBalancesDetails.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAElF,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAEnE,MAAM,uBAAuB,GAAG,KAAK,EACnC,oBAA4C,EAC5C,IAAgD,EAChD,EAAE;IACF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAA;QAEpE,MAAM,YAAY,GAAmB,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CACnF,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAClD,wBAAwB,CAAC,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,CAAC,cAAc,EAAE,kBAAkB,CAAC,OAAO,CAAC,CACpH,CACF,CAAA;QAED,MAAM,MAAM,GAAmB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAEzF,MAAM,cAAc,GAAG,kBAAkB,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC,CAAC,CAAA;QAEvE,OAAO;YACL,QAAQ,EAAE;gBACR,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;gBAC3D,GAAG,cAAc,CAAC,WAAW;gBAC7B,GAAG,cAAc,CAAC,YAAY;aAC/B;YACD,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAA;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,CAAA;IACT,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2FG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,IAAgD,EAAE,OAAsB,EAAE,EAAE;IACrH,MAAM,oBAAoB,GAAG,uBAAuB,EAAE,CAAA;IAEtD,OAAO,gBAAgB,CAAC;QACtB,QAAQ,EAAE,CAAC,UAAU,CAAC,0BAA0B,EAAE,IAAI,EAAE,OAAO,CAAC;QAChE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;YACzB,OAAO,uBAAuB,CAAC,oBAAoB,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;QACpF,CAAC;QACD,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YAC7B,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;QACtC,CAAC;QACD,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAU;QAC3D,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;QAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE;QAC9B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ;KACvE,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -1,7 +1,74 @@
1
1
  import { IndexerGateway, TokenBalance } from '@0xsequence/indexer';
2
- import { BalanceHookOptions } from '../../types';
2
+ import { HooksOptions } from '../../types';
3
3
  /**
4
- * @description Gets the token balances, with summarized contract info but not individual token details for non-native contracts
4
+ * Hook to fetch token balances with summarized contract information.
5
+ * This is a lighter version of useGetTokenBalancesDetails - it returns basic token information
6
+ * without detailed metadata, making it faster and more suitable for token lists and balances display.
7
+ * Results are sorted by type: native tokens first, then ERC20s, then collectibles.
8
+ *
9
+ * @param getTokenBalancesSummaryArgs - Arguments for fetching token balances
10
+ * @param getTokenBalancesSummaryArgs.chainIds - Array of chain IDs to fetch balances from
11
+ * @param getTokenBalancesSummaryArgs.filter - Filter criteria for the query
12
+ * @param getTokenBalancesSummaryArgs.filter.accountAddresses - List of account addresses to fetch balances for
13
+ * @param getTokenBalancesSummaryArgs.filter.contractWhitelist - Optional list of contracts to include
14
+ * @param getTokenBalancesSummaryArgs.filter.contractBlacklist - Optional list of contracts to exclude
15
+ * @param getTokenBalancesSummaryArgs.filter.omitNativeBalances - If true, excludes native token balances
16
+ * @param getTokenBalancesSummaryArgs.filter.contractStatus - Optional filter for contract verification status
17
+ * @param options - Optional configuration for the query behavior
18
+ * @param options.hideCollectibles - If true, filters out ERC721 and ERC1155 tokens
19
+ * @param options.disabled - If true, disables the query from automatically running
20
+ * @param options.retry - If true (default), retries failed queries
21
+ *
22
+ * Query configuration:
23
+ * - Marks data as stale after 30 seconds
24
+ * - Retries failed requests by default
25
+ * - Only enabled when account address is present and not explicitly disabled
26
+ *
27
+ * @returns Query result containing an array of TokenBalance objects with basic information:
28
+ * - `contractType`: Type of the token contract (NATIVE, ERC20, ERC721, ERC1155)
29
+ * - `contractAddress`: Address of the token contract
30
+ * - `accountAddress`: Address of the account holding the tokens
31
+ * - `balance`: Token balance as a string
32
+ * - `chainId`: Chain ID where the token exists
33
+ * - `contractInfo`: Basic token contract information including:
34
+ * - `name`: Token name
35
+ * - `symbol`: Token symbol
36
+ * - `decimals`: Number of decimals
37
+ * - `logoURI`: URL of the token logo
38
+ *
39
+ * @see {@link https://docs.sequence.xyz/sdk/web/hooks/useGetTokenBalancesSummary} for more detailed documentation.
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * import { useGetTokenBalancesSummary } from '@0xsequence/hooks'
44
+ *
45
+ * // Fetch token balances for a wallet
46
+ * function TokenBalances() {
47
+ * const { data: tokens } = useGetTokenBalancesSummary({
48
+ * chainIds: [1, 137], // Ethereum and Polygon
49
+ * filter: {
50
+ * accountAddresses: ['0x123...'],
51
+ * omitNativeBalances: false,
52
+ * // Optional: filter specific tokens
53
+ * contractWhitelist: ['0x...', '0x...']
54
+ * }
55
+ * })
56
+ *
57
+ * return tokens?.map(token => (
58
+ * <div key={`${token.chainId}-${token.contractAddress}`}>
59
+ * <TokenRow
60
+ * symbol={token.contractInfo?.symbol}
61
+ * balance={token.balance}
62
+ * decimals={token.contractInfo?.decimals}
63
+ * logoURI={token.contractInfo?.logoURI}
64
+ * />
65
+ * </div>
66
+ * ))
67
+ * }
68
+ * ```
5
69
  */
6
- export declare const useGetTokenBalancesSummary: (getTokenBalancesSummaryArgs: IndexerGateway.GetTokenBalancesSummaryArgs, options?: BalanceHookOptions) => import("@tanstack/react-query").UseQueryResult<TokenBalance[], Error>;
70
+ export declare const useGetTokenBalancesSummary: (args: IndexerGateway.GetTokenBalancesSummaryArgs, options?: HooksOptions) => import("@tanstack/react-query").UseInfiniteQueryResult<import("@tanstack/react-query").InfiniteData<{
71
+ balances: TokenBalance[];
72
+ page: IndexerGateway.Page;
73
+ }, unknown>, Error>;
7
74
  //# sourceMappingURL=useGetTokenBalancesSummary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useGetTokenBalancesSummary.d.ts","sourceRoot":"","sources":["../../../../src/hooks/IndexerGateway/useGetTokenBalancesSummary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,cAAc,EAA0B,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAIxG,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAqChD;;GAEG;AACH,eAAO,MAAM,0BAA0B,GACrC,6BAA6B,cAAc,CAAC,2BAA2B,EACvE,UAAU,kBAAkB,0EAa7B,CAAA"}
1
+ {"version":3,"file":"useGetTokenBalancesSummary.d.ts","sourceRoot":"","sources":["../../../../src/hooks/IndexerGateway/useGetTokenBalancesSummary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgC,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAIhG,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAmC1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AACH,eAAO,MAAM,0BAA0B,GAAI,MAAM,cAAc,CAAC,2BAA2B,EAAE,UAAU,YAAY;;;mBAgBlH,CAAA"}