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.js CHANGED
@@ -1,4 +1,4 @@
1
- "use client";import{PRICE_PRECISION as e,getErc20 as t,getPriceAtTick as n,getTimelockLens as r,getTimelockMarket as i,getUniswapMathLens as a,getUniswapPool as o,lensAbi as s,liquiditiesToAmount0 as c,liquiditiesToAmount1 as l,optionsMarketAbi as u,roundTickDown as d,roundTickUp as f,singleOwnerVaultAbi as p,timelockLenses as m,token0ToToken1 as h,token1ToToken0 as g,uniswapMathLenses as _,wrapAmount as v,wrapPrice as y}from"./numberUtils-DB5N1e6G.js";import{encodeFunctionData as b,erc20Abi as x,maxUint256 as S}from"viem";import C,{createContext as w,useContext as T,useMemo as E}from"react";import{useAccount as D,useChainId as ee,useClient as O,useReadContract as k,useWaitForTransactionReceipt as A,useWriteContract as j}from"wagmi";import{GraphQLClient as te}from"graphql-request";import M from"graphql-tag";import{waitForTransactionReceipt as N}from"viem/actions";import{useQuery as P}from"@tanstack/react-query";const F=M`
1
+ "use client";import{getErc20 as e,getPriceAtTick as t,getTimelockLens as n,getTimelockMarket as r,getUniswapMathLens as i,getUniswapPool as a,lensAbi as o,optionsMarketAbi as s,roundTickDown as c,roundTickUp as l,singleOwnerVaultAbi as u,timelockLenses as d,token0ToToken1 as f,token1ToToken0 as p,uniswapMathLenses as m,wrapAmount as h,wrapPrice as g}from"./numberUtils-DB5N1e6G.js";import{encodeFunctionData as _,erc20Abi as v,maxUint256 as y}from"viem";import b,{createContext as x,useContext as S,useMemo as C}from"react";import{useAccount as w,useChainId as T,useClient as E,useReadContract as D,useWaitForTransactionReceipt as O,useWriteContract as k}from"wagmi";import{GraphQLClient as ee}from"graphql-request";import A from"graphql-tag";import{waitForTransactionReceipt as j}from"viem/actions";import{useQuery as M}from"@tanstack/react-query";const N=A`
2
2
  query GetActiveUserOptions($user: String!) {
3
3
  UserOption(
4
4
  where: {ownerAddr: {_eq: $user}, fullyExercised: {_eq: false}}
@@ -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,10 +24,12 @@
22
24
  marketAddr
23
25
  liquiditiesAtOpen
24
26
  liquiditiesCurrent
27
+ positionSizeAtOpen
28
+ positionSizeCurrent
25
29
  fullyExercised
26
30
  }
27
31
  }
28
- `,I=M`
32
+ `,P=A`
29
33
  query GetClosedUserOptions($user: String!) {
30
34
  UserOption(
31
35
  where: {ownerAddr: {_eq: $user}, fullyExercised: {_eq: true}}
@@ -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
- `,L=(e,t,n,r)=>e();function R(e,t=L){return{GetActiveUserOptions(n,r,i){return t(t=>e.request({document:F,variables:n,requestHeaders:{...r,...t},signal:i}),`GetActiveUserOptions`,`query`,n)},GetClosedUserOptions(n,r,i){return t(t=>e.request({document:I,variables:n,requestHeaders:{...r,...t},signal:i}),`GetClosedUserOptions`,`query`,n)}}}const z=w(void 0),B=({children:e,marketData:t,envioGraphqlUrl:n})=>{let r=ee(),i=m[r],a=_[r];return C.createElement(z.Provider,{value:{marketData:t||{},lensAddr:i,uniswapMathLensAddr:a,envioGraphqlUrl:n}},e)},ne=()=>{let e=T(z);if(e===void 0)throw Error(`useCurrentMarket must be used within a TimelockMarketProvider`);return e.marketData},V=()=>{let e=T(z);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?R(new te(e.envioGraphqlUrl)):void 0}},H=()=>{let e=O(),t=e?r(e):void 0;return{uniswapLens:e?a(e):void 0,timelockLens:t}},U=e=>{let{timelockLens:t}=H(),n=O(),r=typeof e==`string`?e:e==null?void 0:e.address,{data:i}=k({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}},re=e=>{let{vault:t}=U(e),n=O(),{data:r}=k({address:t,abi:p,functionName:`lowestTick`}),{writeContractAsync:i,data:a,isPending:o,error:s}=j(),{isLoading:c,isSuccess:l}=A({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:u,functionName:`exerciseOption`,args:[e,t,0n,r]});return await N(n,{hash:a}),a},hash:a,isPending:o,isConfirming:c,isSuccess:l,error:s,isLoading:o||c}},ie=(e,t,n=100)=>{let{timelockLens:r}=H(),{optionAssetDecimals:i}=U(e),a=typeof e==`string`?e:e==null?void 0:e.address,{data:o,refetch:c}=k({address:r==null?void 0:r.address,abi:s,functionName:`getMaxPositionSizeAtCurrentTick`,args:[a,n],query:{enabled:!!a&&!!r},gas:100000000n}),{data:l,refetch:u}=k({address:r==null?void 0:r.address,abi:s,functionName:`getMaxPositionSize`,args:[a,t,n],query:{enabled:!!a&&!!r&&t!==void 0},gas:100000000n}),d=t===void 0?o:l,{maxCallSize:f,maxPutSize:p}=E(()=>d&&i?{maxCallSize:v(d[0],i),maxPutSize:v(d[1],i)}:{},[d,i]);return{maxCallSize:f,maxPutSize:p,refetch:()=>{c(),u()}}},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=O(),{data:n}=P({queryKey:[`currentTick`,typeof e==`string`?e:(e==null?void 0:e.address)||`-`],queryFn:()=>W(typeof e==`string`?o(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}=H(),r=O(),{data:i}=k({address:n==null?void 0:n.address,abi:s,functionName:`getPoolData`,args:t?[t]:void 0,query:{enabled:!!t&&!!r}});return i||{}},ae=e=>{let{timelockLens:n}=H(),{payoutAsset:r,vault:a,pool:o,optionAssetIsToken0:s}=U(e),{tickSpacing:c}=K(o),{exact:l}=G(o),p=O(),{address:m}=D(),{writeContractAsync:h,data:g,isPending:_,error:v}=j(),{isLoading:y,isSuccess:b}=A({hash:g}),C=typeof e==`string`?e:e==null?void 0:e.address,w=async e=>{if(!p||!m)throw Error(`Wallet not connected`);if(!r||!C)throw Error(`Tokens not available`);await t(r,p).read.allowance([m,C])<e&&await N(p,{hash:await h({address:r,abi:x,functionName:`approve`,args:[C,S]})})};return{mintOption:async(e,t,r,o)=>{if(!p)throw Error(`Wallet not connected`);if(!n||!a||!C||!l||!c)throw Error(`Lowest tick lower not available`);o=o??l,o=e===`CALL`&&s||e===`PUT`&&!s?f(o,c):d(o,c),await w(await i(C,p).read.calculatePremium([e===`CALL`?0:1,t,o,BigInt(r)]));let m=await h({address:C,abi:u,functionName:`mintOption`,args:[e===`CALL`?0:1,t,o,BigInt(r),BigInt(1e69),await n.read.getRefTick([a,o])]});return await N(p,{hash:m}),m},hash:g,isPending:_,isConfirming:y,isSuccess:b,error:v,isLoading:_||y}},q=(e,t,n,r,i,a)=>{let o=n-(i===`CALL`?0:r*e.length),s=c(e,o,r),u=l(e,o,r);return i===`CALL`?a?s:u:a?g(u,t):h(s,t)},J=(t,r)=>{let i=n(t);return r?i:e/i},oe=e=>{let{marketAddr:t,optionType:n,liquiditiesAtOpen:r,liquiditiesCurrent:i,strikeTick:a,entryTick:o}=e,{pool:s,optionAssetIsToken0:c,optionAssetDecimals:l,payoutAssetDecimals:u}=U(t),{tickSpacing:d}=K(s),{exact:f}=G(s),{strikePrice:p,entryPrice:m}=E(()=>{if(c===void 0||!l||!u)return{};let e=y(J(o,c),l,u);return{strikePrice:y(J(a,c),l,u),entryPrice:e}},[e,c,l,u]),{positionSizeAtOpen:_,positionSizeCurrent:b}=E(()=>c===void 0||!d||!l||!u?{}:{positionSizeAtOpen:v(q(r,o,a,d,n,c),l),positionSizeCurrent:v(q(i,o,a,d,n,c),l)},[e,c,d,l,u]),{displayPnl:x,unrealizedPayout:S}=E(()=>{if(c===void 0||f===void 0||!b||!u)return{};let e=b.scaled,t=c?h(e,f)-h(e,o):g(e,f)-g(e,o),r=v(n===`CALL`?t:-t,u);return{unrealizedPayout:v(r.scaled<0?0n:r.scaled,u),displayPnl:r}},[e,c,f,b]);return{positionSizeCurrent:b,positionSizeAtOpen:_,displayPnl:x,unrealizedPayout:S,strikePrice:p,entryPrice:m}},se=(e,t,n,r)=>{let{pool:i}=U(e),a=G(i),{tickSpacing:o}=K(i),{payoutAssetDecimals:s}=U(e),c=typeof e==`string`?e:e==null?void 0:e.address,l=E(()=>{if(!(a.rounded===void 0||o===void 0))return t===`CALL`?a.rounded+o:a.rounded},[a.rounded,o,t]),{data:d}=k({address:c,abi:u,functionName:`calculatePremium`,args:l===void 0?void 0:[t===`CALL`?0:1,n,l,BigInt(r)],query:{enabled:a.rounded!==void 0&&s!==void 0&&o!==void 0&&l!==void 0}});return E(()=>{if(!(d===void 0||s===void 0))return v(d,s)},[d,s])},Y=(e,t=!1)=>{let{graphqlClient:n}=V(),{data:r,...i}=P({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:E(()=>(r==null?void 0:r.sort((e,t)=>t.createdAt.getTime()-e.createdAt.getTime()))||[],[r]),...i}},ce=e=>Y(e,!0),le=e=>Y(e,!1),X=(e,t)=>{let{token0Decimals:r,token1Decimals:i}=K(t);return E(()=>e&&r&&i?y(n(e),r,i):void 0,[e,r,i])},Z=e=>{let t=G(e);return{currentPrice:X(t.exact,e),currentTick:t}},Q=e=>{let{data:t}=k({address:typeof e==`string`?e:e==null?void 0:e.address,abi:p,functionName:`pool`});return{pool:t}},ue=e=>{let t=O(),{pool:n}=Q(e),r=G(n),{timelockLens:i}=H(),a=typeof e==`string`?e:e==null?void 0:e.address,{writeContractAsync:o,data:s,isPending:c,error:l}=j(),{isLoading:u,isSuccess:d}=A({hash:s}),f=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:p,functionName:`burn`,args:[e,n,r,await i.read.getRefTick([a,e])]});return await N(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 f(e[0].tickLower,e[0].tickUpper,e[0].liquidity);else{let n=await i.read.batchGetRefTick([a,e.map(e=>e.tickLower)]);await N(t,{hash:await o({address:a,abi:p,functionName:`multicall`,args:[e.map((e,t)=>b({abi:p,functionName:`burn`,args:[e.tickLower,e.tickUpper,e.liquidity,n[t]]}))]})})}},burn:f,hash:s,isPending:c,isConfirming:u,isSuccess:d,error:l,isLoading:c||u}},de=e=>{let{timelockLens:t}=H(),{pool:n}=Q(e),{token0Decimals:r,token1Decimals:i}=K(n),{currentPrice:a}=Z(n),o=typeof e==`string`?e:e==null?void 0:e.address,{data:s=[],refetch:c}=P({queryKey:[`liquidityBlocks`,o],queryFn:()=>t.read.getAllBlocks([o]),enabled:!!o&&!!t}),{totalAmount0:l,totalAmount1:u,borrowedAmount0:d,borrowedAmount1:f}=E(()=>({totalAmount0:r?v(s.reduce((e,t)=>e+t.totalAmount0,0n),r):void 0,totalAmount1:i?v(s.reduce((e,t)=>e+t.totalAmount1,0n),i):void 0,borrowedAmount0:r?v(s.reduce((e,t)=>e+t.borrowedAmount0,0n),r):void 0,borrowedAmount1:i?v(s.reduce((e,t)=>e+t.borrowedAmount1,0n),i):void 0}),[s,r,i]);return{tvl1:E(()=>{if(!l||!u||!a||!i)return;let e=l.scaled*a.scaled/10n**18n,t=u.scaled;return v(e+t,i)},[l,u,a,i]),blocks:s,totalAmount0:l,totalAmount1:u,borrowedAmount0:d,borrowedAmount1:f,refetch:c}},$=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 n=O(),{address:r}=D(),{pool:i}=Q(e),{timelockLens:a,uniswapLens:o}=H(),s=G(i),{token0:c,token1:l}=K(i),u=typeof e==`string`?e:e==null?void 0:e.address,{writeContractAsync:d,data:f,isPending:m,error:h}=j(),{isLoading:g,isSuccess:_}=A({hash:f}),v=async e=>{if(!r||!n)throw Error(`Wallet not connected`);if(s.exact===void 0||!c||!l||!u||!o)throw Error(`Current tick not available`);let{totalAmount0:i,totalAmount1:a}=await $(o,e.map(e=>e.tickLower),e.map(e=>e.tickUpper),e.map(e=>e.liquidity),s.exact),[f,p]=await Promise.all([t(c,n).read.allowance([r,u]),t(l,n).read.allowance([r,u])]),m=[];if(f<=i){let e=await d({address:c,abi:x,functionName:`approve`,args:[u,S]});m.push(N(n,{hash:e}))}if(p<=a){let e=await d({address:l,abi:x,functionName:`approve`,args:[u,S]});m.push(N(n,{hash:e}))}m.length>0&&await Promise.all(m)},y=async(e,t,r)=>{if(!n)throw Error(`Wallet not connected`);if(!u||!a)throw Error(`Vault/lens not available`);await v([{tickLower:e,tickUpper:t,liquidity:r}]);let i=await d({address:u,abi:p,functionName:`mint`,args:[e,t,r,await a.read.getRefTick([u,e])]});return await N(n,{hash:i}),i};return{mintMultiple:async e=>{if(!n)throw Error(`Wallet not connected`);if(!s.exact)throw Error(`Current tick not available`);if(e.length===0)throw Error(`No positions to mint`);if(!a||!u)throw Error(`Vault/lens not available`);if(e.length===1)await y(e[0].tickLower,e[0].tickUpper,e[0].liquidity);else{await v(e);let t=await a.read.batchGetRefTick([u,e.map(e=>e.tickLower)]);await N(n,{hash:await d({address:u,abi:p,functionName:`multicall`,args:[e.map((e,n)=>b({abi:p,functionName:`mint`,args:[e.tickLower,e.tickUpper,e.liquidity,t[n]]}))]})})}},mint:y,hash:f,isPending:m,isConfirming:g,isSuccess:_,error:h,isLoading:m||g}},pe=e=>{let{timelockLens:t}=H(),{pool:n}=Q(e),{token0Decimals:r,token1Decimals:i}=K(n),a=typeof e==`string`?e:e==null?void 0:e.address,{data:o,refetch:c}=k({address:t==null?void 0:t.address,abi:s,functionName:`getVaultTVL`,args:[a],query:{enabled:!!a&&!!t}}),l=o&&r?v(o[0],r):void 0,u=o&&i?v(o[1],i):void 0,d=o&&r?v(o[2],r):void 0,f=o&&i?v(o[3],i):void 0;return{tvl0:o&&r?v(o[4],r):void 0,tvl1:o&&i?v(o[5],i):void 0,totalAmount0:l,totalAmount1:u,borrowedAmount0:d,borrowedAmount1:f,refetch:c}};export{B as TimelockMarketProvider,$ as batchGetAmountsFromLiquidity,W as getCurrentTick,ce as useActiveUserOptions,ue as useBurnLiquidity,le as useClosedUserOptions,ne as useCurrentMarket,Z as useCurrentPrice,G as useCurrentTick,re as useExerciseOption,H as useLens,de as useLiquidityBlocks,U as useMarketData,ie as useMaxPositionSize,fe as useMintLiquidity,ae as useMintOption,oe as useOptionLiquidityData,se as useOptionPremium,K as usePoolData,X as usePriceAtTick,V as useTimelockConfig,Q as useVaultData,pe as useVaultTVL};
63
+ `,F=A`
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
+ `,I=(e,t,n,r)=>e();function L(e,t=I){return{GetActiveUserOptions(n,r,i){return t(t=>e.request({document:N,variables:n,requestHeaders:{...r,...t},signal:i}),`GetActiveUserOptions`,`query`,n)},GetClosedUserOptions(n,r,i){return t(t=>e.request({document:P,variables:n,requestHeaders:{...r,...t},signal:i}),`GetClosedUserOptions`,`query`,n)},GetMarketData(n,r,i){return t(t=>e.request({document:F,variables:n,requestHeaders:{...r,...t},signal:i}),`GetMarketData`,`query`,n)}}}const R=x(void 0),z=({children:e,marketData:t,envioGraphqlUrl:n})=>{let r=T(),i=d[r],a=m[r];return b.createElement(R.Provider,{value:{marketData:t||{},lensAddr:i,uniswapMathLensAddr:a,envioGraphqlUrl:n}},e)},B=()=>{let e=S(R);if(e===void 0)throw Error(`useCurrentMarket must be used within a TimelockMarketProvider`);return e.marketData},V=()=>{let e=S(R);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?L(new ee(e.envioGraphqlUrl)):void 0}},H=e=>{let{graphqlClient:t}=V(),n=typeof e==`string`?e:e==null?void 0:e.address,{data:r}=M({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||{}},U=e=>{let{vault:t}=H(e),n=E(),{data:r}=D({address:t,abi:u,functionName:`lowestTick`}),{writeContractAsync:i,data:a,isPending:o,error:c}=k(),{isLoading:l,isSuccess:d}=O({hash:a}),f=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||!f)throw Error(`Lowest tick lower not available`);let a=await i({address:f,abi:s,functionName:`exerciseOption`,args:[e,t,0n,r]});return await j(n,{hash:a}),a},hash:a,isPending:o,isConfirming:l,isSuccess:d,error:c,isLoading:o||l}},W=()=>{let e=E(),t=e?n(e):void 0;return{uniswapLens:e?i(e):void 0,timelockLens:t}},G=(e,t,n=100)=>{let{timelockLens:r}=W(),{optionAssetDecimals:i}=H(e),a=typeof e==`string`?e:e==null?void 0:e.address,{data:s,refetch:c}=D({address:r==null?void 0:r.address,abi:o,functionName:`getMaxPositionSizeAtCurrentTick`,args:[a,n],query:{enabled:!!a&&!!r},gas:100000000n}),{data:l,refetch:u}=D({address:r==null?void 0:r.address,abi:o,functionName:`getMaxPositionSize`,args:[a,t,n],query:{enabled:!!a&&!!r&&t!==void 0},gas:100000000n}),d=t===void 0?s:l,{maxCallSize:f,maxPutSize:p}=C(()=>d&&i?{maxCallSize:h(d[0],i),maxPutSize:h(d[1],i)}:{},[d,i]);return{maxCallSize:f,maxPutSize:p,refetch:()=>{c(),u()}}},K=async e=>{let[t,{1:n}]=await Promise.all([e.read.tickSpacing(),e.read.slot0()]);return{exact:n,rounded:Math.floor(n/t)*t}},q=e=>{let t=E(),{data:n}=M({queryKey:[`currentTick`,typeof e==`string`?e:(e==null?void 0:e.address)||`-`],queryFn:()=>K(typeof e==`string`?a(e,t):e),enabled:!!e&&!!t,refetchInterval:5e3});return n||{}},J=e=>{let t=typeof e==`string`?e:e==null?void 0:e.address,{timelockLens:n}=W(),r=E(),{data:i}=D({address:n==null?void 0:n.address,abi:o,functionName:`getPoolData`,args:t?[t]:void 0,query:{enabled:!!t&&!!r}});return i||{}},te=t=>{let{timelockLens:n}=W(),{payoutAsset:i,vault:a,pool:o,optionAssetIsToken0:u}=H(t),{tickSpacing:d}=J(o),{exact:f}=q(o),p=E(),{address:m}=w(),{writeContractAsync:h,data:g,isPending:_,error:b}=k(),{isLoading:x,isSuccess:S}=O({hash:g}),C=typeof t==`string`?t:t==null?void 0:t.address,T=async t=>{if(!p||!m)throw Error(`Wallet not connected`);if(!i||!C)throw Error(`Tokens not available`);await e(i,p).read.allowance([m,C])<t&&await j(p,{hash:await h({address:i,abi:v,functionName:`approve`,args:[C,y]})})};return{mintOption:async(e,t,i,o)=>{if(!p)throw Error(`Wallet not connected`);if(!n||!a||!C||!f||!d)throw Error(`Lowest tick lower not available`);o=o??f,o=e===`CALL`&&u||e===`PUT`&&!u?l(o,d):c(o,d),await T(await r(C,p).read.calculatePremium([e===`CALL`?0:1,t,o,BigInt(i)]));let m=await h({address:C,abi:s,functionName:`mintOption`,args:[e===`CALL`?0:1,t,o,BigInt(i),BigInt(1e69),await n.read.getRefTick([a,o])]});return await j(p,{hash:m}),m},hash:g,isPending:_,isConfirming:x,isSuccess:S,error:b,isLoading:_||x}},ne=e=>{let{marketAddr:t,optionType:n,entryTick:r,positionSizeCurrent:i}=e,{pool:a,optionAssetIsToken0:o,payoutAssetDecimals:s}=H(t),{exact:c}=q(a),{displayPnl:l,unrealizedPayout:u}=C(()=>{if(o===void 0||c===void 0||!i||!s)return{};let e=o?f(i,c)-f(i,r):p(i,c)-p(i,r),t=h(n===`CALL`?e:-e,s);return{unrealizedPayout:h(t.scaled<0?0n:t.scaled,s),displayPnl:t}},[e,o,c,i]);return{displayPnl:l,unrealizedPayout:u}},re=(e,t,n,r)=>{let{pool:i,payoutAssetDecimals:a}=H(e),{tickSpacing:o}=J(i),c=q(i),l=typeof e==`string`?e:e==null?void 0:e.address,u=C(()=>{if(!(c.rounded===void 0||o===void 0))return t===`CALL`?c.rounded+o:c.rounded},[c.rounded,o,t]),{data:d}=D({address:l,abi:s,functionName:`calculatePremium`,args:u===void 0?void 0:[t===`CALL`?0:1,n,u,BigInt(r)],query:{enabled:c.rounded!==void 0&&a!==void 0&&o!==void 0&&u!==void 0}});return C(()=>{if(!(d===void 0||a===void 0))return h(d,a)},[d,a])},Y=(e,t=!1)=>{let{graphqlClient:n}=V(),{data:r,...i}=M({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)),positionSizeAtOpen:BigInt(e.positionSizeAtOpen),positionSizeCurrent:BigInt(e.positionSizeCurrent),strikePrice:BigInt(e.strikePrice),entryPrice:BigInt(e.entryPrice)}))},enabled:!!e&&!!n});return{data:C(()=>(r==null?void 0:r.sort((e,t)=>t.createdAt.getTime()-e.createdAt.getTime()))||[],[r]),...i}},ie=e=>Y(e,!0),ae=e=>Y(e,!1),X=(e,n)=>{let{token0Decimals:r,token1Decimals:i}=J(n);return C(()=>e&&r&&i?g(t(e),r,i):void 0,[e,r,i])},Z=e=>{let t=q(e);return{currentPrice:X(t.exact,e),currentTick:t}},Q=e=>{let{data:t}=D({address:typeof e==`string`?e:e==null?void 0:e.address,abi:u,functionName:`pool`});return{pool:t}},oe=e=>{let t=E(),{pool:n}=Q(e),r=q(n),{timelockLens:i}=W(),a=typeof e==`string`?e:e==null?void 0:e.address,{writeContractAsync:o,data:s,isPending:c,error:l}=k(),{isLoading:d,isSuccess:f}=O({hash:s}),p=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:u,functionName:`burn`,args:[e,n,r,await i.read.getRefTick([a,e])]});return await j(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 p(e[0].tickLower,e[0].tickUpper,e[0].liquidity);else{let n=await i.read.batchGetRefTick([a,e.map(e=>e.tickLower)]);await j(t,{hash:await o({address:a,abi:u,functionName:`multicall`,args:[e.map((e,t)=>_({abi:u,functionName:`burn`,args:[e.tickLower,e.tickUpper,e.liquidity,n[t]]}))]})})}},burn:p,hash:s,isPending:c,isConfirming:d,isSuccess:f,error:l,isLoading:c||d}},se=e=>{let{timelockLens:t}=W(),{pool:n}=Q(e),{token0Decimals:r,token1Decimals:i}=J(n),{currentPrice:a}=Z(n),o=typeof e==`string`?e:e==null?void 0:e.address,{data:s=[],refetch:c}=M({queryKey:[`liquidityBlocks`,o],queryFn:()=>t.read.getAllBlocks([o]),enabled:!!o&&!!t}),{totalAmount0:l,totalAmount1:u,borrowedAmount0:d,borrowedAmount1:f}=C(()=>({totalAmount0:r?h(s.reduce((e,t)=>e+t.totalAmount0,0n),r):void 0,totalAmount1:i?h(s.reduce((e,t)=>e+t.totalAmount1,0n),i):void 0,borrowedAmount0:r?h(s.reduce((e,t)=>e+t.borrowedAmount0,0n),r):void 0,borrowedAmount1:i?h(s.reduce((e,t)=>e+t.borrowedAmount1,0n),i):void 0}),[s,r,i]);return{tvl1:C(()=>{if(!l||!u||!a||!i)return;let e=l.scaled*a.scaled/10n**18n,t=u.scaled;return h(e+t,i)},[l,u,a,i]),blocks:s,totalAmount0:l,totalAmount1:u,borrowedAmount0:d,borrowedAmount1:f,refetch:c}},$=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}},ce=t=>{let n=E(),{address:r}=w(),{pool:i}=Q(t),{timelockLens:a,uniswapLens:o}=W(),s=q(i),{token0:c,token1:l}=J(i),d=typeof t==`string`?t:t==null?void 0:t.address,{writeContractAsync:f,data:p,isPending:m,error:h}=k(),{isLoading:g,isSuccess:b}=O({hash:p}),x=async t=>{if(!r||!n)throw Error(`Wallet not connected`);if(s.exact===void 0||!c||!l||!d||!o)throw Error(`Current tick not available`);let{totalAmount0:i,totalAmount1:a}=await $(o,t.map(e=>e.tickLower),t.map(e=>e.tickUpper),t.map(e=>e.liquidity),s.exact),[u,p]=await Promise.all([e(c,n).read.allowance([r,d]),e(l,n).read.allowance([r,d])]),m=[];if(u<=i){let e=await f({address:c,abi:v,functionName:`approve`,args:[d,y]});m.push(j(n,{hash:e}))}if(p<=a){let e=await f({address:l,abi:v,functionName:`approve`,args:[d,y]});m.push(j(n,{hash:e}))}m.length>0&&await Promise.all(m)},S=async(e,t,r)=>{if(!n)throw Error(`Wallet not connected`);if(!d||!a)throw Error(`Vault/lens not available`);await x([{tickLower:e,tickUpper:t,liquidity:r}]);let i=await f({address:d,abi:u,functionName:`mint`,args:[e,t,r,await a.read.getRefTick([d,e])]});return await j(n,{hash:i}),i};return{mintMultiple:async e=>{if(!n)throw Error(`Wallet not connected`);if(!s.exact)throw Error(`Current tick not available`);if(e.length===0)throw Error(`No positions to mint`);if(!a||!d)throw Error(`Vault/lens not available`);if(e.length===1)await S(e[0].tickLower,e[0].tickUpper,e[0].liquidity);else{await x(e);let t=await a.read.batchGetRefTick([d,e.map(e=>e.tickLower)]);await j(n,{hash:await f({address:d,abi:u,functionName:`multicall`,args:[e.map((e,n)=>_({abi:u,functionName:`mint`,args:[e.tickLower,e.tickUpper,e.liquidity,t[n]]}))]})})}},mint:S,hash:p,isPending:m,isConfirming:g,isSuccess:b,error:h,isLoading:m||g}},le=e=>{let{timelockLens:t}=W(),{pool:n}=Q(e),{token0Decimals:r,token1Decimals:i}=J(n),a=typeof e==`string`?e:e==null?void 0:e.address,{data:s,refetch:c}=D({address:t==null?void 0:t.address,abi:o,functionName:`getVaultTVL`,args:[a],query:{enabled:!!a&&!!t}}),l=s&&r?h(s[0],r):void 0,u=s&&i?h(s[1],i):void 0,d=s&&r?h(s[2],r):void 0,f=s&&i?h(s[3],i):void 0;return{tvl0:s&&r?h(s[4],r):void 0,tvl1:s&&i?h(s[5],i):void 0,totalAmount0:l,totalAmount1:u,borrowedAmount0:d,borrowedAmount1:f,refetch:c}};export{z as TimelockMarketProvider,$ as batchGetAmountsFromLiquidity,K as getCurrentTick,ie as useActiveUserOptions,oe as useBurnLiquidity,ae as useClosedUserOptions,B as useCurrentMarket,Z as useCurrentPrice,q as useCurrentTick,U as useExerciseOption,W as useLens,se as useLiquidityBlocks,H as useMarketData,G as useMaxPositionSize,ce as useMintLiquidity,te as useMintOption,ne as useOptionPnl,re as useOptionPremium,J as usePoolData,X as usePriceAtTick,V as useTimelockConfig,Q as useVaultData,le as useVaultTVL};
56
84
  //# sourceMappingURL=client.js.map