@turtleclub/hooks 0.5.0-beta.42 → 0.5.0-beta.44
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 +383 -181
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +378 -178
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/v2/earn-actions/useEarnDeposit.ts +10 -4
- package/src/v2/earn-deposits/hooks/useActionsDefaultParams.ts +122 -0
- package/src/v2/earn-deposits/hooks/useDepositFlow.ts +8 -3
- package/src/v2/earn-deposits/hooks.ts +7 -0
- package/src/v2/index.ts +1 -0
- package/src/v2/membership-flow/hooks.ts +204 -0
- package/src/v2/membership-flow/index.ts +1 -0
package/dist/index.cjs
CHANGED
|
@@ -167,6 +167,7 @@ __export(index_exports, {
|
|
|
167
167
|
tokenSchema: () => tokenSchema,
|
|
168
168
|
transactionSchema: () => transactionSchema,
|
|
169
169
|
txResponseItemSchema: () => txResponseItemSchema,
|
|
170
|
+
useActionsDefaultParams: () => useActionsDefaultParams,
|
|
170
171
|
useAttributeAction: () => useAttributeAction,
|
|
171
172
|
useBalance: () => useBalance2,
|
|
172
173
|
useCancelDepositAction: () => useCancelDepositAction,
|
|
@@ -211,6 +212,7 @@ __export(index_exports, {
|
|
|
211
212
|
useSupportedTokens: () => useSupportedTokens,
|
|
212
213
|
useSwapRoute: () => useSwapRoute,
|
|
213
214
|
useTokenBalance: () => useTokenBalance,
|
|
215
|
+
useTurtleMembershipFlow: () => useTurtleMembershipFlow,
|
|
214
216
|
useUpdateProduct: () => useUpdateProduct,
|
|
215
217
|
useUploadProductLogo: () => useUploadProductLogo,
|
|
216
218
|
useUserById: () => useUserById,
|
|
@@ -1895,7 +1897,7 @@ function useCreateMembership() {
|
|
|
1895
1897
|
}
|
|
1896
1898
|
|
|
1897
1899
|
// src/v2/earn-deposits/hooks.ts
|
|
1898
|
-
var
|
|
1900
|
+
var import_react_query9 = require("@tanstack/react-query");
|
|
1899
1901
|
|
|
1900
1902
|
// src/v2/earn-deposits/hooks/useDepositValidation.ts
|
|
1901
1903
|
var import_react = require("react");
|
|
@@ -2339,7 +2341,7 @@ var balanceQueries = (0, import_query_key_factory15.createQueryKeys)("balance",
|
|
|
2339
2341
|
// src/v2/earn-actions/useEarnDeposit.ts
|
|
2340
2342
|
var DEFAULT_SLIPPAGE_BPS = 50;
|
|
2341
2343
|
function useEarnDeposit(options) {
|
|
2342
|
-
const { opportunity, userAddress, distributorId,
|
|
2344
|
+
const { opportunity, userAddress, distributorId, executeTransactionAndWait, onSuccess, referralCode } = options;
|
|
2343
2345
|
const queryClient = (0, import_react_query5.useQueryClient)();
|
|
2344
2346
|
const [isConfirming, setIsConfirming] = (0, import_react4.useState)(false);
|
|
2345
2347
|
const [error, setError] = (0, import_react4.useState)(null);
|
|
@@ -2360,7 +2362,7 @@ function useEarnDeposit(options) {
|
|
|
2360
2362
|
let lastTxHash;
|
|
2361
2363
|
for (const txItem of transactions) {
|
|
2362
2364
|
const txRequest = toTransactionRequest(txItem);
|
|
2363
|
-
const txHash = await
|
|
2365
|
+
const txHash = await executeTransactionAndWait(txRequest);
|
|
2364
2366
|
if (!txHash) {
|
|
2365
2367
|
throw new Error(`Transaction failed: ${txItem.description || "Unknown transaction"}`);
|
|
2366
2368
|
}
|
|
@@ -2368,7 +2370,7 @@ function useEarnDeposit(options) {
|
|
|
2368
2370
|
}
|
|
2369
2371
|
return lastTxHash;
|
|
2370
2372
|
},
|
|
2371
|
-
[
|
|
2373
|
+
[executeTransactionAndWait, toTransactionRequest]
|
|
2372
2374
|
);
|
|
2373
2375
|
const attributeTransactionSafely = (0, import_react4.useCallback)(
|
|
2374
2376
|
async (actionId, txHash) => {
|
|
@@ -2471,7 +2473,7 @@ function useDepositFlow({
|
|
|
2471
2473
|
userAddress,
|
|
2472
2474
|
distributorId,
|
|
2473
2475
|
balances,
|
|
2474
|
-
|
|
2476
|
+
executeTransactionAndWait,
|
|
2475
2477
|
onDepositSuccess,
|
|
2476
2478
|
refetchBalances,
|
|
2477
2479
|
slippageBps,
|
|
@@ -2493,7 +2495,7 @@ function useDepositFlow({
|
|
|
2493
2495
|
opportunity,
|
|
2494
2496
|
userAddress,
|
|
2495
2497
|
distributorId,
|
|
2496
|
-
|
|
2498
|
+
executeTransactionAndWait,
|
|
2497
2499
|
onSuccess: () => {
|
|
2498
2500
|
selection.setAmount(void 0);
|
|
2499
2501
|
refetchBalances?.();
|
|
@@ -2531,163 +2533,13 @@ function useDepositFlow({
|
|
|
2531
2533
|
};
|
|
2532
2534
|
}
|
|
2533
2535
|
|
|
2534
|
-
// src/v2/earn-deposits/hooks.ts
|
|
2535
|
-
function useDeposits({ params, enabled = true }) {
|
|
2536
|
-
return (0, import_react_query6.useQuery)({
|
|
2537
|
-
...earnDepositsQueries.byParams(params),
|
|
2538
|
-
...queryDefaults,
|
|
2539
|
-
enabled
|
|
2540
|
-
});
|
|
2541
|
-
}
|
|
2542
|
-
|
|
2543
|
-
// src/v2/enso-balances/hooks.ts
|
|
2544
|
-
var import_react6 = require("react");
|
|
2545
|
-
var import_react_query7 = require("@tanstack/react-query");
|
|
2546
|
-
function useMultiChainBalances({
|
|
2547
|
-
chainIds,
|
|
2548
|
-
address
|
|
2549
|
-
}) {
|
|
2550
|
-
const queries2 = (0, import_react_query7.useQueries)({
|
|
2551
|
-
queries: chainIds.map((chainId) => ({
|
|
2552
|
-
...ensoBalancesQueries.byParams({ user: address || "", chain: chainId }),
|
|
2553
|
-
enabled: !!address,
|
|
2554
|
-
staleTime: 60 * 1e3,
|
|
2555
|
-
refetchInterval: 3 * 60 * 1e3,
|
|
2556
|
-
refetchOnMount: false,
|
|
2557
|
-
refetchOnWindowFocus: false
|
|
2558
|
-
}))
|
|
2559
|
-
});
|
|
2560
|
-
const isLoading = queries2.some((query) => query.isLoading);
|
|
2561
|
-
const error = queries2.find((query) => query.error)?.error || null;
|
|
2562
|
-
const refetchAll = () => {
|
|
2563
|
-
queries2.forEach((query) => {
|
|
2564
|
-
query.refetch();
|
|
2565
|
-
});
|
|
2566
|
-
};
|
|
2567
|
-
const balances = (0, import_react6.useMemo)(() => {
|
|
2568
|
-
const balanceMap = {};
|
|
2569
|
-
queries2.forEach((query, index) => {
|
|
2570
|
-
const chainId = chainIds[index];
|
|
2571
|
-
if (query.data && chainId !== void 0) {
|
|
2572
|
-
balanceMap[chainId] = query.data.balances;
|
|
2573
|
-
}
|
|
2574
|
-
});
|
|
2575
|
-
return balanceMap;
|
|
2576
|
-
}, [queries2, chainIds]);
|
|
2577
|
-
return {
|
|
2578
|
-
balances,
|
|
2579
|
-
isLoading,
|
|
2580
|
-
error,
|
|
2581
|
-
refetchAll
|
|
2582
|
-
};
|
|
2583
|
-
}
|
|
2584
|
-
|
|
2585
|
-
// src/v2/opportunities/hooks.ts
|
|
2586
|
-
var import_react_query8 = require("@tanstack/react-query");
|
|
2587
|
-
function useOpportunities(options) {
|
|
2588
|
-
return (0, import_react_query8.useQuery)({
|
|
2589
|
-
...opportunitiesQueries.all,
|
|
2590
|
-
...queryDefaults,
|
|
2591
|
-
select: (data) => {
|
|
2592
|
-
const uniqueChainsMap = new Map(
|
|
2593
|
-
data.opportunities.map((opportunity) => opportunity.receiptToken?.chain).filter((chain) => chain !== void 0).map((chain) => [chain.id, chain])
|
|
2594
|
-
);
|
|
2595
|
-
const chains = Array.from(uniqueChainsMap.values());
|
|
2596
|
-
return {
|
|
2597
|
-
...data,
|
|
2598
|
-
chains
|
|
2599
|
-
};
|
|
2600
|
-
}
|
|
2601
|
-
});
|
|
2602
|
-
}
|
|
2603
|
-
function useOpportunity({ id, ...options }) {
|
|
2604
|
-
return (0, import_react_query8.useQuery)({
|
|
2605
|
-
...opportunitiesQueries.byId(id),
|
|
2606
|
-
...queryDefaults,
|
|
2607
|
-
select: (data) => {
|
|
2608
|
-
return {
|
|
2609
|
-
...data,
|
|
2610
|
-
chain: data.receiptToken?.chain
|
|
2611
|
-
};
|
|
2612
|
-
}
|
|
2613
|
-
});
|
|
2614
|
-
}
|
|
2615
|
-
function useOpportunitiesPaginated({
|
|
2616
|
-
params,
|
|
2617
|
-
enabled = true
|
|
2618
|
-
} = {}) {
|
|
2619
|
-
return (0, import_react_query8.useQuery)({
|
|
2620
|
-
...opportunitiesQueries.paginated(params),
|
|
2621
|
-
...queryDefaults,
|
|
2622
|
-
enabled
|
|
2623
|
-
});
|
|
2624
|
-
}
|
|
2625
|
-
function useOpportunitiesFilterOptions({
|
|
2626
|
-
enabled = true
|
|
2627
|
-
} = {}) {
|
|
2628
|
-
return (0, import_react_query8.useQuery)({
|
|
2629
|
-
...opportunitiesQueries.filterOptions,
|
|
2630
|
-
...queryDefaults,
|
|
2631
|
-
enabled
|
|
2632
|
-
});
|
|
2633
|
-
}
|
|
2634
|
-
|
|
2635
|
-
// src/v2/products/hooks.ts
|
|
2636
|
-
var import_react_query9 = require("@tanstack/react-query");
|
|
2637
|
-
function useProducts({ filters, enabled = true }) {
|
|
2638
|
-
return (0, import_react_query9.useQuery)({
|
|
2639
|
-
...productsQueries.list(filters),
|
|
2640
|
-
...queryDefaults,
|
|
2641
|
-
enabled
|
|
2642
|
-
});
|
|
2643
|
-
}
|
|
2644
|
-
function useProduct({ id, enabled = true }) {
|
|
2645
|
-
return (0, import_react_query9.useQuery)({
|
|
2646
|
-
...productsQueries.byId(id),
|
|
2647
|
-
...queryDefaults,
|
|
2648
|
-
enabled
|
|
2649
|
-
});
|
|
2650
|
-
}
|
|
2651
|
-
function useCreateProduct(options) {
|
|
2652
|
-
return (0, import_react_query9.useMutation)({
|
|
2653
|
-
mutationFn: (input) => createProduct(input),
|
|
2654
|
-
...options
|
|
2655
|
-
});
|
|
2656
|
-
}
|
|
2657
|
-
function useUpdateProduct(options) {
|
|
2658
|
-
return (0, import_react_query9.useMutation)({
|
|
2659
|
-
mutationFn: (input) => updateProduct(input),
|
|
2660
|
-
...options
|
|
2661
|
-
});
|
|
2662
|
-
}
|
|
2663
|
-
function useDeleteProduct(options) {
|
|
2664
|
-
return (0, import_react_query9.useMutation)({
|
|
2665
|
-
mutationFn: (id) => deleteProduct(id),
|
|
2666
|
-
...options
|
|
2667
|
-
});
|
|
2668
|
-
}
|
|
2669
|
-
function useUploadProductLogo(options) {
|
|
2670
|
-
return (0, import_react_query9.useMutation)({
|
|
2671
|
-
mutationFn: (request) => uploadProductLogo(request),
|
|
2672
|
-
...options
|
|
2673
|
-
});
|
|
2674
|
-
}
|
|
2675
|
-
|
|
2676
|
-
// src/v2/balance/types.ts
|
|
2677
|
-
var BalanceSourcePriority = /* @__PURE__ */ ((BalanceSourcePriority2) => {
|
|
2678
|
-
BalanceSourcePriority2[BalanceSourcePriority2["ONCHAIN"] = 1] = "ONCHAIN";
|
|
2679
|
-
BalanceSourcePriority2[BalanceSourcePriority2["PORTFOLIO"] = 2] = "PORTFOLIO";
|
|
2680
|
-
BalanceSourcePriority2[BalanceSourcePriority2["ENSO"] = 3] = "ENSO";
|
|
2681
|
-
return BalanceSourcePriority2;
|
|
2682
|
-
})(BalanceSourcePriority || {});
|
|
2683
|
-
|
|
2684
|
-
// src/v2/balance/hooks/useBalance.ts
|
|
2536
|
+
// src/v2/earn-deposits/hooks/useActionsDefaultParams.ts
|
|
2685
2537
|
var import_react10 = require("react");
|
|
2686
2538
|
|
|
2687
2539
|
// src/v2/balance/hooks/useGetOnChainBalance.ts
|
|
2688
2540
|
var import_wagmi = require("wagmi");
|
|
2689
2541
|
var import_viem3 = require("viem");
|
|
2690
|
-
var
|
|
2542
|
+
var import_react6 = require("react");
|
|
2691
2543
|
var NATIVE_TOKEN_ADDRESSES = [
|
|
2692
2544
|
"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
2693
2545
|
"0x0000000000000000000000000000000000000000"
|
|
@@ -2702,7 +2554,7 @@ function useGetOnChainBalance({
|
|
|
2702
2554
|
address,
|
|
2703
2555
|
enabled = true
|
|
2704
2556
|
}) {
|
|
2705
|
-
const { nativeTokens, erc20Tokens } = (0,
|
|
2557
|
+
const { nativeTokens, erc20Tokens } = (0, import_react6.useMemo)(() => {
|
|
2706
2558
|
const native = [];
|
|
2707
2559
|
const erc20 = [];
|
|
2708
2560
|
for (const token of tokens) {
|
|
@@ -2730,7 +2582,7 @@ function useGetOnChainBalance({
|
|
|
2730
2582
|
refetchOnWindowFocus: true
|
|
2731
2583
|
}
|
|
2732
2584
|
});
|
|
2733
|
-
const contracts = (0,
|
|
2585
|
+
const contracts = (0, import_react6.useMemo)(() => {
|
|
2734
2586
|
if (!address || !enabled) return [];
|
|
2735
2587
|
return erc20Tokens.map(
|
|
2736
2588
|
(token) => ({
|
|
@@ -2756,7 +2608,7 @@ function useGetOnChainBalance({
|
|
|
2756
2608
|
refetchOnWindowFocus: true
|
|
2757
2609
|
}
|
|
2758
2610
|
});
|
|
2759
|
-
const balances = (0,
|
|
2611
|
+
const balances = (0, import_react6.useMemo)(() => {
|
|
2760
2612
|
const result = [];
|
|
2761
2613
|
if (nativeToken && nativeBalanceData) {
|
|
2762
2614
|
result.push({
|
|
@@ -2783,7 +2635,7 @@ function useGetOnChainBalance({
|
|
|
2783
2635
|
}, [nativeToken, nativeBalanceData, erc20Results, erc20Tokens]);
|
|
2784
2636
|
const isLoading = nativeTokens.length > 0 && isNativeLoading || erc20Tokens.length > 0 && isErc20Loading;
|
|
2785
2637
|
const error = nativeError || erc20Error;
|
|
2786
|
-
const refetch = (0,
|
|
2638
|
+
const refetch = (0, import_react6.useCallback)(() => {
|
|
2787
2639
|
if (nativeTokens.length > 0) {
|
|
2788
2640
|
refetchNative();
|
|
2789
2641
|
}
|
|
@@ -2799,14 +2651,17 @@ function useGetOnChainBalance({
|
|
|
2799
2651
|
};
|
|
2800
2652
|
}
|
|
2801
2653
|
|
|
2802
|
-
// src/v2/balance/hooks/
|
|
2803
|
-
var import_react_query12 = require("@tanstack/react-query");
|
|
2654
|
+
// src/v2/balance/hooks/useBalance.ts
|
|
2804
2655
|
var import_react9 = require("react");
|
|
2805
2656
|
|
|
2657
|
+
// src/v2/balance/hooks/usePortfolioBalance.ts
|
|
2658
|
+
var import_react_query8 = require("@tanstack/react-query");
|
|
2659
|
+
var import_react8 = require("react");
|
|
2660
|
+
|
|
2806
2661
|
// src/v2/supported-chains/hooks.ts
|
|
2807
|
-
var
|
|
2662
|
+
var import_react_query6 = require("@tanstack/react-query");
|
|
2808
2663
|
function useSupportedChains() {
|
|
2809
|
-
const { data, isLoading, error, refetch } = (0,
|
|
2664
|
+
const { data, isLoading, error, refetch } = (0, import_react_query6.useQuery)({
|
|
2810
2665
|
...supportedChainsQueries.all,
|
|
2811
2666
|
...queryDefaults
|
|
2812
2667
|
});
|
|
@@ -2821,15 +2676,15 @@ function useSupportedChains() {
|
|
|
2821
2676
|
}
|
|
2822
2677
|
|
|
2823
2678
|
// src/v2/supported-tokens/hooks.ts
|
|
2824
|
-
var
|
|
2825
|
-
var
|
|
2679
|
+
var import_react_query7 = require("@tanstack/react-query");
|
|
2680
|
+
var import_react7 = require("react");
|
|
2826
2681
|
function useSupportedTokens({
|
|
2827
2682
|
page = 0,
|
|
2828
2683
|
limit = 20,
|
|
2829
2684
|
search,
|
|
2830
2685
|
enabled = true
|
|
2831
2686
|
} = {}) {
|
|
2832
|
-
const { data, isLoading, error, refetch } = (0,
|
|
2687
|
+
const { data, isLoading, error, refetch } = (0, import_react_query7.useQuery)({
|
|
2833
2688
|
...supportedTokensQueries.list({ page, limit, search }),
|
|
2834
2689
|
...queryDefaults,
|
|
2835
2690
|
staleTime: 5 * 60 * 1e3,
|
|
@@ -2840,7 +2695,7 @@ function useSupportedTokens({
|
|
|
2840
2695
|
// Don't refetch on tab focus
|
|
2841
2696
|
enabled
|
|
2842
2697
|
});
|
|
2843
|
-
const tokens = (0,
|
|
2698
|
+
const tokens = (0, import_react7.useMemo)(() => {
|
|
2844
2699
|
if (!data?.tokens) return [];
|
|
2845
2700
|
return data.tokens.map(({ active, ...token }) => token);
|
|
2846
2701
|
}, [data?.tokens]);
|
|
@@ -2871,14 +2726,14 @@ function usePortfolioBalance({
|
|
|
2871
2726
|
isLoading,
|
|
2872
2727
|
error,
|
|
2873
2728
|
refetch
|
|
2874
|
-
} = (0,
|
|
2729
|
+
} = (0, import_react_query8.useQuery)({
|
|
2875
2730
|
...balanceQueries.portfolio(address || ""),
|
|
2876
2731
|
...queryDefaults,
|
|
2877
2732
|
enabled: !!address,
|
|
2878
2733
|
refetchInterval: 1 * 60 * 1e3
|
|
2879
2734
|
// 1 minute
|
|
2880
2735
|
});
|
|
2881
|
-
const balances = (0,
|
|
2736
|
+
const balances = (0, import_react8.useMemo)(() => {
|
|
2882
2737
|
if (!portfolioData) return [];
|
|
2883
2738
|
const tokenBalances = [];
|
|
2884
2739
|
portfolioData.portfolio.holdings.wallets.forEach((wallet) => {
|
|
@@ -2933,6 +2788,14 @@ function usePortfolioBalance({
|
|
|
2933
2788
|
};
|
|
2934
2789
|
}
|
|
2935
2790
|
|
|
2791
|
+
// src/v2/balance/types.ts
|
|
2792
|
+
var BalanceSourcePriority = /* @__PURE__ */ ((BalanceSourcePriority2) => {
|
|
2793
|
+
BalanceSourcePriority2[BalanceSourcePriority2["ONCHAIN"] = 1] = "ONCHAIN";
|
|
2794
|
+
BalanceSourcePriority2[BalanceSourcePriority2["PORTFOLIO"] = 2] = "PORTFOLIO";
|
|
2795
|
+
BalanceSourcePriority2[BalanceSourcePriority2["ENSO"] = 3] = "ENSO";
|
|
2796
|
+
return BalanceSourcePriority2;
|
|
2797
|
+
})(BalanceSourcePriority || {});
|
|
2798
|
+
|
|
2936
2799
|
// src/v2/balance/utils.ts
|
|
2937
2800
|
var import_viem5 = require("viem");
|
|
2938
2801
|
|
|
@@ -3036,7 +2899,7 @@ function useBalance2({
|
|
|
3036
2899
|
} = usePortfolioBalance({
|
|
3037
2900
|
address
|
|
3038
2901
|
});
|
|
3039
|
-
const consolidatedBalances = (0,
|
|
2902
|
+
const consolidatedBalances = (0, import_react9.useMemo)(() => {
|
|
3040
2903
|
const sources = [];
|
|
3041
2904
|
if (depositOpportunity && onChainBalances.length > 0) {
|
|
3042
2905
|
sources.push(onChainBalances);
|
|
@@ -3064,8 +2927,227 @@ function useBalance2({
|
|
|
3064
2927
|
};
|
|
3065
2928
|
}
|
|
3066
2929
|
|
|
3067
|
-
// src/v2/
|
|
2930
|
+
// src/v2/earn-deposits/hooks/useActionsDefaultParams.ts
|
|
2931
|
+
function sortByBalance(balances) {
|
|
2932
|
+
return [...balances].sort((a, b) => {
|
|
2933
|
+
const aValue = BigInt(a.amount);
|
|
2934
|
+
const bValue = BigInt(b.amount);
|
|
2935
|
+
if (bValue > aValue) return 1;
|
|
2936
|
+
if (bValue < aValue) return -1;
|
|
2937
|
+
return 0;
|
|
2938
|
+
});
|
|
2939
|
+
}
|
|
2940
|
+
function useActionsDefaultParams({
|
|
2941
|
+
opportunity,
|
|
2942
|
+
address,
|
|
2943
|
+
depositMode
|
|
2944
|
+
}) {
|
|
2945
|
+
const opportunityChainId = opportunity ? Number(opportunity.receiptToken.chain.chainId) : void 0;
|
|
2946
|
+
const isSecondaryOnly = opportunity?.vaultConfig?.secondaryOnly === true;
|
|
2947
|
+
const effectiveDepositMode = isSecondaryOnly ? "route" : depositMode;
|
|
2948
|
+
const useOnChainBalances = effectiveDepositMode === "native";
|
|
2949
|
+
const {
|
|
2950
|
+
balances: depositTokenBalances,
|
|
2951
|
+
isLoading: isDepositBalancesLoading,
|
|
2952
|
+
refetch: refetchDepositBalances
|
|
2953
|
+
} = useGetOnChainBalance({
|
|
2954
|
+
tokens: opportunity?.depositTokens ?? [],
|
|
2955
|
+
chainId: opportunityChainId,
|
|
2956
|
+
address,
|
|
2957
|
+
enabled: !!address && !!opportunity && opportunityChainId != null
|
|
2958
|
+
});
|
|
2959
|
+
const {
|
|
2960
|
+
balances: allChainBalances,
|
|
2961
|
+
isLoading: isAllChainBalancesLoading,
|
|
2962
|
+
refetchAll: refetchAllBalances
|
|
2963
|
+
} = useBalance2({
|
|
2964
|
+
address,
|
|
2965
|
+
chainIds: opportunityChainId ? [opportunityChainId] : [],
|
|
2966
|
+
depositOpportunity: opportunity ?? void 0
|
|
2967
|
+
});
|
|
2968
|
+
const rawBalances = (0, import_react10.useMemo)(() => {
|
|
2969
|
+
if (useOnChainBalances) {
|
|
2970
|
+
if (depositTokenBalances.length > 0) {
|
|
2971
|
+
return depositTokenBalances;
|
|
2972
|
+
}
|
|
2973
|
+
if (opportunity?.depositTokens) {
|
|
2974
|
+
return opportunity.depositTokens.map((token) => ({
|
|
2975
|
+
token,
|
|
2976
|
+
amount: "0",
|
|
2977
|
+
source: "onchain"
|
|
2978
|
+
}));
|
|
2979
|
+
}
|
|
2980
|
+
return [];
|
|
2981
|
+
}
|
|
2982
|
+
return allChainBalances;
|
|
2983
|
+
}, [useOnChainBalances, depositTokenBalances, allChainBalances, opportunity?.depositTokens]);
|
|
2984
|
+
const isBalancesLoading = useOnChainBalances ? isDepositBalancesLoading : isAllChainBalancesLoading;
|
|
2985
|
+
const refetchBalances = useOnChainBalances ? refetchDepositBalances : refetchAllBalances;
|
|
2986
|
+
const balances = (0, import_react10.useMemo)(() => {
|
|
2987
|
+
let filtered = rawBalances;
|
|
2988
|
+
if (!useOnChainBalances && opportunityChainId) {
|
|
2989
|
+
filtered = filtered.filter((b) => {
|
|
2990
|
+
const tokenChainId = Number(b.token.chain?.chainId);
|
|
2991
|
+
return tokenChainId === opportunityChainId;
|
|
2992
|
+
});
|
|
2993
|
+
}
|
|
2994
|
+
if (!useOnChainBalances) {
|
|
2995
|
+
filtered = filtered.filter((b) => BigInt(b.amount) > 0n);
|
|
2996
|
+
}
|
|
2997
|
+
filtered = filterExcludedTokens(filtered);
|
|
2998
|
+
return sortByBalance(filtered);
|
|
2999
|
+
}, [rawBalances, useOnChainBalances, opportunityChainId]);
|
|
3000
|
+
return {
|
|
3001
|
+
balances,
|
|
3002
|
+
isBalancesLoading,
|
|
3003
|
+
refetchBalances
|
|
3004
|
+
};
|
|
3005
|
+
}
|
|
3006
|
+
|
|
3007
|
+
// src/v2/earn-deposits/hooks.ts
|
|
3008
|
+
function useDeposits({ params, enabled = true }) {
|
|
3009
|
+
return (0, import_react_query9.useQuery)({
|
|
3010
|
+
...earnDepositsQueries.byParams(params),
|
|
3011
|
+
...queryDefaults,
|
|
3012
|
+
enabled
|
|
3013
|
+
});
|
|
3014
|
+
}
|
|
3015
|
+
|
|
3016
|
+
// src/v2/enso-balances/hooks.ts
|
|
3068
3017
|
var import_react11 = require("react");
|
|
3018
|
+
var import_react_query10 = require("@tanstack/react-query");
|
|
3019
|
+
function useMultiChainBalances({
|
|
3020
|
+
chainIds,
|
|
3021
|
+
address
|
|
3022
|
+
}) {
|
|
3023
|
+
const queries2 = (0, import_react_query10.useQueries)({
|
|
3024
|
+
queries: chainIds.map((chainId) => ({
|
|
3025
|
+
...ensoBalancesQueries.byParams({ user: address || "", chain: chainId }),
|
|
3026
|
+
enabled: !!address,
|
|
3027
|
+
staleTime: 60 * 1e3,
|
|
3028
|
+
refetchInterval: 3 * 60 * 1e3,
|
|
3029
|
+
refetchOnMount: false,
|
|
3030
|
+
refetchOnWindowFocus: false
|
|
3031
|
+
}))
|
|
3032
|
+
});
|
|
3033
|
+
const isLoading = queries2.some((query) => query.isLoading);
|
|
3034
|
+
const error = queries2.find((query) => query.error)?.error || null;
|
|
3035
|
+
const refetchAll = () => {
|
|
3036
|
+
queries2.forEach((query) => {
|
|
3037
|
+
query.refetch();
|
|
3038
|
+
});
|
|
3039
|
+
};
|
|
3040
|
+
const balances = (0, import_react11.useMemo)(() => {
|
|
3041
|
+
const balanceMap = {};
|
|
3042
|
+
queries2.forEach((query, index) => {
|
|
3043
|
+
const chainId = chainIds[index];
|
|
3044
|
+
if (query.data && chainId !== void 0) {
|
|
3045
|
+
balanceMap[chainId] = query.data.balances;
|
|
3046
|
+
}
|
|
3047
|
+
});
|
|
3048
|
+
return balanceMap;
|
|
3049
|
+
}, [queries2, chainIds]);
|
|
3050
|
+
return {
|
|
3051
|
+
balances,
|
|
3052
|
+
isLoading,
|
|
3053
|
+
error,
|
|
3054
|
+
refetchAll
|
|
3055
|
+
};
|
|
3056
|
+
}
|
|
3057
|
+
|
|
3058
|
+
// src/v2/opportunities/hooks.ts
|
|
3059
|
+
var import_react_query11 = require("@tanstack/react-query");
|
|
3060
|
+
function useOpportunities(options) {
|
|
3061
|
+
return (0, import_react_query11.useQuery)({
|
|
3062
|
+
...opportunitiesQueries.all,
|
|
3063
|
+
...queryDefaults,
|
|
3064
|
+
select: (data) => {
|
|
3065
|
+
const uniqueChainsMap = new Map(
|
|
3066
|
+
data.opportunities.map((opportunity) => opportunity.receiptToken?.chain).filter((chain) => chain !== void 0).map((chain) => [chain.id, chain])
|
|
3067
|
+
);
|
|
3068
|
+
const chains = Array.from(uniqueChainsMap.values());
|
|
3069
|
+
return {
|
|
3070
|
+
...data,
|
|
3071
|
+
chains
|
|
3072
|
+
};
|
|
3073
|
+
}
|
|
3074
|
+
});
|
|
3075
|
+
}
|
|
3076
|
+
function useOpportunity({ id, ...options }) {
|
|
3077
|
+
return (0, import_react_query11.useQuery)({
|
|
3078
|
+
...opportunitiesQueries.byId(id),
|
|
3079
|
+
...queryDefaults,
|
|
3080
|
+
select: (data) => {
|
|
3081
|
+
return {
|
|
3082
|
+
...data,
|
|
3083
|
+
chain: data.receiptToken?.chain
|
|
3084
|
+
};
|
|
3085
|
+
}
|
|
3086
|
+
});
|
|
3087
|
+
}
|
|
3088
|
+
function useOpportunitiesPaginated({
|
|
3089
|
+
params,
|
|
3090
|
+
enabled = true
|
|
3091
|
+
} = {}) {
|
|
3092
|
+
return (0, import_react_query11.useQuery)({
|
|
3093
|
+
...opportunitiesQueries.paginated(params),
|
|
3094
|
+
...queryDefaults,
|
|
3095
|
+
enabled
|
|
3096
|
+
});
|
|
3097
|
+
}
|
|
3098
|
+
function useOpportunitiesFilterOptions({
|
|
3099
|
+
enabled = true
|
|
3100
|
+
} = {}) {
|
|
3101
|
+
return (0, import_react_query11.useQuery)({
|
|
3102
|
+
...opportunitiesQueries.filterOptions,
|
|
3103
|
+
...queryDefaults,
|
|
3104
|
+
enabled
|
|
3105
|
+
});
|
|
3106
|
+
}
|
|
3107
|
+
|
|
3108
|
+
// src/v2/products/hooks.ts
|
|
3109
|
+
var import_react_query12 = require("@tanstack/react-query");
|
|
3110
|
+
function useProducts({ filters, enabled = true }) {
|
|
3111
|
+
return (0, import_react_query12.useQuery)({
|
|
3112
|
+
...productsQueries.list(filters),
|
|
3113
|
+
...queryDefaults,
|
|
3114
|
+
enabled
|
|
3115
|
+
});
|
|
3116
|
+
}
|
|
3117
|
+
function useProduct({ id, enabled = true }) {
|
|
3118
|
+
return (0, import_react_query12.useQuery)({
|
|
3119
|
+
...productsQueries.byId(id),
|
|
3120
|
+
...queryDefaults,
|
|
3121
|
+
enabled
|
|
3122
|
+
});
|
|
3123
|
+
}
|
|
3124
|
+
function useCreateProduct(options) {
|
|
3125
|
+
return (0, import_react_query12.useMutation)({
|
|
3126
|
+
mutationFn: (input) => createProduct(input),
|
|
3127
|
+
...options
|
|
3128
|
+
});
|
|
3129
|
+
}
|
|
3130
|
+
function useUpdateProduct(options) {
|
|
3131
|
+
return (0, import_react_query12.useMutation)({
|
|
3132
|
+
mutationFn: (input) => updateProduct(input),
|
|
3133
|
+
...options
|
|
3134
|
+
});
|
|
3135
|
+
}
|
|
3136
|
+
function useDeleteProduct(options) {
|
|
3137
|
+
return (0, import_react_query12.useMutation)({
|
|
3138
|
+
mutationFn: (id) => deleteProduct(id),
|
|
3139
|
+
...options
|
|
3140
|
+
});
|
|
3141
|
+
}
|
|
3142
|
+
function useUploadProductLogo(options) {
|
|
3143
|
+
return (0, import_react_query12.useMutation)({
|
|
3144
|
+
mutationFn: (request) => uploadProductLogo(request),
|
|
3145
|
+
...options
|
|
3146
|
+
});
|
|
3147
|
+
}
|
|
3148
|
+
|
|
3149
|
+
// src/v2/balance/hooks/useEnsoBalances.ts
|
|
3150
|
+
var import_react12 = require("react");
|
|
3069
3151
|
function useEnsoBalances({
|
|
3070
3152
|
address,
|
|
3071
3153
|
chainIds
|
|
@@ -3080,7 +3162,7 @@ function useEnsoBalances({
|
|
|
3080
3162
|
chainIds,
|
|
3081
3163
|
address
|
|
3082
3164
|
});
|
|
3083
|
-
const balances = (0,
|
|
3165
|
+
const balances = (0, import_react12.useMemo)(() => {
|
|
3084
3166
|
if (isSupportedTokensLoading || isLoading) return [];
|
|
3085
3167
|
const tokenBalances = [];
|
|
3086
3168
|
Object.entries(ensoBalances).forEach(([, chainBalances]) => {
|
|
@@ -3199,10 +3281,10 @@ function useStreamSupportedChains({
|
|
|
3199
3281
|
}
|
|
3200
3282
|
|
|
3201
3283
|
// src/v2/swap/useSwapRoute.ts
|
|
3202
|
-
var
|
|
3284
|
+
var import_react13 = require("react");
|
|
3203
3285
|
|
|
3204
3286
|
// src/v2/swap/route-processor.ts
|
|
3205
|
-
var
|
|
3287
|
+
var import_utils5 = require("@turtleclub/utils");
|
|
3206
3288
|
var parseEnsoStep = (kind, fromToken, toToken) => {
|
|
3207
3289
|
return {
|
|
3208
3290
|
in: {
|
|
@@ -3224,7 +3306,7 @@ var parseApproveStep = (token, amount) => {
|
|
|
3224
3306
|
symbol: token.symbol
|
|
3225
3307
|
},
|
|
3226
3308
|
out: null,
|
|
3227
|
-
amount: (0,
|
|
3309
|
+
amount: (0, import_utils5.formatToken)(amount, { decimals: token.decimals }, true, false, 4),
|
|
3228
3310
|
type: "approve"
|
|
3229
3311
|
};
|
|
3230
3312
|
};
|
|
@@ -3258,7 +3340,7 @@ function toEnsoTokenAddress(address) {
|
|
|
3258
3340
|
return address;
|
|
3259
3341
|
}
|
|
3260
3342
|
function useSwapRoute(isEnabled, userAddress, distributorId, options, referralCode) {
|
|
3261
|
-
const params = (0,
|
|
3343
|
+
const params = (0, import_react13.useMemo)(() => {
|
|
3262
3344
|
if (!options || !isEnabled) return void 0;
|
|
3263
3345
|
return {
|
|
3264
3346
|
...options,
|
|
@@ -3267,7 +3349,7 @@ function useSwapRoute(isEnabled, userAddress, distributorId, options, referralCo
|
|
|
3267
3349
|
referral_code: referralCode
|
|
3268
3350
|
};
|
|
3269
3351
|
}, [options, userAddress, distributorId, referralCode]);
|
|
3270
|
-
const hasRequiredParams = (0,
|
|
3352
|
+
const hasRequiredParams = (0, import_react13.useMemo)(() => {
|
|
3271
3353
|
return !!(userAddress && params?.token_in && params?.token_out && params?.amount && params?.chain && params?.slippage && params?.distributor_id);
|
|
3272
3354
|
}, [options]);
|
|
3273
3355
|
const { data, isLoading, error } = useEarnRoute({
|
|
@@ -3284,7 +3366,7 @@ function useSwapRoute(isEnabled, userAddress, distributorId, options, referralCo
|
|
|
3284
3366
|
},
|
|
3285
3367
|
enabled: hasRequiredParams && isEnabled
|
|
3286
3368
|
});
|
|
3287
|
-
const routeDetails = (0,
|
|
3369
|
+
const routeDetails = (0, import_react13.useMemo)(() => processRouteDetails(data ?? null), [data]);
|
|
3288
3370
|
return {
|
|
3289
3371
|
fetchedRoute: data ?? null,
|
|
3290
3372
|
outputAmount: data?.amount_out ?? void 0,
|
|
@@ -3369,6 +3451,124 @@ function useSubmitCoverRequest(options) {
|
|
|
3369
3451
|
});
|
|
3370
3452
|
}
|
|
3371
3453
|
|
|
3454
|
+
// src/v2/membership-flow/hooks.ts
|
|
3455
|
+
var import_react14 = require("react");
|
|
3456
|
+
var useTurtleMembershipFlow = ({
|
|
3457
|
+
address,
|
|
3458
|
+
walletEcosystem = "evm",
|
|
3459
|
+
signMessage,
|
|
3460
|
+
chainId = "1",
|
|
3461
|
+
url,
|
|
3462
|
+
enabled = true,
|
|
3463
|
+
onError
|
|
3464
|
+
}) => {
|
|
3465
|
+
const previousAddressRef = (0, import_react14.useRef)(void 0);
|
|
3466
|
+
const isProcessingRef = (0, import_react14.useRef)(false);
|
|
3467
|
+
const {
|
|
3468
|
+
data: membershipData,
|
|
3469
|
+
isLoading: isCheckingMembership
|
|
3470
|
+
} = useCheckMembership({
|
|
3471
|
+
params: {
|
|
3472
|
+
address: address || "",
|
|
3473
|
+
walletEcosystem
|
|
3474
|
+
},
|
|
3475
|
+
enabled: !!address
|
|
3476
|
+
});
|
|
3477
|
+
const {
|
|
3478
|
+
mutateAsync: createAgreement,
|
|
3479
|
+
isPending: isCreatingAgreement,
|
|
3480
|
+
error: agreementError
|
|
3481
|
+
} = useCreateMembershipAgreement();
|
|
3482
|
+
const {
|
|
3483
|
+
mutateAsync: createMembership2,
|
|
3484
|
+
isPending: isCreatingMembership,
|
|
3485
|
+
error: membershipError
|
|
3486
|
+
} = useCreateMembership();
|
|
3487
|
+
const handleMembershipFlow = (0, import_react14.useCallback)(async (memberAddress) => {
|
|
3488
|
+
if (isProcessingRef.current) return;
|
|
3489
|
+
isProcessingRef.current = true;
|
|
3490
|
+
try {
|
|
3491
|
+
const agreementResult = await createAgreement({
|
|
3492
|
+
address: memberAddress,
|
|
3493
|
+
walletEcosystem,
|
|
3494
|
+
url: url || (typeof window !== "undefined" ? window.location.href : ""),
|
|
3495
|
+
chainId
|
|
3496
|
+
});
|
|
3497
|
+
let signature;
|
|
3498
|
+
try {
|
|
3499
|
+
signature = await signMessage(agreementResult.message);
|
|
3500
|
+
} catch (signError) {
|
|
3501
|
+
const errorMessage = signError?.message || "User rejected signature";
|
|
3502
|
+
if (onError) {
|
|
3503
|
+
await onError({
|
|
3504
|
+
type: "signature_rejected",
|
|
3505
|
+
message: errorMessage
|
|
3506
|
+
});
|
|
3507
|
+
}
|
|
3508
|
+
return;
|
|
3509
|
+
}
|
|
3510
|
+
const membershipResult = await createMembership2({
|
|
3511
|
+
address: memberAddress,
|
|
3512
|
+
walletEcosystem,
|
|
3513
|
+
signature,
|
|
3514
|
+
nonce: agreementResult.nonce
|
|
3515
|
+
});
|
|
3516
|
+
if (!membershipResult.isMember && membershipResult.error) {
|
|
3517
|
+
const errorMessage = membershipResult.error;
|
|
3518
|
+
if (onError) {
|
|
3519
|
+
await onError({
|
|
3520
|
+
type: "membership_failed",
|
|
3521
|
+
message: errorMessage
|
|
3522
|
+
});
|
|
3523
|
+
}
|
|
3524
|
+
}
|
|
3525
|
+
} catch (error2) {
|
|
3526
|
+
const errorMessage = error2?.message || "Unknown error during membership flow";
|
|
3527
|
+
if (onError) {
|
|
3528
|
+
await onError({
|
|
3529
|
+
type: "membership_failed",
|
|
3530
|
+
message: errorMessage
|
|
3531
|
+
});
|
|
3532
|
+
}
|
|
3533
|
+
} finally {
|
|
3534
|
+
isProcessingRef.current = false;
|
|
3535
|
+
}
|
|
3536
|
+
}, [createAgreement, walletEcosystem, url, chainId, signMessage, createMembership2, onError]);
|
|
3537
|
+
(0, import_react14.useEffect)(() => {
|
|
3538
|
+
if (!enabled) return;
|
|
3539
|
+
const currentAddress = address;
|
|
3540
|
+
if (!currentAddress) {
|
|
3541
|
+
if (previousAddressRef.current !== void 0) {
|
|
3542
|
+
previousAddressRef.current = void 0;
|
|
3543
|
+
}
|
|
3544
|
+
return;
|
|
3545
|
+
}
|
|
3546
|
+
if (isCheckingMembership) {
|
|
3547
|
+
return;
|
|
3548
|
+
}
|
|
3549
|
+
if (currentAddress !== previousAddressRef.current) {
|
|
3550
|
+
previousAddressRef.current = currentAddress;
|
|
3551
|
+
if (membershipData?.isMember) {
|
|
3552
|
+
return;
|
|
3553
|
+
}
|
|
3554
|
+
handleMembershipFlow(currentAddress);
|
|
3555
|
+
}
|
|
3556
|
+
}, [address, enabled, isCheckingMembership, membershipData, handleMembershipFlow]);
|
|
3557
|
+
const refetch = async () => {
|
|
3558
|
+
if (address) {
|
|
3559
|
+
await handleMembershipFlow(address);
|
|
3560
|
+
}
|
|
3561
|
+
};
|
|
3562
|
+
const isLoading = isCheckingMembership || isCreatingAgreement || isCreatingMembership;
|
|
3563
|
+
const error = agreementError?.message || membershipError?.message || null;
|
|
3564
|
+
return {
|
|
3565
|
+
isMember: membershipData?.isMember,
|
|
3566
|
+
isLoading,
|
|
3567
|
+
error,
|
|
3568
|
+
refetch
|
|
3569
|
+
};
|
|
3570
|
+
};
|
|
3571
|
+
|
|
3372
3572
|
// src/v2/organizations/schema.ts
|
|
3373
3573
|
var import_zod17 = require("zod");
|
|
3374
3574
|
var LeaveOrganizationInputSchema = import_zod17.z.object({
|
|
@@ -3586,6 +3786,7 @@ var queries = (0, import_query_key_factory16.mergeQueryKeys)(
|
|
|
3586
3786
|
tokenSchema,
|
|
3587
3787
|
transactionSchema,
|
|
3588
3788
|
txResponseItemSchema,
|
|
3789
|
+
useActionsDefaultParams,
|
|
3589
3790
|
useAttributeAction,
|
|
3590
3791
|
useBalance,
|
|
3591
3792
|
useCancelDepositAction,
|
|
@@ -3630,6 +3831,7 @@ var queries = (0, import_query_key_factory16.mergeQueryKeys)(
|
|
|
3630
3831
|
useSupportedTokens,
|
|
3631
3832
|
useSwapRoute,
|
|
3632
3833
|
useTokenBalance,
|
|
3834
|
+
useTurtleMembershipFlow,
|
|
3633
3835
|
useUpdateProduct,
|
|
3634
3836
|
useUploadProductLogo,
|
|
3635
3837
|
useUserById,
|