import { validationMetadatasToSchemas } from "class-validator-jsonschema"; import { Application } from "express"; import { getMetadataArgsStorage } from "routing-controllers"; import { routingControllersToSpec } from "routing-controllers-openapi"; import * as swaggerUiExpress from "swagger-ui-express"; /** * Loader for everything openapi related - from creating the schema to serving it via a static route. */ export default async (app: Application) => { const storage = getMetadataArgsStorage(); const schemas = validationMetadatasToSchemas({ refPointerPrefix: "#/components/schemas/", }); //Spec creation based on the previously created schemas const spec = routingControllersToSpec( storage, { routePrefix: "/api" }, { components: { schemas, "securitySchemes": { "AuthToken": { "type": "http", "scheme": "bearer", "bearerFormat": "JWT" } } }, info: { description: "The the backend API for the LfK! runner system.", title: "LfK! Backend API", version: "1.0.0", }, } ); //Options for swaggerUiExpress const options = { explorer: true, }; app.use( "/api/docs", swaggerUiExpress.serve, swaggerUiExpress.setup(spec, options) ); app.get(["/api/openapi.json", "/api/swagger.json"], (req, res) => { res.json(spec); }); return app; };