From d953b3eebe697e2d4f3ebef777f909e8346da540 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Fri, 1 Aug 2025 14:44:05 -0700 Subject: [PATCH] Add update password method to Safe and fix seed type checking. --- src/lib/safe.ts | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/lib/safe.ts b/src/lib/safe.ts index 1679554..cff835a 100644 --- a/src/lib/safe.ts +++ b/src/lib/safe.ts @@ -74,6 +74,10 @@ export class Safe { result = await this.unlock(key, iv, encrypted) break } + case 'update': { + result = await this.update(key, keySalt) + break + } case 'verify': { result = await this.verify(seed, mnemonicPhrase) break @@ -264,6 +268,28 @@ export class Safe { } } + /** + * Decrypts the input and sets the seed and, if it is included, the mnemonic. + */ + static async update (key?: CryptoKey, keySalt?: ArrayBuffer): Promise> { + try { + if (this.#locked) { + throw new Error('Wallet is locked') + } + if (this.#seed == null) { + throw new Error('Wallet seed not found') + } + if (key == null || keySalt == null) { + throw new TypeError('Wallet password is required') + } + const { iv, encrypted } = await this.#encryptWallet(key) + return { iv, salt: keySalt, encrypted } + } catch (err) { + console.error(err) + throw new Error('Failed to update wallet password', { cause: err }) + } + } + /** * Checks the seed and, if it exists, the mnemonic against input. The wallet * must be unlocked prior to verification. @@ -414,7 +440,7 @@ export class Safe { } // Seed to import - if (action === 'import' && !(messageData.seed instanceof ArrayBuffer)) { + if (action === 'import' && 'seed' in message && !(messageData.seed instanceof ArrayBuffer)) { throw new TypeError('Seed required to import wallet') } const seed = messageData.seed instanceof ArrayBuffer -- 2.47.3