]> git.codecow.com Git - libnemo.git/commitdiff
Extract mass task rejection and move custom error to separate module for export.
authorChris Duncan <chris@codecow.com>
Thu, 6 Aug 2026 10:42:32 +0000 (03:42 -0700)
committerChris Duncan <chris@codecow.com>
Thu, 6 Aug 2026 10:42:32 +0000 (03:42 -0700)
src/index.ts
src/lib/errors.ts [new file with mode: 0644]
src/lib/vault/index.ts

index a10abd6f6e7f919058df1744f88597291f55d045..9a3bfc3f4ea6f7747e541c0398220f9ae86749ab 100644 (file)
@@ -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 (file)
index 0000000..95399a9
--- /dev/null
@@ -0,0 +1,4 @@
+//! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@codecow.com>
+//! SPDX-License-Identifier: GPL-3.0-or-later
+
+export class VaultError extends Error { }
index 44426504c9e22ff66e75e5fb851133506db1ea11..ca5a9d5c990f6c0e97962fe2e52ae4c7146689dc 100644 (file)
@@ -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<string, Data>
@@ -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