diff --git a/src/runtime/browser/base64url.ts b/src/runtime/browser/base64url.ts index 8192a180..fe4263fc 100644 --- a/src/runtime/browser/base64url.ts +++ b/src/runtime/browser/base64url.ts @@ -6,7 +6,13 @@ export const encode = (input: Uint8Array | string) => { if (typeof unencoded === 'string') { unencoded = encoder.encode(unencoded) } - const base64string = globalThis.btoa(String.fromCharCode.apply(0, [...unencoded])) + const CHUNK_SIZE = 0x8000 + const arr = [] + for (let i = 0; i < unencoded.length; i += CHUNK_SIZE) { + // @ts-expect-error + arr.push(String.fromCharCode.apply(null, unencoded.subarray(i, i + CHUNK_SIZE))) + } + const base64string = globalThis.btoa(arr.join('')) return base64string.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_') }