@webiny/api-website-builder-workflows 0.0.0-unstable.c27f4d8a31 → 0.0.0-unstable.d0f34a8194
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.
- package/WebsiteBuilderPageSchemaFactory.d.ts +15 -0
- package/WebsiteBuilderPageSchemaFactory.js +30 -0
- package/WebsiteBuilderPageSchemaFactory.js.map +1 -0
- package/WebsiteBuilderWorkflowsFeature.d.ts +5 -0
- package/WebsiteBuilderWorkflowsFeature.js +21 -0
- package/WebsiteBuilderWorkflowsFeature.js.map +1 -0
- package/constants.d.ts +4 -0
- package/constants.js +5 -0
- package/constants.js.map +1 -0
- package/features/hooks/BlockPageDeleteWhileInReview.d.ts +20 -0
- package/features/hooks/BlockPageDeleteWhileInReview.js +43 -0
- package/features/hooks/BlockPageDeleteWhileInReview.js.map +1 -0
- package/features/hooks/BlockPageFolderChangeWhileInReview.d.ts +19 -0
- package/features/hooks/BlockPageFolderChangeWhileInReview.js +27 -0
- package/features/hooks/BlockPageFolderChangeWhileInReview.js.map +1 -0
- package/features/hooks/BlockPageMoveWhileInReview.d.ts +18 -0
- package/features/hooks/BlockPageMoveWhileInReview.js +44 -0
- package/features/hooks/BlockPageMoveWhileInReview.js.map +1 -0
- package/features/hooks/BlockPageRevisionDeleteWhileInReview.d.ts +13 -0
- package/features/hooks/BlockPageRevisionDeleteWhileInReview.js +44 -0
- package/features/hooks/BlockPageRevisionDeleteWhileInReview.js.map +1 -0
- package/features/hooks/BlockPageTrashWhileInReview.d.ts +21 -0
- package/features/hooks/BlockPageTrashWhileInReview.js +43 -0
- package/features/hooks/BlockPageTrashWhileInReview.js.map +1 -0
- package/features/hooks/BlockPageUpdateWhileInReview.d.ts +20 -0
- package/features/hooks/BlockPageUpdateWhileInReview.js +25 -0
- package/features/hooks/BlockPageUpdateWhileInReview.js.map +1 -0
- package/features/hooks/DeleteReviewsOnPageDelete.d.ts +20 -0
- package/features/hooks/DeleteReviewsOnPageDelete.js +43 -0
- package/features/hooks/DeleteReviewsOnPageDelete.js.map +1 -0
- package/features/hooks/DeleteReviewsOnPageRevisionDelete.d.ts +13 -0
- package/features/hooks/DeleteReviewsOnPageRevisionDelete.js +44 -0
- package/features/hooks/DeleteReviewsOnPageRevisionDelete.js.map +1 -0
- package/features/hooks/NullReviewStateOnGraduatedVariantDecorator.d.ts +27 -0
- package/features/hooks/NullReviewStateOnGraduatedVariantDecorator.js +53 -0
- package/features/hooks/NullReviewStateOnGraduatedVariantDecorator.js.map +1 -0
- package/features/hooks/NullReviewStateOnPageRevisionCreate.d.ts +26 -0
- package/features/hooks/NullReviewStateOnPageRevisionCreate.js +43 -0
- package/features/hooks/NullReviewStateOnPageRevisionCreate.js.map +1 -0
- package/features/hooks/RequireApprovedReviewOnPagePublish.d.ts +20 -0
- package/features/hooks/RequireApprovedReviewOnPagePublish.js +42 -0
- package/features/hooks/RequireApprovedReviewOnPagePublish.js.map +1 -0
- package/features/hooks/feature.d.ts +9 -0
- package/features/hooks/feature.js +31 -0
- package/features/hooks/feature.js.map +1 -0
- package/features/target/WbPageAccess/WbPageAccess.d.ts +27 -0
- package/features/target/WbPageAccess/WbPageAccess.js +84 -0
- package/features/target/WbPageAccess/WbPageAccess.js.map +1 -0
- package/features/target/WbPageAccess/abstractions.d.ts +39 -0
- package/features/target/WbPageAccess/abstractions.js +5 -0
- package/features/target/WbPageAccess/abstractions.js.map +1 -0
- package/features/target/WbPageAccess/index.d.ts +1 -0
- package/features/target/WbPageAccess/index.js +1 -0
- package/features/target/WbPageDeniedFolders/WbPageDeniedFolders.d.ts +20 -0
- package/features/target/WbPageDeniedFolders/WbPageDeniedFolders.js +55 -0
- package/features/target/WbPageDeniedFolders/WbPageDeniedFolders.js.map +1 -0
- package/features/target/WbPageDeniedFolders/abstractions.d.ts +23 -0
- package/features/target/WbPageDeniedFolders/abstractions.js +5 -0
- package/features/target/WbPageDeniedFolders/abstractions.js.map +1 -0
- package/features/target/WbPageDeniedFolders/index.d.ts +1 -0
- package/features/target/WbPageDeniedFolders/index.js +1 -0
- package/features/target/WbPageFolderExistsService/WbPageFolderExistsService.d.ts +15 -0
- package/features/target/WbPageFolderExistsService/WbPageFolderExistsService.js +27 -0
- package/features/target/WbPageFolderExistsService/WbPageFolderExistsService.js.map +1 -0
- package/features/target/WbPageFolderExistsService/abstractions.d.ts +16 -0
- package/features/target/WbPageFolderExistsService/abstractions.js +5 -0
- package/features/target/WbPageFolderExistsService/abstractions.js.map +1 -0
- package/features/target/WbPageFolderExistsService/index.d.ts +1 -0
- package/features/target/WbPageFolderExistsService/index.js +1 -0
- package/features/target/WbPageReviewNamespace.d.ts +14 -0
- package/features/target/WbPageReviewNamespace.js +15 -0
- package/features/target/WbPageReviewNamespace.js.map +1 -0
- package/features/target/WbPageReviewReadFilter/WbPageReviewReadFilter.d.ts +17 -0
- package/features/target/WbPageReviewReadFilter/WbPageReviewReadFilter.js +53 -0
- package/features/target/WbPageReviewReadFilter/WbPageReviewReadFilter.js.map +1 -0
- package/features/target/WbPageReviewReadFilter/abstractions.d.ts +21 -0
- package/features/target/WbPageReviewReadFilter/abstractions.js +5 -0
- package/features/target/WbPageReviewReadFilter/abstractions.js.map +1 -0
- package/features/target/WbPageReviewReadFilter/index.d.ts +1 -0
- package/features/target/WbPageReviewReadFilter/index.js +1 -0
- package/features/target/WbPageReviewTargetEditor.d.ts +33 -0
- package/features/target/WbPageReviewTargetEditor.js +109 -0
- package/features/target/WbPageReviewTargetEditor.js.map +1 -0
- package/features/target/WbPageReviewTargetFolderChain.d.ts +22 -0
- package/features/target/WbPageReviewTargetFolderChain.js +34 -0
- package/features/target/WbPageReviewTargetFolderChain.js.map +1 -0
- package/features/target/WbPageReviewTargetLink.d.ts +17 -0
- package/features/target/WbPageReviewTargetLink.js +17 -0
- package/features/target/WbPageReviewTargetLink.js.map +1 -0
- package/features/target/WbPageReviewTargetLoader.d.ts +13 -0
- package/features/target/WbPageReviewTargetLoader.js +29 -0
- package/features/target/WbPageReviewTargetLoader.js.map +1 -0
- package/features/target/WbPageReviewTargetReadAccess.d.ts +33 -0
- package/features/target/WbPageReviewTargetReadAccess.js +72 -0
- package/features/target/WbPageReviewTargetReadAccess.js.map +1 -0
- package/features/target/WbPageReviewTargetSync.d.ts +23 -0
- package/features/target/WbPageReviewTargetSync.js +39 -0
- package/features/target/WbPageReviewTargetSync.js.map +1 -0
- package/features/target/WbPageTargetReader/WbPageTargetReader.d.ts +20 -0
- package/features/target/WbPageTargetReader/WbPageTargetReader.js +51 -0
- package/features/target/WbPageTargetReader/WbPageTargetReader.js.map +1 -0
- package/features/target/WbPageTargetReader/abstractions.d.ts +37 -0
- package/features/target/WbPageTargetReader/abstractions.js +5 -0
- package/features/target/WbPageTargetReader/abstractions.js.map +1 -0
- package/features/target/WbPageTargetReader/index.d.ts +1 -0
- package/features/target/WbPageTargetReader/index.js +1 -0
- package/features/target/WbWorkflowModelParser.d.ts +9 -0
- package/features/target/WbWorkflowModelParser.js +18 -0
- package/features/target/WbWorkflowModelParser.js.map +1 -0
- package/features/target/feature.d.ts +5 -0
- package/features/target/feature.js +35 -0
- package/features/target/feature.js.map +1 -0
- package/features/target/isWbPageEditorValue.d.ts +9 -0
- package/features/target/isWbPageEditorValue.js +34 -0
- package/features/target/isWbPageEditorValue.js.map +1 -0
- package/features/target/toWbPageEditorFields.d.ts +32 -0
- package/features/target/toWbPageEditorFields.js +102 -0
- package/features/target/toWbPageEditorFields.js.map +1 -0
- package/features/target/toWbPageProperties.d.ts +10 -0
- package/features/target/toWbPageProperties.js +27 -0
- package/features/target/toWbPageProperties.js.map +1 -0
- package/features/target/toWbPageReviewTarget.d.ts +4 -0
- package/features/target/toWbPageReviewTarget.js +25 -0
- package/features/target/toWbPageReviewTarget.js.map +1 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/ApproveWebsiteBuilderPageReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/ApproveWebsiteBuilderPageReviewStepUseCase.js +35 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/ApproveWebsiteBuilderPageReviewStepUseCase.js.map +1 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/abstractions.d.ts +26 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/abstractions.js +5 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/feature.d.ts +4 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/feature.js +11 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/feature.js.map +1 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/index.d.ts +1 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/index.js +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/CancelWebsiteBuilderPageReviewUseCase.d.ts +13 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/CancelWebsiteBuilderPageReviewUseCase.js +37 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/CancelWebsiteBuilderPageReviewUseCase.js.map +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/abstractions.d.ts +30 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/abstractions.js +5 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/abstractions.js.map +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/feature.d.ts +4 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/feature.js +11 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/feature.js.map +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/index.d.ts +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/index.js +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/CancelWebsiteBuilderPageReviewsForDeleteUseCase.d.ts +19 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/CancelWebsiteBuilderPageReviewsForDeleteUseCase.js +81 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/CancelWebsiteBuilderPageReviewsForDeleteUseCase.js.map +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/abstractions.d.ts +39 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/abstractions.js +5 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/abstractions.js.map +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/feature.d.ts +4 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/feature.js +11 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/feature.js.map +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/index.d.ts +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/index.js +1 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/DeleteWebsiteBuilderPageWorkflowUseCase.d.ts +25 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/DeleteWebsiteBuilderPageWorkflowUseCase.js +95 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/DeleteWebsiteBuilderPageWorkflowUseCase.js.map +1 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/abstractions.d.ts +32 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/abstractions.js +5 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/abstractions.js.map +1 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/feature.d.ts +4 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/feature.js +11 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/feature.js.map +1 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/index.d.ts +1 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/index.js +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/GetWebsiteBuilderPageReviewUseCase.d.ts +13 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/GetWebsiteBuilderPageReviewUseCase.js +40 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/GetWebsiteBuilderPageReviewUseCase.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/abstractions.d.ts +29 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/abstractions.js +5 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/abstractions.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/feature.d.ts +4 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/feature.js +11 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/feature.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/index.d.ts +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/index.js +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/GetWebsiteBuilderPageReviewStepRunUseCase.d.ts +13 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/GetWebsiteBuilderPageReviewStepRunUseCase.js +39 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/GetWebsiteBuilderPageReviewStepRunUseCase.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/abstractions.d.ts +33 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/abstractions.js +5 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/abstractions.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/feature.d.ts +4 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/feature.js +11 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/feature.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/index.d.ts +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/index.js +1 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/GetWebsiteBuilderPageTargetReviewUseCase.d.ts +19 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/GetWebsiteBuilderPageTargetReviewUseCase.js +72 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/GetWebsiteBuilderPageTargetReviewUseCase.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/abstractions.d.ts +34 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/abstractions.js +5 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/abstractions.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/feature.d.ts +4 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/feature.js +11 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/feature.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/index.d.ts +1 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/index.js +1 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/GetWebsiteBuilderPageWorkflowUseCase.d.ts +13 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/GetWebsiteBuilderPageWorkflowUseCase.js +34 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/GetWebsiteBuilderPageWorkflowUseCase.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/abstractions.d.ts +24 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/abstractions.js +5 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/abstractions.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/feature.d.ts +4 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/feature.js +11 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/feature.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/index.d.ts +1 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/index.js +1 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/InspectWebsiteBuilderPageRoutingUseCase.d.ts +19 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/InspectWebsiteBuilderPageRoutingUseCase.js +51 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/InspectWebsiteBuilderPageRoutingUseCase.js.map +1 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/abstractions.d.ts +34 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/abstractions.js +5 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/abstractions.js.map +1 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/feature.d.ts +4 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/feature.js +11 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/feature.js.map +1 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/index.d.ts +1 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/index.js +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/ListWebsiteBuilderPageReviewStepCandidatesUseCase.d.ts +13 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/ListWebsiteBuilderPageReviewStepCandidatesUseCase.js +41 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/ListWebsiteBuilderPageReviewStepCandidatesUseCase.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/abstractions.d.ts +30 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/abstractions.js +5 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/abstractions.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/feature.d.ts +4 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/feature.js +11 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/feature.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/index.d.ts +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/index.js +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/ListWebsiteBuilderPageReviewsUseCase.d.ts +15 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/ListWebsiteBuilderPageReviewsUseCase.js +68 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/ListWebsiteBuilderPageReviewsUseCase.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/abstractions.d.ts +43 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/abstractions.js +5 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/abstractions.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/feature.d.ts +4 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/feature.js +11 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/feature.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/index.d.ts +2 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/index.js +1 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/ListWebsiteBuilderPageStepCandidatesUseCase.d.ts +25 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/ListWebsiteBuilderPageStepCandidatesUseCase.js +93 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/ListWebsiteBuilderPageStepCandidatesUseCase.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/abstractions.d.ts +41 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/abstractions.js +5 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/abstractions.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/feature.d.ts +4 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/feature.js +11 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/feature.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/index.d.ts +1 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/index.js +1 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/ListWebsiteBuilderPageWorkflowsUseCase.d.ts +13 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/ListWebsiteBuilderPageWorkflowsUseCase.js +37 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/ListWebsiteBuilderPageWorkflowsUseCase.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/abstractions.d.ts +20 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/abstractions.js +5 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/abstractions.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/feature.d.ts +4 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/feature.js +11 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/feature.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/index.d.ts +1 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/index.js +1 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/ReassignWebsiteBuilderPageReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/ReassignWebsiteBuilderPageReviewStepUseCase.js +40 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/ReassignWebsiteBuilderPageReviewStepUseCase.js.map +1 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/abstractions.d.ts +32 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/abstractions.js +5 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/feature.d.ts +4 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/feature.js +11 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/feature.js.map +1 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/index.d.ts +1 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/index.js +1 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/RejectWebsiteBuilderPageReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/RejectWebsiteBuilderPageReviewStepUseCase.js +35 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/RejectWebsiteBuilderPageReviewStepUseCase.js.map +1 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/abstractions.d.ts +26 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/abstractions.js +5 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/feature.d.ts +4 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/feature.js +11 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/feature.js.map +1 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/index.d.ts +1 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/index.js +1 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/RequestWebsiteBuilderPageReviewUseCase.d.ts +23 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/RequestWebsiteBuilderPageReviewUseCase.js +72 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/RequestWebsiteBuilderPageReviewUseCase.js.map +1 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/abstractions.d.ts +41 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/abstractions.js +5 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/abstractions.js.map +1 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/feature.d.ts +4 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/feature.js +11 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/feature.js.map +1 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/index.d.ts +1 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/index.js +1 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/RestartWebsiteBuilderPageReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/RestartWebsiteBuilderPageReviewStepUseCase.js +39 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/RestartWebsiteBuilderPageReviewStepUseCase.js.map +1 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/abstractions.d.ts +30 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/abstractions.js +5 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/feature.d.ts +4 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/feature.js +11 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/feature.js.map +1 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/index.d.ts +1 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/index.js +1 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/StartWebsiteBuilderPageReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/StartWebsiteBuilderPageReviewStepUseCase.js +34 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/StartWebsiteBuilderPageReviewStepUseCase.js.map +1 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/abstractions.d.ts +25 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/abstractions.js +5 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/feature.d.ts +4 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/feature.js +11 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/feature.js.map +1 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/index.d.ts +1 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/index.js +1 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/StoreWebsiteBuilderPageWorkflowUseCase.d.ts +17 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/StoreWebsiteBuilderPageWorkflowUseCase.js +57 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/StoreWebsiteBuilderPageWorkflowUseCase.js.map +1 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/abstractions.d.ts +33 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/abstractions.js +5 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/abstractions.js.map +1 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/feature.d.ts +4 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/feature.js +11 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/feature.js.map +1 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/index.d.ts +1 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/index.js +1 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/TakeOverWebsiteBuilderPageReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/TakeOverWebsiteBuilderPageReviewStepUseCase.js +35 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/TakeOverWebsiteBuilderPageReviewStepUseCase.js.map +1 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/abstractions.d.ts +27 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/abstractions.js +5 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/feature.d.ts +4 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/feature.js +11 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/feature.js.map +1 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/index.d.ts +1 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/index.js +1 -0
- package/features/wrappers/WbPageReviewGuardService/WbPageReviewGuardService.d.ts +17 -0
- package/features/wrappers/WbPageReviewGuardService/WbPageReviewGuardService.js +63 -0
- package/features/wrappers/WbPageReviewGuardService/WbPageReviewGuardService.js.map +1 -0
- package/features/wrappers/WbPageReviewGuardService/abstractions.d.ts +37 -0
- package/features/wrappers/WbPageReviewGuardService/abstractions.js +5 -0
- package/features/wrappers/WbPageReviewGuardService/abstractions.js.map +1 -0
- package/features/wrappers/WbPageReviewGuardService/index.d.ts +1 -0
- package/features/wrappers/WbPageReviewGuardService/index.js +1 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/WebsiteBuilderPageFolderExistsUseCase.d.ts +15 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/WebsiteBuilderPageFolderExistsUseCase.js +43 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/WebsiteBuilderPageFolderExistsUseCase.js.map +1 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/abstractions.d.ts +28 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/abstractions.js +5 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/abstractions.js.map +1 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/feature.d.ts +4 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/feature.js +11 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/feature.js.map +1 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/index.d.ts +1 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/index.js +1 -0
- package/features/wrappers/feature.d.ts +9 -0
- package/features/wrappers/feature.js +53 -0
- package/features/wrappers/feature.js.map +1 -0
- package/features/wrappers/shared/wbWorkflows.d.ts +8 -0
- package/features/wrappers/shared/wbWorkflows.js +9 -0
- package/features/wrappers/shared/wbWorkflows.js.map +1 -0
- package/graphql/WebsiteBuilderWorkflowsSchemaFactory.d.ts +15 -0
- package/graphql/WebsiteBuilderWorkflowsSchemaFactory.js +616 -0
- package/graphql/WebsiteBuilderWorkflowsSchemaFactory.js.map +1 -0
- package/graphql/isValidRevisionId.d.ts +6 -0
- package/graphql/isValidRevisionId.js +9 -0
- package/graphql/isValidRevisionId.js.map +1 -0
- package/index.d.ts +1 -1
- package/index.js +1 -19
- package/package.json +31 -19
- package/features/PageWorkflows/feature.d.ts +0 -1
- package/features/PageWorkflows/feature.js +0 -18
- package/features/PageWorkflows/feature.js.map +0 -1
- package/features/PageWorkflows/handlers/ClearPageStateOnWorkflowStateAfterDelete.d.ts +0 -11
- package/features/PageWorkflows/handlers/ClearPageStateOnWorkflowStateAfterDelete.js +0 -27
- package/features/PageWorkflows/handlers/ClearPageStateOnWorkflowStateAfterDelete.js.map +0 -1
- package/features/PageWorkflows/handlers/DeleteWorkflowStateOnPageAfterDelete.d.ts +0 -11
- package/features/PageWorkflows/handlers/DeleteWorkflowStateOnPageAfterDelete.js +0 -20
- package/features/PageWorkflows/handlers/DeleteWorkflowStateOnPageAfterDelete.js.map +0 -1
- package/features/PageWorkflows/handlers/UpdatePageOnWorkflowStateAfterCreate.d.ts +0 -11
- package/features/PageWorkflows/handlers/UpdatePageOnWorkflowStateAfterCreate.js +0 -29
- package/features/PageWorkflows/handlers/UpdatePageOnWorkflowStateAfterCreate.js.map +0 -1
- package/features/PageWorkflows/handlers/UpdatePageOnWorkflowStateAfterUpdate.d.ts +0 -11
- package/features/PageWorkflows/handlers/UpdatePageOnWorkflowStateAfterUpdate.js +0 -29
- package/features/PageWorkflows/handlers/UpdatePageOnWorkflowStateAfterUpdate.js.map +0 -1
- package/features/PageWorkflows/handlers/ValidateWorkflowStateOnPageBeforePublish.d.ts +0 -11
- package/features/PageWorkflows/handlers/ValidateWorkflowStateOnPageBeforePublish.js +0 -43
- package/features/PageWorkflows/handlers/ValidateWorkflowStateOnPageBeforePublish.js.map +0 -1
- package/graphql/page.d.ts +0 -2
- package/graphql/page.js +0 -24
- package/graphql/page.js.map +0 -1
- package/index.js.map +0 -1
- package/utils/appName.d.ts +0 -1
- package/utils/appName.js +0 -3
- package/utils/appName.js.map +0 -1
- package/utils/state.d.ts +0 -8
- package/utils/state.js +0 -11
- package/utils/state.js.map +0 -1
|
@@ -0,0 +1,55 @@
|
|
|
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 { WB_PAGE_FOLDER_TYPE } from "../../../constants.js";
|
|
5
|
+
import { WbPageDeniedFolders } from "./abstractions.js";
|
|
6
|
+
class WbPageDeniedFoldersImpl {
|
|
7
|
+
constructor(identityContext, folderLevelPermissions){
|
|
8
|
+
this.identityContext = identityContext;
|
|
9
|
+
this.folderLevelPermissions = folderLevelPermissions;
|
|
10
|
+
this.cache = new Map();
|
|
11
|
+
}
|
|
12
|
+
async listDeniedFolderIds() {
|
|
13
|
+
if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) return [];
|
|
14
|
+
const identity = this.identityContext.getIdentity();
|
|
15
|
+
const cached = this.cache.get(identity.id);
|
|
16
|
+
if (cached) return [
|
|
17
|
+
...cached
|
|
18
|
+
];
|
|
19
|
+
const records = await this.folderLevelPermissions.listFolderLevelPermissions({
|
|
20
|
+
where: {
|
|
21
|
+
type: WB_PAGE_FOLDER_TYPE,
|
|
22
|
+
path_startsWith: `${ROOT_FOLDER}/`
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
const denied = [];
|
|
26
|
+
for (const record of records){
|
|
27
|
+
const canRead = await this.folderLevelPermissions.canAccessFolderContent({
|
|
28
|
+
permissions: record.permissions,
|
|
29
|
+
rwd: "r"
|
|
30
|
+
});
|
|
31
|
+
if (!canRead) denied.push(record.id);
|
|
32
|
+
}
|
|
33
|
+
this.cache.set(identity.id, denied);
|
|
34
|
+
return [
|
|
35
|
+
...denied
|
|
36
|
+
];
|
|
37
|
+
}
|
|
38
|
+
async createFolderReadRule() {
|
|
39
|
+
const deniedIds = await this.listDeniedFolderIds();
|
|
40
|
+
const denied = new Set(deniedIds);
|
|
41
|
+
return {
|
|
42
|
+
canReadFolder: async (folderId)=>!denied.has(folderId)
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const WbPageDeniedFolders_WbPageDeniedFolders = WbPageDeniedFolders.createImplementation({
|
|
47
|
+
implementation: WbPageDeniedFoldersImpl,
|
|
48
|
+
dependencies: [
|
|
49
|
+
IdentityContext,
|
|
50
|
+
FolderLevelPermissions
|
|
51
|
+
]
|
|
52
|
+
});
|
|
53
|
+
export { WbPageDeniedFolders_WbPageDeniedFolders as WbPageDeniedFolders };
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=WbPageDeniedFolders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/WbPageDeniedFolders/WbPageDeniedFolders.js","sources":["../../../../src/features/target/WbPageDeniedFolders/WbPageDeniedFolders.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 { WB_PAGE_FOLDER_TYPE } from \"~/constants.js\";\nimport type { FolderReadRule } from \"@webiny/api-headless-cms-workflows/features/target/FolderReadRule.js\";\nimport { WbPageDeniedFolders as Abstraction } from \"./abstractions.js\";\n\n/**\n * Registered per request, so the cache lives for one request. Keyed by identity id, because\n * `withIdentity` can switch the identity mid-request.\n */\nclass WbPageDeniedFoldersImpl 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(): 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 cached = this.cache.get(identity.id);\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: WB_PAGE_FOLDER_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(identity.id, denied);\n return [...denied];\n }\n\n public async createFolderReadRule(): Promise<FolderReadRule> {\n const deniedIds = await this.listDeniedFolderIds();\n const denied = new Set(deniedIds);\n return {\n canReadFolder: async (folderId: string): Promise<boolean> => !denied.has(folderId)\n };\n }\n}\n\nexport const WbPageDeniedFolders = Abstraction.createImplementation({\n implementation: WbPageDeniedFoldersImpl,\n dependencies: [IdentityContext, FolderLevelPermissions]\n});\n"],"names":["WbPageDeniedFoldersImpl","identityContext","folderLevelPermissions","Map","identity","cached","records","WB_PAGE_FOLDER_TYPE","ROOT_FOLDER","denied","record","canRead","deniedIds","Set","folderId","WbPageDeniedFolders","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,sBAAyC;QAElD,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,4BAA4B,IACzD,OAAO,EAAE;QAEb,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QACjD,MAAMC,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG,CAACD,SAAS,EAAE;QACzC,IAAIC,QACA,OAAO;eAAIA;SAAO;QAKtB,MAAMC,UAAU,MAAM,IAAI,CAAC,sBAAsB,CAAC,0BAA0B,CAAC;YACzE,OAAO;gBAAE,MAAMC;gBAAqB,iBAAiB,GAAGC,YAAY,CAAC,CAAC;YAAC;QAC3E;QACA,MAAMC,SAAmB,EAAE;QAC3B,KAAK,MAAMC,UAAUJ,QAAS;YAG1B,MAAMK,UAAU,MAAM,IAAI,CAAC,sBAAsB,CAAC,sBAAsB,CAAC;gBACrE,aAAaD,OAAO,WAAW;gBAC/B,KAAK;YACT;YACA,IAAI,CAACC,SACDF,OAAO,IAAI,CAACC,OAAO,EAAE;QAE7B;QACA,IAAI,CAAC,KAAK,CAAC,GAAG,CAACN,SAAS,EAAE,EAAEK;QAC5B,OAAO;eAAIA;SAAO;IACtB;IAEA,MAAa,uBAAgD;QACzD,MAAMG,YAAY,MAAM,IAAI,CAAC,mBAAmB;QAChD,MAAMH,SAAS,IAAII,IAAID;QACvB,OAAO;YACH,eAAe,OAAOE,WAAuC,CAACL,OAAO,GAAG,CAACK;QAC7E;IACJ;AACJ;AAEO,MAAMC,0CAAsBC,oBAAAA,oBAAgC,CAAC;IAChE,gBAAgBhB;IAChB,cAAc;QAACiB;QAAiBC;KAAuB;AAC3D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { FolderReadRule } from "@webiny/api-headless-cms-workflows/features/target/FolderReadRule.js";
|
|
2
|
+
export interface IWbPageDeniedFolders {
|
|
3
|
+
/**
|
|
4
|
+
* Ids of the page folders whose content the current identity cannot read (Q77). Empty when
|
|
5
|
+
* folder-level permissions are not in use for the identity (e.g. API keys). Folders without
|
|
6
|
+
* permission records and the root folder are readable, so they never appear.
|
|
7
|
+
*/
|
|
8
|
+
listDeniedFolderIds(): Promise<string[]>;
|
|
9
|
+
/**
|
|
10
|
+
* The same rules as a `FolderReadRule` for many page checks of the current identity
|
|
11
|
+
* (`WbPageAccess.canRead`), so the checks read no folder permissions of their own.
|
|
12
|
+
*/
|
|
13
|
+
createFolderReadRule(): Promise<FolderReadRule>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Folder read rules of pages for list filters, as `WbPageAccess` applies them to one page: one
|
|
17
|
+
* `listFolderLevelPermissions` of the `wb:page` folder type, evaluated in memory with
|
|
18
|
+
* `canAccessFolderContent`. Cached per identity for the request.
|
|
19
|
+
*/
|
|
20
|
+
export declare const WbPageDeniedFolders: import("@webiny/di").Abstraction<IWbPageDeniedFolders>;
|
|
21
|
+
export declare namespace WbPageDeniedFolders {
|
|
22
|
+
type Interface = IWbPageDeniedFolders;
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/WbPageDeniedFolders/abstractions.js","sources":["../../../../src/features/target/WbPageDeniedFolders/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { FolderReadRule } from \"@webiny/api-headless-cms-workflows/features/target/FolderReadRule.js\";\n\nexport interface IWbPageDeniedFolders {\n /**\n * Ids of the page folders whose content the current identity cannot read (Q77). Empty when\n * folder-level permissions are not in use for the identity (e.g. API keys). Folders without\n * permission records and the root folder are readable, so they never appear.\n */\n listDeniedFolderIds(): Promise<string[]>;\n /**\n * The same rules as a `FolderReadRule` for many page checks of the current identity\n * (`WbPageAccess.canRead`), so the checks read no folder permissions of their own.\n */\n createFolderReadRule(): Promise<FolderReadRule>;\n}\n\n/**\n * Folder read rules of pages for list filters, as `WbPageAccess` applies them to one page: one\n * `listFolderLevelPermissions` of the `wb:page` folder type, evaluated in memory with\n * `canAccessFolderContent`. Cached per identity for the request.\n */\nexport const WbPageDeniedFolders = createAbstraction<IWbPageDeniedFolders>(\"WbPageDeniedFolders\");\n\nexport namespace WbPageDeniedFolders {\n export type Interface = IWbPageDeniedFolders;\n}\n"],"names":["WbPageDeniedFolders","createAbstraction"],"mappings":";AAsBO,MAAMA,sBAAsBC,kBAAwC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WbPageDeniedFolders } from "./abstractions.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WbPageDeniedFolders } from "./abstractions.js";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { GetFolderRepository } from "@webiny/api-aco/features/folder/GetFolder/abstractions.js";
|
|
2
|
+
import { WbPageFolderExistsService as Abstraction } from "./abstractions.js";
|
|
3
|
+
/**
|
|
4
|
+
* The ACO folder model is private (`authorization: false`): the repository read needs no
|
|
5
|
+
* `withoutAuthorization` and runs no folder-level permissions (D69).
|
|
6
|
+
*/
|
|
7
|
+
declare class WbPageFolderExistsServiceImpl implements Abstraction.Interface {
|
|
8
|
+
private getFolder;
|
|
9
|
+
constructor(getFolder: GetFolderRepository.Interface);
|
|
10
|
+
exists(folderId: string): Promise<boolean>;
|
|
11
|
+
}
|
|
12
|
+
export declare const WbPageFolderExistsService: typeof WbPageFolderExistsServiceImpl & {
|
|
13
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IWbPageFolderExistsService>;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { GetFolderRepository } from "@webiny/api-aco/features/folder/GetFolder/abstractions.js";
|
|
2
|
+
import { WB_PAGE_FOLDER_TYPE } from "../../../constants.js";
|
|
3
|
+
import { WbPageFolderExistsService } from "./abstractions.js";
|
|
4
|
+
const FOLDER_NOT_FOUND = "Aco/Folder/NotFound";
|
|
5
|
+
class WbPageFolderExistsServiceImpl {
|
|
6
|
+
constructor(getFolder){
|
|
7
|
+
this.getFolder = getFolder;
|
|
8
|
+
}
|
|
9
|
+
async exists(folderId) {
|
|
10
|
+
if (!folderId || folderId.includes("#")) return false;
|
|
11
|
+
const folder = await this.getFolder.execute(folderId);
|
|
12
|
+
if (folder.isFail()) {
|
|
13
|
+
if (folder.error.code === FOLDER_NOT_FOUND) return false;
|
|
14
|
+
throw folder.error;
|
|
15
|
+
}
|
|
16
|
+
return folder.value.type === WB_PAGE_FOLDER_TYPE;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const WbPageFolderExistsService_WbPageFolderExistsService = WbPageFolderExistsService.createImplementation({
|
|
20
|
+
implementation: WbPageFolderExistsServiceImpl,
|
|
21
|
+
dependencies: [
|
|
22
|
+
GetFolderRepository
|
|
23
|
+
]
|
|
24
|
+
});
|
|
25
|
+
export { WbPageFolderExistsService_WbPageFolderExistsService as WbPageFolderExistsService };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=WbPageFolderExistsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/WbPageFolderExistsService/WbPageFolderExistsService.js","sources":["../../../../src/features/target/WbPageFolderExistsService/WbPageFolderExistsService.ts"],"sourcesContent":["import { GetFolderRepository } from \"@webiny/api-aco/features/folder/GetFolder/abstractions.js\";\nimport { WB_PAGE_FOLDER_TYPE } from \"~/constants.js\";\nimport { WbPageFolderExistsService as Abstraction } from \"./abstractions.js\";\n\n/** Compared by code, as the CMS service does: no dependency on one ACO module instance. */\nconst FOLDER_NOT_FOUND = \"Aco/Folder/NotFound\";\n\n/**\n * The ACO folder model is private (`authorization: false`): the repository read needs no\n * `withoutAuthorization` and runs no folder-level permissions (D69).\n */\nclass WbPageFolderExistsServiceImpl implements Abstraction.Interface {\n public constructor(private getFolder: GetFolderRepository.Interface) {}\n\n public async exists(folderId: string): Promise<boolean> {\n // Folder ids are plain entry ids; the repository would read `<id>#<n>` as a revision.\n if (!folderId || folderId.includes(\"#\")) {\n return false;\n }\n const folder = await this.getFolder.execute(folderId);\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 === WB_PAGE_FOLDER_TYPE;\n }\n}\n\nexport const WbPageFolderExistsService = Abstraction.createImplementation({\n implementation: WbPageFolderExistsServiceImpl,\n dependencies: [GetFolderRepository]\n});\n"],"names":["FOLDER_NOT_FOUND","WbPageFolderExistsServiceImpl","getFolder","folderId","folder","WB_PAGE_FOLDER_TYPE","WbPageFolderExistsService","Abstraction","GetFolderRepository"],"mappings":";;;AAKA,MAAMA,mBAAmB;AAMzB,MAAMC;IACF,YAA2BC,SAAwC,CAAE;aAA1CA,SAAS,GAATA;IAA2C;IAEtE,MAAa,OAAOC,QAAgB,EAAoB;QAEpD,IAAI,CAACA,YAAYA,SAAS,QAAQ,CAAC,MAC/B,OAAO;QAEX,MAAMC,SAAS,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAACD;QAC5C,IAAIC,OAAO,MAAM,IAAI;YACjB,IAAIA,OAAO,KAAK,CAAC,IAAI,KAAKJ,kBACtB,OAAO;YAEX,MAAMI,OAAO,KAAK;QACtB;QACA,OAAOA,OAAO,KAAK,CAAC,IAAI,KAAKC;IACjC;AACJ;AAEO,MAAMC,sDAA4BC,0BAAAA,oBAAgC,CAAC;IACtE,gBAAgBN;IAChB,cAAc;QAACO;KAAoB;AACvC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface IWbPageFolderExistsService {
|
|
2
|
+
/**
|
|
3
|
+
* Whether a `wb:page` folder with this id exists. A missing folder, another folder type or an
|
|
4
|
+
* id that is no folder id (empty, or with `#`) answer `false`; a failed read throws.
|
|
5
|
+
*/
|
|
6
|
+
exists(folderId: string): Promise<boolean>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The dangling-folder check of the workflow editor (D69, R125): reads the folder with ACO's
|
|
10
|
+
* repository, without folder-level permissions, and answers only a boolean, never folder data.
|
|
11
|
+
* The caller checks `editor` first (`WebsiteBuilderPageFolderExistsUseCase`).
|
|
12
|
+
*/
|
|
13
|
+
export declare const WbPageFolderExistsService: import("@webiny/di").Abstraction<IWbPageFolderExistsService>;
|
|
14
|
+
export declare namespace WbPageFolderExistsService {
|
|
15
|
+
type Interface = IWbPageFolderExistsService;
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/WbPageFolderExistsService/abstractions.js","sources":["../../../../src/features/target/WbPageFolderExistsService/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\n\nexport interface IWbPageFolderExistsService {\n /**\n * Whether a `wb:page` folder with this id exists. A missing folder, another folder type or an\n * id that is no folder id (empty, or with `#`) answer `false`; a failed read throws.\n */\n exists(folderId: string): Promise<boolean>;\n}\n\n/**\n * The dangling-folder check of the workflow editor (D69, R125): reads the folder with ACO's\n * repository, without folder-level permissions, and answers only a boolean, never folder data.\n * The caller checks `editor` first (`WebsiteBuilderPageFolderExistsUseCase`).\n */\nexport const WbPageFolderExistsService = createAbstraction<IWbPageFolderExistsService>(\n \"WbPageFolderExistsService\"\n);\n\nexport namespace WbPageFolderExistsService {\n export type Interface = IWbPageFolderExistsService;\n}\n"],"names":["WbPageFolderExistsService","createAbstraction"],"mappings":";AAeO,MAAMA,4BAA4BC,kBACrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WbPageFolderExistsService } from "./abstractions.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WbPageFolderExistsService } from "./abstractions.js";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CmsModel } from "@webiny/api-headless-cms/types/index.js";
|
|
2
|
+
import { CmsEntryReviewNamespace } from "@webiny/api-headless-cms-workflows/features/target/CmsEntryReviewNamespace/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Pages are entries of the private CMS model `wbyWbPage` (`wbPage` with legacy models); their
|
|
5
|
+
* review namespace is `wb.page` (R51), never a `cms.*` one. The page model publishes no CMS entry
|
|
6
|
+
* events, so the page rules listen to the Website Builder page events (`WbHooksFeature`).
|
|
7
|
+
*/
|
|
8
|
+
declare class WbPageReviewNamespaceImpl implements CmsEntryReviewNamespace.Interface {
|
|
9
|
+
resolve(model: CmsModel): string | null;
|
|
10
|
+
}
|
|
11
|
+
export declare const WbPageReviewNamespace: typeof WbPageReviewNamespaceImpl & {
|
|
12
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-headless-cms-workflows/features/target/CmsEntryReviewNamespace/abstractions").ICmsEntryReviewNamespace>;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PAGE_MODEL_ID } from "@webiny/api-website-builder/domain/page/page.model.js";
|
|
2
|
+
import { CmsEntryReviewNamespace } from "@webiny/api-headless-cms-workflows/features/target/CmsEntryReviewNamespace/index.js";
|
|
3
|
+
import { WB_PAGE_NAMESPACE } from "../../constants.js";
|
|
4
|
+
class WbPageReviewNamespaceImpl {
|
|
5
|
+
resolve(model) {
|
|
6
|
+
return model.modelId === PAGE_MODEL_ID ? WB_PAGE_NAMESPACE : null;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
const WbPageReviewNamespace = CmsEntryReviewNamespace.createImplementation({
|
|
10
|
+
implementation: WbPageReviewNamespaceImpl,
|
|
11
|
+
dependencies: []
|
|
12
|
+
});
|
|
13
|
+
export { WbPageReviewNamespace };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=WbPageReviewNamespace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/WbPageReviewNamespace.js","sources":["../../../src/features/target/WbPageReviewNamespace.ts"],"sourcesContent":["import type { CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\nimport { PAGE_MODEL_ID } from \"@webiny/api-website-builder/domain/page/page.model.js\";\nimport { CmsEntryReviewNamespace } from \"@webiny/api-headless-cms-workflows/features/target/CmsEntryReviewNamespace/index.js\";\nimport { WB_PAGE_NAMESPACE } from \"~/constants.js\";\n\n/**\n * Pages are entries of the private CMS model `wbyWbPage` (`wbPage` with legacy models); their\n * review namespace is `wb.page` (R51), never a `cms.*` one. The page model publishes no CMS entry\n * events, so the page rules listen to the Website Builder page events (`WbHooksFeature`).\n */\nclass WbPageReviewNamespaceImpl implements CmsEntryReviewNamespace.Interface {\n public resolve(model: CmsModel): string | null {\n return model.modelId === PAGE_MODEL_ID ? WB_PAGE_NAMESPACE : null;\n }\n}\n\nexport const WbPageReviewNamespace = CmsEntryReviewNamespace.createImplementation({\n implementation: WbPageReviewNamespaceImpl,\n dependencies: []\n});\n"],"names":["WbPageReviewNamespaceImpl","model","PAGE_MODEL_ID","WB_PAGE_NAMESPACE","WbPageReviewNamespace","CmsEntryReviewNamespace"],"mappings":";;;AAUA,MAAMA;IACK,QAAQC,KAAe,EAAiB;QAC3C,OAAOA,MAAM,OAAO,KAAKC,gBAAgBC,oBAAoB;IACjE;AACJ;AAEO,MAAMC,wBAAwBC,wBAAwB,oBAAoB,CAAC;IAC9E,gBAAgBL;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { WbPermissions } from "@webiny/api-website-builder/features/permissions/abstractions.js";
|
|
2
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
3
|
+
import { ListReviewedModelsUseCase } from "@webiny/api-workflows/features/review/ListReviewedModels/index.js";
|
|
4
|
+
import { WbPageDeniedFolders } from "../WbPageDeniedFolders/index.js";
|
|
5
|
+
import { WbPageReviewReadFilter as Abstraction } from "./abstractions.js";
|
|
6
|
+
declare class WbPageReviewReadFilterImpl implements Abstraction.Interface {
|
|
7
|
+
private permissions;
|
|
8
|
+
private identityContext;
|
|
9
|
+
private deniedFolders;
|
|
10
|
+
private listReviewedModels;
|
|
11
|
+
constructor(permissions: WbPermissions.Interface, identityContext: IdentityContext.Interface, deniedFolders: WbPageDeniedFolders.Interface, listReviewedModels: ListReviewedModelsUseCase.Interface);
|
|
12
|
+
build(): Abstraction.Return;
|
|
13
|
+
}
|
|
14
|
+
export declare const WbPageReviewReadFilter: typeof WbPageReviewReadFilterImpl & {
|
|
15
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IWbPageReviewReadFilter>;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { WbPermissions } from "@webiny/api-website-builder/features/permissions/abstractions.js";
|
|
3
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
4
|
+
import { ReviewPersistenceError } from "@webiny/api-workflows/domain/review/errors.js";
|
|
5
|
+
import { ListReviewedModelsUseCase } from "@webiny/api-workflows/features/review/ListReviewedModels/index.js";
|
|
6
|
+
import { WB_PAGE_NAMESPACE } from "../../../constants.js";
|
|
7
|
+
import { WbPageDeniedFolders } from "../WbPageDeniedFolders/index.js";
|
|
8
|
+
import { WbPageReviewReadFilter } from "./abstractions.js";
|
|
9
|
+
class WbPageReviewReadFilterImpl {
|
|
10
|
+
constructor(permissions, identityContext, deniedFolders, listReviewedModels){
|
|
11
|
+
this.permissions = permissions;
|
|
12
|
+
this.identityContext = identityContext;
|
|
13
|
+
this.deniedFolders = deniedFolders;
|
|
14
|
+
this.listReviewedModels = listReviewedModels;
|
|
15
|
+
}
|
|
16
|
+
async build() {
|
|
17
|
+
const identity = this.identityContext.getIdentity();
|
|
18
|
+
const filter = {
|
|
19
|
+
models: [],
|
|
20
|
+
ownOnlyModels: [],
|
|
21
|
+
authorId: identity.id,
|
|
22
|
+
deniedFolderIds: []
|
|
23
|
+
};
|
|
24
|
+
try {
|
|
25
|
+
if (!await this.permissions.canRead("page")) return Result.ok(filter);
|
|
26
|
+
if (await this.permissions.onlyOwnRecords("page")) filter.ownOnlyModels.push(WB_PAGE_NAMESPACE);
|
|
27
|
+
else filter.models.push(WB_PAGE_NAMESPACE);
|
|
28
|
+
} catch (error) {
|
|
29
|
+
return Result.fail(new ReviewPersistenceError(error instanceof Error ? error : new Error(String(error))));
|
|
30
|
+
}
|
|
31
|
+
const reviewedModels = await this.listReviewedModels.execute();
|
|
32
|
+
if (reviewedModels.isFail()) return Result.fail(reviewedModels.error);
|
|
33
|
+
if (!reviewedModels.value.includes(WB_PAGE_NAMESPACE)) return Result.ok(filter);
|
|
34
|
+
try {
|
|
35
|
+
filter.deniedFolderIds = await this.deniedFolders.listDeniedFolderIds();
|
|
36
|
+
} catch (error) {
|
|
37
|
+
return Result.fail(new ReviewPersistenceError(error instanceof Error ? error : new Error(String(error))));
|
|
38
|
+
}
|
|
39
|
+
return Result.ok(filter);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const WbPageReviewReadFilter_WbPageReviewReadFilter = WbPageReviewReadFilter.createImplementation({
|
|
43
|
+
implementation: WbPageReviewReadFilterImpl,
|
|
44
|
+
dependencies: [
|
|
45
|
+
WbPermissions,
|
|
46
|
+
IdentityContext,
|
|
47
|
+
WbPageDeniedFolders,
|
|
48
|
+
ListReviewedModelsUseCase
|
|
49
|
+
]
|
|
50
|
+
});
|
|
51
|
+
export { WbPageReviewReadFilter_WbPageReviewReadFilter as WbPageReviewReadFilter };
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=WbPageReviewReadFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/WbPageReviewReadFilter/WbPageReviewReadFilter.js","sources":["../../../../src/features/target/WbPageReviewReadFilter/WbPageReviewReadFilter.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { WbPermissions } from \"@webiny/api-website-builder/features/permissions/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type { ReviewListReadFilter } from \"@webiny/api-workflows/domain/review/types.js\";\nimport { ReviewPersistenceError } from \"@webiny/api-workflows/domain/review/errors.js\";\nimport { ListReviewedModelsUseCase } from \"@webiny/api-workflows/features/review/ListReviewedModels/index.js\";\nimport { WB_PAGE_NAMESPACE } from \"~/constants.js\";\nimport { WbPageDeniedFolders } from \"../WbPageDeniedFolders/index.js\";\nimport { WbPageReviewReadFilter as Abstraction } from \"./abstractions.js\";\n\nclass WbPageReviewReadFilterImpl implements Abstraction.Interface {\n public constructor(\n private permissions: WbPermissions.Interface,\n private identityContext: IdentityContext.Interface,\n private deniedFolders: WbPageDeniedFolders.Interface,\n private listReviewedModels: ListReviewedModelsUseCase.Interface\n ) {}\n\n public async build(): Abstraction.Return {\n const identity = this.identityContext.getIdentity();\n const filter: ReviewListReadFilter = {\n models: [],\n ownOnlyModels: [],\n authorId: identity.id,\n deniedFolderIds: []\n };\n try {\n if (!(await this.permissions.canRead(\"page\"))) {\n return Result.ok(filter);\n }\n if (await this.permissions.onlyOwnRecords(\"page\")) {\n filter.ownOnlyModels.push(WB_PAGE_NAMESPACE);\n } else {\n filter.models.push(WB_PAGE_NAMESPACE);\n }\n } catch (error) {\n return Result.fail(\n new ReviewPersistenceError(\n error instanceof Error ? error : new Error(String(error))\n )\n );\n }\n\n // Folder rules only when pages have active reviews: otherwise no row can match.\n const reviewedModels = await this.listReviewedModels.execute();\n if (reviewedModels.isFail()) {\n return Result.fail(reviewedModels.error);\n }\n if (!reviewedModels.value.includes(WB_PAGE_NAMESPACE)) {\n return Result.ok(filter);\n }\n try {\n filter.deniedFolderIds = await this.deniedFolders.listDeniedFolderIds();\n } catch (error) {\n return Result.fail(\n new ReviewPersistenceError(\n error instanceof Error ? error : new Error(String(error))\n )\n );\n }\n return Result.ok(filter);\n }\n}\n\nexport const WbPageReviewReadFilter = Abstraction.createImplementation({\n implementation: WbPageReviewReadFilterImpl,\n dependencies: [WbPermissions, IdentityContext, WbPageDeniedFolders, ListReviewedModelsUseCase]\n});\n"],"names":["WbPageReviewReadFilterImpl","permissions","identityContext","deniedFolders","listReviewedModels","identity","filter","Result","WB_PAGE_NAMESPACE","error","ReviewPersistenceError","Error","String","reviewedModels","WbPageReviewReadFilter","Abstraction","WbPermissions","IdentityContext","WbPageDeniedFolders","ListReviewedModelsUseCase"],"mappings":";;;;;;;;AAUA,MAAMA;IACF,YACYC,WAAoC,EACpCC,eAA0C,EAC1CC,aAA4C,EAC5CC,kBAAuD,CACjE;aAJUH,WAAW,GAAXA;aACAC,eAAe,GAAfA;aACAC,aAAa,GAAbA;aACAC,kBAAkB,GAAlBA;IACT;IAEH,MAAa,QAA4B;QACrC,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QACjD,MAAMC,SAA+B;YACjC,QAAQ,EAAE;YACV,eAAe,EAAE;YACjB,UAAUD,SAAS,EAAE;YACrB,iBAAiB,EAAE;QACvB;QACA,IAAI;YACA,IAAI,CAAE,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SACjC,OAAOE,OAAO,EAAE,CAACD;YAErB,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,SACtCA,OAAO,aAAa,CAAC,IAAI,CAACE;iBAE1BF,OAAO,MAAM,CAAC,IAAI,CAACE;QAE3B,EAAE,OAAOC,OAAO;YACZ,OAAOF,OAAO,IAAI,CACd,IAAIG,uBACAD,iBAAiBE,QAAQF,QAAQ,IAAIE,MAAMC,OAAOH;QAG9D;QAGA,MAAMI,iBAAiB,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO;QAC5D,IAAIA,eAAe,MAAM,IACrB,OAAON,OAAO,IAAI,CAACM,eAAe,KAAK;QAE3C,IAAI,CAACA,eAAe,KAAK,CAAC,QAAQ,CAACL,oBAC/B,OAAOD,OAAO,EAAE,CAACD;QAErB,IAAI;YACAA,OAAO,eAAe,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB;QACzE,EAAE,OAAOG,OAAO;YACZ,OAAOF,OAAO,IAAI,CACd,IAAIG,uBACAD,iBAAiBE,QAAQF,QAAQ,IAAIE,MAAMC,OAAOH;QAG9D;QACA,OAAOF,OAAO,EAAE,CAACD;IACrB;AACJ;AAEO,MAAMQ,gDAAyBC,uBAAAA,oBAAgC,CAAC;IACnE,gBAAgBf;IAChB,cAAc;QAACgB;QAAeC;QAAiBC;QAAqBC;KAA0B;AAClG"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type Result } from "@webiny/feature/api";
|
|
2
|
+
import type { ReviewListReadFilter } from "@webiny/api-workflows/domain/review/types.js";
|
|
3
|
+
import type { ReviewPersistenceError } from "@webiny/api-workflows/domain/review/errors.js";
|
|
4
|
+
export interface IWbPageReviewReadFilter {
|
|
5
|
+
/**
|
|
6
|
+
* The page review list read filter (Q77) of the current identity. A failed permission or
|
|
7
|
+
* folder permission read is a persistence error (R87).
|
|
8
|
+
*/
|
|
9
|
+
build(): Promise<Result<ReviewListReadFilter, ReviewPersistenceError>>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* What the Website Builder page list would show the current identity, as a review list filter:
|
|
13
|
+
* pages are readable with `canRead("page")`, own-only when `onlyOwnRecords("page")` (as
|
|
14
|
+
* `ListPagesUseCase` filters by `createdBy`); folders come from `WbPageDeniedFolders`, read only
|
|
15
|
+
* when pages have active reviews (`ListReviewedModelsUseCase`).
|
|
16
|
+
*/
|
|
17
|
+
export declare const WbPageReviewReadFilter: import("@webiny/di").Abstraction<IWbPageReviewReadFilter>;
|
|
18
|
+
export declare namespace WbPageReviewReadFilter {
|
|
19
|
+
type Interface = IWbPageReviewReadFilter;
|
|
20
|
+
type Return = Promise<Result<ReviewListReadFilter, ReviewPersistenceError>>;
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/WbPageReviewReadFilter/abstractions.js","sources":["../../../../src/features/target/WbPageReviewReadFilter/abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { ReviewListReadFilter } from \"@webiny/api-workflows/domain/review/types.js\";\nimport type { ReviewPersistenceError } from \"@webiny/api-workflows/domain/review/errors.js\";\n\nexport interface IWbPageReviewReadFilter {\n /**\n * The page review list read filter (Q77) of the current identity. A failed permission or\n * folder permission read is a persistence error (R87).\n */\n build(): Promise<Result<ReviewListReadFilter, ReviewPersistenceError>>;\n}\n\n/**\n * What the Website Builder page list would show the current identity, as a review list filter:\n * pages are readable with `canRead(\"page\")`, own-only when `onlyOwnRecords(\"page\")` (as\n * `ListPagesUseCase` filters by `createdBy`); folders come from `WbPageDeniedFolders`, read only\n * when pages have active reviews (`ListReviewedModelsUseCase`).\n */\nexport const WbPageReviewReadFilter =\n createAbstraction<IWbPageReviewReadFilter>(\"WbPageReviewReadFilter\");\n\nexport namespace WbPageReviewReadFilter {\n export type Interface = IWbPageReviewReadFilter;\n export type Return = Promise<Result<ReviewListReadFilter, ReviewPersistenceError>>;\n}\n"],"names":["WbPageReviewReadFilter","createAbstraction"],"mappings":";AAkBO,MAAMA,yBACTC,kBAA2C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WbPageReviewReadFilter } from "./abstractions.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WbPageReviewReadFilter } from "./abstractions.js";
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { Logger } from "@webiny/api-core/features/logger/index.js";
|
|
3
|
+
import { UpdatePageUseCase } from "@webiny/api-website-builder/features/pages/UpdatePage/index.js";
|
|
4
|
+
import { ReviewTargetEditor } from "@webiny/api-workflows/features/review/ReviewTargetEditor/index.js";
|
|
5
|
+
import type { ReviewTargetContent, ReviewTargetEditorReadParams, ReviewTargetEditorUpdateParams, ReviewTargetEditorUpdateResult } from "@webiny/api-workflows/features/review/ReviewTargetEditor/abstractions.js";
|
|
6
|
+
import { ReviewTargetEditorError } from "@webiny/api-workflows/domain/review/errors.js";
|
|
7
|
+
import { WbPageTargetReader } from "./WbPageTargetReader/index.js";
|
|
8
|
+
import { WbPageAccess } from "./WbPageAccess/index.js";
|
|
9
|
+
/**
|
|
10
|
+
* The `wb.page` editor of the AI step's built-in tools (spec 9.3, R172). `read` returns the whole
|
|
11
|
+
* page (the element tree as a summary); `update` writes `properties.title` and the SEO scalars
|
|
12
|
+
* `properties.seo.{title,description,canonicalUrl,noIndex,noFollow}` only, atomically, as the full
|
|
13
|
+
* merged `properties` through the page update (`properties` only, so the element tree, bindings,
|
|
14
|
+
* metadata and location are never in the write). The page is read as the request identity and
|
|
15
|
+
* `WbPageAccess.canRead` decides whether it is visible; the write goes through
|
|
16
|
+
* `UpdatePageUseCase`, which checks the write permission itself. The save-block bypass is the
|
|
17
|
+
* tool's business (R173): this class neither reads nor sets it. Throws and failed Results become
|
|
18
|
+
* failed Results with a fixed text, the real error is logged (R87).
|
|
19
|
+
*/
|
|
20
|
+
declare class WbPageReviewTargetEditorImpl implements ReviewTargetEditor.Interface {
|
|
21
|
+
private targets;
|
|
22
|
+
private access;
|
|
23
|
+
private updatePage;
|
|
24
|
+
private logger;
|
|
25
|
+
constructor(targets: WbPageTargetReader.Interface, access: WbPageAccess.Interface, updatePage: UpdatePageUseCase.Interface, logger: Logger.Interface);
|
|
26
|
+
canEdit(model: string): boolean;
|
|
27
|
+
read(params: ReviewTargetEditorReadParams): Promise<Result<ReviewTargetContent, ReviewTargetEditorError>>;
|
|
28
|
+
update(params: ReviewTargetEditorUpdateParams): Promise<Result<ReviewTargetEditorUpdateResult, ReviewTargetEditorError>>;
|
|
29
|
+
}
|
|
30
|
+
export declare const WbPageReviewTargetEditor: typeof WbPageReviewTargetEditorImpl & {
|
|
31
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-workflows/features/review/ReviewTargetEditor/abstractions.js").IReviewTargetEditor>;
|
|
32
|
+
};
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { Logger } from "@webiny/api-core/features/logger/index.js";
|
|
3
|
+
import { UpdatePageUseCase } from "@webiny/api-website-builder/features/pages/UpdatePage/index.js";
|
|
4
|
+
import { ReviewTargetEditor } from "@webiny/api-workflows/features/review/ReviewTargetEditor/index.js";
|
|
5
|
+
import { ReviewTargetEditorError } from "@webiny/api-workflows/domain/review/errors.js";
|
|
6
|
+
import { WB_PAGE_NAMESPACE } from "../../constants.js";
|
|
7
|
+
import { WbPageTargetReader } from "./WbPageTargetReader/index.js";
|
|
8
|
+
import { WbPageAccess } from "./WbPageAccess/index.js";
|
|
9
|
+
import { toWbPageEditorFields } from "./toWbPageEditorFields.js";
|
|
10
|
+
import { describeWbPageEditorValue, isWbPageEditorValue } from "./isWbPageEditorValue.js";
|
|
11
|
+
import { toWbPageProperties } from "./toWbPageProperties.js";
|
|
12
|
+
import { hasErrorSource } from "@webiny/api-workflows/domain/hasErrorSource.js";
|
|
13
|
+
class WbPageReviewTargetEditorImpl {
|
|
14
|
+
constructor(targets, access, updatePage, logger){
|
|
15
|
+
this.targets = targets;
|
|
16
|
+
this.access = access;
|
|
17
|
+
this.updatePage = updatePage;
|
|
18
|
+
this.logger = logger;
|
|
19
|
+
}
|
|
20
|
+
canEdit(model) {
|
|
21
|
+
return model === WB_PAGE_NAMESPACE;
|
|
22
|
+
}
|
|
23
|
+
async read(params) {
|
|
24
|
+
try {
|
|
25
|
+
const target = await this.targets.read({
|
|
26
|
+
model: params.model,
|
|
27
|
+
targetRevisionId: params.targetRevisionId
|
|
28
|
+
});
|
|
29
|
+
if (!target || target.page.entryId !== params.targetId || !await this.access.canRead(target)) return Result.fail(new ReviewTargetEditorError("The target was not found."));
|
|
30
|
+
return Result.ok({
|
|
31
|
+
title: target.page.properties.title,
|
|
32
|
+
fields: toWbPageEditorFields(target.page)
|
|
33
|
+
});
|
|
34
|
+
} catch (error) {
|
|
35
|
+
this.logger.error({
|
|
36
|
+
err: error,
|
|
37
|
+
model: params.model,
|
|
38
|
+
targetId: params.targetId
|
|
39
|
+
}, "Could not read the target for the AI editor.");
|
|
40
|
+
return Result.fail(new ReviewTargetEditorError("The target could not be read."));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async update(params) {
|
|
44
|
+
const paths = Object.keys(params.values);
|
|
45
|
+
if (0 === paths.length) return Result.fail(new ReviewTargetEditorError("No fields were given."));
|
|
46
|
+
let properties;
|
|
47
|
+
try {
|
|
48
|
+
const target = await this.targets.read({
|
|
49
|
+
model: params.model,
|
|
50
|
+
targetRevisionId: params.targetRevisionId
|
|
51
|
+
});
|
|
52
|
+
if (!target || target.page.entryId !== params.targetId || !await this.access.canRead(target)) return Result.fail(new ReviewTargetEditorError("The target was not found."));
|
|
53
|
+
const fields = new Map();
|
|
54
|
+
for (const field of toWbPageEditorFields(target.page))fields.set(field.path, field);
|
|
55
|
+
const problems = [];
|
|
56
|
+
for (const path of paths){
|
|
57
|
+
const field = fields.get(path);
|
|
58
|
+
if (field) if (field.writable) {
|
|
59
|
+
if (!isWbPageEditorValue(path, params.values[path])) problems.push(`The field "${path}" expects ${describeWbPageEditorValue(path)}.`);
|
|
60
|
+
} else problems.push(`The field "${path}" is read-only.`);
|
|
61
|
+
else problems.push(`Unknown field "${path}". Use the paths returned by readTarget.`);
|
|
62
|
+
}
|
|
63
|
+
if (problems.length > 0) return Result.fail(new ReviewTargetEditorError(problems.join(" ")));
|
|
64
|
+
properties = toWbPageProperties(target.page.properties, params.values);
|
|
65
|
+
} catch (error) {
|
|
66
|
+
this.logger.error({
|
|
67
|
+
err: error,
|
|
68
|
+
model: params.model,
|
|
69
|
+
targetId: params.targetId
|
|
70
|
+
}, "Could not read the target for the AI editor.");
|
|
71
|
+
return Result.fail(new ReviewTargetEditorError("The target could not be read."));
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const result = await this.updatePage.execute(params.targetRevisionId, {
|
|
75
|
+
properties
|
|
76
|
+
});
|
|
77
|
+
if (result.isFail()) {
|
|
78
|
+
this.logger.error({
|
|
79
|
+
err: hasErrorSource(result.error) ? result.error.source : result.error,
|
|
80
|
+
model: params.model,
|
|
81
|
+
targetId: params.targetId
|
|
82
|
+
}, "Could not update the target from the AI editor.");
|
|
83
|
+
return Result.fail(new ReviewTargetEditorError("The target could not be updated."));
|
|
84
|
+
}
|
|
85
|
+
} catch (error) {
|
|
86
|
+
this.logger.error({
|
|
87
|
+
err: error,
|
|
88
|
+
model: params.model,
|
|
89
|
+
targetId: params.targetId
|
|
90
|
+
}, "Could not update the target from the AI editor.");
|
|
91
|
+
return Result.fail(new ReviewTargetEditorError("The target could not be updated."));
|
|
92
|
+
}
|
|
93
|
+
return Result.ok({
|
|
94
|
+
applied: paths
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const WbPageReviewTargetEditor = ReviewTargetEditor.createImplementation({
|
|
99
|
+
implementation: WbPageReviewTargetEditorImpl,
|
|
100
|
+
dependencies: [
|
|
101
|
+
WbPageTargetReader,
|
|
102
|
+
WbPageAccess,
|
|
103
|
+
UpdatePageUseCase,
|
|
104
|
+
Logger
|
|
105
|
+
]
|
|
106
|
+
});
|
|
107
|
+
export { WbPageReviewTargetEditor };
|
|
108
|
+
|
|
109
|
+
//# sourceMappingURL=WbPageReviewTargetEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/WbPageReviewTargetEditor.js","sources":["../../../src/features/target/WbPageReviewTargetEditor.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { Logger } from \"@webiny/api-core/features/logger/index.js\";\nimport { UpdatePageUseCase } from \"@webiny/api-website-builder/features/pages/UpdatePage/index.js\";\nimport { ReviewTargetEditor } from \"@webiny/api-workflows/features/review/ReviewTargetEditor/index.js\";\nimport type {\n ReviewTargetContent,\n ReviewTargetEditorField,\n ReviewTargetEditorReadParams,\n ReviewTargetEditorUpdateParams,\n ReviewTargetEditorUpdateResult\n} from \"@webiny/api-workflows/features/review/ReviewTargetEditor/abstractions.js\";\nimport { ReviewTargetEditorError } from \"@webiny/api-workflows/domain/review/errors.js\";\nimport { WB_PAGE_NAMESPACE } from \"~/constants.js\";\nimport { WbPageTargetReader } from \"./WbPageTargetReader/index.js\";\nimport { WbPageAccess } from \"./WbPageAccess/index.js\";\nimport { toWbPageEditorFields } from \"./toWbPageEditorFields.js\";\nimport { describeWbPageEditorValue, isWbPageEditorValue } from \"./isWbPageEditorValue.js\";\nimport { toWbPageProperties } from \"./toWbPageProperties.js\";\nimport { hasErrorSource } from \"@webiny/api-workflows/domain/hasErrorSource.js\";\n\n/**\n * The `wb.page` editor of the AI step's built-in tools (spec 9.3, R172). `read` returns the whole\n * page (the element tree as a summary); `update` writes `properties.title` and the SEO scalars\n * `properties.seo.{title,description,canonicalUrl,noIndex,noFollow}` only, atomically, as the full\n * merged `properties` through the page update (`properties` only, so the element tree, bindings,\n * metadata and location are never in the write). The page is read as the request identity and\n * `WbPageAccess.canRead` decides whether it is visible; the write goes through\n * `UpdatePageUseCase`, which checks the write permission itself. The save-block bypass is the\n * tool's business (R173): this class neither reads nor sets it. Throws and failed Results become\n * failed Results with a fixed text, the real error is logged (R87).\n */\nclass WbPageReviewTargetEditorImpl implements ReviewTargetEditor.Interface {\n public constructor(\n private targets: WbPageTargetReader.Interface,\n private access: WbPageAccess.Interface,\n private updatePage: UpdatePageUseCase.Interface,\n private logger: Logger.Interface\n ) {}\n\n public canEdit(model: string): boolean {\n return model === WB_PAGE_NAMESPACE;\n }\n\n public async read(\n params: ReviewTargetEditorReadParams\n ): Promise<Result<ReviewTargetContent, ReviewTargetEditorError>> {\n try {\n const target = await this.targets.read({\n model: params.model,\n targetRevisionId: params.targetRevisionId\n });\n if (\n !target ||\n target.page.entryId !== params.targetId ||\n !(await this.access.canRead(target))\n ) {\n return Result.fail(new ReviewTargetEditorError(\"The target was not found.\"));\n }\n\n // Inside the try: a malformed page makes these throw, and that must be a failed\n // Result, never a rejection (R87).\n return Result.ok({\n title: target.page.properties.title,\n fields: toWbPageEditorFields(target.page)\n });\n } catch (error) {\n this.logger.error(\n { err: error, model: params.model, targetId: params.targetId },\n \"Could not read the target for the AI editor.\"\n );\n return Result.fail(new ReviewTargetEditorError(\"The target could not be read.\"));\n }\n }\n\n public async update(\n params: ReviewTargetEditorUpdateParams\n ): Promise<Result<ReviewTargetEditorUpdateResult, ReviewTargetEditorError>> {\n const paths = Object.keys(params.values);\n if (paths.length === 0) {\n return Result.fail(new ReviewTargetEditorError(\"No fields were given.\"));\n }\n\n let properties: Record<string, unknown>;\n try {\n const target = await this.targets.read({\n model: params.model,\n targetRevisionId: params.targetRevisionId\n });\n if (\n !target ||\n target.page.entryId !== params.targetId ||\n !(await this.access.canRead(target))\n ) {\n return Result.fail(new ReviewTargetEditorError(\"The target was not found.\"));\n }\n\n // A Map, so a key such as \"__proto__\" is just an unknown path.\n const fields = new Map<string, ReviewTargetEditorField>();\n for (const field of toWbPageEditorFields(target.page)) {\n fields.set(field.path, field);\n }\n const problems: string[] = [];\n for (const path of paths) {\n const field = fields.get(path);\n if (!field) {\n problems.push(`Unknown field \"${path}\". Use the paths returned by readTarget.`);\n } else if (!field.writable) {\n problems.push(`The field \"${path}\" is read-only.`);\n } else if (!isWbPageEditorValue(path, params.values[path])) {\n problems.push(\n `The field \"${path}\" expects ${describeWbPageEditorValue(path)}.`\n );\n }\n }\n if (problems.length > 0) {\n return Result.fail(new ReviewTargetEditorError(problems.join(\" \")));\n }\n\n properties = toWbPageProperties(target.page.properties, params.values);\n } catch (error) {\n this.logger.error(\n { err: error, model: params.model, targetId: params.targetId },\n \"Could not read the target for the AI editor.\"\n );\n return Result.fail(new ReviewTargetEditorError(\"The target could not be read.\"));\n }\n\n try {\n const result = await this.updatePage.execute(params.targetRevisionId, { properties });\n if (result.isFail()) {\n // The page use case wraps CMS messages, so its text is never shown to the model.\n this.logger.error(\n {\n err: hasErrorSource(result.error) ? result.error.source : result.error,\n model: params.model,\n targetId: params.targetId\n },\n \"Could not update the target from the AI editor.\"\n );\n return Result.fail(new ReviewTargetEditorError(\"The target could not be updated.\"));\n }\n } catch (error) {\n this.logger.error(\n { err: error, model: params.model, targetId: params.targetId },\n \"Could not update the target from the AI editor.\"\n );\n return Result.fail(new ReviewTargetEditorError(\"The target could not be updated.\"));\n }\n\n return Result.ok({ applied: paths });\n }\n}\n\nexport const WbPageReviewTargetEditor = ReviewTargetEditor.createImplementation({\n implementation: WbPageReviewTargetEditorImpl,\n dependencies: [WbPageTargetReader, WbPageAccess, UpdatePageUseCase, Logger]\n});\n"],"names":["WbPageReviewTargetEditorImpl","targets","access","updatePage","logger","model","WB_PAGE_NAMESPACE","params","target","Result","ReviewTargetEditorError","toWbPageEditorFields","error","paths","Object","properties","fields","Map","field","problems","path","isWbPageEditorValue","describeWbPageEditorValue","toWbPageProperties","result","hasErrorSource","WbPageReviewTargetEditor","ReviewTargetEditor","WbPageTargetReader","WbPageAccess","UpdatePageUseCase","Logger"],"mappings":";;;;;;;;;;;;AA+BA,MAAMA;IACF,YACYC,OAAqC,EACrCC,MAA8B,EAC9BC,UAAuC,EACvCC,MAAwB,CAClC;aAJUH,OAAO,GAAPA;aACAC,MAAM,GAANA;aACAC,UAAU,GAAVA;aACAC,MAAM,GAANA;IACT;IAEI,QAAQC,KAAa,EAAW;QACnC,OAAOA,UAAUC;IACrB;IAEA,MAAa,KACTC,MAAoC,EACyB;QAC7D,IAAI;YACA,MAAMC,SAAS,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBACnC,OAAOD,OAAO,KAAK;gBACnB,kBAAkBA,OAAO,gBAAgB;YAC7C;YACA,IACI,CAACC,UACDA,OAAO,IAAI,CAAC,OAAO,KAAKD,OAAO,QAAQ,IACvC,CAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAACC,SAE5B,OAAOC,OAAO,IAAI,CAAC,IAAIC,wBAAwB;YAKnD,OAAOD,OAAO,EAAE,CAAC;gBACb,OAAOD,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK;gBACnC,QAAQG,qBAAqBH,OAAO,IAAI;YAC5C;QACJ,EAAE,OAAOI,OAAO;YACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CACb;gBAAE,KAAKA;gBAAO,OAAOL,OAAO,KAAK;gBAAE,UAAUA,OAAO,QAAQ;YAAC,GAC7D;YAEJ,OAAOE,OAAO,IAAI,CAAC,IAAIC,wBAAwB;QACnD;IACJ;IAEA,MAAa,OACTH,MAAsC,EACkC;QACxE,MAAMM,QAAQC,OAAO,IAAI,CAACP,OAAO,MAAM;QACvC,IAAIM,AAAiB,MAAjBA,MAAM,MAAM,EACZ,OAAOJ,OAAO,IAAI,CAAC,IAAIC,wBAAwB;QAGnD,IAAIK;QACJ,IAAI;YACA,MAAMP,SAAS,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBACnC,OAAOD,OAAO,KAAK;gBACnB,kBAAkBA,OAAO,gBAAgB;YAC7C;YACA,IACI,CAACC,UACDA,OAAO,IAAI,CAAC,OAAO,KAAKD,OAAO,QAAQ,IACvC,CAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAACC,SAE5B,OAAOC,OAAO,IAAI,CAAC,IAAIC,wBAAwB;YAInD,MAAMM,SAAS,IAAIC;YACnB,KAAK,MAAMC,SAASP,qBAAqBH,OAAO,IAAI,EAChDQ,OAAO,GAAG,CAACE,MAAM,IAAI,EAAEA;YAE3B,MAAMC,WAAqB,EAAE;YAC7B,KAAK,MAAMC,QAAQP,MAAO;gBACtB,MAAMK,QAAQF,OAAO,GAAG,CAACI;gBACzB,IAAKF,OAEE,IAAKA,MAAM,QAAQ,EAEnB;oBAAA,IAAI,CAACG,oBAAoBD,MAAMb,OAAO,MAAM,CAACa,KAAK,GACrDD,SAAS,IAAI,CACT,CAAC,WAAW,EAAEC,KAAK,UAAU,EAAEE,0BAA0BF,MAAM,CAAC,CAAC;gBAEzE,OALID,SAAS,IAAI,CAAC,CAAC,WAAW,EAAEC,KAAK,eAAe,CAAC;qBAFjDD,SAAS,IAAI,CAAC,CAAC,eAAe,EAAEC,KAAK,wCAAwC,CAAC;YAQtF;YACA,IAAID,SAAS,MAAM,GAAG,GAClB,OAAOV,OAAO,IAAI,CAAC,IAAIC,wBAAwBS,SAAS,IAAI,CAAC;YAGjEJ,aAAaQ,mBAAmBf,OAAO,IAAI,CAAC,UAAU,EAAED,OAAO,MAAM;QACzE,EAAE,OAAOK,OAAO;YACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CACb;gBAAE,KAAKA;gBAAO,OAAOL,OAAO,KAAK;gBAAE,UAAUA,OAAO,QAAQ;YAAC,GAC7D;YAEJ,OAAOE,OAAO,IAAI,CAAC,IAAIC,wBAAwB;QACnD;QAEA,IAAI;YACA,MAAMc,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACjB,OAAO,gBAAgB,EAAE;gBAAEQ;YAAW;YACnF,IAAIS,OAAO,MAAM,IAAI;gBAEjB,IAAI,CAAC,MAAM,CAAC,KAAK,CACb;oBACI,KAAKC,eAAeD,OAAO,KAAK,IAAIA,OAAO,KAAK,CAAC,MAAM,GAAGA,OAAO,KAAK;oBACtE,OAAOjB,OAAO,KAAK;oBACnB,UAAUA,OAAO,QAAQ;gBAC7B,GACA;gBAEJ,OAAOE,OAAO,IAAI,CAAC,IAAIC,wBAAwB;YACnD;QACJ,EAAE,OAAOE,OAAO;YACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CACb;gBAAE,KAAKA;gBAAO,OAAOL,OAAO,KAAK;gBAAE,UAAUA,OAAO,QAAQ;YAAC,GAC7D;YAEJ,OAAOE,OAAO,IAAI,CAAC,IAAIC,wBAAwB;QACnD;QAEA,OAAOD,OAAO,EAAE,CAAC;YAAE,SAASI;QAAM;IACtC;AACJ;AAEO,MAAMa,2BAA2BC,mBAAmB,oBAAoB,CAAC;IAC5E,gBAAgB3B;IAChB,cAAc;QAAC4B;QAAoBC;QAAcC;QAAmBC;KAAO;AAC/E"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ReviewTargetFolderChain } from "@webiny/api-workflows/features/review/ReviewTargetFolderChain/index.js";
|
|
2
|
+
import { GetFolderRepository } from "@webiny/api-aco/features/folder/GetFolder/abstractions.js";
|
|
3
|
+
import { GetAncestorsUseCase } from "@webiny/api-aco/features/folder/GetAncestors/index.js";
|
|
4
|
+
/**
|
|
5
|
+
* The folder of a `wb.page` target and its ancestors, nearest first, for the routing rules'
|
|
6
|
+
* folder condition (spec 6, R113, R114). Read through ACO's repository, which applies no
|
|
7
|
+
* folder-level permissions (the folder model is private with `authorization: false`): routing
|
|
8
|
+
* matches the folder tree, not what the requester may see. Read at step reach, so a moved parent
|
|
9
|
+
* counts. A missing folder, a folder of another type and a failed read throw; the engine falls
|
|
10
|
+
* through to the pool (R116).
|
|
11
|
+
*/
|
|
12
|
+
declare class WbPageReviewTargetFolderChainImpl implements ReviewTargetFolderChain.Interface {
|
|
13
|
+
private getFolder;
|
|
14
|
+
private getAncestors;
|
|
15
|
+
constructor(getFolder: GetFolderRepository.Interface, getAncestors: GetAncestorsUseCase.Interface);
|
|
16
|
+
canHandle(model: string): boolean;
|
|
17
|
+
listFolderChainIds(params: ReviewTargetFolderChain.Params): Promise<string[]>;
|
|
18
|
+
}
|
|
19
|
+
export declare const WbPageReviewTargetFolderChain: typeof WbPageReviewTargetFolderChainImpl & {
|
|
20
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-workflows/features/review/ReviewTargetFolderChain/abstractions").IReviewTargetFolderChain>;
|
|
21
|
+
};
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ReviewTargetFolderChain } from "@webiny/api-workflows/features/review/ReviewTargetFolderChain/index.js";
|
|
2
|
+
import { GetFolderRepository } from "@webiny/api-aco/features/folder/GetFolder/abstractions.js";
|
|
3
|
+
import { GetAncestorsUseCase } from "@webiny/api-aco/features/folder/GetAncestors/index.js";
|
|
4
|
+
import { WB_PAGE_FOLDER_TYPE, WB_PAGE_NAMESPACE } from "../../constants.js";
|
|
5
|
+
class WbPageReviewTargetFolderChainImpl {
|
|
6
|
+
constructor(getFolder, getAncestors){
|
|
7
|
+
this.getFolder = getFolder;
|
|
8
|
+
this.getAncestors = getAncestors;
|
|
9
|
+
}
|
|
10
|
+
canHandle(model) {
|
|
11
|
+
return model === WB_PAGE_NAMESPACE;
|
|
12
|
+
}
|
|
13
|
+
async listFolderChainIds(params) {
|
|
14
|
+
if (!params.folderId || params.folderId.includes("#")) throw new Error(`"${params.folderId}" is not a valid folder id.`);
|
|
15
|
+
const folder = await this.getFolder.execute(params.folderId);
|
|
16
|
+
if (folder.isFail()) throw folder.error;
|
|
17
|
+
if (folder.value.type !== WB_PAGE_FOLDER_TYPE) throw new Error(`Folder "${params.folderId}" is not a Website Builder page folder.`);
|
|
18
|
+
const ancestors = await this.getAncestors.execute({
|
|
19
|
+
folder: folder.value
|
|
20
|
+
});
|
|
21
|
+
if (ancestors.isFail()) throw ancestors.error;
|
|
22
|
+
return ancestors.value.map((item)=>item.id);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const WbPageReviewTargetFolderChain = ReviewTargetFolderChain.createImplementation({
|
|
26
|
+
implementation: WbPageReviewTargetFolderChainImpl,
|
|
27
|
+
dependencies: [
|
|
28
|
+
GetFolderRepository,
|
|
29
|
+
GetAncestorsUseCase
|
|
30
|
+
]
|
|
31
|
+
});
|
|
32
|
+
export { WbPageReviewTargetFolderChain };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=WbPageReviewTargetFolderChain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/WbPageReviewTargetFolderChain.js","sources":["../../../src/features/target/WbPageReviewTargetFolderChain.ts"],"sourcesContent":["import { ReviewTargetFolderChain } from \"@webiny/api-workflows/features/review/ReviewTargetFolderChain/index.js\";\nimport { GetFolderRepository } from \"@webiny/api-aco/features/folder/GetFolder/abstractions.js\";\nimport { GetAncestorsUseCase } from \"@webiny/api-aco/features/folder/GetAncestors/index.js\";\nimport { WB_PAGE_FOLDER_TYPE, WB_PAGE_NAMESPACE } from \"~/constants.js\";\n\n/**\n * The folder of a `wb.page` target and its ancestors, nearest first, for the routing rules'\n * folder condition (spec 6, R113, R114). Read through ACO's repository, which applies no\n * folder-level permissions (the folder model is private with `authorization: false`): routing\n * matches the folder tree, not what the requester may see. Read at step reach, so a moved parent\n * counts. A missing folder, a folder of another type and a failed read throw; the engine falls\n * through to the pool (R116).\n */\nclass WbPageReviewTargetFolderChainImpl implements ReviewTargetFolderChain.Interface {\n public constructor(\n private getFolder: GetFolderRepository.Interface,\n private getAncestors: GetAncestorsUseCase.Interface\n ) {}\n\n public canHandle(model: string): boolean {\n return model === WB_PAGE_NAMESPACE;\n }\n\n public async listFolderChainIds(params: ReviewTargetFolderChain.Params): Promise<string[]> {\n // Folder ids are plain entry ids; the repository would read `<id>#<n>` as a revision.\n if (!params.folderId || params.folderId.includes(\"#\")) {\n throw new Error(`\"${params.folderId}\" is not a valid folder id.`);\n }\n\n const folder = await this.getFolder.execute(params.folderId);\n if (folder.isFail()) {\n throw folder.error;\n }\n if (folder.value.type !== WB_PAGE_FOLDER_TYPE) {\n throw new Error(`Folder \"${params.folderId}\" is not a Website Builder page folder.`);\n }\n\n // The folder itself first, then its parents up to the root level.\n const ancestors = await this.getAncestors.execute({ folder: folder.value });\n if (ancestors.isFail()) {\n throw ancestors.error;\n }\n return ancestors.value.map(item => item.id);\n }\n}\n\nexport const WbPageReviewTargetFolderChain = ReviewTargetFolderChain.createImplementation({\n implementation: WbPageReviewTargetFolderChainImpl,\n dependencies: [GetFolderRepository, GetAncestorsUseCase]\n});\n"],"names":["WbPageReviewTargetFolderChainImpl","getFolder","getAncestors","model","WB_PAGE_NAMESPACE","params","Error","folder","WB_PAGE_FOLDER_TYPE","ancestors","item","WbPageReviewTargetFolderChain","ReviewTargetFolderChain","GetFolderRepository","GetAncestorsUseCase"],"mappings":";;;;AAaA,MAAMA;IACF,YACYC,SAAwC,EACxCC,YAA2C,CACrD;aAFUD,SAAS,GAATA;aACAC,YAAY,GAAZA;IACT;IAEI,UAAUC,KAAa,EAAW;QACrC,OAAOA,UAAUC;IACrB;IAEA,MAAa,mBAAmBC,MAAsC,EAAqB;QAEvF,IAAI,CAACA,OAAO,QAAQ,IAAIA,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAC7C,MAAM,IAAIC,MAAM,CAAC,CAAC,EAAED,OAAO,QAAQ,CAAC,2BAA2B,CAAC;QAGpE,MAAME,SAAS,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAACF,OAAO,QAAQ;QAC3D,IAAIE,OAAO,MAAM,IACb,MAAMA,OAAO,KAAK;QAEtB,IAAIA,OAAO,KAAK,CAAC,IAAI,KAAKC,qBACtB,MAAM,IAAIF,MAAM,CAAC,QAAQ,EAAED,OAAO,QAAQ,CAAC,uCAAuC,CAAC;QAIvF,MAAMI,YAAY,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAAE,QAAQF,OAAO,KAAK;QAAC;QACzE,IAAIE,UAAU,MAAM,IAChB,MAAMA,UAAU,KAAK;QAEzB,OAAOA,UAAU,KAAK,CAAC,GAAG,CAACC,CAAAA,OAAQA,KAAK,EAAE;IAC9C;AACJ;AAEO,MAAMC,gCAAgCC,wBAAwB,oBAAoB,CAAC;IACtF,gBAAgBZ;IAChB,cAAc;QAACa;QAAqBC;KAAoB;AAC5D"}
|