paytaca-cli 0.5.2 → 0.6.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
@@ -36,19 +36,25 @@ paytaca wallet create # Generate a new 12-word seed phrase
36
36
  paytaca wallet create --chipnet # Create on chipnet (testnet)
37
37
  paytaca wallet import # Import an existing seed phrase
38
38
  paytaca wallet info # Show wallet hash, address, and balance
39
- paytaca wallet export # Display the stored seed phrase
39
+ paytaca wallet export # Display the stored seed phrase (interactive terminal + biometrics)
40
40
  ```
41
41
 
42
+ > `wallet export` requires an interactive terminal and prompts for biometric
43
+ > authentication (Touch ID, fingerprint, or Windows Hello) when available. It
44
+ > cannot be used from scripts, pipes, or other non-interactive processes.
45
+
42
46
  ### Balance
43
47
 
44
48
  ```bash
45
49
  paytaca balance # Show BCH balance with USD conversion
46
50
  paytaca balance --sats # Show in satoshis only
47
51
  paytaca balance --token <category> # Show balance for a specific CashToken
52
+ paytaca balance --tokens # Show CashToken balances only (balance > 0)
53
+ paytaca balance --all # Show BCH and CashToken balances
48
54
  paytaca balance --chipnet # Query chipnet balance
49
55
  ```
50
56
 
51
- The default balance view shows the BCH (or token) amount plus its fiat value (e.g. `0.01218811 BCH` / `≈ 3.17 USD`). Fiat conversion is skipped when no price is available.
57
+ The default balance view shows the BCH (or token) amount plus its fiat value (e.g. `0.01218811 BCH` / `≈ 3.17 USD`). Fiat conversion is skipped when no price is available. `--tokens` and `--all` list only tokens with a positive balance.
52
58
 
53
59
  ### Receive
54
60
 
@@ -62,6 +68,8 @@ paytaca receive --token <category> # PayPro URI for a specific token
62
68
  paytaca receive --token <category> --amount 100 # PayPro URI with token amount
63
69
  ```
64
70
 
71
+ The displayed address (and its token-aware variant) is automatically subscribed with Watchtower so incoming BCH and CashTokens are monitored, even for indices not covered by the initial wallet scan.
72
+
65
73
  ### Send
66
74
 
67
75
  ```bash
@@ -5,7 +5,10 @@
5
5
  * Shows both BCH and satoshi denominations, plus spendable vs total
6
6
  * when they differ (e.g. unconfirmed UTXOs).
7
7
  *
8
- * Use --token <category> to display the balance for a specific CashToken.
8
+ * (default) BCH balance only
9
+ * --token <category> balance for a specific CashToken
10
+ * --tokens CashToken balances only (positive balances)
11
+ * --all BCH and CashToken balances
9
12
  */
10
13
  import { Command } from 'commander';
11
14
  export declare function registerBalanceCommand(program: Command): void;
@@ -1 +1 @@
1
- {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAenC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoI7D"}
1
+ {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAmInC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoI7D"}
@@ -5,11 +5,14 @@
5
5
  * Shows both BCH and satoshi denominations, plus spendable vs total
6
6
  * when they differ (e.g. unconfirmed UTXOs).
7
7
  *
8
- * Use --token <category> to display the balance for a specific CashToken.
8
+ * (default) BCH balance only
9
+ * --token <category> balance for a specific CashToken
10
+ * --tokens CashToken balances only (positive balances)
11
+ * --all BCH and CashToken balances
9
12
  */
10
13
  import chalk from 'chalk';
11
14
  import { loadWallet, loadMnemonic } from '../wallet/index.js';
12
- import { getBchUsdPrice, formatUsd, getUsdPerToken, tokenAmountToUsd } from '../utils/prices.js';
15
+ import { getBchUsdPrice, formatUsd, fetchAssetPrices, getUsdPerToken, tokenAmountToUsd, } from '../utils/prices.js';
13
16
  /** Convert BCH to satoshis (1 BCH = 100,000,000 sats) */
14
17
  function bchToSats(bch) {
15
18
  return Math.round(bch * 1e8);
@@ -18,22 +21,120 @@ function bchToSats(bch) {
18
21
  function formatSats(sats) {
19
22
  return sats.toLocaleString('en-US');
20
23
  }
24
+ /** Format a token amount with decimals */
25
+ function formatTokenAmount(rawAmount, decimals) {
26
+ if (decimals === 0)
27
+ return rawAmount.toLocaleString('en-US');
28
+ const scaled = rawAmount / Math.pow(10, decimals);
29
+ return scaled.toLocaleString('en-US', {
30
+ minimumFractionDigits: 0,
31
+ maximumFractionDigits: decimals,
32
+ });
33
+ }
34
+ /** Print the BCH balance (BCH + USD, or sats with --sats). */
35
+ async function showBchBalance(bchWallet, isChipnet, showSatsOnly) {
36
+ const result = await bchWallet.getBalance();
37
+ const balanceSats = bchToSats(result.balance);
38
+ const spendableSats = bchToSats(result.spendable);
39
+ if (showSatsOnly) {
40
+ console.log(` Balance: ${formatSats(balanceSats)} sats`);
41
+ if (result.spendable !== result.balance) {
42
+ console.log(chalk.dim(` Spendable: ${formatSats(spendableSats)} sats`));
43
+ }
44
+ return;
45
+ }
46
+ let usdPerBch = null;
47
+ try {
48
+ usdPerBch = await getBchUsdPrice(isChipnet);
49
+ }
50
+ catch {
51
+ // USD price unavailable — show BCH only
52
+ }
53
+ console.log(` Balance: ${result.balance} BCH`);
54
+ if (usdPerBch !== null) {
55
+ console.log(chalk.dim(` ≈ ${formatUsd(result.balance * usdPerBch)}`));
56
+ }
57
+ }
58
+ /** Print CashToken balances, excluding tokens with a zero balance. */
59
+ async function showTokenBalances(bchWallet, isChipnet) {
60
+ const tokens = (await bchWallet.getFungibleTokens()).filter((t) => t.balance > 0);
61
+ if (tokens.length === 0) {
62
+ console.log(chalk.dim(' No CashTokens with a positive balance.\n'));
63
+ return;
64
+ }
65
+ // Fetch USD prices for all held tokens (batched by the util)
66
+ const prices = new Map();
67
+ try {
68
+ const priceData = await fetchAssetPrices(tokens.map((t) => `ct/${t.category}`), ['USD'], isChipnet);
69
+ for (const p of priceData) {
70
+ if (String(p.currency || '').toLowerCase() !== 'usd')
71
+ continue;
72
+ const catMatch = String(p.asset || '').match(/^ct\/([a-fA-F0-9]+)$/);
73
+ if (!catMatch)
74
+ continue;
75
+ const raw = parseFloat(p.price_value);
76
+ if (!isFinite(raw) || raw === 0)
77
+ continue;
78
+ prices.set(catMatch[1], 1 / raw);
79
+ }
80
+ }
81
+ catch {
82
+ // Pricing unavailable — proceed without USD values
83
+ }
84
+ let totalUsd = 0;
85
+ let pricedCount = 0;
86
+ console.log(chalk.dim(' Tokens:'));
87
+ for (const t of tokens) {
88
+ const amount = formatTokenAmount(t.balance, t.decimals);
89
+ const symbol = t.symbol ? ` ${t.symbol}` : '';
90
+ const name = t.name !== 'Unknown Token' ? t.name : '';
91
+ const usdPerToken = prices.get(t.category);
92
+ console.log(` ${chalk.bold(amount + symbol)}`);
93
+ if (name) {
94
+ console.log(chalk.dim(` ${name}`));
95
+ }
96
+ console.log(chalk.dim(` ${t.category}`));
97
+ if (usdPerToken !== undefined) {
98
+ const usdValue = tokenAmountToUsd(t.balance, t.decimals, usdPerToken);
99
+ totalUsd += usdValue;
100
+ pricedCount += 1;
101
+ console.log(chalk.green(` ≈ ${formatUsd(usdValue)}`));
102
+ }
103
+ console.log();
104
+ }
105
+ console.log(chalk.dim(` ${tokens.length} token${tokens.length !== 1 ? 's' : ''} with balance`));
106
+ if (pricedCount > 0) {
107
+ console.log(chalk.bold(` Total: ${formatUsd(totalUsd)}`));
108
+ }
109
+ }
21
110
  export function registerBalanceCommand(program) {
22
111
  program
23
112
  .command('balance')
24
113
  .description('Display wallet balance')
25
114
  .option('--chipnet', 'Use chipnet (testnet) instead of mainnet')
26
115
  .option('--token <id>', 'Show balance for a specific CashToken category (64-character hex)')
27
- .option('--sats', 'Display balance in satoshis only')
116
+ .option('--tokens', 'Show CashToken balances only (excludes BCH)')
117
+ .option('--all', 'Show BCH and CashToken balances')
118
+ .option('--sats', 'Display BCH balance in satoshis only')
28
119
  .action(async (opts) => {
29
120
  const isChipnet = Boolean(opts.chipnet);
30
121
  const showSatsOnly = Boolean(opts.sats);
122
+ const showTokens = Boolean(opts.tokens);
123
+ const showAll = Boolean(opts.all);
31
124
  const network = isChipnet ? 'chipnet' : 'mainnet';
32
125
  const tokenId = opts.token || '';
33
126
  if (tokenId && !/^[a-fA-F0-9]{64}$/.test(tokenId)) {
34
127
  console.log(chalk.red('\nError: Token must be a 64-character hex string.\n'));
35
128
  process.exit(1);
36
129
  }
130
+ if (showTokens && showAll) {
131
+ console.log(chalk.red('\nError: --tokens and --all cannot be used together.\n'));
132
+ process.exit(1);
133
+ }
134
+ if (tokenId && (showTokens || showAll)) {
135
+ console.log(chalk.red('\nError: --token cannot be combined with --tokens or --all.\n'));
136
+ process.exit(1);
137
+ }
37
138
  // ── Validate wallet ──────────────────────────────────────────────
38
139
  const data = loadMnemonic();
39
140
  if (!data) {
@@ -44,7 +145,7 @@ export function registerBalanceCommand(program) {
44
145
  const bchWallet = w.forNetwork(isChipnet);
45
146
  try {
46
147
  if (tokenId) {
47
- // ── Token balance ────────────────────────────────────────────
148
+ // ── Specific token balance ──────────────────────────────────
48
149
  let tokenName = '';
49
150
  let tokenSymbol = '';
50
151
  let decimals = 0;
@@ -85,31 +186,20 @@ export function registerBalanceCommand(program) {
85
186
  console.log(chalk.dim(` ≈ ${formatUsd(usdValue)}`));
86
187
  }
87
188
  }
189
+ else if (showTokens || showAll) {
190
+ // ── Token balances, optionally with BCH ─────────────────────
191
+ const title = showAll ? 'Balances' : 'Token Balances';
192
+ console.log(chalk.bold(`\n ${title} (${network})\n`));
193
+ if (showAll) {
194
+ await showBchBalance(bchWallet, isChipnet, showSatsOnly);
195
+ console.log();
196
+ }
197
+ await showTokenBalances(bchWallet, isChipnet);
198
+ }
88
199
  else {
89
- // ── BCH balance ──────────────────────────────────────────────
200
+ // ── BCH balance ─────────────────────────────────────────────
90
201
  console.log(chalk.bold(`\n Balance (${network})\n`));
91
- const result = await bchWallet.getBalance();
92
- const balanceSats = bchToSats(result.balance);
93
- const spendableSats = bchToSats(result.spendable);
94
- if (showSatsOnly) {
95
- console.log(` Balance: ${formatSats(balanceSats)} sats`);
96
- if (result.spendable !== result.balance) {
97
- console.log(chalk.dim(` Spendable: ${formatSats(spendableSats)} sats`));
98
- }
99
- }
100
- else {
101
- let usdPerBch = null;
102
- try {
103
- usdPerBch = await getBchUsdPrice(isChipnet);
104
- }
105
- catch {
106
- // USD price unavailable — show BCH only
107
- }
108
- console.log(` Balance: ${result.balance} BCH`);
109
- if (usdPerBch !== null) {
110
- console.log(chalk.dim(` ≈ ${formatUsd(result.balance * usdPerBch)}`));
111
- }
112
- }
202
+ await showBchBalance(bchWallet, isChipnet, showSatsOnly);
113
203
  }
114
204
  }
115
205
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"receive.d.ts","sourceRoot":"","sources":["../../src/commands/receive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAwCnC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4I7D"}
1
+ {"version":3,"file":"receive.d.ts","sourceRoot":"","sources":["../../src/commands/receive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAwCnC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2J7D"}
@@ -90,6 +90,16 @@ export function registerReceiveCommand(program) {
90
90
  const address = isToken
91
91
  ? bchWallet.getTokenAddressSetAt(index).receiving
92
92
  : bchWallet.getAddressSetAt(index).receiving;
93
+ // ── Subscribe the address with Watchtower ───────────────────────
94
+ // The backend derives the token-aware variant automatically, so this
95
+ // covers both BCH and CashToken payments to the displayed address.
96
+ let subscribed = false;
97
+ try {
98
+ subscribed = Boolean(await bchWallet.getNewAddressSet(index));
99
+ }
100
+ catch {
101
+ // Non-critical: displaying the address should still succeed
102
+ }
93
103
  // ── Resolve token metadata (if category specified) ─────────────
94
104
  let tokenInfo = null;
95
105
  let tokenName = '';
@@ -131,6 +141,9 @@ export function registerReceiveCommand(program) {
131
141
  console.log(chalk.bold(`\n ${label} (${network})\n`));
132
142
  console.log(` Address: ${address}`);
133
143
  console.log(chalk.dim(` Index: ${index}`));
144
+ console.log(subscribed
145
+ ? chalk.dim(' Watching: subscribed with Watchtower')
146
+ : chalk.yellow(' Watching: not subscribed (address may not be monitored)'));
134
147
  if (isToken) {
135
148
  console.log(chalk.dim(' Type: token-aware (z-prefix)'));
136
149
  }
@@ -1 +1 @@
1
- {"version":3,"file":"receive.js","sourceRoot":"","sources":["../../src/commands/receive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"receive.js","sourceRoot":"","sources":["../../src/commands/receive.ts"],"names":[],"mappings":"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"}
@@ -8,4 +8,18 @@
8
8
  */
9
9
  import { Command } from 'commander';
10
10
  export declare function registerWalletCommands(program: Command): void;
11
+ export declare class NonInteractiveTerminalError extends Error {
12
+ }
13
+ /**
14
+ * Refuse to reveal the seed phrase unless the command is attached to a real
15
+ * interactive terminal. This blocks piping, redirection, `echo ... | paytaca`,
16
+ * command substitution, and non-interactive agent execution. Throws (rather
17
+ * than exiting) so callers and tests can handle the refusal.
18
+ */
19
+ export declare function assertInteractiveTerminal(stdinIsTTY: boolean | undefined, stdoutIsTTY: boolean | undefined): void;
20
+ export declare function generateChallenge(): string;
21
+ type BiometricResult = 'ok' | 'denied' | 'unavailable' | 'error';
22
+ export declare function isChallengeAnswerCorrect(challenge: string, answer: string | null): boolean;
23
+ export declare function classifyBiometricOutput(output: string): BiometricResult;
24
+ export {};
11
25
  //# sourceMappingURL=wallet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAWnC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+L7D"}
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAcnC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4M7D;AAED,qBAAa,2BAA4B,SAAQ,KAAK;CAAG;AAEzD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,OAAO,GAAG,SAAS,EAC/B,WAAW,EAAE,OAAO,GAAG,SAAS,GAC/B,IAAI,CAON;AA6ED,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C;AAED,KAAK,eAAe,GAAG,IAAI,GAAG,QAAQ,GAAG,aAAa,GAAG,OAAO,CAAA;AAMhE,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAET;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAKvE"}
@@ -8,6 +8,9 @@
8
8
  */
9
9
  import chalk from 'chalk';
10
10
  import * as readline from 'readline';
11
+ import * as os from 'node:os';
12
+ import { randomInt } from 'node:crypto';
13
+ import { spawnSync } from 'node:child_process';
11
14
  import { generateMnemonic, importMnemonic, loadWallet, loadMnemonic, } from '../wallet/index.js';
12
15
  import { getBchUsdPrice, formatUsd } from '../utils/prices.js';
13
16
  export function registerWalletCommands(program) {
@@ -141,13 +144,25 @@ export function registerWalletCommands(program) {
141
144
  // ── wallet export ───────────────────────────────────────────────────
142
145
  wallet
143
146
  .command('export')
144
- .description('Display the stored seed phrase')
145
- .action(() => {
147
+ .description('Display the stored seed phrase (interactive terminal only)')
148
+ .action(async () => {
149
+ try {
150
+ assertInteractiveTerminal(process.stdin.isTTY, process.stdout.isTTY);
151
+ }
152
+ catch (err) {
153
+ console.log(chalk.red(`\n${err.message}\n`));
154
+ process.exit(1);
155
+ }
146
156
  const data = loadMnemonic();
147
157
  if (!data) {
148
158
  console.log(chalk.red('\nNo wallet found. Run `paytaca wallet create` or `paytaca wallet import` first.\n'));
149
159
  process.exit(1);
150
160
  }
161
+ const verified = await promptHumanVerification();
162
+ if (!verified) {
163
+ console.log(chalk.red('\n Verification failed. Seed phrase not shown.\n'));
164
+ process.exit(1);
165
+ }
151
166
  console.log(chalk.yellow.bold('\n WARNING: Do not share your seed phrase with anyone.'));
152
167
  console.log(chalk.yellow(' Anyone with this phrase can access your funds.\n'));
153
168
  const words = data.mnemonic.split(' ');
@@ -157,4 +172,228 @@ export function registerWalletCommands(program) {
157
172
  console.log();
158
173
  });
159
174
  }
175
+ export class NonInteractiveTerminalError extends Error {
176
+ }
177
+ /**
178
+ * Refuse to reveal the seed phrase unless the command is attached to a real
179
+ * interactive terminal. This blocks piping, redirection, `echo ... | paytaca`,
180
+ * command substitution, and non-interactive agent execution. Throws (rather
181
+ * than exiting) so callers and tests can handle the refusal.
182
+ */
183
+ export function assertInteractiveTerminal(stdinIsTTY, stdoutIsTTY) {
184
+ if (!stdinIsTTY || !stdoutIsTTY) {
185
+ throw new NonInteractiveTerminalError('Refusing to export seed phrase: this command must be run directly in an interactive terminal.\n' +
186
+ 'It cannot be piped, redirected, or executed by a non-interactive process.');
187
+ }
188
+ }
189
+ /**
190
+ * Require a live human presence before revealing the seed phrase. Where the OS
191
+ * exposes biometric authentication (macOS Touch ID, Linux fprintd, Windows
192
+ * Hello), that prompt is used and cannot be driven or dismissed by an automated
193
+ * caller. Where biometrics are unavailable, fall back to typing a random
194
+ * one-time code, which non-interactive callers cannot answer.
195
+ */
196
+ async function promptHumanVerification() {
197
+ const biometric = verifyBiometric();
198
+ if (biometric === 'ok') {
199
+ console.log(chalk.green('\n Identity confirmed via biometric authentication.\n'));
200
+ return true;
201
+ }
202
+ if (biometric === 'denied') {
203
+ console.log(chalk.red('\n Biometric authentication failed or was cancelled.\n'));
204
+ return false;
205
+ }
206
+ console.log(chalk.dim(' Biometric authentication not available — falling back to code entry.\n'));
207
+ return promptChallenge();
208
+ }
209
+ function verifyBiometric() {
210
+ switch (process.platform) {
211
+ case 'darwin':
212
+ return verifyTouchId();
213
+ case 'linux':
214
+ return verifyFprintd();
215
+ case 'win32':
216
+ return verifyWindowsHello();
217
+ default:
218
+ return 'unavailable';
219
+ }
220
+ }
221
+ /**
222
+ * Random one-time code the operator must type back. Automated callers cannot
223
+ * read and answer this prompt, even when a pseudo-terminal is allocated.
224
+ */
225
+ async function promptChallenge() {
226
+ const challenge = generateChallenge();
227
+ const timeoutMs = 120_000;
228
+ const rl = readline.createInterface({
229
+ input: process.stdin,
230
+ output: process.stdout,
231
+ });
232
+ console.log(chalk.yellow.bold('\n Human verification required before the seed phrase is revealed.'));
233
+ console.log(chalk.dim(' Type the code below exactly as shown to confirm you are at the terminal.\n'));
234
+ console.log(chalk.cyan.bold(` ${challenge}\n`));
235
+ const answer = await new Promise((resolve) => {
236
+ const timer = setTimeout(() => {
237
+ rl.close();
238
+ resolve(null);
239
+ }, timeoutMs);
240
+ rl.question(' Code: ', (input) => {
241
+ clearTimeout(timer);
242
+ rl.close();
243
+ resolve(input);
244
+ });
245
+ });
246
+ return isChallengeAnswerCorrect(challenge, answer);
247
+ }
248
+ export function generateChallenge() {
249
+ const alphabet = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
250
+ const group = () => Array.from({ length: 4 }, () => alphabet[randomInt(alphabet.length)]).join('');
251
+ return `${group()}-${group()}`;
252
+ }
253
+ const BIO_OK = 'PAYTACA_BIO_OK';
254
+ const BIO_FAIL = 'PAYTACA_BIO_FAIL';
255
+ const BIO_UNAVAILABLE = 'PAYTACA_BIO_UNAVAILABLE';
256
+ export function isChallengeAnswerCorrect(challenge, answer) {
257
+ return answer !== null && answer.trim().toUpperCase() === challenge;
258
+ }
259
+ export function classifyBiometricOutput(output) {
260
+ if (output.includes(BIO_UNAVAILABLE))
261
+ return 'unavailable';
262
+ if (output.includes(BIO_FAIL))
263
+ return 'denied';
264
+ if (output.includes(BIO_OK))
265
+ return 'ok';
266
+ return 'error';
267
+ }
268
+ function commandExists(command) {
269
+ const res = spawnSync('sh', ['-c', `command -v ${command}`], { stdio: 'ignore' });
270
+ return res.status === 0;
271
+ }
272
+ // ── macOS: Touch ID via LocalAuthentication ────────────────────────────
273
+ /**
274
+ * JXA script executed by the system `osascript`: bridges to the macOS
275
+ * LocalAuthentication framework and blocks on the native Touch ID prompt.
276
+ * JXA `console.log` writes to stderr (captured below).
277
+ */
278
+ const TOUCH_ID_JXA = `
279
+ ObjC.import('LocalAuthentication')
280
+ ObjC.import('Foundation')
281
+
282
+ const policy = $.LAPolicyDeviceOwnerAuthenticationWithBiometrics
283
+ const ctx = $.LAContext.alloc.init
284
+ const err = $()
285
+
286
+ if (!ctx.canEvaluatePolicyError(policy, err)) {
287
+ console.log('${BIO_UNAVAILABLE}')
288
+ } else {
289
+ let done = false
290
+ let ok = false
291
+ ctx.evaluatePolicyLocalizedReasonReply(
292
+ policy,
293
+ $('Confirm it is you to reveal your Paytaca seed phrase'),
294
+ (success) => {
295
+ ok = Boolean(success)
296
+ done = true
297
+ }
298
+ )
299
+ const deadline = Date.now() + 120000
300
+ while (!done && Date.now() < deadline) {
301
+ $.NSRunLoop.currentRunLoop.runModeBeforeDate(
302
+ $.NSDefaultRunLoopMode,
303
+ $.NSDate.dateWithTimeIntervalSinceNow(0.25)
304
+ )
305
+ }
306
+ console.log(done && ok ? '${BIO_OK}' : '${BIO_FAIL}')
307
+ }
308
+ `;
309
+ function verifyTouchId() {
310
+ const res = spawnSync('osascript', ['-l', 'JavaScript', '-e', TOUCH_ID_JXA], {
311
+ stdio: ['ignore', 'pipe', 'pipe'],
312
+ encoding: 'utf8',
313
+ timeout: 130_000,
314
+ });
315
+ return classifyBiometricOutput(`${res.stderr ?? ''}${res.stdout ?? ''}`);
316
+ }
317
+ // ── Linux: fingerprint verification via fprintd ────────────────────────
318
+ /**
319
+ * `fprintd-verify` reads the physical fingerprint reader over D-Bus and exits
320
+ * 0 only on a match, so an automated caller cannot satisfy it. Enrollment is
321
+ * confirmed first via `fprintd-list` so un-enrolled users fall back to the code
322
+ * challenge rather than being locked out.
323
+ */
324
+ function verifyFprintd() {
325
+ if (!commandExists('fprintd-verify'))
326
+ return 'unavailable';
327
+ if (!commandExists('fprintd-list'))
328
+ return 'unavailable';
329
+ let user;
330
+ try {
331
+ user = os.userInfo().username;
332
+ }
333
+ catch {
334
+ return 'unavailable';
335
+ }
336
+ const enrolled = spawnSync('fprintd-list', [user], {
337
+ stdio: ['ignore', 'pipe', 'pipe'],
338
+ encoding: 'utf8',
339
+ timeout: 15_000,
340
+ });
341
+ if (enrolled.error)
342
+ return 'unavailable';
343
+ const listed = enrolled.stdout ?? '';
344
+ if (!listed.trim() || /no fingerprints enrolled/i.test(listed))
345
+ return 'unavailable';
346
+ const verify = spawnSync('fprintd-verify', [user], {
347
+ stdio: ['ignore', 'pipe', 'pipe'],
348
+ encoding: 'utf8',
349
+ timeout: 60_000,
350
+ });
351
+ if (verify.status === 0)
352
+ return 'ok';
353
+ return 'denied';
354
+ }
355
+ // ── Windows: Windows Hello via UserConsentVerifier ─────────────────────
356
+ /**
357
+ * Calls the WinRT UserConsentVerifier through Windows PowerShell, which shows
358
+ * the native Windows Hello prompt (face / fingerprint / PIN). The async WinRT
359
+ * operation is awaited via System.Runtime.WindowsRuntime.
360
+ */
361
+ const WINDOWS_HELLO_PS = `
362
+ $ErrorActionPreference = 'Stop'
363
+ [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
364
+ try {
365
+ Add-Type -AssemblyName System.Runtime.WindowsRuntime | Out-Null
366
+ $asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() | Where-Object {
367
+ $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation\`1'
368
+ })[0]
369
+ function Await($op, $type) {
370
+ $m = $asTaskGeneric.MakeGenericMethod($type)
371
+ $t = $m.Invoke($null, @($op))
372
+ $t.Wait(-1) | Out-Null
373
+ $t.Result
374
+ }
375
+ $Ucv = [Windows.Security.Credentials.UI.UserConsentVerifier, Windows.Security.Credentials.UI, ContentType = WindowsRuntime]
376
+ $avail = Await ($Ucv::CheckAvailabilityAsync()) ([Windows.Security.Credentials.UI.UserConsentVerifierAvailability])
377
+ if ($avail -ne [Windows.Security.Credentials.UI.UserConsentVerifierAvailability]::Available) {
378
+ Write-Output '${BIO_UNAVAILABLE}'
379
+ } else {
380
+ $res = Await ($Ucv::RequestVerificationAsync('Confirm it is you to reveal your Paytaca seed phrase')) ([Windows.Security.Credentials.UI.UserConsentVerificationResult])
381
+ if ($res -eq [Windows.Security.Credentials.UI.UserConsentVerificationResult]::Verified) {
382
+ Write-Output '${BIO_OK}'
383
+ } else {
384
+ Write-Output '${BIO_FAIL}'
385
+ }
386
+ }
387
+ } catch {
388
+ Write-Output '${BIO_UNAVAILABLE}'
389
+ }
390
+ `;
391
+ function verifyWindowsHello() {
392
+ const res = spawnSync('powershell.exe', ['-NoProfile', '-Command', WINDOWS_HELLO_PS], {
393
+ stdio: ['ignore', 'pipe', 'pipe'],
394
+ encoding: 'utf8',
395
+ timeout: 130_000,
396
+ });
397
+ return classifyBiometricOutput(`${res.stdout ?? ''}${res.stderr ?? ''}`);
398
+ }
160
399
  //# sourceMappingURL=wallet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wallet.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.test.d.ts","sourceRoot":"","sources":["../../src/commands/wallet.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { assertInteractiveTerminal, NonInteractiveTerminalError, classifyBiometricOutput, generateChallenge, isChallengeAnswerCorrect, } from './wallet.js';
3
+ describe('assertInteractiveTerminal', () => {
4
+ it('allows execution when both stdin and stdout are TTYs', () => {
5
+ expect(() => assertInteractiveTerminal(true, true)).not.toThrow();
6
+ });
7
+ it('refuses when stdin is not a TTY', () => {
8
+ expect(() => assertInteractiveTerminal(undefined, true)).toThrow(NonInteractiveTerminalError);
9
+ });
10
+ it('refuses when stdout is not a TTY', () => {
11
+ expect(() => assertInteractiveTerminal(true, undefined)).toThrow(NonInteractiveTerminalError);
12
+ });
13
+ it('refuses when neither stream is a TTY', () => {
14
+ expect(() => assertInteractiveTerminal(false, false)).toThrow(NonInteractiveTerminalError);
15
+ });
16
+ });
17
+ describe('classifyBiometricOutput', () => {
18
+ it('maps the unavailable token', () => {
19
+ expect(classifyBiometricOutput('PAYTACA_BIO_UNAVAILABLE')).toBe('unavailable');
20
+ });
21
+ it('maps the success token', () => {
22
+ expect(classifyBiometricOutput('PAYTACA_BIO_OK')).toBe('ok');
23
+ });
24
+ it('maps the failure token', () => {
25
+ expect(classifyBiometricOutput('PAYTACA_BIO_FAIL')).toBe('denied');
26
+ });
27
+ it('treats unrecognized output as an error', () => {
28
+ expect(classifyBiometricOutput('')).toBe('error');
29
+ expect(classifyBiometricOutput('some unrelated output')).toBe('error');
30
+ });
31
+ it('lets a failure token win if both fail and ok appear', () => {
32
+ expect(classifyBiometricOutput('PAYTACA_BIO_FAIL\nPAYTACA_BIO_OK')).toBe('denied');
33
+ });
34
+ it('does not confuse the unavailable token with success', () => {
35
+ expect(classifyBiometricOutput('PAYTACA_BIO_UNAVAILABLE')).not.toBe('ok');
36
+ });
37
+ });
38
+ describe('generateChallenge', () => {
39
+ it('produces two 4-character groups from an unambiguous alphabet', () => {
40
+ for (let i = 0; i < 50; i++) {
41
+ const challenge = generateChallenge();
42
+ expect(challenge).toMatch(/^[A-HJ-NP-Z2-9]{4}-[A-HJ-NP-Z2-9]{4}$/);
43
+ }
44
+ });
45
+ it('generates different codes across calls', () => {
46
+ const codes = new Set(Array.from({ length: 50 }, () => generateChallenge()));
47
+ expect(codes.size).toBeGreaterThan(1);
48
+ });
49
+ });
50
+ describe('isChallengeAnswerCorrect', () => {
51
+ const challenge = 'ABCD-2345';
52
+ it('accepts an exact match', () => {
53
+ expect(isChallengeAnswerCorrect(challenge, challenge)).toBe(true);
54
+ });
55
+ it('is case-insensitive and trims surrounding whitespace', () => {
56
+ expect(isChallengeAnswerCorrect(challenge, ' abcd-2345 ')).toBe(true);
57
+ });
58
+ it('rejects a wrong answer', () => {
59
+ expect(isChallengeAnswerCorrect(challenge, 'WXYZ-9876')).toBe(false);
60
+ });
61
+ it('rejects a missing answer (timeout)', () => {
62
+ expect(isChallengeAnswerCorrect(challenge, null)).toBe(false);
63
+ });
64
+ it('rejects an empty answer', () => {
65
+ expect(isChallengeAnswerCorrect(challenge, '')).toBe(false);
66
+ });
67
+ });
68
+ //# sourceMappingURL=wallet.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.test.js","sourceRoot":"","sources":["../../src/commands/wallet.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "paytaca-cli",
3
- "version": "0.5.2",
3
+ "version": "0.6.1",
4
4
  "description": "Command-line interface for the Paytaca Bitcoin Cash wallet",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -49,7 +49,7 @@
49
49
  "js-sha256": "^0.9.0",
50
50
  "nostr-tools": "^2.23.3",
51
51
  "qrcode-terminal": "^0.12.0",
52
- "watchtower-cash-js": "^0.2.4"
52
+ "watchtower-cash-js": "^0.3.2"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@types/node": "^22.0.0",
@@ -18,7 +18,13 @@ paytaca balance
18
18
  # Balance in satoshis
19
19
  paytaca balance --sats
20
20
 
21
- # Token balance
21
+ # CashToken balances only (positive balances)
22
+ paytaca balance --tokens
23
+
24
+ # BCH and CashToken balances
25
+ paytaca balance --all
26
+
27
+ # Balance for a specific token
22
28
  paytaca balance --token <category>
23
29
 
24
30
  # Testnet (chipnet)
@@ -67,6 +73,8 @@ paytaca receive --amount 0.5
67
73
  paytaca receive --token <category> --amount 100
68
74
  ```
69
75
 
76
+ The displayed address (and its token-aware variant) is auto-subscribed with Watchtower, so incoming BCH and CashTokens are monitored even at indices beyond the initial wallet scan.
77
+
70
78
  ### Derive Addresses
71
79
 
72
80
  ```bash
@@ -144,6 +152,7 @@ paytaca receive
144
152
 
145
153
  ### Check token holdings
146
154
  ```bash
155
+ paytaca balance --tokens
147
156
  paytaca token list
148
157
  paytaca token info <category>
149
158
  ```