From c8b32610ce8d081645328e1805308bed9f8268ba Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Mon, 18 Aug 2025 12:31:02 -0700 Subject: [PATCH] Fix vault import design. --- src/lib/vault/{worker-queue.ts => index.ts} | 15 ++++++++------- src/lib/wallet/create.ts | 6 +++--- src/lib/wallet/index.ts | 7 +++---- src/lib/wallet/load.ts | 6 +++--- src/lib/wallet/lock.ts | 6 +++--- src/lib/wallet/sign.ts | 6 +++--- src/lib/wallet/unlock.ts | 6 +++--- 7 files changed, 26 insertions(+), 26 deletions(-) rename src/lib/vault/{worker-queue.ts => index.ts} (88%) diff --git a/src/lib/vault/worker-queue.ts b/src/lib/vault/index.ts similarity index 88% rename from src/lib/vault/worker-queue.ts rename to src/lib/vault/index.ts index 5202f7d..67a38f6 100644 --- a/src/lib/vault/worker-queue.ts +++ b/src/lib/vault/index.ts @@ -2,6 +2,7 @@ //! SPDX-License-Identifier: GPL-3.0-or-later import { Worker as NodeWorker } from 'node:worker_threads' +import { default as VaultWorker } from './vault' import { Data, NamedData } from '#types' type Task = { @@ -14,9 +15,9 @@ type Task = { /** * Processes a queue of tasks using Web Workers. */ -export class WorkerQueue { - static #instances: WorkerQueue[] = [] - static get instances (): WorkerQueue[] { return this.#instances } +export class Vault { + static #instances: Vault[] = [] + static get instances (): Vault[] { return this.#instances } #job?: Task #isIdle: boolean @@ -30,16 +31,16 @@ export class WorkerQueue { * * @param {string} worker - Stringified worker class body */ - constructor (worker: string) { + constructor () { this.#isIdle = true this.#isTerminated = false this.#queue = [] - this.#url = URL.createObjectURL(new Blob([worker], { type: 'text/javascript' })) + this.#url = URL.createObjectURL(new Blob([VaultWorker], { type: 'text/javascript' })) BROWSER: this.#worker = new Worker(this.#url, { type: 'module' }) BROWSER: this.#worker.addEventListener('message', message => { this.#report(message.data) }) - NODE: this.#worker = new NodeWorker(worker, { + NODE: this.#worker = new NodeWorker(VaultWorker, { eval: true, stderr: false, stdout: false @@ -47,7 +48,7 @@ export class WorkerQueue { NODE: this.#worker.on('message', message => { this.#report(message) }) - WorkerQueue.#instances.push(this) + Vault.#instances.push(this) } async prioritize (data: NamedData): Promise> { diff --git a/src/lib/wallet/create.ts b/src/lib/wallet/create.ts index 4aedba5..706b18c 100644 --- a/src/lib/wallet/create.ts +++ b/src/lib/wallet/create.ts @@ -5,11 +5,11 @@ import { utf8 } from '../convert' import { Database } from '../database' import { _load } from './load' import { Wallet } from '.' -import { WorkerQueue } from '../vault/worker-queue' +import { Vault } from '../vault' import { NamedData } from '#types' -export async function _create (wallet: Wallet, vault: WorkerQueue, password: string, mnemonicSalt?: string): Promise> -export async function _create (wallet: Wallet, vault: WorkerQueue, password: unknown, mnemonicSalt?: unknown): Promise> { +export async function _create (wallet: Wallet, vault: Vault, password: string, mnemonicSalt?: string): Promise> +export async function _create (wallet: Wallet, vault: Vault, password: unknown, mnemonicSalt?: unknown): Promise> { if (typeof password !== 'string') { throw new TypeError('Invalid password', { cause: typeof password }) } diff --git a/src/lib/wallet/index.ts b/src/lib/wallet/index.ts index 1a3006b..8569b5b 100644 --- a/src/lib/wallet/index.ts +++ b/src/lib/wallet/index.ts @@ -15,9 +15,8 @@ import { _lock } from './lock' import { _restore } from './restore' import { Rpc } from '../rpc' import { _sign } from './sign' -import { default as VaultWorker } from '../vault/vault' -import { WorkerQueue } from '../vault/worker-queue' import { _unlock } from './unlock' +import { Vault } from '../vault' /** * Represents a wallet containing numerous Nano accounts derived from a single @@ -113,8 +112,8 @@ export class Wallet { Wallet.#isInternal = false this.#accounts = new AccountList() this.#id = id ?? crypto.randomUUID() - this.#vault = new WorkerQueue(VaultWorker) this.#type = type + this.#vault = new Vault() } /** @@ -398,7 +397,7 @@ export class Wallet { #accounts: AccountList #id: string #mnemonic?: ArrayBuffer - #vault: WorkerQueue #seed?: ArrayBuffer #type: WalletType + #vault: Vault } diff --git a/src/lib/wallet/load.ts b/src/lib/wallet/load.ts index b663acc..bd0f77f 100644 --- a/src/lib/wallet/load.ts +++ b/src/lib/wallet/load.ts @@ -6,10 +6,10 @@ import { NamedData } from '#types' import { hex, utf8 } from '../convert' import { Database } from '../database' import { Wallet } from '#wallet' -import { WorkerQueue } from '../vault/worker-queue' +import { Vault } from '../vault' -export async function _load (wallet: Wallet, vault: WorkerQueue, password: string, secret: string, mnemonicSalt?: string): Promise -export async function _load (wallet: Wallet, vault: WorkerQueue, password: unknown, secret: unknown, mnemonicSalt?: unknown): Promise { +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 { if (typeof password !== 'string') { throw new TypeError('Password must be a string') } diff --git a/src/lib/wallet/lock.ts b/src/lib/wallet/lock.ts index ed58d86..16d9b80 100644 --- a/src/lib/wallet/lock.ts +++ b/src/lib/wallet/lock.ts @@ -1,10 +1,10 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -import { WorkerQueue } from '../vault/worker-queue' +import { Vault } from '../vault' -export async function _lock (vault: WorkerQueue): Promise -export async function _lock (vault: WorkerQueue): Promise { +export async function _lock (vault: Vault): Promise +export async function _lock (vault: Vault): Promise { try { const { isLocked } = await vault.request({ action: 'lock' diff --git a/src/lib/wallet/sign.ts b/src/lib/wallet/sign.ts index 358526b..8346401 100644 --- a/src/lib/wallet/sign.ts +++ b/src/lib/wallet/sign.ts @@ -3,10 +3,10 @@ import { Block } from '../block' import { bytes, hex } from '../convert' -import { WorkerQueue } from '../vault/worker-queue' +import { Vault } from '../vault' -export async function _sign (vault: WorkerQueue, index: number, block: Block): Promise -export async function _sign (vault: WorkerQueue, index: unknown, block: unknown): Promise { +export async function _sign (vault: Vault, index: number, block: Block): Promise +export async function _sign (vault: Vault, index: unknown, block: unknown): Promise { try { if (typeof index !== 'number') { throw new TypeError('Index must be a number', { cause: index }) diff --git a/src/lib/wallet/unlock.ts b/src/lib/wallet/unlock.ts index 5629b57..0d62925 100644 --- a/src/lib/wallet/unlock.ts +++ b/src/lib/wallet/unlock.ts @@ -4,10 +4,10 @@ import { _get } from './get' import { utf8 } from '../convert' import { Wallet } from '#wallet' -import { WorkerQueue } from '../vault/worker-queue' +import { Vault } from '../vault' -export async function _unlock (wallet: Wallet, vault: WorkerQueue, password: string): Promise -export async function _unlock (wallet: Wallet, vault: WorkerQueue, password: unknown): Promise { +export async function _unlock (wallet: Wallet, vault: Vault, password: string): Promise +export async function _unlock (wallet: Wallet, vault: Vault, password: unknown): Promise { try { if (typeof password !== 'string') { throw new TypeError('Password must be a string') -- 2.47.3