@tokemak/autopool-hooks
v0.1.2
Published
React Query hooks over the `@tokemak/autopools` SDK read surface. This is the shared hooks layer for apps that render autopool data — the SDK stays headless (viem + fetch only); this package adds caching, keys, and query-options factories on top.
Readme
@tokemak/autopool-hooks
React Query hooks over the @tokemak/autopools SDK read surface. This is the
shared hooks layer for apps that render autopool data — the SDK stays headless
(viem + fetch only); this package adds caching, keys, and query-options
factories on top.
The surface is deliberately minimal and grows with real consumers: today it
covers autopool history, user positions, user balance-change history, and user
rewards. When a call site needs another SDK read (e.g. getAutopools), add
its hook here following the same pattern rather than writing an app-local one.
Install
pnpm add @tokemak/autopool-hooks @tokemak/autopools @tanstack/react-query viemPeer deps: react 19.x, @tanstack/react-query 5.x, viem 2.x. There is no
wagmi dependency — see "Client plumbing" below.
Quickstart
import { useAutopoolHistory } from "@tokemak/autopool-hooks";
function Sparkline({ client }: { client: PublicClient }) {
// client is a chain-bound viem PublicClient — chainId is derived from it
const { data: history } = useAutopoolHistory(client, {
autopool: "0x...",
days: 30
});
...
}The autopoolHistoryQueryOptions factory (same params) serves useQueries
fan-outs, prefetching, and cache seeding:
const histories = useQueries({
queries: pools.map((p) =>
autopoolHistoryQueryOptions(getChainClient(p.chainId), {
autopool: p.address,
days: 30
})
)
});Surface
| Hook | SDK query | Key |
| ------------------------------------------------ | ----------------------- | --------------------------------------------------- |
| useAutopoolHistory(client, {autopool, days?}) | getAutopoolHistory | ["autopoolHistory", chainId, address, days] |
| useAutopoolHolders(client, {autopool, first?}) | getAutopoolHolders | ["autopoolHolders", chainId, address, first] |
| useAutopoolRebalances(client, {autopool}) | getAutopoolRebalances | ["autopoolRebalances", chainId, address] |
| useUserHistory(client, {user, autopool?}) | getUserHistory | ["autopoolUserHistory", chainId, user, autopool] |
| useUserNavHistory(client, {user, days?}) | getUserNavHistory | ["autopoolUserNavHistory", chainId, user, days] |
| useUserPositions(client, {user, prices?}) | getUserPositions | ["autopoolUserPositions", chainId, user] |
| useUserPosition(client, {user, autopool, ...}) | getUserPosition | ["autopoolUserPosition", chainId, user, autopool] |
| useUserRewards(client, {user, prices?}) | getUserRewards | ["autopoolUserRewards", chainId, user] |
User-scoped hooks accept user: Address | undefined and stay disabled until
it exists, so useAccount().address can be passed straight in.
Deliberately not here: useSwapQuote — quote lifecycles (expiry, countdown,
refetch discipline) belong to the consuming app's tx-flow state, not a generic
cached query; call getSwapQuote from the SDK directly inside that flow.
Client plumbing
Hooks are client-first, mirroring the SDK convention: every call takes a
chain-bound viem PublicClient and derives chainId from it
(requireChainId). The package does not know about wagmi, so it works in any
React app:
- wagmi apps: write a small
getChainClient(chainId)helper over your wagmi config singleton (seeapps/webapp/src/lib/sdk-client.ts). - non-wagmi apps:
createTokemakClient({ chainId, rpcUrl })from@tokemak/sdk-core.
Quirks
- Errors throw (SDK
TokemakSdkErrorsubclasses) — surface them via React Query'serror/isError; "no data" resolves to an empty result, never an error. - One hook call = one chain. Multi-chain views fan out with
useQueriesover the*QueryOptionsfactories.
