@moonwell-fi/moonwell-sdk 0.13.1 → 0.14.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/CHANGELOG.md +10 -0
- package/_cjs/actions/governance/getUserVoteReceipt.js +39 -25
- package/_cjs/actions/governance/getUserVoteReceipt.js.map +1 -1
- package/_cjs/actions/governance/governor-api-client.js +70 -33
- package/_cjs/actions/governance/governor-api-client.js.map +1 -1
- package/_cjs/actions/governance/proposals/common.js +29 -1
- package/_cjs/actions/governance/proposals/common.js.map +1 -1
- package/_cjs/actions/governance/proposals/getProposal.js +24 -17
- package/_cjs/actions/governance/proposals/getProposal.js.map +1 -1
- package/_cjs/actions/governance/proposals/getProposals.js +27 -9
- package/_cjs/actions/governance/proposals/getProposals.js.map +1 -1
- package/_cjs/errors/version.js +1 -1
- package/_esm/actions/governance/getUserVoteReceipt.js +48 -26
- package/_esm/actions/governance/getUserVoteReceipt.js.map +1 -1
- package/_esm/actions/governance/governor-api-client.js +87 -35
- package/_esm/actions/governance/governor-api-client.js.map +1 -1
- package/_esm/actions/governance/proposals/common.js +44 -1
- package/_esm/actions/governance/proposals/common.js.map +1 -1
- package/_esm/actions/governance/proposals/getProposal.js +36 -23
- package/_esm/actions/governance/proposals/getProposal.js.map +1 -1
- package/_esm/actions/governance/proposals/getProposals.js +44 -10
- package/_esm/actions/governance/proposals/getProposals.js.map +1 -1
- package/_esm/errors/version.js +1 -1
- package/_types/actions/governance/getUserVoteReceipt.d.ts +16 -0
- package/_types/actions/governance/getUserVoteReceipt.d.ts.map +1 -1
- package/_types/actions/governance/governor-api-client.d.ts +37 -12
- package/_types/actions/governance/governor-api-client.d.ts.map +1 -1
- package/_types/actions/governance/proposals/common.d.ts +14 -1
- package/_types/actions/governance/proposals/common.d.ts.map +1 -1
- package/_types/actions/governance/proposals/getProposal.d.ts +6 -1
- package/_types/actions/governance/proposals/getProposal.d.ts.map +1 -1
- package/_types/actions/governance/proposals/getProposals.d.ts +1 -1
- package/_types/actions/governance/proposals/getProposals.d.ts.map +1 -1
- package/_types/errors/version.d.ts +1 -1
- package/actions/governance/getUserVoteReceipt.ts +71 -31
- package/actions/governance/governor-api-client.ts +136 -62
- package/actions/governance/proposals/common.ts +51 -1
- package/actions/governance/proposals/getProposal.ts +46 -26
- package/actions/governance/proposals/getProposals.ts +48 -14
- package/errors/version.ts +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { moonbeam, moonriver } from "viem/chains";
|
|
2
2
|
import { Amount, getEnvironmentFromArgs } from "../../../common/index.js";
|
|
3
|
-
import {
|
|
3
|
+
import { ProposalState } from "../../../types/proposal.js";
|
|
4
|
+
import { SUPPORTED_GOVERNOR_CHAIN_IDS, fetchProposal, isNotFoundError, } from "../governor-api-client.js";
|
|
4
5
|
import { appendProposalExtendedData, formatApiProposalData, getCrossChainProposalData, getExtendedProposalData, getProposalData, getProposalsOnChainData, isMultichainProposal, } from "./common.js";
|
|
5
6
|
export async function getProposal(client, args) {
|
|
6
7
|
const { proposalId } = args;
|
|
@@ -12,46 +13,58 @@ export async function getProposal(client, args) {
|
|
|
12
13
|
environment.chainId !== moonriver.id) {
|
|
13
14
|
return undefined;
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
if (environment.chainId === moonbeam.id) {
|
|
17
|
+
return getMoonbeamProposal(environment, proposalId, args.chainId);
|
|
18
|
+
}
|
|
19
|
+
return getMoonriverProposal(environment, proposalId);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Fetch a single proposal for Moonbeam using the Governor API.
|
|
23
|
+
*
|
|
24
|
+
* When `chainId` is provided we hit only that chain. When omitted we try the
|
|
25
|
+
* supported chains in order (Ethereum first since that's where active multigov
|
|
26
|
+
* proposals live) and fall back on `NotFoundError`. Real outages (5xx, network
|
|
27
|
+
* errors) propagate so callers can distinguish "missing" from "broken".
|
|
28
|
+
*/
|
|
29
|
+
async function getMoonbeamProposal(governanceEnvironment, proposalId, chainId) {
|
|
30
|
+
const tryChains = chainId ? [chainId] : SUPPORTED_GOVERNOR_CHAIN_IDS;
|
|
31
|
+
let apiProposal;
|
|
32
|
+
for (const cid of tryChains) {
|
|
33
|
+
try {
|
|
34
|
+
apiProposal = await fetchProposal(governanceEnvironment, cid, proposalId);
|
|
35
|
+
break;
|
|
19
36
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
37
|
+
catch (error) {
|
|
38
|
+
if (isNotFoundError(error))
|
|
39
|
+
continue;
|
|
40
|
+
throw error;
|
|
23
41
|
}
|
|
24
42
|
}
|
|
25
|
-
|
|
26
|
-
console.error(`[getProposal] Error fetching proposal ${proposalId}:`, error);
|
|
43
|
+
if (!apiProposal) {
|
|
27
44
|
return undefined;
|
|
28
45
|
}
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Fetch a single proposal for Moonbeam using the new Governor API
|
|
32
|
-
*/
|
|
33
|
-
async function getMoonbeamProposal(governanceEnvironment, proposalId) {
|
|
34
|
-
const apiProposalId = `${proposalId}`;
|
|
35
|
-
const apiProposal = await fetchProposal(governanceEnvironment, apiProposalId);
|
|
36
46
|
const formattedData = formatApiProposalData(apiProposal);
|
|
37
47
|
const onChainDataList = await getProposalsOnChainData([apiProposal], governanceEnvironment);
|
|
38
48
|
const onChainData = onChainDataList[0];
|
|
39
49
|
const isMultichain = isMultichainProposal(apiProposal.targets);
|
|
40
|
-
|
|
50
|
+
// For cross-chain proposals, onChainData.state is already API-derived inside
|
|
51
|
+
// getProposalsOnChainData, so the post-processing below acts as a no-op
|
|
52
|
+
// (votesCollected is false and the derived state is already terminal).
|
|
41
53
|
const now = Math.floor(Date.now() / 1000);
|
|
42
|
-
|
|
54
|
+
let proposalState = onChainData.state;
|
|
55
|
+
if (proposalState === ProposalState.Pending &&
|
|
43
56
|
now >= apiProposal.votingStartTime &&
|
|
44
57
|
now <= apiProposal.votingEndTime) {
|
|
45
|
-
proposalState =
|
|
58
|
+
proposalState = ProposalState.Active;
|
|
46
59
|
}
|
|
47
60
|
if (formattedData.executed) {
|
|
48
|
-
proposalState =
|
|
61
|
+
proposalState = ProposalState.Executed;
|
|
49
62
|
}
|
|
50
63
|
else if (isMultichain &&
|
|
51
64
|
onChainData.votesCollected &&
|
|
52
65
|
now > apiProposal.votingEndTime &&
|
|
53
|
-
proposalState <
|
|
54
|
-
proposalState =
|
|
66
|
+
proposalState < ProposalState.Queued) {
|
|
67
|
+
proposalState = ProposalState.Queued;
|
|
55
68
|
}
|
|
56
69
|
const proposal = {
|
|
57
70
|
id: apiProposal.proposalId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getProposal.js","sourceRoot":"","sources":["../../../../actions/governance/proposals/getProposal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"getProposal.js","sourceRoot":"","sources":["../../../../actions/governance/proposals/getProposal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { moonbeam, moonriver } from "viem/chains";
|
|
2
2
|
import { Amount, getEnvironmentsFromArgs } from "../../../common/index.js";
|
|
3
3
|
import * as logger from "../../../logger/console.js";
|
|
4
|
+
import { ProposalState } from "../../../types/proposal.js";
|
|
4
5
|
import { fetchAllProposals } from "../governor-api-client.js";
|
|
5
6
|
import { appendProposalExtendedData, formatApiProposalData, getCrossChainProposalData, getExtendedProposalData, getProposalData, getProposalsOnChainData, isMultichainProposal, } from "./common.js";
|
|
6
7
|
export async function getProposals(client, args) {
|
|
@@ -23,35 +24,68 @@ export async function getProposals(client, args) {
|
|
|
23
24
|
}
|
|
24
25
|
}));
|
|
25
26
|
const proposals = allProposals.flat();
|
|
26
|
-
|
|
27
|
+
// Newer multigov-ethereum proposals (chainId=1) and historical Moonbeam
|
|
28
|
+
// proposals (chainId=1284) restart their proposalId counters from 1, so IDs
|
|
29
|
+
// may collide across chains. Sort by proposalId desc with chainId as a
|
|
30
|
+
// stable tiebreaker (smaller chainId — Ethereum — wins).
|
|
31
|
+
const sortedProposals = proposals.sort((a, b) => {
|
|
32
|
+
if (b.proposalId !== a.proposalId)
|
|
33
|
+
return b.proposalId - a.proposalId;
|
|
34
|
+
return a.chainId - b.chainId;
|
|
35
|
+
});
|
|
27
36
|
logger.end(logId);
|
|
28
37
|
return sortedProposals;
|
|
29
38
|
}
|
|
30
39
|
/**
|
|
31
|
-
* Fetch proposals for Moonbeam using the
|
|
40
|
+
* Fetch proposals for Moonbeam using the Governor API.
|
|
41
|
+
*
|
|
42
|
+
* The same indexer DO serves two chains:
|
|
43
|
+
* - chainId=1 (Ethereum) — the active multigov contract
|
|
44
|
+
* - chainId=1284 (Moonbeam) — historical proposals
|
|
45
|
+
*
|
|
46
|
+
* Uses `Promise.allSettled` so a transient outage on one chain doesn't take
|
|
47
|
+
* down the other — partial results are preferred over a hard failure.
|
|
32
48
|
*/
|
|
33
49
|
async function getMoonbeamProposals(governanceEnvironment) {
|
|
34
|
-
const
|
|
50
|
+
const results = await Promise.allSettled([
|
|
51
|
+
fetchAllProposals(governanceEnvironment, { chainId: 1 }),
|
|
52
|
+
fetchAllProposals(governanceEnvironment, { chainId: 1284 }),
|
|
53
|
+
]);
|
|
54
|
+
const chainsAttempted = [1, 1284];
|
|
55
|
+
const apiProposals = [];
|
|
56
|
+
results.forEach((result, index) => {
|
|
57
|
+
if (result.status === "fulfilled") {
|
|
58
|
+
apiProposals.push(...result.value);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
console.warn(`[getProposals] Failed to fetch proposals for chainId=${chainsAttempted[index]}; continuing with remaining chains.`, result.reason);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
35
64
|
const onChainDataList = await getProposalsOnChainData(apiProposals, governanceEnvironment);
|
|
36
65
|
const proposals = apiProposals.map((apiProposal, index) => {
|
|
37
66
|
const onChainData = onChainDataList[index];
|
|
38
67
|
const formattedData = formatApiProposalData(apiProposal);
|
|
39
|
-
|
|
68
|
+
const isMultichain = isMultichainProposal(apiProposal.targets);
|
|
69
|
+
// `onChainData.state` is already API-derived for cross-chain proposals
|
|
70
|
+
// (handled inside getProposalsOnChainData), so the post-processing below
|
|
71
|
+
// is a no-op for them — derived states already reflect executed/canceled/
|
|
72
|
+
// queued/active/pending, and votesCollected is false so the Queued branch
|
|
73
|
+
// never fires.
|
|
40
74
|
const now = Math.floor(Date.now() / 1000);
|
|
41
|
-
|
|
75
|
+
let proposalState = onChainData.state;
|
|
76
|
+
if (proposalState === ProposalState.Pending &&
|
|
42
77
|
now >= apiProposal.votingStartTime &&
|
|
43
78
|
now <= apiProposal.votingEndTime) {
|
|
44
|
-
proposalState =
|
|
79
|
+
proposalState = ProposalState.Active;
|
|
45
80
|
}
|
|
46
|
-
const isMultichain = isMultichainProposal(apiProposal.targets);
|
|
47
81
|
if (formattedData.executed) {
|
|
48
|
-
proposalState =
|
|
82
|
+
proposalState = ProposalState.Executed;
|
|
49
83
|
}
|
|
50
84
|
else if (isMultichain &&
|
|
51
85
|
onChainData.votesCollected &&
|
|
52
86
|
now > apiProposal.votingEndTime &&
|
|
53
|
-
proposalState <
|
|
54
|
-
proposalState =
|
|
87
|
+
proposalState < ProposalState.Queued) {
|
|
88
|
+
proposalState = ProposalState.Queued;
|
|
55
89
|
}
|
|
56
90
|
const proposal = {
|
|
57
91
|
id: apiProposal.proposalId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getProposals.js","sourceRoot":"","sources":["../../../../actions/governance/proposals/getProposals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAG3E,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"getProposals.js","sourceRoot":"","sources":["../../../../actions/governance/proposals/getProposals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAG3E,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAiB,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAoB,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,eAAe,EACf,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AASrB,MAAM,CAAC,KAAK,UAAU,YAAY,CAIhC,MAAsB,EACtB,IAAoD;IAEpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,8BAA8B,CAAC,CAAC;IAE3E,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE3D,MAAM,sBAAsB,GAAG,YAAY,CAAC,MAAM,CAChD,CAAC,WAAW,EAAE,EAAE,CACd,WAAW,CAAC,OAAO,KAAK,QAAQ,CAAC,EAAE;QACnC,WAAW,CAAC,OAAO,KAAK,SAAS,CAAC,EAAE,CACvC,CAAC;IAEF,IAAI,sBAAsB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,sBAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,qBAAqB,EAAE,EAAE;QACzD,IAAI,qBAAqB,CAAC,OAAO,KAAK,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClD,iCAAiC;YACjC,OAAO,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,qCAAqC;YACrC,OAAO,qBAAqB,CAAC,qBAAqB,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;IACtC,wEAAwE;IACxE,4EAA4E;IAC5E,uEAAuE;IACvE,yDAAyD;IACzD,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9C,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU;YAAE,OAAO,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;QACtE,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAElB,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,oBAAoB,CACjC,qBAAkC;IAElC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QACvC,iBAAiB,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACxD,iBAAiB,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KAC5D,CAAC,CAAC;IAEH,MAAM,eAAe,GAA4B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAkB,EAAE,CAAC;IACvC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAChC,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CACV,wDAAwD,eAAe,CAAC,KAAK,CAAC,qCAAqC,EACnH,MAAM,CAAC,MAAM,CACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,MAAM,uBAAuB,CACnD,YAAY,EACZ,qBAAqB,CACtB,CAAC;IAEF,MAAM,SAAS,GAAe,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;QACpE,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAE,CAAC;QAC5C,MAAM,aAAa,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,oBAAoB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE/D,uEAAuE;QACvE,yEAAyE;QACzE,0EAA0E;QAC1E,0EAA0E;QAC1E,eAAe;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,IAAI,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC;QAEtC,IACE,aAAa,KAAK,aAAa,CAAC,OAAO;YACvC,GAAG,IAAI,WAAW,CAAC,eAAe;YAClC,GAAG,IAAI,WAAW,CAAC,aAAa,EAChC,CAAC;YACD,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC;QACvC,CAAC;QAED,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC3B,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC;QACzC,CAAC;aAAM,IACL,YAAY;YACZ,WAAW,CAAC,cAAc;YAC1B,GAAG,GAAG,WAAW,CAAC,aAAa;YAC/B,aAAa,GAAG,aAAa,CAAC,MAAM,EACpC,CAAC;YACD,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC;QACvC,CAAC;QAED,MAAM,QAAQ,GAAa;YACzB,EAAE,EAAE,WAAW,CAAC,UAAU;YAC1B,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,QAAQ,EAAE,WAAW,CAAC,QAAyB;YAC/C,GAAG,EAAE,WAAW,CAAC,GAAG;YACpB,cAAc,EAAE,WAAW,CAAC,eAAe;YAC3C,YAAY,EAAE,WAAW,CAAC,aAAa;YACvC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC;YAC3C,QAAQ,EAAE,aAAa,CAAC,QAAQ;YAChC,YAAY,EAAE,aAAa,CAAC,YAAY;YACxC,YAAY,EAAE,aAAa,CAAC,YAAY;YACxC,UAAU,EAAE,aAAa,CAAC,UAAU;YACpC,QAAQ,EAAE,aAAa,CAAC,QAAQ;YAChC,QAAQ,EAAE,aAAa,CAAC,QAAQ;YAChC,MAAM,EAAE,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,KAAK,EAAE,aAAa;YACpB,gBAAgB;YAChB,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,QAAQ,EAAE,aAAa,CAAC,QAAQ;YAChC,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,UAAU,EAAE,EAAE;YACd,YAAY,EAAE,aAAa,CAAC,YAAY;YACxC,WAAW,EAAE,qBAAqB;SACnC,CAAC;QAEF,IAAI,YAAY,EAAE,CAAC;YACjB,QAAQ,CAAC,UAAU,GAAG;gBACpB,EAAE,EAAE,WAAW,CAAC,UAAU;gBAC1B,cAAc,EAAE,WAAW,CAAC,cAAc;aAC3C,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAClC,qBAAkC;IAElC,MAAM,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACnE,eAAe,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;QACvD,yBAAyB,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;QACjE,uBAAuB,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;KAChE,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,YAAY,CAAC,CAAC;IAEnD,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC7B,QAAQ,CAAC,WAAW,GAAG,qBAAqB,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,0BAA0B,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAEtD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/_esm/errors/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '0.
|
|
1
|
+
export const version = '0.14.0';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -7,7 +7,23 @@ export type GetUserVoteReceiptParameters<environments, network extends Chain | u
|
|
|
7
7
|
proposalId: number;
|
|
8
8
|
/** User address*/
|
|
9
9
|
userAddress: Address;
|
|
10
|
+
/**
|
|
11
|
+
* The chain the proposal lives on (1 = Ethereum multigov,
|
|
12
|
+
* 1284 = Moonbeam historical). When omitted, every supported chain is queried
|
|
13
|
+
* and non-empty receipts are concatenated — proposalIds may collide across
|
|
14
|
+
* chains (they represent different proposals), so a single bare proposalId
|
|
15
|
+
* can have votes on both Ethereum and Moonbeam.
|
|
16
|
+
*/
|
|
17
|
+
chainId?: number;
|
|
10
18
|
};
|
|
11
19
|
export type GetUserVoteReceiptReturnType = Promise<VoteReceipt[]>;
|
|
20
|
+
/**
|
|
21
|
+
* Fetch a user's vote receipts for a proposal.
|
|
22
|
+
*
|
|
23
|
+
* Returns the "didn't vote" stub when the proposal exists on at least one
|
|
24
|
+
* queried chain but the user hasn't voted there. Throws `GovernorNotFoundError`
|
|
25
|
+
* when the proposal doesn't exist on any queried chain — callers can use that
|
|
26
|
+
* to distinguish "the user didn't vote" from "this proposal isn't visible".
|
|
27
|
+
*/
|
|
12
28
|
export declare function getUserVoteReceipt<environments, Network extends Chain | undefined>(client: MoonwellClient, args: GetUserVoteReceiptParameters<environments, Network>): GetUserVoteReceiptReturnType;
|
|
13
29
|
//# sourceMappingURL=getUserVoteReceipt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUserVoteReceipt.d.ts","sourceRoot":"","sources":["../../../actions/governance/getUserVoteReceipt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAE3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"getUserVoteReceipt.d.ts","sourceRoot":"","sources":["../../../actions/governance/getUserVoteReceipt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAE3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAS9D,MAAM,MAAM,4BAA4B,CACtC,YAAY,EACZ,OAAO,SAAS,KAAK,GAAG,SAAS,IAC/B,oBAAoB,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG;IAChD,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IAEnB,kBAAkB;IAClB,WAAW,EAAE,OAAO,CAAC;IAErB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAElE;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EACZ,OAAO,SAAS,KAAK,GAAG,SAAS,EAEjC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,4BAA4B,CAAC,YAAY,EAAE,OAAO,CAAC,GACxD,4BAA4B,CA0D9B"}
|
|
@@ -1,4 +1,25 @@
|
|
|
1
1
|
import type { Environment } from "../../environments/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Chains the governor indexer serves. Ethereum first because that's where the
|
|
4
|
+
* active multigov contract lives; Moonbeam follows for the historical archive.
|
|
5
|
+
*/
|
|
6
|
+
export declare const SUPPORTED_GOVERNOR_CHAIN_IDS: readonly [1, 1284];
|
|
7
|
+
/**
|
|
8
|
+
* Build the chain-prefixed proposal key the indexer requires
|
|
9
|
+
* (e.g. chainId=1, proposalId=7 → "1-0000000007").
|
|
10
|
+
*/
|
|
11
|
+
export declare const buildProposalKey: (chainId: number, proposalId: number | string) => string;
|
|
12
|
+
/**
|
|
13
|
+
* Thrown by proposal-scoped fetchers when the indexer reports the proposal
|
|
14
|
+
* doesn't exist (HTTP 404). Callers use `isNotFoundError` to drive chainId
|
|
15
|
+
* fallback without misclassifying a real 5xx outage as "not found".
|
|
16
|
+
*/
|
|
17
|
+
export declare class GovernorNotFoundError extends Error {
|
|
18
|
+
readonly chainId: number;
|
|
19
|
+
readonly proposalId: number | string;
|
|
20
|
+
constructor(chainId: number, proposalId: number | string);
|
|
21
|
+
}
|
|
22
|
+
export declare const isNotFoundError: (error: unknown) => boolean;
|
|
2
23
|
/**
|
|
3
24
|
* Paginated response type
|
|
4
25
|
*/
|
|
@@ -77,38 +98,42 @@ export type ApiVoteReceipt = {
|
|
|
77
98
|
chainId: number;
|
|
78
99
|
timestamp: number;
|
|
79
100
|
};
|
|
101
|
+
export type FetchProposalsOptions = PaginationOptions & {
|
|
102
|
+
chainId: number;
|
|
103
|
+
};
|
|
80
104
|
/**
|
|
81
105
|
* Fetch proposals from Governor API
|
|
106
|
+
*
|
|
107
|
+
* `chainId` is required by the indexer — 1 (Ethereum multigov) or
|
|
108
|
+
* 1284 (Moonbeam historical). Missing/unsupported chainId returns 400.
|
|
82
109
|
*/
|
|
83
|
-
export declare function fetchProposals(environment: Environment, options
|
|
84
|
-
chainId?: number;
|
|
85
|
-
}): Promise<PaginatedResponse<ApiProposal>>;
|
|
110
|
+
export declare function fetchProposals(environment: Environment, options: FetchProposalsOptions): Promise<PaginatedResponse<ApiProposal>>;
|
|
86
111
|
/**
|
|
87
|
-
* Fetch all proposals (handles pagination internally)
|
|
112
|
+
* Fetch all proposals for a given chainId (handles pagination internally)
|
|
88
113
|
*/
|
|
89
|
-
export declare function fetchAllProposals(environment: Environment, options
|
|
90
|
-
chainId
|
|
114
|
+
export declare function fetchAllProposals(environment: Environment, options: {
|
|
115
|
+
chainId: number;
|
|
91
116
|
}): Promise<ApiProposal[]>;
|
|
92
117
|
/**
|
|
93
118
|
* Fetch a single proposal from Governor API
|
|
94
119
|
*/
|
|
95
|
-
export declare function fetchProposal(environment: Environment, proposalId: string): Promise<ApiProposal>;
|
|
120
|
+
export declare function fetchProposal(environment: Environment, chainId: number, proposalId: number | string): Promise<ApiProposal>;
|
|
96
121
|
/**
|
|
97
122
|
* Fetch votes for a proposal
|
|
98
123
|
*/
|
|
99
|
-
export declare function fetchProposalVotes(environment: Environment, proposalId: string, options?: PaginationOptions): Promise<PaginatedResponse<ApiVote>>;
|
|
124
|
+
export declare function fetchProposalVotes(environment: Environment, chainId: number, proposalId: number | string, options?: PaginationOptions): Promise<PaginatedResponse<ApiVote>>;
|
|
100
125
|
/**
|
|
101
126
|
* Fetch all votes for a proposal (handles pagination internally)
|
|
102
127
|
*/
|
|
103
|
-
export declare function fetchAllProposalVotes(environment: Environment, proposalId: string): Promise<ApiVote[]>;
|
|
128
|
+
export declare function fetchAllProposalVotes(environment: Environment, chainId: number, proposalId: number | string): Promise<ApiVote[]>;
|
|
104
129
|
/**
|
|
105
130
|
* Fetch state changes for a proposal
|
|
106
131
|
*/
|
|
107
|
-
export declare function fetchProposalStateChanges(environment: Environment, proposalId: string, options?: PaginationOptions): Promise<PaginatedResponse<ApiProposalStateChange>>;
|
|
132
|
+
export declare function fetchProposalStateChanges(environment: Environment, chainId: number, proposalId: number | string, options?: PaginationOptions): Promise<PaginatedResponse<ApiProposalStateChange>>;
|
|
108
133
|
/**
|
|
109
134
|
* Fetch all state changes for a proposal (handles pagination internally)
|
|
110
135
|
*/
|
|
111
|
-
export declare function fetchAllProposalStateChanges(environment: Environment, proposalId: string): Promise<ApiProposalStateChange[]>;
|
|
136
|
+
export declare function fetchAllProposalStateChanges(environment: Environment, chainId: number, proposalId: number | string): Promise<ApiProposalStateChange[]>;
|
|
112
137
|
/**
|
|
113
138
|
* Fetch all voters (delegates)
|
|
114
139
|
*/
|
|
@@ -141,5 +166,5 @@ export declare function fetchAllVoterVotes(environment: Environment, address: st
|
|
|
141
166
|
* Fetch vote receipts for a specific user on a proposal
|
|
142
167
|
* Returns all votes across all chains for multichain proposals
|
|
143
168
|
*/
|
|
144
|
-
export declare function fetchUserVoteReceipt(environment: Environment, proposalId: string, voterAddress: string): Promise<ApiVoteReceipt[]>;
|
|
169
|
+
export declare function fetchUserVoteReceipt(environment: Environment, chainId: number, proposalId: number | string, voterAddress: string): Promise<ApiVoteReceipt[]>;
|
|
145
170
|
//# sourceMappingURL=governor-api-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"governor-api-client.d.ts","sourceRoot":"","sources":["../../../actions/governance/governor-api-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"governor-api-client.d.ts","sourceRoot":"","sources":["../../../actions/governance/governor-api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Amount } from "../../../common/index.js";
|
|
2
2
|
import type { Environment } from "../../../environments/index.js";
|
|
3
|
-
import { type Proposal } from "../../../types/proposal.js";
|
|
3
|
+
import { type Proposal, ProposalState } from "../../../types/proposal.js";
|
|
4
4
|
import type { ApiProposal } from "../governor-api-client.js";
|
|
5
5
|
export declare const WORMHOLE_CONTRACT = "0xc8e2b0cd52cf01b0ce87d389daa3d414d4ce29f3";
|
|
6
6
|
type PonderExtendedProposalData = {
|
|
@@ -56,6 +56,19 @@ export type ApiProposalFormatted = {
|
|
|
56
56
|
title: string;
|
|
57
57
|
subtitle: string;
|
|
58
58
|
};
|
|
59
|
+
/**
|
|
60
|
+
* Derive a ProposalState value from API data alone (no on-chain read).
|
|
61
|
+
*
|
|
62
|
+
* Used for proposals whose chainId doesn't match the governance environment's
|
|
63
|
+
* chainId — e.g. chainId=1 (Ethereum multigov) proposals reached through the
|
|
64
|
+
* Moonbeam governance environment, where on-chain reads against Moonbeam's
|
|
65
|
+
* governor would be meaningless.
|
|
66
|
+
*
|
|
67
|
+
* Precedence (highest wins): Executed → Canceled → Queued → Active → Pending.
|
|
68
|
+
* Executed wins over Canceled because the SDK treats EXECUTED state changes as
|
|
69
|
+
* the terminal truth even when an earlier CANCELED event is present.
|
|
70
|
+
*/
|
|
71
|
+
export declare const deriveProposalStateFromApi: (formatted: ApiProposalFormatted, apiProposal: ApiProposal, now: number) => ProposalState;
|
|
59
72
|
/**
|
|
60
73
|
* Parses and formats API proposal data
|
|
61
74
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../actions/governance/proposals/common.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAElE,OAAO,EAEL,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../actions/governance/proposals/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import type { MoonwellClient } from "../../../client/createMoonwellClient.js";
|
|
2
2
|
import type { NetworkParameterType } from "../../../common/types.js";
|
|
3
3
|
import type { Chain } from "../../../environments/index.js";
|
|
4
|
-
import type
|
|
4
|
+
import { type Proposal } from "../../../types/proposal.js";
|
|
5
5
|
export type GetProposalParameters<environments, network extends Chain | undefined> = NetworkParameterType<environments, network> & {
|
|
6
6
|
proposalId: number;
|
|
7
|
+
/**
|
|
8
|
+
* The chain the proposal lives on (1 = Ethereum multigov,
|
|
9
|
+
* 1284 = Moonbeam historical). When omitted, both are tried in turn.
|
|
10
|
+
*/
|
|
11
|
+
chainId?: number;
|
|
7
12
|
};
|
|
8
13
|
export type GetProposalReturnType = Promise<Proposal | undefined>;
|
|
9
14
|
export declare function getProposal<environments, Network extends Chain | undefined>(client: MoonwellClient, args: GetProposalParameters<environments, Network>): GetProposalReturnType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getProposal.d.ts","sourceRoot":"","sources":["../../../../actions/governance/proposals/getProposal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAE9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"getProposal.d.ts","sourceRoot":"","sources":["../../../../actions/governance/proposals/getProposal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAE9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,KAAK,QAAQ,EAAiB,MAAM,4BAA4B,CAAC;AAiB1E,MAAM,MAAM,qBAAqB,CAC/B,YAAY,EACZ,OAAO,SAAS,KAAK,GAAG,SAAS,IAC/B,oBAAoB,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;AAElE,wBAAsB,WAAW,CAC/B,YAAY,EACZ,OAAO,SAAS,KAAK,GAAG,SAAS,EAEjC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,GACjD,qBAAqB,CAmBvB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { MoonwellClient } from "../../../client/createMoonwellClient.js";
|
|
2
2
|
import type { OptionalNetworkParameterType } from "../../../common/types.js";
|
|
3
3
|
import type { Chain } from "../../../environments/index.js";
|
|
4
|
-
import type
|
|
4
|
+
import { type Proposal } from "../../../types/proposal.js";
|
|
5
5
|
export type GetProposalsParameters<environments, network extends Chain | undefined> = OptionalNetworkParameterType<environments, network>;
|
|
6
6
|
export type GetProposalsReturnType = Promise<Proposal[]>;
|
|
7
7
|
export declare function getProposals<environments, Network extends Chain | undefined>(client: MoonwellClient, args?: GetProposalsParameters<environments, Network>): GetProposalsReturnType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getProposals.d.ts","sourceRoot":"","sources":["../../../../actions/governance/proposals/getProposals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAE9E,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,gCAAgC,CAAC;AAEzE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"getProposals.d.ts","sourceRoot":"","sources":["../../../../actions/governance/proposals/getProposals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAE9E,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,KAAK,QAAQ,EAAiB,MAAM,4BAA4B,CAAC;AAY1E,MAAM,MAAM,sBAAsB,CAChC,YAAY,EACZ,OAAO,SAAS,KAAK,GAAG,SAAS,IAC/B,4BAA4B,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAExD,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEzD,wBAAsB,YAAY,CAChC,YAAY,EACZ,OAAO,SAAS,KAAK,GAAG,SAAS,EAEjC,MAAM,EAAE,cAAc,EACtB,IAAI,CAAC,EAAE,sBAAsB,CAAC,YAAY,EAAE,OAAO,CAAC,GACnD,sBAAsB,CAyCxB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "0.
|
|
1
|
+
export declare const version = "0.14.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -3,7 +3,13 @@ import type { MoonwellClient } from "../../client/createMoonwellClient.js";
|
|
|
3
3
|
import { Amount, getEnvironmentFromArgs } from "../../common/index.js";
|
|
4
4
|
import type { NetworkParameterType } from "../../common/types.js";
|
|
5
5
|
import type { VoteReceipt } from "../../types/voteReceipt.js";
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
type ApiVoteReceipt,
|
|
8
|
+
GovernorNotFoundError,
|
|
9
|
+
SUPPORTED_GOVERNOR_CHAIN_IDS,
|
|
10
|
+
fetchUserVoteReceipt,
|
|
11
|
+
isNotFoundError,
|
|
12
|
+
} from "./governor-api-client.js";
|
|
7
13
|
|
|
8
14
|
export type GetUserVoteReceiptParameters<
|
|
9
15
|
environments,
|
|
@@ -14,10 +20,27 @@ export type GetUserVoteReceiptParameters<
|
|
|
14
20
|
|
|
15
21
|
/** User address*/
|
|
16
22
|
userAddress: Address;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The chain the proposal lives on (1 = Ethereum multigov,
|
|
26
|
+
* 1284 = Moonbeam historical). When omitted, every supported chain is queried
|
|
27
|
+
* and non-empty receipts are concatenated — proposalIds may collide across
|
|
28
|
+
* chains (they represent different proposals), so a single bare proposalId
|
|
29
|
+
* can have votes on both Ethereum and Moonbeam.
|
|
30
|
+
*/
|
|
31
|
+
chainId?: number;
|
|
17
32
|
};
|
|
18
33
|
|
|
19
34
|
export type GetUserVoteReceiptReturnType = Promise<VoteReceipt[]>;
|
|
20
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Fetch a user's vote receipts for a proposal.
|
|
38
|
+
*
|
|
39
|
+
* Returns the "didn't vote" stub when the proposal exists on at least one
|
|
40
|
+
* queried chain but the user hasn't voted there. Throws `GovernorNotFoundError`
|
|
41
|
+
* when the proposal doesn't exist on any queried chain — callers can use that
|
|
42
|
+
* to distinguish "the user didn't vote" from "this proposal isn't visible".
|
|
43
|
+
*/
|
|
21
44
|
export async function getUserVoteReceipt<
|
|
22
45
|
environments,
|
|
23
46
|
Network extends Chain | undefined,
|
|
@@ -25,44 +48,61 @@ export async function getUserVoteReceipt<
|
|
|
25
48
|
client: MoonwellClient,
|
|
26
49
|
args: GetUserVoteReceiptParameters<environments, Network>,
|
|
27
50
|
): GetUserVoteReceiptReturnType {
|
|
28
|
-
const { proposalId, userAddress } = args;
|
|
51
|
+
const { proposalId, userAddress, chainId } = args;
|
|
29
52
|
|
|
30
53
|
const environment = getEnvironmentFromArgs(client, args);
|
|
31
|
-
|
|
32
54
|
if (!environment) {
|
|
33
55
|
return [];
|
|
34
56
|
}
|
|
35
57
|
|
|
36
|
-
|
|
37
|
-
const apiVoteReceipts = await fetchUserVoteReceipt(
|
|
38
|
-
environment,
|
|
39
|
-
`${proposalId}`,
|
|
40
|
-
userAddress,
|
|
41
|
-
);
|
|
58
|
+
const tryChains = chainId ? [chainId] : SUPPORTED_GOVERNOR_CHAIN_IDS;
|
|
42
59
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
60
|
+
const collected: ApiVoteReceipt[] = [];
|
|
61
|
+
let anyChainAcknowledged = false;
|
|
62
|
+
const notFoundChainIds: number[] = [];
|
|
63
|
+
|
|
64
|
+
for (const cid of tryChains) {
|
|
65
|
+
try {
|
|
66
|
+
const apiVoteReceipts = await fetchUserVoteReceipt(
|
|
67
|
+
environment,
|
|
68
|
+
cid,
|
|
69
|
+
proposalId,
|
|
70
|
+
userAddress,
|
|
71
|
+
);
|
|
72
|
+
anyChainAcknowledged = true;
|
|
73
|
+
collected.push(...apiVoteReceipts);
|
|
74
|
+
} catch (error) {
|
|
75
|
+
if (isNotFoundError(error)) {
|
|
76
|
+
notFoundChainIds.push(cid);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
throw error;
|
|
54
80
|
}
|
|
81
|
+
}
|
|
55
82
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
proposalId,
|
|
59
|
-
account: userAddress as Address,
|
|
60
|
-
voted: true,
|
|
61
|
-
option: apiReceipt.voteValue,
|
|
62
|
-
votes: new Amount(BigInt(apiReceipt.votes), 18),
|
|
63
|
-
}));
|
|
64
|
-
} catch (error) {
|
|
65
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
66
|
-
throw new Error(`Failed to fetch user vote receipt: ${message}`);
|
|
83
|
+
if (!anyChainAcknowledged) {
|
|
84
|
+
throw new GovernorNotFoundError(notFoundChainIds[0] ?? 0, proposalId);
|
|
67
85
|
}
|
|
86
|
+
|
|
87
|
+
if (collected.length === 0) {
|
|
88
|
+
return [
|
|
89
|
+
{
|
|
90
|
+
chainId: environment.chainId,
|
|
91
|
+
proposalId,
|
|
92
|
+
account: userAddress,
|
|
93
|
+
voted: false,
|
|
94
|
+
option: 0,
|
|
95
|
+
votes: new Amount(0, 18),
|
|
96
|
+
},
|
|
97
|
+
];
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return collected.map((apiReceipt) => ({
|
|
101
|
+
chainId: apiReceipt.chainId,
|
|
102
|
+
proposalId,
|
|
103
|
+
account: userAddress,
|
|
104
|
+
voted: true,
|
|
105
|
+
option: apiReceipt.voteValue,
|
|
106
|
+
votes: new Amount(BigInt(apiReceipt.votes), 18),
|
|
107
|
+
}));
|
|
68
108
|
}
|