@sambath999/localize-token 18.0.3 → 18.0.5
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.
- package/esm2022/localize-logindlg/localize-logindlg.component.mjs +210 -0
- package/esm2022/localize-logindlg/localize-logindlg.module.mjs +39 -0
- package/esm2022/localize-logindlg/localize-logindlg.service.mjs +33 -0
- package/esm2022/localize-logindlg/public-api.mjs +4 -0
- package/esm2022/localize-token/localize.api.service.mjs +138 -0
- package/esm2022/localize-token/localize.token.mjs +54 -0
- package/esm2022/{lib → localize-token}/localize.token.module.mjs +1 -1
- package/esm2022/localize-token/localize.token.service.mjs +61 -0
- package/esm2022/localize-token/localize.token.storage.mjs +113 -0
- package/esm2022/localize-token/public-api.mjs +6 -0
- package/esm2022/public-api.mjs +3 -2
- package/fesm2022/sambath999-localize-token.mjs +342 -43
- package/fesm2022/sambath999-localize-token.mjs.map +1 -1
- package/localize-logindlg/localize-logindlg.component.d.ts +32 -0
- package/localize-logindlg/localize-logindlg.module.d.ts +12 -0
- package/localize-logindlg/localize-logindlg.service.d.ts +10 -0
- package/localize-logindlg/public-api.d.ts +3 -0
- package/{lib → localize-token}/localize.api.service.d.ts +25 -3
- package/{lib → localize-token}/localize.token.service.d.ts +9 -9
- package/localize-token/public-api.d.ts +5 -0
- package/package.json +6 -11
- package/public-api.d.ts +2 -1
- package/esm2022/lib/index.mjs +0 -6
- package/esm2022/lib/localize.api.service.mjs +0 -119
- package/esm2022/lib/localize.token.mjs +0 -54
- package/esm2022/lib/localize.token.service.mjs +0 -64
- package/esm2022/lib/localize.token.storage.mjs +0 -101
- package/lib/index.d.ts +0 -5
- /package/{lib → localize-token}/localize.token.d.ts +0 -0
- /package/{lib → localize-token}/localize.token.module.d.ts +0 -0
- /package/{lib → localize-token}/localize.token.storage.d.ts +0 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { Component, ViewEncapsulation, } from "@angular/core";
|
|
2
|
+
import { MessageService } from "primeng/api";
|
|
3
|
+
import { LocalizeToken } from "../localize-token/localize.token";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "primeng/api";
|
|
6
|
+
import * as i2 from "primeng/dynamicdialog";
|
|
7
|
+
import * as i3 from "../localize-token/localize.token.service";
|
|
8
|
+
import * as i4 from "@angular/common/http";
|
|
9
|
+
import * as i5 from "@angular/common";
|
|
10
|
+
import * as i6 from "primeng/toast";
|
|
11
|
+
import * as i7 from "primeng/inputtext";
|
|
12
|
+
import * as i8 from "@angular/forms";
|
|
13
|
+
export class LocalizeLogindlgComponent {
|
|
14
|
+
messageService;
|
|
15
|
+
cdt;
|
|
16
|
+
dlgRef;
|
|
17
|
+
dlgConfig;
|
|
18
|
+
tokenService;
|
|
19
|
+
httpClient;
|
|
20
|
+
messageKey = "$login-dlg";
|
|
21
|
+
password;
|
|
22
|
+
decodeToken;
|
|
23
|
+
loading = false;
|
|
24
|
+
success = false;
|
|
25
|
+
config;
|
|
26
|
+
logout;
|
|
27
|
+
loginUrl;
|
|
28
|
+
constructor(messageService, cdt, dlgRef, dlgConfig, tokenService, httpClient) {
|
|
29
|
+
this.messageService = messageService;
|
|
30
|
+
this.cdt = cdt;
|
|
31
|
+
this.dlgRef = dlgRef;
|
|
32
|
+
this.dlgConfig = dlgConfig;
|
|
33
|
+
this.tokenService = tokenService;
|
|
34
|
+
this.httpClient = httpClient;
|
|
35
|
+
this.decodeToken = this.tokenService.decodeRefreshToken;
|
|
36
|
+
this.config = LocalizeToken.config;
|
|
37
|
+
}
|
|
38
|
+
ngOnInit() {
|
|
39
|
+
this.dlgConfig.closable = false;
|
|
40
|
+
this.logout = this.dlgConfig.data?.logout;
|
|
41
|
+
this.loginUrl = this.dlgConfig.data?.loginUrl;
|
|
42
|
+
if (!this.decodeToken) {
|
|
43
|
+
this.messageService.add({
|
|
44
|
+
key: this.messageKey,
|
|
45
|
+
severity: "error",
|
|
46
|
+
summary: "Token is invalid",
|
|
47
|
+
});
|
|
48
|
+
setTimeout(() => this.logout?.(), 2000);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
ngAfterViewInit() {
|
|
52
|
+
this.cdt.detectChanges();
|
|
53
|
+
}
|
|
54
|
+
async clickLogin() {
|
|
55
|
+
if (!this.isValidPassword) {
|
|
56
|
+
this.messageService.add({
|
|
57
|
+
key: this.messageKey,
|
|
58
|
+
severity: "error",
|
|
59
|
+
summary: "Password is required and must be at least 6 characters",
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
this.loading = true;
|
|
63
|
+
const loginRes = await this.login();
|
|
64
|
+
if (!loginRes?.status) {
|
|
65
|
+
this.messageService.add({
|
|
66
|
+
key: this.messageKey,
|
|
67
|
+
severity: "error",
|
|
68
|
+
summary: loginRes.message,
|
|
69
|
+
});
|
|
70
|
+
this.loading = false;
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
this.tokenService.accessToken = loginRes.tokens.accessToken;
|
|
74
|
+
LocalizeToken.storage.set(this.config.refreshTokenName, loginRes.tokens.refreshToken);
|
|
75
|
+
this.success = true;
|
|
76
|
+
setTimeout(() => this.dlgRef.close(true), 2000);
|
|
77
|
+
}
|
|
78
|
+
async login() {
|
|
79
|
+
const path = this.loginUrl ?? "/api/auth/login";
|
|
80
|
+
const response = await new Promise((resolve, reject) => this.httpClient
|
|
81
|
+
.post(path, { password: this.password.trim() }, { headers: this.getHeaders() })
|
|
82
|
+
.subscribe({ next: resolve, error: reject }));
|
|
83
|
+
return response;
|
|
84
|
+
}
|
|
85
|
+
getHeaders() {
|
|
86
|
+
return {
|
|
87
|
+
[LocalizeToken.httpHeaders.X_REFRESH_TOKEN]: LocalizeToken.storage.get(this.config.refreshTokenName),
|
|
88
|
+
[LocalizeToken.httpHeaders.X_TENANT]: LocalizeToken.storage.get(this.config.tenantTokenName) ?? "",
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
get isValidPassword() {
|
|
92
|
+
return this.password && this.password.trim().length >= 6;
|
|
93
|
+
}
|
|
94
|
+
clickLogout = () => this.logout?.();
|
|
95
|
+
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 });
|
|
96
|
+
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>
|
|
97
|
+
<div id="login-dlg-wrap">
|
|
98
|
+
<div id="login-dlg-header">
|
|
99
|
+
<div id="login-logo" class="p-mb-2"></div>
|
|
100
|
+
<h3 *ngIf="!success">Your session is expired! <br> Please login again to continue.</h3>
|
|
101
|
+
<h3 *ngIf="success" style="color:green !important;">You haved successfully logged in.</h3>
|
|
102
|
+
</div>
|
|
103
|
+
<div id="login-dlg-content">
|
|
104
|
+
<ng-container *ngIf="!success">
|
|
105
|
+
<div class="login-dlg-elm">
|
|
106
|
+
<div class="p-inputgroup">
|
|
107
|
+
<span class="p-inputgroup-addon">
|
|
108
|
+
<i class="material-icons-round">person</i>
|
|
109
|
+
</span>
|
|
110
|
+
<input disabled pInputText type="text" placeholder="Username" [value]="decodeToken?.email" />
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
<div class="login-dlg-elm">
|
|
115
|
+
<div class="p-inputgroup">
|
|
116
|
+
<span class="p-inputgroup-addon">
|
|
117
|
+
<i class="material-icons-round">lock</i>
|
|
118
|
+
</span>
|
|
119
|
+
<input (keydown.enter)="clickLogin()" pInputText type="password" placeholder="Password" [(ngModel)]="password"
|
|
120
|
+
autofocus />
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
<div class="login-dlg-elm">
|
|
124
|
+
<button style="width: 100%;" pButton type="button" label="Login" (click)="clickLogin()"
|
|
125
|
+
[disabled]="!password || loading"></button>
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
<div class="login-dlg-elm" style="display:flex;align-items: center;user-select: none;">
|
|
129
|
+
<span>No, I want to login with another user.</span>
|
|
130
|
+
<button class="p-button-text" pButton type="button" label="Logout" (click)="clickLogout()"></button>
|
|
131
|
+
</div>
|
|
132
|
+
</ng-container>
|
|
133
|
+
|
|
134
|
+
<ng-container *ngIf="success">
|
|
135
|
+
<div style="margin-top:35px;"></div>
|
|
136
|
+
<div class="check-animation-wrap">
|
|
137
|
+
<div class="check-main-container">
|
|
138
|
+
<div class="check-container">
|
|
139
|
+
<div class="check-background">
|
|
140
|
+
<svg viewBox="0 0 65 51" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
141
|
+
<path d="M7 25L27.3077 44L58.5 7" stroke="white" stroke-width="13" stroke-linecap="round"
|
|
142
|
+
stroke-linejoin="round"></path>
|
|
143
|
+
</svg>
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
</ng-container>
|
|
149
|
+
</div>
|
|
150
|
+
</div>`, isInline: true, 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}}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i7.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
151
|
+
}
|
|
152
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeLogindlgComponent, decorators: [{
|
|
153
|
+
type: Component,
|
|
154
|
+
args: [{ template: `<p-toast key="$login-dlg" position="top-center"></p-toast>
|
|
155
|
+
<div id="login-dlg-wrap">
|
|
156
|
+
<div id="login-dlg-header">
|
|
157
|
+
<div id="login-logo" class="p-mb-2"></div>
|
|
158
|
+
<h3 *ngIf="!success">Your session is expired! <br> Please login again to continue.</h3>
|
|
159
|
+
<h3 *ngIf="success" style="color:green !important;">You haved successfully logged in.</h3>
|
|
160
|
+
</div>
|
|
161
|
+
<div id="login-dlg-content">
|
|
162
|
+
<ng-container *ngIf="!success">
|
|
163
|
+
<div class="login-dlg-elm">
|
|
164
|
+
<div class="p-inputgroup">
|
|
165
|
+
<span class="p-inputgroup-addon">
|
|
166
|
+
<i class="material-icons-round">person</i>
|
|
167
|
+
</span>
|
|
168
|
+
<input disabled pInputText type="text" placeholder="Username" [value]="decodeToken?.email" />
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
<div class="login-dlg-elm">
|
|
173
|
+
<div class="p-inputgroup">
|
|
174
|
+
<span class="p-inputgroup-addon">
|
|
175
|
+
<i class="material-icons-round">lock</i>
|
|
176
|
+
</span>
|
|
177
|
+
<input (keydown.enter)="clickLogin()" pInputText type="password" placeholder="Password" [(ngModel)]="password"
|
|
178
|
+
autofocus />
|
|
179
|
+
</div>
|
|
180
|
+
</div>
|
|
181
|
+
<div class="login-dlg-elm">
|
|
182
|
+
<button style="width: 100%;" pButton type="button" label="Login" (click)="clickLogin()"
|
|
183
|
+
[disabled]="!password || loading"></button>
|
|
184
|
+
</div>
|
|
185
|
+
|
|
186
|
+
<div class="login-dlg-elm" style="display:flex;align-items: center;user-select: none;">
|
|
187
|
+
<span>No, I want to login with another user.</span>
|
|
188
|
+
<button class="p-button-text" pButton type="button" label="Logout" (click)="clickLogout()"></button>
|
|
189
|
+
</div>
|
|
190
|
+
</ng-container>
|
|
191
|
+
|
|
192
|
+
<ng-container *ngIf="success">
|
|
193
|
+
<div style="margin-top:35px;"></div>
|
|
194
|
+
<div class="check-animation-wrap">
|
|
195
|
+
<div class="check-main-container">
|
|
196
|
+
<div class="check-container">
|
|
197
|
+
<div class="check-background">
|
|
198
|
+
<svg viewBox="0 0 65 51" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
199
|
+
<path d="M7 25L27.3077 44L58.5 7" stroke="white" stroke-width="13" stroke-linecap="round"
|
|
200
|
+
stroke-linejoin="round"></path>
|
|
201
|
+
</svg>
|
|
202
|
+
</div>
|
|
203
|
+
</div>
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
</ng-container>
|
|
207
|
+
</div>
|
|
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}}\n"] }]
|
|
209
|
+
}], ctorParameters: () => [{ type: i1.MessageService }, { type: i0.ChangeDetectorRef }, { type: i2.DynamicDialogRef }, { type: i2.DynamicDialogConfig }, { type: i3.LocalizeTokenService }, { type: i4.HttpClient }] });
|
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUtbG9naW5kbGcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xvY2FsaXplLWxvZ2luZGxnL2xvY2FsaXplLWxvZ2luZGxnLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwsU0FBUyxFQUVULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7OztBQXdQakUsTUFBTSxPQUFPLHlCQUF5QjtJQWFqQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFqQlYsVUFBVSxHQUFHLFlBQVksQ0FBQztJQUNuQyxRQUFRLENBQU07SUFDTCxXQUFXLENBQW9CO0lBQ3hDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNDLE1BQU0sQ0FBQztJQUVoQixNQUFNLENBQVk7SUFDbEIsUUFBUSxDQUFVO0lBRzFCLFlBQ21CLGNBQThCLEVBQzlCLEdBQXNCLEVBQ3RCLE1BQXdCLEVBQ3hCLFNBQThCLEVBQzlCLFlBQWtDLEVBQ2xDLFVBQXNCO1FBTHRCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQUN4QixjQUFTLEdBQVQsU0FBUyxDQUFxQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBc0I7UUFDbEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUV2QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUM7UUFDeEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFB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QU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBRTtZQUNyRyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFO1NBQ25HLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELFdBQVcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQzt3R0EzRnpCLHlCQUF5Qjs0RkFBekIseUJBQXlCLGdEQUh6QixDQUFDLGNBQWMsQ0FBQywwQkF4RGpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0FzREg7OzRGQUtJLHlCQUF5QjtrQkF0UHJDLFNBQVM7K0JBMkxFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0FzREgsWUFDRyx1QkFBdUIsYUFDdEIsQ0FBQyxjQUFjLENBQUMsaUJBQ1osaUJBQWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcInByaW1lbmcvYXBpXCI7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tIFwicHJpbWVuZy9keW5hbWljZGlhbG9nXCI7XHJcbmltcG9ydCB7IEp3dFBheWxvYWQsIExvY2FsaXplVG9rZW5TZXJ2aWNlIH0gZnJvbSBcIi4uL2xvY2FsaXplLXRva2VuL2xvY2FsaXplLnRva2VuLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTG9jYWxpemVUb2tlbiB9IGZyb20gXCIuLi9sb2NhbGl6ZS10b2tlbi9sb2NhbGl6ZS50b2tlblwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc3R5bGVzOiBgI2xvZ2luLWRsZy13cmFwIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgbWF4LXdpZHRoOiA0MDBweDtcclxuICAgIG1hcmdpbjogMCBhdXRvO1xyXG4gICAgcGFkZGluZzogMzBweDtcclxuICB9XHJcbiAgXHJcbiAgLmxvZ2luLWRsZy1lbG0ge1xyXG4gICAgbWFyZ2luLXRvcDogMXJlbTtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1oZWFkZXIge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgfVxyXG4gIFxyXG4gICNsb2dpbi1kbGctaGVhZGVyIGgzIHtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgZm9udC1zaXplOiAwLjlyZW07XHJcbiAgICBjb2xvcjogb3JhbmdlO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tbG9nbyB7XHJcbiAgICBoZWlnaHQ6IDQwcHg7XHJcbiAgICB3aWR0aDogNDBweDtcclxuICAgIGJhY2tncm91bmQ6IHVybChcIi9hc3NldHMvaW1hZ2VzL2xvZ28tMzAwcHgucG5nXCIpIG5vLXJlcGVhdDtcclxuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1jb250ZW50IC5wLWlucHV0Z3JvdXAge1xyXG4gICAgaGVpZ2h0OiA0NXB4O1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgLnAtaW5wdXRncm91cCAucC1pbnB1dGdyb3VwLWFkZG9uIHtcclxuICAgIGhlaWdodDogNDVweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDE1cHggMCAwIDE1cHg7XHJcbiAgICB3aWR0aDogNTBweDtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1jb250ZW50IC5wLWlucHV0Z3JvdXAgLnAtaW5wdXRncm91cC1hZGRvbiAqIHtcclxuICAgIGZvbnQtc2l6ZTogMXJlbTtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1jb250ZW50IC5wLWlucHV0Z3JvdXAgaW5wdXQge1xyXG4gICAgaGVpZ2h0OiA0NXB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogMCAxNXB4IDE1cHggMDtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1jb250ZW50IGJ1dHRvbiB7XHJcbiAgICBoZWlnaHQ6IDQ1cHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiAxNXB4O1xyXG4gIH1cclxuICBcclxuICAvKmNoZWNrIGFuaW1hdGlvbiBibG9jayovXHJcbiAgXHJcbiAgLmNoZWNrLWFuaW1hdGlvbi13cmFwIHtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyMDBweCk7XHJcbiAgICBtaW4taGVpZ2h0OiA0MDBweDtcclxuICB9XHJcbiAgXHJcbiAgLmNoZWNrLW1haW4tY29udGFpbmVyIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAxMDB2aDtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICB9XHJcbiAgXHJcbiAgLmNoZWNrLWNvbnRhaW5lciB7XHJcbiAgICB3aWR0aDogNi4yNXJlbTtcclxuICAgIGhlaWdodDogNy41cmVtO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogY29sdW1uO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICB9XHJcbiAgXHJcbiAgLmNoZWNrLWNvbnRhaW5lciAuY2hlY2stYmFja2dyb3VuZCB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogY2FsYygxMDAlIC0gMS4yNXJlbSk7XHJcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tIHJpZ2h0LCAjNWRlNTkzLCAjNDFkNjdjKTtcclxuICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldCwgMHB4IDBweCAwcHggNjVweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjg0KTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIGFuaW1hdGlvbjogYW5pbWF0ZUNvbnRhaW5lciAwLjc1cyBlYXNlLW91dCBmb3J3YXJkcyAwLjc1cztcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBvcGFjaXR5OiAwO1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stY29udGFpbmVyIC5jaGVjay1iYWNrZ3JvdW5kIHN2ZyB7XHJcbiAgICB3aWR0aDogNjUlO1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAuMjVyZW0pO1xyXG4gICAgc3Ryb2tlLWRhc2hhcnJheTogODA7XHJcbiAgICBzdHJva2UtZGFzaG9mZnNldDogODA7XHJcbiAgICBhbmltYXRpb246IGFuaW1hdGVDaGVjayAwLjM1cyBmb3J3YXJkcyAxLjI1cyBlYXNlLW91dDtcclxuICAgIG1pbi13aWR0aDogYXV0byAhaW1wb3J0YW50O1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stY29udGFpbmVyIC5jaGVjay1zaGFkb3cge1xyXG4gICAgYm90dG9tOiBjYWxjKC0xNSUgLSA1cHgpO1xyXG4gICAgbGVmdDogMDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjbG9zZXN0LXNpZGUsIHJnYmEoNzMsIDIxOCwgMTMxLCAxKSwgdHJhbnNwYXJlbnQpO1xyXG4gICAgYW5pbWF0aW9uOiBhbmltYXRlU2hhZG93IDAuNzVzIGVhc2Utb3V0IGZvcndhcmRzIDAuNzVzO1xyXG4gIH1cclxuICBcclxuICBAa2V5ZnJhbWVzIGFuaW1hdGVDb250YWluZXIge1xyXG4gICAgMCUge1xyXG4gICAgICBvcGFjaXR5OiAwO1xyXG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xyXG4gICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldDtcclxuICAgIH1cclxuICBcclxuICAgIDI1JSB7XHJcbiAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcclxuICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggNjVweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICA0My43NSUge1xyXG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMTUpO1xyXG4gICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCA0My4zMzRweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICA2Mi41JSB7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XHJcbiAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwcHggMHB4IDBweCAyMS42NjdweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgfVxyXG4gIFxyXG4gICAgODEuMjUlIHtcclxuICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgfVxyXG4gIFxyXG4gICAgMTAwJSB7XHJcbiAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwcHggMHB4IDBweCAwcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldDtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgQGtleWZyYW1lcyBhbmltYXRlQ2hlY2sge1xyXG4gICAgZnJvbSB7XHJcbiAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiA4MDtcclxuICAgIH1cclxuICBcclxuICAgIHRvIHtcclxuICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIEBrZXlmcmFtZXMgYW5pbWF0ZVNoYWRvdyB7XHJcbiAgICAwJSB7XHJcbiAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBoZWlnaHQ6IDE1JTtcclxuICAgIH1cclxuICBcclxuICAgIDI1JSB7XHJcbiAgICAgIG9wYWNpdHk6IDAuMjU7XHJcbiAgICB9XHJcbiAgXHJcbiAgICA0My43NSUge1xyXG4gICAgICB3aWR0aDogNDAlO1xyXG4gICAgICBoZWlnaHQ6IDclO1xyXG4gICAgICBvcGFjaXR5OiAwLjM1O1xyXG4gICAgfVxyXG4gIFxyXG4gICAgMTAwJSB7XHJcbiAgICAgIHdpZHRoOiA4NSU7XHJcbiAgICAgIGhlaWdodDogMTUlO1xyXG4gICAgICBvcGFjaXR5OiAwLjI1O1xyXG4gICAgfVxyXG4gIH1gLFxyXG4gIHRlbXBsYXRlOiBgPHAtdG9hc3Qga2V5PVwiJGxvZ2luLWRsZ1wiIHBvc2l0aW9uPVwidG9wLWNlbnRlclwiPjwvcC10b2FzdD5cclxuICA8ZGl2IGlkPVwibG9naW4tZGxnLXdyYXBcIj5cclxuICAgIDxkaXYgaWQ9XCJsb2dpbi1kbGctaGVhZGVyXCI+XHJcbiAgICAgIDxkaXYgaWQ9XCJsb2dpbi1sb2dvXCIgY2xhc3M9XCJwLW1iLTJcIj48L2Rpdj5cclxuICAgICAgPGgzICpuZ0lmPVwiIXN1Y2Nlc3NcIj5Zb3VyIHNlc3Npb24gaXMgZXhwaXJlZCEgPGJyPiBQbGVhc2UgbG9naW4gYWdhaW4gdG8gY29udGludWUuPC9oMz5cclxuICAgICAgPGgzICpuZ0lmPVwic3VjY2Vzc1wiIHN0eWxlPVwiY29sb3I6Z3JlZW4gIWltcG9ydGFudDtcIj5Zb3UgaGF2ZWQgc3VjY2Vzc2Z1bGx5IGxvZ2dlZCBpbi48L2gzPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGlkPVwibG9naW4tZGxnLWNvbnRlbnRcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzdWNjZXNzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWRsZy1lbG1cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWlucHV0Z3JvdXBcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWlucHV0Z3JvdXAtYWRkb25cIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zLXJvdW5kXCI+cGVyc29uPC9pPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxpbnB1dCBkaXNhYmxlZCBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJVc2VybmFtZVwiIFt2YWx1ZV09XCJkZWNvZGVUb2tlbj8uZW1haWxcIiAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWRsZy1lbG1cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWlucHV0Z3JvdXBcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWlucHV0Z3JvdXAtYWRkb25cIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zLXJvdW5kXCI+bG9jazwvaT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8aW5wdXQgKGtleWRvd24uZW50ZXIpPVwiY2xpY2tMb2dpbigpXCIgcElucHV0VGV4dCB0eXBlPVwicGFzc3dvcmRcIiBwbGFjZWhvbGRlcj1cIlBhc3N3b3JkXCIgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiXHJcbiAgICAgICAgICAgICAgYXV0b2ZvY3VzIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZGxnLWVsbVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGxhYmVsPVwiTG9naW5cIiAoY2xpY2spPVwiY2xpY2tMb2dpbigpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFwYXNzd29yZCB8fCBsb2FkaW5nXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWRsZy1lbG1cIiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczogY2VudGVyO3VzZXItc2VsZWN0OiBub25lO1wiPlxyXG4gICAgICAgICAgPHNwYW4+Tm8sIEkgd2FudCB0byBsb2dpbiB3aXRoIGFub3RoZXIgdXNlci48L3NwYW4+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicC1idXR0b24tdGV4dFwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGxhYmVsPVwiTG9nb3V0XCIgKGNsaWNrKT1cImNsaWNrTG9nb3V0KClcIj48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdWNjZXNzXCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6MzVweDtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2stYW5pbWF0aW9uLXdyYXBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1tYWluLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2stY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWJhY2tncm91bmRcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCA2NSA1MVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcgMjVMMjcuMzA3NyA0NEw1OC41IDdcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5gLFxyXG4gIHNlbGVjdG9yOiBcImFwcC1sb2NhbGl6ZS1sb2dpbmRsZ1wiLFxyXG4gIHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9jYWxpemVMb2dpbmRsZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcmVhZG9ubHkgbWVzc2FnZUtleSA9IFwiJGxvZ2luLWRsZ1wiO1xyXG4gIHBhc3N3b3JkOiBhbnk7XHJcbiAgcmVhZG9ubHkgZGVjb2RlVG9rZW46IEp3dFBheWxvYWQgfCBudWxsO1xyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuICBzdWNjZXNzID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc7XHJcblxyXG4gIHByaXZhdGUgbG9nb3V0PzogKCkgPT4gYW55XHJcbiAgcHJpdmF0ZSBsb2dpblVybD86IHN0cmluZztcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkdDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRsZ1JlZjogRHluYW1pY0RpYWxvZ1JlZixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGxnQ29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0b2tlblNlcnZpY2U6IExvY2FsaXplVG9rZW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50XHJcbiAgKSB7XHJcbiAgICB0aGlzLmRlY29kZVRva2VuID0gdGhpcy50b2tlblNlcnZpY2UuZGVjb2RlUmVmcmVzaFRva2VuO1xyXG4gICAgdGhpcy5jb25maWcgPSBMb2NhbGl6ZVRva2VuLmNvbmZpZztcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kbGdDb25maWcuY2xvc2FibGUgPSBmYWxzZTtcclxuICAgIHRoaXMubG9nb3V0ID0gdGhpcy5kbGdDb25maWcuZGF0YT8ubG9nb3V0O1xyXG4gICAgdGhpcy5sb2dpblVybCA9IHRoaXMuZGxnQ29uZmlnLmRhdGE/LmxvZ2luVXJsO1xyXG5cclxuICAgIGlmICghdGhpcy5kZWNvZGVUb2tlbikge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAga2V5OiB0aGlzLm1lc3NhZ2VLZXksXHJcbiAgICAgICAgc2V2ZXJpdHk6IFwiZXJyb3JcIixcclxuICAgICAgICBzdW1tYXJ5OiBcIlRva2VuIGlzIGludmFsaWRcIixcclxuICAgICAgfSk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5sb2dvdXQ/LigpLCAyMDAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY2R0LmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNsaWNrTG9naW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNWYWxpZFBhc3N3b3JkKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICBrZXk6IHRoaXMubWVzc2FnZUtleSxcclxuICAgICAgICBzZXZlcml0eTogXCJlcnJvclwiLFxyXG4gICAgICAgIHN1bW1hcnk6IFwiUGFzc3dvcmQgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYXQgbGVhc3QgNiBjaGFyYWN0ZXJzXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBsb2dpblJlcyA9IGF3YWl0IHRoaXMubG9naW4oKTtcclxuICAgIGlmICghbG9naW5SZXM/LnN0YXR1cykge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAga2V5OiB0aGlzLm1lc3NhZ2VLZXksXHJcbiAgICAgICAgc2V2ZXJpdHk6IFwiZXJyb3JcIixcclxuICAgICAgICBzdW1tYXJ5OiBsb2dpblJlcy5tZXNzYWdlLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRva2VuU2VydmljZS5hY2Nlc3NUb2tlbiA9IGxvZ2luUmVzLnRva2Vucy5hY2Nlc3NUb2tlbjtcclxuICAgIExvY2FsaXplVG9rZW4uc3RvcmFnZS5zZXQodGhpcy5jb25maWcucmVmcmVzaFRva2VuTmFtZSwgbG9naW5SZXMudG9rZW5zLnJlZnJlc2hUb2tlbik7XHJcbiAgICB0aGlzLnN1Y2Nlc3MgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmRsZ1JlZi5jbG9zZSh0cnVlKSwgMjAwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvZ2luKCkge1xyXG4gICAgY29uc3QgcGF0aCA9IHRoaXMubG9naW5VcmwgPz8gXCIvYXBpL2F1dGgvbG9naW5cIjtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PlxyXG4gICAgICB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgICAucG9zdChwYXRoLCB7IHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkLnRyaW0oKSB9LCB7IGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpIH0pXHJcbiAgICAgICAgLnN1YnNjcmliZSh7IG5leHQ6IHJlc29sdmUsIGVycm9yOiByZWplY3QgfSlcclxuICAgICk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEhlYWRlcnMoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBbTG9jYWxpemVUb2tlbi5odHRwSGVhZGVycy5YX1JFRlJFU0hfVE9LRU5dOiBMb2NhbGl6ZVRva2VuLnN0b3JhZ2UuZ2V0KHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlbk5hbWUpISxcclxuICAgICAgW0xvY2FsaXplVG9rZW4uaHR0cEhlYWRlcnMuWF9URU5BTlRdOiBMb2NhbGl6ZVRva2VuLnN0b3JhZ2UuZ2V0KHRoaXMuY29uZmlnLnRlbmFudFRva2VuTmFtZSkgPz8gXCJcIixcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXQgaXNWYWxpZFBhc3N3b3JkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFzc3dvcmQgJiYgdGhpcy5wYXNzd29yZC50cmltKCkubGVuZ3RoID49IDY7XHJcbiAgfVxyXG5cclxuICBjbGlja0xvZ291dCA9ICgpID0+IHRoaXMubG9nb3V0Py4oKTtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from "@angular/core";
|
|
2
|
+
import { CommonModule } from "@angular/common";
|
|
3
|
+
import { LocalizeLogindlgComponent } from "./localize-logindlg.component";
|
|
4
|
+
import { ToastModule } from "primeng/toast";
|
|
5
|
+
import { InputTextModule } from "primeng/inputtext";
|
|
6
|
+
import { BrowserModule } from '@angular/platform-browser';
|
|
7
|
+
import { FormsModule } from '@angular/forms';
|
|
8
|
+
import { LocalizeLogindlgService } from "./localize-logindlg.service";
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class LocalizeLogindlgModule {
|
|
11
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeLogindlgModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
12
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: LocalizeLogindlgModule, declarations: [LocalizeLogindlgComponent], imports: [CommonModule,
|
|
13
|
+
ToastModule,
|
|
14
|
+
InputTextModule,
|
|
15
|
+
BrowserModule,
|
|
16
|
+
FormsModule], exports: [LocalizeLogindlgComponent] });
|
|
17
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeLogindlgModule, providers: [LocalizeLogindlgService], imports: [CommonModule,
|
|
18
|
+
ToastModule,
|
|
19
|
+
InputTextModule,
|
|
20
|
+
BrowserModule,
|
|
21
|
+
FormsModule] });
|
|
22
|
+
}
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeLogindlgModule, decorators: [{
|
|
24
|
+
type: NgModule,
|
|
25
|
+
args: [{
|
|
26
|
+
declarations: [LocalizeLogindlgComponent],
|
|
27
|
+
exports: [LocalizeLogindlgComponent],
|
|
28
|
+
imports: [
|
|
29
|
+
CommonModule,
|
|
30
|
+
ToastModule,
|
|
31
|
+
InputTextModule,
|
|
32
|
+
BrowserModule,
|
|
33
|
+
FormsModule,
|
|
34
|
+
],
|
|
35
|
+
providers: [LocalizeLogindlgService],
|
|
36
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
37
|
+
}]
|
|
38
|
+
}] });
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUtbG9naW5kbGcubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xvY2FsaXplLWxvZ2luZGxnL2xvY2FsaXplLWxvZ2luZGxnLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQWV0RSxNQUFNLE9BQU8sc0JBQXNCO3dHQUF0QixzQkFBc0I7eUdBQXRCLHNCQUFzQixpQkFabEIseUJBQXlCLGFBR3RDLFlBQVk7WUFDWixXQUFXO1lBQ1gsZUFBZTtZQUNmLGFBQWE7WUFDYixXQUFXLGFBTkgseUJBQXlCO3lHQVd4QixzQkFBc0IsYUFIdEIsQ0FBQyx1QkFBdUIsQ0FBQyxZQU5sQyxZQUFZO1lBQ1osV0FBVztZQUNYLGVBQWU7WUFDZixhQUFhO1lBQ2IsV0FBVzs7NEZBS0Ysc0JBQXNCO2tCQWJsQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHlCQUF5QixDQUFDO29CQUN6QyxPQUFPLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQztvQkFDcEMsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsV0FBVztxQkFDWjtvQkFDRCxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztvQkFDcEMsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ2xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgTG9jYWxpemVMb2dpbmRsZ0NvbXBvbmVudCB9IGZyb20gXCIuL2xvY2FsaXplLWxvZ2luZGxnLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVG9hc3RNb2R1bGUgfSBmcm9tIFwicHJpbWVuZy90b2FzdFwiO1xuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSBcInByaW1lbmcvaW5wdXR0ZXh0XCI7XG5pbXBvcnQgeyBCcm93c2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExvY2FsaXplTG9naW5kbGdTZXJ2aWNlIH0gZnJvbSBcIi4vbG9jYWxpemUtbG9naW5kbGcuc2VydmljZVwiO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtMb2NhbGl6ZUxvZ2luZGxnQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW0xvY2FsaXplTG9naW5kbGdDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRvYXN0TW9kdWxlLFxuICAgIElucHV0VGV4dE1vZHVsZSxcbiAgICBCcm93c2VyTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICBdLFxuICBwcm92aWRlcnM6IFtMb2NhbGl6ZUxvZ2luZGxnU2VydmljZV0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTG9jYWxpemVMb2dpbmRsZ01vZHVsZSB7IH1cbiJdfQ==
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { DialogService } from 'primeng/dynamicdialog';
|
|
3
|
+
import { LocalizeLogindlgComponent } from './localize-logindlg.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class LocalizeLogindlgService {
|
|
6
|
+
injector;
|
|
7
|
+
constructor(injector) {
|
|
8
|
+
this.injector = injector;
|
|
9
|
+
}
|
|
10
|
+
async openLoginDialog(config) {
|
|
11
|
+
config ??= {
|
|
12
|
+
header: 'Login',
|
|
13
|
+
height: '650px',
|
|
14
|
+
style: { 'max-width': '400px', width: '100%', 'height': '650px' },
|
|
15
|
+
};
|
|
16
|
+
const dialogService = this.injector.get(DialogService);
|
|
17
|
+
const dialog = dialogService.open(LocalizeLogindlgComponent, config);
|
|
18
|
+
await new Promise((resolve) => dialog.onClose.subscribe(res => {
|
|
19
|
+
if (res) {
|
|
20
|
+
resolve();
|
|
21
|
+
}
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeLogindlgService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
25
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeLogindlgService, providedIn: 'root' });
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeLogindlgService, decorators: [{
|
|
28
|
+
type: Injectable,
|
|
29
|
+
args: [{
|
|
30
|
+
providedIn: 'root'
|
|
31
|
+
}]
|
|
32
|
+
}], ctorParameters: () => [{ type: i0.Injector }] });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUtbG9naW5kbGcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sb2NhbGl6ZS1sb2dpbmRsZy9sb2NhbGl6ZS1sb2dpbmRsZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBdUIsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFLMUUsTUFBTSxPQUFPLHVCQUF1QjtJQUVMO0lBQTdCLFlBQTZCLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7SUFBSSxDQUFDO0lBRXBELEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBNEI7UUFDaEQsTUFBTSxLQUFLO1lBQ1QsTUFBTSxFQUFFLE9BQU87WUFDZixNQUFNLEVBQUUsT0FBTztZQUNmLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO1NBQ2xFLENBQUE7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXJFLE1BQU0sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNsQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM3QixJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNSLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO3dHQXBCVSx1QkFBdUI7NEdBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzs0RkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWcgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHsgTG9jYWxpemVMb2dpbmRsZ0NvbXBvbmVudCB9IGZyb20gJy4vbG9jYWxpemUtbG9naW5kbGcuY29tcG9uZW50JztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTG9jYWxpemVMb2dpbmRsZ1NlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7IH1cblxuICBhc3luYyBvcGVuTG9naW5EaWFsb2coY29uZmlnPzogRHluYW1pY0RpYWxvZ0NvbmZpZykge1xuICAgIGNvbmZpZyA/Pz0ge1xuICAgICAgaGVhZGVyOiAnTG9naW4nLFxuICAgICAgaGVpZ2h0OiAnNjUwcHgnLFxuICAgICAgc3R5bGU6IHsgJ21heC13aWR0aCc6ICc0MDBweCcsIHdpZHRoOiAnMTAwJScsICdoZWlnaHQnOiAnNjUwcHgnIH0sXG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KERpYWxvZ1NlcnZpY2UpO1xuICAgIGNvbnN0IGRpYWxvZyA9IGRpYWxvZ1NlcnZpY2Uub3BlbihMb2NhbGl6ZUxvZ2luZGxnQ29tcG9uZW50LCBjb25maWcpO1xuXG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+XG4gICAgICBkaWFsb2cub25DbG9zZS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './localize-logindlg.component';
|
|
2
|
+
export * from './localize-logindlg.module';
|
|
3
|
+
export * from './localize-logindlg.service';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sb2NhbGl6ZS1sb2dpbmRsZy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsK0JBQStCLENBQUE7QUFDN0MsY0FBYyw0QkFBNEIsQ0FBQTtBQUMxQyxjQUFjLDZCQUE2QixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9sb2NhbGl6ZS1sb2dpbmRsZy5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbG9jYWxpemUtbG9naW5kbGcubW9kdWxlJ1xyXG5leHBvcnQgKiBmcm9tICcuL2xvY2FsaXplLWxvZ2luZGxnLnNlcnZpY2UnIl19
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import { HttpHeaders } from "@angular/common/http";
|
|
3
|
+
import { LocalizeToken, waitFor, waitUntil } from "./localize.token";
|
|
4
|
+
import { BehaviorSubject } from "rxjs";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common/http";
|
|
7
|
+
import * as i2 from "./localize.token.service";
|
|
8
|
+
/**
|
|
9
|
+
* Http method options
|
|
10
|
+
*/
|
|
11
|
+
export var EMethod;
|
|
12
|
+
(function (EMethod) {
|
|
13
|
+
EMethod[EMethod["POST"] = 1] = "POST";
|
|
14
|
+
EMethod[EMethod["GET"] = 2] = "GET";
|
|
15
|
+
EMethod[EMethod["PUT"] = 3] = "PUT";
|
|
16
|
+
EMethod[EMethod["DELETE"] = 4] = "DELETE";
|
|
17
|
+
EMethod[EMethod["PATCH"] = 5] = "PATCH";
|
|
18
|
+
})(EMethod || (EMethod = {}));
|
|
19
|
+
export class LocalizeApiService {
|
|
20
|
+
httpClient;
|
|
21
|
+
localizeTokenService;
|
|
22
|
+
isRequestingSubject = new BehaviorSubject(false);
|
|
23
|
+
isResolvedStartupSubject = new BehaviorSubject(false);
|
|
24
|
+
get isRequesting() { return this.isRequestingSubject.value; }
|
|
25
|
+
get isResolvedStartup() { return this.isResolvedStartupSubject.value; }
|
|
26
|
+
apiConfigs = {};
|
|
27
|
+
constructor(httpClient, localizeTokenService) {
|
|
28
|
+
this.httpClient = httpClient;
|
|
29
|
+
this.localizeTokenService = localizeTokenService;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Initialize the API service.
|
|
33
|
+
* @param apiConfigs - The API configurations.
|
|
34
|
+
*/
|
|
35
|
+
init(apiConfigs) {
|
|
36
|
+
this.apiConfigs = apiConfigs;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A higher-order function that returns a curried function for making API requests.
|
|
40
|
+
*
|
|
41
|
+
* @param baseUrl - The base URL of the API.
|
|
42
|
+
* @returns A curried function that can be used to make API requests.
|
|
43
|
+
*/
|
|
44
|
+
func = (baseUrl) => (path, method = EMethod.GET, value = null, isFormData = false, headers) => this.base(baseUrl, path, method, value, isFormData, headers);
|
|
45
|
+
async base(baseUrl, path, method = EMethod.GET, value = null, isFormData = false, headers) {
|
|
46
|
+
await this.ifPromise(this.apiConfigs.onPrepareRequest);
|
|
47
|
+
const url = `${baseUrl.trim().replace(/\/?$/, '/')}${path.trim().replace(/^\//, '')}`;
|
|
48
|
+
const httpMethod = EMethod[method].toLowerCase();
|
|
49
|
+
const request = () => { return { body: value, headers: this.options(isFormData, headers) }; };
|
|
50
|
+
// Wait for previous request to complete
|
|
51
|
+
await this.toWaitForPreviousRequest();
|
|
52
|
+
// Process request
|
|
53
|
+
try {
|
|
54
|
+
return await this.processRequest(httpMethod, url, request());
|
|
55
|
+
}
|
|
56
|
+
// Handle unauthorized error if any
|
|
57
|
+
catch (error) {
|
|
58
|
+
if (error.status !== 401) {
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
return await this.onUnauthorizedError(httpMethod, url, request);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async onUnauthorizedError(httpMethod, url, request) {
|
|
65
|
+
await this.revokeToken();
|
|
66
|
+
if (!this.isResolvedStartup) {
|
|
67
|
+
return await this.processRequest(httpMethod, url, request());
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async toWaitForPreviousRequest() {
|
|
71
|
+
if (this.localizeTokenService.isRevokingToken) {
|
|
72
|
+
await waitUntil(() => !this.localizeTokenService.isRevokingToken);
|
|
73
|
+
}
|
|
74
|
+
// to wait for each request in 50ms, even if the request is not completed
|
|
75
|
+
await waitFor(50, this.isRequesting);
|
|
76
|
+
}
|
|
77
|
+
async processRequest(method, url, options) {
|
|
78
|
+
this.isRequestingSubject.next(true);
|
|
79
|
+
const result = await new Promise((resolve, reject) => this.httpClient.request(method, url, options).subscribe({ next: resolve, error: reject }));
|
|
80
|
+
this.isRequestingSubject.next(false);
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
async revokeToken(force = false) {
|
|
84
|
+
if (this.localizeTokenService.isRevokingToken && !force) {
|
|
85
|
+
await waitUntil(() => !this.localizeTokenService.isRevokingToken);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
this.localizeTokenService.isRevokingToken = true;
|
|
90
|
+
const reqUrl = LocalizeToken.config.revokeTokenUrl;
|
|
91
|
+
const reqHeaders = this.options().append(LocalizeToken.httpHeaders.X_REFRESH_TOKEN, `${this.localizeTokenService.refreshToken}`);
|
|
92
|
+
const revokeToken = await new Promise((resolve, reject) => this.httpClient.get(reqUrl, { headers: reqHeaders }).subscribe({ next: resolve, error: reject }));
|
|
93
|
+
if (revokeToken?.status) {
|
|
94
|
+
this.localizeTokenService.accessToken = revokeToken.message;
|
|
95
|
+
}
|
|
96
|
+
else if (!this.localizeTokenService.refreshToken) {
|
|
97
|
+
await this.ifPromise(this.apiConfigs.onAutoLogout);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
if (this.apiConfigs.onRevokeUnauthorized) {
|
|
101
|
+
await this.ifPromise(this.apiConfigs.onRevokeUnauthorized);
|
|
102
|
+
await this.revokeToken(true);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
this.localizeTokenService.isRevokingToken = false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/** default http request options */
|
|
111
|
+
options(isFormData = false, headers = {}) {
|
|
112
|
+
const defaultHeaders = { [LocalizeToken.httpHeaders.AUTHORIZATION]: `Bearer ${this.localizeTokenService.accessToken}`, };
|
|
113
|
+
if (LocalizeToken.config.needTenant) {
|
|
114
|
+
defaultHeaders[LocalizeToken.httpHeaders.X_TENANT] = `${this.localizeTokenService.tenantToken}`;
|
|
115
|
+
}
|
|
116
|
+
if (!isFormData) {
|
|
117
|
+
defaultHeaders[LocalizeToken.httpHeaders.CONTENT_TYPE] = 'application/json';
|
|
118
|
+
}
|
|
119
|
+
const filteredHeaders = Object.keys(defaultHeaders).filter(key => !Object.keys(headers).includes(key))
|
|
120
|
+
.reduce((acc, key) => ({ ...acc, [key]: defaultHeaders[key] }), {});
|
|
121
|
+
const mergedHeaders = { ...filteredHeaders, ...headers };
|
|
122
|
+
return new HttpHeaders(mergedHeaders);
|
|
123
|
+
}
|
|
124
|
+
async ifPromise(fn) {
|
|
125
|
+
if (!fn)
|
|
126
|
+
return;
|
|
127
|
+
return fn instanceof Promise ? await fn() : fn();
|
|
128
|
+
}
|
|
129
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeApiService, deps: [{ token: i1.HttpClient }, { token: i2.LocalizeTokenService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
130
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeApiService, providedIn: 'root' });
|
|
131
|
+
} //class
|
|
132
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeApiService, decorators: [{
|
|
133
|
+
type: Injectable,
|
|
134
|
+
args: [{
|
|
135
|
+
providedIn: 'root'
|
|
136
|
+
}]
|
|
137
|
+
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.LocalizeTokenService }] });
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUuYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbG9jYWxpemUtdG9rZW4vbG9jYWxpemUuYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQUV2Qzs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLE9BTVg7QUFORCxXQUFZLE9BQU87SUFDakIscUNBQVEsQ0FBQTtJQUNSLG1DQUFPLENBQUE7SUFDUCxtQ0FBTyxDQUFBO0lBQ1AseUNBQVUsQ0FBQTtJQUNWLHVDQUFTLENBQUE7QUFDWCxDQUFDLEVBTlcsT0FBTyxLQUFQLE9BQU8sUUFNbEI7QUFtQkQsTUFBTSxPQUFPLGtCQUFrQjtJQVNSO0lBQ0Y7SUFSVixtQkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUMxRCx3QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN4RSxJQUFJLFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdELElBQUksaUJBQWlCLEtBQUssT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUUvRCxVQUFVLEdBQXdCLEVBQUUsQ0FBQztJQUU3QyxZQUFxQixVQUFzQixFQUN4QixvQkFBMEM7UUFEeEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN4Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO0lBQ3pELENB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UUFFRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsY0FBYyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEdBQUcsa0JBQWtCLENBQUM7UUFDOUUsQ0FBQztRQUVELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNuRyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sYUFBYSxHQUFHLEVBQUUsR0FBRyxlQUFlLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUN6RCxPQUFPLElBQUksV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQWE7UUFDbkMsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPO1FBQ2hCLE9BQU8sRUFBRSxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkQsQ0FBQzt3R0FqSVUsa0JBQWtCOzRHQUFsQixrQkFBa0IsY0FGakIsTUFBTTtFQXFJbkIsT0FBTzs0RkFuSUssa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVRva2VuU2VydmljZSB9IGZyb20gXCIuL2xvY2FsaXplLnRva2VuLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgTG9jYWxpemVUb2tlbiwgd2FpdEZvciwgd2FpdFVudGlsIH0gZnJvbSBcIi4vbG9jYWxpemUudG9rZW5cIjtcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbi8qKlxyXG4gKiBIdHRwIG1ldGhvZCBvcHRpb25zXHJcbiAqL1xyXG5leHBvcnQgZW51bSBFTWV0aG9kIHtcclxuICBQT1NUID0gMSxcclxuICBHRVQgPSAyLFxyXG4gIFBVVCA9IDMsXHJcbiAgREVMRVRFID0gNCxcclxuICBQQVRDSCA9IDVcclxufVxyXG5cclxuaW50ZXJmYWNlIElMb2NhbGl6ZUFwaUNvbmZpZ3Mge1xyXG4gIG9uUHJlcGFyZVJlcXVlc3Q/OiAoKSA9PiBhbnk7XHJcbiAgLyoqXHJcbiAgICogIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiByZWZyZXNoIHRva2VuIGlzIG1pc3NpbmcgdGhlbiBwZXJmb3JtIHRoZSBhdXRvIGxvZ291dC5cclxuICAgKiBAcmV0dXJucyAtIFRoZSBiYXNlIFVSTCBvZiB0aGUgQVBJLlxyXG4gICAqL1xyXG4gIG9uQXV0b0xvZ291dD86ICgpID0+IGFueTtcclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gcmVxdWVzdCByZXZva2luZyB0b2tlbiB1bmF1dGhvcml6ZWQuXHJcbiAgICogQHJldHVybnMgLSBUaGUgbG9naW4gZGlhbG9nIHNlcnZpY2UuXHJcbiAgICovXHJcbiAgb25SZXZva2VVbmF1dGhvcml6ZWQ/OiAoKSA9PiBhbnk7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIExvY2FsaXplQXBpU2VydmljZSB7XHJcblxyXG4gIHJlYWRvbmx5IGlzUmVxdWVzdGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSBpc1Jlc29sdmVkU3RhcnR1cFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBnZXQgaXNSZXF1ZXN0aW5nKCkgeyByZXR1cm4gdGhpcy5pc1JlcXVlc3RpbmdTdWJqZWN0LnZhbHVlOyB9XHJcbiAgZ2V0IGlzUmVzb2x2ZWRTdGFydHVwKCkgeyByZXR1cm4gdGhpcy5pc1Jlc29sdmVkU3RhcnR1cFN1YmplY3QudmFsdWU7IH1cclxuXHJcbiAgcHJpdmF0ZSBhcGlDb25maWdzOiBJTG9jYWxpemVBcGlDb25maWdzID0ge307XHJcblxyXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsaXplVG9rZW5TZXJ2aWNlOiBMb2NhbGl6ZVRva2VuU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIEFQSSBzZXJ2aWNlLlxyXG4gICAqIEBwYXJhbSBhcGlDb25maWdzIC0gVGhlIEFQSSBjb25maWd1cmF0aW9ucy5cclxuICAgKi9cclxuICBpbml0KGFwaUNvbmZpZ3M6IElMb2NhbGl6ZUFwaUNvbmZpZ3MpIHtcclxuICAgIHRoaXMuYXBpQ29uZmlncyA9IGFwaUNvbmZpZ3M7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY3VycmllZCBmdW5jdGlvbiBmb3IgbWFraW5nIEFQSSByZXF1ZXN0cy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBiYXNlVXJsIC0gVGhlIGJhc2UgVVJMIG9mIHRoZSBBUEkuXHJcbiAgICogQHJldHVybnMgQSBjdXJyaWVkIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFrZSBBUEkgcmVxdWVzdHMuXHJcbiAgICovXHJcbiAgZnVuYyA9IChiYXNlVXJsOiBzdHJpbmcpID0+XHJcbiAgICAocGF0aDogc3RyaW5nLCBtZXRob2Q6IEVNZXRob2QgPSBFTWV0aG9kLkdFVCwgdmFsdWU6IGFueSA9IG51bGwsIGlzRm9ybURhdGE6IGJvb2xlYW4gPSBmYWxzZSwgaGVhZGVycz86IHsgW3g6IHN0cmluZ106IHN0cmluZyB9KSA9PlxyXG4gICAgICB0aGlzLmJhc2UoYmFzZVVybCwgcGF0aCwgbWV0aG9kLCB2YWx1ZSwgaXNGb3JtRGF0YSwgaGVhZGVycylcclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBiYXNlKGJhc2VVcmw6IHN0cmluZyxcclxuICAgIHBhdGg6IHN0cmluZyxcclxuICAgIG1ldGhvZDogRU1ldGhvZCA9IEVNZXRob2QuR0VULFxyXG4gICAgdmFsdWU6IGFueSA9IG51bGwsXHJcbiAgICBpc0Zvcm1EYXRhOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICBoZWFkZXJzPzogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0pIHtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmlmUHJvbWlzZSh0aGlzLmFwaUNvbmZpZ3Mub25QcmVwYXJlUmVxdWVzdCk7XHJcblxyXG4gICAgY29uc3QgdXJsID0gYCR7YmFzZVVybC50cmltKCkucmVwbGFjZSgvXFwvPyQvLCAnLycpfSR7cGF0aC50cmltKCkucmVwbGFjZSgvXlxcLy8sICcnKX1gO1xyXG4gICAgY29uc3QgaHR0cE1ldGhvZCA9IEVNZXRob2RbbWV0aG9kXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgcmVxdWVzdCA9ICgpID0+IHsgcmV0dXJuIHsgYm9keTogdmFsdWUsIGhlYWRlcnM6IHRoaXMub3B0aW9ucyhpc0Zvcm1EYXRhLCBoZWFkZXJzKSB9IH07XHJcblxyXG4gICAgLy8gV2FpdCBmb3IgcHJldmlvdXMgcmVxdWVzdCB0byBjb21wbGV0ZVxyXG4gICAgYXdhaXQgdGhpcy50b1dhaXRGb3JQcmV2aW91c1JlcXVlc3QoKTtcclxuXHJcbiAgICAvLyBQcm9jZXNzIHJlcXVlc3RcclxuICAgIHRyeSB7IHJldHVybiBhd2FpdCB0aGlzLnByb2Nlc3NSZXF1ZXN0KGh0dHBNZXRob2QsIHVybCwgcmVxdWVzdCgpKSB9XHJcbiAgICAvLyBIYW5kbGUgdW5hdXRob3JpemVkIGVycm9yIGlmIGFueVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5zdGF0dXMgIT09IDQwMSkgeyB0aHJvdyBlcnJvcjsgfVxyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5vblVuYXV0aG9yaXplZEVycm9yKGh0dHBNZXRob2QsIHVybCwgcmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG9uVW5hdXRob3JpemVkRXJyb3IoaHR0cE1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZywgcmVxdWVzdDogRnVuY3Rpb24pIHtcclxuICAgIGF3YWl0IHRoaXMucmV2b2tlVG9rZW4oKTtcclxuICAgIGlmICghdGhpcy5pc1Jlc29sdmVkU3RhcnR1cCkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9jZXNzUmVxdWVzdChodHRwTWV0aG9kLCB1cmwsIHJlcXVlc3QoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHRvV2FpdEZvclByZXZpb3VzUmVxdWVzdCgpIHtcclxuICAgIGlmICh0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLmlzUmV2b2tpbmdUb2tlbikge1xyXG4gICAgICBhd2FpdCB3YWl0VW50aWwoKCkgPT4gIXRoaXMubG9jYWxpemVUb2tlblNlcnZpY2UuaXNSZXZva2luZ1Rva2VuKTtcclxuICAgIH1cclxuICAgIC8vIHRvIHdhaXQgZm9yIGVhY2ggcmVxdWVzdCBpbiA1MG1zLCBldmVuIGlmIHRoZSByZXF1ZXN0IGlzIG5vdCBjb21wbGV0ZWRcclxuICAgIGF3YWl0IHdhaXRGb3IoNTAsIHRoaXMuaXNSZXF1ZXN0aW5nKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1JlcXVlc3QobWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgdGhpcy5pc1JlcXVlc3RpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxyXG4gICAgICB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxhbnk+KG1ldGhvZCwgdXJsLCBvcHRpb25zKS5zdWJzY3JpYmUoeyBuZXh0OiByZXNvbHZlLCBlcnJvcjogcmVqZWN0IH0pKVxyXG4gICAgdGhpcy5pc1JlcXVlc3RpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmV2b2tlVG9rZW4oZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgIGlmICh0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLmlzUmV2b2tpbmdUb2tlbiAmJiAhZm9yY2UpIHtcclxuICAgICAgYXdhaXQgd2FpdFVudGlsKCgpID0+ICF0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLmlzUmV2b2tpbmdUb2tlbilcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMubG9jYWxpemVUb2tlblNlcnZpY2UuaXNSZXZva2luZ1Rva2VuID0gdHJ1ZTtcclxuICAgICAgY29uc3QgcmVxVXJsID0gTG9jYWxpemVUb2tlbi5jb25maWcucmV2b2tlVG9rZW5Vcmw7XHJcbiAgICAgIGNvbnN0IHJlcUhlYWRlcnMgPSB0aGlzLm9wdGlvbnMoKS5hcHBlbmQoTG9jYWxpemVUb2tlbi5odHRwSGVhZGVycy5YX1JFRlJFU0hfVE9LRU4sIGAke3RoaXMubG9jYWxpemVUb2tlblNlcnZpY2UucmVmcmVzaFRva2VufWApO1xyXG4gICAgICBjb25zdCByZXZva2VUb2tlbjogYW55ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cclxuICAgICAgICB0aGlzLmh0dHBDbGllbnQuZ2V0PGFueT4ocmVxVXJsISwgeyBoZWFkZXJzOiByZXFIZWFkZXJzIH0pLnN1YnNjcmliZSh7IG5leHQ6IHJlc29sdmUsIGVycm9yOiByZWplY3QgfSkpXHJcblxyXG4gICAgICBpZiAocmV2b2tlVG9rZW4/LnN0YXR1cykge1xyXG4gICAgICAgIHRoaXMubG9jYWxpemVUb2tlblNlcnZpY2UuYWNjZXNzVG9rZW4gPSByZXZva2VUb2tlbi5tZXNzYWdlO1xyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLnJlZnJlc2hUb2tlbikge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaWZQcm9taXNlKHRoaXMuYXBpQ29uZmlncy5vbkF1dG9Mb2dvdXQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXBpQ29uZmlncy5vblJldm9rZVVuYXV0aG9yaXplZCkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5pZlByb21pc2UodGhpcy5hcGlDb25maWdzLm9uUmV2b2tlVW5hdXRob3JpemVkKTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMucmV2b2tlVG9rZW4odHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLmlzUmV2b2tpbmdUb2tlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIGRlZmF1bHQgaHR0cCByZXF1ZXN0IG9wdGlvbnMgKi9cclxuICBwcml2YXRlIG9wdGlvbnMoaXNGb3JtRGF0YTogYm9vbGVhbiA9IGZhbHNlLCBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge30pOiBIdHRwSGVhZGVycyB7XHJcbiAgICBjb25zdCBkZWZhdWx0SGVhZGVycyA9IHsgW0xvY2FsaXplVG9rZW4uaHR0cEhlYWRlcnMuQVVUSE9SSVpBVElPTl06IGBCZWFyZXIgJHt0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLmFjY2Vzc1Rva2VufWAsIH07XHJcbiAgICBpZiAoTG9jYWxpemVUb2tlbi5jb25maWcubmVlZFRlbmFudCkge1xyXG4gICAgICBkZWZhdWx0SGVhZGVyc1tMb2NhbGl6ZVRva2VuLmh0dHBIZWFkZXJzLlhfVEVOQU5UXSA9IGAke3RoaXMubG9jYWxpemVUb2tlblNlcnZpY2UudGVuYW50VG9rZW59YDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzRm9ybURhdGEpIHtcclxuICAgICAgZGVmYXVsdEhlYWRlcnNbTG9jYWxpemVUb2tlbi5odHRwSGVhZGVycy5DT05URU5UX1RZUEVdID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZpbHRlcmVkSGVhZGVycyA9IE9iamVjdC5rZXlzKGRlZmF1bHRIZWFkZXJzKS5maWx0ZXIoa2V5ID0+ICFPYmplY3Qua2V5cyhoZWFkZXJzKS5pbmNsdWRlcyhrZXkpKVxyXG4gICAgICAucmVkdWNlKChhY2MsIGtleSkgPT4gKHsgLi4uYWNjLCBba2V5XTogZGVmYXVsdEhlYWRlcnNba2V5XSB9KSwge30pXHJcbiAgICBjb25zdCBtZXJnZWRIZWFkZXJzID0geyAuLi5maWx0ZXJlZEhlYWRlcnMsIC4uLmhlYWRlcnMgfTtcclxuICAgIHJldHVybiBuZXcgSHR0cEhlYWRlcnMobWVyZ2VkSGVhZGVycyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGlmUHJvbWlzZShmbj86IEZ1bmN0aW9uKSB7XHJcbiAgICBpZiAoIWZuKSByZXR1cm47XHJcbiAgICByZXR1cm4gZm4gaW5zdGFuY2VvZiBQcm9taXNlID8gYXdhaXQgZm4oKSA6IGZuKCk7XHJcbiAgfVxyXG5cclxufS8vY2xhc3NcclxuIl19
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { LocalizeTokenStorageHelper } from "./localize.token.storage";
|
|
2
|
+
export class LocalizeToken {
|
|
3
|
+
static config = {
|
|
4
|
+
mainDomain: location.hostname,
|
|
5
|
+
authTokenName: 'auth-token',
|
|
6
|
+
tenantTokenName: 'tenant-token',
|
|
7
|
+
refreshTokenName: 'refresh-token',
|
|
8
|
+
needTenant: false,
|
|
9
|
+
isProduction: false,
|
|
10
|
+
};
|
|
11
|
+
static cookieOptions = {
|
|
12
|
+
path: '/',
|
|
13
|
+
domain: LocalizeToken.config.mainDomain,
|
|
14
|
+
secure: true,
|
|
15
|
+
// samesite: SameSiteType.strict,
|
|
16
|
+
expires: 1
|
|
17
|
+
};
|
|
18
|
+
static storage = new LocalizeTokenStorageHelper();
|
|
19
|
+
static httpHeaders = {
|
|
20
|
+
AUTHORIZATION: 'Authorization',
|
|
21
|
+
X_TENANT: 'X-Tenant',
|
|
22
|
+
X_REFRESH_TOKEN: 'X-RefreshToken',
|
|
23
|
+
CONTENT_TYPE: 'Content-Type',
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Waits for a specified amount of time.
|
|
28
|
+
* @param milliseconds - The milliseconds to wait.
|
|
29
|
+
* @param when - The condition to wait for. Default is true.
|
|
30
|
+
* @returns - Promise<void>
|
|
31
|
+
*/
|
|
32
|
+
export async function waitFor(milliseconds, when = true) {
|
|
33
|
+
if (!when)
|
|
34
|
+
return;
|
|
35
|
+
await new Promise(resolve => setTimeout(resolve, milliseconds));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Waits until the condition is met.
|
|
39
|
+
* @param when - The condition to wait for.
|
|
40
|
+
* @param intervalNumber - The interval number in milliseconds to check the condition. Default is 50.
|
|
41
|
+
*/
|
|
42
|
+
export async function waitUntil(when, intervalNumber = 50) {
|
|
43
|
+
await new Promise(resolve => {
|
|
44
|
+
const interval = setInterval(async () => {
|
|
45
|
+
const cond = when();
|
|
46
|
+
const result = cond instanceof Promise ? await cond : cond;
|
|
47
|
+
if (result) {
|
|
48
|
+
clearInterval(interval);
|
|
49
|
+
resolve(true);
|
|
50
|
+
}
|
|
51
|
+
}, intervalNumber);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbG9jYWxpemUtdG9rZW4vbG9jYWxpemUudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQiwwQkFBMEIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBVXRGLE1BQU0sT0FBTyxhQUFhO0lBQ3RCLE1BQU0sQ0FBQyxNQUFNLEdBQXlCO1FBQ2xDLFVBQVUsRUFBRSxRQUFRLENBQUMsUUFBUTtRQUM3QixhQUFhLEVBQUUsWUFBWTtRQUMzQixlQUFlLEVBQUUsY0FBYztRQUMvQixnQkFBZ0IsRUFBRSxlQUFlO1FBQ2pDLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLFlBQVksRUFBRSxLQUFLO0tBQ3RCLENBQUE7SUFFRCxNQUFNLENBQUMsYUFBYSxHQUFtQjtRQUNuQyxJQUFJLEVBQUUsR0FBRztRQUNULE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVU7UUFDdkMsTUFBTSxFQUFFLElBQUk7UUFDWixpQ0FBaUM7UUFDakMsT0FBTyxFQUFFLENBQUM7S0FDYixDQUFBO0lBQ0QsTUFBTSxDQUFVLE9BQU8sR0FBRyxJQUFJLDBCQUEwQixFQUFFLENBQUM7SUFFM0QsTUFBTSxDQUFVLFdBQVcsR0FBRztRQUMxQixhQUFhLEVBQUUsZUFBZTtRQUM5QixRQUFRLEVBQUUsVUFBVTtRQUNwQixlQUFlLEVBQUUsZ0JBQWdCO1FBQ2pDLFlBQVksRUFBRSxjQUFjO0tBQzdCLENBQUE7O0FBSVA7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sQ0FBQyxZQUFvQixFQUFFLE9BQWdCLElBQUk7SUFDcEUsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPO0lBQ2xCLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFNBQVMsQ0FBQyxJQUFlLEVBQUUsaUJBQXlCLEVBQUU7SUFDMUUsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMxQixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDcEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMzRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hCLENBQUM7UUFDSCxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUNvb2tpZU9wdGlvbnMsIExvY2FsaXplVG9rZW5TdG9yYWdlSGVscGVyIH0gZnJvbSBcIi4vbG9jYWxpemUudG9rZW4uc3RvcmFnZVwiO1xyXG5pbnRlcmZhY2UgSUxvY2FsaXplVG9rZW5Db25maWcge1xyXG4gICAgbWFpbkRvbWFpbjogc3RyaW5nO1xyXG4gICAgYXV0aFRva2VuTmFtZTogc3RyaW5nO1xyXG4gICAgdGVuYW50VG9rZW5OYW1lOiBzdHJpbmc7XHJcbiAgICByZWZyZXNoVG9rZW5OYW1lOiBzdHJpbmc7XHJcbiAgICBuZWVkVGVuYW50OiBib29sZWFuO1xyXG4gICAgaXNQcm9kdWN0aW9uOiBib29sZWFuO1xyXG4gICAgcmV2b2tlVG9rZW5Vcmw/OiBzdHJpbmc7XHJcbn1cclxuZXhwb3J0IGNsYXNzIExvY2FsaXplVG9rZW4ge1xyXG4gICAgc3RhdGljIGNvbmZpZzogSUxvY2FsaXplVG9rZW5Db25maWcgPSB7XHJcbiAgICAgICAgbWFpbkRvbWFpbjogbG9jYXRpb24uaG9zdG5hbWUsXHJcbiAgICAgICAgYXV0aFRva2VuTmFtZTogJ2F1dGgtdG9rZW4nLFxyXG4gICAgICAgIHRlbmFudFRva2VuTmFtZTogJ3RlbmFudC10b2tlbicsXHJcbiAgICAgICAgcmVmcmVzaFRva2VuTmFtZTogJ3JlZnJlc2gtdG9rZW4nLFxyXG4gICAgICAgIG5lZWRUZW5hbnQ6IGZhbHNlLFxyXG4gICAgICAgIGlzUHJvZHVjdGlvbjogZmFsc2UsXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNvb2tpZU9wdGlvbnM6IElDb29raWVPcHRpb25zID0ge1xyXG4gICAgICAgIHBhdGg6ICcvJyxcclxuICAgICAgICBkb21haW46IExvY2FsaXplVG9rZW4uY29uZmlnLm1haW5Eb21haW4sXHJcbiAgICAgICAgc2VjdXJlOiB0cnVlLFxyXG4gICAgICAgIC8vIHNhbWVzaXRlOiBTYW1lU2l0ZVR5cGUuc3RyaWN0LFxyXG4gICAgICAgIGV4cGlyZXM6IDFcclxuICAgIH1cclxuICAgIHN0YXRpYyByZWFkb25seSBzdG9yYWdlID0gbmV3IExvY2FsaXplVG9rZW5TdG9yYWdlSGVscGVyKCk7XHJcblxyXG4gICAgc3RhdGljIHJlYWRvbmx5IGh0dHBIZWFkZXJzID0ge1xyXG4gICAgICAgIEFVVEhPUklaQVRJT046ICdBdXRob3JpemF0aW9uJyxcclxuICAgICAgICBYX1RFTkFOVDogJ1gtVGVuYW50JyxcclxuICAgICAgICBYX1JFRlJFU0hfVE9LRU46ICdYLVJlZnJlc2hUb2tlbicsXHJcbiAgICAgICAgQ09OVEVOVF9UWVBFOiAnQ29udGVudC1UeXBlJyxcclxuICAgICAgfVxyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqICBXYWl0cyBmb3IgYSBzcGVjaWZpZWQgYW1vdW50IG9mIHRpbWUuXHJcbiAqIEBwYXJhbSBtaWxsaXNlY29uZHMgIC0gVGhlIG1pbGxpc2Vjb25kcyB0byB3YWl0LlxyXG4gKiBAcGFyYW0gd2hlbiAgLSBUaGUgY29uZGl0aW9uIHRvIHdhaXQgZm9yLiBEZWZhdWx0IGlzIHRydWUuXHJcbiAqIEByZXR1cm5zICAtIFByb21pc2U8dm9pZD5cclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yKG1pbGxpc2Vjb25kczogbnVtYmVyLCB3aGVuOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgaWYgKCF3aGVuKSByZXR1cm47XHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKSk7XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqICBXYWl0cyB1bnRpbCB0aGUgY29uZGl0aW9uIGlzIG1ldC5cclxuICAgKiBAcGFyYW0gd2hlbiAgLSBUaGUgY29uZGl0aW9uIHRvIHdhaXQgZm9yLlxyXG4gICAqIEBwYXJhbSBpbnRlcnZhbE51bWJlciAgLSBUaGUgaW50ZXJ2YWwgbnVtYmVyIGluIG1pbGxpc2Vjb25kcyB0byBjaGVjayB0aGUgY29uZGl0aW9uLiBEZWZhdWx0IGlzIDUwLlxyXG4gICAqL1xyXG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0VW50aWwod2hlbjogKCkgPT4gYW55LCBpbnRlcnZhbE51bWJlcjogbnVtYmVyID0gNTApIHtcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcclxuICAgICAgICBjb25zdCBjb25kID0gd2hlbigpO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbmQgaW5zdGFuY2VvZiBQcm9taXNlID8gYXdhaXQgY29uZCA6IGNvbmQ7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XHJcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgaW50ZXJ2YWxOdW1iZXIpO1xyXG4gICAgfSk7XHJcbiAgfSJdfQ==
|
|
@@ -19,4 +19,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
|
|
|
19
19
|
],
|
|
20
20
|
}]
|
|
21
21
|
}] });
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUudG9rZW4ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xvY2FsaXplLXRva2VuL2xvY2FsaXplLnRva2VuLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQVE1RCxNQUFNLE9BQU8sbUJBQW1CO3dHQUFuQixtQkFBbUI7eUdBQW5CLG1CQUFtQjt5R0FBbkIsbUJBQW1CLGFBTGpCO1lBQ1Asb0JBQW9CO1lBQ3BCLGtCQUFrQjtTQUNyQjs7NEZBRVEsbUJBQW1CO2tCQU4vQixRQUFRO21CQUFDO29CQUNOLFNBQVMsRUFBRTt3QkFDUCxvQkFBb0I7d0JBQ3BCLGtCQUFrQjtxQkFDckI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVRva2VuU2VydmljZSB9IGZyb20gJy4vbG9jYWxpemUudG9rZW4uc2VydmljZSc7XHJcbmltcG9ydCB7IExvY2FsaXplQXBpU2VydmljZSB9IGZyb20gJy4vbG9jYWxpemUuYXBpLnNlcnZpY2UnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIExvY2FsaXplVG9rZW5TZXJ2aWNlLFxyXG4gICAgICAgIExvY2FsaXplQXBpU2VydmljZVxyXG4gICAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExvY2FsaXplVG9rZW5Nb2R1bGUgeyB9Il19
|