{"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":["defaultConfig","requiredMiddlewares","middlewareConfigSchema","yup","array","of","lazy","value","string","required","object","name","resolve","config","mixed","noUnknown","test","registerApplicationMiddlewares","strapi","middlewareConfig","get","validateMiddlewareConfig","middlewares","resolveMiddlewares","checkRequiredMiddlewares","middleware","server","use","handler","validate","strict","abortEarly","error","Error","missingMiddlewares","filter","findIndex","mdl","length","join"],"mappings":";;;AAMA,MAAMA,aAAAA,GAAgB;AACpB,IAAA,gBAAA;AACA,IAAA,gBAAA;AACA,IAAA,kBAAA;AACA,IAAA,cAAA;AACA,IAAA,mBAAA;AACA,IAAA,iBAAA;AACA,IAAA,eAAA;AACA,IAAA,cAAA;AACA,IAAA,iBAAA;AACA,IAAA;AACD,CAAA;AAED,MAAMC,mBAAAA,GAAsB;AAC1B,IAAA,gBAAA;AACA,IAAA,kBAAA;AACA,IAAA,cAAA;AACA,IAAA,eAAA;AACA,IAAA,cAAA;AACA,IAAA,gBAAA;AACA,IAAA;AACD,CAAA;AAED,MAAMC,sBAAAA,GAAyBC,IAAIC,KAAK,EAAA,CAAGC,EAAE,CAC3CF,GAAAA,CAAIG,IAAI,CAAC,CAACC,KAAAA,GAAAA;IACR,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAOJ,GAAAA,CAAIK,MAAM,EAAA,CAAGC,QAAQ,EAAA;AAC9B,IAAA;IAEA,IAAI,OAAOF,UAAU,QAAA,EAAU;QAC7B,OAAOJ,GAAAA,CACJO,MAAM,CAAC;AACNC,YAAAA,IAAAA,EAAMR,IAAIK,MAAM,EAAA;AAChBI,YAAAA,OAAAA,EAAST,IAAIK,MAAM,EAAA;AACnBK,YAAAA,MAAAA,EAAQV,IAAIW,KAAK;SACnB,CAAA,CACCL,QAAQ,GACRM,SAAS,EAAA;AACd,IAAA;AAEA,IAAA,OAAOZ,GAAAA,CAAIW,KAAK,EAAA,CAAGE,IAAI,CAAC,IAAM,KAAA,CAAA;AAChC,CAAA,CAAA,CAAA;AAGF;;IAGA,MAAMC,iCAAiC,OAAOC,MAAAA,GAAAA;AAC5C,IAAA,MAAMC,mBAAqCD,MAAAA,CAAOL,MAAM,CAACO,GAAG,CAAC,aAAA,EAAepB,aAAAA,CAAAA;AAE5E,IAAA,MAAMqB,wBAAAA,CAAyBF,gBAAAA,CAAAA;IAE/B,MAAMG,WAAAA,GAAc,MAAMC,kBAAAA,CAAmBJ,gBAAAA,EAAkBD,MAAAA,CAAAA;IAE/DM,wBAAAA,CAAyBF,WAAAA,CAAAA;;;IAIzB,KAAK,MAAMG,cAAcH,WAAAA,CAAa;AACpCJ,QAAAA,MAAAA,CAAOQ,MAAM,CAACC,GAAG,CAACF,WAAWG,OAAO,CAAA;AACtC,IAAA;AACF;AAEA;;;IAIA,MAAMP,2BAA2B,OAAOR,MAAAA,GAAAA;IACtC,IAAI;QACF,MAAMX,sBAAAA,CAAuB2B,QAAQ,CAAChB,MAAAA,EAAQ;YAAEiB,MAAAA,EAAQ,IAAA;YAAMC,UAAAA,EAAY;AAAM,SAAA,CAAA;AAClF,IAAA,CAAA,CAAE,OAAOC,KAAAA,EAAO;AACd,QAAA,MAAM,IAAIC,KAAAA,CACR,yGAAA,CAAA;AAEJ,IAAA;AACF,CAAA;AAEA;;;IAIA,MAAMT,2BAA2B,CAACF,WAAAA,GAAAA;AAChC,IAAA,MAAMY,kBAAAA,GAAqBjC,mBAAAA,CAAoBkC,MAAM,CAAC,CAACxB,IAAAA,GAAAA;QACrD,OAAOW,WAAAA,CAAYc,SAAS,CAAC,CAACC,MAAQA,GAAAA,CAAI1B,IAAI,KAAKA,IAAAA,CAAAA,KAAU,EAAC;AAChE,IAAA,CAAA,CAAA;IAEA,IAAIuB,kBAAAA,CAAmBI,MAAM,GAAG,CAAA,EAAG;QACjC,MAAM,IAAIL,KAAAA,CACR,CAAC,+EAA+E,EAAEC,mBAAmBK,IAAI,CACvG,IAAA,CAAA,CACA,EAAE,CAAC,CAAA;AAET,IAAA;AACF,CAAA;;;;"}