Files
anything-llm/server/swagger/utils.js
Sean Hatfield 2e1c1ff891 Disable swagger docs endpoint with environment variable (#4665)
* add option to disable swagger docs via env

* update .example.env for docker and server

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>
2025-11-19 19:32:10 -08:00

58 lines
1.8 KiB
JavaScript

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 }