timelock-sdk 0.0.18 → 0.0.20

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
@@ -1,4 +1,26 @@
1
- "use client";const e=require(`./numberUtils-B7BwWYfb.cjs`),t=require(`./optionsMarket-BsK9z8z4.cjs`),n=require(`./uniswapV3Pool-D9Vqrkmz.cjs`);let r=require(`viem`);r=e.__toESM(r);let i=require(`react`);i=e.__toESM(i);let a=require(`wagmi`);a=e.__toESM(a);let o=require(`graphql-request`);o=e.__toESM(o);let s=require(`graphql-tag`);s=e.__toESM(s);let c=require(`viem/actions`);c=e.__toESM(c);let l=require(`@tanstack/react-query`);l=e.__toESM(l);const u=s.default`
1
+ 'use client';
2
+
3
+
4
+ const require_numberUtils = require('./numberUtils-B7BwWYfb.cjs');
5
+ const require_optionsMarket = require('./optionsMarket-BsK9z8z4.cjs');
6
+ const require_uniswapV3Pool = require('./uniswapV3Pool-D9Vqrkmz.cjs');
7
+ let viem = require("viem");
8
+ viem = require_numberUtils.__toESM(viem);
9
+ let react = require("react");
10
+ react = require_numberUtils.__toESM(react);
11
+ let wagmi = require("wagmi");
12
+ wagmi = require_numberUtils.__toESM(wagmi);
13
+ let graphql_request = require("graphql-request");
14
+ graphql_request = require_numberUtils.__toESM(graphql_request);
15
+ let graphql_tag = require("graphql-tag");
16
+ graphql_tag = require_numberUtils.__toESM(graphql_tag);
17
+ let viem_actions = require("viem/actions");
18
+ viem_actions = require_numberUtils.__toESM(viem_actions);
19
+ let __tanstack_react_query = require("@tanstack/react-query");
20
+ __tanstack_react_query = require_numberUtils.__toESM(__tanstack_react_query);
21
+
22
+ //#region src/generated/graphql.ts
23
+ const GetActiveUserOptionsDocument = graphql_tag.default`
2
24
  query GetActiveUserOptions($user: String!) {
3
25
  UserOption(
4
26
  where: {ownerAddr: {_eq: $user}, fullyExercised: {_eq: false}}
@@ -29,7 +51,8 @@
29
51
  fullyExercised
30
52
  }
31
53
  }
32
- `,d=s.default`
54
+ `;
55
+ const GetClosedUserOptionsDocument = graphql_tag.default`
33
56
  query GetClosedUserOptions($user: String!) {
34
57
  UserOption(
35
58
  where: {ownerAddr: {_eq: $user}, fullyExercised: {_eq: true}}
@@ -60,7 +83,8 @@
60
83
  fullyExercised
61
84
  }
62
85
  }
63
- `,f=s.default`
86
+ `;
87
+ const GetMarketDataDocument = graphql_tag.default`
64
88
  query GetMarketData($marketAddr: String!) {
65
89
  TimelockMarket(where: {id: {_eq: $marketAddr}}, limit: 1) {
66
90
  id
@@ -80,4 +104,670 @@
80
104
  payoutAssetName
81
105
  }
82
106
  }
83
- `,p=(e,t,n,r)=>e();function m(e,t=p){return{GetActiveUserOptions(n,r,i){return t(t=>e.request({document:u,variables:n,requestHeaders:{...r,...t},signal:i}),`GetActiveUserOptions`,`query`,n)},GetClosedUserOptions(n,r,i){return t(t=>e.request({document:d,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 h=(0,i.createContext)(void 0),g=({children:t,marketData:n,envioGraphqlUrl:r})=>{let o=(0,a.useChainId)(),s=e.timelockLenses[o],c=e.uniswapMathLenses[o];return i.default.createElement(h.Provider,{value:{marketData:n||{},lensAddr:s,uniswapMathLensAddr:c,envioGraphqlUrl:r}},t)},_=()=>{let e=(0,i.useContext)(h);if(e===void 0)throw Error(`useCurrentMarket must be used within a TimelockMarketProvider`);return e.marketData},v=()=>{let e=(0,i.useContext)(h);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?m(new o.GraphQLClient(e.envioGraphqlUrl)):void 0}},y=e=>{let{graphqlClient:t}=v(),{data:n}=(0,l.useQuery)({queryKey:[`marketData`,e||`--`],queryFn:()=>t.GetMarketData({marketAddr:e.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:!!e&&!!t});return n||{}},b=e=>{let{vault:r}=y(e),i=(0,a.useClient)(),{data:o}=(0,a.useReadContract)({address:r,abi:n.singleOwnerVaultAbi,functionName:`lowestTick`}),{writeContractAsync:s,data:l,isPending:u,error:d}=(0,a.useWriteContract)(),{isLoading:f,isSuccess:p}=(0,a.useWaitForTransactionReceipt)({hash:l});return{exerciseOption:async(n,r)=>{if(!i)throw Error(`Wallet not connected`);if(o===void 0||!e)throw Error(`Lowest tick lower not available`);let a=await s({address:e,abi:t.optionsMarketAbi,functionName:`exerciseOption`,args:[n,r,0n,o]});return await(0,c.waitForTransactionReceipt)(i,{hash:a}),a},hash:l,isPending:u,isConfirming:f,isSuccess:p,error:d,isLoading:u||f}},x=()=>{let t=(0,a.useClient)(),n=t?e.getTimelockLens(t):void 0;return{uniswapLens:t?e.getUniswapMathLens(t):void 0,timelockLens:n}},S=(n,r,o=100)=>{let{timelockLens:s}=x(),{optionAssetDecimals:c}=y(n),{data:l,refetch:u}=(0,a.useReadContract)({address:s==null?void 0:s.address,abi:t.lensAbi,functionName:`getMaxPositionSizeAtCurrentTick`,args:[n,o],query:{enabled:!!n&&!!s},gas:100000000n}),{data:d,refetch:f}=(0,a.useReadContract)({address:s==null?void 0:s.address,abi:t.lensAbi,functionName:`getMaxPositionSize`,args:[n,r,o],query:{enabled:!!n&&!!s&&r!==void 0},gas:100000000n}),p=r===void 0?l:d,{maxCallSize:m,maxPutSize:h}=(0,i.useMemo)(()=>p&&c?{maxCallSize:e.wrapAmount(p[0],c),maxPutSize:e.wrapAmount(p[1],c)}:{},[p,c]);return{maxCallSize:m,maxPutSize:h,refetch:()=>{u(),f()}}},C=e=>{let{timelockLens:n}=x(),r=(0,a.useClient)(),{data:i}=(0,a.useReadContract)({address:n==null?void 0:n.address,abi:t.lensAbi,functionName:`getPoolData`,args:e?[e]:void 0,query:{enabled:!!e&&!!r}});return i||{}},w=e=>{let{tickSpacing:t}=C(e),{data:r}=(0,a.useReadContract)({address:e,abi:n.uniswapV3PoolAbi,functionName:`slot0`,args:[]}),i=r==null?void 0:r[1];return{exact:i,rounded:i&&t?Math.floor(i/t)*t:void 0}},T=n=>{let{timelockLens:i}=x(),{payoutAsset:o,vault:s,pool:l,optionAssetIsToken0:u}=y(n),{tickSpacing:d}=C(l),{exact:f}=w(l),p=(0,a.useClient)(),{address:m}=(0,a.useAccount)(),{writeContractAsync:h,data:g,isPending:_,error:v}=(0,a.useWriteContract)(),{isLoading:b,isSuccess:S}=(0,a.useWaitForTransactionReceipt)({hash:g}),T=async t=>{if(!p||!m)throw Error(`Wallet not connected`);if(!o||!n)throw Error(`Tokens not available`);await e.getErc20(o,p).read.allowance([m,n])<t&&await(0,c.waitForTransactionReceipt)(p,{hash:await h({address:o,abi:r.erc20Abi,functionName:`approve`,args:[n,r.maxUint256]})})};return{mintOption:async(r,a,o,l)=>{if(!p)throw Error(`Wallet not connected`);if(!i||!s||!n||!f||!d)throw Error(`Lowest tick lower not available`);l=e.roundTickDown(l??f,d),(r===`CALL`&&u||r===`PUT`&&!u)&&(l+=d),await T(await e.getTimelockMarket(n,p).read.calculatePremium([r===`CALL`?0:1,a,l,BigInt(o)]));let m=await h({address:n,abi:t.optionsMarketAbi,functionName:`mintOption`,args:[r===`CALL`?0:1,a,l,BigInt(o),BigInt(1e69),await i.read.getRefTick([s,l])]});return await(0,c.waitForTransactionReceipt)(p,{hash:m}),m},hash:g,isPending:_,isConfirming:b,isSuccess:S,error:v,isLoading:_||b}},E=t=>{let{marketAddr:n,optionType:r,entryTick:a,positionSizeCurrent:o}=t,{pool:s,optionAssetIsToken0:c,payoutAssetDecimals:l}=y(n),{exact:u}=w(s),{displayPnl:d,unrealizedPayout:f}=(0,i.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(r===`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}},D=(n,r,o,s)=>{let{pool:c,payoutAssetDecimals:l}=y(n),{tickSpacing:u}=C(c),d=w(c),f=(0,i.useMemo)(()=>{if(!(d.rounded===void 0||u===void 0))return r===`CALL`?d.rounded+u:d.rounded},[d.rounded,u,r]),{data:p}=(0,a.useReadContract)({address:n,abi:t.optionsMarketAbi,functionName:`calculatePremium`,args:f===void 0?void 0:[r===`CALL`?0:1,o,f,BigInt(s)],query:{enabled:d.rounded!==void 0&&l!==void 0&&u!==void 0&&f!==void 0}});return(0,i.useMemo)(()=>{if(!(p===void 0||l===void 0))return e.wrapAmount(p,l)},[p,l])},O=(e,t=!1)=>{let{graphqlClient:n}=v(),{data:r,...a}=(0,l.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)),positionSizeAtOpen:BigInt(e.positionSizeAtOpen),positionSizeCurrent:BigInt(e.positionSizeCurrent),strikePrice:BigInt(e.strikePrice),entryPrice:BigInt(e.entryPrice)}))},enabled:!!e&&!!n});return{data:(0,i.useMemo)(()=>(r==null?void 0:r.sort((e,t)=>t.createdAt.getTime()-e.createdAt.getTime()))||[],[r]),...a}},k=e=>O(e,!0),A=e=>O(e,!1),j=(t,n)=>{let{token0Decimals:r,token1Decimals:a}=C(n);return(0,i.useMemo)(()=>t&&r&&a?e.wrapPrice(e.getPriceAtTick(t),r,a):void 0,[t,r,a])},M=e=>{let t=w(e);return{currentPrice:j(t.exact,e),currentTick:t}},N=e=>{let{data:t}=(0,a.useReadContract)({address:e,abi:n.singleOwnerVaultAbi,functionName:`pool`});return{pool:t}},P=e=>{let t=(0,a.useClient)(),{pool:i}=N(e),o=w(i),{timelockLens:s}=x(),{writeContractAsync:l,data:u,isPending:d,error:f}=(0,a.useWriteContract)(),{isLoading:p,isSuccess:m}=(0,a.useWaitForTransactionReceipt)({hash:u}),h=async(r,i,a)=>{if(!t)throw Error(`Wallet not connected`);if(!e||!s)throw Error(`Vault/lens not available`);let o=await l({address:e,abi:n.singleOwnerVaultAbi,functionName:`burn`,args:[r,i,a,await s.read.getRefTick([e,r])]});return await(0,c.waitForTransactionReceipt)(t,{hash:o}),o};return{burnMultiple:async i=>{if(!t)throw Error(`Wallet not connected`);if(!o.exact)throw Error(`Current tick not available`);if(i.length===0)throw Error(`No positions to burn`);if(!s||!e)throw Error(`Vault/lens not available`);if(i.length===1)await h(i[0].tickLower,i[0].tickUpper,i[0].liquidity);else{let a=await s.read.batchGetRefTick([e,i.map(e=>e.tickLower)]);await(0,c.waitForTransactionReceipt)(t,{hash:await l({address:e,abi:n.singleOwnerVaultAbi,functionName:`multicall`,args:[i.map((e,t)=>(0,r.encodeFunctionData)({abi:n.singleOwnerVaultAbi,functionName:`burn`,args:[e.tickLower,e.tickUpper,e.liquidity,a[t]]}))]})})}},burn:h,hash:u,isPending:d,isConfirming:p,isSuccess:m,error:f,isLoading:d||p}},F=t=>{let{timelockLens:n}=x(),{pool:r}=N(t),{token0Decimals:a,token1Decimals:o}=C(r),{currentPrice:s}=M(r),{data:c=[],refetch:u}=(0,l.useQuery)({queryKey:[`liquidityBlocks`,t],queryFn:()=>n.read.getAllBlocks([t]),enabled:!!t&&!!n}),{totalAmount0:d,totalAmount1:f,borrowedAmount0:p,borrowedAmount1:m}=(0,i.useMemo)(()=>({totalAmount0:a?e.wrapAmount(c.reduce((e,t)=>e+t.totalAmount0,0n),a):void 0,totalAmount1:o?e.wrapAmount(c.reduce((e,t)=>e+t.totalAmount1,0n),o):void 0,borrowedAmount0:a?e.wrapAmount(c.reduce((e,t)=>e+t.borrowedAmount0,0n),a):void 0,borrowedAmount1:o?e.wrapAmount(c.reduce((e,t)=>e+t.borrowedAmount1,0n),o):void 0}),[c,a,o]);return{tvl1:(0,i.useMemo)(()=>{if(!d||!f||!s||!o)return;let t=d.scaled*s.scaled/10n**18n,n=f.scaled;return e.wrapAmount(t+n,o)},[d,f,s,o]),blocks:c,totalAmount0:d,totalAmount1:f,borrowedAmount0:p,borrowedAmount1:m,refetch:u}},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=t=>{let i=(0,a.useClient)(),{address:o}=(0,a.useAccount)(),{pool:s}=N(t),{timelockLens:l,uniswapLens:u}=x(),d=w(s),{token0:f,token1:p}=C(s),{writeContractAsync:m,data:h,isPending:g,error:_}=(0,a.useWriteContract)(),{isLoading:v,isSuccess:y}=(0,a.useWaitForTransactionReceipt)({hash:h}),b=async n=>{if(!o||!i)throw Error(`Wallet not connected`);if(d.exact===void 0||!f||!p||!t||!u)throw Error(`Current tick not available`);let{totalAmount0:a,totalAmount1:s}=await I(u,n.map(e=>e.tickLower),n.map(e=>e.tickUpper),n.map(e=>e.liquidity),d.exact),[l,h]=await Promise.all([e.getErc20(f,i).read.allowance([o,t]),e.getErc20(p,i).read.allowance([o,t])]),g=[];if(l<=a){let e=await m({address:f,abi:r.erc20Abi,functionName:`approve`,args:[t,r.maxUint256]});g.push((0,c.waitForTransactionReceipt)(i,{hash:e}))}if(h<=s){let e=await m({address:p,abi:r.erc20Abi,functionName:`approve`,args:[t,r.maxUint256]});g.push((0,c.waitForTransactionReceipt)(i,{hash:e}))}g.length>0&&await Promise.all(g)},S=async(e,r,a)=>{if(!i)throw Error(`Wallet not connected`);if(!t||!l)throw Error(`Vault/lens not available`);await b([{tickLower:e,tickUpper:r,liquidity:a}]);let o=await m({address:t,abi:n.singleOwnerVaultAbi,functionName:`mint`,args:[e,r,a,await l.read.getRefTick([t,e])]});return await(0,c.waitForTransactionReceipt)(i,{hash:o}),o};return{mintMultiple:async e=>{if(!i)throw Error(`Wallet not connected`);if(!d.exact)throw Error(`Current tick not available`);if(e.length===0)throw Error(`No positions to mint`);if(!l||!t)throw Error(`Vault/lens not available`);if(e.length===1)await S(e[0].tickLower,e[0].tickUpper,e[0].liquidity);else{await b(e);let a=await l.read.batchGetRefTick([t,e.map(e=>e.tickLower)]);await(0,c.waitForTransactionReceipt)(i,{hash:await m({address:t,abi:n.singleOwnerVaultAbi,functionName:`multicall`,args:[e.map((e,t)=>(0,r.encodeFunctionData)({abi:n.singleOwnerVaultAbi,functionName:`mint`,args:[e.tickLower,e.tickUpper,e.liquidity,a[t]]}))]})})}},mint:S,hash:h,isPending:g,isConfirming:v,isSuccess:y,error:_,isLoading:g||v}},R=n=>{let{timelockLens:r}=x(),{pool:i}=N(n),{token0Decimals:o,token1Decimals:s}=C(i),{data:c,refetch:l}=(0,a.useReadContract)({address:r==null?void 0:r.address,abi:t.lensAbi,functionName:`getVaultTVL`,args:[n],query:{enabled:!!n&&!!r}}),u=c&&o?e.wrapAmount(c[0],o):void 0,d=c&&s?e.wrapAmount(c[1],s):void 0,f=c&&o?e.wrapAmount(c[2],o):void 0,p=c&&s?e.wrapAmount(c[3],s):void 0;return{tvl0:c&&o?e.wrapAmount(c[4],o):void 0,tvl1:c&&s?e.wrapAmount(c[5],s):void 0,totalAmount0:u,totalAmount1:d,borrowedAmount0:f,borrowedAmount1:p,refetch:l}};exports.TimelockMarketProvider=g,exports.batchGetAmountsFromLiquidity=I,exports.useActiveUserOptions=k,exports.useBurnLiquidity=P,exports.useClosedUserOptions=A,exports.useCurrentMarket=_,exports.useCurrentPrice=M,exports.useCurrentTick=w,exports.useExerciseOption=b,exports.useLens=x,exports.useLiquidityBlocks=F,exports.useMarketData=y,exports.useMaxPositionSize=S,exports.useMintLiquidity=L,exports.useMintOption=T,exports.useOptionPnl=E,exports.useOptionPremium=D,exports.usePoolData=C,exports.usePriceAtTick=j,exports.useTimelockConfig=v,exports.useVaultData=N,exports.useVaultTVL=R;
107
+ `;
108
+ const defaultWrapper = (action, _operationName, _operationType, _variables) => action();
109
+ function getSdk(client, withWrapper = defaultWrapper) {
110
+ return {
111
+ GetActiveUserOptions(variables, requestHeaders, signal) {
112
+ return withWrapper((wrappedRequestHeaders) => client.request({
113
+ document: GetActiveUserOptionsDocument,
114
+ variables,
115
+ requestHeaders: {
116
+ ...requestHeaders,
117
+ ...wrappedRequestHeaders
118
+ },
119
+ signal
120
+ }), "GetActiveUserOptions", "query", variables);
121
+ },
122
+ GetClosedUserOptions(variables, requestHeaders, signal) {
123
+ return withWrapper((wrappedRequestHeaders) => client.request({
124
+ document: GetClosedUserOptionsDocument,
125
+ variables,
126
+ requestHeaders: {
127
+ ...requestHeaders,
128
+ ...wrappedRequestHeaders
129
+ },
130
+ signal
131
+ }), "GetClosedUserOptions", "query", variables);
132
+ },
133
+ GetMarketData(variables, requestHeaders, signal) {
134
+ return withWrapper((wrappedRequestHeaders) => client.request({
135
+ document: GetMarketDataDocument,
136
+ variables,
137
+ requestHeaders: {
138
+ ...requestHeaders,
139
+ ...wrappedRequestHeaders
140
+ },
141
+ signal
142
+ }), "GetMarketData", "query", variables);
143
+ }
144
+ };
145
+ }
146
+
147
+ //#endregion
148
+ //#region src/providers/TimelockMarketProvider.tsx
149
+ const TimelockMarketContext = (0, react.createContext)(void 0);
150
+ const TimelockMarketProvider = ({ children, marketData, envioGraphqlUrl }) => {
151
+ const chainId = (0, wagmi.useChainId)();
152
+ const lensAddr = require_numberUtils.timelockLenses[chainId];
153
+ const uniswapMathLensAddr = require_numberUtils.uniswapMathLenses[chainId];
154
+ return /* @__PURE__ */ react.default.createElement(TimelockMarketContext.Provider, { value: {
155
+ marketData: marketData || {},
156
+ lensAddr,
157
+ uniswapMathLensAddr,
158
+ envioGraphqlUrl
159
+ } }, children);
160
+ };
161
+ const useCurrentMarket = () => {
162
+ const context = (0, react.useContext)(TimelockMarketContext);
163
+ if (context === void 0) throw new Error("useCurrentMarket must be used within a TimelockMarketProvider");
164
+ return context.marketData;
165
+ };
166
+ const useTimelockConfig = () => {
167
+ const context = (0, react.useContext)(TimelockMarketContext);
168
+ if (context === void 0) throw new Error("useConfig must be used within a TimelockMarketProvider");
169
+ return {
170
+ lensAddr: context.lensAddr,
171
+ uniswapMathLensAddr: context.uniswapMathLensAddr,
172
+ envioGraphqlUrl: context.envioGraphqlUrl,
173
+ graphqlClient: context.envioGraphqlUrl ? getSdk(new graphql_request.GraphQLClient(context.envioGraphqlUrl)) : void 0
174
+ };
175
+ };
176
+
177
+ //#endregion
178
+ //#region src/hooks/market/useMarketData.ts
179
+ const useMarketData = (marketAddr) => {
180
+ const { graphqlClient } = useTimelockConfig();
181
+ const { data } = (0, __tanstack_react_query.useQuery)({
182
+ queryKey: ["marketData", marketAddr || "--"],
183
+ queryFn: () => graphqlClient.GetMarketData({ marketAddr: marketAddr.toLowerCase() }),
184
+ select: (data$1) => ({
185
+ ...data$1.TimelockMarket[0],
186
+ pool: data$1.TimelockMarket[0].pool,
187
+ vault: data$1.TimelockMarket[0].vault,
188
+ optionAsset: data$1.TimelockMarket[0].optionAsset,
189
+ payoutAsset: data$1.TimelockMarket[0].payoutAsset,
190
+ optionsCount: BigInt(data$1.TimelockMarket[0].optionsCount),
191
+ tradersCount: BigInt(data$1.TimelockMarket[0].tradersCount)
192
+ }),
193
+ enabled: !!marketAddr && !!graphqlClient
194
+ });
195
+ return data || {};
196
+ };
197
+
198
+ //#endregion
199
+ //#region src/hooks/market/useExerciseOption.ts
200
+ const useExerciseOption = (marketAddr) => {
201
+ const { vault } = useMarketData(marketAddr);
202
+ const client = (0, wagmi.useClient)();
203
+ const { data: lowestTick } = (0, wagmi.useReadContract)({
204
+ address: vault,
205
+ abi: require_uniswapV3Pool.singleOwnerVaultAbi,
206
+ functionName: "lowestTick"
207
+ });
208
+ const { writeContractAsync, data: hash, isPending, error } = (0, wagmi.useWriteContract)();
209
+ const { isLoading: isConfirming, isSuccess } = (0, wagmi.useWaitForTransactionReceipt)({ hash });
210
+ const exerciseOption = async (optionId, liquidities) => {
211
+ if (!client) throw new Error("Wallet not connected");
212
+ if (lowestTick === void 0 || !marketAddr) throw new Error("Lowest tick lower not available");
213
+ const hash$1 = await writeContractAsync({
214
+ address: marketAddr,
215
+ abi: require_optionsMarket.optionsMarketAbi,
216
+ functionName: "exerciseOption",
217
+ args: [
218
+ optionId,
219
+ liquidities,
220
+ 0n,
221
+ lowestTick
222
+ ]
223
+ });
224
+ await (0, viem_actions.waitForTransactionReceipt)(client, { hash: hash$1 });
225
+ return hash$1;
226
+ };
227
+ return {
228
+ exerciseOption,
229
+ hash,
230
+ isPending,
231
+ isConfirming,
232
+ isSuccess,
233
+ error,
234
+ isLoading: isPending || isConfirming
235
+ };
236
+ };
237
+
238
+ //#endregion
239
+ //#region src/hooks/useLens.ts
240
+ const useLens = () => {
241
+ const client = (0, wagmi.useClient)();
242
+ const timelockLens = (0, react.useMemo)(() => client ? require_numberUtils.getTimelockLens(client) : void 0, [client]);
243
+ return {
244
+ uniswapLens: (0, react.useMemo)(() => client ? require_numberUtils.getUniswapMathLens(client) : void 0, [client]),
245
+ timelockLens
246
+ };
247
+ };
248
+
249
+ //#endregion
250
+ //#region src/hooks/market/useMaxPositionSize.ts
251
+ const useMaxPositionSize = (marketAddr, strikeTick, maxBorrowableRange = 100) => {
252
+ const { timelockLens } = useLens();
253
+ const { optionAssetDecimals } = useMarketData(marketAddr);
254
+ const { data: data0, refetch: refetch0 } = (0, wagmi.useReadContract)({
255
+ address: timelockLens === null || timelockLens === void 0 ? void 0 : timelockLens.address,
256
+ abi: require_optionsMarket.lensAbi,
257
+ functionName: "getMaxPositionSizeAtCurrentTick",
258
+ args: [marketAddr, maxBorrowableRange],
259
+ query: { enabled: !!marketAddr && !!timelockLens },
260
+ gas: 100000000n
261
+ });
262
+ const { data: data1, refetch: refetch1 } = (0, wagmi.useReadContract)({
263
+ address: timelockLens === null || timelockLens === void 0 ? void 0 : timelockLens.address,
264
+ abi: require_optionsMarket.lensAbi,
265
+ functionName: "getMaxPositionSize",
266
+ args: [
267
+ marketAddr,
268
+ strikeTick,
269
+ maxBorrowableRange
270
+ ],
271
+ query: { enabled: !!marketAddr && !!timelockLens && strikeTick !== void 0 },
272
+ gas: 100000000n
273
+ });
274
+ const data = strikeTick !== void 0 ? data1 : data0;
275
+ const { maxCallSize, maxPutSize } = (0, react.useMemo)(() => data && optionAssetDecimals ? {
276
+ maxCallSize: require_numberUtils.wrapAmount(data[0], optionAssetDecimals),
277
+ maxPutSize: require_numberUtils.wrapAmount(data[1], optionAssetDecimals)
278
+ } : {}, [data, optionAssetDecimals]);
279
+ const refetch = () => {
280
+ refetch0();
281
+ refetch1();
282
+ };
283
+ return {
284
+ maxCallSize,
285
+ maxPutSize,
286
+ refetch
287
+ };
288
+ };
289
+
290
+ //#endregion
291
+ //#region src/hooks/pool/usePoolData.ts
292
+ const usePoolData = (poolAddr) => {
293
+ const { timelockLens } = useLens();
294
+ const client = (0, wagmi.useClient)();
295
+ const { data } = (0, wagmi.useReadContract)({
296
+ address: timelockLens === null || timelockLens === void 0 ? void 0 : timelockLens.address,
297
+ abi: require_optionsMarket.lensAbi,
298
+ functionName: "getPoolData",
299
+ args: poolAddr ? [poolAddr] : void 0,
300
+ query: { enabled: !!poolAddr && !!client }
301
+ });
302
+ return data || {};
303
+ };
304
+
305
+ //#endregion
306
+ //#region src/hooks/pool/useCurrentTick.ts
307
+ const useCurrentTick = (poolAddr) => {
308
+ const { tickSpacing } = usePoolData(poolAddr);
309
+ const { data } = (0, wagmi.useReadContract)({
310
+ address: poolAddr,
311
+ abi: require_uniswapV3Pool.uniswapV3PoolAbi,
312
+ functionName: "slot0",
313
+ args: []
314
+ });
315
+ const exact = data === null || data === void 0 ? void 0 : data[1];
316
+ return {
317
+ exact,
318
+ rounded: exact && tickSpacing ? Math.floor(exact / tickSpacing) * tickSpacing : void 0
319
+ };
320
+ };
321
+
322
+ //#endregion
323
+ //#region src/hooks/market/useMintOption.ts
324
+ const useMintOption = (marketAddr) => {
325
+ const { timelockLens } = useLens();
326
+ const { payoutAsset, vault, pool, optionAssetIsToken0 } = useMarketData(marketAddr);
327
+ const { tickSpacing } = usePoolData(pool);
328
+ const { exact: currentTick } = useCurrentTick(pool);
329
+ const client = (0, wagmi.useClient)();
330
+ const { address } = (0, wagmi.useAccount)();
331
+ const { writeContractAsync, data: hash, isPending, error } = (0, wagmi.useWriteContract)();
332
+ const { isLoading: isConfirming, isSuccess } = (0, wagmi.useWaitForTransactionReceipt)({ hash });
333
+ const askForApproval = async (premiumAmount) => {
334
+ if (!client || !address) throw new Error("Wallet not connected");
335
+ if (!payoutAsset || !marketAddr) throw new Error("Tokens not available");
336
+ if (await require_numberUtils.getErc20(payoutAsset, client).read.allowance([address, marketAddr]) < premiumAmount) await (0, viem_actions.waitForTransactionReceipt)(client, { hash: await writeContractAsync({
337
+ address: payoutAsset,
338
+ abi: viem.erc20Abi,
339
+ functionName: "approve",
340
+ args: [marketAddr, viem.maxUint256]
341
+ }) });
342
+ };
343
+ const mintOption = async (optionType, amount, duration, strikeTick) => {
344
+ if (!client) throw new Error("Wallet not connected");
345
+ if (!timelockLens || !vault || !marketAddr || !currentTick || !tickSpacing) throw new Error("Lowest tick lower not available");
346
+ strikeTick = require_numberUtils.roundTickDown(strikeTick ?? currentTick, tickSpacing);
347
+ if (optionType === "CALL" && optionAssetIsToken0 || optionType === "PUT" && !optionAssetIsToken0) strikeTick += tickSpacing;
348
+ await askForApproval(await require_numberUtils.getTimelockMarket(marketAddr, client).read.calculatePremium([
349
+ optionType === "CALL" ? 0 : 1,
350
+ amount,
351
+ strikeTick,
352
+ BigInt(duration)
353
+ ]));
354
+ const hash$1 = await writeContractAsync({
355
+ address: marketAddr,
356
+ abi: require_optionsMarket.optionsMarketAbi,
357
+ functionName: "mintOption",
358
+ args: [
359
+ optionType === "CALL" ? 0 : 1,
360
+ amount,
361
+ strikeTick,
362
+ BigInt(duration),
363
+ BigInt(1e69),
364
+ await timelockLens.read.getRefTick([vault, strikeTick])
365
+ ]
366
+ });
367
+ await (0, viem_actions.waitForTransactionReceipt)(client, { hash: hash$1 });
368
+ return hash$1;
369
+ };
370
+ return {
371
+ mintOption,
372
+ hash,
373
+ isPending,
374
+ isConfirming,
375
+ isSuccess,
376
+ error,
377
+ isLoading: isPending || isConfirming
378
+ };
379
+ };
380
+
381
+ //#endregion
382
+ //#region src/hooks/market/useOptionPnl.ts
383
+ const useOptionPnl = (optionData) => {
384
+ const { marketAddr, optionType, entryTick, positionSizeCurrent } = optionData;
385
+ const { pool, optionAssetIsToken0, payoutAssetDecimals } = useMarketData(marketAddr);
386
+ const { exact: currentTick } = useCurrentTick(pool);
387
+ const { displayPnl, unrealizedPayout } = (0, react.useMemo)(() => {
388
+ if (optionAssetIsToken0 === void 0 || currentTick === void 0 || !positionSizeCurrent || !payoutAssetDecimals) return {};
389
+ const delta = optionAssetIsToken0 ? require_numberUtils.token0ToToken1(positionSizeCurrent, currentTick) - require_numberUtils.token0ToToken1(positionSizeCurrent, entryTick) : require_numberUtils.token1ToToken0(positionSizeCurrent, currentTick) - require_numberUtils.token1ToToken0(positionSizeCurrent, entryTick);
390
+ const displayPnl$1 = require_numberUtils.wrapAmount(optionType === "CALL" ? delta : -delta, payoutAssetDecimals);
391
+ return {
392
+ unrealizedPayout: require_numberUtils.wrapAmount(displayPnl$1.scaled < 0 ? 0n : displayPnl$1.scaled, payoutAssetDecimals),
393
+ displayPnl: displayPnl$1
394
+ };
395
+ }, [
396
+ optionType,
397
+ optionAssetIsToken0,
398
+ entryTick,
399
+ currentTick,
400
+ positionSizeCurrent,
401
+ payoutAssetDecimals
402
+ ]);
403
+ return {
404
+ displayPnl,
405
+ unrealizedPayout
406
+ };
407
+ };
408
+
409
+ //#endregion
410
+ //#region src/hooks/market/useOptionPremium.ts
411
+ const useOptionPremium = (marketAddr, optionType, optionAmount, duration) => {
412
+ const { pool, payoutAssetDecimals } = useMarketData(marketAddr);
413
+ const { tickSpacing } = usePoolData(pool);
414
+ const currentTick = useCurrentTick(pool);
415
+ const strikeTick = (0, react.useMemo)(() => {
416
+ if (currentTick.rounded === void 0 || tickSpacing === void 0) return;
417
+ return optionType === "CALL" ? currentTick.rounded + tickSpacing : currentTick.rounded;
418
+ }, [
419
+ currentTick.rounded,
420
+ tickSpacing,
421
+ optionType
422
+ ]);
423
+ const { data: premiumData } = (0, wagmi.useReadContract)({
424
+ address: marketAddr,
425
+ abi: require_optionsMarket.optionsMarketAbi,
426
+ functionName: "calculatePremium",
427
+ args: strikeTick !== void 0 ? [
428
+ optionType === "CALL" ? 0 : 1,
429
+ optionAmount,
430
+ strikeTick,
431
+ BigInt(duration)
432
+ ] : void 0,
433
+ query: { enabled: currentTick.rounded !== void 0 && payoutAssetDecimals !== void 0 && tickSpacing !== void 0 && strikeTick !== void 0 }
434
+ });
435
+ return (0, react.useMemo)(() => {
436
+ if (premiumData === void 0 || payoutAssetDecimals === void 0) return;
437
+ return require_numberUtils.wrapAmount(premiumData, payoutAssetDecimals);
438
+ }, [premiumData, payoutAssetDecimals]);
439
+ };
440
+
441
+ //#endregion
442
+ //#region src/hooks/market/useUserOptions.ts
443
+ const useUserOptions = (user, active = false) => {
444
+ const { graphqlClient } = useTimelockConfig();
445
+ const { data: options,...rest } = (0, __tanstack_react_query.useQuery)({
446
+ queryKey: [
447
+ "userTrades",
448
+ user || "--",
449
+ active
450
+ ],
451
+ queryFn: () => active ? graphqlClient === null || graphqlClient === void 0 ? void 0 : graphqlClient.GetActiveUserOptions({ user: user.toLowerCase() }) : graphqlClient === null || graphqlClient === void 0 ? void 0 : graphqlClient.GetClosedUserOptions({ user: user.toLowerCase() }),
452
+ select: (data) => {
453
+ var _data$UserOption;
454
+ return data === null || data === void 0 || (_data$UserOption = data.UserOption) === null || _data$UserOption === void 0 ? void 0 : _data$UserOption.map((option) => ({
455
+ ...option,
456
+ id: BigInt(option.id),
457
+ marketAddr: option.marketAddr,
458
+ optionType: option.optionType,
459
+ createdAt: /* @__PURE__ */ new Date(Number(option.createdAt) * 1e3),
460
+ expiresAt: /* @__PURE__ */ new Date(Number(option.expiresAt) * 1e3),
461
+ premiumPaid: BigInt(option.premiumPaid),
462
+ realizedPayout: BigInt(option.realizedPayout),
463
+ liquiditiesAtOpen: option.liquiditiesAtOpen.map((liquidity) => BigInt(liquidity)),
464
+ liquiditiesCurrent: option.liquiditiesCurrent.map((liquidity) => BigInt(liquidity)),
465
+ positionSizeAtOpen: BigInt(option.positionSizeAtOpen),
466
+ positionSizeCurrent: BigInt(option.positionSizeCurrent),
467
+ strikePrice: BigInt(option.strikePrice),
468
+ entryPrice: BigInt(option.entryPrice)
469
+ }));
470
+ },
471
+ enabled: !!user && !!graphqlClient
472
+ });
473
+ return {
474
+ data: (0, react.useMemo)(() => (options === null || options === void 0 ? void 0 : options.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime())) || [], [options]),
475
+ ...rest
476
+ };
477
+ };
478
+ const useActiveUserOptions = (user) => {
479
+ return useUserOptions(user, true);
480
+ };
481
+ const useClosedUserOptions = (user) => {
482
+ return useUserOptions(user, false);
483
+ };
484
+
485
+ //#endregion
486
+ //#region src/hooks/pool/usePriceAtTick.ts
487
+ const usePriceAtTick = (tick, poolAddr) => {
488
+ const { token0Decimals, token1Decimals } = usePoolData(poolAddr);
489
+ const priceBigInt = (0, react.useMemo)(() => tick ? require_numberUtils.getPriceAtTick(tick) : void 0, [tick]);
490
+ return (0, react.useMemo)(() => priceBigInt && token0Decimals && token1Decimals ? require_numberUtils.wrapPrice(priceBigInt, token0Decimals, token1Decimals) : void 0, [
491
+ priceBigInt,
492
+ token0Decimals,
493
+ token1Decimals
494
+ ]);
495
+ };
496
+
497
+ //#endregion
498
+ //#region src/hooks/pool/useCurrentPrice.ts
499
+ const useCurrentPrice = (poolAddr) => {
500
+ const currentTick = useCurrentTick(poolAddr);
501
+ return {
502
+ currentPrice: usePriceAtTick(currentTick.exact, poolAddr),
503
+ currentTick
504
+ };
505
+ };
506
+
507
+ //#endregion
508
+ //#region src/hooks/vault/useVaultData.ts
509
+ const useVaultData = (vaultAddr) => {
510
+ const { data } = (0, wagmi.useReadContract)({
511
+ address: vaultAddr,
512
+ abi: require_uniswapV3Pool.singleOwnerVaultAbi,
513
+ functionName: "pool"
514
+ });
515
+ return { pool: data };
516
+ };
517
+
518
+ //#endregion
519
+ //#region src/hooks/vault/useBurnLiquidity.ts
520
+ const useBurnLiquidity = (vaultAddr) => {
521
+ const client = (0, wagmi.useClient)();
522
+ const { timelockLens } = useLens();
523
+ const { pool } = useVaultData(vaultAddr);
524
+ const currentTick = useCurrentTick(pool);
525
+ const { writeContractAsync, data: hash, isPending, error } = (0, wagmi.useWriteContract)();
526
+ const { isLoading: isConfirming, isSuccess } = (0, wagmi.useWaitForTransactionReceipt)({ hash });
527
+ const burn = async (tickLower, tickUpper, liquidity) => {
528
+ if (!client) throw new Error("Wallet not connected");
529
+ if (!vaultAddr || !timelockLens) throw new Error("Vault/lens not available");
530
+ const hash$1 = await writeContractAsync({
531
+ address: vaultAddr,
532
+ abi: require_uniswapV3Pool.singleOwnerVaultAbi,
533
+ functionName: "burn",
534
+ args: [
535
+ tickLower,
536
+ tickUpper,
537
+ liquidity,
538
+ await timelockLens.read.getRefTick([vaultAddr, tickLower])
539
+ ]
540
+ });
541
+ await (0, viem_actions.waitForTransactionReceipt)(client, { hash: hash$1 });
542
+ return hash$1;
543
+ };
544
+ const burnMultiple = async (positions) => {
545
+ if (!client) throw new Error("Wallet not connected");
546
+ if (!currentTick.exact) throw new Error("Current tick not available");
547
+ if (positions.length === 0) throw new Error("No positions to burn");
548
+ if (!timelockLens || !vaultAddr) throw new Error("Vault/lens not available");
549
+ if (positions.length === 1) await burn(positions[0].tickLower, positions[0].tickUpper, positions[0].liquidity);
550
+ else {
551
+ const refTicks = await timelockLens.read.batchGetRefTick([vaultAddr, positions.map((position) => position.tickLower)]);
552
+ await (0, viem_actions.waitForTransactionReceipt)(client, { hash: await writeContractAsync({
553
+ address: vaultAddr,
554
+ abi: require_uniswapV3Pool.singleOwnerVaultAbi,
555
+ functionName: "multicall",
556
+ args: [positions.map((p, i) => (0, viem.encodeFunctionData)({
557
+ abi: require_uniswapV3Pool.singleOwnerVaultAbi,
558
+ functionName: "burn",
559
+ args: [
560
+ p.tickLower,
561
+ p.tickUpper,
562
+ p.liquidity,
563
+ refTicks[i]
564
+ ]
565
+ }))]
566
+ }) });
567
+ }
568
+ };
569
+ return {
570
+ burnMultiple,
571
+ burn,
572
+ hash,
573
+ isPending,
574
+ isConfirming,
575
+ isSuccess,
576
+ error,
577
+ isLoading: isPending || isConfirming
578
+ };
579
+ };
580
+
581
+ //#endregion
582
+ //#region src/hooks/vault/useLiquidityBlocks.ts
583
+ const useLiquidityBlocks = (vaultAddr) => {
584
+ const { timelockLens } = useLens();
585
+ const { data: blocks = [],...rest } = (0, wagmi.useReadContract)({
586
+ address: timelockLens === null || timelockLens === void 0 ? void 0 : timelockLens.address,
587
+ abi: require_optionsMarket.lensAbi,
588
+ functionName: "getAllBlocks",
589
+ args: [vaultAddr],
590
+ query: { enabled: !!vaultAddr && !!timelockLens }
591
+ });
592
+ return {
593
+ data: blocks,
594
+ ...rest
595
+ };
596
+ };
597
+
598
+ //#endregion
599
+ //#region src/hooks/vault/useMintLiquidity.ts
600
+ const batchGetAmountsFromLiquidity = async (lens, tickLower, tickUpper, liquidity, currentTick) => {
601
+ const currentTicksArray = new Array(tickLower.length).fill(currentTick);
602
+ const amounts = await lens.read.batchGetAmountsForLiquidityTicks([
603
+ currentTicksArray,
604
+ tickLower,
605
+ tickUpper,
606
+ liquidity
607
+ ]);
608
+ let totalAmount0 = 0n;
609
+ let totalAmount1 = 0n;
610
+ const amounts0 = [];
611
+ const amounts1 = [];
612
+ for (const scaled of amounts[0]) {
613
+ totalAmount0 += scaled;
614
+ amounts0.push(scaled);
615
+ }
616
+ for (const scaled of amounts[1]) {
617
+ totalAmount1 += scaled;
618
+ amounts1.push(scaled);
619
+ }
620
+ return {
621
+ totalAmount0,
622
+ totalAmount1,
623
+ amounts0,
624
+ amounts1
625
+ };
626
+ };
627
+ const useMintLiquidity = (vaultAddr) => {
628
+ const client = (0, wagmi.useClient)();
629
+ const { address } = (0, wagmi.useAccount)();
630
+ const { pool } = useVaultData(vaultAddr);
631
+ const { timelockLens, uniswapLens } = useLens();
632
+ const currentTick = useCurrentTick(pool);
633
+ const { token0, token1 } = usePoolData(pool);
634
+ const { writeContractAsync, data: hash, isPending, error } = (0, wagmi.useWriteContract)();
635
+ const { isLoading: isConfirming, isSuccess } = (0, wagmi.useWaitForTransactionReceipt)({ hash });
636
+ const askForApproval = async (params) => {
637
+ if (!address || !client) throw new Error("Wallet not connected");
638
+ if (currentTick.exact === void 0 || !token0 || !token1 || !vaultAddr || !uniswapLens) throw new Error("Current tick not available");
639
+ const { totalAmount0, totalAmount1 } = await batchGetAmountsFromLiquidity(uniswapLens, params.map((p) => p.tickLower), params.map((p) => p.tickUpper), params.map((p) => p.liquidity), currentTick.exact);
640
+ const [allowance0, allowance1] = await Promise.all([require_numberUtils.getErc20(token0, client).read.allowance([address, vaultAddr]), require_numberUtils.getErc20(token1, client).read.allowance([address, vaultAddr])]);
641
+ const approvalPromises = [];
642
+ if (allowance0 <= totalAmount0) {
643
+ const approvalHash = await writeContractAsync({
644
+ address: token0,
645
+ abi: viem.erc20Abi,
646
+ functionName: "approve",
647
+ args: [vaultAddr, viem.maxUint256]
648
+ });
649
+ approvalPromises.push((0, viem_actions.waitForTransactionReceipt)(client, { hash: approvalHash }));
650
+ }
651
+ if (allowance1 <= totalAmount1) {
652
+ const approvalHash1 = await writeContractAsync({
653
+ address: token1,
654
+ abi: viem.erc20Abi,
655
+ functionName: "approve",
656
+ args: [vaultAddr, viem.maxUint256]
657
+ });
658
+ approvalPromises.push((0, viem_actions.waitForTransactionReceipt)(client, { hash: approvalHash1 }));
659
+ }
660
+ if (approvalPromises.length > 0) await Promise.all(approvalPromises);
661
+ };
662
+ const mint = async (tickLower, tickUpper, liquidity) => {
663
+ if (!client) throw new Error("Wallet not connected");
664
+ if (!vaultAddr || !timelockLens) throw new Error("Vault/lens not available");
665
+ await askForApproval([{
666
+ tickLower,
667
+ tickUpper,
668
+ liquidity
669
+ }]);
670
+ const hash$1 = await writeContractAsync({
671
+ address: vaultAddr,
672
+ abi: require_uniswapV3Pool.singleOwnerVaultAbi,
673
+ functionName: "mint",
674
+ args: [
675
+ tickLower,
676
+ tickUpper,
677
+ liquidity,
678
+ await timelockLens.read.getRefTick([vaultAddr, tickLower])
679
+ ]
680
+ });
681
+ await (0, viem_actions.waitForTransactionReceipt)(client, { hash: hash$1 });
682
+ return hash$1;
683
+ };
684
+ const mintMultiple = async (positions) => {
685
+ if (!client) throw new Error("Wallet not connected");
686
+ if (!currentTick.exact) throw new Error("Current tick not available");
687
+ if (positions.length === 0) throw new Error("No positions to mint");
688
+ if (!timelockLens || !vaultAddr) throw new Error("Vault/lens not available");
689
+ if (positions.length === 1) await mint(positions[0].tickLower, positions[0].tickUpper, positions[0].liquidity);
690
+ else {
691
+ await askForApproval(positions);
692
+ const refTicks = await timelockLens.read.batchGetRefTick([vaultAddr, positions.map((position) => position.tickLower)]);
693
+ await (0, viem_actions.waitForTransactionReceipt)(client, { hash: await writeContractAsync({
694
+ address: vaultAddr,
695
+ abi: require_uniswapV3Pool.singleOwnerVaultAbi,
696
+ functionName: "multicall",
697
+ args: [positions.map((p, i) => (0, viem.encodeFunctionData)({
698
+ abi: require_uniswapV3Pool.singleOwnerVaultAbi,
699
+ functionName: "mint",
700
+ args: [
701
+ p.tickLower,
702
+ p.tickUpper,
703
+ p.liquidity,
704
+ refTicks[i]
705
+ ]
706
+ }))]
707
+ }) });
708
+ }
709
+ };
710
+ return {
711
+ mintMultiple,
712
+ mint,
713
+ hash,
714
+ isPending,
715
+ isConfirming,
716
+ isSuccess,
717
+ error,
718
+ isLoading: isPending || isConfirming
719
+ };
720
+ };
721
+
722
+ //#endregion
723
+ //#region src/hooks/vault/useVaultTVL.ts
724
+ const useVaultTVL = (vaultAddr) => {
725
+ const { timelockLens } = useLens();
726
+ const { pool } = useVaultData(vaultAddr);
727
+ const { token0Decimals, token1Decimals } = usePoolData(pool);
728
+ const { data, refetch } = (0, wagmi.useReadContract)({
729
+ address: timelockLens === null || timelockLens === void 0 ? void 0 : timelockLens.address,
730
+ abi: require_optionsMarket.lensAbi,
731
+ functionName: "getVaultTVL",
732
+ args: [vaultAddr],
733
+ query: { enabled: !!vaultAddr && !!timelockLens }
734
+ });
735
+ const totalAmount0 = data && token0Decimals ? require_numberUtils.wrapAmount(data[0], token0Decimals) : void 0;
736
+ const totalAmount1 = data && token1Decimals ? require_numberUtils.wrapAmount(data[1], token1Decimals) : void 0;
737
+ const borrowedAmount0 = data && token0Decimals ? require_numberUtils.wrapAmount(data[2], token0Decimals) : void 0;
738
+ const borrowedAmount1 = data && token1Decimals ? require_numberUtils.wrapAmount(data[3], token1Decimals) : void 0;
739
+ return {
740
+ tvl0: data && token0Decimals ? require_numberUtils.wrapAmount(data[4], token0Decimals) : void 0,
741
+ tvl1: data && token1Decimals ? require_numberUtils.wrapAmount(data[5], token1Decimals) : void 0,
742
+ totalAmount0,
743
+ totalAmount1,
744
+ borrowedAmount0,
745
+ borrowedAmount1,
746
+ refetch
747
+ };
748
+ };
749
+
750
+ //#endregion
751
+ exports.TimelockMarketProvider = TimelockMarketProvider;
752
+ exports.batchGetAmountsFromLiquidity = batchGetAmountsFromLiquidity;
753
+ exports.useActiveUserOptions = useActiveUserOptions;
754
+ exports.useBurnLiquidity = useBurnLiquidity;
755
+ exports.useClosedUserOptions = useClosedUserOptions;
756
+ exports.useCurrentMarket = useCurrentMarket;
757
+ exports.useCurrentPrice = useCurrentPrice;
758
+ exports.useCurrentTick = useCurrentTick;
759
+ exports.useExerciseOption = useExerciseOption;
760
+ exports.useLens = useLens;
761
+ exports.useLiquidityBlocks = useLiquidityBlocks;
762
+ exports.useMarketData = useMarketData;
763
+ exports.useMaxPositionSize = useMaxPositionSize;
764
+ exports.useMintLiquidity = useMintLiquidity;
765
+ exports.useMintOption = useMintOption;
766
+ exports.useOptionPnl = useOptionPnl;
767
+ exports.useOptionPremium = useOptionPremium;
768
+ exports.usePoolData = usePoolData;
769
+ exports.usePriceAtTick = usePriceAtTick;
770
+ exports.useTimelockConfig = useTimelockConfig;
771
+ exports.useVaultData = useVaultData;
772
+ exports.useVaultTVL = useVaultTVL;
773
+ //# sourceMappingURL=client.cjs.map