{"version":3,"file":"register-middlewares.mjs","sources":["../../../src/services/server/register-middlewares.ts"],"sourcesContent":["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"],"names":[],"mappings":";;AAMA,MAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,sBAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,yBAAyB,IAAI,MAAA,EAAQ;AAAA,EACzC,IAAI,KAAK,CAAC,UAAU;AACd,QAAA,OAAO,UAAU,UAAU;AACtB,aAAA,IAAI,SAAS;IACtB;AAEI,QAAA,OAAO,UAAU,UAAU;AAC7B,aAAO,IACJ,OAAO;AAAA,QACN,MAAM,IAAI,OAAO;AAAA,QACjB,SAAS,IAAI,OAAO;AAAA,QACpB,QAAQ,IAAI,MAAM;AAAA,MAAA,CACnB,EACA,WACA;IACL;AAEA,WAAO,IAAI,MAAA,EAAQ,KAAK,MAAM,KAAK;AAAA,EAAA,CACpC;AAAA;AACH;AAKM,MAAA,iCAAiC,OAAO,WAAwB;AACpE,QAAM,mBAAqC,OAAO,OAAO,IAAI,eAAe,aAAa;AAEzF,QAAM,yBAAyB,gBAAgB;AAE/C,QAAM,cAAc,MAAM,mBAAmB,kBAAkB,MAAM;AAErE,2BAAyB,WAAW;AAIpC,aAAW,cAAc,aAAa;AAC7B,WAAA,OAAO,IAAI,WAAW,OAAO;AAAA,EACtC;AACF;AAMA,MAAM,2BAA2B,OAAO,WAA6B;AAC/D,MAAA;AACI,UAAA,uBAAuB,SAAS,QAAQ,EAAE,QAAQ,MAAM,YAAY,OAAO;AAAA,WAC1E,OAAO;AACd,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AACF;AAMA,MAAM,2BAA2B,CAAC,gBAA2C;AAC3E,QAAM,qBAAqB,oBAAoB,OAAO,CAAC,SAAS;AAC9D,WAAO,YAAY,UAAU,CAAC,QAAQ,IAAI,SAAS,IAAI,MAAM;AAAA,EAAA,CAC9D;AAEG,MAAA,mBAAmB,SAAS,GAAG;AACjC,UAAM,IAAI;AAAA,MACR,kFAAkF,mBAAmB;AAAA,QACnG;AAAA,MACD,CAAA;AAAA,IAAA;AAAA,EAEL;AACF;"}