@liberfi.io/react 0.3.33 → 0.3.35

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/DexClientContext.ts","../src/hooks/useDexClient.ts","../src/hooks/createQueryHook.ts","../src/hooks/createInfiniteQueryHook.ts","../src/hooks/queryKeyUtils.ts","../src/hooks/useFinalStretchTokensQuery.ts","../src/hooks/useLatestBlockQuery.ts","../src/hooks/useMigratedTokensQuery.ts","../src/hooks/useNewPoolsQuery.ts","../src/hooks/useNewTokensQuery.ts","../src/hooks/usePresignedUploadUrlQuery.ts","../src/hooks/useSearchTokensQuery.ts","../src/hooks/useSearchTokensInfiniteQuery.ts","../src/hooks/useSendTxMutation.ts","../src/hooks/useStockTokensQuery.ts","../src/hooks/useSwapRouteQuery.ts","../src/hooks/useTokenCandlesQuery.ts","../src/hooks/useTokenHoldersQuery.ts","../src/hooks/useTokenMarketDataQuery.ts","../src/hooks/useTokenQuery.ts","../src/hooks/useTokenSecurityQuery.ts","../src/hooks/useTokensQuery.ts","../src/hooks/useTokensByCreatorQuery.ts","../src/hooks/useTokenStatsQuery.ts","../src/hooks/useTokenTopTradersQuery.ts","../src/hooks/useTokenTradesQuery.ts","../src/hooks/useTrendingTokensQuery.ts","../src/hooks/useTxSuccessQuery.ts","../src/hooks/useWalletLimitOrdersQuery.ts","../src/hooks/useWalletPnlQuery.ts","../src/hooks/useWalletPortfolioPnlsQuery.ts","../src/hooks/useWalletPortfolioPnlsInfiniteQuery.ts","../src/hooks/useWalletPortfoliosQuery.ts","../src/hooks/useWalletPortfoliosByTokensQuery.ts","../src/hooks/useWalletPortfoliosInfiniteQuery.ts","../src/hooks/useWalletPortfolioPnlsByTokensQuery.ts","../src/hooks/useWalletTokenPositionsQuery.ts","../src/hooks/useWalletTradesQuery.ts","../src/hooks/useTokenActivitiesQuery.ts","../src/hooks/useWalletActivitiesQuery.ts","../src/hooks/useSubscriptionEffect.ts","../src/hooks/useTokenSubscription.ts","../src/hooks/useTokensSubscription.ts","../src/hooks/useTokenCandlesSubscription.ts","../src/hooks/useTokenTradesSubscription.ts","../src/hooks/useWalletPnlSubscription.ts","../src/hooks/useWalletPortfoliosSubscription.ts","../src/hooks/useWalletPortfolioPnlsSubscription.ts","../src/hooks/useWalletTradesSubscription.ts","../src/hooks/useTokenActivitiesSubscription.ts","../src/hooks/useWalletActivitiesSubscription.ts","../src/hooks/useNewPoolsSubscription.ts","../src/hooks/useNewTokensSubscription.ts","../src/hooks/useTrendingTokensSubscription.ts","../src/hooks/useMigratedTokensSubscription.ts","../src/hooks/useFinalStretchTokensSubscription.ts","../src/hooks/useStockTokensSubscription.ts","../src/DexClientProvider.tsx"],"names":["DEFAULT_QUERY_KEY_PREFIX","DexClientContext","createContext","useDexClient","context","useContext","createQueryHook","config","buildQueryKey","params","prefix","fetchFn","client","useCreatedQuery","options","queryKeyPrefix","useQuery","createInfiniteQueryHook","useCreatedInfiniteQuery","useInfiniteQuery","pageParam","lastPage","toKeySegment","value","toSortedKeySegment","finalStretchTokensQueryKey","fetchFinalStretchTokens","useFinalStretchTokensQuery","p","chain","latestBlockQueryKey","fetchLatestBlock","useLatestBlockQuery","getCachedLatestBlock","queryClient","key","useCachedLatestBlock","useQueryClient","useLatestBlockCacheReader","useCallback","migratedTokensQueryKey","fetchMigratedTokens","useMigratedTokensQuery","newPoolsQueryKey","fetchNewPools","useNewPoolsQuery","newTokensQueryKey","fetchNewTokens","useNewTokensQuery","presignedUploadUrlQueryKey","fetchPresignedUploadUrl","usePresignedUploadUrlQuery","searchTokensQueryKey","fetchSearchTokens","useSearchTokensQuery","searchTokensInfiniteQueryKey","useSearchTokensInfiniteQuery","cursor","sendTx","useSendTxMutation","useMutation","stockTokensQueryKey","fetchStockTokens","useStockTokensQuery","swapRouteQueryKey","fetchSwapRoute","useSwapRouteQuery","tokenCandlesQueryKey","fetchTokenCandles","useTokenCandlesQuery","address","resolution","tokenHoldersQueryKey","fetchTokenHolders","useTokenHoldersQuery","tokenMarketDataQueryKey","fetchTokenMarketData","useTokenMarketDataQuery","tokenQueryKey","fetchToken","useTokenQuery","tokenSecurityQueryKey","fetchTokenSecurity","useTokenSecurityQuery","tokensQueryKey","fetchTokens","useTokensQuery","tokensByCreatorQueryKey","fetchTokensByCreator","useTokensByCreatorQuery","creator","tokenStatsQueryKey","fetchTokenStats","useTokenStatsQuery","tokenTopTradersQueryKey","fetchTokenTopTraders","useTokenTopTradersQuery","sortBy","rest","tokenTradesQueryKey","fetchTokenTrades","useTokenTradesQuery","trendingTokensQueryKey","fetchTrendingTokens","useTrendingTokensQuery","txSuccessQueryKey","fetchTxSuccess","useTxSuccessQuery","txHash","timeout","walletLimitOrdersQueryKey","fetchWalletLimitOrders","useWalletLimitOrdersQuery","walletPnlQueryKey","fetchWalletPnl","useWalletPnlQuery","walletPortfolioPnlsQueryKey","fetchWalletPortfolioPnls","useWalletPortfolioPnlsQuery","walletPortfolioPnlsInfiniteQueryKey","useWalletPortfolioPnlsInfiniteQuery","walletPortfoliosQueryKey","fetchWalletPortfolios","useWalletPortfoliosQuery","limit","walletPortfoliosByTokensQueryKey","fetchWalletPortfoliosByTokens","useWalletPortfoliosByTokensQuery","tokenAddresses","walletPortfoliosInfiniteQueryKey","useWalletPortfoliosInfiniteQuery","walletPortfolioPnlsByTokensQueryKey","fetchWalletPortfolioPnlsByTokens","useWalletPortfolioPnlsByTokensQuery","walletTokenPositionsQueryKey","fetchWalletTokenPositions","useWalletTokenPositionsQuery","positionState","walletTradesQueryKey","fetchWalletTrades","useWalletTradesQuery","tokenActivitiesQueryKey","fetchTokenActivities","useTokenActivitiesQuery","walletActivitiesQueryKey","fetchWalletActivities","useWalletActivitiesQuery","useSubscriptionEffect","subscribe","callback","deps","callbackRef","useRef","onErrorRef","useEffect","subscription","data","err","useTokenSubscription","subscribeClient","cb","useTokensSubscription","addressesKey","useMemo","addresses","useTokenCandlesSubscription","useTokenTradesSubscription","useWalletPnlSubscription","useWalletPortfoliosSubscription","useWalletPortfolioPnlsSubscription","useWalletTradesSubscription","useTokenActivitiesSubscription","useWalletActivitiesSubscription","useNewPoolsSubscription","useNewTokensSubscription","useTrendingTokensSubscription","useMigratedTokensSubscription","useFinalStretchTokensSubscription","useStockTokensSubscription","DexClientProvider","children","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["import { createContext } from \"react\";\nimport { IClient, ISubscribeClient } from \"@liberfi.io/types\";\n\n/**\n * Default prefix prepended to every TanStack Query key produced by hooks in\n * this package. Can be overridden via\n * `<DexClientProvider queryKeyPrefix=\"...\">`.\n */\nexport const DEFAULT_QUERY_KEY_PREFIX = \"liberfi\";\n\n/**\n * Shape of the context value provided by `DexClientProvider` and consumed by\n * `useDexClient`.\n */\nexport interface DexClientContextValue {\n /** REST / HTTP client implementing `IClient`. */\n client: IClient;\n /** WebSocket subscription client implementing `ISubscribeClient`. */\n subscribeClient: ISubscribeClient;\n /** Prefix used in all query keys produced by hooks. */\n queryKeyPrefix: string;\n}\n\n/**\n * Internal React context. Use `DexClientProvider` to supply the value and\n * `useDexClient()` to consume it.\n */\nexport const DexClientContext = createContext<DexClientContextValue | null>(\n null,\n);\n","import { useContext } from \"react\";\nimport { DexClientContext, DexClientContextValue } from \"../DexClientContext\";\n\n/**\n * Returns the `DexClientContextValue` provided by `DexClientProvider`.\n *\n * @throws If called outside a `DexClientProvider`.\n */\nexport function useDexClient(): DexClientContextValue {\n const context = useContext(DexClientContext);\n if (context === null) {\n throw new Error(\"useDexClient must be used within a DexClientProvider\");\n }\n return context;\n}\n","import {\n useQuery,\n type UseQueryOptions,\n type UseQueryResult,\n} from \"@tanstack/react-query\";\nimport { IClient } from \"@liberfi.io/types\";\nimport { DEFAULT_QUERY_KEY_PREFIX } from \"../DexClientContext\";\nimport { useDexClient } from \"./useDexClient\";\n\nexport interface QueryHookConfig<TParams, TData> {\n /** Key name segment (e.g. `\"token\"`, `\"newTokens\"`). */\n name: string;\n /** Builds the variable segments of the query key from `params`. */\n queryKey: (params: TParams) => string[];\n /** Fetches data using the API client. */\n fetch: (client: IClient, params: TParams) => Promise<TData>;\n /** Default options merged *below* caller-supplied options. */\n defaultOptions?: Partial<\n Omit<UseQueryOptions<TData, Error, TData, string[]>, \"queryKey\" | \"queryFn\">\n >;\n}\n\nexport interface QueryHookReturn<TParams, TData> {\n /**\n * Builds the full query key including the namespace prefix.\n *\n * Useful for manual cache operations such as `queryClient.invalidateQueries`\n * or `queryClient.prefetchQuery`.\n *\n * @param params - Hook parameters.\n * @param prefix - Override the default prefix (`DEFAULT_QUERY_KEY_PREFIX`).\n */\n queryKey: (params: TParams, prefix?: string) => string[];\n /** Fetches data using the API client (for use outside React). */\n fetch: (client: IClient, params: TParams) => Promise<TData>;\n /** React hook that fetches and caches data via TanStack Query. */\n useQuery: (\n params: TParams,\n options?: Omit<\n UseQueryOptions<TData, Error, TData, string[]>,\n \"queryKey\" | \"queryFn\"\n >,\n ) => UseQueryResult<TData, Error>;\n}\n\n/**\n * Creates a `useQuery`-based hook, its `queryKey` builder and a standalone\n * `fetch` function from a single declarative config object.\n */\nexport function createQueryHook<TParams, TData>(\n config: QueryHookConfig<TParams, TData>,\n): QueryHookReturn<TParams, TData> {\n function buildQueryKey(\n params: TParams,\n prefix: string = DEFAULT_QUERY_KEY_PREFIX,\n ): string[] {\n return [prefix, config.name, ...config.queryKey(params)];\n }\n\n function fetchFn(client: IClient, params: TParams): Promise<TData> {\n return config.fetch(client, params);\n }\n\n function useCreatedQuery(\n params: TParams,\n options: Omit<\n UseQueryOptions<TData, Error, TData, string[]>,\n \"queryKey\" | \"queryFn\"\n > = {},\n ): UseQueryResult<TData, Error> {\n const { client, queryKeyPrefix } = useDexClient();\n return useQuery({\n queryKey: buildQueryKey(params, queryKeyPrefix),\n queryFn: () => config.fetch(client, params),\n ...config.defaultOptions,\n ...options,\n });\n }\n\n return { queryKey: buildQueryKey, fetch: fetchFn, useQuery: useCreatedQuery };\n}\n","import {\n useInfiniteQuery,\n type InfiniteData,\n type UseInfiniteQueryOptions,\n type UseInfiniteQueryResult,\n} from \"@tanstack/react-query\";\nimport { IClient } from \"@liberfi.io/types\";\nimport { DEFAULT_QUERY_KEY_PREFIX } from \"../DexClientContext\";\nimport { useDexClient } from \"./useDexClient\";\n\ninterface CursorPaginatedResult {\n hasNext?: boolean;\n endCursor?: string;\n}\n\nexport interface InfiniteQueryHookConfig<\n TParams,\n TData extends CursorPaginatedResult,\n> {\n /** Key name segment (e.g. `\"walletPortfolios\"`). */\n name: string;\n /** Builds the variable segments of the query key from `params`. */\n queryKey: (params: TParams) => string[];\n /** Fetches a single page of data. */\n fetch: (\n client: IClient,\n params: TParams,\n cursor: string | undefined,\n ) => Promise<TData>;\n}\n\nexport interface InfiniteQueryHookReturn<\n TParams,\n TData extends CursorPaginatedResult,\n> {\n /**\n * Builds the full query key including the namespace prefix and an\n * `\"infinite\"` tag to distinguish it from the non-infinite variant.\n */\n queryKey: (params: TParams, prefix?: string) => string[];\n /** React hook that fetches cursor-paginated data via TanStack Query. */\n useInfiniteQuery: (\n params: TParams,\n options?: Omit<\n UseInfiniteQueryOptions<\n TData,\n Error,\n InfiniteData<TData>,\n string[],\n string | undefined\n >,\n \"queryKey\" | \"queryFn\" | \"initialPageParam\" | \"getNextPageParam\"\n >,\n ) => UseInfiniteQueryResult<InfiniteData<TData>, Error>;\n}\n\n/**\n * Creates a `useInfiniteQuery`-based hook and its `queryKey` builder for\n * cursor-paginated endpoints.\n */\nexport function createInfiniteQueryHook<\n TParams,\n TData extends CursorPaginatedResult,\n>(\n config: InfiniteQueryHookConfig<TParams, TData>,\n): InfiniteQueryHookReturn<TParams, TData> {\n function buildQueryKey(\n params: TParams,\n prefix: string = DEFAULT_QUERY_KEY_PREFIX,\n ): string[] {\n return [prefix, config.name, \"infinite\", ...config.queryKey(params)];\n }\n\n function useCreatedInfiniteQuery(\n params: TParams,\n options: Omit<\n UseInfiniteQueryOptions<\n TData,\n Error,\n InfiniteData<TData>,\n string[],\n string | undefined\n >,\n \"queryKey\" | \"queryFn\" | \"initialPageParam\" | \"getNextPageParam\"\n > = {},\n ) {\n const { client, queryKeyPrefix } = useDexClient();\n return useInfiniteQuery({\n queryKey: buildQueryKey(params, queryKeyPrefix),\n queryFn: ({ pageParam }) => config.fetch(client, params, pageParam),\n initialPageParam: undefined as string | undefined,\n getNextPageParam: (lastPage) =>\n lastPage.hasNext ? lastPage.endCursor : undefined,\n ...options,\n });\n }\n\n return {\n queryKey: buildQueryKey,\n useInfiniteQuery: useCreatedInfiniteQuery,\n };\n}\n","/**\n * Serialises a primitive value (or Date) into a stable string for use in query\n * keys. `undefined` and `null` map to `\"\"`.\n */\nexport function toKeySegment(\n value: string | number | boolean | Date | undefined | null,\n): string {\n if (value === undefined || value === null) return \"\";\n if (value instanceof Date) return value.toISOString();\n return String(value);\n}\n\n/**\n * Serialises an array value into a stable, sorted JSON string for use in\n * query keys.\n */\nexport function toSortedKeySegment(\n value: unknown[] | undefined | null,\n): string {\n if (!value || value.length === 0) return \"[]\";\n return JSON.stringify([...value].sort());\n}\n","import { Chain, GetTokenListOptions, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useFinalStretchTokensQuery}. */\nexport interface UseFinalStretchTokensQueryParams extends GetTokenListOptions {\n chain: Chain;\n}\n\nconst {\n queryKey: finalStretchTokensQueryKey,\n fetch: fetchFinalStretchTokens,\n useQuery: useFinalStretchTokensQuery,\n} = createQueryHook<UseFinalStretchTokensQueryParams, Array<Token>>({\n name: \"finalStretchTokens\",\n queryKey: (p) => [\n p.chain,\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n toSortedKeySegment(p.keywords),\n toSortedKeySegment(p.excludeKeywords),\n toSortedKeySegment(p.filters),\n ],\n fetch: (client, { chain, ...options }) =>\n client.getFinalStretchTokens(chain, options),\n});\n\nexport {\n finalStretchTokensQueryKey,\n fetchFinalStretchTokens,\n useFinalStretchTokensQuery,\n};\n","import { useCallback } from \"react\";\nimport { useQueryClient, type QueryClient } from \"@tanstack/react-query\";\nimport { BlockchainLatestBlock, LatestBlockParams } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { useDexClient } from \"./useDexClient\";\n\nexport type UseLatestBlockQueryParams = LatestBlockParams;\n\nconst {\n queryKey: latestBlockQueryKey,\n fetch: fetchLatestBlock,\n useQuery: useLatestBlockQuery,\n} = createQueryHook<UseLatestBlockQueryParams, BlockchainLatestBlock>({\n name: \"latestBlock\",\n queryKey: (p) => [p.chain],\n fetch: (client, params) => client.getLatestBlock(params),\n});\n\nexport interface LatestBlockCacheResult {\n data?: BlockchainLatestBlock;\n dataUpdatedAt: number;\n}\n\nexport function getCachedLatestBlock(\n queryClient: QueryClient,\n params: UseLatestBlockQueryParams,\n prefix?: string,\n): LatestBlockCacheResult {\n const key = latestBlockQueryKey(params, prefix);\n return {\n data: queryClient.getQueryData<BlockchainLatestBlock>(key),\n dataUpdatedAt: queryClient.getQueryState(key)?.dataUpdatedAt ?? 0,\n };\n}\n\nexport function useCachedLatestBlock(\n params: UseLatestBlockQueryParams,\n): LatestBlockCacheResult {\n const queryClient = useQueryClient();\n const { queryKeyPrefix } = useDexClient();\n return getCachedLatestBlock(queryClient, params, queryKeyPrefix);\n}\n\nexport function useLatestBlockCacheReader(\n params: UseLatestBlockQueryParams,\n): () => LatestBlockCacheResult {\n const queryClient = useQueryClient();\n const { queryKeyPrefix } = useDexClient();\n return useCallback(\n () => getCachedLatestBlock(queryClient, params, queryKeyPrefix),\n [queryClient, params, queryKeyPrefix],\n );\n}\n\nexport { fetchLatestBlock, latestBlockQueryKey, useLatestBlockQuery };\n","import { Chain, GetTokenListOptions, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useMigratedTokensQuery}. */\nexport interface UseMigratedTokensQueryParams extends GetTokenListOptions {\n chain: Chain;\n}\n\nconst {\n queryKey: migratedTokensQueryKey,\n fetch: fetchMigratedTokens,\n useQuery: useMigratedTokensQuery,\n} = createQueryHook<UseMigratedTokensQueryParams, Array<Token>>({\n name: \"migratedTokens\",\n queryKey: (p) => [\n p.chain,\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n toSortedKeySegment(p.keywords),\n toSortedKeySegment(p.excludeKeywords),\n toSortedKeySegment(p.filters),\n ],\n fetch: (client, { chain, ...options }) =>\n client.getMigratedTokens(chain, options),\n});\n\nexport { migratedTokensQueryKey, fetchMigratedTokens, useMigratedTokensQuery };\n","import { Chain, GetTokenListOptions, Pool } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useNewPoolsQuery}. */\nexport interface UseNewPoolsQueryParams extends GetTokenListOptions {\n chain: Chain;\n}\n\nconst {\n queryKey: newPoolsQueryKey,\n fetch: fetchNewPools,\n useQuery: useNewPoolsQuery,\n} = createQueryHook<UseNewPoolsQueryParams, Array<Pool>>({\n name: \"newPools\",\n queryKey: (p) => [\n p.chain,\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n toSortedKeySegment(p.keywords),\n toSortedKeySegment(p.excludeKeywords),\n toSortedKeySegment(p.filters),\n ],\n fetch: (client, { chain, ...options }) => client.getNewPools(chain, options),\n});\n\nexport { newPoolsQueryKey, fetchNewPools, useNewPoolsQuery };\n","import { Chain, GetTokenListOptions, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useNewTokensQuery}. */\nexport interface UseNewTokensQueryParams extends GetTokenListOptions {\n chain: Chain;\n}\n\nconst {\n queryKey: newTokensQueryKey,\n fetch: fetchNewTokens,\n useQuery: useNewTokensQuery,\n} = createQueryHook<UseNewTokensQueryParams, Array<Token>>({\n name: \"newTokens\",\n queryKey: (p) => [\n p.chain,\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n toSortedKeySegment(p.keywords),\n toSortedKeySegment(p.excludeKeywords),\n toSortedKeySegment(p.filters),\n ],\n fetch: (client, { chain, ...options }) => client.getNewTokens(chain, options),\n});\n\nexport { newTokensQueryKey, fetchNewTokens, useNewTokensQuery };\n","import { useQuery, UseQueryOptions } from \"@tanstack/react-query\";\nimport { IClient } from \"@liberfi.io/types\";\nimport { DEFAULT_QUERY_KEY_PREFIX } from \"../DexClientContext\";\nimport { useDexClient } from \"./useDexClient\";\n\n/**\n * Builds the query key for `usePresignedUploadUrlQuery`.\n *\n * @param prefix - Override the default query key prefix.\n */\nexport function presignedUploadUrlQueryKey(\n prefix: string = DEFAULT_QUERY_KEY_PREFIX,\n): string[] {\n return [prefix, \"presignedUploadUrl\"];\n}\n\n/** Fetches a presigned upload URL (for use outside React). */\nexport async function fetchPresignedUploadUrl(client: IClient) {\n return await client.getPresignedUploadUrl();\n}\n\n/** Fetches a one-time presigned upload URL. `staleTime` defaults to `0`. */\nexport function usePresignedUploadUrlQuery(\n options: Omit<\n UseQueryOptions<string, Error, string, string[]>,\n \"queryKey\" | \"queryFn\"\n > = {},\n) {\n const { client, queryKeyPrefix } = useDexClient();\n return useQuery({\n queryKey: presignedUploadUrlQueryKey(queryKeyPrefix),\n queryFn: async () => fetchPresignedUploadUrl(client),\n staleTime: 0,\n ...options,\n });\n}\n","import { SearchTokenCursorList, SearchTokensOptions } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\nexport type UseSearchTokensQueryParams = SearchTokensOptions;\n\nconst {\n queryKey: searchTokensQueryKey,\n fetch: fetchSearchTokens,\n useQuery: useSearchTokensQuery,\n} = createQueryHook<UseSearchTokensQueryParams, SearchTokenCursorList>({\n name: \"searchTokens\",\n queryKey: (p) => [\n toKeySegment(p.cursor),\n toKeySegment(p.limit),\n toKeySegment(p.direction),\n toSortedKeySegment(p.chains),\n toKeySegment(p.keyword),\n toSortedKeySegment(p.filters),\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n ],\n fetch: (client, params) => client.searchTokens(params),\n});\n\nexport { searchTokensQueryKey, fetchSearchTokens, useSearchTokensQuery };\n","import { SearchTokenCursorList, SearchTokensOptions } from \"@liberfi.io/types\";\nimport { createInfiniteQueryHook } from \"./createInfiniteQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useSearchTokensInfiniteQuery}. */\nexport type UseSearchTokensInfiniteQueryParams = Omit<\n SearchTokensOptions,\n \"cursor\" | \"direction\"\n>;\n\nconst {\n queryKey: searchTokensInfiniteQueryKey,\n useInfiniteQuery: useSearchTokensInfiniteQuery,\n} = createInfiniteQueryHook<\n UseSearchTokensInfiniteQueryParams,\n SearchTokenCursorList\n>({\n name: \"searchTokens\",\n queryKey: (p) => [\n toKeySegment(p.limit),\n toSortedKeySegment(p.chains),\n toKeySegment(p.keyword),\n toSortedKeySegment(p.filters),\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n ],\n fetch: (client, params, cursor) => client.searchTokens({ ...params, cursor }),\n});\n\nexport { searchTokensInfiniteQueryKey, useSearchTokensInfiniteQuery };\n","import { useMutation, UseMutationOptions } from \"@tanstack/react-query\";\nimport { IClient, SendTxParams, SendTxResult } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\n\nexport type UseSendTxMutationParams = SendTxParams;\n\n/** Sends a transaction via the API client (for use outside React). */\nexport async function sendTx(client: IClient, params: UseSendTxMutationParams) {\n return await client.sendTx(params);\n}\n\n/** Mutation hook that sends a transaction. */\nexport function useSendTxMutation(\n options: Omit<\n UseMutationOptions<SendTxResult, Error, UseSendTxMutationParams>,\n \"mutationFn\"\n > = {},\n) {\n const { client } = useDexClient();\n return useMutation({\n mutationFn: async (params: UseSendTxMutationParams) =>\n sendTx(client, params),\n ...options,\n });\n}\n","import { Chain, GetTokenListOptions, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useStockTokensQuery}. */\nexport interface UseStockTokensQueryParams extends GetTokenListOptions {\n chain: Chain;\n}\n\nconst {\n queryKey: stockTokensQueryKey,\n fetch: fetchStockTokens,\n useQuery: useStockTokensQuery,\n} = createQueryHook<UseStockTokensQueryParams, Array<Token>>({\n name: \"stockTokens\",\n queryKey: (p) => [\n p.chain,\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n toSortedKeySegment(p.keywords),\n toSortedKeySegment(p.excludeKeywords),\n toSortedKeySegment(p.filters),\n ],\n fetch: (client, { chain, ...options }) =>\n client.getStockTokens(chain, options),\n});\n\nexport { stockTokensQueryKey, fetchStockTokens, useStockTokensQuery };\n","import { SwapParams, SwapRoute } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\nexport type UseSwapRouteQueryParams = SwapParams;\n\nconst {\n queryKey: swapRouteQueryKey,\n fetch: fetchSwapRoute,\n useQuery: useSwapRouteQuery,\n} = createQueryHook<UseSwapRouteQueryParams, SwapRoute>({\n name: \"swapRoute\",\n queryKey: (p) => [\n p.chain,\n p.userAddress,\n p.input,\n p.output,\n p.mode,\n p.amount,\n toKeySegment(p.slippage),\n toKeySegment(p.priorityFee),\n toKeySegment(p.tipFee),\n toKeySegment(p.isAntiMev),\n ],\n fetch: (client, params) => client.swapRoute(params),\n});\n\nexport { swapRouteQueryKey, fetchSwapRoute, useSwapRouteQuery };\n","import {\n Chain,\n GetTokenCandlesOptions,\n TokenCandle,\n TokenResolution,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenCandlesQuery}. */\nexport interface UseTokenCandlesQueryParams extends GetTokenCandlesOptions {\n chain: Chain;\n address: string;\n resolution: TokenResolution;\n}\n\nconst {\n queryKey: tokenCandlesQueryKey,\n fetch: fetchTokenCandles,\n useQuery: useTokenCandlesQuery,\n} = createQueryHook<UseTokenCandlesQueryParams, Array<TokenCandle>>({\n name: \"tokenCandles\",\n queryKey: (p) => [\n p.chain,\n p.address,\n p.resolution,\n toKeySegment(p.after),\n toKeySegment(p.before),\n toKeySegment(p.limit),\n ],\n fetch: (client, { chain, address, resolution, ...options }) =>\n client.getTokenCandles(chain, address, resolution, options),\n});\n\nexport { tokenCandlesQueryKey, fetchTokenCandles, useTokenCandlesQuery };\n","import {\n Chain,\n CursorList,\n GetTokenHoldersOptions,\n TokenHolder,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenHoldersQuery}. */\nexport interface UseTokenHoldersQueryParams extends GetTokenHoldersOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenHoldersQueryKey,\n fetch: fetchTokenHolders,\n useQuery: useTokenHoldersQuery,\n} = createQueryHook<UseTokenHoldersQueryParams, CursorList<TokenHolder>>({\n name: \"tokenHolders\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.cursor),\n toKeySegment(p.limit),\n toKeySegment(p.direction),\n toKeySegment(p.sortBy),\n ],\n fetch: (client, { chain, address, ...options }) =>\n client.getTokenHolders(chain, address, options),\n});\n\nexport { tokenHoldersQueryKey, fetchTokenHolders, useTokenHoldersQuery };\n","import { Chain, TokenMarketData } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\n\n/** Parameters for {@link useTokenMarketDataQuery}. */\nexport interface UseTokenMarketDataQueryParams {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenMarketDataQueryKey,\n fetch: fetchTokenMarketData,\n useQuery: useTokenMarketDataQuery,\n} = createQueryHook<UseTokenMarketDataQueryParams, TokenMarketData>({\n name: \"tokenMarketData\",\n queryKey: (p) => [p.chain, p.address],\n fetch: (client, p) => client.getTokenMarketData(p.chain, p.address),\n});\n\nexport {\n tokenMarketDataQueryKey,\n fetchTokenMarketData,\n useTokenMarketDataQuery,\n};\n","import { Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\n\n/** Parameters for {@link useTokenQuery}. */\nexport interface UseTokenQueryParams {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenQueryKey,\n fetch: fetchToken,\n useQuery: useTokenQuery,\n} = createQueryHook<UseTokenQueryParams, Token>({\n name: \"token\",\n queryKey: (p) => [p.chain, p.address],\n fetch: (client, p) => client.getToken(p.chain, p.address),\n});\n\nexport { tokenQueryKey, fetchToken, useTokenQuery };\n","import { Chain, TokenSecurity } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\n\n/** Parameters for {@link useTokenSecurityQuery}. */\nexport interface UseTokenSecurityQueryParams {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenSecurityQueryKey,\n fetch: fetchTokenSecurity,\n useQuery: useTokenSecurityQuery,\n} = createQueryHook<UseTokenSecurityQueryParams, TokenSecurity>({\n name: \"tokenSecurity\",\n queryKey: (p) => [p.chain, p.address],\n fetch: (client, p) => client.getTokenSecurity(p.chain, p.address),\n});\n\nexport { tokenSecurityQueryKey, fetchTokenSecurity, useTokenSecurityQuery };\n","import { Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\n\n/** Parameters for {@link useTokensQuery}. */\nexport interface UseTokensQueryParams {\n chain: Chain;\n addresses: Array<string>;\n}\n\nconst {\n queryKey: tokensQueryKey,\n fetch: fetchTokens,\n useQuery: useTokensQuery,\n} = createQueryHook<UseTokensQueryParams, Array<Token>>({\n name: \"tokens\",\n queryKey: (p) => [p.chain, [...p.addresses].sort().join(\",\")],\n fetch: (client, p) => client.getTokens(p.chain, p.addresses),\n});\n\nexport { tokensQueryKey, fetchTokens, useTokensQuery };\n","import {\n Chain,\n CursorList,\n GetTokensByCreatorOptions,\n Token,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokensByCreatorQuery}. */\nexport interface UseTokensByCreatorQueryParams extends GetTokensByCreatorOptions {\n chain: Chain;\n creator: string;\n}\n\n/**\n * Fetch tokens created by a given wallet (\"Dev Tokens\" tab).\n *\n * NOTE: The backend does not yet implement a creator-index endpoint, so\n * `Client.getTokensByCreator` throws a `NotImplementedError`. Consumers\n * should gate via `enabled: false` or handle the error with\n * `isNotImplementedError` to render an empty state.\n */\nconst {\n queryKey: tokensByCreatorQueryKey,\n fetch: fetchTokensByCreator,\n useQuery: useTokensByCreatorQuery,\n} = createQueryHook<UseTokensByCreatorQueryParams, CursorList<Token>>({\n name: \"tokensByCreator\",\n queryKey: (p) => [\n p.chain,\n p.creator,\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n toKeySegment(p.cursor),\n toKeySegment(p.limit),\n toKeySegment(p.direction),\n ],\n fetch: (client, { chain, creator, ...options }) =>\n client.getTokensByCreator(chain, creator, options),\n defaultOptions: {\n retry: false,\n },\n});\n\nexport {\n tokensByCreatorQueryKey,\n fetchTokensByCreator,\n useTokensByCreatorQuery,\n};\n","import { Chain, TokenStats } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\n\n/** Parameters for {@link useTokenStatsQuery}. */\nexport interface UseTokenStatsQueryParams {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenStatsQueryKey,\n fetch: fetchTokenStats,\n useQuery: useTokenStatsQuery,\n} = createQueryHook<UseTokenStatsQueryParams, TokenStats>({\n name: \"tokenStats\",\n queryKey: (p) => [p.chain, p.address],\n fetch: (client, p) => client.getTokenStats(p.chain, p.address),\n});\n\nexport { tokenStatsQueryKey, fetchTokenStats, useTokenStatsQuery };\n","import {\n Chain,\n CursorList,\n GetTokenHoldersOptions,\n TokenHolder,\n TokenHoldersSortBy,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenTopTradersQuery}. */\nexport interface UseTokenTopTradersQueryParams extends Omit<\n GetTokenHoldersOptions,\n \"sortBy\"\n> {\n chain: Chain;\n address: string;\n /**\n * Sort field. Defaults to `realizedPnl` (the defining trait of the\n * \"Top Traders\" view). `holdingUsd` is accepted as a fallback when the\n * backend has not yet enabled realized-PnL sorting on the holders\n * endpoint.\n */\n sortBy?: TokenHoldersSortBy;\n}\n\n/**\n * Fetch the \"Top Traders\" list for a token.\n *\n * The server exposes top traders through the same `/holders` endpoint but\n * ranked by realized PnL rather than current holdings. This hook is a thin\n * bridge over {@link useTokenHoldersQuery} that pins `sortBy` to\n * `realizedPnl` by default so consumers get a dedicated query cache and a\n * clear semantic name.\n */\nconst {\n queryKey: tokenTopTradersQueryKey,\n fetch: fetchTokenTopTraders,\n useQuery: useTokenTopTradersQuery,\n} = createQueryHook<UseTokenTopTradersQueryParams, CursorList<TokenHolder>>({\n name: \"tokenTopTraders\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.cursor),\n toKeySegment(p.limit),\n toKeySegment(p.direction),\n toKeySegment(p.sortBy ?? \"realizedPnl\"),\n ],\n fetch: (client, { chain, address, sortBy, ...rest }) =>\n client.getTokenHolders(chain, address, {\n ...rest,\n sortBy: sortBy ?? \"realizedPnl\",\n }),\n});\n\nexport {\n tokenTopTradersQueryKey,\n fetchTokenTopTraders,\n useTokenTopTradersQuery,\n};\n","import { Chain, CursorList, GetTradesOptions, Trade } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenTradesQuery}. */\nexport interface UseTokenTradesQueryParams extends GetTradesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenTradesQueryKey,\n fetch: fetchTokenTrades,\n useQuery: useTokenTradesQuery,\n} = createQueryHook<UseTokenTradesQueryParams, CursorList<Trade>>({\n name: \"tokenTrades\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.before),\n toKeySegment(p.after),\n toKeySegment(p.beforeBlockHeight),\n toKeySegment(p.afterBlockHeight),\n toKeySegment(p.type),\n toKeySegment(p.poolAddress),\n ],\n fetch: (client, { chain, address, ...options }) =>\n client.getTokenTrades(chain, address, options),\n});\n\nexport { tokenTradesQueryKey, fetchTokenTrades, useTokenTradesQuery };\n","import { Chain, GetTokenListOptions, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTrendingTokensQuery}. */\nexport interface UseTrendingTokensQueryParams extends GetTokenListOptions {\n chain: Chain;\n resolution: \"1m\" | \"5m\" | \"1h\" | \"4h\" | \"24h\";\n}\n\nconst {\n queryKey: trendingTokensQueryKey,\n fetch: fetchTrendingTokens,\n useQuery: useTrendingTokensQuery,\n} = createQueryHook<UseTrendingTokensQueryParams, Array<Token>>({\n name: \"trendingTokens\",\n queryKey: (p) => [\n p.chain,\n p.resolution,\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n toSortedKeySegment(p.keywords),\n toSortedKeySegment(p.excludeKeywords),\n toSortedKeySegment(p.filters),\n ],\n fetch: (client, { chain, resolution, ...options }) =>\n client.getTrendingTokens(chain, resolution, options),\n});\n\nexport { trendingTokensQueryKey, fetchTrendingTokens, useTrendingTokensQuery };\n","import { Chain } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTxSuccessQuery}. */\nexport interface UseTxSuccessQueryParams {\n chain: Chain;\n txHash: string;\n timeout?: number;\n}\n\nconst {\n queryKey: txSuccessQueryKey,\n fetch: fetchTxSuccess,\n useQuery: useTxSuccessQuery,\n} = createQueryHook<UseTxSuccessQueryParams, boolean>({\n name: \"txSuccess\",\n queryKey: (p) => [p.chain, p.txHash, toKeySegment(p.timeout)],\n fetch: (client, { chain, txHash, timeout }) =>\n client.checkTxSuccess(chain, txHash, timeout),\n});\n\nexport { txSuccessQueryKey, fetchTxSuccess, useTxSuccessQuery };\n","import {\n Chain,\n CursorList,\n GetWalletLimitOrdersOptions,\n LimitOrder,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletLimitOrdersQuery}. */\nexport interface UseWalletLimitOrdersQueryParams extends GetWalletLimitOrdersOptions {\n chain: Chain;\n address: string;\n}\n\n/**\n * Fetch a wallet's limit orders.\n *\n * NOTE: The backend does not yet implement a limit-orders endpoint, so\n * `Client.getWalletLimitOrders` throws a `NotImplementedError`. Consumers\n * should disable the query (via `enabled: false`) or handle the error with\n * `isNotImplementedError` to render an \"Orders coming soon\" empty state.\n */\nconst {\n queryKey: walletLimitOrdersQueryKey,\n fetch: fetchWalletLimitOrders,\n useQuery: useWalletLimitOrdersQuery,\n} = createQueryHook<UseWalletLimitOrdersQueryParams, CursorList<LimitOrder>>({\n name: \"walletLimitOrders\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.state),\n toKeySegment(p.tokenAddress),\n toKeySegment(p.cursor),\n toKeySegment(p.limit),\n toKeySegment(p.direction),\n ],\n fetch: (client, { chain, address, ...options }) =>\n client.getWalletLimitOrders(chain, address, options),\n defaultOptions: {\n retry: false,\n },\n});\n\nexport {\n walletLimitOrdersQueryKey,\n fetchWalletLimitOrders,\n useWalletLimitOrdersQuery,\n};\n","import { Chain, WalletPnl, WalletPnlResolution } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletPnlQuery}. */\nexport interface UseWalletPnlQueryParams {\n chain: Chain;\n address: string;\n resolution?: WalletPnlResolution;\n}\n\nconst {\n queryKey: walletPnlQueryKey,\n fetch: fetchWalletPnl,\n useQuery: useWalletPnlQuery,\n} = createQueryHook<UseWalletPnlQueryParams, WalletPnl>({\n name: \"walletPnl\",\n queryKey: (p) => [p.chain, p.address, toKeySegment(p.resolution ?? \"all\")],\n fetch: (client, { chain, address, resolution }) =>\n client.getWalletPnl(chain, address, resolution),\n});\n\nexport { walletPnlQueryKey, fetchWalletPnl, useWalletPnlQuery };\n","import {\n Chain,\n GetWalletPortfolioPnlsOptions,\n WalletPortfolioPnls,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletPortfolioPnlsQuery}. */\nexport interface UseWalletPortfolioPnlsQueryParams extends GetWalletPortfolioPnlsOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: walletPortfolioPnlsQueryKey,\n fetch: fetchWalletPortfolioPnls,\n useQuery: useWalletPortfolioPnlsQuery,\n} = createQueryHook<UseWalletPortfolioPnlsQueryParams, WalletPortfolioPnls>({\n name: \"walletPortfolioPnls\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.cursor),\n toKeySegment(p.limit),\n toKeySegment(p.direction),\n toKeySegment(p.resolution),\n toKeySegment(p.positionState),\n toKeySegment(p.sortBy),\n ],\n fetch: (client, { chain, address, ...options }) =>\n client.getWalletPortfolioPnls(chain, address, options),\n});\n\nexport {\n walletPortfolioPnlsQueryKey,\n fetchWalletPortfolioPnls,\n useWalletPortfolioPnlsQuery,\n};\n","import {\n Chain,\n PositionState,\n WalletPnlResolution,\n WalletPnlSortBy,\n WalletPortfolioPnls,\n} from \"@liberfi.io/types\";\nimport { createInfiniteQueryHook } from \"./createInfiniteQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletPortfolioPnlsInfiniteQuery}. */\nexport interface UseWalletPortfolioPnlsInfiniteQueryParams {\n chain: Chain;\n address: string;\n limit?: number;\n /** Phase 3 statistics window (default 30d). */\n resolution?: WalletPnlResolution;\n /** Phase 3 position-state filter. */\n positionState?: PositionState;\n /** Phase 3 sort field. */\n sortBy?: WalletPnlSortBy;\n}\n\nconst {\n queryKey: walletPortfolioPnlsInfiniteQueryKey,\n useInfiniteQuery: useWalletPortfolioPnlsInfiniteQuery,\n} = createInfiniteQueryHook<\n UseWalletPortfolioPnlsInfiniteQueryParams,\n WalletPortfolioPnls\n>({\n name: \"walletPortfolioPnls\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.limit),\n toKeySegment(p.resolution),\n toKeySegment(p.positionState),\n toKeySegment(p.sortBy),\n ],\n fetch: (client, params, cursor) =>\n client.getWalletPortfolioPnls(params.chain, params.address, {\n cursor,\n limit: params.limit ?? 100,\n resolution: params.resolution,\n positionState: params.positionState,\n sortBy: params.sortBy,\n }),\n});\n\nexport {\n walletPortfolioPnlsInfiniteQueryKey,\n useWalletPortfolioPnlsInfiniteQuery,\n};\n","import { Chain, WalletPortfolios } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletPortfoliosQuery}. */\nexport interface UseWalletPortfoliosQueryParams {\n chain: Chain;\n address: string;\n cursor?: string;\n limit?: number;\n}\n\nconst {\n queryKey: walletPortfoliosQueryKey,\n fetch: fetchWalletPortfolios,\n useQuery: useWalletPortfoliosQuery,\n} = createQueryHook<UseWalletPortfoliosQueryParams, WalletPortfolios>({\n name: \"walletPortfolios\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.cursor),\n toKeySegment(p.limit),\n ],\n fetch: (client, { chain, address, cursor, limit }) =>\n client.getWalletPortfolios(chain, address, { cursor, limit }),\n});\n\nexport {\n walletPortfoliosQueryKey,\n fetchWalletPortfolios,\n useWalletPortfoliosQuery,\n};\n","import { Chain, Portfolio } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\n\n/** Parameters for {@link useWalletPortfoliosByTokensQuery}. */\nexport interface UseWalletPortfoliosByTokensQueryParams {\n chain: Chain;\n address: string;\n tokenAddresses: Array<string>;\n}\n\nconst {\n queryKey: walletPortfoliosByTokensQueryKey,\n fetch: fetchWalletPortfoliosByTokens,\n useQuery: useWalletPortfoliosByTokensQuery,\n} = createQueryHook<UseWalletPortfoliosByTokensQueryParams, Array<Portfolio>>({\n name: \"walletPortfoliosByTokens\",\n queryKey: (p) => [p.chain, p.address, ...[...p.tokenAddresses].sort()],\n fetch: (client, { chain, address, tokenAddresses }) =>\n client.getWalletPortfoliosByTokens(chain, address, tokenAddresses),\n});\n\nexport {\n walletPortfoliosByTokensQueryKey,\n fetchWalletPortfoliosByTokens,\n useWalletPortfoliosByTokensQuery,\n};\n","import { Chain, WalletPortfolios } from \"@liberfi.io/types\";\nimport { createInfiniteQueryHook } from \"./createInfiniteQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletPortfoliosInfiniteQuery}. */\nexport interface UseWalletPortfoliosInfiniteQueryParams {\n chain: Chain;\n address: string;\n limit?: number;\n}\n\nconst {\n queryKey: walletPortfoliosInfiniteQueryKey,\n useInfiniteQuery: useWalletPortfoliosInfiniteQuery,\n} = createInfiniteQueryHook<\n UseWalletPortfoliosInfiniteQueryParams,\n WalletPortfolios\n>({\n name: \"walletPortfolios\",\n queryKey: (p) => [p.chain, p.address, toKeySegment(p.limit)],\n fetch: (client, params, cursor) =>\n client.getWalletPortfolios(params.chain, params.address, {\n cursor,\n limit: params.limit ?? 100,\n }),\n});\n\nexport { walletPortfoliosInfiniteQueryKey, useWalletPortfoliosInfiniteQuery };\n","import { Chain, PortfolioPnl } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\n\n/** Parameters for {@link useWalletPortfolioPnlsByTokensQuery}. */\nexport interface UseWalletPortfolioPnlsByTokensQueryParams {\n chain: Chain;\n address: string;\n tokenAddresses: Array<string>;\n}\n\nconst {\n queryKey: walletPortfolioPnlsByTokensQueryKey,\n fetch: fetchWalletPortfolioPnlsByTokens,\n useQuery: useWalletPortfolioPnlsByTokensQuery,\n} = createQueryHook<\n UseWalletPortfolioPnlsByTokensQueryParams,\n Array<PortfolioPnl>\n>({\n name: \"walletPortfolioPnlsByTokens\",\n queryKey: (p) => [p.chain, p.address, ...[...p.tokenAddresses].sort()],\n fetch: (client, { chain, address, tokenAddresses }) =>\n client.getWalletPortfolioPnlsByTokens(chain, address, tokenAddresses),\n});\n\nexport {\n walletPortfolioPnlsByTokensQueryKey,\n fetchWalletPortfolioPnlsByTokens,\n useWalletPortfolioPnlsByTokensQuery,\n};\n","import type {\n Chain,\n GetWalletPortfolioPnlsOptions,\n PortfolioPnl,\n PositionState,\n WalletPortfolioPnls,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletTokenPositionsQuery}. */\nexport interface UseWalletTokenPositionsQueryParams extends Omit<\n GetWalletPortfolioPnlsOptions,\n \"positionState\"\n> {\n chain: Chain;\n address: string;\n /** Position state filter. Defaults to `open`. Pass `all` or `closed` as needed. */\n positionState?: PositionState;\n}\n\n/**\n * A wallet's token positions (the \"Positions\" tab).\n *\n * The server already exposes per-token PnL through the `net-worth/tokens`\n * endpoint (`useWalletPortfolioPnlsQuery`). This hook is a thin bridge\n * that pins `positionState` to `open` by default so consumers don't need\n * to remember the parameter.\n *\n * Returns the same `WalletPortfolioPnls` shape (with `portfolios:\n * PortfolioPnl[]`) — the widget layer then selects the columns relevant\n * to the Positions view (`Bought / Sold / Remaining / PnL`).\n */\nconst {\n queryKey: walletTokenPositionsQueryKey,\n fetch: fetchWalletTokenPositions,\n useQuery: useWalletTokenPositionsQuery,\n} = createQueryHook<UseWalletTokenPositionsQueryParams, WalletPortfolioPnls>({\n name: \"walletTokenPositions\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.cursor),\n toKeySegment(p.limit),\n toKeySegment(p.direction),\n toKeySegment(p.resolution),\n toKeySegment(p.positionState ?? \"open\"),\n toKeySegment(p.sortBy),\n ],\n fetch: (client, { chain, address, positionState, ...rest }) =>\n client.getWalletPortfolioPnls(chain, address, {\n ...rest,\n positionState: positionState ?? \"open\",\n }),\n});\n\nexport {\n walletTokenPositionsQueryKey,\n fetchWalletTokenPositions,\n useWalletTokenPositionsQuery,\n};\n\n/** Alias for consumers that only want the rows (not the wallet-level summary). */\nexport type WalletTokenPosition = PortfolioPnl;\n","import { Chain, CursorList, GetTradesOptions, Trade } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletTradesQuery}. */\nexport interface UseWalletTradesQueryParams extends GetTradesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: walletTradesQueryKey,\n fetch: fetchWalletTrades,\n useQuery: useWalletTradesQuery,\n} = createQueryHook<UseWalletTradesQueryParams, CursorList<Trade>>({\n name: \"walletTrades\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.before),\n toKeySegment(p.after),\n toKeySegment(p.beforeBlockHeight),\n toKeySegment(p.afterBlockHeight),\n toKeySegment(p.type),\n toKeySegment(p.poolAddress),\n ],\n fetch: (client, { chain, address, ...options }) =>\n client.getWalletTrades(chain, address, options),\n});\n\nexport { walletTradesQueryKey, fetchWalletTrades, useWalletTradesQuery };\n","import {\n Activity,\n Chain,\n CursorList,\n GetActivitiesOptions,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenActivitiesQuery}. */\nexport interface UseTokenActivitiesQueryParams extends GetActivitiesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenActivitiesQueryKey,\n fetch: fetchTokenActivities,\n useQuery: useTokenActivitiesQuery,\n} = createQueryHook<UseTokenActivitiesQueryParams, CursorList<Activity>>({\n name: \"tokenActivities\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.before),\n toKeySegment(p.after),\n toKeySegment(p.beforeBlockHeight),\n toKeySegment(p.afterBlockHeight),\n toKeySegment(p.type),\n toKeySegment(p.poolAddress),\n toKeySegment(p.sortBy),\n ],\n fetch: (client, { chain, address, ...options }) =>\n client.getTokenActivities(chain, address, options),\n});\n\nexport {\n tokenActivitiesQueryKey,\n fetchTokenActivities,\n useTokenActivitiesQuery,\n};\n","import {\n Activity,\n Chain,\n CursorList,\n GetActivitiesOptions,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletActivitiesQuery}. */\nexport interface UseWalletActivitiesQueryParams extends GetActivitiesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: walletActivitiesQueryKey,\n fetch: fetchWalletActivities,\n useQuery: useWalletActivitiesQuery,\n} = createQueryHook<UseWalletActivitiesQueryParams, CursorList<Activity>>({\n name: \"walletActivities\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.before),\n toKeySegment(p.after),\n toKeySegment(p.beforeBlockHeight),\n toKeySegment(p.afterBlockHeight),\n toKeySegment(p.type),\n toKeySegment(p.poolAddress),\n toKeySegment(p.sortBy),\n ],\n fetch: (client, { chain, address, ...options }) =>\n client.getWalletActivities(chain, address, options),\n});\n\nexport {\n walletActivitiesQueryKey,\n fetchWalletActivities,\n useWalletActivitiesQuery,\n};\n","import { useEffect, useRef } from \"react\";\nimport { ISubscription } from \"@liberfi.io/types\";\n\nexport interface SubscriptionOptions {\n /** Set to `false` to pause the subscription. Defaults to `true`. */\n enabled?: boolean;\n /** Called when the subscription encounters an error. */\n onError?: (error: Error) => void;\n}\n\n/**\n * Manages the lifecycle of a WebSocket subscription: stabilised callback ref,\n * `enabled` guard, subscribe/unsubscribe on dependency changes, and error\n * forwarding via `onError`.\n *\n * @param subscribe - Factory that creates the subscription. Receives a\n * stabilised callback and must return an `ISubscription`.\n * @param callback - Called with each pushed payload. May change between\n * renders without triggering a re-subscription.\n * @param deps - React dependency list that controls re-subscription.\n * @param options - `enabled` toggle and `onError` handler.\n */\nexport function useSubscriptionEffect<TData>(\n subscribe: (callback: (data: TData) => void) => ISubscription,\n callback: (data: TData) => void,\n deps: unknown[],\n options?: SubscriptionOptions,\n): void {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n const onErrorRef = useRef(options?.onError);\n onErrorRef.current = options?.onError;\n\n useEffect(() => {\n if (options?.enabled === false) return;\n let subscription: ISubscription | undefined;\n try {\n subscription = subscribe((data) => callbackRef.current(data));\n } catch (err) {\n onErrorRef.current?.(err instanceof Error ? err : new Error(String(err)));\n }\n return () => subscription?.unsubscribe();\n }, deps);\n}\n","import { Chain, TokenSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useTokenSubscription}. */\nexport interface UseTokenSubscriptionParams {\n chain: Chain;\n address: string;\n}\n\n/** Subscribes to real-time updates for a single token. */\nexport function useTokenSubscription(\n params: UseTokenSubscriptionParams,\n callback: (data: Array<TokenSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) => subscribeClient.subscribeToken(params.chain, params.address, cb),\n callback,\n [subscribeClient, params.chain, params.address, options?.enabled],\n options,\n );\n}\n","import { useMemo } from \"react\";\nimport { Chain, TokenSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useTokensSubscription}. */\nexport interface UseTokensSubscriptionParams {\n chain: Chain;\n addresses: Array<string>;\n}\n\n/** Subscribes to real-time updates for multiple token addresses. */\nexport function useTokensSubscription(\n params: UseTokensSubscriptionParams,\n callback: (data: Array<TokenSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n const addressesKey = useMemo(\n () =>\n Array.from(\n new Set(\n params.addresses.map((address) => address.trim()).filter(Boolean),\n ),\n )\n .sort()\n .join(\",\"),\n [params.addresses],\n );\n const addresses = useMemo(\n () => (addressesKey ? addressesKey.split(\",\") : []),\n [addressesKey],\n );\n\n useSubscriptionEffect(\n (cb) => subscribeClient.subscribeTokens(params.chain, addresses, cb),\n callback,\n [subscribeClient, params.chain, addressesKey, options?.enabled],\n options,\n );\n}\n","import { Chain, TokenCandle, TokenResolution } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useTokenCandlesSubscription}. */\nexport interface UseTokenCandlesSubscriptionParams {\n chain: Chain;\n address: string;\n resolution: TokenResolution;\n}\n\n/** Subscribes to real-time candle updates for a token. */\nexport function useTokenCandlesSubscription(\n params: UseTokenCandlesSubscriptionParams,\n callback: (candles: Array<TokenCandle>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) =>\n subscribeClient.subscribeTokenCandles(\n params.chain,\n params.address,\n params.resolution,\n cb,\n ),\n callback,\n [\n subscribeClient,\n params.chain,\n params.address,\n params.resolution,\n options?.enabled,\n ],\n options,\n );\n}\n","import { Chain, Trade } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useTokenTradesSubscription}. */\nexport interface UseTokenTradesSubscriptionParams {\n chain: Chain;\n address: string;\n}\n\n/** Subscribes to real-time trade events for a token. */\nexport function useTokenTradesSubscription(\n params: UseTokenTradesSubscriptionParams,\n callback: (trades: Array<Trade>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) =>\n subscribeClient.subscribeTokenTrades(params.chain, params.address, cb),\n callback,\n [subscribeClient, params.chain, params.address, options?.enabled],\n options,\n );\n}\n","import { Chain, WalletPnlSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useWalletPnlSubscription}. */\nexport interface UseWalletPnlSubscriptionParams {\n chain: Chain;\n address: string;\n}\n\n/** Subscribes to real-time wallet PnL updates. */\nexport function useWalletPnlSubscription(\n params: UseWalletPnlSubscriptionParams,\n callback: (pnls: Array<WalletPnlSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) =>\n subscribeClient.subscribeWalletPnl(params.chain, params.address, cb),\n callback,\n [subscribeClient, params.chain, params.address, options?.enabled],\n options,\n );\n}\n","import { Chain, PortfolioSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useWalletPortfoliosSubscription}. */\nexport interface UseWalletPortfoliosSubscriptionParams {\n chain: Chain;\n address: string;\n}\n\n/** Subscribes to real-time wallet portfolio updates. */\nexport function useWalletPortfoliosSubscription(\n params: UseWalletPortfoliosSubscriptionParams,\n callback: (portfolios: Array<PortfolioSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) =>\n subscribeClient.subscribeWalletPortfolios(\n params.chain,\n params.address,\n cb,\n ),\n callback,\n [subscribeClient, params.chain, params.address, options?.enabled],\n options,\n );\n}\n","import { Chain, PortfolioPnlSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useWalletPortfolioPnlsSubscription}. */\nexport interface UseWalletPortfolioPnlsSubscriptionParams {\n chain: Chain;\n address: string;\n}\n\n/** Subscribes to real-time wallet portfolio PnL updates. */\nexport function useWalletPortfolioPnlsSubscription(\n params: UseWalletPortfolioPnlsSubscriptionParams,\n callback: (portfolioPnls: Array<PortfolioPnlSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) =>\n subscribeClient.subscribeWalletPortfolioPnls(\n params.chain,\n params.address,\n cb,\n ),\n callback,\n [subscribeClient, params.chain, params.address, options?.enabled],\n options,\n );\n}\n","import { Chain, Trade } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useWalletTradesSubscription}. */\nexport interface UseWalletTradesSubscriptionParams {\n chain: Chain;\n address: string;\n}\n\n/** Subscribes to real-time wallet trade events. */\nexport function useWalletTradesSubscription(\n params: UseWalletTradesSubscriptionParams,\n callback: (trades: Array<Trade>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) =>\n subscribeClient.subscribeWalletTrades(params.chain, params.address, cb),\n callback,\n [subscribeClient, params.chain, params.address, options?.enabled],\n options,\n );\n}\n","import { Activity, Chain } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useTokenActivitiesSubscription}. */\nexport interface UseTokenActivitiesSubscriptionParams {\n chain: Chain;\n address: string;\n}\n\n/** Subscribes to real-time activity events for a token. */\nexport function useTokenActivitiesSubscription(\n params: UseTokenActivitiesSubscriptionParams,\n callback: (activities: Array<Activity>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) =>\n subscribeClient.subscribeTokenActivities(\n params.chain,\n params.address,\n cb,\n ),\n callback,\n [subscribeClient, params.chain, params.address, options?.enabled],\n options,\n );\n}\n","import { Activity, Chain } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useWalletActivitiesSubscription}. */\nexport interface UseWalletActivitiesSubscriptionParams {\n chain: Chain;\n address: string;\n}\n\n/** Subscribes to real-time wallet activity events. */\nexport function useWalletActivitiesSubscription(\n params: UseWalletActivitiesSubscriptionParams,\n callback: (activities: Array<Activity>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) =>\n subscribeClient.subscribeWalletActivities(\n params.chain,\n params.address,\n cb,\n ),\n callback,\n [subscribeClient, params.chain, params.address, options?.enabled],\n options,\n );\n}\n","import { Chain, PoolSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useNewPoolsSubscription}. */\nexport interface UseNewPoolsSubscriptionParams {\n chain: Chain;\n}\n\n/** Subscribes to real-time new pool listings. */\nexport function useNewPoolsSubscription(\n params: UseNewPoolsSubscriptionParams,\n callback: (pools: Array<PoolSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) => subscribeClient.subscribeNewPools(params.chain, cb),\n callback,\n [subscribeClient, params.chain, options?.enabled],\n options,\n );\n}\n","import { Chain, TokenSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useNewTokensSubscription}. */\nexport interface UseNewTokensSubscriptionParams {\n chain: Chain;\n}\n\n/** Subscribes to real-time new token listings. */\nexport function useNewTokensSubscription(\n params: UseNewTokensSubscriptionParams,\n callback: (tokens: Array<TokenSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) => subscribeClient.subscribeNewTokens(params.chain, cb),\n callback,\n [subscribeClient, params.chain, options?.enabled],\n options,\n );\n}\n","import { Chain, TokenSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useTrendingTokensSubscription}. */\nexport interface UseTrendingTokensSubscriptionParams {\n chain: Chain;\n}\n\n/** Subscribes to real-time trending token updates. */\nexport function useTrendingTokensSubscription(\n params: UseTrendingTokensSubscriptionParams,\n callback: (data: Array<TokenSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) => subscribeClient.subscribeTrendingTokens(params.chain, cb),\n callback,\n [subscribeClient, params.chain, options?.enabled],\n options,\n );\n}\n","import { Chain, TokenSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useMigratedTokensSubscription}. */\nexport interface UseMigratedTokensSubscriptionParams {\n chain: Chain;\n}\n\n/** Subscribes to real-time migrated token updates. */\nexport function useMigratedTokensSubscription(\n params: UseMigratedTokensSubscriptionParams,\n callback: (data: Array<TokenSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) => subscribeClient.subscribeMigratedTokens(params.chain, cb),\n callback,\n [subscribeClient, params.chain, options?.enabled],\n options,\n );\n}\n","import { Chain, TokenSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useFinalStretchTokensSubscription}. */\nexport interface UseFinalStretchTokensSubscriptionParams {\n chain: Chain;\n}\n\n/** Subscribes to real-time final-stretch token updates. */\nexport function useFinalStretchTokensSubscription(\n params: UseFinalStretchTokensSubscriptionParams,\n callback: (data: Array<TokenSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) => subscribeClient.subscribeFinalStretchTokens(params.chain, cb),\n callback,\n [subscribeClient, params.chain, options?.enabled],\n options,\n );\n}\n","import { Chain, TokenSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useStockTokensSubscription}. */\nexport interface UseStockTokensSubscriptionParams {\n chain: Chain;\n}\n\n/** Subscribes to real-time stock token updates. */\nexport function useStockTokensSubscription(\n params: UseStockTokensSubscriptionParams,\n callback: (data: Array<TokenSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) => subscribeClient.subscribeStockTokens(params.chain, cb),\n callback,\n [subscribeClient, params.chain, options?.enabled],\n options,\n );\n}\n","import { PropsWithChildren, useMemo } from \"react\";\nimport { IClient, ISubscribeClient } from \"@liberfi.io/types\";\nimport {\n DEFAULT_QUERY_KEY_PREFIX,\n DexClientContext,\n DexClientContextValue,\n} from \"./DexClientContext\";\n\nexport type DexClientProviderProps = PropsWithChildren<{\n client: IClient;\n subscribeClient: ISubscribeClient;\n /**\n * Prefix prepended to every TanStack Query key produced by hooks in this\n * package. Useful for avoiding collisions with other libraries.\n *\n * @default \"liberfi\"\n */\n queryKeyPrefix?: string;\n}>;\n\n/**\n * Provides the Dex client instances and configuration to all descendant hooks.\n *\n * Both `client` and `subscribeClient` should be referentially stable (e.g.\n * created with `useMemo` or stored in a `useRef`) to avoid unnecessary\n * re-renders of consumers.\n */\nexport function DexClientProvider({\n client,\n subscribeClient,\n queryKeyPrefix = DEFAULT_QUERY_KEY_PREFIX,\n children,\n}: DexClientProviderProps) {\n const value = useMemo<DexClientContextValue>(\n () => ({ client, subscribeClient, queryKeyPrefix }),\n [client, subscribeClient, queryKeyPrefix],\n );\n\n return (\n <DexClientContext.Provider value={value}>\n {children}\n </DexClientContext.Provider>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/DexClientContext.ts","../src/hooks/useDexClient.ts","../src/hooks/createQueryHook.ts","../src/hooks/createInfiniteQueryHook.ts","../src/hooks/queryKeyUtils.ts","../src/hooks/useFinalStretchTokensQuery.ts","../src/hooks/useLatestBlockQuery.ts","../src/hooks/useMigratedTokensQuery.ts","../src/hooks/useNewPoolsQuery.ts","../src/hooks/useNewTokensQuery.ts","../src/hooks/usePresignedUploadUrlQuery.ts","../src/hooks/useSearchTokensQuery.ts","../src/hooks/useSearchTokensInfiniteQuery.ts","../src/hooks/useSendTxMutation.ts","../src/hooks/useStockTokensQuery.ts","../src/hooks/useSwapRouteQuery.ts","../src/hooks/useTokenCandlesQuery.ts","../src/hooks/useTokenHoldersQuery.ts","../src/hooks/useTokenMarketDataQuery.ts","../src/hooks/useTokenQuery.ts","../src/hooks/useTokenSecurityQuery.ts","../src/hooks/useTokensQuery.ts","../src/hooks/useTokensByCreatorQuery.ts","../src/hooks/useTokenStatsQuery.ts","../src/hooks/useTokenTopTradersQuery.ts","../src/hooks/useTokenTradesQuery.ts","../src/hooks/useTrendingTokensQuery.ts","../src/hooks/useTxSuccessQuery.ts","../src/hooks/useWalletLimitOrdersQuery.ts","../src/hooks/useWalletPnlQuery.ts","../src/hooks/useWalletPortfolioPnlsQuery.ts","../src/hooks/useWalletPortfolioPnlsInfiniteQuery.ts","../src/hooks/useWalletPortfoliosQuery.ts","../src/hooks/useWalletPortfoliosByTokensQuery.ts","../src/hooks/useWalletPortfoliosInfiniteQuery.ts","../src/hooks/useWalletPortfolioPnlsByTokensQuery.ts","../src/hooks/useWalletTokenPositionsQuery.ts","../src/hooks/useWalletTradesQuery.ts","../src/hooks/useTokenActivitiesQuery.ts","../src/hooks/useWalletActivitiesQuery.ts","../src/hooks/useSubscriptionEffect.ts","../src/hooks/useTokenSubscription.ts","../src/hooks/useTokensSubscription.ts","../src/hooks/useTokenCandlesSubscription.ts","../src/hooks/useTokenTradesSubscription.ts","../src/hooks/useWalletPnlSubscription.ts","../src/hooks/useWalletPortfoliosSubscription.ts","../src/hooks/useWalletPortfolioPnlsSubscription.ts","../src/hooks/useWalletTradesSubscription.ts","../src/hooks/useTokenActivitiesSubscription.ts","../src/hooks/useWalletActivitiesSubscription.ts","../src/hooks/useNewPoolsSubscription.ts","../src/hooks/useNewTokensSubscription.ts","../src/hooks/useTrendingTokensSubscription.ts","../src/hooks/useMigratedTokensSubscription.ts","../src/hooks/useFinalStretchTokensSubscription.ts","../src/hooks/useStockTokensSubscription.ts","../src/DexClientProvider.tsx"],"names":["DEFAULT_QUERY_KEY_PREFIX","DexClientContext","createContext","useDexClient","context","useContext","createQueryHook","config","buildQueryKey","params","prefix","fetchFn","client","useCreatedQuery","options","queryKeyPrefix","useQuery","createInfiniteQueryHook","useCreatedInfiniteQuery","useInfiniteQuery","pageParam","lastPage","toKeySegment","value","toSortedKeySegment","finalStretchTokensQueryKey","fetchFinalStretchTokens","useFinalStretchTokensQuery","p","chain","latestBlockQueryKey","fetchLatestBlock","useLatestBlockQuery","getCachedLatestBlock","queryClient","key","useCachedLatestBlock","useQueryClient","useLatestBlockCacheReader","useCallback","useLatestBlockFetcher","staleTime","cached","migratedTokensQueryKey","fetchMigratedTokens","useMigratedTokensQuery","newPoolsQueryKey","fetchNewPools","useNewPoolsQuery","newTokensQueryKey","fetchNewTokens","useNewTokensQuery","presignedUploadUrlQueryKey","fetchPresignedUploadUrl","usePresignedUploadUrlQuery","searchTokensQueryKey","fetchSearchTokens","useSearchTokensQuery","searchTokensInfiniteQueryKey","useSearchTokensInfiniteQuery","cursor","sendTx","useSendTxMutation","useMutation","stockTokensQueryKey","fetchStockTokens","useStockTokensQuery","swapRouteQueryKey","fetchSwapRoute","useSwapRouteQuery","tokenCandlesQueryKey","fetchTokenCandles","useTokenCandlesQuery","address","resolution","tokenHoldersQueryKey","fetchTokenHolders","useTokenHoldersQuery","tokenMarketDataQueryKey","fetchTokenMarketData","useTokenMarketDataQuery","tokenQueryKey","fetchToken","useTokenQuery","tokenSecurityQueryKey","fetchTokenSecurity","useTokenSecurityQuery","tokensQueryKey","fetchTokens","useTokensQuery","tokensByCreatorQueryKey","fetchTokensByCreator","useTokensByCreatorQuery","creator","tokenStatsQueryKey","fetchTokenStats","useTokenStatsQuery","tokenTopTradersQueryKey","fetchTokenTopTraders","useTokenTopTradersQuery","sortBy","rest","tokenTradesQueryKey","fetchTokenTrades","useTokenTradesQuery","trendingTokensQueryKey","fetchTrendingTokens","useTrendingTokensQuery","txSuccessQueryKey","fetchTxSuccess","useTxSuccessQuery","txHash","timeout","walletLimitOrdersQueryKey","fetchWalletLimitOrders","useWalletLimitOrdersQuery","walletPnlQueryKey","fetchWalletPnl","useWalletPnlQuery","walletPortfolioPnlsQueryKey","fetchWalletPortfolioPnls","useWalletPortfolioPnlsQuery","walletPortfolioPnlsInfiniteQueryKey","useWalletPortfolioPnlsInfiniteQuery","walletPortfoliosQueryKey","fetchWalletPortfolios","useWalletPortfoliosQuery","limit","walletPortfoliosByTokensQueryKey","fetchWalletPortfoliosByTokens","useWalletPortfoliosByTokensQuery","tokenAddresses","walletPortfoliosInfiniteQueryKey","useWalletPortfoliosInfiniteQuery","walletPortfolioPnlsByTokensQueryKey","fetchWalletPortfolioPnlsByTokens","useWalletPortfolioPnlsByTokensQuery","walletTokenPositionsQueryKey","fetchWalletTokenPositions","useWalletTokenPositionsQuery","positionState","walletTradesQueryKey","fetchWalletTrades","useWalletTradesQuery","tokenActivitiesQueryKey","fetchTokenActivities","useTokenActivitiesQuery","walletActivitiesQueryKey","fetchWalletActivities","useWalletActivitiesQuery","useSubscriptionEffect","subscribe","callback","deps","callbackRef","useRef","onErrorRef","useEffect","subscription","data","err","useTokenSubscription","subscribeClient","cb","useTokensSubscription","addressesKey","useMemo","addresses","useTokenCandlesSubscription","useTokenTradesSubscription","useWalletPnlSubscription","useWalletPortfoliosSubscription","useWalletPortfolioPnlsSubscription","useWalletTradesSubscription","useTokenActivitiesSubscription","useWalletActivitiesSubscription","useNewPoolsSubscription","useNewTokensSubscription","useTrendingTokensSubscription","useMigratedTokensSubscription","useFinalStretchTokensSubscription","useStockTokensSubscription","DexClientProvider","children","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["import { createContext } from \"react\";\nimport { IClient, ISubscribeClient } from \"@liberfi.io/types\";\n\n/**\n * Default prefix prepended to every TanStack Query key produced by hooks in\n * this package. Can be overridden via\n * `<DexClientProvider queryKeyPrefix=\"...\">`.\n */\nexport const DEFAULT_QUERY_KEY_PREFIX = \"liberfi\";\n\n/**\n * Shape of the context value provided by `DexClientProvider` and consumed by\n * `useDexClient`.\n */\nexport interface DexClientContextValue {\n /** REST / HTTP client implementing `IClient`. */\n client: IClient;\n /** WebSocket subscription client implementing `ISubscribeClient`. */\n subscribeClient: ISubscribeClient;\n /** Prefix used in all query keys produced by hooks. */\n queryKeyPrefix: string;\n}\n\n/**\n * Internal React context. Use `DexClientProvider` to supply the value and\n * `useDexClient()` to consume it.\n */\nexport const DexClientContext = createContext<DexClientContextValue | null>(\n null,\n);\n","import { useContext } from \"react\";\nimport { DexClientContext, DexClientContextValue } from \"../DexClientContext\";\n\n/**\n * Returns the `DexClientContextValue` provided by `DexClientProvider`.\n *\n * @throws If called outside a `DexClientProvider`.\n */\nexport function useDexClient(): DexClientContextValue {\n const context = useContext(DexClientContext);\n if (context === null) {\n throw new Error(\"useDexClient must be used within a DexClientProvider\");\n }\n return context;\n}\n","import {\n useQuery,\n type UseQueryOptions,\n type UseQueryResult,\n} from \"@tanstack/react-query\";\nimport { IClient } from \"@liberfi.io/types\";\nimport { DEFAULT_QUERY_KEY_PREFIX } from \"../DexClientContext\";\nimport { useDexClient } from \"./useDexClient\";\n\nexport interface QueryHookConfig<TParams, TData> {\n /** Key name segment (e.g. `\"token\"`, `\"newTokens\"`). */\n name: string;\n /** Builds the variable segments of the query key from `params`. */\n queryKey: (params: TParams) => string[];\n /** Fetches data using the API client. */\n fetch: (client: IClient, params: TParams) => Promise<TData>;\n /** Default options merged *below* caller-supplied options. */\n defaultOptions?: Partial<\n Omit<UseQueryOptions<TData, Error, TData, string[]>, \"queryKey\" | \"queryFn\">\n >;\n}\n\nexport interface QueryHookReturn<TParams, TData> {\n /**\n * Builds the full query key including the namespace prefix.\n *\n * Useful for manual cache operations such as `queryClient.invalidateQueries`\n * or `queryClient.prefetchQuery`.\n *\n * @param params - Hook parameters.\n * @param prefix - Override the default prefix (`DEFAULT_QUERY_KEY_PREFIX`).\n */\n queryKey: (params: TParams, prefix?: string) => string[];\n /** Fetches data using the API client (for use outside React). */\n fetch: (client: IClient, params: TParams) => Promise<TData>;\n /** React hook that fetches and caches data via TanStack Query. */\n useQuery: (\n params: TParams,\n options?: Omit<\n UseQueryOptions<TData, Error, TData, string[]>,\n \"queryKey\" | \"queryFn\"\n >,\n ) => UseQueryResult<TData, Error>;\n}\n\n/**\n * Creates a `useQuery`-based hook, its `queryKey` builder and a standalone\n * `fetch` function from a single declarative config object.\n */\nexport function createQueryHook<TParams, TData>(\n config: QueryHookConfig<TParams, TData>,\n): QueryHookReturn<TParams, TData> {\n function buildQueryKey(\n params: TParams,\n prefix: string = DEFAULT_QUERY_KEY_PREFIX,\n ): string[] {\n return [prefix, config.name, ...config.queryKey(params)];\n }\n\n function fetchFn(client: IClient, params: TParams): Promise<TData> {\n return config.fetch(client, params);\n }\n\n function useCreatedQuery(\n params: TParams,\n options: Omit<\n UseQueryOptions<TData, Error, TData, string[]>,\n \"queryKey\" | \"queryFn\"\n > = {},\n ): UseQueryResult<TData, Error> {\n const { client, queryKeyPrefix } = useDexClient();\n return useQuery({\n queryKey: buildQueryKey(params, queryKeyPrefix),\n queryFn: () => config.fetch(client, params),\n ...config.defaultOptions,\n ...options,\n });\n }\n\n return { queryKey: buildQueryKey, fetch: fetchFn, useQuery: useCreatedQuery };\n}\n","import {\n useInfiniteQuery,\n type InfiniteData,\n type UseInfiniteQueryOptions,\n type UseInfiniteQueryResult,\n} from \"@tanstack/react-query\";\nimport { IClient } from \"@liberfi.io/types\";\nimport { DEFAULT_QUERY_KEY_PREFIX } from \"../DexClientContext\";\nimport { useDexClient } from \"./useDexClient\";\n\ninterface CursorPaginatedResult {\n hasNext?: boolean;\n endCursor?: string;\n}\n\nexport interface InfiniteQueryHookConfig<\n TParams,\n TData extends CursorPaginatedResult,\n> {\n /** Key name segment (e.g. `\"walletPortfolios\"`). */\n name: string;\n /** Builds the variable segments of the query key from `params`. */\n queryKey: (params: TParams) => string[];\n /** Fetches a single page of data. */\n fetch: (\n client: IClient,\n params: TParams,\n cursor: string | undefined,\n ) => Promise<TData>;\n}\n\nexport interface InfiniteQueryHookReturn<\n TParams,\n TData extends CursorPaginatedResult,\n> {\n /**\n * Builds the full query key including the namespace prefix and an\n * `\"infinite\"` tag to distinguish it from the non-infinite variant.\n */\n queryKey: (params: TParams, prefix?: string) => string[];\n /** React hook that fetches cursor-paginated data via TanStack Query. */\n useInfiniteQuery: (\n params: TParams,\n options?: Omit<\n UseInfiniteQueryOptions<\n TData,\n Error,\n InfiniteData<TData>,\n string[],\n string | undefined\n >,\n \"queryKey\" | \"queryFn\" | \"initialPageParam\" | \"getNextPageParam\"\n >,\n ) => UseInfiniteQueryResult<InfiniteData<TData>, Error>;\n}\n\n/**\n * Creates a `useInfiniteQuery`-based hook and its `queryKey` builder for\n * cursor-paginated endpoints.\n */\nexport function createInfiniteQueryHook<\n TParams,\n TData extends CursorPaginatedResult,\n>(\n config: InfiniteQueryHookConfig<TParams, TData>,\n): InfiniteQueryHookReturn<TParams, TData> {\n function buildQueryKey(\n params: TParams,\n prefix: string = DEFAULT_QUERY_KEY_PREFIX,\n ): string[] {\n return [prefix, config.name, \"infinite\", ...config.queryKey(params)];\n }\n\n function useCreatedInfiniteQuery(\n params: TParams,\n options: Omit<\n UseInfiniteQueryOptions<\n TData,\n Error,\n InfiniteData<TData>,\n string[],\n string | undefined\n >,\n \"queryKey\" | \"queryFn\" | \"initialPageParam\" | \"getNextPageParam\"\n > = {},\n ) {\n const { client, queryKeyPrefix } = useDexClient();\n return useInfiniteQuery({\n queryKey: buildQueryKey(params, queryKeyPrefix),\n queryFn: ({ pageParam }) => config.fetch(client, params, pageParam),\n initialPageParam: undefined as string | undefined,\n getNextPageParam: (lastPage) =>\n lastPage.hasNext ? lastPage.endCursor : undefined,\n ...options,\n });\n }\n\n return {\n queryKey: buildQueryKey,\n useInfiniteQuery: useCreatedInfiniteQuery,\n };\n}\n","/**\n * Serialises a primitive value (or Date) into a stable string for use in query\n * keys. `undefined` and `null` map to `\"\"`.\n */\nexport function toKeySegment(\n value: string | number | boolean | Date | undefined | null,\n): string {\n if (value === undefined || value === null) return \"\";\n if (value instanceof Date) return value.toISOString();\n return String(value);\n}\n\n/**\n * Serialises an array value into a stable, sorted JSON string for use in\n * query keys.\n */\nexport function toSortedKeySegment(\n value: unknown[] | undefined | null,\n): string {\n if (!value || value.length === 0) return \"[]\";\n return JSON.stringify([...value].sort());\n}\n","import { Chain, GetTokenListOptions, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useFinalStretchTokensQuery}. */\nexport interface UseFinalStretchTokensQueryParams extends GetTokenListOptions {\n chain: Chain;\n}\n\nconst {\n queryKey: finalStretchTokensQueryKey,\n fetch: fetchFinalStretchTokens,\n useQuery: useFinalStretchTokensQuery,\n} = createQueryHook<UseFinalStretchTokensQueryParams, Array<Token>>({\n name: \"finalStretchTokens\",\n queryKey: (p) => [\n p.chain,\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n toSortedKeySegment(p.keywords),\n toSortedKeySegment(p.excludeKeywords),\n toSortedKeySegment(p.filters),\n ],\n fetch: (client, { chain, ...options }) =>\n client.getFinalStretchTokens(chain, options),\n});\n\nexport {\n finalStretchTokensQueryKey,\n fetchFinalStretchTokens,\n useFinalStretchTokensQuery,\n};\n","import { useCallback } from \"react\";\nimport { useQueryClient, type QueryClient } from \"@tanstack/react-query\";\nimport { BlockchainLatestBlock, LatestBlockParams } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { useDexClient } from \"./useDexClient\";\n\nexport type UseLatestBlockQueryParams = LatestBlockParams;\n\nconst {\n queryKey: latestBlockQueryKey,\n fetch: fetchLatestBlock,\n useQuery: useLatestBlockQuery,\n} = createQueryHook<UseLatestBlockQueryParams, BlockchainLatestBlock>({\n name: \"latestBlock\",\n queryKey: (p) => [p.chain],\n fetch: (client, params) => client.getLatestBlock(params),\n});\n\nexport interface LatestBlockCacheResult {\n data?: BlockchainLatestBlock;\n dataUpdatedAt: number;\n}\n\nexport function getCachedLatestBlock(\n queryClient: QueryClient,\n params: UseLatestBlockQueryParams,\n prefix?: string,\n): LatestBlockCacheResult {\n const key = latestBlockQueryKey(params, prefix);\n return {\n data: queryClient.getQueryData<BlockchainLatestBlock>(key),\n dataUpdatedAt: queryClient.getQueryState(key)?.dataUpdatedAt ?? 0,\n };\n}\n\nexport function useCachedLatestBlock(\n params: UseLatestBlockQueryParams,\n): LatestBlockCacheResult {\n const queryClient = useQueryClient();\n const { queryKeyPrefix } = useDexClient();\n return getCachedLatestBlock(queryClient, params, queryKeyPrefix);\n}\n\nexport function useLatestBlockCacheReader(\n params: UseLatestBlockQueryParams,\n): () => LatestBlockCacheResult {\n const queryClient = useQueryClient();\n const { queryKeyPrefix } = useDexClient();\n return useCallback(\n () => getCachedLatestBlock(queryClient, params, queryKeyPrefix),\n [queryClient, params, queryKeyPrefix],\n );\n}\n\nexport function useLatestBlockFetcher(\n params: UseLatestBlockQueryParams,\n): (opts?: { staleTime?: number }) => Promise<LatestBlockCacheResult> {\n const queryClient = useQueryClient();\n const { client, queryKeyPrefix } = useDexClient();\n return useCallback(\n async ({ staleTime = 6_000 } = {}) => {\n const cached = getCachedLatestBlock(queryClient, params, queryKeyPrefix);\n if (cached.data && Date.now() - cached.dataUpdatedAt <= staleTime) {\n return cached;\n }\n\n const key = latestBlockQueryKey(params, queryKeyPrefix);\n await queryClient.fetchQuery({\n queryKey: key,\n queryFn: () => fetchLatestBlock(client, params),\n staleTime,\n });\n return getCachedLatestBlock(queryClient, params, queryKeyPrefix);\n },\n [queryClient, client, queryKeyPrefix, params],\n );\n}\n\nexport { fetchLatestBlock, latestBlockQueryKey, useLatestBlockQuery };\n","import { Chain, GetTokenListOptions, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useMigratedTokensQuery}. */\nexport interface UseMigratedTokensQueryParams extends GetTokenListOptions {\n chain: Chain;\n}\n\nconst {\n queryKey: migratedTokensQueryKey,\n fetch: fetchMigratedTokens,\n useQuery: useMigratedTokensQuery,\n} = createQueryHook<UseMigratedTokensQueryParams, Array<Token>>({\n name: \"migratedTokens\",\n queryKey: (p) => [\n p.chain,\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n toSortedKeySegment(p.keywords),\n toSortedKeySegment(p.excludeKeywords),\n toSortedKeySegment(p.filters),\n ],\n fetch: (client, { chain, ...options }) =>\n client.getMigratedTokens(chain, options),\n});\n\nexport { migratedTokensQueryKey, fetchMigratedTokens, useMigratedTokensQuery };\n","import { Chain, GetTokenListOptions, Pool } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useNewPoolsQuery}. */\nexport interface UseNewPoolsQueryParams extends GetTokenListOptions {\n chain: Chain;\n}\n\nconst {\n queryKey: newPoolsQueryKey,\n fetch: fetchNewPools,\n useQuery: useNewPoolsQuery,\n} = createQueryHook<UseNewPoolsQueryParams, Array<Pool>>({\n name: \"newPools\",\n queryKey: (p) => [\n p.chain,\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n toSortedKeySegment(p.keywords),\n toSortedKeySegment(p.excludeKeywords),\n toSortedKeySegment(p.filters),\n ],\n fetch: (client, { chain, ...options }) => client.getNewPools(chain, options),\n});\n\nexport { newPoolsQueryKey, fetchNewPools, useNewPoolsQuery };\n","import { Chain, GetTokenListOptions, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useNewTokensQuery}. */\nexport interface UseNewTokensQueryParams extends GetTokenListOptions {\n chain: Chain;\n}\n\nconst {\n queryKey: newTokensQueryKey,\n fetch: fetchNewTokens,\n useQuery: useNewTokensQuery,\n} = createQueryHook<UseNewTokensQueryParams, Array<Token>>({\n name: \"newTokens\",\n queryKey: (p) => [\n p.chain,\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n toSortedKeySegment(p.keywords),\n toSortedKeySegment(p.excludeKeywords),\n toSortedKeySegment(p.filters),\n ],\n fetch: (client, { chain, ...options }) => client.getNewTokens(chain, options),\n});\n\nexport { newTokensQueryKey, fetchNewTokens, useNewTokensQuery };\n","import { useQuery, UseQueryOptions } from \"@tanstack/react-query\";\nimport { IClient } from \"@liberfi.io/types\";\nimport { DEFAULT_QUERY_KEY_PREFIX } from \"../DexClientContext\";\nimport { useDexClient } from \"./useDexClient\";\n\n/**\n * Builds the query key for `usePresignedUploadUrlQuery`.\n *\n * @param prefix - Override the default query key prefix.\n */\nexport function presignedUploadUrlQueryKey(\n prefix: string = DEFAULT_QUERY_KEY_PREFIX,\n): string[] {\n return [prefix, \"presignedUploadUrl\"];\n}\n\n/** Fetches a presigned upload URL (for use outside React). */\nexport async function fetchPresignedUploadUrl(client: IClient) {\n return await client.getPresignedUploadUrl();\n}\n\n/** Fetches a one-time presigned upload URL. `staleTime` defaults to `0`. */\nexport function usePresignedUploadUrlQuery(\n options: Omit<\n UseQueryOptions<string, Error, string, string[]>,\n \"queryKey\" | \"queryFn\"\n > = {},\n) {\n const { client, queryKeyPrefix } = useDexClient();\n return useQuery({\n queryKey: presignedUploadUrlQueryKey(queryKeyPrefix),\n queryFn: async () => fetchPresignedUploadUrl(client),\n staleTime: 0,\n ...options,\n });\n}\n","import { SearchTokenCursorList, SearchTokensOptions } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\nexport type UseSearchTokensQueryParams = SearchTokensOptions;\n\nconst {\n queryKey: searchTokensQueryKey,\n fetch: fetchSearchTokens,\n useQuery: useSearchTokensQuery,\n} = createQueryHook<UseSearchTokensQueryParams, SearchTokenCursorList>({\n name: \"searchTokens\",\n queryKey: (p) => [\n toKeySegment(p.cursor),\n toKeySegment(p.limit),\n toKeySegment(p.direction),\n toSortedKeySegment(p.chains),\n toKeySegment(p.keyword),\n toSortedKeySegment(p.filters),\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n ],\n fetch: (client, params) => client.searchTokens(params),\n});\n\nexport { searchTokensQueryKey, fetchSearchTokens, useSearchTokensQuery };\n","import { SearchTokenCursorList, SearchTokensOptions } from \"@liberfi.io/types\";\nimport { createInfiniteQueryHook } from \"./createInfiniteQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useSearchTokensInfiniteQuery}. */\nexport type UseSearchTokensInfiniteQueryParams = Omit<\n SearchTokensOptions,\n \"cursor\" | \"direction\"\n>;\n\nconst {\n queryKey: searchTokensInfiniteQueryKey,\n useInfiniteQuery: useSearchTokensInfiniteQuery,\n} = createInfiniteQueryHook<\n UseSearchTokensInfiniteQueryParams,\n SearchTokenCursorList\n>({\n name: \"searchTokens\",\n queryKey: (p) => [\n toKeySegment(p.limit),\n toSortedKeySegment(p.chains),\n toKeySegment(p.keyword),\n toSortedKeySegment(p.filters),\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n ],\n fetch: (client, params, cursor) => client.searchTokens({ ...params, cursor }),\n});\n\nexport { searchTokensInfiniteQueryKey, useSearchTokensInfiniteQuery };\n","import { useMutation, UseMutationOptions } from \"@tanstack/react-query\";\nimport { IClient, SendTxParams, SendTxResult } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\n\nexport type UseSendTxMutationParams = SendTxParams;\n\n/** Sends a transaction via the API client (for use outside React). */\nexport async function sendTx(client: IClient, params: UseSendTxMutationParams) {\n return await client.sendTx(params);\n}\n\n/** Mutation hook that sends a transaction. */\nexport function useSendTxMutation(\n options: Omit<\n UseMutationOptions<SendTxResult, Error, UseSendTxMutationParams>,\n \"mutationFn\"\n > = {},\n) {\n const { client } = useDexClient();\n return useMutation({\n mutationFn: async (params: UseSendTxMutationParams) =>\n sendTx(client, params),\n ...options,\n });\n}\n","import { Chain, GetTokenListOptions, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useStockTokensQuery}. */\nexport interface UseStockTokensQueryParams extends GetTokenListOptions {\n chain: Chain;\n}\n\nconst {\n queryKey: stockTokensQueryKey,\n fetch: fetchStockTokens,\n useQuery: useStockTokensQuery,\n} = createQueryHook<UseStockTokensQueryParams, Array<Token>>({\n name: \"stockTokens\",\n queryKey: (p) => [\n p.chain,\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n toSortedKeySegment(p.keywords),\n toSortedKeySegment(p.excludeKeywords),\n toSortedKeySegment(p.filters),\n ],\n fetch: (client, { chain, ...options }) =>\n client.getStockTokens(chain, options),\n});\n\nexport { stockTokensQueryKey, fetchStockTokens, useStockTokensQuery };\n","import { SwapParams, SwapRoute } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\nexport type UseSwapRouteQueryParams = SwapParams;\n\nconst {\n queryKey: swapRouteQueryKey,\n fetch: fetchSwapRoute,\n useQuery: useSwapRouteQuery,\n} = createQueryHook<UseSwapRouteQueryParams, SwapRoute>({\n name: \"swapRoute\",\n queryKey: (p) => [\n p.chain,\n p.userAddress,\n p.input,\n p.output,\n p.mode,\n p.amount,\n toKeySegment(p.slippage),\n toKeySegment(p.priorityFee),\n toKeySegment(p.tipFee),\n toKeySegment(p.isAntiMev),\n ],\n fetch: (client, params) => client.swapRoute(params),\n});\n\nexport { swapRouteQueryKey, fetchSwapRoute, useSwapRouteQuery };\n","import {\n Chain,\n GetTokenCandlesOptions,\n TokenCandle,\n TokenResolution,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenCandlesQuery}. */\nexport interface UseTokenCandlesQueryParams extends GetTokenCandlesOptions {\n chain: Chain;\n address: string;\n resolution: TokenResolution;\n}\n\nconst {\n queryKey: tokenCandlesQueryKey,\n fetch: fetchTokenCandles,\n useQuery: useTokenCandlesQuery,\n} = createQueryHook<UseTokenCandlesQueryParams, Array<TokenCandle>>({\n name: \"tokenCandles\",\n queryKey: (p) => [\n p.chain,\n p.address,\n p.resolution,\n toKeySegment(p.after),\n toKeySegment(p.before),\n toKeySegment(p.limit),\n ],\n fetch: (client, { chain, address, resolution, ...options }) =>\n client.getTokenCandles(chain, address, resolution, options),\n});\n\nexport { tokenCandlesQueryKey, fetchTokenCandles, useTokenCandlesQuery };\n","import {\n Chain,\n CursorList,\n GetTokenHoldersOptions,\n TokenHolder,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenHoldersQuery}. */\nexport interface UseTokenHoldersQueryParams extends GetTokenHoldersOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenHoldersQueryKey,\n fetch: fetchTokenHolders,\n useQuery: useTokenHoldersQuery,\n} = createQueryHook<UseTokenHoldersQueryParams, CursorList<TokenHolder>>({\n name: \"tokenHolders\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.cursor),\n toKeySegment(p.limit),\n toKeySegment(p.direction),\n toKeySegment(p.sortBy),\n ],\n fetch: (client, { chain, address, ...options }) =>\n client.getTokenHolders(chain, address, options),\n});\n\nexport { tokenHoldersQueryKey, fetchTokenHolders, useTokenHoldersQuery };\n","import { Chain, TokenMarketData } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\n\n/** Parameters for {@link useTokenMarketDataQuery}. */\nexport interface UseTokenMarketDataQueryParams {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenMarketDataQueryKey,\n fetch: fetchTokenMarketData,\n useQuery: useTokenMarketDataQuery,\n} = createQueryHook<UseTokenMarketDataQueryParams, TokenMarketData>({\n name: \"tokenMarketData\",\n queryKey: (p) => [p.chain, p.address],\n fetch: (client, p) => client.getTokenMarketData(p.chain, p.address),\n});\n\nexport {\n tokenMarketDataQueryKey,\n fetchTokenMarketData,\n useTokenMarketDataQuery,\n};\n","import { Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\n\n/** Parameters for {@link useTokenQuery}. */\nexport interface UseTokenQueryParams {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenQueryKey,\n fetch: fetchToken,\n useQuery: useTokenQuery,\n} = createQueryHook<UseTokenQueryParams, Token>({\n name: \"token\",\n queryKey: (p) => [p.chain, p.address],\n fetch: (client, p) => client.getToken(p.chain, p.address),\n});\n\nexport { tokenQueryKey, fetchToken, useTokenQuery };\n","import { Chain, TokenSecurity } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\n\n/** Parameters for {@link useTokenSecurityQuery}. */\nexport interface UseTokenSecurityQueryParams {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenSecurityQueryKey,\n fetch: fetchTokenSecurity,\n useQuery: useTokenSecurityQuery,\n} = createQueryHook<UseTokenSecurityQueryParams, TokenSecurity>({\n name: \"tokenSecurity\",\n queryKey: (p) => [p.chain, p.address],\n fetch: (client, p) => client.getTokenSecurity(p.chain, p.address),\n});\n\nexport { tokenSecurityQueryKey, fetchTokenSecurity, useTokenSecurityQuery };\n","import { Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\n\n/** Parameters for {@link useTokensQuery}. */\nexport interface UseTokensQueryParams {\n chain: Chain;\n addresses: Array<string>;\n}\n\nconst {\n queryKey: tokensQueryKey,\n fetch: fetchTokens,\n useQuery: useTokensQuery,\n} = createQueryHook<UseTokensQueryParams, Array<Token>>({\n name: \"tokens\",\n queryKey: (p) => [p.chain, [...p.addresses].sort().join(\",\")],\n fetch: (client, p) => client.getTokens(p.chain, p.addresses),\n});\n\nexport { tokensQueryKey, fetchTokens, useTokensQuery };\n","import {\n Chain,\n CursorList,\n GetTokensByCreatorOptions,\n Token,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokensByCreatorQuery}. */\nexport interface UseTokensByCreatorQueryParams extends GetTokensByCreatorOptions {\n chain: Chain;\n creator: string;\n}\n\n/**\n * Fetch tokens created by a given wallet (\"Dev Tokens\" tab).\n *\n * NOTE: The backend does not yet implement a creator-index endpoint, so\n * `Client.getTokensByCreator` throws a `NotImplementedError`. Consumers\n * should gate via `enabled: false` or handle the error with\n * `isNotImplementedError` to render an empty state.\n */\nconst {\n queryKey: tokensByCreatorQueryKey,\n fetch: fetchTokensByCreator,\n useQuery: useTokensByCreatorQuery,\n} = createQueryHook<UseTokensByCreatorQueryParams, CursorList<Token>>({\n name: \"tokensByCreator\",\n queryKey: (p) => [\n p.chain,\n p.creator,\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n toKeySegment(p.cursor),\n toKeySegment(p.limit),\n toKeySegment(p.direction),\n ],\n fetch: (client, { chain, creator, ...options }) =>\n client.getTokensByCreator(chain, creator, options),\n defaultOptions: {\n retry: false,\n },\n});\n\nexport {\n tokensByCreatorQueryKey,\n fetchTokensByCreator,\n useTokensByCreatorQuery,\n};\n","import { Chain, TokenStats } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\n\n/** Parameters for {@link useTokenStatsQuery}. */\nexport interface UseTokenStatsQueryParams {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenStatsQueryKey,\n fetch: fetchTokenStats,\n useQuery: useTokenStatsQuery,\n} = createQueryHook<UseTokenStatsQueryParams, TokenStats>({\n name: \"tokenStats\",\n queryKey: (p) => [p.chain, p.address],\n fetch: (client, p) => client.getTokenStats(p.chain, p.address),\n});\n\nexport { tokenStatsQueryKey, fetchTokenStats, useTokenStatsQuery };\n","import {\n Chain,\n CursorList,\n GetTokenHoldersOptions,\n TokenHolder,\n TokenHoldersSortBy,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenTopTradersQuery}. */\nexport interface UseTokenTopTradersQueryParams extends Omit<\n GetTokenHoldersOptions,\n \"sortBy\"\n> {\n chain: Chain;\n address: string;\n /**\n * Sort field. Defaults to `realizedPnl` (the defining trait of the\n * \"Top Traders\" view). `holdingUsd` is accepted as a fallback when the\n * backend has not yet enabled realized-PnL sorting on the holders\n * endpoint.\n */\n sortBy?: TokenHoldersSortBy;\n}\n\n/**\n * Fetch the \"Top Traders\" list for a token.\n *\n * The server exposes top traders through the same `/holders` endpoint but\n * ranked by realized PnL rather than current holdings. This hook is a thin\n * bridge over {@link useTokenHoldersQuery} that pins `sortBy` to\n * `realizedPnl` by default so consumers get a dedicated query cache and a\n * clear semantic name.\n */\nconst {\n queryKey: tokenTopTradersQueryKey,\n fetch: fetchTokenTopTraders,\n useQuery: useTokenTopTradersQuery,\n} = createQueryHook<UseTokenTopTradersQueryParams, CursorList<TokenHolder>>({\n name: \"tokenTopTraders\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.cursor),\n toKeySegment(p.limit),\n toKeySegment(p.direction),\n toKeySegment(p.sortBy ?? \"realizedPnl\"),\n ],\n fetch: (client, { chain, address, sortBy, ...rest }) =>\n client.getTokenHolders(chain, address, {\n ...rest,\n sortBy: sortBy ?? \"realizedPnl\",\n }),\n});\n\nexport {\n tokenTopTradersQueryKey,\n fetchTokenTopTraders,\n useTokenTopTradersQuery,\n};\n","import { Chain, CursorList, GetTradesOptions, Trade } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenTradesQuery}. */\nexport interface UseTokenTradesQueryParams extends GetTradesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenTradesQueryKey,\n fetch: fetchTokenTrades,\n useQuery: useTokenTradesQuery,\n} = createQueryHook<UseTokenTradesQueryParams, CursorList<Trade>>({\n name: \"tokenTrades\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.before),\n toKeySegment(p.after),\n toKeySegment(p.beforeBlockHeight),\n toKeySegment(p.afterBlockHeight),\n toKeySegment(p.type),\n toKeySegment(p.poolAddress),\n ],\n fetch: (client, { chain, address, ...options }) =>\n client.getTokenTrades(chain, address, options),\n});\n\nexport { tokenTradesQueryKey, fetchTokenTrades, useTokenTradesQuery };\n","import { Chain, GetTokenListOptions, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTrendingTokensQuery}. */\nexport interface UseTrendingTokensQueryParams extends GetTokenListOptions {\n chain: Chain;\n resolution: \"1m\" | \"5m\" | \"1h\" | \"4h\" | \"24h\";\n}\n\nconst {\n queryKey: trendingTokensQueryKey,\n fetch: fetchTrendingTokens,\n useQuery: useTrendingTokensQuery,\n} = createQueryHook<UseTrendingTokensQueryParams, Array<Token>>({\n name: \"trendingTokens\",\n queryKey: (p) => [\n p.chain,\n p.resolution,\n toKeySegment(p.sortBy),\n toKeySegment(p.sortDirection),\n toSortedKeySegment(p.keywords),\n toSortedKeySegment(p.excludeKeywords),\n toSortedKeySegment(p.filters),\n ],\n fetch: (client, { chain, resolution, ...options }) =>\n client.getTrendingTokens(chain, resolution, options),\n});\n\nexport { trendingTokensQueryKey, fetchTrendingTokens, useTrendingTokensQuery };\n","import { Chain } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTxSuccessQuery}. */\nexport interface UseTxSuccessQueryParams {\n chain: Chain;\n txHash: string;\n timeout?: number;\n}\n\nconst {\n queryKey: txSuccessQueryKey,\n fetch: fetchTxSuccess,\n useQuery: useTxSuccessQuery,\n} = createQueryHook<UseTxSuccessQueryParams, boolean>({\n name: \"txSuccess\",\n queryKey: (p) => [p.chain, p.txHash, toKeySegment(p.timeout)],\n fetch: (client, { chain, txHash, timeout }) =>\n client.checkTxSuccess(chain, txHash, timeout),\n});\n\nexport { txSuccessQueryKey, fetchTxSuccess, useTxSuccessQuery };\n","import {\n Chain,\n CursorList,\n GetWalletLimitOrdersOptions,\n LimitOrder,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletLimitOrdersQuery}. */\nexport interface UseWalletLimitOrdersQueryParams extends GetWalletLimitOrdersOptions {\n chain: Chain;\n address: string;\n}\n\n/**\n * Fetch a wallet's limit orders.\n *\n * NOTE: The backend does not yet implement a limit-orders endpoint, so\n * `Client.getWalletLimitOrders` throws a `NotImplementedError`. Consumers\n * should disable the query (via `enabled: false`) or handle the error with\n * `isNotImplementedError` to render an \"Orders coming soon\" empty state.\n */\nconst {\n queryKey: walletLimitOrdersQueryKey,\n fetch: fetchWalletLimitOrders,\n useQuery: useWalletLimitOrdersQuery,\n} = createQueryHook<UseWalletLimitOrdersQueryParams, CursorList<LimitOrder>>({\n name: \"walletLimitOrders\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.state),\n toKeySegment(p.tokenAddress),\n toKeySegment(p.cursor),\n toKeySegment(p.limit),\n toKeySegment(p.direction),\n ],\n fetch: (client, { chain, address, ...options }) =>\n client.getWalletLimitOrders(chain, address, options),\n defaultOptions: {\n retry: false,\n },\n});\n\nexport {\n walletLimitOrdersQueryKey,\n fetchWalletLimitOrders,\n useWalletLimitOrdersQuery,\n};\n","import { Chain, WalletPnl, WalletPnlResolution } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletPnlQuery}. */\nexport interface UseWalletPnlQueryParams {\n chain: Chain;\n address: string;\n resolution?: WalletPnlResolution;\n}\n\nconst {\n queryKey: walletPnlQueryKey,\n fetch: fetchWalletPnl,\n useQuery: useWalletPnlQuery,\n} = createQueryHook<UseWalletPnlQueryParams, WalletPnl>({\n name: \"walletPnl\",\n queryKey: (p) => [p.chain, p.address, toKeySegment(p.resolution ?? \"all\")],\n fetch: (client, { chain, address, resolution }) =>\n client.getWalletPnl(chain, address, resolution),\n});\n\nexport { walletPnlQueryKey, fetchWalletPnl, useWalletPnlQuery };\n","import {\n Chain,\n GetWalletPortfolioPnlsOptions,\n WalletPortfolioPnls,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletPortfolioPnlsQuery}. */\nexport interface UseWalletPortfolioPnlsQueryParams extends GetWalletPortfolioPnlsOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: walletPortfolioPnlsQueryKey,\n fetch: fetchWalletPortfolioPnls,\n useQuery: useWalletPortfolioPnlsQuery,\n} = createQueryHook<UseWalletPortfolioPnlsQueryParams, WalletPortfolioPnls>({\n name: \"walletPortfolioPnls\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.cursor),\n toKeySegment(p.limit),\n toKeySegment(p.direction),\n toKeySegment(p.resolution),\n toKeySegment(p.positionState),\n toKeySegment(p.sortBy),\n ],\n fetch: (client, { chain, address, ...options }) =>\n client.getWalletPortfolioPnls(chain, address, options),\n});\n\nexport {\n walletPortfolioPnlsQueryKey,\n fetchWalletPortfolioPnls,\n useWalletPortfolioPnlsQuery,\n};\n","import {\n Chain,\n PositionState,\n WalletPnlResolution,\n WalletPnlSortBy,\n WalletPortfolioPnls,\n} from \"@liberfi.io/types\";\nimport { createInfiniteQueryHook } from \"./createInfiniteQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletPortfolioPnlsInfiniteQuery}. */\nexport interface UseWalletPortfolioPnlsInfiniteQueryParams {\n chain: Chain;\n address: string;\n limit?: number;\n /** Phase 3 statistics window (default 30d). */\n resolution?: WalletPnlResolution;\n /** Phase 3 position-state filter. */\n positionState?: PositionState;\n /** Phase 3 sort field. */\n sortBy?: WalletPnlSortBy;\n}\n\nconst {\n queryKey: walletPortfolioPnlsInfiniteQueryKey,\n useInfiniteQuery: useWalletPortfolioPnlsInfiniteQuery,\n} = createInfiniteQueryHook<\n UseWalletPortfolioPnlsInfiniteQueryParams,\n WalletPortfolioPnls\n>({\n name: \"walletPortfolioPnls\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.limit),\n toKeySegment(p.resolution),\n toKeySegment(p.positionState),\n toKeySegment(p.sortBy),\n ],\n fetch: (client, params, cursor) =>\n client.getWalletPortfolioPnls(params.chain, params.address, {\n cursor,\n limit: params.limit ?? 100,\n resolution: params.resolution,\n positionState: params.positionState,\n sortBy: params.sortBy,\n }),\n});\n\nexport {\n walletPortfolioPnlsInfiniteQueryKey,\n useWalletPortfolioPnlsInfiniteQuery,\n};\n","import { Chain, WalletPortfolios } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletPortfoliosQuery}. */\nexport interface UseWalletPortfoliosQueryParams {\n chain: Chain;\n address: string;\n cursor?: string;\n limit?: number;\n}\n\nconst {\n queryKey: walletPortfoliosQueryKey,\n fetch: fetchWalletPortfolios,\n useQuery: useWalletPortfoliosQuery,\n} = createQueryHook<UseWalletPortfoliosQueryParams, WalletPortfolios>({\n name: \"walletPortfolios\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.cursor),\n toKeySegment(p.limit),\n ],\n fetch: (client, { chain, address, cursor, limit }) =>\n client.getWalletPortfolios(chain, address, { cursor, limit }),\n});\n\nexport {\n walletPortfoliosQueryKey,\n fetchWalletPortfolios,\n useWalletPortfoliosQuery,\n};\n","import { Chain, Portfolio } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\n\n/** Parameters for {@link useWalletPortfoliosByTokensQuery}. */\nexport interface UseWalletPortfoliosByTokensQueryParams {\n chain: Chain;\n address: string;\n tokenAddresses: Array<string>;\n}\n\nconst {\n queryKey: walletPortfoliosByTokensQueryKey,\n fetch: fetchWalletPortfoliosByTokens,\n useQuery: useWalletPortfoliosByTokensQuery,\n} = createQueryHook<UseWalletPortfoliosByTokensQueryParams, Array<Portfolio>>({\n name: \"walletPortfoliosByTokens\",\n queryKey: (p) => [p.chain, p.address, ...[...p.tokenAddresses].sort()],\n fetch: (client, { chain, address, tokenAddresses }) =>\n client.getWalletPortfoliosByTokens(chain, address, tokenAddresses),\n});\n\nexport {\n walletPortfoliosByTokensQueryKey,\n fetchWalletPortfoliosByTokens,\n useWalletPortfoliosByTokensQuery,\n};\n","import { Chain, WalletPortfolios } from \"@liberfi.io/types\";\nimport { createInfiniteQueryHook } from \"./createInfiniteQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletPortfoliosInfiniteQuery}. */\nexport interface UseWalletPortfoliosInfiniteQueryParams {\n chain: Chain;\n address: string;\n limit?: number;\n}\n\nconst {\n queryKey: walletPortfoliosInfiniteQueryKey,\n useInfiniteQuery: useWalletPortfoliosInfiniteQuery,\n} = createInfiniteQueryHook<\n UseWalletPortfoliosInfiniteQueryParams,\n WalletPortfolios\n>({\n name: \"walletPortfolios\",\n queryKey: (p) => [p.chain, p.address, toKeySegment(p.limit)],\n fetch: (client, params, cursor) =>\n client.getWalletPortfolios(params.chain, params.address, {\n cursor,\n limit: params.limit ?? 100,\n }),\n});\n\nexport { walletPortfoliosInfiniteQueryKey, useWalletPortfoliosInfiniteQuery };\n","import { Chain, PortfolioPnl } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\n\n/** Parameters for {@link useWalletPortfolioPnlsByTokensQuery}. */\nexport interface UseWalletPortfolioPnlsByTokensQueryParams {\n chain: Chain;\n address: string;\n tokenAddresses: Array<string>;\n}\n\nconst {\n queryKey: walletPortfolioPnlsByTokensQueryKey,\n fetch: fetchWalletPortfolioPnlsByTokens,\n useQuery: useWalletPortfolioPnlsByTokensQuery,\n} = createQueryHook<\n UseWalletPortfolioPnlsByTokensQueryParams,\n Array<PortfolioPnl>\n>({\n name: \"walletPortfolioPnlsByTokens\",\n queryKey: (p) => [p.chain, p.address, ...[...p.tokenAddresses].sort()],\n fetch: (client, { chain, address, tokenAddresses }) =>\n client.getWalletPortfolioPnlsByTokens(chain, address, tokenAddresses),\n});\n\nexport {\n walletPortfolioPnlsByTokensQueryKey,\n fetchWalletPortfolioPnlsByTokens,\n useWalletPortfolioPnlsByTokensQuery,\n};\n","import type {\n Chain,\n GetWalletPortfolioPnlsOptions,\n PortfolioPnl,\n PositionState,\n WalletPortfolioPnls,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletTokenPositionsQuery}. */\nexport interface UseWalletTokenPositionsQueryParams extends Omit<\n GetWalletPortfolioPnlsOptions,\n \"positionState\"\n> {\n chain: Chain;\n address: string;\n /** Position state filter. Defaults to `open`. Pass `all` or `closed` as needed. */\n positionState?: PositionState;\n}\n\n/**\n * A wallet's token positions (the \"Positions\" tab).\n *\n * The server already exposes per-token PnL through the `net-worth/tokens`\n * endpoint (`useWalletPortfolioPnlsQuery`). This hook is a thin bridge\n * that pins `positionState` to `open` by default so consumers don't need\n * to remember the parameter.\n *\n * Returns the same `WalletPortfolioPnls` shape (with `portfolios:\n * PortfolioPnl[]`) — the widget layer then selects the columns relevant\n * to the Positions view (`Bought / Sold / Remaining / PnL`).\n */\nconst {\n queryKey: walletTokenPositionsQueryKey,\n fetch: fetchWalletTokenPositions,\n useQuery: useWalletTokenPositionsQuery,\n} = createQueryHook<UseWalletTokenPositionsQueryParams, WalletPortfolioPnls>({\n name: \"walletTokenPositions\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.cursor),\n toKeySegment(p.limit),\n toKeySegment(p.direction),\n toKeySegment(p.resolution),\n toKeySegment(p.positionState ?? \"open\"),\n toKeySegment(p.sortBy),\n ],\n fetch: (client, { chain, address, positionState, ...rest }) =>\n client.getWalletPortfolioPnls(chain, address, {\n ...rest,\n positionState: positionState ?? \"open\",\n }),\n});\n\nexport {\n walletTokenPositionsQueryKey,\n fetchWalletTokenPositions,\n useWalletTokenPositionsQuery,\n};\n\n/** Alias for consumers that only want the rows (not the wallet-level summary). */\nexport type WalletTokenPosition = PortfolioPnl;\n","import { Chain, CursorList, GetTradesOptions, Trade } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletTradesQuery}. */\nexport interface UseWalletTradesQueryParams extends GetTradesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: walletTradesQueryKey,\n fetch: fetchWalletTrades,\n useQuery: useWalletTradesQuery,\n} = createQueryHook<UseWalletTradesQueryParams, CursorList<Trade>>({\n name: \"walletTrades\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.before),\n toKeySegment(p.after),\n toKeySegment(p.beforeBlockHeight),\n toKeySegment(p.afterBlockHeight),\n toKeySegment(p.type),\n toKeySegment(p.poolAddress),\n ],\n fetch: (client, { chain, address, ...options }) =>\n client.getWalletTrades(chain, address, options),\n});\n\nexport { walletTradesQueryKey, fetchWalletTrades, useWalletTradesQuery };\n","import {\n Activity,\n Chain,\n CursorList,\n GetActivitiesOptions,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenActivitiesQuery}. */\nexport interface UseTokenActivitiesQueryParams extends GetActivitiesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenActivitiesQueryKey,\n fetch: fetchTokenActivities,\n useQuery: useTokenActivitiesQuery,\n} = createQueryHook<UseTokenActivitiesQueryParams, CursorList<Activity>>({\n name: \"tokenActivities\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.before),\n toKeySegment(p.after),\n toKeySegment(p.beforeBlockHeight),\n toKeySegment(p.afterBlockHeight),\n toKeySegment(p.type),\n toKeySegment(p.poolAddress),\n toKeySegment(p.sortBy),\n ],\n fetch: (client, { chain, address, ...options }) =>\n client.getTokenActivities(chain, address, options),\n});\n\nexport {\n tokenActivitiesQueryKey,\n fetchTokenActivities,\n useTokenActivitiesQuery,\n};\n","import {\n Activity,\n Chain,\n CursorList,\n GetActivitiesOptions,\n} from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletActivitiesQuery}. */\nexport interface UseWalletActivitiesQueryParams extends GetActivitiesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: walletActivitiesQueryKey,\n fetch: fetchWalletActivities,\n useQuery: useWalletActivitiesQuery,\n} = createQueryHook<UseWalletActivitiesQueryParams, CursorList<Activity>>({\n name: \"walletActivities\",\n queryKey: (p) => [\n p.chain,\n p.address,\n toKeySegment(p.before),\n toKeySegment(p.after),\n toKeySegment(p.beforeBlockHeight),\n toKeySegment(p.afterBlockHeight),\n toKeySegment(p.type),\n toKeySegment(p.poolAddress),\n toKeySegment(p.sortBy),\n ],\n fetch: (client, { chain, address, ...options }) =>\n client.getWalletActivities(chain, address, options),\n});\n\nexport {\n walletActivitiesQueryKey,\n fetchWalletActivities,\n useWalletActivitiesQuery,\n};\n","import { useEffect, useRef } from \"react\";\nimport { ISubscription } from \"@liberfi.io/types\";\n\nexport interface SubscriptionOptions {\n /** Set to `false` to pause the subscription. Defaults to `true`. */\n enabled?: boolean;\n /** Called when the subscription encounters an error. */\n onError?: (error: Error) => void;\n}\n\n/**\n * Manages the lifecycle of a WebSocket subscription: stabilised callback ref,\n * `enabled` guard, subscribe/unsubscribe on dependency changes, and error\n * forwarding via `onError`.\n *\n * @param subscribe - Factory that creates the subscription. Receives a\n * stabilised callback and must return an `ISubscription`.\n * @param callback - Called with each pushed payload. May change between\n * renders without triggering a re-subscription.\n * @param deps - React dependency list that controls re-subscription.\n * @param options - `enabled` toggle and `onError` handler.\n */\nexport function useSubscriptionEffect<TData>(\n subscribe: (callback: (data: TData) => void) => ISubscription,\n callback: (data: TData) => void,\n deps: unknown[],\n options?: SubscriptionOptions,\n): void {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n const onErrorRef = useRef(options?.onError);\n onErrorRef.current = options?.onError;\n\n useEffect(() => {\n if (options?.enabled === false) return;\n let subscription: ISubscription | undefined;\n try {\n subscription = subscribe((data) => callbackRef.current(data));\n } catch (err) {\n onErrorRef.current?.(err instanceof Error ? err : new Error(String(err)));\n }\n return () => subscription?.unsubscribe();\n }, deps);\n}\n","import { Chain, TokenSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useTokenSubscription}. */\nexport interface UseTokenSubscriptionParams {\n chain: Chain;\n address: string;\n}\n\n/** Subscribes to real-time updates for a single token. */\nexport function useTokenSubscription(\n params: UseTokenSubscriptionParams,\n callback: (data: Array<TokenSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) => subscribeClient.subscribeToken(params.chain, params.address, cb),\n callback,\n [subscribeClient, params.chain, params.address, options?.enabled],\n options,\n );\n}\n","import { useMemo } from \"react\";\nimport { Chain, TokenSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useTokensSubscription}. */\nexport interface UseTokensSubscriptionParams {\n chain: Chain;\n addresses: Array<string>;\n}\n\n/** Subscribes to real-time updates for multiple token addresses. */\nexport function useTokensSubscription(\n params: UseTokensSubscriptionParams,\n callback: (data: Array<TokenSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n const addressesKey = useMemo(\n () =>\n Array.from(\n new Set(\n params.addresses.map((address) => address.trim()).filter(Boolean),\n ),\n )\n .sort()\n .join(\",\"),\n [params.addresses],\n );\n const addresses = useMemo(\n () => (addressesKey ? addressesKey.split(\",\") : []),\n [addressesKey],\n );\n\n useSubscriptionEffect(\n (cb) => subscribeClient.subscribeTokens(params.chain, addresses, cb),\n callback,\n [subscribeClient, params.chain, addressesKey, options?.enabled],\n options,\n );\n}\n","import { Chain, TokenCandle, TokenResolution } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useTokenCandlesSubscription}. */\nexport interface UseTokenCandlesSubscriptionParams {\n chain: Chain;\n address: string;\n resolution: TokenResolution;\n}\n\n/** Subscribes to real-time candle updates for a token. */\nexport function useTokenCandlesSubscription(\n params: UseTokenCandlesSubscriptionParams,\n callback: (candles: Array<TokenCandle>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) =>\n subscribeClient.subscribeTokenCandles(\n params.chain,\n params.address,\n params.resolution,\n cb,\n ),\n callback,\n [\n subscribeClient,\n params.chain,\n params.address,\n params.resolution,\n options?.enabled,\n ],\n options,\n );\n}\n","import { Chain, Trade } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useTokenTradesSubscription}. */\nexport interface UseTokenTradesSubscriptionParams {\n chain: Chain;\n address: string;\n}\n\n/** Subscribes to real-time trade events for a token. */\nexport function useTokenTradesSubscription(\n params: UseTokenTradesSubscriptionParams,\n callback: (trades: Array<Trade>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) =>\n subscribeClient.subscribeTokenTrades(params.chain, params.address, cb),\n callback,\n [subscribeClient, params.chain, params.address, options?.enabled],\n options,\n );\n}\n","import { Chain, WalletPnlSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useWalletPnlSubscription}. */\nexport interface UseWalletPnlSubscriptionParams {\n chain: Chain;\n address: string;\n}\n\n/** Subscribes to real-time wallet PnL updates. */\nexport function useWalletPnlSubscription(\n params: UseWalletPnlSubscriptionParams,\n callback: (pnls: Array<WalletPnlSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) =>\n subscribeClient.subscribeWalletPnl(params.chain, params.address, cb),\n callback,\n [subscribeClient, params.chain, params.address, options?.enabled],\n options,\n );\n}\n","import { Chain, PortfolioSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useWalletPortfoliosSubscription}. */\nexport interface UseWalletPortfoliosSubscriptionParams {\n chain: Chain;\n address: string;\n}\n\n/** Subscribes to real-time wallet portfolio updates. */\nexport function useWalletPortfoliosSubscription(\n params: UseWalletPortfoliosSubscriptionParams,\n callback: (portfolios: Array<PortfolioSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) =>\n subscribeClient.subscribeWalletPortfolios(\n params.chain,\n params.address,\n cb,\n ),\n callback,\n [subscribeClient, params.chain, params.address, options?.enabled],\n options,\n );\n}\n","import { Chain, PortfolioPnlSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useWalletPortfolioPnlsSubscription}. */\nexport interface UseWalletPortfolioPnlsSubscriptionParams {\n chain: Chain;\n address: string;\n}\n\n/** Subscribes to real-time wallet portfolio PnL updates. */\nexport function useWalletPortfolioPnlsSubscription(\n params: UseWalletPortfolioPnlsSubscriptionParams,\n callback: (portfolioPnls: Array<PortfolioPnlSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) =>\n subscribeClient.subscribeWalletPortfolioPnls(\n params.chain,\n params.address,\n cb,\n ),\n callback,\n [subscribeClient, params.chain, params.address, options?.enabled],\n options,\n );\n}\n","import { Chain, Trade } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useWalletTradesSubscription}. */\nexport interface UseWalletTradesSubscriptionParams {\n chain: Chain;\n address: string;\n}\n\n/** Subscribes to real-time wallet trade events. */\nexport function useWalletTradesSubscription(\n params: UseWalletTradesSubscriptionParams,\n callback: (trades: Array<Trade>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) =>\n subscribeClient.subscribeWalletTrades(params.chain, params.address, cb),\n callback,\n [subscribeClient, params.chain, params.address, options?.enabled],\n options,\n );\n}\n","import { Activity, Chain } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useTokenActivitiesSubscription}. */\nexport interface UseTokenActivitiesSubscriptionParams {\n chain: Chain;\n address: string;\n}\n\n/** Subscribes to real-time activity events for a token. */\nexport function useTokenActivitiesSubscription(\n params: UseTokenActivitiesSubscriptionParams,\n callback: (activities: Array<Activity>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) =>\n subscribeClient.subscribeTokenActivities(\n params.chain,\n params.address,\n cb,\n ),\n callback,\n [subscribeClient, params.chain, params.address, options?.enabled],\n options,\n );\n}\n","import { Activity, Chain } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useWalletActivitiesSubscription}. */\nexport interface UseWalletActivitiesSubscriptionParams {\n chain: Chain;\n address: string;\n}\n\n/** Subscribes to real-time wallet activity events. */\nexport function useWalletActivitiesSubscription(\n params: UseWalletActivitiesSubscriptionParams,\n callback: (activities: Array<Activity>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) =>\n subscribeClient.subscribeWalletActivities(\n params.chain,\n params.address,\n cb,\n ),\n callback,\n [subscribeClient, params.chain, params.address, options?.enabled],\n options,\n );\n}\n","import { Chain, PoolSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useNewPoolsSubscription}. */\nexport interface UseNewPoolsSubscriptionParams {\n chain: Chain;\n}\n\n/** Subscribes to real-time new pool listings. */\nexport function useNewPoolsSubscription(\n params: UseNewPoolsSubscriptionParams,\n callback: (pools: Array<PoolSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) => subscribeClient.subscribeNewPools(params.chain, cb),\n callback,\n [subscribeClient, params.chain, options?.enabled],\n options,\n );\n}\n","import { Chain, TokenSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useNewTokensSubscription}. */\nexport interface UseNewTokensSubscriptionParams {\n chain: Chain;\n}\n\n/** Subscribes to real-time new token listings. */\nexport function useNewTokensSubscription(\n params: UseNewTokensSubscriptionParams,\n callback: (tokens: Array<TokenSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) => subscribeClient.subscribeNewTokens(params.chain, cb),\n callback,\n [subscribeClient, params.chain, options?.enabled],\n options,\n );\n}\n","import { Chain, TokenSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useTrendingTokensSubscription}. */\nexport interface UseTrendingTokensSubscriptionParams {\n chain: Chain;\n}\n\n/** Subscribes to real-time trending token updates. */\nexport function useTrendingTokensSubscription(\n params: UseTrendingTokensSubscriptionParams,\n callback: (data: Array<TokenSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) => subscribeClient.subscribeTrendingTokens(params.chain, cb),\n callback,\n [subscribeClient, params.chain, options?.enabled],\n options,\n );\n}\n","import { Chain, TokenSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useMigratedTokensSubscription}. */\nexport interface UseMigratedTokensSubscriptionParams {\n chain: Chain;\n}\n\n/** Subscribes to real-time migrated token updates. */\nexport function useMigratedTokensSubscription(\n params: UseMigratedTokensSubscriptionParams,\n callback: (data: Array<TokenSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) => subscribeClient.subscribeMigratedTokens(params.chain, cb),\n callback,\n [subscribeClient, params.chain, options?.enabled],\n options,\n );\n}\n","import { Chain, TokenSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useFinalStretchTokensSubscription}. */\nexport interface UseFinalStretchTokensSubscriptionParams {\n chain: Chain;\n}\n\n/** Subscribes to real-time final-stretch token updates. */\nexport function useFinalStretchTokensSubscription(\n params: UseFinalStretchTokensSubscriptionParams,\n callback: (data: Array<TokenSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) => subscribeClient.subscribeFinalStretchTokens(params.chain, cb),\n callback,\n [subscribeClient, params.chain, options?.enabled],\n options,\n );\n}\n","import { Chain, TokenSubscribed } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\nimport {\n useSubscriptionEffect,\n type SubscriptionOptions,\n} from \"./useSubscriptionEffect\";\n\n/** Parameters for {@link useStockTokensSubscription}. */\nexport interface UseStockTokensSubscriptionParams {\n chain: Chain;\n}\n\n/** Subscribes to real-time stock token updates. */\nexport function useStockTokensSubscription(\n params: UseStockTokensSubscriptionParams,\n callback: (data: Array<TokenSubscribed>) => void,\n options?: SubscriptionOptions,\n) {\n const { subscribeClient } = useDexClient();\n\n useSubscriptionEffect(\n (cb) => subscribeClient.subscribeStockTokens(params.chain, cb),\n callback,\n [subscribeClient, params.chain, options?.enabled],\n options,\n );\n}\n","import { PropsWithChildren, useMemo } from \"react\";\nimport { IClient, ISubscribeClient } from \"@liberfi.io/types\";\nimport {\n DEFAULT_QUERY_KEY_PREFIX,\n DexClientContext,\n DexClientContextValue,\n} from \"./DexClientContext\";\n\nexport type DexClientProviderProps = PropsWithChildren<{\n client: IClient;\n subscribeClient: ISubscribeClient;\n /**\n * Prefix prepended to every TanStack Query key produced by hooks in this\n * package. Useful for avoiding collisions with other libraries.\n *\n * @default \"liberfi\"\n */\n queryKeyPrefix?: string;\n}>;\n\n/**\n * Provides the Dex client instances and configuration to all descendant hooks.\n *\n * Both `client` and `subscribeClient` should be referentially stable (e.g.\n * created with `useMemo` or stored in a `useRef`) to avoid unnecessary\n * re-renders of consumers.\n */\nexport function DexClientProvider({\n client,\n subscribeClient,\n queryKeyPrefix = DEFAULT_QUERY_KEY_PREFIX,\n children,\n}: DexClientProviderProps) {\n const value = useMemo<DexClientContextValue>(\n () => ({ client, subscribeClient, queryKeyPrefix }),\n [client, subscribeClient, queryKeyPrefix],\n );\n\n return (\n <DexClientContext.Provider value={value}>\n {children}\n </DexClientContext.Provider>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liberfi.io/react",
3
- "version": "0.3.33",
3
+ "version": "0.3.35",
4
4
  "description": "React integration layer for Liberfi SDK",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,7 +18,7 @@
18
18
  ],
19
19
  "license": "ISC",
20
20
  "dependencies": {
21
- "@liberfi.io/types": "0.4.19"
21
+ "@liberfi.io/types": "0.4.21"
22
22
  },
23
23
  "devDependencies": {
24
24
  "@jest/globals": "^30.0.2",
@@ -37,8 +37,8 @@
37
37
  "ts-jest": "^29.3.4",
38
38
  "tsup": "^8.5.0",
39
39
  "typescript": "^5.9.2",
40
- "@liberfi.io/client": "0.3.33",
41
- "tsconfig": "0.1.202"
40
+ "@liberfi.io/client": "0.3.35",
41
+ "tsconfig": "0.1.204"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "@tanstack/react-query": "^5.90.2",