From dcb7ba66eec20eed7d3eae18c432ce88159e729d Mon Sep 17 00:00:00 2001 From: Brendan Kellam Date: Fri, 12 Dec 2025 13:53:30 -0800 Subject: [PATCH] fix(web): Encode parenthesis in query params (#674) --- CHANGELOG.md | 3 +++ packages/web/src/lib/utils.ts | 10 +++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fedd119..83ac1cdf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed +- Fixed issue where parenthesis in query params were not being encoded, resulting in a poor experience when embedding links in Markdown. [#674](https://github.com/sourcebot-dev/sourcebot/pull/674) + ## [4.10.3] - 2025-12-12 ### Fixed diff --git a/packages/web/src/lib/utils.ts b/packages/web/src/lib/utils.ts index d0030524..6fabd7e4 100644 --- a/packages/web/src/lib/utils.ts +++ b/packages/web/src/lib/utils.ts @@ -62,10 +62,18 @@ export const createPathWithQueryParams = (path: string, ...queryParams: [string, return path; } - const queryString = queryParams.map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value ?? '')}`).join('&'); + const queryString = queryParams.map(([key, value]) => `${encodeURIComponent(key)}=${encodeRFC3986URIComponent(value ?? '')}`).join('&'); return `${path}?${queryString}`; } +// @see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent#encoding_for_rfc3986 +const encodeRFC3986URIComponent = (str: string) => { + return encodeURIComponent(str).replace( + /[!'()*]/g, + (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`, + ); + } + type AuthProviderInfo = { id: string; name: string;