diff --git a/keeperapi/package.json b/keeperapi/package.json index 182e326..a99b71a 100644 --- a/keeperapi/package.json +++ b/keeperapi/package.json @@ -1,7 +1,7 @@ { "name": "@keeper-security/keeperapi", "description": "Keeper API Javascript SDK", - "version": "16.0.48", + "version": "16.0.49", "browser": "dist/index.es.js", "main": "dist/index.cjs.js", "types": "dist/node/index.d.ts", diff --git a/keeperapi/src/vaultx.ts b/keeperapi/src/vaultx.ts index f01a95a..7aba70b 100644 --- a/keeperapi/src/vaultx.ts +++ b/keeperapi/src/vaultx.ts @@ -36,9 +36,9 @@ export type VaultStorage = KeyStorage & { delete(kind: VaultStorageKind, uid: string): Promise } -export type VaultStorageData = DContinuationToken | DRecord | DRecordMetadata | DRecordNonSharedData | DTeam | DSharedFolder | DSharedFolderUser | DSharedFolderTeam | DSharedFolderRecord | DSharedFolderFolder | DUserFolder | DProfile | DReusedPasswords | DBWRecord | DBWSecurityData +export type VaultStorageData = DProfilePic | DContinuationToken | DRecord | DRecordMetadata | DRecordNonSharedData | DTeam | DSharedFolder | DSharedFolderUser | DSharedFolderTeam | DSharedFolderRecord | DSharedFolderFolder | DUserFolder | DProfile | DReusedPasswords | DBWRecord | DBWSecurityData -export type VaultStorageKind = 'record' | 'metadata' | 'non_shared_data' | 'team' | 'shared_folder' | 'shared_folder_user' | 'shared_folder_team' | 'shared_folder_record' | 'shared_folder_folder' | 'user_folder' | 'profile' | 'continuationToken' | 'reused_passwords' | 'bw_record' | 'bw_security_data' +export type VaultStorageKind = 'profilePic' | 'record' | 'metadata' | 'non_shared_data' | 'team' | 'shared_folder' | 'shared_folder_user' | 'shared_folder_team' | 'shared_folder_record' | 'shared_folder_folder' | 'user_folder' | 'profile' | 'continuationToken' | 'reused_passwords' | 'bw_record' | 'bw_security_data' export type VaultStorageResult = ( T extends 'continuationToken' ? DContinuationToken : @@ -166,6 +166,14 @@ export type DProfile = { revision: number } +export type DProfilePic = { + kind: 'profilePic' + data: { + url: string + revision: number + } +} + export type DBWRecord = { kind: 'bw_record' uid: string @@ -664,6 +672,20 @@ const processProfile = async (profile: IProfile | null | undefined, storage: Vau } } +const processProfilePic = async (profilePic, storage) => { + try { + if (!profilePic) + return; + await storage.put({ + kind: 'profilePic', + data: profilePic, + }); + } + catch (e: any) { + console.error(`Profile picture cannot be decrypted (${e.message})`); + } +}; + const processSharedFolderFolders = async (folders: ISharedFolderFolder[], storage: VaultStorage, dependencies: Dependencies) => { for (const folder of folders as NN[]) { const sharedFolderUid = webSafe64FromBytes(folder.sharedFolderUid) @@ -1015,6 +1037,10 @@ export const syncDown = async (options: SyncDownOptions): Promise => profiler?.time('processProfile') await processProfile(resp.profile, storage) profiler?.timeEnd('processProfile') + + profiler?.time('processProfilePic') + await processProfilePic(resp.profilePic, storage); + profiler?.timeEnd('processProfilePic') profiler?.time('processBreachWatchRecords') await processBreachWatchRecords(resp.breachWatchRecords, storage)