timelock-sdk 0.0.95 → 0.0.96

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.d.cts CHANGED
@@ -1,3 +1,3 @@
1
1
  import "./uniswapMathLens-B_cHjOOB.cjs";
2
- import { B as OptionTimelineData, F as useUserOperators, G as useMintOption, H as useExtendOption, I as useOperatorPerms, K as useMaxPositionSize, L as usePerpsOperator, P as useSetOperatorPerms, R as useClosePerp, U as useOptionPremium, V as useOptionTimeline, W as useOptionPnl, a as batchGetAmountsFromLiquidity, c as useLiquidityBlocks, ct as useMarketData, d as usePriceAtTick, dt as useActiveUserOptions, f as UniswapPoolData, ft as useClosedUserOptions, h as useCurrentPrice, ht as useTimelockConfig, i as useVaultData, l as useBurnLiquidity, lt as useExerciseOption, m as useCurrentTick, mt as useCurrentMarket, n as useLens, o as useMintLiquidity, p as usePoolData, pt as TimelockProvider, r as useVaultTVL, s as LiquidityBlockData, t as useApproval, u as usePriceHistory, ut as OptionData, z as useMintPerp } from "./client-BanYHaNs.cjs";
2
+ import { B as OptionTimelineData, F as useUserOperators, G as useMintOption, H as useExtendOption, I as useOperatorPerms, K as useMaxPositionSize, L as usePerpsOperator, P as useSetOperatorPerms, R as useClosePerp, U as useOptionPremium, V as useOptionTimeline, W as useOptionPnl, a as batchGetAmountsFromLiquidity, c as useLiquidityBlocks, ct as useMarketData, d as usePriceAtTick, dt as useActiveUserOptions, f as UniswapPoolData, ft as useClosedUserOptions, h as useCurrentPrice, ht as useTimelockConfig, i as useVaultData, l as useBurnLiquidity, lt as useExerciseOption, m as useCurrentTick, mt as useCurrentMarket, n as useLens, o as useMintLiquidity, p as usePoolData, pt as TimelockProvider, r as useVaultTVL, s as LiquidityBlockData, t as useApproval, u as usePriceHistory, ut as OptionData, z as useMintPerp } from "./client-CLDy2ktP.cjs";
3
3
  export { LiquidityBlockData, OptionData, OptionTimelineData, TimelockProvider, UniswapPoolData, batchGetAmountsFromLiquidity, useActiveUserOptions, useApproval, useBurnLiquidity, useClosePerp, useClosedUserOptions, useCurrentMarket, useCurrentPrice, useCurrentTick, useExerciseOption, useExtendOption, useLens, useLiquidityBlocks, useMarketData, useMaxPositionSize, useMintLiquidity, useMintOption, useMintPerp, useOperatorPerms, useOptionPnl, useOptionPremium, useOptionTimeline, usePerpsOperator, usePoolData, usePriceAtTick, usePriceHistory, useSetOperatorPerms, useTimelockConfig, useUserOperators, useVaultData, useVaultTVL };
package/dist/client.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import "./uniswapMathLens-ChJFZ6hc.js";
2
- import { B as OptionTimelineData, F as useUserOperators, G as useMintOption, H as useExtendOption, I as useOperatorPerms, K as useMaxPositionSize, L as usePerpsOperator, P as useSetOperatorPerms, R as useClosePerp, U as useOptionPremium, V as useOptionTimeline, W as useOptionPnl, a as batchGetAmountsFromLiquidity, c as useLiquidityBlocks, ct as useMarketData, d as usePriceAtTick, dt as useActiveUserOptions, f as UniswapPoolData, ft as useClosedUserOptions, h as useCurrentPrice, ht as useTimelockConfig, i as useVaultData, l as useBurnLiquidity, lt as useExerciseOption, m as useCurrentTick, mt as useCurrentMarket, n as useLens, o as useMintLiquidity, p as usePoolData, pt as TimelockProvider, r as useVaultTVL, s as LiquidityBlockData, t as useApproval, u as usePriceHistory, ut as OptionData, z as useMintPerp } from "./client-BSZsqyLp.js";
2
+ import { B as OptionTimelineData, F as useUserOperators, G as useMintOption, H as useExtendOption, I as useOperatorPerms, K as useMaxPositionSize, L as usePerpsOperator, P as useSetOperatorPerms, R as useClosePerp, U as useOptionPremium, V as useOptionTimeline, W as useOptionPnl, a as batchGetAmountsFromLiquidity, c as useLiquidityBlocks, ct as useMarketData, d as usePriceAtTick, dt as useActiveUserOptions, f as UniswapPoolData, ft as useClosedUserOptions, h as useCurrentPrice, ht as useTimelockConfig, i as useVaultData, l as useBurnLiquidity, lt as useExerciseOption, m as useCurrentTick, mt as useCurrentMarket, n as useLens, o as useMintLiquidity, p as usePoolData, pt as TimelockProvider, r as useVaultTVL, s as LiquidityBlockData, t as useApproval, u as usePriceHistory, ut as OptionData, z as useMintPerp } from "./client-CCZ_Mj39.js";
3
3
  export { LiquidityBlockData, OptionData, OptionTimelineData, TimelockProvider, UniswapPoolData, batchGetAmountsFromLiquidity, useActiveUserOptions, useApproval, useBurnLiquidity, useClosePerp, useClosedUserOptions, useCurrentMarket, useCurrentPrice, useCurrentTick, useExerciseOption, useExtendOption, useLens, useLiquidityBlocks, useMarketData, useMaxPositionSize, useMintLiquidity, useMintOption, useMintPerp, useOperatorPerms, useOptionPnl, useOptionPremium, useOptionTimeline, usePerpsOperator, usePoolData, usePriceAtTick, usePriceHistory, useSetOperatorPerms, useTimelockConfig, useUserOperators, useVaultData, useVaultTVL };
package/dist/client.js CHANGED
@@ -5,12 +5,13 @@ import { r as lensAbi, t as optionsMarketAbi } from "./optionsMarket-DBuVI-kl.js
5
5
  import { A as getErc20, D as token1ToToken0, E as token0ToToken1, F as uniswapMathLenses, M as getTimelockMarket, N as getUniswapMathLens, P as timelockLenses, _ as getAmountsFromLiquidity, d as wrapAmount, j as getTimelockLens, k as getPriceHistory, n as EMPTY_ARRAY, p as wrapPrice, t as getPayoutAtTick, v as getNearestValidStrikeTick, w as roundTickDown, y as getPriceAtTick } from "./optionUtils-BkogxEAT.js";
6
6
  import { n as uniswapV3PoolAbi, t as singleOwnerVaultAbi } from "./singleOwnerVault-BeJChjfJ.js";
7
7
  import { encodeAbiParameters, encodeFunctionData, erc20Abi, maxUint256, zeroAddress } from "viem";
8
- import React, { createContext, useContext, useMemo } from "react";
9
- import { useAccount, useChainId, useClient, useReadContract, useWaitForTransactionReceipt, useWriteContract } from "wagmi";
8
+ import React, { createContext, useContext, useEffect, useMemo } from "react";
9
+ import { useAccount, useChainId, useClient, useReadContract, useSignMessage, useWaitForTransactionReceipt, useWriteContract } from "wagmi";
10
10
  import { GraphQLClient, RequestOptions } from "graphql-request";
11
11
  import gql from "graphql-tag";
12
12
  import { waitForTransactionReceipt } from "viem/actions";
13
13
  import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
14
+ import { z } from "zod";
14
15
 
15
16
  //#region src/generated/graphql.ts
16
17
  const UserOptionFieldsFragmentDoc = gql`
@@ -793,12 +794,13 @@ const useOptionTimeline = (marketAddr, optionId) => {
793
794
  //#endregion
794
795
  //#region src/lib/perpsOperator.ts
795
796
  var PerpsOperator = class {
796
- baseUrl;
797
+ #baseUrl;
798
+ #auth;
797
799
  constructor(baseUrl) {
798
- this.baseUrl = baseUrl;
800
+ this.#baseUrl = baseUrl;
799
801
  }
800
802
  async #request(path, body) {
801
- const url = new URL(path, this.baseUrl);
803
+ const url = new URL(path, this.#baseUrl);
802
804
  const res = await fetch(url, {
803
805
  method: body ? "POST" : "GET",
804
806
  headers: {
@@ -824,6 +826,27 @@ var PerpsOperator = class {
824
826
  const { address } = await this.#request("api/operator/address");
825
827
  return address;
826
828
  }
829
+ async genAuthMessage(userAddr) {
830
+ const { message } = await this.#request("api/auth/message", { userAddr });
831
+ return message;
832
+ }
833
+ async validateAuthMessage(authMessage, signature) {
834
+ const { address, createdAt, validUntil } = await this.#request("api/auth/validate", {
835
+ authMessage,
836
+ signature
837
+ });
838
+ return {
839
+ address,
840
+ createdAt,
841
+ validUntil
842
+ };
843
+ }
844
+ setAuth(authMessage, signature) {
845
+ this.#auth = {
846
+ authMessage,
847
+ signature
848
+ };
849
+ }
827
850
  async getUserPerps(userAddr, marketAddr, type, offset = 0, limit = 1e3) {
828
851
  const params = new URLSearchParams({
829
852
  offset: offset.toString(),
@@ -838,8 +861,10 @@ var PerpsOperator = class {
838
861
  }));
839
862
  }
840
863
  async mintPerp(body) {
864
+ if (!this.#auth) throw new Error("Authentication required. Call setAuth() with authMessage and signature before exercising perps.");
841
865
  const { txHash, optionId } = await this.#request("api/positions/mint", {
842
866
  ...body,
867
+ ...this.#auth,
843
868
  amount: body.amount.toString()
844
869
  });
845
870
  return {
@@ -848,8 +873,10 @@ var PerpsOperator = class {
848
873
  };
849
874
  }
850
875
  async exercisePerp(body) {
876
+ if (!this.#auth) throw new Error("Authentication required. Call setAuth() with authMessage and signature before exercising perps.");
851
877
  const { txHash, optionId } = await this.#request("api/positions/exercise", {
852
878
  ...body,
879
+ ...this.#auth,
853
880
  optionId: body.optionId.toString(),
854
881
  liquidities: body.liquidities.map((l) => l.toString())
855
882
  });
@@ -862,8 +889,38 @@ var PerpsOperator = class {
862
889
 
863
890
  //#endregion
864
891
  //#region src/hooks/perps/usePerpsOperator.ts
892
+ const ZHex = z.string().regex(/^0x[a-fA-F0-9]+$/, "Invalid hex string").transform((v) => v);
893
+ const ZSavedSignature = z.object({
894
+ signature: ZHex,
895
+ message: z.string()
896
+ });
897
+ const getSavedSignature = (userAddr) => {
898
+ const key = `perps-auth-${userAddr.toLowerCase()}`;
899
+ const raw = localStorage.getItem(key);
900
+ if (!raw) return;
901
+ try {
902
+ return ZSavedSignature.parse(JSON.parse(raw));
903
+ } catch (error) {
904
+ clearSignature(userAddr);
905
+ throw new Error("Invalid stored signature: " + raw);
906
+ }
907
+ };
908
+ const saveSignature = (userAddr, message, signature) => {
909
+ const key = `perps-auth-${userAddr.toLowerCase()}`;
910
+ const data = JSON.stringify({
911
+ message,
912
+ signature
913
+ });
914
+ localStorage.setItem(key, data);
915
+ };
916
+ const clearSignature = (userAddr) => {
917
+ const key = `perps-auth-${userAddr.toLowerCase()}`;
918
+ localStorage.removeItem(key);
919
+ };
865
920
  const usePerpsOperator = () => {
921
+ const { address: userAddr } = useAccount();
866
922
  const { perpsOperatorUrl } = useTimelockConfig();
923
+ const { signMessageAsync } = useSignMessage();
867
924
  const operator = useMemo(() => perpsOperatorUrl ? new PerpsOperator(perpsOperatorUrl) : void 0, [perpsOperatorUrl]);
868
925
  const { data: address } = useQuery({
869
926
  queryKey: ["perpsOperatorAddr", perpsOperatorUrl || "--"],
@@ -872,9 +929,34 @@ const usePerpsOperator = () => {
872
929
  refetchInterval: 1e4,
873
930
  enabled: !!operator
874
931
  });
932
+ const validateAndSetAuth = async (message, signature) => {
933
+ if (!operator || !userAddr) return;
934
+ try {
935
+ const { address: address$1, validUntil } = await operator.validateAuthMessage(message, signature);
936
+ if (validUntil < Date.now()) throw new Error("Signature expired");
937
+ if (address$1 !== userAddr) throw new Error("Valid signature but different user address");
938
+ operator.setAuth(userAddr, signature);
939
+ } catch (error) {
940
+ clearSignature(userAddr);
941
+ console.error(error);
942
+ }
943
+ };
944
+ useEffect(() => {
945
+ if (!userAddr || !operator) return;
946
+ const sig = getSavedSignature(userAddr);
947
+ if (!sig) return;
948
+ validateAndSetAuth(sig.message, sig.signature);
949
+ }, [userAddr, operator]);
875
950
  return {
876
951
  operator,
877
- address
952
+ address,
953
+ signMessage: useMutation({ mutationFn: async () => {
954
+ if (!operator || !userAddr || !signMessageAsync) return;
955
+ const message = await operator.genAuthMessage(userAddr);
956
+ const signature = await signMessageAsync({ message });
957
+ saveSignature(userAddr, message, signature);
958
+ operator.setAuth(message, signature);
959
+ } })
878
960
  };
879
961
  };
880
962
 
@@ -1006,7 +1088,7 @@ const useClosePerp = () => {
1006
1088
  };
1007
1089
 
1008
1090
  //#endregion
1009
- //#region src/hooks/operators/useOperatorPerps.ts
1091
+ //#region src/hooks/operators/useOperatorPerms.ts
1010
1092
  const useOperatorPerms = (marketAddr, userAddr, operatorAddr) => {
1011
1093
  const { data,...rest } = useReadContract({
1012
1094
  abi: optionsMarketAbi,