]> git.codecow.com Git - libnemo.git/commitdiff
Extract destroy method from wallet into separate module. Clean up imports.
authorChris Duncan <chris@zoso.dev>
Tue, 19 Aug 2025 19:00:06 +0000 (12:00 -0700)
committerChris Duncan <chris@zoso.dev>
Tue, 19 Aug 2025 19:00:06 +0000 (12:00 -0700)
19 files changed:
package.json
src/lib/block.ts
src/lib/tools.ts
src/lib/wallet/accounts.ts
src/lib/wallet/backup.ts
src/lib/wallet/create.ts
src/lib/wallet/destroy.ts [new file with mode: 0644]
src/lib/wallet/get.ts
src/lib/wallet/index.ts
src/lib/wallet/ledger.ts
src/lib/wallet/load.ts
src/lib/wallet/lock.ts
src/lib/wallet/refresh.ts
src/lib/wallet/restore.ts
src/lib/wallet/sign.ts
src/lib/wallet/unlock.ts
src/lib/wallet/unopened.ts
src/lib/wallet/verify.ts
src/main.ts

index 5906ce9a849d05a8d9e9ed89d08ebdaaaed3438f..3743a6d45c3f174da6f2611b22213cf5022c7c17 100644 (file)
@@ -56,6 +56,7 @@
        "imports": {
                "#crypto": "./src/lib/crypto/index.js",
                "#types": "./src/types.d.ts",
+               "#vault": "./src/lib/vault/index.js",
                "#wallet": "./src/lib/wallet/index.js"
        },
        "dependencies": {
index 37c7fb70df4455c6eff3e0315f8cf6dc6c193b55..7381ef1acd34b7f9aedcfce59730c99dcfadb105 100644 (file)
@@ -3,12 +3,12 @@
 
 import { NanoPow } from 'nano-pow'
 import { Blake2b, NanoNaCl } from '#crypto'
+import { Wallet } from '#wallet'
 import { Account } from './account'
 import { BURN_PUBLIC_KEY, PREAMBLE, DIFFICULTY_RECEIVE, DIFFICULTY_SEND, UNITS } from './constants'
 import { bytes, dec, hex } from './convert'
 import { Rpc } from './rpc'
 import { convert } from './tools'
-import { Wallet } from '#wallet'
 
 /**
 * Represents a block as defined by the Nano cryptocurrency protocol.
@@ -428,7 +428,7 @@ export class Block {
                                        await wallet.sign(param, this)
                                } else if (typeof input === 'number') {
                                        const index = input
-                                       const { Ledger } = await import('./wallet/ledger')
+                                       const { Ledger } = await import('#wallet')
                                        const ledger = await Ledger.create()
                                        await ledger.connect()
                                        if (param && param instanceof Block) {
index 39d5d8dafb1739823f36f0aabd79096d1ad7c522..bf8495c643f9cd5460ad214cc26387b9219f9aa0 100644 (file)
@@ -2,21 +2,14 @@
 //! SPDX-License-Identifier: GPL-3.0-or-later
 
 import { Blake2b, NanoNaCl } from '#crypto'
-import { Key } from '#types'
+import { Key, SweepResult } from '#types'
 import { Wallet } from '#wallet'
 import { Account } from './account'
 import { Block } from './block'
 import { MAX_SUPPLY, UNITS } from './constants'
 import { bytes, hex } from './convert'
-import { Ledger } from './wallet/ledger'
 import { Rpc } from './rpc'
 
-type SweepResult = {
-       status: "success" | "error"
-       address: string
-       message: string
-}
-
 /**
 * Converts a decimal amount of nano from one unit divider to another.
 *
@@ -124,7 +117,7 @@ export async function sign (key: Key, ...input: string[]): Promise<string> {
 * them all to a single recipient address. Hardware wallets are unsupported.
 *
 * @param {Rpc|string|URL} rpc - RPC node information required to refresh accounts, calculate PoW, and process blocks
-* @param {(Wallet|Ledger)} wallet - Wallet from which to sweep funds
+* @param {(Wallet)} wallet - Wallet from which to sweep funds
 * @param {string} recipient - Destination address for all swept funds
 * @param {number} from - Starting account index to sweep
 * @param {number} to - Ending account index to sweep
@@ -132,7 +125,7 @@ export async function sign (key: Key, ...input: string[]): Promise<string> {
  */
 export async function sweep (
        rpc: Rpc | string | URL,
-       wallet: Wallet | Ledger,
+       wallet: Wallet,
        recipient: string,
        from: number = 0,
        to: number = from
index 84ab89beea8328541578b7c60f99ab6f4b772abc..3aa3f9629012e8e08ad4e1fd0c9aa824fc0ec182 100644 (file)
@@ -1,9 +1,9 @@
 //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
 //! SPDX-License-Identifier: GPL-3.0-or-later
 
-import { Account, AccountList } from '../account'
-import { Vault } from '../vault'
 import { KeyPair } from '#types'
+import { Vault } from '#vault'
+import { Account, AccountList } from '../account'
 
 export async function _accounts (accounts: AccountList, vault: Vault, from: number, to: number): Promise<AccountList>
 export async function _accounts (accounts: AccountList, vault: Vault, from: unknown, to: unknown): Promise<AccountList> {
index 76752eb9b2a2e8445e25f8a6cc0e49ae4c161ac2..c668aa39607860caef786791d53e90c653cb9719 100644 (file)
@@ -1,9 +1,9 @@
 //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
 //! SPDX-License-Identifier: GPL-3.0-or-later
 
-import { Database } from '../database'
 import { NamedData } from '#types'
 import { Wallet } from '#wallet'
+import { Database } from '../database'
 
 export async function _backup () {
        try {
index a9c65be76a893d069377191d6dcc284bc7922d2b..8b83af8185f4cacb5cf8da764841a89b3cdc927b 100644 (file)
@@ -1,12 +1,12 @@
 //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
 //! SPDX-License-Identifier: GPL-3.0-or-later
 
+import { NamedData } from '#types'
+import { Vault } from '#vault'
+import { Wallet } from '#wallet'
 import { utf8 } from '../convert'
 import { Database } from '../database'
 import { _load } from './load'
-import { Wallet } from '.'
-import { Vault } from '../vault'
-import { NamedData } from '#types'
 
 export async function _create (wallet: Wallet, vault: Vault, password: string, mnemonicSalt?: string): Promise<NamedData<ArrayBuffer>>
 export async function _create (wallet: Wallet, vault: Vault, password: unknown, mnemonicSalt?: unknown): Promise<NamedData<ArrayBuffer>> {
diff --git a/src/lib/wallet/destroy.ts b/src/lib/wallet/destroy.ts
new file mode 100644 (file)
index 0000000..133294a
--- /dev/null
@@ -0,0 +1,19 @@
+//! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
+//! SPDX-License-Identifier: GPL-3.0-or-later
+
+import { Vault } from '#vault'
+import { Wallet } from '#wallet'
+import { Database } from '../database'
+
+export async function _destroy (wallet: Wallet, vault: Vault) {
+       try {
+               vault.terminate()
+               const isDeleted = await Database.delete(wallet.id, Wallet.DB_NAME)
+               if (!isDeleted) {
+                       throw new Error('Failed to delete wallet from database')
+               }
+       } catch (err) {
+               console.error(err)
+               throw new Error('Failed to destroy wallet', { cause: err })
+       }
+}
index 9a5f1c42bf51365545d322daeab32277cc3870e5..b09e8880f1f19ec71a6bf81ac57f154e93a2f209 100644 (file)
@@ -1,9 +1,9 @@
 //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
 //! SPDX-License-Identifier: GPL-3.0-or-later
 
-import { Database } from '../database'
 import { NamedData } from '#types'
 import { Wallet } from '#wallet'
+import { Database } from '../database'
 
 export async function _get (recordId: string) {
        try {
index 6f7d2020947e1cc672ff53401f718c9f3626bd30..3a32e9f72fe8060b73d3686d97c1f139bd699b83 100644 (file)
@@ -1,26 +1,28 @@
 //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>\r
 //! SPDX-License-Identifier: GPL-3.0-or-later\r
 \r
-import { KeyPair, NamedData, WalletType } from '#types'\r
+import { NamedData, WalletType } from '#types'\r
+import { Vault } from '#vault'\r
 import { Account, AccountList } from '../account'\r
-import { _accounts } from './accounts'\r
-import { _backup } from './backup'\r
 import { Block } from '../block'\r
 import { ADDRESS_GAP } from '../constants'\r
-import { bytes, hex, utf8 } from '../convert'\r
+import { bytes } from '../convert'\r
+import { Rpc } from '../rpc'\r
+import { _accounts } from './accounts'\r
+import { _backup } from './backup'\r
 import { _create } from './create'\r
-import { Database } from '../database'\r
+import { _destroy } from './destroy'\r
 import { _get } from './get'\r
 import { _load } from './load'\r
 import { _lock } from './lock'\r
 import { _refresh } from './refresh'\r
 import { _restore } from './restore'\r
-import { Rpc } from '../rpc'\r
 import { _sign } from './sign'\r
 import { _unlock } from './unlock'\r
-import { Vault } from '../vault'\r
-import { _verify } from './verify'\r
 import { _unopened } from './unopened'\r
+import { _verify } from './verify'\r
+\r
+export { Ledger } from './ledger'\r
 \r
 /**\r
 * Represents a wallet containing numerous Nano accounts derived from a single\r
@@ -233,16 +235,7 @@ export class Wallet {
        * allow garbage collection, and terminates vault worker.\r
        */\r
        async destroy (): Promise<void> {\r
-               try {\r
-                       const isDeleted = await Database.delete(this.#id, Wallet.DB_NAME)\r
-                       if (!isDeleted) {\r
-                               throw new Error('Failed to delete wallet from database')\r
-                       }\r
-                       this.#vault.terminate()\r
-               } catch (err) {\r
-                       console.error(err)\r
-                       throw new Error('Failed to destroy wallet', { cause: err })\r
-               }\r
+               return await _destroy(this, this.#vault)\r
        }\r
 \r
        /**\r
index 54767e971220a9d88f0be91b2f7d0cc11ed47376..54a5a038baf34d9216dc92299a0322e08dbcfd38 100644 (file)
@@ -5,14 +5,14 @@ import { ledgerUSBVendorId } from '@ledgerhq/devices'
 import { default as TransportBLE } from '@ledgerhq/hw-transport-web-ble'\r
 import { default as TransportUSB } from '@ledgerhq/hw-transport-webusb'\r
 import { default as TransportHID } from '@ledgerhq/hw-transport-webhid'\r
+import { DeviceStatus, LedgerAccountResponse, LedgerResponse, LedgerSignResponse, LedgerVersionResponse } from '#types'\r
+import { Wallet } from '#wallet'\r
 import { Account, AccountList } from '../account'\r
 import { Block } from '../block'\r
 import { BIP44_COIN_NANO, BIP44_PURPOSE, HARDENED_OFFSET } from '../constants'\r
 import { bytes, dec, hex } from '../convert'\r
 import { Database } from '../database'\r
 import { Rpc } from '../rpc'\r
-import { Wallet } from '.'\r
-import { DeviceStatus, LedgerAccountResponse, LedgerResponse, LedgerSignResponse, LedgerVersionResponse } from '#types'\r
 \r
 /**\r
 * Ledger hardware wallet created by communicating with a Ledger device via ADPU\r
index 684783a8b292ae2ee2d447510b5c4b4f1aad27d9..d19558b814e9b7e5e79c28a851502c54aa8ee2cc 100644 (file)
@@ -3,10 +3,10 @@
 
 import { Bip39 } from '#crypto'
 import { NamedData } from '#types'
+import { Vault } from '#vault'
+import { Wallet } from '#wallet'
 import { hex, utf8 } from '../convert'
 import { Database } from '../database'
-import { Wallet } from '#wallet'
-import { Vault } from '../vault'
 
 export async function _load (wallet: Wallet, vault: Vault, password: string, secret: string, mnemonicSalt?: string): Promise<void>
 export async function _load (wallet: Wallet, vault: Vault, password: unknown, secret: unknown, mnemonicSalt?: unknown): Promise<void> {
index 16d9b804fb16ed4a796bd975b89ac3748af4ecf2..75cccbb7728066424863316666e4d75de4956219 100644 (file)
@@ -1,7 +1,7 @@
 //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
 //! SPDX-License-Identifier: GPL-3.0-or-later
 
-import { Vault } from '../vault'
+import { Vault } from '#vault'
 
 export async function _lock (vault: Vault): Promise<void>
 export async function _lock (vault: Vault): Promise<void> {
index 1c8ac68f3403bfa5306492b14f997f39d7c40766..148fc144415a8d90564c4be1fe2dcc2145f9706e 100644 (file)
@@ -1,11 +1,9 @@
 //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
 //! SPDX-License-Identifier: GPL-3.0-or-later
 
-import { Account, AccountList } from '../account'
-import { Rpc } from '../rpc'
-import { Vault } from '../vault'
 import { Wallet } from '#wallet'
-import { KeyPair } from '#types'
+import { AccountList } from '../account'
+import { Rpc } from '../rpc'
 
 export async function _refresh (wallet: Wallet, rpc: Rpc | string | URL, from: number, to: number): Promise<AccountList>
 export async function _refresh (wallet: Wallet, rpc: unknown, from: unknown, to: unknown): Promise<AccountList> {
index 849dfd5d421f0c70b17e244e2d6b784ea0e37f66..d2e6d3a76113f48cc5ee19b16968b818d3b1b229 100644 (file)
@@ -3,7 +3,6 @@
 
 import { _backup } from './backup'
 import { _get } from './get'
-import { WalletType } from '#types'
 
 export async function _restore (id?: unknown) {
        try {
index 8346401560e19b48eded148d4095737d565ab746..b852aa7ef988ae715066e5c0edfdc0a3aac64e9b 100644 (file)
@@ -1,9 +1,9 @@
 //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
 //! SPDX-License-Identifier: GPL-3.0-or-later
 
+import { Vault } from '#vault'
 import { Block } from '../block'
 import { bytes, hex } from '../convert'
-import { Vault } from '../vault'
 
 export async function _sign (vault: Vault, index: number, block: Block): Promise<void>
 export async function _sign (vault: Vault, index: unknown, block: unknown): Promise<void> {
index 0d6292542b9922916826929cb5e68bff1de02042..90209aeb12f28dc590cc1e1d4758b6f1db3128c6 100644 (file)
@@ -1,10 +1,10 @@
 //! 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 { Vault } from '#vault'
 import { Wallet } from '#wallet'
-import { Vault } from '../vault'
+import { utf8 } from '../convert'
+import { _get } from './get'
 
 export async function _unlock (wallet: Wallet, vault: Vault, password: string): Promise<void>
 export async function _unlock (wallet: Wallet, vault: Vault, password: unknown): Promise<void> {
index 4b0e17d77a5799348ef7496af027886cd865363d..1bbcc33c08b28c91a0e78b6ab3a8322cd7d8bed4 100644 (file)
@@ -1,12 +1,9 @@
 //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
 //! SPDX-License-Identifier: GPL-3.0-or-later
 
+import { Wallet } from '#wallet'
 import { Account } from '../account'
-import { hex } from '../convert'
 import { Rpc } from '../rpc'
-import { Vault } from '../vault'
-import { Wallet } from '#wallet'
-import { NamedData } from '#types'
 
 export async function _unopened (wallet: Wallet, rpc: Rpc, batchSize: number, from: number): Promise<Account>
 export async function _unopened (wallet: Wallet, rpc: unknown, batchSize: unknown, from: unknown): Promise<Account> {
index 01526b7f6589a4f6dc5915e59ba0c87b6c734ccd..9fcf2679739f2a3a46a6951970e70260a2061a81 100644 (file)
@@ -1,9 +1,9 @@
 //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
 //! SPDX-License-Identifier: GPL-3.0-or-later
 
-import { hex } from '../convert'
-import { Vault } from '../vault'
 import { NamedData } from '#types'
+import { Vault } from '#vault'
+import { hex } from '../convert'
 
 export async function _verify (vault: Vault, secret: string): Promise<boolean>
 export async function _verify (vault: Vault, secret: unknown): Promise<boolean> {
index e94f6c9547c7a4e92a2139b92bc0f7908530c016..e3746f2cea51dba453a4d89e3543182525a74e36 100644 (file)
@@ -2,21 +2,20 @@
 //! SPDX-License-Identifier: GPL-3.0-or-later
 
 import { Blake2b } from '#crypto'
-import { Wallet } from '#wallet'
+import { Ledger, Wallet } from '#wallet'
 import { Account } from './lib/account'
 import { Block } from './lib/block'
-import { Ledger } from './lib/wallet/ledger'
 import { Rolodex } from './lib/rolodex'
 import { Rpc } from './lib/rpc'
 import { Tools } from './lib/tools'
 
 export {
-       Blake2b,
-       Wallet,
        Account,
+       Blake2b,
        Block,
        Ledger,
        Rolodex,
        Rpc,
-       Tools
+       Tools,
+       Wallet
 }