passbolt-browser-extension 5.12.1 → 5.13.0

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 (198) hide show
  1. package/.devcontainer/safe-chain-config.json +2 -1
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +30 -22
  3. package/.github/ISSUE_TEMPLATE/config.yml +11 -0
  4. package/.jpmignore +0 -1
  5. package/CHANGELOG.md +82 -1
  6. package/CONTRIBUTING.md +1 -12
  7. package/README.md +5 -16
  8. package/RELEASE_NOTES.md +2 -3
  9. package/SECURITY.md +7 -0
  10. package/i18next.config.js +28 -0
  11. package/jest.config.json +1 -0
  12. package/package.json +20 -40
  13. package/src/all/background_page/controller/accountRecovery/reviewRequestController.test.js +1 -1
  14. package/src/all/background_page/{event → controller/actionLog}/findAllForActionLogController.js +1 -1
  15. package/src/all/background_page/{event → controller/actionLog}/findAllForActionLogController.test.js +4 -4
  16. package/src/all/background_page/controller/export/exportResourcesFileController.test.js +7 -2
  17. package/src/all/background_page/controller/folder/folderCreateController.js +3 -1
  18. package/src/all/background_page/controller/group/findMyGroupsController.test.js +2 -2
  19. package/src/all/background_page/controller/group/getOrFindGroupsController.js +61 -0
  20. package/src/all/background_page/controller/group/getOrFindGroupsController.test.js +69 -0
  21. package/src/all/background_page/controller/group/getOrFindGroupsUsersController.js +62 -0
  22. package/src/all/background_page/controller/group/getOrFindGroupsUsersController.test.js +69 -0
  23. package/src/all/background_page/controller/group/groupCreateController.js +1 -1
  24. package/src/all/background_page/controller/group/groupCreateController.test.js +1 -1
  25. package/src/all/background_page/controller/group/groupUpdateController.js +1 -1
  26. package/src/all/background_page/controller/group/updateAllGroupsLocalStorageController.test.js +1 -1
  27. package/src/all/background_page/controller/keyring/synchroniseKeyringController.js +51 -0
  28. package/src/all/background_page/controller/keyring/synchroniseKeyringController.test.js +49 -0
  29. package/src/all/background_page/controller/metadata/shareMetadataKeyPrivateController.test.js +1 -1
  30. package/src/all/background_page/controller/move/moveFolderController.js +0 -2
  31. package/src/all/background_page/controller/permission/FindAcoPermissionsForDisplayController.js +1 -1
  32. package/src/all/background_page/controller/permission/FindAcoPermissionsForDisplayController.test.js +2 -2
  33. package/src/all/background_page/controller/resource/findAllByIdsForDisplayPermissionsController.test.js +8 -3
  34. package/src/all/background_page/controller/resource/findAllIdsByIsSharedWithGroupController.test.js +9 -4
  35. package/src/all/background_page/controller/resource/resourceUpdateController.test.js +1 -2
  36. package/src/all/background_page/controller/resourceLocalStorage/resourceUpdateLocalStorageController.test.js +5 -2
  37. package/src/all/background_page/controller/share/findFoldersForShareController.js +66 -0
  38. package/src/all/background_page/controller/share/findFoldersForShareController.test.js +70 -0
  39. package/src/all/background_page/controller/share/searchUsersAndGroupsController.js +4 -4
  40. package/src/all/background_page/controller/share/searchUsersAndGroupsController.test.js +8 -23
  41. package/src/all/background_page/controller/share/shareResourcesController.test.js +2 -2
  42. package/src/all/background_page/controller/subscription/createSubscriptionKeyController.js +63 -0
  43. package/src/all/background_page/controller/subscription/createSubscriptionKeyController.test.js +56 -0
  44. package/src/all/background_page/controller/subscription/deleteSubscriptionKeyController.js +55 -0
  45. package/src/all/background_page/controller/subscription/deleteSubscriptionKeyController.test.js +50 -0
  46. package/src/all/background_page/controller/user/deleteUserController.test.js +1 -1
  47. package/src/all/background_page/controller/user/getOrFindUsersController.js +61 -0
  48. package/src/all/background_page/controller/user/getOrFindUsersController.test.js +69 -0
  49. package/src/all/background_page/error/deleteDryRunError.js +1 -1
  50. package/src/all/background_page/event/actionLogEvents.js +1 -1
  51. package/src/all/background_page/event/appEvents.js +25 -0
  52. package/src/all/background_page/event/groupEvents.js +26 -0
  53. package/src/all/background_page/event/keyringEvents.js +12 -0
  54. package/src/all/background_page/event/shareEvents.js +3 -9
  55. package/src/all/background_page/event/userEvents.js +13 -0
  56. package/src/all/background_page/model/config.js +12 -2
  57. package/src/all/background_page/model/entity/folder/folderEntity.js +2 -2
  58. package/src/all/background_page/model/entity/folder/folderEntity.test.js +2 -2
  59. package/src/all/background_page/model/entity/folder/foldersCollection.test.js +1 -1
  60. package/src/all/background_page/model/entity/group/update/groupUpdateEntity.js +1 -1
  61. package/src/all/background_page/model/entity/group/update/groupUpdateEntity.test.js +1 -1
  62. package/src/all/background_page/model/entity/permission/actionLog/updatedPermissionEntity.js +2 -2
  63. package/src/all/background_page/model/entity/permission/actionLog/updatedPermissionEntity.test.data.js +1 -1
  64. package/src/all/background_page/model/entity/permission/change/permissionChangeEntity.js +1 -1
  65. package/src/all/background_page/model/entity/permission/change/permissionChangesCollection.js +2 -2
  66. package/src/all/background_page/model/entity/permission/change/permissionChangesCollection.test.js +2 -2
  67. package/src/all/background_page/model/entity/resource/resourceEntity.js +2 -2
  68. package/src/all/background_page/model/entity/resource/resourceEntity.test.js +1 -1
  69. package/src/all/background_page/model/entity/user/userEntity.js +16 -377
  70. package/src/all/background_page/model/entity/user/userEntity.test.js +22 -297
  71. package/src/all/background_page/model/entity/userAndGroupSearchResultEntity/userAndGroupSearchResultEntity.js +1 -1
  72. package/src/all/background_page/model/folder/folderModel.js +5 -154
  73. package/src/all/background_page/model/group/groupModel.js +1 -1
  74. package/src/all/background_page/model/keyring.js +52 -17
  75. package/src/all/background_page/model/keyring.test.js +110 -0
  76. package/src/all/background_page/model/resource/resourceModel.js +2 -55
  77. package/src/all/background_page/model/setup/setupModel.js +2 -2
  78. package/src/all/background_page/model/user/userModel.js +18 -15
  79. package/src/all/background_page/model/user/userModel.test.js +1 -3
  80. package/src/all/background_page/service/api/abstract/abstractService.js +3 -17
  81. package/src/all/background_page/service/api/edition/passboltEditionApiService.js +64 -0
  82. package/src/all/background_page/service/api/edition/passboltEditionApiService.test.js +99 -0
  83. package/src/all/background_page/service/api/group/groupApiService.js +22 -23
  84. package/src/all/background_page/service/api/group/groupApiService.test.js +70 -0
  85. package/src/all/background_page/service/api/resource/resourceService.js +18 -12
  86. package/src/all/background_page/service/api/share/{shareService.js → shareApiService.js} +10 -7
  87. package/src/all/background_page/service/api/share/{shareService.test.js → shareApiService.test.js} +5 -5
  88. package/src/all/background_page/service/group/createGroupService.js +1 -1
  89. package/src/all/background_page/service/group/createGroupService.test.js +1 -1
  90. package/src/all/background_page/service/group/findAndUpdateGroupsLocalStorageService.js +56 -1
  91. package/src/all/background_page/service/group/findAndUpdateGroupsLocalStorageService.test.js +84 -2
  92. package/src/all/background_page/service/group/findGroupsService.js +5 -9
  93. package/src/all/background_page/service/group/findGroupsService.test.data.js +1 -1
  94. package/src/all/background_page/service/group/findGroupsService.test.js +10 -15
  95. package/src/all/background_page/service/group/getOrFindGroupsService.js +65 -0
  96. package/src/all/background_page/service/group/getOrFindGroupsService.test.js +168 -0
  97. package/src/all/background_page/service/group/getOrFindGroupsUsersService.js +51 -0
  98. package/src/all/background_page/service/group/getOrFindGroupsUsersService.test.js +94 -0
  99. package/src/all/background_page/service/group/groupUpdateService.js +5 -3
  100. package/src/all/background_page/service/group/groupUpdateService.test.js +10 -2
  101. package/src/all/background_page/service/local_storage/groupLocalStorage.js +2 -2
  102. package/src/all/background_page/service/local_storage/groupLocalStorage.test.js +3 -3
  103. package/src/all/background_page/service/local_storage/userLocalStorage.js +57 -36
  104. package/src/all/background_page/service/local_storage/userLocalStorage.test.js +282 -0
  105. package/src/all/background_page/service/metadata/createMetadataKeyService.test.js +1 -1
  106. package/src/all/background_page/service/metadata/saveMetadataSettingsService.test.js +1 -1
  107. package/src/all/background_page/service/metadata/shareMetadataKeyPrivateService.test.js +1 -1
  108. package/src/all/background_page/service/migrateMetadata/migrateMetadataResourcesService.js +1 -1
  109. package/src/all/background_page/service/move/calculatePermissionsChangesForMoveService.js +113 -0
  110. package/src/all/background_page/service/move/calculatePermissionsChangesForMoveService.test.data.js +38 -0
  111. package/src/all/background_page/service/move/calculatePermissionsChangesForMoveService.test.js +158 -0
  112. package/src/all/background_page/service/move/moveOneFolderService.js +6 -7
  113. package/src/all/background_page/service/move/moveOneFolderService.test.js +90 -90
  114. package/src/all/background_page/service/move/moveResourcesService.js +2 -5
  115. package/src/all/background_page/service/permission/findPermissionsService.js +1 -1
  116. package/src/all/background_page/service/resource/create/resourceCreateService.js +13 -31
  117. package/src/all/background_page/service/resource/create/resourceCreateService.test.js +25 -18
  118. package/src/all/background_page/service/resource/export/exportResourcesService.test.js +13 -4
  119. package/src/all/background_page/service/resource/findAndUpdateResourcesLocalStorageService.test.js +35 -28
  120. package/src/all/background_page/service/resource/findResourcesService.js +78 -2
  121. package/src/all/background_page/service/resource/findResourcesService.test.data.js +1 -1
  122. package/src/all/background_page/service/resource/findResourcesService.test.js +90 -31
  123. package/src/all/background_page/service/resource/getOrFindResourcesService.test.js +18 -8
  124. package/src/all/background_page/service/session_storage/keepSessionAliveService.js +3 -3
  125. package/src/all/background_page/service/session_storage/keepSessionAliveService.test.js +5 -3
  126. package/src/all/background_page/service/share/searchUsersAndGroupsService.js +41 -0
  127. package/src/all/background_page/service/share/searchUsersAndGroupsService.test.js +64 -0
  128. package/src/all/background_page/service/share/shareFoldersService.js +3 -3
  129. package/src/all/background_page/service/share/shareFoldersService.test.js +3 -3
  130. package/src/all/background_page/service/share/shareResourceService.js +4 -4
  131. package/src/all/background_page/service/share/shareResourceService.test.js +8 -8
  132. package/src/all/background_page/service/subscription/createSubscriptionKeyService.js +57 -0
  133. package/src/all/background_page/service/subscription/createSubscriptionKeyService.test.js +111 -0
  134. package/src/all/background_page/service/subscription/deleteSubscriptionKeyService.js +35 -0
  135. package/src/all/background_page/service/subscription/deleteSubscriptionKeyService.test.js +55 -0
  136. package/src/all/background_page/service/user/deleteUserService.js +4 -4
  137. package/src/all/background_page/service/user/deleteUserService.test.js +10 -10
  138. package/src/all/background_page/service/user/findAndUpdateUsersLocalStorageService.js +81 -0
  139. package/src/all/background_page/service/user/findAndUpdateUsersLocalStorageService.test.js +132 -0
  140. package/src/all/background_page/service/user/findUsersService.js +6 -6
  141. package/src/all/background_page/service/user/findUsersService.test.js +39 -38
  142. package/src/all/background_page/service/user/getOrFindUsersService.js +60 -0
  143. package/src/all/background_page/service/user/getOrFindUsersService.test.js +110 -0
  144. package/src/all/background_page/utils/assertions.js +1 -0
  145. package/src/all/locales/ko-KR/common.json +1 -1
  146. package/src/chrome/manifest.json +1 -1
  147. package/src/chrome-mv3/manifest.json +1 -1
  148. package/src/firefox/manifest.json +3 -3
  149. package/src/safari/manifest.json +2 -2
  150. package/test/jest.env-setup.js +31 -0
  151. package/webpack/applyOutputClean.js +69 -0
  152. package/webpack/base.config.js +33 -0
  153. package/webpack/common-blocks.js +91 -0
  154. package/webpack/expectedBuildArtifacts.js +51 -0
  155. package/webpack/i18nextExtractionPlugin.js +43 -0
  156. package/webpack/passboltEnvPlugin.js +41 -0
  157. package/webpack/webExtPlugin/index.js +75 -0
  158. package/webpack.chromium-mv2.config.js +40 -0
  159. package/webpack.chromium-mv3.config.js +40 -0
  160. package/webpack.common.config.js +186 -0
  161. package/webpack.config.js +38 -0
  162. package/webpack.firefox.config.js +40 -0
  163. package/webpack.mv2.config.js +65 -0
  164. package/webpack.mv3.config.js +99 -0
  165. package/webpack.safari-background-page.config.js +66 -57
  166. package/webpack.safari.config.js +44 -0
  167. package/Gruntfile.js +0 -471
  168. package/am_i_compromised.py +0 -1036
  169. package/am_i_compromised.sh +0 -688
  170. package/i18next-parser.config.js +0 -22
  171. package/src/all/background_page/config/config.json +0 -7
  172. package/src/all/background_page/config/config.json.debug +0 -7
  173. package/src/all/background_page/config/config.json.default +0 -7
  174. package/src/all/background_page/model/entity/group/groupEntity.js +0 -241
  175. package/src/all/background_page/model/entity/group/groupEntity.test.js +0 -136
  176. package/src/all/background_page/model/entity/group/groupsCollection.js +0 -166
  177. package/src/all/background_page/model/entity/group/groupsCollection.test.data.js +0 -34
  178. package/src/all/background_page/model/entity/group/groupsCollection.test.js +0 -227
  179. package/src/all/background_page/model/entity/permission/permissionEntity.js +0 -485
  180. package/src/all/background_page/model/entity/permission/permissionEntity.test.js +0 -263
  181. package/src/all/background_page/model/entity/permission/permissionsCollection.js +0 -486
  182. package/src/all/background_page/model/entity/permission/permissionsCollection.test.js +0 -700
  183. package/src/all/background_page/model/entity/user/usersCollection.js +0 -147
  184. package/src/all/background_page/model/entity/user/usersCollection.test.js +0 -223
  185. package/src/all/background_page/model/share/shareModel.js +0 -183
  186. package/src/all/background_page/model/share/shareModel.test.js +0 -61
  187. package/src/all/background_page/service/api/user/userService.js +0 -260
  188. package/src/all/background_page/service/resource/create/resourceCreateService.test.data.js +0 -55
  189. package/webpack-content-scripts.browser-integration.config.js +0 -57
  190. package/webpack-content-scripts.config.js +0 -61
  191. package/webpack-content-scripts.public-website-sign-in.config.js +0 -57
  192. package/webpack-data.config.js +0 -102
  193. package/webpack-data.download.config.js +0 -59
  194. package/webpack-data.in-form-call-to-action.config.js +0 -97
  195. package/webpack-data.in-form-menu.config.js +0 -97
  196. package/webpack-offscreens.config.js +0 -55
  197. package/webpack.background-page.config.js +0 -62
  198. package/webpack.service-worker.config.js +0 -65
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "minimumPackageAgeHours": 48,
3
3
  "npm": {
4
- "minimumPackageAgeExclusions": ["@passbolt/*", "@aikidosec/*"]
4
+ "minimumPackageAgeExclusions": ["passbolt-browser-extension", "passbolt-styleguide", "@aikidosec/*"],
5
+ "directDownloadMinimumPackageAgeExclusions": ["passbolt-browser-extension", "passbolt-styleguide"]
5
6
  }
6
7
  }
@@ -1,30 +1,38 @@
1
- ##IMPORTANT: PLEASE READ
1
+ ---
2
+ name: Report a bug
3
+ about: Report a bug in the Passbolt browser extension.
4
+ title: ""
5
+ labels: bug
6
+ assignees: ""
7
+ ---
2
8
 
3
- Only use github issues for bugs.
9
+ <!--
10
+ PLEASE READ
4
11
 
5
- We will be more than happy to help you on the community forum for:
6
- - feature requests: https://community.passbolt.com/c/backlog
7
- - issues related to an installation: https://community.passbolt.com/c/installation-issues
8
- - general questions: https://community.passbolt.com/c/uncategorized
12
+ This tracker is only for browser extension bugs. For anything else:
9
13
 
10
- This is only a issue tracker for bugs related to the Passbolt Browser Extensions.
11
- For passbolt API, docker, command line interface, in short any other bugs
12
- please use [the other relevant repositories](https://github.com/passbolt).
14
+ - Security issues: https://www.passbolt.com/docs/contribute/security/vulnerability/
15
+ - Feature requests: https://community.passbolt.com/c/backlog
16
+ - Installation issues: https://community.passbolt.com/c/installation-issues
17
+ - General questions: https://community.passbolt.com/c/uncategorized
13
18
 
14
- If you are certain this is a new Browser Extension bug please use the following format:
19
+ If you are certain this is a browser extension bug, please fill in the format below.
20
+ -->
15
21
 
16
- ## ISSUE NAME
17
- * Passbolt Version: EXACT RELEASE VERSION OR COMMIT HASH, HERE.
18
- * Platform and Target:
19
- -- Browser: NAME AND VERSION
20
- -- Web server: NAME AND VERSION
21
- -- etc.: OTHER RELEVANT PLATFORM INFO
22
+ * Browser extension version: <!-- e.g. 5.13.0 -->
23
+ * API edition & version: <!-- e.g. CE 5.12.0 -->
24
+ * Environment
25
+ * Client: <!-- browser and OS, e.g. Chrome 148.1 on Ubuntu 26.04 -->
26
+ * Server: <!-- e.g. Debian 13, Docker latest-ce, or Passbolt Cloud -->
22
27
 
23
- ### What you did
24
- EXPLAIN WHAT YOU DID, PREFERABLY WITH CODE EXAMPLES, HERE.
28
+ ### What you did?
25
29
 
26
- ### What happened
27
- EXPLAIN WHAT IS ACTUALLY HAPPENING, HERE.
30
+ <!-- Explain what you did, preferably with steps or code examples. -->
28
31
 
29
- ### What you expected to happen
30
- EXPLAIN WHAT IS TO BE EXPECTED, HERE.
32
+ ### What happened?
33
+
34
+ <!-- Explain what actually happened. -->
35
+
36
+ ### What you expected to happen?
37
+
38
+ <!-- Explain what you expected instead. -->
@@ -0,0 +1,11 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Request a feature or change
4
+ url: https://community.passbolt.com/c/backlog
5
+ about: Suggest and vote on features in the community forum.
6
+ - name: Get installation help
7
+ url: https://community.passbolt.com/c/installation-issues
8
+ about: Ask installation and configuration questions in the community forum.
9
+ - name: Ask a question
10
+ url: https://community.passbolt.com/c/uncategorized
11
+ about: Ask usage questions in the community forum.
package/.jpmignore CHANGED
@@ -21,7 +21,6 @@ Gruntfile.js
21
21
  CHANGELOG.MD
22
22
  README.MD
23
23
  npm-debug.log
24
- config.json.default
25
24
 
26
25
  #jest test coverage
27
26
  /coverage
package/CHANGELOG.md CHANGED
@@ -4,6 +4,86 @@ This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [5.13.0] - 2026-06-11
8
+ ### Added
9
+ PB-51594 Move findAllForActionLogController and test to the correct location
10
+ PB-48516 Build process improvement - Webpack
11
+ PB-51534 Update group edit call in groupApiService to contain "my_group_user" as urlOptions
12
+ PB-51580 PCD 1.1 - Migrate SearchUsersAndGroupsController off ShareModel
13
+ PB-51585 PCD 1.2 - Migrate resourceCreateService ShareModel usage to ShareResourceService
14
+ PB-51586 PCD 1.3 - Move passbolt.share.get-folders to controller pattern
15
+ PB-51587 PCD 1.4 - Clear ShareModel
16
+ PB-51588 PCD 1.5 - Migrate MoveFolderController off FolderModel
17
+ PB-51589 PCD 1.6 - Migrate MoveOneFolderService off FolderModel
18
+ PB-51590 PCD 1.7 - Migrate MoveResourcesService off FolderModel + ResourceModel
19
+ PB-51782 PCD 2.01 - Create SynchroniseKeyringController and binding
20
+ PB-51783 PCD 2.02 - Create KeyringServiceWorkerService
21
+ PB-51785 PCD 2.04 - Create GetOrFindGroupService
22
+ PB-51786 PCD 2.05 - Create GetOrFindGroupController and binding
23
+ PB-51787 PCD 2.06 - Create GetOrFindGroupsUsersService
24
+ PB-51788 PCD 2.07 - Create GetOrFindGroupsUsersController and binding
25
+ PB-51789 PCD 2.08 - Create GetOrFindUsersService
26
+ PB-51790 PCD 2.09 - Create GetOrFindUsersController and binding
27
+ PB-51791 PCD 2.10 - Add new methods getByIds, getGroupsUsersByGropuId on GroupServiceWorkerService
28
+ PB-51999 PCD 2.10.B - Consolidate UserEntity between browser extension and styleguide
29
+ PB-52000 PCD 2.10.C - Move GroupEntity + GroupsCollection to the styleguide
30
+ PB-51792 PCD 2.11 - Create UserServiceWorkerService
31
+ PB-51793 PCD 2.12 - Create PermissionServiceWorkerService
32
+ PB-51794 PCD 2.13 - Create SearchUsersAndGroupsService
33
+ PB-51795 PCD 2.14 - Refactor ShareService into ShareApiService
34
+ PB-51796 PCD 2.15 - Update GroupApiService to support the new filter
35
+ PB-51798 PCD 2.17 - Update FindAndUpdateGroupsLocalStorageService to add a method findForLocalStorageByIds
36
+ PB-51799 PCD 2.18 - Align UserLocalStorage to add memory cache
37
+ PB-51800 PCD 2.19 - Rename UserService to UserApiService
38
+ PB-52047 CE/PRO upgrade
39
+ PB-49605 Grid columns min-width
40
+ PB-51808 PCD 2.27 - Create UserPermissionItem
41
+ PB-51809 PCD 2.28 - Create GroupUserPermissionItem
42
+ PB-47929 PAG - WP1.1 Add pagination support to ResourceService
43
+ PB-47930 PAG - WP1.2 Paginate resource fetch for updating local storage in FindResourceService
44
+ PB-52056 Add create method to SubscriptionKeyServiceWorkerService
45
+ PB-52057 Add delete method to SubscriptionKeyServiceWorkerService
46
+ PB-52058 Adapt EditSubscriptionKey to be customizable
47
+ PB-52061 Adapt DisplaySubscriptionKeyTeasing to handle upgrade from app
48
+ PB-52064 Create ConfirmDowngradeSubscriptionDialog
49
+ PB-52062 Adapt DisplaySubscriptionKey to handle downgrading
50
+ PB-52128 DisplaySubscriptionKey new layout
51
+
52
+ ### Security
53
+ PB-51937 Fix ws GHSA-58qx-3vcg-4xpx - MEDIUM CVSS3.1
54
+ PB-51938 Fix brace-expansion GHSA-jxxr-4gwj-5jf2 - MEDIUM CVSS3.1
55
+ PB-52029 Fix tmp GHSA-ph9p-34f9-6g65 - HIGH CVSS4.0
56
+ PB-51532 Include GitLab file from ci-definitions repo
57
+ PB-51642 Fix fast-uri GHSA-q3j6-qgpj-74h6 - HIGH CVSS3.1
58
+ PB-51643 Fix @babel/plugin-transform-modules-systemjs GHSA-fv7c-fp4j-7gwp - HIGH CVSS3.1
59
+ PB-51940 Fix qs GHSA-q8mj-m7cp-5q26 - MEDIUM CVSS4.0
60
+ PB-52030 Fix webpack-dev-server GHSA-79cf-xcqc-c78w - MEDIUM CVSS3.1
61
+ PB-51698 Use correct passbolt repo names in safe-chain whitelist
62
+
63
+ ### Fixed
64
+ PB-52148 CSP is blocking upload to TOTP QRCode on Firefox
65
+ PB-50949 Fix MetadataKeysSettingsLocalStorageContext and MetadataTypesSettingsLocalStorageContext entity issue on storage changes
66
+ PB-52047 Fix Passbolt Pro Edition wording
67
+ PB-52156 Fix password preview button min-width
68
+
69
+ ### Maintenance
70
+ PB-48560 Use NODE_ENV for webpack mode config
71
+ PB-48564 Remove grunt-header
72
+ PB-48528 Transpile LESS from webpack
73
+ PB-48558 Extract translations directly from webpack
74
+ PB-48559 Remove rimraf
75
+ PB-49064 Remove Grunt
76
+ PB-48516 Replace eval sourcemap by inline
77
+ PB-48516 Prevent br tags to be added in translations.
78
+ PB-48516 Remove duplicated translations
79
+ PB-51793: Add PermissionServiceWorkerService and transfer Permission entity and collection on styleguide
80
+ PB-51160 Update Firefox manifest to avoid Mozilla warnings
81
+ PB-52155 Update github issue template
82
+
83
+ ## [5.12.2] - 2026-05-19
84
+ ### Fixed
85
+ - PB-51648 Fix add user to group reducing set timeout
86
+
7
87
  ## [5.12.1] - 2026-05-12
8
88
  ### Fixed
9
89
  - PB-51546 On Safari after log out, the login page does not show until the page is refreshed
@@ -2721,7 +2801,8 @@ self registration settings option in the left-side bar
2721
2801
  - AP: User with plugin installed
2722
2802
  - LU: Logged in user
2723
2803
 
2724
- [Unreleased]: https://github.com/passbolt/passbolt_browser_extension/compare/v5.12.1...HEAD
2804
+ [Unreleased]: https://github.com/passbolt/passbolt_browser_extension/compare/v5.12.2...HEAD
2805
+ [5.12.2]: https://github.com/passbolt/passbolt_browser_extension/compare/v5.12.1...v5.12.2
2725
2806
  [5.12.1]: https://github.com/passbolt/passbolt_browser_extension/compare/v5.12.0...v5.12.1
2726
2807
  [5.12.0]: https://github.com/passbolt/passbolt_browser_extension/compare/v5.11.3...v5.12.0
2727
2808
  [5.11.3]: https://github.com/passbolt/passbolt_browser_extension/compare/v5.11.2...v5.11.3
package/CONTRIBUTING.md CHANGED
@@ -15,18 +15,7 @@ There are a few guidelines that we need contributors to follow so that we have a
15
15
 
16
16
  ### Reporting a security Issue
17
17
 
18
- If you've found a security related issue in Passbolt, please don't open an issue in GitHub.
19
- Instead contact us at security@passbolt.com. In the spirit of responsible disclosure we ask that the reporter keep the
20
- issue confidential until we announce it.
21
-
22
- The passbolt team will take the following actions:
23
- - Try to first reproduce the issue and confirm the vulnerability.
24
- - Acknowledge to the reporter that we’ve received the issue and are working on a fix.
25
- - Get a fix/patch prepared and create associated automated tests.
26
- - Prepare a post describing the vulnerability, and the possible exploits.
27
- - Release new versions of all affected major versions.
28
- - Prominently feature the problem in the release announcement.
29
- - Provide credits in the release announcement to the reporter if they so desire.
18
+ If you've found a security related issue in Passbolt, please don't open an issue on GitHub. Follow our responsible disclosure process: https://www.passbolt.com/docs/contribute/security/vulnerability/.
30
19
 
31
20
  ### Reporting a bug
32
21
  Please only use github for bugs or pull request.
package/README.md CHANGED
@@ -5,14 +5,14 @@
5
5
  /_/ \__,_/____/____/_.___/\____/_/\__/
6
6
 
7
7
  Open source password manager for teams
8
- (c) 2025 Passbolt SA
8
+ (c) 2026 Passbolt SA
9
9
  https://www.passbolt.com
10
10
 
11
11
  ## License
12
12
 
13
13
  Passbolt - Open source password manager for teams
14
14
 
15
- (c) 2025 Passbolt SA
15
+ (c) 2026 Passbolt SA
16
16
 
17
17
  This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
18
18
  Public License (AGPL) as published by the Free Software Foundation version 3.
@@ -54,22 +54,11 @@ such as auto filling your passwords when visiting known websites.
54
54
 
55
55
  # Contributing
56
56
 
57
- Please check ```CONTRIBUTING.md``` for more information about how to get involved.
57
+ Please check [CONTRIBUTING.md](CONTRIBUTING.md) for more information about how to get involved.
58
58
 
59
- ### Reporting a security Issue
59
+ ## Reporting a security Issue
60
60
 
61
- If you've found a security related issue in Passbolt, please don't open an issue in GitHub.
62
- Instead contact us at security@passbolt.com. In the spirit of responsible disclosure we ask that the reporter keep the
63
- issue confidential until we announce it.
64
-
65
- The passbolt team will take the following actions:
66
- - Try to first reproduce the issue and confirm the vulnerability.
67
- - Acknowledge to the reporter that we’ve received the issue and are working on a fix.
68
- - Get a fix/patch prepared and create associated automated tests.
69
- - Prepare a post describing the vulnerability, and the possible exploits.
70
- - Release new versions of all affected major versions.
71
- - Prominently feature the problem in the release announcement.
72
- - Provide credits in the release announcement to the reporter if they so desire.
61
+ If you've found a security related issue in Passbolt, please don't open an issue on GitHub. Follow our responsible disclosure process: https://www.passbolt.com/docs/contribute/security/vulnerability/.
73
62
 
74
63
  # Quick how-to for developers
75
64
 
package/RELEASE_NOTES.md CHANGED
@@ -1,5 +1,4 @@
1
- Passbolt 5.12.1 fixes some slowlyness issues on Safari during navigation
1
+ Passbolt 5.12.2 fixes an issue that arose in Chrome 148, which caused a service worker that did not respond within the specified time limit to be terminated.
2
2
 
3
3
  ### Fixed
4
- - PB-51546 On Safari after log out, the login page does not show until the page is refreshed
5
- - PB-51547 On Safari after log in, some pages take a lot of time to display
4
+ - PB-51648 Fix add user to group reducing set timeout
package/SECURITY.md ADDED
@@ -0,0 +1,7 @@
1
+ # Security Policy
2
+
3
+ For general information about security at Passbolt, see https://www.passbolt.com/security
4
+
5
+ ## Reporting a security issue
6
+
7
+ If you've found a security issue in Passbolt, please do not open a public issue. Follow our responsible disclosure process: https://www.passbolt.com/docs/contribute/security/vulnerability/
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 5.12.0
13
+ */
14
+ const { defineConfig } = require('i18next-cli');
15
+
16
+ module.exports = defineConfig({
17
+ locales: ['en-UK'],
18
+ extract: {
19
+ input: ['src/all/**/*.{js,jsx}'],
20
+ output: 'src/all/locales/{{language}}/{{namespace}}.json',
21
+ functions: ['t', '*.t', 'translate', '*.translate'],
22
+ defaultNS: 'common',
23
+ keySeparator: false,
24
+ nsSeparator: false,
25
+ sort: true,
26
+ defaultValue: key => key,
27
+ },
28
+ });
package/jest.config.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "testEnvironment": "node",
3
3
  "setupFiles": [
4
+ "<rootDir>/test/jest.env-setup.js",
4
5
  "jest-webextension-mock",
5
6
  "<rootDir>/test/jest-webextension-force-runtime-id-setup-files.js"
6
7
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "passbolt-browser-extension",
3
- "version": "5.12.1",
3
+ "version": "5.13.0",
4
4
  "license": "AGPL-3.0",
5
5
  "copyright": "Copyright 2025 Passbolt SA",
6
6
  "description": "Passbolt web extension for the open source password manager for teams",
@@ -21,7 +21,7 @@
21
21
  "kdbxweb": "2.1.1",
22
22
  "openpgp": "^6.1.1",
23
23
  "papaparse": "^5.5.2",
24
- "passbolt-styleguide": "^5.12.1",
24
+ "passbolt-styleguide": "^5.13.0",
25
25
  "react": "^18.3.1",
26
26
  "react-dom": "^18.3.1",
27
27
  "secrets-passbolt": "github:passbolt/secrets.js#v2.0.1",
@@ -34,7 +34,7 @@
34
34
  "@babel/core": "^7.23.2",
35
35
  "@babel/helpers": "^7.26.10",
36
36
  "@babel/plugin-transform-runtime": "^7.22.9",
37
- "@babel/preset-env": "^7.22.9",
37
+ "@babel/preset-env": "^7.29.5",
38
38
  "@babel/preset-react": "^7.28.5",
39
39
  "@babel/runtime": "^7.27.0",
40
40
  "@babel/runtime-corejs3": "^7.26.10",
@@ -43,7 +43,8 @@
43
43
  "babel-jest": "^30.3.0",
44
44
  "babel-loader": "^8.2.3",
45
45
  "buffer": "^6.0.3",
46
- "crx": "^5.0.1",
46
+ "copy-webpack-plugin": "^14.0.0",
47
+ "dotenv": "^16.4.5",
47
48
  "eslint": "^9.39.4",
48
49
  "eslint-config-prettier": "^10.1.8",
49
50
  "eslint-import-resolver-alias": "^1.1.2",
@@ -59,11 +60,7 @@
59
60
  "filereader": "^0.10.3",
60
61
  "formdata-node": "^6.0.3",
61
62
  "globals": "^16.4.0",
62
- "grunt": "^1.0.3",
63
- "grunt-contrib-clean": "^2.0.0",
64
- "grunt-contrib-copy": "^1.0.0",
65
- "grunt-shell": "^4.0.0",
66
- "i18next-parser": "^9.3.0",
63
+ "i18next-cli": "^1.58.0",
67
64
  "jest": "^30.3.0",
68
65
  "jest-environment-jsdom": "^30.3.0",
69
66
  "jest-environment-node": "^30.3.0",
@@ -74,7 +71,7 @@
74
71
  "prettier": "3.6.2",
75
72
  "terser-webpack-plugin": "^5.4.0",
76
73
  "text-encoding-utf-8": "^1.0.2",
77
- "web-ext": "^10.1.0",
74
+ "web-ext": "^10.3.0",
78
75
  "webpack": "^5.105.2",
79
76
  "webpack-cli": "^7.0.2"
80
77
  },
@@ -83,41 +80,24 @@
83
80
  "uuid": "^14.0.0"
84
81
  },
85
82
  "scripts": {
86
- "build": "npx grunt build",
87
- "build:background-page": "webpack --config webpack.background-page.config.js",
88
- "build:safari:background-page": "webpack --config webpack.safari-background-page.config.js",
89
- "build:service-worker": "webpack --config webpack.service-worker.config.js; webpack --config webpack-offscreens.config.js",
90
- "build:content-scripts": "npm run build:content-scripts:app; npm run build:content-scripts:browser-integration; npm run build:content-scripts:public-website",
91
- "build:content-scripts:app": "webpack --config webpack-content-scripts.config.js",
92
- "build:content-scripts:browser-integration": "webpack --config webpack-content-scripts.browser-integration.config.js",
93
- "build:content-scripts:public-website": "webpack --config webpack-content-scripts.public-website-sign-in.config.js",
94
- "build:web-accessible-resources": "npm run build:web-accessible-resources:app; npm run build:web-accessible-resources:browser-integration",
95
- "build:web-accessible-resources:app": "webpack --config webpack-data.config.js; webpack --config webpack-data.download.config.js",
96
- "build:web-accessible-resources:browser-integration": "webpack --config webpack-data.in-form-call-to-action.config.js; webpack --config webpack-data.in-form-menu.config.js",
97
- "dev:build:background-page": "webpack --env debug=true --config webpack.background-page.config.js",
98
- "dev:build:safari:background-page": "webpack --env debug=true --config webpack.safari-background-page.config.js",
99
- "dev:build:service-worker": "webpack --env debug=true --config webpack.service-worker.config.js; webpack --env debug=true --config webpack-offscreens.config.js",
100
- "dev:build:content-scripts": "npm run dev:build:content-scripts:app; npm run dev:build:content-scripts:browser-integration; npm run dev:build:content-scripts:public-website",
101
- "dev:build:content-scripts:app": "webpack --env debug=true --config webpack-content-scripts.config.js",
102
- "dev:build:content-scripts:browser-integration": "webpack --env debug=true --config webpack-content-scripts.browser-integration.config.js",
103
- "dev:build:content-scripts:public-website": "webpack --env debug=true --config webpack-content-scripts.public-website-sign-in.config.js",
104
- "dev:build:web-accessible-resources": "npm run dev:build:web-accessible-resources:app; npm run dev:build:web-accessible-resources:browser-integration",
105
- "dev:build:web-accessible-resources:app": "webpack --env debug=true --config webpack-data.config.js; webpack --env debug=true --config webpack-data.download.config.js",
106
- "dev:build:web-accessible-resources:browser-integration": "webpack --env debug=true --config webpack-data.in-form-call-to-action.config.js; webpack --env debug=true --config webpack-data.in-form-menu.config.js",
107
- "dev:safari:build": "grunt build-safari-debug;",
83
+ "build": "webpack",
84
+ "build:firefox": "webpack --config webpack.firefox.config.js",
85
+ "build:chromium-mv2": "webpack --config webpack.chromium-mv2.config.js",
86
+ "build:chromium-mv3": "webpack --config webpack.chromium-mv3.config.js",
87
+ "build:safari": "webpack --config webpack.safari.config.js",
88
+ "dev:build:firefox": "NODE_ENV=development webpack --config webpack.firefox.config.js",
89
+ "dev:build:chromium-mv2": "NODE_ENV=development webpack --config webpack.chromium-mv2.config.js",
90
+ "dev:build:chromium-mv3": "NODE_ENV=development webpack --config webpack.chromium-mv3.config.js",
91
+ "dev:build:safari": "NODE_ENV=development webpack --config webpack.safari.config.js",
108
92
  "dev:safari:convert": "xcrun safari-web-extension-converter --app-name Passbolt-Safari-Extension --swift --macos-only --project-location ./build-safari-extension --bundle-identifier com.passbolt.safari-extension --force --no-open build/all/",
109
- "dev:watch:build:background-page": "npm run dev:build:background-page -- -w",
110
- "dev:watch:build:service-worker": "npm run dev:build:service-worker -- -w",
111
- "dev:watch:build:content-scripts:app": "npm run dev:build:content-scripts:app -- -w",
112
- "dev:watch:build:content-scripts:browser-integration": "npm run dev:build:content-scripts:browser-integration -- -w",
113
- "dev:watch:build:content-scripts:public-website": "npm run dev:build:content-scripts:public-website -- -w",
114
- "dev:watch:build:web-accessible-resources:app": "npm run dev:build:web-accessible-resources:app -- -w",
115
- "dev:watch:build:web-accessible-resources:browser-integration": "npm run dev:build:web-accessible-resources:browser-integration -- -w",
93
+ "dev:watch:build:firefox": "npm run dev:build:firefox -- -w",
94
+ "dev:watch:build:chromium-mv2": "npm run dev:build:chromium-mv2 -- -w",
95
+ "dev:watch:build:chromium-mv3": "npm run dev:build:chromium-mv3 -- -w",
96
+ "dev:watch:build:safari": "npm run dev:build:safari -- -w",
116
97
  "lint": "npm run lint:lockfile && npm run lint:eslint",
117
98
  "lint:lockfile": "lockfile-lint --path package-lock.json --allowed-hosts npm github.com --allowed-schemes \"https:\" \"git+ssh:\" --empty-hostname false --allowed-urls \"secrets-passbolt@2.0.1-ccce02543c135b0d92f69a70e960d634e7d64609@\"",
118
99
  "lint:eslint": "eslint src --max-warnings 0",
119
100
  "lint:eslint-fix": "eslint --fix src",
120
- "i18n:externalize": "i18next -c ./i18next-parser.config.js",
121
101
  "test": "npm run test:unit",
122
102
  "test:unit": "jest --no-cache ./src/all/ ./src/chrome-mv3/ ./src/chrome/ ./src/safari/",
123
103
  "test:coverage": "jest --no-cache ./src/all/ ./src/chrome-mv3/ ./src/safari/ --coverage",
@@ -40,7 +40,7 @@ import AccountRecoveryResponseEntity from "../../model/entity/accountRecovery/ac
40
40
  import MockExtension from "../../../../../test/mocks/mockExtension";
41
41
  import UserLocalStorage from "../../service/local_storage/userLocalStorage";
42
42
  import { defaultUserDto } from "passbolt-styleguide/src/shared/models/entity/user/userEntity.test.data";
43
- import UsersCollection from "../../model/entity/user/usersCollection";
43
+ import UsersCollection from "passbolt-styleguide/src/shared/models/entity/user/usersCollection";
44
44
  import { OpenpgpAssertion } from "../../utils/openpgp/openpgpAssertions";
45
45
 
46
46
  jest.mock("../../service/passphrase/getPassphraseService");
@@ -11,7 +11,7 @@
11
11
  * @link https://www.passbolt.com Passbolt(tm)
12
12
  * @since 5.4.0
13
13
  */
14
- import FindActionLogService from "../model/actionLog/findActionLogService";
14
+ import FindActionLogService from "../../model/actionLog/findActionLogService";
15
15
 
16
16
  class FindAllForActionLogController {
17
17
  /**
@@ -11,12 +11,12 @@
11
11
  * @link https://www.passbolt.com Passbolt(tm)
12
12
  * @since 5.4.0
13
13
  */
14
- import AccountEntity from "../model/entity/account/accountEntity";
15
- import { defaultAccountDto } from "../model/entity/account/accountEntity.test.data";
14
+ import AccountEntity from "../../model/entity/account/accountEntity";
15
+ import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
16
16
  import { defaultApiClientOptions } from "passbolt-styleguide/src/shared/lib/apiClient/apiClientOptions.test.data";
17
17
  import FindAllForActionLogController from "./findAllForActionLogController";
18
- import { defaultActionLogsCollection } from "../model/entity/actionLog/actionLogsCollection.test.data";
19
- import ActionLogsCollection from "../model/entity/actionLog/actionLogsCollection";
18
+ import { defaultActionLogsCollection } from "../../model/entity/actionLog/actionLogsCollection.test.data";
19
+ import ActionLogsCollection from "../../model/entity/actionLog/actionLogsCollection";
20
20
  import { v4 as uuid } from "uuid";
21
21
 
22
22
  describe("FindAllForActionLogController", () => {
@@ -50,6 +50,7 @@ import { resourceCollectionV4ToExport } from "../../service/resource/export/expo
50
50
  import { defaultDecryptedSharedMetadataKeysDtos } from "passbolt-styleguide/src/shared/models/entity/metadata/metadataKeysCollection.test.data";
51
51
  import MetadataKeysCollection from "passbolt-styleguide/src/shared/models/entity/metadata/metadataKeysCollection";
52
52
  import GetOrFindMetadataKeysService from "../../service/metadata/getOrFindMetadataKeysService";
53
+ import { mockPassboltResponse } from "passbolt-styleguide/test/mocks/mockApiResponse";
53
54
 
54
55
  beforeEach(async () => {
55
56
  await MockExtension.withConfiguredAccount();
@@ -112,7 +113,9 @@ describe("ExportResourcesFileController", () => {
112
113
  folder_parent_id: foldersDto[0].id,
113
114
  totp: defaultTotpDto({ secret_key: "THISISASECRET" }),
114
115
  });
115
- jest.spyOn(ResourceService.prototype, "findAll").mockImplementation(() => resourceCollectionV4);
116
+ jest
117
+ .spyOn(ResourceService.prototype, "findAll")
118
+ .mockImplementation(() => mockPassboltResponse(resourceCollectionV4));
116
119
  const result = await controller.exec(file);
117
120
 
118
121
  const blobFile = new Blob([result.file], { type: "text/csv" });
@@ -169,7 +172,9 @@ describe("ExportResourcesFileController", () => {
169
172
  });
170
173
 
171
174
  const exportResourcesFileEntity = new ExportResourcesFileEntity(file);
172
- jest.spyOn(ResourceService.prototype, "findAll").mockImplementation(() => resourceCollectionV4);
175
+ jest
176
+ .spyOn(ResourceService.prototype, "findAll")
177
+ .mockImplementation(() => mockPassboltResponse(resourceCollectionV4));
173
178
  await getKDBXContent(exportResourcesFileEntity, new ResourcesCollection(resourceCollectionV4));
174
179
 
175
180
  const result = await controller.exec(file);
@@ -12,6 +12,7 @@
12
12
  * @since 2.13.0
13
13
  */
14
14
  import FolderModel from "../../model/folder/folderModel";
15
+ import FindFoldersService from "../../service/folder/findFoldersService";
15
16
  import i18n from "../../sdk/i18n";
16
17
  import ProgressService from "../../service/progress/progressService";
17
18
 
@@ -28,6 +29,7 @@ class FolderCreateController {
28
29
  this.worker = worker;
29
30
  this.requestId = requestId;
30
31
  this.folderModel = new FolderModel(clientOptions, account);
32
+ this.findFoldersService = new FindFoldersService(clientOptions);
31
33
  this.progressService = new ProgressService(this.worker, i18n.t("Creating folder..."));
32
34
  }
33
35
 
@@ -52,7 +54,7 @@ class FolderCreateController {
52
54
  * TODO a remember me option to skip confirmation dialog
53
55
  */
54
56
  await this.progressService.finishStep(i18n.t("Fetching parent permissions"), true);
55
- const targetFolder = await this.folderModel.findForShare(folderEntity.folderParentId);
57
+ const targetFolder = await this.findFoldersService.findByIdWithPermissions(folderEntity.folderParentId);
56
58
 
57
59
  await this.progressService.finishStep(i18n.t("Saving permissions..."), true);
58
60
  const changes = await this.folderModel.calculatePermissionsChangesForCreate(folderEntity, targetFolder);
@@ -13,11 +13,11 @@
13
13
  */
14
14
 
15
15
  import { enableFetchMocks } from "jest-fetch-mock";
16
- import { defaultGroupsDtos } from "../../model/entity/group/groupsCollection.test.data";
16
+ import { defaultGroupsDtos } from "passbolt-styleguide/src/shared/models/entity/group/groupsCollection.test.data";
17
17
  import { mockApiResponse } from "../../../../../test/mocks/mockApiResponse";
18
18
  import FindMyGroupsController from "./findMyGroupsController";
19
19
  import { defaultApiClientOptions } from "passbolt-styleguide/src/shared/lib/apiClient/apiClientOptions.test.data";
20
- import GroupsCollection from "../../model/entity/group/groupsCollection";
20
+ import GroupsCollection from "passbolt-styleguide/src/shared/models/entity/group/groupsCollection";
21
21
  import MockExtension from "../../../../../test/mocks/mockExtension";
22
22
  import { pgpKeys } from "passbolt-styleguide/test/fixture/pgpKeys/keys";
23
23
  import FindGroupsService from "../../service/group/findGroupsService";
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 5.13.0
13
+ */
14
+ import GetOrFindGroupsService from "../../service/group/getOrFindGroupsService";
15
+ import { assertArrayUUID } from "../../utils/assertions";
16
+
17
+ /**
18
+ * Controller for the `passbolt.groups.get-by-ids` event. Returns the groups matching the given ids,
19
+ * served from the local storage cache when available and otherwise fetched from the API.
20
+ */
21
+ class GetOrFindGroupsController {
22
+ /**
23
+ * Constructor.
24
+ * @param {Worker} worker The associated worker.
25
+ * @param {string} requestId The associated request id.
26
+ * @param {ApiClientOptions} apiClientOptions The api client options.
27
+ * @param {AccountEntity} account The user account.
28
+ */
29
+ constructor(worker, requestId, apiClientOptions, account) {
30
+ this.worker = worker;
31
+ this.requestId = requestId;
32
+ this.getOrFindGroupsService = new GetOrFindGroupsService(account, apiClientOptions);
33
+ }
34
+
35
+ /**
36
+ * Controller executor.
37
+ * @param {Array<string>} groupIds The ids of the groups to retrieve.
38
+ * @returns {Promise<void>}
39
+ */
40
+ async _exec(groupIds) {
41
+ try {
42
+ const result = await this.exec(groupIds);
43
+ this.worker.port.emit(this.requestId, "SUCCESS", result);
44
+ } catch (error) {
45
+ console.error(error);
46
+ this.worker.port.emit(this.requestId, "ERROR", error);
47
+ }
48
+ }
49
+
50
+ /**
51
+ * Find all the groups matching the given ids.
52
+ * @param {Array<string>} groupIds The ids of the groups to retrieve.
53
+ * @returns {Promise<GroupsCollection>}
54
+ */
55
+ async exec(groupIds) {
56
+ assertArrayUUID(groupIds);
57
+ return this.getOrFindGroupsService.getOrFindByIds(groupIds);
58
+ }
59
+ }
60
+
61
+ export default GetOrFindGroupsController;