timelock-sdk 0.0.177 → 0.0.179

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,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
 
4
- const require_optionUtils = require('./optionUtils-BHU2evq2.cjs');
4
+ const require_optionUtils = require('./optionUtils-013IznJO.cjs');
5
5
  const require_statelessStateView = require('./statelessStateView-CtzW08Yu.cjs');
6
6
  const require_factory = require('./factory-DitVXzjQ.cjs');
7
7
  let viem = require("viem");
@@ -848,7 +848,7 @@ const useUserOptions = (userAddr, marketAddr, active = false) => {
848
848
  const { graphqlClient } = useTimelockConfig();
849
849
  userAddr = userAddr === null || userAddr === void 0 ? void 0 : userAddr.toLowerCase();
850
850
  marketAddr = marketAddr === null || marketAddr === void 0 ? void 0 : marketAddr.toLowerCase();
851
- const { data, ...rest } = (0, __tanstack_react_query.useQuery)({
851
+ return (0, __tanstack_react_query.useQuery)({
852
852
  queryKey: [
853
853
  "userOptions",
854
854
  userAddr || "--",
@@ -883,10 +883,6 @@ const useUserOptions = (userAddr, marketAddr, active = false) => {
883
883
  },
884
884
  enabled: !!userAddr && !!marketAddr && !!graphqlClient
885
885
  });
886
- return {
887
- data: data || require_optionUtils.EMPTY_ARRAY,
888
- ...rest
889
- };
890
886
  };
891
887
  const useActiveUserOptions = (userAddr, marketAddr) => {
892
888
  return useUserOptions(userAddr, marketAddr, true);
@@ -942,7 +938,7 @@ const useExtendOption = (marketAddr) => {
942
938
  const useOptionTimeline = (marketAddr, optionId) => {
943
939
  const { graphqlClient } = useTimelockConfig();
944
940
  marketAddr = marketAddr === null || marketAddr === void 0 ? void 0 : marketAddr.toLowerCase();
945
- const { data, ...rest } = (0, __tanstack_react_query.useQuery)({
941
+ return (0, __tanstack_react_query.useQuery)({
946
942
  queryKey: [
947
943
  "optionTimeline",
948
944
  marketAddr || "--",
@@ -987,26 +983,22 @@ const useOptionTimeline = (marketAddr, optionId) => {
987
983
  transactionHash: event.transactionHash
988
984
  }));
989
985
  return [
990
- ...mintEvents.map((data$1) => ({
986
+ ...mintEvents.map((data) => ({
991
987
  type: "mint",
992
- data: data$1
988
+ data
993
989
  })),
994
- ...exerciseEvents.map((data$1) => ({
990
+ ...exerciseEvents.map((data) => ({
995
991
  type: "exercise",
996
- data: data$1
992
+ data
997
993
  })),
998
- ...extendEvents.map((data$1) => ({
994
+ ...extendEvents.map((data) => ({
999
995
  type: "extend",
1000
- data: data$1
996
+ data
1001
997
  }))
1002
998
  ].sort((a, b) => a.data.timestamp.getTime() - b.data.timestamp.getTime());
1003
999
  },
1004
1000
  enabled: !!marketAddr && optionId !== void 0 && !!graphqlClient
1005
1001
  });
1006
- return {
1007
- data: data || require_optionUtils.EMPTY_ARRAY,
1008
- ...rest
1009
- };
1010
1002
  };
1011
1003
 
1012
1004
  //#endregion
@@ -1082,6 +1074,62 @@ const usePerpsOperator = () => {
1082
1074
  };
1083
1075
  };
1084
1076
 
1077
+ //#endregion
1078
+ //#region src/hooks/operators/useUserOperators.ts
1079
+ const useUserOperators = (userAddr, marketAddr) => {
1080
+ const { graphqlClient } = useTimelockConfig();
1081
+ return (0, __tanstack_react_query.useQuery)({
1082
+ queryKey: [
1083
+ "userOperators",
1084
+ (userAddr === null || userAddr === void 0 ? void 0 : userAddr.toLowerCase()) || "--",
1085
+ (marketAddr === null || marketAddr === void 0 ? void 0 : marketAddr.toLowerCase()) || "--"
1086
+ ],
1087
+ queryFn: async () => {
1088
+ if (!userAddr || !marketAddr) return void 0;
1089
+ return (await graphqlClient.GetUserMarketOperators({
1090
+ userAddr: userAddr.toLowerCase(),
1091
+ marketAddr: marketAddr.toLowerCase()
1092
+ })).UserMarketOperator.map((operator) => ({
1093
+ ...operator,
1094
+ spendingApproval: BigInt(operator.spendingApproval),
1095
+ operatorAddr: operator.operator.address.toLowerCase()
1096
+ }));
1097
+ },
1098
+ enabled: !!userAddr && !!marketAddr && !!graphqlClient
1099
+ });
1100
+ };
1101
+
1102
+ //#endregion
1103
+ //#region src/hooks/operators/useSetOperatorPerms.ts
1104
+ const useSetOperatorPerms = (marketAddr) => {
1105
+ const queryClient = (0, __tanstack_react_query.useQueryClient)();
1106
+ const client = (0, wagmi.useClient)();
1107
+ const { address } = (0, wagmi.useConnection)();
1108
+ const { writeContractAsync } = (0, wagmi.useWriteContract)();
1109
+ const setOperatorPerms = async ({ operator, canExtend, canExercise, canTransfer, canMint, spendingApproval }) => {
1110
+ if (!client || !address) throw new Error("Wallet not connected");
1111
+ if (!marketAddr) throw new Error("Market address not available");
1112
+ const hash = await writeContractAsync({
1113
+ address: marketAddr,
1114
+ abi: require_statelessStateView.optionsMarketAbi,
1115
+ functionName: "setOperatorPerms",
1116
+ args: [
1117
+ operator,
1118
+ canExtend,
1119
+ canExercise,
1120
+ canTransfer,
1121
+ canMint,
1122
+ spendingApproval
1123
+ ]
1124
+ });
1125
+ await (0, viem_actions.waitForTransactionReceipt)(client, { hash });
1126
+ queryClient.invalidateQueries({ queryKey: ["userOperators"] });
1127
+ queryClient.invalidateQueries({ queryKey: ["readContract"] });
1128
+ return hash;
1129
+ };
1130
+ return (0, __tanstack_react_query.useMutation)({ mutationFn: setOperatorPerms });
1131
+ };
1132
+
1085
1133
  //#endregion
1086
1134
  //#region src/hooks/perps/useMintPerp.ts
1087
1135
  const useMintPerp = (marketAddr) => {
@@ -1089,9 +1137,11 @@ const useMintPerp = (marketAddr) => {
1089
1137
  const client = (0, wagmi.useClient)();
1090
1138
  const { address } = (0, wagmi.useConnection)();
1091
1139
  const { operator, address: operatorAddr, signMessage: { mutateAsync: signMessage } } = usePerpsOperator();
1092
- const { askForApproval } = useApproval();
1093
1140
  const { poolManager, poolKey, optionAssetIsToken0, payoutAsset } = useMarketData(marketAddr);
1094
1141
  const { tickSpacing } = usePoolData(poolManager, poolKey);
1142
+ const { askForApproval } = useApproval();
1143
+ const { mutateAsync: setOperatorPerms } = useSetOperatorPerms(marketAddr);
1144
+ const { refetch: refetchOperators } = useUserOperators(address, marketAddr);
1095
1145
  const { refetch: refetchCurrentTick } = useCurrentTick(poolManager, poolKey);
1096
1146
  const mintPerp = async (data) => {
1097
1147
  const { optionType, amount, duration, strikeTick } = data;
@@ -1104,6 +1154,9 @@ const useMintPerp = (marketAddr) => {
1104
1154
  const market = require_optionUtils.getTimelockMarket(marketAddr, client);
1105
1155
  const { data: { currentTick } = {} } = await refetchCurrentTick();
1106
1156
  if (currentTick === void 0) throw new Error("Could not fetch current tick");
1157
+ const { data: operators = [] } = await refetchOperators();
1158
+ const userPerms = operatorAddr ? operators.find((o) => o.operatorAddr.toLowerCase() === operatorAddr.toLowerCase()) : void 0;
1159
+ const hasEnoughPerms = userPerms && userPerms.canMint && userPerms.canExtend && userPerms.canExercise;
1107
1160
  const validStrikeTick = require_optionUtils.getNearestValidStrikeTick(optionType, optionAssetIsToken0, tickSpacing, currentTick, strikeTick);
1108
1161
  const [premium, protocolFee] = await market.read.calculatePremium([
1109
1162
  optionType === "CALL" ? 0 : 1,
@@ -1112,7 +1165,16 @@ const useMintPerp = (marketAddr) => {
1112
1165
  duration,
1113
1166
  0
1114
1167
  ]);
1115
- await askForApproval(payoutAsset, marketAddr, (premium + protocolFee) * 11n / 10n);
1168
+ const maxPremium = (premium + protocolFee) * 11n / 10n;
1169
+ if (!hasEnoughPerms) await setOperatorPerms({
1170
+ operator: operatorAddr,
1171
+ canMint: true,
1172
+ canExtend: true,
1173
+ canExercise: true,
1174
+ canTransfer: (userPerms === null || userPerms === void 0 ? void 0 : userPerms.canTransfer) || false,
1175
+ spendingApproval: maxPremium
1176
+ });
1177
+ await askForApproval(payoutAsset, marketAddr, maxPremium);
1116
1178
  await operator.mintPerp({
1117
1179
  marketAddr,
1118
1180
  amount,
@@ -1146,12 +1208,11 @@ const useClosePerp = () => {
1146
1208
 
1147
1209
  //#endregion
1148
1210
  //#region src/hooks/perps/useUserPerps.ts
1149
- const EMPTY_ARRAY$1 = [];
1150
1211
  const useUserPerps = (marketAddr, userAddr, type) => {
1151
1212
  const { operator } = usePerpsOperator();
1152
1213
  userAddr = userAddr === null || userAddr === void 0 ? void 0 : userAddr.toLowerCase();
1153
1214
  marketAddr = marketAddr === null || marketAddr === void 0 ? void 0 : marketAddr.toLowerCase();
1154
- const { data, ...rest } = (0, __tanstack_react_query.useQuery)({
1215
+ return (0, __tanstack_react_query.useQuery)({
1155
1216
  queryKey: [
1156
1217
  "userPerps",
1157
1218
  type,
@@ -1163,10 +1224,6 @@ const useUserPerps = (marketAddr, userAddr, type) => {
1163
1224
  staleTime: 1e4,
1164
1225
  refetchInterval: 1e4
1165
1226
  });
1166
- return {
1167
- data: data || EMPTY_ARRAY$1,
1168
- ...rest
1169
- };
1170
1227
  };
1171
1228
  const useActiveUserPerps = (marketAddr, userAddr) => {
1172
1229
  return useUserPerps(marketAddr, userAddr, "active");
@@ -1245,66 +1302,6 @@ const useOperatorPerms = (marketAddr, userAddr, operatorAddr) => {
1245
1302
  };
1246
1303
  };
1247
1304
 
1248
- //#endregion
1249
- //#region src/hooks/operators/useUserOperators.ts
1250
- const useUserOperators = (userAddr, marketAddr) => {
1251
- const { graphqlClient } = useTimelockConfig();
1252
- const { data, ...rest } = (0, __tanstack_react_query.useQuery)({
1253
- queryKey: [
1254
- "userOperators",
1255
- (userAddr === null || userAddr === void 0 ? void 0 : userAddr.toLowerCase()) || "--",
1256
- (marketAddr === null || marketAddr === void 0 ? void 0 : marketAddr.toLowerCase()) || "--"
1257
- ],
1258
- queryFn: async () => {
1259
- if (!userAddr || !marketAddr) return void 0;
1260
- return (await graphqlClient.GetUserMarketOperators({
1261
- userAddr: userAddr.toLowerCase(),
1262
- marketAddr: marketAddr.toLowerCase()
1263
- })).UserMarketOperator.map((operator) => ({
1264
- ...operator,
1265
- spendingApproval: BigInt(operator.spendingApproval),
1266
- operatorAddr: operator.operator.address.toLowerCase()
1267
- }));
1268
- },
1269
- enabled: !!userAddr && !!marketAddr && !!graphqlClient
1270
- });
1271
- return {
1272
- ...rest,
1273
- data: data || require_optionUtils.EMPTY_ARRAY
1274
- };
1275
- };
1276
-
1277
- //#endregion
1278
- //#region src/hooks/operators/useSetOperatorPerms.ts
1279
- const useSetOperatorPerms = (marketAddr) => {
1280
- const queryClient = (0, __tanstack_react_query.useQueryClient)();
1281
- const client = (0, wagmi.useClient)();
1282
- const { address } = (0, wagmi.useConnection)();
1283
- const { writeContractAsync } = (0, wagmi.useWriteContract)();
1284
- const setOperatorPerms = async ({ operator, canExtend, canExercise, canTransfer, canMint, spendingApproval }) => {
1285
- if (!client || !address) throw new Error("Wallet not connected");
1286
- if (!marketAddr) throw new Error("Market address not available");
1287
- const hash = await writeContractAsync({
1288
- address: marketAddr,
1289
- abi: require_statelessStateView.optionsMarketAbi,
1290
- functionName: "setOperatorPerms",
1291
- args: [
1292
- operator,
1293
- canExtend,
1294
- canExercise,
1295
- canTransfer,
1296
- canMint,
1297
- spendingApproval
1298
- ]
1299
- });
1300
- await (0, viem_actions.waitForTransactionReceipt)(client, { hash });
1301
- queryClient.invalidateQueries({ queryKey: ["userOperators"] });
1302
- queryClient.invalidateQueries({ queryKey: ["readContract"] });
1303
- return hash;
1304
- };
1305
- return (0, __tanstack_react_query.useMutation)({ mutationFn: setOperatorPerms });
1306
- };
1307
-
1308
1305
  //#endregion
1309
1306
  //#region src/hooks/pool/usePriceHistory.ts
1310
1307
  const usePriceHistory = (pool, token, resolution, startTimestamp, endTimestamp) => {