paytaca-cli 0.5.2 → 0.6.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.
- package/README.md +5 -1
- package/dist/commands/wallet.d.ts +14 -0
- package/dist/commands/wallet.d.ts.map +1 -1
- package/dist/commands/wallet.js +241 -2
- package/dist/commands/wallet.js.map +1 -1
- package/dist/commands/wallet.test.d.ts +2 -0
- package/dist/commands/wallet.test.d.ts.map +1 -0
- package/dist/commands/wallet.test.js +68 -0
- package/dist/commands/wallet.test.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -36,9 +36,13 @@ 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
|
|
@@ -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;
|
|
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"}
|
package/dist/commands/wallet.js
CHANGED
|
@@ -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 @@
|
|
|
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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"}
|