@@ -33,12 +33,12 @@ export type VaultStorage = KeyStorage & {
33
33
removeDependencies ( dependencies : RemovedDependencies ) : Promise < void >
34
34
clear ( ) : Promise < void >
35
35
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 >
37
37
}
38
38
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
40
40
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'
42
42
43
43
export type VaultStorageResult < T extends VaultStorageKind > = (
44
44
T extends 'continuationToken' ? DContinuationToken :
@@ -201,6 +201,12 @@ export type DSecurityScoreData = {
201
201
revision : number ,
202
202
}
203
203
204
+ export type DUser = {
205
+ kind : 'user' ,
206
+ accountUid ?:Uint8Array | null ,
207
+ username ?:string | null ,
208
+ }
209
+
204
210
export type DContinuationToken = {
205
211
kind ?: 'continuationToken'
206
212
token : string
@@ -284,6 +290,16 @@ const mapKeyType = (keyType: Records.RecordKeyType): { keyId: string, encryption
284
290
return { keyId, encryptionType}
285
291
}
286
292
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
+
287
303
export const processTeams = async ( teams : NN < ITeam > [ ] , storage : VaultStorage , dependencies : Dependencies ) => {
288
304
const teamKeys : UnwrapKeyMap = { }
289
305
const teamPrivateKeys : UnwrapKeyMap = { }
@@ -1048,6 +1064,8 @@ export const syncDown = async (options: SyncDownOptions): Promise<SyncResult> =>
1048
1064
networkTime += requestTime
1049
1065
const dependencies = { }
1050
1066
1067
+ await processUsers ( resp . users , storage )
1068
+
1051
1069
await processTeams ( resp . teams as NN < ITeam > [ ] , storage , dependencies )
1052
1070
1053
1071
await processUserFolders ( resp . userFolders , storage , dependencies )
@@ -1118,10 +1136,12 @@ export const syncDown = async (options: SyncDownOptions): Promise<SyncResult> =>
1118
1136
for await ( const folder of resp . removedSharedFolders ) {
1119
1137
const folderUid = webSafe64FromBytes ( folder )
1120
1138
await getDependencies ( folderUid , storage , removedSFDependencies )
1121
- removedDependencies [ folderUid ] = '*'
1139
+ if ( ! removedDependencies [ folderUid ] ) {
1140
+ removedDependencies [ folderUid ] = '*'
1141
+ }
1122
1142
await storage . delete ( 'shared_folder' , folderUid )
1123
1143
}
1124
- for ( const removedSFDependency of removedSFDependencies ) {
1144
+ for await ( const removedSFDependency of removedSFDependencies ) {
1125
1145
switch ( removedSFDependency . kind ) {
1126
1146
case "record" :
1127
1147
await storage . delete ( 'record' , removedSFDependency . uid )
@@ -1132,6 +1152,10 @@ export const syncDown = async (options: SyncDownOptions): Promise<SyncResult> =>
1132
1152
break ;
1133
1153
}
1134
1154
}
1155
+ for await ( const user of resp . removedUsers ) {
1156
+ await storage . delete ( 'user' , user )
1157
+ }
1158
+
1135
1159
await storage . removeDependencies ( removedDependencies )
1136
1160
1137
1161
continuationToken = resp . continuationToken || undefined
@@ -1153,4 +1177,4 @@ export const syncDown = async (options: SyncDownOptions): Promise<SyncResult> =>
1153
1177
result . networkTime = formatTimeDiff ( new Date ( networkTime ) )
1154
1178
result . totalTime = formatTimeDiff ( new Date ( Date . now ( ) - result . started . getTime ( ) ) )
1155
1179
return result
1156
- }
1180
+ }
0 commit comments