@0xwh1sker/mantle-cli 0.1.3
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/LICENSE +21 -0
- package/README.md +43 -0
- package/dist/commands/account.d.ts +3 -0
- package/dist/commands/account.d.ts.map +1 -0
- package/dist/commands/account.js +96 -0
- package/dist/commands/account.js.map +1 -0
- package/dist/commands/catalog.d.ts +3 -0
- package/dist/commands/catalog.d.ts.map +1 -0
- package/dist/commands/catalog.js +93 -0
- package/dist/commands/catalog.js.map +1 -0
- package/dist/commands/chain.d.ts +3 -0
- package/dist/commands/chain.d.ts.map +1 -0
- package/dist/commands/chain.js +65 -0
- package/dist/commands/chain.js.map +1 -0
- package/dist/commands/defi-aave.d.ts +11 -0
- package/dist/commands/defi-aave.d.ts.map +1 -0
- package/dist/commands/defi-aave.js +216 -0
- package/dist/commands/defi-aave.js.map +1 -0
- package/dist/commands/defi-lp.d.ts +13 -0
- package/dist/commands/defi-lp.d.ts.map +1 -0
- package/dist/commands/defi-lp.js +496 -0
- package/dist/commands/defi-lp.js.map +1 -0
- package/dist/commands/defi-swap.d.ts +11 -0
- package/dist/commands/defi-swap.d.ts.map +1 -0
- package/dist/commands/defi-swap.js +206 -0
- package/dist/commands/defi-swap.js.map +1 -0
- package/dist/commands/defi.d.ts +3 -0
- package/dist/commands/defi.d.ts.map +1 -0
- package/dist/commands/defi.js +358 -0
- package/dist/commands/defi.js.map +1 -0
- package/dist/commands/diagnostics.d.ts +3 -0
- package/dist/commands/diagnostics.d.ts.map +1 -0
- package/dist/commands/diagnostics.js +76 -0
- package/dist/commands/diagnostics.js.map +1 -0
- package/dist/commands/indexer.d.ts +3 -0
- package/dist/commands/indexer.d.ts.map +1 -0
- package/dist/commands/indexer.js +92 -0
- package/dist/commands/indexer.js.map +1 -0
- package/dist/commands/registry.d.ts +3 -0
- package/dist/commands/registry.d.ts.map +1 -0
- package/dist/commands/registry.js +76 -0
- package/dist/commands/registry.js.map +1 -0
- package/dist/commands/token.d.ts +3 -0
- package/dist/commands/token.d.ts.map +1 -0
- package/dist/commands/token.js +100 -0
- package/dist/commands/token.js.map +1 -0
- package/dist/formatter.d.ts +20 -0
- package/dist/formatter.d.ts.map +1 -0
- package/dist/formatter.js +98 -0
- package/dist/formatter.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/utils.d.ts +7 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +62 -0
- package/dist/utils.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { allTools } from "@0xwh1sker/mantle-core/tools/index.js";
|
|
2
|
+
import { formatKeyValue, formatJson } from "../formatter.js";
|
|
3
|
+
import { parseJsonArray } from "../utils.js";
|
|
4
|
+
export function registerDiagnostics(parent) {
|
|
5
|
+
const group = parent.command("diagnostics").description("RPC health and probing");
|
|
6
|
+
group
|
|
7
|
+
.command("rpc-health")
|
|
8
|
+
.description("Check RPC endpoint health and chain-id consistency")
|
|
9
|
+
.option("--rpc-url <url>", "RPC URL to test (defaults to configured endpoint)")
|
|
10
|
+
.action(async (opts, cmd) => {
|
|
11
|
+
const globals = cmd.optsWithGlobals();
|
|
12
|
+
const result = await allTools["mantle_checkRpcHealth"].handler({
|
|
13
|
+
rpc_url: opts.rpcUrl ?? globals.rpcUrl,
|
|
14
|
+
network: globals.network
|
|
15
|
+
});
|
|
16
|
+
if (globals.json) {
|
|
17
|
+
formatJson(result);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
const data = result;
|
|
21
|
+
formatKeyValue(data, {
|
|
22
|
+
order: [
|
|
23
|
+
"endpoint", "reachable", "chain_id", "chain_id_matches",
|
|
24
|
+
"block_number", "latency_ms", "error", "checked_at_utc"
|
|
25
|
+
],
|
|
26
|
+
labels: {
|
|
27
|
+
endpoint: "Endpoint",
|
|
28
|
+
reachable: "Reachable",
|
|
29
|
+
chain_id: "Chain ID",
|
|
30
|
+
chain_id_matches: "Chain ID Matches",
|
|
31
|
+
block_number: "Block",
|
|
32
|
+
latency_ms: "Latency (ms)",
|
|
33
|
+
error: "Error",
|
|
34
|
+
checked_at_utc: "Checked At"
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
group
|
|
40
|
+
.command("probe")
|
|
41
|
+
.description("Probe a JSON-RPC endpoint with a minimal method call")
|
|
42
|
+
.option("--rpc-url <url>", "RPC endpoint to probe")
|
|
43
|
+
.option("--method <method>", "RPC method (eth_chainId, eth_blockNumber, eth_getBalance)", "eth_blockNumber")
|
|
44
|
+
.option("--params <json>", "optional method params as JSON array")
|
|
45
|
+
.action(async (opts, cmd) => {
|
|
46
|
+
const globals = cmd.optsWithGlobals();
|
|
47
|
+
const params = opts.params
|
|
48
|
+
? parseJsonArray(opts.params, "params")
|
|
49
|
+
: undefined;
|
|
50
|
+
const result = await allTools["mantle_probeEndpoint"].handler({
|
|
51
|
+
rpc_url: opts.rpcUrl ?? globals.rpcUrl,
|
|
52
|
+
method: opts.method,
|
|
53
|
+
params,
|
|
54
|
+
network: globals.network
|
|
55
|
+
});
|
|
56
|
+
if (globals.json) {
|
|
57
|
+
formatJson(result);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const data = result;
|
|
61
|
+
formatKeyValue(data, {
|
|
62
|
+
order: ["endpoint", "method", "success", "result", "error", "latency_ms", "probed_at_utc"],
|
|
63
|
+
labels: {
|
|
64
|
+
endpoint: "Endpoint",
|
|
65
|
+
method: "Method",
|
|
66
|
+
success: "Success",
|
|
67
|
+
result: "Result",
|
|
68
|
+
error: "Error",
|
|
69
|
+
latency_ms: "Latency (ms)",
|
|
70
|
+
probed_at_utc: "Probed At"
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/commands/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/commands/indexer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAiGrD"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { allTools } from "@0xwh1sker/mantle-core/tools/index.js";
|
|
2
|
+
import { formatTable, formatJson, formatKeyValue } from "../formatter.js";
|
|
3
|
+
import { parseIntegerOption, parseJsonString } from "../utils.js";
|
|
4
|
+
export function registerIndexer(parent) {
|
|
5
|
+
const group = parent.command("indexer").description("Subgraph and SQL queries");
|
|
6
|
+
group
|
|
7
|
+
.command("subgraph")
|
|
8
|
+
.description("Run GraphQL query against a Mantle indexer")
|
|
9
|
+
.requiredOption("--endpoint <url>", "GraphQL endpoint URL")
|
|
10
|
+
.requiredOption("--query <graphql>", "GraphQL query document")
|
|
11
|
+
.option("--variables <json>", "optional GraphQL variables as JSON string")
|
|
12
|
+
.option("--timeout <ms>", "request timeout in milliseconds", (value) => parseIntegerOption(value, "--timeout"))
|
|
13
|
+
.action(async (opts, cmd) => {
|
|
14
|
+
const globals = cmd.optsWithGlobals();
|
|
15
|
+
const variables = opts.variables
|
|
16
|
+
? parseJsonString(opts.variables, "variables")
|
|
17
|
+
: undefined;
|
|
18
|
+
const result = await allTools["mantle_querySubgraph"].handler({
|
|
19
|
+
endpoint: opts.endpoint,
|
|
20
|
+
query: opts.query,
|
|
21
|
+
variables,
|
|
22
|
+
timeout_ms: opts.timeout,
|
|
23
|
+
network: globals.network
|
|
24
|
+
});
|
|
25
|
+
if (globals.json) {
|
|
26
|
+
formatJson(result);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
const data = result;
|
|
30
|
+
formatKeyValue({
|
|
31
|
+
endpoint: data.endpoint,
|
|
32
|
+
queried_at: data.queried_at_utc,
|
|
33
|
+
elapsed_ms: data.elapsed_ms
|
|
34
|
+
}, {
|
|
35
|
+
labels: {
|
|
36
|
+
endpoint: "Endpoint",
|
|
37
|
+
queried_at: "Queried At",
|
|
38
|
+
elapsed_ms: "Elapsed (ms)"
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
if (data.errors) {
|
|
42
|
+
console.log(" Errors:", JSON.stringify(data.errors, null, 2));
|
|
43
|
+
}
|
|
44
|
+
if (data.data) {
|
|
45
|
+
console.log(JSON.stringify(data.data, null, 2));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
group
|
|
50
|
+
.command("sql")
|
|
51
|
+
.description("Run read-only SQL query against an indexer")
|
|
52
|
+
.requiredOption("--endpoint <url>", "SQL indexer endpoint URL")
|
|
53
|
+
.requiredOption("--query <sql>", "read-only SQL query")
|
|
54
|
+
.option("--params <json>", "optional query params as JSON string")
|
|
55
|
+
.option("--timeout <ms>", "request timeout in milliseconds", (value) => parseIntegerOption(value, "--timeout"))
|
|
56
|
+
.action(async (opts, cmd) => {
|
|
57
|
+
const globals = cmd.optsWithGlobals();
|
|
58
|
+
const params = opts.params
|
|
59
|
+
? parseJsonString(opts.params, "params")
|
|
60
|
+
: undefined;
|
|
61
|
+
const result = await allTools["mantle_queryIndexerSql"].handler({
|
|
62
|
+
endpoint: opts.endpoint,
|
|
63
|
+
query: opts.query,
|
|
64
|
+
params,
|
|
65
|
+
timeout_ms: opts.timeout,
|
|
66
|
+
network: globals.network
|
|
67
|
+
});
|
|
68
|
+
if (globals.json) {
|
|
69
|
+
formatJson(result);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
const data = result;
|
|
73
|
+
const columns = (data.columns ?? []);
|
|
74
|
+
const rows = (data.rows ?? []);
|
|
75
|
+
console.log(`\n Endpoint: ${data.endpoint} Rows: ${data.row_count} Elapsed: ${data.elapsed_ms}ms\n`);
|
|
76
|
+
if (rows.length > 0 && columns.length > 0) {
|
|
77
|
+
const tableRows = rows.map((row) => {
|
|
78
|
+
const record = {};
|
|
79
|
+
columns.forEach((col, i) => {
|
|
80
|
+
record[col] = Array.isArray(row) ? row[i] : row[col];
|
|
81
|
+
});
|
|
82
|
+
return record;
|
|
83
|
+
});
|
|
84
|
+
formatTable(tableRows, columns.map((col) => ({ key: col, label: col })));
|
|
85
|
+
}
|
|
86
|
+
if (data.truncated) {
|
|
87
|
+
console.log(" (Results truncated)");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=indexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/commands/indexer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;IAEhF,KAAK;SACF,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,4CAA4C,CAAC;SACzD,cAAc,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;SAC1D,cAAc,CAAC,mBAAmB,EAAE,wBAAwB,CAAC;SAC7D,MAAM,CAAC,oBAAoB,EAAE,2CAA2C,CAAC;SACzE,MAAM,CAAC,gBAAgB,EAAE,iCAAiC,EAAE,CAAC,KAAa,EAAE,EAAE,CAC7E,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CACvC;SACA,MAAM,CAAC,KAAK,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;YAC9B,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,SAAmB,EAAE,WAAW,CAAC;YACxD,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC;YAC5D,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS;YACT,UAAU,EAAE,IAAI,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,UAAU,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,MAAiC,CAAC;YAC/C,cAAc,CACZ;gBACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,UAAU,EAAE,IAAI,CAAC,cAAc;gBAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B,EACD;gBACE,MAAM,EAAE;oBACN,QAAQ,EAAE,UAAU;oBACpB,UAAU,EAAE,YAAY;oBACxB,UAAU,EAAE,cAAc;iBAC3B;aACF,CACF,CAAC;YACF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACjE,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,KAAK;SACF,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,4CAA4C,CAAC;SACzD,cAAc,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;SAC9D,cAAc,CAAC,eAAe,EAAE,qBAAqB,CAAC;SACtD,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,CAAC;SACjE,MAAM,CAAC,gBAAgB,EAAE,iCAAiC,EAAE,CAAC,KAAa,EAAE,EAAE,CAC7E,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CACvC;SACA,MAAM,CAAC,KAAK,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;YACxB,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,MAAgB,EAAE,QAAQ,CAAC;YAClD,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC;YAC9D,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,UAAU,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,MAAiC,CAAC;YAC/C,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAa,CAAC;YACjD,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAgB,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,QAAQ,WAAW,IAAI,CAAC,SAAS,cAAc,IAAI,CAAC,UAAU,MAAM,CAAC,CAAC;YACxG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBACjC,MAAM,MAAM,GAA4B,EAAE,CAAC;oBAC3C,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;wBACzB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,GAA+B,CAAC,GAAG,CAAC,CAAC;oBACpF,CAAC,CAAC,CAAC;oBACH,OAAO,MAAM,CAAC;gBAChB,CAAC,CAAC,CAAC;gBACH,WAAW,CACT,SAAS,EACT,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CACjD,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/commands/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAwEtD"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { allTools } from "@0xwh1sker/mantle-core/tools/index.js";
|
|
2
|
+
import { formatKeyValue, formatJson } from "../formatter.js";
|
|
3
|
+
export function registerRegistry(parent) {
|
|
4
|
+
const group = parent.command("registry").description("Address resolution and validation");
|
|
5
|
+
group
|
|
6
|
+
.command("resolve")
|
|
7
|
+
.description("Resolve trusted contract address by key, alias, or label")
|
|
8
|
+
.argument("<identifier>", "registry key, alias, or label")
|
|
9
|
+
.option("--category <category>", "filter category (system, token, bridge, defi, any)", "any")
|
|
10
|
+
.action(async (identifier, opts, cmd) => {
|
|
11
|
+
const globals = cmd.optsWithGlobals();
|
|
12
|
+
const result = await allTools["mantle_resolveAddress"].handler({
|
|
13
|
+
identifier,
|
|
14
|
+
network: globals.network,
|
|
15
|
+
category: opts.category
|
|
16
|
+
});
|
|
17
|
+
if (globals.json) {
|
|
18
|
+
formatJson(result);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
const data = result;
|
|
22
|
+
formatKeyValue(data, {
|
|
23
|
+
order: [
|
|
24
|
+
"identifier", "network", "address", "label", "category",
|
|
25
|
+
"status", "confidence", "aliases", "source_url"
|
|
26
|
+
],
|
|
27
|
+
labels: {
|
|
28
|
+
identifier: "Identifier",
|
|
29
|
+
network: "Network",
|
|
30
|
+
address: "Address",
|
|
31
|
+
label: "Label",
|
|
32
|
+
category: "Category",
|
|
33
|
+
status: "Status",
|
|
34
|
+
is_official: "Official",
|
|
35
|
+
confidence: "Confidence",
|
|
36
|
+
aliases: "Aliases",
|
|
37
|
+
source_url: "Source URL"
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
group
|
|
43
|
+
.command("validate")
|
|
44
|
+
.description("Validate address format, checksum, and optional bytecode presence")
|
|
45
|
+
.argument("<address>", "address to validate")
|
|
46
|
+
.option("--check-code", "check if deployed bytecode exists", false)
|
|
47
|
+
.action(async (address, opts, cmd) => {
|
|
48
|
+
const globals = cmd.optsWithGlobals();
|
|
49
|
+
const result = await allTools["mantle_validateAddress"].handler({
|
|
50
|
+
address,
|
|
51
|
+
check_code: opts.checkCode,
|
|
52
|
+
network: globals.network
|
|
53
|
+
});
|
|
54
|
+
if (globals.json) {
|
|
55
|
+
formatJson(result);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const data = result;
|
|
59
|
+
formatKeyValue(data, {
|
|
60
|
+
order: [
|
|
61
|
+
"address", "valid_format", "is_checksummed",
|
|
62
|
+
"is_zero_address", "has_code", "registry_match"
|
|
63
|
+
],
|
|
64
|
+
labels: {
|
|
65
|
+
address: "Address",
|
|
66
|
+
valid_format: "Valid Format",
|
|
67
|
+
is_checksummed: "Checksummed",
|
|
68
|
+
is_zero_address: "Zero Address",
|
|
69
|
+
has_code: "Has Code",
|
|
70
|
+
registry_match: "Registry Match"
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/commands/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/commands/token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA+FnD"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { allTools } from "@0xwh1sker/mantle-core/tools/index.js";
|
|
2
|
+
import { formatKeyValue, formatTable, formatJson } from "../formatter.js";
|
|
3
|
+
import { parseCommaList } from "../utils.js";
|
|
4
|
+
export function registerToken(parent) {
|
|
5
|
+
const group = parent.command("token").description("Token metadata and resolution");
|
|
6
|
+
group
|
|
7
|
+
.command("info")
|
|
8
|
+
.description("Read ERC-20 token metadata (name, symbol, decimals, total supply)")
|
|
9
|
+
.argument("<token>", "token symbol or address")
|
|
10
|
+
.action(async (token, _opts, cmd) => {
|
|
11
|
+
const globals = cmd.optsWithGlobals();
|
|
12
|
+
const result = await allTools["mantle_getTokenInfo"].handler({
|
|
13
|
+
token,
|
|
14
|
+
network: globals.network
|
|
15
|
+
});
|
|
16
|
+
if (globals.json) {
|
|
17
|
+
formatJson(result);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
const data = result;
|
|
21
|
+
formatKeyValue(data, {
|
|
22
|
+
order: ["name", "symbol", "address", "decimals", "total_supply_normalized", "network", "collected_at_utc"],
|
|
23
|
+
labels: {
|
|
24
|
+
name: "Name",
|
|
25
|
+
symbol: "Symbol",
|
|
26
|
+
address: "Address",
|
|
27
|
+
decimals: "Decimals",
|
|
28
|
+
total_supply_normalized: "Total Supply",
|
|
29
|
+
network: "Network",
|
|
30
|
+
collected_at_utc: "Collected At"
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
group
|
|
36
|
+
.command("prices")
|
|
37
|
+
.description("Read token prices for valuation (null when no trusted source)")
|
|
38
|
+
.requiredOption("--tokens <tokens>", "comma-separated token symbols or addresses")
|
|
39
|
+
.option("--base-currency <currency>", "quote currency (usd, mnt)", "usd")
|
|
40
|
+
.action(async (opts, cmd) => {
|
|
41
|
+
const globals = cmd.optsWithGlobals();
|
|
42
|
+
const tokens = parseCommaList(opts.tokens);
|
|
43
|
+
const result = await allTools["mantle_getTokenPrices"].handler({
|
|
44
|
+
tokens,
|
|
45
|
+
base_currency: opts.baseCurrency,
|
|
46
|
+
network: globals.network
|
|
47
|
+
});
|
|
48
|
+
if (globals.json) {
|
|
49
|
+
formatJson(result);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const data = result;
|
|
53
|
+
const prices = (data.prices ?? []);
|
|
54
|
+
formatTable(prices, [
|
|
55
|
+
{ key: "symbol", label: "Token" },
|
|
56
|
+
{
|
|
57
|
+
key: "price",
|
|
58
|
+
label: `Price (${data.base_currency.toUpperCase()})`,
|
|
59
|
+
align: "right",
|
|
60
|
+
format: (v) => (v === null ? "N/A" : String(v))
|
|
61
|
+
},
|
|
62
|
+
{ key: "source", label: "Source" },
|
|
63
|
+
{ key: "confidence", label: "Confidence" }
|
|
64
|
+
]);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
group
|
|
68
|
+
.command("resolve")
|
|
69
|
+
.description("Resolve token symbol via quick-ref + canonical token-list check")
|
|
70
|
+
.argument("<symbol>", "token symbol to resolve")
|
|
71
|
+
.option("--no-token-list-check", "skip canonical token-list match requirement")
|
|
72
|
+
.action(async (symbol, opts, cmd) => {
|
|
73
|
+
const globals = cmd.optsWithGlobals();
|
|
74
|
+
const result = await allTools["mantle_resolveToken"].handler({
|
|
75
|
+
symbol,
|
|
76
|
+
network: globals.network,
|
|
77
|
+
require_token_list_match: opts.tokenListCheck !== false
|
|
78
|
+
});
|
|
79
|
+
if (globals.json) {
|
|
80
|
+
formatJson(result);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
const data = result;
|
|
84
|
+
formatKeyValue(data, {
|
|
85
|
+
order: ["symbol", "address", "decimals", "source", "confidence", "token_list_match", "network"],
|
|
86
|
+
labels: {
|
|
87
|
+
symbol: "Symbol",
|
|
88
|
+
address: "Address",
|
|
89
|
+
decimals: "Decimals",
|
|
90
|
+
source: "Source",
|
|
91
|
+
confidence: "Confidence",
|
|
92
|
+
token_list_match: "Token List Match",
|
|
93
|
+
token_list_version: "Token List Version",
|
|
94
|
+
network: "Network"
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/commands/token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface KeyValueOptions {
|
|
2
|
+
labels?: Record<string, string>;
|
|
3
|
+
order?: string[];
|
|
4
|
+
}
|
|
5
|
+
export declare function formatKeyValue(data: Record<string, unknown>, options?: KeyValueOptions): void;
|
|
6
|
+
export interface TableColumn {
|
|
7
|
+
key: string;
|
|
8
|
+
label: string;
|
|
9
|
+
align?: "left" | "right";
|
|
10
|
+
format?: (value: unknown) => string;
|
|
11
|
+
}
|
|
12
|
+
export declare function formatTable(rows: Record<string, unknown>[], columns: TableColumn[]): void;
|
|
13
|
+
export declare function formatJson(data: unknown): void;
|
|
14
|
+
export declare function formatError(error: {
|
|
15
|
+
code?: string;
|
|
16
|
+
message: string;
|
|
17
|
+
suggestion?: string;
|
|
18
|
+
}): void;
|
|
19
|
+
export declare function disableColors(): void;
|
|
20
|
+
//# sourceMappingURL=formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AA6BD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,GAAE,eAAoB,GAC5B,IAAI,CAiBN;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CACrC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAsCzF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE9C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,IAAI,CASP;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
function getLabelWidth(entries) {
|
|
3
|
+
return Math.max(...entries.map(([label]) => label.length), 0);
|
|
4
|
+
}
|
|
5
|
+
function formatValue(value) {
|
|
6
|
+
if (value === null || value === undefined) {
|
|
7
|
+
return chalk.dim("null");
|
|
8
|
+
}
|
|
9
|
+
if (typeof value === "boolean") {
|
|
10
|
+
return value ? chalk.green("true") : chalk.red("false");
|
|
11
|
+
}
|
|
12
|
+
if (typeof value === "number") {
|
|
13
|
+
return chalk.cyan(String(value));
|
|
14
|
+
}
|
|
15
|
+
if (typeof value === "string") {
|
|
16
|
+
if (/^0x[a-fA-F0-9]{40}$/.test(value)) {
|
|
17
|
+
return chalk.yellow(value);
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
if (Array.isArray(value)) {
|
|
22
|
+
if (value.length === 0)
|
|
23
|
+
return chalk.dim("[]");
|
|
24
|
+
return value.map((item) => formatValue(item)).join(", ");
|
|
25
|
+
}
|
|
26
|
+
return JSON.stringify(value);
|
|
27
|
+
}
|
|
28
|
+
export function formatKeyValue(data, options = {}) {
|
|
29
|
+
const { labels = {}, order } = options;
|
|
30
|
+
const keys = order ?? Object.keys(data);
|
|
31
|
+
const entries = [];
|
|
32
|
+
for (const key of keys) {
|
|
33
|
+
if (!(key in data))
|
|
34
|
+
continue;
|
|
35
|
+
const label = labels[key] ?? key;
|
|
36
|
+
entries.push([label, formatValue(data[key])]);
|
|
37
|
+
}
|
|
38
|
+
const width = getLabelWidth(entries);
|
|
39
|
+
console.log();
|
|
40
|
+
for (const [label, value] of entries) {
|
|
41
|
+
console.log(` ${chalk.bold(label.padEnd(width))} ${value}`);
|
|
42
|
+
}
|
|
43
|
+
console.log();
|
|
44
|
+
}
|
|
45
|
+
export function formatTable(rows, columns) {
|
|
46
|
+
if (rows.length === 0) {
|
|
47
|
+
console.log(chalk.dim("\n No results.\n"));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const widths = columns.map((col) => {
|
|
51
|
+
const headerWidth = col.label.length;
|
|
52
|
+
const maxDataWidth = Math.max(...rows.map((row) => {
|
|
53
|
+
const formatted = col.format ? col.format(row[col.key]) : formatValue(row[col.key]);
|
|
54
|
+
return stripAnsi(formatted).length;
|
|
55
|
+
}), 0);
|
|
56
|
+
return Math.max(headerWidth, maxDataWidth);
|
|
57
|
+
});
|
|
58
|
+
const header = columns
|
|
59
|
+
.map((col, i) => chalk.bold(col.label.padEnd(widths[i])))
|
|
60
|
+
.join(" ");
|
|
61
|
+
console.log(`\n ${header}`);
|
|
62
|
+
for (const row of rows) {
|
|
63
|
+
const line = columns
|
|
64
|
+
.map((col, i) => {
|
|
65
|
+
const raw = col.format ? col.format(row[col.key]) : formatValue(row[col.key]);
|
|
66
|
+
const stripped = stripAnsi(raw);
|
|
67
|
+
const padding = widths[i] - stripped.length;
|
|
68
|
+
if (col.align === "right") {
|
|
69
|
+
return " ".repeat(Math.max(padding, 0)) + raw;
|
|
70
|
+
}
|
|
71
|
+
return raw + " ".repeat(Math.max(padding, 0));
|
|
72
|
+
})
|
|
73
|
+
.join(" ");
|
|
74
|
+
console.log(` ${line}`);
|
|
75
|
+
}
|
|
76
|
+
console.log();
|
|
77
|
+
}
|
|
78
|
+
export function formatJson(data) {
|
|
79
|
+
console.log(JSON.stringify(data, null, 2));
|
|
80
|
+
}
|
|
81
|
+
export function formatError(error) {
|
|
82
|
+
console.error(chalk.red(`\nError: ${error.message}`));
|
|
83
|
+
if (error.code) {
|
|
84
|
+
console.error(chalk.dim(`Code: ${error.code}`));
|
|
85
|
+
}
|
|
86
|
+
if (error.suggestion) {
|
|
87
|
+
console.error(chalk.yellow(`Suggestion: ${error.suggestion}`));
|
|
88
|
+
}
|
|
89
|
+
console.error();
|
|
90
|
+
}
|
|
91
|
+
export function disableColors() {
|
|
92
|
+
chalk.level = 0;
|
|
93
|
+
}
|
|
94
|
+
function stripAnsi(str) {
|
|
95
|
+
// eslint-disable-next-line no-control-regex
|
|
96
|
+
return str.replace(/\x1B\[[0-9;]*m/g, "");
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { Command } from "commander";
|
|
4
|
+
import { MantleMcpError } from "@0xwh1sker/mantle-core/errors.js";
|
|
5
|
+
import { disableColors, formatError, formatJson } from "./formatter.js";
|
|
6
|
+
import { applyRpcOverride } from "./utils.js";
|
|
7
|
+
import { registerChain } from "./commands/chain.js";
|
|
8
|
+
import { registerRegistry } from "./commands/registry.js";
|
|
9
|
+
import { registerAccount } from "./commands/account.js";
|
|
10
|
+
import { registerToken } from "./commands/token.js";
|
|
11
|
+
import { registerDefi } from "./commands/defi.js";
|
|
12
|
+
import { registerSwap } from "./commands/defi-swap.js";
|
|
13
|
+
import { registerAave } from "./commands/defi-aave.js";
|
|
14
|
+
import { registerLp } from "./commands/defi-lp.js";
|
|
15
|
+
import { registerIndexer } from "./commands/indexer.js";
|
|
16
|
+
import { registerDiagnostics } from "./commands/diagnostics.js";
|
|
17
|
+
import { registerCatalog } from "./commands/catalog.js";
|
|
18
|
+
const pkg = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf-8"));
|
|
19
|
+
const program = new Command();
|
|
20
|
+
program
|
|
21
|
+
.name("mantle-cli")
|
|
22
|
+
.description("CLI for Mantle L2 chain reads, DeFi queries, swaps, LP, and Aave operations")
|
|
23
|
+
.version(pkg.version)
|
|
24
|
+
.option("-n, --network <network>", "target network (mainnet, sepolia)", "mainnet")
|
|
25
|
+
.option("--json", "output raw JSON", false)
|
|
26
|
+
.option("--no-color", "disable colored output")
|
|
27
|
+
.option("--rpc-url <url>", "override RPC endpoint")
|
|
28
|
+
.hook("preAction", (thisCommand) => {
|
|
29
|
+
const opts = thisCommand.opts();
|
|
30
|
+
if (opts.color === false) {
|
|
31
|
+
disableColors();
|
|
32
|
+
}
|
|
33
|
+
applyRpcOverride(opts.rpcUrl, opts.network);
|
|
34
|
+
});
|
|
35
|
+
registerChain(program);
|
|
36
|
+
registerRegistry(program);
|
|
37
|
+
registerAccount(program);
|
|
38
|
+
registerToken(program);
|
|
39
|
+
registerDefi(program);
|
|
40
|
+
registerSwap(program);
|
|
41
|
+
registerAave(program);
|
|
42
|
+
registerLp(program);
|
|
43
|
+
registerIndexer(program);
|
|
44
|
+
registerDiagnostics(program);
|
|
45
|
+
registerCatalog(program);
|
|
46
|
+
program.parseAsync(process.argv).catch((error) => {
|
|
47
|
+
const globals = program.opts();
|
|
48
|
+
if (error instanceof MantleMcpError) {
|
|
49
|
+
if (globals.json) {
|
|
50
|
+
formatJson({
|
|
51
|
+
error: true,
|
|
52
|
+
code: error.code,
|
|
53
|
+
message: error.message,
|
|
54
|
+
suggestion: error.suggestion,
|
|
55
|
+
details: error.details
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
formatError({ code: error.code, message: error.message, suggestion: error.suggestion });
|
|
60
|
+
}
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
if (globals.json) {
|
|
64
|
+
formatJson({
|
|
65
|
+
error: true,
|
|
66
|
+
code: "INTERNAL_ERROR",
|
|
67
|
+
message: error instanceof Error ? error.message : String(error),
|
|
68
|
+
suggestion: "Retry the operation or check server logs."
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
formatError({ message: error instanceof Error ? error.message : String(error) });
|
|
73
|
+
}
|
|
74
|
+
process.exit(2);
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CACnE,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,6EAA6E,CAAC;KAC1F,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,MAAM,CAAC,yBAAyB,EAAE,mCAAmC,EAAE,SAAS,CAAC;KACjF,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,CAAC;KAC1C,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;KAC9C,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;KAClD,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACjC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QACzB,aAAa,EAAE,CAAC;IAClB,CAAC;IACD,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC,CAAC,CAAC;AAEL,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,eAAe,CAAC,OAAO,CAAC,CAAC;AAEzB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,UAAU,CAAC;gBACT,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,UAAU,CAAC;YACT,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/D,UAAU,EAAE,2CAA2C;SACxD,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function parseCommaList(value: string): string[];
|
|
2
|
+
export declare function parseJsonString(value: string, fieldName: string): Record<string, unknown>;
|
|
3
|
+
export declare function applyRpcOverride(rpcUrl: string | undefined, network: string): void;
|
|
4
|
+
export declare function parseJsonArray(value: string, fieldName: string): unknown[];
|
|
5
|
+
export declare function parseIntegerOption(value: string, optionName: string): number;
|
|
6
|
+
export declare function parseNumberOption(value: string, optionName: string): number;
|
|
7
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAKtD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAezF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAOlF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,CAe1E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAW5E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAO3E"}
|