From faff3e358c028380d9b9f3f2919ae84d1185ccdc Mon Sep 17 00:00:00 2001 From: TomatoCake <60300461+DEVTomatoCake@users.noreply.github.com> Date: Tue, 13 Aug 2024 15:46:30 +0200 Subject: [PATCH] use dc openapi schema --- missing.json | 58 +++++++++++++++++++++++++++++++--------------------- src/index.ts | 27 ++++++++++++++---------- 2 files changed, 51 insertions(+), 34 deletions(-) diff --git a/missing.json b/missing.json index 800abe4..5dc45a0 100644 --- a/missing.json +++ b/missing.json @@ -1,7 +1,7 @@ { - "missing": 544, + "missing": 566, "spacebar": 157, - "discord": 676, + "discord": 709, "routes": [ "/:id/:id/update-gaming-stats", "/:id/force-send-prompt", @@ -25,15 +25,24 @@ "/applications/:id/application-command-index", "/applications/:id/attachment", "/applications/:id/branches", - "/applications/:id/branches", "/applications/:id/branches/:id/builds/:id/size", "/applications/:id/branches/:id/builds/live", "/applications/:id/branches/:id/storage", + "/applications/:id/commands", + "/applications/:id/commands/:id", "/applications/:id/disclosures", + "/applications/:id/emojis", + "/applications/:id/emojis/:id", + "/applications/:id/entitlements/:id", + "/applications/:id/entitlements/:id/consume", "/applications/:id/external-assets", + "/applications/:id/guilds/:id/commands", + "/applications/:id/guilds/:id/commands/:id", "/applications/:id/guilds/:id/commands/:id/permissions", + "/applications/:id/guilds/:id/commands/permissions", "/applications/:id/payment-payout-groups", "/applications/:id/public", + "/applications/:id/role-connections/metadata", "/applications/:id/store-layout", "/applications/:id/subscription-group-listings/:id", "/applications/:id/transfer", @@ -102,6 +111,7 @@ "/channels/:id/messages/:id/hide-guild-feed", "/channels/:id/messages/:id/interaction-data", "/channels/:id/messages/:id/reactions/:id/:id/:id", + "/channels/:id/messages/:id/reactions/:id/@me", "/channels/:id/messages/:id/threads", "/channels/:id/messages/ack", "/channels/:id/messages/search", @@ -121,10 +131,14 @@ "/channels/:id/store-listings/:id", "/channels/:id/tags", "/channels/:id/tags/:id", + "/channels/:id/thread-members", "/channels/:id/thread-members/:id", + "/channels/:id/thread-members/@me", "/channels/:id/thread-members/@me/settings", "/channels/:id/threads", "/channels/:id/threads/archived/:id", + "/channels/:id/threads/archived/private", + "/channels/:id/threads/archived/public", "/channels/:id/threads/search", "/channels/:id/users/@me/threads/archived/private", "/channels/:id/voice-channel-effects", @@ -214,7 +228,6 @@ "/guilds/:id/auto-moderation/rules/:id", "/guilds/:id/auto-moderation/rules/validate", "/guilds/:id/avatars/:id.:id", - "/guilds/:id/avatars/:id.:id", "/guilds/:id/banners/:id.:id", "/guilds/:id/bans/search", "/guilds/:id/basic", @@ -247,7 +260,7 @@ "/guilds/:id/join-wfs-server", "/guilds/:id/members-search", "/guilds/:id/members/@me", - "/guilds/:id/members/@me", + "/guilds/:id/members/search", "/guilds/:id/members/supplemental", "/guilds/:id/members/unusual-dm-activity", "/guilds/:id/messages/search/tabs", @@ -291,14 +304,17 @@ "/guilds/:id/scheduled-events/:id/:id/users/@me", "/guilds/:id/scheduled-events/:id/exceptions", "/guilds/:id/scheduled-events/:id/exceptions/:id", + "/guilds/:id/scheduled-events/:id/users", "/guilds/:id/scheduled-events/:id/users/counts", "/guilds/:id/soundboard-sounds", "/guilds/:id/soundboard-sounds/:id", "/guilds/:id/splashes/:id.jpg", + "/guilds/:id/threads/active", "/guilds/:id/top-emojis", "/guilds/:id/top-read-channels", "/guilds/:id/users/:id/avatars/:id.:id", "/guilds/:id/users/:id/banners/:id.:id", + "/guilds/:id/voice-states/@me", "/guilds/automations/email-domain-lookup", "/guilds/automations/email-domain-lookup/verify", "/guilds/automations/email-domain-lookup/verify-code", @@ -308,6 +324,7 @@ "/integrations/:id/join", "/integrations/:id/search", "/interactions", + "/interactions/:id/:id/callback", "/join-requests/:id", "/join-requests/:id/interview", "/messages-log/guild-channels/get", @@ -324,6 +341,7 @@ "/oauth2/authorize/webhook-channels", "/oauth2/device/finish", "/oauth2/device/verify", + "/oauth2/keys", "/oauth2/samsung/authorize", "/oauth2/samsung/authorize/callback", "/oauth2/tokens/:id", @@ -422,6 +440,7 @@ "/users/@me/application-command-index", "/users/@me/applications/:id/achievements", "/users/@me/applications/:id/entitlement-ticket", + "/users/@me/applications/:id/role-connection", "/users/@me/applications/:id/ticket", "/users/@me/applications/role-connections", "/users/@me/avatars/discordify", @@ -473,10 +492,10 @@ "/users/@me/email/verify-code", "/users/@me/emoji-captions", "/users/@me/entitlements/gift-codes", - "/users/@me/entitlements/gift-codes", "/users/@me/entitlements/gift-codes/:id", "/users/@me/gravity-icymi", "/users/@me/gravity-icymi-negative", + "/users/@me/guilds/:id/member", "/users/@me/guilds/:id/member/ack-dm-upsell-settings", "/users/@me/guilds/integration-application-ids", "/users/@me/guilds/premium/subscription-slots/:id/cancel", @@ -527,7 +546,6 @@ "/users/@me/remote-auth/login", "/users/@me/saved-messages", "/users/@me/saved-messages/:id/:id", - "/users/@me/saved-messages/:id/:id", "/users/@me/scheduled-events", "/users/@me/settings-proto/:id", "/users/@me/settings/game-notifications", @@ -546,37 +564,31 @@ "/users/username/:id", "/voice/:id/match-public-key", "/voice/public-keys", + "/webhooks/:id/:id/github", + "/webhooks/:id/:id/messages/:id", + "/webhooks/:id/:id/messages/@original", + "/webhooks/:id/:id/slack", "webapp:///billing/premium/subscribe/login-handoff?handoff_key=:id&handoff_token=:id&destination=:id" ], "additional": [ "/-/healthz", "/-/readyz", - "/applications/{id}/bot", - "/applications/{id}/bot/reset", - "/applications/{id}/delete", + "/applications/:id/bot", + "/applications/:id/bot/reset", + "/applications/:id/delete", "/auth/generate-registration-tokens", "/auth/mfa/totp", "/auth/mfa/webauthn", - "/channels/{channel_id}/messages/bulk-delete", - "/channels/{channel_id}/messages/{message_id}/ack", - "/channels/{channel_id}/messages/{message_id}/crosspost", - "/channels/{channel_id}/messages/{message_id}/reactions", - "/channels/{channel_id}/purge", - "/connections/{connection_name}/{connection_id}/refresh", - "/guilds/{guild_id}/members/{member_id}/nick", - "/guilds/{guild_id}/roles/{role_id}/member-ids", - "/oauth2/applications/@me", + "/channels/:id/purge", "/ping", "/policies/instance", "/policies/instance/domains", "/policies/instance/limits", "/policies/stats", "/scheduled-maintenances/upcoming_json/scheduled-maintenances/upcoming.json", - "/store/published-listings/applications/{id}/subscription-plans", + "/store/published-listings/applications/:id/subscription-plans", "/track", "/updates", - "/users/@me/connections/{connection_name}/{connection_id}/access-token", - "/users/{id}/delete", - "/voice/regions" + "/users/:id/delete" ] } \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index b851278..1434dd9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,13 +7,8 @@ import fetch from "node-fetch"; const JAVASCRIPT_ENVIRONMENT = fs.readFileSync("./src/template.js").toString(); -const ignoredAdditional = new Set([ - // Not used in the client - "/gateway", - "/gateway/bot", - "/guilds/{guild_id}/widget.json", - "/guilds/{guild_id}/widget.png", -]); +// Not used in the client +const ignoredAdditional: Set = new Set([]); const getClientSource = async () => { const index = await fetch("https://canary.discord.com/app").then(x => x.text()); @@ -76,12 +71,20 @@ const findClientRoutes = (source: string): string[] => { return eval(out); }; +const getDcOpenAPI = async () => { + return fetch( + "https://github.com/discord/discord-api-spec/raw/main/specs/openapi_preview.json" + ) + .then((x) => x.json()) + .then((x: any) => Object.keys(x.paths).map((y) => y.replace(/\/$/, "").replace(/{\w+?}/g, ":id"))); +}; + const getSbOpenAPI = async () => { return fetch( "https://raw.githubusercontent.com/spacebarchat/server/master/assets/openapi.json" ) .then((x) => x.json()) - .then((x: any) => Object.keys(x.paths).map((y) => y.replace(/\/$/, ""))); + .then((x: any) => Object.keys(x.paths).map((y) => y.replace(/\/$/, "").replace(/{\w+?}/g, ":id"))); }; const compare = (discord: string[], spacebar: string[]) => { @@ -89,7 +92,7 @@ const compare = (discord: string[], spacebar: string[]) => { const additional = []; for (const route of discord) { - const regex = route.replaceAll("/", "\\/").replaceAll(":id", "{.*}"); + const regex = route.replaceAll("/", "\\/"); const found = spacebar.some((x) => x.match(regex)); @@ -99,7 +102,7 @@ const compare = (discord: string[], spacebar: string[]) => { } for (const route of spacebar) { - const regex = route.replaceAll("/", "\\/").replace(/{.*}/g, ":id"); + const regex = route.replaceAll("/", "\\/"); const found = discord.some((x) => x.match(regex)); @@ -113,7 +116,9 @@ const compare = (discord: string[], spacebar: string[]) => { (async () => { const source = await getClientSource(); - const dcRoutes = findClientRoutes(source); + const dcOpenAPI = await getDcOpenAPI(); + const dcRoutes: string[] = Array.from(new Set([...findClientRoutes(source), ...dcOpenAPI])); + const sbRoutes = await getSbOpenAPI(); const [missing, additional] = compare(dcRoutes, sbRoutes);