/ services / oauth / crypto.ts
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  }