"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"
//! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>\r
//! SPDX-License-Identifier: GPL-3.0-or-later\r
\r
-import { Blake2b, NanoNaCl } from '#crypto'\r
import { Key, KeyPair } from '#types'\r
import { Block } from './block'\r
import { ACCOUNT_KEY_BYTE_LENGTH, ACCOUNT_KEY_HEX_LENGTH, ALPHABET, PREFIX, PREFIX_LEGACY } from './constants'\r
import { base32, bytes, hex } from './convert'\r
+import { Blake2b, NanoNaCl } from './crypto'\r
import { Rpc } from './rpc'\r
\r
/**\r
//! 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.
//! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>\r
//! SPDX-License-Identifier: GPL-3.0-or-later\r
\r
-import { Blake2b } from '#crypto'\r
+import { Blake2b } from './blake2b'\r
\r
/**\r
* Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\r
//! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
//! 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.
//! 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
//! 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'
/**
//! 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<AccountList>
export async function _accounts (type: WalletType, accounts: AccountList, vault: Vault, from: unknown, to: unknown): Promise<AccountList> {
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) {
//! 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 {
//! 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<NamedData<ArrayBuffer>>
type: wallet.type
}
if (wallet.type === 'Ledger') {
+ const { Ledger } = await import('./ledger')
try {
if (Ledger.isUnsupported) {
throw new Error('Browser is unsupported')
//! 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'
+import { Vault } from '../vault'
+import { Wallet } from '../wallet'
export async function _destroy (wallet: Wallet, vault: Vault) {
try {
//! 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 {
//! SPDX-License-Identifier: GPL-3.0-or-later\r
\r
import { NamedData, WalletType } from '#types'\r
-import { Vault } from '#vault'\r
import { Account, AccountList } from '../account'\r
import { Block } from '../block'\r
import { ADDRESS_GAP } from '../constants'\r
import { bytes } from '../convert'\r
import { Rpc } from '../rpc'\r
+import { Vault } from '../vault'\r
import { _accounts } from './accounts'\r
import { _backup } from './backup'\r
import { _create } from './create'\r
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
//! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
//! 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<void>
export async function _load (wallet: Wallet, vault: Vault, password: unknown, secret: unknown, mnemonicSalt?: unknown): Promise<void> {
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' })
}
//! 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 { Ledger } from './ledger'
+import { Vault } from '../vault'
+import { Wallet } from '../wallet'
export async function _lock (wallet: Wallet, vault: Vault): Promise<void> {
try {
if (wallet.type === 'Ledger') {
+ const { Ledger } = await import('./ledger')
setTimeout(async () => {
const devices = await globalThis.navigator.usb.getDevices()
for (const device of devices) {
//! 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<AccountList>
export async function _refresh (wallet: Wallet, rpc: unknown, from: unknown, to: unknown): Promise<AccountList> {
//! 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 { 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<void>
export async function _sign (wallet: Wallet, vault: Vault, index: unknown, block: unknown, frontier?: unknown): Promise<void> {
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 {
//! 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 { 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<void>
export async function _unlock (wallet: Wallet, vault: Vault, password: unknown): Promise<void> {
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 })
//! 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 { Rpc } from '../rpc'
+import { Wallet } from '../wallet'
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-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<boolean>
export async function _verify (type: WalletType, vault: Vault, secret: unknown): Promise<boolean> {
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 = {
//! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
//! 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'