@sambath999/localize-token 18.0.12 → 18.0.13

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.
@@ -23,7 +23,7 @@ export class LocalizeLogindlgComponent {
23
23
  decodeToken;
24
24
  loading = false;
25
25
  success = false;
26
- config;
26
+ config = LocalizeToken.config;
27
27
  loginConfig;
28
28
  logout;
29
29
  loginUrl;
@@ -35,7 +35,6 @@ export class LocalizeLogindlgComponent {
35
35
  this.tokenService = tokenService;
36
36
  this.httpClient = httpClient;
37
37
  this.decodeToken = this.tokenService.decodeRefreshToken;
38
- this.config = LocalizeToken.config;
39
38
  this.loginConfig = this.dlgConfig.data.loginConfig;
40
39
  }
41
40
  ngOnInit() {
@@ -43,11 +42,7 @@ export class LocalizeLogindlgComponent {
43
42
  this.logout = this.loginConfig.logoutFunc;
44
43
  this.loginUrl = this.loginConfig.loginUrl;
45
44
  if (!this.decodeToken) {
46
- this.messageService.add({
47
- key: this.messageKey,
48
- severity: "error",
49
- summary: "Token is invalid",
50
- });
45
+ this.showMessage("error", "Token is invalid");
51
46
  setTimeout(() => this.logout?.(), 2000);
52
47
  }
53
48
  }
@@ -56,34 +51,29 @@ export class LocalizeLogindlgComponent {
56
51
  }
57
52
  async clickLogin() {
58
53
  if (!this.isValidPassword) {
59
- this.messageService.add({
60
- key: this.messageKey,
61
- severity: "error",
62
- summary: "Password is required and must be at least 6 characters",
63
- });
54
+ this.showMessage("error", "Password is required and must be at least 6 characters");
55
+ return;
64
56
  }
65
57
  this.loading = true;
66
58
  const loginRes = await this.login();
67
59
  if (!loginRes?.status) {
68
- this.messageService.add({
69
- key: this.messageKey,
70
- severity: "error",
71
- summary: loginRes.message,
72
- });
60
+ this.showMessage("error", loginRes.message ?? "An error occurred");
73
61
  this.loading = false;
74
62
  return;
75
63
  }
76
64
  this.tokenService.accessToken = loginRes.tokens.accessToken;
77
- LocalizeToken.storage.set(this.config.refreshTokenName, loginRes.tokens.refreshToken);
65
+ const cookieOptions = { expires: this.loginConfig.expire ?? 5 };
66
+ LocalizeToken.storage.set(this.config.refreshTokenName, loginRes.tokens.refreshToken, cookieOptions);
78
67
  this.success = true;
79
68
  setTimeout(() => this.dlgRef.close(true), 2000);
80
69
  }
81
70
  async login() {
82
- const path = this.loginUrl ?? "/api/auth/login";
83
- const response = await new Promise((resolve, reject) => this.httpClient
84
- .post(path, { password: this.password.trim() }, { headers: this.getHeaders() })
71
+ if (!this.loginUrl || !this.loginUrl.trim().length) {
72
+ this.showMessage("error", "Login url is required");
73
+ throw new Error("Login url is required");
74
+ }
75
+ return await new Promise((resolve, reject) => this.httpClient.post(this.loginUrl, { password: this.password.trim() }, { headers: this.getHeaders() })
85
76
  .subscribe({ next: resolve, error: reject }));
86
- return response;
87
77
  }
88
78
  getHeaders() {
89
79
  return {
@@ -92,9 +82,10 @@ export class LocalizeLogindlgComponent {
92
82
  };
93
83
  }
94
84
  get isValidPassword() {
95
- return this.password && this.password.trim().length >= 6;
85
+ return this.password && this.password.trim().length >= 6 && this.password.trim().length <= 16;
96
86
  }
97
87
  clickLogout = () => this.logout?.();
88
+ showMessage = (severity, summary) => this.messageService.add({ key: this.messageKey, severity, summary });
98
89
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeLogindlgComponent, deps: [{ token: i1.MessageService }, { token: i0.ChangeDetectorRef }, { token: i2.DynamicDialogRef }, { token: i2.DynamicDialogConfig }, { token: i3.LocalizeTokenService }, { token: i4.HttpClient }], target: i0.ɵɵFactoryTarget.Component });
99
90
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: LocalizeLogindlgComponent, selector: "app-localize-logindlg", providers: [MessageService], ngImport: i0, template: `<p-toast key="$login-dlg" position="top-center"></p-toast>
100
91
  <div id="login-dlg-wrap">
@@ -216,4 +207,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
216
207
  </div>
217
208
  </div>`, selector: "app-localize-logindlg", providers: [MessageService], encapsulation: ViewEncapsulation.None, styles: ["#login-dlg-wrap{width:100%;max-width:400px;margin:0 auto;padding:30px}.login-dlg-elm{margin-top:1rem}#login-dlg-header{display:flex;flex-direction:column;align-items:center;justify-content:center}#login-dlg-header h3{font-weight:700;font-size:.9rem;color:orange;text-align:center}#login-logo{height:40px;width:40px;background:url(/assets/images/logo-300px.png) no-repeat;background-size:contain}#login-dlg-content .p-inputgroup{height:45px}#login-dlg-content .p-inputgroup .p-inputgroup-addon{height:45px;border-radius:15px 0 0 15px;width:50px}#login-dlg-content .p-inputgroup .p-inputgroup-addon *{font-size:1rem}#login-dlg-content .p-inputgroup input{height:45px;border-radius:0 15px 15px 0}#login-dlg-content button{height:45px;border-radius:15px}.check-animation-wrap{top:0;left:0;position:absolute;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:calc(100% - 200px);min-height:400px}.check-main-container{width:100%;height:100vh;display:flex;flex-flow:column;justify-content:center;align-items:center}.check-container{width:6.25rem;height:7.5rem;display:flex;flex-flow:column;align-items:center;justify-content:space-between}.check-container .check-background{width:100%;height:calc(100% - 1.25rem);background:linear-gradient(to bottom right,#5de593,#41d67c);box-shadow:0 0 0 65px #ffffff40 inset,0 0 0 65px #ffffff40 inset;transform:scale(.84);border-radius:50%;animation:animateContainer .75s ease-out forwards .75s;display:flex;align-items:center;justify-content:center;opacity:0}.check-container .check-background svg{width:65%;transform:translateY(.25rem);stroke-dasharray:80;stroke-dashoffset:80;animation:animateCheck .35s forwards 1.25s ease-out;min-width:auto!important}.check-container .check-shadow{bottom:calc(-15% - 5px);left:0;border-radius:50%;background:radial-gradient(closest-side,rgba(73,218,131,1),transparent);animation:animateShadow .75s ease-out forwards .75s}@keyframes animateContainer{0%{opacity:0;transform:scale(0);box-shadow:0 0 0 65px #ffffff40 inset,0 0 0 65px #ffffff40 inset}25%{opacity:1;transform:scale(.9);box-shadow:0 0 0 65px #ffffff40 inset,0 0 0 65px #ffffff40 inset}43.75%{transform:scale(1.15);box-shadow:0 0 0 43.334px #ffffff40 inset,0 0 0 65px #ffffff40 inset}62.5%{transform:scale(1);box-shadow:0 0 #ffffff40 inset,0 0 0 21.667px #ffffff40 inset}81.25%{box-shadow:0 0 #ffffff40 inset,0 0 #ffffff40 inset}to{opacity:1;box-shadow:0 0 #ffffff40 inset,0 0 #ffffff40 inset}}@keyframes animateCheck{0%{stroke-dashoffset:80}to{stroke-dashoffset:0}}@keyframes animateShadow{0%{opacity:0;width:100%;height:15%}25%{opacity:.25}43.75%{width:40%;height:7%;opacity:.35}to{width:85%;height:15%;opacity:.25}}#login-dlg-wrap .loader-wrap{display:flex;justify-content:center;align-items:center;height:100%;width:100%;position:absolute;top:0;left:0;z-index:100;background:#ffffff42;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}#login-dlg-wrap .login-dlg-loader{border:15px solid #e7e7e7;border-top:15px solid #52dba1;border-radius:50%;width:100px;height:100px;animation:spinloader 2s linear infinite}#login-dlg-wrap .loader-wrap:before{content:\"\";position:absolute;width:70px;height:70px;transform:translate(-50%,-50%);z-index:1;border:15px solid #e7e7e700;border-top:15px solid #52dba1c9;border-radius:50%;animation:spinloader .75s linear infinite}@keyframes spinloader{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
218
209
  }], ctorParameters: () => [{ type: i1.MessageService }, { type: i0.ChangeDetectorRef }, { type: i2.DynamicDialogRef }, { type: i2.DynamicDialogConfig }, { type: i3.LocalizeTokenService }, { type: i4.HttpClient }] });
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUtbG9naW5kbGcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xvY2FsaXplLWxvZ2luZGxnL2xvY2FsaXplLWxvZ2luZGxnLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwsU0FBUyxFQUVULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7Ozs7QUFzU2pFLE1BQU0sT0FBTyx5QkFBeUI7SUFjakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBbEJWLFVBQVUsR0FBRyxZQUFZLENBQUM7SUFDbkMsUUFBUSxDQUFNO0lBQ0wsV0FBVyxDQUFvQjtJQUN4QyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDQyxNQUFNLENBQUM7SUFDUCxXQUFXLENBQW9CO0lBRXhDLE1BQU0sQ0FBWTtJQUNsQixRQUFRLENBQVU7SUFHMUIsWUFDbUIsY0FBOEIsRUFDOUIsR0FBc0IsRUFDdEIsTUFBd0IsRUFDeEIsU0FBOEIsRUFDOUIsWUFBa0MsRUFDbEMsVUFBc0I7UUFMdEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQXFCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFzQjtRQUNsQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBRXZDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztRQUN4RCxJQUFJLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDbkMsSUFBSSxD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LE9BQU87WUFDTCxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBaUIsQ0FBQyxJQUFJLEVBQUU7WUFDM0csQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZ0IsQ0FBQyxJQUFJLEVBQUU7U0FDcEcsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsV0FBVyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO3dHQTdGekIseUJBQXlCOzRGQUF6Qix5QkFBeUIsZ0RBSHpCLENBQUMsY0FBYyxDQUFDLDBCQTNEakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQXlESDs7NEZBS0kseUJBQXlCO2tCQW5TckMsU0FBUzsrQkFxT0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQXlESCxZQUNHLHVCQUF1QixhQUN0QixDQUFDLGNBQWMsQ0FBQyxpQkFDWixpQkFBaUIsQ0FBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gXCJwcmltZW5nL2R5bmFtaWNkaWFsb2dcIjtcclxuaW1wb3J0IHsgSnd0UGF5bG9hZCwgTG9jYWxpemVUb2tlblNlcnZpY2UgfSBmcm9tIFwiLi4vbG9jYWxpemUtdG9rZW4vbG9jYWxpemUudG9rZW4uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVRva2VuIH0gZnJvbSBcIi4uL2xvY2FsaXplLXRva2VuL2xvY2FsaXplLnRva2VuXCI7XHJcbmltcG9ydCB7IElMb2dpbkRpYWxvZ0NvbmZpZyB9IGZyb20gXCIuL2xvY2FsaXplLWxvZ2luZGxnLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHN0eWxlczogW2BcclxuICAjbG9naW4tZGxnLXdyYXAge1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBtYXgtd2lkdGg6IDQwMHB4O1xyXG4gICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICBwYWRkaW5nOiAzMHB4O1xyXG4gIH1cclxuICBcclxuICAubG9naW4tZGxnLWVsbSB7XHJcbiAgICBtYXJnaW4tdG9wOiAxcmVtO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWhlYWRlciB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1oZWFkZXIgaDMge1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICBmb250LXNpemU6IDAuOXJlbTtcclxuICAgIGNvbG9yOiBvcmFuZ2U7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgfVxyXG4gIFxyXG4gICNsb2dpbi1sb2dvIHtcclxuICAgIGhlaWdodDogNDBweDtcclxuICAgIHdpZHRoOiA0MHB4O1xyXG4gICAgYmFja2dyb3VuZDogdXJsKFwiL2Fzc2V0cy9pbWFnZXMvbG9nby0zMDBweC5wbmdcIikgbm8tcmVwZWF0O1xyXG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgLnAtaW5wdXRncm91cCB7XHJcbiAgICBoZWlnaHQ6IDQ1cHg7XHJcbiAgfVxyXG4gIFxyXG4gICNsb2dpbi1kbGctY29udGVudCAucC1pbnB1dGdyb3VwIC5wLWlucHV0Z3JvdXAtYWRkb24ge1xyXG4gICAgaGVpZ2h0OiA0NXB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTVweCAwIDAgMTVweDtcclxuICAgIHdpZHRoOiA1MHB4O1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgLnAtaW5wdXRncm91cCAucC1pbnB1dGdyb3VwLWFkZG9uICoge1xyXG4gICAgZm9udC1zaXplOiAxcmVtO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgLnAtaW5wdXRncm91cCBpbnB1dCB7XHJcbiAgICBoZWlnaHQ6IDQ1cHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiAwIDE1cHggMTVweCAwO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgYnV0dG9uIHtcclxuICAgIGhlaWdodDogNDVweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDE1cHg7XHJcbiAgfVxyXG4gIFxyXG4gIC8qY2hlY2sgYW5pbWF0aW9uIGJsb2NrKi9cclxuICBcclxuICAuY2hlY2stYW5pbWF0aW9uLXdyYXAge1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDIwMHB4KTtcclxuICAgIG1pbi1oZWlnaHQ6IDQwMHB4O1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stbWFpbi1jb250YWluZXIge1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IDEwMHZoO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogY29sdW1uO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stY29udGFpbmVyIHtcclxuICAgIHdpZHRoOiA2LjI1cmVtO1xyXG4gICAgaGVpZ2h0OiA3LjVyZW07XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiBjb2x1bW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stY29udGFpbmVyIC5jaGVjay1iYWNrZ3JvdW5kIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxLjI1cmVtKTtcclxuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20gcmlnaHQsICM1ZGU1OTMsICM0MWQ2N2MpO1xyXG4gICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggNjVweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuODQpO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgYW5pbWF0aW9uOiBhbmltYXRlQ29udGFpbmVyIDAuNzVzIGVhc2Utb3V0IGZvcndhcmRzIDAuNzVzO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIG9wYWNpdHk6IDA7XHJcbiAgfVxyXG4gIFxyXG4gIC5jaGVjay1jb250YWluZXIgLmNoZWNrLWJhY2tncm91bmQgc3ZnIHtcclxuICAgIHdpZHRoOiA2NSU7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMC4yNXJlbSk7XHJcbiAgICBzdHJva2UtZGFzaGFycmF5OiA4MDtcclxuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiA4MDtcclxuICAgIGFuaW1hdGlvbjogYW5pbWF0ZUNoZWNrIDAuMzVzIGZvcndhcmRzIDEuMjVzIGVhc2Utb3V0O1xyXG4gICAgbWluLXdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG4gIFxyXG4gIC5jaGVjay1jb250YWluZXIgLmNoZWNrLXNoYWRvdyB7XHJcbiAgICBib3R0b206IGNhbGMoLTE1JSAtIDVweCk7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNsb3Nlc3Qtc2lkZSwgcmdiYSg3MywgMjE4LCAxMzEsIDEpLCB0cmFuc3BhcmVudCk7XHJcbiAgICBhbmltYXRpb246IGFuaW1hdGVTaGFkb3cgMC43NXMgZWFzZS1vdXQgZm9yd2FyZHMgMC43NXM7XHJcbiAgfVxyXG4gIFxyXG4gIEBrZXlmcmFtZXMgYW5pbWF0ZUNvbnRhaW5lciB7XHJcbiAgICAwJSB7XHJcbiAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XHJcbiAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldCwgMHB4IDBweCAwcHggNjVweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgfVxyXG4gIFxyXG4gICAgMjUlIHtcclxuICAgICAgb3BhY2l0eTogMTtcclxuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xyXG4gICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldDtcclxuICAgIH1cclxuICBcclxuICAgIDQzLjc1JSB7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xNSk7XHJcbiAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDQzLjMzNHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldDtcclxuICAgIH1cclxuICBcclxuICAgIDYyLjUlIHtcclxuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcclxuICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDIxLjY2N3B4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICA4MS4yNSUge1xyXG4gICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCAwcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldCwgMHB4IDBweCAwcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAxMDAlIHtcclxuICAgICAgb3BhY2l0eTogMTtcclxuICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBAa2V5ZnJhbWVzIGFuaW1hdGVDaGVjayB7XHJcbiAgICBmcm9tIHtcclxuICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDgwO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgdG8ge1xyXG4gICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgQGtleWZyYW1lcyBhbmltYXRlU2hhZG93IHtcclxuICAgIDAlIHtcclxuICAgICAgb3BhY2l0eTogMDtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIGhlaWdodDogMTUlO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgMjUlIHtcclxuICAgICAgb3BhY2l0eTogMC4yNTtcclxuICAgIH1cclxuICBcclxuICAgIDQzLjc1JSB7XHJcbiAgICAgIHdpZHRoOiA0MCU7XHJcbiAgICAgIGhlaWdodDogNyU7XHJcbiAgICAgIG9wYWNpdHk6IDAuMzU7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAxMDAlIHtcclxuICAgICAgd2lkdGg6IDg1JTtcclxuICAgICAgaGVpZ2h0OiAxNSU7XHJcbiAgICAgIG9wYWNpdHk6IDAuMjU7XHJcbiAgICB9XHJcbiAgfVxyXG4gICNsb2dpbi1kbGctd3JhcCAubG9hZGVyLXdyYXAge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGhlaWdodDoxMDAlO1xyXG4gICAgd2lkdGg6MTAwJTtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB6LWluZGV4OiAxMDA7XHJcbiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmNDI7XHJcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMXB4KTtcclxuICB9XHJcblxyXG4gICNsb2dpbi1kbGctd3JhcCAubG9naW4tZGxnLWxvYWRlciB7XHJcbiAgICBib3JkZXI6IDE1cHggc29saWQgI2U3ZTdlNztcclxuICAgIGJvcmRlci10b3A6IDE1cHggc29saWQgIzUyZGJhMTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIHdpZHRoOiAxMDBweDtcclxuICAgIGhlaWdodDogMTAwcHg7XHJcbiAgICBhbmltYXRpb246IHNwaW5sb2FkZXIgMnMgbGluZWFyIGluZmluaXRlO1xyXG4gIH1cclxuXHJcbiAgI2xvZ2luLWRsZy13cmFwIC5sb2FkZXItd3JhcDo6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6IFwiXCI7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB3aWR0aDogNzBweDtcclxuICAgIGhlaWdodDogNzBweDtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xyXG4gICAgei1pbmRleDogMTtcclxuICAgIGJvcmRlcjogMTVweCBzb2xpZCAjZTdlN2U3MDA7XHJcbiAgICBib3JkZXItdG9wOiAxNXB4IHNvbGlkICM1MmRiYTFjOTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIGFuaW1hdGlvbjogc3BpbmxvYWRlciAuNzVzIGxpbmVhciBpbmZpbml0ZTtcclxuICB9XHJcblxyXG4gIEBrZXlmcmFtZXMgc3BpbmxvYWRlciB7XHJcbiAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XHJcbiAgICAxMDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxyXG4gIH1cclxuICBgXSxcclxuICB0ZW1wbGF0ZTogYDxwLXRvYXN0IGtleT1cIiRsb2dpbi1kbGdcIiBwb3NpdGlvbj1cInRvcC1jZW50ZXJcIj48L3AtdG9hc3Q+XHJcbiAgPGRpdiBpZD1cImxvZ2luLWRsZy13cmFwXCI+XHJcbiAgICA8ZGl2IGlkPVwibG9naW4tZGxnLWhlYWRlclwiPlxyXG4gICAgICA8ZGl2IGlkPVwibG9naW4tbG9nb1wiIGNsYXNzPVwicC1tYi0yXCI+PC9kaXY+XHJcbiAgICAgIDxoMyAqbmdJZj1cIiFzdWNjZXNzXCI+WW91ciBzZXNzaW9uIGlzIGV4cGlyZWQhIDxicj4gUGxlYXNlIGxvZ2luIGFnYWluIHRvIGNvbnRpbnVlLjwvaDM+XHJcbiAgICAgIDxoMyAqbmdJZj1cInN1Y2Nlc3NcIiBzdHlsZT1cImNvbG9yOmdyZWVuICFpbXBvcnRhbnQ7XCI+WW91IGhhdmVkIHN1Y2Nlc3NmdWxseSBsb2dnZWQgaW4uPC9oMz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBpZD1cImxvZ2luLWRsZy1jb250ZW50XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3VjY2Vzc1wiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJsb2FkZXItd3JhcFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWRsZy1sb2FkZXJcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZGxnLWVsbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtaW5wdXRncm91cFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXRncm91cC1hZGRvblwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIj5wZXJzb248L2k+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIHBJbnB1dFRleHQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlVzZXJuYW1lXCIgW3ZhbHVlXT1cImRlY29kZVRva2VuPy5lbWFpbFwiIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZGxnLWVsbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtaW5wdXRncm91cFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXRncm91cC1hZGRvblwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIj5sb2NrPC9pPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxpbnB1dCBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIChrZXlkb3duLmVudGVyKT1cImNsaWNrTG9naW4oKVwiIHBJbnB1dFRleHQgdHlwZT1cInBhc3N3b3JkXCIgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiIFsobmdNb2RlbCldPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgIGF1dG9mb2N1cyAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWRsZy1lbG1cIj5cclxuICAgICAgICAgIDxidXR0b24gc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBsYWJlbD1cIkxvZ2luXCIgKGNsaWNrKT1cImNsaWNrTG9naW4oKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcGFzc3dvcmQgfHwgbG9hZGluZ1wiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1kbGctZWxtXCIgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6IGNlbnRlcjt1c2VyLXNlbGVjdDogbm9uZTtcIj5cclxuICAgICAgICAgIDxzcGFuPk5vLCBJIHdhbnQgdG8gbG9naW4gd2l0aCBhbm90aGVyIHVzZXIuPC9zcGFuPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLXRleHRcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBsYWJlbD1cIkxvZ291dFwiIChjbGljayk9XCJjbGlja0xvZ291dCgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VjY2Vzc1wiPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjM1cHg7XCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWFuaW1hdGlvbi13cmFwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2stbWFpbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1iYWNrZ3JvdW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgNjUgNTFcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk03IDI1TDI3LjMwNzcgNDRMNTguNSA3XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+YCxcclxuICBzZWxlY3RvcjogXCJhcHAtbG9jYWxpemUtbG9naW5kbGdcIixcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExvY2FsaXplTG9naW5kbGdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHJlYWRvbmx5IG1lc3NhZ2VLZXkgPSBcIiRsb2dpbi1kbGdcIjtcclxuICBwYXNzd29yZDogYW55O1xyXG4gIHJlYWRvbmx5IGRlY29kZVRva2VuOiBKd3RQYXlsb2FkIHwgbnVsbDtcclxuICBsb2FkaW5nID0gZmFsc2U7XHJcbiAgc3VjY2VzcyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9naW5Db25maWc6IElMb2dpbkRpYWxvZ0NvbmZpZ1xyXG5cclxuICBwcml2YXRlIGxvZ291dD86ICgpID0+IGFueVxyXG4gIHByaXZhdGUgbG9naW5Vcmw/OiBzdHJpbmc7XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHQ6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkbGdSZWY6IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRsZ0NvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdG9rZW5TZXJ2aWNlOiBMb2NhbGl6ZVRva2VuU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSHR0cENsaWVudFxyXG4gICkge1xyXG4gICAgdGhpcy5kZWNvZGVUb2tlbiA9IHRoaXMudG9rZW5TZXJ2aWNlLmRlY29kZVJlZnJlc2hUb2tlbjtcclxuICAgIHRoaXMuY29uZmlnID0gTG9jYWxpemVUb2tlbi5jb25maWc7XHJcbiAgICB0aGlzLmxvZ2luQ29uZmlnID0gdGhpcy5kbGdDb25maWcuZGF0YS5sb2dpbkNvbmZpZztcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kbGdDb25maWcuY2xvc2FibGUgPSBmYWxzZTtcclxuICAgIHRoaXMubG9nb3V0ID0gdGhpcy5sb2dpbkNvbmZpZy5sb2dvdXRGdW5jO1xyXG4gICAgdGhpcy5sb2dpblVybCA9IHRoaXMubG9naW5Db25maWcubG9naW5VcmxcclxuXHJcbiAgICBpZiAoIXRoaXMuZGVjb2RlVG9rZW4pIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgIGtleTogdGhpcy5tZXNzYWdlS2V5LFxyXG4gICAgICAgIHNldmVyaXR5OiBcImVycm9yXCIsXHJcbiAgICAgICAgc3VtbWFyeTogXCJUb2tlbiBpcyBpbnZhbGlkXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9nb3V0Py4oKSwgMjAwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmNkdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjbGlja0xvZ2luKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRQYXNzd29yZCkge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAga2V5OiB0aGlzLm1lc3NhZ2VLZXksXHJcbiAgICAgICAgc2V2ZXJpdHk6IFwiZXJyb3JcIixcclxuICAgICAgICBzdW1tYXJ5OiBcIlBhc3N3b3JkIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGF0IGxlYXN0IDYgY2hhcmFjdGVyc1wiLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgbG9naW5SZXMgPSBhd2FpdCB0aGlzLmxvZ2luKCk7XHJcbiAgICBpZiAoIWxvZ2luUmVzPy5zdGF0dXMpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgIGtleTogdGhpcy5tZXNzYWdlS2V5LFxyXG4gICAgICAgIHNldmVyaXR5OiBcImVycm9yXCIsXHJcbiAgICAgICAgc3VtbWFyeTogbG9naW5SZXMubWVzc2FnZSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50b2tlblNlcnZpY2UuYWNjZXNzVG9rZW4gPSBsb2dpblJlcy50b2tlbnMuYWNjZXNzVG9rZW47XHJcbiAgICBMb2NhbGl6ZVRva2VuLnN0b3JhZ2Uuc2V0KHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlbk5hbWUhLCBsb2dpblJlcy50b2tlbnMucmVmcmVzaFRva2VuKTtcclxuICAgIHRoaXMuc3VjY2VzcyA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGxnUmVmLmNsb3NlKHRydWUpLCAyMDAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9naW4oKSB7XHJcbiAgICBjb25zdCBwYXRoID0gdGhpcy5sb2dpblVybCA/PyBcIi9hcGkvYXV0aC9sb2dpblwiO1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+XHJcbiAgICAgIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAgIC5wb3N0KHBhdGgsIHsgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQudHJpbSgpIH0sIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCkgfSlcclxuICAgICAgICAuc3Vic2NyaWJlKHsgbmV4dDogcmVzb2x2ZSwgZXJyb3I6IHJlamVjdCB9KVxyXG4gICAgKTtcclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SGVhZGVycygpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIFtMb2NhbGl6ZVRva2VuLmh0dHBIZWFkZXJzLlhfUkVGUkVTSF9UT0tFTl06IExvY2FsaXplVG9rZW4uc3RvcmFnZS5nZXQodGhpcy5jb25maWcucmVmcmVzaFRva2VuTmFtZSEpID8/IFwiXCIsXHJcbiAgICAgIFtMb2NhbGl6ZVRva2VuLmh0dHBIZWFkZXJzLlhfVEVOQU5UXTogTG9jYWxpemVUb2tlbi5zdG9yYWdlLmdldCh0aGlzLmNvbmZpZy50ZW5hbnRUb2tlbk5hbWUhKSA/PyBcIlwiLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldCBpc1ZhbGlkUGFzc3dvcmQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXNzd29yZCAmJiB0aGlzLnBhc3N3b3JkLnRyaW0oKS5sZW5ndGggPj0gNjtcclxuICB9XHJcblxyXG4gIGNsaWNrTG9nb3V0ID0gKCkgPT4gdGhpcy5sb2dvdXQ/LigpO1xyXG59XHJcbiJdfQ==
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUtbG9naW5kbGcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xvY2FsaXplLWxvZ2luZGxnL2xvY2FsaXplLWxvZ2luZGxnLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwsU0FBUyxFQUVULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7Ozs7QUFzU2pFLE1BQU0sT0FBTyx5QkFBeUI7SUFjakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBbEJWLFVBQVUsR0FBRyxZQUFZLENBQUM7SUFDbkMsUUFBUSxDQUFNO0lBQ0wsV0FBVyxDQUFvQjtJQUN4QyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDQyxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUM5QixXQUFXLENBQW9CO0lBRXhDLE1BQU0sQ0FBWTtJQUNsQixRQUFRLENBQVU7SUFHMUIsWUFDbUIsY0FBOEIsRUFDOUIsR0FBc0IsRUFDdEIsTUFBd0IsRUFDeEIsU0FBOEIsRUFDOUIsWUFBa0MsRUFDbEMsVUFBc0I7UUFMdEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQXFCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFzQjtRQUNsQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBRXZDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztRQUN4RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxT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c0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gXCJwcmltZW5nL2R5bmFtaWNkaWFsb2dcIjtcclxuaW1wb3J0IHsgSnd0UGF5bG9hZCwgTG9jYWxpemVUb2tlblNlcnZpY2UgfSBmcm9tIFwiLi4vbG9jYWxpemUtdG9rZW4vbG9jYWxpemUudG9rZW4uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVRva2VuIH0gZnJvbSBcIi4uL2xvY2FsaXplLXRva2VuL2xvY2FsaXplLnRva2VuXCI7XHJcbmltcG9ydCB7IElMb2dpbkRpYWxvZ0NvbmZpZyB9IGZyb20gXCIuL2xvY2FsaXplLWxvZ2luZGxnLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHN0eWxlczogW2BcclxuICAjbG9naW4tZGxnLXdyYXAge1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBtYXgtd2lkdGg6IDQwMHB4O1xyXG4gICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICBwYWRkaW5nOiAzMHB4O1xyXG4gIH1cclxuICBcclxuICAubG9naW4tZGxnLWVsbSB7XHJcbiAgICBtYXJnaW4tdG9wOiAxcmVtO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWhlYWRlciB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1oZWFkZXIgaDMge1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICBmb250LXNpemU6IDAuOXJlbTtcclxuICAgIGNvbG9yOiBvcmFuZ2U7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgfVxyXG4gIFxyXG4gICNsb2dpbi1sb2dvIHtcclxuICAgIGhlaWdodDogNDBweDtcclxuICAgIHdpZHRoOiA0MHB4O1xyXG4gICAgYmFja2dyb3VuZDogdXJsKFwiL2Fzc2V0cy9pbWFnZXMvbG9nby0zMDBweC5wbmdcIikgbm8tcmVwZWF0O1xyXG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgLnAtaW5wdXRncm91cCB7XHJcbiAgICBoZWlnaHQ6IDQ1cHg7XHJcbiAgfVxyXG4gIFxyXG4gICNsb2dpbi1kbGctY29udGVudCAucC1pbnB1dGdyb3VwIC5wLWlucHV0Z3JvdXAtYWRkb24ge1xyXG4gICAgaGVpZ2h0OiA0NXB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTVweCAwIDAgMTVweDtcclxuICAgIHdpZHRoOiA1MHB4O1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgLnAtaW5wdXRncm91cCAucC1pbnB1dGdyb3VwLWFkZG9uICoge1xyXG4gICAgZm9udC1zaXplOiAxcmVtO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgLnAtaW5wdXRncm91cCBpbnB1dCB7XHJcbiAgICBoZWlnaHQ6IDQ1cHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiAwIDE1cHggMTVweCAwO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgYnV0dG9uIHtcclxuICAgIGhlaWdodDogNDVweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDE1cHg7XHJcbiAgfVxyXG4gIFxyXG4gIC8qY2hlY2sgYW5pbWF0aW9uIGJsb2NrKi9cclxuICBcclxuICAuY2hlY2stYW5pbWF0aW9uLXdyYXAge1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDIwMHB4KTtcclxuICAgIG1pbi1oZWlnaHQ6IDQwMHB4O1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stbWFpbi1jb250YWluZXIge1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IDEwMHZoO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogY29sdW1uO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stY29udGFpbmVyIHtcclxuICAgIHdpZHRoOiA2LjI1cmVtO1xyXG4gICAgaGVpZ2h0OiA3LjVyZW07XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiBjb2x1bW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stY29udGFpbmVyIC5jaGVjay1iYWNrZ3JvdW5kIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxLjI1cmVtKTtcclxuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20gcmlnaHQsICM1ZGU1OTMsICM0MWQ2N2MpO1xyXG4gICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggNjVweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuODQpO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgYW5pbWF0aW9uOiBhbmltYXRlQ29udGFpbmVyIDAuNzVzIGVhc2Utb3V0IGZvcndhcmRzIDAuNzVzO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIG9wYWNpdHk6IDA7XHJcbiAgfVxyXG4gIFxyXG4gIC5jaGVjay1jb250YWluZXIgLmNoZWNrLWJhY2tncm91bmQgc3ZnIHtcclxuICAgIHdpZHRoOiA2NSU7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMC4yNXJlbSk7XHJcbiAgICBzdHJva2UtZGFzaGFycmF5OiA4MDtcclxuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiA4MDtcclxuICAgIGFuaW1hdGlvbjogYW5pbWF0ZUNoZWNrIDAuMzVzIGZvcndhcmRzIDEuMjVzIGVhc2Utb3V0O1xyXG4gICAgbWluLXdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG4gIFxyXG4gIC5jaGVjay1jb250YWluZXIgLmNoZWNrLXNoYWRvdyB7XHJcbiAgICBib3R0b206IGNhbGMoLTE1JSAtIDVweCk7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNsb3Nlc3Qtc2lkZSwgcmdiYSg3MywgMjE4LCAxMzEsIDEpLCB0cmFuc3BhcmVudCk7XHJcbiAgICBhbmltYXRpb246IGFuaW1hdGVTaGFkb3cgMC43NXMgZWFzZS1vdXQgZm9yd2FyZHMgMC43NXM7XHJcbiAgfVxyXG4gIFxyXG4gIEBrZXlmcmFtZXMgYW5pbWF0ZUNvbnRhaW5lciB7XHJcbiAgICAwJSB7XHJcbiAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XHJcbiAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldCwgMHB4IDBweCAwcHggNjVweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgfVxyXG4gIFxyXG4gICAgMjUlIHtcclxuICAgICAgb3BhY2l0eTogMTtcclxuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xyXG4gICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldDtcclxuICAgIH1cclxuICBcclxuICAgIDQzLjc1JSB7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xNSk7XHJcbiAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDQzLjMzNHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldDtcclxuICAgIH1cclxuICBcclxuICAgIDYyLjUlIHtcclxuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcclxuICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDIxLjY2N3B4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICA4MS4yNSUge1xyXG4gICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCAwcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldCwgMHB4IDBweCAwcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAxMDAlIHtcclxuICAgICAgb3BhY2l0eTogMTtcclxuICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBAa2V5ZnJhbWVzIGFuaW1hdGVDaGVjayB7XHJcbiAgICBmcm9tIHtcclxuICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDgwO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgdG8ge1xyXG4gICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgQGtleWZyYW1lcyBhbmltYXRlU2hhZG93IHtcclxuICAgIDAlIHtcclxuICAgICAgb3BhY2l0eTogMDtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIGhlaWdodDogMTUlO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgMjUlIHtcclxuICAgICAgb3BhY2l0eTogMC4yNTtcclxuICAgIH1cclxuICBcclxuICAgIDQzLjc1JSB7XHJcbiAgICAgIHdpZHRoOiA0MCU7XHJcbiAgICAgIGhlaWdodDogNyU7XHJcbiAgICAgIG9wYWNpdHk6IDAuMzU7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAxMDAlIHtcclxuICAgICAgd2lkdGg6IDg1JTtcclxuICAgICAgaGVpZ2h0OiAxNSU7XHJcbiAgICAgIG9wYWNpdHk6IDAuMjU7XHJcbiAgICB9XHJcbiAgfVxyXG4gICNsb2dpbi1kbGctd3JhcCAubG9hZGVyLXdyYXAge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGhlaWdodDoxMDAlO1xyXG4gICAgd2lkdGg6MTAwJTtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB6LWluZGV4OiAxMDA7XHJcbiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmNDI7XHJcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMXB4KTtcclxuICB9XHJcblxyXG4gICNsb2dpbi1kbGctd3JhcCAubG9naW4tZGxnLWxvYWRlciB7XHJcbiAgICBib3JkZXI6IDE1cHggc29saWQgI2U3ZTdlNztcclxuICAgIGJvcmRlci10b3A6IDE1cHggc29saWQgIzUyZGJhMTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIHdpZHRoOiAxMDBweDtcclxuICAgIGhlaWdodDogMTAwcHg7XHJcbiAgICBhbmltYXRpb246IHNwaW5sb2FkZXIgMnMgbGluZWFyIGluZmluaXRlO1xyXG4gIH1cclxuXHJcbiAgI2xvZ2luLWRsZy13cmFwIC5sb2FkZXItd3JhcDo6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6IFwiXCI7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB3aWR0aDogNzBweDtcclxuICAgIGhlaWdodDogNzBweDtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xyXG4gICAgei1pbmRleDogMTtcclxuICAgIGJvcmRlcjogMTVweCBzb2xpZCAjZTdlN2U3MDA7XHJcbiAgICBib3JkZXItdG9wOiAxNXB4IHNvbGlkICM1MmRiYTFjOTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIGFuaW1hdGlvbjogc3BpbmxvYWRlciAuNzVzIGxpbmVhciBpbmZpbml0ZTtcclxuICB9XHJcblxyXG4gIEBrZXlmcmFtZXMgc3BpbmxvYWRlciB7XHJcbiAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XHJcbiAgICAxMDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxyXG4gIH1cclxuICBgXSxcclxuICB0ZW1wbGF0ZTogYDxwLXRvYXN0IGtleT1cIiRsb2dpbi1kbGdcIiBwb3NpdGlvbj1cInRvcC1jZW50ZXJcIj48L3AtdG9hc3Q+XHJcbiAgPGRpdiBpZD1cImxvZ2luLWRsZy13cmFwXCI+XHJcbiAgICA8ZGl2IGlkPVwibG9naW4tZGxnLWhlYWRlclwiPlxyXG4gICAgICA8ZGl2IGlkPVwibG9naW4tbG9nb1wiIGNsYXNzPVwicC1tYi0yXCI+PC9kaXY+XHJcbiAgICAgIDxoMyAqbmdJZj1cIiFzdWNjZXNzXCI+WW91ciBzZXNzaW9uIGlzIGV4cGlyZWQhIDxicj4gUGxlYXNlIGxvZ2luIGFnYWluIHRvIGNvbnRpbnVlLjwvaDM+XHJcbiAgICAgIDxoMyAqbmdJZj1cInN1Y2Nlc3NcIiBzdHlsZT1cImNvbG9yOmdyZWVuICFpbXBvcnRhbnQ7XCI+WW91IGhhdmVkIHN1Y2Nlc3NmdWxseSBsb2dnZWQgaW4uPC9oMz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBpZD1cImxvZ2luLWRsZy1jb250ZW50XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3VjY2Vzc1wiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJsb2FkZXItd3JhcFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWRsZy1sb2FkZXJcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZGxnLWVsbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtaW5wdXRncm91cFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXRncm91cC1hZGRvblwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIj5wZXJzb248L2k+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIHBJbnB1dFRleHQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlVzZXJuYW1lXCIgW3ZhbHVlXT1cImRlY29kZVRva2VuPy5lbWFpbFwiIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZGxnLWVsbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtaW5wdXRncm91cFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXRncm91cC1hZGRvblwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIj5sb2NrPC9pPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxpbnB1dCBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIChrZXlkb3duLmVudGVyKT1cImNsaWNrTG9naW4oKVwiIHBJbnB1dFRleHQgdHlwZT1cInBhc3N3b3JkXCIgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiIFsobmdNb2RlbCldPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgIGF1dG9mb2N1cyAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWRsZy1lbG1cIj5cclxuICAgICAgICAgIDxidXR0b24gc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBsYWJlbD1cIkxvZ2luXCIgKGNsaWNrKT1cImNsaWNrTG9naW4oKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcGFzc3dvcmQgfHwgbG9hZGluZ1wiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1kbGctZWxtXCIgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6IGNlbnRlcjt1c2VyLXNlbGVjdDogbm9uZTtcIj5cclxuICAgICAgICAgIDxzcGFuPk5vLCBJIHdhbnQgdG8gbG9naW4gd2l0aCBhbm90aGVyIHVzZXIuPC9zcGFuPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLXRleHRcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBsYWJlbD1cIkxvZ291dFwiIChjbGljayk9XCJjbGlja0xvZ291dCgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VjY2Vzc1wiPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjM1cHg7XCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWFuaW1hdGlvbi13cmFwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2stbWFpbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1iYWNrZ3JvdW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgNjUgNTFcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk03IDI1TDI3LjMwNzcgNDRMNTguNSA3XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+YCxcclxuICBzZWxlY3RvcjogXCJhcHAtbG9jYWxpemUtbG9naW5kbGdcIixcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExvY2FsaXplTG9naW5kbGdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHJlYWRvbmx5IG1lc3NhZ2VLZXkgPSBcIiRsb2dpbi1kbGdcIjtcclxuICBwYXNzd29yZDogYW55O1xyXG4gIHJlYWRvbmx5IGRlY29kZVRva2VuOiBKd3RQYXlsb2FkIHwgbnVsbDtcclxuICBsb2FkaW5nID0gZmFsc2U7XHJcbiAgc3VjY2VzcyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gTG9jYWxpemVUb2tlbi5jb25maWc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dpbkNvbmZpZzogSUxvZ2luRGlhbG9nQ29uZmlnXHJcblxyXG4gIHByaXZhdGUgbG9nb3V0PzogKCkgPT4gYW55XHJcbiAgcHJpdmF0ZSBsb2dpblVybD86IHN0cmluZztcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkdDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRsZ1JlZjogRHluYW1pY0RpYWxvZ1JlZixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGxnQ29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0b2tlblNlcnZpY2U6IExvY2FsaXplVG9rZW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50XHJcbiAgKSB7XHJcbiAgICB0aGlzLmRlY29kZVRva2VuID0gdGhpcy50b2tlblNlcnZpY2UuZGVjb2RlUmVmcmVzaFRva2VuO1xyXG4gICAgdGhpcy5sb2dpbkNvbmZpZyA9IHRoaXMuZGxnQ29uZmlnLmRhdGEubG9naW5Db25maWc7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGxnQ29uZmlnLmNsb3NhYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmxvZ291dCA9IHRoaXMubG9naW5Db25maWcubG9nb3V0RnVuYztcclxuICAgIHRoaXMubG9naW5VcmwgPSB0aGlzLmxvZ2luQ29uZmlnLmxvZ2luVXJsXHJcblxyXG4gICAgaWYgKCF0aGlzLmRlY29kZVRva2VuKSB7XHJcbiAgICAgIHRoaXMuc2hvd01lc3NhZ2UoXCJlcnJvclwiLCBcIlRva2VuIGlzIGludmFsaWRcIik7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5sb2dvdXQ/LigpLCAyMDAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY2R0LmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNsaWNrTG9naW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNWYWxpZFBhc3N3b3JkKSB7XHJcbiAgICAgIHRoaXMuc2hvd01lc3NhZ2UoXCJlcnJvclwiLCBcIlBhc3N3b3JkIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGF0IGxlYXN0IDYgY2hhcmFjdGVyc1wiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBsb2dpblJlcyA9IGF3YWl0IHRoaXMubG9naW4oKTtcclxuICAgIGlmICghbG9naW5SZXM/LnN0YXR1cykge1xyXG4gICAgICB0aGlzLnNob3dNZXNzYWdlKFwiZXJyb3JcIiwgbG9naW5SZXMubWVzc2FnZSA/PyBcIkFuIGVycm9yIG9jY3VycmVkXCIpO1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudG9rZW5TZXJ2aWNlLmFjY2Vzc1Rva2VuID0gbG9naW5SZXMudG9rZW5zLmFjY2Vzc1Rva2VuO1xyXG4gICAgY29uc3QgY29va2llT3B0aW9ucyA9IHsgZXhwaXJlczogdGhpcy5sb2dpbkNvbmZpZy5leHBpcmUgPz8gNSB9XHJcbiAgICBMb2NhbGl6ZVRva2VuLnN0b3JhZ2Uuc2V0KHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlbk5hbWUhLCBsb2dpblJlcy50b2tlbnMucmVmcmVzaFRva2VuLCBjb29raWVPcHRpb25zKTtcclxuICAgIHRoaXMuc3VjY2VzcyA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGxnUmVmLmNsb3NlKHRydWUpLCAyMDAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9naW4oKSB7XHJcbiAgICBpZiAoIXRoaXMubG9naW5VcmwgfHwgIXRoaXMubG9naW5VcmwudHJpbSgpLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNob3dNZXNzYWdlKFwiZXJyb3JcIiwgXCJMb2dpbiB1cmwgaXMgcmVxdWlyZWRcIik7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvZ2luIHVybCBpcyByZXF1aXJlZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PlxyXG4gICAgICB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmxvZ2luVXJsISwgeyBwYXNzd29yZDogdGhpcy5wYXNzd29yZC50cmltKCkgfSwgeyBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSB9KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoeyBuZXh0OiByZXNvbHZlLCBlcnJvcjogcmVqZWN0IH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRIZWFkZXJzKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgW0xvY2FsaXplVG9rZW4uaHR0cEhlYWRlcnMuWF9SRUZSRVNIX1RPS0VOXTogTG9jYWxpemVUb2tlbi5zdG9yYWdlLmdldCh0aGlzLmNvbmZpZy5yZWZyZXNoVG9rZW5OYW1lISkgPz8gXCJcIixcclxuICAgICAgW0xvY2FsaXplVG9rZW4uaHR0cEhlYWRlcnMuWF9URU5BTlRdOiBMb2NhbGl6ZVRva2VuLnN0b3JhZ2UuZ2V0KHRoaXMuY29uZmlnLnRlbmFudFRva2VuTmFtZSEpID8/IFwiXCIsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzVmFsaWRQYXNzd29yZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnBhc3N3b3JkICYmIHRoaXMucGFzc3dvcmQudHJpbSgpLmxlbmd0aCA+PSA2ICYmIHRoaXMucGFzc3dvcmQudHJpbSgpLmxlbmd0aCA8PSAxNjtcclxuICB9XHJcblxyXG4gIGNsaWNrTG9nb3V0ID0gKCkgPT4gdGhpcy5sb2dvdXQ/LigpO1xyXG5cclxuICBwcml2YXRlIHNob3dNZXNzYWdlID0gKHNldmVyaXR5OiBzdHJpbmcsIHN1bW1hcnk6IHN0cmluZykgPT5cclxuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsga2V5OiB0aGlzLm1lc3NhZ2VLZXksIHNldmVyaXR5LCBzdW1tYXJ5IH0pO1xyXG59XHJcbiJdfQ==
@@ -31,4 +31,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
31
31
  providedIn: 'root'
32
32
  }]
33
33
  }], ctorParameters: () => [{ type: i0.Injector }] });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUtbG9naW5kbGcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sb2NhbGl6ZS1sb2dpbmRsZy9sb2NhbGl6ZS1sb2dpbmRsZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBdUIsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFTMUUsTUFBTSxPQUFPLHVCQUF1QjtJQUVMO0lBQTdCLFlBQTZCLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7SUFBSSxDQUFDO0lBRXBELEtBQUssQ0FBQyxlQUFlLENBQUMsV0FBK0IsRUFBRSxNQUE0QjtRQUNqRixNQUFNLEtBQUs7WUFDVCxNQUFNLEVBQUUsT0FBTztZQUNmLE1BQU0sRUFBRSxPQUFPO1lBQ2YsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7U0FDbEUsQ0FBQTtRQUNELE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBRTNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFckUsTUFBTSxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7d0dBckJVLHVCQUF1Qjs0R0FBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbmZpZyB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQgeyBMb2NhbGl6ZUxvZ2luZGxnQ29tcG9uZW50IH0gZnJvbSAnLi9sb2NhbGl6ZS1sb2dpbmRsZy5jb21wb25lbnQnO1xuZXhwb3J0IGludGVyZmFjZSBJTG9naW5EaWFsb2dDb25maWcge1xuICBsb2dpblVybD86IHN0cmluZztcbiAgbG9nb3V0VXJsPzogc3RyaW5nO1xuICBsb2dvdXRGdW5jPzogKCkgPT4gdm9pZDtcbn1cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIExvY2FsaXplTG9naW5kbGdTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcikgeyB9XG5cbiAgYXN5bmMgb3BlbkxvZ2luRGlhbG9nKGxvZ2luQ29uZmlnOiBJTG9naW5EaWFsb2dDb25maWcsIGNvbmZpZz86IER5bmFtaWNEaWFsb2dDb25maWcpIHtcbiAgICBjb25maWcgPz89IHtcbiAgICAgIGhlYWRlcjogJ0xvZ2luJyxcbiAgICAgIGhlaWdodDogJzY1MHB4JyxcbiAgICAgIHN0eWxlOiB7ICdtYXgtd2lkdGgnOiAnNDAwcHgnLCB3aWR0aDogJzEwMCUnLCAnaGVpZ2h0JzogJzY1MHB4JyB9LFxuICAgIH1cbiAgICBjb25maWcuZGF0YSA9IHsgLi4uY29uZmlnLmRhdGEgfHwge30sIC4uLnsgbG9naW5Db25maWcgfSB9O1xuXG4gICAgY29uc3QgZGlhbG9nU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KERpYWxvZ1NlcnZpY2UpO1xuICAgIGNvbnN0IGRpYWxvZyA9IGRpYWxvZ1NlcnZpY2Uub3BlbihMb2NhbGl6ZUxvZ2luZGxnQ29tcG9uZW50LCBjb25maWcpO1xuXG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+XG4gICAgICBkaWFsb2cub25DbG9zZS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICB9XG59XG4iXX0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUtbG9naW5kbGcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sb2NhbGl6ZS1sb2dpbmRsZy9sb2NhbGl6ZS1sb2dpbmRsZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBdUIsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFhMUUsTUFBTSxPQUFPLHVCQUF1QjtJQUVMO0lBQTdCLFlBQTZCLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7SUFBSSxDQUFDO0lBRXBELEtBQUssQ0FBQyxlQUFlLENBQUMsV0FBK0IsRUFBRSxNQUE0QjtRQUNqRixNQUFNLEtBQUs7WUFDVCxNQUFNLEVBQUUsT0FBTztZQUNmLE1BQU0sRUFBRSxPQUFPO1lBQ2YsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7U0FDbEUsQ0FBQTtRQUNELE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBRTNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFckUsTUFBTSxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7d0dBckJVLHVCQUF1Qjs0R0FBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbmZpZyB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQgeyBMb2NhbGl6ZUxvZ2luZGxnQ29tcG9uZW50IH0gZnJvbSAnLi9sb2NhbGl6ZS1sb2dpbmRsZy5jb21wb25lbnQnO1xuZXhwb3J0IGludGVyZmFjZSBJTG9naW5EaWFsb2dDb25maWcge1xuICBsb2dpblVybD86IHN0cmluZztcbiAgbG9nb3V0VXJsPzogc3RyaW5nO1xuICBsb2dvdXRGdW5jPzogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENvb2tpZSBleHBpcmF0aW9uIGRhdGUgaW4gZGF5cyBmcm9tIG5vdy4gSWYgbm90IHByb3ZpZGVkIHRoZSBjb29raWUgaXMgYSBzZXNzaW9uIGNvb2tpZVxuICAgKi9cbiAgZXhwaXJlPzogbnVtYmVyO1xufVxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTG9jYWxpemVMb2dpbmRsZ1NlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7IH1cblxuICBhc3luYyBvcGVuTG9naW5EaWFsb2cobG9naW5Db25maWc6IElMb2dpbkRpYWxvZ0NvbmZpZywgY29uZmlnPzogRHluYW1pY0RpYWxvZ0NvbmZpZykge1xuICAgIGNvbmZpZyA/Pz0ge1xuICAgICAgaGVhZGVyOiAnTG9naW4nLFxuICAgICAgaGVpZ2h0OiAnNjUwcHgnLFxuICAgICAgc3R5bGU6IHsgJ21heC13aWR0aCc6ICc0MDBweCcsIHdpZHRoOiAnMTAwJScsICdoZWlnaHQnOiAnNjUwcHgnIH0sXG4gICAgfVxuICAgIGNvbmZpZy5kYXRhID0geyAuLi5jb25maWcuZGF0YSB8fCB7fSwgLi4ueyBsb2dpbkNvbmZpZyB9IH07XG5cbiAgICBjb25zdCBkaWFsb2dTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoRGlhbG9nU2VydmljZSk7XG4gICAgY29uc3QgZGlhbG9nID0gZGlhbG9nU2VydmljZS5vcGVuKExvY2FsaXplTG9naW5kbGdDb21wb25lbnQsIGNvbmZpZyk7XG5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT5cbiAgICAgIGRpYWxvZy5vbkNsb3NlLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,10 +1,4 @@
1
1
  import { extractMainDomain } from "./localize.token";
2
- export var ISameSiteType;
3
- (function (ISameSiteType) {
4
- ISameSiteType["strict"] = "strict";
5
- ISameSiteType["lax"] = "lax";
6
- ISameSiteType["none"] = "none";
7
- })(ISameSiteType || (ISameSiteType = {}));
8
2
  /**
9
3
  * Assembly of @package ng2-cookies @see https://www.npmjs.com/package/ng2-cookies
10
4
  *
@@ -79,7 +73,7 @@ export class LocalizeTokenStorage {
79
73
  }
80
74
  set(name, value, options) {
81
75
  options ??= this.defaultOptions;
82
- const { expires, path, domain, secure, samesite } = options;
76
+ const { expires, path, domain, secure, samesite } = { ...options, ...this.defaultOptions };
83
77
  let cookieStr = `${encodeURIComponent(name)}=${encodeURIComponent(value)};`;
84
78
  if (expires) {
85
79
  const dtExpires = typeof expires === 'number' ? new Date(Date.now() + expires * 864e5) : expires;
@@ -111,4 +105,4 @@ export class LocalizeTokenStorage {
111
105
  }
112
106
  }
113
107
  }
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUudG9rZW4uc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sb2NhbGl6ZS10b2tlbi9sb2NhbGl6ZS50b2tlbi5zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXJELE1BQU0sQ0FBTixJQUFZLGFBSVg7QUFKRCxXQUFZLGFBQWE7SUFDdkIsa0NBQWlCLENBQUE7SUFDakIsNEJBQVcsQ0FBQTtJQUNYLDhCQUFhLENBQUE7QUFDZixDQUFDLEVBSlcsYUFBYSxLQUFiLGFBQWEsUUFJeEI7QUFVRDs7Ozs7Ozs7Ozs7O0VBWUU7QUFDRixNQUFNLE9BQU8sb0JBQW9CO0lBRS9CLElBQVksaUJBQWlCO1FBQzNCLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0QsT0FBTztZQUNMLElBQUksRUFBRSxHQUFHO1lBQ1QsTUFBTSxFQUFFLFVBQVU7WUFDbEIsTUFBTSxFQUFFLElBQUk7WUFDWixpQ0FBaUM7WUFDakMsT0FBTyxFQUFFLENBQUM7U0FDWCxDQUFBO0lBQ0gsQ0FBQztJQUVnQixjQUFjLENBQWlCO0lBQ2hELFlBQVksZUFBZ0M7UUFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxlQUFlLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2xFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxJQUFZO1FBQ2hCLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2xELElBQUksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLFFBQVEsR0FBRyxJQUFJLEdBQUcsZ0JBQWdCLEVBQUUs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O09BTUc7SUFDSCxNQUFNLENBQUMsSUFBWSxFQUFFLE9BQWUsR0FBRyxFQUFFLFNBQWlCLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUTtRQUNoRixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUyxDQUFDLElBQWEsRUFBRSxNQUFlO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUU5QixLQUFLLE1BQU0sVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dHJhY3RNYWluRG9tYWluIH0gZnJvbSBcIi4vbG9jYWxpemUudG9rZW5cIjtcclxuXHJcbmV4cG9ydCBlbnVtIElTYW1lU2l0ZVR5cGUge1xyXG4gIHN0cmljdCA9IFwic3RyaWN0XCIsXHJcbiAgbGF4ID0gXCJsYXhcIixcclxuICBub25lID0gXCJub25lXCJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29va2llT3B0aW9ucyB7XHJcbiAgZXhwaXJlcz86IG51bWJlciB8IERhdGU7XHJcbiAgcGF0aD86IHN0cmluZztcclxuICBkb21haW4/OiBzdHJpbmc7XHJcbiAgc2VjdXJlPzogYm9vbGVhbjtcclxuICBzYW1lc2l0ZT86IHN0cmluZ1xyXG59XHJcblxyXG4vKipcclxuKiBBc3NlbWJseSBvZiBAcGFja2FnZSBuZzItY29va2llcyBAc2VlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL25nMi1jb29raWVzXHJcbipcclxuKiBSZWFzc2VtYmxlZCBieVxyXG4qIEBhdXRob3Igc2FtYmF0aDk5OVxyXG4qIEBkYXRlXzI5XzA5XzIwMjFcclxuKiBVcGRhdGVkIGZyb20gcmF3IHBhcmFtZXRlcnMgdG9cclxuKiBAcGFyYW0ge0lDb29raWVPcHRpb25zfSBvcHRpb25zIGFuZCBhZGRlZCBhbm90aGVyIG5ld2VyIGNvb2tpZSBmbGFnXHJcbiogQHBhcmFtIHtzdHJpbmd9IHNhbWVzaXRlXHJcbiogQHBhcmFtIHtjb25zdGFudH0gU2FtZVNpdGVUeXBlcywgQHBhcmFtIHtzdHJpbmd9IHN0cmljdCBcInN0cmljdFwiLCBAcGFyYW0ge3N0cmluZ30gbGF4IFwibGF4XCIsIEBwYXJhbSB7c3RyaW5nfSBub25lIFwibm9uZVwiXHJcbipcclxuKiBAZW51bVxyXG4qL1xyXG5leHBvcnQgY2xhc3MgTG9jYWxpemVUb2tlblN0b3JhZ2Uge1xyXG5cclxuICBwcml2YXRlIGdldCBnZXREZWZhdWx0T3B0aW9ucygpOiBJQ29va2llT3B0aW9ucyB7XHJcbiAgICBjb25zdCBtYWluRG9tYWluID0gZXh0cmFjdE1haW5Eb21haW4od2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHBhdGg6ICcvJyxcclxuICAgICAgZG9tYWluOiBtYWluRG9tYWluLFxyXG4gICAgICBzZWN1cmU6IHRydWUsXHJcbiAgICAgIC8vIHNhbWVzaXRlOiBTYW1lU2l0ZVR5cGUuc3RyaWN0LFxyXG4gICAgICBleHBpcmVzOiAxXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRPcHRpb25zOiBJQ29va2llT3B0aW9ucztcclxuICBjb25zdHJ1Y3RvcihfZGVmYXVsdE9wdGlvbnM/OiBJQ29va2llT3B0aW9ucykge1xyXG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IF9kZWZhdWx0T3B0aW9ucyA/PyB0aGlzLmdldERlZmF1bHRPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIHRoZSBleGlzdGVuY2Ugb2YgYSBzaW5nbGUgY29va2llIGJ5IGl0J3MgbmFtZVxyXG4gICAqXHJcbiAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lIElkZW50aWZpY2F0aW9uIG9mIHRoZSBjb29raWVcclxuICAgKiBAcmV0dXJucyBleGlzdGVuY2Ugb2YgdGhlIGNvb2tpZVxyXG4gICAqL1xyXG4gIGNoZWNrKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgbmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcclxuICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoJyg/Ol4nICsgbmFtZSArICd8O1xcXFxzKicgKyBuYW1lICsgJyk9KC4qPykoPzo7fCQpJywgJ2cnKTtcclxuICAgIHJldHVybiByZWdleHAudGVzdChkb2N1bWVudC5jb29raWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgc2luZ2xlIGNvb2tpZSBieSBpdCdzIG5hbWVcclxuICAgKlxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZSBJZGVudGlmaWNhdGlvbiBvZiB0aGUgQ29va2llXHJcbiAgICogQHJldHVybnMgVGhlIENvb2tpZSdzIHZhbHVlXHJcbiAgICovXHJcbiAgZ2V0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2sobmFtZSkpIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgbmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcclxuICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoJyg/Ol4nICsgbmFtZSArICd8O1xcXFxzKicgKyBuYW1lICsgJyk9KC4qPykoPzo7fCQpJywgJ2cnKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHJlZ2V4cC5leGVjKGRvY3VtZW50LmNvb2tpZSk7XHJcbiAgICByZXR1cm4gcmVzdWx0ID8gZGVjb2RlVVJJQ29tcG9uZW50KHJlc3VsdFsxXSkgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBhIGxpc3Qgb2YgYWxsIGNvb2tpZSBhdmFpYWJsZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMgT2JqZWN0IHdpdGggYWxsIENvb2tpZXNcclxuICAgKi9cclxuICBnZXRBbGwoKTogYW55IHtcclxuICAgIGNvbnN0IGNvb2tpZXM6IGFueSA9IHt9O1xyXG4gICAgaWYgKGRvY3VtZW50LmNvb2tpZSkge1xyXG4gICAgICBjb25zdCBzcGxpdCA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xyXG4gICAgICBmb3IgKGNvbnN0IHMgb2Ygc3BsaXQpIHtcclxuICAgICAgICBjb25zdCBjdXJyQ29va2llID0gcy5zcGxpdCgnPScpO1xyXG4gICAgICAgIGN1cnJDb29raWVbMF0gPSBjdXJyQ29va2llWzBdLnRyaW0oKTtcclxuICAgICAgICBjb29raWVzW2RlY29kZVVSSUNvbXBvbmVudChjdXJyQ29va2llWzBdKV0gPSBkZWNvZGVVUklDb21wb25lbnQoY3VyckNvb2tpZVsxXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29va2llcztcclxuICB9XHJcblxyXG4gIHNldChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG9wdGlvbnM/OiBJQ29va2llT3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA/Pz0gdGhpcy5kZWZhdWx0T3B0aW9ucztcclxuICAgIGNvbnN0IHsgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUsIHNhbWVzaXRlIH0gPSBvcHRpb25zO1xyXG4gICAgbGV0IGNvb2tpZVN0ciA9IGAke2VuY29kZVVSSUNvbXBvbmVudChuYW1lKX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfTtgO1xyXG5cclxuICAgIGlmIChleHBpcmVzKSB7XHJcbiAgICAgIGNvbnN0IGR0RXhwaXJlcyA9IHR5cGVvZiBleHBpcmVzID09PSAnbnVtYmVyJyA/IG5ldyBEYXRlKERhdGUubm93KCkgKyBleHBpcmVzICogODY0ZTUpIDogZXhwaXJlcztcclxuICAgICAgY29va2llU3RyICs9IGBleHBpcmVzPSR7ZHRFeHBpcmVzLnRvVVRDU3RyaW5nKCl9O2A7XHJcbiAgICB9XHJcblxyXG4gICAgY29va2llU3RyICs9IHBhdGggPyBgcGF0aD0ke3BhdGh9O2AgOiAnJztcclxuICAgIGNvb2tpZVN0ciArPSBkb21haW4gPyBgZG9tYWluPSR7ZG9tYWlufTtgIDogJyc7XHJcbiAgICBjb29raWVTdHIgKz0gc2VjdXJlID8gJ3NlY3VyZTsnIDogJyc7XHJcbiAgICBjb29raWVTdHIgKz0gc2FtZXNpdGUgPyBgc2FtZXNpdGU9JHtzYW1lc2l0ZX07YCA6ICcnO1xyXG5cclxuICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZVN0cjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgc3BlY2lmaWVkIENvb2tpZVxyXG4gICAqXHJcbiAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lIENvb2tpZSdzIGlkZW50aWZpY2F0aW9uXHJcbiAgICogQHBhcmFtICB7c3RyaW5nfSBwYXRoIFBhdGggcmVsYXRpdmUgdG8gdGhlIGRvbWFpbiB3aGVyZSB0aGUgY29va2llIHNob3VsZCBiZSBhdmFpYWJsZS4gRGVmYXVsdCAvXHJcbiAgICogQHBhcmFtICB7c3RyaW5nfSBkb21haW4gRG9tYWluIHdoZXJlIHRoZSBjb29raWUgc2hvdWxkIGJlIGF2YWlhYmxlLiBEZWZhdWx0IGN1cnJlbnQgZG9tYWluXHJcbiAgICovXHJcbiAgZGVsZXRlKG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nID0gJy8nLCBkb21haW46IHN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXQobmFtZSwgJycsIHsgcGF0aCwgZG9tYWluLCBleHBpcmVzOiAtMSB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZSBhbGwgY29va2llIGF2YWlhYmxlXHJcbiAgICovXHJcbiAgZGVsZXRlQWxsKHBhdGg/OiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgY29va2llcyA9IHRoaXMuZ2V0QWxsKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBjb29raWVOYW1lIG9mIE9iamVjdC5rZXlzKGNvb2tpZXMpKSB7XHJcbiAgICAgIHRoaXMuZGVsZXRlKGNvb2tpZU5hbWUsIHBhdGgsIGRvbWFpbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUudG9rZW4uc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sb2NhbGl6ZS10b2tlbi9sb2NhbGl6ZS50b2tlbi5zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBYXJEOzs7Ozs7Ozs7Ozs7RUFZRTtBQUNGLE1BQU0sT0FBTyxvQkFBb0I7SUFFL0IsSUFBWSxpQkFBaUI7UUFDM0IsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLEdBQUc7WUFDVCxNQUFNLEVBQUUsVUFBVTtZQUNsQixNQUFNLEVBQUUsSUFBSTtZQUNaLGlDQUFpQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztTQUNYLENBQUE7SUFDSCxDQUFDO0lBRWdCLGNBQWMsQ0FBaUI7SUFDaEQsWUFBWSxlQUFnQztRQUMxQyxJQUFJLENBQUMsY0FBYyxHQUFHLGVBQWUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLElBQVk7UUFDaEIsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDbEQsSUFBSSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsUUFBUSxHQUFHLElBQUksR0FBRyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNuRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEdBQUcsQ0FBQyxJQUFZO1FBQ2QsSUFBSSxD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LENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUyxDQUFDLElBQWEsRUFBRSxNQUFlO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUU5QixLQUFLLE1BQU0sVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dHJhY3RNYWluRG9tYWluIH0gZnJvbSBcIi4vbG9jYWxpemUudG9rZW5cIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvb2tpZU9wdGlvbnMge1xyXG4gIC8qKlxyXG4gICAqIENvb2tpZSBleHBpcmF0aW9uIGRhdGUgaW4gZGF5cyBmcm9tIG5vdy4gSWYgbm90IHByb3ZpZGVkIHRoZSBjb29raWUgaXMgYSBzZXNzaW9uIGNvb2tpZVxyXG4gICAqL1xyXG4gIGV4cGlyZXM/OiBudW1iZXIgfCBEYXRlO1xyXG4gIHBhdGg/OiBzdHJpbmc7XHJcbiAgZG9tYWluPzogc3RyaW5nO1xyXG4gIHNlY3VyZT86IGJvb2xlYW47XHJcbiAgc2FtZXNpdGU/OiBcInN0cmljdFwiIHwgXCJsYXhcIiB8IFwibm9uZVwiO1xyXG59XHJcblxyXG4vKipcclxuKiBBc3NlbWJseSBvZiBAcGFja2FnZSBuZzItY29va2llcyBAc2VlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL25nMi1jb29raWVzXHJcbipcclxuKiBSZWFzc2VtYmxlZCBieVxyXG4qIEBhdXRob3Igc2FtYmF0aDk5OVxyXG4qIEBkYXRlXzI5XzA5XzIwMjFcclxuKiBVcGRhdGVkIGZyb20gcmF3IHBhcmFtZXRlcnMgdG9cclxuKiBAcGFyYW0ge0lDb29raWVPcHRpb25zfSBvcHRpb25zIGFuZCBhZGRlZCBhbm90aGVyIG5ld2VyIGNvb2tpZSBmbGFnXHJcbiogQHBhcmFtIHtzdHJpbmd9IHNhbWVzaXRlXHJcbiogQHBhcmFtIHtjb25zdGFudH0gU2FtZVNpdGVUeXBlcywgQHBhcmFtIHtzdHJpbmd9IHN0cmljdCBcInN0cmljdFwiLCBAcGFyYW0ge3N0cmluZ30gbGF4IFwibGF4XCIsIEBwYXJhbSB7c3RyaW5nfSBub25lIFwibm9uZVwiXHJcbipcclxuKiBAZW51bVxyXG4qL1xyXG5leHBvcnQgY2xhc3MgTG9jYWxpemVUb2tlblN0b3JhZ2Uge1xyXG5cclxuICBwcml2YXRlIGdldCBnZXREZWZhdWx0T3B0aW9ucygpOiBJQ29va2llT3B0aW9ucyB7XHJcbiAgICBjb25zdCBtYWluRG9tYWluID0gZXh0cmFjdE1haW5Eb21haW4od2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHBhdGg6ICcvJyxcclxuICAgICAgZG9tYWluOiBtYWluRG9tYWluLFxyXG4gICAgICBzZWN1cmU6IHRydWUsXHJcbiAgICAgIC8vIHNhbWVzaXRlOiBTYW1lU2l0ZVR5cGUuc3RyaWN0LFxyXG4gICAgICBleHBpcmVzOiAxXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRPcHRpb25zOiBJQ29va2llT3B0aW9ucztcclxuICBjb25zdHJ1Y3RvcihfZGVmYXVsdE9wdGlvbnM/OiBJQ29va2llT3B0aW9ucykge1xyXG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IF9kZWZhdWx0T3B0aW9ucyA/PyB0aGlzLmdldERlZmF1bHRPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIHRoZSBleGlzdGVuY2Ugb2YgYSBzaW5nbGUgY29va2llIGJ5IGl0J3MgbmFtZVxyXG4gICAqXHJcbiAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lIElkZW50aWZpY2F0aW9uIG9mIHRoZSBjb29raWVcclxuICAgKiBAcmV0dXJucyBleGlzdGVuY2Ugb2YgdGhlIGNvb2tpZVxyXG4gICAqL1xyXG4gIGNoZWNrKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgbmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcclxuICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoJyg/Ol4nICsgbmFtZSArICd8O1xcXFxzKicgKyBuYW1lICsgJyk9KC4qPykoPzo7fCQpJywgJ2cnKTtcclxuICAgIHJldHVybiByZWdleHAudGVzdChkb2N1bWVudC5jb29raWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgc2luZ2xlIGNvb2tpZSBieSBpdCdzIG5hbWVcclxuICAgKlxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZSBJZGVudGlmaWNhdGlvbiBvZiB0aGUgQ29va2llXHJcbiAgICogQHJldHVybnMgVGhlIENvb2tpZSdzIHZhbHVlXHJcbiAgICovXHJcbiAgZ2V0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2sobmFtZSkpIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgbmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcclxuICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoJyg/Ol4nICsgbmFtZSArICd8O1xcXFxzKicgKyBuYW1lICsgJyk9KC4qPykoPzo7fCQpJywgJ2cnKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHJlZ2V4cC5leGVjKGRvY3VtZW50LmNvb2tpZSk7XHJcbiAgICByZXR1cm4gcmVzdWx0ID8gZGVjb2RlVVJJQ29tcG9uZW50KHJlc3VsdFsxXSkgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBhIGxpc3Qgb2YgYWxsIGNvb2tpZSBhdmFpYWJsZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMgT2JqZWN0IHdpdGggYWxsIENvb2tpZXNcclxuICAgKi9cclxuICBnZXRBbGwoKTogYW55IHtcclxuICAgIGNvbnN0IGNvb2tpZXM6IGFueSA9IHt9O1xyXG4gICAgaWYgKGRvY3VtZW50LmNvb2tpZSkge1xyXG4gICAgICBjb25zdCBzcGxpdCA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xyXG4gICAgICBmb3IgKGNvbnN0IHMgb2Ygc3BsaXQpIHtcclxuICAgICAgICBjb25zdCBjdXJyQ29va2llID0gcy5zcGxpdCgnPScpO1xyXG4gICAgICAgIGN1cnJDb29raWVbMF0gPSBjdXJyQ29va2llWzBdLnRyaW0oKTtcclxuICAgICAgICBjb29raWVzW2RlY29kZVVSSUNvbXBvbmVudChjdXJyQ29va2llWzBdKV0gPSBkZWNvZGVVUklDb21wb25lbnQoY3VyckNvb2tpZVsxXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29va2llcztcclxuICB9XHJcblxyXG4gIHNldChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG9wdGlvbnM/OiBJQ29va2llT3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA/Pz0gdGhpcy5kZWZhdWx0T3B0aW9ucztcclxuICAgIGNvbnN0IHsgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUsIHNhbWVzaXRlIH0gPSB7IC4uLm9wdGlvbnMsIC4uLnRoaXMuZGVmYXVsdE9wdGlvbnMgfTtcclxuICAgIGxldCBjb29raWVTdHIgPSBgJHtlbmNvZGVVUklDb21wb25lbnQobmFtZSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX07YDtcclxuXHJcbiAgICBpZiAoZXhwaXJlcykge1xyXG4gICAgICBjb25zdCBkdEV4cGlyZXMgPSB0eXBlb2YgZXhwaXJlcyA9PT0gJ251bWJlcicgPyBuZXcgRGF0ZShEYXRlLm5vdygpICsgZXhwaXJlcyAqIDg2NGU1KSA6IGV4cGlyZXM7XHJcbiAgICAgIGNvb2tpZVN0ciArPSBgZXhwaXJlcz0ke2R0RXhwaXJlcy50b1VUQ1N0cmluZygpfTtgO1xyXG4gICAgfVxyXG5cclxuICAgIGNvb2tpZVN0ciArPSBwYXRoID8gYHBhdGg9JHtwYXRofTtgIDogJyc7XHJcbiAgICBjb29raWVTdHIgKz0gZG9tYWluID8gYGRvbWFpbj0ke2RvbWFpbn07YCA6ICcnO1xyXG4gICAgY29va2llU3RyICs9IHNlY3VyZSA/ICdzZWN1cmU7JyA6ICcnO1xyXG4gICAgY29va2llU3RyICs9IHNhbWVzaXRlID8gYHNhbWVzaXRlPSR7c2FtZXNpdGV9O2AgOiAnJztcclxuXHJcbiAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWVTdHI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmVzIHNwZWNpZmllZCBDb29raWVcclxuICAgKlxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZSBDb29raWUncyBpZGVudGlmaWNhdGlvblxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gcGF0aCBQYXRoIHJlbGF0aXZlIHRvIHRoZSBkb21haW4gd2hlcmUgdGhlIGNvb2tpZSBzaG91bGQgYmUgYXZhaWFibGUuIERlZmF1bHQgL1xyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gZG9tYWluIERvbWFpbiB3aGVyZSB0aGUgY29va2llIHNob3VsZCBiZSBhdmFpYWJsZS4gRGVmYXVsdCBjdXJyZW50IGRvbWFpblxyXG4gICAqL1xyXG4gIGRlbGV0ZShuYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZyA9ICcvJywgZG9tYWluOiBzdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0KG5hbWUsICcnLCB7IHBhdGgsIGRvbWFpbiwgZXhwaXJlczogLTEgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgYWxsIGNvb2tpZSBhdmFpYWJsZVxyXG4gICAqL1xyXG4gIGRlbGV0ZUFsbChwYXRoPzogc3RyaW5nLCBkb21haW4/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzLmdldEFsbCgpO1xyXG5cclxuICAgIGZvciAoY29uc3QgY29va2llTmFtZSBvZiBPYmplY3Qua2V5cyhjb29raWVzKSkge1xyXG4gICAgICB0aGlzLmRlbGV0ZShjb29raWVOYW1lLCBwYXRoLCBkb21haW4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -20,12 +20,6 @@ import * as i9 from 'primeng/button';
20
20
  import { ButtonModule } from 'primeng/button';
21
21
  import { BrowserModule } from '@angular/platform-browser';
22
22
 
23
- var ISameSiteType;
24
- (function (ISameSiteType) {
25
- ISameSiteType["strict"] = "strict";
26
- ISameSiteType["lax"] = "lax";
27
- ISameSiteType["none"] = "none";
28
- })(ISameSiteType || (ISameSiteType = {}));
29
23
  /**
30
24
  * Assembly of @package ng2-cookies @see https://www.npmjs.com/package/ng2-cookies
31
25
  *
@@ -100,7 +94,7 @@ class LocalizeTokenStorage {
100
94
  }
101
95
  set(name, value, options) {
102
96
  options ??= this.defaultOptions;
103
- const { expires, path, domain, secure, samesite } = options;
97
+ const { expires, path, domain, secure, samesite } = { ...options, ...this.defaultOptions };
104
98
  let cookieStr = `${encodeURIComponent(name)}=${encodeURIComponent(value)};`;
105
99
  if (expires) {
106
100
  const dtExpires = typeof expires === 'number' ? new Date(Date.now() + expires * 864e5) : expires;
@@ -413,7 +407,7 @@ class LocalizeLogindlgComponent {
413
407
  decodeToken;
414
408
  loading = false;
415
409
  success = false;
416
- config;
410
+ config = LocalizeToken.config;
417
411
  loginConfig;
418
412
  logout;
419
413
  loginUrl;
@@ -425,7 +419,6 @@ class LocalizeLogindlgComponent {
425
419
  this.tokenService = tokenService;
426
420
  this.httpClient = httpClient;
427
421
  this.decodeToken = this.tokenService.decodeRefreshToken;
428
- this.config = LocalizeToken.config;
429
422
  this.loginConfig = this.dlgConfig.data.loginConfig;
430
423
  }
431
424
  ngOnInit() {
@@ -433,11 +426,7 @@ class LocalizeLogindlgComponent {
433
426
  this.logout = this.loginConfig.logoutFunc;
434
427
  this.loginUrl = this.loginConfig.loginUrl;
435
428
  if (!this.decodeToken) {
436
- this.messageService.add({
437
- key: this.messageKey,
438
- severity: "error",
439
- summary: "Token is invalid",
440
- });
429
+ this.showMessage("error", "Token is invalid");
441
430
  setTimeout(() => this.logout?.(), 2000);
442
431
  }
443
432
  }
@@ -446,34 +435,29 @@ class LocalizeLogindlgComponent {
446
435
  }
447
436
  async clickLogin() {
448
437
  if (!this.isValidPassword) {
449
- this.messageService.add({
450
- key: this.messageKey,
451
- severity: "error",
452
- summary: "Password is required and must be at least 6 characters",
453
- });
438
+ this.showMessage("error", "Password is required and must be at least 6 characters");
439
+ return;
454
440
  }
455
441
  this.loading = true;
456
442
  const loginRes = await this.login();
457
443
  if (!loginRes?.status) {
458
- this.messageService.add({
459
- key: this.messageKey,
460
- severity: "error",
461
- summary: loginRes.message,
462
- });
444
+ this.showMessage("error", loginRes.message ?? "An error occurred");
463
445
  this.loading = false;
464
446
  return;
465
447
  }
466
448
  this.tokenService.accessToken = loginRes.tokens.accessToken;
467
- LocalizeToken.storage.set(this.config.refreshTokenName, loginRes.tokens.refreshToken);
449
+ const cookieOptions = { expires: this.loginConfig.expire ?? 5 };
450
+ LocalizeToken.storage.set(this.config.refreshTokenName, loginRes.tokens.refreshToken, cookieOptions);
468
451
  this.success = true;
469
452
  setTimeout(() => this.dlgRef.close(true), 2000);
470
453
  }
471
454
  async login() {
472
- const path = this.loginUrl ?? "/api/auth/login";
473
- const response = await new Promise((resolve, reject) => this.httpClient
474
- .post(path, { password: this.password.trim() }, { headers: this.getHeaders() })
455
+ if (!this.loginUrl || !this.loginUrl.trim().length) {
456
+ this.showMessage("error", "Login url is required");
457
+ throw new Error("Login url is required");
458
+ }
459
+ return await new Promise((resolve, reject) => this.httpClient.post(this.loginUrl, { password: this.password.trim() }, { headers: this.getHeaders() })
475
460
  .subscribe({ next: resolve, error: reject }));
476
- return response;
477
461
  }
478
462
  getHeaders() {
479
463
  return {
@@ -482,9 +466,10 @@ class LocalizeLogindlgComponent {
482
466
  };
483
467
  }
484
468
  get isValidPassword() {
485
- return this.password && this.password.trim().length >= 6;
469
+ return this.password && this.password.trim().length >= 6 && this.password.trim().length <= 16;
486
470
  }
487
471
  clickLogout = () => this.logout?.();
472
+ showMessage = (severity, summary) => this.messageService.add({ key: this.messageKey, severity, summary });
488
473
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeLogindlgComponent, deps: [{ token: i1$1.MessageService }, { token: i0.ChangeDetectorRef }, { token: i2.DynamicDialogRef }, { token: i2.DynamicDialogConfig }, { token: LocalizeTokenService }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Component });
489
474
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: LocalizeLogindlgComponent, selector: "app-localize-logindlg", providers: [MessageService], ngImport: i0, template: `<p-toast key="$login-dlg" position="top-center"></p-toast>
490
475
  <div id="login-dlg-wrap">
@@ -674,5 +659,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
674
659
  * Generated bundle index. Do not edit.
675
660
  */
676
661
 
677
- export { EMethod, ISameSiteType, LocalizeApiService, LocalizeLogindlgComponent, LocalizeLogindlgModule, LocalizeLogindlgService, LocalizeToken, LocalizeTokenModule, LocalizeTokenService, LocalizeTokenStorage, extractMainDomain, waitFor, waitUntil };
662
+ export { EMethod, LocalizeApiService, LocalizeLogindlgComponent, LocalizeLogindlgModule, LocalizeLogindlgService, LocalizeToken, LocalizeTokenModule, LocalizeTokenService, LocalizeTokenStorage, extractMainDomain, waitFor, waitUntil };
678
663
  //# sourceMappingURL=sambath999-localize-token.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"sambath999-localize-token.mjs","sources":["../../src/localize-token/localize.token.storage.ts","../../src/localize-token/localize.token.ts","../../src/localize-token/localize.token.service.ts","../../src/localize-token/localize.api.service.ts","../../src/localize-token/localize.token.module.ts","../../src/localize-logindlg/localize-logindlg.component.ts","../../src/localize-logindlg/localize-logindlg.service.ts","../../src/localize-logindlg/localize-logindlg.module.ts","../../src/sambath999-localize-token.ts"],"sourcesContent":["import { extractMainDomain } from \"./localize.token\";\r\n\r\nexport enum ISameSiteType {\r\n strict = \"strict\",\r\n lax = \"lax\",\r\n none = \"none\"\r\n}\r\n\r\nexport interface ICookieOptions {\r\n expires?: number | Date;\r\n path?: string;\r\n domain?: string;\r\n secure?: boolean;\r\n samesite?: string\r\n}\r\n\r\n/**\r\n* Assembly of @package ng2-cookies @see https://www.npmjs.com/package/ng2-cookies\r\n*\r\n* Reassembled by\r\n* @author sambath999\r\n* @date_29_09_2021\r\n* Updated from raw parameters to\r\n* @param {ICookieOptions} options and added another newer cookie flag\r\n* @param {string} samesite\r\n* @param {constant} SameSiteTypes, @param {string} strict \"strict\", @param {string} lax \"lax\", @param {string} none \"none\"\r\n*\r\n* @enum\r\n*/\r\nexport class LocalizeTokenStorage {\r\n\r\n private get getDefaultOptions(): ICookieOptions {\r\n const mainDomain = extractMainDomain(window.location.hostname);\r\n return {\r\n path: '/',\r\n domain: mainDomain,\r\n secure: true,\r\n // samesite: SameSiteType.strict,\r\n expires: 1\r\n }\r\n }\r\n\r\n private readonly defaultOptions: ICookieOptions;\r\n constructor(_defaultOptions?: ICookieOptions) {\r\n this.defaultOptions = _defaultOptions ?? this.getDefaultOptions;\r\n }\r\n\r\n /**\r\n * Checks the existence of a single cookie by it's name\r\n *\r\n * @param {string} name Identification of the cookie\r\n * @returns existence of the cookie\r\n */\r\n check(name: string): boolean {\r\n if (typeof document === \"undefined\") return false;\r\n name = encodeURIComponent(name);\r\n const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\r\n return regexp.test(document.cookie);\r\n }\r\n\r\n /**\r\n * Retrieves a single cookie by it's name\r\n *\r\n * @param {string} name Identification of the Cookie\r\n * @returns The Cookie's value\r\n */\r\n get(name: string): string | undefined {\r\n if (!this.check(name)) return undefined;\r\n\r\n name = encodeURIComponent(name);\r\n const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\r\n const result = regexp.exec(document.cookie);\r\n return result ? decodeURIComponent(result[1]) : undefined;\r\n }\r\n\r\n /**\r\n * Retrieves a a list of all cookie avaiable\r\n *\r\n * @returns Object with all Cookies\r\n */\r\n getAll(): any {\r\n const cookies: any = {};\r\n if (document.cookie) {\r\n const split = document.cookie.split(';');\r\n for (const s of split) {\r\n const currCookie = s.split('=');\r\n currCookie[0] = currCookie[0].trim();\r\n cookies[decodeURIComponent(currCookie[0])] = decodeURIComponent(currCookie[1]);\r\n }\r\n }\r\n\r\n return cookies;\r\n }\r\n\r\n set(name: string, value: string, options?: ICookieOptions) {\r\n options ??= this.defaultOptions;\r\n const { expires, path, domain, secure, samesite } = options;\r\n let cookieStr = `${encodeURIComponent(name)}=${encodeURIComponent(value)};`;\r\n\r\n if (expires) {\r\n const dtExpires = typeof expires === 'number' ? new Date(Date.now() + expires * 864e5) : expires;\r\n cookieStr += `expires=${dtExpires.toUTCString()};`;\r\n }\r\n\r\n cookieStr += path ? `path=${path};` : '';\r\n cookieStr += domain ? `domain=${domain};` : '';\r\n cookieStr += secure ? 'secure;' : '';\r\n cookieStr += samesite ? `samesite=${samesite};` : '';\r\n\r\n document.cookie = cookieStr;\r\n }\r\n\r\n /**\r\n * Removes specified Cookie\r\n *\r\n * @param {string} name Cookie's identification\r\n * @param {string} path Path relative to the domain where the cookie should be avaiable. Default /\r\n * @param {string} domain Domain where the cookie should be avaiable. Default current domain\r\n */\r\n delete(name: string, path: string = '/', domain: string = window.location.hostname): void {\r\n this.set(name, '', { path, domain, expires: -1 });\r\n }\r\n\r\n /**\r\n * Delete all cookie avaiable\r\n */\r\n deleteAll(path?: string, domain?: string): void {\r\n const cookies = this.getAll();\r\n\r\n for (const cookieName of Object.keys(cookies)) {\r\n this.delete(cookieName, path, domain);\r\n }\r\n }\r\n\r\n}\r\n","import { LocalizeTokenStorage } from \"./localize.token.storage\";\r\nexport interface ILocalizeTokenConfig {\r\n /**\r\n * The main domain of the application to set the cookies to be available for cross application with subdomains.\r\n * \r\n * Default is location.hostname (current domain) and automatically set extracted main domain if it is subdomain.\r\n */\r\n mainDomain?: string;\r\n authTokenName?: string;\r\n tenantTokenName?: string;\r\n refreshTokenName?: string;\r\n /**\r\n * Flag to determine if the tenant token is required.\r\n */\r\n needTenant: boolean;\r\n isProduction: boolean;\r\n revokeTokenUrl: string;\r\n}\r\n\r\nexport class LocalizeToken {\r\n\r\n static init(config: ILocalizeTokenConfig) {\r\n LocalizeToken.config = { ...LocalizeToken.config, ...config };\r\n }\r\n\r\n static config: ILocalizeTokenConfig = {\r\n mainDomain: extractMainDomain(),\r\n authTokenName: 'auth-token',\r\n tenantTokenName: '_lze_tnt_01',\r\n refreshTokenName: '_lze_rftkp_',\r\n needTenant: false,\r\n isProduction: false,\r\n revokeTokenUrl: ''\r\n }\r\n\r\n static readonly storage = new LocalizeTokenStorage();\r\n\r\n static readonly httpHeaders = {\r\n AUTHORIZATION: 'Authorization',\r\n X_TENANT: 'X-Tenant',\r\n X_REFRESH_TOKEN: 'X-RefreshToken',\r\n CONTENT_TYPE: 'Content-Type',\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Waits for a specified amount of time.\r\n * @param milliseconds - The milliseconds to wait.\r\n * @param when - The condition to wait for. Default is true.\r\n * @returns - Promise<void>\r\n */\r\nexport async function waitFor(milliseconds: number, when: boolean = true) {\r\n if (!when) return;\r\n await new Promise(resolve => setTimeout(resolve, milliseconds));\r\n}\r\n\r\n/**\r\n * Waits until the condition is met.\r\n * @param when - The condition to wait for.\r\n * @param intervalNumber - The interval number in milliseconds to check the condition. Default is 50.\r\n */\r\nexport async function waitUntil(when: () => any, intervalNumber: number = 50) {\r\n await new Promise(resolve => {\r\n const interval = setInterval(async () => {\r\n const cond = when();\r\n const result = cond instanceof Promise ? await cond : cond;\r\n if (result) {\r\n clearInterval(interval);\r\n resolve(true);\r\n }\r\n }, intervalNumber);\r\n });\r\n}\r\n\r\nexport function extractMainDomain(subdomain?: string): string {\r\n subdomain ??= window.location.hostname;\r\n const parts = subdomain.split('.');\r\n return parts.length > 2 ? parts.slice(-2).join('.') : subdomain;\r\n}","import { Injectable } from '@angular/core';\r\nimport { ILocalizeTokenConfig, LocalizeToken } from './localize.token';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport * as jwt_decode from 'jwt-decode';\r\nexport interface JwtPayload extends jwt_decode.JwtPayload {\r\n // Define the structure of your JWT payload here\r\n email: string;\r\n sub: string;\r\n name: string;\r\n iat: number;\r\n exp: number;\r\n // Add other fields as needed\r\n}\r\n\r\ninterface IAuthToken {\r\n token: string;\r\n revoke: boolean;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LocalizeTokenService {\r\n private readonly config: ILocalizeTokenConfig\r\n constructor() {\r\n if (!LocalizeToken.config.authTokenName || !LocalizeToken.config.refreshTokenName || !LocalizeToken.config.tenantTokenName) {\r\n throw new Error('authTokenName, refreshTokenName, and tenantTokenName must be defined in LocalizeToken.config')\r\n }\r\n this.config = LocalizeToken.config;\r\n }\r\n readonly isRevokingTokenSubject = new BehaviorSubject<boolean>(false);\r\n\r\n private get authToken() { return this.storageGet() }\r\n private set authToken(value: IAuthToken | undefined) {\r\n value\r\n ? this.storageSet(value)\r\n : LocalizeToken.storage.delete(this.config.authTokenName!);\r\n }\r\n\r\n get refreshToken() { return LocalizeToken.storage.get(this.config.refreshTokenName!) }\r\n get accessToken() { return this.authToken?.token }\r\n\r\n set accessToken(value: string | undefined) {\r\n if (value) {\r\n this.authToken = { token: value, revoke: false }\r\n }\r\n }\r\n\r\n get isRevokingToken() { return this.isRevokingTokenSubject.value /* this.authToken?.revoke ?? false */ }\r\n set isRevokingToken(value: boolean) {\r\n this.isRevokingTokenSubject.next(value);\r\n if (this.authToken) {\r\n this.authToken = { ...this.authToken, revoke: value };\r\n }\r\n }\r\n\r\n get tenantToken() { return LocalizeToken.storage.get(this.config.tenantTokenName!) }\r\n\r\n private storageGet() {\r\n try {\r\n const encoded = LocalizeToken.storage.get(this.config.authTokenName!);\r\n const decoded = atob(encoded || '');\r\n return JSON.parse(decoded) as IAuthToken;\r\n } catch {\r\n return undefined\r\n }\r\n }\r\n\r\n private storageSet(value: IAuthToken) {\r\n const base64 = btoa(JSON.stringify(value));\r\n LocalizeToken.storage.set(this.config.authTokenName!, base64);\r\n }\r\n\r\n tokensValid() {\r\n return this.refreshToken?.length && (!this.config.needTenant || this.tenantToken?.length);\r\n }\r\n\r\n decodeToken = (token: string) => jwt_decode.jwtDecode<JwtPayload>(token);\r\n get decodeRefreshToken() {\r\n const token = LocalizeToken.storage.get(this.config.refreshTokenName!);\r\n if (!token) return null;\r\n return this.decodeToken(token);\r\n }\r\n\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { LocalizeTokenService } from \"./localize.token.service\";\r\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\r\nimport { LocalizeToken, waitFor, waitUntil } from \"./localize.token\";\r\nimport { BehaviorSubject } from \"rxjs\";\r\n\r\n/**\r\n * Http method options\r\n */\r\nexport enum EMethod {\r\n POST = 1,\r\n GET = 2,\r\n PUT = 3,\r\n DELETE = 4,\r\n PATCH = 5\r\n}\r\n\r\ninterface ILocalizeApiConfigs {\r\n onPrepareRequest?: () => any;\r\n /**\r\n * A function that is called when refresh token is missing then perform the auto logout.\r\n * @returns - The base URL of the API.\r\n */\r\n onAutoLogout?: () => any;\r\n /**\r\n * A function that is called when request revoking token unauthorized.\r\n * @returns - The login dialog service.\r\n */\r\n onRevokeUnauthorized?: () => any;\r\n /**\r\n * The time to wait for each request to complete in milliseconds.\r\n * Be careful with this option, it may cause the application to hang if the request is not completed.\r\n */\r\n waitEachRequest?: {\r\n milliseconds: number\r\n }\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizeApiService {\r\n\r\n readonly isRequestingSubject = new BehaviorSubject<boolean>(false);\r\n readonly isResolvedStartupSubject = new BehaviorSubject<boolean>(false);\r\n get isRequesting() { return this.isRequestingSubject.value; }\r\n get isResolvedStartup() { return this.isResolvedStartupSubject.value; }\r\n\r\n private apiConfigs: ILocalizeApiConfigs = {};\r\n\r\n constructor(readonly httpClient: HttpClient,\r\n private readonly localizeTokenService: LocalizeTokenService\r\n ) { }\r\n\r\n /**\r\n * Initialize the API service.\r\n * @param apiConfigs - The API configurations.\r\n */\r\n init(apiConfigs: ILocalizeApiConfigs) {\r\n this.apiConfigs = apiConfigs;\r\n }\r\n\r\n\r\n /**\r\n * A higher-order function that returns a curried function for making API requests.\r\n *\r\n * @param baseUrl - The base URL of the API.\r\n * @returns A curried function that can be used to make API requests.\r\n */\r\n func = (baseUrl: string) =>\r\n (path: string, method: EMethod = EMethod.GET, value: any = null, isFormData: boolean = false, headers?: { [x: string]: string }) =>\r\n this.base(baseUrl, path, method, value, isFormData, headers)\r\n\r\n private async base(baseUrl: string,\r\n path: string,\r\n method: EMethod = EMethod.GET,\r\n value: any = null,\r\n isFormData: boolean = false,\r\n headers?: { [x: string]: string }) {\r\n\r\n await this.ifPromise(this.apiConfigs.onPrepareRequest);\r\n\r\n const url = `${baseUrl.trim().replace(/\\/?$/, '/')}${path.trim().replace(/^\\//, '')}`;\r\n const httpMethod = EMethod[method].toLowerCase();\r\n const request = () => { return { body: value, headers: this.options(isFormData, headers) } };\r\n\r\n // Wait for previous request to complete\r\n await this.toWaitForPreviousRequest();\r\n\r\n // Process request\r\n try { return await this.processRequest(httpMethod, url, request()) }\r\n // Handle unauthorized error if any\r\n catch (error) {\r\n if ((error as any).status !== 401) { throw error; }\r\n return await this.onUnauthorizedError(httpMethod, url, request);\r\n }\r\n }\r\n\r\n private async onUnauthorizedError(httpMethod: string, url: string, request: Function) {\r\n await this.revokeToken();\r\n if (!this.isResolvedStartup) {\r\n return await this.processRequest(httpMethod, url, request());\r\n }\r\n }\r\n\r\n private async toWaitForPreviousRequest() {\r\n if (this.localizeTokenService.isRevokingToken) {\r\n await waitUntil(() => !this.localizeTokenService.isRevokingToken);\r\n }\r\n // to wait for each request in 50ms, even if the request is not completed\r\n if (this.apiConfigs.waitEachRequest?.milliseconds) {\r\n await waitFor(this.apiConfigs.waitEachRequest.milliseconds, this.isRequesting);\r\n }\r\n }\r\n\r\n private async processRequest(method: string, url: string, options: any): Promise<any> {\r\n this.isRequestingSubject.next(true);\r\n const result = await new Promise((resolve, reject) =>\r\n this.httpClient.request<any>(method, url, options).subscribe({ next: resolve, error: reject }))\r\n this.isRequestingSubject.next(false);\r\n return result;\r\n }\r\n\r\n private async revokeToken(force: boolean = false): Promise<void> {\r\n\r\n if (this.localizeTokenService.isRevokingToken && !force) {\r\n await waitUntil(() => !this.localizeTokenService.isRevokingToken)\r\n return;\r\n }\r\n\r\n try {\r\n this.localizeTokenService.isRevokingToken = true;\r\n const reqUrl = LocalizeToken.config.revokeTokenUrl;\r\n const reqHeaders = this.options().append(LocalizeToken.httpHeaders.X_REFRESH_TOKEN, `${this.localizeTokenService.refreshToken}`);\r\n const revokeToken: any = await new Promise((resolve, reject) =>\r\n this.httpClient.get<any>(reqUrl!, { headers: reqHeaders }).subscribe({ next: resolve, error: reject }))\r\n\r\n if (revokeToken?.status) {\r\n this.localizeTokenService.accessToken = revokeToken.message;\r\n } else if (!this.localizeTokenService.refreshToken) {\r\n await this.ifPromise(this.apiConfigs.onAutoLogout)\r\n } else {\r\n if (this.apiConfigs.onRevokeUnauthorized) {\r\n await this.ifPromise(this.apiConfigs.onRevokeUnauthorized);\r\n await this.revokeToken(true);\r\n }\r\n }\r\n } finally {\r\n this.localizeTokenService.isRevokingToken = false;\r\n }\r\n }\r\n\r\n /** default http request options */\r\n private options(isFormData: boolean = false, headers: { [key: string]: string } = {}): HttpHeaders {\r\n const defaultHeaders = { [LocalizeToken.httpHeaders.AUTHORIZATION]: `Bearer ${this.localizeTokenService.accessToken}`, };\r\n if (LocalizeToken.config.needTenant) {\r\n defaultHeaders[LocalizeToken.httpHeaders.X_TENANT] = `${this.localizeTokenService.tenantToken}`;\r\n }\r\n\r\n if (!isFormData) {\r\n defaultHeaders[LocalizeToken.httpHeaders.CONTENT_TYPE] = 'application/json';\r\n }\r\n\r\n const filteredHeaders = Object.keys(defaultHeaders).filter(key => !Object.keys(headers).includes(key))\r\n .reduce((acc, key) => ({ ...acc, [key]: defaultHeaders[key] }), {})\r\n const mergedHeaders = { ...filteredHeaders, ...headers };\r\n return new HttpHeaders(mergedHeaders);\r\n }\r\n\r\n private async ifPromise(fn?: Function) {\r\n if (!fn) return;\r\n return fn instanceof Promise ? await fn() : fn();\r\n }\r\n\r\n}//class\r\n","import { NgModule } from '@angular/core';\r\nimport { LocalizeTokenService } from './localize.token.service';\r\nimport { LocalizeApiService } from './localize.api.service';\r\n\r\n@NgModule({\r\n providers: [\r\n LocalizeTokenService,\r\n LocalizeApiService\r\n ],\r\n})\r\nexport class LocalizeTokenModule { }","import { HttpClient } from \"@angular/common/http\";\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n OnInit,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { MessageService } from \"primeng/api\";\r\nimport { DynamicDialogConfig, DynamicDialogRef } from \"primeng/dynamicdialog\";\r\nimport { JwtPayload, LocalizeTokenService } from \"../localize-token/localize.token.service\";\r\nimport { LocalizeToken } from \"../localize-token/localize.token\";\r\nimport { ILoginDialogConfig } from \"./localize-logindlg.service\";\r\n\r\n@Component({\r\n styles: [`\r\n #login-dlg-wrap {\r\n width: 100%;\r\n max-width: 400px;\r\n margin: 0 auto;\r\n padding: 30px;\r\n }\r\n \r\n .login-dlg-elm {\r\n margin-top: 1rem;\r\n }\r\n \r\n #login-dlg-header {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n \r\n #login-dlg-header h3 {\r\n font-weight: bold;\r\n font-size: 0.9rem;\r\n color: orange;\r\n text-align: center;\r\n }\r\n \r\n #login-logo {\r\n height: 40px;\r\n width: 40px;\r\n background: url(\"/assets/images/logo-300px.png\") no-repeat;\r\n background-size: contain;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup {\r\n height: 45px;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup .p-inputgroup-addon {\r\n height: 45px;\r\n border-radius: 15px 0 0 15px;\r\n width: 50px;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup .p-inputgroup-addon * {\r\n font-size: 1rem;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup input {\r\n height: 45px;\r\n border-radius: 0 15px 15px 0;\r\n }\r\n \r\n #login-dlg-content button {\r\n height: 45px;\r\n border-radius: 15px;\r\n }\r\n \r\n /*check animation block*/\r\n \r\n .check-animation-wrap {\r\n top: 0;\r\n left: 0;\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100%;\r\n height: calc(100% - 200px);\r\n min-height: 400px;\r\n }\r\n \r\n .check-main-container {\r\n width: 100%;\r\n height: 100vh;\r\n display: flex;\r\n flex-flow: column;\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n \r\n .check-container {\r\n width: 6.25rem;\r\n height: 7.5rem;\r\n display: flex;\r\n flex-flow: column;\r\n align-items: center;\r\n justify-content: space-between;\r\n }\r\n \r\n .check-container .check-background {\r\n width: 100%;\r\n height: calc(100% - 1.25rem);\r\n background: linear-gradient(to bottom right, #5de593, #41d67c);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n transform: scale(0.84);\r\n border-radius: 50%;\r\n animation: animateContainer 0.75s ease-out forwards 0.75s;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n opacity: 0;\r\n }\r\n \r\n .check-container .check-background svg {\r\n width: 65%;\r\n transform: translateY(0.25rem);\r\n stroke-dasharray: 80;\r\n stroke-dashoffset: 80;\r\n animation: animateCheck 0.35s forwards 1.25s ease-out;\r\n min-width: auto !important;\r\n }\r\n \r\n .check-container .check-shadow {\r\n bottom: calc(-15% - 5px);\r\n left: 0;\r\n border-radius: 50%;\r\n background: radial-gradient(closest-side, rgba(73, 218, 131, 1), transparent);\r\n animation: animateShadow 0.75s ease-out forwards 0.75s;\r\n }\r\n \r\n @keyframes animateContainer {\r\n 0% {\r\n opacity: 0;\r\n transform: scale(0);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 25% {\r\n opacity: 1;\r\n transform: scale(0.9);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 43.75% {\r\n transform: scale(1.15);\r\n box-shadow: 0px 0px 0px 43.334px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 62.5% {\r\n transform: scale(1);\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 21.667px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 81.25% {\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 100% {\r\n opacity: 1;\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n }\r\n \r\n @keyframes animateCheck {\r\n from {\r\n stroke-dashoffset: 80;\r\n }\r\n \r\n to {\r\n stroke-dashoffset: 0;\r\n }\r\n }\r\n \r\n @keyframes animateShadow {\r\n 0% {\r\n opacity: 0;\r\n width: 100%;\r\n height: 15%;\r\n }\r\n \r\n 25% {\r\n opacity: 0.25;\r\n }\r\n \r\n 43.75% {\r\n width: 40%;\r\n height: 7%;\r\n opacity: 0.35;\r\n }\r\n \r\n 100% {\r\n width: 85%;\r\n height: 15%;\r\n opacity: 0.25;\r\n }\r\n }\r\n #login-dlg-wrap .loader-wrap {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height:100%;\r\n width:100%;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n z-index: 100;\r\n background: #ffffff42;\r\n backdrop-filter: blur(1px);\r\n }\r\n\r\n #login-dlg-wrap .login-dlg-loader {\r\n border: 15px solid #e7e7e7;\r\n border-top: 15px solid #52dba1;\r\n border-radius: 50%;\r\n width: 100px;\r\n height: 100px;\r\n animation: spinloader 2s linear infinite;\r\n }\r\n\r\n #login-dlg-wrap .loader-wrap::before {\r\n content: \"\";\r\n position: absolute;\r\n width: 70px;\r\n height: 70px;\r\n transform: translate(-50%, -50%);\r\n z-index: 1;\r\n border: 15px solid #e7e7e700;\r\n border-top: 15px solid #52dba1c9;\r\n border-radius: 50%;\r\n animation: spinloader .75s linear infinite;\r\n }\r\n\r\n @keyframes spinloader {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n `],\r\n template: `<p-toast key=\"$login-dlg\" position=\"top-center\"></p-toast>\r\n <div id=\"login-dlg-wrap\">\r\n <div id=\"login-dlg-header\">\r\n <div id=\"login-logo\" class=\"p-mb-2\"></div>\r\n <h3 *ngIf=\"!success\">Your session is expired! <br> Please login again to continue.</h3>\r\n <h3 *ngIf=\"success\" style=\"color:green !important;\">You haved successfully logged in.</h3>\r\n </div>\r\n <div id=\"login-dlg-content\">\r\n <ng-container *ngIf=\"!success\">\r\n <div *ngIf=\"loading\" class=\"loader-wrap\">\r\n <div class=\"login-dlg-loader\"></div>\r\n </div>\r\n <div class=\"login-dlg-elm\">\r\n <div class=\"p-inputgroup\">\r\n <span class=\"p-inputgroup-addon\">\r\n <i class=\"material-icons-round\">person</i>\r\n </span>\r\n <input disabled pInputText type=\"text\" placeholder=\"Username\" [value]=\"decodeToken?.email\" />\r\n </div>\r\n </div>\r\n \r\n <div class=\"login-dlg-elm\">\r\n <div class=\"p-inputgroup\">\r\n <span class=\"p-inputgroup-addon\">\r\n <i class=\"material-icons-round\">lock</i>\r\n </span>\r\n <input [disabled]=\"loading\" (keydown.enter)=\"clickLogin()\" pInputText type=\"password\" placeholder=\"Password\" [(ngModel)]=\"password\"\r\n autofocus />\r\n </div>\r\n </div>\r\n <div class=\"login-dlg-elm\">\r\n <button style=\"width: 100%;\" pButton type=\"button\" label=\"Login\" (click)=\"clickLogin()\"\r\n [disabled]=\"!password || loading\"></button>\r\n </div>\r\n \r\n <div class=\"login-dlg-elm\" style=\"display:flex;align-items: center;user-select: none;\">\r\n <span>No, I want to login with another user.</span>\r\n <button class=\"p-button-text\" pButton type=\"button\" label=\"Logout\" (click)=\"clickLogout()\"></button>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"success\">\r\n <div style=\"margin-top:35px;\"></div>\r\n <div class=\"check-animation-wrap\">\r\n <div class=\"check-main-container\">\r\n <div class=\"check-container\">\r\n <div class=\"check-background\">\r\n <svg viewBox=\"0 0 65 51\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M7 25L27.3077 44L58.5 7\" stroke=\"white\" stroke-width=\"13\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>`,\r\n selector: \"app-localize-logindlg\",\r\n providers: [MessageService],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class LocalizeLogindlgComponent implements OnInit {\r\n readonly messageKey = \"$login-dlg\";\r\n password: any;\r\n readonly decodeToken: JwtPayload | null;\r\n loading = false;\r\n success = false;\r\n private readonly config;\r\n private readonly loginConfig: ILoginDialogConfig\r\n\r\n private logout?: () => any\r\n private loginUrl?: string;\r\n\r\n\r\n constructor(\r\n private readonly messageService: MessageService,\r\n private readonly cdt: ChangeDetectorRef,\r\n private readonly dlgRef: DynamicDialogRef,\r\n private readonly dlgConfig: DynamicDialogConfig,\r\n private readonly tokenService: LocalizeTokenService,\r\n private readonly httpClient: HttpClient\r\n ) {\r\n this.decodeToken = this.tokenService.decodeRefreshToken;\r\n this.config = LocalizeToken.config;\r\n this.loginConfig = this.dlgConfig.data.loginConfig;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.dlgConfig.closable = false;\r\n this.logout = this.loginConfig.logoutFunc;\r\n this.loginUrl = this.loginConfig.loginUrl\r\n\r\n if (!this.decodeToken) {\r\n this.messageService.add({\r\n key: this.messageKey,\r\n severity: \"error\",\r\n summary: \"Token is invalid\",\r\n });\r\n setTimeout(() => this.logout?.(), 2000);\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.cdt.detectChanges();\r\n }\r\n\r\n async clickLogin() {\r\n if (!this.isValidPassword) {\r\n this.messageService.add({\r\n key: this.messageKey,\r\n severity: \"error\",\r\n summary: \"Password is required and must be at least 6 characters\",\r\n });\r\n }\r\n\r\n this.loading = true;\r\n const loginRes = await this.login();\r\n if (!loginRes?.status) {\r\n this.messageService.add({\r\n key: this.messageKey,\r\n severity: \"error\",\r\n summary: loginRes.message,\r\n });\r\n this.loading = false;\r\n return;\r\n }\r\n\r\n this.tokenService.accessToken = loginRes.tokens.accessToken;\r\n LocalizeToken.storage.set(this.config.refreshTokenName!, loginRes.tokens.refreshToken);\r\n this.success = true;\r\n setTimeout(() => this.dlgRef.close(true), 2000);\r\n }\r\n\r\n private async login() {\r\n const path = this.loginUrl ?? \"/api/auth/login\";\r\n const response = await new Promise<any>((resolve, reject) =>\r\n this.httpClient\r\n .post(path, { password: this.password.trim() }, { headers: this.getHeaders() })\r\n .subscribe({ next: resolve, error: reject })\r\n );\r\n return response;\r\n }\r\n\r\n private getHeaders() {\r\n return {\r\n [LocalizeToken.httpHeaders.X_REFRESH_TOKEN]: LocalizeToken.storage.get(this.config.refreshTokenName!) ?? \"\",\r\n [LocalizeToken.httpHeaders.X_TENANT]: LocalizeToken.storage.get(this.config.tenantTokenName!) ?? \"\",\r\n };\r\n }\r\n\r\n get isValidPassword(): boolean {\r\n return this.password && this.password.trim().length >= 6;\r\n }\r\n\r\n clickLogout = () => this.logout?.();\r\n}\r\n","import { Injectable, Injector } from '@angular/core';\nimport { DialogService, DynamicDialogConfig } from 'primeng/dynamicdialog';\nimport { LocalizeLogindlgComponent } from './localize-logindlg.component';\nexport interface ILoginDialogConfig {\n loginUrl?: string;\n logoutUrl?: string;\n logoutFunc?: () => void;\n}\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalizeLogindlgService {\n\n constructor(private readonly injector: Injector) { }\n\n async openLoginDialog(loginConfig: ILoginDialogConfig, config?: DynamicDialogConfig) {\n config ??= {\n header: 'Login',\n height: '650px',\n style: { 'max-width': '400px', width: '100%', 'height': '650px' },\n }\n config.data = { ...config.data || {}, ...{ loginConfig } };\n\n const dialogService = this.injector.get(DialogService);\n const dialog = dialogService.open(LocalizeLogindlgComponent, config);\n\n await new Promise<void>((resolve) =>\n dialog.onClose.subscribe(res => {\n if (res) {\n resolve();\n }\n }));\n }\n}\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { LocalizeLogindlgComponent } from \"./localize-logindlg.component\";\nimport { ToastModule } from \"primeng/toast\";\nimport { InputTextModule } from \"primeng/inputtext\";\nimport { ButtonModule } from \"primeng/button\";\nimport { BrowserModule } from '@angular/platform-browser';\nimport { FormsModule } from '@angular/forms';\nimport { LocalizeLogindlgService } from \"./localize-logindlg.service\";\n\n@NgModule({\n declarations: [LocalizeLogindlgComponent],\n exports: [LocalizeLogindlgComponent],\n imports: [\n CommonModule,\n ToastModule,\n InputTextModule,\n BrowserModule,\n FormsModule,\n ButtonModule,\n ],\n providers: [LocalizeLogindlgService],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class LocalizeLogindlgModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.LocalizeTokenService","i1","i3.LocalizeTokenService","i4"],"mappings":"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"}
1
+ {"version":3,"file":"sambath999-localize-token.mjs","sources":["../../src/localize-token/localize.token.storage.ts","../../src/localize-token/localize.token.ts","../../src/localize-token/localize.token.service.ts","../../src/localize-token/localize.api.service.ts","../../src/localize-token/localize.token.module.ts","../../src/localize-logindlg/localize-logindlg.component.ts","../../src/localize-logindlg/localize-logindlg.service.ts","../../src/localize-logindlg/localize-logindlg.module.ts","../../src/sambath999-localize-token.ts"],"sourcesContent":["import { extractMainDomain } from \"./localize.token\";\r\n\r\nexport interface ICookieOptions {\r\n /**\r\n * Cookie expiration date in days from now. If not provided the cookie is a session cookie\r\n */\r\n expires?: number | Date;\r\n path?: string;\r\n domain?: string;\r\n secure?: boolean;\r\n samesite?: \"strict\" | \"lax\" | \"none\";\r\n}\r\n\r\n/**\r\n* Assembly of @package ng2-cookies @see https://www.npmjs.com/package/ng2-cookies\r\n*\r\n* Reassembled by\r\n* @author sambath999\r\n* @date_29_09_2021\r\n* Updated from raw parameters to\r\n* @param {ICookieOptions} options and added another newer cookie flag\r\n* @param {string} samesite\r\n* @param {constant} SameSiteTypes, @param {string} strict \"strict\", @param {string} lax \"lax\", @param {string} none \"none\"\r\n*\r\n* @enum\r\n*/\r\nexport class LocalizeTokenStorage {\r\n\r\n private get getDefaultOptions(): ICookieOptions {\r\n const mainDomain = extractMainDomain(window.location.hostname);\r\n return {\r\n path: '/',\r\n domain: mainDomain,\r\n secure: true,\r\n // samesite: SameSiteType.strict,\r\n expires: 1\r\n }\r\n }\r\n\r\n private readonly defaultOptions: ICookieOptions;\r\n constructor(_defaultOptions?: ICookieOptions) {\r\n this.defaultOptions = _defaultOptions ?? this.getDefaultOptions;\r\n }\r\n\r\n /**\r\n * Checks the existence of a single cookie by it's name\r\n *\r\n * @param {string} name Identification of the cookie\r\n * @returns existence of the cookie\r\n */\r\n check(name: string): boolean {\r\n if (typeof document === \"undefined\") return false;\r\n name = encodeURIComponent(name);\r\n const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\r\n return regexp.test(document.cookie);\r\n }\r\n\r\n /**\r\n * Retrieves a single cookie by it's name\r\n *\r\n * @param {string} name Identification of the Cookie\r\n * @returns The Cookie's value\r\n */\r\n get(name: string): string | undefined {\r\n if (!this.check(name)) return undefined;\r\n\r\n name = encodeURIComponent(name);\r\n const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\r\n const result = regexp.exec(document.cookie);\r\n return result ? decodeURIComponent(result[1]) : undefined;\r\n }\r\n\r\n /**\r\n * Retrieves a a list of all cookie avaiable\r\n *\r\n * @returns Object with all Cookies\r\n */\r\n getAll(): any {\r\n const cookies: any = {};\r\n if (document.cookie) {\r\n const split = document.cookie.split(';');\r\n for (const s of split) {\r\n const currCookie = s.split('=');\r\n currCookie[0] = currCookie[0].trim();\r\n cookies[decodeURIComponent(currCookie[0])] = decodeURIComponent(currCookie[1]);\r\n }\r\n }\r\n\r\n return cookies;\r\n }\r\n\r\n set(name: string, value: string, options?: ICookieOptions) {\r\n options ??= this.defaultOptions;\r\n const { expires, path, domain, secure, samesite } = { ...options, ...this.defaultOptions };\r\n let cookieStr = `${encodeURIComponent(name)}=${encodeURIComponent(value)};`;\r\n\r\n if (expires) {\r\n const dtExpires = typeof expires === 'number' ? new Date(Date.now() + expires * 864e5) : expires;\r\n cookieStr += `expires=${dtExpires.toUTCString()};`;\r\n }\r\n\r\n cookieStr += path ? `path=${path};` : '';\r\n cookieStr += domain ? `domain=${domain};` : '';\r\n cookieStr += secure ? 'secure;' : '';\r\n cookieStr += samesite ? `samesite=${samesite};` : '';\r\n\r\n document.cookie = cookieStr;\r\n }\r\n\r\n /**\r\n * Removes specified Cookie\r\n *\r\n * @param {string} name Cookie's identification\r\n * @param {string} path Path relative to the domain where the cookie should be avaiable. Default /\r\n * @param {string} domain Domain where the cookie should be avaiable. Default current domain\r\n */\r\n delete(name: string, path: string = '/', domain: string = window.location.hostname): void {\r\n this.set(name, '', { path, domain, expires: -1 });\r\n }\r\n\r\n /**\r\n * Delete all cookie avaiable\r\n */\r\n deleteAll(path?: string, domain?: string): void {\r\n const cookies = this.getAll();\r\n\r\n for (const cookieName of Object.keys(cookies)) {\r\n this.delete(cookieName, path, domain);\r\n }\r\n }\r\n\r\n}\r\n","import { LocalizeTokenStorage } from \"./localize.token.storage\";\r\nexport interface ILocalizeTokenConfig {\r\n /**\r\n * The main domain of the application to set the cookies to be available for cross application with subdomains.\r\n * \r\n * Default is location.hostname (current domain) and automatically set extracted main domain if it is subdomain.\r\n */\r\n mainDomain?: string;\r\n authTokenName?: string;\r\n tenantTokenName?: string;\r\n refreshTokenName?: string;\r\n /**\r\n * Flag to determine if the tenant token is required.\r\n */\r\n needTenant: boolean;\r\n isProduction: boolean;\r\n revokeTokenUrl: string;\r\n}\r\n\r\nexport class LocalizeToken {\r\n\r\n static init(config: ILocalizeTokenConfig) {\r\n LocalizeToken.config = { ...LocalizeToken.config, ...config };\r\n }\r\n\r\n static config: ILocalizeTokenConfig = {\r\n mainDomain: extractMainDomain(),\r\n authTokenName: 'auth-token',\r\n tenantTokenName: '_lze_tnt_01',\r\n refreshTokenName: '_lze_rftkp_',\r\n needTenant: false,\r\n isProduction: false,\r\n revokeTokenUrl: ''\r\n }\r\n\r\n static readonly storage = new LocalizeTokenStorage();\r\n\r\n static readonly httpHeaders = {\r\n AUTHORIZATION: 'Authorization',\r\n X_TENANT: 'X-Tenant',\r\n X_REFRESH_TOKEN: 'X-RefreshToken',\r\n CONTENT_TYPE: 'Content-Type',\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Waits for a specified amount of time.\r\n * @param milliseconds - The milliseconds to wait.\r\n * @param when - The condition to wait for. Default is true.\r\n * @returns - Promise<void>\r\n */\r\nexport async function waitFor(milliseconds: number, when: boolean = true) {\r\n if (!when) return;\r\n await new Promise(resolve => setTimeout(resolve, milliseconds));\r\n}\r\n\r\n/**\r\n * Waits until the condition is met.\r\n * @param when - The condition to wait for.\r\n * @param intervalNumber - The interval number in milliseconds to check the condition. Default is 50.\r\n */\r\nexport async function waitUntil(when: () => any, intervalNumber: number = 50) {\r\n await new Promise(resolve => {\r\n const interval = setInterval(async () => {\r\n const cond = when();\r\n const result = cond instanceof Promise ? await cond : cond;\r\n if (result) {\r\n clearInterval(interval);\r\n resolve(true);\r\n }\r\n }, intervalNumber);\r\n });\r\n}\r\n\r\nexport function extractMainDomain(subdomain?: string): string {\r\n subdomain ??= window.location.hostname;\r\n const parts = subdomain.split('.');\r\n return parts.length > 2 ? parts.slice(-2).join('.') : subdomain;\r\n}","import { Injectable } from '@angular/core';\r\nimport { ILocalizeTokenConfig, LocalizeToken } from './localize.token';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport * as jwt_decode from 'jwt-decode';\r\nexport interface JwtPayload extends jwt_decode.JwtPayload {\r\n // Define the structure of your JWT payload here\r\n email: string;\r\n sub: string;\r\n name: string;\r\n iat: number;\r\n exp: number;\r\n // Add other fields as needed\r\n}\r\n\r\ninterface IAuthToken {\r\n token: string;\r\n revoke: boolean;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LocalizeTokenService {\r\n private readonly config: ILocalizeTokenConfig\r\n constructor() {\r\n if (!LocalizeToken.config.authTokenName || !LocalizeToken.config.refreshTokenName || !LocalizeToken.config.tenantTokenName) {\r\n throw new Error('authTokenName, refreshTokenName, and tenantTokenName must be defined in LocalizeToken.config')\r\n }\r\n this.config = LocalizeToken.config;\r\n }\r\n readonly isRevokingTokenSubject = new BehaviorSubject<boolean>(false);\r\n\r\n private get authToken() { return this.storageGet() }\r\n private set authToken(value: IAuthToken | undefined) {\r\n value\r\n ? this.storageSet(value)\r\n : LocalizeToken.storage.delete(this.config.authTokenName!);\r\n }\r\n\r\n get refreshToken() { return LocalizeToken.storage.get(this.config.refreshTokenName!) }\r\n get accessToken() { return this.authToken?.token }\r\n\r\n set accessToken(value: string | undefined) {\r\n if (value) {\r\n this.authToken = { token: value, revoke: false }\r\n }\r\n }\r\n\r\n get isRevokingToken() { return this.isRevokingTokenSubject.value /* this.authToken?.revoke ?? false */ }\r\n set isRevokingToken(value: boolean) {\r\n this.isRevokingTokenSubject.next(value);\r\n if (this.authToken) {\r\n this.authToken = { ...this.authToken, revoke: value };\r\n }\r\n }\r\n\r\n get tenantToken() { return LocalizeToken.storage.get(this.config.tenantTokenName!) }\r\n\r\n private storageGet() {\r\n try {\r\n const encoded = LocalizeToken.storage.get(this.config.authTokenName!);\r\n const decoded = atob(encoded || '');\r\n return JSON.parse(decoded) as IAuthToken;\r\n } catch {\r\n return undefined\r\n }\r\n }\r\n\r\n private storageSet(value: IAuthToken) {\r\n const base64 = btoa(JSON.stringify(value));\r\n LocalizeToken.storage.set(this.config.authTokenName!, base64);\r\n }\r\n\r\n tokensValid() {\r\n return this.refreshToken?.length && (!this.config.needTenant || this.tenantToken?.length);\r\n }\r\n\r\n decodeToken = (token: string) => jwt_decode.jwtDecode<JwtPayload>(token);\r\n get decodeRefreshToken() {\r\n const token = LocalizeToken.storage.get(this.config.refreshTokenName!);\r\n if (!token) return null;\r\n return this.decodeToken(token);\r\n }\r\n\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { LocalizeTokenService } from \"./localize.token.service\";\r\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\r\nimport { LocalizeToken, waitFor, waitUntil } from \"./localize.token\";\r\nimport { BehaviorSubject } from \"rxjs\";\r\n\r\n/**\r\n * Http method options\r\n */\r\nexport enum EMethod {\r\n POST = 1,\r\n GET = 2,\r\n PUT = 3,\r\n DELETE = 4,\r\n PATCH = 5\r\n}\r\n\r\ninterface ILocalizeApiConfigs {\r\n onPrepareRequest?: () => any;\r\n /**\r\n * A function that is called when refresh token is missing then perform the auto logout.\r\n * @returns - The base URL of the API.\r\n */\r\n onAutoLogout?: () => any;\r\n /**\r\n * A function that is called when request revoking token unauthorized.\r\n * @returns - The login dialog service.\r\n */\r\n onRevokeUnauthorized?: () => any;\r\n /**\r\n * The time to wait for each request to complete in milliseconds.\r\n * Be careful with this option, it may cause the application to hang if the request is not completed.\r\n */\r\n waitEachRequest?: {\r\n milliseconds: number\r\n }\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizeApiService {\r\n\r\n readonly isRequestingSubject = new BehaviorSubject<boolean>(false);\r\n readonly isResolvedStartupSubject = new BehaviorSubject<boolean>(false);\r\n get isRequesting() { return this.isRequestingSubject.value; }\r\n get isResolvedStartup() { return this.isResolvedStartupSubject.value; }\r\n\r\n private apiConfigs: ILocalizeApiConfigs = {};\r\n\r\n constructor(readonly httpClient: HttpClient,\r\n private readonly localizeTokenService: LocalizeTokenService\r\n ) { }\r\n\r\n /**\r\n * Initialize the API service.\r\n * @param apiConfigs - The API configurations.\r\n */\r\n init(apiConfigs: ILocalizeApiConfigs) {\r\n this.apiConfigs = apiConfigs;\r\n }\r\n\r\n\r\n /**\r\n * A higher-order function that returns a curried function for making API requests.\r\n *\r\n * @param baseUrl - The base URL of the API.\r\n * @returns A curried function that can be used to make API requests.\r\n */\r\n func = (baseUrl: string) =>\r\n (path: string, method: EMethod = EMethod.GET, value: any = null, isFormData: boolean = false, headers?: { [x: string]: string }) =>\r\n this.base(baseUrl, path, method, value, isFormData, headers)\r\n\r\n private async base(baseUrl: string,\r\n path: string,\r\n method: EMethod = EMethod.GET,\r\n value: any = null,\r\n isFormData: boolean = false,\r\n headers?: { [x: string]: string }) {\r\n\r\n await this.ifPromise(this.apiConfigs.onPrepareRequest);\r\n\r\n const url = `${baseUrl.trim().replace(/\\/?$/, '/')}${path.trim().replace(/^\\//, '')}`;\r\n const httpMethod = EMethod[method].toLowerCase();\r\n const request = () => { return { body: value, headers: this.options(isFormData, headers) } };\r\n\r\n // Wait for previous request to complete\r\n await this.toWaitForPreviousRequest();\r\n\r\n // Process request\r\n try { return await this.processRequest(httpMethod, url, request()) }\r\n // Handle unauthorized error if any\r\n catch (error) {\r\n if ((error as any).status !== 401) { throw error; }\r\n return await this.onUnauthorizedError(httpMethod, url, request);\r\n }\r\n }\r\n\r\n private async onUnauthorizedError(httpMethod: string, url: string, request: Function) {\r\n await this.revokeToken();\r\n if (!this.isResolvedStartup) {\r\n return await this.processRequest(httpMethod, url, request());\r\n }\r\n }\r\n\r\n private async toWaitForPreviousRequest() {\r\n if (this.localizeTokenService.isRevokingToken) {\r\n await waitUntil(() => !this.localizeTokenService.isRevokingToken);\r\n }\r\n // to wait for each request in 50ms, even if the request is not completed\r\n if (this.apiConfigs.waitEachRequest?.milliseconds) {\r\n await waitFor(this.apiConfigs.waitEachRequest.milliseconds, this.isRequesting);\r\n }\r\n }\r\n\r\n private async processRequest(method: string, url: string, options: any): Promise<any> {\r\n this.isRequestingSubject.next(true);\r\n const result = await new Promise((resolve, reject) =>\r\n this.httpClient.request<any>(method, url, options).subscribe({ next: resolve, error: reject }))\r\n this.isRequestingSubject.next(false);\r\n return result;\r\n }\r\n\r\n private async revokeToken(force: boolean = false): Promise<void> {\r\n\r\n if (this.localizeTokenService.isRevokingToken && !force) {\r\n await waitUntil(() => !this.localizeTokenService.isRevokingToken)\r\n return;\r\n }\r\n\r\n try {\r\n this.localizeTokenService.isRevokingToken = true;\r\n const reqUrl = LocalizeToken.config.revokeTokenUrl;\r\n const reqHeaders = this.options().append(LocalizeToken.httpHeaders.X_REFRESH_TOKEN, `${this.localizeTokenService.refreshToken}`);\r\n const revokeToken: any = await new Promise((resolve, reject) =>\r\n this.httpClient.get<any>(reqUrl!, { headers: reqHeaders }).subscribe({ next: resolve, error: reject }))\r\n\r\n if (revokeToken?.status) {\r\n this.localizeTokenService.accessToken = revokeToken.message;\r\n } else if (!this.localizeTokenService.refreshToken) {\r\n await this.ifPromise(this.apiConfigs.onAutoLogout)\r\n } else {\r\n if (this.apiConfigs.onRevokeUnauthorized) {\r\n await this.ifPromise(this.apiConfigs.onRevokeUnauthorized);\r\n await this.revokeToken(true);\r\n }\r\n }\r\n } finally {\r\n this.localizeTokenService.isRevokingToken = false;\r\n }\r\n }\r\n\r\n /** default http request options */\r\n private options(isFormData: boolean = false, headers: { [key: string]: string } = {}): HttpHeaders {\r\n const defaultHeaders = { [LocalizeToken.httpHeaders.AUTHORIZATION]: `Bearer ${this.localizeTokenService.accessToken}`, };\r\n if (LocalizeToken.config.needTenant) {\r\n defaultHeaders[LocalizeToken.httpHeaders.X_TENANT] = `${this.localizeTokenService.tenantToken}`;\r\n }\r\n\r\n if (!isFormData) {\r\n defaultHeaders[LocalizeToken.httpHeaders.CONTENT_TYPE] = 'application/json';\r\n }\r\n\r\n const filteredHeaders = Object.keys(defaultHeaders).filter(key => !Object.keys(headers).includes(key))\r\n .reduce((acc, key) => ({ ...acc, [key]: defaultHeaders[key] }), {})\r\n const mergedHeaders = { ...filteredHeaders, ...headers };\r\n return new HttpHeaders(mergedHeaders);\r\n }\r\n\r\n private async ifPromise(fn?: Function) {\r\n if (!fn) return;\r\n return fn instanceof Promise ? await fn() : fn();\r\n }\r\n\r\n}//class\r\n","import { NgModule } from '@angular/core';\r\nimport { LocalizeTokenService } from './localize.token.service';\r\nimport { LocalizeApiService } from './localize.api.service';\r\n\r\n@NgModule({\r\n providers: [\r\n LocalizeTokenService,\r\n LocalizeApiService\r\n ],\r\n})\r\nexport class LocalizeTokenModule { }","import { HttpClient } from \"@angular/common/http\";\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n OnInit,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { MessageService } from \"primeng/api\";\r\nimport { DynamicDialogConfig, DynamicDialogRef } from \"primeng/dynamicdialog\";\r\nimport { JwtPayload, LocalizeTokenService } from \"../localize-token/localize.token.service\";\r\nimport { LocalizeToken } from \"../localize-token/localize.token\";\r\nimport { ILoginDialogConfig } from \"./localize-logindlg.service\";\r\n\r\n@Component({\r\n styles: [`\r\n #login-dlg-wrap {\r\n width: 100%;\r\n max-width: 400px;\r\n margin: 0 auto;\r\n padding: 30px;\r\n }\r\n \r\n .login-dlg-elm {\r\n margin-top: 1rem;\r\n }\r\n \r\n #login-dlg-header {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n \r\n #login-dlg-header h3 {\r\n font-weight: bold;\r\n font-size: 0.9rem;\r\n color: orange;\r\n text-align: center;\r\n }\r\n \r\n #login-logo {\r\n height: 40px;\r\n width: 40px;\r\n background: url(\"/assets/images/logo-300px.png\") no-repeat;\r\n background-size: contain;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup {\r\n height: 45px;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup .p-inputgroup-addon {\r\n height: 45px;\r\n border-radius: 15px 0 0 15px;\r\n width: 50px;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup .p-inputgroup-addon * {\r\n font-size: 1rem;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup input {\r\n height: 45px;\r\n border-radius: 0 15px 15px 0;\r\n }\r\n \r\n #login-dlg-content button {\r\n height: 45px;\r\n border-radius: 15px;\r\n }\r\n \r\n /*check animation block*/\r\n \r\n .check-animation-wrap {\r\n top: 0;\r\n left: 0;\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100%;\r\n height: calc(100% - 200px);\r\n min-height: 400px;\r\n }\r\n \r\n .check-main-container {\r\n width: 100%;\r\n height: 100vh;\r\n display: flex;\r\n flex-flow: column;\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n \r\n .check-container {\r\n width: 6.25rem;\r\n height: 7.5rem;\r\n display: flex;\r\n flex-flow: column;\r\n align-items: center;\r\n justify-content: space-between;\r\n }\r\n \r\n .check-container .check-background {\r\n width: 100%;\r\n height: calc(100% - 1.25rem);\r\n background: linear-gradient(to bottom right, #5de593, #41d67c);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n transform: scale(0.84);\r\n border-radius: 50%;\r\n animation: animateContainer 0.75s ease-out forwards 0.75s;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n opacity: 0;\r\n }\r\n \r\n .check-container .check-background svg {\r\n width: 65%;\r\n transform: translateY(0.25rem);\r\n stroke-dasharray: 80;\r\n stroke-dashoffset: 80;\r\n animation: animateCheck 0.35s forwards 1.25s ease-out;\r\n min-width: auto !important;\r\n }\r\n \r\n .check-container .check-shadow {\r\n bottom: calc(-15% - 5px);\r\n left: 0;\r\n border-radius: 50%;\r\n background: radial-gradient(closest-side, rgba(73, 218, 131, 1), transparent);\r\n animation: animateShadow 0.75s ease-out forwards 0.75s;\r\n }\r\n \r\n @keyframes animateContainer {\r\n 0% {\r\n opacity: 0;\r\n transform: scale(0);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 25% {\r\n opacity: 1;\r\n transform: scale(0.9);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 43.75% {\r\n transform: scale(1.15);\r\n box-shadow: 0px 0px 0px 43.334px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 62.5% {\r\n transform: scale(1);\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 21.667px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 81.25% {\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 100% {\r\n opacity: 1;\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n }\r\n \r\n @keyframes animateCheck {\r\n from {\r\n stroke-dashoffset: 80;\r\n }\r\n \r\n to {\r\n stroke-dashoffset: 0;\r\n }\r\n }\r\n \r\n @keyframes animateShadow {\r\n 0% {\r\n opacity: 0;\r\n width: 100%;\r\n height: 15%;\r\n }\r\n \r\n 25% {\r\n opacity: 0.25;\r\n }\r\n \r\n 43.75% {\r\n width: 40%;\r\n height: 7%;\r\n opacity: 0.35;\r\n }\r\n \r\n 100% {\r\n width: 85%;\r\n height: 15%;\r\n opacity: 0.25;\r\n }\r\n }\r\n #login-dlg-wrap .loader-wrap {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height:100%;\r\n width:100%;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n z-index: 100;\r\n background: #ffffff42;\r\n backdrop-filter: blur(1px);\r\n }\r\n\r\n #login-dlg-wrap .login-dlg-loader {\r\n border: 15px solid #e7e7e7;\r\n border-top: 15px solid #52dba1;\r\n border-radius: 50%;\r\n width: 100px;\r\n height: 100px;\r\n animation: spinloader 2s linear infinite;\r\n }\r\n\r\n #login-dlg-wrap .loader-wrap::before {\r\n content: \"\";\r\n position: absolute;\r\n width: 70px;\r\n height: 70px;\r\n transform: translate(-50%, -50%);\r\n z-index: 1;\r\n border: 15px solid #e7e7e700;\r\n border-top: 15px solid #52dba1c9;\r\n border-radius: 50%;\r\n animation: spinloader .75s linear infinite;\r\n }\r\n\r\n @keyframes spinloader {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n `],\r\n template: `<p-toast key=\"$login-dlg\" position=\"top-center\"></p-toast>\r\n <div id=\"login-dlg-wrap\">\r\n <div id=\"login-dlg-header\">\r\n <div id=\"login-logo\" class=\"p-mb-2\"></div>\r\n <h3 *ngIf=\"!success\">Your session is expired! <br> Please login again to continue.</h3>\r\n <h3 *ngIf=\"success\" style=\"color:green !important;\">You haved successfully logged in.</h3>\r\n </div>\r\n <div id=\"login-dlg-content\">\r\n <ng-container *ngIf=\"!success\">\r\n <div *ngIf=\"loading\" class=\"loader-wrap\">\r\n <div class=\"login-dlg-loader\"></div>\r\n </div>\r\n <div class=\"login-dlg-elm\">\r\n <div class=\"p-inputgroup\">\r\n <span class=\"p-inputgroup-addon\">\r\n <i class=\"material-icons-round\">person</i>\r\n </span>\r\n <input disabled pInputText type=\"text\" placeholder=\"Username\" [value]=\"decodeToken?.email\" />\r\n </div>\r\n </div>\r\n \r\n <div class=\"login-dlg-elm\">\r\n <div class=\"p-inputgroup\">\r\n <span class=\"p-inputgroup-addon\">\r\n <i class=\"material-icons-round\">lock</i>\r\n </span>\r\n <input [disabled]=\"loading\" (keydown.enter)=\"clickLogin()\" pInputText type=\"password\" placeholder=\"Password\" [(ngModel)]=\"password\"\r\n autofocus />\r\n </div>\r\n </div>\r\n <div class=\"login-dlg-elm\">\r\n <button style=\"width: 100%;\" pButton type=\"button\" label=\"Login\" (click)=\"clickLogin()\"\r\n [disabled]=\"!password || loading\"></button>\r\n </div>\r\n \r\n <div class=\"login-dlg-elm\" style=\"display:flex;align-items: center;user-select: none;\">\r\n <span>No, I want to login with another user.</span>\r\n <button class=\"p-button-text\" pButton type=\"button\" label=\"Logout\" (click)=\"clickLogout()\"></button>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"success\">\r\n <div style=\"margin-top:35px;\"></div>\r\n <div class=\"check-animation-wrap\">\r\n <div class=\"check-main-container\">\r\n <div class=\"check-container\">\r\n <div class=\"check-background\">\r\n <svg viewBox=\"0 0 65 51\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M7 25L27.3077 44L58.5 7\" stroke=\"white\" stroke-width=\"13\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>`,\r\n selector: \"app-localize-logindlg\",\r\n providers: [MessageService],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class LocalizeLogindlgComponent implements OnInit {\r\n readonly messageKey = \"$login-dlg\";\r\n password: any;\r\n readonly decodeToken: JwtPayload | null;\r\n loading = false;\r\n success = false;\r\n private readonly config = LocalizeToken.config;\r\n private readonly loginConfig: ILoginDialogConfig\r\n\r\n private logout?: () => any\r\n private loginUrl?: string;\r\n\r\n\r\n constructor(\r\n private readonly messageService: MessageService,\r\n private readonly cdt: ChangeDetectorRef,\r\n private readonly dlgRef: DynamicDialogRef,\r\n private readonly dlgConfig: DynamicDialogConfig,\r\n private readonly tokenService: LocalizeTokenService,\r\n private readonly httpClient: HttpClient\r\n ) {\r\n this.decodeToken = this.tokenService.decodeRefreshToken;\r\n this.loginConfig = this.dlgConfig.data.loginConfig;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.dlgConfig.closable = false;\r\n this.logout = this.loginConfig.logoutFunc;\r\n this.loginUrl = this.loginConfig.loginUrl\r\n\r\n if (!this.decodeToken) {\r\n this.showMessage(\"error\", \"Token is invalid\");\r\n setTimeout(() => this.logout?.(), 2000);\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.cdt.detectChanges();\r\n }\r\n\r\n async clickLogin() {\r\n if (!this.isValidPassword) {\r\n this.showMessage(\"error\", \"Password is required and must be at least 6 characters\");\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n const loginRes = await this.login();\r\n if (!loginRes?.status) {\r\n this.showMessage(\"error\", loginRes.message ?? \"An error occurred\");\r\n this.loading = false;\r\n return;\r\n }\r\n\r\n this.tokenService.accessToken = loginRes.tokens.accessToken;\r\n const cookieOptions = { expires: this.loginConfig.expire ?? 5 }\r\n LocalizeToken.storage.set(this.config.refreshTokenName!, loginRes.tokens.refreshToken, cookieOptions);\r\n this.success = true;\r\n setTimeout(() => this.dlgRef.close(true), 2000);\r\n }\r\n\r\n private async login() {\r\n if (!this.loginUrl || !this.loginUrl.trim().length) {\r\n this.showMessage(\"error\", \"Login url is required\");\r\n throw new Error(\"Login url is required\");\r\n }\r\n\r\n return await new Promise<any>((resolve, reject) =>\r\n this.httpClient.post(this.loginUrl!, { password: this.password.trim() }, { headers: this.getHeaders() })\r\n .subscribe({ next: resolve, error: reject })\r\n );\r\n }\r\n\r\n private getHeaders() {\r\n return {\r\n [LocalizeToken.httpHeaders.X_REFRESH_TOKEN]: LocalizeToken.storage.get(this.config.refreshTokenName!) ?? \"\",\r\n [LocalizeToken.httpHeaders.X_TENANT]: LocalizeToken.storage.get(this.config.tenantTokenName!) ?? \"\",\r\n };\r\n }\r\n\r\n get isValidPassword(): boolean {\r\n return this.password && this.password.trim().length >= 6 && this.password.trim().length <= 16;\r\n }\r\n\r\n clickLogout = () => this.logout?.();\r\n\r\n private showMessage = (severity: string, summary: string) =>\r\n this.messageService.add({ key: this.messageKey, severity, summary });\r\n}\r\n","import { Injectable, Injector } from '@angular/core';\nimport { DialogService, DynamicDialogConfig } from 'primeng/dynamicdialog';\nimport { LocalizeLogindlgComponent } from './localize-logindlg.component';\nexport interface ILoginDialogConfig {\n loginUrl?: string;\n logoutUrl?: string;\n logoutFunc?: () => void;\n /**\n * Cookie expiration date in days from now. If not provided the cookie is a session cookie\n */\n expire?: number;\n}\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalizeLogindlgService {\n\n constructor(private readonly injector: Injector) { }\n\n async openLoginDialog(loginConfig: ILoginDialogConfig, config?: DynamicDialogConfig) {\n config ??= {\n header: 'Login',\n height: '650px',\n style: { 'max-width': '400px', width: '100%', 'height': '650px' },\n }\n config.data = { ...config.data || {}, ...{ loginConfig } };\n\n const dialogService = this.injector.get(DialogService);\n const dialog = dialogService.open(LocalizeLogindlgComponent, config);\n\n await new Promise<void>((resolve) =>\n dialog.onClose.subscribe(res => {\n if (res) {\n resolve();\n }\n }));\n }\n}\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { LocalizeLogindlgComponent } from \"./localize-logindlg.component\";\nimport { ToastModule } from \"primeng/toast\";\nimport { InputTextModule } from \"primeng/inputtext\";\nimport { ButtonModule } from \"primeng/button\";\nimport { BrowserModule } from '@angular/platform-browser';\nimport { FormsModule } from '@angular/forms';\nimport { LocalizeLogindlgService } from \"./localize-logindlg.service\";\n\n@NgModule({\n declarations: [LocalizeLogindlgComponent],\n exports: [LocalizeLogindlgComponent],\n imports: [\n CommonModule,\n ToastModule,\n InputTextModule,\n BrowserModule,\n FormsModule,\n ButtonModule,\n ],\n providers: [LocalizeLogindlgService],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class LocalizeLogindlgModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.LocalizeTokenService","i1","i3.LocalizeTokenService","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAaA;;;;;;;;;;;;AAYE;MACW,oBAAoB,CAAA;AAE/B,IAAA,IAAY,iBAAiB,GAAA;QAC3B,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC9D,OAAO;AACL,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,MAAM,EAAE,IAAI;;AAEZ,YAAA,OAAO,EAAE;SACV;;AAGc,IAAA,cAAc;AAC/B,IAAA,WAAA,CAAY,eAAgC,EAAA;QAC1C,IAAI,CAAC,cAAc,GAAG,eAAe,IAAI,IAAI,CAAC,iBAAiB;;AAGjE;;;;;AAKG;AACH,IAAA,KAAK,CAAC,IAAY,EAAA;QAChB,IAAI,OAAO,QAAQ,KAAK,WAAW;AAAE,YAAA,OAAO,KAAK;AACjD,QAAA,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC;AAC/B,QAAA,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,gBAAgB,EAAE,GAAG,CAAC;QAClF,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;;AAGrC;;;;;AAKG;AACH,IAAA,GAAG,CAAC,IAAY,EAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,SAAS;AAEvC,QAAA,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC;AAC/B,QAAA,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,gBAAgB,EAAE,GAAG,CAAC;QAClF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3C,QAAA,OAAO,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;;AAG3D;;;;AAIG;IACH,MAAM,GAAA;QACJ,MAAM,OAAO,GAAQ,EAAE;AACvB,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;YACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACxC,YAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;gBACrB,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;gBAC/B,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACpC,gBAAA,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;;AAIlF,QAAA,OAAO,OAAO;;AAGhB,IAAA,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,OAAwB,EAAA;AACvD,QAAA,OAAO,KAAK,IAAI,CAAC,cAAc;QAC/B,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;AAC1F,QAAA,IAAI,SAAS,GAAG,CAAG,EAAA,kBAAkB,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,kBAAkB,CAAC,KAAK,CAAC,GAAG;QAE3E,IAAI,OAAO,EAAE;YACX,MAAM,SAAS,GAAG,OAAO,OAAO,KAAK,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,KAAK,CAAC,GAAG,OAAO;AAChG,YAAA,SAAS,IAAI,CAAW,QAAA,EAAA,SAAS,CAAC,WAAW,EAAE,GAAG;;AAGpD,QAAA,SAAS,IAAI,IAAI,GAAG,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAA,CAAG,GAAG,EAAE;AACxC,QAAA,SAAS,IAAI,MAAM,GAAG,CAAA,OAAA,EAAU,MAAM,CAAA,CAAA,CAAG,GAAG,EAAE;QAC9C,SAAS,IAAI,MAAM,GAAG,SAAS,GAAG,EAAE;AACpC,QAAA,SAAS,IAAI,QAAQ,GAAG,CAAA,SAAA,EAAY,QAAQ,CAAA,CAAA,CAAG,GAAG,EAAE;AAEpD,QAAA,QAAQ,CAAC,MAAM,GAAG,SAAS;;AAG7B;;;;;;AAMG;IACH,MAAM,CAAC,IAAY,EAAE,IAAe,GAAA,GAAG,EAAE,MAAA,GAAiB,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAA;AAChF,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;;AAGnD;;AAEG;IACH,SAAS,CAAC,IAAa,EAAE,MAAe,EAAA;AACtC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE;QAE7B,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC;;;AAI1C;;MChHY,aAAa,CAAA;IAExB,OAAO,IAAI,CAAC,MAA4B,EAAA;AACtC,QAAA,aAAa,CAAC,MAAM,GAAG,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE;;IAG/D,OAAO,MAAM,GAAyB;QACpC,UAAU,EAAE,iBAAiB,EAAE;AAC/B,QAAA,aAAa,EAAE,YAAY;AAC3B,QAAA,eAAe,EAAE,aAAa;AAC9B,QAAA,gBAAgB,EAAE,aAAa;AAC/B,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,cAAc,EAAE;KACjB;AAED,IAAA,OAAgB,OAAO,GAAG,IAAI,oBAAoB,EAAE;IAEpD,OAAgB,WAAW,GAAG;AAC5B,QAAA,aAAa,EAAE,eAAe;AAC9B,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,eAAe,EAAE,gBAAgB;AACjC,QAAA,YAAY,EAAE,cAAc;KAC7B;;AAIH;;;;;AAKG;AACI,eAAe,OAAO,CAAC,YAAoB,EAAE,OAAgB,IAAI,EAAA;AACtE,IAAA,IAAI,CAAC,IAAI;QAAE;AACX,IAAA,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACjE;AAEA;;;;AAIG;AACI,eAAe,SAAS,CAAC,IAAe,EAAE,iBAAyB,EAAE,EAAA;AAC1E,IAAA,MAAM,IAAI,OAAO,CAAC,OAAO,IAAG;AAC1B,QAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAW;AACtC,YAAA,MAAM,IAAI,GAAG,IAAI,EAAE;AACnB,YAAA,MAAM,MAAM,GAAG,IAAI,YAAY,OAAO,GAAG,MAAM,IAAI,GAAG,IAAI;YAC1D,IAAI,MAAM,EAAE;gBACV,aAAa,CAAC,QAAQ,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC;;SAEhB,EAAE,cAAc,CAAC;AACpB,KAAC,CAAC;AACJ;AAEM,SAAU,iBAAiB,CAAC,SAAkB,EAAA;AAClD,IAAA,SAAS,KAAK,MAAM,CAAC,QAAQ,CAAC,QAAQ;IACtC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;IAClC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS;AACjE;;MC3Da,oBAAoB,CAAA;AACZ,IAAA,MAAM;AACvB,IAAA,WAAA,GAAA;QACI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,eAAe,EAAE;AACxH,YAAA,MAAM,IAAI,KAAK,CAAC,8FAA8F,CAAC;;AAEnH,QAAA,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM;;AAE7B,IAAA,sBAAsB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;IAErE,IAAY,SAAS,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAA;IAClD,IAAY,SAAS,CAAC,KAA6B,EAAA;QAC/C;AACI,cAAE,IAAI,CAAC,UAAU,CAAC,KAAK;AACvB,cAAE,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC;;AAGlE,IAAA,IAAI,YAAY,GAAK,EAAA,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAiB,CAAC,CAAA;IACpF,IAAI,WAAW,GAAK,EAAA,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK,CAAA;IAEhD,IAAI,WAAW,CAAC,KAAyB,EAAA;QACrC,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;;;AAIxD,IAAA,IAAI,eAAe,GAAA,EAAK,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAA;IAChE,IAAI,eAAe,CAAC,KAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;AACvC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE;;;AAI7D,IAAA,IAAI,WAAW,GAAK,EAAA,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,eAAgB,CAAC,CAAA;IAE1E,UAAU,GAAA;AACd,QAAA,IAAI;AACA,YAAA,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC;YACrE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;AACnC,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe;;AAC1C,QAAA,MAAM;AACJ,YAAA,OAAO,SAAS;;;AAIhB,IAAA,UAAU,CAAC,KAAiB,EAAA;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1C,QAAA,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,aAAc,EAAE,MAAM,CAAC;;IAGjE,WAAW,GAAA;QACP,OAAO,IAAI,CAAC,YAAY,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;;AAG7F,IAAA,WAAW,GAAG,CAAC,KAAa,KAAK,UAAU,CAAC,SAAS,CAAa,KAAK,CAAC;AACxE,IAAA,IAAI,kBAAkB,GAAA;AAClB,QAAA,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAiB,CAAC;AACtE,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;AACvB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;;wGA3DzB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA;;4FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACblC;;AAEG;IACS;AAAZ,CAAA,UAAY,OAAO,EAAA;AACjB,IAAA,OAAA,CAAA,OAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR,IAAA,OAAA,CAAA,OAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO;AACP,IAAA,OAAA,CAAA,OAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO;AACP,IAAA,OAAA,CAAA,OAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU;AACV,IAAA,OAAA,CAAA,OAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACX,CAAC,EANW,OAAO,KAAP,OAAO,GAMlB,EAAA,CAAA,CAAA;MA0BY,kBAAkB,CAAA;AASR,IAAA,UAAA;AACF,IAAA,oBAAA;AARV,IAAA,mBAAmB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AACzD,IAAA,wBAAwB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;IACvE,IAAI,YAAY,GAAK,EAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;IAC3D,IAAI,iBAAiB,GAAK,EAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;IAE7D,UAAU,GAAwB,EAAE;IAE5C,WAAqB,CAAA,UAAsB,EACxB,oBAA0C,EAAA;QADxC,IAAU,CAAA,UAAA,GAAV,UAAU;QACZ,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;;AAGvC;;;AAGG;AACH,IAAA,IAAI,CAAC,UAA+B,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;;AAI9B;;;;;AAKG;AACH,IAAA,IAAI,GAAG,CAAC,OAAe,KACrB,CAAC,IAAY,EAAE,MAAkB,GAAA,OAAO,CAAC,GAAG,EAAE,QAAa,IAAI,EAAE,aAAsB,KAAK,EAAE,OAAiC,KAC7H,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC;AAExD,IAAA,MAAM,IAAI,CAAC,OAAe,EAChC,IAAY,EACZ,MAAkB,GAAA,OAAO,CAAC,GAAG,EAC7B,KAAa,GAAA,IAAI,EACjB,UAAsB,GAAA,KAAK,EAC3B,OAAiC,EAAA;QAEjC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;QAEtD,MAAM,GAAG,GAAG,CAAA,EAAG,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA,CAAE;QACrF,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;QAChD,MAAM,OAAO,GAAG,MAAK,EAAG,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAA,EAAE;;AAG5F,QAAA,MAAM,IAAI,CAAC,wBAAwB,EAAE;;AAGrC,QAAA,IAAI;AAAE,YAAA,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;;;QAElE,OAAO,KAAK,EAAE;AACZ,YAAA,IAAK,KAAa,CAAC,MAAM,KAAK,GAAG,EAAE;AAAE,gBAAA,MAAM,KAAK;;YAChD,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC;;;AAI3D,IAAA,MAAM,mBAAmB,CAAC,UAAkB,EAAE,GAAW,EAAE,OAAiB,EAAA;AAClF,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;;;AAIxD,IAAA,MAAM,wBAAwB,GAAA;AACpC,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE;AAC7C,YAAA,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC;;;QAGnE,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,EAAE;AACjD,YAAA,MAAM,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC;;;AAI1E,IAAA,MAAM,cAAc,CAAC,MAAc,EAAE,GAAW,EAAE,OAAY,EAAA;AACpE,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAC/C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAM,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AACjG,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;AACpC,QAAA,OAAO,MAAM;;AAGP,IAAA,MAAM,WAAW,CAAC,KAAA,GAAiB,KAAK,EAAA;QAE9C,IAAI,IAAI,CAAC,oBAAoB,CAAC,eAAe,IAAI,CAAC,KAAK,EAAE;AACvD,YAAA,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC;YACjE;;AAGF,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,GAAG,IAAI;AAChD,YAAA,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,cAAc;YAClD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,eAAe,EAAE,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAE,CAAA,CAAC;AAChI,YAAA,MAAM,WAAW,GAAQ,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KACzD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAM,MAAO,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAEzG,YAAA,IAAI,WAAW,EAAE,MAAM,EAAE;gBACvB,IAAI,CAAC,oBAAoB,CAAC,WAAW,GAAG,WAAW,CAAC,OAAO;;AACtD,iBAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;gBAClD,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;;iBAC7C;AACL,gBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE;oBACxC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC;AAC1D,oBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;;;;gBAGxB;AACR,YAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,GAAG,KAAK;;;;AAK7C,IAAA,OAAO,CAAC,UAAA,GAAsB,KAAK,EAAE,UAAqC,EAAE,EAAA;AAClF,QAAA,MAAM,cAAc,GAAG,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,aAAa,GAAG,CAAA,OAAA,EAAU,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAA,CAAE,GAAG;AACxH,QAAA,IAAI,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE;AACnC,YAAA,cAAc,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;;QAGjG,IAAI,CAAC,UAAU,EAAE;YACf,cAAc,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,kBAAkB;;QAG7E,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;aAClG,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrE,MAAM,aAAa,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,EAAE;AACxD,QAAA,OAAO,IAAI,WAAW,CAAC,aAAa,CAAC;;IAG/B,MAAM,SAAS,CAAC,EAAa,EAAA;AACnC,QAAA,IAAI,CAAC,EAAE;YAAE;AACT,QAAA,OAAO,EAAE,YAAY,OAAO,GAAG,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE;;wGAlIvC,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MC9BY,mBAAmB,CAAA;wGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;yGAAnB,mBAAmB,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EALjB,SAAA,EAAA;YACP,oBAAoB;YACpB;AACH,SAAA,EAAA,CAAA;;4FAEQ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,SAAS,EAAE;wBACP,oBAAoB;wBACpB;AACH,qBAAA;AACJ,iBAAA;;;MCuSY,yBAAyB,CAAA;AAcjB,IAAA,cAAA;AACA,IAAA,GAAA;AACA,IAAA,MAAA;AACA,IAAA,SAAA;AACA,IAAA,YAAA;AACA,IAAA,UAAA;IAlBV,UAAU,GAAG,YAAY;AAClC,IAAA,QAAQ;AACC,IAAA,WAAW;IACpB,OAAO,GAAG,KAAK;IACf,OAAO,GAAG,KAAK;AACE,IAAA,MAAM,GAAG,aAAa,CAAC,MAAM;AAC7B,IAAA,WAAW;AAEpB,IAAA,MAAM;AACN,IAAA,QAAQ;IAGhB,WACmB,CAAA,cAA8B,EAC9B,GAAsB,EACtB,MAAwB,EACxB,SAA8B,EAC9B,YAAkC,EAClC,UAAsB,EAAA;QALtB,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAG,CAAA,GAAA,GAAH,GAAG;QACH,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAU,CAAA,UAAA,GAAV,UAAU;QAE3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB;QACvD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW;;IAGpD,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAK;QAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAEzC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC;AAC7C,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC;;;IAI3C,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;AAG1B,IAAA,MAAM,UAAU,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACzB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,wDAAwD,CAAC;YACnF;;AAGF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE;AACnC,QAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;YACrB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,mBAAmB,CAAC;AAClE,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACpB;;QAGF,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW;AAC3D,QAAA,MAAM,aAAa,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE;AAC/D,QAAA,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC;AACrG,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;;AAGzC,IAAA,MAAM,KAAK,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAClD,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,uBAAuB,CAAC;AAClD,YAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;;AAG1C,QAAA,OAAO,MAAM,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,KAC5C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE;AACpG,aAAA,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAC/C;;IAGK,UAAU,GAAA;QAChB,OAAO;YACL,CAAC,aAAa,CAAC,WAAW,CAAC,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAiB,CAAC,IAAI,EAAE;YAC3G,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,eAAgB,CAAC,IAAI,EAAE;SACpG;;AAGH,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE;;IAG/F,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,IAAI;IAE3B,WAAW,GAAG,CAAC,QAAgB,EAAE,OAAe,KACtD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;wGAvF3D,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAHzB,QAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,CAAC,cAAc,CAAC,EA3DjB,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDH,QAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+1GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAKI,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAnSrC,SAAS;AAqOE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAyDH,EACG,QAAA,EAAA,uBAAuB,aACtB,CAAC,cAAc,CAAC,EACZ,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,+1GAAA,CAAA,EAAA;;;MC/R1B,uBAAuB,CAAA;AAEL,IAAA,QAAA;AAA7B,IAAA,WAAA,CAA6B,QAAkB,EAAA;QAAlB,IAAQ,CAAA,QAAA,GAAR,QAAQ;;AAErC,IAAA,MAAM,eAAe,CAAC,WAA+B,EAAE,MAA4B,EAAA;AACjF,QAAA,MAAM,KAAK;AACT,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE;SAClE;AACD,QAAA,MAAM,CAAC,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE;QAE1D,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC;QACtD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,yBAAyB,EAAE,MAAM,CAAC;AAEpE,QAAA,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,KAC9B,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAG;YAC7B,IAAI,GAAG,EAAE;AACP,gBAAA,OAAO,EAAE;;SAEZ,CAAC,CAAC;;wGApBI,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA;;4FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCUY,sBAAsB,CAAA;wGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;yGAAtB,sBAAsB,EAAA,YAAA,EAAA,CAblB,yBAAyB,CAAA,EAAA,OAAA,EAAA,CAGtC,YAAY;YACZ,WAAW;YACX,eAAe;YACf,aAAa;YACb,WAAW;AACX,YAAA,YAAY,aAPJ,yBAAyB,CAAA,EAAA,CAAA;AAYxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,EAHtB,SAAA,EAAA,CAAC,uBAAuB,CAAC,YAPlC,YAAY;YACZ,WAAW;YACX,eAAe;YACf,aAAa;YACb,WAAW;YACX,YAAY,CAAA,EAAA,CAAA;;4FAKH,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAdlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,yBAAyB,CAAC;oBACzC,OAAO,EAAE,CAAC,yBAAyB,CAAC;AACpC,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,eAAe;wBACf,aAAa;wBACb,WAAW;wBACX,YAAY;AACb,qBAAA;oBACD,SAAS,EAAE,CAAC,uBAAuB,CAAC;oBACpC,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA;;;ACvBD;;AAEG;;;;"}
@@ -28,6 +28,7 @@ export declare class LocalizeLogindlgComponent implements OnInit {
28
28
  private getHeaders;
29
29
  get isValidPassword(): boolean;
30
30
  clickLogout: () => any;
31
+ private showMessage;
31
32
  static ɵfac: i0.ɵɵFactoryDeclaration<LocalizeLogindlgComponent, never>;
32
33
  static ɵcmp: i0.ɵɵComponentDeclaration<LocalizeLogindlgComponent, "app-localize-logindlg", never, {}, {}, never, never, false, never>;
33
34
  }
@@ -5,6 +5,10 @@ export interface ILoginDialogConfig {
5
5
  loginUrl?: string;
6
6
  logoutUrl?: string;
7
7
  logoutFunc?: () => void;
8
+ /**
9
+ * Cookie expiration date in days from now. If not provided the cookie is a session cookie
10
+ */
11
+ expire?: number;
8
12
  }
9
13
  export declare class LocalizeLogindlgService {
10
14
  private readonly injector;
@@ -1,14 +1,12 @@
1
- export declare enum ISameSiteType {
2
- strict = "strict",
3
- lax = "lax",
4
- none = "none"
5
- }
6
1
  export interface ICookieOptions {
2
+ /**
3
+ * Cookie expiration date in days from now. If not provided the cookie is a session cookie
4
+ */
7
5
  expires?: number | Date;
8
6
  path?: string;
9
7
  domain?: string;
10
8
  secure?: boolean;
11
- samesite?: string;
9
+ samesite?: "strict" | "lax" | "none";
12
10
  }
13
11
  /**
14
12
  * Assembly of @package ng2-cookies @see https://www.npmjs.com/package/ng2-cookies
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sambath999/localize-token",
3
- "version": "18.0.12",
3
+ "version": "18.0.13",
4
4
  "description": "localize token client app",
5
5
  "type": "module",
6
6
  "repository": {