@strapi/upload 5.53.0 → 5.55.0
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/dist/admin/App.js +33 -0
- package/dist/admin/App.js.map +1 -0
- package/dist/admin/App.mjs +31 -0
- package/dist/admin/App.mjs.map +1 -0
- package/dist/admin/components/Drawer.js.map +1 -0
- package/dist/admin/components/Drawer.mjs.map +1 -0
- package/dist/admin/components/TruncatedText.js.map +1 -0
- package/dist/admin/components/TruncatedText.mjs.map +1 -0
- package/dist/admin/components/UploadProgressDialog.js +700 -0
- package/dist/admin/components/UploadProgressDialog.js.map +1 -0
- package/dist/admin/components/UploadProgressDialog.mjs +698 -0
- package/dist/admin/components/UploadProgressDialog.mjs.map +1 -0
- package/dist/admin/constants.js +7 -12
- package/dist/admin/constants.js.map +1 -1
- package/dist/admin/constants.mjs +7 -12
- package/dist/admin/constants.mjs.map +1 -1
- package/dist/admin/hooks/useAIMetadataEnabled.js +39 -0
- package/dist/admin/hooks/useAIMetadataEnabled.js.map +1 -0
- package/dist/admin/hooks/useAIMetadataEnabled.mjs +37 -0
- package/dist/admin/hooks/useAIMetadataEnabled.mjs.map +1 -0
- package/dist/admin/hooks/useApiErrorMessage.js.map +1 -0
- package/dist/admin/hooks/useApiErrorMessage.mjs.map +1 -0
- package/dist/admin/hooks/useMediaLibraryPermissions.js +24 -5
- package/dist/admin/hooks/useMediaLibraryPermissions.js.map +1 -1
- package/dist/admin/hooks/useMediaLibraryPermissions.mjs +24 -5
- package/dist/admin/hooks/useMediaLibraryPermissions.mjs.map +1 -1
- package/dist/admin/hooks/useTracking.js +39 -7
- package/dist/admin/hooks/useTracking.js.map +1 -1
- package/dist/admin/hooks/useTracking.mjs +38 -8
- package/dist/admin/hooks/useTracking.mjs.map +1 -1
- package/dist/admin/index.js +18 -22
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +18 -22
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/legacy/ai/components/AIAssetCard.js +621 -0
- package/dist/admin/legacy/ai/components/AIAssetCard.js.map +1 -0
- package/dist/admin/legacy/ai/components/AIAssetCard.mjs +598 -0
- package/dist/admin/legacy/ai/components/AIAssetCard.mjs.map +1 -0
- package/dist/admin/legacy/ai/components/AIUploadModal.js.map +1 -0
- package/dist/admin/legacy/ai/components/AIUploadModal.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetCard/AssetCard.js +67 -0
- package/dist/admin/legacy/components/AssetCard/AssetCard.js.map +1 -0
- package/dist/admin/legacy/components/AssetCard/AssetCard.mjs +65 -0
- package/dist/admin/legacy/components/AssetCard/AssetCard.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetCard/AssetCardBase.js.map +1 -0
- package/dist/admin/legacy/components/AssetCard/AssetCardBase.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetCard/AudioAssetCard.js.map +1 -0
- package/dist/admin/legacy/components/AssetCard/AudioAssetCard.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetCard/AudioPreview.js.map +1 -0
- package/dist/admin/legacy/components/AssetCard/AudioPreview.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetCard/DocAssetCard.js.map +1 -0
- package/dist/admin/legacy/components/AssetCard/DocAssetCard.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetCard/ImageAssetCard.js.map +1 -0
- package/dist/admin/legacy/components/AssetCard/ImageAssetCard.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetCard/UploadingAssetCard.js +154 -0
- package/dist/admin/legacy/components/AssetCard/UploadingAssetCard.js.map +1 -0
- package/dist/admin/legacy/components/AssetCard/UploadingAssetCard.mjs +132 -0
- package/dist/admin/legacy/components/AssetCard/UploadingAssetCard.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetCard/VideoAssetCard.js.map +1 -0
- package/dist/admin/legacy/components/AssetCard/VideoAssetCard.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetCard/VideoPreview.js.map +1 -0
- package/dist/admin/legacy/components/AssetCard/VideoPreview.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/AssetDialog.js.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/AssetDialog.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/BrowseStep.js +320 -0
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/BrowseStep.js.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/BrowseStep.mjs +318 -0
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/BrowseStep.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/Filters.js.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/Filters.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/PageSize.js.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/PageSize.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.js.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.js.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/utils/isSelectable.js.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/utils/isSelectable.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/DialogFooter.js.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/DialogFooter.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/SelectedStep/SelectedStep.js.map +1 -0
- package/dist/admin/legacy/components/AssetDialog/SelectedStep/SelectedStep.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetGridList/AssetGridList.js.map +1 -0
- package/dist/admin/legacy/components/AssetGridList/AssetGridList.mjs.map +1 -0
- package/dist/admin/legacy/components/AssetGridList/Draggable.js.map +1 -0
- package/dist/admin/legacy/components/AssetGridList/Draggable.mjs.map +1 -0
- package/dist/admin/legacy/components/Breadcrumbs/Breadcrumbs.js.map +1 -0
- package/dist/admin/legacy/components/Breadcrumbs/Breadcrumbs.mjs.map +1 -0
- package/dist/admin/legacy/components/Breadcrumbs/CrumbSimpleMenuAsync.js.map +1 -0
- package/dist/admin/legacy/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs.map +1 -0
- package/dist/admin/legacy/components/BulkMoveDialog/BulkMoveDialog.js.map +1 -0
- package/dist/admin/legacy/components/BulkMoveDialog/BulkMoveDialog.mjs.map +1 -0
- package/dist/admin/legacy/components/ContextInfo/ContextInfo.js.map +1 -0
- package/dist/admin/legacy/components/ContextInfo/ContextInfo.mjs.map +1 -0
- package/dist/admin/legacy/components/CopyLinkButton/CopyLinkButton.js.map +1 -0
- package/dist/admin/legacy/components/CopyLinkButton/CopyLinkButton.mjs.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/DialogHeader.js.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/DialogHeader.mjs.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/EditAssetContent.js.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/EditAssetContent.mjs.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/PreviewBox/AssetPreview.js +114 -0
- package/dist/admin/legacy/components/EditAssetDialog/PreviewBox/AssetPreview.js.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/PreviewBox/AssetPreview.mjs +89 -0
- package/dist/admin/legacy/components/EditAssetDialog/PreviewBox/AssetPreview.mjs.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/PreviewBox/CroppingActions.js.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/PreviewBox/CroppingActions.mjs.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/PreviewBox/FocalPointActions.js.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/PreviewBox/PreviewBox.js +362 -0
- package/dist/admin/legacy/components/EditAssetDialog/PreviewBox/PreviewBox.js.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/PreviewBox/PreviewBox.mjs +337 -0
- package/dist/admin/legacy/components/EditAssetDialog/PreviewBox/PreviewBox.mjs.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/PreviewBox/PreviewComponents.js.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/PreviewBox/PreviewComponents.mjs.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/RemoveAssetDialog.js.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/RemoveAssetDialog.mjs.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/ReplaceMediaButton.js.map +1 -0
- package/dist/admin/legacy/components/EditAssetDialog/ReplaceMediaButton.mjs.map +1 -0
- package/dist/admin/legacy/components/EditFolderDialog/EditFolderDialog.js.map +1 -0
- package/dist/admin/legacy/components/EditFolderDialog/EditFolderDialog.mjs.map +1 -0
- package/dist/admin/legacy/components/EditFolderDialog/ModalHeader/ModalHeader.js.map +1 -0
- package/dist/admin/legacy/components/EditFolderDialog/ModalHeader/ModalHeader.mjs.map +1 -0
- package/dist/admin/legacy/components/EditFolderDialog/RemoveFolderDialog.js.map +1 -0
- package/dist/admin/legacy/components/EditFolderDialog/RemoveFolderDialog.mjs.map +1 -0
- package/dist/admin/legacy/components/EmptyAssets/EmptyAssetGrid.js.map +1 -0
- package/dist/admin/legacy/components/EmptyAssets/EmptyAssetGrid.mjs.map +1 -0
- package/dist/admin/legacy/components/EmptyAssets/EmptyAssets.js.map +1 -0
- package/dist/admin/legacy/components/EmptyAssets/EmptyAssets.mjs.map +1 -0
- package/dist/admin/legacy/components/FilterList/FilterList.js.map +1 -0
- package/dist/admin/legacy/components/FilterList/FilterList.mjs.map +1 -0
- package/dist/admin/legacy/components/FilterList/FilterTag.js.map +1 -0
- package/dist/admin/legacy/components/FilterList/FilterTag.mjs.map +1 -0
- package/dist/admin/legacy/components/FilterPopover/FilterPopover.js.map +1 -0
- package/dist/admin/legacy/components/FilterPopover/FilterPopover.mjs.map +1 -0
- package/dist/admin/legacy/components/FilterPopover/FilterValueInput.js.map +1 -0
- package/dist/admin/legacy/components/FilterPopover/FilterValueInput.mjs.map +1 -0
- package/dist/admin/legacy/components/FilterPopover/utils/getFilterList.js.map +1 -0
- package/dist/admin/legacy/components/FilterPopover/utils/getFilterList.mjs.map +1 -0
- package/dist/admin/legacy/components/FolderCard/FolderCard/FolderCard.js.map +1 -0
- package/dist/admin/legacy/components/FolderCard/FolderCard/FolderCard.mjs.map +1 -0
- package/dist/admin/legacy/components/FolderCard/FolderCardBody/FolderCardBody.js.map +1 -0
- package/dist/admin/legacy/components/FolderCard/FolderCardBody/FolderCardBody.mjs.map +1 -0
- package/dist/admin/legacy/components/FolderCard/FolderCardBodyAction/FolderCardBodyAction.js.map +1 -0
- package/dist/admin/legacy/components/FolderCard/FolderCardBodyAction/FolderCardBodyAction.mjs.map +1 -0
- package/dist/admin/legacy/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.js.map +1 -0
- package/dist/admin/legacy/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.mjs.map +1 -0
- package/dist/admin/legacy/components/FolderCard/contexts/FolderCard.js.map +1 -0
- package/dist/admin/legacy/components/FolderCard/contexts/FolderCard.mjs.map +1 -0
- package/dist/admin/legacy/components/FolderGridList/FolderGridList.js.map +1 -0
- package/dist/admin/legacy/components/FolderGridList/FolderGridList.mjs.map +1 -0
- package/dist/admin/legacy/components/MediaLibraryDialog/MediaLibraryDialog.js.map +1 -0
- package/dist/admin/legacy/components/MediaLibraryDialog/MediaLibraryDialog.mjs.map +1 -0
- package/dist/admin/legacy/components/MediaLibraryInput/Carousel/CarouselAsset.js +89 -0
- package/dist/admin/legacy/components/MediaLibraryInput/Carousel/CarouselAsset.js.map +1 -0
- package/dist/admin/legacy/components/MediaLibraryInput/Carousel/CarouselAsset.mjs +87 -0
- package/dist/admin/legacy/components/MediaLibraryInput/Carousel/CarouselAsset.mjs.map +1 -0
- package/dist/admin/legacy/components/MediaLibraryInput/Carousel/CarouselAssetActions.js.map +1 -0
- package/dist/admin/legacy/components/MediaLibraryInput/Carousel/CarouselAssetActions.mjs.map +1 -0
- package/dist/admin/legacy/components/MediaLibraryInput/Carousel/CarouselAssets.js.map +1 -0
- package/dist/admin/legacy/components/MediaLibraryInput/Carousel/CarouselAssets.mjs.map +1 -0
- package/dist/admin/legacy/components/MediaLibraryInput/Carousel/EmptyStateAsset.js +111 -0
- package/dist/admin/legacy/components/MediaLibraryInput/Carousel/EmptyStateAsset.js.map +1 -0
- package/dist/admin/legacy/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs +89 -0
- package/dist/admin/legacy/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs.map +1 -0
- package/dist/admin/legacy/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -0
- package/dist/admin/legacy/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -0
- package/dist/admin/legacy/components/SelectTree/Option.js.map +1 -0
- package/dist/admin/legacy/components/SelectTree/Option.mjs.map +1 -0
- package/dist/admin/legacy/components/SelectTree/SelectTree.js.map +1 -0
- package/dist/admin/legacy/components/SelectTree/SelectTree.mjs.map +1 -0
- package/dist/admin/legacy/components/SelectTree/utils/flattenTree.js.map +1 -0
- package/dist/admin/legacy/components/SelectTree/utils/flattenTree.mjs.map +1 -0
- package/dist/admin/legacy/components/SelectTree/utils/getOpenValues.js.map +1 -0
- package/dist/admin/legacy/components/SelectTree/utils/getOpenValues.mjs.map +1 -0
- package/dist/admin/legacy/components/SelectTree/utils/getValuesToClose.js.map +1 -0
- package/dist/admin/legacy/components/SelectTree/utils/getValuesToClose.mjs.map +1 -0
- package/dist/admin/legacy/components/SortPicker/SortPicker.js +40 -0
- package/dist/admin/legacy/components/SortPicker/SortPicker.js.map +1 -0
- package/dist/admin/legacy/components/SortPicker/SortPicker.mjs +38 -0
- package/dist/admin/legacy/components/SortPicker/SortPicker.mjs.map +1 -0
- package/dist/admin/legacy/components/TableList/CellContent.js.map +1 -0
- package/dist/admin/legacy/components/TableList/CellContent.mjs.map +1 -0
- package/dist/admin/legacy/components/TableList/PreviewCell.js +116 -0
- package/dist/admin/legacy/components/TableList/PreviewCell.js.map +1 -0
- package/dist/admin/legacy/components/TableList/PreviewCell.mjs +114 -0
- package/dist/admin/legacy/components/TableList/PreviewCell.mjs.map +1 -0
- package/dist/admin/legacy/components/TableList/TableList.js +100 -0
- package/dist/admin/legacy/components/TableList/TableList.js.map +1 -0
- package/dist/admin/legacy/components/TableList/TableList.mjs +98 -0
- package/dist/admin/legacy/components/TableList/TableList.mjs.map +1 -0
- package/dist/admin/legacy/components/TableList/TableRows.js +105 -0
- package/dist/admin/legacy/components/TableList/TableRows.js.map +1 -0
- package/dist/admin/legacy/components/TableList/TableRows.mjs +103 -0
- package/dist/admin/legacy/components/TableList/TableRows.mjs.map +1 -0
- package/dist/admin/legacy/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js.map +1 -0
- package/dist/admin/legacy/components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs.map +1 -0
- package/dist/admin/legacy/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js +177 -0
- package/dist/admin/legacy/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js.map +1 -0
- package/dist/admin/legacy/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs +155 -0
- package/dist/admin/legacy/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs.map +1 -0
- package/dist/admin/legacy/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js.map +1 -0
- package/dist/admin/legacy/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs.map +1 -0
- package/dist/admin/legacy/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js.map +1 -0
- package/dist/admin/legacy/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs.map +1 -0
- package/dist/admin/legacy/components/UploadAssetDialog/UploadAssetDialog.js.map +1 -0
- package/dist/admin/legacy/components/UploadAssetDialog/UploadAssetDialog.mjs.map +1 -0
- package/dist/admin/legacy/components/UploadProgress/UploadProgress.js.map +1 -0
- package/dist/admin/legacy/components/UploadProgress/UploadProgress.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useAiAvailability.js.map +1 -0
- package/dist/admin/legacy/hooks/useAiAvailability.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useAssets.js +127 -0
- package/dist/admin/legacy/hooks/useAssets.js.map +1 -0
- package/dist/admin/legacy/hooks/useAssets.mjs +105 -0
- package/dist/admin/legacy/hooks/useAssets.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useBulkEdit.js +65 -0
- package/dist/admin/legacy/hooks/useBulkEdit.js.map +1 -0
- package/dist/admin/legacy/hooks/useBulkEdit.mjs +63 -0
- package/dist/admin/legacy/hooks/useBulkEdit.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useBulkMove.js +78 -0
- package/dist/admin/legacy/hooks/useBulkMove.js.map +1 -0
- package/dist/admin/legacy/hooks/useBulkMove.mjs +76 -0
- package/dist/admin/legacy/hooks/useBulkMove.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useBulkRemove.js +83 -0
- package/dist/admin/legacy/hooks/useBulkRemove.js.map +1 -0
- package/dist/admin/legacy/hooks/useBulkRemove.mjs +81 -0
- package/dist/admin/legacy/hooks/useBulkRemove.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useConfig.js +58 -0
- package/dist/admin/legacy/hooks/useConfig.js.map +1 -0
- package/dist/admin/legacy/hooks/useConfig.mjs +56 -0
- package/dist/admin/legacy/hooks/useConfig.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useCropImg.js.map +1 -0
- package/dist/admin/legacy/hooks/useCropImg.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useEditAsset.js +115 -0
- package/dist/admin/legacy/hooks/useEditAsset.js.map +1 -0
- package/dist/admin/legacy/hooks/useEditAsset.mjs +93 -0
- package/dist/admin/legacy/hooks/useEditAsset.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useEditFolder.js +45 -0
- package/dist/admin/legacy/hooks/useEditFolder.js.map +1 -0
- package/dist/admin/legacy/hooks/useEditFolder.mjs +43 -0
- package/dist/admin/legacy/hooks/useEditFolder.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useFolder.js +57 -0
- package/dist/admin/legacy/hooks/useFolder.js.map +1 -0
- package/dist/admin/legacy/hooks/useFolder.mjs +55 -0
- package/dist/admin/legacy/hooks/useFolder.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useFolderStructure.js +52 -0
- package/dist/admin/legacy/hooks/useFolderStructure.js.map +1 -0
- package/dist/admin/legacy/hooks/useFolderStructure.mjs +50 -0
- package/dist/admin/legacy/hooks/useFolderStructure.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useFolders.js +108 -0
- package/dist/admin/legacy/hooks/useFolders.js.map +1 -0
- package/dist/admin/legacy/hooks/useFolders.mjs +86 -0
- package/dist/admin/legacy/hooks/useFolders.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useMediaLibraryPermissions.js +16 -0
- package/dist/admin/legacy/hooks/useMediaLibraryPermissions.js.map +1 -0
- package/dist/admin/legacy/hooks/useMediaLibraryPermissions.mjs +14 -0
- package/dist/admin/legacy/hooks/useMediaLibraryPermissions.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useModalQueryParams.js.map +1 -0
- package/dist/admin/legacy/hooks/useModalQueryParams.mjs.map +1 -0
- package/dist/admin/legacy/hooks/usePersistentState.js.map +1 -0
- package/dist/admin/legacy/hooks/usePersistentState.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useRemoveAsset.js +58 -0
- package/dist/admin/legacy/hooks/useRemoveAsset.js.map +1 -0
- package/dist/admin/legacy/hooks/useRemoveAsset.mjs +56 -0
- package/dist/admin/legacy/hooks/useRemoveAsset.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useSelectionState.js.map +1 -0
- package/dist/admin/legacy/hooks/useSelectionState.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useSettings.js.map +1 -0
- package/dist/admin/legacy/hooks/useSettings.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useTracking.js +25 -0
- package/dist/admin/legacy/hooks/useTracking.js.map +1 -0
- package/dist/admin/legacy/hooks/useTracking.mjs +23 -0
- package/dist/admin/legacy/hooks/useTracking.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useUpload.js +109 -0
- package/dist/admin/legacy/hooks/useUpload.js.map +1 -0
- package/dist/admin/legacy/hooks/useUpload.mjs +87 -0
- package/dist/admin/legacy/hooks/useUpload.mjs.map +1 -0
- package/dist/admin/legacy/hooks/utils/renameKeys.js.map +1 -0
- package/dist/admin/legacy/hooks/utils/renameKeys.mjs.map +1 -0
- package/dist/admin/legacy/pages/App/App.js.map +1 -0
- package/dist/admin/legacy/pages/App/App.mjs.map +1 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/ConfigureTheView.js +145 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/ConfigureTheView.mjs +120 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/components/Settings.js +109 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/components/Settings.js.map +1 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/components/Settings.mjs +107 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/components/Settings.mjs.map +1 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/state/actionTypes.js +10 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/state/actionTypes.js.map +1 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/state/actionTypes.mjs +7 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/state/actionTypes.mjs.map +1 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/state/actions.js.map +1 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/state/actions.mjs.map +1 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/state/init.js.map +1 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/state/init.mjs.map +1 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/state/reducer.js.map +1 -0
- package/dist/admin/legacy/pages/App/ConfigureTheView/state/reducer.mjs.map +1 -0
- package/dist/admin/legacy/pages/App/MediaLibrary.js +469 -0
- package/dist/admin/legacy/pages/App/MediaLibrary.js.map +1 -0
- package/dist/admin/legacy/pages/App/MediaLibrary.mjs +447 -0
- package/dist/admin/legacy/pages/App/MediaLibrary.mjs.map +1 -0
- package/dist/admin/legacy/pages/App/components/BulkActions.js.map +1 -0
- package/dist/admin/legacy/pages/App/components/BulkActions.mjs.map +1 -0
- package/dist/admin/legacy/pages/App/components/BulkDeleteButton.js.map +1 -0
- package/dist/admin/legacy/pages/App/components/BulkDeleteButton.mjs.map +1 -0
- package/dist/admin/legacy/pages/App/components/BulkMoveButton.js.map +1 -0
- package/dist/admin/legacy/pages/App/components/BulkMoveButton.mjs.map +1 -0
- package/dist/admin/legacy/pages/App/components/EmptyOrNoPermissions.js.map +1 -0
- package/dist/admin/legacy/pages/App/components/EmptyOrNoPermissions.mjs.map +1 -0
- package/dist/admin/legacy/pages/App/components/Filters.js.map +1 -0
- package/dist/admin/legacy/pages/App/components/Filters.mjs.map +1 -0
- package/dist/admin/legacy/pages/App/components/Header.js.map +1 -0
- package/dist/admin/legacy/pages/App/components/Header.mjs.map +1 -0
- package/dist/admin/legacy/utils/appendSearchParamsToUrl.js.map +1 -0
- package/dist/admin/legacy/utils/appendSearchParamsToUrl.mjs.map +1 -0
- package/dist/admin/legacy/utils/containsAssetFilter.js.map +1 -0
- package/dist/admin/legacy/utils/containsAssetFilter.mjs.map +1 -0
- package/dist/admin/legacy/utils/createAssetUrl.js.map +1 -0
- package/dist/admin/legacy/utils/createAssetUrl.mjs.map +1 -0
- package/dist/admin/legacy/utils/displayedFilters.js.map +1 -0
- package/dist/admin/legacy/utils/displayedFilters.mjs.map +1 -0
- package/dist/admin/legacy/utils/downloadFile.js +13 -0
- package/dist/admin/legacy/utils/downloadFile.js.map +1 -0
- package/dist/admin/legacy/utils/downloadFile.mjs +11 -0
- package/dist/admin/legacy/utils/downloadFile.mjs.map +1 -0
- package/dist/admin/legacy/utils/findRecursiveFolderByValue.js.map +1 -0
- package/dist/admin/legacy/utils/findRecursiveFolderByValue.mjs.map +1 -0
- package/dist/admin/legacy/utils/formatBytes.js.map +1 -0
- package/dist/admin/legacy/utils/formatBytes.mjs.map +1 -0
- package/dist/admin/legacy/utils/formatDuration.js.map +1 -0
- package/dist/admin/legacy/utils/formatDuration.mjs.map +1 -0
- package/dist/admin/legacy/utils/getAPIInnerErrors.js.map +1 -0
- package/dist/admin/legacy/utils/getAPIInnerErrors.mjs.map +1 -0
- package/dist/admin/legacy/utils/getAllowedFiles.js.map +1 -0
- package/dist/admin/legacy/utils/getAllowedFiles.mjs.map +1 -0
- package/dist/admin/legacy/utils/getBreadcrumbDataCM.js.map +1 -0
- package/dist/admin/legacy/utils/getBreadcrumbDataCM.mjs.map +1 -0
- package/dist/admin/legacy/utils/getBreadcrumbDataML.js.map +1 -0
- package/dist/admin/legacy/utils/getBreadcrumbDataML.mjs.map +1 -0
- package/dist/admin/legacy/utils/getFileExtension.js.map +1 -0
- package/dist/admin/legacy/utils/getFileExtension.mjs.map +1 -0
- package/dist/admin/legacy/utils/getFolderParents.js.map +1 -0
- package/dist/admin/legacy/utils/getFolderParents.mjs.map +1 -0
- package/dist/admin/legacy/utils/getFolderURL.js.map +1 -0
- package/dist/admin/legacy/utils/getFolderURL.mjs.map +1 -0
- package/dist/admin/legacy/utils/getTrad.js +8 -0
- package/dist/admin/legacy/utils/getTrad.js.map +1 -0
- package/dist/admin/legacy/utils/getTrad.mjs +6 -0
- package/dist/admin/legacy/utils/getTrad.mjs.map +1 -0
- package/dist/admin/legacy/utils/icons.js +23 -0
- package/dist/admin/legacy/utils/icons.js.map +1 -0
- package/dist/admin/legacy/utils/icons.mjs +19 -0
- package/dist/admin/legacy/utils/icons.mjs.map +1 -0
- package/dist/admin/legacy/utils/moveElement.js.map +1 -0
- package/dist/admin/legacy/utils/moveElement.mjs.map +1 -0
- package/dist/admin/legacy/utils/normalizeAPIError.js.map +1 -0
- package/dist/admin/legacy/utils/normalizeAPIError.mjs.map +1 -0
- package/dist/admin/legacy/utils/prefixFileUrlWithBackendUrl.js.map +1 -0
- package/dist/admin/legacy/utils/prefixFileUrlWithBackendUrl.mjs.map +1 -0
- package/dist/admin/legacy/utils/prefixPluginTranslations.js.map +1 -0
- package/dist/admin/legacy/utils/prefixPluginTranslations.mjs.map +1 -0
- package/dist/admin/legacy/utils/rawFileToAsset.js +23 -0
- package/dist/admin/legacy/utils/rawFileToAsset.js.map +1 -0
- package/dist/admin/legacy/utils/rawFileToAsset.mjs +21 -0
- package/dist/admin/legacy/utils/rawFileToAsset.mjs.map +1 -0
- package/dist/admin/legacy/utils/resolveFileMime.js.map +1 -0
- package/dist/admin/legacy/utils/resolveFileMime.mjs.map +1 -0
- package/dist/admin/legacy/utils/toSingularTypes.js.map +1 -0
- package/dist/admin/legacy/utils/toSingularTypes.mjs.map +1 -0
- package/dist/admin/legacy/utils/urlYupSchema.js.map +1 -0
- package/dist/admin/legacy/utils/urlYupSchema.mjs.map +1 -0
- package/dist/admin/legacy/utils/urlsToAssets.js +42 -0
- package/dist/admin/legacy/utils/urlsToAssets.js.map +1 -0
- package/dist/admin/legacy/utils/urlsToAssets.mjs +40 -0
- package/dist/admin/legacy/utils/urlsToAssets.mjs.map +1 -0
- package/dist/admin/pages/Assets/AssetsPage.js +828 -0
- package/dist/admin/pages/Assets/AssetsPage.js.map +1 -0
- package/dist/admin/pages/Assets/AssetsPage.mjs +806 -0
- package/dist/admin/pages/Assets/AssetsPage.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/ActionsMenuContent.js.map +1 -0
- package/dist/admin/pages/Assets/components/ActionsMenuContent.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/AssetActionsMenu.js.map +1 -0
- package/dist/admin/pages/Assets/components/AssetActionsMenu.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/AssetDetails/AssetCropEditor.js.map +1 -0
- package/dist/admin/pages/Assets/components/AssetDetails/AssetCropEditor.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +1202 -0
- package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -0
- package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +1175 -0
- package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/AssetDetails/AssetPreview.js +261 -0
- package/dist/admin/pages/Assets/components/AssetDetails/AssetPreview.js.map +1 -0
- package/dist/admin/pages/Assets/components/AssetDetails/AssetPreview.mjs +239 -0
- package/dist/admin/pages/Assets/components/AssetDetails/AssetPreview.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/AssetDetails/useCropImg.js.map +1 -0
- package/dist/admin/pages/Assets/components/AssetDetails/useCropImg.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/AssetsGrid.js +528 -0
- package/dist/admin/pages/Assets/components/AssetsGrid.js.map +1 -0
- package/dist/admin/pages/Assets/components/AssetsGrid.mjs +526 -0
- package/dist/admin/pages/Assets/components/AssetsGrid.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/AssetsSearchInput.js.map +1 -0
- package/dist/admin/pages/Assets/components/AssetsSearchInput.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/AssetsTable.js.map +1 -0
- package/dist/admin/pages/Assets/components/AssetsTable.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/BulkActionsBar.js +431 -0
- package/dist/admin/pages/Assets/components/BulkActionsBar.js.map +1 -0
- package/dist/admin/pages/Assets/components/BulkActionsBar.mjs +429 -0
- package/dist/admin/pages/Assets/components/BulkActionsBar.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/BulkMoveDialog.js.map +1 -0
- package/dist/admin/pages/Assets/components/BulkMoveDialog.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/BusyOverlay.js.map +1 -0
- package/dist/admin/pages/Assets/components/BusyOverlay.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/DateRangeCalendar.js.map +1 -0
- package/dist/admin/pages/Assets/components/DateRangeCalendar.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/DeleteItemsDialog.js.map +1 -0
- package/dist/admin/pages/Assets/components/DeleteItemsDialog.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/AssetsDndProvider.js +306 -0
- package/dist/admin/pages/Assets/components/Dnd/AssetsDndProvider.js.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/AssetsDndProvider.mjs +303 -0
- package/dist/admin/pages/Assets/components/Dnd/AssetsDndProvider.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/DragOverlayChip.js +147 -0
- package/dist/admin/pages/Assets/components/Dnd/DragOverlayChip.js.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/DragOverlayChip.mjs +145 -0
- package/dist/admin/pages/Assets/components/Dnd/DragOverlayChip.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/buildDragSet.js.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/buildDragSet.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/computeValidDropTargets.js.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/computeValidDropTargets.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/dndIds.js.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/dndIds.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.js.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/useFolderTreeDroppable.js.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/useFolderTreeDroppable.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/DropZone/UploadDropZone.js.map +1 -0
- package/dist/admin/pages/Assets/components/DropZone/UploadDropZone.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/DropZone/UploadDropZoneContext.js.map +1 -0
- package/dist/admin/pages/Assets/components/DropZone/UploadDropZoneContext.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/EmptyState.js.map +1 -0
- package/dist/admin/pages/Assets/components/EmptyState.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/FilterBadges.js.map +1 -0
- package/dist/admin/pages/Assets/components/FilterBadges.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/FilterMenu.js.map +1 -0
- package/dist/admin/pages/Assets/components/FilterMenu.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/FolderActionsMenu.js.map +1 -0
- package/dist/admin/pages/Assets/components/FolderActionsMenu.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/FolderFormDialog.js.map +1 -0
- package/dist/admin/pages/Assets/components/FolderFormDialog.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/FolderTree/FolderTree.js.map +1 -0
- package/dist/admin/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/FolderTree/useSpringLoadedExpand.js.map +1 -0
- package/dist/admin/pages/Assets/components/FolderTree/useSpringLoadedExpand.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/ImportFromUrlDialog.js.map +1 -0
- package/dist/admin/pages/Assets/components/ImportFromUrlDialog.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/MainAreaContextMenu.js.map +1 -0
- package/dist/admin/pages/Assets/components/MainAreaContextMenu.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/SortMenu.js.map +1 -0
- package/dist/admin/pages/Assets/components/SortMenu.mjs.map +1 -0
- package/dist/admin/pages/Assets/constants.js.map +1 -0
- package/dist/admin/pages/Assets/constants.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useAssetSearch.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useAssetSearch.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useAssetSelection.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useAssetSelection.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useBusyAssets.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useBusyAssets.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useFolderInfo.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useFolderInfo.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useFolderNavigation.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useFolderNavigation.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useInfiniteAssets.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useInfiniteAssets.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useInfiniteScrollSentinel.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useInfiniteScrollSentinel.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useListFilters.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useListFilters.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useListScrollRestoration.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useListScrollRestoration.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useListSort.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useListSort.mjs.map +1 -0
- package/dist/admin/pages/Assets/utils/buildAssetFilters.js.map +1 -0
- package/dist/admin/pages/Assets/utils/buildAssetFilters.mjs.map +1 -0
- package/dist/admin/pages/Assets/utils/listQueryKey.js.map +1 -0
- package/dist/admin/pages/Assets/utils/listQueryKey.mjs.map +1 -0
- package/dist/admin/pages/Assets/utils/mergeMixedList.js.map +1 -0
- package/dist/admin/pages/Assets/utils/mergeMixedList.mjs.map +1 -0
- package/dist/admin/pages/Assets/utils/mergeUploadedAssets.js.map +1 -0
- package/dist/admin/pages/Assets/utils/mergeUploadedAssets.mjs.map +1 -0
- package/dist/admin/pages/Assets/utils/renderedKeys.js.map +1 -0
- package/dist/admin/pages/Assets/utils/renderedKeys.mjs.map +1 -0
- package/dist/admin/pages/Assets/utils/selection.js.map +1 -0
- package/dist/admin/pages/Assets/utils/selection.mjs.map +1 -0
- package/dist/admin/pages/SettingsPage/SettingsPage.js +23 -28
- package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs +23 -28
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
- package/dist/admin/pages/SettingsPage/useAIMetadataJob.js +110 -0
- package/dist/admin/pages/SettingsPage/useAIMetadataJob.js.map +1 -0
- package/dist/admin/pages/SettingsPage/useAIMetadataJob.mjs +88 -0
- package/dist/admin/pages/SettingsPage/useAIMetadataJob.mjs.map +1 -0
- package/dist/admin/services/api.js +775 -0
- package/dist/admin/services/api.js.map +1 -0
- package/dist/admin/services/api.mjs +766 -0
- package/dist/admin/services/api.mjs.map +1 -0
- package/dist/admin/services/assets.js.map +1 -0
- package/dist/admin/services/assets.mjs.map +1 -0
- package/dist/admin/services/folders.js.map +1 -0
- package/dist/admin/services/folders.mjs.map +1 -0
- package/dist/admin/services/settings.js.map +1 -0
- package/dist/admin/services/settings.mjs.map +1 -0
- package/dist/admin/services/uploadFileViaXHR.js.map +1 -0
- package/dist/admin/services/uploadFileViaXHR.mjs.map +1 -0
- package/dist/admin/src/hooks/useMediaLibraryPermissions.d.ts +19 -2
- package/dist/admin/src/hooks/useTracking.d.ts +26 -1
- package/dist/admin/src/legacy/ai/components/AIAssetCard.d.ts +13 -0
- package/dist/admin/src/legacy/ai/components/AIUploadModal.d.ts +55 -0
- package/dist/admin/src/legacy/components/AssetCard/AssetCard.d.ts +19 -0
- package/dist/admin/src/legacy/components/AssetCard/UploadingAssetCard.d.ts +17 -0
- package/dist/admin/src/legacy/components/AssetDialog/AssetDialog.d.ts +39 -0
- package/dist/admin/src/legacy/components/AssetDialog/BrowseStep/BrowseStep.d.ts +63 -0
- package/dist/admin/src/legacy/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.d.ts +7 -0
- package/dist/admin/src/legacy/components/AssetDialog/SelectedStep/SelectedStep.d.ts +8 -0
- package/dist/admin/src/legacy/components/AssetGridList/AssetGridList.d.ts +13 -0
- package/dist/admin/src/legacy/components/BulkMoveDialog/BulkMoveDialog.d.ts +15 -0
- package/dist/admin/src/legacy/components/EditAssetDialog/EditAssetContent.d.ts +31 -0
- package/dist/admin/src/legacy/components/EditAssetDialog/PreviewBox/AssetPreview.d.ts +8 -0
- package/dist/admin/src/legacy/components/EditAssetDialog/PreviewBox/PreviewBox.d.ts +26 -0
- package/dist/admin/src/legacy/components/EditAssetDialog/RemoveAssetDialog.d.ts +8 -0
- package/dist/admin/src/legacy/components/EditFolderDialog/EditFolderDialog.d.ts +12 -0
- package/dist/admin/src/legacy/components/MediaLibraryDialog/MediaLibraryDialog.d.ts +10 -0
- package/dist/admin/src/legacy/components/MediaLibraryInput/Carousel/CarouselAsset.d.ts +4 -0
- package/dist/admin/src/legacy/components/MediaLibraryInput/Carousel/CarouselAssetActions.d.ts +9 -0
- package/dist/admin/src/legacy/components/MediaLibraryInput/Carousel/CarouselAssets.d.ts +23 -0
- package/dist/admin/src/legacy/components/MediaLibraryInput/Carousel/EmptyStateAsset.d.ts +10 -0
- package/dist/admin/src/legacy/components/SelectTree/Option.d.ts +16 -0
- package/dist/admin/src/legacy/components/SortPicker/SortPicker.d.ts +7 -0
- package/dist/admin/src/legacy/components/TableList/CellContent.d.ts +8 -0
- package/dist/admin/src/legacy/components/TableList/PreviewCell.d.ts +7 -0
- package/dist/admin/src/legacy/components/TableList/TableList.d.ts +31 -0
- package/dist/admin/src/legacy/components/TableList/TableRows.d.ts +22 -0
- package/dist/admin/src/legacy/components/UploadAssetDialog/AddAssetStep/AddAssetStep.d.ts +13 -0
- package/dist/admin/src/legacy/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.d.ts +22 -0
- package/dist/admin/src/legacy/components/UploadAssetDialog/UploadAssetDialog.d.ts +21 -0
- package/dist/admin/src/legacy/components/UploadProgress/UploadProgress.d.ts +7 -0
- package/dist/admin/src/legacy/hooks/useAssets.d.ts +14 -0
- package/dist/admin/src/legacy/hooks/useBulkEdit.d.ts +91 -0
- package/dist/admin/src/legacy/hooks/useBulkMove.d.ts +209 -0
- package/dist/admin/src/legacy/hooks/useBulkRemove.d.ts +241 -0
- package/dist/admin/src/legacy/hooks/useConfig.d.ts +5 -0
- package/dist/admin/src/legacy/hooks/useEditAsset.d.ts +119 -0
- package/dist/admin/src/legacy/hooks/useEditFolder.d.ts +72 -0
- package/dist/admin/src/legacy/hooks/useFolder.d.ts +7 -0
- package/dist/admin/src/legacy/hooks/useFolderStructure.d.ts +18 -0
- package/dist/admin/src/legacy/hooks/useFolders.d.ts +11 -0
- package/dist/admin/src/legacy/hooks/useMediaLibraryPermissions.d.ts +4 -0
- package/dist/admin/src/legacy/hooks/useModalQueryParams.d.ts +20 -0
- package/dist/admin/src/legacy/hooks/useRemoveAsset.d.ts +8 -0
- package/dist/admin/src/legacy/hooks/useTracking.d.ts +4 -0
- package/dist/admin/src/legacy/hooks/useUpload.d.ts +15 -0
- package/dist/admin/src/legacy/pages/App/ConfigureTheView/ConfigureTheView.d.ts +6 -0
- package/dist/admin/src/legacy/pages/App/ConfigureTheView/components/Settings.d.ts +13 -0
- package/dist/admin/src/legacy/pages/App/ConfigureTheView/state/actions.d.ts +12 -0
- package/dist/admin/src/legacy/pages/App/ConfigureTheView/state/init.d.ts +8 -0
- package/dist/admin/src/legacy/pages/App/MediaLibrary.d.ts +1 -0
- package/dist/admin/src/legacy/pages/App/components/BulkActions.d.ts +15 -0
- package/dist/admin/src/legacy/pages/App/components/BulkDeleteButton.d.ts +7 -0
- package/dist/admin/src/legacy/pages/App/components/BulkMoveButton.d.ts +15 -0
- package/dist/admin/src/legacy/pages/App/components/Header.d.ts +22 -0
- package/dist/admin/src/legacy/utils/containsAssetFilter.d.ts +2 -0
- package/dist/admin/src/legacy/utils/createAssetUrl.d.ts +2 -0
- package/dist/admin/src/legacy/utils/downloadFile.d.ts +1 -0
- package/dist/admin/src/legacy/utils/findRecursiveFolderByValue.d.ts +11 -0
- package/dist/admin/src/legacy/utils/getAllowedFiles.d.ts +14 -0
- package/dist/admin/src/legacy/utils/getBreadcrumbDataCM.d.ts +19 -0
- package/dist/admin/src/legacy/utils/getBreadcrumbDataML.d.ts +18 -0
- package/dist/admin/src/legacy/utils/getFolderParents.d.ts +11 -0
- package/dist/admin/src/legacy/utils/getFolderURL.d.ts +5 -0
- package/dist/admin/src/legacy/utils/icons.d.ts +15 -0
- package/dist/admin/src/legacy/utils/index.d.ts +26 -0
- package/dist/admin/src/legacy/utils/rawFileToAsset.d.ts +14 -0
- package/dist/admin/src/pages/Assets/components/ActionsMenuContent.d.ts +33 -0
- package/dist/admin/src/pages/Assets/components/AssetActionsMenu.d.ts +26 -0
- package/dist/admin/src/pages/Assets/components/AssetDetails/AssetCropEditor.d.ts +16 -0
- package/dist/admin/src/pages/Assets/components/AssetDetails/AssetDetailsDrawer.d.ts +46 -0
- package/dist/admin/src/pages/Assets/components/AssetDetails/AssetPreview.d.ts +9 -0
- package/dist/admin/src/pages/Assets/components/AssetsGrid.d.ts +12 -0
- package/dist/admin/src/pages/Assets/components/AssetsTable.d.ts +18 -0
- package/dist/admin/src/pages/Assets/components/BulkActionsBar.d.ts +28 -0
- package/dist/admin/src/pages/Assets/components/Dnd/computeValidDropTargets.d.ts +7 -0
- package/dist/admin/src/pages/Assets/components/FolderActionsMenu.d.ts +21 -0
- package/dist/admin/src/pages/Assets/hooks/useFolderNavigation.d.ts +7 -0
- package/dist/admin/src/pages/Assets/hooks/useInfiniteAssets.d.ts +45 -0
- package/dist/admin/src/pages/Assets/utils/mergeMixedList.d.ts +40 -0
- package/dist/admin/src/pages/Assets/utils/mergeUploadedAssets.d.ts +35 -0
- package/dist/admin/src/pages/Assets/utils/renderedKeys.d.ts +19 -0
- package/dist/admin/src/pages/SettingsPage/useAIMetadataJob.d.ts +9 -0
- package/dist/admin/src/services/api.d.ts +99 -0
- package/dist/admin/src/services/assets.d.ts +33 -0
- package/dist/admin/src/services/folders.d.ts +37 -0
- package/dist/admin/src/services/settings.d.ts +2 -0
- package/dist/admin/src/services/uploadFileViaXHR.d.ts +23 -0
- package/dist/admin/src/store/uploadProgress.d.ts +201 -0
- package/dist/admin/src/utils/canDropItemOnFolder.d.ts +9 -0
- package/dist/admin/src/utils/downloadFile.d.ts +5 -0
- package/dist/admin/src/utils/flattenFolderStructure.d.ts +18 -0
- package/dist/admin/src/utils/getFolderLabel.d.ts +11 -0
- package/dist/admin/src/utils/itemLocations.d.ts +31 -0
- package/dist/admin/store/hooks.js.map +1 -0
- package/dist/admin/store/hooks.mjs.map +1 -0
- package/dist/admin/store/uploadProgress.js +373 -0
- package/dist/admin/store/uploadProgress.js.map +1 -0
- package/dist/admin/store/uploadProgress.mjs +349 -0
- package/dist/admin/store/uploadProgress.mjs.map +1 -0
- package/dist/admin/translations/en.json.js +0 -3
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +0 -3
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/utils/buildBulkMovePayload.js.map +1 -0
- package/dist/admin/utils/buildBulkMovePayload.mjs.map +1 -0
- package/dist/admin/utils/buildDragSetFromSelection.js.map +1 -0
- package/dist/admin/utils/buildDragSetFromSelection.mjs.map +1 -0
- package/dist/admin/utils/canDropItemOnFolder.js.map +1 -0
- package/dist/admin/utils/canDropItemOnFolder.mjs.map +1 -0
- package/dist/admin/utils/createRafBatcher.js.map +1 -0
- package/dist/admin/utils/createRafBatcher.mjs.map +1 -0
- package/dist/admin/utils/downloadFile.js +13 -7
- package/dist/admin/utils/downloadFile.js.map +1 -1
- package/dist/admin/utils/downloadFile.mjs +13 -7
- package/dist/admin/utils/downloadFile.mjs.map +1 -1
- package/dist/admin/utils/files.js.map +1 -0
- package/dist/admin/utils/files.mjs.map +1 -0
- package/dist/admin/utils/flattenFolderStructure.js.map +1 -0
- package/dist/admin/utils/flattenFolderStructure.mjs.map +1 -0
- package/dist/admin/utils/formatMoveSuccessMessage.js.map +1 -0
- package/dist/admin/utils/formatMoveSuccessMessage.mjs.map +1 -0
- package/dist/admin/utils/getApiErrorMessage.js.map +1 -0
- package/dist/admin/utils/getApiErrorMessage.mjs.map +1 -0
- package/dist/admin/utils/getAssetIcon.js +28 -0
- package/dist/admin/utils/getAssetIcon.js.map +1 -0
- package/dist/admin/utils/getAssetIcon.mjs +26 -0
- package/dist/admin/utils/getAssetIcon.mjs.map +1 -0
- package/dist/admin/utils/getFolderLabel.js.map +1 -0
- package/dist/admin/utils/getFolderLabel.mjs.map +1 -0
- package/dist/admin/utils/getRelationId.js.map +1 -0
- package/dist/admin/utils/getRelationId.mjs.map +1 -0
- package/dist/admin/utils/isEventFromWithin.js.map +1 -0
- package/dist/admin/utils/isEventFromWithin.mjs.map +1 -0
- package/dist/admin/utils/itemLocations.js.map +1 -0
- package/dist/admin/utils/itemLocations.mjs.map +1 -0
- package/dist/admin/utils/itemSource.js.map +1 -0
- package/dist/admin/utils/itemSource.mjs.map +1 -0
- package/dist/admin/utils/searchQueryParam.js.map +1 -0
- package/dist/admin/utils/searchQueryParam.mjs.map +1 -0
- package/dist/admin/utils/translations.js +8 -0
- package/dist/admin/utils/translations.js.map +1 -0
- package/dist/admin/utils/translations.mjs +6 -0
- package/dist/admin/utils/translations.mjs.map +1 -0
- package/dist/server/bootstrap.js +11 -0
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +11 -0
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/controllers/admin-settings.js +1 -4
- package/dist/server/controllers/admin-settings.js.map +1 -1
- package/dist/server/controllers/admin-settings.mjs +1 -4
- package/dist/server/controllers/admin-settings.mjs.map +1 -1
- package/dist/server/controllers/admin-upload.js +31 -1
- package/dist/server/controllers/admin-upload.js.map +1 -1
- package/dist/server/controllers/admin-upload.mjs +31 -1
- package/dist/server/controllers/admin-upload.mjs.map +1 -1
- package/dist/server/controllers/utils/find-entity-and-check-permissions.js +15 -4
- package/dist/server/controllers/utils/find-entity-and-check-permissions.js.map +1 -1
- package/dist/server/controllers/utils/find-entity-and-check-permissions.mjs +15 -4
- package/dist/server/controllers/utils/find-entity-and-check-permissions.mjs.map +1 -1
- package/dist/server/controllers/utils/folders.js +1 -1
- package/dist/server/controllers/utils/folders.js.map +1 -1
- package/dist/server/controllers/utils/folders.mjs +1 -1
- package/dist/server/controllers/utils/folders.mjs.map +1 -1
- package/dist/server/mcp/ambient-instance.js +46 -0
- package/dist/server/mcp/ambient-instance.js.map +1 -0
- package/dist/server/mcp/ambient-instance.mjs +43 -0
- package/dist/server/mcp/ambient-instance.mjs.map +1 -0
- package/dist/server/mcp/handlers/constants.js +60 -0
- package/dist/server/mcp/handlers/constants.js.map +1 -0
- package/dist/server/mcp/handlers/constants.mjs +45 -0
- package/dist/server/mcp/handlers/constants.mjs.map +1 -0
- package/dist/server/mcp/handlers/folder-handlers.js +308 -0
- package/dist/server/mcp/handlers/folder-handlers.js.map +1 -0
- package/dist/server/mcp/handlers/folder-handlers.mjs +303 -0
- package/dist/server/mcp/handlers/folder-handlers.mjs.map +1 -0
- package/dist/server/mcp/handlers/read-handlers.js +134 -0
- package/dist/server/mcp/handlers/read-handlers.js.map +1 -0
- package/dist/server/mcp/handlers/read-handlers.mjs +130 -0
- package/dist/server/mcp/handlers/read-handlers.mjs.map +1 -0
- package/dist/server/mcp/handlers/write-handlers.js +315 -0
- package/dist/server/mcp/handlers/write-handlers.js.map +1 -0
- package/dist/server/mcp/handlers/write-handlers.mjs +311 -0
- package/dist/server/mcp/handlers/write-handlers.mjs.map +1 -0
- package/dist/server/mcp/permissions.js +36 -0
- package/dist/server/mcp/permissions.js.map +1 -0
- package/dist/server/mcp/permissions.mjs +33 -0
- package/dist/server/mcp/permissions.mjs.map +1 -0
- package/dist/server/mcp/register-upload-mcp-tools.js +235 -0
- package/dist/server/mcp/register-upload-mcp-tools.js.map +1 -0
- package/dist/server/mcp/register-upload-mcp-tools.mjs +232 -0
- package/dist/server/mcp/register-upload-mcp-tools.mjs.map +1 -0
- package/dist/server/mcp/sanitizers/sanitize-media.js +97 -0
- package/dist/server/mcp/sanitizers/sanitize-media.js.map +1 -0
- package/dist/server/mcp/sanitizers/sanitize-media.mjs +93 -0
- package/dist/server/mcp/sanitizers/sanitize-media.mjs.map +1 -0
- package/dist/server/mcp/schemas/input-schemas.js +206 -0
- package/dist/server/mcp/schemas/input-schemas.js.map +1 -0
- package/dist/server/mcp/schemas/input-schemas.mjs +190 -0
- package/dist/server/mcp/schemas/input-schemas.mjs.map +1 -0
- package/dist/server/mcp/schemas/output-schemas.js +158 -0
- package/dist/server/mcp/schemas/output-schemas.js.map +1 -0
- package/dist/server/mcp/schemas/output-schemas.mjs +142 -0
- package/dist/server/mcp/schemas/output-schemas.mjs.map +1 -0
- package/dist/server/mcp/utils.js +14 -0
- package/dist/server/mcp/utils.js.map +1 -0
- package/dist/server/mcp/utils.mjs +12 -0
- package/dist/server/mcp/utils.mjs.map +1 -0
- package/dist/server/media-library-default-notice.js +42 -0
- package/dist/server/media-library-default-notice.js.map +1 -0
- package/dist/server/media-library-default-notice.mjs +40 -0
- package/dist/server/media-library-default-notice.mjs.map +1 -0
- package/dist/server/migrations/unsign-richtext-and-blocks-urls.js +147 -0
- package/dist/server/migrations/unsign-richtext-and-blocks-urls.js.map +1 -0
- package/dist/server/migrations/unsign-richtext-and-blocks-urls.mjs +145 -0
- package/dist/server/migrations/unsign-richtext-and-blocks-urls.mjs.map +1 -0
- package/dist/server/register.js +8 -0
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs +8 -0
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/routes/admin.js +4 -1
- package/dist/server/routes/admin.js.map +1 -1
- package/dist/server/routes/admin.mjs +4 -1
- package/dist/server/routes/admin.mjs.map +1 -1
- package/dist/server/services/ai-metadata.js +1 -1
- package/dist/server/services/ai-metadata.js.map +1 -1
- package/dist/server/services/ai-metadata.mjs +1 -1
- package/dist/server/services/ai-metadata.mjs.map +1 -1
- package/dist/server/services/extensions/index.js +17 -5
- package/dist/server/services/extensions/index.js.map +1 -1
- package/dist/server/services/extensions/index.mjs +16 -4
- package/dist/server/services/extensions/index.mjs.map +1 -1
- package/dist/server/services/extensions/utils.js +318 -19
- package/dist/server/services/extensions/utils.js.map +1 -1
- package/dist/server/services/extensions/utils.mjs +309 -20
- package/dist/server/services/extensions/utils.mjs.map +1 -1
- package/dist/server/services/folder.js.map +1 -1
- package/dist/server/services/folder.mjs.map +1 -1
- package/dist/server/services/metrics.js +4 -3
- package/dist/server/services/metrics.js.map +1 -1
- package/dist/server/services/metrics.mjs +4 -3
- package/dist/server/services/metrics.mjs.map +1 -1
- package/dist/server/services/upload.js +14 -2
- package/dist/server/services/upload.js.map +1 -1
- package/dist/server/services/upload.mjs +14 -2
- package/dist/server/services/upload.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-settings.d.ts +1 -1
- package/dist/server/src/controllers/admin-settings.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-upload.d.ts +1 -0
- package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -1
- package/dist/server/src/controllers/utils/find-entity-and-check-permissions.d.ts +14 -1
- package/dist/server/src/controllers/utils/find-entity-and-check-permissions.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/folders.d.ts +2 -1
- package/dist/server/src/controllers/utils/folders.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +9 -3
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/ambient-instance.d.ts +65 -0
- package/dist/server/src/mcp/ambient-instance.d.ts.map +1 -0
- package/dist/server/src/mcp/handlers/constants.d.ts +48 -0
- package/dist/server/src/mcp/handlers/constants.d.ts.map +1 -0
- package/dist/server/src/mcp/handlers/folder-handlers.d.ts +49 -0
- package/dist/server/src/mcp/handlers/folder-handlers.d.ts.map +1 -0
- package/dist/server/src/mcp/handlers/index.d.ts +5 -0
- package/dist/server/src/mcp/handlers/index.d.ts.map +1 -0
- package/dist/server/src/mcp/handlers/read-handlers.d.ts +35 -0
- package/dist/server/src/mcp/handlers/read-handlers.d.ts.map +1 -0
- package/dist/server/src/mcp/handlers/write-handlers.d.ts +66 -0
- package/dist/server/src/mcp/handlers/write-handlers.d.ts.map +1 -0
- package/dist/server/src/mcp/index.d.ts +3 -0
- package/dist/server/src/mcp/index.d.ts.map +1 -0
- package/dist/server/src/mcp/permissions.d.ts +22 -0
- package/dist/server/src/mcp/permissions.d.ts.map +1 -0
- package/dist/server/src/mcp/register-upload-mcp-tools.d.ts +29 -0
- package/dist/server/src/mcp/register-upload-mcp-tools.d.ts.map +1 -0
- package/dist/server/src/mcp/sanitizers/sanitize-media.d.ts +63 -0
- package/dist/server/src/mcp/sanitizers/sanitize-media.d.ts.map +1 -0
- package/dist/server/src/mcp/schemas/index.d.ts +3 -0
- package/dist/server/src/mcp/schemas/index.d.ts.map +1 -0
- package/dist/server/src/mcp/schemas/input-schemas.d.ts +148 -0
- package/dist/server/src/mcp/schemas/input-schemas.d.ts.map +1 -0
- package/dist/server/src/mcp/schemas/output-schemas.d.ts +276 -0
- package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -0
- package/dist/server/src/mcp/types.d.ts +19 -0
- package/dist/server/src/mcp/types.d.ts.map +1 -0
- package/dist/server/src/mcp/utils.d.ts +4 -0
- package/dist/server/src/mcp/utils.d.ts.map +1 -0
- package/dist/server/src/media-library-default-notice.d.ts +19 -0
- package/dist/server/src/media-library-default-notice.d.ts.map +1 -0
- package/dist/server/src/migrations/unsign-richtext-and-blocks-urls.d.ts +18 -0
- package/dist/server/src/migrations/unsign-richtext-and-blocks-urls.d.ts.map +1 -0
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/admin.d.ts.map +1 -1
- package/dist/server/src/services/extensions/index.d.ts.map +1 -1
- package/dist/server/src/services/extensions/utils.d.ts +52 -2
- package/dist/server/src/services/extensions/utils.d.ts.map +1 -1
- package/dist/server/src/services/folder.d.ts +6 -2
- package/dist/server/src/services/folder.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +8 -2
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/metrics.d.ts.map +1 -1
- package/dist/server/src/services/upload.d.ts +8 -1
- package/dist/server/src/services/upload.d.ts.map +1 -1
- package/dist/server/src/types.d.ts +2 -2
- package/dist/server/src/types.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +2 -1
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/utils/index.js +2 -2
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs +2 -2
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/shared/contracts/files.d.ts +22 -0
- package/dist/shared/contracts/files.d.ts.map +1 -1
- package/package.json +7 -6
- package/dist/admin/ai/components/AIAssetCard.js +0 -621
- package/dist/admin/ai/components/AIAssetCard.js.map +0 -1
- package/dist/admin/ai/components/AIAssetCard.mjs +0 -598
- package/dist/admin/ai/components/AIAssetCard.mjs.map +0 -1
- package/dist/admin/ai/components/AIUploadModal.js.map +0 -1
- package/dist/admin/ai/components/AIUploadModal.mjs.map +0 -1
- package/dist/admin/components/AssetCard/AssetCard.js +0 -67
- package/dist/admin/components/AssetCard/AssetCard.js.map +0 -1
- package/dist/admin/components/AssetCard/AssetCard.mjs +0 -65
- package/dist/admin/components/AssetCard/AssetCard.mjs.map +0 -1
- package/dist/admin/components/AssetCard/AssetCardBase.js.map +0 -1
- package/dist/admin/components/AssetCard/AssetCardBase.mjs.map +0 -1
- package/dist/admin/components/AssetCard/AudioAssetCard.js.map +0 -1
- package/dist/admin/components/AssetCard/AudioAssetCard.mjs.map +0 -1
- package/dist/admin/components/AssetCard/AudioPreview.js.map +0 -1
- package/dist/admin/components/AssetCard/AudioPreview.mjs.map +0 -1
- package/dist/admin/components/AssetCard/DocAssetCard.js.map +0 -1
- package/dist/admin/components/AssetCard/DocAssetCard.mjs.map +0 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.js.map +0 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.mjs.map +0 -1
- package/dist/admin/components/AssetCard/UploadingAssetCard.js +0 -154
- package/dist/admin/components/AssetCard/UploadingAssetCard.js.map +0 -1
- package/dist/admin/components/AssetCard/UploadingAssetCard.mjs +0 -132
- package/dist/admin/components/AssetCard/UploadingAssetCard.mjs.map +0 -1
- package/dist/admin/components/AssetCard/VideoAssetCard.js.map +0 -1
- package/dist/admin/components/AssetCard/VideoAssetCard.mjs.map +0 -1
- package/dist/admin/components/AssetCard/VideoPreview.js.map +0 -1
- package/dist/admin/components/AssetCard/VideoPreview.mjs.map +0 -1
- package/dist/admin/components/AssetDialog/AssetDialog.js.map +0 -1
- package/dist/admin/components/AssetDialog/AssetDialog.mjs.map +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js +0 -320
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js.map +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs +0 -318
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs.map +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/Filters.js.map +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/Filters.mjs.map +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/PageSize.js.map +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/PageSize.mjs.map +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.js.map +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.mjs.map +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.js.map +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.mjs.map +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js.map +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs.map +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/utils/isSelectable.js.map +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/utils/isSelectable.mjs.map +0 -1
- package/dist/admin/components/AssetDialog/DialogFooter.js.map +0 -1
- package/dist/admin/components/AssetDialog/DialogFooter.mjs.map +0 -1
- package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.js.map +0 -1
- package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.mjs.map +0 -1
- package/dist/admin/components/AssetGridList/AssetGridList.js.map +0 -1
- package/dist/admin/components/AssetGridList/AssetGridList.mjs.map +0 -1
- package/dist/admin/components/AssetGridList/Draggable.js.map +0 -1
- package/dist/admin/components/AssetGridList/Draggable.mjs.map +0 -1
- package/dist/admin/components/Breadcrumbs/Breadcrumbs.js.map +0 -1
- package/dist/admin/components/Breadcrumbs/Breadcrumbs.mjs.map +0 -1
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js.map +0 -1
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs.map +0 -1
- package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js.map +0 -1
- package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs.map +0 -1
- package/dist/admin/components/ContextInfo/ContextInfo.js.map +0 -1
- package/dist/admin/components/ContextInfo/ContextInfo.mjs.map +0 -1
- package/dist/admin/components/CopyLinkButton/CopyLinkButton.js.map +0 -1
- package/dist/admin/components/CopyLinkButton/CopyLinkButton.mjs.map +0 -1
- package/dist/admin/components/EditAssetDialog/DialogHeader.js.map +0 -1
- package/dist/admin/components/EditAssetDialog/DialogHeader.mjs.map +0 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +0 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +0 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js +0 -114
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js.map +0 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs +0 -89
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs.map +0 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.js.map +0 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.mjs.map +0 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.js.map +0 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs.map +0 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js +0 -362
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js.map +0 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs +0 -337
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs.map +0 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.js.map +0 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.mjs.map +0 -1
- package/dist/admin/components/EditAssetDialog/RemoveAssetDialog.js.map +0 -1
- package/dist/admin/components/EditAssetDialog/RemoveAssetDialog.mjs.map +0 -1
- package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js.map +0 -1
- package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.mjs.map +0 -1
- package/dist/admin/components/EditFolderDialog/EditFolderDialog.js.map +0 -1
- package/dist/admin/components/EditFolderDialog/EditFolderDialog.mjs.map +0 -1
- package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.js.map +0 -1
- package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.mjs.map +0 -1
- package/dist/admin/components/EditFolderDialog/RemoveFolderDialog.js.map +0 -1
- package/dist/admin/components/EditFolderDialog/RemoveFolderDialog.mjs.map +0 -1
- package/dist/admin/components/EmptyAssets/EmptyAssetGrid.js.map +0 -1
- package/dist/admin/components/EmptyAssets/EmptyAssetGrid.mjs.map +0 -1
- package/dist/admin/components/EmptyAssets/EmptyAssets.js.map +0 -1
- package/dist/admin/components/EmptyAssets/EmptyAssets.mjs.map +0 -1
- package/dist/admin/components/FilterList/FilterList.js.map +0 -1
- package/dist/admin/components/FilterList/FilterList.mjs.map +0 -1
- package/dist/admin/components/FilterList/FilterTag.js.map +0 -1
- package/dist/admin/components/FilterList/FilterTag.mjs.map +0 -1
- package/dist/admin/components/FilterPopover/FilterPopover.js.map +0 -1
- package/dist/admin/components/FilterPopover/FilterPopover.mjs.map +0 -1
- package/dist/admin/components/FilterPopover/FilterValueInput.js.map +0 -1
- package/dist/admin/components/FilterPopover/FilterValueInput.mjs.map +0 -1
- package/dist/admin/components/FilterPopover/utils/getFilterList.js.map +0 -1
- package/dist/admin/components/FilterPopover/utils/getFilterList.mjs.map +0 -1
- package/dist/admin/components/FolderCard/FolderCard/FolderCard.js.map +0 -1
- package/dist/admin/components/FolderCard/FolderCard/FolderCard.mjs.map +0 -1
- package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.js.map +0 -1
- package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.mjs.map +0 -1
- package/dist/admin/components/FolderCard/FolderCardBodyAction/FolderCardBodyAction.js.map +0 -1
- package/dist/admin/components/FolderCard/FolderCardBodyAction/FolderCardBodyAction.mjs.map +0 -1
- package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.js.map +0 -1
- package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.mjs.map +0 -1
- package/dist/admin/components/FolderCard/contexts/FolderCard.js.map +0 -1
- package/dist/admin/components/FolderCard/contexts/FolderCard.mjs.map +0 -1
- package/dist/admin/components/FolderGridList/FolderGridList.js.map +0 -1
- package/dist/admin/components/FolderGridList/FolderGridList.mjs.map +0 -1
- package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.js.map +0 -1
- package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.mjs.map +0 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js +0 -89
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js.map +0 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs +0 -87
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs.map +0 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.js.map +0 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.mjs.map +0 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js.map +0 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.mjs.map +0 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js +0 -111
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js.map +0 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs +0 -89
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs.map +0 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +0 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +0 -1
- package/dist/admin/components/SelectTree/Option.js.map +0 -1
- package/dist/admin/components/SelectTree/Option.mjs.map +0 -1
- package/dist/admin/components/SelectTree/SelectTree.js.map +0 -1
- package/dist/admin/components/SelectTree/SelectTree.mjs.map +0 -1
- package/dist/admin/components/SelectTree/utils/flattenTree.js.map +0 -1
- package/dist/admin/components/SelectTree/utils/flattenTree.mjs.map +0 -1
- package/dist/admin/components/SelectTree/utils/getOpenValues.js.map +0 -1
- package/dist/admin/components/SelectTree/utils/getOpenValues.mjs.map +0 -1
- package/dist/admin/components/SelectTree/utils/getValuesToClose.js.map +0 -1
- package/dist/admin/components/SelectTree/utils/getValuesToClose.mjs.map +0 -1
- package/dist/admin/components/SortPicker/SortPicker.js +0 -40
- package/dist/admin/components/SortPicker/SortPicker.js.map +0 -1
- package/dist/admin/components/SortPicker/SortPicker.mjs +0 -38
- package/dist/admin/components/SortPicker/SortPicker.mjs.map +0 -1
- package/dist/admin/components/TableList/CellContent.js.map +0 -1
- package/dist/admin/components/TableList/CellContent.mjs.map +0 -1
- package/dist/admin/components/TableList/PreviewCell.js +0 -116
- package/dist/admin/components/TableList/PreviewCell.js.map +0 -1
- package/dist/admin/components/TableList/PreviewCell.mjs +0 -114
- package/dist/admin/components/TableList/PreviewCell.mjs.map +0 -1
- package/dist/admin/components/TableList/TableList.js +0 -100
- package/dist/admin/components/TableList/TableList.js.map +0 -1
- package/dist/admin/components/TableList/TableList.mjs +0 -98
- package/dist/admin/components/TableList/TableList.mjs.map +0 -1
- package/dist/admin/components/TableList/TableRows.js +0 -105
- package/dist/admin/components/TableList/TableRows.js.map +0 -1
- package/dist/admin/components/TableList/TableRows.mjs +0 -103
- package/dist/admin/components/TableList/TableRows.mjs.map +0 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js.map +0 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs.map +0 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js +0 -177
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js.map +0 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs +0 -155
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs.map +0 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js.map +0 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs.map +0 -1
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js.map +0 -1
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs.map +0 -1
- package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.js.map +0 -1
- package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.mjs.map +0 -1
- package/dist/admin/components/UploadProgress/UploadProgress.js.map +0 -1
- package/dist/admin/components/UploadProgress/UploadProgress.mjs.map +0 -1
- package/dist/admin/future/App.js +0 -33
- package/dist/admin/future/App.js.map +0 -1
- package/dist/admin/future/App.mjs +0 -31
- package/dist/admin/future/App.mjs.map +0 -1
- package/dist/admin/future/components/BetaNotice.js +0 -72
- package/dist/admin/future/components/BetaNotice.js.map +0 -1
- package/dist/admin/future/components/BetaNotice.mjs +0 -70
- package/dist/admin/future/components/BetaNotice.mjs.map +0 -1
- package/dist/admin/future/components/Drawer.js.map +0 -1
- package/dist/admin/future/components/Drawer.mjs.map +0 -1
- package/dist/admin/future/components/TruncatedText.js.map +0 -1
- package/dist/admin/future/components/TruncatedText.mjs.map +0 -1
- package/dist/admin/future/components/UploadProgressDialog.js +0 -699
- package/dist/admin/future/components/UploadProgressDialog.js.map +0 -1
- package/dist/admin/future/components/UploadProgressDialog.mjs +0 -697
- package/dist/admin/future/components/UploadProgressDialog.mjs.map +0 -1
- package/dist/admin/future/hooks/useAIMetadataEnabled.js +0 -39
- package/dist/admin/future/hooks/useAIMetadataEnabled.js.map +0 -1
- package/dist/admin/future/hooks/useAIMetadataEnabled.mjs +0 -37
- package/dist/admin/future/hooks/useAIMetadataEnabled.mjs.map +0 -1
- package/dist/admin/future/hooks/useApiErrorMessage.js.map +0 -1
- package/dist/admin/future/hooks/useApiErrorMessage.mjs.map +0 -1
- package/dist/admin/future/hooks/useMediaLibraryPermissions.js +0 -35
- package/dist/admin/future/hooks/useMediaLibraryPermissions.js.map +0 -1
- package/dist/admin/future/hooks/useMediaLibraryPermissions.mjs +0 -33
- package/dist/admin/future/hooks/useMediaLibraryPermissions.mjs.map +0 -1
- package/dist/admin/future/hooks/useTracking.js +0 -57
- package/dist/admin/future/hooks/useTracking.js.map +0 -1
- package/dist/admin/future/hooks/useTracking.mjs +0 -53
- package/dist/admin/future/hooks/useTracking.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/AssetsPage.js +0 -830
- package/dist/admin/future/pages/Assets/AssetsPage.js.map +0 -1
- package/dist/admin/future/pages/Assets/AssetsPage.mjs +0 -808
- package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/ActionsMenuContent.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/ActionsMenuContent.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/AssetActionsMenu.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/AssetActionsMenu.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +0 -1202
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +0 -1175
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.js +0 -261
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.mjs +0 -239
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/useCropImg.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/useCropImg.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js +0 -534
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +0 -532
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/BulkActionsBar.js +0 -431
- package/dist/admin/future/pages/Assets/components/BulkActionsBar.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs +0 -429
- package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/BusyOverlay.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/BusyOverlay.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/DateRangeCalendar.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/DateRangeCalendar.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js +0 -299
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs +0 -296
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.js +0 -144
- package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.mjs +0 -142
- package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/Dnd/dndIds.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/Dnd/dndIds.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/EmptyState.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/EmptyState.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/FilterBadges.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/FilterBadges.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/FilterMenu.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/FilterMenu.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/FolderActionsMenu.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/FolderActionsMenu.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/FolderFormDialog.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/FolderFormDialog.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/ImportFromUrlDialog.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/ImportFromUrlDialog.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/MainAreaContextMenu.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/MainAreaContextMenu.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/components/SortMenu.js.map +0 -1
- package/dist/admin/future/pages/Assets/components/SortMenu.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/constants.js.map +0 -1
- package/dist/admin/future/pages/Assets/constants.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useAssetSearch.js.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useAssetSearch.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useBusyAssets.js.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useBusyAssets.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useFolderInfo.js.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useFolderInfo.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.js.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useIsAssetDetailsOpen.js.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useIsAssetDetailsOpen.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useListFilters.js.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useListFilters.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useListScrollRestoration.js.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useListScrollRestoration.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useListSort.js.map +0 -1
- package/dist/admin/future/pages/Assets/hooks/useListSort.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/utils/buildAssetFilters.js.map +0 -1
- package/dist/admin/future/pages/Assets/utils/buildAssetFilters.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/utils/listQueryKey.js.map +0 -1
- package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/utils/mergeMixedList.js.map +0 -1
- package/dist/admin/future/pages/Assets/utils/mergeMixedList.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/utils/mergeUploadedAssets.js.map +0 -1
- package/dist/admin/future/pages/Assets/utils/mergeUploadedAssets.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/utils/renderedKeys.js.map +0 -1
- package/dist/admin/future/pages/Assets/utils/renderedKeys.mjs.map +0 -1
- package/dist/admin/future/pages/Assets/utils/selection.js.map +0 -1
- package/dist/admin/future/pages/Assets/utils/selection.mjs.map +0 -1
- package/dist/admin/future/services/api.js +0 -758
- package/dist/admin/future/services/api.js.map +0 -1
- package/dist/admin/future/services/api.mjs +0 -749
- package/dist/admin/future/services/api.mjs.map +0 -1
- package/dist/admin/future/services/assets.js.map +0 -1
- package/dist/admin/future/services/assets.mjs.map +0 -1
- package/dist/admin/future/services/folders.js.map +0 -1
- package/dist/admin/future/services/folders.mjs.map +0 -1
- package/dist/admin/future/services/settings.js.map +0 -1
- package/dist/admin/future/services/settings.mjs.map +0 -1
- package/dist/admin/future/services/uploadFileViaXHR.js.map +0 -1
- package/dist/admin/future/services/uploadFileViaXHR.mjs.map +0 -1
- package/dist/admin/future/store/hooks.js.map +0 -1
- package/dist/admin/future/store/hooks.mjs.map +0 -1
- package/dist/admin/future/store/uploadProgress.js +0 -364
- package/dist/admin/future/store/uploadProgress.js.map +0 -1
- package/dist/admin/future/store/uploadProgress.mjs +0 -340
- package/dist/admin/future/store/uploadProgress.mjs.map +0 -1
- package/dist/admin/future/utils/buildBulkMovePayload.js.map +0 -1
- package/dist/admin/future/utils/buildBulkMovePayload.mjs.map +0 -1
- package/dist/admin/future/utils/buildDragSetFromSelection.js.map +0 -1
- package/dist/admin/future/utils/buildDragSetFromSelection.mjs.map +0 -1
- package/dist/admin/future/utils/canDropItemOnFolder.js.map +0 -1
- package/dist/admin/future/utils/canDropItemOnFolder.mjs.map +0 -1
- package/dist/admin/future/utils/createRafBatcher.js.map +0 -1
- package/dist/admin/future/utils/createRafBatcher.mjs.map +0 -1
- package/dist/admin/future/utils/downloadFile.js +0 -19
- package/dist/admin/future/utils/downloadFile.js.map +0 -1
- package/dist/admin/future/utils/downloadFile.mjs +0 -17
- package/dist/admin/future/utils/downloadFile.mjs.map +0 -1
- package/dist/admin/future/utils/files.js.map +0 -1
- package/dist/admin/future/utils/files.mjs.map +0 -1
- package/dist/admin/future/utils/flattenFolderStructure.js.map +0 -1
- package/dist/admin/future/utils/flattenFolderStructure.mjs.map +0 -1
- package/dist/admin/future/utils/formatMoveSuccessMessage.js.map +0 -1
- package/dist/admin/future/utils/formatMoveSuccessMessage.mjs.map +0 -1
- package/dist/admin/future/utils/getApiErrorMessage.js.map +0 -1
- package/dist/admin/future/utils/getApiErrorMessage.mjs.map +0 -1
- package/dist/admin/future/utils/getAssetIcon.js +0 -28
- package/dist/admin/future/utils/getAssetIcon.js.map +0 -1
- package/dist/admin/future/utils/getAssetIcon.mjs +0 -26
- package/dist/admin/future/utils/getAssetIcon.mjs.map +0 -1
- package/dist/admin/future/utils/getFolderLabel.js.map +0 -1
- package/dist/admin/future/utils/getFolderLabel.mjs.map +0 -1
- package/dist/admin/future/utils/getRelationId.js.map +0 -1
- package/dist/admin/future/utils/getRelationId.mjs.map +0 -1
- package/dist/admin/future/utils/isEventFromWithin.js.map +0 -1
- package/dist/admin/future/utils/isEventFromWithin.mjs.map +0 -1
- package/dist/admin/future/utils/itemLocations.js.map +0 -1
- package/dist/admin/future/utils/itemLocations.mjs.map +0 -1
- package/dist/admin/future/utils/itemSource.js.map +0 -1
- package/dist/admin/future/utils/itemSource.mjs.map +0 -1
- package/dist/admin/future/utils/searchQueryParam.js.map +0 -1
- package/dist/admin/future/utils/searchQueryParam.mjs.map +0 -1
- package/dist/admin/future/utils/translations.js +0 -8
- package/dist/admin/future/utils/translations.js.map +0 -1
- package/dist/admin/future/utils/translations.mjs +0 -6
- package/dist/admin/future/utils/translations.mjs.map +0 -1
- package/dist/admin/hooks/useAIMetadataJob.js +0 -114
- package/dist/admin/hooks/useAIMetadataJob.js.map +0 -1
- package/dist/admin/hooks/useAIMetadataJob.mjs +0 -92
- package/dist/admin/hooks/useAIMetadataJob.mjs.map +0 -1
- package/dist/admin/hooks/useAiAvailability.js.map +0 -1
- package/dist/admin/hooks/useAiAvailability.mjs.map +0 -1
- package/dist/admin/hooks/useAssets.js +0 -127
- package/dist/admin/hooks/useAssets.js.map +0 -1
- package/dist/admin/hooks/useAssets.mjs +0 -105
- package/dist/admin/hooks/useAssets.mjs.map +0 -1
- package/dist/admin/hooks/useBulkEdit.js +0 -65
- package/dist/admin/hooks/useBulkEdit.js.map +0 -1
- package/dist/admin/hooks/useBulkEdit.mjs +0 -63
- package/dist/admin/hooks/useBulkEdit.mjs.map +0 -1
- package/dist/admin/hooks/useBulkMove.js +0 -78
- package/dist/admin/hooks/useBulkMove.js.map +0 -1
- package/dist/admin/hooks/useBulkMove.mjs +0 -76
- package/dist/admin/hooks/useBulkMove.mjs.map +0 -1
- package/dist/admin/hooks/useBulkRemove.js +0 -83
- package/dist/admin/hooks/useBulkRemove.js.map +0 -1
- package/dist/admin/hooks/useBulkRemove.mjs +0 -81
- package/dist/admin/hooks/useBulkRemove.mjs.map +0 -1
- package/dist/admin/hooks/useConfig.js +0 -58
- package/dist/admin/hooks/useConfig.js.map +0 -1
- package/dist/admin/hooks/useConfig.mjs +0 -56
- package/dist/admin/hooks/useConfig.mjs.map +0 -1
- package/dist/admin/hooks/useCropImg.js.map +0 -1
- package/dist/admin/hooks/useCropImg.mjs.map +0 -1
- package/dist/admin/hooks/useEditAsset.js +0 -115
- package/dist/admin/hooks/useEditAsset.js.map +0 -1
- package/dist/admin/hooks/useEditAsset.mjs +0 -93
- package/dist/admin/hooks/useEditAsset.mjs.map +0 -1
- package/dist/admin/hooks/useEditFolder.js +0 -45
- package/dist/admin/hooks/useEditFolder.js.map +0 -1
- package/dist/admin/hooks/useEditFolder.mjs +0 -43
- package/dist/admin/hooks/useEditFolder.mjs.map +0 -1
- package/dist/admin/hooks/useFolder.js +0 -57
- package/dist/admin/hooks/useFolder.js.map +0 -1
- package/dist/admin/hooks/useFolder.mjs +0 -55
- package/dist/admin/hooks/useFolder.mjs.map +0 -1
- package/dist/admin/hooks/useFolderStructure.js +0 -52
- package/dist/admin/hooks/useFolderStructure.js.map +0 -1
- package/dist/admin/hooks/useFolderStructure.mjs +0 -50
- package/dist/admin/hooks/useFolderStructure.mjs.map +0 -1
- package/dist/admin/hooks/useFolders.js +0 -108
- package/dist/admin/hooks/useFolders.js.map +0 -1
- package/dist/admin/hooks/useFolders.mjs +0 -86
- package/dist/admin/hooks/useFolders.mjs.map +0 -1
- package/dist/admin/hooks/useModalQueryParams.js.map +0 -1
- package/dist/admin/hooks/useModalQueryParams.mjs.map +0 -1
- package/dist/admin/hooks/usePersistentState.js.map +0 -1
- package/dist/admin/hooks/usePersistentState.mjs.map +0 -1
- package/dist/admin/hooks/useRemoveAsset.js +0 -58
- package/dist/admin/hooks/useRemoveAsset.js.map +0 -1
- package/dist/admin/hooks/useRemoveAsset.mjs +0 -56
- package/dist/admin/hooks/useRemoveAsset.mjs.map +0 -1
- package/dist/admin/hooks/useSelectionState.js.map +0 -1
- package/dist/admin/hooks/useSelectionState.mjs.map +0 -1
- package/dist/admin/hooks/useSettings.js.map +0 -1
- package/dist/admin/hooks/useSettings.mjs.map +0 -1
- package/dist/admin/hooks/useUpload.js +0 -109
- package/dist/admin/hooks/useUpload.js.map +0 -1
- package/dist/admin/hooks/useUpload.mjs +0 -87
- package/dist/admin/hooks/useUpload.mjs.map +0 -1
- package/dist/admin/hooks/utils/renameKeys.js.map +0 -1
- package/dist/admin/hooks/utils/renameKeys.mjs.map +0 -1
- package/dist/admin/pages/App/App.js.map +0 -1
- package/dist/admin/pages/App/App.mjs.map +0 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js +0 -145
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js.map +0 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs +0 -120
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +0 -1
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.js +0 -109
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.js.map +0 -1
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs +0 -107
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs.map +0 -1
- package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.js +0 -10
- package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.js.map +0 -1
- package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.mjs +0 -7
- package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.mjs.map +0 -1
- package/dist/admin/pages/App/ConfigureTheView/state/actions.js.map +0 -1
- package/dist/admin/pages/App/ConfigureTheView/state/actions.mjs.map +0 -1
- package/dist/admin/pages/App/ConfigureTheView/state/init.js.map +0 -1
- package/dist/admin/pages/App/ConfigureTheView/state/init.mjs.map +0 -1
- package/dist/admin/pages/App/ConfigureTheView/state/reducer.js.map +0 -1
- package/dist/admin/pages/App/ConfigureTheView/state/reducer.mjs.map +0 -1
- package/dist/admin/pages/App/MediaLibrary.js +0 -469
- package/dist/admin/pages/App/MediaLibrary.js.map +0 -1
- package/dist/admin/pages/App/MediaLibrary.mjs +0 -447
- package/dist/admin/pages/App/MediaLibrary.mjs.map +0 -1
- package/dist/admin/pages/App/components/BulkActions.js.map +0 -1
- package/dist/admin/pages/App/components/BulkActions.mjs.map +0 -1
- package/dist/admin/pages/App/components/BulkDeleteButton.js.map +0 -1
- package/dist/admin/pages/App/components/BulkDeleteButton.mjs.map +0 -1
- package/dist/admin/pages/App/components/BulkMoveButton.js.map +0 -1
- package/dist/admin/pages/App/components/BulkMoveButton.mjs.map +0 -1
- package/dist/admin/pages/App/components/EmptyOrNoPermissions.js.map +0 -1
- package/dist/admin/pages/App/components/EmptyOrNoPermissions.mjs.map +0 -1
- package/dist/admin/pages/App/components/Filters.js.map +0 -1
- package/dist/admin/pages/App/components/Filters.mjs.map +0 -1
- package/dist/admin/pages/App/components/Header.js.map +0 -1
- package/dist/admin/pages/App/components/Header.mjs.map +0 -1
- package/dist/admin/src/ai/components/AIAssetCard.d.ts +0 -13
- package/dist/admin/src/ai/components/AIUploadModal.d.ts +0 -55
- package/dist/admin/src/components/AssetCard/AssetCard.d.ts +0 -19
- package/dist/admin/src/components/AssetCard/UploadingAssetCard.d.ts +0 -17
- package/dist/admin/src/components/AssetDialog/AssetDialog.d.ts +0 -39
- package/dist/admin/src/components/AssetDialog/BrowseStep/BrowseStep.d.ts +0 -63
- package/dist/admin/src/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.d.ts +0 -7
- package/dist/admin/src/components/AssetDialog/SelectedStep/SelectedStep.d.ts +0 -8
- package/dist/admin/src/components/AssetGridList/AssetGridList.d.ts +0 -13
- package/dist/admin/src/components/BulkMoveDialog/BulkMoveDialog.d.ts +0 -15
- package/dist/admin/src/components/EditAssetDialog/EditAssetContent.d.ts +0 -31
- package/dist/admin/src/components/EditAssetDialog/PreviewBox/AssetPreview.d.ts +0 -8
- package/dist/admin/src/components/EditAssetDialog/PreviewBox/PreviewBox.d.ts +0 -26
- package/dist/admin/src/components/EditAssetDialog/RemoveAssetDialog.d.ts +0 -8
- package/dist/admin/src/components/EditFolderDialog/EditFolderDialog.d.ts +0 -12
- package/dist/admin/src/components/MediaLibraryDialog/MediaLibraryDialog.d.ts +0 -10
- package/dist/admin/src/components/MediaLibraryInput/Carousel/CarouselAsset.d.ts +0 -4
- package/dist/admin/src/components/MediaLibraryInput/Carousel/CarouselAssetActions.d.ts +0 -9
- package/dist/admin/src/components/MediaLibraryInput/Carousel/CarouselAssets.d.ts +0 -23
- package/dist/admin/src/components/MediaLibraryInput/Carousel/EmptyStateAsset.d.ts +0 -10
- package/dist/admin/src/components/SelectTree/Option.d.ts +0 -16
- package/dist/admin/src/components/SortPicker/SortPicker.d.ts +0 -7
- package/dist/admin/src/components/TableList/CellContent.d.ts +0 -8
- package/dist/admin/src/components/TableList/PreviewCell.d.ts +0 -7
- package/dist/admin/src/components/TableList/TableList.d.ts +0 -31
- package/dist/admin/src/components/TableList/TableRows.d.ts +0 -22
- package/dist/admin/src/components/UploadAssetDialog/AddAssetStep/AddAssetStep.d.ts +0 -13
- package/dist/admin/src/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.d.ts +0 -22
- package/dist/admin/src/components/UploadAssetDialog/UploadAssetDialog.d.ts +0 -21
- package/dist/admin/src/components/UploadProgress/UploadProgress.d.ts +0 -7
- package/dist/admin/src/future/App.d.ts +0 -1
- package/dist/admin/src/future/components/BetaNotice.d.ts +0 -11
- package/dist/admin/src/future/hooks/useMediaLibraryPermissions.d.ts +0 -21
- package/dist/admin/src/future/hooks/useTracking.d.ts +0 -29
- package/dist/admin/src/future/pages/Assets/components/ActionsMenuContent.d.ts +0 -33
- package/dist/admin/src/future/pages/Assets/components/AssetActionsMenu.d.ts +0 -26
- package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetCropEditor.d.ts +0 -16
- package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.d.ts +0 -46
- package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetPreview.d.ts +0 -9
- package/dist/admin/src/future/pages/Assets/components/AssetsGrid.d.ts +0 -12
- package/dist/admin/src/future/pages/Assets/components/AssetsTable.d.ts +0 -18
- package/dist/admin/src/future/pages/Assets/components/BulkActionsBar.d.ts +0 -28
- package/dist/admin/src/future/pages/Assets/components/Dnd/computeValidDropTargets.d.ts +0 -7
- package/dist/admin/src/future/pages/Assets/components/FolderActionsMenu.d.ts +0 -21
- package/dist/admin/src/future/pages/Assets/hooks/useFolderNavigation.d.ts +0 -7
- package/dist/admin/src/future/pages/Assets/hooks/useInfiniteAssets.d.ts +0 -45
- package/dist/admin/src/future/pages/Assets/utils/mergeMixedList.d.ts +0 -40
- package/dist/admin/src/future/pages/Assets/utils/mergeUploadedAssets.d.ts +0 -35
- package/dist/admin/src/future/pages/Assets/utils/renderedKeys.d.ts +0 -19
- package/dist/admin/src/future/services/api.d.ts +0 -99
- package/dist/admin/src/future/services/assets.d.ts +0 -33
- package/dist/admin/src/future/services/folders.d.ts +0 -37
- package/dist/admin/src/future/services/settings.d.ts +0 -2
- package/dist/admin/src/future/services/uploadFileViaXHR.d.ts +0 -23
- package/dist/admin/src/future/store/uploadProgress.d.ts +0 -207
- package/dist/admin/src/future/utils/canDropItemOnFolder.d.ts +0 -9
- package/dist/admin/src/future/utils/downloadFile.d.ts +0 -6
- package/dist/admin/src/future/utils/flattenFolderStructure.d.ts +0 -18
- package/dist/admin/src/future/utils/getFolderLabel.d.ts +0 -11
- package/dist/admin/src/future/utils/itemLocations.d.ts +0 -31
- package/dist/admin/src/hooks/useAIMetadataJob.d.ts +0 -9
- package/dist/admin/src/hooks/useAssets.d.ts +0 -14
- package/dist/admin/src/hooks/useBulkEdit.d.ts +0 -91
- package/dist/admin/src/hooks/useBulkMove.d.ts +0 -209
- package/dist/admin/src/hooks/useBulkRemove.d.ts +0 -241
- package/dist/admin/src/hooks/useConfig.d.ts +0 -5
- package/dist/admin/src/hooks/useEditAsset.d.ts +0 -119
- package/dist/admin/src/hooks/useEditFolder.d.ts +0 -72
- package/dist/admin/src/hooks/useFolder.d.ts +0 -7
- package/dist/admin/src/hooks/useFolderStructure.d.ts +0 -18
- package/dist/admin/src/hooks/useFolders.d.ts +0 -11
- package/dist/admin/src/hooks/useModalQueryParams.d.ts +0 -20
- package/dist/admin/src/hooks/useRemoveAsset.d.ts +0 -8
- package/dist/admin/src/hooks/useUpload.d.ts +0 -15
- package/dist/admin/src/pages/App/ConfigureTheView/ConfigureTheView.d.ts +0 -6
- package/dist/admin/src/pages/App/ConfigureTheView/components/Settings.d.ts +0 -13
- package/dist/admin/src/pages/App/ConfigureTheView/state/actions.d.ts +0 -12
- package/dist/admin/src/pages/App/ConfigureTheView/state/init.d.ts +0 -8
- package/dist/admin/src/pages/App/components/BulkActions.d.ts +0 -15
- package/dist/admin/src/pages/App/components/BulkDeleteButton.d.ts +0 -7
- package/dist/admin/src/pages/App/components/BulkMoveButton.d.ts +0 -15
- package/dist/admin/src/pages/App/components/Header.d.ts +0 -22
- package/dist/admin/src/utils/containsAssetFilter.d.ts +0 -2
- package/dist/admin/src/utils/createAssetUrl.d.ts +0 -2
- package/dist/admin/src/utils/findRecursiveFolderByValue.d.ts +0 -11
- package/dist/admin/src/utils/getAllowedFiles.d.ts +0 -14
- package/dist/admin/src/utils/getBreadcrumbDataCM.d.ts +0 -19
- package/dist/admin/src/utils/getBreadcrumbDataML.d.ts +0 -18
- package/dist/admin/src/utils/getFolderParents.d.ts +0 -11
- package/dist/admin/src/utils/getFolderURL.d.ts +0 -5
- package/dist/admin/src/utils/icons.d.ts +0 -15
- package/dist/admin/src/utils/index.d.ts +0 -26
- package/dist/admin/src/utils/rawFileToAsset.d.ts +0 -14
- package/dist/admin/utils/appendSearchParamsToUrl.js.map +0 -1
- package/dist/admin/utils/appendSearchParamsToUrl.mjs.map +0 -1
- package/dist/admin/utils/containsAssetFilter.js.map +0 -1
- package/dist/admin/utils/containsAssetFilter.mjs.map +0 -1
- package/dist/admin/utils/createAssetUrl.js.map +0 -1
- package/dist/admin/utils/createAssetUrl.mjs.map +0 -1
- package/dist/admin/utils/displayedFilters.js.map +0 -1
- package/dist/admin/utils/displayedFilters.mjs.map +0 -1
- package/dist/admin/utils/findRecursiveFolderByValue.js.map +0 -1
- package/dist/admin/utils/findRecursiveFolderByValue.mjs.map +0 -1
- package/dist/admin/utils/formatBytes.js.map +0 -1
- package/dist/admin/utils/formatBytes.mjs.map +0 -1
- package/dist/admin/utils/formatDuration.js.map +0 -1
- package/dist/admin/utils/formatDuration.mjs.map +0 -1
- package/dist/admin/utils/getAPIInnerErrors.js.map +0 -1
- package/dist/admin/utils/getAPIInnerErrors.mjs.map +0 -1
- package/dist/admin/utils/getAllowedFiles.js.map +0 -1
- package/dist/admin/utils/getAllowedFiles.mjs.map +0 -1
- package/dist/admin/utils/getBreadcrumbDataCM.js.map +0 -1
- package/dist/admin/utils/getBreadcrumbDataCM.mjs.map +0 -1
- package/dist/admin/utils/getBreadcrumbDataML.js.map +0 -1
- package/dist/admin/utils/getBreadcrumbDataML.mjs.map +0 -1
- package/dist/admin/utils/getFileExtension.js.map +0 -1
- package/dist/admin/utils/getFileExtension.mjs.map +0 -1
- package/dist/admin/utils/getFolderParents.js.map +0 -1
- package/dist/admin/utils/getFolderParents.mjs.map +0 -1
- package/dist/admin/utils/getFolderURL.js.map +0 -1
- package/dist/admin/utils/getFolderURL.mjs.map +0 -1
- package/dist/admin/utils/getTrad.js +0 -8
- package/dist/admin/utils/getTrad.js.map +0 -1
- package/dist/admin/utils/getTrad.mjs +0 -6
- package/dist/admin/utils/getTrad.mjs.map +0 -1
- package/dist/admin/utils/icons.js +0 -23
- package/dist/admin/utils/icons.js.map +0 -1
- package/dist/admin/utils/icons.mjs +0 -19
- package/dist/admin/utils/icons.mjs.map +0 -1
- package/dist/admin/utils/moveElement.js.map +0 -1
- package/dist/admin/utils/moveElement.mjs.map +0 -1
- package/dist/admin/utils/normalizeAPIError.js.map +0 -1
- package/dist/admin/utils/normalizeAPIError.mjs.map +0 -1
- package/dist/admin/utils/prefixFileUrlWithBackendUrl.js.map +0 -1
- package/dist/admin/utils/prefixFileUrlWithBackendUrl.mjs.map +0 -1
- package/dist/admin/utils/prefixPluginTranslations.js.map +0 -1
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +0 -1
- package/dist/admin/utils/rawFileToAsset.js +0 -23
- package/dist/admin/utils/rawFileToAsset.js.map +0 -1
- package/dist/admin/utils/rawFileToAsset.mjs +0 -21
- package/dist/admin/utils/rawFileToAsset.mjs.map +0 -1
- package/dist/admin/utils/resolveFileMime.js.map +0 -1
- package/dist/admin/utils/resolveFileMime.mjs.map +0 -1
- package/dist/admin/utils/toSingularTypes.js.map +0 -1
- package/dist/admin/utils/toSingularTypes.mjs.map +0 -1
- package/dist/admin/utils/urlYupSchema.js.map +0 -1
- package/dist/admin/utils/urlYupSchema.mjs.map +0 -1
- package/dist/admin/utils/urlsToAssets.js +0 -42
- package/dist/admin/utils/urlsToAssets.js.map +0 -1
- package/dist/admin/utils/urlsToAssets.mjs +0 -40
- package/dist/admin/utils/urlsToAssets.mjs.map +0 -1
- /package/dist/admin/{future/components → components}/Drawer.js +0 -0
- /package/dist/admin/{future/components → components}/Drawer.mjs +0 -0
- /package/dist/admin/{future/components → components}/TruncatedText.js +0 -0
- /package/dist/admin/{future/components → components}/TruncatedText.mjs +0 -0
- /package/dist/admin/{future/hooks → hooks}/useApiErrorMessage.js +0 -0
- /package/dist/admin/{future/hooks → hooks}/useApiErrorMessage.mjs +0 -0
- /package/dist/admin/{ai → legacy/ai}/components/AIUploadModal.js +0 -0
- /package/dist/admin/{ai → legacy/ai}/components/AIUploadModal.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetCard/AssetCardBase.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetCard/AssetCardBase.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetCard/AudioAssetCard.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetCard/AudioAssetCard.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetCard/AudioPreview.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetCard/AudioPreview.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetCard/DocAssetCard.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetCard/DocAssetCard.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetCard/ImageAssetCard.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetCard/ImageAssetCard.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetCard/VideoAssetCard.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetCard/VideoAssetCard.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetCard/VideoPreview.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetCard/VideoPreview.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/AssetDialog.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/AssetDialog.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/BrowseStep/Filters.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/BrowseStep/Filters.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/BrowseStep/PageSize.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/BrowseStep/PageSize.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/BrowseStep/PaginationFooter/Pagination.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/BrowseStep/PaginationFooter/Pagination.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/BrowseStep/utils/isSelectable.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/BrowseStep/utils/isSelectable.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/DialogFooter.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/DialogFooter.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/SelectedStep/SelectedStep.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetDialog/SelectedStep/SelectedStep.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetGridList/AssetGridList.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetGridList/AssetGridList.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/AssetGridList/Draggable.js +0 -0
- /package/dist/admin/{components → legacy/components}/AssetGridList/Draggable.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/Breadcrumbs/Breadcrumbs.js +0 -0
- /package/dist/admin/{components → legacy/components}/Breadcrumbs/Breadcrumbs.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/Breadcrumbs/CrumbSimpleMenuAsync.js +0 -0
- /package/dist/admin/{components → legacy/components}/Breadcrumbs/CrumbSimpleMenuAsync.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/BulkMoveDialog/BulkMoveDialog.js +0 -0
- /package/dist/admin/{components → legacy/components}/BulkMoveDialog/BulkMoveDialog.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/ContextInfo/ContextInfo.js +0 -0
- /package/dist/admin/{components → legacy/components}/ContextInfo/ContextInfo.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/CopyLinkButton/CopyLinkButton.js +0 -0
- /package/dist/admin/{components → legacy/components}/CopyLinkButton/CopyLinkButton.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/EditAssetDialog/DialogHeader.js +0 -0
- /package/dist/admin/{components → legacy/components}/EditAssetDialog/DialogHeader.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/EditAssetDialog/EditAssetContent.js +0 -0
- /package/dist/admin/{components → legacy/components}/EditAssetDialog/EditAssetContent.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/EditAssetDialog/PreviewBox/CroppingActions.js +0 -0
- /package/dist/admin/{components → legacy/components}/EditAssetDialog/PreviewBox/CroppingActions.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/EditAssetDialog/PreviewBox/FocalPointActions.js +0 -0
- /package/dist/admin/{components → legacy/components}/EditAssetDialog/PreviewBox/FocalPointActions.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/EditAssetDialog/PreviewBox/PreviewComponents.js +0 -0
- /package/dist/admin/{components → legacy/components}/EditAssetDialog/PreviewBox/PreviewComponents.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/EditAssetDialog/RemoveAssetDialog.js +0 -0
- /package/dist/admin/{components → legacy/components}/EditAssetDialog/RemoveAssetDialog.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/EditAssetDialog/ReplaceMediaButton.js +0 -0
- /package/dist/admin/{components → legacy/components}/EditAssetDialog/ReplaceMediaButton.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/EditFolderDialog/EditFolderDialog.js +0 -0
- /package/dist/admin/{components → legacy/components}/EditFolderDialog/EditFolderDialog.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/EditFolderDialog/ModalHeader/ModalHeader.js +0 -0
- /package/dist/admin/{components → legacy/components}/EditFolderDialog/ModalHeader/ModalHeader.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/EditFolderDialog/RemoveFolderDialog.js +0 -0
- /package/dist/admin/{components → legacy/components}/EditFolderDialog/RemoveFolderDialog.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/EmptyAssets/EmptyAssetGrid.js +0 -0
- /package/dist/admin/{components → legacy/components}/EmptyAssets/EmptyAssetGrid.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/EmptyAssets/EmptyAssets.js +0 -0
- /package/dist/admin/{components → legacy/components}/EmptyAssets/EmptyAssets.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/FilterList/FilterList.js +0 -0
- /package/dist/admin/{components → legacy/components}/FilterList/FilterList.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/FilterList/FilterTag.js +0 -0
- /package/dist/admin/{components → legacy/components}/FilterList/FilterTag.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/FilterPopover/FilterPopover.js +0 -0
- /package/dist/admin/{components → legacy/components}/FilterPopover/FilterPopover.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/FilterPopover/FilterValueInput.js +0 -0
- /package/dist/admin/{components → legacy/components}/FilterPopover/FilterValueInput.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/FilterPopover/utils/getFilterList.js +0 -0
- /package/dist/admin/{components → legacy/components}/FilterPopover/utils/getFilterList.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/FolderCard/FolderCard/FolderCard.js +0 -0
- /package/dist/admin/{components → legacy/components}/FolderCard/FolderCard/FolderCard.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/FolderCard/FolderCardBody/FolderCardBody.js +0 -0
- /package/dist/admin/{components → legacy/components}/FolderCard/FolderCardBody/FolderCardBody.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/FolderCard/FolderCardBodyAction/FolderCardBodyAction.js +0 -0
- /package/dist/admin/{components → legacy/components}/FolderCard/FolderCardBodyAction/FolderCardBodyAction.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/FolderCard/FolderCardCheckbox/FolderCardCheckbox.js +0 -0
- /package/dist/admin/{components → legacy/components}/FolderCard/FolderCardCheckbox/FolderCardCheckbox.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/FolderCard/contexts/FolderCard.js +0 -0
- /package/dist/admin/{components → legacy/components}/FolderCard/contexts/FolderCard.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/FolderGridList/FolderGridList.js +0 -0
- /package/dist/admin/{components → legacy/components}/FolderGridList/FolderGridList.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/MediaLibraryDialog/MediaLibraryDialog.js +0 -0
- /package/dist/admin/{components → legacy/components}/MediaLibraryDialog/MediaLibraryDialog.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/MediaLibraryInput/Carousel/CarouselAssetActions.js +0 -0
- /package/dist/admin/{components → legacy/components}/MediaLibraryInput/Carousel/CarouselAssetActions.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/MediaLibraryInput/Carousel/CarouselAssets.js +0 -0
- /package/dist/admin/{components → legacy/components}/MediaLibraryInput/Carousel/CarouselAssets.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/MediaLibraryInput/MediaLibraryInput.js +0 -0
- /package/dist/admin/{components → legacy/components}/MediaLibraryInput/MediaLibraryInput.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/SelectTree/Option.js +0 -0
- /package/dist/admin/{components → legacy/components}/SelectTree/Option.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/SelectTree/SelectTree.js +0 -0
- /package/dist/admin/{components → legacy/components}/SelectTree/SelectTree.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/SelectTree/utils/flattenTree.js +0 -0
- /package/dist/admin/{components → legacy/components}/SelectTree/utils/flattenTree.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/SelectTree/utils/getOpenValues.js +0 -0
- /package/dist/admin/{components → legacy/components}/SelectTree/utils/getOpenValues.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/SelectTree/utils/getValuesToClose.js +0 -0
- /package/dist/admin/{components → legacy/components}/SelectTree/utils/getValuesToClose.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/TableList/CellContent.js +0 -0
- /package/dist/admin/{components → legacy/components}/TableList/CellContent.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/UploadAssetDialog/AddAssetStep/AddAssetStep.js +0 -0
- /package/dist/admin/{components → legacy/components}/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/UploadAssetDialog/AddAssetStep/FromUrlForm.js +0 -0
- /package/dist/admin/{components → legacy/components}/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js +0 -0
- /package/dist/admin/{components → legacy/components}/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/UploadAssetDialog/UploadAssetDialog.js +0 -0
- /package/dist/admin/{components → legacy/components}/UploadAssetDialog/UploadAssetDialog.mjs +0 -0
- /package/dist/admin/{components → legacy/components}/UploadProgress/UploadProgress.js +0 -0
- /package/dist/admin/{components → legacy/components}/UploadProgress/UploadProgress.mjs +0 -0
- /package/dist/admin/{hooks → legacy/hooks}/useAiAvailability.js +0 -0
- /package/dist/admin/{hooks → legacy/hooks}/useAiAvailability.mjs +0 -0
- /package/dist/admin/{hooks → legacy/hooks}/useCropImg.js +0 -0
- /package/dist/admin/{hooks → legacy/hooks}/useCropImg.mjs +0 -0
- /package/dist/admin/{hooks → legacy/hooks}/useModalQueryParams.js +0 -0
- /package/dist/admin/{hooks → legacy/hooks}/useModalQueryParams.mjs +0 -0
- /package/dist/admin/{hooks → legacy/hooks}/usePersistentState.js +0 -0
- /package/dist/admin/{hooks → legacy/hooks}/usePersistentState.mjs +0 -0
- /package/dist/admin/{hooks → legacy/hooks}/useSelectionState.js +0 -0
- /package/dist/admin/{hooks → legacy/hooks}/useSelectionState.mjs +0 -0
- /package/dist/admin/{hooks → legacy/hooks}/useSettings.js +0 -0
- /package/dist/admin/{hooks → legacy/hooks}/useSettings.mjs +0 -0
- /package/dist/admin/{hooks → legacy/hooks}/utils/renameKeys.js +0 -0
- /package/dist/admin/{hooks → legacy/hooks}/utils/renameKeys.mjs +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/App.js +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/App.mjs +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/ConfigureTheView/state/actions.js +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/ConfigureTheView/state/actions.mjs +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/ConfigureTheView/state/init.js +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/ConfigureTheView/state/init.mjs +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/ConfigureTheView/state/reducer.js +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/ConfigureTheView/state/reducer.mjs +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/components/BulkActions.js +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/components/BulkActions.mjs +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/components/BulkDeleteButton.js +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/components/BulkDeleteButton.mjs +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/components/BulkMoveButton.js +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/components/BulkMoveButton.mjs +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/components/EmptyOrNoPermissions.js +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/components/EmptyOrNoPermissions.mjs +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/components/Filters.js +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/components/Filters.mjs +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/components/Header.js +0 -0
- /package/dist/admin/{pages → legacy/pages}/App/components/Header.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/appendSearchParamsToUrl.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/appendSearchParamsToUrl.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/containsAssetFilter.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/containsAssetFilter.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/createAssetUrl.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/createAssetUrl.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/displayedFilters.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/displayedFilters.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/findRecursiveFolderByValue.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/findRecursiveFolderByValue.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/formatBytes.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/formatBytes.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/formatDuration.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/formatDuration.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/getAPIInnerErrors.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/getAPIInnerErrors.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/getAllowedFiles.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/getAllowedFiles.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/getBreadcrumbDataCM.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/getBreadcrumbDataCM.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/getBreadcrumbDataML.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/getBreadcrumbDataML.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/getFileExtension.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/getFileExtension.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/getFolderParents.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/getFolderParents.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/getFolderURL.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/getFolderURL.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/moveElement.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/moveElement.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/normalizeAPIError.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/normalizeAPIError.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/prefixFileUrlWithBackendUrl.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/prefixFileUrlWithBackendUrl.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/prefixPluginTranslations.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/prefixPluginTranslations.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/resolveFileMime.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/resolveFileMime.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/toSingularTypes.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/toSingularTypes.mjs +0 -0
- /package/dist/admin/{utils → legacy/utils}/urlYupSchema.js +0 -0
- /package/dist/admin/{utils → legacy/utils}/urlYupSchema.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/ActionsMenuContent.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/ActionsMenuContent.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/AssetActionsMenu.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/AssetActionsMenu.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/AssetDetails/AssetCropEditor.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/AssetDetails/AssetCropEditor.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/AssetDetails/useCropImg.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/AssetDetails/useCropImg.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/AssetsSearchInput.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/AssetsSearchInput.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/AssetsTable.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/AssetsTable.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/BulkMoveDialog.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/BulkMoveDialog.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/BusyOverlay.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/BusyOverlay.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/DateRangeCalendar.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/DateRangeCalendar.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/DeleteItemsDialog.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/DeleteItemsDialog.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/Dnd/buildDragSet.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/Dnd/buildDragSet.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/Dnd/computeValidDropTargets.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/Dnd/computeValidDropTargets.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/Dnd/dndIds.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/Dnd/dndIds.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/Dnd/useAssetDnd.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/Dnd/useAssetDnd.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/Dnd/useFolderTreeDroppable.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/Dnd/useFolderTreeDroppable.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/DropZone/UploadDropZone.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/DropZone/UploadDropZone.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/DropZone/UploadDropZoneContext.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/DropZone/UploadDropZoneContext.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/EmptyState.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/EmptyState.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/FilterBadges.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/FilterBadges.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/FilterMenu.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/FilterMenu.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/FolderActionsMenu.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/FolderActionsMenu.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/FolderFormDialog.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/FolderFormDialog.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/FolderTree/FolderTree.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/FolderTree/FolderTree.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/FolderTree/useSpringLoadedExpand.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/FolderTree/useSpringLoadedExpand.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/ImportFromUrlDialog.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/ImportFromUrlDialog.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/MainAreaContextMenu.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/MainAreaContextMenu.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/SortMenu.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/components/SortMenu.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/constants.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/constants.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useAssetSearch.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useAssetSearch.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useAssetSelection.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useAssetSelection.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useBusyAssets.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useBusyAssets.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useFolderInfo.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useFolderInfo.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useFolderNavigation.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useFolderNavigation.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useInfiniteAssets.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useInfiniteAssets.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useInfiniteScrollSentinel.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useInfiniteScrollSentinel.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useIsAssetDetailsOpen.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useIsAssetDetailsOpen.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useListFilters.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useListFilters.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useListScrollRestoration.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useListScrollRestoration.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useListSort.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/hooks/useListSort.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/utils/buildAssetFilters.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/utils/buildAssetFilters.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/utils/listQueryKey.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/utils/listQueryKey.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/utils/mergeMixedList.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/utils/mergeMixedList.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/utils/mergeUploadedAssets.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/utils/mergeUploadedAssets.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/utils/renderedKeys.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/utils/renderedKeys.mjs +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/utils/selection.js +0 -0
- /package/dist/admin/{future/pages → pages}/Assets/utils/selection.mjs +0 -0
- /package/dist/admin/{future/services → services}/assets.js +0 -0
- /package/dist/admin/{future/services → services}/assets.mjs +0 -0
- /package/dist/admin/{future/services → services}/folders.js +0 -0
- /package/dist/admin/{future/services → services}/folders.mjs +0 -0
- /package/dist/admin/{future/services → services}/settings.js +0 -0
- /package/dist/admin/{future/services → services}/settings.mjs +0 -0
- /package/dist/admin/{future/services → services}/uploadFileViaXHR.js +0 -0
- /package/dist/admin/{future/services → services}/uploadFileViaXHR.mjs +0 -0
- /package/dist/admin/src/{pages/App/MediaLibrary.d.ts → App.d.ts} +0 -0
- /package/dist/admin/src/{future/components → components}/Drawer.d.ts +0 -0
- /package/dist/admin/src/{future/components → components}/TruncatedText.d.ts +0 -0
- /package/dist/admin/src/{future/components → components}/UploadProgressDialog.d.ts +0 -0
- /package/dist/admin/src/{future/hooks → hooks}/useAIMetadataEnabled.d.ts +0 -0
- /package/dist/admin/src/{future/hooks → hooks}/useApiErrorMessage.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/AssetCard/AssetCardBase.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/AssetCard/AudioAssetCard.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/AssetCard/AudioPreview.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/AssetCard/DocAssetCard.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/AssetCard/ImageAssetCard.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/AssetCard/VideoAssetCard.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/AssetCard/VideoPreview.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/AssetDialog/BrowseStep/Filters.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/AssetDialog/BrowseStep/PageSize.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/AssetDialog/BrowseStep/PaginationFooter/Pagination.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/AssetDialog/BrowseStep/utils/isSelectable.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/AssetDialog/DialogFooter.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/AssetGridList/Draggable.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/Breadcrumbs/Breadcrumbs.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/Breadcrumbs/CrumbSimpleMenuAsync.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/ContextInfo/ContextInfo.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/CopyLinkButton/CopyLinkButton.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/EditAssetDialog/DialogHeader.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/EditAssetDialog/PreviewBox/CroppingActions.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/EditAssetDialog/PreviewBox/FocalPointActions.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/EditAssetDialog/PreviewBox/PreviewComponents.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/EditAssetDialog/ReplaceMediaButton.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/EditFolderDialog/ModalHeader/ModalHeader.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/EditFolderDialog/RemoveFolderDialog.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/EmptyAssets/EmptyAssetGrid.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/EmptyAssets/EmptyAssets.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/FilterList/FilterList.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/FilterList/FilterTag.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/FilterPopover/FilterPopover.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/FilterPopover/FilterValueInput.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/FilterPopover/utils/getFilterList.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/FolderCard/FolderCard/FolderCard.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/FolderCard/FolderCardBody/FolderCardBody.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/FolderCard/FolderCardBodyAction/FolderCardBodyAction.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/FolderCard/FolderCardCheckbox/FolderCardCheckbox.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/FolderCard/contexts/FolderCard.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/FolderGridList/FolderGridList.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/MediaLibraryInput/MediaLibraryInput.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/SelectTree/SelectTree.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/SelectTree/utils/flattenTree.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/SelectTree/utils/getOpenValues.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/SelectTree/utils/getValuesToClose.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/UploadAssetDialog/AddAssetStep/FromComputerForm.d.ts +0 -0
- /package/dist/admin/src/{components → legacy/components}/UploadAssetDialog/AddAssetStep/FromUrlForm.d.ts +0 -0
- /package/dist/admin/src/{hooks → legacy/hooks}/useAiAvailability.d.ts +0 -0
- /package/dist/admin/src/{hooks → legacy/hooks}/useCropImg.d.ts +0 -0
- /package/dist/admin/src/{hooks → legacy/hooks}/usePersistentState.d.ts +0 -0
- /package/dist/admin/src/{hooks → legacy/hooks}/useSelectionState.d.ts +0 -0
- /package/dist/admin/src/{hooks → legacy/hooks}/useSettings.d.ts +0 -0
- /package/dist/admin/src/{hooks → legacy/hooks}/utils/renameKeys.d.ts +0 -0
- /package/dist/admin/src/{pages → legacy/pages}/App/App.d.ts +0 -0
- /package/dist/admin/src/{pages → legacy/pages}/App/ConfigureTheView/state/actionTypes.d.ts +0 -0
- /package/dist/admin/src/{pages → legacy/pages}/App/ConfigureTheView/state/reducer.d.ts +0 -0
- /package/dist/admin/src/{pages → legacy/pages}/App/components/EmptyOrNoPermissions.d.ts +0 -0
- /package/dist/admin/src/{pages → legacy/pages}/App/components/Filters.d.ts +0 -0
- /package/dist/admin/src/{utils → legacy/utils}/appendSearchParamsToUrl.d.ts +0 -0
- /package/dist/admin/src/{utils → legacy/utils}/displayedFilters.d.ts +0 -0
- /package/dist/admin/src/{utils → legacy/utils}/formatBytes.d.ts +0 -0
- /package/dist/admin/src/{utils → legacy/utils}/formatDuration.d.ts +0 -0
- /package/dist/admin/src/{utils → legacy/utils}/getAPIInnerErrors.d.ts +0 -0
- /package/dist/admin/src/{utils → legacy/utils}/getFileExtension.d.ts +0 -0
- /package/dist/admin/src/{utils → legacy/utils}/getTrad.d.ts +0 -0
- /package/dist/admin/src/{utils → legacy/utils}/moveElement.d.ts +0 -0
- /package/dist/admin/src/{utils → legacy/utils}/normalizeAPIError.d.ts +0 -0
- /package/dist/admin/src/{utils → legacy/utils}/prefixFileUrlWithBackendUrl.d.ts +0 -0
- /package/dist/admin/src/{utils → legacy/utils}/prefixPluginTranslations.d.ts +0 -0
- /package/dist/admin/src/{utils → legacy/utils}/resolveFileMime.d.ts +0 -0
- /package/dist/admin/src/{utils → legacy/utils}/toSingularTypes.d.ts +0 -0
- /package/dist/admin/src/{utils → legacy/utils}/urlYupSchema.d.ts +0 -0
- /package/dist/admin/src/{utils → legacy/utils}/urlsToAssets.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/AssetsPage.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/AssetDetails/useCropImg.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/AssetsSearchInput.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/BulkMoveDialog.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/BusyOverlay.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/DateRangeCalendar.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/DeleteItemsDialog.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/Dnd/AssetsDndProvider.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/Dnd/DragOverlayChip.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/Dnd/buildDragSet.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/Dnd/dndIds.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/Dnd/useAssetDnd.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/Dnd/useFolderTreeDroppable.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/DropZone/UploadDropZone.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/DropZone/UploadDropZoneContext.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/EmptyState.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/FilterBadges.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/FilterMenu.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/FolderFormDialog.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/FolderTree/FolderTree.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/FolderTree/useSpringLoadedExpand.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/ImportFromUrlDialog.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/MainAreaContextMenu.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/components/SortMenu.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/constants.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/hooks/useAssetSearch.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/hooks/useAssetSelection.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/hooks/useBusyAssets.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/hooks/useFolderInfo.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/hooks/useInfiniteScrollSentinel.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/hooks/useIsAssetDetailsOpen.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/hooks/useListFilters.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/hooks/useListScrollRestoration.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/hooks/useListSort.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/utils/buildAssetFilters.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/utils/listQueryKey.d.ts +0 -0
- /package/dist/admin/src/{future/pages → pages}/Assets/utils/selection.d.ts +0 -0
- /package/dist/admin/src/{future/store → store}/hooks.d.ts +0 -0
- /package/dist/admin/src/{future/types → types}/dnd.d.ts +0 -0
- /package/dist/admin/src/{future/utils → utils}/buildBulkMovePayload.d.ts +0 -0
- /package/dist/admin/src/{future/utils → utils}/buildDragSetFromSelection.d.ts +0 -0
- /package/dist/admin/src/{future/utils → utils}/createRafBatcher.d.ts +0 -0
- /package/dist/admin/src/{future/utils → utils}/files.d.ts +0 -0
- /package/dist/admin/src/{future/utils → utils}/formatMoveSuccessMessage.d.ts +0 -0
- /package/dist/admin/src/{future/utils → utils}/getApiErrorMessage.d.ts +0 -0
- /package/dist/admin/src/{future/utils → utils}/getAssetIcon.d.ts +0 -0
- /package/dist/admin/src/{future/utils → utils}/getRelationId.d.ts +0 -0
- /package/dist/admin/src/{future/utils → utils}/isEventFromWithin.d.ts +0 -0
- /package/dist/admin/src/{future/utils → utils}/itemSource.d.ts +0 -0
- /package/dist/admin/src/{future/utils → utils}/searchQueryParam.d.ts +0 -0
- /package/dist/admin/src/{future/utils → utils}/translations.d.ts +0 -0
- /package/dist/admin/{future/store → store}/hooks.js +0 -0
- /package/dist/admin/{future/store → store}/hooks.mjs +0 -0
- /package/dist/admin/{future/utils → utils}/buildBulkMovePayload.js +0 -0
- /package/dist/admin/{future/utils → utils}/buildBulkMovePayload.mjs +0 -0
- /package/dist/admin/{future/utils → utils}/buildDragSetFromSelection.js +0 -0
- /package/dist/admin/{future/utils → utils}/buildDragSetFromSelection.mjs +0 -0
- /package/dist/admin/{future/utils → utils}/canDropItemOnFolder.js +0 -0
- /package/dist/admin/{future/utils → utils}/canDropItemOnFolder.mjs +0 -0
- /package/dist/admin/{future/utils → utils}/createRafBatcher.js +0 -0
- /package/dist/admin/{future/utils → utils}/createRafBatcher.mjs +0 -0
- /package/dist/admin/{future/utils → utils}/files.js +0 -0
- /package/dist/admin/{future/utils → utils}/files.mjs +0 -0
- /package/dist/admin/{future/utils → utils}/flattenFolderStructure.js +0 -0
- /package/dist/admin/{future/utils → utils}/flattenFolderStructure.mjs +0 -0
- /package/dist/admin/{future/utils → utils}/formatMoveSuccessMessage.js +0 -0
- /package/dist/admin/{future/utils → utils}/formatMoveSuccessMessage.mjs +0 -0
- /package/dist/admin/{future/utils → utils}/getApiErrorMessage.js +0 -0
- /package/dist/admin/{future/utils → utils}/getApiErrorMessage.mjs +0 -0
- /package/dist/admin/{future/utils → utils}/getFolderLabel.js +0 -0
- /package/dist/admin/{future/utils → utils}/getFolderLabel.mjs +0 -0
- /package/dist/admin/{future/utils → utils}/getRelationId.js +0 -0
- /package/dist/admin/{future/utils → utils}/getRelationId.mjs +0 -0
- /package/dist/admin/{future/utils → utils}/isEventFromWithin.js +0 -0
- /package/dist/admin/{future/utils → utils}/isEventFromWithin.mjs +0 -0
- /package/dist/admin/{future/utils → utils}/itemLocations.js +0 -0
- /package/dist/admin/{future/utils → utils}/itemLocations.mjs +0 -0
- /package/dist/admin/{future/utils → utils}/itemSource.js +0 -0
- /package/dist/admin/{future/utils → utils}/itemSource.mjs +0 -0
- /package/dist/admin/{future/utils → utils}/searchQueryParam.js +0 -0
- /package/dist/admin/{future/utils → utils}/searchQueryParam.mjs +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-upload.js","sources":["../../../server/src/controllers/admin-upload.ts"],"sourcesContent":["import os from 'os';\nimport path from 'path';\nimport fse from 'fs-extra';\nimport _ from 'lodash';\nimport { errors, async } from '@strapi/utils';\n\nimport type { Context } from 'koa';\n\nimport { getService } from '../utils';\nimport { ACTIONS, FILE_MODEL_UID } from '../constants';\nimport { validateBulkUpdateBody, validateUploadBody } from './validation/admin/upload';\nimport { findEntityAndCheckPermissions } from './utils/find-entity-and-check-permissions';\nimport { Config, FileInfo } from '../types';\nimport { prepareUploadRequest, type FileUploadError } from '../utils/mime-validation';\nimport type { UploadFileInfo } from '../../../shared/contracts/files';\n\nexport default {\n async bulkUpdateFileInfo(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body },\n } = ctx;\n\n const { updates } = await validateBulkUpdateBody(body);\n const uploadService = getService('upload');\n\n const results = await async.map(\n updates,\n async ({ id, fileInfo }: { id: number; fileInfo: FileInfo }) => {\n const { pm } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.update,\n FILE_MODEL_UID,\n id\n );\n\n const updated = await uploadService.updateFileInfo(id, fileInfo as any, { user });\n\n // Sign file urls for private providers\n const signedFile = await getService('file').signFileUrls(updated);\n\n return pm.sanitizeOutput(signedFile, { action: ACTIONS.read });\n }\n );\n\n ctx.body = results;\n },\n\n /**\n * `PUT /upload/files/:id`\n *\n * Update the editable metadata (`fileInfo`) of an existing file. Also reached\n * through the `POST /upload` multiplexer, which delegates here with the id in\n * `ctx.query` — hence the dual read below, route params winning.\n */\n async updateFileInfo(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body },\n } = ctx;\n\n const id = ctx.params?.id ?? ctx.query.id;\n\n if (typeof id !== 'string') {\n throw new errors.ValidationError('File id is required');\n }\n\n const uploadService = getService('upload');\n const { pm } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.update,\n FILE_MODEL_UID,\n id\n );\n\n const data = await validateUploadBody(body);\n\n const file = await uploadService.updateFileInfo(id, data.fileInfo as any, { user });\n\n // Sign file urls for private providers\n const signedFile = await getService('file').signFileUrls(file);\n\n ctx.body = await pm.sanitizeOutput(signedFile, { action: ACTIONS.read });\n },\n\n /**\n * `POST /upload/files/:id/replace`\n *\n * Replace the binary content of an existing file. Also reached through the\n * `POST /upload` multiplexer, which delegates here with the id in `ctx.query`\n * — hence the dual read below, route params winning.\n */\n async replaceFile(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body, files: { files: filesInput } = {} },\n } = ctx;\n\n const id = ctx.params?.id ?? ctx.query.id;\n\n if (typeof id !== 'string') {\n throw new errors.ValidationError('File id is required');\n }\n\n const uploadService = getService('upload');\n const { pm } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.update,\n FILE_MODEL_UID,\n id\n );\n\n if (Array.isArray(filesInput) && filesInput.length > 1) {\n throw new errors.ApplicationError('Cannot replace a file with multiple ones');\n }\n\n const files = Array.isArray(filesInput) ? filesInput[0] : filesInput;\n\n const {\n validFiles,\n filteredBody,\n errors: validationErrors,\n } = await prepareUploadRequest(files, body, strapi);\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0].message);\n }\n\n const data = (await validateUploadBody(filteredBody)) as { fileInfo: FileInfo };\n const replacedFile = await uploadService.replace(id, { data, file: validFiles[0] }, { user });\n\n // Regenerate AI metadata for image replacements so the alt text / caption\n // reflect the new file content. Mirrors the post-upload hook in\n // `uploadFiles`; failure is logged and swallowed to keep the replace flow\n // resilient when the AI provider is unavailable.\n const aiMetadataService = getService('aiMetadata');\n if (replacedFile?.mime?.startsWith('image/') && (await aiMetadataService.isEnabled())) {\n try {\n const metadataResults = await aiMetadataService.processFiles([replacedFile]);\n await aiMetadataService.updateFilesWithAIMetadata([replacedFile], metadataResults, user);\n } catch (error) {\n strapi.log.warn('AI metadata generation failed on replace, proceeding without it', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Sign file urls for private providers\n const signedFile = await getService('file').signFileUrls(replacedFile);\n\n ctx.body = await pm.sanitizeOutput(signedFile, { action: ACTIONS.read });\n },\n\n async uploadFiles(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body, files: { files } = {} },\n } = ctx;\n\n const uploadService = getService('upload');\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.create,\n model: FILE_MODEL_UID,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n const {\n validFiles,\n filteredBody,\n errors: validationErrors,\n } = await prepareUploadRequest(files, body, strapi);\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0].message);\n }\n\n const isMultipleFiles = validFiles.length > 1;\n const data = await validateUploadBody(filteredBody, isMultipleFiles);\n\n let filesArray = validFiles;\n\n if (\n data.fileInfo &&\n Array.isArray(data.fileInfo) &&\n filesArray.length === data.fileInfo.length\n ) {\n // Reorder filesArray to match data.fileInfo order\n const alignedFilesArray = data.fileInfo\n .map((info) => {\n return filesArray.find((file) => file.originalFilename === info.name);\n })\n .filter(Boolean) as any[];\n\n filesArray = alignedFilesArray;\n }\n\n // Upload files first to get thumbnails\n const uploadedFiles = await uploadService.upload({ data, files: filesArray }, { user });\n if (uploadedFiles.some((file) => file.mime?.startsWith('image/'))) {\n await getService('metrics').trackUsage('didUploadImage');\n }\n\n const aiMetadataService = getService('aiMetadata');\n\n // AFTER upload - generate AI metadata for images\n if (await aiMetadataService.isEnabled()) {\n try {\n const metadataResults = await aiMetadataService.processFiles(uploadedFiles);\n // Update the uploaded files with AI metadata\n await aiMetadataService.updateFilesWithAIMetadata(uploadedFiles, metadataResults, user);\n } catch (error) {\n strapi.log.warn('AI metadata generation failed, proceeding without AI enhancements', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Sign file urls for private providers\n const signedFiles = await async.map(uploadedFiles, getService('file').signFileUrls);\n\n ctx.body = await pm.sanitizeOutput(signedFiles, { action: ACTIONS.read });\n ctx.status = 201;\n },\n\n /**\n * `POST /upload/files`\n *\n * Upload a single file and return the created File.\n *\n * Accepts one file per request (multipart `files` + `fileInfo`) and returns a\n * single `File` object. Unlike `uploadFiles`, it does **not** run AI metadata\n * generation inline — that responsibility is decoupled and will be handled by a\n * background job. Auth and permission checks mirror `POST /upload`.\n */\n async uploadFile(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body, files: { files } = {} },\n } = ctx;\n\n const uploadService = getService('upload');\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.create,\n model: FILE_MODEL_UID,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n if (_.isEmpty(files) || (!Array.isArray(files) && files.size === 0)) {\n throw new errors.ApplicationError('Files are empty');\n }\n\n // Accept a single file per request; ignore any extras defensively.\n const file = Array.isArray(files) ? files[0] : files;\n const fileName = file.originalFilename || 'unknown';\n\n // Parse the single fileInfo object from the multipart body.\n let fileInfo: UploadFileInfo = {\n name: fileName,\n caption: null,\n alternativeText: null,\n folder: null,\n };\n if (body?.fileInfo) {\n const raw = body.fileInfo;\n if (typeof raw === 'string') {\n fileInfo = JSON.parse(raw);\n } else if (Array.isArray(raw)) {\n fileInfo = (typeof raw[0] === 'string' ? JSON.parse(raw[0]) : raw[0]) as UploadFileInfo;\n } else {\n fileInfo = raw as UploadFileInfo;\n }\n }\n\n // Validate this single file using security checks.\n const { validFiles, errors: validationErrors } = await prepareUploadRequest(\n file,\n { fileInfo: JSON.stringify(fileInfo) },\n strapi\n );\n\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0]?.message || 'Validation failed');\n }\n\n const data = await validateUploadBody({ fileInfo }, false);\n const [uploadedFile] = await uploadService.upload({ data, files: [validFiles[0]] }, { user });\n\n if (uploadedFile.mime?.startsWith('image/')) {\n await getService('metrics').trackUsage('didUploadImage');\n }\n\n // No inline AI metadata generation — intentionally decoupled for the async job.\n\n // Sign file url for private providers.\n const signedFile = await getService('file').signFileUrls(uploadedFile);\n\n ctx.body = await pm.sanitizeOutput(signedFile, { action: ACTIONS.read });\n ctx.status = 201;\n },\n\n /**\n * `POST /upload/actions/upload-from-urls`\n *\n * Upload files from URLs with SSE streaming for per-file progress\n *\n * Accepts JSON body with URLs and fetches them server-side.\n * Streams Server-Sent Events as each URL is fetched and uploaded:\n * - file:fetching — when starting to fetch a URL\n * - file:uploading — when upload starts for a fetched file\n * - file:complete — when a file is successfully uploaded\n * - file:error — when a URL fetch or upload fails\n * - stream:complete — final summary with all results\n */\n async uploadFromUrls(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body },\n } = ctx;\n\n const uploadService = getService('upload');\n const fileService = getService('file');\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.create,\n model: FILE_MODEL_UID,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n // Parse and validate request body\n const { urls, folderId } = body as { urls?: string[]; folderId?: number | null };\n\n if (!urls || !Array.isArray(urls) || urls.length === 0) {\n throw new errors.ApplicationError('URLs are required');\n }\n\n if (urls.length > 20) {\n throw new errors.ApplicationError('Maximum 20 URLs allowed per request');\n }\n\n // Take manual control of the response for SSE streaming\n ctx.respond = false;\n const res = ctx.res;\n res.writeHead(200, {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n });\n\n const writeSSE = (event: string, data: Record<string, unknown>) => {\n res.write(`event: ${event}\\ndata: ${JSON.stringify(data)}\\n\\n`);\n };\n\n const total = urls.length;\n const uploadErrors: FileUploadError[] = [];\n const successfulFiles: any[] = [];\n\n // Create temp directory for fetched files\n const tmpWorkingDirectory = await fse.mkdtemp(path.join(os.tmpdir(), 'strapi-url-upload-'));\n const { sizeLimit } = strapi.config.get<Config>('plugin::upload');\n\n try {\n // Process each URL sequentially\n for (let i = 0; i < urls.length; i += 1) {\n const url = urls[i];\n\n writeSSE('file:fetching', { url, index: i, total });\n\n try {\n // Fetch URL to temp file\n const { file } = await fileService.fetchUrlToInputFile(\n url,\n tmpWorkingDirectory,\n sizeLimit\n );\n const fileName = file.originalFilename;\n\n writeSSE('file:uploading', {\n name: fileName,\n index: i,\n total,\n size: file.size,\n });\n\n // Validate using security checks\n const fileInfo: UploadFileInfo = {\n name: fileName,\n caption: null,\n alternativeText: null,\n folder: folderId ?? null,\n };\n\n const { validFiles, errors: validationErrors } = await prepareUploadRequest(\n file,\n { fileInfo: JSON.stringify(fileInfo) },\n strapi\n );\n\n if (validFiles.length === 0) {\n const errorMessage = validationErrors[0]?.message || 'Validation failed';\n uploadErrors.push({ name: fileName, message: errorMessage });\n writeSSE('file:error', { name: fileName, url, index: i, message: errorMessage });\n } else {\n // Upload the file\n const data = await validateUploadBody({ fileInfo }, false);\n const [uploadedFile] = await uploadService.upload(\n { data, files: [validFiles[0]] },\n { user }\n );\n\n // Sign file url\n const signedFile = await fileService.signFileUrls(uploadedFile);\n successfulFiles.push(signedFile);\n\n writeSSE('file:complete', { name: fileName, index: i, file: signedFile });\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n uploadErrors.push({ name: url, message: errorMessage });\n writeSSE('file:error', { url, index: i, message: errorMessage });\n }\n }\n\n // Track image upload metric once if any images were uploaded\n if (successfulFiles.some((file) => file.mime?.startsWith('image/'))) {\n await getService('metrics').trackUsage('didUploadImage');\n }\n\n // Send final stream summary\n writeSSE('stream:complete', {\n data: await pm.sanitizeOutput(successfulFiles, { action: ACTIONS.read }),\n errors: uploadErrors,\n });\n } finally {\n // Clean up temp directory\n await fse.remove(tmpWorkingDirectory);\n }\n\n res.end();\n },\n\n // TODO: split into multiple endpoints\n async upload(ctx: Context) {\n const {\n query: { id },\n request: { files: { files } = {} },\n } = ctx;\n\n if (_.isEmpty(files) || (!Array.isArray(files) && files.size === 0)) {\n if (id) {\n return this.updateFileInfo(ctx);\n }\n\n throw new errors.ApplicationError('Files are empty');\n }\n\n await (id ? this.replaceFile : this.uploadFiles)(ctx);\n },\n};\n"],"names":["bulkUpdateFileInfo","ctx","state","userAbility","user","request","body","updates","validateBulkUpdateBody","uploadService","getService","results","async","map","id","fileInfo","pm","findEntityAndCheckPermissions","ACTIONS","update","FILE_MODEL_UID","updated","updateFileInfo","signedFile","signFileUrls","sanitizeOutput","action","read","params","query","errors","ValidationError","data","validateUploadBody","file","replaceFile","files","filesInput","Array","isArray","length","ApplicationError","validFiles","filteredBody","validationErrors","prepareUploadRequest","strapi","message","replacedFile","replace","aiMetadataService","mime","startsWith","isEnabled","metadataResults","processFiles","updateFilesWithAIMetadata","error","log","warn","Error","String","uploadFiles","service","createPermissionsManager","ability","create","model","isAllowed","forbidden","isMultipleFiles","filesArray","alignedFilesArray","info","find","originalFilename","name","filter","Boolean","uploadedFiles","upload","some","trackUsage","signedFiles","status","uploadFile","_","isEmpty","size","fileName","caption","alternativeText","folder","raw","JSON","parse","stringify","uploadedFile","uploadFromUrls","fileService","urls","folderId","respond","res","writeHead","Connection","writeSSE","event","write","total","uploadErrors","successfulFiles","tmpWorkingDirectory","fse","mkdtemp","path","join","os","tmpdir","sizeLimit","config","get","i","url","index","fetchUrlToInputFile","errorMessage","push","remove","end"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admin-upload.js","sources":["../../../server/src/controllers/admin-upload.ts"],"sourcesContent":["import os from 'os';\nimport path from 'path';\nimport fse from 'fs-extra';\nimport _ from 'lodash';\nimport { errors, async } from '@strapi/utils';\n\nimport type { Context } from 'koa';\n\nimport { getService } from '../utils';\nimport { ACTIONS, FILE_MODEL_UID } from '../constants';\nimport { validateBulkUpdateBody, validateUploadBody } from './validation/admin/upload';\nimport { findEntityAndCheckPermissions } from './utils/find-entity-and-check-permissions';\nimport { Config, FileInfo } from '../types';\nimport { prepareUploadRequest, type FileUploadError } from '../utils/mime-validation';\nimport type { UploadFileInfo } from '../../../shared/contracts/files';\nimport type { UrlFetchProgress } from '../services/file';\n\n/**\n * Minimum delay between two `file:progress` frames for the same URL.\n *\n * `fetchUrlToInputFile` reports once per streamed chunk (~8000 calls for a 512MB file at\n * 64KB chunks); at ~5 frames a second a 10s transfer costs ~50 frames, which is plenty for\n * a bar the user watches.\n */\nconst URL_FETCH_PROGRESS_INTERVAL_MS = 200;\n\nexport default {\n async bulkUpdateFileInfo(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body },\n } = ctx;\n\n const { updates } = await validateBulkUpdateBody(body);\n const uploadService = getService('upload');\n\n const results = await async.map(\n updates,\n async ({ id, fileInfo }: { id: number; fileInfo: FileInfo }) => {\n const { pm } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.update,\n FILE_MODEL_UID,\n id\n );\n\n const updated = await uploadService.updateFileInfo(id, fileInfo as any, { user });\n\n // Sign file urls for private providers\n const signedFile = await getService('file').signFileUrls(updated);\n\n return pm.sanitizeOutput(signedFile, { action: ACTIONS.read });\n }\n );\n\n ctx.body = results;\n },\n\n /**\n * `PUT /upload/files/:id`\n *\n * Update the editable metadata (`fileInfo`) of an existing file. Also reached\n * through the `POST /upload` multiplexer, which delegates here with the id in\n * `ctx.query` — hence the dual read below, route params winning.\n */\n async updateFileInfo(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body },\n } = ctx;\n\n const id = ctx.params?.id ?? ctx.query.id;\n\n if (typeof id !== 'string') {\n throw new errors.ValidationError('File id is required');\n }\n\n const uploadService = getService('upload');\n const { pm } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.update,\n FILE_MODEL_UID,\n id\n );\n\n const data = await validateUploadBody(body);\n\n const file = await uploadService.updateFileInfo(id, data.fileInfo as any, { user });\n\n // Sign file urls for private providers\n const signedFile = await getService('file').signFileUrls(file);\n\n ctx.body = await pm.sanitizeOutput(signedFile, { action: ACTIONS.read });\n },\n\n /**\n * `POST /upload/files/:id/replace`\n *\n * Replace the binary content of an existing file. Also reached through the\n * `POST /upload` multiplexer, which delegates here with the id in `ctx.query`\n * — hence the dual read below, route params winning.\n */\n async replaceFile(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body, files: { files: filesInput } = {} },\n } = ctx;\n\n const id = ctx.params?.id ?? ctx.query.id;\n\n if (typeof id !== 'string') {\n throw new errors.ValidationError('File id is required');\n }\n\n const uploadService = getService('upload');\n const { pm } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.update,\n FILE_MODEL_UID,\n id\n );\n\n if (Array.isArray(filesInput) && filesInput.length > 1) {\n throw new errors.ApplicationError('Cannot replace a file with multiple ones');\n }\n\n const files = Array.isArray(filesInput) ? filesInput[0] : filesInput;\n\n const {\n validFiles,\n filteredBody,\n errors: validationErrors,\n } = await prepareUploadRequest(files, body, strapi);\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0].message);\n }\n\n const data = (await validateUploadBody(filteredBody)) as { fileInfo: FileInfo };\n const replacedFile = await uploadService.replace(id, { data, file: validFiles[0] }, { user });\n\n // Regenerate AI metadata for image replacements so the alt text / caption\n // reflect the new file content. Mirrors the post-upload hook in\n // `uploadFiles`; failure is logged and swallowed to keep the replace flow\n // resilient when the AI provider is unavailable.\n const aiMetadataService = getService('aiMetadata');\n if (replacedFile?.mime?.startsWith('image/') && (await aiMetadataService.isEnabled())) {\n try {\n const metadataResults = await aiMetadataService.processFiles([replacedFile]);\n await aiMetadataService.updateFilesWithAIMetadata([replacedFile], metadataResults, user);\n } catch (error) {\n strapi.log.warn('AI metadata generation failed on replace, proceeding without it', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Sign file urls for private providers\n const signedFile = await getService('file').signFileUrls(replacedFile);\n\n ctx.body = await pm.sanitizeOutput(signedFile, { action: ACTIONS.read });\n },\n\n async uploadFiles(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body, files: { files } = {} },\n } = ctx;\n\n const uploadService = getService('upload');\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.create,\n model: FILE_MODEL_UID,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n const {\n validFiles,\n filteredBody,\n errors: validationErrors,\n } = await prepareUploadRequest(files, body, strapi);\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0].message);\n }\n\n const isMultipleFiles = validFiles.length > 1;\n const data = await validateUploadBody(filteredBody, isMultipleFiles);\n\n let filesArray = validFiles;\n\n if (\n data.fileInfo &&\n Array.isArray(data.fileInfo) &&\n filesArray.length === data.fileInfo.length\n ) {\n // Reorder filesArray to match data.fileInfo order\n const alignedFilesArray = data.fileInfo\n .map((info) => {\n return filesArray.find((file) => file.originalFilename === info.name);\n })\n .filter(Boolean) as any[];\n\n filesArray = alignedFilesArray;\n }\n\n // Upload files first to get thumbnails\n const uploadedFiles = await uploadService.upload({ data, files: filesArray }, { user });\n if (uploadedFiles.some((file) => file.mime?.startsWith('image/'))) {\n await getService('metrics').trackUsage('didUploadImage');\n }\n\n const aiMetadataService = getService('aiMetadata');\n\n // AFTER upload - generate AI metadata for images\n if (await aiMetadataService.isEnabled()) {\n try {\n const metadataResults = await aiMetadataService.processFiles(uploadedFiles);\n // Update the uploaded files with AI metadata\n await aiMetadataService.updateFilesWithAIMetadata(uploadedFiles, metadataResults, user);\n } catch (error) {\n strapi.log.warn('AI metadata generation failed, proceeding without AI enhancements', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Sign file urls for private providers\n const signedFiles = await async.map(uploadedFiles, getService('file').signFileUrls);\n\n ctx.body = await pm.sanitizeOutput(signedFiles, { action: ACTIONS.read });\n ctx.status = 201;\n },\n\n /**\n * `POST /upload/files`\n *\n * Upload a single file and return the created File.\n *\n * Accepts one file per request (multipart `files` + `fileInfo`) and returns a\n * single `File` object. Unlike `uploadFiles`, it does **not** run AI metadata\n * generation inline — that responsibility is decoupled and will be handled by a\n * background job. Auth and permission checks mirror `POST /upload`.\n */\n async uploadFile(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body, files: { files } = {} },\n } = ctx;\n\n const uploadService = getService('upload');\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.create,\n model: FILE_MODEL_UID,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n if (_.isEmpty(files) || (!Array.isArray(files) && files.size === 0)) {\n throw new errors.ApplicationError('Files are empty');\n }\n\n // Accept a single file per request; ignore any extras defensively.\n const file = Array.isArray(files) ? files[0] : files;\n const fileName = file.originalFilename || 'unknown';\n\n // Parse the single fileInfo object from the multipart body.\n let fileInfo: UploadFileInfo = {\n name: fileName,\n caption: null,\n alternativeText: null,\n folder: null,\n };\n if (body?.fileInfo) {\n const raw = body.fileInfo;\n if (typeof raw === 'string') {\n fileInfo = JSON.parse(raw);\n } else if (Array.isArray(raw)) {\n fileInfo = (typeof raw[0] === 'string' ? JSON.parse(raw[0]) : raw[0]) as UploadFileInfo;\n } else {\n fileInfo = raw as UploadFileInfo;\n }\n }\n\n // Validate this single file using security checks.\n const { validFiles, errors: validationErrors } = await prepareUploadRequest(\n file,\n { fileInfo: JSON.stringify(fileInfo) },\n strapi\n );\n\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0]?.message || 'Validation failed');\n }\n\n const data = await validateUploadBody({ fileInfo }, false);\n const [uploadedFile] = await uploadService.upload({ data, files: [validFiles[0]] }, { user });\n\n if (uploadedFile.mime?.startsWith('image/')) {\n await getService('metrics').trackUsage('didUploadImage');\n }\n\n // No inline AI metadata generation — intentionally decoupled for the async job.\n\n // Sign file url for private providers.\n const signedFile = await getService('file').signFileUrls(uploadedFile);\n\n ctx.body = await pm.sanitizeOutput(signedFile, { action: ACTIONS.read });\n ctx.status = 201;\n },\n\n /**\n * `POST /upload/actions/upload-from-urls`\n *\n * Upload files from URLs with SSE streaming for per-file progress\n *\n * Accepts JSON body with URLs and fetches them server-side.\n * Streams Server-Sent Events as each URL is fetched and uploaded:\n * - file:fetching — when starting to fetch a URL\n * - file:progress — throttled byte progress of the remote → server temp file transfer\n * - file:uploading — when upload starts for a fetched file\n * - file:complete — when a file is successfully uploaded\n * - file:error — when a URL fetch or upload fails\n * - stream:complete — final summary with all results\n */\n async uploadFromUrls(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body },\n } = ctx;\n\n const uploadService = getService('upload');\n const fileService = getService('file');\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.create,\n model: FILE_MODEL_UID,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n // Parse and validate request body\n const { urls, folderId } = body as { urls?: string[]; folderId?: number | null };\n\n if (!urls || !Array.isArray(urls) || urls.length === 0) {\n throw new errors.ApplicationError('URLs are required');\n }\n\n if (urls.length > 20) {\n throw new errors.ApplicationError('Maximum 20 URLs allowed per request');\n }\n\n // Take manual control of the response for SSE streaming\n ctx.respond = false;\n const res = ctx.res;\n res.writeHead(200, {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n });\n\n const writeSSE = (event: string, data: Record<string, unknown>) => {\n res.write(`event: ${event}\\ndata: ${JSON.stringify(data)}\\n\\n`);\n };\n\n const total = urls.length;\n const uploadErrors: FileUploadError[] = [];\n const successfulFiles: any[] = [];\n\n // Create temp directory for fetched files\n const tmpWorkingDirectory = await fse.mkdtemp(path.join(os.tmpdir(), 'strapi-url-upload-'));\n const { sizeLimit } = strapi.config.get<Config>('plugin::upload');\n\n try {\n // Process each URL sequentially\n for (let i = 0; i < urls.length; i += 1) {\n const url = urls[i];\n\n writeSSE('file:fetching', { url, index: i, total });\n\n try {\n // `fetchUrlToInputFile` reports raw, unthrottled progress — coalescing it into a\n // sane frame rate is the caller's job. State is per URL: the loop is sequential.\n let lastProgressAt = 0;\n let hasAnnouncedSize = false;\n let hasReachedTotal = false;\n\n const onFetchProgress = ({ bytesWritten, totalBytes }: UrlFetchProgress) => {\n // The frame that reaches the total always goes out, or a throttled last chunk\n // leaves the row short of 100% until `file:complete`.\n const isFinal = !hasReachedTotal && totalBytes !== null && bytesWritten >= totalBytes;\n if (\n hasAnnouncedSize &&\n !isFinal &&\n Date.now() - lastProgressAt < URL_FETCH_PROGRESS_INTERVAL_MS\n ) {\n return;\n }\n\n hasAnnouncedSize = true;\n hasReachedTotal = hasReachedTotal || isFinal;\n lastProgressAt = Date.now();\n\n writeSSE('file:progress', {\n index: i,\n loadedBytes: bytesWritten,\n totalBytes,\n phase: 'fetch',\n });\n };\n\n // Fetch URL to temp file\n const { file } = await fileService.fetchUrlToInputFile(\n url,\n tmpWorkingDirectory,\n sizeLimit,\n onFetchProgress\n );\n const fileName = file.originalFilename;\n\n writeSSE('file:uploading', {\n name: fileName,\n index: i,\n total,\n size: file.size,\n });\n\n // Validate using security checks\n const fileInfo: UploadFileInfo = {\n name: fileName,\n caption: null,\n alternativeText: null,\n folder: folderId ?? null,\n };\n\n const { validFiles, errors: validationErrors } = await prepareUploadRequest(\n file,\n { fileInfo: JSON.stringify(fileInfo) },\n strapi\n );\n\n if (validFiles.length === 0) {\n const errorMessage = validationErrors[0]?.message || 'Validation failed';\n uploadErrors.push({ name: fileName, message: errorMessage });\n writeSSE('file:error', { name: fileName, url, index: i, message: errorMessage });\n } else {\n // Upload the file\n const data = await validateUploadBody({ fileInfo }, false);\n const [uploadedFile] = await uploadService.upload(\n { data, files: [validFiles[0]] },\n { user }\n );\n\n // Sign file url\n const signedFile = await fileService.signFileUrls(uploadedFile);\n successfulFiles.push(signedFile);\n\n writeSSE('file:complete', { name: fileName, index: i, file: signedFile });\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n uploadErrors.push({ name: url, message: errorMessage });\n writeSSE('file:error', { url, index: i, message: errorMessage });\n }\n }\n\n // Track image upload metric once if any images were uploaded\n if (successfulFiles.some((file) => file.mime?.startsWith('image/'))) {\n await getService('metrics').trackUsage('didUploadImage');\n }\n\n // Send final stream summary\n writeSSE('stream:complete', {\n data: await pm.sanitizeOutput(successfulFiles, { action: ACTIONS.read }),\n errors: uploadErrors,\n });\n } finally {\n // Clean up temp directory\n await fse.remove(tmpWorkingDirectory);\n }\n\n res.end();\n },\n\n // TODO: split into multiple endpoints\n async upload(ctx: Context) {\n const {\n query: { id },\n request: { files: { files } = {} },\n } = ctx;\n\n if (_.isEmpty(files) || (!Array.isArray(files) && files.size === 0)) {\n if (id) {\n return this.updateFileInfo(ctx);\n }\n\n throw new errors.ApplicationError('Files are empty');\n }\n\n await (id ? this.replaceFile : this.uploadFiles)(ctx);\n },\n};\n"],"names":["URL_FETCH_PROGRESS_INTERVAL_MS","bulkUpdateFileInfo","ctx","state","userAbility","user","request","body","updates","validateBulkUpdateBody","uploadService","getService","results","async","map","id","fileInfo","pm","findEntityAndCheckPermissions","ACTIONS","update","FILE_MODEL_UID","updated","updateFileInfo","signedFile","signFileUrls","sanitizeOutput","action","read","params","query","errors","ValidationError","data","validateUploadBody","file","replaceFile","files","filesInput","Array","isArray","length","ApplicationError","validFiles","filteredBody","validationErrors","prepareUploadRequest","strapi","message","replacedFile","replace","aiMetadataService","mime","startsWith","isEnabled","metadataResults","processFiles","updateFilesWithAIMetadata","error","log","warn","Error","String","uploadFiles","service","createPermissionsManager","ability","create","model","isAllowed","forbidden","isMultipleFiles","filesArray","alignedFilesArray","info","find","originalFilename","name","filter","Boolean","uploadedFiles","upload","some","trackUsage","signedFiles","status","uploadFile","_","isEmpty","size","fileName","caption","alternativeText","folder","raw","JSON","parse","stringify","uploadedFile","uploadFromUrls","fileService","urls","folderId","respond","res","writeHead","Connection","writeSSE","event","write","total","uploadErrors","successfulFiles","tmpWorkingDirectory","fse","mkdtemp","path","join","os","tmpdir","sizeLimit","config","get","i","url","index","lastProgressAt","hasAnnouncedSize","hasReachedTotal","onFetchProgress","bytesWritten","totalBytes","isFinal","Date","now","loadedBytes","phase","fetchUrlToInputFile","errorMessage","push","remove","end"],"mappings":"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"}
|
|
@@ -9,6 +9,13 @@ import { validateUploadBody, validateBulkUpdateBody } from './validation/admin/u
|
|
|
9
9
|
import { findEntityAndCheckPermissions } from './utils/find-entity-and-check-permissions.mjs';
|
|
10
10
|
import { prepareUploadRequest } from '../utils/mime-validation.mjs';
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Minimum delay between two `file:progress` frames for the same URL.
|
|
14
|
+
*
|
|
15
|
+
* `fetchUrlToInputFile` reports once per streamed chunk (~8000 calls for a 512MB file at
|
|
16
|
+
* 64KB chunks); at ~5 frames a second a 10s transfer costs ~50 frames, which is plenty for
|
|
17
|
+
* a bar the user watches.
|
|
18
|
+
*/ const URL_FETCH_PROGRESS_INTERVAL_MS = 200;
|
|
12
19
|
var adminUpload = {
|
|
13
20
|
async bulkUpdateFileInfo (ctx) {
|
|
14
21
|
const { state: { userAbility, user }, request: { body } } = ctx;
|
|
@@ -240,6 +247,7 @@ var adminUpload = {
|
|
|
240
247
|
* Accepts JSON body with URLs and fetches them server-side.
|
|
241
248
|
* Streams Server-Sent Events as each URL is fetched and uploaded:
|
|
242
249
|
* - file:fetching — when starting to fetch a URL
|
|
250
|
+
* - file:progress — throttled byte progress of the remote → server temp file transfer
|
|
243
251
|
* - file:uploading — when upload starts for a fetched file
|
|
244
252
|
* - file:complete — when a file is successfully uploaded
|
|
245
253
|
* - file:error — when a URL fetch or upload fails
|
|
@@ -291,8 +299,30 @@ var adminUpload = {
|
|
|
291
299
|
total
|
|
292
300
|
});
|
|
293
301
|
try {
|
|
302
|
+
// `fetchUrlToInputFile` reports raw, unthrottled progress — coalescing it into a
|
|
303
|
+
// sane frame rate is the caller's job. State is per URL: the loop is sequential.
|
|
304
|
+
let lastProgressAt = 0;
|
|
305
|
+
let hasAnnouncedSize = false;
|
|
306
|
+
let hasReachedTotal = false;
|
|
307
|
+
const onFetchProgress = ({ bytesWritten, totalBytes })=>{
|
|
308
|
+
// The frame that reaches the total always goes out, or a throttled last chunk
|
|
309
|
+
// leaves the row short of 100% until `file:complete`.
|
|
310
|
+
const isFinal = !hasReachedTotal && totalBytes !== null && bytesWritten >= totalBytes;
|
|
311
|
+
if (hasAnnouncedSize && !isFinal && Date.now() - lastProgressAt < URL_FETCH_PROGRESS_INTERVAL_MS) {
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
hasAnnouncedSize = true;
|
|
315
|
+
hasReachedTotal = hasReachedTotal || isFinal;
|
|
316
|
+
lastProgressAt = Date.now();
|
|
317
|
+
writeSSE('file:progress', {
|
|
318
|
+
index: i,
|
|
319
|
+
loadedBytes: bytesWritten,
|
|
320
|
+
totalBytes,
|
|
321
|
+
phase: 'fetch'
|
|
322
|
+
});
|
|
323
|
+
};
|
|
294
324
|
// Fetch URL to temp file
|
|
295
|
-
const { file } = await fileService.fetchUrlToInputFile(url, tmpWorkingDirectory, sizeLimit);
|
|
325
|
+
const { file } = await fileService.fetchUrlToInputFile(url, tmpWorkingDirectory, sizeLimit, onFetchProgress);
|
|
296
326
|
const fileName = file.originalFilename;
|
|
297
327
|
writeSSE('file:uploading', {
|
|
298
328
|
name: fileName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-upload.mjs","sources":["../../../server/src/controllers/admin-upload.ts"],"sourcesContent":["import os from 'os';\nimport path from 'path';\nimport fse from 'fs-extra';\nimport _ from 'lodash';\nimport { errors, async } from '@strapi/utils';\n\nimport type { Context } from 'koa';\n\nimport { getService } from '../utils';\nimport { ACTIONS, FILE_MODEL_UID } from '../constants';\nimport { validateBulkUpdateBody, validateUploadBody } from './validation/admin/upload';\nimport { findEntityAndCheckPermissions } from './utils/find-entity-and-check-permissions';\nimport { Config, FileInfo } from '../types';\nimport { prepareUploadRequest, type FileUploadError } from '../utils/mime-validation';\nimport type { UploadFileInfo } from '../../../shared/contracts/files';\n\nexport default {\n async bulkUpdateFileInfo(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body },\n } = ctx;\n\n const { updates } = await validateBulkUpdateBody(body);\n const uploadService = getService('upload');\n\n const results = await async.map(\n updates,\n async ({ id, fileInfo }: { id: number; fileInfo: FileInfo }) => {\n const { pm } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.update,\n FILE_MODEL_UID,\n id\n );\n\n const updated = await uploadService.updateFileInfo(id, fileInfo as any, { user });\n\n // Sign file urls for private providers\n const signedFile = await getService('file').signFileUrls(updated);\n\n return pm.sanitizeOutput(signedFile, { action: ACTIONS.read });\n }\n );\n\n ctx.body = results;\n },\n\n /**\n * `PUT /upload/files/:id`\n *\n * Update the editable metadata (`fileInfo`) of an existing file. Also reached\n * through the `POST /upload` multiplexer, which delegates here with the id in\n * `ctx.query` — hence the dual read below, route params winning.\n */\n async updateFileInfo(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body },\n } = ctx;\n\n const id = ctx.params?.id ?? ctx.query.id;\n\n if (typeof id !== 'string') {\n throw new errors.ValidationError('File id is required');\n }\n\n const uploadService = getService('upload');\n const { pm } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.update,\n FILE_MODEL_UID,\n id\n );\n\n const data = await validateUploadBody(body);\n\n const file = await uploadService.updateFileInfo(id, data.fileInfo as any, { user });\n\n // Sign file urls for private providers\n const signedFile = await getService('file').signFileUrls(file);\n\n ctx.body = await pm.sanitizeOutput(signedFile, { action: ACTIONS.read });\n },\n\n /**\n * `POST /upload/files/:id/replace`\n *\n * Replace the binary content of an existing file. Also reached through the\n * `POST /upload` multiplexer, which delegates here with the id in `ctx.query`\n * — hence the dual read below, route params winning.\n */\n async replaceFile(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body, files: { files: filesInput } = {} },\n } = ctx;\n\n const id = ctx.params?.id ?? ctx.query.id;\n\n if (typeof id !== 'string') {\n throw new errors.ValidationError('File id is required');\n }\n\n const uploadService = getService('upload');\n const { pm } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.update,\n FILE_MODEL_UID,\n id\n );\n\n if (Array.isArray(filesInput) && filesInput.length > 1) {\n throw new errors.ApplicationError('Cannot replace a file with multiple ones');\n }\n\n const files = Array.isArray(filesInput) ? filesInput[0] : filesInput;\n\n const {\n validFiles,\n filteredBody,\n errors: validationErrors,\n } = await prepareUploadRequest(files, body, strapi);\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0].message);\n }\n\n const data = (await validateUploadBody(filteredBody)) as { fileInfo: FileInfo };\n const replacedFile = await uploadService.replace(id, { data, file: validFiles[0] }, { user });\n\n // Regenerate AI metadata for image replacements so the alt text / caption\n // reflect the new file content. Mirrors the post-upload hook in\n // `uploadFiles`; failure is logged and swallowed to keep the replace flow\n // resilient when the AI provider is unavailable.\n const aiMetadataService = getService('aiMetadata');\n if (replacedFile?.mime?.startsWith('image/') && (await aiMetadataService.isEnabled())) {\n try {\n const metadataResults = await aiMetadataService.processFiles([replacedFile]);\n await aiMetadataService.updateFilesWithAIMetadata([replacedFile], metadataResults, user);\n } catch (error) {\n strapi.log.warn('AI metadata generation failed on replace, proceeding without it', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Sign file urls for private providers\n const signedFile = await getService('file').signFileUrls(replacedFile);\n\n ctx.body = await pm.sanitizeOutput(signedFile, { action: ACTIONS.read });\n },\n\n async uploadFiles(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body, files: { files } = {} },\n } = ctx;\n\n const uploadService = getService('upload');\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.create,\n model: FILE_MODEL_UID,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n const {\n validFiles,\n filteredBody,\n errors: validationErrors,\n } = await prepareUploadRequest(files, body, strapi);\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0].message);\n }\n\n const isMultipleFiles = validFiles.length > 1;\n const data = await validateUploadBody(filteredBody, isMultipleFiles);\n\n let filesArray = validFiles;\n\n if (\n data.fileInfo &&\n Array.isArray(data.fileInfo) &&\n filesArray.length === data.fileInfo.length\n ) {\n // Reorder filesArray to match data.fileInfo order\n const alignedFilesArray = data.fileInfo\n .map((info) => {\n return filesArray.find((file) => file.originalFilename === info.name);\n })\n .filter(Boolean) as any[];\n\n filesArray = alignedFilesArray;\n }\n\n // Upload files first to get thumbnails\n const uploadedFiles = await uploadService.upload({ data, files: filesArray }, { user });\n if (uploadedFiles.some((file) => file.mime?.startsWith('image/'))) {\n await getService('metrics').trackUsage('didUploadImage');\n }\n\n const aiMetadataService = getService('aiMetadata');\n\n // AFTER upload - generate AI metadata for images\n if (await aiMetadataService.isEnabled()) {\n try {\n const metadataResults = await aiMetadataService.processFiles(uploadedFiles);\n // Update the uploaded files with AI metadata\n await aiMetadataService.updateFilesWithAIMetadata(uploadedFiles, metadataResults, user);\n } catch (error) {\n strapi.log.warn('AI metadata generation failed, proceeding without AI enhancements', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Sign file urls for private providers\n const signedFiles = await async.map(uploadedFiles, getService('file').signFileUrls);\n\n ctx.body = await pm.sanitizeOutput(signedFiles, { action: ACTIONS.read });\n ctx.status = 201;\n },\n\n /**\n * `POST /upload/files`\n *\n * Upload a single file and return the created File.\n *\n * Accepts one file per request (multipart `files` + `fileInfo`) and returns a\n * single `File` object. Unlike `uploadFiles`, it does **not** run AI metadata\n * generation inline — that responsibility is decoupled and will be handled by a\n * background job. Auth and permission checks mirror `POST /upload`.\n */\n async uploadFile(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body, files: { files } = {} },\n } = ctx;\n\n const uploadService = getService('upload');\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.create,\n model: FILE_MODEL_UID,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n if (_.isEmpty(files) || (!Array.isArray(files) && files.size === 0)) {\n throw new errors.ApplicationError('Files are empty');\n }\n\n // Accept a single file per request; ignore any extras defensively.\n const file = Array.isArray(files) ? files[0] : files;\n const fileName = file.originalFilename || 'unknown';\n\n // Parse the single fileInfo object from the multipart body.\n let fileInfo: UploadFileInfo = {\n name: fileName,\n caption: null,\n alternativeText: null,\n folder: null,\n };\n if (body?.fileInfo) {\n const raw = body.fileInfo;\n if (typeof raw === 'string') {\n fileInfo = JSON.parse(raw);\n } else if (Array.isArray(raw)) {\n fileInfo = (typeof raw[0] === 'string' ? JSON.parse(raw[0]) : raw[0]) as UploadFileInfo;\n } else {\n fileInfo = raw as UploadFileInfo;\n }\n }\n\n // Validate this single file using security checks.\n const { validFiles, errors: validationErrors } = await prepareUploadRequest(\n file,\n { fileInfo: JSON.stringify(fileInfo) },\n strapi\n );\n\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0]?.message || 'Validation failed');\n }\n\n const data = await validateUploadBody({ fileInfo }, false);\n const [uploadedFile] = await uploadService.upload({ data, files: [validFiles[0]] }, { user });\n\n if (uploadedFile.mime?.startsWith('image/')) {\n await getService('metrics').trackUsage('didUploadImage');\n }\n\n // No inline AI metadata generation — intentionally decoupled for the async job.\n\n // Sign file url for private providers.\n const signedFile = await getService('file').signFileUrls(uploadedFile);\n\n ctx.body = await pm.sanitizeOutput(signedFile, { action: ACTIONS.read });\n ctx.status = 201;\n },\n\n /**\n * `POST /upload/actions/upload-from-urls`\n *\n * Upload files from URLs with SSE streaming for per-file progress\n *\n * Accepts JSON body with URLs and fetches them server-side.\n * Streams Server-Sent Events as each URL is fetched and uploaded:\n * - file:fetching — when starting to fetch a URL\n * - file:uploading — when upload starts for a fetched file\n * - file:complete — when a file is successfully uploaded\n * - file:error — when a URL fetch or upload fails\n * - stream:complete — final summary with all results\n */\n async uploadFromUrls(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body },\n } = ctx;\n\n const uploadService = getService('upload');\n const fileService = getService('file');\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.create,\n model: FILE_MODEL_UID,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n // Parse and validate request body\n const { urls, folderId } = body as { urls?: string[]; folderId?: number | null };\n\n if (!urls || !Array.isArray(urls) || urls.length === 0) {\n throw new errors.ApplicationError('URLs are required');\n }\n\n if (urls.length > 20) {\n throw new errors.ApplicationError('Maximum 20 URLs allowed per request');\n }\n\n // Take manual control of the response for SSE streaming\n ctx.respond = false;\n const res = ctx.res;\n res.writeHead(200, {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n });\n\n const writeSSE = (event: string, data: Record<string, unknown>) => {\n res.write(`event: ${event}\\ndata: ${JSON.stringify(data)}\\n\\n`);\n };\n\n const total = urls.length;\n const uploadErrors: FileUploadError[] = [];\n const successfulFiles: any[] = [];\n\n // Create temp directory for fetched files\n const tmpWorkingDirectory = await fse.mkdtemp(path.join(os.tmpdir(), 'strapi-url-upload-'));\n const { sizeLimit } = strapi.config.get<Config>('plugin::upload');\n\n try {\n // Process each URL sequentially\n for (let i = 0; i < urls.length; i += 1) {\n const url = urls[i];\n\n writeSSE('file:fetching', { url, index: i, total });\n\n try {\n // Fetch URL to temp file\n const { file } = await fileService.fetchUrlToInputFile(\n url,\n tmpWorkingDirectory,\n sizeLimit\n );\n const fileName = file.originalFilename;\n\n writeSSE('file:uploading', {\n name: fileName,\n index: i,\n total,\n size: file.size,\n });\n\n // Validate using security checks\n const fileInfo: UploadFileInfo = {\n name: fileName,\n caption: null,\n alternativeText: null,\n folder: folderId ?? null,\n };\n\n const { validFiles, errors: validationErrors } = await prepareUploadRequest(\n file,\n { fileInfo: JSON.stringify(fileInfo) },\n strapi\n );\n\n if (validFiles.length === 0) {\n const errorMessage = validationErrors[0]?.message || 'Validation failed';\n uploadErrors.push({ name: fileName, message: errorMessage });\n writeSSE('file:error', { name: fileName, url, index: i, message: errorMessage });\n } else {\n // Upload the file\n const data = await validateUploadBody({ fileInfo }, false);\n const [uploadedFile] = await uploadService.upload(\n { data, files: [validFiles[0]] },\n { user }\n );\n\n // Sign file url\n const signedFile = await fileService.signFileUrls(uploadedFile);\n successfulFiles.push(signedFile);\n\n writeSSE('file:complete', { name: fileName, index: i, file: signedFile });\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n uploadErrors.push({ name: url, message: errorMessage });\n writeSSE('file:error', { url, index: i, message: errorMessage });\n }\n }\n\n // Track image upload metric once if any images were uploaded\n if (successfulFiles.some((file) => file.mime?.startsWith('image/'))) {\n await getService('metrics').trackUsage('didUploadImage');\n }\n\n // Send final stream summary\n writeSSE('stream:complete', {\n data: await pm.sanitizeOutput(successfulFiles, { action: ACTIONS.read }),\n errors: uploadErrors,\n });\n } finally {\n // Clean up temp directory\n await fse.remove(tmpWorkingDirectory);\n }\n\n res.end();\n },\n\n // TODO: split into multiple endpoints\n async upload(ctx: Context) {\n const {\n query: { id },\n request: { files: { files } = {} },\n } = ctx;\n\n if (_.isEmpty(files) || (!Array.isArray(files) && files.size === 0)) {\n if (id) {\n return this.updateFileInfo(ctx);\n }\n\n throw new errors.ApplicationError('Files are empty');\n }\n\n await (id ? this.replaceFile : this.uploadFiles)(ctx);\n },\n};\n"],"names":["bulkUpdateFileInfo","ctx","state","userAbility","user","request","body","updates","validateBulkUpdateBody","uploadService","getService","results","async","map","id","fileInfo","pm","findEntityAndCheckPermissions","ACTIONS","update","FILE_MODEL_UID","updated","updateFileInfo","signedFile","signFileUrls","sanitizeOutput","action","read","params","query","errors","ValidationError","data","validateUploadBody","file","replaceFile","files","filesInput","Array","isArray","length","ApplicationError","validFiles","filteredBody","validationErrors","prepareUploadRequest","strapi","message","replacedFile","replace","aiMetadataService","mime","startsWith","isEnabled","metadataResults","processFiles","updateFilesWithAIMetadata","error","log","warn","Error","String","uploadFiles","service","createPermissionsManager","ability","create","model","isAllowed","forbidden","isMultipleFiles","filesArray","alignedFilesArray","info","find","originalFilename","name","filter","Boolean","uploadedFiles","upload","some","trackUsage","signedFiles","status","uploadFile","_","isEmpty","size","fileName","caption","alternativeText","folder","raw","JSON","parse","stringify","uploadedFile","uploadFromUrls","fileService","urls","folderId","respond","res","writeHead","Connection","writeSSE","event","write","total","uploadErrors","successfulFiles","tmpWorkingDirectory","fse","mkdtemp","path","join","os","tmpdir","sizeLimit","config","get","i","url","index","fetchUrlToInputFile","errorMessage","push","remove","end"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admin-upload.mjs","sources":["../../../server/src/controllers/admin-upload.ts"],"sourcesContent":["import os from 'os';\nimport path from 'path';\nimport fse from 'fs-extra';\nimport _ from 'lodash';\nimport { errors, async } from '@strapi/utils';\n\nimport type { Context } from 'koa';\n\nimport { getService } from '../utils';\nimport { ACTIONS, FILE_MODEL_UID } from '../constants';\nimport { validateBulkUpdateBody, validateUploadBody } from './validation/admin/upload';\nimport { findEntityAndCheckPermissions } from './utils/find-entity-and-check-permissions';\nimport { Config, FileInfo } from '../types';\nimport { prepareUploadRequest, type FileUploadError } from '../utils/mime-validation';\nimport type { UploadFileInfo } from '../../../shared/contracts/files';\nimport type { UrlFetchProgress } from '../services/file';\n\n/**\n * Minimum delay between two `file:progress` frames for the same URL.\n *\n * `fetchUrlToInputFile` reports once per streamed chunk (~8000 calls for a 512MB file at\n * 64KB chunks); at ~5 frames a second a 10s transfer costs ~50 frames, which is plenty for\n * a bar the user watches.\n */\nconst URL_FETCH_PROGRESS_INTERVAL_MS = 200;\n\nexport default {\n async bulkUpdateFileInfo(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body },\n } = ctx;\n\n const { updates } = await validateBulkUpdateBody(body);\n const uploadService = getService('upload');\n\n const results = await async.map(\n updates,\n async ({ id, fileInfo }: { id: number; fileInfo: FileInfo }) => {\n const { pm } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.update,\n FILE_MODEL_UID,\n id\n );\n\n const updated = await uploadService.updateFileInfo(id, fileInfo as any, { user });\n\n // Sign file urls for private providers\n const signedFile = await getService('file').signFileUrls(updated);\n\n return pm.sanitizeOutput(signedFile, { action: ACTIONS.read });\n }\n );\n\n ctx.body = results;\n },\n\n /**\n * `PUT /upload/files/:id`\n *\n * Update the editable metadata (`fileInfo`) of an existing file. Also reached\n * through the `POST /upload` multiplexer, which delegates here with the id in\n * `ctx.query` — hence the dual read below, route params winning.\n */\n async updateFileInfo(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body },\n } = ctx;\n\n const id = ctx.params?.id ?? ctx.query.id;\n\n if (typeof id !== 'string') {\n throw new errors.ValidationError('File id is required');\n }\n\n const uploadService = getService('upload');\n const { pm } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.update,\n FILE_MODEL_UID,\n id\n );\n\n const data = await validateUploadBody(body);\n\n const file = await uploadService.updateFileInfo(id, data.fileInfo as any, { user });\n\n // Sign file urls for private providers\n const signedFile = await getService('file').signFileUrls(file);\n\n ctx.body = await pm.sanitizeOutput(signedFile, { action: ACTIONS.read });\n },\n\n /**\n * `POST /upload/files/:id/replace`\n *\n * Replace the binary content of an existing file. Also reached through the\n * `POST /upload` multiplexer, which delegates here with the id in `ctx.query`\n * — hence the dual read below, route params winning.\n */\n async replaceFile(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body, files: { files: filesInput } = {} },\n } = ctx;\n\n const id = ctx.params?.id ?? ctx.query.id;\n\n if (typeof id !== 'string') {\n throw new errors.ValidationError('File id is required');\n }\n\n const uploadService = getService('upload');\n const { pm } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.update,\n FILE_MODEL_UID,\n id\n );\n\n if (Array.isArray(filesInput) && filesInput.length > 1) {\n throw new errors.ApplicationError('Cannot replace a file with multiple ones');\n }\n\n const files = Array.isArray(filesInput) ? filesInput[0] : filesInput;\n\n const {\n validFiles,\n filteredBody,\n errors: validationErrors,\n } = await prepareUploadRequest(files, body, strapi);\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0].message);\n }\n\n const data = (await validateUploadBody(filteredBody)) as { fileInfo: FileInfo };\n const replacedFile = await uploadService.replace(id, { data, file: validFiles[0] }, { user });\n\n // Regenerate AI metadata for image replacements so the alt text / caption\n // reflect the new file content. Mirrors the post-upload hook in\n // `uploadFiles`; failure is logged and swallowed to keep the replace flow\n // resilient when the AI provider is unavailable.\n const aiMetadataService = getService('aiMetadata');\n if (replacedFile?.mime?.startsWith('image/') && (await aiMetadataService.isEnabled())) {\n try {\n const metadataResults = await aiMetadataService.processFiles([replacedFile]);\n await aiMetadataService.updateFilesWithAIMetadata([replacedFile], metadataResults, user);\n } catch (error) {\n strapi.log.warn('AI metadata generation failed on replace, proceeding without it', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Sign file urls for private providers\n const signedFile = await getService('file').signFileUrls(replacedFile);\n\n ctx.body = await pm.sanitizeOutput(signedFile, { action: ACTIONS.read });\n },\n\n async uploadFiles(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body, files: { files } = {} },\n } = ctx;\n\n const uploadService = getService('upload');\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.create,\n model: FILE_MODEL_UID,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n const {\n validFiles,\n filteredBody,\n errors: validationErrors,\n } = await prepareUploadRequest(files, body, strapi);\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0].message);\n }\n\n const isMultipleFiles = validFiles.length > 1;\n const data = await validateUploadBody(filteredBody, isMultipleFiles);\n\n let filesArray = validFiles;\n\n if (\n data.fileInfo &&\n Array.isArray(data.fileInfo) &&\n filesArray.length === data.fileInfo.length\n ) {\n // Reorder filesArray to match data.fileInfo order\n const alignedFilesArray = data.fileInfo\n .map((info) => {\n return filesArray.find((file) => file.originalFilename === info.name);\n })\n .filter(Boolean) as any[];\n\n filesArray = alignedFilesArray;\n }\n\n // Upload files first to get thumbnails\n const uploadedFiles = await uploadService.upload({ data, files: filesArray }, { user });\n if (uploadedFiles.some((file) => file.mime?.startsWith('image/'))) {\n await getService('metrics').trackUsage('didUploadImage');\n }\n\n const aiMetadataService = getService('aiMetadata');\n\n // AFTER upload - generate AI metadata for images\n if (await aiMetadataService.isEnabled()) {\n try {\n const metadataResults = await aiMetadataService.processFiles(uploadedFiles);\n // Update the uploaded files with AI metadata\n await aiMetadataService.updateFilesWithAIMetadata(uploadedFiles, metadataResults, user);\n } catch (error) {\n strapi.log.warn('AI metadata generation failed, proceeding without AI enhancements', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Sign file urls for private providers\n const signedFiles = await async.map(uploadedFiles, getService('file').signFileUrls);\n\n ctx.body = await pm.sanitizeOutput(signedFiles, { action: ACTIONS.read });\n ctx.status = 201;\n },\n\n /**\n * `POST /upload/files`\n *\n * Upload a single file and return the created File.\n *\n * Accepts one file per request (multipart `files` + `fileInfo`) and returns a\n * single `File` object. Unlike `uploadFiles`, it does **not** run AI metadata\n * generation inline — that responsibility is decoupled and will be handled by a\n * background job. Auth and permission checks mirror `POST /upload`.\n */\n async uploadFile(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body, files: { files } = {} },\n } = ctx;\n\n const uploadService = getService('upload');\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.create,\n model: FILE_MODEL_UID,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n if (_.isEmpty(files) || (!Array.isArray(files) && files.size === 0)) {\n throw new errors.ApplicationError('Files are empty');\n }\n\n // Accept a single file per request; ignore any extras defensively.\n const file = Array.isArray(files) ? files[0] : files;\n const fileName = file.originalFilename || 'unknown';\n\n // Parse the single fileInfo object from the multipart body.\n let fileInfo: UploadFileInfo = {\n name: fileName,\n caption: null,\n alternativeText: null,\n folder: null,\n };\n if (body?.fileInfo) {\n const raw = body.fileInfo;\n if (typeof raw === 'string') {\n fileInfo = JSON.parse(raw);\n } else if (Array.isArray(raw)) {\n fileInfo = (typeof raw[0] === 'string' ? JSON.parse(raw[0]) : raw[0]) as UploadFileInfo;\n } else {\n fileInfo = raw as UploadFileInfo;\n }\n }\n\n // Validate this single file using security checks.\n const { validFiles, errors: validationErrors } = await prepareUploadRequest(\n file,\n { fileInfo: JSON.stringify(fileInfo) },\n strapi\n );\n\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0]?.message || 'Validation failed');\n }\n\n const data = await validateUploadBody({ fileInfo }, false);\n const [uploadedFile] = await uploadService.upload({ data, files: [validFiles[0]] }, { user });\n\n if (uploadedFile.mime?.startsWith('image/')) {\n await getService('metrics').trackUsage('didUploadImage');\n }\n\n // No inline AI metadata generation — intentionally decoupled for the async job.\n\n // Sign file url for private providers.\n const signedFile = await getService('file').signFileUrls(uploadedFile);\n\n ctx.body = await pm.sanitizeOutput(signedFile, { action: ACTIONS.read });\n ctx.status = 201;\n },\n\n /**\n * `POST /upload/actions/upload-from-urls`\n *\n * Upload files from URLs with SSE streaming for per-file progress\n *\n * Accepts JSON body with URLs and fetches them server-side.\n * Streams Server-Sent Events as each URL is fetched and uploaded:\n * - file:fetching — when starting to fetch a URL\n * - file:progress — throttled byte progress of the remote → server temp file transfer\n * - file:uploading — when upload starts for a fetched file\n * - file:complete — when a file is successfully uploaded\n * - file:error — when a URL fetch or upload fails\n * - stream:complete — final summary with all results\n */\n async uploadFromUrls(ctx: Context) {\n const {\n state: { userAbility, user },\n request: { body },\n } = ctx;\n\n const uploadService = getService('upload');\n const fileService = getService('file');\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.create,\n model: FILE_MODEL_UID,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n // Parse and validate request body\n const { urls, folderId } = body as { urls?: string[]; folderId?: number | null };\n\n if (!urls || !Array.isArray(urls) || urls.length === 0) {\n throw new errors.ApplicationError('URLs are required');\n }\n\n if (urls.length > 20) {\n throw new errors.ApplicationError('Maximum 20 URLs allowed per request');\n }\n\n // Take manual control of the response for SSE streaming\n ctx.respond = false;\n const res = ctx.res;\n res.writeHead(200, {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n });\n\n const writeSSE = (event: string, data: Record<string, unknown>) => {\n res.write(`event: ${event}\\ndata: ${JSON.stringify(data)}\\n\\n`);\n };\n\n const total = urls.length;\n const uploadErrors: FileUploadError[] = [];\n const successfulFiles: any[] = [];\n\n // Create temp directory for fetched files\n const tmpWorkingDirectory = await fse.mkdtemp(path.join(os.tmpdir(), 'strapi-url-upload-'));\n const { sizeLimit } = strapi.config.get<Config>('plugin::upload');\n\n try {\n // Process each URL sequentially\n for (let i = 0; i < urls.length; i += 1) {\n const url = urls[i];\n\n writeSSE('file:fetching', { url, index: i, total });\n\n try {\n // `fetchUrlToInputFile` reports raw, unthrottled progress — coalescing it into a\n // sane frame rate is the caller's job. State is per URL: the loop is sequential.\n let lastProgressAt = 0;\n let hasAnnouncedSize = false;\n let hasReachedTotal = false;\n\n const onFetchProgress = ({ bytesWritten, totalBytes }: UrlFetchProgress) => {\n // The frame that reaches the total always goes out, or a throttled last chunk\n // leaves the row short of 100% until `file:complete`.\n const isFinal = !hasReachedTotal && totalBytes !== null && bytesWritten >= totalBytes;\n if (\n hasAnnouncedSize &&\n !isFinal &&\n Date.now() - lastProgressAt < URL_FETCH_PROGRESS_INTERVAL_MS\n ) {\n return;\n }\n\n hasAnnouncedSize = true;\n hasReachedTotal = hasReachedTotal || isFinal;\n lastProgressAt = Date.now();\n\n writeSSE('file:progress', {\n index: i,\n loadedBytes: bytesWritten,\n totalBytes,\n phase: 'fetch',\n });\n };\n\n // Fetch URL to temp file\n const { file } = await fileService.fetchUrlToInputFile(\n url,\n tmpWorkingDirectory,\n sizeLimit,\n onFetchProgress\n );\n const fileName = file.originalFilename;\n\n writeSSE('file:uploading', {\n name: fileName,\n index: i,\n total,\n size: file.size,\n });\n\n // Validate using security checks\n const fileInfo: UploadFileInfo = {\n name: fileName,\n caption: null,\n alternativeText: null,\n folder: folderId ?? null,\n };\n\n const { validFiles, errors: validationErrors } = await prepareUploadRequest(\n file,\n { fileInfo: JSON.stringify(fileInfo) },\n strapi\n );\n\n if (validFiles.length === 0) {\n const errorMessage = validationErrors[0]?.message || 'Validation failed';\n uploadErrors.push({ name: fileName, message: errorMessage });\n writeSSE('file:error', { name: fileName, url, index: i, message: errorMessage });\n } else {\n // Upload the file\n const data = await validateUploadBody({ fileInfo }, false);\n const [uploadedFile] = await uploadService.upload(\n { data, files: [validFiles[0]] },\n { user }\n );\n\n // Sign file url\n const signedFile = await fileService.signFileUrls(uploadedFile);\n successfulFiles.push(signedFile);\n\n writeSSE('file:complete', { name: fileName, index: i, file: signedFile });\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n uploadErrors.push({ name: url, message: errorMessage });\n writeSSE('file:error', { url, index: i, message: errorMessage });\n }\n }\n\n // Track image upload metric once if any images were uploaded\n if (successfulFiles.some((file) => file.mime?.startsWith('image/'))) {\n await getService('metrics').trackUsage('didUploadImage');\n }\n\n // Send final stream summary\n writeSSE('stream:complete', {\n data: await pm.sanitizeOutput(successfulFiles, { action: ACTIONS.read }),\n errors: uploadErrors,\n });\n } finally {\n // Clean up temp directory\n await fse.remove(tmpWorkingDirectory);\n }\n\n res.end();\n },\n\n // TODO: split into multiple endpoints\n async upload(ctx: Context) {\n const {\n query: { id },\n request: { files: { files } = {} },\n } = ctx;\n\n if (_.isEmpty(files) || (!Array.isArray(files) && files.size === 0)) {\n if (id) {\n return this.updateFileInfo(ctx);\n }\n\n throw new errors.ApplicationError('Files are empty');\n }\n\n await (id ? this.replaceFile : this.uploadFiles)(ctx);\n },\n};\n"],"names":["URL_FETCH_PROGRESS_INTERVAL_MS","bulkUpdateFileInfo","ctx","state","userAbility","user","request","body","updates","validateBulkUpdateBody","uploadService","getService","results","async","map","id","fileInfo","pm","findEntityAndCheckPermissions","ACTIONS","update","FILE_MODEL_UID","updated","updateFileInfo","signedFile","signFileUrls","sanitizeOutput","action","read","params","query","errors","ValidationError","data","validateUploadBody","file","replaceFile","files","filesInput","Array","isArray","length","ApplicationError","validFiles","filteredBody","validationErrors","prepareUploadRequest","strapi","message","replacedFile","replace","aiMetadataService","mime","startsWith","isEnabled","metadataResults","processFiles","updateFilesWithAIMetadata","error","log","warn","Error","String","uploadFiles","service","createPermissionsManager","ability","create","model","isAllowed","forbidden","isMultipleFiles","filesArray","alignedFilesArray","info","find","originalFilename","name","filter","Boolean","uploadedFiles","upload","some","trackUsage","signedFiles","status","uploadFile","_","isEmpty","size","fileName","caption","alternativeText","folder","raw","JSON","parse","stringify","uploadedFile","uploadFromUrls","fileService","urls","folderId","respond","res","writeHead","Connection","writeSSE","event","write","total","uploadErrors","successfulFiles","tmpWorkingDirectory","fse","mkdtemp","path","join","os","tmpdir","sizeLimit","config","get","i","url","index","lastProgressAt","hasAnnouncedSize","hasReachedTotal","onFetchProgress","bytesWritten","totalBytes","isFinal","Date","now","loadedBytes","phase","fetchUrlToInputFile","errorMessage","push","remove","end"],"mappings":"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"}
|
|
@@ -8,15 +8,26 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
8
8
|
|
|
9
9
|
var ___default = /*#__PURE__*/_interopDefault(_);
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Loads a file and enforces the permission *conditions* attached to `action` on it.
|
|
13
|
+
*
|
|
14
|
+
* `createdBy` and the creator's `roles` have to be populated before `toSubject`: the admin
|
|
15
|
+
* conditions read them (`admin::is-creator` matches `createdBy.id`, `admin::has-same-role-as-creator`
|
|
16
|
+
* matches `createdBy.roles`), and a subject missing those fields can never satisfy the rule — so
|
|
17
|
+
* a conditioned grant would be denied its own files rather than allowed them.
|
|
18
|
+
*
|
|
19
|
+
* `strapiInstance` defaults to the ambient global for the admin controllers, which have no
|
|
20
|
+
* `strapi` in scope. Callers that are handed an instance — MCP tool handlers — pass it
|
|
21
|
+
* explicitly so they never bind to a different one.
|
|
22
|
+
*/ const findEntityAndCheckPermissions = async (ability, action, model, id, strapiInstance = strapi)=>{
|
|
23
|
+
const file = await index.getService('upload', strapiInstance).findOne(id, [
|
|
13
24
|
utils.contentTypes.constants.CREATED_BY_ATTRIBUTE,
|
|
14
25
|
'folder'
|
|
15
26
|
]);
|
|
16
27
|
if (___default.default.isNil(file)) {
|
|
17
28
|
throw new utils.errors.NotFoundError();
|
|
18
29
|
}
|
|
19
|
-
const pm =
|
|
30
|
+
const pm = strapiInstance.service('admin::permission').createPermissionsManager({
|
|
20
31
|
ability,
|
|
21
32
|
action,
|
|
22
33
|
model
|
|
@@ -25,7 +36,7 @@ const findEntityAndCheckPermissions = async (ability, action, model, id)=>{
|
|
|
25
36
|
utils.contentTypes.constants.CREATED_BY_ATTRIBUTE,
|
|
26
37
|
'id'
|
|
27
38
|
]);
|
|
28
|
-
const author = creatorId ? await
|
|
39
|
+
const author = creatorId ? await strapiInstance.service('admin::user').findOne(creatorId, [
|
|
29
40
|
'roles'
|
|
30
41
|
]) : null;
|
|
31
42
|
const fileWithRoles = ___default.default.set(___default.default.cloneDeep(file), 'createdBy', author);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-entity-and-check-permissions.js","sources":["../../../../server/src/controllers/utils/find-entity-and-check-permissions.ts"],"sourcesContent":["import _ from 'lodash';\nimport { errors, contentTypes as contentTypesUtils } from '@strapi/utils';\nimport { getService } from '../../utils';\n\nconst findEntityAndCheckPermissions = async (\n ability: unknown,\n action: string,\n model: string,\n id: string | number\n) => {\n const file = await getService('upload').findOne(id, [\n contentTypesUtils.constants.CREATED_BY_ATTRIBUTE,\n 'folder',\n ]);\n\n if (_.isNil(file)) {\n throw new errors.NotFoundError();\n }\n\n const pm =
|
|
1
|
+
{"version":3,"file":"find-entity-and-check-permissions.js","sources":["../../../../server/src/controllers/utils/find-entity-and-check-permissions.ts"],"sourcesContent":["import _ from 'lodash';\nimport { errors, contentTypes as contentTypesUtils } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\nimport { getService } from '../../utils';\n\n/**\n * Loads a file and enforces the permission *conditions* attached to `action` on it.\n *\n * `createdBy` and the creator's `roles` have to be populated before `toSubject`: the admin\n * conditions read them (`admin::is-creator` matches `createdBy.id`, `admin::has-same-role-as-creator`\n * matches `createdBy.roles`), and a subject missing those fields can never satisfy the rule — so\n * a conditioned grant would be denied its own files rather than allowed them.\n *\n * `strapiInstance` defaults to the ambient global for the admin controllers, which have no\n * `strapi` in scope. Callers that are handed an instance — MCP tool handlers — pass it\n * explicitly so they never bind to a different one.\n */\nconst findEntityAndCheckPermissions = async (\n ability: unknown,\n action: string,\n model: string,\n id: string | number,\n strapiInstance: Core.Strapi = strapi\n) => {\n const file = await getService('upload', strapiInstance).findOne(id, [\n contentTypesUtils.constants.CREATED_BY_ATTRIBUTE,\n 'folder',\n ]);\n\n if (_.isNil(file)) {\n throw new errors.NotFoundError();\n }\n\n const pm = strapiInstance\n .service('admin::permission')\n .createPermissionsManager({ ability, action, model });\n\n const creatorId = _.get(file, [contentTypesUtils.constants.CREATED_BY_ATTRIBUTE, 'id']);\n const author = creatorId\n ? await strapiInstance.service('admin::user').findOne(creatorId, ['roles'])\n : null;\n\n const fileWithRoles = _.set(_.cloneDeep(file), 'createdBy', author);\n\n if (pm.ability.cannot(pm.action, pm.toSubject(fileWithRoles))) {\n throw new errors.ForbiddenError();\n }\n\n return { pm, file };\n};\n\nexport { findEntityAndCheckPermissions };\n"],"names":["findEntityAndCheckPermissions","ability","action","model","id","strapiInstance","strapi","file","getService","findOne","contentTypesUtils","constants","CREATED_BY_ATTRIBUTE","_","isNil","errors","NotFoundError","pm","service","createPermissionsManager","creatorId","get","author","fileWithRoles","set","cloneDeep","cannot","toSubject","ForbiddenError"],"mappings":";;;;;;;;;;AAKA;;;;;;;;;;;IAYA,MAAMA,gCAAgC,OACpCC,OAAAA,EACAC,QACAC,KAAAA,EACAC,EAAAA,EACAC,iBAA8BC,MAAM,GAAA;AAEpC,IAAA,MAAMC,OAAO,MAAMC,gBAAAA,CAAW,UAAUH,cAAAA,CAAAA,CAAgBI,OAAO,CAACL,EAAAA,EAAI;QAClEM,kBAAAA,CAAkBC,SAAS,CAACC,oBAAoB;AAChD,QAAA;AACD,KAAA,CAAA;IAED,IAAIC,kBAAAA,CAAEC,KAAK,CAACP,IAAAA,CAAAA,EAAO;QACjB,MAAM,IAAIQ,aAAOC,aAAa,EAAA;AAChC,IAAA;AAEA,IAAA,MAAMC,KAAKZ,cAAAA,CACRa,OAAO,CAAC,mBAAA,CAAA,CACRC,wBAAwB,CAAC;AAAElB,QAAAA,OAAAA;AAASC,QAAAA,MAAAA;AAAQC,QAAAA;AAAM,KAAA,CAAA;AAErD,IAAA,MAAMiB,SAAAA,GAAYP,kBAAAA,CAAEQ,GAAG,CAACd,IAAAA,EAAM;QAACG,kBAAAA,CAAkBC,SAAS,CAACC,oBAAoB;AAAE,QAAA;AAAK,KAAA,CAAA;IACtF,MAAMU,MAAAA,GAASF,YACX,MAAMf,cAAAA,CAAea,OAAO,CAAC,aAAA,CAAA,CAAeT,OAAO,CAACW,SAAAA,EAAW;AAAC,QAAA;KAAQ,CAAA,GACxE,IAAA;IAEJ,MAAMG,aAAAA,GAAgBV,mBAAEW,GAAG,CAACX,mBAAEY,SAAS,CAAClB,OAAO,WAAA,EAAae,MAAAA,CAAAA;IAE5D,IAAIL,EAAAA,CAAGhB,OAAO,CAACyB,MAAM,CAACT,EAAAA,CAAGf,MAAM,EAAEe,EAAAA,CAAGU,SAAS,CAACJ,aAAAA,CAAAA,CAAAA,EAAiB;QAC7D,MAAM,IAAIR,aAAOa,cAAc,EAAA;AACjC,IAAA;IAEA,OAAO;AAAEX,QAAAA,EAAAA;AAAIV,QAAAA;AAAK,KAAA;AACpB;;;;"}
|
|
@@ -2,15 +2,26 @@ import _ from 'lodash';
|
|
|
2
2
|
import { contentTypes, errors } from '@strapi/utils';
|
|
3
3
|
import { getService } from '../../utils/index.mjs';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Loads a file and enforces the permission *conditions* attached to `action` on it.
|
|
7
|
+
*
|
|
8
|
+
* `createdBy` and the creator's `roles` have to be populated before `toSubject`: the admin
|
|
9
|
+
* conditions read them (`admin::is-creator` matches `createdBy.id`, `admin::has-same-role-as-creator`
|
|
10
|
+
* matches `createdBy.roles`), and a subject missing those fields can never satisfy the rule — so
|
|
11
|
+
* a conditioned grant would be denied its own files rather than allowed them.
|
|
12
|
+
*
|
|
13
|
+
* `strapiInstance` defaults to the ambient global for the admin controllers, which have no
|
|
14
|
+
* `strapi` in scope. Callers that are handed an instance — MCP tool handlers — pass it
|
|
15
|
+
* explicitly so they never bind to a different one.
|
|
16
|
+
*/ const findEntityAndCheckPermissions = async (ability, action, model, id, strapiInstance = strapi)=>{
|
|
17
|
+
const file = await getService('upload', strapiInstance).findOne(id, [
|
|
7
18
|
contentTypes.constants.CREATED_BY_ATTRIBUTE,
|
|
8
19
|
'folder'
|
|
9
20
|
]);
|
|
10
21
|
if (_.isNil(file)) {
|
|
11
22
|
throw new errors.NotFoundError();
|
|
12
23
|
}
|
|
13
|
-
const pm =
|
|
24
|
+
const pm = strapiInstance.service('admin::permission').createPermissionsManager({
|
|
14
25
|
ability,
|
|
15
26
|
action,
|
|
16
27
|
model
|
|
@@ -19,7 +30,7 @@ const findEntityAndCheckPermissions = async (ability, action, model, id)=>{
|
|
|
19
30
|
contentTypes.constants.CREATED_BY_ATTRIBUTE,
|
|
20
31
|
'id'
|
|
21
32
|
]);
|
|
22
|
-
const author = creatorId ? await
|
|
33
|
+
const author = creatorId ? await strapiInstance.service('admin::user').findOne(creatorId, [
|
|
23
34
|
'roles'
|
|
24
35
|
]) : null;
|
|
25
36
|
const fileWithRoles = _.set(_.cloneDeep(file), 'createdBy', author);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-entity-and-check-permissions.mjs","sources":["../../../../server/src/controllers/utils/find-entity-and-check-permissions.ts"],"sourcesContent":["import _ from 'lodash';\nimport { errors, contentTypes as contentTypesUtils } from '@strapi/utils';\nimport { getService } from '../../utils';\n\nconst findEntityAndCheckPermissions = async (\n ability: unknown,\n action: string,\n model: string,\n id: string | number\n) => {\n const file = await getService('upload').findOne(id, [\n contentTypesUtils.constants.CREATED_BY_ATTRIBUTE,\n 'folder',\n ]);\n\n if (_.isNil(file)) {\n throw new errors.NotFoundError();\n }\n\n const pm =
|
|
1
|
+
{"version":3,"file":"find-entity-and-check-permissions.mjs","sources":["../../../../server/src/controllers/utils/find-entity-and-check-permissions.ts"],"sourcesContent":["import _ from 'lodash';\nimport { errors, contentTypes as contentTypesUtils } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\nimport { getService } from '../../utils';\n\n/**\n * Loads a file and enforces the permission *conditions* attached to `action` on it.\n *\n * `createdBy` and the creator's `roles` have to be populated before `toSubject`: the admin\n * conditions read them (`admin::is-creator` matches `createdBy.id`, `admin::has-same-role-as-creator`\n * matches `createdBy.roles`), and a subject missing those fields can never satisfy the rule — so\n * a conditioned grant would be denied its own files rather than allowed them.\n *\n * `strapiInstance` defaults to the ambient global for the admin controllers, which have no\n * `strapi` in scope. Callers that are handed an instance — MCP tool handlers — pass it\n * explicitly so they never bind to a different one.\n */\nconst findEntityAndCheckPermissions = async (\n ability: unknown,\n action: string,\n model: string,\n id: string | number,\n strapiInstance: Core.Strapi = strapi\n) => {\n const file = await getService('upload', strapiInstance).findOne(id, [\n contentTypesUtils.constants.CREATED_BY_ATTRIBUTE,\n 'folder',\n ]);\n\n if (_.isNil(file)) {\n throw new errors.NotFoundError();\n }\n\n const pm = strapiInstance\n .service('admin::permission')\n .createPermissionsManager({ ability, action, model });\n\n const creatorId = _.get(file, [contentTypesUtils.constants.CREATED_BY_ATTRIBUTE, 'id']);\n const author = creatorId\n ? await strapiInstance.service('admin::user').findOne(creatorId, ['roles'])\n : null;\n\n const fileWithRoles = _.set(_.cloneDeep(file), 'createdBy', author);\n\n if (pm.ability.cannot(pm.action, pm.toSubject(fileWithRoles))) {\n throw new errors.ForbiddenError();\n }\n\n return { pm, file };\n};\n\nexport { findEntityAndCheckPermissions };\n"],"names":["findEntityAndCheckPermissions","ability","action","model","id","strapiInstance","strapi","file","getService","findOne","contentTypesUtils","constants","CREATED_BY_ATTRIBUTE","_","isNil","errors","NotFoundError","pm","service","createPermissionsManager","creatorId","get","author","fileWithRoles","set","cloneDeep","cannot","toSubject","ForbiddenError"],"mappings":";;;;AAKA;;;;;;;;;;;IAYA,MAAMA,gCAAgC,OACpCC,OAAAA,EACAC,QACAC,KAAAA,EACAC,EAAAA,EACAC,iBAA8BC,MAAM,GAAA;AAEpC,IAAA,MAAMC,OAAO,MAAMC,UAAAA,CAAW,UAAUH,cAAAA,CAAAA,CAAgBI,OAAO,CAACL,EAAAA,EAAI;QAClEM,YAAAA,CAAkBC,SAAS,CAACC,oBAAoB;AAChD,QAAA;AACD,KAAA,CAAA;IAED,IAAIC,CAAAA,CAAEC,KAAK,CAACP,IAAAA,CAAAA,EAAO;QACjB,MAAM,IAAIQ,OAAOC,aAAa,EAAA;AAChC,IAAA;AAEA,IAAA,MAAMC,KAAKZ,cAAAA,CACRa,OAAO,CAAC,mBAAA,CAAA,CACRC,wBAAwB,CAAC;AAAElB,QAAAA,OAAAA;AAASC,QAAAA,MAAAA;AAAQC,QAAAA;AAAM,KAAA,CAAA;AAErD,IAAA,MAAMiB,SAAAA,GAAYP,CAAAA,CAAEQ,GAAG,CAACd,IAAAA,EAAM;QAACG,YAAAA,CAAkBC,SAAS,CAACC,oBAAoB;AAAE,QAAA;AAAK,KAAA,CAAA;IACtF,MAAMU,MAAAA,GAASF,YACX,MAAMf,cAAAA,CAAea,OAAO,CAAC,aAAA,CAAA,CAAeT,OAAO,CAACW,SAAAA,EAAW;AAAC,QAAA;KAAQ,CAAA,GACxE,IAAA;IAEJ,MAAMG,aAAAA,GAAgBV,EAAEW,GAAG,CAACX,EAAEY,SAAS,CAAClB,OAAO,WAAA,EAAae,MAAAA,CAAAA;IAE5D,IAAIL,EAAAA,CAAGhB,OAAO,CAACyB,MAAM,CAACT,EAAAA,CAAGf,MAAM,EAAEe,EAAAA,CAAGU,SAAS,CAACJ,aAAAA,CAAAA,CAAAA,EAAiB;QAC7D,MAAM,IAAIR,OAAOa,cAAc,EAAA;AACjC,IAAA;IAEA,OAAO;AAAEX,QAAAA,EAAAA;AAAIV,QAAAA;AAAK,KAAA;AACpB;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const isFolderOrChild = (folderOrChild, folder)=>folderOrChild.path === folder.path || folderOrChild.path.startsWith(`${folder.path}/`);
|
|
3
|
+
/** Only the materialized `path` is compared, so any row carrying one can be passed. */ const isFolderOrChild = (folderOrChild, folder)=>folderOrChild.path === folder.path || folderOrChild.path.startsWith(`${folder.path}/`);
|
|
4
4
|
|
|
5
5
|
exports.isFolderOrChild = isFolderOrChild;
|
|
6
6
|
//# sourceMappingURL=folders.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folders.js","sources":["../../../../server/src/controllers/utils/folders.ts"],"sourcesContent":["import { Folder } from '../../types';\n\nconst isFolderOrChild = (folderOrChild: Folder, folder: Folder) =>\n folderOrChild.path === folder.path || folderOrChild.path.startsWith(`${folder.path}/`);\n\nexport { isFolderOrChild };\n"],"names":["isFolderOrChild","folderOrChild","folder","path","startsWith"],"mappings":";;AAEA,
|
|
1
|
+
{"version":3,"file":"folders.js","sources":["../../../../server/src/controllers/utils/folders.ts"],"sourcesContent":["import { Folder } from '../../types';\n\n/** Only the materialized `path` is compared, so any row carrying one can be passed. */\nconst isFolderOrChild = (folderOrChild: Pick<Folder, 'path'>, folder: Pick<Folder, 'path'>) =>\n folderOrChild.path === folder.path || folderOrChild.path.startsWith(`${folder.path}/`);\n\nexport { isFolderOrChild };\n"],"names":["isFolderOrChild","folderOrChild","folder","path","startsWith"],"mappings":";;AAEA,8FACMA,eAAAA,GAAkB,CAACC,eAAqCC,MAAAA,GAC5DD,aAAAA,CAAcE,IAAI,KAAKD,MAAAA,CAAOC,IAAI,IAAIF,aAAAA,CAAcE,IAAI,CAACC,UAAU,CAAC,GAAGF,MAAAA,CAAOC,IAAI,CAAC,CAAC,CAAC;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const isFolderOrChild = (folderOrChild, folder)=>folderOrChild.path === folder.path || folderOrChild.path.startsWith(`${folder.path}/`);
|
|
1
|
+
/** Only the materialized `path` is compared, so any row carrying one can be passed. */ const isFolderOrChild = (folderOrChild, folder)=>folderOrChild.path === folder.path || folderOrChild.path.startsWith(`${folder.path}/`);
|
|
2
2
|
|
|
3
3
|
export { isFolderOrChild };
|
|
4
4
|
//# sourceMappingURL=folders.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folders.mjs","sources":["../../../../server/src/controllers/utils/folders.ts"],"sourcesContent":["import { Folder } from '../../types';\n\nconst isFolderOrChild = (folderOrChild: Folder, folder: Folder) =>\n folderOrChild.path === folder.path || folderOrChild.path.startsWith(`${folder.path}/`);\n\nexport { isFolderOrChild };\n"],"names":["isFolderOrChild","folderOrChild","folder","path","startsWith"],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"folders.mjs","sources":["../../../../server/src/controllers/utils/folders.ts"],"sourcesContent":["import { Folder } from '../../types';\n\n/** Only the materialized `path` is compared, so any row carrying one can be passed. */\nconst isFolderOrChild = (folderOrChild: Pick<Folder, 'path'>, folder: Pick<Folder, 'path'>) =>\n folderOrChild.path === folder.path || folderOrChild.path.startsWith(`${folder.path}/`);\n\nexport { isFolderOrChild };\n"],"names":["isFolderOrChild","folderOrChild","folder","path","startsWith"],"mappings":"AAEA,8FACMA,eAAAA,GAAkB,CAACC,eAAqCC,MAAAA,GAC5DD,aAAAA,CAAcE,IAAI,KAAKD,MAAAA,CAAOC,IAAI,IAAIF,aAAAA,CAAcE,IAAI,CAACC,UAAU,CAAC,GAAGF,MAAAA,CAAOC,IAAI,CAAC,CAAC,CAAC;;;;"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('../utils/index.js');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Asserts that an MCP handler's Strapi instance is the ambient `global.strapi`.
|
|
7
|
+
*
|
|
8
|
+
* Two of the upload plugin's services — `folder` and `file` — are registered as plain object
|
|
9
|
+
* literals rather than factories (see `services/index.ts`), so their methods close over the
|
|
10
|
+
* module-scope ambient `strapi` and query `global.strapi.db` regardless of which instance is
|
|
11
|
+
* passed to `getService`. Passing an instance therefore selects the right plugin registry but
|
|
12
|
+
* does *not* bind the queries to it.
|
|
13
|
+
*
|
|
14
|
+
* The folder tools reach `folder` directly. The asset write tools reach `file` transitively:
|
|
15
|
+
* `upload.updateFileInfo` resolves it with a bare `getService('file')` (`services/upload.ts`),
|
|
16
|
+
* and `file.getFolderPath` then queries the ambient `strapi.db`. So a handler that looks
|
|
17
|
+
* instance-bound can still mix ambient reads with instance-bound writes.
|
|
18
|
+
*
|
|
19
|
+
* Threading an instance through both services is a broader refactor than the MCP surface should
|
|
20
|
+
* carry: `create`, `update` and `deleteByIds` reach for `strapi.db`, `strapi.eventHub` and
|
|
21
|
+
* `strapi.getModel`, `update` runs a multi-statement transaction, and every admin controller and
|
|
22
|
+
* validator already depends on the ambient form.
|
|
23
|
+
*
|
|
24
|
+
* So the dependency is made explicit and asserted instead. Handlers call this in their factory
|
|
25
|
+
* body — at handler construction, not per call — so a mismatch fails while the tool is being
|
|
26
|
+
* registered rather than surfacing to an agent as tool output mid-conversation.
|
|
27
|
+
*
|
|
28
|
+
* A single-app server is unaffected: `createStrapi` assigns its instance to `global.strapi`, so
|
|
29
|
+
* the two agree. If they ever diverge — a second Strapi instance in one process — this throws
|
|
30
|
+
* rather than silently reading or writing the wrong app's media library.
|
|
31
|
+
*/ const assertAmbientInstance = (strapi)=>{
|
|
32
|
+
if (strapi !== global.strapi) {
|
|
33
|
+
throw new Error('The upload `folder` and `file` services are bound to the ambient `global.strapi`, but an ' + 'MCP handler was constructed with a different Strapi instance. Media queries would run ' + 'against the wrong app. Convert those services to factories before serving MCP from a ' + 'non-global instance.');
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Resolves the `folder` service for an MCP handler.
|
|
38
|
+
*
|
|
39
|
+
* A bare `getService('folder', strapi)` reads as instance-bound but is not — see
|
|
40
|
+
* `assertAmbientInstance` for why. Handlers assert the instance once at construction; this keeps
|
|
41
|
+
* the resolution behind a named helper so the call sites do not reintroduce the misleading form.
|
|
42
|
+
*/ const getFolderService = (strapi)=>index.getService('folder', strapi);
|
|
43
|
+
|
|
44
|
+
exports.assertAmbientInstance = assertAmbientInstance;
|
|
45
|
+
exports.getFolderService = getFolderService;
|
|
46
|
+
//# sourceMappingURL=ambient-instance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ambient-instance.js","sources":["../../../server/src/mcp/ambient-instance.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { getService } from '../utils';\n\n/**\n * Asserts that an MCP handler's Strapi instance is the ambient `global.strapi`.\n *\n * Two of the upload plugin's services — `folder` and `file` — are registered as plain object\n * literals rather than factories (see `services/index.ts`), so their methods close over the\n * module-scope ambient `strapi` and query `global.strapi.db` regardless of which instance is\n * passed to `getService`. Passing an instance therefore selects the right plugin registry but\n * does *not* bind the queries to it.\n *\n * The folder tools reach `folder` directly. The asset write tools reach `file` transitively:\n * `upload.updateFileInfo` resolves it with a bare `getService('file')` (`services/upload.ts`),\n * and `file.getFolderPath` then queries the ambient `strapi.db`. So a handler that looks\n * instance-bound can still mix ambient reads with instance-bound writes.\n *\n * Threading an instance through both services is a broader refactor than the MCP surface should\n * carry: `create`, `update` and `deleteByIds` reach for `strapi.db`, `strapi.eventHub` and\n * `strapi.getModel`, `update` runs a multi-statement transaction, and every admin controller and\n * validator already depends on the ambient form.\n *\n * So the dependency is made explicit and asserted instead. Handlers call this in their factory\n * body — at handler construction, not per call — so a mismatch fails while the tool is being\n * registered rather than surfacing to an agent as tool output mid-conversation.\n *\n * A single-app server is unaffected: `createStrapi` assigns its instance to `global.strapi`, so\n * the two agree. If they ever diverge — a second Strapi instance in one process — this throws\n * rather than silently reading or writing the wrong app's media library.\n */\nexport const assertAmbientInstance = (strapi: Core.Strapi) => {\n if (strapi !== global.strapi) {\n throw new Error(\n 'The upload `folder` and `file` services are bound to the ambient `global.strapi`, but an ' +\n 'MCP handler was constructed with a different Strapi instance. Media queries would run ' +\n 'against the wrong app. Convert those services to factories before serving MCP from a ' +\n 'non-global instance.'\n );\n }\n};\n\n/**\n * Resolves the `folder` service for an MCP handler.\n *\n * A bare `getService('folder', strapi)` reads as instance-bound but is not — see\n * `assertAmbientInstance` for why. Handlers assert the instance once at construction; this keeps\n * the resolution behind a named helper so the call sites do not reintroduce the misleading form.\n */\nexport const getFolderService = (strapi: Core.Strapi) => getService('folder', strapi);\n"],"names":["assertAmbientInstance","strapi","global","Error","getFolderService","getService"],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BO,MAAMA,qBAAAA,GAAwB,CAACC,MAAAA,GAAAA;IACpC,IAAIA,MAAAA,KAAWC,MAAAA,CAAOD,MAAM,EAAE;AAC5B,QAAA,MAAM,IAAIE,KAAAA,CACR,2FAAA,GACE,wFAAA,GACA,uFAAA,GACA,sBAAA,CAAA;AAEN,IAAA;AACF;AAEA;;;;;;AAMC,IACM,MAAMC,gBAAAA,GAAmB,CAACH,MAAAA,GAAwBI,gBAAAA,CAAW,UAAUJ,MAAAA;;;;;"}
|