@alauda-fe/common 1.4.38 → 1.4.39-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/array-form-table/form/component.d.ts +1 -1
- package/authorization/authorization.d.ts +5 -8
- package/authorization/constants.d.ts +1 -0
- package/authorization/state.service.d.ts +1 -2
- package/authorization/token-client.d.ts +2 -6
- package/core/abstract/base-nested-form-control.d.ts +1 -1
- package/core/directives/scroll-to-first-invalid.directive.d.ts +1 -1
- package/core/services/feature-gate.service.d.ts +1 -1
- package/core/utils/version.d.ts +1 -1
- package/esm2022/authorization/authorization.mjs +62 -61
- package/esm2022/authorization/constants.mjs +2 -1
- package/esm2022/authorization/interceptor.service.mjs +5 -9
- package/esm2022/authorization/state.service.mjs +12 -14
- package/esm2022/authorization/token-client.mjs +18 -55
- package/exec/module.d.ts +1 -1
- package/form/validators/async-function-validator.directive.d.ts +1 -1
- package/k8s-resource-list/k8s-resource-paged-list.d.ts +2 -2
- package/package.json +1 -1
- package/table/helper.d.ts +1 -1
- package/table/module.d.ts +1 -1
- package/view-chart/view-chart.component.d.ts +1 -1
|
@@ -83,7 +83,7 @@ export declare class ArrayFormTableComponent implements OnDestroy {
|
|
|
83
83
|
addDisabled: boolean | '';
|
|
84
84
|
actionColumnDivider: boolean | '';
|
|
85
85
|
showZeroState: boolean;
|
|
86
|
-
get formDirective():
|
|
86
|
+
get formDirective(): FormGroupDirective | NgForm;
|
|
87
87
|
/**
|
|
88
88
|
* 自定义是否展示错误内容
|
|
89
89
|
* 例如 control 是 FormGroup,只有在内部子 control 错误时才需要展示错误内容
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import type { AccountInfo, TokenResponse } from './token-client';
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
info
|
|
5
|
-
}
|
|
6
|
-
export declare function fetchAuthorizationState(): Promise<AuthorizationState>;
|
|
7
|
-
export declare function getAuthorizationState(): AuthorizationState;
|
|
8
|
-
export declare function initAuthorizationState(state: AuthorizationState): void;
|
|
2
|
+
export declare function getCachedAccountInfo(): AccountInfo;
|
|
3
|
+
export declare function fetchAuthorizationState(): Promise<{
|
|
4
|
+
info: AccountInfo;
|
|
5
|
+
}>;
|
|
9
6
|
export declare function attachAuthorizationHeader(): {
|
|
10
7
|
Authorization?: string;
|
|
11
8
|
};
|
|
@@ -14,5 +11,5 @@ export declare function refreshAuthorizationToken(): Promise<TokenResponse>;
|
|
|
14
11
|
export declare function logoutAudit(): Promise<{
|
|
15
12
|
logout_redirect_url?: string;
|
|
16
13
|
}>;
|
|
17
|
-
export declare function logout(returnCurrentPage?: boolean | string):
|
|
14
|
+
export declare function logout(returnCurrentPage?: boolean | string): Promise<never>;
|
|
18
15
|
export declare function redirectSSOEntry(entry: string): string;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export declare const STORAGE_TYPE_KEY = "token_storage";
|
|
2
2
|
export declare const CODE_KEY = "code";
|
|
3
|
+
export declare const STATE_KEY = "state";
|
|
3
4
|
export declare const ID_TOKEN_KEY = "id_token";
|
|
4
5
|
export declare const LOADING_CACHE = 15000;
|
|
5
6
|
export declare const HEARTBEAT_POLLING = 15000;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { logout } from './authorization';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export declare class AuthorizationStateService {
|
|
4
|
-
|
|
5
|
-
payloadSnapshot: import("@alauda-fe/common").AccountInfo;
|
|
4
|
+
get payloadSnapshot(): import("@alauda-fe/common").AccountInfo;
|
|
6
5
|
logout: typeof logout;
|
|
7
6
|
constructor();
|
|
8
7
|
logoutWithAudit(): void;
|
|
@@ -22,9 +22,6 @@ export interface TokenResponse {
|
|
|
22
22
|
issued_at: string;
|
|
23
23
|
id_token?: string;
|
|
24
24
|
}
|
|
25
|
-
export declare function resetAuthRuntimeCache(): void;
|
|
26
|
-
export declare function getCachedAccountInfo(): AccountInfo;
|
|
27
|
-
export declare function setCachedAccountInfo(info: AccountInfo | null | undefined): void;
|
|
28
25
|
export declare function createAuthorizedFetchInit(init?: RequestInit): {
|
|
29
26
|
credentials: RequestCredentials;
|
|
30
27
|
headers: Headers;
|
|
@@ -43,6 +40,5 @@ export declare function createAuthorizedFetchInit(init?: RequestInit): {
|
|
|
43
40
|
};
|
|
44
41
|
export declare function fetchTokenApi(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
|
|
45
42
|
export declare function fetchAuthorizedResource(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
|
|
46
|
-
export declare function requestTokenInfo(
|
|
47
|
-
export declare function requestTokenRefresh(): Promise<TokenResponse>;
|
|
48
|
-
export declare function resolveTokenInfoWithRefresh(): Promise<AccountInfo>;
|
|
43
|
+
export declare function requestTokenInfo(): Promise<AccountInfo | null>;
|
|
44
|
+
export declare function requestTokenRefresh(): Promise<TokenResponse | null>;
|
|
@@ -21,7 +21,7 @@ export declare class BaseNestedFormControl<V, M = V> implements AfterViewInit, O
|
|
|
21
21
|
protected asyncValidator: boolean;
|
|
22
22
|
protected cdr: ChangeDetectorRef;
|
|
23
23
|
protected destroy$$: Subject<void>;
|
|
24
|
-
protected hostForm:
|
|
24
|
+
protected hostForm: FormGroupDirective | NgForm;
|
|
25
25
|
constructor();
|
|
26
26
|
ngAfterViewInit(): void;
|
|
27
27
|
ngOnDestroy(): void;
|
|
@@ -13,7 +13,7 @@ export declare class ScrollToFirstInvalidDirective {
|
|
|
13
13
|
private readonly cdkScrollable;
|
|
14
14
|
labelOffset: number;
|
|
15
15
|
aclScrollToFirstInvalid: boolean | '';
|
|
16
|
-
get containerEl():
|
|
16
|
+
get containerEl(): (Window & typeof globalThis) | HTMLElement;
|
|
17
17
|
onSubmit(): void;
|
|
18
18
|
constructor(elRef: ElementRef<HTMLElement>, controlContainer: ControlContainer, cdkScrollable: CdkScrollable);
|
|
19
19
|
scrollToFirstInvalid(): void;
|
|
@@ -9,7 +9,7 @@ export declare class FeatureGateService {
|
|
|
9
9
|
private readonly http;
|
|
10
10
|
private readonly cacheStore;
|
|
11
11
|
constructor(http: HttpClient);
|
|
12
|
-
loadState(cluster?: string): Observable<"
|
|
12
|
+
loadState(cluster?: string): Observable<"loading" | "loaded" | "loadFailed">;
|
|
13
13
|
/**
|
|
14
14
|
* check gate status
|
|
15
15
|
* @param gate - specified feature gate
|
package/core/utils/version.d.ts
CHANGED
|
@@ -36,4 +36,4 @@ export declare const compareVersion: {
|
|
|
36
36
|
gte: (v1: string, v2: string) => boolean;
|
|
37
37
|
cmp: (v1: string, v2: string, operator: CompareOperator) => boolean;
|
|
38
38
|
};
|
|
39
|
-
export declare const compareMinorVersion: (v1: string, v2: string) =>
|
|
39
|
+
export declare const compareMinorVersion: (v1: string, v2: string) => 1 | 0 | -1;
|
|
@@ -1,36 +1,23 @@
|
|
|
1
|
-
import { getTopWindow, NOT_NOTIFY_ON_ERROR_HEADERS, } from '../core/public-api';
|
|
1
|
+
import { getTopWindow, noop, NOT_NOTIFY_ON_ERROR_HEADERS, } from '../core/public-api';
|
|
2
2
|
import { getInitUrl, recordInitUrl } from './app-init-url';
|
|
3
|
-
import { CALLBACK_API, CODE_KEY, EXTERNAL_REDIRECT_API, ID_TOKEN_KEY, LOGIN_API, LOGOUT_API, REDIRECT_URIS, } from './constants';
|
|
3
|
+
import { CALLBACK_API, CODE_KEY, STATE_KEY, EXTERNAL_REDIRECT_API, ID_TOKEN_KEY, LOGIN_API, LOGOUT_API, REDIRECT_URIS, } from './constants';
|
|
4
4
|
import { cleanStorageToken, readStorageToken, refreshStorageAliveRecord, writeStorageToken, } from './storage-token';
|
|
5
|
-
import { fetchTokenApi, requestTokenInfo, requestTokenRefresh,
|
|
6
|
-
let
|
|
7
|
-
let checkTokenPromise
|
|
8
|
-
let refreshTokenPromise
|
|
5
|
+
import { fetchTokenApi, requestTokenInfo, requestTokenRefresh, } from './token-client';
|
|
6
|
+
let ACCOUNT_INFO;
|
|
7
|
+
let checkTokenPromise;
|
|
8
|
+
let refreshTokenPromise;
|
|
9
|
+
export function getCachedAccountInfo() {
|
|
10
|
+
return ACCOUNT_INFO;
|
|
11
|
+
}
|
|
9
12
|
export async function fetchAuthorizationState() {
|
|
10
13
|
recordInitUrl();
|
|
11
|
-
|
|
12
|
-
initAuthorizationState({ authUrl });
|
|
13
|
-
await getExistingToken(csrfState);
|
|
14
|
+
await getExistingToken();
|
|
14
15
|
const info = await resolveTokenInfoWithRefresh();
|
|
15
16
|
if (!info) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
AUTHORIZATION_STATE.info = info;
|
|
19
|
-
return AUTHORIZATION_STATE;
|
|
20
|
-
}
|
|
21
|
-
export function getAuthorizationState() {
|
|
22
|
-
if (AUTHORIZATION_STATE === undefined) {
|
|
23
|
-
throw new Error('AuthorizationState have not been initialized');
|
|
24
|
-
}
|
|
25
|
-
return AUTHORIZATION_STATE;
|
|
26
|
-
}
|
|
27
|
-
export function initAuthorizationState(state) {
|
|
28
|
-
if (AUTHORIZATION_STATE !== undefined &&
|
|
29
|
-
// @ts-expect-error -- webpack specific
|
|
30
|
-
!module.hot) {
|
|
31
|
-
throw new Error('authorizationState have been initialized');
|
|
17
|
+
await logout(true);
|
|
18
|
+
return new Promise(() => undefined);
|
|
32
19
|
}
|
|
33
|
-
|
|
20
|
+
return { info };
|
|
34
21
|
}
|
|
35
22
|
export function attachAuthorizationHeader() {
|
|
36
23
|
const idToken = readStorageToken();
|
|
@@ -40,12 +27,12 @@ export async function checkAuthorizationToken() {
|
|
|
40
27
|
if (checkTokenPromise) {
|
|
41
28
|
return checkTokenPromise;
|
|
42
29
|
}
|
|
43
|
-
checkTokenPromise = requestTokenInfo(
|
|
30
|
+
checkTokenPromise = requestTokenInfo()
|
|
44
31
|
.then(info => {
|
|
32
|
+
ACCOUNT_INFO = info;
|
|
45
33
|
if (!info) {
|
|
46
34
|
throw new Error('Authorization token is invalid');
|
|
47
35
|
}
|
|
48
|
-
getAuthorizationState().info = info;
|
|
49
36
|
return info;
|
|
50
37
|
})
|
|
51
38
|
.finally(() => {
|
|
@@ -74,23 +61,30 @@ export async function logoutAudit() {
|
|
|
74
61
|
headers: NOT_NOTIFY_ON_ERROR_HEADERS,
|
|
75
62
|
})
|
|
76
63
|
.then(res => res?.json())
|
|
77
|
-
.catch(() => null);
|
|
64
|
+
.catch(() => null);
|
|
78
65
|
}
|
|
79
|
-
export function logout(returnCurrentPage = false) {
|
|
80
|
-
checkTokenPromise = null;
|
|
81
|
-
refreshTokenPromise = null;
|
|
82
|
-
resetAuthRuntimeCache();
|
|
66
|
+
export async function logout(returnCurrentPage = false) {
|
|
83
67
|
cleanStorageToken();
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
68
|
+
let logoutUrl;
|
|
69
|
+
if (typeof returnCurrentPage === 'string' && returnCurrentPage !== '') {
|
|
70
|
+
logoutUrl = returnCurrentPage;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
try {
|
|
74
|
+
const { authUrl } = await getAuthConfiguration();
|
|
75
|
+
logoutUrl = dexLogoutUrl(authUrl, !!returnCurrentPage);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
logout(returnCurrentPage);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
87
81
|
try {
|
|
88
82
|
getTopWindow().location.href = logoutUrl;
|
|
89
83
|
}
|
|
90
84
|
catch {
|
|
91
|
-
// should never happen, just for robustness in case of cross-origin iframe
|
|
92
85
|
location.href = logoutUrl;
|
|
93
86
|
}
|
|
87
|
+
return new Promise(noop);
|
|
94
88
|
}
|
|
95
89
|
export function redirectSSOEntry(entry) {
|
|
96
90
|
const hasQuery = entry.includes('?');
|
|
@@ -100,13 +94,29 @@ export function redirectSSOEntry(entry) {
|
|
|
100
94
|
}
|
|
101
95
|
return `${EXTERNAL_REDIRECT_API}?redirect_url=${entry}`;
|
|
102
96
|
}
|
|
103
|
-
function
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
97
|
+
async function resolveTokenInfoWithRefresh() {
|
|
98
|
+
try {
|
|
99
|
+
const info = await requestTokenInfo();
|
|
100
|
+
ACCOUNT_INFO = info;
|
|
101
|
+
if (info) {
|
|
102
|
+
return info;
|
|
103
|
+
}
|
|
104
|
+
const refreshed = await requestTokenRefresh();
|
|
105
|
+
if (!refreshed) {
|
|
106
|
+
ACCOUNT_INFO = null;
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
const newInfo = await requestTokenInfo();
|
|
110
|
+
ACCOUNT_INFO = newInfo;
|
|
111
|
+
return newInfo;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
ACCOUNT_INFO = null;
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function dexLogoutUrl(authUrl, returnCurrentPage = false) {
|
|
119
|
+
return replaceRedirectUrl(authUrl, returnCurrentPage ? location.href : location.origin + '/console-portal');
|
|
110
120
|
}
|
|
111
121
|
function replaceRedirectUrl(dexUrl, redirectUrl) {
|
|
112
122
|
const [path, queryParams] = dexUrl.split('?');
|
|
@@ -122,19 +132,20 @@ function replaceRedirectUrl(dexUrl, redirectUrl) {
|
|
|
122
132
|
return `${path}?${replacedQueryParams}`;
|
|
123
133
|
}
|
|
124
134
|
async function getAuthConfiguration() {
|
|
125
|
-
const { auth_url: authUrl
|
|
126
|
-
return { authUrl
|
|
135
|
+
const { auth_url: authUrl } = await fetch(LOGIN_API).then(res => res.json());
|
|
136
|
+
return { authUrl };
|
|
127
137
|
}
|
|
128
|
-
async function getExistingToken(
|
|
138
|
+
async function getExistingToken() {
|
|
129
139
|
const { queryParams, hashParams } = getParams();
|
|
130
140
|
const code = queryParams[CODE_KEY] || hashParams[CODE_KEY];
|
|
141
|
+
const state = queryParams[STATE_KEY] || hashParams[STATE_KEY];
|
|
131
142
|
const idToken = queryParams[ID_TOKEN_KEY] || hashParams[ID_TOKEN_KEY];
|
|
132
143
|
if (!code && !idToken) {
|
|
133
144
|
return;
|
|
134
145
|
}
|
|
135
146
|
refreshStorageAliveRecord();
|
|
136
147
|
if (code) {
|
|
137
|
-
await setCookieByCode(code,
|
|
148
|
+
await setCookieByCode(code, state);
|
|
138
149
|
}
|
|
139
150
|
else {
|
|
140
151
|
await setCookieByToken(idToken);
|
|
@@ -143,18 +154,12 @@ async function getExistingToken(csrfState) {
|
|
|
143
154
|
async function setCookieByCode(code, state) {
|
|
144
155
|
const queryParams = new URLSearchParams({ code, state });
|
|
145
156
|
const tokenResponse = await fetch(`${CALLBACK_API}?${queryParams.toString()}`).then(res => res.json());
|
|
146
|
-
|
|
157
|
+
writeStorageToken(tokenResponse?.id_token);
|
|
147
158
|
}
|
|
148
159
|
async function setCookieByToken(idToken) {
|
|
149
160
|
const queryParams = new URLSearchParams({ id_token: idToken });
|
|
150
161
|
const tokenResponse = await fetch(`${CALLBACK_API}?${queryParams.toString()}`).then(res => res.json());
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
function mapTokenResponse(response) {
|
|
154
|
-
if (response.id_token) {
|
|
155
|
-
writeStorageToken(response.id_token);
|
|
156
|
-
}
|
|
157
|
-
setCachedAccountInfo(undefined);
|
|
162
|
+
writeStorageToken(tokenResponse?.id_token);
|
|
158
163
|
}
|
|
159
164
|
function getParams() {
|
|
160
165
|
const initUrl = getInitUrl();
|
|
@@ -181,8 +186,4 @@ function parseParams(query) {
|
|
|
181
186
|
return acc;
|
|
182
187
|
}, {});
|
|
183
188
|
}
|
|
184
|
-
function redirectToLogin() {
|
|
185
|
-
logout(true);
|
|
186
|
-
return new Promise(() => undefined);
|
|
187
|
-
}
|
|
188
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9hdXRob3JpemF0aW9uL2F1dGhvcml6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWiwyQkFBMkIsR0FFNUIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFDTCxZQUFZLEVBQ1osUUFBUSxFQUNSLHFCQUFxQixFQUNyQixZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsRUFDVixhQUFhLEdBQ2QsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIseUJBQXlCLEVBQ3pCLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQiwyQkFBMkIsRUFDM0IscUJBQXFCLEVBQ3JCLG9CQUFvQixHQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBUXhCLElBQUksbUJBQXVDLENBQUM7QUFDNUMsSUFBSSxpQkFBaUIsR0FBZ0MsSUFBSSxDQUFDO0FBQzFELElBQUksbUJBQW1CLEdBQWtDLElBQUksQ0FBQztBQUU5RCxNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QjtJQUMzQyxhQUFhLEVBQUUsQ0FBQztJQUVoQixNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLG9CQUFvQixFQUFFLENBQUM7SUFFbkUsc0JBQXNCLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRXBDLE1BQU0sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFbEMsTUFBTSxJQUFJLEdBQUcsTUFBTSwyQkFBMkIsRUFBRSxDQUFD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QUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMzRSxNQUFNLEtBQUssR0FBRyxjQUFjLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFM0UsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO1FBRUQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUVqQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUFlLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBRUQsU0FBUyxlQUFlO0lBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNiLE9BQU8sSUFBSSxPQUFPLENBQVEsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGdldFRvcFdpbmRvdyxcbiAgTk9UX05PVElGWV9PTl9FUlJPUl9IRUFERVJTLFxuICBTdHJpbmdNYXAsXG59IGZyb20gJy4uL2NvcmUvcHVibGljLWFwaSc7XG5cbmltcG9ydCB7IGdldEluaXRVcmwsIHJlY29yZEluaXRVcmwgfSBmcm9tICcuL2FwcC1pbml0LXVybCc7XG5pbXBvcnQge1xuICBDQUxMQkFDS19BUEksXG4gIENPREVfS0VZLFxuICBFWFRFUk5BTF9SRURJUkVDVF9BUEksXG4gIElEX1RPS0VOX0tFWSxcbiAgTE9HSU5fQVBJLFxuICBMT0dPVVRfQVBJLFxuICBSRURJUkVDVF9VUklTLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBjbGVhblN0b3JhZ2VUb2tlbixcbiAgcmVhZFN0b3JhZ2VUb2tlbixcbiAgcmVmcmVzaFN0b3JhZ2VBbGl2ZVJlY29yZCxcbiAgd3JpdGVTdG9yYWdlVG9rZW4sXG59IGZyb20gJy4vc3RvcmFnZS10b2tlbic7XG5pbXBvcnQge1xuICBmZXRjaFRva2VuQXBpLFxuICByZXF1ZXN0VG9rZW5JbmZvLFxuICByZXF1ZXN0VG9rZW5SZWZyZXNoLFxuICByZXNvbHZlVG9rZW5JbmZvV2l0aFJlZnJlc2gsXG4gIHJlc2V0QXV0aFJ1bnRpbWVDYWNoZSxcbiAgc2V0Q2FjaGVkQWNjb3VudEluZm8sXG59IGZyb20gJy4vdG9rZW4tY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQWNjb3VudEluZm8sIFRva2VuUmVzcG9uc2UgfSBmcm9tICcuL3Rva2VuLWNsaWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aG9yaXphdGlvblN0YXRlIHtcbiAgYXV0aFVybD86IHN0cmluZztcbiAgaW5mbz86IEFjY291bnRJbmZvO1xufVxuXG5sZXQgQVVUSE9SSVpBVElPTl9TVEFURTogQXV0aG9yaXphdGlvblN0YXRlO1xubGV0IGNoZWNrVG9rZW5Qcm9taXNlOiBQcm9taXNlPEFjY291bnRJbmZvPiB8IG51bGwgPSBudWxsO1xubGV0IHJlZnJlc2hUb2tlblByb21pc2U6IFByb21pc2U8VG9rZW5SZXNwb25zZT4gfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoQXV0aG9yaXphdGlvblN0YXRlKCkge1xuICByZWNvcmRJbml0VXJsKCk7XG5cbiAgY29uc3QgeyBhdXRoVXJsLCBzdGF0ZTogY3NyZlN0YXRlIH0gPSBhd2FpdCBnZXRBdXRoQ29uZmlndXJhdGlvbigpO1xuXG4gIGluaXRBdXRob3JpemF0aW9uU3RhdGUoeyBhdXRoVXJsIH0pO1xuXG4gIGF3YWl0IGdldEV4aXN0aW5nVG9rZW4oY3NyZlN0YXRlKTtcblxuICBjb25zdCBpbmZvID0gYXdhaXQgcmVzb2x2ZVRva2VuSW5mb1dpdGhSZWZyZXNoKCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgcmV0dXJuIHJlZGlyZWN0VG9Mb2dpbigpO1xuICB9XG5cbiAgQVVUSE9SSVpBVElPTl9TVEFURS5pbmZvID0gaW5mbztcblxuICByZXR1cm4gQVVUSE9SSVpBVElPTl9TVEFURTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEF1dGhvcml6YXRpb25TdGF0ZSgpIHtcbiAgaWYgKEFVVEhPUklaQVRJT05fU1RBVEUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQXV0aG9yaXphdGlvblN0YXRlIGhhdmUgbm90IGJlZW4gaW5pdGlhbGl6ZWQnKTtcbiAgfVxuXG4gIHJldHVybiBBVVRIT1JJWkFUSU9OX1NUQVRFO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEF1dGhvcml6YXRpb25TdGF0ZShzdGF0ZTogQXV0aG9yaXphdGlvblN0YXRlKTogdm9pZCB7XG4gIGlmIChcbiAgICBBVVRIT1JJWkFUSU9OX1NUQVRFICE9PSB1bmRlZmluZWQgJiZcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIHdlYnBhY2sgc3BlY2lmaWNcbiAgICAhbW9kdWxlLmhvdFxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2F1dGhvcml6YXRpb25TdGF0ZSBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQnKTtcbiAgfVxuXG4gIEFVVEhPUklaQVRJT05fU1RBVEUgPSBzdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaEF1dGhvcml6YXRpb25IZWFkZXIoKTogeyBBdXRob3JpemF0aW9uPzogc3RyaW5nIH0ge1xuICBjb25zdCBpZFRva2VuID0gcmVhZFN0b3JhZ2VUb2tlbigpO1xuICByZXR1cm4gaWRUb2tlbiA/IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2lkVG9rZW59YCB9IDoge307XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0F1dGhvcml6YXRpb25Ub2tlbigpOiBQcm9taXNlPEFjY291bnRJbmZvPiB7XG4gIGlmIChjaGVja1Rva2VuUHJvbWlzZSkge1xuICAgIHJldHVybiBjaGVja1Rva2VuUHJvbWlzZTtcbiAgfVxuXG4gIGNoZWNrVG9rZW5Qcm9taXNlID0gcmVxdWVzdFRva2VuSW5mbyh0cnVlKVxuICAgIC50aGVuKGluZm8gPT4ge1xuICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQXV0aG9yaXphdGlvbiB0b2tlbiBpcyBpbnZhbGlkJyk7XG4gICAgICB9XG5cbiAgICAgIGdldEF1dGhvcml6YXRpb25TdGF0ZSgpLmluZm8gPSBpbmZvO1xuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9KVxuICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgIGNoZWNrVG9rZW5Qcm9taXNlID0gbnVsbDtcbiAgICB9KTtcblxuICByZXR1cm4gY2hlY2tUb2tlblByb21pc2U7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWZyZXNoQXV0aG9yaXphdGlvblRva2VuKCk6IFByb21pc2U8VG9rZW5SZXNwb25zZT4ge1xuICBpZiAocmVmcmVzaFRva2VuUHJvbWlzZSkge1xuICAgIHJldHVybiByZWZyZXNoVG9rZW5Qcm9taXNlO1xuICB9XG5cbiAgcmVmcmVzaFRva2VuUHJvbWlzZSA9IHJlcXVlc3RUb2tlblJlZnJlc2goKVxuICAgIC50aGVuKHRva2VuUmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKCF0b2tlblJlc3BvbnNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlZnJlc2ggdG9rZW4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRva2VuUmVzcG9uc2U7XG4gICAgfSlcbiAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICByZWZyZXNoVG9rZW5Qcm9taXNlID0gbnVsbDtcbiAgICB9KTtcblxuICByZXR1cm4gcmVmcmVzaFRva2VuUHJvbWlzZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvZ291dEF1ZGl0KCk6IFByb21pc2U8eyBsb2dvdXRfcmVkaXJlY3RfdXJsPzogc3RyaW5nIH0+IHtcbiAgcmV0dXJuIGZldGNoVG9rZW5BcGkoTE9HT1VUX0FQSSwge1xuICAgIGhlYWRlcnM6IE5PVF9OT1RJRllfT05fRVJST1JfSEVBREVSUyxcbiAgfSlcbiAgICAudGhlbihyZXMgPT4gcmVzPy5qc29uKCkpXG4gICAgLmNhdGNoKCgpID0+IG51bGwpOyAvLyBsb2dvdXQgQVBJIOacquaMh+WumiBsb2dvdXRfcmVkaXJlY3RfdXJsIOaXtiByZXM/Lmpzb24oKSDkvJrlpLHotKVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ291dChyZXR1cm5DdXJyZW50UGFnZTogYm9vbGVhbiB8IHN0cmluZyA9IGZhbHNlKSB7XG4gIGNoZWNrVG9rZW5Qcm9taXNlID0gbnVsbDtcbiAgcmVmcmVzaFRva2VuUHJvbWlzZSA9IG51bGw7XG4gIHJlc2V0QXV0aFJ1bnRpbWVDYWNoZSgpO1xuICBjbGVhblN0b3JhZ2VUb2tlbigpO1xuXG4gIGNvbnN0IGxvZ291dFVybCA9XG4gICAgdHlwZW9mIHJldHVybkN1cnJlbnRQYWdlID09PSAnc3RyaW5nJyAmJiByZXR1cm5DdXJyZW50UGFnZSAhPT0gJydcbiAgICAgID8gcmV0dXJuQ3VycmVudFBhZ2VcbiAgICAgIDogZGV4TG9nb3V0VXJsKCEhcmV0dXJuQ3VycmVudFBhZ2UpO1xuXG4gIHRyeSB7XG4gICAgZ2V0VG9wV2luZG93KCkubG9jYXRpb24uaHJlZiA9IGxvZ291dFVybDtcbiAgfSBjYXRjaCB7XG4gICAgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbiwganVzdCBmb3Igcm9idXN0bmVzcyBpbiBjYXNlIG9mIGNyb3NzLW9yaWdpbiBpZnJhbWVcbiAgICBsb2NhdGlvbi5ocmVmID0gbG9nb3V0VXJsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWRpcmVjdFNTT0VudHJ5KGVudHJ5OiBzdHJpbmcpIHtcbiAgY29uc3QgaGFzUXVlcnkgPSBlbnRyeS5pbmNsdWRlcygnPycpO1xuXG4gIGlmIChoYXNRdWVyeSkge1xuICAgIGNvbnN0IFt1cmwsIHF1ZXJ5XSA9IGVudHJ5LnNwbGl0KCc/Jyk7XG4gICAgcmV0dXJuIGAke0VYVEVSTkFMX1JFRElSRUNUX0FQSX0/cmVkaXJlY3RfdXJsPSR7dXJsfSYke3F1ZXJ5fWA7XG4gIH1cblxuICByZXR1cm4gYCR7RVhURVJOQUxfUkVESVJFQ1RfQVBJfT9yZWRpcmVjdF91cmw9JHtlbnRyeX1gO1xufVxuXG5mdW5jdGlvbiBkZXhMb2dvdXRVcmwocmV0dXJuQ3VycmVudFBhZ2UgPSBmYWxzZSkge1xuICBjb25zdCB7IGF1dGhVcmwgfSA9IGdldEF1dGhvcml6YXRpb25TdGF0ZSgpO1xuICByZXR1cm4gcmVwbGFjZVJlZGlyZWN0VXJsKFxuICAgIGF1dGhVcmwsXG4gICAgLy8gYXV0aFVybCDkuK3nmoQgcmVkaXJlY3RVcmwg5piv5qC56Lev55Sx77yM5qC56Lev55Sx5LqM5qyh6YeN5a6a5ZCR5ZueIHBvcnRhbCDml7bkvJrkuKLlpLEgY29kZSDlr7zoh7TnmbvlvZXlpLHotKVcbiAgICAvLyDlpoLmnpzlkI7mnJ/mnInlrprliLbljJbopoHmsYLpu5jorqTpppbpobXkuI3mmK8gcG9ydGFs77yM5Y+v5Lul5pS55Zue5LmL5YmN55qE5pa55qGI77yM5L2/55So5rWP6KeI5Zmo5a+86Iiq5omT5byAIGxvZ291dFVybO+8jOeEtuWQjiBkZXgg6YeN5a6a5ZCR5Yiw5qC56Lev55Sx77yM5qC56Lev55Sx6YeN5a6a5ZCR5Yiw6buY6K6k6aaW6aG177yM6aaW6aG15YaN5bCGIGF1dGhVcmwg5Lit55qEIHJlZGlyZWN0VXJsIOabv+aNouS4uuW9k+WJjSB1cmwg6Lez6L2s5YiwIGRleCDov5vooYznmbvlvZXvvJtcbiAgICAvLyDmnIDlpb3njq/looPlj5jph4/lop7liqDpu5jorqTpppbpobXlnLDlnYDmiJbogIUgZGV4IHJlZGlyZWN0VXJsIOebtOaOpeaYr+ato+ehruWcsOWdgFxuICAgIHJldHVybkN1cnJlbnRQYWdlID8gbG9jYXRpb24uaHJlZiA6IGxvY2F0aW9uLm9yaWdpbiArICcvY29uc29sZS1wb3J0YWwnLFxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlUmVkaXJlY3RVcmwoZGV4VXJsOiBzdHJpbmcsIHJlZGlyZWN0VXJsOiBzdHJpbmcpIHtcbiAgY29uc3QgW3BhdGgsIHF1ZXJ5UGFyYW1zXSA9IGRleFVybC5zcGxpdCgnPycpO1xuXG4gIGNvbnN0IHJlcGxhY2VkUXVlcnlQYXJhbXMgPSBxdWVyeVBhcmFtc1xuICAgIC5zcGxpdCgnJicpXG4gICAgLm1hcChwYWlyID0+IHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhaXIuc3BsaXQoJz0nKTtcbiAgICAgIHJldHVybiBSRURJUkVDVF9VUklTLmhhcyhrZXkpXG4gICAgICAgID8gYCR7a2V5fT0ke2VuY29kZVVSSUNvbXBvbmVudChyZWRpcmVjdFVybCl9YFxuICAgICAgICA6IGAke2tleX09JHt2YWx1ZX1gO1xuICAgIH0pXG4gICAgLmpvaW4oJyYnKTtcblxuICByZXR1cm4gYCR7cGF0aH0/JHtyZXBsYWNlZFF1ZXJ5UGFyYW1zfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEF1dGhDb25maWd1cmF0aW9uKCk6IFByb21pc2U8e1xuICBhdXRoVXJsOiBzdHJpbmc7XG4gIHN0YXRlOiBzdHJpbmc7XG59PiB7XG4gIGNvbnN0IHsgYXV0aF91cmw6IGF1dGhVcmwsIHN0YXRlIH0gPSBhd2FpdCBmZXRjaChMT0dJTl9BUEkpLnRoZW4ocmVzID0+XG4gICAgcmVzLmpzb24oKSxcbiAgKTtcbiAgcmV0dXJuIHsgYXV0aFVybCwgc3RhdGUgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0RXhpc3RpbmdUb2tlbihjc3JmU3RhdGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHF1ZXJ5UGFyYW1zLCBoYXNoUGFyYW1zIH0gPSBnZXRQYXJhbXMoKTtcblxuICBjb25zdCBjb2RlID0gcXVlcnlQYXJhbXNbQ09ERV9LRVldIHx8IGhhc2hQYXJhbXNbQ09ERV9LRVldO1xuICBjb25zdCBpZFRva2VuID0gcXVlcnlQYXJhbXNbSURfVE9LRU5fS0VZXSB8fCBoYXNoUGFyYW1zW0lEX1RPS0VOX0tFWV07XG5cbiAgaWYgKCFjb2RlICYmICFpZFRva2VuKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmVmcmVzaFN0b3JhZ2VBbGl2ZVJlY29yZCgpO1xuXG4gIGlmIChjb2RlKSB7XG4gICAgYXdhaXQgc2V0Q29va2llQnlDb2RlKGNvZGUsIGNzcmZTdGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgc2V0Q29va2llQnlUb2tlbihpZFRva2VuKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRDb29raWVCeUNvZGUoY29kZTogc3RyaW5nLCBzdGF0ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7IGNvZGUsIHN0YXRlIH0pO1xuXG4gIGNvbnN0IHRva2VuUmVzcG9uc2U6IFRva2VuUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcbiAgICBgJHtDQUxMQkFDS19BUEl9PyR7cXVlcnlQYXJhbXMudG9TdHJpbmcoKX1gLFxuICApLnRoZW4ocmVzID0+IHJlcy5qc29uKCkpO1xuXG4gIG1hcFRva2VuUmVzcG9uc2UodG9rZW5SZXNwb25zZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldENvb2tpZUJ5VG9rZW4oaWRUb2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7IGlkX3Rva2VuOiBpZFRva2VuIH0pO1xuXG4gIGNvbnN0IHRva2VuUmVzcG9uc2U6IFRva2VuUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcbiAgICBgJHtDQUxMQkFDS19BUEl9PyR7cXVlcnlQYXJhbXMudG9TdHJpbmcoKX1gLFxuICApLnRoZW4ocmVzID0+IHJlcy5qc29uKCkpO1xuXG4gIG1hcFRva2VuUmVzcG9uc2UodG9rZW5SZXNwb25zZSk7XG59XG5cbmZ1bmN0aW9uIG1hcFRva2VuUmVzcG9uc2UocmVzcG9uc2U6IFRva2VuUmVzcG9uc2UpIHtcbiAgaWYgKHJlc3BvbnNlLmlkX3Rva2VuKSB7XG4gICAgd3JpdGVTdG9yYWdlVG9rZW4ocmVzcG9uc2UuaWRfdG9rZW4pO1xuICB9XG4gIHNldENhY2hlZEFjY291bnRJbmZvKHVuZGVmaW5lZCk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtcygpIHtcbiAgY29uc3QgaW5pdFVybCA9IGdldEluaXRVcmwoKTtcblxuICBjb25zdCBpbml0TG9jYXRpb24gPSBuZXcgVVJMKGluaXRVcmwpO1xuXG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0gcGFyc2VQYXJhbXMoXG4gICAgaW5pdExvY2F0aW9uLnNlYXJjaCA/IGluaXRMb2NhdGlvbi5zZWFyY2guc2xpY2UoMSkgOiAnJyxcbiAgKTtcblxuICBjb25zdCBoYXNoUGFyYW1zID0gcGFyc2VQYXJhbXMoXG4gICAgaW5pdExvY2F0aW9uLmhhc2ggPyBpbml0TG9jYXRpb24uaGFzaC5zbGljZSgxKSA6ICcnLFxuICApO1xuXG4gIHJldHVybiB7IHF1ZXJ5UGFyYW1zLCBoYXNoUGFyYW1zIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFyYW1zKHF1ZXJ5OiBzdHJpbmcpOiBTdHJpbmdNYXAge1xuICBpZiAoIXF1ZXJ5KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHF1ZXJ5LnNwbGl0KCcmJykucmVkdWNlKChhY2MsIHBhcmFtKSA9PiB7XG4gICAgaWYgKCFwYXJhbSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICBjb25zdCBzZXBhcmF0b3JJbmRleCA9IHBhcmFtLmluZGV4T2YoJz0nKTtcbiAgICBjb25zdCBrZXkgPSBzZXBhcmF0b3JJbmRleCA9PT0gLTEgPyBwYXJhbSA6IHBhcmFtLnNsaWNlKDAsIHNlcGFyYXRvckluZGV4KTtcbiAgICBjb25zdCB2YWx1ZSA9IHNlcGFyYXRvckluZGV4ID09PSAtMSA/ICcnIDogcGFyYW0uc2xpY2Uoc2VwYXJhdG9ySW5kZXggKyAxKTtcblxuICAgIGlmICgha2V5KSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIGFjY1trZXldID0gdmFsdWU7XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSBhcyBTdHJpbmdNYXApO1xufVxuXG5mdW5jdGlvbiByZWRpcmVjdFRvTG9naW4oKSB7XG4gIGxvZ291dCh0cnVlKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPG5ldmVyPigoKSA9PiB1bmRlZmluZWQpO1xufVxuIl19
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9hdXRob3JpemF0aW9uL2F1dGhvcml6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixJQUFJLEVBQ0osMkJBQTJCLEdBRTVCLE1BQU0sb0JBQW9CLENBQUM7QUFFNUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsWUFBWSxFQUNaLFFBQVEsRUFDUixTQUFTLEVBQ1QscUJBQXFCLEVBQ3JCLFlBQVksRUFDWixTQUFTLEVBQ1QsVUFBVSxFQUNWLGFBQWEsR0FDZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQix5QkFBeUIsRUFDekIsaUJBQWlCLEdBQ2xCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsbUJBQW1CLEdBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEIsSUFBSSxZQUF5QixDQUFDO0FBQzlCLElBQUksaUJBQXVDLENBQUM7QUFDNUMsSUFBSSxtQkFBMkMsQ0FBQztBQUVoRCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QjtJQUMzQyxhQUFhLEVBQUUsQ0FBQztJQUVoQixNQUFNLGdCQUFnQixFQUFFLENBQUM7SUFFekIsTUFBTSxJQUFJLEdBQUcsTUFBTSwyQkFBMkIsRUFBRSxDQUFDO0lBRWpELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLE9BQU8sSUFBSSxPQUFPLENBQVEsR0FBRyxFQUFFLENBQUMsU0FBUyxD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Q0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDM0UsTUFBTSxLQUFLLEdBQUcsY0FBYyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTNFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUVELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFakIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBZSxDQUFDLENBQUM7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGdldFRvcFdpbmRvdyxcbiAgbm9vcCxcbiAgTk9UX05PVElGWV9PTl9FUlJPUl9IRUFERVJTLFxuICBTdHJpbmdNYXAsXG59IGZyb20gJy4uL2NvcmUvcHVibGljLWFwaSc7XG5cbmltcG9ydCB7IGdldEluaXRVcmwsIHJlY29yZEluaXRVcmwgfSBmcm9tICcuL2FwcC1pbml0LXVybCc7XG5pbXBvcnQge1xuICBDQUxMQkFDS19BUEksXG4gIENPREVfS0VZLFxuICBTVEFURV9LRVksXG4gIEVYVEVSTkFMX1JFRElSRUNUX0FQSSxcbiAgSURfVE9LRU5fS0VZLFxuICBMT0dJTl9BUEksXG4gIExPR09VVF9BUEksXG4gIFJFRElSRUNUX1VSSVMsXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIGNsZWFuU3RvcmFnZVRva2VuLFxuICByZWFkU3RvcmFnZVRva2VuLFxuICByZWZyZXNoU3RvcmFnZUFsaXZlUmVjb3JkLFxuICB3cml0ZVN0b3JhZ2VUb2tlbixcbn0gZnJvbSAnLi9zdG9yYWdlLXRva2VuJztcbmltcG9ydCB7XG4gIGZldGNoVG9rZW5BcGksXG4gIHJlcXVlc3RUb2tlbkluZm8sXG4gIHJlcXVlc3RUb2tlblJlZnJlc2gsXG59IGZyb20gJy4vdG9rZW4tY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQWNjb3VudEluZm8sIFRva2VuUmVzcG9uc2UgfSBmcm9tICcuL3Rva2VuLWNsaWVudCc7XG5cbmxldCBBQ0NPVU5UX0lORk86IEFjY291bnRJbmZvO1xubGV0IGNoZWNrVG9rZW5Qcm9taXNlOiBQcm9taXNlPEFjY291bnRJbmZvPjtcbmxldCByZWZyZXNoVG9rZW5Qcm9taXNlOiBQcm9taXNlPFRva2VuUmVzcG9uc2U+O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FjaGVkQWNjb3VudEluZm8oKSB7XG4gIHJldHVybiBBQ0NPVU5UX0lORk87XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaEF1dGhvcml6YXRpb25TdGF0ZSgpIHtcbiAgcmVjb3JkSW5pdFVybCgpO1xuXG4gIGF3YWl0IGdldEV4aXN0aW5nVG9rZW4oKTtcblxuICBjb25zdCBpbmZvID0gYXdhaXQgcmVzb2x2ZVRva2VuSW5mb1dpdGhSZWZyZXNoKCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgYXdhaXQgbG9nb3V0KHRydWUpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxuZXZlcj4oKCkgPT4gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHJldHVybiB7IGluZm8gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaEF1dGhvcml6YXRpb25IZWFkZXIoKTogeyBBdXRob3JpemF0aW9uPzogc3RyaW5nIH0ge1xuICBjb25zdCBpZFRva2VuID0gcmVhZFN0b3JhZ2VUb2tlbigpO1xuICByZXR1cm4gaWRUb2tlbiA/IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2lkVG9rZW59YCB9IDoge307XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0F1dGhvcml6YXRpb25Ub2tlbigpOiBQcm9taXNlPEFjY291bnRJbmZvPiB7XG4gIGlmIChjaGVja1Rva2VuUHJvbWlzZSkge1xuICAgIHJldHVybiBjaGVja1Rva2VuUHJvbWlzZTtcbiAgfVxuXG4gIGNoZWNrVG9rZW5Qcm9taXNlID0gcmVxdWVzdFRva2VuSW5mbygpXG4gICAgLnRoZW4oaW5mbyA9PiB7XG4gICAgICBBQ0NPVU5UX0lORk8gPSBpbmZvO1xuXG4gICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRob3JpemF0aW9uIHRva2VuIGlzIGludmFsaWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfSlcbiAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICBjaGVja1Rva2VuUHJvbWlzZSA9IG51bGw7XG4gICAgfSk7XG5cbiAgcmV0dXJuIGNoZWNrVG9rZW5Qcm9taXNlO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEF1dGhvcml6YXRpb25Ub2tlbigpOiBQcm9taXNlPFRva2VuUmVzcG9uc2U+IHtcbiAgaWYgKHJlZnJlc2hUb2tlblByb21pc2UpIHtcbiAgICByZXR1cm4gcmVmcmVzaFRva2VuUHJvbWlzZTtcbiAgfVxuXG4gIHJlZnJlc2hUb2tlblByb21pc2UgPSByZXF1ZXN0VG9rZW5SZWZyZXNoKClcbiAgICAudGhlbih0b2tlblJlc3BvbnNlID0+IHtcbiAgICAgIGlmICghdG9rZW5SZXNwb25zZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZWZyZXNoIHRva2VuJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0b2tlblJlc3BvbnNlO1xuICAgIH0pXG4gICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgcmVmcmVzaFRva2VuUHJvbWlzZSA9IG51bGw7XG4gICAgfSk7XG5cbiAgcmV0dXJuIHJlZnJlc2hUb2tlblByb21pc2U7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2dvdXRBdWRpdCgpOiBQcm9taXNlPHsgbG9nb3V0X3JlZGlyZWN0X3VybD86IHN0cmluZyB9PiB7XG4gIHJldHVybiBmZXRjaFRva2VuQXBpKExPR09VVF9BUEksIHtcbiAgICBoZWFkZXJzOiBOT1RfTk9USUZZX09OX0VSUk9SX0hFQURFUlMsXG4gIH0pXG4gICAgLnRoZW4ocmVzID0+IHJlcz8uanNvbigpKVxuICAgIC5jYXRjaCgoKSA9PiBudWxsKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvZ291dChcbiAgcmV0dXJuQ3VycmVudFBhZ2U6IGJvb2xlYW4gfCBzdHJpbmcgPSBmYWxzZSxcbik6IFByb21pc2U8bmV2ZXI+IHtcbiAgY2xlYW5TdG9yYWdlVG9rZW4oKTtcblxuICBsZXQgbG9nb3V0VXJsOiBzdHJpbmc7XG5cbiAgaWYgKHR5cGVvZiByZXR1cm5DdXJyZW50UGFnZSA9PT0gJ3N0cmluZycgJiYgcmV0dXJuQ3VycmVudFBhZ2UgIT09ICcnKSB7XG4gICAgbG9nb3V0VXJsID0gcmV0dXJuQ3VycmVudFBhZ2U7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgYXV0aFVybCB9ID0gYXdhaXQgZ2V0QXV0aENvbmZpZ3VyYXRpb24oKTtcbiAgICAgIGxvZ291dFVybCA9IGRleExvZ291dFVybChhdXRoVXJsLCAhIXJldHVybkN1cnJlbnRQYWdlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGxvZ291dChyZXR1cm5DdXJyZW50UGFnZSk7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBnZXRUb3BXaW5kb3coKS5sb2NhdGlvbi5ocmVmID0gbG9nb3V0VXJsO1xuICB9IGNhdGNoIHtcbiAgICBsb2NhdGlvbi5ocmVmID0gbG9nb3V0VXJsO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPG5ldmVyPihub29wKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZGlyZWN0U1NPRW50cnkoZW50cnk6IHN0cmluZykge1xuICBjb25zdCBoYXNRdWVyeSA9IGVudHJ5LmluY2x1ZGVzKCc/Jyk7XG5cbiAgaWYgKGhhc1F1ZXJ5KSB7XG4gICAgY29uc3QgW3VybCwgcXVlcnldID0gZW50cnkuc3BsaXQoJz8nKTtcbiAgICByZXR1cm4gYCR7RVhURVJOQUxfUkVESVJFQ1RfQVBJfT9yZWRpcmVjdF91cmw9JHt1cmx9JiR7cXVlcnl9YDtcbiAgfVxuXG4gIHJldHVybiBgJHtFWFRFUk5BTF9SRURJUkVDVF9BUEl9P3JlZGlyZWN0X3VybD0ke2VudHJ5fWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVUb2tlbkluZm9XaXRoUmVmcmVzaCgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgcmVxdWVzdFRva2VuSW5mbygpO1xuICAgIEFDQ09VTlRfSU5GTyA9IGluZm87XG5cbiAgICBpZiAoaW5mbykge1xuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgY29uc3QgcmVmcmVzaGVkID0gYXdhaXQgcmVxdWVzdFRva2VuUmVmcmVzaCgpO1xuXG4gICAgaWYgKCFyZWZyZXNoZWQpIHtcbiAgICAgIEFDQ09VTlRfSU5GTyA9IG51bGw7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdJbmZvID0gYXdhaXQgcmVxdWVzdFRva2VuSW5mbygpO1xuICAgIEFDQ09VTlRfSU5GTyA9IG5ld0luZm87XG4gICAgcmV0dXJuIG5ld0luZm87XG4gIH0gY2F0Y2gge1xuICAgIEFDQ09VTlRfSU5GTyA9IG51bGw7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV4TG9nb3V0VXJsKGF1dGhVcmw6IHN0cmluZywgcmV0dXJuQ3VycmVudFBhZ2UgPSBmYWxzZSkge1xuICByZXR1cm4gcmVwbGFjZVJlZGlyZWN0VXJsKFxuICAgIGF1dGhVcmwsXG4gICAgcmV0dXJuQ3VycmVudFBhZ2UgPyBsb2NhdGlvbi5ocmVmIDogbG9jYXRpb24ub3JpZ2luICsgJy9jb25zb2xlLXBvcnRhbCcsXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VSZWRpcmVjdFVybChkZXhVcmw6IHN0cmluZywgcmVkaXJlY3RVcmw6IHN0cmluZykge1xuICBjb25zdCBbcGF0aCwgcXVlcnlQYXJhbXNdID0gZGV4VXJsLnNwbGl0KCc/Jyk7XG5cbiAgY29uc3QgcmVwbGFjZWRRdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zXG4gICAgLnNwbGl0KCcmJylcbiAgICAubWFwKHBhaXIgPT4ge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFpci5zcGxpdCgnPScpO1xuICAgICAgcmV0dXJuIFJFRElSRUNUX1VSSVMuaGFzKGtleSlcbiAgICAgICAgPyBgJHtrZXl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0VXJsKX1gXG4gICAgICAgIDogYCR7a2V5fT0ke3ZhbHVlfWA7XG4gICAgfSlcbiAgICAuam9pbignJicpO1xuXG4gIHJldHVybiBgJHtwYXRofT8ke3JlcGxhY2VkUXVlcnlQYXJhbXN9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QXV0aENvbmZpZ3VyYXRpb24oKTogUHJvbWlzZTx7XG4gIGF1dGhVcmw6IHN0cmluZztcbn0+IHtcbiAgY29uc3QgeyBhdXRoX3VybDogYXV0aFVybCB9ID0gYXdhaXQgZmV0Y2goTE9HSU5fQVBJKS50aGVuKHJlcyA9PiByZXMuanNvbigpKTtcbiAgcmV0dXJuIHsgYXV0aFVybCB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRFeGlzdGluZ1Rva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHF1ZXJ5UGFyYW1zLCBoYXNoUGFyYW1zIH0gPSBnZXRQYXJhbXMoKTtcblxuICBjb25zdCBjb2RlID0gcXVlcnlQYXJhbXNbQ09ERV9LRVldIHx8IGhhc2hQYXJhbXNbQ09ERV9LRVldO1xuICBjb25zdCBzdGF0ZSA9IHF1ZXJ5UGFyYW1zW1NUQVRFX0tFWV0gfHwgaGFzaFBhcmFtc1tTVEFURV9LRVldO1xuICBjb25zdCBpZFRva2VuID0gcXVlcnlQYXJhbXNbSURfVE9LRU5fS0VZXSB8fCBoYXNoUGFyYW1zW0lEX1RPS0VOX0tFWV07XG5cbiAgaWYgKCFjb2RlICYmICFpZFRva2VuKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmVmcmVzaFN0b3JhZ2VBbGl2ZVJlY29yZCgpO1xuXG4gIGlmIChjb2RlKSB7XG4gICAgYXdhaXQgc2V0Q29va2llQnlDb2RlKGNvZGUsIHN0YXRlKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBzZXRDb29raWVCeVRva2VuKGlkVG9rZW4pO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldENvb2tpZUJ5Q29kZShjb2RlOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHsgY29kZSwgc3RhdGUgfSk7XG5cbiAgY29uc3QgdG9rZW5SZXNwb25zZTogVG9rZW5SZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgIGAke0NBTExCQUNLX0FQSX0/JHtxdWVyeVBhcmFtcy50b1N0cmluZygpfWAsXG4gICkudGhlbihyZXMgPT4gcmVzLmpzb24oKSk7XG5cbiAgd3JpdGVTdG9yYWdlVG9rZW4odG9rZW5SZXNwb25zZT8uaWRfdG9rZW4pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRDb29raWVCeVRva2VuKGlkVG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBpZF90b2tlbjogaWRUb2tlbiB9KTtcblxuICBjb25zdCB0b2tlblJlc3BvbnNlOiBUb2tlblJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgYCR7Q0FMTEJBQ0tfQVBJfT8ke3F1ZXJ5UGFyYW1zLnRvU3RyaW5nKCl9YCxcbiAgKS50aGVuKHJlcyA9PiByZXMuanNvbigpKTtcblxuICB3cml0ZVN0b3JhZ2VUb2tlbih0b2tlblJlc3BvbnNlPy5pZF90b2tlbik7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtcygpIHtcbiAgY29uc3QgaW5pdFVybCA9IGdldEluaXRVcmwoKTtcblxuICBjb25zdCBpbml0TG9jYXRpb24gPSBuZXcgVVJMKGluaXRVcmwpO1xuXG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0gcGFyc2VQYXJhbXMoXG4gICAgaW5pdExvY2F0aW9uLnNlYXJjaCA/IGluaXRMb2NhdGlvbi5zZWFyY2guc2xpY2UoMSkgOiAnJyxcbiAgKTtcblxuICBjb25zdCBoYXNoUGFyYW1zID0gcGFyc2VQYXJhbXMoXG4gICAgaW5pdExvY2F0aW9uLmhhc2ggPyBpbml0TG9jYXRpb24uaGFzaC5zbGljZSgxKSA6ICcnLFxuICApO1xuXG4gIHJldHVybiB7IHF1ZXJ5UGFyYW1zLCBoYXNoUGFyYW1zIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFyYW1zKHF1ZXJ5OiBzdHJpbmcpOiBTdHJpbmdNYXAge1xuICBpZiAoIXF1ZXJ5KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHF1ZXJ5LnNwbGl0KCcmJykucmVkdWNlKChhY2MsIHBhcmFtKSA9PiB7XG4gICAgaWYgKCFwYXJhbSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICBjb25zdCBzZXBhcmF0b3JJbmRleCA9IHBhcmFtLmluZGV4T2YoJz0nKTtcbiAgICBjb25zdCBrZXkgPSBzZXBhcmF0b3JJbmRleCA9PT0gLTEgPyBwYXJhbSA6IHBhcmFtLnNsaWNlKDAsIHNlcGFyYXRvckluZGV4KTtcbiAgICBjb25zdCB2YWx1ZSA9IHNlcGFyYXRvckluZGV4ID09PSAtMSA/ICcnIDogcGFyYW0uc2xpY2Uoc2VwYXJhdG9ySW5kZXggKyAxKTtcblxuICAgIGlmICgha2V5KSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIGFjY1trZXldID0gdmFsdWU7XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSBhcyBTdHJpbmdNYXApO1xufVxuIl19
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export const STORAGE_TYPE_KEY = 'token_storage';
|
|
2
2
|
export const CODE_KEY = 'code';
|
|
3
|
+
export const STATE_KEY = 'state';
|
|
3
4
|
export const ID_TOKEN_KEY = 'id_token';
|
|
4
5
|
export const LOADING_CACHE = 15_000;
|
|
5
6
|
export const HEARTBEAT_POLLING = 15_000;
|
|
@@ -14,4 +15,4 @@ export const REDIRECT_URIS = new Set([
|
|
|
14
15
|
'redirect_uri',
|
|
15
16
|
'post_logout_redirect_uri',
|
|
16
17
|
]);
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2F1dGhvcml6YXRpb24vY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGVBQWUsQ0FBQztBQUNoRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUM7QUFDakMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQztBQUV2QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztBQUN4QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywrQkFBK0IsQ0FBQztBQUVsRSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsNkJBQTZCLENBQUM7QUFDdkQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLDhCQUE4QixDQUFDO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxnQ0FBZ0MsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRywrQkFBK0IsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsNEJBQTRCLENBQUM7QUFDM0QsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsZ0NBQWdDLENBQUM7QUFFdEUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25DLGNBQWM7SUFDZCwwQkFBMEI7Q0FDM0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFNUT1JBR0VfVFlQRV9LRVkgPSAndG9rZW5fc3RvcmFnZSc7XG5leHBvcnQgY29uc3QgQ09ERV9LRVkgPSAnY29kZSc7XG5leHBvcnQgY29uc3QgU1RBVEVfS0VZID0gJ3N0YXRlJztcbmV4cG9ydCBjb25zdCBJRF9UT0tFTl9LRVkgPSAnaWRfdG9rZW4nO1xuXG5leHBvcnQgY29uc3QgTE9BRElOR19DQUNIRSA9IDE1XzAwMDtcbmV4cG9ydCBjb25zdCBIRUFSVEJFQVRfUE9MTElORyA9IDE1XzAwMDtcbmV4cG9ydCBjb25zdCBTRVNTSU9OX01BTkFHRV9LRVkgPSAnc2Vzc2lvbi1tYW5hZ2UtY29uc3RydWN0LXRpbWUnO1xuXG5leHBvcnQgY29uc3QgTE9HSU5fQVBJID0gJy9jb25zb2xlL2FwaS92Mi90b2tlbi9sb2dpbic7XG5leHBvcnQgY29uc3QgTE9HT1VUX0FQSSA9ICcvY29uc29sZS9hcGkvdjIvdG9rZW4vbG9nb3V0JztcbmV4cG9ydCBjb25zdCBDQUxMQkFDS19BUEkgPSAnL2NvbnNvbGUvYXBpL3YyL3Rva2VuL2NhbGxiYWNrJztcbmV4cG9ydCBjb25zdCBUT0tFTl9SRUZSRVNIX0FQSSA9ICcvY29uc29sZS9hcGkvdjIvdG9rZW4vcmVmcmVzaCc7XG5leHBvcnQgY29uc3QgVE9LRU5fSU5GT19BUEkgPSAnL2NvbnNvbGUvYXBpL3YyL3Rva2VuL2luZm8nO1xuZXhwb3J0IGNvbnN0IEVYVEVSTkFMX1JFRElSRUNUX0FQSSA9ICcvY29uc29sZS9hcGkvdjIvdG9rZW4vcmVkaXJlY3QnO1xuXG5leHBvcnQgY29uc3QgUkVESVJFQ1RfVVJJUyA9IG5ldyBTZXQoW1xuICAncmVkaXJlY3RfdXJpJyxcbiAgJ3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaScsXG5dKTtcbiJdfQ==
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { DialogService } from '@alauda/ui';
|
|
6
6
|
import { Inject, Injectable, Injector } from '@angular/core';
|
|
7
|
-
import {
|
|
7
|
+
import { NEVER, from, throwError, catchError, concatMap, take, map, of, switchMap, } from 'rxjs';
|
|
8
8
|
import { ApiGatewayService } from '../api/public-api';
|
|
9
9
|
import { ANONYMOUS_APIS, catchPromise } from '../core/public-api';
|
|
10
10
|
import { TranslateService } from '../translate/public-api';
|
|
@@ -76,8 +76,7 @@ export class AuthorizationInterceptorService {
|
|
|
76
76
|
}
|
|
77
77
|
// 当用户被禁用自动登出
|
|
78
78
|
if (this.isInvalidUser(error)) {
|
|
79
|
-
logout(true);
|
|
80
|
-
return NEVER;
|
|
79
|
+
return from(logout(true));
|
|
81
80
|
}
|
|
82
81
|
if (!this.isUnauthorized(error)) {
|
|
83
82
|
return throwError(() => error);
|
|
@@ -94,14 +93,11 @@ export class AuthorizationInterceptorService {
|
|
|
94
93
|
}));
|
|
95
94
|
}
|
|
96
95
|
retryAuth(next, req) {
|
|
97
|
-
return from(refreshAuthorizationToken()).pipe(catchError(() => {
|
|
98
|
-
logout(true);
|
|
99
|
-
return EMPTY;
|
|
100
|
-
}), concatMap(({ id_token: idToken }) => {
|
|
96
|
+
return from(refreshAuthorizationToken()).pipe(catchError(() => from(logout(true))), concatMap(({ id_token: idToken }) => {
|
|
101
97
|
const authReq = this.cloneReq(req, idToken);
|
|
102
98
|
return next.handle(authReq).pipe(catchError((error) => {
|
|
103
99
|
if (this.isUnauthorized(error)) {
|
|
104
|
-
logout(true);
|
|
100
|
+
return from(logout(true)).pipe(catchError(() => throwError(() => error)), switchMap(() => throwError(() => error)));
|
|
105
101
|
}
|
|
106
102
|
return throwError(() => error);
|
|
107
103
|
}));
|
|
@@ -175,4 +171,4 @@ export class AuthorizationInterceptorService {
|
|
|
175
171
|
type: Inject,
|
|
176
172
|
args: [ANONYMOUS_APIS]
|
|
177
173
|
}] }, { type: i1.ApiGatewayService }, { type: i0.Injector }, { type: i2.DialogService }, { type: i3.SessionManageService }], null); })();
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9hdXRob3JpemF0aW9uL2ludGVyY2VwdG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQU8zQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUNMLEtBQUssRUFDTCxLQUFLLEVBQ0wsSUFBSSxFQUNKLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEVBQ0gsRUFBRSxFQUNGLFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFVLE1BQU0sb0JBQW9CLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFM0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixNQUFNLEVBQ04seUJBQXlCLEdBQzFCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQUVuRCxNQUFNLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO0FBRTFELHdFQUF3RTtBQUN4RSxrREFBa0Q7QUFFbEQsTUFBTSxPQUFPLCtCQUErQjtJQUcxQyxZQUVtQixhQUFxQyxFQUNyQyxVQUE2QixFQUM3QixRQUFrQixFQUNsQixNQUFxQixFQUNyQixhQUFtQztRQUpuQyxrQkFBYSxHQUFiLGFBQWEsQ0FBd0I7UUFDckMsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDN0IsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGtCQUFhLEdBQWIsYUFBYSxDQUFzQjtRQVI5QywwQkFBcUIsR0FBRyxLQUFLLENBQUM7SUFTbkMsQ0FBQztJQUVKLFNBQVMsQ0FBQyxHQUF5QixFQUFFLElBQWlCO1FBQ3BELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdkUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUN6QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELG9GQUFvRjtJQUM1RSxhQUFhLENBQUMsR0FBVztRQUMvQixNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUUvQyxPQUFPLENBQ0wsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUNuQyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQ3BDLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFTyxZQUFZLENBQUMsR0FBVztRQUM5QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRU8sa0JBQWtCLENBQUMsR0FBVztRQUNwQyxPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8sUUFBUSxDQUFDLEdBQXlCLEVBQUUsT0FBZTtRQUN6RCxPQUFPLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUNqRCxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDUixVQUFVLEVBQUU7b0JBQ1YsYUFBYSxFQUFFLFVBQVUsT0FBTyxFQUFFO2lCQUNuQzthQUNGLENBQUM7WUFDSixDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ1YsQ0FBQztJQUVPLHVCQUF1QixDQUM3QixJQUFpQixFQUNqQixHQUF5QixFQUN6QixVQUF5QjtRQUV6QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUQsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU1QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUM5QixVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUU7WUFDdEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVCLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELGFBQWE7WUFDYixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNiLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLENBQUM7WUFFRCxJQUFJLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLENBQUM7WUFFRCxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzFELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3pDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUMxQixTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO2dCQUMvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUM1QixDQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLFNBQVMsQ0FBQyxJQUFpQixFQUFFLEdBQXlCO1FBQzVELE9BQU8sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzNDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDYixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7WUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDNUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDOUIsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO2dCQUN0QyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNmLENBQUM7Z0JBRUQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU8saUJBQWlCLENBQ3ZCLFVBQWtCLEVBQ2xCLEdBQXlCO1FBRXpCLElBQ0UsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQ2hFLENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDcEMsR0FBRyxZQUFZLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUNsRSxDQUFDO0lBQ0osQ0FBQztJQUVPLHdCQUF3QixDQUFDLEdBQXlCO1FBQ3hELElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDcEMsR0FBRyxZQUFZLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUNsRSxDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBcUI7UUFDeEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDO0lBQ3BELENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxRQUEyQjtRQUNsRCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsUUFBUSxDQUFDO1FBQzNCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLGdCQUFnQixDQUFDO0lBQ25FLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUNFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2pFLElBQUksRUFDSixDQUFDO1lBQ0QsY0FBYyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNiLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMvQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsOEJBQThCO1FBQzlCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdEQsWUFBWSxDQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ2xCLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDO1lBQzVDLFdBQVcsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUNwQyxZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDLENBQ0gsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2YsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztZQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxjQUFjLENBQUMsUUFBMkI7UUFDaEQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQztJQUMxRSxDQUFDO0lBRU8sYUFBYSxDQUFDLFFBQTJCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxhQUFhLENBQUM7SUFDekUsQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUFzQjtRQUNyQyxPQUFPLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQztJQUMvRCxDQUFDO0lBRU8sVUFBVSxDQUNoQixVQUFrQixFQUNsQixFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQXdCO1FBRXJDLE1BQU0sYUFBYSxHQUNqQixHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7WUFDcEMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1lBQ3JDLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDO1FBQ2hFLE9BQU8sYUFBYSxJQUFJLFNBQVMsQ0FBQztJQUNwQyxDQUFDO2dHQTFOVSwrQkFBK0IsY0FJaEMsY0FBYzt1RUFKYiwrQkFBK0IsV0FBL0IsK0JBQStCOztpRkFBL0IsK0JBQStCO2NBRDNDLFVBQVU7O3NCQUtOLE1BQU07dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKiBAbW9kdWxlIGF1dGhvcml6YXRpb25cbiAqL1xuXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQge1xuICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgSHR0cEhhbmRsZXIsXG4gIEh0dHBJbnRlcmNlcHRvcixcbiAgSHR0cFJlcXVlc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEVNUFRZLFxuICBORVZFUixcbiAgZnJvbSxcbiAgdGhyb3dFcnJvcixcbiAgY2F0Y2hFcnJvcixcbiAgY29uY2F0TWFwLFxuICB0YWtlLFxuICBtYXAsXG4gIG9mLFxuICBzd2l0Y2hNYXAsXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBcGlHYXRld2F5U2VydmljZSB9IGZyb20gJy4uL2FwaS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IEFOT05ZTU9VU19BUElTLCBjYXRjaFByb21pc2UsIFN0YXR1cyB9IGZyb20gJy4uL2NvcmUvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vdHJhbnNsYXRlL3B1YmxpYy1hcGknO1xuXG5pbXBvcnQge1xuICBjaGVja0F1dGhvcml6YXRpb25Ub2tlbixcbiAgbG9nb3V0LFxuICByZWZyZXNoQXV0aG9yaXphdGlvblRva2VuLFxufSBmcm9tICcuL2F1dGhvcml6YXRpb24nO1xuaW1wb3J0IHsgU0VTU0lPTl9NQU5BR0VfS0VZIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU2Vzc2lvbk1hbmFnZVNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24tbWFuYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcmVhZFN0b3JhZ2VUb2tlbiB9IGZyb20gJy4vc3RvcmFnZS10b2tlbic7XG5cbmNvbnN0IEFVVEhPUklaQVRJT05fQVBJX1BSRUZJWCA9ICcvY29uc29sZS9hcGkvdjIvdG9rZW4vJztcblxuLy8gSW50ZXJjZXB0b3IgbXVzdCBwcm92aWRlIHdpdGggY29ycmVjdCBvcmRlciwgbm90IHByb3ZpZGUgaW4gcm9vdCBoZXJlXG4vLyBodHRwczovL2FuZ3VsYXIuY24vZ3VpZGUvaHR0cCNpbnRlcmNlcHRvci1vcmRlclxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhvcml6YXRpb25JbnRlcmNlcHRvclNlcnZpY2UgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICBwcml2YXRlIHNlc3Npb25JbnZhbGlkQ29uZmlybSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoQU5PTllNT1VTX0FQSVMpXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbm9ueW1vdXNBcGlzOiBBcnJheTxzdHJpbmcgfCBSZWdFeHA+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBpR2F0ZXdheTogQXBpR2F0ZXdheVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IERpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uTWFuYWdlOiBTZXNzaW9uTWFuYWdlU2VydmljZSxcbiAgKSB7fVxuXG4gIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xuICAgIGlmICh0aGlzLmlzUmVsYXRpdmVVcmwocmVxLnVybCkpIHtcbiAgICAgIGlmICghdGhpcy5pc0NvbnNvbGVBcGkocmVxLnVybCkgfHwgIXRoaXMubmVlZENvbnNvbGVBdXRob3JpemF0aW9uKHJlcSkpIHtcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUF1dGhvcml6ZWRSZXF1ZXN0KG5leHQsIHJlcSwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpR2F0ZXdheS5nZXRBcGlBZGRyZXNzKCkucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBjb25jYXRNYXAoYXBpQWRkcmVzcyA9PiB7XG4gICAgICAgIGlmICghdGhpcy5uZWVkQXV0aG9yaXphdGlvbihhcGlBZGRyZXNzLCByZXEpKSB7XG4gICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVBdXRob3JpemVkUmVxdWVzdChuZXh0LCByZXEsIGFwaUFkZHJlc3MpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8vIEEgcmVsYXRpdmUgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGNvbnNvbGUgKG5vIGh0dHAocyk6Ly8gb3IgLy8gcHJlZml4KVxuICBwcml2YXRlIGlzUmVsYXRpdmVVcmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsb3dlckNhc2VVcmwgPSAodXJsIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICFsb3dlckNhc2VVcmwuc3RhcnRzV2l0aCgnaHR0cDovLycpICYmXG4gICAgICAhbG93ZXJDYXNlVXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgJiZcbiAgICAgICFsb3dlckNhc2VVcmwuc3RhcnRzV2l0aCgnLy8nKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGlzQ29uc29sZUFwaSh1cmw6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmlzUmVsYXRpdmVVcmwodXJsKSAmJiB1cmwuc3RhcnRzV2l0aCgnL2NvbnNvbGUvYXBpLycpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0F1dGhvcml6YXRpb25BcGkodXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdXJsLnN0YXJ0c1dpdGgoQVVUSE9SSVpBVElPTl9BUElfUFJFRklYKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVSZXEocmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPiwgaWRUb2tlbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGlkVG9rZW4gJiYgIXJlcS5oZWFkZXJzLmdldCgnQXV0aG9yaXphdGlvbicpXG4gICAgICA/IHJlcS5jbG9uZSh7XG4gICAgICAgICAgc2V0SGVhZGVyczoge1xuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2lkVG9rZW59YCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgOiByZXE7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUF1dGhvcml6ZWRSZXF1ZXN0KFxuICAgIG5leHQ6IEh0dHBIYW5kbGVyLFxuICAgIHJlcTogSHR0cFJlcXVlc3Q8dW5rbm93bj4sXG4gICAgYXBpQWRkcmVzczogc3RyaW5nIHwgbnVsbCxcbiAgKSB7XG4gICAgY29uc3QgaXNDb25zb2xlQXBpID0gdGhpcy5pc0NvbnNvbGVBcGkocmVxLnVybCk7XG4gICAgY29uc3QgaXNBdXRob3JpemF0aW9uQXBpID0gdGhpcy5pc0F1dGhvcml6YXRpb25BcGkocmVxLnVybCk7XG4gICAgY29uc3QgaWRUb2tlbiA9IHJlYWRTdG9yYWdlVG9rZW4oKTtcbiAgICBjb25zdCBhdXRoUmVxID0gdGhpcy5jbG9uZVJlcShyZXEsIGlkVG9rZW4pO1xuXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKGF1dGhSZXEpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNTZXNzaW9uSW52YWxpZChlcnJvcikpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZVNlc3Npb25JbnZhbGlkKCk7XG4gICAgICAgICAgcmV0dXJuIE5FVkVSO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g5b2T55So5oi36KKr56aB55So6Ieq5Yqo55m75Ye6XG4gICAgICAgIGlmICh0aGlzLmlzSW52YWxpZFVzZXIoZXJyb3IpKSB7XG4gICAgICAgICAgbG9nb3V0KHRydWUpO1xuICAgICAgICAgIHJldHVybiBORVZFUjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc1VuYXV0aG9yaXplZChlcnJvcikpIHtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNBdXRob3JpemF0aW9uQXBpKSB7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0NvbnNvbGVBcGkgJiYgdGhpcy5pc1dhdGNoUmVxKGFwaUFkZHJlc3MsIGF1dGhSZXEpKSB7XG4gICAgICAgICAgcmV0dXJuIE5FVkVSO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZyb20oY2hlY2tBdXRob3JpemF0aW9uVG9rZW4oKSkucGlwZShcbiAgICAgICAgICBtYXAoKCkgPT4gZmFsc2UpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YodHJ1ZSkpLFxuICAgICAgICAgIHN3aXRjaE1hcChleHBpcmVkID0+XG4gICAgICAgICAgICBleHBpcmVkIHx8IChpc0NvbnNvbGVBcGkgJiYgIWlkVG9rZW4pXG4gICAgICAgICAgICAgID8gdGhpcy5yZXRyeUF1dGgobmV4dCwgYXV0aFJlcSlcbiAgICAgICAgICAgICAgOiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmV0cnlBdXRoKG5leHQ6IEh0dHBIYW5kbGVyLCByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+KSB7XG4gICAgcmV0dXJuIGZyb20ocmVmcmVzaEF1dGhvcml6YXRpb25Ub2tlbigpKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgIGxvZ291dCh0cnVlKTtcbiAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgfSksXG4gICAgICBjb25jYXRNYXAoKHsgaWRfdG9rZW46IGlkVG9rZW4gfSkgPT4ge1xuICAgICAgICBjb25zdCBhdXRoUmVxID0gdGhpcy5jbG9uZVJlcShyZXEsIGlkVG9rZW4pO1xuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUoYXV0aFJlcSkucGlwZShcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVW5hdXRob3JpemVkKGVycm9yKSkge1xuICAgICAgICAgICAgICBsb2dvdXQodHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG5lZWRBdXRob3JpemF0aW9uKFxuICAgIGFwaUFkZHJlc3M6IHN0cmluZyxcbiAgICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICByZXEuaGVhZGVycy5nZXQoJ0F1dGhvcml6YXRpb24nKSB8fFxuICAgICAgKCF0aGlzLmlzQ29uc29sZUFwaShyZXEudXJsKSAmJiAhcmVxLnVybC5zdGFydHNXaXRoKGFwaUFkZHJlc3MpKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhdGhpcy5hbm9ueW1vdXNBcGlzLnNvbWUoYXBpID0+XG4gICAgICBhcGkgaW5zdGFuY2VvZiBSZWdFeHAgPyBhcGkudGVzdChyZXEudXJsKSA6IHJlcS51cmwuaW5jbHVkZXMoYXBpKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBuZWVkQ29uc29sZUF1dGhvcml6YXRpb24ocmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPikge1xuICAgIGlmIChyZXEuaGVhZGVycy5nZXQoJ0F1dGhvcml6YXRpb24nKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhdGhpcy5hbm9ueW1vdXNBcGlzLnNvbWUoYXBpID0+XG4gICAgICBhcGkgaW5zdGFuY2VvZiBSZWdFeHAgPyBhcGkudGVzdChyZXEudXJsKSA6IHJlcS51cmwuaW5jbHVkZXMoYXBpKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpczQwMSh7IGVycm9yIH06IEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTdGF0dXMoZXJyb3IpICYmIGVycm9yLmNvZGUgPT09IDQwMTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTZXNzaW9uSW52YWxpZChlcnJvclJlczogSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICBjb25zdCB7IGVycm9yIH0gPSBlcnJvclJlcztcbiAgICByZXR1cm4gdGhpcy5pczQwMShlcnJvclJlcykgJiYgZXJyb3IucmVhc29uID09PSAnU2Vzc2lvbkludmFsaWQnO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTZXNzaW9uSW52YWxpZCgpIHtcbiAgICB0aGlzLnNlc3Npb25NYW5hZ2UuY29tcGxldGUoKTtcbiAgICBpZiAoXG4gICAgICBEYXRlLm5vdygpIC0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShTRVNTSU9OX01BTkFHRV9LRVkpKSA8XG4gICAgICA1MDAwXG4gICAgKSB7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFNFU1NJT05fTUFOQUdFX0tFWSk7XG4gICAgICBsb2dvdXQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Vzc2lvbkludmFsaWRDb25maXJtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXNzaW9uSW52YWxpZENvbmZpcm0gPSB0cnVlO1xuICAgIC8vIGZpeCBjaXJjbGUgZGVwZW5kZW5jeSBlcnJvclxuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIGNhdGNoUHJvbWlzZShcbiAgICAgIHRoaXMuZGlhbG9nLmNvbmZpcm0oe1xuICAgICAgICB0aXRsZTogdHJhbnNsYXRlLmdldCgnc2Vzc2lvbl9pbnZhbGlkX2hpbnQnKSxcbiAgICAgICAgY29uZmlybVRleHQ6IHRyYW5zbGF0ZS5nZXQoJ2lfa25vdycpLFxuICAgICAgICBjYW5jZWxCdXR0b246IGZhbHNlLFxuICAgICAgfSksXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5zZXNzaW9uSW52YWxpZENvbmZpcm0gPSBmYWxzZTtcbiAgICAgIGxvZ291dCh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNVbmF1dGhvcml6ZWQoZXJyb3JSZXM6IEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHRoaXMuaXM0MDEoZXJyb3JSZXMpICYmIGVycm9yUmVzLmVycm9yLnJlYXNvbiA9PT0gJ1VuYXV0aG9yaXplZCc7XG4gIH1cblxuICBwcml2YXRlIGlzSW52YWxpZFVzZXIoZXJyb3JSZXM6IEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHRoaXMuaXM0MDEoZXJyb3JSZXMpICYmIGVycm9yUmVzLmVycm9yLnJlYXNvbiA9PT0gJ0ludmFsaWRVc2VyJztcbiAgfVxuXG4gIHByaXZhdGUgaXNTdGF0dXMoZXJyb3I6IHN0cmluZyB8IFN0YXR1cyk6IGVycm9yIGlzIFN0YXR1cyB7XG4gICAgcmV0dXJuIGVycm9yICYmIHR5cGVvZiBlcnJvciAhPT0gJ3N0cmluZycgJiYgJ2NvZGUnIGluIGVycm9yO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1dhdGNoUmVxKFxuICAgIGFwaUFkZHJlc3M6IHN0cmluZyxcbiAgICB7IHVybCwgcGFyYW1zIH06IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuICApIHtcbiAgICBjb25zdCBpc1N0YW5kYXJkQXBpID1cbiAgICAgIHVybC5zdGFydHNXaXRoKGFwaUFkZHJlc3MgKyAnL2FwaS8nKSB8fFxuICAgICAgdXJsLnN0YXJ0c1dpdGgoYXBpQWRkcmVzcyArICcvYXBpcy8nKSB8fFxuICAgICAgdXJsLnN0YXJ0c1dpdGgoYXBpQWRkcmVzcyArICcva3ViZXJuZXRlcy8nKTtcbiAgICBjb25zdCBpc1dhdGNoT24gPSBwYXJhbXMuZ2V0KCd3YXRjaCcpPy50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG4gICAgcmV0dXJuIGlzU3RhbmRhcmRBcGkgJiYgaXNXYXRjaE9uO1xuICB9XG59XG4iXX0=
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9hdXRob3JpemF0aW9uL2ludGVyY2VwdG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQU8zQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUNMLEtBQUssRUFDTCxJQUFJLEVBQ0osVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsRUFDSCxFQUFFLEVBQ0YsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQVUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLE1BQU0sRUFDTix5QkFBeUIsR0FDMUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBRW5ELE1BQU0sd0JBQXdCLEdBQUcsd0JBQXdCLENBQUM7QUFFMUQsd0VBQXdFO0FBQ3hFLGtEQUFrRDtBQUVsRCxNQUFNLE9BQU8sK0JBQStCO0lBRzFDLFlBRW1CLGFBQXFDLEVBQ3JDLFVBQTZCLEVBQzdCLFFBQWtCLEVBQ2xCLE1BQXFCLEVBQ3JCLGFBQW1DO1FB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QUFLLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssY0FBYyxDQUFDO0lBQzFFLENBQUM7SUFFTyxhQUFhLENBQUMsUUFBMkI7UUFDL0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLGFBQWEsQ0FBQztJQUN6RSxDQUFDO0lBRU8sUUFBUSxDQUFDLEtBQXNCO1FBQ3JDLE9BQU8sS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDO0lBQy9ELENBQUM7SUFFTyxVQUFVLENBQ2hCLFVBQWtCLEVBQ2xCLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBd0I7UUFFckMsTUFBTSxhQUFhLEdBQ2pCLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztZQUNwQyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7WUFDckMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFDOUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUM7UUFDaEUsT0FBTyxhQUFhLElBQUksU0FBUyxDQUFDO0lBQ3BDLENBQUM7Z0dBek5VLCtCQUErQixjQUloQyxjQUFjO3VFQUpiLCtCQUErQixXQUEvQiwrQkFBK0I7O2lGQUEvQiwrQkFBK0I7Y0FEM0MsVUFBVTs7c0JBS04sTUFBTTt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqIEBtb2R1bGUgYXV0aG9yaXphdGlvblxuICovXG5cbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYWxhdWRhL3VpJztcbmltcG9ydCB7XG4gIEh0dHBFcnJvclJlc3BvbnNlLFxuICBIdHRwSGFuZGxlcixcbiAgSHR0cEludGVyY2VwdG9yLFxuICBIdHRwUmVxdWVzdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTkVWRVIsXG4gIGZyb20sXG4gIHRocm93RXJyb3IsXG4gIGNhdGNoRXJyb3IsXG4gIGNvbmNhdE1hcCxcbiAgdGFrZSxcbiAgbWFwLFxuICBvZixcbiAgc3dpdGNoTWFwLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQXBpR2F0ZXdheVNlcnZpY2UgfSBmcm9tICcuLi9hcGkvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBBTk9OWU1PVVNfQVBJUywgY2F0Y2hQcm9taXNlLCBTdGF0dXMgfSBmcm9tICcuLi9jb3JlL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL3RyYW5zbGF0ZS9wdWJsaWMtYXBpJztcblxuaW1wb3J0IHtcbiAgY2hlY2tBdXRob3JpemF0aW9uVG9rZW4sXG4gIGxvZ291dCxcbiAgcmVmcmVzaEF1dGhvcml6YXRpb25Ub2tlbixcbn0gZnJvbSAnLi9hdXRob3JpemF0aW9uJztcbmltcG9ydCB7IFNFU1NJT05fTUFOQUdFX0tFWSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNlc3Npb25NYW5hZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXNzaW9uLW1hbmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IHJlYWRTdG9yYWdlVG9rZW4gfSBmcm9tICcuL3N0b3JhZ2UtdG9rZW4nO1xuXG5jb25zdCBBVVRIT1JJWkFUSU9OX0FQSV9QUkVGSVggPSAnL2NvbnNvbGUvYXBpL3YyL3Rva2VuLyc7XG5cbi8vIEludGVyY2VwdG9yIG11c3QgcHJvdmlkZSB3aXRoIGNvcnJlY3Qgb3JkZXIsIG5vdCBwcm92aWRlIGluIHJvb3QgaGVyZVxuLy8gaHR0cHM6Ly9hbmd1bGFyLmNuL2d1aWRlL2h0dHAjaW50ZXJjZXB0b3Itb3JkZXJcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBdXRob3JpemF0aW9uSW50ZXJjZXB0b3JTZXJ2aWNlIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgcHJpdmF0ZSBzZXNzaW9uSW52YWxpZENvbmZpcm0gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEFOT05ZTU9VU19BUElTKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgYW5vbnltb3VzQXBpczogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwaUdhdGV3YXk6IEFwaUdhdGV3YXlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nOiBEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvbk1hbmFnZTogU2Vzc2lvbk1hbmFnZVNlcnZpY2UsXG4gICkge31cblxuICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICBpZiAodGhpcy5pc1JlbGF0aXZlVXJsKHJlcS51cmwpKSB7XG4gICAgICBpZiAoIXRoaXMuaXNDb25zb2xlQXBpKHJlcS51cmwpIHx8ICF0aGlzLm5lZWRDb25zb2xlQXV0aG9yaXphdGlvbihyZXEpKSB7XG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVBdXRob3JpemVkUmVxdWVzdChuZXh0LCByZXEsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwaUdhdGV3YXkuZ2V0QXBpQWRkcmVzcygpLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgY29uY2F0TWFwKGFwaUFkZHJlc3MgPT4ge1xuICAgICAgICBpZiAoIXRoaXMubmVlZEF1dGhvcml6YXRpb24oYXBpQWRkcmVzcywgcmVxKSkge1xuICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlQXV0aG9yaXplZFJlcXVlc3QobmV4dCwgcmVxLCBhcGlBZGRyZXNzKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvLyBBIHJlbGF0aXZlIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjb25zb2xlIChubyBodHRwKHMpOi8vIG9yIC8vIHByZWZpeClcbiAgcHJpdmF0ZSBpc1JlbGF0aXZlVXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbG93ZXJDYXNlVXJsID0gKHVybCB8fCAnJykudG9Mb3dlckNhc2UoKTtcblxuICAgIHJldHVybiAoXG4gICAgICAhbG93ZXJDYXNlVXJsLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJlxuICAgICAgIWxvd2VyQ2FzZVVybC5zdGFydHNXaXRoKCdodHRwczovLycpICYmXG4gICAgICAhbG93ZXJDYXNlVXJsLnN0YXJ0c1dpdGgoJy8vJylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0NvbnNvbGVBcGkodXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlbGF0aXZlVXJsKHVybCkgJiYgdXJsLnN0YXJ0c1dpdGgoJy9jb25zb2xlL2FwaS8nKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBdXRob3JpemF0aW9uQXBpKHVybDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHVybC5zdGFydHNXaXRoKEFVVEhPUklaQVRJT05fQVBJX1BSRUZJWCk7XG4gIH1cblxuICBwcml2YXRlIGNsb25lUmVxKHJlcTogSHR0cFJlcXVlc3Q8dW5rbm93bj4sIGlkVG9rZW46IHN0cmluZykge1xuICAgIHJldHVybiBpZFRva2VuICYmICFyZXEuaGVhZGVycy5nZXQoJ0F1dGhvcml6YXRpb24nKVxuICAgICAgPyByZXEuY2xvbmUoe1xuICAgICAgICAgIHNldEhlYWRlcnM6IHtcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtpZFRva2VufWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIDogcmVxO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBdXRob3JpemVkUmVxdWVzdChcbiAgICBuZXh0OiBIdHRwSGFuZGxlcixcbiAgICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuICAgIGFwaUFkZHJlc3M6IHN0cmluZyB8IG51bGwsXG4gICkge1xuICAgIGNvbnN0IGlzQ29uc29sZUFwaSA9IHRoaXMuaXNDb25zb2xlQXBpKHJlcS51cmwpO1xuICAgIGNvbnN0IGlzQXV0aG9yaXphdGlvbkFwaSA9IHRoaXMuaXNBdXRob3JpemF0aW9uQXBpKHJlcS51cmwpO1xuICAgIGNvbnN0IGlkVG9rZW4gPSByZWFkU3RvcmFnZVRva2VuKCk7XG4gICAgY29uc3QgYXV0aFJlcSA9IHRoaXMuY2xvbmVSZXEocmVxLCBpZFRva2VuKTtcblxuICAgIHJldHVybiBuZXh0LmhhbmRsZShhdXRoUmVxKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzU2Vzc2lvbkludmFsaWQoZXJyb3IpKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVTZXNzaW9uSW52YWxpZCgpO1xuICAgICAgICAgIHJldHVybiBORVZFUjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOW9k+eUqOaIt+iiq+emgeeUqOiHquWKqOeZu+WHulxuICAgICAgICBpZiAodGhpcy5pc0ludmFsaWRVc2VyKGVycm9yKSkge1xuICAgICAgICAgIHJldHVybiBmcm9tKGxvZ291dCh0cnVlKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNVbmF1dGhvcml6ZWQoZXJyb3IpKSB7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQXV0aG9yaXphdGlvbkFwaSkge1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNDb25zb2xlQXBpICYmIHRoaXMuaXNXYXRjaFJlcShhcGlBZGRyZXNzLCBhdXRoUmVxKSkge1xuICAgICAgICAgIHJldHVybiBORVZFUjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmcm9tKGNoZWNrQXV0aG9yaXphdGlvblRva2VuKCkpLnBpcGUoXG4gICAgICAgICAgbWFwKCgpID0+IGZhbHNlKSxcbiAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKHRydWUpKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoZXhwaXJlZCA9PlxuICAgICAgICAgICAgZXhwaXJlZCB8fCAoaXNDb25zb2xlQXBpICYmICFpZFRva2VuKVxuICAgICAgICAgICAgICA/IHRoaXMucmV0cnlBdXRoKG5leHQsIGF1dGhSZXEpXG4gICAgICAgICAgICAgIDogdGhyb3dFcnJvcigoKSA9PiBlcnJvciksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJldHJ5QXV0aChuZXh0OiBIdHRwSGFuZGxlciwgcmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPikge1xuICAgIHJldHVybiBmcm9tKHJlZnJlc2hBdXRob3JpemF0aW9uVG9rZW4oKSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4gZnJvbShsb2dvdXQodHJ1ZSkpKSxcbiAgICAgIGNvbmNhdE1hcCgoeyBpZF90b2tlbjogaWRUb2tlbiB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGF1dGhSZXEgPSB0aGlzLmNsb25lUmVxKHJlcSwgaWRUb2tlbik7XG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShhdXRoUmVxKS5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNVbmF1dGhvcml6ZWQoZXJyb3IpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmcm9tKGxvZ291dCh0cnVlKSkucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IHRocm93RXJyb3IoKCkgPT4gZXJyb3IpKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcikpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBuZWVkQXV0aG9yaXphdGlvbihcbiAgICBhcGlBZGRyZXNzOiBzdHJpbmcsXG4gICAgcmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPixcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgcmVxLmhlYWRlcnMuZ2V0KCdBdXRob3JpemF0aW9uJykgfHxcbiAgICAgICghdGhpcy5pc0NvbnNvbGVBcGkocmVxLnVybCkgJiYgIXJlcS51cmwuc3RhcnRzV2l0aChhcGlBZGRyZXNzKSlcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXMuYW5vbnltb3VzQXBpcy5zb21lKGFwaSA9PlxuICAgICAgYXBpIGluc3RhbmNlb2YgUmVnRXhwID8gYXBpLnRlc3QocmVxLnVybCkgOiByZXEudXJsLmluY2x1ZGVzKGFwaSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbmVlZENvbnNvbGVBdXRob3JpemF0aW9uKHJlcTogSHR0cFJlcXVlc3Q8dW5rbm93bj4pIHtcbiAgICBpZiAocmVxLmhlYWRlcnMuZ2V0KCdBdXRob3JpemF0aW9uJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXMuYW5vbnltb3VzQXBpcy5zb21lKGFwaSA9PlxuICAgICAgYXBpIGluc3RhbmNlb2YgUmVnRXhwID8gYXBpLnRlc3QocmVxLnVybCkgOiByZXEudXJsLmluY2x1ZGVzKGFwaSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXM0MDEoeyBlcnJvciB9OiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgIHJldHVybiB0aGlzLmlzU3RhdHVzKGVycm9yKSAmJiBlcnJvci5jb2RlID09PSA0MDE7XG4gIH1cblxuICBwcml2YXRlIGlzU2Vzc2lvbkludmFsaWQoZXJyb3JSZXM6IEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgY29uc3QgeyBlcnJvciB9ID0gZXJyb3JSZXM7XG4gICAgcmV0dXJuIHRoaXMuaXM0MDEoZXJyb3JSZXMpICYmIGVycm9yLnJlYXNvbiA9PT0gJ1Nlc3Npb25JbnZhbGlkJztcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2Vzc2lvbkludmFsaWQoKSB7XG4gICAgdGhpcy5zZXNzaW9uTWFuYWdlLmNvbXBsZXRlKCk7XG4gICAgaWYgKFxuICAgICAgRGF0ZS5ub3coKSAtIHBhcnNlSW50KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oU0VTU0lPTl9NQU5BR0VfS0VZKSkgPFxuICAgICAgNTAwMFxuICAgICkge1xuICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShTRVNTSU9OX01BTkFHRV9LRVkpO1xuICAgICAgbG9nb3V0KHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlc3Npb25JbnZhbGlkQ29uZmlybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2Vzc2lvbkludmFsaWRDb25maXJtID0gdHJ1ZTtcbiAgICAvLyBmaXggY2lyY2xlIGRlcGVuZGVuY3kgZXJyb3JcbiAgICBjb25zdCB0cmFuc2xhdGUgPSB0aGlzLmluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICBjYXRjaFByb21pc2UoXG4gICAgICB0aGlzLmRpYWxvZy5jb25maXJtKHtcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZS5nZXQoJ3Nlc3Npb25faW52YWxpZF9oaW50JyksXG4gICAgICAgIGNvbmZpcm1UZXh0OiB0cmFuc2xhdGUuZ2V0KCdpX2tub3cnKSxcbiAgICAgICAgY2FuY2VsQnV0dG9uOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2Vzc2lvbkludmFsaWRDb25maXJtID0gZmFsc2U7XG4gICAgICBsb2dvdXQodHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzVW5hdXRob3JpemVkKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgIHJldHVybiB0aGlzLmlzNDAxKGVycm9yUmVzKSAmJiBlcnJvclJlcy5lcnJvci5yZWFzb24gPT09ICdVbmF1dGhvcml6ZWQnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ludmFsaWRVc2VyKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgIHJldHVybiB0aGlzLmlzNDAxKGVycm9yUmVzKSAmJiBlcnJvclJlcy5lcnJvci5yZWFzb24gPT09ICdJbnZhbGlkVXNlcic7XG4gIH1cblxuICBwcml2YXRlIGlzU3RhdHVzKGVycm9yOiBzdHJpbmcgfCBTdGF0dXMpOiBlcnJvciBpcyBTdGF0dXMge1xuICAgIHJldHVybiBlcnJvciAmJiB0eXBlb2YgZXJyb3IgIT09ICdzdHJpbmcnICYmICdjb2RlJyBpbiBlcnJvcjtcbiAgfVxuXG4gIHByaXZhdGUgaXNXYXRjaFJlcShcbiAgICBhcGlBZGRyZXNzOiBzdHJpbmcsXG4gICAgeyB1cmwsIHBhcmFtcyB9OiBIdHRwUmVxdWVzdDx1bmtub3duPixcbiAgKSB7XG4gICAgY29uc3QgaXNTdGFuZGFyZEFwaSA9XG4gICAgICB1cmwuc3RhcnRzV2l0aChhcGlBZGRyZXNzICsgJy9hcGkvJykgfHxcbiAgICAgIHVybC5zdGFydHNXaXRoKGFwaUFkZHJlc3MgKyAnL2FwaXMvJykgfHxcbiAgICAgIHVybC5zdGFydHNXaXRoKGFwaUFkZHJlc3MgKyAnL2t1YmVybmV0ZXMvJyk7XG4gICAgY29uc3QgaXNXYXRjaE9uID0gcGFyYW1zLmdldCgnd2F0Y2gnKT8udG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuICAgIHJldHVybiBpc1N0YW5kYXJkQXBpICYmIGlzV2F0Y2hPbjtcbiAgfVxufVxuIl19
|
|
@@ -3,16 +3,17 @@
|
|
|
3
3
|
* @module authorization
|
|
4
4
|
*/
|
|
5
5
|
import { Injectable } from '@angular/core';
|
|
6
|
-
import {
|
|
6
|
+
import { from, of, catchError, map, timer, fromEvent, merge, timeout, } from 'rxjs';
|
|
7
7
|
import { getGlobalEnvironments, TRUE, catchPromise } from '../core/public-api';
|
|
8
|
-
import { checkAuthorizationToken,
|
|
8
|
+
import { checkAuthorizationToken, getCachedAccountInfo, logout, logoutAudit, refreshAuthorizationToken, } from './authorization';
|
|
9
9
|
import { LOADING_CACHE, HEARTBEAT_POLLING } from './constants';
|
|
10
10
|
import { readStorageAliveRecord, refreshStorageAliveRecord, readStorageToken, } from './storage-token';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
12
12
|
export class AuthorizationStateService {
|
|
13
|
+
get payloadSnapshot() {
|
|
14
|
+
return getCachedAccountInfo() || null;
|
|
15
|
+
}
|
|
13
16
|
constructor() {
|
|
14
|
-
this.state = getAuthorizationState();
|
|
15
|
-
this.payloadSnapshot = this.state.info ?? null;
|
|
16
17
|
this.logout = logout;
|
|
17
18
|
if (getGlobalEnvironments('CLOSE_BROWSER_END_SESSION') === TRUE) {
|
|
18
19
|
const aliveRecord = readStorageAliveRecord();
|
|
@@ -27,21 +28,18 @@ export class AuthorizationStateService {
|
|
|
27
28
|
logoutWithAudit() {
|
|
28
29
|
catchPromise(logoutAudit())
|
|
29
30
|
.pipe(timeout(1000), map(res => res?.logout_redirect_url))
|
|
30
|
-
.subscribe(redirectUrl =>
|
|
31
|
+
.subscribe(redirectUrl => {
|
|
32
|
+
logout(redirectUrl);
|
|
33
|
+
});
|
|
31
34
|
}
|
|
32
35
|
refreshToken() {
|
|
33
|
-
return from(refreshAuthorizationToken()).pipe(catchError(() =>
|
|
34
|
-
logout(true);
|
|
35
|
-
return EMPTY;
|
|
36
|
-
}));
|
|
36
|
+
return from(refreshAuthorizationToken()).pipe(catchError(() => from(logout(true))));
|
|
37
37
|
}
|
|
38
38
|
checkToken() {
|
|
39
|
-
return from(checkAuthorizationToken())
|
|
40
|
-
this.payloadSnapshot = info;
|
|
41
|
-
}));
|
|
39
|
+
return from(checkAuthorizationToken());
|
|
42
40
|
}
|
|
43
41
|
getTokenPayload() {
|
|
44
|
-
return of(this.
|
|
42
|
+
return of(this.payloadSnapshot);
|
|
45
43
|
}
|
|
46
44
|
getAccountInfo() {
|
|
47
45
|
return of(this.payloadSnapshot || {});
|
|
@@ -56,4 +54,4 @@ export class AuthorizationStateService {
|
|
|
56
54
|
type: Injectable,
|
|
57
55
|
args: [{ providedIn: 'root' }]
|
|
58
56
|
}], () => [], null); })();
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9hdXRob3JpemF0aW9uL3N0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsSUFBSSxFQUNKLEVBQUUsRUFDRixVQUFVLEVBQ1YsR0FBRyxFQUNILEtBQUssRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE9BQU8sR0FDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFL0UsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLFdBQVcsRUFDWCx5QkFBeUIsR0FDMUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9ELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIseUJBQXlCLEVBQ3pCLGdCQUFnQixHQUNqQixNQUFNLGlCQUFpQixDQUFDOztBQUd6QixNQUFNLE9BQU8seUJBQXlCO0lBQ3BDLElBQUksZUFBZTtRQUNqQixPQUFPLG9CQUFvQixFQUFFLElBQUksSUFBSSxDQUFDO0lBQ3hDLENBQUM7SUFJRDtRQUZBLFdBQU0sR0FBRyxNQUFNLENBQUM7UUFHZCxJQUFJLHFCQUFxQixDQUFDLDJCQUEyQixDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDaEUsTUFBTSxXQUFXLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQztZQUM3QyxJQUNFLENBQUMsV0FBVztnQkFDWixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsV0FBVyxHQUFHLGlCQUFpQixHQUFHLGFBQWEsRUFDNUQsQ0FBQztnQkFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU87WUFDVCxDQUFDO1lBRUQsS0FBSyxDQUNILEtBQUssQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsRUFDM0IsU0FBUyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FDbEMsQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDeEIsSUFBSSxDQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFDYixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsQ0FDckM7YUFDQSxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUMzQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ3JDLENBQUM7SUFDSixDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFvQixDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQzswRkF4RFUseUJBQXlCO3VFQUF6Qix5QkFBeUIsV0FBekIseUJBQXlCLG1CQURaLE1BQU07O2lGQUNuQix5QkFBeUI7Y0FEckMsVUFBVTtlQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKiBAbW9kdWxlIGF1dGhvcml6YXRpb25cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBmcm9tLFxuICBvZixcbiAgY2F0Y2hFcnJvcixcbiAgbWFwLFxuICB0aW1lcixcbiAgZnJvbUV2ZW50LFxuICBtZXJnZSxcbiAgdGltZW91dCxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGdldEdsb2JhbEVudmlyb25tZW50cywgVFJVRSwgY2F0Y2hQcm9taXNlIH0gZnJvbSAnLi4vY29yZS9wdWJsaWMtYXBpJztcblxuaW1wb3J0IHtcbiAgY2hlY2tBdXRob3JpemF0aW9uVG9rZW4sXG4gIGdldENhY2hlZEFjY291bnRJbmZvLFxuICBsb2dvdXQsXG4gIGxvZ291dEF1ZGl0LFxuICByZWZyZXNoQXV0aG9yaXphdGlvblRva2VuLFxufSBmcm9tICcuL2F1dGhvcml6YXRpb24nO1xuaW1wb3J0IHsgTE9BRElOR19DQUNIRSwgSEVBUlRCRUFUX1BPTExJTkcgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICByZWFkU3RvcmFnZUFsaXZlUmVjb3JkLFxuICByZWZyZXNoU3RvcmFnZUFsaXZlUmVjb3JkLFxuICByZWFkU3RvcmFnZVRva2VuLFxufSBmcm9tICcuL3N0b3JhZ2UtdG9rZW4nO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEF1dGhvcml6YXRpb25TdGF0ZVNlcnZpY2Uge1xuICBnZXQgcGF5bG9hZFNuYXBzaG90KCkge1xuICAgIHJldHVybiBnZXRDYWNoZWRBY2NvdW50SW5mbygpIHx8IG51bGw7XG4gIH1cblxuICBsb2dvdXQgPSBsb2dvdXQ7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKGdldEdsb2JhbEVudmlyb25tZW50cygnQ0xPU0VfQlJPV1NFUl9FTkRfU0VTU0lPTicpID09PSBUUlVFKSB7XG4gICAgICBjb25zdCBhbGl2ZVJlY29yZCA9IHJlYWRTdG9yYWdlQWxpdmVSZWNvcmQoKTtcbiAgICAgIGlmIChcbiAgICAgICAgIWFsaXZlUmVjb3JkIHx8XG4gICAgICAgIERhdGUubm93KCkgLSBhbGl2ZVJlY29yZCA+IEhFQVJUQkVBVF9QT0xMSU5HICsgTE9BRElOR19DQUNIRVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubG9nb3V0V2l0aEF1ZGl0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRpbWVyKDAsIEhFQVJUQkVBVF9QT0xMSU5HKSxcbiAgICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ2JlZm9yZXVubG9hZCcpLFxuICAgICAgKS5zdWJzY3JpYmUocmVmcmVzaFN0b3JhZ2VBbGl2ZVJlY29yZCk7XG4gICAgfVxuICB9XG5cbiAgbG9nb3V0V2l0aEF1ZGl0KCkge1xuICAgIGNhdGNoUHJvbWlzZShsb2dvdXRBdWRpdCgpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRpbWVvdXQoMTAwMCksXG4gICAgICAgIG1hcChyZXMgPT4gcmVzPy5sb2dvdXRfcmVkaXJlY3RfdXJsKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUocmVkaXJlY3RVcmwgPT4ge1xuICAgICAgICBsb2dvdXQocmVkaXJlY3RVcmwpO1xuICAgICAgfSk7XG4gIH1cblxuICByZWZyZXNoVG9rZW4oKSB7XG4gICAgcmV0dXJuIGZyb20ocmVmcmVzaEF1dGhvcml6YXRpb25Ub2tlbigpKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiBmcm9tKGxvZ291dCh0cnVlKSkpLFxuICAgICk7XG4gIH1cblxuICBjaGVja1Rva2VuKCkge1xuICAgIHJldHVybiBmcm9tKGNoZWNrQXV0aG9yaXphdGlvblRva2VuKCkpO1xuICB9XG5cbiAgZ2V0VG9rZW5QYXlsb2FkPFQ+KCkge1xuICAgIHJldHVybiBvZih0aGlzLnBheWxvYWRTbmFwc2hvdCBhcyBUKTtcbiAgfVxuXG4gIGdldEFjY291bnRJbmZvKCkge1xuICAgIHJldHVybiBvZih0aGlzLnBheWxvYWRTbmFwc2hvdCB8fCB7fSk7XG4gIH1cblxuICBnZXRUb2tlbkJ5U3RvcmFnZSgpIHtcbiAgICByZXR1cm4gcmVhZFN0b3JhZ2VUb2tlbigpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,16 +1,6 @@
|
|
|
1
1
|
import { noop } from '../core/public-api';
|
|
2
2
|
import { TOKEN_INFO_API, TOKEN_REFRESH_API } from './constants';
|
|
3
3
|
import { readStorageToken, writeStorageToken } from './storage-token';
|
|
4
|
-
let cachedAccountInfo;
|
|
5
|
-
export function resetAuthRuntimeCache() {
|
|
6
|
-
cachedAccountInfo = undefined;
|
|
7
|
-
}
|
|
8
|
-
export function getCachedAccountInfo() {
|
|
9
|
-
return cachedAccountInfo;
|
|
10
|
-
}
|
|
11
|
-
export function setCachedAccountInfo(info) {
|
|
12
|
-
cachedAccountInfo = info;
|
|
13
|
-
}
|
|
14
4
|
export function createAuthorizedFetchInit(init = {}) {
|
|
15
5
|
const headers = new Headers(init.headers);
|
|
16
6
|
const idToken = readStorageToken();
|
|
@@ -23,7 +13,6 @@ export function createAuthorizedFetchInit(init = {}) {
|
|
|
23
13
|
headers,
|
|
24
14
|
};
|
|
25
15
|
}
|
|
26
|
-
// Sends request with auth header but no 401 retry — for token management APIs
|
|
27
16
|
export function fetchTokenApi(input, init) {
|
|
28
17
|
return fetch(input, createAuthorizedFetchInit(init));
|
|
29
18
|
}
|
|
@@ -35,60 +24,34 @@ export async function fetchAuthorizedResource(input, init) {
|
|
|
35
24
|
const { refreshAuthorizationToken, logout } = await import('./authorization');
|
|
36
25
|
const refreshed = await refreshAuthorizationToken().catch(() => null);
|
|
37
26
|
if (!refreshed) {
|
|
38
|
-
logout(true);
|
|
27
|
+
await logout(true);
|
|
39
28
|
return new Promise(noop);
|
|
40
29
|
}
|
|
41
30
|
return fetch(input, createAuthorizedFetchInit(init));
|
|
42
31
|
}
|
|
43
|
-
export async function requestTokenInfo(
|
|
44
|
-
|
|
45
|
-
|
|
32
|
+
export async function requestTokenInfo() {
|
|
33
|
+
const response = await fetchTokenApi(TOKEN_INFO_API);
|
|
34
|
+
if (response.ok) {
|
|
35
|
+
return response.json();
|
|
46
36
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return info;
|
|
52
|
-
}
|
|
53
|
-
if (response.status === 401) {
|
|
54
|
-
cachedAccountInfo = null;
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
throw createResponseError(response, 'Failed to fetch token info');
|
|
58
|
-
});
|
|
37
|
+
if (response.status === 401) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
throw createResponseError(response, 'Failed to fetch token info');
|
|
59
41
|
}
|
|
60
42
|
export async function requestTokenRefresh() {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
cachedAccountInfo = undefined;
|
|
68
|
-
return tokenResponse;
|
|
69
|
-
}
|
|
70
|
-
if (!response.ok) {
|
|
71
|
-
cachedAccountInfo = null;
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
throw createResponseError(response, 'Failed to refresh token');
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
export async function resolveTokenInfoWithRefresh() {
|
|
78
|
-
try {
|
|
79
|
-
const info = await requestTokenInfo();
|
|
80
|
-
if (info) {
|
|
81
|
-
return info;
|
|
82
|
-
}
|
|
83
|
-
const refreshed = await requestTokenRefresh();
|
|
84
|
-
if (!refreshed) {
|
|
85
|
-
return null;
|
|
43
|
+
const response = await fetchTokenApi(TOKEN_REFRESH_API);
|
|
44
|
+
if (response.ok) {
|
|
45
|
+
const tokenResponse = await response.json();
|
|
46
|
+
if (tokenResponse.id_token) {
|
|
47
|
+
writeStorageToken(tokenResponse.id_token);
|
|
86
48
|
}
|
|
87
|
-
return
|
|
49
|
+
return tokenResponse;
|
|
88
50
|
}
|
|
89
|
-
|
|
51
|
+
if (!response.ok) {
|
|
90
52
|
return null;
|
|
91
53
|
}
|
|
54
|
+
throw createResponseError(response, 'Failed to refresh token');
|
|
92
55
|
}
|
|
93
56
|
function createResponseError(response, message) {
|
|
94
57
|
const error = new Error(`${message}: ${response.status} ${response.statusText}`);
|
|
@@ -98,4 +61,4 @@ function createResponseError(response, message) {
|
|
|
98
61
|
});
|
|
99
62
|
return error;
|
|
100
63
|
}
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2F1dGhvcml6YXRpb24vdG9rZW4tY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBNEJ0RSxNQUFNLFVBQVUseUJBQXlCLENBQUMsT0FBb0IsRUFBRTtJQUM5RCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUVuQyxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxVQUFVLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE9BQU87UUFDTCxHQUFHLElBQUk7UUFDUCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxhQUFhO1FBQzlDLE9BQU87S0FDYyxDQUFDO0FBQzFCLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQXdCLEVBQUUsSUFBa0I7SUFDeEUsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCLENBQzNDLEtBQXdCLEVBQ3hCLElBQWtCO0lBRWxCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRXJFLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUM1QixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxFQUFFLHlCQUF5QixFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDOUUsTUFBTSxTQUFTLEdBQUcsTUFBTSx5QkFBeUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV0RSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixPQUFPLElBQUksT0FBTyxDQUFRLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0I7SUFDcEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFckQsSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDaEIsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLG1CQUFtQixDQUFDLFFBQVEsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQjtJQUN2QyxNQUFNLFFBQVEsR0FBRyxNQUFNLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRXhELElBQUksUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sYUFBYSxHQUFrQixNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUUzRCxJQUFJLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQixpQkFBaUIsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sbUJBQW1CLENBQUMsUUFBUSxFQUFFLHlCQUF5QixDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsUUFBa0IsRUFBRSxPQUFlO0lBQzlELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUNyQixHQUFHLE9BQU8sS0FBSyxRQUFRLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FDeEQsQ0FBQztJQUVGLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ25CLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtRQUN2QixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7S0FDaEMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL2NvcmUvcHVibGljLWFwaSc7XG5cbmltcG9ydCB7IFRPS0VOX0lORk9fQVBJLCBUT0tFTl9SRUZSRVNIX0FQSSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IHJlYWRTdG9yYWdlVG9rZW4sIHdyaXRlU3RvcmFnZVRva2VuIH0gZnJvbSAnLi9zdG9yYWdlLXRva2VuJztcblxuZXhwb3J0IGludGVyZmFjZSBBY2NvdW50SW5mbyB7XG4gIGlzcz86IHN0cmluZztcbiAgc3ViPzogc3RyaW5nO1xuICBhdWQ/OiBzdHJpbmc7XG4gIGV4cD86IG51bWJlcjtcbiAgaWF0PzogbnVtYmVyO1xuICBhenA/OiBzdHJpbmc7XG4gIGF0X2hhc2g/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBlbWFpbF92ZXJpZmllZD86IHRydWU7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xuICBleHQ/OiB7XG4gICAgaXNfYWRtaW4/OiBib29sZWFuO1xuICAgIGNvbm5faWQ/OiBib29sZWFuO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuUmVzcG9uc2Uge1xuICB0b2tlbl9zdG9yYWdlOiBzdHJpbmc7XG4gIHRva2VuX3R5cGU6IHN0cmluZztcbiAgZXhwaXJlX2F0OiBzdHJpbmc7XG4gIGlzc3VlZF9hdDogc3RyaW5nO1xuICBpZF90b2tlbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF1dGhvcml6ZWRGZXRjaEluaXQoaW5pdDogUmVxdWVzdEluaXQgPSB7fSkge1xuICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5pdC5oZWFkZXJzKTtcbiAgY29uc3QgaWRUb2tlbiA9IHJlYWRTdG9yYWdlVG9rZW4oKTtcblxuICBpZiAoaWRUb2tlbiAmJiAhaGVhZGVycy5oYXMoJ0F1dGhvcml6YXRpb24nKSkge1xuICAgIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke2lkVG9rZW59YCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLmluaXQsXG4gICAgY3JlZGVudGlhbHM6IGluaXQuY3JlZGVudGlhbHMgPz8gJ3NhbWUtb3JpZ2luJyxcbiAgICBoZWFkZXJzLFxuICB9IHNhdGlzZmllcyBSZXF1ZXN0SW5pdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoVG9rZW5BcGkoaW5wdXQ6IFJlcXVlc3RJbmZvIHwgVVJMLCBpbml0PzogUmVxdWVzdEluaXQpIHtcbiAgcmV0dXJuIGZldGNoKGlucHV0LCBjcmVhdGVBdXRob3JpemVkRmV0Y2hJbml0KGluaXQpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoQXV0aG9yaXplZFJlc291cmNlKFxuICBpbnB1dDogUmVxdWVzdEluZm8gfCBVUkwsXG4gIGluaXQ/OiBSZXF1ZXN0SW5pdCxcbikge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGlucHV0LCBjcmVhdGVBdXRob3JpemVkRmV0Y2hJbml0KGluaXQpKTtcblxuICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSA0MDEpIHtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBjb25zdCB7IHJlZnJlc2hBdXRob3JpemF0aW9uVG9rZW4sIGxvZ291dCB9ID0gYXdhaXQgaW1wb3J0KCcuL2F1dGhvcml6YXRpb24nKTtcbiAgY29uc3QgcmVmcmVzaGVkID0gYXdhaXQgcmVmcmVzaEF1dGhvcml6YXRpb25Ub2tlbigpLmNhdGNoKCgpID0+IG51bGwpO1xuXG4gIGlmICghcmVmcmVzaGVkKSB7XG4gICAgYXdhaXQgbG9nb3V0KHRydWUpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxuZXZlcj4obm9vcCk7XG4gIH1cblxuICByZXR1cm4gZmV0Y2goaW5wdXQsIGNyZWF0ZUF1dGhvcml6ZWRGZXRjaEluaXQoaW5pdCkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFRva2VuSW5mbygpOiBQcm9taXNlPEFjY291bnRJbmZvIHwgbnVsbD4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoVG9rZW5BcGkoVE9LRU5fSU5GT19BUEkpO1xuXG4gIGlmIChyZXNwb25zZS5vaykge1xuICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gIH1cblxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRocm93IGNyZWF0ZVJlc3BvbnNlRXJyb3IocmVzcG9uc2UsICdGYWlsZWQgdG8gZmV0Y2ggdG9rZW4gaW5mbycpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFRva2VuUmVmcmVzaCgpOiBQcm9taXNlPFRva2VuUmVzcG9uc2UgfCBudWxsPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hUb2tlbkFwaShUT0tFTl9SRUZSRVNIX0FQSSk7XG5cbiAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgY29uc3QgdG9rZW5SZXNwb25zZTogVG9rZW5SZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgIGlmICh0b2tlblJlc3BvbnNlLmlkX3Rva2VuKSB7XG4gICAgICB3cml0ZVN0b3JhZ2VUb2tlbih0b2tlblJlc3BvbnNlLmlkX3Rva2VuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW5SZXNwb25zZTtcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRocm93IGNyZWF0ZVJlc3BvbnNlRXJyb3IocmVzcG9uc2UsICdGYWlsZWQgdG8gcmVmcmVzaCB0b2tlbicpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXNwb25zZUVycm9yKHJlc3BvbnNlOiBSZXNwb25zZSwgbWVzc2FnZTogc3RyaW5nKSB7XG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgIGAke21lc3NhZ2V9OiAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWAsXG4gICk7XG5cbiAgT2JqZWN0LmFzc2lnbihlcnJvciwge1xuICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gIH0pO1xuXG4gIHJldHVybiBlcnJvcjtcbn1cbiJdfQ==
|
package/exec/module.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import * as i5 from "../translate/translate.module";
|
|
|
9
9
|
import * as i6 from "@alauda/ui";
|
|
10
10
|
import * as i7 from "../widget/text-ellipsis/component";
|
|
11
11
|
import * as i8 from "../widget/loading-mask/loading-mask.component";
|
|
12
|
-
export declare const EXPORTS: (typeof
|
|
12
|
+
export declare const EXPORTS: (typeof TerminalComponent | typeof TerminalExtraContentDirective)[];
|
|
13
13
|
export declare class EXECModule {
|
|
14
14
|
static ɵfac: i0.ɵɵFactoryDeclaration<EXECModule, never>;
|
|
15
15
|
static ɵmod: i0.ɵɵNgModuleDeclaration<EXECModule, [typeof i1.TerminalGroupComponent, typeof i2.TerminalComponent, typeof i3.TerminalPlaceholderComponent, typeof i1.TerminalExtraButtonDirective, typeof i1.TerminalExtraContentDirective], [typeof i4.CommonModule, typeof i5.TranslateModule, typeof i6.ButtonModule, typeof i6.DropdownModule, typeof i6.IconModule, typeof i6.InlineAlertModule, typeof i6.InputModule, typeof i6.TabsModule, typeof i6.TooltipModule, typeof i6.ThemeModule, typeof i7.TextEllipsisComponent, typeof i8.LoadingMaskComponent], [typeof i1.TerminalGroupComponent, typeof i2.TerminalComponent, typeof i3.TerminalPlaceholderComponent, typeof i1.TerminalExtraButtonDirective, typeof i1.TerminalExtraContentDirective]>;
|
|
@@ -4,7 +4,7 @@ export declare class AsyncFunctionValidatorDirective implements AsyncValidator {
|
|
|
4
4
|
aclAsyncValidateFn: AsyncValidatorFn | AsyncValidatorFn[];
|
|
5
5
|
get asyncValidateFn(): AsyncValidatorFn;
|
|
6
6
|
onValidatorChange: () => void;
|
|
7
|
-
validate(control: AbstractControl):
|
|
7
|
+
validate(control: AbstractControl): Promise<import("@angular/forms").ValidationErrors> | import("rxjs").Observable<import("@angular/forms").ValidationErrors>;
|
|
8
8
|
registerOnValidatorChange(fn: () => void): void;
|
|
9
9
|
static ɵfac: i0.ɵɵFactoryDeclaration<AsyncFunctionValidatorDirective, never>;
|
|
10
10
|
static ɵdir: i0.ɵɵDirectiveDeclaration<AsyncFunctionValidatorDirective, "[aclAsyncValidateFn][ngModel],[aclAsyncValidateFn][formControl],[aclAsyncValidateFn][formControlName]", never, { "aclAsyncValidateFn": { "alias": "aclAsyncValidateFn"; "required": false; }; }, {}, never, never, true, never>;
|
|
@@ -14,11 +14,11 @@ export declare class K8SResourcePagedList<R extends KubernetesResource = Kuberne
|
|
|
14
14
|
loading$: Observable<boolean>;
|
|
15
15
|
items$: Observable<R[]>;
|
|
16
16
|
totalItems$: Observable<number>;
|
|
17
|
-
loadError$: Observable<
|
|
17
|
+
loadError$: Observable<HttpErrorResponse | Status>;
|
|
18
18
|
$loading: Signal<boolean>;
|
|
19
19
|
$items: Signal<R[]>;
|
|
20
20
|
$totalItems: Signal<number>;
|
|
21
|
-
$loadError: Signal<
|
|
21
|
+
$loadError: Signal<HttpErrorResponse | Status>;
|
|
22
22
|
constructor(config: PagedListConfig<R, P>);
|
|
23
23
|
reload(): void;
|
|
24
24
|
private sourceLoadState;
|
package/package.json
CHANGED
package/table/helper.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare function defaultFilter<T extends string | number>(value: T, filterValue: T, _item: unknown, name: string): boolean;
|
|
2
|
-
export declare function defaultSorter<T>(a: T, b: T):
|
|
2
|
+
export declare function defaultSorter<T>(a: T, b: T): 1 | 0 | -1;
|
package/table/module.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ import * as i24 from "../widget/field-set/column/component";
|
|
|
28
28
|
import * as i25 from "../translate/translate.pipe";
|
|
29
29
|
import * as i26 from "../translate/translate.directive";
|
|
30
30
|
import * as i27 from "../translate/intl-format.pipes";
|
|
31
|
-
export declare const COMMON_TABLE_EXPORTABLE: (typeof
|
|
31
|
+
export declare const COMMON_TABLE_EXPORTABLE: (typeof TableCellDefDirective | typeof TableComponent)[];
|
|
32
32
|
export declare class TableModule {
|
|
33
33
|
static ɵfac: i0.ɵɵFactoryDeclaration<TableModule, never>;
|
|
34
34
|
static ɵmod: i0.ɵɵNgModuleDeclaration<TableModule, [typeof i1.TableComponent, typeof i2.TableCellDefDirective], [typeof i3.CommonModule, typeof i4.RouterModule, typeof i5.ButtonModule, typeof i5.DropdownModule, typeof i5.IconModule, typeof i5.SortModule, typeof i5.TooltipModule, typeof i5.TableModule, typeof i6.K8SResourceListModule, typeof i7.CoreModule, typeof i8.ZeroStateComponent, typeof i9.LoadingMaskComponent, typeof i10.ConfirmDeleteComponent, typeof i11.FoldableBlockComponent, typeof i12.RelativeTimeComponent, typeof i10.ConfirmDeleteContentDirective, typeof i10.ConfirmDeleteLabelDirective, typeof i10.ConfirmDeleteTipDirective, typeof i13.DisabledContainerComponent, typeof i14.TerminatingTagComponent, typeof i15.FoldableItemInTableComponent, typeof i16.SelectPrefixLabelDirective, typeof i17.TextWithUrlComponent, typeof i18.CardSectionComponent, typeof i19.CurrentTimeComponent, typeof i20.TextEllipsisComponent, typeof i21.ResourceMultiSelectComponent, typeof i22.FieldSetItemActionDirective, typeof i22.FieldSetItemComponent, typeof i23.FieldSetGroupComponent, typeof i24.FieldSetColumnComponent, typeof i24.FieldSetColumnGroupComponent, typeof i25.TranslatePipe, typeof i26.TranslateDirective, typeof i26.TranslateMatchDirective, typeof i26.TranslateTextDirective, typeof i27.IntlNumberPipe, typeof i27.IntlCurrencyPipe, typeof i27.IntlPercentPipe, typeof i27.IntlDatePipe, typeof i27.IntlDateTimePipe, typeof i27.IntlRelativeTimePipe, typeof i5.PaginatorModule, typeof i13.DisabledContainerComponent], [typeof i1.TableComponent, typeof i2.TableCellDefDirective]>;
|
|
@@ -146,7 +146,7 @@ export declare class ViewChartComponent implements OnChanges, AfterViewInit, OnD
|
|
|
146
146
|
get scaleType(): ScaleType;
|
|
147
147
|
get isScaleTime(): boolean;
|
|
148
148
|
get options(): ViewOptions;
|
|
149
|
-
get tooltipTriggerType(): "
|
|
149
|
+
get tooltipTriggerType(): "item" | "none" | "axis";
|
|
150
150
|
getTriggerType(): "none" | "axis" | "item";
|
|
151
151
|
constructor(componentFactoryResolver: ComponentFactoryResolver, injector: Injector, appRef: ApplicationRef, translate: TranslateService, cdr: ChangeDetectorRef, viewContainerRef: ViewContainerRef);
|
|
152
152
|
ngOnChanges({ enableZoom }: SimpleChanges): void;
|