@webiny/api-headless-cms-workflows 0.0.0-unstable.9f53ea597d → 0.0.0-unstable.a85ef555b2

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 (510) hide show
  1. package/{features/EntryWorkflows/feature.d.ts → CmsWorkflowsFeature.d.ts} +1 -1
  2. package/CmsWorkflowsFeature.js +28 -0
  3. package/CmsWorkflowsFeature.js.map +1 -0
  4. package/domain/errors.d.ts +27 -0
  5. package/domain/errors.js +14 -0
  6. package/domain/errors.js.map +1 -0
  7. package/features/Workflows/feature.js +2 -0
  8. package/features/Workflows/feature.js.map +1 -1
  9. package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeCreate.d.ts +18 -6
  10. package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeCreate.js +30 -13
  11. package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeCreate.js.map +1 -1
  12. package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeUpdate.d.ts +23 -0
  13. package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeUpdate.js +44 -0
  14. package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeUpdate.js.map +1 -0
  15. package/features/hooks/BlockDeleteMultipleWhileInReview.d.ts +22 -0
  16. package/features/hooks/BlockDeleteMultipleWhileInReview.js +64 -0
  17. package/features/hooks/BlockDeleteMultipleWhileInReview.js.map +1 -0
  18. package/features/hooks/BlockDeleteWhileInReview.d.ts +18 -0
  19. package/features/hooks/BlockDeleteWhileInReview.js +45 -0
  20. package/features/hooks/BlockDeleteWhileInReview.js.map +1 -0
  21. package/features/hooks/BlockFolderChangeWhileInReview.d.ts +21 -0
  22. package/features/hooks/BlockFolderChangeWhileInReview.js +44 -0
  23. package/features/hooks/BlockFolderChangeWhileInReview.js.map +1 -0
  24. package/features/hooks/BlockMoveWhileInReview.d.ts +19 -0
  25. package/features/hooks/BlockMoveWhileInReview.js +46 -0
  26. package/features/hooks/BlockMoveWhileInReview.js.map +1 -0
  27. package/features/hooks/BlockRevisionDeleteWhileInReview.d.ts +17 -0
  28. package/features/hooks/BlockRevisionDeleteWhileInReview.js +46 -0
  29. package/features/hooks/BlockRevisionDeleteWhileInReview.js.map +1 -0
  30. package/features/hooks/BlockUpdateWhileInReview.d.ts +25 -0
  31. package/features/hooks/BlockUpdateWhileInReview.js +43 -0
  32. package/features/hooks/BlockUpdateWhileInReview.js.map +1 -0
  33. package/features/hooks/DeleteModelBoundToWorkflowDecorator.d.ts +22 -0
  34. package/features/hooks/DeleteModelBoundToWorkflowDecorator.js +52 -0
  35. package/features/hooks/DeleteModelBoundToWorkflowDecorator.js.map +1 -0
  36. package/features/hooks/DeleteModelTaskBoundToWorkflowDecorator.d.ts +27 -0
  37. package/features/hooks/DeleteModelTaskBoundToWorkflowDecorator.js +64 -0
  38. package/features/hooks/DeleteModelTaskBoundToWorkflowDecorator.js.map +1 -0
  39. package/features/hooks/DeleteReviewsOnEntriesDeleteMultiple.d.ts +19 -0
  40. package/features/hooks/DeleteReviewsOnEntriesDeleteMultiple.js +47 -0
  41. package/features/hooks/DeleteReviewsOnEntriesDeleteMultiple.js.map +1 -0
  42. package/features/hooks/DeleteReviewsOnEntryDelete.d.ts +19 -0
  43. package/features/hooks/DeleteReviewsOnEntryDelete.js +46 -0
  44. package/features/hooks/DeleteReviewsOnEntryDelete.js.map +1 -0
  45. package/features/hooks/DeleteReviewsOnRevisionDelete.d.ts +18 -0
  46. package/features/hooks/DeleteReviewsOnRevisionDelete.js +46 -0
  47. package/features/hooks/DeleteReviewsOnRevisionDelete.js.map +1 -0
  48. package/features/hooks/FullyDeleteModelBoundToWorkflowDecorator.d.ts +28 -0
  49. package/features/hooks/FullyDeleteModelBoundToWorkflowDecorator.js +63 -0
  50. package/features/hooks/FullyDeleteModelBoundToWorkflowDecorator.js.map +1 -0
  51. package/features/hooks/NullReviewStateOnRevisionCreate.d.ts +15 -0
  52. package/features/hooks/NullReviewStateOnRevisionCreate.js +17 -0
  53. package/features/hooks/NullReviewStateOnRevisionCreate.js.map +1 -0
  54. package/features/hooks/RequireApprovedReviewOnPublish.d.ts +22 -0
  55. package/features/hooks/RequireApprovedReviewOnPublish.js +43 -0
  56. package/features/hooks/RequireApprovedReviewOnPublish.js.map +1 -0
  57. package/features/hooks/RequireApprovedReviewOnRepublish.d.ts +23 -0
  58. package/features/hooks/RequireApprovedReviewOnRepublish.js +49 -0
  59. package/features/hooks/RequireApprovedReviewOnRepublish.js.map +1 -0
  60. package/features/hooks/feature.d.ts +8 -0
  61. package/features/hooks/feature.js +39 -0
  62. package/features/hooks/feature.js.map +1 -0
  63. package/features/target/CandidateFolderReadRules/CandidateFolderReadRules.d.ts +18 -0
  64. package/features/target/CandidateFolderReadRules/CandidateFolderReadRules.js +97 -0
  65. package/features/target/CandidateFolderReadRules/CandidateFolderReadRules.js.map +1 -0
  66. package/features/target/CandidateFolderReadRules/abstractions.d.ts +35 -0
  67. package/features/target/CandidateFolderReadRules/abstractions.js +5 -0
  68. package/features/target/CandidateFolderReadRules/abstractions.js.map +1 -0
  69. package/features/target/CandidateFolderReadRules/index.d.ts +1 -0
  70. package/features/target/CandidateFolderReadRules/index.js +1 -0
  71. package/features/target/CmsEntryAccess/CmsEntryAccess.d.ts +32 -0
  72. package/features/target/CmsEntryAccess/CmsEntryAccess.js +141 -0
  73. package/features/target/CmsEntryAccess/CmsEntryAccess.js.map +1 -0
  74. package/features/target/CmsEntryAccess/abstractions.d.ts +48 -0
  75. package/features/target/CmsEntryAccess/abstractions.js +5 -0
  76. package/features/target/CmsEntryAccess/abstractions.js.map +1 -0
  77. package/features/target/CmsEntryAccess/index.d.ts +2 -0
  78. package/features/target/CmsEntryAccess/index.js +2 -0
  79. package/features/target/CmsEntryAccess/unreadableCodes.d.ts +1 -0
  80. package/features/target/CmsEntryAccess/unreadableCodes.js +9 -0
  81. package/features/target/CmsEntryAccess/unreadableCodes.js.map +1 -0
  82. package/features/target/CmsEntryDeniedFolders/CmsEntryDeniedFolders.d.ts +21 -0
  83. package/features/target/CmsEntryDeniedFolders/CmsEntryDeniedFolders.js +66 -0
  84. package/features/target/CmsEntryDeniedFolders/CmsEntryDeniedFolders.js.map +1 -0
  85. package/features/target/CmsEntryDeniedFolders/abstractions.d.ts +23 -0
  86. package/features/target/CmsEntryDeniedFolders/abstractions.js +5 -0
  87. package/features/target/CmsEntryDeniedFolders/abstractions.js.map +1 -0
  88. package/features/target/CmsEntryDeniedFolders/index.d.ts +1 -0
  89. package/features/target/CmsEntryDeniedFolders/index.js +1 -0
  90. package/features/target/CmsEntryFolderExistsService/CmsEntryFolderExistsService.d.ts +18 -0
  91. package/features/target/CmsEntryFolderExistsService/CmsEntryFolderExistsService.js +43 -0
  92. package/features/target/CmsEntryFolderExistsService/CmsEntryFolderExistsService.js.map +1 -0
  93. package/features/target/CmsEntryFolderExistsService/abstractions.d.ts +23 -0
  94. package/features/target/CmsEntryFolderExistsService/abstractions.js +5 -0
  95. package/features/target/CmsEntryFolderExistsService/abstractions.js.map +1 -0
  96. package/features/target/CmsEntryFolderExistsService/index.d.ts +1 -0
  97. package/features/target/CmsEntryFolderExistsService/index.js +1 -0
  98. package/features/target/CmsEntryReviewNamespace/CmsModelReviewNamespace.d.ts +10 -0
  99. package/features/target/CmsEntryReviewNamespace/CmsModelReviewNamespace.js +14 -0
  100. package/features/target/CmsEntryReviewNamespace/CmsModelReviewNamespace.js.map +1 -0
  101. package/features/target/CmsEntryReviewNamespace/abstractions.d.ts +17 -0
  102. package/features/target/CmsEntryReviewNamespace/abstractions.js +5 -0
  103. package/features/target/CmsEntryReviewNamespace/abstractions.js.map +1 -0
  104. package/features/target/CmsEntryReviewNamespace/index.d.ts +1 -0
  105. package/features/target/CmsEntryReviewNamespace/index.js +1 -0
  106. package/features/target/CmsEntryReviewReadFilter/CmsEntryReviewReadFilter.d.ts +20 -0
  107. package/features/target/CmsEntryReviewReadFilter/CmsEntryReviewReadFilter.js +80 -0
  108. package/features/target/CmsEntryReviewReadFilter/CmsEntryReviewReadFilter.js.map +1 -0
  109. package/features/target/CmsEntryReviewReadFilter/abstractions.d.ts +24 -0
  110. package/features/target/CmsEntryReviewReadFilter/abstractions.js +5 -0
  111. package/features/target/CmsEntryReviewReadFilter/abstractions.js.map +1 -0
  112. package/features/target/CmsEntryReviewReadFilter/index.d.ts +1 -0
  113. package/features/target/CmsEntryReviewReadFilter/index.js +1 -0
  114. package/features/target/CmsEntryReviewTargetEditor.d.ts +28 -0
  115. package/features/target/CmsEntryReviewTargetEditor.js +128 -0
  116. package/features/target/CmsEntryReviewTargetEditor.js.map +1 -0
  117. package/features/target/CmsEntryReviewTargetFolderChain.d.ts +22 -0
  118. package/features/target/CmsEntryReviewTargetFolderChain.js +37 -0
  119. package/features/target/CmsEntryReviewTargetFolderChain.js.map +1 -0
  120. package/features/target/CmsEntryReviewTargetLink.d.ts +17 -0
  121. package/features/target/CmsEntryReviewTargetLink.js +18 -0
  122. package/features/target/CmsEntryReviewTargetLink.js.map +1 -0
  123. package/features/target/CmsEntryReviewTargetLoader.d.ts +16 -0
  124. package/features/target/CmsEntryReviewTargetLoader.js +29 -0
  125. package/features/target/CmsEntryReviewTargetLoader.js.map +1 -0
  126. package/features/target/CmsEntryReviewTargetReadAccess.d.ts +41 -0
  127. package/features/target/CmsEntryReviewTargetReadAccess.js +91 -0
  128. package/features/target/CmsEntryReviewTargetReadAccess.js.map +1 -0
  129. package/features/target/CmsEntryReviewTargetSync.d.ts +23 -0
  130. package/features/target/CmsEntryReviewTargetSync.js +42 -0
  131. package/features/target/CmsEntryReviewTargetSync.js.map +1 -0
  132. package/features/target/CmsEntryTargetReader/CmsEntryTargetReader.d.ts +27 -0
  133. package/features/target/CmsEntryTargetReader/CmsEntryTargetReader.js +81 -0
  134. package/features/target/CmsEntryTargetReader/CmsEntryTargetReader.js.map +1 -0
  135. package/features/target/CmsEntryTargetReader/abstractions.d.ts +40 -0
  136. package/features/target/CmsEntryTargetReader/abstractions.js +5 -0
  137. package/features/target/CmsEntryTargetReader/abstractions.js.map +1 -0
  138. package/features/target/CmsEntryTargetReader/index.d.ts +1 -0
  139. package/features/target/CmsEntryTargetReader/index.js +1 -0
  140. package/features/target/CmsModelGroupService/CmsModelGroupService.d.ts +12 -0
  141. package/features/target/CmsModelGroupService/CmsModelGroupService.js +25 -0
  142. package/features/target/CmsModelGroupService/CmsModelGroupService.js.map +1 -0
  143. package/features/target/CmsModelGroupService/abstractions.d.ts +24 -0
  144. package/features/target/CmsModelGroupService/abstractions.js +5 -0
  145. package/features/target/CmsModelGroupService/abstractions.js.map +1 -0
  146. package/features/target/CmsModelGroupService/index.d.ts +1 -0
  147. package/features/target/CmsModelGroupService/index.js +1 -0
  148. package/features/target/CmsWorkflowModelParser.d.ts +9 -0
  149. package/features/target/CmsWorkflowModelParser.js +18 -0
  150. package/features/target/CmsWorkflowModelParser.js.map +1 -0
  151. package/features/target/FolderReadRule.d.ts +9 -0
  152. package/features/target/FolderReadRule.js +0 -0
  153. package/features/target/WorkflowEntrySystemField.d.ts +13 -0
  154. package/features/target/WorkflowEntrySystemField.js +35 -0
  155. package/features/target/WorkflowEntrySystemField.js.map +1 -0
  156. package/features/target/feature.d.ts +5 -0
  157. package/features/target/feature.js +41 -0
  158. package/features/target/feature.js.map +1 -0
  159. package/features/target/getModelSafeValidationMessage.d.ts +11 -0
  160. package/features/target/getModelSafeValidationMessage.js +28 -0
  161. package/features/target/getModelSafeValidationMessage.js.map +1 -0
  162. package/features/target/isEditorFieldValue.d.ts +9 -0
  163. package/features/target/isEditorFieldValue.js +30 -0
  164. package/features/target/isEditorFieldValue.js.map +1 -0
  165. package/features/target/toCmsReviewTarget.d.ts +4 -0
  166. package/features/target/toCmsReviewTarget.js +26 -0
  167. package/features/target/toCmsReviewTarget.js.map +1 -0
  168. package/features/target/toEditorFields.d.ts +9 -0
  169. package/features/target/toEditorFields.js +48 -0
  170. package/features/target/toEditorFields.js.map +1 -0
  171. package/features/target/toEntryValuesPatch.d.ts +9 -0
  172. package/features/target/toEntryValuesPatch.js +31 -0
  173. package/features/target/toEntryValuesPatch.js.map +1 -0
  174. package/features/wrappers/ApproveCmsEntryReviewStep/ApproveCmsEntryReviewStepUseCase.d.ts +13 -0
  175. package/features/wrappers/ApproveCmsEntryReviewStep/ApproveCmsEntryReviewStepUseCase.js +35 -0
  176. package/features/wrappers/ApproveCmsEntryReviewStep/ApproveCmsEntryReviewStepUseCase.js.map +1 -0
  177. package/features/wrappers/ApproveCmsEntryReviewStep/abstractions.d.ts +26 -0
  178. package/features/wrappers/ApproveCmsEntryReviewStep/abstractions.js +5 -0
  179. package/features/wrappers/ApproveCmsEntryReviewStep/abstractions.js.map +1 -0
  180. package/features/wrappers/ApproveCmsEntryReviewStep/feature.d.ts +4 -0
  181. package/features/wrappers/ApproveCmsEntryReviewStep/feature.js +11 -0
  182. package/features/wrappers/ApproveCmsEntryReviewStep/feature.js.map +1 -0
  183. package/features/wrappers/ApproveCmsEntryReviewStep/index.d.ts +1 -0
  184. package/features/wrappers/ApproveCmsEntryReviewStep/index.js +1 -0
  185. package/features/wrappers/CancelCmsEntryReview/CancelCmsEntryReviewUseCase.d.ts +13 -0
  186. package/features/wrappers/CancelCmsEntryReview/CancelCmsEntryReviewUseCase.js +37 -0
  187. package/features/wrappers/CancelCmsEntryReview/CancelCmsEntryReviewUseCase.js.map +1 -0
  188. package/features/wrappers/CancelCmsEntryReview/abstractions.d.ts +30 -0
  189. package/features/wrappers/CancelCmsEntryReview/abstractions.js +5 -0
  190. package/features/wrappers/CancelCmsEntryReview/abstractions.js.map +1 -0
  191. package/features/wrappers/CancelCmsEntryReview/feature.d.ts +4 -0
  192. package/features/wrappers/CancelCmsEntryReview/feature.js +11 -0
  193. package/features/wrappers/CancelCmsEntryReview/feature.js.map +1 -0
  194. package/features/wrappers/CancelCmsEntryReview/index.d.ts +1 -0
  195. package/features/wrappers/CancelCmsEntryReview/index.js +1 -0
  196. package/features/wrappers/CancelCmsEntryReviewsForDelete/CancelCmsEntryReviewsForDeleteUseCase.d.ts +19 -0
  197. package/features/wrappers/CancelCmsEntryReviewsForDelete/CancelCmsEntryReviewsForDeleteUseCase.js +85 -0
  198. package/features/wrappers/CancelCmsEntryReviewsForDelete/CancelCmsEntryReviewsForDeleteUseCase.js.map +1 -0
  199. package/features/wrappers/CancelCmsEntryReviewsForDelete/abstractions.d.ts +41 -0
  200. package/features/wrappers/CancelCmsEntryReviewsForDelete/abstractions.js +5 -0
  201. package/features/wrappers/CancelCmsEntryReviewsForDelete/abstractions.js.map +1 -0
  202. package/features/wrappers/CancelCmsEntryReviewsForDelete/feature.d.ts +4 -0
  203. package/features/wrappers/CancelCmsEntryReviewsForDelete/feature.js +11 -0
  204. package/features/wrappers/CancelCmsEntryReviewsForDelete/feature.js.map +1 -0
  205. package/features/wrappers/CancelCmsEntryReviewsForDelete/index.d.ts +1 -0
  206. package/features/wrappers/CancelCmsEntryReviewsForDelete/index.js +1 -0
  207. package/features/wrappers/CmsEntryFolderExists/CmsEntryFolderExistsUseCase.d.ts +15 -0
  208. package/features/wrappers/CmsEntryFolderExists/CmsEntryFolderExistsUseCase.js +46 -0
  209. package/features/wrappers/CmsEntryFolderExists/CmsEntryFolderExistsUseCase.js.map +1 -0
  210. package/features/wrappers/CmsEntryFolderExists/abstractions.d.ts +29 -0
  211. package/features/wrappers/CmsEntryFolderExists/abstractions.js +5 -0
  212. package/features/wrappers/CmsEntryFolderExists/abstractions.js.map +1 -0
  213. package/features/wrappers/CmsEntryFolderExists/feature.d.ts +4 -0
  214. package/features/wrappers/CmsEntryFolderExists/feature.js +11 -0
  215. package/features/wrappers/CmsEntryFolderExists/feature.js.map +1 -0
  216. package/features/wrappers/CmsEntryFolderExists/index.d.ts +1 -0
  217. package/features/wrappers/CmsEntryFolderExists/index.js +1 -0
  218. package/features/wrappers/CmsEntryReviewGuardService/CmsEntryReviewGuardService.d.ts +17 -0
  219. package/features/wrappers/CmsEntryReviewGuardService/CmsEntryReviewGuardService.js +63 -0
  220. package/features/wrappers/CmsEntryReviewGuardService/CmsEntryReviewGuardService.js.map +1 -0
  221. package/features/wrappers/CmsEntryReviewGuardService/abstractions.d.ts +37 -0
  222. package/features/wrappers/CmsEntryReviewGuardService/abstractions.js +5 -0
  223. package/features/wrappers/CmsEntryReviewGuardService/abstractions.js.map +1 -0
  224. package/features/wrappers/CmsEntryReviewGuardService/index.d.ts +1 -0
  225. package/features/wrappers/CmsEntryReviewGuardService/index.js +1 -0
  226. package/features/wrappers/DeleteCmsEntryWorkflow/DeleteCmsEntryWorkflowUseCase.d.ts +25 -0
  227. package/features/wrappers/DeleteCmsEntryWorkflow/DeleteCmsEntryWorkflowUseCase.js +98 -0
  228. package/features/wrappers/DeleteCmsEntryWorkflow/DeleteCmsEntryWorkflowUseCase.js.map +1 -0
  229. package/features/wrappers/DeleteCmsEntryWorkflow/abstractions.d.ts +32 -0
  230. package/features/wrappers/DeleteCmsEntryWorkflow/abstractions.js +5 -0
  231. package/features/wrappers/DeleteCmsEntryWorkflow/abstractions.js.map +1 -0
  232. package/features/wrappers/DeleteCmsEntryWorkflow/feature.d.ts +4 -0
  233. package/features/wrappers/DeleteCmsEntryWorkflow/feature.js +11 -0
  234. package/features/wrappers/DeleteCmsEntryWorkflow/feature.js.map +1 -0
  235. package/features/wrappers/DeleteCmsEntryWorkflow/index.d.ts +1 -0
  236. package/features/wrappers/DeleteCmsEntryWorkflow/index.js +1 -0
  237. package/features/wrappers/GetCmsEntryReview/GetCmsEntryReviewUseCase.d.ts +13 -0
  238. package/features/wrappers/GetCmsEntryReview/GetCmsEntryReviewUseCase.js +40 -0
  239. package/features/wrappers/GetCmsEntryReview/GetCmsEntryReviewUseCase.js.map +1 -0
  240. package/features/wrappers/GetCmsEntryReview/abstractions.d.ts +28 -0
  241. package/features/wrappers/GetCmsEntryReview/abstractions.js +5 -0
  242. package/features/wrappers/GetCmsEntryReview/abstractions.js.map +1 -0
  243. package/features/wrappers/GetCmsEntryReview/feature.d.ts +4 -0
  244. package/features/wrappers/GetCmsEntryReview/feature.js +11 -0
  245. package/features/wrappers/GetCmsEntryReview/feature.js.map +1 -0
  246. package/features/wrappers/GetCmsEntryReview/index.d.ts +1 -0
  247. package/features/wrappers/GetCmsEntryReview/index.js +1 -0
  248. package/features/wrappers/GetCmsEntryReviewStepRun/GetCmsEntryReviewStepRunUseCase.d.ts +13 -0
  249. package/features/wrappers/GetCmsEntryReviewStepRun/GetCmsEntryReviewStepRunUseCase.js +39 -0
  250. package/features/wrappers/GetCmsEntryReviewStepRun/GetCmsEntryReviewStepRunUseCase.js.map +1 -0
  251. package/features/wrappers/GetCmsEntryReviewStepRun/abstractions.d.ts +33 -0
  252. package/features/wrappers/GetCmsEntryReviewStepRun/abstractions.js +5 -0
  253. package/features/wrappers/GetCmsEntryReviewStepRun/abstractions.js.map +1 -0
  254. package/features/wrappers/GetCmsEntryReviewStepRun/feature.d.ts +4 -0
  255. package/features/wrappers/GetCmsEntryReviewStepRun/feature.js +11 -0
  256. package/features/wrappers/GetCmsEntryReviewStepRun/feature.js.map +1 -0
  257. package/features/wrappers/GetCmsEntryReviewStepRun/index.d.ts +1 -0
  258. package/features/wrappers/GetCmsEntryReviewStepRun/index.js +1 -0
  259. package/features/wrappers/GetCmsEntryTargetReview/GetCmsEntryTargetReviewUseCase.d.ts +19 -0
  260. package/features/wrappers/GetCmsEntryTargetReview/GetCmsEntryTargetReviewUseCase.js +76 -0
  261. package/features/wrappers/GetCmsEntryTargetReview/GetCmsEntryTargetReviewUseCase.js.map +1 -0
  262. package/features/wrappers/GetCmsEntryTargetReview/abstractions.d.ts +36 -0
  263. package/features/wrappers/GetCmsEntryTargetReview/abstractions.js +5 -0
  264. package/features/wrappers/GetCmsEntryTargetReview/abstractions.js.map +1 -0
  265. package/features/wrappers/GetCmsEntryTargetReview/feature.d.ts +4 -0
  266. package/features/wrappers/GetCmsEntryTargetReview/feature.js +11 -0
  267. package/features/wrappers/GetCmsEntryTargetReview/feature.js.map +1 -0
  268. package/features/wrappers/GetCmsEntryTargetReview/index.d.ts +1 -0
  269. package/features/wrappers/GetCmsEntryTargetReview/index.js +1 -0
  270. package/features/wrappers/GetCmsEntryWorkflow/GetCmsEntryWorkflowUseCase.d.ts +13 -0
  271. package/features/wrappers/GetCmsEntryWorkflow/GetCmsEntryWorkflowUseCase.js +34 -0
  272. package/features/wrappers/GetCmsEntryWorkflow/GetCmsEntryWorkflowUseCase.js.map +1 -0
  273. package/features/wrappers/GetCmsEntryWorkflow/abstractions.d.ts +24 -0
  274. package/features/wrappers/GetCmsEntryWorkflow/abstractions.js +5 -0
  275. package/features/wrappers/GetCmsEntryWorkflow/abstractions.js.map +1 -0
  276. package/features/wrappers/GetCmsEntryWorkflow/feature.d.ts +4 -0
  277. package/features/wrappers/GetCmsEntryWorkflow/feature.js +11 -0
  278. package/features/wrappers/GetCmsEntryWorkflow/feature.js.map +1 -0
  279. package/features/wrappers/GetCmsEntryWorkflow/index.d.ts +1 -0
  280. package/features/wrappers/GetCmsEntryWorkflow/index.js +1 -0
  281. package/features/wrappers/InspectCmsEntryRouting/InspectCmsEntryRoutingUseCase.d.ts +19 -0
  282. package/features/wrappers/InspectCmsEntryRouting/InspectCmsEntryRoutingUseCase.js +54 -0
  283. package/features/wrappers/InspectCmsEntryRouting/InspectCmsEntryRoutingUseCase.js.map +1 -0
  284. package/features/wrappers/InspectCmsEntryRouting/abstractions.d.ts +37 -0
  285. package/features/wrappers/InspectCmsEntryRouting/abstractions.js +5 -0
  286. package/features/wrappers/InspectCmsEntryRouting/abstractions.js.map +1 -0
  287. package/features/wrappers/InspectCmsEntryRouting/feature.d.ts +4 -0
  288. package/features/wrappers/InspectCmsEntryRouting/feature.js +11 -0
  289. package/features/wrappers/InspectCmsEntryRouting/feature.js.map +1 -0
  290. package/features/wrappers/InspectCmsEntryRouting/index.d.ts +1 -0
  291. package/features/wrappers/InspectCmsEntryRouting/index.js +1 -0
  292. package/features/wrappers/ListCmsEntryBlockingReviews/ListCmsEntryBlockingReviewsUseCase.d.ts +25 -0
  293. package/features/wrappers/ListCmsEntryBlockingReviews/ListCmsEntryBlockingReviewsUseCase.js +109 -0
  294. package/features/wrappers/ListCmsEntryBlockingReviews/ListCmsEntryBlockingReviewsUseCase.js.map +1 -0
  295. package/features/wrappers/ListCmsEntryBlockingReviews/abstractions.d.ts +36 -0
  296. package/features/wrappers/ListCmsEntryBlockingReviews/abstractions.js +6 -0
  297. package/features/wrappers/ListCmsEntryBlockingReviews/abstractions.js.map +1 -0
  298. package/features/wrappers/ListCmsEntryBlockingReviews/feature.d.ts +4 -0
  299. package/features/wrappers/ListCmsEntryBlockingReviews/feature.js +11 -0
  300. package/features/wrappers/ListCmsEntryBlockingReviews/feature.js.map +1 -0
  301. package/features/wrappers/ListCmsEntryBlockingReviews/index.d.ts +1 -0
  302. package/features/wrappers/ListCmsEntryBlockingReviews/index.js +1 -0
  303. package/features/wrappers/ListCmsEntryReviewStepCandidates/ListCmsEntryReviewStepCandidatesUseCase.d.ts +13 -0
  304. package/features/wrappers/ListCmsEntryReviewStepCandidates/ListCmsEntryReviewStepCandidatesUseCase.js +41 -0
  305. package/features/wrappers/ListCmsEntryReviewStepCandidates/ListCmsEntryReviewStepCandidatesUseCase.js.map +1 -0
  306. package/features/wrappers/ListCmsEntryReviewStepCandidates/abstractions.d.ts +30 -0
  307. package/features/wrappers/ListCmsEntryReviewStepCandidates/abstractions.js +5 -0
  308. package/features/wrappers/ListCmsEntryReviewStepCandidates/abstractions.js.map +1 -0
  309. package/features/wrappers/ListCmsEntryReviewStepCandidates/feature.d.ts +4 -0
  310. package/features/wrappers/ListCmsEntryReviewStepCandidates/feature.js +11 -0
  311. package/features/wrappers/ListCmsEntryReviewStepCandidates/feature.js.map +1 -0
  312. package/features/wrappers/ListCmsEntryReviewStepCandidates/index.d.ts +1 -0
  313. package/features/wrappers/ListCmsEntryReviewStepCandidates/index.js +1 -0
  314. package/features/wrappers/ListCmsEntryReviews/ListCmsEntryReviewsUseCase.d.ts +17 -0
  315. package/features/wrappers/ListCmsEntryReviews/ListCmsEntryReviewsUseCase.js +85 -0
  316. package/features/wrappers/ListCmsEntryReviews/ListCmsEntryReviewsUseCase.js.map +1 -0
  317. package/features/wrappers/ListCmsEntryReviews/abstractions.d.ts +50 -0
  318. package/features/wrappers/ListCmsEntryReviews/abstractions.js +5 -0
  319. package/features/wrappers/ListCmsEntryReviews/abstractions.js.map +1 -0
  320. package/features/wrappers/ListCmsEntryReviews/feature.d.ts +4 -0
  321. package/features/wrappers/ListCmsEntryReviews/feature.js +11 -0
  322. package/features/wrappers/ListCmsEntryReviews/feature.js.map +1 -0
  323. package/features/wrappers/ListCmsEntryReviews/index.d.ts +1 -0
  324. package/features/wrappers/ListCmsEntryReviews/index.js +1 -0
  325. package/features/wrappers/ListCmsEntryStepCandidates/ListCmsEntryStepCandidatesUseCase.d.ts +25 -0
  326. package/features/wrappers/ListCmsEntryStepCandidates/ListCmsEntryStepCandidatesUseCase.js +83 -0
  327. package/features/wrappers/ListCmsEntryStepCandidates/ListCmsEntryStepCandidatesUseCase.js.map +1 -0
  328. package/features/wrappers/ListCmsEntryStepCandidates/abstractions.d.ts +41 -0
  329. package/features/wrappers/ListCmsEntryStepCandidates/abstractions.js +5 -0
  330. package/features/wrappers/ListCmsEntryStepCandidates/abstractions.js.map +1 -0
  331. package/features/wrappers/ListCmsEntryStepCandidates/feature.d.ts +4 -0
  332. package/features/wrappers/ListCmsEntryStepCandidates/feature.js +11 -0
  333. package/features/wrappers/ListCmsEntryStepCandidates/feature.js.map +1 -0
  334. package/features/wrappers/ListCmsEntryStepCandidates/index.d.ts +1 -0
  335. package/features/wrappers/ListCmsEntryStepCandidates/index.js +1 -0
  336. package/features/wrappers/ListCmsEntryWorkflowModels/ListCmsEntryWorkflowModelsUseCase.d.ts +17 -0
  337. package/features/wrappers/ListCmsEntryWorkflowModels/ListCmsEntryWorkflowModelsUseCase.js +106 -0
  338. package/features/wrappers/ListCmsEntryWorkflowModels/ListCmsEntryWorkflowModelsUseCase.js.map +1 -0
  339. package/features/wrappers/ListCmsEntryWorkflowModels/abstractions.d.ts +58 -0
  340. package/features/wrappers/ListCmsEntryWorkflowModels/abstractions.js +5 -0
  341. package/features/wrappers/ListCmsEntryWorkflowModels/abstractions.js.map +1 -0
  342. package/features/wrappers/ListCmsEntryWorkflowModels/feature.d.ts +4 -0
  343. package/features/wrappers/ListCmsEntryWorkflowModels/feature.js +11 -0
  344. package/features/wrappers/ListCmsEntryWorkflowModels/feature.js.map +1 -0
  345. package/features/wrappers/ListCmsEntryWorkflowModels/index.d.ts +2 -0
  346. package/features/wrappers/ListCmsEntryWorkflowModels/index.js +1 -0
  347. package/features/wrappers/ListCmsEntryWorkflowModels/modelListCursor.d.ts +8 -0
  348. package/features/wrappers/ListCmsEntryWorkflowModels/modelListCursor.js +20 -0
  349. package/features/wrappers/ListCmsEntryWorkflowModels/modelListCursor.js.map +1 -0
  350. package/features/wrappers/ListCmsEntryWorkflows/ListCmsEntryWorkflowsUseCase.d.ts +17 -0
  351. package/features/wrappers/ListCmsEntryWorkflows/ListCmsEntryWorkflowsUseCase.js +43 -0
  352. package/features/wrappers/ListCmsEntryWorkflows/ListCmsEntryWorkflowsUseCase.js.map +1 -0
  353. package/features/wrappers/ListCmsEntryWorkflows/abstractions.d.ts +24 -0
  354. package/features/wrappers/ListCmsEntryWorkflows/abstractions.js +5 -0
  355. package/features/wrappers/ListCmsEntryWorkflows/abstractions.js.map +1 -0
  356. package/features/wrappers/ListCmsEntryWorkflows/feature.d.ts +4 -0
  357. package/features/wrappers/ListCmsEntryWorkflows/feature.js +11 -0
  358. package/features/wrappers/ListCmsEntryWorkflows/feature.js.map +1 -0
  359. package/features/wrappers/ListCmsEntryWorkflows/index.d.ts +1 -0
  360. package/features/wrappers/ListCmsEntryWorkflows/index.js +1 -0
  361. package/features/wrappers/ReassignCmsEntryReviewStep/ReassignCmsEntryReviewStepUseCase.d.ts +13 -0
  362. package/features/wrappers/ReassignCmsEntryReviewStep/ReassignCmsEntryReviewStepUseCase.js +40 -0
  363. package/features/wrappers/ReassignCmsEntryReviewStep/ReassignCmsEntryReviewStepUseCase.js.map +1 -0
  364. package/features/wrappers/ReassignCmsEntryReviewStep/abstractions.d.ts +32 -0
  365. package/features/wrappers/ReassignCmsEntryReviewStep/abstractions.js +5 -0
  366. package/features/wrappers/ReassignCmsEntryReviewStep/abstractions.js.map +1 -0
  367. package/features/wrappers/ReassignCmsEntryReviewStep/feature.d.ts +4 -0
  368. package/features/wrappers/ReassignCmsEntryReviewStep/feature.js +11 -0
  369. package/features/wrappers/ReassignCmsEntryReviewStep/feature.js.map +1 -0
  370. package/features/wrappers/ReassignCmsEntryReviewStep/index.d.ts +1 -0
  371. package/features/wrappers/ReassignCmsEntryReviewStep/index.js +1 -0
  372. package/features/wrappers/RejectCmsEntryReviewStep/RejectCmsEntryReviewStepUseCase.d.ts +13 -0
  373. package/features/wrappers/RejectCmsEntryReviewStep/RejectCmsEntryReviewStepUseCase.js +35 -0
  374. package/features/wrappers/RejectCmsEntryReviewStep/RejectCmsEntryReviewStepUseCase.js.map +1 -0
  375. package/features/wrappers/RejectCmsEntryReviewStep/abstractions.d.ts +26 -0
  376. package/features/wrappers/RejectCmsEntryReviewStep/abstractions.js +5 -0
  377. package/features/wrappers/RejectCmsEntryReviewStep/abstractions.js.map +1 -0
  378. package/features/wrappers/RejectCmsEntryReviewStep/feature.d.ts +4 -0
  379. package/features/wrappers/RejectCmsEntryReviewStep/feature.js +11 -0
  380. package/features/wrappers/RejectCmsEntryReviewStep/feature.js.map +1 -0
  381. package/features/wrappers/RejectCmsEntryReviewStep/index.d.ts +1 -0
  382. package/features/wrappers/RejectCmsEntryReviewStep/index.js +1 -0
  383. package/features/wrappers/RequestCmsEntryReview/RequestCmsEntryReviewUseCase.d.ts +21 -0
  384. package/features/wrappers/RequestCmsEntryReview/RequestCmsEntryReviewUseCase.js +63 -0
  385. package/features/wrappers/RequestCmsEntryReview/RequestCmsEntryReviewUseCase.js.map +1 -0
  386. package/features/wrappers/RequestCmsEntryReview/abstractions.d.ts +38 -0
  387. package/features/wrappers/RequestCmsEntryReview/abstractions.js +5 -0
  388. package/features/wrappers/RequestCmsEntryReview/abstractions.js.map +1 -0
  389. package/features/wrappers/RequestCmsEntryReview/feature.d.ts +4 -0
  390. package/features/wrappers/RequestCmsEntryReview/feature.js +11 -0
  391. package/features/wrappers/RequestCmsEntryReview/feature.js.map +1 -0
  392. package/features/wrappers/RequestCmsEntryReview/index.d.ts +1 -0
  393. package/features/wrappers/RequestCmsEntryReview/index.js +1 -0
  394. package/features/wrappers/RestartCmsEntryReviewStep/RestartCmsEntryReviewStepUseCase.d.ts +13 -0
  395. package/features/wrappers/RestartCmsEntryReviewStep/RestartCmsEntryReviewStepUseCase.js +39 -0
  396. package/features/wrappers/RestartCmsEntryReviewStep/RestartCmsEntryReviewStepUseCase.js.map +1 -0
  397. package/features/wrappers/RestartCmsEntryReviewStep/abstractions.d.ts +30 -0
  398. package/features/wrappers/RestartCmsEntryReviewStep/abstractions.js +5 -0
  399. package/features/wrappers/RestartCmsEntryReviewStep/abstractions.js.map +1 -0
  400. package/features/wrappers/RestartCmsEntryReviewStep/feature.d.ts +4 -0
  401. package/features/wrappers/RestartCmsEntryReviewStep/feature.js +11 -0
  402. package/features/wrappers/RestartCmsEntryReviewStep/feature.js.map +1 -0
  403. package/features/wrappers/RestartCmsEntryReviewStep/index.d.ts +1 -0
  404. package/features/wrappers/RestartCmsEntryReviewStep/index.js +1 -0
  405. package/features/wrappers/StartCmsEntryReviewStep/StartCmsEntryReviewStepUseCase.d.ts +13 -0
  406. package/features/wrappers/StartCmsEntryReviewStep/StartCmsEntryReviewStepUseCase.js +34 -0
  407. package/features/wrappers/StartCmsEntryReviewStep/StartCmsEntryReviewStepUseCase.js.map +1 -0
  408. package/features/wrappers/StartCmsEntryReviewStep/abstractions.d.ts +25 -0
  409. package/features/wrappers/StartCmsEntryReviewStep/abstractions.js +5 -0
  410. package/features/wrappers/StartCmsEntryReviewStep/abstractions.js.map +1 -0
  411. package/features/wrappers/StartCmsEntryReviewStep/feature.d.ts +4 -0
  412. package/features/wrappers/StartCmsEntryReviewStep/feature.js +11 -0
  413. package/features/wrappers/StartCmsEntryReviewStep/feature.js.map +1 -0
  414. package/features/wrappers/StartCmsEntryReviewStep/index.d.ts +1 -0
  415. package/features/wrappers/StartCmsEntryReviewStep/index.js +1 -0
  416. package/features/wrappers/StoreCmsEntryWorkflow/StoreCmsEntryWorkflowUseCase.d.ts +17 -0
  417. package/features/wrappers/StoreCmsEntryWorkflow/StoreCmsEntryWorkflowUseCase.js +57 -0
  418. package/features/wrappers/StoreCmsEntryWorkflow/StoreCmsEntryWorkflowUseCase.js.map +1 -0
  419. package/features/wrappers/StoreCmsEntryWorkflow/abstractions.d.ts +32 -0
  420. package/features/wrappers/StoreCmsEntryWorkflow/abstractions.js +5 -0
  421. package/features/wrappers/StoreCmsEntryWorkflow/abstractions.js.map +1 -0
  422. package/features/wrappers/StoreCmsEntryWorkflow/feature.d.ts +4 -0
  423. package/features/wrappers/StoreCmsEntryWorkflow/feature.js +11 -0
  424. package/features/wrappers/StoreCmsEntryWorkflow/feature.js.map +1 -0
  425. package/features/wrappers/StoreCmsEntryWorkflow/index.d.ts +1 -0
  426. package/features/wrappers/StoreCmsEntryWorkflow/index.js +1 -0
  427. package/features/wrappers/TakeOverCmsEntryReviewStep/TakeOverCmsEntryReviewStepUseCase.d.ts +13 -0
  428. package/features/wrappers/TakeOverCmsEntryReviewStep/TakeOverCmsEntryReviewStepUseCase.js +35 -0
  429. package/features/wrappers/TakeOverCmsEntryReviewStep/TakeOverCmsEntryReviewStepUseCase.js.map +1 -0
  430. package/features/wrappers/TakeOverCmsEntryReviewStep/abstractions.d.ts +27 -0
  431. package/features/wrappers/TakeOverCmsEntryReviewStep/abstractions.js +5 -0
  432. package/features/wrappers/TakeOverCmsEntryReviewStep/abstractions.js.map +1 -0
  433. package/features/wrappers/TakeOverCmsEntryReviewStep/feature.d.ts +4 -0
  434. package/features/wrappers/TakeOverCmsEntryReviewStep/feature.js +11 -0
  435. package/features/wrappers/TakeOverCmsEntryReviewStep/feature.js.map +1 -0
  436. package/features/wrappers/TakeOverCmsEntryReviewStep/index.d.ts +1 -0
  437. package/features/wrappers/TakeOverCmsEntryReviewStep/index.js +1 -0
  438. package/features/wrappers/feature.d.ts +9 -0
  439. package/features/wrappers/feature.js +57 -0
  440. package/features/wrappers/feature.js.map +1 -0
  441. package/features/wrappers/shared/cmsWorkflows.d.ts +6 -0
  442. package/features/wrappers/shared/cmsWorkflows.js +8 -0
  443. package/features/wrappers/shared/cmsWorkflows.js.map +1 -0
  444. package/graphql/CmsWorkflowsSchemaFactory.d.ts +14 -0
  445. package/graphql/CmsWorkflowsSchemaFactory.js +695 -0
  446. package/graphql/CmsWorkflowsSchemaFactory.js.map +1 -0
  447. package/graphql/entrySystemSchema.d.ts +5 -1
  448. package/graphql/entrySystemSchema.js +3 -2
  449. package/graphql/entrySystemSchema.js.map +1 -1
  450. package/graphql/isValidRevisionId.d.ts +6 -0
  451. package/graphql/isValidRevisionId.js +9 -0
  452. package/graphql/isValidRevisionId.js.map +1 -0
  453. package/index.d.ts +2 -1
  454. package/index.js +1 -19
  455. package/package.json +22 -16
  456. package/types.d.ts +24 -0
  457. package/types.js +0 -0
  458. package/utils/appName.d.ts +9 -5
  459. package/utils/appName.js +6 -4
  460. package/utils/appName.js.map +1 -1
  461. package/utils/folderType.d.ts +4 -0
  462. package/utils/folderType.js +9 -0
  463. package/utils/folderType.js.map +1 -0
  464. package/utils/isBindableModel.d.ts +9 -0
  465. package/utils/isBindableModel.js +8 -0
  466. package/utils/isBindableModel.js.map +1 -0
  467. package/features/EntryWorkflows/decorators/CmsWorkflowStateContextProvider.d.ts +0 -15
  468. package/features/EntryWorkflows/decorators/CmsWorkflowStateContextProvider.js +0 -35
  469. package/features/EntryWorkflows/decorators/CmsWorkflowStateContextProvider.js.map +0 -1
  470. package/features/EntryWorkflows/decorators/CmsWorkflowStateFilter.d.ts +0 -13
  471. package/features/EntryWorkflows/decorators/CmsWorkflowStateFilter.js +0 -45
  472. package/features/EntryWorkflows/decorators/CmsWorkflowStateFilter.js.map +0 -1
  473. package/features/EntryWorkflows/errors.d.ts +0 -11
  474. package/features/EntryWorkflows/errors.js +0 -12
  475. package/features/EntryWorkflows/errors.js.map +0 -1
  476. package/features/EntryWorkflows/feature.js +0 -29
  477. package/features/EntryWorkflows/feature.js.map +0 -1
  478. package/features/EntryWorkflows/handlers/BlockMoveOnActiveWorkflowState.d.ts +0 -11
  479. package/features/EntryWorkflows/handlers/BlockMoveOnActiveWorkflowState.js +0 -37
  480. package/features/EntryWorkflows/handlers/BlockMoveOnActiveWorkflowState.js.map +0 -1
  481. package/features/EntryWorkflows/handlers/ClearEntryStateOnWorkflowStateAfterDelete.d.ts +0 -13
  482. package/features/EntryWorkflows/handlers/ClearEntryStateOnWorkflowStateAfterDelete.js +0 -35
  483. package/features/EntryWorkflows/handlers/ClearEntryStateOnWorkflowStateAfterDelete.js.map +0 -1
  484. package/features/EntryWorkflows/handlers/ClearEntryStateOnWorkflowStateCancel.d.ts +0 -13
  485. package/features/EntryWorkflows/handlers/ClearEntryStateOnWorkflowStateCancel.js +0 -35
  486. package/features/EntryWorkflows/handlers/ClearEntryStateOnWorkflowStateCancel.js.map +0 -1
  487. package/features/EntryWorkflows/handlers/DeleteWorkflowStateOnEntryAfterDelete.d.ts +0 -11
  488. package/features/EntryWorkflows/handlers/DeleteWorkflowStateOnEntryAfterDelete.js +0 -26
  489. package/features/EntryWorkflows/handlers/DeleteWorkflowStateOnEntryAfterDelete.js.map +0 -1
  490. package/features/EntryWorkflows/handlers/DeleteWorkflowsOnModelAfterDelete.d.ts +0 -13
  491. package/features/EntryWorkflows/handlers/DeleteWorkflowsOnModelAfterDelete.js +0 -41
  492. package/features/EntryWorkflows/handlers/DeleteWorkflowsOnModelAfterDelete.js.map +0 -1
  493. package/features/EntryWorkflows/handlers/UpdateEntryOnWorkflowStateAfterCreate.d.ts +0 -13
  494. package/features/EntryWorkflows/handlers/UpdateEntryOnWorkflowStateAfterCreate.js +0 -37
  495. package/features/EntryWorkflows/handlers/UpdateEntryOnWorkflowStateAfterCreate.js.map +0 -1
  496. package/features/EntryWorkflows/handlers/UpdateEntryOnWorkflowStateAfterUpdate.d.ts +0 -13
  497. package/features/EntryWorkflows/handlers/UpdateEntryOnWorkflowStateAfterUpdate.js +0 -36
  498. package/features/EntryWorkflows/handlers/UpdateEntryOnWorkflowStateAfterUpdate.js.map +0 -1
  499. package/features/EntryWorkflows/handlers/ValidateWorkflowStateOnEntryBeforePublish.d.ts +0 -11
  500. package/features/EntryWorkflows/handlers/ValidateWorkflowStateOnEntryBeforePublish.js +0 -46
  501. package/features/EntryWorkflows/handlers/ValidateWorkflowStateOnEntryBeforePublish.js.map +0 -1
  502. package/features/EntryWorkflows/index.d.ts +0 -1
  503. package/features/EntryWorkflows/index.js +0 -1
  504. package/index.js.map +0 -1
  505. package/utils/modelAllowed.d.ts +0 -2
  506. package/utils/modelAllowed.js +0 -9
  507. package/utils/modelAllowed.js.map +0 -1
  508. package/utils/state.d.ts +0 -3
  509. package/utils/state.js +0 -12
  510. package/utils/state.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/target/CandidateFolderReadRules/abstractions.js","sources":["../../../../src/features/target/CandidateFolderReadRules/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { FolderReadRule } from \"../FolderReadRule.js\";\n\n/** A candidate, as the engine listed it (`AdminUser` fits). */\nexport interface CandidateFolderUser {\n id: string;\n /** Team ids, as stored on the admin user. */\n teams?: string[];\n}\n\nexport interface CandidateFolderReadRuleParams {\n /** The folder the candidates are checked for; never the root folder. */\n folderId: string;\n /** Every candidate the rule is run for, with their teams, so no user is read per check. */\n users: CandidateFolderUser[];\n}\n\nexport interface ICandidateFolderReadRules {\n /**\n * A folder rule run as each candidate, inside `CandidateReadAccess`. The folder's permission\n * record is read once, on first use, and the candidates' teams once (only with teams on and\n * a team grant on the folder); each candidate's access is then evaluated in memory as\n * `FolderLevelPermissions.getFolderLevelPermissions` and `canAccessFolderContent` evaluate it\n * for that user: the team grants of the user's teams, then the defaults (full access is\n * owner, a folder without permissions is public). Another folder answers `false`.\n */\n create(params: CandidateFolderReadRuleParams): FolderReadRule;\n}\n\n/**\n * Folder content read for routing candidates (R48, Q79): one folder permission read per routing\n * evaluation instead of one per candidate, and no team lookup per candidate. Shared by the CMS and\n * Website Builder adapters, which check folders by id.\n */\nexport const CandidateFolderReadRules = createAbstraction<ICandidateFolderReadRules>(\n \"CandidateFolderReadRules\"\n);\n\nexport namespace CandidateFolderReadRules {\n export type Interface = ICandidateFolderReadRules;\n export type User = CandidateFolderUser;\n export type Params = CandidateFolderReadRuleParams;\n}\n"],"names":["CandidateFolderReadRules","createAbstraction"],"mappings":";AAkCO,MAAMA,2BAA2BC,kBACpC"}
@@ -0,0 +1 @@
1
+ export { CandidateFolderReadRules } from "./abstractions.js";
@@ -0,0 +1 @@
1
+ export { CandidateFolderReadRules } from "./abstractions.js";
@@ -0,0 +1,32 @@
1
+ import { AccessControl } from "@webiny/api-headless-cms/features/shared/abstractions.js";
2
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
3
+ import { FolderLevelPermissions } from "@webiny/api-aco/features/flp/FolderLevelPermissions/index.js";
4
+ import type { CmsEntryTarget } from "../CmsEntryTargetReader/abstractions.js";
5
+ import type { FolderReadRule } from "../FolderReadRule.js";
6
+ import { CmsEntryAccess as Abstraction } from "./abstractions.js";
7
+ import { CmsModelGroupService } from "../CmsModelGroupService/index.js";
8
+ /**
9
+ * Group and model read first (what `GetModelUseCase` and the group cache enforce for the current
10
+ * identity), then the entry permission, then FLP as `GetEntryByIdWithFlpDecorator`,
11
+ * `UpdateEntryWithFlpDecorator` and `DeleteEntryWithFlpDecorator` (api-aco) apply it.
12
+ *
13
+ * Models with `authorization: false` (entry checks disabled) are still refused at the group check
14
+ * for an identity without group read: `canAccessGroup` does not look at the model's flag. That
15
+ * fails closed and is stricter than the CMS's own entry use cases.
16
+ */
17
+ declare class CmsEntryAccessImpl implements Abstraction.Interface {
18
+ private accessControl;
19
+ private getModel;
20
+ private modelGroups;
21
+ private folderLevelPermissions;
22
+ constructor(accessControl: AccessControl.Interface, getModel: GetModelUseCase.Interface, modelGroups: CmsModelGroupService.Interface, folderLevelPermissions: FolderLevelPermissions.Interface);
23
+ canRead(target: CmsEntryTarget, folderRule?: FolderReadRule): Promise<boolean>;
24
+ canWrite(target: CmsEntryTarget): Promise<boolean>;
25
+ canDelete(target: CmsEntryTarget): Promise<boolean>;
26
+ canReadInFolder(params: Abstraction.FolderReadParams): Promise<boolean>;
27
+ canDeleteAnyEntry(namespace: string): Promise<boolean>;
28
+ }
29
+ export declare const CmsEntryAccess: typeof CmsEntryAccessImpl & {
30
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ICmsEntryAccess>;
31
+ };
32
+ export {};
@@ -0,0 +1,141 @@
1
+ import { AccessControl } from "@webiny/api-headless-cms/features/shared/abstractions.js";
2
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
3
+ import { FolderLevelPermissions } from "@webiny/api-aco/features/flp/FolderLevelPermissions/index.js";
4
+ import { ROOT_FOLDER } from "@webiny/api-headless-cms/constants.js";
5
+ import { getModelIdFromAppName } from "../../../utils/appName.js";
6
+ import { CmsEntryAccess } from "./abstractions.js";
7
+ import { UNREADABLE_CODES } from "./unreadableCodes.js";
8
+ import { CmsModelGroupService } from "../CmsModelGroupService/index.js";
9
+ class CmsEntryAccessImpl {
10
+ constructor(accessControl, getModel, modelGroups, folderLevelPermissions){
11
+ this.accessControl = accessControl;
12
+ this.getModel = getModel;
13
+ this.modelGroups = modelGroups;
14
+ this.folderLevelPermissions = folderLevelPermissions;
15
+ }
16
+ async canRead(target, folderRule) {
17
+ if (!await this.accessControl.canAccessGroup({
18
+ group: target.group
19
+ })) return false;
20
+ if (!await this.accessControl.canAccessModel({
21
+ model: target.model
22
+ })) return false;
23
+ const canAccessEntry = await this.accessControl.canAccessEntry({
24
+ model: target.model,
25
+ entry: target.entry,
26
+ rwd: "r"
27
+ });
28
+ if (!canAccessEntry) return false;
29
+ if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) return true;
30
+ const folderId = target.entry.location?.folderId;
31
+ if (!folderId || folderId === ROOT_FOLDER) return true;
32
+ if (folderRule) return folderRule.canReadFolder(folderId);
33
+ const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(folderId);
34
+ return this.folderLevelPermissions.canAccessFolderContent({
35
+ permissions,
36
+ rwd: "r"
37
+ });
38
+ }
39
+ async canWrite(target) {
40
+ if (!await this.accessControl.canAccessGroup({
41
+ group: target.group
42
+ })) return false;
43
+ if (!await this.accessControl.canAccessModel({
44
+ model: target.model
45
+ })) return false;
46
+ const canAccessEntry = await this.accessControl.canAccessEntry({
47
+ model: target.model,
48
+ entry: target.entry,
49
+ rwd: "w"
50
+ });
51
+ if (!canAccessEntry) return false;
52
+ if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) return true;
53
+ const folderId = target.entry.location?.folderId;
54
+ if (!folderId || folderId === ROOT_FOLDER) return true;
55
+ const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(folderId);
56
+ return this.folderLevelPermissions.canAccessFolderContent({
57
+ permissions,
58
+ rwd: "w"
59
+ });
60
+ }
61
+ async canDelete(target) {
62
+ if (!await this.accessControl.canAccessGroup({
63
+ group: target.group
64
+ })) return false;
65
+ if (!await this.accessControl.canAccessModel({
66
+ model: target.model
67
+ })) return false;
68
+ const canAccessEntry = await this.accessControl.canAccessEntry({
69
+ model: target.model,
70
+ entry: target.entry,
71
+ rwd: "d"
72
+ });
73
+ if (!canAccessEntry) return false;
74
+ if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) return true;
75
+ const folderId = target.entry.location?.folderId;
76
+ if (!folderId || folderId === ROOT_FOLDER) return true;
77
+ const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(folderId);
78
+ return this.folderLevelPermissions.canAccessFolderContent({
79
+ permissions,
80
+ rwd: "d"
81
+ });
82
+ }
83
+ async canReadInFolder(params) {
84
+ if (!await this.accessControl.canAccessGroup({
85
+ group: params.group
86
+ })) return false;
87
+ if (!await this.accessControl.canAccessModel({
88
+ model: params.model
89
+ })) return false;
90
+ const canAccessEntries = await this.accessControl.canAccessEntry({
91
+ model: params.model,
92
+ rwd: "r"
93
+ });
94
+ if (!canAccessEntries) return false;
95
+ if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) return true;
96
+ if (!params.folderId || params.folderId === ROOT_FOLDER) return true;
97
+ if (params.folderRule) return params.folderRule.canReadFolder(params.folderId);
98
+ const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(params.folderId);
99
+ return this.folderLevelPermissions.canAccessFolderContent({
100
+ permissions,
101
+ rwd: "r"
102
+ });
103
+ }
104
+ async canDeleteAnyEntry(namespace) {
105
+ const modelId = getModelIdFromAppName(namespace);
106
+ if (!modelId) return false;
107
+ const model = await this.getModel.execute(modelId);
108
+ if (model.isFail()) {
109
+ if (UNREADABLE_CODES.includes(model.error.code)) return false;
110
+ throw model.error;
111
+ }
112
+ if (model.value.isPrivate) return false;
113
+ const group = await this.modelGroups.getGroup(model.value);
114
+ if (group.isFail()) {
115
+ if (UNREADABLE_CODES.includes(group.error.code)) return false;
116
+ throw group.error;
117
+ }
118
+ if (!await this.accessControl.canAccessGroup({
119
+ group: group.value
120
+ })) return false;
121
+ if (!await this.accessControl.canAccessModel({
122
+ model: model.value
123
+ })) return false;
124
+ return this.accessControl.canAccessEntry({
125
+ model: model.value,
126
+ rwd: "d"
127
+ });
128
+ }
129
+ }
130
+ const CmsEntryAccess_CmsEntryAccess = CmsEntryAccess.createImplementation({
131
+ implementation: CmsEntryAccessImpl,
132
+ dependencies: [
133
+ AccessControl,
134
+ GetModelUseCase,
135
+ CmsModelGroupService,
136
+ FolderLevelPermissions
137
+ ]
138
+ });
139
+ export { CmsEntryAccess_CmsEntryAccess as CmsEntryAccess };
140
+
141
+ //# sourceMappingURL=CmsEntryAccess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/target/CmsEntryAccess/CmsEntryAccess.js","sources":["../../../../src/features/target/CmsEntryAccess/CmsEntryAccess.ts"],"sourcesContent":["import { AccessControl } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { FolderLevelPermissions } from \"@webiny/api-aco/features/flp/FolderLevelPermissions/index.js\";\nimport { ROOT_FOLDER } from \"@webiny/api-headless-cms/constants.js\";\nimport { getModelIdFromAppName } from \"~/utils/appName.js\";\nimport type { CmsEntryTarget } from \"../CmsEntryTargetReader/abstractions.js\";\nimport type { FolderReadRule } from \"../FolderReadRule.js\";\nimport { CmsEntryAccess as Abstraction } from \"./abstractions.js\";\nimport { UNREADABLE_CODES } from \"./unreadableCodes.js\";\nimport { CmsModelGroupService } from \"../CmsModelGroupService/index.js\";\n\n/**\n * Group and model read first (what `GetModelUseCase` and the group cache enforce for the current\n * identity), then the entry permission, then FLP as `GetEntryByIdWithFlpDecorator`,\n * `UpdateEntryWithFlpDecorator` and `DeleteEntryWithFlpDecorator` (api-aco) apply it.\n *\n * Models with `authorization: false` (entry checks disabled) are still refused at the group check\n * for an identity without group read: `canAccessGroup` does not look at the model's flag. That\n * fails closed and is stricter than the CMS's own entry use cases.\n */\nclass CmsEntryAccessImpl implements Abstraction.Interface {\n public constructor(\n private accessControl: AccessControl.Interface,\n private getModel: GetModelUseCase.Interface,\n private modelGroups: CmsModelGroupService.Interface,\n private folderLevelPermissions: FolderLevelPermissions.Interface\n ) {}\n\n public async canRead(target: CmsEntryTarget, folderRule?: FolderReadRule): Promise<boolean> {\n if (!(await this.accessControl.canAccessGroup({ group: target.group }))) {\n return false;\n }\n if (!(await this.accessControl.canAccessModel({ model: target.model }))) {\n return false;\n }\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model: target.model,\n entry: target.entry,\n rwd: \"r\"\n });\n if (!canAccessEntry) {\n return false;\n }\n // Folder-level permissions are skipped when FLP is not in use for the identity (e.g. API\n // keys) or the entry is in the root folder, as the ACO CMS decorators do.\n if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) {\n return true;\n }\n const folderId = target.entry.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return true;\n }\n if (folderRule) {\n return folderRule.canReadFolder(folderId);\n }\n const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(folderId);\n return this.folderLevelPermissions.canAccessFolderContent({ permissions, rwd: \"r\" });\n }\n\n public async canWrite(target: CmsEntryTarget): Promise<boolean> {\n if (!(await this.accessControl.canAccessGroup({ group: target.group }))) {\n return false;\n }\n if (!(await this.accessControl.canAccessModel({ model: target.model }))) {\n return false;\n }\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model: target.model,\n entry: target.entry,\n rwd: \"w\"\n });\n if (!canAccessEntry) {\n return false;\n }\n // Folder-level permissions are skipped when FLP is not in use for the identity (e.g. API\n // keys) or the entry is in the root folder, as the ACO CMS decorators do.\n if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) {\n return true;\n }\n const folderId = target.entry.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return true;\n }\n const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(folderId);\n return this.folderLevelPermissions.canAccessFolderContent({ permissions, rwd: \"w\" });\n }\n\n public async canDelete(target: CmsEntryTarget): Promise<boolean> {\n if (!(await this.accessControl.canAccessGroup({ group: target.group }))) {\n return false;\n }\n if (!(await this.accessControl.canAccessModel({ model: target.model }))) {\n return false;\n }\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model: target.model,\n entry: target.entry,\n rwd: \"d\"\n });\n if (!canAccessEntry) {\n return false;\n }\n // Folder-level permissions are skipped when FLP is not in use for the identity (e.g. API\n // keys) or the entry is in the root folder, as the ACO CMS decorators do.\n if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) {\n return true;\n }\n const folderId = target.entry.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return true;\n }\n const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(folderId);\n return this.folderLevelPermissions.canAccessFolderContent({ permissions, rwd: \"d\" });\n }\n\n public async canReadInFolder(params: Abstraction.FolderReadParams): Promise<boolean> {\n if (!(await this.accessControl.canAccessGroup({ group: params.group }))) {\n return false;\n }\n if (!(await this.accessControl.canAccessModel({ model: params.model }))) {\n return false;\n }\n const canAccessEntries = await this.accessControl.canAccessEntry({\n model: params.model,\n rwd: \"r\"\n });\n if (!canAccessEntries) {\n return false;\n }\n // As for an entry: skipped when FLP is not in use for the identity or for the root folder.\n if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) {\n return true;\n }\n if (!params.folderId || params.folderId === ROOT_FOLDER) {\n return true;\n }\n if (params.folderRule) {\n return params.folderRule.canReadFolder(params.folderId);\n }\n const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(\n params.folderId\n );\n return this.folderLevelPermissions.canAccessFolderContent({ permissions, rwd: \"r\" });\n }\n\n public async canDeleteAnyEntry(namespace: string): Promise<boolean> {\n const modelId = getModelIdFromAppName(namespace);\n if (!modelId) {\n return false;\n }\n const model = await this.getModel.execute(modelId);\n if (model.isFail()) {\n if (UNREADABLE_CODES.includes(model.error.code)) {\n return false;\n }\n throw model.error;\n }\n if (model.value.isPrivate) {\n return false;\n }\n const group = await this.modelGroups.getGroup(model.value);\n if (group.isFail()) {\n if (UNREADABLE_CODES.includes(group.error.code)) {\n return false;\n }\n throw group.error;\n }\n if (!(await this.accessControl.canAccessGroup({ group: group.value }))) {\n return false;\n }\n if (!(await this.accessControl.canAccessModel({ model: model.value }))) {\n return false;\n }\n return this.accessControl.canAccessEntry({ model: model.value, rwd: \"d\" });\n }\n}\n\nexport const CmsEntryAccess = Abstraction.createImplementation({\n implementation: CmsEntryAccessImpl,\n dependencies: [AccessControl, GetModelUseCase, CmsModelGroupService, FolderLevelPermissions]\n});\n"],"names":["CmsEntryAccessImpl","accessControl","getModel","modelGroups","folderLevelPermissions","target","folderRule","canAccessEntry","folderId","ROOT_FOLDER","permissions","params","canAccessEntries","namespace","modelId","getModelIdFromAppName","model","UNREADABLE_CODES","group","CmsEntryAccess","Abstraction","AccessControl","GetModelUseCase","CmsModelGroupService","FolderLevelPermissions"],"mappings":";;;;;;;;AAoBA,MAAMA;IACF,YACYC,aAAsC,EACtCC,QAAmC,EACnCC,WAA2C,EAC3CC,sBAAwD,CAClE;aAJUH,aAAa,GAAbA;aACAC,QAAQ,GAARA;aACAC,WAAW,GAAXA;aACAC,sBAAsB,GAAtBA;IACT;IAEH,MAAa,QAAQC,MAAsB,EAAEC,UAA2B,EAAoB;QACxF,IAAI,CAAE,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAE,OAAOD,OAAO,KAAK;QAAC,IAChE,OAAO;QAEX,IAAI,CAAE,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAE,OAAOA,OAAO,KAAK;QAAC,IAChE,OAAO;QAEX,MAAME,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3D,OAAOF,OAAO,KAAK;YACnB,OAAOA,OAAO,KAAK;YACnB,KAAK;QACT;QACA,IAAI,CAACE,gBACD,OAAO;QAIX,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,4BAA4B,IACzD,OAAO;QAEX,MAAMC,WAAWH,OAAO,KAAK,CAAC,QAAQ,EAAE;QACxC,IAAI,CAACG,YAAYA,aAAaC,aAC1B,OAAO;QAEX,IAAIH,YACA,OAAOA,WAAW,aAAa,CAACE;QAEpC,MAAME,cAAc,MAAM,IAAI,CAAC,sBAAsB,CAAC,yBAAyB,CAACF;QAChF,OAAO,IAAI,CAAC,sBAAsB,CAAC,sBAAsB,CAAC;YAAEE;YAAa,KAAK;QAAI;IACtF;IAEA,MAAa,SAASL,MAAsB,EAAoB;QAC5D,IAAI,CAAE,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAE,OAAOA,OAAO,KAAK;QAAC,IAChE,OAAO;QAEX,IAAI,CAAE,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAE,OAAOA,OAAO,KAAK;QAAC,IAChE,OAAO;QAEX,MAAME,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3D,OAAOF,OAAO,KAAK;YACnB,OAAOA,OAAO,KAAK;YACnB,KAAK;QACT;QACA,IAAI,CAACE,gBACD,OAAO;QAIX,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,4BAA4B,IACzD,OAAO;QAEX,MAAMC,WAAWH,OAAO,KAAK,CAAC,QAAQ,EAAE;QACxC,IAAI,CAACG,YAAYA,aAAaC,aAC1B,OAAO;QAEX,MAAMC,cAAc,MAAM,IAAI,CAAC,sBAAsB,CAAC,yBAAyB,CAACF;QAChF,OAAO,IAAI,CAAC,sBAAsB,CAAC,sBAAsB,CAAC;YAAEE;YAAa,KAAK;QAAI;IACtF;IAEA,MAAa,UAAUL,MAAsB,EAAoB;QAC7D,IAAI,CAAE,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAE,OAAOA,OAAO,KAAK;QAAC,IAChE,OAAO;QAEX,IAAI,CAAE,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAE,OAAOA,OAAO,KAAK;QAAC,IAChE,OAAO;QAEX,MAAME,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3D,OAAOF,OAAO,KAAK;YACnB,OAAOA,OAAO,KAAK;YACnB,KAAK;QACT;QACA,IAAI,CAACE,gBACD,OAAO;QAIX,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,4BAA4B,IACzD,OAAO;QAEX,MAAMC,WAAWH,OAAO,KAAK,CAAC,QAAQ,EAAE;QACxC,IAAI,CAACG,YAAYA,aAAaC,aAC1B,OAAO;QAEX,MAAMC,cAAc,MAAM,IAAI,CAAC,sBAAsB,CAAC,yBAAyB,CAACF;QAChF,OAAO,IAAI,CAAC,sBAAsB,CAAC,sBAAsB,CAAC;YAAEE;YAAa,KAAK;QAAI;IACtF;IAEA,MAAa,gBAAgBC,MAAoC,EAAoB;QACjF,IAAI,CAAE,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAE,OAAOA,OAAO,KAAK;QAAC,IAChE,OAAO;QAEX,IAAI,CAAE,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAE,OAAOA,OAAO,KAAK;QAAC,IAChE,OAAO;QAEX,MAAMC,mBAAmB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC7D,OAAOD,OAAO,KAAK;YACnB,KAAK;QACT;QACA,IAAI,CAACC,kBACD,OAAO;QAGX,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,4BAA4B,IACzD,OAAO;QAEX,IAAI,CAACD,OAAO,QAAQ,IAAIA,OAAO,QAAQ,KAAKF,aACxC,OAAO;QAEX,IAAIE,OAAO,UAAU,EACjB,OAAOA,OAAO,UAAU,CAAC,aAAa,CAACA,OAAO,QAAQ;QAE1D,MAAMD,cAAc,MAAM,IAAI,CAAC,sBAAsB,CAAC,yBAAyB,CAC3EC,OAAO,QAAQ;QAEnB,OAAO,IAAI,CAAC,sBAAsB,CAAC,sBAAsB,CAAC;YAAED;YAAa,KAAK;QAAI;IACtF;IAEA,MAAa,kBAAkBG,SAAiB,EAAoB;QAChE,MAAMC,UAAUC,sBAAsBF;QACtC,IAAI,CAACC,SACD,OAAO;QAEX,MAAME,QAAQ,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAACF;QAC1C,IAAIE,MAAM,MAAM,IAAI;YAChB,IAAIC,iBAAiB,QAAQ,CAACD,MAAM,KAAK,CAAC,IAAI,GAC1C,OAAO;YAEX,MAAMA,MAAM,KAAK;QACrB;QACA,IAAIA,MAAM,KAAK,CAAC,SAAS,EACrB,OAAO;QAEX,MAAME,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAACF,MAAM,KAAK;QACzD,IAAIE,MAAM,MAAM,IAAI;YAChB,IAAID,iBAAiB,QAAQ,CAACC,MAAM,KAAK,CAAC,IAAI,GAC1C,OAAO;YAEX,MAAMA,MAAM,KAAK;QACrB;QACA,IAAI,CAAE,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAE,OAAOA,MAAM,KAAK;QAAC,IAC/D,OAAO;QAEX,IAAI,CAAE,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAE,OAAOF,MAAM,KAAK;QAAC,IAC/D,OAAO;QAEX,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAE,OAAOA,MAAM,KAAK;YAAE,KAAK;QAAI;IAC5E;AACJ;AAEO,MAAMG,gCAAiBC,eAAAA,oBAAgC,CAAC;IAC3D,gBAAgBpB;IAChB,cAAc;QAACqB;QAAeC;QAAiBC;QAAsBC;KAAuB;AAChG"}
@@ -0,0 +1,48 @@
1
+ import type { CmsGroup, CmsModel } from "@webiny/api-headless-cms/types/index.js";
2
+ import type { CmsEntryTarget } from "../CmsEntryTargetReader/abstractions.js";
3
+ import type { FolderReadRule } from "../FolderReadRule.js";
4
+ export interface CmsEntryFolderReadParams {
5
+ /** Read as the current identity before the check (A19). */
6
+ model: CmsModel;
7
+ group: CmsGroup;
8
+ /** `null` or "root": the root folder, no folder-level check. */
9
+ folderId: string | null;
10
+ /** Decides the folder from permissions loaded once; one folder read per check when omitted. */
11
+ folderRule?: FolderReadRule;
12
+ }
13
+ export interface ICmsEntryAccess {
14
+ /**
15
+ * Read access of the current identity (review actions, get review). With `folderRule`, the
16
+ * folder is decided by the rule (folder permissions loaded once for many checks, Q79), so the
17
+ * check reads nothing; without it, the folder's permissions are read for this check.
18
+ */
19
+ canRead(target: CmsEntryTarget, folderRule?: FolderReadRule): Promise<boolean>;
20
+ /** Write access of the current identity (request a review, D77). */
21
+ canWrite(target: CmsEntryTarget): Promise<boolean>;
22
+ /** Delete access of the current identity (trash or delete, cancel-for-delete, D134). */
23
+ canDelete(target: CmsEntryTarget): Promise<boolean>;
24
+ /**
25
+ * Entity-level delete permission for a `cms.*` namespace, as `DeleteEntryUseCase` checks it
26
+ * before it loads an entry (`canAccessEntry({ model, rwd: "d" })`), plus group and model read.
27
+ * `false` for another app's namespace, a private, missing or unreadable model or group. Lets
28
+ * the cancel-for-delete wrapper refuse before it reads anything (R86).
29
+ */
30
+ canDeleteAnyEntry(namespace: string): Promise<boolean>;
31
+ /**
32
+ * Read access of the current identity to the model's entries in a folder, without an entry
33
+ * (the routing inspector, R121): group read, model read, entity-level entry read and the
34
+ * folder's content read. Evaluated as another user inside `CandidateReadAccess`.
35
+ */
36
+ canReadInFolder(params: CmsEntryFolderReadParams): Promise<boolean>;
37
+ }
38
+ /**
39
+ * The CMS's own entry access logic for the current identity (R47, R72): group read, model read
40
+ * and entry permissions (incl. own-only) through `AccessControl`, plus folder-level permissions on
41
+ * the entry's folder. Evaluated as another user inside `CandidateReadAccess` for `canUserRead`
42
+ * (R48).
43
+ */
44
+ export declare const CmsEntryAccess: import("@webiny/di").Abstraction<ICmsEntryAccess>;
45
+ export declare namespace CmsEntryAccess {
46
+ type Interface = ICmsEntryAccess;
47
+ type FolderReadParams = CmsEntryFolderReadParams;
48
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const CmsEntryAccess = createAbstraction("CmsEntryAccess");
3
+ export { CmsEntryAccess };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/target/CmsEntryAccess/abstractions.js","sources":["../../../../src/features/target/CmsEntryAccess/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CmsGroup, CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { CmsEntryTarget } from \"../CmsEntryTargetReader/abstractions.js\";\nimport type { FolderReadRule } from \"../FolderReadRule.js\";\n\nexport interface CmsEntryFolderReadParams {\n /** Read as the current identity before the check (A19). */\n model: CmsModel;\n group: CmsGroup;\n /** `null` or \"root\": the root folder, no folder-level check. */\n folderId: string | null;\n /** Decides the folder from permissions loaded once; one folder read per check when omitted. */\n folderRule?: FolderReadRule;\n}\n\nexport interface ICmsEntryAccess {\n /**\n * Read access of the current identity (review actions, get review). With `folderRule`, the\n * folder is decided by the rule (folder permissions loaded once for many checks, Q79), so the\n * check reads nothing; without it, the folder's permissions are read for this check.\n */\n canRead(target: CmsEntryTarget, folderRule?: FolderReadRule): Promise<boolean>;\n /** Write access of the current identity (request a review, D77). */\n canWrite(target: CmsEntryTarget): Promise<boolean>;\n /** Delete access of the current identity (trash or delete, cancel-for-delete, D134). */\n canDelete(target: CmsEntryTarget): Promise<boolean>;\n /**\n * Entity-level delete permission for a `cms.*` namespace, as `DeleteEntryUseCase` checks it\n * before it loads an entry (`canAccessEntry({ model, rwd: \"d\" })`), plus group and model read.\n * `false` for another app's namespace, a private, missing or unreadable model or group. Lets\n * the cancel-for-delete wrapper refuse before it reads anything (R86).\n */\n canDeleteAnyEntry(namespace: string): Promise<boolean>;\n /**\n * Read access of the current identity to the model's entries in a folder, without an entry\n * (the routing inspector, R121): group read, model read, entity-level entry read and the\n * folder's content read. Evaluated as another user inside `CandidateReadAccess`.\n */\n canReadInFolder(params: CmsEntryFolderReadParams): Promise<boolean>;\n}\n\n/**\n * The CMS's own entry access logic for the current identity (R47, R72): group read, model read\n * and entry permissions (incl. own-only) through `AccessControl`, plus folder-level permissions on\n * the entry's folder. Evaluated as another user inside `CandidateReadAccess` for `canUserRead`\n * (R48).\n */\nexport const CmsEntryAccess = createAbstraction<ICmsEntryAccess>(\"CmsEntryAccess\");\n\nexport namespace CmsEntryAccess {\n export type Interface = ICmsEntryAccess;\n export type FolderReadParams = CmsEntryFolderReadParams;\n}\n"],"names":["CmsEntryAccess","createAbstraction"],"mappings":";AA+CO,MAAMA,iBAAiBC,kBAAmC"}
@@ -0,0 +1,2 @@
1
+ export { CmsEntryAccess } from "./abstractions.js";
2
+ export { UNREADABLE_CODES } from "./unreadableCodes.js";
@@ -0,0 +1,2 @@
1
+ export { CmsEntryAccess } from "./abstractions.js";
2
+ export { UNREADABLE_CODES } from "./unreadableCodes.js";
@@ -0,0 +1 @@
1
+ export declare const UNREADABLE_CODES: string[];
@@ -0,0 +1,9 @@
1
+ const UNREADABLE_CODES = [
2
+ "Cms/Model/NotFound",
3
+ "Cms/Model/NotAuthorized",
4
+ "Cms/ModelGroup/NotFound",
5
+ "Cms/ModelGroup/NotAuthorized"
6
+ ];
7
+ export { UNREADABLE_CODES };
8
+
9
+ //# sourceMappingURL=unreadableCodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/target/CmsEntryAccess/unreadableCodes.js","sources":["../../../../src/features/target/CmsEntryAccess/unreadableCodes.ts"],"sourcesContent":["/*\n * The error codes of a model or group the identity cannot read, or that does not exist. Shared by\n * `CmsEntryAccess` and the wrapper use cases that read a model and its group themselves.\n */\nexport const UNREADABLE_CODES = [\n \"Cms/Model/NotFound\",\n \"Cms/Model/NotAuthorized\",\n \"Cms/ModelGroup/NotFound\",\n \"Cms/ModelGroup/NotAuthorized\"\n];\n"],"names":["UNREADABLE_CODES"],"mappings":"AAIO,MAAMA,mBAAmB;IAC5B;IACA;IACA;IACA;CACH"}
@@ -0,0 +1,21 @@
1
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
2
+ import { FolderLevelPermissions } from "@webiny/api-aco/features/flp/FolderLevelPermissions/index.js";
3
+ import type { FolderReadRule } from "../FolderReadRule.js";
4
+ import { CmsEntryDeniedFolders as Abstraction } from "./abstractions.js";
5
+ /**
6
+ * Registered as a singleton in the request container, so the cache lives for one request. Keyed
7
+ * by identity id and folder type, because `withIdentity` can switch the identity mid-request.
8
+ */
9
+ declare class CmsEntryDeniedFoldersImpl implements Abstraction.Interface {
10
+ private identityContext;
11
+ private folderLevelPermissions;
12
+ private readonly cache;
13
+ constructor(identityContext: IdentityContext.Interface, folderLevelPermissions: FolderLevelPermissions.Interface);
14
+ listDeniedFolderIds(modelIds: string[]): Promise<string[]>;
15
+ createFolderReadRule(modelIds: string[]): Promise<FolderReadRule>;
16
+ private listDeniedOfType;
17
+ }
18
+ export declare const CmsEntryDeniedFolders: typeof CmsEntryDeniedFoldersImpl & {
19
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ICmsEntryDeniedFolders>;
20
+ };
21
+ export {};
@@ -0,0 +1,66 @@
1
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
2
+ import { FolderLevelPermissions } from "@webiny/api-aco/features/flp/FolderLevelPermissions/index.js";
3
+ import { ROOT_FOLDER } from "@webiny/api-aco/constants.js";
4
+ import { toCmsFolderType } from "../../../utils/folderType.js";
5
+ import { CmsEntryDeniedFolders } from "./abstractions.js";
6
+ class CmsEntryDeniedFoldersImpl {
7
+ constructor(identityContext, folderLevelPermissions){
8
+ this.identityContext = identityContext;
9
+ this.folderLevelPermissions = folderLevelPermissions;
10
+ this.cache = new Map();
11
+ }
12
+ async listDeniedFolderIds(modelIds) {
13
+ if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) return [];
14
+ const identity = this.identityContext.getIdentity();
15
+ const uniqueModelIds = [
16
+ ...new Set(modelIds)
17
+ ];
18
+ const deniedPerType = await Promise.all(uniqueModelIds.map((modelId)=>{
19
+ const type = toCmsFolderType(modelId);
20
+ return this.listDeniedOfType(identity.id, type);
21
+ }));
22
+ return deniedPerType.flat();
23
+ }
24
+ async createFolderReadRule(modelIds) {
25
+ const deniedIds = await this.listDeniedFolderIds(modelIds);
26
+ const denied = new Set(deniedIds);
27
+ return {
28
+ canReadFolder: async (folderId)=>!denied.has(folderId)
29
+ };
30
+ }
31
+ async listDeniedOfType(identityId, type) {
32
+ const key = `${identityId}#${type}`;
33
+ const cached = this.cache.get(key);
34
+ if (cached) return [
35
+ ...cached
36
+ ];
37
+ const records = await this.folderLevelPermissions.listFolderLevelPermissions({
38
+ where: {
39
+ type,
40
+ path_startsWith: `${ROOT_FOLDER}/`
41
+ }
42
+ });
43
+ const denied = [];
44
+ for (const record of records){
45
+ const canRead = await this.folderLevelPermissions.canAccessFolderContent({
46
+ permissions: record.permissions,
47
+ rwd: "r"
48
+ });
49
+ if (!canRead) denied.push(record.id);
50
+ }
51
+ this.cache.set(key, denied);
52
+ return [
53
+ ...denied
54
+ ];
55
+ }
56
+ }
57
+ const CmsEntryDeniedFolders_CmsEntryDeniedFolders = CmsEntryDeniedFolders.createImplementation({
58
+ implementation: CmsEntryDeniedFoldersImpl,
59
+ dependencies: [
60
+ IdentityContext,
61
+ FolderLevelPermissions
62
+ ]
63
+ });
64
+ export { CmsEntryDeniedFolders_CmsEntryDeniedFolders as CmsEntryDeniedFolders };
65
+
66
+ //# sourceMappingURL=CmsEntryDeniedFolders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/target/CmsEntryDeniedFolders/CmsEntryDeniedFolders.js","sources":["../../../../src/features/target/CmsEntryDeniedFolders/CmsEntryDeniedFolders.ts"],"sourcesContent":["import { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { FolderLevelPermissions } from \"@webiny/api-aco/features/flp/FolderLevelPermissions/index.js\";\nimport { ROOT_FOLDER } from \"@webiny/api-aco/constants.js\";\nimport { toCmsFolderType } from \"~/utils/folderType.js\";\nimport type { FolderReadRule } from \"../FolderReadRule.js\";\nimport { CmsEntryDeniedFolders as Abstraction } from \"./abstractions.js\";\n\n/**\n * Registered as a singleton in the request container, so the cache lives for one request. Keyed\n * by identity id and folder type, because `withIdentity` can switch the identity mid-request.\n */\nclass CmsEntryDeniedFoldersImpl implements Abstraction.Interface {\n private readonly cache = new Map<string, string[]>();\n\n public constructor(\n private identityContext: IdentityContext.Interface,\n private folderLevelPermissions: FolderLevelPermissions.Interface\n ) {}\n\n public async listDeniedFolderIds(modelIds: string[]): Promise<string[]> {\n // Skipped when FLP is not in use for the identity, as the ACO CMS decorators do.\n if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) {\n return [];\n }\n const identity = this.identityContext.getIdentity();\n const uniqueModelIds = [...new Set(modelIds)];\n // ACO lists folder permissions of one folder type at a time, so each model's folders take\n // one read; they run concurrently, never one read per folder or per entry.\n const deniedPerType = await Promise.all(\n uniqueModelIds.map(modelId => {\n const type = toCmsFolderType(modelId);\n return this.listDeniedOfType(identity.id, type);\n })\n );\n return deniedPerType.flat();\n }\n\n public async createFolderReadRule(modelIds: string[]): Promise<FolderReadRule> {\n const deniedIds = await this.listDeniedFolderIds(modelIds);\n const denied = new Set(deniedIds);\n return {\n canReadFolder: async (folderId: string): Promise<boolean> => !denied.has(folderId)\n };\n }\n\n private async listDeniedOfType(identityId: string, type: string): Promise<string[]> {\n const key = `${identityId}#${type}`;\n const cached = this.cache.get(key);\n if (cached) {\n return [...cached];\n }\n\n // Every folder path starts at the root, and the storage lists a type only by parent or by\n // path prefix: the root prefix gives every folder of the type in one read.\n const records = await this.folderLevelPermissions.listFolderLevelPermissions({\n where: { type, path_startsWith: `${ROOT_FOLDER}/` }\n });\n const denied: string[] = [];\n for (const record of records) {\n // In memory: the record's permissions already carry the inherited and default ones.\n // oxlint-disable-next-line no-await-in-loop -- in memory: the record carries its permissions.\n const canRead = await this.folderLevelPermissions.canAccessFolderContent({\n permissions: record.permissions,\n rwd: \"r\"\n });\n if (!canRead) {\n denied.push(record.id);\n }\n }\n this.cache.set(key, denied);\n return [...denied];\n }\n}\n\nexport const CmsEntryDeniedFolders = Abstraction.createImplementation({\n implementation: CmsEntryDeniedFoldersImpl,\n dependencies: [IdentityContext, FolderLevelPermissions]\n});\n"],"names":["CmsEntryDeniedFoldersImpl","identityContext","folderLevelPermissions","Map","modelIds","identity","uniqueModelIds","Set","deniedPerType","Promise","modelId","type","toCmsFolderType","deniedIds","denied","folderId","identityId","key","cached","records","ROOT_FOLDER","record","canRead","CmsEntryDeniedFolders","Abstraction","IdentityContext","FolderLevelPermissions"],"mappings":";;;;;AAWA,MAAMA;IAGF,YACYC,eAA0C,EAC1CC,sBAAwD,CAClE;aAFUD,eAAe,GAAfA;aACAC,sBAAsB,GAAtBA;aAJK,KAAK,GAAG,IAAIC;IAK1B;IAEH,MAAa,oBAAoBC,QAAkB,EAAqB;QAEpE,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,4BAA4B,IACzD,OAAO,EAAE;QAEb,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QACjD,MAAMC,iBAAiB;eAAI,IAAIC,IAAIH;SAAU;QAG7C,MAAMI,gBAAgB,MAAMC,QAAQ,GAAG,CACnCH,eAAe,GAAG,CAACI,CAAAA;YACf,MAAMC,OAAOC,gBAAgBF;YAC7B,OAAO,IAAI,CAAC,gBAAgB,CAACL,SAAS,EAAE,EAAEM;QAC9C;QAEJ,OAAOH,cAAc,IAAI;IAC7B;IAEA,MAAa,qBAAqBJ,QAAkB,EAA2B;QAC3E,MAAMS,YAAY,MAAM,IAAI,CAAC,mBAAmB,CAACT;QACjD,MAAMU,SAAS,IAAIP,IAAIM;QACvB,OAAO;YACH,eAAe,OAAOE,WAAuC,CAACD,OAAO,GAAG,CAACC;QAC7E;IACJ;IAEA,MAAc,iBAAiBC,UAAkB,EAAEL,IAAY,EAAqB;QAChF,MAAMM,MAAM,GAAGD,WAAW,CAAC,EAAEL,MAAM;QACnC,MAAMO,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG,CAACD;QAC9B,IAAIC,QACA,OAAO;eAAIA;SAAO;QAKtB,MAAMC,UAAU,MAAM,IAAI,CAAC,sBAAsB,CAAC,0BAA0B,CAAC;YACzE,OAAO;gBAAER;gBAAM,iBAAiB,GAAGS,YAAY,CAAC,CAAC;YAAC;QACtD;QACA,MAAMN,SAAmB,EAAE;QAC3B,KAAK,MAAMO,UAAUF,QAAS;YAG1B,MAAMG,UAAU,MAAM,IAAI,CAAC,sBAAsB,CAAC,sBAAsB,CAAC;gBACrE,aAAaD,OAAO,WAAW;gBAC/B,KAAK;YACT;YACA,IAAI,CAACC,SACDR,OAAO,IAAI,CAACO,OAAO,EAAE;QAE7B;QACA,IAAI,CAAC,KAAK,CAAC,GAAG,CAACJ,KAAKH;QACpB,OAAO;eAAIA;SAAO;IACtB;AACJ;AAEO,MAAMS,8CAAwBC,sBAAAA,oBAAgC,CAAC;IAClE,gBAAgBxB;IAChB,cAAc;QAACyB;QAAiBC;KAAuB;AAC3D"}
@@ -0,0 +1,23 @@
1
+ import type { FolderReadRule } from "../FolderReadRule.js";
2
+ export interface ICmsEntryDeniedFolders {
3
+ /**
4
+ * Ids of the folders of these models' entries whose content the current identity cannot read
5
+ * (Q77). Empty when folder-level permissions are not in use for the identity (e.g. API keys).
6
+ * Folders without permission records and the root folder are readable, so they never appear.
7
+ */
8
+ listDeniedFolderIds(modelIds: string[]): Promise<string[]>;
9
+ /**
10
+ * The same rules as a `FolderReadRule` for many entry checks of the current identity
11
+ * (`CmsEntryAccess.canRead`), so the checks read no folder permissions of their own.
12
+ */
13
+ createFolderReadRule(modelIds: string[]): Promise<FolderReadRule>;
14
+ }
15
+ /**
16
+ * Folder read rules of CMS entries for list filters, as `CmsEntryAccess` applies them to one entry:
17
+ * one `listFolderLevelPermissions` per folder type (`cms:<modelId>`), evaluated in memory with
18
+ * `canAccessFolderContent`. Cached per identity and folder type for the request.
19
+ */
20
+ export declare const CmsEntryDeniedFolders: import("@webiny/di").Abstraction<ICmsEntryDeniedFolders>;
21
+ export declare namespace CmsEntryDeniedFolders {
22
+ type Interface = ICmsEntryDeniedFolders;
23
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const CmsEntryDeniedFolders = createAbstraction("CmsEntryDeniedFolders");
3
+ export { CmsEntryDeniedFolders };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/target/CmsEntryDeniedFolders/abstractions.js","sources":["../../../../src/features/target/CmsEntryDeniedFolders/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { FolderReadRule } from \"../FolderReadRule.js\";\n\nexport interface ICmsEntryDeniedFolders {\n /**\n * Ids of the folders of these models' entries whose content the current identity cannot read\n * (Q77). Empty when folder-level permissions are not in use for the identity (e.g. API keys).\n * Folders without permission records and the root folder are readable, so they never appear.\n */\n listDeniedFolderIds(modelIds: string[]): Promise<string[]>;\n /**\n * The same rules as a `FolderReadRule` for many entry checks of the current identity\n * (`CmsEntryAccess.canRead`), so the checks read no folder permissions of their own.\n */\n createFolderReadRule(modelIds: string[]): Promise<FolderReadRule>;\n}\n\n/**\n * Folder read rules of CMS entries for list filters, as `CmsEntryAccess` applies them to one entry:\n * one `listFolderLevelPermissions` per folder type (`cms:<modelId>`), evaluated in memory with\n * `canAccessFolderContent`. Cached per identity and folder type for the request.\n */\nexport const CmsEntryDeniedFolders =\n createAbstraction<ICmsEntryDeniedFolders>(\"CmsEntryDeniedFolders\");\n\nexport namespace CmsEntryDeniedFolders {\n export type Interface = ICmsEntryDeniedFolders;\n}\n"],"names":["CmsEntryDeniedFolders","createAbstraction"],"mappings":";AAsBO,MAAMA,wBACTC,kBAA0C"}
@@ -0,0 +1 @@
1
+ export { CmsEntryDeniedFolders } from "./abstractions.js";
@@ -0,0 +1 @@
1
+ export { CmsEntryDeniedFolders } from "./abstractions.js";
@@ -0,0 +1,18 @@
1
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
2
+ import { GetFolderRepository } from "@webiny/api-aco/features/folder/GetFolder/abstractions.js";
3
+ import { CmsEntryFolderExistsService as Abstraction } from "./abstractions.js";
4
+ /**
5
+ * The model is read as the current identity (the editor), so the answer never covers a model
6
+ * they cannot bind (D116); the folder through ACO's repository, which applies no folder-level
7
+ * permissions (D69).
8
+ */
9
+ declare class CmsEntryFolderExistsServiceImpl implements Abstraction.Interface {
10
+ private getModel;
11
+ private getFolder;
12
+ constructor(getModel: GetModelUseCase.Interface, getFolder: GetFolderRepository.Interface);
13
+ exists(params: Abstraction.Params): Promise<boolean>;
14
+ }
15
+ export declare const CmsEntryFolderExistsService: typeof CmsEntryFolderExistsServiceImpl & {
16
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ICmsEntryFolderExistsService>;
17
+ };
18
+ export {};
@@ -0,0 +1,43 @@
1
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
2
+ import { GetFolderRepository } from "@webiny/api-aco/features/folder/GetFolder/abstractions.js";
3
+ import { getModelIdFromFolderType } from "../../../utils/folderType.js";
4
+ import { isBindableModel } from "../../../utils/isBindableModel.js";
5
+ import { CmsEntryFolderExistsService } from "./abstractions.js";
6
+ const UNREADABLE_MODEL_CODES = [
7
+ "Cms/Model/NotFound",
8
+ "Cms/Model/NotAuthorized"
9
+ ];
10
+ const FOLDER_NOT_FOUND = "Aco/Folder/NotFound";
11
+ class CmsEntryFolderExistsServiceImpl {
12
+ constructor(getModel, getFolder){
13
+ this.getModel = getModel;
14
+ this.getFolder = getFolder;
15
+ }
16
+ async exists(params) {
17
+ if (!params.id || params.id.includes("#")) return false;
18
+ const modelId = getModelIdFromFolderType(params.type);
19
+ if (!modelId) return false;
20
+ const model = await this.getModel.execute(modelId);
21
+ if (model.isFail()) {
22
+ if (UNREADABLE_MODEL_CODES.includes(model.error.code)) return false;
23
+ throw model.error;
24
+ }
25
+ if (!isBindableModel(model.value)) return false;
26
+ const folder = await this.getFolder.execute(params.id);
27
+ if (folder.isFail()) {
28
+ if (folder.error.code === FOLDER_NOT_FOUND) return false;
29
+ throw folder.error;
30
+ }
31
+ return folder.value.type === params.type;
32
+ }
33
+ }
34
+ const CmsEntryFolderExistsService_CmsEntryFolderExistsService = CmsEntryFolderExistsService.createImplementation({
35
+ implementation: CmsEntryFolderExistsServiceImpl,
36
+ dependencies: [
37
+ GetModelUseCase,
38
+ GetFolderRepository
39
+ ]
40
+ });
41
+ export { CmsEntryFolderExistsService_CmsEntryFolderExistsService as CmsEntryFolderExistsService };
42
+
43
+ //# sourceMappingURL=CmsEntryFolderExistsService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/target/CmsEntryFolderExistsService/CmsEntryFolderExistsService.js","sources":["../../../../src/features/target/CmsEntryFolderExistsService/CmsEntryFolderExistsService.ts"],"sourcesContent":["import { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { GetFolderRepository } from \"@webiny/api-aco/features/folder/GetFolder/abstractions.js\";\nimport { getModelIdFromFolderType } from \"~/utils/folderType.js\";\nimport { isBindableModel } from \"~/utils/isBindableModel.js\";\nimport { CmsEntryFolderExistsService as Abstraction } from \"./abstractions.js\";\n\nconst UNREADABLE_MODEL_CODES = [\"Cms/Model/NotFound\", \"Cms/Model/NotAuthorized\"];\nconst FOLDER_NOT_FOUND = \"Aco/Folder/NotFound\";\n\n/**\n * The model is read as the current identity (the editor), so the answer never covers a model\n * they cannot bind (D116); the folder through ACO's repository, which applies no folder-level\n * permissions (D69).\n */\nclass CmsEntryFolderExistsServiceImpl implements Abstraction.Interface {\n public constructor(\n private getModel: GetModelUseCase.Interface,\n private getFolder: GetFolderRepository.Interface\n ) {}\n\n public async exists(params: Abstraction.Params): Promise<boolean> {\n // The ACO repository reads \"<id>#<n>\" as a revision; such an id is never a folder.\n if (!params.id || params.id.includes(\"#\")) {\n return false;\n }\n const modelId = getModelIdFromFolderType(params.type);\n if (!modelId) {\n return false;\n }\n\n const model = await this.getModel.execute(modelId);\n if (model.isFail()) {\n if (UNREADABLE_MODEL_CODES.includes(model.error.code)) {\n return false;\n }\n throw model.error;\n }\n if (!isBindableModel(model.value)) {\n return false;\n }\n\n const folder = await this.getFolder.execute(params.id);\n if (folder.isFail()) {\n if (folder.error.code === FOLDER_NOT_FOUND) {\n return false;\n }\n throw folder.error;\n }\n return folder.value.type === params.type;\n }\n}\n\nexport const CmsEntryFolderExistsService = Abstraction.createImplementation({\n implementation: CmsEntryFolderExistsServiceImpl,\n dependencies: [GetModelUseCase, GetFolderRepository]\n});\n"],"names":["UNREADABLE_MODEL_CODES","FOLDER_NOT_FOUND","CmsEntryFolderExistsServiceImpl","getModel","getFolder","params","modelId","getModelIdFromFolderType","model","isBindableModel","folder","CmsEntryFolderExistsService","Abstraction","GetModelUseCase","GetFolderRepository"],"mappings":";;;;;AAMA,MAAMA,yBAAyB;IAAC;IAAsB;CAA0B;AAChF,MAAMC,mBAAmB;AAOzB,MAAMC;IACF,YACYC,QAAmC,EACnCC,SAAwC,CAClD;aAFUD,QAAQ,GAARA;aACAC,SAAS,GAATA;IACT;IAEH,MAAa,OAAOC,MAA0B,EAAoB;QAE9D,IAAI,CAACA,OAAO,EAAE,IAAIA,OAAO,EAAE,CAAC,QAAQ,CAAC,MACjC,OAAO;QAEX,MAAMC,UAAUC,yBAAyBF,OAAO,IAAI;QACpD,IAAI,CAACC,SACD,OAAO;QAGX,MAAME,QAAQ,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAACF;QAC1C,IAAIE,MAAM,MAAM,IAAI;YAChB,IAAIR,uBAAuB,QAAQ,CAACQ,MAAM,KAAK,CAAC,IAAI,GAChD,OAAO;YAEX,MAAMA,MAAM,KAAK;QACrB;QACA,IAAI,CAACC,gBAAgBD,MAAM,KAAK,GAC5B,OAAO;QAGX,MAAME,SAAS,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAACL,OAAO,EAAE;QACrD,IAAIK,OAAO,MAAM,IAAI;YACjB,IAAIA,OAAO,KAAK,CAAC,IAAI,KAAKT,kBACtB,OAAO;YAEX,MAAMS,OAAO,KAAK;QACtB;QACA,OAAOA,OAAO,KAAK,CAAC,IAAI,KAAKL,OAAO,IAAI;IAC5C;AACJ;AAEO,MAAMM,0DAA8BC,4BAAAA,oBAAgC,CAAC;IACxE,gBAAgBV;IAChB,cAAc;QAACW;QAAiBC;KAAoB;AACxD"}
@@ -0,0 +1,23 @@
1
+ export interface CmsEntryFolderExistsParams {
2
+ id: string;
3
+ /** ACO folder type, `cms:<modelId>`. */
4
+ type: string;
5
+ }
6
+ export interface ICmsEntryFolderExistsService {
7
+ /**
8
+ * Whether a folder with this id and type exists. `false` for a type that is not
9
+ * `cms:<modelId>`, a model the current identity cannot read, a private or unpublishable model,
10
+ * a missing folder or a folder of another type. Throws when a model or folder read fails.
11
+ */
12
+ exists(params: CmsEntryFolderExistsParams): Promise<boolean>;
13
+ }
14
+ /**
15
+ * Folder existence for the workflow editor's folder rules (D69, R125): the folder repository
16
+ * without folder-level permissions, so it answers for folders the editor cannot open, and only a
17
+ * boolean. The caller checks `editor`.
18
+ */
19
+ export declare const CmsEntryFolderExistsService: import("@webiny/di").Abstraction<ICmsEntryFolderExistsService>;
20
+ export declare namespace CmsEntryFolderExistsService {
21
+ type Interface = ICmsEntryFolderExistsService;
22
+ type Params = CmsEntryFolderExistsParams;
23
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const CmsEntryFolderExistsService = createAbstraction("CmsEntryFolderExistsService");
3
+ export { CmsEntryFolderExistsService };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/target/CmsEntryFolderExistsService/abstractions.js","sources":["../../../../src/features/target/CmsEntryFolderExistsService/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\n\nexport interface CmsEntryFolderExistsParams {\n id: string;\n /** ACO folder type, `cms:<modelId>`. */\n type: string;\n}\n\nexport interface ICmsEntryFolderExistsService {\n /**\n * Whether a folder with this id and type exists. `false` for a type that is not\n * `cms:<modelId>`, a model the current identity cannot read, a private or unpublishable model,\n * a missing folder or a folder of another type. Throws when a model or folder read fails.\n */\n exists(params: CmsEntryFolderExistsParams): Promise<boolean>;\n}\n\n/**\n * Folder existence for the workflow editor's folder rules (D69, R125): the folder repository\n * without folder-level permissions, so it answers for folders the editor cannot open, and only a\n * boolean. The caller checks `editor`.\n */\nexport const CmsEntryFolderExistsService = createAbstraction<ICmsEntryFolderExistsService>(\n \"CmsEntryFolderExistsService\"\n);\n\nexport namespace CmsEntryFolderExistsService {\n export type Interface = ICmsEntryFolderExistsService;\n export type Params = CmsEntryFolderExistsParams;\n}\n"],"names":["CmsEntryFolderExistsService","createAbstraction"],"mappings":";AAsBO,MAAMA,8BAA8BC,kBACvC"}
@@ -0,0 +1 @@
1
+ export { CmsEntryFolderExistsService } from "./abstractions.js";
@@ -0,0 +1 @@
1
+ export { CmsEntryFolderExistsService } from "./abstractions.js";
@@ -0,0 +1,10 @@
1
+ import type { CmsModel } from "@webiny/api-headless-cms/types/index.js";
2
+ import { CmsEntryReviewNamespace } from "./abstractions.js";
3
+ /** Public CMS models review under `cms.<modelId>`; private models are left to their app (R51). */
4
+ declare class CmsModelReviewNamespaceImpl implements CmsEntryReviewNamespace.Interface {
5
+ resolve(model: CmsModel): string | null;
6
+ }
7
+ export declare const CmsModelReviewNamespace: typeof CmsModelReviewNamespaceImpl & {
8
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ICmsEntryReviewNamespace>;
9
+ };
10
+ export {};
@@ -0,0 +1,14 @@
1
+ import { getCmsNamespace } from "../../../utils/appName.js";
2
+ import { CmsEntryReviewNamespace } from "./abstractions.js";
3
+ class CmsModelReviewNamespaceImpl {
4
+ resolve(model) {
5
+ return getCmsNamespace(model);
6
+ }
7
+ }
8
+ const CmsModelReviewNamespace = CmsEntryReviewNamespace.createImplementation({
9
+ implementation: CmsModelReviewNamespaceImpl,
10
+ dependencies: []
11
+ });
12
+ export { CmsModelReviewNamespace };
13
+
14
+ //# sourceMappingURL=CmsModelReviewNamespace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/target/CmsEntryReviewNamespace/CmsModelReviewNamespace.js","sources":["../../../../src/features/target/CmsEntryReviewNamespace/CmsModelReviewNamespace.ts"],"sourcesContent":["import type { CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\nimport { getCmsNamespace } from \"~/utils/appName.js\";\nimport { CmsEntryReviewNamespace } from \"./abstractions.js\";\n\n/** Public CMS models review under `cms.<modelId>`; private models are left to their app (R51). */\nclass CmsModelReviewNamespaceImpl implements CmsEntryReviewNamespace.Interface {\n public resolve(model: CmsModel): string | null {\n return getCmsNamespace(model);\n }\n}\n\nexport const CmsModelReviewNamespace = CmsEntryReviewNamespace.createImplementation({\n implementation: CmsModelReviewNamespaceImpl,\n dependencies: []\n});\n"],"names":["CmsModelReviewNamespaceImpl","model","getCmsNamespace","CmsModelReviewNamespace","CmsEntryReviewNamespace"],"mappings":";;AAKA,MAAMA;IACK,QAAQC,KAAe,EAAiB;QAC3C,OAAOC,gBAAgBD;IAC3B;AACJ;AAEO,MAAME,0BAA0BC,wBAAwB,oBAAoB,CAAC;IAChF,gBAAgBJ;IAChB,cAAc,EAAE;AACpB"}