import { _sign } from './sign'\r
import { default as VaultWorker } from '../vault/vault'\r
import { WorkerQueue } from '../vault/worker-queue'\r
+import { _unlock } from './unlock'\r
\r
/**\r
* Represents a wallet containing numerous Nano accounts derived from a single\r
* @param {string} password Used previously to lock the wallet\r
* @returns True if successfully unlocked\r
*/\r
- async unlock (password: string): Promise<boolean>\r
- async unlock (password: unknown): Promise<boolean> {\r
- try {\r
- if (typeof password !== 'string') {\r
- throw new TypeError('Password must be a string')\r
- }\r
- const { iv, salt, encrypted } = await _get(this.#id)\r
- const { isUnlocked } = await this.#vault.request<boolean>({\r
- action: 'unlock',\r
- type: this.#type,\r
- password: utf8.toBuffer(password),\r
- iv,\r
- keySalt: salt,\r
- encrypted\r
- })\r
- if (!isUnlocked) {\r
- throw new Error('Unlock request to Vault failed')\r
- }\r
- clearTimeout(this.#lockTimer)\r
- this.#lockTimer = setTimeout(() => this.lock(), 300000)\r
- return isUnlocked\r
- } catch (err) {\r
- throw new Error('Failed to unlock wallet', { cause: err })\r
- }\r
+ async unlock (password: string): Promise<void> {\r
+ await _unlock(this, this.#vault, password)\r
+ clearTimeout(this.#lockTimer)\r
+ this.#lockTimer = setTimeout(() => this.lock(), 300000)\r
}\r
\r
/**\r
*\r
* @returns True if successfully unlocked\r
*/\r
- async unlock (): Promise<boolean> {\r
- return await this.connect() === 'CONNECTED'\r
+ async unlock (): Promise<void> {\r
+ const status = await this.connect()\r
+ if (await status !== 'CONNECTED') {\r
+ throw new Error('Failed to unlock wallet', { cause: status })\r
+ }\r
}\r
\r
/**\r
--- /dev/null
+//! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
+//! 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<void>
+export async function _unlock (wallet: Wallet, vault: WorkerQueue, password: unknown): Promise<void> {
+ 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<boolean>({
+ 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 })
+ }
+}
await assert.rejects(restored.verify(NANO_TEST_VECTORS.MNEMONIC))\r
await assert.rejects(restored.verify(NANO_TEST_VECTORS.BIP39_SEED))\r
\r
- const unlockResult = await restored.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+ await restored.unlock(NANO_TEST_VECTORS.PASSWORD)\r
\r
- assert.equal(unlockResult, true)\r
assert.ok(await restored.verify(NANO_TEST_VECTORS.MNEMONIC))\r
assert.ok(await restored.verify(NANO_TEST_VECTORS.BIP39_SEED))\r
\r
await assert.rejects(restored.verify(TREZOR_TEST_VECTORS.MNEMONIC_0))\r
await assert.rejects(restored.verify(TREZOR_TEST_VECTORS.ENTROPY_0))\r
\r
- const unlockResult = await restored.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+ await restored.unlock(NANO_TEST_VECTORS.PASSWORD)\r
\r
- assert.equal(unlockResult, true)\r
assert.ok(await restored.verify(TREZOR_TEST_VECTORS.MNEMONIC_0))\r
assert.ok(await restored.verify(TREZOR_TEST_VECTORS.ENTROPY_0))\r
\r
assert.ok(restored.mnemonic === undefined)\r
assert.ok(restored.seed === undefined)\r
\r
- const unlockResult = await restored.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+ await restored.unlock(NANO_TEST_VECTORS.PASSWORD)\r
\r
- assert.equal(unlockResult, true)\r
assert.ok(await restored.verify(NANO_TEST_VECTORS.MNEMONIC))\r
assert.ok(await restored.verify(NANO_TEST_VECTORS.BIP39_SEED))\r
\r
assert.ok(wallet.mnemonic === undefined)\r
assert.ok(wallet.seed === undefined)\r
\r
- const unlockResult = await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+ await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
\r
- assert.equal(unlockResult, true)\r
assert.ok(await wallet.verify(NANO_TEST_VECTORS.MNEMONIC))\r
assert.ok(await wallet.verify(NANO_TEST_VECTORS.BIP39_SEED))\r
\r
assert.ok(wallet.mnemonic === undefined)\r
assert.ok(wallet.seed === undefined)\r
\r
- const unlockResult = await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+ await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
\r
- assert.equal(unlockResult, true)\r
assert.ok(await wallet.verify(TREZOR_TEST_VECTORS.MNEMONIC_0))\r
assert.ok(await wallet.verify(TREZOR_TEST_VECTORS.ENTROPY_0))\r
\r