From 2cb996c0d02c426e7e5bfeb35371209c6581ad6f Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Sat, 15 Aug 2026 12:44:48 -0700 Subject: [PATCH] Reject all pending tasks when worker resets. --- src/lib/worker.ts | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/lib/worker.ts b/src/lib/worker.ts index 1412f26..24a5af8 100644 --- a/src/lib/worker.ts +++ b/src/lib/worker.ts @@ -137,9 +137,9 @@ function init (): void { } console.log(`nano25519/async initialized`) isWorkerReady = true - } catch (err: any) { + } catch (e: any) { isWorkerReady = false - throw new Error('nano25519/async initialization failed') + throw new Nano25519WorkerError(e) } } @@ -172,6 +172,10 @@ function report (msg: { data: Record }): void { function reset (): void { console.warn(`nano25519 encountered an error. Reinitializing...`) starting = undefined + for (const [_, err] of tasks.values()) { + err(new Nano25519WorkerError('worker reset, try again')) + } + tasks.clear() worker.terminate() init() } @@ -204,12 +208,6 @@ async function dispatch (data: Record<'action', Action> & Record & Record>): Promise> export async function run (data: Record<'action', 'sign'> & Record>): Promise> export async function run (data: Record<'action', 'verify'> & Record>): Promise @@ -224,7 +222,7 @@ export async function run (data: Record<'action', 'derive' | 'sign' | 'verify'> throw new Error('unknown error') } } catch (e: any) { - throw new Error('failed to start worker', { cause: e }) + throw new Nano25519WorkerError(e) } const result = await dispatch(data) @@ -250,3 +248,14 @@ export async function run (data: Record<'action', 'derive' | 'sign' | 'verify'> } throw new Nano25519ResultError(data.action, result) } + +class Nano25519WorkerError extends Error { + constructor (cause?: unknown) { + super(`async process error`, { cause }) + } +} +class Nano25519ResultError extends Error { + constructor (action: string, cause?: unknown) { + super(`${action} result invalid`, { cause }) + } +} -- 2.52.0