From 1d2046af7b84ae5b3798590fb19d654b9f273855 Mon Sep 17 00:00:00 2001 From: refi93 Date: Wed, 19 Jul 2023 20:24:25 +0200 Subject: [PATCH] Fix encodeBase64 not handling uint8 arrays beyond ~100kB --- packages/client/src/util.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/client/src/util.ts b/packages/client/src/util.ts index 3032bd8..f25e0a1 100644 --- a/packages/client/src/util.ts +++ b/packages/client/src/util.ts @@ -22,7 +22,13 @@ export function getCollectionShortNameFromId(id: string): string { } export function encodeBase64(value: Uint8Array): string { - return btoa(String.fromCharCode.apply(null, value as unknown as number[])) + // safe base64 encoding which works even with larger arrays + // see https://github.com/mathiasbynens/base64/issues/13 + // solution inspired by https://github.com/WebReflection/uint8-to-base64/blob/master/esm/index.js + const output = []; + for (let i = 0; i < value.length; i++) + output.push(String.fromCharCode(value[i])); + return btoa(output.join('')); } export function decodeBase64(value: string): Uint8Array {