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