diff --git a/src/runtime/node/base64url.ts b/src/runtime/node/base64url.ts index e7236b1e..3b51ed61 100644 --- a/src/runtime/node/base64url.ts +++ b/src/runtime/node/base64url.ts @@ -1,12 +1,21 @@ import { decoder } from '../../lib/buffer_utils.js' -export const encode = (input: Uint8Array | string) => - Buffer.from(input).toString('base64').replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_') +let encodeImpl: (input: Uint8Array | string) => string -export const decode = (input: Uint8Array | string) => { +function normalize(input: string | Uint8Array) { let encoded = input if (encoded instanceof Uint8Array) { encoded = decoder.decode(encoded) } - return new Uint8Array(Buffer.from(encoded, 'base64')) + return encoded } + +if (Buffer.isEncoding('base64url')) { + encodeImpl = (input) => Buffer.from(input).toString('base64url') +} else { + encodeImpl = (input) => + Buffer.from(input).toString('base64').replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_') +} + +export const encode = encodeImpl +export const decode = (input: Uint8Array | string) => Buffer.from(normalize(input), 'base64')