UNPKG

@turnkey/react-wallet-kit

Version:

The easiest and most powerful way to integrate Turnkey's Embedded Wallets into your React applications.

49 lines (45 loc) 1.61 kB
'use strict'; var config = require('./config.js'); /** * Generates a PKCE challenge pair (verifier and code challenge) */ async function generateChallengePair() { const randomBytes = new Uint8Array(32); window.crypto.getRandomValues(randomBytes); const verifier = btoa(String.fromCharCode(...randomBytes)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, ""); const encoder = new TextEncoder(); const data = encoder.encode(verifier); const digest = await window.crypto.subtle.digest("SHA-256", data); const base64Challenge = btoa(String.fromCharCode(...new Uint8Array(digest))).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, ""); return { verifier, codeChallenge: base64Challenge }; } /** * Exchanges Facebook authorization code for token */ async function exchangeFacebookCodeForToken(clientId, redirectUri, code, codeVerifier) { const params = new URLSearchParams({ client_id: clientId, redirect_uri: redirectUri, code_verifier: codeVerifier, code: code, grant_type: "authorization_code" }); const response = await fetch(config.FACEBOOK_GRAPH_URL, { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: params.toString() }); if (!response.ok) { const errorData = await response.json(); throw new Error(`Facebook token exchange failed: ${JSON.stringify(errorData)}`); } return await response.json(); } exports.exchangeFacebookCodeForToken = exchangeFacebookCodeForToken; exports.generateChallengePair = generateChallengePair; //# sourceMappingURL=pkce.js.map