From b878b3cb43dc7b3c7ac9c61323aa0f6e70ba047d Mon Sep 17 00:00:00 2001 From: Noah <117038300+finaIcutpro@users.noreply.github.com> Date: Wed, 24 Jun 2026 04:40:42 -0600 Subject: [PATCH] feat(rest): strip trailing slash from proxy baseUrl if present in createRestManager() (#5101) * support docker swarm urls * Update packages/rest/tests/unit/manager.spec.ts Co-authored-by: Awesome Stickz <38146668+AwesomeStickz@users.noreply.github.com> * Update packages/rest/tests/unit/manager.spec.ts Co-authored-by: Awesome Stickz <38146668+AwesomeStickz@users.noreply.github.com> * Apply suggestion from @AwesomeStickz * remove property * Update packages/rest/src/types.ts --------- Co-authored-by: Awesome Stickz <38146668+AwesomeStickz@users.noreply.github.com> --- packages/rest/src/manager.ts | 2 +- packages/rest/src/types.ts | 1 - packages/rest/tests/unit/manager.spec.ts | 10 ++++++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/rest/src/manager.ts b/packages/rest/src/manager.ts index 45aa3c643..83f013308 100644 --- a/packages/rest/src/manager.ts +++ b/packages/rest/src/manager.ts @@ -90,7 +90,7 @@ export const RATE_LIMIT_SCOPE_HEADER = 'x-ratelimit-scope'; export function createRestManager(options: CreateRestManagerOptions): RestManager { const applicationId = options.applicationId ? BigInt(options.applicationId) : getBotIdFromToken(options.token); - const baseUrl = options.proxy?.baseUrl ?? DISCORD_API_URL; + const baseUrl = (options.proxy?.baseUrl ?? DISCORD_API_URL).replace(/\/$/, ''); // Discord error can get nested a lot, so we use a custom inspect to change the depth to Infinity const baseErrorPrototype = { [inspect.custom](_depth: number, options: InspectOptions, _inspect: typeof inspect) { diff --git a/packages/rest/src/types.ts b/packages/rest/src/types.ts index d2f6c7c6a..de3825aa2 100644 --- a/packages/rest/src/types.ts +++ b/packages/rest/src/types.ts @@ -169,7 +169,6 @@ export interface CreateRestManagerOptions { proxy?: { /** * The base url to connect to. If you create a proxy rest, that url would go here. - * IT SHOULD NOT END WITH A / * @default https://discord.com/api */ baseUrl: string; diff --git a/packages/rest/tests/unit/manager.spec.ts b/packages/rest/tests/unit/manager.spec.ts index 999d86649..10c2eb0c4 100644 --- a/packages/rest/tests/unit/manager.spec.ts +++ b/packages/rest/tests/unit/manager.spec.ts @@ -38,9 +38,15 @@ describe('[rest] manager', () => { expect(rest.baseUrl).to.be.equal(options.proxy.baseUrl); }); + it('Strips a trailing slash from proxy base urls', () => { + const rest = createRestManager({ ...options, proxy: { ...options.proxy, baseUrl: 'https://localhost:8000/' } }); + expect(rest.baseUrl).to.be.equal('https://localhost:8000'); + expect(rest.isProxied).to.be.equal(true); + }); + it('With an application id', () => { - const subrest = createRestManager({ ...options, applicationId: '130136895395987456' }); - expect(subrest.applicationId).to.be.equal(130136895395987456n); + const rest = createRestManager({ ...options, applicationId: '130136895395987456' }); + expect(rest.applicationId).to.be.equal(130136895395987456n); }); });