diff --git a/.changeset/tame-dots-trade.md b/.changeset/tame-dots-trade.md new file mode 100644 index 00000000000..7e3dce37229 --- /dev/null +++ b/.changeset/tame-dots-trade.md @@ -0,0 +1,5 @@ +--- +"@clerk/clerk-js": patch +--- + +Fix space encoding for query params diff --git a/packages/clerk-js/src/utils/__tests__/querystring.test.ts b/packages/clerk-js/src/utils/__tests__/querystring.test.ts index 5dbfa1ff0b7..7881c0a0e4c 100644 --- a/packages/clerk-js/src/utils/__tests__/querystring.test.ts +++ b/packages/clerk-js/src/utils/__tests__/querystring.test.ts @@ -22,6 +22,14 @@ describe('getQueryParams(string)', () => { const res = getQueryParams('?foo=42&foo=43&bar=1'); expect(res).toEqual({ foo: ['42', '43'], bar: '1' }); }); + + it('parses spaces and "+" characters correctly', () => { + expect(getQueryParams('test=foo%20bar')).toEqual({ test: 'foo bar' }); + expect(getQueryParams('test=foo%2Bbar%20lab')).toEqual({ test: 'foo+bar lab' }); + + expect(getQueryParams('?foo=42%20hey&foo=43%20%2B&bar=1')).toEqual({ foo: ['42 hey', '43 +'], bar: '1' }); + expect(getQueryParams('?foo=42%20hey&foo=43&bar=1')).toEqual({ foo: ['42 hey', '43'], bar: '1' }); + }); }); describe('stringifyQueryParams(object)', () => { @@ -69,6 +77,14 @@ describe('stringifyQueryParams(object)', () => { expect(stringifyQueryParams({ test: false, boo: true })).toBe('test=false&boo=true'); }); + it('handles spaces and "+" characters correctly', () => { + expect(stringifyQueryParams({ test: 'foo bar' })).toBe('test=foo%20bar'); + + expect(stringifyQueryParams({ test: 'foo+bar lab' })).toBe('test=foo%2Bbar%20lab'); + + expect(stringifyQueryParams({ test: ['foo+bar lab', 'new+'] })).toBe('test=foo%2Bbar%20lab&test=new%2B'); + }); + it('converts an object to querystring when key is camelCase', () => { expect(stringifyQueryParams({ barFoo: '1' }, { keyEncoder: camelToSnake })).toBe('bar_foo=1'); expect(stringifyQueryParams({ unsafeMetadata: { bar: '1' } }, { keyEncoder: camelToSnake })).toBe( diff --git a/packages/clerk-js/src/utils/querystring.ts b/packages/clerk-js/src/utils/querystring.ts index 5142b7f5f95..a99b49474fa 100644 --- a/packages/clerk-js/src/utils/querystring.ts +++ b/packages/clerk-js/src/utils/querystring.ts @@ -52,5 +52,5 @@ export const stringifyQueryParams = ( } }); - return queryParams.toString(); + return queryParams.toString().replace(/\+/g, '%20'); };