UNPKG

@nhost/nhost-js

Version:

Nhost JavaScript SDK

40 lines 1.27 kB
/** * PKCE (Proof Key for Code Exchange) utilities for RFC 7636. * * These functions use the Web Crypto API (`globalThis.crypto`), which is * available in all modern runtimes: browsers, Node.js >= 19, Bun, and Deno. */ function bufferToBase64url(buf) { let binary = ''; for (const byte of buf) { binary += String.fromCharCode(byte); } return btoa(binary) .replace(/\+/g, '-') .replace(/\//g, '_') .replace(/=+$/, ''); } /** * Generate a cryptographically random PKCE code verifier (43 base64url characters). */ export function generateCodeVerifier() { const buf = new Uint8Array(32); crypto.getRandomValues(buf); return bufferToBase64url(buf); } /** * Derive a S256 code challenge from a code verifier. */ export async function generateCodeChallenge(verifier) { const hash = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(verifier)); return bufferToBase64url(new Uint8Array(hash)); } /** * Generate a PKCE code verifier and its S256 challenge in one call. */ export async function generatePKCEPair() { const verifier = generateCodeVerifier(); const challenge = await generateCodeChallenge(verifier); return { verifier, challenge }; } //# sourceMappingURL=pkce.js.map