neutron-cli 0.2.0 → 0.3.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/README.md CHANGED
@@ -18,38 +18,32 @@ neutron-cli rate
18
18
 
19
19
  > **Note:** If you just want to try it without installing, use `npx neutron-cli --help`. But for regular use, global install is recommended.
20
20
 
21
- ## Auth
21
+ ## Setup
22
22
 
23
- Set your credentials as environment variables:
23
+ First time you run any command, you'll be prompted for your credentials:
24
24
 
25
- ```bash
26
- export NEUTRON_API_KEY=your_api_key
27
- export NEUTRON_API_SECRET=your_api_secret
28
25
  ```
26
+ ⚡ Welcome to Neutron CLI
27
+ Get your API key at: https://portal.neutron.me
29
28
 
30
- Or create `~/.neutron/config.json`:
29
+ API Key: ****************
30
+ API Secret: ****************
31
31
 
32
- ```json
33
- {
34
- "apiKey": "your_api_key",
35
- "apiSecret": "your_api_secret"
36
- }
32
+ ✅ Credentials saved to ~/.neutron/config.json
37
33
  ```
38
34
 
39
- Get your API key at [portal.neutron.me](https://portal.neutron.me).
35
+ Credentials are stored in `~/.neutron/config.json` with `600` permissions (private to you). You'll never be prompted again.
40
36
 
41
37
  ## Commands
42
38
 
43
39
  ### Verify credentials
44
40
  ```bash
45
41
  neutron-cli auth
46
- neutron-cli auth --pretty
47
42
  ```
48
43
 
49
44
  ### Check balances
50
45
  ```bash
51
46
  neutron-cli balance
52
- neutron-cli balance --pretty
53
47
  ```
54
48
 
55
49
  ### Create a Lightning invoice
@@ -58,11 +52,64 @@ neutron-cli invoice --amount 5000
58
52
  neutron-cli invoice --amount 5000 --memo "order #123"
59
53
  ```
60
54
 
61
- ### Send a payment
55
+ ### Send a payment — auto-detects payment type
62
56
  ```bash
57
+ # Lightning (BOLT11 invoice)
63
58
  neutron-cli send --to lnbc50u1p... --amount 5000
59
+
60
+ # Bitcoin on-chain (auto-detected from address format)
61
+ neutron-cli send --to 1A1zP1eP5QGefi2DMPTfTL5SLmv7Divf... --amount 5000
62
+
63
+ # USDT on TRON (auto-detected from T... address)
64
+ neutron-cli send --to TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE --amount 10 --currency USDT
65
+
66
+ # USDT on ETH (auto-detected from 0x... address)
67
+ neutron-cli send --to 0xAbC123... --amount 10 --currency USDT
64
68
  ```
65
69
 
70
+ > `send` automatically detects the payment type from the destination address — no flags needed:
71
+ > - `lnbc...` → Lightning
72
+ > - `1...`, `3...`, `bc1...` → Bitcoin on-chain
73
+ > - `T...` → USDT on TRON
74
+ > - `0x...` → USDT on Ethereum
75
+
76
+ ### Get deposit addresses
77
+ ```bash
78
+ neutron-cli address btc # Bitcoin on-chain deposit address
79
+ neutron-cli address usdt # USDT on TRON (default)
80
+ neutron-cli address usdt --chain ETH # USDT on Ethereum
81
+ ```
82
+
83
+ ### Swap currencies
84
+ ```bash
85
+ neutron-cli swap --from BTC --to USDT --amount 1000 # BTC → USDT (amount in sats)
86
+ neutron-cli swap --from USDT --to BTC --amount 10 # USDT → BTC
87
+ ```
88
+
89
+ ### Fiat payouts
90
+ ```bash
91
+ # List banks for a country
92
+ neutron-cli fiat institutions --country VN
93
+
94
+ # Send fiat payout (KYC required)
95
+ neutron-cli fiat payout \
96
+ --amount 0.001 \
97
+ --from BTC \
98
+ --to VND \
99
+ --method vnd-instant \
100
+ --bank-account 0123456789 \
101
+ --bank-code 970422 \
102
+ --recipient "LE VAN A" \
103
+ --country VN
104
+ ```
105
+
106
+ > Fiat payouts require KYC verification. If not verified, you'll see:
107
+ > ```
108
+ > ⚠️ Fiat payouts require KYC verification.
109
+ > Complete KYC at: https://portal.neutron.me
110
+ > (Bitcoin, USDT, and Lightning don't require KYC)
111
+ > ```
112
+
66
113
  ### Transactions
67
114
  ```bash
68
115
  neutron-cli tx get txn_abc123
@@ -83,44 +130,47 @@ neutron-cli webhook list
83
130
  neutron-cli webhook delete wh_abc123
84
131
  ```
85
132
 
86
- ## Output
87
-
88
- All commands output JSON by default (machine-readable):
133
+ ### Manage config
134
+ ```bash
135
+ neutron-cli config init # set up credentials
136
+ neutron-cli config show # show current credentials (masked)
137
+ neutron-cli config test # test credentials against API
138
+ ```
89
139
 
90
- ```json
91
- {"ok":true,"data":{...}}
140
+ ### Update
141
+ ```bash
142
+ neutron-cli update # update to latest version
92
143
  ```
93
144
 
94
- Add `--pretty` for human-readable output:
145
+ ## Output
146
+
147
+ TUI (colored, human-readable) is the default. Add `--json` for machine-readable output:
95
148
 
96
149
  ```bash
97
- neutron-cli balance --pretty
98
- # ✅ Wallets
99
- # BTC 50,000 sats (Main)
150
+ neutron-cli balance --json
151
+ # {"ok":true,"data":{"wallets":[...]}}
100
152
  ```
101
153
 
102
154
  Errors go to stderr with exit code 1:
103
-
104
155
  ```json
105
156
  {"error":"Missing credentials","code":"AUTH_MISSING"}
106
157
  ```
107
158
 
108
159
  ## For AI Agents
109
160
 
110
- Any AI agent with bash/exec access can use Neutron immediately:
161
+ Any AI agent with bash/exec access can use Neutron immediately — no MCP setup required:
111
162
 
112
163
  ```bash
113
- # Set credentials once
114
164
  export NEUTRON_API_KEY=...
115
165
  export NEUTRON_API_SECRET=...
116
166
 
117
- # Then use in any bash tool
118
- neutron-cli invoice --amount 1000 --memo "agent payment"
119
- neutron-cli tx list --limit 5
120
- neutron-cli rate --currency usd
167
+ neutron-cli invoice --amount 1000 --memo "agent payment" --json
168
+ neutron-cli tx list --limit 5 --json
169
+ neutron-cli rate --currency usd --json
170
+ neutron-cli send --to lnbc... --amount 1000 --json
121
171
  ```
122
172
 
123
- No MCP setup required. Works with Claude Code, Codex, and any agent that can run shell commands.
173
+ Works with Claude Code, Codex, and any agent that can run shell commands.
124
174
 
125
175
  ## Links
126
176
 
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAMtC,UAAU,MAAM;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAyED,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAYlD;AAID,wBAAsB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAMlD"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAMtC,UAAU,MAAM;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAoED,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAYlD;AAID,wBAAsB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAMlD"}
package/dist/client.js CHANGED
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.loadConfig = loadConfig;
4
4
  exports.getClient = getClient;
5
5
  const fs_1 = require("fs");
6
- const readline_1 = require("readline");
7
6
  const os_1 = require("os");
8
7
  const path_1 = require("path");
9
8
  const neutron_sdk_1 = require("neutron-sdk");
@@ -31,7 +30,7 @@ function saveConfigFile(cfg) {
31
30
  (0, fs_1.chmodSync)(CONFIG_PATH, 0o600);
32
31
  (0, fs_1.chmodSync)(CONFIG_DIR, 0o700);
33
32
  }
34
- function promptHidden(question) {
33
+ function promptMasked(question) {
35
34
  return new Promise((resolve) => {
36
35
  process.stdout.write(question);
37
36
  let input = "";
@@ -46,13 +45,13 @@ function promptHidden(question) {
46
45
  resolve(input);
47
46
  }
48
47
  else if (ch === "\u0003") {
48
+ process.stdout.write("\n");
49
49
  process.exit();
50
50
  }
51
- else if (ch === "\u007f") {
52
- if (input.length > 0) {
51
+ else if (ch === "\u007f" || ch === "\b") {
52
+ // backspace silently remove last char, no visual change
53
+ if (input.length > 0)
53
54
  input = input.slice(0, -1);
54
- process.stdout.write("\b \b");
55
- }
56
55
  }
57
56
  else {
58
57
  input += ch;
@@ -62,22 +61,16 @@ function promptHidden(question) {
62
61
  process.stdin.on("data", handler);
63
62
  });
64
63
  }
65
- function promptLine(question) {
66
- return new Promise((resolve) => {
67
- const rl = (0, readline_1.createInterface)({ input: process.stdin, output: process.stdout });
68
- rl.question(question, (ans) => { rl.close(); resolve(ans.trim()); });
69
- });
70
- }
71
64
  async function runFirstTimeSetup() {
72
65
  console.log("\n" + output_js_1.chalk.bold.cyan("⚡ Welcome to Neutron CLI"));
73
66
  console.log(output_js_1.chalk.dim(" No credentials found. Let's set them up.\n"));
74
67
  console.log(output_js_1.chalk.dim(" Get your API key at: ") + output_js_1.chalk.cyan.underline("https://portal.neutron.me") + "\n");
75
- const apiKey = await promptLine(output_js_1.chalk.bold(" API Key: "));
68
+ const apiKey = await promptMasked(output_js_1.chalk.bold(" API Key: "));
76
69
  if (!apiKey) {
77
70
  console.error(output_js_1.chalk.red(" API key is required."));
78
71
  process.exit(1);
79
72
  }
80
- const apiSecret = await promptHidden(output_js_1.chalk.bold(" API Secret: "));
73
+ const apiSecret = await promptMasked(output_js_1.chalk.bold(" API Secret: "));
81
74
  if (!apiSecret) {
82
75
  console.error(output_js_1.chalk.red(" API secret is required."));
83
76
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerAddress(program: Command): void;
3
+ //# sourceMappingURL=address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../src/commands/address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoEtD"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerAddress = registerAddress;
4
+ const client_js_1 = require("../client.js");
5
+ const output_js_1 = require("../output.js");
6
+ function registerAddress(program) {
7
+ const addressCmd = program
8
+ .command("address")
9
+ .description("Get deposit addresses for your account");
10
+ addressCmd
11
+ .command("btc")
12
+ .description("Get your Bitcoin on-chain deposit address")
13
+ .option("--json", "Output raw JSON (for scripts/agents)")
14
+ .action(async (opts) => {
15
+ try {
16
+ const client = await (0, client_js_1.getClient)();
17
+ const spinner = (0, output_js_1.isPretty)(opts) ? (0, output_js_1.spin)("Fetching BTC address...") : null;
18
+ const result = await client.account.btcAddress();
19
+ spinner?.succeed(output_js_1.chalk.green("Address loaded"));
20
+ if ((0, output_js_1.isPretty)(opts)) {
21
+ (0, output_js_1.header)("Bitcoin Deposit Address (On-chain)");
22
+ (0, output_js_1.kv)("Address:", output_js_1.chalk.bold.yellow(result.address));
23
+ (0, output_js_1.kv)("Network:", "Bitcoin Mainnet");
24
+ console.log();
25
+ console.log(output_js_1.chalk.dim(" 💡 This is a static, reusable address for your account."));
26
+ console.log(output_js_1.chalk.dim(" Scan or paste into any Bitcoin wallet to deposit."));
27
+ console.log();
28
+ }
29
+ else {
30
+ (0, output_js_1.ok)({ address: result.address, network: "BTC" });
31
+ }
32
+ }
33
+ catch (e) {
34
+ (0, output_js_1.fail)(e?.message ?? "Failed to fetch BTC address", "ADDRESS_ERROR");
35
+ }
36
+ });
37
+ addressCmd
38
+ .command("usdt")
39
+ .description("Get your USDT deposit address")
40
+ .option("--chain <chain>", "Blockchain network (TRON or ETH)", "TRON")
41
+ .option("--json", "Output raw JSON (for scripts/agents)")
42
+ .action(async (opts) => {
43
+ try {
44
+ const chain = opts.chain.toUpperCase();
45
+ if (chain !== "TRON" && chain !== "ETH") {
46
+ (0, output_js_1.fail)(`Invalid chain "${opts.chain}". Use TRON or ETH.`, "INVALID_CHAIN");
47
+ }
48
+ const client = await (0, client_js_1.getClient)();
49
+ const spinner = (0, output_js_1.isPretty)(opts) ? (0, output_js_1.spin)(`Fetching USDT address (${chain})...`) : null;
50
+ const result = await client.account.usdtAddress(chain);
51
+ spinner?.succeed(output_js_1.chalk.green("Address loaded"));
52
+ if ((0, output_js_1.isPretty)(opts)) {
53
+ (0, output_js_1.header)(`USDT Deposit Address (${result.chain})`);
54
+ (0, output_js_1.kv)("Address:", output_js_1.chalk.bold.yellow(result.address));
55
+ (0, output_js_1.kv)("Network:", result.chain);
56
+ (0, output_js_1.kv)("Currency:", "USDT (Tether)");
57
+ console.log();
58
+ const feeNote = result.chain === "TRON"
59
+ ? "💡 TRON recommended — low fees and fast confirmations."
60
+ : "💡 ETH network — higher gas fees, use for large amounts only.";
61
+ console.log(output_js_1.chalk.dim(` ${feeNote}`));
62
+ console.log(output_js_1.chalk.dim(" This is a static, reusable address for your account."));
63
+ console.log();
64
+ }
65
+ else {
66
+ (0, output_js_1.ok)({ address: result.address, chain: result.chain, currency: "USDT" });
67
+ }
68
+ }
69
+ catch (e) {
70
+ (0, output_js_1.fail)(e?.message ?? "Failed to fetch USDT address", "ADDRESS_ERROR");
71
+ }
72
+ });
73
+ }
74
+ //# sourceMappingURL=address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.js","sourceRoot":"","sources":["../../src/commands/address.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerFiat(program: Command): void;
3
+ //# sourceMappingURL=fiat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fiat.d.ts","sourceRoot":"","sources":["../../src/commands/fiat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsHnD"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerFiat = registerFiat;
4
+ const client_js_1 = require("../client.js");
5
+ const output_js_1 = require("../output.js");
6
+ const KYC_PORTAL_URL = "https://portal.neutron.me";
7
+ function registerFiat(program) {
8
+ const fiatCmd = program
9
+ .command("fiat")
10
+ .description("Fiat payout operations");
11
+ fiatCmd
12
+ .command("institutions")
13
+ .description("List banks and financial institutions for a country")
14
+ .requiredOption("--country <code>", "Country code (e.g., VN, PH, TH)")
15
+ .option("--json", "Output raw JSON (for scripts/agents)")
16
+ .action(async (opts) => {
17
+ try {
18
+ const country = opts.country.toUpperCase();
19
+ const client = await (0, client_js_1.getClient)();
20
+ const spinner = (0, output_js_1.isPretty)(opts) ? (0, output_js_1.spin)(`Fetching banks for ${country}...`) : null;
21
+ const institutions = await client.fiat.institutions(country);
22
+ spinner?.succeed(output_js_1.chalk.green(`Found ${institutions.length} institutions`));
23
+ if ((0, output_js_1.isPretty)(opts)) {
24
+ (0, output_js_1.header)(`Banks & Institutions (${country})`);
25
+ if (institutions.length === 0) {
26
+ console.log(output_js_1.chalk.dim(" No institutions found for this country."));
27
+ console.log();
28
+ return;
29
+ }
30
+ const table = new output_js_1.Table({
31
+ head: [output_js_1.chalk.cyan("Code"), output_js_1.chalk.cyan("Name")],
32
+ style: { head: [], border: ["dim"] },
33
+ });
34
+ for (const inst of institutions) {
35
+ table.push([output_js_1.chalk.bold(inst.code), inst.name]);
36
+ }
37
+ console.log(table.toString());
38
+ console.log(output_js_1.chalk.dim(`\n Use the code with: neutron-cli fiat payout --bank-code <code>\n`));
39
+ }
40
+ else {
41
+ (0, output_js_1.ok)({ country, institutions });
42
+ }
43
+ }
44
+ catch (e) {
45
+ (0, output_js_1.fail)(e?.message ?? "Failed to fetch institutions", "FIAT_ERROR");
46
+ }
47
+ });
48
+ fiatCmd
49
+ .command("payout")
50
+ .description("Create a fiat payout to a bank account")
51
+ .requiredOption("--amount <btc>", "Amount in BTC (e.g., 0.001)")
52
+ .requiredOption("--from <currency>", "Source currency (e.g., BTC)")
53
+ .requiredOption("--to <currency>", "Destination fiat currency (e.g., VND)")
54
+ .requiredOption("--method <method>", "Payment method (e.g., vnd-instant)")
55
+ .requiredOption("--bank-account <number>", "Bank account number")
56
+ .requiredOption("--bank-code <code>", "Bank/institution code")
57
+ .requiredOption("--recipient <name>", "Recipient legal full name")
58
+ .requiredOption("--country <code>", "Recipient country code (e.g., VN)")
59
+ .option("--json", "Output raw JSON (for scripts/agents)")
60
+ .action(async (opts) => {
61
+ try {
62
+ const client = await (0, client_js_1.getClient)();
63
+ const spinner = (0, output_js_1.isPretty)(opts) ? (0, output_js_1.spin)("Checking account...") : null;
64
+ // KYC check — fiat payouts require verification
65
+ const account = await client.account.get();
66
+ const kycStatus = account.kycStatus ?? account.accountStatus ?? account.kycVerified ?? account.status;
67
+ // KYC is verified if status is "verified" or similar positive states
68
+ const isKycVerified = kycStatus === "verified" || kycStatus === "kyc_verified" || kycStatus === "active";
69
+ if (!isKycVerified) {
70
+ spinner?.stop();
71
+ console.log();
72
+ (0, output_js_1.warn)("Fiat payouts require KYC verification.");
73
+ console.log(output_js_1.chalk.dim(" Please complete KYC at: ") + output_js_1.chalk.cyan.underline(KYC_PORTAL_URL));
74
+ console.log(output_js_1.chalk.dim(" (Bitcoin, USDT, and Lightning payments don't require KYC)"));
75
+ console.log();
76
+ process.exit(1);
77
+ }
78
+ if (spinner)
79
+ spinner.text = "Creating payout...";
80
+ const sourceAmount = parseFloat(opts.amount);
81
+ const sourceCcy = opts.from.toUpperCase();
82
+ const destCcy = opts.to.toUpperCase();
83
+ const destMethod = opts.method.toLowerCase();
84
+ const countryCode = opts.country.toUpperCase();
85
+ const txn = await client.fiat.payout({
86
+ sourceCcy,
87
+ sourceAmount,
88
+ destCcy,
89
+ destMethod,
90
+ bankAcctNum: opts.bankAccount,
91
+ institutionCode: opts.bankCode,
92
+ recipientName: opts.recipient,
93
+ countryCode,
94
+ });
95
+ const txnId = txn.txnId ?? txn.id;
96
+ if (spinner)
97
+ spinner.text = "Confirming payout...";
98
+ const confirmed = await client.transactions.confirm(txnId);
99
+ spinner?.succeed(output_js_1.chalk.green("Payout submitted"));
100
+ if ((0, output_js_1.isPretty)(opts)) {
101
+ (0, output_js_1.header)("Fiat Payout Submitted");
102
+ (0, output_js_1.kv)("Transaction ID:", output_js_1.chalk.bold(txnId));
103
+ (0, output_js_1.kv)("Status:", output_js_1.chalk.green(confirmed.txnState ?? confirmed.status ?? "Processing"));
104
+ (0, output_js_1.kv)("Amount Sent:", output_js_1.chalk.yellow(`${sourceAmount} ${sourceCcy}`));
105
+ if (txn.fxRate) {
106
+ (0, output_js_1.kv)("Exchange Rate:", txn.fxRate.toString());
107
+ }
108
+ (0, output_js_1.kv)("Destination:", `${destCcy} → ${opts.recipient}`);
109
+ (0, output_js_1.kv)("Bank:", opts.bankCode);
110
+ console.log();
111
+ }
112
+ else {
113
+ (0, output_js_1.ok)({ txnId, status: confirmed.txnState ?? confirmed.status, transaction: confirmed });
114
+ }
115
+ }
116
+ catch (e) {
117
+ (0, output_js_1.fail)(e?.message ?? "Fiat payout failed", "PAYOUT_ERROR");
118
+ }
119
+ });
120
+ }
121
+ //# sourceMappingURL=fiat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fiat.js","sourceRoot":"","sources":["../../src/commands/fiat.ts"],"names":[],"mappings":"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"}
@@ -1 +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,CAkCnD"}
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkCpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8FnD"}
@@ -3,31 +3,107 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerSend = registerSend;
4
4
  const client_js_1 = require("../client.js");
5
5
  const output_js_1 = require("../output.js");
6
+ /** Detect payment type from the destination address/invoice */
7
+ function detectPaymentType(to) {
8
+ const normalized = to.trim().toLowerCase();
9
+ // Lightning invoice
10
+ if (normalized.startsWith("lnbc") || normalized.startsWith("lntb")) {
11
+ return { method: "lightning", ccy: "BTC" };
12
+ }
13
+ // Bitcoin on-chain addresses
14
+ // Legacy (1...), P2SH (3...), Bech32/Bech32m (bc1...)
15
+ if (/^1[a-km-zA-HJ-NP-Z1-9]{25,34}$/.test(to) ||
16
+ /^3[a-km-zA-HJ-NP-Z1-9]{25,34}$/.test(to) ||
17
+ /^bc1[ac-hj-np-zAC-HJ-NP-Z02-9]{8,87}$/i.test(to)) {
18
+ return { method: "on-chain", ccy: "BTC" };
19
+ }
20
+ // USDT on TRON (T...) or ETH (0x...) - will be validated by currency flag
21
+ if (/^T[A-Za-z1-9]{33}$/.test(to)) {
22
+ return { method: "tron", ccy: "USDT" };
23
+ }
24
+ if (/^0x[a-fA-F0-9]{40}$/.test(to)) {
25
+ return { method: "eth", ccy: "USDT" };
26
+ }
27
+ // Unknown format
28
+ return { method: "unknown", ccy: "UNKNOWN" };
29
+ }
6
30
  function registerSend(program) {
7
31
  program
8
32
  .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")
33
+ .description("Send a payment (Lightning, BTC on-chain, or USDT)")
34
+ .requiredOption("--to <address>", "Destination address or Lightning invoice")
35
+ .requiredOption("--amount <number>", "Amount (sats for BTC/ Lightning, units for USDT)")
36
+ .option("--currency <currency>", "Source wallet currency (default: auto-detect)", "btc")
37
+ .option("--chain <chain>", "Chain for USDT (TRON or ETH)", "TRON")
13
38
  .option("--json", "Output raw JSON (for scripts/agents)")
14
39
  .action(async (opts) => {
15
40
  try {
41
+ const to = opts.to.trim();
42
+ const amount = parseFloat(opts.amount);
43
+ const detected = detectPaymentType(to);
44
+ // Validate detection
45
+ if (detected.method === "unknown") {
46
+ (0, output_js_1.fail)(`Unrecognized address format: "${to.substring(0, 20)}..."\n` +
47
+ ` Supported formats:\n` +
48
+ ` - Lightning: lnbc...\n` +
49
+ ` - BTC on-chain: 1..., 3..., bc1...\n` +
50
+ ` - USDT (TRON): T...\n` +
51
+ ` - USDT (ETH): 0x...`, "INVALID_ADDRESS");
52
+ }
16
53
  const client = await (0, client_js_1.getClient)();
17
- const spinner = (0, output_js_1.isPretty)(opts) ? (0, output_js_1.spin)("Sending payment...") : null;
54
+ const spinner = (0, output_js_1.isPretty)(opts) ? (0, output_js_1.spin)(`Preparing ${detected.method} payment...`) : null;
55
+ // Build transaction based on payment type
56
+ let sourceCcy = opts.currency.toUpperCase();
57
+ let destReq;
58
+ let sourceAmount = amount;
59
+ if (detected.method === "lightning") {
60
+ // Lightning payment
61
+ sourceAmount = sourceCcy === "BTC" ? amount / 1e8 : amount;
62
+ destReq = {
63
+ ccy: "BTC",
64
+ method: "lightning",
65
+ reqDetails: { paymentRequest: to }
66
+ };
67
+ }
68
+ else if (detected.method === "on-chain") {
69
+ // BTC on-chain
70
+ sourceCcy = "BTC";
71
+ sourceAmount = amount / 1e8; // Convert sats to BTC
72
+ destReq = {
73
+ ccy: "BTC",
74
+ method: "on-chain",
75
+ reqDetails: { address: to }
76
+ };
77
+ }
78
+ else if (detected.method === "tron" || detected.method === "eth") {
79
+ // USDT on TRON or ETH
80
+ sourceCcy = "USDT";
81
+ destReq = {
82
+ ccy: "USDT",
83
+ method: detected.method,
84
+ reqDetails: { address: to }
85
+ };
86
+ }
18
87
  const txn = await client.transactions.create({
19
- sourceReq: { ccy: opts.currency.toUpperCase(), method: "lightning", amtRequested: Number(opts.amount) },
20
- destReq: { ccy: "BTC", method: "lightning", reqDetails: { paymentRequest: opts.to } },
88
+ sourceReq: { ccy: sourceCcy, method: "neutronpay", amtRequested: sourceAmount },
89
+ destReq,
21
90
  });
91
+ const txnId = txn.txnId ?? txn.id;
22
92
  if (spinner)
23
93
  spinner.text = "Confirming payment...";
24
- const confirmed = await client.transactions.confirm(txn.txnId ?? txn.id);
94
+ const confirmed = await client.transactions.confirm(txnId);
25
95
  spinner?.succeed(output_js_1.chalk.green("Payment sent"));
26
96
  if ((0, output_js_1.isPretty)(opts)) {
27
97
  (0, output_js_1.header)("Payment Sent");
28
- (0, output_js_1.kv)("ID:", confirmed.txnId ?? confirmed.id ?? "—");
29
- (0, output_js_1.kv)("Amount:", output_js_1.chalk.yellow(`${Number(opts.amount).toLocaleString()} sats`));
30
- (0, output_js_1.kv)("Status:", output_js_1.chalk.green(confirmed.txnState ?? confirmed.status ?? ""));
98
+ (0, output_js_1.kv)("ID:", confirmed.txnId ?? confirmed.id ?? txnId);
99
+ // Format amount display
100
+ const amtDisplay = detected.ccy === "BTC"
101
+ ? `${amount.toLocaleString()} sats`
102
+ : `${amount.toLocaleString()} ${detected.ccy}`;
103
+ (0, output_js_1.kv)("Amount:", output_js_1.chalk.yellow(amtDisplay));
104
+ (0, output_js_1.kv)("Method:", detected.method);
105
+ (0, output_js_1.kv)("To:", to.length > 40 ? to.substring(0, 40) + "..." : to);
106
+ (0, output_js_1.kv)("Status:", output_js_1.chalk.green(confirmed.txnState ?? confirmed.status ?? "Sent"));
31
107
  console.log();
32
108
  }
33
109
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":";;AAIA,oCAkCC;AArCD,4CAAyC;AACzC,4CAA2E;AAE3E,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,wBAAwB,EAAE,KAAK,CAAC;SAChE,MAAM,CAAC,QAAQ,EAAE,sCAAsC,CAAC;SACxD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAS,GAAE,CAAC;YACjC,MAAM,OAAO,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,gBAAI,EAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACnE,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,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,GAAG,uBAAuB,CAAC;YACpD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE,CAAQ,CAAC;YAChF,OAAO,EAAE,OAAO,CAAC,iBAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;YAE9C,IAAI,IAAA,oBAAQ,EAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,IAAA,kBAAM,EAAC,cAAc,CAAC,CAAC;gBACvB,IAAA,cAAE,EAAC,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;gBAClD,IAAA,cAAE,EAAC,SAAS,EAAE,iBAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC5E,IAAA,cAAE,EAAC,SAAS,EAAE,iBAAK,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,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"}
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":";;AAkCA,oCA8FC;AA/HD,4CAAyC;AACzC,4CAA2E;AAE3E,+DAA+D;AAC/D,SAAS,iBAAiB,CAAC,EAAU;IACnC,MAAM,UAAU,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE3C,oBAAoB;IACpB,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IAC7C,CAAC;IAED,6BAA6B;IAC7B,sDAAsD;IACtD,IAAI,gCAAgC,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,gCAAgC,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,wCAAwC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACtD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IAC5C,CAAC;IAED,0EAA0E;IAC1E,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;IAED,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACxC,CAAC;IAED,iBAAiB;IACjB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AAC/C,CAAC;AAED,SAAgB,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mDAAmD,CAAC;SAChE,cAAc,CAAC,gBAAgB,EAAE,0CAA0C,CAAC;SAC5E,cAAc,CAAC,mBAAmB,EAAE,kDAAkD,CAAC;SACvF,MAAM,CAAC,uBAAuB,EAAE,+CAA+C,EAAE,KAAK,CAAC;SACvF,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,EAAE,MAAM,CAAC;SACjE,MAAM,CAAC,QAAQ,EAAE,sCAAsC,CAAC;SACxD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAEvC,qBAAqB;YACrB,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAClC,IAAA,gBAAI,EACF,iCAAiC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ;oBAC5D,wBAAwB;oBACxB,4BAA4B;oBAC5B,0CAA0C;oBAC1C,2BAA2B;oBAC3B,yBAAyB,EACzB,iBAAiB,CAClB,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAS,GAAE,CAAC;YACjC,MAAM,OAAO,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,gBAAI,EAAC,aAAa,QAAQ,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAExF,0CAA0C;YAC1C,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC5C,IAAI,OAAY,CAAC;YACjB,IAAI,YAAY,GAAG,MAAM,CAAC;YAE1B,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACpC,oBAAoB;gBACpB,YAAY,GAAG,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC3D,OAAO,GAAG;oBACR,GAAG,EAAE,KAAK;oBACV,MAAM,EAAE,WAAW;oBACnB,UAAU,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;iBACnC,CAAC;YACJ,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC1C,eAAe;gBACf,SAAS,GAAG,KAAK,CAAC;gBAClB,YAAY,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,sBAAsB;gBACnD,OAAO,GAAG;oBACR,GAAG,EAAE,KAAK;oBACV,MAAM,EAAE,UAAU;oBAClB,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;iBAC5B,CAAC;YACJ,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACnE,sBAAsB;gBACtB,SAAS,GAAG,MAAM,CAAC;gBACnB,OAAO,GAAG;oBACR,GAAG,EAAE,MAAM;oBACX,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;iBAC5B,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;gBAC3C,SAAS,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE;gBAC/E,OAAO;aACR,CAAQ,CAAC;YAEV,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE,CAAC;YAElC,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,GAAG,uBAAuB,CAAC;YACpD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAQ,CAAC;YAClE,OAAO,EAAE,OAAO,CAAC,iBAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;YAE9C,IAAI,IAAA,oBAAQ,EAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,IAAA,kBAAM,EAAC,cAAc,CAAC,CAAC;gBACvB,IAAA,cAAE,EAAC,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC;gBAEpD,wBAAwB;gBACxB,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,KAAK,KAAK;oBACvC,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,EAAE,OAAO;oBACnC,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,EAAE,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;gBACjD,IAAA,cAAE,EAAC,SAAS,EAAE,iBAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;gBACxC,IAAA,cAAE,EAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC/B,IAAA,cAAE,EAAC,KAAK,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC7D,IAAA,cAAE,EAAC,SAAS,EAAE,iBAAK,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;gBAC7E,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,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 registerSwap(program: Command): void;
3
+ //# sourceMappingURL=swap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../src/commands/swap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4EnD"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerSwap = registerSwap;
4
+ const client_js_1 = require("../client.js");
5
+ const output_js_1 = require("../output.js");
6
+ function registerSwap(program) {
7
+ program
8
+ .command("swap")
9
+ .description("Convert between currencies (BTC ↔ USDT)")
10
+ .requiredOption("--from <currency>", "Source currency (e.g., BTC, USDT)")
11
+ .requiredOption("--to <currency>", "Destination currency (e.g., USDT, BTC)")
12
+ .requiredOption("--amount <number>", "Amount in source units (sats for BTC, units for USDT)")
13
+ .option("--json", "Output raw JSON (for scripts/agents)")
14
+ .action(async (opts) => {
15
+ try {
16
+ const sourceCcy = opts.from.toUpperCase();
17
+ const destCcy = opts.to.toUpperCase();
18
+ const amount = parseFloat(opts.amount);
19
+ if (sourceCcy === destCcy) {
20
+ (0, output_js_1.fail)("Source and destination currencies must be different", "SWAP_ERROR");
21
+ }
22
+ // For BTC, amount is in satoshis; convert to BTC for API
23
+ const sourceAmount = sourceCcy === "BTC" ? amount / 1e8 : amount;
24
+ const client = await (0, client_js_1.getClient)();
25
+ const spinner = (0, output_js_1.isPretty)(opts) ? (0, output_js_1.spin)(`Creating ${sourceCcy} → ${destCcy} swap...`) : null;
26
+ const txn = await client.transactions.create({
27
+ sourceReq: { ccy: sourceCcy, method: "neutronpay", amtRequested: sourceAmount },
28
+ destReq: { ccy: destCcy, method: "neutronpay" },
29
+ });
30
+ const txnId = txn.txnId ?? txn.id;
31
+ const fxRate = txn.fxRate;
32
+ if (spinner)
33
+ spinner.text = "Confirming swap...";
34
+ const confirmed = await client.transactions.confirm(txnId);
35
+ spinner?.succeed(output_js_1.chalk.green("Swap completed"));
36
+ if ((0, output_js_1.isPretty)(opts)) {
37
+ (0, output_js_1.header)("Currency Swap Completed");
38
+ (0, output_js_1.kv)("Transaction ID:", output_js_1.chalk.bold(txnId));
39
+ (0, output_js_1.kv)("Status:", output_js_1.chalk.green(confirmed.txnState ?? confirmed.status ?? "Completed"));
40
+ // Display amounts nicely
41
+ const srcDisplay = sourceCcy === "BTC"
42
+ ? `${amount.toLocaleString()} sats`
43
+ : `${amount.toLocaleString()} ${sourceCcy}`;
44
+ (0, output_js_1.kv)("Amount Sent:", output_js_1.chalk.yellow(srcDisplay));
45
+ if (fxRate) {
46
+ (0, output_js_1.kv)("Exchange Rate:", `${fxRate} ${sourceCcy}/${destCcy}`);
47
+ }
48
+ // Calculate received amount if we have the rate
49
+ if (fxRate && sourceCcy === "BTC" && destCcy === "USDT") {
50
+ const received = (amount / 1e8) * fxRate;
51
+ (0, output_js_1.kv)("Amount Received:", output_js_1.chalk.green(`${received.toLocaleString(undefined, { maximumFractionDigits: 2 })} ${destCcy}`));
52
+ }
53
+ else if (fxRate && sourceCcy === "USDT" && destCcy === "BTC") {
54
+ const received = (amount / fxRate) * 1e8;
55
+ (0, output_js_1.kv)("Amount Received:", output_js_1.chalk.green(`${Math.floor(received).toLocaleString()} sats`));
56
+ }
57
+ console.log();
58
+ }
59
+ else {
60
+ (0, output_js_1.ok)({
61
+ txnId,
62
+ status: confirmed.txnState ?? confirmed.status,
63
+ sourceCcy,
64
+ destCcy,
65
+ sourceAmount: amount,
66
+ fxRate,
67
+ transaction: confirmed
68
+ });
69
+ }
70
+ }
71
+ catch (e) {
72
+ (0, output_js_1.fail)(e?.message ?? "Swap failed", "SWAP_ERROR");
73
+ }
74
+ });
75
+ }
76
+ //# sourceMappingURL=swap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap.js","sourceRoot":"","sources":["../../src/commands/swap.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -12,6 +12,9 @@ const rate_js_1 = require("./commands/rate.js");
12
12
  const webhook_js_1 = require("./commands/webhook.js");
13
13
  const update_js_1 = require("./commands/update.js");
14
14
  const config_js_1 = require("./commands/config.js");
15
+ const address_js_1 = require("./commands/address.js");
16
+ const fiat_js_1 = require("./commands/fiat.js");
17
+ const swap_js_1 = require("./commands/swap.js");
15
18
  const program = new commander_1.Command();
16
19
  program
17
20
  .name("neutron-cli")
@@ -26,6 +29,9 @@ program
26
29
  (0, rate_js_1.registerRate)(program);
27
30
  (0, webhook_js_1.registerWebhook)(program);
28
31
  (0, update_js_1.registerUpdate)(program);
32
+ (0, address_js_1.registerAddress)(program);
33
+ (0, fiat_js_1.registerFiat)(program);
34
+ (0, swap_js_1.registerSwap)(program);
29
35
  (0, update_check_js_1.checkForUpdate)(); // non-blocking, fires in background
30
36
  program.parseAsync(process.argv).catch((e) => {
31
37
  process.stderr.write(JSON.stringify({ error: e?.message ?? "Unknown error", code: "FATAL" }) + "\n");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,uDAAmD;AACnD,gDAAkD;AAClD,sDAAwD;AACxD,sDAAwD;AACxD,gDAAkD;AAClD,4CAA8C;AAC9C,gDAAkD;AAClD,sDAAwD;AACxD,oDAAsD;AACtD,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,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;AAE/C,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;AACzB,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC;AAExB,IAAA,gCAAc,GAAE,CAAC,CAAC,oCAAoC;AAEtD,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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,uDAAmD;AACnD,gDAAkD;AAClD,sDAAwD;AACxD,sDAAwD;AACxD,gDAAkD;AAClD,4CAA8C;AAC9C,gDAAkD;AAClD,sDAAwD;AACxD,oDAAsD;AACtD,oDAAsD;AACtD,sDAAwD;AACxD,gDAAkD;AAClD,gDAAkD;AAElD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,iEAAiE,CAAC;KAC9E,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;AAE/C,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;AACzB,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC;AACxB,IAAA,4BAAe,EAAC,OAAO,CAAC,CAAC;AACzB,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;AACtB,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;AAEtB,IAAA,gCAAc,GAAE,CAAC,CAAC,oCAAoC;AAEtD,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neutron-cli",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "CLI for Neutron Lightning wallet services \u2014 for developers and AI agents",
5
5
  "keywords": [
6
6
  "neutron",