Skip to content

Commit 0058a9c

Browse files
Th add user map sync down (#68)
* added add/remove users prop in sync and added check in removed shared folders to not overwrite already assigned values * upped version
1 parent f2cb98b commit 0058a9c

File tree

3 files changed

+33
-9
lines changed

3 files changed

+33
-9
lines changed

keeperapi/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

keeperapi/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@keeper-security/keeperapi",
33
"description": "Keeper API Javascript SDK",
4-
"version": "16.0.68",
4+
"version": "16.0.69",
55
"browser": "dist/index.es.js",
66
"main": "dist/index.cjs.js",
77
"types": "dist/node/index.d.ts",

keeperapi/src/vault.ts

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ export type VaultStorage = KeyStorage & {
3333
removeDependencies(dependencies: RemovedDependencies): Promise<void>
3434
clear(): Promise<void>
3535
get<T extends VaultStorageKind>(kind: T, uid?: string): Promise<VaultStorageResult<T>>
36-
delete(kind: VaultStorageKind, uid: string): Promise<void>
36+
delete(kind: VaultStorageKind, uid: string | Uint8Array): Promise<void>
3737
}
3838

39-
export type VaultStorageData = DProfilePic | DContinuationToken | DRecord | DRecordMetadata | DRecordNonSharedData | DTeam | DSharedFolder | DSharedFolderUser | DSharedFolderTeam | DSharedFolderRecord | DSharedFolderFolder | DUserFolder | DProfile | DReusedPasswords | DBWRecord | DBWSecurityData | DSecurityScoreData
39+
export type VaultStorageData = DProfilePic | DContinuationToken | DRecord | DRecordMetadata | DRecordNonSharedData | DTeam | DSharedFolder | DSharedFolderUser | DSharedFolderTeam | DSharedFolderRecord | DSharedFolderFolder | DUserFolder | DProfile | DReusedPasswords | DBWRecord | DBWSecurityData | DSecurityScoreData | DUser
4040

41-
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' | 'security_score_data'
41+
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' | 'security_score_data' | 'user'
4242

4343
export type VaultStorageResult<T extends VaultStorageKind> = (
4444
T extends 'continuationToken' ? DContinuationToken :
@@ -201,6 +201,12 @@ export type DSecurityScoreData = {
201201
revision: number,
202202
}
203203

204+
export type DUser = {
205+
kind: 'user',
206+
accountUid?:Uint8Array | null,
207+
username?:string | null,
208+
}
209+
204210
export type DContinuationToken = {
205211
kind?: 'continuationToken'
206212
token: string
@@ -284,6 +290,16 @@ const mapKeyType = (keyType: Records.RecordKeyType): { keyId: string, encryption
284290
return {keyId, encryptionType}
285291
}
286292

293+
export const processUsers = async (users: Vault.IUser[], storage: VaultStorage) => {
294+
for (const user of users) {
295+
await storage.put({
296+
kind: 'user',
297+
accountUid: user.accountUid,
298+
username: user.username,
299+
})
300+
}
301+
}
302+
287303
export const processTeams = async (teams: NN<ITeam>[], storage: VaultStorage, dependencies: Dependencies) => {
288304
const teamKeys: UnwrapKeyMap = {}
289305
const teamPrivateKeys: UnwrapKeyMap = {}
@@ -1048,6 +1064,8 @@ export const syncDown = async (options: SyncDownOptions): Promise<SyncResult> =>
10481064
networkTime += requestTime
10491065
const dependencies = {}
10501066

1067+
await processUsers(resp.users, storage)
1068+
10511069
await processTeams(resp.teams as NN<ITeam>[], storage, dependencies)
10521070

10531071
await processUserFolders(resp.userFolders, storage, dependencies)
@@ -1118,10 +1136,12 @@ export const syncDown = async (options: SyncDownOptions): Promise<SyncResult> =>
11181136
for await (const folder of resp.removedSharedFolders) {
11191137
const folderUid = webSafe64FromBytes(folder)
11201138
await getDependencies(folderUid, storage, removedSFDependencies)
1121-
removedDependencies[folderUid] = '*'
1139+
if(!removedDependencies[folderUid]){
1140+
removedDependencies[folderUid] = '*'
1141+
}
11221142
await storage.delete('shared_folder', folderUid)
11231143
}
1124-
for (const removedSFDependency of removedSFDependencies) {
1144+
for await (const removedSFDependency of removedSFDependencies) {
11251145
switch (removedSFDependency.kind) {
11261146
case "record":
11271147
await storage.delete('record', removedSFDependency.uid)
@@ -1132,6 +1152,10 @@ export const syncDown = async (options: SyncDownOptions): Promise<SyncResult> =>
11321152
break;
11331153
}
11341154
}
1155+
for await (const user of resp.removedUsers) {
1156+
await storage.delete('user', user)
1157+
}
1158+
11351159
await storage.removeDependencies(removedDependencies)
11361160

11371161
continuationToken = resp.continuationToken || undefined
@@ -1153,4 +1177,4 @@ export const syncDown = async (options: SyncDownOptions): Promise<SyncResult> =>
11531177
result.networkTime = formatTimeDiff(new Date(networkTime))
11541178
result.totalTime = formatTimeDiff(new Date(Date.now() - result.started.getTime()))
11551179
return result
1156-
}
1180+
}

0 commit comments

Comments
 (0)