@liberfi.io/react 0.1.10 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var react=require('react'),reactQuery=require('@tanstack/react-query'),jsxRuntime=require('react/jsx-runtime');typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/react"]="0.1.10");var y="liberfi",d=react.createContext(null);function a(){let e=react.useContext(d);if(e===null)throw new Error("useDexClient must be used within a DexClientProvider");return e}function i(e){return e==null?"":e instanceof Date?e.toISOString():String(e)}function c(e){return !e||e.length===0?"[]":JSON.stringify([...e].sort())}function s(e){function r(n,l=y){return [l,e.name,...e.queryKey(n)]}function t(n,l){return e.fetch(n,l)}function o(n,l={}){let{client:m,queryKeyPrefix:f}=a();return reactQuery.useQuery({queryKey:r(n,f),queryFn:()=>e.fetch(m,n),...e.defaultOptions,...l})}return {queryKey:r,fetch:t,useQuery:o}}var {queryKey:L,fetch:N,useQuery:G}=s({name:"finalStretchTokens",queryKey:e=>[e.chain,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,...t})=>e.getFinalStretchTokens(r,t)});var {queryKey:J,fetch:j,useQuery:z}=s({name:"migratedTokens",queryKey:e=>[e.chain,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,...t})=>e.getMigratedTokens(r,t)});var {queryKey:re,fetch:te,useQuery:oe}=s({name:"newTokens",queryKey:e=>[e.chain,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,...t})=>e.getNewTokens(r,t)});function b(e=y){return [e,"presignedUploadUrl"]}async function S(e){return await e.getPresignedUploadUrl()}function ce(e={}){let{client:r,queryKeyPrefix:t}=a();return reactQuery.useQuery({queryKey:b(t),queryFn:async()=>S(r),staleTime:0,...e})}var {queryKey:me,fetch:de,useQuery:pe}=s({name:"searchTokens",queryKey:e=>[i(e.cursor),i(e.limit),i(e.direction),c(e.chains),i(e.keyword),c(e.filters),i(e.sortBy),i(e.sortDirection)],fetch:(e,r)=>e.searchTokens(r)});async function C(e,r){return await e.sendTx(r)}function xe(e={}){let{client:r}=a();return reactQuery.useMutation({mutationFn:async t=>C(r,t),...e})}var {queryKey:Ce,fetch:ge,useQuery:Ae}=s({name:"stockTokens",queryKey:e=>[e.chain,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,...t})=>e.getStockTokens(r,t)});var {queryKey:De,fetch:qe,useQuery:We}=s({name:"swapRoute",queryKey:e=>[e.chain,e.userAddress,e.input,e.output,e.mode,e.amount,i(e.slippage),i(e.priorityFee),i(e.tipFee),i(e.isAntiMev)],fetch:(e,r)=>e.swapRoute(r)});var {queryKey:ve,fetch:He,useQuery:Re}=s({name:"tokenCandles",queryKey:e=>[e.chain,e.address,e.resolution,i(e.after),i(e.before),i(e.limit)],fetch:(e,{chain:r,address:t,resolution:o,...n})=>e.getTokenCandles(r,t,o,n)});var {queryKey:Me,fetch:Le,useQuery:Ne}=s({name:"tokenHolders",queryKey:e=>[e.chain,e.address,i(e.cursor),i(e.limit),i(e.direction)],fetch:(e,{chain:r,address:t,...o})=>e.getTokenHolders(r,t,o)});var {queryKey:Ye,fetch:Xe,useQuery:Je}=s({name:"tokenMarketData",queryKey:e=>[e.chain,e.address],fetch:(e,r)=>e.getTokenMarketData(r.chain,r.address)});var {queryKey:Ze,fetch:$e,useQuery:er}=s({name:"token",queryKey:e=>[e.chain,e.address],fetch:(e,r)=>e.getToken(r.chain,r.address)});var {queryKey:or,fetch:ir,useQuery:nr}=s({name:"tokenSecurity",queryKey:e=>[e.chain,e.address],fetch:(e,r)=>e.getTokenSecurity(r.chain,r.address)});var {queryKey:ur,fetch:cr,useQuery:fr}=s({name:"tokens",queryKey:e=>[e.chain,[...e.addresses].sort().join(",")],fetch:(e,r)=>e.getTokens(r.chain,r.addresses)});var {queryKey:mr,fetch:dr,useQuery:pr}=s({name:"tokenStats",queryKey:e=>[e.chain,e.address],fetch:(e,r)=>e.getTokenStats(r.chain,r.address)});var {queryKey:kr,fetch:xr,useQuery:br}=s({name:"tokenTrades",queryKey:e=>[e.chain,e.address,i(e.before),i(e.after),i(e.beforeBlockHeight),i(e.afterBlockHeight),i(e.type),i(e.poolAddress)],fetch:(e,{chain:r,address:t,...o})=>e.getTokenTrades(r,t,o)});var {queryKey:gr,fetch:Ar,useQuery:Kr}=s({name:"trendingTokens",queryKey:e=>[e.chain,e.resolution,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,resolution:t,...o})=>e.getTrendingTokens(r,t,o)});var {queryKey:qr,fetch:Wr,useQuery:Or}=s({name:"txSuccess",queryKey:e=>[e.chain,e.txHash,i(e.timeout)],fetch:(e,{chain:r,txHash:t,timeout:o})=>e.checkTxSuccess(r,t,o)});var {queryKey:Hr,fetch:Rr,useQuery:Fr}=s({name:"walletPnl",queryKey:e=>[e.chain,e.address,i(e.resolution??"all")],fetch:(e,{chain:r,address:t,resolution:o})=>e.getWalletPnl(r,t,o)});var {queryKey:Lr,fetch:Nr,useQuery:Gr}=s({name:"walletPortfolioPnls",queryKey:e=>[e.chain,e.address,i(e.cursor),i(e.limit)],fetch:(e,{chain:r,address:t,cursor:o,limit:n})=>e.getWalletPortfolioPnls(r,t,{cursor:o,limit:n})});function p(e){function r(o,n=y){return [n,e.name,"infinite",...e.queryKey(o)]}function t(o,n={}){let{client:l,queryKeyPrefix:m}=a();return reactQuery.useInfiniteQuery({queryKey:r(o,m),queryFn:({pageParam:f})=>e.fetch(l,o,f),initialPageParam:void 0,getNextPageParam:f=>f.hasNext?f.endCursor:void 0,...n})}return {queryKey:r,useInfiniteQuery:t}}var {queryKey:$r,useInfiniteQuery:et}=p({name:"walletPortfolioPnls",queryKey:e=>[e.chain,e.address,i(e.limit)],fetch:(e,r,t)=>e.getWalletPortfolioPnls(r.chain,r.address,{cursor:t,limit:r.limit??100})});var {queryKey:it,fetch:nt,useQuery:st}=s({name:"walletPortfolios",queryKey:e=>[e.chain,e.address,i(e.cursor),i(e.limit)],fetch:(e,{chain:r,address:t,cursor:o,limit:n})=>e.getWalletPortfolios(r,t,{cursor:o,limit:n})});var {queryKey:ct,fetch:ft,useQuery:lt}=s({name:"walletPortfoliosByTokens",queryKey:e=>[e.chain,e.address,...[...e.tokenAddresses].sort()],fetch:(e,{chain:r,address:t,tokenAddresses:o})=>e.getWalletPortfoliosByTokens(r,t,o)});var {queryKey:pt,useInfiniteQuery:Pt}=p({name:"walletPortfolios",queryKey:e=>[e.chain,e.address,i(e.limit)],fetch:(e,r,t)=>e.getWalletPortfolios(r.chain,r.address,{cursor:t,limit:r.limit??100})});var {queryKey:kt,fetch:xt,useQuery:bt}=s({name:"walletPortfolioPnlsByTokens",queryKey:e=>[e.chain,e.address,...[...e.tokenAddresses].sort()],fetch:(e,{chain:r,address:t,tokenAddresses:o})=>e.getWalletPortfolioPnlsByTokens(r,t,o)});var {queryKey:gt,fetch:At,useQuery:Kt}=s({name:"walletTrades",queryKey:e=>[e.chain,e.address,i(e.before),i(e.after),i(e.beforeBlockHeight),i(e.afterBlockHeight),i(e.type),i(e.poolAddress)],fetch:(e,{chain:r,address:t,...o})=>e.getWalletTrades(r,t,o)});var {queryKey:qt,fetch:Wt,useQuery:Ot}=s({name:"tokenActivities",queryKey:e=>[e.chain,e.address,i(e.before),i(e.after),i(e.beforeBlockHeight),i(e.afterBlockHeight),i(e.type),i(e.poolAddress)],fetch:(e,{chain:r,address:t,...o})=>e.getTokenActivities(r,t,o)});var {queryKey:Ht,fetch:Rt,useQuery:Ft}=s({name:"walletActivities",queryKey:e=>[e.chain,e.address,i(e.before),i(e.after),i(e.beforeBlockHeight),i(e.afterBlockHeight),i(e.type),i(e.poolAddress)],fetch:(e,{chain:r,address:t,...o})=>e.getWalletActivities(r,t,o)});function u(e,r,t,o){let n=react.useRef(r);n.current=r;let l=react.useRef(o?.onError);l.current=o?.onError,react.useEffect(()=>{if(o?.enabled===false)return;let m;try{m=e(f=>n.current(f));}catch(f){l.current?.(f instanceof Error?f:new Error(String(f)));}return ()=>m?.unsubscribe()},t);}function Gt(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeToken(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function Jt(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeTokenCandles(e.chain,e.address,e.resolution,n),r,[o,e.chain,e.address,e.resolution,t?.enabled],t);}function $t(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeTokenTrades(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function oo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletPnl(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function ao(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletPortfolios(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function lo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletPortfolioPnls(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function Po(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletTrades(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function xo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeTokenActivities(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function Co(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletActivities(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function Io(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeNewTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function Wo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeTrendingTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function vo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeMigratedTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function _o(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeFinalStretchTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function No(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeStockTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function Bi({client:e,subscribeClient:r,queryKeyPrefix:t=y,children:o}){let n=react.useMemo(()=>({client:e,subscribeClient:r,queryKeyPrefix:t}),[e,r,t]);return jsxRuntime.jsx(d.Provider,{value:n,children:o})}exports.DEFAULT_QUERY_KEY_PREFIX=y;exports.DexClientContext=d;exports.DexClientProvider=Bi;exports.fetchFinalStretchTokens=N;exports.fetchMigratedTokens=j;exports.fetchNewTokens=te;exports.fetchPresignedUploadUrl=S;exports.fetchSearchTokens=de;exports.fetchStockTokens=ge;exports.fetchSwapRoute=qe;exports.fetchToken=$e;exports.fetchTokenActivities=Wt;exports.fetchTokenCandles=He;exports.fetchTokenHolders=Le;exports.fetchTokenMarketData=Xe;exports.fetchTokenSecurity=ir;exports.fetchTokenStats=dr;exports.fetchTokenTrades=xr;exports.fetchTokens=cr;exports.fetchTrendingTokens=Ar;exports.fetchTxSuccess=Wr;exports.fetchWalletActivities=Rt;exports.fetchWalletPnl=Rr;exports.fetchWalletPortfolioPnls=Nr;exports.fetchWalletPortfolioPnlsByTokens=xt;exports.fetchWalletPortfolios=nt;exports.fetchWalletPortfoliosByTokens=ft;exports.fetchWalletTrades=At;exports.finalStretchTokensQueryKey=L;exports.migratedTokensQueryKey=J;exports.newTokensQueryKey=re;exports.presignedUploadUrlQueryKey=b;exports.searchTokensQueryKey=me;exports.sendTx=C;exports.stockTokensQueryKey=Ce;exports.swapRouteQueryKey=De;exports.toKeySegment=i;exports.toSortedKeySegment=c;exports.tokenActivitiesQueryKey=qt;exports.tokenCandlesQueryKey=ve;exports.tokenHoldersQueryKey=Me;exports.tokenMarketDataQueryKey=Ye;exports.tokenQueryKey=Ze;exports.tokenSecurityQueryKey=or;exports.tokenStatsQueryKey=mr;exports.tokenTradesQueryKey=kr;exports.tokensQueryKey=ur;exports.trendingTokensQueryKey=gr;exports.txSuccessQueryKey=qr;exports.useDexClient=a;exports.useFinalStretchTokensQuery=G;exports.useFinalStretchTokensSubscription=_o;exports.useMigratedTokensQuery=z;exports.useMigratedTokensSubscription=vo;exports.useNewTokensQuery=oe;exports.useNewTokensSubscription=Io;exports.usePresignedUploadUrlQuery=ce;exports.useSearchTokensQuery=pe;exports.useSendTxMutation=xe;exports.useStockTokensQuery=Ae;exports.useStockTokensSubscription=No;exports.useSwapRouteQuery=We;exports.useTokenActivitiesQuery=Ot;exports.useTokenActivitiesSubscription=xo;exports.useTokenCandlesQuery=Re;exports.useTokenCandlesSubscription=Jt;exports.useTokenHoldersQuery=Ne;exports.useTokenMarketDataQuery=Je;exports.useTokenQuery=er;exports.useTokenSecurityQuery=nr;exports.useTokenStatsQuery=pr;exports.useTokenSubscription=Gt;exports.useTokenTradesQuery=br;exports.useTokenTradesSubscription=$t;exports.useTokensQuery=fr;exports.useTrendingTokensQuery=Kr;exports.useTrendingTokensSubscription=Wo;exports.useTxSuccessQuery=Or;exports.useWalletActivitiesQuery=Ft;exports.useWalletActivitiesSubscription=Co;exports.useWalletPnlQuery=Fr;exports.useWalletPnlSubscription=oo;exports.useWalletPortfolioPnlsByTokensQuery=bt;exports.useWalletPortfolioPnlsInfiniteQuery=et;exports.useWalletPortfolioPnlsQuery=Gr;exports.useWalletPortfolioPnlsSubscription=lo;exports.useWalletPortfoliosByTokensQuery=lt;exports.useWalletPortfoliosInfiniteQuery=Pt;exports.useWalletPortfoliosQuery=st;exports.useWalletPortfoliosSubscription=ao;exports.useWalletTradesQuery=Kt;exports.useWalletTradesSubscription=Po;exports.walletActivitiesQueryKey=Ht;exports.walletPnlQueryKey=Hr;exports.walletPortfolioPnlsByTokensQueryKey=kt;exports.walletPortfolioPnlsInfiniteQueryKey=$r;exports.walletPortfolioPnlsQueryKey=Lr;exports.walletPortfoliosByTokensQueryKey=ct;exports.walletPortfoliosInfiniteQueryKey=pt;exports.walletPortfoliosQueryKey=it;exports.walletTradesQueryKey=gt;//# sourceMappingURL=index.js.map
1
+ 'use strict';var react=require('react'),reactQuery=require('@tanstack/react-query'),jsxRuntime=require('react/jsx-runtime');typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/react"]="0.1.11");var y="liberfi",d=react.createContext(null);function a(){let e=react.useContext(d);if(e===null)throw new Error("useDexClient must be used within a DexClientProvider");return e}function i(e){return e==null?"":e instanceof Date?e.toISOString():String(e)}function c(e){return !e||e.length===0?"[]":JSON.stringify([...e].sort())}function s(e){function r(n,l=y){return [l,e.name,...e.queryKey(n)]}function t(n,l){return e.fetch(n,l)}function o(n,l={}){let{client:m,queryKeyPrefix:f}=a();return reactQuery.useQuery({queryKey:r(n,f),queryFn:()=>e.fetch(m,n),...e.defaultOptions,...l})}return {queryKey:r,fetch:t,useQuery:o}}var {queryKey:L,fetch:N,useQuery:G}=s({name:"finalStretchTokens",queryKey:e=>[e.chain,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,...t})=>e.getFinalStretchTokens(r,t)});var {queryKey:J,fetch:j,useQuery:z}=s({name:"migratedTokens",queryKey:e=>[e.chain,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,...t})=>e.getMigratedTokens(r,t)});var {queryKey:re,fetch:te,useQuery:oe}=s({name:"newTokens",queryKey:e=>[e.chain,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,...t})=>e.getNewTokens(r,t)});function b(e=y){return [e,"presignedUploadUrl"]}async function S(e){return await e.getPresignedUploadUrl()}function ce(e={}){let{client:r,queryKeyPrefix:t}=a();return reactQuery.useQuery({queryKey:b(t),queryFn:async()=>S(r),staleTime:0,...e})}var {queryKey:me,fetch:de,useQuery:pe}=s({name:"searchTokens",queryKey:e=>[i(e.cursor),i(e.limit),i(e.direction),c(e.chains),i(e.keyword),c(e.filters),i(e.sortBy),i(e.sortDirection)],fetch:(e,r)=>e.searchTokens(r)});async function C(e,r){return await e.sendTx(r)}function xe(e={}){let{client:r}=a();return reactQuery.useMutation({mutationFn:async t=>C(r,t),...e})}var {queryKey:Ce,fetch:ge,useQuery:Ae}=s({name:"stockTokens",queryKey:e=>[e.chain,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,...t})=>e.getStockTokens(r,t)});var {queryKey:De,fetch:qe,useQuery:We}=s({name:"swapRoute",queryKey:e=>[e.chain,e.userAddress,e.input,e.output,e.mode,e.amount,i(e.slippage),i(e.priorityFee),i(e.tipFee),i(e.isAntiMev)],fetch:(e,r)=>e.swapRoute(r)});var {queryKey:ve,fetch:He,useQuery:Re}=s({name:"tokenCandles",queryKey:e=>[e.chain,e.address,e.resolution,i(e.after),i(e.before),i(e.limit)],fetch:(e,{chain:r,address:t,resolution:o,...n})=>e.getTokenCandles(r,t,o,n)});var {queryKey:Me,fetch:Le,useQuery:Ne}=s({name:"tokenHolders",queryKey:e=>[e.chain,e.address,i(e.cursor),i(e.limit),i(e.direction)],fetch:(e,{chain:r,address:t,...o})=>e.getTokenHolders(r,t,o)});var {queryKey:Ye,fetch:Xe,useQuery:Je}=s({name:"tokenMarketData",queryKey:e=>[e.chain,e.address],fetch:(e,r)=>e.getTokenMarketData(r.chain,r.address)});var {queryKey:Ze,fetch:$e,useQuery:er}=s({name:"token",queryKey:e=>[e.chain,e.address],fetch:(e,r)=>e.getToken(r.chain,r.address)});var {queryKey:or,fetch:ir,useQuery:nr}=s({name:"tokenSecurity",queryKey:e=>[e.chain,e.address],fetch:(e,r)=>e.getTokenSecurity(r.chain,r.address)});var {queryKey:ur,fetch:cr,useQuery:fr}=s({name:"tokens",queryKey:e=>[e.chain,[...e.addresses].sort().join(",")],fetch:(e,r)=>e.getTokens(r.chain,r.addresses)});var {queryKey:mr,fetch:dr,useQuery:pr}=s({name:"tokenStats",queryKey:e=>[e.chain,e.address],fetch:(e,r)=>e.getTokenStats(r.chain,r.address)});var {queryKey:kr,fetch:xr,useQuery:br}=s({name:"tokenTrades",queryKey:e=>[e.chain,e.address,i(e.before),i(e.after),i(e.beforeBlockHeight),i(e.afterBlockHeight),i(e.type),i(e.poolAddress)],fetch:(e,{chain:r,address:t,...o})=>e.getTokenTrades(r,t,o)});var {queryKey:gr,fetch:Ar,useQuery:Kr}=s({name:"trendingTokens",queryKey:e=>[e.chain,e.resolution,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,resolution:t,...o})=>e.getTrendingTokens(r,t,o)});var {queryKey:qr,fetch:Wr,useQuery:Or}=s({name:"txSuccess",queryKey:e=>[e.chain,e.txHash,i(e.timeout)],fetch:(e,{chain:r,txHash:t,timeout:o})=>e.checkTxSuccess(r,t,o)});var {queryKey:Hr,fetch:Rr,useQuery:Fr}=s({name:"walletPnl",queryKey:e=>[e.chain,e.address,i(e.resolution??"all")],fetch:(e,{chain:r,address:t,resolution:o})=>e.getWalletPnl(r,t,o)});var {queryKey:Lr,fetch:Nr,useQuery:Gr}=s({name:"walletPortfolioPnls",queryKey:e=>[e.chain,e.address,i(e.cursor),i(e.limit)],fetch:(e,{chain:r,address:t,cursor:o,limit:n})=>e.getWalletPortfolioPnls(r,t,{cursor:o,limit:n})});function p(e){function r(o,n=y){return [n,e.name,"infinite",...e.queryKey(o)]}function t(o,n={}){let{client:l,queryKeyPrefix:m}=a();return reactQuery.useInfiniteQuery({queryKey:r(o,m),queryFn:({pageParam:f})=>e.fetch(l,o,f),initialPageParam:void 0,getNextPageParam:f=>f.hasNext?f.endCursor:void 0,...n})}return {queryKey:r,useInfiniteQuery:t}}var {queryKey:$r,useInfiniteQuery:et}=p({name:"walletPortfolioPnls",queryKey:e=>[e.chain,e.address,i(e.limit)],fetch:(e,r,t)=>e.getWalletPortfolioPnls(r.chain,r.address,{cursor:t,limit:r.limit??100})});var {queryKey:it,fetch:nt,useQuery:st}=s({name:"walletPortfolios",queryKey:e=>[e.chain,e.address,i(e.cursor),i(e.limit)],fetch:(e,{chain:r,address:t,cursor:o,limit:n})=>e.getWalletPortfolios(r,t,{cursor:o,limit:n})});var {queryKey:ct,fetch:ft,useQuery:lt}=s({name:"walletPortfoliosByTokens",queryKey:e=>[e.chain,e.address,...[...e.tokenAddresses].sort()],fetch:(e,{chain:r,address:t,tokenAddresses:o})=>e.getWalletPortfoliosByTokens(r,t,o)});var {queryKey:pt,useInfiniteQuery:Pt}=p({name:"walletPortfolios",queryKey:e=>[e.chain,e.address,i(e.limit)],fetch:(e,r,t)=>e.getWalletPortfolios(r.chain,r.address,{cursor:t,limit:r.limit??100})});var {queryKey:kt,fetch:xt,useQuery:bt}=s({name:"walletPortfolioPnlsByTokens",queryKey:e=>[e.chain,e.address,...[...e.tokenAddresses].sort()],fetch:(e,{chain:r,address:t,tokenAddresses:o})=>e.getWalletPortfolioPnlsByTokens(r,t,o)});var {queryKey:gt,fetch:At,useQuery:Kt}=s({name:"walletTrades",queryKey:e=>[e.chain,e.address,i(e.before),i(e.after),i(e.beforeBlockHeight),i(e.afterBlockHeight),i(e.type),i(e.poolAddress)],fetch:(e,{chain:r,address:t,...o})=>e.getWalletTrades(r,t,o)});var {queryKey:qt,fetch:Wt,useQuery:Ot}=s({name:"tokenActivities",queryKey:e=>[e.chain,e.address,i(e.before),i(e.after),i(e.beforeBlockHeight),i(e.afterBlockHeight),i(e.type),i(e.poolAddress)],fetch:(e,{chain:r,address:t,...o})=>e.getTokenActivities(r,t,o)});var {queryKey:Ht,fetch:Rt,useQuery:Ft}=s({name:"walletActivities",queryKey:e=>[e.chain,e.address,i(e.before),i(e.after),i(e.beforeBlockHeight),i(e.afterBlockHeight),i(e.type),i(e.poolAddress)],fetch:(e,{chain:r,address:t,...o})=>e.getWalletActivities(r,t,o)});function u(e,r,t,o){let n=react.useRef(r);n.current=r;let l=react.useRef(o?.onError);l.current=o?.onError,react.useEffect(()=>{if(o?.enabled===false)return;let m;try{m=e(f=>n.current(f));}catch(f){l.current?.(f instanceof Error?f:new Error(String(f)));}return ()=>m?.unsubscribe()},t);}function Gt(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeToken(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function Jt(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeTokenCandles(e.chain,e.address,e.resolution,n),r,[o,e.chain,e.address,e.resolution,t?.enabled],t);}function $t(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeTokenTrades(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function oo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletPnl(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function ao(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletPortfolios(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function lo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletPortfolioPnls(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function Po(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletTrades(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function xo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeTokenActivities(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function Co(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletActivities(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function Io(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeNewTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function Wo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeTrendingTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function vo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeMigratedTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function _o(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeFinalStretchTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function No(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeStockTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function Bi({client:e,subscribeClient:r,queryKeyPrefix:t=y,children:o}){let n=react.useMemo(()=>({client:e,subscribeClient:r,queryKeyPrefix:t}),[e,r,t]);return jsxRuntime.jsx(d.Provider,{value:n,children:o})}exports.DEFAULT_QUERY_KEY_PREFIX=y;exports.DexClientContext=d;exports.DexClientProvider=Bi;exports.fetchFinalStretchTokens=N;exports.fetchMigratedTokens=j;exports.fetchNewTokens=te;exports.fetchPresignedUploadUrl=S;exports.fetchSearchTokens=de;exports.fetchStockTokens=ge;exports.fetchSwapRoute=qe;exports.fetchToken=$e;exports.fetchTokenActivities=Wt;exports.fetchTokenCandles=He;exports.fetchTokenHolders=Le;exports.fetchTokenMarketData=Xe;exports.fetchTokenSecurity=ir;exports.fetchTokenStats=dr;exports.fetchTokenTrades=xr;exports.fetchTokens=cr;exports.fetchTrendingTokens=Ar;exports.fetchTxSuccess=Wr;exports.fetchWalletActivities=Rt;exports.fetchWalletPnl=Rr;exports.fetchWalletPortfolioPnls=Nr;exports.fetchWalletPortfolioPnlsByTokens=xt;exports.fetchWalletPortfolios=nt;exports.fetchWalletPortfoliosByTokens=ft;exports.fetchWalletTrades=At;exports.finalStretchTokensQueryKey=L;exports.migratedTokensQueryKey=J;exports.newTokensQueryKey=re;exports.presignedUploadUrlQueryKey=b;exports.searchTokensQueryKey=me;exports.sendTx=C;exports.stockTokensQueryKey=Ce;exports.swapRouteQueryKey=De;exports.toKeySegment=i;exports.toSortedKeySegment=c;exports.tokenActivitiesQueryKey=qt;exports.tokenCandlesQueryKey=ve;exports.tokenHoldersQueryKey=Me;exports.tokenMarketDataQueryKey=Ye;exports.tokenQueryKey=Ze;exports.tokenSecurityQueryKey=or;exports.tokenStatsQueryKey=mr;exports.tokenTradesQueryKey=kr;exports.tokensQueryKey=ur;exports.trendingTokensQueryKey=gr;exports.txSuccessQueryKey=qr;exports.useDexClient=a;exports.useFinalStretchTokensQuery=G;exports.useFinalStretchTokensSubscription=_o;exports.useMigratedTokensQuery=z;exports.useMigratedTokensSubscription=vo;exports.useNewTokensQuery=oe;exports.useNewTokensSubscription=Io;exports.usePresignedUploadUrlQuery=ce;exports.useSearchTokensQuery=pe;exports.useSendTxMutation=xe;exports.useStockTokensQuery=Ae;exports.useStockTokensSubscription=No;exports.useSwapRouteQuery=We;exports.useTokenActivitiesQuery=Ot;exports.useTokenActivitiesSubscription=xo;exports.useTokenCandlesQuery=Re;exports.useTokenCandlesSubscription=Jt;exports.useTokenHoldersQuery=Ne;exports.useTokenMarketDataQuery=Je;exports.useTokenQuery=er;exports.useTokenSecurityQuery=nr;exports.useTokenStatsQuery=pr;exports.useTokenSubscription=Gt;exports.useTokenTradesQuery=br;exports.useTokenTradesSubscription=$t;exports.useTokensQuery=fr;exports.useTrendingTokensQuery=Kr;exports.useTrendingTokensSubscription=Wo;exports.useTxSuccessQuery=Or;exports.useWalletActivitiesQuery=Ft;exports.useWalletActivitiesSubscription=Co;exports.useWalletPnlQuery=Fr;exports.useWalletPnlSubscription=oo;exports.useWalletPortfolioPnlsByTokensQuery=bt;exports.useWalletPortfolioPnlsInfiniteQuery=et;exports.useWalletPortfolioPnlsQuery=Gr;exports.useWalletPortfolioPnlsSubscription=lo;exports.useWalletPortfoliosByTokensQuery=lt;exports.useWalletPortfoliosInfiniteQuery=Pt;exports.useWalletPortfoliosQuery=st;exports.useWalletPortfoliosSubscription=ao;exports.useWalletTradesQuery=Kt;exports.useWalletTradesSubscription=Po;exports.walletActivitiesQueryKey=Ht;exports.walletPnlQueryKey=Hr;exports.walletPortfolioPnlsByTokensQueryKey=kt;exports.walletPortfolioPnlsInfiniteQueryKey=$r;exports.walletPortfolioPnlsQueryKey=Lr;exports.walletPortfoliosByTokensQueryKey=ct;exports.walletPortfoliosInfiniteQueryKey=pt;exports.walletPortfoliosQueryKey=it;exports.walletTradesQueryKey=gt;//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts","../src/DexClientContext.ts","../src/hooks/useDexClient.ts","../src/hooks/queryKeyUtils.ts","../src/hooks/createQueryHook.ts","../src/hooks/useFinalStretchTokensQuery.ts","../src/hooks/useMigratedTokensQuery.ts","../src/hooks/useNewTokensQuery.ts","../src/hooks/usePresignedUploadUrlQuery.ts","../src/hooks/useSearchTokensQuery.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/useTokenStatsQuery.ts","../src/hooks/useTokenTradesQuery.ts","../src/hooks/useTrendingTokensQuery.ts","../src/hooks/useTxSuccessQuery.ts","../src/hooks/useWalletPnlQuery.ts","../src/hooks/useWalletPortfolioPnlsQuery.ts","../src/hooks/createInfiniteQueryHook.ts","../src/hooks/useWalletPortfolioPnlsInfiniteQuery.ts","../src/hooks/useWalletPortfoliosQuery.ts","../src/hooks/useWalletPortfoliosByTokensQuery.ts","../src/hooks/useWalletPortfoliosInfiniteQuery.ts","../src/hooks/useWalletPortfolioPnlsByTokensQuery.ts","../src/hooks/useWalletTradesQuery.ts","../src/hooks/useTokenActivitiesQuery.ts","../src/hooks/useWalletActivitiesQuery.ts","../src/hooks/useSubscriptionEffect.ts","../src/hooks/useTokenSubscription.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/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","toKeySegment","value","toSortedKeySegment","createQueryHook","config","buildQueryKey","params","prefix","fetchFn","client","useCreatedQuery","options","queryKeyPrefix","useQuery","finalStretchTokensQueryKey","fetchFinalStretchTokens","useFinalStretchTokensQuery","p","chain","migratedTokensQueryKey","fetchMigratedTokens","useMigratedTokensQuery","newTokensQueryKey","fetchNewTokens","useNewTokensQuery","presignedUploadUrlQueryKey","fetchPresignedUploadUrl","usePresignedUploadUrlQuery","searchTokensQueryKey","fetchSearchTokens","useSearchTokensQuery","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","tokenStatsQueryKey","fetchTokenStats","useTokenStatsQuery","tokenTradesQueryKey","fetchTokenTrades","useTokenTradesQuery","trendingTokensQueryKey","fetchTrendingTokens","useTrendingTokensQuery","txSuccessQueryKey","fetchTxSuccess","useTxSuccessQuery","txHash","timeout","walletPnlQueryKey","fetchWalletPnl","useWalletPnlQuery","walletPortfolioPnlsQueryKey","fetchWalletPortfolioPnls","useWalletPortfolioPnlsQuery","cursor","limit","createInfiniteQueryHook","useCreatedInfiniteQuery","useInfiniteQuery","pageParam","lastPage","walletPortfolioPnlsInfiniteQueryKey","useWalletPortfolioPnlsInfiniteQuery","walletPortfoliosQueryKey","fetchWalletPortfolios","useWalletPortfoliosQuery","walletPortfoliosByTokensQueryKey","fetchWalletPortfoliosByTokens","useWalletPortfoliosByTokensQuery","tokenAddresses","walletPortfoliosInfiniteQueryKey","useWalletPortfoliosInfiniteQuery","walletPortfolioPnlsByTokensQueryKey","fetchWalletPortfolioPnlsByTokens","useWalletPortfolioPnlsByTokensQuery","walletTradesQueryKey","fetchWalletTrades","useWalletTradesQuery","tokenActivitiesQueryKey","fetchTokenActivities","useTokenActivitiesQuery","walletActivitiesQueryKey","fetchWalletActivities","useWalletActivitiesQuery","useSubscriptionEffect","subscribe","callback","deps","callbackRef","useRef","onErrorRef","useEffect","subscription","data","err","useTokenSubscription","subscribeClient","cb","useTokenCandlesSubscription","useTokenTradesSubscription","useWalletPnlSubscription","useWalletPortfoliosSubscription","useWalletPortfolioPnlsSubscription","useWalletTradesSubscription","useTokenActivitiesSubscription","useWalletActivitiesSubscription","useNewTokensSubscription","useTrendingTokensSubscription","useMigratedTokensSubscription","useFinalStretchTokensSubscription","useStockTokensSubscription","DexClientProvider","children","useMemo","jsx"],"mappings":"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","file":"index.js","sourcesContent":["declare global {\n interface Window {\n __LIBERFI_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__LIBERFI_VERSION__ = window.__LIBERFI_VERSION__ || {};\n window.__LIBERFI_VERSION__[\"@liberfi.io/react\"] = \"0.1.10\";\n}\n\nexport default \"0.1.10\";\n","import { createContext } from \"react\";\nimport { API } 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 `API.IClient`. */\n client: API.IClient;\n /** WebSocket subscription client implementing `API.ISubscribeClient`. */\n subscribeClient: API.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","/**\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 {\n useQuery,\n type UseQueryOptions,\n type UseQueryResult,\n} from \"@tanstack/react-query\";\nimport { API } 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: API.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: API.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: API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useFinalStretchTokensQuery}. */\nexport interface UseFinalStretchTokensQueryParams\n extends API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useMigratedTokensQuery}. */\nexport interface UseMigratedTokensQueryParams extends API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useNewTokensQuery}. */\nexport interface UseNewTokensQueryParams extends API.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 { API } 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: API.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 { API } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\nexport type UseSearchTokensQueryParams = API.SearchTokensOptions;\n\nconst {\n queryKey: searchTokensQueryKey,\n fetch: fetchSearchTokens,\n useQuery: useSearchTokensQuery,\n} = createQueryHook<UseSearchTokensQueryParams, API.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 { useMutation, UseMutationOptions } from \"@tanstack/react-query\";\nimport { API } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\n\nexport type UseSendTxMutationParams = API.SendTxParams;\n\n/** Sends a transaction via the API client (for use outside React). */\nexport async function sendTx(\n client: API.IClient,\n params: UseSendTxMutationParams,\n) {\n return await client.sendTx(params);\n}\n\n/** Mutation hook that sends a transaction. */\nexport function useSendTxMutation(\n options: Omit<\n UseMutationOptions<API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useStockTokensQuery}. */\nexport interface UseStockTokensQueryParams extends API.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 { API } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\nexport type UseSwapRouteQueryParams = API.SwapParams;\n\nconst {\n queryKey: swapRouteQueryKey,\n fetch: fetchSwapRoute,\n useQuery: useSwapRouteQuery,\n} = createQueryHook<UseSwapRouteQueryParams, API.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 { API, Chain, TokenCandle, TokenResolution } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenCandlesQuery}. */\nexport interface UseTokenCandlesQueryParams extends API.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 { API, Chain, TokenHolder } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenHoldersQuery}. */\nexport interface UseTokenHoldersQueryParams extends API.CursorListOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenHoldersQueryKey,\n fetch: fetchTokenHolders,\n useQuery: useTokenHoldersQuery,\n} = createQueryHook<UseTokenHoldersQueryParams, API.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 ],\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 { 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 { API, Chain, Trade } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenTradesQuery}. */\nexport interface UseTokenTradesQueryParams extends API.GetTradesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenTradesQueryKey,\n fetch: fetchTokenTrades,\n useQuery: useTokenTradesQuery,\n} = createQueryHook<UseTokenTradesQueryParams, API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTrendingTokensQuery}. */\nexport interface UseTrendingTokensQueryParams extends API.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 { Chain, WalletPnl } 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?: string;\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 { Chain, WalletPortfolioPnls } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletPortfolioPnlsQuery}. */\nexport interface UseWalletPortfolioPnlsQueryParams {\n chain: Chain;\n address: string;\n cursor?: string;\n limit?: number;\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 ],\n fetch: (client, { chain, address, cursor, limit }) =>\n client.getWalletPortfolioPnls(chain, address, { cursor, limit }),\n});\n\nexport {\n walletPortfolioPnlsQueryKey,\n fetchWalletPortfolioPnls,\n useWalletPortfolioPnlsQuery,\n};\n","import {\n useInfiniteQuery,\n type InfiniteData,\n type UseInfiniteQueryOptions,\n type UseInfiniteQueryResult,\n} from \"@tanstack/react-query\";\nimport { API } 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: API.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","import { Chain, WalletPortfolioPnls } 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}\n\nconst {\n queryKey: walletPortfolioPnlsInfiniteQueryKey,\n useInfiniteQuery: useWalletPortfolioPnlsInfiniteQuery,\n} = createInfiniteQueryHook<\n UseWalletPortfolioPnlsInfiniteQueryParams,\n WalletPortfolioPnls\n>({\n name: \"walletPortfolioPnls\",\n queryKey: (p) => [p.chain, p.address, toKeySegment(p.limit)],\n fetch: (client, params, cursor) =>\n client.getWalletPortfolioPnls(params.chain, params.address, {\n cursor,\n limit: params.limit ?? 100,\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 { API, Chain, Trade } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletTradesQuery}. */\nexport interface UseWalletTradesQueryParams extends API.GetTradesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: walletTradesQueryKey,\n fetch: fetchWalletTrades,\n useQuery: useWalletTradesQuery,\n} = createQueryHook<UseWalletTradesQueryParams, API.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 { API, Activity, Chain } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenActivitiesQuery}. */\nexport interface UseTokenActivitiesQueryParams\n extends API.GetActivitiesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenActivitiesQueryKey,\n fetch: fetchTokenActivities,\n useQuery: useTokenActivitiesQuery,\n} = createQueryHook<UseTokenActivitiesQueryParams, API.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 ],\n fetch: (client, { chain, address, ...options }) =>\n client.getTokenActivities(chain, address, options),\n});\n\nexport {\n tokenActivitiesQueryKey,\n fetchTokenActivities,\n useTokenActivitiesQuery,\n};\n","import { API, Activity, Chain } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletActivitiesQuery}. */\nexport interface UseWalletActivitiesQueryParams\n extends API.GetActivitiesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: walletActivitiesQueryKey,\n fetch: fetchWalletActivities,\n useQuery: useWalletActivitiesQuery,\n} = createQueryHook<UseWalletActivitiesQueryParams, API.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 ],\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 { API } 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) => API.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: API.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 { API, Chain } 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<API.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 { 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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API } from \"@liberfi.io/types\";\nimport {\n DEFAULT_QUERY_KEY_PREFIX,\n DexClientContext,\n DexClientContextValue,\n} from \"./DexClientContext\";\n\nexport type DexClientProviderProps = PropsWithChildren<{\n client: API.IClient;\n subscribeClient: API.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/version.ts","../src/DexClientContext.ts","../src/hooks/useDexClient.ts","../src/hooks/queryKeyUtils.ts","../src/hooks/createQueryHook.ts","../src/hooks/useFinalStretchTokensQuery.ts","../src/hooks/useMigratedTokensQuery.ts","../src/hooks/useNewTokensQuery.ts","../src/hooks/usePresignedUploadUrlQuery.ts","../src/hooks/useSearchTokensQuery.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/useTokenStatsQuery.ts","../src/hooks/useTokenTradesQuery.ts","../src/hooks/useTrendingTokensQuery.ts","../src/hooks/useTxSuccessQuery.ts","../src/hooks/useWalletPnlQuery.ts","../src/hooks/useWalletPortfolioPnlsQuery.ts","../src/hooks/createInfiniteQueryHook.ts","../src/hooks/useWalletPortfolioPnlsInfiniteQuery.ts","../src/hooks/useWalletPortfoliosQuery.ts","../src/hooks/useWalletPortfoliosByTokensQuery.ts","../src/hooks/useWalletPortfoliosInfiniteQuery.ts","../src/hooks/useWalletPortfolioPnlsByTokensQuery.ts","../src/hooks/useWalletTradesQuery.ts","../src/hooks/useTokenActivitiesQuery.ts","../src/hooks/useWalletActivitiesQuery.ts","../src/hooks/useSubscriptionEffect.ts","../src/hooks/useTokenSubscription.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/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","toKeySegment","value","toSortedKeySegment","createQueryHook","config","buildQueryKey","params","prefix","fetchFn","client","useCreatedQuery","options","queryKeyPrefix","useQuery","finalStretchTokensQueryKey","fetchFinalStretchTokens","useFinalStretchTokensQuery","p","chain","migratedTokensQueryKey","fetchMigratedTokens","useMigratedTokensQuery","newTokensQueryKey","fetchNewTokens","useNewTokensQuery","presignedUploadUrlQueryKey","fetchPresignedUploadUrl","usePresignedUploadUrlQuery","searchTokensQueryKey","fetchSearchTokens","useSearchTokensQuery","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","tokenStatsQueryKey","fetchTokenStats","useTokenStatsQuery","tokenTradesQueryKey","fetchTokenTrades","useTokenTradesQuery","trendingTokensQueryKey","fetchTrendingTokens","useTrendingTokensQuery","txSuccessQueryKey","fetchTxSuccess","useTxSuccessQuery","txHash","timeout","walletPnlQueryKey","fetchWalletPnl","useWalletPnlQuery","walletPortfolioPnlsQueryKey","fetchWalletPortfolioPnls","useWalletPortfolioPnlsQuery","cursor","limit","createInfiniteQueryHook","useCreatedInfiniteQuery","useInfiniteQuery","pageParam","lastPage","walletPortfolioPnlsInfiniteQueryKey","useWalletPortfolioPnlsInfiniteQuery","walletPortfoliosQueryKey","fetchWalletPortfolios","useWalletPortfoliosQuery","walletPortfoliosByTokensQueryKey","fetchWalletPortfoliosByTokens","useWalletPortfoliosByTokensQuery","tokenAddresses","walletPortfoliosInfiniteQueryKey","useWalletPortfoliosInfiniteQuery","walletPortfolioPnlsByTokensQueryKey","fetchWalletPortfolioPnlsByTokens","useWalletPortfolioPnlsByTokensQuery","walletTradesQueryKey","fetchWalletTrades","useWalletTradesQuery","tokenActivitiesQueryKey","fetchTokenActivities","useTokenActivitiesQuery","walletActivitiesQueryKey","fetchWalletActivities","useWalletActivitiesQuery","useSubscriptionEffect","subscribe","callback","deps","callbackRef","useRef","onErrorRef","useEffect","subscription","data","err","useTokenSubscription","subscribeClient","cb","useTokenCandlesSubscription","useTokenTradesSubscription","useWalletPnlSubscription","useWalletPortfoliosSubscription","useWalletPortfolioPnlsSubscription","useWalletTradesSubscription","useTokenActivitiesSubscription","useWalletActivitiesSubscription","useNewTokensSubscription","useTrendingTokensSubscription","useMigratedTokensSubscription","useFinalStretchTokensSubscription","useStockTokensSubscription","DexClientProvider","children","useMemo","jsx"],"mappings":"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","file":"index.js","sourcesContent":["declare global {\n interface Window {\n __LIBERFI_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__LIBERFI_VERSION__ = window.__LIBERFI_VERSION__ || {};\n window.__LIBERFI_VERSION__[\"@liberfi.io/react\"] = \"0.1.11\";\n}\n\nexport default \"0.1.11\";\n","import { createContext } from \"react\";\nimport { API } 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 `API.IClient`. */\n client: API.IClient;\n /** WebSocket subscription client implementing `API.ISubscribeClient`. */\n subscribeClient: API.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","/**\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 {\n useQuery,\n type UseQueryOptions,\n type UseQueryResult,\n} from \"@tanstack/react-query\";\nimport { API } 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: API.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: API.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: API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useFinalStretchTokensQuery}. */\nexport interface UseFinalStretchTokensQueryParams\n extends API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useMigratedTokensQuery}. */\nexport interface UseMigratedTokensQueryParams extends API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useNewTokensQuery}. */\nexport interface UseNewTokensQueryParams extends API.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 { API } 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: API.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 { API } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\nexport type UseSearchTokensQueryParams = API.SearchTokensOptions;\n\nconst {\n queryKey: searchTokensQueryKey,\n fetch: fetchSearchTokens,\n useQuery: useSearchTokensQuery,\n} = createQueryHook<UseSearchTokensQueryParams, API.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 { useMutation, UseMutationOptions } from \"@tanstack/react-query\";\nimport { API } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\n\nexport type UseSendTxMutationParams = API.SendTxParams;\n\n/** Sends a transaction via the API client (for use outside React). */\nexport async function sendTx(\n client: API.IClient,\n params: UseSendTxMutationParams,\n) {\n return await client.sendTx(params);\n}\n\n/** Mutation hook that sends a transaction. */\nexport function useSendTxMutation(\n options: Omit<\n UseMutationOptions<API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useStockTokensQuery}. */\nexport interface UseStockTokensQueryParams extends API.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 { API } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\nexport type UseSwapRouteQueryParams = API.SwapParams;\n\nconst {\n queryKey: swapRouteQueryKey,\n fetch: fetchSwapRoute,\n useQuery: useSwapRouteQuery,\n} = createQueryHook<UseSwapRouteQueryParams, API.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 { API, Chain, TokenCandle, TokenResolution } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenCandlesQuery}. */\nexport interface UseTokenCandlesQueryParams extends API.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 { API, Chain, TokenHolder } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenHoldersQuery}. */\nexport interface UseTokenHoldersQueryParams extends API.CursorListOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenHoldersQueryKey,\n fetch: fetchTokenHolders,\n useQuery: useTokenHoldersQuery,\n} = createQueryHook<UseTokenHoldersQueryParams, API.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 ],\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 { 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 { API, Chain, Trade } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenTradesQuery}. */\nexport interface UseTokenTradesQueryParams extends API.GetTradesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenTradesQueryKey,\n fetch: fetchTokenTrades,\n useQuery: useTokenTradesQuery,\n} = createQueryHook<UseTokenTradesQueryParams, API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTrendingTokensQuery}. */\nexport interface UseTrendingTokensQueryParams extends API.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 { Chain, WalletPnl } 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?: string;\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 { Chain, WalletPortfolioPnls } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletPortfolioPnlsQuery}. */\nexport interface UseWalletPortfolioPnlsQueryParams {\n chain: Chain;\n address: string;\n cursor?: string;\n limit?: number;\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 ],\n fetch: (client, { chain, address, cursor, limit }) =>\n client.getWalletPortfolioPnls(chain, address, { cursor, limit }),\n});\n\nexport {\n walletPortfolioPnlsQueryKey,\n fetchWalletPortfolioPnls,\n useWalletPortfolioPnlsQuery,\n};\n","import {\n useInfiniteQuery,\n type InfiniteData,\n type UseInfiniteQueryOptions,\n type UseInfiniteQueryResult,\n} from \"@tanstack/react-query\";\nimport { API } 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: API.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","import { Chain, WalletPortfolioPnls } 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}\n\nconst {\n queryKey: walletPortfolioPnlsInfiniteQueryKey,\n useInfiniteQuery: useWalletPortfolioPnlsInfiniteQuery,\n} = createInfiniteQueryHook<\n UseWalletPortfolioPnlsInfiniteQueryParams,\n WalletPortfolioPnls\n>({\n name: \"walletPortfolioPnls\",\n queryKey: (p) => [p.chain, p.address, toKeySegment(p.limit)],\n fetch: (client, params, cursor) =>\n client.getWalletPortfolioPnls(params.chain, params.address, {\n cursor,\n limit: params.limit ?? 100,\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 { API, Chain, Trade } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletTradesQuery}. */\nexport interface UseWalletTradesQueryParams extends API.GetTradesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: walletTradesQueryKey,\n fetch: fetchWalletTrades,\n useQuery: useWalletTradesQuery,\n} = createQueryHook<UseWalletTradesQueryParams, API.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 { API, Activity, Chain } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenActivitiesQuery}. */\nexport interface UseTokenActivitiesQueryParams\n extends API.GetActivitiesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenActivitiesQueryKey,\n fetch: fetchTokenActivities,\n useQuery: useTokenActivitiesQuery,\n} = createQueryHook<UseTokenActivitiesQueryParams, API.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 ],\n fetch: (client, { chain, address, ...options }) =>\n client.getTokenActivities(chain, address, options),\n});\n\nexport {\n tokenActivitiesQueryKey,\n fetchTokenActivities,\n useTokenActivitiesQuery,\n};\n","import { API, Activity, Chain } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletActivitiesQuery}. */\nexport interface UseWalletActivitiesQueryParams\n extends API.GetActivitiesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: walletActivitiesQueryKey,\n fetch: fetchWalletActivities,\n useQuery: useWalletActivitiesQuery,\n} = createQueryHook<UseWalletActivitiesQueryParams, API.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 ],\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 { API } 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) => API.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: API.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 { API, Chain } 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<API.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 { 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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API } from \"@liberfi.io/types\";\nimport {\n DEFAULT_QUERY_KEY_PREFIX,\n DexClientContext,\n DexClientContextValue,\n} from \"./DexClientContext\";\n\nexport type DexClientProviderProps = PropsWithChildren<{\n client: API.IClient;\n subscribeClient: API.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/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import {createContext,useContext,useMemo,useRef,useEffect}from'react';import {useQuery,useMutation,useInfiniteQuery}from'@tanstack/react-query';import {jsx}from'react/jsx-runtime';typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/react"]="0.1.10");var y="liberfi",d=createContext(null);function a(){let e=useContext(d);if(e===null)throw new Error("useDexClient must be used within a DexClientProvider");return e}function i(e){return e==null?"":e instanceof Date?e.toISOString():String(e)}function c(e){return !e||e.length===0?"[]":JSON.stringify([...e].sort())}function s(e){function r(n,l=y){return [l,e.name,...e.queryKey(n)]}function t(n,l){return e.fetch(n,l)}function o(n,l={}){let{client:m,queryKeyPrefix:f}=a();return useQuery({queryKey:r(n,f),queryFn:()=>e.fetch(m,n),...e.defaultOptions,...l})}return {queryKey:r,fetch:t,useQuery:o}}var {queryKey:L,fetch:N,useQuery:G}=s({name:"finalStretchTokens",queryKey:e=>[e.chain,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,...t})=>e.getFinalStretchTokens(r,t)});var {queryKey:J,fetch:j,useQuery:z}=s({name:"migratedTokens",queryKey:e=>[e.chain,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,...t})=>e.getMigratedTokens(r,t)});var {queryKey:re,fetch:te,useQuery:oe}=s({name:"newTokens",queryKey:e=>[e.chain,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,...t})=>e.getNewTokens(r,t)});function b(e=y){return [e,"presignedUploadUrl"]}async function S(e){return await e.getPresignedUploadUrl()}function ce(e={}){let{client:r,queryKeyPrefix:t}=a();return useQuery({queryKey:b(t),queryFn:async()=>S(r),staleTime:0,...e})}var {queryKey:me,fetch:de,useQuery:pe}=s({name:"searchTokens",queryKey:e=>[i(e.cursor),i(e.limit),i(e.direction),c(e.chains),i(e.keyword),c(e.filters),i(e.sortBy),i(e.sortDirection)],fetch:(e,r)=>e.searchTokens(r)});async function C(e,r){return await e.sendTx(r)}function xe(e={}){let{client:r}=a();return useMutation({mutationFn:async t=>C(r,t),...e})}var {queryKey:Ce,fetch:ge,useQuery:Ae}=s({name:"stockTokens",queryKey:e=>[e.chain,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,...t})=>e.getStockTokens(r,t)});var {queryKey:De,fetch:qe,useQuery:We}=s({name:"swapRoute",queryKey:e=>[e.chain,e.userAddress,e.input,e.output,e.mode,e.amount,i(e.slippage),i(e.priorityFee),i(e.tipFee),i(e.isAntiMev)],fetch:(e,r)=>e.swapRoute(r)});var {queryKey:ve,fetch:He,useQuery:Re}=s({name:"tokenCandles",queryKey:e=>[e.chain,e.address,e.resolution,i(e.after),i(e.before),i(e.limit)],fetch:(e,{chain:r,address:t,resolution:o,...n})=>e.getTokenCandles(r,t,o,n)});var {queryKey:Me,fetch:Le,useQuery:Ne}=s({name:"tokenHolders",queryKey:e=>[e.chain,e.address,i(e.cursor),i(e.limit),i(e.direction)],fetch:(e,{chain:r,address:t,...o})=>e.getTokenHolders(r,t,o)});var {queryKey:Ye,fetch:Xe,useQuery:Je}=s({name:"tokenMarketData",queryKey:e=>[e.chain,e.address],fetch:(e,r)=>e.getTokenMarketData(r.chain,r.address)});var {queryKey:Ze,fetch:$e,useQuery:er}=s({name:"token",queryKey:e=>[e.chain,e.address],fetch:(e,r)=>e.getToken(r.chain,r.address)});var {queryKey:or,fetch:ir,useQuery:nr}=s({name:"tokenSecurity",queryKey:e=>[e.chain,e.address],fetch:(e,r)=>e.getTokenSecurity(r.chain,r.address)});var {queryKey:ur,fetch:cr,useQuery:fr}=s({name:"tokens",queryKey:e=>[e.chain,[...e.addresses].sort().join(",")],fetch:(e,r)=>e.getTokens(r.chain,r.addresses)});var {queryKey:mr,fetch:dr,useQuery:pr}=s({name:"tokenStats",queryKey:e=>[e.chain,e.address],fetch:(e,r)=>e.getTokenStats(r.chain,r.address)});var {queryKey:kr,fetch:xr,useQuery:br}=s({name:"tokenTrades",queryKey:e=>[e.chain,e.address,i(e.before),i(e.after),i(e.beforeBlockHeight),i(e.afterBlockHeight),i(e.type),i(e.poolAddress)],fetch:(e,{chain:r,address:t,...o})=>e.getTokenTrades(r,t,o)});var {queryKey:gr,fetch:Ar,useQuery:Kr}=s({name:"trendingTokens",queryKey:e=>[e.chain,e.resolution,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,resolution:t,...o})=>e.getTrendingTokens(r,t,o)});var {queryKey:qr,fetch:Wr,useQuery:Or}=s({name:"txSuccess",queryKey:e=>[e.chain,e.txHash,i(e.timeout)],fetch:(e,{chain:r,txHash:t,timeout:o})=>e.checkTxSuccess(r,t,o)});var {queryKey:Hr,fetch:Rr,useQuery:Fr}=s({name:"walletPnl",queryKey:e=>[e.chain,e.address,i(e.resolution??"all")],fetch:(e,{chain:r,address:t,resolution:o})=>e.getWalletPnl(r,t,o)});var {queryKey:Lr,fetch:Nr,useQuery:Gr}=s({name:"walletPortfolioPnls",queryKey:e=>[e.chain,e.address,i(e.cursor),i(e.limit)],fetch:(e,{chain:r,address:t,cursor:o,limit:n})=>e.getWalletPortfolioPnls(r,t,{cursor:o,limit:n})});function p(e){function r(o,n=y){return [n,e.name,"infinite",...e.queryKey(o)]}function t(o,n={}){let{client:l,queryKeyPrefix:m}=a();return useInfiniteQuery({queryKey:r(o,m),queryFn:({pageParam:f})=>e.fetch(l,o,f),initialPageParam:void 0,getNextPageParam:f=>f.hasNext?f.endCursor:void 0,...n})}return {queryKey:r,useInfiniteQuery:t}}var {queryKey:$r,useInfiniteQuery:et}=p({name:"walletPortfolioPnls",queryKey:e=>[e.chain,e.address,i(e.limit)],fetch:(e,r,t)=>e.getWalletPortfolioPnls(r.chain,r.address,{cursor:t,limit:r.limit??100})});var {queryKey:it,fetch:nt,useQuery:st}=s({name:"walletPortfolios",queryKey:e=>[e.chain,e.address,i(e.cursor),i(e.limit)],fetch:(e,{chain:r,address:t,cursor:o,limit:n})=>e.getWalletPortfolios(r,t,{cursor:o,limit:n})});var {queryKey:ct,fetch:ft,useQuery:lt}=s({name:"walletPortfoliosByTokens",queryKey:e=>[e.chain,e.address,...[...e.tokenAddresses].sort()],fetch:(e,{chain:r,address:t,tokenAddresses:o})=>e.getWalletPortfoliosByTokens(r,t,o)});var {queryKey:pt,useInfiniteQuery:Pt}=p({name:"walletPortfolios",queryKey:e=>[e.chain,e.address,i(e.limit)],fetch:(e,r,t)=>e.getWalletPortfolios(r.chain,r.address,{cursor:t,limit:r.limit??100})});var {queryKey:kt,fetch:xt,useQuery:bt}=s({name:"walletPortfolioPnlsByTokens",queryKey:e=>[e.chain,e.address,...[...e.tokenAddresses].sort()],fetch:(e,{chain:r,address:t,tokenAddresses:o})=>e.getWalletPortfolioPnlsByTokens(r,t,o)});var {queryKey:gt,fetch:At,useQuery:Kt}=s({name:"walletTrades",queryKey:e=>[e.chain,e.address,i(e.before),i(e.after),i(e.beforeBlockHeight),i(e.afterBlockHeight),i(e.type),i(e.poolAddress)],fetch:(e,{chain:r,address:t,...o})=>e.getWalletTrades(r,t,o)});var {queryKey:qt,fetch:Wt,useQuery:Ot}=s({name:"tokenActivities",queryKey:e=>[e.chain,e.address,i(e.before),i(e.after),i(e.beforeBlockHeight),i(e.afterBlockHeight),i(e.type),i(e.poolAddress)],fetch:(e,{chain:r,address:t,...o})=>e.getTokenActivities(r,t,o)});var {queryKey:Ht,fetch:Rt,useQuery:Ft}=s({name:"walletActivities",queryKey:e=>[e.chain,e.address,i(e.before),i(e.after),i(e.beforeBlockHeight),i(e.afterBlockHeight),i(e.type),i(e.poolAddress)],fetch:(e,{chain:r,address:t,...o})=>e.getWalletActivities(r,t,o)});function u(e,r,t,o){let n=useRef(r);n.current=r;let l=useRef(o?.onError);l.current=o?.onError,useEffect(()=>{if(o?.enabled===false)return;let m;try{m=e(f=>n.current(f));}catch(f){l.current?.(f instanceof Error?f:new Error(String(f)));}return ()=>m?.unsubscribe()},t);}function Gt(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeToken(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function Jt(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeTokenCandles(e.chain,e.address,e.resolution,n),r,[o,e.chain,e.address,e.resolution,t?.enabled],t);}function $t(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeTokenTrades(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function oo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletPnl(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function ao(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletPortfolios(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function lo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletPortfolioPnls(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function Po(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletTrades(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function xo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeTokenActivities(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function Co(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletActivities(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function Io(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeNewTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function Wo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeTrendingTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function vo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeMigratedTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function _o(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeFinalStretchTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function No(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeStockTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function Bi({client:e,subscribeClient:r,queryKeyPrefix:t=y,children:o}){let n=useMemo(()=>({client:e,subscribeClient:r,queryKeyPrefix:t}),[e,r,t]);return jsx(d.Provider,{value:n,children:o})}export{y as DEFAULT_QUERY_KEY_PREFIX,d as DexClientContext,Bi as DexClientProvider,N as fetchFinalStretchTokens,j as fetchMigratedTokens,te as fetchNewTokens,S as fetchPresignedUploadUrl,de as fetchSearchTokens,ge as fetchStockTokens,qe as fetchSwapRoute,$e as fetchToken,Wt as fetchTokenActivities,He as fetchTokenCandles,Le as fetchTokenHolders,Xe as fetchTokenMarketData,ir as fetchTokenSecurity,dr as fetchTokenStats,xr as fetchTokenTrades,cr as fetchTokens,Ar as fetchTrendingTokens,Wr as fetchTxSuccess,Rt as fetchWalletActivities,Rr as fetchWalletPnl,Nr as fetchWalletPortfolioPnls,xt as fetchWalletPortfolioPnlsByTokens,nt as fetchWalletPortfolios,ft as fetchWalletPortfoliosByTokens,At as fetchWalletTrades,L as finalStretchTokensQueryKey,J as migratedTokensQueryKey,re as newTokensQueryKey,b as presignedUploadUrlQueryKey,me as searchTokensQueryKey,C as sendTx,Ce as stockTokensQueryKey,De as swapRouteQueryKey,i as toKeySegment,c as toSortedKeySegment,qt as tokenActivitiesQueryKey,ve as tokenCandlesQueryKey,Me as tokenHoldersQueryKey,Ye as tokenMarketDataQueryKey,Ze as tokenQueryKey,or as tokenSecurityQueryKey,mr as tokenStatsQueryKey,kr as tokenTradesQueryKey,ur as tokensQueryKey,gr as trendingTokensQueryKey,qr as txSuccessQueryKey,a as useDexClient,G as useFinalStretchTokensQuery,_o as useFinalStretchTokensSubscription,z as useMigratedTokensQuery,vo as useMigratedTokensSubscription,oe as useNewTokensQuery,Io as useNewTokensSubscription,ce as usePresignedUploadUrlQuery,pe as useSearchTokensQuery,xe as useSendTxMutation,Ae as useStockTokensQuery,No as useStockTokensSubscription,We as useSwapRouteQuery,Ot as useTokenActivitiesQuery,xo as useTokenActivitiesSubscription,Re as useTokenCandlesQuery,Jt as useTokenCandlesSubscription,Ne as useTokenHoldersQuery,Je as useTokenMarketDataQuery,er as useTokenQuery,nr as useTokenSecurityQuery,pr as useTokenStatsQuery,Gt as useTokenSubscription,br as useTokenTradesQuery,$t as useTokenTradesSubscription,fr as useTokensQuery,Kr as useTrendingTokensQuery,Wo as useTrendingTokensSubscription,Or as useTxSuccessQuery,Ft as useWalletActivitiesQuery,Co as useWalletActivitiesSubscription,Fr as useWalletPnlQuery,oo as useWalletPnlSubscription,bt as useWalletPortfolioPnlsByTokensQuery,et as useWalletPortfolioPnlsInfiniteQuery,Gr as useWalletPortfolioPnlsQuery,lo as useWalletPortfolioPnlsSubscription,lt as useWalletPortfoliosByTokensQuery,Pt as useWalletPortfoliosInfiniteQuery,st as useWalletPortfoliosQuery,ao as useWalletPortfoliosSubscription,Kt as useWalletTradesQuery,Po as useWalletTradesSubscription,Ht as walletActivitiesQueryKey,Hr as walletPnlQueryKey,kt as walletPortfolioPnlsByTokensQueryKey,$r as walletPortfolioPnlsInfiniteQueryKey,Lr as walletPortfolioPnlsQueryKey,ct as walletPortfoliosByTokensQueryKey,pt as walletPortfoliosInfiniteQueryKey,it as walletPortfoliosQueryKey,gt as walletTradesQueryKey};//# sourceMappingURL=index.mjs.map
1
+ import {createContext,useContext,useMemo,useRef,useEffect}from'react';import {useQuery,useMutation,useInfiniteQuery}from'@tanstack/react-query';import {jsx}from'react/jsx-runtime';typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/react"]="0.1.11");var y="liberfi",d=createContext(null);function a(){let e=useContext(d);if(e===null)throw new Error("useDexClient must be used within a DexClientProvider");return e}function i(e){return e==null?"":e instanceof Date?e.toISOString():String(e)}function c(e){return !e||e.length===0?"[]":JSON.stringify([...e].sort())}function s(e){function r(n,l=y){return [l,e.name,...e.queryKey(n)]}function t(n,l){return e.fetch(n,l)}function o(n,l={}){let{client:m,queryKeyPrefix:f}=a();return useQuery({queryKey:r(n,f),queryFn:()=>e.fetch(m,n),...e.defaultOptions,...l})}return {queryKey:r,fetch:t,useQuery:o}}var {queryKey:L,fetch:N,useQuery:G}=s({name:"finalStretchTokens",queryKey:e=>[e.chain,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,...t})=>e.getFinalStretchTokens(r,t)});var {queryKey:J,fetch:j,useQuery:z}=s({name:"migratedTokens",queryKey:e=>[e.chain,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,...t})=>e.getMigratedTokens(r,t)});var {queryKey:re,fetch:te,useQuery:oe}=s({name:"newTokens",queryKey:e=>[e.chain,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,...t})=>e.getNewTokens(r,t)});function b(e=y){return [e,"presignedUploadUrl"]}async function S(e){return await e.getPresignedUploadUrl()}function ce(e={}){let{client:r,queryKeyPrefix:t}=a();return useQuery({queryKey:b(t),queryFn:async()=>S(r),staleTime:0,...e})}var {queryKey:me,fetch:de,useQuery:pe}=s({name:"searchTokens",queryKey:e=>[i(e.cursor),i(e.limit),i(e.direction),c(e.chains),i(e.keyword),c(e.filters),i(e.sortBy),i(e.sortDirection)],fetch:(e,r)=>e.searchTokens(r)});async function C(e,r){return await e.sendTx(r)}function xe(e={}){let{client:r}=a();return useMutation({mutationFn:async t=>C(r,t),...e})}var {queryKey:Ce,fetch:ge,useQuery:Ae}=s({name:"stockTokens",queryKey:e=>[e.chain,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,...t})=>e.getStockTokens(r,t)});var {queryKey:De,fetch:qe,useQuery:We}=s({name:"swapRoute",queryKey:e=>[e.chain,e.userAddress,e.input,e.output,e.mode,e.amount,i(e.slippage),i(e.priorityFee),i(e.tipFee),i(e.isAntiMev)],fetch:(e,r)=>e.swapRoute(r)});var {queryKey:ve,fetch:He,useQuery:Re}=s({name:"tokenCandles",queryKey:e=>[e.chain,e.address,e.resolution,i(e.after),i(e.before),i(e.limit)],fetch:(e,{chain:r,address:t,resolution:o,...n})=>e.getTokenCandles(r,t,o,n)});var {queryKey:Me,fetch:Le,useQuery:Ne}=s({name:"tokenHolders",queryKey:e=>[e.chain,e.address,i(e.cursor),i(e.limit),i(e.direction)],fetch:(e,{chain:r,address:t,...o})=>e.getTokenHolders(r,t,o)});var {queryKey:Ye,fetch:Xe,useQuery:Je}=s({name:"tokenMarketData",queryKey:e=>[e.chain,e.address],fetch:(e,r)=>e.getTokenMarketData(r.chain,r.address)});var {queryKey:Ze,fetch:$e,useQuery:er}=s({name:"token",queryKey:e=>[e.chain,e.address],fetch:(e,r)=>e.getToken(r.chain,r.address)});var {queryKey:or,fetch:ir,useQuery:nr}=s({name:"tokenSecurity",queryKey:e=>[e.chain,e.address],fetch:(e,r)=>e.getTokenSecurity(r.chain,r.address)});var {queryKey:ur,fetch:cr,useQuery:fr}=s({name:"tokens",queryKey:e=>[e.chain,[...e.addresses].sort().join(",")],fetch:(e,r)=>e.getTokens(r.chain,r.addresses)});var {queryKey:mr,fetch:dr,useQuery:pr}=s({name:"tokenStats",queryKey:e=>[e.chain,e.address],fetch:(e,r)=>e.getTokenStats(r.chain,r.address)});var {queryKey:kr,fetch:xr,useQuery:br}=s({name:"tokenTrades",queryKey:e=>[e.chain,e.address,i(e.before),i(e.after),i(e.beforeBlockHeight),i(e.afterBlockHeight),i(e.type),i(e.poolAddress)],fetch:(e,{chain:r,address:t,...o})=>e.getTokenTrades(r,t,o)});var {queryKey:gr,fetch:Ar,useQuery:Kr}=s({name:"trendingTokens",queryKey:e=>[e.chain,e.resolution,i(e.sortBy),i(e.sortDirection),c(e.keywords),c(e.excludeKeywords),c(e.filters)],fetch:(e,{chain:r,resolution:t,...o})=>e.getTrendingTokens(r,t,o)});var {queryKey:qr,fetch:Wr,useQuery:Or}=s({name:"txSuccess",queryKey:e=>[e.chain,e.txHash,i(e.timeout)],fetch:(e,{chain:r,txHash:t,timeout:o})=>e.checkTxSuccess(r,t,o)});var {queryKey:Hr,fetch:Rr,useQuery:Fr}=s({name:"walletPnl",queryKey:e=>[e.chain,e.address,i(e.resolution??"all")],fetch:(e,{chain:r,address:t,resolution:o})=>e.getWalletPnl(r,t,o)});var {queryKey:Lr,fetch:Nr,useQuery:Gr}=s({name:"walletPortfolioPnls",queryKey:e=>[e.chain,e.address,i(e.cursor),i(e.limit)],fetch:(e,{chain:r,address:t,cursor:o,limit:n})=>e.getWalletPortfolioPnls(r,t,{cursor:o,limit:n})});function p(e){function r(o,n=y){return [n,e.name,"infinite",...e.queryKey(o)]}function t(o,n={}){let{client:l,queryKeyPrefix:m}=a();return useInfiniteQuery({queryKey:r(o,m),queryFn:({pageParam:f})=>e.fetch(l,o,f),initialPageParam:void 0,getNextPageParam:f=>f.hasNext?f.endCursor:void 0,...n})}return {queryKey:r,useInfiniteQuery:t}}var {queryKey:$r,useInfiniteQuery:et}=p({name:"walletPortfolioPnls",queryKey:e=>[e.chain,e.address,i(e.limit)],fetch:(e,r,t)=>e.getWalletPortfolioPnls(r.chain,r.address,{cursor:t,limit:r.limit??100})});var {queryKey:it,fetch:nt,useQuery:st}=s({name:"walletPortfolios",queryKey:e=>[e.chain,e.address,i(e.cursor),i(e.limit)],fetch:(e,{chain:r,address:t,cursor:o,limit:n})=>e.getWalletPortfolios(r,t,{cursor:o,limit:n})});var {queryKey:ct,fetch:ft,useQuery:lt}=s({name:"walletPortfoliosByTokens",queryKey:e=>[e.chain,e.address,...[...e.tokenAddresses].sort()],fetch:(e,{chain:r,address:t,tokenAddresses:o})=>e.getWalletPortfoliosByTokens(r,t,o)});var {queryKey:pt,useInfiniteQuery:Pt}=p({name:"walletPortfolios",queryKey:e=>[e.chain,e.address,i(e.limit)],fetch:(e,r,t)=>e.getWalletPortfolios(r.chain,r.address,{cursor:t,limit:r.limit??100})});var {queryKey:kt,fetch:xt,useQuery:bt}=s({name:"walletPortfolioPnlsByTokens",queryKey:e=>[e.chain,e.address,...[...e.tokenAddresses].sort()],fetch:(e,{chain:r,address:t,tokenAddresses:o})=>e.getWalletPortfolioPnlsByTokens(r,t,o)});var {queryKey:gt,fetch:At,useQuery:Kt}=s({name:"walletTrades",queryKey:e=>[e.chain,e.address,i(e.before),i(e.after),i(e.beforeBlockHeight),i(e.afterBlockHeight),i(e.type),i(e.poolAddress)],fetch:(e,{chain:r,address:t,...o})=>e.getWalletTrades(r,t,o)});var {queryKey:qt,fetch:Wt,useQuery:Ot}=s({name:"tokenActivities",queryKey:e=>[e.chain,e.address,i(e.before),i(e.after),i(e.beforeBlockHeight),i(e.afterBlockHeight),i(e.type),i(e.poolAddress)],fetch:(e,{chain:r,address:t,...o})=>e.getTokenActivities(r,t,o)});var {queryKey:Ht,fetch:Rt,useQuery:Ft}=s({name:"walletActivities",queryKey:e=>[e.chain,e.address,i(e.before),i(e.after),i(e.beforeBlockHeight),i(e.afterBlockHeight),i(e.type),i(e.poolAddress)],fetch:(e,{chain:r,address:t,...o})=>e.getWalletActivities(r,t,o)});function u(e,r,t,o){let n=useRef(r);n.current=r;let l=useRef(o?.onError);l.current=o?.onError,useEffect(()=>{if(o?.enabled===false)return;let m;try{m=e(f=>n.current(f));}catch(f){l.current?.(f instanceof Error?f:new Error(String(f)));}return ()=>m?.unsubscribe()},t);}function Gt(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeToken(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function Jt(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeTokenCandles(e.chain,e.address,e.resolution,n),r,[o,e.chain,e.address,e.resolution,t?.enabled],t);}function $t(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeTokenTrades(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function oo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletPnl(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function ao(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletPortfolios(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function lo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletPortfolioPnls(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function Po(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletTrades(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function xo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeTokenActivities(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function Co(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeWalletActivities(e.chain,e.address,n),r,[o,e.chain,e.address,t?.enabled],t);}function Io(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeNewTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function Wo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeTrendingTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function vo(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeMigratedTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function _o(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeFinalStretchTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function No(e,r,t){let{subscribeClient:o}=a();u(n=>o.subscribeStockTokens(e.chain,n),r,[o,e.chain,t?.enabled],t);}function Bi({client:e,subscribeClient:r,queryKeyPrefix:t=y,children:o}){let n=useMemo(()=>({client:e,subscribeClient:r,queryKeyPrefix:t}),[e,r,t]);return jsx(d.Provider,{value:n,children:o})}export{y as DEFAULT_QUERY_KEY_PREFIX,d as DexClientContext,Bi as DexClientProvider,N as fetchFinalStretchTokens,j as fetchMigratedTokens,te as fetchNewTokens,S as fetchPresignedUploadUrl,de as fetchSearchTokens,ge as fetchStockTokens,qe as fetchSwapRoute,$e as fetchToken,Wt as fetchTokenActivities,He as fetchTokenCandles,Le as fetchTokenHolders,Xe as fetchTokenMarketData,ir as fetchTokenSecurity,dr as fetchTokenStats,xr as fetchTokenTrades,cr as fetchTokens,Ar as fetchTrendingTokens,Wr as fetchTxSuccess,Rt as fetchWalletActivities,Rr as fetchWalletPnl,Nr as fetchWalletPortfolioPnls,xt as fetchWalletPortfolioPnlsByTokens,nt as fetchWalletPortfolios,ft as fetchWalletPortfoliosByTokens,At as fetchWalletTrades,L as finalStretchTokensQueryKey,J as migratedTokensQueryKey,re as newTokensQueryKey,b as presignedUploadUrlQueryKey,me as searchTokensQueryKey,C as sendTx,Ce as stockTokensQueryKey,De as swapRouteQueryKey,i as toKeySegment,c as toSortedKeySegment,qt as tokenActivitiesQueryKey,ve as tokenCandlesQueryKey,Me as tokenHoldersQueryKey,Ye as tokenMarketDataQueryKey,Ze as tokenQueryKey,or as tokenSecurityQueryKey,mr as tokenStatsQueryKey,kr as tokenTradesQueryKey,ur as tokensQueryKey,gr as trendingTokensQueryKey,qr as txSuccessQueryKey,a as useDexClient,G as useFinalStretchTokensQuery,_o as useFinalStretchTokensSubscription,z as useMigratedTokensQuery,vo as useMigratedTokensSubscription,oe as useNewTokensQuery,Io as useNewTokensSubscription,ce as usePresignedUploadUrlQuery,pe as useSearchTokensQuery,xe as useSendTxMutation,Ae as useStockTokensQuery,No as useStockTokensSubscription,We as useSwapRouteQuery,Ot as useTokenActivitiesQuery,xo as useTokenActivitiesSubscription,Re as useTokenCandlesQuery,Jt as useTokenCandlesSubscription,Ne as useTokenHoldersQuery,Je as useTokenMarketDataQuery,er as useTokenQuery,nr as useTokenSecurityQuery,pr as useTokenStatsQuery,Gt as useTokenSubscription,br as useTokenTradesQuery,$t as useTokenTradesSubscription,fr as useTokensQuery,Kr as useTrendingTokensQuery,Wo as useTrendingTokensSubscription,Or as useTxSuccessQuery,Ft as useWalletActivitiesQuery,Co as useWalletActivitiesSubscription,Fr as useWalletPnlQuery,oo as useWalletPnlSubscription,bt as useWalletPortfolioPnlsByTokensQuery,et as useWalletPortfolioPnlsInfiniteQuery,Gr as useWalletPortfolioPnlsQuery,lo as useWalletPortfolioPnlsSubscription,lt as useWalletPortfoliosByTokensQuery,Pt as useWalletPortfoliosInfiniteQuery,st as useWalletPortfoliosQuery,ao as useWalletPortfoliosSubscription,Kt as useWalletTradesQuery,Po as useWalletTradesSubscription,Ht as walletActivitiesQueryKey,Hr as walletPnlQueryKey,kt as walletPortfolioPnlsByTokensQueryKey,$r as walletPortfolioPnlsInfiniteQueryKey,Lr as walletPortfolioPnlsQueryKey,ct as walletPortfoliosByTokensQueryKey,pt as walletPortfoliosInfiniteQueryKey,it as walletPortfoliosQueryKey,gt as walletTradesQueryKey};//# sourceMappingURL=index.mjs.map
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts","../src/DexClientContext.ts","../src/hooks/useDexClient.ts","../src/hooks/queryKeyUtils.ts","../src/hooks/createQueryHook.ts","../src/hooks/useFinalStretchTokensQuery.ts","../src/hooks/useMigratedTokensQuery.ts","../src/hooks/useNewTokensQuery.ts","../src/hooks/usePresignedUploadUrlQuery.ts","../src/hooks/useSearchTokensQuery.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/useTokenStatsQuery.ts","../src/hooks/useTokenTradesQuery.ts","../src/hooks/useTrendingTokensQuery.ts","../src/hooks/useTxSuccessQuery.ts","../src/hooks/useWalletPnlQuery.ts","../src/hooks/useWalletPortfolioPnlsQuery.ts","../src/hooks/createInfiniteQueryHook.ts","../src/hooks/useWalletPortfolioPnlsInfiniteQuery.ts","../src/hooks/useWalletPortfoliosQuery.ts","../src/hooks/useWalletPortfoliosByTokensQuery.ts","../src/hooks/useWalletPortfoliosInfiniteQuery.ts","../src/hooks/useWalletPortfolioPnlsByTokensQuery.ts","../src/hooks/useWalletTradesQuery.ts","../src/hooks/useTokenActivitiesQuery.ts","../src/hooks/useWalletActivitiesQuery.ts","../src/hooks/useSubscriptionEffect.ts","../src/hooks/useTokenSubscription.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/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","toKeySegment","value","toSortedKeySegment","createQueryHook","config","buildQueryKey","params","prefix","fetchFn","client","useCreatedQuery","options","queryKeyPrefix","useQuery","finalStretchTokensQueryKey","fetchFinalStretchTokens","useFinalStretchTokensQuery","p","chain","migratedTokensQueryKey","fetchMigratedTokens","useMigratedTokensQuery","newTokensQueryKey","fetchNewTokens","useNewTokensQuery","presignedUploadUrlQueryKey","fetchPresignedUploadUrl","usePresignedUploadUrlQuery","searchTokensQueryKey","fetchSearchTokens","useSearchTokensQuery","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","tokenStatsQueryKey","fetchTokenStats","useTokenStatsQuery","tokenTradesQueryKey","fetchTokenTrades","useTokenTradesQuery","trendingTokensQueryKey","fetchTrendingTokens","useTrendingTokensQuery","txSuccessQueryKey","fetchTxSuccess","useTxSuccessQuery","txHash","timeout","walletPnlQueryKey","fetchWalletPnl","useWalletPnlQuery","walletPortfolioPnlsQueryKey","fetchWalletPortfolioPnls","useWalletPortfolioPnlsQuery","cursor","limit","createInfiniteQueryHook","useCreatedInfiniteQuery","useInfiniteQuery","pageParam","lastPage","walletPortfolioPnlsInfiniteQueryKey","useWalletPortfolioPnlsInfiniteQuery","walletPortfoliosQueryKey","fetchWalletPortfolios","useWalletPortfoliosQuery","walletPortfoliosByTokensQueryKey","fetchWalletPortfoliosByTokens","useWalletPortfoliosByTokensQuery","tokenAddresses","walletPortfoliosInfiniteQueryKey","useWalletPortfoliosInfiniteQuery","walletPortfolioPnlsByTokensQueryKey","fetchWalletPortfolioPnlsByTokens","useWalletPortfolioPnlsByTokensQuery","walletTradesQueryKey","fetchWalletTrades","useWalletTradesQuery","tokenActivitiesQueryKey","fetchTokenActivities","useTokenActivitiesQuery","walletActivitiesQueryKey","fetchWalletActivities","useWalletActivitiesQuery","useSubscriptionEffect","subscribe","callback","deps","callbackRef","useRef","onErrorRef","useEffect","subscription","data","err","useTokenSubscription","subscribeClient","cb","useTokenCandlesSubscription","useTokenTradesSubscription","useWalletPnlSubscription","useWalletPortfoliosSubscription","useWalletPortfolioPnlsSubscription","useWalletTradesSubscription","useTokenActivitiesSubscription","useWalletActivitiesSubscription","useNewTokensSubscription","useTrendingTokensSubscription","useMigratedTokensSubscription","useFinalStretchTokensSubscription","useStockTokensSubscription","DexClientProvider","children","useMemo","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["declare global {\n interface Window {\n __LIBERFI_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__LIBERFI_VERSION__ = window.__LIBERFI_VERSION__ || {};\n window.__LIBERFI_VERSION__[\"@liberfi.io/react\"] = \"0.1.10\";\n}\n\nexport default \"0.1.10\";\n","import { createContext } from \"react\";\nimport { API } 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 `API.IClient`. */\n client: API.IClient;\n /** WebSocket subscription client implementing `API.ISubscribeClient`. */\n subscribeClient: API.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","/**\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 {\n useQuery,\n type UseQueryOptions,\n type UseQueryResult,\n} from \"@tanstack/react-query\";\nimport { API } 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: API.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: API.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: API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useFinalStretchTokensQuery}. */\nexport interface UseFinalStretchTokensQueryParams\n extends API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useMigratedTokensQuery}. */\nexport interface UseMigratedTokensQueryParams extends API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useNewTokensQuery}. */\nexport interface UseNewTokensQueryParams extends API.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 { API } 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: API.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 { API } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\nexport type UseSearchTokensQueryParams = API.SearchTokensOptions;\n\nconst {\n queryKey: searchTokensQueryKey,\n fetch: fetchSearchTokens,\n useQuery: useSearchTokensQuery,\n} = createQueryHook<UseSearchTokensQueryParams, API.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 { useMutation, UseMutationOptions } from \"@tanstack/react-query\";\nimport { API } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\n\nexport type UseSendTxMutationParams = API.SendTxParams;\n\n/** Sends a transaction via the API client (for use outside React). */\nexport async function sendTx(\n client: API.IClient,\n params: UseSendTxMutationParams,\n) {\n return await client.sendTx(params);\n}\n\n/** Mutation hook that sends a transaction. */\nexport function useSendTxMutation(\n options: Omit<\n UseMutationOptions<API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useStockTokensQuery}. */\nexport interface UseStockTokensQueryParams extends API.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 { API } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\nexport type UseSwapRouteQueryParams = API.SwapParams;\n\nconst {\n queryKey: swapRouteQueryKey,\n fetch: fetchSwapRoute,\n useQuery: useSwapRouteQuery,\n} = createQueryHook<UseSwapRouteQueryParams, API.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 { API, Chain, TokenCandle, TokenResolution } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenCandlesQuery}. */\nexport interface UseTokenCandlesQueryParams extends API.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 { API, Chain, TokenHolder } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenHoldersQuery}. */\nexport interface UseTokenHoldersQueryParams extends API.CursorListOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenHoldersQueryKey,\n fetch: fetchTokenHolders,\n useQuery: useTokenHoldersQuery,\n} = createQueryHook<UseTokenHoldersQueryParams, API.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 ],\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 { 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 { API, Chain, Trade } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenTradesQuery}. */\nexport interface UseTokenTradesQueryParams extends API.GetTradesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenTradesQueryKey,\n fetch: fetchTokenTrades,\n useQuery: useTokenTradesQuery,\n} = createQueryHook<UseTokenTradesQueryParams, API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTrendingTokensQuery}. */\nexport interface UseTrendingTokensQueryParams extends API.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 { Chain, WalletPnl } 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?: string;\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 { Chain, WalletPortfolioPnls } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletPortfolioPnlsQuery}. */\nexport interface UseWalletPortfolioPnlsQueryParams {\n chain: Chain;\n address: string;\n cursor?: string;\n limit?: number;\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 ],\n fetch: (client, { chain, address, cursor, limit }) =>\n client.getWalletPortfolioPnls(chain, address, { cursor, limit }),\n});\n\nexport {\n walletPortfolioPnlsQueryKey,\n fetchWalletPortfolioPnls,\n useWalletPortfolioPnlsQuery,\n};\n","import {\n useInfiniteQuery,\n type InfiniteData,\n type UseInfiniteQueryOptions,\n type UseInfiniteQueryResult,\n} from \"@tanstack/react-query\";\nimport { API } 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: API.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","import { Chain, WalletPortfolioPnls } 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}\n\nconst {\n queryKey: walletPortfolioPnlsInfiniteQueryKey,\n useInfiniteQuery: useWalletPortfolioPnlsInfiniteQuery,\n} = createInfiniteQueryHook<\n UseWalletPortfolioPnlsInfiniteQueryParams,\n WalletPortfolioPnls\n>({\n name: \"walletPortfolioPnls\",\n queryKey: (p) => [p.chain, p.address, toKeySegment(p.limit)],\n fetch: (client, params, cursor) =>\n client.getWalletPortfolioPnls(params.chain, params.address, {\n cursor,\n limit: params.limit ?? 100,\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 { API, Chain, Trade } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletTradesQuery}. */\nexport interface UseWalletTradesQueryParams extends API.GetTradesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: walletTradesQueryKey,\n fetch: fetchWalletTrades,\n useQuery: useWalletTradesQuery,\n} = createQueryHook<UseWalletTradesQueryParams, API.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 { API, Activity, Chain } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenActivitiesQuery}. */\nexport interface UseTokenActivitiesQueryParams\n extends API.GetActivitiesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenActivitiesQueryKey,\n fetch: fetchTokenActivities,\n useQuery: useTokenActivitiesQuery,\n} = createQueryHook<UseTokenActivitiesQueryParams, API.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 ],\n fetch: (client, { chain, address, ...options }) =>\n client.getTokenActivities(chain, address, options),\n});\n\nexport {\n tokenActivitiesQueryKey,\n fetchTokenActivities,\n useTokenActivitiesQuery,\n};\n","import { API, Activity, Chain } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletActivitiesQuery}. */\nexport interface UseWalletActivitiesQueryParams\n extends API.GetActivitiesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: walletActivitiesQueryKey,\n fetch: fetchWalletActivities,\n useQuery: useWalletActivitiesQuery,\n} = createQueryHook<UseWalletActivitiesQueryParams, API.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 ],\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 { API } 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) => API.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: API.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 { API, Chain } 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<API.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 { 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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API } from \"@liberfi.io/types\";\nimport {\n DEFAULT_QUERY_KEY_PREFIX,\n DexClientContext,\n DexClientContextValue,\n} from \"./DexClientContext\";\n\nexport type DexClientProviderProps = PropsWithChildren<{\n client: API.IClient;\n subscribeClient: API.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/version.ts","../src/DexClientContext.ts","../src/hooks/useDexClient.ts","../src/hooks/queryKeyUtils.ts","../src/hooks/createQueryHook.ts","../src/hooks/useFinalStretchTokensQuery.ts","../src/hooks/useMigratedTokensQuery.ts","../src/hooks/useNewTokensQuery.ts","../src/hooks/usePresignedUploadUrlQuery.ts","../src/hooks/useSearchTokensQuery.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/useTokenStatsQuery.ts","../src/hooks/useTokenTradesQuery.ts","../src/hooks/useTrendingTokensQuery.ts","../src/hooks/useTxSuccessQuery.ts","../src/hooks/useWalletPnlQuery.ts","../src/hooks/useWalletPortfolioPnlsQuery.ts","../src/hooks/createInfiniteQueryHook.ts","../src/hooks/useWalletPortfolioPnlsInfiniteQuery.ts","../src/hooks/useWalletPortfoliosQuery.ts","../src/hooks/useWalletPortfoliosByTokensQuery.ts","../src/hooks/useWalletPortfoliosInfiniteQuery.ts","../src/hooks/useWalletPortfolioPnlsByTokensQuery.ts","../src/hooks/useWalletTradesQuery.ts","../src/hooks/useTokenActivitiesQuery.ts","../src/hooks/useWalletActivitiesQuery.ts","../src/hooks/useSubscriptionEffect.ts","../src/hooks/useTokenSubscription.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/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","toKeySegment","value","toSortedKeySegment","createQueryHook","config","buildQueryKey","params","prefix","fetchFn","client","useCreatedQuery","options","queryKeyPrefix","useQuery","finalStretchTokensQueryKey","fetchFinalStretchTokens","useFinalStretchTokensQuery","p","chain","migratedTokensQueryKey","fetchMigratedTokens","useMigratedTokensQuery","newTokensQueryKey","fetchNewTokens","useNewTokensQuery","presignedUploadUrlQueryKey","fetchPresignedUploadUrl","usePresignedUploadUrlQuery","searchTokensQueryKey","fetchSearchTokens","useSearchTokensQuery","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","tokenStatsQueryKey","fetchTokenStats","useTokenStatsQuery","tokenTradesQueryKey","fetchTokenTrades","useTokenTradesQuery","trendingTokensQueryKey","fetchTrendingTokens","useTrendingTokensQuery","txSuccessQueryKey","fetchTxSuccess","useTxSuccessQuery","txHash","timeout","walletPnlQueryKey","fetchWalletPnl","useWalletPnlQuery","walletPortfolioPnlsQueryKey","fetchWalletPortfolioPnls","useWalletPortfolioPnlsQuery","cursor","limit","createInfiniteQueryHook","useCreatedInfiniteQuery","useInfiniteQuery","pageParam","lastPage","walletPortfolioPnlsInfiniteQueryKey","useWalletPortfolioPnlsInfiniteQuery","walletPortfoliosQueryKey","fetchWalletPortfolios","useWalletPortfoliosQuery","walletPortfoliosByTokensQueryKey","fetchWalletPortfoliosByTokens","useWalletPortfoliosByTokensQuery","tokenAddresses","walletPortfoliosInfiniteQueryKey","useWalletPortfoliosInfiniteQuery","walletPortfolioPnlsByTokensQueryKey","fetchWalletPortfolioPnlsByTokens","useWalletPortfolioPnlsByTokensQuery","walletTradesQueryKey","fetchWalletTrades","useWalletTradesQuery","tokenActivitiesQueryKey","fetchTokenActivities","useTokenActivitiesQuery","walletActivitiesQueryKey","fetchWalletActivities","useWalletActivitiesQuery","useSubscriptionEffect","subscribe","callback","deps","callbackRef","useRef","onErrorRef","useEffect","subscription","data","err","useTokenSubscription","subscribeClient","cb","useTokenCandlesSubscription","useTokenTradesSubscription","useWalletPnlSubscription","useWalletPortfoliosSubscription","useWalletPortfolioPnlsSubscription","useWalletTradesSubscription","useTokenActivitiesSubscription","useWalletActivitiesSubscription","useNewTokensSubscription","useTrendingTokensSubscription","useMigratedTokensSubscription","useFinalStretchTokensSubscription","useStockTokensSubscription","DexClientProvider","children","useMemo","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["declare global {\n interface Window {\n __LIBERFI_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__LIBERFI_VERSION__ = window.__LIBERFI_VERSION__ || {};\n window.__LIBERFI_VERSION__[\"@liberfi.io/react\"] = \"0.1.11\";\n}\n\nexport default \"0.1.11\";\n","import { createContext } from \"react\";\nimport { API } 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 `API.IClient`. */\n client: API.IClient;\n /** WebSocket subscription client implementing `API.ISubscribeClient`. */\n subscribeClient: API.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","/**\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 {\n useQuery,\n type UseQueryOptions,\n type UseQueryResult,\n} from \"@tanstack/react-query\";\nimport { API } 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: API.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: API.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: API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useFinalStretchTokensQuery}. */\nexport interface UseFinalStretchTokensQueryParams\n extends API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useMigratedTokensQuery}. */\nexport interface UseMigratedTokensQueryParams extends API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useNewTokensQuery}. */\nexport interface UseNewTokensQueryParams extends API.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 { API } 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: API.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 { API } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\nexport type UseSearchTokensQueryParams = API.SearchTokensOptions;\n\nconst {\n queryKey: searchTokensQueryKey,\n fetch: fetchSearchTokens,\n useQuery: useSearchTokensQuery,\n} = createQueryHook<UseSearchTokensQueryParams, API.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 { useMutation, UseMutationOptions } from \"@tanstack/react-query\";\nimport { API } from \"@liberfi.io/types\";\nimport { useDexClient } from \"./useDexClient\";\n\nexport type UseSendTxMutationParams = API.SendTxParams;\n\n/** Sends a transaction via the API client (for use outside React). */\nexport async function sendTx(\n client: API.IClient,\n params: UseSendTxMutationParams,\n) {\n return await client.sendTx(params);\n}\n\n/** Mutation hook that sends a transaction. */\nexport function useSendTxMutation(\n options: Omit<\n UseMutationOptions<API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useStockTokensQuery}. */\nexport interface UseStockTokensQueryParams extends API.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 { API } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\nexport type UseSwapRouteQueryParams = API.SwapParams;\n\nconst {\n queryKey: swapRouteQueryKey,\n fetch: fetchSwapRoute,\n useQuery: useSwapRouteQuery,\n} = createQueryHook<UseSwapRouteQueryParams, API.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 { API, Chain, TokenCandle, TokenResolution } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenCandlesQuery}. */\nexport interface UseTokenCandlesQueryParams extends API.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 { API, Chain, TokenHolder } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenHoldersQuery}. */\nexport interface UseTokenHoldersQueryParams extends API.CursorListOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenHoldersQueryKey,\n fetch: fetchTokenHolders,\n useQuery: useTokenHoldersQuery,\n} = createQueryHook<UseTokenHoldersQueryParams, API.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 ],\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 { 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 { API, Chain, Trade } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenTradesQuery}. */\nexport interface UseTokenTradesQueryParams extends API.GetTradesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenTradesQueryKey,\n fetch: fetchTokenTrades,\n useQuery: useTokenTradesQuery,\n} = createQueryHook<UseTokenTradesQueryParams, API.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 { API, Chain, Token } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment, toSortedKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTrendingTokensQuery}. */\nexport interface UseTrendingTokensQueryParams extends API.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 { Chain, WalletPnl } 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?: string;\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 { Chain, WalletPortfolioPnls } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletPortfolioPnlsQuery}. */\nexport interface UseWalletPortfolioPnlsQueryParams {\n chain: Chain;\n address: string;\n cursor?: string;\n limit?: number;\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 ],\n fetch: (client, { chain, address, cursor, limit }) =>\n client.getWalletPortfolioPnls(chain, address, { cursor, limit }),\n});\n\nexport {\n walletPortfolioPnlsQueryKey,\n fetchWalletPortfolioPnls,\n useWalletPortfolioPnlsQuery,\n};\n","import {\n useInfiniteQuery,\n type InfiniteData,\n type UseInfiniteQueryOptions,\n type UseInfiniteQueryResult,\n} from \"@tanstack/react-query\";\nimport { API } 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: API.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","import { Chain, WalletPortfolioPnls } 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}\n\nconst {\n queryKey: walletPortfolioPnlsInfiniteQueryKey,\n useInfiniteQuery: useWalletPortfolioPnlsInfiniteQuery,\n} = createInfiniteQueryHook<\n UseWalletPortfolioPnlsInfiniteQueryParams,\n WalletPortfolioPnls\n>({\n name: \"walletPortfolioPnls\",\n queryKey: (p) => [p.chain, p.address, toKeySegment(p.limit)],\n fetch: (client, params, cursor) =>\n client.getWalletPortfolioPnls(params.chain, params.address, {\n cursor,\n limit: params.limit ?? 100,\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 { API, Chain, Trade } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletTradesQuery}. */\nexport interface UseWalletTradesQueryParams extends API.GetTradesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: walletTradesQueryKey,\n fetch: fetchWalletTrades,\n useQuery: useWalletTradesQuery,\n} = createQueryHook<UseWalletTradesQueryParams, API.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 { API, Activity, Chain } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useTokenActivitiesQuery}. */\nexport interface UseTokenActivitiesQueryParams\n extends API.GetActivitiesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: tokenActivitiesQueryKey,\n fetch: fetchTokenActivities,\n useQuery: useTokenActivitiesQuery,\n} = createQueryHook<UseTokenActivitiesQueryParams, API.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 ],\n fetch: (client, { chain, address, ...options }) =>\n client.getTokenActivities(chain, address, options),\n});\n\nexport {\n tokenActivitiesQueryKey,\n fetchTokenActivities,\n useTokenActivitiesQuery,\n};\n","import { API, Activity, Chain } from \"@liberfi.io/types\";\nimport { createQueryHook } from \"./createQueryHook\";\nimport { toKeySegment } from \"./queryKeyUtils\";\n\n/** Parameters for {@link useWalletActivitiesQuery}. */\nexport interface UseWalletActivitiesQueryParams\n extends API.GetActivitiesOptions {\n chain: Chain;\n address: string;\n}\n\nconst {\n queryKey: walletActivitiesQueryKey,\n fetch: fetchWalletActivities,\n useQuery: useWalletActivitiesQuery,\n} = createQueryHook<UseWalletActivitiesQueryParams, API.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 ],\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 { API } 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) => API.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: API.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 { API, Chain } 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<API.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 { 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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API, Chain } 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<API.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 { API } from \"@liberfi.io/types\";\nimport {\n DEFAULT_QUERY_KEY_PREFIX,\n DexClientContext,\n DexClientContextValue,\n} from \"./DexClientContext\";\n\nexport type DexClientProviderProps = PropsWithChildren<{\n client: API.IClient;\n subscribeClient: API.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.1.10",
3
+ "version": "0.1.11",
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.1.33"
21
+ "@liberfi.io/types": "0.1.34"
22
22
  },
23
23
  "devDependencies": {
24
24
  "@jest/globals": "^30.0.2",
@@ -35,7 +35,7 @@
35
35
  "ts-jest": "^29.3.4",
36
36
  "tsup": "^8.5.0",
37
37
  "typescript": "^5.9.2",
38
- "tsconfig": "0.1.21"
38
+ "tsconfig": "0.1.22"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "react": ">=18",