@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.
Files changed (187) hide show
  1. package/dist/app/IPublicClientApplication.d.ts +53 -53
  2. package/dist/app/IPublicClientApplication.mjs +105 -105
  3. package/dist/app/PublicClientApplication.d.ts +293 -293
  4. package/dist/app/PublicClientApplication.mjs +364 -364
  5. package/dist/app/PublicClientNext.d.ts +276 -276
  6. package/dist/app/PublicClientNext.mjs +354 -354
  7. package/dist/broker/nativeBroker/NativeMessageHandler.d.ts +62 -62
  8. package/dist/broker/nativeBroker/NativeMessageHandler.mjs +254 -254
  9. package/dist/broker/nativeBroker/NativeRequest.d.ts +45 -45
  10. package/dist/broker/nativeBroker/NativeResponse.d.ts +48 -48
  11. package/dist/broker/nativeBroker/NativeStatusCodes.d.ts +7 -7
  12. package/dist/broker/nativeBroker/NativeStatusCodes.mjs +11 -11
  13. package/dist/cache/AccountManager.d.ts +48 -48
  14. package/dist/cache/AccountManager.mjs +126 -126
  15. package/dist/cache/AsyncMemoryStorage.d.ts +50 -50
  16. package/dist/cache/AsyncMemoryStorage.mjs +131 -131
  17. package/dist/cache/BrowserCacheManager.d.ts +385 -385
  18. package/dist/cache/BrowserCacheManager.mjs +1294 -1294
  19. package/dist/cache/BrowserStorage.d.ts +11 -11
  20. package/dist/cache/BrowserStorage.mjs +32 -32
  21. package/dist/cache/DatabaseStorage.d.ts +56 -56
  22. package/dist/cache/DatabaseStorage.mjs +200 -200
  23. package/dist/cache/IAsyncStorage.d.ts +27 -27
  24. package/dist/cache/ITokenCache.d.ts +11 -11
  25. package/dist/cache/IWindowStorage.d.ts +27 -27
  26. package/dist/cache/MemoryStorage.d.ts +11 -11
  27. package/dist/cache/MemoryStorage.mjs +31 -31
  28. package/dist/cache/TokenCache.d.ts +77 -77
  29. package/dist/cache/TokenCache.mjs +195 -195
  30. package/dist/config/Configuration.d.ts +213 -208
  31. package/dist/config/Configuration.d.ts.map +1 -1
  32. package/dist/config/Configuration.mjs +128 -128
  33. package/dist/config/Configuration.mjs.map +1 -1
  34. package/dist/controllers/ControllerFactory.d.ts +5 -5
  35. package/dist/controllers/ControllerFactory.mjs +25 -25
  36. package/dist/controllers/IController.d.ts +60 -60
  37. package/dist/controllers/NestedAppAuthController.d.ts +202 -202
  38. package/dist/controllers/NestedAppAuthController.mjs +473 -473
  39. package/dist/controllers/StandardController.d.ts +405 -405
  40. package/dist/controllers/StandardController.d.ts.map +1 -1
  41. package/dist/controllers/StandardController.mjs +1334 -1316
  42. package/dist/controllers/StandardController.mjs.map +1 -1
  43. package/dist/controllers/UnknownOperatingContextController.d.ts +86 -86
  44. package/dist/controllers/UnknownOperatingContextController.mjs +256 -256
  45. package/dist/crypto/BrowserCrypto.d.ts +52 -52
  46. package/dist/crypto/BrowserCrypto.mjs +151 -151
  47. package/dist/crypto/CryptoOps.d.ts +74 -74
  48. package/dist/crypto/CryptoOps.mjs +176 -176
  49. package/dist/crypto/PkceGenerator.d.ts +8 -8
  50. package/dist/crypto/PkceGenerator.mjs +54 -54
  51. package/dist/crypto/SignedHttpRequest.d.ts +30 -30
  52. package/dist/crypto/SignedHttpRequest.mjs +39 -39
  53. package/dist/encode/Base64Decode.d.ts +9 -9
  54. package/dist/encode/Base64Decode.mjs +36 -36
  55. package/dist/encode/Base64Encode.d.ts +19 -19
  56. package/dist/encode/Base64Encode.mjs +43 -43
  57. package/dist/error/BrowserAuthError.d.ts +255 -255
  58. package/dist/error/BrowserAuthError.mjs +263 -263
  59. package/dist/error/BrowserAuthErrorCodes.d.ts +46 -46
  60. package/dist/error/BrowserAuthErrorCodes.mjs +50 -50
  61. package/dist/error/BrowserConfigurationAuthError.d.ts +33 -33
  62. package/dist/error/BrowserConfigurationAuthError.mjs +40 -40
  63. package/dist/error/BrowserConfigurationAuthError.mjs.map +1 -1
  64. package/dist/error/BrowserConfigurationAuthErrorCodes.d.ts +3 -3
  65. package/dist/error/BrowserConfigurationAuthErrorCodes.mjs +7 -7
  66. package/dist/error/NativeAuthError.d.ts +29 -29
  67. package/dist/error/NativeAuthError.mjs +60 -60
  68. package/dist/error/NativeAuthErrorCodes.d.ts +2 -2
  69. package/dist/error/NativeAuthErrorCodes.mjs +6 -6
  70. package/dist/error/NestedAppAuthError.d.ts +14 -14
  71. package/dist/error/NestedAppAuthError.mjs +23 -23
  72. package/dist/event/EventHandler.d.ts +41 -41
  73. package/dist/event/EventHandler.mjs +125 -125
  74. package/dist/event/EventMessage.d.ts +25 -25
  75. package/dist/event/EventMessage.mjs +68 -68
  76. package/dist/event/EventType.d.ts +29 -29
  77. package/dist/event/EventType.mjs +32 -32
  78. package/dist/index.d.ts +40 -40
  79. package/dist/index.mjs +1 -1
  80. package/dist/interaction_client/BaseInteractionClient.d.ts +50 -50
  81. package/dist/interaction_client/BaseInteractionClient.mjs +106 -106
  82. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.d.ts +4 -4
  83. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs +10 -10
  84. package/dist/interaction_client/NativeInteractionClient.d.ts +151 -151
  85. package/dist/interaction_client/NativeInteractionClient.mjs +621 -621
  86. package/dist/interaction_client/PopupClient.d.ts +105 -105
  87. package/dist/interaction_client/PopupClient.d.ts.map +1 -1
  88. package/dist/interaction_client/PopupClient.mjs +433 -433
  89. package/dist/interaction_client/PopupClient.mjs.map +1 -1
  90. package/dist/interaction_client/RedirectClient.d.ts +50 -50
  91. package/dist/interaction_client/RedirectClient.d.ts.map +1 -1
  92. package/dist/interaction_client/RedirectClient.mjs +315 -314
  93. package/dist/interaction_client/RedirectClient.mjs.map +1 -1
  94. package/dist/interaction_client/SilentAuthCodeClient.d.ts +23 -23
  95. package/dist/interaction_client/SilentAuthCodeClient.mjs +57 -57
  96. package/dist/interaction_client/SilentCacheClient.d.ts +16 -16
  97. package/dist/interaction_client/SilentCacheClient.mjs +42 -42
  98. package/dist/interaction_client/SilentIframeClient.d.ts +32 -32
  99. package/dist/interaction_client/SilentIframeClient.d.ts.map +1 -1
  100. package/dist/interaction_client/SilentIframeClient.mjs +110 -100
  101. package/dist/interaction_client/SilentIframeClient.mjs.map +1 -1
  102. package/dist/interaction_client/SilentRefreshClient.d.ts +20 -20
  103. package/dist/interaction_client/SilentRefreshClient.mjs +47 -47
  104. package/dist/interaction_client/StandardInteractionClient.d.ts +48 -48
  105. package/dist/interaction_client/StandardInteractionClient.mjs +199 -199
  106. package/dist/interaction_handler/InteractionHandler.d.ts +33 -33
  107. package/dist/interaction_handler/InteractionHandler.mjs +93 -93
  108. package/dist/interaction_handler/RedirectHandler.d.ts +32 -32
  109. package/dist/interaction_handler/RedirectHandler.mjs +134 -134
  110. package/dist/interaction_handler/SilentHandler.d.ts +13 -13
  111. package/dist/interaction_handler/SilentHandler.mjs +134 -134
  112. package/dist/naa/AccountInfo.d.ts +11 -11
  113. package/dist/naa/AuthBridge.d.ts +8 -8
  114. package/dist/naa/AuthResult.d.ts +6 -6
  115. package/dist/naa/BridgeAccountContext.d.ts +12 -12
  116. package/dist/naa/BridgeCapabilities.d.ts +3 -3
  117. package/dist/naa/BridgeError.d.ts +9 -9
  118. package/dist/naa/BridgeError.mjs +7 -7
  119. package/dist/naa/BridgeProxy.d.ts +67 -67
  120. package/dist/naa/BridgeProxy.mjs +148 -148
  121. package/dist/naa/BridgeRequest.d.ts +7 -7
  122. package/dist/naa/BridgeRequestEnvelope.d.ts +12 -12
  123. package/dist/naa/BridgeResponseEnvelope.d.ts +13 -13
  124. package/dist/naa/BridgeStatusCode.d.ts +11 -11
  125. package/dist/naa/BridgeStatusCode.mjs +14 -14
  126. package/dist/naa/IBridgeProxy.d.ts +10 -10
  127. package/dist/naa/InitContext.d.ts +8 -8
  128. package/dist/naa/TokenRequest.d.ts +18 -18
  129. package/dist/naa/TokenResponse.d.ts +13 -13
  130. package/dist/naa/mapping/NestedAppAuthAdapter.d.ts +35 -35
  131. package/dist/naa/mapping/NestedAppAuthAdapter.mjs +179 -179
  132. package/dist/navigation/INavigationClient.d.ts +16 -16
  133. package/dist/navigation/NavigationClient.d.ts +22 -22
  134. package/dist/navigation/NavigationClient.mjs +40 -40
  135. package/dist/navigation/NavigationOptions.d.ts +12 -12
  136. package/dist/network/FetchClient.d.ts +26 -26
  137. package/dist/network/FetchClient.mjs +99 -99
  138. package/dist/operatingcontext/BaseOperatingContext.d.ts +41 -41
  139. package/dist/operatingcontext/BaseOperatingContext.mjs +94 -94
  140. package/dist/operatingcontext/NestedAppOperatingContext.d.ts +34 -34
  141. package/dist/operatingcontext/NestedAppOperatingContext.mjs +71 -71
  142. package/dist/operatingcontext/StandardOperatingContext.d.ts +25 -25
  143. package/dist/operatingcontext/StandardOperatingContext.mjs +43 -43
  144. package/dist/operatingcontext/UnknownOperatingContext.d.ts +25 -25
  145. package/dist/operatingcontext/UnknownOperatingContext.mjs +42 -42
  146. package/dist/packageMetadata.d.ts +2 -2
  147. package/dist/packageMetadata.mjs +4 -4
  148. package/dist/request/AuthorizationCodeRequest.d.ts +8 -8
  149. package/dist/request/AuthorizationUrlRequest.d.ts +8 -8
  150. package/dist/request/ClearCacheRequest.d.ts +10 -10
  151. package/dist/request/EndSessionPopupRequest.d.ts +18 -18
  152. package/dist/request/EndSessionRequest.d.ts +15 -15
  153. package/dist/request/InitializeApplicationRequest.d.ts +8 -8
  154. package/dist/request/PopupRequest.d.ts +34 -34
  155. package/dist/request/PopupWindowAttributes.d.ts +15 -15
  156. package/dist/request/RedirectRequest.d.ts +40 -35
  157. package/dist/request/RedirectRequest.d.ts.map +1 -1
  158. package/dist/request/RequestHelpers.d.ts +13 -13
  159. package/dist/request/RequestHelpers.mjs +53 -53
  160. package/dist/request/SilentRequest.d.ts +33 -33
  161. package/dist/request/SsoSilentRequest.d.ts +29 -29
  162. package/dist/response/AuthenticationResult.d.ts +4 -4
  163. package/dist/response/ResponseHandler.d.ts +7 -7
  164. package/dist/response/ResponseHandler.mjs +36 -36
  165. package/dist/telemetry/BrowserPerformanceClient.d.ts +34 -34
  166. package/dist/telemetry/BrowserPerformanceClient.mjs +162 -162
  167. package/dist/telemetry/BrowserPerformanceMeasurement.d.ts +21 -21
  168. package/dist/telemetry/BrowserPerformanceMeasurement.mjs +92 -92
  169. package/dist/utils/BrowserConstants.d.ts +180 -180
  170. package/dist/utils/BrowserConstants.mjs +212 -212
  171. package/dist/utils/BrowserProtocolUtils.d.ts +11 -11
  172. package/dist/utils/BrowserProtocolUtils.mjs +21 -21
  173. package/dist/utils/BrowserUtils.d.ts +75 -75
  174. package/dist/utils/BrowserUtils.mjs +157 -157
  175. package/lib/msal-browser.cjs +18884 -18855
  176. package/lib/msal-browser.cjs.map +1 -1
  177. package/lib/msal-browser.js +18884 -18855
  178. package/lib/msal-browser.js.map +1 -1
  179. package/lib/msal-browser.min.js +59 -59
  180. package/package.json +2 -2
  181. package/src/config/Configuration.ts +9 -1
  182. package/src/controllers/StandardController.ts +30 -12
  183. package/src/interaction_client/PopupClient.ts +1 -0
  184. package/src/interaction_client/RedirectClient.ts +4 -1
  185. package/src/interaction_client/SilentIframeClient.ts +40 -3
  186. package/src/packageMetadata.ts +1 -1
  187. package/src/request/RedirectRequest.ts +5 -0
@@ -1,12 +1,12 @@
1
- import { IWindowStorage } from "./IWindowStorage";
2
- export declare class BrowserStorage implements IWindowStorage<string> {
3
- private windowStorage;
4
- constructor(cacheLocation: string);
5
- private validateWindowStorage;
6
- getItem(key: string): string | null;
7
- setItem(key: string, value: string): void;
8
- removeItem(key: string): void;
9
- getKeys(): string[];
10
- containsKey(key: string): boolean;
11
- }
1
+ import { IWindowStorage } from "./IWindowStorage";
2
+ export declare class BrowserStorage implements IWindowStorage<string> {
3
+ private windowStorage;
4
+ constructor(cacheLocation: string);
5
+ private validateWindowStorage;
6
+ getItem(key: string): string | null;
7
+ setItem(key: string, value: string): void;
8
+ removeItem(key: string): void;
9
+ getKeys(): string[];
10
+ containsKey(key: string): boolean;
11
+ }
12
12
  //# sourceMappingURL=BrowserStorage.d.ts.map
@@ -1,40 +1,40 @@
1
- /*! @azure/msal-browser v3.20.0 2024-07-23 */
1
+ /*! @azure/msal-browser v3.22.0 2024-08-28 */
2
2
  'use strict';
3
3
  import { createBrowserConfigurationAuthError } from '../error/BrowserConfigurationAuthError.mjs';
4
4
  import { BrowserCacheLocation } from '../utils/BrowserConstants.mjs';
5
5
  import { storageNotSupported } from '../error/BrowserConfigurationAuthErrorCodes.mjs';
6
6
 
7
- /*
8
- * Copyright (c) Microsoft Corporation. All rights reserved.
9
- * Licensed under the MIT License.
10
- */
11
- class BrowserStorage {
12
- constructor(cacheLocation) {
13
- this.validateWindowStorage(cacheLocation);
14
- this.windowStorage = window[cacheLocation];
15
- }
16
- validateWindowStorage(cacheLocation) {
17
- if ((cacheLocation !== BrowserCacheLocation.LocalStorage &&
18
- cacheLocation !== BrowserCacheLocation.SessionStorage) ||
19
- !window[cacheLocation]) {
20
- throw createBrowserConfigurationAuthError(storageNotSupported);
21
- }
22
- }
23
- getItem(key) {
24
- return this.windowStorage.getItem(key);
25
- }
26
- setItem(key, value) {
27
- this.windowStorage.setItem(key, value);
28
- }
29
- removeItem(key) {
30
- this.windowStorage.removeItem(key);
31
- }
32
- getKeys() {
33
- return Object.keys(this.windowStorage);
34
- }
35
- containsKey(key) {
36
- return this.windowStorage.hasOwnProperty(key);
37
- }
7
+ /*
8
+ * Copyright (c) Microsoft Corporation. All rights reserved.
9
+ * Licensed under the MIT License.
10
+ */
11
+ class BrowserStorage {
12
+ constructor(cacheLocation) {
13
+ this.validateWindowStorage(cacheLocation);
14
+ this.windowStorage = window[cacheLocation];
15
+ }
16
+ validateWindowStorage(cacheLocation) {
17
+ if ((cacheLocation !== BrowserCacheLocation.LocalStorage &&
18
+ cacheLocation !== BrowserCacheLocation.SessionStorage) ||
19
+ !window[cacheLocation]) {
20
+ throw createBrowserConfigurationAuthError(storageNotSupported);
21
+ }
22
+ }
23
+ getItem(key) {
24
+ return this.windowStorage.getItem(key);
25
+ }
26
+ setItem(key, value) {
27
+ this.windowStorage.setItem(key, value);
28
+ }
29
+ removeItem(key) {
30
+ this.windowStorage.removeItem(key);
31
+ }
32
+ getKeys() {
33
+ return Object.keys(this.windowStorage);
34
+ }
35
+ containsKey(key) {
36
+ return this.windowStorage.hasOwnProperty(key);
37
+ }
38
38
  }
39
39
 
40
40
  export { BrowserStorage };
@@ -1,57 +1,57 @@
1
- import { IAsyncStorage } from "./IAsyncStorage";
2
- /**
3
- * Storage wrapper for IndexedDB storage in browsers: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API
4
- */
5
- export declare class DatabaseStorage<T> implements IAsyncStorage<T> {
6
- private db;
7
- private dbName;
8
- private tableName;
9
- private version;
10
- private dbOpen;
11
- constructor();
12
- /**
13
- * Opens IndexedDB instance.
14
- */
15
- open(): Promise<void>;
16
- /**
17
- * Closes the connection to IndexedDB database when all pending transactions
18
- * complete.
19
- */
20
- closeConnection(): void;
21
- /**
22
- * Opens database if it's not already open
23
- */
24
- private validateDbIsOpen;
25
- /**
26
- * Retrieves item from IndexedDB instance.
27
- * @param key
28
- */
29
- getItem(key: string): Promise<T | null>;
30
- /**
31
- * Adds item to IndexedDB under given key
32
- * @param key
33
- * @param payload
34
- */
35
- setItem(key: string, payload: T): Promise<void>;
36
- /**
37
- * Removes item from IndexedDB under given key
38
- * @param key
39
- */
40
- removeItem(key: string): Promise<void>;
41
- /**
42
- * Get all the keys from the storage object as an iterable array of strings.
43
- */
44
- getKeys(): Promise<string[]>;
45
- /**
46
- *
47
- * Checks whether there is an object under the search key in the object store
48
- */
49
- containsKey(key: string): Promise<boolean>;
50
- /**
51
- * Deletes the MSAL database. The database is deleted rather than cleared to make it possible
52
- * for client applications to downgrade to a previous MSAL version without worrying about forward compatibility issues
53
- * with IndexedDB database versions.
54
- */
55
- deleteDatabase(): Promise<boolean>;
56
- }
1
+ import { IAsyncStorage } from "./IAsyncStorage";
2
+ /**
3
+ * Storage wrapper for IndexedDB storage in browsers: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API
4
+ */
5
+ export declare class DatabaseStorage<T> implements IAsyncStorage<T> {
6
+ private db;
7
+ private dbName;
8
+ private tableName;
9
+ private version;
10
+ private dbOpen;
11
+ constructor();
12
+ /**
13
+ * Opens IndexedDB instance.
14
+ */
15
+ open(): Promise<void>;
16
+ /**
17
+ * Closes the connection to IndexedDB database when all pending transactions
18
+ * complete.
19
+ */
20
+ closeConnection(): void;
21
+ /**
22
+ * Opens database if it's not already open
23
+ */
24
+ private validateDbIsOpen;
25
+ /**
26
+ * Retrieves item from IndexedDB instance.
27
+ * @param key
28
+ */
29
+ getItem(key: string): Promise<T | null>;
30
+ /**
31
+ * Adds item to IndexedDB under given key
32
+ * @param key
33
+ * @param payload
34
+ */
35
+ setItem(key: string, payload: T): Promise<void>;
36
+ /**
37
+ * Removes item from IndexedDB under given key
38
+ * @param key
39
+ */
40
+ removeItem(key: string): Promise<void>;
41
+ /**
42
+ * Get all the keys from the storage object as an iterable array of strings.
43
+ */
44
+ getKeys(): Promise<string[]>;
45
+ /**
46
+ *
47
+ * Checks whether there is an object under the search key in the object store
48
+ */
49
+ containsKey(key: string): Promise<boolean>;
50
+ /**
51
+ * Deletes the MSAL database. The database is deleted rather than cleared to make it possible
52
+ * for client applications to downgrade to a previous MSAL version without worrying about forward compatibility issues
53
+ * with IndexedDB database versions.
54
+ */
55
+ deleteDatabase(): Promise<boolean>;
56
+ }
57
57
  //# sourceMappingURL=DatabaseStorage.d.ts.map
@@ -1,208 +1,208 @@
1
- /*! @azure/msal-browser v3.20.0 2024-07-23 */
1
+ /*! @azure/msal-browser v3.22.0 2024-08-28 */
2
2
  'use strict';
3
3
  import { createBrowserAuthError } from '../error/BrowserAuthError.mjs';
4
4
  import { DB_NAME, DB_VERSION, DB_TABLE_NAME } from '../utils/BrowserConstants.mjs';
5
5
  import { databaseUnavailable, databaseNotOpen } from '../error/BrowserAuthErrorCodes.mjs';
6
6
 
7
- /*
8
- * Copyright (c) Microsoft Corporation. All rights reserved.
9
- * Licensed under the MIT License.
10
- */
11
- /**
12
- * Storage wrapper for IndexedDB storage in browsers: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API
13
- */
14
- class DatabaseStorage {
15
- constructor() {
16
- this.dbName = DB_NAME;
17
- this.version = DB_VERSION;
18
- this.tableName = DB_TABLE_NAME;
19
- this.dbOpen = false;
20
- }
21
- /**
22
- * Opens IndexedDB instance.
23
- */
24
- async open() {
25
- return new Promise((resolve, reject) => {
26
- const openDB = window.indexedDB.open(this.dbName, this.version);
27
- openDB.addEventListener("upgradeneeded", (e) => {
28
- const event = e;
29
- event.target.result.createObjectStore(this.tableName);
30
- });
31
- openDB.addEventListener("success", (e) => {
32
- const event = e;
33
- this.db = event.target.result;
34
- this.dbOpen = true;
35
- resolve();
36
- });
37
- openDB.addEventListener("error", () => reject(createBrowserAuthError(databaseUnavailable)));
38
- });
39
- }
40
- /**
41
- * Closes the connection to IndexedDB database when all pending transactions
42
- * complete.
43
- */
44
- closeConnection() {
45
- const db = this.db;
46
- if (db && this.dbOpen) {
47
- db.close();
48
- this.dbOpen = false;
49
- }
50
- }
51
- /**
52
- * Opens database if it's not already open
53
- */
54
- async validateDbIsOpen() {
55
- if (!this.dbOpen) {
56
- return this.open();
57
- }
58
- }
59
- /**
60
- * Retrieves item from IndexedDB instance.
61
- * @param key
62
- */
63
- async getItem(key) {
64
- await this.validateDbIsOpen();
65
- return new Promise((resolve, reject) => {
66
- // TODO: Add timeouts?
67
- if (!this.db) {
68
- return reject(createBrowserAuthError(databaseNotOpen));
69
- }
70
- const transaction = this.db.transaction([this.tableName], "readonly");
71
- const objectStore = transaction.objectStore(this.tableName);
72
- const dbGet = objectStore.get(key);
73
- dbGet.addEventListener("success", (e) => {
74
- const event = e;
75
- this.closeConnection();
76
- resolve(event.target.result);
77
- });
78
- dbGet.addEventListener("error", (e) => {
79
- this.closeConnection();
80
- reject(e);
81
- });
82
- });
83
- }
84
- /**
85
- * Adds item to IndexedDB under given key
86
- * @param key
87
- * @param payload
88
- */
89
- async setItem(key, payload) {
90
- await this.validateDbIsOpen();
91
- return new Promise((resolve, reject) => {
92
- // TODO: Add timeouts?
93
- if (!this.db) {
94
- return reject(createBrowserAuthError(databaseNotOpen));
95
- }
96
- const transaction = this.db.transaction([this.tableName], "readwrite");
97
- const objectStore = transaction.objectStore(this.tableName);
98
- const dbPut = objectStore.put(payload, key);
99
- dbPut.addEventListener("success", () => {
100
- this.closeConnection();
101
- resolve();
102
- });
103
- dbPut.addEventListener("error", (e) => {
104
- this.closeConnection();
105
- reject(e);
106
- });
107
- });
108
- }
109
- /**
110
- * Removes item from IndexedDB under given key
111
- * @param key
112
- */
113
- async removeItem(key) {
114
- await this.validateDbIsOpen();
115
- return new Promise((resolve, reject) => {
116
- if (!this.db) {
117
- return reject(createBrowserAuthError(databaseNotOpen));
118
- }
119
- const transaction = this.db.transaction([this.tableName], "readwrite");
120
- const objectStore = transaction.objectStore(this.tableName);
121
- const dbDelete = objectStore.delete(key);
122
- dbDelete.addEventListener("success", () => {
123
- this.closeConnection();
124
- resolve();
125
- });
126
- dbDelete.addEventListener("error", (e) => {
127
- this.closeConnection();
128
- reject(e);
129
- });
130
- });
131
- }
132
- /**
133
- * Get all the keys from the storage object as an iterable array of strings.
134
- */
135
- async getKeys() {
136
- await this.validateDbIsOpen();
137
- return new Promise((resolve, reject) => {
138
- if (!this.db) {
139
- return reject(createBrowserAuthError(databaseNotOpen));
140
- }
141
- const transaction = this.db.transaction([this.tableName], "readonly");
142
- const objectStore = transaction.objectStore(this.tableName);
143
- const dbGetKeys = objectStore.getAllKeys();
144
- dbGetKeys.addEventListener("success", (e) => {
145
- const event = e;
146
- this.closeConnection();
147
- resolve(event.target.result);
148
- });
149
- dbGetKeys.addEventListener("error", (e) => {
150
- this.closeConnection();
151
- reject(e);
152
- });
153
- });
154
- }
155
- /**
156
- *
157
- * Checks whether there is an object under the search key in the object store
158
- */
159
- async containsKey(key) {
160
- await this.validateDbIsOpen();
161
- return new Promise((resolve, reject) => {
162
- if (!this.db) {
163
- return reject(createBrowserAuthError(databaseNotOpen));
164
- }
165
- const transaction = this.db.transaction([this.tableName], "readonly");
166
- const objectStore = transaction.objectStore(this.tableName);
167
- const dbContainsKey = objectStore.count(key);
168
- dbContainsKey.addEventListener("success", (e) => {
169
- const event = e;
170
- this.closeConnection();
171
- resolve(event.target.result === 1);
172
- });
173
- dbContainsKey.addEventListener("error", (e) => {
174
- this.closeConnection();
175
- reject(e);
176
- });
177
- });
178
- }
179
- /**
180
- * Deletes the MSAL database. The database is deleted rather than cleared to make it possible
181
- * for client applications to downgrade to a previous MSAL version without worrying about forward compatibility issues
182
- * with IndexedDB database versions.
183
- */
184
- async deleteDatabase() {
185
- // Check if database being deleted exists
186
- if (this.db && this.dbOpen) {
187
- this.closeConnection();
188
- }
189
- return new Promise((resolve, reject) => {
190
- const deleteDbRequest = window.indexedDB.deleteDatabase(DB_NAME);
191
- const id = setTimeout(() => reject(false), 200); // Reject if events aren't raised within 200ms
192
- deleteDbRequest.addEventListener("success", () => {
193
- clearTimeout(id);
194
- return resolve(true);
195
- });
196
- deleteDbRequest.addEventListener("blocked", () => {
197
- clearTimeout(id);
198
- return resolve(true);
199
- });
200
- deleteDbRequest.addEventListener("error", () => {
201
- clearTimeout(id);
202
- return reject(false);
203
- });
204
- });
205
- }
7
+ /*
8
+ * Copyright (c) Microsoft Corporation. All rights reserved.
9
+ * Licensed under the MIT License.
10
+ */
11
+ /**
12
+ * Storage wrapper for IndexedDB storage in browsers: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API
13
+ */
14
+ class DatabaseStorage {
15
+ constructor() {
16
+ this.dbName = DB_NAME;
17
+ this.version = DB_VERSION;
18
+ this.tableName = DB_TABLE_NAME;
19
+ this.dbOpen = false;
20
+ }
21
+ /**
22
+ * Opens IndexedDB instance.
23
+ */
24
+ async open() {
25
+ return new Promise((resolve, reject) => {
26
+ const openDB = window.indexedDB.open(this.dbName, this.version);
27
+ openDB.addEventListener("upgradeneeded", (e) => {
28
+ const event = e;
29
+ event.target.result.createObjectStore(this.tableName);
30
+ });
31
+ openDB.addEventListener("success", (e) => {
32
+ const event = e;
33
+ this.db = event.target.result;
34
+ this.dbOpen = true;
35
+ resolve();
36
+ });
37
+ openDB.addEventListener("error", () => reject(createBrowserAuthError(databaseUnavailable)));
38
+ });
39
+ }
40
+ /**
41
+ * Closes the connection to IndexedDB database when all pending transactions
42
+ * complete.
43
+ */
44
+ closeConnection() {
45
+ const db = this.db;
46
+ if (db && this.dbOpen) {
47
+ db.close();
48
+ this.dbOpen = false;
49
+ }
50
+ }
51
+ /**
52
+ * Opens database if it's not already open
53
+ */
54
+ async validateDbIsOpen() {
55
+ if (!this.dbOpen) {
56
+ return this.open();
57
+ }
58
+ }
59
+ /**
60
+ * Retrieves item from IndexedDB instance.
61
+ * @param key
62
+ */
63
+ async getItem(key) {
64
+ await this.validateDbIsOpen();
65
+ return new Promise((resolve, reject) => {
66
+ // TODO: Add timeouts?
67
+ if (!this.db) {
68
+ return reject(createBrowserAuthError(databaseNotOpen));
69
+ }
70
+ const transaction = this.db.transaction([this.tableName], "readonly");
71
+ const objectStore = transaction.objectStore(this.tableName);
72
+ const dbGet = objectStore.get(key);
73
+ dbGet.addEventListener("success", (e) => {
74
+ const event = e;
75
+ this.closeConnection();
76
+ resolve(event.target.result);
77
+ });
78
+ dbGet.addEventListener("error", (e) => {
79
+ this.closeConnection();
80
+ reject(e);
81
+ });
82
+ });
83
+ }
84
+ /**
85
+ * Adds item to IndexedDB under given key
86
+ * @param key
87
+ * @param payload
88
+ */
89
+ async setItem(key, payload) {
90
+ await this.validateDbIsOpen();
91
+ return new Promise((resolve, reject) => {
92
+ // TODO: Add timeouts?
93
+ if (!this.db) {
94
+ return reject(createBrowserAuthError(databaseNotOpen));
95
+ }
96
+ const transaction = this.db.transaction([this.tableName], "readwrite");
97
+ const objectStore = transaction.objectStore(this.tableName);
98
+ const dbPut = objectStore.put(payload, key);
99
+ dbPut.addEventListener("success", () => {
100
+ this.closeConnection();
101
+ resolve();
102
+ });
103
+ dbPut.addEventListener("error", (e) => {
104
+ this.closeConnection();
105
+ reject(e);
106
+ });
107
+ });
108
+ }
109
+ /**
110
+ * Removes item from IndexedDB under given key
111
+ * @param key
112
+ */
113
+ async removeItem(key) {
114
+ await this.validateDbIsOpen();
115
+ return new Promise((resolve, reject) => {
116
+ if (!this.db) {
117
+ return reject(createBrowserAuthError(databaseNotOpen));
118
+ }
119
+ const transaction = this.db.transaction([this.tableName], "readwrite");
120
+ const objectStore = transaction.objectStore(this.tableName);
121
+ const dbDelete = objectStore.delete(key);
122
+ dbDelete.addEventListener("success", () => {
123
+ this.closeConnection();
124
+ resolve();
125
+ });
126
+ dbDelete.addEventListener("error", (e) => {
127
+ this.closeConnection();
128
+ reject(e);
129
+ });
130
+ });
131
+ }
132
+ /**
133
+ * Get all the keys from the storage object as an iterable array of strings.
134
+ */
135
+ async getKeys() {
136
+ await this.validateDbIsOpen();
137
+ return new Promise((resolve, reject) => {
138
+ if (!this.db) {
139
+ return reject(createBrowserAuthError(databaseNotOpen));
140
+ }
141
+ const transaction = this.db.transaction([this.tableName], "readonly");
142
+ const objectStore = transaction.objectStore(this.tableName);
143
+ const dbGetKeys = objectStore.getAllKeys();
144
+ dbGetKeys.addEventListener("success", (e) => {
145
+ const event = e;
146
+ this.closeConnection();
147
+ resolve(event.target.result);
148
+ });
149
+ dbGetKeys.addEventListener("error", (e) => {
150
+ this.closeConnection();
151
+ reject(e);
152
+ });
153
+ });
154
+ }
155
+ /**
156
+ *
157
+ * Checks whether there is an object under the search key in the object store
158
+ */
159
+ async containsKey(key) {
160
+ await this.validateDbIsOpen();
161
+ return new Promise((resolve, reject) => {
162
+ if (!this.db) {
163
+ return reject(createBrowserAuthError(databaseNotOpen));
164
+ }
165
+ const transaction = this.db.transaction([this.tableName], "readonly");
166
+ const objectStore = transaction.objectStore(this.tableName);
167
+ const dbContainsKey = objectStore.count(key);
168
+ dbContainsKey.addEventListener("success", (e) => {
169
+ const event = e;
170
+ this.closeConnection();
171
+ resolve(event.target.result === 1);
172
+ });
173
+ dbContainsKey.addEventListener("error", (e) => {
174
+ this.closeConnection();
175
+ reject(e);
176
+ });
177
+ });
178
+ }
179
+ /**
180
+ * Deletes the MSAL database. The database is deleted rather than cleared to make it possible
181
+ * for client applications to downgrade to a previous MSAL version without worrying about forward compatibility issues
182
+ * with IndexedDB database versions.
183
+ */
184
+ async deleteDatabase() {
185
+ // Check if database being deleted exists
186
+ if (this.db && this.dbOpen) {
187
+ this.closeConnection();
188
+ }
189
+ return new Promise((resolve, reject) => {
190
+ const deleteDbRequest = window.indexedDB.deleteDatabase(DB_NAME);
191
+ const id = setTimeout(() => reject(false), 200); // Reject if events aren't raised within 200ms
192
+ deleteDbRequest.addEventListener("success", () => {
193
+ clearTimeout(id);
194
+ return resolve(true);
195
+ });
196
+ deleteDbRequest.addEventListener("blocked", () => {
197
+ clearTimeout(id);
198
+ return resolve(true);
199
+ });
200
+ deleteDbRequest.addEventListener("error", () => {
201
+ clearTimeout(id);
202
+ return reject(false);
203
+ });
204
+ });
205
+ }
206
206
  }
207
207
 
208
208
  export { DatabaseStorage };