@webiny/api-aco 0.0.0-unstable.496cf268ac → 0.0.0-unstable.5387e5f7c8
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/AcoFeature.d.ts +5 -0
- package/AcoFeature.js +134 -0
- package/AcoFeature.js.map +1 -0
- package/AcoFolderSchemaFactory.d.ts +32 -0
- package/AcoFolderSchemaFactory.js +82 -0
- package/AcoFolderSchemaFactory.js.map +1 -0
- package/README.md +6 -28
- package/constants.d.ts +2 -0
- package/constants.js +5 -0
- package/constants.js.map +1 -0
- package/createAcoGraphQL.d.ts +8 -3
- package/createAcoGraphQL.js +59 -81
- package/createAcoGraphQL.js.map +1 -1
- package/domain/folder/abstractions.d.ts +16 -0
- package/domain/folder/abstractions.js +5 -0
- package/domain/folder/abstractions.js.map +1 -0
- package/domain/folder/errors.d.ts +29 -0
- package/domain/folder/errors.js +51 -0
- package/domain/folder/errors.js.map +1 -0
- package/domain/folder/folder.model.d.ts +9 -0
- package/domain/folder/folder.model.js +59 -0
- package/domain/folder/folder.model.js.map +1 -0
- package/exports/api/aco/flp.d.ts +7 -0
- package/exports/api/aco/flp.js +7 -0
- package/exports/api/aco/folder.d.ts +11 -0
- package/exports/api/aco/folder.js +10 -0
- package/features/ai/CreateFolderTool.d.ts +49 -0
- package/features/ai/CreateFolderTool.js +58 -0
- package/features/ai/CreateFolderTool.js.map +1 -0
- package/features/ai/CreateTeamTool.d.ts +48 -0
- package/features/ai/CreateTeamTool.js +56 -0
- package/features/ai/CreateTeamTool.js.map +1 -0
- package/features/ai/DeleteFolderTool.d.ts +48 -0
- package/features/ai/DeleteFolderTool.js +55 -0
- package/features/ai/DeleteFolderTool.js.map +1 -0
- package/features/ai/GrantFolderAccessTool.d.ts +77 -0
- package/features/ai/GrantFolderAccessTool.js +80 -0
- package/features/ai/GrantFolderAccessTool.js.map +1 -0
- package/features/ai/ListFoldersTool.d.ts +47 -0
- package/features/ai/ListFoldersTool.js +57 -0
- package/features/ai/ListFoldersTool.js.map +1 -0
- package/features/ai/ListRolesTool.d.ts +39 -0
- package/features/ai/ListRolesTool.js +48 -0
- package/features/ai/ListRolesTool.js.map +1 -0
- package/features/ai/ListTeamsTool.d.ts +39 -0
- package/features/ai/ListTeamsTool.js +48 -0
- package/features/ai/ListTeamsTool.js.map +1 -0
- package/features/ai/RevokeFolderAccessTool.d.ts +63 -0
- package/features/ai/RevokeFolderAccessTool.js +69 -0
- package/features/ai/RevokeFolderAccessTool.js.map +1 -0
- package/features/ai/assertTargetIsUsable.d.ts +10 -0
- package/features/ai/assertTargetIsUsable.js +14 -0
- package/features/ai/assertTargetIsUsable.js.map +1 -0
- package/features/ai/feature.d.ts +12 -0
- package/features/ai/feature.js +25 -0
- package/features/ai/feature.js.map +1 -0
- package/features/ai/index.d.ts +9 -0
- package/features/ai/index.js +9 -0
- package/features/ai/loadFolderPermissions.d.ts +16 -0
- package/features/ai/loadFolderPermissions.js +14 -0
- package/features/ai/loadFolderPermissions.js.map +1 -0
- package/features/cms/decorators/CreateEntryRevisionFromWithFlpDecorator.d.ts +13 -0
- package/features/cms/decorators/CreateEntryRevisionFromWithFlpDecorator.js +39 -0
- package/features/cms/decorators/CreateEntryRevisionFromWithFlpDecorator.js.map +1 -0
- package/features/cms/decorators/CreateEntryWithFlpDecorator.d.ts +12 -0
- package/features/cms/decorators/CreateEntryWithFlpDecorator.js +33 -0
- package/features/cms/decorators/CreateEntryWithFlpDecorator.js.map +1 -0
- package/features/cms/decorators/DeleteEntryRevisionWithFlpDecorator.d.ts +13 -0
- package/features/cms/decorators/DeleteEntryRevisionWithFlpDecorator.js +39 -0
- package/features/cms/decorators/DeleteEntryRevisionWithFlpDecorator.js.map +1 -0
- package/features/cms/decorators/DeleteEntryWithFlpDecorator.d.ts +13 -0
- package/features/cms/decorators/DeleteEntryWithFlpDecorator.js +41 -0
- package/features/cms/decorators/DeleteEntryWithFlpDecorator.js.map +1 -0
- package/features/cms/decorators/GetEntryByIdWithFlpDecorator.d.ts +12 -0
- package/features/cms/decorators/GetEntryByIdWithFlpDecorator.js +36 -0
- package/features/cms/decorators/GetEntryByIdWithFlpDecorator.js.map +1 -0
- package/features/cms/decorators/GetEntryWithFlpDecorator.d.ts +12 -0
- package/features/cms/decorators/GetEntryWithFlpDecorator.js +36 -0
- package/features/cms/decorators/GetEntryWithFlpDecorator.js.map +1 -0
- package/features/cms/decorators/GetLatestEntriesByIdsWithFlpDecorator.d.ts +13 -0
- package/features/cms/decorators/GetLatestEntriesByIdsWithFlpDecorator.js +41 -0
- package/features/cms/decorators/GetLatestEntriesByIdsWithFlpDecorator.js.map +1 -0
- package/features/cms/decorators/GetPublishedEntriesByIdsWithFlpDecorator.d.ts +13 -0
- package/features/cms/decorators/GetPublishedEntriesByIdsWithFlpDecorator.js +41 -0
- package/features/cms/decorators/GetPublishedEntriesByIdsWithFlpDecorator.js.map +1 -0
- package/features/cms/decorators/ListDeletedEntriesWithFlpDecorator.d.ts +11 -0
- package/features/cms/decorators/ListDeletedEntriesWithFlpDecorator.js +36 -0
- package/features/cms/decorators/ListDeletedEntriesWithFlpDecorator.js.map +1 -0
- package/features/cms/decorators/ListEntriesWithFlpDecorator.d.ts +11 -0
- package/features/cms/decorators/ListEntriesWithFlpDecorator.js +36 -0
- package/features/cms/decorators/ListEntriesWithFlpDecorator.js.map +1 -0
- package/features/cms/decorators/ListLatestEntriesWithFlpDecorator.d.ts +11 -0
- package/features/cms/decorators/ListLatestEntriesWithFlpDecorator.js +36 -0
- package/features/cms/decorators/ListLatestEntriesWithFlpDecorator.js.map +1 -0
- package/features/cms/decorators/ListPublishedEntriesWithFlpDecorator.d.ts +11 -0
- package/features/cms/decorators/ListPublishedEntriesWithFlpDecorator.js +36 -0
- package/features/cms/decorators/ListPublishedEntriesWithFlpDecorator.js.map +1 -0
- package/features/cms/decorators/MoveEntryWithFlpDecorator.d.ts +15 -0
- package/features/cms/decorators/MoveEntryWithFlpDecorator.js +49 -0
- package/features/cms/decorators/MoveEntryWithFlpDecorator.js.map +1 -0
- package/features/cms/decorators/UpdateEntryWithFlpDecorator.d.ts +14 -0
- package/features/cms/decorators/UpdateEntryWithFlpDecorator.js +39 -0
- package/features/cms/decorators/UpdateEntryWithFlpDecorator.js.map +1 -0
- package/features/cms/feature.d.ts +4 -0
- package/features/cms/feature.js +37 -0
- package/features/cms/feature.js.map +1 -0
- package/features/cms/index.d.ts +1 -0
- package/features/cms/index.js +1 -0
- package/features/flp/CreateFlp/CreateFlpUseCase.d.ts +8 -0
- package/features/flp/CreateFlp/CreateFlpUseCase.js +34 -0
- package/features/flp/CreateFlp/CreateFlpUseCase.js.map +1 -0
- package/features/flp/CreateFlp/abstractions.d.ts +9 -0
- package/features/flp/CreateFlp/abstractions.js +5 -0
- package/features/flp/CreateFlp/abstractions.js.map +1 -0
- package/features/flp/CreateFlp/feature.d.ts +5 -0
- package/features/flp/CreateFlp/feature.js +13 -0
- package/features/flp/CreateFlp/feature.js.map +1 -0
- package/features/flp/CreateFlp/index.d.ts +2 -0
- package/features/flp/CreateFlp/index.js +2 -0
- package/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.d.ts +17 -0
- package/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.js +44 -0
- package/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.js.map +1 -0
- package/features/flp/CreateFlpOnFolderCreated/feature.d.ts +4 -0
- package/features/flp/CreateFlpOnFolderCreated/feature.js +11 -0
- package/features/flp/CreateFlpOnFolderCreated/feature.js.map +1 -0
- package/features/flp/CreateFlpOnFolderCreated/index.d.ts +1 -0
- package/features/flp/CreateFlpOnFolderCreated/index.js +1 -0
- package/features/flp/DeleteFlp/DeleteFlpUseCase.d.ts +8 -0
- package/features/flp/DeleteFlp/DeleteFlpUseCase.js +22 -0
- package/features/flp/DeleteFlp/DeleteFlpUseCase.js.map +1 -0
- package/features/flp/DeleteFlp/abstractions.d.ts +9 -0
- package/features/flp/DeleteFlp/abstractions.js +5 -0
- package/features/flp/DeleteFlp/abstractions.js.map +1 -0
- package/features/flp/DeleteFlp/feature.d.ts +5 -0
- package/features/flp/DeleteFlp/feature.js +13 -0
- package/features/flp/DeleteFlp/feature.js.map +1 -0
- package/features/flp/DeleteFlp/index.d.ts +2 -0
- package/features/flp/DeleteFlp/index.js +2 -0
- package/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.d.ts +15 -0
- package/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.js +40 -0
- package/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.js.map +1 -0
- package/features/flp/DeleteFlpOnFolderDeleted/feature.d.ts +4 -0
- package/features/flp/DeleteFlpOnFolderDeleted/feature.js +11 -0
- package/features/flp/DeleteFlpOnFolderDeleted/feature.js.map +1 -0
- package/features/flp/DeleteFlpOnFolderDeleted/index.d.ts +1 -0
- package/features/flp/DeleteFlpOnFolderDeleted/index.js +1 -0
- package/features/flp/FolderLevelPermissions/FolderLevelPermissions.d.ts +35 -0
- package/features/flp/FolderLevelPermissions/FolderLevelPermissions.js +112 -0
- package/features/flp/FolderLevelPermissions/FolderLevelPermissions.js.map +1 -0
- package/features/flp/FolderLevelPermissions/NoopFolderLevelPermissions.d.ts +25 -0
- package/features/flp/FolderLevelPermissions/NoopFolderLevelPermissions.js +48 -0
- package/features/flp/FolderLevelPermissions/NoopFolderLevelPermissions.js.map +1 -0
- package/features/flp/FolderLevelPermissions/abstractions.d.ts +26 -0
- package/features/flp/FolderLevelPermissions/abstractions.js +5 -0
- package/features/flp/FolderLevelPermissions/abstractions.js.map +1 -0
- package/features/flp/FolderLevelPermissions/feature.d.ts +5 -0
- package/features/flp/FolderLevelPermissions/feature.js +11 -0
- package/features/flp/FolderLevelPermissions/feature.js.map +1 -0
- package/features/flp/FolderLevelPermissions/index.d.ts +3 -0
- package/features/flp/FolderLevelPermissions/index.js +3 -0
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.d.ts +7 -0
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.js +19 -0
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.js.map +1 -0
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/ICanAccessFolder.d.ts +9 -0
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/ICanAccessFolder.js +0 -0
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/index.d.ts +2 -0
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/index.js +1 -0
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.d.ts +7 -0
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.js +17 -0
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.js.map +1 -0
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/ICanAccessFolderContent.d.ts +8 -0
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/ICanAccessFolderContent.js +0 -0
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/index.d.ts +2 -0
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/index.js +1 -0
- package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/CanCreateFolderInRoot.d.ts +4 -0
- package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/CanCreateFolderInRoot.js +8 -0
- package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/CanCreateFolderInRoot.js.map +1 -0
- package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/ICanCreateFolderInRoot.d.ts +3 -0
- package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/ICanCreateFolderInRoot.js +0 -0
- package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/index.d.ts +2 -0
- package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/index.js +1 -0
- package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/CheckNotInheritedPermissions.d.ts +5 -0
- package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/CheckNotInheritedPermissions.js +8 -0
- package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/CheckNotInheritedPermissions.js.map +1 -0
- package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/ICheckNotInheritedPermissions.d.ts +4 -0
- package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/ICheckNotInheritedPermissions.js +0 -0
- package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/index.d.ts +2 -0
- package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/index.js +1 -0
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.d.ts +5 -0
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.js +47 -0
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.js.map +1 -0
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.d.ts +8 -0
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.js +14 -0
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.js.map +1 -0
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.d.ts +11 -0
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.js +27 -0
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.js.map +1 -0
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/IGetDefaultPermissions.d.ts +4 -0
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/IGetDefaultPermissions.js +0 -0
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/index.d.ts +3 -0
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/index.js +2 -0
- package/features/flp/FolderLevelPermissions/useCases/index.d.ts +5 -0
- package/features/flp/FolderLevelPermissions/useCases/index.js +5 -0
- package/features/flp/GetFlp/GetFlpUseCase.d.ts +7 -0
- package/features/flp/GetFlp/GetFlpUseCase.js +11 -0
- package/features/flp/GetFlp/GetFlpUseCase.js.map +1 -0
- package/features/flp/GetFlp/abstractions.d.ts +9 -0
- package/features/flp/GetFlp/abstractions.js +5 -0
- package/features/flp/GetFlp/abstractions.js.map +1 -0
- package/features/flp/GetFlp/decorators/GetFlpWithCodeFlps.d.ts +13 -0
- package/features/flp/GetFlp/decorators/GetFlpWithCodeFlps.js +26 -0
- package/features/flp/GetFlp/decorators/GetFlpWithCodeFlps.js.map +1 -0
- package/features/flp/GetFlp/feature.d.ts +4 -0
- package/features/flp/GetFlp/feature.js +13 -0
- package/features/flp/GetFlp/feature.js.map +1 -0
- package/features/flp/GetFlp/index.d.ts +1 -0
- package/features/flp/GetFlp/index.js +1 -0
- package/features/flp/ListFlps/ListFlpsUseCase.d.ts +7 -0
- package/features/flp/ListFlps/ListFlpsUseCase.js +11 -0
- package/features/flp/ListFlps/ListFlpsUseCase.js.map +1 -0
- package/features/flp/ListFlps/abstractions.d.ts +17 -0
- package/features/flp/ListFlps/abstractions.js +5 -0
- package/features/flp/ListFlps/abstractions.js.map +1 -0
- package/features/flp/ListFlps/decorators/ListFlpsWithCodeFlps.d.ts +13 -0
- package/features/flp/ListFlps/decorators/ListFlpsWithCodeFlps.js +27 -0
- package/features/flp/ListFlps/decorators/ListFlpsWithCodeFlps.js.map +1 -0
- package/features/flp/ListFlps/feature.d.ts +4 -0
- package/features/flp/ListFlps/feature.js +13 -0
- package/features/flp/ListFlps/feature.js.map +1 -0
- package/features/flp/ListFlps/index.d.ts +1 -0
- package/features/flp/ListFlps/index.js +1 -0
- package/features/flp/UpdateFlp/UpdateFlpUseCase.d.ts +26 -0
- package/features/flp/UpdateFlp/UpdateFlpUseCase.js +147 -0
- package/features/flp/UpdateFlp/UpdateFlpUseCase.js.map +1 -0
- package/features/flp/UpdateFlp/abstractions.d.ts +19 -0
- package/features/flp/UpdateFlp/abstractions.js +5 -0
- package/features/flp/UpdateFlp/abstractions.js.map +1 -0
- package/features/flp/UpdateFlp/feature.d.ts +5 -0
- package/features/flp/UpdateFlp/feature.js +17 -0
- package/features/flp/UpdateFlp/feature.js.map +1 -0
- package/features/flp/UpdateFlp/index.d.ts +2 -0
- package/features/flp/UpdateFlp/index.js +2 -0
- package/features/flp/UpdateFlpOnFolderUpdated/UpdateFlpOnFolderUpdatedHandler.d.ts +17 -0
- package/features/flp/UpdateFlpOnFolderUpdated/UpdateFlpOnFolderUpdatedHandler.js +44 -0
- package/features/flp/UpdateFlpOnFolderUpdated/UpdateFlpOnFolderUpdatedHandler.js.map +1 -0
- package/features/flp/UpdateFlpOnFolderUpdated/feature.d.ts +4 -0
- package/features/flp/UpdateFlpOnFolderUpdated/feature.js +11 -0
- package/features/flp/UpdateFlpOnFolderUpdated/feature.js.map +1 -0
- package/features/flp/UpdateFlpOnFolderUpdated/index.d.ts +1 -0
- package/features/flp/UpdateFlpOnFolderUpdated/index.js +1 -0
- package/features/flp/shared/CodeFlpMerger.d.ts +26 -0
- package/features/flp/shared/CodeFlpMerger.js +20 -0
- package/features/flp/shared/CodeFlpMerger.js.map +1 -0
- package/features/flp/shared/CodeFlpPath.d.ts +15 -0
- package/features/flp/shared/CodeFlpPath.js +29 -0
- package/features/flp/shared/CodeFlpPath.js.map +1 -0
- package/features/flp/shared/CodeFlpTarget.d.ts +10 -0
- package/features/flp/shared/CodeFlpTarget.js +26 -0
- package/features/flp/shared/CodeFlpTarget.js.map +1 -0
- package/features/flp/shared/CodeFlpsProvider.d.ts +14 -0
- package/features/flp/shared/CodeFlpsProvider.js +33 -0
- package/features/flp/shared/CodeFlpsProvider.js.map +1 -0
- package/features/flp/shared/abstractions.d.ts +77 -0
- package/features/flp/shared/abstractions.js +19 -0
- package/features/flp/shared/abstractions.js.map +1 -0
- package/features/flp/shared/feature.d.ts +5 -0
- package/features/flp/shared/feature.js +17 -0
- package/features/flp/shared/feature.js.map +1 -0
- package/features/flp/shared/index.d.ts +4 -0
- package/features/flp/shared/index.js +4 -0
- package/features/folder/CreateFolder/CreateFolderRepository.d.ts +21 -0
- package/features/folder/CreateFolder/CreateFolderRepository.js +88 -0
- package/features/folder/CreateFolder/CreateFolderRepository.js.map +1 -0
- package/features/folder/CreateFolder/CreateFolderUseCase.d.ts +12 -0
- package/features/folder/CreateFolder/CreateFolderUseCase.js +36 -0
- package/features/folder/CreateFolder/CreateFolderUseCase.js.map +1 -0
- package/features/folder/CreateFolder/abstractions.d.ts +59 -0
- package/features/folder/CreateFolder/abstractions.js +8 -0
- package/features/folder/CreateFolder/abstractions.js.map +1 -0
- package/features/folder/CreateFolder/decorators/CreateFolderWithFolderLevelPermissions.d.ts +19 -0
- package/features/folder/CreateFolder/decorators/CreateFolderWithFolderLevelPermissions.js +56 -0
- package/features/folder/CreateFolder/decorators/CreateFolderWithFolderLevelPermissions.js.map +1 -0
- package/features/folder/CreateFolder/events.d.ts +10 -0
- package/features/folder/CreateFolder/events.js +21 -0
- package/features/folder/CreateFolder/events.js.map +1 -0
- package/features/folder/CreateFolder/feature.d.ts +5 -0
- package/features/folder/CreateFolder/feature.js +15 -0
- package/features/folder/CreateFolder/feature.js.map +1 -0
- package/features/folder/CreateFolder/index.d.ts +2 -0
- package/features/folder/CreateFolder/index.js +2 -0
- package/features/folder/DeleteFolder/DeleteFolderRepository.d.ts +15 -0
- package/features/folder/DeleteFolder/DeleteFolderRepository.js +33 -0
- package/features/folder/DeleteFolder/DeleteFolderRepository.js.map +1 -0
- package/features/folder/DeleteFolder/DeleteFolderUseCase.d.ts +13 -0
- package/features/folder/DeleteFolder/DeleteFolderUseCase.js +47 -0
- package/features/folder/DeleteFolder/DeleteFolderUseCase.js.map +1 -0
- package/features/folder/DeleteFolder/abstractions.d.ts +59 -0
- package/features/folder/DeleteFolder/abstractions.js +8 -0
- package/features/folder/DeleteFolder/abstractions.js.map +1 -0
- package/features/folder/DeleteFolder/decorators/DeleteFolderWithFolderLevelPermissions.d.ts +11 -0
- package/features/folder/DeleteFolder/decorators/DeleteFolderWithFolderLevelPermissions.js +29 -0
- package/features/folder/DeleteFolder/decorators/DeleteFolderWithFolderLevelPermissions.js.map +1 -0
- package/features/folder/DeleteFolder/events.d.ts +10 -0
- package/features/folder/DeleteFolder/events.js +21 -0
- package/features/folder/DeleteFolder/events.js.map +1 -0
- package/features/folder/DeleteFolder/feature.d.ts +5 -0
- package/features/folder/DeleteFolder/feature.js +15 -0
- package/features/folder/DeleteFolder/feature.js.map +1 -0
- package/features/folder/DeleteFolder/index.d.ts +2 -0
- package/features/folder/DeleteFolder/index.js +2 -0
- package/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.d.ts +15 -0
- package/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js +59 -0
- package/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js.map +1 -0
- package/features/folder/EnsureFolderIsEmpty/abstractions.d.ts +21 -0
- package/features/folder/EnsureFolderIsEmpty/abstractions.js +5 -0
- package/features/folder/EnsureFolderIsEmpty/abstractions.js.map +1 -0
- package/features/folder/EnsureFolderIsEmpty/feature.d.ts +4 -0
- package/features/folder/EnsureFolderIsEmpty/feature.js +11 -0
- package/features/folder/EnsureFolderIsEmpty/feature.js.map +1 -0
- package/features/folder/EnsureFolderIsEmpty/index.d.ts +1 -0
- package/features/folder/EnsureFolderIsEmpty/index.js +1 -0
- package/features/folder/EnsureFolderIsEmptyOnDelete/GenericFolderBeforeDeleteHandler.d.ts +12 -0
- package/features/folder/EnsureFolderIsEmptyOnDelete/GenericFolderBeforeDeleteHandler.js +25 -0
- package/features/folder/EnsureFolderIsEmptyOnDelete/GenericFolderBeforeDeleteHandler.js.map +1 -0
- package/features/folder/EnsureFolderIsEmptyOnDelete/feature.d.ts +10 -0
- package/features/folder/EnsureFolderIsEmptyOnDelete/feature.js +11 -0
- package/features/folder/EnsureFolderIsEmptyOnDelete/feature.js.map +1 -0
- package/features/folder/EnsureFolderIsEmptyOnDelete/index.d.ts +1 -0
- package/features/folder/EnsureFolderIsEmptyOnDelete/index.js +1 -0
- package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.d.ts +16 -0
- package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js +52 -0
- package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js.map +1 -0
- package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/feature.d.ts +4 -0
- package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/feature.js +11 -0
- package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/feature.js.map +1 -0
- package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/index.d.ts +1 -0
- package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/index.js +1 -0
- package/features/folder/FolderModelProvider.d.ts +26 -0
- package/features/folder/FolderModelProvider.js +22 -0
- package/features/folder/FolderModelProvider.js.map +1 -0
- package/features/folder/GetAncestors/GetAncestorsRepository.d.ts +15 -0
- package/features/folder/GetAncestors/GetAncestorsRepository.js +59 -0
- package/features/folder/GetAncestors/GetAncestorsRepository.js.map +1 -0
- package/features/folder/GetAncestors/GetAncestorsUseCase.d.ts +10 -0
- package/features/folder/GetAncestors/GetAncestorsUseCase.js +20 -0
- package/features/folder/GetAncestors/GetAncestorsUseCase.js.map +1 -0
- package/features/folder/GetAncestors/abstractions.d.ts +40 -0
- package/features/folder/GetAncestors/abstractions.js +6 -0
- package/features/folder/GetAncestors/abstractions.js.map +1 -0
- package/features/folder/GetAncestors/feature.d.ts +5 -0
- package/features/folder/GetAncestors/feature.js +13 -0
- package/features/folder/GetAncestors/feature.js.map +1 -0
- package/features/folder/GetAncestors/index.d.ts +2 -0
- package/features/folder/GetAncestors/index.js +2 -0
- package/features/folder/GetFolder/GetFolderRepository.d.ts +15 -0
- package/features/folder/GetFolder/GetFolderRepository.js +34 -0
- package/features/folder/GetFolder/GetFolderRepository.js.map +1 -0
- package/features/folder/GetFolder/GetFolderUseCase.d.ts +10 -0
- package/features/folder/GetFolder/GetFolderUseCase.js +20 -0
- package/features/folder/GetFolder/GetFolderUseCase.js.map +1 -0
- package/features/folder/GetFolder/abstractions.d.ts +57 -0
- package/features/folder/GetFolder/abstractions.js +8 -0
- package/features/folder/GetFolder/abstractions.js.map +1 -0
- package/features/folder/GetFolder/decorators/GetFolderWithFolderLevelPermissions.d.ts +29 -0
- package/features/folder/GetFolder/decorators/GetFolderWithFolderLevelPermissions.js +34 -0
- package/features/folder/GetFolder/decorators/GetFolderWithFolderLevelPermissions.js.map +1 -0
- package/features/folder/GetFolder/feature.d.ts +5 -0
- package/features/folder/GetFolder/feature.js +15 -0
- package/features/folder/GetFolder/feature.js.map +1 -0
- package/features/folder/GetFolder/index.d.ts +2 -0
- package/features/folder/GetFolder/index.js +2 -0
- package/features/folder/GetFolderHierarchy/GetFolderHierarchyRepository.d.ts +18 -0
- package/features/folder/GetFolderHierarchy/GetFolderHierarchyRepository.js +86 -0
- package/features/folder/GetFolderHierarchy/GetFolderHierarchyRepository.js.map +1 -0
- package/features/folder/GetFolderHierarchy/GetFolderHierarchyUseCase.d.ts +10 -0
- package/features/folder/GetFolderHierarchy/GetFolderHierarchyUseCase.js +20 -0
- package/features/folder/GetFolderHierarchy/GetFolderHierarchyUseCase.js.map +1 -0
- package/features/folder/GetFolderHierarchy/abstractions.d.ts +38 -0
- package/features/folder/GetFolderHierarchy/abstractions.js +6 -0
- package/features/folder/GetFolderHierarchy/abstractions.js.map +1 -0
- package/features/folder/GetFolderHierarchy/decorators/GetFolderHierarchyWithFolderLevelPermissions.d.ts +16 -0
- package/features/folder/GetFolderHierarchy/decorators/GetFolderHierarchyWithFolderLevelPermissions.js +63 -0
- package/features/folder/GetFolderHierarchy/decorators/GetFolderHierarchyWithFolderLevelPermissions.js.map +1 -0
- package/features/folder/GetFolderHierarchy/feature.d.ts +5 -0
- package/features/folder/GetFolderHierarchy/feature.js +15 -0
- package/features/folder/GetFolderHierarchy/feature.js.map +1 -0
- package/features/folder/GetFolderHierarchy/index.d.ts +2 -0
- package/features/folder/GetFolderHierarchy/index.js +2 -0
- package/features/folder/ListFolderLevelPermissionsTargets/ListFolderLevelPermissionsTargetsUseCase.d.ts +13 -0
- package/features/folder/ListFolderLevelPermissionsTargets/ListFolderLevelPermissionsTargetsUseCase.js +75 -0
- package/features/folder/ListFolderLevelPermissionsTargets/ListFolderLevelPermissionsTargetsUseCase.js.map +1 -0
- package/features/folder/ListFolderLevelPermissionsTargets/abstractions.d.ts +11 -0
- package/features/folder/ListFolderLevelPermissionsTargets/abstractions.js +5 -0
- package/features/folder/ListFolderLevelPermissionsTargets/abstractions.js.map +1 -0
- package/features/folder/ListFolderLevelPermissionsTargets/feature.d.ts +4 -0
- package/features/folder/ListFolderLevelPermissionsTargets/feature.js +11 -0
- package/features/folder/ListFolderLevelPermissionsTargets/feature.js.map +1 -0
- package/features/folder/ListFolderLevelPermissionsTargets/index.d.ts +1 -0
- package/features/folder/ListFolderLevelPermissionsTargets/index.js +1 -0
- package/features/folder/ListFolders/ListFoldersRepository.d.ts +17 -0
- package/features/folder/ListFolders/ListFoldersRepository.js +53 -0
- package/features/folder/ListFolders/ListFoldersRepository.js.map +1 -0
- package/features/folder/ListFolders/ListFoldersUseCase.d.ts +9 -0
- package/features/folder/ListFolders/ListFoldersUseCase.js +20 -0
- package/features/folder/ListFolders/ListFoldersUseCase.js.map +1 -0
- package/features/folder/ListFolders/abstractions.d.ts +44 -0
- package/features/folder/ListFolders/abstractions.js +6 -0
- package/features/folder/ListFolders/abstractions.js.map +1 -0
- package/features/folder/ListFolders/decorators/ListFoldersWithFolderLevelPermissions.d.ts +17 -0
- package/features/folder/ListFolders/decorators/ListFoldersWithFolderLevelPermissions.js +65 -0
- package/features/folder/ListFolders/decorators/ListFoldersWithFolderLevelPermissions.js.map +1 -0
- package/features/folder/ListFolders/feature.d.ts +5 -0
- package/features/folder/ListFolders/feature.js +15 -0
- package/features/folder/ListFolders/feature.js.map +1 -0
- package/features/folder/ListFolders/index.d.ts +2 -0
- package/features/folder/ListFolders/index.js +2 -0
- package/features/folder/NotifyFolderChange/NotifyFolderChangeUseCase.d.ts +11 -0
- package/features/folder/NotifyFolderChange/NotifyFolderChangeUseCase.js +38 -0
- package/features/folder/NotifyFolderChange/NotifyFolderChangeUseCase.js.map +1 -0
- package/features/folder/NotifyFolderChange/NotifyOnFolderDeletedHandler.d.ts +12 -0
- package/features/folder/NotifyFolderChange/NotifyOnFolderDeletedHandler.js +24 -0
- package/features/folder/NotifyFolderChange/NotifyOnFolderDeletedHandler.js.map +1 -0
- package/features/folder/NotifyFolderChange/abstractions.d.ts +28 -0
- package/features/folder/NotifyFolderChange/abstractions.js +8 -0
- package/features/folder/NotifyFolderChange/abstractions.js.map +1 -0
- package/features/folder/NotifyFolderChange/feature.d.ts +9 -0
- package/features/folder/NotifyFolderChange/feature.js +13 -0
- package/features/folder/NotifyFolderChange/feature.js.map +1 -0
- package/features/folder/NotifyFolderChange/index.d.ts +2 -0
- package/features/folder/NotifyFolderChange/index.js +2 -0
- package/features/folder/UpdateFolder/UpdateFolderRepository.d.ts +21 -0
- package/features/folder/UpdateFolder/UpdateFolderRepository.js +87 -0
- package/features/folder/UpdateFolder/UpdateFolderRepository.js.map +1 -0
- package/features/folder/UpdateFolder/UpdateFolderUseCase.d.ts +14 -0
- package/features/folder/UpdateFolder/UpdateFolderUseCase.js +48 -0
- package/features/folder/UpdateFolder/UpdateFolderUseCase.js.map +1 -0
- package/features/folder/UpdateFolder/abstractions.d.ts +64 -0
- package/features/folder/UpdateFolder/abstractions.js +8 -0
- package/features/folder/UpdateFolder/abstractions.js.map +1 -0
- package/features/folder/UpdateFolder/decorators/UpdateFolderWithFolderLevelPermissions.d.ts +26 -0
- package/features/folder/UpdateFolder/decorators/UpdateFolderWithFolderLevelPermissions.js +106 -0
- package/features/folder/UpdateFolder/decorators/UpdateFolderWithFolderLevelPermissions.js.map +1 -0
- package/features/folder/UpdateFolder/events.d.ts +10 -0
- package/features/folder/UpdateFolder/events.js +21 -0
- package/features/folder/UpdateFolder/events.js.map +1 -0
- package/features/folder/UpdateFolder/feature.d.ts +5 -0
- package/features/folder/UpdateFolder/feature.js +15 -0
- package/features/folder/UpdateFolder/feature.js.map +1 -0
- package/features/folder/UpdateFolder/index.d.ts +2 -0
- package/features/folder/UpdateFolder/index.js +2 -0
- package/features/folder/shared/EntryToFolderMapper.d.ts +5 -0
- package/features/folder/shared/EntryToFolderMapper.js +23 -0
- package/features/folder/shared/EntryToFolderMapper.js.map +1 -0
- package/features/folder/shared/abstractions.d.ts +20 -0
- package/features/folder/shared/abstractions.js +8 -0
- package/features/folder/shared/abstractions.js.map +1 -0
- package/filter/filter.crud.d.ts +3 -0
- package/filter/filter.crud.js +30 -0
- package/filter/filter.crud.js.map +1 -0
- package/filter/filter.gql.d.ts +2 -0
- package/filter/filter.gql.js +164 -0
- package/filter/filter.gql.js.map +1 -0
- package/filter/filter.model.d.ts +9 -0
- package/filter/filter.model.js +51 -0
- package/filter/filter.model.js.map +1 -0
- package/filter/filter.so.d.ts +9 -0
- package/filter/filter.so.js +96 -0
- package/filter/filter.so.js.map +1 -0
- package/filter/filter.types.d.ts +67 -0
- package/filter/filter.types.js +8 -0
- package/filter/filter.types.js.map +1 -0
- package/flp/flp.crud.d.ts +7 -0
- package/flp/flp.crud.js +74 -0
- package/flp/flp.crud.js.map +1 -0
- package/flp/flp.types.d.ts +98 -0
- package/flp/flp.types.js +0 -0
- package/flp/index.d.ts +2 -0
- package/flp/index.js +2 -0
- package/flp/tasks/createFlp.task.d.ts +25 -0
- package/flp/tasks/createFlp.task.js +53 -0
- package/flp/tasks/createFlp.task.js.map +1 -0
- package/flp/tasks/deleteFlp.task.d.ts +23 -0
- package/flp/tasks/deleteFlp.task.js +45 -0
- package/flp/tasks/deleteFlp.task.js.map +1 -0
- package/flp/tasks/index.d.ts +4 -0
- package/flp/tasks/index.js +7 -0
- package/flp/tasks/index.js.map +1 -0
- package/flp/tasks/syncFlp.task.d.ts +27 -0
- package/flp/tasks/syncFlp.task.js +121 -0
- package/flp/tasks/syncFlp.task.js.map +1 -0
- package/flp/tasks/updateFlp.task.d.ts +25 -0
- package/flp/tasks/updateFlp.task.js +64 -0
- package/flp/tasks/updateFlp.task.js.map +1 -0
- package/folder/createFolderModelModifier.d.ts +36 -0
- package/folder/createFolderModelModifier.js +61 -0
- package/folder/createFolderModelModifier.js.map +1 -0
- package/folder/createFolderTypeDefs.d.ts +8 -0
- package/folder/createFolderTypeDefs.js +178 -0
- package/folder/createFolderTypeDefs.js.map +1 -0
- package/folder/folder.gql.d.ts +4 -3
- package/folder/folder.gql.js +123 -101
- package/folder/folder.gql.js.map +1 -1
- package/folder/folder.types.d.ts +51 -58
- package/folder/folder.types.js +0 -5
- package/index.d.ts +3 -1
- package/index.js +3 -14
- package/package.json +36 -39
- package/types.d.ts +26 -16
- package/types.js +8 -11
- package/types.js.map +1 -1
- package/utils/FoldersCacheFactory.d.ts +10 -0
- package/utils/FoldersCacheFactory.js +25 -0
- package/utils/FoldersCacheFactory.js.map +1 -0
- package/utils/ListCache.d.ts +23 -0
- package/utils/ListCache.js +24 -0
- package/utils/ListCache.js.map +1 -0
- package/utils/Path.d.ts +3 -0
- package/utils/Path.js +10 -0
- package/utils/Path.js.map +1 -0
- package/utils/compress.d.ts +4 -0
- package/utils/compress.js +13 -0
- package/utils/compress.js.map +1 -0
- package/utils/createListSort.d.ts +3 -2
- package/utils/createListSort.js +6 -12
- package/utils/createListSort.js.map +1 -1
- package/utils/createOperationsWrapper.d.ts +6 -3
- package/utils/createOperationsWrapper.js +14 -28
- package/utils/createOperationsWrapper.js.map +1 -1
- package/utils/decorators/CmsEntriesCrudDecorators.d.ts +11 -0
- package/utils/decorators/CmsEntriesCrudDecorators.js +179 -0
- package/utils/decorators/CmsEntriesCrudDecorators.js.map +1 -0
- package/utils/decorators/FilterEntriesByFolderFactory.d.ts +7 -0
- package/utils/decorators/FilterEntriesByFolderFactory.js +22 -0
- package/utils/decorators/FilterEntriesByFolderFactory.js.map +1 -0
- package/utils/decorators/ListEntriesFactory.d.ts +17 -0
- package/utils/decorators/ListEntriesFactory.js +73 -0
- package/utils/decorators/ListEntriesFactory.js.map +1 -0
- package/utils/decorators/hasRootFolderId.d.ts +7 -0
- package/utils/decorators/hasRootFolderId.js +13 -0
- package/utils/decorators/hasRootFolderId.js.map +1 -0
- package/utils/decorators/isPageModel.d.ts +5 -0
- package/utils/decorators/isPageModel.js +8 -0
- package/utils/decorators/isPageModel.js.map +1 -0
- package/utils/ensureAuthentication.d.ts +2 -0
- package/utils/ensureAuthentication.js +11 -0
- package/utils/ensureAuthentication.js.map +1 -0
- package/utils/pickEntryFieldValues.d.ts +3 -0
- package/utils/pickEntryFieldValues.js +29 -0
- package/utils/pickEntryFieldValues.js.map +1 -0
- package/utils/resolve.d.ts +2 -2
- package/utils/resolve.js +10 -14
- package/utils/resolve.js.map +1 -1
- package/context/folders.d.ts +0 -2
- package/context/folders.js +0 -261
- package/context/folders.js.map +0 -1
- package/context/index.d.ts +0 -2
- package/context/index.js +0 -22
- package/context/index.js.map +0 -1
- package/context/links.d.ts +0 -2
- package/context/links.js +0 -270
- package/context/links.js.map +0 -1
- package/createAcoContext.d.ts +0 -3
- package/createAcoContext.js +0 -63
- package/createAcoContext.js.map +0 -1
- package/createAcoCrud.d.ts +0 -2
- package/createAcoCrud.js +0 -17
- package/createAcoCrud.js.map +0 -1
- package/createAcoFields.d.ts +0 -2
- package/createAcoFields.js +0 -40
- package/createAcoFields.js.map +0 -1
- package/createAcoHooks.d.ts +0 -2
- package/createAcoHooks.js +0 -11
- package/createAcoHooks.js.map +0 -1
- package/createAcoModels.d.ts +0 -2
- package/createAcoModels.js +0 -67
- package/createAcoModels.js.map +0 -1
- package/createAcoStorageOperations.d.ts +0 -10
- package/createAcoStorageOperations.js +0 -19
- package/createAcoStorageOperations.js.map +0 -1
- package/folder/folder.crud.d.ts +0 -3
- package/folder/folder.crud.js +0 -92
- package/folder/folder.crud.js.map +0 -1
- package/folder/folder.model.d.ts +0 -6
- package/folder/folder.model.js +0 -79
- package/folder/folder.model.js.map +0 -1
- package/folder/folder.so.d.ts +0 -3
- package/folder/folder.so.js +0 -151
- package/folder/folder.so.js.map +0 -1
- package/folder/folder.types.js.map +0 -1
- package/folder/onFolderBeforeDelete.hook.d.ts +0 -2
- package/folder/onFolderBeforeDelete.hook.js +0 -53
- package/folder/onFolderBeforeDelete.hook.js.map +0 -1
- package/graphql/base.gql.d.ts +0 -3
- package/graphql/base.gql.js +0 -63
- package/graphql/base.gql.js.map +0 -1
- package/graphql/folders.gql.d.ts +0 -3
- package/graphql/folders.gql.js +0 -126
- package/graphql/folders.gql.js.map +0 -1
- package/graphql/index.d.ts +0 -1
- package/graphql/index.js +0 -15
- package/graphql/index.js.map +0 -1
- package/graphql/links.gql.d.ts +0 -3
- package/graphql/links.gql.js +0 -123
- package/graphql/links.gql.js.map +0 -1
- package/index.js.map +0 -1
- package/record/record.crud.d.ts +0 -3
- package/record/record.crud.js +0 -92
- package/record/record.crud.js.map +0 -1
- package/record/record.gql.d.ts +0 -3
- package/record/record.gql.js +0 -117
- package/record/record.gql.js.map +0 -1
- package/record/record.model.d.ts +0 -6
- package/record/record.model.js +0 -63
- package/record/record.model.js.map +0 -1
- package/record/record.so.d.ts +0 -3
- package/record/record.so.js +0 -98
- package/record/record.so.js.map +0 -1
- package/record/record.types.d.ts +0 -91
- package/record/record.types.js +0 -5
- package/record/record.types.js.map +0 -1
- package/subscriptions/afterFolderDelete.d.ts +0 -3
- package/subscriptions/afterFolderDelete.js +0 -62
- package/subscriptions/afterFolderDelete.js.map +0 -1
- package/subscriptions/index.d.ts +0 -3
- package/subscriptions/index.js +0 -14
- package/subscriptions/index.js.map +0 -1
- package/utils/createModelField.d.ts +0 -6
- package/utils/createModelField.js +0 -39
- package/utils/createModelField.js.map +0 -1
- package/utils/fieldResolver.d.ts +0 -16
- package/utils/fieldResolver.js +0 -44
- package/utils/fieldResolver.js.map +0 -1
- package/utils/getFieldValues.d.ts +0 -2
- package/utils/getFieldValues.js +0 -19
- package/utils/getFieldValues.js.map +0 -1
- package/utils/isInstallationPending.d.ts +0 -4
- package/utils/isInstallationPending.js +0 -21
- package/utils/isInstallationPending.js.map +0 -1
- package/utils/modelFactory.d.ts +0 -17
- package/utils/modelFactory.js +0 -23
- package/utils/modelFactory.js.map +0 -1
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { FolderAccessLevel, FolderPermission } from "../../../flp/flp.types.js";
|
|
2
|
+
interface CodeTeamPermission {
|
|
3
|
+
/** Slug of the team the permission is granted to. */
|
|
4
|
+
team: string;
|
|
5
|
+
user?: never;
|
|
6
|
+
level: FolderAccessLevel;
|
|
7
|
+
}
|
|
8
|
+
interface CodeUserPermission {
|
|
9
|
+
/** ID of the admin user the permission is granted to. */
|
|
10
|
+
user: string;
|
|
11
|
+
team?: never;
|
|
12
|
+
level: FolderAccessLevel;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A permission grants a level to exactly one target: either a team or a single admin user. The
|
|
16
|
+
* `team:` / `admin:` target strings used internally are generated from these.
|
|
17
|
+
*
|
|
18
|
+
* Prefer `team` — team slugs are authored by hand and stable, while user IDs are generated at
|
|
19
|
+
* runtime and differ per environment.
|
|
20
|
+
*/
|
|
21
|
+
export type CodeFolderPermission = CodeTeamPermission | CodeUserPermission;
|
|
22
|
+
export type CodeFlp = {
|
|
23
|
+
/**
|
|
24
|
+
* Folder type the rule applies to. Use `FlpFactory.FolderType` to build the built-in ones
|
|
25
|
+
* instead of writing the string by hand.
|
|
26
|
+
*/
|
|
27
|
+
type: string;
|
|
28
|
+
/**
|
|
29
|
+
* Folder path the rule binds to. The leading `root` segment is optional, so both `/marketing`
|
|
30
|
+
* and `root/marketing` are accepted. A trailing `/*` matches the folder and its whole subtree.
|
|
31
|
+
*/
|
|
32
|
+
path: string;
|
|
33
|
+
permissions: CodeFolderPermission[];
|
|
34
|
+
};
|
|
35
|
+
export interface IFlpFactory {
|
|
36
|
+
execute(): Promise<CodeFlp[]>;
|
|
37
|
+
}
|
|
38
|
+
/** Provide code-defined folder-level permissions. */
|
|
39
|
+
export declare const FlpFactory: import("@webiny/di").Abstraction<IFlpFactory> & {
|
|
40
|
+
FolderType: {
|
|
41
|
+
/** File Manager folders. */
|
|
42
|
+
FileManager: {
|
|
43
|
+
/** Folders holding files. */
|
|
44
|
+
Files: string;
|
|
45
|
+
};
|
|
46
|
+
/** Headless CMS folders. */
|
|
47
|
+
Cms: {
|
|
48
|
+
/** Folders holding entries of a content model, addressed by its `modelId`. */
|
|
49
|
+
Entries(modelId: string): string;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
export declare namespace FlpFactory {
|
|
54
|
+
type Interface = IFlpFactory;
|
|
55
|
+
type Return = Promise<CodeFlp[]>;
|
|
56
|
+
type Flp = CodeFlp;
|
|
57
|
+
type Permission = CodeFolderPermission;
|
|
58
|
+
}
|
|
59
|
+
export interface GetCodePermissionsParams {
|
|
60
|
+
type: string;
|
|
61
|
+
path: string;
|
|
62
|
+
}
|
|
63
|
+
export interface ICodeFlpsProvider {
|
|
64
|
+
/**
|
|
65
|
+
* Return all code-defined permissions that apply to the given folder type and path.
|
|
66
|
+
*/
|
|
67
|
+
getPermissions(params: GetCodePermissionsParams): Promise<FolderPermission[]>;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Resolve code-defined folder-level permissions for a given folder. Only permissions contributed by
|
|
71
|
+
* an `FlpFactory` are considered — the ones stored in the database are loaded separately.
|
|
72
|
+
*/
|
|
73
|
+
export declare const CodeFlpsProvider: import("@webiny/di").Abstraction<ICodeFlpsProvider>;
|
|
74
|
+
export declare namespace CodeFlpsProvider {
|
|
75
|
+
type Interface = ICodeFlpsProvider;
|
|
76
|
+
}
|
|
77
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
+
import { FM_FILE_TYPE } from "../../../constants.js";
|
|
3
|
+
const FolderType = {
|
|
4
|
+
FileManager: {
|
|
5
|
+
Files: FM_FILE_TYPE
|
|
6
|
+
},
|
|
7
|
+
Cms: {
|
|
8
|
+
Entries (modelId) {
|
|
9
|
+
return `cms:${modelId}`;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const FlpFactory = Object.assign(createAbstraction("FlpFactory"), {
|
|
14
|
+
FolderType: FolderType
|
|
15
|
+
});
|
|
16
|
+
const CodeFlpsProvider = createAbstraction("CodeFlpsProvider");
|
|
17
|
+
export { CodeFlpsProvider, FlpFactory };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=abstractions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/flp/shared/abstractions.js","sources":["../../../../src/features/flp/shared/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { FM_FILE_TYPE } from \"~/constants.js\";\nimport type { FolderAccessLevel, FolderPermission } from \"~/flp/flp.types.js\";\n\ninterface CodeTeamPermission {\n /** Slug of the team the permission is granted to. */\n team: string;\n user?: never;\n level: FolderAccessLevel;\n}\n\ninterface CodeUserPermission {\n /** ID of the admin user the permission is granted to. */\n user: string;\n team?: never;\n level: FolderAccessLevel;\n}\n\n/**\n * A permission grants a level to exactly one target: either a team or a single admin user. The\n * `team:` / `admin:` target strings used internally are generated from these.\n *\n * Prefer `team` — team slugs are authored by hand and stable, while user IDs are generated at\n * runtime and differ per environment.\n */\nexport type CodeFolderPermission = CodeTeamPermission | CodeUserPermission;\n\nexport type CodeFlp = {\n /**\n * Folder type the rule applies to. Use `FlpFactory.FolderType` to build the built-in ones\n * instead of writing the string by hand.\n */\n type: string;\n /**\n * Folder path the rule binds to. The leading `root` segment is optional, so both `/marketing`\n * and `root/marketing` are accepted. A trailing `/*` matches the folder and its whole subtree.\n */\n path: string;\n permissions: CodeFolderPermission[];\n};\n\nexport interface IFlpFactory {\n execute(): Promise<CodeFlp[]>;\n}\n\n/**\n * The folder types shipped with Webiny, grouped by the app that owns them, so `CodeFlp.type` does\n * not have to be written by hand.\n *\n * Folder types stay open-ended — every app registering folders picks its own type — so `type`\n * remains a plain `string` and a custom app can still pass its own value directly.\n */\nconst FolderType = {\n /** File Manager folders. */\n FileManager: {\n /** Folders holding files. */\n Files: FM_FILE_TYPE as string\n },\n /** Headless CMS folders. */\n Cms: {\n /** Folders holding entries of a content model, addressed by its `modelId`. */\n Entries(modelId: string): string {\n return `cms:${modelId}`;\n }\n }\n};\n\n/** Provide code-defined folder-level permissions. */\nexport const FlpFactory = Object.assign(createAbstraction<IFlpFactory>(\"FlpFactory\"), {\n FolderType\n});\n\nexport namespace FlpFactory {\n export type Interface = IFlpFactory;\n export type Return = Promise<CodeFlp[]>;\n export type Flp = CodeFlp;\n export type Permission = CodeFolderPermission;\n}\n\nexport interface GetCodePermissionsParams {\n type: string;\n path: string;\n}\n\nexport interface ICodeFlpsProvider {\n /**\n * Return all code-defined permissions that apply to the given folder type and path.\n */\n getPermissions(params: GetCodePermissionsParams): Promise<FolderPermission[]>;\n}\n\n/**\n * Resolve code-defined folder-level permissions for a given folder. Only permissions contributed by\n * an `FlpFactory` are considered — the ones stored in the database are loaded separately.\n */\nexport const CodeFlpsProvider = createAbstraction<ICodeFlpsProvider>(\"CodeFlpsProvider\");\n\nexport namespace CodeFlpsProvider {\n export type Interface = ICodeFlpsProvider;\n}\n"],"names":["FolderType","FM_FILE_TYPE","modelId","FlpFactory","Object","createAbstraction","CodeFlpsProvider"],"mappings":";;AAoDA,MAAMA,aAAa;IAEf,aAAa;QAET,OAAOC;IACX;IAEA,KAAK;QAED,SAAQC,OAAe;YACnB,OAAO,CAAC,IAAI,EAAEA,SAAS;QAC3B;IACJ;AACJ;AAGO,MAAMC,aAAaC,OAAO,MAAM,CAACC,kBAA+B,eAAe;IAClFL,YAAAA;AACJ;AAyBO,MAAMM,mBAAmBD,kBAAqC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { FeatureFlags } from "@webiny/api-core/features/featureFlags/abstractions.js";
|
|
3
|
+
import { CodeFlpsProvider } from "./CodeFlpsProvider.js";
|
|
4
|
+
import { GetFlpWithCodeFlps } from "../GetFlp/decorators/GetFlpWithCodeFlps.js";
|
|
5
|
+
import { ListFlpsWithCodeFlps } from "../ListFlps/decorators/ListFlpsWithCodeFlps.js";
|
|
6
|
+
const CodeFlpsFeature = createFeature({
|
|
7
|
+
name: "CodeFlps",
|
|
8
|
+
register (container) {
|
|
9
|
+
if (!container.resolve(FeatureFlags).get().isEnabled("advancedAccessControlLayer.folderLevelPermissions")) return;
|
|
10
|
+
container.register(CodeFlpsProvider).inSingletonScope();
|
|
11
|
+
container.registerDecorator(GetFlpWithCodeFlps);
|
|
12
|
+
container.registerDecorator(ListFlpsWithCodeFlps);
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
export { CodeFlpsFeature };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/flp/shared/feature.js","sources":["../../../../src/features/flp/shared/feature.ts"],"sourcesContent":["import { type Container, createFeature } from \"@webiny/feature/api\";\nimport { FeatureFlags } from \"@webiny/api-core/features/featureFlags/abstractions.js\";\nimport { CodeFlpsProvider } from \"./CodeFlpsProvider.js\";\nimport { GetFlpWithCodeFlps } from \"~/features/flp/GetFlp/decorators/GetFlpWithCodeFlps.js\";\nimport { ListFlpsWithCodeFlps } from \"~/features/flp/ListFlps/decorators/ListFlpsWithCodeFlps.js\";\n\nexport const CodeFlpsFeature = createFeature({\n name: \"CodeFlps\",\n register(container: Container) {\n // Code-defined FLPs are part of folder-level permissions, which is license-gated. Check at\n // register time so nothing wires up — and no code permission is ever enforced — without the\n // entitlement.\n if (\n !container\n .resolve(FeatureFlags)\n .get()\n .isEnabled(\"advancedAccessControlLayer.folderLevelPermissions\")\n ) {\n return;\n }\n\n container.register(CodeFlpsProvider).inSingletonScope();\n container.registerDecorator(GetFlpWithCodeFlps);\n container.registerDecorator(ListFlpsWithCodeFlps);\n }\n});\n"],"names":["CodeFlpsFeature","createFeature","container","FeatureFlags","CodeFlpsProvider","GetFlpWithCodeFlps","ListFlpsWithCodeFlps"],"mappings":";;;;;AAMO,MAAMA,kBAAkBC,cAAc;IACzC,MAAM;IACN,UAASC,SAAoB;QAIzB,IACI,CAACA,UACI,OAAO,CAACC,cACR,GAAG,GACH,SAAS,CAAC,sDAEf;QAGJD,UAAU,QAAQ,CAACE,kBAAkB,gBAAgB;QACrDF,UAAU,iBAAiB,CAACG;QAC5BH,UAAU,iBAAiB,CAACI;IAChC;AACJ"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { CreateFolderRepository as RepositoryAbstraction, type ICreateFolderRepository } from "./abstractions.js";
|
|
3
|
+
import { CreateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/CreateEntry";
|
|
4
|
+
import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries";
|
|
5
|
+
import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById";
|
|
6
|
+
import { FolderModelProvider } from "../../../domain/folder/abstractions.js";
|
|
7
|
+
import type { CreateFolderParams, Folder } from "../../../folder/folder.types.js";
|
|
8
|
+
declare class CreateFolderRepositoryImpl implements ICreateFolderRepository {
|
|
9
|
+
private createEntry;
|
|
10
|
+
private listLatestEntries;
|
|
11
|
+
private getEntryById;
|
|
12
|
+
private folderModelProvider;
|
|
13
|
+
constructor(createEntry: CreateEntryUseCase.Interface, listLatestEntries: ListLatestEntriesUseCase.Interface, getEntryById: GetEntryByIdUseCase.Interface, folderModelProvider: FolderModelProvider.Interface);
|
|
14
|
+
execute(data: CreateFolderParams): Promise<Result<Folder, RepositoryAbstraction.Error>>;
|
|
15
|
+
private checkExistingFolder;
|
|
16
|
+
private createFolderPath;
|
|
17
|
+
}
|
|
18
|
+
export declare const CreateFolderRepository: typeof CreateFolderRepositoryImpl & {
|
|
19
|
+
__abstraction: import("@webiny/di").Abstraction<ICreateFolderRepository>;
|
|
20
|
+
};
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { CreateFolderRepository } from "./abstractions.js";
|
|
3
|
+
import { CreateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/CreateEntry";
|
|
4
|
+
import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries";
|
|
5
|
+
import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById";
|
|
6
|
+
import { FolderModelProvider } from "../../../domain/folder/abstractions.js";
|
|
7
|
+
import { EntryToFolderMapper } from "../shared/EntryToFolderMapper.js";
|
|
8
|
+
import { FolderPersistenceError, FolderValidationError } from "../../../domain/folder/errors.js";
|
|
9
|
+
import { Path } from "../../../utils/Path.js";
|
|
10
|
+
import { EntryId } from "@webiny/api-headless-cms/exports/api/cms/entry.js";
|
|
11
|
+
class CreateFolderRepositoryImpl {
|
|
12
|
+
constructor(createEntry, listLatestEntries, getEntryById, folderModelProvider){
|
|
13
|
+
this.createEntry = createEntry;
|
|
14
|
+
this.listLatestEntries = listLatestEntries;
|
|
15
|
+
this.getEntryById = getEntryById;
|
|
16
|
+
this.folderModelProvider = folderModelProvider;
|
|
17
|
+
}
|
|
18
|
+
async execute(data) {
|
|
19
|
+
const folderModel = await this.folderModelProvider.get();
|
|
20
|
+
const checkResult = await this.checkExistingFolder({
|
|
21
|
+
type: data.type,
|
|
22
|
+
slug: data.slug,
|
|
23
|
+
parentId: data.parentId
|
|
24
|
+
});
|
|
25
|
+
if (checkResult.isFail()) return Result.fail(checkResult.error);
|
|
26
|
+
const pathResult = await this.createFolderPath({
|
|
27
|
+
slug: data.slug,
|
|
28
|
+
parentId: data.parentId
|
|
29
|
+
});
|
|
30
|
+
if (pathResult.isFail()) return Result.fail(pathResult.error);
|
|
31
|
+
const result = await this.createEntry.execute(folderModel, {
|
|
32
|
+
values: {
|
|
33
|
+
...data,
|
|
34
|
+
parentId: data.parentId || null,
|
|
35
|
+
path: pathResult.value
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
if (result.isFail()) {
|
|
39
|
+
if ("Cms/Entry/ValidationError" === result.error.code) return Result.fail(new FolderValidationError(result.error.message));
|
|
40
|
+
return Result.fail(new FolderPersistenceError(result.error));
|
|
41
|
+
}
|
|
42
|
+
const folder = EntryToFolderMapper.toFolder(result.value);
|
|
43
|
+
return Result.ok(folder);
|
|
44
|
+
}
|
|
45
|
+
async checkExistingFolder(params) {
|
|
46
|
+
const folderModel = await this.folderModelProvider.get();
|
|
47
|
+
const { type, slug, parentId, excludeId } = params;
|
|
48
|
+
const result = await this.listLatestEntries.execute(folderModel, {
|
|
49
|
+
where: {
|
|
50
|
+
latest: true,
|
|
51
|
+
values: {
|
|
52
|
+
type,
|
|
53
|
+
slug,
|
|
54
|
+
parentId
|
|
55
|
+
},
|
|
56
|
+
...excludeId ? {
|
|
57
|
+
entryId_not: excludeId
|
|
58
|
+
} : {}
|
|
59
|
+
},
|
|
60
|
+
limit: 1
|
|
61
|
+
});
|
|
62
|
+
if (result.isFail()) return Result.fail(new FolderPersistenceError(result.error));
|
|
63
|
+
const { entries } = result.value;
|
|
64
|
+
if (entries.length > 0) return Result.fail(new FolderValidationError(`Folder with slug "${slug}" already exists at this level.`));
|
|
65
|
+
return Result.ok();
|
|
66
|
+
}
|
|
67
|
+
async createFolderPath(params) {
|
|
68
|
+
const folderModel = await this.folderModelProvider.get();
|
|
69
|
+
const { slug, parentId } = params;
|
|
70
|
+
if (!parentId) return Result.ok(Path.create(slug));
|
|
71
|
+
const parentResult = await this.getEntryById.execute(folderModel, EntryId.from(parentId).toString());
|
|
72
|
+
if (parentResult.isFail()) return Result.fail(new FolderPersistenceError(new Error("Parent folder not found. Unable to create the folder path")));
|
|
73
|
+
const parentFolder = EntryToFolderMapper.toFolder(parentResult.value);
|
|
74
|
+
return Result.ok(Path.create(slug, parentFolder.path));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const CreateFolderRepository_CreateFolderRepository = CreateFolderRepository.createImplementation({
|
|
78
|
+
implementation: CreateFolderRepositoryImpl,
|
|
79
|
+
dependencies: [
|
|
80
|
+
CreateEntryUseCase,
|
|
81
|
+
ListLatestEntriesUseCase,
|
|
82
|
+
GetEntryByIdUseCase,
|
|
83
|
+
FolderModelProvider
|
|
84
|
+
]
|
|
85
|
+
});
|
|
86
|
+
export { CreateFolderRepository_CreateFolderRepository as CreateFolderRepository };
|
|
87
|
+
|
|
88
|
+
//# sourceMappingURL=CreateFolderRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/folder/CreateFolder/CreateFolderRepository.js","sources":["../../../../src/features/folder/CreateFolder/CreateFolderRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n CreateFolderRepository as RepositoryAbstraction,\n type ICreateFolderRepository\n} from \"./abstractions.js\";\nimport { CreateEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/CreateEntry\";\nimport { ListLatestEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries\";\nimport { GetEntryByIdUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetEntryById\";\nimport { FolderModelProvider } from \"~/domain/folder/abstractions.js\";\nimport type { CmsEntryFolder, CreateFolderParams, Folder } from \"~/folder/folder.types.js\";\nimport { EntryToFolderMapper } from \"../shared/EntryToFolderMapper.js\";\nimport { FolderPersistenceError, FolderValidationError } from \"~/domain/folder/errors.js\";\nimport { Path } from \"~/utils/Path.js\";\nimport { EntryId } from \"@webiny/api-headless-cms/exports/api/cms/entry.js\";\n\nclass CreateFolderRepositoryImpl implements ICreateFolderRepository {\n constructor(\n private createEntry: CreateEntryUseCase.Interface,\n private listLatestEntries: ListLatestEntriesUseCase.Interface,\n private getEntryById: GetEntryByIdUseCase.Interface,\n private folderModelProvider: FolderModelProvider.Interface\n ) {}\n\n async execute(data: CreateFolderParams): Promise<Result<Folder, RepositoryAbstraction.Error>> {\n const folderModel = await this.folderModelProvider.get();\n // Check if folder already exists\n const checkResult = await this.checkExistingFolder({\n type: data.type,\n slug: data.slug,\n parentId: data.parentId\n });\n\n if (checkResult.isFail()) {\n return Result.fail(checkResult.error);\n }\n\n // Create folder path\n const pathResult = await this.createFolderPath({\n slug: data.slug,\n parentId: data.parentId\n });\n\n if (pathResult.isFail()) {\n return Result.fail(pathResult.error);\n }\n\n // Create the entry\n const result = await this.createEntry.execute<CmsEntryFolder>(folderModel, {\n values: {\n ...data,\n parentId: data.parentId || null,\n path: pathResult.value\n }\n });\n\n if (result.isFail()) {\n if (result.error.code === \"Cms/Entry/ValidationError\") {\n return Result.fail(new FolderValidationError(result.error.message));\n }\n return Result.fail(new FolderPersistenceError(result.error));\n }\n\n const folder = EntryToFolderMapper.toFolder(result.value);\n return Result.ok(folder);\n }\n\n private async checkExistingFolder(params: {\n type: string;\n slug: string;\n parentId?: string | null;\n excludeId?: string;\n }): Promise<Result<void, RepositoryAbstraction.Error>> {\n const folderModel = await this.folderModelProvider.get();\n const { type, slug, parentId, excludeId } = params;\n\n const result = await this.listLatestEntries.execute<CmsEntryFolder>(folderModel, {\n where: {\n latest: true,\n values: {\n type,\n slug,\n parentId\n },\n ...(excludeId ? { entryId_not: excludeId } : {})\n },\n limit: 1\n });\n\n if (result.isFail()) {\n return Result.fail(new FolderPersistenceError(result.error));\n }\n\n const { entries } = result.value;\n\n if (entries.length > 0) {\n return Result.fail(\n new FolderValidationError(\n `Folder with slug \"${slug}\" already exists at this level.`\n )\n );\n }\n\n return Result.ok();\n }\n\n private async createFolderPath(params: {\n slug: string;\n parentId?: string | null;\n }): Promise<Result<string, RepositoryAbstraction.Error>> {\n const folderModel = await this.folderModelProvider.get();\n const { slug, parentId } = params;\n\n if (!parentId) {\n return Result.ok(Path.create(slug));\n }\n\n const parentResult = await this.getEntryById.execute<CmsEntryFolder>(\n folderModel,\n EntryId.from(parentId).toString()\n );\n\n if (parentResult.isFail()) {\n return Result.fail(\n new FolderPersistenceError(\n new Error(\"Parent folder not found. Unable to create the folder path\")\n )\n );\n }\n\n const parentFolder = EntryToFolderMapper.toFolder(parentResult.value);\n return Result.ok(Path.create(slug, parentFolder.path));\n }\n}\n\nexport const CreateFolderRepository = RepositoryAbstraction.createImplementation({\n implementation: CreateFolderRepositoryImpl,\n dependencies: [\n CreateEntryUseCase,\n ListLatestEntriesUseCase,\n GetEntryByIdUseCase,\n FolderModelProvider\n ]\n});\n"],"names":["CreateFolderRepositoryImpl","createEntry","listLatestEntries","getEntryById","folderModelProvider","data","folderModel","checkResult","Result","pathResult","result","FolderValidationError","FolderPersistenceError","folder","EntryToFolderMapper","params","type","slug","parentId","excludeId","entries","Path","parentResult","EntryId","Error","parentFolder","CreateFolderRepository","RepositoryAbstraction","CreateEntryUseCase","ListLatestEntriesUseCase","GetEntryByIdUseCase","FolderModelProvider"],"mappings":";;;;;;;;;;AAeA,MAAMA;IACF,YACYC,WAAyC,EACzCC,iBAAqD,EACrDC,YAA2C,EAC3CC,mBAAkD,CAC5D;aAJUH,WAAW,GAAXA;aACAC,iBAAiB,GAAjBA;aACAC,YAAY,GAAZA;aACAC,mBAAmB,GAAnBA;IACT;IAEH,MAAM,QAAQC,IAAwB,EAAwD;QAC1F,MAAMC,cAAc,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG;QAEtD,MAAMC,cAAc,MAAM,IAAI,CAAC,mBAAmB,CAAC;YAC/C,MAAMF,KAAK,IAAI;YACf,MAAMA,KAAK,IAAI;YACf,UAAUA,KAAK,QAAQ;QAC3B;QAEA,IAAIE,YAAY,MAAM,IAClB,OAAOC,OAAO,IAAI,CAACD,YAAY,KAAK;QAIxC,MAAME,aAAa,MAAM,IAAI,CAAC,gBAAgB,CAAC;YAC3C,MAAMJ,KAAK,IAAI;YACf,UAAUA,KAAK,QAAQ;QAC3B;QAEA,IAAII,WAAW,MAAM,IACjB,OAAOD,OAAO,IAAI,CAACC,WAAW,KAAK;QAIvC,MAAMC,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAiBJ,aAAa;YACvE,QAAQ;gBACJ,GAAGD,IAAI;gBACP,UAAUA,KAAK,QAAQ,IAAI;gBAC3B,MAAMI,WAAW,KAAK;YAC1B;QACJ;QAEA,IAAIC,OAAO,MAAM,IAAI;YACjB,IAAIA,AAAsB,gCAAtBA,OAAO,KAAK,CAAC,IAAI,EACjB,OAAOF,OAAO,IAAI,CAAC,IAAIG,sBAAsBD,OAAO,KAAK,CAAC,OAAO;YAErE,OAAOF,OAAO,IAAI,CAAC,IAAII,uBAAuBF,OAAO,KAAK;QAC9D;QAEA,MAAMG,SAASC,oBAAoB,QAAQ,CAACJ,OAAO,KAAK;QACxD,OAAOF,OAAO,EAAE,CAACK;IACrB;IAEA,MAAc,oBAAoBE,MAKjC,EAAsD;QACnD,MAAMT,cAAc,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG;QACtD,MAAM,EAAEU,IAAI,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,SAAS,EAAE,GAAGJ;QAE5C,MAAML,SAAS,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAiBJ,aAAa;YAC7E,OAAO;gBACH,QAAQ;gBACR,QAAQ;oBACJU;oBACAC;oBACAC;gBACJ;gBACA,GAAIC,YAAY;oBAAE,aAAaA;gBAAU,IAAI,CAAC,CAAC;YACnD;YACA,OAAO;QACX;QAEA,IAAIT,OAAO,MAAM,IACb,OAAOF,OAAO,IAAI,CAAC,IAAII,uBAAuBF,OAAO,KAAK;QAG9D,MAAM,EAAEU,OAAO,EAAE,GAAGV,OAAO,KAAK;QAEhC,IAAIU,QAAQ,MAAM,GAAG,GACjB,OAAOZ,OAAO,IAAI,CACd,IAAIG,sBACA,CAAC,kBAAkB,EAAEM,KAAK,+BAA+B,CAAC;QAKtE,OAAOT,OAAO,EAAE;IACpB;IAEA,MAAc,iBAAiBO,MAG9B,EAAwD;QACrD,MAAMT,cAAc,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG;QACtD,MAAM,EAAEW,IAAI,EAAEC,QAAQ,EAAE,GAAGH;QAE3B,IAAI,CAACG,UACD,OAAOV,OAAO,EAAE,CAACa,KAAK,MAAM,CAACJ;QAGjC,MAAMK,eAAe,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAChDhB,aACAiB,QAAQ,IAAI,CAACL,UAAU,QAAQ;QAGnC,IAAII,aAAa,MAAM,IACnB,OAAOd,OAAO,IAAI,CACd,IAAII,uBACA,IAAIY,MAAM;QAKtB,MAAMC,eAAeX,oBAAoB,QAAQ,CAACQ,aAAa,KAAK;QACpE,OAAOd,OAAO,EAAE,CAACa,KAAK,MAAM,CAACJ,MAAMQ,aAAa,IAAI;IACxD;AACJ;AAEO,MAAMC,gDAAyBC,uBAAAA,oBAA0C,CAAC;IAC7E,gBAAgB3B;IAChB,cAAc;QACV4B;QACAC;QACAC;QACAC;KACH;AACL"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
|
+
import { CreateFolderUseCase as UseCaseAbstraction, CreateFolderRepository } from "./abstractions.js";
|
|
4
|
+
import type { Folder, CreateFolderParams } from "../../../folder/folder.types.js";
|
|
5
|
+
declare class CreateFolderUseCaseImpl implements UseCaseAbstraction.Interface {
|
|
6
|
+
private eventPublisher;
|
|
7
|
+
private repository;
|
|
8
|
+
constructor(eventPublisher: EventPublisherAbstraction.Interface, repository: CreateFolderRepository.Interface);
|
|
9
|
+
execute(params: CreateFolderParams): Promise<Result<Folder, UseCaseAbstraction.Error>>;
|
|
10
|
+
}
|
|
11
|
+
export declare const CreateFolderUseCase: import("@webiny/di").Implementation<typeof CreateFolderUseCaseImpl>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
|
+
import { createImplementation } from "@webiny/di";
|
|
4
|
+
import { CreateFolderRepository, CreateFolderUseCase } from "./abstractions.js";
|
|
5
|
+
import { FolderAfterCreateEvent, FolderBeforeCreateEvent } from "./events.js";
|
|
6
|
+
class CreateFolderUseCaseImpl {
|
|
7
|
+
constructor(eventPublisher, repository){
|
|
8
|
+
this.eventPublisher = eventPublisher;
|
|
9
|
+
this.repository = repository;
|
|
10
|
+
}
|
|
11
|
+
async execute(params) {
|
|
12
|
+
const beforeCreateEvent = new FolderBeforeCreateEvent({
|
|
13
|
+
input: params
|
|
14
|
+
});
|
|
15
|
+
await this.eventPublisher.publish(beforeCreateEvent);
|
|
16
|
+
const result = await this.repository.execute(params);
|
|
17
|
+
if (result.isFail()) return result;
|
|
18
|
+
const folder = result.value;
|
|
19
|
+
const afterCreateEvent = new FolderAfterCreateEvent({
|
|
20
|
+
folder
|
|
21
|
+
});
|
|
22
|
+
await this.eventPublisher.publish(afterCreateEvent);
|
|
23
|
+
return Result.ok(folder);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const CreateFolderUseCase_CreateFolderUseCase = createImplementation({
|
|
27
|
+
abstraction: CreateFolderUseCase,
|
|
28
|
+
implementation: CreateFolderUseCaseImpl,
|
|
29
|
+
dependencies: [
|
|
30
|
+
EventPublisher,
|
|
31
|
+
CreateFolderRepository
|
|
32
|
+
]
|
|
33
|
+
});
|
|
34
|
+
export { CreateFolderUseCase_CreateFolderUseCase as CreateFolderUseCase };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=CreateFolderUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/folder/CreateFolder/CreateFolderUseCase.js","sources":["../../../../src/features/folder/CreateFolder/CreateFolderUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { createImplementation } from \"@webiny/di\";\nimport {\n CreateFolderUseCase as UseCaseAbstraction,\n CreateFolderRepository\n} from \"./abstractions.js\";\nimport { FolderBeforeCreateEvent, FolderAfterCreateEvent } from \"./events.js\";\nimport type { Folder, CreateFolderParams } from \"~/folder/folder.types.js\";\n\nclass CreateFolderUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private eventPublisher: EventPublisherAbstraction.Interface,\n private repository: CreateFolderRepository.Interface\n ) {}\n\n async execute(params: CreateFolderParams): Promise<Result<Folder, UseCaseAbstraction.Error>> {\n // Publish before create event\n const beforeCreateEvent = new FolderBeforeCreateEvent({\n input: params\n });\n\n await this.eventPublisher.publish(beforeCreateEvent);\n\n // Execute the create operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n const folder = result.value;\n\n // Publish after create event\n const afterCreateEvent = new FolderAfterCreateEvent({\n folder\n });\n\n await this.eventPublisher.publish(afterCreateEvent);\n\n return Result.ok(folder);\n }\n}\n\nexport const CreateFolderUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: CreateFolderUseCaseImpl,\n dependencies: [EventPublisher, CreateFolderRepository]\n});\n"],"names":["CreateFolderUseCaseImpl","eventPublisher","repository","params","beforeCreateEvent","FolderBeforeCreateEvent","result","folder","afterCreateEvent","FolderAfterCreateEvent","Result","CreateFolderUseCase","createImplementation","UseCaseAbstraction","EventPublisher","CreateFolderRepository"],"mappings":";;;;;AAaA,MAAMA;IACF,YACYC,cAAmD,EACnDC,UAA4C,CACtD;aAFUD,cAAc,GAAdA;aACAC,UAAU,GAAVA;IACT;IAEH,MAAM,QAAQC,MAA0B,EAAqD;QAEzF,MAAMC,oBAAoB,IAAIC,wBAAwB;YAClD,OAAOF;QACX;QAEA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAACC;QAGlC,MAAME,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACH;QAE7C,IAAIG,OAAO,MAAM,IACb,OAAOA;QAGX,MAAMC,SAASD,OAAO,KAAK;QAG3B,MAAME,mBAAmB,IAAIC,uBAAuB;YAChDF;QACJ;QAEA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAACC;QAElC,OAAOE,OAAO,EAAE,CAACH;IACrB;AACJ;AAEO,MAAMI,0CAAsBC,qBAAqB;IACpD,aAAaC;IACb,gBAAgBb;IAChB,cAAc;QAACc;QAAgBC;KAAuB;AAC1D"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Result } from "@webiny/feature/api";
|
|
2
|
+
import type { DomainEvent, IEventHandler } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
|
+
import type { Folder, CreateFolderParams } from "../../../folder/folder.types.js";
|
|
4
|
+
import type { FolderNotAuthorizedError, FolderPersistenceError, FolderValidationError } from "../../../domain/folder/errors.js";
|
|
5
|
+
/**
|
|
6
|
+
* CreateFolder repository interface
|
|
7
|
+
*/
|
|
8
|
+
export interface ICreateFolderRepository {
|
|
9
|
+
execute(data: CreateFolderParams): Promise<Result<Folder, RepositoryError>>;
|
|
10
|
+
}
|
|
11
|
+
export interface ICreateFolderRepositoryErrors {
|
|
12
|
+
validation: FolderValidationError;
|
|
13
|
+
persistence: FolderPersistenceError;
|
|
14
|
+
}
|
|
15
|
+
type RepositoryError = ICreateFolderRepositoryErrors[keyof ICreateFolderRepositoryErrors];
|
|
16
|
+
/** Persist a newly created folder. */
|
|
17
|
+
export declare const CreateFolderRepository: import("@webiny/di").Abstraction<ICreateFolderRepository>;
|
|
18
|
+
export declare namespace CreateFolderRepository {
|
|
19
|
+
type Interface = ICreateFolderRepository;
|
|
20
|
+
type Error = RepositoryError;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* CreateFolder use case interface
|
|
24
|
+
*/
|
|
25
|
+
export interface ICreateFolderUseCase {
|
|
26
|
+
execute(params: CreateFolderParams): Promise<Result<Folder, UseCaseError>>;
|
|
27
|
+
}
|
|
28
|
+
export interface ICreateFolderUseCaseErrors {
|
|
29
|
+
notAuthorized: FolderNotAuthorizedError;
|
|
30
|
+
persistence: FolderPersistenceError;
|
|
31
|
+
validation: FolderValidationError;
|
|
32
|
+
}
|
|
33
|
+
type UseCaseError = ICreateFolderUseCaseErrors[keyof ICreateFolderUseCaseErrors];
|
|
34
|
+
/** Create a new folder. */
|
|
35
|
+
export declare const CreateFolderUseCase: import("@webiny/di").Abstraction<ICreateFolderUseCase>;
|
|
36
|
+
export declare namespace CreateFolderUseCase {
|
|
37
|
+
type Interface = ICreateFolderUseCase;
|
|
38
|
+
type Return = Promise<Result<Folder, UseCaseError>>;
|
|
39
|
+
type Error = UseCaseError;
|
|
40
|
+
}
|
|
41
|
+
export interface FolderBeforeCreatePayload {
|
|
42
|
+
input: CreateFolderParams;
|
|
43
|
+
}
|
|
44
|
+
export interface FolderAfterCreatePayload {
|
|
45
|
+
folder: Folder;
|
|
46
|
+
}
|
|
47
|
+
/** Hook into folder lifecycle before a folder is created. */
|
|
48
|
+
export declare const FolderBeforeCreateEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<FolderBeforeCreatePayload>>>;
|
|
49
|
+
export declare namespace FolderBeforeCreateEventHandler {
|
|
50
|
+
type Interface = IEventHandler<DomainEvent<FolderBeforeCreatePayload>>;
|
|
51
|
+
type Event = DomainEvent<FolderBeforeCreatePayload>;
|
|
52
|
+
}
|
|
53
|
+
/** Hook into folder lifecycle after a folder is created. */
|
|
54
|
+
export declare const FolderAfterCreateEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<FolderAfterCreatePayload>>>;
|
|
55
|
+
export declare namespace FolderAfterCreateEventHandler {
|
|
56
|
+
type Interface = IEventHandler<DomainEvent<FolderAfterCreatePayload>>;
|
|
57
|
+
type Event = DomainEvent<FolderAfterCreatePayload>;
|
|
58
|
+
}
|
|
59
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
+
const CreateFolderRepository = createAbstraction("CreateFolderRepository");
|
|
3
|
+
const CreateFolderUseCase = createAbstraction("CreateFolderUseCase");
|
|
4
|
+
const FolderBeforeCreateEventHandler = createAbstraction("FolderBeforeCreateEventHandler");
|
|
5
|
+
const FolderAfterCreateEventHandler = createAbstraction("FolderAfterCreateEventHandler");
|
|
6
|
+
export { CreateFolderRepository, CreateFolderUseCase, FolderAfterCreateEventHandler, FolderBeforeCreateEventHandler };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=abstractions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/folder/CreateFolder/abstractions.js","sources":["../../../../src/features/folder/CreateFolder/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { DomainEvent, IEventHandler } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { Folder, CreateFolderParams } from \"~/folder/folder.types.js\";\nimport type {\n FolderNotAuthorizedError,\n FolderPersistenceError,\n FolderValidationError\n} from \"~/domain/folder/errors.js\";\n\n/**\n * CreateFolder repository interface\n */\nexport interface ICreateFolderRepository {\n execute(data: CreateFolderParams): Promise<Result<Folder, RepositoryError>>;\n}\n\nexport interface ICreateFolderRepositoryErrors {\n validation: FolderValidationError;\n persistence: FolderPersistenceError;\n}\n\ntype RepositoryError = ICreateFolderRepositoryErrors[keyof ICreateFolderRepositoryErrors];\n\n/** Persist a newly created folder. */\nexport const CreateFolderRepository =\n createAbstraction<ICreateFolderRepository>(\"CreateFolderRepository\");\n\nexport namespace CreateFolderRepository {\n export type Interface = ICreateFolderRepository;\n export type Error = RepositoryError;\n}\n\n/**\n * CreateFolder use case interface\n */\nexport interface ICreateFolderUseCase {\n execute(params: CreateFolderParams): Promise<Result<Folder, UseCaseError>>;\n}\n\nexport interface ICreateFolderUseCaseErrors {\n notAuthorized: FolderNotAuthorizedError;\n persistence: FolderPersistenceError;\n validation: FolderValidationError;\n}\n\ntype UseCaseError = ICreateFolderUseCaseErrors[keyof ICreateFolderUseCaseErrors];\n\n/** Create a new folder. */\nexport const CreateFolderUseCase = createAbstraction<ICreateFolderUseCase>(\"CreateFolderUseCase\");\n\nexport namespace CreateFolderUseCase {\n export type Interface = ICreateFolderUseCase;\n export type Return = Promise<Result<Folder, UseCaseError>>;\n export type Error = UseCaseError;\n}\n\n// Event Payload Types\nexport interface FolderBeforeCreatePayload {\n input: CreateFolderParams;\n}\n\nexport interface FolderAfterCreatePayload {\n folder: Folder;\n}\n\n// Event Handler Abstractions\n/** Hook into folder lifecycle before a folder is created. */\nexport const FolderBeforeCreateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<FolderBeforeCreatePayload>>\n>(\"FolderBeforeCreateEventHandler\");\n\nexport namespace FolderBeforeCreateEventHandler {\n export type Interface = IEventHandler<DomainEvent<FolderBeforeCreatePayload>>;\n export type Event = DomainEvent<FolderBeforeCreatePayload>;\n}\n\n/** Hook into folder lifecycle after a folder is created. */\nexport const FolderAfterCreateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<FolderAfterCreatePayload>>\n>(\"FolderAfterCreateEventHandler\");\n\nexport namespace FolderAfterCreateEventHandler {\n export type Interface = IEventHandler<DomainEvent<FolderAfterCreatePayload>>;\n export type Event = DomainEvent<FolderAfterCreatePayload>;\n}\n"],"names":["CreateFolderRepository","createAbstraction","CreateFolderUseCase","FolderBeforeCreateEventHandler","FolderAfterCreateEventHandler"],"mappings":";AAyBO,MAAMA,yBACTC,kBAA2C;AAuBxC,MAAMC,sBAAsBD,kBAAwC;AAmBpE,MAAME,iCAAiCF,kBAE5C;AAQK,MAAMG,gCAAgCH,kBAE3C"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { FolderLevelPermissions } from "../../../../features/flp/FolderLevelPermissions/index.js";
|
|
2
|
+
import { CreateFolderUseCase } from "../abstractions.js";
|
|
3
|
+
import type { CreateFolderParams } from "../../../../folder/folder.types.js";
|
|
4
|
+
import { CodeFlpsProvider } from "../../../../features/flp/shared/index.js";
|
|
5
|
+
declare class CreateFolderWithFolderLevelPermissionsImpl implements CreateFolderUseCase.Interface {
|
|
6
|
+
private folderLevelPermissions;
|
|
7
|
+
private readonly decoretee;
|
|
8
|
+
private readonly codeFlpsProvider?;
|
|
9
|
+
constructor(folderLevelPermissions: FolderLevelPermissions.Interface, codeFlpsProvider: CodeFlpsProvider.Interface | undefined, decoretee: CreateFolderUseCase.Interface);
|
|
10
|
+
execute(params: CreateFolderParams): CreateFolderUseCase.Return;
|
|
11
|
+
/**
|
|
12
|
+
* Code-defined permissions are resolved from the folder's own type and path rather than the FLP
|
|
13
|
+
* catalog: the record for a folder this new is written by an event handler and may not exist
|
|
14
|
+
* yet. Without this the response would omit them until something refetched the folder.
|
|
15
|
+
*/
|
|
16
|
+
private withCodePermissions;
|
|
17
|
+
}
|
|
18
|
+
export declare const CreateFolderWithFolderLevelPermissions: typeof CreateFolderWithFolderLevelPermissionsImpl;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { FolderLevelPermissions } from "../../../flp/FolderLevelPermissions/index.js";
|
|
2
|
+
import { CreateFolderUseCase } from "../abstractions.js";
|
|
3
|
+
import { Result, createDecorator } from "@webiny/feature/api";
|
|
4
|
+
import { FolderNotAuthorizedError } from "../../../../domain/folder/errors.js";
|
|
5
|
+
import { CodeFlpMerger, CodeFlpsProvider } from "../../../flp/shared/index.js";
|
|
6
|
+
class CreateFolderWithFolderLevelPermissionsImpl {
|
|
7
|
+
constructor(folderLevelPermissions, codeFlpsProvider, decoretee){
|
|
8
|
+
this.folderLevelPermissions = folderLevelPermissions;
|
|
9
|
+
this.codeFlpsProvider = codeFlpsProvider;
|
|
10
|
+
this.decoretee = decoretee;
|
|
11
|
+
}
|
|
12
|
+
async execute(params) {
|
|
13
|
+
let canCreateFolder;
|
|
14
|
+
if (params.parentId) {
|
|
15
|
+
const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(params.parentId);
|
|
16
|
+
canCreateFolder = await this.folderLevelPermissions.canAccessFolder({
|
|
17
|
+
permissions,
|
|
18
|
+
rwd: "w"
|
|
19
|
+
});
|
|
20
|
+
} else canCreateFolder = this.folderLevelPermissions.canCreateFolderInRoot();
|
|
21
|
+
if (!canCreateFolder) return Result.fail(new FolderNotAuthorizedError());
|
|
22
|
+
const result = await this.decoretee.execute(params);
|
|
23
|
+
if (result.isFail()) return Result.fail(result.error);
|
|
24
|
+
const folder = result.value;
|
|
25
|
+
const permissions = await this.withCodePermissions(folder, folder?.permissions ?? []);
|
|
26
|
+
const permissionsWithDefaults = await this.folderLevelPermissions.getDefaultPermissions(permissions);
|
|
27
|
+
return Result.ok({
|
|
28
|
+
...folder,
|
|
29
|
+
permissions: permissionsWithDefaults
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async withCodePermissions(folder, permissions) {
|
|
33
|
+
if (!this.codeFlpsProvider) return permissions;
|
|
34
|
+
const codePermissions = await this.codeFlpsProvider.getPermissions({
|
|
35
|
+
type: folder.type,
|
|
36
|
+
path: folder.path
|
|
37
|
+
});
|
|
38
|
+
return CodeFlpMerger.mergePermissions(permissions, codePermissions);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const CreateFolderWithFolderLevelPermissions = createDecorator({
|
|
42
|
+
abstraction: CreateFolderUseCase,
|
|
43
|
+
decorator: CreateFolderWithFolderLevelPermissionsImpl,
|
|
44
|
+
dependencies: [
|
|
45
|
+
FolderLevelPermissions,
|
|
46
|
+
[
|
|
47
|
+
CodeFlpsProvider,
|
|
48
|
+
{
|
|
49
|
+
optional: true
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
]
|
|
53
|
+
});
|
|
54
|
+
export { CreateFolderWithFolderLevelPermissions };
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=CreateFolderWithFolderLevelPermissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/folder/CreateFolder/decorators/CreateFolderWithFolderLevelPermissions.js","sources":["../../../../../src/features/folder/CreateFolder/decorators/CreateFolderWithFolderLevelPermissions.ts"],"sourcesContent":["import { FolderLevelPermissions } from \"~/features/flp/FolderLevelPermissions/index.js\";\nimport { CreateFolderUseCase } from \"../abstractions.js\";\nimport type { CreateFolderParams } from \"~/folder/folder.types.js\";\nimport type { Folder } from \"~/folder/folder.types.js\";\nimport type { FolderPermission } from \"~/flp/flp.types.js\";\nimport { createDecorator, Result } from \"@webiny/feature/api\";\nimport { FolderNotAuthorizedError } from \"~/domain/folder/errors.js\";\nimport { CodeFlpMerger } from \"~/features/flp/shared/index.js\";\nimport { CodeFlpsProvider } from \"~/features/flp/shared/index.js\";\n\nclass CreateFolderWithFolderLevelPermissionsImpl implements CreateFolderUseCase.Interface {\n private folderLevelPermissions: FolderLevelPermissions.Interface;\n private readonly decoretee: CreateFolderUseCase.Interface;\n private readonly codeFlpsProvider?: CodeFlpsProvider.Interface;\n\n constructor(\n folderLevelPermissions: FolderLevelPermissions.Interface,\n codeFlpsProvider: CodeFlpsProvider.Interface | undefined,\n decoretee: CreateFolderUseCase.Interface\n ) {\n this.folderLevelPermissions = folderLevelPermissions;\n this.codeFlpsProvider = codeFlpsProvider;\n this.decoretee = decoretee;\n }\n\n async execute(params: CreateFolderParams): CreateFolderUseCase.Return {\n let canCreateFolder: boolean;\n if (params.parentId) {\n const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(\n params.parentId\n );\n canCreateFolder = await this.folderLevelPermissions.canAccessFolder({\n permissions,\n rwd: \"w\"\n });\n } else {\n canCreateFolder = this.folderLevelPermissions.canCreateFolderInRoot();\n }\n\n if (!canCreateFolder) {\n return Result.fail(new FolderNotAuthorizedError());\n }\n\n const result = await this.decoretee.execute(params);\n\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n const folder = result.value;\n\n const permissions = await this.withCodePermissions(folder, folder?.permissions ?? []);\n\n // Let's set default permissions based on the current user.\n const permissionsWithDefaults =\n await this.folderLevelPermissions.getDefaultPermissions(permissions);\n\n return Result.ok({\n ...folder,\n permissions: permissionsWithDefaults\n });\n }\n\n /**\n * Code-defined permissions are resolved from the folder's own type and path rather than the FLP\n * catalog: the record for a folder this new is written by an event handler and may not exist\n * yet. Without this the response would omit them until something refetched the folder.\n */\n private async withCodePermissions(\n folder: Pick<Folder, \"type\" | \"path\">,\n permissions: FolderPermission[]\n ): Promise<FolderPermission[]> {\n if (!this.codeFlpsProvider) {\n return permissions;\n }\n\n const codePermissions = await this.codeFlpsProvider.getPermissions({\n type: folder.type,\n path: folder.path\n });\n\n return CodeFlpMerger.mergePermissions(permissions, codePermissions);\n }\n}\n\nexport const CreateFolderWithFolderLevelPermissions = createDecorator({\n abstraction: CreateFolderUseCase,\n decorator: CreateFolderWithFolderLevelPermissionsImpl,\n // `CodeFlpsProvider` is optional: `CodeFlpsFeature` does not register it unless the project has\n // the folder-level permissions entitlement.\n dependencies: [FolderLevelPermissions, [CodeFlpsProvider, { optional: true }]]\n});\n"],"names":["CreateFolderWithFolderLevelPermissionsImpl","folderLevelPermissions","codeFlpsProvider","decoretee","params","canCreateFolder","permissions","Result","FolderNotAuthorizedError","result","folder","permissionsWithDefaults","codePermissions","CodeFlpMerger","CreateFolderWithFolderLevelPermissions","createDecorator","CreateFolderUseCase","FolderLevelPermissions","CodeFlpsProvider"],"mappings":";;;;;AAUA,MAAMA;IAKF,YACIC,sBAAwD,EACxDC,gBAAwD,EACxDC,SAAwC,CAC1C;QACE,IAAI,CAAC,sBAAsB,GAAGF;QAC9B,IAAI,CAAC,gBAAgB,GAAGC;QACxB,IAAI,CAAC,SAAS,GAAGC;IACrB;IAEA,MAAM,QAAQC,MAA0B,EAA8B;QAClE,IAAIC;QACJ,IAAID,OAAO,QAAQ,EAAE;YACjB,MAAME,cAAc,MAAM,IAAI,CAAC,sBAAsB,CAAC,yBAAyB,CAC3EF,OAAO,QAAQ;YAEnBC,kBAAkB,MAAM,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC;gBAChEC;gBACA,KAAK;YACT;QACJ,OACID,kBAAkB,IAAI,CAAC,sBAAsB,CAAC,qBAAqB;QAGvE,IAAI,CAACA,iBACD,OAAOE,OAAO,IAAI,CAAC,IAAIC;QAG3B,MAAMC,SAAS,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAACL;QAE5C,IAAIK,OAAO,MAAM,IACb,OAAOF,OAAO,IAAI,CAACE,OAAO,KAAK;QAGnC,MAAMC,SAASD,OAAO,KAAK;QAE3B,MAAMH,cAAc,MAAM,IAAI,CAAC,mBAAmB,CAACI,QAAQA,QAAQ,eAAe,EAAE;QAGpF,MAAMC,0BACF,MAAM,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CAACL;QAE5D,OAAOC,OAAO,EAAE,CAAC;YACb,GAAGG,MAAM;YACT,aAAaC;QACjB;IACJ;IAOA,MAAc,oBACVD,MAAqC,EACrCJ,WAA+B,EACJ;QAC3B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EACtB,OAAOA;QAGX,MAAMM,kBAAkB,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC;YAC/D,MAAMF,OAAO,IAAI;YACjB,MAAMA,OAAO,IAAI;QACrB;QAEA,OAAOG,cAAc,gBAAgB,CAACP,aAAaM;IACvD;AACJ;AAEO,MAAME,yCAAyCC,gBAAgB;IAClE,aAAaC;IACb,WAAWhB;IAGX,cAAc;QAACiB;QAAwB;YAACC;YAAkB;gBAAE,UAAU;YAAK;SAAE;KAAC;AAClF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
2
|
+
import type { FolderBeforeCreatePayload, FolderAfterCreatePayload } from "./abstractions.js";
|
|
3
|
+
export declare class FolderBeforeCreateEvent extends DomainEvent<FolderBeforeCreatePayload> {
|
|
4
|
+
eventType: "folder.beforeCreate";
|
|
5
|
+
getHandlerAbstraction(): import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher/abstractions.js").IEventHandler<DomainEvent<FolderBeforeCreatePayload>>>;
|
|
6
|
+
}
|
|
7
|
+
export declare class FolderAfterCreateEvent extends DomainEvent<FolderAfterCreatePayload> {
|
|
8
|
+
eventType: "folder.afterCreate";
|
|
9
|
+
getHandlerAbstraction(): import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher/abstractions.js").IEventHandler<DomainEvent<FolderAfterCreatePayload>>>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
2
|
+
import { FolderAfterCreateEventHandler, FolderBeforeCreateEventHandler } from "./abstractions.js";
|
|
3
|
+
class FolderBeforeCreateEvent extends DomainEvent {
|
|
4
|
+
getHandlerAbstraction() {
|
|
5
|
+
return FolderBeforeCreateEventHandler;
|
|
6
|
+
}
|
|
7
|
+
constructor(...args){
|
|
8
|
+
super(...args), this.eventType = "folder.beforeCreate";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
class FolderAfterCreateEvent extends DomainEvent {
|
|
12
|
+
getHandlerAbstraction() {
|
|
13
|
+
return FolderAfterCreateEventHandler;
|
|
14
|
+
}
|
|
15
|
+
constructor(...args){
|
|
16
|
+
super(...args), this.eventType = "folder.afterCreate";
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export { FolderAfterCreateEvent, FolderBeforeCreateEvent };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/folder/CreateFolder/events.js","sources":["../../../../src/features/folder/CreateFolder/events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { FolderBeforeCreateEventHandler, FolderAfterCreateEventHandler } from \"./abstractions.js\";\nimport type { FolderBeforeCreatePayload, FolderAfterCreatePayload } from \"./abstractions.js\";\n\n// FolderBeforeCreate Event\nexport class FolderBeforeCreateEvent extends DomainEvent<FolderBeforeCreatePayload> {\n eventType = \"folder.beforeCreate\" as const;\n\n getHandlerAbstraction() {\n return FolderBeforeCreateEventHandler;\n }\n}\n\n// FolderAfterCreate Event\nexport class FolderAfterCreateEvent extends DomainEvent<FolderAfterCreatePayload> {\n eventType = \"folder.afterCreate\" as const;\n\n getHandlerAbstraction() {\n return FolderAfterCreateEventHandler;\n }\n}\n"],"names":["FolderBeforeCreateEvent","DomainEvent","FolderBeforeCreateEventHandler","FolderAfterCreateEvent","FolderAfterCreateEventHandler"],"mappings":";;AAKO,MAAMA,gCAAgCC;IAGzC,wBAAwB;QACpB,OAAOC;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB;AAGO,MAAMC,+BAA+BF;IAGxC,wBAAwB;QACpB,OAAOG;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { CreateFolderRepository } from "./CreateFolderRepository.js";
|
|
3
|
+
import { CreateFolderUseCase } from "./CreateFolderUseCase.js";
|
|
4
|
+
import { CreateFolderWithFolderLevelPermissions } from "./decorators/CreateFolderWithFolderLevelPermissions.js";
|
|
5
|
+
const CreateFolderFeature = createFeature({
|
|
6
|
+
name: "CreateFolder",
|
|
7
|
+
register (container) {
|
|
8
|
+
container.register(CreateFolderRepository).inSingletonScope();
|
|
9
|
+
container.register(CreateFolderUseCase);
|
|
10
|
+
container.registerDecorator(CreateFolderWithFolderLevelPermissions);
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
export { CreateFolderFeature };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/folder/CreateFolder/feature.js","sources":["../../../../src/features/folder/CreateFolder/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport type { Container } from \"@webiny/di\";\nimport { CreateFolderRepository } from \"./CreateFolderRepository.js\";\nimport { CreateFolderUseCase } from \"./CreateFolderUseCase.js\";\nimport { CreateFolderWithFolderLevelPermissions } from \"./decorators/CreateFolderWithFolderLevelPermissions.js\";\n\nexport const CreateFolderFeature = createFeature({\n name: \"CreateFolder\",\n register(container: Container) {\n container.register(CreateFolderRepository).inSingletonScope();\n container.register(CreateFolderUseCase);\n container.registerDecorator(CreateFolderWithFolderLevelPermissions);\n }\n});\n"],"names":["CreateFolderFeature","createFeature","container","CreateFolderRepository","CreateFolderUseCase","CreateFolderWithFolderLevelPermissions"],"mappings":";;;;AAMO,MAAMA,sBAAsBC,cAAc;IAC7C,MAAM;IACN,UAASC,SAAoB;QACzBA,UAAU,QAAQ,CAACC,wBAAwB,gBAAgB;QAC3DD,UAAU,QAAQ,CAACE;QACnBF,UAAU,iBAAiB,CAACG;IAChC;AACJ"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { DeleteFolderRepository as RepositoryAbstraction, type IDeleteFolderRepository } from "./abstractions.js";
|
|
3
|
+
import { DeleteEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry";
|
|
4
|
+
import { FolderModelProvider } from "../../../domain/folder/abstractions.js";
|
|
5
|
+
import type { Folder } from "../../../folder/folder.types.js";
|
|
6
|
+
declare class DeleteFolderRepositoryImpl implements IDeleteFolderRepository {
|
|
7
|
+
private deleteEntry;
|
|
8
|
+
private folderModelProvider;
|
|
9
|
+
constructor(deleteEntry: DeleteEntryUseCase.Interface, folderModelProvider: FolderModelProvider.Interface);
|
|
10
|
+
execute(folder: Folder): Promise<Result<void, RepositoryAbstraction.Error>>;
|
|
11
|
+
}
|
|
12
|
+
export declare const DeleteFolderRepository: typeof DeleteFolderRepositoryImpl & {
|
|
13
|
+
__abstraction: import("@webiny/di").Abstraction<IDeleteFolderRepository>;
|
|
14
|
+
};
|
|
15
|
+
export {};
|