UNPKG

@auth0/auth0-spa-js

Version:

Auth0 SDK for Single Page Applications using Authorization Code Grant Flow with PKCE

106 lines (88 loc) 2.43 kB
import { IdToken, User } from '../global'; export const CACHE_KEY_PREFIX = '@@auth0spajs@@'; export const CACHE_KEY_ID_TOKEN_SUFFIX = '@@user@@'; export type CacheKeyData = { audience?: string; scope?: string; clientId: string; }; export class CacheKey { public clientId: string; public scope?: string; public audience?: string; constructor( data: CacheKeyData, public prefix: string = CACHE_KEY_PREFIX, public suffix?: string ) { this.clientId = data.clientId; this.scope = data.scope; this.audience = data.audience; } /** * Converts this `CacheKey` instance into a string for use in a cache * @returns A string representation of the key */ toKey(): string { return [this.prefix, this.clientId, this.audience, this.scope, this.suffix] .filter(Boolean) .join('::'); } /** * Converts a cache key string into a `CacheKey` instance. * @param key The key to convert * @returns An instance of `CacheKey` */ static fromKey(key: string): CacheKey { const [prefix, clientId, audience, scope] = key.split('::'); return new CacheKey({ clientId, scope, audience }, prefix); } /** * Utility function to build a `CacheKey` instance from a cache entry * @param entry The entry * @returns An instance of `CacheKey` */ static fromCacheEntry(entry: CacheEntry): CacheKey { const { scope, audience, client_id: clientId } = entry; return new CacheKey({ scope, audience, clientId }); } } export interface DecodedToken { claims: IdToken; user: User; } export interface IdTokenEntry { id_token: string; decodedToken: DecodedToken; } export type CacheEntry = { id_token?: string; token_type?: string; access_token: string; expires_in: number; decodedToken?: DecodedToken; audience: string; scope: string; client_id: string; refresh_token?: string; oauthTokenScope?: string; }; export type WrappedCacheEntry = { body: Partial<CacheEntry>; expiresAt: number; }; export type KeyManifestEntry = { keys: string[]; }; export type Cacheable = WrappedCacheEntry | KeyManifestEntry; export type MaybePromise<T> = Promise<T> | T; export interface ICache { set<T = Cacheable>(key: string, entry: T): MaybePromise<void>; get<T = Cacheable>(key: string): MaybePromise<T | undefined>; remove(key: string): MaybePromise<void>; allKeys?(): MaybePromise<string[]>; }