neutron-cli 0.2.0 → 0.3.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.
@@ -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":"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"}
@@ -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.0",
4
4
  "description": "CLI for Neutron Lightning wallet services \u2014 for developers and AI agents",
5
5
  "keywords": [
6
6
  "neutron",