@webiny/api-headless-cms-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/CmsWorkflowsFeature.d.ts +4 -0
- package/CmsWorkflowsFeature.js +28 -0
- package/CmsWorkflowsFeature.js.map +1 -0
- package/LICENSE +21 -0
- package/README.md +11 -0
- package/domain/errors.d.ts +27 -0
- package/domain/errors.js +14 -0
- package/domain/errors.js.map +1 -0
- package/features/Workflows/feature.d.ts +4 -0
- package/features/Workflows/feature.js +13 -0
- package/features/Workflows/feature.js.map +1 -0
- package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeCreate.d.ts +23 -0
- package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeCreate.js +44 -0
- package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeCreate.js.map +1 -0
- package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeUpdate.d.ts +23 -0
- package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeUpdate.js +44 -0
- package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeUpdate.js.map +1 -0
- package/features/Workflows/index.d.ts +1 -0
- package/features/Workflows/index.js +1 -0
- package/features/hooks/BlockDeleteMultipleWhileInReview.d.ts +22 -0
- package/features/hooks/BlockDeleteMultipleWhileInReview.js +64 -0
- package/features/hooks/BlockDeleteMultipleWhileInReview.js.map +1 -0
- package/features/hooks/BlockDeleteWhileInReview.d.ts +18 -0
- package/features/hooks/BlockDeleteWhileInReview.js +45 -0
- package/features/hooks/BlockDeleteWhileInReview.js.map +1 -0
- package/features/hooks/BlockFolderChangeWhileInReview.d.ts +21 -0
- package/features/hooks/BlockFolderChangeWhileInReview.js +44 -0
- package/features/hooks/BlockFolderChangeWhileInReview.js.map +1 -0
- package/features/hooks/BlockMoveWhileInReview.d.ts +19 -0
- package/features/hooks/BlockMoveWhileInReview.js +46 -0
- package/features/hooks/BlockMoveWhileInReview.js.map +1 -0
- package/features/hooks/BlockRevisionDeleteWhileInReview.d.ts +17 -0
- package/features/hooks/BlockRevisionDeleteWhileInReview.js +46 -0
- package/features/hooks/BlockRevisionDeleteWhileInReview.js.map +1 -0
- package/features/hooks/BlockUpdateWhileInReview.d.ts +25 -0
- package/features/hooks/BlockUpdateWhileInReview.js +43 -0
- package/features/hooks/BlockUpdateWhileInReview.js.map +1 -0
- package/features/hooks/DeleteModelBoundToWorkflowDecorator.d.ts +22 -0
- package/features/hooks/DeleteModelBoundToWorkflowDecorator.js +52 -0
- package/features/hooks/DeleteModelBoundToWorkflowDecorator.js.map +1 -0
- package/features/hooks/DeleteModelTaskBoundToWorkflowDecorator.d.ts +27 -0
- package/features/hooks/DeleteModelTaskBoundToWorkflowDecorator.js +64 -0
- package/features/hooks/DeleteModelTaskBoundToWorkflowDecorator.js.map +1 -0
- package/features/hooks/DeleteReviewsOnEntriesDeleteMultiple.d.ts +19 -0
- package/features/hooks/DeleteReviewsOnEntriesDeleteMultiple.js +47 -0
- package/features/hooks/DeleteReviewsOnEntriesDeleteMultiple.js.map +1 -0
- package/features/hooks/DeleteReviewsOnEntryDelete.d.ts +19 -0
- package/features/hooks/DeleteReviewsOnEntryDelete.js +46 -0
- package/features/hooks/DeleteReviewsOnEntryDelete.js.map +1 -0
- package/features/hooks/DeleteReviewsOnRevisionDelete.d.ts +18 -0
- package/features/hooks/DeleteReviewsOnRevisionDelete.js +46 -0
- package/features/hooks/DeleteReviewsOnRevisionDelete.js.map +1 -0
- package/features/hooks/FullyDeleteModelBoundToWorkflowDecorator.d.ts +28 -0
- package/features/hooks/FullyDeleteModelBoundToWorkflowDecorator.js +63 -0
- package/features/hooks/FullyDeleteModelBoundToWorkflowDecorator.js.map +1 -0
- package/features/hooks/NullReviewStateOnRevisionCreate.d.ts +15 -0
- package/features/hooks/NullReviewStateOnRevisionCreate.js +17 -0
- package/features/hooks/NullReviewStateOnRevisionCreate.js.map +1 -0
- package/features/hooks/RequireApprovedReviewOnPublish.d.ts +22 -0
- package/features/hooks/RequireApprovedReviewOnPublish.js +43 -0
- package/features/hooks/RequireApprovedReviewOnPublish.js.map +1 -0
- package/features/hooks/RequireApprovedReviewOnRepublish.d.ts +23 -0
- package/features/hooks/RequireApprovedReviewOnRepublish.js +49 -0
- package/features/hooks/RequireApprovedReviewOnRepublish.js.map +1 -0
- package/features/hooks/feature.d.ts +8 -0
- package/features/hooks/feature.js +39 -0
- package/features/hooks/feature.js.map +1 -0
- package/features/target/CandidateFolderReadRules/CandidateFolderReadRules.d.ts +18 -0
- package/features/target/CandidateFolderReadRules/CandidateFolderReadRules.js +97 -0
- package/features/target/CandidateFolderReadRules/CandidateFolderReadRules.js.map +1 -0
- package/features/target/CandidateFolderReadRules/abstractions.d.ts +35 -0
- package/features/target/CandidateFolderReadRules/abstractions.js +5 -0
- package/features/target/CandidateFolderReadRules/abstractions.js.map +1 -0
- package/features/target/CandidateFolderReadRules/index.d.ts +1 -0
- package/features/target/CandidateFolderReadRules/index.js +1 -0
- package/features/target/CmsEntryAccess/CmsEntryAccess.d.ts +32 -0
- package/features/target/CmsEntryAccess/CmsEntryAccess.js +141 -0
- package/features/target/CmsEntryAccess/CmsEntryAccess.js.map +1 -0
- package/features/target/CmsEntryAccess/abstractions.d.ts +48 -0
- package/features/target/CmsEntryAccess/abstractions.js +5 -0
- package/features/target/CmsEntryAccess/abstractions.js.map +1 -0
- package/features/target/CmsEntryAccess/index.d.ts +2 -0
- package/features/target/CmsEntryAccess/index.js +2 -0
- package/features/target/CmsEntryAccess/unreadableCodes.d.ts +1 -0
- package/features/target/CmsEntryAccess/unreadableCodes.js +9 -0
- package/features/target/CmsEntryAccess/unreadableCodes.js.map +1 -0
- package/features/target/CmsEntryDeniedFolders/CmsEntryDeniedFolders.d.ts +21 -0
- package/features/target/CmsEntryDeniedFolders/CmsEntryDeniedFolders.js +66 -0
- package/features/target/CmsEntryDeniedFolders/CmsEntryDeniedFolders.js.map +1 -0
- package/features/target/CmsEntryDeniedFolders/abstractions.d.ts +23 -0
- package/features/target/CmsEntryDeniedFolders/abstractions.js +5 -0
- package/features/target/CmsEntryDeniedFolders/abstractions.js.map +1 -0
- package/features/target/CmsEntryDeniedFolders/index.d.ts +1 -0
- package/features/target/CmsEntryDeniedFolders/index.js +1 -0
- package/features/target/CmsEntryFolderExistsService/CmsEntryFolderExistsService.d.ts +18 -0
- package/features/target/CmsEntryFolderExistsService/CmsEntryFolderExistsService.js +43 -0
- package/features/target/CmsEntryFolderExistsService/CmsEntryFolderExistsService.js.map +1 -0
- package/features/target/CmsEntryFolderExistsService/abstractions.d.ts +23 -0
- package/features/target/CmsEntryFolderExistsService/abstractions.js +5 -0
- package/features/target/CmsEntryFolderExistsService/abstractions.js.map +1 -0
- package/features/target/CmsEntryFolderExistsService/index.d.ts +1 -0
- package/features/target/CmsEntryFolderExistsService/index.js +1 -0
- package/features/target/CmsEntryReviewNamespace/CmsModelReviewNamespace.d.ts +10 -0
- package/features/target/CmsEntryReviewNamespace/CmsModelReviewNamespace.js +14 -0
- package/features/target/CmsEntryReviewNamespace/CmsModelReviewNamespace.js.map +1 -0
- package/features/target/CmsEntryReviewNamespace/abstractions.d.ts +17 -0
- package/features/target/CmsEntryReviewNamespace/abstractions.js +5 -0
- package/features/target/CmsEntryReviewNamespace/abstractions.js.map +1 -0
- package/features/target/CmsEntryReviewNamespace/index.d.ts +1 -0
- package/features/target/CmsEntryReviewNamespace/index.js +1 -0
- package/features/target/CmsEntryReviewReadFilter/CmsEntryReviewReadFilter.d.ts +20 -0
- package/features/target/CmsEntryReviewReadFilter/CmsEntryReviewReadFilter.js +80 -0
- package/features/target/CmsEntryReviewReadFilter/CmsEntryReviewReadFilter.js.map +1 -0
- package/features/target/CmsEntryReviewReadFilter/abstractions.d.ts +24 -0
- package/features/target/CmsEntryReviewReadFilter/abstractions.js +5 -0
- package/features/target/CmsEntryReviewReadFilter/abstractions.js.map +1 -0
- package/features/target/CmsEntryReviewReadFilter/index.d.ts +1 -0
- package/features/target/CmsEntryReviewReadFilter/index.js +1 -0
- package/features/target/CmsEntryReviewTargetEditor.d.ts +28 -0
- package/features/target/CmsEntryReviewTargetEditor.js +128 -0
- package/features/target/CmsEntryReviewTargetEditor.js.map +1 -0
- package/features/target/CmsEntryReviewTargetFolderChain.d.ts +22 -0
- package/features/target/CmsEntryReviewTargetFolderChain.js +37 -0
- package/features/target/CmsEntryReviewTargetFolderChain.js.map +1 -0
- package/features/target/CmsEntryReviewTargetLink.d.ts +17 -0
- package/features/target/CmsEntryReviewTargetLink.js +18 -0
- package/features/target/CmsEntryReviewTargetLink.js.map +1 -0
- package/features/target/CmsEntryReviewTargetLoader.d.ts +16 -0
- package/features/target/CmsEntryReviewTargetLoader.js +29 -0
- package/features/target/CmsEntryReviewTargetLoader.js.map +1 -0
- package/features/target/CmsEntryReviewTargetReadAccess.d.ts +41 -0
- package/features/target/CmsEntryReviewTargetReadAccess.js +91 -0
- package/features/target/CmsEntryReviewTargetReadAccess.js.map +1 -0
- package/features/target/CmsEntryReviewTargetSync.d.ts +23 -0
- package/features/target/CmsEntryReviewTargetSync.js +42 -0
- package/features/target/CmsEntryReviewTargetSync.js.map +1 -0
- package/features/target/CmsEntryTargetReader/CmsEntryTargetReader.d.ts +27 -0
- package/features/target/CmsEntryTargetReader/CmsEntryTargetReader.js +81 -0
- package/features/target/CmsEntryTargetReader/CmsEntryTargetReader.js.map +1 -0
- package/features/target/CmsEntryTargetReader/abstractions.d.ts +40 -0
- package/features/target/CmsEntryTargetReader/abstractions.js +5 -0
- package/features/target/CmsEntryTargetReader/abstractions.js.map +1 -0
- package/features/target/CmsEntryTargetReader/index.d.ts +1 -0
- package/features/target/CmsEntryTargetReader/index.js +1 -0
- package/features/target/CmsModelGroupService/CmsModelGroupService.d.ts +12 -0
- package/features/target/CmsModelGroupService/CmsModelGroupService.js +25 -0
- package/features/target/CmsModelGroupService/CmsModelGroupService.js.map +1 -0
- package/features/target/CmsModelGroupService/abstractions.d.ts +24 -0
- package/features/target/CmsModelGroupService/abstractions.js +5 -0
- package/features/target/CmsModelGroupService/abstractions.js.map +1 -0
- package/features/target/CmsModelGroupService/index.d.ts +1 -0
- package/features/target/CmsModelGroupService/index.js +1 -0
- package/features/target/CmsWorkflowModelParser.d.ts +9 -0
- package/features/target/CmsWorkflowModelParser.js +18 -0
- package/features/target/CmsWorkflowModelParser.js.map +1 -0
- package/features/target/FolderReadRule.d.ts +9 -0
- package/features/target/FolderReadRule.js +0 -0
- package/features/target/WorkflowEntrySystemField.d.ts +13 -0
- package/features/target/WorkflowEntrySystemField.js +35 -0
- package/features/target/WorkflowEntrySystemField.js.map +1 -0
- package/features/target/feature.d.ts +5 -0
- package/features/target/feature.js +41 -0
- package/features/target/feature.js.map +1 -0
- package/features/target/getModelSafeValidationMessage.d.ts +11 -0
- package/features/target/getModelSafeValidationMessage.js +28 -0
- package/features/target/getModelSafeValidationMessage.js.map +1 -0
- package/features/target/isEditorFieldValue.d.ts +9 -0
- package/features/target/isEditorFieldValue.js +30 -0
- package/features/target/isEditorFieldValue.js.map +1 -0
- package/features/target/toCmsReviewTarget.d.ts +4 -0
- package/features/target/toCmsReviewTarget.js +26 -0
- package/features/target/toCmsReviewTarget.js.map +1 -0
- package/features/target/toEditorFields.d.ts +9 -0
- package/features/target/toEditorFields.js +48 -0
- package/features/target/toEditorFields.js.map +1 -0
- package/features/target/toEntryValuesPatch.d.ts +9 -0
- package/features/target/toEntryValuesPatch.js +31 -0
- package/features/target/toEntryValuesPatch.js.map +1 -0
- package/features/wrappers/ApproveCmsEntryReviewStep/ApproveCmsEntryReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/ApproveCmsEntryReviewStep/ApproveCmsEntryReviewStepUseCase.js +35 -0
- package/features/wrappers/ApproveCmsEntryReviewStep/ApproveCmsEntryReviewStepUseCase.js.map +1 -0
- package/features/wrappers/ApproveCmsEntryReviewStep/abstractions.d.ts +26 -0
- package/features/wrappers/ApproveCmsEntryReviewStep/abstractions.js +5 -0
- package/features/wrappers/ApproveCmsEntryReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/ApproveCmsEntryReviewStep/feature.d.ts +4 -0
- package/features/wrappers/ApproveCmsEntryReviewStep/feature.js +11 -0
- package/features/wrappers/ApproveCmsEntryReviewStep/feature.js.map +1 -0
- package/features/wrappers/ApproveCmsEntryReviewStep/index.d.ts +1 -0
- package/features/wrappers/ApproveCmsEntryReviewStep/index.js +1 -0
- package/features/wrappers/CancelCmsEntryReview/CancelCmsEntryReviewUseCase.d.ts +13 -0
- package/features/wrappers/CancelCmsEntryReview/CancelCmsEntryReviewUseCase.js +37 -0
- package/features/wrappers/CancelCmsEntryReview/CancelCmsEntryReviewUseCase.js.map +1 -0
- package/features/wrappers/CancelCmsEntryReview/abstractions.d.ts +30 -0
- package/features/wrappers/CancelCmsEntryReview/abstractions.js +5 -0
- package/features/wrappers/CancelCmsEntryReview/abstractions.js.map +1 -0
- package/features/wrappers/CancelCmsEntryReview/feature.d.ts +4 -0
- package/features/wrappers/CancelCmsEntryReview/feature.js +11 -0
- package/features/wrappers/CancelCmsEntryReview/feature.js.map +1 -0
- package/features/wrappers/CancelCmsEntryReview/index.d.ts +1 -0
- package/features/wrappers/CancelCmsEntryReview/index.js +1 -0
- package/features/wrappers/CancelCmsEntryReviewsForDelete/CancelCmsEntryReviewsForDeleteUseCase.d.ts +19 -0
- package/features/wrappers/CancelCmsEntryReviewsForDelete/CancelCmsEntryReviewsForDeleteUseCase.js +85 -0
- package/features/wrappers/CancelCmsEntryReviewsForDelete/CancelCmsEntryReviewsForDeleteUseCase.js.map +1 -0
- package/features/wrappers/CancelCmsEntryReviewsForDelete/abstractions.d.ts +41 -0
- package/features/wrappers/CancelCmsEntryReviewsForDelete/abstractions.js +5 -0
- package/features/wrappers/CancelCmsEntryReviewsForDelete/abstractions.js.map +1 -0
- package/features/wrappers/CancelCmsEntryReviewsForDelete/feature.d.ts +4 -0
- package/features/wrappers/CancelCmsEntryReviewsForDelete/feature.js +11 -0
- package/features/wrappers/CancelCmsEntryReviewsForDelete/feature.js.map +1 -0
- package/features/wrappers/CancelCmsEntryReviewsForDelete/index.d.ts +1 -0
- package/features/wrappers/CancelCmsEntryReviewsForDelete/index.js +1 -0
- package/features/wrappers/CmsEntryFolderExists/CmsEntryFolderExistsUseCase.d.ts +15 -0
- package/features/wrappers/CmsEntryFolderExists/CmsEntryFolderExistsUseCase.js +46 -0
- package/features/wrappers/CmsEntryFolderExists/CmsEntryFolderExistsUseCase.js.map +1 -0
- package/features/wrappers/CmsEntryFolderExists/abstractions.d.ts +29 -0
- package/features/wrappers/CmsEntryFolderExists/abstractions.js +5 -0
- package/features/wrappers/CmsEntryFolderExists/abstractions.js.map +1 -0
- package/features/wrappers/CmsEntryFolderExists/feature.d.ts +4 -0
- package/features/wrappers/CmsEntryFolderExists/feature.js +11 -0
- package/features/wrappers/CmsEntryFolderExists/feature.js.map +1 -0
- package/features/wrappers/CmsEntryFolderExists/index.d.ts +1 -0
- package/features/wrappers/CmsEntryFolderExists/index.js +1 -0
- package/features/wrappers/CmsEntryReviewGuardService/CmsEntryReviewGuardService.d.ts +17 -0
- package/features/wrappers/CmsEntryReviewGuardService/CmsEntryReviewGuardService.js +63 -0
- package/features/wrappers/CmsEntryReviewGuardService/CmsEntryReviewGuardService.js.map +1 -0
- package/features/wrappers/CmsEntryReviewGuardService/abstractions.d.ts +37 -0
- package/features/wrappers/CmsEntryReviewGuardService/abstractions.js +5 -0
- package/features/wrappers/CmsEntryReviewGuardService/abstractions.js.map +1 -0
- package/features/wrappers/CmsEntryReviewGuardService/index.d.ts +1 -0
- package/features/wrappers/CmsEntryReviewGuardService/index.js +1 -0
- package/features/wrappers/DeleteCmsEntryWorkflow/DeleteCmsEntryWorkflowUseCase.d.ts +25 -0
- package/features/wrappers/DeleteCmsEntryWorkflow/DeleteCmsEntryWorkflowUseCase.js +98 -0
- package/features/wrappers/DeleteCmsEntryWorkflow/DeleteCmsEntryWorkflowUseCase.js.map +1 -0
- package/features/wrappers/DeleteCmsEntryWorkflow/abstractions.d.ts +32 -0
- package/features/wrappers/DeleteCmsEntryWorkflow/abstractions.js +5 -0
- package/features/wrappers/DeleteCmsEntryWorkflow/abstractions.js.map +1 -0
- package/features/wrappers/DeleteCmsEntryWorkflow/feature.d.ts +4 -0
- package/features/wrappers/DeleteCmsEntryWorkflow/feature.js +11 -0
- package/features/wrappers/DeleteCmsEntryWorkflow/feature.js.map +1 -0
- package/features/wrappers/DeleteCmsEntryWorkflow/index.d.ts +1 -0
- package/features/wrappers/DeleteCmsEntryWorkflow/index.js +1 -0
- package/features/wrappers/GetCmsEntryReview/GetCmsEntryReviewUseCase.d.ts +13 -0
- package/features/wrappers/GetCmsEntryReview/GetCmsEntryReviewUseCase.js +40 -0
- package/features/wrappers/GetCmsEntryReview/GetCmsEntryReviewUseCase.js.map +1 -0
- package/features/wrappers/GetCmsEntryReview/abstractions.d.ts +28 -0
- package/features/wrappers/GetCmsEntryReview/abstractions.js +5 -0
- package/features/wrappers/GetCmsEntryReview/abstractions.js.map +1 -0
- package/features/wrappers/GetCmsEntryReview/feature.d.ts +4 -0
- package/features/wrappers/GetCmsEntryReview/feature.js +11 -0
- package/features/wrappers/GetCmsEntryReview/feature.js.map +1 -0
- package/features/wrappers/GetCmsEntryReview/index.d.ts +1 -0
- package/features/wrappers/GetCmsEntryReview/index.js +1 -0
- package/features/wrappers/GetCmsEntryReviewStepRun/GetCmsEntryReviewStepRunUseCase.d.ts +13 -0
- package/features/wrappers/GetCmsEntryReviewStepRun/GetCmsEntryReviewStepRunUseCase.js +39 -0
- package/features/wrappers/GetCmsEntryReviewStepRun/GetCmsEntryReviewStepRunUseCase.js.map +1 -0
- package/features/wrappers/GetCmsEntryReviewStepRun/abstractions.d.ts +33 -0
- package/features/wrappers/GetCmsEntryReviewStepRun/abstractions.js +5 -0
- package/features/wrappers/GetCmsEntryReviewStepRun/abstractions.js.map +1 -0
- package/features/wrappers/GetCmsEntryReviewStepRun/feature.d.ts +4 -0
- package/features/wrappers/GetCmsEntryReviewStepRun/feature.js +11 -0
- package/features/wrappers/GetCmsEntryReviewStepRun/feature.js.map +1 -0
- package/features/wrappers/GetCmsEntryReviewStepRun/index.d.ts +1 -0
- package/features/wrappers/GetCmsEntryReviewStepRun/index.js +1 -0
- package/features/wrappers/GetCmsEntryTargetReview/GetCmsEntryTargetReviewUseCase.d.ts +19 -0
- package/features/wrappers/GetCmsEntryTargetReview/GetCmsEntryTargetReviewUseCase.js +76 -0
- package/features/wrappers/GetCmsEntryTargetReview/GetCmsEntryTargetReviewUseCase.js.map +1 -0
- package/features/wrappers/GetCmsEntryTargetReview/abstractions.d.ts +36 -0
- package/features/wrappers/GetCmsEntryTargetReview/abstractions.js +5 -0
- package/features/wrappers/GetCmsEntryTargetReview/abstractions.js.map +1 -0
- package/features/wrappers/GetCmsEntryTargetReview/feature.d.ts +4 -0
- package/features/wrappers/GetCmsEntryTargetReview/feature.js +11 -0
- package/features/wrappers/GetCmsEntryTargetReview/feature.js.map +1 -0
- package/features/wrappers/GetCmsEntryTargetReview/index.d.ts +1 -0
- package/features/wrappers/GetCmsEntryTargetReview/index.js +1 -0
- package/features/wrappers/GetCmsEntryWorkflow/GetCmsEntryWorkflowUseCase.d.ts +13 -0
- package/features/wrappers/GetCmsEntryWorkflow/GetCmsEntryWorkflowUseCase.js +34 -0
- package/features/wrappers/GetCmsEntryWorkflow/GetCmsEntryWorkflowUseCase.js.map +1 -0
- package/features/wrappers/GetCmsEntryWorkflow/abstractions.d.ts +24 -0
- package/features/wrappers/GetCmsEntryWorkflow/abstractions.js +5 -0
- package/features/wrappers/GetCmsEntryWorkflow/abstractions.js.map +1 -0
- package/features/wrappers/GetCmsEntryWorkflow/feature.d.ts +4 -0
- package/features/wrappers/GetCmsEntryWorkflow/feature.js +11 -0
- package/features/wrappers/GetCmsEntryWorkflow/feature.js.map +1 -0
- package/features/wrappers/GetCmsEntryWorkflow/index.d.ts +1 -0
- package/features/wrappers/GetCmsEntryWorkflow/index.js +1 -0
- package/features/wrappers/InspectCmsEntryRouting/InspectCmsEntryRoutingUseCase.d.ts +19 -0
- package/features/wrappers/InspectCmsEntryRouting/InspectCmsEntryRoutingUseCase.js +54 -0
- package/features/wrappers/InspectCmsEntryRouting/InspectCmsEntryRoutingUseCase.js.map +1 -0
- package/features/wrappers/InspectCmsEntryRouting/abstractions.d.ts +37 -0
- package/features/wrappers/InspectCmsEntryRouting/abstractions.js +5 -0
- package/features/wrappers/InspectCmsEntryRouting/abstractions.js.map +1 -0
- package/features/wrappers/InspectCmsEntryRouting/feature.d.ts +4 -0
- package/features/wrappers/InspectCmsEntryRouting/feature.js +11 -0
- package/features/wrappers/InspectCmsEntryRouting/feature.js.map +1 -0
- package/features/wrappers/InspectCmsEntryRouting/index.d.ts +1 -0
- package/features/wrappers/InspectCmsEntryRouting/index.js +1 -0
- package/features/wrappers/ListCmsEntryBlockingReviews/ListCmsEntryBlockingReviewsUseCase.d.ts +25 -0
- package/features/wrappers/ListCmsEntryBlockingReviews/ListCmsEntryBlockingReviewsUseCase.js +109 -0
- package/features/wrappers/ListCmsEntryBlockingReviews/ListCmsEntryBlockingReviewsUseCase.js.map +1 -0
- package/features/wrappers/ListCmsEntryBlockingReviews/abstractions.d.ts +36 -0
- package/features/wrappers/ListCmsEntryBlockingReviews/abstractions.js +6 -0
- package/features/wrappers/ListCmsEntryBlockingReviews/abstractions.js.map +1 -0
- package/features/wrappers/ListCmsEntryBlockingReviews/feature.d.ts +4 -0
- package/features/wrappers/ListCmsEntryBlockingReviews/feature.js +11 -0
- package/features/wrappers/ListCmsEntryBlockingReviews/feature.js.map +1 -0
- package/features/wrappers/ListCmsEntryBlockingReviews/index.d.ts +1 -0
- package/features/wrappers/ListCmsEntryBlockingReviews/index.js +1 -0
- package/features/wrappers/ListCmsEntryReviewStepCandidates/ListCmsEntryReviewStepCandidatesUseCase.d.ts +13 -0
- package/features/wrappers/ListCmsEntryReviewStepCandidates/ListCmsEntryReviewStepCandidatesUseCase.js +41 -0
- package/features/wrappers/ListCmsEntryReviewStepCandidates/ListCmsEntryReviewStepCandidatesUseCase.js.map +1 -0
- package/features/wrappers/ListCmsEntryReviewStepCandidates/abstractions.d.ts +30 -0
- package/features/wrappers/ListCmsEntryReviewStepCandidates/abstractions.js +5 -0
- package/features/wrappers/ListCmsEntryReviewStepCandidates/abstractions.js.map +1 -0
- package/features/wrappers/ListCmsEntryReviewStepCandidates/feature.d.ts +4 -0
- package/features/wrappers/ListCmsEntryReviewStepCandidates/feature.js +11 -0
- package/features/wrappers/ListCmsEntryReviewStepCandidates/feature.js.map +1 -0
- package/features/wrappers/ListCmsEntryReviewStepCandidates/index.d.ts +1 -0
- package/features/wrappers/ListCmsEntryReviewStepCandidates/index.js +1 -0
- package/features/wrappers/ListCmsEntryReviews/ListCmsEntryReviewsUseCase.d.ts +17 -0
- package/features/wrappers/ListCmsEntryReviews/ListCmsEntryReviewsUseCase.js +85 -0
- package/features/wrappers/ListCmsEntryReviews/ListCmsEntryReviewsUseCase.js.map +1 -0
- package/features/wrappers/ListCmsEntryReviews/abstractions.d.ts +50 -0
- package/features/wrappers/ListCmsEntryReviews/abstractions.js +5 -0
- package/features/wrappers/ListCmsEntryReviews/abstractions.js.map +1 -0
- package/features/wrappers/ListCmsEntryReviews/feature.d.ts +4 -0
- package/features/wrappers/ListCmsEntryReviews/feature.js +11 -0
- package/features/wrappers/ListCmsEntryReviews/feature.js.map +1 -0
- package/features/wrappers/ListCmsEntryReviews/index.d.ts +1 -0
- package/features/wrappers/ListCmsEntryReviews/index.js +1 -0
- package/features/wrappers/ListCmsEntryStepCandidates/ListCmsEntryStepCandidatesUseCase.d.ts +25 -0
- package/features/wrappers/ListCmsEntryStepCandidates/ListCmsEntryStepCandidatesUseCase.js +83 -0
- package/features/wrappers/ListCmsEntryStepCandidates/ListCmsEntryStepCandidatesUseCase.js.map +1 -0
- package/features/wrappers/ListCmsEntryStepCandidates/abstractions.d.ts +41 -0
- package/features/wrappers/ListCmsEntryStepCandidates/abstractions.js +5 -0
- package/features/wrappers/ListCmsEntryStepCandidates/abstractions.js.map +1 -0
- package/features/wrappers/ListCmsEntryStepCandidates/feature.d.ts +4 -0
- package/features/wrappers/ListCmsEntryStepCandidates/feature.js +11 -0
- package/features/wrappers/ListCmsEntryStepCandidates/feature.js.map +1 -0
- package/features/wrappers/ListCmsEntryStepCandidates/index.d.ts +1 -0
- package/features/wrappers/ListCmsEntryStepCandidates/index.js +1 -0
- package/features/wrappers/ListCmsEntryWorkflowModels/ListCmsEntryWorkflowModelsUseCase.d.ts +17 -0
- package/features/wrappers/ListCmsEntryWorkflowModels/ListCmsEntryWorkflowModelsUseCase.js +106 -0
- package/features/wrappers/ListCmsEntryWorkflowModels/ListCmsEntryWorkflowModelsUseCase.js.map +1 -0
- package/features/wrappers/ListCmsEntryWorkflowModels/abstractions.d.ts +58 -0
- package/features/wrappers/ListCmsEntryWorkflowModels/abstractions.js +5 -0
- package/features/wrappers/ListCmsEntryWorkflowModels/abstractions.js.map +1 -0
- package/features/wrappers/ListCmsEntryWorkflowModels/feature.d.ts +4 -0
- package/features/wrappers/ListCmsEntryWorkflowModels/feature.js +11 -0
- package/features/wrappers/ListCmsEntryWorkflowModels/feature.js.map +1 -0
- package/features/wrappers/ListCmsEntryWorkflowModels/index.d.ts +2 -0
- package/features/wrappers/ListCmsEntryWorkflowModels/index.js +1 -0
- package/features/wrappers/ListCmsEntryWorkflowModels/modelListCursor.d.ts +8 -0
- package/features/wrappers/ListCmsEntryWorkflowModels/modelListCursor.js +20 -0
- package/features/wrappers/ListCmsEntryWorkflowModels/modelListCursor.js.map +1 -0
- package/features/wrappers/ListCmsEntryWorkflows/ListCmsEntryWorkflowsUseCase.d.ts +17 -0
- package/features/wrappers/ListCmsEntryWorkflows/ListCmsEntryWorkflowsUseCase.js +43 -0
- package/features/wrappers/ListCmsEntryWorkflows/ListCmsEntryWorkflowsUseCase.js.map +1 -0
- package/features/wrappers/ListCmsEntryWorkflows/abstractions.d.ts +24 -0
- package/features/wrappers/ListCmsEntryWorkflows/abstractions.js +5 -0
- package/features/wrappers/ListCmsEntryWorkflows/abstractions.js.map +1 -0
- package/features/wrappers/ListCmsEntryWorkflows/feature.d.ts +4 -0
- package/features/wrappers/ListCmsEntryWorkflows/feature.js +11 -0
- package/features/wrappers/ListCmsEntryWorkflows/feature.js.map +1 -0
- package/features/wrappers/ListCmsEntryWorkflows/index.d.ts +1 -0
- package/features/wrappers/ListCmsEntryWorkflows/index.js +1 -0
- package/features/wrappers/ReassignCmsEntryReviewStep/ReassignCmsEntryReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/ReassignCmsEntryReviewStep/ReassignCmsEntryReviewStepUseCase.js +40 -0
- package/features/wrappers/ReassignCmsEntryReviewStep/ReassignCmsEntryReviewStepUseCase.js.map +1 -0
- package/features/wrappers/ReassignCmsEntryReviewStep/abstractions.d.ts +32 -0
- package/features/wrappers/ReassignCmsEntryReviewStep/abstractions.js +5 -0
- package/features/wrappers/ReassignCmsEntryReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/ReassignCmsEntryReviewStep/feature.d.ts +4 -0
- package/features/wrappers/ReassignCmsEntryReviewStep/feature.js +11 -0
- package/features/wrappers/ReassignCmsEntryReviewStep/feature.js.map +1 -0
- package/features/wrappers/ReassignCmsEntryReviewStep/index.d.ts +1 -0
- package/features/wrappers/ReassignCmsEntryReviewStep/index.js +1 -0
- package/features/wrappers/RejectCmsEntryReviewStep/RejectCmsEntryReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/RejectCmsEntryReviewStep/RejectCmsEntryReviewStepUseCase.js +35 -0
- package/features/wrappers/RejectCmsEntryReviewStep/RejectCmsEntryReviewStepUseCase.js.map +1 -0
- package/features/wrappers/RejectCmsEntryReviewStep/abstractions.d.ts +26 -0
- package/features/wrappers/RejectCmsEntryReviewStep/abstractions.js +5 -0
- package/features/wrappers/RejectCmsEntryReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/RejectCmsEntryReviewStep/feature.d.ts +4 -0
- package/features/wrappers/RejectCmsEntryReviewStep/feature.js +11 -0
- package/features/wrappers/RejectCmsEntryReviewStep/feature.js.map +1 -0
- package/features/wrappers/RejectCmsEntryReviewStep/index.d.ts +1 -0
- package/features/wrappers/RejectCmsEntryReviewStep/index.js +1 -0
- package/features/wrappers/RequestCmsEntryReview/RequestCmsEntryReviewUseCase.d.ts +21 -0
- package/features/wrappers/RequestCmsEntryReview/RequestCmsEntryReviewUseCase.js +63 -0
- package/features/wrappers/RequestCmsEntryReview/RequestCmsEntryReviewUseCase.js.map +1 -0
- package/features/wrappers/RequestCmsEntryReview/abstractions.d.ts +38 -0
- package/features/wrappers/RequestCmsEntryReview/abstractions.js +5 -0
- package/features/wrappers/RequestCmsEntryReview/abstractions.js.map +1 -0
- package/features/wrappers/RequestCmsEntryReview/feature.d.ts +4 -0
- package/features/wrappers/RequestCmsEntryReview/feature.js +11 -0
- package/features/wrappers/RequestCmsEntryReview/feature.js.map +1 -0
- package/features/wrappers/RequestCmsEntryReview/index.d.ts +1 -0
- package/features/wrappers/RequestCmsEntryReview/index.js +1 -0
- package/features/wrappers/RestartCmsEntryReviewStep/RestartCmsEntryReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/RestartCmsEntryReviewStep/RestartCmsEntryReviewStepUseCase.js +39 -0
- package/features/wrappers/RestartCmsEntryReviewStep/RestartCmsEntryReviewStepUseCase.js.map +1 -0
- package/features/wrappers/RestartCmsEntryReviewStep/abstractions.d.ts +30 -0
- package/features/wrappers/RestartCmsEntryReviewStep/abstractions.js +5 -0
- package/features/wrappers/RestartCmsEntryReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/RestartCmsEntryReviewStep/feature.d.ts +4 -0
- package/features/wrappers/RestartCmsEntryReviewStep/feature.js +11 -0
- package/features/wrappers/RestartCmsEntryReviewStep/feature.js.map +1 -0
- package/features/wrappers/RestartCmsEntryReviewStep/index.d.ts +1 -0
- package/features/wrappers/RestartCmsEntryReviewStep/index.js +1 -0
- package/features/wrappers/StartCmsEntryReviewStep/StartCmsEntryReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/StartCmsEntryReviewStep/StartCmsEntryReviewStepUseCase.js +34 -0
- package/features/wrappers/StartCmsEntryReviewStep/StartCmsEntryReviewStepUseCase.js.map +1 -0
- package/features/wrappers/StartCmsEntryReviewStep/abstractions.d.ts +25 -0
- package/features/wrappers/StartCmsEntryReviewStep/abstractions.js +5 -0
- package/features/wrappers/StartCmsEntryReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/StartCmsEntryReviewStep/feature.d.ts +4 -0
- package/features/wrappers/StartCmsEntryReviewStep/feature.js +11 -0
- package/features/wrappers/StartCmsEntryReviewStep/feature.js.map +1 -0
- package/features/wrappers/StartCmsEntryReviewStep/index.d.ts +1 -0
- package/features/wrappers/StartCmsEntryReviewStep/index.js +1 -0
- package/features/wrappers/StoreCmsEntryWorkflow/StoreCmsEntryWorkflowUseCase.d.ts +17 -0
- package/features/wrappers/StoreCmsEntryWorkflow/StoreCmsEntryWorkflowUseCase.js +57 -0
- package/features/wrappers/StoreCmsEntryWorkflow/StoreCmsEntryWorkflowUseCase.js.map +1 -0
- package/features/wrappers/StoreCmsEntryWorkflow/abstractions.d.ts +32 -0
- package/features/wrappers/StoreCmsEntryWorkflow/abstractions.js +5 -0
- package/features/wrappers/StoreCmsEntryWorkflow/abstractions.js.map +1 -0
- package/features/wrappers/StoreCmsEntryWorkflow/feature.d.ts +4 -0
- package/features/wrappers/StoreCmsEntryWorkflow/feature.js +11 -0
- package/features/wrappers/StoreCmsEntryWorkflow/feature.js.map +1 -0
- package/features/wrappers/StoreCmsEntryWorkflow/index.d.ts +1 -0
- package/features/wrappers/StoreCmsEntryWorkflow/index.js +1 -0
- package/features/wrappers/TakeOverCmsEntryReviewStep/TakeOverCmsEntryReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/TakeOverCmsEntryReviewStep/TakeOverCmsEntryReviewStepUseCase.js +35 -0
- package/features/wrappers/TakeOverCmsEntryReviewStep/TakeOverCmsEntryReviewStepUseCase.js.map +1 -0
- package/features/wrappers/TakeOverCmsEntryReviewStep/abstractions.d.ts +27 -0
- package/features/wrappers/TakeOverCmsEntryReviewStep/abstractions.js +5 -0
- package/features/wrappers/TakeOverCmsEntryReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/TakeOverCmsEntryReviewStep/feature.d.ts +4 -0
- package/features/wrappers/TakeOverCmsEntryReviewStep/feature.js +11 -0
- package/features/wrappers/TakeOverCmsEntryReviewStep/feature.js.map +1 -0
- package/features/wrappers/TakeOverCmsEntryReviewStep/index.d.ts +1 -0
- package/features/wrappers/TakeOverCmsEntryReviewStep/index.js +1 -0
- package/features/wrappers/feature.d.ts +9 -0
- package/features/wrappers/feature.js +57 -0
- package/features/wrappers/feature.js.map +1 -0
- package/features/wrappers/shared/cmsWorkflows.d.ts +6 -0
- package/features/wrappers/shared/cmsWorkflows.js +8 -0
- package/features/wrappers/shared/cmsWorkflows.js.map +1 -0
- package/graphql/CmsWorkflowsSchemaFactory.d.ts +14 -0
- package/graphql/CmsWorkflowsSchemaFactory.js +695 -0
- package/graphql/CmsWorkflowsSchemaFactory.js.map +1 -0
- package/graphql/entrySystemSchema.d.ts +6 -0
- package/graphql/entrySystemSchema.js +19 -0
- package/graphql/entrySystemSchema.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 +2 -0
- package/index.js +1 -0
- package/package.json +51 -0
- package/types.d.ts +24 -0
- package/types.js +0 -0
- package/utils/appName.d.ts +11 -0
- package/utils/appName.js +11 -0
- package/utils/appName.js.map +1 -0
- package/utils/folderType.d.ts +4 -0
- package/utils/folderType.js +9 -0
- package/utils/folderType.js.map +1 -0
- package/utils/isBindableModel.d.ts +9 -0
- package/utils/isBindableModel.js +8 -0
- package/utils/isBindableModel.js.map +1 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { ListCmsEntryBlockingReviewsUseCase } from "./ListCmsEntryBlockingReviewsUseCase.js";
|
|
3
|
+
const ListCmsEntryBlockingReviewsFeature = createFeature({
|
|
4
|
+
name: "CmsWorkflows/ListCmsEntryBlockingReviews",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(ListCmsEntryBlockingReviewsUseCase);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export { ListCmsEntryBlockingReviewsFeature };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/ListCmsEntryBlockingReviews/feature.js","sources":["../../../../src/features/wrappers/ListCmsEntryBlockingReviews/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { ListCmsEntryBlockingReviewsUseCase } from \"./ListCmsEntryBlockingReviewsUseCase.js\";\n\nexport const ListCmsEntryBlockingReviewsFeature = createFeature({\n name: \"CmsWorkflows/ListCmsEntryBlockingReviews\",\n register(container) {\n container.register(ListCmsEntryBlockingReviewsUseCase);\n }\n});\n"],"names":["ListCmsEntryBlockingReviewsFeature","createFeature","container","ListCmsEntryBlockingReviewsUseCase"],"mappings":";;AAGO,MAAMA,qCAAqCC,cAAc;IAC5D,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { BLOCKING_REVIEWS_MAX_IDS, ListCmsEntryBlockingReviewsUseCase } from "./abstractions.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { BLOCKING_REVIEWS_MAX_IDS, ListCmsEntryBlockingReviewsUseCase } from "./abstractions.js";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ListStepCandidatesUseCase } from "@webiny/api-workflows/features/routing/ListStepCandidates/index.js";
|
|
2
|
+
import { CmsEntryReviewGuardService } from "../CmsEntryReviewGuardService/index.js";
|
|
3
|
+
import { ListCmsEntryReviewStepCandidatesUseCase as UseCase } from "./abstractions.js";
|
|
4
|
+
declare class ListCmsEntryReviewStepCandidatesUseCaseImpl implements UseCase.Interface {
|
|
5
|
+
private guard;
|
|
6
|
+
private listCandidates;
|
|
7
|
+
constructor(guard: CmsEntryReviewGuardService.Interface, listCandidates: ListStepCandidatesUseCase.Interface);
|
|
8
|
+
execute(input: UseCase.Input): UseCase.Return;
|
|
9
|
+
}
|
|
10
|
+
export declare const ListCmsEntryReviewStepCandidatesUseCase: typeof ListCmsEntryReviewStepCandidatesUseCaseImpl & {
|
|
11
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IListCmsEntryReviewStepCandidatesUseCase>;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { ListStepCandidatesUseCase } from "@webiny/api-workflows/features/routing/ListStepCandidates/index.js";
|
|
3
|
+
import { canReassignByPermission } from "@webiny/api-workflows/domain/review/canReassignByPermission.js";
|
|
4
|
+
import { redactStepCandidates } from "@webiny/api-workflows/domain/routing/redactStepCandidates.js";
|
|
5
|
+
import { WorkflowsNotAuthorizedError } from "@webiny/api-workflows/domain/permissions/errors.js";
|
|
6
|
+
import { CmsEntryReviewGuardService } from "../CmsEntryReviewGuardService/index.js";
|
|
7
|
+
import { ListCmsEntryReviewStepCandidatesUseCase } from "./abstractions.js";
|
|
8
|
+
const ACTION = "list the step's candidates";
|
|
9
|
+
class ListCmsEntryReviewStepCandidatesUseCaseImpl {
|
|
10
|
+
constructor(guard, listCandidates){
|
|
11
|
+
this.guard = guard;
|
|
12
|
+
this.listCandidates = listCandidates;
|
|
13
|
+
}
|
|
14
|
+
async execute(input) {
|
|
15
|
+
const authorized = await this.guard.authorize({
|
|
16
|
+
reviewId: input.reviewId,
|
|
17
|
+
action: ACTION
|
|
18
|
+
});
|
|
19
|
+
if (authorized.isFail()) return Result.fail(authorized.error);
|
|
20
|
+
const { viewer } = authorized.value;
|
|
21
|
+
if (!canReassignByPermission(viewer)) return Result.fail(new WorkflowsNotAuthorizedError({
|
|
22
|
+
action: ACTION
|
|
23
|
+
}));
|
|
24
|
+
const candidates = await this.listCandidates.execute({
|
|
25
|
+
reviewId: input.reviewId,
|
|
26
|
+
stepId: input.stepId
|
|
27
|
+
});
|
|
28
|
+
if (candidates.isFail()) return Result.fail(candidates.error);
|
|
29
|
+
return Result.ok(redactStepCandidates(candidates.value, viewer.permissions));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const ListCmsEntryReviewStepCandidatesUseCase_ListCmsEntryReviewStepCandidatesUseCase = ListCmsEntryReviewStepCandidatesUseCase.createImplementation({
|
|
33
|
+
implementation: ListCmsEntryReviewStepCandidatesUseCaseImpl,
|
|
34
|
+
dependencies: [
|
|
35
|
+
CmsEntryReviewGuardService,
|
|
36
|
+
ListStepCandidatesUseCase
|
|
37
|
+
]
|
|
38
|
+
});
|
|
39
|
+
export { ListCmsEntryReviewStepCandidatesUseCase_ListCmsEntryReviewStepCandidatesUseCase as ListCmsEntryReviewStepCandidatesUseCase };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=ListCmsEntryReviewStepCandidatesUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/ListCmsEntryReviewStepCandidates/ListCmsEntryReviewStepCandidatesUseCase.js","sources":["../../../../src/features/wrappers/ListCmsEntryReviewStepCandidates/ListCmsEntryReviewStepCandidatesUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { ListStepCandidatesUseCase } from \"@webiny/api-workflows/features/routing/ListStepCandidates/index.js\";\nimport { canReassignByPermission } from \"@webiny/api-workflows/domain/review/canReassignByPermission.js\";\nimport { redactStepCandidates } from \"@webiny/api-workflows/domain/routing/redactStepCandidates.js\";\nimport { WorkflowsNotAuthorizedError } from \"@webiny/api-workflows/domain/permissions/errors.js\";\nimport { CmsEntryReviewGuardService } from \"../CmsEntryReviewGuardService/index.js\";\nimport { ListCmsEntryReviewStepCandidatesUseCase as UseCase } from \"./abstractions.js\";\n\nconst ACTION = \"list the step's candidates\";\n\nclass ListCmsEntryReviewStepCandidatesUseCaseImpl implements UseCase.Interface {\n public constructor(\n private guard: CmsEntryReviewGuardService.Interface,\n private listCandidates: ListStepCandidatesUseCase.Interface\n ) {}\n\n public async execute(input: UseCase.Input): UseCase.Return {\n const authorized = await this.guard.authorize({\n reviewId: input.reviewId,\n action: ACTION\n });\n if (authorized.isFail()) {\n return Result.fail(authorized.error);\n }\n\n const { viewer } = authorized.value;\n if (!canReassignByPermission(viewer)) {\n return Result.fail(new WorkflowsNotAuthorizedError({ action: ACTION }));\n }\n\n const candidates = await this.listCandidates.execute({\n reviewId: input.reviewId,\n stepId: input.stepId\n });\n if (candidates.isFail()) {\n return Result.fail(candidates.error);\n }\n // This path requires `reassign`, so the call never clears a reason; kept so both candidate\n // lists share one redaction rule (R120).\n return Result.ok(redactStepCandidates(candidates.value, viewer.permissions));\n }\n}\n\nexport const ListCmsEntryReviewStepCandidatesUseCase = UseCase.createImplementation({\n implementation: ListCmsEntryReviewStepCandidatesUseCaseImpl,\n dependencies: [CmsEntryReviewGuardService, ListStepCandidatesUseCase]\n});\n"],"names":["ACTION","ListCmsEntryReviewStepCandidatesUseCaseImpl","guard","listCandidates","input","authorized","Result","viewer","canReassignByPermission","WorkflowsNotAuthorizedError","candidates","redactStepCandidates","ListCmsEntryReviewStepCandidatesUseCase","UseCase","CmsEntryReviewGuardService","ListStepCandidatesUseCase"],"mappings":";;;;;;;AAQA,MAAMA,SAAS;AAEf,MAAMC;IACF,YACYC,KAA2C,EAC3CC,cAAmD,CAC7D;aAFUD,KAAK,GAALA;aACAC,cAAc,GAAdA;IACT;IAEH,MAAa,QAAQC,KAAoB,EAAkB;QACvD,MAAMC,aAAa,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YAC1C,UAAUD,MAAM,QAAQ;YACxB,QAAQJ;QACZ;QACA,IAAIK,WAAW,MAAM,IACjB,OAAOC,OAAO,IAAI,CAACD,WAAW,KAAK;QAGvC,MAAM,EAAEE,MAAM,EAAE,GAAGF,WAAW,KAAK;QACnC,IAAI,CAACG,wBAAwBD,SACzB,OAAOD,OAAO,IAAI,CAAC,IAAIG,4BAA4B;YAAE,QAAQT;QAAO;QAGxE,MAAMU,aAAa,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YACjD,UAAUN,MAAM,QAAQ;YACxB,QAAQA,MAAM,MAAM;QACxB;QACA,IAAIM,WAAW,MAAM,IACjB,OAAOJ,OAAO,IAAI,CAACI,WAAW,KAAK;QAIvC,OAAOJ,OAAO,EAAE,CAACK,qBAAqBD,WAAW,KAAK,EAAEH,OAAO,WAAW;IAC9E;AACJ;AAEO,MAAMK,kFAA0CC,wCAAAA,oBAA4B,CAAC;IAChF,gBAAgBZ;IAChB,cAAc;QAACa;QAA4BC;KAA0B;AACzE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Result } from "@webiny/feature/api";
|
|
2
|
+
import type { StepCandidate } from "@webiny/api-workflows/domain/routing/types.js";
|
|
3
|
+
import type { WorkflowsNotAuthorizedError } from "@webiny/api-workflows/domain/permissions/errors.js";
|
|
4
|
+
import type { ListStepCandidatesUseCase } from "@webiny/api-workflows/features/routing/ListStepCandidates/index.js";
|
|
5
|
+
import type { CmsEntryReviewGuardService } from "../CmsEntryReviewGuardService/index.js";
|
|
6
|
+
export interface ListCmsEntryReviewStepCandidatesInput {
|
|
7
|
+
reviewId: string;
|
|
8
|
+
stepId: string;
|
|
9
|
+
}
|
|
10
|
+
export interface IListCmsEntryReviewStepCandidatesUseCaseErrors {
|
|
11
|
+
guard: CmsEntryReviewGuardService.Error;
|
|
12
|
+
notAuthorized: WorkflowsNotAuthorizedError;
|
|
13
|
+
candidates: ListStepCandidatesUseCase.Error;
|
|
14
|
+
}
|
|
15
|
+
type UseCaseError = IListCmsEntryReviewStepCandidatesUseCaseErrors[keyof IListCmsEntryReviewStepCandidatesUseCaseErrors];
|
|
16
|
+
export interface IListCmsEntryReviewStepCandidatesUseCase {
|
|
17
|
+
execute(input: ListCmsEntryReviewStepCandidatesInput): Promise<Result<StepCandidate[], UseCaseError>>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Who a CMS review step can be reassigned to (spec 10, D128, R120): read access to the target and
|
|
21
|
+
* `reassign`, as for the reassign itself (R125); the step from the review's snapshot.
|
|
22
|
+
*/
|
|
23
|
+
export declare const ListCmsEntryReviewStepCandidatesUseCase: import("@webiny/di").Abstraction<IListCmsEntryReviewStepCandidatesUseCase>;
|
|
24
|
+
export declare namespace ListCmsEntryReviewStepCandidatesUseCase {
|
|
25
|
+
type Interface = IListCmsEntryReviewStepCandidatesUseCase;
|
|
26
|
+
type Input = ListCmsEntryReviewStepCandidatesInput;
|
|
27
|
+
type Error = UseCaseError;
|
|
28
|
+
type Return = Promise<Result<StepCandidate[], UseCaseError>>;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/ListCmsEntryReviewStepCandidates/abstractions.js","sources":["../../../../src/features/wrappers/ListCmsEntryReviewStepCandidates/abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { StepCandidate } from \"@webiny/api-workflows/domain/routing/types.js\";\nimport type { WorkflowsNotAuthorizedError } from \"@webiny/api-workflows/domain/permissions/errors.js\";\nimport type { ListStepCandidatesUseCase } from \"@webiny/api-workflows/features/routing/ListStepCandidates/index.js\";\nimport type { CmsEntryReviewGuardService } from \"../CmsEntryReviewGuardService/index.js\";\n\nexport interface ListCmsEntryReviewStepCandidatesInput {\n reviewId: string;\n stepId: string;\n}\n\nexport interface IListCmsEntryReviewStepCandidatesUseCaseErrors {\n guard: CmsEntryReviewGuardService.Error;\n notAuthorized: WorkflowsNotAuthorizedError;\n candidates: ListStepCandidatesUseCase.Error;\n}\n\ntype UseCaseError =\n IListCmsEntryReviewStepCandidatesUseCaseErrors[keyof IListCmsEntryReviewStepCandidatesUseCaseErrors];\n\nexport interface IListCmsEntryReviewStepCandidatesUseCase {\n execute(\n input: ListCmsEntryReviewStepCandidatesInput\n ): Promise<Result<StepCandidate[], UseCaseError>>;\n}\n\n/**\n * Who a CMS review step can be reassigned to (spec 10, D128, R120): read access to the target and\n * `reassign`, as for the reassign itself (R125); the step from the review's snapshot.\n */\nexport const ListCmsEntryReviewStepCandidatesUseCase =\n createAbstraction<IListCmsEntryReviewStepCandidatesUseCase>(\n \"ListCmsEntryReviewStepCandidatesUseCase\"\n );\n\nexport namespace ListCmsEntryReviewStepCandidatesUseCase {\n export type Interface = IListCmsEntryReviewStepCandidatesUseCase;\n export type Input = ListCmsEntryReviewStepCandidatesInput;\n export type Error = UseCaseError;\n export type Return = Promise<Result<StepCandidate[], UseCaseError>>;\n}\n"],"names":["ListCmsEntryReviewStepCandidatesUseCase","createAbstraction"],"mappings":";AA8BO,MAAMA,0CACTC,kBACI"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { ListCmsEntryReviewStepCandidatesUseCase } from "./ListCmsEntryReviewStepCandidatesUseCase.js";
|
|
3
|
+
const ListCmsEntryReviewStepCandidatesFeature = createFeature({
|
|
4
|
+
name: "CmsWorkflows/ListCmsEntryReviewStepCandidates",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(ListCmsEntryReviewStepCandidatesUseCase);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export { ListCmsEntryReviewStepCandidatesFeature };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/ListCmsEntryReviewStepCandidates/feature.js","sources":["../../../../src/features/wrappers/ListCmsEntryReviewStepCandidates/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { ListCmsEntryReviewStepCandidatesUseCase } from \"./ListCmsEntryReviewStepCandidatesUseCase.js\";\n\nexport const ListCmsEntryReviewStepCandidatesFeature = createFeature({\n name: \"CmsWorkflows/ListCmsEntryReviewStepCandidates\",\n register(container) {\n container.register(ListCmsEntryReviewStepCandidatesUseCase);\n }\n});\n"],"names":["ListCmsEntryReviewStepCandidatesFeature","createFeature","container","ListCmsEntryReviewStepCandidatesUseCase"],"mappings":";;AAGO,MAAMA,0CAA0CC,cAAc;IACjE,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ListCmsEntryReviewStepCandidatesUseCase } from "./abstractions.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ListCmsEntryReviewStepCandidatesUseCase } from "./abstractions.js";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels/index.js";
|
|
2
|
+
import { CurrentReviewViewer } from "@webiny/api-workflows/features/identity/CurrentReviewViewer/index.js";
|
|
3
|
+
import { ListReviewsUseCase } from "@webiny/api-workflows/features/review/ListReviews/index.js";
|
|
4
|
+
import { CmsEntryReviewReadFilter } from "../../../features/target/CmsEntryReviewReadFilter/index.js";
|
|
5
|
+
import { ListCmsEntryReviewsUseCase as UseCase } from "./abstractions.js";
|
|
6
|
+
declare class ListCmsEntryReviewsUseCaseImpl implements UseCase.Interface {
|
|
7
|
+
private viewer;
|
|
8
|
+
private listModels;
|
|
9
|
+
private listReviews;
|
|
10
|
+
private readFilter;
|
|
11
|
+
constructor(viewer: CurrentReviewViewer.Interface, listModels: ListModelsUseCase.Interface, listReviews: ListReviewsUseCase.Interface, readFilter: CmsEntryReviewReadFilter.Interface);
|
|
12
|
+
execute(input: UseCase.Input): UseCase.Return;
|
|
13
|
+
}
|
|
14
|
+
export declare const ListCmsEntryReviewsUseCase: typeof ListCmsEntryReviewsUseCaseImpl & {
|
|
15
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IListCmsEntryReviewsUseCase>;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels/index.js";
|
|
3
|
+
import { CurrentReviewViewer } from "@webiny/api-workflows/features/identity/CurrentReviewViewer/index.js";
|
|
4
|
+
import { ListReviewsUseCase } from "@webiny/api-workflows/features/review/ListReviews/index.js";
|
|
5
|
+
import { getReviewViewerFlags } from "@webiny/api-workflows/domain/review/getReviewViewerFlags.js";
|
|
6
|
+
import { canReassignByPermission } from "@webiny/api-workflows/domain/review/canReassignByPermission.js";
|
|
7
|
+
import { WorkflowsNotAuthorizedError } from "@webiny/api-workflows/domain/permissions/errors.js";
|
|
8
|
+
import { ReviewPersistenceError } from "@webiny/api-workflows/domain/review/errors.js";
|
|
9
|
+
import { CmsEntryReviewReadFilter } from "../../target/CmsEntryReviewReadFilter/index.js";
|
|
10
|
+
import { isBindableModel } from "../../../utils/isBindableModel.js";
|
|
11
|
+
import { ListCmsEntryReviewsUseCase } from "./abstractions.js";
|
|
12
|
+
const MODEL_NOT_AUTHORIZED = "Cms/Model/NotAuthorized";
|
|
13
|
+
class ListCmsEntryReviewsUseCaseImpl {
|
|
14
|
+
constructor(viewer, listModels, listReviews, readFilter){
|
|
15
|
+
this.viewer = viewer;
|
|
16
|
+
this.listModels = listModels;
|
|
17
|
+
this.listReviews = listReviews;
|
|
18
|
+
this.readFilter = readFilter;
|
|
19
|
+
}
|
|
20
|
+
async execute(input) {
|
|
21
|
+
let viewer;
|
|
22
|
+
try {
|
|
23
|
+
viewer = await this.viewer.get();
|
|
24
|
+
} catch (error) {
|
|
25
|
+
return Result.fail(new ReviewPersistenceError(error instanceof Error ? error : new Error(String(error))));
|
|
26
|
+
}
|
|
27
|
+
if (viewer.isFail()) return Result.fail(viewer.error);
|
|
28
|
+
if ("failedSteps" === input.list && !canReassignByPermission(viewer.value)) return Result.fail(new WorkflowsNotAuthorizedError({
|
|
29
|
+
action: "list failed steps"
|
|
30
|
+
}));
|
|
31
|
+
let models;
|
|
32
|
+
try {
|
|
33
|
+
models = await this.listModels.execute({
|
|
34
|
+
includePrivate: false,
|
|
35
|
+
includePlugins: true
|
|
36
|
+
});
|
|
37
|
+
} catch (error) {
|
|
38
|
+
return Result.fail(new ReviewPersistenceError(error instanceof Error ? error : new Error(String(error))));
|
|
39
|
+
}
|
|
40
|
+
if (models.isFail() && models.error.code !== MODEL_NOT_AUTHORIZED) return Result.fail(new ReviewPersistenceError(models.error));
|
|
41
|
+
const where = input.where ?? {};
|
|
42
|
+
const { modelId, ...listWhere } = where;
|
|
43
|
+
const listedModels = (models.isOk() ? models.value : []).filter((model)=>isBindableModel(model)).filter((model)=>null == modelId || model.modelId === modelId);
|
|
44
|
+
const readFilter = await this.readFilter.build(listedModels);
|
|
45
|
+
if (readFilter.isFail()) return Result.fail(readFilter.error);
|
|
46
|
+
const readable = readFilter.value;
|
|
47
|
+
if (0 === readable.models.length && 0 === readable.ownOnlyModels.length) return Result.ok({
|
|
48
|
+
items: [],
|
|
49
|
+
meta: {
|
|
50
|
+
cursor: null,
|
|
51
|
+
hasMoreItems: false
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
const page = await this.listReviews.execute({
|
|
55
|
+
list: input.list,
|
|
56
|
+
viewerUserId: viewer.value.actor.id,
|
|
57
|
+
viewerTeamIds: viewer.value.teamIds,
|
|
58
|
+
readFilter: readable,
|
|
59
|
+
where: listWhere,
|
|
60
|
+
sort: input.sort ?? void 0,
|
|
61
|
+
limit: input.limit ?? void 0,
|
|
62
|
+
after: input.after ?? null
|
|
63
|
+
});
|
|
64
|
+
if (page.isFail()) return Result.fail(page.error);
|
|
65
|
+
return Result.ok({
|
|
66
|
+
items: page.value.items.map((review)=>({
|
|
67
|
+
review,
|
|
68
|
+
flags: getReviewViewerFlags(review, viewer.value)
|
|
69
|
+
})),
|
|
70
|
+
meta: page.value.meta
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const ListCmsEntryReviewsUseCase_ListCmsEntryReviewsUseCase = ListCmsEntryReviewsUseCase.createImplementation({
|
|
75
|
+
implementation: ListCmsEntryReviewsUseCaseImpl,
|
|
76
|
+
dependencies: [
|
|
77
|
+
CurrentReviewViewer,
|
|
78
|
+
ListModelsUseCase,
|
|
79
|
+
ListReviewsUseCase,
|
|
80
|
+
CmsEntryReviewReadFilter
|
|
81
|
+
]
|
|
82
|
+
});
|
|
83
|
+
export { ListCmsEntryReviewsUseCase_ListCmsEntryReviewsUseCase as ListCmsEntryReviewsUseCase };
|
|
84
|
+
|
|
85
|
+
//# sourceMappingURL=ListCmsEntryReviewsUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/ListCmsEntryReviews/ListCmsEntryReviewsUseCase.js","sources":["../../../../src/features/wrappers/ListCmsEntryReviews/ListCmsEntryReviewsUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels/index.js\";\nimport { CurrentReviewViewer } from \"@webiny/api-workflows/features/identity/CurrentReviewViewer/index.js\";\nimport { ListReviewsUseCase } from \"@webiny/api-workflows/features/review/ListReviews/index.js\";\nimport { getReviewViewerFlags } from \"@webiny/api-workflows/domain/review/getReviewViewerFlags.js\";\nimport { canReassignByPermission } from \"@webiny/api-workflows/domain/review/canReassignByPermission.js\";\nimport { WorkflowsNotAuthorizedError } from \"@webiny/api-workflows/domain/permissions/errors.js\";\nimport { ReviewPersistenceError } from \"@webiny/api-workflows/domain/review/errors.js\";\nimport { CmsEntryReviewReadFilter } from \"~/features/target/CmsEntryReviewReadFilter/index.js\";\nimport { isBindableModel } from \"~/utils/isBindableModel.js\";\nimport { ListCmsEntryReviewsUseCase as UseCase } from \"./abstractions.js\";\n\n/** `ListModelsUseCase` fails with this when the identity can read no model at all. */\nconst MODEL_NOT_AUTHORIZED = \"Cms/Model/NotAuthorized\";\n\nclass ListCmsEntryReviewsUseCaseImpl implements UseCase.Interface {\n public constructor(\n private viewer: CurrentReviewViewer.Interface,\n private listModels: ListModelsUseCase.Interface,\n private listReviews: ListReviewsUseCase.Interface,\n private readFilter: CmsEntryReviewReadFilter.Interface\n ) {}\n\n public async execute(input: UseCase.Input): UseCase.Return {\n // A failed team or permission load is a persistence error, never a rejection (R87).\n let viewer: Awaited<CurrentReviewViewer.Return>;\n try {\n viewer = await this.viewer.get();\n } catch (error) {\n return Result.fail(\n new ReviewPersistenceError(\n error instanceof Error ? error : new Error(String(error))\n )\n );\n }\n if (viewer.isFail()) {\n return Result.fail(viewer.error);\n }\n if (input.list === \"failedSteps\" && !canReassignByPermission(viewer.value)) {\n return Result.fail(new WorkflowsNotAuthorizedError({ action: \"list failed steps\" }));\n }\n\n // The models the viewer can list (R94); a viewer who can read none gets an empty page.\n let models: Awaited<ListModelsUseCase.Return>;\n try {\n models = await this.listModels.execute({ includePrivate: false, includePlugins: true });\n } catch (error) {\n return Result.fail(\n new ReviewPersistenceError(\n error instanceof Error ? error : new Error(String(error))\n )\n );\n }\n if (models.isFail() && models.error.code !== MODEL_NOT_AUTHORIZED) {\n return Result.fail(new ReviewPersistenceError(models.error));\n }\n const where: UseCase.Where = input.where ?? {};\n const { modelId, ...listWhere } = where;\n const listedModels = (models.isOk() ? models.value : [])\n .filter(model => isBindableModel(model))\n .filter(\n model => modelId === null || modelId === undefined || model.modelId === modelId\n );\n\n // Read access as the CMS entry list applies it, once per call, as query filters (Q77).\n const readFilter = await this.readFilter.build(listedModels);\n if (readFilter.isFail()) {\n return Result.fail(readFilter.error);\n }\n const readable = readFilter.value;\n if (readable.models.length === 0 && readable.ownOnlyModels.length === 0) {\n return Result.ok({ items: [], meta: { cursor: null, hasMoreItems: false } });\n }\n\n const page = await this.listReviews.execute({\n list: input.list,\n viewerUserId: viewer.value.actor.id,\n viewerTeamIds: viewer.value.teamIds,\n readFilter: readable,\n where: listWhere,\n sort: input.sort ?? undefined,\n limit: input.limit ?? undefined,\n after: input.after ?? null\n });\n if (page.isFail()) {\n return Result.fail(page.error);\n }\n\n // A listed row is readable by construction; the flags need no target access (A43).\n return Result.ok({\n items: page.value.items.map(review => {\n return { review, flags: getReviewViewerFlags(review, viewer.value) };\n }),\n meta: page.value.meta\n });\n }\n}\n\nexport const ListCmsEntryReviewsUseCase = UseCase.createImplementation({\n implementation: ListCmsEntryReviewsUseCaseImpl,\n dependencies: [\n CurrentReviewViewer,\n ListModelsUseCase,\n ListReviewsUseCase,\n CmsEntryReviewReadFilter\n ]\n});\n"],"names":["MODEL_NOT_AUTHORIZED","ListCmsEntryReviewsUseCaseImpl","viewer","listModels","listReviews","readFilter","input","error","Result","ReviewPersistenceError","Error","String","canReassignByPermission","WorkflowsNotAuthorizedError","models","where","modelId","listWhere","listedModels","model","isBindableModel","readable","page","undefined","review","getReviewViewerFlags","ListCmsEntryReviewsUseCase","UseCase","CurrentReviewViewer","ListModelsUseCase","ListReviewsUseCase","CmsEntryReviewReadFilter"],"mappings":";;;;;;;;;;;AAaA,MAAMA,uBAAuB;AAE7B,MAAMC;IACF,YACYC,MAAqC,EACrCC,UAAuC,EACvCC,WAAyC,EACzCC,UAA8C,CACxD;aAJUH,MAAM,GAANA;aACAC,UAAU,GAAVA;aACAC,WAAW,GAAXA;aACAC,UAAU,GAAVA;IACT;IAEH,MAAa,QAAQC,KAAoB,EAAkB;QAEvD,IAAIJ;QACJ,IAAI;YACAA,SAAS,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG;QAClC,EAAE,OAAOK,OAAO;YACZ,OAAOC,OAAO,IAAI,CACd,IAAIC,uBACAF,iBAAiBG,QAAQH,QAAQ,IAAIG,MAAMC,OAAOJ;QAG9D;QACA,IAAIL,OAAO,MAAM,IACb,OAAOM,OAAO,IAAI,CAACN,OAAO,KAAK;QAEnC,IAAII,AAAe,kBAAfA,MAAM,IAAI,IAAsB,CAACM,wBAAwBV,OAAO,KAAK,GACrE,OAAOM,OAAO,IAAI,CAAC,IAAIK,4BAA4B;YAAE,QAAQ;QAAoB;QAIrF,IAAIC;QACJ,IAAI;YACAA,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,gBAAgB;gBAAO,gBAAgB;YAAK;QACzF,EAAE,OAAOP,OAAO;YACZ,OAAOC,OAAO,IAAI,CACd,IAAIC,uBACAF,iBAAiBG,QAAQH,QAAQ,IAAIG,MAAMC,OAAOJ;QAG9D;QACA,IAAIO,OAAO,MAAM,MAAMA,OAAO,KAAK,CAAC,IAAI,KAAKd,sBACzC,OAAOQ,OAAO,IAAI,CAAC,IAAIC,uBAAuBK,OAAO,KAAK;QAE9D,MAAMC,QAAuBT,MAAM,KAAK,IAAI,CAAC;QAC7C,MAAM,EAAEU,OAAO,EAAE,GAAGC,WAAW,GAAGF;QAClC,MAAMG,eAAgBJ,AAAAA,CAAAA,OAAO,IAAI,KAAKA,OAAO,KAAK,GAAG,EAAC,EACjD,MAAM,CAACK,CAAAA,QAASC,gBAAgBD,QAChC,MAAM,CACHA,CAAAA,QAASH,QAAAA,WAA6CG,MAAM,OAAO,KAAKH;QAIhF,MAAMX,aAAa,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAACa;QAC/C,IAAIb,WAAW,MAAM,IACjB,OAAOG,OAAO,IAAI,CAACH,WAAW,KAAK;QAEvC,MAAMgB,WAAWhB,WAAW,KAAK;QACjC,IAAIgB,AAA2B,MAA3BA,SAAS,MAAM,CAAC,MAAM,IAAUA,AAAkC,MAAlCA,SAAS,aAAa,CAAC,MAAM,EAC7D,OAAOb,OAAO,EAAE,CAAC;YAAE,OAAO,EAAE;YAAE,MAAM;gBAAE,QAAQ;gBAAM,cAAc;YAAM;QAAE;QAG9E,MAAMc,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YACxC,MAAMhB,MAAM,IAAI;YAChB,cAAcJ,OAAO,KAAK,CAAC,KAAK,CAAC,EAAE;YACnC,eAAeA,OAAO,KAAK,CAAC,OAAO;YACnC,YAAYmB;YACZ,OAAOJ;YACP,MAAMX,MAAM,IAAI,IAAIiB;YACpB,OAAOjB,MAAM,KAAK,IAAIiB;YACtB,OAAOjB,MAAM,KAAK,IAAI;QAC1B;QACA,IAAIgB,KAAK,MAAM,IACX,OAAOd,OAAO,IAAI,CAACc,KAAK,KAAK;QAIjC,OAAOd,OAAO,EAAE,CAAC;YACb,OAAOc,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAACE,CAAAA,SACjB;oBAAEA;oBAAQ,OAAOC,qBAAqBD,QAAQtB,OAAO,KAAK;gBAAE;YAEvE,MAAMoB,KAAK,KAAK,CAAC,IAAI;QACzB;IACJ;AACJ;AAEO,MAAMI,wDAA6BC,2BAAAA,oBAA4B,CAAC;IACnE,gBAAgB1B;IAChB,cAAc;QACV2B;QACAC;QACAC;QACAC;KACH;AACL"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type Result } from "@webiny/feature/api";
|
|
2
|
+
import type { ReviewListKind, ReviewListMeta, ReviewListSort, ReviewListWhere, ReviewWithViewerFlags } from "@webiny/api-workflows/domain/review/types.js";
|
|
3
|
+
import type { WorkflowsNotAuthenticatedError, WorkflowsNotAuthorizedError } from "@webiny/api-workflows/domain/permissions/errors.js";
|
|
4
|
+
import type { ReviewPersistenceError } from "@webiny/api-workflows/domain/review/errors.js";
|
|
5
|
+
import type { ListReviewsUseCase } from "@webiny/api-workflows/features/review/ListReviews/index.js";
|
|
6
|
+
export interface ListCmsEntryReviewsWhere extends ReviewListWhere {
|
|
7
|
+
/** Only the reviews of this model (the model id, without `cms.`, R94). */
|
|
8
|
+
modelId?: string | null;
|
|
9
|
+
}
|
|
10
|
+
export interface ListCmsEntryReviewsInput {
|
|
11
|
+
list: ReviewListKind;
|
|
12
|
+
where?: ListCmsEntryReviewsWhere | null;
|
|
13
|
+
/** Default per list (D119). */
|
|
14
|
+
sort?: ReviewListSort | null;
|
|
15
|
+
/** Default 20, max 100 (R92). */
|
|
16
|
+
limit?: number | null;
|
|
17
|
+
/** `meta.cursor` of the previous page. */
|
|
18
|
+
after?: string | null;
|
|
19
|
+
}
|
|
20
|
+
export interface ListCmsEntryReviewsResult {
|
|
21
|
+
items: ReviewWithViewerFlags[];
|
|
22
|
+
meta: ReviewListMeta;
|
|
23
|
+
}
|
|
24
|
+
export interface IListCmsEntryReviewsUseCaseErrors {
|
|
25
|
+
notAuthenticated: WorkflowsNotAuthenticatedError;
|
|
26
|
+
notAuthorized: WorkflowsNotAuthorizedError;
|
|
27
|
+
persistence: ReviewPersistenceError;
|
|
28
|
+
list: ListReviewsUseCase.Error;
|
|
29
|
+
}
|
|
30
|
+
type UseCaseError = IListCmsEntryReviewsUseCaseErrors[keyof IListCmsEntryReviewsUseCaseErrors];
|
|
31
|
+
export interface IListCmsEntryReviewsUseCase {
|
|
32
|
+
execute(input: ListCmsEntryReviewsInput): Promise<Result<ListCmsEntryReviewsResult, UseCaseError>>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* One page of a review list of the Headless CMS (spec 11, R94): only reviews of bindable models the
|
|
36
|
+
* viewer can read, and only rows whose entry the CMS entry list would show the viewer (D76, Q77):
|
|
37
|
+
* own entries only with an own-only permission, none in a folder the viewer cannot read. A custom
|
|
38
|
+
* per-entry read check added with a decorator is not applied, as CMS lists do not apply it either.
|
|
39
|
+
* Failed steps need `reassign` (D112, R95). Each row carries the viewer's flags (A43).
|
|
40
|
+
*/
|
|
41
|
+
export declare const ListCmsEntryReviewsUseCase: import("@webiny/di").Abstraction<IListCmsEntryReviewsUseCase>;
|
|
42
|
+
export declare namespace ListCmsEntryReviewsUseCase {
|
|
43
|
+
type Interface = IListCmsEntryReviewsUseCase;
|
|
44
|
+
type Input = ListCmsEntryReviewsInput;
|
|
45
|
+
type Where = ListCmsEntryReviewsWhere;
|
|
46
|
+
type Value = ListCmsEntryReviewsResult;
|
|
47
|
+
type Error = UseCaseError;
|
|
48
|
+
type Return = Promise<Result<ListCmsEntryReviewsResult, UseCaseError>>;
|
|
49
|
+
}
|
|
50
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/ListCmsEntryReviews/abstractions.js","sources":["../../../../src/features/wrappers/ListCmsEntryReviews/abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type {\n ReviewListKind,\n ReviewListMeta,\n ReviewListSort,\n ReviewListWhere,\n ReviewWithViewerFlags\n} from \"@webiny/api-workflows/domain/review/types.js\";\nimport type {\n WorkflowsNotAuthenticatedError,\n WorkflowsNotAuthorizedError\n} from \"@webiny/api-workflows/domain/permissions/errors.js\";\nimport type { ReviewPersistenceError } from \"@webiny/api-workflows/domain/review/errors.js\";\nimport type { ListReviewsUseCase } from \"@webiny/api-workflows/features/review/ListReviews/index.js\";\n\nexport interface ListCmsEntryReviewsWhere extends ReviewListWhere {\n /** Only the reviews of this model (the model id, without `cms.`, R94). */\n modelId?: string | null;\n}\n\nexport interface ListCmsEntryReviewsInput {\n list: ReviewListKind;\n where?: ListCmsEntryReviewsWhere | null;\n /** Default per list (D119). */\n sort?: ReviewListSort | null;\n /** Default 20, max 100 (R92). */\n limit?: number | null;\n /** `meta.cursor` of the previous page. */\n after?: string | null;\n}\n\nexport interface ListCmsEntryReviewsResult {\n items: ReviewWithViewerFlags[];\n meta: ReviewListMeta;\n}\n\nexport interface IListCmsEntryReviewsUseCaseErrors {\n notAuthenticated: WorkflowsNotAuthenticatedError;\n notAuthorized: WorkflowsNotAuthorizedError;\n persistence: ReviewPersistenceError;\n list: ListReviewsUseCase.Error;\n}\n\ntype UseCaseError = IListCmsEntryReviewsUseCaseErrors[keyof IListCmsEntryReviewsUseCaseErrors];\n\nexport interface IListCmsEntryReviewsUseCase {\n execute(\n input: ListCmsEntryReviewsInput\n ): Promise<Result<ListCmsEntryReviewsResult, UseCaseError>>;\n}\n\n/**\n * One page of a review list of the Headless CMS (spec 11, R94): only reviews of bindable models the\n * viewer can read, and only rows whose entry the CMS entry list would show the viewer (D76, Q77):\n * own entries only with an own-only permission, none in a folder the viewer cannot read. A custom\n * per-entry read check added with a decorator is not applied, as CMS lists do not apply it either.\n * Failed steps need `reassign` (D112, R95). Each row carries the viewer's flags (A43).\n */\nexport const ListCmsEntryReviewsUseCase = createAbstraction<IListCmsEntryReviewsUseCase>(\n \"ListCmsEntryReviewsUseCase\"\n);\n\nexport namespace ListCmsEntryReviewsUseCase {\n export type Interface = IListCmsEntryReviewsUseCase;\n export type Input = ListCmsEntryReviewsInput;\n export type Where = ListCmsEntryReviewsWhere;\n export type Value = ListCmsEntryReviewsResult;\n export type Error = UseCaseError;\n export type Return = Promise<Result<ListCmsEntryReviewsResult, UseCaseError>>;\n}\n"],"names":["ListCmsEntryReviewsUseCase","createAbstraction"],"mappings":";AA0DO,MAAMA,6BAA6BC,kBACtC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { ListCmsEntryReviewsUseCase } from "./ListCmsEntryReviewsUseCase.js";
|
|
3
|
+
const ListCmsEntryReviewsFeature = createFeature({
|
|
4
|
+
name: "CmsWorkflows/ListCmsEntryReviews",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(ListCmsEntryReviewsUseCase);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export { ListCmsEntryReviewsFeature };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/ListCmsEntryReviews/feature.js","sources":["../../../../src/features/wrappers/ListCmsEntryReviews/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { ListCmsEntryReviewsUseCase } from \"./ListCmsEntryReviewsUseCase.js\";\n\nexport const ListCmsEntryReviewsFeature = createFeature({\n name: \"CmsWorkflows/ListCmsEntryReviews\",\n register(container) {\n container.register(ListCmsEntryReviewsUseCase);\n }\n});\n"],"names":["ListCmsEntryReviewsFeature","createFeature","container","ListCmsEntryReviewsUseCase"],"mappings":";;AAGO,MAAMA,6BAA6BC,cAAc;IACpD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ListCmsEntryReviewsUseCase } from "./abstractions.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ListCmsEntryReviewsUseCase } from "./abstractions.js";
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CurrentReviewViewer } from "@webiny/api-workflows/features/identity/CurrentReviewViewer/index.js";
|
|
2
|
+
import { ListStepCandidatesUseCase } from "@webiny/api-workflows/features/routing/ListStepCandidates/index.js";
|
|
3
|
+
import { GetWorkflowUseCase } from "@webiny/api-workflows/features/workflow/GetWorkflow/index.js";
|
|
4
|
+
import { CmsEntryTargetReader } from "../../../features/target/CmsEntryTargetReader/index.js";
|
|
5
|
+
import { CmsEntryAccess } from "../../../features/target/CmsEntryAccess/index.js";
|
|
6
|
+
import { ListCmsEntryStepCandidatesUseCase as UseCase } from "./abstractions.js";
|
|
7
|
+
/**
|
|
8
|
+
* The target checks are `RequestCmsEntryReviewUseCase`'s: a target of another app or one the
|
|
9
|
+
* viewer cannot see is not found (R46), a visible target without write access is not authorized.
|
|
10
|
+
* A workflow of another app is not found either (R128), as `GetCmsEntryWorkflowUseCase` answers.
|
|
11
|
+
* The viewer is the requester the engine leaves out of the list.
|
|
12
|
+
*/
|
|
13
|
+
declare class ListCmsEntryStepCandidatesUseCaseImpl implements UseCase.Interface {
|
|
14
|
+
private viewer;
|
|
15
|
+
private targets;
|
|
16
|
+
private access;
|
|
17
|
+
private getWorkflow;
|
|
18
|
+
private listCandidates;
|
|
19
|
+
constructor(viewer: CurrentReviewViewer.Interface, targets: CmsEntryTargetReader.Interface, access: CmsEntryAccess.Interface, getWorkflow: GetWorkflowUseCase.Interface, listCandidates: ListStepCandidatesUseCase.Interface);
|
|
20
|
+
execute(input: UseCase.Input): UseCase.Return;
|
|
21
|
+
}
|
|
22
|
+
export declare const ListCmsEntryStepCandidatesUseCase: typeof ListCmsEntryStepCandidatesUseCaseImpl & {
|
|
23
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IListCmsEntryStepCandidatesUseCase>;
|
|
24
|
+
};
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { CurrentReviewViewer } from "@webiny/api-workflows/features/identity/CurrentReviewViewer/index.js";
|
|
3
|
+
import { ListStepCandidatesUseCase } from "@webiny/api-workflows/features/routing/ListStepCandidates/index.js";
|
|
4
|
+
import { GetWorkflowUseCase } from "@webiny/api-workflows/features/workflow/GetWorkflow/index.js";
|
|
5
|
+
import { redactStepCandidates } from "@webiny/api-workflows/domain/routing/redactStepCandidates.js";
|
|
6
|
+
import { WorkflowsNotAuthorizedError } from "@webiny/api-workflows/domain/permissions/errors.js";
|
|
7
|
+
import { WorkflowNotFoundError } from "@webiny/api-workflows/domain/workflow/errors.js";
|
|
8
|
+
import { ReviewPersistenceError, ReviewTargetNotFoundError } from "@webiny/api-workflows/domain/review/errors.js";
|
|
9
|
+
import { CmsEntryTargetReader } from "../../target/CmsEntryTargetReader/index.js";
|
|
10
|
+
import { CmsEntryAccess } from "../../target/CmsEntryAccess/index.js";
|
|
11
|
+
import { isCmsNamespace } from "../../../utils/appName.js";
|
|
12
|
+
import { isCmsWorkflow } from "../shared/cmsWorkflows.js";
|
|
13
|
+
import { ListCmsEntryStepCandidatesUseCase } from "./abstractions.js";
|
|
14
|
+
class ListCmsEntryStepCandidatesUseCaseImpl {
|
|
15
|
+
constructor(viewer, targets, access, getWorkflow, listCandidates){
|
|
16
|
+
this.viewer = viewer;
|
|
17
|
+
this.targets = targets;
|
|
18
|
+
this.access = access;
|
|
19
|
+
this.getWorkflow = getWorkflow;
|
|
20
|
+
this.listCandidates = listCandidates;
|
|
21
|
+
}
|
|
22
|
+
async execute(input) {
|
|
23
|
+
let viewer;
|
|
24
|
+
try {
|
|
25
|
+
viewer = await this.viewer.get();
|
|
26
|
+
} catch (error) {
|
|
27
|
+
return Result.fail(new ReviewPersistenceError(error instanceof Error ? error : new Error(String(error))));
|
|
28
|
+
}
|
|
29
|
+
if (viewer.isFail()) return Result.fail(viewer.error);
|
|
30
|
+
let target = null;
|
|
31
|
+
if (isCmsNamespace(input.model)) try {
|
|
32
|
+
target = await this.targets.read({
|
|
33
|
+
model: input.model,
|
|
34
|
+
targetRevisionId: input.targetRevisionId
|
|
35
|
+
});
|
|
36
|
+
} catch (error) {
|
|
37
|
+
return Result.fail(new ReviewPersistenceError(error instanceof Error ? error : new Error(String(error))));
|
|
38
|
+
}
|
|
39
|
+
if (!target || target.entry.entryId !== input.targetId) return Result.fail(new ReviewTargetNotFoundError({
|
|
40
|
+
model: input.model,
|
|
41
|
+
targetRevisionId: input.targetRevisionId
|
|
42
|
+
}));
|
|
43
|
+
let canWrite;
|
|
44
|
+
try {
|
|
45
|
+
canWrite = await this.access.canWrite(target);
|
|
46
|
+
} catch (error) {
|
|
47
|
+
return Result.fail(new ReviewPersistenceError(error instanceof Error ? error : new Error(String(error))));
|
|
48
|
+
}
|
|
49
|
+
if (!canWrite) return Result.fail(new WorkflowsNotAuthorizedError({
|
|
50
|
+
action: "list the step's candidates"
|
|
51
|
+
}));
|
|
52
|
+
const workflow = await this.getWorkflow.execute({
|
|
53
|
+
id: input.workflowId
|
|
54
|
+
});
|
|
55
|
+
if (workflow.isFail()) return Result.fail(workflow.error);
|
|
56
|
+
if (!isCmsWorkflow(workflow.value)) return Result.fail(new WorkflowNotFoundError({
|
|
57
|
+
id: input.workflowId
|
|
58
|
+
}));
|
|
59
|
+
const candidates = await this.listCandidates.execute({
|
|
60
|
+
workflowId: input.workflowId,
|
|
61
|
+
stepId: input.stepId,
|
|
62
|
+
model: input.model,
|
|
63
|
+
targetId: input.targetId,
|
|
64
|
+
targetRevisionId: input.targetRevisionId,
|
|
65
|
+
requesterId: viewer.value.actor.id
|
|
66
|
+
});
|
|
67
|
+
if (candidates.isFail()) return Result.fail(candidates.error);
|
|
68
|
+
return Result.ok(redactStepCandidates(candidates.value, viewer.value.permissions));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const ListCmsEntryStepCandidatesUseCase_ListCmsEntryStepCandidatesUseCase = ListCmsEntryStepCandidatesUseCase.createImplementation({
|
|
72
|
+
implementation: ListCmsEntryStepCandidatesUseCaseImpl,
|
|
73
|
+
dependencies: [
|
|
74
|
+
CurrentReviewViewer,
|
|
75
|
+
CmsEntryTargetReader,
|
|
76
|
+
CmsEntryAccess,
|
|
77
|
+
GetWorkflowUseCase,
|
|
78
|
+
ListStepCandidatesUseCase
|
|
79
|
+
]
|
|
80
|
+
});
|
|
81
|
+
export { ListCmsEntryStepCandidatesUseCase_ListCmsEntryStepCandidatesUseCase as ListCmsEntryStepCandidatesUseCase };
|
|
82
|
+
|
|
83
|
+
//# sourceMappingURL=ListCmsEntryStepCandidatesUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/ListCmsEntryStepCandidates/ListCmsEntryStepCandidatesUseCase.js","sources":["../../../../src/features/wrappers/ListCmsEntryStepCandidates/ListCmsEntryStepCandidatesUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { CurrentReviewViewer } from \"@webiny/api-workflows/features/identity/CurrentReviewViewer/index.js\";\nimport { ListStepCandidatesUseCase } from \"@webiny/api-workflows/features/routing/ListStepCandidates/index.js\";\nimport { GetWorkflowUseCase } from \"@webiny/api-workflows/features/workflow/GetWorkflow/index.js\";\nimport { redactStepCandidates } from \"@webiny/api-workflows/domain/routing/redactStepCandidates.js\";\nimport { WorkflowsNotAuthorizedError } from \"@webiny/api-workflows/domain/permissions/errors.js\";\nimport { WorkflowNotFoundError } from \"@webiny/api-workflows/domain/workflow/errors.js\";\nimport {\n ReviewPersistenceError,\n ReviewTargetNotFoundError\n} from \"@webiny/api-workflows/domain/review/errors.js\";\nimport { CmsEntryTargetReader } from \"~/features/target/CmsEntryTargetReader/index.js\";\nimport { CmsEntryAccess } from \"~/features/target/CmsEntryAccess/index.js\";\nimport { isCmsNamespace } from \"~/utils/appName.js\";\nimport { isCmsWorkflow } from \"../shared/cmsWorkflows.js\";\nimport { ListCmsEntryStepCandidatesUseCase as UseCase } from \"./abstractions.js\";\n\n/**\n * The target checks are `RequestCmsEntryReviewUseCase`'s: a target of another app or one the\n * viewer cannot see is not found (R46), a visible target without write access is not authorized.\n * A workflow of another app is not found either (R128), as `GetCmsEntryWorkflowUseCase` answers.\n * The viewer is the requester the engine leaves out of the list.\n */\nclass ListCmsEntryStepCandidatesUseCaseImpl implements UseCase.Interface {\n public constructor(\n private viewer: CurrentReviewViewer.Interface,\n private targets: CmsEntryTargetReader.Interface,\n private access: CmsEntryAccess.Interface,\n private getWorkflow: GetWorkflowUseCase.Interface,\n private listCandidates: ListStepCandidatesUseCase.Interface\n ) {}\n\n public async execute(input: UseCase.Input): UseCase.Return {\n // A failed team or permission load is a persistence error, never a rejection (R87).\n let viewer: Awaited<CurrentReviewViewer.Return>;\n try {\n viewer = await this.viewer.get();\n } catch (error) {\n return Result.fail(\n new ReviewPersistenceError(\n error instanceof Error ? error : new Error(String(error))\n )\n );\n }\n if (viewer.isFail()) {\n return Result.fail(viewer.error);\n }\n\n let target: CmsEntryTargetReader.Target | null = null;\n if (isCmsNamespace(input.model)) {\n try {\n target = await this.targets.read({\n model: input.model,\n targetRevisionId: input.targetRevisionId\n });\n } catch (error) {\n return Result.fail(\n new ReviewPersistenceError(\n error instanceof Error ? error : new Error(String(error))\n )\n );\n }\n }\n if (!target || target.entry.entryId !== input.targetId) {\n return Result.fail(\n new ReviewTargetNotFoundError({\n model: input.model,\n targetRevisionId: input.targetRevisionId\n })\n );\n }\n let canWrite: boolean;\n try {\n canWrite = await this.access.canWrite(target);\n } catch (error) {\n return Result.fail(\n new ReviewPersistenceError(\n error instanceof Error ? error : new Error(String(error))\n )\n );\n }\n if (!canWrite) {\n return Result.fail(\n new WorkflowsNotAuthorizedError({ action: \"list the step's candidates\" })\n );\n }\n\n const workflow = await this.getWorkflow.execute({ id: input.workflowId });\n if (workflow.isFail()) {\n return Result.fail(workflow.error);\n }\n // R128, R46: another app's workflow is not found here; its name never leaks.\n if (!isCmsWorkflow(workflow.value)) {\n return Result.fail(new WorkflowNotFoundError({ id: input.workflowId }));\n }\n\n const candidates = await this.listCandidates.execute({\n workflowId: input.workflowId,\n stepId: input.stepId,\n model: input.model,\n targetId: input.targetId,\n targetRevisionId: input.targetRevisionId,\n requesterId: viewer.value.actor.id\n });\n if (candidates.isFail()) {\n return Result.fail(candidates.error);\n }\n return Result.ok(redactStepCandidates(candidates.value, viewer.value.permissions));\n }\n}\n\nexport const ListCmsEntryStepCandidatesUseCase = UseCase.createImplementation({\n implementation: ListCmsEntryStepCandidatesUseCaseImpl,\n dependencies: [\n CurrentReviewViewer,\n CmsEntryTargetReader,\n CmsEntryAccess,\n GetWorkflowUseCase,\n ListStepCandidatesUseCase\n ]\n});\n"],"names":["ListCmsEntryStepCandidatesUseCaseImpl","viewer","targets","access","getWorkflow","listCandidates","input","error","Result","ReviewPersistenceError","Error","String","target","isCmsNamespace","ReviewTargetNotFoundError","canWrite","WorkflowsNotAuthorizedError","workflow","isCmsWorkflow","WorkflowNotFoundError","candidates","redactStepCandidates","ListCmsEntryStepCandidatesUseCase","UseCase","CurrentReviewViewer","CmsEntryTargetReader","CmsEntryAccess","GetWorkflowUseCase","ListStepCandidatesUseCase"],"mappings":";;;;;;;;;;;;;AAuBA,MAAMA;IACF,YACYC,MAAqC,EACrCC,OAAuC,EACvCC,MAAgC,EAChCC,WAAyC,EACzCC,cAAmD,CAC7D;aALUJ,MAAM,GAANA;aACAC,OAAO,GAAPA;aACAC,MAAM,GAANA;aACAC,WAAW,GAAXA;aACAC,cAAc,GAAdA;IACT;IAEH,MAAa,QAAQC,KAAoB,EAAkB;QAEvD,IAAIL;QACJ,IAAI;YACAA,SAAS,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG;QAClC,EAAE,OAAOM,OAAO;YACZ,OAAOC,OAAO,IAAI,CACd,IAAIC,uBACAF,iBAAiBG,QAAQH,QAAQ,IAAIG,MAAMC,OAAOJ;QAG9D;QACA,IAAIN,OAAO,MAAM,IACb,OAAOO,OAAO,IAAI,CAACP,OAAO,KAAK;QAGnC,IAAIW,SAA6C;QACjD,IAAIC,eAAeP,MAAM,KAAK,GAC1B,IAAI;YACAM,SAAS,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC7B,OAAON,MAAM,KAAK;gBAClB,kBAAkBA,MAAM,gBAAgB;YAC5C;QACJ,EAAE,OAAOC,OAAO;YACZ,OAAOC,OAAO,IAAI,CACd,IAAIC,uBACAF,iBAAiBG,QAAQH,QAAQ,IAAIG,MAAMC,OAAOJ;QAG9D;QAEJ,IAAI,CAACK,UAAUA,OAAO,KAAK,CAAC,OAAO,KAAKN,MAAM,QAAQ,EAClD,OAAOE,OAAO,IAAI,CACd,IAAIM,0BAA0B;YAC1B,OAAOR,MAAM,KAAK;YAClB,kBAAkBA,MAAM,gBAAgB;QAC5C;QAGR,IAAIS;QACJ,IAAI;YACAA,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAACH;QAC1C,EAAE,OAAOL,OAAO;YACZ,OAAOC,OAAO,IAAI,CACd,IAAIC,uBACAF,iBAAiBG,QAAQH,QAAQ,IAAIG,MAAMC,OAAOJ;QAG9D;QACA,IAAI,CAACQ,UACD,OAAOP,OAAO,IAAI,CACd,IAAIQ,4BAA4B;YAAE,QAAQ;QAA6B;QAI/E,MAAMC,WAAW,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YAAE,IAAIX,MAAM,UAAU;QAAC;QACvE,IAAIW,SAAS,MAAM,IACf,OAAOT,OAAO,IAAI,CAACS,SAAS,KAAK;QAGrC,IAAI,CAACC,cAAcD,SAAS,KAAK,GAC7B,OAAOT,OAAO,IAAI,CAAC,IAAIW,sBAAsB;YAAE,IAAIb,MAAM,UAAU;QAAC;QAGxE,MAAMc,aAAa,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YACjD,YAAYd,MAAM,UAAU;YAC5B,QAAQA,MAAM,MAAM;YACpB,OAAOA,MAAM,KAAK;YAClB,UAAUA,MAAM,QAAQ;YACxB,kBAAkBA,MAAM,gBAAgB;YACxC,aAAaL,OAAO,KAAK,CAAC,KAAK,CAAC,EAAE;QACtC;QACA,IAAImB,WAAW,MAAM,IACjB,OAAOZ,OAAO,IAAI,CAACY,WAAW,KAAK;QAEvC,OAAOZ,OAAO,EAAE,CAACa,qBAAqBD,WAAW,KAAK,EAAEnB,OAAO,KAAK,CAAC,WAAW;IACpF;AACJ;AAEO,MAAMqB,sEAAoCC,kCAAAA,oBAA4B,CAAC;IAC1E,gBAAgBvB;IAChB,cAAc;QACVwB;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type Result } from "@webiny/feature/api";
|
|
2
|
+
import type { StepCandidate } from "@webiny/api-workflows/domain/routing/types.js";
|
|
3
|
+
import type { WorkflowsNotAuthenticatedError, WorkflowsNotAuthorizedError } from "@webiny/api-workflows/domain/permissions/errors.js";
|
|
4
|
+
import type { ReviewPersistenceError, ReviewTargetNotFoundError } from "@webiny/api-workflows/domain/review/errors.js";
|
|
5
|
+
import type { ListStepCandidatesUseCase } from "@webiny/api-workflows/features/routing/ListStepCandidates/index.js";
|
|
6
|
+
import type { GetWorkflowUseCase } from "@webiny/api-workflows/features/workflow/GetWorkflow/index.js";
|
|
7
|
+
import type { WorkflowNotFoundError } from "@webiny/api-workflows/domain/workflow/errors.js";
|
|
8
|
+
export interface ListCmsEntryStepCandidatesInput {
|
|
9
|
+
workflowId: string;
|
|
10
|
+
stepId: string;
|
|
11
|
+
/** Namespace id, `cms.<modelId>`. */
|
|
12
|
+
model: string;
|
|
13
|
+
targetId: string;
|
|
14
|
+
targetRevisionId: string;
|
|
15
|
+
}
|
|
16
|
+
export interface IListCmsEntryStepCandidatesUseCaseErrors {
|
|
17
|
+
notAuthenticated: WorkflowsNotAuthenticatedError;
|
|
18
|
+
notAuthorized: WorkflowsNotAuthorizedError;
|
|
19
|
+
targetNotFound: ReviewTargetNotFoundError;
|
|
20
|
+
persistence: ReviewPersistenceError;
|
|
21
|
+
workflow: GetWorkflowUseCase.Error;
|
|
22
|
+
workflowNotFound: WorkflowNotFoundError;
|
|
23
|
+
candidates: ListStepCandidatesUseCase.Error;
|
|
24
|
+
}
|
|
25
|
+
type UseCaseError = IListCmsEntryStepCandidatesUseCaseErrors[keyof IListCmsEntryStepCandidatesUseCaseErrors];
|
|
26
|
+
export interface IListCmsEntryStepCandidatesUseCase {
|
|
27
|
+
execute(input: ListCmsEntryStepCandidatesInput): Promise<Result<StepCandidate[], UseCaseError>>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Who could take a step of a review the viewer is about to request (spec 10, D128, R120): write
|
|
31
|
+
* access to the revision, as for the request itself (D77); a workflow of another app is not found
|
|
32
|
+
* (R46, R128); exclusion reasons only for `editor` / `reassign` (D97).
|
|
33
|
+
*/
|
|
34
|
+
export declare const ListCmsEntryStepCandidatesUseCase: import("@webiny/di").Abstraction<IListCmsEntryStepCandidatesUseCase>;
|
|
35
|
+
export declare namespace ListCmsEntryStepCandidatesUseCase {
|
|
36
|
+
type Interface = IListCmsEntryStepCandidatesUseCase;
|
|
37
|
+
type Input = ListCmsEntryStepCandidatesInput;
|
|
38
|
+
type Error = UseCaseError;
|
|
39
|
+
type Return = Promise<Result<StepCandidate[], UseCaseError>>;
|
|
40
|
+
}
|
|
41
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/ListCmsEntryStepCandidates/abstractions.js","sources":["../../../../src/features/wrappers/ListCmsEntryStepCandidates/abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { StepCandidate } from \"@webiny/api-workflows/domain/routing/types.js\";\nimport type {\n WorkflowsNotAuthenticatedError,\n WorkflowsNotAuthorizedError\n} from \"@webiny/api-workflows/domain/permissions/errors.js\";\nimport type {\n ReviewPersistenceError,\n ReviewTargetNotFoundError\n} from \"@webiny/api-workflows/domain/review/errors.js\";\nimport type { ListStepCandidatesUseCase } from \"@webiny/api-workflows/features/routing/ListStepCandidates/index.js\";\nimport type { GetWorkflowUseCase } from \"@webiny/api-workflows/features/workflow/GetWorkflow/index.js\";\nimport type { WorkflowNotFoundError } from \"@webiny/api-workflows/domain/workflow/errors.js\";\n\nexport interface ListCmsEntryStepCandidatesInput {\n workflowId: string;\n stepId: string;\n /** Namespace id, `cms.<modelId>`. */\n model: string;\n targetId: string;\n targetRevisionId: string;\n}\n\nexport interface IListCmsEntryStepCandidatesUseCaseErrors {\n notAuthenticated: WorkflowsNotAuthenticatedError;\n notAuthorized: WorkflowsNotAuthorizedError;\n targetNotFound: ReviewTargetNotFoundError;\n persistence: ReviewPersistenceError;\n workflow: GetWorkflowUseCase.Error;\n workflowNotFound: WorkflowNotFoundError;\n candidates: ListStepCandidatesUseCase.Error;\n}\n\ntype UseCaseError =\n IListCmsEntryStepCandidatesUseCaseErrors[keyof IListCmsEntryStepCandidatesUseCaseErrors];\n\nexport interface IListCmsEntryStepCandidatesUseCase {\n execute(input: ListCmsEntryStepCandidatesInput): Promise<Result<StepCandidate[], UseCaseError>>;\n}\n\n/**\n * Who could take a step of a review the viewer is about to request (spec 10, D128, R120): write\n * access to the revision, as for the request itself (D77); a workflow of another app is not found\n * (R46, R128); exclusion reasons only for `editor` / `reassign` (D97).\n */\nexport const ListCmsEntryStepCandidatesUseCase =\n createAbstraction<IListCmsEntryStepCandidatesUseCase>(\"ListCmsEntryStepCandidatesUseCase\");\n\nexport namespace ListCmsEntryStepCandidatesUseCase {\n export type Interface = IListCmsEntryStepCandidatesUseCase;\n export type Input = ListCmsEntryStepCandidatesInput;\n export type Error = UseCaseError;\n export type Return = Promise<Result<StepCandidate[], UseCaseError>>;\n}\n"],"names":["ListCmsEntryStepCandidatesUseCase","createAbstraction"],"mappings":";AA6CO,MAAMA,oCACTC,kBAAsD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { ListCmsEntryStepCandidatesUseCase } from "./ListCmsEntryStepCandidatesUseCase.js";
|
|
3
|
+
const ListCmsEntryStepCandidatesFeature = createFeature({
|
|
4
|
+
name: "CmsWorkflows/ListCmsEntryStepCandidates",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(ListCmsEntryStepCandidatesUseCase);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export { ListCmsEntryStepCandidatesFeature };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/ListCmsEntryStepCandidates/feature.js","sources":["../../../../src/features/wrappers/ListCmsEntryStepCandidates/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { ListCmsEntryStepCandidatesUseCase } from \"./ListCmsEntryStepCandidatesUseCase.js\";\n\nexport const ListCmsEntryStepCandidatesFeature = createFeature({\n name: \"CmsWorkflows/ListCmsEntryStepCandidates\",\n register(container) {\n container.register(ListCmsEntryStepCandidatesUseCase);\n }\n});\n"],"names":["ListCmsEntryStepCandidatesFeature","createFeature","container","ListCmsEntryStepCandidatesUseCase"],"mappings":";;AAGO,MAAMA,oCAAoCC,cAAc;IAC3D,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ListCmsEntryStepCandidatesUseCase } from "./abstractions.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ListCmsEntryStepCandidatesUseCase } from "./abstractions.js";
|