aboutsummaryrefslogtreecommitdiff
path: root/src/internal
diff options
context:
space:
mode:
Diffstat (limited to 'src/internal')
-rw-r--r--src/internal/base64.ts24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/internal/base64.ts b/src/internal/base64.ts
new file mode 100644
index 00000000..b346538a
--- /dev/null
+++ b/src/internal/base64.ts
@@ -0,0 +1,24 @@
+/**
+ * This works the same as `Buffer.from(input).toString('base64')`
+ * to work on both Node.js and browser environment.
+ *
+ * @internal
+ *
+ * @param input The string to encode to Base64.
+ *
+ * @returns Base64 encoded string.
+ *
+ * @see https://datatracker.ietf.org/doc/html/rfc4648
+ *
+ * @example const encodedHeader = toBase64(JSON.stringify(header));
+ */
+export const toBase64: (input: string) => string =
+ typeof Buffer === 'undefined'
+ ? (input) => {
+ const utf8Bytes = new TextEncoder().encode(input);
+ const binaryString = Array.from(utf8Bytes, (byte) =>
+ String.fromCodePoint(byte)
+ ).join('');
+ return btoa(binaryString);
+ }
+ : (input) => Buffer.from(input).toString('base64');