]> git.codecow.com Git - libnemo.git/commitdiff
Migrate wallet unlock method to separate module and remove return value.
authorChris Duncan <chris@zoso.dev>
Mon, 18 Aug 2025 16:36:16 +0000 (09:36 -0700)
committerChris Duncan <chris@zoso.dev>
Mon, 18 Aug 2025 16:36:16 +0000 (09:36 -0700)
src/lib/wallet/index.ts
src/lib/wallet/ledger.ts
src/lib/wallet/unlock.ts [new file with mode: 0644]
test/test.import-wallet.mjs
test/test.lock-unlock.mjs

index 921e9641f6c9fef326d92a8f65c330df984ce668..1f9873ab0ce1e4576dd850893e27d5febd08d766 100644 (file)
@@ -16,6 +16,7 @@ import { Rpc } from '../rpc'
 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
@@ -338,30 +339,10 @@ export class Wallet {
        * @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
index 004c5df8c74a3e9198744ef128aa8d71be4f489b..bcc5683903b7b7d46b7c439f570c37c91c740297 100644 (file)
@@ -306,8 +306,11 @@ export class Ledger extends Wallet {
        *\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
diff --git a/src/lib/wallet/unlock.ts b/src/lib/wallet/unlock.ts
new file mode 100644 (file)
index 0000000..5629b57
--- /dev/null
@@ -0,0 +1,30 @@
+//! 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 })
+       }
+}
index b15abeffa5bd7207e4a4a4e596db77d5b73ba531..ffb87d5f8bd88e0fcd504ab622ad605b9150cf99 100644 (file)
@@ -231,9 +231,8 @@ await Promise.all([
                        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
@@ -252,9 +251,8 @@ await Promise.all([
                        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
@@ -275,9 +273,8 @@ await Promise.all([
                        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
index 727cf0252d1fd314e62dbf08ce037a798e3413cd..58a7bc26de0f8552c0def4c74752a1ffadd1bcc5 100644 (file)
@@ -31,9 +31,8 @@ await Promise.all([
                        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
@@ -77,9 +76,8 @@ await Promise.all([
                        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