@sync-in/server 1.9.0 → 1.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/CHANGELOG.md +13 -8
  2. package/package.json +7 -7
  3. package/server/app.constants.js +3 -3
  4. package/server/app.constants.js.map +1 -1
  5. package/server/app.functions.js +42 -0
  6. package/server/app.functions.js.map +1 -0
  7. package/server/applications/files/services/files-manager.service.js +2 -2
  8. package/server/applications/files/services/files-manager.service.js.map +1 -1
  9. package/server/applications/files/services/files-tasks-manager.service.js +1 -1
  10. package/server/applications/files/services/files-tasks-manager.service.js.map +1 -1
  11. package/server/applications/files/utils/send-file.js +18 -9
  12. package/server/applications/files/utils/send-file.js.map +1 -1
  13. package/server/applications/files/utils/url-file.js +6 -6
  14. package/server/applications/files/utils/url-file.js.map +1 -1
  15. package/server/applications/links/services/links-manager.service.js +1 -1
  16. package/server/applications/links/services/links-manager.service.js.map +1 -1
  17. package/server/applications/shares/interfaces/share-props.interface.js.map +1 -1
  18. package/server/applications/shares/services/shares-manager.service.js +6 -4
  19. package/server/applications/shares/services/shares-manager.service.js.map +1 -1
  20. package/server/applications/spaces/services/spaces-manager.service.js +15 -12
  21. package/server/applications/spaces/services/spaces-manager.service.js.map +1 -1
  22. package/server/applications/users/services/admin-users-manager.service.js +4 -0
  23. package/server/applications/users/services/admin-users-manager.service.js.map +1 -1
  24. package/server/applications/users/users.controller.js +4 -1
  25. package/server/applications/users/users.controller.js.map +1 -1
  26. package/static/assets/pdfjs/build/pdf.mjs +35 -20
  27. package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
  28. package/static/assets/pdfjs/build/pdf.sandbox.mjs +2 -2
  29. package/static/assets/pdfjs/build/pdf.worker.mjs +1488 -52
  30. package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
  31. package/static/assets/pdfjs/version +1 -1
  32. package/static/assets/pdfjs/web/locale/be/viewer.ftl +2 -12
  33. package/static/assets/pdfjs/web/locale/bg/viewer.ftl +4 -0
  34. package/static/assets/pdfjs/web/locale/bs/viewer.ftl +0 -15
  35. package/static/assets/pdfjs/web/locale/ca/viewer.ftl +0 -4
  36. package/static/assets/pdfjs/web/locale/cs/viewer.ftl +4 -14
  37. package/static/assets/pdfjs/web/locale/cy/viewer.ftl +2 -12
  38. package/static/assets/pdfjs/web/locale/da/viewer.ftl +2 -12
  39. package/static/assets/pdfjs/web/locale/de/viewer.ftl +0 -12
  40. package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +0 -12
  41. package/static/assets/pdfjs/web/locale/el/viewer.ftl +2 -12
  42. package/static/assets/pdfjs/web/locale/en-CA/viewer.ftl +0 -12
  43. package/static/assets/pdfjs/web/locale/en-GB/viewer.ftl +0 -12
  44. package/static/assets/pdfjs/web/locale/eo/viewer.ftl +2 -12
  45. package/static/assets/pdfjs/web/locale/es-AR/viewer.ftl +0 -12
  46. package/static/assets/pdfjs/web/locale/es-CL/viewer.ftl +2 -12
  47. package/static/assets/pdfjs/web/locale/es-ES/viewer.ftl +2 -12
  48. package/static/assets/pdfjs/web/locale/es-MX/viewer.ftl +0 -12
  49. package/static/assets/pdfjs/web/locale/eu/viewer.ftl +0 -12
  50. package/static/assets/pdfjs/web/locale/fi/viewer.ftl +0 -12
  51. package/static/assets/pdfjs/web/locale/fr/viewer.ftl +0 -12
  52. package/static/assets/pdfjs/web/locale/fur/viewer.ftl +0 -12
  53. package/static/assets/pdfjs/web/locale/fy-NL/viewer.ftl +0 -12
  54. package/static/assets/pdfjs/web/locale/gn/viewer.ftl +2 -12
  55. package/static/assets/pdfjs/web/locale/he/viewer.ftl +0 -12
  56. package/static/assets/pdfjs/web/locale/hsb/viewer.ftl +0 -12
  57. package/static/assets/pdfjs/web/locale/hu/viewer.ftl +0 -12
  58. package/static/assets/pdfjs/web/locale/hy-AM/viewer.ftl +0 -15
  59. package/static/assets/pdfjs/web/locale/ia/viewer.ftl +0 -12
  60. package/static/assets/pdfjs/web/locale/id/viewer.ftl +0 -15
  61. package/static/assets/pdfjs/web/locale/is/viewer.ftl +0 -15
  62. package/static/assets/pdfjs/web/locale/it/viewer.ftl +2 -14
  63. package/static/assets/pdfjs/web/locale/ja/viewer.ftl +7 -2
  64. package/static/assets/pdfjs/web/locale/ka/viewer.ftl +0 -12
  65. package/static/assets/pdfjs/web/locale/kab/viewer.ftl +0 -12
  66. package/static/assets/pdfjs/web/locale/kk/viewer.ftl +3 -12
  67. package/static/assets/pdfjs/web/locale/ko/viewer.ftl +0 -12
  68. package/static/assets/pdfjs/web/locale/nb-NO/viewer.ftl +2 -12
  69. package/static/assets/pdfjs/web/locale/nl/viewer.ftl +0 -12
  70. package/static/assets/pdfjs/web/locale/nn-NO/viewer.ftl +0 -12
  71. package/static/assets/pdfjs/web/locale/pa-IN/viewer.ftl +4 -12
  72. package/static/assets/pdfjs/web/locale/pl/viewer.ftl +2 -12
  73. package/static/assets/pdfjs/web/locale/pt-BR/viewer.ftl +2 -12
  74. package/static/assets/pdfjs/web/locale/rm/viewer.ftl +0 -12
  75. package/static/assets/pdfjs/web/locale/ro/viewer.ftl +2 -14
  76. package/static/assets/pdfjs/web/locale/ru/viewer.ftl +0 -12
  77. package/static/assets/pdfjs/web/locale/sc/viewer.ftl +0 -1
  78. package/static/assets/pdfjs/web/locale/sk/viewer.ftl +0 -12
  79. package/static/assets/pdfjs/web/locale/sl/viewer.ftl +2 -12
  80. package/static/assets/pdfjs/web/locale/sq/viewer.ftl +2 -12
  81. package/static/assets/pdfjs/web/locale/sv-SE/viewer.ftl +0 -12
  82. package/static/assets/pdfjs/web/locale/tg/viewer.ftl +2 -12
  83. package/static/assets/pdfjs/web/locale/th/viewer.ftl +0 -12
  84. package/static/assets/pdfjs/web/locale/tr/viewer.ftl +2 -12
  85. package/static/assets/pdfjs/web/locale/vi/viewer.ftl +0 -12
  86. package/static/assets/pdfjs/web/locale/zh-CN/viewer.ftl +2 -12
  87. package/static/assets/pdfjs/web/locale/zh-TW/viewer.ftl +0 -12
  88. package/static/assets/pdfjs/web/viewer.css +53 -41
  89. package/static/assets/pdfjs/web/viewer.html +493 -132
  90. package/static/assets/pdfjs/web/viewer.mjs +225 -150
  91. package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
  92. package/static/{chunk-LYZGJZNP.js → chunk-25PWAXTJ.js} +1 -1
  93. package/static/{chunk-EKEGRXCV.js → chunk-27XEAHMV.js} +1 -1
  94. package/static/{chunk-YMAN4LIU.js → chunk-2CAAJBRO.js} +1 -1
  95. package/static/{chunk-MNNCSSHN.js → chunk-2LHHXDD5.js} +1 -1
  96. package/static/{chunk-YCTCESL4.js → chunk-2XY4PMI5.js} +1 -1
  97. package/static/{chunk-ERDZ7IVF.js → chunk-33WFRCUP.js} +1 -1
  98. package/static/chunk-3LVFDMTN.js +1 -0
  99. package/static/{chunk-4FJUCMEG.js → chunk-4DF2SQD4.js} +1 -1
  100. package/static/{chunk-Q556XB3S.js → chunk-4EUHBTWV.js} +1 -1
  101. package/static/{chunk-AADK5D2H.js → chunk-4KXJ6C4N.js} +1 -1
  102. package/static/{chunk-BHZEPHRI.js → chunk-4OV3SAUS.js} +1 -1
  103. package/static/{chunk-T74SMT7I.js → chunk-5HCVWZMA.js} +1 -1
  104. package/static/{chunk-ZCOWBVOT.js → chunk-5HYSNQR4.js} +1 -1
  105. package/static/{chunk-XOTKK2NJ.js → chunk-5NHB7SV3.js} +1 -1
  106. package/static/chunk-6VJI4X2A.js +1 -0
  107. package/static/{chunk-XCLK7NJL.js → chunk-7H5O4BLV.js} +1 -1
  108. package/static/{chunk-ACUF7IKP.js → chunk-7NI353LS.js} +1 -1
  109. package/static/{chunk-Y44XDRM5.js → chunk-A6J6SOM6.js} +1 -1
  110. package/static/{chunk-XOF4UW3S.js → chunk-A7DSX7VP.js} +1 -1
  111. package/static/chunk-A7R246NW.js +1 -0
  112. package/static/{chunk-EL6QL4TP.js → chunk-ASBPYTLT.js} +1 -1
  113. package/static/chunk-BJARRIS6.js +562 -0
  114. package/static/{chunk-RT3K6DZR.js → chunk-CAZSNVMS.js} +1 -1
  115. package/static/{chunk-EIYRBM4J.js → chunk-CURVLK7L.js} +1 -1
  116. package/static/{chunk-7CFSJ4BO.js → chunk-DDRGLHOP.js} +1 -1
  117. package/static/{chunk-2XPHUNYN.js → chunk-FLPZB3OX.js} +1 -1
  118. package/static/{chunk-23UUFZSR.js → chunk-FRBTL2ER.js} +1 -1
  119. package/static/{chunk-MRF3CNLZ.js → chunk-FXM7XXWA.js} +1 -1
  120. package/static/{chunk-7CKHC72R.js → chunk-GDPJRUVU.js} +1 -1
  121. package/static/{chunk-QMHUIHSR.js → chunk-GENTF6JM.js} +1 -1
  122. package/static/{chunk-XX7JXKA6.js → chunk-H4RLHI3Y.js} +1 -1
  123. package/static/{chunk-KNZ3AQPR.js → chunk-HE6EDXWI.js} +1 -1
  124. package/static/{chunk-LXQGVNU2.js → chunk-IUJ4IK26.js} +1 -1
  125. package/static/{chunk-MVZJSG5R.js → chunk-JEVBUJQ4.js} +1 -1
  126. package/static/{chunk-2FOWUJQF.js → chunk-K3MOXDU5.js} +1 -1
  127. package/static/{chunk-PG54TWBO.js → chunk-KBWK65KM.js} +1 -1
  128. package/static/{chunk-5HNQLBSW.js → chunk-L3PDWJZ3.js} +2 -2
  129. package/static/{chunk-KDEEERWZ.js → chunk-LBXOAKBD.js} +1 -1
  130. package/static/{chunk-Y5RLD72B.js → chunk-LFAQLJZK.js} +1 -1
  131. package/static/{chunk-M4XL3JN5.js → chunk-MBFMTBVJ.js} +1 -1
  132. package/static/{chunk-FTSIPHMG.js → chunk-MZBO5PAR.js} +1 -1
  133. package/static/{chunk-DJDRX53V.js → chunk-NFIES7BC.js} +1 -1
  134. package/static/{chunk-24Q7OUU2.js → chunk-NK2NMAJI.js} +1 -1
  135. package/static/{chunk-BYWSTP3P.js → chunk-O7UXVNR2.js} +1 -1
  136. package/static/{chunk-3IISSX63.js → chunk-PKU4IIIR.js} +1 -1
  137. package/static/{chunk-NN4ONTOT.js → chunk-QUSS6SUC.js} +1 -1
  138. package/static/{chunk-Y2I36A4K.js → chunk-R6VB3INJ.js} +1 -1
  139. package/static/{chunk-CCGGCHGN.js → chunk-RJOHDAPM.js} +1 -1
  140. package/static/{chunk-N3P6P6GW.js → chunk-S6YKBWJE.js} +1 -1
  141. package/static/{chunk-AZ5TF5Y3.js → chunk-SDR3UG2F.js} +1 -1
  142. package/static/{chunk-C3AAEQKW.js → chunk-TGHBDJZA.js} +1 -1
  143. package/static/{chunk-HNMGPG72.js → chunk-TVJQXN73.js} +1 -1
  144. package/static/{chunk-KHRF67SG.js → chunk-U75PLYIJ.js} +1 -1
  145. package/static/chunk-UUX3M6DC.js +1 -0
  146. package/static/{chunk-S6EVLDHA.js → chunk-VJ2HWQRJ.js} +2 -2
  147. package/static/{chunk-QNFNXDSX.js → chunk-VO4WVT6K.js} +1 -1
  148. package/static/{chunk-5XUIPWOH.js → chunk-W72JYHOH.js} +1 -1
  149. package/static/{chunk-OJCAIKUK.js → chunk-WJYVS27M.js} +1 -1
  150. package/static/{chunk-HKRGIRKB.js → chunk-XAIOGRBO.js} +1 -1
  151. package/static/{chunk-BQZWSZNN.js → chunk-XHQEF2IX.js} +1 -1
  152. package/static/{chunk-RX3YQ67K.js → chunk-XXYMVRSH.js} +1 -1
  153. package/static/{chunk-HHWXIK2M.js → chunk-YTBSB2GE.js} +1 -1
  154. package/static/{chunk-LJSVNPPQ.js → chunk-YXWF2DGF.js} +1 -1
  155. package/static/{chunk-JMYAD7E2.js → chunk-Z6RJZIDG.js} +1 -1
  156. package/static/{chunk-F7TXTNZC.js → chunk-ZC5ZDCDC.js} +1 -1
  157. package/static/{chunk-EDJAISWO.js → chunk-ZERBTNFW.js} +8 -8
  158. package/static/{chunk-MRMSMTWD.js → chunk-ZPI7RQ2S.js} +1 -1
  159. package/static/{chunk-NOPACN4F.js → chunk-ZRBLCAOK.js} +1 -1
  160. package/static/index.html +2 -2
  161. package/static/{main-3PLRDZTO.js → main-FE6GWZXU.js} +4 -4
  162. package/static/{styles-Q4OZOSSK.css → styles-S5HVK4H5.css} +1 -1
  163. package/static/chunk-H6WOTGQ5.js +0 -1
  164. package/static/chunk-HC7F57NA.js +0 -1
  165. package/static/chunk-IOIBQGHN.js +0 -562
  166. package/static/chunk-J6YSFHLZ.js +0 -1
  167. package/static/chunk-QVFPHTOH.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../backend/src/applications/users/users.controller.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Body, Controller, Delete, Get, Header, Param, ParseIntPipe, Patch, Post, Put, Req, Search, StreamableFile, UseGuards } from '@nestjs/common'\nimport { createReadStream } from 'fs'\nimport { LoginResponseDto } from '../../authentication/dto/login-response.dto'\nimport { AuthTwoFaGuardWithoutPassword } from '../../authentication/guards/auth-two-fa-guard'\nimport { FastifyAuthenticatedRequest } from '../../authentication/interfaces/auth-request.interface'\nimport { USERS_ROUTE } from './constants/routes'\nimport { USER_PERMISSION, USER_ROLE } from './constants/user'\nimport { UserHavePermission } from './decorators/permissions.decorator'\nimport { UserHaveRole } from './decorators/roles.decorator'\nimport { GetUser } from './decorators/user.decorator'\nimport { UserCreateOrUpdateGroupDto } from './dto/create-or-update-group.dto'\nimport { CreateUserDto, UpdateUserDto, UpdateUserFromGroupDto } from './dto/create-or-update-user.dto'\nimport { SearchMembersDto } from './dto/search-members.dto'\nimport { UserAppPasswordDto, UserLanguageDto, UserNotificationDto, UserStorageIndexingDto, UserUpdatePasswordDto } from './dto/user-properties.dto'\nimport { UserPermissionsGuard } from './guards/permissions.guard'\nimport { UserRolesGuard } from './guards/roles.guard'\nimport { GroupBrowse } from './interfaces/group-browse.interface'\nimport { GroupMember } from './interfaces/group-member'\nimport { GuestUser } from './interfaces/guest-user.interface'\nimport { Member } from './interfaces/member.interface'\nimport { UserAppPassword } from './interfaces/user-secrets.interface'\nimport { UserModel } from './models/user.model'\nimport { UsersManager } from './services/users-manager.service'\n\n@Controller(USERS_ROUTE.BASE)\n@UseGuards(UserRolesGuard)\n@UserHaveRole(USER_ROLE.USER)\nexport class UsersController {\n constructor(private readonly usersManager: UsersManager) {}\n\n @Get(USERS_ROUTE.ME)\n @UserHaveRole(USER_ROLE.LINK)\n me(@GetUser() user: UserModel): Promise<Omit<LoginResponseDto, 'token'>> {\n return this.usersManager.me(user)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}`)\n @UserHaveRole(USER_ROLE.USER)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n listAppPasswords(@GetUser() user: UserModel): Promise<Omit<UserAppPassword, 'password'>[]> {\n return this.usersManager.listAppPasswords(user)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}`)\n @UserHaveRole(USER_ROLE.USER)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n generateAppPassword(@GetUser() user: UserModel, @Body() userAppPasswordDto: UserAppPasswordDto): Promise<UserAppPassword> {\n return this.usersManager.generateAppPassword(user, userAppPasswordDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}/:name`)\n @UserHaveRole(USER_ROLE.USER)\n deleteAppPassword(@GetUser() user: UserModel, @Param('name') name: string): Promise<void> {\n return this.usersManager.deleteAppPassword(user, name)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.LANGUAGE}`)\n @UserHaveRole(USER_ROLE.GUEST)\n updateLanguage(@GetUser() user: UserModel, @Body() userLanguageDto: UserLanguageDto) {\n return this.usersManager.updateLanguage(user, userLanguageDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.PASSWORD}`)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n updatePassword(@GetUser() user: UserModel, @Body() userPasswordDto: UserUpdatePasswordDto) {\n return this.usersManager.updatePassword(user, userPasswordDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.NOTIFICATION}`)\n @UserHaveRole(USER_ROLE.GUEST)\n updateNotification(@GetUser() user: UserModel, @Body() userNotificationDto: UserNotificationDto) {\n return this.usersManager.updateNotification(user, userNotificationDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.STORAGE_INDEXING}`)\n @UserHaveRole(USER_ROLE.USER)\n updateStorageIndexing(@GetUser() user: UserModel, @Body() userStorageIndexingDto: UserStorageIndexingDto) {\n return this.usersManager.updateStorageIndexing(user, userStorageIndexingDto)\n }\n\n @Get(`${USERS_ROUTE.AVATAR}/:login`)\n @UserHaveRole(USER_ROLE.LINK)\n @Header('cache-control', 'public,max-age=86400')\n async avatar(@GetUser() user: UserModel, @Param('login') login: 'me' | string): Promise<StreamableFile> {\n const isMe: boolean = login === 'me'\n const [path, mime] = await this.usersManager.getAvatar(isMe ? user.login : login, false, isMe && user.role <= USER_ROLE.USER)\n return new StreamableFile(createReadStream(path), { type: mime })\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.AVATAR}`)\n updateAvatar(@Req() req: FastifyAuthenticatedRequest) {\n return this.usersManager.updateAvatar(req)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.AVATAR}`)\n genAvatar(@GetUser() user: UserModel) {\n return this.usersManager.getAvatar(user.login, true)\n }\n\n @Search()\n searchMembers(@GetUser() user: UserModel, @Body() searchMembersDto: SearchMembersDto): Promise<Member[]> {\n return this.usersManager.searchMembers(user, searchMembersDto)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/${USERS_ROUTE.BROWSE}/:name?`)\n browseGroups(@GetUser() user: UserModel, @Param('name') name?: string): Promise<GroupBrowse> {\n return this.usersManager.browseGroups(user, name)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}`)\n @UserHavePermission(USER_PERMISSION.PERSONAL_GROUPS_ADMIN)\n @UseGuards(UserPermissionsGuard)\n createPersonalGroup(@GetUser() user: UserModel, @Body() userCreateOrUpdateGroupDto: UserCreateOrUpdateGroupDto): Promise<GroupMember> {\n return this.usersManager.createPersonalGroup(user, userCreateOrUpdateGroupDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:id`)\n updatePersonalGroup(\n @GetUser() user: UserModel,\n @Param('id', ParseIntPipe) groupId: number,\n @Body() userCreateOrUpdateGroupDto: UserCreateOrUpdateGroupDto\n ): Promise<GroupMember> {\n return this.usersManager.updatePersonalGroup(user, groupId, userCreateOrUpdateGroupDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:id`)\n deletePersonalGroup(@GetUser() user: UserModel, @Param('id', ParseIntPipe) groupId: number): Promise<void> {\n return this.usersManager.deletePersonalGroup(user, groupId)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/${USERS_ROUTE.GROUPS_LEAVE}/:id`)\n leavePersonalGroup(@GetUser() user: UserModel, @Param('id', ParseIntPipe) groupId: number): Promise<void> {\n return this.usersManager.leavePersonalGroup(user, groupId)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}`)\n addUsersToGroup(@GetUser() user: UserModel, @Param('groupId', ParseIntPipe) groupId: number, @Body() userIds: number[]): Promise<void> {\n return this.usersManager.addUsersToGroup(user, groupId, userIds)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}/:userId`)\n removeUserFromGroup(\n @GetUser() user: UserModel,\n @Param('groupId', ParseIntPipe) groupId: number,\n @Param('userId', ParseIntPipe) userId: number\n ): Promise<void> {\n return this.usersManager.removeUserFromGroup(user, groupId, userId)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}/:userId`)\n updateUserFromPersonalGroup(\n @GetUser() user: UserModel,\n @Param('groupId', ParseIntPipe) groupId: number,\n @Param('userId', ParseIntPipe) userId: number,\n @Body() updateUserFromGroupDto: UpdateUserFromGroupDto\n ): Promise<void> {\n return this.usersManager.updateUserFromPersonalGroup(user, groupId, userId, updateUserFromGroupDto)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}`)\n listGuests(@GetUser() user: UserModel): Promise<GuestUser[]> {\n return this.usersManager.listGuests(user)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n getGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number): Promise<GuestUser> {\n return this.usersManager.getGuest(user, guestId)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}`)\n @UserHavePermission(USER_PERMISSION.GUESTS_ADMIN)\n @UseGuards(UserPermissionsGuard)\n createGuest(@GetUser() user: UserModel, @Body() createGuestDto: CreateUserDto): Promise<GuestUser> {\n return this.usersManager.createGuest(user, createGuestDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n updateGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number, @Body() updateGuestDto: UpdateUserDto): Promise<GuestUser> {\n return this.usersManager.updateGuest(user, guestId, updateGuestDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n deleteGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number): Promise<void> {\n return this.usersManager.deleteGuest(user, guestId)\n }\n}\n"],"names":["UsersController","me","user","usersManager","listAppPasswords","generateAppPassword","userAppPasswordDto","deleteAppPassword","name","updateLanguage","userLanguageDto","updatePassword","userPasswordDto","updateNotification","userNotificationDto","updateStorageIndexing","userStorageIndexingDto","avatar","login","isMe","path","mime","getAvatar","role","USER_ROLE","USER","StreamableFile","createReadStream","type","updateAvatar","req","genAvatar","searchMembers","searchMembersDto","browseGroups","createPersonalGroup","userCreateOrUpdateGroupDto","updatePersonalGroup","groupId","deletePersonalGroup","leavePersonalGroup","addUsersToGroup","userIds","removeUserFromGroup","userId","updateUserFromPersonalGroup","updateUserFromGroupDto","listGuests","getGuest","guestId","createGuest","createGuestDto","updateGuest","updateGuestDto","deleteGuest","ME","LINK","USERS_ROUTE","APP_PASSWORDS","LANGUAGE","GUEST","PASSWORD","NOTIFICATION","STORAGE_INDEXING","AVATAR","GROUPS","BROWSE","PERSONAL_GROUPS_ADMIN","GROUPS_LEAVE","USERS","GUESTS","GUESTS_ADMIN","BASE"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/users/users.controller.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Body, Controller, Delete, Get, Header, Param, ParseIntPipe, Patch, Post, Put, Req, Search, StreamableFile, UseGuards } from '@nestjs/common'\nimport { createReadStream } from 'fs'\nimport { LoginResponseDto } from '../../authentication/dto/login-response.dto'\nimport { AuthTwoFaGuardWithoutPassword } from '../../authentication/guards/auth-two-fa-guard'\nimport { FastifyAuthenticatedRequest } from '../../authentication/interfaces/auth-request.interface'\nimport { makeContentDispositionAttachment } from '../files/utils/send-file'\nimport { USERS_ROUTE } from './constants/routes'\nimport { USER_PERMISSION, USER_ROLE } from './constants/user'\nimport { UserHavePermission } from './decorators/permissions.decorator'\nimport { UserHaveRole } from './decorators/roles.decorator'\nimport { GetUser } from './decorators/user.decorator'\nimport { UserCreateOrUpdateGroupDto } from './dto/create-or-update-group.dto'\nimport { CreateUserDto, UpdateUserDto, UpdateUserFromGroupDto } from './dto/create-or-update-user.dto'\nimport { SearchMembersDto } from './dto/search-members.dto'\nimport { UserAppPasswordDto, UserLanguageDto, UserNotificationDto, UserStorageIndexingDto, UserUpdatePasswordDto } from './dto/user-properties.dto'\nimport { UserPermissionsGuard } from './guards/permissions.guard'\nimport { UserRolesGuard } from './guards/roles.guard'\nimport { GroupBrowse } from './interfaces/group-browse.interface'\nimport { GroupMember } from './interfaces/group-member'\nimport { GuestUser } from './interfaces/guest-user.interface'\nimport { Member } from './interfaces/member.interface'\nimport { UserAppPassword } from './interfaces/user-secrets.interface'\nimport { UserModel } from './models/user.model'\nimport { UsersManager } from './services/users-manager.service'\nimport { USER_AVATAR_FILE_NAME } from './utils/avatar'\n\n@Controller(USERS_ROUTE.BASE)\n@UseGuards(UserRolesGuard)\n@UserHaveRole(USER_ROLE.USER)\nexport class UsersController {\n constructor(private readonly usersManager: UsersManager) {}\n\n @Get(USERS_ROUTE.ME)\n @UserHaveRole(USER_ROLE.LINK)\n me(@GetUser() user: UserModel): Promise<Omit<LoginResponseDto, 'token'>> {\n return this.usersManager.me(user)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}`)\n @UserHaveRole(USER_ROLE.USER)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n listAppPasswords(@GetUser() user: UserModel): Promise<Omit<UserAppPassword, 'password'>[]> {\n return this.usersManager.listAppPasswords(user)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}`)\n @UserHaveRole(USER_ROLE.USER)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n generateAppPassword(@GetUser() user: UserModel, @Body() userAppPasswordDto: UserAppPasswordDto): Promise<UserAppPassword> {\n return this.usersManager.generateAppPassword(user, userAppPasswordDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}/:name`)\n @UserHaveRole(USER_ROLE.USER)\n deleteAppPassword(@GetUser() user: UserModel, @Param('name') name: string): Promise<void> {\n return this.usersManager.deleteAppPassword(user, name)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.LANGUAGE}`)\n @UserHaveRole(USER_ROLE.GUEST)\n updateLanguage(@GetUser() user: UserModel, @Body() userLanguageDto: UserLanguageDto) {\n return this.usersManager.updateLanguage(user, userLanguageDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.PASSWORD}`)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n updatePassword(@GetUser() user: UserModel, @Body() userPasswordDto: UserUpdatePasswordDto) {\n return this.usersManager.updatePassword(user, userPasswordDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.NOTIFICATION}`)\n @UserHaveRole(USER_ROLE.GUEST)\n updateNotification(@GetUser() user: UserModel, @Body() userNotificationDto: UserNotificationDto) {\n return this.usersManager.updateNotification(user, userNotificationDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.STORAGE_INDEXING}`)\n @UserHaveRole(USER_ROLE.USER)\n updateStorageIndexing(@GetUser() user: UserModel, @Body() userStorageIndexingDto: UserStorageIndexingDto) {\n return this.usersManager.updateStorageIndexing(user, userStorageIndexingDto)\n }\n\n @Get(`${USERS_ROUTE.AVATAR}/:login`)\n @UserHaveRole(USER_ROLE.LINK)\n @Header('cache-control', 'public,max-age=86400')\n async avatar(@GetUser() user: UserModel, @Param('login') login: 'me' | string): Promise<StreamableFile> {\n const isMe: boolean = login === 'me'\n const [path, mime] = await this.usersManager.getAvatar(isMe ? user.login : login, false, isMe && user.role <= USER_ROLE.USER)\n return new StreamableFile(createReadStream(path), { type: mime, disposition: makeContentDispositionAttachment(USER_AVATAR_FILE_NAME) })\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.AVATAR}`)\n updateAvatar(@Req() req: FastifyAuthenticatedRequest) {\n return this.usersManager.updateAvatar(req)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.AVATAR}`)\n genAvatar(@GetUser() user: UserModel) {\n return this.usersManager.getAvatar(user.login, true)\n }\n\n @Search()\n searchMembers(@GetUser() user: UserModel, @Body() searchMembersDto: SearchMembersDto): Promise<Member[]> {\n return this.usersManager.searchMembers(user, searchMembersDto)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/${USERS_ROUTE.BROWSE}/:name?`)\n browseGroups(@GetUser() user: UserModel, @Param('name') name?: string): Promise<GroupBrowse> {\n return this.usersManager.browseGroups(user, name)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}`)\n @UserHavePermission(USER_PERMISSION.PERSONAL_GROUPS_ADMIN)\n @UseGuards(UserPermissionsGuard)\n createPersonalGroup(@GetUser() user: UserModel, @Body() userCreateOrUpdateGroupDto: UserCreateOrUpdateGroupDto): Promise<GroupMember> {\n return this.usersManager.createPersonalGroup(user, userCreateOrUpdateGroupDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:id`)\n updatePersonalGroup(\n @GetUser() user: UserModel,\n @Param('id', ParseIntPipe) groupId: number,\n @Body() userCreateOrUpdateGroupDto: UserCreateOrUpdateGroupDto\n ): Promise<GroupMember> {\n return this.usersManager.updatePersonalGroup(user, groupId, userCreateOrUpdateGroupDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:id`)\n deletePersonalGroup(@GetUser() user: UserModel, @Param('id', ParseIntPipe) groupId: number): Promise<void> {\n return this.usersManager.deletePersonalGroup(user, groupId)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/${USERS_ROUTE.GROUPS_LEAVE}/:id`)\n leavePersonalGroup(@GetUser() user: UserModel, @Param('id', ParseIntPipe) groupId: number): Promise<void> {\n return this.usersManager.leavePersonalGroup(user, groupId)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}`)\n addUsersToGroup(@GetUser() user: UserModel, @Param('groupId', ParseIntPipe) groupId: number, @Body() userIds: number[]): Promise<void> {\n return this.usersManager.addUsersToGroup(user, groupId, userIds)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}/:userId`)\n removeUserFromGroup(\n @GetUser() user: UserModel,\n @Param('groupId', ParseIntPipe) groupId: number,\n @Param('userId', ParseIntPipe) userId: number\n ): Promise<void> {\n return this.usersManager.removeUserFromGroup(user, groupId, userId)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}/:userId`)\n updateUserFromPersonalGroup(\n @GetUser() user: UserModel,\n @Param('groupId', ParseIntPipe) groupId: number,\n @Param('userId', ParseIntPipe) userId: number,\n @Body() updateUserFromGroupDto: UpdateUserFromGroupDto\n ): Promise<void> {\n return this.usersManager.updateUserFromPersonalGroup(user, groupId, userId, updateUserFromGroupDto)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}`)\n listGuests(@GetUser() user: UserModel): Promise<GuestUser[]> {\n return this.usersManager.listGuests(user)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n getGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number): Promise<GuestUser> {\n return this.usersManager.getGuest(user, guestId)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}`)\n @UserHavePermission(USER_PERMISSION.GUESTS_ADMIN)\n @UseGuards(UserPermissionsGuard)\n createGuest(@GetUser() user: UserModel, @Body() createGuestDto: CreateUserDto): Promise<GuestUser> {\n return this.usersManager.createGuest(user, createGuestDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n updateGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number, @Body() updateGuestDto: UpdateUserDto): Promise<GuestUser> {\n return this.usersManager.updateGuest(user, guestId, updateGuestDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n deleteGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number): Promise<void> {\n return this.usersManager.deleteGuest(user, guestId)\n }\n}\n"],"names":["UsersController","me","user","usersManager","listAppPasswords","generateAppPassword","userAppPasswordDto","deleteAppPassword","name","updateLanguage","userLanguageDto","updatePassword","userPasswordDto","updateNotification","userNotificationDto","updateStorageIndexing","userStorageIndexingDto","avatar","login","isMe","path","mime","getAvatar","role","USER_ROLE","USER","StreamableFile","createReadStream","type","disposition","makeContentDispositionAttachment","USER_AVATAR_FILE_NAME","updateAvatar","req","genAvatar","searchMembers","searchMembersDto","browseGroups","createPersonalGroup","userCreateOrUpdateGroupDto","updatePersonalGroup","groupId","deletePersonalGroup","leavePersonalGroup","addUsersToGroup","userIds","removeUserFromGroup","userId","updateUserFromPersonalGroup","updateUserFromGroupDto","listGuests","getGuest","guestId","createGuest","createGuestDto","updateGuest","updateGuestDto","deleteGuest","ME","LINK","USERS_ROUTE","APP_PASSWORDS","LANGUAGE","GUEST","PASSWORD","NOTIFICATION","STORAGE_INDEXING","AVATAR","GROUPS","BROWSE","PERSONAL_GROUPS_ADMIN","GROUPS_LEAVE","USERS","GUESTS","GUESTS_ADMIN","BASE"],"mappings":"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"}
@@ -21,8 +21,8 @@
21
21
  */
22
22
 
23
23
  /**
24
- * pdfjsVersion = 5.4.394
25
- * pdfjsBuild = 2cc809ade
24
+ * pdfjsVersion = 5.4.449
25
+ * pdfjsBuild = f44e5f0e6
26
26
  */
27
27
  /******/ // The require scope
28
28
  /******/ var __webpack_require__ = {};
@@ -1847,7 +1847,7 @@ function renderRichText({
1847
1847
  intent: "richText"
1848
1848
  });
1849
1849
  }
1850
- fragment.firstChild.classList.add("richText", className);
1850
+ fragment.firstElementChild.classList.add("richText", className);
1851
1851
  container.append(fragment);
1852
1852
  }
1853
1853
  function makePathFromDrawOPS(data) {
@@ -6323,11 +6323,11 @@ class AnnotationEditor {
6323
6323
  if (nextFirstPosition !== firstPosition) {
6324
6324
  if (nextFirstPosition < firstPosition) {
6325
6325
  for (let i = 0; i < firstPosition - nextFirstPosition; i++) {
6326
- this.#resizersDiv.append(this.#resizersDiv.firstChild);
6326
+ this.#resizersDiv.append(this.#resizersDiv.firstElementChild);
6327
6327
  }
6328
6328
  } else if (nextFirstPosition > firstPosition) {
6329
6329
  for (let i = 0; i < nextFirstPosition - firstPosition; i++) {
6330
- this.#resizersDiv.firstChild.before(this.#resizersDiv.lastChild);
6330
+ this.#resizersDiv.firstElementChild.before(this.#resizersDiv.lastElementChild);
6331
6331
  }
6332
6332
  }
6333
6333
  let i = 0;
@@ -6339,7 +6339,7 @@ class AnnotationEditor {
6339
6339
  }
6340
6340
  this.#setResizerTabIndex(0);
6341
6341
  this.#isResizerEnabledForKeyboard = true;
6342
- this.#resizersDiv.firstChild.focus({
6342
+ this.#resizersDiv.firstElementChild.focus({
6343
6343
  focusVisible: true
6344
6344
  });
6345
6345
  event.preventDefault();
@@ -6570,10 +6570,10 @@ class AnnotationEditor {
6570
6570
  }
6571
6571
  resetAnnotationElement(annotation) {
6572
6572
  const {
6573
- firstChild
6573
+ firstElementChild
6574
6574
  } = annotation.container;
6575
- if (firstChild?.nodeName === "DIV" && firstChild.classList.contains("annotationContent")) {
6576
- firstChild.remove();
6575
+ if (firstElementChild?.nodeName === "DIV" && firstElementChild.classList.contains("annotationContent")) {
6576
+ firstElementChild.remove();
6577
6577
  }
6578
6578
  }
6579
6579
  }
@@ -7217,6 +7217,9 @@ class FontFaceObject {
7217
7217
  get disableFontFace() {
7218
7218
  return this.#fontData.disableFontFace ?? false;
7219
7219
  }
7220
+ set disableFontFace(value) {
7221
+ shadow(this, "disableFontFace", !!value);
7222
+ }
7220
7223
  get fontExtraProperties() {
7221
7224
  return this.#fontData.fontExtraProperties ?? false;
7222
7225
  }
@@ -7250,6 +7253,9 @@ class FontFaceObject {
7250
7253
  get bbox() {
7251
7254
  return this.#fontData.bbox;
7252
7255
  }
7256
+ set bbox(bbox) {
7257
+ shadow(this, "bbox", bbox);
7258
+ }
7253
7259
  get fontMatrix() {
7254
7260
  return this.#fontData.fontMatrix;
7255
7261
  }
@@ -14408,7 +14414,7 @@ function getDocument(src = {}) {
14408
14414
  }
14409
14415
  const docParams = {
14410
14416
  docId,
14411
- apiVersion: "5.4.394",
14417
+ apiVersion: "5.4.449",
14412
14418
  data,
14413
14419
  password,
14414
14420
  disableAutoFetch,
@@ -14666,6 +14672,9 @@ class PDFDocumentProxy {
14666
14672
  saveDocument() {
14667
14673
  return this._transport.saveDocument();
14668
14674
  }
14675
+ extractPages(pageInfos) {
14676
+ return this._transport.extractPages(pageInfos);
14677
+ }
14669
14678
  getDownloadInfo() {
14670
14679
  return this._transport.downloadInfoCapability.promise;
14671
14680
  }
@@ -15734,6 +15743,11 @@ class WorkerTransport {
15734
15743
  this.annotationStorage.resetModified();
15735
15744
  });
15736
15745
  }
15746
+ extractPages(pageInfos) {
15747
+ return this.messageHandler.sendWithPromise("ExtractPages", {
15748
+ pageInfos
15749
+ });
15750
+ }
15737
15751
  getPage(pageNumber) {
15738
15752
  if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {
15739
15753
  return Promise.reject(new Error("Invalid page request."));
@@ -15850,7 +15864,8 @@ class WorkerTransport {
15850
15864
  info: results[0],
15851
15865
  metadata: results[1] ? new Metadata(results[1]) : null,
15852
15866
  contentDispositionFilename: this._fullReader?.filename ?? null,
15853
- contentLength: this._fullReader?.contentLength ?? null
15867
+ contentLength: this._fullReader?.contentLength ?? null,
15868
+ hasStructTree: results[2]
15854
15869
  }));
15855
15870
  this.#methodPromises.set(name, promise);
15856
15871
  return promise;
@@ -16064,8 +16079,8 @@ class InternalRenderTask {
16064
16079
  }
16065
16080
  }
16066
16081
  }
16067
- const version = "5.4.394";
16068
- const build = "2cc809ade";
16082
+ const version = "5.4.449";
16083
+ const build = "f44e5f0e6";
16069
16084
 
16070
16085
  ;// ./src/display/editor/color_picker.js
16071
16086
 
@@ -16198,13 +16213,13 @@ class ColorPicker {
16198
16213
  return;
16199
16214
  }
16200
16215
  if (event.target === this.#button) {
16201
- this.#dropdown.firstChild?.focus();
16216
+ this.#dropdown.firstElementChild?.focus();
16202
16217
  return;
16203
16218
  }
16204
16219
  event.target.nextSibling?.focus();
16205
16220
  }
16206
16221
  _moveToPrevious(event) {
16207
- if (event.target === this.#dropdown?.firstChild || event.target === this.#button) {
16222
+ if (event.target === this.#dropdown?.firstElementChild || event.target === this.#button) {
16208
16223
  if (this.#isDropdownVisible) {
16209
16224
  this._hideDropdownFromKeyboard();
16210
16225
  }
@@ -16220,14 +16235,14 @@ class ColorPicker {
16220
16235
  this.#openDropdown(event);
16221
16236
  return;
16222
16237
  }
16223
- this.#dropdown.firstChild?.focus();
16238
+ this.#dropdown.firstElementChild?.focus();
16224
16239
  }
16225
16240
  _moveToEnd(event) {
16226
16241
  if (!this.#isDropdownVisible) {
16227
16242
  this.#openDropdown(event);
16228
16243
  return;
16229
16244
  }
16230
- this.#dropdown.lastChild?.focus();
16245
+ this.#dropdown.lastElementChild?.focus();
16231
16246
  }
16232
16247
  #keyDown(event) {
16233
16248
  ColorPicker._keyboardManager.exec(this, event);
@@ -25663,7 +25678,7 @@ class AnnotationEditorLayer {
25663
25678
  return;
25664
25679
  }
25665
25680
  if (editor.parent && editor.annotationElementId) {
25666
- this.#uiManager.addDeletedAnnotationElement(editor.annotationElementId);
25681
+ this.#uiManager.addDeletedAnnotationElement(editor);
25667
25682
  AnnotationEditor.deleteAnnotationElement(editor);
25668
25683
  editor.annotationElementId = null;
25669
25684
  }
@@ -26195,8 +26210,8 @@ class DrawLayer {
26195
26210
  }
26196
26211
  }
26197
26212
  if (path) {
26198
- const defs = element.firstChild;
26199
- const pathElement = defs.firstChild;
26213
+ const defs = element.firstElementChild;
26214
+ const pathElement = defs.firstElementChild;
26200
26215
  this.#updateProperties(pathElement, path);
26201
26216
  }
26202
26217
  }