const fs = require("fs"); const path = require("path"); const swaggerUi = require("swagger-ui-express"); function faviconUrl() { return process.env.NODE_ENV === "production" ? "/public/favicon.png" : "http://localhost:3000/public/favicon.png"; } function useSwagger(app) { if (process.env.DISABLE_SWAGGER_DOCS === "true") { console.log( `\x1b[33m[SWAGGER DISABLED]\x1b[0m Swagger documentation is disabled via DISABLE_SWAGGER_DOCS environment variable.` ); return; } app.use("/api/docs", swaggerUi.serve); const options = { customCss: [ fs.readFileSync(path.resolve(__dirname, "index.css")), fs.readFileSync(path.resolve(__dirname, "dark-swagger.css")), ].join("\n\n\n"), customSiteTitle: "AnythingLLM Developer API Documentation", customfavIcon: faviconUrl(), }; if (process.env.NODE_ENV === "production") { const swaggerDocument = require("./openapi.json"); app.get( "/api/docs", swaggerUi.setup(swaggerDocument, { ...options, customJsStr: 'window.SWAGGER_DOCS_ENV = "production";\n\n' + fs.readFileSync(path.resolve(__dirname, "index.js"), "utf8"), }) ); } else { // we regenerate the html page only in development mode to ensure it is up-to-date when the code is hot-reloaded. app.get("/api/docs", async (_, response) => { // #swagger.ignore = true const swaggerDocument = require("./openapi.json"); return response.send( swaggerUi.generateHTML(swaggerDocument, { ...options, customJsStr: 'window.SWAGGER_DOCS_ENV = "development";\n\n' + fs.readFileSync(path.resolve(__dirname, "index.js"), "utf8"), }) ); }); } } module.exports = { faviconUrl, useSwagger };