@azure/msal-angular 3.0.0-beta.0 → 3.0.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 (87) hide show
  1. package/.beachballrc +3 -0
  2. package/.editorconfig +16 -0
  3. package/CHANGELOG.json +1418 -0
  4. package/CHANGELOG.md +520 -0
  5. package/FAQ.md +175 -0
  6. package/LICENSE +20 -20
  7. package/README.md +157 -157
  8. package/angular.json +51 -0
  9. package/docs/angular-universal.md +60 -0
  10. package/docs/configuration.md +525 -0
  11. package/docs/errors.md +89 -0
  12. package/docs/events.md +262 -0
  13. package/docs/initialization.md +206 -0
  14. package/docs/known-issues.md +19 -0
  15. package/docs/logging.md +47 -0
  16. package/docs/msal-guard.md +208 -0
  17. package/docs/msal-interceptor.md +160 -0
  18. package/docs/multi-tenant.md +90 -0
  19. package/docs/performance.md +50 -0
  20. package/docs/public-apis.md +29 -0
  21. package/docs/redirects.md +214 -0
  22. package/docs/security.md +4 -0
  23. package/docs/ssosilent.md +84 -0
  24. package/docs/v0-v1-upgrade-guide.md +61 -0
  25. package/docs/v1-v2-upgrade-guide.md +70 -0
  26. package/docs/v2-v3-upgrade-guide.md +41 -0
  27. package/karma.conf.js +43 -0
  28. package/ng-package.json +7 -0
  29. package/package.json +55 -31
  30. package/src/IMsalService.ts +31 -0
  31. package/src/constants.ts +20 -0
  32. package/src/msal.broadcast.config.ts +8 -0
  33. package/src/msal.broadcast.service.spec.ts +456 -0
  34. package/src/msal.broadcast.service.ts +74 -0
  35. package/src/msal.guard.config.ts +27 -0
  36. package/src/msal.guard.spec.ts +525 -0
  37. package/src/msal.guard.ts +290 -0
  38. package/src/msal.interceptor.config.ts +44 -0
  39. package/src/msal.interceptor.spec.ts +1125 -0
  40. package/src/msal.interceptor.ts +390 -0
  41. package/src/msal.module.ts +51 -0
  42. package/src/msal.navigation.client.spec.ts +95 -0
  43. package/src/msal.navigation.client.ts +57 -0
  44. package/src/msal.redirect.component.spec.ts +63 -0
  45. package/src/msal.redirect.component.ts +26 -0
  46. package/src/msal.service.spec.ts +452 -0
  47. package/src/msal.service.ts +97 -0
  48. package/src/packageMetadata.ts +3 -0
  49. package/{public-api.d.ts → src/public-api.ts} +35 -17
  50. package/src/test.ts +19 -0
  51. package/tsconfig.json +25 -0
  52. package/tsconfig.lib.json +27 -0
  53. package/tsconfig.lib.prod.json +10 -0
  54. package/tsconfig.spec.json +17 -0
  55. package/IMsalService.d.ts +0 -15
  56. package/constants.d.ts +0 -5
  57. package/esm2020/IMsalService.mjs +0 -6
  58. package/esm2020/azure-msal-angular.mjs +0 -5
  59. package/esm2020/constants.mjs +0 -10
  60. package/esm2020/msal.broadcast.config.mjs +0 -6
  61. package/esm2020/msal.broadcast.service.mjs +0 -57
  62. package/esm2020/msal.guard.config.mjs +0 -6
  63. package/esm2020/msal.guard.mjs +0 -218
  64. package/esm2020/msal.interceptor.config.mjs +0 -6
  65. package/esm2020/msal.interceptor.mjs +0 -270
  66. package/esm2020/msal.module.mjs +0 -46
  67. package/esm2020/msal.navigation.client.mjs +0 -51
  68. package/esm2020/msal.redirect.component.mjs +0 -31
  69. package/esm2020/msal.service.mjs +0 -81
  70. package/esm2020/packageMetadata.mjs +0 -4
  71. package/esm2020/public-api.mjs +0 -18
  72. package/fesm2015/azure-msal-angular.mjs +0 -736
  73. package/fesm2015/azure-msal-angular.mjs.map +0 -1
  74. package/fesm2020/azure-msal-angular.mjs +0 -732
  75. package/fesm2020/azure-msal-angular.mjs.map +0 -1
  76. package/index.d.ts +0 -5
  77. package/msal.broadcast.config.d.ts +0 -3
  78. package/msal.broadcast.service.d.ts +0 -17
  79. package/msal.guard.config.d.ts +0 -9
  80. package/msal.guard.d.ts +0 -43
  81. package/msal.interceptor.config.d.ts +0 -17
  82. package/msal.interceptor.d.ts +0 -63
  83. package/msal.module.d.ts +0 -13
  84. package/msal.navigation.client.d.ts +0 -19
  85. package/msal.redirect.component.d.ts +0 -15
  86. package/msal.service.d.ts +0 -31
  87. package/packageMetadata.d.ts +0 -2
@@ -1,270 +0,0 @@
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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QU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dDQUM3QixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ2hDLENBQUMsQ0FBQyxDQUFDO3lCQUNKO3FCQUNGO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxvRUFBb0U7WUFDcEUsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNoQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUMxQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9CLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLFdBQVc7cUJBQ2IsU0FBUyxFQUFFO3FCQUNYLE9BQU8sQ0FDTiwrREFBK0QsQ0FDaEUsQ0FBQzthQUNMO1lBQ0QsNkNBQTZDO1lBQzdDLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7OzRHQWpXVSxlQUFlLGtCQUloQix1QkFBdUIsb0dBTXZCLFFBQVE7Z0hBVlAsZUFBZTsyRkFBZixlQUFlO2tCQUQzQixVQUFVOzswQkFLTixNQUFNOzJCQUFDLHVCQUF1Qjs7MEJBTTlCLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2F0aW9uLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBIdHRwUmVxdWVzdCxcbiAgSHR0cEhhbmRsZXIsXG4gIEh0dHBFdmVudCxcbiAgSHR0cEludGVyY2VwdG9yLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLXVucmVzb2x2ZWRcbmltcG9ydCB7XG4gIEFjY291bnRJbmZvLFxuICBBdXRoZW50aWNhdGlvblJlc3VsdCxcbiAgQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3IsXG4gIEludGVyYWN0aW9uU3RhdHVzLFxuICBJbnRlcmFjdGlvblR5cGUsXG4gIFN0cmluZ1V0aWxzLFxuICBVcmxTdHJpbmcsXG59IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgRU1QVFksIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIGNhdGNoRXJyb3IsIHRha2UsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSAnLi9tc2FsLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgTXNhbEludGVyY2VwdG9yQXV0aFJlcXVlc3QsXG4gIE1zYWxJbnRlcmNlcHRvckNvbmZpZ3VyYXRpb24sXG4gIFByb3RlY3RlZFJlc291cmNlU2NvcGVzLFxuICBNYXRjaGluZ1Jlc291cmNlcyxcbn0gZnJvbSAnLi9tc2FsLmludGVyY2VwdG9yLmNvbmZpZyc7XG5pbXBvcnQgeyBNc2FsQnJvYWRjYXN0U2VydmljZSB9IGZyb20gJy4vbXNhbC5icm9hZGNhc3Quc2VydmljZSc7XG5pbXBvcnQgeyBNU0FMX0lOVEVSQ0VQVE9SX0NPTkZJRyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1zYWxJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIHByaXZhdGUgX2RvY3VtZW50PzogRG9jdW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChNU0FMX0lOVEVSQ0VQVE9SX0NPTkZJRylcbiAgICBwcml2YXRlIG1zYWxJbnRlcmNlcHRvckNvbmZpZzogTXNhbEludGVyY2VwdG9yQ29uZmlndXJhdGlvbixcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBNc2FsU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIG1zYWxCcm9hZGNhc3RTZXJ2aWNlOiBNc2FsQnJvYWRjYXN0U2VydmljZSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuICAgIEBJbmplY3QoRE9DVU1FTlQpIGRvY3VtZW50PzogYW55XG4gICkge1xuICAgIHRoaXMuX2RvY3VtZW50ID0gZG9jdW1lbnQgYXMgRG9jdW1lbnQ7XG4gIH1cblxuICBpbnRlcmNlcHQoXG4gICAgcmVxOiBIdHRwUmVxdWVzdDxhbnk+LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBuZXh0OiBIdHRwSGFuZGxlclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm1zYWxJbnRlcmNlcHRvckNvbmZpZy5pbnRlcmFjdGlvblR5cGUgIT09IEludGVyYWN0aW9uVHlwZS5Qb3B1cCAmJlxuICAgICAgdGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuaW50ZXJhY3Rpb25UeXBlICE9PSBJbnRlcmFjdGlvblR5cGUuUmVkaXJlY3RcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvcihcbiAgICAgICAgJ2ludmFsaWRfaW50ZXJhY3Rpb25fdHlwZScsXG4gICAgICAgICdJbnZhbGlkIGludGVyYWN0aW9uIHR5cGUgcHJvdmlkZWQgdG8gTVNBTCBJbnRlcmNlcHRvci4gSW50ZXJhY3Rpb25UeXBlLlBvcHVwLCBJbnRlcmFjdGlvblR5cGUuUmVkaXJlY3QgbXVzdCBiZSBwcm92aWRlZCBpbiB0aGUgbXNhbEludGVyY2VwdG9yQ29uZmlndXJhdGlvbidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXRMb2dnZXIoKS52ZXJib3NlKCdNU0FMIEludGVyY2VwdG9yIGFjdGl2YXRlZCcpO1xuICAgIGNvbnN0IHNjb3BlcyA9IHRoaXMuZ2V0U2NvcGVzRm9yRW5kcG9pbnQocmVxLnVybCwgcmVxLm1ldGhvZCk7XG5cbiAgICAvLyBJZiBubyBzY29wZXMgZm9yIGVuZHBvaW50LCBkb2VzIG5vdCBhY3F1aXJlIHRva2VuXG4gICAgaWYgKCFzY29wZXMgfHwgc2NvcGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgICAgLnZlcmJvc2UoJ0ludGVyY2VwdG9yIC0gbm8gc2NvcGVzIGZvciBlbmRwb2ludCcpO1xuICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XG4gICAgfVxuXG4gICAgLy8gU2V0cyBhY2NvdW50IGFzIGFjdGl2ZSBhY2NvdW50IG9yIGZpcnN0IGFjY291bnRcbiAgICBsZXQgYWNjb3VudDogQWNjb3VudEluZm87XG4gICAgaWYgKCEhdGhpcy5hdXRoU2VydmljZS5pbnN0YW5jZS5nZXRBY3RpdmVBY2NvdW50KCkpIHtcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgICAgLmdldExvZ2dlcigpXG4gICAgICAgIC52ZXJib3NlKCdJbnRlcmNlcHRvciAtIGFjdGl2ZSBhY2NvdW50IHNlbGVjdGVkJyk7XG4gICAgICBhY2NvdW50ID0gdGhpcy5hdXRoU2VydmljZS5pbnN0YW5jZS5nZXRBY3RpdmVBY2NvdW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgICAgLmdldExvZ2dlcigpXG4gICAgICAgIC52ZXJib3NlKCdJbnRlcmNlcHRvciAtIG5vIGFjdGl2ZSBhY2NvdW50LCBmYWxsYmFjayB0byBmaXJzdCBhY2NvdW50Jyk7XG4gICAgICBhY2NvdW50ID0gdGhpcy5hdXRoU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpWzBdO1xuICAgIH1cblxuICAgIGNvbnN0IGF1dGhSZXF1ZXN0ID1cbiAgICAgIHR5cGVvZiB0aGlzLm1zYWxJbnRlcmNlcHRvckNvbmZpZy5hdXRoUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHRoaXMubXNhbEludGVyY2VwdG9yQ29uZmlnLmF1dGhSZXF1ZXN0KHRoaXMuYXV0aFNlcnZpY2UsIHJlcSwge1xuICAgICAgICAgICAgYWNjb3VudDogYWNjb3VudCxcbiAgICAgICAgICB9KVxuICAgICAgICA6IHsgLi4udGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuYXV0aFJlcXVlc3QsIGFjY291bnQgfTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5nZXRMb2dnZXIoKVxuICAgICAgLmluZm8oYEludGVyY2VwdG9yIC0gJHtzY29wZXMubGVuZ3RofSBzY29wZXMgZm91bmQgZm9yIGVuZHBvaW50YCk7XG4gICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgLmdldExvZ2dlcigpXG4gICAgICAuaW5mb1BpaShgSW50ZXJjZXB0b3IgLSBbJHtzY29wZXN9XSBzY29wZXMgZm91bmQgZm9yICR7cmVxLnVybH1gKTtcblxuICAgIHJldHVybiB0aGlzLmFjcXVpcmVUb2tlbihhdXRoUmVxdWVzdCwgc2NvcGVzLCBhY2NvdW50KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXN1bHQ6IEF1dGhlbnRpY2F0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgICAgICAudmVyYm9zZSgnSW50ZXJjZXB0b3IgLSBzZXR0aW5nIGF1dGhvcml6YXRpb24gaGVhZGVycycpO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gcmVxLmhlYWRlcnMuc2V0KFxuICAgICAgICAgICdBdXRob3JpemF0aW9uJyxcbiAgICAgICAgICBgQmVhcmVyICR7cmVzdWx0LmFjY2Vzc1Rva2VufWBcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCByZXF1ZXN0Q2xvbmUgPSByZXEuY2xvbmUoeyBoZWFkZXJzIH0pO1xuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdENsb25lKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gYWNxdWlyZSB0b2tlbiBzaWxlbnRseS4gSW52b2tlIGludGVyYWN0aW9uIGlmIGFjcXVpcmVUb2tlblNpbGVudCByZWplY3RlZCB3aXRoIGVycm9yIG9yIHJlc29sdmVkIHdpdGggbnVsbCBhY2Nlc3MgdG9rZW5cbiAgICogQHBhcmFtIGF1dGhSZXF1ZXN0IFJlcXVlc3RcbiAgICogQHBhcmFtIHNjb3BlcyBBcnJheSBvZiBzY29wZXMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEBwYXJhbSBhY2NvdW50IEFjY291bnRcbiAgICogQHJldHVybnMgQXV0aGVudGljYXRpb24gcmVzdWx0XG4gICAqL1xuICBwcml2YXRlIGFjcXVpcmVUb2tlbihcbiAgICBhdXRoUmVxdWVzdDogTXNhbEludGVyY2VwdG9yQXV0aFJlcXVlc3QsXG4gICAgc2NvcGVzOiBzdHJpbmdbXSxcbiAgICBhY2NvdW50OiBBY2NvdW50SW5mb1xuICApOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0aW9uUmVzdWx0PiB7XG4gICAgLy8gTm90ZTogRm9yIE1TQSBhY2NvdW50cywgaW5jbHVkZSBvcGVuaWQgc2NvcGUgd2hlbiBjYWxsaW5nIGFjcXVpcmVUb2tlblNpbGVudCB0byByZXR1cm4gaWRUb2tlblxuICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAuYWNxdWlyZVRva2VuU2lsZW50KHsgLi4uYXV0aFJlcXVlc3QsIHNjb3BlcywgYWNjb3VudCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRMb2dnZXIoKVxuICAgICAgICAgICAgLmVycm9yKFxuICAgICAgICAgICAgICAnSW50ZXJjZXB0b3IgLSBhY3F1aXJlVG9rZW5TaWxlbnQgcmVqZWN0ZWQgd2l0aCBlcnJvci4gSW52b2tpbmcgaW50ZXJhY3Rpb24gdG8gcmVzb2x2ZS4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB0aGlzLm1zYWxCcm9hZGNhc3RTZXJ2aWNlLmluUHJvZ3Jlc3MkLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKChzdGF0dXM6IEludGVyYWN0aW9uU3RhdHVzKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IEludGVyYWN0aW9uU3RhdHVzLk5vbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hY3F1aXJlVG9rZW5JbnRlcmFjdGl2ZWx5KGF1dGhSZXF1ZXN0LCBzY29wZXMpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubXNhbEJyb2FkY2FzdFNlcnZpY2UuaW5Qcm9ncmVzcyQucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoc3RhdHVzOiBJbnRlcmFjdGlvblN0YXR1cykgPT5cbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzID09PSBJbnRlcmFjdGlvblN0YXR1cy5Ob25lXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmFjcXVpcmVUb2tlbihhdXRoUmVxdWVzdCwgc2NvcGVzLCBhY2NvdW50KSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgocmVzdWx0OiBBdXRoZW50aWNhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmICghcmVzdWx0LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAgICAgICAgIC5nZXRMb2dnZXIoKVxuICAgICAgICAgICAgICAuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ0ludGVyY2VwdG9yIC0gYWNxdWlyZVRva2VuU2lsZW50IHJlc29sdmVkIHdpdGggbnVsbCBhY2Nlc3MgdG9rZW4uIEtub3duIGlzc3VlIHdpdGggQjJDIHRlbmFudHMsIGludm9raW5nIGludGVyYWN0aW9uIHRvIHJlc29sdmUuJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubXNhbEJyb2FkY2FzdFNlcnZpY2UuaW5Qcm9ncmVzcyQucGlwZShcbiAgICAgICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgICAgIChzdGF0dXM6IEludGVyYWN0aW9uU3RhdHVzKSA9PiBzdGF0dXMgPT09IEludGVyYWN0aW9uU3RhdHVzLk5vbmVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5hY3F1aXJlVG9rZW5JbnRlcmFjdGl2ZWx5KGF1dGhSZXF1ZXN0LCBzY29wZXMpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvZihyZXN1bHQpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2UgaW50ZXJhY3Rpb24gZm9yIHRoZSBnaXZlbiBzZXQgb2Ygc2NvcGVzXG4gICAqIEBwYXJhbSBhdXRoUmVxdWVzdCBSZXF1ZXN0XG4gICAqIEBwYXJhbSBzY29wZXMgQXJyYXkgb2Ygc2NvcGVzIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBSZXN1bHQgZnJvbSB0aGUgaW50ZXJhY3RpdmUgcmVxdWVzdFxuICAgKi9cbiAgcHJpdmF0ZSBhY3F1aXJlVG9rZW5JbnRlcmFjdGl2ZWx5KFxuICAgIGF1dGhSZXF1ZXN0OiBNc2FsSW50ZXJjZXB0b3JBdXRoUmVxdWVzdCxcbiAgICBzY29wZXM6IHN0cmluZ1tdXG4gICk6IE9ic2VydmFibGU8QXV0aGVudGljYXRpb25SZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcuaW50ZXJhY3Rpb25UeXBlID09PSBJbnRlcmFjdGlvblR5cGUuUG9wdXApIHtcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgICAgLmdldExvZ2dlcigpXG4gICAgICAgIC52ZXJib3NlKFxuICAgICAgICAgICdJbnRlcmNlcHRvciAtIGVycm9yIGFjcXVpcmluZyB0b2tlbiBzaWxlbnRseSwgYWNxdWlyaW5nIGJ5IHBvcHVwJ1xuICAgICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuYWNxdWlyZVRva2VuUG9wdXAoeyAuLi5hdXRoUmVxdWVzdCwgc2NvcGVzIH0pO1xuICAgIH1cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgIC52ZXJib3NlKFxuICAgICAgICAnSW50ZXJjZXB0b3IgLSBlcnJvciBhY3F1aXJpbmcgdG9rZW4gc2lsZW50bHksIGFjcXVpcmluZyBieSByZWRpcmVjdCdcbiAgICAgICk7XG4gICAgY29uc3QgcmVkaXJlY3RTdGFydFBhZ2UgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmFjcXVpcmVUb2tlblJlZGlyZWN0KHtcbiAgICAgIC4uLmF1dGhSZXF1ZXN0LFxuICAgICAgc2NvcGVzLFxuICAgICAgcmVkaXJlY3RTdGFydFBhZ2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgLyoqXG4gICAqIExvb2tzIHVwIHRoZSBzY29wZXMgZm9yIHRoZSBnaXZlbiBlbmRwb2ludCBmcm9tIHRoZSBwcm90ZWN0ZWRSZXNvdXJjZU1hcFxuICAgKiBAcGFyYW0gZW5kcG9pbnQgVXJsIG9mIHRoZSByZXF1ZXN0XG4gICAqIEBwYXJhbSBodHRwTWV0aG9kIEh0dHAgbWV0aG9kIG9mIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHNjb3Blcywgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICpcbiAgICovXG4gIHByaXZhdGUgZ2V0U2NvcGVzRm9yRW5kcG9pbnQoXG4gICAgZW5kcG9pbnQ6IHN0cmluZyxcbiAgICBodHRwTWV0aG9kOiBzdHJpbmdcbiAgKTogQXJyYXk8c3RyaW5nPiB8IG51bGwge1xuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5nZXRMb2dnZXIoKVxuICAgICAgLnZlcmJvc2UoJ0ludGVyY2VwdG9yIC0gZ2V0dGluZyBzY29wZXMgZm9yIGVuZHBvaW50Jyk7XG5cbiAgICAvLyBFbnN1cmVzIGVuZHBvaW50cyBhbmQgcHJvdGVjdGVkIHJlc291cmNlcyBjb21wYXJlZCBhcmUgbm9ybWFsaXplZFxuICAgIGNvbnN0IG5vcm1hbGl6ZWRFbmRwb2ludCA9IHRoaXMubG9jYXRpb24ubm9ybWFsaXplKGVuZHBvaW50KTtcblxuICAgIGNvbnN0IHByb3RlY3RlZFJlc291cmNlc0FycmF5ID0gQXJyYXkuZnJvbShcbiAgICAgIHRoaXMubXNhbEludGVyY2VwdG9yQ29uZmlnLnByb3RlY3RlZFJlc291cmNlTWFwLmtleXMoKVxuICAgICk7XG5cbiAgICBjb25zdCBtYXRjaGluZ1Byb3RlY3RlZFJlc291cmNlcyA9IHRoaXMubWF0Y2hSZXNvdXJjZXNUb0VuZHBvaW50KFxuICAgICAgcHJvdGVjdGVkUmVzb3VyY2VzQXJyYXksXG4gICAgICBub3JtYWxpemVkRW5kcG9pbnRcbiAgICApO1xuXG4gICAgLy8gQ2hlY2sgYWJzb2x1dGUgdXJscyBvZiByZXNvdXJjZXMgZmlyc3QgYmVmb3JlIGNoZWNraW5nIHJlbGF0aXZlIHRvIHByZXZlbnQgaW5jb3JyZWN0IG1hdGNoaW5nIHdoZXJlIG11bHRpcGxlIHJlc291cmNlcyBoYXZlIHNpbWlsYXIgcmVsYXRpdmUgdXJsc1xuICAgIGlmIChtYXRjaGluZ1Byb3RlY3RlZFJlc291cmNlcy5hYnNvbHV0ZVJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXRjaFNjb3Blc1RvRW5kcG9pbnQoXG4gICAgICAgIHRoaXMubXNhbEludGVyY2VwdG9yQ29uZmlnLnByb3RlY3RlZFJlc291cmNlTWFwLFxuICAgICAgICBtYXRjaGluZ1Byb3RlY3RlZFJlc291cmNlcy5hYnNvbHV0ZVJlc291cmNlcyxcbiAgICAgICAgaHR0cE1ldGhvZFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoaW5nUHJvdGVjdGVkUmVzb3VyY2VzLnJlbGF0aXZlUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLm1hdGNoU2NvcGVzVG9FbmRwb2ludChcbiAgICAgICAgdGhpcy5tc2FsSW50ZXJjZXB0b3JDb25maWcucHJvdGVjdGVkUmVzb3VyY2VNYXAsXG4gICAgICAgIG1hdGNoaW5nUHJvdGVjdGVkUmVzb3VyY2VzLnJlbGF0aXZlUmVzb3VyY2VzLFxuICAgICAgICBodHRwTWV0aG9kXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHJlc291cmNlIGVuZHBvaW50cyB0aGF0IG1hdGNoIHJlcXVlc3QgZW5kcG9pbnRcbiAgICogQHBhcmFtIHByb3RlY3RlZFJlc291cmNlc0VuZHBvaW50c1xuICAgKiBAcGFyYW0gZW5kcG9pbnRcbiAgICogQHJldHVybnNcbiAgICovXG4gIHByaXZhdGUgbWF0Y2hSZXNvdXJjZXNUb0VuZHBvaW50KFxuICAgIHByb3RlY3RlZFJlc291cmNlc0VuZHBvaW50czogc3RyaW5nW10sXG4gICAgZW5kcG9pbnQ6IHN0cmluZ1xuICApOiBNYXRjaGluZ1Jlc291cmNlcyB7XG4gICAgY29uc3QgbWF0Y2hpbmdSZXNvdXJjZXM6IE1hdGNoaW5nUmVzb3VyY2VzID0ge1xuICAgICAgYWJzb2x1dGVSZXNvdXJjZXM6IFtdLFxuICAgICAgcmVsYXRpdmVSZXNvdXJjZXM6IFtdLFxuICAgIH07XG5cbiAgICBwcm90ZWN0ZWRSZXNvdXJjZXNFbmRwb2ludHMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAvLyBOb3JtYWxpemVzIGFuZCBhZGRzIHJlc291cmNlIHRvIG1hdGNoaW5nUmVzb3VyY2VzLmFic29sdXRlUmVzb3VyY2VzIGlmIGtleSBtYXRjaGVzIGVuZHBvaW50LiBTdHJpbmdVdGlscy5tYXRjaFBhdHRlcm4gYWNjb3VudHMgZm9yIHdpbGRjYXJkc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEtleSA9IHRoaXMubG9jYXRpb24ubm9ybWFsaXplKGtleSk7XG4gICAgICBpZiAoU3RyaW5nVXRpbHMubWF0Y2hQYXR0ZXJuKG5vcm1hbGl6ZWRLZXksIGVuZHBvaW50KSkge1xuICAgICAgICBtYXRjaGluZ1Jlc291cmNlcy5hYnNvbHV0ZVJlc291cmNlcy5wdXNoKGtleSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCB1cmwgY29tcG9uZW50cyBmb3IgcmVsYXRpdmUgdXJsc1xuICAgICAgY29uc3QgYWJzb2x1dGVLZXkgPSB0aGlzLmdldEFic29sdXRlVXJsKGtleSk7XG4gICAgICBjb25zdCBrZXlDb21wb25lbnRzID0gbmV3IFVybFN0cmluZyhhYnNvbHV0ZUtleSkuZ2V0VXJsQ29tcG9uZW50cygpO1xuICAgICAgY29uc3QgYWJzb2x1dGVFbmRwb2ludCA9IHRoaXMuZ2V0QWJzb2x1dGVVcmwoZW5kcG9pbnQpO1xuICAgICAgY29uc3QgZW5kcG9pbnRDb21wb25lbnRzID0gbmV3IFVybFN0cmluZyhcbiAgICAgICAgYWJzb2x1dGVFbmRwb2ludFxuICAgICAgKS5nZXRVcmxDb21wb25lbnRzKCk7XG5cbiAgICAgIC8vIE5vcm1hbGl6ZWQga2V5IHNob3VsZCBpbmNsdWRlIHF1ZXJ5IHN0cmluZ3MgaWYgYXBwbGljYWJsZVxuICAgICAgY29uc3QgcmVsYXRpdmVOb3JtYWxpemVkS2V5ID0ga2V5Q29tcG9uZW50cy5RdWVyeVN0cmluZ1xuICAgICAgICA/IGAke2tleUNvbXBvbmVudHMuQWJzb2x1dGVQYXRofT8ke2tleUNvbXBvbmVudHMuUXVlcnlTdHJpbmd9YFxuICAgICAgICA6IHRoaXMubG9jYXRpb24ubm9ybWFsaXplKGtleUNvbXBvbmVudHMuQWJzb2x1dGVQYXRoKTtcblxuICAgICAgLy8gQWRkIHJlc291cmNlIHRvIG1hdGNoaW5nUmVzb3VyY2VzLnJlbGF0aXZlUmVzb3VyY2VzIGlmIHNhbWUgb3JpZ2luLCByZWxhdGl2ZUtleSBtYXRjaGVzIGVuZHBvaW50LCBhbmQgaXMgbm90IGVtcHR5XG4gICAgICBpZiAoXG4gICAgICAgIGtleUNvbXBvbmVudHMuSG9zdE5hbWVBbmRQb3J0ID09PSBlbmRwb2ludENvbXBvbmVudHMuSG9zdE5hbWVBbmRQb3J0ICYmXG4gICAgICAgIFN0cmluZ1V0aWxzLm1hdGNoUGF0dGVybihyZWxhdGl2ZU5vcm1hbGl6ZWRLZXksIGFic29sdXRlRW5kcG9pbnQpICYmXG4gICAgICAgIHJlbGF0aXZlTm9ybWFsaXplZEtleSAhPT0gJycgJiZcbiAgICAgICAgcmVsYXRpdmVOb3JtYWxpemVkS2V5ICE9PSAnLyonXG4gICAgICApIHtcbiAgICAgICAgbWF0Y2hpbmdSZXNvdXJjZXMucmVsYXRpdmVSZXNvdXJjZXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hdGNoaW5nUmVzb3VyY2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgcmVsYXRpdmUgdXJscyB0byBhYnNvbHV0ZSB1cmxzXG4gICAqIEBwYXJhbSB1cmxcbiAgICogQHJldHVybnNcbiAgICovXG4gIHByaXZhdGUgZ2V0QWJzb2x1dGVVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGluay5ocmVmID0gdXJsO1xuICAgIHJldHVybiBsaW5rLmhyZWY7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgc2NvcGVzIGZyb20gZmlyc3QgbWF0Y2hpbmcgZW5kcG9pbnQgd2l0aCBIVFRQIG1ldGhvZCB0aGF0IG1hdGNoZXMgcmVxdWVzdFxuICAgKiBAcGFyYW0gcHJvdGVjdGVkUmVzb3VyY2VNYXAgUHJvdGVjdGVkIHJlc291cmNlIG1hcFxuICAgKiBAcGFyYW0gZW5kcG9pbnRBcnJheSBBcnJheSBvZiByZXNvdXJjZXMgdGhhdCBtYXRjaCByZXF1ZXN0IGVuZHBvaW50XG4gICAqIEBwYXJhbSBodHRwTWV0aG9kIEh0dHAgbWV0aG9kIG9mIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwcml2YXRlIG1hdGNoU2NvcGVzVG9FbmRwb2ludChcbiAgICBwcm90ZWN0ZWRSZXNvdXJjZU1hcDogTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgQXJyYXk8c3RyaW5nIHwgUHJvdGVjdGVkUmVzb3VyY2VTY29wZXM+IHwgbnVsbFxuICAgID4sXG4gICAgZW5kcG9pbnRBcnJheTogc3RyaW5nW10sXG4gICAgaHR0cE1ldGhvZDogc3RyaW5nXG4gICk6IEFycmF5PHN0cmluZz4gfCBudWxsIHtcbiAgICBjb25zdCBhbGxNYXRjaGVkU2NvcGVzID0gW107XG5cbiAgICAvLyBDaGVjayBlYWNoIG1hdGNoZWQgZW5kcG9pbnQgZm9yIG1hdGNoaW5nIEh0dHBNZXRob2QgYW5kIHNjb3Blc1xuICAgIGVuZHBvaW50QXJyYXkuZm9yRWFjaCgobWF0Y2hlZEVuZHBvaW50KSA9PiB7XG4gICAgICBjb25zdCBzY29wZXNGb3JFbmRwb2ludCA9IFtdO1xuICAgICAgY29uc3QgbWV0aG9kQW5kU2NvcGVzQXJyYXkgPSBwcm90ZWN0ZWRSZXNvdXJjZU1hcC5nZXQobWF0Y2hlZEVuZHBvaW50KTtcblxuICAgICAgLy8gUmV0dXJuIGlmIHJlc291cmNlIGlzIHVucHJvdGVjdGVkXG4gICAgICBpZiAobWV0aG9kQW5kU2NvcGVzQXJyYXkgPT09IG51bGwpIHtcbiAgICAgICAgYWxsTWF0Y2hlZFNjb3Blcy5wdXNoKG51bGwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1ldGhvZEFuZFNjb3Blc0FycmF5LmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICAgIC8vIEVudHJ5IGlzIGVpdGhlciBhcnJheSBvZiBzY29wZXMgb3IgUHJvdGVjdGVkUmVzb3VyY2VTY29wZXMgb2JqZWN0XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgc2NvcGVzRm9yRW5kcG9pbnQucHVzaChlbnRyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRW5zdXJlIG1ldGhvZHMgYmVpbmcgY29tcGFyZWQgYXJlIG5vcm1hbGl6ZWRcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUmVxdWVzdE1ldGhvZCA9IGh0dHBNZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUmVzb3VyY2VNZXRob2QgPSBlbnRyeS5odHRwTWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgLy8gTWV0aG9kIGluIHByb3RlY3RlZFJlc291cmNlTWFwIG1hdGNoZXMgcmVxdWVzdCBodHRwIG1ldGhvZFxuICAgICAgICAgIGlmIChub3JtYWxpemVkUmVzb3VyY2VNZXRob2QgPT09IG5vcm1hbGl6ZWRSZXF1ZXN0TWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSBpZiBzY29wZXMgY29tZXMgbnVsbCB0byB1bnByb3RlY3QgdGhlIHJlc291cmNlIGluIGEgY2VydGFpbiBodHRwIG1ldGhvZFxuICAgICAgICAgICAgaWYgKGVudHJ5LnNjb3BlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBhbGxNYXRjaGVkU2NvcGVzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlbnRyeS5zY29wZXMuZm9yRWFjaCgoc2NvcGUpID0+IHtcbiAgICAgICAgICAgICAgICBzY29wZXNGb3JFbmRwb2ludC5wdXNoKHNjb3BlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gT25seSBhZGQgdG8gYWxsIHNjb3BlcyBpZiBzY29wZXMgZm9yIGVuZHBvaW50IGFuZCBtZXRob2QgaXMgZm91bmRcbiAgICAgIGlmIChzY29wZXNGb3JFbmRwb2ludC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFsbE1hdGNoZWRTY29wZXMucHVzaChzY29wZXNGb3JFbmRwb2ludCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYWxsTWF0Y2hlZFNjb3Blcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoYWxsTWF0Y2hlZFNjb3Blcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgICAgICAud2FybmluZyhcbiAgICAgICAgICAgICdJbnRlcmNlcHRvciAtIE1vcmUgdGhhbiAxIG1hdGNoaW5nIHNjb3BlcyBmb3IgZW5kcG9pbnQgZm91bmQuJ1xuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyBSZXR1cm5zIHNjb3BlcyBmb3IgZmlyc3QgbWF0Y2hpbmcgZW5kcG9pbnRcbiAgICAgIHJldHVybiBhbGxNYXRjaGVkU2NvcGVzWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
@@ -1,46 +0,0 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbXNhbC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLHVCQUF1QixHQUN4QixNQUFNLGFBQWEsQ0FBQzs7QUFPckIsTUFBTSxPQUFPLFVBQVU7SUFDckIsTUFBTSxDQUFDLE9BQU8sQ0FDWixZQUFzQyxFQUN0QyxXQUFtQyxFQUNuQyxpQkFBK0M7UUFFL0MsT0FBTztZQUNMLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxPQUFPLEVBQUUsYUFBYTtvQkFDdEIsUUFBUSxFQUFFLFlBQVk7aUJBQ3ZCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFFBQVEsRUFBRSxXQUFXO2lCQUN0QjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsdUJBQXVCO29CQUNoQyxRQUFRLEVBQUUsaUJBQWlCO2lCQUM1QjtnQkFDRCxXQUFXO2FBQ1o7U0FDRixDQUFDO0lBQ0osQ0FBQzs7dUdBeEJVLFVBQVU7d0dBQVYsVUFBVSxpQkFKTixxQkFBcUIsYUFDMUIsWUFBWTt3R0FHWCxVQUFVLGFBRlYsQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUMsWUFEbEMsWUFBWTsyRkFHWCxVQUFVO2tCQUx0QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNyQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQztpQkFDN0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJUHVibGljQ2xpZW50QXBwbGljYXRpb24gfSBmcm9tICdAYXp1cmUvbXNhbC1icm93c2VyJztcbmltcG9ydCB7IE1zYWxCcm9hZGNhc3RTZXJ2aWNlIH0gZnJvbSAnLi9tc2FsLmJyb2FkY2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IE1zYWxHdWFyZCB9IGZyb20gJy4vbXNhbC5ndWFyZCc7XG5pbXBvcnQgeyBNc2FsR3VhcmRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9tc2FsLmd1YXJkLmNvbmZpZyc7XG5pbXBvcnQgeyBNc2FsSW50ZXJjZXB0b3JDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9tc2FsLmludGVyY2VwdG9yLmNvbmZpZyc7XG5pbXBvcnQgeyBNc2FsUmVkaXJlY3RDb21wb25lbnQgfSBmcm9tICcuL21zYWwucmVkaXJlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSAnLi9tc2FsLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgTVNBTF9JTlNUQU5DRSxcbiAgTVNBTF9HVUFSRF9DT05GSUcsXG4gIE1TQUxfSU5URVJDRVBUT1JfQ09ORklHLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW01zYWxSZWRpcmVjdENvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBwcm92aWRlcnM6IFtNc2FsR3VhcmQsIE1zYWxCcm9hZGNhc3RTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgTXNhbE1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KFxuICAgIG1zYWxJbnN0YW5jZTogSVB1YmxpY0NsaWVudEFwcGxpY2F0aW9uLFxuICAgIGd1YXJkQ29uZmlnOiBNc2FsR3VhcmRDb25maWd1cmF0aW9uLFxuICAgIGludGVyY2VwdG9yQ29uZmlnOiBNc2FsSW50ZXJjZXB0b3JDb25maWd1cmF0aW9uXG4gICk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TXNhbE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTXNhbE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogTVNBTF9JTlNUQU5DRSxcbiAgICAgICAgICB1c2VWYWx1ZTogbXNhbEluc3RhbmNlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogTVNBTF9HVUFSRF9DT05GSUcsXG4gICAgICAgICAgdXNlVmFsdWU6IGd1YXJkQ29uZmlnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogTVNBTF9JTlRFUkNFUFRPUl9DT05GSUcsXG4gICAgICAgICAgdXNlVmFsdWU6IGludGVyY2VwdG9yQ29uZmlnLFxuICAgICAgICB9LFxuICAgICAgICBNc2FsU2VydmljZSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,51 +0,0 @@
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/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5uYXZpZ2F0aW9uLmNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tc2FsLm5hdmlnYXRpb24uY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixTQUFTLEdBQ1YsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFHN0I7Ozs7R0FJRztBQUVILE1BQU0sT0FBTywwQkFBMkIsU0FBUSxnQkFBZ0I7SUFDOUQsWUFDVSxXQUF3QixFQUN4QixNQUFjLEVBQ2QsUUFBa0I7UUFFMUIsS0FBSyxFQUFFLENBQUM7UUFKQSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUc1QixDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUNwQixHQUFXLEVBQ1gsT0FBMEI7UUFFMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUV4RSxJQUFJLENBQUMsV0FBVzthQUNiLFNBQVMsRUFBRTthQUNYLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXO2FBQ2IsU0FBUyxFQUFFO2FBQ1gsVUFBVSxDQUFDLG1EQUFtRCxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXhFLG9HQUFvRztRQUNwRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDckIsT0FBTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzdDO2FBQU07WUFDTCx3Q0FBd0M7WUFDeEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM1RCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsV0FBVztnQkFDdEMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUMsV0FBVyxFQUFFO2dCQUM5RCxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUN0RTtRQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7dUhBbENVLDBCQUEwQjsySEFBMUIsMEJBQTBCOzJGQUExQiwwQkFBMEI7a0JBRHRDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIE5hdmlnYXRpb25DbGllbnQsXG4gIE5hdmlnYXRpb25PcHRpb25zLFxuICBVcmxTdHJpbmcsXG59IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICcuL21zYWwuc2VydmljZSc7XG5cbi8qKlxuICogQ3VzdG9tIG5hdmlnYXRpb24gdXNlZCBmb3IgQW5ndWxhciBjbGllbnQtc2lkZSBuYXZpZ2F0aW9uLlxuICogU2VlIHBlcmZvcm1hbmNlIGRvYyBmb3IgZGV0YWlsczpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9BenVyZUFEL21pY3Jvc29mdC1hdXRoZW50aWNhdGlvbi1saWJyYXJ5LWZvci1qcy90cmVlL2Rldi9saWIvbXNhbC1hbmd1bGFyL2RvY3MvcGVyZm9ybWFuY2UubWRcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1zYWxDdXN0b21OYXZpZ2F0aW9uQ2xpZW50IGV4dGVuZHMgTmF2aWdhdGlvbkNsaWVudCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb25cbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlSW50ZXJuYWwoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczogTmF2aWdhdGlvbk9wdGlvbnNcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXRMb2dnZXIoKS50cmFjZSgnTXNhbEN1c3RvbU5hdmlnYXRpb25DbGllbnQgY2FsbGVkJyk7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgIC52ZXJib3NlKCdNc2FsQ3VzdG9tTmF2aWdhdGlvbkNsaWVudCAtIG5hdmlnYXRpbmcnKTtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgIC52ZXJib3NlUGlpKGBNc2FsQ3VzdG9tTmF2aWdhdGlvbkNsaWVudCAtIG5hdmlnYXRpbmcgdG8gdXJsOiAke3VybH1gKTtcblxuICAgIC8vIFByZXZlbnQgaGFzaCBjbGVhcmluZyBmcm9tIGNhdXNpbmcgYW4gaXNzdWUgd2l0aCBDbGllbnQtc2lkZSBuYXZpZ2F0aW9uIGFmdGVyIHJlZGlyZWN0IGlzIGhhbmRsZWRcbiAgICBpZiAob3B0aW9ucy5ub0hpc3RvcnkpIHtcbiAgICAgIHJldHVybiBzdXBlci5uYXZpZ2F0ZUludGVybmFsKHVybCwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vcm1hbGl6aW5nIG5ld1VybCBpZiBubyBxdWVyeSBzdHJpbmdcbiAgICAgIGNvbnN0IHVybENvbXBvbmVudHMgPSBuZXcgVXJsU3RyaW5nKHVybCkuZ2V0VXJsQ29tcG9uZW50cygpO1xuICAgICAgY29uc3QgbmV3VXJsID0gdXJsQ29tcG9uZW50cy5RdWVyeVN0cmluZ1xuICAgICAgICA/IGAke3VybENvbXBvbmVudHMuQWJzb2x1dGVQYXRofT8ke3VybENvbXBvbmVudHMuUXVlcnlTdHJpbmd9YFxuICAgICAgICA6IHRoaXMubG9jYXRpb24ubm9ybWFsaXplKHVybENvbXBvbmVudHMuQWJzb2x1dGVQYXRoKTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwobmV3VXJsLCB7IHJlcGxhY2VVcmw6IG9wdGlvbnMubm9IaXN0b3J5IH0pO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9wdGlvbnMubm9IaXN0b3J5KTtcbiAgfVxufVxuIl19
@@ -1,31 +0,0 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5yZWRpcmVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbXNhbC5yZWRpcmVjdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUg7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7OztBQU9sRCxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUcsQ0FBQztJQUVoRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDMUQsQ0FBQzs7a0hBTlUscUJBQXFCO3NHQUFyQixxQkFBcUIsb0RBRnRCLEVBQUU7MkZBRUQscUJBQXFCO2tCQUpqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO29CQUN4QixRQUFRLEVBQUUsRUFBRTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBkZWRpY2F0ZWQgcmVkaXJlY3QgY29tcG9uZW50IHRvIGJlIGFkZGVkIHRvIEFuZ3VsYXIgYXBwcyB0b1xuICogaGFuZGxlIHJlZGlyZWN0cyB3aGVuIHVzaW5nIEBhenVyZS9tc2FsLWFuZ3VsYXIuXG4gKiBJbXBvcnQgdGhpcyBjb21wb25lbnQgdG8gdXNlIHJlZGlyZWN0cyBpbiB5b3VyIGFwcC5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICcuL21zYWwuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1yZWRpcmVjdCcsXG4gIHRlbXBsYXRlOiAnJyxcbn0pXG5leHBvcnQgY2xhc3MgTXNhbFJlZGlyZWN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogTXNhbFNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXRMb2dnZXIoKS52ZXJib3NlKCdNc2FsUmVkaXJlY3RDb21wb25lbnQgYWN0aXZhdGVkJyk7XG4gICAgdGhpcy5hdXRoU2VydmljZS5oYW5kbGVSZWRpcmVjdE9ic2VydmFibGUoKS5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19
@@ -1,81 +0,0 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21zYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBVUwsVUFBVSxHQUNYLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV4QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7OztBQUc1QyxNQUFNLE9BQU8sV0FBVztJQUl0QixZQUNnQyxRQUFrQyxFQUN4RCxRQUFrQjtRQURJLGFBQVEsR0FBUixRQUFRLENBQTBCO1FBQ3hELGFBQVEsR0FBUixRQUFRLENBQVU7UUFFMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZELElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxPQUFxQjtRQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELG9CQUFvQixDQUFDLE9BQXdCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0Qsa0JBQWtCLENBQ2hCLGFBQTRCO1FBRTVCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ0Qsd0JBQXdCLENBQUMsSUFBYTtRQUNwQyxPQUFPLElBQUksQ0FDVCxJQUFJLENBQUMsUUFBUTthQUNWLFVBQVUsRUFBRTthQUNaLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FDVCxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQy9ELENBQ0osQ0FBQztJQUNKLENBQUM7SUFDRCxVQUFVLENBQUMsT0FBc0I7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQ0QsYUFBYSxDQUFDLE9BQXlCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNELE1BQU0sQ0FBQyxhQUFpQztRQUN0QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxjQUFjLENBQUMsYUFBaUM7UUFDOUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0QsV0FBVyxDQUFDLGFBQXNDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELFNBQVMsQ0FBQyxPQUF5QjtRQUNqQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRDs7O09BR0c7SUFDSCxTQUFTO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELGtGQUFrRjtJQUNsRixTQUFTLENBQUMsTUFBYztRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7O3dHQXRFVSxXQUFXLGtCQUtaLGFBQWE7NEdBTFosV0FBVzsyRkFBWCxXQUFXO2tCQUR2QixVQUFVOzswQkFNTixNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBJUHVibGljQ2xpZW50QXBwbGljYXRpb24sXG4gIEVuZFNlc3Npb25SZXF1ZXN0LFxuICBFbmRTZXNzaW9uUG9wdXBSZXF1ZXN0LFxuICBBdXRoZW50aWNhdGlvblJlc3VsdCxcbiAgUmVkaXJlY3RSZXF1ZXN0LFxuICBTaWxlbnRSZXF1ZXN0LFxuICBQb3B1cFJlcXVlc3QsXG4gIFNzb1NpbGVudFJlcXVlc3QsXG4gIExvZ2dlcixcbiAgV3JhcHBlclNLVSxcbn0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJTXNhbFNlcnZpY2UgfSBmcm9tICcuL0lNc2FsU2VydmljZSc7XG5pbXBvcnQgeyBuYW1lLCB2ZXJzaW9uIH0gZnJvbSAnLi9wYWNrYWdlTWV0YWRhdGEnO1xuaW1wb3J0IHsgTVNBTF9JTlNUQU5DRSB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1zYWxTZXJ2aWNlIGltcGxlbWVudHMgSU1zYWxTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWRpcmVjdEhhc2g6IHN0cmluZztcbiAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KE1TQUxfSU5TVEFOQ0UpIHB1YmxpYyBpbnN0YW5jZTogSVB1YmxpY0NsaWVudEFwcGxpY2F0aW9uLFxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uXG4gICkge1xuICAgIGNvbnN0IGhhc2ggPSB0aGlzLmxvY2F0aW9uLnBhdGgodHJ1ZSkuc3BsaXQoJyMnKS5wb3AoKTtcbiAgICBpZiAoaGFzaCkge1xuICAgICAgdGhpcy5yZWRpcmVjdEhhc2ggPSBgIyR7aGFzaH1gO1xuICAgIH1cbiAgICB0aGlzLmluc3RhbmNlLmluaXRpYWxpemVXcmFwcGVyTGlicmFyeShXcmFwcGVyU0tVLkFuZ3VsYXIsIHZlcnNpb24pO1xuICB9XG5cbiAgaW5pdGlhbGl6ZSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmluc3RhbmNlLmluaXRpYWxpemUoKSk7XG4gIH1cbiAgYWNxdWlyZVRva2VuUG9wdXAocmVxdWVzdDogUG9wdXBSZXF1ZXN0KTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiBmcm9tKHRoaXMuaW5zdGFuY2UuYWNxdWlyZVRva2VuUG9wdXAocmVxdWVzdCkpO1xuICB9XG4gIGFjcXVpcmVUb2tlblJlZGlyZWN0KHJlcXVlc3Q6IFJlZGlyZWN0UmVxdWVzdCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiBmcm9tKHRoaXMuaW5zdGFuY2UuYWNxdWlyZVRva2VuUmVkaXJlY3QocmVxdWVzdCkpO1xuICB9XG4gIGFjcXVpcmVUb2tlblNpbGVudChcbiAgICBzaWxlbnRSZXF1ZXN0OiBTaWxlbnRSZXF1ZXN0XG4gICk6IE9ic2VydmFibGU8QXV0aGVudGljYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmluc3RhbmNlLmFjcXVpcmVUb2tlblNpbGVudChzaWxlbnRSZXF1ZXN0KSk7XG4gIH1cbiAgaGFuZGxlUmVkaXJlY3RPYnNlcnZhYmxlKGhhc2g/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIGZyb20oXG4gICAgICB0aGlzLmluc3RhbmNlXG4gICAgICAgIC5pbml0aWFsaXplKClcbiAgICAgICAgLnRoZW4oKCkgPT5cbiAgICAgICAgICB0aGlzLmluc3RhbmNlLmhhbmRsZVJlZGlyZWN0UHJvbWlzZShoYXNoIHx8IHRoaXMucmVkaXJlY3RIYXNoKVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuICBsb2dpblBvcHVwKHJlcXVlc3Q/OiBQb3B1cFJlcXVlc3QpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5pbnN0YW5jZS5sb2dpblBvcHVwKHJlcXVlc3QpKTtcbiAgfVxuICBsb2dpblJlZGlyZWN0KHJlcXVlc3Q/OiBSZWRpcmVjdFJlcXVlc3QpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmluc3RhbmNlLmxvZ2luUmVkaXJlY3QocmVxdWVzdCkpO1xuICB9XG4gIGxvZ291dChsb2dvdXRSZXF1ZXN0PzogRW5kU2Vzc2lvblJlcXVlc3QpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmluc3RhbmNlLmxvZ291dChsb2dvdXRSZXF1ZXN0KSk7XG4gIH1cbiAgbG9nb3V0UmVkaXJlY3QobG9nb3V0UmVxdWVzdD86IEVuZFNlc3Npb25SZXF1ZXN0KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5pbnN0YW5jZS5sb2dvdXRSZWRpcmVjdChsb2dvdXRSZXF1ZXN0KSk7XG4gIH1cbiAgbG9nb3V0UG9wdXAobG9nb3V0UmVxdWVzdD86IEVuZFNlc3Npb25Qb3B1cFJlcXVlc3QpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmluc3RhbmNlLmxvZ291dFBvcHVwKGxvZ291dFJlcXVlc3QpKTtcbiAgfVxuICBzc29TaWxlbnQocmVxdWVzdDogU3NvU2lsZW50UmVxdWVzdCk6IE9ic2VydmFibGU8QXV0aGVudGljYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmluc3RhbmNlLnNzb1NpbGVudChyZXF1ZXN0KSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgbG9nZ2VyIGZvciBtc2FsLWFuZ3VsYXIuXG4gICAqIElmIG5vIGxvZ2dlciBzZXQsIHJldHVybnMgbG9nZ2VyIGluc3RhbmNlIGNyZWF0ZWQgd2l0aCBzYW1lIG9wdGlvbnMgYXMgbXNhbC1icm93c2VyXG4gICAqL1xuICBnZXRMb2dnZXIoKTogTG9nZ2VyIHtcbiAgICBpZiAoIXRoaXMubG9nZ2VyKSB7XG4gICAgICB0aGlzLmxvZ2dlciA9IHRoaXMuaW5zdGFuY2UuZ2V0TG9nZ2VyKCkuY2xvbmUobmFtZSwgdmVyc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvZ2dlcjtcbiAgfVxuICAvLyBDcmVhdGUgYSBsb2dnZXIgaW5zdGFuY2UgZm9yIG1zYWwtYW5ndWxhciB3aXRoIHRoZSBzYW1lIG9wdGlvbnMgYXMgbXNhbC1icm93c2VyXG4gIHNldExvZ2dlcihsb2dnZXI6IExvZ2dlcik6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyLmNsb25lKG5hbWUsIHZlcnNpb24pO1xuICAgIHRoaXMuaW5zdGFuY2Uuc2V0TG9nZ2VyKGxvZ2dlcik7XG4gIH1cbn1cbiJdfQ==
@@ -1,4 +0,0 @@
1
- /* eslint-disable header/header */
2
- export const name = '@azure/msal-angular';
3
- export const version = '3.0.0-beta.0';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZU1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhY2thZ2VNZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQ0FBa0M7QUFDbEMsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLHFCQUFxQixDQUFDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBoZWFkZXIvaGVhZGVyICovXG5leHBvcnQgY29uc3QgbmFtZSA9ICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gJzMuMC4wLWJldGEuMCc7XG4iXX0=
@@ -1,18 +0,0 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVIOzs7R0FHRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBS3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU1yRCxPQUFPLEVBQ0wsYUFBYSxFQUNiLGlCQUFpQixFQUNqQix1QkFBdUIsRUFDdkIscUJBQXFCLEdBQ3RCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKiBAbW9kdWxlIEBhenVyZS9tc2FsLWFuZ3VsYXJcbiAqL1xuXG5leHBvcnQgeyBNc2FsU2VydmljZSB9IGZyb20gJy4vbXNhbC5zZXJ2aWNlJztcbmV4cG9ydCB7IElNc2FsU2VydmljZSB9IGZyb20gJy4vSU1zYWxTZXJ2aWNlJztcbmV4cG9ydCB7IE1zYWxHdWFyZCB9IGZyb20gJy4vbXNhbC5ndWFyZCc7XG5leHBvcnQge1xuICBNc2FsR3VhcmRDb25maWd1cmF0aW9uLFxuICBNc2FsR3VhcmRBdXRoUmVxdWVzdCxcbn0gZnJvbSAnLi9tc2FsLmd1YXJkLmNvbmZpZyc7XG5leHBvcnQgeyBNc2FsSW50ZXJjZXB0b3IgfSBmcm9tICcuL21zYWwuaW50ZXJjZXB0b3InO1xuZXhwb3J0IHtcbiAgTXNhbEludGVyY2VwdG9yQ29uZmlndXJhdGlvbixcbiAgTXNhbEludGVyY2VwdG9yQXV0aFJlcXVlc3QsXG4gIFByb3RlY3RlZFJlc291cmNlU2NvcGVzLFxufSBmcm9tICcuL21zYWwuaW50ZXJjZXB0b3IuY29uZmlnJztcbmV4cG9ydCB7XG4gIE1TQUxfSU5TVEFOQ0UsXG4gIE1TQUxfR1VBUkRfQ09ORklHLFxuICBNU0FMX0lOVEVSQ0VQVE9SX0NPTkZJRyxcbiAgTVNBTF9CUk9BRENBU1RfQ09ORklHLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgeyBNc2FsQnJvYWRjYXN0U2VydmljZSB9IGZyb20gJy4vbXNhbC5icm9hZGNhc3Quc2VydmljZSc7XG5leHBvcnQgeyBNc2FsQnJvYWRjYXN0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vbXNhbC5icm9hZGNhc3QuY29uZmlnJztcbmV4cG9ydCB7IE1zYWxNb2R1bGUgfSBmcm9tICcuL21zYWwubW9kdWxlJztcbmV4cG9ydCB7IE1zYWxSZWRpcmVjdENvbXBvbmVudCB9IGZyb20gJy4vbXNhbC5yZWRpcmVjdC5jb21wb25lbnQnO1xuZXhwb3J0IHsgTXNhbEN1c3RvbU5hdmlnYXRpb25DbGllbnQgfSBmcm9tICcuL21zYWwubmF2aWdhdGlvbi5jbGllbnQnO1xuZXhwb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4vcGFja2FnZU1ldGFkYXRhJztcbiJdfQ==