UNPKG

signalk-server

Version:

An implementation of a [Signal K](http://signalk.org) server for boats.

84 lines (83 loc) 3.12 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.mountSwaggerUi = mountSwaggerUi; const swagger_ui_express_1 = __importDefault(require("swagger-ui-express")); const constants_1 = require("../constants"); const openApi_1 = require("./course/openApi"); const openApi_2 = require("./notifications/openApi"); const openApi_3 = require("./resources/openApi"); const openApi_4 = require("./autopilot/openApi"); const openApi_5 = require("./security/openApi"); const openApi_6 = require("./discovery/openApi"); const openApi_7 = require("./weather/openApi"); const openApi_8 = require("./apps/openApi"); const openApi_9 = require("./history/openApi"); const apiDocs = [ openApi_6.discoveryApiRecord, openApi_8.appsApiRecord, openApi_4.autopilotApiRecord, openApi_1.courseApiRecord, openApi_2.notificationsApiRecord, openApi_3.resourcesApiRecord, openApi_7.weatherApiRecord, openApi_5.securityApiRecord, openApi_9.historyApiRecord ].reduce((acc, apiRecord) => { acc[apiRecord.name] = apiRecord; return acc; }, {}); function mountSwaggerUi(app, path) { const allApiNames = () => Object.keys(apiDocs).concat(app.getPluginOpenApiRecords().map(({ name }) => name)); // custom middleware to re-setup swaggerUI, because plugins have // not been loaded when this is called early in server startup sequence app.use(path, (req, res, next) => { swagger_ui_express_1.default.setup(undefined, { explorer: true, swaggerOptions: { urls: allApiNames().map((name) => ({ name, url: `${constants_1.SERVERROUTESPREFIX}/openapi/${name}` })) } }); next(); }); app.use(path, swagger_ui_express_1.default.serve, swagger_ui_express_1.default.setup(undefined, { explorer: true, swaggerOptions: { urls: Object.keys(apiDocs).map((name) => ({ name, url: `${constants_1.SERVERROUTESPREFIX}/openapi/${name}` })) } })); const apiDefinitionHandler = (req, res) => { let apiRecord; if (req.params.api) { apiRecord = apiDocs[req.params.api]; } else if (req.params.pluginId) { apiRecord = app.getPluginOpenApi(req.params.pluginId); } const apiDoc = apiRecord?.apiDoc; const apiPath = apiRecord?.path; if (apiDoc && apiPath !== undefined) { ; apiDoc.servers = apiDoc.servers ?? [ { url: `${apiPath}` } ]; res.json(apiDoc); } else { res.status(404); res.json('Not found'); } }; app.get(`${constants_1.SERVERROUTESPREFIX}/openapi/plugins/:pluginId`, apiDefinitionHandler); app.get(`${constants_1.SERVERROUTESPREFIX}/openapi/:api`, apiDefinitionHandler); }