24 lines
566 B
TypeScript
24 lines
566 B
TypeScript
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))
|
|
}
|