@azure/msal-angular 4.0.27 → 4.1.1

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/README.md CHANGED
@@ -4,13 +4,13 @@
4
4
  ![npm](https://img.shields.io/npm/dw/@azure/msal-angular)
5
5
  [![codecov](https://codecov.io/gh/AzureAD/microsoft-authentication-library-for-js/branch/dev/graph/badge.svg?flag=msal-angular)](https://codecov.io/gh/AzureAD/microsoft-authentication-library-for-js)
6
6
 
7
- | <a href="https://docs.microsoft.com/azure/active-directory/develop/tutorial-v2-angular-auth-code" target="blank">Getting Started</a> | <a href="https://aka.ms/aaddevv2" target="_blank">AAD Docs</a> | <a href="https://azuread.github.io/microsoft-authentication-library-for-js/ref/modules/_azure_msal_angular.html" target="_blank">Library Reference</a> | [Support](README.md#community-help-and-support) | <a href="https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/samples/msal-angular-samples" target="blank">Samples</a> |
7
+ | <a href="https://docs.microsoft.com/azure/active-directory/develop/tutorial-v2-angular-auth-code" target="blank">Getting Started</a> | <a href="https://aka.ms/aaddevv2" target="_blank">AAD Docs</a> | <a href="https://azuread.github.io/microsoft-authentication-library-for-js/ref/modules/_azure_msal_angular.html" target="_blank">Library Reference</a> | [Support](README.md#community-help-and-support) | <a href="https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/samples/msal-angular-samples" target="blank">Samples</a> |
8
8
  | ------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
9
9
 
10
10
  1. [About](#about)
11
11
  1. [Guides](#guides)
12
- 1. [FAQ](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/FAQ.md)
13
- 1. [Changelog](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/CHANGELOG.md)
12
+ 1. [FAQ](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/v4-lts/lib/msal-angular/FAQ.md)
13
+ 1. [Changelog](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/v4-lts/lib/msal-angular/CHANGELOG.md)
14
14
  1. [Version Support](#version-support)
15
15
  1. [Prerequisites](#prerequisites)
16
16
  1. [Installation](#installation)
@@ -28,17 +28,17 @@
28
28
 
29
29
  MSAL for Angular enables Angular web applications to authenticate users using [Azure AD](https://docs.microsoft.com/azure/active-directory/develop/v2-overview) work and school accounts (AAD), Microsoft personal accounts (MSA) and social identity providers like Facebook, Google, LinkedIn, Microsoft accounts, etc. through [Azure AD B2C](https://docs.microsoft.com/azure/active-directory-b2c/active-directory-b2c-overview#identity-providers) service. It also enables your app to get tokens to access [Microsoft Cloud](https://www.microsoft.com/enterprise) services such as [Microsoft Graph](https://graph.microsoft.io).
30
30
 
31
- The `@azure/msal-angular` package described by the code in this folder wraps the [`@azure/msal-browser` package](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-browser) and uses it as a peer dependency to enable authentication in Angular Web Applications without backend servers. This version of the library uses the OAuth 2.0 Authorization Code Flow with PKCE. To read more about this protocol, as well as the differences between implicit flow and authorization code flow, see the description provided by [@azure/msal-browser](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-browser#implicit-flow-vs-authorization-code-flow-with-pkce). If you are looking for the version of the library that uses the implicit flow, please see the [MSAL Angular v1 library](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/msal-angular-v1/lib/msal-angular).
31
+ The `@azure/msal-angular` package described by the code in this folder wraps the [`@azure/msal-browser` package](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-browser) and uses it as a peer dependency to enable authentication in Angular Web Applications without backend servers. This version of the library uses the OAuth 2.0 Authorization Code Flow with PKCE. To read more about this protocol, as well as the differences between implicit flow and authorization code flow, see the description provided by [@azure/msal-browser](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-browser#implicit-flow-vs-authorization-code-flow-with-pkce). If you are looking for the version of the library that uses the implicit flow, please see the [MSAL Angular v1 library](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/msal-angular-v1/lib/msal-angular).
32
32
 
33
33
  The current `@azure/msal-angular` library improves upon the previous version and utilizes the authorization code flow. Most features available in the old library will be available in this one, but there are nuances to the authentication flow in both. The latest `@azure/msal-angular` package does NOT support the implicit flow.
34
34
 
35
35
  ## Guides
36
36
 
37
- - [Upgrade Guide (v3-v4)](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/v3-v4-upgrade-guide.md)
38
- - [Upgrade Guide (v2-v3)](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/v2-v3-upgrade-guide.md)
39
- - [Upgrade Guide (v1-v2)](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/v1-v2-upgrade-guide.md)
40
- - [Upgrade Guide (v0-v1)](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/v0-v1-upgrade-guide.md)
41
- - [Configuration](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/configuration.md)
37
+ - [Upgrade Guide (v3-v4)](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/v3-v4-upgrade-guide.md)
38
+ - [Upgrade Guide (v2-v3)](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/v2-v3-upgrade-guide.md)
39
+ - [Upgrade Guide (v1-v2)](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/v1-v2-upgrade-guide.md)
40
+ - [Upgrade Guide (v0-v1)](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/v0-v1-upgrade-guide.md)
41
+ - [Configuration](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/configuration.md)
42
42
 
43
43
  ## Version Support
44
44
 
@@ -56,7 +56,7 @@ At a minimum, `@azure/msal-angular` will follow the [support schedule of the mai
56
56
 
57
57
  Before using `@azure/msal-angular`, [register an application in Azure AD](https://docs.microsoft.com/azure/active-directory/develop/quickstart-register-app) to get your `clientId`.
58
58
 
59
- For local development, please see the [`contributing.md`](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/contributing.md) file for more information.
59
+ For local development, please see the [`contributing.md`](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/v4-lts/contributing.md) file for more information.
60
60
 
61
61
  ## Installation
62
62
 
@@ -70,21 +70,21 @@ npm install @azure/msal-browser @azure/msal-angular@latest
70
70
 
71
71
  MSAL Angular Basics
72
72
 
73
- 1. [Initialization](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/initialization.md)
74
- 1. [Public APIs](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/public-apis.md)
75
- 1. [Using redirects](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/redirects.md)
76
- 1. [Using the MsalGuard](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/msal-guard.md)
77
- 1. [Using the MsalInterceptor](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/msal-interceptor.md)
78
- 1. [Known issues](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/known-issues.md)
73
+ 1. [Initialization](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/initialization.md)
74
+ 1. [Public APIs](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/public-apis.md)
75
+ 1. [Using redirects](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/redirects.md)
76
+ 1. [Using the MsalGuard](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/v4-lts/lib/msal-angular/docs/msal-guard.md)
77
+ 1. [Using the MsalInterceptor](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/v4-lts/lib/msal-angular/docs/msal-interceptor.md)
78
+ 1. [Known issues](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/known-issues.md)
79
79
 
80
80
  Advanced Topics
81
81
 
82
- 1. [Logging](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/logging.md)
83
- 1. [Multi-Tenant](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/multi-tenant.md)
84
- 1. [Security](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/security.md)
85
- 1. [Events](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/events.md)
86
- 1. [Angular Universal and SSR](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/angular-universal.md)
87
- 1. [Performance](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/performance.md)
82
+ 1. [Logging](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/logging.md)
83
+ 1. [Multi-Tenant](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/multi-tenant.md)
84
+ 1. [Security](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/security.md)
85
+ 1. [Events](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/events.md)
86
+ 1. [Angular Universal and SSR](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/angular-universal.md)
87
+ 1. [Performance](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/performance.md)
88
88
 
89
89
  Documentation specifically for MSAL Angular v2 can be found [here](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/msal-lts/lib/msal-angular/docs/v2-docs/).
90
90
  Documentation specifically for MSAL Angular v1 can be found [here](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/msal-lts/lib/msal-angular/docs/v1-docs/).
@@ -93,9 +93,9 @@ Documentation specifically for MSAL Angular v1 can be found [here](https://githu
93
93
 
94
94
  ### Current MSAL Angular Samples
95
95
 
96
- - [Angular B2C Sample](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/samples/msal-angular-samples/angular-b2c-sample)
97
- - [Angular Modules Sample](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/samples/msal-angular-samples/angular-modules-sample)
98
- - [Angular Standalone Sample](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/samples/msal-angular-samples/angular-standalone-sample)
96
+ - [Angular B2C Sample](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/samples/msal-angular-samples/angular-b2c-sample)
97
+ - [Angular Modules Sample](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/samples/msal-angular-samples/angular-modules-sample)
98
+ - [Angular Standalone Sample](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/samples/msal-angular-samples/angular-standalone-sample)
99
99
 
100
100
  ### MSAL Angular v3 Samples
101
101
 
@@ -137,7 +137,7 @@ See [here](https://github.com/AzureAD/microsoft-authentication-library-for-js/tr
137
137
 
138
138
  ## Build and running tests
139
139
 
140
- See the [`contributing.md`](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/contributing.md) file for more information.
140
+ See the [`contributing.md`](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/v4-lts/contributing.md) file for more information.
141
141
 
142
142
  ### Building the package locally
143
143
 
@@ -180,7 +180,7 @@ This library controls how users sign-in and access services. We recommend you al
180
180
 
181
181
  ## Community Help and Support
182
182
 
183
- - [Msal Browser FAQ](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/FAQ.md) for access to our frequently asked questions
183
+ - [Msal Browser FAQ](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/v4-lts/lib/msal-browser/FAQ.md) for access to our frequently asked questions
184
184
  - [Stack Overflow](http://stackoverflow.com/questions/tagged/msal) using tag "msal".
185
185
  We highly recommend you ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before.
186
186
  - [GitHub Issues](https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/new/choose) for reporting a bug or feature requests
@@ -188,7 +188,7 @@ This library controls how users sign-in and access services. We recommend you al
188
188
 
189
189
  ## Contribute
190
190
 
191
- We enthusiastically welcome contributions and feedback. Please read the [contributing guide](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/contributing.md) before you begin.
191
+ We enthusiastically welcome contributions and feedback. Please read the [contributing guide](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/v4-lts/contributing.md) before you begin.
192
192
 
193
193
  ## Security Reporting
194
194
 
@@ -3,4 +3,4 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  export {};
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5pbnRlcmNlcHRvci5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbXNhbC5pbnRlcmNlcHRvci5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxuaW1wb3J0IHsgSHR0cFJlcXVlc3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7XG4gIFBvcHVwUmVxdWVzdCxcbiAgUmVkaXJlY3RSZXF1ZXN0LFxuICBJbnRlcmFjdGlvblR5cGUsXG4gIFNpbGVudFJlcXVlc3QsXG59IGZyb20gXCJAYXp1cmUvbXNhbC1icm93c2VyXCI7XG5pbXBvcnQgeyBNc2FsU2VydmljZSB9IGZyb20gXCIuL21zYWwuc2VydmljZVwiO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIE1zYWxJbnRlcmNlcHRvckF1dGhSZXF1ZXN0ID1cbiAgfCBPbWl0PFBvcHVwUmVxdWVzdCwgXCJzY29wZXNcIj5cbiAgfCBPbWl0PFJlZGlyZWN0UmVxdWVzdCwgXCJzY29wZXNcIj5cbiAgfCBPbWl0PFNpbGVudFJlcXVlc3QsIFwic2NvcGVzXCI+O1xuXG5leHBvcnQgdHlwZSBNc2FsSW50ZXJjZXB0b3JDb25maWd1cmF0aW9uID0ge1xuICBpbnRlcmFjdGlvblR5cGU6IEludGVyYWN0aW9uVHlwZS5Qb3B1cCB8IEludGVyYWN0aW9uVHlwZS5SZWRpcmVjdDtcbiAgcHJvdGVjdGVkUmVzb3VyY2VNYXA6IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgQXJyYXk8c3RyaW5nIHwgUHJvdGVjdGVkUmVzb3VyY2VTY29wZXM+IHwgbnVsbFxuICA+O1xuICBhdXRoUmVxdWVzdD86XG4gICAgfCBNc2FsSW50ZXJjZXB0b3JBdXRoUmVxdWVzdFxuICAgIHwgKChcbiAgICAgICAgbXNhbFNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxuICAgICAgICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuICAgICAgICBvcmlnaW5hbEF1dGhSZXF1ZXN0OiBNc2FsSW50ZXJjZXB0b3JBdXRoUmVxdWVzdFxuICAgICAgKSA9PiBNc2FsSW50ZXJjZXB0b3JBdXRoUmVxdWVzdCk7XG59O1xuXG5leHBvcnQgdHlwZSBQcm90ZWN0ZWRSZXNvdXJjZVNjb3BlcyA9IHtcbiAgaHR0cE1ldGhvZDogc3RyaW5nO1xuICBzY29wZXM6IEFycmF5PHN0cmluZz4gfCBudWxsO1xufTtcbiJdfQ==
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5pbnRlcmNlcHRvci5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbXNhbC5pbnRlcmNlcHRvci5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxuaW1wb3J0IHsgSHR0cFJlcXVlc3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7XG4gIFBvcHVwUmVxdWVzdCxcbiAgUmVkaXJlY3RSZXF1ZXN0LFxuICBJbnRlcmFjdGlvblR5cGUsXG4gIFNpbGVudFJlcXVlc3QsXG59IGZyb20gXCJAYXp1cmUvbXNhbC1icm93c2VyXCI7XG5pbXBvcnQgeyBNc2FsU2VydmljZSB9IGZyb20gXCIuL21zYWwuc2VydmljZVwiO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIE1zYWxJbnRlcmNlcHRvckF1dGhSZXF1ZXN0ID1cbiAgfCBPbWl0PFBvcHVwUmVxdWVzdCwgXCJzY29wZXNcIj5cbiAgfCBPbWl0PFJlZGlyZWN0UmVxdWVzdCwgXCJzY29wZXNcIj5cbiAgfCBPbWl0PFNpbGVudFJlcXVlc3QsIFwic2NvcGVzXCI+O1xuXG5leHBvcnQgdHlwZSBNc2FsSW50ZXJjZXB0b3JDb25maWd1cmF0aW9uID0ge1xuICBpbnRlcmFjdGlvblR5cGU6IEludGVyYWN0aW9uVHlwZS5Qb3B1cCB8IEludGVyYWN0aW9uVHlwZS5SZWRpcmVjdDtcbiAgcHJvdGVjdGVkUmVzb3VyY2VNYXA6IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgQXJyYXk8c3RyaW5nIHwgUHJvdGVjdGVkUmVzb3VyY2VTY29wZXM+IHwgbnVsbFxuICA+O1xuICBhdXRoUmVxdWVzdD86XG4gICAgfCBNc2FsSW50ZXJjZXB0b3JBdXRoUmVxdWVzdFxuICAgIHwgKChcbiAgICAgICAgbXNhbFNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxuICAgICAgICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuICAgICAgICBvcmlnaW5hbEF1dGhSZXF1ZXN0OiBNc2FsSW50ZXJjZXB0b3JBdXRoUmVxdWVzdFxuICAgICAgKSA9PiBNc2FsSW50ZXJjZXB0b3JBdXRoUmVxdWVzdCk7XG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgZW5hYmxlcyBzdHJpY3RlciwgbW9yZSBjb3JyZWN0IFVSTCBjb21wb25lbnQgcGF0dGVybiBtYXRjaGluZyBmb3JcbiAgICogYHByb3RlY3RlZFJlc291cmNlTWFwYCBlbnRyaWVzLiBTdHJpY3QgbWF0Y2hpbmcgdXNlcyBhbmNob3JlZCByZWdleCBwYXR0ZXJucyBhbmRcbiAgICogdHJlYXRzIG1ldGFjaGFyYWN0ZXJzIChpbmNsdWRpbmcgYC5gKSBhcyBsaXRlcmFscywgc28gcGF0dGVybnMgbWF0Y2ggb25seSB0aGVpclxuICAgKiBpbnRlbmRlZCBzdHJpbmdzLiBXaWxkY2FyZHMgc3RpbGwgYXBwbHksIGJ1dCBob3N0LWNvbXBvbmVudCB3aWxkY2FyZHNcbiAgICogYXJlIGNvbnN0cmFpbmVkIHRvIGEgc2luZ2xlIEROUyBsYWJlbC5cbiAgICpcbiAgICogV2hlbiBgZmFsc2VgIG9yIG9taXR0ZWQgKGRlZmF1bHQpLCB0aGUgbGVnYWN5IG1hdGNoaW5nIGJlaGF2aW91ciBpcyBwcmVzZXJ2ZWQgZm9yXG4gICAqIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICAgKlxuICAgKiAqKkZvcndhcmQtbG9va2luZyBub3RlOioqIEluIG1zYWwtYW5ndWxhciB2NSwgYHN0cmljdE1hdGNoaW5nYCB3aWxsIGJlIGB0cnVlYCBieVxuICAgKiBkZWZhdWx0LiBBcHBsaWNhdGlvbnMgdGhhdCByZWx5IG9uIHRoZSBsZWdhY3kgbWF0Y2hpbmcgYmVoYXZpb3VyIHNob3VsZCBtaWdyYXRlIHRvXG4gICAqIHN0cmljdCBtYXRjaGluZyBwYXR0ZXJucyBiZWZvcmUgdXBncmFkaW5nIHRvIHY1LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc3RyaWN0TWF0Y2hpbmc/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgUHJvdGVjdGVkUmVzb3VyY2VTY29wZXMgPSB7XG4gIGh0dHBNZXRob2Q6IHN0cmluZztcbiAgc2NvcGVzOiBBcnJheTxzdHJpbmc+IHwgbnVsbDtcbn07XG4iXX0=
@@ -181,8 +181,23 @@ export class MsalInterceptor {
181
181
  for (const property of urlProperties) {
182
182
  if (keyComponents[property]) {
183
183
  const decodedInput = decodeURIComponent(keyComponents[property]);
184
- if (!StringUtils.matchPattern(decodedInput, endpointComponents[property])) {
185
- return false;
184
+ if (this.msalInterceptorConfig.strictMatching) {
185
+ /*
186
+ * Strict matching: anchored patterns, metacharacters are literals,
187
+ * host wildcards do not span dot separators.
188
+ */
189
+ const component = property === "pathname"
190
+ ? "path"
191
+ : property;
192
+ if (!StringUtils.matchPatternStrict(decodedInput, endpointComponents[property], { component })) {
193
+ return false;
194
+ }
195
+ }
196
+ else {
197
+ // Legacy matching: preserved exactly for backwards compatibility.
198
+ if (!StringUtils.matchPattern(decodedInput, endpointComponents[property])) {
199
+ return false;
200
+ }
186
201
  }
187
202
  }
188
203
  }
@@ -267,4 +282,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
267
282
  type: Inject,
268
283
  args: [DOCUMENT]
269
284
  }] }]; } });
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tc2FsLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBWSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU9yRCxPQUFPLEVBR0wsNkJBQTZCLEVBQzdCLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsV0FBVyxHQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFjLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUXJFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7QUFHdEQsTUFBTSxPQUFPLGVBQWU7SUFHMUIsWUFFVSxxQkFBbUQsRUFDbkQsV0FBd0IsRUFDeEIsUUFBa0IsRUFDbEIsb0JBQTBDO0lBQ2xELGlIQUFpSDtJQUMvRixRQUFjO1FBTHhCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBOEI7UUFDbkQsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBSWxELElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBb0IsQ0FBQztJQUN4QyxDQUFDO0lBRUQsU0FBUyxDQUNQLEdBQXFCLEVBQUUseURBQXlEO0lBQ2hGLElBQWlCO0lBQ2pCLDhEQUE4RDs7UUFFOUQsSUFDRSxJQUFJLENBQUMscUJBQXFCLENBQUMsZUFBZSxLQUFLLGVBQWUsQ0FBQyxLQUFLO1lBQ3BFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLEtBQUss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WUFDL0IsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMvQixJQUFJLENBQUMsV0FBVztxQkFDYixTQUFTLEVBQUU7cUJBQ1gsT0FBTyxDQUNOLCtEQUErRCxDQUNoRSxDQUFDO2FBQ0w7WUFDRCw2Q0FBNkM7WUFDN0MsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM1QjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7NkdBaldVLGVBQWUsa0JBSWhCLHVCQUF1QixvR0FNdkIsUUFBUTtpSEFWUCxlQUFlOzRGQUFmLGVBQWU7a0JBRDNCLFVBQVU7OzBCQUtOLE1BQU07MkJBQUMsdUJBQXVCOzswQkFNOUIsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBMb2NhdGlvbiwgRE9DVU1FTlQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICBIdHRwUmVxdWVzdCxcbiAgSHR0cEhhbmRsZXIsXG4gIEh0dHBFdmVudCxcbiAgSHR0cEludGVyY2VwdG9yLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxuaW1wb3J0IHtcbiAgQWNjb3VudEluZm8sXG4gIEF1dGhlbnRpY2F0aW9uUmVzdWx0LFxuICBCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvcixcbiAgSW50ZXJhY3Rpb25TdGF0dXMsXG4gIEludGVyYWN0aW9uVHlwZSxcbiAgU3RyaW5nVXRpbHMsXG59IGZyb20gXCJAYXp1cmUvbXNhbC1icm93c2VyXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBFTVBUWSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCBjYXRjaEVycm9yLCB0YWtlLCBmaWx0ZXIgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSBcIi4vbXNhbC5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICBNc2FsSW50ZXJjZXB0b3JBdXRoUmVxdWVzdCxcbiAgTXNhbEludGVyY2VwdG9yQ29uZmlndXJhdGlvbixcbiAgUHJvdGVjdGVkUmVzb3VyY2VTY29wZXMsXG59IGZyb20gXCIuL21zYWwuaW50ZXJjZXB0b3IuY29uZmlnXCI7XG5pbXBvcnQgeyBNc2FsQnJvYWRjYXN0U2VydmljZSB9IGZyb20gXCIuL21zYWwuYnJvYWRjYXN0LnNlcnZpY2VcIjtcbmltcG9ydCB7IE1TQUxfSU5URVJDRVBUT1JfQ09ORklHIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNc2FsSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICBwcml2YXRlIF9kb2N1bWVudD86IERvY3VtZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTVNBTF9JTlRFUkNFUFRPUl9DT05GSUcpXG4gICAgcHJpdmF0ZSBtc2FsSW50ZXJjZXB0b3JDb25maWc6IE1zYWxJbnRlcmNlcHRvckNvbmZpZ3VyYXRpb24sXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogTXNhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBtc2FsQnJvYWRjYXN0U2VydmljZTogTXNhbEJyb2FkY2FzdFNlcnZpY2UsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBkb2N1bWVudD86IGFueVxuICApIHtcbiAgICB0aGlzLl9kb2N1bWVudCA9IGRvY3VtZW50IGFzIERvY3VtZW50O1xuICB9XG5cbiAgaW50ZXJjZXB0KFxuICAgIHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgbmV4dDogSHR0cEhhbmRsZXJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuaW50ZXJhY3Rpb25UeXBlICE9PSBJbnRlcmFjdGlvblR5cGUuUG9wdXAgJiZcbiAgICAgIHRoaXMubXNhbEludGVyY2VwdG9yQ29uZmlnLmludGVyYWN0aW9uVHlwZSAhPT0gSW50ZXJhY3Rpb25UeXBlLlJlZGlyZWN0XG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3IoXG4gICAgICAgIFwiaW52YWxpZF9pbnRlcmFjdGlvbl90eXBlXCIsXG4gICAgICAgIFwiSW52YWxpZCBpbnRlcmFjdGlvbiB0eXBlIHByb3ZpZGVkIHRvIE1TQUwgSW50ZXJjZXB0b3IuIEludGVyYWN0aW9uVHlwZS5Qb3B1cCwgSW50ZXJhY3Rpb25UeXBlLlJlZGlyZWN0IG11c3QgYmUgcHJvdmlkZWQgaW4gdGhlIG1zYWxJbnRlcmNlcHRvckNvbmZpZ3VyYXRpb25cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldExvZ2dlcigpLnZlcmJvc2UoXCJNU0FMIEludGVyY2VwdG9yIGFjdGl2YXRlZFwiKTtcbiAgICBjb25zdCBzY29wZXMgPSB0aGlzLmdldFNjb3Blc0ZvckVuZHBvaW50KHJlcS51cmwsIHJlcS5tZXRob2QpO1xuXG4gICAgLy8gSWYgbm8gc2NvcGVzIGZvciBlbmRwb2ludCwgZG9lcyBub3QgYWNxdWlyZSB0b2tlblxuICAgIGlmICghc2NvcGVzIHx8IHNjb3Blcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgICAgLmdldExvZ2dlcigpXG4gICAgICAgIC52ZXJib3NlKFwiSW50ZXJjZXB0b3IgLSBubyBzY29wZXMgZm9yIGVuZHBvaW50XCIpO1xuICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XG4gICAgfVxuXG4gICAgLy8gU2V0cyBhY2NvdW50IGFzIGFjdGl2ZSBhY2NvdW50IG9yIGZpcnN0IGFjY291bnRcbiAgICBsZXQgYWNjb3VudDogQWNjb3VudEluZm87XG4gICAgaWYgKCEhdGhpcy5hdXRoU2VydmljZS5pbnN0YW5jZS5nZXRBY3RpdmVBY2NvdW50KCkpIHtcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgICAgLmdldExvZ2dlcigpXG4gICAgICAgIC52ZXJib3NlKFwiSW50ZXJjZXB0b3IgLSBhY3RpdmUgYWNjb3VudCBzZWxlY3RlZFwiKTtcbiAgICAgIGFjY291bnQgPSB0aGlzLmF1dGhTZXJ2aWNlLmluc3RhbmNlLmdldEFjdGl2ZUFjY291bnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgICAgLnZlcmJvc2UoXCJJbnRlcmNlcHRvciAtIG5vIGFjdGl2ZSBhY2NvdW50LCBmYWxsYmFjayB0byBmaXJzdCBhY2NvdW50XCIpO1xuICAgICAgYWNjb3VudCA9IHRoaXMuYXV0aFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWxsQWNjb3VudHMoKVswXTtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRoUmVxdWVzdCA9XG4gICAgICB0eXBlb2YgdGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuYXV0aFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/IHRoaXMubXNhbEludGVyY2VwdG9yQ29uZmlnLmF1dGhSZXF1ZXN0KHRoaXMuYXV0aFNlcnZpY2UsIHJlcSwge1xuICAgICAgICAgICAgYWNjb3VudDogYWNjb3VudCxcbiAgICAgICAgICB9KVxuICAgICAgICA6IHsgLi4udGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuYXV0aFJlcXVlc3QsIGFjY291bnQgfTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5nZXRMb2dnZXIoKVxuICAgICAgLmluZm8oYEludGVyY2VwdG9yIC0gJHtzY29wZXMubGVuZ3RofSBzY29wZXMgZm91bmQgZm9yIGVuZHBvaW50YCk7XG4gICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgLmdldExvZ2dlcigpXG4gICAgICAuaW5mb1BpaShgSW50ZXJjZXB0b3IgLSBbJHtzY29wZXN9XSBzY29wZXMgZm91bmQgZm9yICR7cmVxLnVybH1gKTtcblxuICAgIHJldHVybiB0aGlzLmFjcXVpcmVUb2tlbihhdXRoUmVxdWVzdCwgc2NvcGVzLCBhY2NvdW50KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXN1bHQ6IEF1dGhlbnRpY2F0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgICAgICAudmVyYm9zZShcIkludGVyY2VwdG9yIC0gc2V0dGluZyBhdXRob3JpemF0aW9uIGhlYWRlcnNcIik7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSByZXEuaGVhZGVycy5zZXQoXG4gICAgICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICAgICAgYEJlYXJlciAke3Jlc3VsdC5hY2Nlc3NUb2tlbn1gXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdENsb25lID0gcmVxLmNsb25lKHsgaGVhZGVycyB9KTtcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3RDbG9uZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIGFjcXVpcmUgdG9rZW4gc2lsZW50bHkuIEludm9rZSBpbnRlcmFjdGlvbiBpZiBhY3F1aXJlVG9rZW5TaWxlbnQgcmVqZWN0ZWQgd2l0aCBlcnJvciBvciByZXNvbHZlZCB3aXRoIG51bGwgYWNjZXNzIHRva2VuXG4gICAqIEBwYXJhbSBhdXRoUmVxdWVzdCBSZXF1ZXN0XG4gICAqIEBwYXJhbSBzY29wZXMgQXJyYXkgb2Ygc2NvcGVzIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcGFyYW0gYWNjb3VudCBBY2NvdW50XG4gICAqIEByZXR1cm5zIEF1dGhlbnRpY2F0aW9uIHJlc3VsdFxuICAgKi9cbiAgcHJpdmF0ZSBhY3F1aXJlVG9rZW4oXG4gICAgYXV0aFJlcXVlc3Q6IE1zYWxJbnRlcmNlcHRvckF1dGhSZXF1ZXN0LFxuICAgIHNjb3Blczogc3RyaW5nW10sXG4gICAgYWNjb3VudDogQWNjb3VudEluZm9cbiAgKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGlvblJlc3VsdD4ge1xuICAgIC8vIE5vdGU6IEZvciBNU0EgYWNjb3VudHMsIGluY2x1ZGUgb3BlbmlkIHNjb3BlIHdoZW4gY2FsbGluZyBhY3F1aXJlVG9rZW5TaWxlbnQgdG8gcmV0dXJuIGlkVG9rZW5cbiAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZVxuICAgICAgLmFjcXVpcmVUb2tlblNpbGVudCh7IC4uLmF1dGhSZXF1ZXN0LCBzY29wZXMsIGFjY291bnQgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgICAgICAgIC5lcnJvcihcbiAgICAgICAgICAgICAgXCJJbnRlcmNlcHRvciAtIGFjcXVpcmVUb2tlblNpbGVudCByZWplY3RlZCB3aXRoIGVycm9yLiBJbnZva2luZyBpbnRlcmFjdGlvbiB0byByZXNvbHZlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB0aGlzLm1zYWxCcm9hZGNhc3RTZXJ2aWNlLmluUHJvZ3Jlc3MkLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKChzdGF0dXM6IEludGVyYWN0aW9uU3RhdHVzKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IEludGVyYWN0aW9uU3RhdHVzLk5vbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hY3F1aXJlVG9rZW5JbnRlcmFjdGl2ZWx5KGF1dGhSZXF1ZXN0LCBzY29wZXMpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubXNhbEJyb2FkY2FzdFNlcnZpY2UuaW5Qcm9ncmVzcyQucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoc3RhdHVzOiBJbnRlcmFjdGlvblN0YXR1cykgPT5cbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzID09PSBJbnRlcmFjdGlvblN0YXR1cy5Ob25lXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmFjcXVpcmVUb2tlbihhdXRoUmVxdWVzdCwgc2NvcGVzLCBhY2NvdW50KSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgocmVzdWx0OiBBdXRoZW50aWNhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmICghcmVzdWx0LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAgICAgICAgIC5nZXRMb2dnZXIoKVxuICAgICAgICAgICAgICAuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJJbnRlcmNlcHRvciAtIGFjcXVpcmVUb2tlblNpbGVudCByZXNvbHZlZCB3aXRoIG51bGwgYWNjZXNzIHRva2VuLiBLbm93biBpc3N1ZSB3aXRoIEIyQyB0ZW5hbnRzLCBpbnZva2luZyBpbnRlcmFjdGlvbiB0byByZXNvbHZlLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tc2FsQnJvYWRjYXN0U2VydmljZS5pblByb2dyZXNzJC5waXBlKFxuICAgICAgICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgICAgICAgKHN0YXR1czogSW50ZXJhY3Rpb25TdGF0dXMpID0+IHN0YXR1cyA9PT0gSW50ZXJhY3Rpb25TdGF0dXMuTm9uZVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmFjcXVpcmVUb2tlbkludGVyYWN0aXZlbHkoYXV0aFJlcXVlc3QsIHNjb3BlcylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG9mKHJlc3VsdCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZSBpbnRlcmFjdGlvbiBmb3IgdGhlIGdpdmVuIHNldCBvZiBzY29wZXNcbiAgICogQHBhcmFtIGF1dGhSZXF1ZXN0IFJlcXVlc3RcbiAgICogQHBhcmFtIHNjb3BlcyBBcnJheSBvZiBzY29wZXMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIFJlc3VsdCBmcm9tIHRoZSBpbnRlcmFjdGl2ZSByZXF1ZXN0XG4gICAqL1xuICBwcml2YXRlIGFjcXVpcmVUb2tlbkludGVyYWN0aXZlbHkoXG4gICAgYXV0aFJlcXVlc3Q6IE1zYWxJbnRlcmNlcHRvckF1dGhSZXF1ZXN0LFxuICAgIHNjb3Blczogc3RyaW5nW11cbiAgKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGlvblJlc3VsdD4ge1xuICAgIGlmICh0aGlzLm1zYWxJbnRlcmNlcHRvckNvbmZpZy5pbnRlcmFjdGlvblR5cGUgPT09IEludGVyYWN0aW9uVHlwZS5Qb3B1cCkge1xuICAgICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgICAgLnZlcmJvc2UoXG4gICAgICAgICAgXCJJbnRlcmNlcHRvciAtIGVycm9yIGFjcXVpcmluZyB0b2tlbiBzaWxlbnRseSwgYWNxdWlyaW5nIGJ5IHBvcHVwXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmFjcXVpcmVUb2tlblBvcHVwKHsgLi4uYXV0aFJlcXVlc3QsIHNjb3BlcyB9KTtcbiAgICB9XG4gICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgLmdldExvZ2dlcigpXG4gICAgICAudmVyYm9zZShcbiAgICAgICAgXCJJbnRlcmNlcHRvciAtIGVycm9yIGFjcXVpcmluZyB0b2tlbiBzaWxlbnRseSwgYWNxdWlyaW5nIGJ5IHJlZGlyZWN0XCJcbiAgICAgICk7XG4gICAgY29uc3QgcmVkaXJlY3RTdGFydFBhZ2UgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmFjcXVpcmVUb2tlblJlZGlyZWN0KHtcbiAgICAgIC4uLmF1dGhSZXF1ZXN0LFxuICAgICAgc2NvcGVzLFxuICAgICAgcmVkaXJlY3RTdGFydFBhZ2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgLyoqXG4gICAqIExvb2tzIHVwIHRoZSBzY29wZXMgZm9yIHRoZSBnaXZlbiBlbmRwb2ludCBmcm9tIHRoZSBwcm90ZWN0ZWRSZXNvdXJjZU1hcFxuICAgKiBAcGFyYW0gZW5kcG9pbnQgVXJsIG9mIHRoZSByZXF1ZXN0XG4gICAqIEBwYXJhbSBodHRwTWV0aG9kIEh0dHAgbWV0aG9kIG9mIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHNjb3Blcywgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICpcbiAgICovXG4gIHByaXZhdGUgZ2V0U2NvcGVzRm9yRW5kcG9pbnQoXG4gICAgZW5kcG9pbnQ6IHN0cmluZyxcbiAgICBodHRwTWV0aG9kOiBzdHJpbmdcbiAgKTogQXJyYXk8c3RyaW5nPiB8IG51bGwge1xuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5nZXRMb2dnZXIoKVxuICAgICAgLnZlcmJvc2UoXCJJbnRlcmNlcHRvciAtIGdldHRpbmcgc2NvcGVzIGZvciBlbmRwb2ludFwiKTtcblxuICAgIC8vIEVuc3VyZXMgZW5kcG9pbnRzIGFuZCBwcm90ZWN0ZWQgcmVzb3VyY2VzIGNvbXBhcmVkIGFyZSBub3JtYWxpemVkXG4gICAgY29uc3Qgbm9ybWFsaXplZEVuZHBvaW50ID0gdGhpcy5sb2NhdGlvbi5ub3JtYWxpemUoZW5kcG9pbnQpO1xuXG4gICAgY29uc3QgcHJvdGVjdGVkUmVzb3VyY2VzQXJyYXkgPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcucHJvdGVjdGVkUmVzb3VyY2VNYXAua2V5cygpXG4gICAgKTtcblxuICAgIGNvbnN0IG1hdGNoaW5nUHJvdGVjdGVkUmVzb3VyY2VzID0gdGhpcy5tYXRjaFJlc291cmNlc1RvRW5kcG9pbnQoXG4gICAgICBwcm90ZWN0ZWRSZXNvdXJjZXNBcnJheSxcbiAgICAgIG5vcm1hbGl6ZWRFbmRwb2ludFxuICAgICk7XG5cbiAgICBpZiAobWF0Y2hpbmdQcm90ZWN0ZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMubWF0Y2hTY29wZXNUb0VuZHBvaW50KFxuICAgICAgICB0aGlzLm1zYWxJbnRlcmNlcHRvckNvbmZpZy5wcm90ZWN0ZWRSZXNvdXJjZU1hcCxcbiAgICAgICAgbWF0Y2hpbmdQcm90ZWN0ZWRSZXNvdXJjZXMsXG4gICAgICAgIGh0dHBNZXRob2RcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgcmVzb3VyY2UgZW5kcG9pbnRzIHRoYXQgbWF0Y2ggcmVxdWVzdCBlbmRwb2ludFxuICAgKiBAcGFyYW0gcHJvdGVjdGVkUmVzb3VyY2VzRW5kcG9pbnRzXG4gICAqIEBwYXJhbSBlbmRwb2ludFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSBtYXRjaFJlc291cmNlc1RvRW5kcG9pbnQoXG4gICAgcHJvdGVjdGVkUmVzb3VyY2VzRW5kcG9pbnRzOiBzdHJpbmdbXSxcbiAgICBlbmRwb2ludDogc3RyaW5nXG4gICk6IEFycmF5PHN0cmluZz4ge1xuICAgIGNvbnN0IG1hdGNoaW5nUmVzb3VyY2VzOiBBcnJheTxzdHJpbmc+ID0gW107XG5cbiAgICBwcm90ZWN0ZWRSZXNvdXJjZXNFbmRwb2ludHMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0gdGhpcy5sb2NhdGlvbi5ub3JtYWxpemUoa2V5KTtcblxuICAgICAgLy8gR2V0IHVybCBjb21wb25lbnRzXG4gICAgICBjb25zdCBhYnNvbHV0ZUtleSA9IHRoaXMuZ2V0QWJzb2x1dGVVcmwobm9ybWFsaXplZEtleSk7XG4gICAgICBjb25zdCBrZXlDb21wb25lbnRzID0gbmV3IFVSTChhYnNvbHV0ZUtleSk7XG4gICAgICBjb25zdCBhYnNvbHV0ZUVuZHBvaW50ID0gdGhpcy5nZXRBYnNvbHV0ZVVybChlbmRwb2ludCk7XG4gICAgICBjb25zdCBlbmRwb2ludENvbXBvbmVudHMgPSBuZXcgVVJMKGFic29sdXRlRW5kcG9pbnQpO1xuXG4gICAgICBpZiAodGhpcy5jaGVja1VybENvbXBvbmVudHMoa2V5Q29tcG9uZW50cywgZW5kcG9pbnRDb21wb25lbnRzKSkge1xuICAgICAgICBtYXRjaGluZ1Jlc291cmNlcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWF0Y2hpbmdSZXNvdXJjZXM7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZXMgVVJMIHNlZ21lbnRzIGJldHdlZW4ga2V5IGFuZCBlbmRwb2ludFxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEBwYXJhbSBlbmRwb2ludFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1VybENvbXBvbmVudHMoXG4gICAga2V5Q29tcG9uZW50czogVVJMLFxuICAgIGVuZHBvaW50Q29tcG9uZW50czogVVJMXG4gICk6IGJvb2xlYW4ge1xuICAgIC8vIFVSTCBwcm9wZXJ0aWVzIGZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTFxuICAgIGNvbnN0IHVybFByb3BlcnRpZXMgPSBbXCJwcm90b2NvbFwiLCBcImhvc3RcIiwgXCJwYXRobmFtZVwiLCBcInNlYXJjaFwiLCBcImhhc2hcIl07XG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHVybFByb3BlcnRpZXMpIHtcbiAgICAgIGlmIChrZXlDb21wb25lbnRzW3Byb3BlcnR5XSkge1xuICAgICAgICBjb25zdCBkZWNvZGVkSW5wdXQgPSBkZWNvZGVVUklDb21wb25lbnQoa2V5Q29tcG9uZW50c1twcm9wZXJ0eV0pO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIVN0cmluZ1V0aWxzLm1hdGNoUGF0dGVybihkZWNvZGVkSW5wdXQsIGVuZHBvaW50Q29tcG9uZW50c1twcm9wZXJ0eV0pXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgcmVsYXRpdmUgdXJscyB0byBhYnNvbHV0ZSB1cmxzXG4gICAqIEBwYXJhbSB1cmxcbiAgICogQHJldHVybnNcbiAgICovXG4gIHByaXZhdGUgZ2V0QWJzb2x1dGVVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgcmV0dXJuIGxpbmsuaHJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBzY29wZXMgZnJvbSBmaXJzdCBtYXRjaGluZyBlbmRwb2ludCB3aXRoIEhUVFAgbWV0aG9kIHRoYXQgbWF0Y2hlcyByZXF1ZXN0XG4gICAqIEBwYXJhbSBwcm90ZWN0ZWRSZXNvdXJjZU1hcCBQcm90ZWN0ZWQgcmVzb3VyY2UgbWFwXG4gICAqIEBwYXJhbSBlbmRwb2ludEFycmF5IEFycmF5IG9mIHJlc291cmNlcyB0aGF0IG1hdGNoIHJlcXVlc3QgZW5kcG9pbnRcbiAgICogQHBhcmFtIGh0dHBNZXRob2QgSHR0cCBtZXRob2Qgb2YgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnNcbiAgICovXG4gIHByaXZhdGUgbWF0Y2hTY29wZXNUb0VuZHBvaW50KFxuICAgIHByb3RlY3RlZFJlc291cmNlTWFwOiBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICBBcnJheTxzdHJpbmcgfCBQcm90ZWN0ZWRSZXNvdXJjZVNjb3Blcz4gfCBudWxsXG4gICAgPixcbiAgICBlbmRwb2ludEFycmF5OiBzdHJpbmdbXSxcbiAgICBodHRwTWV0aG9kOiBzdHJpbmdcbiAgKTogQXJyYXk8c3RyaW5nPiB8IG51bGwge1xuICAgIGNvbnN0IGFsbE1hdGNoZWRTY29wZXMgPSBbXTtcblxuICAgIC8vIENoZWNrIGVhY2ggbWF0Y2hlZCBlbmRwb2ludCBmb3IgbWF0Y2hpbmcgSHR0cE1ldGhvZCBhbmQgc2NvcGVzXG4gICAgZW5kcG9pbnRBcnJheS5mb3JFYWNoKChtYXRjaGVkRW5kcG9pbnQpID0+IHtcbiAgICAgIGNvbnN0IHNjb3Blc0ZvckVuZHBvaW50ID0gW107XG4gICAgICBjb25zdCBtZXRob2RBbmRTY29wZXNBcnJheSA9IHByb3RlY3RlZFJlc291cmNlTWFwLmdldChtYXRjaGVkRW5kcG9pbnQpO1xuXG4gICAgICAvLyBSZXR1cm4gaWYgcmVzb3VyY2UgaXMgdW5wcm90ZWN0ZWRcbiAgICAgIGlmIChtZXRob2RBbmRTY29wZXNBcnJheSA9PT0gbnVsbCkge1xuICAgICAgICBhbGxNYXRjaGVkU2NvcGVzLnB1c2gobnVsbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbWV0aG9kQW5kU2NvcGVzQXJyYXkuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgLy8gRW50cnkgaXMgZWl0aGVyIGFycmF5IG9mIHNjb3BlcyBvciBQcm90ZWN0ZWRSZXNvdXJjZVNjb3BlcyBvYmplY3RcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHNjb3Blc0ZvckVuZHBvaW50LnB1c2goZW50cnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEVuc3VyZSBtZXRob2RzIGJlaW5nIGNvbXBhcmVkIGFyZSBub3JtYWxpemVkXG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlcXVlc3RNZXRob2QgPSBodHRwTWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc291cmNlTWV0aG9kID0gZW50cnkuaHR0cE1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIC8vIE1ldGhvZCBpbiBwcm90ZWN0ZWRSZXNvdXJjZU1hcCBtYXRjaGVzIHJlcXVlc3QgaHR0cCBtZXRob2RcbiAgICAgICAgICBpZiAobm9ybWFsaXplZFJlc291cmNlTWV0aG9kID09PSBub3JtYWxpemVkUmVxdWVzdE1ldGhvZCkge1xuICAgICAgICAgICAgLy8gVmFsaWRhdGUgaWYgc2NvcGVzIGNvbWVzIG51bGwgdG8gdW5wcm90ZWN0IHRoZSByZXNvdXJjZSBpbiBhIGNlcnRhaW4gaHR0cCBtZXRob2RcbiAgICAgICAgICAgIGlmIChlbnRyeS5zY29wZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgYWxsTWF0Y2hlZFNjb3Blcy5wdXNoKG51bGwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW50cnkuc2NvcGVzLmZvckVhY2goKHNjb3BlKSA9PiB7XG4gICAgICAgICAgICAgICAgc2NvcGVzRm9yRW5kcG9pbnQucHVzaChzY29wZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIE9ubHkgYWRkIHRvIGFsbCBzY29wZXMgaWYgc2NvcGVzIGZvciBlbmRwb2ludCBhbmQgbWV0aG9kIGlzIGZvdW5kXG4gICAgICBpZiAoc2NvcGVzRm9yRW5kcG9pbnQubGVuZ3RoID4gMCkge1xuICAgICAgICBhbGxNYXRjaGVkU2NvcGVzLnB1c2goc2NvcGVzRm9yRW5kcG9pbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGFsbE1hdGNoZWRTY29wZXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGFsbE1hdGNoZWRTY29wZXMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAgICAgLmdldExvZ2dlcigpXG4gICAgICAgICAgLndhcm5pbmcoXG4gICAgICAgICAgICBcIkludGVyY2VwdG9yIC0gTW9yZSB0aGFuIDEgbWF0Y2hpbmcgc2NvcGVzIGZvciBlbmRwb2ludCBmb3VuZC5cIlxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyBSZXR1cm5zIHNjb3BlcyBmb3IgZmlyc3QgbWF0Y2hpbmcgZW5kcG9pbnRcbiAgICAgIHJldHVybiBhbGxNYXRjaGVkU2NvcGVzWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tc2FsLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBWSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU9yRCxPQUFPLEVBR0wsNkJBQTZCLEVBQzdCLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsV0FBVyxHQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFjLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUXJFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7QUFHdEQsTUFBTSxPQUFPLGVBQWU7SUFHMUIsWUFFVSxxQkFBbUQsRUFDbkQsV0FBd0IsRUFDeEIsUUFBa0IsRUFDbEIsb0JBQTBDO0lBQ2xELGlIQUFpSDtJQUMvRixRQUFjO1FBTHhCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBOEI7UUFDbkQsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBSWxELElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBb0IsQ0FBQztJQUN4QyxDQUFDO0lBRUQsU0FBUyxDQUNQLEdBQXFCLEVBQUUseURBQXlEO0lBQ2hGLElBQWlCO0lBQ2pCLDhEQUE4RDs7UUFFOUQsSUFDRSxJQUFJLENBQUMscUJBQXFCLENBQUMsZUFBZSxLQUFLLGVBQWUsQ0FBQyxLQUFLO1lBQ3BFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLEtBQUss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QUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0NBQzdCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDaEMsQ0FBQyxDQUFDLENBQUM7eUJBQ0o7cUJBQ0Y7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILG9FQUFvRTtZQUNwRSxJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2hDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQzFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMvQixJQUFJLENBQUMsV0FBVztxQkFDYixTQUFTLEVBQUU7cUJBQ1gsT0FBTyxDQUNOLCtEQUErRCxDQUNoRSxDQUFDO2FBQ0w7WUFDRCw2Q0FBNkM7WUFDN0MsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM1QjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7NkdBelhVLGVBQWUsa0JBSWhCLHVCQUF1QixvR0FNdkIsUUFBUTtpSEFWUCxlQUFlOzRGQUFmLGVBQWU7a0JBRDNCLFVBQVU7OzBCQUtOLE1BQU07MkJBQUMsdUJBQXVCOzswQkFNOUIsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBMb2NhdGlvbiwgRE9DVU1FTlQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICBIdHRwUmVxdWVzdCxcbiAgSHR0cEhhbmRsZXIsXG4gIEh0dHBFdmVudCxcbiAgSHR0cEludGVyY2VwdG9yLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxuaW1wb3J0IHtcbiAgQWNjb3VudEluZm8sXG4gIEF1dGhlbnRpY2F0aW9uUmVzdWx0LFxuICBCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvcixcbiAgSW50ZXJhY3Rpb25TdGF0dXMsXG4gIEludGVyYWN0aW9uVHlwZSxcbiAgU3RyaW5nVXRpbHMsXG59IGZyb20gXCJAYXp1cmUvbXNhbC1icm93c2VyXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBFTVBUWSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCBjYXRjaEVycm9yLCB0YWtlLCBmaWx0ZXIgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSBcIi4vbXNhbC5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICBNc2FsSW50ZXJjZXB0b3JBdXRoUmVxdWVzdCxcbiAgTXNhbEludGVyY2VwdG9yQ29uZmlndXJhdGlvbixcbiAgUHJvdGVjdGVkUmVzb3VyY2VTY29wZXMsXG59IGZyb20gXCIuL21zYWwuaW50ZXJjZXB0b3IuY29uZmlnXCI7XG5pbXBvcnQgeyBNc2FsQnJvYWRjYXN0U2VydmljZSB9IGZyb20gXCIuL21zYWwuYnJvYWRjYXN0LnNlcnZpY2VcIjtcbmltcG9ydCB7IE1TQUxfSU5URVJDRVBUT1JfQ09ORklHIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNc2FsSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICBwcml2YXRlIF9kb2N1bWVudD86IERvY3VtZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTVNBTF9JTlRFUkNFUFRPUl9DT05GSUcpXG4gICAgcHJpdmF0ZSBtc2FsSW50ZXJjZXB0b3JDb25maWc6IE1zYWxJbnRlcmNlcHRvckNvbmZpZ3VyYXRpb24sXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogTXNhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBtc2FsQnJvYWRjYXN0U2VydmljZTogTXNhbEJyb2FkY2FzdFNlcnZpY2UsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBkb2N1bWVudD86IGFueVxuICApIHtcbiAgICB0aGlzLl9kb2N1bWVudCA9IGRvY3VtZW50IGFzIERvY3VtZW50O1xuICB9XG5cbiAgaW50ZXJjZXB0KFxuICAgIHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgbmV4dDogSHR0cEhhbmRsZXJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuaW50ZXJhY3Rpb25UeXBlICE9PSBJbnRlcmFjdGlvblR5cGUuUG9wdXAgJiZcbiAgICAgIHRoaXMubXNhbEludGVyY2VwdG9yQ29uZmlnLmludGVyYWN0aW9uVHlwZSAhPT0gSW50ZXJhY3Rpb25UeXBlLlJlZGlyZWN0XG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3IoXG4gICAgICAgIFwiaW52YWxpZF9pbnRlcmFjdGlvbl90eXBlXCIsXG4gICAgICAgIFwiSW52YWxpZCBpbnRlcmFjdGlvbiB0eXBlIHByb3ZpZGVkIHRvIE1TQUwgSW50ZXJjZXB0b3IuIEludGVyYWN0aW9uVHlwZS5Qb3B1cCwgSW50ZXJhY3Rpb25UeXBlLlJlZGlyZWN0IG11c3QgYmUgcHJvdmlkZWQgaW4gdGhlIG1zYWxJbnRlcmNlcHRvckNvbmZpZ3VyYXRpb25cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldExvZ2dlcigpLnZlcmJvc2UoXCJNU0FMIEludGVyY2VwdG9yIGFjdGl2YXRlZFwiKTtcbiAgICBjb25zdCBzY29wZXMgPSB0aGlzLmdldFNjb3Blc0ZvckVuZHBvaW50KHJlcS51cmwsIHJlcS5tZXRob2QpO1xuXG4gICAgLy8gSWYgbm8gc2NvcGVzIGZvciBlbmRwb2ludCwgZG9lcyBub3QgYWNxdWlyZSB0b2tlblxuICAgIGlmICghc2NvcGVzIHx8IHNjb3Blcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgICAgLmdldExvZ2dlcigpXG4gICAgICAgIC52ZXJib3NlKFwiSW50ZXJjZXB0b3IgLSBubyBzY29wZXMgZm9yIGVuZHBvaW50XCIpO1xuICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XG4gICAgfVxuXG4gICAgLy8gU2V0cyBhY2NvdW50IGFzIGFjdGl2ZSBhY2NvdW50IG9yIGZpcnN0IGFjY291bnRcbiAgICBsZXQgYWNjb3VudDogQWNjb3VudEluZm87XG4gICAgaWYgKCEhdGhpcy5hdXRoU2VydmljZS5pbnN0YW5jZS5nZXRBY3RpdmVBY2NvdW50KCkpIHtcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgICAgLmdldExvZ2dlcigpXG4gICAgICAgIC52ZXJib3NlKFwiSW50ZXJjZXB0b3IgLSBhY3RpdmUgYWNjb3VudCBzZWxlY3RlZFwiKTtcbiAgICAgIGFjY291bnQgPSB0aGlzLmF1dGhTZXJ2aWNlLmluc3RhbmNlLmdldEFjdGl2ZUFjY291bnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgICAgLnZlcmJvc2UoXCJJbnRlcmNlcHRvciAtIG5vIGFjdGl2ZSBhY2NvdW50LCBmYWxsYmFjayB0byBmaXJzdCBhY2NvdW50XCIpO1xuICAgICAgYWNjb3VudCA9IHRoaXMuYXV0aFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWxsQWNjb3VudHMoKVswXTtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRoUmVxdWVzdCA9XG4gICAgICB0eXBlb2YgdGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuYXV0aFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/IHRoaXMubXNhbEludGVyY2VwdG9yQ29uZmlnLmF1dGhSZXF1ZXN0KHRoaXMuYXV0aFNlcnZpY2UsIHJlcSwge1xuICAgICAgICAgICAgYWNjb3VudDogYWNjb3VudCxcbiAgICAgICAgICB9KVxuICAgICAgICA6IHsgLi4udGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuYXV0aFJlcXVlc3QsIGFjY291bnQgfTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5nZXRMb2dnZXIoKVxuICAgICAgLmluZm8oYEludGVyY2VwdG9yIC0gJHtzY29wZXMubGVuZ3RofSBzY29wZXMgZm91bmQgZm9yIGVuZHBvaW50YCk7XG4gICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgLmdldExvZ2dlcigpXG4gICAgICAuaW5mb1BpaShgSW50ZXJjZXB0b3IgLSBbJHtzY29wZXN9XSBzY29wZXMgZm91bmQgZm9yICR7cmVxLnVybH1gKTtcblxuICAgIHJldHVybiB0aGlzLmFjcXVpcmVUb2tlbihhdXRoUmVxdWVzdCwgc2NvcGVzLCBhY2NvdW50KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXN1bHQ6IEF1dGhlbnRpY2F0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgICAgICAudmVyYm9zZShcIkludGVyY2VwdG9yIC0gc2V0dGluZyBhdXRob3JpemF0aW9uIGhlYWRlcnNcIik7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSByZXEuaGVhZGVycy5zZXQoXG4gICAgICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICAgICAgYEJlYXJlciAke3Jlc3VsdC5hY2Nlc3NUb2tlbn1gXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdENsb25lID0gcmVxLmNsb25lKHsgaGVhZGVycyB9KTtcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3RDbG9uZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIGFjcXVpcmUgdG9rZW4gc2lsZW50bHkuIEludm9rZSBpbnRlcmFjdGlvbiBpZiBhY3F1aXJlVG9rZW5TaWxlbnQgcmVqZWN0ZWQgd2l0aCBlcnJvciBvciByZXNvbHZlZCB3aXRoIG51bGwgYWNjZXNzIHRva2VuXG4gICAqIEBwYXJhbSBhdXRoUmVxdWVzdCBSZXF1ZXN0XG4gICAqIEBwYXJhbSBzY29wZXMgQXJyYXkgb2Ygc2NvcGVzIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcGFyYW0gYWNjb3VudCBBY2NvdW50XG4gICAqIEByZXR1cm5zIEF1dGhlbnRpY2F0aW9uIHJlc3VsdFxuICAgKi9cbiAgcHJpdmF0ZSBhY3F1aXJlVG9rZW4oXG4gICAgYXV0aFJlcXVlc3Q6IE1zYWxJbnRlcmNlcHRvckF1dGhSZXF1ZXN0LFxuICAgIHNjb3Blczogc3RyaW5nW10sXG4gICAgYWNjb3VudDogQWNjb3VudEluZm9cbiAgKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGlvblJlc3VsdD4ge1xuICAgIC8vIE5vdGU6IEZvciBNU0EgYWNjb3VudHMsIGluY2x1ZGUgb3BlbmlkIHNjb3BlIHdoZW4gY2FsbGluZyBhY3F1aXJlVG9rZW5TaWxlbnQgdG8gcmV0dXJuIGlkVG9rZW5cbiAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZVxuICAgICAgLmFjcXVpcmVUb2tlblNpbGVudCh7IC4uLmF1dGhSZXF1ZXN0LCBzY29wZXMsIGFjY291bnQgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgICAgICAgIC5lcnJvcihcbiAgICAgICAgICAgICAgXCJJbnRlcmNlcHRvciAtIGFjcXVpcmVUb2tlblNpbGVudCByZWplY3RlZCB3aXRoIGVycm9yLiBJbnZva2luZyBpbnRlcmFjdGlvbiB0byByZXNvbHZlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB0aGlzLm1zYWxCcm9hZGNhc3RTZXJ2aWNlLmluUHJvZ3Jlc3MkLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKChzdGF0dXM6IEludGVyYWN0aW9uU3RhdHVzKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IEludGVyYWN0aW9uU3RhdHVzLk5vbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hY3F1aXJlVG9rZW5JbnRlcmFjdGl2ZWx5KGF1dGhSZXF1ZXN0LCBzY29wZXMpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubXNhbEJyb2FkY2FzdFNlcnZpY2UuaW5Qcm9ncmVzcyQucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoc3RhdHVzOiBJbnRlcmFjdGlvblN0YXR1cykgPT5cbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzID09PSBJbnRlcmFjdGlvblN0YXR1cy5Ob25lXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmFjcXVpcmVUb2tlbihhdXRoUmVxdWVzdCwgc2NvcGVzLCBhY2NvdW50KSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgocmVzdWx0OiBBdXRoZW50aWNhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmICghcmVzdWx0LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAgICAgICAgIC5nZXRMb2dnZXIoKVxuICAgICAgICAgICAgICAuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJJbnRlcmNlcHRvciAtIGFjcXVpcmVUb2tlblNpbGVudCByZXNvbHZlZCB3aXRoIG51bGwgYWNjZXNzIHRva2VuLiBLbm93biBpc3N1ZSB3aXRoIEIyQyB0ZW5hbnRzLCBpbnZva2luZyBpbnRlcmFjdGlvbiB0byByZXNvbHZlLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tc2FsQnJvYWRjYXN0U2VydmljZS5pblByb2dyZXNzJC5waXBlKFxuICAgICAgICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgICAgICAgKHN0YXR1czogSW50ZXJhY3Rpb25TdGF0dXMpID0+IHN0YXR1cyA9PT0gSW50ZXJhY3Rpb25TdGF0dXMuTm9uZVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmFjcXVpcmVUb2tlbkludGVyYWN0aXZlbHkoYXV0aFJlcXVlc3QsIHNjb3BlcylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG9mKHJlc3VsdCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZSBpbnRlcmFjdGlvbiBmb3IgdGhlIGdpdmVuIHNldCBvZiBzY29wZXNcbiAgICogQHBhcmFtIGF1dGhSZXF1ZXN0IFJlcXVlc3RcbiAgICogQHBhcmFtIHNjb3BlcyBBcnJheSBvZiBzY29wZXMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIFJlc3VsdCBmcm9tIHRoZSBpbnRlcmFjdGl2ZSByZXF1ZXN0XG4gICAqL1xuICBwcml2YXRlIGFjcXVpcmVUb2tlbkludGVyYWN0aXZlbHkoXG4gICAgYXV0aFJlcXVlc3Q6IE1zYWxJbnRlcmNlcHRvckF1dGhSZXF1ZXN0LFxuICAgIHNjb3Blczogc3RyaW5nW11cbiAgKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGlvblJlc3VsdD4ge1xuICAgIGlmICh0aGlzLm1zYWxJbnRlcmNlcHRvckNvbmZpZy5pbnRlcmFjdGlvblR5cGUgPT09IEludGVyYWN0aW9uVHlwZS5Qb3B1cCkge1xuICAgICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgICAgLnZlcmJvc2UoXG4gICAgICAgICAgXCJJbnRlcmNlcHRvciAtIGVycm9yIGFjcXVpcmluZyB0b2tlbiBzaWxlbnRseSwgYWNxdWlyaW5nIGJ5IHBvcHVwXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmFjcXVpcmVUb2tlblBvcHVwKHsgLi4uYXV0aFJlcXVlc3QsIHNjb3BlcyB9KTtcbiAgICB9XG4gICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgLmdldExvZ2dlcigpXG4gICAgICAudmVyYm9zZShcbiAgICAgICAgXCJJbnRlcmNlcHRvciAtIGVycm9yIGFjcXVpcmluZyB0b2tlbiBzaWxlbnRseSwgYWNxdWlyaW5nIGJ5IHJlZGlyZWN0XCJcbiAgICAgICk7XG4gICAgY29uc3QgcmVkaXJlY3RTdGFydFBhZ2UgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmFjcXVpcmVUb2tlblJlZGlyZWN0KHtcbiAgICAgIC4uLmF1dGhSZXF1ZXN0LFxuICAgICAgc2NvcGVzLFxuICAgICAgcmVkaXJlY3RTdGFydFBhZ2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgLyoqXG4gICAqIExvb2tzIHVwIHRoZSBzY29wZXMgZm9yIHRoZSBnaXZlbiBlbmRwb2ludCBmcm9tIHRoZSBwcm90ZWN0ZWRSZXNvdXJjZU1hcFxuICAgKiBAcGFyYW0gZW5kcG9pbnQgVXJsIG9mIHRoZSByZXF1ZXN0XG4gICAqIEBwYXJhbSBodHRwTWV0aG9kIEh0dHAgbWV0aG9kIG9mIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHNjb3Blcywgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICpcbiAgICovXG4gIHByaXZhdGUgZ2V0U2NvcGVzRm9yRW5kcG9pbnQoXG4gICAgZW5kcG9pbnQ6IHN0cmluZyxcbiAgICBodHRwTWV0aG9kOiBzdHJpbmdcbiAgKTogQXJyYXk8c3RyaW5nPiB8IG51bGwge1xuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5nZXRMb2dnZXIoKVxuICAgICAgLnZlcmJvc2UoXCJJbnRlcmNlcHRvciAtIGdldHRpbmcgc2NvcGVzIGZvciBlbmRwb2ludFwiKTtcblxuICAgIC8vIEVuc3VyZXMgZW5kcG9pbnRzIGFuZCBwcm90ZWN0ZWQgcmVzb3VyY2VzIGNvbXBhcmVkIGFyZSBub3JtYWxpemVkXG4gICAgY29uc3Qgbm9ybWFsaXplZEVuZHBvaW50ID0gdGhpcy5sb2NhdGlvbi5ub3JtYWxpemUoZW5kcG9pbnQpO1xuXG4gICAgY29uc3QgcHJvdGVjdGVkUmVzb3VyY2VzQXJyYXkgPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcucHJvdGVjdGVkUmVzb3VyY2VNYXAua2V5cygpXG4gICAgKTtcblxuICAgIGNvbnN0IG1hdGNoaW5nUHJvdGVjdGVkUmVzb3VyY2VzID0gdGhpcy5tYXRjaFJlc291cmNlc1RvRW5kcG9pbnQoXG4gICAgICBwcm90ZWN0ZWRSZXNvdXJjZXNBcnJheSxcbiAgICAgIG5vcm1hbGl6ZWRFbmRwb2ludFxuICAgICk7XG5cbiAgICBpZiAobWF0Y2hpbmdQcm90ZWN0ZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMubWF0Y2hTY29wZXNUb0VuZHBvaW50KFxuICAgICAgICB0aGlzLm1zYWxJbnRlcmNlcHRvckNvbmZpZy5wcm90ZWN0ZWRSZXNvdXJjZU1hcCxcbiAgICAgICAgbWF0Y2hpbmdQcm90ZWN0ZWRSZXNvdXJjZXMsXG4gICAgICAgIGh0dHBNZXRob2RcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgcmVzb3VyY2UgZW5kcG9pbnRzIHRoYXQgbWF0Y2ggcmVxdWVzdCBlbmRwb2ludFxuICAgKiBAcGFyYW0gcHJvdGVjdGVkUmVzb3VyY2VzRW5kcG9pbnRzXG4gICAqIEBwYXJhbSBlbmRwb2ludFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSBtYXRjaFJlc291cmNlc1RvRW5kcG9pbnQoXG4gICAgcHJvdGVjdGVkUmVzb3VyY2VzRW5kcG9pbnRzOiBzdHJpbmdbXSxcbiAgICBlbmRwb2ludDogc3RyaW5nXG4gICk6IEFycmF5PHN0cmluZz4ge1xuICAgIGNvbnN0IG1hdGNoaW5nUmVzb3VyY2VzOiBBcnJheTxzdHJpbmc+ID0gW107XG5cbiAgICBwcm90ZWN0ZWRSZXNvdXJjZXNFbmRwb2ludHMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0gdGhpcy5sb2NhdGlvbi5ub3JtYWxpemUoa2V5KTtcblxuICAgICAgLy8gR2V0IHVybCBjb21wb25lbnRzXG4gICAgICBjb25zdCBhYnNvbHV0ZUtleSA9IHRoaXMuZ2V0QWJzb2x1dGVVcmwobm9ybWFsaXplZEtleSk7XG4gICAgICBjb25zdCBrZXlDb21wb25lbnRzID0gbmV3IFVSTChhYnNvbHV0ZUtleSk7XG4gICAgICBjb25zdCBhYnNvbHV0ZUVuZHBvaW50ID0gdGhpcy5nZXRBYnNvbHV0ZVVybChlbmRwb2ludCk7XG4gICAgICBjb25zdCBlbmRwb2ludENvbXBvbmVudHMgPSBuZXcgVVJMKGFic29sdXRlRW5kcG9pbnQpO1xuXG4gICAgICBpZiAodGhpcy5jaGVja1VybENvbXBvbmVudHMoa2V5Q29tcG9uZW50cywgZW5kcG9pbnRDb21wb25lbnRzKSkge1xuICAgICAgICBtYXRjaGluZ1Jlc291cmNlcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWF0Y2hpbmdSZXNvdXJjZXM7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZXMgVVJMIHNlZ21lbnRzIGJldHdlZW4ga2V5IGFuZCBlbmRwb2ludFxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEBwYXJhbSBlbmRwb2ludFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1VybENvbXBvbmVudHMoXG4gICAga2V5Q29tcG9uZW50czogVVJMLFxuICAgIGVuZHBvaW50Q29tcG9uZW50czogVVJMXG4gICk6IGJvb2xlYW4ge1xuICAgIC8vIFVSTCBwcm9wZXJ0aWVzIGZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTFxuICAgIGNvbnN0IHVybFByb3BlcnRpZXMgPSBbXCJwcm90b2NvbFwiLCBcImhvc3RcIiwgXCJwYXRobmFtZVwiLCBcInNlYXJjaFwiLCBcImhhc2hcIl07XG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHVybFByb3BlcnRpZXMpIHtcbiAgICAgIGlmIChrZXlDb21wb25lbnRzW3Byb3BlcnR5XSkge1xuICAgICAgICBjb25zdCBkZWNvZGVkSW5wdXQgPSBkZWNvZGVVUklDb21wb25lbnQoa2V5Q29tcG9uZW50c1twcm9wZXJ0eV0pO1xuICAgICAgICBpZiAodGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuc3RyaWN0TWF0Y2hpbmcpIHtcbiAgICAgICAgICAvKlxuICAgICAgICAgICAqIFN0cmljdCBtYXRjaGluZzogYW5jaG9yZWQgcGF0dGVybnMsIG1ldGFjaGFyYWN0ZXJzIGFyZSBsaXRlcmFscyxcbiAgICAgICAgICAgKiBob3N0IHdpbGRjYXJkcyBkbyBub3Qgc3BhbiBkb3Qgc2VwYXJhdG9ycy5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBjb25zdCBjb21wb25lbnQgPVxuICAgICAgICAgICAgcHJvcGVydHkgPT09IFwicGF0aG5hbWVcIlxuICAgICAgICAgICAgICA/IFwicGF0aFwiXG4gICAgICAgICAgICAgIDogKHByb3BlcnR5IGFzIFwiaG9zdFwiIHwgXCJwcm90b2NvbFwiIHwgXCJzZWFyY2hcIiB8IFwiaGFzaFwiKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhU3RyaW5nVXRpbHMubWF0Y2hQYXR0ZXJuU3RyaWN0KFxuICAgICAgICAgICAgICBkZWNvZGVkSW5wdXQsXG4gICAgICAgICAgICAgIGVuZHBvaW50Q29tcG9uZW50c1twcm9wZXJ0eV0sXG4gICAgICAgICAgICAgIHsgY29tcG9uZW50IH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTGVnYWN5IG1hdGNoaW5nOiBwcmVzZXJ2ZWQgZXhhY3RseSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIVN0cmluZ1V0aWxzLm1hdGNoUGF0dGVybihcbiAgICAgICAgICAgICAgZGVjb2RlZElucHV0LFxuICAgICAgICAgICAgICBlbmRwb2ludENvbXBvbmVudHNbcHJvcGVydHldXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyByZWxhdGl2ZSB1cmxzIHRvIGFic29sdXRlIHVybHNcbiAgICogQHBhcmFtIHVybFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRBYnNvbHV0ZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGluayA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICByZXR1cm4gbGluay5ocmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHNjb3BlcyBmcm9tIGZpcnN0IG1hdGNoaW5nIGVuZHBvaW50IHdpdGggSFRUUCBtZXRob2QgdGhhdCBtYXRjaGVzIHJlcXVlc3RcbiAgICogQHBhcmFtIHByb3RlY3RlZFJlc291cmNlTWFwIFByb3RlY3RlZCByZXNvdXJjZSBtYXBcbiAgICogQHBhcmFtIGVuZHBvaW50QXJyYXkgQXJyYXkgb2YgcmVzb3VyY2VzIHRoYXQgbWF0Y2ggcmVxdWVzdCBlbmRwb2ludFxuICAgKiBAcGFyYW0gaHR0cE1ldGhvZCBIdHRwIG1ldGhvZCBvZiB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSBtYXRjaFNjb3Blc1RvRW5kcG9pbnQoXG4gICAgcHJvdGVjdGVkUmVzb3VyY2VNYXA6IE1hcDxcbiAgICAgIHN0cmluZyxcbiAgICAgIEFycmF5PHN0cmluZyB8IFByb3RlY3RlZFJlc291cmNlU2NvcGVzPiB8IG51bGxcbiAgICA+LFxuICAgIGVuZHBvaW50QXJyYXk6IHN0cmluZ1tdLFxuICAgIGh0dHBNZXRob2Q6IHN0cmluZ1xuICApOiBBcnJheTxzdHJpbmc+IHwgbnVsbCB7XG4gICAgY29uc3QgYWxsTWF0Y2hlZFNjb3BlcyA9IFtdO1xuXG4gICAgLy8gQ2hlY2sgZWFjaCBtYXRjaGVkIGVuZHBvaW50IGZvciBtYXRjaGluZyBIdHRwTWV0aG9kIGFuZCBzY29wZXNcbiAgICBlbmRwb2ludEFycmF5LmZvckVhY2goKG1hdGNoZWRFbmRwb2ludCkgPT4ge1xuICAgICAgY29uc3Qgc2NvcGVzRm9yRW5kcG9pbnQgPSBbXTtcbiAgICAgIGNvbnN0IG1ldGhvZEFuZFNjb3Blc0FycmF5ID0gcHJvdGVjdGVkUmVzb3VyY2VNYXAuZ2V0KG1hdGNoZWRFbmRwb2ludCk7XG5cbiAgICAgIC8vIFJldHVybiBpZiByZXNvdXJjZSBpcyB1bnByb3RlY3RlZFxuICAgICAgaWYgKG1ldGhvZEFuZFNjb3Blc0FycmF5ID09PSBudWxsKSB7XG4gICAgICAgIGFsbE1hdGNoZWRTY29wZXMucHVzaChudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBtZXRob2RBbmRTY29wZXNBcnJheS5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAvLyBFbnRyeSBpcyBlaXRoZXIgYXJyYXkgb2Ygc2NvcGVzIG9yIFByb3RlY3RlZFJlc291cmNlU2NvcGVzIG9iamVjdFxuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgc2NvcGVzRm9yRW5kcG9pbnQucHVzaChlbnRyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRW5zdXJlIG1ldGhvZHMgYmVpbmcgY29tcGFyZWQgYXJlIG5vcm1hbGl6ZWRcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUmVxdWVzdE1ldGhvZCA9IGh0dHBNZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUmVzb3VyY2VNZXRob2QgPSBlbnRyeS5odHRwTWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgLy8gTWV0aG9kIGluIHByb3RlY3RlZFJlc291cmNlTWFwIG1hdGNoZXMgcmVxdWVzdCBodHRwIG1ldGhvZFxuICAgICAgICAgIGlmIChub3JtYWxpemVkUmVzb3VyY2VNZXRob2QgPT09IG5vcm1hbGl6ZWRSZXF1ZXN0TWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSBpZiBzY29wZXMgY29tZXMgbnVsbCB0byB1bnByb3RlY3QgdGhlIHJlc291cmNlIGluIGEgY2VydGFpbiBodHRwIG1ldGhvZFxuICAgICAgICAgICAgaWYgKGVudHJ5LnNjb3BlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBhbGxNYXRjaGVkU2NvcGVzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlbnRyeS5zY29wZXMuZm9yRWFjaCgoc2NvcGUpID0+IHtcbiAgICAgICAgICAgICAgICBzY29wZXNGb3JFbmRwb2ludC5wdXNoKHNjb3BlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gT25seSBhZGQgdG8gYWxsIHNjb3BlcyBpZiBzY29wZXMgZm9yIGVuZHBvaW50IGFuZCBtZXRob2QgaXMgZm91bmRcbiAgICAgIGlmIChzY29wZXNGb3JFbmRwb2ludC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFsbE1hdGNoZWRTY29wZXMucHVzaChzY29wZXNGb3JFbmRwb2ludCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYWxsTWF0Y2hlZFNjb3Blcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoYWxsTWF0Y2hlZFNjb3Blcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgICAgICAud2FybmluZyhcbiAgICAgICAgICAgIFwiSW50ZXJjZXB0b3IgLSBNb3JlIHRoYW4gMSBtYXRjaGluZyBzY29wZXMgZm9yIGVuZHBvaW50IGZvdW5kLlwiXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIFJldHVybnMgc2NvcGVzIGZvciBmaXJzdCBtYXRjaGluZyBlbmRwb2ludFxuICAgICAgcmV0dXJuIGFsbE1hdGNoZWRTY29wZXNbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
@@ -11,7 +11,7 @@ import * as i3 from "@angular/common";
11
11
  /**
12
12
  * Custom navigation used for Angular client-side navigation.
13
13
  * See performance doc for details:
14
- * https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/performance.md
14
+ * https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/performance.md
15
15
  */
16
16
  export class MsalCustomNavigationClient extends NavigationClient {
17
17
  constructor(authService, router, location) {
@@ -50,4 +50,4 @@ MsalCustomNavigationClient.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12
50
50
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MsalCustomNavigationClient, decorators: [{
51
51
  type: Injectable
52
52
  }], ctorParameters: function () { return [{ type: i1.MsalService }, { type: i2.Router }, { type: i3.Location }]; } });
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5uYXZpZ2F0aW9uLmNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tc2FsLm5hdmlnYXRpb24uY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixTQUFTLEdBQ1YsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFHN0I7Ozs7R0FJRztBQUVILE1BQU0sT0FBTywwQkFBMkIsU0FBUSxnQkFBZ0I7SUFDOUQsWUFDVSxXQUF3QixFQUN4QixNQUFjLEVBQ2QsUUFBa0I7UUFFMUIsS0FBSyxFQUFFLENBQUM7UUFKQSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUc1QixDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUNwQixHQUFXLEVBQ1gsT0FBMEI7UUFFMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUV4RSxJQUFJLENBQUMsV0FBVzthQUNiLFNBQVMsRUFBRTthQUNYLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXO2FBQ2IsU0FBUyxFQUFFO2FBQ1gsVUFBVSxDQUFDLG1EQUFtRCxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXhFLG9HQUFvRztRQUNwRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDckIsT0FBTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzdDO2FBQU07WUFDTCx3Q0FBd0M7WUFDeEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM1RCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsV0FBVztnQkFDdEMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUMsV0FBVyxFQUFFO2dCQUM5RCxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3hELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFO2dCQUN0QyxVQUFVLEVBQUUsT0FBTyxDQUFDLFNBQVM7YUFDOUIsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7O3dIQXBDVSwwQkFBMEI7NEhBQTFCLDBCQUEwQjs0RkFBMUIsMEJBQTBCO2tCQUR0QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge1xuICBOYXZpZ2F0aW9uQ2xpZW50LFxuICBOYXZpZ2F0aW9uT3B0aW9ucyxcbiAgVXJsU3RyaW5nLFxufSBmcm9tIFwiQGF6dXJlL21zYWwtYnJvd3NlclwiO1xuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tIFwiLi9tc2FsLnNlcnZpY2VcIjtcblxuLyoqXG4gKiBDdXN0b20gbmF2aWdhdGlvbiB1c2VkIGZvciBBbmd1bGFyIGNsaWVudC1zaWRlIG5hdmlnYXRpb24uXG4gKiBTZWUgcGVyZm9ybWFuY2UgZG9jIGZvciBkZXRhaWxzOlxuICogaHR0cHM6Ly9naXRodWIuY29tL0F6dXJlQUQvbWljcm9zb2Z0LWF1dGhlbnRpY2F0aW9uLWxpYnJhcnktZm9yLWpzL3RyZWUvZGV2L2xpYi9tc2FsLWFuZ3VsYXIvZG9jcy9wZXJmb3JtYW5jZS5tZFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTXNhbEN1c3RvbU5hdmlnYXRpb25DbGllbnQgZXh0ZW5kcyBOYXZpZ2F0aW9uQ2xpZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogTXNhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvblxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgYXN5bmMgbmF2aWdhdGVJbnRlcm5hbChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRpb25zOiBOYXZpZ2F0aW9uT3B0aW9uc1xuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldExvZ2dlcigpLnRyYWNlKFwiTXNhbEN1c3RvbU5hdmlnYXRpb25DbGllbnQgY2FsbGVkXCIpO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgLmdldExvZ2dlcigpXG4gICAgICAudmVyYm9zZShcIk1zYWxDdXN0b21OYXZpZ2F0aW9uQ2xpZW50IC0gbmF2aWdhdGluZ1wiKTtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgIC52ZXJib3NlUGlpKGBNc2FsQ3VzdG9tTmF2aWdhdGlvbkNsaWVudCAtIG5hdmlnYXRpbmcgdG8gdXJsOiAke3VybH1gKTtcblxuICAgIC8vIFByZXZlbnQgaGFzaCBjbGVhcmluZyBmcm9tIGNhdXNpbmcgYW4gaXNzdWUgd2l0aCBDbGllbnQtc2lkZSBuYXZpZ2F0aW9uIGFmdGVyIHJlZGlyZWN0IGlzIGhhbmRsZWRcbiAgICBpZiAob3B0aW9ucy5ub0hpc3RvcnkpIHtcbiAgICAgIHJldHVybiBzdXBlci5uYXZpZ2F0ZUludGVybmFsKHVybCwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vcm1hbGl6aW5nIG5ld1VybCBpZiBubyBxdWVyeSBzdHJpbmdcbiAgICAgIGNvbnN0IHVybENvbXBvbmVudHMgPSBuZXcgVXJsU3RyaW5nKHVybCkuZ2V0VXJsQ29tcG9uZW50cygpO1xuICAgICAgY29uc3QgbmV3VXJsID0gdXJsQ29tcG9uZW50cy5RdWVyeVN0cmluZ1xuICAgICAgICA/IGAke3VybENvbXBvbmVudHMuQWJzb2x1dGVQYXRofT8ke3VybENvbXBvbmVudHMuUXVlcnlTdHJpbmd9YFxuICAgICAgICA6IHRoaXMubG9jYXRpb24ubm9ybWFsaXplKHVybENvbXBvbmVudHMuQWJzb2x1dGVQYXRoKTtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwobmV3VXJsLCB7XG4gICAgICAgIHJlcGxhY2VVcmw6IG9wdGlvbnMubm9IaXN0b3J5LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUob3B0aW9ucy5ub0hpc3RvcnkpO1xuICB9XG59XG4iXX0=
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5uYXZpZ2F0aW9uLmNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tc2FsLm5hdmlnYXRpb24uY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixTQUFTLEdBQ1YsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFHN0I7Ozs7R0FJRztBQUVILE1BQU0sT0FBTywwQkFBMkIsU0FBUSxnQkFBZ0I7SUFDOUQsWUFDVSxXQUF3QixFQUN4QixNQUFjLEVBQ2QsUUFBa0I7UUFFMUIsS0FBSyxFQUFFLENBQUM7UUFKQSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUc1QixDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUNwQixHQUFXLEVBQ1gsT0FBMEI7UUFFMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUV4RSxJQUFJLENBQUMsV0FBVzthQUNiLFNBQVMsRUFBRTthQUNYLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXO2FBQ2IsU0FBUyxFQUFFO2FBQ1gsVUFBVSxDQUFDLG1EQUFtRCxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXhFLG9HQUFvRztRQUNwRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDckIsT0FBTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzdDO2FBQU07WUFDTCx3Q0FBd0M7WUFDeEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM1RCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsV0FBVztnQkFDdEMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUMsV0FBVyxFQUFFO2dCQUM5RCxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3hELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFO2dCQUN0QyxVQUFVLEVBQUUsT0FBTyxDQUFDLFNBQVM7YUFDOUIsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7O3dIQXBDVSwwQkFBMEI7NEhBQTFCLDBCQUEwQjs0RkFBMUIsMEJBQTBCO2tCQUR0QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge1xuICBOYXZpZ2F0aW9uQ2xpZW50LFxuICBOYXZpZ2F0aW9uT3B0aW9ucyxcbiAgVXJsU3RyaW5nLFxufSBmcm9tIFwiQGF6dXJlL21zYWwtYnJvd3NlclwiO1xuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tIFwiLi9tc2FsLnNlcnZpY2VcIjtcblxuLyoqXG4gKiBDdXN0b20gbmF2aWdhdGlvbiB1c2VkIGZvciBBbmd1bGFyIGNsaWVudC1zaWRlIG5hdmlnYXRpb24uXG4gKiBTZWUgcGVyZm9ybWFuY2UgZG9jIGZvciBkZXRhaWxzOlxuICogaHR0cHM6Ly9naXRodWIuY29tL0F6dXJlQUQvbWljcm9zb2Z0LWF1dGhlbnRpY2F0aW9uLWxpYnJhcnktZm9yLWpzL3RyZWUvdjQtbHRzL2xpYi9tc2FsLWFuZ3VsYXIvZG9jcy9wZXJmb3JtYW5jZS5tZFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTXNhbEN1c3RvbU5hdmlnYXRpb25DbGllbnQgZXh0ZW5kcyBOYXZpZ2F0aW9uQ2xpZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogTXNhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvblxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgYXN5bmMgbmF2aWdhdGVJbnRlcm5hbChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRpb25zOiBOYXZpZ2F0aW9uT3B0aW9uc1xuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldExvZ2dlcigpLnRyYWNlKFwiTXNhbEN1c3RvbU5hdmlnYXRpb25DbGllbnQgY2FsbGVkXCIpO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgLmdldExvZ2dlcigpXG4gICAgICAudmVyYm9zZShcIk1zYWxDdXN0b21OYXZpZ2F0aW9uQ2xpZW50IC0gbmF2aWdhdGluZ1wiKTtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgIC52ZXJib3NlUGlpKGBNc2FsQ3VzdG9tTmF2aWdhdGlvbkNsaWVudCAtIG5hdmlnYXRpbmcgdG8gdXJsOiAke3VybH1gKTtcblxuICAgIC8vIFByZXZlbnQgaGFzaCBjbGVhcmluZyBmcm9tIGNhdXNpbmcgYW4gaXNzdWUgd2l0aCBDbGllbnQtc2lkZSBuYXZpZ2F0aW9uIGFmdGVyIHJlZGlyZWN0IGlzIGhhbmRsZWRcbiAgICBpZiAob3B0aW9ucy5ub0hpc3RvcnkpIHtcbiAgICAgIHJldHVybiBzdXBlci5uYXZpZ2F0ZUludGVybmFsKHVybCwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vcm1hbGl6aW5nIG5ld1VybCBpZiBubyBxdWVyeSBzdHJpbmdcbiAgICAgIGNvbnN0IHVybENvbXBvbmVudHMgPSBuZXcgVXJsU3RyaW5nKHVybCkuZ2V0VXJsQ29tcG9uZW50cygpO1xuICAgICAgY29uc3QgbmV3VXJsID0gdXJsQ29tcG9uZW50cy5RdWVyeVN0cmluZ1xuICAgICAgICA/IGAke3VybENvbXBvbmVudHMuQWJzb2x1dGVQYXRofT8ke3VybENvbXBvbmVudHMuUXVlcnlTdHJpbmd9YFxuICAgICAgICA6IHRoaXMubG9jYXRpb24ubm9ybWFsaXplKHVybENvbXBvbmVudHMuQWJzb2x1dGVQYXRoKTtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwobmV3VXJsLCB7XG4gICAgICAgIHJlcGxhY2VVcmw6IG9wdGlvbnMubm9IaXN0b3J5LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUob3B0aW9ucy5ub0hpc3RvcnkpO1xuICB9XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
1
  /* eslint-disable header/header */
2
2
  export const name = "@azure/msal-angular";
3
- export const version = "4.0.27";
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZU1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhY2thZ2VNZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQ0FBa0M7QUFDbEMsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLHFCQUFxQixDQUFDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBoZWFkZXIvaGVhZGVyICovXG5leHBvcnQgY29uc3QgbmFtZSA9IFwiQGF6dXJlL21zYWwtYW5ndWxhclwiO1xuZXhwb3J0IGNvbnN0IHZlcnNpb24gPSBcIjQuMC4yN1wiO1xuIl19
3
+ export const version = "4.1.1";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZU1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhY2thZ2VNZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQ0FBa0M7QUFDbEMsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLHFCQUFxQixDQUFDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBoZWFkZXIvaGVhZGVyICovXG5leHBvcnQgY29uc3QgbmFtZSA9IFwiQGF6dXJlL21zYWwtYW5ndWxhclwiO1xuZXhwb3J0IGNvbnN0IHZlcnNpb24gPSBcIjQuMS4xXCI7XG4iXX0=
@@ -10,7 +10,7 @@ import { __awaiter } from 'tslib';
10
10
 
11
11
  /* eslint-disable header/header */
12
12
  const name = "@azure/msal-angular";
13
- const version = "4.0.27";
13
+ const version = "4.1.1";
14
14
 
15
15
  /*
16
16
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -542,8 +542,23 @@ class MsalInterceptor {
542
542
  for (const property of urlProperties) {
543
543
  if (keyComponents[property]) {
544
544
  const decodedInput = decodeURIComponent(keyComponents[property]);
545
- if (!StringUtils.matchPattern(decodedInput, endpointComponents[property])) {
546
- return false;
545
+ if (this.msalInterceptorConfig.strictMatching) {
546
+ /*
547
+ * Strict matching: anchored patterns, metacharacters are literals,
548
+ * host wildcards do not span dot separators.
549
+ */
550
+ const component = property === "pathname"
551
+ ? "path"
552
+ : property;
553
+ if (!StringUtils.matchPatternStrict(decodedInput, endpointComponents[property], { component })) {
554
+ return false;
555
+ }
556
+ }
557
+ else {
558
+ // Legacy matching: preserved exactly for backwards compatibility.
559
+ if (!StringUtils.matchPattern(decodedInput, endpointComponents[property])) {
560
+ return false;
561
+ }
547
562
  }
548
563
  }
549
564
  }
@@ -700,7 +715,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
700
715
  /**
701
716
  * Custom navigation used for Angular client-side navigation.
702
717
  * See performance doc for details:
703
- * https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/performance.md
718
+ * https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/performance.md
704
719
  */
705
720
  class MsalCustomNavigationClient extends NavigationClient {
706
721
  constructor(authService, router, location) {
@@ -1 +1 @@
1
- {"version":3,"file":"azure-msal-angular.mjs","sources":["../../src/packageMetadata.ts","../../src/constants.ts","../../src/msal.broadcast.service.ts","../../src/msal.service.ts","../../src/msal.guard.ts","../../src/msal.interceptor.ts","../../src/msal.redirect.component.ts","../../src/msal.module.ts","../../src/msal.navigation.client.ts","../../src/public-api.ts","../../src/azure-msal-angular.ts"],"sourcesContent":["/* eslint-disable header/header */\nexport const name = \"@azure/msal-angular\";\nexport const version = \"4.0.27\";\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { InjectionToken } from \"@angular/core\";\n\nexport const MSAL_INSTANCE = new InjectionToken<string>(\"MSAL_INSTANCE\");\n\nexport const MSAL_GUARD_CONFIG = new InjectionToken<string>(\n \"MSAL_GUARD_CONFIG\"\n);\n\nexport const MSAL_INTERCEPTOR_CONFIG = new InjectionToken<string>(\n \"MSAL_INTERCEPTOR_CONFIG\"\n);\n\nexport const MSAL_BROADCAST_CONFIG = new InjectionToken<string>(\n \"MSAL_BROADCAST_CONFIG\"\n);\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Inject, Injectable, Optional } from \"@angular/core\";\nimport {\n EventMessage,\n EventMessageUtils,\n IPublicClientApplication,\n InteractionStatus,\n} from \"@azure/msal-browser\";\nimport { BehaviorSubject, Observable, ReplaySubject, Subject } from \"rxjs\";\nimport { MsalBroadcastConfiguration } from \"./msal.broadcast.config\";\nimport { MSAL_BROADCAST_CONFIG, MSAL_INSTANCE } from \"./constants\";\nimport { name, version } from \"./packageMetadata\";\n\n@Injectable()\nexport class MsalBroadcastService {\n private _msalSubject: Subject<EventMessage>;\n public msalSubject$: Observable<EventMessage>;\n private _inProgress: BehaviorSubject<InteractionStatus>;\n public inProgress$: Observable<InteractionStatus>;\n\n constructor(\n @Inject(MSAL_INSTANCE) private msalInstance: IPublicClientApplication,\n @Optional()\n @Inject(MSAL_BROADCAST_CONFIG)\n private msalBroadcastConfig?: MsalBroadcastConfiguration\n ) {\n // Make _msalSubject a ReplaySubject if configured to replay past events\n if (\n this.msalBroadcastConfig &&\n this.msalBroadcastConfig.eventsToReplay > 0\n ) {\n this.msalInstance\n .getLogger()\n .clone(name, version)\n .verbose(\n `BroadcastService - eventsToReplay set on BroadcastConfig, replaying the last ${this.msalBroadcastConfig.eventsToReplay} events`\n );\n this._msalSubject = new ReplaySubject<EventMessage>(\n this.msalBroadcastConfig.eventsToReplay\n );\n } else {\n // Defaults to _msalSubject being a Subject\n this._msalSubject = new Subject<EventMessage>();\n }\n\n this.msalSubject$ = this._msalSubject.asObservable();\n\n // InProgress as BehaviorSubject so most recent inProgress state will be available upon subscription\n this._inProgress = new BehaviorSubject<InteractionStatus>(\n InteractionStatus.Startup\n );\n this.inProgress$ = this._inProgress.asObservable();\n\n this.msalInstance.addEventCallback((message: EventMessage) => {\n this._msalSubject.next(message);\n const status = EventMessageUtils.getInteractionStatusFromEvent(\n message,\n this._inProgress.value\n );\n if (status !== null) {\n this.msalInstance\n .getLogger()\n .clone(name, version)\n .verbose(\n `BroadcastService - ${message.eventType} results in setting inProgress from ${this._inProgress.value} to ${status}`\n );\n this._inProgress.next(status);\n }\n });\n }\n\n /**\n * Resets inProgress state to None\n */\n resetInProgressEvent(): void {\n if (this._inProgress.value === InteractionStatus.Startup) {\n this._inProgress.next(InteractionStatus.None);\n }\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Inject, Injectable, Injector } from \"@angular/core\";\nimport { Location } from \"@angular/common\";\nimport {\n IPublicClientApplication,\n EndSessionRequest,\n EndSessionPopupRequest,\n AuthenticationResult,\n RedirectRequest,\n SilentRequest,\n PopupRequest,\n SsoSilentRequest,\n Logger,\n WrapperSKU,\n} from \"@azure/msal-browser\";\nimport { Observable, from } from \"rxjs\";\nimport { IMsalService } from \"./IMsalService\";\nimport { name, version } from \"./packageMetadata\";\nimport { MSAL_INSTANCE } from \"./constants\";\nimport { MsalBroadcastService } from \"./msal.broadcast.service\";\n\n@Injectable()\nexport class MsalService implements IMsalService {\n private redirectHash: string;\n private logger: Logger;\n\n constructor(\n @Inject(MSAL_INSTANCE) public instance: IPublicClientApplication,\n private location: Location,\n private injector: Injector\n ) {\n const hash = this.location.path(true).split(\"#\").pop();\n if (hash) {\n this.redirectHash = `#${hash}`;\n }\n this.instance.initializeWrapperLibrary(WrapperSKU.Angular, version);\n }\n\n initialize(): Observable<void> {\n return from(this.instance.initialize());\n }\n acquireTokenPopup(request: PopupRequest): Observable<AuthenticationResult> {\n return from(this.instance.acquireTokenPopup(request));\n }\n acquireTokenRedirect(request: RedirectRequest): Observable<void> {\n return from(this.instance.acquireTokenRedirect(request));\n }\n acquireTokenSilent(\n silentRequest: SilentRequest\n ): Observable<AuthenticationResult> {\n return from(this.instance.acquireTokenSilent(silentRequest));\n }\n handleRedirectObservable(hash?: string): Observable<AuthenticationResult> {\n return from(\n this.instance\n .initialize()\n .then(() =>\n this.instance.handleRedirectPromise(hash || this.redirectHash)\n )\n .finally(() => {\n // update inProgress state to none\n this.injector.get(MsalBroadcastService).resetInProgressEvent();\n })\n );\n }\n loginPopup(request?: PopupRequest): Observable<AuthenticationResult> {\n return from(this.instance.loginPopup(request));\n }\n loginRedirect(request?: RedirectRequest): Observable<void> {\n return from(this.instance.loginRedirect(request));\n }\n // @deprecated: Use logoutRedirect or logoutPopup\n logout(logoutRequest?: EndSessionRequest): Observable<void> {\n return from(this.instance.logout(logoutRequest));\n }\n logoutRedirect(logoutRequest?: EndSessionRequest): Observable<void> {\n return from(this.instance.logoutRedirect(logoutRequest));\n }\n logoutPopup(logoutRequest?: EndSessionPopupRequest): Observable<void> {\n return from(this.instance.logoutPopup(logoutRequest));\n }\n ssoSilent(request: SsoSilentRequest): Observable<AuthenticationResult> {\n return from(this.instance.ssoSilent(request));\n }\n /**\n * Gets logger for msal-angular.\n * If no logger set, returns logger instance created with same options as msal-browser\n */\n getLogger(): Logger {\n if (!this.logger) {\n this.logger = this.instance.getLogger().clone(name, version);\n }\n return this.logger;\n }\n // Create a logger instance for msal-angular with the same options as msal-browser\n setLogger(logger: Logger): void {\n this.logger = logger.clone(name, version);\n this.instance.setLogger(logger);\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Injectable, Inject } from \"@angular/core\";\nimport { Location } from \"@angular/common\";\nimport {\n ActivatedRouteSnapshot,\n RouterStateSnapshot,\n UrlTree,\n Router,\n} from \"@angular/router\";\nimport {\n InteractionType,\n BrowserConfigurationAuthError,\n BrowserUtils,\n UrlString,\n PopupRequest,\n RedirectRequest,\n AuthenticationResult,\n} from \"@azure/msal-browser\";\nimport { Observable, of } from \"rxjs\";\nimport { concatMap, catchError, map } from \"rxjs/operators\";\nimport { MsalService } from \"./msal.service\";\nimport { MsalGuardConfiguration } from \"./msal.guard.config\";\nimport { MsalBroadcastService } from \"./msal.broadcast.service\";\nimport { MSAL_GUARD_CONFIG } from \"./constants\";\n\n@Injectable()\nexport class MsalGuard {\n private loginFailedRoute?: UrlTree;\n\n constructor(\n @Inject(MSAL_GUARD_CONFIG) private msalGuardConfig: MsalGuardConfiguration,\n private msalBroadcastService: MsalBroadcastService,\n private authService: MsalService,\n private location: Location,\n private router: Router\n ) {\n // Subscribing so events in MsalGuard will set inProgress$ observable\n this.msalBroadcastService.inProgress$.subscribe();\n }\n\n /**\n * Parses url string to UrlTree\n * @param url\n */\n parseUrl(url: string): UrlTree {\n return this.router.parseUrl(url);\n }\n\n /**\n * Builds the absolute url for the destination page\n * @param path Relative path of requested page\n * @returns Full destination url\n */\n getDestinationUrl(path: string): string {\n this.authService.getLogger().verbose(\"Guard - getting destination url\");\n // Absolute base url for the application (default to origin if base element not present)\n const baseElements = document.getElementsByTagName(\"base\");\n const baseUrl = this.location.normalize(\n baseElements.length ? baseElements[0].href : window.location.origin\n );\n\n // Path of page (including hash, if using hash routing)\n const pathUrl = this.location.prepareExternalUrl(path);\n\n // Hash location strategy\n if (pathUrl.startsWith(\"#\")) {\n this.authService\n .getLogger()\n .verbose(\"Guard - destination by hash routing\");\n return `${baseUrl}/${pathUrl}`;\n }\n\n /*\n * If using path location strategy, pathUrl will include the relative portion of the base path (e.g. /base/page).\n * Since baseUrl also includes /base, can just concatentate baseUrl + path\n */\n return `${baseUrl}${path}`;\n }\n\n /**\n * Interactively prompt the user to login\n * @param url Path of the requested page\n */\n private loginInteractively(state: RouterStateSnapshot): Observable<boolean> {\n const authRequest =\n typeof this.msalGuardConfig.authRequest === \"function\"\n ? this.msalGuardConfig.authRequest(this.authService, state)\n : { ...this.msalGuardConfig.authRequest };\n if (this.msalGuardConfig.interactionType === InteractionType.Popup) {\n this.authService.getLogger().verbose(\"Guard - logging in by popup\");\n return this.authService.loginPopup(authRequest as PopupRequest).pipe(\n map((response: AuthenticationResult) => {\n this.authService\n .getLogger()\n .verbose(\n \"Guard - login by popup successful, can activate, setting active account\"\n );\n this.authService.instance.setActiveAccount(response.account);\n return true;\n })\n );\n }\n\n this.authService.getLogger().verbose(\"Guard - logging in by redirect\");\n const redirectStartPage = this.getDestinationUrl(state.url);\n return this.authService\n .loginRedirect({\n redirectStartPage,\n ...authRequest,\n } as RedirectRequest)\n .pipe(map(() => false));\n }\n\n /**\n * Helper which checks for the correct interaction type, prevents page with Guard to be set as redirect, and calls handleRedirectObservable\n * @param state\n */\n private activateHelper(\n state?: RouterStateSnapshot\n ): Observable<boolean | UrlTree> {\n if (\n this.msalGuardConfig.interactionType !== InteractionType.Popup &&\n this.msalGuardConfig.interactionType !== InteractionType.Redirect\n ) {\n throw new BrowserConfigurationAuthError(\n \"invalid_interaction_type\",\n \"Invalid interaction type provided to MSAL Guard. InteractionType.Popup or InteractionType.Redirect must be provided in the MsalGuardConfiguration\"\n );\n }\n this.authService.getLogger().verbose(\"MSAL Guard activated\");\n\n /*\n * If a page with MSAL Guard is set as the redirect for acquireTokenSilent,\n * short-circuit to prevent redirecting or popups.\n */\n if (typeof window !== \"undefined\") {\n if (\n UrlString.hashContainsKnownProperties(window.location.hash) &&\n BrowserUtils.isInIframe() &&\n !this.authService.instance.getConfiguration().system\n .allowRedirectInIframe\n ) {\n this.authService\n .getLogger()\n .warning(\n \"Guard - redirectUri set to page with MSAL Guard. It is recommended to not set redirectUri to a page that requires authentication.\"\n );\n return of(false);\n }\n } else {\n this.authService\n .getLogger()\n .info(\n \"Guard - window is undefined, MSAL does not support server-side token acquisition\"\n );\n return of(true);\n }\n\n /**\n * If a loginFailedRoute is set in the config, set this as the loginFailedRoute\n */\n if (this.msalGuardConfig.loginFailedRoute) {\n this.loginFailedRoute = this.parseUrl(\n this.msalGuardConfig.loginFailedRoute\n );\n }\n\n // Capture current path before it gets changed by handleRedirectObservable\n const currentPath = this.location.path(true);\n\n return this.authService.initialize().pipe(\n concatMap(() => {\n return this.authService.handleRedirectObservable();\n }),\n concatMap(() => {\n if (!this.authService.instance.getAllAccounts().length) {\n if (state) {\n this.authService\n .getLogger()\n .verbose(\n \"Guard - no accounts retrieved, log in required to activate\"\n );\n return this.loginInteractively(state);\n }\n this.authService\n .getLogger()\n .verbose(\"Guard - no accounts retrieved, no state, cannot load\");\n return of(false);\n }\n\n this.authService\n .getLogger()\n .verbose(\"Guard - at least 1 account exists, can activate or load\");\n\n // Prevent navigating the app to /#code= or /code=\n if (state) {\n /*\n * Path routing:\n * state.url: /#code=...\n * state.root.fragment: code=...\n */\n\n /*\n * Hash routing:\n * state.url: /code\n * state.root.fragment: null\n */\n const urlContainsCode: boolean = this.includesCode(state.url);\n const fragmentContainsCode: boolean =\n !!state.root &&\n !!state.root.fragment &&\n this.includesCode(`#${state.root.fragment}`);\n const hashRouting: boolean =\n this.location.prepareExternalUrl(state.url).indexOf(\"#\") === 0;\n\n // Ensure code parameter is in fragment (and not in query parameter), or that hash hash routing is used\n if (urlContainsCode && (fragmentContainsCode || hashRouting)) {\n this.authService\n .getLogger()\n .info(\n \"Guard - Hash contains known code response, stopping navigation.\"\n );\n\n // Path routing (navigate to current path without hash)\n if (currentPath.indexOf(\"#\") > -1) {\n return of(this.parseUrl(this.location.path()));\n }\n\n // Hash routing (navigate to root path)\n return of(this.parseUrl(\"\"));\n }\n }\n\n return of(true);\n }),\n catchError((error: Error) => {\n this.authService\n .getLogger()\n .error(\"Guard - error while logging in, unable to activate\");\n this.authService\n .getLogger()\n .errorPii(`Guard - error: ${error.message}`);\n /**\n * If a loginFailedRoute is set, checks to see if state is passed before returning route\n */\n if (this.loginFailedRoute && state) {\n this.authService\n .getLogger()\n .verbose(\"Guard - loginFailedRoute set, redirecting\");\n return of(this.loginFailedRoute);\n }\n return of(false);\n })\n );\n }\n\n includesCode(path: string): boolean {\n return (\n (path.lastIndexOf(\"/code\") > -1 &&\n path.lastIndexOf(\"/code\") === path.length - \"/code\".length) || // path.endsWith(\"/code\")\n path.indexOf(\"#code=\") > -1 ||\n path.indexOf(\"&code=\") > -1\n );\n }\n\n canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable<boolean | UrlTree> {\n this.authService.getLogger().verbose(\"Guard - canActivate\");\n return this.activateHelper(state);\n }\n\n canActivateChild(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable<boolean | UrlTree> {\n this.authService.getLogger().verbose(\"Guard - canActivateChild\");\n return this.activateHelper(state);\n }\n\n canMatch(): Observable<boolean | UrlTree> {\n this.authService.getLogger().verbose(\"Guard - canLoad\");\n return this.activateHelper();\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Injectable, Inject } from \"@angular/core\";\nimport { Location, DOCUMENT } from \"@angular/common\";\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor,\n} from \"@angular/common/http\"; // eslint-disable-line import/no-unresolved\nimport {\n AccountInfo,\n AuthenticationResult,\n BrowserConfigurationAuthError,\n InteractionStatus,\n InteractionType,\n StringUtils,\n} from \"@azure/msal-browser\";\nimport { Observable, EMPTY, of } from \"rxjs\";\nimport { switchMap, catchError, take, filter } from \"rxjs/operators\";\nimport { MsalService } from \"./msal.service\";\nimport {\n MsalInterceptorAuthRequest,\n MsalInterceptorConfiguration,\n ProtectedResourceScopes,\n} from \"./msal.interceptor.config\";\nimport { MsalBroadcastService } from \"./msal.broadcast.service\";\nimport { MSAL_INTERCEPTOR_CONFIG } from \"./constants\";\n\n@Injectable()\nexport class MsalInterceptor implements HttpInterceptor {\n private _document?: Document;\n\n constructor(\n @Inject(MSAL_INTERCEPTOR_CONFIG)\n private msalInterceptorConfig: MsalInterceptorConfiguration,\n private authService: MsalService,\n private location: Location,\n private msalBroadcastService: MsalBroadcastService,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n @Inject(DOCUMENT) document?: any\n ) {\n this._document = document as Document;\n }\n\n intercept(\n req: HttpRequest<any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n next: HttpHandler\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Observable<HttpEvent<any>> {\n if (\n this.msalInterceptorConfig.interactionType !== InteractionType.Popup &&\n this.msalInterceptorConfig.interactionType !== InteractionType.Redirect\n ) {\n throw new BrowserConfigurationAuthError(\n \"invalid_interaction_type\",\n \"Invalid interaction type provided to MSAL Interceptor. InteractionType.Popup, InteractionType.Redirect must be provided in the msalInterceptorConfiguration\"\n );\n }\n\n this.authService.getLogger().verbose(\"MSAL Interceptor activated\");\n const scopes = this.getScopesForEndpoint(req.url, req.method);\n\n // If no scopes for endpoint, does not acquire token\n if (!scopes || scopes.length === 0) {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - no scopes for endpoint\");\n return next.handle(req);\n }\n\n // Sets account as active account or first account\n let account: AccountInfo;\n if (!!this.authService.instance.getActiveAccount()) {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - active account selected\");\n account = this.authService.instance.getActiveAccount();\n } else {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - no active account, fallback to first account\");\n account = this.authService.instance.getAllAccounts()[0];\n }\n\n const authRequest =\n typeof this.msalInterceptorConfig.authRequest === \"function\"\n ? this.msalInterceptorConfig.authRequest(this.authService, req, {\n account: account,\n })\n : { ...this.msalInterceptorConfig.authRequest, account };\n\n this.authService\n .getLogger()\n .info(`Interceptor - ${scopes.length} scopes found for endpoint`);\n this.authService\n .getLogger()\n .infoPii(`Interceptor - [${scopes}] scopes found for ${req.url}`);\n\n return this.acquireToken(authRequest, scopes, account).pipe(\n switchMap((result: AuthenticationResult) => {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - setting authorization headers\");\n const headers = req.headers.set(\n \"Authorization\",\n `Bearer ${result.accessToken}`\n );\n\n const requestClone = req.clone({ headers });\n return next.handle(requestClone);\n })\n );\n }\n\n /**\n * Try to acquire token silently. Invoke interaction if acquireTokenSilent rejected with error or resolved with null access token\n * @param authRequest Request\n * @param scopes Array of scopes for the request\n * @param account Account\n * @returns Authentication result\n */\n private acquireToken(\n authRequest: MsalInterceptorAuthRequest,\n scopes: string[],\n account: AccountInfo\n ): Observable<AuthenticationResult> {\n // Note: For MSA accounts, include openid scope when calling acquireTokenSilent to return idToken\n return this.authService\n .acquireTokenSilent({ ...authRequest, scopes, account })\n .pipe(\n catchError(() => {\n this.authService\n .getLogger()\n .error(\n \"Interceptor - acquireTokenSilent rejected with error. Invoking interaction to resolve.\"\n );\n return this.msalBroadcastService.inProgress$.pipe(\n take(1),\n switchMap((status: InteractionStatus) => {\n if (status === InteractionStatus.None) {\n return this.acquireTokenInteractively(authRequest, scopes);\n }\n\n return this.msalBroadcastService.inProgress$.pipe(\n filter(\n (status: InteractionStatus) =>\n status === InteractionStatus.None\n ),\n take(1),\n switchMap(() => this.acquireToken(authRequest, scopes, account))\n );\n })\n );\n }),\n switchMap((result: AuthenticationResult) => {\n if (!result.accessToken) {\n this.authService\n .getLogger()\n .error(\n \"Interceptor - acquireTokenSilent resolved with null access token. Known issue with B2C tenants, invoking interaction to resolve.\"\n );\n return this.msalBroadcastService.inProgress$.pipe(\n filter(\n (status: InteractionStatus) => status === InteractionStatus.None\n ),\n take(1),\n switchMap(() =>\n this.acquireTokenInteractively(authRequest, scopes)\n )\n );\n }\n return of(result);\n })\n );\n }\n\n /**\n * Invoke interaction for the given set of scopes\n * @param authRequest Request\n * @param scopes Array of scopes for the request\n * @returns Result from the interactive request\n */\n private acquireTokenInteractively(\n authRequest: MsalInterceptorAuthRequest,\n scopes: string[]\n ): Observable<AuthenticationResult> {\n if (this.msalInterceptorConfig.interactionType === InteractionType.Popup) {\n this.authService\n .getLogger()\n .verbose(\n \"Interceptor - error acquiring token silently, acquiring by popup\"\n );\n return this.authService.acquireTokenPopup({ ...authRequest, scopes });\n }\n this.authService\n .getLogger()\n .verbose(\n \"Interceptor - error acquiring token silently, acquiring by redirect\"\n );\n const redirectStartPage = window.location.href;\n this.authService.acquireTokenRedirect({\n ...authRequest,\n scopes,\n redirectStartPage,\n });\n return EMPTY;\n }\n\n /**\n * Looks up the scopes for the given endpoint from the protectedResourceMap\n * @param endpoint Url of the request\n * @param httpMethod Http method of the request\n * @returns Array of scopes, or null if not found\n *\n */\n private getScopesForEndpoint(\n endpoint: string,\n httpMethod: string\n ): Array<string> | null {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - getting scopes for endpoint\");\n\n // Ensures endpoints and protected resources compared are normalized\n const normalizedEndpoint = this.location.normalize(endpoint);\n\n const protectedResourcesArray = Array.from(\n this.msalInterceptorConfig.protectedResourceMap.keys()\n );\n\n const matchingProtectedResources = this.matchResourcesToEndpoint(\n protectedResourcesArray,\n normalizedEndpoint\n );\n\n if (matchingProtectedResources.length > 0) {\n return this.matchScopesToEndpoint(\n this.msalInterceptorConfig.protectedResourceMap,\n matchingProtectedResources,\n httpMethod\n );\n }\n\n return null;\n }\n\n /**\n * Finds resource endpoints that match request endpoint\n * @param protectedResourcesEndpoints\n * @param endpoint\n * @returns\n */\n private matchResourcesToEndpoint(\n protectedResourcesEndpoints: string[],\n endpoint: string\n ): Array<string> {\n const matchingResources: Array<string> = [];\n\n protectedResourcesEndpoints.forEach((key) => {\n const normalizedKey = this.location.normalize(key);\n\n // Get url components\n const absoluteKey = this.getAbsoluteUrl(normalizedKey);\n const keyComponents = new URL(absoluteKey);\n const absoluteEndpoint = this.getAbsoluteUrl(endpoint);\n const endpointComponents = new URL(absoluteEndpoint);\n\n if (this.checkUrlComponents(keyComponents, endpointComponents)) {\n matchingResources.push(key);\n }\n });\n\n return matchingResources;\n }\n\n /**\n * Compares URL segments between key and endpoint\n * @param key\n * @param endpoint\n * @returns\n */\n private checkUrlComponents(\n keyComponents: URL,\n endpointComponents: URL\n ): boolean {\n // URL properties from https://developer.mozilla.org/en-US/docs/Web/API/URL\n const urlProperties = [\"protocol\", \"host\", \"pathname\", \"search\", \"hash\"];\n\n for (const property of urlProperties) {\n if (keyComponents[property]) {\n const decodedInput = decodeURIComponent(keyComponents[property]);\n if (\n !StringUtils.matchPattern(decodedInput, endpointComponents[property])\n ) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n /**\n * Transforms relative urls to absolute urls\n * @param url\n * @returns\n */\n private getAbsoluteUrl(url: string): string {\n const link = this._document.createElement(\"a\");\n link.href = url;\n return link.href;\n }\n\n /**\n * Finds scopes from first matching endpoint with HTTP method that matches request\n * @param protectedResourceMap Protected resource map\n * @param endpointArray Array of resources that match request endpoint\n * @param httpMethod Http method of the request\n * @returns\n */\n private matchScopesToEndpoint(\n protectedResourceMap: Map<\n string,\n Array<string | ProtectedResourceScopes> | null\n >,\n endpointArray: string[],\n httpMethod: string\n ): Array<string> | null {\n const allMatchedScopes = [];\n\n // Check each matched endpoint for matching HttpMethod and scopes\n endpointArray.forEach((matchedEndpoint) => {\n const scopesForEndpoint = [];\n const methodAndScopesArray = protectedResourceMap.get(matchedEndpoint);\n\n // Return if resource is unprotected\n if (methodAndScopesArray === null) {\n allMatchedScopes.push(null);\n return;\n }\n\n methodAndScopesArray.forEach((entry) => {\n // Entry is either array of scopes or ProtectedResourceScopes object\n if (typeof entry === \"string\") {\n scopesForEndpoint.push(entry);\n } else {\n // Ensure methods being compared are normalized\n const normalizedRequestMethod = httpMethod.toLowerCase();\n const normalizedResourceMethod = entry.httpMethod.toLowerCase();\n // Method in protectedResourceMap matches request http method\n if (normalizedResourceMethod === normalizedRequestMethod) {\n // Validate if scopes comes null to unprotect the resource in a certain http method\n if (entry.scopes === null) {\n allMatchedScopes.push(null);\n } else {\n entry.scopes.forEach((scope) => {\n scopesForEndpoint.push(scope);\n });\n }\n }\n }\n });\n\n // Only add to all scopes if scopes for endpoint and method is found\n if (scopesForEndpoint.length > 0) {\n allMatchedScopes.push(scopesForEndpoint);\n }\n });\n\n if (allMatchedScopes.length > 0) {\n if (allMatchedScopes.length > 1) {\n this.authService\n .getLogger()\n .warning(\n \"Interceptor - More than 1 matching scopes for endpoint found.\"\n );\n }\n // Returns scopes for first matching endpoint\n return allMatchedScopes[0];\n }\n\n return null;\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * This is a dedicated redirect component to be added to Angular apps to\n * handle redirects when using @azure/msal-angular.\n * Import this component to use redirects in your app.\n */\n\nimport { Component, OnInit } from \"@angular/core\";\nimport { MsalService } from \"./msal.service\";\n\n@Component({\n selector: \"app-redirect\",\n template: \"\",\n})\nexport class MsalRedirectComponent implements OnInit {\n constructor(private authService: MsalService) {}\n\n ngOnInit(): void {\n this.authService.getLogger().verbose(\"MsalRedirectComponent activated\");\n this.authService.handleRedirectObservable().subscribe();\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { IPublicClientApplication } from \"@azure/msal-browser\";\nimport { MsalBroadcastService } from \"./msal.broadcast.service\";\nimport { MsalGuard } from \"./msal.guard\";\nimport { MsalGuardConfiguration } from \"./msal.guard.config\";\nimport { MsalInterceptorConfiguration } from \"./msal.interceptor.config\";\nimport { MsalRedirectComponent } from \"./msal.redirect.component\";\nimport { MsalService } from \"./msal.service\";\nimport {\n MSAL_INSTANCE,\n MSAL_GUARD_CONFIG,\n MSAL_INTERCEPTOR_CONFIG,\n} from \"./constants\";\n\n@NgModule({\n declarations: [MsalRedirectComponent],\n imports: [CommonModule],\n providers: [MsalGuard, MsalBroadcastService],\n})\nexport class MsalModule {\n static forRoot(\n msalInstance: IPublicClientApplication,\n guardConfig: MsalGuardConfiguration,\n interceptorConfig: MsalInterceptorConfiguration\n ): ModuleWithProviders<MsalModule> {\n return {\n ngModule: MsalModule,\n providers: [\n {\n provide: MSAL_INSTANCE,\n useValue: msalInstance,\n },\n {\n provide: MSAL_GUARD_CONFIG,\n useValue: guardConfig,\n },\n {\n provide: MSAL_INTERCEPTOR_CONFIG,\n useValue: interceptorConfig,\n },\n MsalService,\n ],\n };\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Injectable } from \"@angular/core\";\nimport { Location } from \"@angular/common\";\nimport { Router } from \"@angular/router\";\nimport {\n NavigationClient,\n NavigationOptions,\n UrlString,\n} from \"@azure/msal-browser\";\nimport { MsalService } from \"./msal.service\";\n\n/**\n * Custom navigation used for Angular client-side navigation.\n * See performance doc for details:\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/performance.md\n */\n@Injectable()\nexport class MsalCustomNavigationClient extends NavigationClient {\n constructor(\n private authService: MsalService,\n private router: Router,\n private location: Location\n ) {\n super();\n }\n\n async navigateInternal(\n url: string,\n options: NavigationOptions\n ): Promise<boolean> {\n this.authService.getLogger().trace(\"MsalCustomNavigationClient called\");\n\n this.authService\n .getLogger()\n .verbose(\"MsalCustomNavigationClient - navigating\");\n this.authService\n .getLogger()\n .verbosePii(`MsalCustomNavigationClient - navigating to url: ${url}`);\n\n // Prevent hash clearing from causing an issue with Client-side navigation after redirect is handled\n if (options.noHistory) {\n return super.navigateInternal(url, options);\n } else {\n // Normalizing newUrl if no query string\n const urlComponents = new UrlString(url).getUrlComponents();\n const newUrl = urlComponents.QueryString\n ? `${urlComponents.AbsolutePath}?${urlComponents.QueryString}`\n : this.location.normalize(urlComponents.AbsolutePath);\n await this.router.navigateByUrl(newUrl, {\n replaceUrl: options.noHistory,\n });\n }\n return Promise.resolve(options.noHistory);\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * @packageDocumentation\n * @module @azure/msal-angular\n */\n\nexport { MsalService } from \"./msal.service\";\nexport { IMsalService } from \"./IMsalService\";\nexport { MsalGuard } from \"./msal.guard\";\nexport {\n MsalGuardConfiguration,\n MsalGuardAuthRequest,\n} from \"./msal.guard.config\";\nexport { MsalInterceptor } from \"./msal.interceptor\";\nexport {\n MsalInterceptorConfiguration,\n MsalInterceptorAuthRequest,\n ProtectedResourceScopes,\n} from \"./msal.interceptor.config\";\nexport {\n MSAL_INSTANCE,\n MSAL_GUARD_CONFIG,\n MSAL_INTERCEPTOR_CONFIG,\n MSAL_BROADCAST_CONFIG,\n} from \"./constants\";\nexport { MsalBroadcastService } from \"./msal.broadcast.service\";\nexport { MsalBroadcastConfiguration } from \"./msal.broadcast.config\";\nexport { MsalModule } from \"./msal.module\";\nexport { MsalRedirectComponent } from \"./msal.redirect.component\";\nexport { MsalCustomNavigationClient } from \"./msal.navigation.client\";\nexport { version } from \"./packageMetadata\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.MsalBroadcastService","i2.MsalService","i1.MsalService","i2","i3.MsalBroadcastService"],"mappings":"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"}
1
+ {"version":3,"file":"azure-msal-angular.mjs","sources":["../../src/packageMetadata.ts","../../src/constants.ts","../../src/msal.broadcast.service.ts","../../src/msal.service.ts","../../src/msal.guard.ts","../../src/msal.interceptor.ts","../../src/msal.redirect.component.ts","../../src/msal.module.ts","../../src/msal.navigation.client.ts","../../src/public-api.ts","../../src/azure-msal-angular.ts"],"sourcesContent":["/* eslint-disable header/header */\nexport const name = \"@azure/msal-angular\";\nexport const version = \"4.1.1\";\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { InjectionToken } from \"@angular/core\";\n\nexport const MSAL_INSTANCE = new InjectionToken<string>(\"MSAL_INSTANCE\");\n\nexport const MSAL_GUARD_CONFIG = new InjectionToken<string>(\n \"MSAL_GUARD_CONFIG\"\n);\n\nexport const MSAL_INTERCEPTOR_CONFIG = new InjectionToken<string>(\n \"MSAL_INTERCEPTOR_CONFIG\"\n);\n\nexport const MSAL_BROADCAST_CONFIG = new InjectionToken<string>(\n \"MSAL_BROADCAST_CONFIG\"\n);\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Inject, Injectable, Optional } from \"@angular/core\";\nimport {\n EventMessage,\n EventMessageUtils,\n IPublicClientApplication,\n InteractionStatus,\n} from \"@azure/msal-browser\";\nimport { BehaviorSubject, Observable, ReplaySubject, Subject } from \"rxjs\";\nimport { MsalBroadcastConfiguration } from \"./msal.broadcast.config\";\nimport { MSAL_BROADCAST_CONFIG, MSAL_INSTANCE } from \"./constants\";\nimport { name, version } from \"./packageMetadata\";\n\n@Injectable()\nexport class MsalBroadcastService {\n private _msalSubject: Subject<EventMessage>;\n public msalSubject$: Observable<EventMessage>;\n private _inProgress: BehaviorSubject<InteractionStatus>;\n public inProgress$: Observable<InteractionStatus>;\n\n constructor(\n @Inject(MSAL_INSTANCE) private msalInstance: IPublicClientApplication,\n @Optional()\n @Inject(MSAL_BROADCAST_CONFIG)\n private msalBroadcastConfig?: MsalBroadcastConfiguration\n ) {\n // Make _msalSubject a ReplaySubject if configured to replay past events\n if (\n this.msalBroadcastConfig &&\n this.msalBroadcastConfig.eventsToReplay > 0\n ) {\n this.msalInstance\n .getLogger()\n .clone(name, version)\n .verbose(\n `BroadcastService - eventsToReplay set on BroadcastConfig, replaying the last ${this.msalBroadcastConfig.eventsToReplay} events`\n );\n this._msalSubject = new ReplaySubject<EventMessage>(\n this.msalBroadcastConfig.eventsToReplay\n );\n } else {\n // Defaults to _msalSubject being a Subject\n this._msalSubject = new Subject<EventMessage>();\n }\n\n this.msalSubject$ = this._msalSubject.asObservable();\n\n // InProgress as BehaviorSubject so most recent inProgress state will be available upon subscription\n this._inProgress = new BehaviorSubject<InteractionStatus>(\n InteractionStatus.Startup\n );\n this.inProgress$ = this._inProgress.asObservable();\n\n this.msalInstance.addEventCallback((message: EventMessage) => {\n this._msalSubject.next(message);\n const status = EventMessageUtils.getInteractionStatusFromEvent(\n message,\n this._inProgress.value\n );\n if (status !== null) {\n this.msalInstance\n .getLogger()\n .clone(name, version)\n .verbose(\n `BroadcastService - ${message.eventType} results in setting inProgress from ${this._inProgress.value} to ${status}`\n );\n this._inProgress.next(status);\n }\n });\n }\n\n /**\n * Resets inProgress state to None\n */\n resetInProgressEvent(): void {\n if (this._inProgress.value === InteractionStatus.Startup) {\n this._inProgress.next(InteractionStatus.None);\n }\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Inject, Injectable, Injector } from \"@angular/core\";\nimport { Location } from \"@angular/common\";\nimport {\n IPublicClientApplication,\n EndSessionRequest,\n EndSessionPopupRequest,\n AuthenticationResult,\n RedirectRequest,\n SilentRequest,\n PopupRequest,\n SsoSilentRequest,\n Logger,\n WrapperSKU,\n} from \"@azure/msal-browser\";\nimport { Observable, from } from \"rxjs\";\nimport { IMsalService } from \"./IMsalService\";\nimport { name, version } from \"./packageMetadata\";\nimport { MSAL_INSTANCE } from \"./constants\";\nimport { MsalBroadcastService } from \"./msal.broadcast.service\";\n\n@Injectable()\nexport class MsalService implements IMsalService {\n private redirectHash: string;\n private logger: Logger;\n\n constructor(\n @Inject(MSAL_INSTANCE) public instance: IPublicClientApplication,\n private location: Location,\n private injector: Injector\n ) {\n const hash = this.location.path(true).split(\"#\").pop();\n if (hash) {\n this.redirectHash = `#${hash}`;\n }\n this.instance.initializeWrapperLibrary(WrapperSKU.Angular, version);\n }\n\n initialize(): Observable<void> {\n return from(this.instance.initialize());\n }\n acquireTokenPopup(request: PopupRequest): Observable<AuthenticationResult> {\n return from(this.instance.acquireTokenPopup(request));\n }\n acquireTokenRedirect(request: RedirectRequest): Observable<void> {\n return from(this.instance.acquireTokenRedirect(request));\n }\n acquireTokenSilent(\n silentRequest: SilentRequest\n ): Observable<AuthenticationResult> {\n return from(this.instance.acquireTokenSilent(silentRequest));\n }\n handleRedirectObservable(hash?: string): Observable<AuthenticationResult> {\n return from(\n this.instance\n .initialize()\n .then(() =>\n this.instance.handleRedirectPromise(hash || this.redirectHash)\n )\n .finally(() => {\n // update inProgress state to none\n this.injector.get(MsalBroadcastService).resetInProgressEvent();\n })\n );\n }\n loginPopup(request?: PopupRequest): Observable<AuthenticationResult> {\n return from(this.instance.loginPopup(request));\n }\n loginRedirect(request?: RedirectRequest): Observable<void> {\n return from(this.instance.loginRedirect(request));\n }\n // @deprecated: Use logoutRedirect or logoutPopup\n logout(logoutRequest?: EndSessionRequest): Observable<void> {\n return from(this.instance.logout(logoutRequest));\n }\n logoutRedirect(logoutRequest?: EndSessionRequest): Observable<void> {\n return from(this.instance.logoutRedirect(logoutRequest));\n }\n logoutPopup(logoutRequest?: EndSessionPopupRequest): Observable<void> {\n return from(this.instance.logoutPopup(logoutRequest));\n }\n ssoSilent(request: SsoSilentRequest): Observable<AuthenticationResult> {\n return from(this.instance.ssoSilent(request));\n }\n /**\n * Gets logger for msal-angular.\n * If no logger set, returns logger instance created with same options as msal-browser\n */\n getLogger(): Logger {\n if (!this.logger) {\n this.logger = this.instance.getLogger().clone(name, version);\n }\n return this.logger;\n }\n // Create a logger instance for msal-angular with the same options as msal-browser\n setLogger(logger: Logger): void {\n this.logger = logger.clone(name, version);\n this.instance.setLogger(logger);\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Injectable, Inject } from \"@angular/core\";\nimport { Location } from \"@angular/common\";\nimport {\n ActivatedRouteSnapshot,\n RouterStateSnapshot,\n UrlTree,\n Router,\n} from \"@angular/router\";\nimport {\n InteractionType,\n BrowserConfigurationAuthError,\n BrowserUtils,\n UrlString,\n PopupRequest,\n RedirectRequest,\n AuthenticationResult,\n} from \"@azure/msal-browser\";\nimport { Observable, of } from \"rxjs\";\nimport { concatMap, catchError, map } from \"rxjs/operators\";\nimport { MsalService } from \"./msal.service\";\nimport { MsalGuardConfiguration } from \"./msal.guard.config\";\nimport { MsalBroadcastService } from \"./msal.broadcast.service\";\nimport { MSAL_GUARD_CONFIG } from \"./constants\";\n\n@Injectable()\nexport class MsalGuard {\n private loginFailedRoute?: UrlTree;\n\n constructor(\n @Inject(MSAL_GUARD_CONFIG) private msalGuardConfig: MsalGuardConfiguration,\n private msalBroadcastService: MsalBroadcastService,\n private authService: MsalService,\n private location: Location,\n private router: Router\n ) {\n // Subscribing so events in MsalGuard will set inProgress$ observable\n this.msalBroadcastService.inProgress$.subscribe();\n }\n\n /**\n * Parses url string to UrlTree\n * @param url\n */\n parseUrl(url: string): UrlTree {\n return this.router.parseUrl(url);\n }\n\n /**\n * Builds the absolute url for the destination page\n * @param path Relative path of requested page\n * @returns Full destination url\n */\n getDestinationUrl(path: string): string {\n this.authService.getLogger().verbose(\"Guard - getting destination url\");\n // Absolute base url for the application (default to origin if base element not present)\n const baseElements = document.getElementsByTagName(\"base\");\n const baseUrl = this.location.normalize(\n baseElements.length ? baseElements[0].href : window.location.origin\n );\n\n // Path of page (including hash, if using hash routing)\n const pathUrl = this.location.prepareExternalUrl(path);\n\n // Hash location strategy\n if (pathUrl.startsWith(\"#\")) {\n this.authService\n .getLogger()\n .verbose(\"Guard - destination by hash routing\");\n return `${baseUrl}/${pathUrl}`;\n }\n\n /*\n * If using path location strategy, pathUrl will include the relative portion of the base path (e.g. /base/page).\n * Since baseUrl also includes /base, can just concatentate baseUrl + path\n */\n return `${baseUrl}${path}`;\n }\n\n /**\n * Interactively prompt the user to login\n * @param url Path of the requested page\n */\n private loginInteractively(state: RouterStateSnapshot): Observable<boolean> {\n const authRequest =\n typeof this.msalGuardConfig.authRequest === \"function\"\n ? this.msalGuardConfig.authRequest(this.authService, state)\n : { ...this.msalGuardConfig.authRequest };\n if (this.msalGuardConfig.interactionType === InteractionType.Popup) {\n this.authService.getLogger().verbose(\"Guard - logging in by popup\");\n return this.authService.loginPopup(authRequest as PopupRequest).pipe(\n map((response: AuthenticationResult) => {\n this.authService\n .getLogger()\n .verbose(\n \"Guard - login by popup successful, can activate, setting active account\"\n );\n this.authService.instance.setActiveAccount(response.account);\n return true;\n })\n );\n }\n\n this.authService.getLogger().verbose(\"Guard - logging in by redirect\");\n const redirectStartPage = this.getDestinationUrl(state.url);\n return this.authService\n .loginRedirect({\n redirectStartPage,\n ...authRequest,\n } as RedirectRequest)\n .pipe(map(() => false));\n }\n\n /**\n * Helper which checks for the correct interaction type, prevents page with Guard to be set as redirect, and calls handleRedirectObservable\n * @param state\n */\n private activateHelper(\n state?: RouterStateSnapshot\n ): Observable<boolean | UrlTree> {\n if (\n this.msalGuardConfig.interactionType !== InteractionType.Popup &&\n this.msalGuardConfig.interactionType !== InteractionType.Redirect\n ) {\n throw new BrowserConfigurationAuthError(\n \"invalid_interaction_type\",\n \"Invalid interaction type provided to MSAL Guard. InteractionType.Popup or InteractionType.Redirect must be provided in the MsalGuardConfiguration\"\n );\n }\n this.authService.getLogger().verbose(\"MSAL Guard activated\");\n\n /*\n * If a page with MSAL Guard is set as the redirect for acquireTokenSilent,\n * short-circuit to prevent redirecting or popups.\n */\n if (typeof window !== \"undefined\") {\n if (\n UrlString.hashContainsKnownProperties(window.location.hash) &&\n BrowserUtils.isInIframe() &&\n !this.authService.instance.getConfiguration().system\n .allowRedirectInIframe\n ) {\n this.authService\n .getLogger()\n .warning(\n \"Guard - redirectUri set to page with MSAL Guard. It is recommended to not set redirectUri to a page that requires authentication.\"\n );\n return of(false);\n }\n } else {\n this.authService\n .getLogger()\n .info(\n \"Guard - window is undefined, MSAL does not support server-side token acquisition\"\n );\n return of(true);\n }\n\n /**\n * If a loginFailedRoute is set in the config, set this as the loginFailedRoute\n */\n if (this.msalGuardConfig.loginFailedRoute) {\n this.loginFailedRoute = this.parseUrl(\n this.msalGuardConfig.loginFailedRoute\n );\n }\n\n // Capture current path before it gets changed by handleRedirectObservable\n const currentPath = this.location.path(true);\n\n return this.authService.initialize().pipe(\n concatMap(() => {\n return this.authService.handleRedirectObservable();\n }),\n concatMap(() => {\n if (!this.authService.instance.getAllAccounts().length) {\n if (state) {\n this.authService\n .getLogger()\n .verbose(\n \"Guard - no accounts retrieved, log in required to activate\"\n );\n return this.loginInteractively(state);\n }\n this.authService\n .getLogger()\n .verbose(\"Guard - no accounts retrieved, no state, cannot load\");\n return of(false);\n }\n\n this.authService\n .getLogger()\n .verbose(\"Guard - at least 1 account exists, can activate or load\");\n\n // Prevent navigating the app to /#code= or /code=\n if (state) {\n /*\n * Path routing:\n * state.url: /#code=...\n * state.root.fragment: code=...\n */\n\n /*\n * Hash routing:\n * state.url: /code\n * state.root.fragment: null\n */\n const urlContainsCode: boolean = this.includesCode(state.url);\n const fragmentContainsCode: boolean =\n !!state.root &&\n !!state.root.fragment &&\n this.includesCode(`#${state.root.fragment}`);\n const hashRouting: boolean =\n this.location.prepareExternalUrl(state.url).indexOf(\"#\") === 0;\n\n // Ensure code parameter is in fragment (and not in query parameter), or that hash hash routing is used\n if (urlContainsCode && (fragmentContainsCode || hashRouting)) {\n this.authService\n .getLogger()\n .info(\n \"Guard - Hash contains known code response, stopping navigation.\"\n );\n\n // Path routing (navigate to current path without hash)\n if (currentPath.indexOf(\"#\") > -1) {\n return of(this.parseUrl(this.location.path()));\n }\n\n // Hash routing (navigate to root path)\n return of(this.parseUrl(\"\"));\n }\n }\n\n return of(true);\n }),\n catchError((error: Error) => {\n this.authService\n .getLogger()\n .error(\"Guard - error while logging in, unable to activate\");\n this.authService\n .getLogger()\n .errorPii(`Guard - error: ${error.message}`);\n /**\n * If a loginFailedRoute is set, checks to see if state is passed before returning route\n */\n if (this.loginFailedRoute && state) {\n this.authService\n .getLogger()\n .verbose(\"Guard - loginFailedRoute set, redirecting\");\n return of(this.loginFailedRoute);\n }\n return of(false);\n })\n );\n }\n\n includesCode(path: string): boolean {\n return (\n (path.lastIndexOf(\"/code\") > -1 &&\n path.lastIndexOf(\"/code\") === path.length - \"/code\".length) || // path.endsWith(\"/code\")\n path.indexOf(\"#code=\") > -1 ||\n path.indexOf(\"&code=\") > -1\n );\n }\n\n canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable<boolean | UrlTree> {\n this.authService.getLogger().verbose(\"Guard - canActivate\");\n return this.activateHelper(state);\n }\n\n canActivateChild(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable<boolean | UrlTree> {\n this.authService.getLogger().verbose(\"Guard - canActivateChild\");\n return this.activateHelper(state);\n }\n\n canMatch(): Observable<boolean | UrlTree> {\n this.authService.getLogger().verbose(\"Guard - canLoad\");\n return this.activateHelper();\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Injectable, Inject } from \"@angular/core\";\nimport { Location, DOCUMENT } from \"@angular/common\";\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor,\n} from \"@angular/common/http\"; // eslint-disable-line import/no-unresolved\nimport {\n AccountInfo,\n AuthenticationResult,\n BrowserConfigurationAuthError,\n InteractionStatus,\n InteractionType,\n StringUtils,\n} from \"@azure/msal-browser\";\nimport { Observable, EMPTY, of } from \"rxjs\";\nimport { switchMap, catchError, take, filter } from \"rxjs/operators\";\nimport { MsalService } from \"./msal.service\";\nimport {\n MsalInterceptorAuthRequest,\n MsalInterceptorConfiguration,\n ProtectedResourceScopes,\n} from \"./msal.interceptor.config\";\nimport { MsalBroadcastService } from \"./msal.broadcast.service\";\nimport { MSAL_INTERCEPTOR_CONFIG } from \"./constants\";\n\n@Injectable()\nexport class MsalInterceptor implements HttpInterceptor {\n private _document?: Document;\n\n constructor(\n @Inject(MSAL_INTERCEPTOR_CONFIG)\n private msalInterceptorConfig: MsalInterceptorConfiguration,\n private authService: MsalService,\n private location: Location,\n private msalBroadcastService: MsalBroadcastService,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n @Inject(DOCUMENT) document?: any\n ) {\n this._document = document as Document;\n }\n\n intercept(\n req: HttpRequest<any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n next: HttpHandler\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Observable<HttpEvent<any>> {\n if (\n this.msalInterceptorConfig.interactionType !== InteractionType.Popup &&\n this.msalInterceptorConfig.interactionType !== InteractionType.Redirect\n ) {\n throw new BrowserConfigurationAuthError(\n \"invalid_interaction_type\",\n \"Invalid interaction type provided to MSAL Interceptor. InteractionType.Popup, InteractionType.Redirect must be provided in the msalInterceptorConfiguration\"\n );\n }\n\n this.authService.getLogger().verbose(\"MSAL Interceptor activated\");\n const scopes = this.getScopesForEndpoint(req.url, req.method);\n\n // If no scopes for endpoint, does not acquire token\n if (!scopes || scopes.length === 0) {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - no scopes for endpoint\");\n return next.handle(req);\n }\n\n // Sets account as active account or first account\n let account: AccountInfo;\n if (!!this.authService.instance.getActiveAccount()) {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - active account selected\");\n account = this.authService.instance.getActiveAccount();\n } else {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - no active account, fallback to first account\");\n account = this.authService.instance.getAllAccounts()[0];\n }\n\n const authRequest =\n typeof this.msalInterceptorConfig.authRequest === \"function\"\n ? this.msalInterceptorConfig.authRequest(this.authService, req, {\n account: account,\n })\n : { ...this.msalInterceptorConfig.authRequest, account };\n\n this.authService\n .getLogger()\n .info(`Interceptor - ${scopes.length} scopes found for endpoint`);\n this.authService\n .getLogger()\n .infoPii(`Interceptor - [${scopes}] scopes found for ${req.url}`);\n\n return this.acquireToken(authRequest, scopes, account).pipe(\n switchMap((result: AuthenticationResult) => {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - setting authorization headers\");\n const headers = req.headers.set(\n \"Authorization\",\n `Bearer ${result.accessToken}`\n );\n\n const requestClone = req.clone({ headers });\n return next.handle(requestClone);\n })\n );\n }\n\n /**\n * Try to acquire token silently. Invoke interaction if acquireTokenSilent rejected with error or resolved with null access token\n * @param authRequest Request\n * @param scopes Array of scopes for the request\n * @param account Account\n * @returns Authentication result\n */\n private acquireToken(\n authRequest: MsalInterceptorAuthRequest,\n scopes: string[],\n account: AccountInfo\n ): Observable<AuthenticationResult> {\n // Note: For MSA accounts, include openid scope when calling acquireTokenSilent to return idToken\n return this.authService\n .acquireTokenSilent({ ...authRequest, scopes, account })\n .pipe(\n catchError(() => {\n this.authService\n .getLogger()\n .error(\n \"Interceptor - acquireTokenSilent rejected with error. Invoking interaction to resolve.\"\n );\n return this.msalBroadcastService.inProgress$.pipe(\n take(1),\n switchMap((status: InteractionStatus) => {\n if (status === InteractionStatus.None) {\n return this.acquireTokenInteractively(authRequest, scopes);\n }\n\n return this.msalBroadcastService.inProgress$.pipe(\n filter(\n (status: InteractionStatus) =>\n status === InteractionStatus.None\n ),\n take(1),\n switchMap(() => this.acquireToken(authRequest, scopes, account))\n );\n })\n );\n }),\n switchMap((result: AuthenticationResult) => {\n if (!result.accessToken) {\n this.authService\n .getLogger()\n .error(\n \"Interceptor - acquireTokenSilent resolved with null access token. Known issue with B2C tenants, invoking interaction to resolve.\"\n );\n return this.msalBroadcastService.inProgress$.pipe(\n filter(\n (status: InteractionStatus) => status === InteractionStatus.None\n ),\n take(1),\n switchMap(() =>\n this.acquireTokenInteractively(authRequest, scopes)\n )\n );\n }\n return of(result);\n })\n );\n }\n\n /**\n * Invoke interaction for the given set of scopes\n * @param authRequest Request\n * @param scopes Array of scopes for the request\n * @returns Result from the interactive request\n */\n private acquireTokenInteractively(\n authRequest: MsalInterceptorAuthRequest,\n scopes: string[]\n ): Observable<AuthenticationResult> {\n if (this.msalInterceptorConfig.interactionType === InteractionType.Popup) {\n this.authService\n .getLogger()\n .verbose(\n \"Interceptor - error acquiring token silently, acquiring by popup\"\n );\n return this.authService.acquireTokenPopup({ ...authRequest, scopes });\n }\n this.authService\n .getLogger()\n .verbose(\n \"Interceptor - error acquiring token silently, acquiring by redirect\"\n );\n const redirectStartPage = window.location.href;\n this.authService.acquireTokenRedirect({\n ...authRequest,\n scopes,\n redirectStartPage,\n });\n return EMPTY;\n }\n\n /**\n * Looks up the scopes for the given endpoint from the protectedResourceMap\n * @param endpoint Url of the request\n * @param httpMethod Http method of the request\n * @returns Array of scopes, or null if not found\n *\n */\n private getScopesForEndpoint(\n endpoint: string,\n httpMethod: string\n ): Array<string> | null {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - getting scopes for endpoint\");\n\n // Ensures endpoints and protected resources compared are normalized\n const normalizedEndpoint = this.location.normalize(endpoint);\n\n const protectedResourcesArray = Array.from(\n this.msalInterceptorConfig.protectedResourceMap.keys()\n );\n\n const matchingProtectedResources = this.matchResourcesToEndpoint(\n protectedResourcesArray,\n normalizedEndpoint\n );\n\n if (matchingProtectedResources.length > 0) {\n return this.matchScopesToEndpoint(\n this.msalInterceptorConfig.protectedResourceMap,\n matchingProtectedResources,\n httpMethod\n );\n }\n\n return null;\n }\n\n /**\n * Finds resource endpoints that match request endpoint\n * @param protectedResourcesEndpoints\n * @param endpoint\n * @returns\n */\n private matchResourcesToEndpoint(\n protectedResourcesEndpoints: string[],\n endpoint: string\n ): Array<string> {\n const matchingResources: Array<string> = [];\n\n protectedResourcesEndpoints.forEach((key) => {\n const normalizedKey = this.location.normalize(key);\n\n // Get url components\n const absoluteKey = this.getAbsoluteUrl(normalizedKey);\n const keyComponents = new URL(absoluteKey);\n const absoluteEndpoint = this.getAbsoluteUrl(endpoint);\n const endpointComponents = new URL(absoluteEndpoint);\n\n if (this.checkUrlComponents(keyComponents, endpointComponents)) {\n matchingResources.push(key);\n }\n });\n\n return matchingResources;\n }\n\n /**\n * Compares URL segments between key and endpoint\n * @param key\n * @param endpoint\n * @returns\n */\n private checkUrlComponents(\n keyComponents: URL,\n endpointComponents: URL\n ): boolean {\n // URL properties from https://developer.mozilla.org/en-US/docs/Web/API/URL\n const urlProperties = [\"protocol\", \"host\", \"pathname\", \"search\", \"hash\"];\n\n for (const property of urlProperties) {\n if (keyComponents[property]) {\n const decodedInput = decodeURIComponent(keyComponents[property]);\n if (this.msalInterceptorConfig.strictMatching) {\n /*\n * Strict matching: anchored patterns, metacharacters are literals,\n * host wildcards do not span dot separators.\n */\n const component =\n property === \"pathname\"\n ? \"path\"\n : (property as \"host\" | \"protocol\" | \"search\" | \"hash\");\n if (\n !StringUtils.matchPatternStrict(\n decodedInput,\n endpointComponents[property],\n { component }\n )\n ) {\n return false;\n }\n } else {\n // Legacy matching: preserved exactly for backwards compatibility.\n if (\n !StringUtils.matchPattern(\n decodedInput,\n endpointComponents[property]\n )\n ) {\n return false;\n }\n }\n }\n }\n\n return true;\n }\n\n /**\n * Transforms relative urls to absolute urls\n * @param url\n * @returns\n */\n private getAbsoluteUrl(url: string): string {\n const link = this._document.createElement(\"a\");\n link.href = url;\n return link.href;\n }\n\n /**\n * Finds scopes from first matching endpoint with HTTP method that matches request\n * @param protectedResourceMap Protected resource map\n * @param endpointArray Array of resources that match request endpoint\n * @param httpMethod Http method of the request\n * @returns\n */\n private matchScopesToEndpoint(\n protectedResourceMap: Map<\n string,\n Array<string | ProtectedResourceScopes> | null\n >,\n endpointArray: string[],\n httpMethod: string\n ): Array<string> | null {\n const allMatchedScopes = [];\n\n // Check each matched endpoint for matching HttpMethod and scopes\n endpointArray.forEach((matchedEndpoint) => {\n const scopesForEndpoint = [];\n const methodAndScopesArray = protectedResourceMap.get(matchedEndpoint);\n\n // Return if resource is unprotected\n if (methodAndScopesArray === null) {\n allMatchedScopes.push(null);\n return;\n }\n\n methodAndScopesArray.forEach((entry) => {\n // Entry is either array of scopes or ProtectedResourceScopes object\n if (typeof entry === \"string\") {\n scopesForEndpoint.push(entry);\n } else {\n // Ensure methods being compared are normalized\n const normalizedRequestMethod = httpMethod.toLowerCase();\n const normalizedResourceMethod = entry.httpMethod.toLowerCase();\n // Method in protectedResourceMap matches request http method\n if (normalizedResourceMethod === normalizedRequestMethod) {\n // Validate if scopes comes null to unprotect the resource in a certain http method\n if (entry.scopes === null) {\n allMatchedScopes.push(null);\n } else {\n entry.scopes.forEach((scope) => {\n scopesForEndpoint.push(scope);\n });\n }\n }\n }\n });\n\n // Only add to all scopes if scopes for endpoint and method is found\n if (scopesForEndpoint.length > 0) {\n allMatchedScopes.push(scopesForEndpoint);\n }\n });\n\n if (allMatchedScopes.length > 0) {\n if (allMatchedScopes.length > 1) {\n this.authService\n .getLogger()\n .warning(\n \"Interceptor - More than 1 matching scopes for endpoint found.\"\n );\n }\n // Returns scopes for first matching endpoint\n return allMatchedScopes[0];\n }\n\n return null;\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * This is a dedicated redirect component to be added to Angular apps to\n * handle redirects when using @azure/msal-angular.\n * Import this component to use redirects in your app.\n */\n\nimport { Component, OnInit } from \"@angular/core\";\nimport { MsalService } from \"./msal.service\";\n\n@Component({\n selector: \"app-redirect\",\n template: \"\",\n})\nexport class MsalRedirectComponent implements OnInit {\n constructor(private authService: MsalService) {}\n\n ngOnInit(): void {\n this.authService.getLogger().verbose(\"MsalRedirectComponent activated\");\n this.authService.handleRedirectObservable().subscribe();\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { IPublicClientApplication } from \"@azure/msal-browser\";\nimport { MsalBroadcastService } from \"./msal.broadcast.service\";\nimport { MsalGuard } from \"./msal.guard\";\nimport { MsalGuardConfiguration } from \"./msal.guard.config\";\nimport { MsalInterceptorConfiguration } from \"./msal.interceptor.config\";\nimport { MsalRedirectComponent } from \"./msal.redirect.component\";\nimport { MsalService } from \"./msal.service\";\nimport {\n MSAL_INSTANCE,\n MSAL_GUARD_CONFIG,\n MSAL_INTERCEPTOR_CONFIG,\n} from \"./constants\";\n\n@NgModule({\n declarations: [MsalRedirectComponent],\n imports: [CommonModule],\n providers: [MsalGuard, MsalBroadcastService],\n})\nexport class MsalModule {\n static forRoot(\n msalInstance: IPublicClientApplication,\n guardConfig: MsalGuardConfiguration,\n interceptorConfig: MsalInterceptorConfiguration\n ): ModuleWithProviders<MsalModule> {\n return {\n ngModule: MsalModule,\n providers: [\n {\n provide: MSAL_INSTANCE,\n useValue: msalInstance,\n },\n {\n provide: MSAL_GUARD_CONFIG,\n useValue: guardConfig,\n },\n {\n provide: MSAL_INTERCEPTOR_CONFIG,\n useValue: interceptorConfig,\n },\n MsalService,\n ],\n };\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Injectable } from \"@angular/core\";\nimport { Location } from \"@angular/common\";\nimport { Router } from \"@angular/router\";\nimport {\n NavigationClient,\n NavigationOptions,\n UrlString,\n} from \"@azure/msal-browser\";\nimport { MsalService } from \"./msal.service\";\n\n/**\n * Custom navigation used for Angular client-side navigation.\n * See performance doc for details:\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/performance.md\n */\n@Injectable()\nexport class MsalCustomNavigationClient extends NavigationClient {\n constructor(\n private authService: MsalService,\n private router: Router,\n private location: Location\n ) {\n super();\n }\n\n async navigateInternal(\n url: string,\n options: NavigationOptions\n ): Promise<boolean> {\n this.authService.getLogger().trace(\"MsalCustomNavigationClient called\");\n\n this.authService\n .getLogger()\n .verbose(\"MsalCustomNavigationClient - navigating\");\n this.authService\n .getLogger()\n .verbosePii(`MsalCustomNavigationClient - navigating to url: ${url}`);\n\n // Prevent hash clearing from causing an issue with Client-side navigation after redirect is handled\n if (options.noHistory) {\n return super.navigateInternal(url, options);\n } else {\n // Normalizing newUrl if no query string\n const urlComponents = new UrlString(url).getUrlComponents();\n const newUrl = urlComponents.QueryString\n ? `${urlComponents.AbsolutePath}?${urlComponents.QueryString}`\n : this.location.normalize(urlComponents.AbsolutePath);\n await this.router.navigateByUrl(newUrl, {\n replaceUrl: options.noHistory,\n });\n }\n return Promise.resolve(options.noHistory);\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * @packageDocumentation\n * @module @azure/msal-angular\n */\n\nexport { MsalService } from \"./msal.service\";\nexport { IMsalService } from \"./IMsalService\";\nexport { MsalGuard } from \"./msal.guard\";\nexport {\n MsalGuardConfiguration,\n MsalGuardAuthRequest,\n} from \"./msal.guard.config\";\nexport { MsalInterceptor } from \"./msal.interceptor\";\nexport {\n MsalInterceptorConfiguration,\n MsalInterceptorAuthRequest,\n ProtectedResourceScopes,\n} from \"./msal.interceptor.config\";\nexport {\n MSAL_INSTANCE,\n MSAL_GUARD_CONFIG,\n MSAL_INTERCEPTOR_CONFIG,\n MSAL_BROADCAST_CONFIG,\n} from \"./constants\";\nexport { MsalBroadcastService } from \"./msal.broadcast.service\";\nexport { MsalBroadcastConfiguration } from \"./msal.broadcast.config\";\nexport { MsalModule } from \"./msal.module\";\nexport { MsalRedirectComponent } from \"./msal.redirect.component\";\nexport { MsalCustomNavigationClient } from \"./msal.navigation.client\";\nexport { version } from \"./packageMetadata\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.MsalBroadcastService","i2.MsalService","i1.MsalService","i2","i3.MsalBroadcastService"],"mappings":";;;;;;;;;;AAAA;AACO,MAAM,IAAI,GAAG,qBAAqB,CAAC;AACnC,MAAM,OAAO,GAAG;;ACFvB;;;AAGG;MAIU,aAAa,GAAG,IAAI,cAAc,CAAS,eAAe,EAAE;MAE5D,iBAAiB,GAAG,IAAI,cAAc,CACjD,mBAAmB,EACnB;MAEW,uBAAuB,GAAG,IAAI,cAAc,CACvD,yBAAyB,EACzB;MAEW,qBAAqB,GAAG,IAAI,cAAc,CACrD,uBAAuB;;AClBzB;;;AAGG;MAeU,oBAAoB,CAAA;IAM/B,WACiC,CAAA,YAAsC,EAG7D,mBAAgD,EAAA;AAHzB,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAA0B;AAG7D,QAAA,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAA6B;;QAGxD,IACE,IAAI,CAAC,mBAAmB;AACxB,YAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,GAAG,CAAC,EAC3C;AACA,YAAA,IAAI,CAAC,YAAY;AACd,iBAAA,SAAS,EAAE;AACX,iBAAA,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;iBACpB,OAAO,CACN,gFAAgF,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAS,OAAA,CAAA,CACjI,CAAC;AACJ,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,aAAa,CACnC,IAAI,CAAC,mBAAmB,CAAC,cAAc,CACxC,CAAC;AACH,SAAA;AAAM,aAAA;;AAEL,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,EAAgB,CAAC;AACjD,SAAA;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;;QAGrD,IAAI,CAAC,WAAW,GAAG,IAAI,eAAe,CACpC,iBAAiB,CAAC,OAAO,CAC1B,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QAEnD,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,OAAqB,KAAI;AAC3D,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChC,YAAA,MAAM,MAAM,GAAG,iBAAiB,CAAC,6BAA6B,CAC5D,OAAO,EACP,IAAI,CAAC,WAAW,CAAC,KAAK,CACvB,CAAC;YACF,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,gBAAA,IAAI,CAAC,YAAY;AACd,qBAAA,SAAS,EAAE;AACX,qBAAA,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;AACpB,qBAAA,OAAO,CACN,CAAA,mBAAA,EAAsB,OAAO,CAAC,SAAS,CAAuC,oCAAA,EAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE,CACpH,CAAC;AACJ,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;AAED;;AAEG;IACH,oBAAoB,GAAA;QAClB,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,iBAAiB,CAAC,OAAO,EAAE;YACxD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAC/C,SAAA;KACF;;kHAhEU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAOrB,aAAa,EAAA,EAAA,EAAA,KAAA,EAEb,qBAAqB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;sHATpB,oBAAoB,EAAA,CAAA,CAAA;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;;;8BAQN,MAAM;+BAAC,aAAa,CAAA;;8BACpB,QAAQ;;8BACR,MAAM;+BAAC,qBAAqB,CAAA;;;;AC3BjC;;;AAGG;MAuBU,WAAW,CAAA;AAItB,IAAA,WAAA,CACgC,QAAkC,EACxD,QAAkB,EAClB,QAAkB,EAAA;AAFI,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAA0B;AACxD,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;AAClB,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;AAE1B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;AACvD,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,YAAY,GAAG,CAAI,CAAA,EAAA,IAAI,EAAE,CAAC;AAChC,SAAA;QACD,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KACrE;IAED,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;KACzC;AACD,IAAA,iBAAiB,CAAC,OAAqB,EAAA;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;KACvD;AACD,IAAA,oBAAoB,CAAC,OAAwB,EAAA;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;KAC1D;AACD,IAAA,kBAAkB,CAChB,aAA4B,EAAA;QAE5B,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;KAC9D;AACD,IAAA,wBAAwB,CAAC,IAAa,EAAA;AACpC,QAAA,OAAO,IAAI,CACT,IAAI,CAAC,QAAQ;AACV,aAAA,UAAU,EAAE;AACZ,aAAA,IAAI,CAAC,MACJ,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,CAC/D;aACA,OAAO,CAAC,MAAK;;YAEZ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,EAAE,CAAC;SAChE,CAAC,CACL,CAAC;KACH;AACD,IAAA,UAAU,CAAC,OAAsB,EAAA;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;KAChD;AACD,IAAA,aAAa,CAAC,OAAyB,EAAA;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;KACnD;;AAED,IAAA,MAAM,CAAC,aAAiC,EAAA;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;KAClD;AACD,IAAA,cAAc,CAAC,aAAiC,EAAA;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;KAC1D;AACD,IAAA,WAAW,CAAC,aAAsC,EAAA;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;KACvD;AACD,IAAA,SAAS,CAAC,OAAyB,EAAA;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;KAC/C;AACD;;;AAGG;IACH,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9D,SAAA;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;;AAED,IAAA,SAAS,CAAC,MAAc,EAAA;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACjC;;AA5EU,WAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,kBAKZ,aAAa,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;6GALZ,WAAW,EAAA,CAAA,CAAA;4FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;;;8BAMN,MAAM;+BAAC,aAAa,CAAA;;;;AC/BzB;;;AAGG;MA2BU,SAAS,CAAA;IAGpB,WACqC,CAAA,eAAuC,EAClE,oBAA0C,EAC1C,WAAwB,EACxB,QAAkB,EAClB,MAAc,EAAA;AAJa,QAAA,IAAe,CAAA,eAAA,GAAf,eAAe,CAAwB;AAClE,QAAA,IAAoB,CAAA,oBAAA,GAApB,oBAAoB,CAAsB;AAC1C,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AACxB,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;AAClB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;;AAGtB,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;KACnD;AAED;;;AAGG;AACH,IAAA,QAAQ,CAAC,GAAW,EAAA;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KAClC;AAED;;;;AAIG;AACH,IAAA,iBAAiB,CAAC,IAAY,EAAA;QAC5B,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;;QAExE,MAAM,YAAY,GAAG,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC3D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CACrC,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CACpE,CAAC;;QAGF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;;AAGvD,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,WAAW;AACb,iBAAA,SAAS,EAAE;iBACX,OAAO,CAAC,qCAAqC,CAAC,CAAC;AAClD,YAAA,OAAO,CAAG,EAAA,OAAO,CAAI,CAAA,EAAA,OAAO,EAAE,CAAC;AAChC,SAAA;AAED;;;AAGG;AACH,QAAA,OAAO,CAAG,EAAA,OAAO,CAAG,EAAA,IAAI,EAAE,CAAC;KAC5B;AAED;;;AAGG;AACK,IAAA,kBAAkB,CAAC,KAA0B,EAAA;QACnD,MAAM,WAAW,GACf,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,KAAK,UAAU;AACpD,cAAE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;AAC3D,gCAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,eAAe,CAAC,eAAe,KAAK,eAAe,CAAC,KAAK,EAAE;YAClE,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;AACpE,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,WAA2B,CAAC,CAAC,IAAI,CAClE,GAAG,CAAC,CAAC,QAA8B,KAAI;AACrC,gBAAA,IAAI,CAAC,WAAW;AACb,qBAAA,SAAS,EAAE;qBACX,OAAO,CACN,yEAAyE,CAC1E,CAAC;gBACJ,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC7D,gBAAA,OAAO,IAAI,CAAC;aACb,CAAC,CACH,CAAC;AACH,SAAA;QAED,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QACvE,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,WAAW;AACpB,aAAA,aAAa,CACZ,MAAA,CAAA,MAAA,CAAA,EAAA,iBAAiB,EACd,EAAA,WAAW,CACK,CAAA;aACpB,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;KAC3B;AAED;;;AAGG;AACK,IAAA,cAAc,CACpB,KAA2B,EAAA;QAE3B,IACE,IAAI,CAAC,eAAe,CAAC,eAAe,KAAK,eAAe,CAAC,KAAK;YAC9D,IAAI,CAAC,eAAe,CAAC,eAAe,KAAK,eAAe,CAAC,QAAQ,EACjE;AACA,YAAA,MAAM,IAAI,6BAA6B,CACrC,0BAA0B,EAC1B,mJAAmJ,CACpJ,CAAC;AACH,SAAA;QACD,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAE7D;;;AAGG;AACH,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACjC,IACE,SAAS,CAAC,2BAA2B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC3D,YAAY,CAAC,UAAU,EAAE;gBACzB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,MAAM;AACjD,qBAAA,qBAAqB,EACxB;AACA,gBAAA,IAAI,CAAC,WAAW;AACb,qBAAA,SAAS,EAAE;qBACX,OAAO,CACN,mIAAmI,CACpI,CAAC;AACJ,gBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AAClB,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,WAAW;AACb,iBAAA,SAAS,EAAE;iBACX,IAAI,CACH,kFAAkF,CACnF,CAAC;AACJ,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACjB,SAAA;AAED;;AAEG;AACH,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;AACzC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CACnC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CACtC,CAAC;AACH,SAAA;;QAGD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE7C,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,IAAI,CACvC,SAAS,CAAC,MAAK;AACb,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,wBAAwB,EAAE,CAAC;AACrD,SAAC,CAAC,EACF,SAAS,CAAC,MAAK;YACb,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE;AACtD,gBAAA,IAAI,KAAK,EAAE;AACT,oBAAA,IAAI,CAAC,WAAW;AACb,yBAAA,SAAS,EAAE;yBACX,OAAO,CACN,4DAA4D,CAC7D,CAAC;AACJ,oBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACvC,iBAAA;AACD,gBAAA,IAAI,CAAC,WAAW;AACb,qBAAA,SAAS,EAAE;qBACX,OAAO,CAAC,sDAAsD,CAAC,CAAC;AACnE,gBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AAClB,aAAA;AAED,YAAA,IAAI,CAAC,WAAW;AACb,iBAAA,SAAS,EAAE;iBACX,OAAO,CAAC,yDAAyD,CAAC,CAAC;;AAGtE,YAAA,IAAI,KAAK,EAAE;AACT;;;;AAIG;AAEH;;;;AAIG;gBACH,MAAM,eAAe,GAAY,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9D,gBAAA,MAAM,oBAAoB,GACxB,CAAC,CAAC,KAAK,CAAC,IAAI;AACZ,oBAAA,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ;oBACrB,IAAI,CAAC,YAAY,CAAC,CAAI,CAAA,EAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAE,CAAA,CAAC,CAAC;AAC/C,gBAAA,MAAM,WAAW,GACf,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;AAGjE,gBAAA,IAAI,eAAe,KAAK,oBAAoB,IAAI,WAAW,CAAC,EAAE;AAC5D,oBAAA,IAAI,CAAC,WAAW;AACb,yBAAA,SAAS,EAAE;yBACX,IAAI,CACH,iEAAiE,CAClE,CAAC;;oBAGJ,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;AACjC,wBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAChD,qBAAA;;oBAGD,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,iBAAA;AACF,aAAA;AAED,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AAClB,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAY,KAAI;AAC1B,YAAA,IAAI,CAAC,WAAW;AACb,iBAAA,SAAS,EAAE;iBACX,KAAK,CAAC,oDAAoD,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,WAAW;AACb,iBAAA,SAAS,EAAE;AACX,iBAAA,QAAQ,CAAC,CAAkB,eAAA,EAAA,KAAK,CAAC,OAAO,CAAA,CAAE,CAAC,CAAC;AAC/C;;AAEG;AACH,YAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,KAAK,EAAE;AAClC,gBAAA,IAAI,CAAC,WAAW;AACb,qBAAA,SAAS,EAAE;qBACX,OAAO,CAAC,2CAA2C,CAAC,CAAC;AACxD,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAClC,aAAA;AACD,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;SAClB,CAAC,CACH,CAAC;KACH;AAED,IAAA,YAAY,CAAC,IAAY,EAAA;QACvB,QACE,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;AAC5D,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAC3B;KACH;IAED,WAAW,CACT,KAA6B,EAC7B,KAA0B,EAAA;QAE1B,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAC5D,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KACnC;IAED,gBAAgB,CACd,KAA6B,EAC7B,KAA0B,EAAA;QAE1B,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;AACjE,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KACnC;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACxD,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;KAC9B;;AAlQU,SAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAS,kBAIV,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;2GAJhB,SAAS,EAAA,CAAA,CAAA;4FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBADrB,UAAU;;;8BAKN,MAAM;+BAAC,iBAAiB,CAAA;;;;AClC7B;;;AAGG;MA8BU,eAAe,CAAA;AAG1B,IAAA,WAAA,CAEU,qBAAmD,EACnD,WAAwB,EACxB,QAAkB,EAClB,oBAA0C;;IAEhC,QAAc,EAAA;AALxB,QAAA,IAAqB,CAAA,qBAAA,GAArB,qBAAqB,CAA8B;AACnD,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AACxB,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;AAClB,QAAA,IAAoB,CAAA,oBAAA,GAApB,oBAAoB,CAAsB;AAIlD,QAAA,IAAI,CAAC,SAAS,GAAG,QAAoB,CAAC;KACvC;IAED,SAAS,CACP,GAAqB;IACrB,IAAiB;;;QAGjB,IACE,IAAI,CAAC,qBAAqB,CAAC,eAAe,KAAK,eAAe,CAAC,KAAK;YACpE,IAAI,CAAC,qBAAqB,CAAC,eAAe,KAAK,eAAe,CAAC,QAAQ,EACvE;AACA,YAAA,MAAM,IAAI,6BAA6B,CACrC,0BAA0B,EAC1B,6JAA6J,CAC9J,CAAC;AACH,SAAA;QAED,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;AACnE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;;QAG9D,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,WAAW;AACb,iBAAA,SAAS,EAAE;iBACX,OAAO,CAAC,sCAAsC,CAAC,CAAC;AACnD,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACzB,SAAA;;AAGD,QAAA,IAAI,OAAoB,CAAC;QACzB,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE;AAClD,YAAA,IAAI,CAAC,WAAW;AACb,iBAAA,SAAS,EAAE;iBACX,OAAO,CAAC,uCAAuC,CAAC,CAAC;YACpD,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;AACxD,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,WAAW;AACb,iBAAA,SAAS,EAAE;iBACX,OAAO,CAAC,4DAA4D,CAAC,CAAC;AACzE,YAAA,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;AACzD,SAAA;QAED,MAAM,WAAW,GACf,OAAO,IAAI,CAAC,qBAAqB,CAAC,WAAW,KAAK,UAAU;AAC1D,cAAE,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;AAC5D,gBAAA,OAAO,EAAE,OAAO;aACjB,CAAC;cACH,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAA,EAAA,EAAE,OAAO,EAAA,CAAE,CAAC;AAE7D,QAAA,IAAI,CAAC,WAAW;AACb,aAAA,SAAS,EAAE;AACX,aAAA,IAAI,CAAC,CAAiB,cAAA,EAAA,MAAM,CAAC,MAAM,CAAA,0BAAA,CAA4B,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,WAAW;AACb,aAAA,SAAS,EAAE;aACX,OAAO,CAAC,kBAAkB,MAAM,CAAA,mBAAA,EAAsB,GAAG,CAAC,GAAG,CAAE,CAAA,CAAC,CAAC;AAEpE,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CACzD,SAAS,CAAC,CAAC,MAA4B,KAAI;AACzC,YAAA,IAAI,CAAC,WAAW;AACb,iBAAA,SAAS,EAAE;iBACX,OAAO,CAAC,6CAA6C,CAAC,CAAC;AAC1D,YAAA,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAC7B,eAAe,EACf,UAAU,MAAM,CAAC,WAAW,CAAA,CAAE,CAC/B,CAAC;YAEF,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5C,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SAClC,CAAC,CACH,CAAC;KACH;AAED;;;;;;AAMG;AACK,IAAA,YAAY,CAClB,WAAuC,EACvC,MAAgB,EAChB,OAAoB,EAAA;;QAGpB,OAAO,IAAI,CAAC,WAAW;AACpB,aAAA,kBAAkB,iCAAM,WAAW,CAAA,EAAA,EAAE,MAAM,EAAE,OAAO,EAAG,CAAA,CAAA;AACvD,aAAA,IAAI,CACH,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,WAAW;AACb,iBAAA,SAAS,EAAE;iBACX,KAAK,CACJ,wFAAwF,CACzF,CAAC;AACJ,YAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAC/C,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,CAAC,MAAyB,KAAI;AACtC,gBAAA,IAAI,MAAM,KAAK,iBAAiB,CAAC,IAAI,EAAE;oBACrC,OAAO,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC5D,iBAAA;gBAED,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAC/C,MAAM,CACJ,CAAC,MAAyB,KACxB,MAAM,KAAK,iBAAiB,CAAC,IAAI,CACpC,EACD,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CACjE,CAAC;aACH,CAAC,CACH,CAAC;AACJ,SAAC,CAAC,EACF,SAAS,CAAC,CAAC,MAA4B,KAAI;AACzC,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AACvB,gBAAA,IAAI,CAAC,WAAW;AACb,qBAAA,SAAS,EAAE;qBACX,KAAK,CACJ,kIAAkI,CACnI,CAAC;AACJ,gBAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAC/C,MAAM,CACJ,CAAC,MAAyB,KAAK,MAAM,KAAK,iBAAiB,CAAC,IAAI,CACjE,EACD,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,MACR,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,MAAM,CAAC,CACpD,CACF,CAAC;AACH,aAAA;AACD,YAAA,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;SACnB,CAAC,CACH,CAAC;KACL;AAED;;;;;AAKG;IACK,yBAAyB,CAC/B,WAAuC,EACvC,MAAgB,EAAA;QAEhB,IAAI,IAAI,CAAC,qBAAqB,CAAC,eAAe,KAAK,eAAe,CAAC,KAAK,EAAE;AACxE,YAAA,IAAI,CAAC,WAAW;AACb,iBAAA,SAAS,EAAE;iBACX,OAAO,CACN,kEAAkE,CACnE,CAAC;YACJ,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAiB,iCAAM,WAAW,CAAA,EAAA,EAAE,MAAM,EAAA,CAAA,CAAG,CAAC;AACvE,SAAA;AACD,QAAA,IAAI,CAAC,WAAW;AACb,aAAA,SAAS,EAAE;aACX,OAAO,CACN,qEAAqE,CACtE,CAAC;AACJ,QAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC/C,QAAA,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAChC,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,WAAW,KACd,MAAM;AACN,YAAA,iBAAiB,IACjB,CAAC;AACH,QAAA,OAAO,KAAK,CAAC;KACd;AAED;;;;;;AAMG;IACK,oBAAoB,CAC1B,QAAgB,EAChB,UAAkB,EAAA;AAElB,QAAA,IAAI,CAAC,WAAW;AACb,aAAA,SAAS,EAAE;aACX,OAAO,CAAC,2CAA2C,CAAC,CAAC;;QAGxD,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE7D,QAAA,MAAM,uBAAuB,GAAG,KAAK,CAAC,IAAI,CACxC,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,IAAI,EAAE,CACvD,CAAC;QAEF,MAAM,0BAA0B,GAAG,IAAI,CAAC,wBAAwB,CAC9D,uBAAuB,EACvB,kBAAkB,CACnB,CAAC;AAEF,QAAA,IAAI,0BAA0B,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC,qBAAqB,CAC/B,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAC/C,0BAA0B,EAC1B,UAAU,CACX,CAAC;AACH,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;;;;AAKG;IACK,wBAAwB,CAC9B,2BAAqC,EACrC,QAAgB,EAAA;QAEhB,MAAM,iBAAiB,GAAkB,EAAE,CAAC;AAE5C,QAAA,2BAA2B,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;;YAGnD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;AACvD,YAAA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AACvD,YAAA,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAErD,IAAI,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,kBAAkB,CAAC,EAAE;AAC9D,gBAAA,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7B,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,iBAAiB,CAAC;KAC1B;AAED;;;;;AAKG;IACK,kBAAkB,CACxB,aAAkB,EAClB,kBAAuB,EAAA;;AAGvB,QAAA,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAEzE,QAAA,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE;AACpC,YAAA,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;gBAC3B,MAAM,YAAY,GAAG,kBAAkB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjE,gBAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE;AAC7C;;;AAGG;AACH,oBAAA,MAAM,SAAS,GACb,QAAQ,KAAK,UAAU;AACrB,0BAAE,MAAM;0BACL,QAAoD,CAAC;AAC5D,oBAAA,IACE,CAAC,WAAW,CAAC,kBAAkB,CAC7B,YAAY,EACZ,kBAAkB,CAAC,QAAQ,CAAC,EAC5B,EAAE,SAAS,EAAE,CACd,EACD;AACA,wBAAA,OAAO,KAAK,CAAC;AACd,qBAAA;AACF,iBAAA;AAAM,qBAAA;;AAEL,oBAAA,IACE,CAAC,WAAW,CAAC,YAAY,CACvB,YAAY,EACZ,kBAAkB,CAAC,QAAQ,CAAC,CAC7B,EACD;AACA,wBAAA,OAAO,KAAK,CAAC;AACd,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;;;AAIG;AACK,IAAA,cAAc,CAAC,GAAW,EAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;AAED;;;;;;AAMG;AACK,IAAA,qBAAqB,CAC3B,oBAGC,EACD,aAAuB,EACvB,UAAkB,EAAA;QAElB,MAAM,gBAAgB,GAAG,EAAE,CAAC;;AAG5B,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,eAAe,KAAI;YACxC,MAAM,iBAAiB,GAAG,EAAE,CAAC;YAC7B,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;;YAGvE,IAAI,oBAAoB,KAAK,IAAI,EAAE;AACjC,gBAAA,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5B,OAAO;AACR,aAAA;AAED,YAAA,oBAAoB,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;;AAErC,gBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,oBAAA,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,iBAAA;AAAM,qBAAA;;AAEL,oBAAA,MAAM,uBAAuB,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;oBACzD,MAAM,wBAAwB,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;;oBAEhE,IAAI,wBAAwB,KAAK,uBAAuB,EAAE;;AAExD,wBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE;AACzB,4BAAA,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,yBAAA;AAAM,6BAAA;4BACL,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC7B,gCAAA,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,6BAAC,CAAC,CAAC;AACJ,yBAAA;AACF,qBAAA;AACF,iBAAA;AACH,aAAC,CAAC,CAAC;;AAGH,YAAA,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AAChC,gBAAA,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC1C,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,gBAAA,IAAI,CAAC,WAAW;AACb,qBAAA,SAAS,EAAE;qBACX,OAAO,CACN,+DAA+D,CAChE,CAAC;AACL,aAAA;;AAED,YAAA,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC5B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;;6GAzXU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAIhB,uBAAuB,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAMvB,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;iHAVP,eAAe,EAAA,CAAA,CAAA;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;;8BAKN,MAAM;+BAAC,uBAAuB,CAAA;;8BAM9B,MAAM;+BAAC,QAAQ,CAAA;;;;AC3CpB;;;AAGG;AAEH;;;;AAIG;MASU,qBAAqB,CAAA;AAChC,IAAA,WAAA,CAAoB,WAAwB,EAAA;AAAxB,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;KAAI;IAEhD,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QACxE,IAAI,CAAC,WAAW,CAAC,wBAAwB,EAAE,CAAC,SAAS,EAAE,CAAC;KACzD;;mHANU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,oDAFtB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;4FAED,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,QAAQ,EAAE,EAAE;iBACb,CAAA;;;ACjBD;;;AAGG;MAsBU,UAAU,CAAA;AACrB,IAAA,OAAO,OAAO,CACZ,YAAsC,EACtC,WAAmC,EACnC,iBAA+C,EAAA;QAE/C,OAAO;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,aAAa;AACtB,oBAAA,QAAQ,EAAE,YAAY;AACvB,iBAAA;AACD,gBAAA;AACE,oBAAA,OAAO,EAAE,iBAAiB;AAC1B,oBAAA,QAAQ,EAAE,WAAW;AACtB,iBAAA;AACD,gBAAA;AACE,oBAAA,OAAO,EAAE,uBAAuB;AAChC,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA;gBACD,WAAW;AACZ,aAAA;SACF,CAAC;KACH;;wGAxBU,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAV,UAAU,EAAA,YAAA,EAAA,CAJN,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAC1B,YAAY,CAAA,EAAA,CAAA,CAAA;AAGX,UAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,aAFV,CAAC,SAAS,EAAE,oBAAoB,CAAC,YADlC,YAAY,CAAA,EAAA,CAAA,CAAA;4FAGX,UAAU,EAAA,UAAA,EAAA,CAAA;kBALtB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,qBAAqB,CAAC;oBACrC,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,SAAS,EAAE,CAAC,SAAS,EAAE,oBAAoB,CAAC;iBAC7C,CAAA;;;ACTD;;;;AAIG;AAEG,MAAO,0BAA2B,SAAQ,gBAAgB,CAAA;AAC9D,IAAA,WAAA,CACU,WAAwB,EACxB,MAAc,EACd,QAAkB,EAAA;AAE1B,QAAA,KAAK,EAAE,CAAC;AAJA,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AACxB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AACd,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;KAG3B;IAEK,gBAAgB,CACpB,GAAW,EACX,OAA0B,EAAA;;;;;YAE1B,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;AAExE,YAAA,IAAI,CAAC,WAAW;AACb,iBAAA,SAAS,EAAE;iBACX,OAAO,CAAC,yCAAyC,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,WAAW;AACb,iBAAA,SAAS,EAAE;AACX,iBAAA,UAAU,CAAC,CAAA,gDAAA,EAAmD,GAAG,CAAA,CAAE,CAAC,CAAC;;YAGxE,IAAI,OAAO,CAAC,SAAS,EAAE;AACrB,gBAAA,OAAO,OAAM,gBAAgB,CAAA,IAAA,CAAA,IAAA,EAAC,GAAG,EAAE,OAAO,CAAE,CAAA;AAC7C,aAAA;AAAM,iBAAA;;gBAEL,MAAM,aAAa,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC;AAC5D,gBAAA,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW;sBACpC,GAAG,aAAa,CAAC,YAAY,CAAI,CAAA,EAAA,aAAa,CAAC,WAAW,CAAE,CAAA;sBAC5D,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AACxD,gBAAA,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE;oBACtC,UAAU,EAAE,OAAO,CAAC,SAAS;AAC9B,iBAAA,CAAC,CAAC;AACJ,aAAA;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SAC3C,CAAA,CAAA;AAAA,KAAA;;wHApCU,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4HAA1B,0BAA0B,EAAA,CAAA,CAAA;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;;;ACpBX;;;AAGG;AAEH;;;AAGG;;ACRH;;AAEG;;;;"}
@@ -9,7 +9,7 @@ import * as i4 from '@angular/router';
9
9
 
10
10
  /* eslint-disable header/header */
11
11
  const name = "@azure/msal-angular";
12
- const version = "4.0.27";
12
+ const version = "4.1.1";
13
13
 
14
14
  /*
15
15
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -541,8 +541,23 @@ class MsalInterceptor {
541
541
  for (const property of urlProperties) {
542
542
  if (keyComponents[property]) {
543
543
  const decodedInput = decodeURIComponent(keyComponents[property]);
544
- if (!StringUtils.matchPattern(decodedInput, endpointComponents[property])) {
545
- return false;
544
+ if (this.msalInterceptorConfig.strictMatching) {
545
+ /*
546
+ * Strict matching: anchored patterns, metacharacters are literals,
547
+ * host wildcards do not span dot separators.
548
+ */
549
+ const component = property === "pathname"
550
+ ? "path"
551
+ : property;
552
+ if (!StringUtils.matchPatternStrict(decodedInput, endpointComponents[property], { component })) {
553
+ return false;
554
+ }
555
+ }
556
+ else {
557
+ // Legacy matching: preserved exactly for backwards compatibility.
558
+ if (!StringUtils.matchPattern(decodedInput, endpointComponents[property])) {
559
+ return false;
560
+ }
546
561
  }
547
562
  }
548
563
  }
@@ -701,7 +716,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
701
716
  /**
702
717
  * Custom navigation used for Angular client-side navigation.
703
718
  * See performance doc for details:
704
- * https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/performance.md
719
+ * https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/performance.md
705
720
  */
706
721
  class MsalCustomNavigationClient extends NavigationClient {
707
722
  constructor(authService, router, location) {
@@ -1 +1 @@
1
- {"version":3,"file":"azure-msal-angular.mjs","sources":["../../src/packageMetadata.ts","../../src/constants.ts","../../src/msal.broadcast.service.ts","../../src/msal.service.ts","../../src/msal.guard.ts","../../src/msal.interceptor.ts","../../src/msal.redirect.component.ts","../../src/msal.module.ts","../../src/msal.navigation.client.ts","../../src/public-api.ts","../../src/azure-msal-angular.ts"],"sourcesContent":["/* eslint-disable header/header */\nexport const name = \"@azure/msal-angular\";\nexport const version = \"4.0.27\";\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { InjectionToken } from \"@angular/core\";\n\nexport const MSAL_INSTANCE = new InjectionToken<string>(\"MSAL_INSTANCE\");\n\nexport const MSAL_GUARD_CONFIG = new InjectionToken<string>(\n \"MSAL_GUARD_CONFIG\"\n);\n\nexport const MSAL_INTERCEPTOR_CONFIG = new InjectionToken<string>(\n \"MSAL_INTERCEPTOR_CONFIG\"\n);\n\nexport const MSAL_BROADCAST_CONFIG = new InjectionToken<string>(\n \"MSAL_BROADCAST_CONFIG\"\n);\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Inject, Injectable, Optional } from \"@angular/core\";\nimport {\n EventMessage,\n EventMessageUtils,\n IPublicClientApplication,\n InteractionStatus,\n} from \"@azure/msal-browser\";\nimport { BehaviorSubject, Observable, ReplaySubject, Subject } from \"rxjs\";\nimport { MsalBroadcastConfiguration } from \"./msal.broadcast.config\";\nimport { MSAL_BROADCAST_CONFIG, MSAL_INSTANCE } from \"./constants\";\nimport { name, version } from \"./packageMetadata\";\n\n@Injectable()\nexport class MsalBroadcastService {\n private _msalSubject: Subject<EventMessage>;\n public msalSubject$: Observable<EventMessage>;\n private _inProgress: BehaviorSubject<InteractionStatus>;\n public inProgress$: Observable<InteractionStatus>;\n\n constructor(\n @Inject(MSAL_INSTANCE) private msalInstance: IPublicClientApplication,\n @Optional()\n @Inject(MSAL_BROADCAST_CONFIG)\n private msalBroadcastConfig?: MsalBroadcastConfiguration\n ) {\n // Make _msalSubject a ReplaySubject if configured to replay past events\n if (\n this.msalBroadcastConfig &&\n this.msalBroadcastConfig.eventsToReplay > 0\n ) {\n this.msalInstance\n .getLogger()\n .clone(name, version)\n .verbose(\n `BroadcastService - eventsToReplay set on BroadcastConfig, replaying the last ${this.msalBroadcastConfig.eventsToReplay} events`\n );\n this._msalSubject = new ReplaySubject<EventMessage>(\n this.msalBroadcastConfig.eventsToReplay\n );\n } else {\n // Defaults to _msalSubject being a Subject\n this._msalSubject = new Subject<EventMessage>();\n }\n\n this.msalSubject$ = this._msalSubject.asObservable();\n\n // InProgress as BehaviorSubject so most recent inProgress state will be available upon subscription\n this._inProgress = new BehaviorSubject<InteractionStatus>(\n InteractionStatus.Startup\n );\n this.inProgress$ = this._inProgress.asObservable();\n\n this.msalInstance.addEventCallback((message: EventMessage) => {\n this._msalSubject.next(message);\n const status = EventMessageUtils.getInteractionStatusFromEvent(\n message,\n this._inProgress.value\n );\n if (status !== null) {\n this.msalInstance\n .getLogger()\n .clone(name, version)\n .verbose(\n `BroadcastService - ${message.eventType} results in setting inProgress from ${this._inProgress.value} to ${status}`\n );\n this._inProgress.next(status);\n }\n });\n }\n\n /**\n * Resets inProgress state to None\n */\n resetInProgressEvent(): void {\n if (this._inProgress.value === InteractionStatus.Startup) {\n this._inProgress.next(InteractionStatus.None);\n }\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Inject, Injectable, Injector } from \"@angular/core\";\nimport { Location } from \"@angular/common\";\nimport {\n IPublicClientApplication,\n EndSessionRequest,\n EndSessionPopupRequest,\n AuthenticationResult,\n RedirectRequest,\n SilentRequest,\n PopupRequest,\n SsoSilentRequest,\n Logger,\n WrapperSKU,\n} from \"@azure/msal-browser\";\nimport { Observable, from } from \"rxjs\";\nimport { IMsalService } from \"./IMsalService\";\nimport { name, version } from \"./packageMetadata\";\nimport { MSAL_INSTANCE } from \"./constants\";\nimport { MsalBroadcastService } from \"./msal.broadcast.service\";\n\n@Injectable()\nexport class MsalService implements IMsalService {\n private redirectHash: string;\n private logger: Logger;\n\n constructor(\n @Inject(MSAL_INSTANCE) public instance: IPublicClientApplication,\n private location: Location,\n private injector: Injector\n ) {\n const hash = this.location.path(true).split(\"#\").pop();\n if (hash) {\n this.redirectHash = `#${hash}`;\n }\n this.instance.initializeWrapperLibrary(WrapperSKU.Angular, version);\n }\n\n initialize(): Observable<void> {\n return from(this.instance.initialize());\n }\n acquireTokenPopup(request: PopupRequest): Observable<AuthenticationResult> {\n return from(this.instance.acquireTokenPopup(request));\n }\n acquireTokenRedirect(request: RedirectRequest): Observable<void> {\n return from(this.instance.acquireTokenRedirect(request));\n }\n acquireTokenSilent(\n silentRequest: SilentRequest\n ): Observable<AuthenticationResult> {\n return from(this.instance.acquireTokenSilent(silentRequest));\n }\n handleRedirectObservable(hash?: string): Observable<AuthenticationResult> {\n return from(\n this.instance\n .initialize()\n .then(() =>\n this.instance.handleRedirectPromise(hash || this.redirectHash)\n )\n .finally(() => {\n // update inProgress state to none\n this.injector.get(MsalBroadcastService).resetInProgressEvent();\n })\n );\n }\n loginPopup(request?: PopupRequest): Observable<AuthenticationResult> {\n return from(this.instance.loginPopup(request));\n }\n loginRedirect(request?: RedirectRequest): Observable<void> {\n return from(this.instance.loginRedirect(request));\n }\n // @deprecated: Use logoutRedirect or logoutPopup\n logout(logoutRequest?: EndSessionRequest): Observable<void> {\n return from(this.instance.logout(logoutRequest));\n }\n logoutRedirect(logoutRequest?: EndSessionRequest): Observable<void> {\n return from(this.instance.logoutRedirect(logoutRequest));\n }\n logoutPopup(logoutRequest?: EndSessionPopupRequest): Observable<void> {\n return from(this.instance.logoutPopup(logoutRequest));\n }\n ssoSilent(request: SsoSilentRequest): Observable<AuthenticationResult> {\n return from(this.instance.ssoSilent(request));\n }\n /**\n * Gets logger for msal-angular.\n * If no logger set, returns logger instance created with same options as msal-browser\n */\n getLogger(): Logger {\n if (!this.logger) {\n this.logger = this.instance.getLogger().clone(name, version);\n }\n return this.logger;\n }\n // Create a logger instance for msal-angular with the same options as msal-browser\n setLogger(logger: Logger): void {\n this.logger = logger.clone(name, version);\n this.instance.setLogger(logger);\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Injectable, Inject } from \"@angular/core\";\nimport { Location } from \"@angular/common\";\nimport {\n ActivatedRouteSnapshot,\n RouterStateSnapshot,\n UrlTree,\n Router,\n} from \"@angular/router\";\nimport {\n InteractionType,\n BrowserConfigurationAuthError,\n BrowserUtils,\n UrlString,\n PopupRequest,\n RedirectRequest,\n AuthenticationResult,\n} from \"@azure/msal-browser\";\nimport { Observable, of } from \"rxjs\";\nimport { concatMap, catchError, map } from \"rxjs/operators\";\nimport { MsalService } from \"./msal.service\";\nimport { MsalGuardConfiguration } from \"./msal.guard.config\";\nimport { MsalBroadcastService } from \"./msal.broadcast.service\";\nimport { MSAL_GUARD_CONFIG } from \"./constants\";\n\n@Injectable()\nexport class MsalGuard {\n private loginFailedRoute?: UrlTree;\n\n constructor(\n @Inject(MSAL_GUARD_CONFIG) private msalGuardConfig: MsalGuardConfiguration,\n private msalBroadcastService: MsalBroadcastService,\n private authService: MsalService,\n private location: Location,\n private router: Router\n ) {\n // Subscribing so events in MsalGuard will set inProgress$ observable\n this.msalBroadcastService.inProgress$.subscribe();\n }\n\n /**\n * Parses url string to UrlTree\n * @param url\n */\n parseUrl(url: string): UrlTree {\n return this.router.parseUrl(url);\n }\n\n /**\n * Builds the absolute url for the destination page\n * @param path Relative path of requested page\n * @returns Full destination url\n */\n getDestinationUrl(path: string): string {\n this.authService.getLogger().verbose(\"Guard - getting destination url\");\n // Absolute base url for the application (default to origin if base element not present)\n const baseElements = document.getElementsByTagName(\"base\");\n const baseUrl = this.location.normalize(\n baseElements.length ? baseElements[0].href : window.location.origin\n );\n\n // Path of page (including hash, if using hash routing)\n const pathUrl = this.location.prepareExternalUrl(path);\n\n // Hash location strategy\n if (pathUrl.startsWith(\"#\")) {\n this.authService\n .getLogger()\n .verbose(\"Guard - destination by hash routing\");\n return `${baseUrl}/${pathUrl}`;\n }\n\n /*\n * If using path location strategy, pathUrl will include the relative portion of the base path (e.g. /base/page).\n * Since baseUrl also includes /base, can just concatentate baseUrl + path\n */\n return `${baseUrl}${path}`;\n }\n\n /**\n * Interactively prompt the user to login\n * @param url Path of the requested page\n */\n private loginInteractively(state: RouterStateSnapshot): Observable<boolean> {\n const authRequest =\n typeof this.msalGuardConfig.authRequest === \"function\"\n ? this.msalGuardConfig.authRequest(this.authService, state)\n : { ...this.msalGuardConfig.authRequest };\n if (this.msalGuardConfig.interactionType === InteractionType.Popup) {\n this.authService.getLogger().verbose(\"Guard - logging in by popup\");\n return this.authService.loginPopup(authRequest as PopupRequest).pipe(\n map((response: AuthenticationResult) => {\n this.authService\n .getLogger()\n .verbose(\n \"Guard - login by popup successful, can activate, setting active account\"\n );\n this.authService.instance.setActiveAccount(response.account);\n return true;\n })\n );\n }\n\n this.authService.getLogger().verbose(\"Guard - logging in by redirect\");\n const redirectStartPage = this.getDestinationUrl(state.url);\n return this.authService\n .loginRedirect({\n redirectStartPage,\n ...authRequest,\n } as RedirectRequest)\n .pipe(map(() => false));\n }\n\n /**\n * Helper which checks for the correct interaction type, prevents page with Guard to be set as redirect, and calls handleRedirectObservable\n * @param state\n */\n private activateHelper(\n state?: RouterStateSnapshot\n ): Observable<boolean | UrlTree> {\n if (\n this.msalGuardConfig.interactionType !== InteractionType.Popup &&\n this.msalGuardConfig.interactionType !== InteractionType.Redirect\n ) {\n throw new BrowserConfigurationAuthError(\n \"invalid_interaction_type\",\n \"Invalid interaction type provided to MSAL Guard. InteractionType.Popup or InteractionType.Redirect must be provided in the MsalGuardConfiguration\"\n );\n }\n this.authService.getLogger().verbose(\"MSAL Guard activated\");\n\n /*\n * If a page with MSAL Guard is set as the redirect for acquireTokenSilent,\n * short-circuit to prevent redirecting or popups.\n */\n if (typeof window !== \"undefined\") {\n if (\n UrlString.hashContainsKnownProperties(window.location.hash) &&\n BrowserUtils.isInIframe() &&\n !this.authService.instance.getConfiguration().system\n .allowRedirectInIframe\n ) {\n this.authService\n .getLogger()\n .warning(\n \"Guard - redirectUri set to page with MSAL Guard. It is recommended to not set redirectUri to a page that requires authentication.\"\n );\n return of(false);\n }\n } else {\n this.authService\n .getLogger()\n .info(\n \"Guard - window is undefined, MSAL does not support server-side token acquisition\"\n );\n return of(true);\n }\n\n /**\n * If a loginFailedRoute is set in the config, set this as the loginFailedRoute\n */\n if (this.msalGuardConfig.loginFailedRoute) {\n this.loginFailedRoute = this.parseUrl(\n this.msalGuardConfig.loginFailedRoute\n );\n }\n\n // Capture current path before it gets changed by handleRedirectObservable\n const currentPath = this.location.path(true);\n\n return this.authService.initialize().pipe(\n concatMap(() => {\n return this.authService.handleRedirectObservable();\n }),\n concatMap(() => {\n if (!this.authService.instance.getAllAccounts().length) {\n if (state) {\n this.authService\n .getLogger()\n .verbose(\n \"Guard - no accounts retrieved, log in required to activate\"\n );\n return this.loginInteractively(state);\n }\n this.authService\n .getLogger()\n .verbose(\"Guard - no accounts retrieved, no state, cannot load\");\n return of(false);\n }\n\n this.authService\n .getLogger()\n .verbose(\"Guard - at least 1 account exists, can activate or load\");\n\n // Prevent navigating the app to /#code= or /code=\n if (state) {\n /*\n * Path routing:\n * state.url: /#code=...\n * state.root.fragment: code=...\n */\n\n /*\n * Hash routing:\n * state.url: /code\n * state.root.fragment: null\n */\n const urlContainsCode: boolean = this.includesCode(state.url);\n const fragmentContainsCode: boolean =\n !!state.root &&\n !!state.root.fragment &&\n this.includesCode(`#${state.root.fragment}`);\n const hashRouting: boolean =\n this.location.prepareExternalUrl(state.url).indexOf(\"#\") === 0;\n\n // Ensure code parameter is in fragment (and not in query parameter), or that hash hash routing is used\n if (urlContainsCode && (fragmentContainsCode || hashRouting)) {\n this.authService\n .getLogger()\n .info(\n \"Guard - Hash contains known code response, stopping navigation.\"\n );\n\n // Path routing (navigate to current path without hash)\n if (currentPath.indexOf(\"#\") > -1) {\n return of(this.parseUrl(this.location.path()));\n }\n\n // Hash routing (navigate to root path)\n return of(this.parseUrl(\"\"));\n }\n }\n\n return of(true);\n }),\n catchError((error: Error) => {\n this.authService\n .getLogger()\n .error(\"Guard - error while logging in, unable to activate\");\n this.authService\n .getLogger()\n .errorPii(`Guard - error: ${error.message}`);\n /**\n * If a loginFailedRoute is set, checks to see if state is passed before returning route\n */\n if (this.loginFailedRoute && state) {\n this.authService\n .getLogger()\n .verbose(\"Guard - loginFailedRoute set, redirecting\");\n return of(this.loginFailedRoute);\n }\n return of(false);\n })\n );\n }\n\n includesCode(path: string): boolean {\n return (\n (path.lastIndexOf(\"/code\") > -1 &&\n path.lastIndexOf(\"/code\") === path.length - \"/code\".length) || // path.endsWith(\"/code\")\n path.indexOf(\"#code=\") > -1 ||\n path.indexOf(\"&code=\") > -1\n );\n }\n\n canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable<boolean | UrlTree> {\n this.authService.getLogger().verbose(\"Guard - canActivate\");\n return this.activateHelper(state);\n }\n\n canActivateChild(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable<boolean | UrlTree> {\n this.authService.getLogger().verbose(\"Guard - canActivateChild\");\n return this.activateHelper(state);\n }\n\n canMatch(): Observable<boolean | UrlTree> {\n this.authService.getLogger().verbose(\"Guard - canLoad\");\n return this.activateHelper();\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Injectable, Inject } from \"@angular/core\";\nimport { Location, DOCUMENT } from \"@angular/common\";\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor,\n} from \"@angular/common/http\"; // eslint-disable-line import/no-unresolved\nimport {\n AccountInfo,\n AuthenticationResult,\n BrowserConfigurationAuthError,\n InteractionStatus,\n InteractionType,\n StringUtils,\n} from \"@azure/msal-browser\";\nimport { Observable, EMPTY, of } from \"rxjs\";\nimport { switchMap, catchError, take, filter } from \"rxjs/operators\";\nimport { MsalService } from \"./msal.service\";\nimport {\n MsalInterceptorAuthRequest,\n MsalInterceptorConfiguration,\n ProtectedResourceScopes,\n} from \"./msal.interceptor.config\";\nimport { MsalBroadcastService } from \"./msal.broadcast.service\";\nimport { MSAL_INTERCEPTOR_CONFIG } from \"./constants\";\n\n@Injectable()\nexport class MsalInterceptor implements HttpInterceptor {\n private _document?: Document;\n\n constructor(\n @Inject(MSAL_INTERCEPTOR_CONFIG)\n private msalInterceptorConfig: MsalInterceptorConfiguration,\n private authService: MsalService,\n private location: Location,\n private msalBroadcastService: MsalBroadcastService,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n @Inject(DOCUMENT) document?: any\n ) {\n this._document = document as Document;\n }\n\n intercept(\n req: HttpRequest<any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n next: HttpHandler\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Observable<HttpEvent<any>> {\n if (\n this.msalInterceptorConfig.interactionType !== InteractionType.Popup &&\n this.msalInterceptorConfig.interactionType !== InteractionType.Redirect\n ) {\n throw new BrowserConfigurationAuthError(\n \"invalid_interaction_type\",\n \"Invalid interaction type provided to MSAL Interceptor. InteractionType.Popup, InteractionType.Redirect must be provided in the msalInterceptorConfiguration\"\n );\n }\n\n this.authService.getLogger().verbose(\"MSAL Interceptor activated\");\n const scopes = this.getScopesForEndpoint(req.url, req.method);\n\n // If no scopes for endpoint, does not acquire token\n if (!scopes || scopes.length === 0) {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - no scopes for endpoint\");\n return next.handle(req);\n }\n\n // Sets account as active account or first account\n let account: AccountInfo;\n if (!!this.authService.instance.getActiveAccount()) {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - active account selected\");\n account = this.authService.instance.getActiveAccount();\n } else {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - no active account, fallback to first account\");\n account = this.authService.instance.getAllAccounts()[0];\n }\n\n const authRequest =\n typeof this.msalInterceptorConfig.authRequest === \"function\"\n ? this.msalInterceptorConfig.authRequest(this.authService, req, {\n account: account,\n })\n : { ...this.msalInterceptorConfig.authRequest, account };\n\n this.authService\n .getLogger()\n .info(`Interceptor - ${scopes.length} scopes found for endpoint`);\n this.authService\n .getLogger()\n .infoPii(`Interceptor - [${scopes}] scopes found for ${req.url}`);\n\n return this.acquireToken(authRequest, scopes, account).pipe(\n switchMap((result: AuthenticationResult) => {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - setting authorization headers\");\n const headers = req.headers.set(\n \"Authorization\",\n `Bearer ${result.accessToken}`\n );\n\n const requestClone = req.clone({ headers });\n return next.handle(requestClone);\n })\n );\n }\n\n /**\n * Try to acquire token silently. Invoke interaction if acquireTokenSilent rejected with error or resolved with null access token\n * @param authRequest Request\n * @param scopes Array of scopes for the request\n * @param account Account\n * @returns Authentication result\n */\n private acquireToken(\n authRequest: MsalInterceptorAuthRequest,\n scopes: string[],\n account: AccountInfo\n ): Observable<AuthenticationResult> {\n // Note: For MSA accounts, include openid scope when calling acquireTokenSilent to return idToken\n return this.authService\n .acquireTokenSilent({ ...authRequest, scopes, account })\n .pipe(\n catchError(() => {\n this.authService\n .getLogger()\n .error(\n \"Interceptor - acquireTokenSilent rejected with error. Invoking interaction to resolve.\"\n );\n return this.msalBroadcastService.inProgress$.pipe(\n take(1),\n switchMap((status: InteractionStatus) => {\n if (status === InteractionStatus.None) {\n return this.acquireTokenInteractively(authRequest, scopes);\n }\n\n return this.msalBroadcastService.inProgress$.pipe(\n filter(\n (status: InteractionStatus) =>\n status === InteractionStatus.None\n ),\n take(1),\n switchMap(() => this.acquireToken(authRequest, scopes, account))\n );\n })\n );\n }),\n switchMap((result: AuthenticationResult) => {\n if (!result.accessToken) {\n this.authService\n .getLogger()\n .error(\n \"Interceptor - acquireTokenSilent resolved with null access token. Known issue with B2C tenants, invoking interaction to resolve.\"\n );\n return this.msalBroadcastService.inProgress$.pipe(\n filter(\n (status: InteractionStatus) => status === InteractionStatus.None\n ),\n take(1),\n switchMap(() =>\n this.acquireTokenInteractively(authRequest, scopes)\n )\n );\n }\n return of(result);\n })\n );\n }\n\n /**\n * Invoke interaction for the given set of scopes\n * @param authRequest Request\n * @param scopes Array of scopes for the request\n * @returns Result from the interactive request\n */\n private acquireTokenInteractively(\n authRequest: MsalInterceptorAuthRequest,\n scopes: string[]\n ): Observable<AuthenticationResult> {\n if (this.msalInterceptorConfig.interactionType === InteractionType.Popup) {\n this.authService\n .getLogger()\n .verbose(\n \"Interceptor - error acquiring token silently, acquiring by popup\"\n );\n return this.authService.acquireTokenPopup({ ...authRequest, scopes });\n }\n this.authService\n .getLogger()\n .verbose(\n \"Interceptor - error acquiring token silently, acquiring by redirect\"\n );\n const redirectStartPage = window.location.href;\n this.authService.acquireTokenRedirect({\n ...authRequest,\n scopes,\n redirectStartPage,\n });\n return EMPTY;\n }\n\n /**\n * Looks up the scopes for the given endpoint from the protectedResourceMap\n * @param endpoint Url of the request\n * @param httpMethod Http method of the request\n * @returns Array of scopes, or null if not found\n *\n */\n private getScopesForEndpoint(\n endpoint: string,\n httpMethod: string\n ): Array<string> | null {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - getting scopes for endpoint\");\n\n // Ensures endpoints and protected resources compared are normalized\n const normalizedEndpoint = this.location.normalize(endpoint);\n\n const protectedResourcesArray = Array.from(\n this.msalInterceptorConfig.protectedResourceMap.keys()\n );\n\n const matchingProtectedResources = this.matchResourcesToEndpoint(\n protectedResourcesArray,\n normalizedEndpoint\n );\n\n if (matchingProtectedResources.length > 0) {\n return this.matchScopesToEndpoint(\n this.msalInterceptorConfig.protectedResourceMap,\n matchingProtectedResources,\n httpMethod\n );\n }\n\n return null;\n }\n\n /**\n * Finds resource endpoints that match request endpoint\n * @param protectedResourcesEndpoints\n * @param endpoint\n * @returns\n */\n private matchResourcesToEndpoint(\n protectedResourcesEndpoints: string[],\n endpoint: string\n ): Array<string> {\n const matchingResources: Array<string> = [];\n\n protectedResourcesEndpoints.forEach((key) => {\n const normalizedKey = this.location.normalize(key);\n\n // Get url components\n const absoluteKey = this.getAbsoluteUrl(normalizedKey);\n const keyComponents = new URL(absoluteKey);\n const absoluteEndpoint = this.getAbsoluteUrl(endpoint);\n const endpointComponents = new URL(absoluteEndpoint);\n\n if (this.checkUrlComponents(keyComponents, endpointComponents)) {\n matchingResources.push(key);\n }\n });\n\n return matchingResources;\n }\n\n /**\n * Compares URL segments between key and endpoint\n * @param key\n * @param endpoint\n * @returns\n */\n private checkUrlComponents(\n keyComponents: URL,\n endpointComponents: URL\n ): boolean {\n // URL properties from https://developer.mozilla.org/en-US/docs/Web/API/URL\n const urlProperties = [\"protocol\", \"host\", \"pathname\", \"search\", \"hash\"];\n\n for (const property of urlProperties) {\n if (keyComponents[property]) {\n const decodedInput = decodeURIComponent(keyComponents[property]);\n if (\n !StringUtils.matchPattern(decodedInput, endpointComponents[property])\n ) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n /**\n * Transforms relative urls to absolute urls\n * @param url\n * @returns\n */\n private getAbsoluteUrl(url: string): string {\n const link = this._document.createElement(\"a\");\n link.href = url;\n return link.href;\n }\n\n /**\n * Finds scopes from first matching endpoint with HTTP method that matches request\n * @param protectedResourceMap Protected resource map\n * @param endpointArray Array of resources that match request endpoint\n * @param httpMethod Http method of the request\n * @returns\n */\n private matchScopesToEndpoint(\n protectedResourceMap: Map<\n string,\n Array<string | ProtectedResourceScopes> | null\n >,\n endpointArray: string[],\n httpMethod: string\n ): Array<string> | null {\n const allMatchedScopes = [];\n\n // Check each matched endpoint for matching HttpMethod and scopes\n endpointArray.forEach((matchedEndpoint) => {\n const scopesForEndpoint = [];\n const methodAndScopesArray = protectedResourceMap.get(matchedEndpoint);\n\n // Return if resource is unprotected\n if (methodAndScopesArray === null) {\n allMatchedScopes.push(null);\n return;\n }\n\n methodAndScopesArray.forEach((entry) => {\n // Entry is either array of scopes or ProtectedResourceScopes object\n if (typeof entry === \"string\") {\n scopesForEndpoint.push(entry);\n } else {\n // Ensure methods being compared are normalized\n const normalizedRequestMethod = httpMethod.toLowerCase();\n const normalizedResourceMethod = entry.httpMethod.toLowerCase();\n // Method in protectedResourceMap matches request http method\n if (normalizedResourceMethod === normalizedRequestMethod) {\n // Validate if scopes comes null to unprotect the resource in a certain http method\n if (entry.scopes === null) {\n allMatchedScopes.push(null);\n } else {\n entry.scopes.forEach((scope) => {\n scopesForEndpoint.push(scope);\n });\n }\n }\n }\n });\n\n // Only add to all scopes if scopes for endpoint and method is found\n if (scopesForEndpoint.length > 0) {\n allMatchedScopes.push(scopesForEndpoint);\n }\n });\n\n if (allMatchedScopes.length > 0) {\n if (allMatchedScopes.length > 1) {\n this.authService\n .getLogger()\n .warning(\n \"Interceptor - More than 1 matching scopes for endpoint found.\"\n );\n }\n // Returns scopes for first matching endpoint\n return allMatchedScopes[0];\n }\n\n return null;\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * This is a dedicated redirect component to be added to Angular apps to\n * handle redirects when using @azure/msal-angular.\n * Import this component to use redirects in your app.\n */\n\nimport { Component, OnInit } from \"@angular/core\";\nimport { MsalService } from \"./msal.service\";\n\n@Component({\n selector: \"app-redirect\",\n template: \"\",\n})\nexport class MsalRedirectComponent implements OnInit {\n constructor(private authService: MsalService) {}\n\n ngOnInit(): void {\n this.authService.getLogger().verbose(\"MsalRedirectComponent activated\");\n this.authService.handleRedirectObservable().subscribe();\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { IPublicClientApplication } from \"@azure/msal-browser\";\nimport { MsalBroadcastService } from \"./msal.broadcast.service\";\nimport { MsalGuard } from \"./msal.guard\";\nimport { MsalGuardConfiguration } from \"./msal.guard.config\";\nimport { MsalInterceptorConfiguration } from \"./msal.interceptor.config\";\nimport { MsalRedirectComponent } from \"./msal.redirect.component\";\nimport { MsalService } from \"./msal.service\";\nimport {\n MSAL_INSTANCE,\n MSAL_GUARD_CONFIG,\n MSAL_INTERCEPTOR_CONFIG,\n} from \"./constants\";\n\n@NgModule({\n declarations: [MsalRedirectComponent],\n imports: [CommonModule],\n providers: [MsalGuard, MsalBroadcastService],\n})\nexport class MsalModule {\n static forRoot(\n msalInstance: IPublicClientApplication,\n guardConfig: MsalGuardConfiguration,\n interceptorConfig: MsalInterceptorConfiguration\n ): ModuleWithProviders<MsalModule> {\n return {\n ngModule: MsalModule,\n providers: [\n {\n provide: MSAL_INSTANCE,\n useValue: msalInstance,\n },\n {\n provide: MSAL_GUARD_CONFIG,\n useValue: guardConfig,\n },\n {\n provide: MSAL_INTERCEPTOR_CONFIG,\n useValue: interceptorConfig,\n },\n MsalService,\n ],\n };\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Injectable } from \"@angular/core\";\nimport { Location } from \"@angular/common\";\nimport { Router } from \"@angular/router\";\nimport {\n NavigationClient,\n NavigationOptions,\n UrlString,\n} from \"@azure/msal-browser\";\nimport { MsalService } from \"./msal.service\";\n\n/**\n * Custom navigation used for Angular client-side navigation.\n * See performance doc for details:\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/performance.md\n */\n@Injectable()\nexport class MsalCustomNavigationClient extends NavigationClient {\n constructor(\n private authService: MsalService,\n private router: Router,\n private location: Location\n ) {\n super();\n }\n\n async navigateInternal(\n url: string,\n options: NavigationOptions\n ): Promise<boolean> {\n this.authService.getLogger().trace(\"MsalCustomNavigationClient called\");\n\n this.authService\n .getLogger()\n .verbose(\"MsalCustomNavigationClient - navigating\");\n this.authService\n .getLogger()\n .verbosePii(`MsalCustomNavigationClient - navigating to url: ${url}`);\n\n // Prevent hash clearing from causing an issue with Client-side navigation after redirect is handled\n if (options.noHistory) {\n return super.navigateInternal(url, options);\n } else {\n // Normalizing newUrl if no query string\n const urlComponents = new UrlString(url).getUrlComponents();\n const newUrl = urlComponents.QueryString\n ? `${urlComponents.AbsolutePath}?${urlComponents.QueryString}`\n : this.location.normalize(urlComponents.AbsolutePath);\n await this.router.navigateByUrl(newUrl, {\n replaceUrl: options.noHistory,\n });\n }\n return Promise.resolve(options.noHistory);\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * @packageDocumentation\n * @module @azure/msal-angular\n */\n\nexport { MsalService } from \"./msal.service\";\nexport { IMsalService } from \"./IMsalService\";\nexport { MsalGuard } from \"./msal.guard\";\nexport {\n MsalGuardConfiguration,\n MsalGuardAuthRequest,\n} from \"./msal.guard.config\";\nexport { MsalInterceptor } from \"./msal.interceptor\";\nexport {\n MsalInterceptorConfiguration,\n MsalInterceptorAuthRequest,\n ProtectedResourceScopes,\n} from \"./msal.interceptor.config\";\nexport {\n MSAL_INSTANCE,\n MSAL_GUARD_CONFIG,\n MSAL_INTERCEPTOR_CONFIG,\n MSAL_BROADCAST_CONFIG,\n} from \"./constants\";\nexport { MsalBroadcastService } from \"./msal.broadcast.service\";\nexport { MsalBroadcastConfiguration } from \"./msal.broadcast.config\";\nexport { MsalModule } from \"./msal.module\";\nexport { MsalRedirectComponent } from \"./msal.redirect.component\";\nexport { MsalCustomNavigationClient } from \"./msal.navigation.client\";\nexport { version } from \"./packageMetadata\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.MsalBroadcastService","i2.MsalService","i1.MsalService","i2","i3.MsalBroadcastService"],"mappings":"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"}
1
+ {"version":3,"file":"azure-msal-angular.mjs","sources":["../../src/packageMetadata.ts","../../src/constants.ts","../../src/msal.broadcast.service.ts","../../src/msal.service.ts","../../src/msal.guard.ts","../../src/msal.interceptor.ts","../../src/msal.redirect.component.ts","../../src/msal.module.ts","../../src/msal.navigation.client.ts","../../src/public-api.ts","../../src/azure-msal-angular.ts"],"sourcesContent":["/* eslint-disable header/header */\nexport const name = \"@azure/msal-angular\";\nexport const version = \"4.1.1\";\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { InjectionToken } from \"@angular/core\";\n\nexport const MSAL_INSTANCE = new InjectionToken<string>(\"MSAL_INSTANCE\");\n\nexport const MSAL_GUARD_CONFIG = new InjectionToken<string>(\n \"MSAL_GUARD_CONFIG\"\n);\n\nexport const MSAL_INTERCEPTOR_CONFIG = new InjectionToken<string>(\n \"MSAL_INTERCEPTOR_CONFIG\"\n);\n\nexport const MSAL_BROADCAST_CONFIG = new InjectionToken<string>(\n \"MSAL_BROADCAST_CONFIG\"\n);\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Inject, Injectable, Optional } from \"@angular/core\";\nimport {\n EventMessage,\n EventMessageUtils,\n IPublicClientApplication,\n InteractionStatus,\n} from \"@azure/msal-browser\";\nimport { BehaviorSubject, Observable, ReplaySubject, Subject } from \"rxjs\";\nimport { MsalBroadcastConfiguration } from \"./msal.broadcast.config\";\nimport { MSAL_BROADCAST_CONFIG, MSAL_INSTANCE } from \"./constants\";\nimport { name, version } from \"./packageMetadata\";\n\n@Injectable()\nexport class MsalBroadcastService {\n private _msalSubject: Subject<EventMessage>;\n public msalSubject$: Observable<EventMessage>;\n private _inProgress: BehaviorSubject<InteractionStatus>;\n public inProgress$: Observable<InteractionStatus>;\n\n constructor(\n @Inject(MSAL_INSTANCE) private msalInstance: IPublicClientApplication,\n @Optional()\n @Inject(MSAL_BROADCAST_CONFIG)\n private msalBroadcastConfig?: MsalBroadcastConfiguration\n ) {\n // Make _msalSubject a ReplaySubject if configured to replay past events\n if (\n this.msalBroadcastConfig &&\n this.msalBroadcastConfig.eventsToReplay > 0\n ) {\n this.msalInstance\n .getLogger()\n .clone(name, version)\n .verbose(\n `BroadcastService - eventsToReplay set on BroadcastConfig, replaying the last ${this.msalBroadcastConfig.eventsToReplay} events`\n );\n this._msalSubject = new ReplaySubject<EventMessage>(\n this.msalBroadcastConfig.eventsToReplay\n );\n } else {\n // Defaults to _msalSubject being a Subject\n this._msalSubject = new Subject<EventMessage>();\n }\n\n this.msalSubject$ = this._msalSubject.asObservable();\n\n // InProgress as BehaviorSubject so most recent inProgress state will be available upon subscription\n this._inProgress = new BehaviorSubject<InteractionStatus>(\n InteractionStatus.Startup\n );\n this.inProgress$ = this._inProgress.asObservable();\n\n this.msalInstance.addEventCallback((message: EventMessage) => {\n this._msalSubject.next(message);\n const status = EventMessageUtils.getInteractionStatusFromEvent(\n message,\n this._inProgress.value\n );\n if (status !== null) {\n this.msalInstance\n .getLogger()\n .clone(name, version)\n .verbose(\n `BroadcastService - ${message.eventType} results in setting inProgress from ${this._inProgress.value} to ${status}`\n );\n this._inProgress.next(status);\n }\n });\n }\n\n /**\n * Resets inProgress state to None\n */\n resetInProgressEvent(): void {\n if (this._inProgress.value === InteractionStatus.Startup) {\n this._inProgress.next(InteractionStatus.None);\n }\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Inject, Injectable, Injector } from \"@angular/core\";\nimport { Location } from \"@angular/common\";\nimport {\n IPublicClientApplication,\n EndSessionRequest,\n EndSessionPopupRequest,\n AuthenticationResult,\n RedirectRequest,\n SilentRequest,\n PopupRequest,\n SsoSilentRequest,\n Logger,\n WrapperSKU,\n} from \"@azure/msal-browser\";\nimport { Observable, from } from \"rxjs\";\nimport { IMsalService } from \"./IMsalService\";\nimport { name, version } from \"./packageMetadata\";\nimport { MSAL_INSTANCE } from \"./constants\";\nimport { MsalBroadcastService } from \"./msal.broadcast.service\";\n\n@Injectable()\nexport class MsalService implements IMsalService {\n private redirectHash: string;\n private logger: Logger;\n\n constructor(\n @Inject(MSAL_INSTANCE) public instance: IPublicClientApplication,\n private location: Location,\n private injector: Injector\n ) {\n const hash = this.location.path(true).split(\"#\").pop();\n if (hash) {\n this.redirectHash = `#${hash}`;\n }\n this.instance.initializeWrapperLibrary(WrapperSKU.Angular, version);\n }\n\n initialize(): Observable<void> {\n return from(this.instance.initialize());\n }\n acquireTokenPopup(request: PopupRequest): Observable<AuthenticationResult> {\n return from(this.instance.acquireTokenPopup(request));\n }\n acquireTokenRedirect(request: RedirectRequest): Observable<void> {\n return from(this.instance.acquireTokenRedirect(request));\n }\n acquireTokenSilent(\n silentRequest: SilentRequest\n ): Observable<AuthenticationResult> {\n return from(this.instance.acquireTokenSilent(silentRequest));\n }\n handleRedirectObservable(hash?: string): Observable<AuthenticationResult> {\n return from(\n this.instance\n .initialize()\n .then(() =>\n this.instance.handleRedirectPromise(hash || this.redirectHash)\n )\n .finally(() => {\n // update inProgress state to none\n this.injector.get(MsalBroadcastService).resetInProgressEvent();\n })\n );\n }\n loginPopup(request?: PopupRequest): Observable<AuthenticationResult> {\n return from(this.instance.loginPopup(request));\n }\n loginRedirect(request?: RedirectRequest): Observable<void> {\n return from(this.instance.loginRedirect(request));\n }\n // @deprecated: Use logoutRedirect or logoutPopup\n logout(logoutRequest?: EndSessionRequest): Observable<void> {\n return from(this.instance.logout(logoutRequest));\n }\n logoutRedirect(logoutRequest?: EndSessionRequest): Observable<void> {\n return from(this.instance.logoutRedirect(logoutRequest));\n }\n logoutPopup(logoutRequest?: EndSessionPopupRequest): Observable<void> {\n return from(this.instance.logoutPopup(logoutRequest));\n }\n ssoSilent(request: SsoSilentRequest): Observable<AuthenticationResult> {\n return from(this.instance.ssoSilent(request));\n }\n /**\n * Gets logger for msal-angular.\n * If no logger set, returns logger instance created with same options as msal-browser\n */\n getLogger(): Logger {\n if (!this.logger) {\n this.logger = this.instance.getLogger().clone(name, version);\n }\n return this.logger;\n }\n // Create a logger instance for msal-angular with the same options as msal-browser\n setLogger(logger: Logger): void {\n this.logger = logger.clone(name, version);\n this.instance.setLogger(logger);\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Injectable, Inject } from \"@angular/core\";\nimport { Location } from \"@angular/common\";\nimport {\n ActivatedRouteSnapshot,\n RouterStateSnapshot,\n UrlTree,\n Router,\n} from \"@angular/router\";\nimport {\n InteractionType,\n BrowserConfigurationAuthError,\n BrowserUtils,\n UrlString,\n PopupRequest,\n RedirectRequest,\n AuthenticationResult,\n} from \"@azure/msal-browser\";\nimport { Observable, of } from \"rxjs\";\nimport { concatMap, catchError, map } from \"rxjs/operators\";\nimport { MsalService } from \"./msal.service\";\nimport { MsalGuardConfiguration } from \"./msal.guard.config\";\nimport { MsalBroadcastService } from \"./msal.broadcast.service\";\nimport { MSAL_GUARD_CONFIG } from \"./constants\";\n\n@Injectable()\nexport class MsalGuard {\n private loginFailedRoute?: UrlTree;\n\n constructor(\n @Inject(MSAL_GUARD_CONFIG) private msalGuardConfig: MsalGuardConfiguration,\n private msalBroadcastService: MsalBroadcastService,\n private authService: MsalService,\n private location: Location,\n private router: Router\n ) {\n // Subscribing so events in MsalGuard will set inProgress$ observable\n this.msalBroadcastService.inProgress$.subscribe();\n }\n\n /**\n * Parses url string to UrlTree\n * @param url\n */\n parseUrl(url: string): UrlTree {\n return this.router.parseUrl(url);\n }\n\n /**\n * Builds the absolute url for the destination page\n * @param path Relative path of requested page\n * @returns Full destination url\n */\n getDestinationUrl(path: string): string {\n this.authService.getLogger().verbose(\"Guard - getting destination url\");\n // Absolute base url for the application (default to origin if base element not present)\n const baseElements = document.getElementsByTagName(\"base\");\n const baseUrl = this.location.normalize(\n baseElements.length ? baseElements[0].href : window.location.origin\n );\n\n // Path of page (including hash, if using hash routing)\n const pathUrl = this.location.prepareExternalUrl(path);\n\n // Hash location strategy\n if (pathUrl.startsWith(\"#\")) {\n this.authService\n .getLogger()\n .verbose(\"Guard - destination by hash routing\");\n return `${baseUrl}/${pathUrl}`;\n }\n\n /*\n * If using path location strategy, pathUrl will include the relative portion of the base path (e.g. /base/page).\n * Since baseUrl also includes /base, can just concatentate baseUrl + path\n */\n return `${baseUrl}${path}`;\n }\n\n /**\n * Interactively prompt the user to login\n * @param url Path of the requested page\n */\n private loginInteractively(state: RouterStateSnapshot): Observable<boolean> {\n const authRequest =\n typeof this.msalGuardConfig.authRequest === \"function\"\n ? this.msalGuardConfig.authRequest(this.authService, state)\n : { ...this.msalGuardConfig.authRequest };\n if (this.msalGuardConfig.interactionType === InteractionType.Popup) {\n this.authService.getLogger().verbose(\"Guard - logging in by popup\");\n return this.authService.loginPopup(authRequest as PopupRequest).pipe(\n map((response: AuthenticationResult) => {\n this.authService\n .getLogger()\n .verbose(\n \"Guard - login by popup successful, can activate, setting active account\"\n );\n this.authService.instance.setActiveAccount(response.account);\n return true;\n })\n );\n }\n\n this.authService.getLogger().verbose(\"Guard - logging in by redirect\");\n const redirectStartPage = this.getDestinationUrl(state.url);\n return this.authService\n .loginRedirect({\n redirectStartPage,\n ...authRequest,\n } as RedirectRequest)\n .pipe(map(() => false));\n }\n\n /**\n * Helper which checks for the correct interaction type, prevents page with Guard to be set as redirect, and calls handleRedirectObservable\n * @param state\n */\n private activateHelper(\n state?: RouterStateSnapshot\n ): Observable<boolean | UrlTree> {\n if (\n this.msalGuardConfig.interactionType !== InteractionType.Popup &&\n this.msalGuardConfig.interactionType !== InteractionType.Redirect\n ) {\n throw new BrowserConfigurationAuthError(\n \"invalid_interaction_type\",\n \"Invalid interaction type provided to MSAL Guard. InteractionType.Popup or InteractionType.Redirect must be provided in the MsalGuardConfiguration\"\n );\n }\n this.authService.getLogger().verbose(\"MSAL Guard activated\");\n\n /*\n * If a page with MSAL Guard is set as the redirect for acquireTokenSilent,\n * short-circuit to prevent redirecting or popups.\n */\n if (typeof window !== \"undefined\") {\n if (\n UrlString.hashContainsKnownProperties(window.location.hash) &&\n BrowserUtils.isInIframe() &&\n !this.authService.instance.getConfiguration().system\n .allowRedirectInIframe\n ) {\n this.authService\n .getLogger()\n .warning(\n \"Guard - redirectUri set to page with MSAL Guard. It is recommended to not set redirectUri to a page that requires authentication.\"\n );\n return of(false);\n }\n } else {\n this.authService\n .getLogger()\n .info(\n \"Guard - window is undefined, MSAL does not support server-side token acquisition\"\n );\n return of(true);\n }\n\n /**\n * If a loginFailedRoute is set in the config, set this as the loginFailedRoute\n */\n if (this.msalGuardConfig.loginFailedRoute) {\n this.loginFailedRoute = this.parseUrl(\n this.msalGuardConfig.loginFailedRoute\n );\n }\n\n // Capture current path before it gets changed by handleRedirectObservable\n const currentPath = this.location.path(true);\n\n return this.authService.initialize().pipe(\n concatMap(() => {\n return this.authService.handleRedirectObservable();\n }),\n concatMap(() => {\n if (!this.authService.instance.getAllAccounts().length) {\n if (state) {\n this.authService\n .getLogger()\n .verbose(\n \"Guard - no accounts retrieved, log in required to activate\"\n );\n return this.loginInteractively(state);\n }\n this.authService\n .getLogger()\n .verbose(\"Guard - no accounts retrieved, no state, cannot load\");\n return of(false);\n }\n\n this.authService\n .getLogger()\n .verbose(\"Guard - at least 1 account exists, can activate or load\");\n\n // Prevent navigating the app to /#code= or /code=\n if (state) {\n /*\n * Path routing:\n * state.url: /#code=...\n * state.root.fragment: code=...\n */\n\n /*\n * Hash routing:\n * state.url: /code\n * state.root.fragment: null\n */\n const urlContainsCode: boolean = this.includesCode(state.url);\n const fragmentContainsCode: boolean =\n !!state.root &&\n !!state.root.fragment &&\n this.includesCode(`#${state.root.fragment}`);\n const hashRouting: boolean =\n this.location.prepareExternalUrl(state.url).indexOf(\"#\") === 0;\n\n // Ensure code parameter is in fragment (and not in query parameter), or that hash hash routing is used\n if (urlContainsCode && (fragmentContainsCode || hashRouting)) {\n this.authService\n .getLogger()\n .info(\n \"Guard - Hash contains known code response, stopping navigation.\"\n );\n\n // Path routing (navigate to current path without hash)\n if (currentPath.indexOf(\"#\") > -1) {\n return of(this.parseUrl(this.location.path()));\n }\n\n // Hash routing (navigate to root path)\n return of(this.parseUrl(\"\"));\n }\n }\n\n return of(true);\n }),\n catchError((error: Error) => {\n this.authService\n .getLogger()\n .error(\"Guard - error while logging in, unable to activate\");\n this.authService\n .getLogger()\n .errorPii(`Guard - error: ${error.message}`);\n /**\n * If a loginFailedRoute is set, checks to see if state is passed before returning route\n */\n if (this.loginFailedRoute && state) {\n this.authService\n .getLogger()\n .verbose(\"Guard - loginFailedRoute set, redirecting\");\n return of(this.loginFailedRoute);\n }\n return of(false);\n })\n );\n }\n\n includesCode(path: string): boolean {\n return (\n (path.lastIndexOf(\"/code\") > -1 &&\n path.lastIndexOf(\"/code\") === path.length - \"/code\".length) || // path.endsWith(\"/code\")\n path.indexOf(\"#code=\") > -1 ||\n path.indexOf(\"&code=\") > -1\n );\n }\n\n canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable<boolean | UrlTree> {\n this.authService.getLogger().verbose(\"Guard - canActivate\");\n return this.activateHelper(state);\n }\n\n canActivateChild(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable<boolean | UrlTree> {\n this.authService.getLogger().verbose(\"Guard - canActivateChild\");\n return this.activateHelper(state);\n }\n\n canMatch(): Observable<boolean | UrlTree> {\n this.authService.getLogger().verbose(\"Guard - canLoad\");\n return this.activateHelper();\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Injectable, Inject } from \"@angular/core\";\nimport { Location, DOCUMENT } from \"@angular/common\";\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor,\n} from \"@angular/common/http\"; // eslint-disable-line import/no-unresolved\nimport {\n AccountInfo,\n AuthenticationResult,\n BrowserConfigurationAuthError,\n InteractionStatus,\n InteractionType,\n StringUtils,\n} from \"@azure/msal-browser\";\nimport { Observable, EMPTY, of } from \"rxjs\";\nimport { switchMap, catchError, take, filter } from \"rxjs/operators\";\nimport { MsalService } from \"./msal.service\";\nimport {\n MsalInterceptorAuthRequest,\n MsalInterceptorConfiguration,\n ProtectedResourceScopes,\n} from \"./msal.interceptor.config\";\nimport { MsalBroadcastService } from \"./msal.broadcast.service\";\nimport { MSAL_INTERCEPTOR_CONFIG } from \"./constants\";\n\n@Injectable()\nexport class MsalInterceptor implements HttpInterceptor {\n private _document?: Document;\n\n constructor(\n @Inject(MSAL_INTERCEPTOR_CONFIG)\n private msalInterceptorConfig: MsalInterceptorConfiguration,\n private authService: MsalService,\n private location: Location,\n private msalBroadcastService: MsalBroadcastService,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n @Inject(DOCUMENT) document?: any\n ) {\n this._document = document as Document;\n }\n\n intercept(\n req: HttpRequest<any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n next: HttpHandler\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Observable<HttpEvent<any>> {\n if (\n this.msalInterceptorConfig.interactionType !== InteractionType.Popup &&\n this.msalInterceptorConfig.interactionType !== InteractionType.Redirect\n ) {\n throw new BrowserConfigurationAuthError(\n \"invalid_interaction_type\",\n \"Invalid interaction type provided to MSAL Interceptor. InteractionType.Popup, InteractionType.Redirect must be provided in the msalInterceptorConfiguration\"\n );\n }\n\n this.authService.getLogger().verbose(\"MSAL Interceptor activated\");\n const scopes = this.getScopesForEndpoint(req.url, req.method);\n\n // If no scopes for endpoint, does not acquire token\n if (!scopes || scopes.length === 0) {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - no scopes for endpoint\");\n return next.handle(req);\n }\n\n // Sets account as active account or first account\n let account: AccountInfo;\n if (!!this.authService.instance.getActiveAccount()) {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - active account selected\");\n account = this.authService.instance.getActiveAccount();\n } else {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - no active account, fallback to first account\");\n account = this.authService.instance.getAllAccounts()[0];\n }\n\n const authRequest =\n typeof this.msalInterceptorConfig.authRequest === \"function\"\n ? this.msalInterceptorConfig.authRequest(this.authService, req, {\n account: account,\n })\n : { ...this.msalInterceptorConfig.authRequest, account };\n\n this.authService\n .getLogger()\n .info(`Interceptor - ${scopes.length} scopes found for endpoint`);\n this.authService\n .getLogger()\n .infoPii(`Interceptor - [${scopes}] scopes found for ${req.url}`);\n\n return this.acquireToken(authRequest, scopes, account).pipe(\n switchMap((result: AuthenticationResult) => {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - setting authorization headers\");\n const headers = req.headers.set(\n \"Authorization\",\n `Bearer ${result.accessToken}`\n );\n\n const requestClone = req.clone({ headers });\n return next.handle(requestClone);\n })\n );\n }\n\n /**\n * Try to acquire token silently. Invoke interaction if acquireTokenSilent rejected with error or resolved with null access token\n * @param authRequest Request\n * @param scopes Array of scopes for the request\n * @param account Account\n * @returns Authentication result\n */\n private acquireToken(\n authRequest: MsalInterceptorAuthRequest,\n scopes: string[],\n account: AccountInfo\n ): Observable<AuthenticationResult> {\n // Note: For MSA accounts, include openid scope when calling acquireTokenSilent to return idToken\n return this.authService\n .acquireTokenSilent({ ...authRequest, scopes, account })\n .pipe(\n catchError(() => {\n this.authService\n .getLogger()\n .error(\n \"Interceptor - acquireTokenSilent rejected with error. Invoking interaction to resolve.\"\n );\n return this.msalBroadcastService.inProgress$.pipe(\n take(1),\n switchMap((status: InteractionStatus) => {\n if (status === InteractionStatus.None) {\n return this.acquireTokenInteractively(authRequest, scopes);\n }\n\n return this.msalBroadcastService.inProgress$.pipe(\n filter(\n (status: InteractionStatus) =>\n status === InteractionStatus.None\n ),\n take(1),\n switchMap(() => this.acquireToken(authRequest, scopes, account))\n );\n })\n );\n }),\n switchMap((result: AuthenticationResult) => {\n if (!result.accessToken) {\n this.authService\n .getLogger()\n .error(\n \"Interceptor - acquireTokenSilent resolved with null access token. Known issue with B2C tenants, invoking interaction to resolve.\"\n );\n return this.msalBroadcastService.inProgress$.pipe(\n filter(\n (status: InteractionStatus) => status === InteractionStatus.None\n ),\n take(1),\n switchMap(() =>\n this.acquireTokenInteractively(authRequest, scopes)\n )\n );\n }\n return of(result);\n })\n );\n }\n\n /**\n * Invoke interaction for the given set of scopes\n * @param authRequest Request\n * @param scopes Array of scopes for the request\n * @returns Result from the interactive request\n */\n private acquireTokenInteractively(\n authRequest: MsalInterceptorAuthRequest,\n scopes: string[]\n ): Observable<AuthenticationResult> {\n if (this.msalInterceptorConfig.interactionType === InteractionType.Popup) {\n this.authService\n .getLogger()\n .verbose(\n \"Interceptor - error acquiring token silently, acquiring by popup\"\n );\n return this.authService.acquireTokenPopup({ ...authRequest, scopes });\n }\n this.authService\n .getLogger()\n .verbose(\n \"Interceptor - error acquiring token silently, acquiring by redirect\"\n );\n const redirectStartPage = window.location.href;\n this.authService.acquireTokenRedirect({\n ...authRequest,\n scopes,\n redirectStartPage,\n });\n return EMPTY;\n }\n\n /**\n * Looks up the scopes for the given endpoint from the protectedResourceMap\n * @param endpoint Url of the request\n * @param httpMethod Http method of the request\n * @returns Array of scopes, or null if not found\n *\n */\n private getScopesForEndpoint(\n endpoint: string,\n httpMethod: string\n ): Array<string> | null {\n this.authService\n .getLogger()\n .verbose(\"Interceptor - getting scopes for endpoint\");\n\n // Ensures endpoints and protected resources compared are normalized\n const normalizedEndpoint = this.location.normalize(endpoint);\n\n const protectedResourcesArray = Array.from(\n this.msalInterceptorConfig.protectedResourceMap.keys()\n );\n\n const matchingProtectedResources = this.matchResourcesToEndpoint(\n protectedResourcesArray,\n normalizedEndpoint\n );\n\n if (matchingProtectedResources.length > 0) {\n return this.matchScopesToEndpoint(\n this.msalInterceptorConfig.protectedResourceMap,\n matchingProtectedResources,\n httpMethod\n );\n }\n\n return null;\n }\n\n /**\n * Finds resource endpoints that match request endpoint\n * @param protectedResourcesEndpoints\n * @param endpoint\n * @returns\n */\n private matchResourcesToEndpoint(\n protectedResourcesEndpoints: string[],\n endpoint: string\n ): Array<string> {\n const matchingResources: Array<string> = [];\n\n protectedResourcesEndpoints.forEach((key) => {\n const normalizedKey = this.location.normalize(key);\n\n // Get url components\n const absoluteKey = this.getAbsoluteUrl(normalizedKey);\n const keyComponents = new URL(absoluteKey);\n const absoluteEndpoint = this.getAbsoluteUrl(endpoint);\n const endpointComponents = new URL(absoluteEndpoint);\n\n if (this.checkUrlComponents(keyComponents, endpointComponents)) {\n matchingResources.push(key);\n }\n });\n\n return matchingResources;\n }\n\n /**\n * Compares URL segments between key and endpoint\n * @param key\n * @param endpoint\n * @returns\n */\n private checkUrlComponents(\n keyComponents: URL,\n endpointComponents: URL\n ): boolean {\n // URL properties from https://developer.mozilla.org/en-US/docs/Web/API/URL\n const urlProperties = [\"protocol\", \"host\", \"pathname\", \"search\", \"hash\"];\n\n for (const property of urlProperties) {\n if (keyComponents[property]) {\n const decodedInput = decodeURIComponent(keyComponents[property]);\n if (this.msalInterceptorConfig.strictMatching) {\n /*\n * Strict matching: anchored patterns, metacharacters are literals,\n * host wildcards do not span dot separators.\n */\n const component =\n property === \"pathname\"\n ? \"path\"\n : (property as \"host\" | \"protocol\" | \"search\" | \"hash\");\n if (\n !StringUtils.matchPatternStrict(\n decodedInput,\n endpointComponents[property],\n { component }\n )\n ) {\n return false;\n }\n } else {\n // Legacy matching: preserved exactly for backwards compatibility.\n if (\n !StringUtils.matchPattern(\n decodedInput,\n endpointComponents[property]\n )\n ) {\n return false;\n }\n }\n }\n }\n\n return true;\n }\n\n /**\n * Transforms relative urls to absolute urls\n * @param url\n * @returns\n */\n private getAbsoluteUrl(url: string): string {\n const link = this._document.createElement(\"a\");\n link.href = url;\n return link.href;\n }\n\n /**\n * Finds scopes from first matching endpoint with HTTP method that matches request\n * @param protectedResourceMap Protected resource map\n * @param endpointArray Array of resources that match request endpoint\n * @param httpMethod Http method of the request\n * @returns\n */\n private matchScopesToEndpoint(\n protectedResourceMap: Map<\n string,\n Array<string | ProtectedResourceScopes> | null\n >,\n endpointArray: string[],\n httpMethod: string\n ): Array<string> | null {\n const allMatchedScopes = [];\n\n // Check each matched endpoint for matching HttpMethod and scopes\n endpointArray.forEach((matchedEndpoint) => {\n const scopesForEndpoint = [];\n const methodAndScopesArray = protectedResourceMap.get(matchedEndpoint);\n\n // Return if resource is unprotected\n if (methodAndScopesArray === null) {\n allMatchedScopes.push(null);\n return;\n }\n\n methodAndScopesArray.forEach((entry) => {\n // Entry is either array of scopes or ProtectedResourceScopes object\n if (typeof entry === \"string\") {\n scopesForEndpoint.push(entry);\n } else {\n // Ensure methods being compared are normalized\n const normalizedRequestMethod = httpMethod.toLowerCase();\n const normalizedResourceMethod = entry.httpMethod.toLowerCase();\n // Method in protectedResourceMap matches request http method\n if (normalizedResourceMethod === normalizedRequestMethod) {\n // Validate if scopes comes null to unprotect the resource in a certain http method\n if (entry.scopes === null) {\n allMatchedScopes.push(null);\n } else {\n entry.scopes.forEach((scope) => {\n scopesForEndpoint.push(scope);\n });\n }\n }\n }\n });\n\n // Only add to all scopes if scopes for endpoint and method is found\n if (scopesForEndpoint.length > 0) {\n allMatchedScopes.push(scopesForEndpoint);\n }\n });\n\n if (allMatchedScopes.length > 0) {\n if (allMatchedScopes.length > 1) {\n this.authService\n .getLogger()\n .warning(\n \"Interceptor - More than 1 matching scopes for endpoint found.\"\n );\n }\n // Returns scopes for first matching endpoint\n return allMatchedScopes[0];\n }\n\n return null;\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * This is a dedicated redirect component to be added to Angular apps to\n * handle redirects when using @azure/msal-angular.\n * Import this component to use redirects in your app.\n */\n\nimport { Component, OnInit } from \"@angular/core\";\nimport { MsalService } from \"./msal.service\";\n\n@Component({\n selector: \"app-redirect\",\n template: \"\",\n})\nexport class MsalRedirectComponent implements OnInit {\n constructor(private authService: MsalService) {}\n\n ngOnInit(): void {\n this.authService.getLogger().verbose(\"MsalRedirectComponent activated\");\n this.authService.handleRedirectObservable().subscribe();\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { IPublicClientApplication } from \"@azure/msal-browser\";\nimport { MsalBroadcastService } from \"./msal.broadcast.service\";\nimport { MsalGuard } from \"./msal.guard\";\nimport { MsalGuardConfiguration } from \"./msal.guard.config\";\nimport { MsalInterceptorConfiguration } from \"./msal.interceptor.config\";\nimport { MsalRedirectComponent } from \"./msal.redirect.component\";\nimport { MsalService } from \"./msal.service\";\nimport {\n MSAL_INSTANCE,\n MSAL_GUARD_CONFIG,\n MSAL_INTERCEPTOR_CONFIG,\n} from \"./constants\";\n\n@NgModule({\n declarations: [MsalRedirectComponent],\n imports: [CommonModule],\n providers: [MsalGuard, MsalBroadcastService],\n})\nexport class MsalModule {\n static forRoot(\n msalInstance: IPublicClientApplication,\n guardConfig: MsalGuardConfiguration,\n interceptorConfig: MsalInterceptorConfiguration\n ): ModuleWithProviders<MsalModule> {\n return {\n ngModule: MsalModule,\n providers: [\n {\n provide: MSAL_INSTANCE,\n useValue: msalInstance,\n },\n {\n provide: MSAL_GUARD_CONFIG,\n useValue: guardConfig,\n },\n {\n provide: MSAL_INTERCEPTOR_CONFIG,\n useValue: interceptorConfig,\n },\n MsalService,\n ],\n };\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Injectable } from \"@angular/core\";\nimport { Location } from \"@angular/common\";\nimport { Router } from \"@angular/router\";\nimport {\n NavigationClient,\n NavigationOptions,\n UrlString,\n} from \"@azure/msal-browser\";\nimport { MsalService } from \"./msal.service\";\n\n/**\n * Custom navigation used for Angular client-side navigation.\n * See performance doc for details:\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/performance.md\n */\n@Injectable()\nexport class MsalCustomNavigationClient extends NavigationClient {\n constructor(\n private authService: MsalService,\n private router: Router,\n private location: Location\n ) {\n super();\n }\n\n async navigateInternal(\n url: string,\n options: NavigationOptions\n ): Promise<boolean> {\n this.authService.getLogger().trace(\"MsalCustomNavigationClient called\");\n\n this.authService\n .getLogger()\n .verbose(\"MsalCustomNavigationClient - navigating\");\n this.authService\n .getLogger()\n .verbosePii(`MsalCustomNavigationClient - navigating to url: ${url}`);\n\n // Prevent hash clearing from causing an issue with Client-side navigation after redirect is handled\n if (options.noHistory) {\n return super.navigateInternal(url, options);\n } else {\n // Normalizing newUrl if no query string\n const urlComponents = new UrlString(url).getUrlComponents();\n const newUrl = urlComponents.QueryString\n ? `${urlComponents.AbsolutePath}?${urlComponents.QueryString}`\n : this.location.normalize(urlComponents.AbsolutePath);\n await this.router.navigateByUrl(newUrl, {\n replaceUrl: options.noHistory,\n });\n }\n return Promise.resolve(options.noHistory);\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * @packageDocumentation\n * @module @azure/msal-angular\n */\n\nexport { MsalService } from \"./msal.service\";\nexport { IMsalService } from \"./IMsalService\";\nexport { MsalGuard } from \"./msal.guard\";\nexport {\n MsalGuardConfiguration,\n MsalGuardAuthRequest,\n} from \"./msal.guard.config\";\nexport { MsalInterceptor } from \"./msal.interceptor\";\nexport {\n MsalInterceptorConfiguration,\n MsalInterceptorAuthRequest,\n ProtectedResourceScopes,\n} from \"./msal.interceptor.config\";\nexport {\n MSAL_INSTANCE,\n MSAL_GUARD_CONFIG,\n MSAL_INTERCEPTOR_CONFIG,\n MSAL_BROADCAST_CONFIG,\n} from \"./constants\";\nexport { MsalBroadcastService } from \"./msal.broadcast.service\";\nexport { MsalBroadcastConfiguration } from \"./msal.broadcast.config\";\nexport { MsalModule } from \"./msal.module\";\nexport { MsalRedirectComponent } from \"./msal.redirect.component\";\nexport { MsalCustomNavigationClient } from \"./msal.navigation.client\";\nexport { version } from \"./packageMetadata\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.MsalBroadcastService","i2.MsalService","i1.MsalService","i2","i3.MsalBroadcastService"],"mappings":"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"}
@@ -6,6 +6,23 @@ export type MsalInterceptorConfiguration = {
6
6
  interactionType: InteractionType.Popup | InteractionType.Redirect;
7
7
  protectedResourceMap: Map<string, Array<string | ProtectedResourceScopes> | null>;
8
8
  authRequest?: MsalInterceptorAuthRequest | ((msalService: MsalService, req: HttpRequest<unknown>, originalAuthRequest: MsalInterceptorAuthRequest) => MsalInterceptorAuthRequest);
9
+ /**
10
+ * When `true`, enables stricter, more correct URL component pattern matching for
11
+ * `protectedResourceMap` entries. Strict matching uses anchored regex patterns and
12
+ * treats metacharacters (including `.`) as literals, so patterns match only their
13
+ * intended strings. Wildcards still apply, but host-component wildcards
14
+ * are constrained to a single DNS label.
15
+ *
16
+ * When `false` or omitted (default), the legacy matching behaviour is preserved for
17
+ * backwards compatibility.
18
+ *
19
+ * **Forward-looking note:** In msal-angular v5, `strictMatching` will be `true` by
20
+ * default. Applications that rely on the legacy matching behaviour should migrate to
21
+ * strict matching patterns before upgrading to v5.
22
+ *
23
+ * @default false
24
+ */
25
+ strictMatching?: boolean;
9
26
  };
10
27
  export type ProtectedResourceScopes = {
11
28
  httpMethod: string;
@@ -6,7 +6,7 @@ import * as i0 from "@angular/core";
6
6
  /**
7
7
  * Custom navigation used for Angular client-side navigation.
8
8
  * See performance doc for details:
9
- * https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/performance.md
9
+ * https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/v4-lts/lib/msal-angular/docs/performance.md
10
10
  */
11
11
  export declare class MsalCustomNavigationClient extends NavigationClient {
12
12
  private authService;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure/msal-angular",
3
- "version": "4.0.27",
3
+ "version": "4.1.1",
4
4
  "author": {
5
5
  "name": "Microsoft",
6
6
  "email": "nugetaad@microsoft.com",
@@ -19,7 +19,7 @@
19
19
  ]
20
20
  },
21
21
  "peerDependencies": {
22
- "@azure/msal-browser": "^4.29.0",
22
+ "@azure/msal-browser": "^4.30.0",
23
23
  "rxjs": "^7.0.0"
24
24
  },
25
25
  "module": "fesm2015/azure-msal-angular.mjs",
@@ -1,2 +1,2 @@
1
1
  export declare const name = "@azure/msal-angular";
2
- export declare const version = "4.0.27";
2
+ export declare const version = "4.1.1";