]> git.codecow.com Git - libnemo.git/commitdiff
Rename vault timer and move blob construction to main thread class.
authorChris Duncan <chris@zoso.dev>
Fri, 29 Aug 2025 19:44:25 +0000 (12:44 -0700)
committerChris Duncan <chris@zoso.dev>
Fri, 29 Aug 2025 19:44:25 +0000 (12:44 -0700)
src/lib/vault/index.ts
src/lib/vault/vault-timer.ts [moved from src/lib/vault/timer.ts with 89% similarity]
src/lib/vault/vault-worker.ts

index c4a1c0626a08ccfa6126712e619398c4999f54ca..9868052fc44669d5505ef7470462266d882def74 100644 (file)
@@ -3,6 +3,10 @@
 
 import { Worker as NodeWorker } from 'node:worker_threads'
 import { Data, NamedData } from '#types'
+import { default as Constants } from '../constants'
+import { default as Convert } from '../convert'
+import { Bip39, Bip44, Blake2b, NanoNaCl } from '../crypto'
+import { default as VaultTimer } from './vault-timer'
 import { default as VaultWorker } from './vault-worker'
 
 type Task = {
@@ -13,6 +17,21 @@ type Task = {
 }
 
 export class Vault {
+       static get #blob () {
+               let importWorkerThreads = ''
+               NODE: importWorkerThreads = `import { parentPort } from 'node:worker_threads'`
+               return `
+                       ${importWorkerThreads}
+                       ${Convert}
+                       ${Constants}
+                       const Bip39 = ${Bip39}
+                       const Bip44 = ${Bip44}
+                       const Blake2b = ${Blake2b}
+                       const NanoNaCl = ${NanoNaCl}
+                       ${VaultTimer}
+                       ${VaultWorker}
+               `
+       }
        static #instances: Vault[] = []
        static get instances (): Vault[] { return this.#instances }
 
@@ -27,12 +46,12 @@ export class Vault {
                this.#isIdle = true
                this.#isTerminated = false
                this.#queue = []
-               this.#url = URL.createObjectURL(new Blob([VaultWorker], { type: 'text/javascript' }))
+               this.#url = URL.createObjectURL(new Blob([Vault.#blob], { type: 'text/javascript' }))
                BROWSER: this.#worker = new Worker(this.#url, { type: 'module' })
                BROWSER: this.#worker.addEventListener('message', message => {
                        this.#report(message.data)
                })
-               NODE: this.#worker = new NodeWorker(VaultWorker, {
+               NODE: this.#worker = new NodeWorker(Vault.#blob, {
                        eval: true,
                        stderr: false,
                        stdout: false
similarity index 89%
rename from src/lib/vault/timer.ts
rename to src/lib/vault/vault-timer.ts
index d788ad47c9a1280b2b1c31cb81b2fddab0183717..9bc2d3cac73e36e8b430ac05fb5f6b2f5970390e 100644 (file)
@@ -1,7 +1,7 @@
 //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
 //! SPDX-License-Identifier: GPL-3.0-or-later
 
-export class Timer {
+export class VaultTimer {
        #f: () => any
        #elapsed: number = 0
        #isPaused: boolean = false
@@ -30,3 +30,5 @@ export class Timer {
                }
        }
 }
+
+export default `const VaultTimer = ${VaultTimer}`
index 5c269e1e8d44e92c5cda3d4d7eebb6db835f5921..2f4efb869938f870d69bae39afc3108f470456fd 100644 (file)
@@ -3,17 +3,17 @@
 
 import { parentPort } from 'node:worker_threads'
 import { NamedData } from '#types'
-import { default as Constants, BIP44_COIN_NANO } from '../constants'
-import { default as Convert, utf8 } from '../convert'
+import { BIP44_COIN_NANO } from '../constants'
+import { utf8 } from '../convert'
 import { Bip39, Bip44, Blake2b, NanoNaCl } from '../crypto'
-import { Timer } from './timer'
+import { VaultTimer } from './vault-timer'
 
 /**
 * Cross-platform worker for managing wallet secrets.
 */
-class VaultWorker {
+export class VaultWorker {
        static #locked: boolean = true
-       static #timeout: Timer
+       static #timeout: VaultTimer
        static #type?: 'BIP-44' | 'BLAKE2b'
        static #seed?: ArrayBuffer
        static #mnemonic?: ArrayBuffer
@@ -152,7 +152,7 @@ class VaultWorker {
                                ? await Bip44.ckd(this.#seed, BIP44_COIN_NANO, index)
                                : await this.#deriveBlake2bPrivateKey(this.#seed, index)
                        const pub = await NanoNaCl.convert(new Uint8Array(prv))
-                       this.#timeout = new Timer(() => this.lock(), 120000)
+                       this.#timeout = new VaultTimer(() => this.lock(), 120000)
                        return { index, publicKey: pub.buffer }
                } catch (err) {
                        console.error(err)
@@ -211,7 +211,7 @@ class VaultWorker {
                                ? await Bip44.ckd(this.#seed, BIP44_COIN_NANO, index)
                                : await this.#deriveBlake2bPrivateKey(this.#seed, index)
                        const sig = await NanoNaCl.detached(new Uint8Array(data), new Uint8Array(prv))
-                       this.#timeout = new Timer(() => this.lock(), 120000)
+                       this.#timeout = new VaultTimer(() => this.lock(), 120000)
                        return { signature: sig.buffer }
                } catch (err) {
                        console.error(err)
@@ -246,7 +246,7 @@ class VaultWorker {
                                throw new TypeError('Invalid mnemonic')
                        }
                        this.#locked = false
-                       this.#timeout = new Timer(() => this.lock(), 120000)
+                       this.#timeout = new VaultTimer(() => this.lock(), 120000)
                        return { isUnlocked: !this.#locked }
                } catch (err) {
                        console.error(err)
@@ -271,7 +271,7 @@ class VaultWorker {
                        }
                        this.#timeout.pause()
                        const { iv, encrypted } = await this.#encryptWallet(key)
-                       this.#timeout = new Timer(() => this.lock(), 120000)
+                       this.#timeout = new VaultTimer(() => this.lock(), 120000)
                        return { iv, salt: keySalt, encrypted }
                } catch (err) {
                        console.error(err)
@@ -591,16 +591,4 @@ class VaultWorker {
        }
 }
 
-let importWorkerThreads = ''
-NODE: importWorkerThreads = `import { parentPort } from 'node:worker_threads'`
-export default `
-       ${importWorkerThreads}
-       ${Convert}
-       ${Constants}
-       const Bip39 = ${Bip39}
-       const Bip44 = ${Bip44}
-       const Blake2b = ${Blake2b}
-       const NanoNaCl = ${NanoNaCl}
-       const Timer = ${Timer}
-       const Vault = ${VaultWorker}
-`
+export default `const VaultWorker = ${VaultWorker}`