@strapi/upload 5.12.0-beta.2 → 5.12.1
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/chunks/{App-C-ZWMV0u.js → App-G8sLZSN0.js} +3 -3
- package/dist/admin/chunks/{App-C-ZWMV0u.js.map → App-G8sLZSN0.js.map} +1 -1
- package/dist/admin/chunks/{App-D6Wqbw-i.mjs → App-h5xGw9X8.mjs} +3 -3
- package/dist/admin/chunks/{App-D6Wqbw-i.mjs.map → App-h5xGw9X8.mjs.map} +1 -1
- package/dist/admin/chunks/{ConfigureTheView-DDsM8Pdx.mjs → ConfigureTheView-CO72K73d.mjs} +2 -2
- package/dist/admin/chunks/{ConfigureTheView-DDsM8Pdx.mjs.map → ConfigureTheView-CO72K73d.mjs.map} +1 -1
- package/dist/admin/chunks/{ConfigureTheView-b2r1rWBv.js → ConfigureTheView-D9XLMDtA.js} +2 -2
- package/dist/admin/chunks/{ConfigureTheView-b2r1rWBv.js.map → ConfigureTheView-D9XLMDtA.js.map} +1 -1
- package/dist/admin/chunks/{SettingsPage-VZJJKYhG.js → SettingsPage-DcdF16oj.js} +2 -2
- package/dist/admin/chunks/{SettingsPage-VZJJKYhG.js.map → SettingsPage-DcdF16oj.js.map} +1 -1
- package/dist/admin/chunks/{SettingsPage-Dan7DVEg.mjs → SettingsPage-kY2dZHnP.mjs} +2 -2
- package/dist/admin/chunks/{SettingsPage-Dan7DVEg.mjs.map → SettingsPage-kY2dZHnP.mjs.map} +1 -1
- package/dist/admin/chunks/{index-BZKDHTKT.mjs → index-BUqiOq3Y.mjs} +8 -8
- package/dist/admin/chunks/{index-BZKDHTKT.mjs.map → index-BUqiOq3Y.mjs.map} +1 -1
- package/dist/admin/chunks/{index-B_AkTn0l.js → index-DDQjAhM2.js} +8 -8
- package/dist/admin/chunks/{index-B_AkTn0l.js.map → index-DDQjAhM2.js.map} +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/server/chunks/{graphql-BTbIs_EU.js → graphql-CwNPX8zo.js} +2 -2
- package/dist/server/chunks/{graphql-BTbIs_EU.js.map → graphql-CwNPX8zo.js.map} +1 -1
- package/dist/server/chunks/{graphql-CCPJbCFt.mjs → graphql-K9HaGS9d.mjs} +2 -2
- package/dist/server/chunks/{graphql-CCPJbCFt.mjs.map → graphql-K9HaGS9d.mjs.map} +1 -1
- package/dist/server/chunks/{index-BU4qzb-i.mjs → index-BzVus140.mjs} +3 -3
- package/dist/server/chunks/index-BzVus140.mjs.map +1 -0
- package/dist/server/chunks/{index-BkUy20d9.js → index-D2QOphAI.js} +3 -3
- package/dist/server/chunks/index-D2QOphAI.js.map +1 -0
- package/dist/server/index.js +1 -1
- package/dist/server/index.mjs +1 -1
- package/package.json +5 -5
- package/dist/server/chunks/index-BU4qzb-i.mjs.map +0 -1
- package/dist/server/chunks/index-BkUy20d9.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-D2QOphAI.js","sources":["../../../server/src/middlewares/upload.ts","../../../server/src/register.ts","../../../server/src/utils/index.ts","../../../server/src/constants.ts","../../../server/src/bootstrap.ts","../../../server/src/content-types/file.ts","../../../server/src/content-types/folder.ts","../../../server/src/content-types/index.ts","../../../server/src/services/provider.ts","../../../server/src/services/upload.ts","../../../server/src/services/image-manipulation.ts","../../../server/src/services/folder.ts","../../../server/src/services/file.ts","../../../server/src/utils/cron.ts","../../../server/src/services/weekly-metrics.ts","../../../server/src/services/metrics.ts","../../../server/src/services/api-upload-folder.ts","../../../server/src/services/extensions/utils.ts","../../../server/src/services/extensions/index.ts","../../../server/src/services/index.ts","../../../server/src/routes/admin.ts","../../../server/src/routes/content-api.ts","../../../server/src/routes/view-configuration.ts","../../../server/src/routes/index.ts","../../../server/src/config.ts","../../../server/src/controllers/utils/find-entity-and-check-permissions.ts","../../../server/src/controllers/admin-file.ts","../../../server/src/controllers/validation/admin/utils.ts","../../../server/src/controllers/utils/folders.ts","../../../server/src/controllers/validation/admin/folder.ts","../../../server/src/controllers/admin-folder.ts","../../../server/src/controllers/validation/admin/folder-file.ts","../../../server/src/controllers/admin-folder-file.ts","../../../server/src/controllers/validation/admin/settings.ts","../../../server/src/controllers/admin-settings.ts","../../../server/src/controllers/validation/admin/upload.ts","../../../server/src/controllers/admin-upload.ts","../../../server/src/controllers/validation/content-api/upload.ts","../../../server/src/controllers/content-api.ts","../../../server/src/controllers/validation/admin/configureView.ts","../../../server/src/controllers/view-configuration.ts","../../../server/src/controllers/index.ts","../../../server/src/index.ts"],"sourcesContent":["import range from 'koa-range';\nimport koaStatic from 'koa-static';\n\nimport type { Core } from '@strapi/types';\n\n/**\n * Programmatic upload middleware. We do not want to expose it in the plugin\n */\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n strapi.server.app.on('error', (err) => {\n if (err.code === 'EPIPE') {\n // when serving audio or video the browsers sometimes close the connection to go to range requests instead.\n // This causes koa to emit a write EPIPE error. We can ignore it.\n // Right now this ignores it globally and we cannot do much more because it is how koa handles it.\n return;\n }\n\n strapi.server.app.onerror(err);\n });\n\n const localServerConfig = strapi.config.get('plugin::upload.providerOptions.localServer', {});\n\n strapi.server.routes([\n {\n method: 'GET',\n path: '/uploads/(.*)',\n handler: [range, koaStatic(strapi.dirs.static.public, { defer: true, ...localServerConfig })],\n config: { auth: false },\n },\n ]);\n};\n","import _ from 'lodash';\n\nimport { errors, file } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport registerUploadMiddleware from './middlewares/upload';\nimport spec from '../../documentation/content-api.json';\nimport type { Config, File, InputFile } from './types';\n\nconst { PayloadTooLargeError } = errors;\nconst { bytesToHumanReadable, kbytesToBytes } = file;\n\n/**\n * Register upload plugin\n */\nexport async function register({ strapi }: { strapi: Core.Strapi }) {\n strapi.plugin('upload').provider = createProvider(strapi.config.get<Config>('plugin::upload'));\n\n await registerUploadMiddleware({ strapi });\n\n if (strapi.plugin('graphql')) {\n const { installGraphqlExtension } = await import('./graphql.js');\n installGraphqlExtension({ strapi });\n }\n\n if (strapi.plugin('documentation')) {\n strapi\n .plugin('documentation')\n .service('override')\n .registerOverride(spec, {\n pluginOrigin: 'upload',\n excludeFromGeneration: ['upload'],\n });\n }\n}\n\nconst createProvider = (config: Config) => {\n const { providerOptions, actionOptions = {} } = config;\n\n const providerName = _.toLower(config.provider);\n let provider;\n\n let modulePath;\n try {\n modulePath = require.resolve(`@strapi/provider-upload-${providerName}`);\n } catch (error) {\n if (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n error.code === 'MODULE_NOT_FOUND'\n ) {\n modulePath = providerName;\n } else {\n throw error;\n }\n }\n\n try {\n provider = require(modulePath);\n } catch (err) {\n const newError = new Error(`Could not load upload provider \"${providerName}\".`);\n\n if (err instanceof Error) {\n newError.stack = err.stack;\n }\n\n throw newError;\n }\n\n const providerInstance = provider.init(providerOptions);\n\n if (!providerInstance.delete) {\n throw new Error(`The upload provider \"${providerName}\" doesn't implement the delete method.`);\n }\n\n if (!providerInstance.upload && !providerInstance.uploadStream) {\n throw new Error(\n `The upload provider \"${providerName}\" doesn't implement the uploadStream nor the upload method.`\n );\n }\n\n if (!providerInstance.uploadStream) {\n process.emitWarning(\n `The upload provider \"${providerName}\" doesn't implement the uploadStream function. Strapi will fallback on the upload method. Some performance issues may occur.`\n );\n }\n\n const wrappedProvider = _.mapValues(providerInstance, (method, methodName) => {\n return async (file: File, options = actionOptions[methodName]) =>\n providerInstance[methodName](file, options);\n });\n\n return Object.assign(Object.create(baseProvider), wrappedProvider);\n};\n\nconst baseProvider = {\n extend(obj: unknown) {\n Object.assign(this, obj);\n },\n checkFileSize(file: InputFile, { sizeLimit }: { sizeLimit: number }) {\n if (sizeLimit && kbytesToBytes(file.size) > sizeLimit) {\n throw new PayloadTooLargeError(\n `${file.originalFilename} exceeds size limit of ${bytesToHumanReadable(sizeLimit)}.`\n );\n }\n },\n getSignedUrl(file: File) {\n return file;\n },\n isPrivate() {\n return false;\n },\n};\n","import type upload from '../services/upload';\nimport type imageManipulation from '../services/image-manipulation';\nimport type apiUploadFolder from '../services/api-upload-folder';\nimport type provider from '../services/provider';\nimport type folder from '../services/folder';\nimport type file from '../services/file';\nimport type weeklyMetrics from '../services/weekly-metrics';\nimport type metrics from '../services/metrics';\nimport type extensions from '../services/extensions';\n\ntype Services = {\n upload: ReturnType<typeof upload>;\n 'image-manipulation': typeof imageManipulation;\n provider: ReturnType<typeof provider>;\n folder: typeof folder;\n file: typeof file;\n weeklyMetrics: ReturnType<typeof weeklyMetrics>;\n metrics: ReturnType<typeof metrics>;\n 'api-upload-folder': typeof apiUploadFolder;\n extensions: typeof extensions;\n};\n\nexport const getService = <TName extends keyof Services>(name: TName): Services[TName] => {\n return strapi.plugin('upload').service<Services[TName]>(name);\n};\n","const ACTIONS = {\n read: 'plugin::upload.read',\n readSettings: 'plugin::upload.settings.read',\n create: 'plugin::upload.assets.create',\n update: 'plugin::upload.assets.update',\n download: 'plugin::upload.assets.download',\n copyLink: 'plugin::upload.assets.copy-link',\n configureView: 'plugin::upload.configure-view',\n};\n\nconst ALLOWED_SORT_STRINGS = [\n 'createdAt:DESC',\n 'createdAt:ASC',\n 'name:ASC',\n 'name:DESC',\n 'updatedAt:DESC',\n 'updatedAt:ASC',\n];\n\nconst ALLOWED_WEBHOOK_EVENTS = {\n MEDIA_CREATE: 'media.create',\n MEDIA_UPDATE: 'media.update',\n MEDIA_DELETE: 'media.delete',\n};\n\nconst FOLDER_MODEL_UID = 'plugin::upload.folder';\nconst FILE_MODEL_UID = 'plugin::upload.file';\nconst API_UPLOAD_FOLDER_BASE_NAME = 'API Uploads';\n\nexport {\n ACTIONS,\n FOLDER_MODEL_UID,\n FILE_MODEL_UID,\n API_UPLOAD_FOLDER_BASE_NAME,\n ALLOWED_SORT_STRINGS,\n ALLOWED_WEBHOOK_EVENTS,\n};\n","import type { Core } from '@strapi/types';\n\nimport { getService } from './utils';\nimport { ALLOWED_SORT_STRINGS, ALLOWED_WEBHOOK_EVENTS } from './constants';\n\nexport async function bootstrap({ strapi }: { strapi: Core.Strapi }) {\n const defaultConfig = {\n settings: {\n sizeOptimization: true,\n responsiveDimensions: true,\n autoOrientation: false,\n },\n view_configuration: {\n pageSize: 10,\n sort: ALLOWED_SORT_STRINGS[0],\n },\n };\n\n for (const [key, defaultValue] of Object.entries(defaultConfig)) {\n // set plugin store\n const configurator = strapi.store!({ type: 'plugin', name: 'upload', key });\n\n const config = await configurator.get({});\n if (\n config &&\n Object.keys(defaultValue).every((key) => Object.prototype.hasOwnProperty.call(config, key))\n ) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // if the config does not exist or does not have all the required keys\n // set from the defaultValue ensuring all required settings are present\n await configurator.set({\n value: Object.assign(defaultValue, config || {}),\n });\n }\n\n await registerPermissionActions();\n await registerWebhookEvents();\n\n await getService('weeklyMetrics').registerCron();\n getService('metrics').sendUploadPluginMetrics();\n\n getService('extensions').signFileUrlsOnDocumentService();\n}\n\nconst registerWebhookEvents = async () =>\n Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {\n strapi.get('webhookStore').addAllowedEvent(key, value);\n });\n\nconst registerPermissionActions = async () => {\n const actions = [\n {\n section: 'plugins',\n displayName: 'Access the Media Library',\n uid: 'read',\n pluginName: 'upload',\n },\n {\n section: 'plugins',\n displayName: 'Create (upload)',\n uid: 'assets.create',\n subCategory: 'assets',\n pluginName: 'upload',\n },\n {\n section: 'plugins',\n displayName: 'Update (crop, details, replace) + delete',\n uid: 'assets.update',\n subCategory: 'assets',\n pluginName: 'upload',\n },\n {\n section: 'plugins',\n displayName: 'Download',\n uid: 'assets.download',\n subCategory: 'assets',\n pluginName: 'upload',\n },\n {\n section: 'plugins',\n displayName: 'Copy link',\n uid: 'assets.copy-link',\n subCategory: 'assets',\n pluginName: 'upload',\n },\n {\n section: 'plugins',\n displayName: 'Configure view',\n uid: 'configure-view',\n pluginName: 'upload',\n },\n {\n section: 'settings',\n displayName: 'Access the Media Library settings page',\n uid: 'settings.read',\n category: 'media library',\n pluginName: 'upload',\n },\n ];\n\n await strapi.service('admin::permission').actionProvider.registerMany(actions);\n};\n","import type { Struct } from '@strapi/types';\n\nimport { FOLDER_MODEL_UID } from '../constants';\n\nexport default {\n schema: {\n collectionName: 'files',\n info: {\n singularName: 'file',\n pluralName: 'files',\n displayName: 'File',\n description: '',\n },\n options: {},\n pluginOptions: {\n 'content-manager': {\n visible: false,\n },\n 'content-type-builder': {\n visible: false,\n },\n },\n attributes: {\n name: {\n type: 'string',\n configurable: false,\n required: true,\n },\n alternativeText: {\n type: 'string',\n configurable: false,\n },\n caption: {\n type: 'string',\n configurable: false,\n },\n width: {\n type: 'integer',\n configurable: false,\n },\n height: {\n type: 'integer',\n configurable: false,\n },\n formats: {\n type: 'json',\n configurable: false,\n },\n hash: {\n type: 'string',\n configurable: false,\n required: true,\n },\n ext: {\n type: 'string',\n configurable: false,\n },\n mime: {\n type: 'string',\n configurable: false,\n required: true,\n },\n size: {\n type: 'decimal',\n configurable: false,\n required: true,\n },\n url: {\n type: 'string',\n configurable: false,\n required: true,\n },\n previewUrl: {\n type: 'string',\n configurable: false,\n },\n provider: {\n type: 'string',\n configurable: false,\n required: true,\n },\n provider_metadata: {\n type: 'json',\n configurable: false,\n },\n related: {\n type: 'relation',\n relation: 'morphToMany',\n configurable: false,\n },\n folder: {\n type: 'relation',\n relation: 'manyToOne',\n target: FOLDER_MODEL_UID,\n inversedBy: 'files',\n private: true,\n },\n folderPath: {\n type: 'string',\n minLength: 1,\n required: true,\n private: true,\n searchable: false,\n },\n },\n // experimental feature:\n indexes: [\n {\n name: 'upload_files_folder_path_index',\n columns: ['folder_path'],\n type: null,\n },\n {\n name: `upload_files_created_at_index`,\n columns: ['created_at'],\n type: null,\n },\n {\n name: `upload_files_updated_at_index`,\n columns: ['updated_at'],\n type: null,\n },\n {\n name: `upload_files_name_index`,\n columns: ['name'],\n type: null,\n },\n {\n name: `upload_files_size_index`,\n columns: ['size'],\n type: null,\n },\n {\n name: `upload_files_ext_index`,\n columns: ['ext'],\n type: null,\n },\n ],\n } satisfies Partial<Struct.CollectionTypeSchema>,\n};\n","import type { Struct } from '@strapi/types';\n\nimport { FOLDER_MODEL_UID, FILE_MODEL_UID } from '../constants';\n\nexport default {\n schema: {\n collectionName: 'upload_folders',\n info: {\n singularName: 'folder',\n pluralName: 'folders',\n displayName: 'Folder',\n },\n options: {},\n pluginOptions: {\n 'content-manager': {\n visible: false,\n },\n 'content-type-builder': {\n visible: false,\n },\n },\n attributes: {\n name: {\n type: 'string',\n minLength: 1,\n required: true,\n },\n pathId: {\n type: 'integer',\n unique: true,\n required: true,\n },\n parent: {\n type: 'relation',\n relation: 'manyToOne',\n target: FOLDER_MODEL_UID,\n inversedBy: 'children',\n },\n children: {\n type: 'relation',\n relation: 'oneToMany',\n target: FOLDER_MODEL_UID,\n mappedBy: 'parent',\n },\n files: {\n type: 'relation',\n relation: 'oneToMany',\n target: FILE_MODEL_UID,\n mappedBy: 'folder',\n },\n path: {\n type: 'string',\n minLength: 1,\n required: true,\n },\n },\n // experimental feature:\n indexes: [\n {\n name: 'upload_folders_path_id_index',\n columns: ['path_id'],\n type: 'unique',\n },\n {\n name: 'upload_folders_path_index',\n columns: ['path'],\n type: 'unique',\n },\n ],\n } satisfies Partial<Struct.CollectionTypeSchema>,\n};\n","import file from './file';\nimport folder from './folder';\n\nexport const contentTypes = {\n file,\n folder,\n};\n","import { isFunction } from 'lodash/fp';\nimport { file as fileUtils } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport { Config, UploadableFile } from '../types';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n async checkFileSize(file: UploadableFile) {\n const { sizeLimit } = strapi.config.get<Config>('plugin::upload');\n await strapi.plugin('upload').provider.checkFileSize(file, { sizeLimit });\n },\n\n async upload(file: UploadableFile) {\n if (isFunction(strapi.plugin('upload').provider.uploadStream)) {\n file.stream = file.getStream();\n await strapi.plugin('upload').provider.uploadStream(file);\n\n delete file.stream;\n\n if ('filepath' in file) {\n delete file.filepath;\n }\n } else {\n file.buffer = await fileUtils.streamToBuffer(file.getStream());\n await strapi.plugin('upload').provider.upload(file);\n\n delete file.buffer;\n\n if ('filepath' in file) {\n delete file.filepath;\n }\n }\n },\n});\n","import os from 'os';\nimport path from 'path';\nimport crypto from 'crypto';\nimport fs from 'fs';\nimport fse from 'fs-extra';\nimport _ from 'lodash';\nimport { extension } from 'mime-types';\nimport {\n sanitize,\n strings,\n contentTypes as contentTypesUtils,\n errors,\n file as fileUtils,\n} from '@strapi/utils';\n\nimport type { Core, UID } from '@strapi/types';\n\nimport { FILE_MODEL_UID, ALLOWED_WEBHOOK_EVENTS } from '../constants';\nimport { getService } from '../utils';\n\nimport type { Config, File, InputFile, UploadableFile, FileInfo } from '../types';\nimport type { ViewConfiguration } from '../controllers/validation/admin/configureView';\nimport type { Settings } from '../controllers/validation/admin/settings';\n\ntype User = {\n id: string | number;\n};\n\ntype ID = string | number;\n\ntype CommonOptions = {\n user?: User;\n};\n\ntype Metas = {\n refId?: ID;\n ref?: string;\n field?: string;\n path?: string;\n tmpWorkingDirectory?: string;\n};\n\nconst { UPDATED_BY_ATTRIBUTE, CREATED_BY_ATTRIBUTE } = contentTypesUtils.constants;\nconst { MEDIA_CREATE, MEDIA_UPDATE, MEDIA_DELETE } = ALLOWED_WEBHOOK_EVENTS;\n\nconst { ApplicationError, NotFoundError } = errors;\nconst { bytesToKbytes } = fileUtils;\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const randomSuffix = () => crypto.randomBytes(5).toString('hex');\n\n const generateFileName = (name: string) => {\n const baseName = strings.nameToSlug(name, { separator: '_', lowercase: false });\n\n return `${baseName}_${randomSuffix()}`;\n };\n\n const sendMediaMetrics = (data: Pick<File, 'caption' | 'alternativeText'>) => {\n if (_.has(data, 'caption') && !_.isEmpty(data.caption)) {\n strapi.telemetry.send('didSaveMediaWithCaption');\n }\n\n if (_.has(data, 'alternativeText') && !_.isEmpty(data.alternativeText)) {\n strapi.telemetry.send('didSaveMediaWithAlternativeText');\n }\n };\n\n const createAndAssignTmpWorkingDirectoryToFiles = async (\n files: InputFile | InputFile[]\n ): Promise<string> => {\n const tmpWorkingDirectory = await fse.mkdtemp(path.join(os.tmpdir(), 'strapi-upload-'));\n\n if (Array.isArray(files)) {\n files.forEach((file) => {\n file.tmpWorkingDirectory = tmpWorkingDirectory;\n });\n } else {\n files.tmpWorkingDirectory = tmpWorkingDirectory;\n }\n\n return tmpWorkingDirectory;\n };\n\n function filenameReservedRegex() {\n // eslint-disable-next-line no-control-regex\n return /[<>:\"/\\\\|?*\\u0000-\\u001F]/g;\n }\n\n function windowsReservedNameRegex() {\n return /^(con|prn|aux|nul|com\\d|lpt\\d)$/i;\n }\n\n /**\n * Copied from https://github.com/sindresorhus/valid-filename package\n */\n function isValidFilename(string: string) {\n if (!string || string.length > 255) {\n return false;\n }\n if (filenameReservedRegex().test(string) || windowsReservedNameRegex().test(string)) {\n return false;\n }\n if (string === '.' || string === '..') {\n return false;\n }\n return true;\n }\n\n async function emitEvent(event: string, data: Record<string, any>) {\n const modelDef = strapi.getModel(FILE_MODEL_UID);\n const sanitizedData = await sanitize.sanitizers.defaultSanitizeOutput(\n {\n schema: modelDef,\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n },\n data\n );\n\n strapi.eventHub.emit(event, { media: sanitizedData });\n }\n\n async function formatFileInfo(\n { filename, type, size }: { filename: string; type: string; size: number },\n fileInfo: Partial<FileInfo> = {},\n metas: {\n refId?: ID;\n ref?: string;\n field?: string;\n path?: string;\n tmpWorkingDirectory?: string;\n } = {}\n ): Promise<Omit<UploadableFile, 'getStream'>> {\n const fileService = getService('file');\n\n if (!isValidFilename(filename)) {\n throw new ApplicationError('File name contains invalid characters');\n }\n\n let ext = path.extname(filename);\n if (!ext) {\n ext = `.${extension(type)}`;\n }\n const usedName = (fileInfo.name || filename).normalize();\n const basename = path.basename(usedName, ext);\n\n // Prevent null characters in file name\n if (!isValidFilename(filename)) {\n throw new ApplicationError('File name contains invalid characters');\n }\n\n const entity: Omit<UploadableFile, 'getStream'> = {\n name: usedName,\n alternativeText: fileInfo.alternativeText,\n caption: fileInfo.caption,\n folder: fileInfo.folder,\n folderPath: await fileService.getFolderPath(fileInfo.folder),\n hash: generateFileName(basename),\n ext,\n mime: type,\n size: bytesToKbytes(size),\n sizeInBytes: size,\n };\n\n const { refId, ref, field } = metas;\n\n if (refId && ref && field) {\n entity.related = [\n {\n id: refId,\n __type: ref,\n __pivot: { field },\n },\n ];\n }\n\n if (metas.path) {\n entity.path = metas.path;\n }\n\n if (metas.tmpWorkingDirectory) {\n entity.tmpWorkingDirectory = metas.tmpWorkingDirectory;\n }\n\n return entity;\n }\n\n async function enhanceAndValidateFile(\n file: InputFile,\n fileInfo: FileInfo,\n metas?: Metas\n ): Promise<UploadableFile> {\n const currentFile = (await formatFileInfo(\n {\n filename: file.originalFilename ?? 'unamed',\n type: file.mimetype ?? 'application/octet-stream',\n size: file.size,\n },\n fileInfo,\n {\n ...metas,\n tmpWorkingDirectory: file.tmpWorkingDirectory,\n }\n )) as UploadableFile;\n\n currentFile.filepath = file.filepath;\n currentFile.getStream = () => fs.createReadStream(file.filepath);\n\n const { optimize, isImage, isFaultyImage, isOptimizableImage } = strapi\n .plugin('upload')\n .service('image-manipulation');\n\n if (await isImage(currentFile)) {\n if (await isFaultyImage(currentFile)) {\n throw new ApplicationError('File is not a valid image');\n }\n if (await isOptimizableImage(currentFile)) {\n return optimize(currentFile);\n }\n }\n\n return currentFile;\n }\n\n async function upload(\n {\n data,\n files,\n }: {\n data: Record<string, unknown>;\n files: InputFile | InputFile[];\n },\n opts?: CommonOptions\n ) {\n const { user } = opts ?? {};\n // create temporary folder to store files for stream manipulation\n const tmpWorkingDirectory = await createAndAssignTmpWorkingDirectoryToFiles(files);\n\n let uploadedFiles: any[] = [];\n\n try {\n const { fileInfo, ...metas } = data;\n\n const fileArray = Array.isArray(files) ? files : [files];\n const fileInfoArray = Array.isArray(fileInfo) ? fileInfo : [fileInfo];\n\n const doUpload = async (file: InputFile, fileInfo: FileInfo) => {\n const fileData = await enhanceAndValidateFile(file, fileInfo, metas);\n return uploadFileAndPersist(fileData, { user });\n };\n\n uploadedFiles = await Promise.all(\n fileArray.map((file, idx) => doUpload(file, fileInfoArray[idx] || {}))\n );\n } finally {\n // delete temporary folder\n await fse.remove(tmpWorkingDirectory);\n }\n\n return uploadedFiles;\n }\n\n /**\n * When uploading an image, an additional thumbnail is generated.\n * Also, if there are responsive formats defined, another set of images will be generated too.\n *\n * @param {*} fileData\n */\n async function uploadImage(fileData: UploadableFile) {\n const { getDimensions, generateThumbnail, generateResponsiveFormats, isResizableImage } =\n getService('image-manipulation');\n\n // Store width and height of the original image\n const { width, height } = await getDimensions(fileData);\n\n // Make sure this is assigned before calling any upload\n // That way it can mutate the width and height\n _.assign(fileData, {\n width,\n height,\n });\n\n // For performance reasons, all uploads are wrapped in a single Promise.all\n const uploadThumbnail = async (thumbnailFile: UploadableFile) => {\n await getService('provider').upload(thumbnailFile);\n _.set(fileData, 'formats.thumbnail', thumbnailFile);\n };\n\n // Generate thumbnail and responsive formats\n const uploadResponsiveFormat = async (format: { key: string; file: UploadableFile }) => {\n const { key, file } = format;\n await getService('provider').upload(file);\n _.set(fileData, ['formats', key], file);\n };\n\n const uploadPromises: Promise<void>[] = [];\n\n // Upload image\n uploadPromises.push(getService('provider').upload(fileData));\n\n // Generate & Upload thumbnail and responsive formats\n if (await isResizableImage(fileData)) {\n const thumbnailFile = await generateThumbnail(fileData);\n if (thumbnailFile) {\n uploadPromises.push(uploadThumbnail(thumbnailFile));\n }\n\n const formats = await generateResponsiveFormats(fileData);\n if (Array.isArray(formats) && formats.length > 0) {\n for (const format of formats) {\n // eslint-disable-next-line no-continue\n if (!format) continue;\n uploadPromises.push(uploadResponsiveFormat(format));\n }\n }\n }\n // Wait for all uploads to finish\n await Promise.all(uploadPromises);\n }\n\n /**\n * Upload a file. If it is an image it will generate a thumbnail\n * and responsive formats (if enabled).\n */\n async function uploadFileAndPersist(fileData: UploadableFile, opts?: CommonOptions) {\n const { user } = opts ?? {};\n\n const config = strapi.config.get<Config>('plugin::upload');\n const { isImage } = getService('image-manipulation');\n\n await getService('provider').checkFileSize(fileData);\n\n if (await isImage(fileData)) {\n await uploadImage(fileData);\n } else {\n await getService('provider').upload(fileData);\n }\n\n _.set(fileData, 'provider', config.provider);\n\n // Persist file(s)\n return add(fileData, { user });\n }\n\n async function updateFileInfo(\n id: ID,\n { name, alternativeText, caption, folder }: FileInfo,\n opts?: CommonOptions\n ) {\n const { user } = opts ?? {};\n\n const dbFile = await findOne(id);\n\n if (!dbFile) {\n throw new NotFoundError();\n }\n\n const fileService = getService('file');\n\n const newName = _.isNil(name) ? dbFile.name : name;\n const newInfos = {\n name: newName,\n alternativeText: _.isNil(alternativeText) ? dbFile.alternativeText : alternativeText,\n caption: _.isNil(caption) ? dbFile.caption : caption,\n folder: _.isUndefined(folder) ? dbFile.folder : folder,\n folderPath: _.isUndefined(folder) ? dbFile.path : await fileService.getFolderPath(folder),\n };\n\n return update(id, newInfos, { user });\n }\n\n async function replace(\n id: ID,\n { data, file }: { data: { fileInfo: FileInfo }; file: InputFile },\n opts?: CommonOptions\n ) {\n const { user } = opts ?? {};\n\n const config = strapi.config.get<Config>('plugin::upload');\n\n const { isImage } = getService('image-manipulation');\n\n const dbFile = await findOne(id);\n if (!dbFile) {\n throw new NotFoundError();\n }\n\n // create temporary folder to store files for stream manipulation\n const tmpWorkingDirectory = await createAndAssignTmpWorkingDirectoryToFiles(file);\n\n let fileData: UploadableFile;\n\n try {\n const { fileInfo } = data;\n fileData = await enhanceAndValidateFile(file, fileInfo);\n\n // keep a constant hash and extension so the file url doesn't change when the file is replaced\n _.assign(fileData, {\n hash: dbFile.hash,\n ext: dbFile.ext,\n });\n\n // execute delete function of the provider\n if (dbFile.provider === config.provider) {\n await strapi.plugin('upload').provider.delete(dbFile);\n\n if (dbFile.formats) {\n await Promise.all(\n Object.keys(dbFile.formats).map((key) => {\n return strapi.plugin('upload').provider.delete(dbFile.formats[key]);\n })\n );\n }\n }\n\n // clear old formats\n _.set(fileData, 'formats', {});\n\n if (await isImage(fileData)) {\n await uploadImage(fileData);\n } else {\n await getService('provider').upload(fileData);\n }\n\n _.set(fileData, 'provider', config.provider);\n } finally {\n // delete temporary folder\n await fse.remove(tmpWorkingDirectory);\n }\n\n return update(id, fileData, { user });\n }\n\n async function update(id: ID, values: Partial<File>, opts?: CommonOptions) {\n const { user } = opts ?? {};\n\n const fileValues = { ...values };\n if (user) {\n Object.assign(fileValues, {\n [UPDATED_BY_ATTRIBUTE]: user.id,\n });\n }\n\n sendMediaMetrics(fileValues);\n\n const res = await strapi.db.query(FILE_MODEL_UID).update({ where: { id }, data: fileValues });\n\n await emitEvent(MEDIA_UPDATE, res);\n\n return res;\n }\n\n async function add(values: any, opts?: CommonOptions) {\n const { user } = opts ?? {};\n\n const fileValues = { ...values };\n if (user) {\n Object.assign(fileValues, {\n [UPDATED_BY_ATTRIBUTE]: user.id,\n [CREATED_BY_ATTRIBUTE]: user.id,\n });\n }\n\n sendMediaMetrics(fileValues);\n\n const res = await strapi.db.query(FILE_MODEL_UID).create({ data: fileValues });\n\n await emitEvent(MEDIA_CREATE, res);\n\n return res;\n }\n\n function findOne(id: ID, populate = {}) {\n const query = strapi.get('query-params').transform(FILE_MODEL_UID, {\n populate,\n });\n\n return strapi.db.query(FILE_MODEL_UID).findOne({\n where: { id },\n ...query,\n });\n }\n\n function findMany(query: any = {}): Promise<File[]> {\n return strapi.db\n .query(FILE_MODEL_UID)\n .findMany(strapi.get('query-params').transform(FILE_MODEL_UID, query));\n }\n\n function findPage(query: any = {}) {\n return strapi.db\n .query(FILE_MODEL_UID)\n .findPage(strapi.get('query-params').transform(FILE_MODEL_UID, query));\n }\n\n async function remove(file: File) {\n const config = strapi.config.get<Config>('plugin::upload');\n\n // execute delete function of the provider\n if (file.provider === config.provider) {\n await strapi.plugin('upload').provider.delete(file);\n\n if (file.formats) {\n const keys = Object.keys(file.formats);\n\n await Promise.all(\n keys.map((key) => {\n return strapi.plugin('upload').provider.delete(file.formats![key]);\n })\n );\n }\n }\n\n const media = await strapi.db.query(FILE_MODEL_UID).findOne({\n where: { id: file.id },\n });\n\n await emitEvent(MEDIA_DELETE, media);\n\n return strapi.db.query(FILE_MODEL_UID).delete({ where: { id: file.id } });\n }\n\n async function getSettings() {\n const res = await strapi.store!({ type: 'plugin', name: 'upload', key: 'settings' }).get({});\n\n return res as Settings | null;\n }\n\n function setSettings(value: Settings) {\n if (value.responsiveDimensions === true) {\n strapi.telemetry.send('didEnableResponsiveDimensions');\n } else {\n strapi.telemetry.send('didDisableResponsiveDimensions');\n }\n\n return strapi.store!({ type: 'plugin', name: 'upload', key: 'settings' }).set({ value });\n }\n\n async function getConfiguration() {\n const res = await strapi.store!({\n type: 'plugin',\n name: 'upload',\n key: 'view_configuration',\n }).get({});\n\n return res as ViewConfiguration | null;\n }\n\n function setConfiguration(value: ViewConfiguration) {\n return strapi.store!({ type: 'plugin', name: 'upload', key: 'view_configuration' }).set({\n value,\n });\n }\n\n return {\n formatFileInfo,\n upload,\n updateFileInfo,\n replace,\n findOne,\n findMany,\n findPage,\n remove,\n getSettings,\n setSettings,\n getConfiguration,\n setConfiguration,\n\n /**\n * exposed for testing only\n * @internal\n */\n _uploadImage: uploadImage,\n };\n};\n","import fs from 'fs';\nimport { join } from 'path';\nimport sharp from 'sharp';\nimport { file as fileUtils } from '@strapi/utils';\n\nimport { getService } from '../utils';\n\nimport type { UploadableFile } from '../types';\n\ntype Dimensions = {\n width: number | null;\n height: number | null;\n};\n\nconst { bytesToKbytes } = fileUtils;\n\nconst FORMATS_TO_RESIZE = ['jpeg', 'png', 'webp', 'tiff', 'gif'];\nconst FORMATS_TO_PROCESS = ['jpeg', 'png', 'webp', 'tiff', 'svg', 'gif', 'avif'];\nconst FORMATS_TO_OPTIMIZE = ['jpeg', 'png', 'webp', 'tiff', 'avif'];\n\nconst isOptimizableFormat = (\n format: string | undefined\n): format is 'jpeg' | 'png' | 'webp' | 'tiff' | 'avif' =>\n format !== undefined && FORMATS_TO_OPTIMIZE.includes(format);\n\nconst writeStreamToFile = (stream: NodeJS.ReadWriteStream, path: string) =>\n new Promise((resolve, reject) => {\n const writeStream = fs.createWriteStream(path);\n // Reject promise if there is an error with the provided stream\n stream.on('error', reject);\n stream.pipe(writeStream);\n writeStream.on('close', resolve);\n writeStream.on('error', reject);\n });\n\nconst getMetadata = (file: UploadableFile): Promise<sharp.Metadata> => {\n if (!file.filepath) {\n return new Promise((resolve, reject) => {\n const pipeline = sharp();\n pipeline.metadata().then(resolve).catch(reject);\n file.getStream().pipe(pipeline);\n });\n }\n\n return sharp(file.filepath).metadata();\n};\n\nconst getDimensions = async (file: UploadableFile): Promise<Dimensions> => {\n const { width = null, height = null } = await getMetadata(file);\n\n return { width, height };\n};\n\nconst THUMBNAIL_RESIZE_OPTIONS = {\n width: 245,\n height: 156,\n fit: 'inside',\n} satisfies sharp.ResizeOptions;\n\nconst resizeFileTo = async (\n file: UploadableFile,\n options: sharp.ResizeOptions,\n {\n name,\n hash,\n }: {\n name: string;\n hash: string;\n }\n) => {\n const filePath = file.tmpWorkingDirectory ? join(file.tmpWorkingDirectory, hash) : hash;\n\n let newInfo;\n if (!file.filepath) {\n const transform = sharp()\n .resize(options)\n .on('info', (info) => {\n newInfo = info;\n });\n\n await writeStreamToFile(file.getStream().pipe(transform), filePath);\n } else {\n newInfo = await sharp(file.filepath).resize(options).toFile(filePath);\n }\n\n const { width, height, size } = newInfo ?? {};\n\n const newFile: UploadableFile = {\n name,\n hash,\n ext: file.ext,\n mime: file.mime,\n filepath: filePath,\n path: file.path || null,\n getStream: () => fs.createReadStream(filePath),\n };\n\n Object.assign(newFile, {\n width,\n height,\n size: size ? bytesToKbytes(size) : 0,\n sizeInBytes: size,\n });\n return newFile;\n};\n\nconst generateThumbnail = async (file: UploadableFile) => {\n if (\n file.width &&\n file.height &&\n (file.width > THUMBNAIL_RESIZE_OPTIONS.width || file.height > THUMBNAIL_RESIZE_OPTIONS.height)\n ) {\n return resizeFileTo(file, THUMBNAIL_RESIZE_OPTIONS, {\n name: `thumbnail_${file.name}`,\n hash: `thumbnail_${file.hash}`,\n });\n }\n\n return null;\n};\n\n/**\n * Optimize image by:\n * - auto orienting image based on EXIF data\n * - reduce image quality\n *\n */\nconst optimize = async (file: UploadableFile) => {\n const { sizeOptimization = false, autoOrientation = false } =\n (await getService('upload').getSettings()) ?? {};\n\n const { format, size } = await getMetadata(file);\n\n if ((sizeOptimization || autoOrientation) && isOptimizableFormat(format)) {\n let transformer;\n if (!file.filepath) {\n transformer = sharp();\n } else {\n transformer = sharp(file.filepath);\n }\n // reduce image quality\n transformer[format]({ quality: sizeOptimization ? 80 : 100 });\n // rotate image based on EXIF data\n if (autoOrientation) {\n transformer.rotate();\n }\n const filePath = file.tmpWorkingDirectory\n ? join(file.tmpWorkingDirectory, `optimized-${file.hash}`)\n : `optimized-${file.hash}`;\n\n let newInfo;\n if (!file.filepath) {\n transformer.on('info', (info) => {\n newInfo = info;\n });\n\n await writeStreamToFile(file.getStream().pipe(transformer), filePath);\n } else {\n newInfo = await transformer.toFile(filePath);\n }\n\n const { width: newWidth, height: newHeight, size: newSize } = newInfo ?? {};\n\n const newFile = { ...file };\n\n newFile.getStream = () => fs.createReadStream(filePath);\n newFile.filepath = filePath;\n\n if (newSize && size && newSize > size) {\n // Ignore optimization if output is bigger than original\n return file;\n }\n\n return Object.assign(newFile, {\n width: newWidth,\n height: newHeight,\n size: newSize ? bytesToKbytes(newSize) : 0,\n sizeInBytes: newSize,\n });\n }\n\n return file;\n};\n\nconst DEFAULT_BREAKPOINTS = {\n large: 1000,\n medium: 750,\n small: 500,\n};\n\nconst getBreakpoints = () =>\n strapi.config.get<Record<string, number>>('plugin::upload.breakpoints', DEFAULT_BREAKPOINTS);\n\nconst generateResponsiveFormats = async (file: UploadableFile) => {\n const { responsiveDimensions = false } = (await getService('upload').getSettings()) ?? {};\n\n if (!responsiveDimensions) return [];\n\n const originalDimensions = await getDimensions(file);\n\n const breakpoints = getBreakpoints();\n return Promise.all(\n Object.keys(breakpoints).map((key) => {\n const breakpoint = breakpoints[key];\n\n if (breakpointSmallerThan(breakpoint, originalDimensions)) {\n return generateBreakpoint(key, { file, breakpoint });\n }\n\n return undefined;\n })\n );\n};\n\nconst generateBreakpoint = async (\n key: string,\n { file, breakpoint }: { file: UploadableFile; breakpoint: number }\n) => {\n const newFile = await resizeFileTo(\n file,\n {\n width: breakpoint,\n height: breakpoint,\n fit: 'inside',\n },\n {\n name: `${key}_${file.name}`,\n hash: `${key}_${file.hash}`,\n }\n );\n return {\n key,\n file: newFile,\n };\n};\n\nconst breakpointSmallerThan = (breakpoint: number, { width, height }: Dimensions) => {\n return breakpoint < (width ?? 0) || breakpoint < (height ?? 0);\n};\n\n/**\n * Applies a simple image transformation to see if the image is faulty/corrupted.\n */\nconst isFaultyImage = async (file: UploadableFile) => {\n if (!file.filepath) {\n return new Promise((resolve, reject) => {\n const pipeline = sharp();\n pipeline.stats().then(resolve).catch(reject);\n file.getStream().pipe(pipeline);\n });\n }\n\n try {\n await sharp(file.filepath).stats();\n return false;\n } catch (e) {\n return true;\n }\n};\n\nconst isOptimizableImage = async (file: UploadableFile) => {\n let format;\n try {\n const metadata = await getMetadata(file);\n format = metadata.format;\n } catch (e) {\n // throw when the file is not a supported image\n return false;\n }\n return format && FORMATS_TO_OPTIMIZE.includes(format);\n};\n\nconst isResizableImage = async (file: UploadableFile) => {\n let format;\n try {\n const metadata = await getMetadata(file);\n format = metadata.format;\n } catch (e) {\n // throw when the file is not a supported image\n return false;\n }\n return format && FORMATS_TO_RESIZE.includes(format);\n};\n\nconst isImage = async (file: UploadableFile) => {\n let format;\n try {\n const metadata = await getMetadata(file);\n format = metadata.format;\n } catch (e) {\n // throw when the file is not a supported image\n return false;\n }\n return format && FORMATS_TO_PROCESS.includes(format);\n};\n\nexport default {\n isFaultyImage,\n isOptimizableImage,\n isResizableImage,\n isImage,\n getDimensions,\n generateResponsiveFormats,\n generateThumbnail,\n optimize,\n};\n","import { sortBy, map, isUndefined } from 'lodash/fp';\nimport { strings, setCreatorFields } from '@strapi/utils';\nimport { FOLDER_MODEL_UID, FILE_MODEL_UID } from '../constants';\nimport { getService } from '../utils';\n\nimport type { File, Folder } from '../types';\n\ntype FolderMap = {\n [key: string]: Partial<Folder> & {\n children: FolderNode[];\n };\n};\n\ntype FolderNode = Partial<Folder> & {\n children: FolderNode[];\n};\n\nconst setPathIdAndPath = async (folder: Pick<Folder, 'parent'>) => {\n const { max } = await strapi.db\n .queryBuilder(FOLDER_MODEL_UID)\n .max('pathId')\n .first()\n .execute<{ max: number }>();\n\n const pathId = max + 1;\n let parentPath = '/';\n if (folder.parent) {\n const parentFolder = await strapi.db\n .query(FOLDER_MODEL_UID)\n .findOne({ where: { id: folder.parent } });\n\n parentPath = parentFolder.path;\n }\n\n return Object.assign(folder, {\n pathId,\n path: strings.joinBy('/', parentPath, `${pathId}`),\n });\n};\n\nconst create = async (\n folderData: Pick<Folder, 'name' | 'parent'>,\n opts?: { user: { id: string | number } }\n) => {\n const folderService = getService('folder');\n\n const { user } = opts || {};\n\n let enrichedFolder = await folderService.setPathIdAndPath(folderData);\n if (user) {\n enrichedFolder = await setCreatorFields({ user })(enrichedFolder);\n }\n\n const folder = await strapi.db.query(FOLDER_MODEL_UID).create({ data: enrichedFolder });\n\n strapi.eventHub.emit('media-folder.create', { folder });\n\n return folder;\n};\n\n/**\n * Recursively delete folders and included files\n * @param ids ids of the folders to delete\n * @returns {Promise<Object[]>}\n */\nconst deleteByIds = async (ids = []) => {\n const folders = await strapi.db.query(FOLDER_MODEL_UID).findMany({ where: { id: { $in: ids } } });\n if (folders.length === 0) {\n return {\n folders: [],\n totalFolderNumber: 0,\n totalFileNumber: 0,\n };\n }\n\n const pathsToDelete = map('path', folders);\n\n // delete files\n const filesToDelete = await strapi.db.query(FILE_MODEL_UID).findMany({\n where: {\n $or: pathsToDelete.flatMap((path) => [\n { folderPath: { $eq: path } },\n { folderPath: { $startsWith: `${path}/` } },\n ]),\n },\n });\n\n await Promise.all(filesToDelete.map((file: File) => getService('upload').remove(file)));\n\n // delete folders and subfolders\n const { count: totalFolderNumber } = await strapi.db.query(FOLDER_MODEL_UID).deleteMany({\n where: {\n $or: pathsToDelete.flatMap((path) => [\n { path: { $eq: path } },\n { path: { $startsWith: `${path}/` } },\n ]),\n },\n });\n\n strapi.eventHub.emit('media-folder.delete', { folders });\n\n return {\n folders,\n totalFolderNumber,\n totalFileNumber: filesToDelete.length,\n };\n};\n\n/**\n * Update name and location of a folder and its belonging folders and files\n */\nconst update = async (\n id: number,\n {\n name,\n parent,\n }: {\n name: string;\n parent: number | null;\n },\n { user }: { user: { id: string | number } }\n) => {\n // only name is updated\n if (isUndefined(parent)) {\n const existingFolder = await strapi.db.query(FOLDER_MODEL_UID).findOne({ where: { id } });\n\n if (!existingFolder) {\n return undefined;\n }\n\n const newFolder = setCreatorFields({ user, isEdition: true })({ name, parent });\n\n if (isUndefined(parent)) {\n const folder = await strapi.db\n .query(FOLDER_MODEL_UID)\n .update({ where: { id }, data: newFolder });\n\n return folder;\n }\n // location is updated => using transaction\n } else {\n const trx = await strapi.db.transaction();\n try {\n // fetch existing folder\n const existingFolder = await strapi.db\n .queryBuilder(FOLDER_MODEL_UID)\n .select(['pathId', 'path'])\n .where({ id })\n .transacting(trx.get())\n .forUpdate()\n .first()\n .execute<Folder>();\n\n // update parent folder (delete + insert; upsert not possible)\n // @ts-expect-error - no dynamic types\n const { joinTable } = strapi.db.metadata.get(FOLDER_MODEL_UID).attributes.parent;\n await strapi.db\n .queryBuilder(joinTable.name)\n .transacting(trx.get())\n .delete()\n .where({ [joinTable.joinColumn.name]: id })\n .execute();\n\n if (parent !== null) {\n await strapi.db\n .queryBuilder(joinTable.name)\n .transacting(trx.get())\n .insert({ [joinTable.inverseJoinColumn.name]: parent, [joinTable.joinColumn.name]: id })\n .where({ [joinTable.joinColumn.name]: id })\n .execute();\n }\n\n // fetch destinationFolder path\n let destinationFolderPath = '/';\n if (parent !== null) {\n const destinationFolder = await strapi.db\n .queryBuilder(FOLDER_MODEL_UID)\n .select('path')\n .where({ id: parent })\n .transacting(trx.get())\n .first()\n .execute<Folder>();\n destinationFolderPath = destinationFolder.path;\n }\n\n const folderTable = strapi.getModel(FOLDER_MODEL_UID).collectionName;\n const fileTable = strapi.getModel(FILE_MODEL_UID).collectionName;\n const folderPathColumnName =\n // @ts-expect-error - no dynamic types\n strapi.db.metadata.get(FILE_MODEL_UID).attributes.folderPath.columnName;\n // @ts-expect-error - no dynamic types\n const pathColumnName = strapi.db.metadata.get(FOLDER_MODEL_UID).attributes.path.columnName;\n\n // update folders below\n await strapi.db\n .getConnection(folderTable)\n .transacting(trx.get())\n .where(pathColumnName, existingFolder.path)\n .orWhere(pathColumnName, 'like', `${existingFolder.path}/%`)\n .update(\n pathColumnName,\n strapi.db.connection.raw('REPLACE(??, ?, ?)', [\n pathColumnName,\n existingFolder.path,\n strings.joinBy('/', destinationFolderPath, `${existingFolder.pathId}`),\n ])\n );\n\n // update files below\n await strapi.db\n .getConnection(fileTable)\n .transacting(trx.get())\n .where(folderPathColumnName, existingFolder.path)\n .orWhere(folderPathColumnName, 'like', `${existingFolder.path}/%`)\n .update(\n folderPathColumnName,\n strapi.db.connection.raw('REPLACE(??, ?, ?)', [\n folderPathColumnName,\n existingFolder.path,\n strings.joinBy('/', destinationFolderPath, `${existingFolder.pathId}`),\n ])\n );\n\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n\n // update less critical information (name + updatedBy)\n const newFolder = setCreatorFields({ user, isEdition: true })({ name });\n\n const folder = await strapi.db\n .query(FOLDER_MODEL_UID)\n .update({ where: { id }, data: newFolder });\n\n strapi.eventHub.emit('media-folder.update', { folder });\n return folder;\n }\n};\n\n/**\n * Check if a folder exists in database\n * @param params query params to find the folder\n * @returns {Promise<boolean>}\n */\nconst exists = async (params = {}) => {\n const count = await strapi.db.query(FOLDER_MODEL_UID).count({ where: params });\n return count > 0;\n};\n\n/**\n * Returns the nested structure of folders\n * @returns {Promise<array>}\n */\nconst getStructure = async () => {\n // @ts-expect-error - no dynamic types\n const { joinTable } = strapi.db.metadata.get(FOLDER_MODEL_UID).attributes.parent;\n const qb = strapi.db.queryBuilder(FOLDER_MODEL_UID);\n const alias = qb.getAlias();\n const folders = (await qb\n .select(['id', 'name', `${alias}.${joinTable.inverseJoinColumn.name} as parent`])\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.joinColumn.name,\n rootColumn: joinTable.joinColumn.referencedColumn,\n rootTable: qb.alias,\n })\n .execute({ mapResults: false })) as Folder[];\n\n const folderMap: FolderMap = {\n null: { children: [] },\n };\n\n folders.forEach((f) => {\n folderMap[f.id] = { ...f, children: [] };\n });\n\n folders.forEach((f) => {\n const parentId = f.parent || 'null';\n\n if (!folderMap[parentId]) {\n folderMap[parentId] = { children: [] };\n }\n\n folderMap[parentId].children.push(folderMap[f.id]);\n folderMap[parentId].children = sortBy('name', folderMap[parentId].children);\n delete folderMap[f.id].parent;\n });\n\n return folderMap.null.children;\n};\n\nexport default {\n create,\n exists,\n deleteByIds,\n update,\n setPathIdAndPath,\n getStructure,\n};\n","import { cloneDeep } from 'lodash/fp';\nimport { async } from '@strapi/utils';\n\nimport { FOLDER_MODEL_UID, FILE_MODEL_UID } from '../constants';\nimport { getService } from '../utils';\n\nimport { Config, type File } from '../types';\n\nconst getFolderPath = async (folderId?: number | null) => {\n if (!folderId) return '/';\n\n const parentFolder = await strapi.db.query(FOLDER_MODEL_UID).findOne({ where: { id: folderId } });\n\n return parentFolder.path;\n};\n\nconst deleteByIds = async (ids: number[] = []) => {\n const filesToDelete = await strapi.db\n .query(FILE_MODEL_UID)\n .findMany({ where: { id: { $in: ids } } });\n\n await Promise.all(filesToDelete.map((file: File) => getService('upload').remove(file)));\n\n return filesToDelete;\n};\n\nconst signFileUrls = async (file: File) => {\n const { provider } = strapi.plugins.upload;\n const { provider: providerConfig } = strapi.config.get<Config>('plugin::upload');\n const isPrivate = await provider.isPrivate();\n file.isUrlSigned = false;\n\n // Check file provider and if provider is private\n if (file.provider !== providerConfig || !isPrivate) {\n return file;\n }\n\n const signUrl = async (file: File) => {\n const signedUrl = await provider.getSignedUrl(file);\n file.url = signedUrl.url;\n file.isUrlSigned = true;\n };\n\n const signedFile = cloneDeep(file);\n\n // Sign each file format\n await signUrl(signedFile);\n if (file.formats) {\n await async.map(Object.values(signedFile.formats ?? {}), signUrl);\n }\n\n return signedFile;\n};\n\nexport default { getFolderPath, deleteByIds, signFileUrls };\n","const getWeeklyCronScheduleAt = (date: Date) =>\n `${date.getSeconds()} ${date.getMinutes()} ${date.getHours()} * * ${date.getDay()}`;\n\nexport { getWeeklyCronScheduleAt };\n","import { defaultTo } from 'lodash/fp';\nimport { add } from 'date-fns';\n\nimport type { Core } from '@strapi/types';\n\nimport { getWeeklyCronScheduleAt } from '../utils/cron';\nimport { FOLDER_MODEL_UID, FILE_MODEL_UID } from '../constants';\n\ntype MetricStoreValue = {\n lastWeeklyUpdate?: number;\n weeklySchedule?: string;\n};\n\nconst ONE_WEEK = 7 * 24 * 60 * 60 * 1000;\n\nconst getMetricsStoreValue = async (): Promise<MetricStoreValue> => {\n const value = await strapi.store.get({ type: 'plugin', name: 'upload', key: 'metrics' });\n return defaultTo({}, value) as MetricStoreValue;\n};\nconst setMetricsStoreValue = (value: MetricStoreValue) =>\n strapi.store.set({ type: 'plugin', name: 'upload', key: 'metrics', value });\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n async computeMetrics() {\n // Folder metrics\n // @ts-expect-error - no dynamic types for the metadata\n const pathColName = strapi.db.metadata.get(FOLDER_MODEL_UID).attributes.path.columnName;\n const folderTable = strapi.getModel(FOLDER_MODEL_UID).collectionName;\n\n let keepOnlySlashesSQLString = '??';\n const queryParams = [pathColName];\n for (let i = 0; i < 10; i += 1) {\n keepOnlySlashesSQLString = `REPLACE(${keepOnlySlashesSQLString}, ?, ?)`;\n queryParams.push(String(i), '');\n }\n\n /*\n The following query goal is to count the number of folders with depth 1, depth 2 etc.\n The query returns :\n [\n { depth: 1, occurence: 4 },\n { depth: 2, occurence: 2 },\n { depth: 3, occurence: 5 },\n ]\n\n The query is built as follow:\n 1. In order to get the depth level of a folder:\n - we take their path\n - remove all numbers (by replacing 0123456789 by '', thus the 10 REPLACE in the query)\n - count the remaining `/`, which correspond to their depth (by using LENGTH)\n We now have, for each folder, its depth.\n 2. In order to get the number of folders for each depth:\n - we group them by their depth and use COUNT(*)\n */\n\n const res = (await strapi.db\n .getConnection(folderTable)\n .select(\n strapi.db.connection.raw(\n `LENGTH(${keepOnlySlashesSQLString}) AS depth, COUNT(*) AS occurence`,\n queryParams\n )\n )\n .groupBy('depth')) as Array<{ depth: string; occurence: string }>;\n\n const folderLevelsArray = res.map((map) => ({\n depth: Number(map.depth),\n occurence: Number(map.occurence),\n })); // values can be strings depending on the database\n\n let product = 0;\n let folderNumber = 0;\n let maxDepth = 0;\n for (const folderLevel of folderLevelsArray) {\n product += folderLevel.depth * folderLevel.occurence;\n folderNumber += folderLevel.occurence;\n if (folderLevel.depth > maxDepth) {\n maxDepth = folderLevel.depth;\n }\n }\n const averageDepth = folderNumber !== 0 ? product / folderNumber : 0;\n\n let sumOfDeviation = 0;\n for (const folderLevel of folderLevelsArray) {\n sumOfDeviation += Math.abs(folderLevel.depth - averageDepth) * folderLevel.occurence;\n }\n\n const averageDeviationDepth = folderNumber !== 0 ? sumOfDeviation / folderNumber : 0;\n\n // File metrics\n const assetNumber = await strapi.db.query(FILE_MODEL_UID).count();\n\n return {\n assetNumber,\n folderNumber,\n averageDepth,\n maxDepth,\n averageDeviationDepth,\n };\n },\n\n async sendMetrics() {\n const metrics = await this.computeMetrics();\n strapi.telemetry.send('didSendUploadPropertiesOnceAWeek', {\n groupProperties: { metrics },\n });\n\n const metricsInfoStored = await getMetricsStoreValue();\n await setMetricsStoreValue({ ...metricsInfoStored, lastWeeklyUpdate: new Date().getTime() });\n },\n\n async ensureWeeklyStoredCronSchedule(): Promise<string> {\n const metricsInfoStored = await getMetricsStoreValue();\n const { weeklySchedule: currentSchedule, lastWeeklyUpdate } = metricsInfoStored;\n\n const now = new Date();\n let weeklySchedule = currentSchedule;\n\n if (!weeklySchedule || !lastWeeklyUpdate || lastWeeklyUpdate + ONE_WEEK < now.getTime()) {\n weeklySchedule = getWeeklyCronScheduleAt(add(now, { seconds: 15 }));\n await setMetricsStoreValue({ ...metricsInfoStored, weeklySchedule });\n\n return weeklySchedule;\n }\n\n return weeklySchedule;\n },\n\n async registerCron() {\n const weeklySchedule = await this.ensureWeeklyStoredCronSchedule();\n\n strapi.cron.add({\n uploadWeekly: {\n task: this.sendMetrics.bind(this),\n options: weeklySchedule,\n },\n });\n },\n});\n","import type { Core } from '@strapi/types';\n\nconst getProviderName = () => strapi.config.get('plugin::upload.provider', 'local');\nconst isProviderPrivate = async () => strapi.plugin('upload').provider.isPrivate();\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n async sendUploadPluginMetrics() {\n const uploadProvider = getProviderName();\n const privateProvider = await isProviderPrivate();\n\n strapi.telemetry.send('didInitializePluginUpload', {\n groupProperties: {\n uploadProvider,\n privateProvider,\n },\n });\n },\n});\n","import { isNil, get } from 'lodash/fp';\nimport { getService } from '../utils';\nimport { FOLDER_MODEL_UID, API_UPLOAD_FOLDER_BASE_NAME } from '../constants';\n\nconst getStore = () => strapi.store({ type: 'plugin', name: 'upload', key: 'api-folder' });\n\nconst createApiUploadFolder = async () => {\n let name = API_UPLOAD_FOLDER_BASE_NAME;\n const folderService = getService('folder');\n\n let exists = true;\n let index = 1;\n while (exists) {\n exists = await folderService.exists({ name, parent: null });\n if (exists) {\n name = `${API_UPLOAD_FOLDER_BASE_NAME} (${index})`;\n index += 1;\n }\n }\n\n const folder = await folderService.create({ name });\n\n await getStore().set({ value: { id: folder.id } });\n\n return folder;\n};\n\nconst getAPIUploadFolder = async () => {\n const storeValue = await getStore().get({});\n const folderId = get('id', storeValue);\n\n const folder = folderId\n ? await strapi.db.query(FOLDER_MODEL_UID).findOne({ where: { id: folderId } })\n : null;\n\n return isNil(folder) ? createApiUploadFolder() : folder;\n};\n\nexport default {\n getAPIUploadFolder,\n};\n","import { async, traverseEntity } from '@strapi/utils';\n\nimport type { Schema, UID } from '@strapi/types';\n\nimport { getService } from '../../utils';\n\nimport type { File } from '../../types';\n\ntype SignEntityMediaVisitor = (\n args: {\n key: string;\n value: unknown;\n attribute: Schema.Attribute.AnyAttribute;\n },\n utils: {\n set: (key: string, value: unknown) => void;\n }\n) => Promise<void>;\n\nfunction isFile(value: unknown, attribute: Schema.Attribute.AnyAttribute): value is File {\n if (!value || attribute.type !== 'media') {\n return false;\n }\n\n return true;\n}\n\n/**\n * Visitor function to sign media URLs\n */\nconst signEntityMediaVisitor: SignEntityMediaVisitor = async (\n { key, value, attribute },\n { set }\n) => {\n const { signFileUrls } = getService('file');\n\n if (!attribute) {\n return;\n }\n\n if (attribute.type !== 'media') {\n return;\n }\n\n if (isFile(value, attribute)) {\n // If the attribute is repeatable sign each file\n if (attribute.multiple) {\n const signedFiles = await async.map(value, signFileUrls);\n set(key, signedFiles);\n return;\n }\n\n // If the attribute is not repeatable only sign a single file\n const signedFile = await signFileUrls(value);\n set(key, signedFile);\n }\n};\n\n/**\n *\n * Iterate through an entity manager result\n * Check which modelAttributes are media and pre sign the image URLs\n * if they are from the current upload provider\n *\n * @param {Object} entity\n * @param {Object} modelAttributes\n * @returns\n */\nconst signEntityMedia = async (entity: any, uid: UID.Schema) => {\n const model = strapi.getModel(uid);\n return traverseEntity(\n // @ts-expect-error - FIXME: fix traverseEntity using wrong types\n signEntityMediaVisitor,\n { schema: model, getModel: strapi.getModel.bind(strapi) },\n entity\n );\n};\n\nexport { signEntityMedia };\n","import { async } from '@strapi/utils';\nimport { signEntityMedia } from './utils';\n\nconst signFileUrlsOnDocumentService = async () => {\n const { provider } = strapi.plugins.upload;\n const isPrivate = await provider.isPrivate();\n\n // We only need to sign the file urls if the provider is private\n if (!isPrivate) {\n return;\n }\n\n strapi.documents.use(async (ctx, next) => {\n const uid = ctx.uid;\n const result: any = await next();\n\n if (ctx.action === 'findMany') {\n // Shape: [ entry ]\n return async.map(result, (entry: any) => signEntityMedia(entry, uid));\n }\n\n if (\n ctx.action === 'findFirst' ||\n ctx.action === 'findOne' ||\n ctx.action === 'create' ||\n ctx.action === 'update'\n ) {\n // Shape: entry\n return signEntityMedia(result, uid);\n }\n\n if (\n ctx.action === 'delete' ||\n ctx.action === 'clone' ||\n ctx.action === 'publish' ||\n ctx.action === 'unpublish' ||\n ctx.action === 'discardDraft'\n ) {\n // Shape: { entries: [ entry ] }\n // ...\n return {\n ...result,\n entries: await async.map(result.entries, (entry: any) => signEntityMedia(entry, uid)),\n };\n }\n\n return result;\n });\n};\n\nexport default {\n signFileUrlsOnDocumentService,\n};\n","import provider from './provider';\nimport upload from './upload';\nimport imageManipulation from './image-manipulation';\nimport folder from './folder';\nimport file from './file';\nimport weeklyMetrics from './weekly-metrics';\nimport metrics from './metrics';\nimport apiUploadFolder from './api-upload-folder';\nimport extensions from './extensions';\n\nexport const services = {\n provider,\n upload,\n folder,\n file,\n weeklyMetrics,\n metrics,\n 'image-manipulation': imageManipulation,\n 'api-upload-folder': apiUploadFolder,\n extensions,\n};\n","export const routes = {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n path: '/settings',\n handler: 'admin-settings.getSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.settings.read'],\n },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/settings',\n handler: 'admin-settings.updateSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.settings.read'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/',\n handler: 'admin-upload.upload',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/files',\n handler: 'admin-file.find',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/files/:id',\n handler: 'admin-file.findOne',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/files/:id',\n handler: 'admin-file.destroy',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/folders/:id',\n handler: 'admin-folder.findOne',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/folders',\n handler: 'admin-folder.find',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/folders',\n handler: 'admin-folder.create',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.create'],\n },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/folders/:id',\n handler: 'admin-folder.update',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/folder-structure',\n handler: 'admin-folder.getStructure',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/actions/bulk-delete',\n handler: 'admin-folder-file.deleteMany',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/actions/bulk-move',\n handler: 'admin-folder-file.moveMany',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n ],\n};\n","export const routes = {\n type: 'content-api',\n routes: [\n {\n method: 'POST',\n path: '/',\n handler: 'content-api.upload',\n },\n {\n method: 'GET',\n path: '/files',\n handler: 'content-api.find',\n },\n {\n method: 'GET',\n path: '/files/:id',\n handler: 'content-api.findOne',\n },\n {\n method: 'DELETE',\n path: '/files/:id',\n handler: 'content-api.destroy',\n },\n ],\n};\n","import { ACTIONS } from '../constants';\n\nexport const routes = {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n path: '/configuration',\n handler: 'view-configuration.findViewConfiguration',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'PUT',\n path: '/configuration',\n handler: 'view-configuration.updateViewConfiguration',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: [ACTIONS.configureView],\n },\n },\n ],\n },\n },\n ],\n};\n","import { routes as admin } from './admin';\nimport { routes as contentApi } from './content-api';\nimport { routes as viewConfiguration } from './view-configuration';\n\nexport const routes = {\n admin,\n 'content-api': contentApi,\n viewConfiguration,\n};\n","export const config = {\n default: {\n enabled: true,\n provider: 'local',\n sizeLimit: 1000000000, // 1GB\n actionOptions: {},\n },\n validator() {},\n};\n","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 = strapi\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 strapi.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","import { merge } from 'lodash/fp';\nimport { async } from '@strapi/utils';\n\nimport type { Context } from 'koa';\n\nimport { getService } from '../utils';\nimport { ACTIONS, FILE_MODEL_UID } from '../constants';\nimport { findEntityAndCheckPermissions } from './utils/find-entity-and-check-permissions';\n\nexport default {\n async find(ctx: Context) {\n const {\n state: { userAbility },\n } = ctx;\n\n const defaultQuery = { populate: { folder: true } };\n\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.read,\n model: FILE_MODEL_UID,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n // validate the incoming user query params\n await pm.validateQuery(ctx.query);\n\n const query = await async.pipe(\n // Start by sanitizing the incoming query\n (q) => pm.sanitizeQuery(q),\n // Add the default query which should not be validated or sanitized\n (q) => merge(defaultQuery, q),\n // Add the dynamic filters based on permissions' conditions\n (q) => pm.addPermissionsQueryTo(q)\n )(ctx.query);\n\n const { results: files, pagination } = await getService('upload').findPage(query);\n\n // Sign file urls for private providers\n const signedFiles = await async.map(files, getService('file').signFileUrls);\n\n const sanitizedFiles = await pm.sanitizeOutput(signedFiles);\n\n return { results: sanitizedFiles, pagination };\n },\n\n async findOne(ctx: Context) {\n const {\n state: { userAbility },\n params: { id },\n } = ctx;\n\n const { pm, file } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.read,\n FILE_MODEL_UID,\n id\n );\n\n const signedFile = await getService('file').signFileUrls(file);\n ctx.body = await pm.sanitizeOutput(signedFile);\n },\n\n async destroy(ctx: Context) {\n const { id } = ctx.params;\n const { userAbility } = ctx.state;\n\n const { pm, file } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.update,\n FILE_MODEL_UID,\n id\n );\n\n const [body] = await Promise.all([\n pm.sanitizeOutput(file, { action: ACTIONS.read }),\n getService('upload').remove(file),\n ]);\n\n ctx.body = body;\n },\n};\n","import { isNil } from 'lodash/fp';\nimport { getService } from '../../../utils';\n\nconst folderExists = async (folderId: number) => {\n if (isNil(folderId)) {\n return true;\n }\n\n const exists = await getService('folder').exists({ id: folderId });\n\n return exists;\n};\n\nexport { folderExists };\n","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","import { isUndefined, get, isNil } from 'lodash/fp';\nimport { yup, validateYupSchema } from '@strapi/utils';\nimport { getService } from '../../../utils';\nimport { FOLDER_MODEL_UID } from '../../../constants';\nimport { folderExists } from './utils';\nimport { isFolderOrChild } from '../../utils/folders';\n\nconst NO_SLASH_REGEX = /^[^/]+$/;\nconst NO_SPACES_AROUND = /^(?! ).+(?<! )$/;\n\nconst isNameUniqueInFolder = (id?: number): yup.TestFunction<string | undefined> => {\n return async function test(name?: string) {\n const { exists } = getService('folder');\n const filters: Record<string, unknown> = { name, parent: this.parent.parent || null };\n if (id) {\n filters.id = { $ne: id };\n\n if (isUndefined(name)) {\n const existingFolder = await strapi.db.query(FOLDER_MODEL_UID).findOne({ where: { id } });\n filters.name = get('name', existingFolder);\n }\n }\n\n const doesExist = await exists(filters);\n return !doesExist;\n };\n};\n\nconst validateCreateFolderSchema = yup\n .object()\n .shape({\n name: yup\n .string()\n .min(1)\n .matches(NO_SLASH_REGEX, 'name cannot contain slashes')\n .matches(NO_SPACES_AROUND, 'name cannot start or end with a whitespace')\n .required()\n .test('is-folder-unique', 'A folder with this name already exists', isNameUniqueInFolder()),\n parent: yup\n .strapiID()\n .nullable()\n .test('folder-exists', 'parent folder does not exist', folderExists),\n })\n .noUnknown()\n .required();\n\nconst validateUpdateFolderSchema = (id: number) =>\n yup\n .object()\n .shape({\n name: yup\n .string()\n .min(1)\n .matches(NO_SLASH_REGEX, 'name cannot contain slashes')\n .matches(NO_SPACES_AROUND, 'name cannot start or end with a whitespace')\n .test(\n 'is-folder-unique',\n 'A folder with this name already exists',\n isNameUniqueInFolder(id)\n ),\n parent: yup\n .strapiID()\n .nullable()\n .test('folder-exists', 'parent folder does not exist', folderExists)\n .test(\n 'dont-move-inside-self',\n 'folder cannot be moved inside itself',\n async function test(parent) {\n if (isNil(parent)) return true;\n\n const destinationFolder = await strapi.db.query(FOLDER_MODEL_UID).findOne({\n select: ['path'],\n where: { id: parent },\n });\n\n const currentFolder = await strapi.db.query(FOLDER_MODEL_UID).findOne({\n select: ['path'],\n where: { id },\n });\n\n if (!destinationFolder || !currentFolder) return true;\n\n return !isFolderOrChild(destinationFolder, currentFolder);\n }\n ),\n })\n .noUnknown()\n .required();\n\nexport const validateCreateFolder = validateYupSchema(validateCreateFolderSchema);\nexport const validateUpdateFolder = (id: number) =>\n validateYupSchema(validateUpdateFolderSchema(id));\n","import { defaultsDeep } from 'lodash/fp';\n\nimport type { Context } from 'koa';\n\nimport { getService } from '../utils';\nimport { FOLDER_MODEL_UID } from '../constants';\nimport { validateCreateFolder, validateUpdateFolder } from './validation/admin/folder';\n\nexport default {\n async findOne(ctx: Context) {\n const { id } = ctx.params;\n\n const permissionsManager = strapi.service('admin::permission').createPermissionsManager({\n ability: ctx.state.userAbility,\n model: FOLDER_MODEL_UID,\n });\n\n await permissionsManager.validateQuery(ctx.query);\n const query = await permissionsManager.sanitizeQuery(ctx.query);\n\n const { results } = await strapi.db.query(FOLDER_MODEL_UID).findPage(\n strapi.get('query-params').transform(\n FOLDER_MODEL_UID,\n defaultsDeep(\n {\n filters: { id },\n populate: {\n children: {\n count: true,\n },\n files: {\n count: true,\n },\n },\n },\n query\n )\n )\n );\n\n if (results.length === 0) {\n return ctx.notFound('folder not found');\n }\n\n ctx.body = {\n data: await permissionsManager.sanitizeOutput(results[0]),\n };\n },\n\n async find(ctx: Context) {\n const permissionsManager = strapi.service('admin::permission').createPermissionsManager({\n ability: ctx.state.userAbility,\n model: FOLDER_MODEL_UID,\n });\n\n await permissionsManager.validateQuery(ctx.query);\n const query = await permissionsManager.sanitizeQuery(ctx.query);\n\n const results = await strapi.db.query(FOLDER_MODEL_UID).findMany(\n strapi.get('query-params').transform(\n FOLDER_MODEL_UID,\n defaultsDeep(\n {\n populate: {\n children: {\n count: true,\n },\n files: {\n count: true,\n },\n },\n },\n query\n )\n )\n );\n\n ctx.body = {\n data: await permissionsManager.sanitizeOutput(results),\n };\n },\n async create(ctx: Context) {\n const { user } = ctx.state;\n const { body } = ctx.request;\n\n await validateCreateFolder(body);\n\n const folderService = getService('folder');\n\n const folder = await folderService.create(body, { user });\n\n const permissionsManager = strapi.service('admin::permission').createPermissionsManager({\n ability: ctx.state.userAbility,\n model: FOLDER_MODEL_UID,\n });\n\n ctx.created({\n data: await permissionsManager.sanitizeOutput(folder),\n });\n },\n\n async update(ctx: Context) {\n const { id } = ctx.params;\n const { user } = ctx.state;\n const { body } = ctx.request;\n\n const permissionsManager = strapi.service('admin::permission').createPermissionsManager({\n ability: ctx.state.userAbility,\n model: FOLDER_MODEL_UID,\n });\n\n await validateUpdateFolder(id)(body);\n\n const folderService = getService('folder');\n\n const updatedFolder = await folderService.update(id, body, { user });\n\n if (!updatedFolder) {\n return ctx.notFound('folder not found');\n }\n\n ctx.body = {\n data: await permissionsManager.sanitizeOutput(updatedFolder),\n };\n },\n\n async getStructure(ctx: Context) {\n const { getStructure } = getService('folder');\n\n const structure = await getStructure();\n\n ctx.body = {\n data: structure,\n };\n },\n};\n","import { intersection, map, isEmpty } from 'lodash/fp';\nimport { yup, validateYupSchema } from '@strapi/utils';\nimport { FOLDER_MODEL_UID } from '../../../constants';\nimport { folderExists } from './utils';\nimport { isFolderOrChild } from '../../utils/folders';\n\nimport type { Folder } from '../../../types';\n\nconst validateDeleteManyFoldersFilesSchema = yup\n .object()\n .shape({\n fileIds: yup.array().of(yup.strapiID().required()),\n folderIds: yup.array().of(yup.strapiID().required()),\n })\n .noUnknown()\n .required();\n\nconst validateStructureMoveManyFoldersFilesSchema = yup\n .object()\n .shape({\n destinationFolderId: yup\n .strapiID()\n .nullable()\n .defined()\n .test('folder-exists', 'destination folder does not exist', folderExists),\n fileIds: yup.array().of(yup.strapiID().required()),\n folderIds: yup.array().of(yup.strapiID().required()),\n })\n .noUnknown()\n .required();\n\nconst validateDuplicatesMoveManyFoldersFilesSchema = yup\n .object()\n .test('are-folders-unique', 'some folders already exist', async function areFoldersUnique(value) {\n const { folderIds, destinationFolderId } = value;\n if (isEmpty(folderIds)) return true;\n\n const folders = await strapi.db.query(FOLDER_MODEL_UID).findMany({\n select: ['name'],\n where: { id: { $in: folderIds } },\n });\n\n const existingFolders = await strapi.db.query(FOLDER_MODEL_UID).findMany({\n select: ['name'],\n where: { parent: { id: destinationFolderId } },\n });\n\n const duplicatedNames = intersection(map('name', folders), map('name', existingFolders));\n if (duplicatedNames.length > 0) {\n return this.createError({\n message: `some folders already exists: ${duplicatedNames.join(', ')}`,\n });\n }\n\n return true;\n });\n\nconst validateMoveFoldersNotInsideThemselvesSchema = yup\n .object()\n .test(\n 'dont-move-inside-self',\n 'folders cannot be moved inside themselves or one of its children',\n async function validateMoveFoldersNotInsideThemselves(value) {\n const { folderIds, destinationFolderId } = value;\n if (destinationFolderId === null || isEmpty(folderIds)) return true;\n\n const destinationFolder = await strapi.db.query(FOLDER_MODEL_UID).findOne({\n select: ['path'],\n where: { id: destinationFolderId },\n });\n\n const folders: Folder[] = await strapi.db.query(FOLDER_MODEL_UID).findMany({\n select: ['name', 'path'],\n where: { id: { $in: folderIds } },\n });\n\n const unmovableFoldersNames = folders\n .filter((folder) => isFolderOrChild(destinationFolder, folder))\n .map((f) => f.name);\n\n if (unmovableFoldersNames.length > 0) {\n return this.createError({\n message: `folders cannot be moved inside themselves or one of its children: ${unmovableFoldersNames.join(\n ', '\n )}`,\n });\n }\n\n return true;\n }\n );\n\nexport const validateDeleteManyFoldersFiles = validateYupSchema(\n validateDeleteManyFoldersFilesSchema\n);\n\nexport async function validateMoveManyFoldersFiles(body: unknown) {\n await validateYupSchema(validateStructureMoveManyFoldersFilesSchema)(body);\n await validateYupSchema(validateDuplicatesMoveManyFoldersFilesSchema)(body);\n await validateYupSchema(validateMoveFoldersNotInsideThemselvesSchema)(body);\n}\n","import { strings } from '@strapi/utils';\n\nimport type { Context } from 'koa';\n\nimport { getService } from '../utils';\nimport { ACTIONS, FOLDER_MODEL_UID, FILE_MODEL_UID } from '../constants';\nimport {\n validateDeleteManyFoldersFiles,\n validateMoveManyFoldersFiles,\n} from './validation/admin/folder-file';\n\nimport type { File, Folder } from '../types';\n\nexport default {\n async deleteMany(ctx: Context) {\n const { body } = ctx.request;\n const {\n state: { userAbility },\n } = ctx;\n\n const pmFolder = strapi.service('admin::permission').createPermissionsManager({\n ability: ctx.state.userAbility,\n model: FOLDER_MODEL_UID,\n });\n\n const pmFile = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.read,\n model: FILE_MODEL_UID,\n });\n\n await validateDeleteManyFoldersFiles(body);\n\n const fileService = getService('file');\n const folderService = getService('folder');\n\n const deletedFiles = await fileService.deleteByIds(body.fileIds);\n const {\n folders: deletedFolders,\n totalFolderNumber,\n totalFileNumber,\n } = await folderService.deleteByIds(body.folderIds);\n\n if (deletedFiles.length + deletedFolders.length > 1) {\n strapi.telemetry.send('didBulkDeleteMediaLibraryElements', {\n eventProperties: {\n rootFolderNumber: deletedFolders.length,\n rootAssetNumber: deletedFiles.length,\n totalFolderNumber,\n totalAssetNumber: totalFileNumber + deletedFiles.length,\n },\n });\n }\n\n ctx.body = {\n data: {\n files: await pmFile.sanitizeOutput(deletedFiles),\n folders: await pmFolder.sanitizeOutput(deletedFolders),\n },\n };\n },\n async moveMany(ctx: Context) {\n const { body } = ctx.request;\n const {\n state: { userAbility },\n } = ctx;\n\n const pmFolder = strapi.service('admin::permission').createPermissionsManager({\n ability: ctx.state.userAbility,\n model: FOLDER_MODEL_UID,\n });\n\n const pmFile = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.read,\n model: FILE_MODEL_UID,\n });\n\n await validateMoveManyFoldersFiles(body);\n const { folderIds = [], fileIds = [], destinationFolderId } = body;\n\n let totalFolderNumber = 0;\n let totalFileNumber = 0;\n\n const trx = await strapi.db.transaction();\n try {\n // fetch folders\n const existingFolders = await strapi.db\n .queryBuilder(FOLDER_MODEL_UID)\n .select(['id', 'pathId', 'path'])\n .where({ id: { $in: folderIds } })\n .transacting(trx.get())\n .forUpdate()\n .execute<Folder[]>();\n\n // fetch files\n const existingFiles = await strapi.db\n .queryBuilder(FILE_MODEL_UID)\n .select(['id'])\n .where({ id: { $in: fileIds } })\n .transacting(trx.get())\n .forUpdate()\n .execute<File[]>();\n\n // fetch destinationFolder path\n let destinationFolderPath = '/';\n if (destinationFolderId !== null) {\n const destinationFolder = await strapi.db\n .queryBuilder(FOLDER_MODEL_UID)\n .select('path')\n .where({ id: destinationFolderId })\n .transacting(trx.get())\n .first()\n .execute<Folder>();\n destinationFolderPath = destinationFolder.path;\n }\n\n const fileTable = strapi.getModel(FILE_MODEL_UID).collectionName;\n const folderTable = strapi.getModel(FOLDER_MODEL_UID).collectionName;\n const folderPathColName =\n // @ts-expect-error - no dynamic typings for the models\n strapi.db.metadata.get(FILE_MODEL_UID).attributes.folderPath.columnName;\n // @ts-expect-error - no dynamic typings for the models\n const pathColName = strapi.db.metadata.get(FOLDER_MODEL_UID).attributes.path.columnName;\n\n if (existingFolders.length > 0) {\n // update folders' parent relation\n // @ts-expect-error - no dynamic typings for the models\n const { joinTable } = strapi.db.metadata.get(FOLDER_MODEL_UID).attributes.parent;\n await strapi.db\n .queryBuilder(joinTable.name)\n .transacting(trx.get())\n .delete()\n .where({ [joinTable.joinColumn.name]: { $in: folderIds } })\n .execute();\n\n if (destinationFolderId !== null) {\n await strapi.db\n .queryBuilder(joinTable.name)\n .transacting(trx.get())\n .insert(\n existingFolders.map((folder) => ({\n [joinTable.inverseJoinColumn.name]: destinationFolderId,\n [joinTable.joinColumn.name]: folder.id,\n }))\n )\n .execute();\n }\n\n for (const existingFolder of existingFolders) {\n let replaceQuery;\n switch (strapi.db.dialect.client) {\n case 'sqlite':\n replaceQuery = '? || SUBSTRING(??, ?)';\n break;\n case 'postgres':\n replaceQuery = 'CONCAT(?::TEXT, SUBSTRING(??, ?::INTEGER))';\n break;\n default:\n replaceQuery = 'CONCAT(?, SUBSTRING(??, ?))';\n }\n\n // update path for folders themselves & folders below\n totalFolderNumber = await strapi.db\n .getConnection(folderTable)\n .transacting(trx.get())\n .where(pathColName, existingFolder.path)\n .orWhere(pathColName, 'like', `${existingFolder.path}/%`)\n .update(\n pathColName,\n strapi.db.connection.raw(replaceQuery, [\n strings.joinBy('/', destinationFolderPath, `${existingFolder.pathId}`),\n pathColName,\n existingFolder.path.length + 1,\n ])\n );\n\n // update path of files below\n totalFileNumber = await strapi.db\n .getConnection(fileTable)\n .transacting(trx.get())\n .where(folderPathColName, existingFolder.path)\n .orWhere(folderPathColName, 'like', `${existingFolder.path}/%`)\n .update(\n folderPathColName,\n strapi.db.connection.raw(replaceQuery, [\n strings.joinBy('/', destinationFolderPath, `${existingFolder.pathId}`),\n folderPathColName,\n existingFolder.path.length + 1,\n ])\n );\n }\n }\n\n if (existingFiles.length > 0) {\n // update files' folder relation (delete + insert; upsert not possible)\n // @ts-expect-error - no dynamic typings for the models\n const fileJoinTable = strapi.db.metadata.get(FILE_MODEL_UID).attributes.folder.joinTable;\n await strapi.db\n .queryBuilder(fileJoinTable.name)\n .transacting(trx.get())\n .delete()\n .where({ [fileJoinTable.joinColumn.name]: { $in: fileIds } })\n .execute();\n\n if (destinationFolderId !== null) {\n await strapi.db\n .queryBuilder(fileJoinTable.name)\n .transacting(trx.get())\n .insert(\n existingFiles.map((file) => ({\n [fileJoinTable.inverseJoinColumn.name]: destinationFolderId,\n [fileJoinTable.joinColumn.name]: file.id,\n }))\n )\n .execute();\n }\n\n // update files main fields (path + updatedBy)\n await strapi.db\n .getConnection(fileTable)\n .transacting(trx.get())\n .whereIn('id', fileIds)\n .update(folderPathColName, destinationFolderPath);\n }\n\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n\n const updatedFolders = await strapi.db.query(FOLDER_MODEL_UID).findMany({\n where: { id: { $in: folderIds } },\n });\n\n const updatedFiles = await strapi.db.query(FILE_MODEL_UID).findMany({\n where: { id: { $in: fileIds } },\n });\n\n strapi.telemetry.send('didBulkMoveMediaLibraryElements', {\n eventProperties: {\n rootFolderNumber: updatedFolders.length,\n rootAssetNumber: updatedFiles.length,\n totalFolderNumber,\n totalAssetNumber: totalFileNumber + updatedFiles.length,\n },\n });\n\n ctx.body = {\n data: {\n files: await pmFile.sanitizeOutput(updatedFiles),\n folders: await pmFolder.sanitizeOutput(updatedFolders),\n },\n };\n },\n};\n","import { yup, validateYupSchema } from '@strapi/utils';\n\nconst settingsSchema = yup.object({\n sizeOptimization: yup.boolean().required(),\n responsiveDimensions: yup.boolean().required(),\n autoOrientation: yup.boolean(),\n});\n\nexport default validateYupSchema(settingsSchema);\n\nexport type Settings = yup.InferType<typeof settingsSchema>;\n","import type { Context } from 'koa';\n\nimport { getService } from '../utils';\nimport { ACTIONS, FILE_MODEL_UID } from '../constants';\nimport validateSettings from './validation/admin/settings';\n\nexport default {\n async updateSettings(ctx: Context) {\n const {\n request: { body },\n state: { userAbility },\n } = ctx;\n\n if (userAbility.cannot(ACTIONS.readSettings, FILE_MODEL_UID)) {\n return ctx.forbidden();\n }\n\n const data = await validateSettings(body);\n\n await getService('upload').setSettings(data);\n\n ctx.body = { data };\n },\n\n async getSettings(ctx: Context) {\n const {\n state: { userAbility },\n } = ctx;\n\n if (userAbility.cannot(ACTIONS.readSettings, FILE_MODEL_UID)) {\n return ctx.forbidden();\n }\n\n const data = await getService('upload').getSettings();\n\n ctx.body = { data };\n },\n};\n","import { yup, validateYupSchema } from '@strapi/utils';\nimport { isNil } from 'lodash/fp';\nimport { getService } from '../../../utils';\n\nconst fileInfoSchema = yup.object({\n name: yup.string().nullable(),\n alternativeText: yup.string().nullable(),\n caption: yup.string().nullable(),\n folder: yup\n .strapiID()\n .nullable()\n .test('folder-exists', 'the folder does not exist', async (folderId) => {\n if (isNil(folderId)) {\n return true;\n }\n\n const exists = await getService('folder').exists({ id: folderId });\n\n return exists;\n }),\n});\n\nconst uploadSchema = yup.object({\n fileInfo: fileInfoSchema,\n});\n\nconst multiUploadSchema = yup.object({\n fileInfo: yup.array().of(fileInfoSchema),\n});\n\nconst validateUploadBody = (data = {}, isMulti = false) => {\n const schema = isMulti ? multiUploadSchema : uploadSchema;\n\n return validateYupSchema(schema, { strict: false })(data);\n};\n\nexport { validateUploadBody };\n\nexport type UploadBody =\n | yup.InferType<typeof uploadSchema>\n | yup.InferType<typeof multiUploadSchema>;\n","import _ 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 { validateUploadBody } from './validation/admin/upload';\nimport { findEntityAndCheckPermissions } from './utils/find-entity-and-check-permissions';\nimport { FileInfo } from '../types';\n\nexport default {\n async updateFileInfo(ctx: Context) {\n const {\n state: { userAbility, user },\n query: { id },\n request: { body },\n } = ctx;\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 ctx.body = await pm.sanitizeOutput(file, { action: ACTIONS.read });\n },\n\n async replaceFile(ctx: Context) {\n const {\n state: { userAbility, user },\n query: { id },\n request: { body, files: { files } = {} },\n } = ctx;\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(files)) {\n throw new errors.ApplicationError('Cannot replace a file with multiple ones');\n }\n\n const data = (await validateUploadBody(body)) as { fileInfo: FileInfo };\n const replacedFile = await uploadService.replace(id, { data, file: files }, { user });\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 data = await validateUploadBody(body);\n const uploadedFiles = await uploadService.upload({ data, files }, { user });\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 // 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","import { yup, validateYupSchema } from '@strapi/utils';\n\nconst fileInfoSchema = yup\n .object({\n name: yup.string().nullable(),\n alternativeText: yup.string().nullable(),\n caption: yup.string().nullable(),\n })\n .noUnknown();\n\nconst uploadSchema = yup.object({\n fileInfo: fileInfoSchema,\n});\n\nconst multiUploadSchema = yup.object({\n fileInfo: yup.array().of(fileInfoSchema),\n});\n\nconst validateUploadBody = (data = {}, isMulti = false) => {\n const schema = isMulti ? multiUploadSchema : uploadSchema;\n\n return validateYupSchema(schema, { strict: false })(data);\n};\n\nexport { validateUploadBody };\n\nexport type UploadBody =\n | yup.InferType<typeof uploadSchema>\n | yup.InferType<typeof multiUploadSchema>;\n","import _ from 'lodash';\nimport utils from '@strapi/utils';\n\nimport type { Context } from 'koa';\nimport type { Core } from '@strapi/types';\n\nimport { getService } from '../utils';\nimport { FILE_MODEL_UID } from '../constants';\nimport { validateUploadBody } from './validation/content-api/upload';\nimport { FileInfo } from '../types';\n\nconst { ValidationError } = utils.errors;\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const sanitizeOutput = async (data: unknown | unknown[], ctx: Context) => {\n const schema = strapi.getModel(FILE_MODEL_UID);\n const { auth } = ctx.state;\n\n return strapi.contentAPI.sanitize.output(data, schema, { auth });\n };\n\n const validateQuery = async (data: Record<string, unknown>, ctx: Context) => {\n const schema = strapi.getModel(FILE_MODEL_UID);\n const { auth } = ctx.state;\n\n return strapi.contentAPI.validate.query(data, schema, { auth });\n };\n\n const sanitizeQuery = async (data: Record<string, unknown>, ctx: Context) => {\n const schema = strapi.getModel(FILE_MODEL_UID);\n const { auth } = ctx.state;\n\n return strapi.contentAPI.sanitize.query(data, schema, { auth });\n };\n\n return {\n async find(ctx: Context) {\n await validateQuery(ctx.query, ctx);\n const sanitizedQuery = await sanitizeQuery(ctx.query, ctx);\n\n const files = await getService('upload').findMany(sanitizedQuery);\n\n ctx.body = await sanitizeOutput(files, ctx);\n },\n\n async findOne(ctx: Context) {\n const {\n params: { id },\n } = ctx;\n\n await validateQuery(ctx.query, ctx);\n const sanitizedQuery = await sanitizeQuery(ctx.query, ctx);\n\n const file = await getService('upload').findOne(id, sanitizedQuery.populate!);\n\n if (!file) {\n return ctx.notFound('file.notFound');\n }\n\n ctx.body = await sanitizeOutput(file, ctx);\n },\n\n async destroy(ctx: Context) {\n const {\n params: { id },\n } = ctx;\n\n const file = await getService('upload').findOne(id);\n\n if (!file) {\n return ctx.notFound('file.notFound');\n }\n\n await getService('upload').remove(file);\n\n ctx.body = await sanitizeOutput(file, ctx);\n },\n\n async updateFileInfo(ctx: Context) {\n const {\n query: { id },\n request: { body },\n } = ctx;\n const data = await validateUploadBody(body);\n\n if (!id || (typeof id !== 'string' && typeof id !== 'number')) {\n throw new ValidationError('File id is required and must be a single value');\n }\n\n const result = await getService('upload').updateFileInfo(id, data.fileInfo as any);\n\n ctx.body = await sanitizeOutput(result, ctx);\n },\n\n async replaceFile(ctx: Context) {\n const {\n query: { id },\n request: { body, files: { files } = {} },\n } = ctx;\n\n // cannot replace with more than one file\n if (Array.isArray(files)) {\n throw new ValidationError('Cannot replace a file with multiple ones');\n }\n\n if (!id || (typeof id !== 'string' && typeof id !== 'number')) {\n throw new ValidationError('File id is required and must be a single value');\n }\n\n const data = (await validateUploadBody(body)) as { fileInfo: FileInfo };\n\n const replacedFiles = await getService('upload').replace(id, { data, file: files });\n\n ctx.body = await sanitizeOutput(replacedFiles, ctx);\n },\n\n async uploadFiles(ctx: Context) {\n const {\n request: { body, files: { files } = {} },\n } = ctx;\n\n const data: any = await validateUploadBody(body, Array.isArray(files));\n\n const apiUploadFolderService = getService('api-upload-folder');\n\n const apiUploadFolder = await apiUploadFolderService.getAPIUploadFolder();\n\n if (Array.isArray(files)) {\n data.fileInfo = data.fileInfo || [];\n data.fileInfo = files.map((_f, i) => ({ ...data.fileInfo[i], folder: apiUploadFolder.id }));\n } else {\n data.fileInfo = { ...data.fileInfo, folder: apiUploadFolder.id };\n }\n\n const uploadedFiles = await getService('upload').upload({\n data,\n files,\n });\n\n ctx.body = await sanitizeOutput(uploadedFiles as any, ctx);\n ctx.status = 201;\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 ValidationError('Files are empty');\n }\n\n await (id ? this.replaceFile : this.uploadFiles)(ctx);\n },\n };\n};\n","import { yup, validateYupSchema } from '@strapi/utils';\nimport { ALLOWED_SORT_STRINGS } from '../../../constants';\n\nconst configSchema = yup.object({\n pageSize: yup.number().required(),\n sort: yup.mixed().oneOf(ALLOWED_SORT_STRINGS),\n});\n\nexport const validateViewConfiguration = validateYupSchema(configSchema);\n\nexport type ViewConfiguration = yup.InferType<typeof configSchema>;\n","import type { Context } from 'koa';\n\nimport { getService } from '../utils';\nimport { ACTIONS } from '../constants';\nimport { validateViewConfiguration } from './validation/admin/configureView';\n\nexport default {\n async updateViewConfiguration(ctx: Context) {\n const {\n request: { body },\n state: { userAbility },\n } = ctx;\n\n if (userAbility.cannot(ACTIONS.configureView)) {\n return ctx.forbidden();\n }\n\n const data = await validateViewConfiguration(body);\n\n await getService('upload').setConfiguration(data);\n\n ctx.body = { data };\n },\n\n async findViewConfiguration(ctx: Context) {\n const data = await getService('upload').getConfiguration();\n\n ctx.body = { data };\n },\n};\n","import adminFile from './admin-file';\nimport adminFolder from './admin-folder';\nimport adminFolderFile from './admin-folder-file';\nimport adminSettings from './admin-settings';\nimport adminUpload from './admin-upload';\nimport contentApi from './content-api';\nimport viewConfiguration from './view-configuration';\n\nexport const controllers = {\n 'admin-file': adminFile,\n 'admin-folder': adminFolder,\n 'admin-folder-file': adminFolderFile,\n 'admin-settings': adminSettings,\n 'admin-upload': adminUpload,\n 'content-api': contentApi,\n 'view-configuration': viewConfiguration,\n};\n","import type {} from 'koa-body';\nimport type {} from '@strapi/types';\n\nimport { register } from './register';\nimport { bootstrap } from './bootstrap';\nimport { contentTypes } from './content-types';\nimport { services } from './services';\nimport { routes } from './routes';\nimport { config } from './config';\nimport { controllers } from './controllers';\n\nexport default () => ({\n register,\n bootstrap,\n config,\n routes,\n controllers,\n contentTypes,\n services,\n});\n"],"names":["strapi","server","app","on","err","code","onerror","localServerConfig","config","get","routes","method","path","handler","range","koaStatic","dirs","static","public","defer","auth","PayloadTooLargeError","errors","bytesToHumanReadable","kbytesToBytes","file","register","plugin","provider","createProvider","registerUploadMiddleware","installGraphqlExtension","service","registerOverride","spec","pluginOrigin","excludeFromGeneration","providerOptions","actionOptions","providerName","_","toLower","modulePath","require","resolve","error","newError","Error","stack","providerInstance","init","delete","upload","uploadStream","process","emitWarning","wrappedProvider","mapValues","methodName","options","Object","assign","create","baseProvider","extend","obj","checkFileSize","sizeLimit","size","originalFilename","getSignedUrl","isPrivate","getService","name","ACTIONS","read","readSettings","update","download","copyLink","configureView","ALLOWED_SORT_STRINGS","ALLOWED_WEBHOOK_EVENTS","MEDIA_CREATE","MEDIA_UPDATE","MEDIA_DELETE","FOLDER_MODEL_UID","FILE_MODEL_UID","API_UPLOAD_FOLDER_BASE_NAME","bootstrap","defaultConfig","settings","sizeOptimization","responsiveDimensions","autoOrientation","view_configuration","pageSize","sort","key","defaultValue","entries","configurator","store","type","keys","every","prototype","hasOwnProperty","call","set","value","registerPermissionActions","registerWebhookEvents","registerCron","sendUploadPluginMetrics","signFileUrlsOnDocumentService","forEach","addAllowedEvent","actions","section","displayName","uid","pluginName","subCategory","category","actionProvider","registerMany","schema","collectionName","info","singularName","pluralName","description","pluginOptions","visible","attributes","configurable","required","alternativeText","caption","width","height","formats","hash","ext","mime","url","previewUrl","provider_metadata","related","relation","folder","target","inversedBy","private","folderPath","minLength","searchable","indexes","columns","pathId","unique","parent","children","mappedBy","files","contentTypes","isFunction","stream","getStream","filepath","buffer","fileUtils","streamToBuffer","UPDATED_BY_ATTRIBUTE","CREATED_BY_ATTRIBUTE","contentTypesUtils","constants","ApplicationError","NotFoundError","bytesToKbytes","randomSuffix","crypto","randomBytes","toString","generateFileName","baseName","strings","nameToSlug","separator","lowercase","sendMediaMetrics","data","has","isEmpty","telemetry","send","createAndAssignTmpWorkingDirectoryToFiles","tmpWorkingDirectory","fse","mkdtemp","join","os","tmpdir","Array","isArray","filenameReservedRegex","windowsReservedNameRegex","isValidFilename","string","length","test","emitEvent","event","modelDef","getModel","sanitizedData","sanitize","sanitizers","defaultSanitizeOutput","eventHub","emit","media","formatFileInfo","filename","fileInfo","metas","fileService","extname","extension","usedName","normalize","basename","entity","getFolderPath","sizeInBytes","refId","ref","field","id","__type","__pivot","enhanceAndValidateFile","currentFile","mimetype","fs","createReadStream","optimize","isImage","isFaultyImage","isOptimizableImage","opts","user","uploadedFiles","fileArray","fileInfoArray","doUpload","fileData","uploadFileAndPersist","Promise","all","map","idx","remove","uploadImage","getDimensions","generateThumbnail","generateResponsiveFormats","isResizableImage","uploadThumbnail","thumbnailFile","uploadResponsiveFormat","format","uploadPromises","push","add","updateFileInfo","dbFile","findOne","newName","isNil","newInfos","isUndefined","replace","values","fileValues","res","db","query","where","populate","transform","findMany","findPage","getSettings","setSettings","getConfiguration","setConfiguration","_uploadImage","FORMATS_TO_RESIZE","FORMATS_TO_PROCESS","FORMATS_TO_OPTIMIZE","isOptimizableFormat","undefined","includes","writeStreamToFile","reject","writeStream","createWriteStream","pipe","getMetadata","pipeline","sharp","metadata","then","catch","THUMBNAIL_RESIZE_OPTIONS","fit","resizeFileTo","filePath","newInfo","resize","toFile","newFile","transformer","quality","rotate","newWidth","newHeight","newSize","DEFAULT_BREAKPOINTS","large","medium","small","getBreakpoints","originalDimensions","breakpoints","breakpoint","breakpointSmallerThan","generateBreakpoint","stats","e","setPathIdAndPath","max","queryBuilder","first","execute","parentPath","parentFolder","joinBy","folderData","folderService","enrichedFolder","setCreatorFields","deleteByIds","ids","folders","$in","totalFolderNumber","totalFileNumber","pathsToDelete","filesToDelete","$or","flatMap","$eq","$startsWith","count","deleteMany","existingFolder","newFolder","isEdition","trx","transaction","select","transacting","forUpdate","joinTable","joinColumn","insert","inverseJoinColumn","destinationFolderPath","destinationFolder","folderTable","fileTable","folderPathColumnName","columnName","pathColumnName","getConnection","orWhere","connection","raw","commit","rollback","exists","params","getStructure","qb","alias","getAlias","referencedTable","referencedColumn","rootColumn","rootTable","mapResults","folderMap","null","f","parentId","sortBy","folderId","signFileUrls","plugins","providerConfig","isUrlSigned","signUrl","signedUrl","signedFile","cloneDeep","async","getWeeklyCronScheduleAt","date","getSeconds","getMinutes","getHours","getDay","ONE_WEEK","getMetricsStoreValue","defaultTo","setMetricsStoreValue","computeMetrics","pathColName","keepOnlySlashesSQLString","queryParams","i","String","groupBy","folderLevelsArray","depth","Number","occurence","product","folderNumber","maxDepth","folderLevel","averageDepth","sumOfDeviation","Math","abs","averageDeviationDepth","assetNumber","sendMetrics","metrics","groupProperties","metricsInfoStored","lastWeeklyUpdate","Date","getTime","ensureWeeklyStoredCronSchedule","weeklySchedule","currentSchedule","now","seconds","cron","uploadWeekly","task","bind","getProviderName","isProviderPrivate","uploadProvider","privateProvider","getStore","createApiUploadFolder","index","getAPIUploadFolder","storeValue","isFile","attribute","signEntityMediaVisitor","multiple","signedFiles","signEntityMedia","model","traverseEntity","documents","use","ctx","next","result","action","entry","services","weeklyMetrics","imageManipulation","apiUploadFolder","extensions","policies","admin","contentApi","viewConfiguration","default","enabled","validator","findEntityAndCheckPermissions","ability","pm","createPermissionsManager","creatorId","author","fileWithRoles","cannot","toSubject","ForbiddenError","find","state","userAbility","defaultQuery","isAllowed","forbidden","validateQuery","q","sanitizeQuery","merge","addPermissionsQueryTo","results","pagination","sanitizedFiles","sanitizeOutput","body","destroy","folderExists","isFolderOrChild","folderOrChild","startsWith","NO_SLASH_REGEX","NO_SPACES_AROUND","isNameUniqueInFolder","filters","$ne","doesExist","validateCreateFolderSchema","yup","object","shape","min","matches","strapiID","nullable","noUnknown","validateUpdateFolderSchema","currentFolder","validateCreateFolder","validateYupSchema","validateUpdateFolder","permissionsManager","defaultsDeep","notFound","request","created","updatedFolder","structure","validateDeleteManyFoldersFilesSchema","fileIds","array","of","folderIds","validateStructureMoveManyFoldersFilesSchema","destinationFolderId","defined","validateDuplicatesMoveManyFoldersFilesSchema","areFoldersUnique","existingFolders","duplicatedNames","intersection","createError","message","validateMoveFoldersNotInsideThemselvesSchema","validateMoveFoldersNotInsideThemselves","unmovableFoldersNames","filter","validateDeleteManyFoldersFiles","validateMoveManyFoldersFiles","pmFolder","pmFile","deletedFiles","deletedFolders","eventProperties","rootFolderNumber","rootAssetNumber","totalAssetNumber","moveMany","existingFiles","folderPathColName","replaceQuery","dialect","client","fileJoinTable","whereIn","updatedFolders","updatedFiles","settingsSchema","boolean","updateSettings","validateSettings","fileInfoSchema","uploadSchema","multiUploadSchema","validateUploadBody","isMulti","strict","ValidationError","uploadService","replaceFile","replacedFile","uploadFiles","status","utils","contentAPI","output","validate","sanitizedQuery","replacedFiles","apiUploadFolderService","_f","configSchema","number","mixed","oneOf","validateViewConfiguration","updateViewConfiguration","findViewConfiguration","controllers","adminFile","adminFolder","adminFolderFile","adminSettings","adminUpload"],"mappings":"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"}
|
package/dist/server/index.js
CHANGED
package/dist/server/index.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/upload",
|
|
3
|
-
"version": "5.12.
|
|
3
|
+
"version": "5.12.1",
|
|
4
4
|
"description": "Makes it easy to upload images and files to your Strapi Application.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"author": {
|
|
@@ -63,8 +63,8 @@
|
|
|
63
63
|
"@mux/mux-player-react": "3.1.0",
|
|
64
64
|
"@strapi/design-system": "2.0.0-rc.18",
|
|
65
65
|
"@strapi/icons": "2.0.0-rc.18",
|
|
66
|
-
"@strapi/provider-upload-local": "5.12.
|
|
67
|
-
"@strapi/utils": "5.12.
|
|
66
|
+
"@strapi/provider-upload-local": "5.12.1",
|
|
67
|
+
"@strapi/utils": "5.12.1",
|
|
68
68
|
"byte-size": "8.1.1",
|
|
69
69
|
"cropperjs": "1.6.1",
|
|
70
70
|
"date-fns": "2.30.0",
|
|
@@ -86,8 +86,8 @@
|
|
|
86
86
|
"yup": "0.32.9"
|
|
87
87
|
},
|
|
88
88
|
"devDependencies": {
|
|
89
|
-
"@strapi/admin": "5.12.
|
|
90
|
-
"@strapi/types": "5.12.
|
|
89
|
+
"@strapi/admin": "5.12.1",
|
|
90
|
+
"@strapi/types": "5.12.1",
|
|
91
91
|
"@testing-library/dom": "10.1.0",
|
|
92
92
|
"@testing-library/react": "15.0.7",
|
|
93
93
|
"@testing-library/user-event": "14.5.2",
|