summary refs log tree commit diff
path: root/scripts/openapi_missing.js
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-10-16 09:39:21 +0200
committerRory& <root@rory.gay>2025-10-16 09:39:21 +0200
commit157cd64a665873d3a36905c0b9ea1705f8d5891d (patch)
tree36c4b07f25b7e57f6905479cff0490f421847e25 /scripts/openapi_missing.js
parentImplement applications/@me (diff)
downloadserver-ts-dev/openapi-improvements.tar.xz
Diffstat (limited to 'scripts/openapi_missing.js')
-rw-r--r--scripts/openapi_missing.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/scripts/openapi_missing.js b/scripts/openapi_missing.js
new file mode 100644

index 000000000..e5cb81d1d --- /dev/null +++ b/scripts/openapi_missing.js
@@ -0,0 +1,69 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2023 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. +*/ + +require("module-alias/register"); +const path = require("path"); +const fs = require("fs"); +require("../dist/util/util/extensions"); + +const openapiPath = path.join(__dirname, "..", "assets", "openapi.json"); +const openapiPathOut = path.join(__dirname, "..", "dist", "openapi_missing.json"); +const SchemaPath = path.join(__dirname, "..", "assets", "schemas.json"); +const sbOpenApi = JSON.parse(fs.readFileSync(SchemaPath, { encoding: "utf8" })); + +async function main() { + console.log("Generating OpenAPI Specification..."); + + const routesRes = await fetch( + "https://raw.githubusercontent.com/discord/discord-api-spec/refs/heads/main/specs/openapi_preview.json", + { + headers: { + Accept: "application/json", + }, + }, + ); + const dOpenApi = await routesRes.json(); + for (const path in dOpenApi.paths) { + if (!sbOpenApi.paths[path]) { + console.log("Missing path:", path); + continue; + } + + for (const method in dOpenApi.paths[path]) { + if(sbOpenApi.paths?.[path]?.[method]) delete sbOpenApi.paths[path][method]; + } + if(Object.keys(sbOpenApi.paths?.[path]||{}).length === 0) delete sbOpenApi.paths[path]; + } + + + + fs.writeFileSync( + openapiPathOut, + JSON.stringify(dOpenApi, null, 4) + ); + console.log("Wrote OpenAPI specification to", openapiPathOut); + console.log( + "Specification contains", + Object.keys(specification.paths).length, + "paths and", + Object.keys(specification.components.schemas).length, + "schemas.", + ); +} + +main();