diff --git a/assets/openapi.json b/assets/openapi.json index 92847d12..069eaced 100644 Binary files a/assets/openapi.json and b/assets/openapi.json differ diff --git a/assets/schemas.json b/assets/schemas.json index 1fdfa361..a0c6d173 100644 Binary files a/assets/schemas.json and b/assets/schemas.json differ diff --git a/scripts/openapi.js b/scripts/openapi.js index f280eba4..86297967 100644 --- a/scripts/openapi.js +++ b/scripts/openapi.js @@ -85,13 +85,15 @@ 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("|"); @@ -109,7 +111,7 @@ function apiRoutes() { return x.test(path); }) ) { - obj.security = [{ bearer: true }]; + obj.security = [{ bearer: [] }]; } if (route.body) { diff --git a/scripts/schema.js b/scripts/schema.js index be1a7a3f..bd0f73d3 100644 --- a/scripts/schema.js +++ b/scripts/schema.js @@ -91,9 +91,9 @@ function main() { if (!part) continue; // this is a hack. want some want to check if its a @column, instead - if (part.properties) - Object.keys(part.properties) - .filter((key) => + if (part.properties) { + for (let key in part.properties) { + if ( [ // BaseClass methods "toJSON", @@ -104,9 +104,31 @@ function main() { "recover", "reload", "assign", - ].includes(key), - ) - .forEach((key) => delete part.properties[key]); + ].includes(key) + ) { + delete part.properties[key]; + 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; + } + } + } + } + } definitions = { ...definitions, [name]: { ...part } }; } diff --git a/src/api/routes/gateway/bot.ts b/src/api/routes/gateway/bot.ts index 070debe3..02049b19 100644 --- a/src/api/routes/gateway/bot.ts +++ b/src/api/routes/gateway/bot.ts @@ -22,17 +22,6 @@ import { route, RouteOptions } from "@fosscord/api"; const router = Router(); -export interface GatewayBotResponse { - url: string; - shards: number; - session_start_limit: { - total: number; - remaining: number; - reset_after: number; - max_concurrency: number; - }; -} - const options: RouteOptions = { test: { response: { diff --git a/src/api/routes/gateway/index.ts b/src/api/routes/gateway/index.ts index e6fcf5e3..f5ed4c1f 100644 --- a/src/api/routes/gateway/index.ts +++ b/src/api/routes/gateway/index.ts @@ -22,10 +22,6 @@ import { route, RouteOptions } from "@fosscord/api"; const router = Router(); -export interface GatewayResponse { - url: string; -} - const options: RouteOptions = { test: { response: { diff --git a/src/api/routes/users/#id/profile.ts b/src/api/routes/users/#id/profile.ts index dbf95a52..92b4a0fc 100644 --- a/src/api/routes/users/#id/profile.ts +++ b/src/api/routes/users/#id/profile.ts @@ -18,9 +18,7 @@ import { Router, Request, Response } from "express"; import { - PublicConnectedAccount, User, - UserPublic, Member, UserProfileModifySchema, handleFile, @@ -32,13 +30,6 @@ import { route } from "@fosscord/api"; const router: Router = Router(); -export interface UserProfileResponse { - user: UserPublic; - connected_accounts: PublicConnectedAccount; - premium_guild_since?: Date; - premium_since?: Date; -} - router.get( "/", route({ test: { response: { body: "UserProfileResponse" } } }), diff --git a/src/api/routes/users/#id/relationships.ts b/src/api/routes/users/#id/relationships.ts index e915e3ff..04a407b7 100644 --- a/src/api/routes/users/#id/relationships.ts +++ b/src/api/routes/users/#id/relationships.ts @@ -22,16 +22,6 @@ import { route } from "@fosscord/api"; const router: Router = Router(); -export interface UserRelationsResponse { - object: { - id?: string; - username?: string; - avatar?: string; - discriminator?: string; - public_flags?: number; - }; -} - router.get( "/", route({ test: { response: { body: "UserRelationsResponse" } } }), diff --git a/src/util/entities/User.ts b/src/util/entities/User.ts index f99a85e7..8dfb0254 100644 --- a/src/util/entities/User.ts +++ b/src/util/entities/User.ts @@ -111,7 +111,7 @@ export class User extends BaseClass { banner?: string; // hash of the user banner @Column({ nullable: true, type: "simple-array" }) - theme_colors?: number[]; // TODO: Separate `User` and `UserProfile` models + theme_colors?: [number, number]; // TODO: Separate `User` and `UserProfile` models @Column({ nullable: true }) pronouns?: string; diff --git a/src/util/schemas/GatewayBotResponse.ts b/src/util/schemas/GatewayBotResponse.ts new file mode 100644 index 00000000..30f1f57f --- /dev/null +++ b/src/util/schemas/GatewayBotResponse.ts @@ -0,0 +1,10 @@ +export interface GatewayBotResponse { + url: string; + shards: number; + session_start_limit: { + total: number; + remaining: number; + reset_after: number; + max_concurrency: number; + }; +} diff --git a/src/util/schemas/GatewayResponse.ts b/src/util/schemas/GatewayResponse.ts new file mode 100644 index 00000000..e909f7bd --- /dev/null +++ b/src/util/schemas/GatewayResponse.ts @@ -0,0 +1,3 @@ +export interface GatewayResponse { + url: string; +} diff --git a/src/util/schemas/UserProfileResponse.ts b/src/util/schemas/UserProfileResponse.ts new file mode 100644 index 00000000..467d787f --- /dev/null +++ b/src/util/schemas/UserProfileResponse.ts @@ -0,0 +1,8 @@ +import { PublicConnectedAccount, UserPublic } from ".."; + +export interface UserProfileResponse { + user: UserPublic; + connected_accounts: PublicConnectedAccount; + premium_guild_since?: Date; + premium_since?: Date; +} diff --git a/src/util/schemas/UserRelationsResponse.ts b/src/util/schemas/UserRelationsResponse.ts new file mode 100644 index 00000000..1ec15eca --- /dev/null +++ b/src/util/schemas/UserRelationsResponse.ts @@ -0,0 +1,9 @@ +export interface UserRelationsResponse { + object: { + id?: string; + username?: string; + avatar?: string; + discriminator?: string; + public_flags?: number; + }; +} diff --git a/src/util/schemas/index.ts b/src/util/schemas/index.ts index 44909a3a..150a2dea 100644 --- a/src/util/schemas/index.ts +++ b/src/util/schemas/index.ts @@ -76,3 +76,7 @@ export * from "./VoiceVideoSchema"; export * from "./WebAuthnSchema"; export * from "./WebhookCreateSchema"; export * from "./WidgetModifySchema"; +export * from "./UserRelationsResponse"; +export * from "./GatewayResponse"; +export * from "./GatewayBotResponse"; +export * from "./UserProfileResponse";