timelock-sdk 0.0.2 → 0.0.3

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/package.js CHANGED
@@ -52,7 +52,5 @@ import{createContext as e,useContext as t,useMemo as n}from"react";import{useAcc
52
52
  fullyExercised
53
53
  }
54
54
  }
55
- `,ae=(e,t,n,r)=>e();function oe(e,t=ae){return{GetActiveUserOptions(n,r,i){return t(t=>e.request({document:re,variables:n,requestHeaders:{...r,...t},signal:i}),`GetActiveUserOptions`,`query`,n)},GetClosedUserOptions(n,r,i){return t(t=>e.request({document:ie,variables:n,requestHeaders:{...r,...t},signal:i}),`GetClosedUserOptions`,`query`,n)}}}const N=e(void 0),se=({children:e,marketData:t,envioGraphqlUrl:n})=>{let r=i(),a=j[r],o=M[r];return<N.Provider value={{marketData:t||{},lensAddr:a,uniswapMathLensAddr:o,envioGraphqlUrl:n}}>
56
- {e}
57
- </N.Provider>},ce=()=>{let e=t(N);if(e===void 0)throw Error(`useCurrentMarket must be used within a TimelockMarketProvider`);return e.marketData},le=()=>{let e=t(N);if(e===void 0)throw Error(`useConfig must be used within a TimelockMarketProvider`);return{lensAddr:e.lensAddr,uniswapMathLensAddr:e.uniswapMathLensAddr,envioGraphqlUrl:e.envioGraphqlUrl,graphqlClient:e.envioGraphqlUrl?oe(new l(e.envioGraphqlUrl)):void 0}},P=()=>{let e=a(),t=e?A(e):void 0;return{uniswapLens:e?ne(e):void 0,timelockLens:t}},F=e=>{let{timelockLens:t}=P(),n=a(),r=typeof e==`string`?e:e==null?void 0:e.address,{data:i}=o({address:t==null?void 0:t.address,abi:T,functionName:`getMarketData`,args:r?[r]:void 0,query:{enabled:r!==void 0}});return!i||!r||!n?{}:{...i,address:r}},ue=e=>{let{vault:t}=F(e),n=a(),{data:r}=o({address:t,abi:E,functionName:`lowestTick`}),{writeContractAsync:i,data:l,isPending:u,error:d}=c(),{isLoading:f,isSuccess:p}=s({hash:l}),m=typeof e==`string`?e:e==null?void 0:e.address;return{exerciseOption:async(e,t)=>{if(!n)throw Error(`Wallet not connected`);if(r===void 0||!m)throw Error(`Lowest tick lower not available`);let a=await i({address:m,abi:D,functionName:`exerciseOption`,args:[e,t,0n,r]});return await g(n,{hash:a}),a},hash:l,isPending:u,isConfirming:f,isSuccess:p,error:d,isLoading:u||f}},de={scaled:0n,unscaled:_(0),decimals:18,formatted:`0`},I=(e,t)=>{let n=R(e,t);return{scaled:e,unscaled:n,decimals:t,formatted:H(n)}},fe=(e,t)=>{e=_(e);let n=z(e,t),r=H(e);return{scaled:n,unscaled:e,decimals:t,formatted:r}},L=(e,t,n)=>{let r=B(e,t,n),i=H(r);return{scaled:e,unscaled:r,decimals:36+n-t,formatted:i}},pe=(e,t,n)=>{e=_(e);let r=V(e,t,n),i=H(e);return{scaled:r,unscaled:e,decimals:36+n-t,formatted:i}},R=(e,t)=>new _(e.toString()).div(new _(10).pow(t)),z=(e,t)=>BigInt(_(e).mul(new _(10).pow(t)).round().toFixed(0)),B=(e,t,n,r=18)=>new _(e.toString()).mul(new _(10).pow(t)).div(new _(10).pow(n)).div(new _(10).pow(r)),V=(e,t,n,r=18)=>BigInt(_(e).mul(new _(10).pow(r)).mul(new _(10).pow(n)).div(new _(10).pow(t)).round().toFixed(0)),H=e=>e===void 0?`-`:U(_(e).toFixed(100)),me=e=>(e=Number(e),e>=0xe8d4a51000?`${(e/0xe8d4a51000).toFixed(2)}T`:e>=1e9?`${(e/1e9).toFixed(2)}B`:e>=1e6?`${(e/1e6).toFixed(2)}M`:e>=1e3?`${(e/1e3).toFixed(2)}K`:e<1?e.toPrecision(2):e.toFixed(2)),U=(e,t=2)=>{let[n,r]=(typeof e==`number`?e.toFixed(20):e).replace(/(\.\d*?)0+$/,`$1`).replace(/\.$/,``).split(`.`),i=n.replace(/\B(?=(\d{3})+(?!\d))/g,`,`);if(!r)return i;let a=r.match(/^(0{3,})/);if(a){let e=a[1].length;return`${i}.0${he(e.toString())}${r.slice(e).slice(0,t)}`}else{let e=r.search(/[1-9]/);if(e===-1)return i;let n=r.slice(e).slice(0,t);return`${i}.${r.slice(0,e)}${n}`}},he=e=>e.replace(/[0-9]/g,e=>`₀₁₂₃₄₅₆₇₈₉`[+e]),ge=e=>`$`+H(e),_e=(e,t,r=100)=>{let{timelockLens:i}=P(),{optionAssetDecimals:a}=F(e),s=typeof e==`string`?e:e==null?void 0:e.address,{data:c,refetch:l}=o({address:i==null?void 0:i.address,abi:T,functionName:`getMaxPositionSizeAtCurrentTick`,args:[s,r],query:{enabled:!!s&&!!i},gas:100000000n}),{data:u,refetch:d}=o({address:i==null?void 0:i.address,abi:T,functionName:`getMaxPositionSize`,args:[s,t,r],query:{enabled:!!s&&!!i&&t!==void 0},gas:100000000n}),f=t===void 0?c:u,{maxCallSize:p,maxPutSize:m}=n(()=>f&&a?{maxCallSize:I(f[0],a),maxPutSize:I(f[1],a)}:{},[f,a]);return{maxCallSize:p,maxPutSize:m,refetch:()=>{l(),d()}}},W=async e=>{let[t,{1:n}]=await Promise.all([e.read.tickSpacing(),e.read.slot0()]);return{exact:n,rounded:Math.floor(n/t)*t}},G=e=>{let t=a(),{data:n}=v({queryKey:[`currentTick`,typeof e==`string`?e:(e==null?void 0:e.address)||`-`],queryFn:()=>W(typeof e==`string`?te(e,t):e),enabled:!!e&&!!t,refetchInterval:5e3});return n||{}},K=e=>{let t=typeof e==`string`?e:e==null?void 0:e.address,{timelockLens:n}=P(),r=a(),{data:i}=o({address:n==null?void 0:n.address,abi:T,functionName:`getPoolData`,args:t?[t]:void 0,query:{enabled:!!t&&!!r}});return i||{}},q=BigInt(0xde0b6b3a7640000),J=e=>{let t=BigInt(b.getSqrtRatioAtTick(e).toString());return t*t*q/BigInt(2**192)},ve=e=>{let t=e*BigInt(2**192)/q,n=x.BigInt(new _(t.toString()).sqrt().toFixed(0));return b.getTickAtSqrtRatio(n)},Y=(e,t)=>{let n=e%t;return n>=0?e-n:e-n-t},ye=(e,t)=>{let n=e%t;return n===0?e:n>0?e-n+t:e-n},X=(e,t)=>e*J(t)/q,Z=(e,t)=>{let n=J(t);return e*q/n},be=(e,t,n)=>{let r=BigInt(0);for(let i=0;i<e.length;i++){let a=e[i];if(a===BigInt(0))continue;let o=t+n*i,s=o+n,c=b.getSqrtRatioAtTick(o),l=b.getSqrtRatioAtTick(s),u=x.BigInt(a.toString()),d=y.getAmount0Delta(c,l,u,!1);r+=BigInt(d.toString())}return r},xe=(e,t,n)=>{let r=BigInt(0);for(let i=0;i<e.length;i++){let a=e[i];if(a===BigInt(0))continue;let o=t+n*i,s=o+n,c=b.getSqrtRatioAtTick(o),l=b.getSqrtRatioAtTick(s),u=x.BigInt(a.toString()),d=y.getAmount1Delta(c,l,u,!1);r+=BigInt(d.toString())}return r},Se=(e,t,n,r)=>{let i=0n,a=0n,o=b.getSqrtRatioAtTick(n);for(let s=0;s<e.length;s++){let c=e[s];if(c===BigInt(0))continue;let l=t+r*s,u=l+r,d=b.getSqrtRatioAtTick(l),f=b.getSqrtRatioAtTick(u),p=x.BigInt(c.toString());if(n<l){let e=y.getAmount0Delta(d,f,p,!1);i+=BigInt(e.toString())}else if(n>=u){let e=y.getAmount1Delta(d,f,p,!1);a+=BigInt(e.toString())}else{let e=y.getAmount0Delta(o,f,p,!1),t=y.getAmount1Delta(d,o,p,!1);i+=BigInt(e.toString()),a+=BigInt(t.toString())}}return[i,a]},Ce=e=>{let{timelockLens:t}=P(),{payoutAsset:n,vault:i,pool:o,optionAssetIsToken0:l}=F(e),{tickSpacing:u}=K(o),{exact:f}=G(o),m=a(),{address:h}=r(),{writeContractAsync:_,data:v,isPending:y,error:b}=c(),{isLoading:x,isSuccess:S}=s({hash:v}),C=typeof e==`string`?e:e==null?void 0:e.address,w=async e=>{if(!m||!h)throw Error(`Wallet not connected`);if(!n||!C)throw Error(`Tokens not available`);await O(n,m).read.allowance([h,C])<e&&await g(m,{hash:await _({address:n,abi:d,functionName:`approve`,args:[C,p]})})};return{mintOption:async(e,n,r,a)=>{if(!m)throw Error(`Wallet not connected`);if(!t||!i||!C||!f||!u)throw Error(`Lowest tick lower not available`);a=a??f,a=e===`CALL`&&l||e===`PUT`&&!l?ye(a,u):Y(a,u),await w(await k(C,m).read.calculatePremium([e===`CALL`?0:1,n,a,BigInt(r)]));let o=await _({address:C,abi:D,functionName:`mintOption`,args:[e===`CALL`?0:1,n,a,BigInt(r),BigInt(1e69),await t.read.getRefTick([i,a])]});return await g(m,{hash:o}),o},hash:v,isPending:y,isConfirming:x,isSuccess:S,error:b,isLoading:y||x}},we=(e,t,n,r,i,a)=>{let o=n-(i===`CALL`?0:r*e.length),s=be(e,o,r),c=xe(e,o,r);return i===`CALL`?a?s:c:a?Z(c,t):X(s,t)},Te=(e,t)=>{let n=J(e);return t?n:q/n},Ee=e=>{let{marketAddr:t,optionType:r,liquiditiesAtOpen:i,liquiditiesCurrent:a,strikeTick:o,entryTick:s}=e,{pool:c,optionAssetIsToken0:l,optionAssetDecimals:u,payoutAssetDecimals:d}=F(t),{tickSpacing:f}=K(c),{exact:p}=G(c),{strikePrice:m,entryPrice:h}=n(()=>{if(l===void 0||!u||!d)return{};let e=L(Te(s,l),u,d);return{strikePrice:L(Te(o,l),u,d),entryPrice:e}},[e,l,u,d]),{positionSizeAtOpen:g,positionSizeCurrent:_}=n(()=>l===void 0||!f||!u||!d?{}:{positionSizeAtOpen:I(we(i,s,o,f,r,l),u),positionSizeCurrent:I(we(a,s,o,f,r,l),u)},[e,l,f,u,d]),{displayPnl:v,unrealizedPayout:y}=n(()=>{if(l===void 0||p===void 0||!_||!d)return{};let e=_.scaled,t=l?X(e,p)-X(e,s):Z(e,p)-Z(e,s),n=I(r===`CALL`?t:-t,d);return{unrealizedPayout:I(n.scaled<0?0n:n.scaled,d),displayPnl:n}},[e,l,p,_]);return{positionSizeCurrent:_,positionSizeAtOpen:g,displayPnl:v,unrealizedPayout:y,strikePrice:m,entryPrice:h}},De=(e,t,r,i)=>{let{pool:a}=F(e),s=G(a),{tickSpacing:c}=K(a),{payoutAssetDecimals:l}=F(e),u=typeof e==`string`?e:e==null?void 0:e.address,d=n(()=>{if(!(s.rounded===void 0||c===void 0))return t===`CALL`?s.rounded+c:s.rounded},[s.rounded,c,t]),{data:f}=o({address:u,abi:D,functionName:`calculatePremium`,args:d===void 0?void 0:[t===`CALL`?0:1,r,d,BigInt(i)],query:{enabled:s.rounded!==void 0&&l!==void 0&&c!==void 0&&d!==void 0}});return n(()=>{if(!(f===void 0||l===void 0))return I(f,l)},[f,l])},Oe=(e,t=!1)=>{let{graphqlClient:r}=le(),{data:i,...a}=v({queryKey:[`userTrades`,e||`--`,t],queryFn:()=>t?r==null?void 0:r.GetActiveUserOptions({user:e.toLowerCase()}):r==null?void 0:r.GetClosedUserOptions({user:e.toLowerCase()}),select:e=>{var t;return e==null||(t=e.UserOption)==null?void 0:t.map(e=>({...e,id:BigInt(e.id),marketAddr:e.marketAddr,optionType:e.optionType,createdAt:new Date(Number(e.createdAt)*1e3),expiresAt:new Date(Number(e.expiresAt)*1e3),premiumPaid:BigInt(e.premiumPaid),realizedPayout:BigInt(e.realizedPayout),liquiditiesAtOpen:e.liquiditiesAtOpen.map(e=>BigInt(e)),liquiditiesCurrent:e.liquiditiesCurrent.map(e=>BigInt(e))}))},enabled:!!e&&!!r});return{data:n(()=>(i==null?void 0:i.sort((e,t)=>t.createdAt.getTime()-e.createdAt.getTime()))||[],[i]),...a}},ke=e=>Oe(e,!0),Ae=e=>Oe(e,!1),je=(e,t)=>{let{token0Decimals:r,token1Decimals:i}=K(t);return n(()=>e&&r&&i?L(J(e),r,i):void 0,[e,r,i])},Me=e=>{let t=G(e);return{currentPrice:je(t.exact,e),currentTick:t}},Q=e=>{let{data:t}=o({address:typeof e==`string`?e:e==null?void 0:e.address,abi:E,functionName:`pool`});return{pool:t}},Ne=e=>{let t=a(),{pool:n}=Q(e),r=G(n),{timelockLens:i}=P(),o=typeof e==`string`?e:e==null?void 0:e.address,{writeContractAsync:l,data:d,isPending:f,error:p}=c(),{isLoading:m,isSuccess:h}=s({hash:d}),_=async(e,n,r)=>{if(!t)throw Error(`Wallet not connected`);if(!o||!i)throw Error(`Vault/lens not available`);let a=await l({address:o,abi:E,functionName:`burn`,args:[e,n,r,await i.read.getRefTick([o,e])]});return await g(t,{hash:a}),a};return{burnMultiple:async e=>{if(!t)throw Error(`Wallet not connected`);if(!r.exact)throw Error(`Current tick not available`);if(e.length===0)throw Error(`No positions to burn`);if(!i||!o)throw Error(`Vault/lens not available`);if(e.length===1)await _(e[0].tickLower,e[0].tickUpper,e[0].liquidity);else{let n=await i.read.batchGetRefTick([o,e.map(e=>e.tickLower)]);await g(t,{hash:await l({address:o,abi:E,functionName:`multicall`,args:[e.map((e,t)=>u({abi:E,functionName:`burn`,args:[e.tickLower,e.tickUpper,e.liquidity,n[t]]}))]})})}},burn:_,hash:d,isPending:f,isConfirming:m,isSuccess:h,error:p,isLoading:f||m}},Pe=e=>{let{timelockLens:t}=P(),{pool:r}=Q(e),{token0Decimals:i,token1Decimals:a}=K(r),{currentPrice:o}=Me(r),s=typeof e==`string`?e:e==null?void 0:e.address,{data:c=[],refetch:l}=v({queryKey:[`liquidityBlocks`,s],queryFn:()=>t.read.getAllBlocks([s]),enabled:!!s&&!!t}),{totalAmount0:u,totalAmount1:d,borrowedAmount0:f,borrowedAmount1:p}=n(()=>({totalAmount0:i?I(c.reduce((e,t)=>e+t.totalAmount0,0n),i):void 0,totalAmount1:a?I(c.reduce((e,t)=>e+t.totalAmount1,0n),a):void 0,borrowedAmount0:i?I(c.reduce((e,t)=>e+t.borrowedAmount0,0n),i):void 0,borrowedAmount1:a?I(c.reduce((e,t)=>e+t.borrowedAmount1,0n),a):void 0}),[c,i,a]);return{tvl1:n(()=>{if(!u||!d||!o||!a)return;let e=u.scaled*o.scaled/10n**18n,t=d.scaled;return I(e+t,a)},[u,d,o,a]),blocks:c,totalAmount0:u,totalAmount1:d,borrowedAmount0:f,borrowedAmount1:p,refetch:l}},$=async(e,t,n,r,i)=>{let a=Array(t.length).fill(i),o=await e.read.batchGetAmountsForLiquidityTicks([a,t,n,r]),s=0n,c=0n,l=[],u=[];for(let e of o[0])s+=e,l.push(e);for(let e of o[1])c+=e,u.push(e);return{totalAmount0:s,totalAmount1:c,amounts0:l,amounts1:u}},Fe=e=>{let t=a(),{address:n}=r(),{pool:i}=Q(e),{timelockLens:o,uniswapLens:l}=P(),f=G(i),{token0:m,token1:h}=K(i),_=typeof e==`string`?e:e==null?void 0:e.address,{writeContractAsync:v,data:y,isPending:b,error:x}=c(),{isLoading:S,isSuccess:C}=s({hash:y}),w=async e=>{if(!n||!t)throw Error(`Wallet not connected`);if(f.exact===void 0||!m||!h||!_||!l)throw Error(`Current tick not available`);let{totalAmount0:r,totalAmount1:i}=await $(l,e.map(e=>e.tickLower),e.map(e=>e.tickUpper),e.map(e=>e.liquidity),f.exact),[a,o]=await Promise.all([O(m,t).read.allowance([n,_]),O(h,t).read.allowance([n,_])]),s=[];if(a<=r){let e=await v({address:m,abi:d,functionName:`approve`,args:[_,p]});s.push(g(t,{hash:e}))}if(o<=i){let e=await v({address:h,abi:d,functionName:`approve`,args:[_,p]});s.push(g(t,{hash:e}))}s.length>0&&await Promise.all(s)},T=async(e,n,r)=>{if(!t)throw Error(`Wallet not connected`);if(!_||!o)throw Error(`Vault/lens not available`);await w([{tickLower:e,tickUpper:n,liquidity:r}]);let i=await v({address:_,abi:E,functionName:`mint`,args:[e,n,r,await o.read.getRefTick([_,e])]});return await g(t,{hash:i}),i};return{mintMultiple:async e=>{if(!t)throw Error(`Wallet not connected`);if(!f.exact)throw Error(`Current tick not available`);if(e.length===0)throw Error(`No positions to mint`);if(!o||!_)throw Error(`Vault/lens not available`);if(e.length===1)await T(e[0].tickLower,e[0].tickUpper,e[0].liquidity);else{await w(e);let n=await o.read.batchGetRefTick([_,e.map(e=>e.tickLower)]);await g(t,{hash:await v({address:_,abi:E,functionName:`multicall`,args:[e.map((e,t)=>u({abi:E,functionName:`mint`,args:[e.tickLower,e.tickUpper,e.liquidity,n[t]]}))]})})}},mint:T,hash:y,isPending:b,isConfirming:S,isSuccess:C,error:x,isLoading:b||S}},Ie=e=>{let{timelockLens:t}=P(),{pool:n}=Q(e),{token0Decimals:r,token1Decimals:i}=K(n),a=typeof e==`string`?e:e==null?void 0:e.address,{data:s,refetch:c}=o({address:t==null?void 0:t.address,abi:T,functionName:`getVaultTVL`,args:[a],query:{enabled:!!a&&!!t}}),l=s&&r?I(s[0],r):void 0,u=s&&i?I(s[1],i):void 0,d=s&&r?I(s[2],r):void 0,f=s&&i?I(s[3],i):void 0;return{tvl0:s&&r?I(s[4],r):void 0,tvl1:s&&i?I(s[5],i):void 0,totalAmount0:l,totalAmount1:u,borrowedAmount0:d,borrowedAmount1:f,refetch:c}};export{q as PRICE_PRECISION,se as TimelockMarketProvider,$ as batchGetAmountsFromLiquidity,S as erc20Abi,H as formatAmount,U as formatCondensed,ge as formatUSD,me as formatVagueAmount,W as getCurrentTick,O as getErc20,J as getPriceAtTick,ve as getTickAtPrice,A as getTimelockLens,k as getTimelockMarket,ee as getTimelockVault,ne as getUniswapMathLens,te as getUniswapPool,T as lensAbi,be as liquiditiesToAmount0,xe as liquiditiesToAmount1,Se as liquiditiesToAmounts,D as optionsMarketAbi,Y as roundTickDown,ye as roundTickUp,z as scaleAmount,V as scalePrice,E as singleOwnerVaultAbi,j as timelockLenses,X as token0ToToken1,Z as token1ToToken0,w as uniswapMathLensAbi,M as uniswapMathLenses,C as uniswapV3PoolAbi,R as unscaleAmount,B as unscalePrice,ke as useActiveUserOptions,Ne as useBurnLiquidity,Ae as useClosedUserOptions,ce as useCurrentMarket,Me as useCurrentPrice,G as useCurrentTick,ue as useExerciseOption,P as useLens,Pe as useLiquidityBlocks,F as useMarketData,_e as useMaxPositionSize,Fe as useMintLiquidity,Ce as useMintOption,Ee as useOptionLiquidityData,De as useOptionPremium,K as usePoolData,je as usePriceAtTick,le as useTimelockConfig,Q as useVaultData,Ie as useVaultTVL,I as wrapAmount,fe as wrapAmountUnscaled,L as wrapPrice,pe as wrapPriceUnscaled,de as zero};
55
+ `,ae=(e,t,n,r)=>e();function oe(e,t=ae){return{GetActiveUserOptions(n,r,i){return t(t=>e.request({document:re,variables:n,requestHeaders:{...r,...t},signal:i}),`GetActiveUserOptions`,`query`,n)},GetClosedUserOptions(n,r,i){return t(t=>e.request({document:ie,variables:n,requestHeaders:{...r,...t},signal:i}),`GetClosedUserOptions`,`query`,n)}}}const N=e(void 0),se=({children:e,marketData:t,envioGraphqlUrl:n})=>{let r=i(),a=j[r],o=M[r];return React.createElement(N.Provider,{value:{marketData:t||{},lensAddr:a,uniswapMathLensAddr:o,envioGraphqlUrl:n}},e)},ce=()=>{let e=t(N);if(e===void 0)throw Error(`useCurrentMarket must be used within a TimelockMarketProvider`);return e.marketData},le=()=>{let e=t(N);if(e===void 0)throw Error(`useConfig must be used within a TimelockMarketProvider`);return{lensAddr:e.lensAddr,uniswapMathLensAddr:e.uniswapMathLensAddr,envioGraphqlUrl:e.envioGraphqlUrl,graphqlClient:e.envioGraphqlUrl?oe(new l(e.envioGraphqlUrl)):void 0}},P=()=>{let e=a(),t=e?A(e):void 0;return{uniswapLens:e?ne(e):void 0,timelockLens:t}},F=e=>{let{timelockLens:t}=P(),n=a(),r=typeof e==`string`?e:e==null?void 0:e.address,{data:i}=o({address:t==null?void 0:t.address,abi:T,functionName:`getMarketData`,args:r?[r]:void 0,query:{enabled:r!==void 0}});return!i||!r||!n?{}:{...i,address:r}},ue=e=>{let{vault:t}=F(e),n=a(),{data:r}=o({address:t,abi:E,functionName:`lowestTick`}),{writeContractAsync:i,data:l,isPending:u,error:d}=c(),{isLoading:f,isSuccess:p}=s({hash:l}),m=typeof e==`string`?e:e==null?void 0:e.address;return{exerciseOption:async(e,t)=>{if(!n)throw Error(`Wallet not connected`);if(r===void 0||!m)throw Error(`Lowest tick lower not available`);let a=await i({address:m,abi:D,functionName:`exerciseOption`,args:[e,t,0n,r]});return await g(n,{hash:a}),a},hash:l,isPending:u,isConfirming:f,isSuccess:p,error:d,isLoading:u||f}},de={scaled:0n,unscaled:_(0),decimals:18,formatted:`0`},I=(e,t)=>{let n=R(e,t);return{scaled:e,unscaled:n,decimals:t,formatted:H(n)}},fe=(e,t)=>{e=_(e);let n=z(e,t),r=H(e);return{scaled:n,unscaled:e,decimals:t,formatted:r}},L=(e,t,n)=>{let r=B(e,t,n),i=H(r);return{scaled:e,unscaled:r,decimals:36+n-t,formatted:i}},pe=(e,t,n)=>{e=_(e);let r=V(e,t,n),i=H(e);return{scaled:r,unscaled:e,decimals:36+n-t,formatted:i}},R=(e,t)=>new _(e.toString()).div(new _(10).pow(t)),z=(e,t)=>BigInt(_(e).mul(new _(10).pow(t)).round().toFixed(0)),B=(e,t,n,r=18)=>new _(e.toString()).mul(new _(10).pow(t)).div(new _(10).pow(n)).div(new _(10).pow(r)),V=(e,t,n,r=18)=>BigInt(_(e).mul(new _(10).pow(r)).mul(new _(10).pow(n)).div(new _(10).pow(t)).round().toFixed(0)),H=e=>e===void 0?`-`:U(_(e).toFixed(100)),me=e=>(e=Number(e),e>=0xe8d4a51000?`${(e/0xe8d4a51000).toFixed(2)}T`:e>=1e9?`${(e/1e9).toFixed(2)}B`:e>=1e6?`${(e/1e6).toFixed(2)}M`:e>=1e3?`${(e/1e3).toFixed(2)}K`:e<1?e.toPrecision(2):e.toFixed(2)),U=(e,t=2)=>{let[n,r]=(typeof e==`number`?e.toFixed(20):e).replace(/(\.\d*?)0+$/,`$1`).replace(/\.$/,``).split(`.`),i=n.replace(/\B(?=(\d{3})+(?!\d))/g,`,`);if(!r)return i;let a=r.match(/^(0{3,})/);if(a){let e=a[1].length;return`${i}.0${he(e.toString())}${r.slice(e).slice(0,t)}`}else{let e=r.search(/[1-9]/);if(e===-1)return i;let n=r.slice(e).slice(0,t);return`${i}.${r.slice(0,e)}${n}`}},he=e=>e.replace(/[0-9]/g,e=>`₀₁₂₃₄₅₆₇₈₉`[+e]),ge=e=>`$`+H(e),_e=(e,t,r=100)=>{let{timelockLens:i}=P(),{optionAssetDecimals:a}=F(e),s=typeof e==`string`?e:e==null?void 0:e.address,{data:c,refetch:l}=o({address:i==null?void 0:i.address,abi:T,functionName:`getMaxPositionSizeAtCurrentTick`,args:[s,r],query:{enabled:!!s&&!!i},gas:100000000n}),{data:u,refetch:d}=o({address:i==null?void 0:i.address,abi:T,functionName:`getMaxPositionSize`,args:[s,t,r],query:{enabled:!!s&&!!i&&t!==void 0},gas:100000000n}),f=t===void 0?c:u,{maxCallSize:p,maxPutSize:m}=n(()=>f&&a?{maxCallSize:I(f[0],a),maxPutSize:I(f[1],a)}:{},[f,a]);return{maxCallSize:p,maxPutSize:m,refetch:()=>{l(),d()}}},W=async e=>{let[t,{1:n}]=await Promise.all([e.read.tickSpacing(),e.read.slot0()]);return{exact:n,rounded:Math.floor(n/t)*t}},G=e=>{let t=a(),{data:n}=v({queryKey:[`currentTick`,typeof e==`string`?e:(e==null?void 0:e.address)||`-`],queryFn:()=>W(typeof e==`string`?te(e,t):e),enabled:!!e&&!!t,refetchInterval:5e3});return n||{}},K=e=>{let t=typeof e==`string`?e:e==null?void 0:e.address,{timelockLens:n}=P(),r=a(),{data:i}=o({address:n==null?void 0:n.address,abi:T,functionName:`getPoolData`,args:t?[t]:void 0,query:{enabled:!!t&&!!r}});return i||{}},q=BigInt(0xde0b6b3a7640000),J=e=>{let t=BigInt(b.getSqrtRatioAtTick(e).toString());return t*t*q/BigInt(2**192)},ve=e=>{let t=e*BigInt(2**192)/q,n=x.BigInt(new _(t.toString()).sqrt().toFixed(0));return b.getTickAtSqrtRatio(n)},Y=(e,t)=>{let n=e%t;return n>=0?e-n:e-n-t},ye=(e,t)=>{let n=e%t;return n===0?e:n>0?e-n+t:e-n},X=(e,t)=>e*J(t)/q,Z=(e,t)=>{let n=J(t);return e*q/n},be=(e,t,n)=>{let r=BigInt(0);for(let i=0;i<e.length;i++){let a=e[i];if(a===BigInt(0))continue;let o=t+n*i,s=o+n,c=b.getSqrtRatioAtTick(o),l=b.getSqrtRatioAtTick(s),u=x.BigInt(a.toString()),d=y.getAmount0Delta(c,l,u,!1);r+=BigInt(d.toString())}return r},xe=(e,t,n)=>{let r=BigInt(0);for(let i=0;i<e.length;i++){let a=e[i];if(a===BigInt(0))continue;let o=t+n*i,s=o+n,c=b.getSqrtRatioAtTick(o),l=b.getSqrtRatioAtTick(s),u=x.BigInt(a.toString()),d=y.getAmount1Delta(c,l,u,!1);r+=BigInt(d.toString())}return r},Se=(e,t,n,r)=>{let i=0n,a=0n,o=b.getSqrtRatioAtTick(n);for(let s=0;s<e.length;s++){let c=e[s];if(c===BigInt(0))continue;let l=t+r*s,u=l+r,d=b.getSqrtRatioAtTick(l),f=b.getSqrtRatioAtTick(u),p=x.BigInt(c.toString());if(n<l){let e=y.getAmount0Delta(d,f,p,!1);i+=BigInt(e.toString())}else if(n>=u){let e=y.getAmount1Delta(d,f,p,!1);a+=BigInt(e.toString())}else{let e=y.getAmount0Delta(o,f,p,!1),t=y.getAmount1Delta(d,o,p,!1);i+=BigInt(e.toString()),a+=BigInt(t.toString())}}return[i,a]},Ce=e=>{let{timelockLens:t}=P(),{payoutAsset:n,vault:i,pool:o,optionAssetIsToken0:l}=F(e),{tickSpacing:u}=K(o),{exact:f}=G(o),m=a(),{address:h}=r(),{writeContractAsync:_,data:v,isPending:y,error:b}=c(),{isLoading:x,isSuccess:S}=s({hash:v}),C=typeof e==`string`?e:e==null?void 0:e.address,w=async e=>{if(!m||!h)throw Error(`Wallet not connected`);if(!n||!C)throw Error(`Tokens not available`);await O(n,m).read.allowance([h,C])<e&&await g(m,{hash:await _({address:n,abi:d,functionName:`approve`,args:[C,p]})})};return{mintOption:async(e,n,r,a)=>{if(!m)throw Error(`Wallet not connected`);if(!t||!i||!C||!f||!u)throw Error(`Lowest tick lower not available`);a=a??f,a=e===`CALL`&&l||e===`PUT`&&!l?ye(a,u):Y(a,u),await w(await k(C,m).read.calculatePremium([e===`CALL`?0:1,n,a,BigInt(r)]));let o=await _({address:C,abi:D,functionName:`mintOption`,args:[e===`CALL`?0:1,n,a,BigInt(r),BigInt(1e69),await t.read.getRefTick([i,a])]});return await g(m,{hash:o}),o},hash:v,isPending:y,isConfirming:x,isSuccess:S,error:b,isLoading:y||x}},we=(e,t,n,r,i,a)=>{let o=n-(i===`CALL`?0:r*e.length),s=be(e,o,r),c=xe(e,o,r);return i===`CALL`?a?s:c:a?Z(c,t):X(s,t)},Te=(e,t)=>{let n=J(e);return t?n:q/n},Ee=e=>{let{marketAddr:t,optionType:r,liquiditiesAtOpen:i,liquiditiesCurrent:a,strikeTick:o,entryTick:s}=e,{pool:c,optionAssetIsToken0:l,optionAssetDecimals:u,payoutAssetDecimals:d}=F(t),{tickSpacing:f}=K(c),{exact:p}=G(c),{strikePrice:m,entryPrice:h}=n(()=>{if(l===void 0||!u||!d)return{};let e=L(Te(s,l),u,d);return{strikePrice:L(Te(o,l),u,d),entryPrice:e}},[e,l,u,d]),{positionSizeAtOpen:g,positionSizeCurrent:_}=n(()=>l===void 0||!f||!u||!d?{}:{positionSizeAtOpen:I(we(i,s,o,f,r,l),u),positionSizeCurrent:I(we(a,s,o,f,r,l),u)},[e,l,f,u,d]),{displayPnl:v,unrealizedPayout:y}=n(()=>{if(l===void 0||p===void 0||!_||!d)return{};let e=_.scaled,t=l?X(e,p)-X(e,s):Z(e,p)-Z(e,s),n=I(r===`CALL`?t:-t,d);return{unrealizedPayout:I(n.scaled<0?0n:n.scaled,d),displayPnl:n}},[e,l,p,_]);return{positionSizeCurrent:_,positionSizeAtOpen:g,displayPnl:v,unrealizedPayout:y,strikePrice:m,entryPrice:h}},De=(e,t,r,i)=>{let{pool:a}=F(e),s=G(a),{tickSpacing:c}=K(a),{payoutAssetDecimals:l}=F(e),u=typeof e==`string`?e:e==null?void 0:e.address,d=n(()=>{if(!(s.rounded===void 0||c===void 0))return t===`CALL`?s.rounded+c:s.rounded},[s.rounded,c,t]),{data:f}=o({address:u,abi:D,functionName:`calculatePremium`,args:d===void 0?void 0:[t===`CALL`?0:1,r,d,BigInt(i)],query:{enabled:s.rounded!==void 0&&l!==void 0&&c!==void 0&&d!==void 0}});return n(()=>{if(!(f===void 0||l===void 0))return I(f,l)},[f,l])},Oe=(e,t=!1)=>{let{graphqlClient:r}=le(),{data:i,...a}=v({queryKey:[`userTrades`,e||`--`,t],queryFn:()=>t?r==null?void 0:r.GetActiveUserOptions({user:e.toLowerCase()}):r==null?void 0:r.GetClosedUserOptions({user:e.toLowerCase()}),select:e=>{var t;return e==null||(t=e.UserOption)==null?void 0:t.map(e=>({...e,id:BigInt(e.id),marketAddr:e.marketAddr,optionType:e.optionType,createdAt:new Date(Number(e.createdAt)*1e3),expiresAt:new Date(Number(e.expiresAt)*1e3),premiumPaid:BigInt(e.premiumPaid),realizedPayout:BigInt(e.realizedPayout),liquiditiesAtOpen:e.liquiditiesAtOpen.map(e=>BigInt(e)),liquiditiesCurrent:e.liquiditiesCurrent.map(e=>BigInt(e))}))},enabled:!!e&&!!r});return{data:n(()=>(i==null?void 0:i.sort((e,t)=>t.createdAt.getTime()-e.createdAt.getTime()))||[],[i]),...a}},ke=e=>Oe(e,!0),Ae=e=>Oe(e,!1),je=(e,t)=>{let{token0Decimals:r,token1Decimals:i}=K(t);return n(()=>e&&r&&i?L(J(e),r,i):void 0,[e,r,i])},Me=e=>{let t=G(e);return{currentPrice:je(t.exact,e),currentTick:t}},Q=e=>{let{data:t}=o({address:typeof e==`string`?e:e==null?void 0:e.address,abi:E,functionName:`pool`});return{pool:t}},Ne=e=>{let t=a(),{pool:n}=Q(e),r=G(n),{timelockLens:i}=P(),o=typeof e==`string`?e:e==null?void 0:e.address,{writeContractAsync:l,data:d,isPending:f,error:p}=c(),{isLoading:m,isSuccess:h}=s({hash:d}),_=async(e,n,r)=>{if(!t)throw Error(`Wallet not connected`);if(!o||!i)throw Error(`Vault/lens not available`);let a=await l({address:o,abi:E,functionName:`burn`,args:[e,n,r,await i.read.getRefTick([o,e])]});return await g(t,{hash:a}),a};return{burnMultiple:async e=>{if(!t)throw Error(`Wallet not connected`);if(!r.exact)throw Error(`Current tick not available`);if(e.length===0)throw Error(`No positions to burn`);if(!i||!o)throw Error(`Vault/lens not available`);if(e.length===1)await _(e[0].tickLower,e[0].tickUpper,e[0].liquidity);else{let n=await i.read.batchGetRefTick([o,e.map(e=>e.tickLower)]);await g(t,{hash:await l({address:o,abi:E,functionName:`multicall`,args:[e.map((e,t)=>u({abi:E,functionName:`burn`,args:[e.tickLower,e.tickUpper,e.liquidity,n[t]]}))]})})}},burn:_,hash:d,isPending:f,isConfirming:m,isSuccess:h,error:p,isLoading:f||m}},Pe=e=>{let{timelockLens:t}=P(),{pool:r}=Q(e),{token0Decimals:i,token1Decimals:a}=K(r),{currentPrice:o}=Me(r),s=typeof e==`string`?e:e==null?void 0:e.address,{data:c=[],refetch:l}=v({queryKey:[`liquidityBlocks`,s],queryFn:()=>t.read.getAllBlocks([s]),enabled:!!s&&!!t}),{totalAmount0:u,totalAmount1:d,borrowedAmount0:f,borrowedAmount1:p}=n(()=>({totalAmount0:i?I(c.reduce((e,t)=>e+t.totalAmount0,0n),i):void 0,totalAmount1:a?I(c.reduce((e,t)=>e+t.totalAmount1,0n),a):void 0,borrowedAmount0:i?I(c.reduce((e,t)=>e+t.borrowedAmount0,0n),i):void 0,borrowedAmount1:a?I(c.reduce((e,t)=>e+t.borrowedAmount1,0n),a):void 0}),[c,i,a]);return{tvl1:n(()=>{if(!u||!d||!o||!a)return;let e=u.scaled*o.scaled/10n**18n,t=d.scaled;return I(e+t,a)},[u,d,o,a]),blocks:c,totalAmount0:u,totalAmount1:d,borrowedAmount0:f,borrowedAmount1:p,refetch:l}},$=async(e,t,n,r,i)=>{let a=Array(t.length).fill(i),o=await e.read.batchGetAmountsForLiquidityTicks([a,t,n,r]),s=0n,c=0n,l=[],u=[];for(let e of o[0])s+=e,l.push(e);for(let e of o[1])c+=e,u.push(e);return{totalAmount0:s,totalAmount1:c,amounts0:l,amounts1:u}},Fe=e=>{let t=a(),{address:n}=r(),{pool:i}=Q(e),{timelockLens:o,uniswapLens:l}=P(),f=G(i),{token0:m,token1:h}=K(i),_=typeof e==`string`?e:e==null?void 0:e.address,{writeContractAsync:v,data:y,isPending:b,error:x}=c(),{isLoading:S,isSuccess:C}=s({hash:y}),w=async e=>{if(!n||!t)throw Error(`Wallet not connected`);if(f.exact===void 0||!m||!h||!_||!l)throw Error(`Current tick not available`);let{totalAmount0:r,totalAmount1:i}=await $(l,e.map(e=>e.tickLower),e.map(e=>e.tickUpper),e.map(e=>e.liquidity),f.exact),[a,o]=await Promise.all([O(m,t).read.allowance([n,_]),O(h,t).read.allowance([n,_])]),s=[];if(a<=r){let e=await v({address:m,abi:d,functionName:`approve`,args:[_,p]});s.push(g(t,{hash:e}))}if(o<=i){let e=await v({address:h,abi:d,functionName:`approve`,args:[_,p]});s.push(g(t,{hash:e}))}s.length>0&&await Promise.all(s)},T=async(e,n,r)=>{if(!t)throw Error(`Wallet not connected`);if(!_||!o)throw Error(`Vault/lens not available`);await w([{tickLower:e,tickUpper:n,liquidity:r}]);let i=await v({address:_,abi:E,functionName:`mint`,args:[e,n,r,await o.read.getRefTick([_,e])]});return await g(t,{hash:i}),i};return{mintMultiple:async e=>{if(!t)throw Error(`Wallet not connected`);if(!f.exact)throw Error(`Current tick not available`);if(e.length===0)throw Error(`No positions to mint`);if(!o||!_)throw Error(`Vault/lens not available`);if(e.length===1)await T(e[0].tickLower,e[0].tickUpper,e[0].liquidity);else{await w(e);let n=await o.read.batchGetRefTick([_,e.map(e=>e.tickLower)]);await g(t,{hash:await v({address:_,abi:E,functionName:`multicall`,args:[e.map((e,t)=>u({abi:E,functionName:`mint`,args:[e.tickLower,e.tickUpper,e.liquidity,n[t]]}))]})})}},mint:T,hash:y,isPending:b,isConfirming:S,isSuccess:C,error:x,isLoading:b||S}},Ie=e=>{let{timelockLens:t}=P(),{pool:n}=Q(e),{token0Decimals:r,token1Decimals:i}=K(n),a=typeof e==`string`?e:e==null?void 0:e.address,{data:s,refetch:c}=o({address:t==null?void 0:t.address,abi:T,functionName:`getVaultTVL`,args:[a],query:{enabled:!!a&&!!t}}),l=s&&r?I(s[0],r):void 0,u=s&&i?I(s[1],i):void 0,d=s&&r?I(s[2],r):void 0,f=s&&i?I(s[3],i):void 0;return{tvl0:s&&r?I(s[4],r):void 0,tvl1:s&&i?I(s[5],i):void 0,totalAmount0:l,totalAmount1:u,borrowedAmount0:d,borrowedAmount1:f,refetch:c}};export{q as PRICE_PRECISION,se as TimelockMarketProvider,$ as batchGetAmountsFromLiquidity,S as erc20Abi,H as formatAmount,U as formatCondensed,ge as formatUSD,me as formatVagueAmount,W as getCurrentTick,O as getErc20,J as getPriceAtTick,ve as getTickAtPrice,A as getTimelockLens,k as getTimelockMarket,ee as getTimelockVault,ne as getUniswapMathLens,te as getUniswapPool,T as lensAbi,be as liquiditiesToAmount0,xe as liquiditiesToAmount1,Se as liquiditiesToAmounts,D as optionsMarketAbi,Y as roundTickDown,ye as roundTickUp,z as scaleAmount,V as scalePrice,E as singleOwnerVaultAbi,j as timelockLenses,X as token0ToToken1,Z as token1ToToken0,w as uniswapMathLensAbi,M as uniswapMathLenses,C as uniswapV3PoolAbi,R as unscaleAmount,B as unscalePrice,ke as useActiveUserOptions,Ne as useBurnLiquidity,Ae as useClosedUserOptions,ce as useCurrentMarket,Me as useCurrentPrice,G as useCurrentTick,ue as useExerciseOption,P as useLens,Pe as useLiquidityBlocks,F as useMarketData,_e as useMaxPositionSize,Fe as useMintLiquidity,Ce as useMintOption,Ee as useOptionLiquidityData,De as useOptionPremium,K as usePoolData,je as usePriceAtTick,le as useTimelockConfig,Q as useVaultData,Ie as useVaultTVL,I as wrapAmount,fe as wrapAmountUnscaled,L as wrapPrice,pe as wrapPriceUnscaled,de as zero};
58
56
  //# sourceMappingURL=package.js.map