From: Chris Duncan Date: Thu, 6 Aug 2026 10:42:32 +0000 (-0700) Subject: Extract mass task rejection and move custom error to separate module for export. X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=8c1cac7c8f5424e26d68650532de8d515ef7d9b3;p=libnemo.git Extract mass task rejection and move custom error to separate module for export. --- diff --git a/src/index.ts b/src/index.ts index a10abd6..9a3bfc3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,6 +4,7 @@ import { Account } from './lib/account' import { Block } from './lib/block' import { Blake2b } from './lib/crypto' +import * as Errors from './lib/errors' import { Ledger } from './lib/ledger' import { Rolodex } from './lib/rolodex' import { Rpc } from './lib/rpc' @@ -21,6 +22,7 @@ export { Account, Blake2b, Block, + Errors, Ledger, Rolodex, Rpc, diff --git a/src/lib/errors.ts b/src/lib/errors.ts new file mode 100644 index 0000000..95399a9 --- /dev/null +++ b/src/lib/errors.ts @@ -0,0 +1,4 @@ +//! SPDX-FileCopyrightText: 2025 Chris Duncan +//! SPDX-License-Identifier: GPL-3.0-or-later + +export class VaultError extends Error { } diff --git a/src/lib/vault/index.ts b/src/lib/vault/index.ts index 4442650..ca5a9d5 100644 --- a/src/lib/vault/index.ts +++ b/src/lib/vault/index.ts @@ -4,6 +4,7 @@ import { Worker as NodeWorker } from 'node:worker_threads' import { dec } from '../convert' import { Data } from '../database' +import { VaultError } from '../errors' export type TaskData = { [key: string]: Data | Record @@ -18,8 +19,6 @@ type Task = { timeout: number | NodeJS.Timeout } -class VaultError extends Error { } - //@ts-expect-error const vaultWorker = VAULT_WORKER const LOCKED = 'locked' @@ -113,8 +112,13 @@ export class Vault { BROWSER: URL.revokeObjectURL(this.#url) //@ts-expect-error NODE: this.#worker.unref() + this.#rejectAll(err) + } + + #rejectAll (err?: any): void { for (const [_, task] of this.#tasks) { - task?.reject?.(err ?? TERMINATED) + clearTimeout(task.timeout) + task.reject(err ?? TERMINATED) } this.#tasks.clear() } @@ -126,7 +130,7 @@ export class Vault { const { taskUrl, taskId, error, isLocked } = results if (taskUrl === this.#url) { if (typeof taskId !== 'string') { - return this.terminate(new VaultError('Invalid taskId', { cause: taskId ?? typeof taskId })) + return this.#rejectAll(new VaultError('Invalid taskId encountered, restart request', { cause: taskId ?? typeof taskId })) } if (typeof isLocked === 'boolean' && this.#isLocked !== isLocked) { this.#isLocked = isLocked