timelock-sdk 0.0.95 → 0.0.97
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-BSZsqyLp.d.ts → client--LwyAjN0.d.ts} +274 -263
- package/dist/{client-BanYHaNs.d.cts → client-uwDDNqle.d.cts} +15 -4
- package/dist/client.cjs +94 -9
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.js +95 -11
- package/dist/client.js.map +1 -1
- package/dist/package.d.cts +1 -1
- package/dist/package.d.ts +1 -1
- package/package.json +2 -2
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-
|
|
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-uwDDNqle.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
|
|
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--LwyAjN0.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
|
|
800
|
+
this.#baseUrl = baseUrl;
|
|
799
801
|
}
|
|
800
802
|
async #request(path, body) {
|
|
801
|
-
const url = new URL(path, this
|
|
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
|
|
|
@@ -948,7 +1030,7 @@ const useMintPerp = (marketAddr) => {
|
|
|
948
1030
|
const queryClient = useQueryClient();
|
|
949
1031
|
const client = useClient();
|
|
950
1032
|
const { address } = useAccount();
|
|
951
|
-
const { operator, address: operatorAddr } = usePerpsOperator();
|
|
1033
|
+
const { operator, address: operatorAddr, signMessage: { mutateAsync: signMessage } } = usePerpsOperator();
|
|
952
1034
|
const { askForApproval } = useApproval();
|
|
953
1035
|
const { data: operators } = useUserOperators(address, marketAddr);
|
|
954
1036
|
const { mutateAsync: setOperatorPerms } = useSetOperatorPerms(marketAddr);
|
|
@@ -964,6 +1046,7 @@ const useMintPerp = (marketAddr) => {
|
|
|
964
1046
|
if (!operator || !operatorAddr) throw new Error("Operator address not found");
|
|
965
1047
|
if (!tickSpacing || currentTick === void 0) throw new Error("Pool data not found");
|
|
966
1048
|
if (optionAssetIsToken0 === void 0 || !payoutAsset) throw new Error("Market data not found");
|
|
1049
|
+
if (!operator.auth) await signMessage();
|
|
967
1050
|
if (!hasEnoughPerms) await setOperatorPerms({
|
|
968
1051
|
operator: operatorAddr,
|
|
969
1052
|
canMint: true,
|
|
@@ -998,15 +1081,16 @@ const useMintPerp = (marketAddr) => {
|
|
|
998
1081
|
//#endregion
|
|
999
1082
|
//#region src/hooks/perps/useClosePerp.ts
|
|
1000
1083
|
const useClosePerp = () => {
|
|
1001
|
-
const { operator } = usePerpsOperator();
|
|
1002
|
-
return useMutation({ mutationFn: (body) => {
|
|
1084
|
+
const { operator, signMessage: { mutateAsync: signMessage } } = usePerpsOperator();
|
|
1085
|
+
return useMutation({ mutationFn: async (body) => {
|
|
1003
1086
|
if (!operator) throw new Error("Operator not connected");
|
|
1004
|
-
|
|
1087
|
+
if (!operator.auth) await signMessage();
|
|
1088
|
+
return await operator.exercisePerp(body);
|
|
1005
1089
|
} });
|
|
1006
1090
|
};
|
|
1007
1091
|
|
|
1008
1092
|
//#endregion
|
|
1009
|
-
//#region src/hooks/operators/
|
|
1093
|
+
//#region src/hooks/operators/useOperatorPerms.ts
|
|
1010
1094
|
const useOperatorPerms = (marketAddr, userAddr, operatorAddr) => {
|
|
1011
1095
|
const { data,...rest } = useReadContract({
|
|
1012
1096
|
abi: optionsMarketAbi,
|