@azure/msal-angular 2.5.7 → 3.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/IMsalService.d.ts +2 -3
  2. package/README.md +14 -9
  3. package/constants.d.ts +1 -2
  4. package/esm2020/IMsalService.mjs +6 -0
  5. package/esm2020/constants.mjs +10 -0
  6. package/{esm2015/msal.broadcast.config.js → esm2020/msal.broadcast.config.mjs} +1 -1
  7. package/esm2020/msal.broadcast.service.mjs +57 -0
  8. package/esm2020/msal.guard.config.mjs +6 -0
  9. package/esm2020/msal.guard.mjs +218 -0
  10. package/esm2020/msal.interceptor.config.mjs +6 -0
  11. package/esm2020/msal.interceptor.mjs +270 -0
  12. package/esm2020/msal.module.mjs +46 -0
  13. package/esm2020/msal.navigation.client.mjs +51 -0
  14. package/esm2020/msal.redirect.component.mjs +31 -0
  15. package/esm2020/msal.service.mjs +81 -0
  16. package/{esm2015/packageMetadata.js → esm2020/packageMetadata.mjs} +2 -2
  17. package/esm2020/public-api.mjs +18 -0
  18. package/fesm2015/{azure-msal-angular.js → azure-msal-angular.mjs} +259 -180
  19. package/fesm2015/azure-msal-angular.mjs.map +1 -0
  20. package/fesm2020/azure-msal-angular.mjs +732 -0
  21. package/fesm2020/azure-msal-angular.mjs.map +1 -0
  22. package/{azure-msal-angular.d.ts → index.d.ts} +1 -1
  23. package/msal.broadcast.config.d.ts +0 -1
  24. package/msal.broadcast.service.d.ts +7 -5
  25. package/msal.guard.config.d.ts +4 -5
  26. package/msal.guard.d.ts +12 -10
  27. package/msal.interceptor.config.d.ts +4 -5
  28. package/msal.interceptor.d.ts +11 -8
  29. package/msal.module.d.ts +10 -5
  30. package/msal.navigation.client.d.ts +7 -5
  31. package/msal.redirect.component.d.ts +5 -3
  32. package/msal.service.d.ts +7 -5
  33. package/package.json +25 -14
  34. package/packageMetadata.d.ts +1 -2
  35. package/public-api.d.ts +13 -14
  36. package/IMsalService.d.ts.map +0 -1
  37. package/azure-msal-angular.d.ts.map +0 -1
  38. package/azure-msal-angular.metadata.json +0 -1
  39. package/bundles/azure-msal-angular.umd.js +0 -1071
  40. package/bundles/azure-msal-angular.umd.js.map +0 -1
  41. package/bundles/azure-msal-angular.umd.min.js +0 -2
  42. package/bundles/azure-msal-angular.umd.min.js.map +0 -1
  43. package/constants.d.ts.map +0 -1
  44. package/esm2015/IMsalService.js +0 -6
  45. package/esm2015/constants.js +0 -10
  46. package/esm2015/msal.broadcast.service.js +0 -46
  47. package/esm2015/msal.guard.config.js +0 -6
  48. package/esm2015/msal.guard.js +0 -189
  49. package/esm2015/msal.interceptor.config.js +0 -6
  50. package/esm2015/msal.interceptor.js +0 -230
  51. package/esm2015/msal.module.js +0 -46
  52. package/esm2015/msal.navigation.client.js +0 -53
  53. package/esm2015/msal.redirect.component.js +0 -33
  54. package/esm2015/msal.service.js +0 -77
  55. package/esm2015/public-api.js +0 -18
  56. package/fesm2015/azure-msal-angular.js.map +0 -1
  57. package/msal.broadcast.config.d.ts.map +0 -1
  58. package/msal.broadcast.service.d.ts.map +0 -1
  59. package/msal.guard.config.d.ts.map +0 -1
  60. package/msal.guard.d.ts.map +0 -1
  61. package/msal.interceptor.config.d.ts.map +0 -1
  62. package/msal.interceptor.d.ts.map +0 -1
  63. package/msal.module.d.ts.map +0 -1
  64. package/msal.navigation.client.d.ts.map +0 -1
  65. package/msal.redirect.component.d.ts.map +0 -1
  66. package/msal.service.d.ts.map +0 -1
  67. package/packageMetadata.d.ts.map +0 -1
  68. package/public-api.d.ts.map +0 -1
  69. /package/{esm2015/azure-msal-angular.js → esm2020/azure-msal-angular.mjs} +0 -0
@@ -0,0 +1,270 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { Injectable, Inject } from '@angular/core';
6
+ import { DOCUMENT } from '@angular/common';
7
+ import { BrowserConfigurationAuthError, InteractionStatus, InteractionType, StringUtils, UrlString, } from '@azure/msal-browser';
8
+ import { EMPTY, of } from 'rxjs';
9
+ import { switchMap, catchError, take, filter } from 'rxjs/operators';
10
+ import { MSAL_INTERCEPTOR_CONFIG } from './constants';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "./msal.service";
13
+ import * as i2 from "@angular/common";
14
+ import * as i3 from "./msal.broadcast.service";
15
+ export class MsalInterceptor {
16
+ constructor(msalInterceptorConfig, authService, location, msalBroadcastService,
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
18
+ document) {
19
+ this.msalInterceptorConfig = msalInterceptorConfig;
20
+ this.authService = authService;
21
+ this.location = location;
22
+ this.msalBroadcastService = msalBroadcastService;
23
+ this._document = document;
24
+ }
25
+ intercept(req, // eslint-disable-line @typescript-eslint/no-explicit-any
26
+ next
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ ) {
29
+ if (this.msalInterceptorConfig.interactionType !== InteractionType.Popup &&
30
+ this.msalInterceptorConfig.interactionType !== InteractionType.Redirect) {
31
+ throw new BrowserConfigurationAuthError('invalid_interaction_type', 'Invalid interaction type provided to MSAL Interceptor. InteractionType.Popup, InteractionType.Redirect must be provided in the msalInterceptorConfiguration');
32
+ }
33
+ this.authService.getLogger().verbose('MSAL Interceptor activated');
34
+ const scopes = this.getScopesForEndpoint(req.url, req.method);
35
+ // If no scopes for endpoint, does not acquire token
36
+ if (!scopes || scopes.length === 0) {
37
+ this.authService
38
+ .getLogger()
39
+ .verbose('Interceptor - no scopes for endpoint');
40
+ return next.handle(req);
41
+ }
42
+ // Sets account as active account or first account
43
+ let account;
44
+ if (!!this.authService.instance.getActiveAccount()) {
45
+ this.authService
46
+ .getLogger()
47
+ .verbose('Interceptor - active account selected');
48
+ account = this.authService.instance.getActiveAccount();
49
+ }
50
+ else {
51
+ this.authService
52
+ .getLogger()
53
+ .verbose('Interceptor - no active account, fallback to first account');
54
+ account = this.authService.instance.getAllAccounts()[0];
55
+ }
56
+ const authRequest = typeof this.msalInterceptorConfig.authRequest === 'function'
57
+ ? this.msalInterceptorConfig.authRequest(this.authService, req, {
58
+ account: account,
59
+ })
60
+ : { ...this.msalInterceptorConfig.authRequest, account };
61
+ this.authService
62
+ .getLogger()
63
+ .info(`Interceptor - ${scopes.length} scopes found for endpoint`);
64
+ this.authService
65
+ .getLogger()
66
+ .infoPii(`Interceptor - [${scopes}] scopes found for ${req.url}`);
67
+ return this.acquireToken(authRequest, scopes, account).pipe(switchMap((result) => {
68
+ this.authService
69
+ .getLogger()
70
+ .verbose('Interceptor - setting authorization headers');
71
+ const headers = req.headers.set('Authorization', `Bearer ${result.accessToken}`);
72
+ const requestClone = req.clone({ headers });
73
+ return next.handle(requestClone);
74
+ }));
75
+ }
76
+ /**
77
+ * Try to acquire token silently. Invoke interaction if acquireTokenSilent rejected with error or resolved with null access token
78
+ * @param authRequest Request
79
+ * @param scopes Array of scopes for the request
80
+ * @param account Account
81
+ * @returns Authentication result
82
+ */
83
+ acquireToken(authRequest, scopes, account) {
84
+ // Note: For MSA accounts, include openid scope when calling acquireTokenSilent to return idToken
85
+ return this.authService
86
+ .acquireTokenSilent({ ...authRequest, scopes, account })
87
+ .pipe(catchError(() => {
88
+ this.authService
89
+ .getLogger()
90
+ .error('Interceptor - acquireTokenSilent rejected with error. Invoking interaction to resolve.');
91
+ return this.msalBroadcastService.inProgress$.pipe(take(1), switchMap((status) => {
92
+ if (status === InteractionStatus.None) {
93
+ return this.acquireTokenInteractively(authRequest, scopes);
94
+ }
95
+ return this.msalBroadcastService.inProgress$.pipe(filter((status) => status === InteractionStatus.None), take(1), switchMap(() => this.acquireToken(authRequest, scopes, account)));
96
+ }));
97
+ }), switchMap((result) => {
98
+ if (!result.accessToken) {
99
+ this.authService
100
+ .getLogger()
101
+ .error('Interceptor - acquireTokenSilent resolved with null access token. Known issue with B2C tenants, invoking interaction to resolve.');
102
+ return this.msalBroadcastService.inProgress$.pipe(filter((status) => status === InteractionStatus.None), take(1), switchMap(() => this.acquireTokenInteractively(authRequest, scopes)));
103
+ }
104
+ return of(result);
105
+ }));
106
+ }
107
+ /**
108
+ * Invoke interaction for the given set of scopes
109
+ * @param authRequest Request
110
+ * @param scopes Array of scopes for the request
111
+ * @returns Result from the interactive request
112
+ */
113
+ acquireTokenInteractively(authRequest, scopes) {
114
+ if (this.msalInterceptorConfig.interactionType === InteractionType.Popup) {
115
+ this.authService
116
+ .getLogger()
117
+ .verbose('Interceptor - error acquiring token silently, acquiring by popup');
118
+ return this.authService.acquireTokenPopup({ ...authRequest, scopes });
119
+ }
120
+ this.authService
121
+ .getLogger()
122
+ .verbose('Interceptor - error acquiring token silently, acquiring by redirect');
123
+ const redirectStartPage = window.location.href;
124
+ this.authService.acquireTokenRedirect({
125
+ ...authRequest,
126
+ scopes,
127
+ redirectStartPage,
128
+ });
129
+ return EMPTY;
130
+ }
131
+ /**
132
+ * Looks up the scopes for the given endpoint from the protectedResourceMap
133
+ * @param endpoint Url of the request
134
+ * @param httpMethod Http method of the request
135
+ * @returns Array of scopes, or null if not found
136
+ *
137
+ */
138
+ getScopesForEndpoint(endpoint, httpMethod) {
139
+ this.authService
140
+ .getLogger()
141
+ .verbose('Interceptor - getting scopes for endpoint');
142
+ // Ensures endpoints and protected resources compared are normalized
143
+ const normalizedEndpoint = this.location.normalize(endpoint);
144
+ const protectedResourcesArray = Array.from(this.msalInterceptorConfig.protectedResourceMap.keys());
145
+ const matchingProtectedResources = this.matchResourcesToEndpoint(protectedResourcesArray, normalizedEndpoint);
146
+ // Check absolute urls of resources first before checking relative to prevent incorrect matching where multiple resources have similar relative urls
147
+ if (matchingProtectedResources.absoluteResources.length > 0) {
148
+ return this.matchScopesToEndpoint(this.msalInterceptorConfig.protectedResourceMap, matchingProtectedResources.absoluteResources, httpMethod);
149
+ }
150
+ else if (matchingProtectedResources.relativeResources.length > 0) {
151
+ return this.matchScopesToEndpoint(this.msalInterceptorConfig.protectedResourceMap, matchingProtectedResources.relativeResources, httpMethod);
152
+ }
153
+ return null;
154
+ }
155
+ /**
156
+ * Finds resource endpoints that match request endpoint
157
+ * @param protectedResourcesEndpoints
158
+ * @param endpoint
159
+ * @returns
160
+ */
161
+ matchResourcesToEndpoint(protectedResourcesEndpoints, endpoint) {
162
+ const matchingResources = {
163
+ absoluteResources: [],
164
+ relativeResources: [],
165
+ };
166
+ protectedResourcesEndpoints.forEach((key) => {
167
+ // Normalizes and adds resource to matchingResources.absoluteResources if key matches endpoint. StringUtils.matchPattern accounts for wildcards
168
+ const normalizedKey = this.location.normalize(key);
169
+ if (StringUtils.matchPattern(normalizedKey, endpoint)) {
170
+ matchingResources.absoluteResources.push(key);
171
+ }
172
+ // Get url components for relative urls
173
+ const absoluteKey = this.getAbsoluteUrl(key);
174
+ const keyComponents = new UrlString(absoluteKey).getUrlComponents();
175
+ const absoluteEndpoint = this.getAbsoluteUrl(endpoint);
176
+ const endpointComponents = new UrlString(absoluteEndpoint).getUrlComponents();
177
+ // Normalized key should include query strings if applicable
178
+ const relativeNormalizedKey = keyComponents.QueryString
179
+ ? `${keyComponents.AbsolutePath}?${keyComponents.QueryString}`
180
+ : this.location.normalize(keyComponents.AbsolutePath);
181
+ // Add resource to matchingResources.relativeResources if same origin, relativeKey matches endpoint, and is not empty
182
+ if (keyComponents.HostNameAndPort === endpointComponents.HostNameAndPort &&
183
+ StringUtils.matchPattern(relativeNormalizedKey, absoluteEndpoint) &&
184
+ relativeNormalizedKey !== '' &&
185
+ relativeNormalizedKey !== '/*') {
186
+ matchingResources.relativeResources.push(key);
187
+ }
188
+ });
189
+ return matchingResources;
190
+ }
191
+ /**
192
+ * Transforms relative urls to absolute urls
193
+ * @param url
194
+ * @returns
195
+ */
196
+ getAbsoluteUrl(url) {
197
+ const link = this._document.createElement('a');
198
+ link.href = url;
199
+ return link.href;
200
+ }
201
+ /**
202
+ * Finds scopes from first matching endpoint with HTTP method that matches request
203
+ * @param protectedResourceMap Protected resource map
204
+ * @param endpointArray Array of resources that match request endpoint
205
+ * @param httpMethod Http method of the request
206
+ * @returns
207
+ */
208
+ matchScopesToEndpoint(protectedResourceMap, endpointArray, httpMethod) {
209
+ const allMatchedScopes = [];
210
+ // Check each matched endpoint for matching HttpMethod and scopes
211
+ endpointArray.forEach((matchedEndpoint) => {
212
+ const scopesForEndpoint = [];
213
+ const methodAndScopesArray = protectedResourceMap.get(matchedEndpoint);
214
+ // Return if resource is unprotected
215
+ if (methodAndScopesArray === null) {
216
+ allMatchedScopes.push(null);
217
+ return;
218
+ }
219
+ methodAndScopesArray.forEach((entry) => {
220
+ // Entry is either array of scopes or ProtectedResourceScopes object
221
+ if (typeof entry === 'string') {
222
+ scopesForEndpoint.push(entry);
223
+ }
224
+ else {
225
+ // Ensure methods being compared are normalized
226
+ const normalizedRequestMethod = httpMethod.toLowerCase();
227
+ const normalizedResourceMethod = entry.httpMethod.toLowerCase();
228
+ // Method in protectedResourceMap matches request http method
229
+ if (normalizedResourceMethod === normalizedRequestMethod) {
230
+ // Validate if scopes comes null to unprotect the resource in a certain http method
231
+ if (entry.scopes === null) {
232
+ allMatchedScopes.push(null);
233
+ }
234
+ else {
235
+ entry.scopes.forEach((scope) => {
236
+ scopesForEndpoint.push(scope);
237
+ });
238
+ }
239
+ }
240
+ }
241
+ });
242
+ // Only add to all scopes if scopes for endpoint and method is found
243
+ if (scopesForEndpoint.length > 0) {
244
+ allMatchedScopes.push(scopesForEndpoint);
245
+ }
246
+ });
247
+ if (allMatchedScopes.length > 0) {
248
+ if (allMatchedScopes.length > 1) {
249
+ this.authService
250
+ .getLogger()
251
+ .warning('Interceptor - More than 1 matching scopes for endpoint found.');
252
+ }
253
+ // Returns scopes for first matching endpoint
254
+ return allMatchedScopes[0];
255
+ }
256
+ return null;
257
+ }
258
+ }
259
+ MsalInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalInterceptor, deps: [{ token: MSAL_INTERCEPTOR_CONFIG }, { token: i1.MsalService }, { token: i2.Location }, { token: i3.MsalBroadcastService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
260
+ MsalInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalInterceptor });
261
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalInterceptor, decorators: [{
262
+ type: Injectable
263
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
264
+ type: Inject,
265
+ args: [MSAL_INTERCEPTOR_CONFIG]
266
+ }] }, { type: i1.MsalService }, { type: i2.Location }, { type: i3.MsalBroadcastService }, { type: undefined, decorators: [{
267
+ type: Inject,
268
+ args: [DOCUMENT]
269
+ }] }]; } });
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tc2FsLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBWSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU9yRCxPQUFPLEVBR0wsNkJBQTZCLEVBQzdCLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBYyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVNyRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7O0FBR3RELE1BQU0sT0FBTyxlQUFlO0lBRzFCLFlBRVUscUJBQW1ELEVBQ25ELFdBQXdCLEVBQ3hCLFFBQWtCLEVBQ2xCLG9CQUEwQztJQUNsRCxpSEFBaUg7SUFDL0YsUUFBYztRQUx4QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQThCO1FBQ25ELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUlsRCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQW9CLENBQUM7SUFDeEMsQ0FBQztJQUVELFNBQVMsQ0FDUCxHQUFxQixFQUFFLHlEQUF5RDtJQUNoRixJQUFpQjtJQUNqQiw4REFBOEQ7O1FBRTlELElBQ0UsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsS0FBSyxlQUFlLENBQUMsS0FBSztZQUNwRSxJQUFJLENBQUMscUJBQXFCLENBQUMs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QU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dDQUM3QixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ2hDLENBQUMsQ0FBQyxDQUFDO3lCQUNKO3FCQUNGO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxvRUFBb0U7WUFDcEUsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNoQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUMxQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9CLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLFdBQVc7cUJBQ2IsU0FBUyxFQUFFO3FCQUNYLE9BQU8sQ0FDTiwrREFBK0QsQ0FDaEUsQ0FBQzthQUNMO1lBQ0QsNkNBQTZDO1lBQzdDLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7OzRHQWpXVSxlQUFlLGtCQUloQix1QkFBdUIsb0dBTXZCLFFBQVE7Z0hBVlAsZUFBZTsyRkFBZixlQUFlO2tCQUQzQixVQUFVOzswQkFLTixNQUFNOzJCQUFDLHVCQUF1Qjs7MEJBTTlCLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvY2F0aW9uLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgSHR0cFJlcXVlc3QsXHJcbiAgSHR0cEhhbmRsZXIsXHJcbiAgSHR0cEV2ZW50LFxyXG4gIEh0dHBJbnRlcmNlcHRvcixcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLXVucmVzb2x2ZWRcclxuaW1wb3J0IHtcclxuICBBY2NvdW50SW5mbyxcclxuICBBdXRoZW50aWNhdGlvblJlc3VsdCxcclxuICBCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvcixcclxuICBJbnRlcmFjdGlvblN0YXR1cyxcclxuICBJbnRlcmFjdGlvblR5cGUsXHJcbiAgU3RyaW5nVXRpbHMsXHJcbiAgVXJsU3RyaW5nLFxyXG59IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBFTVBUWSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgc3dpdGNoTWFwLCBjYXRjaEVycm9yLCB0YWtlLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSAnLi9tc2FsLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIE1zYWxJbnRlcmNlcHRvckF1dGhSZXF1ZXN0LFxyXG4gIE1zYWxJbnRlcmNlcHRvckNvbmZpZ3VyYXRpb24sXHJcbiAgUHJvdGVjdGVkUmVzb3VyY2VTY29wZXMsXHJcbiAgTWF0Y2hpbmdSZXNvdXJjZXMsXHJcbn0gZnJvbSAnLi9tc2FsLmludGVyY2VwdG9yLmNvbmZpZyc7XHJcbmltcG9ydCB7IE1zYWxCcm9hZGNhc3RTZXJ2aWNlIH0gZnJvbSAnLi9tc2FsLmJyb2FkY2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTVNBTF9JTlRFUkNFUFRPUl9DT05GSUcgfSBmcm9tICcuL2NvbnN0YW50cyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBNc2FsSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG4gIHByaXZhdGUgX2RvY3VtZW50PzogRG9jdW1lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChNU0FMX0lOVEVSQ0VQVE9SX0NPTkZJRylcclxuICAgIHByaXZhdGUgbXNhbEludGVyY2VwdG9yQ29uZmlnOiBNc2FsSW50ZXJjZXB0b3JDb25maWd1cmF0aW9uLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogTXNhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcclxuICAgIHByaXZhdGUgbXNhbEJyb2FkY2FzdFNlcnZpY2U6IE1zYWxCcm9hZGNhc3RTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIEBJbmplY3QoRE9DVU1FTlQpIGRvY3VtZW50PzogYW55XHJcbiAgKSB7XHJcbiAgICB0aGlzLl9kb2N1bWVudCA9IGRvY3VtZW50IGFzIERvY3VtZW50O1xyXG4gIH1cclxuXHJcbiAgaW50ZXJjZXB0KFxyXG4gICAgcmVxOiBIdHRwUmVxdWVzdDxhbnk+LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIG5leHQ6IEh0dHBIYW5kbGVyXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuaW50ZXJhY3Rpb25UeXBlICE9PSBJbnRlcmFjdGlvblR5cGUuUG9wdXAgJiZcclxuICAgICAgdGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuaW50ZXJhY3Rpb25UeXBlICE9PSBJbnRlcmFjdGlvblR5cGUuUmVkaXJlY3RcclxuICAgICkge1xyXG4gICAgICB0aHJvdyBuZXcgQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3IoXHJcbiAgICAgICAgJ2ludmFsaWRfaW50ZXJhY3Rpb25fdHlwZScsXHJcbiAgICAgICAgJ0ludmFsaWQgaW50ZXJhY3Rpb24gdHlwZSBwcm92aWRlZCB0byBNU0FMIEludGVyY2VwdG9yLiBJbnRlcmFjdGlvblR5cGUuUG9wdXAsIEludGVyYWN0aW9uVHlwZS5SZWRpcmVjdCBtdXN0IGJlIHByb3ZpZGVkIGluIHRoZSBtc2FsSW50ZXJjZXB0b3JDb25maWd1cmF0aW9uJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkudmVyYm9zZSgnTVNBTCBJbnRlcmNlcHRvciBhY3RpdmF0ZWQnKTtcclxuICAgIGNvbnN0IHNjb3BlcyA9IHRoaXMuZ2V0U2NvcGVzRm9yRW5kcG9pbnQocmVxLnVybCwgcmVxLm1ldGhvZCk7XHJcblxyXG4gICAgLy8gSWYgbm8gc2NvcGVzIGZvciBlbmRwb2ludCwgZG9lcyBub3QgYWNxdWlyZSB0b2tlblxyXG4gICAgaWYgKCFzY29wZXMgfHwgc2NvcGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlXHJcbiAgICAgICAgLmdldExvZ2dlcigpXHJcbiAgICAgICAgLnZlcmJvc2UoJ0ludGVyY2VwdG9yIC0gbm8gc2NvcGVzIGZvciBlbmRwb2ludCcpO1xyXG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTZXRzIGFjY291bnQgYXMgYWN0aXZlIGFjY291bnQgb3IgZmlyc3QgYWNjb3VudFxyXG4gICAgbGV0IGFjY291bnQ6IEFjY291bnRJbmZvO1xyXG4gICAgaWYgKCEhdGhpcy5hdXRoU2VydmljZS5pbnN0YW5jZS5nZXRBY3RpdmVBY2NvdW50KCkpIHtcclxuICAgICAgdGhpcy5hdXRoU2VydmljZVxyXG4gICAgICAgIC5nZXRMb2dnZXIoKVxyXG4gICAgICAgIC52ZXJib3NlKCdJbnRlcmNlcHRvciAtIGFjdGl2ZSBhY2NvdW50IHNlbGVjdGVkJyk7XHJcbiAgICAgIGFjY291bnQgPSB0aGlzLmF1dGhTZXJ2aWNlLmluc3RhbmNlLmdldEFjdGl2ZUFjY291bnQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2VcclxuICAgICAgICAuZ2V0TG9nZ2VyKClcclxuICAgICAgICAudmVyYm9zZSgnSW50ZXJjZXB0b3IgLSBubyBhY3RpdmUgYWNjb3VudCwgZmFsbGJhY2sgdG8gZmlyc3QgYWNjb3VudCcpO1xyXG4gICAgICBhY2NvdW50ID0gdGhpcy5hdXRoU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGF1dGhSZXF1ZXN0ID1cclxuICAgICAgdHlwZW9mIHRoaXMubXNhbEludGVyY2VwdG9yQ29uZmlnLmF1dGhSZXF1ZXN0ID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgPyB0aGlzLm1zYWxJbnRlcmNlcHRvckNvbmZpZy5hdXRoUmVxdWVzdCh0aGlzLmF1dGhTZXJ2aWNlLCByZXEsIHtcclxuICAgICAgICAgICAgYWNjb3VudDogYWNjb3VudCxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgOiB7IC4uLnRoaXMubXNhbEludGVyY2VwdG9yQ29uZmlnLmF1dGhSZXF1ZXN0LCBhY2NvdW50IH07XHJcblxyXG4gICAgdGhpcy5hdXRoU2VydmljZVxyXG4gICAgICAuZ2V0TG9nZ2VyKClcclxuICAgICAgLmluZm8oYEludGVyY2VwdG9yIC0gJHtzY29wZXMubGVuZ3RofSBzY29wZXMgZm91bmQgZm9yIGVuZHBvaW50YCk7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlXHJcbiAgICAgIC5nZXRMb2dnZXIoKVxyXG4gICAgICAuaW5mb1BpaShgSW50ZXJjZXB0b3IgLSBbJHtzY29wZXN9XSBzY29wZXMgZm91bmQgZm9yICR7cmVxLnVybH1gKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5hY3F1aXJlVG9rZW4oYXV0aFJlcXVlc3QsIHNjb3BlcywgYWNjb3VudCkucGlwZShcclxuICAgICAgc3dpdGNoTWFwKChyZXN1bHQ6IEF1dGhlbnRpY2F0aW9uUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZVxyXG4gICAgICAgICAgLmdldExvZ2dlcigpXHJcbiAgICAgICAgICAudmVyYm9zZSgnSW50ZXJjZXB0b3IgLSBzZXR0aW5nIGF1dGhvcml6YXRpb24gaGVhZGVycycpO1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSByZXEuaGVhZGVycy5zZXQoXHJcbiAgICAgICAgICAnQXV0aG9yaXphdGlvbicsXHJcbiAgICAgICAgICBgQmVhcmVyICR7cmVzdWx0LmFjY2Vzc1Rva2VufWBcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCByZXF1ZXN0Q2xvbmUgPSByZXEuY2xvbmUoeyBoZWFkZXJzIH0pO1xyXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0Q2xvbmUpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyeSB0byBhY3F1aXJlIHRva2VuIHNpbGVudGx5LiBJbnZva2UgaW50ZXJhY3Rpb24gaWYgYWNxdWlyZVRva2VuU2lsZW50IHJlamVjdGVkIHdpdGggZXJyb3Igb3IgcmVzb2x2ZWQgd2l0aCBudWxsIGFjY2VzcyB0b2tlblxyXG4gICAqIEBwYXJhbSBhdXRoUmVxdWVzdCBSZXF1ZXN0XHJcbiAgICogQHBhcmFtIHNjb3BlcyBBcnJheSBvZiBzY29wZXMgZm9yIHRoZSByZXF1ZXN0XHJcbiAgICogQHBhcmFtIGFjY291bnQgQWNjb3VudFxyXG4gICAqIEByZXR1cm5zIEF1dGhlbnRpY2F0aW9uIHJlc3VsdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWNxdWlyZVRva2VuKFxyXG4gICAgYXV0aFJlcXVlc3Q6IE1zYWxJbnRlcmNlcHRvckF1dGhSZXF1ZXN0LFxyXG4gICAgc2NvcGVzOiBzdHJpbmdbXSxcclxuICAgIGFjY291bnQ6IEFjY291bnRJbmZvXHJcbiAgKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGlvblJlc3VsdD4ge1xyXG4gICAgLy8gTm90ZTogRm9yIE1TQSBhY2NvdW50cywgaW5jbHVkZSBvcGVuaWQgc2NvcGUgd2hlbiBjYWxsaW5nIGFjcXVpcmVUb2tlblNpbGVudCB0byByZXR1cm4gaWRUb2tlblxyXG4gICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2VcclxuICAgICAgLmFjcXVpcmVUb2tlblNpbGVudCh7IC4uLmF1dGhSZXF1ZXN0LCBzY29wZXMsIGFjY291bnQgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRMb2dnZXIoKVxyXG4gICAgICAgICAgICAuZXJyb3IoXHJcbiAgICAgICAgICAgICAgJ0ludGVyY2VwdG9yIC0gYWNxdWlyZVRva2VuU2lsZW50IHJlamVjdGVkIHdpdGggZXJyb3IuIEludm9raW5nIGludGVyYWN0aW9uIHRvIHJlc29sdmUuJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMubXNhbEJyb2FkY2FzdFNlcnZpY2UuaW5Qcm9ncmVzcyQucGlwZShcclxuICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKChzdGF0dXM6IEludGVyYWN0aW9uU3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gSW50ZXJhY3Rpb25TdGF0dXMuTm9uZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNxdWlyZVRva2VuSW50ZXJhY3RpdmVseShhdXRoUmVxdWVzdCwgc2NvcGVzKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLm1zYWxCcm9hZGNhc3RTZXJ2aWNlLmluUHJvZ3Jlc3MkLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChzdGF0dXM6IEludGVyYWN0aW9uU3RhdHVzKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9PT0gSW50ZXJhY3Rpb25TdGF0dXMuTm9uZVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5hY3F1aXJlVG9rZW4oYXV0aFJlcXVlc3QsIHNjb3BlcywgYWNjb3VudCkpXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKChyZXN1bHQ6IEF1dGhlbnRpY2F0aW9uUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXJlc3VsdC5hY2Nlc3NUb2tlbikge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgLmdldExvZ2dlcigpXHJcbiAgICAgICAgICAgICAgLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgJ0ludGVyY2VwdG9yIC0gYWNxdWlyZVRva2VuU2lsZW50IHJlc29sdmVkIHdpdGggbnVsbCBhY2Nlc3MgdG9rZW4uIEtub3duIGlzc3VlIHdpdGggQjJDIHRlbmFudHMsIGludm9raW5nIGludGVyYWN0aW9uIHRvIHJlc29sdmUuJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1zYWxCcm9hZGNhc3RTZXJ2aWNlLmluUHJvZ3Jlc3MkLnBpcGUoXHJcbiAgICAgICAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKHN0YXR1czogSW50ZXJhY3Rpb25TdGF0dXMpID0+IHN0YXR1cyA9PT0gSW50ZXJhY3Rpb25TdGF0dXMuTm9uZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMuYWNxdWlyZVRva2VuSW50ZXJhY3RpdmVseShhdXRoUmVxdWVzdCwgc2NvcGVzKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBvZihyZXN1bHQpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnZva2UgaW50ZXJhY3Rpb24gZm9yIHRoZSBnaXZlbiBzZXQgb2Ygc2NvcGVzXHJcbiAgICogQHBhcmFtIGF1dGhSZXF1ZXN0IFJlcXVlc3RcclxuICAgKiBAcGFyYW0gc2NvcGVzIEFycmF5IG9mIHNjb3BlcyBmb3IgdGhlIHJlcXVlc3RcclxuICAgKiBAcmV0dXJucyBSZXN1bHQgZnJvbSB0aGUgaW50ZXJhY3RpdmUgcmVxdWVzdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWNxdWlyZVRva2VuSW50ZXJhY3RpdmVseShcclxuICAgIGF1dGhSZXF1ZXN0OiBNc2FsSW50ZXJjZXB0b3JBdXRoUmVxdWVzdCxcclxuICAgIHNjb3Blczogc3RyaW5nW11cclxuICApOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0aW9uUmVzdWx0PiB7XHJcbiAgICBpZiAodGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuaW50ZXJhY3Rpb25UeXBlID09PSBJbnRlcmFjdGlvblR5cGUuUG9wdXApIHtcclxuICAgICAgdGhpcy5hdXRoU2VydmljZVxyXG4gICAgICAgIC5nZXRMb2dnZXIoKVxyXG4gICAgICAgIC52ZXJib3NlKFxyXG4gICAgICAgICAgJ0ludGVyY2VwdG9yIC0gZXJyb3IgYWNxdWlyaW5nIHRva2VuIHNpbGVudGx5LCBhY3F1aXJpbmcgYnkgcG9wdXAnXHJcbiAgICAgICAgKTtcclxuICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuYWNxdWlyZVRva2VuUG9wdXAoeyAuLi5hdXRoUmVxdWVzdCwgc2NvcGVzIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hdXRoU2VydmljZVxyXG4gICAgICAuZ2V0TG9nZ2VyKClcclxuICAgICAgLnZlcmJvc2UoXHJcbiAgICAgICAgJ0ludGVyY2VwdG9yIC0gZXJyb3IgYWNxdWlyaW5nIHRva2VuIHNpbGVudGx5LCBhY3F1aXJpbmcgYnkgcmVkaXJlY3QnXHJcbiAgICAgICk7XHJcbiAgICBjb25zdCByZWRpcmVjdFN0YXJ0UGFnZSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5hY3F1aXJlVG9rZW5SZWRpcmVjdCh7XHJcbiAgICAgIC4uLmF1dGhSZXF1ZXN0LFxyXG4gICAgICBzY29wZXMsXHJcbiAgICAgIHJlZGlyZWN0U3RhcnRQYWdlLFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gRU1QVFk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb29rcyB1cCB0aGUgc2NvcGVzIGZvciB0aGUgZ2l2ZW4gZW5kcG9pbnQgZnJvbSB0aGUgcHJvdGVjdGVkUmVzb3VyY2VNYXBcclxuICAgKiBAcGFyYW0gZW5kcG9pbnQgVXJsIG9mIHRoZSByZXF1ZXN0XHJcbiAgICogQHBhcmFtIGh0dHBNZXRob2QgSHR0cCBtZXRob2Qgb2YgdGhlIHJlcXVlc3RcclxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBzY29wZXMsIG9yIG51bGwgaWYgbm90IGZvdW5kXHJcbiAgICpcclxuICAgKi9cclxuICBwcml2YXRlIGdldFNjb3Blc0ZvckVuZHBvaW50KFxyXG4gICAgZW5kcG9pbnQ6IHN0cmluZyxcclxuICAgIGh0dHBNZXRob2Q6IHN0cmluZ1xyXG4gICk6IEFycmF5PHN0cmluZz4gfCBudWxsIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2VcclxuICAgICAgLmdldExvZ2dlcigpXHJcbiAgICAgIC52ZXJib3NlKCdJbnRlcmNlcHRvciAtIGdldHRpbmcgc2NvcGVzIGZvciBlbmRwb2ludCcpO1xyXG5cclxuICAgIC8vIEVuc3VyZXMgZW5kcG9pbnRzIGFuZCBwcm90ZWN0ZWQgcmVzb3VyY2VzIGNvbXBhcmVkIGFyZSBub3JtYWxpemVkXHJcbiAgICBjb25zdCBub3JtYWxpemVkRW5kcG9pbnQgPSB0aGlzLmxvY2F0aW9uLm5vcm1hbGl6ZShlbmRwb2ludCk7XHJcblxyXG4gICAgY29uc3QgcHJvdGVjdGVkUmVzb3VyY2VzQXJyYXkgPSBBcnJheS5mcm9tKFxyXG4gICAgICB0aGlzLm1zYWxJbnRlcmNlcHRvckNvbmZpZy5wcm90ZWN0ZWRSZXNvdXJjZU1hcC5rZXlzKClcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbWF0Y2hpbmdQcm90ZWN0ZWRSZXNvdXJjZXMgPSB0aGlzLm1hdGNoUmVzb3VyY2VzVG9FbmRwb2ludChcclxuICAgICAgcHJvdGVjdGVkUmVzb3VyY2VzQXJyYXksXHJcbiAgICAgIG5vcm1hbGl6ZWRFbmRwb2ludFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBDaGVjayBhYnNvbHV0ZSB1cmxzIG9mIHJlc291cmNlcyBmaXJzdCBiZWZvcmUgY2hlY2tpbmcgcmVsYXRpdmUgdG8gcHJldmVudCBpbmNvcnJlY3QgbWF0Y2hpbmcgd2hlcmUgbXVsdGlwbGUgcmVzb3VyY2VzIGhhdmUgc2ltaWxhciByZWxhdGl2ZSB1cmxzXHJcbiAgICBpZiAobWF0Y2hpbmdQcm90ZWN0ZWRSZXNvdXJjZXMuYWJzb2x1dGVSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5tYXRjaFNjb3Blc1RvRW5kcG9pbnQoXHJcbiAgICAgICAgdGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcucHJvdGVjdGVkUmVzb3VyY2VNYXAsXHJcbiAgICAgICAgbWF0Y2hpbmdQcm90ZWN0ZWRSZXNvdXJjZXMuYWJzb2x1dGVSZXNvdXJjZXMsXHJcbiAgICAgICAgaHR0cE1ldGhvZFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChtYXRjaGluZ1Byb3RlY3RlZFJlc291cmNlcy5yZWxhdGl2ZVJlc291cmNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1hdGNoU2NvcGVzVG9FbmRwb2ludChcclxuICAgICAgICB0aGlzLm1zYWxJbnRlcmNlcHRvckNvbmZpZy5wcm90ZWN0ZWRSZXNvdXJjZU1hcCxcclxuICAgICAgICBtYXRjaGluZ1Byb3RlY3RlZFJlc291cmNlcy5yZWxhdGl2ZVJlc291cmNlcyxcclxuICAgICAgICBodHRwTWV0aG9kXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaW5kcyByZXNvdXJjZSBlbmRwb2ludHMgdGhhdCBtYXRjaCByZXF1ZXN0IGVuZHBvaW50XHJcbiAgICogQHBhcmFtIHByb3RlY3RlZFJlc291cmNlc0VuZHBvaW50c1xyXG4gICAqIEBwYXJhbSBlbmRwb2ludFxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtYXRjaFJlc291cmNlc1RvRW5kcG9pbnQoXHJcbiAgICBwcm90ZWN0ZWRSZXNvdXJjZXNFbmRwb2ludHM6IHN0cmluZ1tdLFxyXG4gICAgZW5kcG9pbnQ6IHN0cmluZ1xyXG4gICk6IE1hdGNoaW5nUmVzb3VyY2VzIHtcclxuICAgIGNvbnN0IG1hdGNoaW5nUmVzb3VyY2VzOiBNYXRjaGluZ1Jlc291cmNlcyA9IHtcclxuICAgICAgYWJzb2x1dGVSZXNvdXJjZXM6IFtdLFxyXG4gICAgICByZWxhdGl2ZVJlc291cmNlczogW10sXHJcbiAgICB9O1xyXG5cclxuICAgIHByb3RlY3RlZFJlc291cmNlc0VuZHBvaW50cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgLy8gTm9ybWFsaXplcyBhbmQgYWRkcyByZXNvdXJjZSB0byBtYXRjaGluZ1Jlc291cmNlcy5hYnNvbHV0ZVJlc291cmNlcyBpZiBrZXkgbWF0Y2hlcyBlbmRwb2ludC4gU3RyaW5nVXRpbHMubWF0Y2hQYXR0ZXJuIGFjY291bnRzIGZvciB3aWxkY2FyZHNcclxuICAgICAgY29uc3Qgbm9ybWFsaXplZEtleSA9IHRoaXMubG9jYXRpb24ubm9ybWFsaXplKGtleSk7XHJcbiAgICAgIGlmIChTdHJpbmdVdGlscy5tYXRjaFBhdHRlcm4obm9ybWFsaXplZEtleSwgZW5kcG9pbnQpKSB7XHJcbiAgICAgICAgbWF0Y2hpbmdSZXNvdXJjZXMuYWJzb2x1dGVSZXNvdXJjZXMucHVzaChrZXkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBHZXQgdXJsIGNvbXBvbmVudHMgZm9yIHJlbGF0aXZlIHVybHNcclxuICAgICAgY29uc3QgYWJzb2x1dGVLZXkgPSB0aGlzLmdldEFic29sdXRlVXJsKGtleSk7XHJcbiAgICAgIGNvbnN0IGtleUNvbXBvbmVudHMgPSBuZXcgVXJsU3RyaW5nKGFic29sdXRlS2V5KS5nZXRVcmxDb21wb25lbnRzKCk7XHJcbiAgICAgIGNvbnN0IGFic29sdXRlRW5kcG9pbnQgPSB0aGlzLmdldEFic29sdXRlVXJsKGVuZHBvaW50KTtcclxuICAgICAgY29uc3QgZW5kcG9pbnRDb21wb25lbnRzID0gbmV3IFVybFN0cmluZyhcclxuICAgICAgICBhYnNvbHV0ZUVuZHBvaW50XHJcbiAgICAgICkuZ2V0VXJsQ29tcG9uZW50cygpO1xyXG5cclxuICAgICAgLy8gTm9ybWFsaXplZCBrZXkgc2hvdWxkIGluY2x1ZGUgcXVlcnkgc3RyaW5ncyBpZiBhcHBsaWNhYmxlXHJcbiAgICAgIGNvbnN0IHJlbGF0aXZlTm9ybWFsaXplZEtleSA9IGtleUNvbXBvbmVudHMuUXVlcnlTdHJpbmdcclxuICAgICAgICA/IGAke2tleUNvbXBvbmVudHMuQWJzb2x1dGVQYXRofT8ke2tleUNvbXBvbmVudHMuUXVlcnlTdHJpbmd9YFxyXG4gICAgICAgIDogdGhpcy5sb2NhdGlvbi5ub3JtYWxpemUoa2V5Q29tcG9uZW50cy5BYnNvbHV0ZVBhdGgpO1xyXG5cclxuICAgICAgLy8gQWRkIHJlc291cmNlIHRvIG1hdGNoaW5nUmVzb3VyY2VzLnJlbGF0aXZlUmVzb3VyY2VzIGlmIHNhbWUgb3JpZ2luLCByZWxhdGl2ZUtleSBtYXRjaGVzIGVuZHBvaW50LCBhbmQgaXMgbm90IGVtcHR5XHJcbiAgICAgIGlmIChcclxuICAgICAgICBrZXlDb21wb25lbnRzLkhvc3ROYW1lQW5kUG9ydCA9PT0gZW5kcG9pbnRDb21wb25lbnRzLkhvc3ROYW1lQW5kUG9ydCAmJlxyXG4gICAgICAgIFN0cmluZ1V0aWxzLm1hdGNoUGF0dGVybihyZWxhdGl2ZU5vcm1hbGl6ZWRLZXksIGFic29sdXRlRW5kcG9pbnQpICYmXHJcbiAgICAgICAgcmVsYXRpdmVOb3JtYWxpemVkS2V5ICE9PSAnJyAmJlxyXG4gICAgICAgIHJlbGF0aXZlTm9ybWFsaXplZEtleSAhPT0gJy8qJ1xyXG4gICAgICApIHtcclxuICAgICAgICBtYXRjaGluZ1Jlc291cmNlcy5yZWxhdGl2ZVJlc291cmNlcy5wdXNoKGtleSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBtYXRjaGluZ1Jlc291cmNlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYW5zZm9ybXMgcmVsYXRpdmUgdXJscyB0byBhYnNvbHV0ZSB1cmxzXHJcbiAgICogQHBhcmFtIHVybFxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRBYnNvbHV0ZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsaW5rID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgbGluay5ocmVmID0gdXJsO1xyXG4gICAgcmV0dXJuIGxpbmsuaHJlZjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbmRzIHNjb3BlcyBmcm9tIGZpcnN0IG1hdGNoaW5nIGVuZHBvaW50IHdpdGggSFRUUCBtZXRob2QgdGhhdCBtYXRjaGVzIHJlcXVlc3RcclxuICAgKiBAcGFyYW0gcHJvdGVjdGVkUmVzb3VyY2VNYXAgUHJvdGVjdGVkIHJlc291cmNlIG1hcFxyXG4gICAqIEBwYXJhbSBlbmRwb2ludEFycmF5IEFycmF5IG9mIHJlc291cmNlcyB0aGF0IG1hdGNoIHJlcXVlc3QgZW5kcG9pbnRcclxuICAgKiBAcGFyYW0gaHR0cE1ldGhvZCBIdHRwIG1ldGhvZCBvZiB0aGUgcmVxdWVzdFxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtYXRjaFNjb3Blc1RvRW5kcG9pbnQoXHJcbiAgICBwcm90ZWN0ZWRSZXNvdXJjZU1hcDogTWFwPFxyXG4gICAgICBzdHJpbmcsXHJcbiAgICAgIEFycmF5PHN0cmluZyB8IFByb3RlY3RlZFJlc291cmNlU2NvcGVzPiB8IG51bGxcclxuICAgID4sXHJcbiAgICBlbmRwb2ludEFycmF5OiBzdHJpbmdbXSxcclxuICAgIGh0dHBNZXRob2Q6IHN0cmluZ1xyXG4gICk6IEFycmF5PHN0cmluZz4gfCBudWxsIHtcclxuICAgIGNvbnN0IGFsbE1hdGNoZWRTY29wZXMgPSBbXTtcclxuXHJcbiAgICAvLyBDaGVjayBlYWNoIG1hdGNoZWQgZW5kcG9pbnQgZm9yIG1hdGNoaW5nIEh0dHBNZXRob2QgYW5kIHNjb3Blc1xyXG4gICAgZW5kcG9pbnRBcnJheS5mb3JFYWNoKChtYXRjaGVkRW5kcG9pbnQpID0+IHtcclxuICAgICAgY29uc3Qgc2NvcGVzRm9yRW5kcG9pbnQgPSBbXTtcclxuICAgICAgY29uc3QgbWV0aG9kQW5kU2NvcGVzQXJyYXkgPSBwcm90ZWN0ZWRSZXNvdXJjZU1hcC5nZXQobWF0Y2hlZEVuZHBvaW50KTtcclxuXHJcbiAgICAgIC8vIFJldHVybiBpZiByZXNvdXJjZSBpcyB1bnByb3RlY3RlZFxyXG4gICAgICBpZiAobWV0aG9kQW5kU2NvcGVzQXJyYXkgPT09IG51bGwpIHtcclxuICAgICAgICBhbGxNYXRjaGVkU2NvcGVzLnB1c2gobnVsbCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBtZXRob2RBbmRTY29wZXNBcnJheS5mb3JFYWNoKChlbnRyeSkgPT4ge1xyXG4gICAgICAgIC8vIEVudHJ5IGlzIGVpdGhlciBhcnJheSBvZiBzY29wZXMgb3IgUHJvdGVjdGVkUmVzb3VyY2VTY29wZXMgb2JqZWN0XHJcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIHNjb3Blc0ZvckVuZHBvaW50LnB1c2goZW50cnkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBFbnN1cmUgbWV0aG9kcyBiZWluZyBjb21wYXJlZCBhcmUgbm9ybWFsaXplZFxyXG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlcXVlc3RNZXRob2QgPSBodHRwTWV0aG9kLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUmVzb3VyY2VNZXRob2QgPSBlbnRyeS5odHRwTWV0aG9kLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAvLyBNZXRob2QgaW4gcHJvdGVjdGVkUmVzb3VyY2VNYXAgbWF0Y2hlcyByZXF1ZXN0IGh0dHAgbWV0aG9kXHJcbiAgICAgICAgICBpZiAobm9ybWFsaXplZFJlc291cmNlTWV0aG9kID09PSBub3JtYWxpemVkUmVxdWVzdE1ldGhvZCkge1xyXG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSBpZiBzY29wZXMgY29tZXMgbnVsbCB0byB1bnByb3RlY3QgdGhlIHJlc291cmNlIGluIGEgY2VydGFpbiBodHRwIG1ldGhvZFxyXG4gICAgICAgICAgICBpZiAoZW50cnkuc2NvcGVzID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgYWxsTWF0Y2hlZFNjb3Blcy5wdXNoKG51bGwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGVudHJ5LnNjb3Blcy5mb3JFYWNoKChzY29wZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2NvcGVzRm9yRW5kcG9pbnQucHVzaChzY29wZSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gT25seSBhZGQgdG8gYWxsIHNjb3BlcyBpZiBzY29wZXMgZm9yIGVuZHBvaW50IGFuZCBtZXRob2QgaXMgZm91bmRcclxuICAgICAgaWYgKHNjb3Blc0ZvckVuZHBvaW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBhbGxNYXRjaGVkU2NvcGVzLnB1c2goc2NvcGVzRm9yRW5kcG9pbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoYWxsTWF0Y2hlZFNjb3Blcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmIChhbGxNYXRjaGVkU2NvcGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXHJcbiAgICAgICAgICAuZ2V0TG9nZ2VyKClcclxuICAgICAgICAgIC53YXJuaW5nKFxyXG4gICAgICAgICAgICAnSW50ZXJjZXB0b3IgLSBNb3JlIHRoYW4gMSBtYXRjaGluZyBzY29wZXMgZm9yIGVuZHBvaW50IGZvdW5kLidcclxuICAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gUmV0dXJucyBzY29wZXMgZm9yIGZpcnN0IG1hdGNoaW5nIGVuZHBvaW50XHJcbiAgICAgIHJldHVybiBhbGxNYXRjaGVkU2NvcGVzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,46 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { NgModule } from '@angular/core';
6
+ import { CommonModule } from '@angular/common';
7
+ import { MsalBroadcastService } from './msal.broadcast.service';
8
+ import { MsalGuard } from './msal.guard';
9
+ import { MsalRedirectComponent } from './msal.redirect.component';
10
+ import { MsalService } from './msal.service';
11
+ import { MSAL_INSTANCE, MSAL_GUARD_CONFIG, MSAL_INTERCEPTOR_CONFIG, } from './constants';
12
+ import * as i0 from "@angular/core";
13
+ export class MsalModule {
14
+ static forRoot(msalInstance, guardConfig, interceptorConfig) {
15
+ return {
16
+ ngModule: MsalModule,
17
+ providers: [
18
+ {
19
+ provide: MSAL_INSTANCE,
20
+ useValue: msalInstance,
21
+ },
22
+ {
23
+ provide: MSAL_GUARD_CONFIG,
24
+ useValue: guardConfig,
25
+ },
26
+ {
27
+ provide: MSAL_INTERCEPTOR_CONFIG,
28
+ useValue: interceptorConfig,
29
+ },
30
+ MsalService,
31
+ ],
32
+ };
33
+ }
34
+ }
35
+ MsalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
36
+ MsalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.7", ngImport: i0, type: MsalModule, declarations: [MsalRedirectComponent], imports: [CommonModule] });
37
+ MsalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalModule, providers: [MsalGuard, MsalBroadcastService], imports: [CommonModule] });
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalModule, decorators: [{
39
+ type: NgModule,
40
+ args: [{
41
+ declarations: [MsalRedirectComponent],
42
+ imports: [CommonModule],
43
+ providers: [MsalGuard, MsalBroadcastService],
44
+ }]
45
+ }] });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbXNhbC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLHVCQUF1QixHQUN4QixNQUFNLGFBQWEsQ0FBQzs7QUFPckIsTUFBTSxPQUFPLFVBQVU7SUFDckIsTUFBTSxDQUFDLE9BQU8sQ0FDWixZQUFzQyxFQUN0QyxXQUFtQyxFQUNuQyxpQkFBK0M7UUFFL0MsT0FBTztZQUNMLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxPQUFPLEVBQUUsYUFBYTtvQkFDdEIsUUFBUSxFQUFFLFlBQVk7aUJBQ3ZCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFFBQVEsRUFBRSxXQUFXO2lCQUN0QjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsdUJBQXVCO29CQUNoQyxRQUFRLEVBQUUsaUJBQWlCO2lCQUM1QjtnQkFDRCxXQUFXO2FBQ1o7U0FDRixDQUFDO0lBQ0osQ0FBQzs7dUdBeEJVLFVBQVU7d0dBQVYsVUFBVSxpQkFKTixxQkFBcUIsYUFDMUIsWUFBWTt3R0FHWCxVQUFVLGFBRlYsQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUMsWUFEbEMsWUFBWTsyRkFHWCxVQUFVO2tCQUx0QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNyQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQztpQkFDN0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IElQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiB9IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBNc2FsQnJvYWRjYXN0U2VydmljZSB9IGZyb20gJy4vbXNhbC5icm9hZGNhc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IE1zYWxHdWFyZCB9IGZyb20gJy4vbXNhbC5ndWFyZCc7XHJcbmltcG9ydCB7IE1zYWxHdWFyZENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL21zYWwuZ3VhcmQuY29uZmlnJztcclxuaW1wb3J0IHsgTXNhbEludGVyY2VwdG9yQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vbXNhbC5pbnRlcmNlcHRvci5jb25maWcnO1xyXG5pbXBvcnQgeyBNc2FsUmVkaXJlY3RDb21wb25lbnQgfSBmcm9tICcuL21zYWwucmVkaXJlY3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICcuL21zYWwuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgTVNBTF9JTlNUQU5DRSxcclxuICBNU0FMX0dVQVJEX0NPTkZJRyxcclxuICBNU0FMX0lOVEVSQ0VQVE9SX0NPTkZJRyxcclxufSBmcm9tICcuL2NvbnN0YW50cyc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW01zYWxSZWRpcmVjdENvbXBvbmVudF0sXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgcHJvdmlkZXJzOiBbTXNhbEd1YXJkLCBNc2FsQnJvYWRjYXN0U2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNc2FsTW9kdWxlIHtcclxuICBzdGF0aWMgZm9yUm9vdChcclxuICAgIG1zYWxJbnN0YW5jZTogSVB1YmxpY0NsaWVudEFwcGxpY2F0aW9uLFxyXG4gICAgZ3VhcmRDb25maWc6IE1zYWxHdWFyZENvbmZpZ3VyYXRpb24sXHJcbiAgICBpbnRlcmNlcHRvckNvbmZpZzogTXNhbEludGVyY2VwdG9yQ29uZmlndXJhdGlvblxyXG4gICk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TXNhbE1vZHVsZT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IE1zYWxNb2R1bGUsXHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHByb3ZpZGU6IE1TQUxfSU5TVEFOQ0UsXHJcbiAgICAgICAgICB1c2VWYWx1ZTogbXNhbEluc3RhbmNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcHJvdmlkZTogTVNBTF9HVUFSRF9DT05GSUcsXHJcbiAgICAgICAgICB1c2VWYWx1ZTogZ3VhcmRDb25maWcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwcm92aWRlOiBNU0FMX0lOVEVSQ0VQVE9SX0NPTkZJRyxcclxuICAgICAgICAgIHVzZVZhbHVlOiBpbnRlcmNlcHRvckNvbmZpZyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIE1zYWxTZXJ2aWNlLFxyXG4gICAgICBdLFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,51 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { Injectable } from '@angular/core';
6
+ import { NavigationClient, UrlString, } from '@azure/msal-browser';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "./msal.service";
9
+ import * as i2 from "@angular/router";
10
+ import * as i3 from "@angular/common";
11
+ /**
12
+ * Custom navigation used for Angular client-side navigation.
13
+ * See performance doc for details:
14
+ * https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/v2-docs/performance.md
15
+ */
16
+ export class MsalCustomNavigationClient extends NavigationClient {
17
+ constructor(authService, router, location) {
18
+ super();
19
+ this.authService = authService;
20
+ this.router = router;
21
+ this.location = location;
22
+ }
23
+ async navigateInternal(url, options) {
24
+ this.authService.getLogger().trace('MsalCustomNavigationClient called');
25
+ this.authService
26
+ .getLogger()
27
+ .verbose('MsalCustomNavigationClient - navigating');
28
+ this.authService
29
+ .getLogger()
30
+ .verbosePii(`MsalCustomNavigationClient - navigating to url: ${url}`);
31
+ // Prevent hash clearing from causing an issue with Client-side navigation after redirect is handled
32
+ if (options.noHistory) {
33
+ return super.navigateInternal(url, options);
34
+ }
35
+ else {
36
+ // Normalizing newUrl if no query string
37
+ const urlComponents = new UrlString(url).getUrlComponents();
38
+ const newUrl = urlComponents.QueryString
39
+ ? `${urlComponents.AbsolutePath}?${urlComponents.QueryString}`
40
+ : this.location.normalize(urlComponents.AbsolutePath);
41
+ this.router.navigateByUrl(newUrl, { replaceUrl: options.noHistory });
42
+ }
43
+ return Promise.resolve(options.noHistory);
44
+ }
45
+ }
46
+ MsalCustomNavigationClient.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalCustomNavigationClient, deps: [{ token: i1.MsalService }, { token: i2.Router }, { token: i3.Location }], target: i0.ɵɵFactoryTarget.Injectable });
47
+ MsalCustomNavigationClient.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalCustomNavigationClient });
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalCustomNavigationClient, decorators: [{
49
+ type: Injectable
50
+ }], ctorParameters: function () { return [{ type: i1.MsalService }, { type: i2.Router }, { type: i3.Location }]; } });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5uYXZpZ2F0aW9uLmNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tc2FsLm5hdmlnYXRpb24uY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixTQUFTLEdBQ1YsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFHN0I7Ozs7R0FJRztBQUVILE1BQU0sT0FBTywwQkFBMkIsU0FBUSxnQkFBZ0I7SUFDOUQsWUFDVSxXQUF3QixFQUN4QixNQUFjLEVBQ2QsUUFBa0I7UUFFMUIsS0FBSyxFQUFFLENBQUM7UUFKQSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUc1QixDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUNwQixHQUFXLEVBQ1gsT0FBMEI7UUFFMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUV4RSxJQUFJLENBQUMsV0FBVzthQUNiLFNBQVMsRUFBRTthQUNYLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXO2FBQ2IsU0FBUyxFQUFFO2FBQ1gsVUFBVSxDQUFDLG1EQUFtRCxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXhFLG9HQUFvRztRQUNwRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDckIsT0FBTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzdDO2FBQU07WUFDTCx3Q0FBd0M7WUFDeEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM1RCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsV0FBVztnQkFDdEMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUMsV0FBVyxFQUFFO2dCQUM5RCxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUN0RTtRQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7dUhBbENVLDBCQUEwQjsySEFBMUIsMEJBQTBCOzJGQUExQiwwQkFBMEI7a0JBRHRDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1xyXG4gIE5hdmlnYXRpb25DbGllbnQsXHJcbiAgTmF2aWdhdGlvbk9wdGlvbnMsXHJcbiAgVXJsU3RyaW5nLFxyXG59IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBNc2FsU2VydmljZSB9IGZyb20gJy4vbXNhbC5zZXJ2aWNlJztcclxuXHJcbi8qKlxyXG4gKiBDdXN0b20gbmF2aWdhdGlvbiB1c2VkIGZvciBBbmd1bGFyIGNsaWVudC1zaWRlIG5hdmlnYXRpb24uXHJcbiAqIFNlZSBwZXJmb3JtYW5jZSBkb2MgZm9yIGRldGFpbHM6XHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9BenVyZUFEL21pY3Jvc29mdC1hdXRoZW50aWNhdGlvbi1saWJyYXJ5LWZvci1qcy90cmVlL2Rldi9saWIvbXNhbC1hbmd1bGFyL2RvY3MvdjItZG9jcy9wZXJmb3JtYW5jZS5tZFxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTXNhbEN1c3RvbU5hdmlnYXRpb25DbGllbnQgZXh0ZW5kcyBOYXZpZ2F0aW9uQ2xpZW50IHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmF2aWdhdGVJbnRlcm5hbChcclxuICAgIHVybDogc3RyaW5nLFxyXG4gICAgb3B0aW9uczogTmF2aWdhdGlvbk9wdGlvbnNcclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkudHJhY2UoJ01zYWxDdXN0b21OYXZpZ2F0aW9uQ2xpZW50IGNhbGxlZCcpO1xyXG5cclxuICAgIHRoaXMuYXV0aFNlcnZpY2VcclxuICAgICAgLmdldExvZ2dlcigpXHJcbiAgICAgIC52ZXJib3NlKCdNc2FsQ3VzdG9tTmF2aWdhdGlvbkNsaWVudCAtIG5hdmlnYXRpbmcnKTtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2VcclxuICAgICAgLmdldExvZ2dlcigpXHJcbiAgICAgIC52ZXJib3NlUGlpKGBNc2FsQ3VzdG9tTmF2aWdhdGlvbkNsaWVudCAtIG5hdmlnYXRpbmcgdG8gdXJsOiAke3VybH1gKTtcclxuXHJcbiAgICAvLyBQcmV2ZW50IGhhc2ggY2xlYXJpbmcgZnJvbSBjYXVzaW5nIGFuIGlzc3VlIHdpdGggQ2xpZW50LXNpZGUgbmF2aWdhdGlvbiBhZnRlciByZWRpcmVjdCBpcyBoYW5kbGVkXHJcbiAgICBpZiAob3B0aW9ucy5ub0hpc3RvcnkpIHtcclxuICAgICAgcmV0dXJuIHN1cGVyLm5hdmlnYXRlSW50ZXJuYWwodXJsLCBvcHRpb25zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE5vcm1hbGl6aW5nIG5ld1VybCBpZiBubyBxdWVyeSBzdHJpbmdcclxuICAgICAgY29uc3QgdXJsQ29tcG9uZW50cyA9IG5ldyBVcmxTdHJpbmcodXJsKS5nZXRVcmxDb21wb25lbnRzKCk7XHJcbiAgICAgIGNvbnN0IG5ld1VybCA9IHVybENvbXBvbmVudHMuUXVlcnlTdHJpbmdcclxuICAgICAgICA/IGAke3VybENvbXBvbmVudHMuQWJzb2x1dGVQYXRofT8ke3VybENvbXBvbmVudHMuUXVlcnlTdHJpbmd9YFxyXG4gICAgICAgIDogdGhpcy5sb2NhdGlvbi5ub3JtYWxpemUodXJsQ29tcG9uZW50cy5BYnNvbHV0ZVBhdGgpO1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKG5ld1VybCwgeyByZXBsYWNlVXJsOiBvcHRpb25zLm5vSGlzdG9yeSB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUob3B0aW9ucy5ub0hpc3RvcnkpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,31 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ /**
6
+ * This is a dedicated redirect component to be added to Angular apps to
7
+ * handle redirects when using @azure/msal-angular.
8
+ * Import this component to use redirects in your app.
9
+ */
10
+ import { Component } from '@angular/core';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "./msal.service";
13
+ export class MsalRedirectComponent {
14
+ constructor(authService) {
15
+ this.authService = authService;
16
+ }
17
+ ngOnInit() {
18
+ this.authService.getLogger().verbose('MsalRedirectComponent activated');
19
+ this.authService.handleRedirectObservable().subscribe();
20
+ }
21
+ }
22
+ MsalRedirectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalRedirectComponent, deps: [{ token: i1.MsalService }], target: i0.ɵɵFactoryTarget.Component });
23
+ MsalRedirectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: MsalRedirectComponent, selector: "app-redirect", ngImport: i0, template: '', isInline: true });
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalRedirectComponent, decorators: [{
25
+ type: Component,
26
+ args: [{
27
+ selector: 'app-redirect',
28
+ template: '',
29
+ }]
30
+ }], ctorParameters: function () { return [{ type: i1.MsalService }]; } });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5yZWRpcmVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbXNhbC5yZWRpcmVjdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUg7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7OztBQU9sRCxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUcsQ0FBQztJQUVoRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDMUQsQ0FBQzs7a0hBTlUscUJBQXFCO3NHQUFyQixxQkFBcUIsb0RBRnRCLEVBQUU7MkZBRUQscUJBQXFCO2tCQUpqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO29CQUN4QixRQUFRLEVBQUUsRUFBRTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgaXMgYSBkZWRpY2F0ZWQgcmVkaXJlY3QgY29tcG9uZW50IHRvIGJlIGFkZGVkIHRvIEFuZ3VsYXIgYXBwcyB0b1xyXG4gKiBoYW5kbGUgcmVkaXJlY3RzIHdoZW4gdXNpbmcgQGF6dXJlL21zYWwtYW5ndWxhci5cclxuICogSW1wb3J0IHRoaXMgY29tcG9uZW50IHRvIHVzZSByZWRpcmVjdHMgaW4geW91ciBhcHAuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICcuL21zYWwuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1yZWRpcmVjdCcsXHJcbiAgdGVtcGxhdGU6ICcnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTXNhbFJlZGlyZWN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBNc2FsU2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldExvZ2dlcigpLnZlcmJvc2UoJ01zYWxSZWRpcmVjdENvbXBvbmVudCBhY3RpdmF0ZWQnKTtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuaGFuZGxlUmVkaXJlY3RPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,81 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { Inject, Injectable } from '@angular/core';
6
+ import { WrapperSKU, } from '@azure/msal-browser';
7
+ import { from } from 'rxjs';
8
+ import { name, version } from './packageMetadata';
9
+ import { MSAL_INSTANCE } from './constants';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/common";
12
+ export class MsalService {
13
+ constructor(instance, location) {
14
+ this.instance = instance;
15
+ this.location = location;
16
+ const hash = this.location.path(true).split('#').pop();
17
+ if (hash) {
18
+ this.redirectHash = `#${hash}`;
19
+ }
20
+ this.instance.initializeWrapperLibrary(WrapperSKU.Angular, version);
21
+ }
22
+ initialize() {
23
+ return from(this.instance.initialize());
24
+ }
25
+ acquireTokenPopup(request) {
26
+ return from(this.instance.acquireTokenPopup(request));
27
+ }
28
+ acquireTokenRedirect(request) {
29
+ return from(this.instance.acquireTokenRedirect(request));
30
+ }
31
+ acquireTokenSilent(silentRequest) {
32
+ return from(this.instance.acquireTokenSilent(silentRequest));
33
+ }
34
+ handleRedirectObservable(hash) {
35
+ return from(this.instance
36
+ .initialize()
37
+ .then(() => this.instance.handleRedirectPromise(hash || this.redirectHash)));
38
+ }
39
+ loginPopup(request) {
40
+ return from(this.instance.loginPopup(request));
41
+ }
42
+ loginRedirect(request) {
43
+ return from(this.instance.loginRedirect(request));
44
+ }
45
+ logout(logoutRequest) {
46
+ return from(this.instance.logout(logoutRequest));
47
+ }
48
+ logoutRedirect(logoutRequest) {
49
+ return from(this.instance.logoutRedirect(logoutRequest));
50
+ }
51
+ logoutPopup(logoutRequest) {
52
+ return from(this.instance.logoutPopup(logoutRequest));
53
+ }
54
+ ssoSilent(request) {
55
+ return from(this.instance.ssoSilent(request));
56
+ }
57
+ /**
58
+ * Gets logger for msal-angular.
59
+ * If no logger set, returns logger instance created with same options as msal-browser
60
+ */
61
+ getLogger() {
62
+ if (!this.logger) {
63
+ this.logger = this.instance.getLogger().clone(name, version);
64
+ }
65
+ return this.logger;
66
+ }
67
+ // Create a logger instance for msal-angular with the same options as msal-browser
68
+ setLogger(logger) {
69
+ this.logger = logger.clone(name, version);
70
+ this.instance.setLogger(logger);
71
+ }
72
+ }
73
+ MsalService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalService, deps: [{ token: MSAL_INSTANCE }, { token: i1.Location }], target: i0.ɵɵFactoryTarget.Injectable });
74
+ MsalService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalService });
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalService, decorators: [{
76
+ type: Injectable
77
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
78
+ type: Inject,
79
+ args: [MSAL_INSTANCE]
80
+ }] }, { type: i1.Location }]; } });
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21zYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBVUwsVUFBVSxHQUNYLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV4QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7OztBQUc1QyxNQUFNLE9BQU8sV0FBVztJQUl0QixZQUNnQyxRQUFrQyxFQUN4RCxRQUFrQjtRQURJLGFBQVEsR0FBUixRQUFRLENBQTBCO1FBQ3hELGFBQVEsR0FBUixRQUFRLENBQVU7UUFFMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZELElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxPQUFxQjtRQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELG9CQUFvQixDQUFDLE9BQXdCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0Qsa0JBQWtCLENBQ2hCLGFBQTRCO1FBRTVCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ0Qsd0JBQXdCLENBQUMsSUFBYTtRQUNwQyxPQUFPLElBQUksQ0FDVCxJQUFJLENBQUMsUUFBUTthQUNWLFVBQVUsRUFBRTthQUNaLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FDVCxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQy9ELENBQ0osQ0FBQztJQUNKLENBQUM7SUFDRCxVQUFVLENBQUMsT0FBc0I7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQ0QsYUFBYSxDQUFDLE9BQXlCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNELE1BQU0sQ0FBQyxhQUFpQztRQUN0QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxjQUFjLENBQUMsYUFBaUM7UUFDOUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0QsV0FBVyxDQUFDLGFBQXNDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELFNBQVMsQ0FBQyxPQUF5QjtRQUNqQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRDs7O09BR0c7SUFDSCxTQUFTO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELGtGQUFrRjtJQUNsRixTQUFTLENBQUMsTUFBYztRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7O3dHQXRFVSxXQUFXLGtCQUtaLGFBQWE7NEdBTFosV0FBVzsyRkFBWCxXQUFXO2tCQUR2QixVQUFVOzswQkFNTixNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgSVB1YmxpY0NsaWVudEFwcGxpY2F0aW9uLFxyXG4gIEVuZFNlc3Npb25SZXF1ZXN0LFxyXG4gIEVuZFNlc3Npb25Qb3B1cFJlcXVlc3QsXHJcbiAgQXV0aGVudGljYXRpb25SZXN1bHQsXHJcbiAgUmVkaXJlY3RSZXF1ZXN0LFxyXG4gIFNpbGVudFJlcXVlc3QsXHJcbiAgUG9wdXBSZXF1ZXN0LFxyXG4gIFNzb1NpbGVudFJlcXVlc3QsXHJcbiAgTG9nZ2VyLFxyXG4gIFdyYXBwZXJTS1UsXHJcbn0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSU1zYWxTZXJ2aWNlIH0gZnJvbSAnLi9JTXNhbFNlcnZpY2UnO1xyXG5pbXBvcnQgeyBuYW1lLCB2ZXJzaW9uIH0gZnJvbSAnLi9wYWNrYWdlTWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBNU0FMX0lOU1RBTkNFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTXNhbFNlcnZpY2UgaW1wbGVtZW50cyBJTXNhbFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVkaXJlY3RIYXNoOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1TQUxfSU5TVEFOQ0UpIHB1YmxpYyBpbnN0YW5jZTogSVB1YmxpY0NsaWVudEFwcGxpY2F0aW9uLFxyXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb25cclxuICApIHtcclxuICAgIGNvbnN0IGhhc2ggPSB0aGlzLmxvY2F0aW9uLnBhdGgodHJ1ZSkuc3BsaXQoJyMnKS5wb3AoKTtcclxuICAgIGlmIChoYXNoKSB7XHJcbiAgICAgIHRoaXMucmVkaXJlY3RIYXNoID0gYCMke2hhc2h9YDtcclxuICAgIH1cclxuICAgIHRoaXMuaW5zdGFuY2UuaW5pdGlhbGl6ZVdyYXBwZXJMaWJyYXJ5KFdyYXBwZXJTS1UuQW5ndWxhciwgdmVyc2lvbik7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGZyb20odGhpcy5pbnN0YW5jZS5pbml0aWFsaXplKCkpO1xyXG4gIH1cclxuICBhY3F1aXJlVG9rZW5Qb3B1cChyZXF1ZXN0OiBQb3B1cFJlcXVlc3QpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0aW9uUmVzdWx0PiB7XHJcbiAgICByZXR1cm4gZnJvbSh0aGlzLmluc3RhbmNlLmFjcXVpcmVUb2tlblBvcHVwKHJlcXVlc3QpKTtcclxuICB9XHJcbiAgYWNxdWlyZVRva2VuUmVkaXJlY3QocmVxdWVzdDogUmVkaXJlY3RSZXF1ZXN0KTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gZnJvbSh0aGlzLmluc3RhbmNlLmFjcXVpcmVUb2tlblJlZGlyZWN0KHJlcXVlc3QpKTtcclxuICB9XHJcbiAgYWNxdWlyZVRva2VuU2lsZW50KFxyXG4gICAgc2lsZW50UmVxdWVzdDogU2lsZW50UmVxdWVzdFxyXG4gICk6IE9ic2VydmFibGU8QXV0aGVudGljYXRpb25SZXN1bHQ+IHtcclxuICAgIHJldHVybiBmcm9tKHRoaXMuaW5zdGFuY2UuYWNxdWlyZVRva2VuU2lsZW50KHNpbGVudFJlcXVlc3QpKTtcclxuICB9XHJcbiAgaGFuZGxlUmVkaXJlY3RPYnNlcnZhYmxlKGhhc2g/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0aW9uUmVzdWx0PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5pbnN0YW5jZVxyXG4gICAgICAgIC5pbml0aWFsaXplKClcclxuICAgICAgICAudGhlbigoKSA9PlxyXG4gICAgICAgICAgdGhpcy5pbnN0YW5jZS5oYW5kbGVSZWRpcmVjdFByb21pc2UoaGFzaCB8fCB0aGlzLnJlZGlyZWN0SGFzaClcclxuICAgICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuICBsb2dpblBvcHVwKHJlcXVlc3Q/OiBQb3B1cFJlcXVlc3QpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0aW9uUmVzdWx0PiB7XHJcbiAgICByZXR1cm4gZnJvbSh0aGlzLmluc3RhbmNlLmxvZ2luUG9wdXAocmVxdWVzdCkpO1xyXG4gIH1cclxuICBsb2dpblJlZGlyZWN0KHJlcXVlc3Q/OiBSZWRpcmVjdFJlcXVlc3QpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgIHJldHVybiBmcm9tKHRoaXMuaW5zdGFuY2UubG9naW5SZWRpcmVjdChyZXF1ZXN0KSk7XHJcbiAgfVxyXG4gIGxvZ291dChsb2dvdXRSZXF1ZXN0PzogRW5kU2Vzc2lvblJlcXVlc3QpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgIHJldHVybiBmcm9tKHRoaXMuaW5zdGFuY2UubG9nb3V0KGxvZ291dFJlcXVlc3QpKTtcclxuICB9XHJcbiAgbG9nb3V0UmVkaXJlY3QobG9nb3V0UmVxdWVzdD86IEVuZFNlc3Npb25SZXF1ZXN0KTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gZnJvbSh0aGlzLmluc3RhbmNlLmxvZ291dFJlZGlyZWN0KGxvZ291dFJlcXVlc3QpKTtcclxuICB9XHJcbiAgbG9nb3V0UG9wdXAobG9nb3V0UmVxdWVzdD86IEVuZFNlc3Npb25Qb3B1cFJlcXVlc3QpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgIHJldHVybiBmcm9tKHRoaXMuaW5zdGFuY2UubG9nb3V0UG9wdXAobG9nb3V0UmVxdWVzdCkpO1xyXG4gIH1cclxuICBzc29TaWxlbnQocmVxdWVzdDogU3NvU2lsZW50UmVxdWVzdCk6IE9ic2VydmFibGU8QXV0aGVudGljYXRpb25SZXN1bHQ+IHtcclxuICAgIHJldHVybiBmcm9tKHRoaXMuaW5zdGFuY2Uuc3NvU2lsZW50KHJlcXVlc3QpKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyBsb2dnZXIgZm9yIG1zYWwtYW5ndWxhci5cclxuICAgKiBJZiBubyBsb2dnZXIgc2V0LCByZXR1cm5zIGxvZ2dlciBpbnN0YW5jZSBjcmVhdGVkIHdpdGggc2FtZSBvcHRpb25zIGFzIG1zYWwtYnJvd3NlclxyXG4gICAqL1xyXG4gIGdldExvZ2dlcigpOiBMb2dnZXIge1xyXG4gICAgaWYgKCF0aGlzLmxvZ2dlcikge1xyXG4gICAgICB0aGlzLmxvZ2dlciA9IHRoaXMuaW5zdGFuY2UuZ2V0TG9nZ2VyKCkuY2xvbmUobmFtZSwgdmVyc2lvbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5sb2dnZXI7XHJcbiAgfVxyXG4gIC8vIENyZWF0ZSBhIGxvZ2dlciBpbnN0YW5jZSBmb3IgbXNhbC1hbmd1bGFyIHdpdGggdGhlIHNhbWUgb3B0aW9ucyBhcyBtc2FsLWJyb3dzZXJcclxuICBzZXRMb2dnZXIobG9nZ2VyOiBMb2dnZXIpOiB2b2lkIHtcclxuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyLmNsb25lKG5hbWUsIHZlcnNpb24pO1xyXG4gICAgdGhpcy5pbnN0YW5jZS5zZXRMb2dnZXIobG9nZ2VyKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,4 +1,4 @@
1
1
  /* eslint-disable header/header */
2
2
  export const name = "@azure/msal-angular";
3
- export const version = "2.5.7";
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZU1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhY2thZ2VNZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQ0FBa0M7QUFDbEMsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLHFCQUFxQixDQUFDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBoZWFkZXIvaGVhZGVyICovXHJcbmV4cG9ydCBjb25zdCBuYW1lID0gXCJAYXp1cmUvbXNhbC1hbmd1bGFyXCI7XHJcbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gXCIyLjUuN1wiO1xyXG4iXX0=
3
+ export const version = "3.0.0-alpha.0";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZU1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhY2thZ2VNZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQ0FBa0M7QUFDbEMsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLHFCQUFxQixDQUFDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBoZWFkZXIvaGVhZGVyICovXHJcbmV4cG9ydCBjb25zdCBuYW1lID0gXCJAYXp1cmUvbXNhbC1hbmd1bGFyXCI7XHJcbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gXCIzLjAuMC1hbHBoYS4wXCI7XHJcbiJdfQ==
@@ -0,0 +1,18 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ /**
6
+ * @packageDocumentation
7
+ * @module @azure/msal-angular
8
+ */
9
+ export { MsalService } from './msal.service';
10
+ export { MsalGuard } from './msal.guard';
11
+ export { MsalInterceptor } from './msal.interceptor';
12
+ export { MSAL_INSTANCE, MSAL_GUARD_CONFIG, MSAL_INTERCEPTOR_CONFIG, MSAL_BROADCAST_CONFIG, } from './constants';
13
+ export { MsalBroadcastService } from './msal.broadcast.service';
14
+ export { MsalModule } from './msal.module';
15
+ export { MsalRedirectComponent } from './msal.redirect.component';
16
+ export { MsalCustomNavigationClient } from './msal.navigation.client';
17
+ export { version } from './packageMetadata';
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVIOzs7R0FHRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBS3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU1yRCxPQUFPLEVBQ0wsYUFBYSxFQUNiLGlCQUFpQixFQUNqQix1QkFBdUIsRUFDdkIscUJBQXFCLEdBQ3RCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcblxyXG4vKipcclxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXHJcbiAqIEBtb2R1bGUgQGF6dXJlL21zYWwtYW5ndWxhclxyXG4gKi9cclxuXHJcbmV4cG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSAnLi9tc2FsLnNlcnZpY2UnO1xyXG5leHBvcnQgeyBJTXNhbFNlcnZpY2UgfSBmcm9tICcuL0lNc2FsU2VydmljZSc7XHJcbmV4cG9ydCB7IE1zYWxHdWFyZCB9IGZyb20gJy4vbXNhbC5ndWFyZCc7XHJcbmV4cG9ydCB7XHJcbiAgTXNhbEd1YXJkQ29uZmlndXJhdGlvbixcclxuICBNc2FsR3VhcmRBdXRoUmVxdWVzdCxcclxufSBmcm9tICcuL21zYWwuZ3VhcmQuY29uZmlnJztcclxuZXhwb3J0IHsgTXNhbEludGVyY2VwdG9yIH0gZnJvbSAnLi9tc2FsLmludGVyY2VwdG9yJztcclxuZXhwb3J0IHtcclxuICBNc2FsSW50ZXJjZXB0b3JDb25maWd1cmF0aW9uLFxyXG4gIE1zYWxJbnRlcmNlcHRvckF1dGhSZXF1ZXN0LFxyXG4gIFByb3RlY3RlZFJlc291cmNlU2NvcGVzLFxyXG59IGZyb20gJy4vbXNhbC5pbnRlcmNlcHRvci5jb25maWcnO1xyXG5leHBvcnQge1xyXG4gIE1TQUxfSU5TVEFOQ0UsXHJcbiAgTVNBTF9HVUFSRF9DT05GSUcsXHJcbiAgTVNBTF9JTlRFUkNFUFRPUl9DT05GSUcsXHJcbiAgTVNBTF9CUk9BRENBU1RfQ09ORklHLFxyXG59IGZyb20gJy4vY29uc3RhbnRzJztcclxuZXhwb3J0IHsgTXNhbEJyb2FkY2FzdFNlcnZpY2UgfSBmcm9tICcuL21zYWwuYnJvYWRjYXN0LnNlcnZpY2UnO1xyXG5leHBvcnQgeyBNc2FsQnJvYWRjYXN0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vbXNhbC5icm9hZGNhc3QuY29uZmlnJztcclxuZXhwb3J0IHsgTXNhbE1vZHVsZSB9IGZyb20gJy4vbXNhbC5tb2R1bGUnO1xyXG5leHBvcnQgeyBNc2FsUmVkaXJlY3RDb21wb25lbnQgfSBmcm9tICcuL21zYWwucmVkaXJlY3QuY29tcG9uZW50JztcclxuZXhwb3J0IHsgTXNhbEN1c3RvbU5hdmlnYXRpb25DbGllbnQgfSBmcm9tICcuL21zYWwubmF2aWdhdGlvbi5jbGllbnQnO1xyXG5leHBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi9wYWNrYWdlTWV0YWRhdGEnO1xyXG4iXX0=