oauth-pkce
Version:
OAUTH PKCE code_verifier and code_challenge generator
41 lines (40 loc) • 1.41 kB
JavaScript
;
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)))
});
}