//! 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 = {
/**
* 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
*
* @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
NODE: this.#worker.on('message', message => {
this.#report(message)
})
- WorkerQueue.#instances.push(this)
+ Vault.#instances.push(this)
}
async prioritize<T extends Data> (data: NamedData): Promise<NamedData<T>> {
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<NamedData<ArrayBuffer>>
-export async function _create (wallet: Wallet, vault: WorkerQueue, password: unknown, mnemonicSalt?: unknown): Promise<NamedData<ArrayBuffer>> {
+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>> {
if (typeof password !== 'string') {
throw new TypeError('Invalid password', { cause: typeof password })
}
import { _restore } from './restore'\r
import { Rpc } from '../rpc'\r
import { _sign } from './sign'\r
-import { default as VaultWorker } from '../vault/vault'\r
-import { WorkerQueue } from '../vault/worker-queue'\r
import { _unlock } from './unlock'\r
+import { Vault } from '../vault'\r
\r
/**\r
* Represents a wallet containing numerous Nano accounts derived from a single\r
Wallet.#isInternal = false\r
this.#accounts = new AccountList()\r
this.#id = id ?? crypto.randomUUID()\r
- this.#vault = new WorkerQueue(VaultWorker)\r
this.#type = type\r
+ this.#vault = new Vault()\r
}\r
\r
/**\r
#accounts: AccountList\r
#id: string\r
#mnemonic?: ArrayBuffer\r
- #vault: WorkerQueue\r
#seed?: ArrayBuffer\r
#type: WalletType\r
+ #vault: Vault\r
}\r
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<void>
-export async function _load (wallet: Wallet, vault: WorkerQueue, password: unknown, secret: unknown, mnemonicSalt?: unknown): Promise<void> {
+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> {
if (typeof password !== 'string') {
throw new TypeError('Password must be a string')
}
//! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
//! 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<void>
-export async function _lock (vault: WorkerQueue): Promise<void> {
+export async function _lock (vault: Vault): Promise<void>
+export async function _lock (vault: Vault): Promise<void> {
try {
const { isLocked } = await vault.request<boolean>({
action: 'lock'
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<void>
-export async function _sign (vault: WorkerQueue, index: unknown, block: unknown): Promise<void> {
+export async function _sign (vault: Vault, index: number, block: Block): Promise<void>
+export async function _sign (vault: Vault, index: unknown, block: unknown): Promise<void> {
try {
if (typeof index !== 'number') {
throw new TypeError('Index must be a number', { cause: index })
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<void>
-export async function _unlock (wallet: Wallet, vault: WorkerQueue, password: unknown): Promise<void> {
+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 (typeof password !== 'string') {
throw new TypeError('Password must be a string')