levr-sdk 0.0.2 → 0.1.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.
Files changed (120) hide show
  1. package/dist/esm/abis/LevrFactory_v1.js +63 -0
  2. package/dist/esm/abis/LevrGovernor_v1.js +15 -24
  3. package/dist/esm/abis/LevrStaking_v1.js +7 -1
  4. package/dist/esm/balance.js +19 -1
  5. package/dist/esm/balance.js.map +1 -1
  6. package/dist/esm/client/hook/index.js +14 -3
  7. package/dist/esm/client/hook/index.js.map +1 -1
  8. package/dist/esm/client/hook/use-fee-receivers.js +11 -29
  9. package/dist/esm/client/hook/use-fee-receivers.js.map +1 -1
  10. package/dist/esm/client/hook/use-governance.js +19 -254
  11. package/dist/esm/client/hook/use-governance.js.map +1 -1
  12. package/dist/esm/client/hook/use-pool.js +26 -0
  13. package/dist/esm/client/hook/use-pool.js.map +1 -0
  14. package/dist/esm/client/hook/use-prepare.js +6 -3
  15. package/dist/esm/client/hook/use-prepare.js.map +1 -1
  16. package/dist/esm/client/hook/use-project.js +24 -9
  17. package/dist/esm/client/hook/use-project.js.map +1 -1
  18. package/dist/esm/client/hook/use-proposal.js +48 -0
  19. package/dist/esm/client/hook/use-proposal.js.map +1 -0
  20. package/dist/esm/client/hook/use-stake.js +29 -195
  21. package/dist/esm/client/hook/use-stake.js.map +1 -1
  22. package/dist/esm/client/hook/use-swap.js +9 -13
  23. package/dist/esm/client/hook/use-swap.js.map +1 -1
  24. package/dist/esm/client/hook/use-user.js +25 -0
  25. package/dist/esm/client/hook/use-user.js.map +1 -0
  26. package/dist/esm/client/levr-provider.js +65 -107
  27. package/dist/esm/client/levr-provider.js.map +1 -1
  28. package/dist/esm/client/query-keys.js +9 -21
  29. package/dist/esm/client/query-keys.js.map +1 -1
  30. package/dist/esm/constants.js +1 -1
  31. package/dist/esm/fee-receivers.js +25 -13
  32. package/dist/esm/fee-receivers.js.map +1 -1
  33. package/dist/esm/governance.js +35 -414
  34. package/dist/esm/governance.js.map +1 -1
  35. package/dist/esm/index.js +4 -2
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/pool.js +70 -0
  38. package/dist/esm/pool.js.map +1 -0
  39. package/dist/esm/project.js +389 -135
  40. package/dist/esm/project.js.map +1 -1
  41. package/dist/esm/proposal.js +156 -0
  42. package/dist/esm/proposal.js.map +1 -0
  43. package/dist/esm/quote/index.js +2 -2
  44. package/dist/esm/quote/index.js.map +1 -1
  45. package/dist/esm/stake.js +34 -299
  46. package/dist/esm/stake.js.map +1 -1
  47. package/dist/esm/treasury.js +162 -0
  48. package/dist/esm/treasury.js.map +1 -0
  49. package/dist/esm/user.js +153 -0
  50. package/dist/esm/user.js.map +1 -0
  51. package/dist/types/abis/LevrFactory_v1.d.ts +48 -0
  52. package/dist/types/abis/LevrGovernor_v1.d.ts +12 -18
  53. package/dist/types/abis/LevrStaking_v1.d.ts +5 -1
  54. package/dist/types/balance.d.ts +15 -0
  55. package/dist/types/balance.d.ts.map +1 -1
  56. package/dist/types/client/hook/index.d.ts +11 -3
  57. package/dist/types/client/hook/index.d.ts.map +1 -1
  58. package/dist/types/client/hook/use-fee-receivers.d.ts +6 -16
  59. package/dist/types/client/hook/use-fee-receivers.d.ts.map +1 -1
  60. package/dist/types/client/hook/use-governance.d.ts +4 -98
  61. package/dist/types/client/hook/use-governance.d.ts.map +1 -1
  62. package/dist/types/client/hook/use-pool.d.ts +12 -0
  63. package/dist/types/client/hook/use-pool.d.ts.map +1 -0
  64. package/dist/types/client/hook/use-prepare.d.ts +1 -2
  65. package/dist/types/client/hook/use-prepare.d.ts.map +1 -1
  66. package/dist/types/client/hook/use-project.d.ts +5 -0
  67. package/dist/types/client/hook/use-project.d.ts.map +1 -1
  68. package/dist/types/client/hook/use-proposal.d.ts +18 -0
  69. package/dist/types/client/hook/use-proposal.d.ts.map +1 -0
  70. package/dist/types/client/hook/use-stake.d.ts +14 -73
  71. package/dist/types/client/hook/use-stake.d.ts.map +1 -1
  72. package/dist/types/client/hook/use-swap.d.ts +3 -8
  73. package/dist/types/client/hook/use-swap.d.ts.map +1 -1
  74. package/dist/types/client/hook/use-user.d.ts +13 -0
  75. package/dist/types/client/hook/use-user.d.ts.map +1 -0
  76. package/dist/types/client/levr-provider.d.ts +30 -50
  77. package/dist/types/client/levr-provider.d.ts.map +1 -1
  78. package/dist/types/client/query-keys.d.ts +13 -25
  79. package/dist/types/client/query-keys.d.ts.map +1 -1
  80. package/dist/types/fee-receivers.d.ts +28 -0
  81. package/dist/types/fee-receivers.d.ts.map +1 -1
  82. package/dist/types/governance.d.ts +5 -92
  83. package/dist/types/governance.d.ts.map +1 -1
  84. package/dist/types/index.d.ts +4 -2
  85. package/dist/types/index.d.ts.map +1 -1
  86. package/dist/types/pool.d.ts +590 -0
  87. package/dist/types/pool.d.ts.map +1 -0
  88. package/dist/types/project.d.ts +56 -1
  89. package/dist/types/project.d.ts.map +1 -1
  90. package/dist/types/proposal.d.ts +1161 -0
  91. package/dist/types/proposal.d.ts.map +1 -0
  92. package/dist/types/quote/index.d.ts +2 -2
  93. package/dist/types/quote/index.d.ts.map +1 -1
  94. package/dist/types/stake.d.ts +16 -41
  95. package/dist/types/stake.d.ts.map +1 -1
  96. package/dist/types/treasury.d.ts +16 -0
  97. package/dist/types/treasury.d.ts.map +1 -0
  98. package/dist/types/user.d.ts +188 -0
  99. package/dist/types/user.d.ts.map +1 -0
  100. package/package.json +5 -2
  101. package/dist/esm/client/hook/use-balance.js +0 -57
  102. package/dist/esm/client/hook/use-balance.js.map +0 -1
  103. package/dist/esm/client/hook/use-projects.js +0 -22
  104. package/dist/esm/client/hook/use-projects.js.map +0 -1
  105. package/dist/esm/client/hook/use-proposals.js +0 -29
  106. package/dist/esm/client/hook/use-proposals.js.map +0 -1
  107. package/dist/esm/projects.js +0 -184
  108. package/dist/esm/projects.js.map +0 -1
  109. package/dist/esm/proposals.js +0 -98
  110. package/dist/esm/proposals.js.map +0 -1
  111. package/dist/types/client/hook/use-balance.d.ts +0 -20
  112. package/dist/types/client/hook/use-balance.d.ts.map +0 -1
  113. package/dist/types/client/hook/use-projects.d.ts +0 -6
  114. package/dist/types/client/hook/use-projects.d.ts.map +0 -1
  115. package/dist/types/client/hook/use-proposals.d.ts +0 -16
  116. package/dist/types/client/hook/use-proposals.d.ts.map +0 -1
  117. package/dist/types/projects.d.ts +0 -20
  118. package/dist/types/projects.d.ts.map +0 -1
  119. package/dist/types/proposals.d.ts +0 -20
  120. package/dist/types/proposals.d.ts.map +0 -1
@@ -1,184 +0,0 @@
1
- import { erc20Abi, formatUnits, zeroAddress } from "viem";
2
- import { IClankerToken, LevrFactory_v1 } from "./abis/index.js";
3
- const registeredEvent = LevrFactory_v1.find((item) => item.type === "event" && item.name === "Registered");
4
- /**
5
- * Get multiple projects data
6
- */
7
- export async function projects({ publicClient, factoryAddress, chainId, fromBlock, toBlock = "latest", pageSize = 100, }) {
8
- if (Object.values({ publicClient, factoryAddress, chainId }).some((value) => !value)) {
9
- throw new Error("Invalid projects params");
10
- }
11
- // Determine block range
12
- const latestBlock = await publicClient.getBlockNumber();
13
- const from = fromBlock ?? latestBlock - latestBlock / 10n; // Default to last 10% of blocks
14
- const to = toBlock === "latest" ? latestBlock : toBlock;
15
- // Fetch Registered events - indexed events are efficient even across large ranges
16
- const allLogs = (await publicClient.getLogs({
17
- address: factoryAddress,
18
- event: registeredEvent,
19
- fromBlock: from,
20
- toBlock: to,
21
- }));
22
- // Sort by block number descending (most recent first)
23
- const logs = allLogs.sort((a, b) => {
24
- if (a.blockNumber > b.blockNumber)
25
- return -1;
26
- if (a.blockNumber < b.blockNumber)
27
- return 1;
28
- return 0;
29
- });
30
- // Limit to pageSize
31
- const limitedLogs = logs.slice(0, pageSize);
32
- if (limitedLogs.length === 0) {
33
- return {
34
- projects: [],
35
- fromBlock: from,
36
- toBlock: to,
37
- };
38
- }
39
- // Extract unique clanker tokens
40
- const clankerTokens = limitedLogs.map((log) => log.args.clankerToken);
41
- // First, get project contracts for all tokens
42
- const projectContracts = await publicClient.multicall({
43
- contracts: clankerTokens.map((token) => ({
44
- address: factoryAddress,
45
- abi: LevrFactory_v1,
46
- functionName: "getProjectContracts",
47
- args: [token],
48
- })),
49
- });
50
- // Filter out unregistered projects and prepare valid tokens with their contracts
51
- const validTokensWithContracts = clankerTokens
52
- .map((token, index) => {
53
- const projectResult = projectContracts[index].result;
54
- if ([
55
- projectResult.treasury,
56
- projectResult.governor,
57
- projectResult.staking,
58
- projectResult.stakedToken,
59
- ].some((a) => a === zeroAddress)) {
60
- return null;
61
- }
62
- return { token, contracts: projectResult };
63
- })
64
- .filter(Boolean);
65
- if (validTokensWithContracts.length === 0) {
66
- return {
67
- projects: [],
68
- fromBlock: from,
69
- toBlock: to,
70
- };
71
- }
72
- // Batch fetch all token metadata and treasury stats
73
- const contracts = validTokensWithContracts.flatMap(({ token, contracts }) => [
74
- // Token metadata
75
- {
76
- address: token,
77
- abi: erc20Abi,
78
- functionName: "decimals",
79
- },
80
- {
81
- address: token,
82
- abi: erc20Abi,
83
- functionName: "name",
84
- },
85
- {
86
- address: token,
87
- abi: erc20Abi,
88
- functionName: "symbol",
89
- },
90
- {
91
- address: token,
92
- abi: erc20Abi,
93
- functionName: "totalSupply",
94
- },
95
- {
96
- address: token,
97
- abi: IClankerToken,
98
- functionName: "metadata",
99
- },
100
- {
101
- address: token,
102
- abi: IClankerToken,
103
- functionName: "imageUrl",
104
- },
105
- // Treasury stats
106
- {
107
- address: token,
108
- abi: erc20Abi,
109
- functionName: "balanceOf",
110
- args: [contracts.treasury],
111
- },
112
- {
113
- address: token,
114
- abi: erc20Abi,
115
- functionName: "balanceOf",
116
- args: [contracts.staking],
117
- },
118
- ]);
119
- const results = await publicClient.multicall({ contracts });
120
- // Parse results into Project objects
121
- const projects = [];
122
- const callsPerProject = 8; // decimals, name, symbol, totalSupply, metadata, imageUrl, treasuryBalance, stakingBalance
123
- for (let i = 0; i < validTokensWithContracts.length; i++) {
124
- const { token, contracts: projectContracts } = validTokensWithContracts[i];
125
- const offset = i * callsPerProject;
126
- const decimals = results[offset].result;
127
- const name = results[offset + 1].result;
128
- const symbol = results[offset + 2].result;
129
- const totalSupply = results[offset + 3].result;
130
- const metadataStr = results[offset + 4].result;
131
- const imageUrl = results[offset + 5].result;
132
- const treasuryBalance = results[offset + 6].result;
133
- const stakingBalance = results[offset + 7].result;
134
- // Parse metadata JSON
135
- let parsedMetadata = null;
136
- if (metadataStr) {
137
- try {
138
- parsedMetadata = JSON.parse(metadataStr);
139
- }
140
- catch {
141
- // If parsing fails, leave as null
142
- }
143
- }
144
- // Calculate treasury stats
145
- const totalAllocated = treasuryBalance + stakingBalance;
146
- const utilization = totalSupply > 0n
147
- ? Number((totalAllocated * 10000n) / totalSupply) / 100 // Convert to percentage
148
- : 0;
149
- const treasuryStats = {
150
- balance: {
151
- raw: treasuryBalance,
152
- formatted: formatUnits(treasuryBalance, decimals),
153
- },
154
- totalAllocated: {
155
- raw: totalAllocated,
156
- formatted: formatUnits(totalAllocated, decimals),
157
- },
158
- utilization,
159
- };
160
- projects.push({
161
- chainId,
162
- treasury: projectContracts.treasury,
163
- governor: projectContracts.governor,
164
- staking: projectContracts.staking,
165
- stakedToken: projectContracts.stakedToken,
166
- token: {
167
- address: token,
168
- decimals,
169
- name,
170
- symbol,
171
- totalSupply,
172
- metadata: parsedMetadata,
173
- imageUrl,
174
- },
175
- treasuryStats,
176
- });
177
- }
178
- return {
179
- projects,
180
- fromBlock: from,
181
- toBlock: to,
182
- };
183
- }
184
- //# sourceMappingURL=projects.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/projects.ts"],"names":[],"mappings":"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"}
@@ -1,98 +0,0 @@
1
- import { formatUnits } from "viem";
2
- import { LevrGovernor_v1 } from "./abis/index.js";
3
- const proposalCreatedEvent = LevrGovernor_v1.find((item) => item.type === "event" && item.name === "ProposalCreated");
4
- /**
5
- * Get multiple proposals data from governor contract
6
- */
7
- export async function proposals({ publicClient, governorAddress, tokenDecimals = 18, fromBlock, toBlock = "latest", pageSize = 50, }) {
8
- if (Object.values({ publicClient, governorAddress }).some((value) => !value)) {
9
- throw new Error("Invalid proposals params");
10
- }
11
- // Determine block range
12
- const latestBlock = await publicClient.getBlockNumber();
13
- const from = fromBlock ?? latestBlock - latestBlock / 10n; // Default to last 10% of blocks
14
- const to = toBlock === "latest" ? latestBlock : toBlock;
15
- // Fetch ProposalCreated events - indexed events are efficient even across large ranges
16
- const allLogs = (await publicClient.getLogs({
17
- address: governorAddress,
18
- event: proposalCreatedEvent,
19
- fromBlock: from,
20
- toBlock: to,
21
- }));
22
- // Sort by block number descending (most recent first)
23
- const logs = allLogs.sort((a, b) => {
24
- if (a.blockNumber > b.blockNumber)
25
- return -1;
26
- if (a.blockNumber < b.blockNumber)
27
- return 1;
28
- return 0;
29
- });
30
- // Limit to pageSize
31
- const limitedLogs = logs.slice(0, pageSize);
32
- if (limitedLogs.length === 0) {
33
- return {
34
- proposals: [],
35
- fromBlock: from,
36
- toBlock: to,
37
- };
38
- }
39
- // Extract proposal IDs from events
40
- const proposalIds = limitedLogs.map((log) => log.args.proposalId);
41
- // Batch fetch all proposal details
42
- const contracts = proposalIds.map((proposalId) => ({
43
- address: governorAddress,
44
- abi: LevrGovernor_v1,
45
- functionName: "getProposal",
46
- args: [proposalId],
47
- }));
48
- const results = await publicClient.multicall({ contracts });
49
- // Parse results into FormattedProposalDetails objects
50
- const proposals = [];
51
- for (let i = 0; i < proposalIds.length; i++) {
52
- const result = results[i].result;
53
- // Skip if proposal data is invalid
54
- if (!result) {
55
- continue;
56
- }
57
- proposals.push({
58
- id: result.id,
59
- proposalType: result.proposalType,
60
- proposer: result.proposer,
61
- amount: {
62
- raw: result.amount,
63
- formatted: formatUnits(result.amount, tokenDecimals),
64
- },
65
- recipient: result.recipient,
66
- description: result.description,
67
- createdAt: {
68
- timestamp: result.createdAt,
69
- date: new Date(Number(result.createdAt) * 1000),
70
- },
71
- votingStartsAt: {
72
- timestamp: result.votingStartsAt,
73
- date: new Date(Number(result.votingStartsAt) * 1000),
74
- },
75
- votingEndsAt: {
76
- timestamp: result.votingEndsAt,
77
- date: new Date(Number(result.votingEndsAt) * 1000),
78
- },
79
- yesVotes: {
80
- raw: result.yesVotes,
81
- formatted: formatUnits(result.yesVotes, tokenDecimals),
82
- },
83
- noVotes: {
84
- raw: result.noVotes,
85
- formatted: formatUnits(result.noVotes, tokenDecimals),
86
- },
87
- totalBalanceVoted: result.totalBalanceVoted,
88
- executed: result.executed,
89
- cycleId: result.cycleId,
90
- });
91
- }
92
- return {
93
- proposals,
94
- fromBlock: from,
95
- toBlock: to,
96
- };
97
- }
98
- //# sourceMappingURL=proposals.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proposals.js","sourceRoot":"","sources":["../../src/proposals.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import type { Address } from 'viem';
2
- import type { PricingResult } from '../..';
3
- import type { TokenConfig } from '../../balance';
4
- export type UseBalanceParams = {
5
- tokens?: TokenConfig[];
6
- enabled?: boolean;
7
- refetchInterval?: number | false;
8
- };
9
- export type UseBalanceQueryParams = {
10
- clankerToken: Address | null;
11
- projectTokenDecimals?: number;
12
- pricing?: PricingResult;
13
- enabled?: boolean;
14
- };
15
- /**
16
- * Internal: Creates balance query with all logic
17
- * Used by LevrProvider
18
- */
19
- export declare function useBalanceQuery({ clankerToken, projectTokenDecimals, pricing, enabled: e, }: UseBalanceQueryParams): import("@tanstack/react-query").UseQueryResult<Record<string, import("../..").BalanceResult>, Error>;
20
- //# sourceMappingURL=use-balance.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-balance.d.ts","sourceRoot":"","sources":["../../../../src/client/hook/use-balance.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAInC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAKhD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,WAAW,EAAE,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,YAAY,EACZ,oBAAyB,EACzB,OAAO,EACP,OAAO,EAAE,CAAQ,GAClB,EAAE,qBAAqB,wGAkDvB"}
@@ -1,6 +0,0 @@
1
- import type { ProjectsParams, ProjectsResult } from '../../projects';
2
- export type UseProjectsParams = {
3
- enabled?: boolean;
4
- } & Omit<ProjectsParams, 'publicClient' | 'factoryAddress' | 'chainId'>;
5
- export declare function useProjects({ enabled: e, ...params }?: UseProjectsParams): import("@tanstack/react-query").UseQueryResult<ProjectsResult, Error>;
6
- //# sourceMappingURL=use-projects.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-projects.d.ts","sourceRoot":"","sources":["../../../../src/client/hook/use-projects.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAGpE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,GAAG,IAAI,CAAC,cAAc,EAAE,cAAc,GAAG,gBAAgB,GAAG,SAAS,CAAC,CAAA;AAEvE,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAQ,EAAE,GAAG,MAAM,EAAE,GAAE,iBAAsB,yEAmBnF"}
@@ -1,16 +0,0 @@
1
- import type { Address } from 'viem';
2
- import type { ProposalsParams } from '../../proposals';
3
- export type UseProposalsParams = Omit<ProposalsParams, 'publicClient'> & {
4
- enabled?: boolean;
5
- };
6
- export type UseProposalsQueryParams = {
7
- governorAddress?: Address;
8
- tokenDecimals?: number;
9
- enabled?: boolean;
10
- };
11
- /**
12
- * Internal: Creates proposals query with all logic
13
- * Used by LevrProvider
14
- */
15
- export declare function useProposalsQuery({ governorAddress, tokenDecimals, enabled: e, }: UseProposalsQueryParams): import("@tanstack/react-query").UseQueryResult<import("../..").ProposalsResult, Error>;
16
- //# sourceMappingURL=use-proposals.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-proposals.d.ts","sourceRoot":"","sources":["../../../../src/client/hook/use-proposals.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAGnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAItD,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,GAAG;IACvE,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,eAAe,EACf,aAAkB,EAClB,OAAO,EAAE,CAAQ,GAClB,EAAE,uBAAuB,0FAoBzB"}
@@ -1,20 +0,0 @@
1
- import type { Project } from './project';
2
- import type { PopPublicClient } from './types';
3
- export type ProjectsParams = {
4
- publicClient: PopPublicClient;
5
- factoryAddress: `0x${string}`;
6
- chainId: number;
7
- fromBlock?: bigint;
8
- toBlock?: bigint | 'latest';
9
- pageSize?: number;
10
- };
11
- export type ProjectsResult = {
12
- projects: Omit<Project, 'forwarder' | 'pool' | 'pricing'>[];
13
- fromBlock: bigint;
14
- toBlock: bigint;
15
- };
16
- /**
17
- * Get multiple projects data
18
- */
19
- export declare function projects({ publicClient, factoryAddress, chainId, fromBlock, toBlock, pageSize, }: ProjectsParams): Promise<ProjectsResult>;
20
- //# sourceMappingURL=projects.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/projects.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAkC,MAAM,WAAW,CAAA;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,EAAE,eAAe,CAAA;IAC7B,cAAc,EAAE,KAAK,MAAM,EAAE,CAAA;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC,EAAE,CAAA;IAC3D,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAcD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,EAC7B,YAAY,EACZ,cAAc,EACd,OAAO,EACP,SAAS,EACT,OAAkB,EAClB,QAAc,GACf,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAkN1C"}
@@ -1,20 +0,0 @@
1
- import type { FormattedProposalDetails } from './governance';
2
- import type { PopPublicClient } from './types';
3
- export type ProposalsParams = {
4
- publicClient: PopPublicClient;
5
- governorAddress: `0x${string}`;
6
- tokenDecimals?: number;
7
- fromBlock?: bigint;
8
- toBlock?: bigint | 'latest';
9
- pageSize?: number;
10
- };
11
- export type ProposalsResult = {
12
- proposals: FormattedProposalDetails[];
13
- fromBlock: bigint;
14
- toBlock: bigint;
15
- };
16
- /**
17
- * Get multiple proposals data from governor contract
18
- */
19
- export declare function proposals({ publicClient, governorAddress, tokenDecimals, fromBlock, toBlock, pageSize, }: ProposalsParams): Promise<ProposalsResult>;
20
- //# sourceMappingURL=proposals.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proposals.d.ts","sourceRoot":"","sources":["../../src/proposals.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,EAAE,eAAe,CAAA;IAC7B,eAAe,EAAE,KAAK,MAAM,EAAE,CAAA;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,wBAAwB,EAAE,CAAA;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAcD;;GAEG;AACH,wBAAsB,SAAS,CAAC,EAC9B,YAAY,EACZ,eAAe,EACf,aAAkB,EAClB,SAAS,EACT,OAAkB,EAClB,QAAa,GACd,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAoH5C"}