@chainalert/cli 0.0.1

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/dist/index.js ADDED
@@ -0,0 +1,159 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ VERSION,
4
+ bold,
5
+ print,
6
+ printError
7
+ } from "./chunk-WPW7UBVR.js";
8
+
9
+ // src/index.ts
10
+ function parseArgs(argv) {
11
+ const command = [];
12
+ const flags = {};
13
+ for (const arg of argv) {
14
+ if (arg.startsWith("--")) {
15
+ const eq = arg.indexOf("=");
16
+ if (eq !== -1) {
17
+ flags[arg.slice(2, eq)] = arg.slice(eq + 1);
18
+ } else {
19
+ flags[arg.slice(2)] = "true";
20
+ }
21
+ } else {
22
+ command.push(arg);
23
+ }
24
+ }
25
+ return { command, flags };
26
+ }
27
+ function printUsage() {
28
+ print(bold("ChainAlert CLI") + ` v${VERSION}
29
+ `);
30
+ print("Usage: chainalert [command] [options]\n");
31
+ print(bold("Commands:"));
32
+ print(" (no command) Start interactive AI chat");
33
+ print(" chat Start interactive AI chat");
34
+ print(" login Authenticate with API key");
35
+ print(" logout Clear stored credentials");
36
+ print(" whoami Show current auth status");
37
+ print(" config set <k> <v> Set config value (api-url, openai-key)");
38
+ print(" config get <k> Get config value");
39
+ print(" health Check API health");
40
+ print("");
41
+ print(" networks list");
42
+ print(" templates list|get <slug>");
43
+ print(" detections list|get|create|update|delete|test");
44
+ print(" alerts list|get|stats");
45
+ print(" events list|get");
46
+ print(" state-changes list");
47
+ print(" channels list|create|test|delete");
48
+ print(" contracts resolve|storage-slots");
49
+ print(" org-contracts list|get|register|traits");
50
+ print(" rpc-configs list|add|test");
51
+ print("");
52
+ print("Flags: --json (raw output), --help, --version");
53
+ }
54
+ async function main() {
55
+ const { command, flags } = parseArgs(process.argv.slice(2));
56
+ if (flags.version) {
57
+ print(VERSION);
58
+ return;
59
+ }
60
+ if (flags.help && command.length === 0) {
61
+ printUsage();
62
+ return;
63
+ }
64
+ const root = command[0];
65
+ const rest = command.slice(1);
66
+ try {
67
+ switch (root) {
68
+ // No command or "chat" -> interactive REPL
69
+ case void 0: {
70
+ const { startRepl } = await import("./repl-Q43IBAFT.js");
71
+ await startRepl();
72
+ return;
73
+ }
74
+ case "chat": {
75
+ const { startRepl } = await import("./repl-Q43IBAFT.js");
76
+ await startRepl();
77
+ return;
78
+ }
79
+ // Auth commands
80
+ case "login":
81
+ case "logout":
82
+ case "whoami": {
83
+ const auth = await import("./auth-6LTJFNU2.js");
84
+ await auth.run([root, ...rest], flags);
85
+ return;
86
+ }
87
+ case "config": {
88
+ const auth = await import("./auth-6LTJFNU2.js");
89
+ await auth.runConfig(rest, flags);
90
+ return;
91
+ }
92
+ // Resource commands
93
+ case "health": {
94
+ const mod = await import("./health-7R5HLRCZ.js");
95
+ await mod.run(rest, flags);
96
+ return;
97
+ }
98
+ case "networks": {
99
+ const mod = await import("./networks-CF2ARYQO.js");
100
+ await mod.run(rest, flags);
101
+ return;
102
+ }
103
+ case "templates": {
104
+ const mod = await import("./templates-LYY2SV42.js");
105
+ await mod.run(rest, flags);
106
+ return;
107
+ }
108
+ case "detections": {
109
+ const mod = await import("./detections-QSMNEXXI.js");
110
+ await mod.run(rest, flags);
111
+ return;
112
+ }
113
+ case "alerts": {
114
+ const mod = await import("./alerts-STXD4TE5.js");
115
+ await mod.run(rest, flags);
116
+ return;
117
+ }
118
+ case "events": {
119
+ const mod = await import("./events-FM7VK5VH.js");
120
+ await mod.run(rest, flags);
121
+ return;
122
+ }
123
+ case "state-changes": {
124
+ const mod = await import("./state-changes-B6BIS4OJ.js");
125
+ await mod.run(rest, flags);
126
+ return;
127
+ }
128
+ case "channels": {
129
+ const mod = await import("./channels-C5JZON37.js");
130
+ await mod.run(rest, flags);
131
+ return;
132
+ }
133
+ case "contracts": {
134
+ const mod = await import("./contracts-J7JYPQXP.js");
135
+ await mod.run(rest, flags);
136
+ return;
137
+ }
138
+ case "org-contracts": {
139
+ const mod = await import("./org-contracts-DM2BTHTO.js");
140
+ await mod.run(rest, flags);
141
+ return;
142
+ }
143
+ case "rpc-configs": {
144
+ const mod = await import("./rpc-configs-P2QCFCDJ.js");
145
+ await mod.run(rest, flags);
146
+ return;
147
+ }
148
+ default:
149
+ printError(`Unknown command: ${root}`);
150
+ print("Run 'chainalert --help' for usage.");
151
+ process.exit(1);
152
+ }
153
+ } catch (err) {
154
+ const msg = err instanceof Error ? err.message : String(err);
155
+ printError(msg);
156
+ process.exit(1);
157
+ }
158
+ }
159
+ main();
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ spinner
4
+ } from "./chunk-CE4DKHAY.js";
5
+ import {
6
+ listNetworks
7
+ } from "./chunk-IC5RERFB.js";
8
+ import "./chunk-K2BGDX7X.js";
9
+ import {
10
+ print,
11
+ printError,
12
+ printJson,
13
+ printTable
14
+ } from "./chunk-WPW7UBVR.js";
15
+
16
+ // src/commands/networks.ts
17
+ async function run(args, flags) {
18
+ const sub = args[0] ?? "list";
19
+ switch (sub) {
20
+ case "list": {
21
+ try {
22
+ spinner.start("Fetching networks...");
23
+ const result = await listNetworks();
24
+ spinner.stop();
25
+ if (flags.json) {
26
+ printJson(result);
27
+ return;
28
+ }
29
+ if (!result.data.length) {
30
+ print("No networks found.");
31
+ return;
32
+ }
33
+ printTable(
34
+ ["ID", "Name", "Slug", "Chain ID", "Active"],
35
+ result.data.map((n) => [
36
+ String(n.id),
37
+ n.name ?? "",
38
+ n.slug ?? "",
39
+ String(n.chainId ?? ""),
40
+ n.active ? "Yes" : "No"
41
+ ])
42
+ );
43
+ } catch (err) {
44
+ spinner.stop();
45
+ printError(err.message ?? "Failed to fetch networks.");
46
+ process.exitCode = 1;
47
+ }
48
+ break;
49
+ }
50
+ default:
51
+ printError(`Unknown subcommand: ${sub}. Use: list`);
52
+ process.exitCode = 1;
53
+ }
54
+ }
55
+ export {
56
+ run
57
+ };
@@ -0,0 +1,175 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ spinner
4
+ } from "./chunk-CE4DKHAY.js";
5
+ import {
6
+ getOrgContract,
7
+ getOrgContractTraits,
8
+ listOrgContracts,
9
+ registerOrgContract
10
+ } from "./chunk-IC5RERFB.js";
11
+ import "./chunk-K2BGDX7X.js";
12
+ import {
13
+ dim,
14
+ print,
15
+ printError,
16
+ printJson,
17
+ printKV,
18
+ printSuccess,
19
+ printTable
20
+ } from "./chunk-WPW7UBVR.js";
21
+
22
+ // src/commands/org-contracts.ts
23
+ async function run(args, flags) {
24
+ const sub = args[0] ?? "list";
25
+ switch (sub) {
26
+ case "list": {
27
+ try {
28
+ spinner.start("Fetching org contracts...");
29
+ const result = await listOrgContracts({
30
+ page: flags.page ? Number(flags.page) : void 0,
31
+ limit: flags.limit ? Number(flags.limit) : void 0
32
+ });
33
+ spinner.stop();
34
+ if (flags.json) {
35
+ printJson(result);
36
+ return;
37
+ }
38
+ if (!result.data.length) {
39
+ print("No org contracts found.");
40
+ return;
41
+ }
42
+ printTable(
43
+ ["ID", "Address", "Network", "Label"],
44
+ result.data.map((c) => [
45
+ String(c.id),
46
+ c.address ?? "",
47
+ c.networkSlug ?? c.networkId ?? "",
48
+ c.label ?? ""
49
+ ])
50
+ );
51
+ if (result.meta) {
52
+ print(dim(`
53
+ Page ${result.meta.page ?? 1} of ${result.meta.totalPages ?? "?"} (${result.meta.total ?? "?"} total)`));
54
+ }
55
+ } catch (err) {
56
+ spinner.stop();
57
+ printError(err.message ?? "Failed to fetch org contracts.");
58
+ process.exitCode = 1;
59
+ }
60
+ break;
61
+ }
62
+ case "get": {
63
+ const id = args[1];
64
+ if (!id) {
65
+ printError("Usage: chainalert org-contracts get <id>");
66
+ process.exitCode = 1;
67
+ return;
68
+ }
69
+ try {
70
+ spinner.start("Fetching org contract...");
71
+ const result = await getOrgContract(id);
72
+ spinner.stop();
73
+ if (flags.json) {
74
+ printJson(result);
75
+ return;
76
+ }
77
+ const c = result.data;
78
+ printKV([
79
+ ["ID", String(c.id)],
80
+ ["Address", c.address ?? ""],
81
+ ["Network", c.networkSlug ?? c.networkId ?? ""],
82
+ ["Label", c.label ?? dim("(none)")],
83
+ ["Name", c.name ?? dim("(unknown)")],
84
+ ["Created", c.createdAt ?? ""]
85
+ ]);
86
+ } catch (err) {
87
+ spinner.stop();
88
+ printError(err.message ?? "Failed to fetch org contract.");
89
+ process.exitCode = 1;
90
+ }
91
+ break;
92
+ }
93
+ case "register": {
94
+ if (!flags.address) {
95
+ printError("--address is required.");
96
+ process.exitCode = 1;
97
+ return;
98
+ }
99
+ if (!flags.network) {
100
+ printError("--network is required.");
101
+ process.exitCode = 1;
102
+ return;
103
+ }
104
+ try {
105
+ spinner.start("Registering org contract...");
106
+ const result = await registerOrgContract({
107
+ address: flags.address,
108
+ networkId: flags.network,
109
+ label: flags.label
110
+ });
111
+ spinner.stop();
112
+ if (flags.json) {
113
+ printJson(result);
114
+ return;
115
+ }
116
+ printSuccess(`Org contract registered: ${result.data.id}`);
117
+ } catch (err) {
118
+ spinner.stop();
119
+ printError(err.message ?? "Failed to register org contract.");
120
+ process.exitCode = 1;
121
+ }
122
+ break;
123
+ }
124
+ case "traits": {
125
+ const id = args[1];
126
+ if (!id) {
127
+ printError("Usage: chainalert org-contracts traits <id>");
128
+ process.exitCode = 1;
129
+ return;
130
+ }
131
+ try {
132
+ spinner.start("Fetching org contract traits...");
133
+ const result = await getOrgContractTraits(id);
134
+ spinner.stop();
135
+ if (flags.json) {
136
+ printJson(result);
137
+ return;
138
+ }
139
+ const traits = result.data;
140
+ if (Array.isArray(traits) && traits.length > 0) {
141
+ for (const trait of traits) {
142
+ printKV([
143
+ ["Trait", trait.name ?? trait.key ?? ""],
144
+ ["Value", trait.value !== void 0 ? String(trait.value) : dim("(none)")]
145
+ ]);
146
+ print("");
147
+ }
148
+ } else if (traits && typeof traits === "object" && !Array.isArray(traits)) {
149
+ const pairs = [];
150
+ for (const [key, value] of Object.entries(traits)) {
151
+ pairs.push([key, String(value)]);
152
+ }
153
+ if (pairs.length > 0) {
154
+ printKV(pairs);
155
+ } else {
156
+ print("No traits found.");
157
+ }
158
+ } else {
159
+ print("No traits found.");
160
+ }
161
+ } catch (err) {
162
+ spinner.stop();
163
+ printError(err.message ?? "Failed to fetch org contract traits.");
164
+ process.exitCode = 1;
165
+ }
166
+ break;
167
+ }
168
+ default:
169
+ printError(`Unknown subcommand: ${sub}. Use: list, get, register, traits`);
170
+ process.exitCode = 1;
171
+ }
172
+ }
173
+ export {
174
+ run
175
+ };