@webiny/api-website-builder-workflows 0.0.0-unstable.0156a4c312
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/LICENSE +21 -0
- package/README.md +11 -0
- 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 -0
- package/index.js +1 -0
- package/package.json +50 -0
|
@@ -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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ReviewTargetLink } from "@webiny/api-workflows/features/notifications/ReviewTargetLink/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* The `wb.page` admin link of a review's content (R195, D133). It mirrors the admin route
|
|
4
|
+
* `WebsiteBuilder/Pages/Editor` in `packages/app-website-builder/src/routes.ts`
|
|
5
|
+
* (`/website-builder/pages/editor/:id`), where `:id` is the page revision id. That file lives in a
|
|
6
|
+
* client package the API cannot import, so a route change there must be mirrored here. The
|
|
7
|
+
* revision id carries a `#`, which `encodeURIComponent` turns into `%23`. The path has no host
|
|
8
|
+
* and no tenant: `ReviewTargetLinkService` adds both.
|
|
9
|
+
*/
|
|
10
|
+
declare class WbPageReviewTargetLinkImpl implements ReviewTargetLink.Interface {
|
|
11
|
+
canLink(model: string): boolean;
|
|
12
|
+
getPath(params: ReviewTargetLink.Params): string;
|
|
13
|
+
}
|
|
14
|
+
export declare const WbPageReviewTargetLink: typeof WbPageReviewTargetLinkImpl & {
|
|
15
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-workflows/features/notifications/ReviewTargetLink/abstractions").IReviewTargetLink>;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ReviewTargetLink } from "@webiny/api-workflows/features/notifications/ReviewTargetLink/index.js";
|
|
2
|
+
import { WB_PAGE_NAMESPACE } from "../../constants.js";
|
|
3
|
+
class WbPageReviewTargetLinkImpl {
|
|
4
|
+
canLink(model) {
|
|
5
|
+
return model === WB_PAGE_NAMESPACE;
|
|
6
|
+
}
|
|
7
|
+
getPath(params) {
|
|
8
|
+
return `/website-builder/pages/editor/${encodeURIComponent(params.targetRevisionId)}`;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
const WbPageReviewTargetLink = ReviewTargetLink.createImplementation({
|
|
12
|
+
implementation: WbPageReviewTargetLinkImpl,
|
|
13
|
+
dependencies: []
|
|
14
|
+
});
|
|
15
|
+
export { WbPageReviewTargetLink };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=WbPageReviewTargetLink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/WbPageReviewTargetLink.js","sources":["../../../src/features/target/WbPageReviewTargetLink.ts"],"sourcesContent":["import { ReviewTargetLink } from \"@webiny/api-workflows/features/notifications/ReviewTargetLink/index.js\";\nimport { WB_PAGE_NAMESPACE } from \"~/constants.js\";\n\n/**\n * The `wb.page` admin link of a review's content (R195, D133). It mirrors the admin route\n * `WebsiteBuilder/Pages/Editor` in `packages/app-website-builder/src/routes.ts`\n * (`/website-builder/pages/editor/:id`), where `:id` is the page revision id. That file lives in a\n * client package the API cannot import, so a route change there must be mirrored here. The\n * revision id carries a `#`, which `encodeURIComponent` turns into `%23`. The path has no host\n * and no tenant: `ReviewTargetLinkService` adds both.\n */\nclass WbPageReviewTargetLinkImpl implements ReviewTargetLink.Interface {\n public canLink(model: string): boolean {\n return model === WB_PAGE_NAMESPACE;\n }\n\n public getPath(params: ReviewTargetLink.Params): string {\n return `/website-builder/pages/editor/${encodeURIComponent(params.targetRevisionId)}`;\n }\n}\n\nexport const WbPageReviewTargetLink = ReviewTargetLink.createImplementation({\n implementation: WbPageReviewTargetLinkImpl,\n dependencies: []\n});\n"],"names":["WbPageReviewTargetLinkImpl","model","WB_PAGE_NAMESPACE","params","encodeURIComponent","WbPageReviewTargetLink","ReviewTargetLink"],"mappings":";;AAWA,MAAMA;IACK,QAAQC,KAAa,EAAW;QACnC,OAAOA,UAAUC;IACrB;IAEO,QAAQC,MAA+B,EAAU;QACpD,OAAO,CAAC,8BAA8B,EAAEC,mBAAmBD,OAAO,gBAAgB,GAAG;IACzF;AACJ;AAEO,MAAME,yBAAyBC,iBAAiB,oBAAoB,CAAC;IACxE,gBAAgBN;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ReviewTargetLoader } from "@webiny/api-workflows/features/review/ReviewTargetLoader/index.js";
|
|
2
|
+
import { WbPageTargetReader } from "./WbPageTargetReader/index.js";
|
|
3
|
+
/** Loads `wb.page` targets for `RequestReviewUseCase` (spec 9.3). */
|
|
4
|
+
declare class WbPageReviewTargetLoaderImpl implements ReviewTargetLoader.Interface {
|
|
5
|
+
private targets;
|
|
6
|
+
constructor(targets: WbPageTargetReader.Interface);
|
|
7
|
+
canLoad(model: string): boolean;
|
|
8
|
+
load(params: ReviewTargetLoader.LoadParams): Promise<ReviewTargetLoader.Target | null>;
|
|
9
|
+
}
|
|
10
|
+
export declare const WbPageReviewTargetLoader: typeof WbPageReviewTargetLoaderImpl & {
|
|
11
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-workflows/features/review/ReviewTargetLoader/abstractions.js").IReviewTargetLoader>;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ReviewTargetLoader } from "@webiny/api-workflows/features/review/ReviewTargetLoader/index.js";
|
|
2
|
+
import { WB_PAGE_NAMESPACE } from "../../constants.js";
|
|
3
|
+
import { WbPageTargetReader } from "./WbPageTargetReader/index.js";
|
|
4
|
+
import { toWbPageReviewTarget } from "./toWbPageReviewTarget.js";
|
|
5
|
+
class WbPageReviewTargetLoaderImpl {
|
|
6
|
+
constructor(targets){
|
|
7
|
+
this.targets = targets;
|
|
8
|
+
}
|
|
9
|
+
canLoad(model) {
|
|
10
|
+
return model === WB_PAGE_NAMESPACE;
|
|
11
|
+
}
|
|
12
|
+
async load(params) {
|
|
13
|
+
const target = await this.targets.read({
|
|
14
|
+
model: params.model,
|
|
15
|
+
targetRevisionId: params.targetRevisionId
|
|
16
|
+
});
|
|
17
|
+
if (!target || target.page.entryId !== params.targetId) return null;
|
|
18
|
+
return toWbPageReviewTarget(target);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const WbPageReviewTargetLoader = ReviewTargetLoader.createImplementation({
|
|
22
|
+
implementation: WbPageReviewTargetLoaderImpl,
|
|
23
|
+
dependencies: [
|
|
24
|
+
WbPageTargetReader
|
|
25
|
+
]
|
|
26
|
+
});
|
|
27
|
+
export { WbPageReviewTargetLoader };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=WbPageReviewTargetLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/WbPageReviewTargetLoader.js","sources":["../../../src/features/target/WbPageReviewTargetLoader.ts"],"sourcesContent":["import { ReviewTargetLoader } from \"@webiny/api-workflows/features/review/ReviewTargetLoader/index.js\";\nimport { WB_PAGE_NAMESPACE } from \"~/constants.js\";\nimport { WbPageTargetReader } from \"./WbPageTargetReader/index.js\";\nimport { toWbPageReviewTarget } from \"./toWbPageReviewTarget.js\";\n\n/** Loads `wb.page` targets for `RequestReviewUseCase` (spec 9.3). */\nclass WbPageReviewTargetLoaderImpl implements ReviewTargetLoader.Interface {\n public constructor(private targets: WbPageTargetReader.Interface) {}\n\n public canLoad(model: string): boolean {\n return model === WB_PAGE_NAMESPACE;\n }\n\n public async load(\n params: ReviewTargetLoader.LoadParams\n ): Promise<ReviewTargetLoader.Target | null> {\n const target = await this.targets.read({\n model: params.model,\n targetRevisionId: params.targetRevisionId\n });\n if (!target || target.page.entryId !== params.targetId) {\n return null;\n }\n return toWbPageReviewTarget(target);\n }\n}\n\nexport const WbPageReviewTargetLoader = ReviewTargetLoader.createImplementation({\n implementation: WbPageReviewTargetLoaderImpl,\n dependencies: [WbPageTargetReader]\n});\n"],"names":["WbPageReviewTargetLoaderImpl","targets","model","WB_PAGE_NAMESPACE","params","target","toWbPageReviewTarget","WbPageReviewTargetLoader","ReviewTargetLoader","WbPageTargetReader"],"mappings":";;;;AAMA,MAAMA;IACF,YAA2BC,OAAqC,CAAE;aAAvCA,OAAO,GAAPA;IAAwC;IAE5D,QAAQC,KAAa,EAAW;QACnC,OAAOA,UAAUC;IACrB;IAEA,MAAa,KACTC,MAAqC,EACI;QACzC,MAAMC,SAAS,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACnC,OAAOD,OAAO,KAAK;YACnB,kBAAkBA,OAAO,gBAAgB;QAC7C;QACA,IAAI,CAACC,UAAUA,OAAO,IAAI,CAAC,OAAO,KAAKD,OAAO,QAAQ,EAClD,OAAO;QAEX,OAAOE,qBAAqBD;IAChC;AACJ;AAEO,MAAME,2BAA2BC,mBAAmB,oBAAoB,CAAC;IAC5E,gBAAgBR;IAChB,cAAc;QAACS;KAAmB;AACtC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ReviewTargetReadAccess } from "@webiny/api-workflows/features/review/ReviewTargetReadAccess/index.js";
|
|
2
|
+
import { CandidateReadAccess } from "@webiny/api-workflows/features/identity/CandidateReadAccess/index.js";
|
|
3
|
+
import { CandidateFolderReadRules } from "@webiny/api-headless-cms-workflows/features/target/CandidateFolderReadRules/index.js";
|
|
4
|
+
import { WbPageTargetReader } from "./WbPageTargetReader/index.js";
|
|
5
|
+
import { WbPageAccess } from "./WbPageAccess/index.js";
|
|
6
|
+
/**
|
|
7
|
+
* `filterReadableUsers` for pages (D61, D133, R48): the page and the folder's permission record
|
|
8
|
+
* are read once per call, as the current identity (Q79); only the WB access check runs as each
|
|
9
|
+
* user, through `CandidateReadAccess` (R67). For a folder without a page (R121) only the
|
|
10
|
+
* folder-level check runs as each user.
|
|
11
|
+
*
|
|
12
|
+
* Contract: reach this only as the request identity, never from inside
|
|
13
|
+
* `withoutAuthorization`. The page model is read through `PageModelProvider`, which uses the CMS
|
|
14
|
+
* model cache (filled per tenant after access filtering), so a read without authorization would
|
|
15
|
+
* cache the unfiltered list for every later caller. `CandidateReadAccess` is the only place that
|
|
16
|
+
* changes identity for the check. Any failure, including a throwing target read, leaves the users
|
|
17
|
+
* out (fail closed, R50).
|
|
18
|
+
*/
|
|
19
|
+
declare class WbPageReviewTargetReadAccessImpl implements ReviewTargetReadAccess.Interface {
|
|
20
|
+
private targets;
|
|
21
|
+
private access;
|
|
22
|
+
private candidates;
|
|
23
|
+
private folderRules;
|
|
24
|
+
constructor(targets: WbPageTargetReader.Interface, access: WbPageAccess.Interface, candidates: CandidateReadAccess.Interface, folderRules: CandidateFolderReadRules.Interface);
|
|
25
|
+
canHandle(model: string): boolean;
|
|
26
|
+
filterReadableUsers(params: ReviewTargetReadAccess.UsersParams): Promise<string[]>;
|
|
27
|
+
/** The page revision, or the folder without a page (R121); `null` when nothing is readable. */
|
|
28
|
+
private readSubject;
|
|
29
|
+
}
|
|
30
|
+
export declare const WbPageReviewTargetReadAccess: typeof WbPageReviewTargetReadAccessImpl & {
|
|
31
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-workflows/features/review/ReviewTargetReadAccess/abstractions.js").IReviewTargetReadAccess>;
|
|
32
|
+
};
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { ROOT_FOLDER } from "@webiny/api-website-builder/constants.js";
|
|
2
|
+
import { ReviewTargetReadAccess } from "@webiny/api-workflows/features/review/ReviewTargetReadAccess/index.js";
|
|
3
|
+
import { CandidateReadAccess } from "@webiny/api-workflows/features/identity/CandidateReadAccess/index.js";
|
|
4
|
+
import { CandidateFolderReadRules } from "@webiny/api-headless-cms-workflows/features/target/CandidateFolderReadRules/index.js";
|
|
5
|
+
import { WB_PAGE_NAMESPACE } from "../../constants.js";
|
|
6
|
+
import { WbPageTargetReader } from "./WbPageTargetReader/index.js";
|
|
7
|
+
import { WbPageAccess } from "./WbPageAccess/index.js";
|
|
8
|
+
class WbPageReviewTargetReadAccessImpl {
|
|
9
|
+
constructor(targets, access, candidates, folderRules){
|
|
10
|
+
this.targets = targets;
|
|
11
|
+
this.access = access;
|
|
12
|
+
this.candidates = candidates;
|
|
13
|
+
this.folderRules = folderRules;
|
|
14
|
+
}
|
|
15
|
+
canHandle(model) {
|
|
16
|
+
return model === WB_PAGE_NAMESPACE;
|
|
17
|
+
}
|
|
18
|
+
async filterReadableUsers(params) {
|
|
19
|
+
if (0 === params.users.length || params.model !== WB_PAGE_NAMESPACE) return [];
|
|
20
|
+
let subject;
|
|
21
|
+
try {
|
|
22
|
+
subject = await this.readSubject(params);
|
|
23
|
+
} catch {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
if (!subject) return [];
|
|
27
|
+
const { check, folderId } = subject;
|
|
28
|
+
let folderRule;
|
|
29
|
+
if (folderId && folderId !== ROOT_FOLDER) folderRule = this.folderRules.create({
|
|
30
|
+
folderId,
|
|
31
|
+
users: params.users
|
|
32
|
+
});
|
|
33
|
+
const readable = [];
|
|
34
|
+
for (const user of params.users){
|
|
35
|
+
if (void 0 !== params.limit && readable.length >= params.limit) break;
|
|
36
|
+
const canRead = await this.candidates.canUserRead(user, ()=>check(folderRule));
|
|
37
|
+
if (canRead) readable.push(user.id);
|
|
38
|
+
}
|
|
39
|
+
return readable;
|
|
40
|
+
}
|
|
41
|
+
async readSubject(params) {
|
|
42
|
+
if ("folder" === params.read.type) {
|
|
43
|
+
const { folderId } = params.read;
|
|
44
|
+
return {
|
|
45
|
+
check: (folderRule)=>this.access.canReadInFolder(folderId, folderRule),
|
|
46
|
+
folderId
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const { targetId } = params.read;
|
|
50
|
+
const target = await this.targets.read({
|
|
51
|
+
model: params.model,
|
|
52
|
+
targetRevisionId: params.read.targetRevisionId
|
|
53
|
+
});
|
|
54
|
+
if (!target || target.page.entryId !== targetId) return null;
|
|
55
|
+
return {
|
|
56
|
+
check: (folderRule)=>this.access.canRead(target, folderRule),
|
|
57
|
+
folderId: target.page.location.folderId ?? null
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const WbPageReviewTargetReadAccess = ReviewTargetReadAccess.createImplementation({
|
|
62
|
+
implementation: WbPageReviewTargetReadAccessImpl,
|
|
63
|
+
dependencies: [
|
|
64
|
+
WbPageTargetReader,
|
|
65
|
+
WbPageAccess,
|
|
66
|
+
CandidateReadAccess,
|
|
67
|
+
CandidateFolderReadRules
|
|
68
|
+
]
|
|
69
|
+
});
|
|
70
|
+
export { WbPageReviewTargetReadAccess };
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=WbPageReviewTargetReadAccess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/WbPageReviewTargetReadAccess.js","sources":["../../../src/features/target/WbPageReviewTargetReadAccess.ts"],"sourcesContent":["import { ROOT_FOLDER } from \"@webiny/api-website-builder/constants.js\";\nimport { ReviewTargetReadAccess } from \"@webiny/api-workflows/features/review/ReviewTargetReadAccess/index.js\";\nimport { CandidateReadAccess } from \"@webiny/api-workflows/features/identity/CandidateReadAccess/index.js\";\nimport { CandidateFolderReadRules } from \"@webiny/api-headless-cms-workflows/features/target/CandidateFolderReadRules/index.js\";\nimport type { FolderReadRule } from \"@webiny/api-headless-cms-workflows/features/target/FolderReadRule.js\";\nimport { WB_PAGE_NAMESPACE } from \"~/constants.js\";\nimport { WbPageTargetReader } from \"./WbPageTargetReader/index.js\";\nimport { WbPageAccess } from \"./WbPageAccess/index.js\";\n\n/** What every candidate's check needs, read once per call as the current identity. */\ninterface CandidateReadSubject {\n /** The candidate check, run as the candidate. */\n check: (folderRule: FolderReadRule | undefined) => Promise<boolean>;\n /** The folder a rule is needed for; `null` for the root folder. */\n folderId: string | null;\n}\n\n/**\n * `filterReadableUsers` for pages (D61, D133, R48): the page and the folder's permission record\n * are read once per call, as the current identity (Q79); only the WB access check runs as each\n * user, through `CandidateReadAccess` (R67). For a folder without a page (R121) only the\n * folder-level check runs as each user.\n *\n * Contract: reach this only as the request identity, never from inside\n * `withoutAuthorization`. The page model is read through `PageModelProvider`, which uses the CMS\n * model cache (filled per tenant after access filtering), so a read without authorization would\n * cache the unfiltered list for every later caller. `CandidateReadAccess` is the only place that\n * changes identity for the check. Any failure, including a throwing target read, leaves the users\n * out (fail closed, R50).\n */\nclass WbPageReviewTargetReadAccessImpl implements ReviewTargetReadAccess.Interface {\n public constructor(\n private targets: WbPageTargetReader.Interface,\n private access: WbPageAccess.Interface,\n private candidates: CandidateReadAccess.Interface,\n private folderRules: CandidateFolderReadRules.Interface\n ) {}\n\n public canHandle(model: string): boolean {\n return model === WB_PAGE_NAMESPACE;\n }\n\n public async filterReadableUsers(\n params: ReviewTargetReadAccess.UsersParams\n ): Promise<string[]> {\n if (params.users.length === 0 || params.model !== WB_PAGE_NAMESPACE) {\n return [];\n }\n let subject: CandidateReadSubject | null;\n try {\n subject = await this.readSubject(params);\n } catch {\n return [];\n }\n if (!subject) {\n return [];\n }\n const { check, folderId } = subject;\n let folderRule: FolderReadRule | undefined;\n if (folderId && folderId !== ROOT_FOLDER) {\n folderRule = this.folderRules.create({ folderId, users: params.users });\n }\n\n const readable: string[] = [];\n // One user at a time, as that user: the check reads nothing, but each user's own\n // permissions load once (cached per identity), so a limited call stops early.\n for (const user of params.users) {\n if (params.limit !== undefined && readable.length >= params.limit) {\n break;\n }\n // oxlint-disable-next-line no-await-in-loop -- one user at a time, as that user; a limited call stops early.\n const canRead = await this.candidates.canUserRead(user, () => check(folderRule));\n if (canRead) {\n readable.push(user.id);\n }\n }\n return readable;\n }\n\n /** The page revision, or the folder without a page (R121); `null` when nothing is readable. */\n private async readSubject(\n params: ReviewTargetReadAccess.UsersParams\n ): Promise<CandidateReadSubject | null> {\n if (params.read.type === \"folder\") {\n const { folderId } = params.read;\n return {\n check: folderRule => this.access.canReadInFolder(folderId, folderRule),\n folderId\n };\n }\n const { targetId } = params.read;\n const target = await this.targets.read({\n model: params.model,\n targetRevisionId: params.read.targetRevisionId\n });\n if (!target || target.page.entryId !== targetId) {\n return null;\n }\n return {\n check: folderRule => this.access.canRead(target, folderRule),\n folderId: target.page.location.folderId ?? null\n };\n }\n}\n\nexport const WbPageReviewTargetReadAccess = ReviewTargetReadAccess.createImplementation({\n implementation: WbPageReviewTargetReadAccessImpl,\n dependencies: [WbPageTargetReader, WbPageAccess, CandidateReadAccess, CandidateFolderReadRules]\n});\n"],"names":["WbPageReviewTargetReadAccessImpl","targets","access","candidates","folderRules","model","WB_PAGE_NAMESPACE","params","subject","check","folderId","folderRule","ROOT_FOLDER","readable","user","undefined","canRead","targetId","target","WbPageReviewTargetReadAccess","ReviewTargetReadAccess","WbPageTargetReader","WbPageAccess","CandidateReadAccess","CandidateFolderReadRules"],"mappings":";;;;;;;AA8BA,MAAMA;IACF,YACYC,OAAqC,EACrCC,MAA8B,EAC9BC,UAAyC,EACzCC,WAA+C,CACzD;aAJUH,OAAO,GAAPA;aACAC,MAAM,GAANA;aACAC,UAAU,GAAVA;aACAC,WAAW,GAAXA;IACT;IAEI,UAAUC,KAAa,EAAW;QACrC,OAAOA,UAAUC;IACrB;IAEA,MAAa,oBACTC,MAA0C,EACzB;QACjB,IAAIA,AAAwB,MAAxBA,OAAO,KAAK,CAAC,MAAM,IAAUA,OAAO,KAAK,KAAKD,mBAC9C,OAAO,EAAE;QAEb,IAAIE;QACJ,IAAI;YACAA,UAAU,MAAM,IAAI,CAAC,WAAW,CAACD;QACrC,EAAE,OAAM;YACJ,OAAO,EAAE;QACb;QACA,IAAI,CAACC,SACD,OAAO,EAAE;QAEb,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGF;QAC5B,IAAIG;QACJ,IAAID,YAAYA,aAAaE,aACzBD,aAAa,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAAED;YAAU,OAAOH,OAAO,KAAK;QAAC;QAGzE,MAAMM,WAAqB,EAAE;QAG7B,KAAK,MAAMC,QAAQP,OAAO,KAAK,CAAE;YAC7B,IAAIA,AAAiBQ,WAAjBR,OAAO,KAAK,IAAkBM,SAAS,MAAM,IAAIN,OAAO,KAAK,EAC7D;YAGJ,MAAMS,UAAU,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAACF,MAAM,IAAML,MAAME;YACpE,IAAIK,SACAH,SAAS,IAAI,CAACC,KAAK,EAAE;QAE7B;QACA,OAAOD;IACX;IAGA,MAAc,YACVN,MAA0C,EACN;QACpC,IAAIA,AAAqB,aAArBA,OAAO,IAAI,CAAC,IAAI,EAAe;YAC/B,MAAM,EAAEG,QAAQ,EAAE,GAAGH,OAAO,IAAI;YAChC,OAAO;gBACH,OAAOI,CAAAA,aAAc,IAAI,CAAC,MAAM,CAAC,eAAe,CAACD,UAAUC;gBAC3DD;YACJ;QACJ;QACA,MAAM,EAAEO,QAAQ,EAAE,GAAGV,OAAO,IAAI;QAChC,MAAMW,SAAS,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACnC,OAAOX,OAAO,KAAK;YACnB,kBAAkBA,OAAO,IAAI,CAAC,gBAAgB;QAClD;QACA,IAAI,CAACW,UAAUA,OAAO,IAAI,CAAC,OAAO,KAAKD,UACnC,OAAO;QAEX,OAAO;YACH,OAAON,CAAAA,aAAc,IAAI,CAAC,MAAM,CAAC,OAAO,CAACO,QAAQP;YACjD,UAAUO,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI;QAC/C;IACJ;AACJ;AAEO,MAAMC,+BAA+BC,uBAAuB,oBAAoB,CAAC;IACpF,gBAAgBpB;IAChB,cAAc;QAACqB;QAAoBC;QAAcC;QAAqBC;KAAyB;AACnG"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
2
|
+
import { UpdateEntrySystemUseCase } from "@webiny/api-headless-cms/features/contentEntry/UpdateEntrySystem/index.js";
|
|
3
|
+
import { PageModelProvider } from "@webiny/api-website-builder/domain/page/abstractions.js";
|
|
4
|
+
import { ReviewTargetSync } from "@webiny/api-workflows/features/review/ReviewTargetSync/index.js";
|
|
5
|
+
/**
|
|
6
|
+
* Writes `system.workflow` on the page revision (spec 4.5, D52, R63). The page model is read as the
|
|
7
|
+
* current identity (A19); only the system write runs without authorization, so a reviewer with
|
|
8
|
+
* read access can move the review on. Pages are CMS entries, so this is the same
|
|
9
|
+
* `UpdateEntrySystemUseCase` the CMS adapter uses; it does not publish `EntryBeforeUpdate` (D62).
|
|
10
|
+
* Any throw becomes a failed result, so the review stays saved (R16).
|
|
11
|
+
*/
|
|
12
|
+
declare class WbPageReviewTargetSyncImpl implements ReviewTargetSync.Interface {
|
|
13
|
+
private identityContext;
|
|
14
|
+
private pageModelProvider;
|
|
15
|
+
private updateEntrySystem;
|
|
16
|
+
constructor(identityContext: IdentityContext.Interface, pageModelProvider: PageModelProvider.Interface, updateEntrySystem: UpdateEntrySystemUseCase.Interface);
|
|
17
|
+
canSync(model: string): boolean;
|
|
18
|
+
sync(params: ReviewTargetSync.Params): ReviewTargetSync.Return;
|
|
19
|
+
}
|
|
20
|
+
export declare const WbPageReviewTargetSync: typeof WbPageReviewTargetSyncImpl & {
|
|
21
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-workflows/features/review/ReviewTargetSync/abstractions").IReviewTargetSync>;
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
3
|
+
import { UpdateEntrySystemUseCase } from "@webiny/api-headless-cms/features/contentEntry/UpdateEntrySystem/index.js";
|
|
4
|
+
import { PageModelProvider } from "@webiny/api-website-builder/domain/page/abstractions.js";
|
|
5
|
+
import { ReviewTargetSync } from "@webiny/api-workflows/features/review/ReviewTargetSync/index.js";
|
|
6
|
+
import { WB_PAGE_NAMESPACE } from "../../constants.js";
|
|
7
|
+
class WbPageReviewTargetSyncImpl {
|
|
8
|
+
constructor(identityContext, pageModelProvider, updateEntrySystem){
|
|
9
|
+
this.identityContext = identityContext;
|
|
10
|
+
this.pageModelProvider = pageModelProvider;
|
|
11
|
+
this.updateEntrySystem = updateEntrySystem;
|
|
12
|
+
}
|
|
13
|
+
canSync(model) {
|
|
14
|
+
return model === WB_PAGE_NAMESPACE;
|
|
15
|
+
}
|
|
16
|
+
async sync(params) {
|
|
17
|
+
try {
|
|
18
|
+
const model = await this.pageModelProvider.get();
|
|
19
|
+
const updated = await this.identityContext.withoutAuthorization(()=>this.updateEntrySystem.execute(model, params.review.targetRevisionId, {
|
|
20
|
+
workflow: params.systemWorkflow
|
|
21
|
+
}));
|
|
22
|
+
if (updated.isFail()) return Result.fail(updated.error);
|
|
23
|
+
return Result.ok();
|
|
24
|
+
} catch (error) {
|
|
25
|
+
return Result.fail(error instanceof Error ? error : new Error(String(error)));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const WbPageReviewTargetSync = ReviewTargetSync.createImplementation({
|
|
30
|
+
implementation: WbPageReviewTargetSyncImpl,
|
|
31
|
+
dependencies: [
|
|
32
|
+
IdentityContext,
|
|
33
|
+
PageModelProvider,
|
|
34
|
+
UpdateEntrySystemUseCase
|
|
35
|
+
]
|
|
36
|
+
});
|
|
37
|
+
export { WbPageReviewTargetSync };
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=WbPageReviewTargetSync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/WbPageReviewTargetSync.js","sources":["../../../src/features/target/WbPageReviewTargetSync.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { UpdateEntrySystemUseCase } from \"@webiny/api-headless-cms/features/contentEntry/UpdateEntrySystem/index.js\";\nimport { PageModelProvider } from \"@webiny/api-website-builder/domain/page/abstractions.js\";\nimport { ReviewTargetSync } from \"@webiny/api-workflows/features/review/ReviewTargetSync/index.js\";\nimport { WB_PAGE_NAMESPACE } from \"~/constants.js\";\n\n/**\n * Writes `system.workflow` on the page revision (spec 4.5, D52, R63). The page model is read as the\n * current identity (A19); only the system write runs without authorization, so a reviewer with\n * read access can move the review on. Pages are CMS entries, so this is the same\n * `UpdateEntrySystemUseCase` the CMS adapter uses; it does not publish `EntryBeforeUpdate` (D62).\n * Any throw becomes a failed result, so the review stays saved (R16).\n */\nclass WbPageReviewTargetSyncImpl implements ReviewTargetSync.Interface {\n public constructor(\n private identityContext: IdentityContext.Interface,\n private pageModelProvider: PageModelProvider.Interface,\n private updateEntrySystem: UpdateEntrySystemUseCase.Interface\n ) {}\n\n public canSync(model: string): boolean {\n return model === WB_PAGE_NAMESPACE;\n }\n\n public async sync(params: ReviewTargetSync.Params): ReviewTargetSync.Return {\n try {\n const model = await this.pageModelProvider.get();\n const updated = await this.identityContext.withoutAuthorization(() => {\n return this.updateEntrySystem.execute(model, params.review.targetRevisionId, {\n workflow: params.systemWorkflow\n });\n });\n if (updated.isFail()) {\n return Result.fail(updated.error);\n }\n return Result.ok();\n } catch (error) {\n return Result.fail(error instanceof Error ? error : new Error(String(error)));\n }\n }\n}\n\nexport const WbPageReviewTargetSync = ReviewTargetSync.createImplementation({\n implementation: WbPageReviewTargetSyncImpl,\n dependencies: [IdentityContext, PageModelProvider, UpdateEntrySystemUseCase]\n});\n"],"names":["WbPageReviewTargetSyncImpl","identityContext","pageModelProvider","updateEntrySystem","model","WB_PAGE_NAMESPACE","params","updated","Result","error","Error","String","WbPageReviewTargetSync","ReviewTargetSync","IdentityContext","PageModelProvider","UpdateEntrySystemUseCase"],"mappings":";;;;;;AAcA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,iBAA8C,EAC9CC,iBAAqD,CAC/D;aAHUF,eAAe,GAAfA;aACAC,iBAAiB,GAAjBA;aACAC,iBAAiB,GAAjBA;IACT;IAEI,QAAQC,KAAa,EAAW;QACnC,OAAOA,UAAUC;IACrB;IAEA,MAAa,KAAKC,MAA+B,EAA2B;QACxE,IAAI;YACA,MAAMF,QAAQ,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG;YAC9C,MAAMG,UAAU,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,IACrD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAACH,OAAOE,OAAO,MAAM,CAAC,gBAAgB,EAAE;oBACzE,UAAUA,OAAO,cAAc;gBACnC;YAEJ,IAAIC,QAAQ,MAAM,IACd,OAAOC,OAAO,IAAI,CAACD,QAAQ,KAAK;YAEpC,OAAOC,OAAO,EAAE;QACpB,EAAE,OAAOC,OAAO;YACZ,OAAOD,OAAO,IAAI,CAACC,iBAAiBC,QAAQD,QAAQ,IAAIC,MAAMC,OAAOF;QACzE;IACJ;AACJ;AAEO,MAAMG,yBAAyBC,iBAAiB,oBAAoB,CAAC;IACxE,gBAAgBb;IAChB,cAAc;QAACc;QAAiBC;QAAmBC;KAAyB;AAChF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { GetRevisionByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetRevisionById/index.js";
|
|
2
|
+
import { GetEntriesByIdsUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntriesByIds/index.js";
|
|
3
|
+
import { PageModelProvider } from "@webiny/api-website-builder/domain/page/abstractions.js";
|
|
4
|
+
import { WbPageTargetReader as Abstraction } from "./abstractions.js";
|
|
5
|
+
/**
|
|
6
|
+
* The page model is private (`authorization: false`), so `PageModelProvider` reads it for any
|
|
7
|
+
* identity as the current one; nothing reads models without authorization (A19).
|
|
8
|
+
*/
|
|
9
|
+
declare class WbPageTargetReaderImpl implements Abstraction.Interface {
|
|
10
|
+
private pageModelProvider;
|
|
11
|
+
private getRevisionById;
|
|
12
|
+
private getEntriesByIds;
|
|
13
|
+
constructor(pageModelProvider: PageModelProvider.Interface, getRevisionById: GetRevisionByIdUseCase.Interface, getEntriesByIds: GetEntriesByIdsUseCase.Interface);
|
|
14
|
+
read(params: Abstraction.Params): Promise<Abstraction.Target | null>;
|
|
15
|
+
readMany(params: Abstraction.ManyParams): Promise<Abstraction.Target[]>;
|
|
16
|
+
}
|
|
17
|
+
export declare const WbPageTargetReader: typeof WbPageTargetReaderImpl & {
|
|
18
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IWbPageTargetReader>;
|
|
19
|
+
};
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { GetRevisionByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetRevisionById/index.js";
|
|
2
|
+
import { GetEntriesByIdsUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntriesByIds/index.js";
|
|
3
|
+
import { PageModelProvider } from "@webiny/api-website-builder/domain/page/abstractions.js";
|
|
4
|
+
import { EntryToPageMapper } from "@webiny/api-website-builder/domain/page/EntryToPageMapper.js";
|
|
5
|
+
import { WB_PAGE_NAMESPACE } from "../../../constants.js";
|
|
6
|
+
import { WbPageTargetReader } from "./abstractions.js";
|
|
7
|
+
const ENTRY_NOT_FOUND = "Cms/Entry/NotFound";
|
|
8
|
+
class WbPageTargetReaderImpl {
|
|
9
|
+
constructor(pageModelProvider, getRevisionById, getEntriesByIds){
|
|
10
|
+
this.pageModelProvider = pageModelProvider;
|
|
11
|
+
this.getRevisionById = getRevisionById;
|
|
12
|
+
this.getEntriesByIds = getEntriesByIds;
|
|
13
|
+
}
|
|
14
|
+
async read(params) {
|
|
15
|
+
if (params.model !== WB_PAGE_NAMESPACE) return null;
|
|
16
|
+
const model = await this.pageModelProvider.get();
|
|
17
|
+
const entry = await this.getRevisionById.execute(model, params.targetRevisionId);
|
|
18
|
+
if (entry.isFail()) {
|
|
19
|
+
if (entry.error.code === ENTRY_NOT_FOUND) return null;
|
|
20
|
+
throw entry.error;
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
model,
|
|
24
|
+
page: EntryToPageMapper.toPage(entry.value)
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
async readMany(params) {
|
|
28
|
+
if (params.model !== WB_PAGE_NAMESPACE || 0 === params.targetRevisionIds.length) return [];
|
|
29
|
+
const model = await this.pageModelProvider.get();
|
|
30
|
+
const revisionIds = [
|
|
31
|
+
...new Set(params.targetRevisionIds)
|
|
32
|
+
];
|
|
33
|
+
const entries = await this.getEntriesByIds.execute(model, revisionIds);
|
|
34
|
+
if (entries.isFail()) throw entries.error;
|
|
35
|
+
return entries.value.map((entry)=>({
|
|
36
|
+
model,
|
|
37
|
+
page: EntryToPageMapper.toPage(entry)
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const WbPageTargetReader_WbPageTargetReader = WbPageTargetReader.createImplementation({
|
|
42
|
+
implementation: WbPageTargetReaderImpl,
|
|
43
|
+
dependencies: [
|
|
44
|
+
PageModelProvider,
|
|
45
|
+
GetRevisionByIdUseCase,
|
|
46
|
+
GetEntriesByIdsUseCase
|
|
47
|
+
]
|
|
48
|
+
});
|
|
49
|
+
export { WbPageTargetReader_WbPageTargetReader as WbPageTargetReader };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=WbPageTargetReader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/WbPageTargetReader/WbPageTargetReader.js","sources":["../../../../src/features/target/WbPageTargetReader/WbPageTargetReader.ts"],"sourcesContent":["import { GetRevisionByIdUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetRevisionById/index.js\";\nimport { GetEntriesByIdsUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetEntriesByIds/index.js\";\nimport { PageModelProvider } from \"@webiny/api-website-builder/domain/page/abstractions.js\";\nimport { EntryToPageMapper } from \"@webiny/api-website-builder/domain/page/EntryToPageMapper.js\";\nimport { WB_PAGE_NAMESPACE } from \"~/constants.js\";\nimport { WbPageTargetReader as Abstraction } from \"./abstractions.js\";\n\nconst ENTRY_NOT_FOUND = \"Cms/Entry/NotFound\";\n\n/**\n * The page model is private (`authorization: false`), so `PageModelProvider` reads it for any\n * identity as the current one; nothing reads models without authorization (A19).\n */\nclass WbPageTargetReaderImpl implements Abstraction.Interface {\n public constructor(\n private pageModelProvider: PageModelProvider.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private getEntriesByIds: GetEntriesByIdsUseCase.Interface\n ) {}\n\n public async read(params: Abstraction.Params): Promise<Abstraction.Target | null> {\n if (params.model !== WB_PAGE_NAMESPACE) {\n return null;\n }\n\n const model = await this.pageModelProvider.get();\n const entry = await this.getRevisionById.execute(model, params.targetRevisionId);\n if (entry.isFail()) {\n if (entry.error.code === ENTRY_NOT_FOUND) {\n return null;\n }\n throw entry.error;\n }\n\n return { model, page: EntryToPageMapper.toPage(entry.value) };\n }\n\n public async readMany(params: Abstraction.ManyParams): Promise<Abstraction.Target[]> {\n if (params.model !== WB_PAGE_NAMESPACE || params.targetRevisionIds.length === 0) {\n return [];\n }\n\n const model = await this.pageModelProvider.get();\n // One batch read for every revision (Q79); trashed revisions are left out.\n const revisionIds = [...new Set(params.targetRevisionIds)];\n const entries = await this.getEntriesByIds.execute(model, revisionIds);\n if (entries.isFail()) {\n throw entries.error;\n }\n\n return entries.value.map(entry => ({ model, page: EntryToPageMapper.toPage(entry) }));\n }\n}\n\nexport const WbPageTargetReader = Abstraction.createImplementation({\n implementation: WbPageTargetReaderImpl,\n dependencies: [PageModelProvider, GetRevisionByIdUseCase, GetEntriesByIdsUseCase]\n});\n"],"names":["ENTRY_NOT_FOUND","WbPageTargetReaderImpl","pageModelProvider","getRevisionById","getEntriesByIds","params","WB_PAGE_NAMESPACE","model","entry","EntryToPageMapper","revisionIds","Set","entries","WbPageTargetReader","Abstraction","PageModelProvider","GetRevisionByIdUseCase","GetEntriesByIdsUseCase"],"mappings":";;;;;;AAOA,MAAMA,kBAAkB;AAMxB,MAAMC;IACF,YACYC,iBAA8C,EAC9CC,eAAiD,EACjDC,eAAiD,CAC3D;aAHUF,iBAAiB,GAAjBA;aACAC,eAAe,GAAfA;aACAC,eAAe,GAAfA;IACT;IAEH,MAAa,KAAKC,MAA0B,EAAsC;QAC9E,IAAIA,OAAO,KAAK,KAAKC,mBACjB,OAAO;QAGX,MAAMC,QAAQ,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG;QAC9C,MAAMC,QAAQ,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAACD,OAAOF,OAAO,gBAAgB;QAC/E,IAAIG,MAAM,MAAM,IAAI;YAChB,IAAIA,MAAM,KAAK,CAAC,IAAI,KAAKR,iBACrB,OAAO;YAEX,MAAMQ,MAAM,KAAK;QACrB;QAEA,OAAO;YAAED;YAAO,MAAME,kBAAkB,MAAM,CAACD,MAAM,KAAK;QAAE;IAChE;IAEA,MAAa,SAASH,MAA8B,EAAiC;QACjF,IAAIA,OAAO,KAAK,KAAKC,qBAAqBD,AAAoC,MAApCA,OAAO,iBAAiB,CAAC,MAAM,EACrE,OAAO,EAAE;QAGb,MAAME,QAAQ,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG;QAE9C,MAAMG,cAAc;eAAI,IAAIC,IAAIN,OAAO,iBAAiB;SAAE;QAC1D,MAAMO,UAAU,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAACL,OAAOG;QAC1D,IAAIE,QAAQ,MAAM,IACd,MAAMA,QAAQ,KAAK;QAGvB,OAAOA,QAAQ,KAAK,CAAC,GAAG,CAACJ,CAAAA,QAAU;gBAAED;gBAAO,MAAME,kBAAkB,MAAM,CAACD;YAAO;IACtF;AACJ;AAEO,MAAMK,wCAAqBC,mBAAAA,oBAAgC,CAAC;IAC/D,gBAAgBb;IAChB,cAAc;QAACc;QAAmBC;QAAwBC;KAAuB;AACrF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { CmsModel } from "@webiny/api-headless-cms/types/index.js";
|
|
2
|
+
import type { WbPage } from "@webiny/api-website-builder/domain/page/abstractions.js";
|
|
3
|
+
export interface WbPageTargetReadParams {
|
|
4
|
+
/** Namespace id; only `wb.page` has targets here. */
|
|
5
|
+
model: string;
|
|
6
|
+
targetRevisionId: string;
|
|
7
|
+
}
|
|
8
|
+
export interface WbPageTargetsReadParams {
|
|
9
|
+
/** Namespace id; only `wb.page` has targets here. */
|
|
10
|
+
model: string;
|
|
11
|
+
targetRevisionIds: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface WbPageTarget {
|
|
14
|
+
/** The CMS page model, for `UpdateEntrySystemUseCase`. */
|
|
15
|
+
model: CmsModel;
|
|
16
|
+
page: WbPage;
|
|
17
|
+
}
|
|
18
|
+
export interface IWbPageTargetReader {
|
|
19
|
+
/**
|
|
20
|
+
* Reads the page revision. `null` for another namespace or a missing revision; other failures
|
|
21
|
+
* are thrown. No access check: callers decide with `WbPageAccess`.
|
|
22
|
+
*/
|
|
23
|
+
read(params: WbPageTargetReadParams): Promise<WbPageTarget | null>;
|
|
24
|
+
/**
|
|
25
|
+
* Reads many page revisions in one batch read, in no particular order. A missing (or trashed)
|
|
26
|
+
* revision is left out; `[]` for another namespace. Other failures are thrown. No access check.
|
|
27
|
+
*/
|
|
28
|
+
readMany(params: WbPageTargetsReadParams): Promise<WbPageTarget[]>;
|
|
29
|
+
}
|
|
30
|
+
/** Loads a page revision for the `wb.page` adapter and wrappers (R47). */
|
|
31
|
+
export declare const WbPageTargetReader: import("@webiny/di").Abstraction<IWbPageTargetReader>;
|
|
32
|
+
export declare namespace WbPageTargetReader {
|
|
33
|
+
type Interface = IWbPageTargetReader;
|
|
34
|
+
type Params = WbPageTargetReadParams;
|
|
35
|
+
type ManyParams = WbPageTargetsReadParams;
|
|
36
|
+
type Target = WbPageTarget;
|
|
37
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/WbPageTargetReader/abstractions.js","sources":["../../../../src/features/target/WbPageTargetReader/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { WbPage } from \"@webiny/api-website-builder/domain/page/abstractions.js\";\n\nexport interface WbPageTargetReadParams {\n /** Namespace id; only `wb.page` has targets here. */\n model: string;\n targetRevisionId: string;\n}\n\nexport interface WbPageTargetsReadParams {\n /** Namespace id; only `wb.page` has targets here. */\n model: string;\n targetRevisionIds: string[];\n}\n\nexport interface WbPageTarget {\n /** The CMS page model, for `UpdateEntrySystemUseCase`. */\n model: CmsModel;\n page: WbPage;\n}\n\nexport interface IWbPageTargetReader {\n /**\n * Reads the page revision. `null` for another namespace or a missing revision; other failures\n * are thrown. No access check: callers decide with `WbPageAccess`.\n */\n read(params: WbPageTargetReadParams): Promise<WbPageTarget | null>;\n /**\n * Reads many page revisions in one batch read, in no particular order. A missing (or trashed)\n * revision is left out; `[]` for another namespace. Other failures are thrown. No access check.\n */\n readMany(params: WbPageTargetsReadParams): Promise<WbPageTarget[]>;\n}\n\n/** Loads a page revision for the `wb.page` adapter and wrappers (R47). */\nexport const WbPageTargetReader = createAbstraction<IWbPageTargetReader>(\"WbPageTargetReader\");\n\nexport namespace WbPageTargetReader {\n export type Interface = IWbPageTargetReader;\n export type Params = WbPageTargetReadParams;\n export type ManyParams = WbPageTargetsReadParams;\n export type Target = WbPageTarget;\n}\n"],"names":["WbPageTargetReader","createAbstraction"],"mappings":";AAoCO,MAAMA,qBAAqBC,kBAAuC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WbPageTargetReader } from "./abstractions.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WbPageTargetReader } from "./abstractions.js";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { WorkflowModelParser } from "@webiny/api-workflows/features/model/WorkflowModelParser/index.js";
|
|
2
|
+
/** The `wb.page` workflow model: the `wb` app and the page model's id (D15, D137, R113). */
|
|
3
|
+
declare class WbWorkflowModelParserImpl implements WorkflowModelParser.Interface {
|
|
4
|
+
parse(model: string): WorkflowModelParser.Parsed | null;
|
|
5
|
+
}
|
|
6
|
+
export declare const WbWorkflowModelParser: typeof WbWorkflowModelParserImpl & {
|
|
7
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-workflows/features/model/WorkflowModelParser/abstractions").IWorkflowModelParser>;
|
|
8
|
+
};
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { WorkflowModelParser } from "@webiny/api-workflows/features/model/WorkflowModelParser/index.js";
|
|
2
|
+
import { PAGE_MODEL_ID } from "@webiny/api-website-builder/domain/page/page.model.js";
|
|
3
|
+
import { WB_PAGE_NAMESPACE } from "../../constants.js";
|
|
4
|
+
class WbWorkflowModelParserImpl {
|
|
5
|
+
parse(model) {
|
|
6
|
+
return model === WB_PAGE_NAMESPACE ? {
|
|
7
|
+
app: "wb",
|
|
8
|
+
modelId: PAGE_MODEL_ID
|
|
9
|
+
} : null;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const WbWorkflowModelParser = WorkflowModelParser.createImplementation({
|
|
13
|
+
implementation: WbWorkflowModelParserImpl,
|
|
14
|
+
dependencies: []
|
|
15
|
+
});
|
|
16
|
+
export { WbWorkflowModelParser };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=WbWorkflowModelParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/WbWorkflowModelParser.js","sources":["../../../src/features/target/WbWorkflowModelParser.ts"],"sourcesContent":["import { WorkflowModelParser } from \"@webiny/api-workflows/features/model/WorkflowModelParser/index.js\";\nimport { PAGE_MODEL_ID } from \"@webiny/api-website-builder/domain/page/page.model.js\";\nimport { WB_PAGE_NAMESPACE } from \"~/constants.js\";\n\n/** The `wb.page` workflow model: the `wb` app and the page model's id (D15, D137, R113). */\nclass WbWorkflowModelParserImpl implements WorkflowModelParser.Interface {\n public parse(model: string): WorkflowModelParser.Parsed | null {\n return model === WB_PAGE_NAMESPACE ? { app: \"wb\", modelId: PAGE_MODEL_ID } : null;\n }\n}\n\nexport const WbWorkflowModelParser = WorkflowModelParser.createImplementation({\n implementation: WbWorkflowModelParserImpl,\n dependencies: []\n});\n"],"names":["WbWorkflowModelParserImpl","model","WB_PAGE_NAMESPACE","PAGE_MODEL_ID","WbWorkflowModelParser","WorkflowModelParser"],"mappings":";;;AAKA,MAAMA;IACK,MAAMC,KAAa,EAAqC;QAC3D,OAAOA,UAAUC,oBAAoB;YAAE,KAAK;YAAM,SAASC;QAAc,IAAI;IACjF;AACJ;AAEO,MAAMC,wBAAwBC,oBAAoB,oBAAoB,CAAC;IAC1E,gBAAgBL;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { WbPageReviewNamespace } from "./WbPageReviewNamespace.js";
|
|
3
|
+
import { WbPageTargetReader } from "./WbPageTargetReader/WbPageTargetReader.js";
|
|
4
|
+
import { WbPageAccess } from "./WbPageAccess/WbPageAccess.js";
|
|
5
|
+
import { WbPageFolderExistsService } from "./WbPageFolderExistsService/WbPageFolderExistsService.js";
|
|
6
|
+
import { WbPageDeniedFolders } from "./WbPageDeniedFolders/WbPageDeniedFolders.js";
|
|
7
|
+
import { WbPageReviewReadFilter } from "./WbPageReviewReadFilter/WbPageReviewReadFilter.js";
|
|
8
|
+
import { WbPageReviewTargetLoader } from "./WbPageReviewTargetLoader.js";
|
|
9
|
+
import { WbPageReviewTargetSync } from "./WbPageReviewTargetSync.js";
|
|
10
|
+
import { WbPageReviewTargetReadAccess } from "./WbPageReviewTargetReadAccess.js";
|
|
11
|
+
import { WbPageReviewTargetFolderChain } from "./WbPageReviewTargetFolderChain.js";
|
|
12
|
+
import { WbPageReviewTargetEditor } from "./WbPageReviewTargetEditor.js";
|
|
13
|
+
import { WbPageReviewTargetLink } from "./WbPageReviewTargetLink.js";
|
|
14
|
+
import { WbWorkflowModelParser } from "./WbWorkflowModelParser.js";
|
|
15
|
+
const WbTargetFeature = createFeature({
|
|
16
|
+
name: "WebsiteBuilderWorkflows/Target",
|
|
17
|
+
register (container) {
|
|
18
|
+
container.register(WbPageReviewNamespace);
|
|
19
|
+
container.register(WbPageTargetReader);
|
|
20
|
+
container.register(WbPageAccess);
|
|
21
|
+
container.register(WbPageFolderExistsService);
|
|
22
|
+
container.register(WbPageDeniedFolders).inContainerScope();
|
|
23
|
+
container.register(WbPageReviewReadFilter);
|
|
24
|
+
container.register(WbPageReviewTargetLoader);
|
|
25
|
+
container.register(WbPageReviewTargetSync);
|
|
26
|
+
container.register(WbPageReviewTargetReadAccess);
|
|
27
|
+
container.register(WbPageReviewTargetFolderChain);
|
|
28
|
+
container.register(WbWorkflowModelParser);
|
|
29
|
+
container.register(WbPageReviewTargetEditor);
|
|
30
|
+
container.register(WbPageReviewTargetLink);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
export { WbTargetFeature };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/feature.js","sources":["../../../src/features/target/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { WbPageReviewNamespace } from \"./WbPageReviewNamespace.js\";\nimport { WbPageTargetReader } from \"./WbPageTargetReader/WbPageTargetReader.js\";\nimport { WbPageAccess } from \"./WbPageAccess/WbPageAccess.js\";\nimport { WbPageFolderExistsService } from \"./WbPageFolderExistsService/WbPageFolderExistsService.js\";\nimport { WbPageDeniedFolders } from \"./WbPageDeniedFolders/WbPageDeniedFolders.js\";\nimport { WbPageReviewReadFilter } from \"./WbPageReviewReadFilter/WbPageReviewReadFilter.js\";\nimport { WbPageReviewTargetLoader } from \"./WbPageReviewTargetLoader.js\";\nimport { WbPageReviewTargetSync } from \"./WbPageReviewTargetSync.js\";\nimport { WbPageReviewTargetReadAccess } from \"./WbPageReviewTargetReadAccess.js\";\nimport { WbPageReviewTargetFolderChain } from \"./WbPageReviewTargetFolderChain.js\";\nimport { WbPageReviewTargetEditor } from \"./WbPageReviewTargetEditor.js\";\nimport { WbPageReviewTargetLink } from \"./WbPageReviewTargetLink.js\";\nimport { WbWorkflowModelParser } from \"./WbWorkflowModelParser.js\";\n\n/** The `wb.page` target adapter (spec 9.3). */\nexport const WbTargetFeature = createFeature({\n name: \"WebsiteBuilderWorkflows/Target\",\n register(container) {\n // Lets the single CMS handlers cover pages (R51).\n container.register(WbPageReviewNamespace);\n container.register(WbPageTargetReader);\n container.register(WbPageAccess);\n // The workflow editor's dangling-folder check (D69, R125).\n container.register(WbPageFolderExistsService);\n // Caches folder read rules for one request.\n container.register(WbPageDeniedFolders).inContainerScope();\n // The page review lists' read filter (Q77).\n container.register(WbPageReviewReadFilter);\n\n // Engine ports, one per namespace (R28, R50, R114).\n container.register(WbPageReviewTargetLoader);\n container.register(WbPageReviewTargetSync);\n container.register(WbPageReviewTargetReadAccess);\n container.register(WbPageReviewTargetFolderChain);\n // The app and model id of a workflow model, for validation and routing (D137, R113).\n container.register(WbWorkflowModelParser);\n\n // The AI step's editor port for pages (R172).\n container.register(WbPageReviewTargetEditor);\n\n // Where the notification e-mail links to the page (R195).\n container.register(WbPageReviewTargetLink);\n }\n});\n"],"names":["WbTargetFeature","createFeature","container","WbPageReviewNamespace","WbPageTargetReader","WbPageAccess","WbPageFolderExistsService","WbPageDeniedFolders","WbPageReviewReadFilter","WbPageReviewTargetLoader","WbPageReviewTargetSync","WbPageReviewTargetReadAccess","WbPageReviewTargetFolderChain","WbWorkflowModelParser","WbPageReviewTargetEditor","WbPageReviewTargetLink"],"mappings":";;;;;;;;;;;;;;AAgBO,MAAMA,kBAAkBC,cAAc;IACzC,MAAM;IACN,UAASC,SAAS;QAEdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QAEnBH,UAAU,QAAQ,CAACI;QAEnBJ,UAAU,QAAQ,CAACK,qBAAqB,gBAAgB;QAExDL,UAAU,QAAQ,CAACM;QAGnBN,UAAU,QAAQ,CAACO;QACnBP,UAAU,QAAQ,CAACQ;QACnBR,UAAU,QAAQ,CAACS;QACnBT,UAAU,QAAQ,CAACU;QAEnBV,UAAU,QAAQ,CAACW;QAGnBX,UAAU,QAAQ,CAACY;QAGnBZ,UAAU,QAAQ,CAACa;IACvB;AACJ"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether `value` is acceptable for the writable page path (R172). The page model stores
|
|
3
|
+
* `properties` as JSON and nothing type-checks it, so the editor does before writing. The title is
|
|
4
|
+
* required and never cleared; the SEO text fields accept `null` (the key is removed); the canonical
|
|
5
|
+
* URL must also be a pathname (`/path`, the admin rule); the SEO flags are booleans. Any other path is not writable. Pure.
|
|
6
|
+
*/
|
|
7
|
+
export declare const isWbPageEditorValue: (path: string, value: unknown) => boolean;
|
|
8
|
+
/** What the model should send for a writable page path, for the error text. Pure. */
|
|
9
|
+
export declare const describeWbPageEditorValue: (path: string) => string;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const PATHNAME_REGEX = new RegExp("^\\/(?:[a-zA-Z0-9._~:@!$&'()*+,;=%/-])*(?:\\?[a-zA-Z0-9._~:@!$&'()*+,;=?/%#[\\]-]*)?(?:#[a-zA-Z0-9._~:@!$&'()*+,;=?/%#[\\]-]*)?$");
|
|
2
|
+
const isPathname = (value)=>"string" == typeof value && !value.startsWith("//") && PATHNAME_REGEX.test(value);
|
|
3
|
+
const isWbPageEditorValue = (path, value)=>{
|
|
4
|
+
switch(path){
|
|
5
|
+
case "properties.title":
|
|
6
|
+
return "string" == typeof value && "" !== value.trim();
|
|
7
|
+
case "properties.seo.title":
|
|
8
|
+
case "properties.seo.description":
|
|
9
|
+
return null === value || "string" == typeof value;
|
|
10
|
+
case "properties.seo.canonicalUrl":
|
|
11
|
+
return null === value || isPathname(value);
|
|
12
|
+
case "properties.seo.noIndex":
|
|
13
|
+
case "properties.seo.noFollow":
|
|
14
|
+
return "boolean" == typeof value;
|
|
15
|
+
default:
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const describeWbPageEditorValue = (path)=>{
|
|
20
|
+
switch(path){
|
|
21
|
+
case "properties.title":
|
|
22
|
+
return "a non-empty string";
|
|
23
|
+
case "properties.seo.canonicalUrl":
|
|
24
|
+
return "a pathname such as /path, or null";
|
|
25
|
+
case "properties.seo.noIndex":
|
|
26
|
+
case "properties.seo.noFollow":
|
|
27
|
+
return "true or false";
|
|
28
|
+
default:
|
|
29
|
+
return "a string or null";
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
export { describeWbPageEditorValue, isWbPageEditorValue };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=isWbPageEditorValue.js.map
|