63 lines
1.9 KiB
TypeScript
63 lines
1.9 KiB
TypeScript
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 and swaggerUiExpress.
|
|
* All auth schema related stuff also has to be configured here
|
|
*/
|
|
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",
|
|
description: "A JWT based access token. Use /api/auth/login or /api/auth/refresh to get one."
|
|
},
|
|
"RefreshTokenCookie": {
|
|
"type": "apiKey",
|
|
"in": "cookie",
|
|
"name": "lfk_backend__refresh_token",
|
|
description: "A cookie containing a JWT based refreh token. Attention: Doesn't work in swagger-ui. Use /api/auth/login or /api/auth/refresh to get one."
|
|
}
|
|
}
|
|
},
|
|
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;
|
|
};
|