69 lines
2.5 KiB
TypeScript
69 lines
2.5 KiB
TypeScript
import { validationMetadatasToSchemas } from 'class-validator-jsonschema';
|
|
import consola from "consola";
|
|
import fs from "fs";
|
|
import "reflect-metadata";
|
|
import { createExpressServer, getMetadataArgsStorage } from "routing-controllers";
|
|
import { routingControllersToSpec } from 'routing-controllers-openapi';
|
|
import { config } from '../src/config';
|
|
import authchecker from "../src/middlewares/authchecker";
|
|
import { ErrorHandler } from '../src/middlewares/ErrorHandler';
|
|
|
|
const CONTROLLERS_FILE_EXTENSION = process.env.NODE_ENV === 'production' ? 'js' : 'ts';
|
|
createExpressServer({
|
|
authorizationChecker: authchecker,
|
|
middlewares: [ErrorHandler],
|
|
development: config.development,
|
|
cors: true,
|
|
routePrefix: "/api",
|
|
controllers: [`${__dirname}/../src/controllers/*.${CONTROLLERS_FILE_EXTENSION}`],
|
|
});
|
|
|
|
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."
|
|
},
|
|
"StatsApiToken": {
|
|
"type": "http",
|
|
"scheme": "bearer",
|
|
description: "Api token that can be obtained by creating a new stats client (post to /api/statsclients)."
|
|
}
|
|
}
|
|
},
|
|
info: {
|
|
description: "The the backend API for the LfK! runner system.",
|
|
title: "LfK! Backend API",
|
|
version: "0.0.8",
|
|
},
|
|
}
|
|
);
|
|
|
|
try {
|
|
fs.writeFileSync("./openapi.json", JSON.stringify(spec), { encoding: "utf-8" });
|
|
consola.success("Exported openapi spec to openapi.json");
|
|
} catch (error) {
|
|
consola.error("Couldn't export the openapi spec");
|
|
}
|