@webiny/api-website-builder-workflows 0.0.0-unstable.9f53ea597d → 0.0.0-unstable.a85ef555b2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/{PageWorkflows → wrappers/GetWebsiteBuilderPageReview}/feature.d.ts +1 -1
- 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 +22 -16
- package/features/PageWorkflows/decorators/WbWorkflowStateContextProvider.d.ts +0 -13
- package/features/PageWorkflows/decorators/WbWorkflowStateContextProvider.js +0 -27
- package/features/PageWorkflows/decorators/WbWorkflowStateContextProvider.js.map +0 -1
- package/features/PageWorkflows/decorators/WbWorkflowStateFilter.d.ts +0 -13
- package/features/PageWorkflows/decorators/WbWorkflowStateFilter.js +0 -45
- package/features/PageWorkflows/decorators/WbWorkflowStateFilter.js.map +0 -1
- package/features/PageWorkflows/errors.d.ts +0 -9
- package/features/PageWorkflows/errors.js +0 -12
- package/features/PageWorkflows/errors.js.map +0 -1
- package/features/PageWorkflows/feature.js +0 -27
- package/features/PageWorkflows/feature.js.map +0 -1
- package/features/PageWorkflows/handlers/BlockMoveOnActiveWorkflowState.d.ts +0 -11
- package/features/PageWorkflows/handlers/BlockMoveOnActiveWorkflowState.js +0 -31
- package/features/PageWorkflows/handlers/BlockMoveOnActiveWorkflowState.js.map +0 -1
- package/features/PageWorkflows/handlers/ClearPageStateOnWorkflowStateAfterDelete.d.ts +0 -11
- package/features/PageWorkflows/handlers/ClearPageStateOnWorkflowStateAfterDelete.js +0 -26
- package/features/PageWorkflows/handlers/ClearPageStateOnWorkflowStateAfterDelete.js.map +0 -1
- package/features/PageWorkflows/handlers/ClearPageStateOnWorkflowStateCancel.d.ts +0 -11
- package/features/PageWorkflows/handlers/ClearPageStateOnWorkflowStateCancel.js +0 -26
- package/features/PageWorkflows/handlers/ClearPageStateOnWorkflowStateCancel.js.map +0 -1
- package/features/PageWorkflows/handlers/DeleteWorkflowStateOnPageAfterDelete.d.ts +0 -11
- package/features/PageWorkflows/handlers/DeleteWorkflowStateOnPageAfterDelete.js +0 -21
- 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 -28
- 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 -27
- 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 -37
- package/features/PageWorkflows/handlers/ValidateWorkflowStateOnPageBeforePublish.js.map +0 -1
- package/graphql/page.d.ts +0 -2
- package/graphql/page.js +0 -21
- 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 -4
- package/utils/appName.js.map +0 -1
- package/utils/state.d.ts +0 -8
- package/utils/state.js +0 -12
- package/utils/state.js.map +0 -1
|
@@ -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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/isWbPageEditorValue.js","sources":["../../../src/features/target/isWbPageEditorValue.ts"],"sourcesContent":["/**\n * The pathname rule of the admin SEO group (`PATHNAME_REGEX` in\n * `packages/app-website-builder/src/presentation/pages/PageEditor/PageSettings/groups/SeoSettingsGroup.ts`),\n * copied here, not imported (the API must not depend on admin code). An empty string passes the\n * admin form (it is optional) but is rejected here: the model must send `null` to clear the key.\n */\nconst PATHNAME_REGEX = new RegExp(\n `^\\\\/(?:[a-zA-Z0-9._~:@!$&'()*+,;=%/-])*(?:\\\\?[a-zA-Z0-9._~:@!$&'()*+,;=?/%#[\\\\]-]*)?(?:#[a-zA-Z0-9._~:@!$&'()*+,;=?/%#[\\\\]-]*)?$`\n);\n\n/**\n * The admin rule lets `//host` through (its path class includes `/`), and a protocol-relative URL\n * is an external URL, so it is rejected on top of the copied rule.\n */\nconst isPathname = (value: unknown): boolean => {\n return typeof value === \"string\" && !value.startsWith(\"//\") && PATHNAME_REGEX.test(value);\n};\n\n/**\n * Whether `value` is acceptable for the writable page path (R172). The page model stores\n * `properties` as JSON and nothing type-checks it, so the editor does before writing. The title is\n * required and never cleared; the SEO text fields accept `null` (the key is removed); the canonical\n * URL must also be a pathname (`/path`, the admin rule); the SEO flags are booleans. Any other path is not writable. Pure.\n */\nexport const isWbPageEditorValue = (path: string, value: unknown): boolean => {\n switch (path) {\n case \"properties.title\":\n return typeof value === \"string\" && value.trim() !== \"\";\n case \"properties.seo.title\":\n case \"properties.seo.description\":\n return value === null || typeof value === \"string\";\n case \"properties.seo.canonicalUrl\":\n return value === null || isPathname(value);\n case \"properties.seo.noIndex\":\n case \"properties.seo.noFollow\":\n return typeof value === \"boolean\";\n default:\n return false;\n }\n};\n\n/** What the model should send for a writable page path, for the error text. Pure. */\nexport const describeWbPageEditorValue = (path: string): string => {\n switch (path) {\n case \"properties.title\":\n return \"a non-empty string\";\n case \"properties.seo.canonicalUrl\":\n return \"a pathname such as /path, or null\";\n case \"properties.seo.noIndex\":\n case \"properties.seo.noFollow\":\n return \"true or false\";\n default:\n return \"a string or null\";\n }\n};\n"],"names":["PATHNAME_REGEX","RegExp","isPathname","value","isWbPageEditorValue","path","describeWbPageEditorValue"],"mappings":"AAMA,MAAMA,iBAAiB,IAAIC,OACvB;AAOJ,MAAMC,aAAa,CAACC,QACT,AAAiB,YAAjB,OAAOA,SAAsB,CAACA,MAAM,UAAU,CAAC,SAASH,eAAe,IAAI,CAACG;AAShF,MAAMC,sBAAsB,CAACC,MAAcF;IAC9C,OAAQE;QACJ,KAAK;YACD,OAAO,AAAiB,YAAjB,OAAOF,SAAsBA,AAAiB,OAAjBA,MAAM,IAAI;QAClD,KAAK;QACL,KAAK;YACD,OAAOA,AAAU,SAAVA,SAAkB,AAAiB,YAAjB,OAAOA;QACpC,KAAK;YACD,OAAOA,AAAU,SAAVA,SAAkBD,WAAWC;QACxC,KAAK;QACL,KAAK;YACD,OAAO,AAAiB,aAAjB,OAAOA;QAClB;YACI,OAAO;IACf;AACJ;AAGO,MAAMG,4BAA4B,CAACD;IACtC,OAAQA;QACJ,KAAK;YACD,OAAO;QACX,KAAK;YACD,OAAO;QACX,KAAK;QACL,KAAK;YACD,OAAO;QACX;YACI,OAAO;IACf;AACJ"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { WbPage } from "@webiny/api-website-builder/domain/page/abstractions.js";
|
|
2
|
+
import type { ReviewTargetEditorField } from "@webiny/api-workflows/features/review/ReviewTargetEditor/abstractions.js";
|
|
3
|
+
/** The parts of a page the editor reads. */
|
|
4
|
+
export type WbPageEditorSource = Pick<WbPage, "properties" | "location" | "status" | "metadata" | "bindings" | "elements" | "extensions">;
|
|
5
|
+
/** A field the AI may write (R172). */
|
|
6
|
+
export interface WbPageWritableField {
|
|
7
|
+
/** The key `update` takes. */
|
|
8
|
+
path: string;
|
|
9
|
+
/** The key inside `properties.seo`; empty for the page title. */
|
|
10
|
+
key: string;
|
|
11
|
+
label: string;
|
|
12
|
+
type: string;
|
|
13
|
+
}
|
|
14
|
+
/** What the model reads for the element tree instead of the tree itself. */
|
|
15
|
+
export interface WbElementsSummary {
|
|
16
|
+
count: number;
|
|
17
|
+
/** Component name to the number of elements that use it. */
|
|
18
|
+
components: Record<string, number>;
|
|
19
|
+
}
|
|
20
|
+
export declare const WB_PAGE_TITLE_FIELD: WbPageWritableField;
|
|
21
|
+
/** The SEO scalars of the page editor's SEO group (R172). `metaTags` and the rest are read-only. */
|
|
22
|
+
export declare const WB_PAGE_SEO_FIELDS: WbPageWritableField[];
|
|
23
|
+
/**
|
|
24
|
+
* The page as the target editor shows it (R172): the title, every other `properties` key as one
|
|
25
|
+
* read-only row with its whole value, the five writable SEO scalars, the rest of the SEO group as
|
|
26
|
+
* read-only rows, the read-only page parts (`location`, `status`, `metadata`, `bindings`,
|
|
27
|
+
* `extensions`) and a read-only summary of the element tree. `properties.path` and
|
|
28
|
+
* `properties.language` are never writable. A `properties` key that contains a dot is skipped: its
|
|
29
|
+
* row path could shadow an allowlisted path. Throws when `properties` is missing (the editor turns
|
|
30
|
+
* that into a failed Result). Pure.
|
|
31
|
+
*/
|
|
32
|
+
export declare const toWbPageEditorFields: (page: WbPageEditorSource) => ReviewTargetEditorField[];
|