neutron-cli 0.1.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.
Files changed (46) hide show
  1. package/README.md +124 -0
  2. package/dist/client.d.ts +3 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +37 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/commands/auth.d.ts +3 -0
  7. package/dist/commands/auth.d.ts.map +1 -0
  8. package/dist/commands/auth.js +33 -0
  9. package/dist/commands/auth.js.map +1 -0
  10. package/dist/commands/balance.d.ts +3 -0
  11. package/dist/commands/balance.d.ts.map +1 -0
  12. package/dist/commands/balance.js +37 -0
  13. package/dist/commands/balance.js.map +1 -0
  14. package/dist/commands/config.d.ts +3 -0
  15. package/dist/commands/config.d.ts.map +1 -0
  16. package/dist/commands/config.js +136 -0
  17. package/dist/commands/config.js.map +1 -0
  18. package/dist/commands/invoice.d.ts +3 -0
  19. package/dist/commands/invoice.d.ts.map +1 -0
  20. package/dist/commands/invoice.js +39 -0
  21. package/dist/commands/invoice.js.map +1 -0
  22. package/dist/commands/rate.d.ts +3 -0
  23. package/dist/commands/rate.d.ts.map +1 -0
  24. package/dist/commands/rate.js +35 -0
  25. package/dist/commands/rate.js.map +1 -0
  26. package/dist/commands/send.d.ts +3 -0
  27. package/dist/commands/send.d.ts.map +1 -0
  28. package/dist/commands/send.js +39 -0
  29. package/dist/commands/send.js.map +1 -0
  30. package/dist/commands/tx.d.ts +3 -0
  31. package/dist/commands/tx.d.ts.map +1 -0
  32. package/dist/commands/tx.js +67 -0
  33. package/dist/commands/tx.js.map +1 -0
  34. package/dist/commands/webhook.d.ts +3 -0
  35. package/dist/commands/webhook.d.ts.map +1 -0
  36. package/dist/commands/webhook.js +78 -0
  37. package/dist/commands/webhook.js.map +1 -0
  38. package/dist/index.d.ts +3 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +32 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/output.d.ts +8 -0
  43. package/dist/output.d.ts.map +1 -0
  44. package/dist/output.js +21 -0
  45. package/dist/output.js.map +1 -0
  46. package/package.json +32 -0
package/README.md ADDED
@@ -0,0 +1,124 @@
1
+ # neutron-cli
2
+
3
+ CLI for [Neutron](https://neutron.me) Lightning wallet services — for developers and AI agents.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ # Run without installing
9
+ npx neutron-cli --help
10
+
11
+ # Or install globally
12
+ npm install -g neutron-cli
13
+ ```
14
+
15
+ ## Auth
16
+
17
+ Set your credentials as environment variables:
18
+
19
+ ```bash
20
+ export NEUTRON_API_KEY=your_api_key
21
+ export NEUTRON_API_SECRET=your_api_secret
22
+ ```
23
+
24
+ Or create `~/.neutron/config.json`:
25
+
26
+ ```json
27
+ {
28
+ "apiKey": "your_api_key",
29
+ "apiSecret": "your_api_secret"
30
+ }
31
+ ```
32
+
33
+ Get your API key at [portal.neutron.me](https://portal.neutron.me).
34
+
35
+ ## Commands
36
+
37
+ ### Verify credentials
38
+ ```bash
39
+ neutron-cli auth
40
+ neutron-cli auth --pretty
41
+ ```
42
+
43
+ ### Check balances
44
+ ```bash
45
+ neutron-cli balance
46
+ neutron-cli balance --pretty
47
+ ```
48
+
49
+ ### Create a Lightning invoice
50
+ ```bash
51
+ neutron-cli invoice --amount 5000
52
+ neutron-cli invoice --amount 5000 --memo "order #123"
53
+ ```
54
+
55
+ ### Send a payment
56
+ ```bash
57
+ neutron-cli send --to lnbc50u1p... --amount 5000
58
+ ```
59
+
60
+ ### Transactions
61
+ ```bash
62
+ neutron-cli tx get txn_abc123
63
+ neutron-cli tx list
64
+ neutron-cli tx list --limit 20 --from 2026-01-01 --to 2026-03-01
65
+ ```
66
+
67
+ ### Exchange rate
68
+ ```bash
69
+ neutron-cli rate
70
+ neutron-cli rate --currency thb
71
+ ```
72
+
73
+ ### Webhooks
74
+ ```bash
75
+ neutron-cli webhook create --url https://example.com/webhook
76
+ neutron-cli webhook list
77
+ neutron-cli webhook delete wh_abc123
78
+ ```
79
+
80
+ ## Output
81
+
82
+ All commands output JSON by default (machine-readable):
83
+
84
+ ```json
85
+ {"ok":true,"data":{...}}
86
+ ```
87
+
88
+ Add `--pretty` for human-readable output:
89
+
90
+ ```bash
91
+ neutron-cli balance --pretty
92
+ # ✅ Wallets
93
+ # BTC 50,000 sats (Main)
94
+ ```
95
+
96
+ Errors go to stderr with exit code 1:
97
+
98
+ ```json
99
+ {"error":"Missing credentials","code":"AUTH_MISSING"}
100
+ ```
101
+
102
+ ## For AI Agents
103
+
104
+ Any AI agent with bash/exec access can use Neutron immediately:
105
+
106
+ ```bash
107
+ # Set credentials once
108
+ export NEUTRON_API_KEY=...
109
+ export NEUTRON_API_SECRET=...
110
+
111
+ # Then use in any bash tool
112
+ neutron-cli invoice --amount 1000 --memo "agent payment"
113
+ neutron-cli tx list --limit 5
114
+ neutron-cli rate --currency usd
115
+ ```
116
+
117
+ No MCP setup required. Works with Claude Code, Codex, and any agent that can run shell commands.
118
+
119
+ ## Links
120
+
121
+ - Docs: [docs.neutron.me](https://docs.neutron.me)
122
+ - Portal: [portal.neutron.me](https://portal.neutron.me)
123
+ - MCP package: [neutron-mcp](https://npmjs.com/package/neutron-mcp)
124
+ - SDK: [neutron-sdk](https://npmjs.com/package/neutron-sdk)
@@ -0,0 +1,3 @@
1
+ import { Neutron } from "neutron-sdk";
2
+ export declare function getClient(): Neutron;
3
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAiCtC,wBAAgB,SAAS,IAAI,OAAO,CAMnC"}
package/dist/client.js ADDED
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getClient = getClient;
4
+ const fs_1 = require("fs");
5
+ const os_1 = require("os");
6
+ const path_1 = require("path");
7
+ const neutron_sdk_1 = require("neutron-sdk");
8
+ const output_js_1 = require("./output.js");
9
+ function loadConfig() {
10
+ // 1. Env vars
11
+ const apiKey = process.env.NEUTRON_API_KEY;
12
+ const apiSecret = process.env.NEUTRON_API_SECRET;
13
+ if (apiKey && apiSecret)
14
+ return { apiKey, apiSecret };
15
+ // 2. ~/.neutron/config.json
16
+ try {
17
+ const cfgPath = (0, path_1.join)((0, os_1.homedir)(), ".neutron", "config.json");
18
+ const raw = (0, fs_1.readFileSync)(cfgPath, "utf8");
19
+ const cfg = JSON.parse(raw);
20
+ if (cfg.apiKey && cfg.apiSecret)
21
+ return cfg;
22
+ }
23
+ catch {
24
+ // file not found or malformed — fall through
25
+ }
26
+ (0, output_js_1.fail)("Missing credentials. Set NEUTRON_API_KEY and NEUTRON_API_SECRET env vars, " +
27
+ "or create ~/.neutron/config.json with { \"apiKey\": \"...\", \"apiSecret\": \"...\" }", "AUTH_MISSING");
28
+ }
29
+ let _client = null;
30
+ function getClient() {
31
+ if (!_client) {
32
+ const cfg = loadConfig();
33
+ _client = new neutron_sdk_1.Neutron({ apiKey: cfg.apiKey, apiSecret: cfg.apiSecret });
34
+ }
35
+ return _client;
36
+ }
37
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;AAoCA,8BAMC;AA1CD,2BAAkC;AAClC,2BAA6B;AAC7B,+BAA4B;AAC5B,6CAAsC;AACtC,2CAAmC;AAOnC,SAAS,UAAU;IACjB,cAAc;IACd,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACjD,IAAI,MAAM,IAAI,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAEtD,4BAA4B;IAC5B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAA,iBAAY,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;QAC/C,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS;YAAE,OAAO,GAAa,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;IAED,IAAA,gBAAI,EACF,4EAA4E;QAC1E,uFAAuF,EACzF,cAAc,CACf,CAAC;AACJ,CAAC;AAED,IAAI,OAAO,GAAmB,IAAI,CAAC;AAEnC,SAAgB,SAAS;IACvB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;QACzB,OAAO,GAAG,IAAI,qBAAO,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerAuth(program: Command): void;
3
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwBnD"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerAuth = registerAuth;
4
+ const client_js_1 = require("../client.js");
5
+ const output_js_1 = require("../output.js");
6
+ function registerAuth(program) {
7
+ program
8
+ .command("auth")
9
+ .description("Verify credentials and print account info")
10
+ .option("--pretty", "Human-readable output")
11
+ .action(async (opts) => {
12
+ try {
13
+ const client = (0, client_js_1.getClient)();
14
+ const account = await client.account.get();
15
+ if ((0, output_js_1.isPretty)(opts)) {
16
+ (0, output_js_1.pretty)([
17
+ "✅ Authenticated",
18
+ ` Account ID: ${account.accountId ?? account.id ?? "—"}`,
19
+ ` Name: ${account.displayName ?? account.name ?? "—"}`,
20
+ ` Status: ${account.status ?? "—"}`,
21
+ ` Country: ${account.country ?? "—"}`,
22
+ ]);
23
+ }
24
+ else {
25
+ (0, output_js_1.ok)(account);
26
+ }
27
+ }
28
+ catch (e) {
29
+ (0, output_js_1.fail)(e?.message ?? "Auth check failed", "AUTH_ERROR");
30
+ }
31
+ });
32
+ }
33
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":";;AAIA,oCAwBC;AA3BD,4CAAyC;AACzC,4CAA0D;AAE1D,SAAgB,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,UAAU,EAAE,uBAAuB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,qBAAS,GAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAC3C,IAAI,IAAA,oBAAQ,EAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,IAAA,kBAAM,EAAC;oBACL,iBAAiB;oBACjB,mBAAoB,OAAe,CAAC,SAAS,IAAK,OAAe,CAAC,EAAE,IAAI,GAAG,EAAE;oBAC7E,mBAAoB,OAAe,CAAC,WAAW,IAAK,OAAe,CAAC,IAAI,IAAI,GAAG,EAAE;oBACjF,mBAAoB,OAAe,CAAC,MAAM,IAAI,GAAG,EAAE;oBACnD,mBAAoB,OAAe,CAAC,OAAO,IAAI,GAAG,EAAE;iBACrD,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAA,cAAE,EAAC,OAAO,CAAC,CAAC;YACd,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,IAAA,gBAAI,EAAC,CAAC,EAAE,OAAO,IAAI,mBAAmB,EAAE,YAAY,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerBalance(program: Command): void;
3
+ //# sourceMappingURL=balance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6BtD"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerBalance = registerBalance;
4
+ const client_js_1 = require("../client.js");
5
+ const output_js_1 = require("../output.js");
6
+ function registerBalance(program) {
7
+ program
8
+ .command("balance")
9
+ .description("List all wallets and balances")
10
+ .option("--pretty", "Human-readable output")
11
+ .action(async (opts) => {
12
+ try {
13
+ const client = (0, client_js_1.getClient)();
14
+ const wallets = await client.account.wallets();
15
+ if ((0, output_js_1.isPretty)(opts)) {
16
+ const lines = ["✅ Wallets"];
17
+ for (const w of wallets) {
18
+ const ccy = w.ccy ?? w.currency ?? "?";
19
+ const bal = w.balance ?? w.amount ?? 0;
20
+ const label = w.label ?? w.name ?? "";
21
+ const display = ccy === "BTC"
22
+ ? `${Number(bal * 1e8).toLocaleString()} sats`
23
+ : `${ccy} ${Number(bal).toLocaleString()}`;
24
+ lines.push(` ${ccy.padEnd(6)} ${display.padEnd(20)} ${label}`);
25
+ }
26
+ (0, output_js_1.pretty)(lines);
27
+ }
28
+ else {
29
+ (0, output_js_1.ok)({ wallets });
30
+ }
31
+ }
32
+ catch (e) {
33
+ (0, output_js_1.fail)(e?.message ?? "Failed to fetch balance", "BALANCE_ERROR");
34
+ }
35
+ });
36
+ }
37
+ //# sourceMappingURL=balance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":";;AAIA,0CA6BC;AAhCD,4CAAyC;AACzC,4CAA0D;AAE1D,SAAgB,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,UAAU,EAAE,uBAAuB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,qBAAS,GAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC/C,IAAI,IAAA,oBAAQ,EAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC;gBAC5B,KAAK,MAAM,CAAC,IAAI,OAAgB,EAAE,CAAC;oBACjC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC;oBACvC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;oBACtC,MAAM,OAAO,GACX,GAAG,KAAK,KAAK;wBACX,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,cAAc,EAAE,OAAO;wBAC9C,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC/C,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;gBAClE,CAAC;gBACD,IAAA,kBAAM,EAAC,KAAK,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,IAAA,cAAE,EAAC,EAAE,OAAO,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,IAAA,gBAAI,EAAC,CAAC,EAAE,OAAO,IAAI,yBAAyB,EAAE,eAAe,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerConfig(program: Command): void;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuCpC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8GrD"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerConfig = registerConfig;
4
+ const fs_1 = require("fs");
5
+ const os_1 = require("os");
6
+ const path_1 = require("path");
7
+ const output_js_1 = require("../output.js");
8
+ const neutron_sdk_1 = require("neutron-sdk");
9
+ const CONFIG_DIR = (0, path_1.join)((0, os_1.homedir)(), ".neutron");
10
+ const CONFIG_PATH = (0, path_1.join)(CONFIG_DIR, "config.json");
11
+ function maskSecret(secret) {
12
+ if (secret.length <= 8)
13
+ return "****";
14
+ return secret.slice(0, 4) + "****" + secret.slice(-4);
15
+ }
16
+ function loadConfigFile() {
17
+ try {
18
+ if (!(0, fs_1.existsSync)(CONFIG_PATH))
19
+ return null;
20
+ const raw = (0, fs_1.readFileSync)(CONFIG_PATH, "utf8");
21
+ const cfg = JSON.parse(raw);
22
+ if (cfg.apiKey && cfg.apiSecret)
23
+ return cfg;
24
+ return null;
25
+ }
26
+ catch {
27
+ return null;
28
+ }
29
+ }
30
+ function saveConfigFile(cfg) {
31
+ if (!(0, fs_1.existsSync)(CONFIG_DIR)) {
32
+ (0, fs_1.mkdirSync)(CONFIG_DIR, { recursive: true });
33
+ }
34
+ (0, fs_1.writeFileSync)(CONFIG_PATH, JSON.stringify(cfg, null, 2), "utf8");
35
+ }
36
+ function registerConfig(program) {
37
+ const config = program.command("config").description("Manage CLI configuration");
38
+ config
39
+ .command("init")
40
+ .description("Initialize config from env vars or interactive input")
41
+ .option("--api-key <key>", "API key (or set NEUTRON_API_KEY env)")
42
+ .option("--api-secret <secret>", "API secret (or set NEUTRON_API_SECRET env)")
43
+ .option("--pretty", "Human-readable output")
44
+ .action(async (opts) => {
45
+ try {
46
+ const apiKey = opts.apiKey ?? process.env.NEUTRON_API_KEY;
47
+ const apiSecret = opts.apiSecret ?? process.env.NEUTRON_API_SECRET;
48
+ if (!apiKey || !apiSecret) {
49
+ (0, output_js_1.fail)("Missing credentials. Provide --api-key and --api-secret, or set NEUTRON_API_KEY and NEUTRON_API_SECRET env vars.", "CONFIG_MISSING");
50
+ }
51
+ saveConfigFile({ apiKey, apiSecret });
52
+ if ((0, output_js_1.isPretty)(opts)) {
53
+ (0, output_js_1.pretty)([
54
+ "✅ Config initialized",
55
+ ` Path: ${CONFIG_PATH}`,
56
+ ` API Key: ${maskSecret(apiKey)}`,
57
+ ` API Secret: ${maskSecret(apiSecret)}`,
58
+ ]);
59
+ }
60
+ else {
61
+ (0, output_js_1.ok)({ path: CONFIG_PATH, apiKey: maskSecret(apiKey) });
62
+ }
63
+ }
64
+ catch (e) {
65
+ (0, output_js_1.fail)(e?.message ?? "Failed to init config", "CONFIG_INIT_ERROR");
66
+ }
67
+ });
68
+ config
69
+ .command("show")
70
+ .description("Show current config (masked)")
71
+ .option("--pretty", "Human-readable output")
72
+ .action(async (opts) => {
73
+ try {
74
+ const cfg = loadConfigFile();
75
+ const envKey = process.env.NEUTRON_API_KEY;
76
+ const envSecret = process.env.NEUTRON_API_SECRET;
77
+ const source = envKey && envSecret ? "env" : cfg ? "file" : "none";
78
+ if (source === "none") {
79
+ (0, output_js_1.fail)("No config found. Run `neutron-cli config init` first.", "CONFIG_NOT_FOUND");
80
+ }
81
+ const displayKey = envKey ?? cfg?.apiKey ?? "";
82
+ const displaySecret = envSecret ?? cfg?.apiSecret ?? "";
83
+ if ((0, output_js_1.isPretty)(opts)) {
84
+ (0, output_js_1.pretty)([
85
+ "✅ Current Config",
86
+ ` Source: ${source === "env" ? "Environment variables" : `~/.neutron/config.json`}`,
87
+ ` API Key: ${maskSecret(displayKey)}`,
88
+ ` API Secret: ${maskSecret(displaySecret)}`,
89
+ ]);
90
+ }
91
+ else {
92
+ (0, output_js_1.ok)({
93
+ source,
94
+ apiKey: maskSecret(displayKey),
95
+ configPath: source === "file" ? CONFIG_PATH : null,
96
+ });
97
+ }
98
+ }
99
+ catch (e) {
100
+ (0, output_js_1.fail)(e?.message ?? "Failed to show config", "CONFIG_SHOW_ERROR");
101
+ }
102
+ });
103
+ config
104
+ .command("test")
105
+ .description("Test credentials by calling auth endpoint")
106
+ .option("--pretty", "Human-readable output")
107
+ .action(async (opts) => {
108
+ try {
109
+ const envKey = process.env.NEUTRON_API_KEY;
110
+ const envSecret = process.env.NEUTRON_API_SECRET;
111
+ const cfg = loadConfigFile();
112
+ const apiKey = envKey ?? cfg?.apiKey;
113
+ const apiSecret = envSecret ?? cfg?.apiSecret;
114
+ if (!apiKey || !apiSecret) {
115
+ (0, output_js_1.fail)("No credentials found. Run `neutron-cli config init` first.", "CONFIG_NOT_FOUND");
116
+ }
117
+ const client = new neutron_sdk_1.Neutron({ apiKey, apiSecret });
118
+ const account = await client.account.get();
119
+ if ((0, output_js_1.isPretty)(opts)) {
120
+ (0, output_js_1.pretty)([
121
+ "✅ Credentials valid",
122
+ ` Account ID: ${account.accountId ?? account.id ?? "—"}`,
123
+ ` Name: ${account.displayName ?? account.name ?? "—"}`,
124
+ ` Status: ${account.status ?? "—"}`,
125
+ ]);
126
+ }
127
+ else {
128
+ (0, output_js_1.ok)({ valid: true, accountId: account.accountId ?? account.id });
129
+ }
130
+ }
131
+ catch (e) {
132
+ (0, output_js_1.fail)(e?.message ?? "Credential test failed", "CONFIG_TEST_ERROR");
133
+ }
134
+ });
135
+ }
136
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerInvoice(program: Command): void;
3
+ //# sourceMappingURL=invoice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice.d.ts","sourceRoot":"","sources":["../../src/commands/invoice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+BtD"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerInvoice = registerInvoice;
4
+ const client_js_1 = require("../client.js");
5
+ const output_js_1 = require("../output.js");
6
+ function registerInvoice(program) {
7
+ program
8
+ .command("invoice")
9
+ .description("Create a Lightning invoice")
10
+ .requiredOption("--amount <sats>", "Amount in satoshis")
11
+ .option("--memo <text>", "Payment memo/description")
12
+ .option("--currency <currency>", "Currency (btc, usd, etc)", "btc")
13
+ .option("--pretty", "Human-readable output")
14
+ .action(async (opts) => {
15
+ try {
16
+ const client = (0, client_js_1.getClient)();
17
+ const result = await client.lightning.createInvoice({
18
+ amountSats: Number(opts.amount),
19
+ memo: opts.memo ?? "",
20
+ });
21
+ if ((0, output_js_1.isPretty)(opts)) {
22
+ (0, output_js_1.pretty)([
23
+ "✅ Invoice Created",
24
+ ` ID: ${result.txnId ?? result.id ?? "—"}`,
25
+ ` Amount: ${Number(opts.amount).toLocaleString()} sats`,
26
+ ` Invoice: ${(result.paymentRequest ?? result.invoice ?? "—").slice(0, 60)}...`,
27
+ ` Expires: ${result.expiresAt ?? result.expires_at ?? "—"}`,
28
+ ]);
29
+ }
30
+ else {
31
+ (0, output_js_1.ok)(result);
32
+ }
33
+ }
34
+ catch (e) {
35
+ (0, output_js_1.fail)(e?.message ?? "Failed to create invoice", "INVOICE_ERROR");
36
+ }
37
+ });
38
+ }
39
+ //# sourceMappingURL=invoice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice.js","sourceRoot":"","sources":["../../src/commands/invoice.ts"],"names":[],"mappings":";;AAIA,0CA+BC;AAlCD,4CAAyC;AACzC,4CAA0D;AAE1D,SAAgB,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,4BAA4B,CAAC;SACzC,cAAc,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;SACvD,MAAM,CAAC,eAAe,EAAE,0BAA0B,CAAC;SACnD,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,EAAE,KAAK,CAAC;SAClE,MAAM,CAAC,UAAU,EAAE,uBAAuB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,qBAAS,GAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC;gBAClD,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC/B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;aACtB,CAAQ,CAAC;YAEV,IAAI,IAAA,oBAAQ,EAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,IAAA,kBAAM,EAAC;oBACL,mBAAmB;oBACnB,iBAAiB,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,EAAE,IAAI,GAAG,EAAE;oBACnD,iBAAiB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,OAAO;oBAC5D,iBAAiB,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK;oBACnF,iBAAiB,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,IAAI,GAAG,EAAE;iBAChE,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAA,cAAE,EAAC,MAAM,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,IAAA,gBAAI,EAAC,CAAC,EAAE,OAAO,IAAI,0BAA0B,EAAE,eAAe,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerRate(program: Command): void;
3
+ //# sourceMappingURL=rate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate.d.ts","sourceRoot":"","sources":["../../src/commands/rate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0BnD"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerRate = registerRate;
4
+ const client_js_1 = require("../client.js");
5
+ const output_js_1 = require("../output.js");
6
+ function registerRate(program) {
7
+ program
8
+ .command("rate")
9
+ .description("Get BTC exchange rate")
10
+ .option("--currency <currency>", "Fiat currency code (usd, thb, sgd, etc)", "usd")
11
+ .option("--pretty", "Human-readable output")
12
+ .action(async (opts) => {
13
+ try {
14
+ const client = (0, client_js_1.getClient)();
15
+ const result = await client.rates.get();
16
+ const pair = `BTC${opts.currency.toUpperCase()}`;
17
+ const rate = result[pair] ?? result[pair.toLowerCase()] ?? null;
18
+ if ((0, output_js_1.isPretty)(opts)) {
19
+ (0, output_js_1.pretty)([
20
+ `✅ BTC/${opts.currency.toUpperCase()} Rate`,
21
+ rate != null
22
+ ? ` Rate: ${Number(rate).toLocaleString()} ${opts.currency.toUpperCase()} per BTC`
23
+ : ` Available pairs: ${Object.keys(result).join(", ")}`,
24
+ ]);
25
+ }
26
+ else {
27
+ (0, output_js_1.ok)({ pair, rate, all: result });
28
+ }
29
+ }
30
+ catch (e) {
31
+ (0, output_js_1.fail)(e?.message ?? "Failed to get rate", "RATE_ERROR");
32
+ }
33
+ });
34
+ }
35
+ //# sourceMappingURL=rate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate.js","sourceRoot":"","sources":["../../src/commands/rate.ts"],"names":[],"mappings":";;AAIA,oCA0BC;AA7BD,4CAAyC;AACzC,4CAA0D;AAE1D,SAAgB,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,uBAAuB,EAAE,yCAAyC,EAAE,KAAK,CAAC;SACjF,MAAM,CAAC,UAAU,EAAE,uBAAuB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,qBAAS,GAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,EAAS,CAAC;YAC/C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC;YAChE,IAAI,IAAA,oBAAQ,EAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,IAAA,kBAAM,EAAC;oBACL,SAAS,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO;oBAC3C,IAAI,IAAI,IAAI;wBACV,CAAC,CAAC,WAAW,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU;wBACnF,CAAC,CAAC,sBAAsB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC3D,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAA,cAAE,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,IAAA,gBAAI,EAAC,CAAC,EAAE,OAAO,IAAI,oBAAoB,EAAE,YAAY,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerSend(program: Command): void;
3
+ //# sourceMappingURL=send.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgCnD"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerSend = registerSend;
4
+ const client_js_1 = require("../client.js");
5
+ const output_js_1 = require("../output.js");
6
+ function registerSend(program) {
7
+ program
8
+ .command("send")
9
+ .description("Send a Lightning payment")
10
+ .requiredOption("--to <invoice>", "Lightning invoice (BOLT11)")
11
+ .requiredOption("--amount <sats>", "Amount in satoshis")
12
+ .option("--currency <currency>", "Source wallet currency (btc)", "btc")
13
+ .option("--pretty", "Human-readable output")
14
+ .action(async (opts) => {
15
+ try {
16
+ const client = (0, client_js_1.getClient)();
17
+ const txn = await client.transactions.create({
18
+ sourceReq: { ccy: opts.currency.toUpperCase(), method: "lightning", amtRequested: Number(opts.amount) },
19
+ destReq: { ccy: "BTC", method: "lightning", reqDetails: { paymentRequest: opts.to } },
20
+ });
21
+ const confirmed = await client.transactions.confirm(txn.txnId ?? txn.id);
22
+ if ((0, output_js_1.isPretty)(opts)) {
23
+ (0, output_js_1.pretty)([
24
+ "✅ Payment Sent",
25
+ ` ID: ${confirmed.txnId ?? confirmed.id ?? "—"}`,
26
+ ` Amount: ${Number(opts.amount).toLocaleString()} sats`,
27
+ ` Status: ${confirmed.txnState ?? confirmed.status ?? "—"}`,
28
+ ]);
29
+ }
30
+ else {
31
+ (0, output_js_1.ok)(confirmed);
32
+ }
33
+ }
34
+ catch (e) {
35
+ (0, output_js_1.fail)(e?.message ?? "Payment failed", "SEND_ERROR");
36
+ }
37
+ });
38
+ }
39
+ //# sourceMappingURL=send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":";;AAIA,oCAgCC;AAnCD,4CAAyC;AACzC,4CAA0D;AAE1D,SAAgB,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0BAA0B,CAAC;SACvC,cAAc,CAAC,gBAAgB,EAAE,4BAA4B,CAAC;SAC9D,cAAc,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;SACvD,MAAM,CAAC,uBAAuB,EAAE,8BAA8B,EAAE,KAAK,CAAC;SACtE,MAAM,CAAC,UAAU,EAAE,uBAAuB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,qBAAS,GAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;gBAC3C,SAAS,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBACvG,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE;aACtF,CAAQ,CAAC;YAEV,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE,CAAQ,CAAC;YAEhF,IAAI,IAAA,oBAAQ,EAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,IAAA,kBAAM,EAAC;oBACL,gBAAgB;oBAChB,cAAc,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,EAAE,IAAI,GAAG,EAAE;oBACtD,cAAc,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,OAAO;oBACzD,cAAc,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,MAAM,IAAI,GAAG,EAAE;iBAC9D,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAA,cAAE,EAAC,SAAS,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,IAAA,gBAAI,EAAC,CAAC,EAAE,OAAO,IAAI,gBAAgB,EAAE,YAAY,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerTx(program: Command): void;
3
+ //# sourceMappingURL=tx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../src/commands/tx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwDjD"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerTx = registerTx;
4
+ const client_js_1 = require("../client.js");
5
+ const output_js_1 = require("../output.js");
6
+ function registerTx(program) {
7
+ const tx = program.command("tx").description("Transaction commands");
8
+ tx.command("get <id>")
9
+ .description("Get a transaction by ID")
10
+ .option("--pretty", "Human-readable output")
11
+ .action(async (id, opts) => {
12
+ try {
13
+ const client = (0, client_js_1.getClient)();
14
+ const result = await client.transactions.get(id);
15
+ if ((0, output_js_1.isPretty)(opts)) {
16
+ (0, output_js_1.pretty)([
17
+ `✅ Transaction ${id}`,
18
+ ` Status: ${result.txnState ?? result.status ?? "—"}`,
19
+ ` Amount: ${result.amount?.toLocaleString() ?? "—"} sats`,
20
+ ` Type: ${result.type ?? "—"}`,
21
+ ` Created: ${result.createdAt ?? result.created_at ?? "—"}`,
22
+ ]);
23
+ }
24
+ else {
25
+ (0, output_js_1.ok)(result);
26
+ }
27
+ }
28
+ catch (e) {
29
+ (0, output_js_1.fail)(e?.message ?? "Failed to get transaction", "TX_GET_ERROR");
30
+ }
31
+ });
32
+ tx.command("list")
33
+ .description("List recent transactions")
34
+ .option("--limit <n>", "Number of results", "10")
35
+ .option("--from <date>", "From date (YYYY-MM-DD)")
36
+ .option("--to <date>", "To date (YYYY-MM-DD)")
37
+ .option("--pretty", "Human-readable output")
38
+ .action(async (opts) => {
39
+ try {
40
+ const client = (0, client_js_1.getClient)();
41
+ const params = { limit: Number(opts.limit) };
42
+ if (opts.from)
43
+ params.fromDate = opts.from;
44
+ if (opts.to)
45
+ params.toDate = opts.to;
46
+ const result = await client.transactions.list(params);
47
+ const txns = result.data ?? result.transactions ?? result ?? [];
48
+ if ((0, output_js_1.isPretty)(opts)) {
49
+ const lines = [`✅ Transactions (${txns.length})`];
50
+ for (const t of txns) {
51
+ const id = (t.txnId ?? t.id ?? "—").slice(0, 20);
52
+ const state = (t.txnState ?? t.status ?? "—").padEnd(12);
53
+ const amt = `${(t.amount ?? 0).toLocaleString()} sats`.padEnd(16);
54
+ lines.push(` ${id} ${state} ${amt} ${t.createdAt ?? ""}`);
55
+ }
56
+ (0, output_js_1.pretty)(lines);
57
+ }
58
+ else {
59
+ (0, output_js_1.ok)({ transactions: txns });
60
+ }
61
+ }
62
+ catch (e) {
63
+ (0, output_js_1.fail)(e?.message ?? "Failed to list transactions", "TX_LIST_ERROR");
64
+ }
65
+ });
66
+ }
67
+ //# sourceMappingURL=tx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx.js","sourceRoot":"","sources":["../../src/commands/tx.ts"],"names":[],"mappings":";;AAIA,gCAwDC;AA3DD,4CAAyC;AACzC,4CAA0D;AAE1D,SAAgB,UAAU,CAAC,OAAgB;IACzC,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAErE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,UAAU,EAAE,uBAAuB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,qBAAS,GAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAQ,CAAC;YACxD,IAAI,IAAA,oBAAQ,EAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,IAAA,kBAAM,EAAC;oBACL,iBAAiB,EAAE,EAAE;oBACrB,eAAe,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE;oBACxD,eAAe,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,GAAG,OAAO;oBAC5D,eAAe,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE;oBACnC,eAAe,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,IAAI,GAAG,EAAE;iBAC9D,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAA,cAAE,EAAC,MAAM,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,IAAA,gBAAI,EAAC,CAAC,EAAE,OAAO,IAAI,2BAA2B,EAAE,cAAc,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,aAAa,EAAE,mBAAmB,EAAE,IAAI,CAAC;SAChD,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;SACjD,MAAM,CAAC,aAAa,EAAE,sBAAsB,CAAC;SAC7C,MAAM,CAAC,UAAU,EAAE,uBAAuB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,qBAAS,GAAE,CAAC;YAC3B,MAAM,MAAM,GAAwB,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;YAC3C,IAAI,IAAI,CAAC,EAAE;gBAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAQ,CAAC;YAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,IAAI,EAAE,CAAC;YAChE,IAAI,IAAA,oBAAQ,EAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,CAAC,mBAAmB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBAClD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBACrB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACjD,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACzD,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAClE,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,GAAG,KAAK,CAAC,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC,CAAC;gBAChE,CAAC;gBACD,IAAA,kBAAM,EAAC,KAAK,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,IAAA,cAAE,EAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,IAAA,gBAAI,EAAC,CAAC,EAAE,OAAO,IAAI,6BAA6B,EAAE,eAAe,CAAC,CAAC;QACrE,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerWebhook(program: Command): void;
3
+ //# sourceMappingURL=webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/commands/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoEtD"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerWebhook = registerWebhook;
4
+ const client_js_1 = require("../client.js");
5
+ const output_js_1 = require("../output.js");
6
+ function registerWebhook(program) {
7
+ const wh = program.command("webhook").description("Webhook management");
8
+ wh.command("create")
9
+ .description("Create a webhook")
10
+ .requiredOption("--url <url>", "Webhook endpoint URL")
11
+ .option("--events <events>", "Comma-separated event types (default: all)", "")
12
+ .option("--pretty", "Human-readable output")
13
+ .action(async (opts) => {
14
+ try {
15
+ const client = (0, client_js_1.getClient)();
16
+ const result = await client.webhooks.create({
17
+ callback: opts.url,
18
+ secret: process.env.NEUTRON_WEBHOOK_SECRET ?? crypto.randomUUID(),
19
+ });
20
+ if ((0, output_js_1.isPretty)(opts)) {
21
+ (0, output_js_1.pretty)([
22
+ "✅ Webhook Created",
23
+ ` ID: ${result.webhookId ?? result.id ?? "—"}`,
24
+ ` URL: ${opts.url}`,
25
+ ` Secret: ${result.secret ?? "(none)"}`,
26
+ ]);
27
+ }
28
+ else {
29
+ (0, output_js_1.ok)(result);
30
+ }
31
+ }
32
+ catch (e) {
33
+ (0, output_js_1.fail)(e?.message ?? "Failed to create webhook", "WEBHOOK_CREATE_ERROR");
34
+ }
35
+ });
36
+ wh.command("list")
37
+ .description("List all webhooks")
38
+ .option("--pretty", "Human-readable output")
39
+ .action(async (opts) => {
40
+ try {
41
+ const client = (0, client_js_1.getClient)();
42
+ const result = await client.webhooks.list();
43
+ const hooks = result.data ?? result.webhooks ?? result ?? [];
44
+ if ((0, output_js_1.isPretty)(opts)) {
45
+ const lines = [`✅ Webhooks (${hooks.length})`];
46
+ for (const h of hooks) {
47
+ lines.push(` ${(h.webhookId ?? h.id ?? "—").padEnd(24)} ${h.url ?? "—"}`);
48
+ }
49
+ (0, output_js_1.pretty)(lines);
50
+ }
51
+ else {
52
+ (0, output_js_1.ok)({ webhooks: hooks });
53
+ }
54
+ }
55
+ catch (e) {
56
+ (0, output_js_1.fail)(e?.message ?? "Failed to list webhooks", "WEBHOOK_LIST_ERROR");
57
+ }
58
+ });
59
+ wh.command("delete <id>")
60
+ .description("Delete a webhook by ID")
61
+ .option("--pretty", "Human-readable output")
62
+ .action(async (id, opts) => {
63
+ try {
64
+ const client = (0, client_js_1.getClient)();
65
+ await client.webhooks.delete(id);
66
+ if ((0, output_js_1.isPretty)(opts)) {
67
+ (0, output_js_1.pretty)([`✅ Webhook ${id} deleted`]);
68
+ }
69
+ else {
70
+ (0, output_js_1.ok)({ deleted: id });
71
+ }
72
+ }
73
+ catch (e) {
74
+ (0, output_js_1.fail)(e?.message ?? "Failed to delete webhook", "WEBHOOK_DELETE_ERROR");
75
+ }
76
+ });
77
+ }
78
+ //# sourceMappingURL=webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/commands/webhook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,32 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const commander_1 = require("commander");
5
+ const auth_js_1 = require("./commands/auth.js");
6
+ const balance_js_1 = require("./commands/balance.js");
7
+ const invoice_js_1 = require("./commands/invoice.js");
8
+ const send_js_1 = require("./commands/send.js");
9
+ const tx_js_1 = require("./commands/tx.js");
10
+ const rate_js_1 = require("./commands/rate.js");
11
+ const webhook_js_1 = require("./commands/webhook.js");
12
+ const config_js_1 = require("./commands/config.js");
13
+ const program = new commander_1.Command();
14
+ program
15
+ .name("neutron-cli")
16
+ .description("CLI for Neutron Lightning wallet — for developers and AI agents")
17
+ .version("0.1.0")
18
+ .option("--json", "Output as JSON (default; explicit flag for agent use)")
19
+ .option("--pretty", "Output as human-readable text");
20
+ (0, config_js_1.registerConfig)(program);
21
+ (0, auth_js_1.registerAuth)(program);
22
+ (0, balance_js_1.registerBalance)(program);
23
+ (0, invoice_js_1.registerInvoice)(program);
24
+ (0, send_js_1.registerSend)(program);
25
+ (0, tx_js_1.registerTx)(program);
26
+ (0, rate_js_1.registerRate)(program);
27
+ (0, webhook_js_1.registerWebhook)(program);
28
+ program.parseAsync(process.argv).catch((e) => {
29
+ process.stderr.write(JSON.stringify({ error: e?.message ?? "Unknown error", code: "FATAL" }) + "\n");
30
+ process.exit(1);
31
+ });
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,gDAAkD;AAClD,sDAAwD;AACxD,sDAAwD;AACxD,gDAAkD;AAClD,4CAA8C;AAC9C,gDAAkD;AAClD,sDAAwD;AACxD,oDAAsD;AAEtD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,iEAAiE,CAAC;KAC9E,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,QAAQ,EAAE,uDAAuD,CAAC;KACzE,MAAM,CAAC,UAAU,EAAE,+BAA+B,CAAC,CAAC;AAEvD,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC;AACxB,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;AACtB,IAAA,4BAAe,EAAC,OAAO,CAAC,CAAC;AACzB,IAAA,4BAAe,EAAC,OAAO,CAAC,CAAC;AACzB,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;AACtB,IAAA,kBAAU,EAAC,OAAO,CAAC,CAAC;AACpB,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;AACtB,IAAA,4BAAe,EAAC,OAAO,CAAC,CAAC;AAEzB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,IAAI,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACrG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** Output helpers — JSON (default) or pretty human-readable */
2
+ export declare function ok(data: unknown): void;
3
+ export declare function fail(message: string, code?: string, exitCode?: number): never;
4
+ export declare function isPretty(opts: {
5
+ pretty?: boolean;
6
+ }): boolean;
7
+ export declare function pretty(lines: string[]): void;
8
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAE/D,wBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAEtC;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,SAAU,EAAE,QAAQ,SAAI,GAAG,KAAK,CAGzE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAE5D;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAE5C"}
package/dist/output.js ADDED
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /** Output helpers — JSON (default) or pretty human-readable */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ok = ok;
5
+ exports.fail = fail;
6
+ exports.isPretty = isPretty;
7
+ exports.pretty = pretty;
8
+ function ok(data) {
9
+ process.stdout.write(JSON.stringify({ ok: true, data }) + "\n");
10
+ }
11
+ function fail(message, code = "ERROR", exitCode = 1) {
12
+ process.stderr.write(JSON.stringify({ error: message, code }) + "\n");
13
+ process.exit(exitCode);
14
+ }
15
+ function isPretty(opts) {
16
+ return !!opts.pretty;
17
+ }
18
+ function pretty(lines) {
19
+ console.log(lines.join("\n"));
20
+ }
21
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":";AAAA,+DAA+D;;AAE/D,gBAEC;AAED,oBAGC;AAED,4BAEC;AAED,wBAEC;AAfD,SAAgB,EAAE,CAAC,IAAa;IAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAClE,CAAC;AAED,SAAgB,IAAI,CAAC,OAAe,EAAE,IAAI,GAAG,OAAO,EAAE,QAAQ,GAAG,CAAC;IAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACtE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED,SAAgB,QAAQ,CAAC,IAA0B;IACjD,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AACvB,CAAC;AAED,SAAgB,MAAM,CAAC,KAAe;IACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "neutron-cli",
3
+ "version": "0.1.0",
4
+ "description": "CLI for Neutron Lightning wallet services — for developers and AI agents",
5
+ "keywords": ["neutron", "lightning", "bitcoin", "cli", "payments"],
6
+ "license": "MIT",
7
+ "bin": {
8
+ "neutron-cli": "./dist/index.js"
9
+ },
10
+ "main": "./dist/index.js",
11
+ "files": ["dist/", "README.md"],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "dev": "tsc --watch"
15
+ },
16
+ "dependencies": {
17
+ "commander": "^12.0.0",
18
+ "neutron-sdk": "file:../neutron-sdk"
19
+ },
20
+ "devDependencies": {
21
+ "typescript": "^5.4.0",
22
+ "@types/node": "^20.0.0"
23
+ },
24
+ "engines": {
25
+ "node": ">=18"
26
+ },
27
+ "homepage": "https://docs.neutron.me",
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "https://github.com/Neutronpay/neutron-cli"
31
+ }
32
+ }