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