"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": {
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.
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) {
//! 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.
*
* 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
*/
export async function sweep (
rpc: Rpc | string | URL,
- wallet: Wallet | Ledger,
+ wallet: Wallet,
recipient: string,
from: number = 0,
to: number = from
//! 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> {
//! 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 {
//! 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>> {
--- /dev/null
+//! 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 })
+ }
+}
//! 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 {
//! 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
* 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
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
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> {
//! 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> {
//! 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> {
import { _backup } from './backup'
import { _get } from './get'
-import { WalletType } from '#types'
export async function _restore (id?: unknown) {
try {
//! 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> {
//! 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> {
//! 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> {
//! 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> {
//! 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
}