UNPKG

@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
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