UNPKG

oauth-pkce

Version:

OAUTH PKCE code_verifier and code_challenge generator

41 lines (40 loc) 1.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function b64Uri(string) { return btoa(string).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); } function getPkce(length, callback) { if (!length) length = 43; var cryptoLib = (typeof window !== 'undefined') && window.msCrypto || crypto; var verifier = b64Uri(Array.prototype.map .call(cryptoLib.getRandomValues(new Uint8Array(length)), function (number) { return String.fromCharCode(number); }) .join('')).substring(0, length); var randomArray = new Uint8Array(verifier.length); for (var i = 0; i < verifier.length; i++) { randomArray[i] = verifier.charCodeAt(i); } var digest = cryptoLib.subtle.digest('SHA-256', randomArray); if ((typeof window !== 'undefined') && window.CryptoOperation) { digest.onerror = callback; digest.oncomplete = function (event) { runCallback(callback, verifier, event.target.result); }; } else { digest .then(function (digest) { runCallback(callback, verifier, digest); }) .catch(callback); } } exports.default = getPkce; function runCallback(callback, verifier, digest) { callback(null, { verifier: verifier, challenge: b64Uri(String.fromCharCode.apply(null, new Uint8Array(digest))) }); }