From dd5a656d3410eaa448742007a70e45d006737215 Mon Sep 17 00:00:00 2001 From: Hoseong Lee Date: Thu, 30 Jul 2026 10:00:10 -0500 Subject: [PATCH 1/4] Wrap the platform.unwrapKey with try-catch block in the processKdFolderKeys to avoid complete sync down failure --- keeperapi/src/vault.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/keeperapi/src/vault.ts b/keeperapi/src/vault.ts index 9efb78f4..740571ad 100644 --- a/keeperapi/src/vault.ts +++ b/keeperapi/src/vault.ts @@ -1182,7 +1182,13 @@ const processKdFolderKeys = async (storage: VaultStorage, folderKeys?: Folder.IF if (!key.folderUid || !key.folderKey || !key.parentUid || isNil(key.encryptedBy)) continue const folderUid = webSafe64FromBytes(key.folderUid) const parentUid = webSafe64FromBytes(key.parentUid) - await platform.unwrapKey(key.folderKey, folderUid, parentUid, 'gcm', 'aes', storage) + try { + await platform.unwrapKey(key.folderKey, folderUid, parentUid, 'gcm', 'aes', storage) + } catch (e: any) { + console.error( + `[kd] The folder key for ${folderUid} can't be decrypted by the parent key ${parentUid} (${e.message})` + ) + } } } From b36450ed3ba369e41ab522c5fed51d624a8ce966 Mon Sep 17 00:00:00 2001 From: Hoseong Lee Date: Thu, 30 Jul 2026 10:09:53 -0500 Subject: [PATCH 2/4] formatter --- keeperapi/src/browser/platform.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/keeperapi/src/browser/platform.ts b/keeperapi/src/browser/platform.ts index c5b962bd..073df3e9 100644 --- a/keeperapi/src/browser/platform.ts +++ b/keeperapi/src/browser/platform.ts @@ -613,13 +613,9 @@ export const browserPlatform: Platform = class { } static async importECCJsonWebKey(jwk: JsonWebKey, extractable = true): Promise { - return await crypto.subtle.importKey( - 'jwk', - jwk, - { name: 'ECDH', namedCurve: 'P-256' }, - extractable, - ['deriveBits'] - ) + return await crypto.subtle.importKey('jwk', jwk, { name: 'ECDH', namedCurve: 'P-256' }, extractable, [ + 'deriveBits', + ]) } static async ecdhComputeSharedSecret( From 7ef5abba2cea3ddd28002d870bb23a0fa17304ba Mon Sep 17 00:00:00 2001 From: Hoseong Lee Date: Thu, 30 Jul 2026 10:25:36 -0500 Subject: [PATCH 3/4] v18.0.7 --- keeperapi/package-lock.json | 4 ++-- keeperapi/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/keeperapi/package-lock.json b/keeperapi/package-lock.json index 6bdd4355..285c4bb0 100644 --- a/keeperapi/package-lock.json +++ b/keeperapi/package-lock.json @@ -1,12 +1,12 @@ { "name": "@keeper-security/keeperapi", - "version": "18.0.6", + "version": "18.0.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@keeper-security/keeperapi", - "version": "18.0.6", + "version": "18.0.7", "license": "ISC", "dependencies": { "@noble/post-quantum": "^0.5.2", diff --git a/keeperapi/package.json b/keeperapi/package.json index 5717a702..b67b7da4 100644 --- a/keeperapi/package.json +++ b/keeperapi/package.json @@ -1,7 +1,7 @@ { "name": "@keeper-security/keeperapi", "description": "Keeper API Javascript SDK", - "version": "18.0.6", + "version": "18.0.7", "browser": "dist/browser/index.js", "main": "dist/index.cjs.js", "types": "dist/node/index.d.ts", From e9159d6b80a11c1da548043001d1279e8f662dfb Mon Sep 17 00:00:00 2001 From: Hoseong Lee Date: Thu, 30 Jul 2026 10:30:39 -0500 Subject: [PATCH 4/4] replaced the console with logger in the vault.ts --- keeperapi/src/vault.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keeperapi/src/vault.ts b/keeperapi/src/vault.ts index 740571ad..c56c92ce 100644 --- a/keeperapi/src/vault.ts +++ b/keeperapi/src/vault.ts @@ -1121,8 +1121,8 @@ const processKdRecordLinks = async (storage: VaultStorage, keeperDriveRecordLink parentRecordUid, }) } catch (e: any) { - console.error( - `[ks] The record link for ${childRecordUid} cannot be decrypted by ${parentRecordUid} (${e.message})` + logger.error( + `[kd] The record link for ${childRecordUid} cannot be decrypted by ${parentRecordUid} (${e.message})` ) } } @@ -1185,7 +1185,7 @@ const processKdFolderKeys = async (storage: VaultStorage, folderKeys?: Folder.IF try { await platform.unwrapKey(key.folderKey, folderUid, parentUid, 'gcm', 'aes', storage) } catch (e: any) { - console.error( + logger.error( `[kd] The folder key for ${folderUid} can't be decrypted by the parent key ${parentUid} (${e.message})` ) } @@ -1294,7 +1294,7 @@ const processKdFolders = async (storage: VaultStorage, keeperDriveFolders?: Fold inheritUserPermissions: toOptional(folder.inheritUserPermissions), }) } catch (err: any) { - console.error(`[ks] folder ${folderUid} cannot be decrypted (${err.message})`) + logger.error(`[kd] folder ${folderUid} cannot be decrypted (${err.message})`) } } } @@ -1429,7 +1429,7 @@ const processKdRecords = async ( isKeeperDriveData: true, }) } catch (err: any) { - console.error(`[kd] record ${recordUid} cannot be decrypted: ${err.message}`) + logger.error(`[kd] record ${recordUid} cannot be decrypted: ${err.message}`) } } }