@sodax/dapp-kit 1.0.2-beta → 1.0.4-beta-rc1

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.
package/dist/index.d.mts CHANGED
@@ -424,6 +424,42 @@ type UseATokenParams = {
424
424
  */
425
425
  declare function useAToken({ aToken, queryOptions }: UseATokenParams): UseQueryResult<XToken, Error>;
426
426
 
427
+ type UseATokensBalancesParams = {
428
+ aTokens: readonly Address[];
429
+ spokeProvider?: SpokeProvider;
430
+ userAddress?: string;
431
+ queryOptions?: UseQueryOptions<Map<Address, bigint>, Error>;
432
+ };
433
+ /**
434
+ * React hook to fetch and cache aToken balances for multiple aToken addresses in a single multicall.
435
+ *
436
+ * Accepts an array of aToken addresses, a spoke provider, and user address. The hook derives the user's
437
+ * hub wallet address and then fetches balanceOf for each aToken in a single multicall. Returns a Map
438
+ * of aToken address to balance, with querying/caching powered by React Query. This hook uses viem's
439
+ * multicall to batch all requests into a single RPC call for better performance.
440
+ *
441
+ * @param {UseATokensBalancesParams} params - Required params object:
442
+ * @property {readonly Address[]} aTokens - Array of aToken contract addresses to query balances for.
443
+ * @property {SpokeProvider} spokeProvider - The spoke provider to derive hub wallet address from.
444
+ * @property {string} userAddress - User's wallet address on the spoke chain.
445
+ * @property {UseQueryOptions<Map<Address, bigint>, Error>} queryOptions - React Query options to control query (e.g., staleTime, refetch, etc.).
446
+ *
447
+ * @returns {UseQueryResult<Map<Address, bigint>, Error>} React Query result object:
448
+ * - data: Map of aToken address to balance, if available
449
+ * - isLoading: Boolean loading state
450
+ * - error: Error, if API call fails
451
+ *
452
+ * @example
453
+ * const { data: aTokenBalances, isLoading, error } = useATokensBalances({
454
+ * aTokens: [aToken1, aToken2, aToken3],
455
+ * spokeProvider,
456
+ * userAddress: '0x...',
457
+ * queryOptions: {}
458
+ * });
459
+ * const aToken1Balance = aTokenBalances?.get(aToken1);
460
+ */
461
+ declare function useATokensBalances({ aTokens, spokeProvider, userAddress, queryOptions, }: UseATokensBalancesParams): UseQueryResult<Map<Address, bigint>, Error>;
462
+
427
463
  type UseReservesUsdFormatParams = {
428
464
  queryOptions?: UseQueryOptions<(ReserveData & {
429
465
  priceInMarketReferenceCurrency: string;
@@ -1756,4 +1792,4 @@ interface SodaxProviderProps {
1756
1792
  }
1757
1793
  declare const SodaxProvider: ({ children, testnet, config, rpcConfig }: SodaxProviderProps) => ReactElement;
1758
1794
 
1759
- export { type BackendPaginationParams, MIGRATION_MODE_BNUSD, MIGRATION_MODE_ICX_SODA, type MigrationIntentParams, type MigrationMode, SodaxProvider, type UseATokenParams, type UseBorrowParams, type UseMMAllowanceParams, type UseMMApproveParams, type UseRepayParams, type UseReservesDataParams, type UseReservesUsdFormatParams, type UseSupplyParams, type UseUserFormattedSummaryParams, type UseUserReservesDataParams, type UseWithdrawParams, useAToken, useBackendAllMoneyMarketAssets, useBackendAllMoneyMarketBorrowers, useBackendIntentByHash, useBackendIntentByTxHash, useBackendMoneyMarketAsset, useBackendMoneyMarketAssetBorrowers, useBackendMoneyMarketAssetSuppliers, useBackendMoneyMarketPosition, useBackendOrderbook, useBackendUserIntents, useBorrow, useBridge, useBridgeAllowance, useBridgeApprove, useCancelLimitOrder, useCancelSwap, useCancelUnstake, useClaim, useConvertedAssets, useCreateLimitOrder, useDeriveUserWalletAddress, useEstimateGas, useGetBridgeableAmount, useGetBridgeableTokens, useHubProvider, useInstantUnstake, useInstantUnstakeAllowance, useInstantUnstakeApprove, useInstantUnstakeRatio, useMMAllowance, useMMApprove, useMigrate, useMigrationAllowance, useMigrationApprove, useQuote, useRepay, useRequestTrustline, useReservesData, useReservesUsdFormat, useSodaxContext, useSpokeProvider, useStake, useStakeAllowance, useStakeApprove, useStakeRatio, useStakingConfig, useStakingInfo, useStatus, useStellarTrustlineCheck, useSupply, useSwap, useSwapAllowance, useSwapApprove, useUnstake, useUnstakeAllowance, useUnstakeApprove, useUnstakingInfo, useUnstakingInfoWithPenalty, useUserFormattedSummary, useUserReservesData, useWithdraw };
1795
+ export { type BackendPaginationParams, MIGRATION_MODE_BNUSD, MIGRATION_MODE_ICX_SODA, type MigrationIntentParams, type MigrationMode, SodaxProvider, type UseATokenParams, type UseATokensBalancesParams, type UseBorrowParams, type UseMMAllowanceParams, type UseMMApproveParams, type UseRepayParams, type UseReservesDataParams, type UseReservesUsdFormatParams, type UseSupplyParams, type UseUserFormattedSummaryParams, type UseUserReservesDataParams, type UseWithdrawParams, useAToken, useATokensBalances, useBackendAllMoneyMarketAssets, useBackendAllMoneyMarketBorrowers, useBackendIntentByHash, useBackendIntentByTxHash, useBackendMoneyMarketAsset, useBackendMoneyMarketAssetBorrowers, useBackendMoneyMarketAssetSuppliers, useBackendMoneyMarketPosition, useBackendOrderbook, useBackendUserIntents, useBorrow, useBridge, useBridgeAllowance, useBridgeApprove, useCancelLimitOrder, useCancelSwap, useCancelUnstake, useClaim, useConvertedAssets, useCreateLimitOrder, useDeriveUserWalletAddress, useEstimateGas, useGetBridgeableAmount, useGetBridgeableTokens, useHubProvider, useInstantUnstake, useInstantUnstakeAllowance, useInstantUnstakeApprove, useInstantUnstakeRatio, useMMAllowance, useMMApprove, useMigrate, useMigrationAllowance, useMigrationApprove, useQuote, useRepay, useRequestTrustline, useReservesData, useReservesUsdFormat, useSodaxContext, useSpokeProvider, useStake, useStakeAllowance, useStakeApprove, useStakeRatio, useStakingConfig, useStakingInfo, useStatus, useStellarTrustlineCheck, useSupply, useSwap, useSwapAllowance, useSwapApprove, useUnstake, useUnstakeAllowance, useUnstakeApprove, useUnstakingInfo, useUnstakingInfoWithPenalty, useUserFormattedSummary, useUserReservesData, useWithdraw };
package/dist/index.d.ts CHANGED
@@ -424,6 +424,42 @@ type UseATokenParams = {
424
424
  */
425
425
  declare function useAToken({ aToken, queryOptions }: UseATokenParams): UseQueryResult<XToken, Error>;
426
426
 
427
+ type UseATokensBalancesParams = {
428
+ aTokens: readonly Address[];
429
+ spokeProvider?: SpokeProvider;
430
+ userAddress?: string;
431
+ queryOptions?: UseQueryOptions<Map<Address, bigint>, Error>;
432
+ };
433
+ /**
434
+ * React hook to fetch and cache aToken balances for multiple aToken addresses in a single multicall.
435
+ *
436
+ * Accepts an array of aToken addresses, a spoke provider, and user address. The hook derives the user's
437
+ * hub wallet address and then fetches balanceOf for each aToken in a single multicall. Returns a Map
438
+ * of aToken address to balance, with querying/caching powered by React Query. This hook uses viem's
439
+ * multicall to batch all requests into a single RPC call for better performance.
440
+ *
441
+ * @param {UseATokensBalancesParams} params - Required params object:
442
+ * @property {readonly Address[]} aTokens - Array of aToken contract addresses to query balances for.
443
+ * @property {SpokeProvider} spokeProvider - The spoke provider to derive hub wallet address from.
444
+ * @property {string} userAddress - User's wallet address on the spoke chain.
445
+ * @property {UseQueryOptions<Map<Address, bigint>, Error>} queryOptions - React Query options to control query (e.g., staleTime, refetch, etc.).
446
+ *
447
+ * @returns {UseQueryResult<Map<Address, bigint>, Error>} React Query result object:
448
+ * - data: Map of aToken address to balance, if available
449
+ * - isLoading: Boolean loading state
450
+ * - error: Error, if API call fails
451
+ *
452
+ * @example
453
+ * const { data: aTokenBalances, isLoading, error } = useATokensBalances({
454
+ * aTokens: [aToken1, aToken2, aToken3],
455
+ * spokeProvider,
456
+ * userAddress: '0x...',
457
+ * queryOptions: {}
458
+ * });
459
+ * const aToken1Balance = aTokenBalances?.get(aToken1);
460
+ */
461
+ declare function useATokensBalances({ aTokens, spokeProvider, userAddress, queryOptions, }: UseATokensBalancesParams): UseQueryResult<Map<Address, bigint>, Error>;
462
+
427
463
  type UseReservesUsdFormatParams = {
428
464
  queryOptions?: UseQueryOptions<(ReserveData & {
429
465
  priceInMarketReferenceCurrency: string;
@@ -1756,4 +1792,4 @@ interface SodaxProviderProps {
1756
1792
  }
1757
1793
  declare const SodaxProvider: ({ children, testnet, config, rpcConfig }: SodaxProviderProps) => ReactElement;
1758
1794
 
1759
- export { type BackendPaginationParams, MIGRATION_MODE_BNUSD, MIGRATION_MODE_ICX_SODA, type MigrationIntentParams, type MigrationMode, SodaxProvider, type UseATokenParams, type UseBorrowParams, type UseMMAllowanceParams, type UseMMApproveParams, type UseRepayParams, type UseReservesDataParams, type UseReservesUsdFormatParams, type UseSupplyParams, type UseUserFormattedSummaryParams, type UseUserReservesDataParams, type UseWithdrawParams, useAToken, useBackendAllMoneyMarketAssets, useBackendAllMoneyMarketBorrowers, useBackendIntentByHash, useBackendIntentByTxHash, useBackendMoneyMarketAsset, useBackendMoneyMarketAssetBorrowers, useBackendMoneyMarketAssetSuppliers, useBackendMoneyMarketPosition, useBackendOrderbook, useBackendUserIntents, useBorrow, useBridge, useBridgeAllowance, useBridgeApprove, useCancelLimitOrder, useCancelSwap, useCancelUnstake, useClaim, useConvertedAssets, useCreateLimitOrder, useDeriveUserWalletAddress, useEstimateGas, useGetBridgeableAmount, useGetBridgeableTokens, useHubProvider, useInstantUnstake, useInstantUnstakeAllowance, useInstantUnstakeApprove, useInstantUnstakeRatio, useMMAllowance, useMMApprove, useMigrate, useMigrationAllowance, useMigrationApprove, useQuote, useRepay, useRequestTrustline, useReservesData, useReservesUsdFormat, useSodaxContext, useSpokeProvider, useStake, useStakeAllowance, useStakeApprove, useStakeRatio, useStakingConfig, useStakingInfo, useStatus, useStellarTrustlineCheck, useSupply, useSwap, useSwapAllowance, useSwapApprove, useUnstake, useUnstakeAllowance, useUnstakeApprove, useUnstakingInfo, useUnstakingInfoWithPenalty, useUserFormattedSummary, useUserReservesData, useWithdraw };
1795
+ export { type BackendPaginationParams, MIGRATION_MODE_BNUSD, MIGRATION_MODE_ICX_SODA, type MigrationIntentParams, type MigrationMode, SodaxProvider, type UseATokenParams, type UseATokensBalancesParams, type UseBorrowParams, type UseMMAllowanceParams, type UseMMApproveParams, type UseRepayParams, type UseReservesDataParams, type UseReservesUsdFormatParams, type UseSupplyParams, type UseUserFormattedSummaryParams, type UseUserReservesDataParams, type UseWithdrawParams, useAToken, useATokensBalances, useBackendAllMoneyMarketAssets, useBackendAllMoneyMarketBorrowers, useBackendIntentByHash, useBackendIntentByTxHash, useBackendMoneyMarketAsset, useBackendMoneyMarketAssetBorrowers, useBackendMoneyMarketAssetSuppliers, useBackendMoneyMarketPosition, useBackendOrderbook, useBackendUserIntents, useBorrow, useBridge, useBridgeAllowance, useBridgeApprove, useCancelLimitOrder, useCancelSwap, useCancelUnstake, useClaim, useConvertedAssets, useCreateLimitOrder, useDeriveUserWalletAddress, useEstimateGas, useGetBridgeableAmount, useGetBridgeableTokens, useHubProvider, useInstantUnstake, useInstantUnstakeAllowance, useInstantUnstakeApprove, useInstantUnstakeRatio, useMMAllowance, useMMApprove, useMigrate, useMigrationAllowance, useMigrationApprove, useQuote, useRepay, useRequestTrustline, useReservesData, useReservesUsdFormat, useSodaxContext, useSpokeProvider, useStake, useStakeAllowance, useStakeApprove, useStakeRatio, useStakingConfig, useStakingInfo, useStatus, useStellarTrustlineCheck, useSupply, useSwap, useSwapAllowance, useSwapApprove, useUnstake, useUnstakeAllowance, useUnstakeApprove, useUnstakingInfo, useUnstakingInfoWithPenalty, useUserFormattedSummary, useUserReservesData, useWithdraw };
package/dist/index.js CHANGED
@@ -366,6 +366,45 @@ function useAToken({ aToken, queryOptions }) {
366
366
  }
367
367
  });
368
368
  }
369
+ function useATokensBalances({
370
+ aTokens,
371
+ spokeProvider,
372
+ userAddress,
373
+ queryOptions
374
+ }) {
375
+ const { sodax } = useSodaxContext();
376
+ const defaultQueryOptions = {
377
+ queryKey: ["mm", "aTokensBalances", aTokens, spokeProvider?.chainConfig.chain.id, userAddress],
378
+ enabled: aTokens.length > 0 && aTokens.every((token) => viem.isAddress(token)) && !!spokeProvider && !!userAddress
379
+ };
380
+ queryOptions = {
381
+ ...defaultQueryOptions,
382
+ ...queryOptions
383
+ // override default query options if provided
384
+ };
385
+ return reactQuery.useQuery({
386
+ ...queryOptions,
387
+ queryFn: async () => {
388
+ if (aTokens.length === 0) {
389
+ return /* @__PURE__ */ new Map();
390
+ }
391
+ if (!spokeProvider || !userAddress) {
392
+ throw new Error("Spoke provider and user address are required");
393
+ }
394
+ for (const aToken of aTokens) {
395
+ if (!viem.isAddress(aToken)) {
396
+ throw new Error(`Invalid aToken address: ${aToken}`);
397
+ }
398
+ }
399
+ const hubWalletAddress = await sdk.deriveUserWalletAddress(
400
+ sodax.hubProvider,
401
+ spokeProvider.chainConfig.chain.id,
402
+ userAddress
403
+ );
404
+ return await sodax.moneyMarket.data.getATokensBalances(aTokens, hubWalletAddress);
405
+ }
406
+ });
407
+ }
369
408
  function useReservesUsdFormat(params) {
370
409
  const { sodax } = useSodaxContext();
371
410
  const defaultQueryOptions = { queryKey: ["mm", "reservesUsdFormat"] };
@@ -1426,6 +1465,7 @@ exports.MIGRATION_MODE_BNUSD = MIGRATION_MODE_BNUSD;
1426
1465
  exports.MIGRATION_MODE_ICX_SODA = MIGRATION_MODE_ICX_SODA;
1427
1466
  exports.SodaxProvider = SodaxProvider;
1428
1467
  exports.useAToken = useAToken;
1468
+ exports.useATokensBalances = useATokensBalances;
1429
1469
  exports.useBackendAllMoneyMarketAssets = useBackendAllMoneyMarketAssets;
1430
1470
  exports.useBackendAllMoneyMarketBorrowers = useBackendAllMoneyMarketBorrowers;
1431
1471
  exports.useBackendIntentByHash = useBackendIntentByHash;