@azure/msal-angular 2.0.0 → 2.0.4
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 +7 -3
- package/azure-msal-angular.metadata.json +1 -1
- package/bundles/azure-msal-angular.umd.js +75 -35
- package/bundles/azure-msal-angular.umd.js.map +1 -1
- package/bundles/azure-msal-angular.umd.min.js +2 -2
- package/bundles/azure-msal-angular.umd.min.js.map +1 -1
- package/esm2015/msal.broadcast.service.js +3 -3
- package/esm2015/msal.guard.js +11 -5
- package/esm2015/msal.interceptor.config.js +1 -1
- package/esm2015/msal.interceptor.js +51 -21
- package/esm2015/msal.navigation.client.js +11 -8
- package/esm2015/packageMetadata.js +2 -2
- package/esm2015/public-api.js +2 -1
- package/fesm2015/azure-msal-angular.js +74 -35
- package/fesm2015/azure-msal-angular.js.map +1 -1
- package/msal.guard.d.ts.map +1 -1
- package/msal.interceptor.config.d.ts +4 -0
- package/msal.interceptor.config.d.ts.map +1 -1
- package/msal.interceptor.d.ts +11 -4
- package/msal.interceptor.d.ts.map +1 -1
- package/msal.navigation.client.d.ts.map +1 -1
- package/package.json +18 -2
- package/packageMetadata.d.ts +1 -1
- package/public-api.d.ts +1 -0
- package/public-api.d.ts.map +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import { Location } from "@angular/common";
|
|
5
|
+
import { Location, DOCUMENT } from "@angular/common";
|
|
6
6
|
import { EMPTY, of } from "rxjs";
|
|
7
7
|
import { switchMap, catchError } from "rxjs/operators";
|
|
8
8
|
import { MsalService } from "./msal.service";
|
|
@@ -10,10 +10,13 @@ import { BrowserConfigurationAuthError, InteractionType, StringUtils, UrlString
|
|
|
10
10
|
import { Injectable, Inject } from "@angular/core";
|
|
11
11
|
import { MSAL_INTERCEPTOR_CONFIG } from "./constants";
|
|
12
12
|
export class MsalInterceptor {
|
|
13
|
-
constructor(msalInterceptorConfig, authService, location
|
|
13
|
+
constructor(msalInterceptorConfig, authService, location,
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
|
|
15
|
+
document) {
|
|
14
16
|
this.msalInterceptorConfig = msalInterceptorConfig;
|
|
15
17
|
this.authService = authService;
|
|
16
18
|
this.location = location;
|
|
19
|
+
this._document = document;
|
|
17
20
|
}
|
|
18
21
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
19
22
|
intercept(req, next) {
|
|
@@ -63,6 +66,7 @@ export class MsalInterceptor {
|
|
|
63
66
|
}
|
|
64
67
|
/**
|
|
65
68
|
* Invoke interaction for the given set of scopes
|
|
69
|
+
* @param authRequest Request
|
|
66
70
|
* @param scopes Array of scopes for the request
|
|
67
71
|
* @returns Result from the interactive request
|
|
68
72
|
*/
|
|
@@ -79,7 +83,7 @@ export class MsalInterceptor {
|
|
|
79
83
|
/**
|
|
80
84
|
* Looks up the scopes for the given endpoint from the protectedResourceMap
|
|
81
85
|
* @param endpoint Url of the request
|
|
82
|
-
* @param
|
|
86
|
+
* @param httpMethod Http method of the request
|
|
83
87
|
* @returns Array of scopes, or null if not found
|
|
84
88
|
*
|
|
85
89
|
*/
|
|
@@ -89,33 +93,52 @@ export class MsalInterceptor {
|
|
|
89
93
|
const normalizedEndpoint = this.location.normalize(endpoint);
|
|
90
94
|
const protectedResourcesArray = Array.from(this.msalInterceptorConfig.protectedResourceMap.keys());
|
|
91
95
|
const matchingProtectedResources = this.matchResourcesToEndpoint(protectedResourcesArray, normalizedEndpoint);
|
|
92
|
-
|
|
93
|
-
|
|
96
|
+
// Check absolute urls of resources first before checking relative to prevent incorrect matching where multiple resources have similar relative urls
|
|
97
|
+
if (matchingProtectedResources.absoluteResources.length > 0) {
|
|
98
|
+
return this.matchScopesToEndpoint(this.msalInterceptorConfig.protectedResourceMap, matchingProtectedResources.absoluteResources, httpMethod);
|
|
99
|
+
}
|
|
100
|
+
else if (matchingProtectedResources.relativeResources.length > 0) {
|
|
101
|
+
return this.matchScopesToEndpoint(this.msalInterceptorConfig.protectedResourceMap, matchingProtectedResources.relativeResources, httpMethod);
|
|
94
102
|
}
|
|
95
103
|
return null;
|
|
96
104
|
}
|
|
97
105
|
/**
|
|
98
106
|
* Finds resource endpoints that match request endpoint
|
|
99
|
-
* @param
|
|
107
|
+
* @param protectedResourcesEndpoints
|
|
100
108
|
* @param endpoint
|
|
101
|
-
* @param location
|
|
102
109
|
* @returns
|
|
103
110
|
*/
|
|
104
111
|
matchResourcesToEndpoint(protectedResourcesEndpoints, endpoint) {
|
|
105
|
-
|
|
112
|
+
const matchingResources = { absoluteResources: [], relativeResources: [] };
|
|
113
|
+
protectedResourcesEndpoints.forEach(key => {
|
|
114
|
+
// Normalizes and adds resource to matchingResources.absoluteResources if key matches endpoint. StringUtils.matchPattern accounts for wildcards
|
|
106
115
|
const normalizedKey = this.location.normalize(key);
|
|
116
|
+
if (StringUtils.matchPattern(normalizedKey, endpoint)) {
|
|
117
|
+
matchingResources.absoluteResources.push(key);
|
|
118
|
+
}
|
|
119
|
+
// Get url components for relative urls
|
|
120
|
+
const absoluteKey = this.getAbsoluteUrl(key);
|
|
121
|
+
const keyComponents = new UrlString(absoluteKey).getUrlComponents();
|
|
122
|
+
const absoluteEndpoint = this.getAbsoluteUrl(endpoint);
|
|
123
|
+
const endpointComponents = new UrlString(absoluteEndpoint).getUrlComponents();
|
|
107
124
|
// Normalized key should include query strings if applicable
|
|
108
|
-
const keyComponents = new UrlString(key).getUrlComponents();
|
|
109
125
|
const relativeNormalizedKey = keyComponents.QueryString ? `${keyComponents.AbsolutePath}?${keyComponents.QueryString}` : this.location.normalize(keyComponents.AbsolutePath);
|
|
110
|
-
//
|
|
111
|
-
if (
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
// Matching endpoint with both protected resource and relative url of protected resource
|
|
116
|
-
return StringUtils.matchPattern(normalizedKey, endpoint) || StringUtils.matchPattern(relativeNormalizedKey, endpoint);
|
|
126
|
+
// Add resource to matchingResources.relativeResources if same origin, relativeKey matches endpoint, and is not empty
|
|
127
|
+
if (keyComponents.HostNameAndPort === endpointComponents.HostNameAndPort && StringUtils.matchPattern(relativeNormalizedKey, absoluteEndpoint) && relativeNormalizedKey !== "" && relativeNormalizedKey !== "/*") {
|
|
128
|
+
matchingResources.relativeResources.push(key);
|
|
117
129
|
}
|
|
118
130
|
});
|
|
131
|
+
return matchingResources;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Transforms relative urls to absolute urls
|
|
135
|
+
* @param url
|
|
136
|
+
* @returns
|
|
137
|
+
*/
|
|
138
|
+
getAbsoluteUrl(url) {
|
|
139
|
+
const link = this._document.createElement("a");
|
|
140
|
+
link.href = url;
|
|
141
|
+
return link.href;
|
|
119
142
|
}
|
|
120
143
|
/**
|
|
121
144
|
* Finds scopes from first matching endpoint with HTTP method that matches request
|
|
@@ -146,9 +169,15 @@ export class MsalInterceptor {
|
|
|
146
169
|
const normalizedResourceMethod = entry.httpMethod.toLowerCase();
|
|
147
170
|
// Method in protectedResourceMap matches request http method
|
|
148
171
|
if (normalizedResourceMethod === normalizedRequestMethod) {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
172
|
+
// Validate if scopes comes null to unprotect the resource in a certain http method
|
|
173
|
+
if (entry.scopes === null) {
|
|
174
|
+
allMatchedScopes.push(null);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
entry.scopes.forEach((scope) => {
|
|
178
|
+
scopesForEndpoint.push(scope);
|
|
179
|
+
});
|
|
180
|
+
}
|
|
152
181
|
}
|
|
153
182
|
}
|
|
154
183
|
});
|
|
@@ -173,6 +202,7 @@ MsalInterceptor.decorators = [
|
|
|
173
202
|
MsalInterceptor.ctorParameters = () => [
|
|
174
203
|
{ type: undefined, decorators: [{ type: Inject, args: [MSAL_INTERCEPTOR_CONFIG,] }] },
|
|
175
204
|
{ type: MsalService },
|
|
176
|
-
{ type: Location }
|
|
205
|
+
{ type: Location },
|
|
206
|
+
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
|
|
177
207
|
];
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tc2FsLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQVFILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQWMsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQXFDLDZCQUE2QixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEosT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSXRELE1BQU0sT0FBTyxlQUFlO0lBQ3hCLFlBQzZDLHFCQUFtRCxFQUNwRixXQUF3QixFQUN4QixRQUFrQjtRQUZlLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBOEI7UUFDcEYsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUMzQixDQUFDO0lBRUosOERBQThEO0lBQzlELFNBQVMsQ0FBQyxHQUFxQixFQUFFLElBQWlCO1FBQzlDLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsS0FBSyxlQUFlLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLEtBQUssZUFBZSxDQUFDLFFBQVEsRUFBRTtZQUNqSixNQUFNLElBQUksNkJBQTZCLENBQUMsMEJBQTBCLEVBQUUsNkpBQTZKLENBQUMsQ0FBQztTQUN0TztRQUVELElBQUksQ0FBQyxXQUFXLENB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Qzt3QkFDbEMsQ0FBQyxDQUFDLENBQUM7cUJBQ047aUJBQ0o7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILG9FQUFvRTtZQUNwRSxJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzlCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQzVDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQywrREFBK0QsQ0FBQyxDQUFDO2FBQ3pHO1lBQ0QsNkNBQTZDO1lBQzdDLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzs7WUF4TEosVUFBVTs7OzRDQUdGLE1BQU0sU0FBQyx1QkFBdUI7WUFUOUIsV0FBVztZQUhYLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7XHJcbiAgICBIdHRwUmVxdWVzdCxcclxuICAgIEh0dHBIYW5kbGVyLFxyXG4gICAgSHR0cEV2ZW50LFxyXG4gICAgSHR0cEludGVyY2VwdG9yXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBFTVBUWSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBzd2l0Y2hNYXAsIGNhdGNoRXJyb3IgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tIFwiLi9tc2FsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQWNjb3VudEluZm8sIEF1dGhlbnRpY2F0aW9uUmVzdWx0LCBCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvciwgSW50ZXJhY3Rpb25UeXBlLCBTdHJpbmdVdGlscywgVXJsU3RyaW5nIH0gZnJvbSBcIkBhenVyZS9tc2FsLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTVNBTF9JTlRFUkNFUFRPUl9DT05GSUcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgTXNhbEludGVyY2VwdG9yQXV0aFJlcXVlc3QsIE1zYWxJbnRlcmNlcHRvckNvbmZpZ3VyYXRpb24sIFByb3RlY3RlZFJlc291cmNlU2NvcGVzIH0gZnJvbSBcIi4vbXNhbC5pbnRlcmNlcHRvci5jb25maWdcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE1zYWxJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KE1TQUxfSU5URVJDRVBUT1JfQ09ORklHKSBwcml2YXRlIG1zYWxJbnRlcmNlcHRvckNvbmZpZzogTXNhbEludGVyY2VwdG9yQ29uZmlndXJhdGlvbixcclxuICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBNc2FsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvblxyXG4gICAgKSB7fVxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgICAgICBpZiAodGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuaW50ZXJhY3Rpb25UeXBlICE9PSBJbnRlcmFjdGlvblR5cGUuUG9wdXAgJiYgdGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuaW50ZXJhY3Rpb25UeXBlICE9PSBJbnRlcmFjdGlvblR5cGUuUmVkaXJlY3QpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEJyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yKFwiaW52YWxpZF9pbnRlcmFjdGlvbl90eXBlXCIsIFwiSW52YWxpZCBpbnRlcmFjdGlvbiB0eXBlIHByb3ZpZGVkIHRvIE1TQUwgSW50ZXJjZXB0b3IuIEludGVyYWN0aW9uVHlwZS5Qb3B1cCwgSW50ZXJhY3Rpb25UeXBlLlJlZGlyZWN0IG11c3QgYmUgcHJvdmlkZWQgaW4gdGhlIG1zYWxJbnRlcmNlcHRvckNvbmZpZ3VyYXRpb25cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldExvZ2dlcigpLnZlcmJvc2UoXCJNU0FMIEludGVyY2VwdG9yIGFjdGl2YXRlZFwiKTtcclxuICAgICAgICBjb25zdCBzY29wZXMgPSB0aGlzLmdldFNjb3Blc0ZvckVuZHBvaW50KHJlcS51cmwsIHJlcS5tZXRob2QpO1xyXG5cclxuICAgICAgICAvLyBJZiBubyBzY29wZXMgZm9yIGVuZHBvaW50LCBkb2VzIG5vdCBhY3F1aXJlIHRva2VuXHJcbiAgICAgICAgaWYgKCFzY29wZXMgfHwgc2NvcGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldExvZ2dlcigpLnZlcmJvc2UoXCJJbnRlcmNlcHRvciAtIG5vIHNjb3BlcyBmb3IgZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2V0cyBhY2NvdW50IGFzIGFjdGl2ZSBhY2NvdW50IG9yIGZpcnN0IGFjY291bnRcclxuICAgICAgICBsZXQgYWNjb3VudDogQWNjb3VudEluZm87XHJcbiAgICAgICAgaWYgKCEhdGhpcy5hdXRoU2VydmljZS5pbnN0YW5jZS5nZXRBY3RpdmVBY2NvdW50KCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRMb2dnZXIoKS52ZXJib3NlKFwiSW50ZXJjZXB0b3IgLSBhY3RpdmUgYWNjb3VudCBzZWxlY3RlZFwiKTtcclxuICAgICAgICAgICAgYWNjb3VudCA9IHRoaXMuYXV0aFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkudmVyYm9zZShcIkludGVyY2VwdG9yIC0gbm8gYWN0aXZlIGFjY291bnQsIGZhbGxiYWNrIHRvIGZpcnN0IGFjY291bnRcIik7XHJcbiAgICAgICAgICAgIGFjY291bnQgPSB0aGlzLmF1dGhTZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKClbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhdXRoUmVxdWVzdCA9IHR5cGVvZiB0aGlzLm1zYWxJbnRlcmNlcHRvckNvbmZpZy5hdXRoUmVxdWVzdCA9PT0gXCJmdW5jdGlvblwiXHJcbiAgICAgICAgICAgID8gdGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuYXV0aFJlcXVlc3QodGhpcy5hdXRoU2VydmljZSwgcmVxLCB7IGFjY291bnQ6IGFjY291bnQgfSlcclxuICAgICAgICAgICAgOiB7IC4uLnRoaXMubXNhbEludGVyY2VwdG9yQ29uZmlnLmF1dGhSZXF1ZXN0LCBhY2NvdW50IH07XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkuaW5mbyhgSW50ZXJjZXB0b3IgLSAke3Njb3Blcy5sZW5ndGh9IHNjb3BlcyBmb3VuZCBmb3IgZW5kcG9pbnRgKTtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldExvZ2dlcigpLmluZm9QaWkoYEludGVyY2VwdG9yIC0gWyR7c2NvcGVzfV0gc2NvcGVzIGZvdW5kIGZvciAke3JlcS51cmx9YCk7XHJcblxyXG4gICAgICAgIC8vIE5vdGU6IEZvciBNU0EgYWNjb3VudHMsIGluY2x1ZGUgb3BlbmlkIHNjb3BlIHdoZW4gY2FsbGluZyBhY3F1aXJlVG9rZW5TaWxlbnQgdG8gcmV0dXJuIGlkVG9rZW5cclxuICAgICAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5hY3F1aXJlVG9rZW5TaWxlbnQoey4uLmF1dGhSZXF1ZXN0LCBzY29wZXMsIGFjY291bnQgfSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldExvZ2dlcigpLmVycm9yKFwiSW50ZXJjZXB0b3IgLSBhY3F1aXJlVG9rZW5TaWxlbnQgcmVqZWN0ZWQgd2l0aCBlcnJvci4gSW52b2tpbmcgaW50ZXJhY3Rpb24gdG8gcmVzb2x2ZS5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNxdWlyZVRva2VuSW50ZXJhY3RpdmVseShhdXRoUmVxdWVzdCwgc2NvcGVzKTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChyZXN1bHQ6IEF1dGhlbnRpY2F0aW9uUmVzdWx0KSAgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFjY2Vzc1Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkuZXJyb3IoXCJJbnRlcmNlcHRvciAtIGFjcXVpcmVUb2tlblNpbGVudCByZXNvbHZlZCB3aXRoIG51bGwgYWNjZXNzIHRva2VuLiBLbm93biBpc3N1ZSB3aXRoIEIyQyB0ZW5hbnRzLCBpbnZva2luZyBpbnRlcmFjdGlvbiB0byByZXNvbHZlLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNxdWlyZVRva2VuSW50ZXJhY3RpdmVseShhdXRoUmVxdWVzdCwgc2NvcGVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgocmVzdWx0OiBBdXRoZW50aWNhdGlvblJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkudmVyYm9zZShcIkludGVyY2VwdG9yIC0gc2V0dGluZyBhdXRob3JpemF0aW9uIGhlYWRlcnNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHJlcS5oZWFkZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXQoXCJBdXRob3JpemF0aW9uXCIsIGBCZWFyZXIgJHtyZXN1bHQuYWNjZXNzVG9rZW59YCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RDbG9uZSA9IHJlcS5jbG9uZSh7aGVhZGVyc30pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0Q2xvbmUpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEludm9rZSBpbnRlcmFjdGlvbiBmb3IgdGhlIGdpdmVuIHNldCBvZiBzY29wZXNcclxuICAgICAqIEBwYXJhbSBzY29wZXMgQXJyYXkgb2Ygc2NvcGVzIGZvciB0aGUgcmVxdWVzdFxyXG4gICAgICogQHJldHVybnMgUmVzdWx0IGZyb20gdGhlIGludGVyYWN0aXZlIHJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBhY3F1aXJlVG9rZW5JbnRlcmFjdGl2ZWx5KGF1dGhSZXF1ZXN0OiBNc2FsSW50ZXJjZXB0b3JBdXRoUmVxdWVzdCwgc2NvcGVzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8QXV0aGVudGljYXRpb25SZXN1bHQ+IHtcclxuICAgICAgICBpZiAodGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuaW50ZXJhY3Rpb25UeXBlID09PSBJbnRlcmFjdGlvblR5cGUuUG9wdXApIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRMb2dnZXIoKS52ZXJib3NlKFwiSW50ZXJjZXB0b3IgLSBlcnJvciBhY3F1aXJpbmcgdG9rZW4gc2lsZW50bHksIGFjcXVpcmluZyBieSBwb3B1cFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuYWNxdWlyZVRva2VuUG9wdXAoeyAuLi5hdXRoUmVxdWVzdCwgc2NvcGVzIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldExvZ2dlcigpLnZlcmJvc2UoXCJJbnRlcmNlcHRvciAtIGVycm9yIGFjcXVpcmluZyB0b2tlbiBzaWxlbnRseSwgYWNxdWlyaW5nIGJ5IHJlZGlyZWN0XCIpO1xyXG4gICAgICAgIGNvbnN0IHJlZGlyZWN0U3RhcnRQYWdlID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5hY3F1aXJlVG9rZW5SZWRpcmVjdCh7Li4uYXV0aFJlcXVlc3QsIHNjb3BlcywgcmVkaXJlY3RTdGFydFBhZ2UgfSk7XHJcbiAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9va3MgdXAgdGhlIHNjb3BlcyBmb3IgdGhlIGdpdmVuIGVuZHBvaW50IGZyb20gdGhlIHByb3RlY3RlZFJlc291cmNlTWFwXHJcbiAgICAgKiBAcGFyYW0gZW5kcG9pbnQgVXJsIG9mIHRoZSByZXF1ZXN0XHJcbiAgICAgKiBAcGFyYW0gZW5kcG9pbnQgSHR0cCBtZXRob2Qgb2YgdGhlIHJlcXVlc3RcclxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIHNjb3Blcywgb3IgbnVsbCBpZiBub3QgZm91bmRcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0U2NvcGVzRm9yRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZywgaHR0cE1ldGhvZDogc3RyaW5nKTogQXJyYXk8c3RyaW5nPnxudWxsIHtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldExvZ2dlcigpLnZlcmJvc2UoXCJJbnRlcmNlcHRvciAtIGdldHRpbmcgc2NvcGVzIGZvciBlbmRwb2ludFwiKTtcclxuXHJcbiAgICAgICAgLy8gRW5zdXJlcyBlbmRwb2ludHMgYW5kIHByb3RlY3RlZCByZXNvdXJjZXMgY29tcGFyZWQgYXJlIG5vcm1hbGl6ZWRcclxuICAgICAgICBjb25zdCBub3JtYWxpemVkRW5kcG9pbnQgPSB0aGlzLmxvY2F0aW9uLm5vcm1hbGl6ZShlbmRwb2ludCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHByb3RlY3RlZFJlc291cmNlc0FycmF5ID0gQXJyYXkuZnJvbSh0aGlzLm1zYWxJbnRlcmNlcHRvckNvbmZpZy5wcm90ZWN0ZWRSZXNvdXJjZU1hcC5rZXlzKCkpO1xyXG5cclxuICAgICAgICBjb25zdCBtYXRjaGluZ1Byb3RlY3RlZFJlc291cmNlcyA9IHRoaXMubWF0Y2hSZXNvdXJjZXNUb0VuZHBvaW50KHByb3RlY3RlZFJlc291cmNlc0FycmF5LCBub3JtYWxpemVkRW5kcG9pbnQpO1xyXG5cclxuICAgICAgICBpZiAobWF0Y2hpbmdQcm90ZWN0ZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRjaFNjb3Blc1RvRW5kcG9pbnQodGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcucHJvdGVjdGVkUmVzb3VyY2VNYXAsIG1hdGNoaW5nUHJvdGVjdGVkUmVzb3VyY2VzLCBodHRwTWV0aG9kKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgcmVzb3VyY2UgZW5kcG9pbnRzIHRoYXQgbWF0Y2ggcmVxdWVzdCBlbmRwb2ludFxyXG4gICAgICogQHBhcmFtIHByb3RlY3RlZFJlc291cmNlc0FycmF5IFxyXG4gICAgICogQHBhcmFtIGVuZHBvaW50IFxyXG4gICAgICogQHBhcmFtIGxvY2F0aW9uIFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbWF0Y2hSZXNvdXJjZXNUb0VuZHBvaW50KHByb3RlY3RlZFJlc291cmNlc0VuZHBvaW50czogc3RyaW5nW10sIGVuZHBvaW50OiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gcHJvdGVjdGVkUmVzb3VyY2VzRW5kcG9pbnRzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0gdGhpcy5sb2NhdGlvbi5ub3JtYWxpemUoa2V5KTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIE5vcm1hbGl6ZWQga2V5IHNob3VsZCBpbmNsdWRlIHF1ZXJ5IHN0cmluZ3MgaWYgYXBwbGljYWJsZVxyXG4gICAgICAgICAgICBjb25zdCBrZXlDb21wb25lbnRzID0gbmV3IFVybFN0cmluZyhrZXkpLmdldFVybENvbXBvbmVudHMoKTtcclxuICAgICAgICAgICAgY29uc3QgcmVsYXRpdmVOb3JtYWxpemVkS2V5ID0ga2V5Q29tcG9uZW50cy5RdWVyeVN0cmluZyA/IGAke2tleUNvbXBvbmVudHMuQWJzb2x1dGVQYXRofT8ke2tleUNvbXBvbmVudHMuUXVlcnlTdHJpbmd9YCA6IHRoaXMubG9jYXRpb24ubm9ybWFsaXplKGtleUNvbXBvbmVudHMuQWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlbGF0aXZlIGVuZHBvaW50IG5vdCBhcHBsaWNhYmxlLCBtYXRjaGluZyBlbmRwb2ludCB3aXRoIHByb3RlY3RlZCByZXNvdXJjZS4gU3RyaW5nVXRpbHMubWF0Y2hQYXR0ZXJuIGFjY291bnRzIGZvciB3aWxkY2FyZHNcclxuICAgICAgICAgICAgaWYgKHJlbGF0aXZlTm9ybWFsaXplZEtleSA9PT0gXCJcIiB8fCByZWxhdGl2ZU5vcm1hbGl6ZWRLZXkgPT09IFwiLypcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZ1V0aWxzLm1hdGNoUGF0dGVybihub3JtYWxpemVkS2V5LCBlbmRwb2ludCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBNYXRjaGluZyBlbmRwb2ludCB3aXRoIGJvdGggcHJvdGVjdGVkIHJlc291cmNlIGFuZCByZWxhdGl2ZSB1cmwgb2YgcHJvdGVjdGVkIHJlc291cmNlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nVXRpbHMubWF0Y2hQYXR0ZXJuKG5vcm1hbGl6ZWRLZXksIGVuZHBvaW50KSB8fCBTdHJpbmdVdGlscy5tYXRjaFBhdHRlcm4ocmVsYXRpdmVOb3JtYWxpemVkS2V5LCBlbmRwb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIHNjb3BlcyBmcm9tIGZpcnN0IG1hdGNoaW5nIGVuZHBvaW50IHdpdGggSFRUUCBtZXRob2QgdGhhdCBtYXRjaGVzIHJlcXVlc3RcclxuICAgICAqIEBwYXJhbSBwcm90ZWN0ZWRSZXNvdXJjZU1hcCBQcm90ZWN0ZWQgcmVzb3VyY2UgbWFwXHJcbiAgICAgKiBAcGFyYW0gZW5kcG9pbnRBcnJheSBBcnJheSBvZiByZXNvdXJjZXMgdGhhdCBtYXRjaCByZXF1ZXN0IGVuZHBvaW50XHJcbiAgICAgKiBAcGFyYW0gaHR0cE1ldGhvZCBIdHRwIG1ldGhvZCBvZiB0aGUgcmVxdWVzdFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbWF0Y2hTY29wZXNUb0VuZHBvaW50KHByb3RlY3RlZFJlc291cmNlTWFwOiBNYXA8c3RyaW5nLCBBcnJheTxzdHJpbmd8UHJvdGVjdGVkUmVzb3VyY2VTY29wZXM+IHwgbnVsbD4sIGVuZHBvaW50QXJyYXk6IHN0cmluZ1tdLCBodHRwTWV0aG9kOiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+fG51bGwge1xyXG4gICAgICAgIGNvbnN0IGFsbE1hdGNoZWRTY29wZXMgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgZWFjaCBtYXRjaGVkIGVuZHBvaW50IGZvciBtYXRjaGluZyBIdHRwTWV0aG9kIGFuZCBzY29wZXNcclxuICAgICAgICBlbmRwb2ludEFycmF5LmZvckVhY2gobWF0Y2hlZEVuZHBvaW50ID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2NvcGVzRm9yRW5kcG9pbnQgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgbWV0aG9kQW5kU2NvcGVzQXJyYXkgPSBwcm90ZWN0ZWRSZXNvdXJjZU1hcC5nZXQobWF0Y2hlZEVuZHBvaW50KTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJldHVybiBpZiByZXNvdXJjZSBpcyB1bnByb3RlY3RlZFxyXG4gICAgICAgICAgICBpZiAobWV0aG9kQW5kU2NvcGVzQXJyYXkgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGFsbE1hdGNoZWRTY29wZXMucHVzaChudWxsKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbWV0aG9kQW5kU2NvcGVzQXJyYXkuZm9yRWFjaChlbnRyeSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBFbnRyeSBpcyBlaXRoZXIgYXJyYXkgb2Ygc2NvcGVzIG9yIFByb3RlY3RlZFJlc291cmNlU2NvcGVzIG9iamVjdFxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjb3Blc0ZvckVuZHBvaW50LnB1c2goZW50cnkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgbWV0aG9kcyBiZWluZyBjb21wYXJlZCBhcmUgbm9ybWFsaXplZFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXF1ZXN0TWV0aG9kID0gaHR0cE1ldGhvZC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXNvdXJjZU1ldGhvZCA9IGVudHJ5Lmh0dHBNZXRob2QudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTWV0aG9kIGluIHByb3RlY3RlZFJlc291cmNlTWFwIG1hdGNoZXMgcmVxdWVzdCBodHRwIG1ldGhvZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkUmVzb3VyY2VNZXRob2QgPT09IG5vcm1hbGl6ZWRSZXF1ZXN0TWV0aG9kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnNjb3Blcy5mb3JFYWNoKHNjb3BlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3Blc0ZvckVuZHBvaW50LnB1c2goc2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gT25seSBhZGQgdG8gYWxsIHNjb3BlcyBpZiBzY29wZXMgZm9yIGVuZHBvaW50IGFuZCBtZXRob2QgaXMgZm91bmRcclxuICAgICAgICAgICAgaWYgKHNjb3Blc0ZvckVuZHBvaW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGFsbE1hdGNoZWRTY29wZXMucHVzaChzY29wZXNGb3JFbmRwb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGFsbE1hdGNoZWRTY29wZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoYWxsTWF0Y2hlZFNjb3Blcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldExvZ2dlcigpLndhcm5pbmcoXCJJbnRlcmNlcHRvciAtIE1vcmUgdGhhbiAxIG1hdGNoaW5nIHNjb3BlcyBmb3IgZW5kcG9pbnQgZm91bmQuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJldHVybnMgc2NvcGVzIGZvciBmaXJzdCBtYXRjaGluZyBlbmRwb2ludFxyXG4gICAgICAgICAgICByZXR1cm4gYWxsTWF0Y2hlZFNjb3Blc1swXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tc2FsLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQVFILE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFjLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFxQyw2QkFBNkIsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hKLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUl0RCxNQUFNLE9BQU8sZUFBZTtJQUd4QixZQUM2QyxxQkFBbUQsRUFDcEYsV0FBd0IsRUFDeEIsUUFBa0I7SUFDMUIsaUhBQWlIO0lBQy9GLFFBQWM7UUFKUywwQkFBcUIsR0FBckIscUJBQXFCLENBQThCO1FBQ3BGLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFJMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFvQixDQUFDO0lBQzFDLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDOUMsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsZUFBZSxLQUFLLGVBQWUsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsS0FBSyxlQUFlLENBQUMsUUFBUSxFQUFFO1lBQ2pKLE1BQU0sSUFB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SyxFQUFFLEVBQUU7Z0NBQzNCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDbEMsQ0FBQyxDQUFDLENBQUM7eUJBQ047cUJBQ0o7aUJBQ0o7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILG9FQUFvRTtZQUNwRSxJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzlCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQzVDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQywrREFBK0QsQ0FBQyxDQUFDO2FBQ3pHO1lBQ0QsNkNBQTZDO1lBQzdDLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzs7WUExTkosVUFBVTs7OzRDQUtGLE1BQU0sU0FBQyx1QkFBdUI7WUFYOUIsV0FBVztZQUhYLFFBQVE7NENBa0JSLE1BQU0sU0FBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcblxyXG5pbXBvcnQge1xyXG4gICAgSHR0cFJlcXVlc3QsXHJcbiAgICBIdHRwSGFuZGxlcixcclxuICAgIEh0dHBFdmVudCxcclxuICAgIEh0dHBJbnRlcmNlcHRvclxyXG59IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiwgRE9DVU1FTlQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIEVNUFRZLCBvZiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCwgY2F0Y2hFcnJvciB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBNc2FsU2VydmljZSB9IGZyb20gXCIuL21zYWwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBY2NvdW50SW5mbywgQXV0aGVudGljYXRpb25SZXN1bHQsIEJyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yLCBJbnRlcmFjdGlvblR5cGUsIFN0cmluZ1V0aWxzLCBVcmxTdHJpbmcgfSBmcm9tIFwiQGF6dXJlL21zYWwtYnJvd3NlclwiO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBNU0FMX0lOVEVSQ0VQVE9SX0NPTkZJRyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBNc2FsSW50ZXJjZXB0b3JBdXRoUmVxdWVzdCwgTXNhbEludGVyY2VwdG9yQ29uZmlndXJhdGlvbiwgUHJvdGVjdGVkUmVzb3VyY2VTY29wZXMsIE1hdGNoaW5nUmVzb3VyY2VzIH0gZnJvbSBcIi4vbXNhbC5pbnRlcmNlcHRvci5jb25maWdcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE1zYWxJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcbiAgICBwcml2YXRlIF9kb2N1bWVudD86IERvY3VtZW50O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoTVNBTF9JTlRFUkNFUFRPUl9DT05GSUcpIHByaXZhdGUgbXNhbEludGVyY2VwdG9yQ29uZmlnOiBNc2FsSW50ZXJjZXB0b3JDb25maWd1cmF0aW9uLFxyXG4gICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgZG9jdW1lbnQ/OiBhbnlcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuX2RvY3VtZW50ID0gZG9jdW1lbnQgYXMgRG9jdW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG4gICAgICAgIGlmICh0aGlzLm1zYWxJbnRlcmNlcHRvckNvbmZpZy5pbnRlcmFjdGlvblR5cGUgIT09IEludGVyYWN0aW9uVHlwZS5Qb3B1cCAmJiB0aGlzLm1zYWxJbnRlcmNlcHRvckNvbmZpZy5pbnRlcmFjdGlvblR5cGUgIT09IEludGVyYWN0aW9uVHlwZS5SZWRpcmVjdCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3IoXCJpbnZhbGlkX2ludGVyYWN0aW9uX3R5cGVcIiwgXCJJbnZhbGlkIGludGVyYWN0aW9uIHR5cGUgcHJvdmlkZWQgdG8gTVNBTCBJbnRlcmNlcHRvci4gSW50ZXJhY3Rpb25UeXBlLlBvcHVwLCBJbnRlcmFjdGlvblR5cGUuUmVkaXJlY3QgbXVzdCBiZSBwcm92aWRlZCBpbiB0aGUgbXNhbEludGVyY2VwdG9yQ29uZmlndXJhdGlvblwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkudmVyYm9zZShcIk1TQUwgSW50ZXJjZXB0b3IgYWN0aXZhdGVkXCIpO1xyXG4gICAgICAgIGNvbnN0IHNjb3BlcyA9IHRoaXMuZ2V0U2NvcGVzRm9yRW5kcG9pbnQocmVxLnVybCwgcmVxLm1ldGhvZCk7XHJcblxyXG4gICAgICAgIC8vIElmIG5vIHNjb3BlcyBmb3IgZW5kcG9pbnQsIGRvZXMgbm90IGFjcXVpcmUgdG9rZW5cclxuICAgICAgICBpZiAoIXNjb3BlcyB8fCBzY29wZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkudmVyYm9zZShcIkludGVyY2VwdG9yIC0gbm8gc2NvcGVzIGZvciBlbmRwb2ludFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZXRzIGFjY291bnQgYXMgYWN0aXZlIGFjY291bnQgb3IgZmlyc3QgYWNjb3VudFxyXG4gICAgICAgIGxldCBhY2NvdW50OiBBY2NvdW50SW5mbztcclxuICAgICAgICBpZiAoISF0aGlzLmF1dGhTZXJ2aWNlLmluc3RhbmNlLmdldEFjdGl2ZUFjY291bnQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldExvZ2dlcigpLnZlcmJvc2UoXCJJbnRlcmNlcHRvciAtIGFjdGl2ZSBhY2NvdW50IHNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICBhY2NvdW50ID0gdGhpcy5hdXRoU2VydmljZS5pbnN0YW5jZS5nZXRBY3RpdmVBY2NvdW50KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRMb2dnZXIoKS52ZXJib3NlKFwiSW50ZXJjZXB0b3IgLSBubyBhY3RpdmUgYWNjb3VudCwgZmFsbGJhY2sgdG8gZmlyc3QgYWNjb3VudFwiKTtcclxuICAgICAgICAgICAgYWNjb3VudCA9IHRoaXMuYXV0aFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWxsQWNjb3VudHMoKVswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGF1dGhSZXF1ZXN0ID0gdHlwZW9mIHRoaXMubXNhbEludGVyY2VwdG9yQ29uZmlnLmF1dGhSZXF1ZXN0ID09PSBcImZ1bmN0aW9uXCJcclxuICAgICAgICAgICAgPyB0aGlzLm1zYWxJbnRlcmNlcHRvckNvbmZpZy5hdXRoUmVxdWVzdCh0aGlzLmF1dGhTZXJ2aWNlLCByZXEsIHsgYWNjb3VudDogYWNjb3VudCB9KVxyXG4gICAgICAgICAgICA6IHsgLi4udGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuYXV0aFJlcXVlc3QsIGFjY291bnQgfTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRMb2dnZXIoKS5pbmZvKGBJbnRlcmNlcHRvciAtICR7c2NvcGVzLmxlbmd0aH0gc2NvcGVzIGZvdW5kIGZvciBlbmRwb2ludGApO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkuaW5mb1BpaShgSW50ZXJjZXB0b3IgLSBbJHtzY29wZXN9XSBzY29wZXMgZm91bmQgZm9yICR7cmVxLnVybH1gKTtcclxuXHJcbiAgICAgICAgLy8gTm90ZTogRm9yIE1TQSBhY2NvdW50cywgaW5jbHVkZSBvcGVuaWQgc2NvcGUgd2hlbiBjYWxsaW5nIGFjcXVpcmVUb2tlblNpbGVudCB0byByZXR1cm4gaWRUb2tlblxyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmFjcXVpcmVUb2tlblNpbGVudCh7Li4uYXV0aFJlcXVlc3QsIHNjb3BlcywgYWNjb3VudCB9KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkuZXJyb3IoXCJJbnRlcmNlcHRvciAtIGFjcXVpcmVUb2tlblNpbGVudCByZWplY3RlZCB3aXRoIGVycm9yLiBJbnZva2luZyBpbnRlcmFjdGlvbiB0byByZXNvbHZlLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hY3F1aXJlVG9rZW5JbnRlcmFjdGl2ZWx5KGF1dGhSZXF1ZXN0LCBzY29wZXMpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHJlc3VsdDogQXV0aGVudGljYXRpb25SZXN1bHQpICA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWNjZXNzVG9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRMb2dnZXIoKS5lcnJvcihcIkludGVyY2VwdG9yIC0gYWNxdWlyZVRva2VuU2lsZW50IHJlc29sdmVkIHdpdGggbnVsbCBhY2Nlc3MgdG9rZW4uIEtub3duIGlzc3VlIHdpdGggQjJDIHRlbmFudHMsIGludm9raW5nIGludGVyYWN0aW9uIHRvIHJlc29sdmUuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hY3F1aXJlVG9rZW5JbnRlcmFjdGl2ZWx5KGF1dGhSZXF1ZXN0LCBzY29wZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChyZXN1bHQ6IEF1dGhlbnRpY2F0aW9uUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRMb2dnZXIoKS52ZXJib3NlKFwiSW50ZXJjZXB0b3IgLSBzZXR0aW5nIGF1dGhvcml6YXRpb24gaGVhZGVyc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gcmVxLmhlYWRlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNldChcIkF1dGhvcml6YXRpb25cIiwgYEJlYXJlciAke3Jlc3VsdC5hY2Nlc3NUb2tlbn1gKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdENsb25lID0gcmVxLmNsb25lKHtoZWFkZXJzfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3RDbG9uZSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52b2tlIGludGVyYWN0aW9uIGZvciB0aGUgZ2l2ZW4gc2V0IG9mIHNjb3Blc1xyXG4gICAgICogQHBhcmFtIGF1dGhSZXF1ZXN0IFJlcXVlc3RcclxuICAgICAqIEBwYXJhbSBzY29wZXMgQXJyYXkgb2Ygc2NvcGVzIGZvciB0aGUgcmVxdWVzdFxyXG4gICAgICogQHJldHVybnMgUmVzdWx0IGZyb20gdGhlIGludGVyYWN0aXZlIHJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBhY3F1aXJlVG9rZW5JbnRlcmFjdGl2ZWx5KGF1dGhSZXF1ZXN0OiBNc2FsSW50ZXJjZXB0b3JBdXRoUmVxdWVzdCwgc2NvcGVzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8QXV0aGVudGljYXRpb25SZXN1bHQ+IHtcclxuICAgICAgICBpZiAodGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuaW50ZXJhY3Rpb25UeXBlID09PSBJbnRlcmFjdGlvblR5cGUuUG9wdXApIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRMb2dnZXIoKS52ZXJib3NlKFwiSW50ZXJjZXB0b3IgLSBlcnJvciBhY3F1aXJpbmcgdG9rZW4gc2lsZW50bHksIGFjcXVpcmluZyBieSBwb3B1cFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuYWNxdWlyZVRva2VuUG9wdXAoeyAuLi5hdXRoUmVxdWVzdCwgc2NvcGVzIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldExvZ2dlcigpLnZlcmJvc2UoXCJJbnRlcmNlcHRvciAtIGVycm9yIGFjcXVpcmluZyB0b2tlbiBzaWxlbnRseSwgYWNxdWlyaW5nIGJ5IHJlZGlyZWN0XCIpO1xyXG4gICAgICAgIGNvbnN0IHJlZGlyZWN0U3RhcnRQYWdlID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5hY3F1aXJlVG9rZW5SZWRpcmVjdCh7Li4uYXV0aFJlcXVlc3QsIHNjb3BlcywgcmVkaXJlY3RTdGFydFBhZ2UgfSk7XHJcbiAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9va3MgdXAgdGhlIHNjb3BlcyBmb3IgdGhlIGdpdmVuIGVuZHBvaW50IGZyb20gdGhlIHByb3RlY3RlZFJlc291cmNlTWFwXHJcbiAgICAgKiBAcGFyYW0gZW5kcG9pbnQgVXJsIG9mIHRoZSByZXF1ZXN0XHJcbiAgICAgKiBAcGFyYW0gaHR0cE1ldGhvZCBIdHRwIG1ldGhvZCBvZiB0aGUgcmVxdWVzdFxyXG4gICAgICogQHJldHVybnMgQXJyYXkgb2Ygc2NvcGVzLCBvciBudWxsIGlmIG5vdCBmb3VuZFxyXG4gICAgICpcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRTY29wZXNGb3JFbmRwb2ludChlbmRwb2ludDogc3RyaW5nLCBodHRwTWV0aG9kOiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+fG51bGwge1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkudmVyYm9zZShcIkludGVyY2VwdG9yIC0gZ2V0dGluZyBzY29wZXMgZm9yIGVuZHBvaW50XCIpO1xyXG5cclxuICAgICAgICAvLyBFbnN1cmVzIGVuZHBvaW50cyBhbmQgcHJvdGVjdGVkIHJlc291cmNlcyBjb21wYXJlZCBhcmUgbm9ybWFsaXplZFxyXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFbmRwb2ludCA9IHRoaXMubG9jYXRpb24ubm9ybWFsaXplKGVuZHBvaW50KTtcclxuXHJcbiAgICAgICAgY29uc3QgcHJvdGVjdGVkUmVzb3VyY2VzQXJyYXkgPSBBcnJheS5mcm9tKHRoaXMubXNhbEludGVyY2VwdG9yQ29uZmlnLnByb3RlY3RlZFJlc291cmNlTWFwLmtleXMoKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1hdGNoaW5nUHJvdGVjdGVkUmVzb3VyY2VzID0gdGhpcy5tYXRjaFJlc291cmNlc1RvRW5kcG9pbnQocHJvdGVjdGVkUmVzb3VyY2VzQXJyYXksIG5vcm1hbGl6ZWRFbmRwb2ludCk7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGFic29sdXRlIHVybHMgb2YgcmVzb3VyY2VzIGZpcnN0IGJlZm9yZSBjaGVja2luZyByZWxhdGl2ZSB0byBwcmV2ZW50IGluY29ycmVjdCBtYXRjaGluZyB3aGVyZSBtdWx0aXBsZSByZXNvdXJjZXMgaGF2ZSBzaW1pbGFyIHJlbGF0aXZlIHVybHNcclxuICAgICAgICBpZiAobWF0Y2hpbmdQcm90ZWN0ZWRSZXNvdXJjZXMuYWJzb2x1dGVSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRjaFNjb3Blc1RvRW5kcG9pbnQodGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcucHJvdGVjdGVkUmVzb3VyY2VNYXAsIG1hdGNoaW5nUHJvdGVjdGVkUmVzb3VyY2VzLmFic29sdXRlUmVzb3VyY2VzLCBodHRwTWV0aG9kKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoaW5nUHJvdGVjdGVkUmVzb3VyY2VzLnJlbGF0aXZlUmVzb3VyY2VzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRjaFNjb3Blc1RvRW5kcG9pbnQodGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcucHJvdGVjdGVkUmVzb3VyY2VNYXAsIG1hdGNoaW5nUHJvdGVjdGVkUmVzb3VyY2VzLnJlbGF0aXZlUmVzb3VyY2VzLCBodHRwTWV0aG9kKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgcmVzb3VyY2UgZW5kcG9pbnRzIHRoYXQgbWF0Y2ggcmVxdWVzdCBlbmRwb2ludFxyXG4gICAgICogQHBhcmFtIHByb3RlY3RlZFJlc291cmNlc0VuZHBvaW50c1xyXG4gICAgICogQHBhcmFtIGVuZHBvaW50IFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbWF0Y2hSZXNvdXJjZXNUb0VuZHBvaW50KHByb3RlY3RlZFJlc291cmNlc0VuZHBvaW50czogc3RyaW5nW10sIGVuZHBvaW50OiBzdHJpbmcpOiBNYXRjaGluZ1Jlc291cmNlcyB7XHJcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdSZXNvdXJjZXM6IE1hdGNoaW5nUmVzb3VyY2VzID0ge2Fic29sdXRlUmVzb3VyY2VzOiBbXSwgcmVsYXRpdmVSZXNvdXJjZXM6IFtdfTtcclxuXHJcbiAgICAgICAgcHJvdGVjdGVkUmVzb3VyY2VzRW5kcG9pbnRzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgLy8gTm9ybWFsaXplcyBhbmQgYWRkcyByZXNvdXJjZSB0byBtYXRjaGluZ1Jlc291cmNlcy5hYnNvbHV0ZVJlc291cmNlcyBpZiBrZXkgbWF0Y2hlcyBlbmRwb2ludC4gU3RyaW5nVXRpbHMubWF0Y2hQYXR0ZXJuIGFjY291bnRzIGZvciB3aWxkY2FyZHNcclxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEtleSA9IHRoaXMubG9jYXRpb24ubm9ybWFsaXplKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChTdHJpbmdVdGlscy5tYXRjaFBhdHRlcm4obm9ybWFsaXplZEtleSwgZW5kcG9pbnQpKXtcclxuICAgICAgICAgICAgICAgIG1hdGNoaW5nUmVzb3VyY2VzLmFic29sdXRlUmVzb3VyY2VzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gR2V0IHVybCBjb21wb25lbnRzIGZvciByZWxhdGl2ZSB1cmxzXHJcbiAgICAgICAgICAgIGNvbnN0IGFic29sdXRlS2V5ID0gdGhpcy5nZXRBYnNvbHV0ZVVybChrZXkpO1xyXG4gICAgICAgICAgICBjb25zdCBrZXlDb21wb25lbnRzID0gbmV3IFVybFN0cmluZyhhYnNvbHV0ZUtleSkuZ2V0VXJsQ29tcG9uZW50cygpO1xyXG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZUVuZHBvaW50ID0gdGhpcy5nZXRBYnNvbHV0ZVVybChlbmRwb2ludCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZHBvaW50Q29tcG9uZW50cyA9IG5ldyBVcmxTdHJpbmcoYWJzb2x1dGVFbmRwb2ludCkuZ2V0VXJsQ29tcG9uZW50cygpO1xyXG5cclxuICAgICAgICAgICAgLy8gTm9ybWFsaXplZCBrZXkgc2hvdWxkIGluY2x1ZGUgcXVlcnkgc3RyaW5ncyBpZiBhcHBsaWNhYmxlXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlTm9ybWFsaXplZEtleSA9IGtleUNvbXBvbmVudHMuUXVlcnlTdHJpbmcgPyBgJHtrZXlDb21wb25lbnRzLkFic29sdXRlUGF0aH0/JHtrZXlDb21wb25lbnRzLlF1ZXJ5U3RyaW5nfWAgOiB0aGlzLmxvY2F0aW9uLm5vcm1hbGl6ZShrZXlDb21wb25lbnRzLkFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgcmVzb3VyY2UgdG8gbWF0Y2hpbmdSZXNvdXJjZXMucmVsYXRpdmVSZXNvdXJjZXMgaWYgc2FtZSBvcmlnaW4sIHJlbGF0aXZlS2V5IG1hdGNoZXMgZW5kcG9pbnQsIGFuZCBpcyBub3QgZW1wdHlcclxuICAgICAgICAgICAgaWYgKGtleUNvbXBvbmVudHMuSG9zdE5hbWVBbmRQb3J0ID09PSBlbmRwb2ludENvbXBvbmVudHMuSG9zdE5hbWVBbmRQb3J0ICYmIFN0cmluZ1V0aWxzLm1hdGNoUGF0dGVybihyZWxhdGl2ZU5vcm1hbGl6ZWRLZXksIGFic29sdXRlRW5kcG9pbnQpICYmIHJlbGF0aXZlTm9ybWFsaXplZEtleSAhPT0gXCJcIiAmJiByZWxhdGl2ZU5vcm1hbGl6ZWRLZXkgIT09IFwiLypcIil7XHJcbiAgICAgICAgICAgICAgICBtYXRjaGluZ1Jlc291cmNlcy5yZWxhdGl2ZVJlc291cmNlcy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGNoaW5nUmVzb3VyY2VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNmb3JtcyByZWxhdGl2ZSB1cmxzIHRvIGFic29sdXRlIHVybHNcclxuICAgICAqIEBwYXJhbSB1cmwgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRBYnNvbHV0ZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgbGluayA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgIGxpbmsuaHJlZiA9IHVybDtcclxuICAgICAgICByZXR1cm4gbGluay5ocmVmO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgc2NvcGVzIGZyb20gZmlyc3QgbWF0Y2hpbmcgZW5kcG9pbnQgd2l0aCBIVFRQIG1ldGhvZCB0aGF0IG1hdGNoZXMgcmVxdWVzdFxyXG4gICAgICogQHBhcmFtIHByb3RlY3RlZFJlc291cmNlTWFwIFByb3RlY3RlZCByZXNvdXJjZSBtYXBcclxuICAgICAqIEBwYXJhbSBlbmRwb2ludEFycmF5IEFycmF5IG9mIHJlc291cmNlcyB0aGF0IG1hdGNoIHJlcXVlc3QgZW5kcG9pbnRcclxuICAgICAqIEBwYXJhbSBodHRwTWV0aG9kIEh0dHAgbWV0aG9kIG9mIHRoZSByZXF1ZXN0XHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBtYXRjaFNjb3Blc1RvRW5kcG9pbnQocHJvdGVjdGVkUmVzb3VyY2VNYXA6IE1hcDxzdHJpbmcsIEFycmF5PHN0cmluZ3xQcm90ZWN0ZWRSZXNvdXJjZVNjb3Blcz4gfCBudWxsPiwgZW5kcG9pbnRBcnJheTogc3RyaW5nW10sIGh0dHBNZXRob2Q6IHN0cmluZyk6IEFycmF5PHN0cmluZz58bnVsbCB7XHJcbiAgICAgICAgY29uc3QgYWxsTWF0Y2hlZFNjb3BlcyA9IFtdO1xyXG5cclxuICAgICAgICAvLyBDaGVjayBlYWNoIG1hdGNoZWQgZW5kcG9pbnQgZm9yIG1hdGNoaW5nIEh0dHBNZXRob2QgYW5kIHNjb3Blc1xyXG4gICAgICAgIGVuZHBvaW50QXJyYXkuZm9yRWFjaChtYXRjaGVkRW5kcG9pbnQgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzY29wZXNGb3JFbmRwb2ludCA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2RBbmRTY29wZXNBcnJheSA9IHByb3RlY3RlZFJlc291cmNlTWFwLmdldChtYXRjaGVkRW5kcG9pbnQpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmV0dXJuIGlmIHJlc291cmNlIGlzIHVucHJvdGVjdGVkXHJcbiAgICAgICAgICAgIGlmIChtZXRob2RBbmRTY29wZXNBcnJheSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgYWxsTWF0Y2hlZFNjb3Blcy5wdXNoKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtZXRob2RBbmRTY29wZXNBcnJheS5mb3JFYWNoKGVudHJ5ID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIEVudHJ5IGlzIGVpdGhlciBhcnJheSBvZiBzY29wZXMgb3IgUHJvdGVjdGVkUmVzb3VyY2VTY29wZXMgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVzRm9yRW5kcG9pbnQucHVzaChlbnRyeSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBtZXRob2RzIGJlaW5nIGNvbXBhcmVkIGFyZSBub3JtYWxpemVkXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlcXVlc3RNZXRob2QgPSBodHRwTWV0aG9kLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc291cmNlTWV0aG9kID0gZW50cnkuaHR0cE1ldGhvZC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE1ldGhvZCBpbiBwcm90ZWN0ZWRSZXNvdXJjZU1hcCBtYXRjaGVzIHJlcXVlc3QgaHR0cCBtZXRob2RcclxuICAgICAgICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFJlc291cmNlTWV0aG9kID09PSBub3JtYWxpemVkUmVxdWVzdE1ldGhvZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBpZiBzY29wZXMgY29tZXMgbnVsbCB0byB1bnByb3RlY3QgdGhlIHJlc291cmNlIGluIGEgY2VydGFpbiBodHRwIG1ldGhvZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnNjb3BlcyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsTWF0Y2hlZFNjb3Blcy5wdXNoKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuc2NvcGVzLmZvckVhY2goKHNjb3BlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVzRm9yRW5kcG9pbnQucHVzaChzY29wZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBPbmx5IGFkZCB0byBhbGwgc2NvcGVzIGlmIHNjb3BlcyBmb3IgZW5kcG9pbnQgYW5kIG1ldGhvZCBpcyBmb3VuZFxyXG4gICAgICAgICAgICBpZiAoc2NvcGVzRm9yRW5kcG9pbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgYWxsTWF0Y2hlZFNjb3Blcy5wdXNoKHNjb3Blc0ZvckVuZHBvaW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoYWxsTWF0Y2hlZFNjb3Blcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmIChhbGxNYXRjaGVkU2NvcGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkud2FybmluZyhcIkludGVyY2VwdG9yIC0gTW9yZSB0aGFuIDEgbWF0Y2hpbmcgc2NvcGVzIGZvciBlbmRwb2ludCBmb3VuZC5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUmV0dXJucyBzY29wZXMgZm9yIGZpcnN0IG1hdGNoaW5nIGVuZHBvaW50XHJcbiAgICAgICAgICAgIHJldHVybiBhbGxNYXRjaGVkU2NvcGVzWzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -21,18 +21,21 @@ export class MsalCustomNavigationClient extends NavigationClient {
|
|
|
21
21
|
this.location = location;
|
|
22
22
|
}
|
|
23
23
|
navigateInternal(url, options) {
|
|
24
|
+
const _super = Object.create(null, {
|
|
25
|
+
navigateInternal: { get: () => super.navigateInternal }
|
|
26
|
+
});
|
|
24
27
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
-
this.authService.getLogger().
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const newUrl = urlComponents.QueryString ? `${urlComponents.AbsolutePath}?${urlComponents.QueryString}` : this.location.normalize(urlComponents.AbsolutePath);
|
|
29
|
-
// Replaces current state if noHistory flag set to true
|
|
30
|
-
this.authService.getLogger().verbosePii(`MsalCustomNavigationClient - navigating to newUrl: ${newUrl}`);
|
|
28
|
+
this.authService.getLogger().trace("MsalCustomNavigationClient called");
|
|
29
|
+
this.authService.getLogger().verbose("MsalCustomNavigationClient - navigating");
|
|
30
|
+
this.authService.getLogger().verbosePii(`MsalCustomNavigationClient - navigating to url: ${url}`);
|
|
31
31
|
// Prevent hash clearing from causing an issue with Client-side navigation after redirect is handled
|
|
32
32
|
if (options.noHistory) {
|
|
33
|
-
|
|
33
|
+
return _super.navigateInternal.call(this, url, options);
|
|
34
34
|
}
|
|
35
35
|
else {
|
|
36
|
+
// Normalizing newUrl if no query string
|
|
37
|
+
const urlComponents = new UrlString(url).getUrlComponents();
|
|
38
|
+
const newUrl = urlComponents.QueryString ? `${urlComponents.AbsolutePath}?${urlComponents.QueryString}` : this.location.normalize(urlComponents.AbsolutePath);
|
|
36
39
|
this.router.navigateByUrl(newUrl, { replaceUrl: options.noHistory });
|
|
37
40
|
}
|
|
38
41
|
return Promise.resolve(options.noHistory);
|
|
@@ -47,4 +50,4 @@ MsalCustomNavigationClient.ctorParameters = () => [
|
|
|
47
50
|
{ type: Router },
|
|
48
51
|
{ type: Location }
|
|
49
52
|
];
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5uYXZpZ2F0aW9uLmNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tc2FsLm5hdmlnYXRpb24uY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRzs7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQXFCLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0M7Ozs7R0FJRztBQUVILE1BQU0sT0FBTywwQkFBMkIsU0FBUSxnQkFBZ0I7SUFFNUQsWUFDWSxXQUF3QixFQUN4QixNQUFjLEVBQ2QsUUFBa0I7UUFFMUIsS0FBSyxFQUFFLENBQUM7UUFKQSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUc5QixDQUFDO0lBRUssZ0JBQWdCLENBQUMsR0FBVSxFQUFFLE9BQTBCOzs7OztZQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBRXhFLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUMsbURBQW1ELEdBQUcsRUFBRSxDQUFDLENBQUM7WUFFbEcsb0dBQW9HO1lBQ3BHLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtnQkFDbkIsT0FBTyxPQUFNLGdCQUFnQixZQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUU7YUFDL0M7aUJBQU07Z0JBQ0gsd0NBQXdDO2dCQUN4QyxNQUFNLGFBQWEsR0FBRyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUM1RCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxZQUFZLElBQUksYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzlKLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQzthQUN4RTtZQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsQ0FBQztLQUFBOzs7WUEzQkosVUFBVTs7O1lBUkYsV0FBVztZQUZYLE1BQU07WUFDTixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcblxyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uQ2xpZW50LCBOYXZpZ2F0aW9uT3B0aW9ucywgVXJsU3RyaW5nIH0gZnJvbSBcIkBhenVyZS9tc2FsLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tIFwiLi9tc2FsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKipcclxuICogQ3VzdG9tIG5hdmlnYXRpb24gdXNlZCBmb3IgQW5ndWxhciBjbGllbnQtc2lkZSBuYXZpZ2F0aW9uLlxyXG4gKiBTZWUgcGVyZm9ybWFuY2UgZG9jIGZvciBkZXRhaWxzOlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vQXp1cmVBRC9taWNyb3NvZnQtYXV0aGVudGljYXRpb24tbGlicmFyeS1mb3ItanMvdHJlZS9kZXYvbGliL21zYWwtYW5ndWxhci9kb2NzL3YyLWRvY3MvcGVyZm9ybWFuY2UubWRcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE1zYWxDdXN0b21OYXZpZ2F0aW9uQ2xpZW50IGV4dGVuZHMgTmF2aWdhdGlvbkNsaWVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogTXNhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgXHJcbiAgICAgICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb25cclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbmF2aWdhdGVJbnRlcm5hbCh1cmw6c3RyaW5nLCBvcHRpb25zOiBOYXZpZ2F0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkudHJhY2UoXCJNc2FsQ3VzdG9tTmF2aWdhdGlvbkNsaWVudCBjYWxsZWRcIik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRMb2dnZXIoKS52ZXJib3NlKFwiTXNhbEN1c3RvbU5hdmlnYXRpb25DbGllbnQgLSBuYXZpZ2F0aW5nXCIpO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkudmVyYm9zZVBpaShgTXNhbEN1c3RvbU5hdmlnYXRpb25DbGllbnQgLSBuYXZpZ2F0aW5nIHRvIHVybDogJHt1cmx9YCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gUHJldmVudCBoYXNoIGNsZWFyaW5nIGZyb20gY2F1c2luZyBhbiBpc3N1ZSB3aXRoIENsaWVudC1zaWRlIG5hdmlnYXRpb24gYWZ0ZXIgcmVkaXJlY3QgaXMgaGFuZGxlZFxyXG4gICAgICAgIGlmIChvcHRpb25zLm5vSGlzdG9yeSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc3VwZXIubmF2aWdhdGVJbnRlcm5hbCh1cmwsIG9wdGlvbnMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIE5vcm1hbGl6aW5nIG5ld1VybCBpZiBubyBxdWVyeSBzdHJpbmdcclxuICAgICAgICAgICAgY29uc3QgdXJsQ29tcG9uZW50cyA9IG5ldyBVcmxTdHJpbmcodXJsKS5nZXRVcmxDb21wb25lbnRzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1VybCA9IHVybENvbXBvbmVudHMuUXVlcnlTdHJpbmcgPyBgJHt1cmxDb21wb25lbnRzLkFic29sdXRlUGF0aH0/JHt1cmxDb21wb25lbnRzLlF1ZXJ5U3RyaW5nfWAgOiB0aGlzLmxvY2F0aW9uLm5vcm1hbGl6ZSh1cmxDb21wb25lbnRzLkFic29sdXRlUGF0aCk7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwobmV3VXJsLCB7IHJlcGxhY2VVcmw6IG9wdGlvbnMubm9IaXN0b3J5IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9wdGlvbnMubm9IaXN0b3J5KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/* eslint-disable header/header */
|
|
2
2
|
export const name = "@azure/msal-angular";
|
|
3
|
-
export const version = "2.0.
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
export const version = "2.0.4";
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZU1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhY2thZ2VNZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQ0FBa0M7QUFDbEMsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLHFCQUFxQixDQUFDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBoZWFkZXIvaGVhZGVyICovXHJcbmV4cG9ydCBjb25zdCBuYW1lID0gXCJAYXp1cmUvbXNhbC1hbmd1bGFyXCI7XHJcbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gXCIyLjAuNFwiO1xyXG4iXX0=
|
package/esm2015/public-api.js
CHANGED
|
@@ -14,4 +14,5 @@ export { MsalBroadcastService } from "./msal.broadcast.service";
|
|
|
14
14
|
export { MsalModule } from "./msal.module";
|
|
15
15
|
export { MsalRedirectComponent } from "./msal.redirect.component";
|
|
16
16
|
export { MsalCustomNavigationClient } from "./msal.navigation.client";
|
|
17
|
-
|
|
17
|
+
export { version } from "./packageMetadata";
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVIOzs7R0FHRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcblxyXG4vKipcclxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXHJcbiAqIEBtb2R1bGUgQGF6dXJlL21zYWwtYW5ndWxhclxyXG4gKi9cclxuXHJcbmV4cG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSBcIi4vbXNhbC5zZXJ2aWNlXCI7XHJcbmV4cG9ydCB7IElNc2FsU2VydmljZSB9IGZyb20gXCIuL0lNc2FsU2VydmljZVwiO1xyXG5leHBvcnQgeyBNc2FsR3VhcmQgfSBmcm9tIFwiLi9tc2FsLmd1YXJkXCI7XHJcbmV4cG9ydCB7IE1zYWxHdWFyZENvbmZpZ3VyYXRpb24sIE1zYWxHdWFyZEF1dGhSZXF1ZXN0IH0gZnJvbSBcIi4vbXNhbC5ndWFyZC5jb25maWdcIjtcclxuZXhwb3J0IHsgTXNhbEludGVyY2VwdG9yIH0gZnJvbSBcIi4vbXNhbC5pbnRlcmNlcHRvclwiO1xyXG5leHBvcnQgeyBNc2FsSW50ZXJjZXB0b3JDb25maWd1cmF0aW9uLCBNc2FsSW50ZXJjZXB0b3JBdXRoUmVxdWVzdCwgUHJvdGVjdGVkUmVzb3VyY2VTY29wZXMgfSBmcm9tIFwiLi9tc2FsLmludGVyY2VwdG9yLmNvbmZpZ1wiO1xyXG5leHBvcnQgeyBNU0FMX0lOU1RBTkNFLCBNU0FMX0dVQVJEX0NPTkZJRywgTVNBTF9JTlRFUkNFUFRPUl9DT05GSUcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuZXhwb3J0IHsgTXNhbEJyb2FkY2FzdFNlcnZpY2UgfSBmcm9tIFwiLi9tc2FsLmJyb2FkY2FzdC5zZXJ2aWNlXCI7XHJcbmV4cG9ydCB7IE1zYWxNb2R1bGUgfSBmcm9tIFwiLi9tc2FsLm1vZHVsZVwiO1xyXG5leHBvcnQgeyBNc2FsUmVkaXJlY3RDb21wb25lbnQgfSBmcm9tIFwiLi9tc2FsLnJlZGlyZWN0LmNvbXBvbmVudFwiO1xyXG5leHBvcnQgeyBNc2FsQ3VzdG9tTmF2aWdhdGlvbkNsaWVudCB9IGZyb20gXCIuL21zYWwubmF2aWdhdGlvbi5jbGllbnRcIjtcclxuZXhwb3J0IHsgdmVyc2lvbiB9IGZyb20gXCIuL3BhY2thZ2VNZXRhZGF0YVwiO1xyXG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { InjectionToken, Injectable, Inject, VERSION, Component, NgModule } from '@angular/core';
|
|
2
|
-
import { Location, CommonModule } from '@angular/common';
|
|
2
|
+
import { Location, DOCUMENT, CommonModule } from '@angular/common';
|
|
3
3
|
import { WrapperSKU, InteractionStatus, EventMessageUtils, InteractionType, BrowserConfigurationAuthError, UrlString, BrowserUtils, StringUtils, NavigationClient } from '@azure/msal-browser';
|
|
4
4
|
import { from, Subject, BehaviorSubject, of, EMPTY } from 'rxjs';
|
|
5
5
|
import { Router } from '@angular/router';
|
|
@@ -16,7 +16,7 @@ const MSAL_INTERCEPTOR_CONFIG = new InjectionToken("MSAL_INTERCEPTOR_CONFIG");
|
|
|
16
16
|
|
|
17
17
|
/* eslint-disable header/header */
|
|
18
18
|
const name = "@azure/msal-angular";
|
|
19
|
-
const version = "2.0.
|
|
19
|
+
const version = "2.0.4";
|
|
20
20
|
|
|
21
21
|
/*
|
|
22
22
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
@@ -101,9 +101,9 @@ class MsalBroadcastService {
|
|
|
101
101
|
this.inProgress$ = this._inProgress.asObservable();
|
|
102
102
|
this.msalInstance.addEventCallback((message) => {
|
|
103
103
|
this._msalSubject.next(message);
|
|
104
|
-
const status = EventMessageUtils.getInteractionStatusFromEvent(message);
|
|
104
|
+
const status = EventMessageUtils.getInteractionStatusFromEvent(message, this._inProgress.value);
|
|
105
105
|
if (status !== null) {
|
|
106
|
-
this.authService.getLogger().verbose(`BroadcastService - ${message.eventType} results in setting inProgress to ${status}`);
|
|
106
|
+
this.authService.getLogger().verbose(`BroadcastService - ${message.eventType} results in setting inProgress from ${this._inProgress.value} to ${status}`);
|
|
107
107
|
this._inProgress.next(status);
|
|
108
108
|
}
|
|
109
109
|
});
|
|
@@ -197,9 +197,15 @@ class MsalGuard {
|
|
|
197
197
|
* short-circuit to prevent redirecting or popups.
|
|
198
198
|
* TODO: Update to allow running in iframe once allowRedirectInIframe is implemented
|
|
199
199
|
*/
|
|
200
|
-
if (
|
|
201
|
-
|
|
202
|
-
|
|
200
|
+
if (typeof window !== "undefined") {
|
|
201
|
+
if (UrlString.hashContainsKnownProperties(window.location.hash) && BrowserUtils.isInIframe()) {
|
|
202
|
+
this.authService.getLogger().warning("Guard - redirectUri set to page with MSAL Guard. It is recommended to not set redirectUri to a page that requires authentication.");
|
|
203
|
+
return of(false);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
this.authService.getLogger().info("Guard - window is undefined, MSAL does not support server-side token acquisition");
|
|
208
|
+
return of(true);
|
|
203
209
|
}
|
|
204
210
|
/**
|
|
205
211
|
* If a loginFailedRoute is set in the config, set this as the loginFailedRoute
|
|
@@ -221,7 +227,7 @@ class MsalGuard {
|
|
|
221
227
|
}
|
|
222
228
|
this.authService.getLogger().verbose("Guard - at least 1 account exists, can activate or load");
|
|
223
229
|
// Prevent navigating the app to /#code= or /code=
|
|
224
|
-
if (state &&
|
|
230
|
+
if (state && state.url.indexOf("code=") > -1) {
|
|
225
231
|
this.authService.getLogger().info("Guard - Hash contains known code response, stopping navigation.");
|
|
226
232
|
// Path routing (navigate to current path without hash)
|
|
227
233
|
if (currentPath.indexOf("#") > -1) {
|
|
@@ -275,10 +281,13 @@ MsalGuard.ctorParameters = () => [
|
|
|
275
281
|
* Licensed under the MIT License.
|
|
276
282
|
*/
|
|
277
283
|
class MsalInterceptor {
|
|
278
|
-
constructor(msalInterceptorConfig, authService, location
|
|
284
|
+
constructor(msalInterceptorConfig, authService, location,
|
|
285
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
|
|
286
|
+
document) {
|
|
279
287
|
this.msalInterceptorConfig = msalInterceptorConfig;
|
|
280
288
|
this.authService = authService;
|
|
281
289
|
this.location = location;
|
|
290
|
+
this._document = document;
|
|
282
291
|
}
|
|
283
292
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
284
293
|
intercept(req, next) {
|
|
@@ -328,6 +337,7 @@ class MsalInterceptor {
|
|
|
328
337
|
}
|
|
329
338
|
/**
|
|
330
339
|
* Invoke interaction for the given set of scopes
|
|
340
|
+
* @param authRequest Request
|
|
331
341
|
* @param scopes Array of scopes for the request
|
|
332
342
|
* @returns Result from the interactive request
|
|
333
343
|
*/
|
|
@@ -344,7 +354,7 @@ class MsalInterceptor {
|
|
|
344
354
|
/**
|
|
345
355
|
* Looks up the scopes for the given endpoint from the protectedResourceMap
|
|
346
356
|
* @param endpoint Url of the request
|
|
347
|
-
* @param
|
|
357
|
+
* @param httpMethod Http method of the request
|
|
348
358
|
* @returns Array of scopes, or null if not found
|
|
349
359
|
*
|
|
350
360
|
*/
|
|
@@ -354,33 +364,52 @@ class MsalInterceptor {
|
|
|
354
364
|
const normalizedEndpoint = this.location.normalize(endpoint);
|
|
355
365
|
const protectedResourcesArray = Array.from(this.msalInterceptorConfig.protectedResourceMap.keys());
|
|
356
366
|
const matchingProtectedResources = this.matchResourcesToEndpoint(protectedResourcesArray, normalizedEndpoint);
|
|
357
|
-
|
|
358
|
-
|
|
367
|
+
// Check absolute urls of resources first before checking relative to prevent incorrect matching where multiple resources have similar relative urls
|
|
368
|
+
if (matchingProtectedResources.absoluteResources.length > 0) {
|
|
369
|
+
return this.matchScopesToEndpoint(this.msalInterceptorConfig.protectedResourceMap, matchingProtectedResources.absoluteResources, httpMethod);
|
|
370
|
+
}
|
|
371
|
+
else if (matchingProtectedResources.relativeResources.length > 0) {
|
|
372
|
+
return this.matchScopesToEndpoint(this.msalInterceptorConfig.protectedResourceMap, matchingProtectedResources.relativeResources, httpMethod);
|
|
359
373
|
}
|
|
360
374
|
return null;
|
|
361
375
|
}
|
|
362
376
|
/**
|
|
363
377
|
* Finds resource endpoints that match request endpoint
|
|
364
|
-
* @param
|
|
378
|
+
* @param protectedResourcesEndpoints
|
|
365
379
|
* @param endpoint
|
|
366
|
-
* @param location
|
|
367
380
|
* @returns
|
|
368
381
|
*/
|
|
369
382
|
matchResourcesToEndpoint(protectedResourcesEndpoints, endpoint) {
|
|
370
|
-
|
|
383
|
+
const matchingResources = { absoluteResources: [], relativeResources: [] };
|
|
384
|
+
protectedResourcesEndpoints.forEach(key => {
|
|
385
|
+
// Normalizes and adds resource to matchingResources.absoluteResources if key matches endpoint. StringUtils.matchPattern accounts for wildcards
|
|
371
386
|
const normalizedKey = this.location.normalize(key);
|
|
387
|
+
if (StringUtils.matchPattern(normalizedKey, endpoint)) {
|
|
388
|
+
matchingResources.absoluteResources.push(key);
|
|
389
|
+
}
|
|
390
|
+
// Get url components for relative urls
|
|
391
|
+
const absoluteKey = this.getAbsoluteUrl(key);
|
|
392
|
+
const keyComponents = new UrlString(absoluteKey).getUrlComponents();
|
|
393
|
+
const absoluteEndpoint = this.getAbsoluteUrl(endpoint);
|
|
394
|
+
const endpointComponents = new UrlString(absoluteEndpoint).getUrlComponents();
|
|
372
395
|
// Normalized key should include query strings if applicable
|
|
373
|
-
const keyComponents = new UrlString(key).getUrlComponents();
|
|
374
396
|
const relativeNormalizedKey = keyComponents.QueryString ? `${keyComponents.AbsolutePath}?${keyComponents.QueryString}` : this.location.normalize(keyComponents.AbsolutePath);
|
|
375
|
-
//
|
|
376
|
-
if (
|
|
377
|
-
|
|
378
|
-
}
|
|
379
|
-
else {
|
|
380
|
-
// Matching endpoint with both protected resource and relative url of protected resource
|
|
381
|
-
return StringUtils.matchPattern(normalizedKey, endpoint) || StringUtils.matchPattern(relativeNormalizedKey, endpoint);
|
|
397
|
+
// Add resource to matchingResources.relativeResources if same origin, relativeKey matches endpoint, and is not empty
|
|
398
|
+
if (keyComponents.HostNameAndPort === endpointComponents.HostNameAndPort && StringUtils.matchPattern(relativeNormalizedKey, absoluteEndpoint) && relativeNormalizedKey !== "" && relativeNormalizedKey !== "/*") {
|
|
399
|
+
matchingResources.relativeResources.push(key);
|
|
382
400
|
}
|
|
383
401
|
});
|
|
402
|
+
return matchingResources;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Transforms relative urls to absolute urls
|
|
406
|
+
* @param url
|
|
407
|
+
* @returns
|
|
408
|
+
*/
|
|
409
|
+
getAbsoluteUrl(url) {
|
|
410
|
+
const link = this._document.createElement("a");
|
|
411
|
+
link.href = url;
|
|
412
|
+
return link.href;
|
|
384
413
|
}
|
|
385
414
|
/**
|
|
386
415
|
* Finds scopes from first matching endpoint with HTTP method that matches request
|
|
@@ -411,9 +440,15 @@ class MsalInterceptor {
|
|
|
411
440
|
const normalizedResourceMethod = entry.httpMethod.toLowerCase();
|
|
412
441
|
// Method in protectedResourceMap matches request http method
|
|
413
442
|
if (normalizedResourceMethod === normalizedRequestMethod) {
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
443
|
+
// Validate if scopes comes null to unprotect the resource in a certain http method
|
|
444
|
+
if (entry.scopes === null) {
|
|
445
|
+
allMatchedScopes.push(null);
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
entry.scopes.forEach((scope) => {
|
|
449
|
+
scopesForEndpoint.push(scope);
|
|
450
|
+
});
|
|
451
|
+
}
|
|
417
452
|
}
|
|
418
453
|
}
|
|
419
454
|
});
|
|
@@ -438,7 +473,8 @@ MsalInterceptor.decorators = [
|
|
|
438
473
|
MsalInterceptor.ctorParameters = () => [
|
|
439
474
|
{ type: undefined, decorators: [{ type: Inject, args: [MSAL_INTERCEPTOR_CONFIG,] }] },
|
|
440
475
|
{ type: MsalService },
|
|
441
|
-
{ type: Location }
|
|
476
|
+
{ type: Location },
|
|
477
|
+
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
|
|
442
478
|
];
|
|
443
479
|
|
|
444
480
|
/*
|
|
@@ -520,18 +556,21 @@ class MsalCustomNavigationClient extends NavigationClient {
|
|
|
520
556
|
this.location = location;
|
|
521
557
|
}
|
|
522
558
|
navigateInternal(url, options) {
|
|
559
|
+
const _super = Object.create(null, {
|
|
560
|
+
navigateInternal: { get: () => super.navigateInternal }
|
|
561
|
+
});
|
|
523
562
|
return __awaiter(this, void 0, void 0, function* () {
|
|
524
|
-
this.authService.getLogger().
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
const newUrl = urlComponents.QueryString ? `${urlComponents.AbsolutePath}?${urlComponents.QueryString}` : this.location.normalize(urlComponents.AbsolutePath);
|
|
528
|
-
// Replaces current state if noHistory flag set to true
|
|
529
|
-
this.authService.getLogger().verbosePii(`MsalCustomNavigationClient - navigating to newUrl: ${newUrl}`);
|
|
563
|
+
this.authService.getLogger().trace("MsalCustomNavigationClient called");
|
|
564
|
+
this.authService.getLogger().verbose("MsalCustomNavigationClient - navigating");
|
|
565
|
+
this.authService.getLogger().verbosePii(`MsalCustomNavigationClient - navigating to url: ${url}`);
|
|
530
566
|
// Prevent hash clearing from causing an issue with Client-side navigation after redirect is handled
|
|
531
567
|
if (options.noHistory) {
|
|
532
|
-
|
|
568
|
+
return _super.navigateInternal.call(this, url, options);
|
|
533
569
|
}
|
|
534
570
|
else {
|
|
571
|
+
// Normalizing newUrl if no query string
|
|
572
|
+
const urlComponents = new UrlString(url).getUrlComponents();
|
|
573
|
+
const newUrl = urlComponents.QueryString ? `${urlComponents.AbsolutePath}?${urlComponents.QueryString}` : this.location.normalize(urlComponents.AbsolutePath);
|
|
535
574
|
this.router.navigateByUrl(newUrl, { replaceUrl: options.noHistory });
|
|
536
575
|
}
|
|
537
576
|
return Promise.resolve(options.noHistory);
|
|
@@ -556,5 +595,5 @@ MsalCustomNavigationClient.ctorParameters = () => [
|
|
|
556
595
|
* Generated bundle index. Do not edit.
|
|
557
596
|
*/
|
|
558
597
|
|
|
559
|
-
export { MSAL_GUARD_CONFIG, MSAL_INSTANCE, MSAL_INTERCEPTOR_CONFIG, MsalBroadcastService, MsalCustomNavigationClient, MsalGuard, MsalInterceptor, MsalModule, MsalRedirectComponent, MsalService };
|
|
598
|
+
export { MSAL_GUARD_CONFIG, MSAL_INSTANCE, MSAL_INTERCEPTOR_CONFIG, MsalBroadcastService, MsalCustomNavigationClient, MsalGuard, MsalInterceptor, MsalModule, MsalRedirectComponent, MsalService, version };
|
|
560
599
|
//# sourceMappingURL=azure-msal-angular.js.map
|