// WebAuthn speaks ArrayBuffers; everything crossing the wire is base64url. /** @param {ArrayBuffer} buffer @returns {string} */ export function b64(buffer) { return btoa(String.fromCharCode(...new Uint8Array(buffer))) .replace(/\+/g, '-') .replace(/\//g, '_') .replace(/=+$/, ''); } /** @param {string} value @returns {Uint8Array} */ export function unb64(value) { return Uint8Array.from( atob(value.replace(/-/g, '+').replace(/_/g, '/')), (character) => character.charCodeAt(0), ); }