summary refs log tree commit diff
diff options
context:
space:
mode:
authorMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2023-03-25 19:24:00 +1100
committerMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2023-03-25 19:24:00 +1100
commitb272c56d1a3dd84fcbbd27db1bf61a03c3b3ca5d (patch)
tree64a559339de1ea93f55001f594165a503662ff79
parentMerge branch 'master' of github.com:fosscord/fosscord-server (diff)
downloadserver-b272c56d1a3dd84fcbbd27db1bf61a03c3b3ca5d.tar.xz
Ajv and openapi spec use different versions of typescript json schema??????
-rw-r--r--assets/openapi.json14
-rw-r--r--assets/schemas.json20
-rw-r--r--scripts/openapi.js42
-rw-r--r--scripts/schema.js36
4 files changed, 74 insertions, 38 deletions
diff --git a/assets/openapi.json b/assets/openapi.json
index 069eaced..7e1f3cac 100644
--- a/assets/openapi.json
+++ b/assets/openapi.json
@@ -20,15 +20,13 @@
         }
     },
     "components": {
-        "securitySchemes": [
-            {
-                "bearer": {
-                    "type": "http",
-                    "scheme": "bearer",
-                    "description": "Bearer/Bot prefixes are not required."
-                }
+        "securitySchemes": {
+            "bearer": {
+                "type": "http",
+                "scheme": "bearer",
+                "description": "Bearer/Bot prefixes are not required."
             }
-        ],
+        },
         "schemas": {
             "SelectProtocolSchema": {
                 "type": "object",
diff --git a/assets/schemas.json b/assets/schemas.json
index a0c6d173..3c7e60a8 100644
--- a/assets/schemas.json
+++ b/assets/schemas.json
@@ -26292,8 +26292,14 @@
                 "type": "boolean"
             },
             "mute_config": {
-                "nullable": true,
-                "$ref": "#/definitions/MuteConfig"
+                "anyOf": [
+                    {
+                        "$ref": "#/definitions/MuteConfig"
+                    },
+                    {
+                        "type": "null"
+                    }
+                ]
             },
             "muted": {
                 "type": "boolean"
@@ -28417,8 +28423,14 @@
                 "type": "boolean"
             },
             "custom_status": {
-                "nullable": true,
-                "$ref": "#/definitions/CustomStatus"
+                "anyOf": [
+                    {
+                        "$ref": "#/definitions/CustomStatus"
+                    },
+                    {
+                        "type": "null"
+                    }
+                ]
             },
             "default_guilds_restricted": {
                 "type": "boolean"
diff --git a/scripts/openapi.js b/scripts/openapi.js
index 86297967..889a68cb 100644
--- a/scripts/openapi.js
+++ b/scripts/openapi.js
@@ -16,6 +16,8 @@
 	along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
 
+/* eslint-env node */
+
 require("module-alias/register");
 const getRouteDescriptions = require("./util/getRouteDescriptions");
 const path = require("path");
@@ -27,7 +29,31 @@ require("missing-native-js-functions");
 
 const openapiPath = path.join(__dirname, "..", "assets", "openapi.json");
 const SchemaPath = path.join(__dirname, "..", "assets", "schemas.json");
-const schemas = JSON.parse(fs.readFileSync(SchemaPath, { encoding: "utf8" }));
+let schemas = JSON.parse(fs.readFileSync(SchemaPath, { encoding: "utf8" }));
+
+for (var schema in schemas) {
+	const part = schemas[schema];
+	for (var key in part.properties) {
+		if (part.properties[key].anyOf) {
+			const nullIndex = part.properties[key].anyOf.findIndex(
+				(x) => x.type == "null",
+			);
+			if (nullIndex != -1) {
+				part.properties[key].nullable = true;
+				part.properties[key].anyOf.splice(nullIndex, 1);
+
+				if (part.properties[key].anyOf.length == 1) {
+					Object.assign(
+						part.properties[key],
+						part.properties[key].anyOf[0],
+					);
+					delete part.properties[key].anyOf;
+				}
+			}
+		}
+	}
+}
+
 const specification = JSON.parse(
 	fs.readFileSync(openapiPath, { encoding: "utf8" }),
 );
@@ -85,15 +111,13 @@ function apiRoutes() {
 		.map((x) => ({ name: x }));
 
 	specification.components = specification.components || {};
-	specification.components.securitySchemes = [
-		{
-			bearer: {
-				type: "http",
-				scheme: "bearer",
-				description: "Bearer/Bot prefixes are not required.",
-			},
+	specification.components.securitySchemes = {
+		bearer: {
+			type: "http",
+			scheme: "bearer",
+			description: "Bearer/Bot prefixes are not required.",
 		},
-	];
+	};
 
 	routes.forEach((route, pathAndMethod) => {
 		const [p, method] = pathAndMethod.split("|");
diff --git a/scripts/schema.js b/scripts/schema.js
index bd0f73d3..ae4b525a 100644
--- a/scripts/schema.js
+++ b/scripts/schema.js
@@ -20,6 +20,8 @@
 	Regenerates the `fosscord-server/assets/schemas.json` file, used for API/Gateway input validation.
 */
 
+/* eslint-env node */
+
 const path = require("path");
 const fs = require("fs");
 const TJS = require("typescript-json-schema");
@@ -110,23 +112,23 @@ function main() {
 					continue;
 				}
 
-				if (part.properties[key].anyOf) {
-					const nullIndex = part.properties[key].anyOf.findIndex(
-						(x) => x.type == "null",
-					);
-					if (nullIndex != -1) {
-						part.properties[key].nullable = true;
-						part.properties[key].anyOf.splice(nullIndex, 1);
-
-						if (part.properties[key].anyOf.length == 1) {
-							Object.assign(
-								part.properties[key],
-								part.properties[key].anyOf[0],
-							);
-							delete part.properties[key].anyOf;
-						}
-					}
-				}
+				// if (part.properties[key].anyOf) {
+				// 	const nullIndex = part.properties[key].anyOf.findIndex(
+				// 		(x) => x.type == "null",
+				// 	);
+				// 	if (nullIndex != -1) {
+				// 		part.properties[key].nullable = true;
+				// 		part.properties[key].anyOf.splice(nullIndex, 1);
+
+				// 		if (part.properties[key].anyOf.length == 1) {
+				// 			Object.assign(
+				// 				part.properties[key],
+				// 				part.properties[key].anyOf[0],
+				// 			);
+				// 			delete part.properties[key].anyOf;
+				// 		}
+				// 	}
+				// }
 			}
 		}