ngx-oauth 4.2.2 → 5.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.
@@ -1,4 +1,4 @@
1
- import { OnDestroy, TemplateRef } from '@angular/core';
1
+ import { TemplateRef } from '@angular/core';
2
2
  import { Observable } from 'rxjs';
3
3
  import { OAuthParameters, OAuthStatus, OAuthType } from '../../models';
4
4
  import { OAuthService } from '../../services/oauth.service';
@@ -12,7 +12,7 @@ export interface OAuthLoginI18n {
12
12
  authorized?: string;
13
13
  denied?: string;
14
14
  }
15
- export declare class OAuthLoginComponent implements OnDestroy {
15
+ export declare class OAuthLoginComponent {
16
16
  #private;
17
17
  private oauthService;
18
18
  private locationService;
@@ -39,11 +39,10 @@ export declare class OAuthLoginComponent implements OnDestroy {
39
39
  loginFunction: (p: OAuthParameters) => Promise<void>;
40
40
  logoutFunction: () => void;
41
41
  constructor(oauthService: OAuthService, locationService: Location2, location: Location);
42
- ngOnDestroy(): void;
43
42
  logout(): void;
44
43
  login(parameters: OAuthParameters): Promise<void>;
45
44
  toggleCollapse(): void;
46
45
  keyboardEvent(): void;
47
46
  static ɵfac: i0.ɵɵFactoryDeclaration<OAuthLoginComponent, never>;
48
- static ɵcmp: i0.ɵɵComponentDeclaration<OAuthLoginComponent, "oauth-login", never, { "type": "type"; "i18n": "i18n"; "redirectUri": "redirectUri"; "responseType": "responseType"; "useLogoutUrl": "useLogoutUrl"; "state": "state"; "profileName$": "profileName$"; }, { "stateChange": "stateChange"; }, ["loginTemplate"], never, false>;
47
+ static ɵcmp: i0.ɵɵComponentDeclaration<OAuthLoginComponent, "oauth-login", never, { "type": "type"; "i18n": "i18n"; "redirectUri": "redirectUri"; "responseType": "responseType"; "useLogoutUrl": "useLogoutUrl"; "state": "state"; "profileName$": "profileName$"; }, { "stateChange": "stateChange"; }, ["loginTemplate"], never, false, never>;
49
48
  }
@@ -1,7 +1,7 @@
1
- var _OAuthLoginComponent_subscription, _OAuthLoginComponent_redirectUri, _OAuthLoginComponent_responseType, _OAuthLoginComponent_i18n;
1
+ var _OAuthLoginComponent_redirectUri, _OAuthLoginComponent_responseType, _OAuthLoginComponent_i18n;
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
3
  import { Component, ContentChild, HostListener, Inject, Input, Output, ViewEncapsulation } from '@angular/core';
4
- import { Subscription, take } from 'rxjs';
4
+ import { take } from 'rxjs';
5
5
  import { LOCATION, OAuthStatus, OAuthType } from '../../models';
6
6
  import { tap } from 'rxjs/operators';
7
7
  import * as i0 from "@angular/core";
@@ -13,7 +13,6 @@ export class OAuthLoginComponent {
13
13
  this.oauthService = oauthService;
14
14
  this.locationService = locationService;
15
15
  this.location = location;
16
- _OAuthLoginComponent_subscription.set(this, new Subscription());
17
16
  _OAuthLoginComponent_redirectUri.set(this, void 0);
18
17
  _OAuthLoginComponent_responseType.set(this, void 0);
19
18
  _OAuthLoginComponent_i18n.set(this, {
@@ -35,7 +34,7 @@ export class OAuthLoginComponent {
35
34
  this.collapse = false;
36
35
  this.status$ = this.oauthService.status$.pipe(tap(s => {
37
36
  if (s === OAuthStatus.AUTHORIZED && this.profileName$) {
38
- __classPrivateFieldGet(this, _OAuthLoginComponent_subscription, "f").add(this.profileName$.pipe(take(1)).subscribe(n => this.profileName = n));
37
+ this.profileName$.pipe(take(1)).subscribe(n => this.profileName = n);
39
38
  }
40
39
  else {
41
40
  const { token } = this.oauthService;
@@ -71,9 +70,6 @@ export class OAuthLoginComponent {
71
70
  get responseType() {
72
71
  return __classPrivateFieldGet(this, _OAuthLoginComponent_responseType, "f") || this.type;
73
72
  }
74
- ngOnDestroy() {
75
- __classPrivateFieldGet(this, _OAuthLoginComponent_subscription, "f").unsubscribe();
76
- }
77
73
  logout() {
78
74
  this.oauthService.logout(this.useLogoutUrl);
79
75
  }
@@ -88,10 +84,10 @@ export class OAuthLoginComponent {
88
84
  this.collapse = false;
89
85
  }
90
86
  }
91
- _OAuthLoginComponent_subscription = new WeakMap(), _OAuthLoginComponent_redirectUri = new WeakMap(), _OAuthLoginComponent_responseType = new WeakMap(), _OAuthLoginComponent_i18n = new WeakMap();
92
- OAuthLoginComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthLoginComponent, deps: [{ token: i1.OAuthService }, { token: i2.Location }, { token: LOCATION }], target: i0.ɵɵFactoryTarget.Component });
93
- OAuthLoginComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: OAuthLoginComponent, selector: "oauth-login", inputs: { type: "type", i18n: "i18n", redirectUri: "redirectUri", responseType: "responseType", useLogoutUrl: "useLogoutUrl", state: "state", profileName$: "profileName$" }, outputs: { stateChange: "stateChange" }, host: { listeners: { "window:keydown.escape": "keyboardEvent()" } }, queries: [{ propertyName: "loginTemplate", first: true, predicate: ["login"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"loginTemplate; else defaultLogin\"\r\n [ngTemplateOutlet]=\"loginTemplate\"\r\n [ngTemplateOutletContext]=\"{login: loginFunction, logout: logoutFunction, status: status$ | async}\">\r\n</ng-container>\r\n<ng-template #defaultLogin>\r\n <ng-container *ngIf=\"status$ | async as status\">\r\n <ng-container *ngIf=\"type === OAuthType.RESOURCE; else noResource\">\r\n <div class=\"oauth dropdown text-end {{collapse ? 'show': ''}}\">\r\n <button class=\"btn btn-link p-0 dropdown-toggle\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : toggleCollapse()\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </button>\r\n <div class=\"dropdown-menu mr-3 {{collapse ? 'show': ''}}\">\r\n <form class=\"p-3\"\r\n #form=\"ngForm\"\r\n *ngIf=\"status === OAuthStatus.NOT_AUTHORIZED || status === OAuthStatus.DENIED\"\r\n (submit)=\"login({username: username, password: password})\">\r\n <div class=\"mb-3\">\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n name=\"username\"\r\n required\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"i18n.username\">\r\n </div>\r\n <div class=\"mb-3\">\r\n <input type=\"password\"\r\n class=\"form-control\"\r\n name=\"password\"\r\n required\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"i18n.password\">\r\n </div>\r\n <div class=\"text-end\">\r\n <button type=\"submit\"\r\n class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid\">{{i18n.submit}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #noResource>\r\n <a role=\"button\"\r\n class=\"oauth\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : login({responseType: responseType, redirectUri: redirectUri, state:state})\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </a>\r\n </ng-template>\r\n\r\n <ng-template #message>\r\n <span class=\"not-authorized\"\r\n *ngIf=\"status === OAuthStatus.NOT_AUTHORIZED\"\r\n [innerHTML]=\"i18n.notAuthorized\"></span>\r\n <span class=\"authorized\"\r\n *ngIf=\"status === OAuthStatus.AUTHORIZED\">\r\n <span class=\"welcome\" [innerHTML]=\"i18n.authorized + '&nbsp;'\"></span>\r\n <strong class=\"profile-name\"\r\n [innerHTML]=\"profileName\"></strong>\r\n </span>\r\n <span class=\"denied\"\r\n *ngIf=\"status === OAuthStatus.DENIED\"\r\n [innerHTML]=\"i18n.denied\"></span>\r\n </ng-template>\r\n </ng-container>\r\n</ng-template>\r\n\r\n", styles: [".oauth .dropdown-menu{left:auto;right:0;box-shadow:0 5px 10px #0003;min-width:250px}.oauth .dropdown-menu:before{content:\"\";display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:#0003;position:absolute;top:-7px;left:auto;right:15px}.oauth .dropdown-menu:after{content:\"\";display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:auto;right:16px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.None });
94
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthLoginComponent, decorators: [{
87
+ _OAuthLoginComponent_redirectUri = new WeakMap(), _OAuthLoginComponent_responseType = new WeakMap(), _OAuthLoginComponent_i18n = new WeakMap();
88
+ OAuthLoginComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: OAuthLoginComponent, deps: [{ token: i1.OAuthService }, { token: i2.Location }, { token: LOCATION }], target: i0.ɵɵFactoryTarget.Component });
89
+ OAuthLoginComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: OAuthLoginComponent, selector: "oauth-login", inputs: { type: "type", i18n: "i18n", redirectUri: "redirectUri", responseType: "responseType", useLogoutUrl: "useLogoutUrl", state: "state", profileName$: "profileName$" }, outputs: { stateChange: "stateChange" }, host: { listeners: { "window:keydown.escape": "keyboardEvent()" } }, queries: [{ propertyName: "loginTemplate", first: true, predicate: ["login"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"loginTemplate; else defaultLogin\"\r\n [ngTemplateOutlet]=\"loginTemplate\"\r\n [ngTemplateOutletContext]=\"{login: loginFunction, logout: logoutFunction, status: status$ | async}\">\r\n</ng-container>\r\n<ng-template #defaultLogin>\r\n <ng-container *ngIf=\"status$ | async as status\">\r\n <ng-container *ngIf=\"type === OAuthType.RESOURCE; else noResource\">\r\n <div class=\"oauth dropdown text-end {{collapse ? 'show': ''}}\">\r\n <button class=\"btn btn-link p-0 dropdown-toggle\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : toggleCollapse()\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </button>\r\n <div class=\"dropdown-menu mr-3 {{collapse ? 'show': ''}}\">\r\n <form class=\"p-3\"\r\n #form=\"ngForm\"\r\n *ngIf=\"status === OAuthStatus.NOT_AUTHORIZED || status === OAuthStatus.DENIED\"\r\n (submit)=\"login({username: username, password: password})\">\r\n <div class=\"mb-3\">\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n name=\"username\"\r\n required\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"i18n.username\">\r\n </div>\r\n <div class=\"mb-3\">\r\n <input type=\"password\"\r\n class=\"form-control\"\r\n name=\"password\"\r\n required\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"i18n.password\">\r\n </div>\r\n <div class=\"text-end\">\r\n <button type=\"submit\"\r\n class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid\">{{i18n.submit}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #noResource>\r\n <a role=\"button\"\r\n class=\"oauth\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : login({responseType: responseType, redirectUri: redirectUri, state:state})\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </a>\r\n </ng-template>\r\n\r\n <ng-template #message>\r\n <span class=\"not-authorized\"\r\n *ngIf=\"status === OAuthStatus.NOT_AUTHORIZED\"\r\n [innerHTML]=\"i18n.notAuthorized\"></span>\r\n <span class=\"authorized\"\r\n *ngIf=\"status === OAuthStatus.AUTHORIZED\">\r\n <span class=\"welcome\" [innerHTML]=\"i18n.authorized + '&nbsp;'\"></span>\r\n <strong class=\"profile-name\"\r\n [innerHTML]=\"profileName\"></strong>\r\n </span>\r\n <span class=\"denied\"\r\n *ngIf=\"status === OAuthStatus.DENIED\"\r\n [innerHTML]=\"i18n.denied\"></span>\r\n </ng-template>\r\n </ng-container>\r\n</ng-template>\r\n\r\n", styles: [".oauth .dropdown-menu{left:auto;right:0;box-shadow:0 5px 10px #0003;min-width:250px}.oauth .dropdown-menu:before{content:\"\";display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:#0003;position:absolute;top:-7px;left:auto;right:15px}.oauth .dropdown-menu:after{content:\"\";display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:auto;right:16px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.None });
90
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: OAuthLoginComponent, decorators: [{
95
91
  type: Component,
96
92
  args: [{ selector: 'oauth-login', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"loginTemplate; else defaultLogin\"\r\n [ngTemplateOutlet]=\"loginTemplate\"\r\n [ngTemplateOutletContext]=\"{login: loginFunction, logout: logoutFunction, status: status$ | async}\">\r\n</ng-container>\r\n<ng-template #defaultLogin>\r\n <ng-container *ngIf=\"status$ | async as status\">\r\n <ng-container *ngIf=\"type === OAuthType.RESOURCE; else noResource\">\r\n <div class=\"oauth dropdown text-end {{collapse ? 'show': ''}}\">\r\n <button class=\"btn btn-link p-0 dropdown-toggle\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : toggleCollapse()\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </button>\r\n <div class=\"dropdown-menu mr-3 {{collapse ? 'show': ''}}\">\r\n <form class=\"p-3\"\r\n #form=\"ngForm\"\r\n *ngIf=\"status === OAuthStatus.NOT_AUTHORIZED || status === OAuthStatus.DENIED\"\r\n (submit)=\"login({username: username, password: password})\">\r\n <div class=\"mb-3\">\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n name=\"username\"\r\n required\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"i18n.username\">\r\n </div>\r\n <div class=\"mb-3\">\r\n <input type=\"password\"\r\n class=\"form-control\"\r\n name=\"password\"\r\n required\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"i18n.password\">\r\n </div>\r\n <div class=\"text-end\">\r\n <button type=\"submit\"\r\n class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid\">{{i18n.submit}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #noResource>\r\n <a role=\"button\"\r\n class=\"oauth\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : login({responseType: responseType, redirectUri: redirectUri, state:state})\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </a>\r\n </ng-template>\r\n\r\n <ng-template #message>\r\n <span class=\"not-authorized\"\r\n *ngIf=\"status === OAuthStatus.NOT_AUTHORIZED\"\r\n [innerHTML]=\"i18n.notAuthorized\"></span>\r\n <span class=\"authorized\"\r\n *ngIf=\"status === OAuthStatus.AUTHORIZED\">\r\n <span class=\"welcome\" [innerHTML]=\"i18n.authorized + '&nbsp;'\"></span>\r\n <strong class=\"profile-name\"\r\n [innerHTML]=\"profileName\"></strong>\r\n </span>\r\n <span class=\"denied\"\r\n *ngIf=\"status === OAuthStatus.DENIED\"\r\n [innerHTML]=\"i18n.denied\"></span>\r\n </ng-template>\r\n </ng-container>\r\n</ng-template>\r\n\r\n", styles: [".oauth .dropdown-menu{left:auto;right:0;box-shadow:0 5px 10px #0003;min-width:250px}.oauth .dropdown-menu:before{content:\"\";display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:#0003;position:absolute;top:-7px;left:auto;right:15px}.oauth .dropdown-menu:after{content:\"\";display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:auto;right:16px}\n"] }]
97
93
  }], ctorParameters: function () { return [{ type: i1.OAuthService }, { type: i2.Location }, { type: Location, decorators: [{
@@ -120,4 +116,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
120
116
  type: HostListener,
121
117
  args: ['window:keydown.escape']
122
118
  }] } });
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgtbG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9hdXRoL3NyYy9saWIvY29tcG9uZW50cy9sb2dpbi9vYXV0aC1sb2dpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2F1dGgvc3JjL2xpYi9jb21wb25lbnRzL2xvZ2luL29hdXRoLWxvZ2luLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFlLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RJLE9BQU8sRUFBYSxZQUFZLEVBQUUsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxRQUFRLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDL0UsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7OztBQW1CbkMsTUFBTSxPQUFPLG1CQUFtQjtJQW1GOUIsWUFBb0IsWUFBMEIsRUFDMUIsZUFBMEIsRUFDUixRQUFrQjtRQUZwQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixvQkFBZSxHQUFmLGVBQWUsQ0FBVztRQUNSLGFBQVEsR0FBUixRQUFRLENBQVU7UUFuRnhELDRDQUFnQixJQUFJLFlBQVksRUFBRSxFQUFDO1FBQ25DLG1EQUFzQjtRQUN0QixvREFBdUI7UUFDdkIsb0NBQXdCO1lBQ3RCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLGFBQWEsRUFBRSxTQUFTO1lBQ3hCLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLE1BQU0sRUFBRSwyQkFBMkI7U0FDcEMsRUFBQztR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QUNKLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQTJCO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUNqQyxDQUFDO0lBR0QsYUFBYTtRQUNYLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7OztnSEE1R1UsbUJBQW1CLHNFQXFGVixRQUFRO29HQXJGakIsbUJBQW1CLG1iQ3RCaEMsa2dHQW9FQTsyRkQ5Q2EsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGFBQWEsaUJBR1IsaUJBQWlCLENBQUMsSUFBSTs0R0F1RlcsUUFBUTswQkFBM0MsTUFBTTsyQkFBQyxRQUFROzRDQWxFNUIsSUFBSTtzQkFESCxLQUFLO2dCQUlGLElBQUk7c0JBRFAsS0FBSztnQkFhRixXQUFXO3NCQURkLEtBQUs7Z0JBUUYsWUFBWTtzQkFEZixLQUFLO2dCQVlOLFlBQVk7c0JBRFgsS0FBSztnQkFHTixLQUFLO3NCQURKLEtBQUs7Z0JBR04sV0FBVztzQkFEVixNQUFNO2dCQUdQLFlBQVk7c0JBRFgsS0FBSztnQkFHTixhQUFhO3NCQURaLFlBQVk7dUJBQUMsT0FBTyxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkErQ3RDLGFBQWE7c0JBRFosWUFBWTt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgQ29udGVudENoaWxkLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge09ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgdGFrZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7TE9DQVRJT04sIE9BdXRoUGFyYW1ldGVycywgT0F1dGhTdGF0dXMsIE9BdXRoVHlwZX0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHt0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtPQXV0aFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xvY2F0aW9uIGFzIExvY2F0aW9uMn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGhMb2dpbkkxOG4ge1xyXG4gIHVzZXJuYW1lPzogc3RyaW5nO1xyXG4gIHBhc3N3b3JkPzogc3RyaW5nO1xyXG4gIHN1Ym1pdD86IHN0cmluZztcclxuICBub3RBdXRob3JpemVkPzogc3RyaW5nO1xyXG4gIGF1dGhvcml6ZWQ/OiBzdHJpbmc7XHJcbiAgZGVuaWVkPzogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ29hdXRoLWxvZ2luJyxcclxuICB0ZW1wbGF0ZVVybDogJ29hdXRoLWxvZ2luLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnb2F1dGgtbG9naW4uY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgT0F1dGhMb2dpbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gICNzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgI3JlZGlyZWN0VXJpPzogc3RyaW5nO1xyXG4gICNyZXNwb25zZVR5cGU/OiBzdHJpbmc7XHJcbiAgI2kxOG46IE9BdXRoTG9naW5JMThuID0ge1xyXG4gICAgdXNlcm5hbWU6ICdVc2VybmFtZScsXHJcbiAgICBwYXNzd29yZDogJ1Bhc3N3b3JkJyxcclxuICAgIHN1Ym1pdDogJ1NpZ24gaW4nLFxyXG4gICAgbm90QXV0aG9yaXplZDogJ1NpZ24gaW4nLFxyXG4gICAgYXV0aG9yaXplZDogJ1dlbGNvbWUnLFxyXG4gICAgZGVuaWVkOiAnQWNjZXNzIERlbmllZC4gVHJ5IGFnYWluISdcclxuICB9O1xyXG5cclxuICBnZXQgaTE4bigpIHtcclxuICAgIHJldHVybiB0aGlzLiNpMThuO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICB0eXBlOiBPQXV0aFR5cGUgPSBPQXV0aFR5cGUuUkVTT1VSQ0U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGkxOG4oaTE4bikge1xyXG4gICAgdGhpcy4jaTE4biA9IHtcclxuICAgICAgLi4udGhpcy4jaTE4bixcclxuICAgICAgLi4uaTE4blxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldCByZWRpcmVjdFVyaSgpIHtcclxuICAgIHJldHVybiB0aGlzLiNyZWRpcmVjdFVyaSB8fCBgJHt0aGlzLmxvY2F0aW9uLm9yaWdpbn0ke3RoaXMubG9jYXRpb25TZXJ2aWNlLnBhdGgodHJ1ZSkgfHwgJy8nfWA7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCByZWRpcmVjdFVyaShyZWRpcmVjdFVyaTogc3RyaW5nKSB7XHJcbiAgICBpZiAocmVkaXJlY3RVcmkpIHtcclxuICAgICAgdGhpcy4jcmVkaXJlY3RVcmkgPSByZWRpcmVjdFVyaTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHJlc3BvbnNlVHlwZShyZXNwb25zZVR5cGU6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMucmVzcG9uc2VUeXBlKSB7XHJcbiAgICAgIHRoaXMuI3Jlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCByZXNwb25zZVR5cGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy4jcmVzcG9uc2VUeXBlIHx8IHRoaXMudHlwZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgdXNlTG9nb3V0VXJsID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBzdGF0ZSA9ICcnO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHN0YXRlQ2hhbmdlID0gdGhpcy5vYXV0aFNlcnZpY2Uuc3RhdGUkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHJvZmlsZU5hbWUkOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQ7XHJcbiAgQENvbnRlbnRDaGlsZCgnbG9naW4nLCB7c3RhdGljOiBmYWxzZX0pXHJcbiAgbG9naW5UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcclxuICB1c2VybmFtZSA9ICcnO1xyXG4gIHBhc3N3b3JkID0gJyc7XHJcbiAgcHJvZmlsZU5hbWU/OiBzdHJpbmc7XHJcbiAgT0F1dGhTdGF0dXMgPSBPQXV0aFN0YXR1cztcclxuICBPQXV0aFR5cGUgPSBPQXV0aFR5cGU7XHJcbiAgY29sbGFwc2UgPSBmYWxzZTtcclxuICBzdGF0dXMkID0gdGhpcy5vYXV0aFNlcnZpY2Uuc3RhdHVzJC5waXBlKFxyXG4gICAgdGFwKHMgPT4ge1xyXG4gICAgICBpZiAocyA9PT0gT0F1dGhTdGF0dXMuQVVUSE9SSVpFRCAmJiB0aGlzLnByb2ZpbGVOYW1lJCkge1xyXG4gICAgICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQodGhpcy5wcm9maWxlTmFtZSQucGlwZShcclxuICAgICAgICAgIHRha2UoMSlcclxuICAgICAgICApLnN1YnNjcmliZShuID0+IHRoaXMucHJvZmlsZU5hbWUgPSBuKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3Qge3Rva2VufSA9IHRoaXMub2F1dGhTZXJ2aWNlO1xyXG4gICAgICAgIGNvbnN0IHVzZXJJbmZvID0gdG9rZW4gJiYgdG9rZW4uaWRfdG9rZW4gJiYgSlNPTi5wYXJzZShhdG9iKHRva2VuLmlkX3Rva2VuLnNwbGl0KCcuJylbMV0pKSB8fCB7fTtcclxuICAgICAgICB0aGlzLnByb2ZpbGVOYW1lID0gdXNlckluZm8ubmFtZSB8fCB1c2VySW5mby51c2VybmFtZSB8fCB1c2VySW5mby5lbWFpbCB8fCB1c2VySW5mby5zdWIgfHwgJyc7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgKTtcclxuICBsb2dpbkZ1bmN0aW9uID0gKHA6IE9BdXRoUGFyYW1ldGVycykgPT4gdGhpcy5sb2dpbihwKTtcclxuICBsb2dvdXRGdW5jdGlvbiA9ICgpID0+IHRoaXMubG9nb3V0KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb2F1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBsb2NhdGlvblNlcnZpY2U6IExvY2F0aW9uMixcclxuICAgICAgICAgICAgICBASW5qZWN0KExPQ0FUSU9OKSBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbikge1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGxvZ291dCgpIHtcclxuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmxvZ291dCh0aGlzLnVzZUxvZ291dFVybCk7XHJcbiAgfVxyXG5cclxuICBsb2dpbihwYXJhbWV0ZXJzOiBPQXV0aFBhcmFtZXRlcnMpIHtcclxuICAgIHRoaXMuY29sbGFwc2UgPSBmYWxzZTtcclxuICAgIHJldHVybiB0aGlzLm9hdXRoU2VydmljZS5sb2dpbihwYXJhbWV0ZXJzKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUNvbGxhcHNlKCkge1xyXG4gICAgdGhpcy5jb2xsYXBzZSA9ICF0aGlzLmNvbGxhcHNlO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24uZXNjYXBlJylcclxuICBrZXlib2FyZEV2ZW50KCkge1xyXG4gICAgdGhpcy5jb2xsYXBzZSA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibG9naW5UZW1wbGF0ZTsgZWxzZSBkZWZhdWx0TG9naW5cIlxyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxvZ2luVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7bG9naW46IGxvZ2luRnVuY3Rpb24sIGxvZ291dDogbG9nb3V0RnVuY3Rpb24sIHN0YXR1czogc3RhdHVzJCB8IGFzeW5jfVwiPlxyXG48L25nLWNvbnRhaW5lcj5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TG9naW4+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXR1cyQgfCBhc3luYyBhcyBzdGF0dXNcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09PSBPQXV0aFR5cGUuUkVTT1VSQ0U7IGVsc2Ugbm9SZXNvdXJjZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwib2F1dGggZHJvcGRvd24gdGV4dC1lbmQge3tjb2xsYXBzZSA/ICdzaG93JzogJyd9fVwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpbmsgcC0wIGRyb3Bkb3duLXRvZ2dsZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3RhdHVzID09PSBPQXV0aFN0YXR1cy5BVVRIT1JJWkVEID8gbG9nb3V0KCkgOiB0b2dnbGVDb2xsYXBzZSgpXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVzc2FnZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IG1yLTMge3tjb2xsYXBzZSA/ICdzaG93JzogJyd9fVwiPlxyXG4gICAgICAgICAgPGZvcm0gY2xhc3M9XCJwLTNcIlxyXG4gICAgICAgICAgICAgICAgI2Zvcm09XCJuZ0Zvcm1cIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0dXMgPT09IE9BdXRoU3RhdHVzLk5PVF9BVVRIT1JJWkVEIHx8IHN0YXR1cyA9PT0gT0F1dGhTdGF0dXMuREVOSUVEXCJcclxuICAgICAgICAgICAgICAgIChzdWJtaXQpPVwibG9naW4oe3VzZXJuYW1lOiB1c2VybmFtZSwgcGFzc3dvcmQ6IHBhc3N3b3JkfSlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ1c2VybmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidXNlcm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaTE4bi51c2VybmFtZVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICBuYW1lPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImkxOG4ucGFzc3dvcmRcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCI+e3tpMThuLnN1Ym1pdH19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbm9SZXNvdXJjZT5cclxuICAgICAgPGEgcm9sZT1cImJ1dHRvblwiXHJcbiAgICAgICAgIGNsYXNzPVwib2F1dGhcIlxyXG4gICAgICAgICAoY2xpY2spPVwic3RhdHVzID09PSBPQXV0aFN0YXR1cy5BVVRIT1JJWkVEID8gbG9nb3V0KCkgOiBsb2dpbih7cmVzcG9uc2VUeXBlOiByZXNwb25zZVR5cGUsICByZWRpcmVjdFVyaTogcmVkaXJlY3RVcmksIHN0YXRlOnN0YXRlfSlcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVzc2FnZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2E+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbWVzc2FnZT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJub3QtYXV0aG9yaXplZFwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzID09PSBPQXV0aFN0YXR1cy5OT1RfQVVUSE9SSVpFRFwiXHJcbiAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaTE4bi5ub3RBdXRob3JpemVkXCI+PC9zcGFuPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImF1dGhvcml6ZWRcIlxyXG4gICAgICAgICAgICAqbmdJZj1cInN0YXR1cyA9PT0gT0F1dGhTdGF0dXMuQVVUSE9SSVpFRFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwid2VsY29tZVwiIFtpbm5lckhUTUxdPVwiaTE4bi5hdXRob3JpemVkICsgJyZuYnNwOydcIj48L3NwYW4+XHJcbiAgICAgICAgPHN0cm9uZyBjbGFzcz1cInByb2ZpbGUtbmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInByb2ZpbGVOYW1lXCI+PC9zdHJvbmc+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJkZW5pZWRcIlxyXG4gICAgICAgICAgICAqbmdJZj1cInN0YXR1cyA9PT0gT0F1dGhTdGF0dXMuREVOSUVEXCJcclxuICAgICAgICAgICAgW2lubmVySFRNTF09XCJpMThuLmRlbmllZFwiPjwvc3Bhbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG4iXX0=
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgtbG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9hdXRoL3NyYy9jb21wb25lbnRzL2xvZ2luL29hdXRoLWxvZ2luLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1vYXV0aC9zcmMvY29tcG9uZW50cy9sb2dpbi9vYXV0aC1sb2dpbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzSCxPQUFPLEVBQWEsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxRQUFRLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDL0UsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7OztBQW1CbkMsTUFBTSxPQUFPLG1CQUFtQjtJQWtGOUIsWUFBb0IsWUFBMEIsRUFDMUIsZUFBMEIsRUFDUixRQUFrQjtRQUZwQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixvQkFBZSxHQUFmLGVBQWUsQ0FBVztRQUNSLGFBQVEsR0FBUixRQUFRLENBQVU7UUFsRnhELG1EQUFzQjtRQUN0QixvREFBdUI7UUFDdkIsb0NBQXdCO1lBQ3RCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLGFBQWEsRUFBRSxTQUFTO1lBQ3hCLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLE1BQU0sRUFBRSwyQkFBMkI7U0FDcEMsRUFBQztRQU9GLFNBQUksR0FBYyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBaUNyQyxpQkFBWSxHQUFHLEtBQUss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LEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFHRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQzs7O2dIQXZHVSxtQkFBbUIsc0VBb0ZWLFFBQVE7b0dBcEZqQixtQkFBbUIsbWJDdEJoQyxrZ0dBb0VBOzJGRDlDYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsYUFBYSxpQkFHUixpQkFBaUIsQ0FBQyxJQUFJOzswQkFzRnhCLE1BQU07MkJBQUMsUUFBUTs0Q0FsRTVCLElBQUk7c0JBREgsS0FBSztnQkFJRixJQUFJO3NCQURQLEtBQUs7Z0JBYUYsV0FBVztzQkFEZCxLQUFLO2dCQVFGLFlBQVk7c0JBRGYsS0FBSztnQkFZTixZQUFZO3NCQURYLEtBQUs7Z0JBR04sS0FBSztzQkFESixLQUFLO2dCQUdOLFdBQVc7c0JBRFYsTUFBTTtnQkFHUCxZQUFZO3NCQURYLEtBQUs7Z0JBR04sYUFBYTtzQkFEWixZQUFZO3VCQUFDLE9BQU8sRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7Z0JBMkN0QyxhQUFhO3NCQURaLFlBQVk7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgSG9zdExpc3RlbmVyLCBJbmplY3QsIElucHV0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgdGFrZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7TE9DQVRJT04sIE9BdXRoUGFyYW1ldGVycywgT0F1dGhTdGF0dXMsIE9BdXRoVHlwZX0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHt0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtPQXV0aFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xvY2F0aW9uIGFzIExvY2F0aW9uMn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGhMb2dpbkkxOG4ge1xyXG4gIHVzZXJuYW1lPzogc3RyaW5nO1xyXG4gIHBhc3N3b3JkPzogc3RyaW5nO1xyXG4gIHN1Ym1pdD86IHN0cmluZztcclxuICBub3RBdXRob3JpemVkPzogc3RyaW5nO1xyXG4gIGF1dGhvcml6ZWQ/OiBzdHJpbmc7XHJcbiAgZGVuaWVkPzogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ29hdXRoLWxvZ2luJyxcclxuICB0ZW1wbGF0ZVVybDogJ29hdXRoLWxvZ2luLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnb2F1dGgtbG9naW4uY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgT0F1dGhMb2dpbkNvbXBvbmVudCB7XHJcblxyXG4gICNyZWRpcmVjdFVyaT86IHN0cmluZztcclxuICAjcmVzcG9uc2VUeXBlPzogc3RyaW5nO1xyXG4gICNpMThuOiBPQXV0aExvZ2luSTE4biA9IHtcclxuICAgIHVzZXJuYW1lOiAnVXNlcm5hbWUnLFxyXG4gICAgcGFzc3dvcmQ6ICdQYXNzd29yZCcsXHJcbiAgICBzdWJtaXQ6ICdTaWduIGluJyxcclxuICAgIG5vdEF1dGhvcml6ZWQ6ICdTaWduIGluJyxcclxuICAgIGF1dGhvcml6ZWQ6ICdXZWxjb21lJyxcclxuICAgIGRlbmllZDogJ0FjY2VzcyBEZW5pZWQuIFRyeSBhZ2FpbiEnXHJcbiAgfTtcclxuXHJcbiAgZ2V0IGkxOG4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy4jaTE4bjtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgdHlwZTogT0F1dGhUeXBlID0gT0F1dGhUeXBlLlJFU09VUkNFO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBpMThuKGkxOG4pIHtcclxuICAgIHRoaXMuI2kxOG4gPSB7XHJcbiAgICAgIC4uLnRoaXMuI2kxOG4sXHJcbiAgICAgIC4uLmkxOG5cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXQgcmVkaXJlY3RVcmkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy4jcmVkaXJlY3RVcmkgfHwgYCR7dGhpcy5sb2NhdGlvbi5vcmlnaW59JHt0aGlzLmxvY2F0aW9uU2VydmljZS5wYXRoKHRydWUpIHx8ICcvJ31gO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgcmVkaXJlY3RVcmkocmVkaXJlY3RVcmk6IHN0cmluZykge1xyXG4gICAgaWYgKHJlZGlyZWN0VXJpKSB7XHJcbiAgICAgIHRoaXMuI3JlZGlyZWN0VXJpID0gcmVkaXJlY3RVcmk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCByZXNwb25zZVR5cGUocmVzcG9uc2VUeXBlOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLnJlc3BvbnNlVHlwZSkge1xyXG4gICAgICB0aGlzLiNyZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcmVzcG9uc2VUeXBlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuI3Jlc3BvbnNlVHlwZSB8fCB0aGlzLnR5cGU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHVzZUxvZ291dFVybCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc3RhdGUgPSAnJztcclxuICBAT3V0cHV0KClcclxuICBzdGF0ZUNoYW5nZSA9IHRoaXMub2F1dGhTZXJ2aWNlLnN0YXRlJC5hc09ic2VydmFibGUoKTtcclxuICBASW5wdXQoKVxyXG4gIHByb2ZpbGVOYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkO1xyXG4gIEBDb250ZW50Q2hpbGQoJ2xvZ2luJywge3N0YXRpYzogZmFsc2V9KVxyXG4gIGxvZ2luVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgdXNlcm5hbWUgPSAnJztcclxuICBwYXNzd29yZCA9ICcnO1xyXG4gIHByb2ZpbGVOYW1lPzogc3RyaW5nO1xyXG4gIE9BdXRoU3RhdHVzID0gT0F1dGhTdGF0dXM7XHJcbiAgT0F1dGhUeXBlID0gT0F1dGhUeXBlO1xyXG4gIGNvbGxhcHNlID0gZmFsc2U7XHJcbiAgc3RhdHVzJCA9IHRoaXMub2F1dGhTZXJ2aWNlLnN0YXR1cyQucGlwZShcclxuICAgIHRhcChzID0+IHtcclxuICAgICAgaWYgKHMgPT09IE9BdXRoU3RhdHVzLkFVVEhPUklaRUQgJiYgdGhpcy5wcm9maWxlTmFtZSQpIHtcclxuICAgICAgICB0aGlzLnByb2ZpbGVOYW1lJC5waXBlKFxyXG4gICAgICAgICAgdGFrZSgxKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKG4gPT4gdGhpcy5wcm9maWxlTmFtZSA9IG4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHt0b2tlbn0gPSB0aGlzLm9hdXRoU2VydmljZTtcclxuICAgICAgICBjb25zdCB1c2VySW5mbyA9IHRva2VuICYmIHRva2VuLmlkX3Rva2VuICYmIEpTT04ucGFyc2UoYXRvYih0b2tlbi5pZF90b2tlbi5zcGxpdCgnLicpWzFdKSkgfHwge307XHJcbiAgICAgICAgdGhpcy5wcm9maWxlTmFtZSA9IHVzZXJJbmZvLm5hbWUgfHwgdXNlckluZm8udXNlcm5hbWUgfHwgdXNlckluZm8uZW1haWwgfHwgdXNlckluZm8uc3ViIHx8ICcnO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICk7XHJcbiAgbG9naW5GdW5jdGlvbiA9IChwOiBPQXV0aFBhcmFtZXRlcnMpID0+IHRoaXMubG9naW4ocCk7XHJcbiAgbG9nb3V0RnVuY3Rpb24gPSAoKSA9PiB0aGlzLmxvZ291dCgpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgbG9jYXRpb25TZXJ2aWNlOiBMb2NhdGlvbjIsXHJcbiAgICAgICAgICAgICAgQEluamVjdChMT0NBVElPTikgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24pIHtcclxuICB9XHJcblxyXG4gIGxvZ291dCgpIHtcclxuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmxvZ291dCh0aGlzLnVzZUxvZ291dFVybCk7XHJcbiAgfVxyXG5cclxuICBsb2dpbihwYXJhbWV0ZXJzOiBPQXV0aFBhcmFtZXRlcnMpIHtcclxuICAgIHRoaXMuY29sbGFwc2UgPSBmYWxzZTtcclxuICAgIHJldHVybiB0aGlzLm9hdXRoU2VydmljZS5sb2dpbihwYXJhbWV0ZXJzKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUNvbGxhcHNlKCkge1xyXG4gICAgdGhpcy5jb2xsYXBzZSA9ICF0aGlzLmNvbGxhcHNlO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24uZXNjYXBlJylcclxuICBrZXlib2FyZEV2ZW50KCkge1xyXG4gICAgdGhpcy5jb2xsYXBzZSA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibG9naW5UZW1wbGF0ZTsgZWxzZSBkZWZhdWx0TG9naW5cIlxyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxvZ2luVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7bG9naW46IGxvZ2luRnVuY3Rpb24sIGxvZ291dDogbG9nb3V0RnVuY3Rpb24sIHN0YXR1czogc3RhdHVzJCB8IGFzeW5jfVwiPlxyXG48L25nLWNvbnRhaW5lcj5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TG9naW4+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXR1cyQgfCBhc3luYyBhcyBzdGF0dXNcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09PSBPQXV0aFR5cGUuUkVTT1VSQ0U7IGVsc2Ugbm9SZXNvdXJjZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwib2F1dGggZHJvcGRvd24gdGV4dC1lbmQge3tjb2xsYXBzZSA/ICdzaG93JzogJyd9fVwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpbmsgcC0wIGRyb3Bkb3duLXRvZ2dsZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3RhdHVzID09PSBPQXV0aFN0YXR1cy5BVVRIT1JJWkVEID8gbG9nb3V0KCkgOiB0b2dnbGVDb2xsYXBzZSgpXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVzc2FnZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IG1yLTMge3tjb2xsYXBzZSA/ICdzaG93JzogJyd9fVwiPlxyXG4gICAgICAgICAgPGZvcm0gY2xhc3M9XCJwLTNcIlxyXG4gICAgICAgICAgICAgICAgI2Zvcm09XCJuZ0Zvcm1cIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0dXMgPT09IE9BdXRoU3RhdHVzLk5PVF9BVVRIT1JJWkVEIHx8IHN0YXR1cyA9PT0gT0F1dGhTdGF0dXMuREVOSUVEXCJcclxuICAgICAgICAgICAgICAgIChzdWJtaXQpPVwibG9naW4oe3VzZXJuYW1lOiB1c2VybmFtZSwgcGFzc3dvcmQ6IHBhc3N3b3JkfSlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ1c2VybmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidXNlcm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaTE4bi51c2VybmFtZVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICBuYW1lPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImkxOG4ucGFzc3dvcmRcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCI+e3tpMThuLnN1Ym1pdH19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbm9SZXNvdXJjZT5cclxuICAgICAgPGEgcm9sZT1cImJ1dHRvblwiXHJcbiAgICAgICAgIGNsYXNzPVwib2F1dGhcIlxyXG4gICAgICAgICAoY2xpY2spPVwic3RhdHVzID09PSBPQXV0aFN0YXR1cy5BVVRIT1JJWkVEID8gbG9nb3V0KCkgOiBsb2dpbih7cmVzcG9uc2VUeXBlOiByZXNwb25zZVR5cGUsICByZWRpcmVjdFVyaTogcmVkaXJlY3RVcmksIHN0YXRlOnN0YXRlfSlcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVzc2FnZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2E+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbWVzc2FnZT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJub3QtYXV0aG9yaXplZFwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzID09PSBPQXV0aFN0YXR1cy5OT1RfQVVUSE9SSVpFRFwiXHJcbiAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaTE4bi5ub3RBdXRob3JpemVkXCI+PC9zcGFuPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImF1dGhvcml6ZWRcIlxyXG4gICAgICAgICAgICAqbmdJZj1cInN0YXR1cyA9PT0gT0F1dGhTdGF0dXMuQVVUSE9SSVpFRFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwid2VsY29tZVwiIFtpbm5lckhUTUxdPVwiaTE4bi5hdXRob3JpemVkICsgJyZuYnNwOydcIj48L3NwYW4+XHJcbiAgICAgICAgPHN0cm9uZyBjbGFzcz1cInByb2ZpbGUtbmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInByb2ZpbGVOYW1lXCI+PC9zdHJvbmc+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJkZW5pZWRcIlxyXG4gICAgICAgICAgICAqbmdJZj1cInN0YXR1cyA9PT0gT0F1dGhTdGF0dXMuREVOSUVEXCJcclxuICAgICAgICAgICAgW2lubmVySFRNTF09XCJpMThuLmRlbmllZFwiPjwvc3Bhbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG4iXX0=
package/esm2020/index.mjs CHANGED
@@ -1,9 +1,10 @@
1
1
  /*
2
2
  * Public API Surface of ngx-oauth
3
3
  */
4
- export * from './lib/models';
5
- export * from './lib/services/oauth.service';
6
- export * from './lib/services/oauth.interceptor';
7
- export * from './lib/components/login/oauth-login.component';
8
- export * from './lib/oauth.module';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2F1dGgvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygbmd4LW9hdXRoXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9vYXV0aC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL29hdXRoLmludGVyY2VwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbG9naW4vb2F1dGgtbG9naW4uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL29hdXRoLm1vZHVsZSc7XG4iXX0=
4
+ export * from './models';
5
+ export * from './services/token.service';
6
+ export * from './services/oauth.service';
7
+ export * from './services/oauth.interceptor';
8
+ export * from './components/login/oauth-login.component';
9
+ export * from './oauth.module';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2F1dGgvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gtb2F1dGhcbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy90b2tlbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvb2F1dGguc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL29hdXRoLmludGVyY2VwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9sb2dpbi9vYXV0aC1sb2dpbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9vYXV0aC5tb2R1bGUnO1xuIl19
@@ -0,0 +1,47 @@
1
+ import { inject, Injectable, InjectionToken } from '@angular/core';
2
+ import { HttpHeaders } from '@angular/common/http';
3
+ import * as i0 from "@angular/core";
4
+ export const SERVER_HOST = new InjectionToken('SERVER_HOST');
5
+ export const SERVER_PATH = new InjectionToken('SERVER_PATH');
6
+ export const LOCATION = new InjectionToken('Location');
7
+ export const STORAGE = new InjectionToken('Storage');
8
+ export const OAUTH_CONFIG = new InjectionToken('OAuthConfig');
9
+ export const OAUTH_TOKEN = new InjectionToken('OAuthToken');
10
+ export const HEADER_APPLICATION = new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' });
11
+ export const OAUTH_HTTP_CLIENT = new InjectionToken('OAuthHttpClient');
12
+ export class OAuthConfig {
13
+ }
14
+ OAuthConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: OAuthConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15
+ OAuthConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: OAuthConfig, providedIn: 'root', useFactory: () => inject(OAUTH_CONFIG).reduce((p, c) => ({ ...p, ...c }), {}) });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: OAuthConfig, decorators: [{
17
+ type: Injectable,
18
+ args: [{
19
+ providedIn: 'root',
20
+ useFactory: () => inject(OAUTH_CONFIG).reduce((p, c) => ({ ...p, ...c }), {})
21
+ }]
22
+ }] });
23
+ export const provideOAuthConfig = (config = {}) => ({
24
+ provide: OAUTH_CONFIG,
25
+ useValue: config,
26
+ multi: true
27
+ });
28
+ export const provideOAuthConfigFactory = (factory, deps) => ({
29
+ provide: OAUTH_CONFIG,
30
+ useFactory: factory,
31
+ deps: deps,
32
+ multi: true
33
+ });
34
+ export var OAuthType;
35
+ (function (OAuthType) {
36
+ OAuthType["RESOURCE"] = "password";
37
+ OAuthType["AUTHORIZATION_CODE"] = "code";
38
+ OAuthType["IMPLICIT"] = "token";
39
+ OAuthType["CLIENT_CREDENTIAL"] = "client_credentials";
40
+ })(OAuthType || (OAuthType = {}));
41
+ export var OAuthStatus;
42
+ (function (OAuthStatus) {
43
+ OAuthStatus["NOT_AUTHORIZED"] = "NOT_AUTHORIZED";
44
+ OAuthStatus["AUTHORIZED"] = "AUTHORIZED";
45
+ OAuthStatus["DENIED"] = "DENIED";
46
+ })(OAuthStatus || (OAuthStatus = {}));
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2F1dGgvc3JjL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQWEsV0FBVyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7O0FBRTdELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBUyxhQUFhLENBQUMsQ0FBQztBQUNyRSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQVMsYUFBYSxDQUFDLENBQUM7QUFDckUsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLElBQUksY0FBYyxDQUFXLFVBQVUsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxJQUFJLGNBQWMsQ0FBVSxTQUFTLENBQUMsQ0FBQztBQUM5RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQWdCLGFBQWEsQ0FBQyxDQUFDO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBYSxZQUFZLENBQUMsQ0FBQztBQUN4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFDLGNBQWMsRUFBRSxtQ0FBbUMsRUFBQyxDQUFDLENBQUM7QUFDekcsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQWEsaUJBQWlCLENBQUMsQ0FBQztBQU1uRixNQUFNLE9BQWdCLFdBQVc7O3dHQUFYLFdBQVc7NEdBQVgsV0FBVyxjQUhuQixNQUFNLGNBQ04sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDOzJGQUV2RCxXQUFXO2tCQUpoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO29CQUNsQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO2lCQUM1RTs7QUFVRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFNBQXNCLEVBQUUsRUFBaUIsRUFBRSxDQUFDLENBQUM7SUFDOUUsT0FBTyxFQUFFLFlBQVk7SUFDckIsUUFBUSxFQUFFLE1BQU07SUFDaEIsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLE9BQWlCLEVBQUUsSUFBWSxFQUFtQixFQUFFLENBQUMsQ0FBQztJQUM5RixPQUFPLEVBQUUsWUFBWTtJQUNyQixVQUFVLEVBQUUsT0FBTztJQUNuQixJQUFJLEVBQUUsSUFBSTtJQUNWLEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFOLElBQVksU0FLWDtBQUxELFdBQVksU0FBUztJQUNuQixrQ0FBcUIsQ0FBQTtJQUNyQix3Q0FBMkIsQ0FBQTtJQUMzQiwrQkFBa0IsQ0FBQTtJQUNsQixxREFBd0MsQ0FBQTtBQUMxQyxDQUFDLEVBTFcsU0FBUyxLQUFULFNBQVMsUUFLcEI7QUE0RUQsTUFBTSxDQUFOLElBQVksV0FJWDtBQUpELFdBQVksV0FBVztJQUNyQixnREFBaUMsQ0FBQTtJQUNqQyx3Q0FBeUIsQ0FBQTtJQUN6QixnQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSlcsV0FBVyxLQUFYLFdBQVcsUUFJdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ZhY3RvcnlQcm92aWRlciwgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgVmFsdWVQcm92aWRlcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBIZWFkZXJzfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmV4cG9ydCBjb25zdCBTRVJWRVJfSE9TVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdTRVJWRVJfSE9TVCcpO1xuZXhwb3J0IGNvbnN0IFNFUlZFUl9QQVRIID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ1NFUlZFUl9QQVRIJyk7XG5leHBvcnQgY29uc3QgTE9DQVRJT04gPSBuZXcgSW5qZWN0aW9uVG9rZW48TG9jYXRpb24+KCdMb2NhdGlvbicpO1xuZXhwb3J0IGNvbnN0IFNUT1JBR0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48U3RvcmFnZT4oJ1N0b3JhZ2UnKTtcbmV4cG9ydCBjb25zdCBPQVVUSF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48T0F1dGhDb25maWdbXT4oJ09BdXRoQ29uZmlnJyk7XG5leHBvcnQgY29uc3QgT0FVVEhfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48T0F1dGhUb2tlbj4oJ09BdXRoVG9rZW4nKTtcbmV4cG9ydCBjb25zdCBIRUFERVJfQVBQTElDQVRJT04gPSBuZXcgSHR0cEhlYWRlcnMoeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30pO1xuZXhwb3J0IGNvbnN0IE9BVVRIX0hUVFBfQ0xJRU5UID0gbmV3IEluamVjdGlvblRva2VuPEh0dHBDbGllbnQ+KCdPQXV0aEh0dHBDbGllbnQnKTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIHVzZUZhY3Rvcnk6ICgpID0+IGluamVjdChPQVVUSF9DT05GSUcpLnJlZHVjZSgocCwgYykgPT4gKHsuLi5wLCAuLi5jfSksIHt9KVxufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPQXV0aENvbmZpZyB7XG4gIGNvbmZpZz86IE9BdXRoVHlwZUNvbmZpZztcbiAgc3RvcmFnZUtleT86IHN0cmluZztcbiAgc3RvcmFnZT86IFN0b3JhZ2U7XG4gIGlnbm9yZVBhdGhzPzogUmVnRXhwW107XG5cbiAgW3g6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGNvbnN0IHByb3ZpZGVPQXV0aENvbmZpZyA9IChjb25maWc6IE9BdXRoQ29uZmlnID0ge30pOiBWYWx1ZVByb3ZpZGVyID0+ICh7XG4gIHByb3ZpZGU6IE9BVVRIX0NPTkZJRyxcbiAgdXNlVmFsdWU6IGNvbmZpZyxcbiAgbXVsdGk6IHRydWVcbn0pO1xuXG5leHBvcnQgY29uc3QgcHJvdmlkZU9BdXRoQ29uZmlnRmFjdG9yeSA9IChmYWN0b3J5OiBGdW5jdGlvbiwgZGVwcz86IGFueVtdKTogRmFjdG9yeVByb3ZpZGVyID0+ICh7XG4gIHByb3ZpZGU6IE9BVVRIX0NPTkZJRyxcbiAgdXNlRmFjdG9yeTogZmFjdG9yeSxcbiAgZGVwczogZGVwcyxcbiAgbXVsdGk6IHRydWVcbn0pO1xuXG5leHBvcnQgZW51bSBPQXV0aFR5cGUge1xuICBSRVNPVVJDRSA9ICdwYXNzd29yZCcsXG4gIEFVVEhPUklaQVRJT05fQ09ERSA9ICdjb2RlJyxcbiAgSU1QTElDSVQgPSAndG9rZW4nLFxuICBDTElFTlRfQ1JFREVOVElBTCA9ICdjbGllbnRfY3JlZGVudGlhbHMnXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50Q3JlZGVudGlhbENvbmZpZyB7XG4gIHRva2VuUGF0aDogc3RyaW5nO1xuICByZXZva2VQYXRoPzogc3RyaW5nO1xuICBjbGllbnRJZDogc3RyaW5nO1xuICBjbGllbnRTZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQ29uZmlnIGV4dGVuZHMgQ2xpZW50Q3JlZGVudGlhbENvbmZpZyB7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1wbGljaXRDb25maWcge1xuICBhdXRob3JpemVQYXRoOiBzdHJpbmc7XG4gIHJldm9rZVBhdGg/OiBzdHJpbmc7XG4gIGNsaWVudElkOiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICBsb2dvdXRQYXRoPzogc3RyaW5nO1xuICBsb2dvdXRSZWRpcmVjdFVyaT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRob3JpemF0aW9uQ29kZUNvbmZpZyBleHRlbmRzIFJlc291cmNlQ29uZmlnIHtcbiAgYXV0aG9yaXplUGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvcml6YXRpb25Db2RlUEtDRUNvbmZpZyBleHRlbmRzIEF1dGhvcml6YXRpb25Db2RlQ29uZmlnIHtcbiAgcGtjZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuSWRDb25maWcge1xuICBpc3N1ZXJQYXRoOiBzdHJpbmc7XG4gIGNsaWVudElkOiBzdHJpbmc7XG4gIGNsaWVudFNlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VQYXJhbWV0ZXJzIHtcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgcGFzc3dvcmQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRob3JpemF0aW9uUGFyYW1ldGVycyB7XG4gIHJlZGlyZWN0VXJpOiBzdHJpbmc7XG4gIHJlc3BvbnNlVHlwZTogT0F1dGhUeXBlLklNUExJQ0lUIHwgT0F1dGhUeXBlLkFVVEhPUklaQVRJT05fQ09ERSB8IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE9BdXRoUGFyYW1ldGVycyA9IFJlc291cmNlUGFyYW1ldGVycyB8IEF1dGhvcml6YXRpb25QYXJhbWV0ZXJzO1xuZXhwb3J0IHR5cGUgT0F1dGhUeXBlQ29uZmlnID0gT3BlbklkQ29uZmlnXG4gIHwgQXV0aG9yaXphdGlvbkNvZGVQS0NFQ29uZmlnXG4gIHwgQXV0aG9yaXphdGlvbkNvZGVDb25maWdcbiAgfCBJbXBsaWNpdENvbmZpZ1xuICB8IFJlc291cmNlQ29uZmlnXG4gIHwgQ2xpZW50Q3JlZGVudGlhbENvbmZpZztcblxuZXhwb3J0IGludGVyZmFjZSBPQXV0aFRva2VuIHtcbiAgaWRfdG9rZW4/OiBzdHJpbmc7XG4gIGFjY2Vzc190b2tlbj86IHN0cmluZztcbiAgcmVmcmVzaF90b2tlbj86IHN0cmluZztcbiAgdG9rZW5fdHlwZT86IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG4gIGVycm9yPzogc3RyaW5nO1xuICBlcnJvcl9kZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZXhwaXJlc19pbj86IG51bWJlciB8IHN0cmluZztcbiAgcmVmcmVzaF9leHBpcmVzX2luPzogbnVtYmVyIHwgc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgY29kZVZlcmlmaWVyPzogc3RyaW5nO1xuICBub25jZT86IHN0cmluZztcbiAgdHlwZT86IE9BdXRoVHlwZTtcbiAgZXhwaXJlcz86IG51bWJlcjtcblxuICBbeDogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgZW51bSBPQXV0aFN0YXR1cyB7XG4gIE5PVF9BVVRIT1JJWkVEID0gJ05PVF9BVVRIT1JJWkVEJyxcbiAgQVVUSE9SSVpFRCA9ICdBVVRIT1JJWkVEJyxcbiAgREVOSUVEID0gJ0RFTklFRCdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuSWRDb25maWd1cmF0aW9uIHtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBhdXRob3JpemF0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBpbnRyb3NwZWN0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICB0b2tlbl9lbmRwb2ludD86IHN0cmluZztcbiAgdXNlcmluZm9fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIGVuZF9zZXNzaW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICByZXZvY2F0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBzY29wZXNfc3VwcG9ydGVkPzogc3RyaW5nW107XG4gIGNvZGVfY2hhbGxlbmdlX21ldGhvZHNfc3VwcG9ydGVkPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckluZm8ge1xuICBlbWFpbD86IHN0cmluZztcbiAgZW1haWxfdmVyaWZpZWQ/OiBib29sZWFuO1xuICBmYW1pbHlfbmFtZT86IHN0cmluZztcbiAgZ2l2ZW5fbmFtZT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgcHJlZmVycmVkX3VzZXJuYW1lPzogc3RyaW5nO1xuICBzdWI/OiBzdHJpbmc7XG4gIGFkZHJlc3M/OiBvYmplY3Q7XG4gIHBpY3R1cmU/OiBzdHJpbmc7XG4gIGxvY2FsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRyb3NwZWN0SW5mbyBleHRlbmRzIFVzZXJJbmZvIHtcbiAgYWN0aXZlOiBib29sZWFuO1xuICBzY29wZTogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIHVzZXJuYW1lOiBzdHJpbmc7XG4gIGV4cDogbnVtYmVyO1xufVxuIl19
@@ -0,0 +1,120 @@
1
+ import { NgModule, Optional, PLATFORM_ID } from '@angular/core';
2
+ import { FormsModule } from '@angular/forms';
3
+ import { HTTP_INTERCEPTORS, HttpBackend, HttpClient, HttpClientModule } from '@angular/common/http';
4
+ import { RouterModule } from '@angular/router';
5
+ import { LOCATION, OAUTH_HTTP_CLIENT, provideOAuthConfigFactory, SERVER_HOST, SERVER_PATH, STORAGE } from './models';
6
+ import { OAuthService } from './services/oauth.service';
7
+ import { OAuthLoginComponent } from './components/login/oauth-login.component';
8
+ import { CommonModule, isPlatformBrowser } from '@angular/common';
9
+ import { OAuthInterceptor } from './services/oauth.interceptor';
10
+ import { OAuthTokenService } from './services/token.service';
11
+ import * as i0 from "@angular/core";
12
+ const mockLocation = (serverHost, serverPath) => {
13
+ const url = new URL(serverHost && serverPath ? `${serverHost}${serverPath}` : 'http://localhost');
14
+ const { href, origin, protocol, host, hostname, port, pathname, search, hash } = url;
15
+ return {
16
+ href, origin, protocol, host, hostname, port, pathname, search, hash,
17
+ reload() {
18
+ },
19
+ assign(_) {
20
+ },
21
+ ancestorOrigins: {},
22
+ replace(_) {
23
+ }
24
+ };
25
+ };
26
+ const LocationService = {
27
+ provide: LOCATION,
28
+ useFactory(platformId, serverHost, serverPath) {
29
+ return isPlatformBrowser(platformId) ? location : mockLocation(serverHost, serverPath);
30
+ },
31
+ deps: [
32
+ PLATFORM_ID,
33
+ [new Optional(), SERVER_HOST],
34
+ [new Optional(), SERVER_PATH]
35
+ ]
36
+ };
37
+ const mockStorage = {
38
+ clear() {
39
+ },
40
+ getItem(key) {
41
+ return null;
42
+ },
43
+ key(index) {
44
+ return null;
45
+ },
46
+ removeItem(key) {
47
+ },
48
+ setItem(key, value) {
49
+ },
50
+ length: 0
51
+ };
52
+ const StorageService = {
53
+ provide: STORAGE,
54
+ useFactory(platformId) {
55
+ return isPlatformBrowser(platformId) ? localStorage : mockStorage;
56
+ },
57
+ deps: [PLATFORM_ID]
58
+ };
59
+ const OAuthHttpClient = {
60
+ provide: OAUTH_HTTP_CLIENT,
61
+ useFactory(httpBackend) {
62
+ // avoid http interceptors
63
+ return new HttpClient(httpBackend);
64
+ },
65
+ deps: [HttpBackend]
66
+ };
67
+ const OAuthInterceptorService = {
68
+ provide: HTTP_INTERCEPTORS,
69
+ useClass: OAuthInterceptor,
70
+ multi: true,
71
+ };
72
+ const defaultConfig = (storage) => {
73
+ return {
74
+ storage,
75
+ storageKey: 'token',
76
+ ignorePaths: []
77
+ };
78
+ };
79
+ export class OAuthModule {
80
+ static forRoot(config = {}) {
81
+ return {
82
+ ngModule: OAuthModule,
83
+ providers: [
84
+ LocationService,
85
+ StorageService,
86
+ OAuthHttpClient,
87
+ provideOAuthConfigFactory((storage) => ({
88
+ ...defaultConfig(storage),
89
+ ...config
90
+ }), [STORAGE]),
91
+ OAuthTokenService,
92
+ OAuthInterceptorService,
93
+ OAuthService,
94
+ ]
95
+ };
96
+ }
97
+ }
98
+ OAuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: OAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
99
+ OAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.4", ngImport: i0, type: OAuthModule, declarations: [OAuthLoginComponent], imports: [CommonModule,
100
+ FormsModule,
101
+ HttpClientModule,
102
+ RouterModule], exports: [OAuthLoginComponent] });
103
+ OAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: OAuthModule, imports: [CommonModule,
104
+ FormsModule,
105
+ HttpClientModule,
106
+ RouterModule] });
107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: OAuthModule, decorators: [{
108
+ type: NgModule,
109
+ args: [{
110
+ imports: [
111
+ CommonModule,
112
+ FormsModule,
113
+ HttpClientModule,
114
+ RouterModule,
115
+ ],
116
+ declarations: [OAuthLoginComponent],
117
+ exports: [OAuthLoginComponent]
118
+ }]
119
+ }] });
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9hdXRoL3NyYy9vYXV0aC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQixRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBZSx5QkFBeUIsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoSSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDOztBQUUzRCxNQUFNLFlBQVksR0FBRyxDQUFDLFVBQWtCLEVBQUUsVUFBa0IsRUFBWSxFQUFFO0lBQ3hFLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2xHLE1BQU0sRUFBQyxJQUFJLEVBQUUsTUFBTSxF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O0lBQ0osQ0FBQzs7d0dBbEJVLFdBQVc7eUdBQVgsV0FBVyxpQkFIUCxtQkFBbUIsYUFMaEMsWUFBWTtRQUNaLFdBQVc7UUFDWCxnQkFBZ0I7UUFDaEIsWUFBWSxhQUdKLG1CQUFtQjt5R0FFbEIsV0FBVyxZQVJwQixZQUFZO1FBQ1osV0FBVztRQUNYLGdCQUFnQjtRQUNoQixZQUFZOzJGQUtILFdBQVc7a0JBVnZCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxnQkFBZ0I7d0JBQ2hCLFlBQVk7cUJBQ2I7b0JBQ0QsWUFBWSxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQ25DLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO2lCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIE9wdGlvbmFsLCBQTEFURk9STV9JRH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0hUVFBfSU5URVJDRVBUT1JTLCBIdHRwQmFja2VuZCwgSHR0cENsaWVudCwgSHR0cENsaWVudE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0xPQ0FUSU9OLCBPQVVUSF9IVFRQX0NMSUVOVCwgT0F1dGhDb25maWcsIHByb3ZpZGVPQXV0aENvbmZpZ0ZhY3RvcnksIFNFUlZFUl9IT1NULCBTRVJWRVJfUEFUSCwgU1RPUkFHRX0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHtPQXV0aFNlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvb2F1dGguc2VydmljZSc7XG5pbXBvcnQge09BdXRoTG9naW5Db21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9sb2dpbi9vYXV0aC1sb2dpbi5jb21wb25lbnQnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtPQXV0aEludGVyY2VwdG9yfSBmcm9tICcuL3NlcnZpY2VzL29hdXRoLmludGVyY2VwdG9yJztcbmltcG9ydCB7T0F1dGhUb2tlblNlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvdG9rZW4uc2VydmljZSc7XG5cbmNvbnN0IG1vY2tMb2NhdGlvbiA9IChzZXJ2ZXJIb3N0OiBzdHJpbmcsIHNlcnZlclBhdGg6IHN0cmluZyk6IExvY2F0aW9uID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChzZXJ2ZXJIb3N0ICYmIHNlcnZlclBhdGggPyBgJHtzZXJ2ZXJIb3N0fSR7c2VydmVyUGF0aH1gIDogJ2h0dHA6Ly9sb2NhbGhvc3QnKTtcbiAgY29uc3Qge2hyZWYsIG9yaWdpbiwgcHJvdG9jb2wsIGhvc3QsIGhvc3RuYW1lLCBwb3J0LCBwYXRobmFtZSwgc2VhcmNoLCBoYXNofSA9IHVybDtcbiAgcmV0dXJuIHtcbiAgICBocmVmLCBvcmlnaW4sIHByb3RvY29sLCBob3N0LCBob3N0bmFtZSwgcG9ydCwgcGF0aG5hbWUsIHNlYXJjaCwgaGFzaCxcbiAgICByZWxvYWQoKSB7XG4gICAgfSxcbiAgICBhc3NpZ24oXzogc3RyaW5nKSB7XG4gICAgfSxcbiAgICBhbmNlc3Rvck9yaWdpbnM6IHt9IGFzIGFueSxcbiAgICByZXBsYWNlKF86IHN0cmluZykge1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IExvY2F0aW9uU2VydmljZSA9IHtcbiAgcHJvdmlkZTogTE9DQVRJT04sXG4gIHVzZUZhY3RvcnkocGxhdGZvcm1JZDogT2JqZWN0LCBzZXJ2ZXJIb3N0OiBzdHJpbmcsIHNlcnZlclBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKSA/IGxvY2F0aW9uIDogbW9ja0xvY2F0aW9uKHNlcnZlckhvc3QsIHNlcnZlclBhdGgpO1xuICB9LFxuICBkZXBzOiBbXG4gICAgUExBVEZPUk1fSUQsXG4gICAgW25ldyBPcHRpb25hbCgpLCBTRVJWRVJfSE9TVF0sXG4gICAgW25ldyBPcHRpb25hbCgpLCBTRVJWRVJfUEFUSF1cbiAgXVxufTtcblxuY29uc3QgbW9ja1N0b3JhZ2U6IFN0b3JhZ2UgPSB7XG4gIGNsZWFyKCkge1xuICB9LFxuICBnZXRJdGVtKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIGtleShpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpIHtcbiAgfSxcbiAgc2V0SXRlbShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICB9LFxuICBsZW5ndGg6IDBcbn07XG5cbmNvbnN0IFN0b3JhZ2VTZXJ2aWNlID0ge1xuICBwcm92aWRlOiBTVE9SQUdFLFxuICB1c2VGYWN0b3J5KHBsYXRmb3JtSWQ6IE9iamVjdCkge1xuICAgIHJldHVybiBpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKSA/IGxvY2FsU3RvcmFnZSA6IG1vY2tTdG9yYWdlO1xuICB9LFxuICBkZXBzOiBbUExBVEZPUk1fSURdXG59O1xuXG5jb25zdCBPQXV0aEh0dHBDbGllbnQgPSB7XG4gIHByb3ZpZGU6IE9BVVRIX0hUVFBfQ0xJRU5ULFxuICB1c2VGYWN0b3J5KGh0dHBCYWNrZW5kOiBIdHRwQmFja2VuZCkge1xuICAgIC8vIGF2b2lkIGh0dHAgaW50ZXJjZXB0b3JzXG4gICAgcmV0dXJuIG5ldyBIdHRwQ2xpZW50KGh0dHBCYWNrZW5kKTtcbiAgfSxcbiAgZGVwczogW0h0dHBCYWNrZW5kXVxufTtcblxuY29uc3QgT0F1dGhJbnRlcmNlcHRvclNlcnZpY2UgPSB7XG4gIHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLFxuICB1c2VDbGFzczogT0F1dGhJbnRlcmNlcHRvcixcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBkZWZhdWx0Q29uZmlnID0gKHN0b3JhZ2U6IFN0b3JhZ2UpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBzdG9yYWdlLFxuICAgIHN0b3JhZ2VLZXk6ICd0b2tlbicsXG4gICAgaWdub3JlUGF0aHM6IFtdXG4gIH07XG59O1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEh0dHBDbGllbnRNb2R1bGUsXG4gICAgUm91dGVyTW9kdWxlLFxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtPQXV0aExvZ2luQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW09BdXRoTG9naW5Db21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIE9BdXRoTW9kdWxlIHtcblxuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IE9BdXRoQ29uZmlnID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE9BdXRoTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBPQXV0aE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICBMb2NhdGlvblNlcnZpY2UsXG4gICAgICAgIFN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICBPQXV0aEh0dHBDbGllbnQsXG4gICAgICAgIHByb3ZpZGVPQXV0aENvbmZpZ0ZhY3RvcnkoKHN0b3JhZ2U6IFN0b3JhZ2UpID0+ICh7XG4gICAgICAgICAgLi4uZGVmYXVsdENvbmZpZyhzdG9yYWdlKSxcbiAgICAgICAgICAuLi5jb25maWdcbiAgICAgICAgfSksIFtTVE9SQUdFXSksXG4gICAgICAgIE9BdXRoVG9rZW5TZXJ2aWNlLFxuICAgICAgICBPQXV0aEludGVyY2VwdG9yU2VydmljZSxcbiAgICAgICAgT0F1dGhTZXJ2aWNlLFxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,53 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { switchMap, take, throwError } from 'rxjs';
3
+ import { catchError, map } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./token.service";
6
+ import * as i2 from "../models";
7
+ export class OAuthInterceptor {
8
+ constructor(tokenService, authConfig) {
9
+ this.tokenService = tokenService;
10
+ this.authConfig = authConfig;
11
+ }
12
+ intercept(req, next) {
13
+ return this.isPathExcepted(req) && next.handle(req) || this.tokenService.token$.pipe(take(1), map(token => {
14
+ if (token?.access_token) {
15
+ req = req.clone({
16
+ setHeaders: {
17
+ Authorization: `${token.token_type} ${token.access_token}`
18
+ }
19
+ });
20
+ }
21
+ return req;
22
+ }), switchMap(req => next.handle(req)), catchError((err) => {
23
+ if (err.status === 401) {
24
+ this.tokenService.token = {
25
+ error: `${err.status}`,
26
+ error_description: err.message
27
+ };
28
+ }
29
+ return throwError(() => err);
30
+ }));
31
+ }
32
+ isPathExcepted(req) {
33
+ const { ignorePaths } = this.authConfig || {};
34
+ if (ignorePaths) {
35
+ for (const ignorePath of ignorePaths) {
36
+ try {
37
+ if (req.url.match(ignorePath)) {
38
+ return true;
39
+ }
40
+ }
41
+ catch (err) {
42
+ }
43
+ }
44
+ }
45
+ return false;
46
+ }
47
+ }
48
+ OAuthInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: OAuthInterceptor, deps: [{ token: i1.OAuthTokenService }, { token: i2.OAuthConfig }], target: i0.ɵɵFactoryTarget.Injectable });
49
+ OAuthInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: OAuthInterceptor });
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: OAuthInterceptor, decorators: [{
51
+ type: Injectable
52
+ }], ctorParameters: function () { return [{ type: i1.OAuthTokenService }, { type: i2.OAuthConfig }]; } });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2F1dGgvc3JjL3NlcnZpY2VzL29hdXRoLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFLL0MsTUFBTSxPQUFPLGdCQUFnQjtJQUUzQixZQUFzQixZQUErQixFQUMvQixVQUF1QjtRQUR2QixpQkFBWSxHQUFaLFlBQVksQ0FBbUI7UUFDL0IsZUFBVSxHQUFWLFVBQVUsQ0FBYTtJQUM3QyxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDaEQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNsRixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1YsSUFBSSxLQUFLLEVBQUUsWUFBWSxFQUFFO2dCQUN2QixHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztvQkFDZCxVQUFVLEVBQUU7d0JBQ1YsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFO3FCQUMzRDtpQkFDRixDQUFDLENBQUM7YUFDSjtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNsQyxVQUFVLENBQUMsQ0FBQyxHQUFzQixFQUFFLEVBQUU7WUFDcEMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUc7b0JBQ3hCLEtBQUssRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUU7b0JBQ3RCLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxPQUFPO2lCQUMvQixDQUFDO2FBQ0g7WUFDRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLGNBQWMsQ0FBQyxHQUFxQjtRQUMxQyxNQUFNLEVBQUMsV0FBVyxFQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDNUMsSUFBSSxXQUFXLEVBQUU7WUFDZixLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRTtnQkFDcEMsSUFBSTtvQkFDRixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO3dCQUM3QixPQUFPLElBQUksQ0FBQztxQkFDYjtpQkFDRjtnQkFBQyxPQUFPLEdBQUcsRUFBRTtpQkFDYjthQUNGO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzZHQTdDVSxnQkFBZ0I7aUhBQWhCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge3N3aXRjaE1hcCwgdGFrZSwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtPQXV0aENvbmZpZ30gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7T0F1dGhUb2tlblNlcnZpY2V9IGZyb20gJy4vdG9rZW4uc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPQXV0aEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgdG9rZW5TZXJ2aWNlOiBPQXV0aFRva2VuU2VydmljZSxcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIGF1dGhDb25maWc6IE9BdXRoQ29uZmlnKSB7XG4gIH1cblxuICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xuICAgIHJldHVybiB0aGlzLmlzUGF0aEV4Y2VwdGVkKHJlcSkgJiYgbmV4dC5oYW5kbGUocmVxKSB8fCB0aGlzLnRva2VuU2VydmljZS50b2tlbiQucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBtYXAodG9rZW4gPT4ge1xuICAgICAgICBpZiAodG9rZW4/LmFjY2Vzc190b2tlbikge1xuICAgICAgICAgIHJlcSA9IHJlcS5jbG9uZSh7XG4gICAgICAgICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGAke3Rva2VuLnRva2VuX3R5cGV9ICR7dG9rZW4uYWNjZXNzX3Rva2VufWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgfSksXG4gICAgICBzd2l0Y2hNYXAocmVxID0+IG5leHQuaGFuZGxlKHJlcSkpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgdGhpcy50b2tlblNlcnZpY2UudG9rZW4gPSB7XG4gICAgICAgICAgICBlcnJvcjogYCR7ZXJyLnN0YXR1c31gLFxuICAgICAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVyci5tZXNzYWdlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1BhdGhFeGNlcHRlZChyZXE6IEh0dHBSZXF1ZXN0PGFueT4pIHtcbiAgICBjb25zdCB7aWdub3JlUGF0aHN9ID0gdGhpcy5hdXRoQ29uZmlnIHx8IHt9O1xuICAgIGlmIChpZ25vcmVQYXRocykge1xuICAgICAgZm9yIChjb25zdCBpZ25vcmVQYXRoIG9mIGlnbm9yZVBhdGhzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHJlcS51cmwubWF0Y2goaWdub3JlUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=