levr-sdk 0.0.2 → 0.1.1

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.
Files changed (121) hide show
  1. package/README.md +256 -235
  2. package/dist/esm/abis/LevrFactory_v1.js +63 -0
  3. package/dist/esm/abis/LevrGovernor_v1.js +15 -24
  4. package/dist/esm/abis/LevrStaking_v1.js +7 -1
  5. package/dist/esm/balance.js +19 -1
  6. package/dist/esm/balance.js.map +1 -1
  7. package/dist/esm/client/hook/index.js +14 -3
  8. package/dist/esm/client/hook/index.js.map +1 -1
  9. package/dist/esm/client/hook/use-fee-receivers.js +11 -29
  10. package/dist/esm/client/hook/use-fee-receivers.js.map +1 -1
  11. package/dist/esm/client/hook/use-governance.js +19 -254
  12. package/dist/esm/client/hook/use-governance.js.map +1 -1
  13. package/dist/esm/client/hook/use-pool.js +26 -0
  14. package/dist/esm/client/hook/use-pool.js.map +1 -0
  15. package/dist/esm/client/hook/use-prepare.js +6 -3
  16. package/dist/esm/client/hook/use-prepare.js.map +1 -1
  17. package/dist/esm/client/hook/use-project.js +24 -9
  18. package/dist/esm/client/hook/use-project.js.map +1 -1
  19. package/dist/esm/client/hook/use-proposal.js +48 -0
  20. package/dist/esm/client/hook/use-proposal.js.map +1 -0
  21. package/dist/esm/client/hook/use-stake.js +29 -195
  22. package/dist/esm/client/hook/use-stake.js.map +1 -1
  23. package/dist/esm/client/hook/use-swap.js +9 -13
  24. package/dist/esm/client/hook/use-swap.js.map +1 -1
  25. package/dist/esm/client/hook/use-user.js +25 -0
  26. package/dist/esm/client/hook/use-user.js.map +1 -0
  27. package/dist/esm/client/levr-provider.js +65 -107
  28. package/dist/esm/client/levr-provider.js.map +1 -1
  29. package/dist/esm/client/query-keys.js +9 -21
  30. package/dist/esm/client/query-keys.js.map +1 -1
  31. package/dist/esm/constants.js +1 -1
  32. package/dist/esm/fee-receivers.js +25 -13
  33. package/dist/esm/fee-receivers.js.map +1 -1
  34. package/dist/esm/governance.js +35 -414
  35. package/dist/esm/governance.js.map +1 -1
  36. package/dist/esm/index.js +4 -2
  37. package/dist/esm/index.js.map +1 -1
  38. package/dist/esm/pool.js +70 -0
  39. package/dist/esm/pool.js.map +1 -0
  40. package/dist/esm/project.js +389 -135
  41. package/dist/esm/project.js.map +1 -1
  42. package/dist/esm/proposal.js +156 -0
  43. package/dist/esm/proposal.js.map +1 -0
  44. package/dist/esm/quote/index.js +2 -2
  45. package/dist/esm/quote/index.js.map +1 -1
  46. package/dist/esm/stake.js +34 -299
  47. package/dist/esm/stake.js.map +1 -1
  48. package/dist/esm/treasury.js +162 -0
  49. package/dist/esm/treasury.js.map +1 -0
  50. package/dist/esm/user.js +153 -0
  51. package/dist/esm/user.js.map +1 -0
  52. package/dist/types/abis/LevrFactory_v1.d.ts +48 -0
  53. package/dist/types/abis/LevrGovernor_v1.d.ts +12 -18
  54. package/dist/types/abis/LevrStaking_v1.d.ts +5 -1
  55. package/dist/types/balance.d.ts +15 -0
  56. package/dist/types/balance.d.ts.map +1 -1
  57. package/dist/types/client/hook/index.d.ts +11 -3
  58. package/dist/types/client/hook/index.d.ts.map +1 -1
  59. package/dist/types/client/hook/use-fee-receivers.d.ts +6 -16
  60. package/dist/types/client/hook/use-fee-receivers.d.ts.map +1 -1
  61. package/dist/types/client/hook/use-governance.d.ts +4 -98
  62. package/dist/types/client/hook/use-governance.d.ts.map +1 -1
  63. package/dist/types/client/hook/use-pool.d.ts +12 -0
  64. package/dist/types/client/hook/use-pool.d.ts.map +1 -0
  65. package/dist/types/client/hook/use-prepare.d.ts +1 -2
  66. package/dist/types/client/hook/use-prepare.d.ts.map +1 -1
  67. package/dist/types/client/hook/use-project.d.ts +5 -0
  68. package/dist/types/client/hook/use-project.d.ts.map +1 -1
  69. package/dist/types/client/hook/use-proposal.d.ts +18 -0
  70. package/dist/types/client/hook/use-proposal.d.ts.map +1 -0
  71. package/dist/types/client/hook/use-stake.d.ts +14 -73
  72. package/dist/types/client/hook/use-stake.d.ts.map +1 -1
  73. package/dist/types/client/hook/use-swap.d.ts +3 -8
  74. package/dist/types/client/hook/use-swap.d.ts.map +1 -1
  75. package/dist/types/client/hook/use-user.d.ts +13 -0
  76. package/dist/types/client/hook/use-user.d.ts.map +1 -0
  77. package/dist/types/client/levr-provider.d.ts +30 -50
  78. package/dist/types/client/levr-provider.d.ts.map +1 -1
  79. package/dist/types/client/query-keys.d.ts +13 -25
  80. package/dist/types/client/query-keys.d.ts.map +1 -1
  81. package/dist/types/fee-receivers.d.ts +28 -0
  82. package/dist/types/fee-receivers.d.ts.map +1 -1
  83. package/dist/types/governance.d.ts +5 -92
  84. package/dist/types/governance.d.ts.map +1 -1
  85. package/dist/types/index.d.ts +4 -2
  86. package/dist/types/index.d.ts.map +1 -1
  87. package/dist/types/pool.d.ts +590 -0
  88. package/dist/types/pool.d.ts.map +1 -0
  89. package/dist/types/project.d.ts +56 -1
  90. package/dist/types/project.d.ts.map +1 -1
  91. package/dist/types/proposal.d.ts +1161 -0
  92. package/dist/types/proposal.d.ts.map +1 -0
  93. package/dist/types/quote/index.d.ts +2 -2
  94. package/dist/types/quote/index.d.ts.map +1 -1
  95. package/dist/types/stake.d.ts +16 -41
  96. package/dist/types/stake.d.ts.map +1 -1
  97. package/dist/types/treasury.d.ts +16 -0
  98. package/dist/types/treasury.d.ts.map +1 -0
  99. package/dist/types/user.d.ts +188 -0
  100. package/dist/types/user.d.ts.map +1 -0
  101. package/package.json +5 -2
  102. package/dist/esm/client/hook/use-balance.js +0 -57
  103. package/dist/esm/client/hook/use-balance.js.map +0 -1
  104. package/dist/esm/client/hook/use-projects.js +0 -22
  105. package/dist/esm/client/hook/use-projects.js.map +0 -1
  106. package/dist/esm/client/hook/use-proposals.js +0 -29
  107. package/dist/esm/client/hook/use-proposals.js.map +0 -1
  108. package/dist/esm/projects.js +0 -184
  109. package/dist/esm/projects.js.map +0 -1
  110. package/dist/esm/proposals.js +0 -98
  111. package/dist/esm/proposals.js.map +0 -1
  112. package/dist/types/client/hook/use-balance.d.ts +0 -20
  113. package/dist/types/client/hook/use-balance.d.ts.map +0 -1
  114. package/dist/types/client/hook/use-projects.d.ts +0 -6
  115. package/dist/types/client/hook/use-projects.d.ts.map +0 -1
  116. package/dist/types/client/hook/use-proposals.d.ts +0 -16
  117. package/dist/types/client/hook/use-proposals.d.ts.map +0 -1
  118. package/dist/types/projects.d.ts +0 -20
  119. package/dist/types/projects.d.ts.map +0 -1
  120. package/dist/types/proposals.d.ts +0 -20
  121. package/dist/types/proposals.d.ts.map +0 -1
@@ -0,0 +1,162 @@
1
+ import { erc20Abi } from "viem";
2
+ import { IClankerAirdrop } from "./abis/index.js";
3
+ import { formatBalanceWithUsd } from "./balance.js";
4
+ import { GET_CLANKER_AIRDROP_ADDRESS, TREASURY_AIRDROP_AMOUNTS } from "./constants.js";
5
+ /**
6
+ * Find treasury airdrop allocation by checking all known amounts using multicall
7
+ */
8
+ async function findTreasuryAllocation(publicClient, clankerToken, treasury) {
9
+ const chainId = publicClient.chain?.id;
10
+ const airdropAddress = GET_CLANKER_AIRDROP_ADDRESS(chainId);
11
+ if (!airdropAddress)
12
+ return null;
13
+ // Prepare multicall for all possible treasury airdrop amounts + treasury balance check
14
+ const amounts = Object.values(TREASURY_AIRDROP_AMOUNTS).map((amountInTokens) => BigInt(amountInTokens) * 10n ** 18n);
15
+ const results = await publicClient.multicall({
16
+ contracts: [
17
+ // First check treasury balance
18
+ {
19
+ address: clankerToken,
20
+ abi: erc20Abi,
21
+ functionName: "balanceOf",
22
+ args: [treasury],
23
+ },
24
+ // Then check all airdrop amounts
25
+ ...amounts.map((amount) => ({
26
+ address: airdropAddress,
27
+ abi: IClankerAirdrop,
28
+ functionName: "amountAvailableToClaim",
29
+ args: [clankerToken, treasury, amount],
30
+ })),
31
+ ], // Mixed ABIs in multicall
32
+ allowFailure: true,
33
+ });
34
+ // Extract treasury balance from first result
35
+ const treasuryBalanceResult = results[0];
36
+ const treasuryBalance = treasuryBalanceResult && treasuryBalanceResult.status === "success"
37
+ ? treasuryBalanceResult.result
38
+ : 0n;
39
+ // Extract airdrop check results (skip first result which is balance)
40
+ const airdropResults = results.slice(1);
41
+ // Collect all valid results
42
+ const allResults = [];
43
+ for (let i = 0; i < airdropResults.length; i++) {
44
+ const result = airdropResults[i];
45
+ const amount = amounts[i];
46
+ if (result.status === "success" && result.result !== undefined) {
47
+ const available = result.result;
48
+ if (available > 0n) {
49
+ // Available - highest priority (1)
50
+ allResults.push({ amount, available, status: "available", priority: 1 });
51
+ }
52
+ else {
53
+ // Available is 0 - check treasury balance to determine if claimed or locked
54
+ const isClaimed = treasuryBalance >= amount;
55
+ const priority = isClaimed ? 4 : 2;
56
+ const status = isClaimed ? "claimed" : "locked";
57
+ const error = isClaimed ? "Treasury airdrop already claimed" : "Airdrop is still locked";
58
+ allResults.push({ amount, available: 0n, status, priority, error });
59
+ }
60
+ }
61
+ else if (result.status === "failure") {
62
+ const errorMessage = result.error?.message || "";
63
+ // AirdropNotCreated means this amount wasn't configured - skip entirely
64
+ if (errorMessage.includes("AirdropNotCreated")) {
65
+ continue;
66
+ }
67
+ // AirdropNotUnlocked means this amount exists but is locked (priority 2)
68
+ if (errorMessage.includes("AirdropNotUnlocked")) {
69
+ allResults.push({
70
+ amount,
71
+ available: 0n,
72
+ status: "locked",
73
+ error: "Airdrop is still locked",
74
+ priority: 2,
75
+ });
76
+ continue;
77
+ }
78
+ // Already claimed errors (priority 3)
79
+ if (errorMessage.includes("UserMaxClaimed") || errorMessage.includes("TotalMaxClaimed")) {
80
+ allResults.push({
81
+ amount,
82
+ available: 0n,
83
+ status: "claimed",
84
+ error: "Already claimed maximum amount",
85
+ priority: 3,
86
+ });
87
+ continue;
88
+ }
89
+ // Arithmetic underflow/overflow means a different amount was claimed - skip
90
+ if (errorMessage.includes("underflow") || errorMessage.includes("overflow")) {
91
+ continue;
92
+ }
93
+ // Other errors - treat as locked (priority 2)
94
+ allResults.push({
95
+ amount,
96
+ available: 0n,
97
+ status: "locked",
98
+ error: errorMessage,
99
+ priority: 2,
100
+ });
101
+ }
102
+ }
103
+ // If no results found, return null
104
+ if (allResults.length === 0) {
105
+ return null;
106
+ }
107
+ // Sort by priority (lower is better), then by amount (higher is better for same priority)
108
+ allResults.sort((a, b) => {
109
+ if (a.priority !== b.priority) {
110
+ return a.priority - b.priority;
111
+ }
112
+ // For same priority, prefer larger amounts
113
+ return a.amount > b.amount ? -1 : 1;
114
+ });
115
+ // Return the best result
116
+ const best = allResults[0];
117
+ return {
118
+ amount: best.amount,
119
+ available: best.available,
120
+ status: best.status,
121
+ error: best.error,
122
+ };
123
+ }
124
+ /**
125
+ * Get treasury airdrop status
126
+ */
127
+ export async function getTreasuryAirdropStatus(publicClient, clankerToken, treasury, tokenDecimals, tokenUsdPrice) {
128
+ const allocation = await findTreasuryAllocation(publicClient, clankerToken, treasury);
129
+ if (!allocation) {
130
+ return null;
131
+ }
132
+ // Generate appropriate error message based on status
133
+ let error;
134
+ switch (allocation.status) {
135
+ case "available":
136
+ error = undefined;
137
+ break;
138
+ case "locked":
139
+ error = allocation.error || "Airdrop is still locked (lockup period not passed)";
140
+ break;
141
+ case "claimed":
142
+ error = "Treasury airdrop already claimed";
143
+ break;
144
+ case "not_found":
145
+ error = "No treasury airdrop found";
146
+ break;
147
+ }
148
+ return {
149
+ availableAmount: formatBalanceWithUsd(allocation.available, tokenDecimals, tokenUsdPrice),
150
+ allocatedAmount: formatBalanceWithUsd(allocation.amount, tokenDecimals, tokenUsdPrice),
151
+ isAvailable: allocation.status === "available" && allocation.available > 0n,
152
+ error,
153
+ };
154
+ }
155
+ /**
156
+ * Get available airdrop amount for treasury
157
+ */
158
+ export async function getTreasuryAirdropAvailable(publicClient, clankerToken, treasury) {
159
+ const allocation = await findTreasuryAllocation(publicClient, clankerToken, treasury);
160
+ return allocation?.available || 0n;
161
+ }
162
+ //# sourceMappingURL=treasury.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"treasury.js","sourceRoot":"","sources":["../../src/treasury.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,153 @@
1
+ import { erc20Abi } from "viem";
2
+ import { LevrStaking_v1 } from "./abis/index.js";
3
+ import { formatBalanceWithUsd } from "./balance.js";
4
+ import { WETH } from "./constants.js";
5
+ // ========================================
6
+ // HELPER UTILS (for composition in larger multicalls)
7
+ // ========================================
8
+ /**
9
+ * Helper: Get balance contracts for multicall composition
10
+ */
11
+ export function balanceContracts(params) {
12
+ const contracts = [
13
+ {
14
+ address: params.clankerToken,
15
+ abi: erc20Abi,
16
+ functionName: "balanceOf",
17
+ args: [params.userAddress],
18
+ },
19
+ ];
20
+ if (params.wethAddress) {
21
+ contracts.push({
22
+ address: params.wethAddress,
23
+ abi: erc20Abi,
24
+ functionName: "balanceOf",
25
+ args: [params.userAddress],
26
+ });
27
+ }
28
+ return contracts;
29
+ }
30
+ /**
31
+ * Helper: Get user-specific staking contracts for multicall composition
32
+ * Pool-level stats (totalStaked, apr, outstandingRewards) now in project.ts
33
+ */
34
+ export function stakingContracts(params) {
35
+ const contracts = [
36
+ {
37
+ address: params.stakingAddress,
38
+ abi: LevrStaking_v1,
39
+ functionName: "stakedBalanceOf",
40
+ args: [params.userAddress],
41
+ },
42
+ {
43
+ address: params.clankerToken,
44
+ abi: erc20Abi,
45
+ functionName: "allowance",
46
+ args: [params.userAddress, params.stakingAddress],
47
+ },
48
+ {
49
+ address: params.stakingAddress,
50
+ abi: LevrStaking_v1,
51
+ functionName: "claimableRewards",
52
+ args: [params.userAddress, params.clankerToken],
53
+ },
54
+ {
55
+ address: params.stakingAddress,
56
+ abi: LevrStaking_v1,
57
+ functionName: "getVotingPower",
58
+ args: [params.userAddress],
59
+ },
60
+ ];
61
+ if (params.wethAddress) {
62
+ contracts.push({
63
+ address: params.stakingAddress,
64
+ abi: LevrStaking_v1,
65
+ functionName: "claimableRewards",
66
+ args: [params.userAddress, params.wethAddress],
67
+ });
68
+ }
69
+ return contracts;
70
+ }
71
+ // ========================================
72
+ // MAIN USER DATA FUNCTION
73
+ // ========================================
74
+ /**
75
+ * Get all user-related data in a single efficient multicall
76
+ * Composes balances, staking, and governance data with USD values
77
+ */
78
+ export async function getUser({ publicClient, userAddress, project }) {
79
+ if (Object.values({ publicClient, userAddress, project }).some((value) => !value)) {
80
+ throw new Error("Invalid user params");
81
+ }
82
+ const chainId = publicClient.chain?.id;
83
+ if (!chainId)
84
+ throw new Error("Chain ID not found on public client");
85
+ const wethAddress = WETH(chainId)?.address;
86
+ const { clankerToken, stakingAddress, tokenDecimals, pricing } = {
87
+ clankerToken: project.token.address,
88
+ stakingAddress: project.staking,
89
+ tokenDecimals: project.token.decimals,
90
+ pricing: project.pricing,
91
+ };
92
+ // Build single comprehensive multicall for ALL user data
93
+ const contracts = [
94
+ // Balances
95
+ {
96
+ address: clankerToken,
97
+ abi: erc20Abi,
98
+ functionName: "balanceOf",
99
+ args: [userAddress],
100
+ },
101
+ ];
102
+ if (wethAddress) {
103
+ contracts.push({
104
+ address: wethAddress,
105
+ abi: erc20Abi,
106
+ functionName: "balanceOf",
107
+ args: [userAddress],
108
+ });
109
+ }
110
+ // Add staking contracts
111
+ contracts.push(...stakingContracts({ userAddress, stakingAddress, clankerToken, wethAddress }));
112
+ // Execute single multicall + native balance
113
+ const [nativeBalance, ...multicallResults] = await Promise.all([
114
+ publicClient.getBalance({ address: userAddress }),
115
+ publicClient.multicall({ contracts }),
116
+ ]);
117
+ const results = multicallResults[0];
118
+ // Parse balance results
119
+ const stakingDataStartIndex = wethAddress ? 2 : 1;
120
+ const tokenBalanceRaw = results[0].result;
121
+ const wethBalanceRaw = wethAddress ? results[1].result : 0n;
122
+ // Parse user-specific staking results (pool stats now in project)
123
+ const stakedBalance = results[stakingDataStartIndex + 0].result;
124
+ const allowance = results[stakingDataStartIndex + 1].result;
125
+ const claimableRewardsToken = results[stakingDataStartIndex + 2].result;
126
+ const votingPower = results[stakingDataStartIndex + 3].result;
127
+ // Parse WETH claimable rewards if available
128
+ const claimableRewardsWeth = wethAddress
129
+ ? results[stakingDataStartIndex + 4].result
130
+ : null;
131
+ // Calculate USD values
132
+ const tokenPrice = pricing ? parseFloat(pricing.tokenUsd) : null;
133
+ const wethPrice = pricing ? parseFloat(pricing.wethUsd) : null;
134
+ return {
135
+ balances: {
136
+ token: formatBalanceWithUsd(tokenBalanceRaw, tokenDecimals, tokenPrice),
137
+ weth: formatBalanceWithUsd(wethBalanceRaw, 18, wethPrice),
138
+ eth: formatBalanceWithUsd(nativeBalance, 18, wethPrice),
139
+ },
140
+ staking: {
141
+ stakedBalance: formatBalanceWithUsd(stakedBalance, tokenDecimals, tokenPrice),
142
+ allowance: formatBalanceWithUsd(allowance, tokenDecimals, tokenPrice),
143
+ claimableRewards: {
144
+ staking: formatBalanceWithUsd(claimableRewardsToken, tokenDecimals, tokenPrice),
145
+ weth: claimableRewardsWeth !== null && wethAddress
146
+ ? formatBalanceWithUsd(claimableRewardsWeth, 18, wethPrice)
147
+ : null,
148
+ },
149
+ },
150
+ votingPower: formatBalanceWithUsd(votingPower, tokenDecimals, tokenPrice),
151
+ };
152
+ }
153
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AA+BlC,2CAA2C;AAC3C,sDAAsD;AACtD,2CAA2C;AAE3C;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAIhC;IACC,MAAM,SAAS,GAAG;QAChB;YACE,OAAO,EAAE,MAAM,CAAC,YAAY;YAC5B,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,WAAoB;YAClC,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;SAC3B;KACF,CAAA;IAED,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,SAAS,CAAC,IAAI,CAAC;YACb,OAAO,EAAE,MAAM,CAAC,WAAW;YAC3B,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,WAAoB;YAClC,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;SAC3B,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAKhC;IACC,MAAM,SAAS,GAAU;QACvB;YACE,OAAO,EAAE,MAAM,CAAC,cAAc;YAC9B,GAAG,EAAE,cAAc;YACnB,YAAY,EAAE,iBAA0B;YACxC,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;SAC3B;QACD;YACE,OAAO,EAAE,MAAM,CAAC,YAAY;YAC5B,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,WAAoB;YAClC,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC;SAClD;QACD;YACE,OAAO,EAAE,MAAM,CAAC,cAAc;YAC9B,GAAG,EAAE,cAAc;YACnB,YAAY,EAAE,kBAA2B;YACzC,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC;SAChD;QACD;YACE,OAAO,EAAE,MAAM,CAAC,cAAc;YAC9B,GAAG,EAAE,cAAc;YACnB,YAAY,EAAE,gBAAyB;YACvC,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;SAC3B;KACF,CAAA;IAED,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,SAAS,CAAC,IAAI,CAAC;YACb,OAAO,EAAE,MAAM,CAAC,cAAc;YAC9B,GAAG,EAAE,cAAc;YACnB,YAAY,EAAE,kBAA2B;YACzC,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;SAC/C,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,2CAA2C;AAC3C,0BAA0B;AAC1B,2CAA2C;AAE3C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAc;IAC9E,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAClF,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACxC,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,EAAE,CAAA;IACtC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IAEpE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1C,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG;QAC/D,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;QACnC,cAAc,EAAE,OAAO,CAAC,OAAO;QAC/B,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;QACrC,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAA;IAED,yDAAyD;IACzD,MAAM,SAAS,GAAU;QACvB,WAAW;QACX;YACE,OAAO,EAAE,YAAY;YACrB,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,WAAoB;YAClC,IAAI,EAAE,CAAC,WAAW,CAAC;SACpB;KACF,CAAA;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,SAAS,CAAC,IAAI,CAAC;YACb,OAAO,EAAE,WAAW;YACpB,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,WAAoB;YAClC,IAAI,EAAE,CAAC,WAAW,CAAC;SACpB,CAAC,CAAA;IACJ,CAAC;IAED,wBAAwB;IACxB,SAAS,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;IAE/F,4CAA4C;IAC5C,MAAM,CAAC,aAAa,EAAE,GAAG,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7D,YAAY,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QACjD,YAAY,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC;KACtC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;IAEnC,wBAAwB;IACxB,MAAM,qBAAqB,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAEjD,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAgB,CAAA;IACnD,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,CAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAiB,CAAC,CAAC,CAAC,EAAE,CAAA;IAEvE,kEAAkE;IAClE,MAAM,aAAa,GAAG,OAAO,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC,MAAgB,CAAA;IACzE,MAAM,SAAS,GAAG,OAAO,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC,MAAgB,CAAA;IACrE,MAAM,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC,MAAgB,CAAA;IACjF,MAAM,WAAW,GAAG,OAAO,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC,MAAgB,CAAA;IAEvE,4CAA4C;IAC5C,MAAM,oBAAoB,GAAG,WAAW;QACtC,CAAC,CAAE,OAAO,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC,MAAiB;QACvD,CAAC,CAAC,IAAI,CAAA;IAER,uBAAuB;IACvB,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAChE,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAE9D,OAAO;QACL,QAAQ,EAAE;YACR,KAAK,EAAE,oBAAoB,CAAC,eAAe,EAAE,aAAa,EAAE,UAAU,CAAC;YACvE,IAAI,EAAE,oBAAoB,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,CAAC;YACzD,GAAG,EAAE,oBAAoB,CAAC,aAAa,EAAE,EAAE,EAAE,SAAS,CAAC;SACxD;QACD,OAAO,EAAE;YACP,aAAa,EAAE,oBAAoB,CAAC,aAAa,EAAE,aAAa,EAAE,UAAU,CAAC;YAC7E,SAAS,EAAE,oBAAoB,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC;YACrE,gBAAgB,EAAE;gBAChB,OAAO,EAAE,oBAAoB,CAAC,qBAAqB,EAAE,aAAa,EAAE,UAAU,CAAC;gBAC/E,IAAI,EACF,oBAAoB,KAAK,IAAI,IAAI,WAAW;oBAC1C,CAAC,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,EAAE,EAAE,SAAS,CAAC;oBAC3D,CAAC,CAAC,IAAI;aACX;SACF;QACD,WAAW,EAAE,oBAAoB,CAAC,WAAW,EAAE,aAAa,EAAE,UAAU,CAAC;KAC1E,CAAA;AACH,CAAC"}
@@ -141,6 +141,54 @@ declare const _default: readonly [{
141
141
  }];
142
142
  }];
143
143
  readonly stateMutability: "view";
144
+ }, {
145
+ readonly type: "function";
146
+ readonly name: "getProjects";
147
+ readonly inputs: readonly [{
148
+ readonly name: "offset";
149
+ readonly type: "uint256";
150
+ readonly internalType: "uint256";
151
+ }, {
152
+ readonly name: "limit";
153
+ readonly type: "uint256";
154
+ readonly internalType: "uint256";
155
+ }];
156
+ readonly outputs: readonly [{
157
+ readonly name: "projects";
158
+ readonly type: "tuple[]";
159
+ readonly internalType: "struct ILevrFactory_v1.ProjectInfo[]";
160
+ readonly components: readonly [{
161
+ readonly name: "clankerToken";
162
+ readonly type: "address";
163
+ readonly internalType: "address";
164
+ }, {
165
+ readonly name: "project";
166
+ readonly type: "tuple";
167
+ readonly internalType: "struct ILevrFactory_v1.Project";
168
+ readonly components: readonly [{
169
+ readonly name: "treasury";
170
+ readonly type: "address";
171
+ readonly internalType: "address";
172
+ }, {
173
+ readonly name: "governor";
174
+ readonly type: "address";
175
+ readonly internalType: "address";
176
+ }, {
177
+ readonly name: "staking";
178
+ readonly type: "address";
179
+ readonly internalType: "address";
180
+ }, {
181
+ readonly name: "stakedToken";
182
+ readonly type: "address";
183
+ readonly internalType: "address";
184
+ }];
185
+ }];
186
+ }, {
187
+ readonly name: "total";
188
+ readonly type: "uint256";
189
+ readonly internalType: "uint256";
190
+ }];
191
+ readonly stateMutability: "view";
144
192
  }, {
145
193
  readonly type: "function";
146
194
  readonly name: "isTrustedForwarder";
@@ -138,6 +138,18 @@ declare const _default: readonly [{
138
138
  readonly name: "cycleId";
139
139
  readonly type: "uint256";
140
140
  readonly internalType: "uint256";
141
+ }, {
142
+ readonly name: "state";
143
+ readonly type: "uint8";
144
+ readonly internalType: "enum ILevrGovernor_v1.ProposalState";
145
+ }, {
146
+ readonly name: "meetsQuorum";
147
+ readonly type: "bool";
148
+ readonly internalType: "bool";
149
+ }, {
150
+ readonly name: "meetsApproval";
151
+ readonly type: "bool";
152
+ readonly internalType: "bool";
141
153
  }];
142
154
  }];
143
155
  readonly stateMutability: "view";
@@ -186,24 +198,6 @@ declare const _default: readonly [{
186
198
  }];
187
199
  }];
188
200
  readonly stateMutability: "view";
189
- }, {
190
- readonly type: "function";
191
- readonly name: "getVotingPowerSnapshot";
192
- readonly inputs: readonly [{
193
- readonly name: "proposalId";
194
- readonly type: "uint256";
195
- readonly internalType: "uint256";
196
- }, {
197
- readonly name: "user";
198
- readonly type: "address";
199
- readonly internalType: "address";
200
- }];
201
- readonly outputs: readonly [{
202
- readonly name: "";
203
- readonly type: "uint256";
204
- readonly internalType: "uint256";
205
- }];
206
- readonly stateMutability: "view";
207
201
  }, {
208
202
  readonly type: "function";
209
203
  readonly name: "getWinner";
@@ -322,7 +322,11 @@ declare const _default: readonly [{
322
322
  readonly type: "address";
323
323
  readonly internalType: "address";
324
324
  }];
325
- readonly outputs: readonly [];
325
+ readonly outputs: readonly [{
326
+ readonly name: "newVotingPower";
327
+ readonly type: "uint256";
328
+ readonly internalType: "uint256";
329
+ }];
326
330
  readonly stateMutability: "nonpayable";
327
331
  }, {
328
332
  readonly type: "event";
@@ -10,6 +10,21 @@ export type BalanceParams = {
10
10
  tokens: TokenConfig[];
11
11
  pricing?: PricingResult;
12
12
  };
13
+ /**
14
+ * Calculate USD value for a balance
15
+ * @param formatted - Formatted token amount as string
16
+ * @param usdPrice - USD price as string
17
+ * @returns USD value as string
18
+ */
19
+ export declare const calculateUsd: (formatted: string, usdPrice: string) => string;
20
+ /**
21
+ * Format a balance with optional USD value
22
+ * @param amount - Raw balance amount
23
+ * @param decimals - Token decimals
24
+ * @param usdPrice - Optional USD price (null if not available)
25
+ * @returns BalanceResult with raw, formatted, and optional USD value
26
+ */
27
+ export declare const formatBalanceWithUsd: (amount: bigint, decimals: number, usdPrice: number | null) => BalanceResult;
13
28
  /**
14
29
  * Get balances for multiple tokens including native currency
15
30
  * @param publicClient - The public client to use for queries
@@ -1 +1 @@
1
- {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/balance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5E,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,KAAK,MAAM,EAAE,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,EAAE,eAAe,CAAA;IAC7B,OAAO,EAAE,KAAK,MAAM,EAAE,CAAA;IACtB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB,CAAA;AAWD;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,EAC5B,YAAY,EACZ,OAAO,EACP,MAAM,EACN,OAAO,GACR,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAoFxD"}
1
+ {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/balance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5E,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,KAAK,MAAM,EAAE,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,EAAE,eAAe,CAAA;IAC7B,OAAO,EAAE,KAAK,MAAM,EAAE,CAAA;IACtB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,EAAE,UAAU,MAAM,KAAG,MAIlE,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,MAAM,EACd,UAAU,MAAM,EAChB,UAAU,MAAM,GAAG,IAAI,KACtB,aAOF,CAAA;AAED;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,EAC5B,YAAY,EACZ,OAAO,EACP,MAAM,EACN,OAAO,GACR,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAoFxD"}
@@ -1,11 +1,15 @@
1
+ /**
2
+ * Hook to access user data from LevrProvider (hierarchical)
3
+ */
4
+ export declare const useUser: () => import("@tanstack/react-query").UseQueryResult<import("../..").User | null>;
1
5
  /**
2
6
  * Hook to access project data from LevrProvider
3
7
  */
4
8
  export declare const useProject: () => import("@tanstack/react-query").UseQueryResult<import("../..").Project | null>;
5
9
  /**
6
- * Hook to access balance data from LevrProvider
10
+ * Hook to access pool data from LevrProvider
7
11
  */
8
- export declare const useBalance: () => import("@tanstack/react-query").UseQueryResult<Record<string, import("../..").BalanceResult>>;
12
+ export declare const usePool: () => import("@tanstack/react-query").UseQueryResult<import("../..").PoolData | null>;
9
13
  /**
10
14
  * Hook to access proposals from LevrProvider
11
15
  */
@@ -25,8 +29,12 @@ export * from './use-fee-receivers';
25
29
  export * from './use-governance';
26
30
  export * from './use-stake';
27
31
  export * from './use-swap';
32
+ export { usePoolQuery } from './use-pool';
33
+ export { useProposalsQuery } from './use-proposal';
34
+ export { useUserQuery } from './use-user';
28
35
  export * from './use-deploy';
29
36
  export * from './use-prepare';
30
- export * from './use-projects';
37
+ export * from './use-project';
38
+ export { useProposal } from './use-proposal';
31
39
  export * from './use-register';
32
40
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/client/hook/index.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,eAAO,MAAM,UAAU,sFAAiC,CAAA;AAExD;;GAEG;AACH,eAAO,MAAM,UAAU,qGAAkC,CAAA;AAEzD;;GAEG;AACH,eAAO,MAAM,YAAY,8FAAmC,CAAA;AAE5D;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;SAAmC,CAAA;AAM/D,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAM1B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/client/hook/index.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,eAAO,MAAM,OAAO,mFAA8B,CAAA;AAElD;;GAEG;AACH,eAAO,MAAM,UAAU,sFAAiC,CAAA;AAExD;;GAEG;AACH,eAAO,MAAM,OAAO,uFAA8B,CAAA;AAElD;;GAEG;AACH,eAAO,MAAM,YAAY,8FAAmC,CAAA;AAE5D;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;SAAmC,CAAA;AAM/D,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAM1B,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAMzC,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,cAAc,gBAAgB,CAAA"}
@@ -1,26 +1,16 @@
1
- import type { Address } from 'viem';
2
1
  import type { UpdateFeeReceiverParams } from '../../fee-receivers';
3
- export type UseFeeReceiversQueryParams = {
4
- clankerToken: Address | null;
5
- enabled?: boolean;
6
- };
7
- /**
8
- * Internal: Creates fee receivers query with all logic
9
- * Used by LevrProvider
10
- */
11
- export declare function useFeeReceiversQuery({ clankerToken, enabled: e, }: UseFeeReceiversQueryParams): import("@tanstack/react-query").UseQueryResult<import("../..").FeeReceiverAdmin[] | undefined, Error>;
12
2
  export type UseFeeReceiversParams = {
13
- clankerToken?: `0x${string}` | undefined;
14
- enabled?: boolean;
15
3
  onSuccess?: (hash: `0x${string}`) => void;
16
4
  onError?: (error: unknown) => void;
17
5
  };
18
6
  /**
19
- * Hook to access fee receivers query and mutations
20
- * Returns both query data and mutation function
7
+ * Hook to access fee receivers and update mutations
8
+ * Fee receivers come from project.feeReceivers (with areYouAnAdmin already calculated)
21
9
  */
22
- export declare function useFeeReceivers({ clankerToken: _clankerToken, enabled: _e, onSuccess, onError, }?: UseFeeReceiversParams): {
23
- query: import("@tanstack/react-query").UseQueryResult<import("../..").FeeReceiverAdmin[] | undefined>;
10
+ export declare function useFeeReceivers({ onSuccess, onError }?: UseFeeReceiversParams): {
11
+ data: import("../..").FeeReceiverAdmin[] | undefined;
12
+ isLoading: boolean;
13
+ error: Error | null;
24
14
  mutate: import("@tanstack/react-query").UseMutationResult<`0x${string}`, unknown, Omit<UpdateFeeReceiverParams, "chainId" | "walletClient">, unknown>;
25
15
  };
26
16
  //# sourceMappingURL=use-fee-receivers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-fee-receivers.d.ts","sourceRoot":"","sources":["../../../../src/client/hook/use-fee-receivers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAGnC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAKlE,MAAM,MAAM,0BAA0B,GAAG;IACvC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,YAAY,EACZ,OAAO,EAAE,CAAQ,GAClB,EAAE,0BAA0B,yGAgB5B;AAMD,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,CAAC,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS,CAAA;IACxC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,KAAK,IAAI,CAAA;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CACnC,CAAA;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,YAAY,EAAE,aAAa,EAC3B,OAAO,EAAE,EAAS,EAClB,SAAS,EACT,OAAO,GACR,GAAE,qBAA0B;;;EA0B5B"}
1
+ {"version":3,"file":"use-fee-receivers.d.ts","sourceRoot":"","sources":["../../../../src/client/hook/use-fee-receivers.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAWlE,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,KAAK,IAAI,CAAA;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CACnC,CAAA;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAE,qBAA0B;;;;;EA4BjF"}