dexe-mcp 0.5.4 → 0.5.8
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 +149 -0
- package/README.md +270 -194
- package/SECURITY.md +46 -0
- package/dist/config.d.ts +27 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +105 -9
- package/dist/config.js.map +1 -1
- package/dist/lib/blacklist.d.ts +22 -0
- package/dist/lib/blacklist.d.ts.map +1 -0
- package/dist/lib/blacklist.js +43 -0
- package/dist/lib/blacklist.js.map +1 -0
- package/dist/lib/ipfs.d.ts +7 -0
- package/dist/lib/ipfs.d.ts.map +1 -1
- package/dist/lib/ipfs.js +32 -1
- package/dist/lib/ipfs.js.map +1 -1
- package/dist/lib/signer.d.ts +17 -4
- package/dist/lib/signer.d.ts.map +1 -1
- package/dist/lib/signer.js +33 -16
- package/dist/lib/signer.js.map +1 -1
- package/dist/rpc.d.ts +10 -5
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +18 -10
- package/dist/rpc.js.map +1 -1
- package/dist/tools/daoDeploy.d.ts.map +1 -1
- package/dist/tools/daoDeploy.js +14 -6
- package/dist/tools/daoDeploy.js.map +1 -1
- package/dist/tools/flow.d.ts +3 -0
- package/dist/tools/flow.d.ts.map +1 -1
- package/dist/tools/flow.js +29 -14
- package/dist/tools/flow.js.map +1 -1
- package/dist/tools/getConfig.d.ts +10 -0
- package/dist/tools/getConfig.d.ts.map +1 -0
- package/dist/tools/getConfig.js +52 -0
- package/dist/tools/getConfig.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/ipfs.d.ts.map +1 -1
- package/dist/tools/ipfs.js +437 -16
- package/dist/tools/ipfs.js.map +1 -1
- package/dist/tools/otc.d.ts.map +1 -1
- package/dist/tools/otc.js +28 -6
- package/dist/tools/otc.js.map +1 -1
- package/dist/tools/proposalBuild.d.ts.map +1 -1
- package/dist/tools/proposalBuild.js +11 -2
- package/dist/tools/proposalBuild.js.map +1 -1
- package/dist/tools/proposalBuildComplex.d.ts.map +1 -1
- package/dist/tools/proposalBuildComplex.js +49 -14
- package/dist/tools/proposalBuildComplex.js.map +1 -1
- package/dist/tools/proposalBuildMore.js +60 -20
- package/dist/tools/proposalBuildMore.js.map +1 -1
- package/dist/tools/txSend.d.ts +1 -1
- package/dist/tools/txSend.d.ts.map +1 -1
- package/dist/tools/txSend.js +37 -9
- package/dist/tools/txSend.js.map +1 -1
- package/package.json +10 -2
package/dist/config.js
CHANGED
|
@@ -18,23 +18,88 @@ export async function loadConfig() {
|
|
|
18
18
|
else if (!isBuildReady(protocolPath)) {
|
|
19
19
|
process.stderr.write(`[dexe-mcp] DeXe-Protocol checkout at ${protocolPath} is incomplete (missing node_modules or hardhat.config) — will be prepared on first dexe_compile call.\n`);
|
|
20
20
|
}
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
// ---- collect every configured chain ------------------------------------
|
|
22
|
+
// Priority:
|
|
23
|
+
// 1) DEXE_RPC_URL_TESTNET → chain 97
|
|
24
|
+
// 2) DEXE_RPC_URL_MAINNET → chain 56
|
|
25
|
+
// 3) Legacy DEXE_RPC_URL + DEXE_CHAIN_ID → register that chain
|
|
26
|
+
// All three may coexist; later entries with the same chainId override earlier.
|
|
27
|
+
const chains = new Map();
|
|
28
|
+
const registryOverride = process.env.DEXE_CONTRACTS_REGISTRY?.trim() || undefined;
|
|
29
|
+
const rpcTestnet = process.env.DEXE_RPC_URL_TESTNET?.trim() || undefined;
|
|
30
|
+
if (rpcTestnet) {
|
|
31
|
+
chains.set(97, { chainId: 97, rpcUrl: rpcTestnet });
|
|
32
|
+
}
|
|
33
|
+
const rpcMainnet = process.env.DEXE_RPC_URL_MAINNET?.trim() || undefined;
|
|
34
|
+
if (rpcMainnet) {
|
|
35
|
+
chains.set(56, { chainId: 56, rpcUrl: rpcMainnet });
|
|
36
|
+
}
|
|
37
|
+
// Legacy single-chain env (still supported)
|
|
38
|
+
const legacyRpc = process.env.DEXE_RPC_URL?.trim() || undefined;
|
|
39
|
+
let legacyChainId;
|
|
23
40
|
if (process.env.DEXE_CHAIN_ID) {
|
|
24
41
|
const n = Number(process.env.DEXE_CHAIN_ID);
|
|
25
42
|
if (!Number.isFinite(n) || n <= 0) {
|
|
26
43
|
fatal(`DEXE_CHAIN_ID must be a positive integer, got: ${process.env.DEXE_CHAIN_ID}`);
|
|
27
44
|
}
|
|
28
|
-
|
|
45
|
+
legacyChainId = n;
|
|
46
|
+
}
|
|
47
|
+
if (legacyRpc) {
|
|
48
|
+
// Resolve legacy chainId. If unset, infer from URL hostname; fall back to 56.
|
|
49
|
+
const inferred = legacyChainId ?? inferChainIdFromRpcUrl(legacyRpc) ?? 56;
|
|
50
|
+
// Apply registryOverride only when this is the legacy chain (per-chain
|
|
51
|
+
// override via DEXE_CONTRACTS_REGISTRY has always been single-chain).
|
|
52
|
+
chains.set(inferred, {
|
|
53
|
+
chainId: inferred,
|
|
54
|
+
rpcUrl: legacyRpc,
|
|
55
|
+
registryOverride,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
// ---- resolve default chain ---------------------------------------------
|
|
59
|
+
let defaultChainId;
|
|
60
|
+
const explicitDefault = process.env.DEXE_DEFAULT_CHAIN_ID?.trim();
|
|
61
|
+
if (explicitDefault) {
|
|
62
|
+
const n = Number(explicitDefault);
|
|
63
|
+
if (!Number.isFinite(n) || n <= 0) {
|
|
64
|
+
fatal(`DEXE_DEFAULT_CHAIN_ID must be a positive integer, got: ${explicitDefault}`);
|
|
65
|
+
}
|
|
66
|
+
if (!chains.has(n)) {
|
|
67
|
+
const configured = [...chains.keys()].sort().join(", ") || "none";
|
|
68
|
+
fatal(`DEXE_DEFAULT_CHAIN_ID=${n} but no RPC configured for that chain. Configured: [${configured}]. Set DEXE_RPC_URL_${n === 97 ? "TESTNET" : n === 56 ? "MAINNET" : "<chain>"} or legacy DEXE_RPC_URL.`);
|
|
69
|
+
}
|
|
70
|
+
defaultChainId = n;
|
|
71
|
+
}
|
|
72
|
+
else if (chains.size === 1) {
|
|
73
|
+
defaultChainId = [...chains.keys()][0];
|
|
74
|
+
}
|
|
75
|
+
else if (chains.size > 1) {
|
|
76
|
+
// Multi-chain without explicit default → prefer testnet for safety, else lowest chainId.
|
|
77
|
+
const sorted = [...chains.keys()].sort((a, b) => a - b);
|
|
78
|
+
defaultChainId = chains.has(97) ? 97 : sorted[0];
|
|
79
|
+
process.stderr.write(`[dexe-mcp] multiple chains configured without DEXE_DEFAULT_CHAIN_ID; defaulting to ${defaultChainId === 97 ? "testnet (97)" : `chain ${defaultChainId}`} for safety. Set DEXE_DEFAULT_CHAIN_ID to override.\n`);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
// No chains configured — keep legacy fallback so non-RPC tools still load.
|
|
83
|
+
defaultChainId = legacyChainId ?? 56;
|
|
84
|
+
}
|
|
85
|
+
// ---- emit one-line summary of the resolved chain set --------------------
|
|
86
|
+
if (chains.size > 0) {
|
|
87
|
+
const summary = [...chains.values()]
|
|
88
|
+
.sort((a, b) => a.chainId - b.chainId)
|
|
89
|
+
.map(c => `${c.chainId}${c.chainId === defaultChainId ? "*" : ""}`)
|
|
90
|
+
.join(", ");
|
|
91
|
+
process.stderr.write(`[dexe-mcp] chains: [${summary}] (default marked with *)\n`);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
process.stderr.write("[dexe-mcp] no RPC configured — read/write tools that touch a chain will fail with a clear error.\n");
|
|
29
95
|
}
|
|
30
|
-
const registryOverride = process.env.DEXE_CONTRACTS_REGISTRY?.trim() || undefined;
|
|
31
96
|
const pinataJwt = process.env.DEXE_PINATA_JWT?.trim() || undefined;
|
|
32
97
|
const subgraphPoolsUrl = process.env.DEXE_SUBGRAPH_POOLS_URL?.trim() || undefined;
|
|
33
98
|
const subgraphValidatorsUrl = process.env.DEXE_SUBGRAPH_VALIDATORS_URL?.trim() || undefined;
|
|
34
99
|
const subgraphInteractionsUrl = process.env.DEXE_SUBGRAPH_INTERACTIONS_URL?.trim() || undefined;
|
|
35
100
|
const privateKey = process.env.DEXE_PRIVATE_KEY?.trim() || undefined;
|
|
36
|
-
if (privateKey &&
|
|
37
|
-
fatal("DEXE_PRIVATE_KEY requires DEXE_RPC_URL to be set (signing needs an RPC endpoint).");
|
|
101
|
+
if (privateKey && chains.size === 0) {
|
|
102
|
+
fatal("DEXE_PRIVATE_KEY requires at least one of DEXE_RPC_URL / DEXE_RPC_URL_TESTNET / DEXE_RPC_URL_MAINNET to be set (signing needs an RPC endpoint).");
|
|
38
103
|
}
|
|
39
104
|
if (privateKey) {
|
|
40
105
|
const { Wallet } = await import("ethers");
|
|
@@ -49,11 +114,14 @@ export async function loadConfig() {
|
|
|
49
114
|
}
|
|
50
115
|
forkBlock = n;
|
|
51
116
|
}
|
|
117
|
+
const defaultChain = chains.get(defaultChainId);
|
|
52
118
|
return Object.freeze({
|
|
53
119
|
protocolPath,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
120
|
+
chains: Object.freeze(new Map(chains)),
|
|
121
|
+
defaultChainId,
|
|
122
|
+
chainId: defaultChainId,
|
|
123
|
+
rpcUrl: defaultChain?.rpcUrl,
|
|
124
|
+
registryOverride: defaultChain?.registryOverride ?? registryOverride,
|
|
57
125
|
pinataJwt,
|
|
58
126
|
subgraphPoolsUrl,
|
|
59
127
|
subgraphValidatorsUrl,
|
|
@@ -62,6 +130,34 @@ export async function loadConfig() {
|
|
|
62
130
|
privateKey,
|
|
63
131
|
});
|
|
64
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Best-effort chain-id inference from a JSON-RPC URL. Used only when legacy
|
|
135
|
+
* `DEXE_RPC_URL` is set without `DEXE_CHAIN_ID`. Returns undefined when
|
|
136
|
+
* unknown — caller falls back to 56.
|
|
137
|
+
*/
|
|
138
|
+
function inferChainIdFromRpcUrl(url) {
|
|
139
|
+
const u = url.toLowerCase();
|
|
140
|
+
if (u.includes("prebsc") || u.includes("testnet"))
|
|
141
|
+
return 97;
|
|
142
|
+
if (u.includes("bsc") || u.includes("binance"))
|
|
143
|
+
return 56;
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Resolve a chain config given an optional `chainId`. When omitted, returns
|
|
148
|
+
* the default chain. Throws with a clear message when the requested chain is
|
|
149
|
+
* not configured.
|
|
150
|
+
*/
|
|
151
|
+
export function resolveChain(config, chainId) {
|
|
152
|
+
const target = chainId ?? config.defaultChainId;
|
|
153
|
+
const chain = config.chains.get(target);
|
|
154
|
+
if (!chain) {
|
|
155
|
+
const configured = [...config.chains.keys()].sort().join(", ") || "none";
|
|
156
|
+
throw new Error(`No RPC configured for chainId=${target}. Configured chains: [${configured}]. ` +
|
|
157
|
+
`Set DEXE_RPC_URL_${target === 97 ? "TESTNET" : target === 56 ? "MAINNET" : "<chain>"} in the MCP env block.`);
|
|
158
|
+
}
|
|
159
|
+
return chain;
|
|
160
|
+
}
|
|
65
161
|
function fatal(msg) {
|
|
66
162
|
// stderr only — stdout is the MCP protocol channel.
|
|
67
163
|
process.stderr.write(`[dexe-mcp] fatal: ${msg}\n`);
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA4CnE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,YAAY,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAEpD,0EAA0E;IAC1E,0EAA0E;IAC1E,gEAAgE;IAChE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kDAAkD,YAAY,mDAAmD,CAClH,CAAC;IACJ,CAAC;SAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wCAAwC,YAAY,0GAA0G,CAC/J,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,YAAY;IACZ,uCAAuC;IACvC,uCAAuC;IACvC,iEAAiE;IACjE,+EAA+E;IAC/E,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAElF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IACzE,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IACzE,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,4CAA4C;IAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAChE,IAAI,aAAiC,CAAC;IACtC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,kDAAkD,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,aAAa,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,8EAA8E;QAC9E,MAAM,QAAQ,GAAG,aAAa,IAAI,sBAAsB,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC1E,uEAAuE;QACvE,sEAAsE;QACtE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE;YACnB,OAAO,EAAE,QAAQ;YACjB,MAAM,EAAE,SAAS;YACjB,gBAAgB;SACjB,CAAC,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,IAAI,cAAsB,CAAC;IAC3B,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;IAClE,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,0DAA0D,eAAe,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;YAClE,KAAK,CACH,yBAAyB,CAAC,uDAAuD,UAAU,uBAAuB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,0BAA0B,CACpM,CAAC;QACJ,CAAC;QACD,cAAc,GAAG,CAAC,CAAC;IACrB,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC7B,cAAc,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;IAC1C,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC3B,yFAAyF;QACzF,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;QAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sFAAsF,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,cAAc,EAAE,uDAAuD,CAChN,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,2EAA2E;QAC3E,cAAc,GAAG,aAAa,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,4EAA4E;IAC5E,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;aACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;aAClE,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,OAAO,6BAA6B,CAAC,CAAC;IACpF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oGAAoG,CACrG,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IACnE,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAClF,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAC5F,MAAM,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAEhG,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IACrE,IAAI,UAAU,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpC,KAAK,CACH,iJAAiJ,CAClJ,CAAC;IACJ,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;QAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,IAAI,IAAI,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,SAA6B,CAAC;IAClC,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,wDAAwD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,SAAS,GAAG,CAAC,CAAC;IAChB,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,YAAY;QACZ,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,cAAc;QACd,OAAO,EAAE,cAAc;QACvB,MAAM,EAAE,YAAY,EAAE,MAAM;QAC5B,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,IAAI,gBAAgB;QACpE,SAAS;QACT,gBAAgB;QAChB,qBAAqB;QACrB,uBAAuB;QACvB,SAAS;QACT,UAAU;KACX,CAAe,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,GAAW;IACzC,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7D,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAkB,EAAE,OAAgB;IAC/D,MAAM,MAAM,GAAG,OAAO,IAAI,MAAM,CAAC,cAAc,CAAC;IAChD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;QACzE,MAAM,IAAI,KAAK,CACb,iCAAiC,MAAM,yBAAyB,UAAU,KAAK;YAC7E,oBAAoB,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,wBAAwB,CAChH,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,KAAK,CAAC,GAAW;IACxB,oDAAoD;IACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { DexeConfig } from "../config.js";
|
|
2
|
+
export type BlacklistCheck = {
|
|
3
|
+
status: "blacklisted";
|
|
4
|
+
token: string;
|
|
5
|
+
account: string;
|
|
6
|
+
} | {
|
|
7
|
+
status: "clean";
|
|
8
|
+
token: string;
|
|
9
|
+
account: string;
|
|
10
|
+
} | {
|
|
11
|
+
status: "skipped";
|
|
12
|
+
reason: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Best-effort `isBlacklisted(account)` lookup. Returns `skipped` when the RPC
|
|
16
|
+
* is unset or the call reverts (e.g. token isn't ERC20Gov). Build steps that
|
|
17
|
+
* use this should treat `skipped` as "go ahead" and only block on
|
|
18
|
+
* `blacklisted`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function checkBlacklist(config: DexeConfig, token: string, account: string): Promise<BlacklistCheck>;
|
|
21
|
+
export declare function blacklistError(token: string, account: string): string;
|
|
22
|
+
//# sourceMappingURL=blacklist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blacklist.d.ts","sourceRoot":"","sources":["../../src/lib/blacklist.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAM/C,MAAM,MAAM,cAAc,GACtB;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CAwBzB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAOrE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Contract } from "ethers";
|
|
2
|
+
import { RpcProvider } from "../rpc.js";
|
|
3
|
+
const ERC20_GOV_BLACKLIST_ABI = [
|
|
4
|
+
"function isBlacklisted(address account) view returns (bool)",
|
|
5
|
+
];
|
|
6
|
+
/**
|
|
7
|
+
* Best-effort `isBlacklisted(account)` lookup. Returns `skipped` when the RPC
|
|
8
|
+
* is unset or the call reverts (e.g. token isn't ERC20Gov). Build steps that
|
|
9
|
+
* use this should treat `skipped` as "go ahead" and only block on
|
|
10
|
+
* `blacklisted`.
|
|
11
|
+
*/
|
|
12
|
+
export async function checkBlacklist(config, token, account) {
|
|
13
|
+
if (!config.rpcUrl) {
|
|
14
|
+
return { status: "skipped", reason: "DEXE_RPC_URL not set — skipping blacklist precheck" };
|
|
15
|
+
}
|
|
16
|
+
let provider;
|
|
17
|
+
try {
|
|
18
|
+
provider = new RpcProvider(config).requireProvider();
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
return { status: "skipped", reason: err instanceof Error ? err.message : String(err) };
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const contract = new Contract(token, ERC20_GOV_BLACKLIST_ABI, provider);
|
|
25
|
+
const flag = await contract.isBlacklisted(account);
|
|
26
|
+
return flag
|
|
27
|
+
? { status: "blacklisted", token, account }
|
|
28
|
+
: { status: "clean", token, account };
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
return {
|
|
32
|
+
status: "skipped",
|
|
33
|
+
reason: `isBlacklisted() unavailable on ${token} (${err instanceof Error ? err.message : String(err)})`,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export function blacklistError(token, account) {
|
|
38
|
+
return (`Refusing to build: recipient ${account} is blacklisted on ERC20Gov ${token}. ` +
|
|
39
|
+
`If broadcast, GovPool.execute would revert with "ERC20Gov: account is blacklisted" ` +
|
|
40
|
+
`and the proposal would sit in SucceededFor permanently. Un-blacklist first ` +
|
|
41
|
+
`(dexe_proposal_build_blacklist with isBlacklisted=false) or pick a different recipient.`);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=blacklist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blacklist.js","sourceRoot":"","sources":["../../src/lib/blacklist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAmB,MAAM,QAAQ,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,MAAM,uBAAuB,GAAG;IAC9B,6DAA6D;CACrD,CAAC;AAOX;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAkB,EAClB,KAAa,EACb,OAAe;IAEf,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,oDAAoD,EAAE,CAAC;IAC7F,CAAC;IACD,IAAI,QAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACzF,CAAC;IACD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,KAAK,EAAE,uBAA8C,EAAE,QAAQ,CAE5F,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,IAAI;YACT,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE;YAC3C,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,kCAAkC,KAAK,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG;SACxG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,OAAe;IAC3D,OAAO,CACL,gCAAgC,OAAO,+BAA+B,KAAK,IAAI;QAC/E,qFAAqF;QACrF,6EAA6E;QAC7E,yFAAyF,CAC1F,CAAC;AACJ,CAAC"}
|
package/dist/lib/ipfs.d.ts
CHANGED
|
@@ -33,6 +33,12 @@ export interface CidInfo {
|
|
|
33
33
|
}
|
|
34
34
|
export declare function parseCid(input: string): CidInfo;
|
|
35
35
|
export declare function stripIpfsPrefix(s: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Convert a CID string to its v1 base32 form (idempotent for v1 inputs).
|
|
38
|
+
* Frontend uses subdomain gateway (`<cid>.ipfs.4everland.io`), which only
|
|
39
|
+
* resolves CID v1 base32. Passing a v0 (Qm...) here produces a dead link.
|
|
40
|
+
*/
|
|
41
|
+
export declare function toCidV1(input: string): string;
|
|
36
42
|
/** Compute the CIDv1 for arbitrary JSON locally — no network. */
|
|
37
43
|
export declare function cidForJson(value: unknown): Promise<string>;
|
|
38
44
|
/** Compute the CIDv1 (raw codec) for arbitrary bytes locally. */
|
|
@@ -55,6 +61,7 @@ export declare class PinataClient {
|
|
|
55
61
|
fileName?: string;
|
|
56
62
|
contentType?: string;
|
|
57
63
|
name?: string;
|
|
64
|
+
wrapWithDirectory?: boolean;
|
|
58
65
|
}): Promise<PinataPinResult>;
|
|
59
66
|
}
|
|
60
67
|
//# sourceMappingURL=ipfs.d.ts.map
|
package/dist/lib/ipfs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipfs.d.ts","sourceRoot":"","sources":["../../src/lib/ipfs.ts"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAO,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,2CAA2C;IAC3C,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,gEAAgE;IAChE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,eAAe,GACnB,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"ipfs.d.ts","sourceRoot":"","sources":["../../src/lib/ipfs.ts"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAO,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,2CAA2C;IAC3C,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,gEAAgE;IAChE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,eAAe,GACnB,OAAO,CAAC,eAAe,CAAC,CAkD1B;AAID,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,8FAA8F;IAC9F,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAoB/C;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED,iEAAiE;AACjE,wBAAsB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAIhE;AAED,iEAAiE;AACjE,wBAAsB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAGpE;AAyBD,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,MAAM;IAIxC,4DAA4D;IACtD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,OAAO,CACX,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAC3D,OAAO,CAAC,eAAe,CAAC;IA0BrB,OAAO,CACX,KAAK,EAAE,UAAU,EACjB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAC7F,OAAO,CAAC,eAAe,CAAC;CAiC5B"}
|
package/dist/lib/ipfs.js
CHANGED
|
@@ -19,14 +19,24 @@ export async function fetchIpfs(cid, cfg) {
|
|
|
19
19
|
const timeout = cfg.perRequestTimeoutMs ?? 4000;
|
|
20
20
|
const errors = [];
|
|
21
21
|
let attempts = 0;
|
|
22
|
+
const pinataGatewayToken = process.env.DEXE_PINATA_GATEWAY_TOKEN?.trim();
|
|
22
23
|
for (const gw of cfg.gateways) {
|
|
23
24
|
attempts++;
|
|
24
25
|
const base = gw.replace(/\/+$/, "").replace(/\/ipfs$/, "");
|
|
25
26
|
const url = `${base}/ipfs/${cidStr}`;
|
|
26
27
|
const controller = new AbortController();
|
|
27
28
|
const t = setTimeout(() => controller.abort(), timeout);
|
|
29
|
+
// Pinata "dedicated gateways" (`*.mypinata.cloud`) in Restricted mode
|
|
30
|
+
// reject anonymous GETs with HTTP 403. They authenticate via a separate
|
|
31
|
+
// Gateway Key (NOT the API JWT used for pinning); pass it as either
|
|
32
|
+
// `?pinataGatewayToken=…` or the `x-pinata-gateway-token` header. We use
|
|
33
|
+
// the header form. Public gateways receive no auth header.
|
|
34
|
+
const headers = {};
|
|
35
|
+
if (pinataGatewayToken && /\.mypinata\.cloud(\/|$)/i.test(base)) {
|
|
36
|
+
headers["x-pinata-gateway-token"] = pinataGatewayToken;
|
|
37
|
+
}
|
|
28
38
|
try {
|
|
29
|
-
const res = await fetch(url, { signal: controller.signal });
|
|
39
|
+
const res = await fetch(url, { signal: controller.signal, headers });
|
|
30
40
|
if (!res.ok) {
|
|
31
41
|
errors.push(`${gw} → HTTP ${res.status}`);
|
|
32
42
|
continue;
|
|
@@ -77,6 +87,18 @@ export function parseCid(input) {
|
|
|
77
87
|
export function stripIpfsPrefix(s) {
|
|
78
88
|
return s.replace(/^ipfs:\/\//, "").replace(/^\/?ipfs\//, "");
|
|
79
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Convert a CID string to its v1 base32 form (idempotent for v1 inputs).
|
|
92
|
+
* Frontend uses subdomain gateway (`<cid>.ipfs.4everland.io`), which only
|
|
93
|
+
* resolves CID v1 base32. Passing a v0 (Qm...) here produces a dead link.
|
|
94
|
+
*/
|
|
95
|
+
export function toCidV1(input) {
|
|
96
|
+
const s = stripIpfsPrefix(input);
|
|
97
|
+
const cid = CID.parse(s);
|
|
98
|
+
if (cid.version === 1)
|
|
99
|
+
return cid.toString(base32);
|
|
100
|
+
return cid.toV1().toString(base32);
|
|
101
|
+
}
|
|
80
102
|
/** Compute the CIDv1 for arbitrary JSON locally — no network. */
|
|
81
103
|
export async function cidForJson(value) {
|
|
82
104
|
const bytes = json.encode(value);
|
|
@@ -149,10 +171,19 @@ export class PinataClient {
|
|
|
149
171
|
const blob = new Blob([bytes], {
|
|
150
172
|
type: opts?.contentType ?? "application/octet-stream",
|
|
151
173
|
});
|
|
174
|
+
// Default: wrap-with-directory so the returned CID is a directory whose
|
|
175
|
+
// single child is `fileName`. That's what lets subdomain gateways serve
|
|
176
|
+
// `<cid>.ipfs.<host>/<fileName>` — without the wrapper, the CID is a raw
|
|
177
|
+
// file and any path suffix returns 404, breaking every consumer that
|
|
178
|
+
// builds URLs from `cid + fileName` (DeXe frontend + ipfs-cache.dexe.io).
|
|
179
|
+
const wrap = opts?.wrapWithDirectory ?? true;
|
|
152
180
|
form.append("file", blob, opts?.fileName ?? "file");
|
|
153
181
|
if (opts?.name) {
|
|
154
182
|
form.append("pinataMetadata", JSON.stringify({ name: opts.name }));
|
|
155
183
|
}
|
|
184
|
+
if (wrap) {
|
|
185
|
+
form.append("pinataOptions", JSON.stringify({ wrapWithDirectory: true }));
|
|
186
|
+
}
|
|
156
187
|
const res = await fetch(PINATA_PIN_FILE_URL, {
|
|
157
188
|
method: "POST",
|
|
158
189
|
headers: { Authorization: `Bearer ${this.jwt}` },
|
package/dist/lib/ipfs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipfs.js","sourceRoot":"","sources":["../../src/lib/ipfs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,0BAA0B,CAAC;AACjD,OAAO,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsB,EAAE,CAAC;AAmBzD,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAW,EACX,GAAoB;IAEpB,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC;IAChD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,QAAQ,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,GAAG,IAAI,SAAS,MAAM,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ipfs.js","sourceRoot":"","sources":["../../src/lib/ipfs.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/signer.d.ts
CHANGED
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
import { Wallet } from "ethers";
|
|
2
|
-
import type
|
|
2
|
+
import { type DexeConfig } from "../config.js";
|
|
3
|
+
/**
|
|
4
|
+
* Per-chain signer cache. The private key is chain-agnostic; only the
|
|
5
|
+
* provider differs per chain.
|
|
6
|
+
*/
|
|
3
7
|
export declare class SignerManager {
|
|
4
|
-
private
|
|
8
|
+
private readonly cache;
|
|
5
9
|
private readonly key;
|
|
6
|
-
private readonly
|
|
10
|
+
private readonly config;
|
|
7
11
|
constructor(config: DexeConfig);
|
|
8
12
|
hasSigner(): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Address of the configured signer (chain-agnostic — same EOA across chains).
|
|
15
|
+
* Throws if no `DEXE_PRIVATE_KEY` is set.
|
|
16
|
+
*/
|
|
9
17
|
getAddress(): string;
|
|
10
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Return a signer bound to the requested chain's RPC. When `chainId` is
|
|
20
|
+
* omitted the default chain is used.
|
|
21
|
+
*/
|
|
22
|
+
requireSigner(chainId?: number): Wallet;
|
|
23
|
+
private failNoKey;
|
|
11
24
|
}
|
|
12
25
|
//# sourceMappingURL=signer.d.ts.map
|
package/dist/lib/signer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/lib/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,MAAM,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/lib/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,MAAM,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAE7D;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;gBAExB,MAAM,EAAE,UAAU;IAK9B,SAAS,IAAI,OAAO;IAIpB;;;OAGG;IACH,UAAU,IAAI,MAAM;IAKpB;;;OAGG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAYvC,OAAO,CAAC,SAAS;CAMlB"}
|
package/dist/lib/signer.js
CHANGED
|
@@ -1,31 +1,48 @@
|
|
|
1
1
|
import { JsonRpcProvider, Wallet } from "ethers";
|
|
2
|
+
import { resolveChain } from "../config.js";
|
|
3
|
+
/**
|
|
4
|
+
* Per-chain signer cache. The private key is chain-agnostic; only the
|
|
5
|
+
* provider differs per chain.
|
|
6
|
+
*/
|
|
2
7
|
export class SignerManager {
|
|
3
|
-
|
|
8
|
+
cache = new Map();
|
|
4
9
|
key;
|
|
5
|
-
|
|
10
|
+
config;
|
|
6
11
|
constructor(config) {
|
|
7
12
|
this.key = config.privateKey;
|
|
8
|
-
this.
|
|
13
|
+
this.config = config;
|
|
9
14
|
}
|
|
10
15
|
hasSigner() {
|
|
11
16
|
return !!this.key;
|
|
12
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Address of the configured signer (chain-agnostic — same EOA across chains).
|
|
20
|
+
* Throws if no `DEXE_PRIVATE_KEY` is set.
|
|
21
|
+
*/
|
|
13
22
|
getAddress() {
|
|
14
|
-
|
|
23
|
+
if (!this.key)
|
|
24
|
+
this.failNoKey();
|
|
25
|
+
return new Wallet(this.key).address;
|
|
15
26
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Return a signer bound to the requested chain's RPC. When `chainId` is
|
|
29
|
+
* omitted the default chain is used.
|
|
30
|
+
*/
|
|
31
|
+
requireSigner(chainId) {
|
|
32
|
+
if (!this.key)
|
|
33
|
+
this.failNoKey();
|
|
34
|
+
const chain = resolveChain(this.config, chainId);
|
|
35
|
+
let wallet = this.cache.get(chain.chainId);
|
|
36
|
+
if (!wallet) {
|
|
37
|
+
const provider = new JsonRpcProvider(chain.rpcUrl);
|
|
38
|
+
wallet = new Wallet(this.key, provider);
|
|
39
|
+
this.cache.set(chain.chainId, wallet);
|
|
20
40
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
this.wallet = new Wallet(this.key, provider);
|
|
27
|
-
}
|
|
28
|
-
return this.wallet;
|
|
41
|
+
return wallet;
|
|
42
|
+
}
|
|
43
|
+
failNoKey() {
|
|
44
|
+
const dexeEnvKeys = Object.keys(process.env).filter(k => k.startsWith("DEXE_")).join(", ");
|
|
45
|
+
throw new Error(`DEXE_PRIVATE_KEY not set. Available DEXE_* env vars: [${dexeEnvKeys}]. Configure it in MCP server env to enable transaction signing.`);
|
|
29
46
|
}
|
|
30
47
|
}
|
|
31
48
|
//# sourceMappingURL=signer.js.map
|
package/dist/lib/signer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/lib/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/lib/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,YAAY,EAAmB,MAAM,cAAc,CAAC;AAE7D;;;GAGG;AACH,MAAM,OAAO,aAAa;IACP,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClC,GAAG,CAAqB;IACxB,MAAM,CAAa;IAEpC,YAAY,MAAkB;QAC5B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,SAAS;QACP,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,OAAgB;QAC5B,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,SAAS;QACf,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3F,MAAM,IAAI,KAAK,CACb,yDAAyD,WAAW,kEAAkE,CACvI,CAAC;IACJ,CAAC;CACF"}
|
package/dist/rpc.d.ts
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import { JsonRpcProvider } from "ethers";
|
|
2
|
-
import type
|
|
2
|
+
import { type DexeConfig } from "./config.js";
|
|
3
3
|
/**
|
|
4
4
|
* Lazy ethers v6 provider factory. Gov tools that need an RPC endpoint call
|
|
5
|
-
* `requireProvider()`; tools that don't (decode_calldata,
|
|
6
|
-
* never touch this module.
|
|
5
|
+
* `requireProvider(chainId?)`; tools that don't (decode_calldata,
|
|
6
|
+
* list_gov_contract_types) never touch this module.
|
|
7
|
+
*
|
|
8
|
+
* One cached provider per chain id. `chainId` is optional — when omitted the
|
|
9
|
+
* configured default chain is used.
|
|
7
10
|
*/
|
|
8
11
|
export declare class RpcProvider {
|
|
9
12
|
private readonly config;
|
|
10
|
-
private
|
|
13
|
+
private readonly cache;
|
|
11
14
|
constructor(config: DexeConfig);
|
|
12
|
-
requireProvider(): JsonRpcProvider;
|
|
15
|
+
requireProvider(chainId?: number): JsonRpcProvider;
|
|
16
|
+
/** Returns the resolved chain id (after applying the default). Cheap. */
|
|
17
|
+
resolveChainId(chainId?: number): number;
|
|
13
18
|
}
|
|
14
19
|
//# sourceMappingURL=rpc.d.ts.map
|
package/dist/rpc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;;;GAOG;AACH,qBAAa,WAAW;IAGV,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsC;gBAE/B,MAAM,EAAE,UAAU;IAE/C,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,eAAe;IAUlD,yEAAyE;IACzE,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;CAGzC"}
|
package/dist/rpc.js
CHANGED
|
@@ -1,23 +1,31 @@
|
|
|
1
1
|
import { JsonRpcProvider } from "ethers";
|
|
2
|
+
import { resolveChain } from "./config.js";
|
|
2
3
|
/**
|
|
3
4
|
* Lazy ethers v6 provider factory. Gov tools that need an RPC endpoint call
|
|
4
|
-
* `requireProvider()`; tools that don't (decode_calldata,
|
|
5
|
-
* never touch this module.
|
|
5
|
+
* `requireProvider(chainId?)`; tools that don't (decode_calldata,
|
|
6
|
+
* list_gov_contract_types) never touch this module.
|
|
7
|
+
*
|
|
8
|
+
* One cached provider per chain id. `chainId` is optional — when omitted the
|
|
9
|
+
* configured default chain is used.
|
|
6
10
|
*/
|
|
7
11
|
export class RpcProvider {
|
|
8
12
|
config;
|
|
9
|
-
|
|
13
|
+
cache = new Map();
|
|
10
14
|
constructor(config) {
|
|
11
15
|
this.config = config;
|
|
12
16
|
}
|
|
13
|
-
requireProvider() {
|
|
14
|
-
|
|
15
|
-
|
|
17
|
+
requireProvider(chainId) {
|
|
18
|
+
const chain = resolveChain(this.config, chainId);
|
|
19
|
+
let provider = this.cache.get(chain.chainId);
|
|
20
|
+
if (!provider) {
|
|
21
|
+
provider = new JsonRpcProvider(chain.rpcUrl);
|
|
22
|
+
this.cache.set(chain.chainId, provider);
|
|
16
23
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
24
|
+
return provider;
|
|
25
|
+
}
|
|
26
|
+
/** Returns the resolved chain id (after applying the default). Cheap. */
|
|
27
|
+
resolveChainId(chainId) {
|
|
28
|
+
return resolveChain(this.config, chainId).chainId;
|
|
21
29
|
}
|
|
22
30
|
}
|
|
23
31
|
//# sourceMappingURL=rpc.js.map
|
package/dist/rpc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,YAAY,EAAmB,MAAM,aAAa,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,OAAO,WAAW;IAGO;IAFZ,KAAK,GAAG,IAAI,GAAG,EAA2B,CAAC;IAE5D,YAA6B,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAEnD,eAAe,CAAC,OAAgB;QAC9B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,yEAAyE;IACzE,cAAc,CAAC,OAAgB;QAC7B,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC;IACpD,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daoDeploy.d.ts","sourceRoot":"","sources":["../../src/tools/daoDeploy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"daoDeploy.d.ts","sourceRoot":"","sources":["../../src/tools/daoDeploy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA0JhD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAGhF"}
|