ngx-oauth 7.0.1 → 8.0.2

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.
@@ -1,302 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { HttpParams } from '@angular/common/http';
3
- import { catchError, concatMap, delay, filter, map, shareReplay, switchMap, tap } from 'rxjs/operators';
4
- import { firstValueFrom, from, noop, of, ReplaySubject, throwError } from 'rxjs';
5
- import { HEADER_APPLICATION, OAuthStatus, OAuthType } from '../models';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../config";
8
- import * as i2 from "./o-auth-token.service";
9
- import * as i3 from "@angular/common/http";
10
- import * as i4 from "@angular/common";
11
- const arrToString = (buf) => buf.reduce((s, b) => s + String.fromCharCode(b), '');
12
- const base64url = (str) => btoa(str)
13
- .replace(/\+/g, '-')
14
- .replace(/\//g, '_')
15
- .replace(/=/g, '');
16
- const randomString = (length = 48) => {
17
- const buff = arrToString(crypto.getRandomValues(new Uint8Array(length * 2)));
18
- return base64url(buff).substring(0, length);
19
- };
20
- const pkce = async (value) => {
21
- const buff = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(value));
22
- return base64url(arrToString(new Uint8Array(buff)));
23
- };
24
- const parseOauthUri = (hash) => {
25
- const regex = /([^&=]+)=([^&]*)/g;
26
- const params = {};
27
- let m;
28
- // tslint:disable-next-line:no-conditional-assignment
29
- while ((m = regex.exec(hash)) !== null) {
30
- params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
31
- }
32
- return Object.keys(params).length && params || {};
33
- };
34
- const jwt = (token) => JSON.parse(atob(token.split('.')[1]));
35
- export class OAuthService {
36
- get storageKey() {
37
- return this.authConfig.storageKey;
38
- }
39
- set storageKey(storageKey) {
40
- if (storageKey) {
41
- this.authConfig.storageKey = storageKey;
42
- this.tokenService.token = this.tokenService.saved;
43
- }
44
- }
45
- get token() {
46
- return this.tokenService.token;
47
- }
48
- set token(token) {
49
- this.tokenService.token = token;
50
- }
51
- get config() {
52
- return this.authConfig.config;
53
- }
54
- set config(config) {
55
- if (config) {
56
- this.authConfig.config = {
57
- ...this.authConfig.config,
58
- ...config
59
- };
60
- }
61
- }
62
- constructor(authConfig, tokenService, http, locationService) {
63
- this.authConfig = authConfig;
64
- this.tokenService = tokenService;
65
- this.http = http;
66
- this.locationService = locationService;
67
- this.state$ = new ReplaySubject(1);
68
- this.config$ = of(this.config).pipe(filter(Boolean), filter(config => !!config?.clientId), map(config => config), switchMap(config => !config.issuerPath && of(config) || this.http.get(`${config.issuerPath}/.well-known/openid-configuration?client_id=${config.clientId}`).pipe(tap(v => this.config = {
69
- ...v.authorization_endpoint && { authorizePath: v.authorization_endpoint } || {},
70
- ...v.token_endpoint && { tokenPath: v.token_endpoint } || {},
71
- ...v.revocation_endpoint && { revokePath: v.revocation_endpoint } || {},
72
- ...v.code_challenge_methods_supported && { pkce: v.code_challenge_methods_supported.indexOf('S256') > -1 } || {},
73
- ...v.userinfo_endpoint && { userPath: v.userinfo_endpoint } || {},
74
- ...v.introspection_endpoint && { introspectionPath: v.introspection_endpoint } || {},
75
- ...v.end_session_endpoint && { logoutPath: v.end_session_endpoint } || {},
76
- ...{ scope: config.scope || 'openid' }
77
- }), map(() => this.config))), shareReplay(1));
78
- this.token$ = this.config$.pipe(tap(config => {
79
- const { hash, search, origin, pathname } = this.authConfig.location || {};
80
- const isImplicitRedirect = hash && /(access_token=)|(error=)/.test(hash);
81
- const isAuthCodeRedirect = search && /(code=)|(error=)/.test(search) || hash && /(code=)|(error=)/.test(hash);
82
- if (isImplicitRedirect) {
83
- const parameters = parseOauthUri(hash.substring(1));
84
- this.token = {
85
- ...parameters,
86
- type: OAuthType.IMPLICIT,
87
- };
88
- this.checkResponse(this.token, parameters);
89
- }
90
- else if (isAuthCodeRedirect) {
91
- const parameters = parseOauthUri(search && search.substring(1) || hash && hash.substring(1) || '');
92
- if (!this.checkResponse(this.token, parameters)) {
93
- this.token = parameters;
94
- }
95
- else {
96
- const newParametersString = this.getCleanedUnSearchParameters();
97
- const { clientId, clientSecret, tokenPath, scope } = config;
98
- const { codeVerifier } = this.token || {}; //should be set by authorizationUrl construction
99
- this.http.post(tokenPath, new HttpParams({
100
- fromObject: {
101
- code: parameters?.['code'],
102
- client_id: clientId,
103
- ...clientSecret && { client_secret: clientSecret } || {},
104
- redirect_uri: `${origin}${pathname}`,
105
- grant_type: 'authorization_code',
106
- ...scope && { scope } || {},
107
- ...codeVerifier && { code_verifier: codeVerifier } || {}
108
- }
109
- }), { headers: HEADER_APPLICATION }).pipe().subscribe(token => {
110
- this.token = {
111
- ...token,
112
- type: OAuthType.AUTHORIZATION_CODE
113
- };
114
- this.locationService.replaceState(`${pathname}${newParametersString}`);
115
- });
116
- }
117
- }
118
- }), switchMap(() => this.tokenService.token$), shareReplay(1));
119
- this.status$ = this.token$.pipe(map(token => token.access_token && OAuthStatus.AUTHORIZED || token.error && OAuthStatus.DENIED || OAuthStatus.NOT_AUTHORIZED), shareReplay(1));
120
- this.userInfo$ = this.status$.pipe(filter(s => s === OAuthStatus.AUTHORIZED), map(() => this.config.userPath), filter(Boolean), switchMap(path => this.getUserInfo(path)), shareReplay(1));
121
- this.type$ = this.tokenService.type$;
122
- this.ignorePaths = this.authConfig.ignorePaths || [];
123
- }
124
- async login(parameters) {
125
- if (!!parameters && parameters.password) {
126
- await this.resourceLogin(parameters);
127
- }
128
- else if (!!parameters && parameters.redirectUri && parameters.responseType) {
129
- await this.toAuthorizationUrl(parameters);
130
- }
131
- else {
132
- await this.clientCredentialLogin();
133
- }
134
- }
135
- logout(useLogoutUrl) {
136
- this.revoke();
137
- this.token = {};
138
- const { logoutPath, logoutRedirectUri } = this.authConfig.config;
139
- if (useLogoutUrl && logoutPath) {
140
- const { origin, pathname } = this.authConfig.location || {};
141
- const currentPath = `${origin}${pathname}`;
142
- this.authConfig.location?.replace(`${logoutPath}?post_logout_redirect_uri=${logoutRedirectUri || currentPath}`);
143
- }
144
- }
145
- getUserInfo(path) {
146
- const { userPath } = this.config;
147
- return this.http.get(path || userPath);
148
- }
149
- revoke() {
150
- const { revokePath, clientId, clientSecret } = this.authConfig.config;
151
- if (revokePath) {
152
- const { access_token, refresh_token } = this.token || {};
153
- const toRevoke = [];
154
- if (access_token) {
155
- toRevoke.push({
156
- ...clientId && { client_id: clientId } || {},
157
- ...clientSecret && { client_secret: clientSecret } || {},
158
- token: access_token,
159
- token_type_hint: 'access_token'
160
- });
161
- }
162
- if (refresh_token) {
163
- toRevoke.push({
164
- ...clientId && { client_id: clientId } || {},
165
- ...clientSecret && { client_secret: clientSecret } || {},
166
- token: refresh_token,
167
- token_type_hint: 'refresh_token'
168
- });
169
- }
170
- from(toRevoke).pipe(concatMap(o => of(o).pipe(delay(300))), // space request to avoid cancellation
171
- switchMap(o => this.http.post(revokePath, new HttpParams({ fromObject: o })))).subscribe(noop);
172
- }
173
- }
174
- clientCredentialLogin() {
175
- const { clientId, clientSecret, tokenPath, scope } = this.authConfig.config;
176
- return firstValueFrom(this.http.post(tokenPath, new HttpParams({
177
- fromObject: {
178
- client_id: clientId,
179
- client_secret: clientSecret,
180
- grant_type: OAuthType.CLIENT_CREDENTIAL,
181
- ...scope ? { scope } : {},
182
- }
183
- }), { headers: HEADER_APPLICATION }).pipe(catchError((err) => {
184
- this.token = err;
185
- return throwError(() => err);
186
- }), tap(params => {
187
- this.token = {
188
- ...params,
189
- type: OAuthType.CLIENT_CREDENTIAL,
190
- };
191
- })));
192
- }
193
- resourceLogin(parameters) {
194
- const { clientId, clientSecret, tokenPath, scope } = this.authConfig.config;
195
- const { username, password } = parameters;
196
- return firstValueFrom(this.http.post(tokenPath, new HttpParams({
197
- fromObject: {
198
- client_id: clientId,
199
- ...clientSecret && { client_secret: clientSecret } || {},
200
- grant_type: OAuthType.RESOURCE,
201
- ...scope && { scope } || {},
202
- username,
203
- password
204
- }
205
- }), { headers: HEADER_APPLICATION }).pipe(catchError(err => {
206
- this.token = err;
207
- return throwError(() => err);
208
- }), tap(params => {
209
- this.token = {
210
- ...params,
211
- type: OAuthType.RESOURCE,
212
- };
213
- })));
214
- }
215
- async toAuthorizationUrl(parameters) {
216
- const { config, location } = this.authConfig;
217
- let authorizationUrl = `${config.authorizePath}`;
218
- authorizationUrl += config.authorizePath.includes('?') && '&' || '?';
219
- authorizationUrl += `client_id=${config.clientId}`;
220
- authorizationUrl += `&redirect_uri=${encodeURIComponent(parameters.redirectUri)}`;
221
- authorizationUrl += `&response_type=${parameters.responseType}`;
222
- authorizationUrl += `&scope=${encodeURIComponent(config.scope || '')}`;
223
- authorizationUrl += `&state=${encodeURIComponent(parameters.state || '')}`;
224
- return location?.replace(`${authorizationUrl}${this.generateNonce(config)}${await this.generateCodeChallenge(config)}`);
225
- }
226
- async generateCodeChallenge(config) {
227
- if (config.pkce) {
228
- const codeVerifier = randomString();
229
- this.token = { ...this.token, codeVerifier };
230
- return `&code_challenge=${await pkce(codeVerifier)}&code_challenge_method=S256`;
231
- }
232
- return '';
233
- }
234
- generateNonce(config) {
235
- if (config && config.scope && config.scope.indexOf('openid') > -1) {
236
- const nonce = randomString(10);
237
- this.token = { ...this.token, nonce };
238
- return `&nonce=${nonce}`;
239
- }
240
- return '';
241
- }
242
- checkResponse(token, parameters) {
243
- this.emitState(parameters);
244
- this.cleanLocationHash();
245
- if (!parameters || parameters['error']) {
246
- return false;
247
- }
248
- if (token && token.nonce && parameters['access_token']) {
249
- const jwtToken = jwt(parameters['access_token']);
250
- return token.nonce === jwtToken.nonce;
251
- }
252
- return parameters['access_token'] || parameters['code'];
253
- }
254
- getCleanedUnSearchParameters() {
255
- const { search } = this.authConfig.location || {};
256
- let searchString = search && search.substring(1) || '';
257
- const hashKeys = ['code', 'state', 'error', 'error_description', 'session_state', 'scope', 'authuser', 'prompt', 'iss'];
258
- hashKeys.forEach(hashKey => {
259
- const re = new RegExp('&' + hashKey + '(=[^&]*)?|^' + hashKey + '(=[^&]*)?&?');
260
- searchString = searchString.replace(re, '');
261
- });
262
- return searchString.length && `?${searchString}` || '';
263
- }
264
- cleanLocationHash() {
265
- if (this.authConfig.location) {
266
- const { hash } = this.authConfig.location;
267
- let curHash = hash && hash.substring(1) || '';
268
- const hashKeys = [
269
- 'access_token',
270
- 'token_type',
271
- 'expires_in',
272
- 'scope',
273
- 'state',
274
- 'error',
275
- 'error_description',
276
- 'session_state',
277
- 'nonce',
278
- 'id_token',
279
- 'code',
280
- 'iss'
281
- ];
282
- hashKeys.forEach(hashKey => {
283
- const re = new RegExp('&' + hashKey + '(=[^&]*)?|^' + hashKey + '(=[^&]*)?&?');
284
- curHash = curHash.replace(re, '');
285
- });
286
- this.authConfig.location.hash = curHash;
287
- }
288
- }
289
- emitState(parameters) {
290
- const { state } = parameters || {};
291
- state && this.state$.next(state);
292
- }
293
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: OAuthService, deps: [{ token: i1.OAuthConfig }, { token: i2.OAuthTokenService }, { token: i3.HttpClient }, { token: i4.Location }], target: i0.ɵɵFactoryTarget.Injectable }); }
294
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: OAuthService, providedIn: 'root' }); }
295
- }
296
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: OAuthService, decorators: [{
297
- type: Injectable,
298
- args: [{
299
- providedIn: 'root',
300
- }]
301
- }], ctorParameters: () => [{ type: i1.OAuthConfig }, { type: i2.OAuthTokenService }, { type: i3.HttpClient }, { type: i4.Location }] });
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hdXRoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2F1dGgvc3JjL3NlcnZpY2VzL28tYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFhLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEcsT0FBTyxFQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFHTCxrQkFBa0IsRUFFbEIsV0FBVyxFQUVYLFNBQVMsRUFNVixNQUFNLFdBQVcsQ0FBQzs7Ozs7O0FBS25CLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBZSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFOUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7S0FDekMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7S0FDbkIsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7S0FDbkIsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVyQixNQUFNLFlBQVksR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRSxFQUFFO0lB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T0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN6QixNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsT0FBTyxHQUFHLGFBQWEsR0FBRyxPQUFPLEdBQUcsYUFBYSxDQUFDLENBQUM7Z0JBQy9FLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFTyxTQUFTLENBQUMsVUFBbUM7UUFDbkQsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDakMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7OEdBbFRVLFlBQVk7a0hBQVosWUFBWSxjQUZYLE1BQU07OzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBjb25jYXRNYXAsIGRlbGF5LCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge2ZpcnN0VmFsdWVGcm9tLCBmcm9tLCBub29wLCBvZiwgUmVwbGF5U3ViamVjdCwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBBdXRob3JpemF0aW9uQ29kZUNvbmZpZyxcbiAgQXV0aG9yaXphdGlvblBhcmFtZXRlcnMsXG4gIEhFQURFUl9BUFBMSUNBVElPTixcbiAgT0F1dGhQYXJhbWV0ZXJzLFxuICBPQXV0aFN0YXR1cyxcbiAgT0F1dGhUb2tlbixcbiAgT0F1dGhUeXBlLFxuICBPQXV0aFR5cGVDb25maWcsXG4gIE9wZW5JZENvbmZpZyxcbiAgT3BlbklkQ29uZmlndXJhdGlvbixcbiAgUmVzb3VyY2VQYXJhbWV0ZXJzLFxuICBVc2VySW5mb1xufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtMb2NhdGlvbiBhcyBMb2NhdGlvbjJ9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge09BdXRoVG9rZW5TZXJ2aWNlfSBmcm9tICcuL28tYXV0aC10b2tlbi5zZXJ2aWNlJztcbmltcG9ydCB7T0F1dGhDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XG5cbmNvbnN0IGFyclRvU3RyaW5nID0gKGJ1ZjogVWludDhBcnJheSkgPT4gYnVmLnJlZHVjZSgocywgYikgPT4gcyArIFN0cmluZy5mcm9tQ2hhckNvZGUoYiksICcnKTtcblxuY29uc3QgYmFzZTY0dXJsID0gKHN0cjogc3RyaW5nKSA9PiBidG9hKHN0cilcbiAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gIC5yZXBsYWNlKC9cXC8vZywgJ18nKVxuICAucmVwbGFjZSgvPS9nLCAnJyk7XG5cbmNvbnN0IHJhbmRvbVN0cmluZyA9IChsZW5ndGg6IG51bWJlciA9IDQ4KSA9PiB7XG4gIGNvbnN0IGJ1ZmYgPSBhcnJUb1N0cmluZyhjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KGxlbmd0aCAqIDIpKSk7XG4gIHJldHVybiBiYXNlNjR1cmwoYnVmZikuc3Vic3RyaW5nKDAsIGxlbmd0aCk7XG59O1xuXG5jb25zdCBwa2NlID0gYXN5bmMgKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgYnVmZiA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JywgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbHVlKSk7XG4gIHJldHVybiBiYXNlNjR1cmwoYXJyVG9TdHJpbmcobmV3IFVpbnQ4QXJyYXkoYnVmZikpKTtcbn07XG5cbmNvbnN0IHBhcnNlT2F1dGhVcmkgPSAoaGFzaDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHJlZ2V4ID0gLyhbXiY9XSspPShbXiZdKikvZztcbiAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGxldCBtO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tY29uZGl0aW9uYWwtYXNzaWdubWVudFxuICB3aGlsZSAoKG0gPSByZWdleC5leGVjKGhhc2gpKSAhPT0gbnVsbCkge1xuICAgIHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQobVsxXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KG1bMl0pO1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCAmJiBwYXJhbXMgfHwge307XG59O1xuXG5jb25zdCBqd3QgPSAodG9rZW46IHN0cmluZykgPT4gSlNPTi5wYXJzZShhdG9iKHRva2VuLnNwbGl0KCcuJylbMV0pKTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE9BdXRoU2VydmljZSB7XG5cbiAgc3RhdGUkID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nPigxKTtcbiAgY29uZmlnJCA9IG9mKHRoaXMuY29uZmlnKS5waXBlKFxuICAgIGZpbHRlcihCb29sZWFuKSxcbiAgICBmaWx0ZXIoY29uZmlnID0+ICEhY29uZmlnPy5jbGllbnRJZCksXG4gICAgbWFwKGNvbmZpZyA9PiBjb25maWcgYXMgT3BlbklkQ29uZmlnKSxcbiAgICBzd2l0Y2hNYXAoY29uZmlnID0+ICFjb25maWcuaXNzdWVyUGF0aCAmJiBvZihjb25maWcpIHx8IHRoaXMuaHR0cC5nZXQ8T3BlbklkQ29uZmlndXJhdGlvbj4oYCR7Y29uZmlnLmlzc3VlclBhdGh9Ly53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uP2NsaWVudF9pZD0ke2NvbmZpZy5jbGllbnRJZH1gKS5waXBlKFxuICAgICAgdGFwKHYgPT4gdGhpcy5jb25maWcgPSB7XG4gICAgICAgIC4uLnYuYXV0aG9yaXphdGlvbl9lbmRwb2ludCAmJiB7YXV0aG9yaXplUGF0aDogdi5hdXRob3JpemF0aW9uX2VuZHBvaW50fSB8fCB7fSxcbiAgICAgICAgLi4udi50b2tlbl9lbmRwb2ludCAmJiB7dG9rZW5QYXRoOiB2LnRva2VuX2VuZHBvaW50fSB8fCB7fSxcbiAgICAgICAgLi4udi5yZXZvY2F0aW9uX2VuZHBvaW50ICYmIHtyZXZva2VQYXRoOiB2LnJldm9jYXRpb25fZW5kcG9pbnR9IHx8IHt9LFxuICAgICAgICAuLi52LmNvZGVfY2hhbGxlbmdlX21ldGhvZHNfc3VwcG9ydGVkICYmIHtwa2NlOiB2LmNvZGVfY2hhbGxlbmdlX21ldGhvZHNfc3VwcG9ydGVkLmluZGV4T2YoJ1MyNTYnKSA+IC0xfSB8fCB7fSxcbiAgICAgICAgLi4udi51c2VyaW5mb19lbmRwb2ludCAmJiB7dXNlclBhdGg6IHYudXNlcmluZm9fZW5kcG9pbnR9IHx8IHt9LFxuICAgICAgICAuLi52LmludHJvc3BlY3Rpb25fZW5kcG9pbnQgJiYge2ludHJvc3BlY3Rpb25QYXRoOiB2LmludHJvc3BlY3Rpb25fZW5kcG9pbnR9IHx8IHt9LFxuICAgICAgICAuLi52LmVuZF9zZXNzaW9uX2VuZHBvaW50ICYmIHtsb2dvdXRQYXRoOiB2LmVuZF9zZXNzaW9uX2VuZHBvaW50fSB8fCB7fSxcbiAgICAgICAgLi4ue3Njb3BlOiBjb25maWcuc2NvcGUgfHwgJ29wZW5pZCd9XG4gICAgICB9IGFzIGFueSksXG4gICAgICBtYXAoKCkgPT4gdGhpcy5jb25maWcpXG4gICAgKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcbiAgdG9rZW4kID0gdGhpcy5jb25maWckLnBpcGUoXG4gICAgdGFwKGNvbmZpZyA9PiB7XG4gICAgICBjb25zdCB7aGFzaCwgc2VhcmNoLCBvcmlnaW4sIHBhdGhuYW1lfSA9IHRoaXMuYXV0aENvbmZpZy5sb2NhdGlvbiB8fCB7fTtcbiAgICAgIGNvbnN0IGlzSW1wbGljaXRSZWRpcmVjdCA9IGhhc2ggJiYgLyhhY2Nlc3NfdG9rZW49KXwoZXJyb3I9KS8udGVzdChoYXNoKTtcbiAgICAgIGNvbnN0IGlzQXV0aENvZGVSZWRpcmVjdCA9IHNlYXJjaCAmJiAvKGNvZGU9KXwoZXJyb3I9KS8udGVzdChzZWFyY2gpIHx8IGhhc2ggJiYgLyhjb2RlPSl8KGVycm9yPSkvLnRlc3QoaGFzaCk7XG4gICAgICBpZiAoaXNJbXBsaWNpdFJlZGlyZWN0KSB7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJzZU9hdXRoVXJpKGhhc2guc3Vic3RyaW5nKDEpKTtcbiAgICAgICAgdGhpcy50b2tlbiA9IHtcbiAgICAgICAgICAuLi5wYXJhbWV0ZXJzLFxuICAgICAgICAgIHR5cGU6IE9BdXRoVHlwZS5JTVBMSUNJVCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jaGVja1Jlc3BvbnNlKHRoaXMudG9rZW4sIHBhcmFtZXRlcnMpO1xuICAgICAgfSBlbHNlIGlmIChpc0F1dGhDb2RlUmVkaXJlY3QpIHtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHBhcnNlT2F1dGhVcmkoc2VhcmNoICYmIHNlYXJjaC5zdWJzdHJpbmcoMSkgfHwgaGFzaCAmJiBoYXNoLnN1YnN0cmluZygxKSB8fCAnJyk7XG4gICAgICAgIGlmICghdGhpcy5jaGVja1Jlc3BvbnNlKHRoaXMudG9rZW4sIHBhcmFtZXRlcnMpKSB7XG4gICAgICAgICAgdGhpcy50b2tlbiA9IHBhcmFtZXRlcnM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbmV3UGFyYW1ldGVyc1N0cmluZyA9IHRoaXMuZ2V0Q2xlYW5lZFVuU2VhcmNoUGFyYW1ldGVycygpO1xuICAgICAgICAgIGNvbnN0IHtjbGllbnRJZCwgY2xpZW50U2VjcmV0LCB0b2tlblBhdGgsIHNjb3BlfSA9IGNvbmZpZyBhcyBBdXRob3JpemF0aW9uQ29kZUNvbmZpZztcbiAgICAgICAgICBjb25zdCB7Y29kZVZlcmlmaWVyfSA9IHRoaXMudG9rZW4gfHwge307IC8vc2hvdWxkIGJlIHNldCBieSBhdXRob3JpemF0aW9uVXJsIGNvbnN0cnVjdGlvblxuICAgICAgICAgIHRoaXMuaHR0cC5wb3N0KHRva2VuUGF0aCwgbmV3IEh0dHBQYXJhbXMoe1xuICAgICAgICAgICAgZnJvbU9iamVjdDoge1xuICAgICAgICAgICAgICBjb2RlOiBwYXJhbWV0ZXJzPy5bJ2NvZGUnXSxcbiAgICAgICAgICAgICAgY2xpZW50X2lkOiBjbGllbnRJZCxcbiAgICAgICAgICAgICAgLi4uY2xpZW50U2VjcmV0ICYmIHtjbGllbnRfc2VjcmV0OiBjbGllbnRTZWNyZXR9IHx8IHt9LFxuICAgICAgICAgICAgICByZWRpcmVjdF91cmk6IGAke29yaWdpbn0ke3BhdGhuYW1lfWAsXG4gICAgICAgICAgICAgIGdyYW50X3R5cGU6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgICAgICAgICAgICAuLi5zY29wZSAmJiB7c2NvcGV9IHx8IHt9LFxuICAgICAgICAgICAgICAuLi5jb2RlVmVyaWZpZXIgJiYge2NvZGVfdmVyaWZpZXI6IGNvZGVWZXJpZmllcn0gfHwge31cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSwge2hlYWRlcnM6IEhFQURFUl9BUFBMSUNBVElPTn0pLnBpcGUoXG4gICAgICAgICAgKS5zdWJzY3JpYmUodG9rZW4gPT4ge1xuICAgICAgICAgICAgdGhpcy50b2tlbiA9IHtcbiAgICAgICAgICAgICAgLi4udG9rZW4sXG4gICAgICAgICAgICAgIHR5cGU6IE9BdXRoVHlwZS5BVVRIT1JJWkFUSU9OX0NPREVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9uU2VydmljZS5yZXBsYWNlU3RhdGUoYCR7cGF0aG5hbWV9JHtuZXdQYXJhbWV0ZXJzU3RyaW5nfWApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMudG9rZW5TZXJ2aWNlLnRva2VuJCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcbiAgc3RhdHVzJCA9IHRoaXMudG9rZW4kLnBpcGUoXG4gICAgbWFwKHRva2VuID0+IHRva2VuLmFjY2Vzc190b2tlbiAmJiBPQXV0aFN0YXR1cy5BVVRIT1JJWkVEIHx8IHRva2VuLmVycm9yICYmIE9BdXRoU3RhdHVzLkRFTklFRCB8fCBPQXV0aFN0YXR1cy5OT1RfQVVUSE9SSVpFRCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcbiAgdXNlckluZm8kID0gdGhpcy5zdGF0dXMkLnBpcGUoXG4gICAgZmlsdGVyKHMgPT4gcyA9PT0gT0F1dGhTdGF0dXMuQVVUSE9SSVpFRCksXG4gICAgbWFwKCgpID0+ICh0aGlzLmNvbmZpZyBhcyBhbnkpLnVzZXJQYXRoKSxcbiAgICBmaWx0ZXIoQm9vbGVhbiksXG4gICAgc3dpdGNoTWFwKHBhdGggPT4gdGhpcy5nZXRVc2VySW5mbyhwYXRoKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcbiAgdHlwZSQgPSB0aGlzLnRva2VuU2VydmljZS50eXBlJDtcbiAgaWdub3JlUGF0aHMgPSB0aGlzLmF1dGhDb25maWcuaWdub3JlUGF0aHMgfHwgW107XG5cbiAgZ2V0IHN0b3JhZ2VLZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aENvbmZpZy5zdG9yYWdlS2V5O1xuICB9XG5cbiAgc2V0IHN0b3JhZ2VLZXkoc3RvcmFnZUtleSkge1xuICAgIGlmIChzdG9yYWdlS2V5KSB7XG4gICAgICB0aGlzLmF1dGhDb25maWcuc3RvcmFnZUtleSA9IHN0b3JhZ2VLZXk7XG4gICAgICB0aGlzLnRva2VuU2VydmljZS50b2tlbiA9IHRoaXMudG9rZW5TZXJ2aWNlLnNhdmVkO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0b2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlblNlcnZpY2UudG9rZW47XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW4pIHtcbiAgICB0aGlzLnRva2VuU2VydmljZS50b2tlbiA9IHRva2VuO1xuICB9XG5cbiAgZ2V0IGNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoQ29uZmlnLmNvbmZpZztcbiAgfVxuXG4gIHNldCBjb25maWcoY29uZmlnOiBPQXV0aFR5cGVDb25maWcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB0aGlzLmF1dGhDb25maWcuY29uZmlnID0ge1xuICAgICAgICAuLi50aGlzLmF1dGhDb25maWcuY29uZmlnLFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGF1dGhDb25maWc6IE9BdXRoQ29uZmlnLFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgdG9rZW5TZXJ2aWNlOiBPQXV0aFRva2VuU2VydmljZSxcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBsb2NhdGlvblNlcnZpY2U6IExvY2F0aW9uMikge1xuICB9XG5cbiAgYXN5bmMgbG9naW4ocGFyYW1ldGVycz86IE9BdXRoUGFyYW1ldGVycykge1xuICAgIGlmICghIXBhcmFtZXRlcnMgJiYgKHBhcmFtZXRlcnMgYXMgUmVzb3VyY2VQYXJhbWV0ZXJzKS5wYXNzd29yZCkge1xuICAgICAgYXdhaXQgdGhpcy5yZXNvdXJjZUxvZ2luKHBhcmFtZXRlcnMgYXMgUmVzb3VyY2VQYXJhbWV0ZXJzKTtcbiAgICB9IGVsc2UgaWYgKCEhcGFyYW1ldGVycyAmJiAocGFyYW1ldGVycyBhcyBBdXRob3JpemF0aW9uUGFyYW1ldGVycykucmVkaXJlY3RVcmkgJiYgKHBhcmFtZXRlcnMgYXMgQXV0aG9yaXphdGlvblBhcmFtZXRlcnMpLnJlc3BvbnNlVHlwZVxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy50b0F1dGhvcml6YXRpb25VcmwocGFyYW1ldGVycyBhcyBBdXRob3JpemF0aW9uUGFyYW1ldGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50Q3JlZGVudGlhbExvZ2luKCk7XG4gICAgfVxuICB9XG5cbiAgbG9nb3V0KHVzZUxvZ291dFVybD86IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJldm9rZSgpO1xuICAgIHRoaXMudG9rZW4gPSB7fTtcbiAgICBjb25zdCB7bG9nb3V0UGF0aCwgbG9nb3V0UmVkaXJlY3RVcml9ID0gdGhpcy5hdXRoQ29uZmlnLmNvbmZpZyBhcyBhbnk7XG4gICAgaWYgKHVzZUxvZ291dFVybCAmJiBsb2dvdXRQYXRoKSB7XG4gICAgICBjb25zdCB7b3JpZ2luLCBwYXRobmFtZX0gPSB0aGlzLmF1dGhDb25maWcubG9jYXRpb24gfHwge307XG4gICAgICBjb25zdCBjdXJyZW50UGF0aCA9IGAke29yaWdpbn0ke3BhdGhuYW1lfWA7XG4gICAgICB0aGlzLmF1dGhDb25maWcubG9jYXRpb24/LnJlcGxhY2UoYCR7bG9nb3V0UGF0aH0/cG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpPSR7bG9nb3V0UmVkaXJlY3RVcmkgfHwgY3VycmVudFBhdGh9YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VXNlckluZm8ocGF0aD86IHN0cmluZykge1xuICAgIGNvbnN0IHt1c2VyUGF0aH0gPSB0aGlzLmNvbmZpZyBhcyBhbnk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VXNlckluZm8+KHBhdGggfHwgdXNlclBhdGgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJldm9rZSgpIHtcbiAgICBjb25zdCB7cmV2b2tlUGF0aCwgY2xpZW50SWQsIGNsaWVudFNlY3JldH0gPSB0aGlzLmF1dGhDb25maWcuY29uZmlnIGFzIGFueTtcbiAgICBpZiAocmV2b2tlUGF0aCkge1xuICAgICAgY29uc3Qge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbn0gPSB0aGlzLnRva2VuIHx8IHt9O1xuICAgICAgY29uc3QgdG9SZXZva2UgPSBbXTtcbiAgICAgIGlmIChhY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgdG9SZXZva2UucHVzaCh7XG4gICAgICAgICAgLi4uY2xpZW50SWQgJiYge2NsaWVudF9pZDogY2xpZW50SWR9IHx8IHt9LFxuICAgICAgICAgIC4uLmNsaWVudFNlY3JldCAmJiB7Y2xpZW50X3NlY3JldDogY2xpZW50U2VjcmV0fSB8fCB7fSxcbiAgICAgICAgICB0b2tlbjogYWNjZXNzX3Rva2VuLFxuICAgICAgICAgIHRva2VuX3R5cGVfaGludDogJ2FjY2Vzc190b2tlbidcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAocmVmcmVzaF90b2tlbikge1xuICAgICAgICB0b1Jldm9rZS5wdXNoKHtcbiAgICAgICAgICAuLi5jbGllbnRJZCAmJiB7Y2xpZW50X2lkOiBjbGllbnRJZH0gfHwge30sXG4gICAgICAgICAgLi4uY2xpZW50U2VjcmV0ICYmIHtjbGllbnRfc2VjcmV0OiBjbGllbnRTZWNyZXR9IHx8IHt9LFxuICAgICAgICAgIHRva2VuOiByZWZyZXNoX3Rva2VuLFxuICAgICAgICAgIHRva2VuX3R5cGVfaGludDogJ3JlZnJlc2hfdG9rZW4nXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZnJvbSh0b1Jldm9rZSkucGlwZShcbiAgICAgICAgY29uY2F0TWFwKG8gPT4gb2YobykucGlwZShkZWxheSgzMDApKSksIC8vIHNwYWNlIHJlcXVlc3QgdG8gYXZvaWQgY2FuY2VsbGF0aW9uXG4gICAgICAgIHN3aXRjaE1hcChvID0+IHRoaXMuaHR0cC5wb3N0KHJldm9rZVBhdGgsIG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBvfSkpKSxcbiAgICAgICkuc3Vic2NyaWJlKG5vb3ApO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjbGllbnRDcmVkZW50aWFsTG9naW4oKSB7XG4gICAgY29uc3Qge2NsaWVudElkLCBjbGllbnRTZWNyZXQsIHRva2VuUGF0aCwgc2NvcGV9ID0gdGhpcy5hdXRoQ29uZmlnLmNvbmZpZyBhcyBhbnk7XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0KHRva2VuUGF0aCwgbmV3IEh0dHBQYXJhbXMoe1xuICAgICAgZnJvbU9iamVjdDoge1xuICAgICAgICBjbGllbnRfaWQ6IGNsaWVudElkLFxuICAgICAgICBjbGllbnRfc2VjcmV0OiBjbGllbnRTZWNyZXQsXG4gICAgICAgIGdyYW50X3R5cGU6IE9BdXRoVHlwZS5DTElFTlRfQ1JFREVOVElBTCxcbiAgICAgICAgLi4uc2NvcGUgPyB7c2NvcGV9IDoge30sXG4gICAgICB9XG4gICAgfSksIHtoZWFkZXJzOiBIRUFERVJfQVBQTElDQVRJT059KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMudG9rZW4gPSBlcnI7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XG4gICAgICB9KSxcbiAgICAgIHRhcChwYXJhbXMgPT4ge1xuICAgICAgICB0aGlzLnRva2VuID0ge1xuICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICB0eXBlOiBPQXV0aFR5cGUuQ0xJRU5UX0NSRURFTlRJQUwsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvdXJjZUxvZ2luKHBhcmFtZXRlcnM6IFJlc291cmNlUGFyYW1ldGVycykge1xuICAgIGNvbnN0IHtjbGllbnRJZCwgY2xpZW50U2VjcmV0LCB0b2tlblBhdGgsIHNjb3BlfSA9IHRoaXMuYXV0aENvbmZpZy5jb25maWcgYXMgYW55O1xuICAgIGNvbnN0IHt1c2VybmFtZSwgcGFzc3dvcmR9ID0gcGFyYW1ldGVycztcbiAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLnBvc3QodG9rZW5QYXRoLCBuZXcgSHR0cFBhcmFtcyh7XG4gICAgICBmcm9tT2JqZWN0OiB7XG4gICAgICAgIGNsaWVudF9pZDogY2xpZW50SWQsXG4gICAgICAgIC4uLmNsaWVudFNlY3JldCAmJiB7Y2xpZW50X3NlY3JldDogY2xpZW50U2VjcmV0fSB8fCB7fSxcbiAgICAgICAgZ3JhbnRfdHlwZTogT0F1dGhUeXBlLlJFU09VUkNFLFxuICAgICAgICAuLi5zY29wZSAmJiB7c2NvcGV9IHx8IHt9LFxuICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgcGFzc3dvcmRcbiAgICAgIH1cbiAgICB9KSwge2hlYWRlcnM6IEhFQURFUl9BUFBMSUNBVElPTn0pLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgIHRoaXMudG9rZW4gPSBlcnI7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XG4gICAgICB9KSxcbiAgICAgIHRhcChwYXJhbXMgPT4ge1xuICAgICAgICB0aGlzLnRva2VuID0ge1xuICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICB0eXBlOiBPQXV0aFR5cGUuUkVTT1VSQ0UsXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHRvQXV0aG9yaXphdGlvblVybChwYXJhbWV0ZXJzOiBBdXRob3JpemF0aW9uUGFyYW1ldGVycykge1xuICAgIGNvbnN0IHtjb25maWcsIGxvY2F0aW9ufSA9IHRoaXMuYXV0aENvbmZpZyBhcyBhbnk7XG4gICAgbGV0IGF1dGhvcml6YXRpb25VcmwgPSBgJHtjb25maWcuYXV0aG9yaXplUGF0aH1gO1xuICAgIGF1dGhvcml6YXRpb25VcmwgKz0gY29uZmlnLmF1dGhvcml6ZVBhdGguaW5jbHVkZXMoJz8nKSAmJiAnJicgfHwgJz8nO1xuICAgIGF1dGhvcml6YXRpb25VcmwgKz0gYGNsaWVudF9pZD0ke2NvbmZpZy5jbGllbnRJZH1gO1xuICAgIGF1dGhvcml6YXRpb25VcmwgKz0gYCZyZWRpcmVjdF91cmk9JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVycy5yZWRpcmVjdFVyaSl9YDtcbiAgICBhdXRob3JpemF0aW9uVXJsICs9IGAmcmVzcG9uc2VfdHlwZT0ke3BhcmFtZXRlcnMucmVzcG9uc2VUeXBlfWA7XG4gICAgYXV0aG9yaXphdGlvblVybCArPSBgJnNjb3BlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5zY29wZSB8fCAnJyl9YDtcbiAgICBhdXRob3JpemF0aW9uVXJsICs9IGAmc3RhdGU9JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVycy5zdGF0ZSB8fCAnJyl9YDtcbiAgICByZXR1cm4gbG9jYXRpb24/LnJlcGxhY2UoYCR7YXV0aG9yaXphdGlvblVybH0ke3RoaXMuZ2VuZXJhdGVOb25jZShjb25maWcpfSR7YXdhaXQgdGhpcy5nZW5lcmF0ZUNvZGVDaGFsbGVuZ2UoY29uZmlnKX1gKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZW5lcmF0ZUNvZGVDaGFsbGVuZ2UoY29uZmlnOiBhbnkpIHtcbiAgICBpZiAoY29uZmlnLnBrY2UpIHtcbiAgICAgIGNvbnN0IGNvZGVWZXJpZmllciA9IHJhbmRvbVN0cmluZygpO1xuICAgICAgdGhpcy50b2tlbiA9IHsuLi50aGlzLnRva2VuLCBjb2RlVmVyaWZpZXJ9O1xuICAgICAgcmV0dXJuIGAmY29kZV9jaGFsbGVuZ2U9JHthd2FpdCBwa2NlKGNvZGVWZXJpZmllcil9JmNvZGVfY2hhbGxlbmdlX21ldGhvZD1TMjU2YDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdlbmVyYXRlTm9uY2UoY29uZmlnOiBhbnkpIHtcbiAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5zY29wZSAmJiBjb25maWcuc2NvcGUuaW5kZXhPZignb3BlbmlkJykgPiAtMSkge1xuICAgICAgY29uc3Qgbm9uY2UgPSByYW5kb21TdHJpbmcoMTApO1xuICAgICAgdGhpcy50b2tlbiA9IHsuLi50aGlzLnRva2VuLCBub25jZX07XG4gICAgICByZXR1cm4gYCZub25jZT0ke25vbmNlfWA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tSZXNwb25zZSh0b2tlbj86IE9BdXRoVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICAgIHRoaXMuZW1pdFN0YXRlKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuY2xlYW5Mb2NhdGlvbkhhc2goKTtcbiAgICBpZiAoIXBhcmFtZXRlcnMgfHwgcGFyYW1ldGVyc1snZXJyb3InXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodG9rZW4gJiYgdG9rZW4ubm9uY2UgJiYgcGFyYW1ldGVyc1snYWNjZXNzX3Rva2VuJ10pIHtcbiAgICAgIGNvbnN0IGp3dFRva2VuID0gand0KHBhcmFtZXRlcnNbJ2FjY2Vzc190b2tlbiddKTtcbiAgICAgIHJldHVybiB0b2tlbi5ub25jZSA9PT0gand0VG9rZW4ubm9uY2U7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbWV0ZXJzWydhY2Nlc3NfdG9rZW4nXSB8fCBwYXJhbWV0ZXJzWydjb2RlJ107XG4gIH1cblxuICBwcml2YXRlIGdldENsZWFuZWRVblNlYXJjaFBhcmFtZXRlcnMoKSB7XG4gICAgY29uc3Qge3NlYXJjaH0gPSB0aGlzLmF1dGhDb25maWcubG9jYXRpb24gfHwge307XG4gICAgbGV0IHNlYXJjaFN0cmluZyA9IHNlYXJjaCAmJiBzZWFyY2guc3Vic3RyaW5nKDEpIHx8ICcnO1xuICAgIGNvbnN0IGhhc2hLZXlzID0gWydjb2RlJywgJ3N0YXRlJywgJ2Vycm9yJywgJ2Vycm9yX2Rlc2NyaXB0aW9uJywgJ3Nlc3Npb25fc3RhdGUnLCAnc2NvcGUnLCAnYXV0aHVzZXInLCAncHJvbXB0JywgJ2lzcyddO1xuICAgIGhhc2hLZXlzLmZvckVhY2goaGFzaEtleSA9PiB7XG4gICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoJyYnICsgaGFzaEtleSArICcoPVteJl0qKT98XicgKyBoYXNoS2V5ICsgJyg9W14mXSopPyY/Jyk7XG4gICAgICBzZWFyY2hTdHJpbmcgPSBzZWFyY2hTdHJpbmcucmVwbGFjZShyZSwgJycpO1xuICAgIH0pO1xuICAgIHJldHVybiBzZWFyY2hTdHJpbmcubGVuZ3RoICYmIGA/JHtzZWFyY2hTdHJpbmd9YCB8fCAnJztcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5Mb2NhdGlvbkhhc2goKSB7XG4gICAgaWYgKHRoaXMuYXV0aENvbmZpZy5sb2NhdGlvbikge1xuICAgICAgY29uc3Qge2hhc2h9ID0gdGhpcy5hdXRoQ29uZmlnLmxvY2F0aW9uO1xuICAgICAgbGV0IGN1ckhhc2ggPSBoYXNoICYmIGhhc2guc3Vic3RyaW5nKDEpIHx8ICcnO1xuICAgICAgY29uc3QgaGFzaEtleXMgPSBbXG4gICAgICAgICdhY2Nlc3NfdG9rZW4nLFxuICAgICAgICAndG9rZW5fdHlwZScsXG4gICAgICAgICdleHBpcmVzX2luJyxcbiAgICAgICAgJ3Njb3BlJyxcbiAgICAgICAgJ3N0YXRlJyxcbiAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgJ2Vycm9yX2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgJ3Nlc3Npb25fc3RhdGUnLFxuICAgICAgICAnbm9uY2UnLFxuICAgICAgICAnaWRfdG9rZW4nLFxuICAgICAgICAnY29kZScsXG4gICAgICAgICdpc3MnXG4gICAgICBdO1xuICAgICAgaGFzaEtleXMuZm9yRWFjaChoYXNoS2V5ID0+IHtcbiAgICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKCcmJyArIGhhc2hLZXkgKyAnKD1bXiZdKik/fF4nICsgaGFzaEtleSArICcoPVteJl0qKT8mPycpO1xuICAgICAgICBjdXJIYXNoID0gY3VySGFzaC5yZXBsYWNlKHJlLCAnJyk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYXV0aENvbmZpZy5sb2NhdGlvbi5oYXNoID0gY3VySGFzaDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXRTdGF0ZShwYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICAgIGNvbnN0IHtzdGF0ZX0gPSBwYXJhbWV0ZXJzIHx8IHt9O1xuICAgIHN0YXRlICYmIHRoaXMuc3RhdGUkLm5leHQoc3RhdGUpO1xuICB9XG59XG4iXX0=
package/index.d.ts DELETED
@@ -1,4 +0,0 @@
1
- export * from './models';
2
- export * from './config';
3
- export * from './services';
4
- export * from './components';
package/models/index.d.ts DELETED
@@ -1,100 +0,0 @@
1
- import { HttpHeaders } from '@angular/common/http';
2
- export declare const HEADER_APPLICATION: HttpHeaders;
3
- export declare enum OAuthType {
4
- RESOURCE = "password",
5
- AUTHORIZATION_CODE = "code",
6
- IMPLICIT = "token",
7
- CLIENT_CREDENTIAL = "client_credentials"
8
- }
9
- export interface ClientCredentialConfig {
10
- tokenPath: string;
11
- revokePath?: string;
12
- clientId: string;
13
- clientSecret?: string;
14
- scope?: string;
15
- }
16
- export interface ResourceConfig extends ClientCredentialConfig {
17
- }
18
- export interface ImplicitConfig {
19
- authorizePath: string;
20
- revokePath?: string;
21
- clientId: string;
22
- scope?: string;
23
- logoutPath?: string;
24
- logoutRedirectUri?: string;
25
- }
26
- export interface AuthorizationCodeConfig extends ResourceConfig {
27
- authorizePath: string;
28
- }
29
- export interface AuthorizationCodePKCEConfig extends AuthorizationCodeConfig {
30
- pkce: boolean;
31
- }
32
- export interface OpenIdConfig {
33
- issuerPath: string;
34
- clientId: string;
35
- clientSecret?: string;
36
- scope?: string;
37
- }
38
- export interface ResourceParameters {
39
- username: string;
40
- password: string;
41
- }
42
- export interface AuthorizationParameters {
43
- redirectUri: string;
44
- responseType: OAuthType.IMPLICIT | OAuthType.AUTHORIZATION_CODE | string;
45
- state?: string;
46
- }
47
- export type OAuthParameters = ResourceParameters | AuthorizationParameters;
48
- export type OAuthTypeConfig = OpenIdConfig | AuthorizationCodePKCEConfig | AuthorizationCodeConfig | ImplicitConfig | ResourceConfig | ClientCredentialConfig;
49
- export interface OAuthToken {
50
- id_token?: string;
51
- access_token?: string;
52
- refresh_token?: string;
53
- token_type?: string;
54
- state?: string;
55
- error?: string;
56
- error_description?: string;
57
- expires_in?: number | string;
58
- refresh_expires_in?: number | string;
59
- scope?: string;
60
- codeVerifier?: string;
61
- nonce?: string;
62
- type?: OAuthType;
63
- expires?: number;
64
- [x: string]: any;
65
- }
66
- export declare enum OAuthStatus {
67
- NOT_AUTHORIZED = "NOT_AUTHORIZED",
68
- AUTHORIZED = "AUTHORIZED",
69
- DENIED = "DENIED"
70
- }
71
- export interface OpenIdConfiguration {
72
- issuer?: string;
73
- authorization_endpoint?: string;
74
- introspection_endpoint?: string;
75
- token_endpoint?: string;
76
- userinfo_endpoint?: string;
77
- end_session_endpoint?: string;
78
- revocation_endpoint?: string;
79
- scopes_supported?: string[];
80
- code_challenge_methods_supported?: string[];
81
- }
82
- export interface UserInfo {
83
- email?: string;
84
- email_verified?: boolean;
85
- family_name?: string;
86
- given_name?: string;
87
- name?: string;
88
- preferred_username?: string;
89
- sub?: string;
90
- address?: object;
91
- picture?: string;
92
- locale?: string;
93
- }
94
- export interface IntrospectInfo extends UserInfo {
95
- active: boolean;
96
- scope: string;
97
- client_id?: string;
98
- username: string;
99
- exp: number;
100
- }
@@ -1,4 +0,0 @@
1
- export * from './o-auth-http-client';
2
- export * from './o-auth-token.service';
3
- export * from './o-auth.service';
4
- export * from './o-auth.interceptor';
@@ -1,6 +0,0 @@
1
- import { HttpClient } from '@angular/common/http';
2
- import * as i0 from "@angular/core";
3
- export declare abstract class OAuthHttpClient extends HttpClient {
4
- static ɵfac: i0.ɵɵFactoryDeclaration<OAuthHttpClient, never>;
5
- static ɵprov: i0.ɵɵInjectableDeclaration<OAuthHttpClient>;
6
- }
@@ -1,21 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { OAuthToken } from '../models';
3
- import { OAuthHttpClient } from './o-auth-http-client';
4
- import { OAuthConfig } from '../config';
5
- import * as i0 from "@angular/core";
6
- export declare class OAuthTokenService {
7
- #private;
8
- protected authConfig: OAuthConfig;
9
- protected http: OAuthHttpClient;
10
- token$: Observable<OAuthToken>;
11
- type$: Observable<import("../models").OAuthType | undefined>;
12
- accessToken$: Observable<string | undefined>;
13
- constructor(authConfig: OAuthConfig, http: OAuthHttpClient);
14
- get token(): OAuthToken;
15
- set token(token: OAuthToken);
16
- get saved(): OAuthToken;
17
- set saved(token: OAuthToken);
18
- protected refreshToken(token?: OAuthToken): Observable<OAuthToken>;
19
- static ɵfac: i0.ɵɵFactoryDeclaration<OAuthTokenService, never>;
20
- static ɵprov: i0.ɵɵInjectableDeclaration<OAuthTokenService>;
21
- }
@@ -1,2 +0,0 @@
1
- import { HttpInterceptorFn } from '@angular/common/http';
2
- export declare const OAuthInterceptor: HttpInterceptorFn;
@@ -1,42 +0,0 @@
1
- import { HttpClient } from '@angular/common/http';
2
- import { ReplaySubject } from 'rxjs';
3
- import { AuthorizationParameters, OAuthParameters, OAuthStatus, OAuthToken, OAuthType, OAuthTypeConfig, ResourceParameters, UserInfo } from '../models';
4
- import { Location as Location2 } from '@angular/common';
5
- import { OAuthTokenService } from './o-auth-token.service';
6
- import { OAuthConfig } from '../config';
7
- import * as i0 from "@angular/core";
8
- export declare class OAuthService {
9
- protected authConfig: OAuthConfig;
10
- protected tokenService: OAuthTokenService;
11
- protected http: HttpClient;
12
- protected locationService: Location2;
13
- state$: ReplaySubject<string>;
14
- config$: import("rxjs").Observable<OAuthTypeConfig | undefined>;
15
- token$: import("rxjs").Observable<OAuthToken>;
16
- status$: import("rxjs").Observable<OAuthStatus>;
17
- userInfo$: import("rxjs").Observable<UserInfo>;
18
- type$: import("rxjs").Observable<OAuthType | undefined>;
19
- ignorePaths: RegExp[];
20
- get storageKey(): string | undefined;
21
- set storageKey(storageKey: string | undefined);
22
- get token(): OAuthToken;
23
- set token(token: OAuthToken);
24
- get config(): OAuthTypeConfig | undefined;
25
- set config(config: OAuthTypeConfig | undefined);
26
- constructor(authConfig: OAuthConfig, tokenService: OAuthTokenService, http: HttpClient, locationService: Location2);
27
- login(parameters?: OAuthParameters): Promise<void>;
28
- logout(useLogoutUrl?: boolean): void;
29
- getUserInfo(path?: string): import("rxjs").Observable<UserInfo>;
30
- protected revoke(): void;
31
- protected clientCredentialLogin(): Promise<Object>;
32
- protected resourceLogin(parameters: ResourceParameters): Promise<Object>;
33
- protected toAuthorizationUrl(parameters: AuthorizationParameters): Promise<any>;
34
- protected generateCodeChallenge(config: any): Promise<string>;
35
- protected generateNonce(config: any): string;
36
- private checkResponse;
37
- private getCleanedUnSearchParameters;
38
- private cleanLocationHash;
39
- private emitState;
40
- static ɵfac: i0.ɵɵFactoryDeclaration<OAuthService, never>;
41
- static ɵprov: i0.ɵɵInjectableDeclaration<OAuthService>;
42
- }