Line data Source code
1 :
2 : import * as auth from '@ankoh/dashql-jsonschema/auth.js';
3 :
4 1 : function b64Uri(buf: ArrayBuffer): string {
5 1 : return btoa(String.fromCharCode(...new Uint8Array(buf)))
6 1 : .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
7 1 : }
8 :
9 : // Generate PKCE challenge
10 1 : export async function generatePKCEChallenge(): Promise<auth.OAuthPKCEChallenge> {
11 1 : const bytes = crypto.getRandomValues(new Uint8Array(64));
12 1 : const verifier = b64Uri(bytes.buffer).substring(0, 64);
13 1 : const digest = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(verifier));
14 1 : return { value: b64Uri(digest), verifier };
15 1 : }
|