timelock-sdk 0.0.11 → 0.0.13

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/client.cjs CHANGED
@@ -80,5 +80,5 @@
80
80
  payoutAssetName
81
81
  }
82
82
  }
83
- `,d=(e,t,n,r)=>e();function f(e,t=d){return{GetActiveUserOptions(n,r,i){return t(t=>e.request({document:c,variables:n,requestHeaders:{...r,...t},signal:i}),`GetActiveUserOptions`,`query`,n)},GetClosedUserOptions(n,r,i){return t(t=>e.request({document:l,variables:n,requestHeaders:{...r,...t},signal:i}),`GetClosedUserOptions`,`query`,n)},GetMarketData(n,r,i){return t(t=>e.request({document:u,variables:n,requestHeaders:{...r,...t},signal:i}),`GetMarketData`,`query`,n)}}}const p=(0,n.createContext)(void 0),m=({children:t,marketData:i,envioGraphqlUrl:a})=>{let o=(0,r.useChainId)(),s=e.timelockLenses[o],c=e.uniswapMathLenses[o];return n.default.createElement(p.Provider,{value:{marketData:i||{},lensAddr:s,uniswapMathLensAddr:c,envioGraphqlUrl:a}},t)},h=()=>{let e=(0,n.useContext)(p);if(e===void 0)throw Error(`useCurrentMarket must be used within a TimelockMarketProvider`);return e.marketData},g=()=>{let e=(0,n.useContext)(p);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?f(new i.GraphQLClient(e.envioGraphqlUrl)):void 0}},_=e=>{let{graphqlClient:t}=g(),n=typeof e==`string`?e:e==null?void 0:e.address,{data:r}=(0,s.useQuery)({queryKey:[`marketData`,n||`--`],queryFn:()=>t.GetMarketData({marketAddr:n}),select:e=>({...e.TimelockMarket[0],pool:e.TimelockMarket[0].pool,vault:e.TimelockMarket[0].vault,optionAsset:e.TimelockMarket[0].optionAsset,payoutAsset:e.TimelockMarket[0].payoutAsset,optionsCount:BigInt(e.TimelockMarket[0].optionsCount),tradersCount:BigInt(e.TimelockMarket[0].tradersCount)}),enabled:!!n&&!!t});return r||{}},v=t=>{let{vault:n}=_(t),i=(0,r.useClient)(),{data:a}=(0,r.useReadContract)({address:n,abi:e.singleOwnerVaultAbi,functionName:`lowestTick`}),{writeContractAsync:s,data:c,isPending:l,error:u}=(0,r.useWriteContract)(),{isLoading:d,isSuccess:f}=(0,r.useWaitForTransactionReceipt)({hash:c}),p=typeof t==`string`?t:t==null?void 0:t.address;return{exerciseOption:async(t,n)=>{if(!i)throw Error(`Wallet not connected`);if(a===void 0||!p)throw Error(`Lowest tick lower not available`);let r=await s({address:p,abi:e.optionsMarketAbi,functionName:`exerciseOption`,args:[t,n,0n,a]});return await(0,o.waitForTransactionReceipt)(i,{hash:r}),r},hash:c,isPending:l,isConfirming:d,isSuccess:f,error:u,isLoading:l||d}},y=()=>{let t=(0,r.useClient)(),n=t?e.getTimelockLens(t):void 0;return{uniswapLens:t?e.getUniswapMathLens(t):void 0,timelockLens:n}},b=(t,i,a=100)=>{let{timelockLens:o}=y(),{optionAssetDecimals:s}=_(t),c=typeof t==`string`?t:t==null?void 0:t.address,{data:l,refetch:u}=(0,r.useReadContract)({address:o==null?void 0:o.address,abi:e.lensAbi,functionName:`getMaxPositionSizeAtCurrentTick`,args:[c,a],query:{enabled:!!c&&!!o},gas:100000000n}),{data:d,refetch:f}=(0,r.useReadContract)({address:o==null?void 0:o.address,abi:e.lensAbi,functionName:`getMaxPositionSize`,args:[c,i,a],query:{enabled:!!c&&!!o&&i!==void 0},gas:100000000n}),p=i===void 0?l:d,{maxCallSize:m,maxPutSize:h}=(0,n.useMemo)(()=>p&&s?{maxCallSize:e.wrapAmount(p[0],s),maxPutSize:e.wrapAmount(p[1],s)}:{},[p,s]);return{maxCallSize:m,maxPutSize:h,refetch:()=>{u(),f()}}},x=async e=>{let[t,{1:n}]=await Promise.all([e.read.tickSpacing(),e.read.slot0()]);return{exact:n,rounded:Math.floor(n/t)*t}},S=t=>{let n=(0,r.useClient)(),{data:i}=(0,s.useQuery)({queryKey:[`currentTick`,typeof t==`string`?t:(t==null?void 0:t.address)||`-`],queryFn:()=>x(typeof t==`string`?e.getUniswapPool(t,n):t),enabled:!!t&&!!n,refetchInterval:5e3});return i||{}},C=t=>{let n=typeof t==`string`?t:t==null?void 0:t.address,{timelockLens:i}=y(),a=(0,r.useClient)(),{data:o}=(0,r.useReadContract)({address:i==null?void 0:i.address,abi:e.lensAbi,functionName:`getPoolData`,args:n?[n]:void 0,query:{enabled:!!n&&!!a}});return o||{}},w=n=>{let{timelockLens:i}=y(),{payoutAsset:a,vault:s,pool:c,optionAssetIsToken0:l}=_(n),{tickSpacing:u}=C(c),{exact:d}=S(c),f=(0,r.useClient)(),{address:p}=(0,r.useAccount)(),{writeContractAsync:m,data:h,isPending:g,error:v}=(0,r.useWriteContract)(),{isLoading:b,isSuccess:x}=(0,r.useWaitForTransactionReceipt)({hash:h}),w=typeof n==`string`?n:n==null?void 0:n.address,T=async n=>{if(!f||!p)throw Error(`Wallet not connected`);if(!a||!w)throw Error(`Tokens not available`);await e.getErc20(a,f).read.allowance([p,w])<n&&await(0,o.waitForTransactionReceipt)(f,{hash:await m({address:a,abi:t.erc20Abi,functionName:`approve`,args:[w,t.maxUint256]})})};return{mintOption:async(t,n,r,a)=>{if(!f)throw Error(`Wallet not connected`);if(!i||!s||!w||!d||!u)throw Error(`Lowest tick lower not available`);a=a??d,a=t===`CALL`&&l||t===`PUT`&&!l?e.roundTickUp(a,u):e.roundTickDown(a,u),await T(await e.getTimelockMarket(w,f).read.calculatePremium([t===`CALL`?0:1,n,a,BigInt(r)]));let c=await m({address:w,abi:e.optionsMarketAbi,functionName:`mintOption`,args:[t===`CALL`?0:1,n,a,BigInt(r),BigInt(1e69),await i.read.getRefTick([s,a])]});return await(0,o.waitForTransactionReceipt)(f,{hash:c}),c},hash:h,isPending:g,isConfirming:b,isSuccess:x,error:v,isLoading:g||b}},T=t=>{let{marketAddr:r,optionType:i,entryTick:a,positionSizeCurrent:o}=t,{pool:s,optionAssetIsToken0:c,payoutAssetDecimals:l}=_(r),{exact:u}=S(s),{displayPnl:d,unrealizedPayout:f}=(0,n.useMemo)(()=>{if(c===void 0||u===void 0||!o||!l)return{};let t=c?e.token0ToToken1(o,u)-e.token0ToToken1(o,a):e.token1ToToken0(o,u)-e.token1ToToken0(o,a),n=e.wrapAmount(i===`CALL`?t:-t,l);return{unrealizedPayout:e.wrapAmount(n.scaled<0?0n:n.scaled,l),displayPnl:n}},[t,c,u,o]);return{displayPnl:d,unrealizedPayout:f}},E=(t,i,a,o)=>{let{pool:s,payoutAssetDecimals:c}=_(t),{tickSpacing:l}=C(s),u=S(s),d=typeof t==`string`?t:t==null?void 0:t.address,f=(0,n.useMemo)(()=>{if(!(u.rounded===void 0||l===void 0))return i===`CALL`?u.rounded+l:u.rounded},[u.rounded,l,i]),{data:p}=(0,r.useReadContract)({address:d,abi:e.optionsMarketAbi,functionName:`calculatePremium`,args:f===void 0?void 0:[i===`CALL`?0:1,a,f,BigInt(o)],query:{enabled:u.rounded!==void 0&&c!==void 0&&l!==void 0&&f!==void 0}});return(0,n.useMemo)(()=>{if(!(p===void 0||c===void 0))return e.wrapAmount(p,c)},[p,c])},D=(e,t=!1)=>{let{graphqlClient:r}=g(),{data:i,...a}=(0,s.useQuery)({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)),positionSizeAtOpen:BigInt(e.positionSizeAtOpen),positionSizeCurrent:BigInt(e.positionSizeCurrent),strikePrice:BigInt(e.strikePrice),entryPrice:BigInt(e.entryPrice)}))},enabled:!!e&&!!r});return{data:(0,n.useMemo)(()=>(i==null?void 0:i.sort((e,t)=>t.createdAt.getTime()-e.createdAt.getTime()))||[],[i]),...a}},O=e=>D(e,!0),k=e=>D(e,!1),A=(t,r)=>{let{token0Decimals:i,token1Decimals:a}=C(r);return(0,n.useMemo)(()=>t&&i&&a?e.wrapPrice(e.getPriceAtTick(t),i,a):void 0,[t,i,a])},j=e=>{let t=S(e);return{currentPrice:A(t.exact,e),currentTick:t}},M=t=>{let{data:n}=(0,r.useReadContract)({address:typeof t==`string`?t:t==null?void 0:t.address,abi:e.singleOwnerVaultAbi,functionName:`pool`});return{pool:n}},N=n=>{let i=(0,r.useClient)(),{pool:a}=M(n),s=S(a),{timelockLens:c}=y(),l=typeof n==`string`?n:n==null?void 0:n.address,{writeContractAsync:u,data:d,isPending:f,error:p}=(0,r.useWriteContract)(),{isLoading:m,isSuccess:h}=(0,r.useWaitForTransactionReceipt)({hash:d}),g=async(t,n,r)=>{if(!i)throw Error(`Wallet not connected`);if(!l||!c)throw Error(`Vault/lens not available`);let a=await u({address:l,abi:e.singleOwnerVaultAbi,functionName:`burn`,args:[t,n,r,await c.read.getRefTick([l,t])]});return await(0,o.waitForTransactionReceipt)(i,{hash:a}),a};return{burnMultiple:async n=>{if(!i)throw Error(`Wallet not connected`);if(!s.exact)throw Error(`Current tick not available`);if(n.length===0)throw Error(`No positions to burn`);if(!c||!l)throw Error(`Vault/lens not available`);if(n.length===1)await g(n[0].tickLower,n[0].tickUpper,n[0].liquidity);else{let r=await c.read.batchGetRefTick([l,n.map(e=>e.tickLower)]);await(0,o.waitForTransactionReceipt)(i,{hash:await u({address:l,abi:e.singleOwnerVaultAbi,functionName:`multicall`,args:[n.map((n,i)=>(0,t.encodeFunctionData)({abi:e.singleOwnerVaultAbi,functionName:`burn`,args:[n.tickLower,n.tickUpper,n.liquidity,r[i]]}))]})})}},burn:g,hash:d,isPending:f,isConfirming:m,isSuccess:h,error:p,isLoading:f||m}},P=t=>{let{timelockLens:r}=y(),{pool:i}=M(t),{token0Decimals:a,token1Decimals:o}=C(i),{currentPrice:c}=j(i),l=typeof t==`string`?t:t==null?void 0:t.address,{data:u=[],refetch:d}=(0,s.useQuery)({queryKey:[`liquidityBlocks`,l],queryFn:()=>r.read.getAllBlocks([l]),enabled:!!l&&!!r}),{totalAmount0:f,totalAmount1:p,borrowedAmount0:m,borrowedAmount1:h}=(0,n.useMemo)(()=>({totalAmount0:a?e.wrapAmount(u.reduce((e,t)=>e+t.totalAmount0,0n),a):void 0,totalAmount1:o?e.wrapAmount(u.reduce((e,t)=>e+t.totalAmount1,0n),o):void 0,borrowedAmount0:a?e.wrapAmount(u.reduce((e,t)=>e+t.borrowedAmount0,0n),a):void 0,borrowedAmount1:o?e.wrapAmount(u.reduce((e,t)=>e+t.borrowedAmount1,0n),o):void 0}),[u,a,o]);return{tvl1:(0,n.useMemo)(()=>{if(!f||!p||!c||!o)return;let t=f.scaled*c.scaled/10n**18n,n=p.scaled;return e.wrapAmount(t+n,o)},[f,p,c,o]),blocks:u,totalAmount0:f,totalAmount1:p,borrowedAmount0:m,borrowedAmount1:h,refetch:d}},F=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}},I=n=>{let i=(0,r.useClient)(),{address:a}=(0,r.useAccount)(),{pool:s}=M(n),{timelockLens:c,uniswapLens:l}=y(),u=S(s),{token0:d,token1:f}=C(s),p=typeof n==`string`?n:n==null?void 0:n.address,{writeContractAsync:m,data:h,isPending:g,error:_}=(0,r.useWriteContract)(),{isLoading:v,isSuccess:b}=(0,r.useWaitForTransactionReceipt)({hash:h}),x=async n=>{if(!a||!i)throw Error(`Wallet not connected`);if(u.exact===void 0||!d||!f||!p||!l)throw Error(`Current tick not available`);let{totalAmount0:r,totalAmount1:s}=await F(l,n.map(e=>e.tickLower),n.map(e=>e.tickUpper),n.map(e=>e.liquidity),u.exact),[c,h]=await Promise.all([e.getErc20(d,i).read.allowance([a,p]),e.getErc20(f,i).read.allowance([a,p])]),g=[];if(c<=r){let e=await m({address:d,abi:t.erc20Abi,functionName:`approve`,args:[p,t.maxUint256]});g.push((0,o.waitForTransactionReceipt)(i,{hash:e}))}if(h<=s){let e=await m({address:f,abi:t.erc20Abi,functionName:`approve`,args:[p,t.maxUint256]});g.push((0,o.waitForTransactionReceipt)(i,{hash:e}))}g.length>0&&await Promise.all(g)},w=async(t,n,r)=>{if(!i)throw Error(`Wallet not connected`);if(!p||!c)throw Error(`Vault/lens not available`);await x([{tickLower:t,tickUpper:n,liquidity:r}]);let a=await m({address:p,abi:e.singleOwnerVaultAbi,functionName:`mint`,args:[t,n,r,await c.read.getRefTick([p,t])]});return await(0,o.waitForTransactionReceipt)(i,{hash:a}),a};return{mintMultiple:async n=>{if(!i)throw Error(`Wallet not connected`);if(!u.exact)throw Error(`Current tick not available`);if(n.length===0)throw Error(`No positions to mint`);if(!c||!p)throw Error(`Vault/lens not available`);if(n.length===1)await w(n[0].tickLower,n[0].tickUpper,n[0].liquidity);else{await x(n);let r=await c.read.batchGetRefTick([p,n.map(e=>e.tickLower)]);await(0,o.waitForTransactionReceipt)(i,{hash:await m({address:p,abi:e.singleOwnerVaultAbi,functionName:`multicall`,args:[n.map((n,i)=>(0,t.encodeFunctionData)({abi:e.singleOwnerVaultAbi,functionName:`mint`,args:[n.tickLower,n.tickUpper,n.liquidity,r[i]]}))]})})}},mint:w,hash:h,isPending:g,isConfirming:v,isSuccess:b,error:_,isLoading:g||v}},L=t=>{let{timelockLens:n}=y(),{pool:i}=M(t),{token0Decimals:a,token1Decimals:o}=C(i),s=typeof t==`string`?t:t==null?void 0:t.address,{data:c,refetch:l}=(0,r.useReadContract)({address:n==null?void 0:n.address,abi:e.lensAbi,functionName:`getVaultTVL`,args:[s],query:{enabled:!!s&&!!n}}),u=c&&a?e.wrapAmount(c[0],a):void 0,d=c&&o?e.wrapAmount(c[1],o):void 0,f=c&&a?e.wrapAmount(c[2],a):void 0,p=c&&o?e.wrapAmount(c[3],o):void 0;return{tvl0:c&&a?e.wrapAmount(c[4],a):void 0,tvl1:c&&o?e.wrapAmount(c[5],o):void 0,totalAmount0:u,totalAmount1:d,borrowedAmount0:f,borrowedAmount1:p,refetch:l}};exports.TimelockMarketProvider=m,exports.batchGetAmountsFromLiquidity=F,exports.getCurrentTick=x,exports.useActiveUserOptions=O,exports.useBurnLiquidity=N,exports.useClosedUserOptions=k,exports.useCurrentMarket=h,exports.useCurrentPrice=j,exports.useCurrentTick=S,exports.useExerciseOption=v,exports.useLens=y,exports.useLiquidityBlocks=P,exports.useMarketData=_,exports.useMaxPositionSize=b,exports.useMintLiquidity=I,exports.useMintOption=w,exports.useOptionPnl=T,exports.useOptionPremium=E,exports.usePoolData=C,exports.usePriceAtTick=A,exports.useTimelockConfig=g,exports.useVaultData=M,exports.useVaultTVL=L;
83
+ `,d=(e,t,n,r)=>e();function f(e,t=d){return{GetActiveUserOptions(n,r,i){return t(t=>e.request({document:c,variables:n,requestHeaders:{...r,...t},signal:i}),`GetActiveUserOptions`,`query`,n)},GetClosedUserOptions(n,r,i){return t(t=>e.request({document:l,variables:n,requestHeaders:{...r,...t},signal:i}),`GetClosedUserOptions`,`query`,n)},GetMarketData(n,r,i){return t(t=>e.request({document:u,variables:n,requestHeaders:{...r,...t},signal:i}),`GetMarketData`,`query`,n)}}}const p=(0,n.createContext)(void 0),m=({children:t,marketData:i,envioGraphqlUrl:a})=>{let o=(0,r.useChainId)(),s=e.timelockLenses[o],c=e.uniswapMathLenses[o];return n.default.createElement(p.Provider,{value:{marketData:i||{},lensAddr:s,uniswapMathLensAddr:c,envioGraphqlUrl:a}},t)},h=()=>{let e=(0,n.useContext)(p);if(e===void 0)throw Error(`useCurrentMarket must be used within a TimelockMarketProvider`);return e.marketData},g=()=>{let e=(0,n.useContext)(p);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?f(new i.GraphQLClient(e.envioGraphqlUrl)):void 0}},_=e=>{let{graphqlClient:t}=g(),n=typeof e==`string`?e:e==null?void 0:e.address,{data:r}=(0,s.useQuery)({queryKey:[`marketData`,n||`--`],queryFn:()=>t.GetMarketData({marketAddr:n.toLowerCase()}),select:e=>({...e.TimelockMarket[0],pool:e.TimelockMarket[0].pool,vault:e.TimelockMarket[0].vault,optionAsset:e.TimelockMarket[0].optionAsset,payoutAsset:e.TimelockMarket[0].payoutAsset,optionsCount:BigInt(e.TimelockMarket[0].optionsCount),tradersCount:BigInt(e.TimelockMarket[0].tradersCount)}),enabled:!!n&&!!t});return r||{}},v=t=>{let{vault:n}=_(t),i=(0,r.useClient)(),{data:a}=(0,r.useReadContract)({address:n,abi:e.singleOwnerVaultAbi,functionName:`lowestTick`}),{writeContractAsync:s,data:c,isPending:l,error:u}=(0,r.useWriteContract)(),{isLoading:d,isSuccess:f}=(0,r.useWaitForTransactionReceipt)({hash:c}),p=typeof t==`string`?t:t==null?void 0:t.address;return{exerciseOption:async(t,n)=>{if(!i)throw Error(`Wallet not connected`);if(a===void 0||!p)throw Error(`Lowest tick lower not available`);let r=await s({address:p,abi:e.optionsMarketAbi,functionName:`exerciseOption`,args:[t,n,0n,a]});return await(0,o.waitForTransactionReceipt)(i,{hash:r}),r},hash:c,isPending:l,isConfirming:d,isSuccess:f,error:u,isLoading:l||d}},y=()=>{let t=(0,r.useClient)(),n=t?e.getTimelockLens(t):void 0;return{uniswapLens:t?e.getUniswapMathLens(t):void 0,timelockLens:n}},b=(t,i,a=100)=>{let{timelockLens:o}=y(),{optionAssetDecimals:s}=_(t),c=typeof t==`string`?t:t==null?void 0:t.address,{data:l,refetch:u}=(0,r.useReadContract)({address:o==null?void 0:o.address,abi:e.lensAbi,functionName:`getMaxPositionSizeAtCurrentTick`,args:[c,a],query:{enabled:!!c&&!!o},gas:100000000n}),{data:d,refetch:f}=(0,r.useReadContract)({address:o==null?void 0:o.address,abi:e.lensAbi,functionName:`getMaxPositionSize`,args:[c,i,a],query:{enabled:!!c&&!!o&&i!==void 0},gas:100000000n}),p=i===void 0?l:d,{maxCallSize:m,maxPutSize:h}=(0,n.useMemo)(()=>p&&s?{maxCallSize:e.wrapAmount(p[0],s),maxPutSize:e.wrapAmount(p[1],s)}:{},[p,s]);return{maxCallSize:m,maxPutSize:h,refetch:()=>{u(),f()}}},x=async e=>{let[t,{1:n}]=await Promise.all([e.read.tickSpacing(),e.read.slot0()]);return{exact:n,rounded:Math.floor(n/t)*t}},S=t=>{let n=(0,r.useClient)(),{data:i}=(0,s.useQuery)({queryKey:[`currentTick`,typeof t==`string`?t:(t==null?void 0:t.address)||`-`],queryFn:()=>x(typeof t==`string`?e.getUniswapPool(t,n):t),enabled:!!t&&!!n,refetchInterval:5e3});return i||{}},C=t=>{let n=typeof t==`string`?t:t==null?void 0:t.address,{timelockLens:i}=y(),a=(0,r.useClient)(),{data:o}=(0,r.useReadContract)({address:i==null?void 0:i.address,abi:e.lensAbi,functionName:`getPoolData`,args:n?[n]:void 0,query:{enabled:!!n&&!!a}});return o||{}},w=n=>{let{timelockLens:i}=y(),{payoutAsset:a,vault:s,pool:c,optionAssetIsToken0:l}=_(n),{tickSpacing:u}=C(c),{exact:d}=S(c),f=(0,r.useClient)(),{address:p}=(0,r.useAccount)(),{writeContractAsync:m,data:h,isPending:g,error:v}=(0,r.useWriteContract)(),{isLoading:b,isSuccess:x}=(0,r.useWaitForTransactionReceipt)({hash:h}),w=typeof n==`string`?n:n==null?void 0:n.address,T=async n=>{if(!f||!p)throw Error(`Wallet not connected`);if(!a||!w)throw Error(`Tokens not available`);await e.getErc20(a,f).read.allowance([p,w])<n&&await(0,o.waitForTransactionReceipt)(f,{hash:await m({address:a,abi:t.erc20Abi,functionName:`approve`,args:[w,t.maxUint256]})})};return{mintOption:async(t,n,r,a)=>{if(!f)throw Error(`Wallet not connected`);if(!i||!s||!w||!d||!u)throw Error(`Lowest tick lower not available`);a=a??d,a=t===`CALL`&&l||t===`PUT`&&!l?e.roundTickUp(a,u):e.roundTickDown(a,u),await T(await e.getTimelockMarket(w,f).read.calculatePremium([t===`CALL`?0:1,n,a,BigInt(r)]));let c=await m({address:w,abi:e.optionsMarketAbi,functionName:`mintOption`,args:[t===`CALL`?0:1,n,a,BigInt(r),BigInt(1e69),await i.read.getRefTick([s,a])]});return await(0,o.waitForTransactionReceipt)(f,{hash:c}),c},hash:h,isPending:g,isConfirming:b,isSuccess:x,error:v,isLoading:g||b}},T=t=>{let{marketAddr:r,optionType:i,entryTick:a,positionSizeCurrent:o}=t,{pool:s,optionAssetIsToken0:c,payoutAssetDecimals:l}=_(r),{exact:u}=S(s),{displayPnl:d,unrealizedPayout:f}=(0,n.useMemo)(()=>{if(c===void 0||u===void 0||!o||!l)return{};let t=c?e.token0ToToken1(o,u)-e.token0ToToken1(o,a):e.token1ToToken0(o,u)-e.token1ToToken0(o,a),n=e.wrapAmount(i===`CALL`?t:-t,l);return{unrealizedPayout:e.wrapAmount(n.scaled<0?0n:n.scaled,l),displayPnl:n}},[t,c,u,o]);return{displayPnl:d,unrealizedPayout:f}},E=(t,i,a,o)=>{let{pool:s,payoutAssetDecimals:c}=_(t),{tickSpacing:l}=C(s),u=S(s),d=typeof t==`string`?t:t==null?void 0:t.address,f=(0,n.useMemo)(()=>{if(!(u.rounded===void 0||l===void 0))return i===`CALL`?u.rounded+l:u.rounded},[u.rounded,l,i]),{data:p}=(0,r.useReadContract)({address:d,abi:e.optionsMarketAbi,functionName:`calculatePremium`,args:f===void 0?void 0:[i===`CALL`?0:1,a,f,BigInt(o)],query:{enabled:u.rounded!==void 0&&c!==void 0&&l!==void 0&&f!==void 0}});return(0,n.useMemo)(()=>{if(!(p===void 0||c===void 0))return e.wrapAmount(p,c)},[p,c])},D=(e,t=!1)=>{let{graphqlClient:r}=g(),{data:i,...a}=(0,s.useQuery)({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)),positionSizeAtOpen:BigInt(e.positionSizeAtOpen),positionSizeCurrent:BigInt(e.positionSizeCurrent),strikePrice:BigInt(e.strikePrice),entryPrice:BigInt(e.entryPrice)}))},enabled:!!e&&!!r});return{data:(0,n.useMemo)(()=>(i==null?void 0:i.sort((e,t)=>t.createdAt.getTime()-e.createdAt.getTime()))||[],[i]),...a}},O=e=>D(e,!0),k=e=>D(e,!1),A=(t,r)=>{let{token0Decimals:i,token1Decimals:a}=C(r);return(0,n.useMemo)(()=>t&&i&&a?e.wrapPrice(e.getPriceAtTick(t),i,a):void 0,[t,i,a])},j=e=>{let t=S(e);return{currentPrice:A(t.exact,e),currentTick:t}},M=t=>{let{data:n}=(0,r.useReadContract)({address:typeof t==`string`?t:t==null?void 0:t.address,abi:e.singleOwnerVaultAbi,functionName:`pool`});return{pool:n}},N=n=>{let i=(0,r.useClient)(),{pool:a}=M(n),s=S(a),{timelockLens:c}=y(),l=typeof n==`string`?n:n==null?void 0:n.address,{writeContractAsync:u,data:d,isPending:f,error:p}=(0,r.useWriteContract)(),{isLoading:m,isSuccess:h}=(0,r.useWaitForTransactionReceipt)({hash:d}),g=async(t,n,r)=>{if(!i)throw Error(`Wallet not connected`);if(!l||!c)throw Error(`Vault/lens not available`);let a=await u({address:l,abi:e.singleOwnerVaultAbi,functionName:`burn`,args:[t,n,r,await c.read.getRefTick([l,t])]});return await(0,o.waitForTransactionReceipt)(i,{hash:a}),a};return{burnMultiple:async n=>{if(!i)throw Error(`Wallet not connected`);if(!s.exact)throw Error(`Current tick not available`);if(n.length===0)throw Error(`No positions to burn`);if(!c||!l)throw Error(`Vault/lens not available`);if(n.length===1)await g(n[0].tickLower,n[0].tickUpper,n[0].liquidity);else{let r=await c.read.batchGetRefTick([l,n.map(e=>e.tickLower)]);await(0,o.waitForTransactionReceipt)(i,{hash:await u({address:l,abi:e.singleOwnerVaultAbi,functionName:`multicall`,args:[n.map((n,i)=>(0,t.encodeFunctionData)({abi:e.singleOwnerVaultAbi,functionName:`burn`,args:[n.tickLower,n.tickUpper,n.liquidity,r[i]]}))]})})}},burn:g,hash:d,isPending:f,isConfirming:m,isSuccess:h,error:p,isLoading:f||m}},P=t=>{let{timelockLens:r}=y(),{pool:i}=M(t),{token0Decimals:a,token1Decimals:o}=C(i),{currentPrice:c}=j(i),l=typeof t==`string`?t:t==null?void 0:t.address,{data:u=[],refetch:d}=(0,s.useQuery)({queryKey:[`liquidityBlocks`,l],queryFn:()=>r.read.getAllBlocks([l]),enabled:!!l&&!!r}),{totalAmount0:f,totalAmount1:p,borrowedAmount0:m,borrowedAmount1:h}=(0,n.useMemo)(()=>({totalAmount0:a?e.wrapAmount(u.reduce((e,t)=>e+t.totalAmount0,0n),a):void 0,totalAmount1:o?e.wrapAmount(u.reduce((e,t)=>e+t.totalAmount1,0n),o):void 0,borrowedAmount0:a?e.wrapAmount(u.reduce((e,t)=>e+t.borrowedAmount0,0n),a):void 0,borrowedAmount1:o?e.wrapAmount(u.reduce((e,t)=>e+t.borrowedAmount1,0n),o):void 0}),[u,a,o]);return{tvl1:(0,n.useMemo)(()=>{if(!f||!p||!c||!o)return;let t=f.scaled*c.scaled/10n**18n,n=p.scaled;return e.wrapAmount(t+n,o)},[f,p,c,o]),blocks:u,totalAmount0:f,totalAmount1:p,borrowedAmount0:m,borrowedAmount1:h,refetch:d}},F=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}},I=n=>{let i=(0,r.useClient)(),{address:a}=(0,r.useAccount)(),{pool:s}=M(n),{timelockLens:c,uniswapLens:l}=y(),u=S(s),{token0:d,token1:f}=C(s),p=typeof n==`string`?n:n==null?void 0:n.address,{writeContractAsync:m,data:h,isPending:g,error:_}=(0,r.useWriteContract)(),{isLoading:v,isSuccess:b}=(0,r.useWaitForTransactionReceipt)({hash:h}),x=async n=>{if(!a||!i)throw Error(`Wallet not connected`);if(u.exact===void 0||!d||!f||!p||!l)throw Error(`Current tick not available`);let{totalAmount0:r,totalAmount1:s}=await F(l,n.map(e=>e.tickLower),n.map(e=>e.tickUpper),n.map(e=>e.liquidity),u.exact),[c,h]=await Promise.all([e.getErc20(d,i).read.allowance([a,p]),e.getErc20(f,i).read.allowance([a,p])]),g=[];if(c<=r){let e=await m({address:d,abi:t.erc20Abi,functionName:`approve`,args:[p,t.maxUint256]});g.push((0,o.waitForTransactionReceipt)(i,{hash:e}))}if(h<=s){let e=await m({address:f,abi:t.erc20Abi,functionName:`approve`,args:[p,t.maxUint256]});g.push((0,o.waitForTransactionReceipt)(i,{hash:e}))}g.length>0&&await Promise.all(g)},w=async(t,n,r)=>{if(!i)throw Error(`Wallet not connected`);if(!p||!c)throw Error(`Vault/lens not available`);await x([{tickLower:t,tickUpper:n,liquidity:r}]);let a=await m({address:p,abi:e.singleOwnerVaultAbi,functionName:`mint`,args:[t,n,r,await c.read.getRefTick([p,t])]});return await(0,o.waitForTransactionReceipt)(i,{hash:a}),a};return{mintMultiple:async n=>{if(!i)throw Error(`Wallet not connected`);if(!u.exact)throw Error(`Current tick not available`);if(n.length===0)throw Error(`No positions to mint`);if(!c||!p)throw Error(`Vault/lens not available`);if(n.length===1)await w(n[0].tickLower,n[0].tickUpper,n[0].liquidity);else{await x(n);let r=await c.read.batchGetRefTick([p,n.map(e=>e.tickLower)]);await(0,o.waitForTransactionReceipt)(i,{hash:await m({address:p,abi:e.singleOwnerVaultAbi,functionName:`multicall`,args:[n.map((n,i)=>(0,t.encodeFunctionData)({abi:e.singleOwnerVaultAbi,functionName:`mint`,args:[n.tickLower,n.tickUpper,n.liquidity,r[i]]}))]})})}},mint:w,hash:h,isPending:g,isConfirming:v,isSuccess:b,error:_,isLoading:g||v}},L=t=>{let{timelockLens:n}=y(),{pool:i}=M(t),{token0Decimals:a,token1Decimals:o}=C(i),s=typeof t==`string`?t:t==null?void 0:t.address,{data:c,refetch:l}=(0,r.useReadContract)({address:n==null?void 0:n.address,abi:e.lensAbi,functionName:`getVaultTVL`,args:[s],query:{enabled:!!s&&!!n}}),u=c&&a?e.wrapAmount(c[0],a):void 0,d=c&&o?e.wrapAmount(c[1],o):void 0,f=c&&a?e.wrapAmount(c[2],a):void 0,p=c&&o?e.wrapAmount(c[3],o):void 0;return{tvl0:c&&a?e.wrapAmount(c[4],a):void 0,tvl1:c&&o?e.wrapAmount(c[5],o):void 0,totalAmount0:u,totalAmount1:d,borrowedAmount0:f,borrowedAmount1:p,refetch:l}};exports.TimelockMarketProvider=m,exports.batchGetAmountsFromLiquidity=F,exports.getCurrentTick=x,exports.useActiveUserOptions=O,exports.useBurnLiquidity=N,exports.useClosedUserOptions=k,exports.useCurrentMarket=h,exports.useCurrentPrice=j,exports.useCurrentTick=S,exports.useExerciseOption=v,exports.useLens=y,exports.useLiquidityBlocks=P,exports.useMarketData=_,exports.useMaxPositionSize=b,exports.useMintLiquidity=I,exports.useMintOption=w,exports.useOptionPnl=T,exports.useOptionPremium=E,exports.usePoolData=C,exports.usePriceAtTick=A,exports.useTimelockConfig=g,exports.useVaultData=M,exports.useVaultTVL=L;
84
84
  //# sourceMappingURL=client.cjs.map