timelock-sdk 0.0.8 → 0.0.10

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
@@ -15,6 +15,8 @@
15
15
  optionType
16
16
  strikeTick
17
17
  entryTick
18
+ strikePrice
19
+ entryPrice
18
20
  expiresAt
19
21
  createdAt
20
22
  premiumPaid
@@ -22,6 +24,8 @@
22
24
  marketAddr
23
25
  liquiditiesAtOpen
24
26
  liquiditiesCurrent
27
+ positionSizeAtOpen
28
+ positionSizeCurrent
25
29
  fullyExercised
26
30
  }
27
31
  }
@@ -42,6 +46,8 @@
42
46
  optionType
43
47
  strikeTick
44
48
  entryTick
49
+ strikePrice
50
+ entryPrice
45
51
  expiresAt
46
52
  createdAt
47
53
  premiumPaid
@@ -49,8 +55,30 @@
49
55
  marketAddr
50
56
  liquiditiesAtOpen
51
57
  liquiditiesCurrent
58
+ positionSizeAtOpen
59
+ positionSizeCurrent
52
60
  fullyExercised
53
61
  }
54
62
  }
55
- `,u=(e,t,n,r)=>e();function d(e,t=u){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)}}}const f=(0,n.createContext)(void 0),p=({children:t,marketData:i,envioGraphqlUrl:a})=>{let o=(0,r.useChainId)(),s=e.timelockLenses[o],c=e.uniswapMathLenses[o];return n.default.createElement(f.Provider,{value:{marketData:i||{},lensAddr:s,uniswapMathLensAddr:c,envioGraphqlUrl:a}},t)},m=()=>{let e=(0,n.useContext)(f);if(e===void 0)throw Error(`useCurrentMarket must be used within a TimelockMarketProvider`);return e.marketData},h=()=>{let e=(0,n.useContext)(f);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?d(new i.GraphQLClient(e.envioGraphqlUrl)):void 0}},g=()=>{let t=(0,r.useClient)(),n=t?e.getTimelockLens(t):void 0;return{uniswapLens:t?e.getUniswapMathLens(t):void 0,timelockLens:n}},_=t=>{let{timelockLens:n}=g(),i=(0,r.useClient)(),a=typeof t==`string`?t:t==null?void 0:t.address,{data:o}=(0,r.useReadContract)({address:n==null?void 0:n.address,abi:e.lensAbi,functionName:`getMarketData`,args:a?[a]:void 0,query:{enabled:a!==void 0}});return!o||!a||!i?{}:{...o,address:a}},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=(t,i,a=100)=>{let{timelockLens:o}=g(),{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()}}},b=async e=>{let[t,{1:n}]=await Promise.all([e.read.tickSpacing(),e.read.slot0()]);return{exact:n,rounded:Math.floor(n/t)*t}},x=t=>{let n=(0,r.useClient)(),{data:i}=(0,s.useQuery)({queryKey:[`currentTick`,typeof t==`string`?t:(t==null?void 0:t.address)||`-`],queryFn:()=>b(typeof t==`string`?e.getUniswapPool(t,n):t),enabled:!!t&&!!n,refetchInterval:5e3});return i||{}},S=t=>{let n=typeof t==`string`?t:t==null?void 0:t.address,{timelockLens:i}=g(),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||{}},C=n=>{let{timelockLens:i}=g(),{payoutAsset:a,vault:s,pool:c,optionAssetIsToken0:l}=_(n),{tickSpacing:u}=S(c),{exact:d}=x(c),f=(0,r.useClient)(),{address:p}=(0,r.useAccount)(),{writeContractAsync:m,data:h,isPending:v,error:y}=(0,r.useWriteContract)(),{isLoading:b,isSuccess:C}=(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:v,isConfirming:b,isSuccess:C,error:y,isLoading:v||b}},w=(t,n,r,i,a,o)=>{let s=r-(a===`CALL`?0:i*t.length),c=e.liquiditiesToAmount0(t,s,i),l=e.liquiditiesToAmount1(t,s,i);return a===`CALL`?o?c:l:o?e.token1ToToken0(l,n):e.token0ToToken1(c,n)},T=(t,n)=>{let r=e.getPriceAtTick(t);return n?r:e.PRICE_PRECISION/r},E=t=>{let{marketAddr:r,optionType:i,liquiditiesAtOpen:a,liquiditiesCurrent:o,strikeTick:s,entryTick:c}=t,{pool:l,optionAssetIsToken0:u,optionAssetDecimals:d,payoutAssetDecimals:f}=_(r),{tickSpacing:p}=S(l),{exact:m}=x(l),{strikePrice:h,entryPrice:g}=(0,n.useMemo)(()=>{if(u===void 0||!d||!f)return{};let t=e.wrapPrice(T(c,u),d,f);return{strikePrice:e.wrapPrice(T(s,u),d,f),entryPrice:t}},[t,u,d,f]),{positionSizeAtOpen:v,positionSizeCurrent:y}=(0,n.useMemo)(()=>u===void 0||!p||!d||!f?{}:{positionSizeAtOpen:e.wrapAmount(w(a,c,s,p,i,u),d),positionSizeCurrent:e.wrapAmount(w(o,c,s,p,i,u),d)},[t,u,p,d,f]),{displayPnl:b,unrealizedPayout:C}=(0,n.useMemo)(()=>{if(u===void 0||m===void 0||!y||!f)return{};let t=y.scaled,n=u?e.token0ToToken1(t,m)-e.token0ToToken1(t,c):e.token1ToToken0(t,m)-e.token1ToToken0(t,c),r=e.wrapAmount(i===`CALL`?n:-n,f);return{unrealizedPayout:e.wrapAmount(r.scaled<0?0n:r.scaled,f),displayPnl:r}},[t,u,m,y]);return{positionSizeCurrent:y,positionSizeAtOpen:v,displayPnl:b,unrealizedPayout:C,strikePrice:h,entryPrice:g}},D=(t,i,a,o)=>{let{pool:s}=_(t),c=x(s),{tickSpacing:l}=S(s),{payoutAssetDecimals:u}=_(t),d=typeof t==`string`?t:t==null?void 0:t.address,f=(0,n.useMemo)(()=>{if(!(c.rounded===void 0||l===void 0))return i===`CALL`?c.rounded+l:c.rounded},[c.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:c.rounded!==void 0&&u!==void 0&&l!==void 0&&f!==void 0}});return(0,n.useMemo)(()=>{if(!(p===void 0||u===void 0))return e.wrapAmount(p,u)},[p,u])},O=(e,t=!1)=>{let{graphqlClient:r}=h(),{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))}))},enabled:!!e&&!!r});return{data:(0,n.useMemo)(()=>(i==null?void 0:i.sort((e,t)=>t.createdAt.getTime()-e.createdAt.getTime()))||[],[i]),...a}},k=e=>O(e,!0),A=e=>O(e,!1),j=(t,r)=>{let{token0Decimals:i,token1Decimals:a}=S(r);return(0,n.useMemo)(()=>t&&i&&a?e.wrapPrice(e.getPriceAtTick(t),i,a):void 0,[t,i,a])},M=e=>{let t=x(e);return{currentPrice:j(t.exact,e),currentTick:t}},N=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}},P=n=>{let i=(0,r.useClient)(),{pool:a}=N(n),s=x(a),{timelockLens:c}=g(),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}),_=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 _(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:_,hash:d,isPending:f,isConfirming:m,isSuccess:h,error:p,isLoading:f||m}},F=t=>{let{timelockLens:r}=g(),{pool:i}=N(t),{token0Decimals:a,token1Decimals:o}=S(i),{currentPrice:c}=M(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}},I=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}},L=n=>{let i=(0,r.useClient)(),{address:a}=(0,r.useAccount)(),{pool:s}=N(n),{timelockLens:c,uniswapLens:l}=g(),u=x(s),{token0:d,token1:f}=S(s),p=typeof n==`string`?n:n==null?void 0:n.address,{writeContractAsync:m,data:h,isPending:_,error:v}=(0,r.useWriteContract)(),{isLoading:y,isSuccess:b}=(0,r.useWaitForTransactionReceipt)({hash:h}),C=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 I(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 C([{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 C(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:_,isConfirming:y,isSuccess:b,error:v,isLoading:_||y}},R=t=>{let{timelockLens:n}=g(),{pool:i}=N(t),{token0Decimals:a,token1Decimals:o}=S(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=p,exports.batchGetAmountsFromLiquidity=I,exports.getCurrentTick=b,exports.useActiveUserOptions=k,exports.useBurnLiquidity=P,exports.useClosedUserOptions=A,exports.useCurrentMarket=m,exports.useCurrentPrice=M,exports.useCurrentTick=x,exports.useExerciseOption=v,exports.useLens=g,exports.useLiquidityBlocks=F,exports.useMarketData=_,exports.useMaxPositionSize=y,exports.useMintLiquidity=L,exports.useMintOption=C,exports.useOptionLiquidityData=E,exports.useOptionPremium=D,exports.usePoolData=S,exports.usePriceAtTick=j,exports.useTimelockConfig=h,exports.useVaultData=N,exports.useVaultTVL=R;
63
+ `,u=a.default`
64
+ query GetMarketData($marketAddr: String!) {
65
+ TimelockMarket(where: {id: {_eq: $marketAddr}}, limit: 1) {
66
+ id
67
+ optionsCount
68
+ tradersCount
69
+ vault
70
+ pool
71
+ tickSpacing
72
+ optionAssetIsToken0
73
+ optionAsset
74
+ payoutAsset
75
+ optionAssetDecimals
76
+ payoutAssetDecimals
77
+ optionAssetSymbol
78
+ payoutAssetSymbol
79
+ optionAssetName
80
+ payoutAssetName
81
+ }
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;
56
84
  //# sourceMappingURL=client.cjs.map