@turtleclub/hooks 0.3.0 → 0.3.1-beta.0
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/index.cjs +11 -133
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +11 -133
- package/dist/index.js.map +1 -1
- package/package.json +2 -3
- package/src/campaigns-v2/index.ts +0 -1
- package/src/campaigns-v2/useUserCampaignPositions.ts +11 -29
- package/src/campaigns-v2/useTonCampaignPositions.ts +0 -141
package/dist/index.js
CHANGED
|
@@ -425,7 +425,6 @@ __export(campaigns_v2_exports, {
|
|
|
425
425
|
useEvmCampaignPositions: () => useEvmCampaignPositions,
|
|
426
426
|
useKatanaCampaign: () => useKatanaCampaign,
|
|
427
427
|
useTacCampaign: () => useTacCampaign,
|
|
428
|
-
useTonCampaignPositions: () => useTonCampaignPositions,
|
|
429
428
|
useUserCampaignPositions: () => useUserCampaignPositions
|
|
430
429
|
});
|
|
431
430
|
|
|
@@ -4267,149 +4266,28 @@ function useEvmCampaignPositions({
|
|
|
4267
4266
|
return result;
|
|
4268
4267
|
}
|
|
4269
4268
|
|
|
4270
|
-
// src/campaigns-v2/useTonCampaignPositions.ts
|
|
4271
|
-
import { useCallback as useCallback3, useMemo as useMemo4 } from "react";
|
|
4272
|
-
import { useQuery as useQuery18 } from "@tanstack/react-query";
|
|
4273
|
-
import { TonClient4 } from "@ton/ton";
|
|
4274
|
-
function useTonCampaignPositions({
|
|
4275
|
-
campaignName,
|
|
4276
|
-
userAddress
|
|
4277
|
-
}) {
|
|
4278
|
-
const { vaults } = useCampaign(campaignName);
|
|
4279
|
-
const isTestnet = userAddress?.includes("0Q");
|
|
4280
|
-
const tonClient4 = useMemo4(() => {
|
|
4281
|
-
const endpoint = isTestnet ? "https://testnet-v4.tonhubapi.com" : "https://mainnet-v4.tonhubapi.com";
|
|
4282
|
-
return new TonClient4({ endpoint });
|
|
4283
|
-
}, [isTestnet]);
|
|
4284
|
-
const tonVaults = useMemo4(() => {
|
|
4285
|
-
if (!userAddress) return [];
|
|
4286
|
-
return vaults.filter(
|
|
4287
|
-
(vault) => vault.vedaProviderConfig?.deployments[0]
|
|
4288
|
-
);
|
|
4289
|
-
}, [vaults, userAddress]);
|
|
4290
|
-
const {
|
|
4291
|
-
data: positions,
|
|
4292
|
-
isLoading,
|
|
4293
|
-
error: queryError,
|
|
4294
|
-
refetch: refetchUserPositions
|
|
4295
|
-
} = useQuery18({
|
|
4296
|
-
queryKey: ["ton-positions", userAddress, campaignName, tonVaults.length],
|
|
4297
|
-
queryFn: async () => {
|
|
4298
|
-
if (!userAddress || tonVaults.length === 0) {
|
|
4299
|
-
return {
|
|
4300
|
-
userPositions: [],
|
|
4301
|
-
userTotalTVL: 0
|
|
4302
|
-
};
|
|
4303
|
-
}
|
|
4304
|
-
const userPositionsById = {};
|
|
4305
|
-
let userTotalTVL = 0;
|
|
4306
|
-
for (const vault of tonVaults) {
|
|
4307
|
-
let userBalance = 0n;
|
|
4308
|
-
let userVaultTVL = 0;
|
|
4309
|
-
if (vault.vedaProviderConfig?.deployments[0].chainId === 239) {
|
|
4310
|
-
const apiEndpoint = isTestnet ? "https://testnet.tonapi.io/v2" : "https://tonapi.io/v2";
|
|
4311
|
-
const response = await fetch(`${apiEndpoint}/accounts/${userAddress}/jettons`);
|
|
4312
|
-
const data = await response.json();
|
|
4313
|
-
const tacTONBalance = data.balances?.find(
|
|
4314
|
-
(balance) => balance.jetton?.symbol === "tacTON"
|
|
4315
|
-
);
|
|
4316
|
-
if (tacTONBalance) {
|
|
4317
|
-
const rawBalance = BigInt(tacTONBalance.balance);
|
|
4318
|
-
const decimals = tacTONBalance.jetton?.decimals || 9;
|
|
4319
|
-
const readableBalance = Number(rawBalance) / Math.pow(10, decimals);
|
|
4320
|
-
userVaultTVL = readableBalance * 2.9629 * (1.4 / 2008.205653);
|
|
4321
|
-
userBalance = BigInt(Math.floor(readableBalance * 1e9));
|
|
4322
|
-
} else {
|
|
4323
|
-
userBalance = 0n;
|
|
4324
|
-
userVaultTVL = 0;
|
|
4325
|
-
}
|
|
4326
|
-
}
|
|
4327
|
-
if (userBalance > 0n || userVaultTVL > 0) {
|
|
4328
|
-
const existingPosition = userPositionsById[vault.id];
|
|
4329
|
-
if (existingPosition) {
|
|
4330
|
-
userPositionsById[vault.id] = {
|
|
4331
|
-
vault,
|
|
4332
|
-
userBalance: existingPosition.userBalance + userBalance,
|
|
4333
|
-
userTVL: existingPosition.userTVL + userVaultTVL
|
|
4334
|
-
};
|
|
4335
|
-
} else {
|
|
4336
|
-
userPositionsById[vault.id] = {
|
|
4337
|
-
vault,
|
|
4338
|
-
userBalance,
|
|
4339
|
-
userTVL: userVaultTVL
|
|
4340
|
-
};
|
|
4341
|
-
}
|
|
4342
|
-
userTotalTVL += userVaultTVL;
|
|
4343
|
-
}
|
|
4344
|
-
}
|
|
4345
|
-
const userPositions = Object.values(userPositionsById);
|
|
4346
|
-
return {
|
|
4347
|
-
userPositions,
|
|
4348
|
-
userTotalTVL
|
|
4349
|
-
};
|
|
4350
|
-
},
|
|
4351
|
-
enabled: !!userAddress && tonVaults.length > 0,
|
|
4352
|
-
staleTime: 3e4,
|
|
4353
|
-
// 30 seconds
|
|
4354
|
-
gcTime: 6e4,
|
|
4355
|
-
// 1 minute
|
|
4356
|
-
refetchOnMount: false,
|
|
4357
|
-
refetchOnWindowFocus: false,
|
|
4358
|
-
refetchOnReconnect: false
|
|
4359
|
-
});
|
|
4360
|
-
const invalidateUserPositions = useCallback3(async () => {
|
|
4361
|
-
await refetchUserPositions();
|
|
4362
|
-
}, [refetchUserPositions]);
|
|
4363
|
-
const result = useMemo4(
|
|
4364
|
-
() => ({
|
|
4365
|
-
userPositions: positions?.userPositions ?? [],
|
|
4366
|
-
userTotalTVL: positions?.userTotalTVL ?? 0,
|
|
4367
|
-
isLoading,
|
|
4368
|
-
error: queryError,
|
|
4369
|
-
invalidateUserPositions
|
|
4370
|
-
}),
|
|
4371
|
-
[positions, isLoading, queryError, invalidateUserPositions]
|
|
4372
|
-
);
|
|
4373
|
-
return result;
|
|
4374
|
-
}
|
|
4375
|
-
|
|
4376
4269
|
// src/campaigns-v2/useUserCampaignPositions.ts
|
|
4377
|
-
import { useCallback as
|
|
4270
|
+
import { useCallback as useCallback3, useMemo as useMemo4 } from "react";
|
|
4378
4271
|
function useUserCampaignPositions({
|
|
4379
4272
|
campaignName,
|
|
4380
4273
|
userAddress
|
|
4381
4274
|
}) {
|
|
4382
4275
|
const { vaults } = useCampaign(campaignName);
|
|
4383
|
-
const
|
|
4384
|
-
(vault) => vault.vedaProviderConfig?.[1]
|
|
4385
|
-
);
|
|
4386
|
-
const hasEVMVaults = vaults.some(
|
|
4387
|
-
(vault) => !vault.vedaProviderConfig?.[1]
|
|
4388
|
-
);
|
|
4276
|
+
const hasEVMVaults = vaults.some((vault) => !vault.vedaProviderConfig?.[1]);
|
|
4389
4277
|
const evmPositions = useEvmCampaignPositions({
|
|
4390
4278
|
campaignName,
|
|
4391
4279
|
userAddress: hasEVMVaults ? userAddress : void 0
|
|
4392
4280
|
});
|
|
4393
|
-
const
|
|
4394
|
-
|
|
4395
|
-
|
|
4396
|
-
});
|
|
4397
|
-
const userPositions = useMemo5(() => [
|
|
4398
|
-
...evmPositions.userPositions,
|
|
4399
|
-
...tonPositions.userPositions
|
|
4400
|
-
], [evmPositions.userPositions, tonPositions.userPositions]);
|
|
4401
|
-
const userTotalTVL = useMemo5(
|
|
4402
|
-
() => evmPositions.userTotalTVL + tonPositions.userTotalTVL,
|
|
4403
|
-
[evmPositions.userTotalTVL, tonPositions.userTotalTVL]
|
|
4281
|
+
const userPositions = useMemo4(
|
|
4282
|
+
() => [...evmPositions.userPositions],
|
|
4283
|
+
[evmPositions.userPositions]
|
|
4404
4284
|
);
|
|
4405
|
-
const
|
|
4406
|
-
const
|
|
4407
|
-
const
|
|
4408
|
-
|
|
4409
|
-
|
|
4410
|
-
|
|
4411
|
-
]);
|
|
4412
|
-
}, [evmPositions.invalidateUserPositions, tonPositions.invalidateUserPositions]);
|
|
4285
|
+
const userTotalTVL = useMemo4(() => evmPositions.userTotalTVL, [evmPositions.userTotalTVL]);
|
|
4286
|
+
const isLoading = evmPositions.isLoading;
|
|
4287
|
+
const error = evmPositions.error;
|
|
4288
|
+
const invalidateUserPositions = useCallback3(async () => {
|
|
4289
|
+
await Promise.all([evmPositions.invalidateUserPositions()]);
|
|
4290
|
+
}, [evmPositions.invalidateUserPositions]);
|
|
4413
4291
|
return {
|
|
4414
4292
|
userPositions,
|
|
4415
4293
|
userTotalTVL,
|