From 08d66b103db0d068518c4a2574f92538154a93b7 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Fri, 25 Jul 2025 04:28:02 -0700 Subject: [PATCH] Rename primary worker method for clarity. --- src/lib/account.ts | 10 +++++----- src/lib/block.ts | 2 +- src/lib/rolodex.ts | 14 +++++++------- src/lib/tools.ts | 4 ++-- src/lib/wallets/bip44-wallet.ts | 2 +- src/lib/wallets/wallet.ts | 21 ++++++++++++++++++--- src/lib/workers/worker-queue.ts | 8 ++++---- 7 files changed, 38 insertions(+), 23 deletions(-) diff --git a/src/lib/account.ts b/src/lib/account.ts index 36b5498..c8ef4e0 100644 --- a/src/lib/account.ts +++ b/src/lib/account.ts @@ -70,7 +70,7 @@ export class Account { * allow garbage collection. */ async destroy (): Promise { - await SafeWorker.assign({ + await SafeWorker.request({ method: 'destroy', store: 'Account', [this.publicKey]: this.publicKey @@ -244,7 +244,7 @@ export class Account { async sign (block: ChangeBlock | ReceiveBlock | SendBlock, password: Key): Promise { if (typeof password === 'string') password = utf8.toBytes(password) try { - const { signature } = await NanoNaClWorker.assign({ + const { signature } = await NanoNaClWorker.request({ method: 'detached', privateKey: (await this.#export(password)).buffer, msg: hex.toBytes(block.hash).buffer @@ -318,7 +318,7 @@ export class Account { throw new Error('Password must be string or bytes') } try { - const response = await SafeWorker.assign({ + const response = await SafeWorker.request({ method: 'fetch', name: this.publicKey, store: 'Account', @@ -361,7 +361,7 @@ export class Account { this.#validateKey(privateKey) if (typeof privateKey === 'string') privateKey = hex.toBytes(privateKey) try { - const result = await NanoNaClWorker.assign({ + const result = await NanoNaClWorker.request({ method: 'convert', privateKey: new Uint8Array(privateKey).buffer }) @@ -376,7 +376,7 @@ export class Account { } try { - const { result } = await SafeWorker.assign(privateAccounts) + const { result } = await SafeWorker.request(privateAccounts) if (!result) { throw null } diff --git a/src/lib/block.ts b/src/lib/block.ts index a56d2a1..71a99be 100644 --- a/src/lib/block.ts +++ b/src/lib/block.ts @@ -188,7 +188,7 @@ abstract class Block { throw new Error('Provide a key for block signature verification.') } try { - const { isVerified } = await NanoNaClWorker.assign({ + const { isVerified } = await NanoNaClWorker.request({ method: 'verify', msg: hex.toBytes(this.hash).buffer, signature: hex.toBytes(this.signature ?? '').buffer, diff --git a/src/lib/rolodex.ts b/src/lib/rolodex.ts index a45aa0d..0668001 100644 --- a/src/lib/rolodex.ts +++ b/src/lib/rolodex.ts @@ -64,7 +64,7 @@ export class Rolodex { const existingAddresses = await this.getAddresses(name) existingAddresses.push(account.address) data[name] = utf8.toBytes(JSON.stringify(existingAddresses)).buffer - const { result } = await SafeWorker.assign(data) + const { result } = await SafeWorker.request(data) return result } catch (err) { throw new Error('failed to add address', { cause: err }) @@ -83,7 +83,7 @@ export class Rolodex { return false } const addresses = (await this.getAddresses(name)).filter(a => a !== address).sort() - const { result: isUpdated } = await SafeWorker.assign({ + const { result: isUpdated } = await SafeWorker.request({ method: 'store', store: 'Rolodex', password: utf8.toBytes('').buffer, @@ -92,7 +92,7 @@ export class Rolodex { if (!isUpdated) { throw new Error('failed to remove address from existing name') } - const { result } = await SafeWorker.assign({ + const { result } = await SafeWorker.request({ method: 'destroy', store: 'Rolodex', [address]: address @@ -116,7 +116,7 @@ export class Rolodex { for (const address of addresses) { data[address] = address } - const { result } = await SafeWorker.assign(data) + const { result } = await SafeWorker.request(data) return result } @@ -128,7 +128,7 @@ export class Rolodex { */ static async getAddresses (name: string): Promise { try { - const response = await SafeWorker.assign({ + const response = await SafeWorker.request({ method: 'fetch', name, store: 'Rolodex', @@ -151,7 +151,7 @@ export class Rolodex { */ static async getAllNames (): Promise { try { - const response = await SafeWorker.assign({ + const response = await SafeWorker.request({ method: 'export', name: '', store: 'Rolodex', @@ -172,7 +172,7 @@ export class Rolodex { */ static async getName (address: string): Promise { try { - const response = await SafeWorker.assign({ + const response = await SafeWorker.request({ method: 'fetch', name: address, store: 'Rolodex', diff --git a/src/lib/tools.ts b/src/lib/tools.ts index 8fe7597..d8935d7 100644 --- a/src/lib/tools.ts +++ b/src/lib/tools.ts @@ -92,7 +92,7 @@ function hash (data: string | string[], encoding?: 'hex', format?: 'hex'): strin export async function sign (key: Key, ...input: string[]): Promise { if (typeof key === 'string') key = hex.toBytes(key) try { - const { signature } = await NanoNaClWorker.assign({ + const { signature } = await NanoNaClWorker.request({ method: 'detached', privateKey: key.buffer, msg: hash(input).buffer @@ -177,7 +177,7 @@ export async function sweep ( export async function verify (key: Key, signature: string, ...input: string[]): Promise { if (typeof key === 'string') key = hex.toBytes(key) try { - const { isVerified } = await NanoNaClWorker.assign({ + const { isVerified } = await NanoNaClWorker.request({ method: 'verify', msg: hash(input).buffer, signature: hex.toBytes(signature).buffer, diff --git a/src/lib/wallets/bip44-wallet.ts b/src/lib/wallets/bip44-wallet.ts index 426b2c5..02cf6a4 100644 --- a/src/lib/wallets/bip44-wallet.ts +++ b/src/lib/wallets/bip44-wallet.ts @@ -215,7 +215,7 @@ export class Bip44Wallet extends Wallet { if (this.isLocked) { throw new Error('wallet must be unlocked to derive accounts') } - const results = await Bip44CkdWorker.assign({ + const results = await Bip44CkdWorker.request({ indexes, seed: hex.toBytes(this.seed).buffer }) diff --git a/src/lib/wallets/wallet.ts b/src/lib/wallets/wallet.ts index fc5d924..36532de 100644 --- a/src/lib/wallets/wallet.ts +++ b/src/lib/wallets/wallet.ts @@ -39,6 +39,21 @@ export abstract class Wallet { return bytes.toHex(this.#s) } + static async export () { + try { + const response = await SafeWorker.request({ + method: 'export', + name: '', + store: 'Rolodex', + password: utf8.toBytes('').buffer + }) + return Object.keys(response).filter(v => v.slice(0, 5) !== 'nano_') + } catch (err) { + console.error(err) + return [] + } + } + constructor (id: Entropy, seed?: Uint8Array, mnemonic?: Bip39Mnemonic) { if (this.constructor === Wallet) { throw new Error('Wallet is an abstract class and cannot be instantiated directly.') @@ -154,7 +169,7 @@ export abstract class Wallet { bytes.erase(this.#s) this.#m = undefined this.#s = undefined - await SafeWorker.assign({ + await SafeWorker.request({ store: 'Wallet', method: 'destroy', [this.id]: this.id @@ -186,7 +201,7 @@ export abstract class Wallet { seed: this.#s == null ? this.#s : bytes.toHex(this.#s) }) const encoded = utf8.toBytes(serialized) - const success = await SafeWorker.assign({ + const success = await SafeWorker.request({ method: 'store', store: 'Wallet', [this.id]: encoded.buffer, @@ -270,7 +285,7 @@ export abstract class Wallet { if (password == null || !(password instanceof Uint8Array)) { throw new Error('password must be string or bytes') } - const response = await SafeWorker.assign({ + const response = await SafeWorker.request({ method: 'fetch', name: this.id, store: 'Wallet', diff --git a/src/lib/workers/worker-queue.ts b/src/lib/workers/worker-queue.ts index bcc9186..717058d 100644 --- a/src/lib/workers/worker-queue.ts +++ b/src/lib/workers/worker-queue.ts @@ -52,14 +52,14 @@ export class WorkerQueue { WorkerQueue.#instances.push(this) } - async assign (data: NamedData): Promise> { - return this.#assign(data, task => this.#queue.push(task)) - } - async prioritize (data: NamedData): Promise> { return this.#assign(data, task => this.#queue.unshift(task)) } + async request (data: NamedData): Promise> { + return this.#assign(data, task => this.#queue.push(task)) + } + terminate (): void { this.#job = undefined this.#worker.terminate() -- 2.47.3