authvisage-sdk
Version:
authvisage client sdk
34 lines • 1.32 kB
JavaScript
/**
* Utility class for handling PKCE authentication
*/
export class PKCEHandler {
/**
* Generates a PKCE challenge pair
*/
static async _sha256Base64UrlEncode(inputStr) {
const encoder = new TextEncoder();
const data = encoder.encode(inputStr);
const hash = await crypto.subtle.digest("SHA-256", data);
const base64 = Buffer.from(hash).toString("base64");
// Convert to base64url by replacing chars and removing padding
return base64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
}
static async _storeCodeVerifier(codeVerifier) {
localStorage.setItem(this.PKCE_STORAGE_KEY, codeVerifier);
}
static async getCodeVerifier() {
const codeVerifier = localStorage.getItem(this.PKCE_STORAGE_KEY);
if (!codeVerifier) {
throw new Error("Code verifier not found in local storage.");
}
return codeVerifier;
}
static async generate() {
const codeVerifier = crypto.randomUUID();
const codeChallenge = await this._sha256Base64UrlEncode(codeVerifier);
await this._storeCodeVerifier(codeVerifier);
return { codeVerifier, codeChallenge };
}
}
PKCEHandler.PKCE_STORAGE_KEY = "authVisage:pkce_verifier";
//# sourceMappingURL=pkceHandler.js.map