@azure/msal-browser
Version:
Microsoft Authentication Library for js
366 lines • 14.9 kB
TypeScript
import { AccessTokenEntity, AccountEntity, AccountInfo, AppMetadataEntity, AuthorityMetadataEntity, CacheManager, CacheRecord, CommonAuthorizationUrlRequest, ICrypto, IdTokenEntity, IPerformanceClient, Logger, RefreshTokenEntity, ServerTelemetryEntity, StaticAuthorityOptions, StoreInCache, ThrottlingEntity, TokenKeys, CredentialEntity } from "@azure/msal-common/browser";
import { CacheOptions } from "../config/Configuration.js";
import { INTERACTION_TYPE } from "../utils/BrowserConstants.js";
import { MemoryStorage } from "./MemoryStorage.js";
import { IWindowStorage } from "./IWindowStorage.js";
import { PlatformAuthRequest } from "../broker/nativeBroker/PlatformAuthRequest.js";
import { AuthenticationResult } from "../response/AuthenticationResult.js";
import { SilentRequest } from "../request/SilentRequest.js";
import { SsoSilentRequest } from "../request/SsoSilentRequest.js";
import { RedirectRequest } from "../request/RedirectRequest.js";
import { PopupRequest } from "../request/PopupRequest.js";
import { CookieStorage } from "./CookieStorage.js";
import { EventHandler } from "../event/EventHandler.js";
import { EncryptedData } from "./EncryptedData.js";
type KmsiMap = {
[homeAccountId: string]: boolean;
};
/**
* This class implements the cache storage interface for MSAL through browser local or session storage.
*/
export declare class BrowserCacheManager extends CacheManager {
protected cacheConfig: Required<CacheOptions>;
protected browserStorage: IWindowStorage<string>;
protected internalStorage: MemoryStorage<string>;
protected temporaryCacheStorage: IWindowStorage<string>;
protected cookieStorage: CookieStorage;
protected logger: Logger;
private eventHandler;
constructor(clientId: string, cacheConfig: Required<CacheOptions>, cryptoImpl: ICrypto, logger: Logger, performanceClient: IPerformanceClient, eventHandler: EventHandler, staticAuthorityOptions?: StaticAuthorityOptions);
initialize(correlationId: string): Promise<void>;
/**
* Migrates any existing cache data from previous versions of MSAL.js into the current cache structure.
*/
migrateExistingCache(correlationId: string): Promise<void>;
/**
* Parses entry, adds lastUpdatedAt if it doesn't exist, removes entry if expired or invalid
* @param key
* @param correlationId
* @returns
*/
updateOldEntry(key: string, correlationId: string): Promise<CredentialEntity | null>;
/**
* Remove accounts from the cache for older schema versions if they have not been updated in the last cacheRetentionDays
* @param accountSchema
* @param credentialSchema
* @param correlationId
* @returns
*/
removeStaleAccounts(accountSchema: number, credentialSchema: number, correlationId: string): Promise<void>;
/**
* Remove the given account and all associated tokens from the cache
* @param accountKey
* @param rawObject
* @param credentialSchema
* @param correlationId
*/
removeAccountOldSchema(accountKey: string, rawObject: AccountEntity | EncryptedData, credentialSchema: number, correlationId: string): Promise<void>;
/**
* Gets key value pair mapping homeAccountId to KMSI value
* @returns
*/
getKMSIValues(): KmsiMap;
/**
* Migrates id tokens from the old schema to the new schema, also migrates associated account object if it doesn't already exist in the new schema
* @param credentialSchema
* @param accountSchema
* @param correlationId
* @returns
*/
migrateIdTokens(credentialSchema: number, accountSchema: number, correlationId: string): Promise<void>;
/**
* Migrates access tokens from old cache schema to current schema
* @param credentialSchema
* @param kmsiMap
* @param correlationId
* @returns
*/
migrateAccessTokens(credentialSchema: number, kmsiMap: KmsiMap, correlationId: string): Promise<void>;
/**
* Migrates refresh tokens from old cache schema to current schema
* @param credentialSchema
* @param kmsiMap
* @param correlationId
* @returns
*/
migrateRefreshTokens(credentialSchema: number, kmsiMap: KmsiMap, correlationId: string): Promise<void>;
/**
* Tracks upgrades and downgrades for telemetry and debugging purposes
*/
private trackVersionChanges;
/**
* Parses passed value as JSON object, JSON.parse() will throw an error.
* @param input
*/
protected validateAndParseJson(jsonValue: string): object | null;
/**
* Helper to setItem in browser storage, with cleanup in case of quota errors
* @param key
* @param value
*/
setItem(key: string, value: string, correlationId: string): void;
/**
* Helper to setUserData in browser storage, with cleanup in case of quota errors
* @param key
* @param value
* @param correlationId
*/
setUserData(key: string, value: string, correlationId: string, timestamp: string, kmsi: boolean): Promise<void>;
/**
* Reads account from cache, deserializes it into an account entity and returns it.
* If account is not found from the key, returns null and removes key from map.
* @param accountKey
* @returns
*/
getAccount(accountKey: string, correlationId: string): AccountEntity | null;
/**
* set account entity in the platform cache
* @param account
*/
setAccount(account: AccountEntity, correlationId: string, kmsi: boolean, apiId: number): Promise<void>;
setAccountKeys(accountKeys: Array<string>, correlationId: string, schemaVersion?: number): void;
/**
* Returns the array of account keys currently cached
* @returns
*/
getAccountKeys(): Array<string>;
/**
* Add a new account to the key map
* @param key
*/
addAccountKeyToMap(key: string, correlationId: string): boolean;
/**
* Remove an account from the key map
* @param key
*/
removeAccountKeyFromMap(key: string, correlationId: string): void;
/**
* Extends inherited removeAccount function to include removal of the account key from the map
* @param key
*/
removeAccount(account: AccountInfo, correlationId: string): void;
/**
* Removes given idToken from the cache and from the key map
* @param key
*/
removeIdToken(key: string, correlationId: string): void;
/**
* Removes given accessToken from the cache and from the key map
* @param key
*/
removeAccessToken(key: string, correlationId: string, updateTokenKeys?: boolean): void;
/**
* Remove access token key from the key map
* @param key
* @param correlationId
* @param tokenKeys
*/
removeAccessTokenKeys(keys: Array<string>, correlationId: string, schemaVersion?: number): void;
/**
* Removes given refreshToken from the cache and from the key map
* @param key
*/
removeRefreshToken(key: string, correlationId: string): void;
/**
* Gets the keys for the cached tokens associated with this clientId
* @returns
*/
getTokenKeys(schemaVersion?: number): TokenKeys;
/**
* Sets the token keys in the cache
* @param tokenKeys
* @param correlationId
* @returns
*/
setTokenKeys(tokenKeys: TokenKeys, correlationId: string, schemaVersion?: number): void;
/**
* generates idToken entity from a string
* @param idTokenKey
*/
getIdTokenCredential(idTokenKey: string, correlationId: string): IdTokenEntity | null;
/**
* set IdToken credential to the platform cache
* @param idToken
*/
setIdTokenCredential(idToken: IdTokenEntity, correlationId: string, kmsi: boolean): Promise<void>;
/**
* generates accessToken entity from a string
* @param key
*/
getAccessTokenCredential(accessTokenKey: string, correlationId: string): AccessTokenEntity | null;
/**
* set accessToken credential to the platform cache
* @param accessToken
*/
setAccessTokenCredential(accessToken: AccessTokenEntity, correlationId: string, kmsi: boolean): Promise<void>;
/**
* generates refreshToken entity from a string
* @param refreshTokenKey
*/
getRefreshTokenCredential(refreshTokenKey: string, correlationId: string): RefreshTokenEntity | null;
/**
* set refreshToken credential to the platform cache
* @param refreshToken
*/
setRefreshTokenCredential(refreshToken: RefreshTokenEntity, correlationId: string, kmsi: boolean): Promise<void>;
/**
* fetch appMetadata entity from the platform cache
* @param appMetadataKey
* @param correlationId
*/
getAppMetadata(appMetadataKey: string, correlationId: string): AppMetadataEntity | null;
/**
* set appMetadata entity to the platform cache
* @param appMetadata
* @param correlationId
*/
setAppMetadata(appMetadata: AppMetadataEntity, correlationId: string): void;
/**
* fetch server telemetry entity from the platform cache
* @param serverTelemetryKey
* @param correlationId
*/
getServerTelemetry(serverTelemetryKey: string, correlationId: string): ServerTelemetryEntity | null;
/**
* set server telemetry entity to the platform cache
* @param serverTelemetryKey
* @param serverTelemetry
*/
setServerTelemetry(serverTelemetryKey: string, serverTelemetry: ServerTelemetryEntity, correlationId: string): void;
/**
*
*/
getAuthorityMetadata(key: string, correlationId: string): AuthorityMetadataEntity | null;
/**
*
*/
getAuthorityMetadataKeys(): Array<string>;
/**
* Sets wrapper metadata in memory
* @param wrapperSKU
* @param wrapperVersion
*/
setWrapperMetadata(wrapperSKU: string, wrapperVersion: string): void;
/**
* Returns wrapper metadata from in-memory storage
*/
getWrapperMetadata(): [string, string];
/**
*
* @param key
* @param entity
* @param correlationId
*/
setAuthorityMetadata(key: string, entity: AuthorityMetadataEntity, correlationId: string): void;
/**
* Gets the active account
*/
getActiveAccount(correlationId: string): AccountInfo | null;
/**
* Sets the active account's localAccountId in cache
* @param account
*/
setActiveAccount(account: AccountInfo | null, correlationId: string): void;
/**
* fetch throttling entity from the platform cache
* @param throttlingCacheKey
* @param correlationId
*/
getThrottlingCache(throttlingCacheKey: string, correlationId: string): ThrottlingEntity | null;
/**
* set throttling entity to the platform cache
* @param throttlingCacheKey
* @param throttlingCache
*/
setThrottlingCache(throttlingCacheKey: string, throttlingCache: ThrottlingEntity, correlationId: string): void;
/**
* Gets cache item with given key.
* @param cacheKey
* @param correlationId
* @param generateKey
*/
getTemporaryCache(cacheKey: string, correlationId: string, generateKey?: boolean): string | null;
/**
* Sets the cache item with the key and value given.
* @param key
* @param value
*/
setTemporaryCache(cacheKey: string, value: string, generateKey?: boolean): void;
/**
* Removes the cache item with the given key.
* @param key
*/
removeItem(key: string): void;
/**
* Removes the temporary cache item with the given key.
* @param key
*/
removeTemporaryItem(key: string): void;
/**
* Gets all keys in window.
*/
getKeys(): string[];
/**
* Clears all cache entries created by MSAL.
*/
clear(correlationId: string): void;
/**
* Prepend msal.<client-id> to each key
* @param key
* @param addInstanceId
*/
generateCacheKey(key: string): string;
/**
* Cache Key: msal.<schema_version>-<home_account_id>-<environment>-<credential_type>-<client_id or familyId>-<realm>-<scopes>-<claims hash>-<scheme>
* IdToken Example: uid.utid-login.microsoftonline.com-idtoken-app_client_id-contoso.com
* AccessToken Example: uid.utid-login.microsoftonline.com-accesstoken-app_client_id-contoso.com-scope1 scope2--pop
* RefreshToken Example: uid.utid-login.microsoftonline.com-refreshtoken-1-contoso.com
* @param credentialEntity
* @returns
*/
generateCredentialKey(credential: CredentialEntity): string;
/**
* Cache Key: msal.<schema_version>.<home_account_id>.<environment>.<tenant_id>
* @param account
* @returns
*/
generateAccountKey(account: AccountInfo): string;
/**
* Reset all temporary cache items
* @param correlationId
*/
resetRequestCache(correlationId: string): void;
cacheAuthorizeRequest(authCodeRequest: CommonAuthorizationUrlRequest, correlationId: string, codeVerifier?: string): void;
/**
* Gets the token exchange parameters from the cache. Throws an error if nothing is found.
* @param correlationId
*/
getCachedRequest(correlationId: string): [CommonAuthorizationUrlRequest, string];
/**
* Gets cached native request for redirect flows
* @param correlationId
*/
getCachedNativeRequest(): PlatformAuthRequest | null;
isInteractionInProgress(matchClientId?: boolean): boolean;
getInteractionInProgress(): {
clientId: string;
type: INTERACTION_TYPE;
} | null;
setInteractionInProgress(inProgress: boolean, type?: INTERACTION_TYPE, allowOverride?: boolean, correlationId?: string): void;
/**
* Builds credential entities from AuthenticationResult object and saves the resulting credentials to the cache
* @param result
* @param request
*/
hydrateCache(result: AuthenticationResult, request: SilentRequest | SsoSilentRequest | RedirectRequest | PopupRequest): Promise<void>;
/**
* saves a cache record
* @param cacheRecord {CacheRecord}
* @param storeInCache {?StoreInCache}
* @param correlationId {?string} correlation id
*/
saveCacheRecord(cacheRecord: CacheRecord, correlationId: string, kmsi: boolean, apiId: number, storeInCache?: StoreInCache): Promise<void>;
}
export declare const DEFAULT_BROWSER_CACHE_MANAGER: (clientId: string, logger: Logger, performanceClient: IPerformanceClient, eventHandler: EventHandler) => BrowserCacheManager;
export {};
//# sourceMappingURL=BrowserCacheManager.d.ts.map