{"version":3,"file":"index.mjs","sources":["../../../src/services/server/index.ts"],"sourcesContent":["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"],"names":["healthCheck","ctx","set","status","createServer","strapi","app","createKoaApp","proxy","config","get","keys","use","next","requestCtx","run","router","Router","routeManager","createRouteManager","httpServer","createHTTPServer","apis","createContentAPI","admin","createAdminAPI","all","state","mounted","api","name","args","routes","Array","isArray","type","Error","Object","addRoutes","mount","values","forEach","allowedMethods","initRouting","registerAllRoutes","initMiddlewares","registerApplicationMiddlewares","listRoutes","stack","listen","destroy"],"mappings":"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"}