import { createHash, randomBytes } from 'crypto' function base64URLEncode(buffer: Buffer): string { return buffer .toString('base64') .replace(/\+/g, '-') .replace(/\//g, '_') .replace(/=/g, '') } export function generateCodeVerifier(): string { return base64URLEncode(randomBytes(32)) } export function generateCodeChallenge(verifier: string): string { const hash = createHash('sha256') hash.update(verifier) return base64URLEncode(hash.digest()) } export function generateState(): string { return base64URLEncode(randomBytes(32)) }