@@ -87,6 +87,8 @@ export type DRecordMetadata = {
8787 canShare : boolean
8888 canEdit : boolean
8989 recordKeyType : Records . RecordKeyType
90+ ownerAccountUid ?: string
91+ ownerUsername ?: string
9092}
9193
9294export type DTeam = {
@@ -109,6 +111,8 @@ export type DSharedFolder = {
109111 uid : string
110112 data : any
111113 name ?: string
114+ ownerAccountUid ?: string
115+ ownerUsername ?: string
112116 revision : number
113117 defaultCanEdit : boolean
114118 defaultCanShare : boolean
@@ -119,7 +123,8 @@ export type DSharedFolder = {
119123export type DSharedFolderUser = {
120124 kind : 'shared_folder_user'
121125 sharedFolderUid : string
122- accountUid : string
126+ accountUid ?: string
127+ accountUsername ?: string
123128 manageRecords : boolean
124129 manageUsers : boolean
125130}
@@ -137,10 +142,12 @@ export type DSharedFolderRecord = {
137142 kind : 'shared_folder_record'
138143 sharedFolderUid : string
139144 recordUid : string
145+ // ownerAccountUid?: Uint8Array
140146 ownerUid : string
141147 owner : boolean
142148 canShare : boolean
143149 canEdit : boolean
150+ ownerUsername ?: string
144151}
145152
146153export type DSharedFolderFolder = {
@@ -216,8 +223,10 @@ export type DContinuationToken = {
216223
217224export type Dependency = {
218225 kind : VaultStorageKind
226+ parentUid : string
219227 uid : string
220228}
229+ export type DependencyMap = Record < string , Dependency >
221230export type Dependencies = Record < string , Set < Dependency > >
222231export type RemovedDependencies = Record < string , Set < string > | '*' >
223232
@@ -229,7 +238,8 @@ const addDependencies = (dependencies: Dependencies, parentUid: string, childUid
229238 }
230239 children . add ( {
231240 kind : kind ,
232- uid : childUid
241+ uid : childUid ,
242+ parentUid : parentUid
233243 } )
234244}
235245
@@ -245,15 +255,15 @@ const addRemovedDependencies = (dependencies: RemovedDependencies, parentUid: st
245255 children . add ( childUid )
246256}
247257
248- const getDependencies = async ( folderUid : string , storage : VaultStorage , results : Dependency [ ] ) => {
258+ const getDependencies = async ( folderUid : string , storage : VaultStorage , results : DependencyMap ) => {
249259 const storageGetDependencies = await storage . getDependencies ( folderUid )
250260 for await ( const dependency of storageGetDependencies || [ ] ) {
251261 switch ( dependency . kind ) {
252262 case "record" :
253- results . push ( dependency )
263+ results [ dependency . parentUid ] = dependency
254264 break ;
255265 case "user_folder" :
256- results . push ( dependency )
266+ results [ dependency . parentUid ] = dependency
257267 await getDependencies ( dependency . uid , storage , results )
258268 break ;
259269 default :
@@ -508,6 +518,7 @@ const processSharedFolders = async (folders: ISharedFolder[], storage: VaultStor
508518 if ( ! folderName && ! folderData ) {
509519 continue
510520 }
521+ const ownerUid = folder . ownerAccountUid ? webSafe64FromBytes ( folder . ownerAccountUid ) : undefined
511522 await storage . put ( {
512523 kind : 'shared_folder' ,
513524 uid : folderUid ,
@@ -518,6 +529,8 @@ const processSharedFolders = async (folders: ISharedFolder[], storage: VaultStor
518529 defaultCanShare : folder . defaultCanReshare ,
519530 defaultManageUsers : folder . defaultManageUsers ,
520531 defaultManageRecords : folder . defaultManageRecords ,
532+ ownerAccountUid : ownerUid ,
533+ ownerUsername : folder . owner ,
521534 } )
522535 }
523536}
@@ -528,6 +541,7 @@ const processSharedFolderUsers = async (users: ISharedFolderUser[], storage: Vau
528541 kind : 'shared_folder_user' ,
529542 sharedFolderUid : webSafe64FromBytes ( user . sharedFolderUid ) ,
530543 accountUid : webSafe64FromBytes ( user . accountUid ) ,
544+ accountUsername : user . username ,
531545 manageRecords : user . manageRecords ,
532546 manageUsers : user . manageUsers ,
533547 } )
@@ -581,6 +595,7 @@ const processSharedFolderRecords = async (records: ISharedFolderRecord[], storag
581595 ownerUid,
582596 canEdit : rec . owner ? true : rec . canEdit ,
583597 canShare : rec . owner ? true : rec . canShare ,
598+ ownerUsername : rec . ownerUsername ,
584599 } )
585600 } catch ( e : any ) {
586601 console . error ( `The shared folder record ${ recUid } cannot be decrypted (${ e . message } )` )
@@ -853,13 +868,16 @@ const processMetadata = async (recordMetaData: IRecordMetaData[], storage: Vault
853868 }
854869 }
855870
871+ const ownerUid = mData . ownerAccountUid ? webSafe64FromBytes ( mData . ownerAccountUid ) : undefined
856872 await storage . put ( {
857873 kind : 'metadata' ,
858874 uid : recUid ,
859875 canEdit : mData . canEdit ,
860876 canShare : mData . canShare ,
861877 owner : mData . owner ,
862- recordKeyType : mData . recordKeyType
878+ recordKeyType : mData . recordKeyType ,
879+ ownerAccountUid : ownerUid ,
880+ ownerUsername : mData . ownerUsername ,
863881 } )
864882 } catch ( e : any ) {
865883 console . error ( `The record metadata ${ recUid } cannot be decrypted (${ e . message } )` )
@@ -1141,19 +1159,19 @@ export const syncDown = async (options: SyncDownOptions): Promise<SyncResult> =>
11411159 await processRemovedSharedFolderRecords ( resp . removedSharedFolderRecords , storage , removedDependencies )
11421160 await processRemovedSharedFolderFolderRecords ( resp . removedSharedFolderFolderRecords , storage , removedDependencies )
11431161
1144- const removedSFDependencies : Dependency [ ] = [ ]
1162+ const removedSFDependencies : DependencyMap = { }
11451163 for await ( const folder of resp . removedSharedFolders ) {
11461164 const folderUid = webSafe64FromBytes ( folder )
11471165 await getDependencies ( folderUid , storage , removedSFDependencies )
1148- if ( ! removedDependencies [ folderUid ] ) {
1166+ if ( ! removedDependencies [ folderUid ] && ! removedSFDependencies [ folderUid ] ) {
11491167 removedDependencies [ folderUid ] = '*'
11501168 }
11511169 await storage . delete ( 'shared_folder' , folderUid )
11521170 }
1153- for await ( const removedSFDependency of removedSFDependencies ) {
1171+ for await ( const removedSFDependency of Object . values ( removedSFDependencies ) ) {
11541172 switch ( removedSFDependency . kind ) {
1155- case "record" :
1156- await storage . delete ( 'record' , removedSFDependency . uid )
1173+ case "record" :
1174+ addRemovedDependencies ( removedDependencies , removedSFDependency . parentUid , removedSFDependency . uid )
11571175 break ;
11581176 case "user_folder" :
11591177 removedDependencies [ removedSFDependency . uid ] = '*'
0 commit comments