@turnkey/react-wallet-kit
Version:
The easiest and most powerful way to integrate Turnkey's Embedded Wallets into your React applications.
86 lines (83 loc) • 3.24 kB
JavaScript
import { asyncToGenerator as _asyncToGenerator, regenerator as _regenerator, toConsumableArray as _toConsumableArray } from '../../_virtual/_rollupPluginBabelHelpers.mjs';
import { FACEBOOK_GRAPH_URL } from './config.mjs';
/**
* Generates a PKCE challenge pair (verifier and code challenge)
*/
function generateChallengePair() {
return _generateChallengePair.apply(this, arguments);
}
/**
* Exchanges Facebook authorization code for token
*/
function _generateChallengePair() {
_generateChallengePair = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
var randomBytes, verifier, encoder, data, digest, base64Challenge;
return _regenerator().w(function (_context) {
while (1) switch (_context.n) {
case 0:
randomBytes = new Uint8Array(32);
window.crypto.getRandomValues(randomBytes);
verifier = btoa(String.fromCharCode.apply(String, _toConsumableArray(randomBytes))).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
encoder = new TextEncoder();
data = encoder.encode(verifier);
_context.n = 1;
return window.crypto.subtle.digest("SHA-256", data);
case 1:
digest = _context.v;
base64Challenge = btoa(String.fromCharCode.apply(String, _toConsumableArray(new Uint8Array(digest)))).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
return _context.a(2, {
verifier: verifier,
codeChallenge: base64Challenge
});
}
}, _callee);
}));
return _generateChallengePair.apply(this, arguments);
}
function exchangeFacebookCodeForToken(_x, _x2, _x3, _x4) {
return _exchangeFacebookCodeForToken.apply(this, arguments);
}
function _exchangeFacebookCodeForToken() {
_exchangeFacebookCodeForToken = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(clientId, redirectUri, code, codeVerifier) {
var params, response, errorData;
return _regenerator().w(function (_context2) {
while (1) switch (_context2.n) {
case 0:
params = new URLSearchParams({
client_id: clientId,
redirect_uri: redirectUri,
code_verifier: codeVerifier,
code: code,
grant_type: "authorization_code"
});
_context2.n = 1;
return fetch(FACEBOOK_GRAPH_URL, {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
body: params.toString()
});
case 1:
response = _context2.v;
if (response.ok) {
_context2.n = 3;
break;
}
_context2.n = 2;
return response.json();
case 2:
errorData = _context2.v;
throw new Error("Facebook token exchange failed: ".concat(JSON.stringify(errorData)));
case 3:
_context2.n = 4;
return response.json();
case 4:
return _context2.a(2, _context2.v);
}
}, _callee2);
}));
return _exchangeFacebookCodeForToken.apply(this, arguments);
}
export { exchangeFacebookCodeForToken, generateChallengePair };
//# sourceMappingURL=pkce.mjs.map