@azure/msal-browser 3.13.0 → 3.14.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 (93) hide show
  1. package/dist/app/IPublicClientApplication.d.ts +2 -1
  2. package/dist/app/IPublicClientApplication.d.ts.map +1 -1
  3. package/dist/app/IPublicClientApplication.mjs +4 -1
  4. package/dist/app/IPublicClientApplication.mjs.map +1 -1
  5. package/dist/app/PublicClientApplication.mjs +1 -1
  6. package/dist/app/PublicClientNext.mjs +1 -1
  7. package/dist/broker/nativeBroker/NativeMessageHandler.mjs +1 -1
  8. package/dist/broker/nativeBroker/NativeStatusCodes.mjs +1 -1
  9. package/dist/cache/AsyncMemoryStorage.mjs +1 -1
  10. package/dist/cache/BrowserCacheManager.mjs +1 -1
  11. package/dist/cache/BrowserStorage.mjs +1 -1
  12. package/dist/cache/DatabaseStorage.mjs +1 -1
  13. package/dist/cache/MemoryStorage.mjs +1 -1
  14. package/dist/cache/TokenCache.mjs +1 -1
  15. package/dist/config/Configuration.mjs +1 -1
  16. package/dist/controllers/ControllerFactory.d.ts.map +1 -1
  17. package/dist/controllers/ControllerFactory.mjs +2 -3
  18. package/dist/controllers/ControllerFactory.mjs.map +1 -1
  19. package/dist/controllers/NestedAppAuthController.mjs +1 -1
  20. package/dist/controllers/StandardController.d.ts.map +1 -1
  21. package/dist/controllers/StandardController.mjs +74 -37
  22. package/dist/controllers/StandardController.mjs.map +1 -1
  23. package/dist/controllers/UnknownOperatingContextController.mjs +1 -1
  24. package/dist/crypto/BrowserCrypto.mjs +1 -1
  25. package/dist/crypto/CryptoOps.mjs +1 -1
  26. package/dist/crypto/PkceGenerator.mjs +1 -1
  27. package/dist/crypto/SignedHttpRequest.mjs +1 -1
  28. package/dist/encode/Base64Decode.mjs +1 -1
  29. package/dist/encode/Base64Encode.mjs +1 -1
  30. package/dist/error/BrowserAuthError.mjs +1 -1
  31. package/dist/error/BrowserAuthErrorCodes.mjs +1 -1
  32. package/dist/error/BrowserConfigurationAuthError.mjs +1 -1
  33. package/dist/error/BrowserConfigurationAuthErrorCodes.mjs +1 -1
  34. package/dist/error/NativeAuthError.mjs +1 -1
  35. package/dist/error/NativeAuthErrorCodes.mjs +1 -1
  36. package/dist/error/NestedAppAuthError.mjs +1 -1
  37. package/dist/event/EventHandler.mjs +1 -1
  38. package/dist/event/EventMessage.mjs +1 -1
  39. package/dist/event/EventType.mjs +1 -1
  40. package/dist/index.mjs +1 -1
  41. package/dist/interaction_client/BaseInteractionClient.mjs +1 -1
  42. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs +1 -1
  43. package/dist/interaction_client/NativeInteractionClient.mjs +1 -1
  44. package/dist/interaction_client/PopupClient.mjs +1 -1
  45. package/dist/interaction_client/RedirectClient.d.ts +4 -5
  46. package/dist/interaction_client/RedirectClient.d.ts.map +1 -1
  47. package/dist/interaction_client/RedirectClient.mjs +5 -8
  48. package/dist/interaction_client/RedirectClient.mjs.map +1 -1
  49. package/dist/interaction_client/SilentAuthCodeClient.mjs +1 -1
  50. package/dist/interaction_client/SilentCacheClient.mjs +1 -1
  51. package/dist/interaction_client/SilentIframeClient.mjs +1 -1
  52. package/dist/interaction_client/SilentRefreshClient.mjs +1 -1
  53. package/dist/interaction_client/StandardInteractionClient.mjs +1 -1
  54. package/dist/interaction_handler/InteractionHandler.mjs +1 -1
  55. package/dist/interaction_handler/RedirectHandler.mjs +1 -1
  56. package/dist/interaction_handler/SilentHandler.mjs +1 -1
  57. package/dist/naa/BridgeError.mjs +1 -1
  58. package/dist/naa/BridgeProxy.mjs +1 -1
  59. package/dist/naa/BridgeStatusCode.mjs +1 -1
  60. package/dist/naa/mapping/NestedAppAuthAdapter.mjs +1 -1
  61. package/dist/navigation/NavigationClient.mjs +1 -1
  62. package/dist/network/FetchClient.mjs +1 -1
  63. package/dist/operatingcontext/BaseOperatingContext.mjs +1 -1
  64. package/dist/operatingcontext/StandardOperatingContext.mjs +1 -1
  65. package/dist/operatingcontext/TeamsAppOperatingContext.d.ts.map +1 -1
  66. package/dist/operatingcontext/TeamsAppOperatingContext.mjs +10 -11
  67. package/dist/operatingcontext/TeamsAppOperatingContext.mjs.map +1 -1
  68. package/dist/operatingcontext/UnknownOperatingContext.mjs +1 -1
  69. package/dist/packageMetadata.d.ts +1 -1
  70. package/dist/packageMetadata.mjs +2 -2
  71. package/dist/request/RequestHelpers.mjs +1 -1
  72. package/dist/response/ResponseHandler.mjs +1 -1
  73. package/dist/telemetry/BrowserPerformanceClient.mjs +1 -1
  74. package/dist/telemetry/BrowserPerformanceMeasurement.mjs +1 -1
  75. package/dist/utils/BrowserConstants.mjs +1 -1
  76. package/dist/utils/BrowserProtocolUtils.mjs +1 -1
  77. package/dist/utils/BrowserUtils.d.ts +3 -0
  78. package/dist/utils/BrowserUtils.d.ts.map +1 -1
  79. package/dist/utils/BrowserUtils.mjs +2 -1
  80. package/dist/utils/BrowserUtils.mjs.map +1 -1
  81. package/lib/msal-browser.cjs +213 -141
  82. package/lib/msal-browser.cjs.map +1 -1
  83. package/lib/msal-browser.js +213 -141
  84. package/lib/msal-browser.js.map +1 -1
  85. package/lib/msal-browser.min.js +61 -60
  86. package/package.json +2 -2
  87. package/src/app/IPublicClientApplication.ts +5 -0
  88. package/src/controllers/ControllerFactory.ts +1 -4
  89. package/src/controllers/StandardController.ts +79 -45
  90. package/src/interaction_client/RedirectClient.ts +6 -12
  91. package/src/operatingcontext/TeamsAppOperatingContext.ts +14 -8
  92. package/src/packageMetadata.ts +1 -1
  93. package/src/utils/BrowserUtils.ts +4 -1
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "type": "git",
11
11
  "url": "https://github.com/AzureAD/microsoft-authentication-library-for-js.git"
12
12
  },
13
- "version": "3.13.0",
13
+ "version": "3.14.0",
14
14
  "description": "Microsoft Authentication Library for js",
15
15
  "keywords": [
16
16
  "implicit",
@@ -101,6 +101,6 @@
101
101
  "typescript": "^4.9.5"
102
102
  },
103
103
  "dependencies": {
104
- "@azure/msal-common": "14.9.0"
104
+ "@azure/msal-common": "14.10.0"
105
105
  }
106
106
  }
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import {
7
+ AccountFilter,
7
8
  AccountInfo,
8
9
  Logger,
9
10
  PerformanceCallbackFunction,
@@ -43,6 +44,7 @@ export interface IPublicClientApplication {
43
44
  removePerformanceCallback(callbackId: string): boolean;
44
45
  enableAccountStorageEvents(): void;
45
46
  disableAccountStorageEvents(): void;
47
+ getAccount(accountFilter: AccountFilter): AccountInfo | null;
46
48
  getAccountByHomeId(homeAccountId: string): AccountInfo | null;
47
49
  getAccountByLocalId(localId: string): AccountInfo | null;
48
50
  getAccountByUsername(userName: string): AccountInfo | null;
@@ -113,6 +115,9 @@ export const stubbedPublicClientApplication: IPublicClientApplication = {
113
115
  getAllAccounts: () => {
114
116
  return [];
115
117
  },
118
+ getAccount: () => {
119
+ return null;
120
+ },
116
121
  getAccountByHomeId: () => {
117
122
  return null;
118
123
  },
@@ -29,10 +29,7 @@ export async function createController(
29
29
 
30
30
  await Promise.all(operatingContexts);
31
31
 
32
- if (
33
- teamsApp.isAvailable() &&
34
- teamsApp.getConfig().auth.supportsNestedAppAuth
35
- ) {
32
+ if (teamsApp.isAvailable()) {
36
33
  const controller = await import("./NestedAppAuthController");
37
34
  return controller.NestedAppAuthController.createController(teamsApp);
38
35
  } else if (standard.isAvailable()) {
@@ -84,6 +84,22 @@ import { ClearCacheRequest } from "../request/ClearCacheRequest";
84
84
  import { createNewGuid } from "../crypto/BrowserCrypto";
85
85
  import { initializeSilentRequest } from "../request/RequestHelpers";
86
86
 
87
+ function getAccountType(
88
+ account?: AccountInfo
89
+ ): "AAD" | "MSA" | "B2C" | undefined {
90
+ const idTokenClaims = account?.idTokenClaims;
91
+ if (idTokenClaims?.tfp || idTokenClaims?.acr) {
92
+ return "B2C";
93
+ }
94
+
95
+ if (!idTokenClaims?.tid) {
96
+ return undefined;
97
+ } else if (idTokenClaims?.tid === "9188040d-6c67-4c5b-b112-36a304b66dad") {
98
+ return "MSA";
99
+ }
100
+ return "AAD";
101
+ }
102
+
87
103
  export class StandardController implements IController {
88
104
  // OperatingContext
89
105
  protected readonly operatingContext: StandardOperatingContext;
@@ -142,7 +158,7 @@ export class StandardController implements IController {
142
158
  >;
143
159
 
144
160
  // Active Iframe request
145
- private activeIframeRequest: [Promise<void>, string] | undefined;
161
+ private activeIframeRequest: [Promise<boolean>, string] | undefined;
146
162
 
147
163
  private ssoSilentMeasurement?: InProgressPerformanceEvent;
148
164
  private acquireTokenByCodeAsyncMeasurement?: InProgressPerformanceEvent;
@@ -439,11 +455,7 @@ export class StandardController implements IController {
439
455
  this.logger,
440
456
  this.performanceClient,
441
457
  rootMeasurement.event.correlationId
442
- )(
443
- hash,
444
- this.performanceClient,
445
- rootMeasurement.event.correlationId
446
- );
458
+ )(hash, rootMeasurement);
447
459
  }
448
460
 
449
461
  return redirectResponse
@@ -472,13 +484,26 @@ export class StandardController implements IController {
472
484
  "handleRedirectResponse returned result, acquire token success"
473
485
  );
474
486
  }
475
- rootMeasurement.end({ success: true });
487
+ rootMeasurement.end({
488
+ success: true,
489
+ accountType: getAccountType(result.account),
490
+ });
491
+ } else {
492
+ /*
493
+ * Instrument an event only if an error code is set. Otherwise, discard it when the redirect response
494
+ * is empty and the error code is missing.
495
+ */
496
+ if (rootMeasurement.event.errorCode) {
497
+ rootMeasurement.end({ success: false });
498
+ } else {
499
+ rootMeasurement.discard();
500
+ }
476
501
  }
502
+
477
503
  this.eventHandler.emitEvent(
478
504
  EventType.HANDLE_REDIRECT_END,
479
505
  InteractionType.Redirect
480
506
  );
481
- rootMeasurement.end({ success: false });
482
507
 
483
508
  return result;
484
509
  })
@@ -631,6 +656,11 @@ export class StandardController implements IController {
631
656
  correlationId
632
657
  );
633
658
 
659
+ atPopupMeasurement.add({
660
+ scenarioId: request.scenarioId,
661
+ accountType: getAccountType(request.account),
662
+ });
663
+
634
664
  try {
635
665
  this.logger.verbose("acquireTokenPopup called", correlationId);
636
666
  BrowserUtils.preflightCheck(this.initialized);
@@ -672,6 +702,7 @@ export class StandardController implements IController {
672
702
  success: true,
673
703
  isNativeBroker: true,
674
704
  requestId: response.requestId,
705
+ accountType: getAccountType(response.account),
675
706
  });
676
707
  return response;
677
708
  })
@@ -721,13 +752,12 @@ export class StandardController implements IController {
721
752
  );
722
753
  }
723
754
 
724
- atPopupMeasurement.add({
725
- accessTokenSize: result.accessToken.length,
726
- idTokenSize: result.idToken.length,
727
- });
728
755
  atPopupMeasurement.end({
729
756
  success: true,
730
757
  requestId: result.requestId,
758
+ accessTokenSize: result.accessToken.length,
759
+ idTokenSize: result.idToken.length,
760
+ accountType: getAccountType(result.account),
731
761
  });
732
762
  return result;
733
763
  })
@@ -811,6 +841,11 @@ export class StandardController implements IController {
811
841
  this.ssoSilentMeasurement?.increment({
812
842
  visibilityChangeCount: 0,
813
843
  });
844
+ this.ssoSilentMeasurement?.add({
845
+ scenarioId: request.scenarioId,
846
+ accountType: getAccountType(request.account),
847
+ });
848
+
814
849
  document.addEventListener(
815
850
  "visibilitychange",
816
851
  this.trackPageVisibilityWithMeasurement
@@ -853,14 +888,13 @@ export class StandardController implements IController {
853
888
  InteractionType.Silent,
854
889
  response
855
890
  );
856
- this.ssoSilentMeasurement?.add({
857
- accessTokenSize: response.accessToken.length,
858
- idTokenSize: response.idToken.length,
859
- });
860
891
  this.ssoSilentMeasurement?.end({
861
892
  success: true,
862
893
  isNativeBroker: response.fromNativeBroker,
863
894
  requestId: response.requestId,
895
+ accessTokenSize: response.accessToken.length,
896
+ idTokenSize: response.idToken.length,
897
+ accountType: getAccountType(response.account),
864
898
  });
865
899
  return response;
866
900
  })
@@ -912,6 +946,7 @@ export class StandardController implements IController {
912
946
  PerformanceEvents.AcquireTokenByCode,
913
947
  correlationId
914
948
  );
949
+ atbcMeasurement.add({ scenarioId: request.scenarioId });
915
950
 
916
951
  try {
917
952
  if (request.code && request.nativeAccountId) {
@@ -938,14 +973,13 @@ export class StandardController implements IController {
938
973
  result
939
974
  );
940
975
  this.hybridAuthCodeResponses.delete(hybridAuthCode);
941
- atbcMeasurement.add({
942
- accessTokenSize: result.accessToken.length,
943
- idTokenSize: result.idToken.length,
944
- });
945
976
  atbcMeasurement.end({
946
977
  success: true,
947
978
  isNativeBroker: result.fromNativeBroker,
948
979
  requestId: result.requestId,
980
+ accessTokenSize: result.accessToken.length,
981
+ idTokenSize: result.idToken.length,
982
+ accountType: getAccountType(result.account),
949
983
  });
950
984
  return result;
951
985
  })
@@ -976,7 +1010,7 @@ export class StandardController implements IController {
976
1010
  return await response;
977
1011
  } else if (request.nativeAccountId) {
978
1012
  if (this.canUseNative(request, request.nativeAccountId)) {
979
- return await this.acquireTokenNative(
1013
+ const result = await this.acquireTokenNative(
980
1014
  {
981
1015
  ...request,
982
1016
  correlationId,
@@ -993,6 +1027,11 @@ export class StandardController implements IController {
993
1027
  }
994
1028
  throw e;
995
1029
  });
1030
+ atbcMeasurement.end({
1031
+ accountType: getAccountType(result.account),
1032
+ success: true,
1033
+ });
1034
+ return result;
996
1035
  } else {
997
1036
  throw createBrowserAuthError(
998
1037
  BrowserAuthErrorCodes.unableToAcquireTokenFromNativePlatform
@@ -1856,6 +1895,7 @@ export class StandardController implements IController {
1856
1895
  );
1857
1896
  atsMeasurement.add({
1858
1897
  cacheLookupPolicy: request.cacheLookupPolicy,
1898
+ scenarioId: request.scenarioId,
1859
1899
  });
1860
1900
 
1861
1901
  BrowserUtils.preflightCheck(this.initialized);
@@ -1865,6 +1905,7 @@ export class StandardController implements IController {
1865
1905
  if (!account) {
1866
1906
  throw createBrowserAuthError(BrowserAuthErrorCodes.noAccountError);
1867
1907
  }
1908
+ atsMeasurement.add({ accountType: getAccountType(account) });
1868
1909
 
1869
1910
  const thumbprint: RequestThumbprint = {
1870
1911
  clientId: this.config.auth.clientId,
@@ -1904,16 +1945,14 @@ export class StandardController implements IController {
1904
1945
  )
1905
1946
  .then((result) => {
1906
1947
  this.activeSilentTokenRequests.delete(silentRequestKey);
1907
- atsMeasurement.add({
1908
- accessTokenSize: result.accessToken.length,
1909
- idTokenSize: result.idToken.length,
1910
- });
1911
1948
  atsMeasurement.end({
1912
1949
  success: true,
1913
1950
  fromCache: result.fromCache,
1914
1951
  isNativeBroker: result.fromNativeBroker,
1915
1952
  cacheLookupPolicy: request.cacheLookupPolicy,
1916
1953
  requestId: result.requestId,
1954
+ accessTokenSize: result.accessToken.length,
1955
+ idTokenSize: result.idToken.length,
1917
1956
  });
1918
1957
  return result;
1919
1958
  })
@@ -2000,13 +2039,11 @@ export class StandardController implements IController {
2000
2039
 
2001
2040
  if (shouldTryToResolveSilently) {
2002
2041
  if (!this.activeIframeRequest) {
2003
- let _resolve: () => void,
2004
- _reject: (reason?: AuthError | Error) => void;
2042
+ let _resolve: (result: boolean) => void;
2005
2043
  // Always set the active request tracker immediately after checking it to prevent races
2006
2044
  this.activeIframeRequest = [
2007
- new Promise((resolve, reject) => {
2045
+ new Promise((resolve) => {
2008
2046
  _resolve = resolve;
2009
- _reject = reject;
2010
2047
  }),
2011
2048
  silentRequest.correlationId,
2012
2049
  ];
@@ -2022,11 +2059,11 @@ export class StandardController implements IController {
2022
2059
  silentRequest.correlationId
2023
2060
  )(silentRequest)
2024
2061
  .then((iframeResult) => {
2025
- _resolve();
2062
+ _resolve(true);
2026
2063
  return iframeResult;
2027
2064
  })
2028
2065
  .catch((e) => {
2029
- _reject(e);
2066
+ _resolve(false);
2030
2067
  throw e;
2031
2068
  })
2032
2069
  .finally(() => {
@@ -2048,20 +2085,11 @@ export class StandardController implements IController {
2048
2085
  awaitIframeCorrelationId: activeCorrelationId,
2049
2086
  });
2050
2087
 
2051
- // Await for errors first so we can distinguish errors thrown by activePromise versus errors thrown by .then below
2052
- await activePromise.catch(() => {
2053
- awaitConcurrentIframeMeasure.end({
2054
- success: false,
2055
- });
2056
- this.logger.info(
2057
- `Iframe request with correlationId: ${activeCorrelationId} failed. Interaction is required.`
2058
- );
2059
- // If previous iframe request failed, it's unlikely to succeed this time. Throw original error.
2060
- throw refreshTokenError;
2088
+ const activePromiseResult = await activePromise;
2089
+ awaitConcurrentIframeMeasure.end({
2090
+ success: activePromiseResult,
2061
2091
  });
2062
-
2063
- return activePromise.then(() => {
2064
- awaitConcurrentIframeMeasure.end({ success: true });
2092
+ if (activePromiseResult) {
2065
2093
  this.logger.verbose(
2066
2094
  `Parallel iframe request with correlationId: ${activeCorrelationId} succeeded. Retrying cache and/or RT redemption`,
2067
2095
  silentRequest.correlationId
@@ -2071,7 +2099,13 @@ export class StandardController implements IController {
2071
2099
  silentRequest,
2072
2100
  cacheLookupPolicy
2073
2101
  );
2074
- });
2102
+ } else {
2103
+ this.logger.info(
2104
+ `Iframe request with correlationId: ${activeCorrelationId} failed. Interaction is required.`
2105
+ );
2106
+ // If previous iframe request failed, it's unlikely to succeed this time. Throw original error.
2107
+ throw refreshTokenError;
2108
+ }
2075
2109
  } else {
2076
2110
  // Cache policy set to skip and another iframe request is already in progress
2077
2111
  this.logger.warning(
@@ -21,6 +21,7 @@ import {
21
21
  invokeAsync,
22
22
  ServerResponseType,
23
23
  UrlUtils,
24
+ InProgressPerformanceEvent,
24
25
  } from "@azure/msal-common";
25
26
  import { StandardInteractionClient } from "./StandardInteractionClient";
26
27
  import {
@@ -190,14 +191,12 @@ export class RedirectClient extends StandardInteractionClient {
190
191
  * Checks if navigateToLoginRequestUrl is set, and:
191
192
  * - if true, performs logic to cache and navigate
192
193
  * - if false, handles hash string and parses response
193
- * @param hash {string?} url hash
194
- * @param performanceClient {IPerformanceClient?}
195
- * @param correlationId {string?} correlation identifier
194
+ * @param hash {string} url hash
195
+ * @param parentMeasurement {InProgressPerformanceEvent} parent measurement
196
196
  */
197
197
  async handleRedirectPromise(
198
- hash?: string,
199
- performanceClient?: IPerformanceClient,
200
- correlationId?: string
198
+ hash: string = "",
199
+ parentMeasurement: InProgressPerformanceEvent
201
200
  ): Promise<AuthenticationResult | null> {
202
201
  const serverTelemetryManager = this.initializeServerTelemetryManager(
203
202
  ApiId.handleRedirectPromise
@@ -220,12 +219,7 @@ export class RedirectClient extends StandardInteractionClient {
220
219
  this.browserStorage.cleanRequestByInteractionType(
221
220
  InteractionType.Redirect
222
221
  );
223
- if (performanceClient && correlationId) {
224
- performanceClient?.addFields(
225
- { errorCode: "no_server_response" },
226
- correlationId
227
- );
228
- }
222
+ parentMeasurement.event.errorCode = "no_server_response";
229
223
  return null;
230
224
  }
231
225
 
@@ -61,6 +61,11 @@ export class TeamsAppOperatingContext extends BaseOperatingContext {
61
61
  * TODO: Add implementation to check for presence of inject Nested App Auth Bridge JavaScript interface
62
62
  *
63
63
  */
64
+
65
+ if (!this.getConfig().auth.supportsNestedAppAuth) {
66
+ return false;
67
+ }
68
+
64
69
  try {
65
70
  if (typeof window !== "undefined") {
66
71
  const bridgeProxy: IBridgeProxy = await BridgeProxy.create();
@@ -74,18 +79,19 @@ export class TeamsAppOperatingContext extends BaseOperatingContext {
74
79
  this.activeAccount =
75
80
  await bridgeProxy.getActiveAccount();
76
81
  }
77
- } catch (e) {
78
- this.activeAccount = undefined;
82
+ } catch {
83
+ // Ignore errors
79
84
  }
80
85
  this.bridgeProxy = bridgeProxy;
81
86
  this.available = bridgeProxy !== undefined;
82
- } else {
83
- this.available = false;
84
87
  }
85
- } catch (e) {
86
- this.available = false;
87
- } finally {
88
- return this.available;
88
+ } catch (ex) {
89
+ this.logger.infoPii(
90
+ `Could not initialize Nested App Auth bridge (${ex})`
91
+ );
89
92
  }
93
+
94
+ this.logger.info(`Nested App Auth Bridge available: ${this.available}`);
95
+ return this.available;
90
96
  }
91
97
  }
@@ -1,3 +1,3 @@
1
1
  /* eslint-disable header/header */
2
2
  export const name = "@azure/msal-browser";
3
- export const version = "3.13.0";
3
+ export const version = "3.14.0";
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { UrlString } from "@azure/msal-common";
6
+ import { UrlString, invoke, invokeAsync } from "@azure/msal-common";
7
7
  import {
8
8
  createBrowserAuthError,
9
9
  BrowserAuthErrorCodes,
@@ -206,3 +206,6 @@ export function preconnect(authority: string): void {
206
206
  export function createGuid(): string {
207
207
  return BrowserCrypto.createNewGuid();
208
208
  }
209
+
210
+ export { invoke };
211
+ export { invokeAsync };