UNPKG

@turnkey/react-wallet-kit

Version:

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

105 lines (102 loc) 3.92 kB
import { OAuthProviders, TurnkeyError, TurnkeyErrorCodes } from '@turnkey/sdk-types'; var OAUTH_INTENT_ADD_PROVIDER = "addProvider"; var OAUTH_ADD_PROVIDER_METADATA_KEY = "oauth_add_provider_metadata"; var OAUTH_STATE_KEY = "oauth_state"; // We use localStorage instead of sessionStorage to store OAuth data since the user // might leave the current browsing context during the OAuth flow. We ran into this // with X OAuth on Android where if the user has the X app installed, oauth would // open the native app and when they come back to the browser, sessionStorage is gone /** * Stores OAuth add provider metadata in local storage * Used for addOauthProvider flow if opening in-page */ function storeOAuthAddProviderMetadata(metadata) { localStorage.setItem(OAUTH_ADD_PROVIDER_METADATA_KEY, JSON.stringify(metadata)); } /** * Retrieves OAuth add provider metadata from local storage */ function getOAuthAddProviderMetadata() { var stored = localStorage.getItem(OAUTH_ADD_PROVIDER_METADATA_KEY); if (!stored) return null; try { return JSON.parse(stored); } catch (_unused) { return null; } } /** * Gets the verifier key name for a PKCE provider */ function getPKCEVerifierKey(provider) { return "".concat(provider, "_verifier"); } /** * Retrieves and removes the PKCE verifier from local storage * @param provider - The OAuth provider * @returns The verifier string * @throws TurnkeyError if verifier is not found */ function consumePKCEVerifier(provider) { var key = getPKCEVerifierKey(provider); var verifier = localStorage.getItem(key); if (!verifier) { throw new TurnkeyError("Missing PKCE verifier for ".concat(provider, " authentication"), TurnkeyErrorCodes.NO_PKCE_VERIFIER_FOUND); } localStorage.removeItem(key); return verifier; } /** * Stores the PKCE verifier in local storage * @param provider - The OAuth provider * @param verifier - The verifier string to store */ function storePKCEVerifier(provider, verifier) { localStorage.setItem(getPKCEVerifierKey(provider), verifier); } /** * Checks if a PKCE verifier exists for a provider (without consuming it) * @param provider - The OAuth provider * @returns true if verifier exists */ function hasPKCEVerifier(provider) { return localStorage.getItem(getPKCEVerifierKey(provider)) !== null; } /** * Stores the OAuth state string in local storage for later validation * @param state - The OAuth state string to store */ function storeOAuthState(state) { localStorage.setItem(OAUTH_STATE_KEY, state); } /** * Consumes the OAuth state string from local storage for validation * @param returnedState - The OAuth state string returned from the provider */ function consumeOAuthState(returnedState) { try { var stored = localStorage.getItem(OAUTH_STATE_KEY); if (!stored) { throw new TurnkeyError("Missing OAuth state in storage", TurnkeyErrorCodes.INVALID_OAUTH_STATE); } if (stored !== returnedState) { throw new TurnkeyError("OAuth state mismatch", TurnkeyErrorCodes.INVALID_OAUTH_STATE); } } finally { localStorage.removeItem(OAUTH_STATE_KEY); } } /** * Clears all OAuth-related data from local storage */ function clearAllOAuthData() { localStorage.removeItem(OAUTH_ADD_PROVIDER_METADATA_KEY); localStorage.removeItem(OAUTH_STATE_KEY); var pkceProviders = [OAuthProviders.FACEBOOK, OAuthProviders.DISCORD, OAuthProviders.X]; for (var _i = 0, _pkceProviders = pkceProviders; _i < _pkceProviders.length; _i++) { var provider = _pkceProviders[_i]; localStorage.removeItem(getPKCEVerifierKey(provider)); } } export { OAUTH_ADD_PROVIDER_METADATA_KEY, OAUTH_INTENT_ADD_PROVIDER, OAUTH_STATE_KEY, clearAllOAuthData, consumeOAuthState, consumePKCEVerifier, getOAuthAddProviderMetadata, getPKCEVerifierKey, hasPKCEVerifier, storeOAuthAddProviderMetadata, storeOAuthState, storePKCEVerifier }; //# sourceMappingURL=storage.mjs.map