crypto.ts
1 import { createHash, randomBytes } from 'crypto' 2 3 function base64URLEncode(buffer: Buffer): string { 4 return buffer 5 .toString('base64') 6 .replace(/\+/g, '-') 7 .replace(/\//g, '_') 8 .replace(/=/g, '') 9 } 10 11 export function generateCodeVerifier(): string { 12 return base64URLEncode(randomBytes(32)) 13 } 14 15 export function generateCodeChallenge(verifier: string): string { 16 const hash = createHash('sha256') 17 hash.update(verifier) 18 return base64URLEncode(hash.digest()) 19 } 20 21 export function generateState(): string { 22 return base64URLEncode(randomBytes(32)) 23 }