From e8b1c174d9860512fd6d6be6b8784074b53732eb Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Thu, 21 Aug 2025 14:26:04 -0700 Subject: [PATCH] Remove unnecessary custom import paths. Import Ledger dynamically so the dependencies can be loaded on demand. --- package.json | 5 +---- src/lib/account.ts | 2 +- src/lib/block.ts | 4 ++-- src/lib/crypto/nano-nacl.ts | 2 +- src/lib/tools.ts | 4 ++-- src/lib/vault/index.ts | 2 +- src/lib/vault/vault-worker.ts | 2 +- src/lib/wallet/accounts.ts | 4 ++-- src/lib/wallet/backup.ts | 2 +- src/lib/wallet/create.ts | 6 +++--- src/lib/wallet/destroy.ts | 4 ++-- src/lib/wallet/get.ts | 2 +- src/lib/wallet/index.ts | 2 +- src/lib/wallet/ledger.ts | 2 +- src/lib/wallet/load.ts | 9 +++++---- src/lib/wallet/lock.ts | 6 +++--- src/lib/wallet/refresh.ts | 2 +- src/lib/wallet/sign.ts | 6 +++--- src/lib/wallet/unlock.ts | 6 +++--- src/lib/wallet/unopened.ts | 2 +- src/lib/wallet/verify.ts | 4 ++-- src/main.ts | 2 +- 22 files changed, 39 insertions(+), 41 deletions(-) diff --git a/package.json b/package.json index 3743a6d..649cfec 100644 --- a/package.json +++ b/package.json @@ -54,10 +54,7 @@ "test:prod": "npm run build:prod && npm run test:node" }, "imports": { - "#crypto": "./src/lib/crypto/index.js", - "#types": "./src/types.d.ts", - "#vault": "./src/lib/vault/index.js", - "#wallet": "./src/lib/wallet/index.js" + "#types": "./src/types.d.ts" }, "dependencies": { "nano-pow": "^5.1.4" diff --git a/src/lib/account.ts b/src/lib/account.ts index 345ead0..bdb98eb 100644 --- a/src/lib/account.ts +++ b/src/lib/account.ts @@ -1,11 +1,11 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -import { Blake2b, NanoNaCl } from '#crypto' import { Key, KeyPair } from '#types' import { Block } from './block' import { ACCOUNT_KEY_BYTE_LENGTH, ACCOUNT_KEY_HEX_LENGTH, ALPHABET, PREFIX, PREFIX_LEGACY } from './constants' import { base32, bytes, hex } from './convert' +import { Blake2b, NanoNaCl } from './crypto' import { Rpc } from './rpc' /** diff --git a/src/lib/block.ts b/src/lib/block.ts index 50f6497..47f50e3 100644 --- a/src/lib/block.ts +++ b/src/lib/block.ts @@ -2,13 +2,13 @@ //! SPDX-License-Identifier: GPL-3.0-or-later 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 { Blake2b, NanoNaCl } from './crypto' import { Rpc } from './rpc' import { convert } from './tools' +import { Wallet } from './wallet' /** * Represents a block as defined by the Nano cryptocurrency protocol. diff --git a/src/lib/crypto/nano-nacl.ts b/src/lib/crypto/nano-nacl.ts index 0bc7d7b..cd829df 100644 --- a/src/lib/crypto/nano-nacl.ts +++ b/src/lib/crypto/nano-nacl.ts @@ -1,7 +1,7 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -import { Blake2b } from '#crypto' +import { Blake2b } from './blake2b' /** * Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. diff --git a/src/lib/tools.ts b/src/lib/tools.ts index 3bb2710..6e753be 100644 --- a/src/lib/tools.ts +++ b/src/lib/tools.ts @@ -1,14 +1,14 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -import { Blake2b, NanoNaCl } from '#crypto' 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 { Blake2b, NanoNaCl } from './crypto' import { Rpc } from './rpc' +import { Wallet } from './wallet' /** * Converts a decimal amount of nano from one unit divider to another. diff --git a/src/lib/vault/index.ts b/src/lib/vault/index.ts index 2932522..c4a1c06 100644 --- a/src/lib/vault/index.ts +++ b/src/lib/vault/index.ts @@ -2,8 +2,8 @@ //! SPDX-License-Identifier: GPL-3.0-or-later import { Worker as NodeWorker } from 'node:worker_threads' -import { default as VaultWorker } from './vault-worker' import { Data, NamedData } from '#types' +import { default as VaultWorker } from './vault-worker' type Task = { id: number diff --git a/src/lib/vault/vault-worker.ts b/src/lib/vault/vault-worker.ts index a4d8093..8fcef67 100644 --- a/src/lib/vault/vault-worker.ts +++ b/src/lib/vault/vault-worker.ts @@ -2,10 +2,10 @@ //! SPDX-License-Identifier: GPL-3.0-or-later import { parentPort } from 'node:worker_threads' -import { Bip39, Bip44, Blake2b, NanoNaCl } from '#crypto' import { NamedData } from '#types' import { default as Constants, BIP44_COIN_NANO } from '../constants' import { default as Convert, utf8 } from '../convert' +import { Bip39, Bip44, Blake2b, NanoNaCl } from '../crypto' import { Timer } from './timer' /** diff --git a/src/lib/wallet/accounts.ts b/src/lib/wallet/accounts.ts index a9a716b..f5aa720 100644 --- a/src/lib/wallet/accounts.ts +++ b/src/lib/wallet/accounts.ts @@ -2,9 +2,8 @@ //! SPDX-License-Identifier: GPL-3.0-or-later import { KeyPair, WalletType } from '#types' -import { Vault } from '#vault' import { Account, AccountList } from '../account' -import { Ledger } from './ledger' +import { Vault } from '../vault' export async function _accounts (type: WalletType, accounts: AccountList, vault: Vault, from: number, to: number): Promise export async function _accounts (type: WalletType, accounts: AccountList, vault: Vault, from: unknown, to: unknown): Promise { @@ -24,6 +23,7 @@ export async function _accounts (type: WalletType, accounts: AccountList, vault: if (indexes.length > 0) { const publicAccounts = [] if (type === 'Ledger') { + const { Ledger } = await import('./ledger') for (const index of indexes) { const { status, publicKey } = await Ledger.account(index) if (status !== 'OK' || publicKey == null) { diff --git a/src/lib/wallet/backup.ts b/src/lib/wallet/backup.ts index bbabd7c..860ecd3 100644 --- a/src/lib/wallet/backup.ts +++ b/src/lib/wallet/backup.ts @@ -2,8 +2,8 @@ //! SPDX-License-Identifier: GPL-3.0-or-later import { NamedData } from '#types' -import { Wallet } from '#wallet' import { Database } from '../database' +import { Wallet } from '../wallet' export async function _backup () { try { diff --git a/src/lib/wallet/create.ts b/src/lib/wallet/create.ts index 63dc9e1..34258e9 100644 --- a/src/lib/wallet/create.ts +++ b/src/lib/wallet/create.ts @@ -2,11 +2,10 @@ //! 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 { Ledger } from './ledger' +import { Vault } from '../vault' +import { Wallet } from '../wallet' import { _load } from './load' export async function _create (wallet: Wallet, vault: Vault, password?: string, mnemonicSalt?: string): Promise> @@ -18,6 +17,7 @@ export async function _create (wallet: Wallet, vault: Vault, password: unknown, type: wallet.type } if (wallet.type === 'Ledger') { + const { Ledger } = await import('./ledger') try { if (Ledger.isUnsupported) { throw new Error('Browser is unsupported') diff --git a/src/lib/wallet/destroy.ts b/src/lib/wallet/destroy.ts index 57387d9..f010240 100644 --- a/src/lib/wallet/destroy.ts +++ b/src/lib/wallet/destroy.ts @@ -1,9 +1,9 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -import { Vault } from '#vault' -import { Wallet } from '#wallet' import { Database } from '../database' +import { Vault } from '../vault' +import { Wallet } from '../wallet' export async function _destroy (wallet: Wallet, vault: Vault) { try { diff --git a/src/lib/wallet/get.ts b/src/lib/wallet/get.ts index b09e888..3e47f24 100644 --- a/src/lib/wallet/get.ts +++ b/src/lib/wallet/get.ts @@ -2,8 +2,8 @@ //! SPDX-License-Identifier: GPL-3.0-or-later import { NamedData } from '#types' -import { Wallet } from '#wallet' import { Database } from '../database' +import { Wallet } from '../wallet' export async function _get (recordId: string) { try { diff --git a/src/lib/wallet/index.ts b/src/lib/wallet/index.ts index 12b23e4..75c8987 100644 --- a/src/lib/wallet/index.ts +++ b/src/lib/wallet/index.ts @@ -2,12 +2,12 @@ //! SPDX-License-Identifier: GPL-3.0-or-later import { NamedData, WalletType } from '#types' -import { Vault } from '#vault' import { Account, AccountList } from '../account' import { Block } from '../block' import { ADDRESS_GAP } from '../constants' import { bytes } from '../convert' import { Rpc } from '../rpc' +import { Vault } from '../vault' import { _accounts } from './accounts' import { _backup } from './backup' import { _create } from './create' diff --git a/src/lib/wallet/ledger.ts b/src/lib/wallet/ledger.ts index 21b9459..9b64960 100644 --- a/src/lib/wallet/ledger.ts +++ b/src/lib/wallet/ledger.ts @@ -6,12 +6,12 @@ import { default as TransportBLE } from '@ledgerhq/hw-transport-web-ble' import { default as TransportUSB } from '@ledgerhq/hw-transport-webusb' import { default as TransportHID } from '@ledgerhq/hw-transport-webhid' import { DeviceStatus, LedgerAccountResponse, LedgerResponse, LedgerSignResponse, LedgerVersionResponse } from '#types' -import { Wallet } from '#wallet' import { Account } from '../account' import { Block } from '../block' import { BIP44_COIN_NANO, BIP44_PURPOSE, HARDENED_OFFSET } from '../constants' import { bytes, dec, hex } from '../convert' import { Rpc } from '../rpc' +import { Wallet } from '../wallet' /** * Ledger hardware wallet created by communicating with a Ledger device via ADPU diff --git a/src/lib/wallet/load.ts b/src/lib/wallet/load.ts index 22b1233..406c539 100644 --- a/src/lib/wallet/load.ts +++ b/src/lib/wallet/load.ts @@ -1,13 +1,12 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -import { Bip39 } from '#crypto' import { NamedData } from '#types' -import { Vault } from '#vault' -import { Wallet } from '#wallet' import { hex, utf8 } from '../convert' +import { Bip39 } from '../crypto' import { Database } from '../database' -import { Ledger } from './ledger' +import { Vault } from '../vault' +import { Wallet } from '../wallet' export async function _load (wallet: Wallet, vault: Vault, password: string, secret: string, mnemonicSalt?: string): Promise export async function _load (wallet: Wallet, vault: Vault, password: unknown, secret: unknown, mnemonicSalt?: unknown): Promise { @@ -17,6 +16,8 @@ export async function _load (wallet: Wallet, vault: Vault, password: unknown, se type: wallet.type } if (wallet.type === 'Ledger') { + + const { Ledger } = await import('./ledger') if (Ledger.isUnsupported) { throw new Error('Failed to initialize Ledger wallet', { cause: 'Browser is unsupported' }) } diff --git a/src/lib/wallet/lock.ts b/src/lib/wallet/lock.ts index 863654b..3f3e3ca 100644 --- a/src/lib/wallet/lock.ts +++ b/src/lib/wallet/lock.ts @@ -1,13 +1,13 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -import { Vault } from '#vault' -import { Wallet } from '#wallet' -import { Ledger } from './ledger' +import { Vault } from '../vault' +import { Wallet } from '../wallet' export async function _lock (wallet: Wallet, vault: Vault): Promise { try { if (wallet.type === 'Ledger') { + const { Ledger } = await import('./ledger') setTimeout(async () => { const devices = await globalThis.navigator.usb.getDevices() for (const device of devices) { diff --git a/src/lib/wallet/refresh.ts b/src/lib/wallet/refresh.ts index 8347907..69b5651 100644 --- a/src/lib/wallet/refresh.ts +++ b/src/lib/wallet/refresh.ts @@ -2,10 +2,10 @@ //! SPDX-License-Identifier: GPL-3.0-or-later import { BlockInfo } from '#types' -import { Wallet } from '#wallet' import { AccountList } from '../account' import { Block } from '../block' import { Rpc } from '../rpc' +import { Wallet } from '../wallet' export async function _refresh (wallet: Wallet, rpc: Rpc | string | URL, from: number, to: number): Promise export async function _refresh (wallet: Wallet, rpc: unknown, from: unknown, to: unknown): Promise { diff --git a/src/lib/wallet/sign.ts b/src/lib/wallet/sign.ts index 0148a96..918cdd8 100644 --- a/src/lib/wallet/sign.ts +++ b/src/lib/wallet/sign.ts @@ -1,11 +1,10 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -import { Vault } from '#vault' -import { Wallet } from '#wallet' import { Block } from '../block' import { bytes, hex } from '../convert' -import { Ledger } from './ledger' +import { Vault } from '../vault' +import { Wallet } from '../wallet' export async function _sign (wallet: Wallet, vault: Vault, index: number, block: Block, frontier?: Block): Promise export async function _sign (wallet: Wallet, vault: Vault, index: unknown, block: unknown, frontier?: unknown): Promise { @@ -17,6 +16,7 @@ export async function _sign (wallet: Wallet, vault: Vault, index: unknown, block throw new TypeError('Invalid Block', { cause: block }) } if (wallet.type === 'Ledger') { + const { Ledger } = await import('./ledger') const account = await wallet.account(index) if (frontier instanceof Block) { try { diff --git a/src/lib/wallet/unlock.ts b/src/lib/wallet/unlock.ts index 135a1c1..f46e3fd 100644 --- a/src/lib/wallet/unlock.ts +++ b/src/lib/wallet/unlock.ts @@ -1,16 +1,16 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -import { Vault } from '#vault' -import { Wallet } from '#wallet' import { utf8 } from '../convert' +import { Vault } from '../vault' +import { Wallet } from '../wallet' import { _get } from './get' -import { Ledger } from './ledger' export async function _unlock (wallet: Wallet, vault: Vault, password?: string): Promise export async function _unlock (wallet: Wallet, vault: Vault, password: unknown): Promise { try { if (wallet.type === 'Ledger') { + const { Ledger } = await import('./ledger') const status = await Ledger.connect() if (await status !== 'CONNECTED') { throw new Error('Failed to unlock wallet', { cause: status }) diff --git a/src/lib/wallet/unopened.ts b/src/lib/wallet/unopened.ts index 1bbcc33..6023bb8 100644 --- a/src/lib/wallet/unopened.ts +++ b/src/lib/wallet/unopened.ts @@ -1,9 +1,9 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -import { Wallet } from '#wallet' import { Account } from '../account' import { Rpc } from '../rpc' +import { Wallet } from '../wallet' export async function _unopened (wallet: Wallet, rpc: Rpc, batchSize: number, from: number): Promise export async function _unopened (wallet: Wallet, rpc: unknown, batchSize: unknown, from: unknown): Promise { diff --git a/src/lib/wallet/verify.ts b/src/lib/wallet/verify.ts index 1d530d1..8a5d22d 100644 --- a/src/lib/wallet/verify.ts +++ b/src/lib/wallet/verify.ts @@ -2,9 +2,8 @@ //! SPDX-License-Identifier: GPL-3.0-or-later import { NamedData, WalletType } from '#types' -import { Vault } from '#vault' import { hex } from '../convert' -import { Ledger } from './ledger' +import { Vault } from '../vault' export async function _verify (type: WalletType, vault: Vault, secret: string): Promise export async function _verify (type: WalletType, vault: Vault, secret: unknown): Promise { @@ -13,6 +12,7 @@ export async function _verify (type: WalletType, vault: Vault, secret: unknown): throw new TypeError('Wallet secret must be a string', { cause: typeof secret }) } if (type === 'Ledger') { + const { Ledger } = await import('./ledger') return await Ledger.verify(secret) } else { const data: NamedData = { diff --git a/src/main.ts b/src/main.ts index 9acb5d5..432b4b9 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,9 +1,9 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -import { Blake2b } from '#crypto' import { Account } from './lib/account' import { Block } from './lib/block' +import { Blake2b } from './lib/crypto' import { Rolodex } from './lib/rolodex' import { Rpc } from './lib/rpc' import { Tools } from './lib/tools' -- 2.47.3