]> git.codecow.com Git - nano25519.git/commitdiff
Reject all pending tasks when worker resets.
authorChris Duncan <chris@zoso.dev>
Sat, 15 Aug 2026 19:44:48 +0000 (12:44 -0700)
committerChris Duncan <chris@zoso.dev>
Sat, 15 Aug 2026 19:44:48 +0000 (12:44 -0700)
src/lib/worker.ts

index 1412f261491ee19fe57d8b481909cf5e9d51d6c2..24a5af833c1ab1c7f7e9bff300c0ea21fad4c08a 100644 (file)
@@ -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<string, unknown> }): 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<string, string
        })
 }
 
-class Nano25519ResultError extends Error {
-       constructor (action: string, cause?: unknown) {
-               super(`${action} result invalid`, { cause })
-       }
-}
-
 export async function run (data: Record<'action', 'derive'> & Record<string, string | Uint8Array<ArrayBuffer>>): Promise<string | Uint8Array<ArrayBuffer>>
 export async function run (data: Record<'action', 'sign'> & Record<string, string | Uint8Array<ArrayBuffer>>): Promise<string | Uint8Array<ArrayBuffer>>
 export async function run (data: Record<'action', 'verify'> & Record<string, string | Uint8Array<ArrayBuffer>>): Promise<boolean>
@@ -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 })
+       }
+}