From 13bbf5dbd592ab9743c1c471c6fbdfd85630c15d Mon Sep 17 00:00:00 2001 From: Rory& Date: Thu, 4 Dec 2025 10:36:26 +0100 Subject: [PATCH] Remove fallback URIs, remove endpointClient, expose admin api --- src/api/Server.ts | 3 +++ src/api/routes/policies/instance/domains.ts | 22 +++++++------------ src/cdn/routes/attachments.ts | 2 +- src/cdn/routes/avatars.ts | 3 +-- src/cdn/routes/guild-profiles.ts | 2 +- src/cdn/routes/role-icons.ts | 3 +-- src/gateway/opcodes/Identify.ts | 2 +- .../responses/InstanceDomainsResponse.ts | 4 +++- src/util/config/Config.ts | 4 ++-- .../config/types/EndpointConfiguration.ts | 1 - src/util/config/types/GeneralConfiguration.ts | 3 +-- 11 files changed, 22 insertions(+), 27 deletions(-) diff --git a/src/api/Server.ts b/src/api/Server.ts index 133e9dbb6..62a51777d 100644 --- a/src/api/Server.ts +++ b/src/api/Server.ts @@ -158,6 +158,9 @@ export class SpacebarServer extends Server { baseUrl: Config.get().gateway.endpointPublic, encoding: [...(erlpackSupported ? ["etf"] : []), "json"], compression: ["zstd-stream", "zlib-stream", null], + }, + admin: Config.get().admin.endpointPublic === null ? undefined : { + baseUrl: Config.get().admin.endpointPublic } }); }); diff --git a/src/api/routes/policies/instance/domains.ts b/src/api/routes/policies/instance/domains.ts index a4cc0aa1b..967ac2f4c 100644 --- a/src/api/routes/policies/instance/domains.ts +++ b/src/api/routes/policies/instance/domains.ts @@ -33,20 +33,14 @@ router.get( async (req: Request, res: Response) => { const { cdn, gateway, api } = Config.get(); - const IdentityForm = { - cdn: - cdn.endpointPublic || - process.env.CDN || - "http://localhost:3001", - gateway: - gateway.endpointPublic || - process.env.GATEWAY || - "ws://localhost:3001", - defaultApiVersion: api.defaultVersion ?? 9, - apiEndpoint: api.endpointPublic ?? "http://localhost:3001/api/", - }; - - res.json(IdentityForm); + res.json({ + admin: Config.get().admin.endpointPublic, + api: Config.get().api.endpointPublic?.split("/api")[0] || "", // Transitional, see /.well-known/spacebar/client + apiEndpoint: api.endpointPublic, + cdn: cdn.endpointPublic, + defaultApiVersion: api.defaultVersion, + gateway: gateway.endpointPublic, + }); }, ); diff --git a/src/cdn/routes/attachments.ts b/src/cdn/routes/attachments.ts index e9210d985..72857e9da 100644 --- a/src/cdn/routes/attachments.ts +++ b/src/cdn/routes/attachments.ts @@ -40,7 +40,7 @@ router.post("/:channel_id", multer.single("file"), async (req: Request, res: Res const id = Snowflake.generate(); const path = `attachments/${channel_id}/${id}/${filename}`; - const endpoint = Config.get()?.cdn.endpointPublic || "http://localhost:3001"; + const endpoint = Config.get()?.cdn.endpointPublic; await storage.set(path, buffer); let width; diff --git a/src/cdn/routes/avatars.ts b/src/cdn/routes/avatars.ts index 67d0aedb8..d5212f0c3 100644 --- a/src/cdn/routes/avatars.ts +++ b/src/cdn/routes/avatars.ts @@ -62,8 +62,7 @@ router.post( if (ANIMATED_MIME_TYPES.includes(type.mime)) hash = `a_${hash}`; // animated icons have a_ infront of the hash const path = `avatars/${user_id}/${hash}`; - const endpoint = - Config.get().cdn.endpointPublic || "http://localhost:3001"; + const endpoint = Config.get().cdn.endpointPublic; await storage.set(path, buffer); diff --git a/src/cdn/routes/guild-profiles.ts b/src/cdn/routes/guild-profiles.ts index b2e72b61b..018a4b2b6 100644 --- a/src/cdn/routes/guild-profiles.ts +++ b/src/cdn/routes/guild-profiles.ts @@ -59,7 +59,7 @@ router.post("/", multer.single("file"), async (req: Request, res: Response) => { if (ANIMATED_MIME_TYPES.includes(type.mime)) hash = `a_${hash}`; // animated icons have a_ infront of the hash const path = `guilds/${guild_id}/users/${user_id}/avatars/${hash}`; - const endpoint = Config.get().cdn.endpointPublic || "http://localhost:3001"; + const endpoint = Config.get().cdn.endpointPublic; await storage.set(path, buffer); diff --git a/src/cdn/routes/role-icons.ts b/src/cdn/routes/role-icons.ts index 4b092cba3..859be2af9 100644 --- a/src/cdn/routes/role-icons.ts +++ b/src/cdn/routes/role-icons.ts @@ -61,8 +61,7 @@ router.post( throw new HTTPError("Invalid file type"); const path = `role-icons/${role_id}/${hash}.png`; - const endpoint = - Config.get().cdn.endpointPublic || "http://localhost:3001"; + const endpoint = Config.get().cdn.endpointPublic; await storage.set(path, buffer); diff --git a/src/gateway/opcodes/Identify.ts b/src/gateway/opcodes/Identify.ts index 97d33f553..352fd6fed 100644 --- a/src/gateway/opcodes/Identify.ts +++ b/src/gateway/opcodes/Identify.ts @@ -542,7 +542,7 @@ export async function onIdentify(this: WebSocket, data: Payload) { merged_members: merged_members, sessions: allSessions, - resume_gateway_url: Config.get().gateway.endpointClient || Config.get().gateway.endpointPublic || "ws://127.0.0.1:3001", + resume_gateway_url: Config.get().gateway.endpointPublic!, // lol hack whatever required_action: Config.get().login.requireVerification && !user.verified ? "REQUIRE_VERIFIED_EMAIL" : undefined, diff --git a/src/schemas/responses/InstanceDomainsResponse.ts b/src/schemas/responses/InstanceDomainsResponse.ts index 0be3682b0..d77d44586 100644 --- a/src/schemas/responses/InstanceDomainsResponse.ts +++ b/src/schemas/responses/InstanceDomainsResponse.ts @@ -17,8 +17,10 @@ */ export interface InstanceDomainsResponse { + admin?: string; + api: string; + apiEndpoint: string; cdn: string; gateway: string; defaultApiVersion: string; - apiEndpoint: string; } diff --git a/src/util/config/Config.ts b/src/util/config/Config.ts index 1458ab4b9..077d0513b 100644 --- a/src/util/config/Config.ts +++ b/src/util/config/Config.ts @@ -40,6 +40,7 @@ import { } from "../config"; export class ConfigValue { + admin: EndpointConfiguration = new EndpointConfiguration(); gateway: EndpointConfiguration = new EndpointConfiguration(); cdn: CdnConfiguration = new CdnConfiguration(); api: ApiConfiguration = new ApiConfiguration(); @@ -58,7 +59,6 @@ export class ConfigValue { defaults: DefaultsConfiguration = new DefaultsConfiguration(); external: ExternalTokensConfiguration = new ExternalTokensConfiguration(); email: EmailConfiguration = new EmailConfiguration(); - passwordReset: PasswordResetConfiguration = - new PasswordResetConfiguration(); + passwordReset: PasswordResetConfiguration = new PasswordResetConfiguration(); user: UserConfiguration = new UserConfiguration(); } diff --git a/src/util/config/types/EndpointConfiguration.ts b/src/util/config/types/EndpointConfiguration.ts index 6319d79c7..359d2e417 100644 --- a/src/util/config/types/EndpointConfiguration.ts +++ b/src/util/config/types/EndpointConfiguration.ts @@ -17,7 +17,6 @@ */ export class EndpointConfiguration { - endpointClient: string | null = null; endpointPrivate: string | null = null; endpointPublic: string | null = null; } diff --git a/src/util/config/types/GeneralConfiguration.ts b/src/util/config/types/GeneralConfiguration.ts index cff8c527b..1548b527f 100644 --- a/src/util/config/types/GeneralConfiguration.ts +++ b/src/util/config/types/GeneralConfiguration.ts @@ -20,8 +20,7 @@ import { Snowflake } from "@spacebar/util"; export class GeneralConfiguration { instanceName: string = "Spacebar Instance"; - instanceDescription: string | null = - "This is a Spacebar instance made in the pre-release days"; + instanceDescription: string | null = "This is a Spacebar instance made in the pre-release days"; frontPage: string | null = null; tosPage: string | null = null; correspondenceEmail: string | null = null;