@azure/msal-browser 3.20.0 → 3.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/IPublicClientApplication.d.ts +53 -53
- package/dist/app/IPublicClientApplication.mjs +105 -105
- package/dist/app/PublicClientApplication.d.ts +293 -293
- package/dist/app/PublicClientApplication.mjs +364 -364
- package/dist/app/PublicClientNext.d.ts +276 -276
- package/dist/app/PublicClientNext.mjs +354 -354
- package/dist/broker/nativeBroker/NativeMessageHandler.d.ts +62 -62
- package/dist/broker/nativeBroker/NativeMessageHandler.mjs +254 -254
- package/dist/broker/nativeBroker/NativeRequest.d.ts +45 -45
- package/dist/broker/nativeBroker/NativeResponse.d.ts +48 -48
- package/dist/broker/nativeBroker/NativeStatusCodes.d.ts +7 -7
- package/dist/broker/nativeBroker/NativeStatusCodes.mjs +11 -11
- package/dist/cache/AccountManager.d.ts +48 -48
- package/dist/cache/AccountManager.mjs +126 -126
- package/dist/cache/AsyncMemoryStorage.d.ts +50 -50
- package/dist/cache/AsyncMemoryStorage.mjs +131 -131
- package/dist/cache/BrowserCacheManager.d.ts +385 -385
- package/dist/cache/BrowserCacheManager.mjs +1294 -1294
- package/dist/cache/BrowserStorage.d.ts +11 -11
- package/dist/cache/BrowserStorage.mjs +32 -32
- package/dist/cache/DatabaseStorage.d.ts +56 -56
- package/dist/cache/DatabaseStorage.mjs +200 -200
- package/dist/cache/IAsyncStorage.d.ts +27 -27
- package/dist/cache/ITokenCache.d.ts +11 -11
- package/dist/cache/IWindowStorage.d.ts +27 -27
- package/dist/cache/MemoryStorage.d.ts +11 -11
- package/dist/cache/MemoryStorage.mjs +31 -31
- package/dist/cache/TokenCache.d.ts +77 -77
- package/dist/cache/TokenCache.mjs +195 -195
- package/dist/config/Configuration.d.ts +213 -208
- package/dist/config/Configuration.d.ts.map +1 -1
- package/dist/config/Configuration.mjs +128 -128
- package/dist/config/Configuration.mjs.map +1 -1
- package/dist/controllers/ControllerFactory.d.ts +5 -5
- package/dist/controllers/ControllerFactory.mjs +25 -25
- package/dist/controllers/IController.d.ts +60 -60
- package/dist/controllers/NestedAppAuthController.d.ts +202 -202
- package/dist/controllers/NestedAppAuthController.mjs +473 -473
- package/dist/controllers/StandardController.d.ts +405 -405
- package/dist/controllers/StandardController.d.ts.map +1 -1
- package/dist/controllers/StandardController.mjs +1334 -1316
- package/dist/controllers/StandardController.mjs.map +1 -1
- package/dist/controllers/UnknownOperatingContextController.d.ts +86 -86
- package/dist/controllers/UnknownOperatingContextController.mjs +256 -256
- package/dist/crypto/BrowserCrypto.d.ts +52 -52
- package/dist/crypto/BrowserCrypto.mjs +151 -151
- package/dist/crypto/CryptoOps.d.ts +74 -74
- package/dist/crypto/CryptoOps.mjs +176 -176
- package/dist/crypto/PkceGenerator.d.ts +8 -8
- package/dist/crypto/PkceGenerator.mjs +54 -54
- package/dist/crypto/SignedHttpRequest.d.ts +30 -30
- package/dist/crypto/SignedHttpRequest.mjs +39 -39
- package/dist/encode/Base64Decode.d.ts +9 -9
- package/dist/encode/Base64Decode.mjs +36 -36
- package/dist/encode/Base64Encode.d.ts +19 -19
- package/dist/encode/Base64Encode.mjs +43 -43
- package/dist/error/BrowserAuthError.d.ts +255 -255
- package/dist/error/BrowserAuthError.mjs +263 -263
- package/dist/error/BrowserAuthErrorCodes.d.ts +46 -46
- package/dist/error/BrowserAuthErrorCodes.mjs +50 -50
- package/dist/error/BrowserConfigurationAuthError.d.ts +33 -33
- package/dist/error/BrowserConfigurationAuthError.mjs +40 -40
- package/dist/error/BrowserConfigurationAuthError.mjs.map +1 -1
- package/dist/error/BrowserConfigurationAuthErrorCodes.d.ts +3 -3
- package/dist/error/BrowserConfigurationAuthErrorCodes.mjs +7 -7
- package/dist/error/NativeAuthError.d.ts +29 -29
- package/dist/error/NativeAuthError.mjs +60 -60
- package/dist/error/NativeAuthErrorCodes.d.ts +2 -2
- package/dist/error/NativeAuthErrorCodes.mjs +6 -6
- package/dist/error/NestedAppAuthError.d.ts +14 -14
- package/dist/error/NestedAppAuthError.mjs +23 -23
- package/dist/event/EventHandler.d.ts +41 -41
- package/dist/event/EventHandler.mjs +125 -125
- package/dist/event/EventMessage.d.ts +25 -25
- package/dist/event/EventMessage.mjs +68 -68
- package/dist/event/EventType.d.ts +29 -29
- package/dist/event/EventType.mjs +32 -32
- package/dist/index.d.ts +40 -40
- package/dist/index.mjs +1 -1
- package/dist/interaction_client/BaseInteractionClient.d.ts +50 -50
- package/dist/interaction_client/BaseInteractionClient.mjs +106 -106
- package/dist/interaction_client/HybridSpaAuthorizationCodeClient.d.ts +4 -4
- package/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs +10 -10
- package/dist/interaction_client/NativeInteractionClient.d.ts +151 -151
- package/dist/interaction_client/NativeInteractionClient.mjs +621 -621
- package/dist/interaction_client/PopupClient.d.ts +105 -105
- package/dist/interaction_client/PopupClient.d.ts.map +1 -1
- package/dist/interaction_client/PopupClient.mjs +433 -433
- package/dist/interaction_client/PopupClient.mjs.map +1 -1
- package/dist/interaction_client/RedirectClient.d.ts +50 -50
- package/dist/interaction_client/RedirectClient.d.ts.map +1 -1
- package/dist/interaction_client/RedirectClient.mjs +315 -314
- package/dist/interaction_client/RedirectClient.mjs.map +1 -1
- package/dist/interaction_client/SilentAuthCodeClient.d.ts +23 -23
- package/dist/interaction_client/SilentAuthCodeClient.mjs +57 -57
- package/dist/interaction_client/SilentCacheClient.d.ts +16 -16
- package/dist/interaction_client/SilentCacheClient.mjs +42 -42
- package/dist/interaction_client/SilentIframeClient.d.ts +32 -32
- package/dist/interaction_client/SilentIframeClient.d.ts.map +1 -1
- package/dist/interaction_client/SilentIframeClient.mjs +110 -100
- package/dist/interaction_client/SilentIframeClient.mjs.map +1 -1
- package/dist/interaction_client/SilentRefreshClient.d.ts +20 -20
- package/dist/interaction_client/SilentRefreshClient.mjs +47 -47
- package/dist/interaction_client/StandardInteractionClient.d.ts +48 -48
- package/dist/interaction_client/StandardInteractionClient.mjs +199 -199
- package/dist/interaction_handler/InteractionHandler.d.ts +33 -33
- package/dist/interaction_handler/InteractionHandler.mjs +93 -93
- package/dist/interaction_handler/RedirectHandler.d.ts +32 -32
- package/dist/interaction_handler/RedirectHandler.mjs +134 -134
- package/dist/interaction_handler/SilentHandler.d.ts +13 -13
- package/dist/interaction_handler/SilentHandler.mjs +134 -134
- package/dist/naa/AccountInfo.d.ts +11 -11
- package/dist/naa/AuthBridge.d.ts +8 -8
- package/dist/naa/AuthResult.d.ts +6 -6
- package/dist/naa/BridgeAccountContext.d.ts +12 -12
- package/dist/naa/BridgeCapabilities.d.ts +3 -3
- package/dist/naa/BridgeError.d.ts +9 -9
- package/dist/naa/BridgeError.mjs +7 -7
- package/dist/naa/BridgeProxy.d.ts +67 -67
- package/dist/naa/BridgeProxy.mjs +148 -148
- package/dist/naa/BridgeRequest.d.ts +7 -7
- package/dist/naa/BridgeRequestEnvelope.d.ts +12 -12
- package/dist/naa/BridgeResponseEnvelope.d.ts +13 -13
- package/dist/naa/BridgeStatusCode.d.ts +11 -11
- package/dist/naa/BridgeStatusCode.mjs +14 -14
- package/dist/naa/IBridgeProxy.d.ts +10 -10
- package/dist/naa/InitContext.d.ts +8 -8
- package/dist/naa/TokenRequest.d.ts +18 -18
- package/dist/naa/TokenResponse.d.ts +13 -13
- package/dist/naa/mapping/NestedAppAuthAdapter.d.ts +35 -35
- package/dist/naa/mapping/NestedAppAuthAdapter.mjs +179 -179
- package/dist/navigation/INavigationClient.d.ts +16 -16
- package/dist/navigation/NavigationClient.d.ts +22 -22
- package/dist/navigation/NavigationClient.mjs +40 -40
- package/dist/navigation/NavigationOptions.d.ts +12 -12
- package/dist/network/FetchClient.d.ts +26 -26
- package/dist/network/FetchClient.mjs +99 -99
- package/dist/operatingcontext/BaseOperatingContext.d.ts +41 -41
- package/dist/operatingcontext/BaseOperatingContext.mjs +94 -94
- package/dist/operatingcontext/NestedAppOperatingContext.d.ts +34 -34
- package/dist/operatingcontext/NestedAppOperatingContext.mjs +71 -71
- package/dist/operatingcontext/StandardOperatingContext.d.ts +25 -25
- package/dist/operatingcontext/StandardOperatingContext.mjs +43 -43
- package/dist/operatingcontext/UnknownOperatingContext.d.ts +25 -25
- package/dist/operatingcontext/UnknownOperatingContext.mjs +42 -42
- package/dist/packageMetadata.d.ts +2 -2
- package/dist/packageMetadata.mjs +4 -4
- package/dist/request/AuthorizationCodeRequest.d.ts +8 -8
- package/dist/request/AuthorizationUrlRequest.d.ts +8 -8
- package/dist/request/ClearCacheRequest.d.ts +10 -10
- package/dist/request/EndSessionPopupRequest.d.ts +18 -18
- package/dist/request/EndSessionRequest.d.ts +15 -15
- package/dist/request/InitializeApplicationRequest.d.ts +8 -8
- package/dist/request/PopupRequest.d.ts +34 -34
- package/dist/request/PopupWindowAttributes.d.ts +15 -15
- package/dist/request/RedirectRequest.d.ts +40 -35
- package/dist/request/RedirectRequest.d.ts.map +1 -1
- package/dist/request/RequestHelpers.d.ts +13 -13
- package/dist/request/RequestHelpers.mjs +53 -53
- package/dist/request/SilentRequest.d.ts +33 -33
- package/dist/request/SsoSilentRequest.d.ts +29 -29
- package/dist/response/AuthenticationResult.d.ts +4 -4
- package/dist/response/ResponseHandler.d.ts +7 -7
- package/dist/response/ResponseHandler.mjs +36 -36
- package/dist/telemetry/BrowserPerformanceClient.d.ts +34 -34
- package/dist/telemetry/BrowserPerformanceClient.mjs +162 -162
- package/dist/telemetry/BrowserPerformanceMeasurement.d.ts +21 -21
- package/dist/telemetry/BrowserPerformanceMeasurement.mjs +92 -92
- package/dist/utils/BrowserConstants.d.ts +180 -180
- package/dist/utils/BrowserConstants.mjs +212 -212
- package/dist/utils/BrowserProtocolUtils.d.ts +11 -11
- package/dist/utils/BrowserProtocolUtils.mjs +21 -21
- package/dist/utils/BrowserUtils.d.ts +75 -75
- package/dist/utils/BrowserUtils.mjs +157 -157
- package/lib/msal-browser.cjs +18884 -18855
- package/lib/msal-browser.cjs.map +1 -1
- package/lib/msal-browser.js +18884 -18855
- package/lib/msal-browser.js.map +1 -1
- package/lib/msal-browser.min.js +59 -59
- package/package.json +2 -2
- package/src/config/Configuration.ts +9 -1
- package/src/controllers/StandardController.ts +30 -12
- package/src/interaction_client/PopupClient.ts +1 -0
- package/src/interaction_client/RedirectClient.ts +4 -1
- package/src/interaction_client/SilentIframeClient.ts +40 -3
- package/src/packageMetadata.ts +1 -1
- package/src/request/RedirectRequest.ts +5 -0
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
import { Logger } from "@azure/msal-common";
|
|
2
|
-
import { IAsyncStorage } from "./IAsyncStorage";
|
|
3
|
-
/**
|
|
4
|
-
* This class allows MSAL to store artifacts asynchronously using the DatabaseStorage IndexedDB wrapper,
|
|
5
|
-
* backed up with the more volatile MemoryStorage object for cases in which IndexedDB may be unavailable.
|
|
6
|
-
*/
|
|
7
|
-
export declare class AsyncMemoryStorage<T> implements IAsyncStorage<T> {
|
|
8
|
-
private inMemoryCache;
|
|
9
|
-
private indexedDBCache;
|
|
10
|
-
private logger;
|
|
11
|
-
constructor(logger: Logger);
|
|
12
|
-
private handleDatabaseAccessError;
|
|
13
|
-
/**
|
|
14
|
-
* Get the item matching the given key. Tries in-memory cache first, then in the asynchronous
|
|
15
|
-
* storage object if item isn't found in-memory.
|
|
16
|
-
* @param key
|
|
17
|
-
*/
|
|
18
|
-
getItem(key: string): Promise<T | null>;
|
|
19
|
-
/**
|
|
20
|
-
* Sets the item in the in-memory cache and then tries to set it in the asynchronous
|
|
21
|
-
* storage object with the given key.
|
|
22
|
-
* @param key
|
|
23
|
-
* @param value
|
|
24
|
-
*/
|
|
25
|
-
setItem(key: string, value: T): Promise<void>;
|
|
26
|
-
/**
|
|
27
|
-
* Removes the item matching the key from the in-memory cache, then tries to remove it from the asynchronous storage object.
|
|
28
|
-
* @param key
|
|
29
|
-
*/
|
|
30
|
-
removeItem(key: string): Promise<void>;
|
|
31
|
-
/**
|
|
32
|
-
* Get all the keys from the in-memory cache as an iterable array of strings. If no keys are found, query the keys in the
|
|
33
|
-
* asynchronous storage object.
|
|
34
|
-
*/
|
|
35
|
-
getKeys(): Promise<string[]>;
|
|
36
|
-
/**
|
|
37
|
-
* Returns true or false if the given key is present in the cache.
|
|
38
|
-
* @param key
|
|
39
|
-
*/
|
|
40
|
-
containsKey(key: string): Promise<boolean>;
|
|
41
|
-
/**
|
|
42
|
-
* Clears in-memory Map
|
|
43
|
-
*/
|
|
44
|
-
clearInMemory(): void;
|
|
45
|
-
/**
|
|
46
|
-
* Tries to delete the IndexedDB database
|
|
47
|
-
* @returns
|
|
48
|
-
*/
|
|
49
|
-
clearPersistent(): Promise<boolean>;
|
|
50
|
-
}
|
|
1
|
+
import { Logger } from "@azure/msal-common";
|
|
2
|
+
import { IAsyncStorage } from "./IAsyncStorage";
|
|
3
|
+
/**
|
|
4
|
+
* This class allows MSAL to store artifacts asynchronously using the DatabaseStorage IndexedDB wrapper,
|
|
5
|
+
* backed up with the more volatile MemoryStorage object for cases in which IndexedDB may be unavailable.
|
|
6
|
+
*/
|
|
7
|
+
export declare class AsyncMemoryStorage<T> implements IAsyncStorage<T> {
|
|
8
|
+
private inMemoryCache;
|
|
9
|
+
private indexedDBCache;
|
|
10
|
+
private logger;
|
|
11
|
+
constructor(logger: Logger);
|
|
12
|
+
private handleDatabaseAccessError;
|
|
13
|
+
/**
|
|
14
|
+
* Get the item matching the given key. Tries in-memory cache first, then in the asynchronous
|
|
15
|
+
* storage object if item isn't found in-memory.
|
|
16
|
+
* @param key
|
|
17
|
+
*/
|
|
18
|
+
getItem(key: string): Promise<T | null>;
|
|
19
|
+
/**
|
|
20
|
+
* Sets the item in the in-memory cache and then tries to set it in the asynchronous
|
|
21
|
+
* storage object with the given key.
|
|
22
|
+
* @param key
|
|
23
|
+
* @param value
|
|
24
|
+
*/
|
|
25
|
+
setItem(key: string, value: T): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Removes the item matching the key from the in-memory cache, then tries to remove it from the asynchronous storage object.
|
|
28
|
+
* @param key
|
|
29
|
+
*/
|
|
30
|
+
removeItem(key: string): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Get all the keys from the in-memory cache as an iterable array of strings. If no keys are found, query the keys in the
|
|
33
|
+
* asynchronous storage object.
|
|
34
|
+
*/
|
|
35
|
+
getKeys(): Promise<string[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Returns true or false if the given key is present in the cache.
|
|
38
|
+
* @param key
|
|
39
|
+
*/
|
|
40
|
+
containsKey(key: string): Promise<boolean>;
|
|
41
|
+
/**
|
|
42
|
+
* Clears in-memory Map
|
|
43
|
+
*/
|
|
44
|
+
clearInMemory(): void;
|
|
45
|
+
/**
|
|
46
|
+
* Tries to delete the IndexedDB database
|
|
47
|
+
* @returns
|
|
48
|
+
*/
|
|
49
|
+
clearPersistent(): Promise<boolean>;
|
|
50
|
+
}
|
|
51
51
|
//# sourceMappingURL=AsyncMemoryStorage.d.ts.map
|
|
@@ -1,140 +1,140 @@
|
|
|
1
|
-
/*! @azure/msal-browser v3.
|
|
1
|
+
/*! @azure/msal-browser v3.22.0 2024-08-28 */
|
|
2
2
|
'use strict';
|
|
3
3
|
import { BrowserAuthError } from '../error/BrowserAuthError.mjs';
|
|
4
4
|
import { DatabaseStorage } from './DatabaseStorage.mjs';
|
|
5
5
|
import { MemoryStorage } from './MemoryStorage.mjs';
|
|
6
6
|
import { databaseUnavailable } from '../error/BrowserAuthErrorCodes.mjs';
|
|
7
7
|
|
|
8
|
-
/*
|
|
9
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
10
|
-
* Licensed under the MIT License.
|
|
11
|
-
*/
|
|
12
|
-
/**
|
|
13
|
-
* This class allows MSAL to store artifacts asynchronously using the DatabaseStorage IndexedDB wrapper,
|
|
14
|
-
* backed up with the more volatile MemoryStorage object for cases in which IndexedDB may be unavailable.
|
|
15
|
-
*/
|
|
16
|
-
class AsyncMemoryStorage {
|
|
17
|
-
constructor(logger) {
|
|
18
|
-
this.inMemoryCache = new MemoryStorage();
|
|
19
|
-
this.indexedDBCache = new DatabaseStorage();
|
|
20
|
-
this.logger = logger;
|
|
21
|
-
}
|
|
22
|
-
handleDatabaseAccessError(error) {
|
|
23
|
-
if (error instanceof BrowserAuthError &&
|
|
24
|
-
error.errorCode === databaseUnavailable) {
|
|
25
|
-
this.logger.error("Could not access persistent storage. This may be caused by browser privacy features which block persistent storage in third-party contexts.");
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
throw error;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Get the item matching the given key. Tries in-memory cache first, then in the asynchronous
|
|
33
|
-
* storage object if item isn't found in-memory.
|
|
34
|
-
* @param key
|
|
35
|
-
*/
|
|
36
|
-
async getItem(key) {
|
|
37
|
-
const item = this.inMemoryCache.getItem(key);
|
|
38
|
-
if (!item) {
|
|
39
|
-
try {
|
|
40
|
-
this.logger.verbose("Queried item not found in in-memory cache, now querying persistent storage.");
|
|
41
|
-
return await this.indexedDBCache.getItem(key);
|
|
42
|
-
}
|
|
43
|
-
catch (e) {
|
|
44
|
-
this.handleDatabaseAccessError(e);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return item;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Sets the item in the in-memory cache and then tries to set it in the asynchronous
|
|
51
|
-
* storage object with the given key.
|
|
52
|
-
* @param key
|
|
53
|
-
* @param value
|
|
54
|
-
*/
|
|
55
|
-
async setItem(key, value) {
|
|
56
|
-
this.inMemoryCache.setItem(key, value);
|
|
57
|
-
try {
|
|
58
|
-
await this.indexedDBCache.setItem(key, value);
|
|
59
|
-
}
|
|
60
|
-
catch (e) {
|
|
61
|
-
this.handleDatabaseAccessError(e);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Removes the item matching the key from the in-memory cache, then tries to remove it from the asynchronous storage object.
|
|
66
|
-
* @param key
|
|
67
|
-
*/
|
|
68
|
-
async removeItem(key) {
|
|
69
|
-
this.inMemoryCache.removeItem(key);
|
|
70
|
-
try {
|
|
71
|
-
await this.indexedDBCache.removeItem(key);
|
|
72
|
-
}
|
|
73
|
-
catch (e) {
|
|
74
|
-
this.handleDatabaseAccessError(e);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Get all the keys from the in-memory cache as an iterable array of strings. If no keys are found, query the keys in the
|
|
79
|
-
* asynchronous storage object.
|
|
80
|
-
*/
|
|
81
|
-
async getKeys() {
|
|
82
|
-
const cacheKeys = this.inMemoryCache.getKeys();
|
|
83
|
-
if (cacheKeys.length === 0) {
|
|
84
|
-
try {
|
|
85
|
-
this.logger.verbose("In-memory cache is empty, now querying persistent storage.");
|
|
86
|
-
return await this.indexedDBCache.getKeys();
|
|
87
|
-
}
|
|
88
|
-
catch (e) {
|
|
89
|
-
this.handleDatabaseAccessError(e);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return cacheKeys;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Returns true or false if the given key is present in the cache.
|
|
96
|
-
* @param key
|
|
97
|
-
*/
|
|
98
|
-
async containsKey(key) {
|
|
99
|
-
const containsKey = this.inMemoryCache.containsKey(key);
|
|
100
|
-
if (!containsKey) {
|
|
101
|
-
try {
|
|
102
|
-
this.logger.verbose("Key not found in in-memory cache, now querying persistent storage.");
|
|
103
|
-
return await this.indexedDBCache.containsKey(key);
|
|
104
|
-
}
|
|
105
|
-
catch (e) {
|
|
106
|
-
this.handleDatabaseAccessError(e);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
return containsKey;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Clears in-memory Map
|
|
113
|
-
*/
|
|
114
|
-
clearInMemory() {
|
|
115
|
-
// InMemory cache is a Map instance, clear is straightforward
|
|
116
|
-
this.logger.verbose(`Deleting in-memory keystore`);
|
|
117
|
-
this.inMemoryCache.clear();
|
|
118
|
-
this.logger.verbose(`In-memory keystore deleted`);
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Tries to delete the IndexedDB database
|
|
122
|
-
* @returns
|
|
123
|
-
*/
|
|
124
|
-
async clearPersistent() {
|
|
125
|
-
try {
|
|
126
|
-
this.logger.verbose("Deleting persistent keystore");
|
|
127
|
-
const dbDeleted = await this.indexedDBCache.deleteDatabase();
|
|
128
|
-
if (dbDeleted) {
|
|
129
|
-
this.logger.verbose("Persistent keystore deleted");
|
|
130
|
-
}
|
|
131
|
-
return dbDeleted;
|
|
132
|
-
}
|
|
133
|
-
catch (e) {
|
|
134
|
-
this.handleDatabaseAccessError(e);
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
8
|
+
/*
|
|
9
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
10
|
+
* Licensed under the MIT License.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* This class allows MSAL to store artifacts asynchronously using the DatabaseStorage IndexedDB wrapper,
|
|
14
|
+
* backed up with the more volatile MemoryStorage object for cases in which IndexedDB may be unavailable.
|
|
15
|
+
*/
|
|
16
|
+
class AsyncMemoryStorage {
|
|
17
|
+
constructor(logger) {
|
|
18
|
+
this.inMemoryCache = new MemoryStorage();
|
|
19
|
+
this.indexedDBCache = new DatabaseStorage();
|
|
20
|
+
this.logger = logger;
|
|
21
|
+
}
|
|
22
|
+
handleDatabaseAccessError(error) {
|
|
23
|
+
if (error instanceof BrowserAuthError &&
|
|
24
|
+
error.errorCode === databaseUnavailable) {
|
|
25
|
+
this.logger.error("Could not access persistent storage. This may be caused by browser privacy features which block persistent storage in third-party contexts.");
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get the item matching the given key. Tries in-memory cache first, then in the asynchronous
|
|
33
|
+
* storage object if item isn't found in-memory.
|
|
34
|
+
* @param key
|
|
35
|
+
*/
|
|
36
|
+
async getItem(key) {
|
|
37
|
+
const item = this.inMemoryCache.getItem(key);
|
|
38
|
+
if (!item) {
|
|
39
|
+
try {
|
|
40
|
+
this.logger.verbose("Queried item not found in in-memory cache, now querying persistent storage.");
|
|
41
|
+
return await this.indexedDBCache.getItem(key);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
this.handleDatabaseAccessError(e);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return item;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Sets the item in the in-memory cache and then tries to set it in the asynchronous
|
|
51
|
+
* storage object with the given key.
|
|
52
|
+
* @param key
|
|
53
|
+
* @param value
|
|
54
|
+
*/
|
|
55
|
+
async setItem(key, value) {
|
|
56
|
+
this.inMemoryCache.setItem(key, value);
|
|
57
|
+
try {
|
|
58
|
+
await this.indexedDBCache.setItem(key, value);
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
this.handleDatabaseAccessError(e);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Removes the item matching the key from the in-memory cache, then tries to remove it from the asynchronous storage object.
|
|
66
|
+
* @param key
|
|
67
|
+
*/
|
|
68
|
+
async removeItem(key) {
|
|
69
|
+
this.inMemoryCache.removeItem(key);
|
|
70
|
+
try {
|
|
71
|
+
await this.indexedDBCache.removeItem(key);
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
this.handleDatabaseAccessError(e);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get all the keys from the in-memory cache as an iterable array of strings. If no keys are found, query the keys in the
|
|
79
|
+
* asynchronous storage object.
|
|
80
|
+
*/
|
|
81
|
+
async getKeys() {
|
|
82
|
+
const cacheKeys = this.inMemoryCache.getKeys();
|
|
83
|
+
if (cacheKeys.length === 0) {
|
|
84
|
+
try {
|
|
85
|
+
this.logger.verbose("In-memory cache is empty, now querying persistent storage.");
|
|
86
|
+
return await this.indexedDBCache.getKeys();
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
this.handleDatabaseAccessError(e);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return cacheKeys;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Returns true or false if the given key is present in the cache.
|
|
96
|
+
* @param key
|
|
97
|
+
*/
|
|
98
|
+
async containsKey(key) {
|
|
99
|
+
const containsKey = this.inMemoryCache.containsKey(key);
|
|
100
|
+
if (!containsKey) {
|
|
101
|
+
try {
|
|
102
|
+
this.logger.verbose("Key not found in in-memory cache, now querying persistent storage.");
|
|
103
|
+
return await this.indexedDBCache.containsKey(key);
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
this.handleDatabaseAccessError(e);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return containsKey;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Clears in-memory Map
|
|
113
|
+
*/
|
|
114
|
+
clearInMemory() {
|
|
115
|
+
// InMemory cache is a Map instance, clear is straightforward
|
|
116
|
+
this.logger.verbose(`Deleting in-memory keystore`);
|
|
117
|
+
this.inMemoryCache.clear();
|
|
118
|
+
this.logger.verbose(`In-memory keystore deleted`);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Tries to delete the IndexedDB database
|
|
122
|
+
* @returns
|
|
123
|
+
*/
|
|
124
|
+
async clearPersistent() {
|
|
125
|
+
try {
|
|
126
|
+
this.logger.verbose("Deleting persistent keystore");
|
|
127
|
+
const dbDeleted = await this.indexedDBCache.deleteDatabase();
|
|
128
|
+
if (dbDeleted) {
|
|
129
|
+
this.logger.verbose("Persistent keystore deleted");
|
|
130
|
+
}
|
|
131
|
+
return dbDeleted;
|
|
132
|
+
}
|
|
133
|
+
catch (e) {
|
|
134
|
+
this.handleDatabaseAccessError(e);
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
export { AsyncMemoryStorage };
|