mirror of
https://github.com/spacebarchat/server.git
synced 2026-03-29 18:29:52 +00:00
Make openapi.js work offline - still needs conditionals fixed though
This commit is contained in:
Binary file not shown.
@@ -18,6 +18,7 @@ let
|
||||
./tsconfig.json
|
||||
./assets
|
||||
./patches
|
||||
./scripts
|
||||
]
|
||||
)
|
||||
);
|
||||
@@ -41,7 +42,7 @@ pkgs.buildNpmPackage {
|
||||
npmDeps = pkgs.importNpmLock { npmRoot = filteredSrc; };
|
||||
npmConfigHook = pkgs.importNpmLock.npmConfigHook;
|
||||
|
||||
npmBuildScript = "build:src:tsgo";
|
||||
npmBuildScript = "build:tsgo";
|
||||
makeCacheWritable = true;
|
||||
nativeBuildInputs = with pkgs; [
|
||||
(pkgs.python3.withPackages (ps: with ps; [ setuptools ]))
|
||||
@@ -64,6 +65,7 @@ pkgs.buildNpmPackage {
|
||||
# remove packages not needed for production, or at least try to...
|
||||
npm prune --omit dev --no-save $npmInstallFlags "''${npmInstallFlagsArray[@]}" $npmFlags "''${npmFlagsArray[@]}"
|
||||
rm -v dist/src.tsbuildinfo
|
||||
rm -rv scripts
|
||||
time ${./nix/trimNodeModules.sh}
|
||||
|
||||
# Copy outputs
|
||||
|
||||
@@ -213,7 +213,7 @@ function apiRoutes(missingRoutes) {
|
||||
|
||||
obj.tags = [...new Set([...(obj.tags || []), getTag(p)])];
|
||||
|
||||
if (missingRoutes.additional.includes(path.replace(/\/$/, ""))) {
|
||||
if (route.spacebarOnly === true || missingRoutes?.additional.includes(path.replace(/\/$/, ""))) {
|
||||
obj["x-badges"] = [
|
||||
{
|
||||
label: "Spacebar-only",
|
||||
@@ -231,12 +231,13 @@ function apiRoutes(missingRoutes) {
|
||||
async function main() {
|
||||
console.log("Generating OpenAPI Specification...");
|
||||
|
||||
const routesRes = await fetch("https://github.com/spacebarchat/missing-routes/raw/main/missing.json", {
|
||||
headers: {
|
||||
Accept: "application/json",
|
||||
},
|
||||
});
|
||||
const missingRoutes = await routesRes.json();
|
||||
// const routesRes = await fetch("https://github.com/spacebarchat/missing-routes/raw/main/missing.json", {
|
||||
// headers: {
|
||||
// Accept: "application/json",
|
||||
// },
|
||||
// });
|
||||
// const missingRoutes = await routesRes.json();
|
||||
let missingRoutes = undefined;
|
||||
|
||||
combineSchemas(schemas);
|
||||
apiRoutes(missingRoutes);
|
||||
|
||||
@@ -22,7 +22,7 @@ import { getDatabase } from "@spacebar/util";
|
||||
|
||||
const router = Router({ mergeParams: true });
|
||||
|
||||
router.get("/", route({ deprecated: true }), (req: Request, res: Response) => {
|
||||
router.get("/", route({ deprecated: true, spacebarOnly: true }), (req: Request, res: Response) => {
|
||||
if (!getDatabase()) return res.sendStatus(503);
|
||||
|
||||
return res.sendStatus(200);
|
||||
|
||||
@@ -22,7 +22,7 @@ import { getDatabase } from "@spacebar/util";
|
||||
|
||||
const router = Router({ mergeParams: true });
|
||||
|
||||
router.get("/", route({ deprecated: true }), (req: Request, res: Response) => {
|
||||
router.get("/", route({ deprecated: true, spacebarOnly: true }), (req: Request, res: Response) => {
|
||||
if (!getDatabase()) return res.sendStatus(503);
|
||||
|
||||
return res.sendStatus(200);
|
||||
|
||||
@@ -34,6 +34,7 @@ router.get(
|
||||
body: "ApplicationDetectableResponse",
|
||||
},
|
||||
},
|
||||
spacebarOnly: false, // not part of public openapi
|
||||
}),
|
||||
async (req: Request, res: Response) => {
|
||||
// cache for 6 hours
|
||||
|
||||
@@ -20,10 +20,17 @@ import { createHash } from "node:crypto";
|
||||
import { Snowflake } from "@spacebar/util";
|
||||
import { Request, Response, Router } from "express";
|
||||
const router = Router({ mergeParams: true });
|
||||
router.post("/", route({ responses: { 200: { body: "CreateFingerprintResponse" } } }), (req: Request, res: Response) => {
|
||||
const snowflake = Snowflake.generate();
|
||||
return res.json({
|
||||
fingerprint: `${snowflake}.${createHash("sha512").update(snowflake).digest("base64")}`,
|
||||
});
|
||||
});
|
||||
router.post(
|
||||
"/",
|
||||
route({
|
||||
responses: { 200: { body: "CreateFingerprintResponse" } },
|
||||
spacebarOnly: false, // not part of public openapi
|
||||
}),
|
||||
(req: Request, res: Response) => {
|
||||
const snowflake = Snowflake.generate();
|
||||
return res.json({
|
||||
fingerprint: `${snowflake}.${createHash("sha512").update(snowflake).digest("base64")}`,
|
||||
});
|
||||
},
|
||||
);
|
||||
export default router;
|
||||
|
||||
@@ -38,6 +38,7 @@ router.get(
|
||||
},
|
||||
right: "CREATE_REGISTRATION_TOKENS",
|
||||
responses: { 200: { body: "GenerateRegistrationTokensResponse" } },
|
||||
spacebarOnly: true,
|
||||
}),
|
||||
async (req: Request, res: Response) => {
|
||||
const count = req.query.count ? parseInt(req.query.count as string) : 1;
|
||||
|
||||
@@ -36,6 +36,7 @@ router.post(
|
||||
body: "APIErrorResponse",
|
||||
},
|
||||
},
|
||||
spacebarOnly: false, // not part of public openapi
|
||||
}),
|
||||
async (req: Request, res: Response) => {
|
||||
// const { code, ticket, gift_code_sku_id, login_source } =
|
||||
|
||||
@@ -41,6 +41,7 @@ router.post(
|
||||
200: { body: "TokenResponse" },
|
||||
400: { body: "APIErrorResponse" },
|
||||
},
|
||||
spacebarOnly: false, // not part of public openapi
|
||||
}),
|
||||
async (req: Request, res: Response) => {
|
||||
if (!WebAuthn.fido2) {
|
||||
|
||||
@@ -30,6 +30,7 @@ router.get(
|
||||
body: "WhoAmIResponse",
|
||||
},
|
||||
},
|
||||
spacebarOnly: true,
|
||||
}),
|
||||
/*
|
||||
interface Request {
|
||||
|
||||
@@ -28,6 +28,7 @@ router.post(
|
||||
responses: {
|
||||
204: {},
|
||||
},
|
||||
spacebarOnly: false, // Not part of public openapi
|
||||
}),
|
||||
(req: Request, res: Response) => {
|
||||
// TODO:
|
||||
|
||||
@@ -32,6 +32,7 @@ router.get(
|
||||
body: "GuildRecommendationsResponse",
|
||||
},
|
||||
},
|
||||
spacebarOnly: false, // Not part of public openapi schema
|
||||
}),
|
||||
async (req: Request, res: Response) => {
|
||||
// const { limit, personalization_disabled } = req.query;
|
||||
|
||||
@@ -30,6 +30,7 @@ router.get(
|
||||
body: "InstancePingResponse",
|
||||
},
|
||||
},
|
||||
spacebarOnly: true,
|
||||
}),
|
||||
(req: Request, res: Response) => {
|
||||
const { general } = Config.get();
|
||||
|
||||
@@ -30,6 +30,7 @@ router.get(
|
||||
body: "Object",
|
||||
},
|
||||
},
|
||||
spacebarOnly: true,
|
||||
}),
|
||||
async (req: Request, res: Response) => {
|
||||
const general = Config.get();
|
||||
|
||||
@@ -29,6 +29,7 @@ router.get(
|
||||
body: "InstanceDomainsResponse",
|
||||
},
|
||||
},
|
||||
spacebarOnly: true,
|
||||
}),
|
||||
(req: Request, res: Response) => {
|
||||
const { cdn, gateway, api } = Config.get();
|
||||
|
||||
@@ -29,6 +29,7 @@ router.get(
|
||||
body: "APIGeneralConfiguration",
|
||||
},
|
||||
},
|
||||
spacebarOnly: true,
|
||||
}),
|
||||
(req: Request, res: Response) => {
|
||||
const { general } = Config.get();
|
||||
|
||||
@@ -29,6 +29,7 @@ router.get(
|
||||
body: "APILimitsConfiguration",
|
||||
},
|
||||
},
|
||||
spacebarOnly: true,
|
||||
}),
|
||||
(req: Request, res: Response) => {
|
||||
const { limits } = Config.get();
|
||||
|
||||
@@ -32,6 +32,7 @@ router.get(
|
||||
body: "APIErrorResponse",
|
||||
},
|
||||
},
|
||||
spacebarOnly: true,
|
||||
}),
|
||||
async (req: Request, res: Response) => {
|
||||
if (!Config.get().security.statsWorldReadable) {
|
||||
|
||||
@@ -57,6 +57,7 @@ for (const type of Object.values(ReportMenuTypeNames)) {
|
||||
},
|
||||
204: {},
|
||||
},
|
||||
spacebarOnly: false, // Maps to /reporting/menu/:id
|
||||
}),
|
||||
(req: Request, res: Response) => {
|
||||
// TODO: implement
|
||||
@@ -76,6 +77,7 @@ for (const type of Object.values(ReportMenuTypeNames)) {
|
||||
},
|
||||
204: {},
|
||||
},
|
||||
spacebarOnly: false, // Maps to /reporting/:id
|
||||
}),
|
||||
(req: Request, res: Response) => {
|
||||
// TODO: implement
|
||||
|
||||
@@ -20,11 +20,17 @@ import { Router, Request, Response } from "express";
|
||||
import { route } from "@spacebar/api";
|
||||
const router = Router({ mergeParams: true });
|
||||
|
||||
router.get("/", route({}), (req: Request, res: Response) => {
|
||||
res.json({
|
||||
page: {},
|
||||
scheduled_maintenances: {},
|
||||
});
|
||||
});
|
||||
router.get(
|
||||
"/",
|
||||
route({
|
||||
spacebarOnly: false, // not part of public openapi
|
||||
}),
|
||||
(req: Request, res: Response) => {
|
||||
res.json({
|
||||
page: {},
|
||||
scheduled_maintenances: {},
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
export default router;
|
||||
|
||||
@@ -21,9 +21,15 @@ import { route } from "@spacebar/api";
|
||||
|
||||
const router = Router({ mergeParams: true });
|
||||
|
||||
router.post("/", route({}), (req: Request, res: Response) => {
|
||||
// TODO:
|
||||
res.sendStatus(204);
|
||||
});
|
||||
router.post(
|
||||
"/",
|
||||
route({
|
||||
spacebarOnly: false, // Not part of the public OpenAPI schema
|
||||
}),
|
||||
(req: Request, res: Response) => {
|
||||
// TODO:
|
||||
res.sendStatus(204);
|
||||
},
|
||||
);
|
||||
|
||||
export default router;
|
||||
|
||||
@@ -40,6 +40,7 @@ router.get(
|
||||
description: "Whether to try to apply the settings update atomically (default false)",
|
||||
},
|
||||
},
|
||||
spacebarOnly: false, // maps to /users/@me/settings-proto/1
|
||||
}),
|
||||
async (req: Request, res: Response) => {
|
||||
const userSettings = await UserSettingsProtos.getOrDefault(req.user_id);
|
||||
@@ -59,6 +60,7 @@ router.patch(
|
||||
body: "SettingsProtoUpdateResponse",
|
||||
},
|
||||
},
|
||||
spacebarOnly: false, // maps to /users/@me/settings-proto/1
|
||||
}),
|
||||
async (req: Request, res: Response) => {
|
||||
const { settings, required_data_version } = req.body as SettingsProtoUpdateSchema;
|
||||
@@ -84,6 +86,7 @@ router.get(
|
||||
body: "SettingsProtoJsonResponse",
|
||||
},
|
||||
},
|
||||
spacebarOnly: true,
|
||||
}),
|
||||
async (req: Request, res: Response) => {
|
||||
const userSettings = await UserSettingsProtos.getOrDefault(req.user_id);
|
||||
@@ -109,6 +112,7 @@ router.patch(
|
||||
description: "Whether to try to apply the settings update atomically (default false)",
|
||||
},
|
||||
},
|
||||
spacebarOnly: true,
|
||||
}),
|
||||
async (req: Request, res: Response) => {
|
||||
const { settings, required_data_version } = req.body as SettingsProtoUpdateJsonSchema;
|
||||
|
||||
@@ -40,6 +40,7 @@ router.get(
|
||||
description: "Whether to try to apply the settings update atomically (default false)",
|
||||
},
|
||||
},
|
||||
spacebarOnly: false, // maps to /users/@me/settings-proto/2
|
||||
}),
|
||||
async (req: Request, res: Response) => {
|
||||
const userSettings = await UserSettingsProtos.getOrDefault(req.user_id);
|
||||
@@ -59,6 +60,7 @@ router.patch(
|
||||
body: "SettingsProtoUpdateResponse",
|
||||
},
|
||||
},
|
||||
spacebarOnly: false, // maps to /users/@me/settings-proto/2
|
||||
}),
|
||||
async (req: Request, res: Response) => {
|
||||
const { settings, required_data_version } = req.body as SettingsProtoUpdateSchema;
|
||||
@@ -84,6 +86,7 @@ router.get(
|
||||
body: "SettingsProtoJsonResponse",
|
||||
},
|
||||
},
|
||||
spacebarOnly: true,
|
||||
}),
|
||||
async (req: Request, res: Response) => {
|
||||
const userSettings = await UserSettingsProtos.getOrDefault(req.user_id);
|
||||
@@ -109,6 +112,7 @@ router.patch(
|
||||
description: "Whether to try to apply the settings update atomically (default false)",
|
||||
},
|
||||
},
|
||||
spacebarOnly: true,
|
||||
}),
|
||||
async (req: Request, res: Response) => {
|
||||
const { settings, required_data_version } = req.body as SettingsProtoUpdateJsonSchema;
|
||||
|
||||
@@ -64,6 +64,7 @@ export interface RouteOptions {
|
||||
};
|
||||
};
|
||||
deprecated?: boolean;
|
||||
spacebarOnly?: boolean;
|
||||
// test?: {
|
||||
// response?: RouteResponse;
|
||||
// body?: unknown;
|
||||
|
||||
Reference in New Issue
Block a user