@strapi/core 5.11.1 → 5.11.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/configuration/urls.ts","../src/utils/load-config-file.ts","../src/configuration/config-loader.ts","../src/configuration/get-dirs.ts","../src/configuration/index.ts","../src/core-api/controller/transform.ts","../src/core-api/controller/single-type.ts","../src/core-api/controller/collection-type.ts","../src/services/request-context.ts","../src/core-api/controller/index.ts","../src/core-api/service/core-service.ts","../src/core-api/service/single-type.ts","../src/core-api/service/pagination.ts","../src/core-api/service/collection-type.ts","../src/core-api/service/index.ts","../src/core-api/routes/index.ts","../src/factories.ts","../src/utils/open-browser.ts","../src/utils/is-initialized.ts","../src/ee/license.ts","../src/utils/cron.ts","../src/ee/index.ts","../src/utils/update-notifier/index.ts","../src/utils/fetch.ts","../src/utils/convert-custom-field-type.ts","../src/utils/startup-logger.ts","../src/utils/transform-content-types-to-models.ts","../src/utils/signals.ts","../src/utils/lifecycles.ts","../src/utils/resolve-working-dirs.ts","../src/container.ts","../src/services/fs.ts","../src/services/event-hub.ts","../src/services/server/http-server.ts","../src/services/server/middleware.ts","../src/services/server/policy.ts","../src/services/server/compose-endpoint.ts","../src/services/server/routing.ts","../src/services/server/api.ts","../src/services/server/admin-api.ts","../src/services/server/content-api.ts","../src/services/server/register-routes.ts","../src/services/server/register-middlewares.ts","../src/services/errors.ts","../src/services/server/koa.ts","../src/services/server/index.ts","../src/services/reloader.ts","../src/providers/provider.ts","../src/domain/content-type/validator.ts","../src/domain/content-type/index.ts","../src/loaders/admin.ts","../src/providers/admin.ts","../src/services/core-store.ts","../src/providers/coreStore.ts","../src/services/cron.ts","../src/providers/cron.ts","../src/registries/namespace.ts","../src/registries/content-types.ts","../src/registries/components.ts","../src/registries/services.ts","../src/registries/policies.ts","../src/registries/middlewares.ts","../src/registries/hooks.ts","../src/registries/controllers.ts","../src/domain/module/validation.ts","../src/domain/module/index.ts","../src/registries/modules.ts","../src/registries/plugins.ts","../src/registries/custom-fields.ts","../src/registries/apis.ts","../src/registries/sanitizers.ts","../src/registries/validators.ts","../src/registries/models.ts","../src/loaders/src-index.ts","../src/loaders/apis.ts","../src/middlewares/compression.ts","../src/middlewares/cors.ts","../src/middlewares/errors.ts","../src/middlewares/favicon.ts","../src/middlewares/ip.ts","../src/middlewares/logger.ts","../src/middlewares/powered-by.ts","../src/middlewares/body.ts","../src/middlewares/query.ts","../src/middlewares/response-time.ts","../src/middlewares/responses.ts","../src/middlewares/security.ts","../src/middlewares/session.ts","../src/middlewares/public.ts","../src/middlewares/index.ts","../src/loaders/middlewares.ts","../src/utils/filepath-to-prop-path.ts","../src/utils/load-files.ts","../src/loaders/components.ts","../src/loaders/policies.ts","../src/loaders/plugins/get-user-plugins-config.ts","../src/loaders/plugins/get-enabled-plugins.ts","../src/loaders/plugins/index.ts","../src/loaders/sanitizers.ts","../src/loaders/validators.ts","../src/loaders/index.ts","../src/services/document-service/middlewares/errors.ts","../src/services/document-service/middlewares/middleware-manager.ts","../src/services/document-service/common.ts","../src/services/document-service/draft-and-publish.ts","../src/services/document-service/internationalization.ts","../src/services/document-service/components.ts","../src/services/document-service/transform/id-map.ts","../src/services/document-service/transform/relations/utils/i18n.ts","../src/services/document-service/transform/relations/utils/dp.ts","../src/services/document-service/transform/relations/utils/map-relation.ts","../src/services/document-service/transform/relations/extract/data-ids.ts","../src/services/document-service/transform/relations/transform/data-ids.ts","../src/services/document-service/transform/relations/transform/default-locale.ts","../src/services/document-service/transform/data.ts","../src/services/document-service/transform/fields.ts","../src/services/document-service/transform/populate.ts","../src/services/document-service/transform/id-transform.ts","../src/services/document-service/transform/query.ts","../src/services/document-service/params.ts","../src/services/document-service/attributes/transforms.ts","../src/services/document-service/attributes/index.ts","../src/services/document-service/entries.ts","../src/services/document-service/utils/populate.ts","../src/services/document-service/events.ts","../src/services/document-service/utils/unidirectional-relations.ts","../src/services/document-service/utils/bidirectional-relations.ts","../src/services/entity-validator/blocks-validator.ts","../src/services/entity-validator/validators.ts","../src/services/entity-validator/index.ts","../src/services/document-service/repository.ts","../src/services/document-service/index.ts","../src/migrations/database/5.0.0-discard-drafts.ts","../src/migrations/draft-publish.ts","../src/migrations/i18n.ts","../src/migrations/index.ts","../src/providers/registries.ts","../src/services/metrics/rate-limiter.ts","../src/services/metrics/admin-user-hash.ts","../src/services/metrics/sender.ts","../src/services/metrics/middleware.ts","../src/services/metrics/is-truthy.ts","../src/services/metrics/index.ts","../src/providers/telemetry.ts","../src/services/webhook-store.ts","../src/services/worker-queue.ts","../src/services/webhook-runner.ts","../src/providers/webhooks.ts","../src/providers/index.ts","../src/services/entity-service/index.ts","../src/services/query-params.ts","../src/services/auth/index.ts","../src/services/custom-fields.ts","../src/services/content-api/permissions/providers/action.ts","../src/services/content-api/permissions/providers/condition.ts","../src/services/content-api/permissions/engine.ts","../src/services/content-api/permissions/index.ts","../src/services/content-api/index.ts","../src/services/utils/dynamic-zones.ts","../src/services/features.ts","../src/services/config.ts","../src/Strapi.ts","../src/compile.ts","../src/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { strings } from '@strapi/utils';\n\ninterface ServerConfig {\n url: string;\n host: string;\n port: number | string;\n}\n\nexport const getConfigUrls = (config: Record<string, unknown>, forAdminBuild = false) => {\n const serverConfig = config.server as ServerConfig;\n const adminConfig = config.admin;\n\n // Defines serverUrl value\n let serverUrl = _.get(serverConfig, 'url', '');\n serverUrl = _.trim(serverUrl, '/ ');\n if (typeof serverUrl !== 'string') {\n throw new Error('Invalid server url config. Make sure the url is a string.');\n }\n\n if (serverUrl.startsWith('http')) {\n try {\n serverUrl = _.trim(new URL(serverConfig.url).toString(), '/');\n } catch (e) {\n throw new Error(\n 'Invalid server url config. Make sure the url defined in server.js is valid.'\n );\n }\n } else if (serverUrl !== '') {\n serverUrl = `/${serverUrl}`;\n }\n\n // Defines adminUrl value\n let adminUrl = _.get(adminConfig, 'url', '/admin');\n adminUrl = _.trim(adminUrl, '/ ');\n if (typeof adminUrl !== 'string') {\n throw new Error('Invalid admin url config. Make sure the url is a non-empty string.');\n }\n if (adminUrl.startsWith('http')) {\n try {\n adminUrl = _.trim(new URL(adminUrl).toString(), '/');\n } catch (e) {\n throw new Error('Invalid admin url config. Make sure the url defined in server.js is valid.');\n }\n } else {\n adminUrl = `${serverUrl}/${adminUrl}`;\n }\n\n // Defines adminPath value\n let adminPath = adminUrl;\n if (\n serverUrl.startsWith('http') &&\n adminUrl.startsWith('http') &&\n new URL(adminUrl).origin === new URL(serverUrl).origin &&\n !forAdminBuild\n ) {\n adminPath = adminUrl.replace(strings.getCommonPath(serverUrl, adminUrl), '');\n adminPath = `/${_.trim(adminPath, '/')}`;\n } else if (adminUrl.startsWith('http')) {\n adminPath = new URL(adminUrl).pathname;\n }\n\n return {\n serverUrl,\n adminUrl,\n adminPath,\n };\n};\n\nconst getAbsoluteUrl =\n (adminOrServer: 'admin' | 'server') =>\n (config: Record<string, unknown>, forAdminBuild = false) => {\n const { serverUrl, adminUrl } = getConfigUrls(config, forAdminBuild);\n const url = adminOrServer === 'server' ? serverUrl : adminUrl;\n\n if (url.startsWith('http')) {\n return url;\n }\n\n const serverConfig = config.server as ServerConfig;\n const hostname =\n config.environment === 'development' && ['127.0.0.1', '0.0.0.0'].includes(serverConfig.host)\n ? 'localhost'\n : serverConfig.host;\n\n return `http://${hostname}:${serverConfig.port}${url}`;\n };\n\nexport const getAbsoluteAdminUrl = getAbsoluteUrl('admin');\nexport const getAbsoluteServerUrl = getAbsoluteUrl('server');\n","import path from 'path';\nimport fs from 'fs';\nimport { env, importDefault } from '@strapi/utils';\n\nconst loadJsFile = (file: string) => {\n try {\n const jsModule = importDefault(file);\n\n // call if function\n if (typeof jsModule === 'function') {\n return jsModule({ env });\n }\n\n return jsModule;\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Could not load js config file ${file}: ${error.message}`);\n }\n\n throw new Error('Unknown error');\n }\n};\n\nconst loadJSONFile = (file: string) => {\n try {\n return JSON.parse(fs.readFileSync(file).toString());\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Could not load json config file ${file}: ${error.message}`);\n }\n\n throw new Error('Unknown error');\n }\n};\n\nexport const loadConfigFile = (file: string) => {\n const ext = path.extname(file);\n\n switch (ext) {\n case '.js':\n return loadJsFile(file);\n case '.json':\n return loadJSONFile(file);\n default:\n return {};\n }\n};\n","import path from 'path';\nimport fs from 'fs';\nimport { loadConfigFile } from '../utils/load-config-file';\n\nconst VALID_EXTENSIONS = ['.js', '.json'];\n\n// These filenames are restricted, but will also emit a warning that the filename is probably a mistake\nconst MISTAKEN_FILENAMES = {\n middleware: 'middlewares',\n plugin: 'plugins',\n};\n\n// the following are restricted to prevent conflicts with existing STRAPI_* env vars or root level config options\n// must all be lowercase to match validator\nconst RESTRICTED_FILENAMES = [\n // existing env vars\n 'uuid',\n 'hosting',\n 'license',\n 'enforce',\n 'disable',\n 'enable',\n 'telemetry',\n\n // reserved for future internal use\n 'strapi',\n 'internal',\n\n // root level config options\n // TODO: it would be better to move these out of the root config and allow them to be loaded\n 'launchedAt',\n 'serveAdminPanel',\n 'autoReload',\n 'environment',\n 'packageJsonStrapi',\n 'info',\n 'autoReload',\n 'dirs',\n\n // probably mistaken/typo filenames\n ...Object.keys(MISTAKEN_FILENAMES),\n];\n\n// Existing Strapi configuration files\nconst STRAPI_CONFIG_FILENAMES = [\n 'admin',\n 'server',\n 'api',\n 'database',\n 'middlewares',\n 'plugins',\n 'features',\n];\n\n// Note: we don't have access to strapi logger at this point so we can't use it\nconst logWarning = (message: string) => {\n console.warn(message);\n};\n\nexport default (dir: string) => {\n if (!fs.existsSync(dir)) return {};\n\n const allFiles = fs.readdirSync(dir, { withFileTypes: true });\n const seenFilenames = new Set<string>();\n const configFiles = allFiles.reduce((acc, file) => {\n const baseName = path.basename(file.name, path.extname(file.name));\n const baseNameLower = baseName.toLowerCase();\n const extension = path.extname(file.name);\n const extensionLower = extension.toLowerCase();\n\n if (!file.isFile()) {\n return acc;\n }\n\n if (!VALID_EXTENSIONS.includes(extensionLower)) {\n logWarning(\n `Config file not loaded, extension must be one of ${VALID_EXTENSIONS.join(',')}): ${\n file.name\n }`\n );\n return acc;\n }\n\n if (RESTRICTED_FILENAMES.includes(baseNameLower)) {\n logWarning(`Config file not loaded, restricted filename: ${file.name}`);\n\n // suggest the filename they probably meant\n if (baseNameLower in MISTAKEN_FILENAMES) {\n console.log(\n `Did you mean ${MISTAKEN_FILENAMES[baseNameLower as keyof typeof MISTAKEN_FILENAMES]}]} ?`\n );\n }\n\n return acc;\n }\n\n // restricted names and Strapi configs are also restricted from being prefixes\n const restrictedPrefix = [...RESTRICTED_FILENAMES, ...STRAPI_CONFIG_FILENAMES].find(\n (restrictedName) =>\n restrictedName.startsWith(baseNameLower) && restrictedName !== baseNameLower\n );\n if (restrictedPrefix) {\n logWarning(\n `Config file not loaded, filename cannot start with ${restrictedPrefix}: ${file.name}`\n );\n }\n\n /**\n * Note: If user config files contain non-alpha-numeric characters, we won't be able to auto-load env\n * into them.\n *\n * For the initial feature, we will only load our internal configs, but later when we provide a method\n * to define the shape of custom configs, we will need to warn that those filenames can't be loaded\n * for technical limitations on env variable names\n * */\n // if (!/^[A-Za-z0-9]+$/.test(baseName)) {\n // logWarning(\"Using a non-alphanumeric config file name prevents Strapi from auto-loading it from environment variables.\")\n // }\n\n // filter filenames without case-insensitive uniqueness\n if (seenFilenames.has(baseNameLower)) {\n logWarning(\n `Config file not loaded, case-insensitive name matches other config file: ${file.name}`\n );\n return acc;\n }\n seenFilenames.add(baseNameLower);\n\n // If file passes all filters, add it to the accumulator\n acc.push(file);\n return acc;\n }, [] as fs.Dirent[]);\n\n return configFiles.reduce(\n (acc, file) => {\n const key = path.basename(file.name, path.extname(file.name));\n\n acc[key] = loadConfigFile(path.resolve(dir, file.name));\n\n return acc;\n },\n {} as Record<string, unknown>\n );\n};\n","import { join, resolve } from 'path';\nimport { get } from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\nimport type { StrapiOptions } from '../Strapi';\n\nexport type Options = {\n app: string;\n dist: string;\n};\n\nexport const getDirs = (\n { appDir, distDir }: StrapiOptions,\n config: { server: Partial<Core.Config.Server> }\n): Core.StrapiDirectories => ({\n dist: {\n root: distDir,\n src: join(distDir, 'src'),\n api: join(distDir, 'src', 'api'),\n components: join(distDir, 'src', 'components'),\n extensions: join(distDir, 'src', 'extensions'),\n policies: join(distDir, 'src', 'policies'),\n middlewares: join(distDir, 'src', 'middlewares'),\n config: join(distDir, 'config'),\n },\n app: {\n root: appDir,\n src: join(appDir, 'src'),\n api: join(appDir, 'src', 'api'),\n components: join(appDir, 'src', 'components'),\n extensions: join(appDir, 'src', 'extensions'),\n policies: join(appDir, 'src', 'policies'),\n middlewares: join(appDir, 'src', 'middlewares'),\n config: join(appDir, 'config'),\n },\n static: {\n public: resolve(appDir, get('server.dirs.public', config)),\n },\n});\n","/* eslint-disable @typescript-eslint/no-var-requires */\nimport os from 'os';\nimport path from 'path';\nimport _ from 'lodash';\nimport { omit } from 'lodash/fp';\nimport dotenv from 'dotenv';\nimport type { Core } from '@strapi/types';\nimport { strings } from '@strapi/utils';\n\nimport { getConfigUrls, getAbsoluteAdminUrl, getAbsoluteServerUrl } from './urls';\nimport loadConfigDir from './config-loader';\nimport { getDirs } from './get-dirs';\n\nimport type { StrapiOptions } from '../Strapi';\nimport { version as strapiVersion } from '../../package.json';\n\ndotenv.config({ path: process.env.ENV_PATH });\n\nprocess.env.NODE_ENV = process.env.NODE_ENV || 'development';\n\nconst defaultConfig = {\n server: {\n host: process.env.HOST || os.hostname() || 'localhost',\n port: Number(process.env.PORT) || 1337,\n proxy: false,\n cron: { enabled: false },\n admin: { autoOpen: false },\n dirs: { public: './public' },\n transfer: {\n remote: {\n enabled: true,\n },\n },\n logger: {\n updates: {\n enabled: true,\n },\n startup: {\n enabled: true,\n },\n },\n } satisfies Partial<Core.Config.Server>,\n admin: {} satisfies Partial<Core.Config.Admin>,\n api: {\n rest: {\n prefix: '/api',\n },\n } satisfies Partial<Core.Config.Api>,\n};\n\nexport const loadConfiguration = (opts: StrapiOptions) => {\n const { appDir, distDir, autoReload = false, serveAdminPanel = true } = opts;\n\n const pkgJSON = require(path.resolve(appDir, 'package.json'));\n\n const configDir = path.resolve(distDir || process.cwd(), 'config');\n\n const rootConfig = {\n launchedAt: Date.now(),\n autoReload,\n environment: process.env.NODE_ENV,\n uuid: _.get(pkgJSON, 'strapi.uuid'),\n packageJsonStrapi: _.omit(_.get(pkgJSON, 'strapi', {}), 'uuid'),\n info: {\n ...pkgJSON,\n strapi: strapiVersion,\n },\n admin: {\n serveAdminPanel,\n },\n };\n\n // See packages/core/core/src/domain/module/index.ts for plugin config loading\n const baseConfig = omit('plugins', loadConfigDir(configDir)); // plugin config will be loaded later\n\n const envDir = path.resolve(configDir, 'env', process.env.NODE_ENV as string);\n const envConfig = loadConfigDir(envDir);\n\n const config = _.merge(rootConfig, defaultConfig, baseConfig, envConfig);\n\n const { serverUrl, adminUrl } = getConfigUrls(config);\n\n const serverAbsoluteUrl = getAbsoluteServerUrl(config);\n const adminAbsoluteUrl = getAbsoluteAdminUrl(config);\n\n const sameOrigin = new URL(adminAbsoluteUrl).origin === new URL(serverAbsoluteUrl).origin;\n\n const adminPath = sameOrigin\n ? adminUrl.replace(strings.getCommonPath(serverUrl, adminUrl), '')\n : new URL(adminUrl).pathname;\n\n _.set(config, 'server.url', serverUrl);\n _.set(config, 'server.absoluteUrl', serverAbsoluteUrl);\n _.set(config, 'admin.url', adminUrl);\n _.set(config, 'admin.path', adminPath);\n _.set(config, 'admin.absoluteUrl', adminAbsoluteUrl);\n _.set(config, 'dirs', getDirs(opts, config));\n\n return config;\n};\n","import { isNil, isPlainObject } from 'lodash/fp';\nimport type { UID, Struct, Data } from '@strapi/types';\n\ntype TransformedEntry = {\n id: string;\n documentId?: Data.DocumentID | null;\n attributes: Record<string, unknown>;\n};\n\ntype TransformedComponent = {\n id: string;\n [key: string]: unknown;\n};\n\ntype Entry = {\n id: string;\n documentId: Data.DocumentID | null;\n [key: string]: Entry | Entry[] | string | number | null | boolean | Date;\n};\n\nfunction isEntry(property: unknown): property is Entry | Entry[] {\n return property === null || isPlainObject(property) || Array.isArray(property);\n}\n\nfunction isDZEntries(property: unknown): property is (Entry & { __component: UID.Component })[] {\n return Array.isArray(property);\n}\n\ninterface TransformOptions {\n contentType?: Struct.ContentTypeSchema | Struct.ComponentSchema;\n /**\n * @deprecated this option is deprecated and will be removed in the next major version\n */\n useJsonAPIFormat?: boolean;\n}\n\nconst transformResponse = (\n resource: any,\n meta: unknown = {},\n opts: TransformOptions = {\n useJsonAPIFormat: false,\n }\n) => {\n if (isNil(resource)) {\n return resource;\n }\n\n if (!isPlainObject(resource) && !Array.isArray(resource)) {\n throw new Error('Entry must be an object or an array of objects');\n }\n\n return {\n data: opts.useJsonAPIFormat ? transformEntry(resource, opts?.contentType) : resource,\n meta,\n };\n};\n\nfunction transformComponent<T extends Entry | Entry[] | null>(\n data: T,\n component: Struct.ComponentSchema\n): T extends Entry[] ? TransformedComponent[] : T extends Entry ? TransformedComponent : null;\nfunction transformComponent(\n data: Entry | Entry[] | null,\n component: Struct.ComponentSchema\n): TransformedComponent | TransformedComponent[] | null {\n if (Array.isArray(data)) {\n return data.map((datum) => transformComponent(datum, component));\n }\n\n const res = transformEntry(data, component);\n\n if (isNil(res)) {\n return res;\n }\n\n const { id, attributes } = res;\n return { id, ...attributes };\n}\n\nfunction transformEntry<T extends Entry | Entry[] | null>(\n entry: T,\n type?: Struct.Schema\n): T extends Entry[] ? TransformedEntry[] : T extends Entry ? TransformedEntry : null;\nfunction transformEntry(\n entry: Entry | Entry[] | null,\n type?: Struct.Schema\n): TransformedEntry | TransformedEntry[] | null {\n if (isNil(entry)) {\n return entry;\n }\n\n if (Array.isArray(entry)) {\n return entry.map((singleEntry) => transformEntry(singleEntry, type));\n }\n\n if (!isPlainObject(entry)) {\n throw new Error('Entry must be an object');\n }\n\n const { id, documentId, ...properties } = entry;\n\n const attributeValues: Record<string, unknown> = {};\n\n for (const key of Object.keys(properties)) {\n const property = properties[key];\n const attribute = type && type.attributes[key];\n\n if (attribute && attribute.type === 'relation' && isEntry(property) && 'target' in attribute) {\n const data = transformEntry(property, strapi.contentType(attribute.target));\n\n attributeValues[key] = { data };\n } else if (attribute && attribute.type === 'component' && isEntry(property)) {\n attributeValues[key] = transformComponent(property, strapi.components[attribute.component]);\n } else if (attribute && attribute.type === 'dynamiczone' && isDZEntries(property)) {\n if (isNil(property)) {\n attributeValues[key] = property;\n }\n\n attributeValues[key] = property.map((subProperty) => {\n return transformComponent(subProperty, strapi.components[subProperty.__component]);\n });\n } else if (attribute && attribute.type === 'media' && isEntry(property)) {\n const data = transformEntry(property, strapi.contentType('plugin::upload.file'));\n\n attributeValues[key] = { data };\n } else {\n attributeValues[key] = property;\n }\n }\n\n return {\n id,\n documentId,\n attributes: attributeValues,\n };\n}\n\nexport { transformResponse };\n","import { isObject } from 'lodash/fp';\nimport { errors } from '@strapi/utils';\nimport type { Struct, Core, Utils, UID } from '@strapi/types';\n\ninterface Options {\n contentType: Struct.SingleTypeSchema;\n}\n\n/**\n * Returns a single type controller to handle default core-api actions\n */\nconst createSingleTypeController = ({\n contentType,\n}: Options): Utils.PartialWithThis<Core.CoreAPI.Controller.SingleType> => {\n const uid = contentType.uid as UID.Service;\n\n // TODO: transform into a class\n return {\n /**\n * Retrieve single type content\n *\n */\n async find(ctx) {\n await this.validateQuery(ctx);\n const sanitizedQuery = await this.sanitizeQuery(ctx);\n\n const entity = await strapi.service(uid).find(sanitizedQuery);\n\n const sanitizedEntity = await this.sanitizeOutput(entity, ctx);\n\n return this.transformResponse(sanitizedEntity);\n },\n\n /**\n * create or update single type content.\n */\n async update(ctx) {\n const { query, body = {} as any } = ctx.request;\n\n if (!isObject(body.data)) {\n throw new errors.ValidationError('Missing \"data\" payload in the request body');\n }\n\n await this.validateInput(body.data, ctx);\n\n const sanitizedInputData = await this.sanitizeInput(body.data, ctx);\n\n const entity = await strapi.service(uid).createOrUpdate({\n ...query,\n data: sanitizedInputData,\n });\n\n const sanitizedEntity = await this.sanitizeOutput(entity, ctx);\n\n return this.transformResponse(sanitizedEntity);\n },\n\n async delete(ctx) {\n const { query } = ctx;\n\n await strapi.service(uid).delete(query);\n\n ctx.status = 204;\n },\n };\n};\n\nexport { createSingleTypeController };\n","import { isObject } from 'lodash/fp';\nimport { errors } from '@strapi/utils';\nimport type { Core, Struct, Utils, UID } from '@strapi/types';\nimport type Koa from 'koa';\n\ninterface Options {\n contentType: Struct.CollectionTypeSchema;\n}\n\n/**\n *\n * Returns a collection type controller to handle default core-api actions\n */\nconst createCollectionTypeController = ({\n contentType,\n}: Options): Utils.PartialWithThis<Core.CoreAPI.Controller.CollectionType> => {\n const uid = contentType.uid as UID.Service;\n\n // TODO: transform into a class\n return {\n /**\n * Retrieve records.\n */\n async find(ctx) {\n await this.validateQuery(ctx);\n const sanitizedQuery = await this.sanitizeQuery(ctx);\n\n const { results, pagination } = await strapi.service(uid).find(sanitizedQuery);\n const sanitizedResults = await this.sanitizeOutput(results, ctx);\n return this.transformResponse(sanitizedResults, { pagination });\n },\n\n /**\n * Retrieve a record\n */\n async findOne(ctx) {\n const { id } = ctx.params;\n await this.validateQuery(ctx);\n const sanitizedQuery = await this.sanitizeQuery(ctx);\n\n const entity = await strapi.service(uid).findOne(id, sanitizedQuery);\n const sanitizedEntity = await this.sanitizeOutput(entity, ctx);\n\n return this.transformResponse(sanitizedEntity);\n },\n\n /**\n * Create a record.\n */\n async create(ctx) {\n await this.validateQuery(ctx);\n const sanitizedQuery = await this.sanitizeQuery(ctx);\n\n const { body = {} as any } = ctx.request;\n\n if (!isObject(body.data)) {\n throw new errors.ValidationError('Missing \"data\" payload in the request body');\n }\n\n await this.validateInput(body.data, ctx);\n\n const sanitizedInputData = await this.sanitizeInput(body.data, ctx);\n\n const entity = await strapi.service(uid).create({\n ...sanitizedQuery,\n data: sanitizedInputData,\n });\n\n const sanitizedEntity = await this.sanitizeOutput(entity, ctx);\n\n ctx.status = 201;\n return this.transformResponse(sanitizedEntity);\n },\n\n /**\n * Update a record.\n */\n async update(ctx: Koa.Context) {\n const { id } = ctx.params;\n await this.validateQuery(ctx);\n const sanitizedQuery = await this.sanitizeQuery(ctx);\n\n const { body = {} as any } = ctx.request;\n\n if (!isObject(body.data)) {\n throw new errors.ValidationError('Missing \"data\" payload in the request body');\n }\n\n await this.validateInput(body.data, ctx);\n\n const sanitizedInputData = await this.sanitizeInput(body.data, ctx);\n\n const entity = await strapi.service(uid).update(id, {\n ...sanitizedQuery,\n data: sanitizedInputData,\n });\n\n const sanitizedEntity = await this.sanitizeOutput(entity, ctx);\n\n return this.transformResponse(sanitizedEntity);\n },\n\n /**\n * Destroy a record.\n */\n async delete(ctx) {\n const { id } = ctx.params;\n await this.validateQuery(ctx);\n const sanitizedQuery = await this.sanitizeQuery(ctx);\n\n await strapi.service(uid).delete(id, sanitizedQuery);\n\n ctx.status = 204;\n },\n };\n};\n\nexport { createCollectionTypeController };\n","import { AsyncLocalStorage } from 'async_hooks';\nimport type { ParameterizedContext } from 'koa';\n\nconst storage = new AsyncLocalStorage<ParameterizedContext>();\n\nconst requestCtx = {\n async run(store: ParameterizedContext, cb: () => Promise<void>) {\n return storage.run(store, cb);\n },\n\n get() {\n return storage.getStore();\n },\n};\n\nexport default requestCtx;\n","import { prop } from 'lodash/fp';\nimport type Koa from 'koa';\nimport { contentTypes as contentTypeUtils } from '@strapi/utils';\nimport type { Core, Struct } from '@strapi/types';\n\nimport { transformResponse } from './transform';\nimport { createSingleTypeController } from './single-type';\nimport { createCollectionTypeController } from './collection-type';\nimport requestCtx from '../../services/request-context';\n\nconst isSingleType = (\n contentType: Struct.ContentTypeSchema\n): contentType is Struct.SingleTypeSchema => contentTypeUtils.isSingleType(contentType);\n\nconst getAuthFromKoaContext = (ctx: Koa.Context) => prop('state.auth', ctx) ?? {};\n\nfunction createController<T extends Struct.SingleTypeSchema | Struct.CollectionTypeSchema>(opts: {\n contentType: T;\n}): T extends Struct.SingleTypeSchema\n ? Core.CoreAPI.Controller.SingleType\n : Core.CoreAPI.Controller.CollectionType;\nfunction createController({\n contentType,\n}: {\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema;\n}) {\n // TODO: replace with Base class + SingleType and CollectionType classes\n\n const proto: Core.CoreAPI.Controller.Base = {\n transformResponse(data, meta) {\n const ctx = requestCtx.get();\n return transformResponse(data, meta, {\n contentType,\n useJsonAPIFormat: ctx?.headers?.['strapi-response-format'] === 'v4',\n });\n },\n\n async sanitizeOutput(data, ctx) {\n const auth = getAuthFromKoaContext(ctx);\n\n return strapi.contentAPI.sanitize.output(data, contentType, { auth });\n },\n\n async sanitizeInput(data, ctx) {\n const auth = getAuthFromKoaContext(ctx);\n\n return strapi.contentAPI.sanitize.input(data, contentType, { auth });\n },\n\n async sanitizeQuery(ctx) {\n const auth = getAuthFromKoaContext(ctx);\n\n return strapi.contentAPI.sanitize.query(ctx.query, contentType, { auth });\n },\n\n async validateQuery(ctx) {\n const auth = getAuthFromKoaContext(ctx);\n\n return strapi.contentAPI.validate.query(ctx.query, contentType, { auth });\n },\n\n async validateInput(data, ctx) {\n const auth = getAuthFromKoaContext(ctx);\n\n return strapi.contentAPI.validate.input(data, contentType, { auth });\n },\n };\n\n let ctrl;\n\n if (isSingleType(contentType)) {\n ctrl = createSingleTypeController({ contentType });\n } else {\n ctrl = createCollectionTypeController({ contentType });\n }\n\n return Object.assign(Object.create(proto), ctrl);\n}\n\nexport { createController };\n","export abstract class CoreService {\n getFetchParams(params = {}): any {\n return {\n status: 'published',\n ...params,\n };\n }\n}\n","import type { Struct, Core } from '@strapi/types';\nimport { CoreService } from './core-service';\n\nexport class SingleTypeService extends CoreService implements Core.CoreAPI.Service.SingleType {\n private contentType: Struct.SingleTypeSchema;\n\n constructor(contentType: Struct.SingleTypeSchema) {\n super();\n\n this.contentType = contentType;\n }\n\n async getDocumentId() {\n const { uid } = this.contentType;\n\n return strapi.db\n .query(uid)\n .findOne()\n .then((document) => document?.documentId as string);\n }\n\n async find(params = {}) {\n const { uid } = this.contentType;\n\n return strapi.documents(uid).findFirst(this.getFetchParams(params));\n }\n\n async createOrUpdate(params = {}) {\n const { uid } = this.contentType;\n\n const documentId = await this.getDocumentId();\n\n if (documentId) {\n return strapi.documents(uid).update({\n ...this.getFetchParams(params),\n documentId,\n });\n }\n\n return strapi.documents(uid).create(this.getFetchParams(params));\n }\n\n async delete(params = {}) {\n const { uid } = this.contentType;\n\n const documentId = await this.getDocumentId();\n if (!documentId) return { deletedEntries: 0 };\n\n const { entries } = await strapi.documents(uid).delete({\n ...this.getFetchParams(params),\n documentId,\n });\n\n return { deletedEntries: entries.length };\n }\n}\n\nconst createSingleTypeService = (\n contentType: Struct.SingleTypeSchema\n): Core.CoreAPI.Service.SingleType => {\n return new SingleTypeService(contentType);\n};\n\nexport { createSingleTypeService };\n","import { omit, has, toNumber, isNil } from 'lodash/fp';\n\nimport { errors, pagination } from '@strapi/utils';\n\ninterface BasePaginationParams {\n withCount?: boolean | 't' | '1' | 'true' | 'f' | '0' | 'false' | 0 | 1;\n}\n\ntype PagedPagination = BasePaginationParams & {\n page?: number;\n pageSize?: number;\n};\n\ntype OffsetPagination = BasePaginationParams & {\n start?: number;\n limit?: number;\n};\n\nexport type PaginationParams = PagedPagination | OffsetPagination;\n\ntype PaginationInfo =\n | {\n page: number;\n pageSize: number;\n }\n | {\n start: number;\n limit: number;\n };\n\n/**\n * Default limit values from config\n */\nconst getLimitConfigDefaults = () => ({\n defaultLimit: toNumber(strapi.config.get('api.rest.defaultLimit', 25)),\n maxLimit: toNumber(strapi.config.get('api.rest.maxLimit')) || null,\n});\n\nconst isOffsetPagination = (pagination?: PaginationParams): pagination is OffsetPagination =>\n has('start', pagination) || has('limit', pagination);\n\nconst isPagedPagination = (pagination?: PaginationParams): pagination is PagedPagination =>\n has('page', pagination) || has('pageSize', pagination) || !isOffsetPagination(pagination);\n\nconst shouldCount = (params: { pagination?: PaginationParams }) => {\n if (has('pagination.withCount', params)) {\n const withCount = params.pagination?.withCount;\n\n if (typeof withCount === 'boolean') {\n return withCount;\n }\n\n if (typeof withCount === 'undefined') {\n return false;\n }\n\n if (['true', 't', '1', 1].includes(withCount)) {\n return true;\n }\n\n if (['false', 'f', '0', 0].includes(withCount)) {\n return false;\n }\n\n throw new errors.ValidationError(\n 'Invalid withCount parameter. Expected \"t\",\"1\",\"true\",\"false\",\"0\",\"f\"'\n );\n }\n\n return Boolean(strapi.config.get('api.rest.withCount', true));\n};\n\nconst getPaginationInfo = (params: { pagination?: PaginationParams }): PaginationInfo => {\n const { defaultLimit, maxLimit } = getLimitConfigDefaults();\n\n const { start, limit } = pagination.withDefaultPagination(params.pagination || {}, {\n defaults: { offset: { limit: defaultLimit }, page: { pageSize: defaultLimit } },\n maxLimit: maxLimit || -1,\n });\n\n return { start, limit };\n};\n\nconst transformPaginationResponse = (\n paginationInfo: PaginationInfo,\n total: number | undefined,\n isPaged: boolean\n) => {\n const transform = isPaged\n ? pagination.transformPagedPaginationInfo\n : pagination.transformOffsetPaginationInfo;\n\n const paginationResponse = transform(paginationInfo, total!);\n\n if (isNil(total)) {\n // Ignore total and pageCount if `total` value is not available.\n return omit(['total', 'pageCount'], paginationResponse) as ReturnType<typeof transform>;\n }\n\n return paginationResponse;\n};\n\nexport { isPagedPagination, shouldCount, getPaginationInfo, transformPaginationResponse };\n","import type { Core, Struct, Modules } from '@strapi/types';\n\nimport {\n getPaginationInfo,\n shouldCount,\n isPagedPagination,\n transformPaginationResponse,\n} from './pagination';\n\nimport { CoreService } from './core-service';\n\nexport class CollectionTypeService\n extends CoreService\n implements Core.CoreAPI.Service.CollectionType\n{\n private contentType: Struct.CollectionTypeSchema;\n\n constructor(contentType: Struct.CollectionTypeSchema) {\n super();\n\n this.contentType = contentType;\n }\n\n async find(params = {}) {\n const { uid } = this.contentType;\n\n const fetchParams = this.getFetchParams(params);\n\n const paginationInfo = getPaginationInfo(fetchParams);\n const isPaged = isPagedPagination(fetchParams.pagination);\n\n const results = await strapi.documents(uid).findMany({\n ...fetchParams,\n ...paginationInfo,\n });\n\n if (shouldCount(fetchParams)) {\n const count = await strapi.documents(uid).count({ ...fetchParams, ...paginationInfo });\n\n if (typeof count !== 'number') {\n throw new Error('Count should be a number');\n }\n\n return {\n results,\n pagination: transformPaginationResponse(paginationInfo, count, isPaged),\n };\n }\n\n return {\n results,\n pagination: transformPaginationResponse(paginationInfo, undefined, isPaged),\n };\n }\n\n findOne(documentId: Modules.Documents.ID, params = {}) {\n const { uid } = this.contentType;\n\n return strapi.documents(uid).findOne({\n ...this.getFetchParams(params),\n documentId,\n });\n }\n\n async create(params = { data: {} }) {\n const { uid } = this.contentType;\n\n return strapi.documents(uid).create(this.getFetchParams(params));\n }\n\n update(documentId: Modules.Documents.ID, params = { data: {} }) {\n const { uid } = this.contentType;\n\n return strapi.documents(uid).update({\n ...this.getFetchParams(params),\n documentId,\n });\n }\n\n async delete(documentId: Modules.Documents.ID, params = {}) {\n const { uid } = this.contentType;\n\n const { entries } = await strapi.documents(uid).delete({\n ...this.getFetchParams(params),\n documentId,\n });\n\n return { deletedEntries: entries.length };\n }\n}\n\n/**\n *\n * Returns a collection type service to handle default core-api actions\n */\n\nconst createCollectionTypeService = (\n contentType: Struct.CollectionTypeSchema\n): Core.CoreAPI.Service.CollectionType => {\n return new CollectionTypeService(contentType);\n};\n\nexport { createCollectionTypeService };\n","import { contentTypes as contentTypeUtils } from '@strapi/utils';\nimport type { Core, Struct } from '@strapi/types';\n\nimport { createSingleTypeService } from './single-type';\nimport { createCollectionTypeService } from './collection-type';\n\nconst isSingleType = (\n contentType: Struct.ContentTypeSchema\n): contentType is Struct.SingleTypeSchema => contentTypeUtils.isSingleType(contentType);\n\n/**\n * Returns a core api for the provided model\n */\nfunction createService<T extends Struct.SingleTypeSchema | Struct.CollectionTypeSchema>(opts: {\n contentType: T;\n}): T extends Struct.SingleTypeSchema\n ? Core.CoreAPI.Service.SingleType\n : Core.CoreAPI.Service.CollectionType;\nfunction createService({\n contentType,\n}: {\n contentType: Struct.CollectionTypeSchema | Struct.SingleTypeSchema;\n}): Core.CoreAPI.Service.SingleType | Core.CoreAPI.Service.CollectionType {\n if (isSingleType(contentType)) {\n return createSingleTypeService(contentType);\n }\n\n return createCollectionTypeService(contentType);\n}\n\nexport { createService };\n","import { contentTypes as contentTypeUtils } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\n\nexport const createRoutes = ({ contentType }: { contentType: Schema.ContentType }) => {\n if (contentTypeUtils.isSingleType(contentType)) {\n return getSingleTypeRoutes(contentType);\n }\n\n return getCollectionTypeRoutes(contentType);\n};\n\nconst getSingleTypeRoutes = ({ uid, info }: Schema.ContentType) => {\n return {\n find: {\n method: 'GET',\n path: `/${info.singularName}`,\n handler: `${uid}.find`,\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.singularName}`,\n handler: `${uid}.update`,\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.singularName}`,\n handler: `${uid}.delete`,\n config: {},\n },\n };\n};\n\nconst getCollectionTypeRoutes = ({ uid, info }: Schema.ContentType) => {\n return {\n find: {\n method: 'GET',\n path: `/${info.pluralName}`,\n handler: `${uid}.find`,\n config: {},\n },\n findOne: {\n method: 'GET',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.findOne`,\n config: {},\n },\n create: {\n method: 'POST',\n path: `/${info.pluralName}`,\n handler: `${uid}.create`,\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.update`,\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.delete`,\n config: {},\n },\n };\n};\n","import { pipe, omit, pick } from 'lodash/fp';\nimport type { Core, UID, Utils } from '@strapi/types';\n\nimport { createController } from './core-api/controller';\nimport { createService } from './core-api/service';\nimport { createRoutes } from './core-api/routes';\n\nconst symbols = {\n CustomController: Symbol('StrapiCustomCoreController'),\n} as const;\n\ntype WithStrapiCallback<T> = T | (<S extends { strapi: Core.Strapi }>(params: S) => T);\n\nconst createCoreController = <\n TUID extends UID.ContentType,\n TController extends Core.CoreAPI.Controller.Extendable<TUID>,\n>(\n uid: TUID,\n cfg?: WithStrapiCallback<\n Utils.PartialWithThis<Core.CoreAPI.Controller.Extendable<TUID> & TController>\n >\n) => {\n return ({\n strapi,\n }: {\n strapi: Core.Strapi;\n }): TController & Core.CoreAPI.Controller.ContentType<TUID> => {\n const baseController = createController({ contentType: strapi.contentType(uid) });\n\n const userCtrl = typeof cfg === 'function' ? cfg({ strapi }) : (cfg ?? ({} as any));\n\n for (const methodName of Object.keys(baseController) as Array<keyof typeof baseController>) {\n if (userCtrl[methodName] === undefined) {\n userCtrl[methodName] = baseController[methodName];\n }\n }\n\n Object.setPrototypeOf(userCtrl, baseController);\n\n const isCustom = typeof cfg !== 'undefined';\n if (isCustom) {\n Object.defineProperty(userCtrl, symbols.CustomController, {\n writable: false,\n configurable: false,\n enumerable: false,\n });\n }\n\n return userCtrl;\n };\n};\n\nfunction createCoreService<\n TUID extends UID.ContentType,\n TService extends Core.CoreAPI.Service.Extendable<TUID>,\n>(\n uid: TUID,\n cfg?: WithStrapiCallback<Utils.PartialWithThis<Core.CoreAPI.Service.Extendable<TUID> & TService>>\n) {\n return ({\n strapi,\n }: {\n strapi: Core.Strapi;\n }): TService & Core.CoreAPI.Service.ContentType<TUID> => {\n const baseService = createService({ contentType: strapi.contentType(uid) });\n\n const userService = typeof cfg === 'function' ? cfg({ strapi }) : (cfg ?? ({} as any));\n\n for (const methodName of Object.keys(baseService) as Array<keyof typeof baseService>) {\n if (userService[methodName] === undefined) {\n userService[methodName] = baseService[methodName];\n }\n }\n\n Object.setPrototypeOf(userService, baseService);\n return userService;\n };\n}\n\nfunction createCoreRouter<T extends UID.ContentType>(\n uid: T,\n cfg?: Core.CoreAPI.Router.RouterConfig<T>\n): Core.CoreAPI.Router.Router {\n const { prefix, config = {}, only, except, type = 'content-api' } = cfg ?? {};\n let routes: Core.CoreAPI.Router.Route[];\n\n return {\n type,\n prefix,\n get routes() {\n if (!routes) {\n const contentType = strapi.contentType(uid);\n\n const defaultRoutes = createRoutes({ contentType });\n const keys = Object.keys(defaultRoutes) as Array<keyof typeof defaultRoutes>;\n\n keys.forEach((routeName) => {\n const defaultRoute = defaultRoutes[routeName];\n\n Object.assign(defaultRoute.config, config[routeName] || {});\n });\n\n const selectedRoutes = pipe(\n (routes) => (except ? omit(except, routes) : routes),\n (routes) => (only ? pick(only, routes) : routes)\n )(defaultRoutes);\n\n routes = Object.values(selectedRoutes);\n }\n\n return routes;\n },\n };\n}\n\nconst isCustomController = <T extends Core.Controller>(controller: T): boolean => {\n return symbols.CustomController in controller;\n};\n\nexport { createCoreController, createCoreService, createCoreRouter, isCustomController };\n","import open from 'open';\n\nimport type { Core } from '@strapi/types';\n\nexport const openBrowser = async (config: Core.ConfigProvider) => {\n const url = config.get<string>('admin.absoluteUrl');\n\n return open(url);\n};\n","import { isEmpty, isNil } from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\n/**\n * Test if the strapi application is considered as initialized (1st user has been created)\n */\nexport const isInitialized = async (strapi: Core.Strapi): Promise<boolean> => {\n try {\n if (isEmpty(strapi.admin)) {\n return true;\n }\n\n // test if there is at least one admin\n const anyAdministrator = await strapi.db.query('admin::user').findOne({ select: ['id'] });\n\n return !isNil(anyAdministrator);\n } catch (err) {\n strapi.stopWithError(err);\n }\n};\n","import fs from 'fs';\nimport { join, resolve } from 'path';\nimport crypto from 'crypto';\nimport type { Core } from '@strapi/types';\n\nimport { machineID } from '@strapi/utils';\n\ninterface LicenseInfo {\n type: 'bronze' | 'silver' | 'gold';\n expireAt?: string;\n seats?: number;\n features?: Array<{ name: string; options?: Record<string, unknown> }>;\n}\n\nconst DEFAULT_FEATURES = {\n bronze: [],\n silver: [],\n gold: [\n { name: 'sso' },\n // Set a null retention duration to allow the user to override it\n // The default of 90 days is set in the audit logs service\n { name: 'audit-logs', options: { retentionDays: null } },\n { name: 'review-workflows' },\n { name: 'cms-content-releases' },\n { name: 'cms-content-history', options: { retentionDays: 99999 } },\n ],\n};\n\nconst publicKey = fs.readFileSync(resolve(__dirname, '../resources/key.pub'));\n\nclass LicenseCheckError extends Error {\n shouldFallback = false;\n\n constructor(message: string, shouldFallback = false) {\n super(message);\n\n this.shouldFallback = shouldFallback;\n }\n}\n\nconst readLicense = (directory: string) => {\n try {\n const path = join(directory, 'license.txt');\n return fs.readFileSync(path).toString();\n } catch (error) {\n if (typeof error === 'object' && error !== null && 'code' in error && error.code !== 'ENOENT') {\n throw Error('License file not readable, review its format and access rules.');\n }\n }\n};\n\nconst verifyLicense = (license: string) => {\n const [signature, base64Content] = Buffer.from(license, 'base64').toString().split('\\n');\n\n if (!signature || !base64Content) {\n throw new Error('Invalid license.');\n }\n\n const stringifiedContent = Buffer.from(base64Content, 'base64').toString();\n\n const verify = crypto.createVerify('RSA-SHA256');\n verify.update(stringifiedContent);\n verify.end();\n\n const verified = verify.verify(publicKey, signature, 'base64');\n\n if (!verified) {\n throw new Error('Invalid license.');\n }\n\n const licenseInfo: LicenseInfo = JSON.parse(stringifiedContent);\n\n if (!licenseInfo.features) {\n licenseInfo.features = DEFAULT_FEATURES[licenseInfo.type];\n }\n\n Object.freeze(licenseInfo.features);\n return licenseInfo;\n};\n\nconst throwError = () => {\n throw new LicenseCheckError('Could not proceed to the online validation of your license.', true);\n};\n\nconst fetchLicense = async (\n { strapi }: { strapi: Core.Strapi },\n key: string,\n projectId: string\n) => {\n const response = await strapi\n .fetch(`https://license.strapi.io/api/licenses/validate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ key, projectId, deviceId: machineID() }),\n })\n .catch(throwError);\n\n const contentType = response.headers.get('Content-Type');\n\n if (contentType?.includes('application/json')) {\n const { data, error } = await response.json();\n\n switch (response.status) {\n case 200:\n return data.license;\n case 400:\n throw new LicenseCheckError(error.message);\n case 404:\n throw new LicenseCheckError('The license used does not exists.');\n default:\n throwError();\n }\n } else {\n throwError();\n }\n};\n\nexport { readLicense, verifyLicense, fetchLicense, LicenseCheckError };\n","import { isEmpty, negate } from 'lodash/fp';\n\nconst DATE_FUNCTIONS = [\n 'getSeconds',\n 'getMinutes',\n 'getHours',\n 'getDate',\n 'getMonth',\n 'getDay',\n] as const;\n\nconst INTEGER_REGEX = /^\\d+$/;\nconst STEP_REGEX = /^\\*\\/\\d+$/;\nconst COMPONENTS: {\n limit: number;\n zeroBasedIndices: boolean;\n functionName: (typeof DATE_FUNCTIONS)[number];\n}[] = [\n { limit: 60, zeroBasedIndices: true, functionName: 'getSeconds' },\n { limit: 60, zeroBasedIndices: true, functionName: 'getMinutes' },\n { limit: 24, zeroBasedIndices: true, functionName: 'getHours' },\n { limit: 31, zeroBasedIndices: false, functionName: 'getDate' },\n { limit: 12, zeroBasedIndices: false, functionName: 'getMonth' },\n { limit: 7, zeroBasedIndices: true, functionName: 'getDay' },\n];\n\nconst shift = (component: string, index: number, date: Date) => {\n if (component === '*') {\n return '*';\n }\n\n const { limit, zeroBasedIndices, functionName } = COMPONENTS[index];\n const offset = +!zeroBasedIndices;\n const currentValue = date[functionName]();\n\n if (INTEGER_REGEX.test(component)) {\n return ((Number.parseInt(component, 10) + currentValue) % limit) + offset;\n }\n\n if (STEP_REGEX.test(component)) {\n const [, step] = component.split('/');\n const frequency = Math.floor(limit / Number(step));\n const list = Array.from({ length: frequency }, (_, index) => index * Number(step));\n return list.map((value) => ((value + currentValue) % limit) + offset).sort((a, b) => a - b);\n }\n\n // Unsupported syntax\n return component;\n};\n\n/**\n * Simulate an interval by shifting a cron expression using the specified date.\n * @param {string} rule A cron expression you want to shift.\n * @param {Date} date The date that's gonna be used as the start of the \"interval\", it defaults to now.\n * @returns The shifted cron expression.\n */\nexport const shiftCronExpression = (rule: string, date = new Date()) => {\n const components = rule.trim().split(' ').filter(negate(isEmpty));\n const secondsIncluded = components.length === 6;\n return components\n .map((component, index) => shift(component, secondsIncluded ? index : index + 1, date))\n .join(' ');\n};\n","import { pick, isEqual } from 'lodash/fp';\nimport type { Logger } from '@strapi/logger';\nimport type { Core } from '@strapi/types';\n\nimport { readLicense, verifyLicense, fetchLicense, LicenseCheckError } from './license';\nimport { shiftCronExpression } from '../utils/cron';\n\nconst ONE_MINUTE = 1000 * 60;\n\ninterface EE {\n enabled: boolean;\n licenseInfo: {\n licenseKey?: string;\n features?: Array<{ name: string; [key: string]: any } | string>;\n expireAt?: string;\n seats?: number;\n type?: string;\n };\n logger?: Logger;\n}\n\nconst ee: EE = {\n enabled: false,\n licenseInfo: {},\n};\n\nconst disable = (message: string) => {\n // Prevent emitting ee.disable if it was already disabled\n const shouldEmitEvent = ee.enabled !== false;\n\n ee.logger?.warn(`${message} Switching to CE.`);\n // Only keep the license key for potential re-enabling during a later check\n ee.licenseInfo = pick('licenseKey', ee.licenseInfo);\n\n ee.enabled = false;\n\n if (shouldEmitEvent) {\n // Notify EE features that they should be disabled\n strapi.eventHub.emit('ee.disable');\n }\n};\n\nconst enable = () => {\n // Prevent emitting ee.enable if it was already enabled\n const shouldEmitEvent = ee.enabled !== true;\n\n ee.enabled = true;\n\n if (shouldEmitEvent) {\n // Notify EE features that they should be disabled\n strapi.eventHub.emit('ee.enable');\n }\n};\n\nlet initialized = false;\n\n/**\n * Optimistically enable EE if the format of the license is valid, only run once.\n */\nconst init = (licenseDir: string, logger?: Logger) => {\n if (initialized) {\n return;\n }\n\n initialized = true;\n ee.logger = logger;\n\n if (process.env.STRAPI_DISABLE_EE?.toLowerCase() === 'true') {\n return;\n }\n\n try {\n const license = process.env.STRAPI_LICENSE || readLicense(licenseDir);\n\n if (license) {\n ee.licenseInfo = verifyLicense(license);\n enable();\n }\n } catch (error) {\n if (error instanceof Error) {\n disable(error.message);\n } else {\n disable('Invalid license.');\n }\n }\n};\n\n/**\n * Contact the license registry to update the license to its latest state.\n *\n * Store the result in database to avoid unecessary requests, and will fallback to that in case of a network failure.\n */\nconst onlineUpdate = async ({ strapi }: { strapi: Core.Strapi }) => {\n const { get, commit, rollback } = (await strapi.db?.transaction()) as any;\n const transaction = get();\n\n try {\n const storedInfo = await strapi.db\n ?.queryBuilder('strapi::core-store')\n .where({ key: 'ee_information' })\n .select('value')\n .first()\n .transacting(transaction)\n .forUpdate()\n .execute()\n .then((result: any) => (result ? JSON.parse(result.value) : result));\n\n const shouldContactRegistry = (storedInfo?.lastCheckAt ?? 0) < Date.now() - ONE_MINUTE;\n const result: {\n license?: string | null;\n error?: string;\n lastCheckAt?: number;\n } = { lastCheckAt: Date.now() };\n\n const fallback = (error: Error) => {\n if (error instanceof LicenseCheckError && error.shouldFallback && storedInfo?.license) {\n ee.logger?.warn(\n `${error.message} The last stored one will be used as a potential fallback.`\n );\n return storedInfo.license;\n }\n\n result.error = error.message;\n disable(error.message);\n };\n\n if (!ee?.licenseInfo?.licenseKey) {\n throw new Error('Missing license key.');\n }\n\n const license = shouldContactRegistry\n ? await fetchLicense({ strapi }, ee.licenseInfo.licenseKey, strapi.config.get('uuid')).catch(\n fallback\n )\n : storedInfo.license;\n\n if (license) {\n try {\n // Verify license and check if its info changed\n const newLicenseInfo = verifyLicense(license);\n const licenseInfoChanged =\n !isEqual(newLicenseInfo.features, ee.licenseInfo.features) ||\n newLicenseInfo.seats !== ee.licenseInfo.seats ||\n newLicenseInfo.type !== ee.licenseInfo.type;\n\n // Store the new license info\n ee.licenseInfo = newLicenseInfo;\n const wasEnabled = ee.enabled;\n validateInfo();\n\n // Notify EE features\n if (licenseInfoChanged && wasEnabled) {\n strapi.eventHub.emit('ee.update');\n }\n } catch (error) {\n if (error instanceof Error) {\n disable(error.message);\n } else {\n disable('Invalid license.');\n }\n }\n } else if (!shouldContactRegistry) {\n disable(storedInfo.error);\n }\n\n if (shouldContactRegistry) {\n result.license = license ?? null;\n const query = strapi.db.queryBuilder('strapi::core-store').transacting(transaction);\n\n if (!storedInfo) {\n query.insert({ key: 'ee_information', value: JSON.stringify(result) });\n } else {\n query.update({ value: JSON.stringify(result) }).where({ key: 'ee_information' });\n }\n\n await query.execute();\n }\n\n await commit();\n } catch (error) {\n // Example of errors: SQLite does not support FOR UPDATE\n await rollback();\n }\n};\n\nconst validateInfo = () => {\n if (typeof ee.licenseInfo.expireAt === 'undefined') {\n throw new Error('Missing license key.');\n }\n\n const expirationTime = new Date(ee.licenseInfo.expireAt).getTime();\n\n if (expirationTime < new Date().getTime()) {\n return disable('License expired.');\n }\n\n enable();\n};\n\nconst checkLicense = async ({ strapi }: { strapi: Core.Strapi }) => {\n const shouldStayOffline =\n ee.licenseInfo.type === 'gold' &&\n // This env variable support is temporarily used to ease the migration between online vs offline\n process.env.STRAPI_DISABLE_LICENSE_PING?.toLowerCase() === 'true';\n\n if (!shouldStayOffline) {\n await onlineUpdate({ strapi });\n\n strapi.cron.add({\n onlineUpdate: {\n task: () => onlineUpdate({ strapi }),\n options: shiftCronExpression('0 0 */12 * * *'),\n },\n });\n } else {\n if (!ee.licenseInfo.expireAt) {\n return disable('Your license does not have offline support.');\n }\n\n validateInfo();\n }\n};\n\nconst list = () => {\n return (\n ee.licenseInfo.features?.map((feature) =>\n typeof feature === 'object' ? feature : { name: feature }\n ) || []\n );\n};\n\nconst get = (featureName: string) => list().find((feature) => feature.name === featureName);\n\nexport default Object.freeze({\n init,\n checkLicense,\n\n get isEE() {\n return ee.enabled;\n },\n\n get seats() {\n return ee.licenseInfo.seats;\n },\n\n features: Object.freeze({\n list,\n get,\n isEnabled: (featureName: string) => get(featureName) !== undefined,\n }),\n});\n","import path from 'path';\nimport packageJson from 'package-json';\nimport Configstore from 'configstore';\nimport semver from 'semver';\nimport boxen from 'boxen';\nimport chalk from 'chalk';\nimport { env } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport pkg from '../../../package.json';\n\nconst CHECK_INTERVAL = 1000 * 60 * 60 * 24 * 1; // 1 day\nconst NOTIF_INTERVAL = 1000 * 60 * 60 * 24 * 7; // 1 week\nconst boxenOptions: boxen.Options = {\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'round',\n};\n\nconst getUpdateMessage = (newVersion: string, currentVersion: string) => {\n const currentVersionLog = chalk.dim(currentVersion);\n const newVersionLog = chalk.green(newVersion);\n const releaseLink = chalk.bold('https://github.com/strapi/strapi/releases');\n\n return `\nA new version of Strapi is available ${currentVersionLog} → ${newVersionLog}\nCheck out the new releases at: ${releaseLink}\n`.trim();\n};\n\nexport const createUpdateNotifier = (strapi: Core.Strapi) => {\n let config: InstanceType<typeof Configstore>;\n\n try {\n config = new Configstore(\n pkg.name,\n {},\n { configPath: path.join(strapi.dirs.app.root, '.strapi-updater.json') }\n );\n } catch {\n // we don't have write access to the file system\n // we silence the error\n return;\n }\n\n const checkUpdate = async (checkInterval: number) => {\n const now = Date.now();\n const lastUpdateCheck = config.get('lastUpdateCheck') || 0;\n if (lastUpdateCheck + checkInterval > now) {\n return;\n }\n\n try {\n const res = await packageJson(pkg.name);\n if (res.version) {\n config.set('latest', res.version);\n config.set('lastUpdateCheck', now);\n }\n } catch {\n // silence error if offline\n }\n };\n\n const display = (notifInterval: number) => {\n const now = Date.now();\n const latestVersion = config.get('latest');\n const lastNotification = config.get('lastNotification') || 0;\n\n if (\n !process.stdout.isTTY ||\n lastNotification + notifInterval > now ||\n !semver.valid(latestVersion) ||\n !semver.valid(pkg.version) ||\n semver.lte(latestVersion, pkg.version)\n ) {\n return;\n }\n\n const message = boxen(getUpdateMessage(latestVersion, pkg.version), boxenOptions);\n config.set('lastNotification', now);\n console.log(message);\n };\n\n // TODO v6: Remove this warning\n if (env.bool('STRAPI_DISABLE_UPDATE_NOTIFICATION', false)) {\n strapi.log.warn(\n 'STRAPI_DISABLE_UPDATE_NOTIFICATION is no longer supported. Instead, set logger.updates.enabled to false in your server configuration.'\n );\n }\n\n if (!strapi.config.get('server.logger.updates.enabled') || !config) {\n return;\n }\n\n display(NOTIF_INTERVAL);\n checkUpdate(CHECK_INTERVAL); // doesn't need to await\n};\n","import type { Core, Modules } from '@strapi/types';\nimport { ProxyAgent } from 'undici';\n\n// TODO: once core Node exposes a stable way to create a ProxyAgent we will use that instead of undici\n\n// Create a wrapper for Node's Fetch API that applies a global proxy\nexport const createStrapiFetch = (strapi: Core.Strapi): Modules.Fetch.Fetch => {\n function strapiFetch(url: RequestInfo | URL, options?: RequestInit) {\n const fetchOptions = {\n ...(strapiFetch.dispatcher ? { dispatcher: strapiFetch.dispatcher } : {}),\n ...options,\n };\n strapi.log.debug(`Making request for ${url}`);\n return fetch(url, fetchOptions);\n }\n\n const proxy =\n strapi.config.get<ConstructorParameters<typeof ProxyAgent>[0]>('server.proxy.fetch') ||\n strapi.config.get<string>('server.proxy.global');\n\n if (proxy) {\n strapi.log.info(`Using proxy for Fetch requests: ${proxy}`);\n strapiFetch.dispatcher = new ProxyAgent(proxy);\n }\n\n return strapiFetch;\n};\n\nexport type Fetch = Modules.Fetch.Fetch;\n","import type { Core } from '@strapi/types';\n\ntype InputAttributes = {\n [key: string]: {\n type: string;\n customField?: string;\n };\n};\n\nexport const convertCustomFieldType = (strapi: Core.Strapi) => {\n const allContentTypeSchemaAttributes = Object.values(strapi.contentTypes).map(\n (schema) => schema.attributes\n );\n\n const allComponentSchemaAttributes = Object.values(strapi.components).map(\n (schema) => schema.attributes\n );\n const allSchemasAttributes: InputAttributes[] = [\n ...allContentTypeSchemaAttributes,\n ...allComponentSchemaAttributes,\n ];\n\n for (const schemaAttrbutes of allSchemasAttributes) {\n for (const attribute of Object.values(schemaAttrbutes)) {\n if (attribute.type === 'customField') {\n const customField = strapi.get('custom-fields').get(attribute.customField);\n attribute.type = customField.type;\n }\n }\n }\n};\n","import chalk from 'chalk';\nimport CLITable from 'cli-table3';\nimport _ from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\nexport const createStartupLogger = (app: Core.Strapi) => {\n return {\n logStats() {\n const columns = Math.min(process.stderr.columns, 80) - 2;\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Project information')));\n console.log();\n\n const infoTable = new CLITable({\n colWidths: [20, 50],\n chars: { mid: '', 'left-mid': '', 'mid-mid': '', 'right-mid': '' },\n });\n\n const dbInfo = app.db?.getInfo();\n\n infoTable.push(\n [chalk.blue('Time'), `${new Date()}`],\n [chalk.blue('Launched in'), `${Date.now() - app.config.launchedAt} ms`],\n [chalk.blue('Environment'), app.config.environment],\n [chalk.blue('Process PID'), process.pid],\n [chalk.blue('Version'), `${app.config.info.strapi} (node ${process.version})`],\n [chalk.blue('Edition'), app.EE ? 'Enterprise' : 'Community'],\n [chalk.blue('Database'), dbInfo?.client],\n [chalk.blue('Database name'), dbInfo?.displayName]\n );\n\n if (dbInfo?.schema) {\n infoTable.push([chalk.blue('Database schema'), dbInfo.schema]);\n }\n\n console.log(infoTable.toString());\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Actions available')));\n console.log();\n },\n\n logFirstStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n\n this.logStats();\n\n console.log(chalk.bold('One more thing...'));\n console.log(\n chalk.grey('Create your first administrator 💻 by going to the administration panel at:')\n );\n console.log();\n\n const addressTable = new CLITable();\n\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n addressTable.push([chalk.bold(adminUrl)]);\n\n console.log(`${addressTable.toString()}`);\n console.log();\n },\n\n logDefaultStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n this.logStats();\n\n console.log(chalk.bold('Welcome back!'));\n\n if (app.config.get('admin.serveAdminPanel') === true) {\n console.log(chalk.grey('To manage your project 🚀, go to the administration panel at:'));\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n console.log(chalk.bold(adminUrl));\n console.log();\n }\n\n console.log(chalk.grey('To access the server ⚡️, go to:'));\n const serverUrl = strapi.config.get('server.absoluteUrl');\n console.log(chalk.bold(serverUrl));\n console.log();\n },\n\n logStartupMessage({ isInitialized }: { isInitialized: boolean }) {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n if (!isInitialized) {\n this.logFirstStartupMessage();\n } else {\n this.logDefaultStartupMessage();\n }\n },\n };\n};\n","import { type Model, type Identifiers } from '@strapi/database';\nimport type { Struct, Schema } from '@strapi/types';\nimport { createId } from '@paralleldrive/cuid2';\nimport assert from 'node:assert';\nimport _ from 'lodash/fp';\n\n/**\n * Because strapi/database models don't know about things like components or dynamic zones, we use this file to convert them\n * to a relations format that it recognizes\n *\n * Therefore we have to keep an additional set of helpers/extensions to the database naming methods\n *\n * IMPORTANT!\n * If we use short versions of anything, we MUST call getNameFromTokens directly; attempting to shorten them ourselves\n * prevents the unshortened name map from being filled properly, so for example it will think that the short name\n * 'collection4f3a_cmps' maps to the unshortened 'collectionname_cmps' rather than 'collectionname_components'\n * Therefore, we only use the identifiers helpers in cases where we do not do any of our own shortening\n */\n\nexport const getComponentJoinTableName = (collectionName: string, identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: collectionName, compressible: true },\n { name: 'components', shortName: 'cmps', compressible: false },\n ]);\n};\n\nexport const getDzJoinTableName = (collectionName: string, identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: collectionName, compressible: true },\n { name: 'components', shortName: 'cmps', compressible: false },\n ]);\n};\n\nexport const getComponentJoinColumnEntityName = (identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: 'entity', compressible: false },\n { name: 'id', compressible: false },\n ]);\n};\n\nexport const getComponentJoinColumnInverseName = (identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: 'component', shortName: 'cmp', compressible: false },\n { name: 'id', compressible: false },\n ]);\n};\n\nexport const getComponentTypeColumn = (identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([{ name: 'component_type', compressible: false }]);\n};\n\nexport const getComponentFkIndexName = (contentType: string, identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: contentType, compressible: true },\n { name: 'entity', compressible: false },\n { name: 'fk', compressible: false },\n ]);\n};\n\n// const { ID_COLUMN: id, FIELD_COLUMN: field, ORDER_COLUMN: order } = identifiers;\n\nexport type LoadedContentTypeModel = Struct.ContentTypeSchema &\n Required<Pick<Struct.ContentTypeSchema, 'collectionName' | 'uid' | 'modelName'>> &\n Pick<Model, 'lifecycles'>;\n\n// Transforms an attribute (particularly for relation types) into the format that strapi/database accepts\nexport const transformAttribute = (\n name: string,\n attribute: Schema.Attribute.AnyAttribute,\n contentType: LoadedContentTypeModel,\n identifiers: Identifiers\n) => {\n switch (attribute.type) {\n case 'media': {\n return {\n type: 'relation',\n relation: attribute.multiple === true ? 'morphMany' : 'morphOne',\n target: 'plugin::upload.file',\n morphBy: 'related',\n };\n }\n case 'component': {\n const joinTableName = getComponentJoinTableName(contentType.collectionName, identifiers);\n const joinColumnEntityName = getComponentJoinColumnEntityName(identifiers);\n const joinColumnInverseName = getComponentJoinColumnInverseName(identifiers);\n const compTypeColumn = getComponentTypeColumn(identifiers);\n return {\n type: 'relation',\n relation: attribute.repeatable === true ? 'oneToMany' : 'oneToOne',\n target: attribute.component,\n\n // We need the join table name to be deterministic,\n // We need to allow passing the join table name as an option\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: identifiers.ID_COLUMN,\n },\n inverseJoinColumn: {\n name: joinColumnInverseName,\n referencedColumn: identifiers.ID_COLUMN,\n },\n on: {\n field: name,\n },\n orderColumnName: identifiers.ORDER_COLUMN,\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [\n joinColumnEntityName,\n joinColumnInverseName,\n identifiers.FIELD_COLUMN,\n compTypeColumn,\n ],\n },\n };\n }\n case 'dynamiczone': {\n const joinTableName = getDzJoinTableName(contentType.collectionName, identifiers);\n const joinColumnEntityName = getComponentJoinColumnEntityName(identifiers);\n const joinColumnInverseName = getComponentJoinColumnInverseName(identifiers);\n const compTypeColumn = getComponentTypeColumn(identifiers);\n\n return {\n type: 'relation',\n relation: 'morphToMany',\n // TODO: handle restrictions at some point\n // target: attribute.components,\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: identifiers.ID_COLUMN,\n },\n morphColumn: {\n idColumn: {\n name: joinColumnInverseName,\n referencedColumn: identifiers.ID_COLUMN,\n },\n typeColumn: {\n name: compTypeColumn,\n },\n typeField: '__component',\n },\n on: {\n field: name,\n },\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [\n joinColumnEntityName,\n joinColumnInverseName,\n identifiers.FIELD_COLUMN,\n compTypeColumn,\n ],\n },\n };\n }\n default: {\n return attribute;\n }\n }\n};\n\nexport const transformAttributes = (\n contentType: LoadedContentTypeModel,\n identifiers: Identifiers\n) => {\n return Object.keys(contentType.attributes! || {}).reduce((attrs, attrName) => {\n return {\n ...attrs,\n [attrName]: transformAttribute(\n attrName,\n contentType.attributes[attrName]!,\n contentType,\n identifiers\n ),\n };\n }, {});\n};\n\nexport const hasComponentsOrDz = (\n contentType: LoadedContentTypeModel\n): contentType is LoadedContentTypeModel & { type: 'dynamiczone' | 'component' } => {\n return Object.values(contentType.attributes || {}).some(\n (({ type }: { type: string }) => type === 'dynamiczone' || type === 'component') as any\n );\n};\n\nexport const createDocumentId = createId;\n\nconst createCompoLinkModel = (\n contentType: LoadedContentTypeModel,\n identifiers: Identifiers\n): Model => {\n const name = getComponentJoinTableName(contentType.collectionName, identifiers);\n\n const entityId = getComponentJoinColumnEntityName(identifiers);\n const componentId = getComponentJoinColumnInverseName(identifiers);\n const compTypeColumn = getComponentTypeColumn(identifiers);\n const fkIndex = getComponentFkIndexName(contentType.collectionName, identifiers);\n\n return {\n // TODO: make sure there can't be any conflicts with a prefix\n singularName: name,\n uid: name,\n tableName: name,\n attributes: {\n [identifiers.ID_COLUMN]: {\n type: 'increments',\n },\n [entityId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [componentId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [compTypeColumn]: {\n type: 'string',\n },\n [identifiers.FIELD_COLUMN]: {\n type: 'string',\n },\n [identifiers.ORDER_COLUMN]: {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n },\n },\n indexes: [\n {\n name: identifiers.getIndexName([contentType.collectionName, identifiers.FIELD_COLUMN]),\n columns: [identifiers.FIELD_COLUMN],\n },\n {\n name: identifiers.getIndexName([contentType.collectionName, compTypeColumn]),\n columns: [compTypeColumn],\n },\n {\n name: fkIndex,\n columns: [entityId],\n },\n {\n // NOTE: since we don't include attribute names, we need to be careful not to create another unique index\n name: identifiers.getUniqueIndexName([contentType.collectionName]),\n columns: [entityId, componentId, identifiers.FIELD_COLUMN, compTypeColumn],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: fkIndex,\n columns: [entityId],\n referencedColumns: [identifiers.ID_COLUMN],\n referencedTable: identifiers.getTableName(contentType.collectionName),\n onDelete: 'CASCADE',\n },\n ],\n };\n};\n\nexport const transformContentTypesToModels = (\n contentTypes: LoadedContentTypeModel[],\n identifiers: Identifiers\n): Model[] => {\n const models: Model[] = [];\n\n contentTypes.forEach((contentType) => {\n assert(contentType.collectionName, 'Content type \"collectionName\" is required');\n assert(contentType.modelName, 'Content type \"modelName\" is required');\n assert(contentType.uid, 'Content type \"uid\" is required');\n\n // Add document id to content types\n // as it is not documented\n const documentIdAttribute: Record<string, Schema.Attribute.AnyAttribute> =\n contentType.modelType === 'contentType'\n ? { documentId: { type: 'string', default: createDocumentId } }\n : {};\n\n // TODO: this needs to be combined with getReservedNames, we should not be maintaining two lists\n // Prevent user from creating a documentId attribute\n const reservedAttributeNames = ['document_id', identifiers.ID_COLUMN];\n Object.keys(contentType.attributes || {}).forEach((attributeName) => {\n const snakeCasedAttributeName = _.snakeCase(attributeName);\n if (reservedAttributeNames.includes(snakeCasedAttributeName)) {\n throw new Error(\n `The attribute \"${attributeName}\" is reserved and cannot be used in a model. Please rename \"${contentType.modelName}\" attribute \"${attributeName}\" to something else.`\n );\n }\n });\n\n if (hasComponentsOrDz(contentType)) {\n const compoLinkModel = createCompoLinkModel(contentType, identifiers);\n models.push(compoLinkModel);\n }\n\n const model: Model = {\n uid: contentType.uid,\n singularName: contentType.modelName,\n tableName: contentType.collectionName, // This gets shortened in metadata.loadModels(), so we don't shorten here or it will happen twice\n attributes: {\n [identifiers.ID_COLUMN]: {\n type: 'increments',\n },\n ...documentIdAttribute,\n ...transformAttributes(contentType, identifiers),\n },\n indexes: contentType.indexes as Model['indexes'],\n foreignKeys: contentType.foreignKeys as Model['foreignKeys'],\n lifecycles: contentType?.lifecycles ?? {},\n };\n\n // Add indexes to model\n if (contentType.modelType === 'contentType') {\n model.indexes = [\n ...(model.indexes || []),\n {\n name: identifiers.getIndexName([contentType.collectionName, 'documents']),\n // Filter attributes that are not in the schema\n columns: ['documentId', 'locale', 'publishedAt']\n .filter((n) => model.attributes[n])\n .map((name) => identifiers.getColumnName(_.snakeCase(name))),\n },\n ];\n }\n\n models.push(model);\n });\n\n return models;\n};\n","import type { Core } from '@strapi/types';\n\nexport const destroyOnSignal = (strapi: Core.Strapi) => {\n let signalReceived = false;\n\n // For unknown reasons, we receive signals 2 times.\n // As a temporary fix, we ignore the signals received after the first one.\n\n const terminateStrapi = async () => {\n if (!signalReceived) {\n signalReceived = true;\n await strapi.destroy();\n process.exit();\n }\n };\n\n ['SIGTERM', 'SIGINT'].forEach((signal) => {\n process.on(signal, terminateStrapi);\n });\n};\n","export const LIFECYCLES = {\n REGISTER: 'register',\n BOOTSTRAP: 'bootstrap',\n DESTROY: 'destroy',\n} as const;\n","import path from 'node:path';\n\n/**\n * Resolve the working directories based on the instance options.\n *\n * Behavior:\n * - `appDir` is the directory where Strapi will write every file (schemas, generated APIs, controllers or services)\n * - `distDir` is the directory where Strapi will read configurations, schemas and any compiled code\n *\n * Default values:\n * - If `appDir` is `undefined`, it'll be set to `process.cwd()`\n * - If `distDir` is `undefined`, it'll be set to `appDir`\n */\nexport const resolveWorkingDirectories = (opts: { appDir?: string; distDir?: string }) => {\n const cwd = process.cwd();\n\n const appDir = opts.appDir ? path.resolve(cwd, opts.appDir) : cwd;\n const distDir = opts.distDir ? path.resolve(cwd, opts.distDir) : appDir;\n\n return { appDir, distDir };\n};\n","import type { Core } from '@strapi/types';\n\nexport class Container implements Core.Container {\n private registerMap = new Map<string, unknown>();\n\n private serviceMap = new Map();\n\n add(name: string, resolver: unknown) {\n if (this.registerMap.has(name)) {\n throw new Error(`Cannot register already registered service ${name}`);\n }\n\n this.registerMap.set(name, resolver);\n return this;\n }\n\n get(name: string, args?: unknown) {\n // TODO: handle singleton vs instantiation everytime\n if (this.serviceMap.has(name)) {\n return this.serviceMap.get(name);\n }\n\n if (this.registerMap.has(name)) {\n const resolver = this.registerMap.get(name);\n\n if (typeof resolver === 'function') {\n this.serviceMap.set(name, resolver(this, args));\n } else {\n this.serviceMap.set(name, resolver);\n }\n\n return this.serviceMap.get(name);\n }\n\n throw new Error(`Could not resolve service ${name}`);\n }\n}\n","import path from 'path';\nimport fse from 'fs-extra';\n\nimport type { Core } from '@strapi/types';\n\ninterface StrapiFS {\n writeAppFile(optPath: string | string[], data: string): Promise<void>;\n writePluginFile(plugin: string, optPath: string | string[], data: string): Promise<void>;\n removeAppFile(optPath: string | string[]): Promise<void>;\n appendFile(optPath: string | string[], data: string): void;\n}\n\n/**\n * create strapi fs layer\n */\nexport default (strapi: Core.Strapi) => {\n function normalizePath(optPath: string | string[]) {\n const filePath = Array.isArray(optPath) ? optPath.join('/') : optPath;\n\n const normalizedPath = path.normalize(filePath).replace(/^\\/?(\\.\\/|\\.\\.\\/)+/, '');\n\n return path.resolve(strapi.dirs.app.root, normalizedPath);\n }\n\n const strapiFS: StrapiFS = {\n /**\n * Writes a file in a strapi app\n * @param {Array|string} optPath - file path\n * @param {string} data - content\n */\n writeAppFile(optPath, data) {\n const writePath = normalizePath(optPath);\n return fse.ensureFile(writePath).then(() => fse.writeFile(writePath, data));\n },\n\n /**\n * Writes a file in a plugin extensions folder\n * @param {string} plugin - plugin name\n * @param {Array|string} optPath - path to file\n * @param {string} data - content\n */\n writePluginFile(plugin, optPath, data) {\n const newPath = ['extensions', plugin].concat(optPath).join('/');\n return strapiFS.writeAppFile(newPath, data);\n },\n\n /**\n * Removes a file in strapi app\n */\n removeAppFile(optPath) {\n const removePath = normalizePath(optPath);\n return fse.remove(removePath);\n },\n\n /**\n * Appends a file in strapi app\n */\n appendFile(optPath, data) {\n const writePath = normalizePath(optPath);\n return fse.appendFileSync(writePath, data);\n },\n };\n\n return strapiFS;\n};\n","export type Subscriber = (eventName: string, ...args: any[]) => Promise<void>;\nexport type Listener = (...args: any[]) => Promise<void>;\n\nexport interface EventHub {\n emit(eventName: string, ...args: unknown[]): Promise<void>;\n subscribe(subscriber: Subscriber): () => void;\n unsubscribe(subscriber: Subscriber): void;\n on(eventName: string, listener: Listener): () => void;\n off(eventName: string, listener: Listener): void;\n once(eventName: string, listener: Listener): () => void;\n destroy(): EventHub;\n removeListener(eventName: string, listener: Listener): void;\n removeAllListeners(): EventHub;\n removeAllSubscribers(): EventHub;\n addListener(eventName: string, listener: Listener): () => void;\n}\n\n/**\n * The event hub is Strapi's event control center.\n */\nexport default function createEventHub(): EventHub {\n const listeners = new Map();\n\n // Default subscriber to easily add listeners with the on() method\n const defaultSubscriber = async (eventName: string, ...args: unknown[]) => {\n if (listeners.has(eventName)) {\n for (const listener of listeners.get(eventName)) {\n await listener(...args);\n }\n }\n };\n\n // Store of subscribers that will be called when an event is emitted\n const subscribers = [defaultSubscriber];\n\n const eventHub: EventHub = {\n async emit(eventName, ...args) {\n for (const subscriber of subscribers) {\n await subscriber(eventName, ...args);\n }\n },\n\n subscribe(subscriber) {\n subscribers.push(subscriber);\n\n // Return a function to remove the subscriber\n return () => {\n eventHub.unsubscribe(subscriber);\n };\n },\n\n unsubscribe(subscriber) {\n const subscriberIndex = subscribers.indexOf(subscriber);\n\n // Only remove the subscriber if it exists\n if (subscriberIndex >= 0) {\n subscribers.splice(subscriberIndex, 1);\n }\n },\n\n on(eventName, listener) {\n if (!listeners.has(eventName)) {\n listeners.set(eventName, [listener]);\n } else {\n listeners.get(eventName).push(listener);\n }\n\n // Return a function to remove the listener\n return () => {\n eventHub.off(eventName, listener);\n };\n },\n\n off(eventName, listener) {\n listeners.get(eventName)?.splice(listeners.get(eventName).indexOf(listener), 1);\n },\n\n once(eventName, listener) {\n return eventHub.on(eventName, async (...args) => {\n eventHub.off(eventName, listener);\n return listener(...args);\n });\n },\n\n destroy() {\n this.removeAllListeners();\n this.removeAllSubscribers();\n return this;\n },\n\n removeListener(eventName, listener) {\n return eventHub.off(eventName, listener);\n },\n\n removeAllListeners() {\n listeners.clear();\n return this;\n },\n\n removeAllSubscribers() {\n subscribers.length = 0;\n return this;\n },\n\n addListener(eventName, listener) {\n return eventHub.on(eventName, listener);\n },\n };\n\n return eventHub;\n}\n","import http from 'http';\nimport type { Socket } from 'net';\nimport Koa from 'koa';\nimport type { Core } from '@strapi/types';\n\nexport interface Server extends http.Server {\n destroy: () => Promise<void>;\n}\n\nconst createHTTPServer = (strapi: Core.Strapi, koaApp: Koa): Server => {\n const connections = new Set<Socket>();\n\n // lazy creation of the request listener\n let handler: http.RequestListener;\n const listener: http.RequestListener = function handleRequest(req, res) {\n if (!handler) {\n handler = koaApp.callback();\n }\n\n return handler(req, res);\n };\n\n const options = strapi.config.get<http.ServerOptions>('server.http.serverOptions', {});\n\n const server: http.Server = http.createServer(options, listener);\n\n server.on('connection', (connection) => {\n connections.add(connection);\n\n connection.on('close', () => {\n connections.delete(connection);\n });\n });\n\n // handle port in use cleanly\n server.on('error', (err) => {\n if ('code' in err && 'port' in err && err.code === 'EADDRINUSE') {\n return strapi.stopWithError(`The port ${err.port} is already used by another application.`);\n }\n\n strapi.log.error(err);\n });\n\n const destroy = async () => {\n for (const connection of connections) {\n connection.destroy();\n\n connections.delete(connection);\n }\n\n if (!server.listening) {\n return;\n }\n\n return new Promise<void>((resolve, reject) => {\n server.close((error) => {\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n });\n });\n };\n\n return Object.assign(server, { destroy });\n};\n\nexport { createHTTPServer };\n","import path from 'path';\nimport { isArray } from 'lodash/fp';\nimport { importDefault } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nconst instantiateMiddleware = (\n middlewareFactory: Core.MiddlewareFactory,\n name: string,\n config: unknown,\n strapi: Core.Strapi\n) => {\n try {\n return middlewareFactory(config, { strapi });\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`Middleware \"${name}\": ${e.message}`);\n }\n }\n};\n\nconst resolveRouteMiddlewares = (route: Core.Route, strapi: Core.Strapi) => {\n const middlewaresConfig = route?.config?.middlewares ?? [];\n\n if (!isArray(middlewaresConfig)) {\n throw new Error('Route middlewares config must be an array');\n }\n\n const middlewares = resolveMiddlewares(middlewaresConfig, strapi);\n\n return middlewares.map(({ handler }) => handler);\n};\n\nconst dummyMiddleware: Core.MiddlewareHandler = (_, next) => next();\n\n/**\n * Initialize every configured middlewares\n */\nconst resolveMiddlewares = (\n config: Array<Core.MiddlewareName | Core.MiddlewareConfig | Core.MiddlewareHandler>,\n strapi: Core.Strapi\n) => {\n const middlewares: {\n name: string | null;\n handler: Core.MiddlewareHandler;\n }[] = [];\n\n for (const item of config) {\n if (typeof item === 'function') {\n middlewares.push({\n name: null,\n handler: item,\n });\n\n continue;\n }\n\n if (typeof item === 'string') {\n const middlewareFactory = strapi.middleware(item);\n\n if (!middlewareFactory) {\n throw new Error(`Middleware ${item} not found.`);\n }\n\n middlewares.push({\n name: item,\n handler: instantiateMiddleware(middlewareFactory, item, {}, strapi) ?? dummyMiddleware,\n });\n\n continue;\n }\n\n if (typeof item === 'object' && item !== null) {\n const { name, resolve, config = {} } = item;\n\n if (name) {\n const middlewareFactory = strapi.middleware(name);\n middlewares.push({\n name,\n handler:\n instantiateMiddleware(middlewareFactory, name, config, strapi) ?? dummyMiddleware,\n });\n\n continue;\n }\n\n if (resolve) {\n const resolvedMiddlewareFactory = resolveCustomMiddleware(resolve, strapi);\n middlewares.push({\n name: resolve,\n handler:\n instantiateMiddleware(resolvedMiddlewareFactory, resolve, config, strapi) ??\n dummyMiddleware,\n });\n\n continue;\n }\n\n throw new Error('Invalid middleware configuration. Missing name or resolve properties.');\n }\n\n throw new Error(\n 'Middleware config must either be a string or an object {name?: string, resolve?: string, config: any}.'\n );\n }\n\n return middlewares;\n};\n\n/**\n * Resolve middleware from package name or path\n */\nconst resolveCustomMiddleware = (resolve: string, strapi: Core.Strapi) => {\n let modulePath;\n\n try {\n modulePath = require.resolve(resolve);\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'MODULE_NOT_FOUND') {\n modulePath = path.resolve(strapi.dirs.dist.root, resolve);\n } else {\n throw error;\n }\n }\n\n try {\n return importDefault(modulePath);\n } catch (err) {\n throw new Error(`Could not load middleware \"${modulePath}\".`);\n }\n};\n\nexport { resolveRouteMiddlewares, resolveMiddlewares };\n","import { policy as policyUtils, errors } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nconst createPolicicesMiddleware = (route: Core.Route, strapi: Core.Strapi) => {\n const policiesConfig = route?.config?.policies ?? [];\n const resolvedPolicies = strapi.get('policies').resolve(policiesConfig, route.info);\n\n const policiesMiddleware: Core.MiddlewareHandler = async (ctx, next) => {\n const context = policyUtils.createPolicyContext('koa', ctx);\n\n for (const { handler, config } of resolvedPolicies) {\n const result = await handler(context, config, { strapi });\n\n if (![true, undefined].includes(result)) {\n throw new errors.PolicyError();\n }\n }\n\n await next();\n };\n\n return policiesMiddleware;\n};\n\nexport { createPolicicesMiddleware };\n","import { toLower, castArray, trim, prop, isNil } from 'lodash/fp';\nimport type { Core, UID } from '@strapi/types';\nimport { errors } from '@strapi/utils';\nimport Router from '@koa/router';\n\nimport compose from 'koa-compose';\nimport { resolveRouteMiddlewares } from './middleware';\nimport { createPolicicesMiddleware } from './policy';\n\nconst getMethod = (route: Core.Route) => {\n return trim(toLower(route.method)) as Lowercase<Core.Route['method']>;\n};\n\nconst getPath = (route: Core.Route) => trim(route.path);\n\nconst createRouteInfoMiddleware =\n (routeInfo: Core.Route): Core.MiddlewareHandler =>\n (ctx, next) => {\n const route = {\n ...routeInfo,\n config: routeInfo.config || {},\n };\n\n ctx.state.route = route;\n return next();\n };\n\nconst getAuthConfig = prop('config.auth');\n\nconst createAuthorizeMiddleware =\n (strapi: Core.Strapi): Core.MiddlewareHandler =>\n async (ctx, next) => {\n const { auth, route } = ctx.state;\n\n const authService = strapi.get('auth');\n\n try {\n await authService.verify(auth, getAuthConfig(route));\n\n return await next();\n } catch (error) {\n if (error instanceof errors.UnauthorizedError) {\n return ctx.unauthorized();\n }\n\n if (error instanceof errors.ForbiddenError) {\n // allow PolicyError as an exception to throw a publicly visible message in the API\n if (error instanceof errors.PolicyError) {\n throw error;\n }\n return ctx.forbidden();\n }\n\n throw error;\n }\n };\n\nconst createAuthenticateMiddleware =\n (strapi: Core.Strapi): Core.MiddlewareHandler =>\n async (ctx, next) => {\n return strapi.get('auth').authenticate(ctx, next);\n };\n\nconst returnBodyMiddleware: Core.MiddlewareHandler = async (ctx, next) => {\n const values = await next();\n\n if (isNil(ctx.body) && !isNil(values)) {\n ctx.body = values;\n }\n};\n\nexport default (strapi: Core.Strapi) => {\n const authenticate = createAuthenticateMiddleware(strapi);\n const authorize = createAuthorizeMiddleware(strapi);\n\n return (route: Core.Route, { router }: { router: Router }) => {\n try {\n const method = getMethod(route);\n const path = getPath(route);\n\n const middlewares = resolveRouteMiddlewares(route, strapi);\n\n const action = getAction(route, strapi);\n\n const routeHandler = compose([\n createRouteInfoMiddleware(route),\n authenticate,\n authorize,\n createPolicicesMiddleware(route, strapi),\n ...middlewares,\n returnBodyMiddleware,\n ...castArray(action),\n ]);\n\n router[method](path, routeHandler);\n } catch (error) {\n if (error instanceof Error) {\n error.message = `Error creating endpoint ${route.method} ${route.path}: ${error.message}`;\n }\n\n throw error;\n }\n };\n};\n\nconst getController = (\n name: string,\n { pluginName, apiName }: Core.RouteInfo,\n strapi: Core.Strapi\n) => {\n let ctrl: Core.Controller | undefined;\n\n if (pluginName) {\n if (pluginName === 'admin') {\n ctrl = strapi.controller(`admin::${name}`);\n } else {\n ctrl = strapi.plugin(pluginName).controller(name);\n }\n } else if (apiName) {\n ctrl = strapi.controller(`api::${apiName}.${name}`);\n }\n\n if (!ctrl) {\n return strapi.controller(name as UID.Controller);\n }\n\n return ctrl;\n};\n\nconst extractHandlerParts = (name: string) => {\n const controllerName = name.slice(0, name.lastIndexOf('.'));\n const actionName = name.slice(name.lastIndexOf('.') + 1);\n\n return { controllerName, actionName };\n};\n\nconst getAction = (route: Core.Route, strapi: Core.Strapi) => {\n const { handler, info } = route;\n const { pluginName, apiName, type } = info ?? {};\n\n if (Array.isArray(handler) || typeof handler === 'function') {\n return handler;\n }\n\n const { controllerName, actionName } = extractHandlerParts(trim(handler));\n\n const controller = getController(controllerName, { pluginName, apiName, type }, strapi);\n\n if (typeof controller[actionName] !== 'function') {\n throw new Error(`Handler not found \"${handler}\"`);\n }\n\n if (Symbol.for('__type__') in controller[actionName]) {\n (controller[actionName] as any)[Symbol.for('__type__')].push(type);\n } else {\n (controller[actionName] as any)[Symbol.for('__type__')] = [type];\n }\n\n return controller[actionName].bind(controller);\n};\n","import Router from '@koa/router';\nimport { has } from 'lodash/fp';\nimport { yup } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport createEndpointComposer from './compose-endpoint';\n\nconst policyOrMiddlewareSchema = yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (typeof value === 'function') {\n return yup.mixed().isFunction();\n }\n\n return yup.object({\n name: yup.string().required(),\n options: yup.object().notRequired(), // any options\n });\n});\n\nconst routeSchema = yup.object({\n method: yup.string().oneOf(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'ALL']).required(),\n path: yup.string().required(),\n handler: yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (Array.isArray(value)) {\n return yup.array().required();\n }\n\n return yup.mixed().isFunction().required();\n }),\n config: yup\n .object({\n auth: yup.lazy((value) => {\n if (value === false) {\n return yup.boolean().required();\n }\n\n return yup.object({\n scope: yup.array().of(yup.string()).required(),\n });\n }),\n policies: yup\n .array()\n // FIXME: fixed in yup v1\n .of(policyOrMiddlewareSchema as any)\n .notRequired(),\n middlewares: yup\n .array()\n // FIXME: fixed in yup v1\n .of(policyOrMiddlewareSchema as any)\n .notRequired(),\n })\n .notRequired(),\n});\n\nconst validateRouteConfig = (routeConfig: Core.RouteInput) => {\n try {\n return routeSchema.validateSync(routeConfig, {\n strict: true,\n abortEarly: false,\n stripUnknown: true,\n });\n } catch (error) {\n if (error instanceof yup.ValidationError) {\n throw new Error(`Invalid route config ${error.message}`);\n }\n }\n};\n\nconst createRouteManager = (strapi: Core.Strapi, opts: { type?: string } = {}) => {\n const { type } = opts;\n\n const composeEndpoint = createEndpointComposer(strapi);\n\n const createRoute = (route: Core.RouteInput, router: Router) => {\n validateRouteConfig(route);\n\n // NOTE: the router type is used to tag controller actions and for authentication / authorization so we need to pass this info down to the route level\n const routeWithInfo = Object.assign(route, {\n info: {\n ...(route.info ?? {}),\n type: type || 'api',\n },\n });\n\n composeEndpoint(routeWithInfo, { router });\n };\n\n const addRoutes = (routes: Core.Router | Core.RouteInput[], router: Router) => {\n if (Array.isArray(routes)) {\n routes.forEach((route) => createRoute(route, router));\n } else if (routes.routes) {\n const subRouter = new Router({ prefix: routes.prefix });\n\n routes.routes.forEach((route) => {\n const hasPrefix = has('prefix', route.config);\n createRoute(route, hasPrefix ? router : subRouter);\n });\n\n return router.use(subRouter.routes(), subRouter.allowedMethods());\n }\n };\n\n return {\n addRoutes,\n };\n};\n\nexport { validateRouteConfig, createRouteManager };\n","import Router from '@koa/router';\nimport type { Core } from '@strapi/types';\n\nimport { createRouteManager } from './routing';\n\ninterface Options {\n prefix?: string;\n type?: string;\n}\n\nconst createAPI = (strapi: Core.Strapi, opts: Options = {}) => {\n const { prefix, type } = opts;\n\n const api = new Router({ prefix });\n\n const routeManager = createRouteManager(strapi, { type });\n\n return {\n listRoutes() {\n return [...api.stack];\n },\n\n use(fn: Router.Middleware) {\n api.use(fn);\n return this;\n },\n\n routes(routes: Core.Router | Core.Route[]) {\n routeManager.addRoutes(routes, api);\n return this;\n },\n\n mount(router: Router) {\n router.use(api.routes(), api.allowedMethods());\n return this;\n },\n };\n};\n\nexport { createAPI };\n","import type { Core } from '@strapi/types';\nimport { createAPI } from './api';\n\nconst createAdminAPI = (strapi: Core.Strapi) => {\n const opts = {\n prefix: '', // '/admin';\n type: 'admin',\n };\n\n return createAPI(strapi, opts);\n};\n\nexport { createAdminAPI };\n","import type { Core } from '@strapi/types';\nimport { createAPI } from './api';\n\nconst createContentAPI = (strapi: Core.Strapi) => {\n const opts = {\n prefix: strapi.config.get('api.rest.prefix', '/api'),\n type: 'content-api',\n };\n\n return createAPI(strapi, opts);\n};\n\nexport { createContentAPI };\n","import _ from 'lodash';\nimport type { Core } from '@strapi/types';\n\nconst createRouteScopeGenerator = (namespace: string) => (route: Core.RouteInput) => {\n const prefix = namespace.endsWith('::') ? namespace : `${namespace}.`;\n\n if (typeof route.handler === 'string') {\n _.defaultsDeep(route, {\n config: {\n auth: {\n scope: [`${route.handler.startsWith(prefix) ? '' : prefix}${route.handler}`],\n },\n },\n });\n }\n};\n\n/**\n * Register all routes\n */\nexport default (strapi: Core.Strapi) => {\n registerAdminRoutes(strapi);\n registerAPIRoutes(strapi);\n registerPluginRoutes(strapi);\n};\n\n/**\n * Register admin routes\n * @param {import('../../').Strapi} strapi\n */\nconst registerAdminRoutes = (strapi: Core.Strapi) => {\n const generateRouteScope = createRouteScopeGenerator(`admin::`);\n\n _.forEach(strapi.admin.routes, (router) => {\n router.type = router.type || 'admin';\n router.prefix = router.prefix || `/admin`;\n router.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName: 'admin' };\n });\n strapi.server.routes(router);\n });\n};\n\n/**\n * Register plugin routes\n * @param {import('../../').Strapi} strapi\n */\nconst registerPluginRoutes = (strapi: Core.Strapi) => {\n for (const pluginName of Object.keys(strapi.plugins)) {\n const plugin = strapi.plugins[pluginName];\n\n const generateRouteScope = createRouteScopeGenerator(`plugin::${pluginName}`);\n\n if (Array.isArray(plugin.routes)) {\n plugin.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName };\n });\n\n strapi.server.routes({\n type: 'admin',\n prefix: `/${pluginName}`,\n routes: plugin.routes,\n });\n } else {\n _.forEach(plugin.routes, (router) => {\n router.type = router.type || 'admin';\n router.prefix = router.prefix || `/${pluginName}`;\n router.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName };\n });\n\n strapi.server.routes(router);\n });\n }\n }\n};\n\n/**\n * Register api routes\n */\nconst registerAPIRoutes = (strapi: Core.Strapi) => {\n for (const apiName of Object.keys(strapi.apis)) {\n const api = strapi.api(apiName);\n\n const generateRouteScope = createRouteScopeGenerator(`api::${apiName}`);\n\n _.forEach(api.routes, (router) => {\n // TODO: remove once auth setup\n // pass meta down to compose endpoint\n router.type = 'content-api';\n router.routes?.forEach((route) => {\n generateRouteScope(route);\n route.info = { apiName };\n });\n\n return strapi.server.routes(router);\n });\n }\n};\n","import { yup } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\nimport { resolveMiddlewares } from './middleware';\n\ntype MiddlewareConfig = (string | { name?: string; resolve?: string; config?: unknown })[];\n\nconst defaultConfig = [\n 'strapi::logger',\n 'strapi::errors',\n 'strapi::security',\n 'strapi::cors',\n 'strapi::poweredBy',\n 'strapi::session',\n 'strapi::query',\n 'strapi::body',\n 'strapi::favicon',\n 'strapi::public',\n];\n\nconst requiredMiddlewares = [\n 'strapi::errors',\n 'strapi::security',\n 'strapi::cors',\n 'strapi::query',\n 'strapi::body',\n 'strapi::public',\n 'strapi::favicon',\n];\n\nconst middlewareConfigSchema = yup.array().of(\n yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (typeof value === 'object') {\n return yup\n .object({\n name: yup.string(),\n resolve: yup.string(),\n config: yup.mixed(),\n })\n .required()\n .noUnknown();\n }\n\n return yup.mixed().test(() => false);\n }) as any // FIXME: yup v1\n);\n\n/**\n * Register middlewares in router\n */\nconst registerApplicationMiddlewares = async (strapi: Core.Strapi) => {\n const middlewareConfig: MiddlewareConfig = strapi.config.get('middlewares', defaultConfig);\n\n await validateMiddlewareConfig(middlewareConfig);\n\n const middlewares = await resolveMiddlewares(middlewareConfig, strapi);\n\n checkRequiredMiddlewares(middlewares);\n\n // NOTE: exclude middlewares that return nothing.\n // this is used for middlewares that only extend the app only need to be added in certain conditions\n for (const middleware of middlewares) {\n strapi.server.use(middleware.handler);\n }\n};\n\n/**\n *\n * @param {MiddlewaresConfig} config\n */\nconst validateMiddlewareConfig = async (config: MiddlewareConfig) => {\n try {\n await middlewareConfigSchema.validate(config, { strict: true, abortEarly: false });\n } catch (error) {\n throw new Error(\n 'Invalid middleware configuration. Expected Array<string|{name?: string, resolve?: string, config: any}.'\n );\n }\n};\n\n/**\n * Check if some required middlewares are missing in configure middlewares\n * @param {Middlewares} middlewares\n */\nconst checkRequiredMiddlewares = (middlewares: { name: string | null }[]) => {\n const missingMiddlewares = requiredMiddlewares.filter((name) => {\n return middlewares.findIndex((mdl) => mdl.name === name) === -1;\n });\n\n if (missingMiddlewares.length > 0) {\n throw new Error(\n `Missing required middlewares in configuration. Add the following middlewares: \"${missingMiddlewares.join(\n ', '\n )}\".`\n );\n }\n};\n\nexport default registerApplicationMiddlewares;\n","import createError from 'http-errors';\nimport { errors } from '@strapi/utils';\n\nconst mapErrorsAndStatus = [\n {\n classError: errors.UnauthorizedError,\n status: 401,\n },\n {\n classError: errors.ForbiddenError,\n status: 403,\n },\n {\n classError: errors.NotFoundError,\n status: 404,\n },\n {\n classError: errors.PayloadTooLargeError,\n status: 413,\n },\n {\n classError: errors.RateLimitError,\n status: 429,\n },\n {\n classError: errors.NotImplementedError,\n status: 501,\n },\n];\n\nconst formatApplicationError = (error: InstanceType<typeof errors.ApplicationError>) => {\n const errorAndStatus = mapErrorsAndStatus.find((pair) => error instanceof pair.classError);\n const status = errorAndStatus ? errorAndStatus.status : 400;\n\n return {\n status,\n body: {\n data: null,\n error: {\n status,\n name: error.name,\n message: error.message,\n details: error.details,\n },\n },\n };\n};\n\nconst formatHttpError = (error: createError.HttpError) => {\n return {\n status: error.status,\n body: {\n data: null,\n error: {\n status: error.status,\n name: error.name,\n message: error.message,\n details: error.details,\n },\n },\n };\n};\n\nconst formatInternalError = (error: unknown) => {\n if (!(error instanceof Error)) {\n return formatHttpError(createError(500));\n }\n\n const httpError = createError(error);\n\n if (httpError.expose) {\n return formatHttpError(httpError);\n }\n\n return formatHttpError(createError(httpError.status || 500));\n};\n\nexport { formatApplicationError, formatHttpError, formatInternalError };\n","import { isNil, camelCase } from 'lodash/fp';\nimport Koa from 'koa';\nimport createError from 'http-errors';\nimport delegate from 'delegates';\nimport statuses from 'statuses';\nimport { formatHttpError } from '../errors';\n\ndeclare module 'koa' {\n interface BaseResponse {\n send: (data: any, status?: number) => void;\n created: (data: any) => void;\n deleted: (data: any) => void;\n _explicitStatus: boolean;\n [key: string]: (message: string, details?: unknown) => void;\n }\n}\n\nconst addCustomMethods = (app: Koa) => {\n const delegator = delegate(app.context, 'response');\n\n /* errors */\n statuses.codes\n .filter((code) => code >= 400 && code < 600)\n .forEach((code) => {\n const name = statuses(code);\n\n const camelCasedName = camelCase(name);\n app.response[camelCasedName] = function responseCode(message = name, details = {}) {\n const httpError = createError(code, message, { details });\n const { status, body } = formatHttpError(httpError);\n this.status = status;\n this.body = body;\n };\n delegator.method(camelCasedName);\n });\n\n /* send, created, deleted */\n app.response.send = function send(data, status = 200) {\n this.status = status;\n this.body = data;\n };\n\n app.response.created = function created(data) {\n this.status = 201;\n this.body = data;\n };\n\n app.response.deleted = function deleted(data) {\n if (isNil(data)) {\n this.status = 204;\n } else {\n this.status = 200;\n this.body = data;\n }\n };\n\n delegator.method('send').method('created').method('deleted');\n\n return app;\n};\n\nconst createKoaApp = ({ proxy, keys }: { proxy: boolean; keys: string[] }) => {\n const app = new Koa({ proxy });\n app.keys = keys;\n\n addCustomMethods(app);\n\n return app;\n};\n\nexport default createKoaApp;\n","import Router from '@koa/router';\nimport type { Core, Modules } from '@strapi/types';\n\nimport { createHTTPServer } from './http-server';\nimport { createRouteManager } from './routing';\nimport { createAdminAPI } from './admin-api';\nimport { createContentAPI } from './content-api';\nimport registerAllRoutes from './register-routes';\nimport registerApplicationMiddlewares from './register-middlewares';\nimport createKoaApp from './koa';\nimport requestCtx from '../request-context';\n\nconst healthCheck: Core.MiddlewareHandler = async (ctx) => {\n ctx.set('strapi', 'You are so French!');\n ctx.status = 204;\n};\n\nconst createServer = (strapi: Core.Strapi): Modules.Server.Server => {\n const app = createKoaApp({\n proxy: strapi.config.get('server.proxy.koa'),\n keys: strapi.config.get('server.app.keys'),\n });\n\n app.use((ctx, next) => requestCtx.run(ctx, () => next()));\n\n const router = new Router();\n\n const routeManager = createRouteManager(strapi);\n\n const httpServer = createHTTPServer(strapi, app);\n\n const apis = {\n 'content-api': createContentAPI(strapi),\n admin: createAdminAPI(strapi),\n };\n\n // init health check\n router.all('/_health', healthCheck);\n\n const state = {\n mounted: false,\n };\n\n return {\n app,\n router,\n httpServer,\n\n api(name) {\n return apis[name];\n },\n\n use(...args) {\n app.use(...args);\n return this;\n },\n\n routes(routes: Core.Router | Omit<Core.Route, 'info'>[]) {\n if (!Array.isArray(routes) && routes.type) {\n const api = apis[routes.type];\n if (!api) {\n throw new Error(`API ${routes.type} not found. Possible APIs are ${Object.keys(apis)}`);\n }\n\n apis[routes.type].routes(routes);\n return this;\n }\n\n routeManager.addRoutes(routes, router);\n return this;\n },\n\n mount() {\n state.mounted = true;\n\n Object.values(apis).forEach((api) => api.mount(router));\n app.use(router.routes()).use(router.allowedMethods());\n\n return this;\n },\n\n initRouting() {\n registerAllRoutes(strapi);\n\n return this;\n },\n\n async initMiddlewares() {\n await registerApplicationMiddlewares(strapi);\n\n return this;\n },\n\n listRoutes() {\n return [...router.stack];\n },\n\n listen(...args: any[]) {\n if (!state.mounted) {\n this.mount();\n }\n\n return httpServer.listen(...args);\n },\n\n async destroy() {\n await httpServer.destroy();\n },\n };\n};\n\nexport { createServer };\n","import type { Core } from '@strapi/types';\n\nexport const createReloader = (strapi: Core.Strapi) => {\n const state = {\n shouldReload: 0,\n isWatching: true,\n };\n\n function reload() {\n if (state.shouldReload > 0) {\n // Reset the reloading state\n state.shouldReload -= 1;\n reload.isReloading = false;\n return;\n }\n\n if (strapi.config.get('autoReload')) {\n process.send?.('reload');\n }\n }\n\n Object.defineProperty(reload, 'isWatching', {\n configurable: true,\n enumerable: true,\n set(value) {\n // Special state when the reloader is disabled temporarly (see GraphQL plugin example).\n if (state.isWatching === false && value === true) {\n state.shouldReload += 1;\n }\n state.isWatching = value;\n },\n get() {\n return state.isWatching;\n },\n });\n\n reload.isReloading = false;\n reload.isWatching = true;\n\n return reload;\n};\n","import type { Core } from '@strapi/types';\n\nexport type Provider = {\n init?: (strapi: Core.Strapi) => void;\n register?: (strapi: Core.Strapi) => Promise<void>;\n bootstrap?: (strapi: Core.Strapi) => Promise<void>;\n destroy?: (strapi: Core.Strapi) => Promise<void>;\n};\n\nexport const defineProvider = (provider: Provider) => provider;\n","import _ from 'lodash';\nimport { yup, strings } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\n\nconst LIFECYCLES = [\n 'beforeCreate',\n 'afterCreate',\n 'beforeFindOne',\n 'afterFindOne',\n 'beforeFindMany',\n 'afterFindMany',\n 'beforeCount',\n 'afterCount',\n 'beforeCreateMany',\n 'afterCreateMany',\n 'beforeUpdate',\n 'afterUpdate',\n 'beforeUpdateMany',\n 'afterUpdateMany',\n 'beforeDelete',\n 'afterDelete',\n 'beforeDeleteMany',\n 'afterDeleteMany',\n] as const;\n\n/**\n * For enumerations the least common denomiator is GraphQL, where\n * values needs to match the secure name regex:\n * GraphQL Spec https://spec.graphql.org/June2018/#sec-Names\n *\n * Therefore we need to make sure our users only use values, which\n * can be returned by GraphQL, by checking the regressed values\n * agains the GraphQL regex.\n *\n * TODO V5: check if we can avoid this coupling by moving this logic\n * into the GraphQL plugin.\n */\nconst GRAPHQL_ENUM_REGEX = /^[_A-Za-z][_0-9A-Za-z]*$/;\n\nconst lifecyclesShape = _.mapValues(_.keyBy(LIFECYCLES), () => yup.mixed().nullable().isFunction());\n\nconst contentTypeSchemaValidator = yup.object().shape({\n schema: yup.object().shape({\n info: yup\n .object()\n .shape({\n displayName: yup.string().required(),\n singularName: yup.string().isKebabCase().required(),\n pluralName: yup.string().isKebabCase().required(),\n })\n .required(),\n attributes: yup.object().test({\n name: 'valuesCollide',\n message: 'Some values collide when normalized',\n test(attributes: Schema.ContentType['attributes']) {\n for (const attrName of Object.keys(attributes)) {\n const attr = attributes[attrName];\n if (attr.type === 'enumeration') {\n const regressedValues = attr.enum.map(strings.toRegressedEnumValue);\n\n // should match the GraphQL regex\n if (!regressedValues.every((value: string) => GRAPHQL_ENUM_REGEX.test(value))) {\n const message = `Invalid enumeration value. Values should have at least one alphabetical character preceding the first occurence of a number. Update your enumeration '${attrName}'.`;\n\n return this.createError({ message });\n }\n\n // should not contain empty values\n if (regressedValues.some((value: string) => value === '')) {\n return this.createError({\n message: `At least one value of the enumeration '${attrName}' appears to be empty. Only alphanumerical characters are taken into account.`,\n });\n }\n\n // should not collide\n const duplicates = _.uniq(\n regressedValues.filter(\n (value: string, index: number, values: string[]) => values.indexOf(value) !== index\n )\n );\n\n if (duplicates.length) {\n const message = `Some enumeration values of the field '${attrName}' collide when normalized: ${duplicates.join(\n ', '\n )}. Please modify your enumeration.`;\n\n return this.createError({ message });\n }\n }\n }\n\n return true;\n },\n }),\n }),\n actions: yup.object().onlyContainsFunctions(),\n lifecycles: yup.object().shape(lifecyclesShape).noUnknown(),\n});\n\nconst validateContentTypeDefinition = (data: unknown) => {\n return contentTypeSchemaValidator.validateSync(data, { strict: true, abortEarly: false });\n};\n\nexport { validateContentTypeDefinition };\n","import { cloneDeep } from 'lodash/fp';\nimport _ from 'lodash';\nimport { yup, contentTypes as contentTypesUtils } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\nimport { validateContentTypeDefinition } from './validator';\n\nexport type ContentTypeDefinition = {\n schema: Schema.ContentType;\n actions: Record<string, unknown>;\n lifecycles: Record<string, unknown>;\n};\n\nconst {\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n} = contentTypesUtils.constants;\n\nconst createContentType = (uid: string, definition: ContentTypeDefinition) => {\n try {\n validateContentTypeDefinition(definition);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n throw new Error(`Content Type Definition is invalid for ${uid}'.\\n${e.errors}`);\n }\n\n throw e;\n }\n\n const { schema, actions, lifecycles } = cloneDeep(definition);\n\n // general info\n Object.assign(schema, {\n uid,\n modelType: 'contentType',\n kind: schema.kind || 'collectionType',\n __schema__: pickSchema(definition.schema),\n modelName: definition.schema.info.singularName,\n actions,\n lifecycles,\n });\n\n addTimestamps(schema);\n\n // Published at is added regardless of draft and publish being enabled\n // In case it is not enabled, value will be always published, and it will not contain a draft\n addDraftAndPublish(schema);\n\n addCreatorFields(schema);\n\n return schema;\n};\n\nconst addTimestamps = (schema: Schema.ContentType) => {\n // attributes\n Object.assign(schema.attributes, {\n [CREATED_AT_ATTRIBUTE]: {\n type: 'datetime',\n },\n // TODO: handle on edit set to new date\n [UPDATED_AT_ATTRIBUTE]: {\n type: 'datetime',\n },\n });\n};\n\nconst addDraftAndPublish = (schema: Schema.ContentType) => {\n if (!_.has(schema, 'options.draftAndPublish')) {\n _.set(schema, 'options.draftAndPublish', false); // Disabled by default\n }\n\n schema.attributes[PUBLISHED_AT_ATTRIBUTE] = {\n type: 'datetime',\n configurable: false,\n writable: true,\n visible: false,\n default() {\n return new Date();\n },\n };\n};\n\nconst addCreatorFields = (schema: Schema.ContentType) => {\n const isPrivate = !_.get(schema, 'options.populateCreatorFields', false);\n\n schema.attributes[CREATED_BY_ATTRIBUTE] = {\n type: 'relation',\n relation: 'oneToOne',\n target: 'admin::user',\n configurable: false,\n writable: false,\n visible: false,\n useJoinTable: false,\n private: isPrivate,\n };\n\n schema.attributes[UPDATED_BY_ATTRIBUTE] = {\n type: 'relation',\n relation: 'oneToOne',\n target: 'admin::user',\n configurable: false,\n writable: false,\n visible: false,\n useJoinTable: false,\n private: isPrivate,\n };\n};\n\nconst getGlobalId = (schema: Schema.ContentType, prefix?: string) => {\n const modelName = schema.info.singularName;\n const globalId = prefix ? `${prefix}-${modelName}` : modelName;\n\n return schema.globalId || _.upperFirst(_.camelCase(globalId));\n};\n\nconst pickSchema = (model: Schema.ContentType) => {\n const schema = _.cloneDeep(\n _.pick(model, [\n 'connection',\n 'collectionName',\n 'info',\n 'options',\n 'pluginOptions',\n 'attributes',\n 'kind',\n ])\n );\n\n schema.kind = model.kind || 'collectionType';\n return schema;\n};\n\nexport { createContentType, getGlobalId };\n","import _ from 'lodash';\nimport type { Core, Struct } from '@strapi/types';\nimport { getGlobalId } from '../domain/content-type';\n\nexport default async function loadAdmin(strapi: Core.Strapi) {\n // strapi.admin = require('@strapi/admin/strapi-server');\n\n strapi.get('services').add(`admin::`, strapi.admin?.services);\n strapi.get('controllers').add(`admin::`, strapi.admin?.controllers);\n strapi.get('content-types').add(`admin::`, formatContentTypes(strapi.admin?.contentTypes ?? {}));\n strapi.get('policies').add(`admin::`, strapi.admin?.policies);\n strapi.get('middlewares').add(`admin::`, strapi.admin?.middlewares);\n\n const userAdminConfig = strapi.config.get('admin');\n strapi.get('config').set('admin', _.merge(strapi.admin?.config, userAdminConfig));\n}\n\nconst formatContentTypes = (contentTypes: Record<string, { schema: Struct.ContentTypeSchema }>) => {\n Object.values(contentTypes).forEach((definition) => {\n const { schema } = definition;\n\n Object.assign(schema, {\n plugin: 'admin',\n globalId: getGlobalId(schema, 'admin'),\n });\n });\n\n return contentTypes;\n};\n","import { defineProvider } from './provider';\nimport loadAdmin from '../loaders/admin';\n\nexport default defineProvider({\n init(strapi) {\n // eslint-disable-next-line node/no-missing-require\n strapi.add('admin', () => require('@strapi/admin/strapi-server'));\n },\n\n async register(strapi) {\n await loadAdmin(strapi);\n\n await strapi.get('admin')?.register({ strapi });\n },\n\n async bootstrap(strapi) {\n await strapi.get('admin')?.bootstrap({ strapi });\n },\n\n async destroy(strapi) {\n await strapi.get('admin')?.destroy({ strapi });\n },\n});\n","import { toString } from 'lodash/fp';\nimport type { Database, Model } from '@strapi/database';\n\nconst coreStoreModel: Model = {\n uid: 'strapi::core-store',\n singularName: 'strapi_core_store_settings',\n tableName: 'strapi_core_store_settings',\n attributes: {\n id: {\n type: 'increments',\n },\n key: {\n type: 'string',\n },\n value: {\n type: 'text',\n },\n type: {\n type: 'string',\n },\n environment: {\n type: 'string',\n },\n tag: {\n type: 'string',\n },\n },\n};\n\ntype SetParams = {\n key: string;\n value: unknown;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype GetParams = {\n key: string;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype Params = SetParams & GetParams;\n\ninterface CoreStore {\n (defaultParams: Partial<Params>): {\n get(params: Partial<GetParams>): Promise<unknown>;\n set(params: Partial<SetParams>): Promise<void>;\n delete(params: Partial<GetParams>): Promise<void>;\n };\n get(params: GetParams): Promise<unknown>;\n set(params: SetParams): Promise<void>;\n delete(params: GetParams): Promise<void>;\n}\n\nconst createCoreStore = ({ db }: { db: Database }) => {\n const mergeParams = (defaultParams: Partial<Params>, params: Params): Params => {\n return {\n ...defaultParams,\n ...params,\n };\n };\n\n const store: CoreStore = function (defaultParams: Partial<Params>) {\n return {\n get: (params: Params) => store.get(mergeParams(defaultParams, params)),\n set: (params: Params) => store.set(mergeParams(defaultParams, params)),\n delete: (params: Params) => store.delete(mergeParams(defaultParams, params)),\n };\n };\n\n /**\n * Get value from the core store\n */\n store.get = async (params) => {\n const { key, type = 'core', environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (!data) {\n return null;\n }\n\n if (\n data.type === 'object' ||\n data.type === 'array' ||\n data.type === 'boolean' ||\n data.type === 'string'\n ) {\n try {\n return JSON.parse(data.value);\n } catch (err) {\n return new Date(data.value);\n }\n } else if (data.type === 'number') {\n return Number(data.value);\n } else {\n return null;\n }\n };\n\n /**\n * Set value in the core store\n * @param {Object} params\n * @returns {*}\n */\n store.set = async (params) => {\n const { key, value, type, environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (data) {\n return db.query('strapi::core-store').update({\n where: { id: data.id },\n data: {\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n }\n\n return db.query('strapi::core-store').create({\n data: {\n ...where,\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n };\n\n /**\n * Deletes a value from the core store\n * @param {Object} params\n * @returns {*}\n */\n store.delete = async (params) => {\n const { key, environment, type, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n return db.query('strapi::core-store').delete({ where });\n };\n\n return store;\n};\n\nexport { coreStoreModel, createCoreStore };\n","import { defineProvider } from './provider';\nimport { createCoreStore, coreStoreModel } from '../services/core-store';\n\nexport default defineProvider({\n init(strapi) {\n strapi.get('models').add(coreStoreModel);\n strapi.add('coreStore', () => createCoreStore({ db: strapi.db }));\n },\n});\n","import { Job, Spec } from 'node-schedule';\nimport { isFunction } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\ninterface JobSpec {\n job: Job;\n options: Spec;\n name: string | null;\n}\n\ntype TaskFn = ({ strapi }: { strapi: Core.Strapi }, ...args: unknown[]) => Promise<unknown>;\n\ntype Task =\n | TaskFn\n | {\n task: TaskFn;\n options: Spec;\n };\n\ninterface Tasks {\n [key: string]: Task;\n}\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: Spec;\n let taskName: string | null;\n if (isFunction(taskValue)) {\n // don't use task name if key is the rule\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (isFunction(taskValue.task)) {\n // set task name if key is not the rule\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const fnWithStrapi = (...args: unknown[]) => fn({ strapi }, ...args);\n\n // const job = new Job(null, fnWithStrapi);\n const job = new Job(fnWithStrapi);\n jobsSpecs.push({ job, options, name: taskName });\n\n if (running) {\n job.schedule(options);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) throw new Error('You must provide a name to remove a cron job.');\n const matchingJobsSpecs = jobsSpecs.filter(({ name: jobSpecName }, index) => {\n if (jobSpecName === name) {\n jobsSpecs.splice(index, 1);\n return true;\n }\n return false;\n });\n matchingJobsSpecs.forEach(({ job }) => job.cancel());\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job, options }) => job.schedule(options));\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.cancel());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs = [];\n return this;\n },\n jobs: jobsSpecs,\n };\n};\n\nexport default createCronService;\n","import { defineProvider } from './provider';\nimport createCronService from '../services/cron';\n\nexport default defineProvider({\n init(strapi) {\n strapi.add('cron', () => createCronService());\n },\n async bootstrap(strapi) {\n if (strapi.config.get('server.cron.enabled', true)) {\n const cronTasks = strapi.config.get('server.cron.tasks', {});\n strapi.get('cron').add(cronTasks);\n }\n\n strapi.get('cron').start();\n },\n async destroy(strapi) {\n strapi.get('cron').destroy();\n },\n});\n","const hasNamespace = (name: string, namespace: string) => {\n if (!namespace) {\n return true;\n }\n\n if (namespace.endsWith('::')) {\n return name.startsWith(namespace);\n }\n return name.startsWith(`${namespace}.`);\n};\n\nconst addNamespace = (name: string, namespace: string) => {\n if (namespace.endsWith('::')) {\n return `${namespace}${name}`;\n }\n return `${namespace}.${name}`;\n};\n\nconst removeNamespace = (name: string, namespace: string) => {\n if (namespace.endsWith('::')) {\n return name.replace(namespace, '');\n }\n return name.replace(`${namespace}.`, '');\n};\n\nexport { addNamespace, removeNamespace, hasNamespace };\n","import { pickBy, has } from 'lodash/fp';\nimport type { UID, Struct } from '@strapi/types';\nimport { createContentType, ContentTypeDefinition } from '../domain/content-type';\nimport { addNamespace, hasNamespace } from './namespace';\n\ntype ContentTypesInput = Record<string, ContentTypeDefinition>;\ntype ContentTypeExtendFn = (contentType: Struct.ContentTypeSchema) => Struct.ContentTypeSchema;\n\nconst validateKeySameToSingularName = (contentTypes: ContentTypesInput) => {\n for (const ctName of Object.keys(contentTypes)) {\n const contentType = contentTypes[ctName];\n\n if (ctName !== contentType.schema.info.singularName) {\n throw new Error(\n `The key of the content-type should be the same as its singularName. Found ${ctName} and ${contentType.schema.info.singularName}.`\n );\n }\n }\n};\n\nconst contentTypesRegistry = () => {\n const contentTypes: Record<string, Struct.ContentTypeSchema> = {};\n\n return {\n /**\n * Returns this list of registered contentTypes uids\n */\n keys() {\n return Object.keys(contentTypes);\n },\n\n /**\n * Returns the instance of a contentType. Instantiate the contentType if not already done\n */\n get(uid: UID.ContentType) {\n return contentTypes[uid];\n },\n\n /**\n * Returns a map with all the contentTypes in a namespace\n */\n getAll(namespace: string) {\n return pickBy((_, uid) => hasNamespace(uid, namespace))(contentTypes);\n },\n\n /**\n * Registers a contentType\n */\n set(uid: UID.ContentType, contentType: Struct.ContentTypeSchema) {\n contentTypes[uid] = contentType;\n return this;\n },\n\n /**\n * Registers a map of contentTypes for a specific namespace\n */\n add(namespace: string, newContentTypes: ContentTypesInput) {\n validateKeySameToSingularName(newContentTypes);\n\n for (const rawCtName of Object.keys(newContentTypes)) {\n const uid = addNamespace(rawCtName, namespace);\n\n if (has(uid, contentTypes)) {\n throw new Error(`Content-type ${uid} has already been registered.`);\n }\n\n contentTypes[uid] = createContentType(uid, newContentTypes[rawCtName]);\n }\n },\n\n /**\n * Wraps a contentType to extend it\n */\n extend(ctUID: UID.ContentType, extendFn: ContentTypeExtendFn) {\n const currentContentType = this.get(ctUID);\n\n if (!currentContentType) {\n throw new Error(`Content-Type ${ctUID} doesn't exist`);\n }\n\n extendFn(currentContentType);\n\n return this;\n },\n };\n};\n\nexport default contentTypesRegistry;\n","import { has } from 'lodash/fp';\nimport type { Struct, UID } from '@strapi/types';\n\nconst componentsRegistry = () => {\n const components: Record<UID.Component, Struct.ComponentSchema> = {};\n\n return {\n /**\n * Returns this list of registered components uids\n */\n keys(): UID.Component[] {\n return Object.keys(components) as UID.Component[];\n },\n\n /**\n * Returns the instance of a component. Instantiate the component if not already done\n */\n get(uid: UID.Component) {\n return components[uid];\n },\n\n /**\n * Returns a map with all the components in a namespace\n */\n getAll() {\n return components;\n },\n\n /**\n * Registers a component\n */\n set(uid: UID.Component, component: Struct.ComponentSchema) {\n if (has(uid, components)) {\n throw new Error(`Component ${uid} has already been registered.`);\n }\n\n components[uid] = component;\n\n return this;\n },\n\n /**\n * Registers a map of components for a specific namespace\n */\n add(newComponents: Record<UID.Component, Struct.ComponentSchema>) {\n for (const uid of Object.keys(newComponents) as UID.Component[]) {\n this.set(uid, newComponents[uid]);\n }\n },\n };\n};\n\nexport default componentsRegistry;\n","import { pickBy, has } from 'lodash/fp';\nimport type { Core, UID } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\nexport type ServiceFactory = (params: { strapi: Core.Strapi }) => Core.Service | Core.Service;\nexport type ServiceFactoryMap = Record<string, ServiceFactory>;\nexport type ServiceMap = Record<string, Core.Service>;\nexport type ServiceExtendFn = (service: Core.Service) => Core.Service;\n\nconst servicesRegistry = (strapi: Core.Strapi) => {\n const services: ServiceFactoryMap = {};\n const instantiatedServices: ServiceMap = {};\n\n return {\n /**\n * Returns this list of registered services uids\n */\n keys() {\n return Object.keys(services);\n },\n\n /**\n * Returns the instance of a service. Instantiate the service if not already done\n */\n get(uid: UID.Service) {\n if (instantiatedServices[uid]) {\n return instantiatedServices[uid];\n }\n\n const service = services[uid];\n if (service) {\n instantiatedServices[uid] = typeof service === 'function' ? service({ strapi }) : service;\n return instantiatedServices[uid];\n }\n },\n\n /**\n * Returns a map with all the services in a namespace\n */\n getAll(namespace: string): ServiceMap {\n const filteredServices = pickBy((_, uid) => hasNamespace(uid, namespace))(services);\n\n // create lazy accessor to avoid instantiating the services;\n const map = {};\n for (const uid of Object.keys(filteredServices)) {\n Object.defineProperty(map, uid, {\n enumerable: true,\n get: () => {\n return this.get(uid as UID.Service);\n },\n });\n }\n\n return map;\n },\n\n /**\n * Registers a service\n */\n set(uid: string, service: ServiceFactory) {\n services[uid] = service;\n delete instantiatedServices[uid];\n return this;\n },\n\n /**\n * Registers a map of services for a specific namespace\n */\n add(namespace: string, newServices: ServiceFactoryMap) {\n for (const serviceName of Object.keys(newServices)) {\n const service = newServices[serviceName];\n const uid = addNamespace(serviceName, namespace);\n\n if (has(uid, services)) {\n throw new Error(`Service ${uid} has already been registered.`);\n }\n services[uid] = service;\n }\n\n return this;\n },\n\n /**\n * Wraps a service to extend it\n */\n extend(uid: UID.Service, extendFn: ServiceExtendFn) {\n const currentService = this.get(uid);\n\n if (!currentService) {\n throw new Error(`Service ${uid} doesn't exist`);\n }\n\n const newService = extendFn(currentService);\n instantiatedServices[uid] = newService;\n\n return this;\n },\n };\n};\n\nexport default servicesRegistry;\n","import { pickBy, has, castArray } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\nconst PLUGIN_PREFIX = 'plugin::';\nconst API_PREFIX = 'api::';\n\ninterface PolicyInfo {\n name: string;\n config: unknown;\n}\n\ntype PolicyConfig = string | PolicyInfo;\n\ninterface NamespaceInfo {\n pluginName?: string;\n apiName?: string;\n}\n\nconst parsePolicy = (policy: string | PolicyInfo) => {\n if (typeof policy === 'string') {\n return { policyName: policy, config: {} };\n }\n\n const { name, config } = policy;\n return { policyName: name, config };\n};\n\nconst policiesRegistry = () => {\n const policies = new Map<string, Core.Policy>();\n\n const find = (name: string, namespaceInfo?: NamespaceInfo) => {\n const { pluginName, apiName } = namespaceInfo ?? {};\n\n // try to resolve a full name to avoid extra prefixing\n const policy = policies.get(name);\n\n if (policy) {\n return policy;\n }\n\n if (pluginName) {\n return policies.get(`${PLUGIN_PREFIX}${pluginName}.${name}`);\n }\n\n if (apiName) {\n return policies.get(`${API_PREFIX}${apiName}.${name}`);\n }\n };\n\n function resolveHandler(policyConfig: PolicyConfig, namespaceInfo?: NamespaceInfo): Core.Policy;\n function resolveHandler(\n policyConfig: PolicyConfig[],\n namespaceInfo?: NamespaceInfo\n ): Core.Policy[];\n function resolveHandler(\n policyConfig: PolicyConfig | PolicyConfig[],\n namespaceInfo?: NamespaceInfo\n ): Core.Policy | Core.Policy[] {\n if (Array.isArray(policyConfig)) {\n return policyConfig.map((config) => {\n return resolveHandler(config, namespaceInfo);\n });\n }\n\n const { policyName, config } = parsePolicy(policyConfig);\n\n const policy = find(policyName, namespaceInfo);\n\n if (!policy) {\n throw new Error(`Policy ${policyName} not found.`);\n }\n\n if (typeof policy === 'function') {\n return policy;\n }\n\n if (policy.validator) {\n policy.validator(config);\n }\n\n return policy.handler;\n }\n\n return {\n /**\n * Returns this list of registered policies uids\n */\n keys() {\n // Return an array so format stays the same as controllers, services, etc\n return Array.from(policies.keys());\n },\n\n /**\n * Returns the instance of a policy. Instantiate the policy if not already done\n */\n get(name: string, namespaceInfo?: NamespaceInfo) {\n return find(name, namespaceInfo);\n },\n /**\n * Checks if a policy is registered\n */\n has(name: string, namespaceInfo?: NamespaceInfo) {\n const res = find(name, namespaceInfo);\n return !!res;\n },\n\n /**\n * Returns a map with all the policies in a namespace\n */\n getAll(namespace: string) {\n return pickBy((_, uid) => hasNamespace(uid, namespace))(Object.fromEntries(policies));\n },\n\n /**\n * Registers a policy\n */\n set(uid: string, policy: Core.Policy) {\n policies.set(uid, policy);\n return this;\n },\n\n /**\n * Registers a map of policies for a specific namespace\n */\n add(namespace: string, newPolicies: Record<string, Core.Policy>) {\n for (const policyName of Object.keys(newPolicies)) {\n const policy = newPolicies[policyName];\n const uid = addNamespace(policyName, namespace);\n\n if (has(uid, policies)) {\n throw new Error(`Policy ${uid} has already been registered.`);\n }\n\n policies.set(uid, policy);\n }\n },\n\n /**\n * Resolves a list of policies\n */\n resolve(config: PolicyConfig | PolicyConfig[], namespaceInfo?: NamespaceInfo) {\n const { pluginName, apiName } = namespaceInfo ?? {};\n\n return castArray(config).map((policyConfig) => {\n return {\n handler: resolveHandler(policyConfig, { pluginName, apiName }),\n config: (typeof policyConfig === 'object' && policyConfig.config) || {},\n };\n });\n },\n };\n};\n\nexport default policiesRegistry;\n","import { pickBy, has } from 'lodash/fp';\nimport type { Core, UID } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\ntype MiddlewareExtendFn = (middleware: Core.Middleware) => Core.Middleware;\n\n// TODO: move instantiation part here instead of in the server service\nconst middlewaresRegistry = () => {\n const middlewares: Record<UID.Middleware, Core.Middleware> = {};\n\n return {\n /**\n * Returns this list of registered middlewares uids\n */\n keys() {\n return Object.keys(middlewares);\n },\n\n /**\n * Returns the instance of a middleware. Instantiate the middleware if not already done\n */\n get(uid: UID.Middleware) {\n return middlewares[uid];\n },\n\n /**\n * Returns a map with all the middlewares in a namespace\n */\n getAll(namespace: string) {\n return pickBy((_, uid) => hasNamespace(uid, namespace))(middlewares);\n },\n\n /**\n * Registers a middleware\n */\n set(uid: UID.Middleware, middleware: Core.Middleware) {\n middlewares[uid] = middleware;\n return this;\n },\n\n /**\n * Registers a map of middlewares for a specific namespace\n */\n add(namespace: string, rawMiddlewares: Record<string, Core.Middleware> = {}) {\n for (const middlewareName of Object.keys(rawMiddlewares)) {\n const middleware = rawMiddlewares[middlewareName];\n const uid = addNamespace(middlewareName, namespace) as UID.Middleware;\n\n if (has(uid, middlewares)) {\n throw new Error(`Middleware ${uid} has already been registered.`);\n }\n middlewares[uid] = middleware;\n }\n },\n\n /**\n * Wraps a middleware to extend it\n */\n extend(uid: UID.Middleware, extendFn: MiddlewareExtendFn) {\n const currentMiddleware = this.get(uid);\n\n if (!currentMiddleware) {\n throw new Error(`Middleware ${uid} doesn't exist`);\n }\n\n const newMiddleware = extendFn(currentMiddleware);\n middlewares[uid] = newMiddleware;\n\n return this;\n },\n };\n};\n\nexport default middlewaresRegistry;\n","import { pickBy } from 'lodash/fp';\nimport { addNamespace, hasNamespace } from './namespace';\n\ntype Handler = (context: any) => any;\n\ntype AsyncHook = {\n handlers: Handler[];\n register(handler: Handler): AsyncHook;\n delete(handler: Handler): AsyncHook;\n call(): Promise<void>;\n};\n\ntype SyncHook = {\n get handlers(): Handler[];\n register(handler: Handler): SyncHook;\n delete(handler: Handler): SyncHook;\n call(): void;\n};\n\nexport type Hook = AsyncHook | SyncHook;\n\ntype HookExtendFn = (hook: Hook) => Hook;\n\nconst hooksRegistry = () => {\n const hooks: Record<string, Hook> = {};\n\n return {\n /**\n * Returns this list of registered hooks uids\n */\n keys() {\n return Object.keys(hooks);\n },\n\n /**\n * Returns the instance of a hook.\n */\n get(uid: string) {\n return hooks[uid];\n },\n\n /**\n * Returns a map with all the hooks in a namespace\n */\n getAll(namespace: string) {\n return pickBy((_, uid) => hasNamespace(uid, namespace))(hooks);\n },\n\n /**\n * Registers a hook\n */\n set(uid: string, hook: Hook) {\n hooks[uid] = hook;\n return this;\n },\n\n /**\n * Registers a map of hooks for a specific namespace\n */\n add(namespace: string, hooks: Record<string, Hook>) {\n for (const hookName of Object.keys(hooks)) {\n const hook = hooks[hookName];\n const uid = addNamespace(hookName, namespace);\n\n this.set(uid, hook);\n }\n\n return this;\n },\n\n /**\n * Wraps a hook to extend it\n */\n extend(uid: string, extendFn: HookExtendFn) {\n const currentHook = this.get(uid);\n\n if (!currentHook) {\n throw new Error(`Hook ${uid} doesn't exist`);\n }\n\n const newHook = extendFn(currentHook);\n hooks[uid] = newHook;\n\n return this;\n },\n };\n};\n\nexport default hooksRegistry;\n","import { pickBy, has } from 'lodash/fp';\nimport type { Core, UID } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\nexport type ControllerFactory =\n | ((params: { strapi: Core.Strapi }) => Core.Controller)\n | Core.Controller;\nexport type ControllerFactoryMap = Record<UID.Controller, ControllerFactory>;\nexport type ControllerMap = Record<UID.Controller, Core.Controller>;\nexport type ControllerExtendFn = (service: Core.Controller) => Core.Controller;\n\nconst controllersRegistry = (strapi: Core.Strapi) => {\n const controllers: ControllerFactoryMap = {};\n const instances: ControllerMap = {};\n\n return {\n /**\n * Returns this list of registered controllers uids\n */\n keys() {\n return Object.keys(controllers);\n },\n\n /**\n * Returns the instance of a controller. Instantiate the controller if not already done\n */\n get(uid: UID.Controller) {\n if (instances[uid]) {\n return instances[uid];\n }\n\n const controller = controllers[uid];\n\n if (controller) {\n instances[uid] = typeof controller === 'function' ? controller({ strapi }) : controller;\n return instances[uid];\n }\n },\n\n /**\n * Returns a map with all the controller in a namespace\n */\n getAll(namespace: string) {\n const filteredControllers = pickBy((_, uid) => hasNamespace(uid, namespace))(controllers);\n\n const map = {};\n for (const uid of Object.keys(filteredControllers) as UID.Controller[]) {\n Object.defineProperty(map, uid, {\n enumerable: true,\n get: () => {\n return this.get(uid);\n },\n });\n }\n\n return map;\n },\n\n /**\n * Registers a controller\n */\n set(uid: UID.Controller, value: ControllerFactory) {\n controllers[uid] = value;\n delete instances[uid];\n return this;\n },\n\n /**\n * Registers a map of controllers for a specific namespace\n */\n add(namespace: string, newControllers: ControllerFactoryMap) {\n for (const controllerName of Object.keys(newControllers) as UID.Controller[]) {\n const controller = newControllers[controllerName];\n const uid = addNamespace(controllerName, namespace) as UID.Controller;\n\n if (has(uid, controllers)) {\n throw new Error(`Controller ${uid} has already been registered.`);\n }\n\n controllers[uid] = controller;\n }\n\n return this;\n },\n\n /**\n * Wraps a controller to extend it\n */\n extend(controllerUID: UID.Controller, extendFn: ControllerExtendFn) {\n const currentController = this.get(controllerUID);\n\n if (!currentController) {\n throw new Error(`Controller ${controllerUID} doesn't exist`);\n }\n\n const newController = extendFn(currentController);\n instances[controllerUID] = newController;\n\n return this;\n },\n };\n};\n\nexport default controllersRegistry;\n","import { yup } from '@strapi/utils';\n\nconst strapiServerSchema = yup\n .object()\n .shape({\n bootstrap: yup.mixed().isFunction(),\n destroy: yup.mixed().isFunction(),\n register: yup.mixed().isFunction(),\n config: yup.object(),\n routes: yup.lazy((value) => {\n if (Array.isArray(value)) {\n return yup.array();\n }\n return yup.object();\n }),\n controllers: yup.object(),\n services: yup.object(),\n policies: yup.object(),\n middlewares: yup.object(),\n contentTypes: yup.object(),\n })\n .noUnknown();\n\nconst validateModule = (data: unknown) => {\n return strapiServerSchema.validateSync(data, { strict: true, abortEarly: false });\n};\n\nexport { validateModule };\n","import _, { type PropertyPath, flatten } from 'lodash';\nimport { yup } from '@strapi/utils';\nimport type { Core, UID, Struct } from '@strapi/types';\n\nimport { removeNamespace } from '../../registries/namespace';\nimport { validateModule } from './validation';\n\ninterface LifecyclesState {\n bootstrap?: boolean;\n register?: boolean;\n destroy?: boolean;\n}\n\nexport interface RawModule {\n config?: Record<string, unknown>;\n routes?: Core.Module['routes'];\n controllers?: Core.Module['controllers'];\n services?: Core.Module['services'];\n contentTypes?: Core.Module['contentTypes'];\n policies?: Core.Module['policies'];\n middlewares?: Core.Module['middlewares'];\n bootstrap?: (params: { strapi: Core.Strapi }) => Promise<void>;\n register?: (params: { strapi: Core.Strapi }) => Promise<void>;\n destroy?: (params: { strapi: Core.Strapi }) => Promise<void>;\n}\n\nexport interface Module {\n bootstrap: () => Promise<void>;\n register: () => Promise<void>;\n destroy: () => Promise<void>;\n load: () => void;\n routes: Core.Module['routes'];\n config<T = unknown>(key: PropertyPath, defaultVal?: T): T; // TODO: this mirrors ConfigProvider.get, we should use it directly\n contentType: (ctName: UID.ContentType) => Struct.ContentTypeSchema;\n contentTypes: Record<string, Struct.ContentTypeSchema>;\n service: (serviceName: UID.Service) => Core.Service;\n services: Record<string, Core.Service>;\n policy: (policyName: UID.Policy) => Core.Policy;\n policies: Record<string, Core.Policy>;\n middleware: (middlewareName: UID.Middleware) => Core.Middleware;\n middlewares: Record<string, Core.Middleware>;\n controller: (controllerName: UID.Controller) => Core.Controller;\n controllers: Record<string, Core.Controller>;\n}\n\n// Removes the namespace from a map with keys prefixed with a namespace\nconst removeNamespacedKeys = <T extends Record<string, unknown>>(map: T, namespace: string) => {\n return _.mapKeys(map, (value, key) => removeNamespace(key, namespace));\n};\n\nconst defaultModule = {\n config: {},\n routes: [],\n controllers: {},\n services: {},\n contentTypes: {},\n policies: {},\n middlewares: {},\n};\n\nexport const createModule = (\n namespace: string,\n rawModule: RawModule,\n strapi: Core.Strapi\n): Module => {\n _.defaults(rawModule, defaultModule);\n\n try {\n validateModule(rawModule);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n throw new Error(`strapi-server.js is invalid for '${namespace}'.\\n${e.errors.join('\\n')}`);\n }\n }\n\n const called: LifecyclesState = {};\n return {\n async bootstrap() {\n if (called.bootstrap) {\n throw new Error(`Bootstrap for ${namespace} has already been called`);\n }\n called.bootstrap = true;\n await (rawModule.bootstrap && rawModule.bootstrap({ strapi }));\n },\n async register() {\n if (called.register) {\n throw new Error(`Register for ${namespace} has already been called`);\n }\n called.register = true;\n await (rawModule.register && rawModule.register({ strapi }));\n },\n async destroy() {\n if (called.destroy) {\n throw new Error(`Destroy for ${namespace} has already been called`);\n }\n called.destroy = true;\n await (rawModule.destroy && rawModule.destroy({ strapi }));\n },\n load() {\n strapi.get('content-types').add(namespace, rawModule.contentTypes);\n strapi.get('services').add(namespace, rawModule.services);\n strapi.get('policies').add(namespace, rawModule.policies);\n strapi.get('middlewares').add(namespace, rawModule.middlewares);\n strapi.get('controllers').add(namespace, rawModule.controllers);\n strapi.get('config').set(namespace, rawModule.config);\n },\n get routes() {\n return rawModule.routes ?? {};\n },\n config(path: PropertyPath, defaultValue: unknown) {\n const pathArray = flatten([namespace, path]);\n return strapi.get('config').get(pathArray, defaultValue);\n },\n contentType(ctName: UID.ContentType) {\n return strapi.get('content-types').get(`${namespace}.${ctName}`);\n },\n get contentTypes() {\n const contentTypes = strapi.get('content-types').getAll(namespace);\n return removeNamespacedKeys(contentTypes, namespace);\n },\n service(serviceName: UID.Service) {\n return strapi.get('services').get(`${namespace}.${serviceName}`);\n },\n get services() {\n const services = strapi.get('services').getAll(namespace);\n return removeNamespacedKeys(services, namespace);\n },\n policy(policyName: UID.Policy) {\n return strapi.get('policies').get(`${namespace}.${policyName}`);\n },\n get policies() {\n const policies = strapi.get('policies').getAll(namespace);\n return removeNamespacedKeys(policies, namespace);\n },\n middleware(middlewareName: UID.Middleware) {\n return strapi.get('middlewares').get(`${namespace}.${middlewareName}`);\n },\n get middlewares() {\n const middlewares = strapi.get('middlewares').getAll(namespace);\n return removeNamespacedKeys(middlewares, namespace);\n },\n controller(controllerName: UID.Controller) {\n return strapi.get('controllers').get(`${namespace}.${controllerName}`);\n },\n get controllers() {\n const controllers = strapi.get('controllers').getAll(namespace);\n return removeNamespacedKeys(controllers, namespace);\n },\n };\n};\n","import { pickBy, has } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { createModule, RawModule, Module } from '../domain/module';\n\ntype ModuleMap = { [namespace: string]: Module };\n\nconst modulesRegistry = (strapi: Core.Strapi) => {\n const modules: ModuleMap = {};\n\n return {\n get(namespace: string) {\n return modules[namespace];\n },\n getAll(prefix = '') {\n return pickBy<ModuleMap>((mod, namespace) => namespace.startsWith(prefix))(modules);\n },\n add(namespace: string, rawModule: RawModule) {\n if (has(namespace, modules)) {\n throw new Error(`Module ${namespace} has already been registered.`);\n }\n\n modules[namespace] = createModule(namespace, rawModule, strapi);\n modules[namespace].load();\n\n return modules[namespace];\n },\n async bootstrap() {\n for (const mod of Object.values(modules)) {\n await mod.bootstrap();\n }\n },\n async register() {\n for (const mod of Object.values(modules)) {\n await mod.register();\n }\n },\n async destroy() {\n for (const mod of Object.values(modules)) {\n await mod.destroy();\n }\n },\n };\n};\n\nexport default modulesRegistry;\n","import { has } from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\ntype PluginMap = Record<string, Core.Plugin>;\n\nconst pluginsRegistry = (strapi: Core.Strapi) => {\n const plugins: PluginMap = {};\n\n return {\n get(name: string) {\n return plugins[name];\n },\n getAll() {\n return plugins;\n },\n add(name: string, pluginConfig: Core.Plugin) {\n if (has(name, plugins)) {\n throw new Error(`Plugin ${name} has already been registered.`);\n }\n\n const pluginModule = strapi.get('modules').add(`plugin::${name}`, pluginConfig);\n plugins[name] = pluginModule;\n\n return plugins[name];\n },\n };\n};\n\nexport default pluginsRegistry;\n","import { has, isPlainObject } from 'lodash/fp';\n\nimport type { Core, Modules } from '@strapi/types';\n\nconst ALLOWED_TYPES = [\n 'biginteger',\n 'boolean',\n 'date',\n 'datetime',\n 'decimal',\n 'email',\n 'enumeration',\n 'float',\n 'integer',\n 'json',\n 'password',\n 'richtext',\n 'string',\n 'text',\n 'time',\n 'uid',\n] as const;\n\nconst customFieldsRegistry = (strapi: Core.Strapi) => {\n const customFields: Record<string, unknown> = {};\n\n return {\n getAll() {\n return customFields;\n },\n get(customField: string) {\n const registeredCustomField = customFields[customField];\n if (!registeredCustomField) {\n throw new Error(`Could not find Custom Field: ${customField}`);\n }\n\n return registeredCustomField;\n },\n add(\n customField:\n | Modules.CustomFields.CustomFieldServerOptions\n | Modules.CustomFields.CustomFieldServerOptions[]\n ) {\n const customFieldList = Array.isArray(customField) ? customField : [customField];\n\n for (const cf of customFieldList) {\n if (!has('name', cf) || !has('type', cf)) {\n throw new Error(`Custom fields require a 'name' and 'type' key`);\n }\n\n const { name, plugin, type, inputSize } = cf;\n if (!ALLOWED_TYPES.includes(type)) {\n throw new Error(\n `Custom field type: '${type}' is not a valid Strapi type or it can't be used with a Custom Field`\n );\n }\n\n const isValidObjectKey = /^(?![0-9])[a-zA-Z0-9$_-]+$/g;\n if (!isValidObjectKey.test(name)) {\n throw new Error(`Custom field name: '${name}' is not a valid object key`);\n }\n\n // Validate inputSize when provided\n if (inputSize) {\n if (\n !isPlainObject(inputSize) ||\n !has('default', inputSize) ||\n !has('isResizable', inputSize)\n ) {\n throw new Error(`inputSize should be an object with 'default' and 'isResizable' keys`);\n }\n if (![4, 6, 8, 12].includes(inputSize.default)) {\n throw new Error('Custom fields require a valid default input size');\n }\n if (typeof inputSize.isResizable !== 'boolean') {\n throw new Error('Custom fields should specify if their input is resizable');\n }\n }\n\n // When no plugin is specified, or it isn't found in Strapi, default to global\n const uid =\n plugin && strapi.plugin(plugin) ? `plugin::${plugin}.${name}` : `global::${name}`;\n\n if (has(uid, customFields)) {\n throw new Error(`Custom field: '${uid}' has already been registered`);\n }\n\n customFields[uid] = cf;\n }\n },\n };\n};\n\nexport default customFieldsRegistry;\n","import { has } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\nconst apisRegistry = (strapi: Core.Strapi) => {\n const apis: Record<string, unknown> = {};\n\n return {\n get(name: string) {\n return apis[name];\n },\n getAll() {\n return apis;\n },\n add(apiName: string, apiConfig: unknown) {\n if (has(apiName, apis)) {\n throw new Error(`API ${apiName} has already been registered.`);\n }\n\n const api = strapi.get('modules').add(`api::${apiName}`, apiConfig);\n\n apis[apiName] = api;\n\n return apis[apiName];\n },\n };\n};\n\nexport default apisRegistry;\n","import _, { PropertyName } from 'lodash';\n\ntype Sanitizer = (value: unknown) => unknown;\n\nconst sanitizersRegistry = () => {\n const sanitizers: Record<string, Sanitizer[]> = {};\n\n return {\n get(path: PropertyName): Sanitizer[] {\n return _.get(sanitizers, path, []);\n },\n\n add(path: PropertyName, sanitizer: Sanitizer) {\n this.get(path).push(sanitizer);\n return this;\n },\n\n set(path: PropertyName, value = []) {\n _.set(sanitizers, path, value);\n return this;\n },\n\n has(path: PropertyName) {\n return _.has(sanitizers, path);\n },\n };\n};\n\nexport default sanitizersRegistry;\n","import _, { PropertyName } from 'lodash';\n\ntype Validator = unknown;\n\nconst validatorsRegistry = () => {\n const validators: Record<string, Validator[]> = {};\n\n return {\n get(path: PropertyName): Validator[] {\n return _.get(validators, path, []);\n },\n\n add(path: PropertyName, validator: Validator) {\n this.get(path).push(validator);\n return this;\n },\n\n set(path: PropertyName, value = []) {\n _.set(validators, path, value);\n return this;\n },\n\n has(path: PropertyName) {\n return _.has(validators, path);\n },\n };\n};\n\nexport default validatorsRegistry;\n","import { Model } from '@strapi/database';\n\nexport const registry = () => {\n const models: Model[] = [];\n\n return {\n add(model: Model) {\n models.push(model);\n return this;\n },\n\n get() {\n return models;\n },\n };\n};\n","import { resolve } from 'path';\nimport { statSync, existsSync } from 'fs';\nimport { yup, importDefault } from '@strapi/utils';\n\nimport type { Core } from '@strapi/types';\n\nconst srcSchema = yup\n .object()\n .shape({\n bootstrap: yup.mixed().isFunction(),\n register: yup.mixed().isFunction(),\n destroy: yup.mixed().isFunction(),\n })\n .noUnknown();\n\nconst validateSrcIndex = (srcIndex: unknown) => {\n return srcSchema.validateSync(srcIndex, { strict: true, abortEarly: false });\n};\n\nexport default (strapi: Core.Strapi) => {\n if (!existsSync(strapi.dirs.dist.src)) {\n return;\n }\n\n const pathToSrcIndex = resolve(strapi.dirs.dist.src, 'index.js');\n if (!existsSync(pathToSrcIndex) || statSync(pathToSrcIndex).isDirectory()) {\n return {};\n }\n\n const srcIndex = importDefault(pathToSrcIndex);\n\n try {\n validateSrcIndex(srcIndex);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n strapi.stopWithError({ message: `Invalid file \\`./src/index.js\\`: ${e.message}` });\n }\n\n throw e;\n }\n\n strapi.app = srcIndex;\n};\n","import { join, extname, basename } from 'path';\nimport fse, { existsSync } from 'fs-extra';\nimport _ from 'lodash';\nimport { strings, importDefault } from '@strapi/utils';\nimport { isEmpty } from 'lodash/fp';\nimport type { Core, Struct } from '@strapi/types';\nimport { getGlobalId, type ContentTypeDefinition } from '../domain/content-type';\n\ninterface API {\n bootstrap: () => void | Promise<void>;\n destroy: () => void | Promise<void>;\n register: () => void | Promise<void>;\n config: Record<string, unknown>;\n routes: Record<string, Core.Router>;\n controllers: Record<string, Core.Controller>;\n services: Record<string, Core.Service>;\n policies: Record<string, Core.Policy>;\n middlewares: Record<string, Core.Middleware>;\n contentTypes: Record<string, { schema: Struct.ContentTypeSchema }>;\n}\n\ninterface APIs {\n [key: string]: API;\n}\n\nconst DEFAULT_CONTENT_TYPE = {\n schema: {},\n actions: {},\n lifecycles: {},\n};\n\n// to handle names with numbers in it we first check if it is already in kebabCase\nconst normalizeName = (name: string) => (strings.isKebabCase(name) ? name : _.kebabCase(name));\n\nconst isDirectory = (fd: fse.Dirent) => fd.isDirectory();\nconst isDotFile = (fd: fse.Dirent) => fd.name.startsWith('.');\n\nexport default async function loadAPIs(strapi: Core.Strapi) {\n if (!existsSync(strapi.dirs.dist.api)) {\n return;\n }\n\n const apisFDs = await (await fse.readdir(strapi.dirs.dist.api, { withFileTypes: true }))\n .filter(isDirectory)\n .filter(_.negate(isDotFile));\n\n const apis: APIs = {};\n\n // only load folders\n for (const apiFD of apisFDs) {\n const apiName = normalizeName(apiFD.name);\n const api = await loadAPI(apiName, join(strapi.dirs.dist.api, apiFD.name));\n\n // @ts-expect-error TODO verify that it's a valid api, not missing bootstrap, register, and destroy\n apis[apiName] = api;\n }\n\n validateContentTypesUnicity(apis);\n\n for (const apiName of Object.keys(apis)) {\n strapi.get('apis').add(apiName, apis[apiName]);\n }\n}\n\nconst validateContentTypesUnicity = (apis: APIs) => {\n const allApisSchemas = Object.values(apis).flatMap((api) => Object.values(api.contentTypes));\n\n const names: string[] = [];\n allApisSchemas.forEach(({ schema }) => {\n if (schema.info.singularName) {\n const singularName = _.kebabCase(schema.info.singularName);\n if (names.includes(singularName)) {\n throw new Error(`The singular name \"${schema.info.singularName}\" should be unique`);\n }\n names.push(singularName);\n }\n\n if (schema.info.pluralName) {\n const pluralName = _.kebabCase(schema.info.pluralName);\n if (names.includes(pluralName)) {\n throw new Error(`The plural name \"${schema.info.pluralName}\" should be unique`);\n }\n names.push(pluralName);\n }\n });\n};\n\nconst loadAPI = async (apiName: string, dir: string) => {\n const [index, config, routes, controllers, services, policies, middlewares, contentTypes] = (\n await Promise.all([\n loadIndex(dir),\n loadDir(join(dir, 'config')),\n loadDir(join(dir, 'routes')),\n loadDir(join(dir, 'controllers')),\n loadDir(join(dir, 'services')),\n loadDir(join(dir, 'policies')),\n loadDir(join(dir, 'middlewares')),\n loadContentTypes(apiName, join(dir, 'content-types')),\n ])\n ).map((result) => result?.result);\n\n return {\n ...(index || {}),\n config: config || {},\n routes: routes || [],\n controllers: controllers || {},\n services: services || {},\n policies: policies || {},\n middlewares: middlewares || {},\n contentTypes: contentTypes || {},\n };\n};\n\nconst loadIndex = async (dir: string) => {\n if (await fse.pathExists(join(dir, 'index.js'))) {\n return loadFile(join(dir, 'index.js'));\n }\n};\n\n// because this is async and its contents are dynamic, we must return it within an object to avoid a property called `then` being interpreted as a Promise\nconst loadContentTypes = async (apiName: string, dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n const contentTypes: API['contentTypes'] = {};\n\n // only load folders\n for (const fd of fds) {\n if (fd.isFile()) {\n continue;\n }\n\n const contentTypeName = normalizeName(fd.name);\n const loadedContentType = (await loadDir(join(dir, fd.name)))?.result;\n\n if (isEmpty(loadedContentType) || isEmpty(loadedContentType.schema)) {\n throw new Error(`Could not load content type found at ${dir}`);\n }\n\n const contentType = {\n ...DEFAULT_CONTENT_TYPE,\n ...loadedContentType,\n } as ContentTypeDefinition;\n\n Object.assign(contentType.schema, {\n apiName,\n collectionName: contentType.schema.collectionName || contentType.schema.info.singularName,\n globalId: getGlobalId(contentType.schema),\n });\n\n contentTypes[normalizeName(contentTypeName)] = contentType;\n }\n\n return { result: contentTypes };\n};\n\n// because this is async and its contents are dynamic, we must return it within an object to avoid a property called `then` being interpreted as a Promise\nconst loadDir = async (dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n\n const root: Record<string, unknown> = {};\n for (const fd of fds) {\n if (!fd.isFile() || extname(fd.name) === '.map') {\n continue;\n }\n\n const key = basename(fd.name, extname(fd.name));\n\n root[normalizeName(key)] = (await loadFile(join(dir, fd.name))).result;\n }\n\n return { result: root };\n};\n\n// because this is async and its contents are dynamic, we must return it as an array to avoid a property called `then` being interpreted as a Promise\nconst loadFile = async (file: string): Promise<{ result: unknown }> => {\n const ext = extname(file);\n\n switch (ext) {\n case '.js':\n return { result: importDefault(file) };\n case '.json':\n return { result: await fse.readJSON(file) };\n default:\n return { result: {} };\n }\n};\n","import compress from 'koa-compress';\nimport type { Core } from '@strapi/types';\n\nexport type Config = compress.CompressOptions;\n\nexport const compression: Core.MiddlewareFactory<Config> = (config) => compress(config);\n","import koaCors from '@koa/cors';\n\nimport type { Core } from '@strapi/types';\n\nexport type Config = {\n enabled?: boolean;\n origin: string | string[] | ((ctx: any) => string | string[]);\n expose?: string | string[];\n maxAge?: number;\n credentials?: boolean;\n methods?: string | string[];\n headers?: string | string[];\n keepHeadersOnError?: boolean;\n};\n\nconst defaults: Config = {\n origin: '*',\n maxAge: 31536000,\n credentials: true,\n methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n headers: ['Content-Type', 'Authorization', 'Origin', 'Accept'],\n keepHeadersOnError: false,\n};\n\nexport const cors: Core.MiddlewareFactory<Config> = (config) => {\n const { origin, expose, maxAge, credentials, methods, headers, keepHeadersOnError } = {\n ...defaults,\n ...config,\n };\n\n if (config.enabled !== undefined) {\n strapi.log.warn(\n 'The strapi::cors middleware no longer supports the `enabled` option. Using it' +\n ' to conditionally enable CORS might cause an insecure default. To disable strapi::cors, remove it from' +\n ' the exported array in config/middleware.js'\n );\n }\n\n return koaCors({\n async origin(ctx) {\n if (!ctx.get('Origin')) {\n return '*';\n }\n\n let originList: string | string[];\n\n if (typeof origin === 'function') {\n originList = await origin(ctx);\n } else {\n originList = origin;\n }\n\n if (Array.isArray(originList)) {\n return originList.includes(ctx.get('Origin')) ? ctx.get('Origin') : '';\n }\n\n const parsedOrigin = originList.split(',').map((origin) => origin.trim());\n if (parsedOrigin.length > 1) {\n return parsedOrigin.includes(ctx.get('Origin')) ? ctx.get('Origin') : '';\n }\n\n return originList;\n },\n exposeHeaders: expose,\n maxAge,\n credentials,\n allowMethods: methods,\n allowHeaders: headers,\n keepHeadersOnError,\n });\n};\n","import { errors } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport { formatApplicationError, formatHttpError, formatInternalError } from '../services/errors';\n\nconst errorMiddleware: Core.MiddlewareFactory = (/* _, { strapi } */) => {\n return async (ctx, next) => {\n try {\n await next();\n\n if (!ctx.response._explicitStatus) {\n return ctx.notFound();\n }\n } catch (error) {\n if (error instanceof errors.ApplicationError) {\n const { status, body } = formatApplicationError(error);\n ctx.status = status;\n ctx.body = body;\n return;\n }\n\n if (error instanceof errors.HttpError) {\n const { status, body } = formatHttpError(error);\n ctx.status = status;\n ctx.body = body;\n return;\n }\n\n strapi.log.error(error);\n\n const { status, body } = formatInternalError(error);\n ctx.status = status;\n ctx.body = body;\n }\n };\n};\n\nexport { errorMiddleware as errors };\n","import { existsSync } from 'fs';\nimport { resolve } from 'path';\nimport koaFavicon from 'koa-favicon';\nimport type { Core } from '@strapi/types';\n\nexport type Config = NonNullable<Parameters<typeof koaFavicon>[1]>;\n\nconst defaults = {\n path: 'favicon.png',\n maxAge: 86400000,\n};\n\nexport const favicon: Core.MiddlewareFactory<Config> = (config, { strapi }) => {\n const { maxAge, path: faviconDefaultPath } = { ...defaults, ...config };\n const { root: appRoot } = strapi.dirs.app;\n let faviconPath = faviconDefaultPath;\n\n /** TODO (v5): Updating the favicon to use a png caused\n * https://github.com/strapi/strapi/issues/14693\n *\n * This check ensures backwards compatibility until\n * the next major version\n */\n if (!existsSync(resolve(appRoot, faviconPath))) {\n faviconPath = 'favicon.ico';\n }\n\n return koaFavicon(resolve(appRoot, faviconPath), { maxAge });\n};\n","import koaIp from 'koa-ip';\nimport type { Core } from '@strapi/types';\n\nexport type Config = koaIp.KoaIPOptions;\n\nexport const ip: Core.MiddlewareFactory<Config> = (config) => koaIp(config);\n","import type { Core } from '@strapi/types';\n\nexport const logger: Core.MiddlewareFactory = (_, { strapi }) => {\n return async (ctx, next) => {\n const start = Date.now();\n await next();\n const delta = Math.ceil(Date.now() - start);\n\n strapi.log.http(`${ctx.method} ${ctx.url} (${delta} ms) ${ctx.status}`);\n };\n};\n","import type { Core } from '@strapi/types';\n\nexport interface Config {\n poweredBy: string;\n}\n\nconst defaults: Config = {\n poweredBy: 'Strapi <strapi.io>',\n};\n\nexport const poweredBy: Core.MiddlewareFactory<Partial<Config>> = (config) => {\n const { poweredBy } = { ...defaults, ...config };\n\n return async (ctx, next) => {\n await next();\n\n ctx.set('X-Powered-By', poweredBy);\n };\n};\n","import fse from 'fs-extra';\nimport { defaultsDeep } from 'lodash/fp';\nimport { koaBody, KoaBodyMiddlewareOptions } from 'koa-body';\nimport mime from 'mime-types';\nimport type Koa from 'koa';\nimport type { Core } from '@strapi/types';\n\nexport type Config = KoaBodyMiddlewareOptions;\n\nconst defaults = {\n multipart: true,\n patchKoa: true,\n};\n\nfunction ensureFileMimeType(file: any): void {\n if (!file.type) {\n file.type = mime.lookup(file.name) || 'application/octet-stream';\n }\n}\n\nfunction getFiles(ctx: Koa.Context) {\n return ctx?.request?.files?.files;\n}\n\nconst bodyMiddleware: Core.MiddlewareFactory<Config> = (config, { strapi }) => {\n const bodyConfig: Config = defaultsDeep(defaults, config);\n\n let gqlEndpoint: string | undefined;\n if (strapi.plugin('graphql')) {\n const { config: gqlConfig } = strapi.plugin('graphql');\n gqlEndpoint = gqlConfig('endpoint');\n }\n\n return async (ctx, next) => {\n // TODO: find a better way later\n if (gqlEndpoint && ctx.url === gqlEndpoint) {\n await next();\n } else {\n try {\n await koaBody(bodyConfig)(ctx, async () => {});\n\n const files = getFiles(ctx);\n\n /**\n * in case the mime-type wasn't sent, Strapi tries to guess it\n * from the file extension, to avoid a corrupt database state\n */\n if (files) {\n if (Array.isArray(files)) {\n files.forEach(ensureFileMimeType);\n } else {\n ensureFileMimeType(files);\n }\n }\n\n await next();\n } catch (error) {\n if (\n error instanceof Error &&\n error.message &&\n error.message.includes('maxFileSize exceeded')\n ) {\n return ctx.payloadTooLarge('FileTooBig');\n }\n\n throw error;\n }\n }\n\n const files = getFiles(ctx);\n\n // clean any file that was uploaded\n if (files) {\n if (Array.isArray(files)) {\n // not awaiting to not slow the request\n Promise.all(files.map((file) => fse.remove(file.filepath)));\n } else if (files && files.filepath) {\n // not awaiting to not slow the request\n fse.remove(files.filepath);\n }\n delete ctx.request.files;\n }\n };\n};\n\nexport { bodyMiddleware as body };\n","import qs from 'qs';\nimport type Koa from 'koa';\nimport type { Core } from '@strapi/types';\n\ntype Config = Parameters<typeof qs.parse>[1];\n\nconst defaults: Config = {\n strictNullHandling: true,\n arrayLimit: 100,\n depth: 20,\n};\n\n/**\n * Body parser hook\n */\nconst addQsParser = (app: Koa, settings: Config) => {\n Object.defineProperty(app.request, 'query', {\n configurable: false,\n enumerable: true,\n /*\n * Get parsed query-string.\n */\n get() {\n const qstr = this.querystring;\n\n this._querycache = this._querycache || {};\n const cache = this._querycache;\n\n if (!cache[qstr]) {\n cache[qstr] = qs.parse(qstr, settings);\n }\n\n return cache[qstr];\n },\n\n /*\n * Set query-string as an object.\n */\n set(obj) {\n this.querystring = qs.stringify(obj);\n },\n } satisfies PropertyDescriptor & ThisType<Koa.BaseRequest>);\n\n return app;\n};\n\nexport const query: Core.MiddlewareFactory = (\n config: Partial<Config>,\n { strapi }: { strapi: Core.Strapi }\n) => {\n addQsParser(strapi.server.app, { ...defaults, ...config } as Config);\n};\n","import type { Core } from '@strapi/types';\n\nexport const responseTime: Core.MiddlewareFactory = () => {\n return async (ctx, next) => {\n const start = Date.now();\n\n await next();\n\n const delta = Math.ceil(Date.now() - start);\n ctx.set('X-Response-Time', `${delta}ms`);\n };\n};\n","import { isFunction } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\nexport interface Config {\n handlers?: Record<number, Core.MiddlewareHandler>;\n}\n\nexport const responses: Core.MiddlewareFactory<Config> = (config = {}) => {\n return async (ctx, next) => {\n await next();\n\n const { status } = ctx;\n const handler = config?.handlers?.[status];\n\n if (isFunction(handler)) {\n await handler(ctx, next);\n }\n };\n};\n","import { defaultsDeep, mergeWith } from 'lodash/fp';\nimport helmet, { KoaHelmet } from 'koa-helmet';\n\nimport type { Core } from '@strapi/types';\n\nexport type Config = NonNullable<Parameters<KoaHelmet>[0]>;\n\nconst defaults: Config = {\n crossOriginEmbedderPolicy: false,\n crossOriginOpenerPolicy: false,\n crossOriginResourcePolicy: false,\n originAgentCluster: false,\n contentSecurityPolicy: {\n useDefaults: true,\n directives: {\n 'connect-src': [\"'self'\", 'https:'],\n 'img-src': [\"'self'\", 'data:', 'blob:', 'https://market-assets.strapi.io'],\n 'media-src': [\"'self'\", 'data:', 'blob:'],\n upgradeInsecureRequests: null,\n },\n },\n xssFilter: false,\n hsts: {\n maxAge: 31536000,\n includeSubDomains: true,\n },\n frameguard: {\n action: 'sameorigin',\n },\n};\n\nconst mergeConfig = (existingConfig: Config, newConfig: Config) => {\n return mergeWith(\n (obj, src) => (Array.isArray(obj) && Array.isArray(src) ? obj.concat(src) : undefined),\n existingConfig,\n newConfig\n );\n};\n\nexport const security: Core.MiddlewareFactory<Config> =\n (config, { strapi }) =>\n (ctx, next) => {\n let helmetConfig: Config = defaultsDeep(defaults, config);\n\n const specialPaths = ['/documentation'];\n\n const directives: {\n 'script-src': string[];\n 'img-src': string[];\n 'manifest-src': string[];\n 'frame-src': string[];\n } = {\n 'script-src': [\"'self'\", \"'unsafe-inline'\", 'cdn.jsdelivr.net'],\n 'img-src': [\"'self'\", 'data:', 'cdn.jsdelivr.net', 'strapi.io'],\n 'manifest-src': [],\n 'frame-src': [],\n };\n\n // if apollo graphql playground is enabled, add exceptions for it\n if (strapi.plugin('graphql')?.service('utils').playground.isEnabled()) {\n const { config: gqlConfig } = strapi.plugin('graphql');\n specialPaths.push(gqlConfig('endpoint'));\n\n directives['script-src'].push(`https: 'unsafe-inline'`);\n directives['img-src'].push(`'apollo-server-landing-page.cdn.apollographql.com'`);\n directives['manifest-src'].push(`'self'`);\n directives['manifest-src'].push('apollo-server-landing-page.cdn.apollographql.com');\n directives['frame-src'].push(`'self'`);\n directives['frame-src'].push('sandbox.embed.apollographql.com');\n }\n\n // TODO: we shouldn't combine playground exceptions with documentation for all routes, we should first check the path and then return exceptions specific to that\n if (ctx.method === 'GET' && specialPaths.some((str) => ctx.path.startsWith(str))) {\n helmetConfig = mergeConfig(helmetConfig, {\n crossOriginEmbedderPolicy: false, // TODO: only use this for graphql playground\n contentSecurityPolicy: {\n directives,\n },\n });\n }\n\n /**\n * These are for vite's watch mode so it can accurately\n * connect to the HMR websocket & reconnect on failure\n * or when the server restarts.\n *\n * It only applies in development, and only on GET requests\n * that are part of the admin route.\n */\n\n if (\n ['development', 'test'].includes(process.env.NODE_ENV ?? '') &&\n ctx.method === 'GET' &&\n ctx.path.startsWith(strapi.config.get('admin.path'))\n ) {\n helmetConfig = mergeConfig(helmetConfig, {\n contentSecurityPolicy: {\n directives: {\n 'script-src': [\"'self'\", \"'unsafe-inline'\"],\n 'connect-src': [\"'self'\", 'http:', 'https:', 'ws:'],\n },\n },\n });\n }\n\n return helmet(helmetConfig)(ctx, next);\n };\n","import { isEmpty, isArray } from 'lodash/fp';\nimport koaSession from 'koa-session';\nimport type { Core } from '@strapi/types';\n\nconst defaultConfig = {\n key: 'koa.sess',\n maxAge: 86400000,\n autoCommit: true,\n overwrite: true,\n httpOnly: true,\n signed: true,\n rolling: false,\n renew: false,\n secure: process.env.NODE_ENV === 'production',\n sameSite: undefined,\n};\n\nexport const session: Core.MiddlewareFactory<Partial<koaSession.opts>> = (\n userConfig,\n { strapi }\n) => {\n const { keys } = strapi.server.app;\n if (!isArray(keys) || isEmpty(keys) || keys.some(isEmpty)) {\n throw new Error(\n `App keys are required. Please set app.keys in config/server.js (ex: keys: ['myKeyA', 'myKeyB'])`\n );\n }\n\n const config: Partial<koaSession.opts> = { ...defaultConfig, ...userConfig };\n\n strapi.server.use(koaSession(config, strapi.server.app));\n};\n","import { defaultsDeep } from 'lodash/fp';\nimport koaStatic from 'koa-static';\nimport type { Core } from '@strapi/types';\n\ntype Config = koaStatic.Options;\n\nconst defaults = {\n maxAge: 60000,\n};\n\nexport const publicStatic: Core.MiddlewareFactory = (\n config: Config,\n { strapi }: { strapi: Core.Strapi }\n) => {\n const { maxAge } = defaultsDeep(defaults, config);\n\n strapi.server.routes([\n {\n method: 'GET',\n path: '/',\n handler(ctx) {\n ctx.redirect(strapi.config.get('admin.url', '/admin'));\n },\n config: { auth: false },\n },\n // All other public GET-routes except /uploads/(.*) which is handled in upload middleware\n {\n method: 'GET',\n path: '/((?!uploads/).+)',\n handler: koaStatic(strapi.dirs.static.public, {\n maxage: maxAge,\n defer: true,\n }),\n config: { auth: false },\n },\n ]);\n};\n","import type { Core } from '@strapi/types';\nimport { compression } from './compression';\nimport { cors } from './cors';\nimport { errors } from './errors';\nimport { favicon } from './favicon';\nimport { ip } from './ip';\nimport { logger } from './logger';\nimport { poweredBy } from './powered-by';\nimport { body } from './body';\nimport { query } from './query';\nimport { responseTime } from './response-time';\nimport { responses } from './responses';\nimport { security } from './security';\nimport { session } from './session';\nimport { publicStatic } from './public';\n\nexport const middlewares: Record<string, Core.MiddlewareFactory> = {\n compression,\n cors,\n errors,\n favicon,\n ip,\n logger,\n poweredBy,\n body,\n query,\n responseTime,\n responses,\n security,\n session,\n public: publicStatic,\n};\n","import { join, extname, basename } from 'path';\nimport fse from 'fs-extra';\nimport { importDefault } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\nimport { middlewares as internalMiddlewares } from '../middlewares';\n\n// TODO:: allow folders with index.js inside for bigger policies\nexport default async function loadMiddlewares(strapi: Core.Strapi) {\n const localMiddlewares = await loadLocalMiddlewares(strapi);\n\n strapi.get('middlewares').add(`global::`, localMiddlewares);\n strapi.get('middlewares').add(`strapi::`, internalMiddlewares);\n}\n\nconst loadLocalMiddlewares = async (strapi: Core.Strapi) => {\n const dir = strapi.dirs.dist.middlewares;\n\n if (!(await fse.pathExists(dir))) {\n return {};\n }\n\n const middlewares: Record<string, Core.MiddlewareFactory> = {};\n const paths = await fse.readdir(dir, { withFileTypes: true });\n\n for (const fd of paths) {\n const { name } = fd;\n const fullPath = join(dir, name);\n\n if (fd.isFile() && extname(name) === '.js') {\n const key = basename(name, '.js');\n middlewares[key] = importDefault(fullPath);\n }\n }\n\n return middlewares;\n};\n","import path from 'node:path';\nimport fp from 'lodash/fp';\n\n/**\n * Returns a path (as an array) from a file path\n */\nexport const filePathToPropPath = (\n entryPath: string,\n useFileNameAsKey: boolean = true\n): string[] => {\n const transform = fp.pipe(\n // Remove the relative path prefixes: './' for posix (and some win32) and \".\\\" for win32\n removeRelativePrefix,\n // Remove the path metadata and extensions\n fp.replace(/(\\.settings|\\.json|\\.js)/g, ''),\n // Transform to lowercase\n // Note: We're using fp.toLower instead of fp.lowercase as the latest removes special characters such as \"/\"\n fp.toLower,\n // Split the cleaned path by matching every possible separator (either \"/\" or \"\\\" depending on the OS)\n fp.split(new RegExp(`[\\\\${path.win32.sep}|${path.posix.sep}]`, 'g')),\n // Make sure to remove leading '.' from the different path parts\n fp.map(fp.trimCharsStart('.')),\n // join + split in case some '.' characters are still present in different parts of the path\n fp.join('.'),\n fp.split('.'),\n // Remove the last portion of the path array if the file name shouldn't be used as a key\n useFileNameAsKey ? fp.identity : fp.slice(0, -1)\n );\n\n return transform(entryPath) as string[];\n};\n\nconst removeRelativePrefix = (filePath: string) => {\n return filePath.startsWith(`.${path.win32.sep}`) || filePath.startsWith(`.${path.posix.sep}`)\n ? filePath.slice(2)\n : filePath;\n};\n","import path from 'path';\nimport _ from 'lodash';\nimport fse from 'fs-extra';\n\nimport { importDefault } from '@strapi/utils';\nimport { glob } from 'glob';\nimport { filePathToPropPath } from './filepath-to-prop-path';\n\n/**\n * Returns an Object build from a list of files matching a glob pattern in a directory\n * It builds a tree structure resembling the folder structure in dir\n */\nexport const loadFiles = async <T extends object>(\n dir: string,\n pattern: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n { requireFn = importDefault, shouldUseFileNameAsKey = (_: any) => true, globArgs = {} } = {}\n): Promise<T> => {\n const root = {};\n const files = await glob(pattern, { cwd: dir, ...globArgs });\n\n for (const file of files) {\n const absolutePath = path.resolve(dir, file);\n\n // load module\n delete require.cache[absolutePath];\n let mod;\n\n if (path.extname(absolutePath) === '.json') {\n mod = await fse.readJson(absolutePath);\n } else {\n mod = requireFn(absolutePath);\n }\n\n Object.defineProperty(mod, '__filename__', {\n enumerable: true,\n configurable: false,\n writable: false,\n value: path.basename(file),\n });\n\n const propPath = filePathToPropPath(file, shouldUseFileNameAsKey(file));\n\n if (propPath.length === 0) _.merge(root, mod);\n _.merge(root, _.setWith({}, propPath, mod, Object));\n }\n\n return root as T;\n};\n","import { join } from 'path';\nimport _ from 'lodash';\nimport { pathExists } from 'fs-extra';\nimport type { Core, Struct, UID } from '@strapi/types';\nimport { loadFiles } from '../utils/load-files';\n\ntype LoadedComponent = {\n collectionName: string;\n __filename__: string;\n __schema__: LoadedComponent;\n uid: string;\n category: string;\n modelName: string;\n globalId: string;\n info: any;\n attributes: any;\n};\n\ntype LoadedComponents = {\n [category: string]: {\n [key: string]: LoadedComponent;\n };\n};\n\ntype ComponentMap = {\n [uid in UID.Component]: Struct.ComponentSchema;\n};\n\nexport default async function loadComponents(strapi: Core.Strapi) {\n if (!(await pathExists(strapi.dirs.dist.components))) {\n return {};\n }\n\n const map = await loadFiles<LoadedComponents>(strapi.dirs.dist.components, '*/*.*(js|json)');\n\n const components = Object.keys(map).reduce((acc, category) => {\n Object.keys(map[category]).forEach((key) => {\n const schema = map[category][key];\n\n if (!schema.collectionName) {\n // NOTE: We're using the filepath from the app directory instead of the dist for information purpose\n const filePath = join(strapi.dirs.app.components, category, schema.__filename__);\n\n return strapi.stopWithError(\n `Component ${key} is missing a \"collectionName\" property.\\nVerify file ${filePath}.`\n );\n }\n\n const uid: UID.Component = `${category}.${key}`;\n\n acc[uid] = Object.assign(schema, {\n __schema__: _.cloneDeep(schema),\n uid,\n category,\n modelType: 'component' as const,\n modelName: key,\n globalId: schema.globalId || _.upperFirst(_.camelCase(`component_${uid}`)),\n });\n });\n\n return acc;\n }, {} as ComponentMap);\n\n strapi.get('components').add(components);\n}\n","import { join, extname, basename } from 'path';\nimport fse from 'fs-extra';\nimport { importDefault } from '@strapi/utils';\n\nimport type { Core } from '@strapi/types';\n\n// TODO:: allow folders with index.js inside for bigger policies\nexport default async function loadPolicies(strapi: Core.Strapi) {\n const dir = strapi.dirs.dist.policies;\n\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const policies: Record<string, Core.Policy> = {};\n const paths = await fse.readdir(dir, { withFileTypes: true });\n\n for (const fd of paths) {\n const { name } = fd;\n const fullPath = join(dir, name);\n\n if (fd.isFile() && extname(name) === '.js') {\n const key = basename(name, '.js');\n policies[key] = importDefault(fullPath);\n }\n }\n\n strapi.get('policies').add(`global::`, policies);\n}\n","import { join } from 'path';\nimport fse from 'fs-extra';\nimport { merge } from 'lodash/fp';\nimport { loadConfigFile } from '../../utils/load-config-file';\n\n/**\n * Return user defined plugins' config\n * first load config from `config/plugins.js`\n * and then merge config from `config/env/{env}/plugins.js`\n */\nexport const getUserPluginsConfig = async () => {\n const globalUserConfigPath = join(strapi.dirs.dist.config, 'plugins.js');\n const currentEnvUserConfigPath = join(\n strapi.dirs.dist.config,\n 'env',\n process.env.NODE_ENV as string,\n 'plugins.js'\n );\n let config = {};\n\n // assign global user config if exists\n if (await fse.pathExists(globalUserConfigPath)) {\n config = loadConfigFile(globalUserConfigPath);\n }\n\n // and merge user config by environment if exists\n if (await fse.pathExists(currentEnvUserConfigPath)) {\n config = merge(config, loadConfigFile(currentEnvUserConfigPath));\n }\n\n return config;\n};\n","/* eslint-disable @typescript-eslint/no-var-requires */\nimport { dirname, join, resolve } from 'path';\nimport { statSync, existsSync } from 'fs';\nimport _ from 'lodash';\nimport { get, pickBy, defaultsDeep, map, prop, pipe } from 'lodash/fp';\nimport { strings } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\nimport { getUserPluginsConfig } from './get-user-plugins-config';\n\ninterface PluginMeta {\n enabled: boolean;\n pathToPlugin?: string;\n info: Record<string, unknown>;\n packageInfo?: Record<string, unknown>;\n}\n\ntype PluginMetas = Record<string, PluginMeta>;\n\ninterface PluginInfo {\n name: string;\n kind: string;\n}\n\ninterface PluginDeclaration {\n enabled: boolean;\n resolve: string;\n isModule: boolean;\n}\n\n/**\n * otherwise known as \"core features\"\n *\n * NOTE: These are excluded from the content manager plugin list, as they are always enabled.\n * See admin.ts server controller on the content-manager plugin for more details.\n */\nconst INTERNAL_PLUGINS = [\n '@strapi/content-manager',\n '@strapi/content-type-builder',\n '@strapi/email',\n '@strapi/upload',\n '@strapi/i18n',\n '@strapi/content-releases',\n '@strapi/review-workflows',\n];\n\nconst isStrapiPlugin = (info: PluginInfo) => get('strapi.kind', info) === 'plugin';\n\nconst validatePluginName = (pluginName: string) => {\n if (!strings.isKebabCase(pluginName)) {\n throw new Error(`Plugin name \"${pluginName}\" is not in kebab (an-example-of-kebab-case)`);\n }\n};\n\nconst toDetailedDeclaration = (declaration: boolean | PluginDeclaration) => {\n if (typeof declaration === 'boolean') {\n return { enabled: declaration };\n }\n\n const detailedDeclaration: { enabled: boolean; pathToPlugin?: string } = {\n enabled: declaration.enabled,\n };\n\n if (declaration?.resolve) {\n let pathToPlugin = '';\n\n if (declaration.isModule) {\n /**\n * we only want the node_module here, not the package.json\n */\n pathToPlugin = join(declaration.resolve, '..');\n } else {\n try {\n pathToPlugin = dirname(require.resolve(declaration.resolve));\n } catch (e) {\n pathToPlugin = resolve(strapi.dirs.app.root, declaration.resolve);\n\n if (!existsSync(pathToPlugin) || !statSync(pathToPlugin).isDirectory()) {\n throw new Error(`${declaration.resolve} couldn't be resolved`);\n }\n }\n }\n\n detailedDeclaration.pathToPlugin = pathToPlugin;\n }\n\n return detailedDeclaration;\n};\n\nexport const getEnabledPlugins = async (strapi: Core.Strapi, { client } = { client: false }) => {\n const internalPlugins: PluginMetas = {};\n\n for (const dep of INTERNAL_PLUGINS) {\n const packagePath = join(dep, 'package.json');\n\n // NOTE: internal plugins should be resolved from the strapi package\n const packageModulePath = require.resolve(packagePath, {\n paths: [require.resolve('@strapi/strapi/package.json'), process.cwd()],\n });\n\n const packageInfo = require(packageModulePath);\n\n validatePluginName(packageInfo.strapi.name);\n internalPlugins[packageInfo.strapi.name] = {\n ...toDetailedDeclaration({ enabled: true, resolve: packageModulePath, isModule: client }),\n info: packageInfo.strapi,\n packageInfo,\n };\n }\n\n const installedPlugins: PluginMetas = {};\n const dependencies = strapi.config.get('info.dependencies', {});\n\n for (const dep of Object.keys(dependencies)) {\n const packagePath = join(dep, 'package.json');\n let packageInfo;\n try {\n packageInfo = require(packagePath);\n } catch {\n continue;\n }\n\n if (isStrapiPlugin(packageInfo)) {\n validatePluginName(packageInfo.strapi.name);\n installedPlugins[packageInfo.strapi.name] = {\n ...toDetailedDeclaration({ enabled: true, resolve: packagePath, isModule: client }),\n info: {\n ...packageInfo.strapi,\n packageName: packageInfo.name,\n },\n packageInfo,\n };\n }\n }\n\n const declaredPlugins: PluginMetas = {};\n const userPluginsConfig = await getUserPluginsConfig();\n\n _.forEach(userPluginsConfig, (declaration, pluginName) => {\n validatePluginName(pluginName);\n\n declaredPlugins[pluginName] = {\n ...toDetailedDeclaration(declaration),\n info: {},\n };\n\n const { pathToPlugin } = declaredPlugins[pluginName];\n\n // for manually resolved plugins\n if (pathToPlugin) {\n const packagePath = join(pathToPlugin, 'package.json');\n const packageInfo = require(packagePath);\n\n if (isStrapiPlugin(packageInfo)) {\n declaredPlugins[pluginName].info = packageInfo.strapi || {};\n declaredPlugins[pluginName].packageInfo = packageInfo;\n }\n }\n });\n\n const declaredPluginsResolves = map(prop('pathToPlugin'), declaredPlugins);\n const installedPluginsNotAlreadyUsed = pickBy(\n (p) => !declaredPluginsResolves.includes(p.pathToPlugin),\n installedPlugins\n );\n\n const enabledPlugins = pipe(\n defaultsDeep(declaredPlugins),\n defaultsDeep(installedPluginsNotAlreadyUsed),\n pickBy((p: PluginMeta) => p.enabled)\n )(internalPlugins);\n\n return enabledPlugins;\n};\n","import { join } from 'path';\nimport fse from 'fs-extra';\nimport { defaultsDeep, defaults, getOr, get } from 'lodash/fp';\nimport * as resolve from 'resolve.exports';\n\nimport { env } from '@strapi/utils';\nimport type { Core, Plugin, Struct } from '@strapi/types';\nimport { loadConfigFile } from '../../utils/load-config-file';\nimport { loadFiles } from '../../utils/load-files';\nimport { getEnabledPlugins } from './get-enabled-plugins';\nimport { getUserPluginsConfig } from './get-user-plugins-config';\nimport { getGlobalId } from '../../domain/content-type';\n\ninterface Plugins {\n [key: string]: Plugin.LoadedPlugin;\n}\n\nconst defaultPlugin = {\n bootstrap() {},\n destroy() {},\n register() {},\n config: {\n default: {},\n validator() {},\n },\n routes: [],\n controllers: {},\n services: {},\n policies: {},\n middlewares: {},\n contentTypes: {},\n};\n\nconst applyUserExtension = async (plugins: Plugins) => {\n const extensionsDir = strapi.dirs.dist.extensions;\n if (!(await fse.pathExists(extensionsDir))) {\n return;\n }\n\n const extendedSchemas = await loadFiles(extensionsDir, '**/content-types/**/schema.json');\n const strapiServers = await loadFiles(extensionsDir, '**/strapi-server.js');\n\n for (const pluginName of Object.keys(plugins)) {\n const plugin = plugins[pluginName];\n // first: load json schema\n for (const ctName of Object.keys(plugin.contentTypes)) {\n const extendedSchema = get([pluginName, 'content-types', ctName, 'schema'], extendedSchemas);\n if (extendedSchema) {\n plugin.contentTypes[ctName].schema = {\n ...plugin.contentTypes[ctName].schema,\n ...extendedSchema,\n };\n }\n }\n // second: execute strapi-server extension\n const strapiServer = get([pluginName, 'strapi-server'], strapiServers);\n if (strapiServer) {\n plugins[pluginName] = await strapiServer(plugin);\n }\n }\n};\n\nconst applyUserConfig = async (plugins: Plugins) => {\n const userPluginsConfig = await getUserPluginsConfig();\n\n for (const pluginName of Object.keys(plugins)) {\n const plugin = plugins[pluginName];\n const userPluginConfig = getOr({}, `${pluginName}.config`, userPluginsConfig);\n const defaultConfig =\n typeof plugin.config.default === 'function'\n ? plugin.config.default({ env })\n : plugin.config.default;\n\n const config = defaultsDeep(defaultConfig, userPluginConfig);\n try {\n plugin.config.validator(config);\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`Error regarding ${pluginName} config: ${e.message}`);\n }\n\n throw e;\n }\n plugin.config = config;\n }\n};\n\nexport default async function loadPlugins(strapi: Core.Strapi) {\n const plugins: Plugins = {};\n\n const enabledPlugins = await getEnabledPlugins(strapi);\n\n strapi.config.set('enabledPlugins', enabledPlugins);\n\n for (const pluginName of Object.keys(enabledPlugins)) {\n const enabledPlugin = enabledPlugins[pluginName];\n\n let serverEntrypointPath;\n let resolvedExport = './strapi-server.js';\n\n try {\n resolvedExport = (\n resolve.exports(enabledPlugin.packageInfo, 'strapi-server', {\n require: true,\n }) ?? './strapi-server.js'\n ).toString();\n } catch (e) {\n // no export map or missing strapi-server export => fallback to default\n }\n\n try {\n serverEntrypointPath = join(enabledPlugin.pathToPlugin, resolvedExport);\n } catch (e) {\n throw new Error(\n `Error loading the plugin ${pluginName} because ${pluginName} is not installed. Please either install the plugin or remove it's configuration.`\n );\n }\n\n // only load plugins with a server entrypoint\n if (!(await fse.pathExists(serverEntrypointPath))) {\n continue;\n }\n\n const pluginServer = loadConfigFile(serverEntrypointPath);\n plugins[pluginName] = {\n ...defaultPlugin,\n ...pluginServer,\n contentTypes: formatContentTypes(pluginName, pluginServer.contentTypes ?? {}),\n config: defaults(defaultPlugin.config, pluginServer.config),\n routes: pluginServer.routes ?? defaultPlugin.routes,\n };\n }\n\n // TODO: validate plugin format\n await applyUserConfig(plugins);\n await applyUserExtension(plugins);\n\n for (const pluginName of Object.keys(plugins)) {\n strapi.get('plugins').add(pluginName, plugins[pluginName]);\n }\n}\n\nconst formatContentTypes = (\n pluginName: string,\n contentTypes: Record<string, { schema: Struct.ContentTypeSchema }>\n) => {\n Object.values(contentTypes).forEach((definition) => {\n const { schema } = definition;\n\n Object.assign(schema, {\n plugin: pluginName,\n collectionName:\n schema.collectionName || `${pluginName}_${schema.info.singularName}`.toLowerCase(),\n globalId: getGlobalId(schema, pluginName),\n });\n });\n\n return contentTypes;\n};\n","import type { Core } from '@strapi/types';\n\nexport default (strapi: Core.Strapi) => {\n strapi.get('sanitizers').set('content-api', { input: [], output: [], query: [] });\n};\n","import type { Core } from '@strapi/types';\n\nexport default (strapi: Core.Strapi) => {\n strapi.get('validators').set('content-api', { input: [], query: [] });\n};\n","import type { Core } from '@strapi/types';\n\nimport loadSrcIndex from './src-index';\nimport loadAPIs from './apis';\nimport loadMiddlewares from './middlewares';\nimport loadComponents from './components';\nimport loadPolicies from './policies';\nimport loadPlugins from './plugins';\nimport loadSanitizers from './sanitizers';\nimport loadValidators from './validators';\n\nexport async function loadApplicationContext(strapi: Core.Strapi) {\n await Promise.all([\n loadSrcIndex(strapi),\n loadSanitizers(strapi),\n loadValidators(strapi),\n loadPlugins(strapi),\n loadAPIs(strapi),\n loadComponents(strapi),\n loadMiddlewares(strapi),\n loadPolicies(strapi),\n ]);\n}\n","import { errors as databaseErrors } from '@strapi/database';\nimport { errors } from '@strapi/utils';\n\nimport type { Middleware } from './middleware-manager';\n\nconst databaseErrorsToTransform = [\n databaseErrors.InvalidTimeError,\n databaseErrors.InvalidDateTimeError,\n databaseErrors.InvalidDateError,\n databaseErrors.InvalidRelationError,\n];\n\n/**\n * Handle database errors\n */\nexport const databaseErrorsMiddleware: Middleware = async (ctx, next) => {\n try {\n return await next();\n } catch (error) {\n if (databaseErrorsToTransform.some((errorToTransform) => error instanceof errorToTransform)) {\n if (error instanceof Error) {\n throw new errors.ValidationError(error.message);\n }\n\n throw error;\n }\n throw error;\n }\n};\n","export type Middleware = (ctx: any, next: () => Promise<void>) => Promise<void> | void;\n\nexport type Options = {\n exclude?: string[];\n};\n\nexport const createMiddlewareManager = () => {\n const middlewares: Middleware[] = [];\n\n const manager = {\n use(middleware: Middleware) {\n middlewares.push(middleware);\n\n return () => middlewares.splice(middlewares.indexOf(middleware), 1);\n },\n\n async run(ctx: any, cb: () => void) {\n let index = 0;\n const next = async () => {\n if (index < middlewares.length) {\n // eslint-disable-next-line no-plusplus\n return middlewares[index++](ctx, next);\n }\n\n return cb();\n };\n\n return next();\n },\n\n wrapObject<TSource>(source: TSource, ctxDefaults = {}, opts: Options = {}): TSource {\n const facade: TSource = {} as TSource;\n const { exclude = [] } = opts;\n\n for (const key in source) {\n if (Object.hasOwnProperty.call(source, key)) {\n const prop = source[key];\n\n if (exclude.includes(key)) {\n facade[key] = prop;\n } else if (typeof prop === 'function') {\n const newMethod = async (params: any = {}) => {\n const ctx = {\n ...ctxDefaults,\n action: key,\n params,\n };\n\n return manager.run(ctx, () => prop(ctx.params));\n };\n\n facade[key] = newMethod as typeof prop;\n } else {\n facade[key] = prop;\n }\n }\n }\n\n return facade;\n },\n };\n\n return manager;\n};\n","import type { UID, Modules } from '@strapi/types';\n\nexport type RepositoryFactoryMethod = <TContentTypeUID extends UID.ContentType>(\n uid: TContentTypeUID,\n entityValidator: Modules.EntityValidator.EntityValidator\n) => Modules.Documents.ServiceInstance<TContentTypeUID>;\n\nexport const wrapInTransaction = (fn: (...args: any) => any) => {\n return (...args: any[]) => strapi.db.transaction?.(() => fn(...args));\n};\n","import { assoc, curry } from 'lodash/fp';\n\nimport type { Modules, Struct } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\ntype ParamsTransform = (params: Modules.Documents.Params.All) => Modules.Documents.Params.All;\n\ntype TransformWithContentType = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Modules.Documents.Params.All;\n\n/**\n * DP enabled -> set status to draft\n * DP disabled -> Used mostly for parsing relations, so there is not a need for a default.\n */\nconst setStatusToDraft: TransformWithContentType = (contentType, params) => {\n if (!contentTypes.hasDraftAndPublish(contentType) && params.status) {\n return params;\n }\n\n return assoc('status', 'draft', params);\n};\n\n/**\n * Adds a default status of `draft` to the params\n */\nconst defaultToDraft: ParamsTransform = (params) => {\n // Default to draft if no status is provided or it's invalid\n if (!params.status || params.status !== 'published') {\n return assoc('status', 'draft', params);\n }\n\n return params;\n};\n\n/**\n * DP disabled -> ignore status\n * DP enabled -> set status to draft if no status is provided or it's invalid\n */\nconst defaultStatus: TransformWithContentType = (contentType, params) => {\n if (!contentTypes.hasDraftAndPublish(contentType)) {\n return params;\n }\n\n // Default to draft if no status is provided or it's invalid\n if (!params.status || params.status !== 'published') {\n return defaultToDraft(params);\n }\n\n return params;\n};\n\n/**\n * In mutating actions we don't want user to set the publishedAt attribute.\n */\nconst filterDataPublishedAt: ParamsTransform = (params) => {\n if (params?.data?.publishedAt) {\n return assoc(['data', 'publishedAt'], null, params);\n }\n\n return params;\n};\n\n/**\n * Add status lookup query to the params\n */\nconst statusToLookup: TransformWithContentType = (contentType, params) => {\n if (!contentTypes.hasDraftAndPublish(contentType)) {\n return params;\n }\n\n const lookup = params.lookup || {};\n\n switch (params?.status) {\n case 'published':\n return assoc(['lookup', 'publishedAt'], { $notNull: true }, params);\n case 'draft':\n return assoc(['lookup', 'publishedAt'], { $null: true }, params);\n default:\n break;\n }\n\n return assoc('lookup', lookup, params);\n};\n\n/**\n * Translate publication status parameter into the data that will be saved\n */\nconst statusToData: TransformWithContentType = (contentType, params) => {\n if (!contentTypes.hasDraftAndPublish(contentType)) {\n return assoc(['data', 'publishedAt'], new Date(), params);\n }\n\n switch (params?.status) {\n case 'published':\n return assoc(['data', 'publishedAt'], new Date(), params);\n case 'draft':\n return assoc(['data', 'publishedAt'], null, params);\n default:\n break;\n }\n\n return params;\n};\n\nconst setStatusToDraftCurry = curry(setStatusToDraft);\nconst defaultToDraftCurry = curry(defaultToDraft);\nconst defaultStatusCurry = curry(defaultStatus);\nconst filterDataPublishedAtCurry = curry(filterDataPublishedAt);\nconst statusToLookupCurry = curry(statusToLookup);\nconst statusToDataCurry = curry(statusToData);\n\nexport {\n setStatusToDraftCurry as setStatusToDraft,\n defaultToDraftCurry as defaultToDraft,\n defaultStatusCurry as defaultStatus,\n filterDataPublishedAtCurry as filterDataPublishedAt,\n statusToLookupCurry as statusToLookup,\n statusToDataCurry as statusToData,\n};\n","import type { Struct, Modules } from '@strapi/types';\nimport { errors } from '@strapi/utils';\nimport { curry, assoc } from 'lodash/fp';\n\ntype Transform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Modules.Documents.Params.All;\n\ntype AsyncTransform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Promise<Modules.Documents.Params.All>;\n\nconst getDefaultLocale = async (): Promise<string> => {\n return strapi.plugin('i18n').service('locales').getDefaultLocale();\n};\n\nconst defaultLocale: AsyncTransform = async (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (!params.locale) {\n return assoc('locale', await getDefaultLocale(), params);\n }\n\n return params;\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst localeToLookup: Transform = (contentType, params) => {\n if (\n !params.locale ||\n !strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)\n ) {\n return params;\n }\n\n if (typeof params.locale !== 'string') {\n // localeToLookup accepts locales of '*'. This is because the document\n // service functions that use this transform work with the '*' locale\n // to return all locales.\n throw new errors.ValidationError(\n `Invalid locale param ${String(params.locale)} provided. Document locales must be strings.`\n );\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst multiLocaleToLookup: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n if (params.locale === '*') {\n return params;\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n }\n\n return params;\n};\n\n/**\n * Translate locale status parameter into the data that will be saved\n */\nconst localeToData: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n const isValidLocale = typeof params.locale === 'string' && params.locale !== '*';\n if (isValidLocale) {\n return assoc(['data', 'locale'], params.locale, params);\n }\n\n throw new errors.ValidationError(\n `Invalid locale param ${params.locale} provided. Document locales must be strings.`\n );\n }\n\n return params;\n};\n\nconst defaultLocaleCurry = curry(defaultLocale);\nconst localeToLookupCurry = curry(localeToLookup);\nconst multiLocaleToLookupCurry = curry(multiLocaleToLookup);\nconst localeToDataCurry = curry(localeToData);\n\nexport {\n defaultLocaleCurry as defaultLocale,\n localeToLookupCurry as localeToLookup,\n localeToDataCurry as localeToData,\n multiLocaleToLookupCurry as multiLocaleToLookup,\n};\n","import _ from 'lodash';\nimport { has, omit, pipe, assign, curry } from 'lodash/fp';\nimport type { Utils, UID, Schema, Data, Modules } from '@strapi/types';\nimport { contentTypes as contentTypesUtils, async, errors } from '@strapi/utils';\n\n// type aliases for readability\ntype Input<T extends UID.Schema> = Modules.Documents.Params.Data.Input<T>;\n\ntype LoadedComponents<TUID extends UID.Schema> = Data.Entity<\n TUID,\n Schema.AttributeNamesByType<TUID, 'component' | 'dynamiczone'>\n>;\n\ntype SingleComponentValue = Schema.Attribute.ComponentValue<UID.Component, false>;\ntype RepeatableComponentValue = Schema.Attribute.ComponentValue<UID.Component, true>;\n\ntype ComponentValue = SingleComponentValue | RepeatableComponentValue;\n\ntype DynamicZoneValue = Schema.Attribute.DynamicZoneValue<UID.Component[]>;\n\ntype ComponentBody = {\n [key: string]: ComponentValue | DynamicZoneValue;\n};\n\nconst omitComponentData = curry(\n (schema: Schema.Schema, data: Input<UID.Schema>): Partial<Input<UID.Schema>> => {\n const { attributes } = schema;\n const componentAttributes = Object.keys(attributes).filter((attributeName) =>\n contentTypesUtils.isComponentAttribute(attributes[attributeName])\n );\n\n return omit(componentAttributes, data);\n }\n);\n\n// NOTE: we could generalize the logic to allow CRUD of relation directly in the DB layer\nconst createComponents = async <TUID extends UID.Schema, TData extends Input<TUID>>(\n uid: TUID,\n data: TData\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const componentBody: ComponentBody = {};\n\n const attributeNames = Object.keys(attributes);\n\n for (const attributeName of attributeNames) {\n const attribute = attributes[attributeName];\n\n if (!has(attributeName, data) || !contentTypesUtils.isComponentAttribute(attribute)) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID, repeatable = false } = attribute;\n\n const componentValue = data[attributeName as keyof TData];\n\n if (componentValue === null) {\n continue;\n }\n\n if (repeatable === true) {\n if (!Array.isArray(componentValue)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n const components: RepeatableComponentValue = await async.map(componentValue, (value: any) =>\n createComponent(componentUID, value)\n );\n\n componentBody[attributeName] = components.map(({ id }) => {\n return {\n id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n });\n } else {\n const component = await createComponent(\n componentUID,\n componentValue as Input<UID.Component>\n );\n\n componentBody[attributeName] = {\n id: component.id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n }\n\n continue;\n }\n\n if (attribute.type === 'dynamiczone') {\n const dynamiczoneValues = data[\n attributeName as keyof TData\n ] as Modules.EntityService.Params.Attribute.GetValue<Schema.Attribute.DynamicZone>;\n\n if (!Array.isArray(dynamiczoneValues)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n const createDynamicZoneComponents = async (\n value: Utils.Array.Values<typeof dynamiczoneValues>\n ) => {\n const { id } = await createComponent(value.__component, value);\n return {\n id,\n __component: value.__component,\n __pivot: {\n field: attributeName,\n },\n };\n };\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n componentBody[attributeName] = await async.map(\n dynamiczoneValues,\n createDynamicZoneComponents\n );\n\n continue;\n }\n }\n\n return componentBody;\n};\n\nconst getComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n entity: { id: Modules.EntityService.Params.Attribute.ID }\n): Promise<LoadedComponents<TUID>> => {\n const componentAttributes = contentTypesUtils.getComponentAttributes(strapi.getModel(uid));\n\n if (_.isEmpty(componentAttributes)) {\n return {} as LoadedComponents<TUID>;\n }\n\n return strapi.db.query(uid).load(entity, componentAttributes) as Promise<LoadedComponents<TUID>>;\n};\n\n/*\n delete old components\n create or update\n*/\nconst updateComponents = async <TUID extends UID.Schema, TData extends Partial<Input<TUID>>>(\n uid: TUID,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n data: TData\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const componentBody: ComponentBody = {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (!has(attributeName, data)) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID, repeatable = false } = attribute;\n\n const componentValue = data[attributeName as keyof TData] as ComponentValue;\n await deleteOldComponents(uid, componentUID, entityToUpdate, attributeName, componentValue);\n\n if (repeatable === true) {\n if (!Array.isArray(componentValue)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n const components: RepeatableComponentValue = await async.map(componentValue, (value: any) =>\n updateOrCreateComponent(componentUID, value)\n );\n\n componentBody[attributeName] = components.filter(_.negate(_.isNil)).map(({ id }) => {\n return {\n id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n });\n } else {\n const component = await updateOrCreateComponent(componentUID, componentValue);\n componentBody[attributeName] = component && {\n id: component.id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n }\n } else if (attribute.type === 'dynamiczone') {\n const dynamiczoneValues = data[attributeName as keyof TData] as DynamicZoneValue;\n\n await deleteOldDZComponents(uid, entityToUpdate, attributeName, dynamiczoneValues);\n\n if (!Array.isArray(dynamiczoneValues)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n componentBody[attributeName] = await async.map(dynamiczoneValues, async (value: any) => {\n const { id } = await updateOrCreateComponent(value.__component, value);\n\n return {\n id,\n __component: value.__component,\n __pivot: {\n field: attributeName,\n },\n };\n });\n }\n }\n\n return componentBody;\n};\n\nconst pickStringifiedId = ({\n id,\n}: {\n id: Modules.EntityService.Params.Attribute.ID;\n}): Modules.EntityService.Params.Attribute.ID & string => {\n if (typeof id === 'string') {\n return id;\n }\n\n return `${id}`;\n};\n\nconst deleteOldComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n componentUID: UID.Component,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n attributeName: string,\n componentValue: ComponentValue\n) => {\n const previousValue = (await strapi.db\n .query(uid)\n .load(entityToUpdate, attributeName)) as ComponentValue;\n const idsToKeep = _.castArray(componentValue).filter(has('id')).map(pickStringifiedId);\n const allIds = _.castArray(previousValue).filter(has('id')).map(pickStringifiedId);\n\n idsToKeep.forEach((id) => {\n if (!allIds.includes(id)) {\n throw new errors.ApplicationError(\n `Some of the provided components in ${attributeName} are not related to the entity`\n );\n }\n });\n\n const idsToDelete = _.difference(allIds, idsToKeep);\n\n if (idsToDelete.length > 0) {\n for (const idToDelete of idsToDelete) {\n await deleteComponent(componentUID, { id: idToDelete });\n }\n }\n};\n\nconst deleteOldDZComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n attributeName: string,\n dynamiczoneValues: DynamicZoneValue\n) => {\n const previousValue = (await strapi.db\n .query(uid)\n .load(entityToUpdate, attributeName)) as DynamicZoneValue;\n\n const idsToKeep = _.castArray(dynamiczoneValues)\n .filter(has('id'))\n .map((v) => ({\n id: pickStringifiedId(v),\n __component: v.__component,\n }));\n\n const allIds = _.castArray(previousValue)\n .filter(has('id'))\n .map((v) => ({\n id: pickStringifiedId(v),\n __component: v.__component,\n }));\n\n idsToKeep.forEach(({ id, __component }) => {\n if (!allIds.find((el) => el.id === id && el.__component === __component)) {\n const err = new Error(\n `Some of the provided components in ${attributeName} are not related to the entity`\n );\n\n Object.assign(err, { status: 400 });\n throw err;\n }\n });\n\n type IdsToDelete = DynamicZoneValue;\n\n const idsToDelete = allIds.reduce((acc, { id, __component }) => {\n if (!idsToKeep.find((el) => el.id === id && el.__component === __component)) {\n acc.push({ id, __component });\n }\n\n return acc;\n }, [] as IdsToDelete);\n\n if (idsToDelete.length > 0) {\n for (const idToDelete of idsToDelete) {\n const { id, __component } = idToDelete;\n await deleteComponent(__component, { id });\n }\n }\n};\n\nconst deleteComponents = async <TUID extends UID.Schema, TEntity extends Data.Entity<TUID>>(\n uid: TUID,\n entityToDelete: TEntity,\n { loadComponents = true } = {}\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const attributeNames = Object.keys(attributes);\n\n for (const attributeName of attributeNames) {\n const attribute = attributes[attributeName];\n\n if (attribute.type === 'component' || attribute.type === 'dynamiczone') {\n let value;\n\n if (loadComponents) {\n value = await strapi.db.query(uid).load(entityToDelete, attributeName);\n } else {\n value = entityToDelete[attributeName as keyof TEntity];\n }\n\n if (!value) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID } = attribute;\n await async.map(_.castArray(value), (subValue: any) =>\n deleteComponent(componentUID, subValue)\n );\n } else {\n await async.map(_.castArray(value), (subValue: any) =>\n deleteComponent(subValue.__component, subValue)\n );\n }\n\n continue;\n }\n }\n};\n\n/** *************************\n Component queries\n************************** */\n\n// components can have nested compos so this must be recursive\nconst createComponent = async <TUID extends UID.Component>(uid: TUID, data: Input<TUID>) => {\n const schema = strapi.getModel(uid);\n\n const componentData = await createComponents(uid, data);\n\n const transform = pipe(\n // Make sure we don't save the component with a pre-defined ID\n omit('id'),\n assignComponentData(schema, componentData)\n );\n\n return strapi.db.query(uid).create({ data: transform(data) });\n};\n\n// components can have nested compos so this must be recursive\nconst updateComponent = async <TUID extends UID.Component>(\n uid: TUID,\n componentToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n data: Input<TUID>\n) => {\n const schema = strapi.getModel(uid);\n\n const componentData = await updateComponents(uid, componentToUpdate, data);\n\n return strapi.db.query(uid).update({\n where: {\n id: componentToUpdate.id,\n },\n data: assignComponentData(schema, componentData, data),\n });\n};\n\nconst updateOrCreateComponent = <TUID extends UID.Component>(\n componentUID: TUID,\n value: Input<TUID>\n) => {\n if (value === null) {\n return null;\n }\n\n // update\n if ('id' in value && typeof value.id !== 'undefined') {\n // TODO: verify the compo is associated with the entity\n return updateComponent(componentUID, { id: value.id }, value);\n }\n\n // create\n return createComponent(componentUID, value);\n};\n\nconst deleteComponent = async <TUID extends UID.Component>(\n uid: TUID,\n componentToDelete: Data.Component<TUID>\n) => {\n await deleteComponents(uid, componentToDelete);\n await strapi.db.query(uid).delete({ where: { id: componentToDelete.id } });\n};\n\nconst assignComponentData = curry(\n (schema: Schema.Schema, componentData: ComponentBody, data: Input<UID.Schema>) => {\n return pipe(omitComponentData(schema), assign(componentData))(data);\n }\n);\n\nexport {\n omitComponentData,\n assignComponentData,\n getComponents,\n createComponents,\n updateComponents,\n deleteComponents,\n deleteComponent,\n};\n","import type { Core, Data, UID } from '@strapi/types';\nimport { async, contentTypes } from '@strapi/utils';\n\nconst hasDraftAndPublish = (uid: UID.CollectionType) => {\n const model = strapi.getModel(uid);\n return contentTypes.hasDraftAndPublish(model);\n};\n\n/**\n * TODO: Find a better way to encode keys than this\n * This converts an object into a string by joining its keys and values,\n * so it can be used as a key in a Map.\n *\n * @example\n * const obj = { a: 1, b: 2 };\n * const key = encodeKey(obj);\n * ^ \"a:::1&&b:::2\"\n */\nconst encodeKey = (obj: any) => {\n // Ignore status field for models without draft and publish\n if (!hasDraftAndPublish(obj.uid)) {\n delete obj.status;\n }\n\n // Sort keys to always keep the same order when encoding\n const keys = Object.keys(obj).sort();\n return keys.map((key) => `${key}:::${obj[key]}`).join('&&');\n};\n\ninterface KeyFields {\n uid: string;\n documentId: Data.ID;\n locale?: string | null;\n status?: 'draft' | 'published';\n}\n\nexport interface IdMap {\n loadedIds: Map<string, string>;\n toLoadIds: Map<string, KeyFields>;\n // Make the Keys type to be the params of add\n add(keys: KeyFields): void;\n load(): Promise<void>;\n get(keys: KeyFields): string | undefined;\n clear(): void;\n}\n\n/**\n * Holds a registry of document ids and their corresponding entity ids.\n */\nconst createIdMap = ({ strapi }: { strapi: Core.Strapi }): IdMap => {\n const loadedIds = new Map();\n const toLoadIds = new Map();\n\n return {\n loadedIds,\n toLoadIds,\n /**\n * Register a new document id and its corresponding entity id.\n */\n add(keyFields: KeyFields) {\n const key = encodeKey({ status: 'published', locale: null, ...keyFields });\n\n // If the id is already loaded, do nothing\n if (loadedIds.has(key)) return;\n // If the id is already in the toLoadIds, do nothing\n if (toLoadIds.has(key)) return;\n\n // Add the id to the toLoadIds\n toLoadIds.set(key, keyFields);\n },\n\n /**\n * Load all ids from the registry.\n */\n async load() {\n // Document Id to Entry Id queries are batched by its uid and locale\n // TODO: Add publication state too\n const loadIdValues = Array.from(toLoadIds.values());\n\n // 1. Group ids to query together\n const idsByUidAndLocale = loadIdValues.reduce((acc, { documentId, ...rest }) => {\n const key = encodeKey(rest);\n const ids = acc[key] || { ...rest, documentIds: [] };\n ids.documentIds.push(documentId);\n return { ...acc, [key]: ids };\n }, {});\n\n // 2. Query ids\n await async.map(\n Object.values(idsByUidAndLocale),\n async ({ uid, locale, documentIds, status }: any) => {\n const findParams = {\n select: ['id', 'documentId', 'locale', 'publishedAt'],\n where: {\n documentId: { $in: documentIds },\n locale: locale || null,\n },\n } as any;\n\n if (hasDraftAndPublish(uid)) {\n findParams.where.publishedAt = status === 'draft' ? null : { $ne: null };\n }\n\n const result = await strapi?.db?.query(uid).findMany(findParams);\n\n // 3. Store result in loadedIds\n result?.forEach(({ documentId, id, locale, publishedAt }: any) => {\n const key = encodeKey({\n documentId,\n uid,\n locale,\n status: publishedAt ? 'published' : 'draft',\n });\n loadedIds.set(key, id);\n });\n }\n );\n\n // 4. Clear toLoadIds\n toLoadIds.clear();\n },\n\n /**\n * Get the entity id for a given document id.\n */\n get(keys: KeyFields) {\n const key = encodeKey({ status: 'published', locale: null, ...keys });\n return loadedIds.get(key);\n },\n\n /**\n * Clear the registry.\n */\n clear() {\n loadedIds.clear();\n toLoadIds.clear();\n },\n };\n};\n\nexport { createIdMap };\n","import type { UID } from '@strapi/types';\nimport { LongHandDocument } from './types';\n\nexport const isLocalizedContentType = (uid: UID.Schema) => {\n const model = strapi.getModel(uid);\n return strapi.plugin('i18n').service('content-types').isLocalizedContentType(model);\n};\n\nexport const getDefaultLocale = () => {\n return strapi.plugin('i18n').service('locales').getDefaultLocale();\n};\n\nexport const getRelationTargetLocale = (\n relation: LongHandDocument,\n opts: {\n targetUid: UID.Schema;\n sourceUid: UID.Schema;\n sourceLocale?: string | null;\n }\n) => {\n const targetLocale = relation.locale || opts.sourceLocale;\n\n const isTargetLocalized = isLocalizedContentType(opts.targetUid);\n const isSourceLocalized = isLocalizedContentType(opts.sourceUid);\n\n // Both source and target locales should match\n if (isSourceLocalized && isTargetLocalized) {\n return opts.sourceLocale;\n }\n\n if (isTargetLocalized) {\n return targetLocale;\n }\n\n return null;\n};\n","import { isNil } from 'lodash/fp';\n\nimport { contentTypes } from '@strapi/utils';\nimport type { UID } from '@strapi/types';\n\nimport { LongHandDocument } from './types';\n\ntype Status = 'draft' | 'published';\n\nexport const getRelationTargetStatus = (\n relation: Pick<LongHandDocument, 'documentId' | 'status'>,\n opts: {\n targetUid: UID.Schema;\n sourceUid: UID.Schema;\n sourceStatus?: Status;\n }\n): Status[] => {\n // Ignore if the target content type does not have draft and publish enabled\n const targetContentType = strapi.getModel(opts.targetUid);\n const sourceContentType = strapi.getModel(opts.sourceUid);\n\n const targetHasDP = contentTypes.hasDraftAndPublish(targetContentType);\n const sourceHasDP = contentTypes.hasDraftAndPublish(sourceContentType);\n\n if (!targetHasDP) {\n return ['published'];\n }\n\n /**\n * If both source and target have DP enabled,\n * connect it to the same status as the source status\n */\n if (sourceHasDP && !isNil(opts.sourceStatus)) {\n return [opts.sourceStatus];\n }\n\n /**\n * Use the status from the relation if it's set\n */\n if (relation.status) {\n switch (relation.status) {\n case 'published':\n return ['published'];\n default:\n // Default to draft if it's an invalid status (e.g. modified)\n return ['draft'];\n }\n }\n\n /**\n * If DP is disabled and relation does not specify any status\n * Connect to both draft and published versions\n */\n if (!sourceHasDP) {\n return ['draft', 'published'];\n }\n\n // Default to draft as a fallback\n return ['draft'];\n};\n","/* eslint-disable node/no-callback-literal */\nimport { isObject, curry, isNil } from 'lodash/fp';\n\nimport { traverseEntity, async } from '@strapi/utils';\n\nimport { Relation } from './types';\n\nconst isNumeric = (value: any): value is number => {\n if (Array.isArray(value)) return false; // Handle [1, 'docId'] case\n const parsed = parseInt(value, 10);\n return !Number.isNaN(parsed);\n};\n\nconst toArray = (value: any) => {\n // Keep value as it is if it's a nullish value\n if (isNil(value)) return value;\n if (Array.isArray(value)) return value;\n\n return [value];\n};\n\n/**\n * There are multiple ways to create Strapi relations.\n * This is a utility to traverse and transform relation data\n *\n *\n * For consistency and ease of use, the response will always be an object with the following shape:\n * { set: [{...}], connect: [{...}], disconnect: [{...}] }\n *\n * @example\n * transformRelationData({\n * onLongHand: (relation) => {\n * // Change the id of the relation\n * return { id: 'other' };\n * },\n * }, relation)\n */\nconst mapRelation = async (\n callback: (relation: any) => any,\n rel: Relation,\n isRecursive = false\n): Promise<Relation> => {\n let relation: Relation = rel;\n\n const wrapInSet = (value: any) => {\n // Ignore wrapping if it's a recursive call\n if (isRecursive) {\n return value;\n }\n return { set: toArray(value) };\n };\n\n // undefined | null\n if (isNil(relation)) {\n return callback(relation);\n }\n\n // LongHand[] | ShortHand[]\n if (Array.isArray(relation)) {\n return async\n .map(relation, (r: Relation) => mapRelation(callback, r, true))\n .then((result: any) => result.flat().filter(Boolean))\n .then(wrapInSet);\n }\n\n // LongHand\n if (isObject(relation)) {\n // { id: 1 } || { documentId: 1 }\n if ('id' in relation || 'documentId' in relation) {\n const result = await callback(relation);\n return wrapInSet(result);\n }\n\n // If not connecting anything, return default visitor\n if (!relation.set && !relation.disconnect && !relation.connect) {\n return callback(relation);\n }\n\n // { set }\n if (relation.set) {\n const set: any = await mapRelation(callback, relation.set, true);\n relation = { ...relation, set: toArray(set) };\n }\n\n // { disconnect}\n if (relation.disconnect) {\n const disconnect: any = await mapRelation(callback, relation.disconnect, true);\n relation = { ...relation, disconnect: toArray(disconnect) };\n }\n\n // { connect }\n if (relation.connect) {\n // Transform the relation to connect\n const connect: any = await mapRelation(callback, relation.connect, true);\n relation = { ...relation, connect: toArray(connect) };\n }\n\n return relation;\n }\n\n // ShortHand\n if (isNumeric(relation)) {\n const result = await callback({ id: relation });\n return wrapInSet(result);\n }\n\n if (typeof relation === 'string') {\n const result = await callback({ documentId: relation });\n return wrapInSet(result);\n }\n\n // Anything else\n return callback(relation);\n};\n\ntype TraverseEntity = Parameters<typeof traverseEntity>;\n\n/**\n * Utility function, same as `traverseEntity` but only for relations.\n */\nconst traverseEntityRelations = async (\n visitor: TraverseEntity[0],\n options: TraverseEntity[1],\n data: TraverseEntity[2]\n) => {\n return traverseEntity(\n async (options, utils) => {\n const { attribute } = options;\n\n if (!attribute) {\n return;\n }\n\n if (attribute.type !== 'relation') {\n return;\n }\n\n // TODO: Handle join columns\n if (attribute.useJoinTable === false) {\n return;\n }\n\n return visitor(options, utils);\n },\n options,\n data\n );\n};\n\nconst mapRelationCurried = curry(mapRelation);\nconst traverseEntityRelationsCurried = curry(traverseEntityRelations);\n\nexport {\n mapRelationCurried as mapRelation,\n traverseEntityRelationsCurried as traverseEntityRelations,\n};\n","import { curry } from 'lodash/fp';\n\nimport type { UID } from '@strapi/types';\nimport { relations } from '@strapi/utils';\nimport { IdMap } from '../../id-map';\nimport { getRelationTargetLocale } from '../utils/i18n';\nimport { getRelationTargetStatus } from '../utils/dp';\nimport { mapRelation, traverseEntityRelations } from '../utils/map-relation';\nimport { LongHandDocument } from '../utils/types';\n\nconst { isPolymorphic } = relations;\n\ninterface Options {\n uid: UID.Schema;\n locale?: string | null;\n status?: 'draft' | 'published';\n}\n\n/**\n * Load a relation documentId into the idMap.\n */\nconst addRelationDocId = curry(\n (idMap: IdMap, source: Options, targetUid: UID.Schema, relation: LongHandDocument) => {\n const targetLocale = getRelationTargetLocale(relation, {\n targetUid,\n sourceUid: source.uid,\n sourceLocale: source.locale,\n });\n\n const targetStatus = getRelationTargetStatus(relation, {\n targetUid,\n sourceUid: source.uid,\n sourceStatus: source.status,\n });\n\n targetStatus.forEach((status) => {\n idMap.add({\n uid: targetUid,\n documentId: relation.documentId,\n locale: targetLocale,\n status,\n });\n });\n }\n);\n\n/**\n * Iterate over all relations of a data object and extract all relational document ids.\n * Those will later be transformed to entity ids.\n */\nconst extractDataIds = (idMap: IdMap, data: Record<string, any>, source: Options) => {\n return traverseEntityRelations(\n async ({ attribute, value }) => {\n if (!attribute) {\n return;\n }\n const isPolymorphicRelation = isPolymorphic(attribute);\n const addDocId = addRelationDocId(idMap, source);\n\n return mapRelation((relation) => {\n if (!relation || !relation.documentId) {\n return relation;\n }\n\n // Regular relations will always target the same target\n // if its a polymorphic relation we need to get it from the data itself\n const targetUid = isPolymorphicRelation ? relation.__type : attribute.target;\n\n addDocId(targetUid, relation);\n\n // Handle positional arguments\n const position = relation.position;\n\n // The positional relation target uid can be different for polymorphic relations\n let positionTargetUid = targetUid;\n if (isPolymorphicRelation && position?.__type) {\n positionTargetUid = position.__type;\n }\n\n if (position?.before) {\n addDocId(positionTargetUid, { ...relation, ...position, documentId: position.before });\n }\n\n if (position?.after) {\n addDocId(positionTargetUid, { ...relation, ...position, documentId: position.after });\n }\n\n return relation;\n }, value as any);\n },\n { schema: strapi.getModel(source.uid), getModel: strapi.getModel.bind(strapi) },\n data\n );\n};\n\nexport { extractDataIds };\n","import { curry } from 'lodash/fp';\n\nimport type { UID } from '@strapi/types';\nimport { errors, relations } from '@strapi/utils';\n\nimport { ID, LongHandDocument } from '../utils/types';\nimport { IdMap } from '../../id-map';\nimport { getRelationTargetLocale } from '../utils/i18n';\nimport { getRelationTargetStatus } from '../utils/dp';\nimport { mapRelation, traverseEntityRelations } from '../utils/map-relation';\n\nconst { isPolymorphic } = relations;\n\ninterface Options {\n uid: UID.Schema;\n locale?: string | null;\n status?: 'draft' | 'published';\n allowMissingId?: boolean; // Whether to ignore missing ids and not throw any error\n}\n\n/**\n * Get the entry ids for a given documentId.\n */\nconst getRelationIds = curry(\n (idMap: IdMap, source: Options, targetUid: UID.Schema, relation: LongHandDocument) => {\n // locale to connect to\n const targetLocale = getRelationTargetLocale(relation, {\n targetUid,\n sourceUid: source.uid,\n sourceLocale: source.locale,\n });\n\n // status(es) to connect to\n const targetStatus = getRelationTargetStatus(relation, {\n targetUid,\n sourceUid: source.uid,\n sourceStatus: source.status,\n });\n\n const ids: ID[] = [];\n\n // Find mapping between documentID -> id(s).\n // There are scenarios where a single documentID can map to multiple ids.\n // e.g when connecting Non DP -> DP and connecting to both the draft and publish version at the same time\n for (const tStatus of targetStatus) {\n const entryId = idMap.get({\n uid: targetUid,\n documentId: relation.documentId,\n locale: targetLocale,\n status: tStatus,\n });\n\n if (entryId) ids.push(entryId);\n }\n\n if (!ids.length && !source.allowMissingId) {\n throw new errors.ValidationError(\n `Document with id \"${relation.documentId}\", locale \"${targetLocale}\" not found`\n );\n }\n\n return ids;\n }\n);\n\n/**\n * Iterate over all relations of a data object and transform all relational document ids to entity ids.\n */\nconst transformDataIdsVisitor = (idMap: IdMap, data: Record<string, any>, source: Options) => {\n return traverseEntityRelations(\n async ({ key, value, attribute }, { set }) => {\n if (!attribute) {\n return;\n }\n const isPolymorphicRelation = isPolymorphic(attribute);\n const getIds = getRelationIds(idMap, source);\n\n // Transform the relation documentId to entity id\n const newRelation = await mapRelation((relation) => {\n if (!relation || !relation.documentId) {\n return relation;\n }\n\n // Find relational attributes, and return the document ids\n // if its a polymorphic relation we need to get it from the data itself\n const targetUid: UID.Schema = isPolymorphicRelation ? relation.__type : attribute.target;\n const ids: ID[] = getIds(targetUid, relation);\n\n // Handle positional arguments\n const position = { ...relation.position };\n\n // The positional relation target uid can be different for polymorphic relations\n let positionTargetUid: UID.Schema = targetUid;\n if (isPolymorphicRelation && position?.__type) {\n positionTargetUid = position.__type;\n }\n\n if (position.before) {\n const beforeRelation = { ...relation, ...position, documentId: position.before };\n const beforeIds: ID[] = getIds(positionTargetUid, beforeRelation);\n position.before = beforeIds.at(0);\n }\n\n if (position.after) {\n const afterRelation = { ...relation, ...position, documentId: position.after };\n position.after = getIds(positionTargetUid, afterRelation).at(0);\n }\n\n // Transform all ids to new relations\n return ids?.map((id) => {\n const newRelation = { id } as typeof relation;\n\n if (relation.position) {\n newRelation.position = position;\n }\n\n // Insert type if its a polymorphic relation\n if (isPolymorphicRelation) {\n newRelation.__type = targetUid;\n }\n\n return newRelation;\n });\n }, value as any);\n\n set(key, newRelation as any);\n },\n { schema: strapi.getModel(source.uid), getModel: strapi.getModel.bind(strapi) },\n data\n );\n};\n\nexport { transformDataIdsVisitor };\n","import type { UID } from '@strapi/types';\n\nimport { getDefaultLocale, isLocalizedContentType } from '../utils/i18n';\nimport { mapRelation, traverseEntityRelations } from '../utils/map-relation';\n\n/**\n * In scenarios like Non i18n CT -> i18n CT\n * relations can be connected to multiple locales,\n * in case user does not provide the locale, this sets it to the default one.\n */\nconst setDefaultLocaleToRelations = (data: Record<string, any>, uid: UID.Schema) => {\n // I18n CT -> anything will already have a locale set (source locale)\n if (isLocalizedContentType(uid)) {\n return data;\n }\n\n // Store the default locale to avoid multiple calls\n let defaultLocale: string;\n\n /**\n * Traverse the entity input data and set the default locale to relations\n */\n return traverseEntityRelations(\n async ({ key, value }, { set }) => {\n /**\n * Assign default locale on long hand expressed relations\n * e.g { documentId } -> { documentId, locale }\n */\n const relation = await mapRelation(async (relation) => {\n if (!relation || !relation?.documentId || relation?.locale) {\n return relation;\n }\n\n // Set default locale if not provided\n if (!defaultLocale) {\n defaultLocale = await getDefaultLocale();\n }\n\n // Assign default locale to the positional argument\n const position = relation.position;\n if (position && typeof position === 'object' && !position.locale) {\n relation.position.locale = defaultLocale;\n }\n\n return { ...relation, locale: defaultLocale };\n }, value as any);\n\n // @ts-expect-error - fix type\n set(key, relation);\n },\n { schema: strapi.getModel(uid), getModel: strapi.getModel.bind(strapi) },\n data\n );\n};\n\nexport { setDefaultLocaleToRelations };\n","import { createIdMap } from './id-map';\nimport { extractDataIds as extractDataRelationIds } from './relations/extract/data-ids';\nimport { transformDataIdsVisitor as transformRelationDataIds } from './relations/transform/data-ids';\nimport { setDefaultLocaleToRelations } from './relations/transform/default-locale';\n\n/**\n * Transforms input data, containing relation document ids, to entity ids.\n */\nexport const transformData = async (data: any, opts: any) => {\n const idMap = createIdMap({ strapi });\n\n // Assign default locales\n const transformedData = await setDefaultLocaleToRelations(data, opts.uid);\n\n // Extract any relation ids from the input\n await extractDataRelationIds(idMap, transformedData, opts);\n\n // Load any relation the extract methods found\n await idMap.load();\n\n // Transform any relation ids to entity ids\n return transformRelationDataIds(idMap, transformedData, opts);\n};\n","import type { Modules, UID } from '@strapi/types';\n\ntype Fields = Modules.Documents.Params.Pick<UID.Schema, 'fields'>['fields'];\n\nexport const transformFields = (fields: Fields): Fields => {\n // If it's a string, and it doesn't contain documentId, should be an array\n if (typeof fields === 'string') {\n // '*' => '*'\n if (fields === '*') {\n return fields;\n }\n\n // '' => 'documentId'\n if (fields === '') {\n return 'documentId';\n }\n\n // 'name,description' => 'name,description,documentId'\n if (!fields.split(',').includes('documentId')) {\n return `${fields},documentId`;\n }\n }\n\n // It's not an array, ignore it\n if (!fields || !Array.isArray(fields)) {\n // If fields is empty, return it as is\n return fields;\n }\n\n // Ensure we are always selecting the documentId\n // ['name', 'description'] => ['name', 'description', 'documentId']\n if (!fields.includes('documentId')) {\n fields.push('documentId');\n }\n\n return fields;\n};\n","import { traverse } from '@strapi/utils';\nimport type { UID } from '@strapi/types';\n\nimport { type Data } from './types';\nimport { transformFields } from './fields';\n\nexport const transformPopulate = async (data: Data, opts: { uid: UID.Schema }) => {\n return traverse.traverseQueryPopulate(\n async ({ attribute, key, value }, { set }) => {\n if (!value || typeof value !== 'object' || attribute?.type !== 'relation') {\n return;\n }\n\n /*\n If the attribute is a relation\n Look for fields in the value\n and apply the relevant transformation to these objects\n */\n if ('fields' in value && Array.isArray(value.fields)) {\n value.fields = transformFields(value.fields);\n }\n\n set(key, value);\n },\n { schema: strapi.getModel(opts.uid), getModel: strapi.getModel.bind(strapi) },\n data\n );\n};\n","import { curry } from 'lodash/fp';\n\nimport type { UID, Modules } from '@strapi/types';\n\nimport { transformData } from './data';\nimport { transformFields } from './fields';\nimport { transformPopulate } from './populate';\n\n/**\n * Transform input of a query to map document ids to entity ids.\n */\nasync function transformParamsDocumentId(\n uid: UID.Schema,\n query: Modules.Documents.Params.All\n): Promise<Modules.Documents.Params.All> {\n // Transform relational documentIds to entity ids\n let data = query.data;\n if (query.data) {\n data = await transformData(query.data, {\n locale: query.locale,\n status: query.status,\n uid,\n });\n }\n\n // Make sure documentId is always present in the response\n let fields = query.fields;\n if (query.fields) {\n fields = transformFields(query.fields) as typeof query.fields;\n }\n\n let populate = query.populate;\n if (query.populate) {\n populate = (await transformPopulate(query.populate, { uid })) as typeof query.populate;\n }\n\n return {\n ...query,\n data,\n fields,\n populate,\n };\n}\n\nconst curriedTransformParamsDocumentId = curry(transformParamsDocumentId);\n\nexport { curriedTransformParamsDocumentId as transformParamsDocumentId };\n","import type { UID } from '@strapi/types';\n\nimport { curry, assoc } from 'lodash/fp';\n\nconst transformParamsToQuery = curry((uid: UID.Schema, params: any) => {\n const query = strapi.get('query-params').transform(uid, params);\n\n return assoc('where', { ...params?.lookup, ...query.where }, query);\n});\n\nexport { transformParamsToQuery };\n","import { pick } from 'lodash/fp';\nimport type { UID, Modules } from '@strapi/types';\n\nconst pickSelectionParams = <TUID extends UID.ContentType>(\n data: unknown\n): Modules.Documents.Params.Pick<TUID, 'fields' | 'populate' | 'status'> => {\n return pick(['fields', 'populate', 'status'], data);\n};\n\nexport { pickSelectionParams };\n","import { getOr, toNumber, isString } from 'lodash/fp';\nimport type { Schema } from '@strapi/types';\nimport bcrypt from 'bcryptjs';\n\ntype Transforms = {\n [TKind in Schema.Attribute.Kind]?: (\n value: unknown,\n context: {\n attribute: Schema.Attribute.AnyAttribute;\n attributeName: string;\n }\n ) => any;\n};\n\nconst transforms: Transforms = {\n password(value, context) {\n const { attribute } = context;\n\n if (attribute.type !== 'password') {\n throw new Error('Invalid attribute type');\n }\n\n if (!isString(value) && !(value instanceof Buffer)) {\n return value;\n }\n\n const rounds = toNumber(getOr(10, 'encryption.rounds', attribute));\n\n return bcrypt.hashSync(value.toString(), rounds);\n },\n};\n\nexport default transforms;\n","import { curry } from 'lodash/fp';\n\nimport type { UID, Modules, Schema } from '@strapi/types';\n\nimport transforms from './transforms';\n\n// aliasing the type to make it easier to read\ntype Data = Modules.Documents.Params.Data.Input<UID.Schema>;\n\nconst applyTransforms = curry((schema: Schema.Schema, data: Data) => {\n const attributeNames = Object.keys(data) as Array<keyof typeof data & string>;\n\n for (const attributeName of attributeNames) {\n const value = data[attributeName];\n\n const attribute = schema.attributes[attributeName];\n\n if (!attribute) {\n continue;\n }\n\n const transform = transforms[attribute.type];\n\n if (transform) {\n const attributeContext = { attributeName, attribute };\n\n data[attributeName] = transform(value, attributeContext);\n }\n }\n\n return data;\n});\n\nexport { applyTransforms };\n","import type { UID, Modules } from '@strapi/types';\nimport { async } from '@strapi/utils';\nimport { assoc, omit } from 'lodash/fp';\n\nimport * as components from './components';\n\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { transformParamsToQuery } from './transform/query';\nimport { pickSelectionParams } from './params';\nimport { applyTransforms } from './attributes';\nimport { transformData } from './transform/data';\n\nconst createEntriesService = (\n uid: UID.ContentType,\n entityValidator: Modules.EntityValidator.EntityValidator\n) => {\n const contentType = strapi.contentType(uid);\n\n async function createEntry(params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n // Validation\n if (!data) {\n throw new Error('Create requires data attribute');\n }\n\n const validData = await entityValidator.validateEntityCreation(contentType, data, {\n // Note: publishedAt value will always be set when DP is disabled\n isDraft: !params?.data?.publishedAt,\n locale: params?.locale,\n });\n\n // Component handling\n const componentData = await components.createComponents(uid, validData);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n const doc = await strapi.db.query(uid).create({ ...query, data: entryData });\n\n return doc;\n }\n\n async function deleteEntry(id: number) {\n const componentsToDelete = await components.getComponents(uid, { id });\n\n const deletedEntry = await strapi.db.query(uid).delete({ where: { id } });\n\n await components.deleteComponents(uid, componentsToDelete as any, { loadComponents: false });\n\n return deletedEntry;\n }\n\n async function updateEntry(entryToUpdate: any, params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n const validData = await entityValidator.validateEntityUpdate(\n contentType,\n data,\n {\n isDraft: !params?.data?.publishedAt, // Always update the draft version\n locale: params?.locale,\n },\n entryToUpdate\n );\n // Component handling\n const componentData = await components.updateComponents(uid, entryToUpdate, validData as any);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n return strapi.db\n .query(uid)\n .update({ ...query, where: { id: entryToUpdate.id }, data: entryData });\n }\n\n async function publishEntry(entry: any, params = {} as any) {\n return async.pipe(\n omit('id'),\n assoc('publishedAt', new Date()),\n (draft) => {\n const opts = { uid, locale: draft.locale, status: 'published', allowMissingId: true };\n return transformData(draft, opts);\n },\n // Create the published entry\n (draft) => createEntry({ ...params, data: draft, locale: draft.locale, status: 'published' })\n )(entry);\n }\n\n async function discardDraftEntry(entry: any, params = {} as any) {\n return async.pipe(\n omit('id'),\n assoc('publishedAt', null),\n (entry) => {\n const opts = { uid, locale: entry.locale, status: 'draft', allowMissingId: true };\n return transformData(entry, opts);\n },\n // Create the draft entry\n (data) => createEntry({ ...params, locale: data.locale, data, status: 'draft' })\n )(entry);\n }\n\n return {\n create: createEntry,\n delete: deleteEntry,\n update: updateEntry,\n publish: publishEntry,\n discardDraft: discardDraftEntry,\n };\n};\n\nexport { createEntriesService };\n","import type { UID } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\ninterface Options {\n /**\n * Fields to select when populating relations\n */\n relationalFields?: string[];\n}\n\nconst { CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } = contentTypes.constants;\n\n// We want to build a populate object based on the schema\nexport const getDeepPopulate = (uid: UID.Schema, opts: Options = {}) => {\n const model = strapi.getModel(uid);\n const attributes = Object.entries(model.attributes);\n\n return attributes.reduce((acc: any, [attributeName, attribute]) => {\n switch (attribute.type) {\n case 'relation': {\n // TODO: Support polymorphic relations\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n if (isMorphRelation) {\n break;\n }\n\n // Ignore not visible fields other than createdBy and updatedBy\n const isVisible = contentTypes.isVisibleAttribute(model, attributeName);\n const isCreatorField = [CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE].includes(attributeName);\n\n if (isVisible || isCreatorField) {\n acc[attributeName] = { select: opts.relationalFields };\n }\n\n break;\n }\n\n case 'media': {\n // We populate all media fields for completeness of webhook responses\n // see https://github.com/strapi/strapi/issues/21546\n acc[attributeName] = { select: ['*'] };\n break;\n }\n\n case 'component': {\n const populate = getDeepPopulate(attribute.component, opts);\n acc[attributeName] = { populate };\n break;\n }\n\n case 'dynamiczone': {\n // Use fragments to populate the dynamic zone components\n const populatedComponents = (attribute.components || []).reduce(\n (acc: any, componentUID: UID.Component) => {\n acc[componentUID] = { populate: getDeepPopulate(componentUID, opts) };\n return acc;\n },\n {}\n );\n\n acc[attributeName] = { on: populatedComponents };\n break;\n }\n default:\n break;\n }\n\n return acc;\n }, {});\n};\n","import type { UID, Utils, Modules, Core } from '@strapi/types';\nimport { sanitize } from '@strapi/utils';\n\nimport { getDeepPopulate } from './utils/populate';\n\nconst EVENTS = {\n ENTRY_CREATE: 'entry.create',\n ENTRY_UPDATE: 'entry.update',\n ENTRY_DELETE: 'entry.delete',\n ENTRY_PUBLISH: 'entry.publish',\n ENTRY_UNPUBLISH: 'entry.unpublish',\n ENTRY_DRAFT_DISCARD: 'entry.draft-discard',\n};\n\ntype EventName = Utils.Object.Values<typeof EVENTS>;\n\n/**\n * Manager to trigger entry related events\n *\n * It will populate the entry if it is not a delete event.\n * So the event payload will contain the full entry.\n */\nconst createEventManager = (strapi: Core.Strapi, uid: UID.Schema) => {\n const populate = getDeepPopulate(uid, {});\n const model = strapi.getModel(uid);\n\n const emitEvent = async (eventName: EventName, entry: Modules.Documents.AnyDocument) => {\n // There is no need to populate the entry if it has been deleted\n let populatedEntry = entry;\n if (![EVENTS.ENTRY_DELETE, EVENTS.ENTRY_UNPUBLISH].includes(eventName)) {\n populatedEntry = await strapi.db.query(uid).findOne({ where: { id: entry.id }, populate });\n }\n\n const sanitizedEntry = await sanitize.sanitizers.defaultSanitizeOutput(\n {\n schema: model,\n getModel: (uid) => strapi.getModel(uid as UID.Schema),\n },\n populatedEntry\n );\n\n await strapi.eventHub.emit(eventName, {\n model: model.modelName,\n uid: model.uid,\n entry: sanitizedEntry,\n });\n };\n\n return {\n /**\n * strapi.db.query might reuse the transaction used in the doc service request,\n * so this is executed after that transaction is committed.\n */\n emitEvent(eventName: EventName, entry: Modules.Documents.AnyDocument) {\n strapi.db.transaction(({ onCommit }) => {\n onCommit(() => emitEvent(eventName, entry));\n });\n },\n };\n};\n\nexport { createEventManager };\n","/* eslint-disable no-continue */\nimport { keyBy, omit } from 'lodash/fp';\n\nimport type { UID, Schema } from '@strapi/types';\n\ninterface LoadContext {\n oldVersions: { id: string; locale: string }[];\n newVersions: { id: string; locale: string }[];\n}\n\n/**\n * Loads lingering relations that need to be updated when overriding a published or draft entry.\n * This is necessary because the relations are uni-directional and the target entry is not aware of the source entry.\n * This is not the case for bi-directional relations, where the target entry is also linked to the source entry.\n */\nconst load = async (uid: UID.ContentType, { oldVersions, newVersions }: LoadContext) => {\n const updates = [] as any;\n\n // Iterate all components and content types to find relations that need to be updated\n await strapi.db.transaction(async ({ trx }) => {\n const contentTypes = Object.values(strapi.contentTypes) as Schema.ContentType[];\n const components = Object.values(strapi.components) as Schema.Component[];\n\n for (const model of [...contentTypes, ...components]) {\n const dbModel = strapi.db.metadata.get(model.uid);\n\n for (const attribute of Object.values(dbModel.attributes) as any) {\n /**\n * Only consider unidirectional relations\n */\n if (\n attribute.type !== 'relation' ||\n attribute.target !== uid ||\n attribute.inversedBy ||\n attribute.mappedBy\n ) {\n continue;\n }\n\n // TODO: joinColumn relations\n const joinTable = attribute.joinTable;\n if (!joinTable) {\n continue;\n }\n\n const { name: sourceColumnName } = joinTable.joinColumn;\n const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n /**\n * Load all relations that need to be updated\n */\n // NOTE: when the model has draft and publish, we can assume relation are only draft to draft & published to published\n const ids = oldVersions.map((entry) => entry.id);\n\n const oldVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n if (oldVersionsRelations.length > 0) {\n updates.push({ joinTable, relations: oldVersionsRelations });\n }\n\n /**\n * if publishing\n * if published version exists\n * updated published versions links\n * else\n * create link to newly published version\n *\n * if discarding\n * if published version link exists & not draft version link\n * create link to new draft version\n */\n\n if (!model.options?.draftAndPublish) {\n const ids = newVersions.map((entry) => entry.id);\n\n const newVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n if (newVersionsRelations.length > 0) {\n // when publishing a draft that doesn't have a published version yet,\n // copy the links to the draft over to the published version\n // when discarding a published version, if no drafts exists\n const discardToAdd = newVersionsRelations\n .filter((relation) => {\n const matchingOldVerion = oldVersionsRelations.find((oldRelation) => {\n return oldRelation[sourceColumnName] === relation[sourceColumnName];\n });\n\n return !matchingOldVerion;\n })\n .map(omit('id'));\n\n updates.push({ joinTable, relations: discardToAdd });\n }\n }\n }\n }\n });\n\n return updates;\n};\n\n/**\n * Updates uni directional relations to target the right entries when overriding published or draft entries.\n *\n * @param oldEntries The old entries that are being overridden\n * @param newEntries The new entries that are overriding the old ones\n * @param oldRelations The relations that were previously loaded with `load` @see load\n */\nconst sync = async (\n oldEntries: { id: string; locale: string }[],\n newEntries: { id: string; locale: string }[],\n oldRelations: { joinTable: any; relations: any[] }[]\n) => {\n /**\n * Create a map of old entry ids to new entry ids\n *\n * Will be used to update the relation target ids\n */\n const newEntryByLocale = keyBy('locale', newEntries);\n const oldEntriesMap = oldEntries.reduce(\n (acc, entry) => {\n const newEntry = newEntryByLocale[entry.locale];\n if (!newEntry) return acc;\n acc[entry.id] = newEntry.id;\n return acc;\n },\n {} as Record<string, string>\n );\n\n await strapi.db.transaction(async ({ trx }) => {\n // Iterate old relations that are deleted and insert the new ones\n for (const { joinTable, relations } of oldRelations) {\n // Update old ids with the new ones\n const column = joinTable.inverseJoinColumn.name;\n\n const newRelations = relations.map((relation) => {\n const newId = oldEntriesMap[relation[column]];\n return { ...relation, [column]: newId };\n });\n\n // Insert those relations into the join table\n await trx.batchInsert(joinTable.name, newRelations, 1000);\n }\n });\n};\n\nexport { load, sync };\n","/* eslint-disable no-continue */\nimport { keyBy } from 'lodash/fp';\nimport { async } from '@strapi/utils';\nimport type { UID, Schema } from '@strapi/types';\n\ninterface LoadContext {\n oldVersions: { id: string; locale: string }[];\n newVersions: { id: string; locale: string }[];\n}\n\n/**\n * Loads all bidirectional relations that need to be synchronized when content entries change state\n * (e.g., during publish/unpublish operations).\n *\n * In Strapi, bidirectional relations allow maintaining order from both sides of the relation.\n * When an entry is published, the following occurs:\n *\n * 1. The old published entry is deleted\n * 2. A new entry is created with all its relations\n *\n * This process affects relation ordering in the following way:\n *\n * Initial state (Entry A related to X, Y, Z):\n * ```\n * Entry A (draft) Entry A (published)\n * │ │\n * ├──(1)→ X ├──(1)→ X\n * ├──(2)→ Y ├──(2)→ Y\n * └──(3)→ Z └──(3)→ Z\n *\n * X's perspective: Y's perspective: Z's perspective:\n * └──(2)→ Entry A └──(1)→ Entry A └──(3)→ Entry A\n * ```\n *\n * After publishing Entry A (without relation order sync):\n * ```\n * Entry A (draft) Entry A (new published)\n * │ │\n * ├──(1)→ X ├──(1)→ X\n * ├──(2)→ Y ├──(2)→ Y\n * └──(3)→ Z └──(3)→ Z\n *\n * X's perspective: Y's perspective: Z's perspective:\n * └──(3)→ Entry A └──(3)→ Entry A └──(3)→ Entry A\n * (all relations appear last in order)\n * ```\n *\n * This module preserves the original ordering from both perspectives by:\n * 1. Capturing the relation order before the entry state changes\n * 2. Restoring this order after the new relations are created\n *\n * @param uid - The unique identifier of the content type being processed\n * @param context - Object containing arrays of old and new entry versions\n * @returns Array of objects containing join table metadata and relations to be updated\n */\nconst load = async (uid: UID.ContentType, { oldVersions }: LoadContext) => {\n const relationsToUpdate = [] as any;\n\n await strapi.db.transaction(async ({ trx }) => {\n const contentTypes = Object.values(strapi.contentTypes) as Schema.ContentType[];\n const components = Object.values(strapi.components) as Schema.Component[];\n\n for (const model of [...contentTypes, ...components]) {\n const dbModel = strapi.db.metadata.get(model.uid);\n\n for (const attribute of Object.values(dbModel.attributes) as any) {\n // Skip if not a bidirectional relation targeting our content type\n if (\n attribute.type !== 'relation' ||\n attribute.target !== uid ||\n !(attribute.inversedBy || attribute.mappedBy)\n ) {\n continue;\n }\n\n const joinTable = attribute.joinTable;\n if (!joinTable) {\n continue;\n }\n\n const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n // Load all relations that need their order preserved\n const oldEntryIds = oldVersions.map((entry) => entry.id);\n\n const existingRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, oldEntryIds)\n .transacting(trx);\n\n if (existingRelations.length > 0) {\n relationsToUpdate.push({ joinTable, relations: existingRelations });\n }\n }\n }\n });\n\n return relationsToUpdate;\n};\n\n/**\n * Synchronizes the order of bidirectional relations after content entries have changed state.\n *\n * When entries change state (e.g., draft → published), their IDs change and all relations are recreated.\n * While the order of relations from the entry's perspective is maintained (as they're created in order),\n * the inverse relations (from related entries' perspective) would all appear last in order since they're new.\n *\n * Example:\n * ```\n * Before publish:\n * Article(id:1) →(order:1)→ Category(id:5)\n * Category(id:5) →(order:3)→ Article(id:1)\n *\n * After publish (without sync):\n * Article(id:2) →(order:1)→ Category(id:5) [order preserved]\n * Category(id:5) →(order:99)→ Article(id:2) [order lost - appears last]\n *\n * After sync:\n * Article(id:2) →(order:1)→ Category(id:5) [order preserved]\n * Category(id:5) →(order:3)→ Article(id:2) [order restored]\n * ```\n *\n * @param oldEntries - Array of previous entry versions with their IDs and locales\n * @param newEntries - Array of new entry versions with their IDs and locales\n * @param existingRelations - Array of join table data containing the relations to be updated\n */\nconst sync = async (\n oldEntries: { id: string; locale: string }[],\n newEntries: { id: string; locale: string }[],\n existingRelations: { joinTable: any; relations: any[] }[]\n) => {\n // Group new entries by locale for easier lookup\n const newEntriesByLocale = keyBy('locale', newEntries);\n\n // Create a mapping of old entry IDs to new entry IDs based on locale\n const entryIdMapping = oldEntries.reduce(\n (acc, oldEntry) => {\n const newEntry = newEntriesByLocale[oldEntry.locale];\n if (!newEntry) return acc;\n acc[oldEntry.id] = newEntry.id;\n return acc;\n },\n {} as Record<string, string>\n );\n\n await strapi.db.transaction(async ({ trx }) => {\n for (const { joinTable, relations } of existingRelations) {\n const sourceColumn = joinTable.inverseJoinColumn.name;\n const targetColumn = joinTable.joinColumn.name;\n const orderColumn = joinTable.orderColumnName;\n\n // Update order values for each relation\n // TODO: Find a way to batch it more efficiently\n await async.map(relations, (relation: any) => {\n const {\n [sourceColumn]: oldSourceId,\n [targetColumn]: targetId,\n [orderColumn]: originalOrder,\n } = relation;\n\n // Update the order column for the new relation entry\n return trx\n .from(joinTable.name)\n .where(sourceColumn, entryIdMapping[oldSourceId])\n .where(targetColumn, targetId)\n .update({ [orderColumn]: originalOrder });\n });\n }\n });\n};\n\nexport { load, sync };\n","import { yup } from '@strapi/utils';\n\nconst textNodeValidator = yup.object().shape({\n type: yup.string().equals(['text']).required(),\n text: yup\n .string()\n .test(\n 'is-valid-text',\n 'Text must be defined with at least an empty string',\n (text: unknown) => {\n return typeof text === 'string' || text === '';\n }\n ),\n bold: yup.boolean(),\n italic: yup.boolean(),\n underline: yup.boolean(),\n strikethrough: yup.boolean(),\n code: yup.boolean(),\n});\n\nconst checkValidLink = (link: string) => {\n try {\n // eslint-disable-next-line no-new\n new URL(link.startsWith('/') ? `https://strapi.io${link}` : link);\n } catch (error) {\n return false;\n }\n return true;\n};\n\nconst linkNodeValidator = yup.object().shape({\n type: yup.string().equals(['link']).required(),\n url: yup\n .string()\n .test('invalid-url', 'Please specify a valid link.', (value) => checkValidLink(value ?? '')),\n children: yup.array().of(textNodeValidator).required(),\n});\n\n// TODO: remove any with a correct Type\nconst inlineNodeValidator: any = yup.lazy((value: { type: string }) => {\n switch (value.type) {\n case 'text':\n return textNodeValidator;\n case 'link':\n return linkNodeValidator;\n default:\n return yup.mixed().test('invalid-type', 'Inline node must be Text or Link', () => {\n return false;\n });\n }\n});\n\nconst paragraphNodeValidator = yup.object().shape({\n type: yup.string().equals(['paragraph']).required(),\n children: yup\n .array()\n .of(inlineNodeValidator)\n .min(1, 'Paragraph node children must have at least one Text or Link node')\n .required(),\n});\n\nconst headingNodeValidator = yup.object().shape({\n type: yup.string().equals(['heading']).required(),\n level: yup.number().oneOf([1, 2, 3, 4, 5, 6]).required(),\n children: yup\n .array()\n .of(inlineNodeValidator)\n .min(1, 'Heading node children must have at least one Text or Link node')\n .required(),\n});\n\nconst quoteNodeValidator = yup.object().shape({\n type: yup.string().equals(['quote']).required(),\n children: yup\n .array()\n .of(inlineNodeValidator)\n .min(1, 'Quote node children must have at least one Text or Link node')\n .required(),\n});\n\nconst codeBlockValidator = yup.object().shape({\n type: yup.string().equals(['code']).required(),\n syntax: yup.string().nullable(),\n children: yup\n .array()\n .of(textNodeValidator)\n .min(1, 'Quote node children must have at least one Text or Link node')\n .required(),\n});\n\nconst listItemNode = yup.object().shape({\n type: yup.string().equals(['list-item']).required(),\n children: yup.array().of(inlineNodeValidator).required(),\n});\n\n// Allow children to be either a listItemNode or a listNode itself\n// @ts-expect-error - listChildrenValidator needs a type\nconst listChildrenValidator = yup.lazy((value: { type: string }) => {\n switch (value.type) {\n case 'list':\n return listNodeValidator;\n case 'list-item':\n return listItemNode;\n default:\n return yup.mixed().test('invalid-type', 'Inline node must be list-item or list', () => {\n return false;\n });\n }\n});\n\n// @ts-expect-error - listNodeValidator needs a type\nconst listNodeValidator = yup.object().shape({\n type: yup.string().equals(['list']).required(),\n format: yup.string().equals(['ordered', 'unordered']).required(),\n children: yup\n .array()\n .of(listChildrenValidator)\n .min(1, 'List node children must have at least one ListItem or ListNode')\n .required(),\n});\n\nconst imageNodeValidator = yup.object().shape({\n type: yup.string().equals(['image']).required(),\n image: yup.object().shape({\n name: yup.string().required(),\n alternativeText: yup.string().nullable(),\n url: yup.string().required(),\n caption: yup.string().nullable(),\n width: yup.number().required(),\n height: yup.number().required(),\n formats: yup.object().required(),\n hash: yup.string().required(),\n ext: yup.string().required(),\n mime: yup.string().required(),\n size: yup.number().required(),\n previewUrl: yup.string().nullable(),\n provider: yup.string().required(),\n provider_metadata: yup.mixed().nullable(),\n createdAt: yup.string().required(),\n updatedAt: yup.string().required(),\n }),\n children: yup.array().of(inlineNodeValidator).required(),\n});\n\n// TODO: remove the any and replace with a correct Type\nconst blockNodeValidator: any = yup.lazy((value: { type: string }) => {\n switch (value.type) {\n case 'paragraph':\n return paragraphNodeValidator;\n case 'heading':\n return headingNodeValidator;\n case 'quote':\n return quoteNodeValidator;\n case 'list':\n return listNodeValidator;\n case 'image':\n return imageNodeValidator;\n case 'code':\n return codeBlockValidator;\n default:\n return yup.mixed().test('invalid-type', 'Block node is of invalid type', () => {\n return false;\n });\n }\n});\n\nconst blocksValidatorSchema = yup.array().of(blockNodeValidator);\n\nexport const blocksValidator = () => blocksValidatorSchema;\n","/**\n * Validators check if the entry data meets specific criteria before saving or publishing.\n * (e.g., length, range, format).\n *\n * Drafts have limited validations (mainly max constraints),\n * while published content undergoes full validation.\n *\n * The system also takes locales into account when validating data.\n * E.g, unique fields must be unique within the same locale.\n */\nimport _ from 'lodash';\nimport { yup } from '@strapi/utils';\nimport type { Schema, Struct, Modules } from '@strapi/types';\nimport { blocksValidator } from './blocks-validator';\n\nimport type { ComponentContext } from '.';\n\nexport interface ValidatorMetas<\n TAttribute extends Schema.Attribute.AnyAttribute = Schema.Attribute.AnyAttribute,\n TValue extends Schema.Attribute.Value<TAttribute> = Schema.Attribute.Value<TAttribute>,\n> {\n attr: TAttribute;\n model: Struct.Schema;\n updatedAttribute: {\n name: string;\n value: TValue;\n };\n componentContext?: ComponentContext;\n entity?: Modules.EntityValidator.Entity;\n}\n\ninterface ValidatorOptions {\n isDraft: boolean;\n locale?: string;\n}\n\n/* Validator utils */\n\n/**\n * Adds minLength validator\n */\nconst addMinLengthValidator = (\n validator: yup.StringSchema,\n {\n attr,\n }: {\n attr:\n | Schema.Attribute.String\n | Schema.Attribute.Text\n | Schema.Attribute.RichText\n | Schema.Attribute.Password\n | Schema.Attribute.Email\n | Schema.Attribute.UID;\n },\n { isDraft }: ValidatorOptions\n) => {\n return attr.minLength && _.isInteger(attr.minLength) && !isDraft\n ? validator.min(attr.minLength)\n : validator;\n};\n\n/**\n * Adds maxLength validator\n * @returns {StringSchema}\n */\nconst addMaxLengthValidator = (\n validator: yup.StringSchema,\n {\n attr,\n }: {\n attr:\n | Schema.Attribute.String\n | Schema.Attribute.Text\n | Schema.Attribute.RichText\n | Schema.Attribute.Password\n | Schema.Attribute.Email\n | Schema.Attribute.UID;\n }\n) => {\n return attr.maxLength && _.isInteger(attr.maxLength) ? validator.max(attr.maxLength) : validator;\n};\n\n/**\n * Adds min integer validator\n * @returns {NumberSchema}\n */\nconst addMinIntegerValidator = (\n validator: yup.NumberSchema,\n {\n attr,\n }: {\n attr: Schema.Attribute.Integer | Schema.Attribute.BigInteger;\n },\n { isDraft }: ValidatorOptions\n) => (_.isNumber(attr.min) && !isDraft ? validator.min(_.toInteger(attr.min)) : validator);\n\n/**\n * Adds max integer validator\n */\nconst addMaxIntegerValidator = (\n validator: yup.NumberSchema,\n {\n attr,\n }: {\n attr: Schema.Attribute.Integer | Schema.Attribute.BigInteger;\n }\n) => (_.isNumber(attr.max) ? validator.max(_.toInteger(attr.max)) : validator);\n\n/**\n * Adds min float/decimal validator\n */\nconst addMinFloatValidator = (\n validator: yup.NumberSchema,\n {\n attr,\n }: {\n attr: Schema.Attribute.Decimal | Schema.Attribute.Float;\n },\n { isDraft }: ValidatorOptions\n) => (_.isNumber(attr.min) && !isDraft ? validator.min(attr.min) : validator);\n\n/**\n * Adds max float/decimal validator\n */\nconst addMaxFloatValidator = (\n validator: yup.NumberSchema,\n {\n attr,\n }: {\n attr: Schema.Attribute.Decimal | Schema.Attribute.Float;\n }\n) => (_.isNumber(attr.max) ? validator.max(attr.max) : validator);\n\n/**\n * Adds regex validator\n */\nconst addStringRegexValidator = (\n validator: yup.StringSchema,\n {\n attr,\n }: {\n attr:\n | Schema.Attribute.String\n | Schema.Attribute.Text\n | Schema.Attribute.RichText\n | Schema.Attribute.Password\n | Schema.Attribute.Email\n | Schema.Attribute.UID;\n },\n { isDraft }: ValidatorOptions\n) => {\n return 'regex' in attr && !_.isUndefined(attr.regex) && !isDraft\n ? validator.matches(new RegExp(attr.regex), { excludeEmptyString: !attr.required })\n : validator;\n};\n\nconst addUniqueValidator = <T extends yup.AnySchema>(\n validator: T,\n {\n attr,\n model,\n updatedAttribute,\n entity,\n componentContext,\n }: ValidatorMetas<Schema.Attribute.AnyAttribute & Schema.Attribute.UniqueOption>,\n options: ValidatorOptions\n): T => {\n if (attr.type !== 'uid' && !attr.unique) {\n return validator;\n }\n\n const validateUniqueFieldWithinComponent = async (value: any): Promise<boolean> => {\n if (!componentContext) {\n return false;\n }\n\n // If we are validating a unique field within a repeatable component,\n // we first need to ensure that the repeatable in the current entity is\n // valid against itself.\n const hasRepeatableData = componentContext.repeatableData.length > 0;\n if (hasRepeatableData) {\n const { name: updatedName, value: updatedValue } = updatedAttribute;\n // Construct the full path to the unique field within the component.\n const pathToCheck = [...componentContext.pathToComponent.slice(1), updatedName].join('.');\n\n // Extract the values from the repeatable data using the constructed path\n const values = componentContext.repeatableData.map((item) => {\n return pathToCheck.split('.').reduce((acc, key) => acc[key], item as any);\n });\n\n // Check if the value is repeated in the current entity\n const isUpdatedAttributeRepeatedInThisEntity =\n values.filter((value) => value === updatedValue).length > 1;\n\n if (isUpdatedAttributeRepeatedInThisEntity) {\n return false;\n }\n }\n\n /**\n * When `componentContext` is present it means we are dealing with a unique\n * field within a component.\n *\n * The unique validation must consider the specific context of the\n * component, which will always be contained within a parent content type\n * and may also be nested within another component.\n *\n * We construct a query that takes into account the parent's model UID,\n * dimensions (such as draft and publish state/locale) and excludes the current\n * content type entity by its ID if provided.\n */\n const {\n model: parentModel,\n options: parentOptions,\n id: excludeId,\n } = componentContext.parentContent;\n\n const whereConditions: Record<string, any> = {};\n const isParentDraft = parentOptions && parentOptions.isDraft;\n\n whereConditions.publishedAt = isParentDraft ? null : { $notNull: true };\n\n if (parentOptions?.locale) {\n whereConditions.locale = parentOptions.locale;\n }\n\n if (excludeId && !Number.isNaN(excludeId)) {\n whereConditions.id = { $ne: excludeId };\n }\n\n const queryUid = parentModel.uid;\n const queryWhere = {\n ...componentContext.pathToComponent.reduceRight((acc, key) => ({ [key]: acc }), {\n [updatedAttribute.name]: value,\n }),\n\n ...whereConditions,\n };\n\n // The validation should pass if there is no other record found from the query\n return !(await strapi.db.query(queryUid).findOne({ where: queryWhere }));\n };\n\n const validateUniqueFieldWithinDynamicZoneComponent = async (\n startOfPath: string\n ): Promise<boolean> => {\n if (!componentContext) {\n return false;\n }\n\n const targetComponentUID = model.uid;\n // Ensure that the value is unique within the dynamic zone in this entity.\n const countOfValueInThisEntity = (componentContext?.fullDynamicZoneContent ?? []).reduce(\n (acc, component) => {\n if (component.__component !== targetComponentUID) {\n return acc;\n }\n\n const updatedValue = component[updatedAttribute.name];\n return updatedValue === updatedAttribute.value ? acc + 1 : acc;\n },\n 0\n );\n\n if (countOfValueInThisEntity > 1) {\n // If the value is repeated in the current entity, the validation fails.\n return false;\n }\n\n // Build a query for the parent content type to find all entities in the\n // same locale and publication state\n type QueryType = {\n select: string[];\n where: {\n published_at?: { $eq: null } | { $ne: null };\n id?: { $ne: number };\n locale?: string;\n };\n populate: {\n [key: string]: {\n on: {\n [key: string]: {\n select: string[];\n where: { [key: string]: string | number | boolean };\n };\n };\n };\n };\n };\n\n // Populate the dynamic zone for any components that share the same value\n // as the updated attribute.\n const query: QueryType = {\n select: ['id'],\n where: {},\n populate: {\n [startOfPath]: {\n on: {\n [targetComponentUID]: {\n select: ['id'],\n where: { [updatedAttribute.name]: updatedAttribute.value },\n },\n },\n },\n },\n };\n\n const { options, id } = componentContext.parentContent;\n\n if (options?.isDraft !== undefined) {\n query.where.published_at = options.isDraft ? { $eq: null } : { $ne: null };\n }\n\n if (id) {\n query.where.id = { $ne: id };\n }\n\n if (options?.locale) {\n query.where.locale = options.locale;\n }\n\n const parentModelQueryResult = await strapi.db\n .query(componentContext.parentContent.model.uid)\n .findMany(query);\n\n // Filter the results to only include results that have components in the\n // dynamic zone that match the target component type.\n const filteredResults = parentModelQueryResult\n .filter((result) => Array.isArray(result[startOfPath]) && result[startOfPath].length)\n .flatMap((result) => result[startOfPath])\n .filter((dynamicZoneComponent) => dynamicZoneComponent.__component === targetComponentUID);\n\n if (filteredResults.length >= 1) {\n return false;\n }\n\n return true;\n };\n\n return validator.test('unique', 'This attribute must be unique', async (value) => {\n /**\n * If the attribute value is `null` or an empty string we want to skip the unique validation.\n * Otherwise it'll only accept a single entry with that value in the database.\n */\n if (_.isNil(value) || value === '') {\n return true;\n }\n\n /**\n * We don't validate any unique constraint for draft entries.\n */\n if (options.isDraft) {\n return true;\n }\n\n const hasPathToComponent = componentContext && componentContext.pathToComponent.length > 0;\n if (hasPathToComponent) {\n // Detect if we are validating within a dynamiczone by checking if the first\n // path is a dynamiczone attribute in the parent content type.\n const startOfPath = componentContext.pathToComponent[0];\n const testingDZ =\n componentContext.parentContent.model.attributes[startOfPath].type === 'dynamiczone';\n\n if (testingDZ) {\n return validateUniqueFieldWithinDynamicZoneComponent(startOfPath);\n }\n\n return validateUniqueFieldWithinComponent(value);\n }\n\n /**\n * Here we are validating a scalar unique field from the content type's schema.\n * We construct a query to check if the value is unique\n * considering dimensions (e.g. locale, publication state) and excluding the current entity by its ID if available.\n */\n const scalarAttributeWhere: Record<string, any> = {\n [updatedAttribute.name]: value,\n publishedAt: { $notNull: true },\n };\n\n if (options?.locale) {\n scalarAttributeWhere.locale = options.locale;\n }\n\n if (entity?.id) {\n scalarAttributeWhere.id = { $ne: entity.id };\n }\n\n // The validation should pass if there is no other record found from the query\n return !(await strapi.db\n .query(model.uid)\n .findOne({ where: scalarAttributeWhere, select: ['id'] }));\n });\n};\n\n/* Type validators */\n\nconst stringValidator = (\n metas: ValidatorMetas<\n | Schema.Attribute.String\n | Schema.Attribute.Text\n | Schema.Attribute.RichText\n | Schema.Attribute.Password\n | Schema.Attribute.Email\n | Schema.Attribute.UID\n >,\n options: ValidatorOptions\n) => {\n let schema = yup.string().transform((val, originalVal) => originalVal);\n\n schema = addMinLengthValidator(schema, metas, options);\n schema = addMaxLengthValidator(schema, metas);\n schema = addStringRegexValidator(schema, metas, options);\n schema = addUniqueValidator(schema, metas, options);\n\n return schema;\n};\n\nexport const emailValidator = (\n metas: ValidatorMetas<Schema.Attribute.Email>,\n options: ValidatorOptions\n) => {\n const schema = stringValidator(metas, options);\n\n if (options.isDraft) {\n return schema;\n }\n\n return schema.email().min(\n 1,\n // eslint-disable-next-line no-template-curly-in-string\n '${path} cannot be empty'\n );\n};\n\nexport const uidValidator = (\n metas: ValidatorMetas<Schema.Attribute.UID>,\n options: ValidatorOptions\n) => {\n const schema = stringValidator(metas, options);\n\n if (options.isDraft) {\n return schema;\n }\n\n return schema.matches(/^[A-Za-z0-9-_.~]*$/);\n};\n\nexport const enumerationValidator = ({ attr }: { attr: Schema.Attribute.Enumeration }) => {\n return yup\n .string()\n .oneOf((Array.isArray(attr.enum) ? attr.enum : [attr.enum]).concat(null as any));\n};\n\nexport const integerValidator = (\n metas: ValidatorMetas<Schema.Attribute.Integer | Schema.Attribute.BigInteger>,\n options: ValidatorOptions\n) => {\n let schema = yup.number().integer();\n\n schema = addMinIntegerValidator(schema, metas, options);\n schema = addMaxIntegerValidator(schema, metas);\n schema = addUniqueValidator(schema, metas, options);\n\n return schema;\n};\n\nexport const floatValidator = (\n metas: ValidatorMetas<Schema.Attribute.Decimal | Schema.Attribute.Float>,\n options: ValidatorOptions\n) => {\n let schema = yup.number();\n\n schema = addMinFloatValidator(schema, metas, options);\n schema = addMaxFloatValidator(schema, metas);\n schema = addUniqueValidator(schema, metas, options);\n\n return schema;\n};\n\nexport const bigintegerValidator = (\n metas: ValidatorMetas<Schema.Attribute.BigInteger>,\n options: ValidatorOptions\n) => {\n const schema = yup.mixed();\n return addUniqueValidator(schema, metas, options);\n};\n\nexport const datesValidator = (\n metas: ValidatorMetas<\n | Schema.Attribute.Date\n | Schema.Attribute.DateTime\n | Schema.Attribute.Time\n | Schema.Attribute.Timestamp\n >,\n options: ValidatorOptions\n) => {\n const schema = yup.mixed();\n return addUniqueValidator(schema, metas, options);\n};\n\nexport const Validators = {\n string: stringValidator,\n text: stringValidator,\n richtext: stringValidator,\n password: stringValidator,\n email: emailValidator,\n enumeration: enumerationValidator,\n boolean: () => yup.boolean(),\n uid: uidValidator,\n json: () => yup.mixed(),\n integer: integerValidator,\n biginteger: bigintegerValidator,\n float: floatValidator,\n decimal: floatValidator,\n date: datesValidator,\n time: datesValidator,\n datetime: datesValidator,\n timestamp: datesValidator,\n blocks: blocksValidator,\n};\n","/**\n * Entity validator\n * Module that will validate input data for entity creation or edition\n */\n\nimport { uniqBy, castArray, isNil, isArray, mergeWith } from 'lodash';\nimport { has, prop, isObject, isEmpty } from 'lodash/fp';\nimport strapiUtils from '@strapi/utils';\nimport type { Modules, UID, Struct, Schema } from '@strapi/types';\nimport { Validators, ValidatorMetas } from './validators';\n\ntype CreateOrUpdate = 'creation' | 'update';\n\nconst { yup, validateYupSchema } = strapiUtils;\nconst { isMediaAttribute, isScalarAttribute, getWritableAttributes } = strapiUtils.contentTypes;\nconst { ValidationError } = strapiUtils.errors;\n\ntype ID = { id: string | number };\n\ntype RelationSource = string | number | ID;\n\nexport type ComponentContext = {\n parentContent: {\n // The model of the parent content type that contains the current component.\n model: Struct.Schema;\n // The numeric id of the parent entity that contains the component.\n id?: number;\n // The options passed to the entity validator. From which we can extract\n // entity dimensions such as locale and publication state.\n options?: ValidatorContext;\n };\n // The path to the component within the parent content type schema.\n pathToComponent: string[];\n // If working with a repeatable component this contains the\n // full data of the repeatable component in the current entity.\n repeatableData: Modules.EntityValidator.Entity[];\n fullDynamicZoneContent?: Schema.Attribute.Value<Schema.Attribute.DynamicZone>;\n};\n\ninterface WithComponentContext {\n componentContext?: ComponentContext;\n}\n\ninterface ValidatorMeta<TAttribute = Schema.Attribute.AnyAttribute> extends WithComponentContext {\n attr: TAttribute;\n updatedAttribute: { name: string; value: any };\n}\n\ninterface ValidatorContext {\n isDraft?: boolean;\n locale?: string | null;\n}\n\ninterface ModelValidatorMetas extends WithComponentContext {\n model: Struct.Schema;\n data: Record<string, unknown>;\n entity?: Modules.EntityValidator.Entity;\n}\n\nconst isInteger = (value: unknown): value is number => Number.isInteger(value);\n\nconst addMinMax = <\n T extends {\n min(value: number): T;\n max(value: number): T;\n },\n>(\n validator: T,\n {\n attr,\n updatedAttribute,\n }: ValidatorMeta<Schema.Attribute.AnyAttribute & Schema.Attribute.MinMaxOption<string | number>>\n): T => {\n let nextValidator: T = validator;\n\n if (\n isInteger(attr.min) &&\n (('required' in attr && attr.required) ||\n (Array.isArray(updatedAttribute.value) && updatedAttribute.value.length > 0))\n ) {\n nextValidator = nextValidator.min(attr.min);\n }\n if (isInteger(attr.max)) {\n nextValidator = nextValidator.max(attr.max);\n }\n return nextValidator;\n};\n\nconst addRequiredValidation = (createOrUpdate: CreateOrUpdate) => {\n return <T extends strapiUtils.yup.AnySchema>(\n validator: T,\n {\n attr: { required },\n }: ValidatorMeta<Partial<Schema.Attribute.AnyAttribute & Schema.Attribute.RequiredOption>>\n ): T => {\n let nextValidator = validator;\n\n if (required) {\n if (createOrUpdate === 'creation') {\n nextValidator = nextValidator.notNil();\n } else if (createOrUpdate === 'update') {\n nextValidator = nextValidator.notNull();\n }\n } else {\n nextValidator = nextValidator.nullable();\n }\n return nextValidator;\n };\n};\n\nconst addDefault = (createOrUpdate: CreateOrUpdate) => {\n return (\n validator: strapiUtils.yup.BaseSchema,\n { attr }: ValidatorMeta<Schema.Attribute.AnyAttribute & Schema.Attribute.DefaultOption<unknown>>\n ) => {\n let nextValidator = validator;\n\n if (createOrUpdate === 'creation') {\n if (\n ((attr.type === 'component' && attr.repeatable) || attr.type === 'dynamiczone') &&\n !attr.required\n ) {\n nextValidator = nextValidator.default([]);\n } else {\n nextValidator = nextValidator.default(attr.default);\n }\n } else {\n nextValidator = nextValidator.default(undefined);\n }\n\n return nextValidator;\n };\n};\n\nconst preventCast = (validator: strapiUtils.yup.AnySchema) =>\n validator.transform((val, originalVal) => originalVal);\n\nconst createComponentValidator =\n (createOrUpdate: CreateOrUpdate) =>\n (\n {\n attr,\n updatedAttribute,\n componentContext,\n }: ValidatorMeta<Schema.Attribute.Component<UID.Component, boolean>>,\n { isDraft }: ValidatorContext\n ) => {\n const model = strapi.getModel(attr.component);\n if (!model) {\n throw new Error('Validation failed: Model not found');\n }\n\n if (attr?.repeatable) {\n // FIXME: yup v1\n\n let validator = yup\n .array()\n .of(\n yup.lazy((item) =>\n createModelValidator(createOrUpdate)(\n { componentContext, model, data: item },\n { isDraft }\n ).notNull()\n ) as any\n );\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: true },\n updatedAttribute,\n });\n\n if (!isDraft) {\n validator = addMinMax(validator, { attr, updatedAttribute });\n }\n\n return validator;\n }\n\n let validator = createModelValidator(createOrUpdate)(\n {\n model,\n data: updatedAttribute.value,\n componentContext,\n },\n { isDraft }\n );\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: !isDraft && attr.required },\n updatedAttribute,\n });\n\n return validator;\n };\n\nconst createDzValidator =\n (createOrUpdate: CreateOrUpdate) =>\n ({ attr, updatedAttribute, componentContext }: ValidatorMeta, { isDraft }: ValidatorContext) => {\n let validator;\n\n validator = yup.array().of(\n yup.lazy((item) => {\n const model = strapi.getModel(prop('__component', item));\n const schema = yup\n .object()\n .shape({\n __component: yup.string().required().oneOf(Object.keys(strapi.components)),\n })\n .notNull();\n\n return model\n ? schema.concat(\n createModelValidator(createOrUpdate)(\n { model, data: item, componentContext },\n { isDraft }\n )\n )\n : schema;\n }) as any // FIXME: yup v1\n );\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: true },\n updatedAttribute,\n });\n\n if (!isDraft) {\n validator = addMinMax(validator, { attr, updatedAttribute });\n }\n\n return validator;\n };\n\nconst createRelationValidator = ({\n updatedAttribute,\n}: ValidatorMeta<Schema.Attribute.Relation>) => {\n let validator;\n\n if (Array.isArray(updatedAttribute.value)) {\n validator = yup.array().of(yup.mixed());\n } else {\n validator = yup.mixed();\n }\n\n return validator;\n};\n\nconst createScalarAttributeValidator =\n (createOrUpdate: CreateOrUpdate) => (metas: ValidatorMeta, options: ValidatorContext) => {\n let validator;\n\n if (has(metas.attr.type, Validators)) {\n validator = (Validators as any)[metas.attr.type](metas, options);\n } else {\n // No validators specified - fall back to mixed\n validator = yup.mixed();\n }\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: !options.isDraft && metas.attr.required },\n updatedAttribute: metas.updatedAttribute,\n });\n\n return validator;\n };\n\nconst createAttributeValidator =\n (createOrUpdate: CreateOrUpdate) => (metas: ValidatorMetas, options: ValidatorContext) => {\n let validator = yup.mixed();\n\n if (isMediaAttribute(metas.attr)) {\n validator = yup.mixed();\n } else if (isScalarAttribute(metas.attr)) {\n validator = createScalarAttributeValidator(createOrUpdate)(metas, options);\n } else {\n if (metas.attr.type === 'component' && metas.componentContext) {\n // Build the path to the component within the parent content type schema.\n const pathToComponent = [\n ...(metas?.componentContext?.pathToComponent ?? []),\n metas.updatedAttribute.name,\n ];\n\n // If working with a repeatable component, determine the repeatable data\n // based on the component's path.\n\n // In order to validate the repeatable within this entity we need\n // access to the full repeatable data. In case we are validating a\n // nested component within a repeatable.\n // Hence why we set this up when the path to the component is only one level deep.\n const repeatableData = (\n metas.attr.repeatable && pathToComponent.length === 1\n ? metas.updatedAttribute.value\n : metas.componentContext?.repeatableData\n ) as Modules.EntityValidator.Entity[];\n\n const newComponentContext: ComponentContext = {\n ...metas.componentContext,\n pathToComponent,\n repeatableData,\n };\n\n validator = createComponentValidator(createOrUpdate)(\n {\n componentContext: newComponentContext,\n attr: metas.attr,\n updatedAttribute: metas.updatedAttribute,\n },\n options\n );\n } else if (metas.attr.type === 'dynamiczone' && metas.componentContext) {\n const newComponentContext: ComponentContext = {\n ...metas.componentContext,\n fullDynamicZoneContent: metas.updatedAttribute.value,\n pathToComponent: [...metas.componentContext.pathToComponent, metas.updatedAttribute.name],\n };\n\n Object.assign(metas, { componentContext: newComponentContext });\n\n validator = createDzValidator(createOrUpdate)(metas, options);\n } else if (metas.attr.type === 'relation') {\n validator = createRelationValidator({\n attr: metas.attr,\n updatedAttribute: metas.updatedAttribute,\n });\n }\n\n validator = preventCast(validator);\n }\n\n validator = addDefault(createOrUpdate)(validator, metas);\n\n return validator;\n };\n\nconst createModelValidator =\n (createOrUpdate: CreateOrUpdate) =>\n ({ componentContext, model, data, entity }: ModelValidatorMetas, options: ValidatorContext) => {\n const writableAttributes = model ? getWritableAttributes(model as any) : [];\n\n const schema = writableAttributes.reduce(\n (validators, attributeName) => {\n const metas = {\n attr: model.attributes[attributeName],\n updatedAttribute: { name: attributeName, value: prop(attributeName, data) },\n model,\n entity,\n componentContext,\n };\n\n const validator = createAttributeValidator(createOrUpdate)(metas, options);\n\n validators[attributeName] = validator;\n\n return validators;\n },\n {} as Record<string, strapiUtils.yup.BaseSchema>\n );\n\n return yup.object().shape(schema);\n };\n\nconst createValidateEntity = (createOrUpdate: CreateOrUpdate) => {\n return async <\n TUID extends UID.ContentType,\n TData extends Modules.EntityService.Params.Data.Input<TUID>,\n >(\n model: Schema.ContentType<TUID>,\n data: TData | Partial<TData> | undefined,\n options?: ValidatorContext,\n entity?: Modules.EntityValidator.Entity\n ): Promise<TData> => {\n if (!isObject(data)) {\n const { displayName } = model.info;\n\n throw new ValidationError(\n `Invalid payload submitted for the ${createOrUpdate} of an entity of type ${displayName}. Expected an object, but got ${typeof data}`\n );\n }\n\n const validator = createModelValidator(createOrUpdate)(\n {\n model,\n data,\n entity,\n componentContext: {\n // Set up the initial component context.\n // Keeping track of parent content type context in which a component will be used.\n // This is necessary to validate component field constraints such as uniqueness.\n parentContent: {\n id: entity?.id,\n model,\n options,\n },\n pathToComponent: [],\n repeatableData: [],\n },\n },\n {\n isDraft: options?.isDraft ?? false,\n locale: options?.locale ?? null,\n }\n )\n .test(\n 'relations-test',\n 'check that all relations exist',\n async function relationsValidation(data) {\n try {\n await checkRelationsExist(buildRelationsStore({ uid: model.uid, data }));\n } catch (e) {\n return this.createError({\n path: this.path,\n message: (e instanceof ValidationError && e.message) || 'Invalid relations',\n });\n }\n return true;\n }\n )\n .required();\n\n return validateYupSchema(validator, {\n strict: false,\n abortEarly: false,\n })(data);\n };\n};\n\n/**\n * Builds an object containing all the media and relations being associated with an entity\n */\nconst buildRelationsStore = <TUID extends UID.Schema>({\n uid,\n data,\n}: {\n uid: TUID;\n data: Record<string, unknown> | null;\n}): Record<string, ID[]> => {\n if (!uid) {\n throw new ValidationError(`Cannot build relations store: \"uid\" is undefined`);\n }\n\n if (isEmpty(data)) {\n return {};\n }\n\n const currentModel = strapi.getModel(uid);\n\n return Object.keys(currentModel.attributes).reduce(\n (result, attributeName: string) => {\n const attribute = currentModel.attributes[attributeName];\n const value = data[attributeName];\n\n if (isNil(value)) {\n return result;\n }\n\n switch (attribute.type) {\n case 'relation':\n case 'media': {\n if (\n attribute.type === 'relation' &&\n (attribute.relation === 'morphToMany' || attribute.relation === 'morphToOne')\n ) {\n // TODO: handle polymorphic relations\n break;\n }\n\n const target =\n // eslint-disable-next-line no-nested-ternary\n attribute.type === 'media' ? 'plugin::upload.file' : attribute.target;\n // As there are multiple formats supported for associating relations\n // with an entity, the value here can be an: array, object or number.\n let source: RelationSource[];\n if (Array.isArray(value)) {\n source = value;\n } else if (isObject(value)) {\n if ('connect' in value && !isNil(value.connect)) {\n source = value.connect as RelationSource[];\n } else if ('set' in value && !isNil(value.set)) {\n source = value.set as RelationSource[];\n } else {\n source = [];\n }\n } else {\n source = castArray(value as RelationSource);\n }\n const idArray = source.map((v) => ({\n id: typeof v === 'object' ? v.id : v,\n }));\n\n // Update the relationStore to keep track of all associations being made\n // with relations and media.\n result[target] = result[target] || [];\n result[target].push(...idArray);\n break;\n }\n case 'component': {\n return castArray(value).reduce((relationsStore, componentValue) => {\n if (!attribute.component) {\n throw new ValidationError(\n `Cannot build relations store from component, component identifier is undefined`\n );\n }\n\n return mergeWith(\n relationsStore,\n buildRelationsStore({\n uid: attribute.component,\n data: componentValue as Record<string, unknown>,\n }),\n (objValue, srcValue) => {\n if (isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n }\n );\n }, result) as Record<string, ID[]>;\n }\n case 'dynamiczone': {\n return castArray(value).reduce((relationsStore, dzValue) => {\n const value = dzValue as Record<string, unknown>;\n if (!value.__component) {\n throw new ValidationError(\n `Cannot build relations store from dynamiczone, component identifier is undefined`\n );\n }\n\n return mergeWith(\n relationsStore,\n buildRelationsStore({\n uid: value.__component as UID.Component,\n data: value,\n }),\n (objValue, srcValue) => {\n if (isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n }\n );\n }, result) as Record<string, ID[]>;\n }\n default:\n break;\n }\n\n return result;\n },\n {} as Record<string, ID[]>\n );\n};\n\n/**\n * Iterate through the relations store and validates that every relation or media\n * mentioned exists\n */\nconst checkRelationsExist = async (relationsStore: Record<string, ID[]> = {}) => {\n const promises: Promise<void>[] = [];\n\n for (const [key, value] of Object.entries(relationsStore)) {\n const evaluate = async () => {\n const uniqueValues = uniqBy(value, `id`);\n const count = await strapi.db.query(key as UID.Schema).count({\n where: {\n id: {\n $in: uniqueValues.map((v) => v.id),\n },\n },\n });\n\n if (count !== uniqueValues.length) {\n throw new ValidationError(\n `${\n uniqueValues.length - count\n } relation(s) of type ${key} associated with this entity do not exist`\n );\n }\n };\n promises.push(evaluate());\n }\n\n return Promise.all(promises);\n};\n\nconst entityValidator: Modules.EntityValidator.EntityValidator = {\n validateEntityCreation: createValidateEntity('creation'),\n validateEntityUpdate: createValidateEntity('update'),\n};\n\nexport default entityValidator;\n","import { omit, assoc, merge, curry } from 'lodash/fp';\n\nimport { async, contentTypes as contentTypesUtils, validate, errors } from '@strapi/utils';\n\nimport type { UID } from '@strapi/types';\nimport { wrapInTransaction, type RepositoryFactoryMethod } from './common';\nimport * as DP from './draft-and-publish';\nimport * as i18n from './internationalization';\nimport * as components from './components';\n\nimport { createEntriesService } from './entries';\nimport { pickSelectionParams } from './params';\nimport { createDocumentId } from '../../utils/transform-content-types-to-models';\nimport { getDeepPopulate } from './utils/populate';\nimport { transformParamsToQuery } from './transform/query';\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { createEventManager } from './events';\nimport * as unidirectionalRelations from './utils/unidirectional-relations';\nimport * as bidirectionalRelations from './utils/bidirectional-relations';\nimport entityValidator from '../entity-validator';\n\nconst { validators } = validate;\n\n// we have to typecast to reconcile the differences between validator and database getModel\nconst getModel = ((schema: UID.Schema) => strapi.getModel(schema)) as (schema: string) => any;\n\nexport const createContentTypeRepository: RepositoryFactoryMethod = (\n uid,\n validator = entityValidator\n) => {\n const contentType = strapi.contentType(uid);\n const hasDraftAndPublish = contentTypesUtils.hasDraftAndPublish(contentType);\n\n // Define the validations that should be performed\n const sortValidations = ['nonAttributesOperators', 'dynamicZones', 'morphRelations'];\n const fieldValidations = ['scalarAttributes'];\n const filtersValidations = ['nonAttributesOperators', 'dynamicZones', 'morphRelations'];\n const populateValidations = {\n sort: sortValidations,\n field: fieldValidations,\n filters: filtersValidations,\n populate: ['nonAttributesOperators'],\n };\n\n const validateParams = async (params: any) => {\n const ctx = { schema: contentType, getModel };\n await validators.validateFilters(ctx, params.filters, filtersValidations);\n await validators.validateSort(ctx, params.sort, sortValidations);\n await validators.validateFields(ctx, params.fields, fieldValidations);\n await validators.validatePopulate(ctx, params.populate, populateValidations);\n\n // Strip lookup from params, it's only used internally\n if (params.lookup) {\n throw new errors.ValidationError(\"Invalid params: 'lookup'\");\n }\n\n // TODO: add validate status, locale, pagination\n\n return params;\n };\n\n const entries = createEntriesService(uid, validator);\n\n const eventManager = createEventManager(strapi, uid);\n const emitEvent = curry(eventManager.emitEvent);\n\n async function findMany(params = {} as any) {\n const query = await async.pipe(\n validateParams,\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid)\n )(params || {});\n\n return strapi.db.query(uid).findMany(query);\n }\n\n async function findFirst(params = {} as any) {\n const query = await async.pipe(\n validateParams,\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).findOne(query);\n }\n\n // TODO: do we really want to add filters on the findOne now that we have findFirst ?\n async function findOne(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n validateParams,\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId }, query)\n )(params);\n\n return strapi.db.query(uid).findOne(query);\n }\n\n async function deleteDocument(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n validateParams,\n omit('status'),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId }, query)\n )(params);\n\n if (params.status === 'draft') {\n throw new Error('Cannot delete a draft document');\n }\n\n const entriesToDelete = await strapi.db.query(uid).findMany(query);\n\n // Delete all matched entries and its components\n const deletedEntries = await async.map(entriesToDelete, (entryToDelete: any) =>\n entries.delete(entryToDelete.id)\n );\n\n entriesToDelete.forEach(emitEvent('entry.delete'));\n\n return { documentId, entries: deletedEntries };\n }\n\n async function create(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n DP.filterDataPublishedAt,\n DP.setStatusToDraft(contentType),\n DP.statusToData(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToData(contentType)\n )(params);\n\n const doc = await entries.create(queryParams);\n\n emitEvent('entry.create', doc);\n\n if (hasDraftAndPublish && params.status === 'published') {\n return publish({\n ...params,\n documentId: doc.documentId,\n }).then((doc) => doc.entries[0]);\n }\n\n return doc;\n }\n\n async function clone(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n DP.filterDataPublishedAt,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n // Get deep populate\n const entriesToClone = await strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n // DP Enabled: Clone drafts\n // DP Disabled: Clone only the existing version (published)\n publishedAt: { $null: hasDraftAndPublish },\n },\n populate: getDeepPopulate(uid, { relationalFields: ['id'] }),\n });\n\n const clonedEntries = await async.map(\n entriesToClone,\n async.pipe(\n validateParams,\n omit(['id', 'createdAt', 'updatedAt']),\n // assign new documentId\n assoc('documentId', createDocumentId()),\n // Merge new data into it\n (data) => merge(data, queryParams.data),\n (data) => entries.create({ ...queryParams, data, status: 'draft' })\n )\n );\n\n clonedEntries.forEach(emitEvent('entry.create'));\n\n return { documentId: clonedEntries.at(0)?.documentId, entries: clonedEntries };\n }\n\n async function update(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n DP.filterDataPublishedAt,\n DP.setStatusToDraft(contentType),\n DP.statusToLookup(contentType),\n DP.statusToData(contentType),\n // Default locale will be set if not provided\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n i18n.localeToData(contentType)\n )(params);\n\n const { data, ...restParams } = await transformParamsDocumentId(uid, queryParams || {});\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams || {}) as any);\n\n // Validation\n // Find if document exists\n const entryToUpdate = await strapi.db\n .query(uid)\n .findOne({ ...query, where: { ...queryParams?.lookup, ...query?.where, documentId } });\n\n let updatedDraft = null;\n if (entryToUpdate) {\n updatedDraft = await entries.update(entryToUpdate, queryParams);\n emitEvent('entry.update', updatedDraft);\n }\n\n if (!updatedDraft) {\n const documentExists = await strapi.db\n .query(contentType.uid)\n .findOne({ where: { documentId } });\n\n if (documentExists) {\n updatedDraft = await entries.create({\n ...queryParams,\n data: { ...queryParams.data, documentId },\n });\n emitEvent('entry.create', updatedDraft);\n }\n }\n\n if (hasDraftAndPublish && updatedDraft && params.status === 'published') {\n return publish({\n ...params,\n documentId,\n }).then((doc) => doc.entries[0]);\n }\n\n return updatedDraft;\n }\n\n async function count(params = {} as any) {\n const query = await async.pipe(\n validateParams,\n DP.defaultStatus(contentType),\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).count(query);\n }\n\n async function publish(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const [draftsToPublish, oldPublishedVersions] = await Promise.all([\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null, // Ignore lookup\n },\n // Populate relations, media, compos and dz\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n }),\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n select: ['id', 'locale'],\n }),\n ]);\n\n // Load any unidirectional relation targetting the old published entries\n const relationsToSync = await unidirectionalRelations.load(uid, {\n newVersions: draftsToPublish,\n oldVersions: oldPublishedVersions,\n });\n\n const bidirectionalRelationsToSync = await bidirectionalRelations.load(uid, {\n newVersions: draftsToPublish,\n oldVersions: oldPublishedVersions,\n });\n\n // Delete old published versions\n await async.map(oldPublishedVersions, (entry: any) => entries.delete(entry.id));\n\n // Transform draft entry data and create published versions\n const publishedEntries = await async.map(draftsToPublish, (draft: any) =>\n entries.publish(draft, queryParams)\n );\n\n // Sync unidirectional relations with the new published entries\n await unidirectionalRelations.sync(\n [...oldPublishedVersions, ...draftsToPublish],\n publishedEntries,\n relationsToSync\n );\n\n await bidirectionalRelations.sync(\n [...oldPublishedVersions, ...draftsToPublish],\n publishedEntries,\n bidirectionalRelationsToSync\n );\n\n publishedEntries.forEach(emitEvent('entry.publish'));\n\n return { documentId, entries: publishedEntries };\n }\n\n async function unpublish(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId, publishedAt: { $ne: null } }, query)\n )(params);\n\n // Delete all published versions\n const versionsToDelete = await strapi.db.query(uid).findMany(query);\n await async.map(versionsToDelete, (entry: any) => entries.delete(entry.id));\n\n versionsToDelete.forEach(emitEvent('entry.unpublish'));\n return { documentId, entries: versionsToDelete };\n }\n\n async function discardDraft(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const [versionsToDraft, oldDrafts] = await Promise.all([\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n // Populate relations, media, compos and dz\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n }),\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null,\n },\n select: ['id', 'locale'],\n }),\n ]);\n\n // Load any unidirectional relation targeting the old drafts\n const relationsToSync = await unidirectionalRelations.load(uid, {\n newVersions: versionsToDraft,\n oldVersions: oldDrafts,\n });\n\n const bidirectionalRelationsToSync = await bidirectionalRelations.load(uid, {\n newVersions: versionsToDraft,\n oldVersions: oldDrafts,\n });\n\n // Delete old drafts\n await async.map(oldDrafts, (entry: any) => entries.delete(entry.id));\n\n // Transform published entry data and create draft versions\n const draftEntries = await async.map(versionsToDraft, (entry: any) =>\n entries.discardDraft(entry, queryParams)\n );\n\n // Sync unidirectional relations with the new draft entries\n await unidirectionalRelations.sync(\n [...oldDrafts, ...versionsToDraft],\n draftEntries,\n relationsToSync\n );\n\n await bidirectionalRelations.sync(\n [...oldDrafts, ...versionsToDraft],\n draftEntries,\n bidirectionalRelationsToSync\n );\n\n draftEntries.forEach(emitEvent('entry.draft-discard'));\n return { documentId, entries: draftEntries };\n }\n\n async function updateComponents(entry: any, data: any) {\n return components.updateComponents(uid, entry, data);\n }\n\n function omitComponentData(data: any) {\n return components.omitComponentData(contentType, data);\n }\n\n return {\n findMany: wrapInTransaction(findMany),\n findFirst: wrapInTransaction(findFirst),\n findOne: wrapInTransaction(findOne),\n delete: wrapInTransaction(deleteDocument),\n create: wrapInTransaction(create),\n clone: wrapInTransaction(clone),\n update: wrapInTransaction(update),\n count: wrapInTransaction(count),\n publish: hasDraftAndPublish ? wrapInTransaction(publish) : (undefined as any),\n unpublish: hasDraftAndPublish ? wrapInTransaction(unpublish) : (undefined as any),\n discardDraft: hasDraftAndPublish ? wrapInTransaction(discardDraft) : (undefined as any),\n\n updateComponents,\n omitComponentData,\n };\n};\n","import type { Core, Modules, UID } from '@strapi/types';\n\nimport { createMiddlewareManager, databaseErrorsMiddleware } from './middlewares';\nimport { createContentTypeRepository } from './repository';\nimport { transformData } from './transform/data';\n\nimport entityValidator from '../entity-validator';\n\n/**\n * Repository to :\n * - Access documents via actions (findMany, findOne, create, update, delete, ...)\n * - Execute middlewares on document actions\n * - Apply default parameters to document actions\n *\n * @param strapi\n * @param validator - validator for database entries\n * @returns DocumentService\n *\n * @example Access documents\n * const article = strapi.documents('api::article.article').create(params)\n * const allArticles = strapi.documents('api::article.article').findMany(params)\n *\n */\nexport const createDocumentService = (\n strapi: Core.Strapi,\n validator: Modules.EntityValidator.EntityValidator = entityValidator\n): Modules.Documents.Service => {\n // Cache the repositories (one per content type)\n const repositories = new Map<string, Modules.Documents.ServiceInstance>();\n\n // Manager to handle document service middlewares\n const middlewares = createMiddlewareManager();\n middlewares.use(databaseErrorsMiddleware);\n\n const factory = function factory(uid: UID.ContentType) {\n if (repositories.has(uid)) {\n return repositories.get(uid)!;\n }\n\n const contentType = strapi.contentType(uid);\n const repository = createContentTypeRepository(uid, validator);\n\n const instance = middlewares.wrapObject(\n repository,\n { uid, contentType },\n {\n exclude: ['updateComponents', 'omitComponentData'],\n }\n );\n\n repositories.set(uid, instance);\n\n return instance;\n } as Modules.Documents.Service;\n\n return Object.assign(factory, {\n utils: {\n transformData,\n },\n use: middlewares.use.bind(middlewares),\n });\n};\n","/**\n * This migration is responsible for creating the draft counterpart for all the entries that were in a published state.\n *\n * In v4, entries could either be in a draft or published state, but not both at the same time.\n * In v5, we introduced the concept of document, and an entry can be in a draft or published state.\n *\n * This means the migration needs to create the draft counterpart if an entry was published.\n *\n * This migration performs the following steps:\n * 1. Creates draft entries for all published entries, without it's components, dynamic zones or relations.\n * 2. Using the document service, discard those same drafts to copy its relations.\n */\n\n/* eslint-disable no-continue */\nimport type { UID } from '@strapi/types';\nimport type { Database, Migration } from '@strapi/database';\nimport { async, contentTypes } from '@strapi/utils';\nimport { createDocumentService } from '../../services/document-service';\n\ntype DocumentVersion = { documentId: string; locale: string };\ntype Knex = Parameters<Migration['up']>[0];\n\n/**\n * Check if the model has draft and publish enabled.\n */\nconst hasDraftAndPublish = async (trx: Knex, meta: any) => {\n const hasTable = await trx.schema.hasTable(meta.tableName);\n\n if (!hasTable) {\n return false;\n }\n\n const uid = meta.uid as UID.ContentType;\n const model = strapi.getModel(uid);\n const hasDP = contentTypes.hasDraftAndPublish(model);\n if (!hasDP) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Copy all the published entries to draft entries, without it's components, dynamic zones or relations.\n * This ensures all necessary draft's exist before copying it's relations.\n */\nasync function copyPublishedEntriesToDraft({\n db,\n trx,\n uid,\n}: {\n db: Database;\n trx: Knex;\n uid: string;\n}) {\n // Extract all scalar attributes to use in the insert query\n const meta = db.metadata.get(uid);\n\n // Get scalar attributes that will be copied over the new draft\n const scalarAttributes = Object.values(meta.attributes).reduce((acc, attribute: any) => {\n if (['id'].includes(attribute.columnName)) {\n return acc;\n }\n\n if (contentTypes.isScalarAttribute(attribute)) {\n acc.push(attribute.columnName);\n }\n\n return acc;\n }, [] as string[]);\n\n /**\n * Query to copy the published entries into draft entries.\n *\n * INSERT INTO tableName (columnName1, columnName2, columnName3, ...)\n * SELECT columnName1, columnName2, columnName3, ...\n * FROM tableName\n */\n await trx\n // INSERT INTO tableName (columnName1, columnName2, columnName3, ...)\n .into(\n trx.raw(`?? (${scalarAttributes.map(() => `??`).join(', ')})`, [\n meta.tableName,\n ...scalarAttributes,\n ])\n )\n .insert((subQb: typeof trx) => {\n // SELECT columnName1, columnName2, columnName3, ...\n subQb\n .select(\n ...scalarAttributes.map((att: string) => {\n // Override 'publishedAt' and 'updatedAt' attributes\n if (att === 'published_at') {\n return trx.raw('NULL as ??', 'published_at');\n }\n\n return att;\n })\n )\n .from(meta.tableName)\n // Only select entries that were published\n .whereNotNull('published_at');\n });\n}\n\n/**\n * Load a batch of versions to discard.\n *\n * Versions with only a draft version will be ignored.\n * Only versions with a published version (which always have a draft version) will be discarded.\n */\nexport async function* getBatchToDiscard({\n db,\n trx,\n uid,\n defaultBatchSize = 1000,\n}: {\n db: Database;\n trx: Knex;\n uid: string;\n defaultBatchSize?: number;\n}) {\n const client = db.config.connection.client;\n const isSQLite =\n typeof client === 'string' && ['sqlite', 'sqlite3', 'better-sqlite3'].includes(client);\n\n // The SQLite documentation states that the maximum number of terms in a\n // compound SELECT statement is 500 by default.\n // See: https://www.sqlite.org/limits.html\n // To ensure a successful migration, we limit the batch size to 500 for SQLite.\n const batchSize = isSQLite ? Math.min(defaultBatchSize, 500) : defaultBatchSize;\n let offset = 0;\n let hasMore = true;\n\n while (hasMore) {\n // Look for the published entries to discard\n const batch: DocumentVersion[] = await db\n .queryBuilder(uid)\n .select(['id', 'documentId', 'locale'])\n .where({ publishedAt: { $ne: null } })\n .limit(batchSize)\n .offset(offset)\n .orderBy('id')\n .transacting(trx)\n .execute();\n\n if (batch.length < batchSize) {\n hasMore = false;\n }\n\n offset += batchSize;\n yield batch;\n }\n}\n\n/**\n * 2 pass migration to create the draft entries for all the published entries.\n * And then discard the drafts to copy the relations.\n */\nconst migrateUp = async (trx: Knex, db: Database) => {\n const dpModels = [];\n for (const meta of db.metadata.values()) {\n const hasDP = await hasDraftAndPublish(trx, meta);\n if (hasDP) {\n dpModels.push(meta);\n }\n }\n\n /**\n * Create plain draft entries for all the entries that were published.\n */\n for (const model of dpModels) {\n await copyPublishedEntriesToDraft({ db, trx, uid: model.uid });\n }\n\n /**\n * Discard the drafts will copy the relations from the published entries to the newly created drafts.\n *\n * Load a batch of entries (batched to prevent loading millions of rows at once ),\n * and discard them using the document service.\n *\n * NOTE: This is using a custom document service without any validations,\n * to prevent the migration from failing if users already had invalid data in V4.\n * E.g. @see https://github.com/strapi/strapi/issues/21583\n */\n const documentService = createDocumentService(strapi, {\n async validateEntityCreation(_, data) {\n return data;\n },\n async validateEntityUpdate(_, data) {\n // Data can be partially empty on partial updates\n // This migration doesn't trigger any update (or partial update),\n // so it's safe to return the data as is.\n return data as any;\n },\n });\n\n for (const model of dpModels) {\n const discardDraft = async (entry: DocumentVersion) =>\n documentService(model.uid as UID.ContentType).discardDraft({\n documentId: entry.documentId,\n locale: entry.locale,\n });\n\n for await (const batch of getBatchToDiscard({ db, trx, uid: model.uid })) {\n // NOTE: concurrency had to be disabled to prevent a race condition with self-references\n // TODO: improve performance in a safe way\n await async.map(batch, discardDraft, { concurrency: 1 });\n }\n }\n};\n\nexport const discardDocumentDrafts: Migration = {\n name: 'core::5.0.0-discard-drafts',\n async up(trx, db) {\n await migrateUp(trx, db);\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n","import { contentTypes as contentTypesUtils, async } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\n\nimport { getBatchToDiscard } from './database/5.0.0-discard-drafts';\n\nexport interface Input {\n oldContentTypes: Record<string, Schema.ContentType>;\n contentTypes: Record<string, Schema.ContentType>;\n}\n\n/**\n * Enable draft and publish for content types.\n *\n * Draft and publish disabled content types will have their entries published,\n * this migration clones those entries as drafts.\n *\n * TODO: Clone components, dynamic zones and relations\n */\nconst enableDraftAndPublish = async ({ oldContentTypes, contentTypes }: Input) => {\n if (!oldContentTypes) {\n return;\n }\n\n // run the after content types migrations\n return strapi.db.transaction(async (trx) => {\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n // if d&p was enabled set publishedAt to eq createdAt\n if (\n !contentTypesUtils.hasDraftAndPublish(oldContentType) &&\n contentTypesUtils.hasDraftAndPublish(contentType)\n ) {\n const discardDraft = async (entry: { documentId: string; locale: string }) =>\n strapi\n .documents(uid as any)\n // Discard draft by referencing the documentId and locale\n .discardDraft({ documentId: entry.documentId, locale: entry.locale });\n\n /**\n * Load a batch of entries (batched to prevent loading millions of rows at once ),\n * and discard them using the document service.\n */\n for await (const batch of getBatchToDiscard({ db: strapi.db, trx, uid })) {\n await async.map(batch, discardDraft, { concurrency: 10 });\n }\n }\n }\n });\n};\n\nconst disableDraftAndPublish = async ({ oldContentTypes, contentTypes }: Input) => {\n if (!oldContentTypes) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n // if d&p was disabled remove unpublish content before sync\n if (\n contentTypesUtils.hasDraftAndPublish(oldContentType) &&\n !contentTypesUtils.hasDraftAndPublish(contentType)\n ) {\n await strapi.db?.queryBuilder(uid).delete().where({ published_at: null }).execute();\n }\n }\n};\n\nexport { enableDraftAndPublish as enable, disableDraftAndPublish as disable };\n","import { Input } from './draft-publish';\n\n// if i18N enabled set default locale\nconst enableI18n = async ({ oldContentTypes, contentTypes }: Input) => {\n const { isLocalizedContentType } = strapi.plugin('i18n')?.service('content-types') ?? {};\n const { getDefaultLocale } = strapi.plugin('i18n')?.service('locales') ?? {};\n\n if (!oldContentTypes) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n if (!isLocalizedContentType(oldContentType) && isLocalizedContentType(contentType)) {\n const defaultLocale = await getDefaultLocale();\n\n await strapi.db.query(uid).updateMany({\n where: { locale: null },\n data: { locale: defaultLocale },\n });\n }\n }\n};\n\nconst disableI18n = async ({ oldContentTypes, contentTypes }: Input) => {\n const { isLocalizedContentType } = strapi.plugin('i18n')?.service('content-types') ?? {};\n const { getDefaultLocale } = strapi.plugin('i18n')?.service('locales') ?? {};\n\n if (!oldContentTypes) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n // if i18N is disabled remove non default locales before sync\n if (isLocalizedContentType(oldContentType) && !isLocalizedContentType(contentType)) {\n const defaultLocale = await getDefaultLocale();\n\n await Promise.all([\n // Delete all entities that are not in the default locale\n strapi.db.query(uid).deleteMany({\n where: { locale: { $ne: defaultLocale } },\n }),\n // Set locale to null for the rest\n strapi.db.query(uid).updateMany({\n where: { locale: { $eq: defaultLocale } },\n data: { locale: null },\n }),\n ]);\n }\n }\n};\n\nexport { enableI18n as enable, disableI18n as disable };\n","import * as draftPublishMigrations from './draft-publish';\nimport * as i18nMigrations from './i18n';\nimport type { Input } from './draft-publish';\n\nconst enable = async ({ oldContentTypes, contentTypes }: Input) => {\n await i18nMigrations.enable({ oldContentTypes, contentTypes });\n await draftPublishMigrations.enable({ oldContentTypes, contentTypes });\n};\n\nconst disable = async ({ oldContentTypes, contentTypes }: Input) => {\n await i18nMigrations.disable({ oldContentTypes, contentTypes });\n await draftPublishMigrations.disable({ oldContentTypes, contentTypes });\n};\n\nexport { enable, disable };\n","import { hooks } from '@strapi/utils';\n\nimport { defineProvider } from './provider';\nimport * as registries from '../registries';\nimport { loadApplicationContext } from '../loaders';\nimport * as syncMigrations from '../migrations';\nimport { discardDocumentDrafts } from '../migrations/database/5.0.0-discard-drafts';\n\nexport default defineProvider({\n init(strapi) {\n strapi\n .add('content-types', () => registries.contentTypes())\n .add('components', () => registries.components())\n .add('services', () => registries.services(strapi))\n .add('policies', () => registries.policies())\n .add('middlewares', () => registries.middlewares())\n .add('hooks', () => registries.hooks())\n .add('controllers', () => registries.controllers(strapi))\n .add('modules', () => registries.modules(strapi))\n .add('plugins', () => registries.plugins(strapi))\n .add('custom-fields', () => registries.customFields(strapi))\n .add('apis', () => registries.apis(strapi))\n .add('models', () => registries.models())\n .add('sanitizers', registries.sanitizers())\n .add('validators', registries.validators());\n },\n async register(strapi) {\n await loadApplicationContext(strapi);\n\n strapi.get('hooks').set('strapi::content-types.beforeSync', hooks.createAsyncParallelHook());\n strapi.get('hooks').set('strapi::content-types.afterSync', hooks.createAsyncParallelHook());\n\n // Content migration to enable draft and publish\n strapi.hook('strapi::content-types.beforeSync').register(syncMigrations.disable);\n strapi.hook('strapi::content-types.afterSync').register(syncMigrations.enable);\n\n // Database migrations\n strapi.db.migrations.providers.internal.register(discardDocumentDrafts);\n },\n});\n","import type { Sender } from './sender';\n\ninterface Options {\n limitedEvents?: string[];\n}\n\ntype TailParams<T extends (...args: any[]) => any> =\n Parameters<T> extends [unknown, ...infer U] ? U : never;\n\nfunction nextResetDate(): number {\n return Date.now() + 24 * 60 * 60 * 1000; // Now + 24 hours.\n}\n\nexport default (sender: Sender, { limitedEvents = [] }: Options = {}) => {\n let cacheExpiresAt = nextResetDate();\n const eventCache = new Map();\n\n return async (event: string, ...args: TailParams<Sender>) => {\n if (!limitedEvents.includes(event)) {\n return sender(event, ...args);\n }\n\n if (Date.now() > cacheExpiresAt) {\n eventCache.clear();\n cacheExpiresAt = nextResetDate();\n }\n\n if (eventCache.has(event)) {\n return false;\n }\n\n eventCache.set(event, true);\n return sender(event, ...args);\n };\n};\n","import crypto from 'crypto';\nimport type { Core } from '@strapi/types';\n\n/**\n * Generate an admin user hash\n */\nconst generateAdminUserHash = (strapi: Core.Strapi) => {\n const ctx = strapi?.requestContext?.get();\n if (!ctx?.state?.user?.email) {\n return '';\n }\n return crypto.createHash('sha256').update(ctx.state.user.email).digest('hex');\n};\n\nexport { generateAdminUserHash };\n","import os from 'os';\nimport path from 'path';\nimport _ from 'lodash';\nimport isDocker from 'is-docker';\nimport ciEnv from 'ci-info';\nimport tsUtils from '@strapi/typescript-utils';\nimport { env, machineID } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\nimport { generateAdminUserHash } from './admin-user-hash';\n\nexport interface Payload {\n eventProperties?: Record<string, unknown>;\n userProperties?: Record<string, unknown>;\n groupProperties?: Record<string, unknown>;\n}\n\nexport type Sender = (\n event: string,\n payload?: Payload,\n opts?: Record<string, unknown>\n) => Promise<boolean>;\n\nconst defaultQueryOpts = {\n timeout: 1000,\n headers: { 'Content-Type': 'application/json' },\n};\n\nconst ANALYTICS_URI = 'https://analytics.strapi.io';\n\n/**\n * Add properties from the package.json strapi key in the metadata\n */\nconst addPackageJsonStrapiMetadata = (metadata: Record<string, unknown>, strapi: Core.Strapi) => {\n const { packageJsonStrapi = {} } = strapi.config;\n\n _.defaults(metadata, packageJsonStrapi);\n};\n\n/**\n * Create a send function for event with all the necessary metadata\n */\nexport default (strapi: Core.Strapi): Sender => {\n const { uuid } = strapi.config;\n const deviceId = machineID();\n\n const serverRootPath = strapi.dirs.app.root;\n const adminRootPath = path.join(strapi.dirs.app.root, 'src', 'admin');\n\n const anonymousUserProperties = {\n environment: strapi.config.environment,\n os: os.type(),\n osPlatform: os.platform(),\n osArch: os.arch(),\n osRelease: os.release(),\n nodeVersion: process.versions.node,\n };\n\n const anonymousGroupProperties = {\n docker: process.env.DOCKER || isDocker(),\n isCI: ciEnv.isCI,\n version: strapi.config.get('info.strapi'),\n useTypescriptOnServer: tsUtils.isUsingTypeScriptSync(serverRootPath),\n useTypescriptOnAdmin: tsUtils.isUsingTypeScriptSync(adminRootPath),\n projectId: uuid,\n isHostedOnStrapiCloud: env('STRAPI_HOSTING', null) === 'strapi.cloud',\n };\n\n addPackageJsonStrapiMetadata(anonymousGroupProperties, strapi);\n\n return async (event: string, payload: Payload = {}, opts = {}) => {\n const userId = generateAdminUserHash(strapi);\n\n const reqParams = {\n method: 'POST',\n body: JSON.stringify({\n event,\n userId,\n deviceId,\n eventProperties: payload.eventProperties,\n userProperties: userId ? { ...anonymousUserProperties, ...payload.userProperties } : {},\n groupProperties: {\n ...anonymousGroupProperties,\n projectType: strapi.EE ? 'Enterprise' : 'Community',\n ...payload.groupProperties,\n },\n }),\n ..._.merge({ headers: { 'X-Strapi-Event': event } }, defaultQueryOpts, opts),\n };\n\n try {\n const res = await strapi.fetch(`${ANALYTICS_URI}/api/v2/track`, reqParams);\n return res.ok;\n } catch (err) {\n return false;\n }\n };\n};\n","import type { Core } from '@strapi/types';\nimport type { Sender } from './sender';\n\ninterface State {\n expires: number;\n counter: number;\n}\n\nfunction nextResetDate(): number {\n return Date.now() + 24 * 60 * 60 * 1000; // Now + 24 hours.\n}\n\nconst createMiddleware = ({ sendEvent }: { sendEvent: Sender }) => {\n const state: State = {\n expires: nextResetDate(),\n counter: 0,\n };\n\n const middleware: Core.MiddlewareHandler = async (ctx, next) => {\n const { url, method } = ctx.request;\n\n if (!url.includes('.') && ['GET', 'PUT', 'POST', 'DELETE'].includes(method)) {\n if (Date.now() > state.expires) {\n state.expires = nextResetDate();\n state.counter = 0;\n }\n\n // Send max. 1000 events per day.\n if (state.counter < 1000) {\n sendEvent('didReceiveRequest', { eventProperties: { url: ctx.request.url } });\n\n // Increase counter.\n state.counter += 1;\n }\n }\n\n await next();\n };\n\n return middleware;\n};\n\nexport default createMiddleware;\n","import _ from 'lodash';\n\nconst isTruthy = (val: any) => {\n return [1, true].includes(val) || ['true', '1'].includes(_.toLower(val));\n};\n\nexport default isTruthy;\n","/**\n * Strapi telemetry package.\n * You can learn more at https://docs.strapi.io/developer-docs/latest/getting-started/usage-information.html\n */\n\nimport { Job, scheduleJob } from 'node-schedule';\nimport type { Core } from '@strapi/types';\n\nimport wrapWithRateLimit from './rate-limiter';\nimport createSender from './sender';\nimport createMiddleware from './middleware';\nimport isTruthy from './is-truthy';\n\nconst LIMITED_EVENTS = [\n 'didSaveMediaWithAlternativeText',\n 'didSaveMediaWithCaption',\n 'didDisableResponsiveDimensions',\n 'didEnableResponsiveDimensions',\n 'didInitializePluginUpload',\n];\n\nconst createTelemetryInstance = (strapi: Core.Strapi) => {\n const uuid = strapi.config.get('uuid');\n const telemetryDisabled = strapi.config.get('packageJsonStrapi.telemetryDisabled');\n const isDisabled =\n !uuid || isTruthy(process.env.STRAPI_TELEMETRY_DISABLED) || isTruthy(telemetryDisabled);\n\n const crons: Job[] = [];\n const sender = createSender(strapi);\n const sendEvent = wrapWithRateLimit(sender, { limitedEvents: LIMITED_EVENTS });\n\n return {\n get isDisabled() {\n return isDisabled;\n },\n\n register() {\n if (!isDisabled) {\n const pingCron = scheduleJob('0 0 12 * * *', () => sendEvent('ping'));\n crons.push(pingCron);\n\n strapi.server.use(createMiddleware({ sendEvent }));\n }\n },\n\n bootstrap() {},\n\n destroy() {\n // Clear open handles\n crons.forEach((cron) => cron.cancel());\n },\n\n async send(event: string, payload: Record<string, unknown> = {}) {\n if (isDisabled) return true;\n return sendEvent(event, payload);\n },\n };\n};\n\nexport default createTelemetryInstance;\n","import { defineProvider } from './provider';\nimport createTelemetry from '../services/metrics';\n\nexport default defineProvider({\n init(strapi) {\n strapi.add('telemetry', () => createTelemetry(strapi));\n },\n async register(strapi) {\n strapi.get('telemetry').register();\n },\n async bootstrap(strapi) {\n strapi.get('telemetry').bootstrap();\n },\n async destroy(strapi) {\n strapi.get('telemetry').destroy();\n },\n});\n","/**\n * Webhook store is the implementation of webhook storage over the core_store\n */\n\nimport { errors } from '@strapi/utils';\nimport type { Model, Database } from '@strapi/database';\nimport type { Modules } from '@strapi/types';\n\nconst { ValidationError } = errors;\n\nconst webhookModel: Model = {\n uid: 'strapi::webhook',\n singularName: 'strapi_webhooks',\n tableName: 'strapi_webhooks',\n attributes: {\n id: {\n type: 'increments',\n },\n name: {\n type: 'string',\n },\n url: {\n type: 'text',\n },\n headers: {\n type: 'json',\n },\n events: {\n type: 'json',\n },\n enabled: {\n type: 'boolean',\n },\n },\n};\n\ntype Webhook = Modules.WebhookStore.Webhook;\ntype DBOutput = Omit<Webhook, 'id' | 'isEnabled'> & { id: string | number; enabled: boolean };\ntype DBInput = Omit<DBOutput, 'id'>;\n\nconst toDBObject = (data: Webhook): DBInput => {\n return {\n name: data.name,\n url: data.url,\n headers: data.headers,\n events: data.events,\n enabled: data.isEnabled,\n };\n};\n\nconst fromDBObject = (row: DBOutput): Webhook => {\n return {\n id: typeof row.id === 'number' ? row.id.toString() : row.id,\n name: row.name,\n url: row.url,\n headers: row.headers,\n events: row.events,\n isEnabled: row.enabled,\n };\n};\n\nconst webhookEventValidator = async (allowedEvents: Map<string, string>, events: string[]) => {\n const allowedValues = Array.from(allowedEvents.values());\n\n events.forEach((event) => {\n if (allowedValues.includes(event)) {\n return;\n }\n\n throw new ValidationError(`Webhook event ${event} is not supported`);\n });\n};\n\nexport interface WebhookStore {\n allowedEvents: Map<string, string>;\n addAllowedEvent(key: string, value: string): void;\n removeAllowedEvent(key: string): void;\n listAllowedEvents(): string[];\n getAllowedEvent(key: string): string | undefined;\n findWebhooks(): Promise<Webhook[]>;\n findWebhook(id: string): Promise<Webhook | null>;\n createWebhook(data: Webhook): Promise<Webhook>;\n updateWebhook(id: string, data: Webhook): Promise<Webhook | null>;\n deleteWebhook(id: string): Promise<Webhook | null>;\n}\n\nconst createWebhookStore = ({ db }: { db: Database }): WebhookStore => {\n return {\n allowedEvents: new Map([\n ['ENTRY_CREATE', 'entry.create'],\n ['ENTRY_UPDATE', 'entry.update'],\n ['ENTRY_DELETE', 'entry.delete'],\n ['ENTRY_PUBLISH', 'entry.publish'],\n ['ENTRY_UNPUBLISH', 'entry.unpublish'],\n ['ENTRY_DRAFT_DISCARD', 'entry.draft-discard'],\n ]),\n addAllowedEvent(key, value) {\n this.allowedEvents.set(key, value);\n },\n removeAllowedEvent(key) {\n this.allowedEvents.delete(key);\n },\n listAllowedEvents() {\n return Array.from(this.allowedEvents.keys());\n },\n getAllowedEvent(key) {\n return this.allowedEvents.get(key);\n },\n async findWebhooks() {\n const results = await db.query('strapi::webhook').findMany();\n\n return results.map(fromDBObject);\n },\n async findWebhook(id) {\n const result = await db.query('strapi::webhook').findOne({ where: { id } });\n return result ? fromDBObject(result) : null;\n },\n async createWebhook(data) {\n await webhookEventValidator(this.allowedEvents, data.events);\n\n return db\n .query('strapi::webhook')\n .create({\n data: toDBObject({ ...data, isEnabled: true }),\n })\n .then(fromDBObject);\n },\n async updateWebhook(id, data) {\n await webhookEventValidator(this.allowedEvents, data.events);\n\n const webhook = await db.query('strapi::webhook').update({\n where: { id },\n data: toDBObject(data),\n });\n\n return webhook ? fromDBObject(webhook) : null;\n },\n async deleteWebhook(id) {\n const webhook = await db.query('strapi::webhook').delete({ where: { id } });\n return webhook ? fromDBObject(webhook) : null;\n },\n };\n};\n\nexport { webhookModel, createWebhookStore };\n","/**\n * Simple worker queue in memory\n */\nimport createDebugger from 'debug';\nimport type { Logger } from '@strapi/logger';\nimport type { Utils } from '@strapi/types';\n\nconst debug = createDebugger('strapi:worker-queue');\n\ninterface ConstructorParameters {\n logger: Logger;\n concurrency?: number;\n}\n\ntype Worker<TPayload, TReturn> = (payload: TPayload) => Promise<TReturn> | TReturn;\n\nconst noop: Utils.Function.Any = () => {};\n\nexport default class WorkerQueue<TPayload, TReturn> {\n logger: Logger;\n\n worker: Worker<TPayload, TReturn>;\n\n concurrency: number;\n\n running: number;\n\n queue: TPayload[];\n\n constructor({ logger, concurrency = 5 }: ConstructorParameters) {\n debug('Initialize worker queue');\n\n this.logger = logger;\n this.worker = noop;\n\n this.concurrency = concurrency;\n this.running = 0;\n this.queue = [];\n }\n\n subscribe(worker: Worker<TPayload, TReturn>) {\n debug('Subscribe to worker queue');\n this.worker = worker;\n }\n\n enqueue(payload: TPayload) {\n debug('Enqueue event in worker queue');\n if (this.running < this.concurrency) {\n this.running += 1;\n this.execute(payload);\n } else {\n this.queue.unshift(payload);\n }\n }\n\n pop() {\n debug('Pop worker queue and execute');\n const payload = this.queue.pop();\n\n if (payload) {\n this.execute(payload);\n } else {\n this.running -= 1;\n }\n }\n\n async execute(payload: TPayload) {\n debug('Execute worker');\n try {\n await this.worker(payload);\n } catch (error) {\n this.logger.error(error);\n } finally {\n this.pop();\n }\n }\n}\n","/**\n * The event hub is Strapi's event control center.\n */\n\nimport createdDebugger from 'debug';\nimport _ from 'lodash';\nimport type { Logger } from '@strapi/logger';\n\nimport type { Modules } from '@strapi/types';\nimport WorkerQueue from './worker-queue';\nimport type { EventHub } from './event-hub';\nimport type { Fetch } from '../utils/fetch';\n\ntype Webhook = Modules.WebhookStore.Webhook;\n\ninterface Config {\n defaultHeaders: Record<string, string>;\n}\n\ninterface ConstructorParameters {\n eventHub: EventHub;\n logger: Logger;\n configuration?: Record<string, unknown>;\n fetch: Fetch;\n}\n\ninterface Event {\n event: string;\n info: Record<string, unknown>;\n}\n\ntype Listener = (info: Record<string, unknown>) => Promise<void>;\n\nconst debug = createdDebugger('strapi:webhook');\n\nconst defaultConfiguration: Config = {\n defaultHeaders: {},\n};\n\nclass WebhookRunner {\n private eventHub: EventHub;\n\n private logger: Logger;\n\n private config: Config;\n\n private webhooksMap: Map<string, Webhook[]> = new Map();\n\n private listeners: Map<string, Listener> = new Map();\n\n private queue: WorkerQueue<Event, void>;\n\n private fetch: Fetch;\n\n constructor({ eventHub, logger, configuration = {}, fetch }: ConstructorParameters) {\n debug('Initialized webhook runner');\n this.eventHub = eventHub;\n this.logger = logger;\n this.fetch = fetch;\n\n if (typeof configuration !== 'object') {\n throw new Error(\n 'Invalid configuration provided to the webhookRunner.\\nCheck your server.json -> webhooks configuration'\n );\n }\n\n this.config = _.merge(defaultConfiguration, configuration);\n\n this.queue = new WorkerQueue({ logger, concurrency: 5 });\n\n this.queue.subscribe(this.executeListener.bind(this));\n }\n\n deleteListener(event: string) {\n debug(`Deleting listener for event '${event}'`);\n\n const fn = this.listeners.get(event);\n\n if (fn !== undefined) {\n this.eventHub.off(event, fn);\n this.listeners.delete(event);\n }\n }\n\n createListener(event: string) {\n debug(`Creating listener for event '${event}'`);\n if (this.listeners.has(event)) {\n this.logger.error(\n `The webhook runner is already listening for the event '${event}'. Did you mean to call .register() ?`\n );\n }\n\n const listen = async (info: Event['info']) => {\n this.queue.enqueue({ event, info });\n };\n\n this.listeners.set(event, listen);\n this.eventHub.on(event, listen);\n }\n\n async executeListener({ event, info }: Event) {\n debug(`Executing webhook for event '${event}'`);\n const webhooks = this.webhooksMap.get(event) || [];\n const activeWebhooks = webhooks.filter((webhook) => webhook.isEnabled === true);\n\n for (const webhook of activeWebhooks) {\n await this.run(webhook, event, info).catch((error: unknown) => {\n this.logger.error('Error running webhook');\n this.logger.error(error);\n });\n }\n }\n\n run(webhook: Webhook, event: string, info = {}) {\n const { url, headers } = webhook;\n\n return this.fetch(url, {\n method: 'post',\n body: JSON.stringify({\n event,\n createdAt: new Date(),\n ...info,\n }),\n headers: {\n ...this.config.defaultHeaders,\n ...headers,\n 'X-Strapi-Event': event,\n 'Content-Type': 'application/json',\n },\n signal: AbortSignal.timeout(10000),\n })\n .then(async (res) => {\n if (res.ok) {\n return {\n statusCode: res.status,\n };\n }\n\n return {\n statusCode: res.status,\n message: await res.text(),\n };\n })\n .catch((err) => {\n return {\n statusCode: 500,\n message: err.message,\n };\n });\n }\n\n add(webhook: Webhook) {\n debug(`Registering webhook '${webhook.id}'`);\n const { events } = webhook;\n\n events.forEach((event) => {\n if (this.webhooksMap.has(event)) {\n this.webhooksMap.get(event)?.push(webhook);\n } else {\n this.webhooksMap.set(event, [webhook]);\n this.createListener(event);\n }\n });\n }\n\n update(webhook: Webhook) {\n debug(`Refreshing webhook '${webhook.id}'`);\n this.remove(webhook);\n this.add(webhook);\n }\n\n remove(webhook: Webhook) {\n debug(`Unregistering webhook '${webhook.id}'`);\n\n this.webhooksMap.forEach((webhooks, event) => {\n const filteredWebhooks = webhooks.filter((value) => value.id !== webhook.id);\n\n // Cleanup hanging listeners\n if (filteredWebhooks.length === 0) {\n this.webhooksMap.delete(event);\n this.deleteListener(event);\n } else {\n this.webhooksMap.set(event, filteredWebhooks);\n }\n });\n }\n}\n\n/**\n * Expose a factory function instead of the class\n */\nexport default function createWebhookRunner(opts: ConstructorParameters): WebhookRunner {\n return new WebhookRunner(opts);\n}\n\nexport type { WebhookRunner };\n","import { defineProvider } from './provider';\nimport { createWebhookStore, webhookModel } from '../services/webhook-store';\nimport createWebhookRunner from '../services/webhook-runner';\n\nexport default defineProvider({\n init(strapi) {\n strapi.get('models').add(webhookModel);\n\n strapi.add('webhookStore', () => createWebhookStore({ db: strapi.db }));\n strapi.add('webhookRunner', () =>\n createWebhookRunner({\n eventHub: strapi.eventHub,\n logger: strapi.log,\n configuration: strapi.config.get('server.webhooks', {}),\n fetch: strapi.fetch,\n })\n );\n },\n async bootstrap(strapi) {\n const webhooks = await strapi.get('webhookStore').findWebhooks();\n if (!webhooks) {\n return;\n }\n\n for (const webhook of webhooks) {\n strapi.get('webhookRunner').add(webhook);\n }\n },\n});\n","import admin from './admin';\nimport coreStore from './coreStore';\nimport cron from './cron';\nimport registries from './registries';\nimport telemetry from './telemetry';\nimport webhooks from './webhooks';\n\nimport type { Provider } from './provider';\n\nexport const providers: Provider[] = [registries, admin, coreStore, webhooks, telemetry, cron];\n","import _ from 'lodash';\nimport delegate from 'delegates';\nimport { errors as databaseErrors } from '@strapi/database';\nimport {\n contentTypes as contentTypesUtils,\n errors,\n relations as relationUtils,\n} from '@strapi/utils';\nimport type { Database } from '@strapi/database';\nimport type { Core, Modules, Utils } from '@strapi/types';\n\ntype Decoratable<T> = T & {\n decorate(\n decorator: (old: Modules.EntityService.EntityService) => Modules.EntityService.EntityService & {\n [key: string]: unknown;\n }\n ): void;\n};\n\nconst transformLoadParamsToQuery = (\n uid: string,\n field: string,\n params: Record<string, unknown>,\n pagination = {}\n) => {\n const query = strapi\n .get('query-params')\n .transform(uid, { populate: { [field]: params } as any }) as any;\n\n const res = {\n ...query.populate[field],\n ...pagination,\n };\n\n return res;\n};\n\nconst databaseErrorsToTransform = [\n databaseErrors.InvalidTimeError,\n databaseErrors.InvalidDateTimeError,\n databaseErrors.InvalidDateError,\n databaseErrors.InvalidRelationError,\n];\n\nconst createDefaultImplementation = ({\n strapi,\n db,\n}: {\n strapi: Core.Strapi;\n db: Database;\n}): Modules.EntityService.EntityService => ({\n async wrapParams(options: any = {}) {\n return options;\n },\n\n async wrapResult(result: any = {}) {\n return result;\n },\n\n async findMany(uid, opts) {\n const { kind } = strapi.getModel(uid);\n\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findMany' });\n\n if (kind === 'singleType') {\n const entity = strapi.documents!(uid).findFirst(wrappedParams);\n return this.wrapResult(entity, { uid, action: 'findOne' });\n }\n\n const entities = await strapi.documents!(uid).findMany(wrappedParams);\n return this.wrapResult(entities, { uid, action: 'findMany' });\n },\n\n async findPage(uid, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findPage' });\n\n const query = strapi.get('query-params').transform(uid, wrappedParams);\n\n const entities = await db.query(uid).findPage(query);\n return this.wrapResult(entities, { uid, action: 'findMany' });\n },\n\n async findOne(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findOne' });\n\n const res = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!res) {\n return this.wrapResult(null, { uid, action: 'findOne' });\n }\n\n const entity = await strapi.documents!(uid).findOne({\n ...wrappedParams,\n documentId: res.documentId,\n });\n return this.wrapResult(entity, { uid, action: 'findOne' });\n },\n\n async count(uid, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'count' });\n\n return strapi.documents!(uid).count(wrappedParams);\n },\n\n async create(uid, params) {\n const wrappedParams = await this.wrapParams<\n Modules.EntityService.Params.Pick<typeof uid, 'data' | 'fields' | 'populate'>\n >(params, { uid, action: 'create' });\n const { data } = wrappedParams;\n\n if (!data) {\n throw new Error('cannot create');\n }\n\n const shouldPublish = !contentTypesUtils.isDraft(data, strapi.getModel(uid));\n\n const entity = await strapi.documents!(uid).create({\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\n });\n\n return this.wrapResult(entity, { uid, action: 'create' });\n },\n\n async update(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams<\n Modules.EntityService.Params.Pick<typeof uid, 'data:partial' | 'fields' | 'populate'>\n >(opts, {\n uid,\n action: 'update',\n });\n const entityToUpdate = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!entityToUpdate) {\n return this.wrapResult(null, { uid, action: 'update' });\n }\n\n const shouldPublish = !contentTypesUtils.isDraft(entityToUpdate, strapi.getModel(uid));\n\n const entity = strapi.documents!(uid).update({\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\n documentId: entityToUpdate.documentId,\n });\n\n return this.wrapResult(entity, { uid, action: 'update' });\n },\n\n async delete(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'delete' });\n\n const entityToDelete = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!entityToDelete) {\n return this.wrapResult(null, { uid, action: 'delete' });\n }\n\n await strapi.documents!(uid).delete({\n ...wrappedParams,\n documentId: entityToDelete.documentId,\n });\n\n return this.wrapResult(entityToDelete, { uid, action: 'delete' });\n },\n\n async load(uid, entity, field, params) {\n if (!_.isString(field)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n }\n\n const loadedEntity = await db\n .query(uid)\n .load(entity, field, transformLoadParamsToQuery(uid, field, params ?? {}));\n\n return this.wrapResult(loadedEntity, { uid, field, action: 'load' });\n },\n\n async loadPages(uid, entity, field, params, pagination = {}) {\n if (!_.isString(field)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n }\n\n const { attributes } = strapi.getModel(uid);\n const attribute = attributes[field];\n\n if (!relationUtils.isAnyToMany(attribute)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be an anyToMany relational attribute`);\n }\n\n const query = transformLoadParamsToQuery(uid, field, params ?? {}, pagination);\n\n const loadedPage = await db.query(uid).loadPages(entity, field, query);\n\n return {\n ...loadedPage,\n results: await this.wrapResult(loadedPage.results, { uid, field, action: 'load' }),\n };\n },\n});\n\nexport default (ctx: {\n strapi: Core.Strapi;\n db: Database;\n}): Decoratable<Modules.EntityService.EntityService> => {\n const implementation = createDefaultImplementation(ctx);\n\n const service = {\n implementation,\n decorate<T extends object>(decorator: (current: typeof implementation) => T) {\n if (typeof decorator !== 'function') {\n throw new Error(`Decorator must be a function, received ${typeof decorator}`);\n }\n\n this.implementation = { ...this.implementation, ...decorator(this.implementation) };\n return this;\n },\n };\n\n const delegator = delegate(service, 'implementation');\n\n // delegate every method in implementation\n Object.keys(service.implementation).forEach((key) => delegator.method(key));\n\n // wrap methods to handle Database Errors\n service.decorate((oldService: Modules.EntityService.EntityService) => {\n const newService = _.mapValues(\n oldService,\n (method, methodName: keyof Modules.EntityService.EntityService) =>\n async function (this: Modules.EntityService.EntityService, ...args: []) {\n try {\n return await (oldService[methodName] as Utils.Function.AnyPromise).call(this, ...args);\n } catch (error) {\n if (\n databaseErrorsToTransform.some(\n (errorToTransform) => error instanceof errorToTransform\n )\n ) {\n if (error instanceof Error) {\n throw new errors.ValidationError(error.message);\n }\n\n throw error;\n }\n throw error;\n }\n }\n );\n\n return newService;\n });\n\n return service as unknown as Decoratable<Modules.EntityService.EntityService>;\n};\n","import { queryParams } from '@strapi/utils';\nimport type { Core, UID } from '@strapi/types';\n\nexport default (strapi: Core.Strapi) => {\n const { transformQueryParams } = queryParams.createTransformer({\n getModel: (uid: string) => strapi.getModel(uid as UID.Schema),\n });\n\n return {\n transform: transformQueryParams,\n };\n};\n","import assert from 'assert/strict';\nimport { has } from 'lodash/fp';\n\nimport { errors } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\nimport type { ParameterizedContext } from 'koa';\n\ninterface AuthenticationResponse {\n authenticated?: boolean;\n credentials?: unknown;\n ability?: unknown;\n error?: Error | null;\n}\n\ninterface AuthenticationInfo {\n strategy: Strategy;\n credentials: unknown;\n ability: unknown;\n}\n\ninterface Strategy {\n name: string;\n authenticate: (ctx: ParameterizedContext) => Promise<AuthenticationResponse>;\n verify?: (auth: AuthenticationInfo, config: Core.RouteConfig['auth']) => Promise<any>;\n}\n\ninterface Authentication {\n register: (type: string, strategy: Strategy) => Authentication;\n authenticate: Core.MiddlewareHandler;\n verify: (auth: AuthenticationInfo, config?: Core.RouteConfig['auth']) => Promise<any>;\n}\n\nconst INVALID_STRATEGY_MSG =\n 'Invalid auth strategy. Expecting an object with properties {name: string, authenticate: function, verify: function}';\n\nconst validStrategy = (strategy: Strategy) => {\n assert(has('authenticate', strategy), INVALID_STRATEGY_MSG);\n assert(typeof strategy.authenticate === 'function', INVALID_STRATEGY_MSG);\n\n if (has('verify', strategy)) {\n assert(typeof strategy.verify === 'function', INVALID_STRATEGY_MSG);\n }\n};\n\nconst createAuthentication = (): Authentication => {\n const strategies: Record<string, Strategy[]> = {};\n\n return {\n register(type, strategy) {\n validStrategy(strategy);\n\n if (!strategies[type]) {\n strategies[type] = [];\n }\n\n strategies[type].push(strategy);\n\n return this;\n },\n\n async authenticate(ctx, next) {\n const route: Core.Route = ctx.state.route;\n\n // use route strategy\n const config = route?.config?.auth;\n\n if (config === false) {\n return next();\n }\n\n const routeStrategies = route.info.type ? strategies[route.info.type] : [];\n const configStrategies = (config?.strategies ?? routeStrategies ?? []) as Array<\n string | Strategy\n >;\n\n const strategiesToUse: Strategy[] = configStrategies.reduce(\n (acc, strategy: string | Strategy) => {\n // Resolve by strategy name\n if (typeof strategy === 'string') {\n const routeStrategy = routeStrategies.find((rs) => rs.name === strategy);\n\n if (routeStrategy) {\n acc.push(routeStrategy);\n }\n }\n\n // Use the given strategy as is\n else if (typeof strategy === 'object') {\n validStrategy(strategy);\n\n acc.push(strategy);\n }\n\n return acc;\n },\n [] as Strategy[]\n );\n\n for (const strategy of strategiesToUse) {\n const result = await strategy.authenticate(ctx);\n\n const { authenticated = false, credentials, ability = null, error = null } = result || {};\n\n if (error !== null) {\n return ctx.unauthorized(error);\n }\n\n if (authenticated) {\n ctx.state.isAuthenticated = true;\n ctx.state.auth = {\n strategy,\n credentials,\n ability,\n };\n\n return next();\n }\n }\n\n return ctx.unauthorized('Missing or invalid credentials');\n },\n\n async verify(auth, config = {}) {\n if (config === false) {\n return;\n }\n\n if (!auth) {\n throw new errors.UnauthorizedError();\n }\n\n if (typeof auth.strategy.verify === 'function') {\n return auth.strategy.verify(auth, config);\n }\n },\n };\n};\n\nexport default createAuthentication;\n","import type { Core, Modules } from '@strapi/types';\n\nconst createCustomFields = (strapi: Core.Strapi): Modules.CustomFields.CustomFields => {\n return {\n register(customField) {\n strapi.get('custom-fields').add(customField);\n },\n };\n};\n\nexport default createCustomFields;\n","import { providerFactory } from '@strapi/utils';\n\nexport default (options = {}) => {\n const provider = providerFactory(options);\n\n return {\n ...provider,\n\n async register(action: string, payload: Record<string, unknown>) {\n if (strapi.isLoaded) {\n throw new Error(`You can't register new actions outside the bootstrap function.`);\n }\n\n return provider.register(action, payload);\n },\n };\n};\n","import { providerFactory } from '@strapi/utils';\n\nexport interface Condition {\n name: string;\n [key: string]: unknown;\n}\n\nexport default (options = {}) => {\n const provider = providerFactory(options);\n\n return {\n ...provider,\n\n async register(condition: Condition) {\n if (strapi.isLoaded) {\n throw new Error(`You can't register new conditions outside the bootstrap function.`);\n }\n\n return provider.register(condition.name, condition);\n },\n };\n};\n","import permissions from '@strapi/permissions';\n\ntype Options = Parameters<typeof permissions.engine.new>[0];\n\nexport default ({ providers }: Options) => permissions.engine.new({ providers });\n","import _ from 'lodash';\nimport type { Core } from '@strapi/types';\nimport { createActionProvider, createConditionProvider } from './providers';\nimport createPermissionEngine from './engine';\n\nconst typeSymbol = Symbol.for('__type__');\n\ninterface ValidatePermissionHandler {\n (params: { permission: { action: string } }): boolean;\n}\n\n/**\n * Creates a handler that checks if the permission's action exists in the action registry\n */\nconst createValidatePermissionHandler =\n (actionProvider: ReturnType<typeof createActionProvider>): ValidatePermissionHandler =>\n ({ permission }) => {\n const action = actionProvider.get(permission.action);\n\n // If the action isn't registered into the action provider, then ignore the permission and warn the user\n if (!action) {\n strapi.log.debug(\n `Unknown action \"${permission.action}\" supplied when registering a new permission`\n );\n\n return false;\n }\n\n return true;\n };\n\n/**\n * Create instances of providers and permission engine for the core content-API service.\n * Also, expose utilities to get information about available actions and such.\n */\nexport default (strapi: Core.Strapi) => {\n // NOTE: Here we define both an action and condition provider,\n // but at the moment, we're only using the action one.\n const providers = {\n action: createActionProvider(),\n condition: createConditionProvider(),\n };\n\n /**\n * Get a tree representation of the available Content API actions\n * based on the methods of the Content API controllers.\n *\n * @note Only actions bound to a content-API route are returned.\n */\n const getActionsMap = () => {\n const actionMap: Record<\n string,\n {\n controllers: Record<string, string[]>;\n }\n > = {};\n\n /**\n * Check if a controller's action is bound to the\n * content-api by looking at a potential __type__ symbol\n */\n const isContentApi = (action: Core.ControllerHandler & { [s: symbol]: any }) => {\n if (!_.has(action, typeSymbol)) {\n return false;\n }\n\n return action[typeSymbol].includes('content-api');\n };\n\n /**\n * Register actions from a specific API source into the result tree\n */\n const registerAPIsActions = (\n apis: Record<string, Core.Plugin | Core.Module>,\n source: 'api' | 'plugin'\n ) => {\n _.forEach(apis, (api, apiName) => {\n const controllers = _.reduce(\n api.controllers,\n (acc, controller, controllerName) => {\n const contentApiActions = _.pickBy(controller, isContentApi);\n\n if (_.isEmpty(contentApiActions)) {\n return acc;\n }\n\n acc[controllerName] = Object.keys(contentApiActions);\n\n return acc;\n },\n {} as Record<string, string[]>\n );\n\n if (!_.isEmpty(controllers)) {\n actionMap[`${source}::${apiName}`] = { controllers };\n }\n });\n };\n\n registerAPIsActions(strapi.apis, 'api');\n registerAPIsActions(strapi.plugins, 'plugin');\n\n return actionMap;\n };\n\n /**\n * Register all the content-API controllers actions into the action provider.\n * This method make use of the {@link getActionsMap} to generate the list of actions to register.\n */\n const registerActions = async () => {\n const actionsMap = getActionsMap();\n\n // For each API\n for (const [api, value] of Object.entries(actionsMap)) {\n const { controllers } = value;\n\n // Register controllers methods as actions\n for (const [controller, actions] of Object.entries(controllers)) {\n // Register each action individually\n await Promise.all(\n actions.map((action) => {\n const actionUID = `${api}.${controller}.${action}`;\n\n return providers.action.register(actionUID, {\n api,\n controller,\n action,\n uid: actionUID,\n });\n })\n );\n }\n }\n };\n\n // Create an instance of a content-API permission engine\n // and binds a custom validation handler to it\n const engine = createPermissionEngine({ providers });\n\n engine.on(\n 'before-format::validate.permission',\n createValidatePermissionHandler(providers.action)\n );\n\n return {\n engine,\n providers,\n registerActions,\n getActionsMap,\n };\n};\n","import _ from 'lodash';\nimport { sanitize, validate } from '@strapi/utils';\n\nimport type { Core, UID } from '@strapi/types';\n\nimport instantiatePermissionsUtilities from './permissions';\n\nconst transformRoutePrefixFor = (pluginName: string) => (route: Core.Route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nconst filterContentAPI = (route: Core.Route) => route.info.type === 'content-api';\n\n/**\n * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)\n */\nconst createContentAPI = (strapi: Core.Strapi) => {\n const getRoutesMap = async () => {\n const routesMap: Record<string, Core.Route[]> = {};\n\n _.forEach(strapi.apis, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if ('routes' in route) {\n return route.routes;\n }\n\n return route;\n }).filter(filterContentAPI);\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n if (Array.isArray(plugin.routes)) {\n return plugin.routes.map(transformPrefix).filter(filterContentAPI);\n }\n\n const routes = _.flatMap(plugin.routes, (route) => route.routes.map(transformPrefix)).filter(\n filterContentAPI\n );\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n return routesMap;\n };\n\n const sanitizer = sanitize.createAPISanitizers({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of sanitizers after the creation of the container\n get sanitizers() {\n return {\n input: strapi.sanitizers.get('content-api.input'),\n output: strapi.sanitizers.get('content-api.output'),\n };\n },\n });\n\n const validator = validate.createAPIValidators({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of validators after the creation of the container\n get validators() {\n return {\n input: strapi.validators.get('content-api.input'),\n };\n },\n });\n\n return {\n permissions: instantiatePermissionsUtilities(strapi),\n getRoutesMap,\n sanitize: sanitizer,\n validate: validator,\n };\n};\n\nexport default createContentAPI;\n","import { map, values, sumBy, pipe, flatMap } from 'lodash/fp';\nimport type { Schema, UID } from '@strapi/types';\n\nconst getNumberOfDynamicZones = () => {\n const contentTypes: Record<UID.ContentType, Schema.ContentType> = strapi.contentTypes;\n\n return pipe(\n map('attributes'),\n flatMap(values),\n sumBy((item) => {\n if (item.type === 'dynamiczone') {\n return 1;\n }\n return 0;\n })\n )(contentTypes);\n};\n\nexport default getNumberOfDynamicZones;\n","/**\n * The features service is responsible for managing features within strapi,\n * including interacting with the feature configuration file to know\n * which are enabled and disabled.\n */\n\nimport type { Core, Modules } from '@strapi/types';\n\ntype FeatureName = keyof Modules.Features.FeaturesConfig['future'];\n\nconst createFeaturesService = (strapi: Core.Strapi): Modules.Features.FeaturesService => {\n const service: Modules.Features.FeaturesService = {\n get config() {\n return strapi.config.get<Modules.Features.FeaturesService['config']>('features');\n },\n future: {\n isEnabled(futureFlagName: string): boolean {\n return service.config?.future?.[futureFlagName as FeatureName] === true;\n },\n },\n };\n\n return service;\n};\n\nexport { createFeaturesService };\nexport type FeaturesService = Modules.Features.FeaturesService;\n","import type { Core } from '@strapi/types';\nimport { get, set, has, isString, isNumber, isArray, type PropertyPath } from 'lodash';\n\ntype State = {\n config: Config;\n};\n\ntype Config = Record<string, unknown>;\n\nexport const createConfigProvider = (\n initialConfig: Record<string, unknown> = {},\n strapi?: Core.Strapi\n): Core.ConfigProvider => {\n const state: State = {\n config: { ...initialConfig }, // not deep clone because it would break some config\n };\n\n // Accessing model configs with dot (.) was deprecated between v4->v5, but to avoid a major breaking change\n // we will still support certain namespaces, currently only 'plugin.'\n const transformPathString = (path: string) => {\n if (path.startsWith('plugin.')) {\n const newPath = path.replace('plugin.', 'plugin::');\n\n // strapi logger may not be loaded yet, so fall back to console\n (strapi?.log?.warn ?? console.warn)(\n `Using dot notation for model config namespaces is deprecated, for example \"plugin::myplugin\" should be used instead of \"plugin.myplugin\". Modifying requested path ${path} to ${newPath}`\n );\n return newPath;\n }\n\n return path;\n };\n\n const transformDeprecatedPaths = (path: PropertyPath): PropertyPath => {\n if (isString(path)) {\n return transformPathString(path);\n }\n if (isArray(path)) {\n // if the path is not joinable, we won't apply our deprecation support\n if (path.some((part) => !(isString(part) || isNumber(part)))) {\n return path;\n }\n\n return transformPathString(path.join('.'));\n }\n\n return path;\n };\n\n return {\n ...state.config, // TODO: to remove\n get(path: PropertyPath, defaultValue?: unknown) {\n return get(state.config, transformDeprecatedPaths(path), defaultValue);\n },\n set(path: PropertyPath, val: unknown) {\n set(state.config, transformDeprecatedPaths(path), val);\n return this;\n },\n has(path: PropertyPath) {\n return has(state.config, transformDeprecatedPaths(path));\n },\n };\n};\n","import * as globalAgent from 'global-agent';\nimport path from 'path';\nimport _ from 'lodash';\nimport { isFunction } from 'lodash/fp';\nimport { Logger, createLogger } from '@strapi/logger';\nimport { Database } from '@strapi/database';\n\nimport type { Core, Modules, UID, Schema } from '@strapi/types';\n\nimport tsUtils from '@strapi/typescript-utils';\nimport { loadConfiguration } from './configuration';\n\nimport * as factories from './factories';\n\nimport * as utils from './utils';\nimport { Container } from './container';\nimport createStrapiFs from './services/fs';\nimport createEventHub from './services/event-hub';\nimport { createServer } from './services/server';\nimport { createReloader } from './services/reloader';\n\nimport { providers } from './providers';\nimport createEntityService from './services/entity-service';\nimport createQueryParamService from './services/query-params';\n\nimport entityValidator from './services/entity-validator';\nimport requestContext from './services/request-context';\nimport createAuth from './services/auth';\nimport createCustomFields from './services/custom-fields';\nimport createContentAPI from './services/content-api';\nimport getNumberOfDynamicZones from './services/utils/dynamic-zones';\nimport { FeaturesService, createFeaturesService } from './services/features';\nimport { createDocumentService } from './services/document-service';\n\nimport { coreStoreModel } from './services/core-store';\nimport { createConfigProvider } from './services/config';\n\nclass Strapi extends Container implements Core.Strapi {\n app: any;\n\n isLoaded: boolean = false;\n\n internal_config: Record<string, unknown> = {};\n\n constructor(opts: StrapiOptions) {\n super();\n\n this.internal_config = loadConfiguration(opts);\n\n this.registerInternalServices();\n\n for (const provider of providers) {\n provider.init?.(this);\n }\n }\n\n get admin(): Core.Module {\n return this.get('admin');\n }\n\n get EE(): boolean {\n return utils.ee.isEE;\n }\n\n get ee(): Core.Strapi['ee'] {\n return utils.ee;\n }\n\n get dirs(): Core.StrapiDirectories {\n return this.config.get('dirs');\n }\n\n get reload(): Core.Reloader {\n return this.get('reload');\n }\n\n get db(): Database {\n return this.get('db');\n }\n\n get requestContext(): Modules.RequestContext.RequestContext {\n return this.get('requestContext');\n }\n\n get customFields(): Modules.CustomFields.CustomFields {\n return this.get('customFields');\n }\n\n get entityValidator(): Modules.EntityValidator.EntityValidator {\n return this.get('entityValidator');\n }\n\n /**\n * @deprecated `strapi.entityService` will be removed in the next major version\n */\n get entityService(): Modules.EntityService.EntityService {\n return this.get('entityService');\n }\n\n get documents(): Modules.Documents.Service {\n return this.get('documents');\n }\n\n get features(): FeaturesService {\n return this.get('features');\n }\n\n get fetch(): Modules.Fetch.Fetch {\n return this.get('fetch');\n }\n\n get cron(): Modules.Cron.CronService {\n return this.get('cron');\n }\n\n get log(): Logger {\n return this.get('logger');\n }\n\n get startupLogger(): Core.StartupLogger {\n return this.get('startupLogger');\n }\n\n get eventHub(): Modules.EventHub.EventHub {\n return this.get('eventHub');\n }\n\n get fs(): Core.StrapiFS {\n return this.get('fs');\n }\n\n get server(): Modules.Server.Server {\n return this.get('server');\n }\n\n get telemetry(): Modules.Metrics.TelemetryService {\n return this.get('telemetry');\n }\n\n get store(): Modules.CoreStore.CoreStore {\n return this.get('coreStore');\n }\n\n get config() {\n return this.get('config');\n }\n\n get services() {\n return this.get('services').getAll();\n }\n\n service(uid: UID.Service) {\n return this.get('services').get(uid);\n }\n\n get controllers() {\n return this.get('controllers').getAll();\n }\n\n controller(uid: UID.Controller) {\n return this.get('controllers').get(uid);\n }\n\n get contentTypes(): Schema.ContentTypes {\n return this.get('content-types').getAll();\n }\n\n contentType(name: UID.ContentType) {\n return this.get('content-types').get(name);\n }\n\n get components(): Schema.Components {\n return this.get('components').getAll();\n }\n\n get policies() {\n return this.get('policies').getAll();\n }\n\n policy(name: string) {\n return this.get('policies').get(name);\n }\n\n get middlewares() {\n return this.get('middlewares').getAll();\n }\n\n middleware(name: string) {\n return this.get('middlewares').get(name);\n }\n\n get plugins(): Record<string, Core.Plugin> {\n return this.get('plugins').getAll();\n }\n\n plugin(name: string): Core.Plugin {\n return this.get('plugins').get(name);\n }\n\n get hooks() {\n return this.get('hooks').getAll();\n }\n\n hook(name: string) {\n return this.get('hooks').get(name);\n }\n\n get apis() {\n return this.get('apis').getAll();\n }\n\n api(name: string): Core.Module {\n return this.get('apis').get(name);\n }\n\n get auth() {\n return this.get('auth');\n }\n\n get contentAPI() {\n return this.get('content-api');\n }\n\n get sanitizers() {\n return this.get('sanitizers');\n }\n\n get validators() {\n return this.get('validators');\n }\n\n async start() {\n try {\n if (!this.isLoaded) {\n await this.load();\n }\n\n await this.listen();\n\n return this;\n } catch (error) {\n return this.stopWithError(error);\n }\n }\n\n // TODO: split into more providers\n registerInternalServices() {\n const config = createConfigProvider(this.internal_config, this);\n\n const logger = createLogger({\n level: 'http', // Strapi defaults to level 'http'\n ...config.get('logger'), // DEPRECATED\n ...config.get('server.logger.config'),\n });\n\n // Instantiate the Strapi container\n this.add('config', () => config)\n .add('query-params', createQueryParamService(this))\n .add('content-api', createContentAPI(this))\n .add('auth', createAuth())\n .add('server', () => createServer(this))\n .add('fs', () => createStrapiFs(this))\n .add('eventHub', () => createEventHub())\n .add('startupLogger', () => utils.createStartupLogger(this))\n .add('logger', () => logger)\n .add('fetch', () => utils.createStrapiFetch(this))\n .add('features', () => createFeaturesService(this))\n .add('requestContext', requestContext)\n .add('customFields', createCustomFields(this))\n .add('entityValidator', entityValidator)\n .add('entityService', () => createEntityService({ strapi: this, db: this.db }))\n .add('documents', () => createDocumentService(this))\n .add('db', () => {\n const tsDir = tsUtils.resolveOutDirSync(this.dirs.app.root);\n const tsMigrationsEnabled =\n this.config.get('database.settings.useTypescriptMigrations') === true && tsDir;\n const projectDir = tsMigrationsEnabled ? tsDir : this.dirs.app.root;\n return new Database(\n _.merge(this.config.get('database'), {\n logger,\n settings: {\n migrations: {\n dir: path.join(projectDir, 'database/migrations'),\n },\n },\n })\n );\n })\n .add('reload', () => createReloader(this));\n }\n\n sendStartupTelemetry() {\n // Emit started event.\n // do not await to avoid slower startup\n // This event is anonymous\n this.telemetry\n .send('didStartServer', {\n groupProperties: {\n database: this.config.get('database.connection.client'),\n plugins: Object.keys(this.plugins),\n numberOfAllContentTypes: _.size(this.contentTypes), // TODO: V5: This event should be renamed numberOfContentTypes in V5 as the name is already taken to describe the number of content types using i18n.\n numberOfComponents: _.size(this.components),\n numberOfDynamicZones: getNumberOfDynamicZones(),\n numberOfCustomControllers: Object.values<Core.Controller>(this.controllers).filter(\n // TODO: Fix this at the content API loader level to prevent future types issues\n (controller) => controller !== undefined && factories.isCustomController(controller)\n ).length,\n environment: this.config.environment,\n // TODO: to add back\n // providers: this.config.installedProviders,\n },\n })\n .catch(this.log.error);\n }\n\n async openAdmin({ isInitialized }: { isInitialized: boolean }) {\n const shouldOpenAdmin =\n this.config.get('environment') === 'development' &&\n this.config.get('admin.autoOpen', true) !== false;\n\n if (shouldOpenAdmin && !isInitialized) {\n try {\n await utils.openBrowser(this.config);\n this.telemetry.send('didOpenTab');\n } catch (e) {\n this.telemetry.send('didNotOpenTab');\n }\n }\n }\n\n async postListen() {\n const isInitialized = await utils.isInitialized(this);\n\n this.startupLogger.logStartupMessage({ isInitialized });\n\n this.log.info('Strapi started successfully');\n this.sendStartupTelemetry();\n this.openAdmin({ isInitialized });\n }\n\n /**\n * Add behaviors to the server\n */\n async listen() {\n return new Promise<void>((resolve, reject) => {\n const onListen = async () => {\n try {\n await this.postListen();\n\n resolve();\n } catch (error) {\n reject(error);\n }\n };\n\n const listenSocket = this.config.get('server.socket');\n\n if (listenSocket) {\n this.server.listen(listenSocket, onListen);\n } else {\n const { host, port } = this.config.get('server');\n\n this.server.listen(port, host, onListen);\n }\n });\n }\n\n stopWithError(err: unknown, customMessage?: string): never {\n this.log.debug(`⛔️ Server wasn't able to start properly.`);\n if (customMessage) {\n this.log.error(customMessage);\n }\n\n this.log.error(err);\n return this.stop();\n }\n\n stop(exitCode = 1): never {\n this.destroy();\n\n if (this.config.get('autoReload')) {\n process.send?.('stop');\n }\n\n // Kill process\n process.exit(exitCode);\n }\n\n async load() {\n await this.register();\n await this.bootstrap();\n\n this.isLoaded = true;\n\n return this;\n }\n\n async register() {\n // @ts-expect-error: init is internal\n this.ee.init(this.dirs.app.root, this.log);\n\n for (const provider of providers) {\n await provider.register?.(this);\n }\n\n await this.runPluginsLifecycles(utils.LIFECYCLES.REGISTER);\n await this.runUserLifecycles(utils.LIFECYCLES.REGISTER);\n\n // NOTE: Swap type customField for underlying data type\n utils.convertCustomFieldType(this);\n\n return this;\n }\n\n async bootstrap() {\n this.configureGlobalProxy();\n\n const models = [\n ...utils.transformContentTypesToModels(\n [...Object.values(this.contentTypes), ...Object.values(this.components)],\n this.db.metadata.identifiers\n ),\n ...this.get('models').get(),\n ];\n\n await this.db.init({ models });\n\n let oldContentTypes;\n if (await this.db.getSchemaConnection().hasTable(coreStoreModel.tableName)) {\n oldContentTypes = await this.store.get({\n type: 'strapi',\n name: 'content_types',\n key: 'schema',\n });\n }\n\n await this.hook('strapi::content-types.beforeSync').call({\n oldContentTypes,\n contentTypes: this.contentTypes,\n });\n\n const status = await this.db.schema.sync();\n\n // if schemas have changed, run repairs\n if (status === 'CHANGED') {\n await this.db.repair.removeOrphanMorphType({ pivot: 'component_type' });\n }\n\n if (this.EE) {\n await utils.ee.checkLicense({ strapi: this });\n }\n\n await this.hook('strapi::content-types.afterSync').call({\n oldContentTypes,\n contentTypes: this.contentTypes,\n });\n\n await this.store.set({\n type: 'strapi',\n name: 'content_types',\n key: 'schema',\n value: this.contentTypes,\n });\n\n await this.server.initMiddlewares();\n this.server.initRouting();\n\n await this.contentAPI.permissions.registerActions();\n\n await this.runPluginsLifecycles(utils.LIFECYCLES.BOOTSTRAP);\n\n for (const provider of providers) {\n await provider.bootstrap?.(this);\n }\n\n await this.runUserLifecycles(utils.LIFECYCLES.BOOTSTRAP);\n\n return this;\n }\n\n configureGlobalProxy() {\n const globalProxy = this.config.get('server.proxy.global');\n const httpProxy = this.config.get('server.proxy.http') || globalProxy;\n const httpsProxy = this.config.get('server.proxy.https') || globalProxy;\n\n if (!httpProxy && !httpsProxy) {\n return;\n }\n\n globalAgent.bootstrap();\n\n if (httpProxy) {\n this.log.info(`Using HTTP proxy: ${httpProxy}`);\n (global as any).GLOBAL_AGENT.HTTP_PROXY = httpProxy;\n }\n\n if (httpsProxy) {\n this.log.info(`Using HTTPS proxy: ${httpsProxy}`);\n (global as any).GLOBAL_AGENT.HTTPS_PROXY = httpsProxy;\n }\n }\n\n async destroy() {\n this.log.info('Shutting down Strapi');\n await this.runPluginsLifecycles(utils.LIFECYCLES.DESTROY);\n\n for (const provider of providers) {\n await provider.destroy?.(this);\n }\n\n await this.runUserLifecycles(utils.LIFECYCLES.DESTROY);\n\n await this.server.destroy();\n\n this.eventHub.destroy();\n\n await this.db?.destroy();\n\n process.removeAllListeners();\n\n // @ts-expect-error: Allow clean delete of global.strapi to allow re-instanciation\n delete global.strapi;\n\n this.log.info('Strapi has been shut down');\n }\n\n async runPluginsLifecycles(lifecycleName: 'register' | 'bootstrap' | 'destroy') {\n // plugins\n await this.get('modules')[lifecycleName]();\n }\n\n async runUserLifecycles(lifecycleName: 'register' | 'bootstrap' | 'destroy') {\n // user\n const userLifecycleFunction = this.app && this.app[lifecycleName];\n if (isFunction(userLifecycleFunction)) {\n await userLifecycleFunction({ strapi: this });\n }\n }\n\n getModel(uid: UID.ContentType): Schema.ContentType;\n getModel(uid: UID.Component): Schema.Component;\n getModel<TUID extends UID.Schema>(uid: TUID): Schema.ContentType | Schema.Component | undefined {\n if (uid in this.contentTypes) {\n return this.contentTypes[uid as UID.ContentType];\n }\n\n if (uid in this.components) {\n return this.components[uid as UID.Component];\n }\n }\n\n /**\n * @deprecated Use `strapi.db.query` instead\n */\n query(uid: UID.Schema) {\n return this.db.query(uid);\n }\n}\n\nexport interface StrapiOptions {\n appDir: string;\n distDir: string;\n autoReload?: boolean;\n serveAdminPanel?: boolean;\n}\n\nexport default Strapi;\n","import tsUtils from '@strapi/typescript-utils';\n\ninterface Options {\n appDir?: string;\n ignoreDiagnostics?: boolean;\n}\n\nexport default async function compile(options?: Options) {\n const { appDir = process.cwd(), ignoreDiagnostics = false } = options ?? {};\n const isTSProject = await tsUtils.isUsingTypeScript(appDir);\n const outDir = await tsUtils.resolveOutDir(appDir);\n\n if (isTSProject) {\n await tsUtils.compile(appDir, {\n configOptions: { options: { incremental: true }, ignoreDiagnostics },\n });\n }\n\n const distDir = isTSProject ? outDir : appDir;\n\n return { appDir, distDir };\n}\n","import * as qs from 'qs';\nimport type { Core } from '@strapi/types';\n\nimport Strapi, { type StrapiOptions } from './Strapi';\nimport { destroyOnSignal, resolveWorkingDirectories, createUpdateNotifier } from './utils';\n\nexport { default as compileStrapi } from './compile';\nexport * as factories from './factories';\n\nexport const createStrapi = (options: Partial<StrapiOptions> = {}): Core.Strapi => {\n const strapi = new Strapi({\n ...options,\n ...resolveWorkingDirectories(options),\n });\n\n destroyOnSignal(strapi);\n createUpdateNotifier(strapi);\n\n // TODO: deprecate and remove in next major\n global.strapi = strapi;\n\n return strapi;\n};\n\n// Augment Koa query type based on Strapi query middleware\n\ndeclare module 'koa' {\n type ParsedQuery = ReturnType<typeof qs.parse>;\n\n export interface BaseRequest {\n _querycache?: ParsedQuery;\n\n get query(): ParsedQuery;\n set query(obj: any);\n }\n\n export interface BaseContext {\n _querycache?: ParsedQuery;\n\n get query(): ParsedQuery;\n set query(obj: any);\n }\n}\n"],"names":["getConfigUrls","config","forAdminBuild","serverConfig","server","adminConfig","admin","serverUrl","_","get","trim","Error","startsWith","URL","url","toString","e","adminUrl","adminPath","origin","replace","strings","getCommonPath","pathname","getAbsoluteUrl","adminOrServer","hostname","environment","includes","host","port","getAbsoluteAdminUrl","getAbsoluteServerUrl","loadJsFile","file","jsModule","importDefault","env","error","message","loadJSONFile","JSON","parse","fs","readFileSync","loadConfigFile","ext","path","extname","VALID_EXTENSIONS","MISTAKEN_FILENAMES","middleware","plugin","RESTRICTED_FILENAMES","Object","keys","STRAPI_CONFIG_FILENAMES","logWarning","console","warn","dir","existsSync","allFiles","readdirSync","withFileTypes","seenFilenames","Set","configFiles","reduce","acc","baseName","basename","name","baseNameLower","toLowerCase","extension","extensionLower","isFile","join","log","restrictedPrefix","find","restrictedName","has","add","push","key","resolve","getDirs","appDir","distDir","dist","root","src","api","components","extensions","policies","middlewares","app","static","public","dotenv","process","ENV_PATH","NODE_ENV","defaultConfig","HOST","os","Number","PORT","proxy","cron","enabled","autoOpen","dirs","transfer","remote","logger","updates","startup","rest","prefix","loadConfiguration","opts","autoReload","serveAdminPanel","pkgJSON","require","configDir","cwd","rootConfig","launchedAt","Date","now","uuid","packageJsonStrapi","omit","info","strapi","strapiVersion","baseConfig","loadConfigDir","envDir","envConfig","merge","serverAbsoluteUrl","adminAbsoluteUrl","sameOrigin","set","isEntry","property","isPlainObject","Array","isArray","isDZEntries","transformResponse","resource","meta","useJsonAPIFormat","isNil","data","transformEntry","contentType","transformComponent","component","map","datum","res","id","attributes","entry","type","singleEntry","documentId","properties","attributeValues","attribute","target","subProperty","__component","createSingleTypeController","uid","ctx","validateQuery","sanitizedQuery","sanitizeQuery","entity","service","sanitizedEntity","sanitizeOutput","update","query","body","request","isObject","errors","ValidationError","validateInput","sanitizedInputData","sanitizeInput","createOrUpdate","delete","status","createCollectionTypeController","results","pagination","sanitizedResults","findOne","params","create","storage","AsyncLocalStorage","requestCtx","run","store","cb","getStore","isSingleType","contentTypeUtils","getAuthFromKoaContext","prop","createController","proto","headers","auth","contentAPI","sanitize","output","input","validate","ctrl","assign","CoreService","getFetchParams","SingleTypeService","getDocumentId","db","then","document","documents","findFirst","deletedEntries","entries","length","constructor","createSingleTypeService","getLimitConfigDefaults","defaultLimit","toNumber","maxLimit","isOffsetPagination","isPagedPagination","shouldCount","withCount","Boolean","getPaginationInfo","start","limit","withDefaultPagination","defaults","offset","page","pageSize","transformPaginationResponse","paginationInfo","total","isPaged","transform","transformPagedPaginationInfo","transformOffsetPaginationInfo","paginationResponse","CollectionTypeService","fetchParams","findMany","count","undefined","createCollectionTypeService","createService","createRoutes","getSingleTypeRoutes","getCollectionTypeRoutes","method","singularName","handler","pluralName","symbols","CustomController","Symbol","createCoreController","cfg","baseController","userCtrl","methodName","setPrototypeOf","isCustom","defineProperty","writable","configurable","enumerable","createCoreService","baseService","userService","createCoreRouter","only","except","routes","defaultRoutes","forEach","routeName","defaultRoute","selectedRoutes","pipe","pick","values","isCustomController","controller","openBrowser","open","isInitialized","isEmpty","anyAdministrator","select","err","stopWithError","DEFAULT_FEATURES","bronze","silver","gold","options","retentionDays","publicKey","__dirname","LicenseCheckError","shouldFallback","readLicense","directory","code","verifyLicense","license","signature","base64Content","Buffer","from","split","stringifiedContent","verify","crypto","createVerify","end","verified","licenseInfo","features","freeze","throwError","fetchLicense","projectId","response","fetch","stringify","deviceId","machineID","catch","json","INTEGER_REGEX","STEP_REGEX","COMPONENTS","zeroBasedIndices","functionName","shift","index","date","currentValue","test","parseInt","step","frequency","Math","floor","list","value","sort","a","b","shiftCronExpression","rule","filter","negate","secondsIncluded","ONE_MINUTE","ee","disable","shouldEmitEvent","eventHub","emit","enable","initialized","init","licenseDir","STRAPI_DISABLE_EE","STRAPI_LICENSE","onlineUpdate","commit","rollback","transaction","storedInfo","queryBuilder","where","first","transacting","forUpdate","execute","result","shouldContactRegistry","lastCheckAt","fallback","licenseKey","newLicenseInfo","licenseInfoChanged","isEqual","seats","wasEnabled","validateInfo","insert","expireAt","expirationTime","getTime","checkLicense","shouldStayOffline","STRAPI_DISABLE_LICENSE_PING","task","feature","featureName","isEE","isEnabled","CHECK_INTERVAL","NOTIF_INTERVAL","boxenOptions","padding","margin","align","borderColor","borderStyle","getUpdateMessage","newVersion","currentVersion","currentVersionLog","chalk","dim","newVersionLog","green","releaseLink","bold","createUpdateNotifier","Configstore","pkg","configPath","checkUpdate","checkInterval","lastUpdateCheck","packageJson","version","display","notifInterval","latestVersion","lastNotification","stdout","isTTY","semver","valid","lte","boxen","bool","createStrapiFetch","strapiFetch","fetchOptions","dispatcher","debug","ProxyAgent","convertCustomFieldType","allContentTypeSchemaAttributes","contentTypes","schema","allComponentSchemaAttributes","allSchemasAttributes","schemaAttrbutes","customField","createStartupLogger","logStats","columns","min","stderr","black","bgWhite","padEnd","infoTable","CLITable","colWidths","chars","mid","dbInfo","getInfo","blue","pid","EE","client","displayName","logFirstStartupMessage","grey","addressTable","logDefaultStartupMessage","logStartupMessage","getComponentJoinTableName","collectionName","identifiers","getNameFromTokens","compressible","shortName","getDzJoinTableName","getComponentJoinColumnEntityName","getComponentJoinColumnInverseName","getComponentTypeColumn","getComponentFkIndexName","transformAttribute","relation","multiple","morphBy","joinTableName","joinColumnEntityName","joinColumnInverseName","compTypeColumn","repeatable","joinTable","joinColumn","referencedColumn","ID_COLUMN","inverseJoinColumn","on","field","orderColumnName","ORDER_COLUMN","orderBy","order","pivotColumns","FIELD_COLUMN","morphColumn","idColumn","typeColumn","typeField","transformAttributes","attrs","attrName","hasComponentsOrDz","some","createDocumentId","createId","createCompoLinkModel","entityId","componentId","fkIndex","tableName","column","unsigned","defaultTo","indexes","getIndexName","getUniqueIndexName","foreignKeys","referencedColumns","referencedTable","getTableName","onDelete","transformContentTypesToModels","models","assert","modelName","documentIdAttribute","modelType","default","reservedAttributeNames","attributeName","snakeCasedAttributeName","snakeCase","compoLinkModel","model","lifecycles","n","getColumnName","destroyOnSignal","signalReceived","terminateStrapi","destroy","exit","signal","LIFECYCLES","REGISTER","BOOTSTRAP","DESTROY","resolveWorkingDirectories","Container","resolver","registerMap","args","serviceMap","Map","normalizePath","optPath","filePath","normalizedPath","normalize","strapiFS","writeAppFile","writePath","fse","ensureFile","writeFile","writePluginFile","newPath","concat","removeAppFile","removePath","remove","appendFile","appendFileSync","createEventHub","listeners","defaultSubscriber","eventName","listener","subscribers","subscriber","subscribe","unsubscribe","subscriberIndex","indexOf","splice","off","once","removeAllListeners","removeAllSubscribers","removeListener","clear","addListener","createHTTPServer","koaApp","connections","handleRequest","req","callback","http","createServer","connection","listening","Promise","reject","close","instantiateMiddleware","middlewareFactory","resolveRouteMiddlewares","route","middlewaresConfig","resolveMiddlewares","dummyMiddleware","next","item","resolvedMiddlewareFactory","resolveCustomMiddleware","modulePath","createPolicicesMiddleware","policiesConfig","resolvedPolicies","policiesMiddleware","context","policyUtils","createPolicyContext","PolicyError","getMethod","toLower","getPath","createRouteInfoMiddleware","routeInfo","state","getAuthConfig","createAuthorizeMiddleware","authService","UnauthorizedError","unauthorized","ForbiddenError","forbidden","createAuthenticateMiddleware","authenticate","returnBodyMiddleware","authorize","router","action","getAction","routeHandler","compose","castArray","getController","pluginName","apiName","extractHandlerParts","controllerName","slice","lastIndexOf","actionName","for","bind","policyOrMiddlewareSchema","yup","lazy","string","required","mixed","isFunction","object","notRequired","routeSchema","oneOf","array","boolean","scope","of","validateRouteConfig","routeConfig","validateSync","strict","abortEarly","stripUnknown","createRouteManager","composeEndpoint","createEndpointComposer","createRoute","routeWithInfo","addRoutes","subRouter","Router","hasPrefix","use","allowedMethods","createAPI","routeManager","listRoutes","stack","fn","mount","createAdminAPI","createContentAPI","createRouteScopeGenerator","namespace","endsWith","defaultsDeep","registerAdminRoutes","registerAPIRoutes","registerPluginRoutes","generateRouteScope","plugins","apis","requiredMiddlewares","middlewareConfigSchema","noUnknown","registerApplicationMiddlewares","middlewareConfig","validateMiddlewareConfig","checkRequiredMiddlewares","missingMiddlewares","findIndex","mdl","mapErrorsAndStatus","classError","NotFoundError","PayloadTooLargeError","RateLimitError","NotImplementedError","formatApplicationError","errorAndStatus","pair","details","formatHttpError","formatInternalError","createError","httpError","expose","addCustomMethods","delegator","delegate","statuses","codes","camelCasedName","camelCase","responseCode","send","created","deleted","createKoaApp","Koa","healthCheck","httpServer","all","mounted","initRouting","registerAllRoutes","initMiddlewares","listen","createReloader","shouldReload","isWatching","reload","isReloading","defineProvider","provider","GRAPHQL_ENUM_REGEX","lifecyclesShape","mapValues","keyBy","nullable","contentTypeSchemaValidator","shape","isKebabCase","attr","regressedValues","enum","toRegressedEnumValue","every","duplicates","uniq","actions","onlyContainsFunctions","validateContentTypeDefinition","CREATED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","contentTypesUtils","constants","createContentType","definition","cloneDeep","kind","__schema__","pickSchema","addTimestamps","addDraftAndPublish","addCreatorFields","visible","isPrivate","useJoinTable","private","getGlobalId","globalId","upperFirst","loadAdmin","services","controllers","formatContentTypes","userAdminConfig","register","bootstrap","coreStoreModel","tag","createCoreStore","mergeParams","defaultParams","createCronService","jobsSpecs","running","tasks","taskExpression","taskValue","taskName","fnWithStrapi","job","Job","schedule","matchingJobsSpecs","jobSpecName","cancel","stop","jobs","cronTasks","hasNamespace","addNamespace","removeNamespace","validateKeySameToSingularName","ctName","contentTypesRegistry","getAll","pickBy","newContentTypes","rawCtName","extend","ctUID","extendFn","currentContentType","componentsRegistry","newComponents","servicesRegistry","instantiatedServices","filteredServices","newServices","serviceName","currentService","newService","PLUGIN_PREFIX","API_PREFIX","parsePolicy","policy","policyName","policiesRegistry","namespaceInfo","resolveHandler","policyConfig","validator","fromEntries","newPolicies","middlewaresRegistry","rawMiddlewares","middlewareName","currentMiddleware","newMiddleware","hooksRegistry","hooks","hook","hookName","currentHook","newHook","controllersRegistry","instances","filteredControllers","newControllers","controllerUID","currentController","newController","strapiServerSchema","validateModule","removeNamespacedKeys","mapKeys","defaultModule","createModule","rawModule","called","load","defaultValue","pathArray","flatten","modulesRegistry","modules","mod","pluginsRegistry","pluginConfig","pluginModule","ALLOWED_TYPES","customFieldsRegistry","customFields","registeredCustomField","customFieldList","cf","inputSize","isValidObjectKey","isResizable","apisRegistry","apiConfig","sanitizersRegistry","sanitizers","sanitizer","validatorsRegistry","validators","registry","srcSchema","validateSrcIndex","srcIndex","pathToSrcIndex","statSync","isDirectory","DEFAULT_CONTENT_TYPE","normalizeName","kebabCase","fd","isDotFile","loadAPIs","apisFDs","readdir","apiFD","loadAPI","validateContentTypesUnicity","allApisSchemas","flatMap","names","loadIndex","loadDir","loadContentTypes","pathExists","loadFile","fds","contentTypeName","loadedContentType","readJSON","compression","compress","maxAge","credentials","methods","keepHeadersOnError","cors","koaCors","originList","parsedOrigin","exposeHeaders","allowMethods","allowHeaders","errorMiddleware","_explicitStatus","notFound","ApplicationError","HttpError","favicon","faviconDefaultPath","appRoot","faviconPath","koaFavicon","ip","koaIp","delta","ceil","poweredBy","multipart","patchKoa","ensureFileMimeType","mime","lookup","getFiles","files","bodyMiddleware","bodyConfig","gqlEndpoint","gqlConfig","koaBody","payloadTooLarge","filepath","strictNullHandling","arrayLimit","depth","addQsParser","settings","qstr","querystring","_querycache","cache","qs","obj","responseTime","responses","handlers","crossOriginEmbedderPolicy","crossOriginOpenerPolicy","crossOriginResourcePolicy","originAgentCluster","contentSecurityPolicy","useDefaults","directives","upgradeInsecureRequests","xssFilter","hsts","includeSubDomains","frameguard","mergeConfig","existingConfig","newConfig","mergeWith","security","helmetConfig","specialPaths","playground","str","helmet","autoCommit","overwrite","httpOnly","signed","rolling","renew","secure","sameSite","session","userConfig","koaSession","publicStatic","redirect","koaStatic","maxage","defer","loadMiddlewares","localMiddlewares","loadLocalMiddlewares","internalMiddlewares","paths","fullPath","filePathToPropPath","entryPath","useFileNameAsKey","fp","removeRelativePrefix","RegExp","win32","sep","posix","trimCharsStart","identity","loadFiles","pattern","requireFn","shouldUseFileNameAsKey","globArgs","glob","absolutePath","readJson","propPath","setWith","loadComponents","category","__filename__","loadPolicies","getUserPluginsConfig","globalUserConfigPath","currentEnvUserConfigPath","INTERNAL_PLUGINS","isStrapiPlugin","validatePluginName","toDetailedDeclaration","declaration","detailedDeclaration","pathToPlugin","isModule","dirname","getEnabledPlugins","internalPlugins","dep","packagePath","packageModulePath","packageInfo","installedPlugins","dependencies","packageName","declaredPlugins","userPluginsConfig","declaredPluginsResolves","installedPluginsNotAlreadyUsed","p","enabledPlugins","defaultPlugin","applyUserExtension","extensionsDir","extendedSchemas","strapiServers","extendedSchema","strapiServer","applyUserConfig","userPluginConfig","getOr","loadPlugins","enabledPlugin","serverEntrypointPath","resolvedExport","exports","pluginServer","loadApplicationContext","loadSrcIndex","loadSanitizers","loadValidators","databaseErrorsToTransform","databaseErrors","InvalidTimeError","InvalidDateTimeError","InvalidDateError","InvalidRelationError","databaseErrorsMiddleware","errorToTransform","createMiddlewareManager","manager","wrapObject","source","ctxDefaults","facade","exclude","hasOwnProperty","call","newMethod","wrapInTransaction","setStatusToDraft","hasDraftAndPublish","assoc","defaultToDraft","defaultStatus","filterDataPublishedAt","publishedAt","statusToLookup","$notNull","$null","statusToData","setStatusToDraftCurry","curry","defaultToDraftCurry","defaultStatusCurry","filterDataPublishedAtCurry","statusToLookupCurry","statusToDataCurry","getDefaultLocale","defaultLocale","isLocalizedContentType","locale","localeToLookup","String","multiLocaleToLookup","localeToData","isValidLocale","defaultLocaleCurry","localeToLookupCurry","multiLocaleToLookupCurry","localeToDataCurry","omitComponentData","componentAttributes","isComponentAttribute","createComponents","getModel","componentBody","attributeNames","componentUID","componentValue","async","createComponent","__pivot","component_type","dynamiczoneValues","createDynamicZoneComponents","getComponents","getComponentAttributes","updateComponents","entityToUpdate","deleteOldComponents","updateOrCreateComponent","deleteOldDZComponents","pickStringifiedId","previousValue","idsToKeep","allIds","idsToDelete","difference","idToDelete","deleteComponent","v","el","deleteComponents","entityToDelete","subValue","componentData","assignComponentData","updateComponent","componentToUpdate","componentToDelete","encodeKey","createIdMap","loadedIds","toLoadIds","keyFields","loadIdValues","idsByUidAndLocale","ids","documentIds","findParams","$in","$ne","getRelationTargetLocale","targetLocale","sourceLocale","isTargetLocalized","targetUid","isSourceLocalized","sourceUid","getRelationTargetStatus","targetContentType","sourceContentType","targetHasDP","sourceHasDP","sourceStatus","isNumeric","parsed","isNaN","toArray","mapRelation","rel","isRecursive","wrapInSet","r","flat","disconnect","connect","traverseEntityRelations","visitor","traverseEntity","utils","mapRelationCurried","traverseEntityRelationsCurried","isPolymorphic","relations","addRelationDocId","idMap","targetStatus","extractDataIds","isPolymorphicRelation","addDocId","__type","position","positionTargetUid","before","after","getRelationIds","tStatus","entryId","allowMissingId","transformDataIdsVisitor","getIds","newRelation","beforeRelation","beforeIds","at","afterRelation","setDefaultLocaleToRelations","transformData","transformedData","extractDataRelationIds","transformRelationDataIds","transformFields","fields","transformPopulate","traverse","traverseQueryPopulate","transformParamsDocumentId","populate","curriedTransformParamsDocumentId","transformParamsToQuery","pickSelectionParams","transforms","password","isString","rounds","bcrypt","hashSync","applyTransforms","attributeContext","createEntriesService","entityValidator","createEntry","restParams","validData","validateEntityCreation","isDraft","dataWithComponents","entryData","doc","deleteEntry","componentsToDelete","deletedEntry","updateEntry","entryToUpdate","validateEntityUpdate","publishEntry","draft","discardDraftEntry","publish","discardDraft","getDeepPopulate","isMorphRelation","isVisible","isVisibleAttribute","isCreatorField","relationalFields","populatedComponents","EVENTS","ENTRY_CREATE","ENTRY_UPDATE","ENTRY_DELETE","ENTRY_PUBLISH","ENTRY_UNPUBLISH","ENTRY_DRAFT_DISCARD","createEventManager","emitEvent","populatedEntry","sanitizedEntry","defaultSanitizeOutput","onCommit","oldVersions","newVersions","trx","dbModel","metadata","inversedBy","mappedBy","sourceColumnName","targetColumnName","oldVersionsRelations","getConnection","whereIn","draftAndPublish","newVersionsRelations","discardToAdd","matchingOldVerion","oldRelation","sync","oldEntries","newEntries","oldRelations","newEntryByLocale","oldEntriesMap","newEntry","newRelations","newId","batchInsert","relationsToUpdate","oldEntryIds","existingRelations","newEntriesByLocale","entryIdMapping","oldEntry","sourceColumn","targetColumn","orderColumn","oldSourceId","targetId","originalOrder","textNodeValidator","equals","text","italic","underline","strikethrough","checkValidLink","link","linkNodeValidator","children","inlineNodeValidator","paragraphNodeValidator","headingNodeValidator","level","number","quoteNodeValidator","codeBlockValidator","syntax","listItemNode","listChildrenValidator","listNodeValidator","format","imageNodeValidator","image","alternativeText","caption","width","height","formats","hash","size","previewUrl","provider_metadata","createdAt","updatedAt","blockNodeValidator","blocksValidatorSchema","blocksValidator","addMinLengthValidator","minLength","isInteger","addMaxLengthValidator","maxLength","max","addMinIntegerValidator","isNumber","toInteger","addMaxIntegerValidator","addMinFloatValidator","addMaxFloatValidator","addStringRegexValidator","isUndefined","regex","matches","excludeEmptyString","addUniqueValidator","updatedAttribute","componentContext","unique","validateUniqueFieldWithinComponent","hasRepeatableData","repeatableData","updatedName","updatedValue","pathToCheck","pathToComponent","isUpdatedAttributeRepeatedInThisEntity","parentModel","parentOptions","excludeId","parentContent","whereConditions","isParentDraft","queryUid","queryWhere","reduceRight","validateUniqueFieldWithinDynamicZoneComponent","startOfPath","targetComponentUID","countOfValueInThisEntity","fullDynamicZoneContent","published_at","$eq","parentModelQueryResult","filteredResults","dynamicZoneComponent","hasPathToComponent","testingDZ","scalarAttributeWhere","stringValidator","metas","val","originalVal","emailValidator","email","uidValidator","enumerationValidator","integerValidator","integer","floatValidator","bigintegerValidator","datesValidator","Validators","richtext","enumeration","biginteger","float","decimal","time","datetime","timestamp","blocks","validateYupSchema","strapiUtils","isMediaAttribute","isScalarAttribute","getWritableAttributes","addMinMax","nextValidator","addRequiredValidation","notNil","notNull","addDefault","preventCast","createComponentValidator","createModelValidator","createDzValidator","createRelationValidator","createScalarAttributeValidator","createAttributeValidator","newComponentContext","writableAttributes","createValidateEntity","relationsValidation","checkRelationsExist","buildRelationsStore","currentModel","idArray","relationsStore","objValue","srcValue","dzValue","promises","evaluate","uniqueValues","uniqBy","createContentTypeRepository","sortValidations","fieldValidations","filtersValidations","populateValidations","filters","validateParams","validateFilters","validateSort","validateFields","validatePopulate","eventManager","DP","i18n","deleteDocument","entriesToDelete","entryToDelete","queryParams","clone","entriesToClone","clonedEntries","updatedDraft","documentExists","draftsToPublish","oldPublishedVersions","relationsToSync","unidirectionalRelations","bidirectionalRelationsToSync","bidirectionalRelations","publishedEntries","unpublish","versionsToDelete","versionsToDraft","oldDrafts","draftEntries","createDocumentService","repositories","factory","repository","instance","hasTable","hasDP","copyPublishedEntriesToDraft","scalarAttributes","columnName","into","raw","subQb","att","whereNotNull","getBatchToDiscard","defaultBatchSize","isSQLite","batchSize","hasMore","batch","migrateUp","dpModels","documentService","concurrency","discardDocumentDrafts","up","down","enableDraftAndPublish","oldContentTypes","oldContentType","disableDraftAndPublish","enableI18n","updateMany","disableI18n","deleteMany","i18nMigrations","draftPublishMigrations","registries","createAsyncParallelHook","syncMigrations","migrations","providers","internal","nextResetDate","sender","limitedEvents","cacheExpiresAt","eventCache","event","generateAdminUserHash","requestContext","user","createHash","digest","defaultQueryOpts","timeout","ANALYTICS_URI","addPackageJsonStrapiMetadata","serverRootPath","adminRootPath","anonymousUserProperties","osPlatform","platform","osArch","arch","osRelease","release","nodeVersion","versions","node","anonymousGroupProperties","docker","DOCKER","isDocker","isCI","ciEnv","useTypescriptOnServer","tsUtils","isUsingTypeScriptSync","useTypescriptOnAdmin","isHostedOnStrapiCloud","payload","userId","reqParams","eventProperties","userProperties","groupProperties","projectType","ok","createMiddleware","sendEvent","expires","counter","isTruthy","LIMITED_EVENTS","createTelemetryInstance","telemetryDisabled","isDisabled","STRAPI_TELEMETRY_DISABLED","crons","createSender","wrapWithRateLimit","pingCron","scheduleJob","createTelemetry","webhookModel","events","toDBObject","fromDBObject","row","webhookEventValidator","allowedEvents","allowedValues","createWebhookStore","addAllowedEvent","removeAllowedEvent","listAllowedEvents","getAllowedEvent","findWebhooks","findWebhook","createWebhook","updateWebhook","webhook","deleteWebhook","createDebugger","noop","WorkerQueue","worker","enqueue","queue","unshift","pop","createdDebugger","defaultConfiguration","defaultHeaders","WebhookRunner","deleteListener","createListener","executeListener","webhooks","webhooksMap","activeWebhooks","AbortSignal","statusCode","filteredWebhooks","configuration","createWebhookRunner","coreStore","telemetry","transformLoadParamsToQuery","createDefaultImplementation","wrapParams","wrapResult","wrappedParams","entities","findPage","shouldPublish","loadedEntity","loadPages","relationUtils","isAnyToMany","loadedPage","implementation","decorate","decorator","oldService","transformQueryParams","createTransformer","INVALID_STRATEGY_MSG","validStrategy","strategy","createAuthentication","strategies","routeStrategies","configStrategies","strategiesToUse","routeStrategy","rs","authenticated","ability","isAuthenticated","createCustomFields","providerFactory","isLoaded","condition","permissions","engine","new","typeSymbol","createValidatePermissionHandler","actionProvider","permission","createActionProvider","createConditionProvider","getActionsMap","actionMap","isContentApi","registerAPIsActions","contentApiActions","registerActions","actionsMap","actionUID","createPermissionEngine","transformRoutePrefixFor","filterContentAPI","getRoutesMap","routesMap","apiPrefix","transformPrefix","createAPISanitizers","createAPIValidators","instantiatePermissionsUtilities","getNumberOfDynamicZones","sumBy","createFeaturesService","future","futureFlagName","createConfigProvider","initialConfig","transformPathString","transformDeprecatedPaths","part","Strapi","entityService","startupLogger","registerInternalServices","internal_config","createLogger","createQueryParamService","createAuth","createStrapiFs","createEntityService","tsDir","resolveOutDirSync","tsMigrationsEnabled","projectDir","Database","sendStartupTelemetry","database","numberOfAllContentTypes","numberOfComponents","numberOfDynamicZones","numberOfCustomControllers","factories","openAdmin","shouldOpenAdmin","postListen","onListen","listenSocket","customMessage","exitCode","runPluginsLifecycles","runUserLifecycles","configureGlobalProxy","getSchemaConnection","repair","removeOrphanMorphType","pivot","globalProxy","httpProxy","httpsProxy","globalAgent","global","GLOBAL_AGENT","HTTP_PROXY","HTTPS_PROXY","lifecycleName","userLifecycleFunction","compile","ignoreDiagnostics","isTSProject","isUsingTypeScript","outDir","resolveOutDir","configOptions","incremental","createStrapi"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/configuration/urls.ts","../src/utils/load-config-file.ts","../src/configuration/config-loader.ts","../src/configuration/get-dirs.ts","../src/configuration/index.ts","../src/core-api/controller/transform.ts","../src/core-api/controller/single-type.ts","../src/core-api/controller/collection-type.ts","../src/services/request-context.ts","../src/core-api/controller/index.ts","../src/core-api/service/core-service.ts","../src/core-api/service/single-type.ts","../src/core-api/service/pagination.ts","../src/core-api/service/collection-type.ts","../src/core-api/service/index.ts","../src/core-api/routes/index.ts","../src/factories.ts","../src/utils/open-browser.ts","../src/utils/is-initialized.ts","../src/ee/license.ts","../src/utils/cron.ts","../src/ee/index.ts","../src/utils/update-notifier/index.ts","../src/utils/fetch.ts","../src/utils/convert-custom-field-type.ts","../src/utils/startup-logger.ts","../src/utils/transform-content-types-to-models.ts","../src/utils/signals.ts","../src/utils/lifecycles.ts","../src/utils/resolve-working-dirs.ts","../src/container.ts","../src/services/fs.ts","../src/services/event-hub.ts","../src/services/server/http-server.ts","../src/services/server/middleware.ts","../src/services/server/policy.ts","../src/services/server/compose-endpoint.ts","../src/services/server/routing.ts","../src/services/server/api.ts","../src/services/server/admin-api.ts","../src/services/server/content-api.ts","../src/services/server/register-routes.ts","../src/services/server/register-middlewares.ts","../src/services/errors.ts","../src/services/server/koa.ts","../src/services/server/index.ts","../src/services/reloader.ts","../src/providers/provider.ts","../src/domain/content-type/validator.ts","../src/domain/content-type/index.ts","../src/loaders/admin.ts","../src/providers/admin.ts","../src/services/core-store.ts","../src/providers/coreStore.ts","../src/services/cron.ts","../src/providers/cron.ts","../src/registries/namespace.ts","../src/registries/content-types.ts","../src/registries/components.ts","../src/registries/services.ts","../src/registries/policies.ts","../src/registries/middlewares.ts","../src/registries/hooks.ts","../src/registries/controllers.ts","../src/domain/module/validation.ts","../src/domain/module/index.ts","../src/registries/modules.ts","../src/registries/plugins.ts","../src/registries/custom-fields.ts","../src/registries/apis.ts","../src/registries/sanitizers.ts","../src/registries/validators.ts","../src/registries/models.ts","../src/loaders/src-index.ts","../src/loaders/apis.ts","../src/middlewares/compression.ts","../src/middlewares/cors.ts","../src/middlewares/errors.ts","../src/middlewares/favicon.ts","../src/middlewares/ip.ts","../src/middlewares/logger.ts","../src/middlewares/powered-by.ts","../src/middlewares/body.ts","../src/middlewares/query.ts","../src/middlewares/response-time.ts","../src/middlewares/responses.ts","../src/middlewares/security.ts","../src/middlewares/session.ts","../src/middlewares/public.ts","../src/middlewares/index.ts","../src/loaders/middlewares.ts","../src/utils/filepath-to-prop-path.ts","../src/utils/load-files.ts","../src/loaders/components.ts","../src/loaders/policies.ts","../src/loaders/plugins/get-user-plugins-config.ts","../src/loaders/plugins/get-enabled-plugins.ts","../src/loaders/plugins/index.ts","../src/loaders/sanitizers.ts","../src/loaders/validators.ts","../src/loaders/index.ts","../src/services/document-service/middlewares/errors.ts","../src/services/document-service/middlewares/middleware-manager.ts","../src/services/document-service/common.ts","../src/services/document-service/draft-and-publish.ts","../src/services/document-service/internationalization.ts","../src/services/document-service/components.ts","../src/services/document-service/transform/id-map.ts","../src/services/document-service/transform/relations/utils/i18n.ts","../src/services/document-service/transform/relations/utils/dp.ts","../src/services/document-service/transform/relations/utils/map-relation.ts","../src/services/document-service/transform/relations/extract/data-ids.ts","../src/services/document-service/transform/relations/transform/data-ids.ts","../src/services/document-service/transform/relations/transform/default-locale.ts","../src/services/document-service/transform/data.ts","../src/services/document-service/transform/fields.ts","../src/services/document-service/transform/populate.ts","../src/services/document-service/transform/id-transform.ts","../src/services/document-service/transform/query.ts","../src/services/document-service/params.ts","../src/services/document-service/attributes/transforms.ts","../src/services/document-service/attributes/index.ts","../src/services/document-service/entries.ts","../src/services/document-service/utils/populate.ts","../src/services/document-service/events.ts","../src/services/document-service/utils/unidirectional-relations.ts","../src/services/document-service/utils/bidirectional-relations.ts","../src/services/entity-validator/blocks-validator.ts","../src/services/entity-validator/validators.ts","../src/services/entity-validator/index.ts","../src/services/document-service/repository.ts","../src/services/document-service/index.ts","../src/migrations/database/5.0.0-discard-drafts.ts","../src/migrations/draft-publish.ts","../src/migrations/i18n.ts","../src/migrations/index.ts","../src/providers/registries.ts","../src/services/metrics/rate-limiter.ts","../src/services/metrics/admin-user-hash.ts","../src/services/metrics/sender.ts","../src/services/metrics/middleware.ts","../src/services/metrics/is-truthy.ts","../src/services/metrics/index.ts","../src/providers/telemetry.ts","../src/services/webhook-store.ts","../src/services/worker-queue.ts","../src/services/webhook-runner.ts","../src/providers/webhooks.ts","../src/providers/index.ts","../src/services/entity-service/index.ts","../src/services/query-params.ts","../src/services/auth/index.ts","../src/services/custom-fields.ts","../src/services/content-api/permissions/providers/action.ts","../src/services/content-api/permissions/providers/condition.ts","../src/services/content-api/permissions/engine.ts","../src/services/content-api/permissions/index.ts","../src/services/content-api/index.ts","../src/services/utils/dynamic-zones.ts","../src/services/features.ts","../src/services/config.ts","../src/Strapi.ts","../src/compile.ts","../src/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { strings } from '@strapi/utils';\n\ninterface ServerConfig {\n url: string;\n host: string;\n port: number | string;\n}\n\nexport const getConfigUrls = (config: Record<string, unknown>, forAdminBuild = false) => {\n const serverConfig = config.server as ServerConfig;\n const adminConfig = config.admin;\n\n // Defines serverUrl value\n let serverUrl = _.get(serverConfig, 'url', '');\n serverUrl = _.trim(serverUrl, '/ ');\n if (typeof serverUrl !== 'string') {\n throw new Error('Invalid server url config. Make sure the url is a string.');\n }\n\n if (serverUrl.startsWith('http')) {\n try {\n serverUrl = _.trim(new URL(serverConfig.url).toString(), '/');\n } catch (e) {\n throw new Error(\n 'Invalid server url config. Make sure the url defined in server.js is valid.'\n );\n }\n } else if (serverUrl !== '') {\n serverUrl = `/${serverUrl}`;\n }\n\n // Defines adminUrl value\n let adminUrl = _.get(adminConfig, 'url', '/admin');\n adminUrl = _.trim(adminUrl, '/ ');\n if (typeof adminUrl !== 'string') {\n throw new Error('Invalid admin url config. Make sure the url is a non-empty string.');\n }\n if (adminUrl.startsWith('http')) {\n try {\n adminUrl = _.trim(new URL(adminUrl).toString(), '/');\n } catch (e) {\n throw new Error('Invalid admin url config. Make sure the url defined in server.js is valid.');\n }\n } else {\n adminUrl = `${serverUrl}/${adminUrl}`;\n }\n\n // Defines adminPath value\n let adminPath = adminUrl;\n if (\n serverUrl.startsWith('http') &&\n adminUrl.startsWith('http') &&\n new URL(adminUrl).origin === new URL(serverUrl).origin &&\n !forAdminBuild\n ) {\n adminPath = adminUrl.replace(strings.getCommonPath(serverUrl, adminUrl), '');\n adminPath = `/${_.trim(adminPath, '/')}`;\n } else if (adminUrl.startsWith('http')) {\n adminPath = new URL(adminUrl).pathname;\n }\n\n return {\n serverUrl,\n adminUrl,\n adminPath,\n };\n};\n\nconst getAbsoluteUrl =\n (adminOrServer: 'admin' | 'server') =>\n (config: Record<string, unknown>, forAdminBuild = false) => {\n const { serverUrl, adminUrl } = getConfigUrls(config, forAdminBuild);\n const url = adminOrServer === 'server' ? serverUrl : adminUrl;\n\n if (url.startsWith('http')) {\n return url;\n }\n\n const serverConfig = config.server as ServerConfig;\n const hostname =\n config.environment === 'development' && ['127.0.0.1', '0.0.0.0'].includes(serverConfig.host)\n ? 'localhost'\n : serverConfig.host;\n\n return `http://${hostname}:${serverConfig.port}${url}`;\n };\n\nexport const getAbsoluteAdminUrl = getAbsoluteUrl('admin');\nexport const getAbsoluteServerUrl = getAbsoluteUrl('server');\n","import path from 'path';\nimport fs from 'fs';\nimport { env, importDefault } from '@strapi/utils';\n\nconst loadJsFile = (file: string) => {\n try {\n const jsModule = importDefault(file);\n\n // call if function\n if (typeof jsModule === 'function') {\n return jsModule({ env });\n }\n\n return jsModule;\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Could not load js config file ${file}: ${error.message}`);\n }\n\n throw new Error('Unknown error');\n }\n};\n\nconst loadJSONFile = (file: string) => {\n try {\n return JSON.parse(fs.readFileSync(file).toString());\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Could not load json config file ${file}: ${error.message}`);\n }\n\n throw new Error('Unknown error');\n }\n};\n\nexport const loadConfigFile = (file: string) => {\n const ext = path.extname(file);\n\n switch (ext) {\n case '.js':\n return loadJsFile(file);\n case '.json':\n return loadJSONFile(file);\n default:\n return {};\n }\n};\n","import path from 'path';\nimport fs from 'fs';\nimport { loadConfigFile } from '../utils/load-config-file';\n\nconst VALID_EXTENSIONS = ['.js', '.json'];\n\n// These filenames are restricted, but will also emit a warning that the filename is probably a mistake\nconst MISTAKEN_FILENAMES = {\n middleware: 'middlewares',\n plugin: 'plugins',\n};\n\n// the following are restricted to prevent conflicts with existing STRAPI_* env vars or root level config options\n// must all be lowercase to match validator\nconst RESTRICTED_FILENAMES = [\n // existing env vars\n 'uuid',\n 'hosting',\n 'license',\n 'enforce',\n 'disable',\n 'enable',\n 'telemetry',\n\n // reserved for future internal use\n 'strapi',\n 'internal',\n\n // root level config options\n // TODO: it would be better to move these out of the root config and allow them to be loaded\n 'launchedAt',\n 'serveAdminPanel',\n 'autoReload',\n 'environment',\n 'packageJsonStrapi',\n 'info',\n 'autoReload',\n 'dirs',\n\n // probably mistaken/typo filenames\n ...Object.keys(MISTAKEN_FILENAMES),\n];\n\n// Existing Strapi configuration files\nconst STRAPI_CONFIG_FILENAMES = [\n 'admin',\n 'server',\n 'api',\n 'database',\n 'middlewares',\n 'plugins',\n 'features',\n];\n\n// Note: we don't have access to strapi logger at this point so we can't use it\nconst logWarning = (message: string) => {\n console.warn(message);\n};\n\nexport default (dir: string) => {\n if (!fs.existsSync(dir)) return {};\n\n const allFiles = fs.readdirSync(dir, { withFileTypes: true });\n const seenFilenames = new Set<string>();\n const configFiles = allFiles.reduce((acc, file) => {\n const baseName = path.basename(file.name, path.extname(file.name));\n const baseNameLower = baseName.toLowerCase();\n const extension = path.extname(file.name);\n const extensionLower = extension.toLowerCase();\n\n if (!file.isFile()) {\n return acc;\n }\n\n if (!VALID_EXTENSIONS.includes(extensionLower)) {\n logWarning(\n `Config file not loaded, extension must be one of ${VALID_EXTENSIONS.join(',')}): ${\n file.name\n }`\n );\n return acc;\n }\n\n if (RESTRICTED_FILENAMES.includes(baseNameLower)) {\n logWarning(`Config file not loaded, restricted filename: ${file.name}`);\n\n // suggest the filename they probably meant\n if (baseNameLower in MISTAKEN_FILENAMES) {\n console.log(\n `Did you mean ${MISTAKEN_FILENAMES[baseNameLower as keyof typeof MISTAKEN_FILENAMES]}]} ?`\n );\n }\n\n return acc;\n }\n\n // restricted names and Strapi configs are also restricted from being prefixes\n const restrictedPrefix = [...RESTRICTED_FILENAMES, ...STRAPI_CONFIG_FILENAMES].find(\n (restrictedName) =>\n restrictedName.startsWith(baseNameLower) && restrictedName !== baseNameLower\n );\n if (restrictedPrefix) {\n logWarning(\n `Config file not loaded, filename cannot start with ${restrictedPrefix}: ${file.name}`\n );\n }\n\n /**\n * Note: If user config files contain non-alpha-numeric characters, we won't be able to auto-load env\n * into them.\n *\n * For the initial feature, we will only load our internal configs, but later when we provide a method\n * to define the shape of custom configs, we will need to warn that those filenames can't be loaded\n * for technical limitations on env variable names\n * */\n // if (!/^[A-Za-z0-9]+$/.test(baseName)) {\n // logWarning(\"Using a non-alphanumeric config file name prevents Strapi from auto-loading it from environment variables.\")\n // }\n\n // filter filenames without case-insensitive uniqueness\n if (seenFilenames.has(baseNameLower)) {\n logWarning(\n `Config file not loaded, case-insensitive name matches other config file: ${file.name}`\n );\n return acc;\n }\n seenFilenames.add(baseNameLower);\n\n // If file passes all filters, add it to the accumulator\n acc.push(file);\n return acc;\n }, [] as fs.Dirent[]);\n\n return configFiles.reduce(\n (acc, file) => {\n const key = path.basename(file.name, path.extname(file.name));\n\n acc[key] = loadConfigFile(path.resolve(dir, file.name));\n\n return acc;\n },\n {} as Record<string, unknown>\n );\n};\n","import { join, resolve } from 'path';\nimport { get } from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\nimport type { StrapiOptions } from '../Strapi';\n\nexport type Options = {\n app: string;\n dist: string;\n};\n\nexport const getDirs = (\n { appDir, distDir }: StrapiOptions,\n config: { server: Partial<Core.Config.Server> }\n): Core.StrapiDirectories => ({\n dist: {\n root: distDir,\n src: join(distDir, 'src'),\n api: join(distDir, 'src', 'api'),\n components: join(distDir, 'src', 'components'),\n extensions: join(distDir, 'src', 'extensions'),\n policies: join(distDir, 'src', 'policies'),\n middlewares: join(distDir, 'src', 'middlewares'),\n config: join(distDir, 'config'),\n },\n app: {\n root: appDir,\n src: join(appDir, 'src'),\n api: join(appDir, 'src', 'api'),\n components: join(appDir, 'src', 'components'),\n extensions: join(appDir, 'src', 'extensions'),\n policies: join(appDir, 'src', 'policies'),\n middlewares: join(appDir, 'src', 'middlewares'),\n config: join(appDir, 'config'),\n },\n static: {\n public: resolve(appDir, get('server.dirs.public', config)),\n },\n});\n","/* eslint-disable @typescript-eslint/no-var-requires */\nimport os from 'os';\nimport path from 'path';\nimport _ from 'lodash';\nimport { omit } from 'lodash/fp';\nimport dotenv from 'dotenv';\nimport type { Core } from '@strapi/types';\nimport { strings } from '@strapi/utils';\n\nimport { getConfigUrls, getAbsoluteAdminUrl, getAbsoluteServerUrl } from './urls';\nimport loadConfigDir from './config-loader';\nimport { getDirs } from './get-dirs';\n\nimport type { StrapiOptions } from '../Strapi';\nimport { version as strapiVersion } from '../../package.json';\n\ndotenv.config({ path: process.env.ENV_PATH });\n\nprocess.env.NODE_ENV = process.env.NODE_ENV || 'development';\n\nconst defaultConfig = {\n server: {\n host: process.env.HOST || os.hostname() || 'localhost',\n port: Number(process.env.PORT) || 1337,\n proxy: false,\n cron: { enabled: false },\n admin: { autoOpen: false },\n dirs: { public: './public' },\n transfer: {\n remote: {\n enabled: true,\n },\n },\n logger: {\n updates: {\n enabled: true,\n },\n startup: {\n enabled: true,\n },\n },\n } satisfies Partial<Core.Config.Server>,\n admin: {} satisfies Partial<Core.Config.Admin>,\n api: {\n rest: {\n prefix: '/api',\n },\n } satisfies Partial<Core.Config.Api>,\n};\n\nexport const loadConfiguration = (opts: StrapiOptions) => {\n const { appDir, distDir, autoReload = false, serveAdminPanel = true } = opts;\n\n const pkgJSON = require(path.resolve(appDir, 'package.json'));\n\n const configDir = path.resolve(distDir || process.cwd(), 'config');\n\n const rootConfig = {\n launchedAt: Date.now(),\n autoReload,\n environment: process.env.NODE_ENV,\n uuid: _.get(pkgJSON, 'strapi.uuid'),\n packageJsonStrapi: _.omit(_.get(pkgJSON, 'strapi', {}), 'uuid'),\n info: {\n ...pkgJSON,\n strapi: strapiVersion,\n },\n admin: {\n serveAdminPanel,\n },\n };\n\n // See packages/core/core/src/domain/module/index.ts for plugin config loading\n const baseConfig = omit('plugins', loadConfigDir(configDir)); // plugin config will be loaded later\n\n const envDir = path.resolve(configDir, 'env', process.env.NODE_ENV as string);\n const envConfig = loadConfigDir(envDir);\n\n const config = _.merge(rootConfig, defaultConfig, baseConfig, envConfig);\n\n const { serverUrl, adminUrl } = getConfigUrls(config);\n\n const serverAbsoluteUrl = getAbsoluteServerUrl(config);\n const adminAbsoluteUrl = getAbsoluteAdminUrl(config);\n\n const sameOrigin = new URL(adminAbsoluteUrl).origin === new URL(serverAbsoluteUrl).origin;\n\n const adminPath = sameOrigin\n ? adminUrl.replace(strings.getCommonPath(serverUrl, adminUrl), '')\n : new URL(adminUrl).pathname;\n\n _.set(config, 'server.url', serverUrl);\n _.set(config, 'server.absoluteUrl', serverAbsoluteUrl);\n _.set(config, 'admin.url', adminUrl);\n _.set(config, 'admin.path', adminPath);\n _.set(config, 'admin.absoluteUrl', adminAbsoluteUrl);\n _.set(config, 'dirs', getDirs(opts, config));\n\n return config;\n};\n","import { isNil, isPlainObject } from 'lodash/fp';\nimport type { UID, Struct, Data } from '@strapi/types';\n\ntype TransformedEntry = {\n id: string;\n documentId?: Data.DocumentID | null;\n attributes: Record<string, unknown>;\n};\n\ntype TransformedComponent = {\n id: string;\n [key: string]: unknown;\n};\n\ntype Entry = {\n id: string;\n documentId: Data.DocumentID | null;\n [key: string]: Entry | Entry[] | string | number | null | boolean | Date;\n};\n\nfunction isEntry(property: unknown): property is Entry | Entry[] {\n return property === null || isPlainObject(property) || Array.isArray(property);\n}\n\nfunction isDZEntries(property: unknown): property is (Entry & { __component: UID.Component })[] {\n return Array.isArray(property);\n}\n\ninterface TransformOptions {\n contentType?: Struct.ContentTypeSchema | Struct.ComponentSchema;\n /**\n * @deprecated this option is deprecated and will be removed in the next major version\n */\n useJsonAPIFormat?: boolean;\n}\n\nconst transformResponse = (\n resource: any,\n meta: unknown = {},\n opts: TransformOptions = {\n useJsonAPIFormat: false,\n }\n) => {\n if (isNil(resource)) {\n return resource;\n }\n\n if (!isPlainObject(resource) && !Array.isArray(resource)) {\n throw new Error('Entry must be an object or an array of objects');\n }\n\n return {\n data: opts.useJsonAPIFormat ? transformEntry(resource, opts?.contentType) : resource,\n meta,\n };\n};\n\nfunction transformComponent<T extends Entry | Entry[] | null>(\n data: T,\n component: Struct.ComponentSchema\n): T extends Entry[] ? TransformedComponent[] : T extends Entry ? TransformedComponent : null;\nfunction transformComponent(\n data: Entry | Entry[] | null,\n component: Struct.ComponentSchema\n): TransformedComponent | TransformedComponent[] | null {\n if (Array.isArray(data)) {\n return data.map((datum) => transformComponent(datum, component));\n }\n\n const res = transformEntry(data, component);\n\n if (isNil(res)) {\n return res;\n }\n\n const { id, attributes } = res;\n return { id, ...attributes };\n}\n\nfunction transformEntry<T extends Entry | Entry[] | null>(\n entry: T,\n type?: Struct.Schema\n): T extends Entry[] ? TransformedEntry[] : T extends Entry ? TransformedEntry : null;\nfunction transformEntry(\n entry: Entry | Entry[] | null,\n type?: Struct.Schema\n): TransformedEntry | TransformedEntry[] | null {\n if (isNil(entry)) {\n return entry;\n }\n\n if (Array.isArray(entry)) {\n return entry.map((singleEntry) => transformEntry(singleEntry, type));\n }\n\n if (!isPlainObject(entry)) {\n throw new Error('Entry must be an object');\n }\n\n const { id, documentId, ...properties } = entry;\n\n const attributeValues: Record<string, unknown> = {};\n\n for (const key of Object.keys(properties)) {\n const property = properties[key];\n const attribute = type && type.attributes[key];\n\n if (attribute && attribute.type === 'relation' && isEntry(property) && 'target' in attribute) {\n const data = transformEntry(property, strapi.contentType(attribute.target));\n\n attributeValues[key] = { data };\n } else if (attribute && attribute.type === 'component' && isEntry(property)) {\n attributeValues[key] = transformComponent(property, strapi.components[attribute.component]);\n } else if (attribute && attribute.type === 'dynamiczone' && isDZEntries(property)) {\n if (isNil(property)) {\n attributeValues[key] = property;\n }\n\n attributeValues[key] = property.map((subProperty) => {\n return transformComponent(subProperty, strapi.components[subProperty.__component]);\n });\n } else if (attribute && attribute.type === 'media' && isEntry(property)) {\n const data = transformEntry(property, strapi.contentType('plugin::upload.file'));\n\n attributeValues[key] = { data };\n } else {\n attributeValues[key] = property;\n }\n }\n\n return {\n id,\n documentId,\n attributes: attributeValues,\n };\n}\n\nexport { transformResponse };\n","import { isObject } from 'lodash/fp';\nimport { errors } from '@strapi/utils';\nimport type { Struct, Core, Utils, UID } from '@strapi/types';\n\ninterface Options {\n contentType: Struct.SingleTypeSchema;\n}\n\n/**\n * Returns a single type controller to handle default core-api actions\n */\nconst createSingleTypeController = ({\n contentType,\n}: Options): Utils.PartialWithThis<Core.CoreAPI.Controller.SingleType> => {\n const uid = contentType.uid as UID.Service;\n\n // TODO: transform into a class\n return {\n /**\n * Retrieve single type content\n *\n */\n async find(ctx) {\n await this.validateQuery(ctx);\n const sanitizedQuery = await this.sanitizeQuery(ctx);\n\n const entity = await strapi.service(uid).find(sanitizedQuery);\n\n const sanitizedEntity = await this.sanitizeOutput(entity, ctx);\n\n return this.transformResponse(sanitizedEntity);\n },\n\n /**\n * create or update single type content.\n */\n async update(ctx) {\n const { query, body = {} as any } = ctx.request;\n\n if (!isObject(body.data)) {\n throw new errors.ValidationError('Missing \"data\" payload in the request body');\n }\n\n await this.validateInput(body.data, ctx);\n\n const sanitizedInputData = await this.sanitizeInput(body.data, ctx);\n\n const entity = await strapi.service(uid).createOrUpdate({\n ...query,\n data: sanitizedInputData,\n });\n\n const sanitizedEntity = await this.sanitizeOutput(entity, ctx);\n\n return this.transformResponse(sanitizedEntity);\n },\n\n async delete(ctx) {\n const { query } = ctx;\n\n await strapi.service(uid).delete(query);\n\n ctx.status = 204;\n },\n };\n};\n\nexport { createSingleTypeController };\n","import { isObject } from 'lodash/fp';\nimport { errors } from '@strapi/utils';\nimport type { Core, Struct, Utils, UID } from '@strapi/types';\nimport type Koa from 'koa';\n\ninterface Options {\n contentType: Struct.CollectionTypeSchema;\n}\n\n/**\n *\n * Returns a collection type controller to handle default core-api actions\n */\nconst createCollectionTypeController = ({\n contentType,\n}: Options): Utils.PartialWithThis<Core.CoreAPI.Controller.CollectionType> => {\n const uid = contentType.uid as UID.Service;\n\n // TODO: transform into a class\n return {\n /**\n * Retrieve records.\n */\n async find(ctx) {\n await this.validateQuery(ctx);\n const sanitizedQuery = await this.sanitizeQuery(ctx);\n\n const { results, pagination } = await strapi.service(uid).find(sanitizedQuery);\n const sanitizedResults = await this.sanitizeOutput(results, ctx);\n return this.transformResponse(sanitizedResults, { pagination });\n },\n\n /**\n * Retrieve a record\n */\n async findOne(ctx) {\n const { id } = ctx.params;\n await this.validateQuery(ctx);\n const sanitizedQuery = await this.sanitizeQuery(ctx);\n\n const entity = await strapi.service(uid).findOne(id, sanitizedQuery);\n const sanitizedEntity = await this.sanitizeOutput(entity, ctx);\n\n return this.transformResponse(sanitizedEntity);\n },\n\n /**\n * Create a record.\n */\n async create(ctx) {\n await this.validateQuery(ctx);\n const sanitizedQuery = await this.sanitizeQuery(ctx);\n\n const { body = {} as any } = ctx.request;\n\n if (!isObject(body.data)) {\n throw new errors.ValidationError('Missing \"data\" payload in the request body');\n }\n\n await this.validateInput(body.data, ctx);\n\n const sanitizedInputData = await this.sanitizeInput(body.data, ctx);\n\n const entity = await strapi.service(uid).create({\n ...sanitizedQuery,\n data: sanitizedInputData,\n });\n\n const sanitizedEntity = await this.sanitizeOutput(entity, ctx);\n\n ctx.status = 201;\n return this.transformResponse(sanitizedEntity);\n },\n\n /**\n * Update a record.\n */\n async update(ctx: Koa.Context) {\n const { id } = ctx.params;\n await this.validateQuery(ctx);\n const sanitizedQuery = await this.sanitizeQuery(ctx);\n\n const { body = {} as any } = ctx.request;\n\n if (!isObject(body.data)) {\n throw new errors.ValidationError('Missing \"data\" payload in the request body');\n }\n\n await this.validateInput(body.data, ctx);\n\n const sanitizedInputData = await this.sanitizeInput(body.data, ctx);\n\n const entity = await strapi.service(uid).update(id, {\n ...sanitizedQuery,\n data: sanitizedInputData,\n });\n\n const sanitizedEntity = await this.sanitizeOutput(entity, ctx);\n\n return this.transformResponse(sanitizedEntity);\n },\n\n /**\n * Destroy a record.\n */\n async delete(ctx) {\n const { id } = ctx.params;\n await this.validateQuery(ctx);\n const sanitizedQuery = await this.sanitizeQuery(ctx);\n\n await strapi.service(uid).delete(id, sanitizedQuery);\n\n ctx.status = 204;\n },\n };\n};\n\nexport { createCollectionTypeController };\n","import { AsyncLocalStorage } from 'async_hooks';\nimport type { ParameterizedContext } from 'koa';\n\nconst storage = new AsyncLocalStorage<ParameterizedContext>();\n\nconst requestCtx = {\n async run(store: ParameterizedContext, cb: () => Promise<void>) {\n return storage.run(store, cb);\n },\n\n get() {\n return storage.getStore();\n },\n};\n\nexport default requestCtx;\n","import { prop } from 'lodash/fp';\nimport type Koa from 'koa';\nimport { contentTypes as contentTypeUtils } from '@strapi/utils';\nimport type { Core, Struct } from '@strapi/types';\n\nimport { transformResponse } from './transform';\nimport { createSingleTypeController } from './single-type';\nimport { createCollectionTypeController } from './collection-type';\nimport requestCtx from '../../services/request-context';\n\nconst isSingleType = (\n contentType: Struct.ContentTypeSchema\n): contentType is Struct.SingleTypeSchema => contentTypeUtils.isSingleType(contentType);\n\nconst getAuthFromKoaContext = (ctx: Koa.Context) => prop('state.auth', ctx) ?? {};\n\nfunction createController<T extends Struct.SingleTypeSchema | Struct.CollectionTypeSchema>(opts: {\n contentType: T;\n}): T extends Struct.SingleTypeSchema\n ? Core.CoreAPI.Controller.SingleType\n : Core.CoreAPI.Controller.CollectionType;\nfunction createController({\n contentType,\n}: {\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema;\n}) {\n // TODO: replace with Base class + SingleType and CollectionType classes\n\n const proto: Core.CoreAPI.Controller.Base = {\n transformResponse(data, meta) {\n const ctx = requestCtx.get();\n return transformResponse(data, meta, {\n contentType,\n useJsonAPIFormat: ctx?.headers?.['strapi-response-format'] === 'v4',\n });\n },\n\n async sanitizeOutput(data, ctx) {\n const auth = getAuthFromKoaContext(ctx);\n\n return strapi.contentAPI.sanitize.output(data, contentType, { auth });\n },\n\n async sanitizeInput(data, ctx) {\n const auth = getAuthFromKoaContext(ctx);\n\n return strapi.contentAPI.sanitize.input(data, contentType, { auth });\n },\n\n async sanitizeQuery(ctx) {\n const auth = getAuthFromKoaContext(ctx);\n\n return strapi.contentAPI.sanitize.query(ctx.query, contentType, { auth });\n },\n\n async validateQuery(ctx) {\n const auth = getAuthFromKoaContext(ctx);\n\n return strapi.contentAPI.validate.query(ctx.query, contentType, { auth });\n },\n\n async validateInput(data, ctx) {\n const auth = getAuthFromKoaContext(ctx);\n\n return strapi.contentAPI.validate.input(data, contentType, { auth });\n },\n };\n\n let ctrl;\n\n if (isSingleType(contentType)) {\n ctrl = createSingleTypeController({ contentType });\n } else {\n ctrl = createCollectionTypeController({ contentType });\n }\n\n return Object.assign(Object.create(proto), ctrl);\n}\n\nexport { createController };\n","export abstract class CoreService {\n getFetchParams(params = {}): any {\n return {\n status: 'published',\n ...params,\n };\n }\n}\n","import type { Struct, Core } from '@strapi/types';\nimport { CoreService } from './core-service';\n\nexport class SingleTypeService extends CoreService implements Core.CoreAPI.Service.SingleType {\n private contentType: Struct.SingleTypeSchema;\n\n constructor(contentType: Struct.SingleTypeSchema) {\n super();\n\n this.contentType = contentType;\n }\n\n async getDocumentId() {\n const { uid } = this.contentType;\n\n return strapi.db\n .query(uid)\n .findOne()\n .then((document) => document?.documentId as string);\n }\n\n async find(params = {}) {\n const { uid } = this.contentType;\n\n return strapi.documents(uid).findFirst(this.getFetchParams(params));\n }\n\n async createOrUpdate(params = {}) {\n const { uid } = this.contentType;\n\n const documentId = await this.getDocumentId();\n\n if (documentId) {\n return strapi.documents(uid).update({\n ...this.getFetchParams(params),\n documentId,\n });\n }\n\n return strapi.documents(uid).create(this.getFetchParams(params));\n }\n\n async delete(params = {}) {\n const { uid } = this.contentType;\n\n const documentId = await this.getDocumentId();\n if (!documentId) return { deletedEntries: 0 };\n\n const { entries } = await strapi.documents(uid).delete({\n ...this.getFetchParams(params),\n documentId,\n });\n\n return { deletedEntries: entries.length };\n }\n}\n\nconst createSingleTypeService = (\n contentType: Struct.SingleTypeSchema\n): Core.CoreAPI.Service.SingleType => {\n return new SingleTypeService(contentType);\n};\n\nexport { createSingleTypeService };\n","import { omit, has, toNumber, isNil } from 'lodash/fp';\n\nimport { errors, pagination } from '@strapi/utils';\n\ninterface BasePaginationParams {\n withCount?: boolean | 't' | '1' | 'true' | 'f' | '0' | 'false' | 0 | 1;\n}\n\ntype PagedPagination = BasePaginationParams & {\n page?: number;\n pageSize?: number;\n};\n\ntype OffsetPagination = BasePaginationParams & {\n start?: number;\n limit?: number;\n};\n\nexport type PaginationParams = PagedPagination | OffsetPagination;\n\ntype PaginationInfo =\n | {\n page: number;\n pageSize: number;\n }\n | {\n start: number;\n limit: number;\n };\n\n/**\n * Default limit values from config\n */\nconst getLimitConfigDefaults = () => ({\n defaultLimit: toNumber(strapi.config.get('api.rest.defaultLimit', 25)),\n maxLimit: toNumber(strapi.config.get('api.rest.maxLimit')) || null,\n});\n\nconst isOffsetPagination = (pagination?: PaginationParams): pagination is OffsetPagination =>\n has('start', pagination) || has('limit', pagination);\n\nconst isPagedPagination = (pagination?: PaginationParams): pagination is PagedPagination =>\n has('page', pagination) || has('pageSize', pagination) || !isOffsetPagination(pagination);\n\nconst shouldCount = (params: { pagination?: PaginationParams }) => {\n if (has('pagination.withCount', params)) {\n const withCount = params.pagination?.withCount;\n\n if (typeof withCount === 'boolean') {\n return withCount;\n }\n\n if (typeof withCount === 'undefined') {\n return false;\n }\n\n if (['true', 't', '1', 1].includes(withCount)) {\n return true;\n }\n\n if (['false', 'f', '0', 0].includes(withCount)) {\n return false;\n }\n\n throw new errors.ValidationError(\n 'Invalid withCount parameter. Expected \"t\",\"1\",\"true\",\"false\",\"0\",\"f\"'\n );\n }\n\n return Boolean(strapi.config.get('api.rest.withCount', true));\n};\n\nconst getPaginationInfo = (params: { pagination?: PaginationParams }): PaginationInfo => {\n const { defaultLimit, maxLimit } = getLimitConfigDefaults();\n\n const { start, limit } = pagination.withDefaultPagination(params.pagination || {}, {\n defaults: { offset: { limit: defaultLimit }, page: { pageSize: defaultLimit } },\n maxLimit: maxLimit || -1,\n });\n\n return { start, limit };\n};\n\nconst transformPaginationResponse = (\n paginationInfo: PaginationInfo,\n total: number | undefined,\n isPaged: boolean\n) => {\n const transform = isPaged\n ? pagination.transformPagedPaginationInfo\n : pagination.transformOffsetPaginationInfo;\n\n const paginationResponse = transform(paginationInfo, total!);\n\n if (isNil(total)) {\n // Ignore total and pageCount if `total` value is not available.\n return omit(['total', 'pageCount'], paginationResponse) as ReturnType<typeof transform>;\n }\n\n return paginationResponse;\n};\n\nexport { isPagedPagination, shouldCount, getPaginationInfo, transformPaginationResponse };\n","import type { Core, Struct, Modules } from '@strapi/types';\n\nimport {\n getPaginationInfo,\n shouldCount,\n isPagedPagination,\n transformPaginationResponse,\n} from './pagination';\n\nimport { CoreService } from './core-service';\n\nexport class CollectionTypeService\n extends CoreService\n implements Core.CoreAPI.Service.CollectionType\n{\n private contentType: Struct.CollectionTypeSchema;\n\n constructor(contentType: Struct.CollectionTypeSchema) {\n super();\n\n this.contentType = contentType;\n }\n\n async find(params = {}) {\n const { uid } = this.contentType;\n\n const fetchParams = this.getFetchParams(params);\n\n const paginationInfo = getPaginationInfo(fetchParams);\n const isPaged = isPagedPagination(fetchParams.pagination);\n\n const results = await strapi.documents(uid).findMany({\n ...fetchParams,\n ...paginationInfo,\n });\n\n if (shouldCount(fetchParams)) {\n const count = await strapi.documents(uid).count({ ...fetchParams, ...paginationInfo });\n\n if (typeof count !== 'number') {\n throw new Error('Count should be a number');\n }\n\n return {\n results,\n pagination: transformPaginationResponse(paginationInfo, count, isPaged),\n };\n }\n\n return {\n results,\n pagination: transformPaginationResponse(paginationInfo, undefined, isPaged),\n };\n }\n\n findOne(documentId: Modules.Documents.ID, params = {}) {\n const { uid } = this.contentType;\n\n return strapi.documents(uid).findOne({\n ...this.getFetchParams(params),\n documentId,\n });\n }\n\n async create(params = { data: {} }) {\n const { uid } = this.contentType;\n\n return strapi.documents(uid).create(this.getFetchParams(params));\n }\n\n update(documentId: Modules.Documents.ID, params = { data: {} }) {\n const { uid } = this.contentType;\n\n return strapi.documents(uid).update({\n ...this.getFetchParams(params),\n documentId,\n });\n }\n\n async delete(documentId: Modules.Documents.ID, params = {}) {\n const { uid } = this.contentType;\n\n const { entries } = await strapi.documents(uid).delete({\n ...this.getFetchParams(params),\n documentId,\n });\n\n return { deletedEntries: entries.length };\n }\n}\n\n/**\n *\n * Returns a collection type service to handle default core-api actions\n */\n\nconst createCollectionTypeService = (\n contentType: Struct.CollectionTypeSchema\n): Core.CoreAPI.Service.CollectionType => {\n return new CollectionTypeService(contentType);\n};\n\nexport { createCollectionTypeService };\n","import { contentTypes as contentTypeUtils } from '@strapi/utils';\nimport type { Core, Struct } from '@strapi/types';\n\nimport { createSingleTypeService } from './single-type';\nimport { createCollectionTypeService } from './collection-type';\n\nconst isSingleType = (\n contentType: Struct.ContentTypeSchema\n): contentType is Struct.SingleTypeSchema => contentTypeUtils.isSingleType(contentType);\n\n/**\n * Returns a core api for the provided model\n */\nfunction createService<T extends Struct.SingleTypeSchema | Struct.CollectionTypeSchema>(opts: {\n contentType: T;\n}): T extends Struct.SingleTypeSchema\n ? Core.CoreAPI.Service.SingleType\n : Core.CoreAPI.Service.CollectionType;\nfunction createService({\n contentType,\n}: {\n contentType: Struct.CollectionTypeSchema | Struct.SingleTypeSchema;\n}): Core.CoreAPI.Service.SingleType | Core.CoreAPI.Service.CollectionType {\n if (isSingleType(contentType)) {\n return createSingleTypeService(contentType);\n }\n\n return createCollectionTypeService(contentType);\n}\n\nexport { createService };\n","import { contentTypes as contentTypeUtils } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\n\nexport const createRoutes = ({ contentType }: { contentType: Schema.ContentType }) => {\n if (contentTypeUtils.isSingleType(contentType)) {\n return getSingleTypeRoutes(contentType);\n }\n\n return getCollectionTypeRoutes(contentType);\n};\n\nconst getSingleTypeRoutes = ({ uid, info }: Schema.ContentType) => {\n return {\n find: {\n method: 'GET',\n path: `/${info.singularName}`,\n handler: `${uid}.find`,\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.singularName}`,\n handler: `${uid}.update`,\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.singularName}`,\n handler: `${uid}.delete`,\n config: {},\n },\n };\n};\n\nconst getCollectionTypeRoutes = ({ uid, info }: Schema.ContentType) => {\n return {\n find: {\n method: 'GET',\n path: `/${info.pluralName}`,\n handler: `${uid}.find`,\n config: {},\n },\n findOne: {\n method: 'GET',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.findOne`,\n config: {},\n },\n create: {\n method: 'POST',\n path: `/${info.pluralName}`,\n handler: `${uid}.create`,\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.update`,\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.delete`,\n config: {},\n },\n };\n};\n","import { pipe, omit, pick } from 'lodash/fp';\nimport type { Core, UID, Utils } from '@strapi/types';\n\nimport { createController } from './core-api/controller';\nimport { createService } from './core-api/service';\nimport { createRoutes } from './core-api/routes';\n\nconst symbols = {\n CustomController: Symbol('StrapiCustomCoreController'),\n} as const;\n\ntype WithStrapiCallback<T> = T | (<S extends { strapi: Core.Strapi }>(params: S) => T);\n\nconst createCoreController = <\n TUID extends UID.ContentType,\n TController extends Core.CoreAPI.Controller.Extendable<TUID>,\n>(\n uid: TUID,\n cfg?: WithStrapiCallback<\n Utils.PartialWithThis<Core.CoreAPI.Controller.Extendable<TUID> & TController>\n >\n) => {\n return ({\n strapi,\n }: {\n strapi: Core.Strapi;\n }): TController & Core.CoreAPI.Controller.ContentType<TUID> => {\n const baseController = createController({ contentType: strapi.contentType(uid) });\n\n const userCtrl = typeof cfg === 'function' ? cfg({ strapi }) : (cfg ?? ({} as any));\n\n for (const methodName of Object.keys(baseController) as Array<keyof typeof baseController>) {\n if (userCtrl[methodName] === undefined) {\n userCtrl[methodName] = baseController[methodName];\n }\n }\n\n Object.setPrototypeOf(userCtrl, baseController);\n\n const isCustom = typeof cfg !== 'undefined';\n if (isCustom) {\n Object.defineProperty(userCtrl, symbols.CustomController, {\n writable: false,\n configurable: false,\n enumerable: false,\n });\n }\n\n return userCtrl;\n };\n};\n\nfunction createCoreService<\n TUID extends UID.ContentType,\n TService extends Core.CoreAPI.Service.Extendable<TUID>,\n>(\n uid: TUID,\n cfg?: WithStrapiCallback<Utils.PartialWithThis<Core.CoreAPI.Service.Extendable<TUID> & TService>>\n) {\n return ({\n strapi,\n }: {\n strapi: Core.Strapi;\n }): TService & Core.CoreAPI.Service.ContentType<TUID> => {\n const baseService = createService({ contentType: strapi.contentType(uid) });\n\n const userService = typeof cfg === 'function' ? cfg({ strapi }) : (cfg ?? ({} as any));\n\n for (const methodName of Object.keys(baseService) as Array<keyof typeof baseService>) {\n if (userService[methodName] === undefined) {\n userService[methodName] = baseService[methodName];\n }\n }\n\n Object.setPrototypeOf(userService, baseService);\n return userService;\n };\n}\n\nfunction createCoreRouter<T extends UID.ContentType>(\n uid: T,\n cfg?: Core.CoreAPI.Router.RouterConfig<T>\n): Core.CoreAPI.Router.Router {\n const { prefix, config = {}, only, except, type = 'content-api' } = cfg ?? {};\n let routes: Core.CoreAPI.Router.Route[];\n\n return {\n type,\n prefix,\n get routes() {\n if (!routes) {\n const contentType = strapi.contentType(uid);\n\n const defaultRoutes = createRoutes({ contentType });\n const keys = Object.keys(defaultRoutes) as Array<keyof typeof defaultRoutes>;\n\n keys.forEach((routeName) => {\n const defaultRoute = defaultRoutes[routeName];\n\n Object.assign(defaultRoute.config, config[routeName] || {});\n });\n\n const selectedRoutes = pipe(\n (routes) => (except ? omit(except, routes) : routes),\n (routes) => (only ? pick(only, routes) : routes)\n )(defaultRoutes);\n\n routes = Object.values(selectedRoutes);\n }\n\n return routes;\n },\n };\n}\n\nconst isCustomController = <T extends Core.Controller>(controller: T): boolean => {\n return symbols.CustomController in controller;\n};\n\nexport { createCoreController, createCoreService, createCoreRouter, isCustomController };\n","import open from 'open';\n\nimport type { Core } from '@strapi/types';\n\nexport const openBrowser = async (config: Core.ConfigProvider) => {\n const url = config.get<string>('admin.absoluteUrl');\n\n return open(url);\n};\n","import { isEmpty, isNil } from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\n/**\n * Test if the strapi application is considered as initialized (1st user has been created)\n */\nexport const isInitialized = async (strapi: Core.Strapi): Promise<boolean> => {\n try {\n if (isEmpty(strapi.admin)) {\n return true;\n }\n\n // test if there is at least one admin\n const anyAdministrator = await strapi.db.query('admin::user').findOne({ select: ['id'] });\n\n return !isNil(anyAdministrator);\n } catch (err) {\n strapi.stopWithError(err);\n }\n};\n","import fs from 'fs';\nimport { join, resolve } from 'path';\nimport crypto from 'crypto';\nimport type { Core } from '@strapi/types';\n\nimport { machineID } from '@strapi/utils';\n\ninterface LicenseInfo {\n type: 'bronze' | 'silver' | 'gold';\n expireAt?: string;\n seats?: number;\n features?: Array<{ name: string; options?: Record<string, unknown> }>;\n}\n\nconst DEFAULT_FEATURES = {\n bronze: [],\n silver: [],\n gold: [\n { name: 'sso' },\n // Set a null retention duration to allow the user to override it\n // The default of 90 days is set in the audit logs service\n { name: 'audit-logs', options: { retentionDays: null } },\n { name: 'review-workflows' },\n { name: 'cms-content-releases' },\n { name: 'cms-content-history', options: { retentionDays: 99999 } },\n ],\n};\n\nconst publicKey = fs.readFileSync(resolve(__dirname, '../resources/key.pub'));\n\nclass LicenseCheckError extends Error {\n shouldFallback = false;\n\n constructor(message: string, shouldFallback = false) {\n super(message);\n\n this.shouldFallback = shouldFallback;\n }\n}\n\nconst readLicense = (directory: string) => {\n try {\n const path = join(directory, 'license.txt');\n return fs.readFileSync(path).toString();\n } catch (error) {\n if (typeof error === 'object' && error !== null && 'code' in error && error.code !== 'ENOENT') {\n throw Error('License file not readable, review its format and access rules.');\n }\n }\n};\n\nconst verifyLicense = (license: string) => {\n const [signature, base64Content] = Buffer.from(license, 'base64').toString().split('\\n');\n\n if (!signature || !base64Content) {\n throw new Error('Invalid license.');\n }\n\n const stringifiedContent = Buffer.from(base64Content, 'base64').toString();\n\n const verify = crypto.createVerify('RSA-SHA256');\n verify.update(stringifiedContent);\n verify.end();\n\n const verified = verify.verify(publicKey, signature, 'base64');\n\n if (!verified) {\n throw new Error('Invalid license.');\n }\n\n const licenseInfo: LicenseInfo = JSON.parse(stringifiedContent);\n\n if (!licenseInfo.features) {\n licenseInfo.features = DEFAULT_FEATURES[licenseInfo.type];\n }\n\n Object.freeze(licenseInfo.features);\n return licenseInfo;\n};\n\nconst throwError = () => {\n throw new LicenseCheckError('Could not proceed to the online validation of your license.', true);\n};\n\nconst fetchLicense = async (\n { strapi }: { strapi: Core.Strapi },\n key: string,\n projectId: string\n) => {\n const response = await strapi\n .fetch(`https://license.strapi.io/api/licenses/validate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ key, projectId, deviceId: machineID() }),\n })\n .catch(throwError);\n\n const contentType = response.headers.get('Content-Type');\n\n if (contentType?.includes('application/json')) {\n const { data, error } = await response.json();\n\n switch (response.status) {\n case 200:\n return data.license;\n case 400:\n throw new LicenseCheckError(error.message);\n case 404:\n throw new LicenseCheckError('The license used does not exists.');\n default:\n throwError();\n }\n } else {\n throwError();\n }\n};\n\nexport { readLicense, verifyLicense, fetchLicense, LicenseCheckError };\n","import { isEmpty, negate } from 'lodash/fp';\n\nconst DATE_FUNCTIONS = [\n 'getSeconds',\n 'getMinutes',\n 'getHours',\n 'getDate',\n 'getMonth',\n 'getDay',\n] as const;\n\nconst INTEGER_REGEX = /^\\d+$/;\nconst STEP_REGEX = /^\\*\\/\\d+$/;\nconst COMPONENTS: {\n limit: number;\n zeroBasedIndices: boolean;\n functionName: (typeof DATE_FUNCTIONS)[number];\n}[] = [\n { limit: 60, zeroBasedIndices: true, functionName: 'getSeconds' },\n { limit: 60, zeroBasedIndices: true, functionName: 'getMinutes' },\n { limit: 24, zeroBasedIndices: true, functionName: 'getHours' },\n { limit: 31, zeroBasedIndices: false, functionName: 'getDate' },\n { limit: 12, zeroBasedIndices: false, functionName: 'getMonth' },\n { limit: 7, zeroBasedIndices: true, functionName: 'getDay' },\n];\n\nconst shift = (component: string, index: number, date: Date) => {\n if (component === '*') {\n return '*';\n }\n\n const { limit, zeroBasedIndices, functionName } = COMPONENTS[index];\n const offset = +!zeroBasedIndices;\n const currentValue = date[functionName]();\n\n if (INTEGER_REGEX.test(component)) {\n return ((Number.parseInt(component, 10) + currentValue) % limit) + offset;\n }\n\n if (STEP_REGEX.test(component)) {\n const [, step] = component.split('/');\n const frequency = Math.floor(limit / Number(step));\n const list = Array.from({ length: frequency }, (_, index) => index * Number(step));\n return list.map((value) => ((value + currentValue) % limit) + offset).sort((a, b) => a - b);\n }\n\n // Unsupported syntax\n return component;\n};\n\n/**\n * Simulate an interval by shifting a cron expression using the specified date.\n * @param {string} rule A cron expression you want to shift.\n * @param {Date} date The date that's gonna be used as the start of the \"interval\", it defaults to now.\n * @returns The shifted cron expression.\n */\nexport const shiftCronExpression = (rule: string, date = new Date()) => {\n const components = rule.trim().split(' ').filter(negate(isEmpty));\n const secondsIncluded = components.length === 6;\n return components\n .map((component, index) => shift(component, secondsIncluded ? index : index + 1, date))\n .join(' ');\n};\n","import { pick, isEqual } from 'lodash/fp';\nimport type { Logger } from '@strapi/logger';\nimport type { Core } from '@strapi/types';\n\nimport { readLicense, verifyLicense, fetchLicense, LicenseCheckError } from './license';\nimport { shiftCronExpression } from '../utils/cron';\n\nconst ONE_MINUTE = 1000 * 60;\n\ninterface EE {\n enabled: boolean;\n licenseInfo: {\n licenseKey?: string;\n features?: Array<{ name: string; [key: string]: any } | string>;\n expireAt?: string;\n seats?: number;\n type?: string;\n };\n logger?: Logger;\n}\n\nconst ee: EE = {\n enabled: false,\n licenseInfo: {},\n};\n\nconst disable = (message: string) => {\n // Prevent emitting ee.disable if it was already disabled\n const shouldEmitEvent = ee.enabled !== false;\n\n ee.logger?.warn(`${message} Switching to CE.`);\n // Only keep the license key for potential re-enabling during a later check\n ee.licenseInfo = pick('licenseKey', ee.licenseInfo);\n\n ee.enabled = false;\n\n if (shouldEmitEvent) {\n // Notify EE features that they should be disabled\n strapi.eventHub.emit('ee.disable');\n }\n};\n\nconst enable = () => {\n // Prevent emitting ee.enable if it was already enabled\n const shouldEmitEvent = ee.enabled !== true;\n\n ee.enabled = true;\n\n if (shouldEmitEvent) {\n // Notify EE features that they should be disabled\n strapi.eventHub.emit('ee.enable');\n }\n};\n\nlet initialized = false;\n\n/**\n * Optimistically enable EE if the format of the license is valid, only run once.\n */\nconst init = (licenseDir: string, logger?: Logger) => {\n if (initialized) {\n return;\n }\n\n initialized = true;\n ee.logger = logger;\n\n if (process.env.STRAPI_DISABLE_EE?.toLowerCase() === 'true') {\n return;\n }\n\n try {\n const license = process.env.STRAPI_LICENSE || readLicense(licenseDir);\n\n if (license) {\n ee.licenseInfo = verifyLicense(license);\n enable();\n }\n } catch (error) {\n if (error instanceof Error) {\n disable(error.message);\n } else {\n disable('Invalid license.');\n }\n }\n};\n\n/**\n * Contact the license registry to update the license to its latest state.\n *\n * Store the result in database to avoid unecessary requests, and will fallback to that in case of a network failure.\n */\nconst onlineUpdate = async ({ strapi }: { strapi: Core.Strapi }) => {\n const { get, commit, rollback } = (await strapi.db?.transaction()) as any;\n const transaction = get();\n\n try {\n const storedInfo = await strapi.db\n ?.queryBuilder('strapi::core-store')\n .where({ key: 'ee_information' })\n .select('value')\n .first()\n .transacting(transaction)\n .forUpdate()\n .execute()\n .then((result: any) => (result ? JSON.parse(result.value) : result));\n\n const shouldContactRegistry = (storedInfo?.lastCheckAt ?? 0) < Date.now() - ONE_MINUTE;\n const result: {\n license?: string | null;\n error?: string;\n lastCheckAt?: number;\n } = { lastCheckAt: Date.now() };\n\n const fallback = (error: Error) => {\n if (error instanceof LicenseCheckError && error.shouldFallback && storedInfo?.license) {\n ee.logger?.warn(\n `${error.message} The last stored one will be used as a potential fallback.`\n );\n return storedInfo.license;\n }\n\n result.error = error.message;\n disable(error.message);\n };\n\n if (!ee?.licenseInfo?.licenseKey) {\n throw new Error('Missing license key.');\n }\n\n const license = shouldContactRegistry\n ? await fetchLicense({ strapi }, ee.licenseInfo.licenseKey, strapi.config.get('uuid')).catch(\n fallback\n )\n : storedInfo.license;\n\n if (license) {\n try {\n // Verify license and check if its info changed\n const newLicenseInfo = verifyLicense(license);\n const licenseInfoChanged =\n !isEqual(newLicenseInfo.features, ee.licenseInfo.features) ||\n newLicenseInfo.seats !== ee.licenseInfo.seats ||\n newLicenseInfo.type !== ee.licenseInfo.type;\n\n // Store the new license info\n ee.licenseInfo = newLicenseInfo;\n const wasEnabled = ee.enabled;\n validateInfo();\n\n // Notify EE features\n if (licenseInfoChanged && wasEnabled) {\n strapi.eventHub.emit('ee.update');\n }\n } catch (error) {\n if (error instanceof Error) {\n disable(error.message);\n } else {\n disable('Invalid license.');\n }\n }\n } else if (!shouldContactRegistry) {\n disable(storedInfo.error);\n }\n\n if (shouldContactRegistry) {\n result.license = license ?? null;\n const query = strapi.db.queryBuilder('strapi::core-store').transacting(transaction);\n\n if (!storedInfo) {\n query.insert({ key: 'ee_information', value: JSON.stringify(result) });\n } else {\n query.update({ value: JSON.stringify(result) }).where({ key: 'ee_information' });\n }\n\n await query.execute();\n }\n\n await commit();\n } catch (error) {\n // Example of errors: SQLite does not support FOR UPDATE\n await rollback();\n }\n};\n\nconst validateInfo = () => {\n if (typeof ee.licenseInfo.expireAt === 'undefined') {\n throw new Error('Missing license key.');\n }\n\n const expirationTime = new Date(ee.licenseInfo.expireAt).getTime();\n\n if (expirationTime < new Date().getTime()) {\n return disable('License expired.');\n }\n\n enable();\n};\n\nconst checkLicense = async ({ strapi }: { strapi: Core.Strapi }) => {\n const shouldStayOffline =\n ee.licenseInfo.type === 'gold' &&\n // This env variable support is temporarily used to ease the migration between online vs offline\n process.env.STRAPI_DISABLE_LICENSE_PING?.toLowerCase() === 'true';\n\n if (!shouldStayOffline) {\n await onlineUpdate({ strapi });\n\n strapi.cron.add({\n onlineUpdate: {\n task: () => onlineUpdate({ strapi }),\n options: shiftCronExpression('0 0 */12 * * *'),\n },\n });\n } else {\n if (!ee.licenseInfo.expireAt) {\n return disable('Your license does not have offline support.');\n }\n\n validateInfo();\n }\n};\n\nconst list = () => {\n return (\n ee.licenseInfo.features?.map((feature) =>\n typeof feature === 'object' ? feature : { name: feature }\n ) || []\n );\n};\n\nconst get = (featureName: string) => list().find((feature) => feature.name === featureName);\n\nexport default Object.freeze({\n init,\n checkLicense,\n\n get isEE() {\n return ee.enabled;\n },\n\n get seats() {\n return ee.licenseInfo.seats;\n },\n\n features: Object.freeze({\n list,\n get,\n isEnabled: (featureName: string) => get(featureName) !== undefined,\n }),\n});\n","import path from 'path';\nimport packageJson from 'package-json';\nimport Configstore from 'configstore';\nimport semver from 'semver';\nimport boxen from 'boxen';\nimport chalk from 'chalk';\nimport { env } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport pkg from '../../../package.json';\n\nconst CHECK_INTERVAL = 1000 * 60 * 60 * 24 * 1; // 1 day\nconst NOTIF_INTERVAL = 1000 * 60 * 60 * 24 * 7; // 1 week\nconst boxenOptions: boxen.Options = {\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'round',\n};\n\nconst getUpdateMessage = (newVersion: string, currentVersion: string) => {\n const currentVersionLog = chalk.dim(currentVersion);\n const newVersionLog = chalk.green(newVersion);\n const releaseLink = chalk.bold('https://github.com/strapi/strapi/releases');\n\n return `\nA new version of Strapi is available ${currentVersionLog} → ${newVersionLog}\nCheck out the new releases at: ${releaseLink}\n`.trim();\n};\n\nexport const createUpdateNotifier = (strapi: Core.Strapi) => {\n let config: InstanceType<typeof Configstore>;\n\n try {\n config = new Configstore(\n pkg.name,\n {},\n { configPath: path.join(strapi.dirs.app.root, '.strapi-updater.json') }\n );\n } catch {\n // we don't have write access to the file system\n // we silence the error\n return;\n }\n\n const checkUpdate = async (checkInterval: number) => {\n const now = Date.now();\n const lastUpdateCheck = config.get('lastUpdateCheck') || 0;\n if (lastUpdateCheck + checkInterval > now) {\n return;\n }\n\n try {\n const res = await packageJson(pkg.name);\n if (res.version) {\n config.set('latest', res.version);\n config.set('lastUpdateCheck', now);\n }\n } catch {\n // silence error if offline\n }\n };\n\n const display = (notifInterval: number) => {\n const now = Date.now();\n const latestVersion = config.get('latest');\n const lastNotification = config.get('lastNotification') || 0;\n\n if (\n !process.stdout.isTTY ||\n lastNotification + notifInterval > now ||\n !semver.valid(latestVersion) ||\n !semver.valid(pkg.version) ||\n semver.lte(latestVersion, pkg.version)\n ) {\n return;\n }\n\n const message = boxen(getUpdateMessage(latestVersion, pkg.version), boxenOptions);\n config.set('lastNotification', now);\n console.log(message);\n };\n\n // TODO v6: Remove this warning\n if (env.bool('STRAPI_DISABLE_UPDATE_NOTIFICATION', false)) {\n strapi.log.warn(\n 'STRAPI_DISABLE_UPDATE_NOTIFICATION is no longer supported. Instead, set logger.updates.enabled to false in your server configuration.'\n );\n }\n\n if (!strapi.config.get('server.logger.updates.enabled') || !config) {\n return;\n }\n\n display(NOTIF_INTERVAL);\n checkUpdate(CHECK_INTERVAL); // doesn't need to await\n};\n","import type { Core, Modules } from '@strapi/types';\nimport { ProxyAgent } from 'undici';\n\n// TODO: once core Node exposes a stable way to create a ProxyAgent we will use that instead of undici\n\n// Create a wrapper for Node's Fetch API that applies a global proxy\nexport const createStrapiFetch = (strapi: Core.Strapi): Modules.Fetch.Fetch => {\n function strapiFetch(url: RequestInfo | URL, options?: RequestInit) {\n const fetchOptions = {\n ...(strapiFetch.dispatcher ? { dispatcher: strapiFetch.dispatcher } : {}),\n ...options,\n };\n strapi.log.debug(`Making request for ${url}`);\n return fetch(url, fetchOptions);\n }\n\n const proxy =\n strapi.config.get<ConstructorParameters<typeof ProxyAgent>[0]>('server.proxy.fetch') ||\n strapi.config.get<string>('server.proxy.global');\n\n if (proxy) {\n strapi.log.info(`Using proxy for Fetch requests: ${proxy}`);\n strapiFetch.dispatcher = new ProxyAgent(proxy);\n }\n\n return strapiFetch;\n};\n\nexport type Fetch = Modules.Fetch.Fetch;\n","import type { Core } from '@strapi/types';\n\ntype InputAttributes = {\n [key: string]: {\n type: string;\n customField?: string;\n };\n};\n\nexport const convertCustomFieldType = (strapi: Core.Strapi) => {\n const allContentTypeSchemaAttributes = Object.values(strapi.contentTypes).map(\n (schema) => schema.attributes\n );\n\n const allComponentSchemaAttributes = Object.values(strapi.components).map(\n (schema) => schema.attributes\n );\n const allSchemasAttributes: InputAttributes[] = [\n ...allContentTypeSchemaAttributes,\n ...allComponentSchemaAttributes,\n ];\n\n for (const schemaAttrbutes of allSchemasAttributes) {\n for (const attribute of Object.values(schemaAttrbutes)) {\n if (attribute.type === 'customField') {\n const customField = strapi.get('custom-fields').get(attribute.customField);\n attribute.type = customField.type;\n }\n }\n }\n};\n","import chalk from 'chalk';\nimport CLITable from 'cli-table3';\nimport _ from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\nexport const createStartupLogger = (app: Core.Strapi) => {\n return {\n logStats() {\n const columns = Math.min(process.stderr.columns, 80) - 2;\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Project information')));\n console.log();\n\n const infoTable = new CLITable({\n colWidths: [20, 50],\n chars: { mid: '', 'left-mid': '', 'mid-mid': '', 'right-mid': '' },\n });\n\n const dbInfo = app.db?.getInfo();\n\n infoTable.push(\n [chalk.blue('Time'), `${new Date()}`],\n [chalk.blue('Launched in'), `${Date.now() - app.config.launchedAt} ms`],\n [chalk.blue('Environment'), app.config.environment],\n [chalk.blue('Process PID'), process.pid],\n [chalk.blue('Version'), `${app.config.info.strapi} (node ${process.version})`],\n [chalk.blue('Edition'), app.EE ? 'Enterprise' : 'Community'],\n [chalk.blue('Database'), dbInfo?.client],\n [chalk.blue('Database name'), dbInfo?.displayName]\n );\n\n if (dbInfo?.schema) {\n infoTable.push([chalk.blue('Database schema'), dbInfo.schema]);\n }\n\n console.log(infoTable.toString());\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Actions available')));\n console.log();\n },\n\n logFirstStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n\n this.logStats();\n\n console.log(chalk.bold('One more thing...'));\n console.log(\n chalk.grey('Create your first administrator 💻 by going to the administration panel at:')\n );\n console.log();\n\n const addressTable = new CLITable();\n\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n addressTable.push([chalk.bold(adminUrl)]);\n\n console.log(`${addressTable.toString()}`);\n console.log();\n },\n\n logDefaultStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n this.logStats();\n\n console.log(chalk.bold('Welcome back!'));\n\n if (app.config.get('admin.serveAdminPanel') === true) {\n console.log(chalk.grey('To manage your project 🚀, go to the administration panel at:'));\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n console.log(chalk.bold(adminUrl));\n console.log();\n }\n\n console.log(chalk.grey('To access the server ⚡️, go to:'));\n const serverUrl = strapi.config.get('server.absoluteUrl');\n console.log(chalk.bold(serverUrl));\n console.log();\n },\n\n logStartupMessage({ isInitialized }: { isInitialized: boolean }) {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n if (!isInitialized) {\n this.logFirstStartupMessage();\n } else {\n this.logDefaultStartupMessage();\n }\n },\n };\n};\n","import { type Model, type Identifiers } from '@strapi/database';\nimport type { Struct, Schema } from '@strapi/types';\nimport { createId } from '@paralleldrive/cuid2';\nimport assert from 'node:assert';\nimport _ from 'lodash/fp';\n\n/**\n * Because strapi/database models don't know about things like components or dynamic zones, we use this file to convert them\n * to a relations format that it recognizes\n *\n * Therefore we have to keep an additional set of helpers/extensions to the database naming methods\n *\n * IMPORTANT!\n * If we use short versions of anything, we MUST call getNameFromTokens directly; attempting to shorten them ourselves\n * prevents the unshortened name map from being filled properly, so for example it will think that the short name\n * 'collection4f3a_cmps' maps to the unshortened 'collectionname_cmps' rather than 'collectionname_components'\n * Therefore, we only use the identifiers helpers in cases where we do not do any of our own shortening\n */\n\nexport const getComponentJoinTableName = (collectionName: string, identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: collectionName, compressible: true },\n { name: 'components', shortName: 'cmps', compressible: false },\n ]);\n};\n\nexport const getDzJoinTableName = (collectionName: string, identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: collectionName, compressible: true },\n { name: 'components', shortName: 'cmps', compressible: false },\n ]);\n};\n\nexport const getComponentJoinColumnEntityName = (identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: 'entity', compressible: false },\n { name: 'id', compressible: false },\n ]);\n};\n\nexport const getComponentJoinColumnInverseName = (identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: 'component', shortName: 'cmp', compressible: false },\n { name: 'id', compressible: false },\n ]);\n};\n\nexport const getComponentTypeColumn = (identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([{ name: 'component_type', compressible: false }]);\n};\n\nexport const getComponentFkIndexName = (contentType: string, identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: contentType, compressible: true },\n { name: 'entity', compressible: false },\n { name: 'fk', compressible: false },\n ]);\n};\n\n// const { ID_COLUMN: id, FIELD_COLUMN: field, ORDER_COLUMN: order } = identifiers;\n\nexport type LoadedContentTypeModel = Struct.ContentTypeSchema &\n Required<Pick<Struct.ContentTypeSchema, 'collectionName' | 'uid' | 'modelName'>> &\n Pick<Model, 'lifecycles'>;\n\n// Transforms an attribute (particularly for relation types) into the format that strapi/database accepts\nexport const transformAttribute = (\n name: string,\n attribute: Schema.Attribute.AnyAttribute,\n contentType: LoadedContentTypeModel,\n identifiers: Identifiers\n) => {\n switch (attribute.type) {\n case 'media': {\n return {\n type: 'relation',\n relation: attribute.multiple === true ? 'morphMany' : 'morphOne',\n target: 'plugin::upload.file',\n morphBy: 'related',\n };\n }\n case 'component': {\n const joinTableName = getComponentJoinTableName(contentType.collectionName, identifiers);\n const joinColumnEntityName = getComponentJoinColumnEntityName(identifiers);\n const joinColumnInverseName = getComponentJoinColumnInverseName(identifiers);\n const compTypeColumn = getComponentTypeColumn(identifiers);\n return {\n type: 'relation',\n relation: attribute.repeatable === true ? 'oneToMany' : 'oneToOne',\n target: attribute.component,\n\n // We need the join table name to be deterministic,\n // We need to allow passing the join table name as an option\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: identifiers.ID_COLUMN,\n },\n inverseJoinColumn: {\n name: joinColumnInverseName,\n referencedColumn: identifiers.ID_COLUMN,\n },\n on: {\n field: name,\n },\n orderColumnName: identifiers.ORDER_COLUMN,\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [\n joinColumnEntityName,\n joinColumnInverseName,\n identifiers.FIELD_COLUMN,\n compTypeColumn,\n ],\n },\n };\n }\n case 'dynamiczone': {\n const joinTableName = getDzJoinTableName(contentType.collectionName, identifiers);\n const joinColumnEntityName = getComponentJoinColumnEntityName(identifiers);\n const joinColumnInverseName = getComponentJoinColumnInverseName(identifiers);\n const compTypeColumn = getComponentTypeColumn(identifiers);\n\n return {\n type: 'relation',\n relation: 'morphToMany',\n // TODO: handle restrictions at some point\n // target: attribute.components,\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: identifiers.ID_COLUMN,\n },\n morphColumn: {\n idColumn: {\n name: joinColumnInverseName,\n referencedColumn: identifiers.ID_COLUMN,\n },\n typeColumn: {\n name: compTypeColumn,\n },\n typeField: '__component',\n },\n on: {\n field: name,\n },\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [\n joinColumnEntityName,\n joinColumnInverseName,\n identifiers.FIELD_COLUMN,\n compTypeColumn,\n ],\n },\n };\n }\n default: {\n return attribute;\n }\n }\n};\n\nexport const transformAttributes = (\n contentType: LoadedContentTypeModel,\n identifiers: Identifiers\n) => {\n return Object.keys(contentType.attributes! || {}).reduce((attrs, attrName) => {\n return {\n ...attrs,\n [attrName]: transformAttribute(\n attrName,\n contentType.attributes[attrName]!,\n contentType,\n identifiers\n ),\n };\n }, {});\n};\n\nexport const hasComponentsOrDz = (\n contentType: LoadedContentTypeModel\n): contentType is LoadedContentTypeModel & { type: 'dynamiczone' | 'component' } => {\n return Object.values(contentType.attributes || {}).some(\n (({ type }: { type: string }) => type === 'dynamiczone' || type === 'component') as any\n );\n};\n\nexport const createDocumentId = createId;\n\nconst createCompoLinkModel = (\n contentType: LoadedContentTypeModel,\n identifiers: Identifiers\n): Model => {\n const name = getComponentJoinTableName(contentType.collectionName, identifiers);\n\n const entityId = getComponentJoinColumnEntityName(identifiers);\n const componentId = getComponentJoinColumnInverseName(identifiers);\n const compTypeColumn = getComponentTypeColumn(identifiers);\n const fkIndex = getComponentFkIndexName(contentType.collectionName, identifiers);\n\n return {\n // TODO: make sure there can't be any conflicts with a prefix\n singularName: name,\n uid: name,\n tableName: name,\n attributes: {\n [identifiers.ID_COLUMN]: {\n type: 'increments',\n },\n [entityId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [componentId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [compTypeColumn]: {\n type: 'string',\n },\n [identifiers.FIELD_COLUMN]: {\n type: 'string',\n },\n [identifiers.ORDER_COLUMN]: {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n },\n },\n indexes: [\n {\n name: identifiers.getIndexName([contentType.collectionName, identifiers.FIELD_COLUMN]),\n columns: [identifiers.FIELD_COLUMN],\n },\n {\n name: identifiers.getIndexName([contentType.collectionName, compTypeColumn]),\n columns: [compTypeColumn],\n },\n {\n name: fkIndex,\n columns: [entityId],\n },\n {\n // NOTE: since we don't include attribute names, we need to be careful not to create another unique index\n name: identifiers.getUniqueIndexName([contentType.collectionName]),\n columns: [entityId, componentId, identifiers.FIELD_COLUMN, compTypeColumn],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: fkIndex,\n columns: [entityId],\n referencedColumns: [identifiers.ID_COLUMN],\n referencedTable: identifiers.getTableName(contentType.collectionName),\n onDelete: 'CASCADE',\n },\n ],\n };\n};\n\nexport const transformContentTypesToModels = (\n contentTypes: LoadedContentTypeModel[],\n identifiers: Identifiers\n): Model[] => {\n const models: Model[] = [];\n\n contentTypes.forEach((contentType) => {\n assert(contentType.collectionName, 'Content type \"collectionName\" is required');\n assert(contentType.modelName, 'Content type \"modelName\" is required');\n assert(contentType.uid, 'Content type \"uid\" is required');\n\n // Add document id to content types\n // as it is not documented\n const documentIdAttribute: Record<string, Schema.Attribute.AnyAttribute> =\n contentType.modelType === 'contentType'\n ? { documentId: { type: 'string', default: createDocumentId } }\n : {};\n\n // TODO: this needs to be combined with getReservedNames, we should not be maintaining two lists\n // Prevent user from creating a documentId attribute\n const reservedAttributeNames = ['document_id', identifiers.ID_COLUMN];\n Object.keys(contentType.attributes || {}).forEach((attributeName) => {\n const snakeCasedAttributeName = _.snakeCase(attributeName);\n if (reservedAttributeNames.includes(snakeCasedAttributeName)) {\n throw new Error(\n `The attribute \"${attributeName}\" is reserved and cannot be used in a model. Please rename \"${contentType.modelName}\" attribute \"${attributeName}\" to something else.`\n );\n }\n });\n\n if (hasComponentsOrDz(contentType)) {\n const compoLinkModel = createCompoLinkModel(contentType, identifiers);\n models.push(compoLinkModel);\n }\n\n const model: Model = {\n uid: contentType.uid,\n singularName: contentType.modelName,\n tableName: contentType.collectionName, // This gets shortened in metadata.loadModels(), so we don't shorten here or it will happen twice\n attributes: {\n [identifiers.ID_COLUMN]: {\n type: 'increments',\n },\n ...documentIdAttribute,\n ...transformAttributes(contentType, identifiers),\n },\n indexes: contentType.indexes as Model['indexes'],\n foreignKeys: contentType.foreignKeys as Model['foreignKeys'],\n lifecycles: contentType?.lifecycles ?? {},\n };\n\n // Add indexes to model\n if (contentType.modelType === 'contentType') {\n model.indexes = [\n ...(model.indexes || []),\n {\n name: identifiers.getIndexName([contentType.collectionName, 'documents']),\n // Filter attributes that are not in the schema\n columns: ['documentId', 'locale', 'publishedAt']\n .filter((n) => model.attributes[n])\n .map((name) => identifiers.getColumnName(_.snakeCase(name))),\n },\n ];\n }\n\n models.push(model);\n });\n\n return models;\n};\n","import type { Core } from '@strapi/types';\n\nexport const destroyOnSignal = (strapi: Core.Strapi) => {\n let signalReceived = false;\n\n // For unknown reasons, we receive signals 2 times.\n // As a temporary fix, we ignore the signals received after the first one.\n\n const terminateStrapi = async () => {\n if (!signalReceived) {\n signalReceived = true;\n await strapi.destroy();\n process.exit();\n }\n };\n\n ['SIGTERM', 'SIGINT'].forEach((signal) => {\n process.on(signal, terminateStrapi);\n });\n};\n","export const LIFECYCLES = {\n REGISTER: 'register',\n BOOTSTRAP: 'bootstrap',\n DESTROY: 'destroy',\n} as const;\n","import path from 'node:path';\n\n/**\n * Resolve the working directories based on the instance options.\n *\n * Behavior:\n * - `appDir` is the directory where Strapi will write every file (schemas, generated APIs, controllers or services)\n * - `distDir` is the directory where Strapi will read configurations, schemas and any compiled code\n *\n * Default values:\n * - If `appDir` is `undefined`, it'll be set to `process.cwd()`\n * - If `distDir` is `undefined`, it'll be set to `appDir`\n */\nexport const resolveWorkingDirectories = (opts: { appDir?: string; distDir?: string }) => {\n const cwd = process.cwd();\n\n const appDir = opts.appDir ? path.resolve(cwd, opts.appDir) : cwd;\n const distDir = opts.distDir ? path.resolve(cwd, opts.distDir) : appDir;\n\n return { appDir, distDir };\n};\n","import type { Core } from '@strapi/types';\n\nexport class Container implements Core.Container {\n private registerMap = new Map<string, unknown>();\n\n private serviceMap = new Map();\n\n add(name: string, resolver: unknown) {\n if (this.registerMap.has(name)) {\n throw new Error(`Cannot register already registered service ${name}`);\n }\n\n this.registerMap.set(name, resolver);\n return this;\n }\n\n get(name: string, args?: unknown) {\n // TODO: handle singleton vs instantiation everytime\n if (this.serviceMap.has(name)) {\n return this.serviceMap.get(name);\n }\n\n if (this.registerMap.has(name)) {\n const resolver = this.registerMap.get(name);\n\n if (typeof resolver === 'function') {\n this.serviceMap.set(name, resolver(this, args));\n } else {\n this.serviceMap.set(name, resolver);\n }\n\n return this.serviceMap.get(name);\n }\n\n throw new Error(`Could not resolve service ${name}`);\n }\n}\n","import path from 'path';\nimport fse from 'fs-extra';\n\nimport type { Core } from '@strapi/types';\n\ninterface StrapiFS {\n writeAppFile(optPath: string | string[], data: string): Promise<void>;\n writePluginFile(plugin: string, optPath: string | string[], data: string): Promise<void>;\n removeAppFile(optPath: string | string[]): Promise<void>;\n appendFile(optPath: string | string[], data: string): void;\n}\n\n/**\n * create strapi fs layer\n */\nexport default (strapi: Core.Strapi) => {\n function normalizePath(optPath: string | string[]) {\n const filePath = Array.isArray(optPath) ? optPath.join('/') : optPath;\n\n const normalizedPath = path.normalize(filePath).replace(/^\\/?(\\.\\/|\\.\\.\\/)+/, '');\n\n return path.resolve(strapi.dirs.app.root, normalizedPath);\n }\n\n const strapiFS: StrapiFS = {\n /**\n * Writes a file in a strapi app\n * @param {Array|string} optPath - file path\n * @param {string} data - content\n */\n writeAppFile(optPath, data) {\n const writePath = normalizePath(optPath);\n return fse.ensureFile(writePath).then(() => fse.writeFile(writePath, data));\n },\n\n /**\n * Writes a file in a plugin extensions folder\n * @param {string} plugin - plugin name\n * @param {Array|string} optPath - path to file\n * @param {string} data - content\n */\n writePluginFile(plugin, optPath, data) {\n const newPath = ['extensions', plugin].concat(optPath).join('/');\n return strapiFS.writeAppFile(newPath, data);\n },\n\n /**\n * Removes a file in strapi app\n */\n removeAppFile(optPath) {\n const removePath = normalizePath(optPath);\n return fse.remove(removePath);\n },\n\n /**\n * Appends a file in strapi app\n */\n appendFile(optPath, data) {\n const writePath = normalizePath(optPath);\n return fse.appendFileSync(writePath, data);\n },\n };\n\n return strapiFS;\n};\n","export type Subscriber = (eventName: string, ...args: any[]) => Promise<void>;\nexport type Listener = (...args: any[]) => Promise<void>;\n\nexport interface EventHub {\n emit(eventName: string, ...args: unknown[]): Promise<void>;\n subscribe(subscriber: Subscriber): () => void;\n unsubscribe(subscriber: Subscriber): void;\n on(eventName: string, listener: Listener): () => void;\n off(eventName: string, listener: Listener): void;\n once(eventName: string, listener: Listener): () => void;\n destroy(): EventHub;\n removeListener(eventName: string, listener: Listener): void;\n removeAllListeners(): EventHub;\n removeAllSubscribers(): EventHub;\n addListener(eventName: string, listener: Listener): () => void;\n}\n\n/**\n * The event hub is Strapi's event control center.\n */\nexport default function createEventHub(): EventHub {\n const listeners = new Map();\n\n // Default subscriber to easily add listeners with the on() method\n const defaultSubscriber = async (eventName: string, ...args: unknown[]) => {\n if (listeners.has(eventName)) {\n for (const listener of listeners.get(eventName)) {\n await listener(...args);\n }\n }\n };\n\n // Store of subscribers that will be called when an event is emitted\n const subscribers = [defaultSubscriber];\n\n const eventHub: EventHub = {\n async emit(eventName, ...args) {\n for (const subscriber of subscribers) {\n await subscriber(eventName, ...args);\n }\n },\n\n subscribe(subscriber) {\n subscribers.push(subscriber);\n\n // Return a function to remove the subscriber\n return () => {\n eventHub.unsubscribe(subscriber);\n };\n },\n\n unsubscribe(subscriber) {\n const subscriberIndex = subscribers.indexOf(subscriber);\n\n // Only remove the subscriber if it exists\n if (subscriberIndex >= 0) {\n subscribers.splice(subscriberIndex, 1);\n }\n },\n\n on(eventName, listener) {\n if (!listeners.has(eventName)) {\n listeners.set(eventName, [listener]);\n } else {\n listeners.get(eventName).push(listener);\n }\n\n // Return a function to remove the listener\n return () => {\n eventHub.off(eventName, listener);\n };\n },\n\n off(eventName, listener) {\n listeners.get(eventName)?.splice(listeners.get(eventName).indexOf(listener), 1);\n },\n\n once(eventName, listener) {\n return eventHub.on(eventName, async (...args) => {\n eventHub.off(eventName, listener);\n return listener(...args);\n });\n },\n\n destroy() {\n this.removeAllListeners();\n this.removeAllSubscribers();\n return this;\n },\n\n removeListener(eventName, listener) {\n return eventHub.off(eventName, listener);\n },\n\n removeAllListeners() {\n listeners.clear();\n return this;\n },\n\n removeAllSubscribers() {\n subscribers.length = 0;\n return this;\n },\n\n addListener(eventName, listener) {\n return eventHub.on(eventName, listener);\n },\n };\n\n return eventHub;\n}\n","import http from 'http';\nimport type { Socket } from 'net';\nimport Koa from 'koa';\nimport type { Core } from '@strapi/types';\n\nexport interface Server extends http.Server {\n destroy: () => Promise<void>;\n}\n\nconst createHTTPServer = (strapi: Core.Strapi, koaApp: Koa): Server => {\n const connections = new Set<Socket>();\n\n // lazy creation of the request listener\n let handler: http.RequestListener;\n const listener: http.RequestListener = function handleRequest(req, res) {\n if (!handler) {\n handler = koaApp.callback();\n }\n\n return handler(req, res);\n };\n\n const options = strapi.config.get<http.ServerOptions>('server.http.serverOptions', {});\n\n const server: http.Server = http.createServer(options, listener);\n\n server.on('connection', (connection) => {\n connections.add(connection);\n\n connection.on('close', () => {\n connections.delete(connection);\n });\n });\n\n // handle port in use cleanly\n server.on('error', (err) => {\n if ('code' in err && 'port' in err && err.code === 'EADDRINUSE') {\n return strapi.stopWithError(`The port ${err.port} is already used by another application.`);\n }\n\n strapi.log.error(err);\n });\n\n const destroy = async () => {\n for (const connection of connections) {\n connection.destroy();\n\n connections.delete(connection);\n }\n\n if (!server.listening) {\n return;\n }\n\n return new Promise<void>((resolve, reject) => {\n server.close((error) => {\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n });\n });\n };\n\n return Object.assign(server, { destroy });\n};\n\nexport { createHTTPServer };\n","import path from 'path';\nimport { isArray } from 'lodash/fp';\nimport { importDefault } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nconst instantiateMiddleware = (\n middlewareFactory: Core.MiddlewareFactory,\n name: string,\n config: unknown,\n strapi: Core.Strapi\n) => {\n try {\n return middlewareFactory(config, { strapi });\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`Middleware \"${name}\": ${e.message}`);\n }\n }\n};\n\nconst resolveRouteMiddlewares = (route: Core.Route, strapi: Core.Strapi) => {\n const middlewaresConfig = route?.config?.middlewares ?? [];\n\n if (!isArray(middlewaresConfig)) {\n throw new Error('Route middlewares config must be an array');\n }\n\n const middlewares = resolveMiddlewares(middlewaresConfig, strapi);\n\n return middlewares.map(({ handler }) => handler);\n};\n\nconst dummyMiddleware: Core.MiddlewareHandler = (_, next) => next();\n\n/**\n * Initialize every configured middlewares\n */\nconst resolveMiddlewares = (\n config: Array<Core.MiddlewareName | Core.MiddlewareConfig | Core.MiddlewareHandler>,\n strapi: Core.Strapi\n) => {\n const middlewares: {\n name: string | null;\n handler: Core.MiddlewareHandler;\n }[] = [];\n\n for (const item of config) {\n if (typeof item === 'function') {\n middlewares.push({\n name: null,\n handler: item,\n });\n\n continue;\n }\n\n if (typeof item === 'string') {\n const middlewareFactory = strapi.middleware(item);\n\n if (!middlewareFactory) {\n throw new Error(`Middleware ${item} not found.`);\n }\n\n middlewares.push({\n name: item,\n handler: instantiateMiddleware(middlewareFactory, item, {}, strapi) ?? dummyMiddleware,\n });\n\n continue;\n }\n\n if (typeof item === 'object' && item !== null) {\n const { name, resolve, config = {} } = item;\n\n if (name) {\n const middlewareFactory = strapi.middleware(name);\n middlewares.push({\n name,\n handler:\n instantiateMiddleware(middlewareFactory, name, config, strapi) ?? dummyMiddleware,\n });\n\n continue;\n }\n\n if (resolve) {\n const resolvedMiddlewareFactory = resolveCustomMiddleware(resolve, strapi);\n middlewares.push({\n name: resolve,\n handler:\n instantiateMiddleware(resolvedMiddlewareFactory, resolve, config, strapi) ??\n dummyMiddleware,\n });\n\n continue;\n }\n\n throw new Error('Invalid middleware configuration. Missing name or resolve properties.');\n }\n\n throw new Error(\n 'Middleware config must either be a string or an object {name?: string, resolve?: string, config: any}.'\n );\n }\n\n return middlewares;\n};\n\n/**\n * Resolve middleware from package name or path\n */\nconst resolveCustomMiddleware = (resolve: string, strapi: Core.Strapi) => {\n let modulePath;\n\n try {\n modulePath = require.resolve(resolve);\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'MODULE_NOT_FOUND') {\n modulePath = path.resolve(strapi.dirs.dist.root, resolve);\n } else {\n throw error;\n }\n }\n\n try {\n return importDefault(modulePath);\n } catch (err) {\n throw new Error(`Could not load middleware \"${modulePath}\".`);\n }\n};\n\nexport { resolveRouteMiddlewares, resolveMiddlewares };\n","import { policy as policyUtils, errors } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nconst createPolicicesMiddleware = (route: Core.Route, strapi: Core.Strapi) => {\n const policiesConfig = route?.config?.policies ?? [];\n const resolvedPolicies = strapi.get('policies').resolve(policiesConfig, route.info);\n\n const policiesMiddleware: Core.MiddlewareHandler = async (ctx, next) => {\n const context = policyUtils.createPolicyContext('koa', ctx);\n\n for (const { handler, config } of resolvedPolicies) {\n const result = await handler(context, config, { strapi });\n\n if (![true, undefined].includes(result)) {\n throw new errors.PolicyError();\n }\n }\n\n await next();\n };\n\n return policiesMiddleware;\n};\n\nexport { createPolicicesMiddleware };\n","import { toLower, castArray, trim, prop, isNil } from 'lodash/fp';\nimport type { Core, UID } from '@strapi/types';\nimport { errors } from '@strapi/utils';\nimport Router from '@koa/router';\n\nimport compose from 'koa-compose';\nimport { resolveRouteMiddlewares } from './middleware';\nimport { createPolicicesMiddleware } from './policy';\n\nconst getMethod = (route: Core.Route) => {\n return trim(toLower(route.method)) as Lowercase<Core.Route['method']>;\n};\n\nconst getPath = (route: Core.Route) => trim(route.path);\n\nconst createRouteInfoMiddleware =\n (routeInfo: Core.Route): Core.MiddlewareHandler =>\n (ctx, next) => {\n const route = {\n ...routeInfo,\n config: routeInfo.config || {},\n };\n\n ctx.state.route = route;\n return next();\n };\n\nconst getAuthConfig = prop('config.auth');\n\nconst createAuthorizeMiddleware =\n (strapi: Core.Strapi): Core.MiddlewareHandler =>\n async (ctx, next) => {\n const { auth, route } = ctx.state;\n\n const authService = strapi.get('auth');\n\n try {\n await authService.verify(auth, getAuthConfig(route));\n\n return await next();\n } catch (error) {\n if (error instanceof errors.UnauthorizedError) {\n return ctx.unauthorized();\n }\n\n if (error instanceof errors.ForbiddenError) {\n // allow PolicyError as an exception to throw a publicly visible message in the API\n if (error instanceof errors.PolicyError) {\n throw error;\n }\n return ctx.forbidden();\n }\n\n throw error;\n }\n };\n\nconst createAuthenticateMiddleware =\n (strapi: Core.Strapi): Core.MiddlewareHandler =>\n async (ctx, next) => {\n return strapi.get('auth').authenticate(ctx, next);\n };\n\nconst returnBodyMiddleware: Core.MiddlewareHandler = async (ctx, next) => {\n const values = await next();\n\n if (isNil(ctx.body) && !isNil(values)) {\n ctx.body = values;\n }\n};\n\nexport default (strapi: Core.Strapi) => {\n const authenticate = createAuthenticateMiddleware(strapi);\n const authorize = createAuthorizeMiddleware(strapi);\n\n return (route: Core.Route, { router }: { router: Router }) => {\n try {\n const method = getMethod(route);\n const path = getPath(route);\n\n const middlewares = resolveRouteMiddlewares(route, strapi);\n\n const action = getAction(route, strapi);\n\n const routeHandler = compose([\n createRouteInfoMiddleware(route),\n authenticate,\n authorize,\n createPolicicesMiddleware(route, strapi),\n ...middlewares,\n returnBodyMiddleware,\n ...castArray(action),\n ]);\n\n router[method](path, routeHandler);\n } catch (error) {\n if (error instanceof Error) {\n error.message = `Error creating endpoint ${route.method} ${route.path}: ${error.message}`;\n }\n\n throw error;\n }\n };\n};\n\nconst getController = (\n name: string,\n { pluginName, apiName }: Core.RouteInfo,\n strapi: Core.Strapi\n) => {\n let ctrl: Core.Controller | undefined;\n\n if (pluginName) {\n if (pluginName === 'admin') {\n ctrl = strapi.controller(`admin::${name}`);\n } else {\n ctrl = strapi.plugin(pluginName).controller(name);\n }\n } else if (apiName) {\n ctrl = strapi.controller(`api::${apiName}.${name}`);\n }\n\n if (!ctrl) {\n return strapi.controller(name as UID.Controller);\n }\n\n return ctrl;\n};\n\nconst extractHandlerParts = (name: string) => {\n const controllerName = name.slice(0, name.lastIndexOf('.'));\n const actionName = name.slice(name.lastIndexOf('.') + 1);\n\n return { controllerName, actionName };\n};\n\nconst getAction = (route: Core.Route, strapi: Core.Strapi) => {\n const { handler, info } = route;\n const { pluginName, apiName, type } = info ?? {};\n\n if (Array.isArray(handler) || typeof handler === 'function') {\n return handler;\n }\n\n const { controllerName, actionName } = extractHandlerParts(trim(handler));\n\n const controller = getController(controllerName, { pluginName, apiName, type }, strapi);\n\n if (typeof controller[actionName] !== 'function') {\n throw new Error(`Handler not found \"${handler}\"`);\n }\n\n if (Symbol.for('__type__') in controller[actionName]) {\n (controller[actionName] as any)[Symbol.for('__type__')].push(type);\n } else {\n (controller[actionName] as any)[Symbol.for('__type__')] = [type];\n }\n\n return controller[actionName].bind(controller);\n};\n","import Router from '@koa/router';\nimport { has } from 'lodash/fp';\nimport { yup } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport createEndpointComposer from './compose-endpoint';\n\nconst policyOrMiddlewareSchema = yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (typeof value === 'function') {\n return yup.mixed().isFunction();\n }\n\n return yup.object({\n name: yup.string().required(),\n options: yup.object().notRequired(), // any options\n });\n});\n\nconst routeSchema = yup.object({\n method: yup.string().oneOf(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'ALL']).required(),\n path: yup.string().required(),\n handler: yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (Array.isArray(value)) {\n return yup.array().required();\n }\n\n return yup.mixed().isFunction().required();\n }),\n config: yup\n .object({\n auth: yup.lazy((value) => {\n if (value === false) {\n return yup.boolean().required();\n }\n\n return yup.object({\n scope: yup.array().of(yup.string()).required(),\n });\n }),\n policies: yup\n .array()\n // FIXME: fixed in yup v1\n .of(policyOrMiddlewareSchema as any)\n .notRequired(),\n middlewares: yup\n .array()\n // FIXME: fixed in yup v1\n .of(policyOrMiddlewareSchema as any)\n .notRequired(),\n })\n .notRequired(),\n});\n\nconst validateRouteConfig = (routeConfig: Core.RouteInput) => {\n try {\n return routeSchema.validateSync(routeConfig, {\n strict: true,\n abortEarly: false,\n stripUnknown: true,\n });\n } catch (error) {\n if (error instanceof yup.ValidationError) {\n throw new Error(`Invalid route config ${error.message}`);\n }\n }\n};\n\nconst createRouteManager = (strapi: Core.Strapi, opts: { type?: string } = {}) => {\n const { type } = opts;\n\n const composeEndpoint = createEndpointComposer(strapi);\n\n const createRoute = (route: Core.RouteInput, router: Router) => {\n validateRouteConfig(route);\n\n // NOTE: the router type is used to tag controller actions and for authentication / authorization so we need to pass this info down to the route level\n const routeWithInfo = Object.assign(route, {\n info: {\n ...(route.info ?? {}),\n type: type || 'api',\n },\n });\n\n composeEndpoint(routeWithInfo, { router });\n };\n\n const addRoutes = (routes: Core.Router | Core.RouteInput[], router: Router) => {\n if (Array.isArray(routes)) {\n routes.forEach((route) => createRoute(route, router));\n } else if (routes.routes) {\n const subRouter = new Router({ prefix: routes.prefix });\n\n routes.routes.forEach((route) => {\n const hasPrefix = has('prefix', route.config);\n createRoute(route, hasPrefix ? router : subRouter);\n });\n\n return router.use(subRouter.routes(), subRouter.allowedMethods());\n }\n };\n\n return {\n addRoutes,\n };\n};\n\nexport { validateRouteConfig, createRouteManager };\n","import Router from '@koa/router';\nimport type { Core } from '@strapi/types';\n\nimport { createRouteManager } from './routing';\n\ninterface Options {\n prefix?: string;\n type?: string;\n}\n\nconst createAPI = (strapi: Core.Strapi, opts: Options = {}) => {\n const { prefix, type } = opts;\n\n const api = new Router({ prefix });\n\n const routeManager = createRouteManager(strapi, { type });\n\n return {\n listRoutes() {\n return [...api.stack];\n },\n\n use(fn: Router.Middleware) {\n api.use(fn);\n return this;\n },\n\n routes(routes: Core.Router | Core.Route[]) {\n routeManager.addRoutes(routes, api);\n return this;\n },\n\n mount(router: Router) {\n router.use(api.routes(), api.allowedMethods());\n return this;\n },\n };\n};\n\nexport { createAPI };\n","import type { Core } from '@strapi/types';\nimport { createAPI } from './api';\n\nconst createAdminAPI = (strapi: Core.Strapi) => {\n const opts = {\n prefix: '', // '/admin';\n type: 'admin',\n };\n\n return createAPI(strapi, opts);\n};\n\nexport { createAdminAPI };\n","import type { Core } from '@strapi/types';\nimport { createAPI } from './api';\n\nconst createContentAPI = (strapi: Core.Strapi) => {\n const opts = {\n prefix: strapi.config.get('api.rest.prefix', '/api'),\n type: 'content-api',\n };\n\n return createAPI(strapi, opts);\n};\n\nexport { createContentAPI };\n","import _ from 'lodash';\nimport type { Core } from '@strapi/types';\n\nconst createRouteScopeGenerator = (namespace: string) => (route: Core.RouteInput) => {\n const prefix = namespace.endsWith('::') ? namespace : `${namespace}.`;\n\n if (typeof route.handler === 'string') {\n _.defaultsDeep(route, {\n config: {\n auth: {\n scope: [`${route.handler.startsWith(prefix) ? '' : prefix}${route.handler}`],\n },\n },\n });\n }\n};\n\n/**\n * Register all routes\n */\nexport default (strapi: Core.Strapi) => {\n registerAdminRoutes(strapi);\n registerAPIRoutes(strapi);\n registerPluginRoutes(strapi);\n};\n\n/**\n * Register admin routes\n * @param {import('../../').Strapi} strapi\n */\nconst registerAdminRoutes = (strapi: Core.Strapi) => {\n const generateRouteScope = createRouteScopeGenerator(`admin::`);\n\n _.forEach(strapi.admin.routes, (router) => {\n router.type = router.type || 'admin';\n router.prefix = router.prefix || `/admin`;\n router.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName: 'admin' };\n });\n strapi.server.routes(router);\n });\n};\n\n/**\n * Register plugin routes\n * @param {import('../../').Strapi} strapi\n */\nconst registerPluginRoutes = (strapi: Core.Strapi) => {\n for (const pluginName of Object.keys(strapi.plugins)) {\n const plugin = strapi.plugins[pluginName];\n\n const generateRouteScope = createRouteScopeGenerator(`plugin::${pluginName}`);\n\n if (Array.isArray(plugin.routes)) {\n plugin.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName };\n });\n\n strapi.server.routes({\n type: 'admin',\n prefix: `/${pluginName}`,\n routes: plugin.routes,\n });\n } else {\n _.forEach(plugin.routes, (router) => {\n router.type = router.type || 'admin';\n router.prefix = router.prefix || `/${pluginName}`;\n router.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName };\n });\n\n strapi.server.routes(router);\n });\n }\n }\n};\n\n/**\n * Register api routes\n */\nconst registerAPIRoutes = (strapi: Core.Strapi) => {\n for (const apiName of Object.keys(strapi.apis)) {\n const api = strapi.api(apiName);\n\n const generateRouteScope = createRouteScopeGenerator(`api::${apiName}`);\n\n _.forEach(api.routes, (router) => {\n // TODO: remove once auth setup\n // pass meta down to compose endpoint\n router.type = 'content-api';\n router.routes?.forEach((route) => {\n generateRouteScope(route);\n route.info = { apiName };\n });\n\n return strapi.server.routes(router);\n });\n }\n};\n","import { yup } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\nimport { resolveMiddlewares } from './middleware';\n\ntype MiddlewareConfig = (string | { name?: string; resolve?: string; config?: unknown })[];\n\nconst defaultConfig = [\n 'strapi::logger',\n 'strapi::errors',\n 'strapi::security',\n 'strapi::cors',\n 'strapi::poweredBy',\n 'strapi::session',\n 'strapi::query',\n 'strapi::body',\n 'strapi::favicon',\n 'strapi::public',\n];\n\nconst requiredMiddlewares = [\n 'strapi::errors',\n 'strapi::security',\n 'strapi::cors',\n 'strapi::query',\n 'strapi::body',\n 'strapi::public',\n 'strapi::favicon',\n];\n\nconst middlewareConfigSchema = yup.array().of(\n yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (typeof value === 'object') {\n return yup\n .object({\n name: yup.string(),\n resolve: yup.string(),\n config: yup.mixed(),\n })\n .required()\n .noUnknown();\n }\n\n return yup.mixed().test(() => false);\n }) as any // FIXME: yup v1\n);\n\n/**\n * Register middlewares in router\n */\nconst registerApplicationMiddlewares = async (strapi: Core.Strapi) => {\n const middlewareConfig: MiddlewareConfig = strapi.config.get('middlewares', defaultConfig);\n\n await validateMiddlewareConfig(middlewareConfig);\n\n const middlewares = await resolveMiddlewares(middlewareConfig, strapi);\n\n checkRequiredMiddlewares(middlewares);\n\n // NOTE: exclude middlewares that return nothing.\n // this is used for middlewares that only extend the app only need to be added in certain conditions\n for (const middleware of middlewares) {\n strapi.server.use(middleware.handler);\n }\n};\n\n/**\n *\n * @param {MiddlewaresConfig} config\n */\nconst validateMiddlewareConfig = async (config: MiddlewareConfig) => {\n try {\n await middlewareConfigSchema.validate(config, { strict: true, abortEarly: false });\n } catch (error) {\n throw new Error(\n 'Invalid middleware configuration. Expected Array<string|{name?: string, resolve?: string, config: any}.'\n );\n }\n};\n\n/**\n * Check if some required middlewares are missing in configure middlewares\n * @param {Middlewares} middlewares\n */\nconst checkRequiredMiddlewares = (middlewares: { name: string | null }[]) => {\n const missingMiddlewares = requiredMiddlewares.filter((name) => {\n return middlewares.findIndex((mdl) => mdl.name === name) === -1;\n });\n\n if (missingMiddlewares.length > 0) {\n throw new Error(\n `Missing required middlewares in configuration. Add the following middlewares: \"${missingMiddlewares.join(\n ', '\n )}\".`\n );\n }\n};\n\nexport default registerApplicationMiddlewares;\n","import createError from 'http-errors';\nimport { errors } from '@strapi/utils';\n\nconst mapErrorsAndStatus = [\n {\n classError: errors.UnauthorizedError,\n status: 401,\n },\n {\n classError: errors.ForbiddenError,\n status: 403,\n },\n {\n classError: errors.NotFoundError,\n status: 404,\n },\n {\n classError: errors.PayloadTooLargeError,\n status: 413,\n },\n {\n classError: errors.RateLimitError,\n status: 429,\n },\n {\n classError: errors.NotImplementedError,\n status: 501,\n },\n];\n\nconst formatApplicationError = (error: InstanceType<typeof errors.ApplicationError>) => {\n const errorAndStatus = mapErrorsAndStatus.find((pair) => error instanceof pair.classError);\n const status = errorAndStatus ? errorAndStatus.status : 400;\n\n return {\n status,\n body: {\n data: null,\n error: {\n status,\n name: error.name,\n message: error.message,\n details: error.details,\n },\n },\n };\n};\n\nconst formatHttpError = (error: createError.HttpError) => {\n return {\n status: error.status,\n body: {\n data: null,\n error: {\n status: error.status,\n name: error.name,\n message: error.message,\n details: error.details,\n },\n },\n };\n};\n\nconst formatInternalError = (error: unknown) => {\n if (!(error instanceof Error)) {\n return formatHttpError(createError(500));\n }\n\n const httpError = createError(error);\n\n if (httpError.expose) {\n return formatHttpError(httpError);\n }\n\n return formatHttpError(createError(httpError.status || 500));\n};\n\nexport { formatApplicationError, formatHttpError, formatInternalError };\n","import { isNil, camelCase } from 'lodash/fp';\nimport Koa from 'koa';\nimport createError from 'http-errors';\nimport delegate from 'delegates';\nimport statuses from 'statuses';\nimport { formatHttpError } from '../errors';\n\ndeclare module 'koa' {\n interface BaseResponse {\n send: (data: any, status?: number) => void;\n created: (data: any) => void;\n deleted: (data: any) => void;\n _explicitStatus: boolean;\n [key: string]: (message: string, details?: unknown) => void;\n }\n}\n\nconst addCustomMethods = (app: Koa) => {\n const delegator = delegate(app.context, 'response');\n\n /* errors */\n statuses.codes\n .filter((code) => code >= 400 && code < 600)\n .forEach((code) => {\n const name = statuses(code);\n\n const camelCasedName = camelCase(name);\n app.response[camelCasedName] = function responseCode(message = name, details = {}) {\n const httpError = createError(code, message, { details });\n const { status, body } = formatHttpError(httpError);\n this.status = status;\n this.body = body;\n };\n delegator.method(camelCasedName);\n });\n\n /* send, created, deleted */\n app.response.send = function send(data, status = 200) {\n this.status = status;\n this.body = data;\n };\n\n app.response.created = function created(data) {\n this.status = 201;\n this.body = data;\n };\n\n app.response.deleted = function deleted(data) {\n if (isNil(data)) {\n this.status = 204;\n } else {\n this.status = 200;\n this.body = data;\n }\n };\n\n delegator.method('send').method('created').method('deleted');\n\n return app;\n};\n\nconst createKoaApp = ({ proxy, keys }: { proxy: boolean; keys: string[] }) => {\n const app = new Koa({ proxy });\n app.keys = keys;\n\n addCustomMethods(app);\n\n return app;\n};\n\nexport default createKoaApp;\n","import Router from '@koa/router';\nimport type { Core, Modules } from '@strapi/types';\n\nimport { createHTTPServer } from './http-server';\nimport { createRouteManager } from './routing';\nimport { createAdminAPI } from './admin-api';\nimport { createContentAPI } from './content-api';\nimport registerAllRoutes from './register-routes';\nimport registerApplicationMiddlewares from './register-middlewares';\nimport createKoaApp from './koa';\nimport requestCtx from '../request-context';\n\nconst healthCheck: Core.MiddlewareHandler = async (ctx) => {\n ctx.set('strapi', 'You are so French!');\n ctx.status = 204;\n};\n\nconst createServer = (strapi: Core.Strapi): Modules.Server.Server => {\n const app = createKoaApp({\n proxy: strapi.config.get('server.proxy.koa'),\n keys: strapi.config.get('server.app.keys'),\n });\n\n app.use((ctx, next) => requestCtx.run(ctx, () => next()));\n\n const router = new Router();\n\n const routeManager = createRouteManager(strapi);\n\n const httpServer = createHTTPServer(strapi, app);\n\n const apis = {\n 'content-api': createContentAPI(strapi),\n admin: createAdminAPI(strapi),\n };\n\n // init health check\n router.all('/_health', healthCheck);\n\n const state = {\n mounted: false,\n };\n\n return {\n app,\n router,\n httpServer,\n\n api(name) {\n return apis[name];\n },\n\n use(...args) {\n app.use(...args);\n return this;\n },\n\n routes(routes: Core.Router | Omit<Core.Route, 'info'>[]) {\n if (!Array.isArray(routes) && routes.type) {\n const api = apis[routes.type];\n if (!api) {\n throw new Error(`API ${routes.type} not found. Possible APIs are ${Object.keys(apis)}`);\n }\n\n apis[routes.type].routes(routes);\n return this;\n }\n\n routeManager.addRoutes(routes, router);\n return this;\n },\n\n mount() {\n state.mounted = true;\n\n Object.values(apis).forEach((api) => api.mount(router));\n app.use(router.routes()).use(router.allowedMethods());\n\n return this;\n },\n\n initRouting() {\n registerAllRoutes(strapi);\n\n return this;\n },\n\n async initMiddlewares() {\n await registerApplicationMiddlewares(strapi);\n\n return this;\n },\n\n listRoutes() {\n return [...router.stack];\n },\n\n listen(...args: any[]) {\n if (!state.mounted) {\n this.mount();\n }\n\n return httpServer.listen(...args);\n },\n\n async destroy() {\n await httpServer.destroy();\n },\n };\n};\n\nexport { createServer };\n","import type { Core } from '@strapi/types';\n\nexport const createReloader = (strapi: Core.Strapi) => {\n const state = {\n shouldReload: 0,\n isWatching: true,\n };\n\n function reload() {\n if (state.shouldReload > 0) {\n // Reset the reloading state\n state.shouldReload -= 1;\n reload.isReloading = false;\n return;\n }\n\n if (strapi.config.get('autoReload')) {\n process.send?.('reload');\n }\n }\n\n Object.defineProperty(reload, 'isWatching', {\n configurable: true,\n enumerable: true,\n set(value) {\n // Special state when the reloader is disabled temporarly (see GraphQL plugin example).\n if (state.isWatching === false && value === true) {\n state.shouldReload += 1;\n }\n state.isWatching = value;\n },\n get() {\n return state.isWatching;\n },\n });\n\n reload.isReloading = false;\n reload.isWatching = true;\n\n return reload;\n};\n","import type { Core } from '@strapi/types';\n\nexport type Provider = {\n init?: (strapi: Core.Strapi) => void;\n register?: (strapi: Core.Strapi) => Promise<void>;\n bootstrap?: (strapi: Core.Strapi) => Promise<void>;\n destroy?: (strapi: Core.Strapi) => Promise<void>;\n};\n\nexport const defineProvider = (provider: Provider) => provider;\n","import _ from 'lodash';\nimport { yup, strings } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\n\nconst LIFECYCLES = [\n 'beforeCreate',\n 'afterCreate',\n 'beforeFindOne',\n 'afterFindOne',\n 'beforeFindMany',\n 'afterFindMany',\n 'beforeCount',\n 'afterCount',\n 'beforeCreateMany',\n 'afterCreateMany',\n 'beforeUpdate',\n 'afterUpdate',\n 'beforeUpdateMany',\n 'afterUpdateMany',\n 'beforeDelete',\n 'afterDelete',\n 'beforeDeleteMany',\n 'afterDeleteMany',\n] as const;\n\n/**\n * For enumerations the least common denomiator is GraphQL, where\n * values needs to match the secure name regex:\n * GraphQL Spec https://spec.graphql.org/June2018/#sec-Names\n *\n * Therefore we need to make sure our users only use values, which\n * can be returned by GraphQL, by checking the regressed values\n * agains the GraphQL regex.\n *\n * TODO V5: check if we can avoid this coupling by moving this logic\n * into the GraphQL plugin.\n */\nconst GRAPHQL_ENUM_REGEX = /^[_A-Za-z][_0-9A-Za-z]*$/;\n\nconst lifecyclesShape = _.mapValues(_.keyBy(LIFECYCLES), () => yup.mixed().nullable().isFunction());\n\nconst contentTypeSchemaValidator = yup.object().shape({\n schema: yup.object().shape({\n info: yup\n .object()\n .shape({\n displayName: yup.string().required(),\n singularName: yup.string().isKebabCase().required(),\n pluralName: yup.string().isKebabCase().required(),\n })\n .required(),\n attributes: yup.object().test({\n name: 'valuesCollide',\n message: 'Some values collide when normalized',\n test(attributes: Schema.ContentType['attributes']) {\n for (const attrName of Object.keys(attributes)) {\n const attr = attributes[attrName];\n if (attr.type === 'enumeration') {\n const regressedValues = attr.enum.map(strings.toRegressedEnumValue);\n\n // should match the GraphQL regex\n if (!regressedValues.every((value: string) => GRAPHQL_ENUM_REGEX.test(value))) {\n const message = `Invalid enumeration value. Values should have at least one alphabetical character preceding the first occurence of a number. Update your enumeration '${attrName}'.`;\n\n return this.createError({ message });\n }\n\n // should not contain empty values\n if (regressedValues.some((value: string) => value === '')) {\n return this.createError({\n message: `At least one value of the enumeration '${attrName}' appears to be empty. Only alphanumerical characters are taken into account.`,\n });\n }\n\n // should not collide\n const duplicates = _.uniq(\n regressedValues.filter(\n (value: string, index: number, values: string[]) => values.indexOf(value) !== index\n )\n );\n\n if (duplicates.length) {\n const message = `Some enumeration values of the field '${attrName}' collide when normalized: ${duplicates.join(\n ', '\n )}. Please modify your enumeration.`;\n\n return this.createError({ message });\n }\n }\n }\n\n return true;\n },\n }),\n }),\n actions: yup.object().onlyContainsFunctions(),\n lifecycles: yup.object().shape(lifecyclesShape).noUnknown(),\n});\n\nconst validateContentTypeDefinition = (data: unknown) => {\n return contentTypeSchemaValidator.validateSync(data, { strict: true, abortEarly: false });\n};\n\nexport { validateContentTypeDefinition };\n","import { cloneDeep } from 'lodash/fp';\nimport _ from 'lodash';\nimport { yup, contentTypes as contentTypesUtils } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\nimport { validateContentTypeDefinition } from './validator';\n\nexport type ContentTypeDefinition = {\n schema: Schema.ContentType;\n actions: Record<string, unknown>;\n lifecycles: Record<string, unknown>;\n};\n\nconst {\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n} = contentTypesUtils.constants;\n\nconst createContentType = (uid: string, definition: ContentTypeDefinition) => {\n try {\n validateContentTypeDefinition(definition);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n throw new Error(`Content Type Definition is invalid for ${uid}'.\\n${e.errors}`);\n }\n\n throw e;\n }\n\n const { schema, actions, lifecycles } = cloneDeep(definition);\n\n // general info\n Object.assign(schema, {\n uid,\n modelType: 'contentType',\n kind: schema.kind || 'collectionType',\n __schema__: pickSchema(definition.schema),\n modelName: definition.schema.info.singularName,\n actions,\n lifecycles,\n });\n\n addTimestamps(schema);\n\n // Published at is added regardless of draft and publish being enabled\n // In case it is not enabled, value will be always published, and it will not contain a draft\n addDraftAndPublish(schema);\n\n addCreatorFields(schema);\n\n return schema;\n};\n\nconst addTimestamps = (schema: Schema.ContentType) => {\n // attributes\n Object.assign(schema.attributes, {\n [CREATED_AT_ATTRIBUTE]: {\n type: 'datetime',\n },\n // TODO: handle on edit set to new date\n [UPDATED_AT_ATTRIBUTE]: {\n type: 'datetime',\n },\n });\n};\n\nconst addDraftAndPublish = (schema: Schema.ContentType) => {\n if (!_.has(schema, 'options.draftAndPublish')) {\n _.set(schema, 'options.draftAndPublish', false); // Disabled by default\n }\n\n schema.attributes[PUBLISHED_AT_ATTRIBUTE] = {\n type: 'datetime',\n configurable: false,\n writable: true,\n visible: false,\n default() {\n return new Date();\n },\n };\n};\n\nconst addCreatorFields = (schema: Schema.ContentType) => {\n const isPrivate = !_.get(schema, 'options.populateCreatorFields', false);\n\n schema.attributes[CREATED_BY_ATTRIBUTE] = {\n type: 'relation',\n relation: 'oneToOne',\n target: 'admin::user',\n configurable: false,\n writable: false,\n visible: false,\n useJoinTable: false,\n private: isPrivate,\n };\n\n schema.attributes[UPDATED_BY_ATTRIBUTE] = {\n type: 'relation',\n relation: 'oneToOne',\n target: 'admin::user',\n configurable: false,\n writable: false,\n visible: false,\n useJoinTable: false,\n private: isPrivate,\n };\n};\n\nconst getGlobalId = (schema: Schema.ContentType, prefix?: string) => {\n const modelName = schema.info.singularName;\n const globalId = prefix ? `${prefix}-${modelName}` : modelName;\n\n return schema.globalId || _.upperFirst(_.camelCase(globalId));\n};\n\nconst pickSchema = (model: Schema.ContentType) => {\n const schema = _.cloneDeep(\n _.pick(model, [\n 'connection',\n 'collectionName',\n 'info',\n 'options',\n 'pluginOptions',\n 'attributes',\n 'kind',\n ])\n );\n\n schema.kind = model.kind || 'collectionType';\n return schema;\n};\n\nexport { createContentType, getGlobalId };\n","import _ from 'lodash';\nimport type { Core, Struct } from '@strapi/types';\nimport { getGlobalId } from '../domain/content-type';\n\nexport default async function loadAdmin(strapi: Core.Strapi) {\n // strapi.admin = require('@strapi/admin/strapi-server');\n\n strapi.get('services').add(`admin::`, strapi.admin?.services);\n strapi.get('controllers').add(`admin::`, strapi.admin?.controllers);\n strapi.get('content-types').add(`admin::`, formatContentTypes(strapi.admin?.contentTypes ?? {}));\n strapi.get('policies').add(`admin::`, strapi.admin?.policies);\n strapi.get('middlewares').add(`admin::`, strapi.admin?.middlewares);\n\n const userAdminConfig = strapi.config.get('admin');\n strapi.get('config').set('admin', _.merge(strapi.admin?.config, userAdminConfig));\n}\n\nconst formatContentTypes = (contentTypes: Record<string, { schema: Struct.ContentTypeSchema }>) => {\n Object.values(contentTypes).forEach((definition) => {\n const { schema } = definition;\n\n Object.assign(schema, {\n plugin: 'admin',\n globalId: getGlobalId(schema, 'admin'),\n });\n });\n\n return contentTypes;\n};\n","import { defineProvider } from './provider';\nimport loadAdmin from '../loaders/admin';\n\nexport default defineProvider({\n init(strapi) {\n // eslint-disable-next-line node/no-missing-require\n strapi.add('admin', () => require('@strapi/admin/strapi-server'));\n },\n\n async register(strapi) {\n await loadAdmin(strapi);\n\n await strapi.get('admin')?.register({ strapi });\n },\n\n async bootstrap(strapi) {\n await strapi.get('admin')?.bootstrap({ strapi });\n },\n\n async destroy(strapi) {\n await strapi.get('admin')?.destroy({ strapi });\n },\n});\n","import { toString } from 'lodash/fp';\nimport type { Database, Model } from '@strapi/database';\n\nconst coreStoreModel: Model = {\n uid: 'strapi::core-store',\n singularName: 'strapi_core_store_settings',\n tableName: 'strapi_core_store_settings',\n attributes: {\n id: {\n type: 'increments',\n },\n key: {\n type: 'string',\n },\n value: {\n type: 'text',\n },\n type: {\n type: 'string',\n },\n environment: {\n type: 'string',\n },\n tag: {\n type: 'string',\n },\n },\n};\n\ntype SetParams = {\n key: string;\n value: unknown;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype GetParams = {\n key: string;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype Params = SetParams & GetParams;\n\ninterface CoreStore {\n (defaultParams: Partial<Params>): {\n get(params: Partial<GetParams>): Promise<unknown>;\n set(params: Partial<SetParams>): Promise<void>;\n delete(params: Partial<GetParams>): Promise<void>;\n };\n get(params: GetParams): Promise<unknown>;\n set(params: SetParams): Promise<void>;\n delete(params: GetParams): Promise<void>;\n}\n\nconst createCoreStore = ({ db }: { db: Database }) => {\n const mergeParams = (defaultParams: Partial<Params>, params: Params): Params => {\n return {\n ...defaultParams,\n ...params,\n };\n };\n\n const store: CoreStore = function (defaultParams: Partial<Params>) {\n return {\n get: (params: Params) => store.get(mergeParams(defaultParams, params)),\n set: (params: Params) => store.set(mergeParams(defaultParams, params)),\n delete: (params: Params) => store.delete(mergeParams(defaultParams, params)),\n };\n };\n\n /**\n * Get value from the core store\n */\n store.get = async (params) => {\n const { key, type = 'core', environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (!data) {\n return null;\n }\n\n if (\n data.type === 'object' ||\n data.type === 'array' ||\n data.type === 'boolean' ||\n data.type === 'string'\n ) {\n try {\n return JSON.parse(data.value);\n } catch (err) {\n return new Date(data.value);\n }\n } else if (data.type === 'number') {\n return Number(data.value);\n } else {\n return null;\n }\n };\n\n /**\n * Set value in the core store\n * @param {Object} params\n * @returns {*}\n */\n store.set = async (params) => {\n const { key, value, type, environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (data) {\n return db.query('strapi::core-store').update({\n where: { id: data.id },\n data: {\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n }\n\n return db.query('strapi::core-store').create({\n data: {\n ...where,\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n };\n\n /**\n * Deletes a value from the core store\n * @param {Object} params\n * @returns {*}\n */\n store.delete = async (params) => {\n const { key, environment, type, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n return db.query('strapi::core-store').delete({ where });\n };\n\n return store;\n};\n\nexport { coreStoreModel, createCoreStore };\n","import { defineProvider } from './provider';\nimport { createCoreStore, coreStoreModel } from '../services/core-store';\n\nexport default defineProvider({\n init(strapi) {\n strapi.get('models').add(coreStoreModel);\n strapi.add('coreStore', () => createCoreStore({ db: strapi.db }));\n },\n});\n","import { Job, Spec } from 'node-schedule';\nimport { isFunction } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\ninterface JobSpec {\n job: Job;\n options: Spec;\n name: string | null;\n}\n\ntype TaskFn = ({ strapi }: { strapi: Core.Strapi }, ...args: unknown[]) => Promise<unknown>;\n\ntype Task =\n | TaskFn\n | {\n task: TaskFn;\n options: Spec;\n };\n\ninterface Tasks {\n [key: string]: Task;\n}\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: Spec;\n let taskName: string | null;\n if (isFunction(taskValue)) {\n // don't use task name if key is the rule\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (isFunction(taskValue.task)) {\n // set task name if key is not the rule\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const fnWithStrapi = (...args: unknown[]) => fn({ strapi }, ...args);\n\n // const job = new Job(null, fnWithStrapi);\n const job = new Job(fnWithStrapi);\n jobsSpecs.push({ job, options, name: taskName });\n\n if (running) {\n job.schedule(options);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) throw new Error('You must provide a name to remove a cron job.');\n const matchingJobsSpecs = jobsSpecs.filter(({ name: jobSpecName }, index) => {\n if (jobSpecName === name) {\n jobsSpecs.splice(index, 1);\n return true;\n }\n return false;\n });\n matchingJobsSpecs.forEach(({ job }) => job.cancel());\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job, options }) => job.schedule(options));\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.cancel());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs = [];\n return this;\n },\n jobs: jobsSpecs,\n };\n};\n\nexport default createCronService;\n","import { defineProvider } from './provider';\nimport createCronService from '../services/cron';\n\nexport default defineProvider({\n init(strapi) {\n strapi.add('cron', () => createCronService());\n },\n async bootstrap(strapi) {\n if (strapi.config.get('server.cron.enabled', true)) {\n const cronTasks = strapi.config.get('server.cron.tasks', {});\n strapi.get('cron').add(cronTasks);\n }\n\n strapi.get('cron').start();\n },\n async destroy(strapi) {\n strapi.get('cron').destroy();\n },\n});\n","const hasNamespace = (name: string, namespace: string) => {\n if (!namespace) {\n return true;\n }\n\n if (namespace.endsWith('::')) {\n return name.startsWith(namespace);\n }\n return name.startsWith(`${namespace}.`);\n};\n\nconst addNamespace = (name: string, namespace: string) => {\n if (namespace.endsWith('::')) {\n return `${namespace}${name}`;\n }\n return `${namespace}.${name}`;\n};\n\nconst removeNamespace = (name: string, namespace: string) => {\n if (namespace.endsWith('::')) {\n return name.replace(namespace, '');\n }\n return name.replace(`${namespace}.`, '');\n};\n\nexport { addNamespace, removeNamespace, hasNamespace };\n","import { pickBy, has } from 'lodash/fp';\nimport type { UID, Struct } from '@strapi/types';\nimport { createContentType, ContentTypeDefinition } from '../domain/content-type';\nimport { addNamespace, hasNamespace } from './namespace';\n\ntype ContentTypesInput = Record<string, ContentTypeDefinition>;\ntype ContentTypeExtendFn = (contentType: Struct.ContentTypeSchema) => Struct.ContentTypeSchema;\n\nconst validateKeySameToSingularName = (contentTypes: ContentTypesInput) => {\n for (const ctName of Object.keys(contentTypes)) {\n const contentType = contentTypes[ctName];\n\n if (ctName !== contentType.schema.info.singularName) {\n throw new Error(\n `The key of the content-type should be the same as its singularName. Found ${ctName} and ${contentType.schema.info.singularName}.`\n );\n }\n }\n};\n\nconst contentTypesRegistry = () => {\n const contentTypes: Record<string, Struct.ContentTypeSchema> = {};\n\n return {\n /**\n * Returns this list of registered contentTypes uids\n */\n keys() {\n return Object.keys(contentTypes);\n },\n\n /**\n * Returns the instance of a contentType. Instantiate the contentType if not already done\n */\n get(uid: UID.ContentType) {\n return contentTypes[uid];\n },\n\n /**\n * Returns a map with all the contentTypes in a namespace\n */\n getAll(namespace: string) {\n return pickBy((_, uid) => hasNamespace(uid, namespace))(contentTypes);\n },\n\n /**\n * Registers a contentType\n */\n set(uid: UID.ContentType, contentType: Struct.ContentTypeSchema) {\n contentTypes[uid] = contentType;\n return this;\n },\n\n /**\n * Registers a map of contentTypes for a specific namespace\n */\n add(namespace: string, newContentTypes: ContentTypesInput) {\n validateKeySameToSingularName(newContentTypes);\n\n for (const rawCtName of Object.keys(newContentTypes)) {\n const uid = addNamespace(rawCtName, namespace);\n\n if (has(uid, contentTypes)) {\n throw new Error(`Content-type ${uid} has already been registered.`);\n }\n\n contentTypes[uid] = createContentType(uid, newContentTypes[rawCtName]);\n }\n },\n\n /**\n * Wraps a contentType to extend it\n */\n extend(ctUID: UID.ContentType, extendFn: ContentTypeExtendFn) {\n const currentContentType = this.get(ctUID);\n\n if (!currentContentType) {\n throw new Error(`Content-Type ${ctUID} doesn't exist`);\n }\n\n extendFn(currentContentType);\n\n return this;\n },\n };\n};\n\nexport default contentTypesRegistry;\n","import { has } from 'lodash/fp';\nimport type { Struct, UID } from '@strapi/types';\n\nconst componentsRegistry = () => {\n const components: Record<UID.Component, Struct.ComponentSchema> = {};\n\n return {\n /**\n * Returns this list of registered components uids\n */\n keys(): UID.Component[] {\n return Object.keys(components) as UID.Component[];\n },\n\n /**\n * Returns the instance of a component. Instantiate the component if not already done\n */\n get(uid: UID.Component) {\n return components[uid];\n },\n\n /**\n * Returns a map with all the components in a namespace\n */\n getAll() {\n return components;\n },\n\n /**\n * Registers a component\n */\n set(uid: UID.Component, component: Struct.ComponentSchema) {\n if (has(uid, components)) {\n throw new Error(`Component ${uid} has already been registered.`);\n }\n\n components[uid] = component;\n\n return this;\n },\n\n /**\n * Registers a map of components for a specific namespace\n */\n add(newComponents: Record<UID.Component, Struct.ComponentSchema>) {\n for (const uid of Object.keys(newComponents) as UID.Component[]) {\n this.set(uid, newComponents[uid]);\n }\n },\n };\n};\n\nexport default componentsRegistry;\n","import { pickBy, has } from 'lodash/fp';\nimport type { Core, UID } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\nexport type ServiceFactory = (params: { strapi: Core.Strapi }) => Core.Service | Core.Service;\nexport type ServiceFactoryMap = Record<string, ServiceFactory>;\nexport type ServiceMap = Record<string, Core.Service>;\nexport type ServiceExtendFn = (service: Core.Service) => Core.Service;\n\nconst servicesRegistry = (strapi: Core.Strapi) => {\n const services: ServiceFactoryMap = {};\n const instantiatedServices: ServiceMap = {};\n\n return {\n /**\n * Returns this list of registered services uids\n */\n keys() {\n return Object.keys(services);\n },\n\n /**\n * Returns the instance of a service. Instantiate the service if not already done\n */\n get(uid: UID.Service) {\n if (instantiatedServices[uid]) {\n return instantiatedServices[uid];\n }\n\n const service = services[uid];\n if (service) {\n instantiatedServices[uid] = typeof service === 'function' ? service({ strapi }) : service;\n return instantiatedServices[uid];\n }\n },\n\n /**\n * Returns a map with all the services in a namespace\n */\n getAll(namespace: string): ServiceMap {\n const filteredServices = pickBy((_, uid) => hasNamespace(uid, namespace))(services);\n\n // create lazy accessor to avoid instantiating the services;\n const map = {};\n for (const uid of Object.keys(filteredServices)) {\n Object.defineProperty(map, uid, {\n enumerable: true,\n get: () => {\n return this.get(uid as UID.Service);\n },\n });\n }\n\n return map;\n },\n\n /**\n * Registers a service\n */\n set(uid: string, service: ServiceFactory) {\n services[uid] = service;\n delete instantiatedServices[uid];\n return this;\n },\n\n /**\n * Registers a map of services for a specific namespace\n */\n add(namespace: string, newServices: ServiceFactoryMap) {\n for (const serviceName of Object.keys(newServices)) {\n const service = newServices[serviceName];\n const uid = addNamespace(serviceName, namespace);\n\n if (has(uid, services)) {\n throw new Error(`Service ${uid} has already been registered.`);\n }\n services[uid] = service;\n }\n\n return this;\n },\n\n /**\n * Wraps a service to extend it\n */\n extend(uid: UID.Service, extendFn: ServiceExtendFn) {\n const currentService = this.get(uid);\n\n if (!currentService) {\n throw new Error(`Service ${uid} doesn't exist`);\n }\n\n const newService = extendFn(currentService);\n instantiatedServices[uid] = newService;\n\n return this;\n },\n };\n};\n\nexport default servicesRegistry;\n","import { pickBy, has, castArray } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\nconst PLUGIN_PREFIX = 'plugin::';\nconst API_PREFIX = 'api::';\n\ninterface PolicyInfo {\n name: string;\n config: unknown;\n}\n\ntype PolicyConfig = string | PolicyInfo;\n\ninterface NamespaceInfo {\n pluginName?: string;\n apiName?: string;\n}\n\nconst parsePolicy = (policy: string | PolicyInfo) => {\n if (typeof policy === 'string') {\n return { policyName: policy, config: {} };\n }\n\n const { name, config } = policy;\n return { policyName: name, config };\n};\n\nconst policiesRegistry = () => {\n const policies = new Map<string, Core.Policy>();\n\n const find = (name: string, namespaceInfo?: NamespaceInfo) => {\n const { pluginName, apiName } = namespaceInfo ?? {};\n\n // try to resolve a full name to avoid extra prefixing\n const policy = policies.get(name);\n\n if (policy) {\n return policy;\n }\n\n if (pluginName) {\n return policies.get(`${PLUGIN_PREFIX}${pluginName}.${name}`);\n }\n\n if (apiName) {\n return policies.get(`${API_PREFIX}${apiName}.${name}`);\n }\n };\n\n function resolveHandler(policyConfig: PolicyConfig, namespaceInfo?: NamespaceInfo): Core.Policy;\n function resolveHandler(\n policyConfig: PolicyConfig[],\n namespaceInfo?: NamespaceInfo\n ): Core.Policy[];\n function resolveHandler(\n policyConfig: PolicyConfig | PolicyConfig[],\n namespaceInfo?: NamespaceInfo\n ): Core.Policy | Core.Policy[] {\n if (Array.isArray(policyConfig)) {\n return policyConfig.map((config) => {\n return resolveHandler(config, namespaceInfo);\n });\n }\n\n const { policyName, config } = parsePolicy(policyConfig);\n\n const policy = find(policyName, namespaceInfo);\n\n if (!policy) {\n throw new Error(`Policy ${policyName} not found.`);\n }\n\n if (typeof policy === 'function') {\n return policy;\n }\n\n if (policy.validator) {\n policy.validator(config);\n }\n\n return policy.handler;\n }\n\n return {\n /**\n * Returns this list of registered policies uids\n */\n keys() {\n // Return an array so format stays the same as controllers, services, etc\n return Array.from(policies.keys());\n },\n\n /**\n * Returns the instance of a policy. Instantiate the policy if not already done\n */\n get(name: string, namespaceInfo?: NamespaceInfo) {\n return find(name, namespaceInfo);\n },\n /**\n * Checks if a policy is registered\n */\n has(name: string, namespaceInfo?: NamespaceInfo) {\n const res = find(name, namespaceInfo);\n return !!res;\n },\n\n /**\n * Returns a map with all the policies in a namespace\n */\n getAll(namespace: string) {\n return pickBy((_, uid) => hasNamespace(uid, namespace))(Object.fromEntries(policies));\n },\n\n /**\n * Registers a policy\n */\n set(uid: string, policy: Core.Policy) {\n policies.set(uid, policy);\n return this;\n },\n\n /**\n * Registers a map of policies for a specific namespace\n */\n add(namespace: string, newPolicies: Record<string, Core.Policy>) {\n for (const policyName of Object.keys(newPolicies)) {\n const policy = newPolicies[policyName];\n const uid = addNamespace(policyName, namespace);\n\n if (has(uid, policies)) {\n throw new Error(`Policy ${uid} has already been registered.`);\n }\n\n policies.set(uid, policy);\n }\n },\n\n /**\n * Resolves a list of policies\n */\n resolve(config: PolicyConfig | PolicyConfig[], namespaceInfo?: NamespaceInfo) {\n const { pluginName, apiName } = namespaceInfo ?? {};\n\n return castArray(config).map((policyConfig) => {\n return {\n handler: resolveHandler(policyConfig, { pluginName, apiName }),\n config: (typeof policyConfig === 'object' && policyConfig.config) || {},\n };\n });\n },\n };\n};\n\nexport default policiesRegistry;\n","import { pickBy, has } from 'lodash/fp';\nimport type { Core, UID } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\ntype MiddlewareExtendFn = (middleware: Core.Middleware) => Core.Middleware;\n\n// TODO: move instantiation part here instead of in the server service\nconst middlewaresRegistry = () => {\n const middlewares: Record<UID.Middleware, Core.Middleware> = {};\n\n return {\n /**\n * Returns this list of registered middlewares uids\n */\n keys() {\n return Object.keys(middlewares);\n },\n\n /**\n * Returns the instance of a middleware. Instantiate the middleware if not already done\n */\n get(uid: UID.Middleware) {\n return middlewares[uid];\n },\n\n /**\n * Returns a map with all the middlewares in a namespace\n */\n getAll(namespace: string) {\n return pickBy((_, uid) => hasNamespace(uid, namespace))(middlewares);\n },\n\n /**\n * Registers a middleware\n */\n set(uid: UID.Middleware, middleware: Core.Middleware) {\n middlewares[uid] = middleware;\n return this;\n },\n\n /**\n * Registers a map of middlewares for a specific namespace\n */\n add(namespace: string, rawMiddlewares: Record<string, Core.Middleware> = {}) {\n for (const middlewareName of Object.keys(rawMiddlewares)) {\n const middleware = rawMiddlewares[middlewareName];\n const uid = addNamespace(middlewareName, namespace) as UID.Middleware;\n\n if (has(uid, middlewares)) {\n throw new Error(`Middleware ${uid} has already been registered.`);\n }\n middlewares[uid] = middleware;\n }\n },\n\n /**\n * Wraps a middleware to extend it\n */\n extend(uid: UID.Middleware, extendFn: MiddlewareExtendFn) {\n const currentMiddleware = this.get(uid);\n\n if (!currentMiddleware) {\n throw new Error(`Middleware ${uid} doesn't exist`);\n }\n\n const newMiddleware = extendFn(currentMiddleware);\n middlewares[uid] = newMiddleware;\n\n return this;\n },\n };\n};\n\nexport default middlewaresRegistry;\n","import { pickBy } from 'lodash/fp';\nimport { addNamespace, hasNamespace } from './namespace';\n\ntype Handler = (context: any) => any;\n\ntype AsyncHook = {\n handlers: Handler[];\n register(handler: Handler): AsyncHook;\n delete(handler: Handler): AsyncHook;\n call(): Promise<void>;\n};\n\ntype SyncHook = {\n get handlers(): Handler[];\n register(handler: Handler): SyncHook;\n delete(handler: Handler): SyncHook;\n call(): void;\n};\n\nexport type Hook = AsyncHook | SyncHook;\n\ntype HookExtendFn = (hook: Hook) => Hook;\n\nconst hooksRegistry = () => {\n const hooks: Record<string, Hook> = {};\n\n return {\n /**\n * Returns this list of registered hooks uids\n */\n keys() {\n return Object.keys(hooks);\n },\n\n /**\n * Returns the instance of a hook.\n */\n get(uid: string) {\n return hooks[uid];\n },\n\n /**\n * Returns a map with all the hooks in a namespace\n */\n getAll(namespace: string) {\n return pickBy((_, uid) => hasNamespace(uid, namespace))(hooks);\n },\n\n /**\n * Registers a hook\n */\n set(uid: string, hook: Hook) {\n hooks[uid] = hook;\n return this;\n },\n\n /**\n * Registers a map of hooks for a specific namespace\n */\n add(namespace: string, hooks: Record<string, Hook>) {\n for (const hookName of Object.keys(hooks)) {\n const hook = hooks[hookName];\n const uid = addNamespace(hookName, namespace);\n\n this.set(uid, hook);\n }\n\n return this;\n },\n\n /**\n * Wraps a hook to extend it\n */\n extend(uid: string, extendFn: HookExtendFn) {\n const currentHook = this.get(uid);\n\n if (!currentHook) {\n throw new Error(`Hook ${uid} doesn't exist`);\n }\n\n const newHook = extendFn(currentHook);\n hooks[uid] = newHook;\n\n return this;\n },\n };\n};\n\nexport default hooksRegistry;\n","import { pickBy, has } from 'lodash/fp';\nimport type { Core, UID } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\nexport type ControllerFactory =\n | ((params: { strapi: Core.Strapi }) => Core.Controller)\n | Core.Controller;\nexport type ControllerFactoryMap = Record<UID.Controller, ControllerFactory>;\nexport type ControllerMap = Record<UID.Controller, Core.Controller>;\nexport type ControllerExtendFn = (service: Core.Controller) => Core.Controller;\n\nconst controllersRegistry = (strapi: Core.Strapi) => {\n const controllers: ControllerFactoryMap = {};\n const instances: ControllerMap = {};\n\n return {\n /**\n * Returns this list of registered controllers uids\n */\n keys() {\n return Object.keys(controllers);\n },\n\n /**\n * Returns the instance of a controller. Instantiate the controller if not already done\n */\n get(uid: UID.Controller) {\n if (instances[uid]) {\n return instances[uid];\n }\n\n const controller = controllers[uid];\n\n if (controller) {\n instances[uid] = typeof controller === 'function' ? controller({ strapi }) : controller;\n return instances[uid];\n }\n },\n\n /**\n * Returns a map with all the controller in a namespace\n */\n getAll(namespace: string) {\n const filteredControllers = pickBy((_, uid) => hasNamespace(uid, namespace))(controllers);\n\n const map = {};\n for (const uid of Object.keys(filteredControllers) as UID.Controller[]) {\n Object.defineProperty(map, uid, {\n enumerable: true,\n get: () => {\n return this.get(uid);\n },\n });\n }\n\n return map;\n },\n\n /**\n * Registers a controller\n */\n set(uid: UID.Controller, value: ControllerFactory) {\n controllers[uid] = value;\n delete instances[uid];\n return this;\n },\n\n /**\n * Registers a map of controllers for a specific namespace\n */\n add(namespace: string, newControllers: ControllerFactoryMap) {\n for (const controllerName of Object.keys(newControllers) as UID.Controller[]) {\n const controller = newControllers[controllerName];\n const uid = addNamespace(controllerName, namespace) as UID.Controller;\n\n if (has(uid, controllers)) {\n throw new Error(`Controller ${uid} has already been registered.`);\n }\n\n controllers[uid] = controller;\n }\n\n return this;\n },\n\n /**\n * Wraps a controller to extend it\n */\n extend(controllerUID: UID.Controller, extendFn: ControllerExtendFn) {\n const currentController = this.get(controllerUID);\n\n if (!currentController) {\n throw new Error(`Controller ${controllerUID} doesn't exist`);\n }\n\n const newController = extendFn(currentController);\n instances[controllerUID] = newController;\n\n return this;\n },\n };\n};\n\nexport default controllersRegistry;\n","import { yup } from '@strapi/utils';\n\nconst strapiServerSchema = yup\n .object()\n .shape({\n bootstrap: yup.mixed().isFunction(),\n destroy: yup.mixed().isFunction(),\n register: yup.mixed().isFunction(),\n config: yup.object(),\n routes: yup.lazy((value) => {\n if (Array.isArray(value)) {\n return yup.array();\n }\n return yup.object();\n }),\n controllers: yup.object(),\n services: yup.object(),\n policies: yup.object(),\n middlewares: yup.object(),\n contentTypes: yup.object(),\n })\n .noUnknown();\n\nconst validateModule = (data: unknown) => {\n return strapiServerSchema.validateSync(data, { strict: true, abortEarly: false });\n};\n\nexport { validateModule };\n","import _, { type PropertyPath, flatten } from 'lodash';\nimport { yup } from '@strapi/utils';\nimport type { Core, UID, Struct } from '@strapi/types';\n\nimport { removeNamespace } from '../../registries/namespace';\nimport { validateModule } from './validation';\n\ninterface LifecyclesState {\n bootstrap?: boolean;\n register?: boolean;\n destroy?: boolean;\n}\n\nexport interface RawModule {\n config?: Record<string, unknown>;\n routes?: Core.Module['routes'];\n controllers?: Core.Module['controllers'];\n services?: Core.Module['services'];\n contentTypes?: Core.Module['contentTypes'];\n policies?: Core.Module['policies'];\n middlewares?: Core.Module['middlewares'];\n bootstrap?: (params: { strapi: Core.Strapi }) => Promise<void>;\n register?: (params: { strapi: Core.Strapi }) => Promise<void>;\n destroy?: (params: { strapi: Core.Strapi }) => Promise<void>;\n}\n\nexport interface Module {\n bootstrap: () => Promise<void>;\n register: () => Promise<void>;\n destroy: () => Promise<void>;\n load: () => void;\n routes: Core.Module['routes'];\n config<T = unknown>(key: PropertyPath, defaultVal?: T): T; // TODO: this mirrors ConfigProvider.get, we should use it directly\n contentType: (ctName: UID.ContentType) => Struct.ContentTypeSchema;\n contentTypes: Record<string, Struct.ContentTypeSchema>;\n service: (serviceName: UID.Service) => Core.Service;\n services: Record<string, Core.Service>;\n policy: (policyName: UID.Policy) => Core.Policy;\n policies: Record<string, Core.Policy>;\n middleware: (middlewareName: UID.Middleware) => Core.Middleware;\n middlewares: Record<string, Core.Middleware>;\n controller: (controllerName: UID.Controller) => Core.Controller;\n controllers: Record<string, Core.Controller>;\n}\n\n// Removes the namespace from a map with keys prefixed with a namespace\nconst removeNamespacedKeys = <T extends Record<string, unknown>>(map: T, namespace: string) => {\n return _.mapKeys(map, (value, key) => removeNamespace(key, namespace));\n};\n\nconst defaultModule = {\n config: {},\n routes: [],\n controllers: {},\n services: {},\n contentTypes: {},\n policies: {},\n middlewares: {},\n};\n\nexport const createModule = (\n namespace: string,\n rawModule: RawModule,\n strapi: Core.Strapi\n): Module => {\n _.defaults(rawModule, defaultModule);\n\n try {\n validateModule(rawModule);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n throw new Error(`strapi-server.js is invalid for '${namespace}'.\\n${e.errors.join('\\n')}`);\n }\n }\n\n const called: LifecyclesState = {};\n return {\n async bootstrap() {\n if (called.bootstrap) {\n throw new Error(`Bootstrap for ${namespace} has already been called`);\n }\n called.bootstrap = true;\n await (rawModule.bootstrap && rawModule.bootstrap({ strapi }));\n },\n async register() {\n if (called.register) {\n throw new Error(`Register for ${namespace} has already been called`);\n }\n called.register = true;\n await (rawModule.register && rawModule.register({ strapi }));\n },\n async destroy() {\n if (called.destroy) {\n throw new Error(`Destroy for ${namespace} has already been called`);\n }\n called.destroy = true;\n await (rawModule.destroy && rawModule.destroy({ strapi }));\n },\n load() {\n strapi.get('content-types').add(namespace, rawModule.contentTypes);\n strapi.get('services').add(namespace, rawModule.services);\n strapi.get('policies').add(namespace, rawModule.policies);\n strapi.get('middlewares').add(namespace, rawModule.middlewares);\n strapi.get('controllers').add(namespace, rawModule.controllers);\n strapi.get('config').set(namespace, rawModule.config);\n },\n get routes() {\n return rawModule.routes ?? {};\n },\n config(path: PropertyPath, defaultValue: unknown) {\n const pathArray = flatten([namespace, path]);\n return strapi.get('config').get(pathArray, defaultValue);\n },\n contentType(ctName: UID.ContentType) {\n return strapi.get('content-types').get(`${namespace}.${ctName}`);\n },\n get contentTypes() {\n const contentTypes = strapi.get('content-types').getAll(namespace);\n return removeNamespacedKeys(contentTypes, namespace);\n },\n service(serviceName: UID.Service) {\n return strapi.get('services').get(`${namespace}.${serviceName}`);\n },\n get services() {\n const services = strapi.get('services').getAll(namespace);\n return removeNamespacedKeys(services, namespace);\n },\n policy(policyName: UID.Policy) {\n return strapi.get('policies').get(`${namespace}.${policyName}`);\n },\n get policies() {\n const policies = strapi.get('policies').getAll(namespace);\n return removeNamespacedKeys(policies, namespace);\n },\n middleware(middlewareName: UID.Middleware) {\n return strapi.get('middlewares').get(`${namespace}.${middlewareName}`);\n },\n get middlewares() {\n const middlewares = strapi.get('middlewares').getAll(namespace);\n return removeNamespacedKeys(middlewares, namespace);\n },\n controller(controllerName: UID.Controller) {\n return strapi.get('controllers').get(`${namespace}.${controllerName}`);\n },\n get controllers() {\n const controllers = strapi.get('controllers').getAll(namespace);\n return removeNamespacedKeys(controllers, namespace);\n },\n };\n};\n","import { pickBy, has } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { createModule, RawModule, Module } from '../domain/module';\n\ntype ModuleMap = { [namespace: string]: Module };\n\nconst modulesRegistry = (strapi: Core.Strapi) => {\n const modules: ModuleMap = {};\n\n return {\n get(namespace: string) {\n return modules[namespace];\n },\n getAll(prefix = '') {\n return pickBy<ModuleMap>((mod, namespace) => namespace.startsWith(prefix))(modules);\n },\n add(namespace: string, rawModule: RawModule) {\n if (has(namespace, modules)) {\n throw new Error(`Module ${namespace} has already been registered.`);\n }\n\n modules[namespace] = createModule(namespace, rawModule, strapi);\n modules[namespace].load();\n\n return modules[namespace];\n },\n async bootstrap() {\n for (const mod of Object.values(modules)) {\n await mod.bootstrap();\n }\n },\n async register() {\n for (const mod of Object.values(modules)) {\n await mod.register();\n }\n },\n async destroy() {\n for (const mod of Object.values(modules)) {\n await mod.destroy();\n }\n },\n };\n};\n\nexport default modulesRegistry;\n","import { has } from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\ntype PluginMap = Record<string, Core.Plugin>;\n\nconst pluginsRegistry = (strapi: Core.Strapi) => {\n const plugins: PluginMap = {};\n\n return {\n get(name: string) {\n return plugins[name];\n },\n getAll() {\n return plugins;\n },\n add(name: string, pluginConfig: Core.Plugin) {\n if (has(name, plugins)) {\n throw new Error(`Plugin ${name} has already been registered.`);\n }\n\n const pluginModule = strapi.get('modules').add(`plugin::${name}`, pluginConfig);\n plugins[name] = pluginModule;\n\n return plugins[name];\n },\n };\n};\n\nexport default pluginsRegistry;\n","import { has, isPlainObject } from 'lodash/fp';\n\nimport type { Core, Modules } from '@strapi/types';\n\nconst ALLOWED_TYPES = [\n 'biginteger',\n 'boolean',\n 'date',\n 'datetime',\n 'decimal',\n 'email',\n 'enumeration',\n 'float',\n 'integer',\n 'json',\n 'password',\n 'richtext',\n 'string',\n 'text',\n 'time',\n 'uid',\n] as const;\n\nconst customFieldsRegistry = (strapi: Core.Strapi) => {\n const customFields: Record<string, unknown> = {};\n\n return {\n getAll() {\n return customFields;\n },\n get(customField: string) {\n const registeredCustomField = customFields[customField];\n if (!registeredCustomField) {\n throw new Error(`Could not find Custom Field: ${customField}`);\n }\n\n return registeredCustomField;\n },\n add(\n customField:\n | Modules.CustomFields.CustomFieldServerOptions\n | Modules.CustomFields.CustomFieldServerOptions[]\n ) {\n const customFieldList = Array.isArray(customField) ? customField : [customField];\n\n for (const cf of customFieldList) {\n if (!has('name', cf) || !has('type', cf)) {\n throw new Error(`Custom fields require a 'name' and 'type' key`);\n }\n\n const { name, plugin, type, inputSize } = cf;\n if (!ALLOWED_TYPES.includes(type)) {\n throw new Error(\n `Custom field type: '${type}' is not a valid Strapi type or it can't be used with a Custom Field`\n );\n }\n\n const isValidObjectKey = /^(?![0-9])[a-zA-Z0-9$_-]+$/g;\n if (!isValidObjectKey.test(name)) {\n throw new Error(`Custom field name: '${name}' is not a valid object key`);\n }\n\n // Validate inputSize when provided\n if (inputSize) {\n if (\n !isPlainObject(inputSize) ||\n !has('default', inputSize) ||\n !has('isResizable', inputSize)\n ) {\n throw new Error(`inputSize should be an object with 'default' and 'isResizable' keys`);\n }\n if (![4, 6, 8, 12].includes(inputSize.default)) {\n throw new Error('Custom fields require a valid default input size');\n }\n if (typeof inputSize.isResizable !== 'boolean') {\n throw new Error('Custom fields should specify if their input is resizable');\n }\n }\n\n // When no plugin is specified, or it isn't found in Strapi, default to global\n const uid =\n plugin && strapi.plugin(plugin) ? `plugin::${plugin}.${name}` : `global::${name}`;\n\n if (has(uid, customFields)) {\n throw new Error(`Custom field: '${uid}' has already been registered`);\n }\n\n customFields[uid] = cf;\n }\n },\n };\n};\n\nexport default customFieldsRegistry;\n","import { has } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\nconst apisRegistry = (strapi: Core.Strapi) => {\n const apis: Record<string, unknown> = {};\n\n return {\n get(name: string) {\n return apis[name];\n },\n getAll() {\n return apis;\n },\n add(apiName: string, apiConfig: unknown) {\n if (has(apiName, apis)) {\n throw new Error(`API ${apiName} has already been registered.`);\n }\n\n const api = strapi.get('modules').add(`api::${apiName}`, apiConfig);\n\n apis[apiName] = api;\n\n return apis[apiName];\n },\n };\n};\n\nexport default apisRegistry;\n","import _, { PropertyName } from 'lodash';\n\ntype Sanitizer = (value: unknown) => unknown;\n\nconst sanitizersRegistry = () => {\n const sanitizers: Record<string, Sanitizer[]> = {};\n\n return {\n get(path: PropertyName): Sanitizer[] {\n return _.get(sanitizers, path, []);\n },\n\n add(path: PropertyName, sanitizer: Sanitizer) {\n this.get(path).push(sanitizer);\n return this;\n },\n\n set(path: PropertyName, value = []) {\n _.set(sanitizers, path, value);\n return this;\n },\n\n has(path: PropertyName) {\n return _.has(sanitizers, path);\n },\n };\n};\n\nexport default sanitizersRegistry;\n","import _, { PropertyName } from 'lodash';\n\ntype Validator = unknown;\n\nconst validatorsRegistry = () => {\n const validators: Record<string, Validator[]> = {};\n\n return {\n get(path: PropertyName): Validator[] {\n return _.get(validators, path, []);\n },\n\n add(path: PropertyName, validator: Validator) {\n this.get(path).push(validator);\n return this;\n },\n\n set(path: PropertyName, value = []) {\n _.set(validators, path, value);\n return this;\n },\n\n has(path: PropertyName) {\n return _.has(validators, path);\n },\n };\n};\n\nexport default validatorsRegistry;\n","import { Model } from '@strapi/database';\n\nexport const registry = () => {\n const models: Model[] = [];\n\n return {\n add(model: Model) {\n models.push(model);\n return this;\n },\n\n get() {\n return models;\n },\n };\n};\n","import { resolve } from 'path';\nimport { statSync, existsSync } from 'fs';\nimport { yup, importDefault } from '@strapi/utils';\n\nimport type { Core } from '@strapi/types';\n\nconst srcSchema = yup\n .object()\n .shape({\n bootstrap: yup.mixed().isFunction(),\n register: yup.mixed().isFunction(),\n destroy: yup.mixed().isFunction(),\n })\n .noUnknown();\n\nconst validateSrcIndex = (srcIndex: unknown) => {\n return srcSchema.validateSync(srcIndex, { strict: true, abortEarly: false });\n};\n\nexport default (strapi: Core.Strapi) => {\n if (!existsSync(strapi.dirs.dist.src)) {\n return;\n }\n\n const pathToSrcIndex = resolve(strapi.dirs.dist.src, 'index.js');\n if (!existsSync(pathToSrcIndex) || statSync(pathToSrcIndex).isDirectory()) {\n return {};\n }\n\n const srcIndex = importDefault(pathToSrcIndex);\n\n try {\n validateSrcIndex(srcIndex);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n strapi.stopWithError({ message: `Invalid file \\`./src/index.js\\`: ${e.message}` });\n }\n\n throw e;\n }\n\n strapi.app = srcIndex;\n};\n","import { join, extname, basename } from 'path';\nimport fse, { existsSync } from 'fs-extra';\nimport _ from 'lodash';\nimport { strings, importDefault } from '@strapi/utils';\nimport { isEmpty } from 'lodash/fp';\nimport type { Core, Struct } from '@strapi/types';\nimport { getGlobalId, type ContentTypeDefinition } from '../domain/content-type';\n\ninterface API {\n bootstrap: () => void | Promise<void>;\n destroy: () => void | Promise<void>;\n register: () => void | Promise<void>;\n config: Record<string, unknown>;\n routes: Record<string, Core.Router>;\n controllers: Record<string, Core.Controller>;\n services: Record<string, Core.Service>;\n policies: Record<string, Core.Policy>;\n middlewares: Record<string, Core.Middleware>;\n contentTypes: Record<string, { schema: Struct.ContentTypeSchema }>;\n}\n\ninterface APIs {\n [key: string]: API;\n}\n\nconst DEFAULT_CONTENT_TYPE = {\n schema: {},\n actions: {},\n lifecycles: {},\n};\n\n// to handle names with numbers in it we first check if it is already in kebabCase\nconst normalizeName = (name: string) => (strings.isKebabCase(name) ? name : _.kebabCase(name));\n\nconst isDirectory = (fd: fse.Dirent) => fd.isDirectory();\nconst isDotFile = (fd: fse.Dirent) => fd.name.startsWith('.');\n\nexport default async function loadAPIs(strapi: Core.Strapi) {\n if (!existsSync(strapi.dirs.dist.api)) {\n return;\n }\n\n const apisFDs = await (await fse.readdir(strapi.dirs.dist.api, { withFileTypes: true }))\n .filter(isDirectory)\n .filter(_.negate(isDotFile));\n\n const apis: APIs = {};\n\n // only load folders\n for (const apiFD of apisFDs) {\n const apiName = normalizeName(apiFD.name);\n const api = await loadAPI(apiName, join(strapi.dirs.dist.api, apiFD.name));\n\n // @ts-expect-error TODO verify that it's a valid api, not missing bootstrap, register, and destroy\n apis[apiName] = api;\n }\n\n validateContentTypesUnicity(apis);\n\n for (const apiName of Object.keys(apis)) {\n strapi.get('apis').add(apiName, apis[apiName]);\n }\n}\n\nconst validateContentTypesUnicity = (apis: APIs) => {\n const allApisSchemas = Object.values(apis).flatMap((api) => Object.values(api.contentTypes));\n\n const names: string[] = [];\n allApisSchemas.forEach(({ schema }) => {\n if (schema.info.singularName) {\n const singularName = _.kebabCase(schema.info.singularName);\n if (names.includes(singularName)) {\n throw new Error(`The singular name \"${schema.info.singularName}\" should be unique`);\n }\n names.push(singularName);\n }\n\n if (schema.info.pluralName) {\n const pluralName = _.kebabCase(schema.info.pluralName);\n if (names.includes(pluralName)) {\n throw new Error(`The plural name \"${schema.info.pluralName}\" should be unique`);\n }\n names.push(pluralName);\n }\n });\n};\n\nconst loadAPI = async (apiName: string, dir: string) => {\n const [index, config, routes, controllers, services, policies, middlewares, contentTypes] = (\n await Promise.all([\n loadIndex(dir),\n loadDir(join(dir, 'config')),\n loadDir(join(dir, 'routes')),\n loadDir(join(dir, 'controllers')),\n loadDir(join(dir, 'services')),\n loadDir(join(dir, 'policies')),\n loadDir(join(dir, 'middlewares')),\n loadContentTypes(apiName, join(dir, 'content-types')),\n ])\n ).map((result) => result?.result);\n\n return {\n ...(index || {}),\n config: config || {},\n routes: routes || [],\n controllers: controllers || {},\n services: services || {},\n policies: policies || {},\n middlewares: middlewares || {},\n contentTypes: contentTypes || {},\n };\n};\n\nconst loadIndex = async (dir: string) => {\n if (await fse.pathExists(join(dir, 'index.js'))) {\n return loadFile(join(dir, 'index.js'));\n }\n};\n\n// because this is async and its contents are dynamic, we must return it within an object to avoid a property called `then` being interpreted as a Promise\nconst loadContentTypes = async (apiName: string, dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n const contentTypes: API['contentTypes'] = {};\n\n // only load folders\n for (const fd of fds) {\n if (fd.isFile()) {\n continue;\n }\n\n const contentTypeName = normalizeName(fd.name);\n const loadedContentType = (await loadDir(join(dir, fd.name)))?.result;\n\n if (isEmpty(loadedContentType) || isEmpty(loadedContentType.schema)) {\n throw new Error(`Could not load content type found at ${dir}`);\n }\n\n const contentType = {\n ...DEFAULT_CONTENT_TYPE,\n ...loadedContentType,\n } as ContentTypeDefinition;\n\n Object.assign(contentType.schema, {\n apiName,\n collectionName: contentType.schema.collectionName || contentType.schema.info.singularName,\n globalId: getGlobalId(contentType.schema),\n });\n\n contentTypes[normalizeName(contentTypeName)] = contentType;\n }\n\n return { result: contentTypes };\n};\n\n// because this is async and its contents are dynamic, we must return it within an object to avoid a property called `then` being interpreted as a Promise\nconst loadDir = async (dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n\n const root: Record<string, unknown> = {};\n for (const fd of fds) {\n if (!fd.isFile() || extname(fd.name) === '.map') {\n continue;\n }\n\n const key = basename(fd.name, extname(fd.name));\n\n root[normalizeName(key)] = (await loadFile(join(dir, fd.name))).result;\n }\n\n return { result: root };\n};\n\n// because this is async and its contents are dynamic, we must return it as an array to avoid a property called `then` being interpreted as a Promise\nconst loadFile = async (file: string): Promise<{ result: unknown }> => {\n const ext = extname(file);\n\n switch (ext) {\n case '.js':\n return { result: importDefault(file) };\n case '.json':\n return { result: await fse.readJSON(file) };\n default:\n return { result: {} };\n }\n};\n","import compress from 'koa-compress';\nimport type { Core } from '@strapi/types';\n\nexport type Config = compress.CompressOptions;\n\nexport const compression: Core.MiddlewareFactory<Config> = (config) => compress(config);\n","import koaCors from '@koa/cors';\n\nimport type { Core } from '@strapi/types';\n\nexport type Config = {\n enabled?: boolean;\n origin: string | string[] | ((ctx: any) => string | string[]);\n expose?: string | string[];\n maxAge?: number;\n credentials?: boolean;\n methods?: string | string[];\n headers?: string | string[];\n keepHeadersOnError?: boolean;\n};\n\nconst defaults: Config = {\n origin: '*',\n maxAge: 31536000,\n credentials: true,\n methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n headers: ['Content-Type', 'Authorization', 'Origin', 'Accept'],\n keepHeadersOnError: false,\n};\n\nexport const cors: Core.MiddlewareFactory<Config> = (config) => {\n const { origin, expose, maxAge, credentials, methods, headers, keepHeadersOnError } = {\n ...defaults,\n ...config,\n };\n\n if (config.enabled !== undefined) {\n strapi.log.warn(\n 'The strapi::cors middleware no longer supports the `enabled` option. Using it' +\n ' to conditionally enable CORS might cause an insecure default. To disable strapi::cors, remove it from' +\n ' the exported array in config/middleware.js'\n );\n }\n\n return koaCors({\n async origin(ctx) {\n if (!ctx.get('Origin')) {\n return '*';\n }\n\n let originList: string | string[];\n\n if (typeof origin === 'function') {\n originList = await origin(ctx);\n } else {\n originList = origin;\n }\n\n if (Array.isArray(originList)) {\n return originList.includes(ctx.get('Origin')) ? ctx.get('Origin') : '';\n }\n\n const parsedOrigin = originList.split(',').map((origin) => origin.trim());\n if (parsedOrigin.length > 1) {\n return parsedOrigin.includes(ctx.get('Origin')) ? ctx.get('Origin') : '';\n }\n\n return originList;\n },\n exposeHeaders: expose,\n maxAge,\n credentials,\n allowMethods: methods,\n allowHeaders: headers,\n keepHeadersOnError,\n });\n};\n","import { errors } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport { formatApplicationError, formatHttpError, formatInternalError } from '../services/errors';\n\nconst errorMiddleware: Core.MiddlewareFactory = (/* _, { strapi } */) => {\n return async (ctx, next) => {\n try {\n await next();\n\n if (!ctx.response._explicitStatus) {\n return ctx.notFound();\n }\n } catch (error) {\n if (error instanceof errors.ApplicationError) {\n const { status, body } = formatApplicationError(error);\n ctx.status = status;\n ctx.body = body;\n return;\n }\n\n if (error instanceof errors.HttpError) {\n const { status, body } = formatHttpError(error);\n ctx.status = status;\n ctx.body = body;\n return;\n }\n\n strapi.log.error(error);\n\n const { status, body } = formatInternalError(error);\n ctx.status = status;\n ctx.body = body;\n }\n };\n};\n\nexport { errorMiddleware as errors };\n","import { existsSync } from 'fs';\nimport { resolve } from 'path';\nimport koaFavicon from 'koa-favicon';\nimport type { Core } from '@strapi/types';\n\nexport type Config = NonNullable<Parameters<typeof koaFavicon>[1]>;\n\nconst defaults = {\n path: 'favicon.png',\n maxAge: 86400000,\n};\n\nexport const favicon: Core.MiddlewareFactory<Config> = (config, { strapi }) => {\n const { maxAge, path: faviconDefaultPath } = { ...defaults, ...config };\n const { root: appRoot } = strapi.dirs.app;\n let faviconPath = faviconDefaultPath;\n\n /** TODO (v5): Updating the favicon to use a png caused\n * https://github.com/strapi/strapi/issues/14693\n *\n * This check ensures backwards compatibility until\n * the next major version\n */\n if (!existsSync(resolve(appRoot, faviconPath))) {\n faviconPath = 'favicon.ico';\n }\n\n return koaFavicon(resolve(appRoot, faviconPath), { maxAge });\n};\n","import koaIp from 'koa-ip';\nimport type { Core } from '@strapi/types';\n\nexport type Config = koaIp.KoaIPOptions;\n\nexport const ip: Core.MiddlewareFactory<Config> = (config) => koaIp(config);\n","import type { Core } from '@strapi/types';\n\nexport const logger: Core.MiddlewareFactory = (_, { strapi }) => {\n return async (ctx, next) => {\n const start = Date.now();\n await next();\n const delta = Math.ceil(Date.now() - start);\n\n strapi.log.http(`${ctx.method} ${ctx.url} (${delta} ms) ${ctx.status}`);\n };\n};\n","import type { Core } from '@strapi/types';\n\nexport interface Config {\n poweredBy: string;\n}\n\nconst defaults: Config = {\n poweredBy: 'Strapi <strapi.io>',\n};\n\nexport const poweredBy: Core.MiddlewareFactory<Partial<Config>> = (config) => {\n const { poweredBy } = { ...defaults, ...config };\n\n return async (ctx, next) => {\n await next();\n\n ctx.set('X-Powered-By', poweredBy);\n };\n};\n","import fse from 'fs-extra';\nimport { defaultsDeep } from 'lodash/fp';\nimport { koaBody, KoaBodyMiddlewareOptions } from 'koa-body';\nimport mime from 'mime-types';\nimport type Koa from 'koa';\nimport type { Core } from '@strapi/types';\n\nexport type Config = KoaBodyMiddlewareOptions;\n\nconst defaults = {\n multipart: true,\n patchKoa: true,\n};\n\nfunction ensureFileMimeType(file: any): void {\n if (!file.type) {\n file.type = mime.lookup(file.name) || 'application/octet-stream';\n }\n}\n\nfunction getFiles(ctx: Koa.Context) {\n return ctx?.request?.files?.files;\n}\n\nconst bodyMiddleware: Core.MiddlewareFactory<Config> = (config, { strapi }) => {\n const bodyConfig: Config = defaultsDeep(defaults, config);\n\n let gqlEndpoint: string | undefined;\n if (strapi.plugin('graphql')) {\n const { config: gqlConfig } = strapi.plugin('graphql');\n gqlEndpoint = gqlConfig('endpoint');\n }\n\n return async (ctx, next) => {\n // TODO: find a better way later\n if (gqlEndpoint && ctx.url === gqlEndpoint) {\n await next();\n } else {\n try {\n await koaBody(bodyConfig)(ctx, async () => {});\n\n const files = getFiles(ctx);\n\n /**\n * in case the mime-type wasn't sent, Strapi tries to guess it\n * from the file extension, to avoid a corrupt database state\n */\n if (files) {\n if (Array.isArray(files)) {\n files.forEach(ensureFileMimeType);\n } else {\n ensureFileMimeType(files);\n }\n }\n\n await next();\n } catch (error) {\n if (\n error instanceof Error &&\n error.message &&\n error.message.includes('maxFileSize exceeded')\n ) {\n return ctx.payloadTooLarge('FileTooBig');\n }\n\n throw error;\n }\n }\n\n const files = getFiles(ctx);\n\n // clean any file that was uploaded\n if (files) {\n if (Array.isArray(files)) {\n // not awaiting to not slow the request\n Promise.all(files.map((file) => fse.remove(file.filepath)));\n } else if (files && files.filepath) {\n // not awaiting to not slow the request\n fse.remove(files.filepath);\n }\n delete ctx.request.files;\n }\n };\n};\n\nexport { bodyMiddleware as body };\n","import qs from 'qs';\nimport type Koa from 'koa';\nimport type { Core } from '@strapi/types';\n\ntype Config = Parameters<typeof qs.parse>[1];\n\nconst defaults: Config = {\n strictNullHandling: true,\n arrayLimit: 100,\n depth: 20,\n};\n\n/**\n * Body parser hook\n */\nconst addQsParser = (app: Koa, settings: Config) => {\n Object.defineProperty(app.request, 'query', {\n configurable: false,\n enumerable: true,\n /*\n * Get parsed query-string.\n */\n get() {\n const qstr = this.querystring;\n\n this._querycache = this._querycache || {};\n const cache = this._querycache;\n\n if (!cache[qstr]) {\n cache[qstr] = qs.parse(qstr, settings);\n }\n\n return cache[qstr];\n },\n\n /*\n * Set query-string as an object.\n */\n set(obj) {\n this.querystring = qs.stringify(obj);\n },\n } satisfies PropertyDescriptor & ThisType<Koa.BaseRequest>);\n\n return app;\n};\n\nexport const query: Core.MiddlewareFactory = (\n config: Partial<Config>,\n { strapi }: { strapi: Core.Strapi }\n) => {\n addQsParser(strapi.server.app, { ...defaults, ...config } as Config);\n};\n","import type { Core } from '@strapi/types';\n\nexport const responseTime: Core.MiddlewareFactory = () => {\n return async (ctx, next) => {\n const start = Date.now();\n\n await next();\n\n const delta = Math.ceil(Date.now() - start);\n ctx.set('X-Response-Time', `${delta}ms`);\n };\n};\n","import { isFunction } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\nexport interface Config {\n handlers?: Record<number, Core.MiddlewareHandler>;\n}\n\nexport const responses: Core.MiddlewareFactory<Config> = (config = {}) => {\n return async (ctx, next) => {\n await next();\n\n const { status } = ctx;\n const handler = config?.handlers?.[status];\n\n if (isFunction(handler)) {\n await handler(ctx, next);\n }\n };\n};\n","import { defaultsDeep, mergeWith } from 'lodash/fp';\nimport helmet, { KoaHelmet } from 'koa-helmet';\n\nimport type { Core } from '@strapi/types';\n\nexport type Config = NonNullable<Parameters<KoaHelmet>[0]>;\n\nconst defaults: Config = {\n crossOriginEmbedderPolicy: false,\n crossOriginOpenerPolicy: false,\n crossOriginResourcePolicy: false,\n originAgentCluster: false,\n contentSecurityPolicy: {\n useDefaults: true,\n directives: {\n 'connect-src': [\"'self'\", 'https:'],\n 'img-src': [\"'self'\", 'data:', 'blob:', 'https://market-assets.strapi.io'],\n 'media-src': [\"'self'\", 'data:', 'blob:'],\n upgradeInsecureRequests: null,\n },\n },\n xssFilter: false,\n hsts: {\n maxAge: 31536000,\n includeSubDomains: true,\n },\n frameguard: {\n action: 'sameorigin',\n },\n};\n\nconst mergeConfig = (existingConfig: Config, newConfig: Config) => {\n return mergeWith(\n (obj, src) => (Array.isArray(obj) && Array.isArray(src) ? obj.concat(src) : undefined),\n existingConfig,\n newConfig\n );\n};\n\nexport const security: Core.MiddlewareFactory<Config> =\n (config, { strapi }) =>\n (ctx, next) => {\n let helmetConfig: Config = defaultsDeep(defaults, config);\n\n const specialPaths = ['/documentation'];\n\n const directives: {\n 'script-src': string[];\n 'img-src': string[];\n 'manifest-src': string[];\n 'frame-src': string[];\n } = {\n 'script-src': [\"'self'\", \"'unsafe-inline'\", 'cdn.jsdelivr.net'],\n 'img-src': [\"'self'\", 'data:', 'cdn.jsdelivr.net', 'strapi.io'],\n 'manifest-src': [],\n 'frame-src': [],\n };\n\n // if apollo graphql playground is enabled, add exceptions for it\n if (strapi.plugin('graphql')?.service('utils').playground.isEnabled()) {\n const { config: gqlConfig } = strapi.plugin('graphql');\n specialPaths.push(gqlConfig('endpoint'));\n\n directives['script-src'].push(`https: 'unsafe-inline'`);\n directives['img-src'].push(`'apollo-server-landing-page.cdn.apollographql.com'`);\n directives['manifest-src'].push(`'self'`);\n directives['manifest-src'].push('apollo-server-landing-page.cdn.apollographql.com');\n directives['frame-src'].push(`'self'`);\n directives['frame-src'].push('sandbox.embed.apollographql.com');\n }\n\n // TODO: we shouldn't combine playground exceptions with documentation for all routes, we should first check the path and then return exceptions specific to that\n if (ctx.method === 'GET' && specialPaths.some((str) => ctx.path.startsWith(str))) {\n helmetConfig = mergeConfig(helmetConfig, {\n crossOriginEmbedderPolicy: false, // TODO: only use this for graphql playground\n contentSecurityPolicy: {\n directives,\n },\n });\n }\n\n /**\n * These are for vite's watch mode so it can accurately\n * connect to the HMR websocket & reconnect on failure\n * or when the server restarts.\n *\n * It only applies in development, and only on GET requests\n * that are part of the admin route.\n */\n\n if (\n ['development', 'test'].includes(process.env.NODE_ENV ?? '') &&\n ctx.method === 'GET' &&\n ctx.path.startsWith(strapi.config.get('admin.path'))\n ) {\n helmetConfig = mergeConfig(helmetConfig, {\n contentSecurityPolicy: {\n directives: {\n 'script-src': [\"'self'\", \"'unsafe-inline'\"],\n 'connect-src': [\"'self'\", 'http:', 'https:', 'ws:'],\n },\n },\n });\n }\n\n return helmet(helmetConfig)(ctx, next);\n };\n","import { isEmpty, isArray } from 'lodash/fp';\nimport koaSession from 'koa-session';\nimport type { Core } from '@strapi/types';\n\nconst defaultConfig = {\n key: 'koa.sess',\n maxAge: 86400000,\n autoCommit: true,\n overwrite: true,\n httpOnly: true,\n signed: true,\n rolling: false,\n renew: false,\n secure: process.env.NODE_ENV === 'production',\n sameSite: undefined,\n};\n\nexport const session: Core.MiddlewareFactory<Partial<koaSession.opts>> = (\n userConfig,\n { strapi }\n) => {\n const { keys } = strapi.server.app;\n if (!isArray(keys) || isEmpty(keys) || keys.some(isEmpty)) {\n throw new Error(\n `App keys are required. Please set app.keys in config/server.js (ex: keys: ['myKeyA', 'myKeyB'])`\n );\n }\n\n const config: Partial<koaSession.opts> = { ...defaultConfig, ...userConfig };\n\n strapi.server.use(koaSession(config, strapi.server.app));\n};\n","import { defaultsDeep } from 'lodash/fp';\nimport koaStatic from 'koa-static';\nimport type { Core } from '@strapi/types';\n\ntype Config = koaStatic.Options;\n\nconst defaults = {\n maxAge: 60000,\n};\n\nexport const publicStatic: Core.MiddlewareFactory = (\n config: Config,\n { strapi }: { strapi: Core.Strapi }\n) => {\n const { maxAge } = defaultsDeep(defaults, config);\n\n strapi.server.routes([\n {\n method: 'GET',\n path: '/',\n handler(ctx) {\n ctx.redirect(strapi.config.get('admin.url', '/admin'));\n },\n config: { auth: false },\n },\n // All other public GET-routes except /uploads/(.*) which is handled in upload middleware\n {\n method: 'GET',\n path: '/((?!uploads/).+)',\n handler: koaStatic(strapi.dirs.static.public, {\n maxage: maxAge,\n defer: true,\n }),\n config: { auth: false },\n },\n ]);\n};\n","import type { Core } from '@strapi/types';\nimport { compression } from './compression';\nimport { cors } from './cors';\nimport { errors } from './errors';\nimport { favicon } from './favicon';\nimport { ip } from './ip';\nimport { logger } from './logger';\nimport { poweredBy } from './powered-by';\nimport { body } from './body';\nimport { query } from './query';\nimport { responseTime } from './response-time';\nimport { responses } from './responses';\nimport { security } from './security';\nimport { session } from './session';\nimport { publicStatic } from './public';\n\nexport const middlewares: Record<string, Core.MiddlewareFactory> = {\n compression,\n cors,\n errors,\n favicon,\n ip,\n logger,\n poweredBy,\n body,\n query,\n responseTime,\n responses,\n security,\n session,\n public: publicStatic,\n};\n","import { join, extname, basename } from 'path';\nimport fse from 'fs-extra';\nimport { importDefault } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\nimport { middlewares as internalMiddlewares } from '../middlewares';\n\n// TODO:: allow folders with index.js inside for bigger policies\nexport default async function loadMiddlewares(strapi: Core.Strapi) {\n const localMiddlewares = await loadLocalMiddlewares(strapi);\n\n strapi.get('middlewares').add(`global::`, localMiddlewares);\n strapi.get('middlewares').add(`strapi::`, internalMiddlewares);\n}\n\nconst loadLocalMiddlewares = async (strapi: Core.Strapi) => {\n const dir = strapi.dirs.dist.middlewares;\n\n if (!(await fse.pathExists(dir))) {\n return {};\n }\n\n const middlewares: Record<string, Core.MiddlewareFactory> = {};\n const paths = await fse.readdir(dir, { withFileTypes: true });\n\n for (const fd of paths) {\n const { name } = fd;\n const fullPath = join(dir, name);\n\n if (fd.isFile() && extname(name) === '.js') {\n const key = basename(name, '.js');\n middlewares[key] = importDefault(fullPath);\n }\n }\n\n return middlewares;\n};\n","import path from 'node:path';\nimport fp from 'lodash/fp';\n\n/**\n * Returns a path (as an array) from a file path\n */\nexport const filePathToPropPath = (\n entryPath: string,\n useFileNameAsKey: boolean = true\n): string[] => {\n const transform = fp.pipe(\n // Remove the relative path prefixes: './' for posix (and some win32) and \".\\\" for win32\n removeRelativePrefix,\n // Remove the path metadata and extensions\n fp.replace(/(\\.settings|\\.json|\\.js)/g, ''),\n // Transform to lowercase\n // Note: We're using fp.toLower instead of fp.lowercase as the latest removes special characters such as \"/\"\n fp.toLower,\n // Split the cleaned path by matching every possible separator (either \"/\" or \"\\\" depending on the OS)\n fp.split(new RegExp(`[\\\\${path.win32.sep}|${path.posix.sep}]`, 'g')),\n // Make sure to remove leading '.' from the different path parts\n fp.map(fp.trimCharsStart('.')),\n // join + split in case some '.' characters are still present in different parts of the path\n fp.join('.'),\n fp.split('.'),\n // Remove the last portion of the path array if the file name shouldn't be used as a key\n useFileNameAsKey ? fp.identity : fp.slice(0, -1)\n );\n\n return transform(entryPath) as string[];\n};\n\nconst removeRelativePrefix = (filePath: string) => {\n return filePath.startsWith(`.${path.win32.sep}`) || filePath.startsWith(`.${path.posix.sep}`)\n ? filePath.slice(2)\n : filePath;\n};\n","import path from 'path';\nimport _ from 'lodash';\nimport fse from 'fs-extra';\n\nimport { importDefault } from '@strapi/utils';\nimport { glob } from 'glob';\nimport { filePathToPropPath } from './filepath-to-prop-path';\n\n/**\n * Returns an Object build from a list of files matching a glob pattern in a directory\n * It builds a tree structure resembling the folder structure in dir\n */\nexport const loadFiles = async <T extends object>(\n dir: string,\n pattern: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n { requireFn = importDefault, shouldUseFileNameAsKey = (_: any) => true, globArgs = {} } = {}\n): Promise<T> => {\n const root = {};\n const files = await glob(pattern, { cwd: dir, ...globArgs });\n\n for (const file of files) {\n const absolutePath = path.resolve(dir, file);\n\n // load module\n delete require.cache[absolutePath];\n let mod;\n\n if (path.extname(absolutePath) === '.json') {\n mod = await fse.readJson(absolutePath);\n } else {\n mod = requireFn(absolutePath);\n }\n\n Object.defineProperty(mod, '__filename__', {\n enumerable: true,\n configurable: false,\n writable: false,\n value: path.basename(file),\n });\n\n const propPath = filePathToPropPath(file, shouldUseFileNameAsKey(file));\n\n if (propPath.length === 0) _.merge(root, mod);\n _.merge(root, _.setWith({}, propPath, mod, Object));\n }\n\n return root as T;\n};\n","import { join } from 'path';\nimport _ from 'lodash';\nimport { pathExists } from 'fs-extra';\nimport type { Core, Struct, UID } from '@strapi/types';\nimport { loadFiles } from '../utils/load-files';\n\ntype LoadedComponent = {\n collectionName: string;\n __filename__: string;\n __schema__: LoadedComponent;\n uid: string;\n category: string;\n modelName: string;\n globalId: string;\n info: any;\n attributes: any;\n};\n\ntype LoadedComponents = {\n [category: string]: {\n [key: string]: LoadedComponent;\n };\n};\n\ntype ComponentMap = {\n [uid in UID.Component]: Struct.ComponentSchema;\n};\n\nexport default async function loadComponents(strapi: Core.Strapi) {\n if (!(await pathExists(strapi.dirs.dist.components))) {\n return {};\n }\n\n const map = await loadFiles<LoadedComponents>(strapi.dirs.dist.components, '*/*.*(js|json)');\n\n const components = Object.keys(map).reduce((acc, category) => {\n Object.keys(map[category]).forEach((key) => {\n const schema = map[category][key];\n\n if (!schema.collectionName) {\n // NOTE: We're using the filepath from the app directory instead of the dist for information purpose\n const filePath = join(strapi.dirs.app.components, category, schema.__filename__);\n\n return strapi.stopWithError(\n `Component ${key} is missing a \"collectionName\" property.\\nVerify file ${filePath}.`\n );\n }\n\n const uid: UID.Component = `${category}.${key}`;\n\n acc[uid] = Object.assign(schema, {\n __schema__: _.cloneDeep(schema),\n uid,\n category,\n modelType: 'component' as const,\n modelName: key,\n globalId: schema.globalId || _.upperFirst(_.camelCase(`component_${uid}`)),\n });\n });\n\n return acc;\n }, {} as ComponentMap);\n\n strapi.get('components').add(components);\n}\n","import { join, extname, basename } from 'path';\nimport fse from 'fs-extra';\nimport { importDefault } from '@strapi/utils';\n\nimport type { Core } from '@strapi/types';\n\n// TODO:: allow folders with index.js inside for bigger policies\nexport default async function loadPolicies(strapi: Core.Strapi) {\n const dir = strapi.dirs.dist.policies;\n\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const policies: Record<string, Core.Policy> = {};\n const paths = await fse.readdir(dir, { withFileTypes: true });\n\n for (const fd of paths) {\n const { name } = fd;\n const fullPath = join(dir, name);\n\n if (fd.isFile() && extname(name) === '.js') {\n const key = basename(name, '.js');\n policies[key] = importDefault(fullPath);\n }\n }\n\n strapi.get('policies').add(`global::`, policies);\n}\n","import { join } from 'path';\nimport fse from 'fs-extra';\nimport { merge } from 'lodash/fp';\nimport { loadConfigFile } from '../../utils/load-config-file';\n\n/**\n * Return user defined plugins' config\n * first load config from `config/plugins.js`\n * and then merge config from `config/env/{env}/plugins.js`\n */\nexport const getUserPluginsConfig = async () => {\n const globalUserConfigPath = join(strapi.dirs.dist.config, 'plugins.js');\n const currentEnvUserConfigPath = join(\n strapi.dirs.dist.config,\n 'env',\n process.env.NODE_ENV as string,\n 'plugins.js'\n );\n let config = {};\n\n // assign global user config if exists\n if (await fse.pathExists(globalUserConfigPath)) {\n config = loadConfigFile(globalUserConfigPath);\n }\n\n // and merge user config by environment if exists\n if (await fse.pathExists(currentEnvUserConfigPath)) {\n config = merge(config, loadConfigFile(currentEnvUserConfigPath));\n }\n\n return config;\n};\n","/* eslint-disable @typescript-eslint/no-var-requires */\nimport { dirname, join, resolve } from 'path';\nimport { statSync, existsSync } from 'fs';\nimport _ from 'lodash';\nimport { get, pickBy, defaultsDeep, map, prop, pipe } from 'lodash/fp';\nimport { strings } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\nimport { getUserPluginsConfig } from './get-user-plugins-config';\n\ninterface PluginMeta {\n enabled: boolean;\n pathToPlugin?: string;\n info: Record<string, unknown>;\n packageInfo?: Record<string, unknown>;\n}\n\ntype PluginMetas = Record<string, PluginMeta>;\n\ninterface PluginInfo {\n name: string;\n kind: string;\n}\n\ninterface PluginDeclaration {\n enabled: boolean;\n resolve: string;\n isModule: boolean;\n}\n\n/**\n * otherwise known as \"core features\"\n *\n * NOTE: These are excluded from the content manager plugin list, as they are always enabled.\n * See admin.ts server controller on the content-manager plugin for more details.\n */\nconst INTERNAL_PLUGINS = [\n '@strapi/content-manager',\n '@strapi/content-type-builder',\n '@strapi/email',\n '@strapi/upload',\n '@strapi/i18n',\n '@strapi/content-releases',\n '@strapi/review-workflows',\n];\n\nconst isStrapiPlugin = (info: PluginInfo) => get('strapi.kind', info) === 'plugin';\n\nconst validatePluginName = (pluginName: string) => {\n if (!strings.isKebabCase(pluginName)) {\n throw new Error(`Plugin name \"${pluginName}\" is not in kebab (an-example-of-kebab-case)`);\n }\n};\n\nconst toDetailedDeclaration = (declaration: boolean | PluginDeclaration) => {\n if (typeof declaration === 'boolean') {\n return { enabled: declaration };\n }\n\n const detailedDeclaration: { enabled: boolean; pathToPlugin?: string } = {\n enabled: declaration.enabled,\n };\n\n if (declaration?.resolve) {\n let pathToPlugin = '';\n\n if (declaration.isModule) {\n /**\n * we only want the node_module here, not the package.json\n */\n pathToPlugin = join(declaration.resolve, '..');\n } else {\n try {\n pathToPlugin = dirname(require.resolve(declaration.resolve));\n } catch (e) {\n pathToPlugin = resolve(strapi.dirs.app.root, declaration.resolve);\n\n if (!existsSync(pathToPlugin) || !statSync(pathToPlugin).isDirectory()) {\n throw new Error(`${declaration.resolve} couldn't be resolved`);\n }\n }\n }\n\n detailedDeclaration.pathToPlugin = pathToPlugin;\n }\n\n return detailedDeclaration;\n};\n\nexport const getEnabledPlugins = async (strapi: Core.Strapi, { client } = { client: false }) => {\n const internalPlugins: PluginMetas = {};\n\n for (const dep of INTERNAL_PLUGINS) {\n const packagePath = join(dep, 'package.json');\n\n // NOTE: internal plugins should be resolved from the strapi package\n const packageModulePath = require.resolve(packagePath, {\n paths: [require.resolve('@strapi/strapi/package.json'), process.cwd()],\n });\n\n const packageInfo = require(packageModulePath);\n\n validatePluginName(packageInfo.strapi.name);\n internalPlugins[packageInfo.strapi.name] = {\n ...toDetailedDeclaration({ enabled: true, resolve: packageModulePath, isModule: client }),\n info: packageInfo.strapi,\n packageInfo,\n };\n }\n\n const installedPlugins: PluginMetas = {};\n const dependencies = strapi.config.get('info.dependencies', {});\n\n for (const dep of Object.keys(dependencies)) {\n const packagePath = join(dep, 'package.json');\n let packageInfo;\n try {\n packageInfo = require(packagePath);\n } catch {\n continue;\n }\n\n if (isStrapiPlugin(packageInfo)) {\n validatePluginName(packageInfo.strapi.name);\n installedPlugins[packageInfo.strapi.name] = {\n ...toDetailedDeclaration({ enabled: true, resolve: packagePath, isModule: client }),\n info: {\n ...packageInfo.strapi,\n packageName: packageInfo.name,\n },\n packageInfo,\n };\n }\n }\n\n const declaredPlugins: PluginMetas = {};\n const userPluginsConfig = await getUserPluginsConfig();\n\n _.forEach(userPluginsConfig, (declaration, pluginName) => {\n validatePluginName(pluginName);\n\n declaredPlugins[pluginName] = {\n ...toDetailedDeclaration(declaration),\n info: {},\n };\n\n const { pathToPlugin } = declaredPlugins[pluginName];\n\n // for manually resolved plugins\n if (pathToPlugin) {\n const packagePath = join(pathToPlugin, 'package.json');\n const packageInfo = require(packagePath);\n\n if (isStrapiPlugin(packageInfo)) {\n declaredPlugins[pluginName].info = packageInfo.strapi || {};\n declaredPlugins[pluginName].packageInfo = packageInfo;\n }\n }\n });\n\n const declaredPluginsResolves = map(prop('pathToPlugin'), declaredPlugins);\n const installedPluginsNotAlreadyUsed = pickBy(\n (p) => !declaredPluginsResolves.includes(p.pathToPlugin),\n installedPlugins\n );\n\n const enabledPlugins = pipe(\n defaultsDeep(declaredPlugins),\n defaultsDeep(installedPluginsNotAlreadyUsed),\n pickBy((p: PluginMeta) => p.enabled)\n )(internalPlugins);\n\n return enabledPlugins;\n};\n","import { join } from 'path';\nimport fse from 'fs-extra';\nimport { defaultsDeep, defaults, getOr, get } from 'lodash/fp';\nimport * as resolve from 'resolve.exports';\n\nimport { env } from '@strapi/utils';\nimport type { Core, Plugin, Struct } from '@strapi/types';\nimport { loadConfigFile } from '../../utils/load-config-file';\nimport { loadFiles } from '../../utils/load-files';\nimport { getEnabledPlugins } from './get-enabled-plugins';\nimport { getUserPluginsConfig } from './get-user-plugins-config';\nimport { getGlobalId } from '../../domain/content-type';\n\ninterface Plugins {\n [key: string]: Plugin.LoadedPlugin;\n}\n\nconst defaultPlugin = {\n bootstrap() {},\n destroy() {},\n register() {},\n config: {\n default: {},\n validator() {},\n },\n routes: [],\n controllers: {},\n services: {},\n policies: {},\n middlewares: {},\n contentTypes: {},\n};\n\nconst applyUserExtension = async (plugins: Plugins) => {\n const extensionsDir = strapi.dirs.dist.extensions;\n if (!(await fse.pathExists(extensionsDir))) {\n return;\n }\n\n const extendedSchemas = await loadFiles(extensionsDir, '**/content-types/**/schema.json');\n const strapiServers = await loadFiles(extensionsDir, '**/strapi-server.js');\n\n for (const pluginName of Object.keys(plugins)) {\n const plugin = plugins[pluginName];\n // first: load json schema\n for (const ctName of Object.keys(plugin.contentTypes)) {\n const extendedSchema = get([pluginName, 'content-types', ctName, 'schema'], extendedSchemas);\n if (extendedSchema) {\n plugin.contentTypes[ctName].schema = {\n ...plugin.contentTypes[ctName].schema,\n ...extendedSchema,\n };\n }\n }\n // second: execute strapi-server extension\n const strapiServer = get([pluginName, 'strapi-server'], strapiServers);\n if (strapiServer) {\n plugins[pluginName] = await strapiServer(plugin);\n }\n }\n};\n\nconst applyUserConfig = async (plugins: Plugins) => {\n const userPluginsConfig = await getUserPluginsConfig();\n\n for (const pluginName of Object.keys(plugins)) {\n const plugin = plugins[pluginName];\n const userPluginConfig = getOr({}, `${pluginName}.config`, userPluginsConfig);\n const defaultConfig =\n typeof plugin.config.default === 'function'\n ? plugin.config.default({ env })\n : plugin.config.default;\n\n const config = defaultsDeep(defaultConfig, userPluginConfig);\n try {\n plugin.config.validator(config);\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`Error regarding ${pluginName} config: ${e.message}`);\n }\n\n throw e;\n }\n plugin.config = config;\n }\n};\n\nexport default async function loadPlugins(strapi: Core.Strapi) {\n const plugins: Plugins = {};\n\n const enabledPlugins = await getEnabledPlugins(strapi);\n\n strapi.config.set('enabledPlugins', enabledPlugins);\n\n for (const pluginName of Object.keys(enabledPlugins)) {\n const enabledPlugin = enabledPlugins[pluginName];\n\n let serverEntrypointPath;\n let resolvedExport = './strapi-server.js';\n\n try {\n resolvedExport = (\n resolve.exports(enabledPlugin.packageInfo, 'strapi-server', {\n require: true,\n }) ?? './strapi-server.js'\n ).toString();\n } catch (e) {\n // no export map or missing strapi-server export => fallback to default\n }\n\n try {\n serverEntrypointPath = join(enabledPlugin.pathToPlugin, resolvedExport);\n } catch (e) {\n throw new Error(\n `Error loading the plugin ${pluginName} because ${pluginName} is not installed. Please either install the plugin or remove it's configuration.`\n );\n }\n\n // only load plugins with a server entrypoint\n if (!(await fse.pathExists(serverEntrypointPath))) {\n continue;\n }\n\n const pluginServer = loadConfigFile(serverEntrypointPath);\n plugins[pluginName] = {\n ...defaultPlugin,\n ...pluginServer,\n contentTypes: formatContentTypes(pluginName, pluginServer.contentTypes ?? {}),\n config: defaults(defaultPlugin.config, pluginServer.config),\n routes: pluginServer.routes ?? defaultPlugin.routes,\n };\n }\n\n // TODO: validate plugin format\n await applyUserConfig(plugins);\n await applyUserExtension(plugins);\n\n for (const pluginName of Object.keys(plugins)) {\n strapi.get('plugins').add(pluginName, plugins[pluginName]);\n }\n}\n\nconst formatContentTypes = (\n pluginName: string,\n contentTypes: Record<string, { schema: Struct.ContentTypeSchema }>\n) => {\n Object.values(contentTypes).forEach((definition) => {\n const { schema } = definition;\n\n Object.assign(schema, {\n plugin: pluginName,\n collectionName:\n schema.collectionName || `${pluginName}_${schema.info.singularName}`.toLowerCase(),\n globalId: getGlobalId(schema, pluginName),\n });\n });\n\n return contentTypes;\n};\n","import type { Core } from '@strapi/types';\n\nexport default (strapi: Core.Strapi) => {\n strapi.get('sanitizers').set('content-api', { input: [], output: [], query: [] });\n};\n","import type { Core } from '@strapi/types';\n\nexport default (strapi: Core.Strapi) => {\n strapi.get('validators').set('content-api', { input: [], query: [] });\n};\n","import type { Core } from '@strapi/types';\n\nimport loadSrcIndex from './src-index';\nimport loadAPIs from './apis';\nimport loadMiddlewares from './middlewares';\nimport loadComponents from './components';\nimport loadPolicies from './policies';\nimport loadPlugins from './plugins';\nimport loadSanitizers from './sanitizers';\nimport loadValidators from './validators';\n\nexport async function loadApplicationContext(strapi: Core.Strapi) {\n await Promise.all([\n loadSrcIndex(strapi),\n loadSanitizers(strapi),\n loadValidators(strapi),\n loadPlugins(strapi),\n loadAPIs(strapi),\n loadComponents(strapi),\n loadMiddlewares(strapi),\n loadPolicies(strapi),\n ]);\n}\n","import { errors as databaseErrors } from '@strapi/database';\nimport { errors } from '@strapi/utils';\n\nimport type { Middleware } from './middleware-manager';\n\nconst databaseErrorsToTransform = [\n databaseErrors.InvalidTimeError,\n databaseErrors.InvalidDateTimeError,\n databaseErrors.InvalidDateError,\n databaseErrors.InvalidRelationError,\n];\n\n/**\n * Handle database errors\n */\nexport const databaseErrorsMiddleware: Middleware = async (ctx, next) => {\n try {\n return await next();\n } catch (error) {\n if (databaseErrorsToTransform.some((errorToTransform) => error instanceof errorToTransform)) {\n if (error instanceof Error) {\n throw new errors.ValidationError(error.message);\n }\n\n throw error;\n }\n throw error;\n }\n};\n","export type Middleware = (ctx: any, next: () => Promise<void>) => Promise<void> | void;\n\nexport type Options = {\n exclude?: string[];\n};\n\nexport const createMiddlewareManager = () => {\n const middlewares: Middleware[] = [];\n\n const manager = {\n use(middleware: Middleware) {\n middlewares.push(middleware);\n\n return () => middlewares.splice(middlewares.indexOf(middleware), 1);\n },\n\n async run(ctx: any, cb: () => void) {\n let index = 0;\n const next = async () => {\n if (index < middlewares.length) {\n // eslint-disable-next-line no-plusplus\n return middlewares[index++](ctx, next);\n }\n\n return cb();\n };\n\n return next();\n },\n\n wrapObject<TSource>(source: TSource, ctxDefaults = {}, opts: Options = {}): TSource {\n const facade: TSource = {} as TSource;\n const { exclude = [] } = opts;\n\n for (const key in source) {\n if (Object.hasOwnProperty.call(source, key)) {\n const prop = source[key];\n\n if (exclude.includes(key)) {\n facade[key] = prop;\n } else if (typeof prop === 'function') {\n const newMethod = async (params: any = {}) => {\n const ctx = {\n ...ctxDefaults,\n action: key,\n params,\n };\n\n return manager.run(ctx, () => prop(ctx.params));\n };\n\n facade[key] = newMethod as typeof prop;\n } else {\n facade[key] = prop;\n }\n }\n }\n\n return facade;\n },\n };\n\n return manager;\n};\n","import type { UID, Modules } from '@strapi/types';\n\nexport type RepositoryFactoryMethod = <TContentTypeUID extends UID.ContentType>(\n uid: TContentTypeUID,\n entityValidator: Modules.EntityValidator.EntityValidator\n) => Modules.Documents.ServiceInstance<TContentTypeUID>;\n\nexport const wrapInTransaction = (fn: (...args: any) => any) => {\n return (...args: any[]) => strapi.db.transaction?.(() => fn(...args));\n};\n","import { assoc, curry } from 'lodash/fp';\n\nimport type { Modules, Struct } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\ntype ParamsTransform = (params: Modules.Documents.Params.All) => Modules.Documents.Params.All;\n\ntype TransformWithContentType = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Modules.Documents.Params.All;\n\n/**\n * DP enabled -> set status to draft\n * DP disabled -> Used mostly for parsing relations, so there is not a need for a default.\n */\nconst setStatusToDraft: TransformWithContentType = (contentType, params) => {\n if (!contentTypes.hasDraftAndPublish(contentType) && params.status) {\n return params;\n }\n\n return assoc('status', 'draft', params);\n};\n\n/**\n * Adds a default status of `draft` to the params\n */\nconst defaultToDraft: ParamsTransform = (params) => {\n // Default to draft if no status is provided or it's invalid\n if (!params.status || params.status !== 'published') {\n return assoc('status', 'draft', params);\n }\n\n return params;\n};\n\n/**\n * DP disabled -> ignore status\n * DP enabled -> set status to draft if no status is provided or it's invalid\n */\nconst defaultStatus: TransformWithContentType = (contentType, params) => {\n if (!contentTypes.hasDraftAndPublish(contentType)) {\n return params;\n }\n\n // Default to draft if no status is provided or it's invalid\n if (!params.status || params.status !== 'published') {\n return defaultToDraft(params);\n }\n\n return params;\n};\n\n/**\n * In mutating actions we don't want user to set the publishedAt attribute.\n */\nconst filterDataPublishedAt: ParamsTransform = (params) => {\n if (params?.data?.publishedAt) {\n return assoc(['data', 'publishedAt'], null, params);\n }\n\n return params;\n};\n\n/**\n * Add status lookup query to the params\n */\nconst statusToLookup: TransformWithContentType = (contentType, params) => {\n if (!contentTypes.hasDraftAndPublish(contentType)) {\n return params;\n }\n\n const lookup = params.lookup || {};\n\n switch (params?.status) {\n case 'published':\n return assoc(['lookup', 'publishedAt'], { $notNull: true }, params);\n case 'draft':\n return assoc(['lookup', 'publishedAt'], { $null: true }, params);\n default:\n break;\n }\n\n return assoc('lookup', lookup, params);\n};\n\n/**\n * Translate publication status parameter into the data that will be saved\n */\nconst statusToData: TransformWithContentType = (contentType, params) => {\n if (!contentTypes.hasDraftAndPublish(contentType)) {\n return assoc(['data', 'publishedAt'], new Date(), params);\n }\n\n switch (params?.status) {\n case 'published':\n return assoc(['data', 'publishedAt'], new Date(), params);\n case 'draft':\n return assoc(['data', 'publishedAt'], null, params);\n default:\n break;\n }\n\n return params;\n};\n\nconst setStatusToDraftCurry = curry(setStatusToDraft);\nconst defaultToDraftCurry = curry(defaultToDraft);\nconst defaultStatusCurry = curry(defaultStatus);\nconst filterDataPublishedAtCurry = curry(filterDataPublishedAt);\nconst statusToLookupCurry = curry(statusToLookup);\nconst statusToDataCurry = curry(statusToData);\n\nexport {\n setStatusToDraftCurry as setStatusToDraft,\n defaultToDraftCurry as defaultToDraft,\n defaultStatusCurry as defaultStatus,\n filterDataPublishedAtCurry as filterDataPublishedAt,\n statusToLookupCurry as statusToLookup,\n statusToDataCurry as statusToData,\n};\n","import type { Struct, Modules } from '@strapi/types';\nimport { errors } from '@strapi/utils';\nimport { curry, assoc } from 'lodash/fp';\n\ntype Transform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Modules.Documents.Params.All;\n\ntype AsyncTransform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Promise<Modules.Documents.Params.All>;\n\nconst getDefaultLocale = async (): Promise<string> => {\n return strapi.plugin('i18n').service('locales').getDefaultLocale();\n};\n\nconst defaultLocale: AsyncTransform = async (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (!params.locale) {\n return assoc('locale', await getDefaultLocale(), params);\n }\n\n return params;\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst localeToLookup: Transform = (contentType, params) => {\n if (\n !params.locale ||\n !strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)\n ) {\n return params;\n }\n\n if (typeof params.locale !== 'string') {\n // localeToLookup accepts locales of '*'. This is because the document\n // service functions that use this transform work with the '*' locale\n // to return all locales.\n throw new errors.ValidationError(\n `Invalid locale param ${String(params.locale)} provided. Document locales must be strings.`\n );\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst multiLocaleToLookup: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n if (params.locale === '*') {\n return params;\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n }\n\n return params;\n};\n\n/**\n * Translate locale status parameter into the data that will be saved\n */\nconst localeToData: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n const isValidLocale = typeof params.locale === 'string' && params.locale !== '*';\n if (isValidLocale) {\n return assoc(['data', 'locale'], params.locale, params);\n }\n\n throw new errors.ValidationError(\n `Invalid locale param ${params.locale} provided. Document locales must be strings.`\n );\n }\n\n return params;\n};\n\nconst defaultLocaleCurry = curry(defaultLocale);\nconst localeToLookupCurry = curry(localeToLookup);\nconst multiLocaleToLookupCurry = curry(multiLocaleToLookup);\nconst localeToDataCurry = curry(localeToData);\n\nexport {\n defaultLocaleCurry as defaultLocale,\n localeToLookupCurry as localeToLookup,\n localeToDataCurry as localeToData,\n multiLocaleToLookupCurry as multiLocaleToLookup,\n};\n","import _ from 'lodash';\nimport { has, omit, pipe, assign, curry } from 'lodash/fp';\nimport type { Utils, UID, Schema, Data, Modules } from '@strapi/types';\nimport { contentTypes as contentTypesUtils, async, errors } from '@strapi/utils';\n\n// type aliases for readability\ntype Input<T extends UID.Schema> = Modules.Documents.Params.Data.Input<T>;\n\ntype LoadedComponents<TUID extends UID.Schema> = Data.Entity<\n TUID,\n Schema.AttributeNamesByType<TUID, 'component' | 'dynamiczone'>\n>;\n\ntype SingleComponentValue = Schema.Attribute.ComponentValue<UID.Component, false>;\ntype RepeatableComponentValue = Schema.Attribute.ComponentValue<UID.Component, true>;\n\ntype ComponentValue = SingleComponentValue | RepeatableComponentValue;\n\ntype DynamicZoneValue = Schema.Attribute.DynamicZoneValue<UID.Component[]>;\n\ntype ComponentBody = {\n [key: string]: ComponentValue | DynamicZoneValue;\n};\n\nconst omitComponentData = curry(\n (schema: Schema.Schema, data: Input<UID.Schema>): Partial<Input<UID.Schema>> => {\n const { attributes } = schema;\n const componentAttributes = Object.keys(attributes).filter((attributeName) =>\n contentTypesUtils.isComponentAttribute(attributes[attributeName])\n );\n\n return omit(componentAttributes, data);\n }\n);\n\n// NOTE: we could generalize the logic to allow CRUD of relation directly in the DB layer\nconst createComponents = async <TUID extends UID.Schema, TData extends Input<TUID>>(\n uid: TUID,\n data: TData\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const componentBody: ComponentBody = {};\n\n const attributeNames = Object.keys(attributes);\n\n for (const attributeName of attributeNames) {\n const attribute = attributes[attributeName];\n\n if (!has(attributeName, data) || !contentTypesUtils.isComponentAttribute(attribute)) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID, repeatable = false } = attribute;\n\n const componentValue = data[attributeName as keyof TData];\n\n if (componentValue === null) {\n continue;\n }\n\n if (repeatable === true) {\n if (!Array.isArray(componentValue)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n const components: RepeatableComponentValue = await async.map(componentValue, (value: any) =>\n createComponent(componentUID, value)\n );\n\n componentBody[attributeName] = components.map(({ id }) => {\n return {\n id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n });\n } else {\n const component = await createComponent(\n componentUID,\n componentValue as Input<UID.Component>\n );\n\n componentBody[attributeName] = {\n id: component.id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n }\n\n continue;\n }\n\n if (attribute.type === 'dynamiczone') {\n const dynamiczoneValues = data[\n attributeName as keyof TData\n ] as Modules.EntityService.Params.Attribute.GetValue<Schema.Attribute.DynamicZone>;\n\n if (!Array.isArray(dynamiczoneValues)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n const createDynamicZoneComponents = async (\n value: Utils.Array.Values<typeof dynamiczoneValues>\n ) => {\n const { id } = await createComponent(value.__component, value);\n return {\n id,\n __component: value.__component,\n __pivot: {\n field: attributeName,\n },\n };\n };\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n componentBody[attributeName] = await async.map(\n dynamiczoneValues,\n createDynamicZoneComponents\n );\n\n continue;\n }\n }\n\n return componentBody;\n};\n\nconst getComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n entity: { id: Modules.EntityService.Params.Attribute.ID }\n): Promise<LoadedComponents<TUID>> => {\n const componentAttributes = contentTypesUtils.getComponentAttributes(strapi.getModel(uid));\n\n if (_.isEmpty(componentAttributes)) {\n return {} as LoadedComponents<TUID>;\n }\n\n return strapi.db.query(uid).load(entity, componentAttributes) as Promise<LoadedComponents<TUID>>;\n};\n\n/*\n delete old components\n create or update\n*/\nconst updateComponents = async <TUID extends UID.Schema, TData extends Partial<Input<TUID>>>(\n uid: TUID,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n data: TData\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const componentBody: ComponentBody = {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (!has(attributeName, data)) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID, repeatable = false } = attribute;\n\n const componentValue = data[attributeName as keyof TData] as ComponentValue;\n await deleteOldComponents(uid, componentUID, entityToUpdate, attributeName, componentValue);\n\n if (repeatable === true) {\n if (!Array.isArray(componentValue)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n const components: RepeatableComponentValue = await async.map(componentValue, (value: any) =>\n updateOrCreateComponent(componentUID, value)\n );\n\n componentBody[attributeName] = components.filter(_.negate(_.isNil)).map(({ id }) => {\n return {\n id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n });\n } else {\n const component = await updateOrCreateComponent(componentUID, componentValue);\n componentBody[attributeName] = component && {\n id: component.id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n }\n } else if (attribute.type === 'dynamiczone') {\n const dynamiczoneValues = data[attributeName as keyof TData] as DynamicZoneValue;\n\n await deleteOldDZComponents(uid, entityToUpdate, attributeName, dynamiczoneValues);\n\n if (!Array.isArray(dynamiczoneValues)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n componentBody[attributeName] = await async.map(dynamiczoneValues, async (value: any) => {\n const { id } = await updateOrCreateComponent(value.__component, value);\n\n return {\n id,\n __component: value.__component,\n __pivot: {\n field: attributeName,\n },\n };\n });\n }\n }\n\n return componentBody;\n};\n\nconst pickStringifiedId = ({\n id,\n}: {\n id: Modules.EntityService.Params.Attribute.ID;\n}): Modules.EntityService.Params.Attribute.ID & string => {\n if (typeof id === 'string') {\n return id;\n }\n\n return `${id}`;\n};\n\nconst deleteOldComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n componentUID: UID.Component,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n attributeName: string,\n componentValue: ComponentValue\n) => {\n const previousValue = (await strapi.db\n .query(uid)\n .load(entityToUpdate, attributeName)) as ComponentValue;\n const idsToKeep = _.castArray(componentValue).filter(has('id')).map(pickStringifiedId);\n const allIds = _.castArray(previousValue).filter(has('id')).map(pickStringifiedId);\n\n idsToKeep.forEach((id) => {\n if (!allIds.includes(id)) {\n throw new errors.ApplicationError(\n `Some of the provided components in ${attributeName} are not related to the entity`\n );\n }\n });\n\n const idsToDelete = _.difference(allIds, idsToKeep);\n\n if (idsToDelete.length > 0) {\n for (const idToDelete of idsToDelete) {\n await deleteComponent(componentUID, { id: idToDelete });\n }\n }\n};\n\nconst deleteOldDZComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n attributeName: string,\n dynamiczoneValues: DynamicZoneValue\n) => {\n const previousValue = (await strapi.db\n .query(uid)\n .load(entityToUpdate, attributeName)) as DynamicZoneValue;\n\n const idsToKeep = _.castArray(dynamiczoneValues)\n .filter(has('id'))\n .map((v) => ({\n id: pickStringifiedId(v),\n __component: v.__component,\n }));\n\n const allIds = _.castArray(previousValue)\n .filter(has('id'))\n .map((v) => ({\n id: pickStringifiedId(v),\n __component: v.__component,\n }));\n\n idsToKeep.forEach(({ id, __component }) => {\n if (!allIds.find((el) => el.id === id && el.__component === __component)) {\n const err = new Error(\n `Some of the provided components in ${attributeName} are not related to the entity`\n );\n\n Object.assign(err, { status: 400 });\n throw err;\n }\n });\n\n type IdsToDelete = DynamicZoneValue;\n\n const idsToDelete = allIds.reduce((acc, { id, __component }) => {\n if (!idsToKeep.find((el) => el.id === id && el.__component === __component)) {\n acc.push({ id, __component });\n }\n\n return acc;\n }, [] as IdsToDelete);\n\n if (idsToDelete.length > 0) {\n for (const idToDelete of idsToDelete) {\n const { id, __component } = idToDelete;\n await deleteComponent(__component, { id });\n }\n }\n};\n\nconst deleteComponents = async <TUID extends UID.Schema, TEntity extends Data.Entity<TUID>>(\n uid: TUID,\n entityToDelete: TEntity,\n { loadComponents = true } = {}\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const attributeNames = Object.keys(attributes);\n\n for (const attributeName of attributeNames) {\n const attribute = attributes[attributeName];\n\n if (attribute.type === 'component' || attribute.type === 'dynamiczone') {\n let value;\n\n if (loadComponents) {\n value = await strapi.db.query(uid).load(entityToDelete, attributeName);\n } else {\n value = entityToDelete[attributeName as keyof TEntity];\n }\n\n if (!value) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID } = attribute;\n await async.map(_.castArray(value), (subValue: any) =>\n deleteComponent(componentUID, subValue)\n );\n } else {\n await async.map(_.castArray(value), (subValue: any) =>\n deleteComponent(subValue.__component, subValue)\n );\n }\n\n continue;\n }\n }\n};\n\n/** *************************\n Component queries\n************************** */\n\n// components can have nested compos so this must be recursive\nconst createComponent = async <TUID extends UID.Component>(uid: TUID, data: Input<TUID>) => {\n const schema = strapi.getModel(uid);\n\n const componentData = await createComponents(uid, data);\n\n const transform = pipe(\n // Make sure we don't save the component with a pre-defined ID\n omit('id'),\n assignComponentData(schema, componentData)\n );\n\n return strapi.db.query(uid).create({ data: transform(data) });\n};\n\n// components can have nested compos so this must be recursive\nconst updateComponent = async <TUID extends UID.Component>(\n uid: TUID,\n componentToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n data: Input<TUID>\n) => {\n const schema = strapi.getModel(uid);\n\n const componentData = await updateComponents(uid, componentToUpdate, data);\n\n return strapi.db.query(uid).update({\n where: {\n id: componentToUpdate.id,\n },\n data: assignComponentData(schema, componentData, data),\n });\n};\n\nconst updateOrCreateComponent = <TUID extends UID.Component>(\n componentUID: TUID,\n value: Input<TUID>\n) => {\n if (value === null) {\n return null;\n }\n\n // update\n if ('id' in value && typeof value.id !== 'undefined') {\n // TODO: verify the compo is associated with the entity\n return updateComponent(componentUID, { id: value.id }, value);\n }\n\n // create\n return createComponent(componentUID, value);\n};\n\nconst deleteComponent = async <TUID extends UID.Component>(\n uid: TUID,\n componentToDelete: Data.Component<TUID>\n) => {\n await deleteComponents(uid, componentToDelete);\n await strapi.db.query(uid).delete({ where: { id: componentToDelete.id } });\n};\n\nconst assignComponentData = curry(\n (schema: Schema.Schema, componentData: ComponentBody, data: Input<UID.Schema>) => {\n return pipe(omitComponentData(schema), assign(componentData))(data);\n }\n);\n\nexport {\n omitComponentData,\n assignComponentData,\n getComponents,\n createComponents,\n updateComponents,\n deleteComponents,\n deleteComponent,\n};\n","import type { Core, Data, UID } from '@strapi/types';\nimport { async, contentTypes } from '@strapi/utils';\n\nconst hasDraftAndPublish = (uid: UID.CollectionType) => {\n const model = strapi.getModel(uid);\n return contentTypes.hasDraftAndPublish(model);\n};\n\n/**\n * TODO: Find a better way to encode keys than this\n * This converts an object into a string by joining its keys and values,\n * so it can be used as a key in a Map.\n *\n * @example\n * const obj = { a: 1, b: 2 };\n * const key = encodeKey(obj);\n * ^ \"a:::1&&b:::2\"\n */\nconst encodeKey = (obj: any) => {\n // Ignore status field for models without draft and publish\n if (!hasDraftAndPublish(obj.uid)) {\n delete obj.status;\n }\n\n // Sort keys to always keep the same order when encoding\n const keys = Object.keys(obj).sort();\n return keys.map((key) => `${key}:::${obj[key]}`).join('&&');\n};\n\ninterface KeyFields {\n uid: string;\n documentId: Data.ID;\n locale?: string | null;\n status?: 'draft' | 'published';\n}\n\nexport interface IdMap {\n loadedIds: Map<string, string>;\n toLoadIds: Map<string, KeyFields>;\n // Make the Keys type to be the params of add\n add(keys: KeyFields): void;\n load(): Promise<void>;\n get(keys: KeyFields): string | undefined;\n clear(): void;\n}\n\n/**\n * Holds a registry of document ids and their corresponding entity ids.\n */\nconst createIdMap = ({ strapi }: { strapi: Core.Strapi }): IdMap => {\n const loadedIds = new Map();\n const toLoadIds = new Map();\n\n return {\n loadedIds,\n toLoadIds,\n /**\n * Register a new document id and its corresponding entity id.\n */\n add(keyFields: KeyFields) {\n const key = encodeKey({ status: 'published', locale: null, ...keyFields });\n\n // If the id is already loaded, do nothing\n if (loadedIds.has(key)) return;\n // If the id is already in the toLoadIds, do nothing\n if (toLoadIds.has(key)) return;\n\n // Add the id to the toLoadIds\n toLoadIds.set(key, keyFields);\n },\n\n /**\n * Load all ids from the registry.\n */\n async load() {\n // Document Id to Entry Id queries are batched by its uid and locale\n // TODO: Add publication state too\n const loadIdValues = Array.from(toLoadIds.values());\n\n // 1. Group ids to query together\n const idsByUidAndLocale = loadIdValues.reduce((acc, { documentId, ...rest }) => {\n const key = encodeKey(rest);\n const ids = acc[key] || { ...rest, documentIds: [] };\n ids.documentIds.push(documentId);\n return { ...acc, [key]: ids };\n }, {});\n\n // 2. Query ids\n await async.map(\n Object.values(idsByUidAndLocale),\n async ({ uid, locale, documentIds, status }: any) => {\n const findParams = {\n select: ['id', 'documentId', 'locale', 'publishedAt'],\n where: {\n documentId: { $in: documentIds },\n locale: locale || null,\n },\n } as any;\n\n if (hasDraftAndPublish(uid)) {\n findParams.where.publishedAt = status === 'draft' ? null : { $ne: null };\n }\n\n const result = await strapi?.db?.query(uid).findMany(findParams);\n\n // 3. Store result in loadedIds\n result?.forEach(({ documentId, id, locale, publishedAt }: any) => {\n const key = encodeKey({\n documentId,\n uid,\n locale,\n status: publishedAt ? 'published' : 'draft',\n });\n loadedIds.set(key, id);\n });\n }\n );\n\n // 4. Clear toLoadIds\n toLoadIds.clear();\n },\n\n /**\n * Get the entity id for a given document id.\n */\n get(keys: KeyFields) {\n const key = encodeKey({ status: 'published', locale: null, ...keys });\n return loadedIds.get(key);\n },\n\n /**\n * Clear the registry.\n */\n clear() {\n loadedIds.clear();\n toLoadIds.clear();\n },\n };\n};\n\nexport { createIdMap };\n","import type { UID } from '@strapi/types';\nimport { LongHandDocument } from './types';\n\nexport const isLocalizedContentType = (uid: UID.Schema) => {\n const model = strapi.getModel(uid);\n return strapi.plugin('i18n').service('content-types').isLocalizedContentType(model);\n};\n\nexport const getDefaultLocale = () => {\n return strapi.plugin('i18n').service('locales').getDefaultLocale();\n};\n\nexport const getRelationTargetLocale = (\n relation: LongHandDocument,\n opts: {\n targetUid: UID.Schema;\n sourceUid: UID.Schema;\n sourceLocale?: string | null;\n }\n) => {\n const targetLocale = relation.locale || opts.sourceLocale;\n\n const isTargetLocalized = isLocalizedContentType(opts.targetUid);\n const isSourceLocalized = isLocalizedContentType(opts.sourceUid);\n\n // Both source and target locales should match\n if (isSourceLocalized && isTargetLocalized) {\n return opts.sourceLocale;\n }\n\n if (isTargetLocalized) {\n return targetLocale;\n }\n\n return null;\n};\n","import { isNil } from 'lodash/fp';\n\nimport { contentTypes } from '@strapi/utils';\nimport type { UID } from '@strapi/types';\n\nimport { LongHandDocument } from './types';\n\ntype Status = 'draft' | 'published';\n\nexport const getRelationTargetStatus = (\n relation: Pick<LongHandDocument, 'documentId' | 'status'>,\n opts: {\n targetUid: UID.Schema;\n sourceUid: UID.Schema;\n sourceStatus?: Status;\n }\n): Status[] => {\n // Ignore if the target content type does not have draft and publish enabled\n const targetContentType = strapi.getModel(opts.targetUid);\n const sourceContentType = strapi.getModel(opts.sourceUid);\n\n const targetHasDP = contentTypes.hasDraftAndPublish(targetContentType);\n const sourceHasDP = contentTypes.hasDraftAndPublish(sourceContentType);\n\n if (!targetHasDP) {\n return ['published'];\n }\n\n /**\n * If both source and target have DP enabled,\n * connect it to the same status as the source status\n */\n if (sourceHasDP && !isNil(opts.sourceStatus)) {\n return [opts.sourceStatus];\n }\n\n /**\n * Use the status from the relation if it's set\n */\n if (relation.status) {\n switch (relation.status) {\n case 'published':\n return ['published'];\n default:\n // Default to draft if it's an invalid status (e.g. modified)\n return ['draft'];\n }\n }\n\n /**\n * If DP is disabled and relation does not specify any status\n * Connect to both draft and published versions\n */\n if (!sourceHasDP) {\n return ['draft', 'published'];\n }\n\n // Default to draft as a fallback\n return ['draft'];\n};\n","/* eslint-disable node/no-callback-literal */\nimport { isObject, curry, isNil } from 'lodash/fp';\n\nimport { traverseEntity, async } from '@strapi/utils';\n\nimport { Relation } from './types';\n\nconst isNumeric = (value: any): value is number => {\n if (Array.isArray(value)) return false; // Handle [1, 'docId'] case\n const parsed = parseInt(value, 10);\n return !Number.isNaN(parsed);\n};\n\nconst toArray = (value: any) => {\n // Keep value as it is if it's a nullish value\n if (isNil(value)) return value;\n if (Array.isArray(value)) return value;\n\n return [value];\n};\n\n/**\n * There are multiple ways to create Strapi relations.\n * This is a utility to traverse and transform relation data\n *\n *\n * For consistency and ease of use, the response will always be an object with the following shape:\n * { set: [{...}], connect: [{...}], disconnect: [{...}] }\n *\n * @example\n * transformRelationData({\n * onLongHand: (relation) => {\n * // Change the id of the relation\n * return { id: 'other' };\n * },\n * }, relation)\n */\nconst mapRelation = async (\n callback: (relation: any) => any,\n rel: Relation,\n isRecursive = false\n): Promise<Relation> => {\n let relation: Relation = rel;\n\n const wrapInSet = (value: any) => {\n // Ignore wrapping if it's a recursive call\n if (isRecursive) {\n return value;\n }\n return { set: toArray(value) };\n };\n\n // undefined | null\n if (isNil(relation)) {\n return callback(relation);\n }\n\n // LongHand[] | ShortHand[]\n if (Array.isArray(relation)) {\n return async\n .map(relation, (r: Relation) => mapRelation(callback, r, true))\n .then((result: any) => result.flat().filter(Boolean))\n .then(wrapInSet);\n }\n\n // LongHand\n if (isObject(relation)) {\n // { id: 1 } || { documentId: 1 }\n if ('id' in relation || 'documentId' in relation) {\n const result = await callback(relation);\n return wrapInSet(result);\n }\n\n // If not connecting anything, return default visitor\n if (!relation.set && !relation.disconnect && !relation.connect) {\n return callback(relation);\n }\n\n // { set }\n if (relation.set) {\n const set: any = await mapRelation(callback, relation.set, true);\n relation = { ...relation, set: toArray(set) };\n }\n\n // { disconnect}\n if (relation.disconnect) {\n const disconnect: any = await mapRelation(callback, relation.disconnect, true);\n relation = { ...relation, disconnect: toArray(disconnect) };\n }\n\n // { connect }\n if (relation.connect) {\n // Transform the relation to connect\n const connect: any = await mapRelation(callback, relation.connect, true);\n relation = { ...relation, connect: toArray(connect) };\n }\n\n return relation;\n }\n\n // ShortHand\n if (isNumeric(relation)) {\n const result = await callback({ id: relation });\n return wrapInSet(result);\n }\n\n if (typeof relation === 'string') {\n const result = await callback({ documentId: relation });\n return wrapInSet(result);\n }\n\n // Anything else\n return callback(relation);\n};\n\ntype TraverseEntity = Parameters<typeof traverseEntity>;\n\n/**\n * Utility function, same as `traverseEntity` but only for relations.\n */\nconst traverseEntityRelations = async (\n visitor: TraverseEntity[0],\n options: TraverseEntity[1],\n data: TraverseEntity[2]\n) => {\n return traverseEntity(\n async (options, utils) => {\n const { attribute } = options;\n\n if (!attribute) {\n return;\n }\n\n if (attribute.type !== 'relation') {\n return;\n }\n\n // TODO: Handle join columns\n if (attribute.useJoinTable === false) {\n return;\n }\n\n return visitor(options, utils);\n },\n options,\n data\n );\n};\n\nconst mapRelationCurried = curry(mapRelation);\nconst traverseEntityRelationsCurried = curry(traverseEntityRelations);\n\nexport {\n mapRelationCurried as mapRelation,\n traverseEntityRelationsCurried as traverseEntityRelations,\n};\n","import { curry } from 'lodash/fp';\n\nimport type { UID } from '@strapi/types';\nimport { relations } from '@strapi/utils';\nimport { IdMap } from '../../id-map';\nimport { getRelationTargetLocale } from '../utils/i18n';\nimport { getRelationTargetStatus } from '../utils/dp';\nimport { mapRelation, traverseEntityRelations } from '../utils/map-relation';\nimport { LongHandDocument } from '../utils/types';\n\nconst { isPolymorphic } = relations;\n\ninterface Options {\n uid: UID.Schema;\n locale?: string | null;\n status?: 'draft' | 'published';\n}\n\n/**\n * Load a relation documentId into the idMap.\n */\nconst addRelationDocId = curry(\n (idMap: IdMap, source: Options, targetUid: UID.Schema, relation: LongHandDocument) => {\n const targetLocale = getRelationTargetLocale(relation, {\n targetUid,\n sourceUid: source.uid,\n sourceLocale: source.locale,\n });\n\n const targetStatus = getRelationTargetStatus(relation, {\n targetUid,\n sourceUid: source.uid,\n sourceStatus: source.status,\n });\n\n targetStatus.forEach((status) => {\n idMap.add({\n uid: targetUid,\n documentId: relation.documentId,\n locale: targetLocale,\n status,\n });\n });\n }\n);\n\n/**\n * Iterate over all relations of a data object and extract all relational document ids.\n * Those will later be transformed to entity ids.\n */\nconst extractDataIds = (idMap: IdMap, data: Record<string, any>, source: Options) => {\n return traverseEntityRelations(\n async ({ attribute, value }) => {\n if (!attribute) {\n return;\n }\n const isPolymorphicRelation = isPolymorphic(attribute);\n const addDocId = addRelationDocId(idMap, source);\n\n return mapRelation((relation) => {\n if (!relation || !relation.documentId) {\n return relation;\n }\n\n // Regular relations will always target the same target\n // if its a polymorphic relation we need to get it from the data itself\n const targetUid = isPolymorphicRelation ? relation.__type : attribute.target;\n\n addDocId(targetUid, relation);\n\n // Handle positional arguments\n const position = relation.position;\n\n // The positional relation target uid can be different for polymorphic relations\n let positionTargetUid = targetUid;\n if (isPolymorphicRelation && position?.__type) {\n positionTargetUid = position.__type;\n }\n\n if (position?.before) {\n addDocId(positionTargetUid, { ...relation, ...position, documentId: position.before });\n }\n\n if (position?.after) {\n addDocId(positionTargetUid, { ...relation, ...position, documentId: position.after });\n }\n\n return relation;\n }, value as any);\n },\n { schema: strapi.getModel(source.uid), getModel: strapi.getModel.bind(strapi) },\n data\n );\n};\n\nexport { extractDataIds };\n","import { curry } from 'lodash/fp';\n\nimport type { UID } from '@strapi/types';\nimport { errors, relations } from '@strapi/utils';\n\nimport { ID, LongHandDocument } from '../utils/types';\nimport { IdMap } from '../../id-map';\nimport { getRelationTargetLocale } from '../utils/i18n';\nimport { getRelationTargetStatus } from '../utils/dp';\nimport { mapRelation, traverseEntityRelations } from '../utils/map-relation';\n\nconst { isPolymorphic } = relations;\n\ninterface Options {\n uid: UID.Schema;\n locale?: string | null;\n status?: 'draft' | 'published';\n allowMissingId?: boolean; // Whether to ignore missing ids and not throw any error\n}\n\n/**\n * Get the entry ids for a given documentId.\n */\nconst getRelationIds = curry(\n (idMap: IdMap, source: Options, targetUid: UID.Schema, relation: LongHandDocument) => {\n // locale to connect to\n const targetLocale = getRelationTargetLocale(relation, {\n targetUid,\n sourceUid: source.uid,\n sourceLocale: source.locale,\n });\n\n // status(es) to connect to\n const targetStatus = getRelationTargetStatus(relation, {\n targetUid,\n sourceUid: source.uid,\n sourceStatus: source.status,\n });\n\n const ids: ID[] = [];\n\n // Find mapping between documentID -> id(s).\n // There are scenarios where a single documentID can map to multiple ids.\n // e.g when connecting Non DP -> DP and connecting to both the draft and publish version at the same time\n for (const tStatus of targetStatus) {\n const entryId = idMap.get({\n uid: targetUid,\n documentId: relation.documentId,\n locale: targetLocale,\n status: tStatus,\n });\n\n if (entryId) ids.push(entryId);\n }\n\n if (!ids.length && !source.allowMissingId) {\n throw new errors.ValidationError(\n `Document with id \"${relation.documentId}\", locale \"${targetLocale}\" not found`\n );\n }\n\n return ids;\n }\n);\n\n/**\n * Iterate over all relations of a data object and transform all relational document ids to entity ids.\n */\nconst transformDataIdsVisitor = (idMap: IdMap, data: Record<string, any>, source: Options) => {\n return traverseEntityRelations(\n async ({ key, value, attribute }, { set }) => {\n if (!attribute) {\n return;\n }\n const isPolymorphicRelation = isPolymorphic(attribute);\n const getIds = getRelationIds(idMap, source);\n\n // Transform the relation documentId to entity id\n const newRelation = await mapRelation((relation) => {\n if (!relation || !relation.documentId) {\n return relation;\n }\n\n // Find relational attributes, and return the document ids\n // if its a polymorphic relation we need to get it from the data itself\n const targetUid: UID.Schema = isPolymorphicRelation ? relation.__type : attribute.target;\n const ids: ID[] = getIds(targetUid, relation);\n\n // Handle positional arguments\n const position = { ...relation.position };\n\n // The positional relation target uid can be different for polymorphic relations\n let positionTargetUid: UID.Schema = targetUid;\n if (isPolymorphicRelation && position?.__type) {\n positionTargetUid = position.__type;\n }\n\n if (position.before) {\n const beforeRelation = { ...relation, ...position, documentId: position.before };\n const beforeIds: ID[] = getIds(positionTargetUid, beforeRelation);\n position.before = beforeIds.at(0);\n }\n\n if (position.after) {\n const afterRelation = { ...relation, ...position, documentId: position.after };\n position.after = getIds(positionTargetUid, afterRelation).at(0);\n }\n\n // Transform all ids to new relations\n return ids?.map((id) => {\n const newRelation = { id } as typeof relation;\n\n if (relation.position) {\n newRelation.position = position;\n }\n\n // Insert type if its a polymorphic relation\n if (isPolymorphicRelation) {\n newRelation.__type = targetUid;\n }\n\n return newRelation;\n });\n }, value as any);\n\n set(key, newRelation as any);\n },\n { schema: strapi.getModel(source.uid), getModel: strapi.getModel.bind(strapi) },\n data\n );\n};\n\nexport { transformDataIdsVisitor };\n","import type { UID } from '@strapi/types';\n\nimport { getDefaultLocale, isLocalizedContentType } from '../utils/i18n';\nimport { mapRelation, traverseEntityRelations } from '../utils/map-relation';\n\n/**\n * In scenarios like Non i18n CT -> i18n CT\n * relations can be connected to multiple locales,\n * in case user does not provide the locale, this sets it to the default one.\n */\nconst setDefaultLocaleToRelations = (data: Record<string, any>, uid: UID.Schema) => {\n // I18n CT -> anything will already have a locale set (source locale)\n if (isLocalizedContentType(uid)) {\n return data;\n }\n\n // Store the default locale to avoid multiple calls\n let defaultLocale: string;\n\n /**\n * Traverse the entity input data and set the default locale to relations\n */\n return traverseEntityRelations(\n async ({ key, value }, { set }) => {\n /**\n * Assign default locale on long hand expressed relations\n * e.g { documentId } -> { documentId, locale }\n */\n const relation = await mapRelation(async (relation) => {\n if (!relation || !relation?.documentId || relation?.locale) {\n return relation;\n }\n\n // Set default locale if not provided\n if (!defaultLocale) {\n defaultLocale = await getDefaultLocale();\n }\n\n // Assign default locale to the positional argument\n const position = relation.position;\n if (position && typeof position === 'object' && !position.locale) {\n relation.position.locale = defaultLocale;\n }\n\n return { ...relation, locale: defaultLocale };\n }, value as any);\n\n // @ts-expect-error - fix type\n set(key, relation);\n },\n { schema: strapi.getModel(uid), getModel: strapi.getModel.bind(strapi) },\n data\n );\n};\n\nexport { setDefaultLocaleToRelations };\n","import { createIdMap } from './id-map';\nimport { extractDataIds as extractDataRelationIds } from './relations/extract/data-ids';\nimport { transformDataIdsVisitor as transformRelationDataIds } from './relations/transform/data-ids';\nimport { setDefaultLocaleToRelations } from './relations/transform/default-locale';\n\n/**\n * Transforms input data, containing relation document ids, to entity ids.\n */\nexport const transformData = async (data: any, opts: any) => {\n const idMap = createIdMap({ strapi });\n\n // Assign default locales\n const transformedData = await setDefaultLocaleToRelations(data, opts.uid);\n\n // Extract any relation ids from the input\n await extractDataRelationIds(idMap, transformedData, opts);\n\n // Load any relation the extract methods found\n await idMap.load();\n\n // Transform any relation ids to entity ids\n return transformRelationDataIds(idMap, transformedData, opts);\n};\n","import type { Modules, UID } from '@strapi/types';\n\ntype Fields = Modules.Documents.Params.Pick<UID.Schema, 'fields'>['fields'];\n\nexport const transformFields = (fields: Fields): Fields => {\n // If it's a string, and it doesn't contain documentId, should be an array\n if (typeof fields === 'string') {\n // '*' => '*'\n if (fields === '*') {\n return fields;\n }\n\n // '' => 'documentId'\n if (fields === '') {\n return 'documentId';\n }\n\n // 'name,description' => 'name,description,documentId'\n if (!fields.split(',').includes('documentId')) {\n return `${fields},documentId`;\n }\n }\n\n // It's not an array, ignore it\n if (!fields || !Array.isArray(fields)) {\n // If fields is empty, return it as is\n return fields;\n }\n\n // Ensure we are always selecting the documentId\n // ['name', 'description'] => ['name', 'description', 'documentId']\n if (!fields.includes('documentId')) {\n fields.push('documentId');\n }\n\n return fields;\n};\n","import { traverse } from '@strapi/utils';\nimport type { UID } from '@strapi/types';\n\nimport { type Data } from './types';\nimport { transformFields } from './fields';\n\nexport const transformPopulate = async (data: Data, opts: { uid: UID.Schema }) => {\n return traverse.traverseQueryPopulate(\n async ({ attribute, key, value }, { set }) => {\n if (!value || typeof value !== 'object' || attribute?.type !== 'relation') {\n return;\n }\n\n /*\n If the attribute is a relation\n Look for fields in the value\n and apply the relevant transformation to these objects\n */\n if ('fields' in value && Array.isArray(value.fields)) {\n value.fields = transformFields(value.fields);\n }\n\n set(key, value);\n },\n { schema: strapi.getModel(opts.uid), getModel: strapi.getModel.bind(strapi) },\n data\n );\n};\n","import { curry } from 'lodash/fp';\n\nimport type { UID, Modules } from '@strapi/types';\n\nimport { transformData } from './data';\nimport { transformFields } from './fields';\nimport { transformPopulate } from './populate';\n\n/**\n * Transform input of a query to map document ids to entity ids.\n */\nasync function transformParamsDocumentId(\n uid: UID.Schema,\n query: Modules.Documents.Params.All\n): Promise<Modules.Documents.Params.All> {\n // Transform relational documentIds to entity ids\n let data = query.data;\n if (query.data) {\n data = await transformData(query.data, {\n locale: query.locale,\n status: query.status,\n uid,\n });\n }\n\n // Make sure documentId is always present in the response\n let fields = query.fields;\n if (query.fields) {\n fields = transformFields(query.fields) as typeof query.fields;\n }\n\n let populate = query.populate;\n if (query.populate) {\n populate = (await transformPopulate(query.populate, { uid })) as typeof query.populate;\n }\n\n return {\n ...query,\n data,\n fields,\n populate,\n };\n}\n\nconst curriedTransformParamsDocumentId = curry(transformParamsDocumentId);\n\nexport { curriedTransformParamsDocumentId as transformParamsDocumentId };\n","import type { UID } from '@strapi/types';\n\nimport { curry, assoc } from 'lodash/fp';\n\nconst transformParamsToQuery = curry((uid: UID.Schema, params: any) => {\n const query = strapi.get('query-params').transform(uid, params);\n\n return assoc('where', { ...params?.lookup, ...query.where }, query);\n});\n\nexport { transformParamsToQuery };\n","import { pick } from 'lodash/fp';\nimport type { UID, Modules } from '@strapi/types';\n\nconst pickSelectionParams = <TUID extends UID.ContentType>(\n data: unknown\n): Modules.Documents.Params.Pick<TUID, 'fields' | 'populate' | 'status'> => {\n return pick(['fields', 'populate', 'status'], data);\n};\n\nexport { pickSelectionParams };\n","import { getOr, toNumber, isString } from 'lodash/fp';\nimport type { Schema } from '@strapi/types';\nimport bcrypt from 'bcryptjs';\n\ntype Transforms = {\n [TKind in Schema.Attribute.Kind]?: (\n value: unknown,\n context: {\n attribute: Schema.Attribute.AnyAttribute;\n attributeName: string;\n }\n ) => any;\n};\n\nconst transforms: Transforms = {\n password(value, context) {\n const { attribute } = context;\n\n if (attribute.type !== 'password') {\n throw new Error('Invalid attribute type');\n }\n\n if (!isString(value) && !(value instanceof Buffer)) {\n return value;\n }\n\n const rounds = toNumber(getOr(10, 'encryption.rounds', attribute));\n\n return bcrypt.hashSync(value.toString(), rounds);\n },\n};\n\nexport default transforms;\n","import { curry } from 'lodash/fp';\n\nimport type { UID, Modules, Schema } from '@strapi/types';\n\nimport transforms from './transforms';\n\n// aliasing the type to make it easier to read\ntype Data = Modules.Documents.Params.Data.Input<UID.Schema>;\n\nconst applyTransforms = curry((schema: Schema.Schema, data: Data) => {\n const attributeNames = Object.keys(data) as Array<keyof typeof data & string>;\n\n for (const attributeName of attributeNames) {\n const value = data[attributeName];\n\n const attribute = schema.attributes[attributeName];\n\n if (!attribute) {\n continue;\n }\n\n const transform = transforms[attribute.type];\n\n if (transform) {\n const attributeContext = { attributeName, attribute };\n\n data[attributeName] = transform(value, attributeContext);\n }\n }\n\n return data;\n});\n\nexport { applyTransforms };\n","import type { UID, Modules } from '@strapi/types';\nimport { async } from '@strapi/utils';\nimport { assoc, omit } from 'lodash/fp';\n\nimport * as components from './components';\n\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { transformParamsToQuery } from './transform/query';\nimport { pickSelectionParams } from './params';\nimport { applyTransforms } from './attributes';\nimport { transformData } from './transform/data';\n\nconst createEntriesService = (\n uid: UID.ContentType,\n entityValidator: Modules.EntityValidator.EntityValidator\n) => {\n const contentType = strapi.contentType(uid);\n\n async function createEntry(params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n // Validation\n if (!data) {\n throw new Error('Create requires data attribute');\n }\n\n const validData = await entityValidator.validateEntityCreation(contentType, data, {\n // Note: publishedAt value will always be set when DP is disabled\n isDraft: !params?.data?.publishedAt,\n locale: params?.locale,\n });\n\n // Component handling\n const componentData = await components.createComponents(uid, validData);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n const doc = await strapi.db.query(uid).create({ ...query, data: entryData });\n\n return doc;\n }\n\n async function deleteEntry(id: number) {\n const componentsToDelete = await components.getComponents(uid, { id });\n\n const deletedEntry = await strapi.db.query(uid).delete({ where: { id } });\n\n await components.deleteComponents(uid, componentsToDelete as any, { loadComponents: false });\n\n return deletedEntry;\n }\n\n async function updateEntry(entryToUpdate: any, params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n const validData = await entityValidator.validateEntityUpdate(\n contentType,\n data,\n {\n isDraft: !params?.data?.publishedAt, // Always update the draft version\n locale: params?.locale,\n },\n entryToUpdate\n );\n // Component handling\n const componentData = await components.updateComponents(uid, entryToUpdate, validData as any);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n return strapi.db\n .query(uid)\n .update({ ...query, where: { id: entryToUpdate.id }, data: entryData });\n }\n\n async function publishEntry(entry: any, params = {} as any) {\n return async.pipe(\n omit('id'),\n assoc('publishedAt', new Date()),\n (draft) => {\n const opts = { uid, locale: draft.locale, status: 'published', allowMissingId: true };\n return transformData(draft, opts);\n },\n // Create the published entry\n (draft) => createEntry({ ...params, data: draft, locale: draft.locale, status: 'published' })\n )(entry);\n }\n\n async function discardDraftEntry(entry: any, params = {} as any) {\n return async.pipe(\n omit('id'),\n assoc('publishedAt', null),\n (entry) => {\n const opts = { uid, locale: entry.locale, status: 'draft', allowMissingId: true };\n return transformData(entry, opts);\n },\n // Create the draft entry\n (data) => createEntry({ ...params, locale: data.locale, data, status: 'draft' })\n )(entry);\n }\n\n return {\n create: createEntry,\n delete: deleteEntry,\n update: updateEntry,\n publish: publishEntry,\n discardDraft: discardDraftEntry,\n };\n};\n\nexport { createEntriesService };\n","import type { UID } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\ninterface Options {\n /**\n * Fields to select when populating relations\n */\n relationalFields?: string[];\n}\n\nconst { CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } = contentTypes.constants;\n\n// We want to build a populate object based on the schema\nexport const getDeepPopulate = (uid: UID.Schema, opts: Options = {}) => {\n const model = strapi.getModel(uid);\n const attributes = Object.entries(model.attributes);\n\n return attributes.reduce((acc: any, [attributeName, attribute]) => {\n switch (attribute.type) {\n case 'relation': {\n // TODO: Support polymorphic relations\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n if (isMorphRelation) {\n break;\n }\n\n // Ignore not visible fields other than createdBy and updatedBy\n const isVisible = contentTypes.isVisibleAttribute(model, attributeName);\n const isCreatorField = [CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE].includes(attributeName);\n\n if (isVisible || isCreatorField) {\n acc[attributeName] = { select: opts.relationalFields };\n }\n\n break;\n }\n\n case 'media': {\n // We populate all media fields for completeness of webhook responses\n // see https://github.com/strapi/strapi/issues/21546\n acc[attributeName] = { select: ['*'] };\n break;\n }\n\n case 'component': {\n const populate = getDeepPopulate(attribute.component, opts);\n acc[attributeName] = { populate };\n break;\n }\n\n case 'dynamiczone': {\n // Use fragments to populate the dynamic zone components\n const populatedComponents = (attribute.components || []).reduce(\n (acc: any, componentUID: UID.Component) => {\n acc[componentUID] = { populate: getDeepPopulate(componentUID, opts) };\n return acc;\n },\n {}\n );\n\n acc[attributeName] = { on: populatedComponents };\n break;\n }\n default:\n break;\n }\n\n return acc;\n }, {});\n};\n","import type { UID, Utils, Modules, Core } from '@strapi/types';\nimport { sanitize } from '@strapi/utils';\n\nimport { getDeepPopulate } from './utils/populate';\n\nconst EVENTS = {\n ENTRY_CREATE: 'entry.create',\n ENTRY_UPDATE: 'entry.update',\n ENTRY_DELETE: 'entry.delete',\n ENTRY_PUBLISH: 'entry.publish',\n ENTRY_UNPUBLISH: 'entry.unpublish',\n ENTRY_DRAFT_DISCARD: 'entry.draft-discard',\n};\n\ntype EventName = Utils.Object.Values<typeof EVENTS>;\n\n/**\n * Manager to trigger entry related events\n *\n * It will populate the entry if it is not a delete event.\n * So the event payload will contain the full entry.\n */\nconst createEventManager = (strapi: Core.Strapi, uid: UID.Schema) => {\n const populate = getDeepPopulate(uid, {});\n const model = strapi.getModel(uid);\n\n const emitEvent = async (eventName: EventName, entry: Modules.Documents.AnyDocument) => {\n // There is no need to populate the entry if it has been deleted\n let populatedEntry = entry;\n if (![EVENTS.ENTRY_DELETE, EVENTS.ENTRY_UNPUBLISH].includes(eventName)) {\n populatedEntry = await strapi.db.query(uid).findOne({ where: { id: entry.id }, populate });\n }\n\n const sanitizedEntry = await sanitize.sanitizers.defaultSanitizeOutput(\n {\n schema: model,\n getModel: (uid) => strapi.getModel(uid as UID.Schema),\n },\n populatedEntry\n );\n\n await strapi.eventHub.emit(eventName, {\n model: model.modelName,\n uid: model.uid,\n entry: sanitizedEntry,\n });\n };\n\n return {\n /**\n * strapi.db.query might reuse the transaction used in the doc service request,\n * so this is executed after that transaction is committed.\n */\n emitEvent(eventName: EventName, entry: Modules.Documents.AnyDocument) {\n strapi.db.transaction(({ onCommit }) => {\n onCommit(() => emitEvent(eventName, entry));\n });\n },\n };\n};\n\nexport { createEventManager };\n","/* eslint-disable no-continue */\nimport { keyBy, omit } from 'lodash/fp';\n\nimport type { UID, Schema } from '@strapi/types';\n\ninterface LoadContext {\n oldVersions: { id: string; locale: string }[];\n newVersions: { id: string; locale: string }[];\n}\n\n/**\n * Loads lingering relations that need to be updated when overriding a published or draft entry.\n * This is necessary because the relations are uni-directional and the target entry is not aware of the source entry.\n * This is not the case for bi-directional relations, where the target entry is also linked to the source entry.\n */\nconst load = async (uid: UID.ContentType, { oldVersions, newVersions }: LoadContext) => {\n const updates = [] as any;\n\n // Iterate all components and content types to find relations that need to be updated\n await strapi.db.transaction(async ({ trx }) => {\n const contentTypes = Object.values(strapi.contentTypes) as Schema.ContentType[];\n const components = Object.values(strapi.components) as Schema.Component[];\n\n for (const model of [...contentTypes, ...components]) {\n const dbModel = strapi.db.metadata.get(model.uid);\n\n for (const attribute of Object.values(dbModel.attributes) as any) {\n /**\n * Only consider unidirectional relations\n */\n if (\n attribute.type !== 'relation' ||\n attribute.target !== uid ||\n attribute.inversedBy ||\n attribute.mappedBy\n ) {\n continue;\n }\n\n // TODO: joinColumn relations\n const joinTable = attribute.joinTable;\n if (!joinTable) {\n continue;\n }\n\n const { name: sourceColumnName } = joinTable.joinColumn;\n const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n /**\n * Load all relations that need to be updated\n */\n // NOTE: when the model has draft and publish, we can assume relation are only draft to draft & published to published\n const ids = oldVersions.map((entry) => entry.id);\n\n const oldVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n if (oldVersionsRelations.length > 0) {\n updates.push({ joinTable, relations: oldVersionsRelations });\n }\n\n /**\n * if publishing\n * if published version exists\n * updated published versions links\n * else\n * create link to newly published version\n *\n * if discarding\n * if published version link exists & not draft version link\n * create link to new draft version\n */\n\n if (!model.options?.draftAndPublish) {\n const ids = newVersions.map((entry) => entry.id);\n\n const newVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n if (newVersionsRelations.length > 0) {\n // when publishing a draft that doesn't have a published version yet,\n // copy the links to the draft over to the published version\n // when discarding a published version, if no drafts exists\n const discardToAdd = newVersionsRelations\n .filter((relation) => {\n const matchingOldVerion = oldVersionsRelations.find((oldRelation) => {\n return oldRelation[sourceColumnName] === relation[sourceColumnName];\n });\n\n return !matchingOldVerion;\n })\n .map(omit('id'));\n\n updates.push({ joinTable, relations: discardToAdd });\n }\n }\n }\n }\n });\n\n return updates;\n};\n\n/**\n * Updates uni directional relations to target the right entries when overriding published or draft entries.\n *\n * @param oldEntries The old entries that are being overridden\n * @param newEntries The new entries that are overriding the old ones\n * @param oldRelations The relations that were previously loaded with `load` @see load\n */\nconst sync = async (\n oldEntries: { id: string; locale: string }[],\n newEntries: { id: string; locale: string }[],\n oldRelations: { joinTable: any; relations: any[] }[]\n) => {\n /**\n * Create a map of old entry ids to new entry ids\n *\n * Will be used to update the relation target ids\n */\n const newEntryByLocale = keyBy('locale', newEntries);\n const oldEntriesMap = oldEntries.reduce(\n (acc, entry) => {\n const newEntry = newEntryByLocale[entry.locale];\n if (!newEntry) return acc;\n acc[entry.id] = newEntry.id;\n return acc;\n },\n {} as Record<string, string>\n );\n\n await strapi.db.transaction(async ({ trx }) => {\n // Iterate old relations that are deleted and insert the new ones\n for (const { joinTable, relations } of oldRelations) {\n // Update old ids with the new ones\n const column = joinTable.inverseJoinColumn.name;\n\n const newRelations = relations.map((relation) => {\n const newId = oldEntriesMap[relation[column]];\n return { ...relation, [column]: newId };\n });\n\n // Insert those relations into the join table\n await trx.batchInsert(joinTable.name, newRelations, 1000);\n }\n });\n};\n\nexport { load, sync };\n","/* eslint-disable no-continue */\nimport { keyBy } from 'lodash/fp';\nimport { async } from '@strapi/utils';\nimport type { UID, Schema } from '@strapi/types';\n\ninterface LoadContext {\n oldVersions: { id: string; locale: string }[];\n newVersions: { id: string; locale: string }[];\n}\n\n/**\n * Loads all bidirectional relations that need to be synchronized when content entries change state\n * (e.g., during publish/unpublish operations).\n *\n * In Strapi, bidirectional relations allow maintaining order from both sides of the relation.\n * When an entry is published, the following occurs:\n *\n * 1. The old published entry is deleted\n * 2. A new entry is created with all its relations\n *\n * This process affects relation ordering in the following way:\n *\n * Initial state (Entry A related to X, Y, Z):\n * ```\n * Entry A (draft) Entry A (published)\n * │ │\n * ├──(1)→ X ├──(1)→ X\n * ├──(2)→ Y ├──(2)→ Y\n * └──(3)→ Z └──(3)→ Z\n *\n * X's perspective: Y's perspective: Z's perspective:\n * └──(2)→ Entry A └──(1)→ Entry A └──(3)→ Entry A\n * ```\n *\n * After publishing Entry A (without relation order sync):\n * ```\n * Entry A (draft) Entry A (new published)\n * │ │\n * ├──(1)→ X ├──(1)→ X\n * ├──(2)→ Y ├──(2)→ Y\n * └──(3)→ Z └──(3)→ Z\n *\n * X's perspective: Y's perspective: Z's perspective:\n * └──(3)→ Entry A └──(3)→ Entry A └──(3)→ Entry A\n * (all relations appear last in order)\n * ```\n *\n * This module preserves the original ordering from both perspectives by:\n * 1. Capturing the relation order before the entry state changes\n * 2. Restoring this order after the new relations are created\n *\n * @param uid - The unique identifier of the content type being processed\n * @param context - Object containing arrays of old and new entry versions\n * @returns Array of objects containing join table metadata and relations to be updated\n */\nconst load = async (uid: UID.ContentType, { oldVersions }: LoadContext) => {\n const relationsToUpdate = [] as any;\n\n await strapi.db.transaction(async ({ trx }) => {\n const contentTypes = Object.values(strapi.contentTypes) as Schema.ContentType[];\n const components = Object.values(strapi.components) as Schema.Component[];\n\n for (const model of [...contentTypes, ...components]) {\n const dbModel = strapi.db.metadata.get(model.uid);\n\n for (const attribute of Object.values(dbModel.attributes) as any) {\n // Skip if not a bidirectional relation targeting our content type\n if (\n attribute.type !== 'relation' ||\n attribute.target !== uid ||\n !(attribute.inversedBy || attribute.mappedBy)\n ) {\n continue;\n }\n\n // If it's a self referencing relation, there is no need to sync any relation\n // The order will already be handled as both sides are inside the same content type\n if (model.uid === uid) {\n continue;\n }\n\n const joinTable = attribute.joinTable;\n if (!joinTable) {\n continue;\n }\n\n const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n // Load all relations that need their order preserved\n const oldEntryIds = oldVersions.map((entry) => entry.id);\n\n const existingRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, oldEntryIds)\n .transacting(trx);\n\n if (existingRelations.length > 0) {\n relationsToUpdate.push({ joinTable, relations: existingRelations });\n }\n }\n }\n });\n\n return relationsToUpdate;\n};\n\n/**\n * Synchronizes the order of bidirectional relations after content entries have changed state.\n *\n * When entries change state (e.g., draft → published), their IDs change and all relations are recreated.\n * While the order of relations from the entry's perspective is maintained (as they're created in order),\n * the inverse relations (from related entries' perspective) would all appear last in order since they're new.\n *\n * Example:\n * ```\n * Before publish:\n * Article(id:1) →(order:1)→ Category(id:5)\n * Category(id:5) →(order:3)→ Article(id:1)\n *\n * After publish (without sync):\n * Article(id:2) →(order:1)→ Category(id:5) [order preserved]\n * Category(id:5) →(order:99)→ Article(id:2) [order lost - appears last]\n *\n * After sync:\n * Article(id:2) →(order:1)→ Category(id:5) [order preserved]\n * Category(id:5) →(order:3)→ Article(id:2) [order restored]\n * ```\n *\n * @param oldEntries - Array of previous entry versions with their IDs and locales\n * @param newEntries - Array of new entry versions with their IDs and locales\n * @param existingRelations - Array of join table data containing the relations to be updated\n */\nconst sync = async (\n oldEntries: { id: string; locale: string }[],\n newEntries: { id: string; locale: string }[],\n existingRelations: { joinTable: any; relations: any[] }[]\n) => {\n // Group new entries by locale for easier lookup\n const newEntriesByLocale = keyBy('locale', newEntries);\n\n // Create a mapping of old entry IDs to new entry IDs based on locale\n const entryIdMapping = oldEntries.reduce(\n (acc, oldEntry) => {\n const newEntry = newEntriesByLocale[oldEntry.locale];\n if (!newEntry) return acc;\n acc[oldEntry.id] = newEntry.id;\n return acc;\n },\n {} as Record<string, string>\n );\n\n await strapi.db.transaction(async ({ trx }) => {\n for (const { joinTable, relations } of existingRelations) {\n const sourceColumn = joinTable.inverseJoinColumn.name;\n const targetColumn = joinTable.joinColumn.name;\n const orderColumn = joinTable.orderColumnName;\n\n // Failsafe in case those don't exist\n if (!sourceColumn || !targetColumn || !orderColumn) {\n continue;\n }\n\n // Update order values for each relation\n // TODO: Find a way to batch it more efficiently\n await async.map(relations, (relation: any) => {\n const {\n [sourceColumn]: oldSourceId,\n [targetColumn]: targetId,\n [orderColumn]: originalOrder,\n } = relation;\n\n // Update the order column for the new relation entry\n return trx\n .from(joinTable.name)\n .where(sourceColumn, entryIdMapping[oldSourceId])\n .where(targetColumn, targetId)\n .update({ [orderColumn]: originalOrder });\n });\n }\n });\n};\n\nexport { load, sync };\n","import { yup } from '@strapi/utils';\n\nconst textNodeValidator = yup.object().shape({\n type: yup.string().equals(['text']).required(),\n text: yup\n .string()\n .test(\n 'is-valid-text',\n 'Text must be defined with at least an empty string',\n (text: unknown) => {\n return typeof text === 'string' || text === '';\n }\n ),\n bold: yup.boolean(),\n italic: yup.boolean(),\n underline: yup.boolean(),\n strikethrough: yup.boolean(),\n code: yup.boolean(),\n});\n\nconst checkValidLink = (link: string) => {\n try {\n // eslint-disable-next-line no-new\n new URL(link.startsWith('/') ? `https://strapi.io${link}` : link);\n } catch (error) {\n return false;\n }\n return true;\n};\n\nconst linkNodeValidator = yup.object().shape({\n type: yup.string().equals(['link']).required(),\n url: yup\n .string()\n .test('invalid-url', 'Please specify a valid link.', (value) => checkValidLink(value ?? '')),\n children: yup.array().of(textNodeValidator).required(),\n});\n\n// TODO: remove any with a correct Type\nconst inlineNodeValidator: any = yup.lazy((value: { type: string }) => {\n switch (value.type) {\n case 'text':\n return textNodeValidator;\n case 'link':\n return linkNodeValidator;\n default:\n return yup.mixed().test('invalid-type', 'Inline node must be Text or Link', () => {\n return false;\n });\n }\n});\n\nconst paragraphNodeValidator = yup.object().shape({\n type: yup.string().equals(['paragraph']).required(),\n children: yup\n .array()\n .of(inlineNodeValidator)\n .min(1, 'Paragraph node children must have at least one Text or Link node')\n .required(),\n});\n\nconst headingNodeValidator = yup.object().shape({\n type: yup.string().equals(['heading']).required(),\n level: yup.number().oneOf([1, 2, 3, 4, 5, 6]).required(),\n children: yup\n .array()\n .of(inlineNodeValidator)\n .min(1, 'Heading node children must have at least one Text or Link node')\n .required(),\n});\n\nconst quoteNodeValidator = yup.object().shape({\n type: yup.string().equals(['quote']).required(),\n children: yup\n .array()\n .of(inlineNodeValidator)\n .min(1, 'Quote node children must have at least one Text or Link node')\n .required(),\n});\n\nconst codeBlockValidator = yup.object().shape({\n type: yup.string().equals(['code']).required(),\n syntax: yup.string().nullable(),\n children: yup\n .array()\n .of(textNodeValidator)\n .min(1, 'Quote node children must have at least one Text or Link node')\n .required(),\n});\n\nconst listItemNode = yup.object().shape({\n type: yup.string().equals(['list-item']).required(),\n children: yup.array().of(inlineNodeValidator).required(),\n});\n\n// Allow children to be either a listItemNode or a listNode itself\n// @ts-expect-error - listChildrenValidator needs a type\nconst listChildrenValidator = yup.lazy((value: { type: string }) => {\n switch (value.type) {\n case 'list':\n return listNodeValidator;\n case 'list-item':\n return listItemNode;\n default:\n return yup.mixed().test('invalid-type', 'Inline node must be list-item or list', () => {\n return false;\n });\n }\n});\n\n// @ts-expect-error - listNodeValidator needs a type\nconst listNodeValidator = yup.object().shape({\n type: yup.string().equals(['list']).required(),\n format: yup.string().equals(['ordered', 'unordered']).required(),\n children: yup\n .array()\n .of(listChildrenValidator)\n .min(1, 'List node children must have at least one ListItem or ListNode')\n .required(),\n});\n\nconst imageNodeValidator = yup.object().shape({\n type: yup.string().equals(['image']).required(),\n image: yup.object().shape({\n name: yup.string().required(),\n alternativeText: yup.string().nullable(),\n url: yup.string().required(),\n caption: yup.string().nullable(),\n width: yup.number().required(),\n height: yup.number().required(),\n formats: yup.object().required(),\n hash: yup.string().required(),\n ext: yup.string().required(),\n mime: yup.string().required(),\n size: yup.number().required(),\n previewUrl: yup.string().nullable(),\n provider: yup.string().required(),\n provider_metadata: yup.mixed().nullable(),\n createdAt: yup.string().required(),\n updatedAt: yup.string().required(),\n }),\n children: yup.array().of(inlineNodeValidator).required(),\n});\n\n// TODO: remove the any and replace with a correct Type\nconst blockNodeValidator: any = yup.lazy((value: { type: string }) => {\n switch (value.type) {\n case 'paragraph':\n return paragraphNodeValidator;\n case 'heading':\n return headingNodeValidator;\n case 'quote':\n return quoteNodeValidator;\n case 'list':\n return listNodeValidator;\n case 'image':\n return imageNodeValidator;\n case 'code':\n return codeBlockValidator;\n default:\n return yup.mixed().test('invalid-type', 'Block node is of invalid type', () => {\n return false;\n });\n }\n});\n\nconst blocksValidatorSchema = yup.array().of(blockNodeValidator);\n\nexport const blocksValidator = () => blocksValidatorSchema;\n","/**\n * Validators check if the entry data meets specific criteria before saving or publishing.\n * (e.g., length, range, format).\n *\n * Drafts have limited validations (mainly max constraints),\n * while published content undergoes full validation.\n *\n * The system also takes locales into account when validating data.\n * E.g, unique fields must be unique within the same locale.\n */\nimport _ from 'lodash';\nimport { yup } from '@strapi/utils';\nimport type { Schema, Struct, Modules } from '@strapi/types';\nimport { blocksValidator } from './blocks-validator';\n\nimport type { ComponentContext } from '.';\n\nexport interface ValidatorMetas<\n TAttribute extends Schema.Attribute.AnyAttribute = Schema.Attribute.AnyAttribute,\n TValue extends Schema.Attribute.Value<TAttribute> = Schema.Attribute.Value<TAttribute>,\n> {\n attr: TAttribute;\n model: Struct.Schema;\n updatedAttribute: {\n name: string;\n value: TValue;\n };\n componentContext?: ComponentContext;\n entity?: Modules.EntityValidator.Entity;\n}\n\ninterface ValidatorOptions {\n isDraft: boolean;\n locale?: string;\n}\n\n/* Validator utils */\n\n/**\n * Adds minLength validator\n */\nconst addMinLengthValidator = (\n validator: yup.StringSchema,\n {\n attr,\n }: {\n attr:\n | Schema.Attribute.String\n | Schema.Attribute.Text\n | Schema.Attribute.RichText\n | Schema.Attribute.Password\n | Schema.Attribute.Email\n | Schema.Attribute.UID;\n },\n { isDraft }: ValidatorOptions\n) => {\n return attr.minLength && _.isInteger(attr.minLength) && !isDraft\n ? validator.min(attr.minLength)\n : validator;\n};\n\n/**\n * Adds maxLength validator\n * @returns {StringSchema}\n */\nconst addMaxLengthValidator = (\n validator: yup.StringSchema,\n {\n attr,\n }: {\n attr:\n | Schema.Attribute.String\n | Schema.Attribute.Text\n | Schema.Attribute.RichText\n | Schema.Attribute.Password\n | Schema.Attribute.Email\n | Schema.Attribute.UID;\n }\n) => {\n return attr.maxLength && _.isInteger(attr.maxLength) ? validator.max(attr.maxLength) : validator;\n};\n\n/**\n * Adds min integer validator\n * @returns {NumberSchema}\n */\nconst addMinIntegerValidator = (\n validator: yup.NumberSchema,\n {\n attr,\n }: {\n attr: Schema.Attribute.Integer | Schema.Attribute.BigInteger;\n },\n { isDraft }: ValidatorOptions\n) => (_.isNumber(attr.min) && !isDraft ? validator.min(_.toInteger(attr.min)) : validator);\n\n/**\n * Adds max integer validator\n */\nconst addMaxIntegerValidator = (\n validator: yup.NumberSchema,\n {\n attr,\n }: {\n attr: Schema.Attribute.Integer | Schema.Attribute.BigInteger;\n }\n) => (_.isNumber(attr.max) ? validator.max(_.toInteger(attr.max)) : validator);\n\n/**\n * Adds min float/decimal validator\n */\nconst addMinFloatValidator = (\n validator: yup.NumberSchema,\n {\n attr,\n }: {\n attr: Schema.Attribute.Decimal | Schema.Attribute.Float;\n },\n { isDraft }: ValidatorOptions\n) => (_.isNumber(attr.min) && !isDraft ? validator.min(attr.min) : validator);\n\n/**\n * Adds max float/decimal validator\n */\nconst addMaxFloatValidator = (\n validator: yup.NumberSchema,\n {\n attr,\n }: {\n attr: Schema.Attribute.Decimal | Schema.Attribute.Float;\n }\n) => (_.isNumber(attr.max) ? validator.max(attr.max) : validator);\n\n/**\n * Adds regex validator\n */\nconst addStringRegexValidator = (\n validator: yup.StringSchema,\n {\n attr,\n }: {\n attr:\n | Schema.Attribute.String\n | Schema.Attribute.Text\n | Schema.Attribute.RichText\n | Schema.Attribute.Password\n | Schema.Attribute.Email\n | Schema.Attribute.UID;\n },\n { isDraft }: ValidatorOptions\n) => {\n return 'regex' in attr && !_.isUndefined(attr.regex) && !isDraft\n ? validator.matches(new RegExp(attr.regex), { excludeEmptyString: !attr.required })\n : validator;\n};\n\nconst addUniqueValidator = <T extends yup.AnySchema>(\n validator: T,\n {\n attr,\n model,\n updatedAttribute,\n entity,\n componentContext,\n }: ValidatorMetas<Schema.Attribute.AnyAttribute & Schema.Attribute.UniqueOption>,\n options: ValidatorOptions\n): T => {\n if (attr.type !== 'uid' && !attr.unique) {\n return validator;\n }\n\n const validateUniqueFieldWithinComponent = async (value: any): Promise<boolean> => {\n if (!componentContext) {\n return false;\n }\n\n // If we are validating a unique field within a repeatable component,\n // we first need to ensure that the repeatable in the current entity is\n // valid against itself.\n const hasRepeatableData = componentContext.repeatableData.length > 0;\n if (hasRepeatableData) {\n const { name: updatedName, value: updatedValue } = updatedAttribute;\n // Construct the full path to the unique field within the component.\n const pathToCheck = [...componentContext.pathToComponent.slice(1), updatedName].join('.');\n\n // Extract the values from the repeatable data using the constructed path\n const values = componentContext.repeatableData.map((item) => {\n return pathToCheck.split('.').reduce((acc, key) => acc[key], item as any);\n });\n\n // Check if the value is repeated in the current entity\n const isUpdatedAttributeRepeatedInThisEntity =\n values.filter((value) => value === updatedValue).length > 1;\n\n if (isUpdatedAttributeRepeatedInThisEntity) {\n return false;\n }\n }\n\n /**\n * When `componentContext` is present it means we are dealing with a unique\n * field within a component.\n *\n * The unique validation must consider the specific context of the\n * component, which will always be contained within a parent content type\n * and may also be nested within another component.\n *\n * We construct a query that takes into account the parent's model UID,\n * dimensions (such as draft and publish state/locale) and excludes the current\n * content type entity by its ID if provided.\n */\n const {\n model: parentModel,\n options: parentOptions,\n id: excludeId,\n } = componentContext.parentContent;\n\n const whereConditions: Record<string, any> = {};\n const isParentDraft = parentOptions && parentOptions.isDraft;\n\n whereConditions.publishedAt = isParentDraft ? null : { $notNull: true };\n\n if (parentOptions?.locale) {\n whereConditions.locale = parentOptions.locale;\n }\n\n if (excludeId && !Number.isNaN(excludeId)) {\n whereConditions.id = { $ne: excludeId };\n }\n\n const queryUid = parentModel.uid;\n const queryWhere = {\n ...componentContext.pathToComponent.reduceRight((acc, key) => ({ [key]: acc }), {\n [updatedAttribute.name]: value,\n }),\n\n ...whereConditions,\n };\n\n // The validation should pass if there is no other record found from the query\n return !(await strapi.db.query(queryUid).findOne({ where: queryWhere }));\n };\n\n const validateUniqueFieldWithinDynamicZoneComponent = async (\n startOfPath: string\n ): Promise<boolean> => {\n if (!componentContext) {\n return false;\n }\n\n const targetComponentUID = model.uid;\n // Ensure that the value is unique within the dynamic zone in this entity.\n const countOfValueInThisEntity = (componentContext?.fullDynamicZoneContent ?? []).reduce(\n (acc, component) => {\n if (component.__component !== targetComponentUID) {\n return acc;\n }\n\n const updatedValue = component[updatedAttribute.name];\n return updatedValue === updatedAttribute.value ? acc + 1 : acc;\n },\n 0\n );\n\n if (countOfValueInThisEntity > 1) {\n // If the value is repeated in the current entity, the validation fails.\n return false;\n }\n\n // Build a query for the parent content type to find all entities in the\n // same locale and publication state\n type QueryType = {\n select: string[];\n where: {\n published_at?: { $eq: null } | { $ne: null };\n id?: { $ne: number };\n locale?: string;\n };\n populate: {\n [key: string]: {\n on: {\n [key: string]: {\n select: string[];\n where: { [key: string]: string | number | boolean };\n };\n };\n };\n };\n };\n\n // Populate the dynamic zone for any components that share the same value\n // as the updated attribute.\n const query: QueryType = {\n select: ['id'],\n where: {},\n populate: {\n [startOfPath]: {\n on: {\n [targetComponentUID]: {\n select: ['id'],\n where: { [updatedAttribute.name]: updatedAttribute.value },\n },\n },\n },\n },\n };\n\n const { options, id } = componentContext.parentContent;\n\n if (options?.isDraft !== undefined) {\n query.where.published_at = options.isDraft ? { $eq: null } : { $ne: null };\n }\n\n if (id) {\n query.where.id = { $ne: id };\n }\n\n if (options?.locale) {\n query.where.locale = options.locale;\n }\n\n const parentModelQueryResult = await strapi.db\n .query(componentContext.parentContent.model.uid)\n .findMany(query);\n\n // Filter the results to only include results that have components in the\n // dynamic zone that match the target component type.\n const filteredResults = parentModelQueryResult\n .filter((result) => Array.isArray(result[startOfPath]) && result[startOfPath].length)\n .flatMap((result) => result[startOfPath])\n .filter((dynamicZoneComponent) => dynamicZoneComponent.__component === targetComponentUID);\n\n if (filteredResults.length >= 1) {\n return false;\n }\n\n return true;\n };\n\n return validator.test('unique', 'This attribute must be unique', async (value) => {\n /**\n * If the attribute value is `null` or an empty string we want to skip the unique validation.\n * Otherwise it'll only accept a single entry with that value in the database.\n */\n if (_.isNil(value) || value === '') {\n return true;\n }\n\n /**\n * We don't validate any unique constraint for draft entries.\n */\n if (options.isDraft) {\n return true;\n }\n\n const hasPathToComponent = componentContext && componentContext.pathToComponent.length > 0;\n if (hasPathToComponent) {\n // Detect if we are validating within a dynamiczone by checking if the first\n // path is a dynamiczone attribute in the parent content type.\n const startOfPath = componentContext.pathToComponent[0];\n const testingDZ =\n componentContext.parentContent.model.attributes[startOfPath].type === 'dynamiczone';\n\n if (testingDZ) {\n return validateUniqueFieldWithinDynamicZoneComponent(startOfPath);\n }\n\n return validateUniqueFieldWithinComponent(value);\n }\n\n /**\n * Here we are validating a scalar unique field from the content type's schema.\n * We construct a query to check if the value is unique\n * considering dimensions (e.g. locale, publication state) and excluding the current entity by its ID if available.\n */\n const scalarAttributeWhere: Record<string, any> = {\n [updatedAttribute.name]: value,\n publishedAt: { $notNull: true },\n };\n\n if (options?.locale) {\n scalarAttributeWhere.locale = options.locale;\n }\n\n if (entity?.id) {\n scalarAttributeWhere.id = { $ne: entity.id };\n }\n\n // The validation should pass if there is no other record found from the query\n return !(await strapi.db\n .query(model.uid)\n .findOne({ where: scalarAttributeWhere, select: ['id'] }));\n });\n};\n\n/* Type validators */\n\nconst stringValidator = (\n metas: ValidatorMetas<\n | Schema.Attribute.String\n | Schema.Attribute.Text\n | Schema.Attribute.RichText\n | Schema.Attribute.Password\n | Schema.Attribute.Email\n | Schema.Attribute.UID\n >,\n options: ValidatorOptions\n) => {\n let schema = yup.string().transform((val, originalVal) => originalVal);\n\n schema = addMinLengthValidator(schema, metas, options);\n schema = addMaxLengthValidator(schema, metas);\n schema = addStringRegexValidator(schema, metas, options);\n schema = addUniqueValidator(schema, metas, options);\n\n return schema;\n};\n\nexport const emailValidator = (\n metas: ValidatorMetas<Schema.Attribute.Email>,\n options: ValidatorOptions\n) => {\n const schema = stringValidator(metas, options);\n\n if (options.isDraft) {\n return schema;\n }\n\n return schema.email().min(\n 1,\n // eslint-disable-next-line no-template-curly-in-string\n '${path} cannot be empty'\n );\n};\n\nexport const uidValidator = (\n metas: ValidatorMetas<Schema.Attribute.UID>,\n options: ValidatorOptions\n) => {\n const schema = stringValidator(metas, options);\n\n if (options.isDraft) {\n return schema;\n }\n\n return schema.matches(/^[A-Za-z0-9-_.~]*$/);\n};\n\nexport const enumerationValidator = ({ attr }: { attr: Schema.Attribute.Enumeration }) => {\n return yup\n .string()\n .oneOf((Array.isArray(attr.enum) ? attr.enum : [attr.enum]).concat(null as any));\n};\n\nexport const integerValidator = (\n metas: ValidatorMetas<Schema.Attribute.Integer | Schema.Attribute.BigInteger>,\n options: ValidatorOptions\n) => {\n let schema = yup.number().integer();\n\n schema = addMinIntegerValidator(schema, metas, options);\n schema = addMaxIntegerValidator(schema, metas);\n schema = addUniqueValidator(schema, metas, options);\n\n return schema;\n};\n\nexport const floatValidator = (\n metas: ValidatorMetas<Schema.Attribute.Decimal | Schema.Attribute.Float>,\n options: ValidatorOptions\n) => {\n let schema = yup.number();\n\n schema = addMinFloatValidator(schema, metas, options);\n schema = addMaxFloatValidator(schema, metas);\n schema = addUniqueValidator(schema, metas, options);\n\n return schema;\n};\n\nexport const bigintegerValidator = (\n metas: ValidatorMetas<Schema.Attribute.BigInteger>,\n options: ValidatorOptions\n) => {\n const schema = yup.mixed();\n return addUniqueValidator(schema, metas, options);\n};\n\nexport const datesValidator = (\n metas: ValidatorMetas<\n | Schema.Attribute.Date\n | Schema.Attribute.DateTime\n | Schema.Attribute.Time\n | Schema.Attribute.Timestamp\n >,\n options: ValidatorOptions\n) => {\n const schema = yup.mixed();\n return addUniqueValidator(schema, metas, options);\n};\n\nexport const Validators = {\n string: stringValidator,\n text: stringValidator,\n richtext: stringValidator,\n password: stringValidator,\n email: emailValidator,\n enumeration: enumerationValidator,\n boolean: () => yup.boolean(),\n uid: uidValidator,\n json: () => yup.mixed(),\n integer: integerValidator,\n biginteger: bigintegerValidator,\n float: floatValidator,\n decimal: floatValidator,\n date: datesValidator,\n time: datesValidator,\n datetime: datesValidator,\n timestamp: datesValidator,\n blocks: blocksValidator,\n};\n","/**\n * Entity validator\n * Module that will validate input data for entity creation or edition\n */\n\nimport { uniqBy, castArray, isNil, isArray, mergeWith } from 'lodash';\nimport { has, prop, isObject, isEmpty } from 'lodash/fp';\nimport strapiUtils from '@strapi/utils';\nimport type { Modules, UID, Struct, Schema } from '@strapi/types';\nimport { Validators, ValidatorMetas } from './validators';\n\ntype CreateOrUpdate = 'creation' | 'update';\n\nconst { yup, validateYupSchema } = strapiUtils;\nconst { isMediaAttribute, isScalarAttribute, getWritableAttributes } = strapiUtils.contentTypes;\nconst { ValidationError } = strapiUtils.errors;\n\ntype ID = { id: string | number };\n\ntype RelationSource = string | number | ID;\n\nexport type ComponentContext = {\n parentContent: {\n // The model of the parent content type that contains the current component.\n model: Struct.Schema;\n // The numeric id of the parent entity that contains the component.\n id?: number;\n // The options passed to the entity validator. From which we can extract\n // entity dimensions such as locale and publication state.\n options?: ValidatorContext;\n };\n // The path to the component within the parent content type schema.\n pathToComponent: string[];\n // If working with a repeatable component this contains the\n // full data of the repeatable component in the current entity.\n repeatableData: Modules.EntityValidator.Entity[];\n fullDynamicZoneContent?: Schema.Attribute.Value<Schema.Attribute.DynamicZone>;\n};\n\ninterface WithComponentContext {\n componentContext?: ComponentContext;\n}\n\ninterface ValidatorMeta<TAttribute = Schema.Attribute.AnyAttribute> extends WithComponentContext {\n attr: TAttribute;\n updatedAttribute: { name: string; value: any };\n}\n\ninterface ValidatorContext {\n isDraft?: boolean;\n locale?: string | null;\n}\n\ninterface ModelValidatorMetas extends WithComponentContext {\n model: Struct.Schema;\n data: Record<string, unknown>;\n entity?: Modules.EntityValidator.Entity;\n}\n\nconst isInteger = (value: unknown): value is number => Number.isInteger(value);\n\nconst addMinMax = <\n T extends {\n min(value: number): T;\n max(value: number): T;\n },\n>(\n validator: T,\n {\n attr,\n updatedAttribute,\n }: ValidatorMeta<Schema.Attribute.AnyAttribute & Schema.Attribute.MinMaxOption<string | number>>\n): T => {\n let nextValidator: T = validator;\n\n if (\n isInteger(attr.min) &&\n (('required' in attr && attr.required) ||\n (Array.isArray(updatedAttribute.value) && updatedAttribute.value.length > 0))\n ) {\n nextValidator = nextValidator.min(attr.min);\n }\n if (isInteger(attr.max)) {\n nextValidator = nextValidator.max(attr.max);\n }\n return nextValidator;\n};\n\nconst addRequiredValidation = (createOrUpdate: CreateOrUpdate) => {\n return <T extends strapiUtils.yup.AnySchema>(\n validator: T,\n {\n attr: { required },\n }: ValidatorMeta<Partial<Schema.Attribute.AnyAttribute & Schema.Attribute.RequiredOption>>\n ): T => {\n let nextValidator = validator;\n\n if (required) {\n if (createOrUpdate === 'creation') {\n nextValidator = nextValidator.notNil();\n } else if (createOrUpdate === 'update') {\n nextValidator = nextValidator.notNull();\n }\n } else {\n nextValidator = nextValidator.nullable();\n }\n return nextValidator;\n };\n};\n\nconst addDefault = (createOrUpdate: CreateOrUpdate) => {\n return (\n validator: strapiUtils.yup.BaseSchema,\n { attr }: ValidatorMeta<Schema.Attribute.AnyAttribute & Schema.Attribute.DefaultOption<unknown>>\n ) => {\n let nextValidator = validator;\n\n if (createOrUpdate === 'creation') {\n if (\n ((attr.type === 'component' && attr.repeatable) || attr.type === 'dynamiczone') &&\n !attr.required\n ) {\n nextValidator = nextValidator.default([]);\n } else {\n nextValidator = nextValidator.default(attr.default);\n }\n } else {\n nextValidator = nextValidator.default(undefined);\n }\n\n return nextValidator;\n };\n};\n\nconst preventCast = (validator: strapiUtils.yup.AnySchema) =>\n validator.transform((val, originalVal) => originalVal);\n\nconst createComponentValidator =\n (createOrUpdate: CreateOrUpdate) =>\n (\n {\n attr,\n updatedAttribute,\n componentContext,\n }: ValidatorMeta<Schema.Attribute.Component<UID.Component, boolean>>,\n { isDraft }: ValidatorContext\n ) => {\n const model = strapi.getModel(attr.component);\n if (!model) {\n throw new Error('Validation failed: Model not found');\n }\n\n if (attr?.repeatable) {\n // FIXME: yup v1\n\n let validator = yup\n .array()\n .of(\n yup.lazy((item) =>\n createModelValidator(createOrUpdate)(\n { componentContext, model, data: item },\n { isDraft }\n ).notNull()\n ) as any\n );\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: true },\n updatedAttribute,\n });\n\n if (!isDraft) {\n validator = addMinMax(validator, { attr, updatedAttribute });\n }\n\n return validator;\n }\n\n let validator = createModelValidator(createOrUpdate)(\n {\n model,\n data: updatedAttribute.value,\n componentContext,\n },\n { isDraft }\n );\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: !isDraft && attr.required },\n updatedAttribute,\n });\n\n return validator;\n };\n\nconst createDzValidator =\n (createOrUpdate: CreateOrUpdate) =>\n ({ attr, updatedAttribute, componentContext }: ValidatorMeta, { isDraft }: ValidatorContext) => {\n let validator;\n\n validator = yup.array().of(\n yup.lazy((item) => {\n const model = strapi.getModel(prop('__component', item));\n const schema = yup\n .object()\n .shape({\n __component: yup.string().required().oneOf(Object.keys(strapi.components)),\n })\n .notNull();\n\n return model\n ? schema.concat(\n createModelValidator(createOrUpdate)(\n { model, data: item, componentContext },\n { isDraft }\n )\n )\n : schema;\n }) as any // FIXME: yup v1\n );\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: true },\n updatedAttribute,\n });\n\n if (!isDraft) {\n validator = addMinMax(validator, { attr, updatedAttribute });\n }\n\n return validator;\n };\n\nconst createRelationValidator = ({\n updatedAttribute,\n}: ValidatorMeta<Schema.Attribute.Relation>) => {\n let validator;\n\n if (Array.isArray(updatedAttribute.value)) {\n validator = yup.array().of(yup.mixed());\n } else {\n validator = yup.mixed();\n }\n\n return validator;\n};\n\nconst createScalarAttributeValidator =\n (createOrUpdate: CreateOrUpdate) => (metas: ValidatorMeta, options: ValidatorContext) => {\n let validator;\n\n if (has(metas.attr.type, Validators)) {\n validator = (Validators as any)[metas.attr.type](metas, options);\n } else {\n // No validators specified - fall back to mixed\n validator = yup.mixed();\n }\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: !options.isDraft && metas.attr.required },\n updatedAttribute: metas.updatedAttribute,\n });\n\n return validator;\n };\n\nconst createAttributeValidator =\n (createOrUpdate: CreateOrUpdate) => (metas: ValidatorMetas, options: ValidatorContext) => {\n let validator = yup.mixed();\n\n if (isMediaAttribute(metas.attr)) {\n validator = yup.mixed();\n } else if (isScalarAttribute(metas.attr)) {\n validator = createScalarAttributeValidator(createOrUpdate)(metas, options);\n } else {\n if (metas.attr.type === 'component' && metas.componentContext) {\n // Build the path to the component within the parent content type schema.\n const pathToComponent = [\n ...(metas?.componentContext?.pathToComponent ?? []),\n metas.updatedAttribute.name,\n ];\n\n // If working with a repeatable component, determine the repeatable data\n // based on the component's path.\n\n // In order to validate the repeatable within this entity we need\n // access to the full repeatable data. In case we are validating a\n // nested component within a repeatable.\n // Hence why we set this up when the path to the component is only one level deep.\n const repeatableData = (\n metas.attr.repeatable && pathToComponent.length === 1\n ? metas.updatedAttribute.value\n : metas.componentContext?.repeatableData\n ) as Modules.EntityValidator.Entity[];\n\n const newComponentContext: ComponentContext = {\n ...metas.componentContext,\n pathToComponent,\n repeatableData,\n };\n\n validator = createComponentValidator(createOrUpdate)(\n {\n componentContext: newComponentContext,\n attr: metas.attr,\n updatedAttribute: metas.updatedAttribute,\n },\n options\n );\n } else if (metas.attr.type === 'dynamiczone' && metas.componentContext) {\n const newComponentContext: ComponentContext = {\n ...metas.componentContext,\n fullDynamicZoneContent: metas.updatedAttribute.value,\n pathToComponent: [...metas.componentContext.pathToComponent, metas.updatedAttribute.name],\n };\n\n Object.assign(metas, { componentContext: newComponentContext });\n\n validator = createDzValidator(createOrUpdate)(metas, options);\n } else if (metas.attr.type === 'relation') {\n validator = createRelationValidator({\n attr: metas.attr,\n updatedAttribute: metas.updatedAttribute,\n });\n }\n\n validator = preventCast(validator);\n }\n\n validator = addDefault(createOrUpdate)(validator, metas);\n\n return validator;\n };\n\nconst createModelValidator =\n (createOrUpdate: CreateOrUpdate) =>\n ({ componentContext, model, data, entity }: ModelValidatorMetas, options: ValidatorContext) => {\n const writableAttributes = model ? getWritableAttributes(model as any) : [];\n\n const schema = writableAttributes.reduce(\n (validators, attributeName) => {\n const metas = {\n attr: model.attributes[attributeName],\n updatedAttribute: { name: attributeName, value: prop(attributeName, data) },\n model,\n entity,\n componentContext,\n };\n\n const validator = createAttributeValidator(createOrUpdate)(metas, options);\n\n validators[attributeName] = validator;\n\n return validators;\n },\n {} as Record<string, strapiUtils.yup.BaseSchema>\n );\n\n return yup.object().shape(schema);\n };\n\nconst createValidateEntity = (createOrUpdate: CreateOrUpdate) => {\n return async <\n TUID extends UID.ContentType,\n TData extends Modules.EntityService.Params.Data.Input<TUID>,\n >(\n model: Schema.ContentType<TUID>,\n data: TData | Partial<TData> | undefined,\n options?: ValidatorContext,\n entity?: Modules.EntityValidator.Entity\n ): Promise<TData> => {\n if (!isObject(data)) {\n const { displayName } = model.info;\n\n throw new ValidationError(\n `Invalid payload submitted for the ${createOrUpdate} of an entity of type ${displayName}. Expected an object, but got ${typeof data}`\n );\n }\n\n const validator = createModelValidator(createOrUpdate)(\n {\n model,\n data,\n entity,\n componentContext: {\n // Set up the initial component context.\n // Keeping track of parent content type context in which a component will be used.\n // This is necessary to validate component field constraints such as uniqueness.\n parentContent: {\n id: entity?.id,\n model,\n options,\n },\n pathToComponent: [],\n repeatableData: [],\n },\n },\n {\n isDraft: options?.isDraft ?? false,\n locale: options?.locale ?? null,\n }\n )\n .test(\n 'relations-test',\n 'check that all relations exist',\n async function relationsValidation(data) {\n try {\n await checkRelationsExist(buildRelationsStore({ uid: model.uid, data }));\n } catch (e) {\n return this.createError({\n path: this.path,\n message: (e instanceof ValidationError && e.message) || 'Invalid relations',\n });\n }\n return true;\n }\n )\n .required();\n\n return validateYupSchema(validator, {\n strict: false,\n abortEarly: false,\n })(data);\n };\n};\n\n/**\n * Builds an object containing all the media and relations being associated with an entity\n */\nconst buildRelationsStore = <TUID extends UID.Schema>({\n uid,\n data,\n}: {\n uid: TUID;\n data: Record<string, unknown> | null;\n}): Record<string, ID[]> => {\n if (!uid) {\n throw new ValidationError(`Cannot build relations store: \"uid\" is undefined`);\n }\n\n if (isEmpty(data)) {\n return {};\n }\n\n const currentModel = strapi.getModel(uid);\n\n return Object.keys(currentModel.attributes).reduce(\n (result, attributeName: string) => {\n const attribute = currentModel.attributes[attributeName];\n const value = data[attributeName];\n\n if (isNil(value)) {\n return result;\n }\n\n switch (attribute.type) {\n case 'relation':\n case 'media': {\n if (\n attribute.type === 'relation' &&\n (attribute.relation === 'morphToMany' || attribute.relation === 'morphToOne')\n ) {\n // TODO: handle polymorphic relations\n break;\n }\n\n const target =\n // eslint-disable-next-line no-nested-ternary\n attribute.type === 'media' ? 'plugin::upload.file' : attribute.target;\n // As there are multiple formats supported for associating relations\n // with an entity, the value here can be an: array, object or number.\n let source: RelationSource[];\n if (Array.isArray(value)) {\n source = value;\n } else if (isObject(value)) {\n if ('connect' in value && !isNil(value.connect)) {\n source = value.connect as RelationSource[];\n } else if ('set' in value && !isNil(value.set)) {\n source = value.set as RelationSource[];\n } else {\n source = [];\n }\n } else {\n source = castArray(value as RelationSource);\n }\n const idArray = source.map((v) => ({\n id: typeof v === 'object' ? v.id : v,\n }));\n\n // Update the relationStore to keep track of all associations being made\n // with relations and media.\n result[target] = result[target] || [];\n result[target].push(...idArray);\n break;\n }\n case 'component': {\n return castArray(value).reduce((relationsStore, componentValue) => {\n if (!attribute.component) {\n throw new ValidationError(\n `Cannot build relations store from component, component identifier is undefined`\n );\n }\n\n return mergeWith(\n relationsStore,\n buildRelationsStore({\n uid: attribute.component,\n data: componentValue as Record<string, unknown>,\n }),\n (objValue, srcValue) => {\n if (isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n }\n );\n }, result) as Record<string, ID[]>;\n }\n case 'dynamiczone': {\n return castArray(value).reduce((relationsStore, dzValue) => {\n const value = dzValue as Record<string, unknown>;\n if (!value.__component) {\n throw new ValidationError(\n `Cannot build relations store from dynamiczone, component identifier is undefined`\n );\n }\n\n return mergeWith(\n relationsStore,\n buildRelationsStore({\n uid: value.__component as UID.Component,\n data: value,\n }),\n (objValue, srcValue) => {\n if (isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n }\n );\n }, result) as Record<string, ID[]>;\n }\n default:\n break;\n }\n\n return result;\n },\n {} as Record<string, ID[]>\n );\n};\n\n/**\n * Iterate through the relations store and validates that every relation or media\n * mentioned exists\n */\nconst checkRelationsExist = async (relationsStore: Record<string, ID[]> = {}) => {\n const promises: Promise<void>[] = [];\n\n for (const [key, value] of Object.entries(relationsStore)) {\n const evaluate = async () => {\n const uniqueValues = uniqBy(value, `id`);\n const count = await strapi.db.query(key as UID.Schema).count({\n where: {\n id: {\n $in: uniqueValues.map((v) => v.id),\n },\n },\n });\n\n if (count !== uniqueValues.length) {\n throw new ValidationError(\n `${\n uniqueValues.length - count\n } relation(s) of type ${key} associated with this entity do not exist`\n );\n }\n };\n promises.push(evaluate());\n }\n\n return Promise.all(promises);\n};\n\nconst entityValidator: Modules.EntityValidator.EntityValidator = {\n validateEntityCreation: createValidateEntity('creation'),\n validateEntityUpdate: createValidateEntity('update'),\n};\n\nexport default entityValidator;\n","import { omit, assoc, merge, curry } from 'lodash/fp';\n\nimport { async, contentTypes as contentTypesUtils, validate, errors } from '@strapi/utils';\n\nimport type { UID } from '@strapi/types';\nimport { wrapInTransaction, type RepositoryFactoryMethod } from './common';\nimport * as DP from './draft-and-publish';\nimport * as i18n from './internationalization';\nimport * as components from './components';\n\nimport { createEntriesService } from './entries';\nimport { pickSelectionParams } from './params';\nimport { createDocumentId } from '../../utils/transform-content-types-to-models';\nimport { getDeepPopulate } from './utils/populate';\nimport { transformParamsToQuery } from './transform/query';\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { createEventManager } from './events';\nimport * as unidirectionalRelations from './utils/unidirectional-relations';\nimport * as bidirectionalRelations from './utils/bidirectional-relations';\nimport entityValidator from '../entity-validator';\n\nconst { validators } = validate;\n\n// we have to typecast to reconcile the differences between validator and database getModel\nconst getModel = ((schema: UID.Schema) => strapi.getModel(schema)) as (schema: string) => any;\n\nexport const createContentTypeRepository: RepositoryFactoryMethod = (\n uid,\n validator = entityValidator\n) => {\n const contentType = strapi.contentType(uid);\n const hasDraftAndPublish = contentTypesUtils.hasDraftAndPublish(contentType);\n\n // Define the validations that should be performed\n const sortValidations = ['nonAttributesOperators', 'dynamicZones', 'morphRelations'];\n const fieldValidations = ['scalarAttributes'];\n const filtersValidations = ['nonAttributesOperators', 'dynamicZones', 'morphRelations'];\n const populateValidations = {\n sort: sortValidations,\n field: fieldValidations,\n filters: filtersValidations,\n populate: ['nonAttributesOperators'],\n };\n\n const validateParams = async (params: any) => {\n const ctx = { schema: contentType, getModel };\n await validators.validateFilters(ctx, params.filters, filtersValidations);\n await validators.validateSort(ctx, params.sort, sortValidations);\n await validators.validateFields(ctx, params.fields, fieldValidations);\n await validators.validatePopulate(ctx, params.populate, populateValidations);\n\n // Strip lookup from params, it's only used internally\n if (params.lookup) {\n throw new errors.ValidationError(\"Invalid params: 'lookup'\");\n }\n\n // TODO: add validate status, locale, pagination\n\n return params;\n };\n\n const entries = createEntriesService(uid, validator);\n\n const eventManager = createEventManager(strapi, uid);\n const emitEvent = curry(eventManager.emitEvent);\n\n async function findMany(params = {} as any) {\n const query = await async.pipe(\n validateParams,\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid)\n )(params || {});\n\n return strapi.db.query(uid).findMany(query);\n }\n\n async function findFirst(params = {} as any) {\n const query = await async.pipe(\n validateParams,\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).findOne(query);\n }\n\n // TODO: do we really want to add filters on the findOne now that we have findFirst ?\n async function findOne(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n validateParams,\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId }, query)\n )(params);\n\n return strapi.db.query(uid).findOne(query);\n }\n\n async function deleteDocument(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n validateParams,\n omit('status'),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId }, query)\n )(params);\n\n if (params.status === 'draft') {\n throw new Error('Cannot delete a draft document');\n }\n\n const entriesToDelete = await strapi.db.query(uid).findMany(query);\n\n // Delete all matched entries and its components\n const deletedEntries = await async.map(entriesToDelete, (entryToDelete: any) =>\n entries.delete(entryToDelete.id)\n );\n\n entriesToDelete.forEach(emitEvent('entry.delete'));\n\n return { documentId, entries: deletedEntries };\n }\n\n async function create(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n DP.filterDataPublishedAt,\n DP.setStatusToDraft(contentType),\n DP.statusToData(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToData(contentType)\n )(params);\n\n const doc = await entries.create(queryParams);\n\n emitEvent('entry.create', doc);\n\n if (hasDraftAndPublish && params.status === 'published') {\n return publish({\n ...params,\n documentId: doc.documentId,\n }).then((doc) => doc.entries[0]);\n }\n\n return doc;\n }\n\n async function clone(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n DP.filterDataPublishedAt,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n // Get deep populate\n const entriesToClone = await strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n // DP Enabled: Clone drafts\n // DP Disabled: Clone only the existing version (published)\n publishedAt: { $null: hasDraftAndPublish },\n },\n populate: getDeepPopulate(uid, { relationalFields: ['id'] }),\n });\n\n const clonedEntries = await async.map(\n entriesToClone,\n async.pipe(\n validateParams,\n omit(['id', 'createdAt', 'updatedAt']),\n // assign new documentId\n assoc('documentId', createDocumentId()),\n // Merge new data into it\n (data) => merge(data, queryParams.data),\n (data) => entries.create({ ...queryParams, data, status: 'draft' })\n )\n );\n\n clonedEntries.forEach(emitEvent('entry.create'));\n\n return { documentId: clonedEntries.at(0)?.documentId, entries: clonedEntries };\n }\n\n async function update(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n DP.filterDataPublishedAt,\n DP.setStatusToDraft(contentType),\n DP.statusToLookup(contentType),\n DP.statusToData(contentType),\n // Default locale will be set if not provided\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n i18n.localeToData(contentType)\n )(params);\n\n const { data, ...restParams } = await transformParamsDocumentId(uid, queryParams || {});\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams || {}) as any);\n\n // Validation\n // Find if document exists\n const entryToUpdate = await strapi.db\n .query(uid)\n .findOne({ ...query, where: { ...queryParams?.lookup, ...query?.where, documentId } });\n\n let updatedDraft = null;\n if (entryToUpdate) {\n updatedDraft = await entries.update(entryToUpdate, queryParams);\n emitEvent('entry.update', updatedDraft);\n }\n\n if (!updatedDraft) {\n const documentExists = await strapi.db\n .query(contentType.uid)\n .findOne({ where: { documentId } });\n\n if (documentExists) {\n updatedDraft = await entries.create({\n ...queryParams,\n data: { ...queryParams.data, documentId },\n });\n emitEvent('entry.create', updatedDraft);\n }\n }\n\n if (hasDraftAndPublish && updatedDraft && params.status === 'published') {\n return publish({\n ...params,\n documentId,\n }).then((doc) => doc.entries[0]);\n }\n\n return updatedDraft;\n }\n\n async function count(params = {} as any) {\n const query = await async.pipe(\n validateParams,\n DP.defaultStatus(contentType),\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).count(query);\n }\n\n async function publish(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const [draftsToPublish, oldPublishedVersions] = await Promise.all([\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null, // Ignore lookup\n },\n // Populate relations, media, compos and dz\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n }),\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n select: ['id', 'locale'],\n }),\n ]);\n\n // Load any unidirectional relation targetting the old published entries\n const relationsToSync = await unidirectionalRelations.load(uid, {\n newVersions: draftsToPublish,\n oldVersions: oldPublishedVersions,\n });\n\n const bidirectionalRelationsToSync = await bidirectionalRelations.load(uid, {\n newVersions: draftsToPublish,\n oldVersions: oldPublishedVersions,\n });\n\n // Delete old published versions\n await async.map(oldPublishedVersions, (entry: any) => entries.delete(entry.id));\n\n // Transform draft entry data and create published versions\n const publishedEntries = await async.map(draftsToPublish, (draft: any) =>\n entries.publish(draft, queryParams)\n );\n\n // Sync unidirectional relations with the new published entries\n await unidirectionalRelations.sync(\n [...oldPublishedVersions, ...draftsToPublish],\n publishedEntries,\n relationsToSync\n );\n\n await bidirectionalRelations.sync(\n [...oldPublishedVersions, ...draftsToPublish],\n publishedEntries,\n bidirectionalRelationsToSync\n );\n\n publishedEntries.forEach(emitEvent('entry.publish'));\n\n return { documentId, entries: publishedEntries };\n }\n\n async function unpublish(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId, publishedAt: { $ne: null } }, query)\n )(params);\n\n // Delete all published versions\n const versionsToDelete = await strapi.db.query(uid).findMany(query);\n await async.map(versionsToDelete, (entry: any) => entries.delete(entry.id));\n\n versionsToDelete.forEach(emitEvent('entry.unpublish'));\n return { documentId, entries: versionsToDelete };\n }\n\n async function discardDraft(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const [versionsToDraft, oldDrafts] = await Promise.all([\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n // Populate relations, media, compos and dz\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n }),\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null,\n },\n select: ['id', 'locale'],\n }),\n ]);\n\n // Load any unidirectional relation targeting the old drafts\n const relationsToSync = await unidirectionalRelations.load(uid, {\n newVersions: versionsToDraft,\n oldVersions: oldDrafts,\n });\n\n const bidirectionalRelationsToSync = await bidirectionalRelations.load(uid, {\n newVersions: versionsToDraft,\n oldVersions: oldDrafts,\n });\n\n // Delete old drafts\n await async.map(oldDrafts, (entry: any) => entries.delete(entry.id));\n\n // Transform published entry data and create draft versions\n const draftEntries = await async.map(versionsToDraft, (entry: any) =>\n entries.discardDraft(entry, queryParams)\n );\n\n // Sync unidirectional relations with the new draft entries\n await unidirectionalRelations.sync(\n [...oldDrafts, ...versionsToDraft],\n draftEntries,\n relationsToSync\n );\n\n await bidirectionalRelations.sync(\n [...oldDrafts, ...versionsToDraft],\n draftEntries,\n bidirectionalRelationsToSync\n );\n\n draftEntries.forEach(emitEvent('entry.draft-discard'));\n return { documentId, entries: draftEntries };\n }\n\n async function updateComponents(entry: any, data: any) {\n return components.updateComponents(uid, entry, data);\n }\n\n function omitComponentData(data: any) {\n return components.omitComponentData(contentType, data);\n }\n\n return {\n findMany: wrapInTransaction(findMany),\n findFirst: wrapInTransaction(findFirst),\n findOne: wrapInTransaction(findOne),\n delete: wrapInTransaction(deleteDocument),\n create: wrapInTransaction(create),\n clone: wrapInTransaction(clone),\n update: wrapInTransaction(update),\n count: wrapInTransaction(count),\n publish: hasDraftAndPublish ? wrapInTransaction(publish) : (undefined as any),\n unpublish: hasDraftAndPublish ? wrapInTransaction(unpublish) : (undefined as any),\n discardDraft: hasDraftAndPublish ? wrapInTransaction(discardDraft) : (undefined as any),\n\n updateComponents,\n omitComponentData,\n };\n};\n","import type { Core, Modules, UID } from '@strapi/types';\n\nimport { createMiddlewareManager, databaseErrorsMiddleware } from './middlewares';\nimport { createContentTypeRepository } from './repository';\nimport { transformData } from './transform/data';\n\nimport entityValidator from '../entity-validator';\n\n/**\n * Repository to :\n * - Access documents via actions (findMany, findOne, create, update, delete, ...)\n * - Execute middlewares on document actions\n * - Apply default parameters to document actions\n *\n * @param strapi\n * @param validator - validator for database entries\n * @returns DocumentService\n *\n * @example Access documents\n * const article = strapi.documents('api::article.article').create(params)\n * const allArticles = strapi.documents('api::article.article').findMany(params)\n *\n */\nexport const createDocumentService = (\n strapi: Core.Strapi,\n validator: Modules.EntityValidator.EntityValidator = entityValidator\n): Modules.Documents.Service => {\n // Cache the repositories (one per content type)\n const repositories = new Map<string, Modules.Documents.ServiceInstance>();\n\n // Manager to handle document service middlewares\n const middlewares = createMiddlewareManager();\n middlewares.use(databaseErrorsMiddleware);\n\n const factory = function factory(uid: UID.ContentType) {\n if (repositories.has(uid)) {\n return repositories.get(uid)!;\n }\n\n const contentType = strapi.contentType(uid);\n const repository = createContentTypeRepository(uid, validator);\n\n const instance = middlewares.wrapObject(\n repository,\n { uid, contentType },\n {\n exclude: ['updateComponents', 'omitComponentData'],\n }\n );\n\n repositories.set(uid, instance);\n\n return instance;\n } as Modules.Documents.Service;\n\n return Object.assign(factory, {\n utils: {\n transformData,\n },\n use: middlewares.use.bind(middlewares),\n });\n};\n","/**\n * This migration is responsible for creating the draft counterpart for all the entries that were in a published state.\n *\n * In v4, entries could either be in a draft or published state, but not both at the same time.\n * In v5, we introduced the concept of document, and an entry can be in a draft or published state.\n *\n * This means the migration needs to create the draft counterpart if an entry was published.\n *\n * This migration performs the following steps:\n * 1. Creates draft entries for all published entries, without it's components, dynamic zones or relations.\n * 2. Using the document service, discard those same drafts to copy its relations.\n */\n\n/* eslint-disable no-continue */\nimport type { UID } from '@strapi/types';\nimport type { Database, Migration } from '@strapi/database';\nimport { async, contentTypes } from '@strapi/utils';\nimport { createDocumentService } from '../../services/document-service';\n\ntype DocumentVersion = { documentId: string; locale: string };\ntype Knex = Parameters<Migration['up']>[0];\n\n/**\n * Check if the model has draft and publish enabled.\n */\nconst hasDraftAndPublish = async (trx: Knex, meta: any) => {\n const hasTable = await trx.schema.hasTable(meta.tableName);\n\n if (!hasTable) {\n return false;\n }\n\n const uid = meta.uid as UID.ContentType;\n const model = strapi.getModel(uid);\n const hasDP = contentTypes.hasDraftAndPublish(model);\n if (!hasDP) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Copy all the published entries to draft entries, without it's components, dynamic zones or relations.\n * This ensures all necessary draft's exist before copying it's relations.\n */\nasync function copyPublishedEntriesToDraft({\n db,\n trx,\n uid,\n}: {\n db: Database;\n trx: Knex;\n uid: string;\n}) {\n // Extract all scalar attributes to use in the insert query\n const meta = db.metadata.get(uid);\n\n // Get scalar attributes that will be copied over the new draft\n const scalarAttributes = Object.values(meta.attributes).reduce((acc, attribute: any) => {\n if (['id'].includes(attribute.columnName)) {\n return acc;\n }\n\n if (contentTypes.isScalarAttribute(attribute)) {\n acc.push(attribute.columnName);\n }\n\n return acc;\n }, [] as string[]);\n\n /**\n * Query to copy the published entries into draft entries.\n *\n * INSERT INTO tableName (columnName1, columnName2, columnName3, ...)\n * SELECT columnName1, columnName2, columnName3, ...\n * FROM tableName\n */\n await trx\n // INSERT INTO tableName (columnName1, columnName2, columnName3, ...)\n .into(\n trx.raw(`?? (${scalarAttributes.map(() => `??`).join(', ')})`, [\n meta.tableName,\n ...scalarAttributes,\n ])\n )\n .insert((subQb: typeof trx) => {\n // SELECT columnName1, columnName2, columnName3, ...\n subQb\n .select(\n ...scalarAttributes.map((att: string) => {\n // Override 'publishedAt' and 'updatedAt' attributes\n if (att === 'published_at') {\n return trx.raw('NULL as ??', 'published_at');\n }\n\n return att;\n })\n )\n .from(meta.tableName)\n // Only select entries that were published\n .whereNotNull('published_at');\n });\n}\n\n/**\n * Load a batch of versions to discard.\n *\n * Versions with only a draft version will be ignored.\n * Only versions with a published version (which always have a draft version) will be discarded.\n */\nexport async function* getBatchToDiscard({\n db,\n trx,\n uid,\n defaultBatchSize = 1000,\n}: {\n db: Database;\n trx: Knex;\n uid: string;\n defaultBatchSize?: number;\n}) {\n const client = db.config.connection.client;\n const isSQLite =\n typeof client === 'string' && ['sqlite', 'sqlite3', 'better-sqlite3'].includes(client);\n\n // The SQLite documentation states that the maximum number of terms in a\n // compound SELECT statement is 500 by default.\n // See: https://www.sqlite.org/limits.html\n // To ensure a successful migration, we limit the batch size to 500 for SQLite.\n const batchSize = isSQLite ? Math.min(defaultBatchSize, 500) : defaultBatchSize;\n let offset = 0;\n let hasMore = true;\n\n while (hasMore) {\n // Look for the published entries to discard\n const batch: DocumentVersion[] = await db\n .queryBuilder(uid)\n .select(['id', 'documentId', 'locale'])\n .where({ publishedAt: { $ne: null } })\n .limit(batchSize)\n .offset(offset)\n .orderBy('id')\n .transacting(trx)\n .execute();\n\n if (batch.length < batchSize) {\n hasMore = false;\n }\n\n offset += batchSize;\n yield batch;\n }\n}\n\n/**\n * 2 pass migration to create the draft entries for all the published entries.\n * And then discard the drafts to copy the relations.\n */\nconst migrateUp = async (trx: Knex, db: Database) => {\n const dpModels = [];\n for (const meta of db.metadata.values()) {\n const hasDP = await hasDraftAndPublish(trx, meta);\n if (hasDP) {\n dpModels.push(meta);\n }\n }\n\n /**\n * Create plain draft entries for all the entries that were published.\n */\n for (const model of dpModels) {\n await copyPublishedEntriesToDraft({ db, trx, uid: model.uid });\n }\n\n /**\n * Discard the drafts will copy the relations from the published entries to the newly created drafts.\n *\n * Load a batch of entries (batched to prevent loading millions of rows at once ),\n * and discard them using the document service.\n *\n * NOTE: This is using a custom document service without any validations,\n * to prevent the migration from failing if users already had invalid data in V4.\n * E.g. @see https://github.com/strapi/strapi/issues/21583\n */\n const documentService = createDocumentService(strapi, {\n async validateEntityCreation(_, data) {\n return data;\n },\n async validateEntityUpdate(_, data) {\n // Data can be partially empty on partial updates\n // This migration doesn't trigger any update (or partial update),\n // so it's safe to return the data as is.\n return data as any;\n },\n });\n\n for (const model of dpModels) {\n const discardDraft = async (entry: DocumentVersion) =>\n documentService(model.uid as UID.ContentType).discardDraft({\n documentId: entry.documentId,\n locale: entry.locale,\n });\n\n for await (const batch of getBatchToDiscard({ db, trx, uid: model.uid })) {\n // NOTE: concurrency had to be disabled to prevent a race condition with self-references\n // TODO: improve performance in a safe way\n await async.map(batch, discardDraft, { concurrency: 1 });\n }\n }\n};\n\nexport const discardDocumentDrafts: Migration = {\n name: 'core::5.0.0-discard-drafts',\n async up(trx, db) {\n await migrateUp(trx, db);\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n","import { contentTypes as contentTypesUtils, async } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\n\nimport { getBatchToDiscard } from './database/5.0.0-discard-drafts';\n\nexport interface Input {\n oldContentTypes: Record<string, Schema.ContentType>;\n contentTypes: Record<string, Schema.ContentType>;\n}\n\n/**\n * Enable draft and publish for content types.\n *\n * Draft and publish disabled content types will have their entries published,\n * this migration clones those entries as drafts.\n *\n * TODO: Clone components, dynamic zones and relations\n */\nconst enableDraftAndPublish = async ({ oldContentTypes, contentTypes }: Input) => {\n if (!oldContentTypes) {\n return;\n }\n\n // run the after content types migrations\n return strapi.db.transaction(async (trx) => {\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n // if d&p was enabled set publishedAt to eq createdAt\n if (\n !contentTypesUtils.hasDraftAndPublish(oldContentType) &&\n contentTypesUtils.hasDraftAndPublish(contentType)\n ) {\n const discardDraft = async (entry: { documentId: string; locale: string }) =>\n strapi\n .documents(uid as any)\n // Discard draft by referencing the documentId and locale\n .discardDraft({ documentId: entry.documentId, locale: entry.locale });\n\n /**\n * Load a batch of entries (batched to prevent loading millions of rows at once ),\n * and discard them using the document service.\n */\n for await (const batch of getBatchToDiscard({ db: strapi.db, trx, uid })) {\n await async.map(batch, discardDraft, { concurrency: 10 });\n }\n }\n }\n });\n};\n\nconst disableDraftAndPublish = async ({ oldContentTypes, contentTypes }: Input) => {\n if (!oldContentTypes) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n // if d&p was disabled remove unpublish content before sync\n if (\n contentTypesUtils.hasDraftAndPublish(oldContentType) &&\n !contentTypesUtils.hasDraftAndPublish(contentType)\n ) {\n await strapi.db?.queryBuilder(uid).delete().where({ published_at: null }).execute();\n }\n }\n};\n\nexport { enableDraftAndPublish as enable, disableDraftAndPublish as disable };\n","import { Input } from './draft-publish';\n\n// if i18N enabled set default locale\nconst enableI18n = async ({ oldContentTypes, contentTypes }: Input) => {\n const { isLocalizedContentType } = strapi.plugin('i18n')?.service('content-types') ?? {};\n const { getDefaultLocale } = strapi.plugin('i18n')?.service('locales') ?? {};\n\n if (!oldContentTypes) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n if (!isLocalizedContentType(oldContentType) && isLocalizedContentType(contentType)) {\n const defaultLocale = await getDefaultLocale();\n\n await strapi.db.query(uid).updateMany({\n where: { locale: null },\n data: { locale: defaultLocale },\n });\n }\n }\n};\n\nconst disableI18n = async ({ oldContentTypes, contentTypes }: Input) => {\n const { isLocalizedContentType } = strapi.plugin('i18n')?.service('content-types') ?? {};\n const { getDefaultLocale } = strapi.plugin('i18n')?.service('locales') ?? {};\n\n if (!oldContentTypes) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n // if i18N is disabled remove non default locales before sync\n if (isLocalizedContentType(oldContentType) && !isLocalizedContentType(contentType)) {\n const defaultLocale = await getDefaultLocale();\n\n await Promise.all([\n // Delete all entities that are not in the default locale\n strapi.db.query(uid).deleteMany({\n where: { locale: { $ne: defaultLocale } },\n }),\n // Set locale to null for the rest\n strapi.db.query(uid).updateMany({\n where: { locale: { $eq: defaultLocale } },\n data: { locale: null },\n }),\n ]);\n }\n }\n};\n\nexport { enableI18n as enable, disableI18n as disable };\n","import * as draftPublishMigrations from './draft-publish';\nimport * as i18nMigrations from './i18n';\nimport type { Input } from './draft-publish';\n\nconst enable = async ({ oldContentTypes, contentTypes }: Input) => {\n await i18nMigrations.enable({ oldContentTypes, contentTypes });\n await draftPublishMigrations.enable({ oldContentTypes, contentTypes });\n};\n\nconst disable = async ({ oldContentTypes, contentTypes }: Input) => {\n await i18nMigrations.disable({ oldContentTypes, contentTypes });\n await draftPublishMigrations.disable({ oldContentTypes, contentTypes });\n};\n\nexport { enable, disable };\n","import { hooks } from '@strapi/utils';\n\nimport { defineProvider } from './provider';\nimport * as registries from '../registries';\nimport { loadApplicationContext } from '../loaders';\nimport * as syncMigrations from '../migrations';\nimport { discardDocumentDrafts } from '../migrations/database/5.0.0-discard-drafts';\n\nexport default defineProvider({\n init(strapi) {\n strapi\n .add('content-types', () => registries.contentTypes())\n .add('components', () => registries.components())\n .add('services', () => registries.services(strapi))\n .add('policies', () => registries.policies())\n .add('middlewares', () => registries.middlewares())\n .add('hooks', () => registries.hooks())\n .add('controllers', () => registries.controllers(strapi))\n .add('modules', () => registries.modules(strapi))\n .add('plugins', () => registries.plugins(strapi))\n .add('custom-fields', () => registries.customFields(strapi))\n .add('apis', () => registries.apis(strapi))\n .add('models', () => registries.models())\n .add('sanitizers', registries.sanitizers())\n .add('validators', registries.validators());\n },\n async register(strapi) {\n await loadApplicationContext(strapi);\n\n strapi.get('hooks').set('strapi::content-types.beforeSync', hooks.createAsyncParallelHook());\n strapi.get('hooks').set('strapi::content-types.afterSync', hooks.createAsyncParallelHook());\n\n // Content migration to enable draft and publish\n strapi.hook('strapi::content-types.beforeSync').register(syncMigrations.disable);\n strapi.hook('strapi::content-types.afterSync').register(syncMigrations.enable);\n\n // Database migrations\n strapi.db.migrations.providers.internal.register(discardDocumentDrafts);\n },\n});\n","import type { Sender } from './sender';\n\ninterface Options {\n limitedEvents?: string[];\n}\n\ntype TailParams<T extends (...args: any[]) => any> =\n Parameters<T> extends [unknown, ...infer U] ? U : never;\n\nfunction nextResetDate(): number {\n return Date.now() + 24 * 60 * 60 * 1000; // Now + 24 hours.\n}\n\nexport default (sender: Sender, { limitedEvents = [] }: Options = {}) => {\n let cacheExpiresAt = nextResetDate();\n const eventCache = new Map();\n\n return async (event: string, ...args: TailParams<Sender>) => {\n if (!limitedEvents.includes(event)) {\n return sender(event, ...args);\n }\n\n if (Date.now() > cacheExpiresAt) {\n eventCache.clear();\n cacheExpiresAt = nextResetDate();\n }\n\n if (eventCache.has(event)) {\n return false;\n }\n\n eventCache.set(event, true);\n return sender(event, ...args);\n };\n};\n","import crypto from 'crypto';\nimport type { Core } from '@strapi/types';\n\n/**\n * Generate an admin user hash\n */\nconst generateAdminUserHash = (strapi: Core.Strapi) => {\n const ctx = strapi?.requestContext?.get();\n if (!ctx?.state?.user?.email) {\n return '';\n }\n return crypto.createHash('sha256').update(ctx.state.user.email).digest('hex');\n};\n\nexport { generateAdminUserHash };\n","import os from 'os';\nimport path from 'path';\nimport _ from 'lodash';\nimport isDocker from 'is-docker';\nimport ciEnv from 'ci-info';\nimport tsUtils from '@strapi/typescript-utils';\nimport { env, machineID } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\nimport { generateAdminUserHash } from './admin-user-hash';\n\nexport interface Payload {\n eventProperties?: Record<string, unknown>;\n userProperties?: Record<string, unknown>;\n groupProperties?: Record<string, unknown>;\n}\n\nexport type Sender = (\n event: string,\n payload?: Payload,\n opts?: Record<string, unknown>\n) => Promise<boolean>;\n\nconst defaultQueryOpts = {\n timeout: 1000,\n headers: { 'Content-Type': 'application/json' },\n};\n\nconst ANALYTICS_URI = 'https://analytics.strapi.io';\n\n/**\n * Add properties from the package.json strapi key in the metadata\n */\nconst addPackageJsonStrapiMetadata = (metadata: Record<string, unknown>, strapi: Core.Strapi) => {\n const { packageJsonStrapi = {} } = strapi.config;\n\n _.defaults(metadata, packageJsonStrapi);\n};\n\n/**\n * Create a send function for event with all the necessary metadata\n */\nexport default (strapi: Core.Strapi): Sender => {\n const { uuid } = strapi.config;\n const deviceId = machineID();\n\n const serverRootPath = strapi.dirs.app.root;\n const adminRootPath = path.join(strapi.dirs.app.root, 'src', 'admin');\n\n const anonymousUserProperties = {\n environment: strapi.config.environment,\n os: os.type(),\n osPlatform: os.platform(),\n osArch: os.arch(),\n osRelease: os.release(),\n nodeVersion: process.versions.node,\n };\n\n const anonymousGroupProperties = {\n docker: process.env.DOCKER || isDocker(),\n isCI: ciEnv.isCI,\n version: strapi.config.get('info.strapi'),\n useTypescriptOnServer: tsUtils.isUsingTypeScriptSync(serverRootPath),\n useTypescriptOnAdmin: tsUtils.isUsingTypeScriptSync(adminRootPath),\n projectId: uuid,\n isHostedOnStrapiCloud: env('STRAPI_HOSTING', null) === 'strapi.cloud',\n };\n\n addPackageJsonStrapiMetadata(anonymousGroupProperties, strapi);\n\n return async (event: string, payload: Payload = {}, opts = {}) => {\n const userId = generateAdminUserHash(strapi);\n\n const reqParams = {\n method: 'POST',\n body: JSON.stringify({\n event,\n userId,\n deviceId,\n eventProperties: payload.eventProperties,\n userProperties: userId ? { ...anonymousUserProperties, ...payload.userProperties } : {},\n groupProperties: {\n ...anonymousGroupProperties,\n projectType: strapi.EE ? 'Enterprise' : 'Community',\n ...payload.groupProperties,\n },\n }),\n ..._.merge({ headers: { 'X-Strapi-Event': event } }, defaultQueryOpts, opts),\n };\n\n try {\n const res = await strapi.fetch(`${ANALYTICS_URI}/api/v2/track`, reqParams);\n return res.ok;\n } catch (err) {\n return false;\n }\n };\n};\n","import type { Core } from '@strapi/types';\nimport type { Sender } from './sender';\n\ninterface State {\n expires: number;\n counter: number;\n}\n\nfunction nextResetDate(): number {\n return Date.now() + 24 * 60 * 60 * 1000; // Now + 24 hours.\n}\n\nconst createMiddleware = ({ sendEvent }: { sendEvent: Sender }) => {\n const state: State = {\n expires: nextResetDate(),\n counter: 0,\n };\n\n const middleware: Core.MiddlewareHandler = async (ctx, next) => {\n const { url, method } = ctx.request;\n\n if (!url.includes('.') && ['GET', 'PUT', 'POST', 'DELETE'].includes(method)) {\n if (Date.now() > state.expires) {\n state.expires = nextResetDate();\n state.counter = 0;\n }\n\n // Send max. 1000 events per day.\n if (state.counter < 1000) {\n sendEvent('didReceiveRequest', { eventProperties: { url: ctx.request.url } });\n\n // Increase counter.\n state.counter += 1;\n }\n }\n\n await next();\n };\n\n return middleware;\n};\n\nexport default createMiddleware;\n","import _ from 'lodash';\n\nconst isTruthy = (val: any) => {\n return [1, true].includes(val) || ['true', '1'].includes(_.toLower(val));\n};\n\nexport default isTruthy;\n","/**\n * Strapi telemetry package.\n * You can learn more at https://docs.strapi.io/developer-docs/latest/getting-started/usage-information.html\n */\n\nimport { Job, scheduleJob } from 'node-schedule';\nimport type { Core } from '@strapi/types';\n\nimport wrapWithRateLimit from './rate-limiter';\nimport createSender from './sender';\nimport createMiddleware from './middleware';\nimport isTruthy from './is-truthy';\n\nconst LIMITED_EVENTS = [\n 'didSaveMediaWithAlternativeText',\n 'didSaveMediaWithCaption',\n 'didDisableResponsiveDimensions',\n 'didEnableResponsiveDimensions',\n 'didInitializePluginUpload',\n];\n\nconst createTelemetryInstance = (strapi: Core.Strapi) => {\n const uuid = strapi.config.get('uuid');\n const telemetryDisabled = strapi.config.get('packageJsonStrapi.telemetryDisabled');\n const isDisabled =\n !uuid || isTruthy(process.env.STRAPI_TELEMETRY_DISABLED) || isTruthy(telemetryDisabled);\n\n const crons: Job[] = [];\n const sender = createSender(strapi);\n const sendEvent = wrapWithRateLimit(sender, { limitedEvents: LIMITED_EVENTS });\n\n return {\n get isDisabled() {\n return isDisabled;\n },\n\n register() {\n if (!isDisabled) {\n const pingCron = scheduleJob('0 0 12 * * *', () => sendEvent('ping'));\n crons.push(pingCron);\n\n strapi.server.use(createMiddleware({ sendEvent }));\n }\n },\n\n bootstrap() {},\n\n destroy() {\n // Clear open handles\n crons.forEach((cron) => cron.cancel());\n },\n\n async send(event: string, payload: Record<string, unknown> = {}) {\n if (isDisabled) return true;\n return sendEvent(event, payload);\n },\n };\n};\n\nexport default createTelemetryInstance;\n","import { defineProvider } from './provider';\nimport createTelemetry from '../services/metrics';\n\nexport default defineProvider({\n init(strapi) {\n strapi.add('telemetry', () => createTelemetry(strapi));\n },\n async register(strapi) {\n strapi.get('telemetry').register();\n },\n async bootstrap(strapi) {\n strapi.get('telemetry').bootstrap();\n },\n async destroy(strapi) {\n strapi.get('telemetry').destroy();\n },\n});\n","/**\n * Webhook store is the implementation of webhook storage over the core_store\n */\n\nimport { errors } from '@strapi/utils';\nimport type { Model, Database } from '@strapi/database';\nimport type { Modules } from '@strapi/types';\n\nconst { ValidationError } = errors;\n\nconst webhookModel: Model = {\n uid: 'strapi::webhook',\n singularName: 'strapi_webhooks',\n tableName: 'strapi_webhooks',\n attributes: {\n id: {\n type: 'increments',\n },\n name: {\n type: 'string',\n },\n url: {\n type: 'text',\n },\n headers: {\n type: 'json',\n },\n events: {\n type: 'json',\n },\n enabled: {\n type: 'boolean',\n },\n },\n};\n\ntype Webhook = Modules.WebhookStore.Webhook;\ntype DBOutput = Omit<Webhook, 'id' | 'isEnabled'> & { id: string | number; enabled: boolean };\ntype DBInput = Omit<DBOutput, 'id'>;\n\nconst toDBObject = (data: Webhook): DBInput => {\n return {\n name: data.name,\n url: data.url,\n headers: data.headers,\n events: data.events,\n enabled: data.isEnabled,\n };\n};\n\nconst fromDBObject = (row: DBOutput): Webhook => {\n return {\n id: typeof row.id === 'number' ? row.id.toString() : row.id,\n name: row.name,\n url: row.url,\n headers: row.headers,\n events: row.events,\n isEnabled: row.enabled,\n };\n};\n\nconst webhookEventValidator = async (allowedEvents: Map<string, string>, events: string[]) => {\n const allowedValues = Array.from(allowedEvents.values());\n\n events.forEach((event) => {\n if (allowedValues.includes(event)) {\n return;\n }\n\n throw new ValidationError(`Webhook event ${event} is not supported`);\n });\n};\n\nexport interface WebhookStore {\n allowedEvents: Map<string, string>;\n addAllowedEvent(key: string, value: string): void;\n removeAllowedEvent(key: string): void;\n listAllowedEvents(): string[];\n getAllowedEvent(key: string): string | undefined;\n findWebhooks(): Promise<Webhook[]>;\n findWebhook(id: string): Promise<Webhook | null>;\n createWebhook(data: Webhook): Promise<Webhook>;\n updateWebhook(id: string, data: Webhook): Promise<Webhook | null>;\n deleteWebhook(id: string): Promise<Webhook | null>;\n}\n\nconst createWebhookStore = ({ db }: { db: Database }): WebhookStore => {\n return {\n allowedEvents: new Map([\n ['ENTRY_CREATE', 'entry.create'],\n ['ENTRY_UPDATE', 'entry.update'],\n ['ENTRY_DELETE', 'entry.delete'],\n ['ENTRY_PUBLISH', 'entry.publish'],\n ['ENTRY_UNPUBLISH', 'entry.unpublish'],\n ['ENTRY_DRAFT_DISCARD', 'entry.draft-discard'],\n ]),\n addAllowedEvent(key, value) {\n this.allowedEvents.set(key, value);\n },\n removeAllowedEvent(key) {\n this.allowedEvents.delete(key);\n },\n listAllowedEvents() {\n return Array.from(this.allowedEvents.keys());\n },\n getAllowedEvent(key) {\n return this.allowedEvents.get(key);\n },\n async findWebhooks() {\n const results = await db.query('strapi::webhook').findMany();\n\n return results.map(fromDBObject);\n },\n async findWebhook(id) {\n const result = await db.query('strapi::webhook').findOne({ where: { id } });\n return result ? fromDBObject(result) : null;\n },\n async createWebhook(data) {\n await webhookEventValidator(this.allowedEvents, data.events);\n\n return db\n .query('strapi::webhook')\n .create({\n data: toDBObject({ ...data, isEnabled: true }),\n })\n .then(fromDBObject);\n },\n async updateWebhook(id, data) {\n await webhookEventValidator(this.allowedEvents, data.events);\n\n const webhook = await db.query('strapi::webhook').update({\n where: { id },\n data: toDBObject(data),\n });\n\n return webhook ? fromDBObject(webhook) : null;\n },\n async deleteWebhook(id) {\n const webhook = await db.query('strapi::webhook').delete({ where: { id } });\n return webhook ? fromDBObject(webhook) : null;\n },\n };\n};\n\nexport { webhookModel, createWebhookStore };\n","/**\n * Simple worker queue in memory\n */\nimport createDebugger from 'debug';\nimport type { Logger } from '@strapi/logger';\nimport type { Utils } from '@strapi/types';\n\nconst debug = createDebugger('strapi:worker-queue');\n\ninterface ConstructorParameters {\n logger: Logger;\n concurrency?: number;\n}\n\ntype Worker<TPayload, TReturn> = (payload: TPayload) => Promise<TReturn> | TReturn;\n\nconst noop: Utils.Function.Any = () => {};\n\nexport default class WorkerQueue<TPayload, TReturn> {\n logger: Logger;\n\n worker: Worker<TPayload, TReturn>;\n\n concurrency: number;\n\n running: number;\n\n queue: TPayload[];\n\n constructor({ logger, concurrency = 5 }: ConstructorParameters) {\n debug('Initialize worker queue');\n\n this.logger = logger;\n this.worker = noop;\n\n this.concurrency = concurrency;\n this.running = 0;\n this.queue = [];\n }\n\n subscribe(worker: Worker<TPayload, TReturn>) {\n debug('Subscribe to worker queue');\n this.worker = worker;\n }\n\n enqueue(payload: TPayload) {\n debug('Enqueue event in worker queue');\n if (this.running < this.concurrency) {\n this.running += 1;\n this.execute(payload);\n } else {\n this.queue.unshift(payload);\n }\n }\n\n pop() {\n debug('Pop worker queue and execute');\n const payload = this.queue.pop();\n\n if (payload) {\n this.execute(payload);\n } else {\n this.running -= 1;\n }\n }\n\n async execute(payload: TPayload) {\n debug('Execute worker');\n try {\n await this.worker(payload);\n } catch (error) {\n this.logger.error(error);\n } finally {\n this.pop();\n }\n }\n}\n","/**\n * The event hub is Strapi's event control center.\n */\n\nimport createdDebugger from 'debug';\nimport _ from 'lodash';\nimport type { Logger } from '@strapi/logger';\n\nimport type { Modules } from '@strapi/types';\nimport WorkerQueue from './worker-queue';\nimport type { EventHub } from './event-hub';\nimport type { Fetch } from '../utils/fetch';\n\ntype Webhook = Modules.WebhookStore.Webhook;\n\ninterface Config {\n defaultHeaders: Record<string, string>;\n}\n\ninterface ConstructorParameters {\n eventHub: EventHub;\n logger: Logger;\n configuration?: Record<string, unknown>;\n fetch: Fetch;\n}\n\ninterface Event {\n event: string;\n info: Record<string, unknown>;\n}\n\ntype Listener = (info: Record<string, unknown>) => Promise<void>;\n\nconst debug = createdDebugger('strapi:webhook');\n\nconst defaultConfiguration: Config = {\n defaultHeaders: {},\n};\n\nclass WebhookRunner {\n private eventHub: EventHub;\n\n private logger: Logger;\n\n private config: Config;\n\n private webhooksMap: Map<string, Webhook[]> = new Map();\n\n private listeners: Map<string, Listener> = new Map();\n\n private queue: WorkerQueue<Event, void>;\n\n private fetch: Fetch;\n\n constructor({ eventHub, logger, configuration = {}, fetch }: ConstructorParameters) {\n debug('Initialized webhook runner');\n this.eventHub = eventHub;\n this.logger = logger;\n this.fetch = fetch;\n\n if (typeof configuration !== 'object') {\n throw new Error(\n 'Invalid configuration provided to the webhookRunner.\\nCheck your server.json -> webhooks configuration'\n );\n }\n\n this.config = _.merge(defaultConfiguration, configuration);\n\n this.queue = new WorkerQueue({ logger, concurrency: 5 });\n\n this.queue.subscribe(this.executeListener.bind(this));\n }\n\n deleteListener(event: string) {\n debug(`Deleting listener for event '${event}'`);\n\n const fn = this.listeners.get(event);\n\n if (fn !== undefined) {\n this.eventHub.off(event, fn);\n this.listeners.delete(event);\n }\n }\n\n createListener(event: string) {\n debug(`Creating listener for event '${event}'`);\n if (this.listeners.has(event)) {\n this.logger.error(\n `The webhook runner is already listening for the event '${event}'. Did you mean to call .register() ?`\n );\n }\n\n const listen = async (info: Event['info']) => {\n this.queue.enqueue({ event, info });\n };\n\n this.listeners.set(event, listen);\n this.eventHub.on(event, listen);\n }\n\n async executeListener({ event, info }: Event) {\n debug(`Executing webhook for event '${event}'`);\n const webhooks = this.webhooksMap.get(event) || [];\n const activeWebhooks = webhooks.filter((webhook) => webhook.isEnabled === true);\n\n for (const webhook of activeWebhooks) {\n await this.run(webhook, event, info).catch((error: unknown) => {\n this.logger.error('Error running webhook');\n this.logger.error(error);\n });\n }\n }\n\n run(webhook: Webhook, event: string, info = {}) {\n const { url, headers } = webhook;\n\n return this.fetch(url, {\n method: 'post',\n body: JSON.stringify({\n event,\n createdAt: new Date(),\n ...info,\n }),\n headers: {\n ...this.config.defaultHeaders,\n ...headers,\n 'X-Strapi-Event': event,\n 'Content-Type': 'application/json',\n },\n signal: AbortSignal.timeout(10000),\n })\n .then(async (res) => {\n if (res.ok) {\n return {\n statusCode: res.status,\n };\n }\n\n return {\n statusCode: res.status,\n message: await res.text(),\n };\n })\n .catch((err) => {\n return {\n statusCode: 500,\n message: err.message,\n };\n });\n }\n\n add(webhook: Webhook) {\n debug(`Registering webhook '${webhook.id}'`);\n const { events } = webhook;\n\n events.forEach((event) => {\n if (this.webhooksMap.has(event)) {\n this.webhooksMap.get(event)?.push(webhook);\n } else {\n this.webhooksMap.set(event, [webhook]);\n this.createListener(event);\n }\n });\n }\n\n update(webhook: Webhook) {\n debug(`Refreshing webhook '${webhook.id}'`);\n this.remove(webhook);\n this.add(webhook);\n }\n\n remove(webhook: Webhook) {\n debug(`Unregistering webhook '${webhook.id}'`);\n\n this.webhooksMap.forEach((webhooks, event) => {\n const filteredWebhooks = webhooks.filter((value) => value.id !== webhook.id);\n\n // Cleanup hanging listeners\n if (filteredWebhooks.length === 0) {\n this.webhooksMap.delete(event);\n this.deleteListener(event);\n } else {\n this.webhooksMap.set(event, filteredWebhooks);\n }\n });\n }\n}\n\n/**\n * Expose a factory function instead of the class\n */\nexport default function createWebhookRunner(opts: ConstructorParameters): WebhookRunner {\n return new WebhookRunner(opts);\n}\n\nexport type { WebhookRunner };\n","import { defineProvider } from './provider';\nimport { createWebhookStore, webhookModel } from '../services/webhook-store';\nimport createWebhookRunner from '../services/webhook-runner';\n\nexport default defineProvider({\n init(strapi) {\n strapi.get('models').add(webhookModel);\n\n strapi.add('webhookStore', () => createWebhookStore({ db: strapi.db }));\n strapi.add('webhookRunner', () =>\n createWebhookRunner({\n eventHub: strapi.eventHub,\n logger: strapi.log,\n configuration: strapi.config.get('server.webhooks', {}),\n fetch: strapi.fetch,\n })\n );\n },\n async bootstrap(strapi) {\n const webhooks = await strapi.get('webhookStore').findWebhooks();\n if (!webhooks) {\n return;\n }\n\n for (const webhook of webhooks) {\n strapi.get('webhookRunner').add(webhook);\n }\n },\n});\n","import admin from './admin';\nimport coreStore from './coreStore';\nimport cron from './cron';\nimport registries from './registries';\nimport telemetry from './telemetry';\nimport webhooks from './webhooks';\n\nimport type { Provider } from './provider';\n\nexport const providers: Provider[] = [registries, admin, coreStore, webhooks, telemetry, cron];\n","import _ from 'lodash';\nimport delegate from 'delegates';\nimport { errors as databaseErrors } from '@strapi/database';\nimport {\n contentTypes as contentTypesUtils,\n errors,\n relations as relationUtils,\n} from '@strapi/utils';\nimport type { Database } from '@strapi/database';\nimport type { Core, Modules, Utils } from '@strapi/types';\n\ntype Decoratable<T> = T & {\n decorate(\n decorator: (old: Modules.EntityService.EntityService) => Modules.EntityService.EntityService & {\n [key: string]: unknown;\n }\n ): void;\n};\n\nconst transformLoadParamsToQuery = (\n uid: string,\n field: string,\n params: Record<string, unknown>,\n pagination = {}\n) => {\n const query = strapi\n .get('query-params')\n .transform(uid, { populate: { [field]: params } as any }) as any;\n\n const res = {\n ...query.populate[field],\n ...pagination,\n };\n\n return res;\n};\n\nconst databaseErrorsToTransform = [\n databaseErrors.InvalidTimeError,\n databaseErrors.InvalidDateTimeError,\n databaseErrors.InvalidDateError,\n databaseErrors.InvalidRelationError,\n];\n\nconst createDefaultImplementation = ({\n strapi,\n db,\n}: {\n strapi: Core.Strapi;\n db: Database;\n}): Modules.EntityService.EntityService => ({\n async wrapParams(options: any = {}) {\n return options;\n },\n\n async wrapResult(result: any = {}) {\n return result;\n },\n\n async findMany(uid, opts) {\n const { kind } = strapi.getModel(uid);\n\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findMany' });\n\n if (kind === 'singleType') {\n const entity = strapi.documents!(uid).findFirst(wrappedParams);\n return this.wrapResult(entity, { uid, action: 'findOne' });\n }\n\n const entities = await strapi.documents!(uid).findMany(wrappedParams);\n return this.wrapResult(entities, { uid, action: 'findMany' });\n },\n\n async findPage(uid, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findPage' });\n\n const query = strapi.get('query-params').transform(uid, wrappedParams);\n\n const entities = await db.query(uid).findPage(query);\n return this.wrapResult(entities, { uid, action: 'findMany' });\n },\n\n async findOne(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findOne' });\n\n const res = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!res) {\n return this.wrapResult(null, { uid, action: 'findOne' });\n }\n\n const entity = await strapi.documents!(uid).findOne({\n ...wrappedParams,\n documentId: res.documentId,\n });\n return this.wrapResult(entity, { uid, action: 'findOne' });\n },\n\n async count(uid, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'count' });\n\n return strapi.documents!(uid).count(wrappedParams);\n },\n\n async create(uid, params) {\n const wrappedParams = await this.wrapParams<\n Modules.EntityService.Params.Pick<typeof uid, 'data' | 'fields' | 'populate'>\n >(params, { uid, action: 'create' });\n const { data } = wrappedParams;\n\n if (!data) {\n throw new Error('cannot create');\n }\n\n const shouldPublish = !contentTypesUtils.isDraft(data, strapi.getModel(uid));\n\n const entity = await strapi.documents!(uid).create({\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\n });\n\n return this.wrapResult(entity, { uid, action: 'create' });\n },\n\n async update(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams<\n Modules.EntityService.Params.Pick<typeof uid, 'data:partial' | 'fields' | 'populate'>\n >(opts, {\n uid,\n action: 'update',\n });\n const entityToUpdate = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!entityToUpdate) {\n return this.wrapResult(null, { uid, action: 'update' });\n }\n\n const shouldPublish = !contentTypesUtils.isDraft(entityToUpdate, strapi.getModel(uid));\n\n const entity = strapi.documents!(uid).update({\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\n documentId: entityToUpdate.documentId,\n });\n\n return this.wrapResult(entity, { uid, action: 'update' });\n },\n\n async delete(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'delete' });\n\n const entityToDelete = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!entityToDelete) {\n return this.wrapResult(null, { uid, action: 'delete' });\n }\n\n await strapi.documents!(uid).delete({\n ...wrappedParams,\n documentId: entityToDelete.documentId,\n });\n\n return this.wrapResult(entityToDelete, { uid, action: 'delete' });\n },\n\n async load(uid, entity, field, params) {\n if (!_.isString(field)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n }\n\n const loadedEntity = await db\n .query(uid)\n .load(entity, field, transformLoadParamsToQuery(uid, field, params ?? {}));\n\n return this.wrapResult(loadedEntity, { uid, field, action: 'load' });\n },\n\n async loadPages(uid, entity, field, params, pagination = {}) {\n if (!_.isString(field)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n }\n\n const { attributes } = strapi.getModel(uid);\n const attribute = attributes[field];\n\n if (!relationUtils.isAnyToMany(attribute)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be an anyToMany relational attribute`);\n }\n\n const query = transformLoadParamsToQuery(uid, field, params ?? {}, pagination);\n\n const loadedPage = await db.query(uid).loadPages(entity, field, query);\n\n return {\n ...loadedPage,\n results: await this.wrapResult(loadedPage.results, { uid, field, action: 'load' }),\n };\n },\n});\n\nexport default (ctx: {\n strapi: Core.Strapi;\n db: Database;\n}): Decoratable<Modules.EntityService.EntityService> => {\n const implementation = createDefaultImplementation(ctx);\n\n const service = {\n implementation,\n decorate<T extends object>(decorator: (current: typeof implementation) => T) {\n if (typeof decorator !== 'function') {\n throw new Error(`Decorator must be a function, received ${typeof decorator}`);\n }\n\n this.implementation = { ...this.implementation, ...decorator(this.implementation) };\n return this;\n },\n };\n\n const delegator = delegate(service, 'implementation');\n\n // delegate every method in implementation\n Object.keys(service.implementation).forEach((key) => delegator.method(key));\n\n // wrap methods to handle Database Errors\n service.decorate((oldService: Modules.EntityService.EntityService) => {\n const newService = _.mapValues(\n oldService,\n (method, methodName: keyof Modules.EntityService.EntityService) =>\n async function (this: Modules.EntityService.EntityService, ...args: []) {\n try {\n return await (oldService[methodName] as Utils.Function.AnyPromise).call(this, ...args);\n } catch (error) {\n if (\n databaseErrorsToTransform.some(\n (errorToTransform) => error instanceof errorToTransform\n )\n ) {\n if (error instanceof Error) {\n throw new errors.ValidationError(error.message);\n }\n\n throw error;\n }\n throw error;\n }\n }\n );\n\n return newService;\n });\n\n return service as unknown as Decoratable<Modules.EntityService.EntityService>;\n};\n","import { queryParams } from '@strapi/utils';\nimport type { Core, UID } from '@strapi/types';\n\nexport default (strapi: Core.Strapi) => {\n const { transformQueryParams } = queryParams.createTransformer({\n getModel: (uid: string) => strapi.getModel(uid as UID.Schema),\n });\n\n return {\n transform: transformQueryParams,\n };\n};\n","import assert from 'assert/strict';\nimport { has } from 'lodash/fp';\n\nimport { errors } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\nimport type { ParameterizedContext } from 'koa';\n\ninterface AuthenticationResponse {\n authenticated?: boolean;\n credentials?: unknown;\n ability?: unknown;\n error?: Error | null;\n}\n\ninterface AuthenticationInfo {\n strategy: Strategy;\n credentials: unknown;\n ability: unknown;\n}\n\ninterface Strategy {\n name: string;\n authenticate: (ctx: ParameterizedContext) => Promise<AuthenticationResponse>;\n verify?: (auth: AuthenticationInfo, config: Core.RouteConfig['auth']) => Promise<any>;\n}\n\ninterface Authentication {\n register: (type: string, strategy: Strategy) => Authentication;\n authenticate: Core.MiddlewareHandler;\n verify: (auth: AuthenticationInfo, config?: Core.RouteConfig['auth']) => Promise<any>;\n}\n\nconst INVALID_STRATEGY_MSG =\n 'Invalid auth strategy. Expecting an object with properties {name: string, authenticate: function, verify: function}';\n\nconst validStrategy = (strategy: Strategy) => {\n assert(has('authenticate', strategy), INVALID_STRATEGY_MSG);\n assert(typeof strategy.authenticate === 'function', INVALID_STRATEGY_MSG);\n\n if (has('verify', strategy)) {\n assert(typeof strategy.verify === 'function', INVALID_STRATEGY_MSG);\n }\n};\n\nconst createAuthentication = (): Authentication => {\n const strategies: Record<string, Strategy[]> = {};\n\n return {\n register(type, strategy) {\n validStrategy(strategy);\n\n if (!strategies[type]) {\n strategies[type] = [];\n }\n\n strategies[type].push(strategy);\n\n return this;\n },\n\n async authenticate(ctx, next) {\n const route: Core.Route = ctx.state.route;\n\n // use route strategy\n const config = route?.config?.auth;\n\n if (config === false) {\n return next();\n }\n\n const routeStrategies = route.info.type ? strategies[route.info.type] : [];\n const configStrategies = (config?.strategies ?? routeStrategies ?? []) as Array<\n string | Strategy\n >;\n\n const strategiesToUse: Strategy[] = configStrategies.reduce(\n (acc, strategy: string | Strategy) => {\n // Resolve by strategy name\n if (typeof strategy === 'string') {\n const routeStrategy = routeStrategies.find((rs) => rs.name === strategy);\n\n if (routeStrategy) {\n acc.push(routeStrategy);\n }\n }\n\n // Use the given strategy as is\n else if (typeof strategy === 'object') {\n validStrategy(strategy);\n\n acc.push(strategy);\n }\n\n return acc;\n },\n [] as Strategy[]\n );\n\n for (const strategy of strategiesToUse) {\n const result = await strategy.authenticate(ctx);\n\n const { authenticated = false, credentials, ability = null, error = null } = result || {};\n\n if (error !== null) {\n return ctx.unauthorized(error);\n }\n\n if (authenticated) {\n ctx.state.isAuthenticated = true;\n ctx.state.auth = {\n strategy,\n credentials,\n ability,\n };\n\n return next();\n }\n }\n\n return ctx.unauthorized('Missing or invalid credentials');\n },\n\n async verify(auth, config = {}) {\n if (config === false) {\n return;\n }\n\n if (!auth) {\n throw new errors.UnauthorizedError();\n }\n\n if (typeof auth.strategy.verify === 'function') {\n return auth.strategy.verify(auth, config);\n }\n },\n };\n};\n\nexport default createAuthentication;\n","import type { Core, Modules } from '@strapi/types';\n\nconst createCustomFields = (strapi: Core.Strapi): Modules.CustomFields.CustomFields => {\n return {\n register(customField) {\n strapi.get('custom-fields').add(customField);\n },\n };\n};\n\nexport default createCustomFields;\n","import { providerFactory } from '@strapi/utils';\n\nexport default (options = {}) => {\n const provider = providerFactory(options);\n\n return {\n ...provider,\n\n async register(action: string, payload: Record<string, unknown>) {\n if (strapi.isLoaded) {\n throw new Error(`You can't register new actions outside the bootstrap function.`);\n }\n\n return provider.register(action, payload);\n },\n };\n};\n","import { providerFactory } from '@strapi/utils';\n\nexport interface Condition {\n name: string;\n [key: string]: unknown;\n}\n\nexport default (options = {}) => {\n const provider = providerFactory(options);\n\n return {\n ...provider,\n\n async register(condition: Condition) {\n if (strapi.isLoaded) {\n throw new Error(`You can't register new conditions outside the bootstrap function.`);\n }\n\n return provider.register(condition.name, condition);\n },\n };\n};\n","import permissions from '@strapi/permissions';\n\ntype Options = Parameters<typeof permissions.engine.new>[0];\n\nexport default ({ providers }: Options) => permissions.engine.new({ providers });\n","import _ from 'lodash';\nimport type { Core } from '@strapi/types';\nimport { createActionProvider, createConditionProvider } from './providers';\nimport createPermissionEngine from './engine';\n\nconst typeSymbol = Symbol.for('__type__');\n\ninterface ValidatePermissionHandler {\n (params: { permission: { action: string } }): boolean;\n}\n\n/**\n * Creates a handler that checks if the permission's action exists in the action registry\n */\nconst createValidatePermissionHandler =\n (actionProvider: ReturnType<typeof createActionProvider>): ValidatePermissionHandler =>\n ({ permission }) => {\n const action = actionProvider.get(permission.action);\n\n // If the action isn't registered into the action provider, then ignore the permission and warn the user\n if (!action) {\n strapi.log.debug(\n `Unknown action \"${permission.action}\" supplied when registering a new permission`\n );\n\n return false;\n }\n\n return true;\n };\n\n/**\n * Create instances of providers and permission engine for the core content-API service.\n * Also, expose utilities to get information about available actions and such.\n */\nexport default (strapi: Core.Strapi) => {\n // NOTE: Here we define both an action and condition provider,\n // but at the moment, we're only using the action one.\n const providers = {\n action: createActionProvider(),\n condition: createConditionProvider(),\n };\n\n /**\n * Get a tree representation of the available Content API actions\n * based on the methods of the Content API controllers.\n *\n * @note Only actions bound to a content-API route are returned.\n */\n const getActionsMap = () => {\n const actionMap: Record<\n string,\n {\n controllers: Record<string, string[]>;\n }\n > = {};\n\n /**\n * Check if a controller's action is bound to the\n * content-api by looking at a potential __type__ symbol\n */\n const isContentApi = (action: Core.ControllerHandler & { [s: symbol]: any }) => {\n if (!_.has(action, typeSymbol)) {\n return false;\n }\n\n return action[typeSymbol].includes('content-api');\n };\n\n /**\n * Register actions from a specific API source into the result tree\n */\n const registerAPIsActions = (\n apis: Record<string, Core.Plugin | Core.Module>,\n source: 'api' | 'plugin'\n ) => {\n _.forEach(apis, (api, apiName) => {\n const controllers = _.reduce(\n api.controllers,\n (acc, controller, controllerName) => {\n const contentApiActions = _.pickBy(controller, isContentApi);\n\n if (_.isEmpty(contentApiActions)) {\n return acc;\n }\n\n acc[controllerName] = Object.keys(contentApiActions);\n\n return acc;\n },\n {} as Record<string, string[]>\n );\n\n if (!_.isEmpty(controllers)) {\n actionMap[`${source}::${apiName}`] = { controllers };\n }\n });\n };\n\n registerAPIsActions(strapi.apis, 'api');\n registerAPIsActions(strapi.plugins, 'plugin');\n\n return actionMap;\n };\n\n /**\n * Register all the content-API controllers actions into the action provider.\n * This method make use of the {@link getActionsMap} to generate the list of actions to register.\n */\n const registerActions = async () => {\n const actionsMap = getActionsMap();\n\n // For each API\n for (const [api, value] of Object.entries(actionsMap)) {\n const { controllers } = value;\n\n // Register controllers methods as actions\n for (const [controller, actions] of Object.entries(controllers)) {\n // Register each action individually\n await Promise.all(\n actions.map((action) => {\n const actionUID = `${api}.${controller}.${action}`;\n\n return providers.action.register(actionUID, {\n api,\n controller,\n action,\n uid: actionUID,\n });\n })\n );\n }\n }\n };\n\n // Create an instance of a content-API permission engine\n // and binds a custom validation handler to it\n const engine = createPermissionEngine({ providers });\n\n engine.on(\n 'before-format::validate.permission',\n createValidatePermissionHandler(providers.action)\n );\n\n return {\n engine,\n providers,\n registerActions,\n getActionsMap,\n };\n};\n","import _ from 'lodash';\nimport { sanitize, validate } from '@strapi/utils';\n\nimport type { Core, UID } from '@strapi/types';\n\nimport instantiatePermissionsUtilities from './permissions';\n\nconst transformRoutePrefixFor = (pluginName: string) => (route: Core.Route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nconst filterContentAPI = (route: Core.Route) => route.info.type === 'content-api';\n\n/**\n * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)\n */\nconst createContentAPI = (strapi: Core.Strapi) => {\n const getRoutesMap = async () => {\n const routesMap: Record<string, Core.Route[]> = {};\n\n _.forEach(strapi.apis, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if ('routes' in route) {\n return route.routes;\n }\n\n return route;\n }).filter(filterContentAPI);\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n if (Array.isArray(plugin.routes)) {\n return plugin.routes.map(transformPrefix).filter(filterContentAPI);\n }\n\n const routes = _.flatMap(plugin.routes, (route) => route.routes.map(transformPrefix)).filter(\n filterContentAPI\n );\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n return routesMap;\n };\n\n const sanitizer = sanitize.createAPISanitizers({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of sanitizers after the creation of the container\n get sanitizers() {\n return {\n input: strapi.sanitizers.get('content-api.input'),\n output: strapi.sanitizers.get('content-api.output'),\n };\n },\n });\n\n const validator = validate.createAPIValidators({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of validators after the creation of the container\n get validators() {\n return {\n input: strapi.validators.get('content-api.input'),\n };\n },\n });\n\n return {\n permissions: instantiatePermissionsUtilities(strapi),\n getRoutesMap,\n sanitize: sanitizer,\n validate: validator,\n };\n};\n\nexport default createContentAPI;\n","import { map, values, sumBy, pipe, flatMap } from 'lodash/fp';\nimport type { Schema, UID } from '@strapi/types';\n\nconst getNumberOfDynamicZones = () => {\n const contentTypes: Record<UID.ContentType, Schema.ContentType> = strapi.contentTypes;\n\n return pipe(\n map('attributes'),\n flatMap(values),\n sumBy((item) => {\n if (item.type === 'dynamiczone') {\n return 1;\n }\n return 0;\n })\n )(contentTypes);\n};\n\nexport default getNumberOfDynamicZones;\n","/**\n * The features service is responsible for managing features within strapi,\n * including interacting with the feature configuration file to know\n * which are enabled and disabled.\n */\n\nimport type { Core, Modules } from '@strapi/types';\n\ntype FeatureName = keyof Modules.Features.FeaturesConfig['future'];\n\nconst createFeaturesService = (strapi: Core.Strapi): Modules.Features.FeaturesService => {\n const service: Modules.Features.FeaturesService = {\n get config() {\n return strapi.config.get<Modules.Features.FeaturesService['config']>('features');\n },\n future: {\n isEnabled(futureFlagName: string): boolean {\n return service.config?.future?.[futureFlagName as FeatureName] === true;\n },\n },\n };\n\n return service;\n};\n\nexport { createFeaturesService };\nexport type FeaturesService = Modules.Features.FeaturesService;\n","import type { Core } from '@strapi/types';\nimport { get, set, has, isString, isNumber, isArray, type PropertyPath } from 'lodash';\n\ntype State = {\n config: Config;\n};\n\ntype Config = Record<string, unknown>;\n\nexport const createConfigProvider = (\n initialConfig: Record<string, unknown> = {},\n strapi?: Core.Strapi\n): Core.ConfigProvider => {\n const state: State = {\n config: { ...initialConfig }, // not deep clone because it would break some config\n };\n\n // Accessing model configs with dot (.) was deprecated between v4->v5, but to avoid a major breaking change\n // we will still support certain namespaces, currently only 'plugin.'\n const transformPathString = (path: string) => {\n if (path.startsWith('plugin.')) {\n const newPath = path.replace('plugin.', 'plugin::');\n\n // strapi logger may not be loaded yet, so fall back to console\n (strapi?.log?.warn ?? console.warn)(\n `Using dot notation for model config namespaces is deprecated, for example \"plugin::myplugin\" should be used instead of \"plugin.myplugin\". Modifying requested path ${path} to ${newPath}`\n );\n return newPath;\n }\n\n return path;\n };\n\n const transformDeprecatedPaths = (path: PropertyPath): PropertyPath => {\n if (isString(path)) {\n return transformPathString(path);\n }\n if (isArray(path)) {\n // if the path is not joinable, we won't apply our deprecation support\n if (path.some((part) => !(isString(part) || isNumber(part)))) {\n return path;\n }\n\n return transformPathString(path.join('.'));\n }\n\n return path;\n };\n\n return {\n ...state.config, // TODO: to remove\n get(path: PropertyPath, defaultValue?: unknown) {\n return get(state.config, transformDeprecatedPaths(path), defaultValue);\n },\n set(path: PropertyPath, val: unknown) {\n set(state.config, transformDeprecatedPaths(path), val);\n return this;\n },\n has(path: PropertyPath) {\n return has(state.config, transformDeprecatedPaths(path));\n },\n };\n};\n","import * as globalAgent from 'global-agent';\nimport path from 'path';\nimport _ from 'lodash';\nimport { isFunction } from 'lodash/fp';\nimport { Logger, createLogger } from '@strapi/logger';\nimport { Database } from '@strapi/database';\n\nimport type { Core, Modules, UID, Schema } from '@strapi/types';\n\nimport tsUtils from '@strapi/typescript-utils';\nimport { loadConfiguration } from './configuration';\n\nimport * as factories from './factories';\n\nimport * as utils from './utils';\nimport { Container } from './container';\nimport createStrapiFs from './services/fs';\nimport createEventHub from './services/event-hub';\nimport { createServer } from './services/server';\nimport { createReloader } from './services/reloader';\n\nimport { providers } from './providers';\nimport createEntityService from './services/entity-service';\nimport createQueryParamService from './services/query-params';\n\nimport entityValidator from './services/entity-validator';\nimport requestContext from './services/request-context';\nimport createAuth from './services/auth';\nimport createCustomFields from './services/custom-fields';\nimport createContentAPI from './services/content-api';\nimport getNumberOfDynamicZones from './services/utils/dynamic-zones';\nimport { FeaturesService, createFeaturesService } from './services/features';\nimport { createDocumentService } from './services/document-service';\n\nimport { coreStoreModel } from './services/core-store';\nimport { createConfigProvider } from './services/config';\n\nclass Strapi extends Container implements Core.Strapi {\n app: any;\n\n isLoaded: boolean = false;\n\n internal_config: Record<string, unknown> = {};\n\n constructor(opts: StrapiOptions) {\n super();\n\n this.internal_config = loadConfiguration(opts);\n\n this.registerInternalServices();\n\n for (const provider of providers) {\n provider.init?.(this);\n }\n }\n\n get admin(): Core.Module {\n return this.get('admin');\n }\n\n get EE(): boolean {\n return utils.ee.isEE;\n }\n\n get ee(): Core.Strapi['ee'] {\n return utils.ee;\n }\n\n get dirs(): Core.StrapiDirectories {\n return this.config.get('dirs');\n }\n\n get reload(): Core.Reloader {\n return this.get('reload');\n }\n\n get db(): Database {\n return this.get('db');\n }\n\n get requestContext(): Modules.RequestContext.RequestContext {\n return this.get('requestContext');\n }\n\n get customFields(): Modules.CustomFields.CustomFields {\n return this.get('customFields');\n }\n\n get entityValidator(): Modules.EntityValidator.EntityValidator {\n return this.get('entityValidator');\n }\n\n /**\n * @deprecated `strapi.entityService` will be removed in the next major version\n */\n get entityService(): Modules.EntityService.EntityService {\n return this.get('entityService');\n }\n\n get documents(): Modules.Documents.Service {\n return this.get('documents');\n }\n\n get features(): FeaturesService {\n return this.get('features');\n }\n\n get fetch(): Modules.Fetch.Fetch {\n return this.get('fetch');\n }\n\n get cron(): Modules.Cron.CronService {\n return this.get('cron');\n }\n\n get log(): Logger {\n return this.get('logger');\n }\n\n get startupLogger(): Core.StartupLogger {\n return this.get('startupLogger');\n }\n\n get eventHub(): Modules.EventHub.EventHub {\n return this.get('eventHub');\n }\n\n get fs(): Core.StrapiFS {\n return this.get('fs');\n }\n\n get server(): Modules.Server.Server {\n return this.get('server');\n }\n\n get telemetry(): Modules.Metrics.TelemetryService {\n return this.get('telemetry');\n }\n\n get store(): Modules.CoreStore.CoreStore {\n return this.get('coreStore');\n }\n\n get config() {\n return this.get('config');\n }\n\n get services() {\n return this.get('services').getAll();\n }\n\n service(uid: UID.Service) {\n return this.get('services').get(uid);\n }\n\n get controllers() {\n return this.get('controllers').getAll();\n }\n\n controller(uid: UID.Controller) {\n return this.get('controllers').get(uid);\n }\n\n get contentTypes(): Schema.ContentTypes {\n return this.get('content-types').getAll();\n }\n\n contentType(name: UID.ContentType) {\n return this.get('content-types').get(name);\n }\n\n get components(): Schema.Components {\n return this.get('components').getAll();\n }\n\n get policies() {\n return this.get('policies').getAll();\n }\n\n policy(name: string) {\n return this.get('policies').get(name);\n }\n\n get middlewares() {\n return this.get('middlewares').getAll();\n }\n\n middleware(name: string) {\n return this.get('middlewares').get(name);\n }\n\n get plugins(): Record<string, Core.Plugin> {\n return this.get('plugins').getAll();\n }\n\n plugin(name: string): Core.Plugin {\n return this.get('plugins').get(name);\n }\n\n get hooks() {\n return this.get('hooks').getAll();\n }\n\n hook(name: string) {\n return this.get('hooks').get(name);\n }\n\n get apis() {\n return this.get('apis').getAll();\n }\n\n api(name: string): Core.Module {\n return this.get('apis').get(name);\n }\n\n get auth() {\n return this.get('auth');\n }\n\n get contentAPI() {\n return this.get('content-api');\n }\n\n get sanitizers() {\n return this.get('sanitizers');\n }\n\n get validators() {\n return this.get('validators');\n }\n\n async start() {\n try {\n if (!this.isLoaded) {\n await this.load();\n }\n\n await this.listen();\n\n return this;\n } catch (error) {\n return this.stopWithError(error);\n }\n }\n\n // TODO: split into more providers\n registerInternalServices() {\n const config = createConfigProvider(this.internal_config, this);\n\n const logger = createLogger({\n level: 'http', // Strapi defaults to level 'http'\n ...config.get('logger'), // DEPRECATED\n ...config.get('server.logger.config'),\n });\n\n // Instantiate the Strapi container\n this.add('config', () => config)\n .add('query-params', createQueryParamService(this))\n .add('content-api', createContentAPI(this))\n .add('auth', createAuth())\n .add('server', () => createServer(this))\n .add('fs', () => createStrapiFs(this))\n .add('eventHub', () => createEventHub())\n .add('startupLogger', () => utils.createStartupLogger(this))\n .add('logger', () => logger)\n .add('fetch', () => utils.createStrapiFetch(this))\n .add('features', () => createFeaturesService(this))\n .add('requestContext', requestContext)\n .add('customFields', createCustomFields(this))\n .add('entityValidator', entityValidator)\n .add('entityService', () => createEntityService({ strapi: this, db: this.db }))\n .add('documents', () => createDocumentService(this))\n .add('db', () => {\n const tsDir = tsUtils.resolveOutDirSync(this.dirs.app.root);\n const tsMigrationsEnabled =\n this.config.get('database.settings.useTypescriptMigrations') === true && tsDir;\n const projectDir = tsMigrationsEnabled ? tsDir : this.dirs.app.root;\n return new Database(\n _.merge(this.config.get('database'), {\n logger,\n settings: {\n migrations: {\n dir: path.join(projectDir, 'database/migrations'),\n },\n },\n })\n );\n })\n .add('reload', () => createReloader(this));\n }\n\n sendStartupTelemetry() {\n // Emit started event.\n // do not await to avoid slower startup\n // This event is anonymous\n this.telemetry\n .send('didStartServer', {\n groupProperties: {\n database: this.config.get('database.connection.client'),\n plugins: Object.keys(this.plugins),\n numberOfAllContentTypes: _.size(this.contentTypes), // TODO: V5: This event should be renamed numberOfContentTypes in V5 as the name is already taken to describe the number of content types using i18n.\n numberOfComponents: _.size(this.components),\n numberOfDynamicZones: getNumberOfDynamicZones(),\n numberOfCustomControllers: Object.values<Core.Controller>(this.controllers).filter(\n // TODO: Fix this at the content API loader level to prevent future types issues\n (controller) => controller !== undefined && factories.isCustomController(controller)\n ).length,\n environment: this.config.environment,\n // TODO: to add back\n // providers: this.config.installedProviders,\n },\n })\n .catch(this.log.error);\n }\n\n async openAdmin({ isInitialized }: { isInitialized: boolean }) {\n const shouldOpenAdmin =\n this.config.get('environment') === 'development' &&\n this.config.get('admin.autoOpen', true) !== false;\n\n if (shouldOpenAdmin && !isInitialized) {\n try {\n await utils.openBrowser(this.config);\n this.telemetry.send('didOpenTab');\n } catch (e) {\n this.telemetry.send('didNotOpenTab');\n }\n }\n }\n\n async postListen() {\n const isInitialized = await utils.isInitialized(this);\n\n this.startupLogger.logStartupMessage({ isInitialized });\n\n this.log.info('Strapi started successfully');\n this.sendStartupTelemetry();\n this.openAdmin({ isInitialized });\n }\n\n /**\n * Add behaviors to the server\n */\n async listen() {\n return new Promise<void>((resolve, reject) => {\n const onListen = async () => {\n try {\n await this.postListen();\n\n resolve();\n } catch (error) {\n reject(error);\n }\n };\n\n const listenSocket = this.config.get('server.socket');\n\n if (listenSocket) {\n this.server.listen(listenSocket, onListen);\n } else {\n const { host, port } = this.config.get('server');\n\n this.server.listen(port, host, onListen);\n }\n });\n }\n\n stopWithError(err: unknown, customMessage?: string): never {\n this.log.debug(`⛔️ Server wasn't able to start properly.`);\n if (customMessage) {\n this.log.error(customMessage);\n }\n\n this.log.error(err);\n return this.stop();\n }\n\n stop(exitCode = 1): never {\n this.destroy();\n\n if (this.config.get('autoReload')) {\n process.send?.('stop');\n }\n\n // Kill process\n process.exit(exitCode);\n }\n\n async load() {\n await this.register();\n await this.bootstrap();\n\n this.isLoaded = true;\n\n return this;\n }\n\n async register() {\n // @ts-expect-error: init is internal\n this.ee.init(this.dirs.app.root, this.log);\n\n for (const provider of providers) {\n await provider.register?.(this);\n }\n\n await this.runPluginsLifecycles(utils.LIFECYCLES.REGISTER);\n await this.runUserLifecycles(utils.LIFECYCLES.REGISTER);\n\n // NOTE: Swap type customField for underlying data type\n utils.convertCustomFieldType(this);\n\n return this;\n }\n\n async bootstrap() {\n this.configureGlobalProxy();\n\n const models = [\n ...utils.transformContentTypesToModels(\n [...Object.values(this.contentTypes), ...Object.values(this.components)],\n this.db.metadata.identifiers\n ),\n ...this.get('models').get(),\n ];\n\n await this.db.init({ models });\n\n let oldContentTypes;\n if (await this.db.getSchemaConnection().hasTable(coreStoreModel.tableName)) {\n oldContentTypes = await this.store.get({\n type: 'strapi',\n name: 'content_types',\n key: 'schema',\n });\n }\n\n await this.hook('strapi::content-types.beforeSync').call({\n oldContentTypes,\n contentTypes: this.contentTypes,\n });\n\n const status = await this.db.schema.sync();\n\n // if schemas have changed, run repairs\n if (status === 'CHANGED') {\n await this.db.repair.removeOrphanMorphType({ pivot: 'component_type' });\n }\n\n if (this.EE) {\n await utils.ee.checkLicense({ strapi: this });\n }\n\n await this.hook('strapi::content-types.afterSync').call({\n oldContentTypes,\n contentTypes: this.contentTypes,\n });\n\n await this.store.set({\n type: 'strapi',\n name: 'content_types',\n key: 'schema',\n value: this.contentTypes,\n });\n\n await this.server.initMiddlewares();\n this.server.initRouting();\n\n await this.contentAPI.permissions.registerActions();\n\n await this.runPluginsLifecycles(utils.LIFECYCLES.BOOTSTRAP);\n\n for (const provider of providers) {\n await provider.bootstrap?.(this);\n }\n\n await this.runUserLifecycles(utils.LIFECYCLES.BOOTSTRAP);\n\n return this;\n }\n\n configureGlobalProxy() {\n const globalProxy = this.config.get('server.proxy.global');\n const httpProxy = this.config.get('server.proxy.http') || globalProxy;\n const httpsProxy = this.config.get('server.proxy.https') || globalProxy;\n\n if (!httpProxy && !httpsProxy) {\n return;\n }\n\n globalAgent.bootstrap();\n\n if (httpProxy) {\n this.log.info(`Using HTTP proxy: ${httpProxy}`);\n (global as any).GLOBAL_AGENT.HTTP_PROXY = httpProxy;\n }\n\n if (httpsProxy) {\n this.log.info(`Using HTTPS proxy: ${httpsProxy}`);\n (global as any).GLOBAL_AGENT.HTTPS_PROXY = httpsProxy;\n }\n }\n\n async destroy() {\n this.log.info('Shutting down Strapi');\n await this.runPluginsLifecycles(utils.LIFECYCLES.DESTROY);\n\n for (const provider of providers) {\n await provider.destroy?.(this);\n }\n\n await this.runUserLifecycles(utils.LIFECYCLES.DESTROY);\n\n await this.server.destroy();\n\n this.eventHub.destroy();\n\n await this.db?.destroy();\n\n process.removeAllListeners();\n\n // @ts-expect-error: Allow clean delete of global.strapi to allow re-instanciation\n delete global.strapi;\n\n this.log.info('Strapi has been shut down');\n }\n\n async runPluginsLifecycles(lifecycleName: 'register' | 'bootstrap' | 'destroy') {\n // plugins\n await this.get('modules')[lifecycleName]();\n }\n\n async runUserLifecycles(lifecycleName: 'register' | 'bootstrap' | 'destroy') {\n // user\n const userLifecycleFunction = this.app && this.app[lifecycleName];\n if (isFunction(userLifecycleFunction)) {\n await userLifecycleFunction({ strapi: this });\n }\n }\n\n getModel(uid: UID.ContentType): Schema.ContentType;\n getModel(uid: UID.Component): Schema.Component;\n getModel<TUID extends UID.Schema>(uid: TUID): Schema.ContentType | Schema.Component | undefined {\n if (uid in this.contentTypes) {\n return this.contentTypes[uid as UID.ContentType];\n }\n\n if (uid in this.components) {\n return this.components[uid as UID.Component];\n }\n }\n\n /**\n * @deprecated Use `strapi.db.query` instead\n */\n query(uid: UID.Schema) {\n return this.db.query(uid);\n }\n}\n\nexport interface StrapiOptions {\n appDir: string;\n distDir: string;\n autoReload?: boolean;\n serveAdminPanel?: boolean;\n}\n\nexport default Strapi;\n","import tsUtils from '@strapi/typescript-utils';\n\ninterface Options {\n appDir?: string;\n ignoreDiagnostics?: boolean;\n}\n\nexport default async function compile(options?: Options) {\n const { appDir = process.cwd(), ignoreDiagnostics = false } = options ?? {};\n const isTSProject = await tsUtils.isUsingTypeScript(appDir);\n const outDir = await tsUtils.resolveOutDir(appDir);\n\n if (isTSProject) {\n await tsUtils.compile(appDir, {\n configOptions: { options: { incremental: true }, ignoreDiagnostics },\n });\n }\n\n const distDir = isTSProject ? outDir : appDir;\n\n return { appDir, distDir };\n}\n","import * as qs from 'qs';\nimport type { Core } from '@strapi/types';\n\nimport Strapi, { type StrapiOptions } from './Strapi';\nimport { destroyOnSignal, resolveWorkingDirectories, createUpdateNotifier } from './utils';\n\nexport { default as compileStrapi } from './compile';\nexport * as factories from './factories';\n\nexport const createStrapi = (options: Partial<StrapiOptions> = {}): Core.Strapi => {\n const strapi = new Strapi({\n ...options,\n ...resolveWorkingDirectories(options),\n });\n\n destroyOnSignal(strapi);\n createUpdateNotifier(strapi);\n\n // TODO: deprecate and remove in next major\n global.strapi = strapi;\n\n return strapi;\n};\n\n// Augment Koa query type based on Strapi query middleware\n\ndeclare module 'koa' {\n type ParsedQuery = ReturnType<typeof qs.parse>;\n\n export interface BaseRequest {\n _querycache?: ParsedQuery;\n\n get query(): ParsedQuery;\n set query(obj: any);\n }\n\n export interface BaseContext {\n _querycache?: ParsedQuery;\n\n get query(): ParsedQuery;\n set query(obj: any);\n }\n}\n"],"names":["getConfigUrls","config","forAdminBuild","serverConfig","server","adminConfig","admin","serverUrl","_","get","trim","Error","startsWith","URL","url","toString","e","adminUrl","adminPath","origin","replace","strings","getCommonPath","pathname","getAbsoluteUrl","adminOrServer","hostname","environment","includes","host","port","getAbsoluteAdminUrl","getAbsoluteServerUrl","loadJsFile","file","jsModule","importDefault","env","error","message","loadJSONFile","JSON","parse","fs","readFileSync","loadConfigFile","ext","path","extname","VALID_EXTENSIONS","MISTAKEN_FILENAMES","middleware","plugin","RESTRICTED_FILENAMES","Object","keys","STRAPI_CONFIG_FILENAMES","logWarning","console","warn","dir","existsSync","allFiles","readdirSync","withFileTypes","seenFilenames","Set","configFiles","reduce","acc","baseName","basename","name","baseNameLower","toLowerCase","extension","extensionLower","isFile","join","log","restrictedPrefix","find","restrictedName","has","add","push","key","resolve","getDirs","appDir","distDir","dist","root","src","api","components","extensions","policies","middlewares","app","static","public","dotenv","process","ENV_PATH","NODE_ENV","defaultConfig","HOST","os","Number","PORT","proxy","cron","enabled","autoOpen","dirs","transfer","remote","logger","updates","startup","rest","prefix","loadConfiguration","opts","autoReload","serveAdminPanel","pkgJSON","require","configDir","cwd","rootConfig","launchedAt","Date","now","uuid","packageJsonStrapi","omit","info","strapi","strapiVersion","baseConfig","loadConfigDir","envDir","envConfig","merge","serverAbsoluteUrl","adminAbsoluteUrl","sameOrigin","set","isEntry","property","isPlainObject","Array","isArray","isDZEntries","transformResponse","resource","meta","useJsonAPIFormat","isNil","data","transformEntry","contentType","transformComponent","component","map","datum","res","id","attributes","entry","type","singleEntry","documentId","properties","attributeValues","attribute","target","subProperty","__component","createSingleTypeController","uid","ctx","validateQuery","sanitizedQuery","sanitizeQuery","entity","service","sanitizedEntity","sanitizeOutput","update","query","body","request","isObject","errors","ValidationError","validateInput","sanitizedInputData","sanitizeInput","createOrUpdate","delete","status","createCollectionTypeController","results","pagination","sanitizedResults","findOne","params","create","storage","AsyncLocalStorage","requestCtx","run","store","cb","getStore","isSingleType","contentTypeUtils","getAuthFromKoaContext","prop","createController","proto","headers","auth","contentAPI","sanitize","output","input","validate","ctrl","assign","CoreService","getFetchParams","SingleTypeService","getDocumentId","db","then","document","documents","findFirst","deletedEntries","entries","length","constructor","createSingleTypeService","getLimitConfigDefaults","defaultLimit","toNumber","maxLimit","isOffsetPagination","isPagedPagination","shouldCount","withCount","Boolean","getPaginationInfo","start","limit","withDefaultPagination","defaults","offset","page","pageSize","transformPaginationResponse","paginationInfo","total","isPaged","transform","transformPagedPaginationInfo","transformOffsetPaginationInfo","paginationResponse","CollectionTypeService","fetchParams","findMany","count","undefined","createCollectionTypeService","createService","createRoutes","getSingleTypeRoutes","getCollectionTypeRoutes","method","singularName","handler","pluralName","symbols","CustomController","Symbol","createCoreController","cfg","baseController","userCtrl","methodName","setPrototypeOf","isCustom","defineProperty","writable","configurable","enumerable","createCoreService","baseService","userService","createCoreRouter","only","except","routes","defaultRoutes","forEach","routeName","defaultRoute","selectedRoutes","pipe","pick","values","isCustomController","controller","openBrowser","open","isInitialized","isEmpty","anyAdministrator","select","err","stopWithError","DEFAULT_FEATURES","bronze","silver","gold","options","retentionDays","publicKey","__dirname","LicenseCheckError","shouldFallback","readLicense","directory","code","verifyLicense","license","signature","base64Content","Buffer","from","split","stringifiedContent","verify","crypto","createVerify","end","verified","licenseInfo","features","freeze","throwError","fetchLicense","projectId","response","fetch","stringify","deviceId","machineID","catch","json","INTEGER_REGEX","STEP_REGEX","COMPONENTS","zeroBasedIndices","functionName","shift","index","date","currentValue","test","parseInt","step","frequency","Math","floor","list","value","sort","a","b","shiftCronExpression","rule","filter","negate","secondsIncluded","ONE_MINUTE","ee","disable","shouldEmitEvent","eventHub","emit","enable","initialized","init","licenseDir","STRAPI_DISABLE_EE","STRAPI_LICENSE","onlineUpdate","commit","rollback","transaction","storedInfo","queryBuilder","where","first","transacting","forUpdate","execute","result","shouldContactRegistry","lastCheckAt","fallback","licenseKey","newLicenseInfo","licenseInfoChanged","isEqual","seats","wasEnabled","validateInfo","insert","expireAt","expirationTime","getTime","checkLicense","shouldStayOffline","STRAPI_DISABLE_LICENSE_PING","task","feature","featureName","isEE","isEnabled","CHECK_INTERVAL","NOTIF_INTERVAL","boxenOptions","padding","margin","align","borderColor","borderStyle","getUpdateMessage","newVersion","currentVersion","currentVersionLog","chalk","dim","newVersionLog","green","releaseLink","bold","createUpdateNotifier","Configstore","pkg","configPath","checkUpdate","checkInterval","lastUpdateCheck","packageJson","version","display","notifInterval","latestVersion","lastNotification","stdout","isTTY","semver","valid","lte","boxen","bool","createStrapiFetch","strapiFetch","fetchOptions","dispatcher","debug","ProxyAgent","convertCustomFieldType","allContentTypeSchemaAttributes","contentTypes","schema","allComponentSchemaAttributes","allSchemasAttributes","schemaAttrbutes","customField","createStartupLogger","logStats","columns","min","stderr","black","bgWhite","padEnd","infoTable","CLITable","colWidths","chars","mid","dbInfo","getInfo","blue","pid","EE","client","displayName","logFirstStartupMessage","grey","addressTable","logDefaultStartupMessage","logStartupMessage","getComponentJoinTableName","collectionName","identifiers","getNameFromTokens","compressible","shortName","getDzJoinTableName","getComponentJoinColumnEntityName","getComponentJoinColumnInverseName","getComponentTypeColumn","getComponentFkIndexName","transformAttribute","relation","multiple","morphBy","joinTableName","joinColumnEntityName","joinColumnInverseName","compTypeColumn","repeatable","joinTable","joinColumn","referencedColumn","ID_COLUMN","inverseJoinColumn","on","field","orderColumnName","ORDER_COLUMN","orderBy","order","pivotColumns","FIELD_COLUMN","morphColumn","idColumn","typeColumn","typeField","transformAttributes","attrs","attrName","hasComponentsOrDz","some","createDocumentId","createId","createCompoLinkModel","entityId","componentId","fkIndex","tableName","column","unsigned","defaultTo","indexes","getIndexName","getUniqueIndexName","foreignKeys","referencedColumns","referencedTable","getTableName","onDelete","transformContentTypesToModels","models","assert","modelName","documentIdAttribute","modelType","default","reservedAttributeNames","attributeName","snakeCasedAttributeName","snakeCase","compoLinkModel","model","lifecycles","n","getColumnName","destroyOnSignal","signalReceived","terminateStrapi","destroy","exit","signal","LIFECYCLES","REGISTER","BOOTSTRAP","DESTROY","resolveWorkingDirectories","Container","resolver","registerMap","args","serviceMap","Map","normalizePath","optPath","filePath","normalizedPath","normalize","strapiFS","writeAppFile","writePath","fse","ensureFile","writeFile","writePluginFile","newPath","concat","removeAppFile","removePath","remove","appendFile","appendFileSync","createEventHub","listeners","defaultSubscriber","eventName","listener","subscribers","subscriber","subscribe","unsubscribe","subscriberIndex","indexOf","splice","off","once","removeAllListeners","removeAllSubscribers","removeListener","clear","addListener","createHTTPServer","koaApp","connections","handleRequest","req","callback","http","createServer","connection","listening","Promise","reject","close","instantiateMiddleware","middlewareFactory","resolveRouteMiddlewares","route","middlewaresConfig","resolveMiddlewares","dummyMiddleware","next","item","resolvedMiddlewareFactory","resolveCustomMiddleware","modulePath","createPolicicesMiddleware","policiesConfig","resolvedPolicies","policiesMiddleware","context","policyUtils","createPolicyContext","PolicyError","getMethod","toLower","getPath","createRouteInfoMiddleware","routeInfo","state","getAuthConfig","createAuthorizeMiddleware","authService","UnauthorizedError","unauthorized","ForbiddenError","forbidden","createAuthenticateMiddleware","authenticate","returnBodyMiddleware","authorize","router","action","getAction","routeHandler","compose","castArray","getController","pluginName","apiName","extractHandlerParts","controllerName","slice","lastIndexOf","actionName","for","bind","policyOrMiddlewareSchema","yup","lazy","string","required","mixed","isFunction","object","notRequired","routeSchema","oneOf","array","boolean","scope","of","validateRouteConfig","routeConfig","validateSync","strict","abortEarly","stripUnknown","createRouteManager","composeEndpoint","createEndpointComposer","createRoute","routeWithInfo","addRoutes","subRouter","Router","hasPrefix","use","allowedMethods","createAPI","routeManager","listRoutes","stack","fn","mount","createAdminAPI","createContentAPI","createRouteScopeGenerator","namespace","endsWith","defaultsDeep","registerAdminRoutes","registerAPIRoutes","registerPluginRoutes","generateRouteScope","plugins","apis","requiredMiddlewares","middlewareConfigSchema","noUnknown","registerApplicationMiddlewares","middlewareConfig","validateMiddlewareConfig","checkRequiredMiddlewares","missingMiddlewares","findIndex","mdl","mapErrorsAndStatus","classError","NotFoundError","PayloadTooLargeError","RateLimitError","NotImplementedError","formatApplicationError","errorAndStatus","pair","details","formatHttpError","formatInternalError","createError","httpError","expose","addCustomMethods","delegator","delegate","statuses","codes","camelCasedName","camelCase","responseCode","send","created","deleted","createKoaApp","Koa","healthCheck","httpServer","all","mounted","initRouting","registerAllRoutes","initMiddlewares","listen","createReloader","shouldReload","isWatching","reload","isReloading","defineProvider","provider","GRAPHQL_ENUM_REGEX","lifecyclesShape","mapValues","keyBy","nullable","contentTypeSchemaValidator","shape","isKebabCase","attr","regressedValues","enum","toRegressedEnumValue","every","duplicates","uniq","actions","onlyContainsFunctions","validateContentTypeDefinition","CREATED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","contentTypesUtils","constants","createContentType","definition","cloneDeep","kind","__schema__","pickSchema","addTimestamps","addDraftAndPublish","addCreatorFields","visible","isPrivate","useJoinTable","private","getGlobalId","globalId","upperFirst","loadAdmin","services","controllers","formatContentTypes","userAdminConfig","register","bootstrap","coreStoreModel","tag","createCoreStore","mergeParams","defaultParams","createCronService","jobsSpecs","running","tasks","taskExpression","taskValue","taskName","fnWithStrapi","job","Job","schedule","matchingJobsSpecs","jobSpecName","cancel","stop","jobs","cronTasks","hasNamespace","addNamespace","removeNamespace","validateKeySameToSingularName","ctName","contentTypesRegistry","getAll","pickBy","newContentTypes","rawCtName","extend","ctUID","extendFn","currentContentType","componentsRegistry","newComponents","servicesRegistry","instantiatedServices","filteredServices","newServices","serviceName","currentService","newService","PLUGIN_PREFIX","API_PREFIX","parsePolicy","policy","policyName","policiesRegistry","namespaceInfo","resolveHandler","policyConfig","validator","fromEntries","newPolicies","middlewaresRegistry","rawMiddlewares","middlewareName","currentMiddleware","newMiddleware","hooksRegistry","hooks","hook","hookName","currentHook","newHook","controllersRegistry","instances","filteredControllers","newControllers","controllerUID","currentController","newController","strapiServerSchema","validateModule","removeNamespacedKeys","mapKeys","defaultModule","createModule","rawModule","called","load","defaultValue","pathArray","flatten","modulesRegistry","modules","mod","pluginsRegistry","pluginConfig","pluginModule","ALLOWED_TYPES","customFieldsRegistry","customFields","registeredCustomField","customFieldList","cf","inputSize","isValidObjectKey","isResizable","apisRegistry","apiConfig","sanitizersRegistry","sanitizers","sanitizer","validatorsRegistry","validators","registry","srcSchema","validateSrcIndex","srcIndex","pathToSrcIndex","statSync","isDirectory","DEFAULT_CONTENT_TYPE","normalizeName","kebabCase","fd","isDotFile","loadAPIs","apisFDs","readdir","apiFD","loadAPI","validateContentTypesUnicity","allApisSchemas","flatMap","names","loadIndex","loadDir","loadContentTypes","pathExists","loadFile","fds","contentTypeName","loadedContentType","readJSON","compression","compress","maxAge","credentials","methods","keepHeadersOnError","cors","koaCors","originList","parsedOrigin","exposeHeaders","allowMethods","allowHeaders","errorMiddleware","_explicitStatus","notFound","ApplicationError","HttpError","favicon","faviconDefaultPath","appRoot","faviconPath","koaFavicon","ip","koaIp","delta","ceil","poweredBy","multipart","patchKoa","ensureFileMimeType","mime","lookup","getFiles","files","bodyMiddleware","bodyConfig","gqlEndpoint","gqlConfig","koaBody","payloadTooLarge","filepath","strictNullHandling","arrayLimit","depth","addQsParser","settings","qstr","querystring","_querycache","cache","qs","obj","responseTime","responses","handlers","crossOriginEmbedderPolicy","crossOriginOpenerPolicy","crossOriginResourcePolicy","originAgentCluster","contentSecurityPolicy","useDefaults","directives","upgradeInsecureRequests","xssFilter","hsts","includeSubDomains","frameguard","mergeConfig","existingConfig","newConfig","mergeWith","security","helmetConfig","specialPaths","playground","str","helmet","autoCommit","overwrite","httpOnly","signed","rolling","renew","secure","sameSite","session","userConfig","koaSession","publicStatic","redirect","koaStatic","maxage","defer","loadMiddlewares","localMiddlewares","loadLocalMiddlewares","internalMiddlewares","paths","fullPath","filePathToPropPath","entryPath","useFileNameAsKey","fp","removeRelativePrefix","RegExp","win32","sep","posix","trimCharsStart","identity","loadFiles","pattern","requireFn","shouldUseFileNameAsKey","globArgs","glob","absolutePath","readJson","propPath","setWith","loadComponents","category","__filename__","loadPolicies","getUserPluginsConfig","globalUserConfigPath","currentEnvUserConfigPath","INTERNAL_PLUGINS","isStrapiPlugin","validatePluginName","toDetailedDeclaration","declaration","detailedDeclaration","pathToPlugin","isModule","dirname","getEnabledPlugins","internalPlugins","dep","packagePath","packageModulePath","packageInfo","installedPlugins","dependencies","packageName","declaredPlugins","userPluginsConfig","declaredPluginsResolves","installedPluginsNotAlreadyUsed","p","enabledPlugins","defaultPlugin","applyUserExtension","extensionsDir","extendedSchemas","strapiServers","extendedSchema","strapiServer","applyUserConfig","userPluginConfig","getOr","loadPlugins","enabledPlugin","serverEntrypointPath","resolvedExport","exports","pluginServer","loadApplicationContext","loadSrcIndex","loadSanitizers","loadValidators","databaseErrorsToTransform","databaseErrors","InvalidTimeError","InvalidDateTimeError","InvalidDateError","InvalidRelationError","databaseErrorsMiddleware","errorToTransform","createMiddlewareManager","manager","wrapObject","source","ctxDefaults","facade","exclude","hasOwnProperty","call","newMethod","wrapInTransaction","setStatusToDraft","hasDraftAndPublish","assoc","defaultToDraft","defaultStatus","filterDataPublishedAt","publishedAt","statusToLookup","$notNull","$null","statusToData","setStatusToDraftCurry","curry","defaultToDraftCurry","defaultStatusCurry","filterDataPublishedAtCurry","statusToLookupCurry","statusToDataCurry","getDefaultLocale","defaultLocale","isLocalizedContentType","locale","localeToLookup","String","multiLocaleToLookup","localeToData","isValidLocale","defaultLocaleCurry","localeToLookupCurry","multiLocaleToLookupCurry","localeToDataCurry","omitComponentData","componentAttributes","isComponentAttribute","createComponents","getModel","componentBody","attributeNames","componentUID","componentValue","async","createComponent","__pivot","component_type","dynamiczoneValues","createDynamicZoneComponents","getComponents","getComponentAttributes","updateComponents","entityToUpdate","deleteOldComponents","updateOrCreateComponent","deleteOldDZComponents","pickStringifiedId","previousValue","idsToKeep","allIds","idsToDelete","difference","idToDelete","deleteComponent","v","el","deleteComponents","entityToDelete","subValue","componentData","assignComponentData","updateComponent","componentToUpdate","componentToDelete","encodeKey","createIdMap","loadedIds","toLoadIds","keyFields","loadIdValues","idsByUidAndLocale","ids","documentIds","findParams","$in","$ne","getRelationTargetLocale","targetLocale","sourceLocale","isTargetLocalized","targetUid","isSourceLocalized","sourceUid","getRelationTargetStatus","targetContentType","sourceContentType","targetHasDP","sourceHasDP","sourceStatus","isNumeric","parsed","isNaN","toArray","mapRelation","rel","isRecursive","wrapInSet","r","flat","disconnect","connect","traverseEntityRelations","visitor","traverseEntity","utils","mapRelationCurried","traverseEntityRelationsCurried","isPolymorphic","relations","addRelationDocId","idMap","targetStatus","extractDataIds","isPolymorphicRelation","addDocId","__type","position","positionTargetUid","before","after","getRelationIds","tStatus","entryId","allowMissingId","transformDataIdsVisitor","getIds","newRelation","beforeRelation","beforeIds","at","afterRelation","setDefaultLocaleToRelations","transformData","transformedData","extractDataRelationIds","transformRelationDataIds","transformFields","fields","transformPopulate","traverse","traverseQueryPopulate","transformParamsDocumentId","populate","curriedTransformParamsDocumentId","transformParamsToQuery","pickSelectionParams","transforms","password","isString","rounds","bcrypt","hashSync","applyTransforms","attributeContext","createEntriesService","entityValidator","createEntry","restParams","validData","validateEntityCreation","isDraft","dataWithComponents","entryData","doc","deleteEntry","componentsToDelete","deletedEntry","updateEntry","entryToUpdate","validateEntityUpdate","publishEntry","draft","discardDraftEntry","publish","discardDraft","getDeepPopulate","isMorphRelation","isVisible","isVisibleAttribute","isCreatorField","relationalFields","populatedComponents","EVENTS","ENTRY_CREATE","ENTRY_UPDATE","ENTRY_DELETE","ENTRY_PUBLISH","ENTRY_UNPUBLISH","ENTRY_DRAFT_DISCARD","createEventManager","emitEvent","populatedEntry","sanitizedEntry","defaultSanitizeOutput","onCommit","oldVersions","newVersions","trx","dbModel","metadata","inversedBy","mappedBy","sourceColumnName","targetColumnName","oldVersionsRelations","getConnection","whereIn","draftAndPublish","newVersionsRelations","discardToAdd","matchingOldVerion","oldRelation","sync","oldEntries","newEntries","oldRelations","newEntryByLocale","oldEntriesMap","newEntry","newRelations","newId","batchInsert","relationsToUpdate","oldEntryIds","existingRelations","newEntriesByLocale","entryIdMapping","oldEntry","sourceColumn","targetColumn","orderColumn","oldSourceId","targetId","originalOrder","textNodeValidator","equals","text","italic","underline","strikethrough","checkValidLink","link","linkNodeValidator","children","inlineNodeValidator","paragraphNodeValidator","headingNodeValidator","level","number","quoteNodeValidator","codeBlockValidator","syntax","listItemNode","listChildrenValidator","listNodeValidator","format","imageNodeValidator","image","alternativeText","caption","width","height","formats","hash","size","previewUrl","provider_metadata","createdAt","updatedAt","blockNodeValidator","blocksValidatorSchema","blocksValidator","addMinLengthValidator","minLength","isInteger","addMaxLengthValidator","maxLength","max","addMinIntegerValidator","isNumber","toInteger","addMaxIntegerValidator","addMinFloatValidator","addMaxFloatValidator","addStringRegexValidator","isUndefined","regex","matches","excludeEmptyString","addUniqueValidator","updatedAttribute","componentContext","unique","validateUniqueFieldWithinComponent","hasRepeatableData","repeatableData","updatedName","updatedValue","pathToCheck","pathToComponent","isUpdatedAttributeRepeatedInThisEntity","parentModel","parentOptions","excludeId","parentContent","whereConditions","isParentDraft","queryUid","queryWhere","reduceRight","validateUniqueFieldWithinDynamicZoneComponent","startOfPath","targetComponentUID","countOfValueInThisEntity","fullDynamicZoneContent","published_at","$eq","parentModelQueryResult","filteredResults","dynamicZoneComponent","hasPathToComponent","testingDZ","scalarAttributeWhere","stringValidator","metas","val","originalVal","emailValidator","email","uidValidator","enumerationValidator","integerValidator","integer","floatValidator","bigintegerValidator","datesValidator","Validators","richtext","enumeration","biginteger","float","decimal","time","datetime","timestamp","blocks","validateYupSchema","strapiUtils","isMediaAttribute","isScalarAttribute","getWritableAttributes","addMinMax","nextValidator","addRequiredValidation","notNil","notNull","addDefault","preventCast","createComponentValidator","createModelValidator","createDzValidator","createRelationValidator","createScalarAttributeValidator","createAttributeValidator","newComponentContext","writableAttributes","createValidateEntity","relationsValidation","checkRelationsExist","buildRelationsStore","currentModel","idArray","relationsStore","objValue","srcValue","dzValue","promises","evaluate","uniqueValues","uniqBy","createContentTypeRepository","sortValidations","fieldValidations","filtersValidations","populateValidations","filters","validateParams","validateFilters","validateSort","validateFields","validatePopulate","eventManager","DP","i18n","deleteDocument","entriesToDelete","entryToDelete","queryParams","clone","entriesToClone","clonedEntries","updatedDraft","documentExists","draftsToPublish","oldPublishedVersions","relationsToSync","unidirectionalRelations","bidirectionalRelationsToSync","bidirectionalRelations","publishedEntries","unpublish","versionsToDelete","versionsToDraft","oldDrafts","draftEntries","createDocumentService","repositories","factory","repository","instance","hasTable","hasDP","copyPublishedEntriesToDraft","scalarAttributes","columnName","into","raw","subQb","att","whereNotNull","getBatchToDiscard","defaultBatchSize","isSQLite","batchSize","hasMore","batch","migrateUp","dpModels","documentService","concurrency","discardDocumentDrafts","up","down","enableDraftAndPublish","oldContentTypes","oldContentType","disableDraftAndPublish","enableI18n","updateMany","disableI18n","deleteMany","i18nMigrations","draftPublishMigrations","registries","createAsyncParallelHook","syncMigrations","migrations","providers","internal","nextResetDate","sender","limitedEvents","cacheExpiresAt","eventCache","event","generateAdminUserHash","requestContext","user","createHash","digest","defaultQueryOpts","timeout","ANALYTICS_URI","addPackageJsonStrapiMetadata","serverRootPath","adminRootPath","anonymousUserProperties","osPlatform","platform","osArch","arch","osRelease","release","nodeVersion","versions","node","anonymousGroupProperties","docker","DOCKER","isDocker","isCI","ciEnv","useTypescriptOnServer","tsUtils","isUsingTypeScriptSync","useTypescriptOnAdmin","isHostedOnStrapiCloud","payload","userId","reqParams","eventProperties","userProperties","groupProperties","projectType","ok","createMiddleware","sendEvent","expires","counter","isTruthy","LIMITED_EVENTS","createTelemetryInstance","telemetryDisabled","isDisabled","STRAPI_TELEMETRY_DISABLED","crons","createSender","wrapWithRateLimit","pingCron","scheduleJob","createTelemetry","webhookModel","events","toDBObject","fromDBObject","row","webhookEventValidator","allowedEvents","allowedValues","createWebhookStore","addAllowedEvent","removeAllowedEvent","listAllowedEvents","getAllowedEvent","findWebhooks","findWebhook","createWebhook","updateWebhook","webhook","deleteWebhook","createDebugger","noop","WorkerQueue","worker","enqueue","queue","unshift","pop","createdDebugger","defaultConfiguration","defaultHeaders","WebhookRunner","deleteListener","createListener","executeListener","webhooks","webhooksMap","activeWebhooks","AbortSignal","statusCode","filteredWebhooks","configuration","createWebhookRunner","coreStore","telemetry","transformLoadParamsToQuery","createDefaultImplementation","wrapParams","wrapResult","wrappedParams","entities","findPage","shouldPublish","loadedEntity","loadPages","relationUtils","isAnyToMany","loadedPage","implementation","decorate","decorator","oldService","transformQueryParams","createTransformer","INVALID_STRATEGY_MSG","validStrategy","strategy","createAuthentication","strategies","routeStrategies","configStrategies","strategiesToUse","routeStrategy","rs","authenticated","ability","isAuthenticated","createCustomFields","providerFactory","isLoaded","condition","permissions","engine","new","typeSymbol","createValidatePermissionHandler","actionProvider","permission","createActionProvider","createConditionProvider","getActionsMap","actionMap","isContentApi","registerAPIsActions","contentApiActions","registerActions","actionsMap","actionUID","createPermissionEngine","transformRoutePrefixFor","filterContentAPI","getRoutesMap","routesMap","apiPrefix","transformPrefix","createAPISanitizers","createAPIValidators","instantiatePermissionsUtilities","getNumberOfDynamicZones","sumBy","createFeaturesService","future","futureFlagName","createConfigProvider","initialConfig","transformPathString","transformDeprecatedPaths","part","Strapi","entityService","startupLogger","registerInternalServices","internal_config","createLogger","createQueryParamService","createAuth","createStrapiFs","createEntityService","tsDir","resolveOutDirSync","tsMigrationsEnabled","projectDir","Database","sendStartupTelemetry","database","numberOfAllContentTypes","numberOfComponents","numberOfDynamicZones","numberOfCustomControllers","factories","openAdmin","shouldOpenAdmin","postListen","onListen","listenSocket","customMessage","exitCode","runPluginsLifecycles","runUserLifecycles","configureGlobalProxy","getSchemaConnection","repair","removeOrphanMorphType","pivot","globalProxy","httpProxy","httpsProxy","globalAgent","global","GLOBAL_AGENT","HTTP_PROXY","HTTPS_PROXY","lifecycleName","userLifecycleFunction","compile","ignoreDiagnostics","isTSProject","isUsingTypeScript","outDir","resolveOutDir","configOptions","incremental","createStrapi"],"mappings":"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"}