From: Chris Duncan Date: Mon, 18 Aug 2025 16:36:16 +0000 (-0700) Subject: Migrate wallet unlock method to separate module and remove return value. X-Git-Tag: v0.10.5~41^2~67 X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=56c31e74f339cdee8da17da4b49fb7da25cfc0c3;p=libnemo.git Migrate wallet unlock method to separate module and remove return value. --- diff --git a/src/lib/wallet/index.ts b/src/lib/wallet/index.ts index 921e964..1f9873a 100644 --- a/src/lib/wallet/index.ts +++ b/src/lib/wallet/index.ts @@ -16,6 +16,7 @@ import { Rpc } from '../rpc' import { _sign } from './sign' import { default as VaultWorker } from '../vault/vault' import { WorkerQueue } from '../vault/worker-queue' +import { _unlock } from './unlock' /** * Represents a wallet containing numerous Nano accounts derived from a single @@ -338,30 +339,10 @@ export class Wallet { * @param {string} password Used previously to lock the wallet * @returns True if successfully unlocked */ - async unlock (password: string): Promise - async unlock (password: unknown): Promise { - try { - if (typeof password !== 'string') { - throw new TypeError('Password must be a string') - } - const { iv, salt, encrypted } = await _get(this.#id) - const { isUnlocked } = await this.#vault.request({ - action: 'unlock', - type: this.#type, - password: utf8.toBuffer(password), - iv, - keySalt: salt, - encrypted - }) - if (!isUnlocked) { - throw new Error('Unlock request to Vault failed') - } - clearTimeout(this.#lockTimer) - this.#lockTimer = setTimeout(() => this.lock(), 300000) - return isUnlocked - } catch (err) { - throw new Error('Failed to unlock wallet', { cause: err }) - } + async unlock (password: string): Promise { + await _unlock(this, this.#vault, password) + clearTimeout(this.#lockTimer) + this.#lockTimer = setTimeout(() => this.lock(), 300000) } /** diff --git a/src/lib/wallet/ledger.ts b/src/lib/wallet/ledger.ts index 004c5df..bcc5683 100644 --- a/src/lib/wallet/ledger.ts +++ b/src/lib/wallet/ledger.ts @@ -306,8 +306,11 @@ export class Ledger extends Wallet { * * @returns True if successfully unlocked */ - async unlock (): Promise { - return await this.connect() === 'CONNECTED' + async unlock (): Promise { + const status = await this.connect() + if (await status !== 'CONNECTED') { + throw new Error('Failed to unlock wallet', { cause: status }) + } } /** diff --git a/src/lib/wallet/unlock.ts b/src/lib/wallet/unlock.ts new file mode 100644 index 0000000..5629b57 --- /dev/null +++ b/src/lib/wallet/unlock.ts @@ -0,0 +1,30 @@ +//! SPDX-FileCopyrightText: 2025 Chris Duncan +//! SPDX-License-Identifier: GPL-3.0-or-later + +import { _get } from './get' +import { utf8 } from '../convert' +import { Wallet } from '#wallet' +import { WorkerQueue } from '../vault/worker-queue' + +export async function _unlock (wallet: Wallet, vault: WorkerQueue, password: string): Promise +export async function _unlock (wallet: Wallet, vault: WorkerQueue, password: unknown): Promise { + try { + if (typeof password !== 'string') { + throw new TypeError('Password must be a string') + } + const { iv, salt, encrypted } = await _get(wallet.id) + const { isUnlocked } = await vault.request({ + action: 'unlock', + type: wallet.type, + password: utf8.toBuffer(password), + iv, + keySalt: salt, + encrypted + }) + if (!isUnlocked) { + throw new Error('Unlock request to Vault failed') + } + } catch (err) { + throw new Error('Failed to unlock wallet', { cause: err }) + } +} diff --git a/test/test.import-wallet.mjs b/test/test.import-wallet.mjs index b15abef..ffb87d5 100644 --- a/test/test.import-wallet.mjs +++ b/test/test.import-wallet.mjs @@ -231,9 +231,8 @@ await Promise.all([ await assert.rejects(restored.verify(NANO_TEST_VECTORS.MNEMONIC)) await assert.rejects(restored.verify(NANO_TEST_VECTORS.BIP39_SEED)) - const unlockResult = await restored.unlock(NANO_TEST_VECTORS.PASSWORD) + await restored.unlock(NANO_TEST_VECTORS.PASSWORD) - assert.equal(unlockResult, true) assert.ok(await restored.verify(NANO_TEST_VECTORS.MNEMONIC)) assert.ok(await restored.verify(NANO_TEST_VECTORS.BIP39_SEED)) @@ -252,9 +251,8 @@ await Promise.all([ await assert.rejects(restored.verify(TREZOR_TEST_VECTORS.MNEMONIC_0)) await assert.rejects(restored.verify(TREZOR_TEST_VECTORS.ENTROPY_0)) - const unlockResult = await restored.unlock(NANO_TEST_VECTORS.PASSWORD) + await restored.unlock(NANO_TEST_VECTORS.PASSWORD) - assert.equal(unlockResult, true) assert.ok(await restored.verify(TREZOR_TEST_VECTORS.MNEMONIC_0)) assert.ok(await restored.verify(TREZOR_TEST_VECTORS.ENTROPY_0)) @@ -275,9 +273,8 @@ await Promise.all([ assert.ok(restored.mnemonic === undefined) assert.ok(restored.seed === undefined) - const unlockResult = await restored.unlock(NANO_TEST_VECTORS.PASSWORD) + await restored.unlock(NANO_TEST_VECTORS.PASSWORD) - assert.equal(unlockResult, true) assert.ok(await restored.verify(NANO_TEST_VECTORS.MNEMONIC)) assert.ok(await restored.verify(NANO_TEST_VECTORS.BIP39_SEED)) diff --git a/test/test.lock-unlock.mjs b/test/test.lock-unlock.mjs index 727cf02..58a7bc2 100644 --- a/test/test.lock-unlock.mjs +++ b/test/test.lock-unlock.mjs @@ -31,9 +31,8 @@ await Promise.all([ assert.ok(wallet.mnemonic === undefined) assert.ok(wallet.seed === undefined) - const unlockResult = await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) - assert.equal(unlockResult, true) assert.ok(await wallet.verify(NANO_TEST_VECTORS.MNEMONIC)) assert.ok(await wallet.verify(NANO_TEST_VECTORS.BIP39_SEED)) @@ -77,9 +76,8 @@ await Promise.all([ assert.ok(wallet.mnemonic === undefined) assert.ok(wallet.seed === undefined) - const unlockResult = await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) - assert.equal(unlockResult, true) assert.ok(await wallet.verify(TREZOR_TEST_VECTORS.MNEMONIC_0)) assert.ok(await wallet.verify(TREZOR_TEST_VECTORS.ENTROPY_0))