diff --git a/packages/uint8arrays/src/lib/uint8arrays.spec.ts b/packages/uint8arrays/src/lib/uint8arrays.spec.ts index f00907917d..329c9c169f 100644 --- a/packages/uint8arrays/src/lib/uint8arrays.spec.ts +++ b/packages/uint8arrays/src/lib/uint8arrays.spec.ts @@ -187,4 +187,12 @@ describe('turn to base64urlpad', () => { expect(base64).toBe('SGVsbG8sIFdvcmxkIQ'); }); + + it('should replace every base64url character when encoding and decoding', () => { + const bytes = new Uint8Array([251, 239, 255, 251, 239, 255]); + const encoded = uint8arrayToString(bytes, 'base64urlpad'); + + expect(encoded).toBe('--__--__'); + expect(uint8arrayFromString(encoded, 'base64urlpad')).toEqual(bytes); + }); }); diff --git a/packages/uint8arrays/src/lib/uint8arrays.ts b/packages/uint8arrays/src/lib/uint8arrays.ts index 186111648d..3b755d4965 100644 --- a/packages/uint8arrays/src/lib/uint8arrays.ts +++ b/packages/uint8arrays/src/lib/uint8arrays.ts @@ -121,13 +121,13 @@ export function uint8ArrayToBase64(uint8Array: Uint8Array): string { function base64UrlPadToBase64(base64UrlPadStr: string): string { return ( - base64UrlPadStr.replace('-', '+').replace('_', '/') + + base64UrlPadStr.replace(/-/g, '+').replace(/_/g, '/') + '='.repeat((4 - (base64UrlPadStr.length % 4)) % 4) ); } function base64ToBase64UrlPad(base64Str: string): string { - return base64Str.replace('+', '-').replace('/', '_').replace(/=+$/, ''); + return base64Str.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); } export function uint8arrayFromString(