chain-insights 0.22.3 → 0.24.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/README.md +33 -42
- package/bin/cli.js +1 -1
- package/bin/install.cjs +1 -1
- package/dist/{capabilities-BZI6qROg.mjs → capabilities-BPnw6nP_.mjs} +20 -2
- package/dist/{capabilities-BZI6qROg.mjs.map → capabilities-BPnw6nP_.mjs.map} +1 -1
- package/dist/{capabilities-CPcrxodx.cjs → capabilities-EMRzwPBU.cjs} +19 -1
- package/dist/cli.cjs +82 -92
- package/dist/cli.mjs +82 -92
- package/dist/cli.mjs.map +1 -1
- package/dist/{client-D4aM4bzP.mjs → client-CHYskPnG.mjs} +6 -6
- package/dist/client-CHYskPnG.mjs.map +1 -0
- package/dist/{client-CqAzD519.cjs → client-Ypw9BNbn.cjs} +5 -5
- package/dist/{config-DYiUgdzg.cjs → config-B542AM4w.cjs} +2 -3
- package/dist/{config-DiQs0rQX.mjs → config-DbbPiGk0.mjs} +2 -3
- package/dist/{config-DiQs0rQX.mjs.map → config-DbbPiGk0.mjs.map} +1 -1
- package/dist/create-C0buxEfU.mjs +48 -0
- package/dist/create-C0buxEfU.mjs.map +1 -0
- package/dist/create-DdggkF04.cjs +69 -0
- package/dist/html-generator-BCDtYcGs.mjs +16 -0
- package/dist/{html-generator-D2BDzLED.mjs.map → html-generator-BCDtYcGs.mjs.map} +1 -1
- package/dist/html-generator-DFwMRWN3.cjs +16 -0
- package/dist/index.cjs +9 -11
- package/dist/index.d.cts +10 -99
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +10 -99
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +7 -9
- package/dist/mcp-proxy.cjs +40 -161
- package/dist/mcp-proxy.d.cts.map +1 -1
- package/dist/mcp-proxy.d.mts.map +1 -1
- package/dist/mcp-proxy.mjs +40 -161
- package/dist/mcp-proxy.mjs.map +1 -1
- package/dist/{public-tools-BFs_7U_Z.cjs → public-tools-Bou25cki.cjs} +153 -5
- package/dist/{public-tools-BjqZGGAC.mjs → public-tools-CpOLkME5.mjs} +152 -4
- package/dist/public-tools-CpOLkME5.mjs.map +1 -0
- package/dist/{schema-v5cwychf.mjs → schema-B0OuHW_l.mjs} +63 -4
- package/dist/schema-B0OuHW_l.mjs.map +1 -0
- package/dist/{schema-DepyuUEP.cjs → schema-CtFWYoJz.cjs} +72 -7
- package/dist/{tool-visibility-DZBAP62b.cjs → tool-visibility-C8F9Yoxy.cjs} +1 -2
- package/dist/{tool-visibility-C0ALejXI.mjs → tool-visibility-CXbwfKhv.mjs} +2 -3
- package/dist/tool-visibility-CXbwfKhv.mjs.map +1 -0
- package/dist/{tools-lPY6k-vJ.cjs → tools-BHfphgy9.cjs} +4 -4
- package/dist/{tools-BKLnlBG1.mjs → tools-BRQAPF2R.mjs} +5 -5
- package/dist/tools-BRQAPF2R.mjs.map +1 -0
- package/dist/{topup-server-rqI7bqem.mjs → topup-server-BLdF1SFQ.mjs} +2 -2
- package/dist/topup-server-BLdF1SFQ.mjs.map +1 -0
- package/dist/{topup-server-DAqmAuu1.cjs → topup-server-YN3iHrHW.cjs} +1 -1
- package/dist/{update-CJUfGCxs.mjs → update-MsoEFbhn.mjs} +2 -36
- package/dist/{update-CJUfGCxs.mjs.map → update-MsoEFbhn.mjs.map} +1 -1
- package/dist/{update-BJoXYucO.cjs → update-RKd0UW90.cjs} +0 -35
- package/dist/{wallet-BEvHrHi3.cjs → wallet-B3hAr70M.cjs} +3 -3
- package/dist/{wallet-fMbhvKXT.mjs → wallet-COcm4oIb.mjs} +4 -4
- package/dist/wallet-COcm4oIb.mjs.map +1 -0
- package/docs/architecture.md +18 -49
- package/docs/contributing.md +0 -3
- package/docs/development.md +3 -5
- package/docs/graph-tools.md +7 -32
- package/docs/mcp-proxy.md +32 -47
- package/docs/stability.md +0 -12
- package/package.json +3 -4
- package/skills/chain-insights-address-risk/SKILL.md +0 -1
- package/dist/app-BHRl5oDo.cjs +0 -145
- package/dist/app-BeZyCVuz.mjs +0 -140
- package/dist/app-BeZyCVuz.mjs.map +0 -1
- package/dist/artifact-server-B8WKXtXr.cjs +0 -47
- package/dist/artifact-server-C1fETWsc.mjs +0 -49
- package/dist/artifact-server-C1fETWsc.mjs.map +0 -1
- package/dist/client-D4aM4bzP.mjs.map +0 -1
- package/dist/graph-normalizer-B2Q2lgVy.cjs +0 -130
- package/dist/graph-normalizer-BA3Rbd6l.mjs +0 -127
- package/dist/graph-normalizer-BA3Rbd6l.mjs.map +0 -1
- package/dist/graph-reports-B6yoYbPq.mjs +0 -63
- package/dist/graph-reports-B6yoYbPq.mjs.map +0 -1
- package/dist/graph-reports-_gqzxvvs.cjs +0 -64
- package/dist/html-generator-B9f_GIi2.cjs +0 -86
- package/dist/html-generator-D2BDzLED.mjs +0 -70
- package/dist/init-C3AVZHFb.cjs +0 -319
- package/dist/init-CO-PRYhT.mjs +0 -319
- package/dist/init-CO-PRYhT.mjs.map +0 -1
- package/dist/limits-D3Mn-gig.mjs +0 -94
- package/dist/limits-D3Mn-gig.mjs.map +0 -1
- package/dist/limits-km3pmmL3.cjs +0 -115
- package/dist/mcp-endpoint-Bd3SvCkg.mjs +0 -41
- package/dist/mcp-endpoint-Bd3SvCkg.mjs.map +0 -1
- package/dist/mcp-endpoint-DdIVQKW5.cjs +0 -56
- package/dist/output-root-BK4pdjyz.mjs +0 -36
- package/dist/output-root-BK4pdjyz.mjs.map +0 -1
- package/dist/output-root-BewoQaTx.cjs +0 -46
- package/dist/public-tools-BjqZGGAC.mjs.map +0 -1
- package/dist/resolve-port-CbaEoODz.cjs +0 -18
- package/dist/resolve-port-DxPK7Ipx.mjs +0 -20
- package/dist/resolve-port-DxPK7Ipx.mjs.map +0 -1
- package/dist/schema-v5cwychf.mjs.map +0 -1
- package/dist/server-BDmHAF1w.mjs +0 -46
- package/dist/server-BDmHAF1w.mjs.map +0 -1
- package/dist/server-BjprY9Ef.cjs +0 -55
- package/dist/templates/graph.html +0 -1450
- package/dist/tool-visibility-C0ALejXI.mjs.map +0 -1
- package/dist/tools-BKLnlBG1.mjs.map +0 -1
- package/dist/topup-server-rqI7bqem.mjs.map +0 -1
- package/dist/viz-BJ_kyRjI.cjs +0 -217
- package/dist/viz-Uh_EF-qB.mjs +0 -206
- package/dist/viz-Uh_EF-qB.mjs.map +0 -1
- package/dist/wallet-fMbhvKXT.mjs.map +0 -1
- package/docs/images/graph-mcp-iframe.png +0 -0
- package/docs/images/graph-visualization.png +0 -0
- package/docs/images/quickstart-demo.svg +0 -1
- package/docs/investigation-workspaces.md +0 -108
- package/docs/search-limits.md +0 -73
package/dist/cli.cjs
CHANGED
|
@@ -23,7 +23,7 @@ function printMcpTextContent(result) {
|
|
|
23
23
|
const __dirname$1 = node_path.default.dirname((0, node_url.fileURLToPath)(require("url").pathToFileURL(__filename).href));
|
|
24
24
|
const installerPath = node_path.default.resolve(__dirname$1, "..", "bin", "install.cjs");
|
|
25
25
|
const program = new commander.Command();
|
|
26
|
-
program.name("
|
|
26
|
+
program.name("cia").description("AML investigation toolkit for blockchain analysis").version(require_version.PACKAGE_INFO.version).option("--claude", "Install Claude Code skills globally to ~/.claude/skills/").option("--codex", "Install Codex skills globally to ~/.codex/skills/ and register MCP").option("--hermes", "Install Hermes skills globally to ~/.hermes/skills/chain-insights/ and register MCP");
|
|
27
27
|
const rawArgs = process.argv.slice(2);
|
|
28
28
|
const installerFlags = rawArgs.filter((a) => a === "--claude" || a === "--codex" || a === "--hermes");
|
|
29
29
|
const wantsHelpOrVersion = rawArgs.some((a) => a === "--help" || a === "-h" || a === "--version" || a === "-V");
|
|
@@ -50,9 +50,9 @@ function runInstaller(flag) {
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
async function withGraphMcpClient(name, fn) {
|
|
53
|
-
const { loadConfig } = await Promise.resolve().then(() => require("./config-
|
|
53
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
54
54
|
const config = await loadConfig();
|
|
55
|
-
const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-
|
|
55
|
+
const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-Ypw9BNbn.cjs")).then((n) => n.client_exports);
|
|
56
56
|
const paymentFetch = await createConfiguredGraphMcpFetch(config);
|
|
57
57
|
const { Client } = await import("@modelcontextprotocol/sdk/client/index.js");
|
|
58
58
|
const { StreamableHTTPClientTransport } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
|
|
@@ -70,13 +70,26 @@ async function withGraphMcpClient(name, fn) {
|
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
async function printNetworkCapabilities(opts) {
|
|
73
|
-
const { loadConfig } = await Promise.resolve().then(() => require("./config-
|
|
74
|
-
const { fetchNetworkCapabilities, formatNetworkCapabilities } = await Promise.resolve().then(() => require("./capabilities-
|
|
73
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
74
|
+
const { fetchNetworkCapabilities, formatNetworkCapabilities } = await Promise.resolve().then(() => require("./capabilities-EMRzwPBU.cjs")).then((n) => n.capabilities_exports);
|
|
75
75
|
const document = await fetchNetworkCapabilities(await loadConfig());
|
|
76
76
|
if (opts.json) console.log(JSON.stringify(document, null, 2));
|
|
77
77
|
else console.log(formatNetworkCapabilities(document));
|
|
78
78
|
}
|
|
79
|
-
|
|
79
|
+
async function printNetworkCapability(name, opts) {
|
|
80
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
81
|
+
const { fetchNetworkCapabilities, findNetworkCapability, formatNetworkCapability } = await Promise.resolve().then(() => require("./capabilities-EMRzwPBU.cjs")).then((n) => n.capabilities_exports);
|
|
82
|
+
const document = await fetchNetworkCapabilities(await loadConfig());
|
|
83
|
+
const network = findNetworkCapability(document, name);
|
|
84
|
+
if (!network) {
|
|
85
|
+
const available = document.networks.map((candidate) => candidate.network).join(", ");
|
|
86
|
+
const suffix = available ? ` Available networks: ${available}.` : "";
|
|
87
|
+
throw new Error(`Network "${name}" is not supported.${suffix} Run \`cia networks\` to list supported networks.`);
|
|
88
|
+
}
|
|
89
|
+
if (opts.json) console.log(JSON.stringify(network, null, 2));
|
|
90
|
+
else console.log(formatNetworkCapability(network));
|
|
91
|
+
}
|
|
92
|
+
program.command("networks").description("List supported graph networks, capability layers, and available tools").option("--json", "Print raw capability JSON").action(async (opts) => {
|
|
80
93
|
try {
|
|
81
94
|
await printNetworkCapabilities(opts);
|
|
82
95
|
} catch (err) {
|
|
@@ -84,37 +97,25 @@ program.command("networks").alias("network").description("List supported graph n
|
|
|
84
97
|
process.exit(1);
|
|
85
98
|
}
|
|
86
99
|
});
|
|
87
|
-
program.command("
|
|
100
|
+
program.command("network").description("Show details for one supported graph network").argument("<name>", "Network identifier or display name (for example: robinhood)").option("--json", "Print raw capability JSON for this network").action(async (name, opts) => {
|
|
88
101
|
try {
|
|
89
|
-
|
|
90
|
-
const workspaceRoot = requireWorkspaceRoot();
|
|
91
|
-
const { loadConfig } = await Promise.resolve().then(() => require("./config-DYiUgdzg.cjs")).then((n) => n.config_exports);
|
|
92
|
-
const { resolveServerPort } = await Promise.resolve().then(() => require("./resolve-port-CbaEoODz.cjs"));
|
|
93
|
-
const config = await loadConfig();
|
|
94
|
-
const port = resolveServerPort(opts.port, config.serverPort);
|
|
95
|
-
const { startServer } = await Promise.resolve().then(() => require("./server-BjprY9Ef.cjs")).then((n) => n.server_exports);
|
|
96
|
-
console.log(`Workspace: ${workspaceRoot}`);
|
|
97
|
-
startServer(port);
|
|
102
|
+
await printNetworkCapability(name, opts);
|
|
98
103
|
} catch (err) {
|
|
99
104
|
console.error(err.message);
|
|
100
105
|
process.exit(1);
|
|
101
106
|
}
|
|
102
107
|
});
|
|
103
108
|
program.command("status").description("Show toolkit status and configuration").action(async () => {
|
|
104
|
-
const { loadConfig } = await Promise.resolve().then(() => require("./config-
|
|
105
|
-
const { findActiveWorkspace, activeDataDir } = await Promise.resolve().then(() => require("./active-Bc13hJIm.cjs")).then((n) => n.active_exports);
|
|
109
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
106
110
|
const config = await loadConfig();
|
|
107
|
-
const workspace = findActiveWorkspace();
|
|
108
111
|
const graphMcpStatus = config.graphMcpMode === "debug" && config.graphMcpAuthToken?.trim() ? "bearer access mode" : `${config.graphMcpMode} mode`;
|
|
109
|
-
console.log("Config: ",
|
|
110
|
-
if (workspace) console.log("Workspace:", workspace.root);
|
|
111
|
-
console.log("Server: ", `http://127.0.0.1:${config.serverPort}`);
|
|
112
|
+
console.log("Config: ", config.dataDir);
|
|
112
113
|
console.log("Chain Insights Graph:", graphMcpStatus);
|
|
113
114
|
console.log("Graph endpoint:", config.graphMcpEndpoint);
|
|
114
115
|
});
|
|
115
116
|
program.command("update").description("Check npmjs for a newer Chain Insights release and update this CLI").option("--check", "Only check for a newer release").option("--dry-run", "Print the update command without running it").action(async (opts) => {
|
|
116
117
|
try {
|
|
117
|
-
const { checkForUpdate, runPackageUpdate } = await Promise.resolve().then(() => require("./update-
|
|
118
|
+
const { checkForUpdate, runPackageUpdate } = await Promise.resolve().then(() => require("./update-RKd0UW90.cjs"));
|
|
118
119
|
const result = await checkForUpdate();
|
|
119
120
|
if (result.error) throw new Error(`Could not check npmjs for updates: ${result.error}`);
|
|
120
121
|
if (!result.updateAvailable || !result.latestVersion) {
|
|
@@ -139,7 +140,7 @@ program.command("update").description("Check npmjs for a newer Chain Insights re
|
|
|
139
140
|
});
|
|
140
141
|
program.command("debug").description("Configure Chain Insights Graph debug mode").addCommand(new commander.Command("on").description("Enable Chain Insights Graph debug mode without x402 payments").requiredOption("--token <token>", "Debug bearer token").option("--endpoint <url>", "Chain Insights Graph endpoint").action(async (opts) => {
|
|
141
142
|
try {
|
|
142
|
-
const { saveConfig } = await Promise.resolve().then(() => require("./config-
|
|
143
|
+
const { saveConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
143
144
|
await saveConfig({
|
|
144
145
|
graphMcpMode: "debug",
|
|
145
146
|
graphMcpAuthToken: opts.token,
|
|
@@ -154,7 +155,7 @@ program.command("debug").description("Configure Chain Insights Graph debug mode"
|
|
|
154
155
|
}
|
|
155
156
|
})).addCommand(new commander.Command("off").description("Disable Chain Insights Graph debug mode and use paid x402 calls").action(async () => {
|
|
156
157
|
try {
|
|
157
|
-
const { saveConfig } = await Promise.resolve().then(() => require("./config-
|
|
158
|
+
const { saveConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
158
159
|
await saveConfig({
|
|
159
160
|
graphMcpMode: "paid",
|
|
160
161
|
graphMcpAuthToken: ""
|
|
@@ -167,7 +168,7 @@ program.command("debug").description("Configure Chain Insights Graph debug mode"
|
|
|
167
168
|
}
|
|
168
169
|
})).addCommand(new commander.Command("status").description("Show Chain Insights Graph payment/debug mode").action(async () => {
|
|
169
170
|
try {
|
|
170
|
-
const { loadConfig } = await Promise.resolve().then(() => require("./config-
|
|
171
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
171
172
|
const config = await loadConfig();
|
|
172
173
|
console.log(`Chain Insights Graph mode: ${config.graphMcpMode}`);
|
|
173
174
|
console.log(`Graph endpoint: ${config.graphMcpEndpoint}`);
|
|
@@ -182,7 +183,7 @@ program.command("access-key").description("Configure Chain Insights Graph test a
|
|
|
182
183
|
try {
|
|
183
184
|
const normalizedKey = key.trim();
|
|
184
185
|
if (!normalizedKey) throw new Error("Test access key is required");
|
|
185
|
-
const { saveConfig } = await Promise.resolve().then(() => require("./config-
|
|
186
|
+
const { saveConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
186
187
|
await saveConfig({
|
|
187
188
|
graphMcpMode: "debug",
|
|
188
189
|
graphMcpAuthToken: normalizedKey,
|
|
@@ -197,7 +198,7 @@ program.command("access-key").description("Configure Chain Insights Graph test a
|
|
|
197
198
|
}
|
|
198
199
|
})).addCommand(new commander.Command("clear").description("Remove the Chain Insights Graph test access key and use paid x402 calls").action(async () => {
|
|
199
200
|
try {
|
|
200
|
-
const { saveConfig } = await Promise.resolve().then(() => require("./config-
|
|
201
|
+
const { saveConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
201
202
|
await saveConfig({
|
|
202
203
|
graphMcpMode: "paid",
|
|
203
204
|
graphMcpAuthToken: ""
|
|
@@ -210,7 +211,7 @@ program.command("access-key").description("Configure Chain Insights Graph test a
|
|
|
210
211
|
}
|
|
211
212
|
})).addCommand(new commander.Command("status").description("Show Chain Insights Graph test access key status").action(async () => {
|
|
212
213
|
try {
|
|
213
|
-
const { loadConfig } = await Promise.resolve().then(() => require("./config-
|
|
214
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
214
215
|
const config = await loadConfig();
|
|
215
216
|
console.log(`Graph endpoint: ${config.graphMcpEndpoint}`);
|
|
216
217
|
console.log(`Access key: ${config.graphMcpAuthToken?.trim() ? "configured" : "not configured"}`);
|
|
@@ -220,22 +221,6 @@ program.command("access-key").description("Configure Chain Insights Graph test a
|
|
|
220
221
|
process.exit(1);
|
|
221
222
|
}
|
|
222
223
|
}));
|
|
223
|
-
program.command("init").description("Initialize an investigation workspace").argument("[dir]", "Workspace directory to initialize", ".").option("--force", "Overwrite existing workspace files").action(async (dir, opts) => {
|
|
224
|
-
try {
|
|
225
|
-
const { initWorkspace } = await Promise.resolve().then(() => require("./init-C3AVZHFb.cjs"));
|
|
226
|
-
const result = await initWorkspace({
|
|
227
|
-
targetDir: dir,
|
|
228
|
-
force: opts.force
|
|
229
|
-
});
|
|
230
|
-
console.log(`Workspace initialized: ${result.workspaceRoot}`);
|
|
231
|
-
console.log(`Files written: ${result.filesWritten.length}`);
|
|
232
|
-
const { maybePromptForUpdate } = await Promise.resolve().then(() => require("./update-BJoXYucO.cjs"));
|
|
233
|
-
await maybePromptForUpdate();
|
|
234
|
-
} catch (err) {
|
|
235
|
-
console.error(err.message);
|
|
236
|
-
process.exit(1);
|
|
237
|
-
}
|
|
238
|
-
});
|
|
239
224
|
program.command("setup").description("Configure external MCP clients").addCommand(new commander.Command("claude-code").alias("claude").description("Install Claude Code skills and register the MCP proxy").action(() => {
|
|
240
225
|
runInstaller("--claude");
|
|
241
226
|
})).addCommand(new commander.Command("codex").description("Install Codex skills and register the MCP proxy").action(() => {
|
|
@@ -244,8 +229,8 @@ program.command("setup").description("Configure external MCP clients").addComman
|
|
|
244
229
|
runInstaller("--hermes");
|
|
245
230
|
}));
|
|
246
231
|
program.command("config").description("Read or write configuration values").addCommand(new commander.Command("get").argument("<key>", "Config key to read").action(async (key) => {
|
|
247
|
-
const { loadConfig } = await Promise.resolve().then(() => require("./config-
|
|
248
|
-
const { CONFIG_KEYS } = await Promise.resolve().then(() => require("./schema-
|
|
232
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
233
|
+
const { CONFIG_KEYS } = await Promise.resolve().then(() => require("./schema-CtFWYoJz.cjs")).then((n) => n.schema_exports);
|
|
249
234
|
if (!CONFIG_KEYS.includes(key)) {
|
|
250
235
|
console.error(`Unknown config key: ${key}`);
|
|
251
236
|
process.exit(1);
|
|
@@ -255,7 +240,7 @@ program.command("config").description("Read or write configuration values").addC
|
|
|
255
240
|
})).addCommand(new commander.Command("set").argument("<key>", "Config key to write").argument("<value>", "Value to set").action(async (key, value) => {
|
|
256
241
|
if (key === "walletPrivateKey") {
|
|
257
242
|
try {
|
|
258
|
-
const { setWalletPrivateKey } = await Promise.resolve().then(() => require("./wallet-
|
|
243
|
+
const { setWalletPrivateKey } = await Promise.resolve().then(() => require("./wallet-B3hAr70M.cjs")).then((n) => n.wallet_exports);
|
|
259
244
|
const address = await setWalletPrivateKey(value);
|
|
260
245
|
console.log("Wallet private key encrypted and stored in ~/.chain-insights/wallet.json");
|
|
261
246
|
console.log(`Wallet address: ${address}`);
|
|
@@ -265,8 +250,8 @@ program.command("config").description("Read or write configuration values").addC
|
|
|
265
250
|
}
|
|
266
251
|
return;
|
|
267
252
|
}
|
|
268
|
-
const { loadConfig, saveConfig } = await Promise.resolve().then(() => require("./config-
|
|
269
|
-
const { CONFIG_KEYS, DEFAULT_CONFIG } = await Promise.resolve().then(() => require("./schema-
|
|
253
|
+
const { loadConfig, saveConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
254
|
+
const { CONFIG_KEYS, DEFAULT_CONFIG } = await Promise.resolve().then(() => require("./schema-CtFWYoJz.cjs")).then((n) => n.schema_exports);
|
|
270
255
|
const current = await loadConfig();
|
|
271
256
|
if (!CONFIG_KEYS.includes(key)) {
|
|
272
257
|
console.error(`Unknown config key: ${key}`);
|
|
@@ -279,21 +264,52 @@ program.command("config").description("Read or write configuration values").addC
|
|
|
279
264
|
const displayed = key.toLowerCase().includes("token") ? "[redacted]" : coerced;
|
|
280
265
|
console.log(`Set ${key} = ${displayed}`);
|
|
281
266
|
}));
|
|
282
|
-
program.command("wallet").description("Manage the local Base USDC payment wallet").addCommand(new commander.Command("
|
|
267
|
+
program.command("wallet").description("Manage the local Base USDC payment wallet").addCommand(new commander.Command("create").description("Generate a new local Base payment wallet").action(async () => {
|
|
283
268
|
try {
|
|
284
|
-
const { setWalletPrivateKey,
|
|
269
|
+
const { isWalletConfigured, setWalletPrivateKey, walletPath } = await Promise.resolve().then(() => require("./wallet-B3hAr70M.cjs")).then((n) => n.wallet_exports);
|
|
270
|
+
const { createInterface } = await import("node:readline/promises");
|
|
271
|
+
const { formatWalletBackupWarning, generateWalletPrivateKey, isWalletBackupConfirmed } = await Promise.resolve().then(() => require("./create-DdggkF04.cjs")).then((n) => n.create_exports);
|
|
272
|
+
if (await isWalletConfigured()) throw new Error("A payment wallet already exists. Run `cia wallet address` to view it or use `cia wallet import <private-key> --force` to replace it.");
|
|
273
|
+
const privateKey = generateWalletPrivateKey();
|
|
274
|
+
const color = process.stderr.isTTY === true && process.env["NO_COLOR"] === void 0;
|
|
275
|
+
process.stderr.write(`${formatWalletBackupWarning(privateKey, { color })}\n`);
|
|
276
|
+
const prompt = createInterface({
|
|
277
|
+
input: process.stdin,
|
|
278
|
+
output: process.stderr
|
|
279
|
+
});
|
|
280
|
+
let answer;
|
|
281
|
+
try {
|
|
282
|
+
answer = await prompt.question("> ");
|
|
283
|
+
} finally {
|
|
284
|
+
prompt.close();
|
|
285
|
+
}
|
|
286
|
+
process.stderr.write("\n");
|
|
287
|
+
if (!isWalletBackupConfirmed(answer)) throw new Error("Wallet creation cancelled. The wallet was not saved.");
|
|
288
|
+
const address = await setWalletPrivateKey(privateKey);
|
|
289
|
+
console.log(`Wallet created: ${address}`);
|
|
290
|
+
console.log(`Encrypted local copy: ${walletPath()}`);
|
|
291
|
+
console.log("Next: cia wallet ready");
|
|
292
|
+
} catch (err) {
|
|
293
|
+
console.error(err.message);
|
|
294
|
+
process.exit(1);
|
|
295
|
+
}
|
|
296
|
+
})).addCommand(new commander.Command("import").description("Import a Base payment wallet").argument("<private-key>", "0x-prefixed EVM private key").option("--force", "Replace an existing wallet (the previous key is backed up next to wallet.json)").action(async (privateKey, opts) => {
|
|
297
|
+
try {
|
|
298
|
+
const { setWalletPrivateKey, isWalletConfigured } = await Promise.resolve().then(() => require("./wallet-B3hAr70M.cjs")).then((n) => n.wallet_exports);
|
|
285
299
|
const replacing = opts.force === true && await isWalletConfigured();
|
|
286
300
|
const address = await setWalletPrivateKey(privateKey, { force: opts.force });
|
|
287
301
|
if (replacing) console.log("Previous wallet key backed up next to ~/.chain-insights/wallet.json");
|
|
288
302
|
console.log(`Wallet imported: ${address}`);
|
|
289
|
-
console.log("
|
|
303
|
+
console.log("Keep your original private key backed up securely; it cannot be recovered from the encrypted local copy.");
|
|
304
|
+
console.log("Encrypted local copy: ~/.chain-insights/wallet.json");
|
|
305
|
+
console.log("Next: cia wallet ready");
|
|
290
306
|
} catch (err) {
|
|
291
307
|
console.error(err.message);
|
|
292
308
|
process.exit(1);
|
|
293
309
|
}
|
|
294
310
|
})).addCommand(new commander.Command("address").description("Print the local payment wallet address").action(async () => {
|
|
295
311
|
try {
|
|
296
|
-
const { getWalletAccount } = await Promise.resolve().then(() => require("./tools-
|
|
312
|
+
const { getWalletAccount } = await Promise.resolve().then(() => require("./tools-BHfphgy9.cjs")).then((n) => n.tools_exports);
|
|
297
313
|
const account = await getWalletAccount();
|
|
298
314
|
console.log(account.address);
|
|
299
315
|
} catch (err) {
|
|
@@ -302,7 +318,7 @@ program.command("wallet").description("Manage the local Base USDC payment wallet
|
|
|
302
318
|
}
|
|
303
319
|
})).addCommand(new commander.Command("balance").description("Show the local payment wallet Base USDC balance").action(async () => {
|
|
304
320
|
try {
|
|
305
|
-
const { getWalletBalanceText } = await Promise.resolve().then(() => require("./tools-
|
|
321
|
+
const { getWalletBalanceText } = await Promise.resolve().then(() => require("./tools-BHfphgy9.cjs")).then((n) => n.tools_exports);
|
|
306
322
|
console.log(await getWalletBalanceText());
|
|
307
323
|
} catch (err) {
|
|
308
324
|
console.error(err.message);
|
|
@@ -310,7 +326,7 @@ program.command("wallet").description("Manage the local Base USDC payment wallet
|
|
|
310
326
|
}
|
|
311
327
|
})).addCommand(new commander.Command("ready").description("Check and prepare the wallet for paid Chain Insights Graph calls").option("--check-only", "Only check readiness; do not submit the one-time payment setup").addOption(new commander.Option("--no-approve", "Deprecated alias for --check-only").hideHelp()).option("--payment-usdc <amount>", "USDC setup cap to prepare for paid calls", "1").addOption(new commander.Option("--approval-usdc <amount>", "Deprecated alias for --payment-usdc").hideHelp()).option("--json", "Print machine-readable readiness metadata").action(async (opts) => {
|
|
312
328
|
try {
|
|
313
|
-
const { formatWalletReadiness, parsePaymentApprovalUnits, prepareWalletForPaidCalls } = await Promise.resolve().then(() => require("./tools-
|
|
329
|
+
const { formatWalletReadiness, parsePaymentApprovalUnits, prepareWalletForPaidCalls } = await Promise.resolve().then(() => require("./tools-BHfphgy9.cjs")).then((n) => n.tools_exports);
|
|
314
330
|
const result = await prepareWalletForPaidCalls({
|
|
315
331
|
minimumApprovalUnits: parsePaymentApprovalUnits(opts.paymentUsdc ?? opts.approvalUsdc ?? "1"),
|
|
316
332
|
approve: opts.checkOnly ? false : opts.approve !== false
|
|
@@ -326,8 +342,8 @@ program.command("wallet").description("Manage the local Base USDC payment wallet
|
|
|
326
342
|
}
|
|
327
343
|
})).addCommand(new commander.Command("topup").description("Open a local browser page to top up the payment wallet").option("--no-open", "Print the top-up URL without opening a browser").option("--json", "Print machine-readable top-up metadata").action(async (opts) => {
|
|
328
344
|
try {
|
|
329
|
-
const { buildTopupInfo, getWalletAccount } = await Promise.resolve().then(() => require("./tools-
|
|
330
|
-
const { startTopupServer } = await Promise.resolve().then(() => require("./topup-server-
|
|
345
|
+
const { buildTopupInfo, getWalletAccount } = await Promise.resolve().then(() => require("./tools-BHfphgy9.cjs")).then((n) => n.tools_exports);
|
|
346
|
+
const { startTopupServer } = await Promise.resolve().then(() => require("./topup-server-YN3iHrHW.cjs")).then((n) => n.topup_server_exports);
|
|
331
347
|
const account = await getWalletAccount();
|
|
332
348
|
const url = await startTopupServer(account);
|
|
333
349
|
const info = buildTopupInfo(account.address, url);
|
|
@@ -359,9 +375,9 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
|
|
|
359
375
|
try {
|
|
360
376
|
const { loadSchema, saveSchema } = await Promise.resolve().then(() => require("./schema-cache-n7Gbhvsj.cjs"));
|
|
361
377
|
const { formatToolsTable } = await Promise.resolve().then(() => require("./format-9NLBykEL.cjs"));
|
|
362
|
-
const { visibleRemoteTools } = await Promise.resolve().then(() => require("./tool-visibility-
|
|
363
|
-
const { loadConfig } = await Promise.resolve().then(() => require("./config-
|
|
364
|
-
const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-
|
|
378
|
+
const { visibleRemoteTools } = await Promise.resolve().then(() => require("./tool-visibility-C8F9Yoxy.cjs")).then((n) => n.tool_visibility_exports);
|
|
379
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
380
|
+
const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-Ypw9BNbn.cjs")).then((n) => n.client_exports);
|
|
365
381
|
const config = await loadConfig();
|
|
366
382
|
const graphMcpEndpoint = resolveGraphMcpEndpoint(config);
|
|
367
383
|
let tools = opts.refresh ? null : await loadSchema(graphMcpEndpoint);
|
|
@@ -389,7 +405,7 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
|
|
|
389
405
|
})).addCommand(new commander.Command("aml-address-risk").description("Screen an address for AML risk, exchange behavior, and optional comparison with another address").requiredOption("--address <address>", "Full blockchain address to screen").requiredOption("--network <network>", "Network to query. Run `cia mcp networks` for supported networks.").option("--compare-address <address>", "Optional second address to compare against the screened address").action(async (opts) => {
|
|
390
406
|
try {
|
|
391
407
|
await withGraphMcpClient("chain-insights-cli-aml-address-risk", async (client) => {
|
|
392
|
-
const { addressRisk } = await Promise.resolve().then(() => require("./public-tools-
|
|
408
|
+
const { addressRisk } = await Promise.resolve().then(() => require("./public-tools-Bou25cki.cjs"));
|
|
393
409
|
const result = await addressRisk(client, {
|
|
394
410
|
address: opts.address,
|
|
395
411
|
network: opts.network,
|
|
@@ -404,12 +420,12 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
|
|
|
404
420
|
})).addCommand(new commander.Command("call").description("Call an MCP tool directly (debug)").argument("<tool>", "Tool name to call").argument("[args...]", "Key=value arguments (e.g. address=0x1234... network=robinhood)").action(async (tool, rawArgs) => {
|
|
405
421
|
try {
|
|
406
422
|
const { parseMcpCallArgs } = await Promise.resolve().then(() => require("./call-args-DAiQSDmD.cjs"));
|
|
407
|
-
const { assertPublicMcpToolName, validatePublicMcpToolArguments } = await Promise.resolve().then(() => require("./tool-visibility-
|
|
423
|
+
const { assertPublicMcpToolName, validatePublicMcpToolArguments } = await Promise.resolve().then(() => require("./tool-visibility-C8F9Yoxy.cjs")).then((n) => n.tool_visibility_exports);
|
|
408
424
|
const args = parseMcpCallArgs(rawArgs);
|
|
409
425
|
assertPublicMcpToolName(tool);
|
|
410
426
|
validatePublicMcpToolArguments(tool, args);
|
|
411
427
|
if (tool === "wallet_balance") {
|
|
412
|
-
const { getWalletBalanceText } = await Promise.resolve().then(() => require("./tools-
|
|
428
|
+
const { getWalletBalanceText } = await Promise.resolve().then(() => require("./tools-BHfphgy9.cjs")).then((n) => n.tools_exports);
|
|
413
429
|
console.log(await getWalletBalanceText());
|
|
414
430
|
return;
|
|
415
431
|
}
|
|
@@ -431,13 +447,13 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
|
|
|
431
447
|
} catch (err) {
|
|
432
448
|
const { isMissingUsageStatusToolError, primitiveBackendUsageStatus, usageStatusText } = await Promise.resolve().then(() => require("./usage-status-BdwwgYsu.cjs")).then((n) => n.usage_status_exports);
|
|
433
449
|
if (!isMissingUsageStatusToolError(err)) throw err;
|
|
434
|
-
const { resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-
|
|
450
|
+
const { resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-Ypw9BNbn.cjs")).then((n) => n.client_exports);
|
|
435
451
|
console.log(usageStatusText(primitiveBackendUsageStatus(resolveGraphMcpEndpoint(config))));
|
|
436
452
|
}
|
|
437
453
|
return;
|
|
438
454
|
}
|
|
439
455
|
if (tool === "aml_address_risk") {
|
|
440
|
-
const { addressRisk } = await Promise.resolve().then(() => require("./public-tools-
|
|
456
|
+
const { addressRisk } = await Promise.resolve().then(() => require("./public-tools-Bou25cki.cjs"));
|
|
441
457
|
const result = await addressRisk(client, {
|
|
442
458
|
address: String(args["address"] ?? ""),
|
|
443
459
|
network: String(args["network"] ?? ""),
|
|
@@ -456,32 +472,6 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
|
|
|
456
472
|
process.exit(1);
|
|
457
473
|
}
|
|
458
474
|
}));
|
|
459
|
-
program.command("viz").description("Generate a workspace visualization").argument("[source-id]", "Workspace graph report ID to render").option("--data <file>", "Raw transaction JSON file for ad-hoc visualization").option("-p, --port <number>", "Server port (defaults to the configured serverPort)").action(async (sourceId, opts) => {
|
|
460
|
-
try {
|
|
461
|
-
if (!sourceId && !opts.data) {
|
|
462
|
-
console.error("Provide either a visualization source ID or --data <file.json>");
|
|
463
|
-
process.exit(1);
|
|
464
|
-
}
|
|
465
|
-
const { loadConfig } = await Promise.resolve().then(() => require("./config-DYiUgdzg.cjs")).then((n) => n.config_exports);
|
|
466
|
-
const { resolveServerPort } = await Promise.resolve().then(() => require("./resolve-port-CbaEoODz.cjs"));
|
|
467
|
-
const config = await loadConfig();
|
|
468
|
-
const port = resolveServerPort(opts.port, config.serverPort);
|
|
469
|
-
const { generateVisualization } = await Promise.resolve().then(() => require("./viz-BJ_kyRjI.cjs")).then((n) => n.viz_exports);
|
|
470
|
-
const result = await generateVisualization({
|
|
471
|
-
sourceId,
|
|
472
|
-
dataFile: opts.data
|
|
473
|
-
});
|
|
474
|
-
const { startServer } = await Promise.resolve().then(() => require("./server-BjprY9Ef.cjs")).then((n) => n.server_exports);
|
|
475
|
-
startServer(port);
|
|
476
|
-
const url = `http://127.0.0.1:${port}/viz/${result.vizId}`;
|
|
477
|
-
console.log(`Visualization: ${url}`);
|
|
478
|
-
const open = (await import("open")).default;
|
|
479
|
-
await open(url);
|
|
480
|
-
} catch (err) {
|
|
481
|
-
console.error(err.message);
|
|
482
|
-
process.exit(1);
|
|
483
|
-
}
|
|
484
|
-
});
|
|
485
475
|
program.parseAsync(process.argv).catch((err) => {
|
|
486
476
|
console.error(err.message);
|
|
487
477
|
process.exit(1);
|