@yelon/bis 17.3.1 → 18.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +1 -1
- package/config/bis.config.d.ts +3 -3
- package/config/index.d.ts +5 -5
- package/config/public_api.d.ts +1 -1
- package/esm2022/bis.mjs +4 -4
- package/esm2022/config/bis.config.mjs +14 -14
- package/esm2022/config/config.mjs +4 -4
- package/esm2022/config/public_api.mjs +1 -1
- package/esm2022/layout/layout-basic.component.mjs +518 -508
- package/esm2022/layout/layout-nav-application.component.mjs +372 -372
- package/esm2022/layout/layout-nav-group.component.mjs +166 -162
- package/esm2022/layout/layout-nav-tile.component.mjs +14 -14
- package/esm2022/layout/layout.mjs +4 -4
- package/esm2022/layout/layout.module.mjs +53 -53
- package/esm2022/layout/public_api.mjs +5 -5
- package/esm2022/public_api.mjs +8 -8
- package/esm2022/src/bis.module.mjs +16 -16
- package/esm2022/src/helper.mjs +44 -44
- package/esm2022/src/provide.mjs +7 -7
- package/esm2022/src/refresh-token.mjs +78 -78
- package/esm2022/src/startup.service.mjs +183 -183
- package/esm2022/src/yunzai-act.guard.mjs +87 -87
- package/esm2022/src/yunzai-analysis-addon.guard.mjs +98 -98
- package/esm2022/src/yunzai-default.interceptor.mjs +62 -62
- package/esm2022/yunzai-widgets/public_api.mjs +6 -6
- package/esm2022/yunzai-widgets/yunzai-clear-storage.component.mjs +46 -46
- package/esm2022/yunzai-widgets/yunzai-fullscreen.component.mjs +46 -46
- package/esm2022/yunzai-widgets/yunzai-i18n.component.mjs +138 -138
- package/esm2022/yunzai-widgets/yunzai-notify.component.mjs +179 -179
- package/esm2022/yunzai-widgets/yunzai-user.component.mjs +119 -119
- package/esm2022/yunzai-widgets/yunzai-widget.module.mjs +61 -61
- package/esm2022/yunzai-widgets/yunzai-widgets.mjs +4 -4
- package/fesm2022/bis.mjs +559 -559
- package/fesm2022/config.mjs +21 -21
- package/fesm2022/layout.mjs +1097 -1083
- package/fesm2022/layout.mjs.map +1 -1
- package/fesm2022/yunzai-widgets.mjs +563 -563
- package/index.d.ts +5 -5
- package/index.less +1 -1
- package/layout/index.d.ts +5 -5
- package/layout/layout-basic.component.d.ts +54 -54
- package/layout/layout-nav-application.component.d.ts +26 -26
- package/layout/layout-nav-group.component.d.ts +14 -14
- package/layout/layout-nav-tile.component.d.ts +5 -5
- package/layout/layout.module.d.ts +18 -18
- package/layout/public_api.d.ts +5 -5
- package/layout/style/index.less +181 -182
- package/package.json +68 -68
- package/public_api.d.ts +8 -8
- package/src/bis.module.d.ts +8 -8
- package/src/helper.d.ts +16 -16
- package/src/provide.d.ts +2 -2
- package/src/refresh-token.d.ts +6 -6
- package/src/startup.service.d.ts +24 -24
- package/src/yunzai-act.guard.d.ts +20 -20
- package/src/yunzai-analysis-addon.guard.d.ts +26 -26
- package/src/yunzai-default.interceptor.d.ts +2 -2
- package/theme-compact.less +3 -3
- package/theme-dark.less +46 -46
- package/theme-default.less +48 -48
- package/theme-variable.less +1 -0
- package/yunzai-widgets/index.d.ts +5 -5
- package/yunzai-widgets/public_api.d.ts +6 -6
- package/yunzai-widgets/yunzai-clear-storage.component.d.ts +8 -8
- package/yunzai-widgets/yunzai-fullscreen.component.d.ts +8 -8
- package/yunzai-widgets/yunzai-i18n.component.d.ts +19 -19
- package/yunzai-widgets/yunzai-notify.component.d.ts +25 -25
- package/yunzai-widgets/yunzai-user.component.d.ts +22 -22
- package/yunzai-widgets/yunzai-widget.module.d.ts +18 -18
package/esm2022/src/helper.mjs
CHANGED
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
import { inject } from '@angular/core';
|
|
2
|
-
import { Router } from '@angular/router';
|
|
3
|
-
import { YA_SERVICE_TOKEN } from '@yelon/auth';
|
|
4
|
-
import { YUNZAI_I18N_TOKEN } from '@yelon/theme';
|
|
5
|
-
import { NzNotificationService } from 'ng-zorro-antd/notification';
|
|
6
|
-
export const CODEMESSAGE = {
|
|
7
|
-
200: '服务器成功返回请求的数据。',
|
|
8
|
-
201: '新建或修改数据成功。',
|
|
9
|
-
202: '一个请求已经进入后台排队(异步任务)。',
|
|
10
|
-
204: '删除数据成功。',
|
|
11
|
-
400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
|
|
12
|
-
401: '用户没有权限(令牌、用户名、密码错误)。',
|
|
13
|
-
403: '用户得到授权,但是访问是被禁止的。',
|
|
14
|
-
404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
|
|
15
|
-
406: '请求的格式不可得。',
|
|
16
|
-
410: '请求的资源被永久删除,且不会再得到的。',
|
|
17
|
-
422: '当创建一个对象时,发生一个验证错误。',
|
|
18
|
-
500: '服务器发生错误,请检查服务器。',
|
|
19
|
-
502: '网关错误。',
|
|
20
|
-
503: '服务不可用,服务器暂时过载或维护。',
|
|
21
|
-
504: '网关超时。'
|
|
22
|
-
};
|
|
23
|
-
export function getAdditionalHeaders(headers) {
|
|
24
|
-
const res = {};
|
|
25
|
-
const lang = inject(YUNZAI_I18N_TOKEN).currentLang;
|
|
26
|
-
if (!headers?.has('Accept-Language') && lang) {
|
|
27
|
-
res['Accept-Language'] = lang;
|
|
28
|
-
}
|
|
29
|
-
return res;
|
|
30
|
-
}
|
|
31
|
-
export function checkStatus(injector, ev) {
|
|
32
|
-
if ((ev.status >= 200 && ev.status < 300) || ev.status === 401) {
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
const errortext = CODEMESSAGE[ev.status] || ev.statusText;
|
|
36
|
-
injector.get(NzNotificationService).error(`请求错误 ${ev.status}: ${ev.url}`, errortext);
|
|
37
|
-
}
|
|
38
|
-
export function goTo(injector, url) {
|
|
39
|
-
setTimeout(() => injector.get(Router).navigateByUrl(url));
|
|
40
|
-
}
|
|
41
|
-
export function toLogin(injector) {
|
|
42
|
-
injector.get(NzNotificationService).error(`未登录或登录已过期,请重新登录。`, ``);
|
|
43
|
-
goTo(injector, injector.get(YA_SERVICE_TOKEN).login_url);
|
|
44
|
-
}
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { Router } from '@angular/router';
|
|
3
|
+
import { YA_SERVICE_TOKEN } from '@yelon/auth';
|
|
4
|
+
import { YUNZAI_I18N_TOKEN } from '@yelon/theme';
|
|
5
|
+
import { NzNotificationService } from 'ng-zorro-antd/notification';
|
|
6
|
+
export const CODEMESSAGE = {
|
|
7
|
+
200: '服务器成功返回请求的数据。',
|
|
8
|
+
201: '新建或修改数据成功。',
|
|
9
|
+
202: '一个请求已经进入后台排队(异步任务)。',
|
|
10
|
+
204: '删除数据成功。',
|
|
11
|
+
400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
|
|
12
|
+
401: '用户没有权限(令牌、用户名、密码错误)。',
|
|
13
|
+
403: '用户得到授权,但是访问是被禁止的。',
|
|
14
|
+
404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
|
|
15
|
+
406: '请求的格式不可得。',
|
|
16
|
+
410: '请求的资源被永久删除,且不会再得到的。',
|
|
17
|
+
422: '当创建一个对象时,发生一个验证错误。',
|
|
18
|
+
500: '服务器发生错误,请检查服务器。',
|
|
19
|
+
502: '网关错误。',
|
|
20
|
+
503: '服务不可用,服务器暂时过载或维护。',
|
|
21
|
+
504: '网关超时。'
|
|
22
|
+
};
|
|
23
|
+
export function getAdditionalHeaders(headers) {
|
|
24
|
+
const res = {};
|
|
25
|
+
const lang = inject(YUNZAI_I18N_TOKEN).currentLang;
|
|
26
|
+
if (!headers?.has('Accept-Language') && lang) {
|
|
27
|
+
res['Accept-Language'] = lang;
|
|
28
|
+
}
|
|
29
|
+
return res;
|
|
30
|
+
}
|
|
31
|
+
export function checkStatus(injector, ev) {
|
|
32
|
+
if ((ev.status >= 200 && ev.status < 300) || ev.status === 401) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const errortext = CODEMESSAGE[ev.status] || ev.statusText;
|
|
36
|
+
injector.get(NzNotificationService).error(`请求错误 ${ev.status}: ${ev.url}`, errortext);
|
|
37
|
+
}
|
|
38
|
+
export function goTo(injector, url) {
|
|
39
|
+
setTimeout(() => injector.get(Router).navigateByUrl(url));
|
|
40
|
+
}
|
|
41
|
+
export function toLogin(injector) {
|
|
42
|
+
injector.get(NzNotificationService).error(`未登录或登录已过期,请重新登录。`, ``);
|
|
43
|
+
goTo(injector, injector.get(YA_SERVICE_TOKEN).login_url);
|
|
44
|
+
}
|
|
45
45
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL3NyYy9oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVuRSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQThCO0lBQ3BELEdBQUcsRUFBRSxlQUFlO0lBQ3BCLEdBQUcsRUFBRSxZQUFZO0lBQ2pCLEdBQUcsRUFBRSxxQkFBcUI7SUFDMUIsR0FBRyxFQUFFLFNBQVM7SUFDZCxHQUFHLEVBQUUsNkJBQTZCO0lBQ2xDLEdBQUcsRUFBRSxzQkFBc0I7SUFDM0IsR0FBRyxFQUFFLG1CQUFtQjtJQUN4QixHQUFHLEVBQUUsNEJBQTRCO0lBQ2pDLEdBQUcsRUFBRSxXQUFXO0lBQ2hCLEdBQUcsRUFBRSxxQkFBcUI7SUFDMUIsR0FBRyxFQUFFLG9CQUFvQjtJQUN6QixHQUFHLEVBQUUsaUJBQWlCO0lBQ3RCLEdBQUcsRUFBRSxPQUFPO0lBQ1osR0FBRyxFQUFFLG1CQUFtQjtJQUN4QixHQUFHLEVBQUUsT0FBTztDQUNiLENBQUM7QUFFRixNQUFNLFVBQVUsb0JBQW9CLENBQUMsT0FBcUI7SUFDeEQsTUFBTSxHQUFHLEdBQStCLEVBQUUsQ0FBQztJQUMzQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDbkQsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QyxHQUFHLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsUUFBa0IsRUFBRSxFQUFvQjtJQUNsRSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQy9ELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO0lBQzFELFFBQVEsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2RixDQUFDO0FBT0QsTUFBTSxVQUFVLElBQUksQ0FBQyxRQUFrQixFQUFFLEdBQVc7SUFDbEQsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsUUFBa0I7SUFDeEMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRSxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFVLENBQUMsQ0FBQztBQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZUJhc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBZQV9TRVJWSUNFX1RPS0VOIH0gZnJvbSAnQHllbG9uL2F1dGgnO1xuaW1wb3J0IHsgWVVOWkFJX0kxOE5fVE9LRU4gfSBmcm9tICdAeWVsb24vdGhlbWUnO1xuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcbmltcG9ydCB7IE56Tm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvbm90aWZpY2F0aW9uJztcblxuZXhwb3J0IGNvbnN0IENPREVNRVNTQUdFOiB7IFtrZXk6IG51bWJlcl06IHN0cmluZyB9ID0ge1xuICAyMDA6ICfmnI3liqHlmajmiJDlip/ov5Tlm57or7fmsYLnmoTmlbDmja7jgIInLFxuICAyMDE6ICfmlrDlu7rmiJbkv67mlLnmlbDmja7miJDlip/jgIInLFxuICAyMDI6ICfkuIDkuKror7fmsYLlt7Lnu4/ov5vlhaXlkI7lj7DmjpLpmJ/vvIjlvILmraXku7vliqHvvInjgIInLFxuICAyMDQ6ICfliKDpmaTmlbDmja7miJDlip/jgIInLFxuICA0MDA6ICflj5Hlh7rnmoTor7fmsYLmnInplJnor6/vvIzmnI3liqHlmajmsqHmnInov5vooYzmlrDlu7rmiJbkv67mlLnmlbDmja7nmoTmk43kvZzjgIInLFxuICA0MDE6ICfnlKjmiLfmsqHmnInmnYPpmZDvvIjku6TniYzjgIHnlKjmiLflkI3jgIHlr4bnoIHplJnor6/vvInjgIInLFxuICA0MDM6ICfnlKjmiLflvpfliLDmjojmnYPvvIzkvYbmmK/orr/pl67mmK/ooqvnpoHmraLnmoTjgIInLFxuICA0MDQ6ICflj5Hlh7rnmoTor7fmsYLpkojlr7nnmoTmmK/kuI3lrZjlnKjnmoTorrDlvZXvvIzmnI3liqHlmajmsqHmnInov5vooYzmk43kvZzjgIInLFxuICA0MDY6ICfor7fmsYLnmoTmoLzlvI/kuI3lj6/lvpfjgIInLFxuICA0MTA6ICfor7fmsYLnmoTotYTmupDooqvmsLjkuYXliKDpmaTvvIzkuJTkuI3kvJrlho3lvpfliLDnmoTjgIInLFxuICA0MjI6ICflvZPliJvlu7rkuIDkuKrlr7nosaHml7bvvIzlj5HnlJ/kuIDkuKrpqozor4HplJnor6/jgIInLFxuICA1MDA6ICfmnI3liqHlmajlj5HnlJ/plJnor6/vvIzor7fmo4Dmn6XmnI3liqHlmajjgIInLFxuICA1MDI6ICfnvZHlhbPplJnor6/jgIInLFxuICA1MDM6ICfmnI3liqHkuI3lj6/nlKjvvIzmnI3liqHlmajmmoLml7bov4fovb3miJbnu7TmiqTjgIInLFxuICA1MDQ6ICfnvZHlhbPotoXml7bjgIInXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRkaXRpb25hbEhlYWRlcnMoaGVhZGVycz86IEh0dHBIZWFkZXJzKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICBjb25zdCByZXM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIGNvbnN0IGxhbmcgPSBpbmplY3QoWVVOWkFJX0kxOE5fVE9LRU4pLmN1cnJlbnRMYW5nO1xuICBpZiAoIWhlYWRlcnM/LmhhcygnQWNjZXB0LUxhbmd1YWdlJykgJiYgbGFuZykge1xuICAgIHJlc1snQWNjZXB0LUxhbmd1YWdlJ10gPSBsYW5nO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU3RhdHVzKGluamVjdG9yOiBJbmplY3RvciwgZXY6IEh0dHBSZXNwb25zZUJhc2UpOiB2b2lkIHtcbiAgaWYgKChldi5zdGF0dXMgPj0gMjAwICYmIGV2LnN0YXR1cyA8IDMwMCkgfHwgZXYuc3RhdHVzID09PSA0MDEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZXJyb3J0ZXh0ID0gQ09ERU1FU1NBR0VbZXYuc3RhdHVzXSB8fCBldi5zdGF0dXNUZXh0O1xuICBpbmplY3Rvci5nZXQoTnpOb3RpZmljYXRpb25TZXJ2aWNlKS5lcnJvcihg6K+35rGC6ZSZ6K+vICR7ZXYuc3RhdHVzfTogJHtldi51cmx9YCwgZXJyb3J0ZXh0KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZVRocm93SHR0cEVycm9yIHtcbiAgYm9keTogTnpTYWZlQW55O1xuICBfdGhyb3c6IHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnb1RvKGluamVjdG9yOiBJbmplY3RvciwgdXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgc2V0VGltZW91dCgoKSA9PiBpbmplY3Rvci5nZXQoUm91dGVyKS5uYXZpZ2F0ZUJ5VXJsKHVybCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9Mb2dpbihpbmplY3RvcjogSW5qZWN0b3IpOiB2b2lkIHtcbiAgaW5qZWN0b3IuZ2V0KE56Tm90aWZpY2F0aW9uU2VydmljZSkuZXJyb3IoYOacqueZu+W9leaIlueZu+W9leW3sui/h+acn++8jOivt+mHjeaWsOeZu+W9leOAgmAsIGBgKTtcbiAgZ29UbyhpbmplY3RvciwgaW5qZWN0b3IuZ2V0KFlBX1NFUlZJQ0VfVE9LRU4pLmxvZ2luX3VybCEpO1xufVxuIl19
|
package/esm2022/src/provide.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { importProvidersFrom, makeEnvironmentProviders } from '@angular/core';
|
|
2
|
-
import { BisModule } from './bis.module';
|
|
3
|
-
export function provideYunzaiBis() {
|
|
4
|
-
const provides = [];
|
|
5
|
-
provides.push(importProvidersFrom(BisModule));
|
|
6
|
-
return makeEnvironmentProviders(provides);
|
|
7
|
-
}
|
|
1
|
+
import { importProvidersFrom, makeEnvironmentProviders } from '@angular/core';
|
|
2
|
+
import { BisModule } from './bis.module';
|
|
3
|
+
export function provideYunzaiBis() {
|
|
4
|
+
const provides = [];
|
|
5
|
+
provides.push(importProvidersFrom(BisModule));
|
|
6
|
+
return makeEnvironmentProviders(provides);
|
|
7
|
+
}
|
|
8
8
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9zcmMvcHJvdmlkZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdCLG1CQUFtQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekMsTUFBTSxVQUFVLGdCQUFnQjtJQUM5QixNQUFNLFFBQVEsR0FBMkIsRUFBRSxDQUFDO0lBQzVDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM5QyxPQUFPLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudFByb3ZpZGVycywgaW1wb3J0UHJvdmlkZXJzRnJvbSwgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJpc01vZHVsZSB9IGZyb20gJy4vYmlzLm1vZHVsZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlWXVuemFpQmlzKCk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgY29uc3QgcHJvdmlkZXM6IEVudmlyb25tZW50UHJvdmlkZXJzW10gPSBbXTtcbiAgcHJvdmlkZXMucHVzaChpbXBvcnRQcm92aWRlcnNGcm9tKEJpc01vZHVsZSkpO1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKHByb3ZpZGVzKTtcbn1cbiJdfQ==
|
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
import { HttpClient } from '@angular/common/http';
|
|
2
|
-
import { APP_INITIALIZER, Injector } from '@angular/core';
|
|
3
|
-
import { BehaviorSubject, catchError, filter, switchMap, take, throwError } from 'rxjs';
|
|
4
|
-
import { YA_SERVICE_TOKEN } from '@yelon/auth';
|
|
5
|
-
import { log } from '@yelon/util';
|
|
6
|
-
import { toLogin } from './helper';
|
|
7
|
-
let refreshToking = false;
|
|
8
|
-
let refreshToken$ = new BehaviorSubject(null);
|
|
9
|
-
export const tryRefreshToken = (injector, ev, req, next) => {
|
|
10
|
-
// 连刷新Token的请求都错了,那就是真错了
|
|
11
|
-
if (['/auth/oauth/getOrCreateToken/webapp'].some(url => req.url.includes(url))) {
|
|
12
|
-
toLogin(injector);
|
|
13
|
-
return throwError(() => ev);
|
|
14
|
-
}
|
|
15
|
-
// 2、如果 `refreshToking` 为 `true` 表示已经在请求刷新 Token 中,后续所有请求转入等待状态,直至结果返回后再重新发起请求
|
|
16
|
-
if (refreshToking) {
|
|
17
|
-
return refreshToken$.pipe(filter(v => !!v), take(1), switchMap(() => next(reAttachToken(injector, req))));
|
|
18
|
-
}
|
|
19
|
-
// 3、尝试调用刷新 Token
|
|
20
|
-
refreshToking = true;
|
|
21
|
-
refreshToken$.next(null);
|
|
22
|
-
return refreshTokenRequest(injector).pipe(switchMap(res => {
|
|
23
|
-
// 通知后续请求继续执行
|
|
24
|
-
refreshToking = false;
|
|
25
|
-
refreshToken$.next(res);
|
|
26
|
-
// 重新保存新 token
|
|
27
|
-
injector.get(YA_SERVICE_TOKEN).set(res);
|
|
28
|
-
// 重新发起请求
|
|
29
|
-
return next(reAttachToken(injector, req));
|
|
30
|
-
}), catchError(err => {
|
|
31
|
-
refreshToking = false;
|
|
32
|
-
toLogin(injector);
|
|
33
|
-
return throwError(() => err);
|
|
34
|
-
}));
|
|
35
|
-
};
|
|
36
|
-
function reAttachToken(injector, req) {
|
|
37
|
-
const token = injector.get(YA_SERVICE_TOKEN).get()?.access_token;
|
|
38
|
-
return req.clone({
|
|
39
|
-
setHeaders: {
|
|
40
|
-
Authorization: `Bearer ${token}`
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
function refreshTokenRequest(injector) {
|
|
45
|
-
const model = injector.get(YA_SERVICE_TOKEN).get();
|
|
46
|
-
const form = new FormData();
|
|
47
|
-
form.set('refresh_token', model?.refresh_token);
|
|
48
|
-
form.set('grant_type', 'refresh_token');
|
|
49
|
-
form.set('scope', 'webapp');
|
|
50
|
-
return injector.get(HttpClient).post(`/auth/oauth/getOrCreateToken/webapp`, form);
|
|
51
|
-
}
|
|
52
|
-
function buildAuthRefresh(injector) {
|
|
53
|
-
const tokenSrv = injector.get(YA_SERVICE_TOKEN);
|
|
54
|
-
tokenSrv.refresh
|
|
55
|
-
.pipe(filter(() => !refreshToking), switchMap(res => {
|
|
56
|
-
log(res);
|
|
57
|
-
refreshToking = true;
|
|
58
|
-
return refreshTokenRequest(injector);
|
|
59
|
-
}))
|
|
60
|
-
.subscribe({
|
|
61
|
-
next: res => {
|
|
62
|
-
res.expired = +new Date() + 1000 * 60 * 5;
|
|
63
|
-
refreshToking = false;
|
|
64
|
-
tokenSrv.set(res);
|
|
65
|
-
},
|
|
66
|
-
error: () => toLogin(injector)
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
export function provideYunzaiBindAuthRefresh() {
|
|
70
|
-
return [
|
|
71
|
-
{
|
|
72
|
-
provide: APP_INITIALIZER,
|
|
73
|
-
useFactory: (injector) => () => buildAuthRefresh(injector),
|
|
74
|
-
deps: [Injector],
|
|
75
|
-
multi: true
|
|
76
|
-
}
|
|
77
|
-
];
|
|
78
|
-
}
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { APP_INITIALIZER, Injector } from '@angular/core';
|
|
3
|
+
import { BehaviorSubject, catchError, filter, switchMap, take, throwError } from 'rxjs';
|
|
4
|
+
import { YA_SERVICE_TOKEN } from '@yelon/auth';
|
|
5
|
+
import { log } from '@yelon/util';
|
|
6
|
+
import { toLogin } from './helper';
|
|
7
|
+
let refreshToking = false;
|
|
8
|
+
let refreshToken$ = new BehaviorSubject(null);
|
|
9
|
+
export const tryRefreshToken = (injector, ev, req, next) => {
|
|
10
|
+
// 连刷新Token的请求都错了,那就是真错了
|
|
11
|
+
if (['/auth/oauth/getOrCreateToken/webapp'].some(url => req.url.includes(url))) {
|
|
12
|
+
toLogin(injector);
|
|
13
|
+
return throwError(() => ev);
|
|
14
|
+
}
|
|
15
|
+
// 2、如果 `refreshToking` 为 `true` 表示已经在请求刷新 Token 中,后续所有请求转入等待状态,直至结果返回后再重新发起请求
|
|
16
|
+
if (refreshToking) {
|
|
17
|
+
return refreshToken$.pipe(filter(v => !!v), take(1), switchMap(() => next(reAttachToken(injector, req))));
|
|
18
|
+
}
|
|
19
|
+
// 3、尝试调用刷新 Token
|
|
20
|
+
refreshToking = true;
|
|
21
|
+
refreshToken$.next(null);
|
|
22
|
+
return refreshTokenRequest(injector).pipe(switchMap(res => {
|
|
23
|
+
// 通知后续请求继续执行
|
|
24
|
+
refreshToking = false;
|
|
25
|
+
refreshToken$.next(res);
|
|
26
|
+
// 重新保存新 token
|
|
27
|
+
injector.get(YA_SERVICE_TOKEN).set(res);
|
|
28
|
+
// 重新发起请求
|
|
29
|
+
return next(reAttachToken(injector, req));
|
|
30
|
+
}), catchError(err => {
|
|
31
|
+
refreshToking = false;
|
|
32
|
+
toLogin(injector);
|
|
33
|
+
return throwError(() => err);
|
|
34
|
+
}));
|
|
35
|
+
};
|
|
36
|
+
function reAttachToken(injector, req) {
|
|
37
|
+
const token = injector.get(YA_SERVICE_TOKEN).get()?.access_token;
|
|
38
|
+
return req.clone({
|
|
39
|
+
setHeaders: {
|
|
40
|
+
Authorization: `Bearer ${token}`
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function refreshTokenRequest(injector) {
|
|
45
|
+
const model = injector.get(YA_SERVICE_TOKEN).get();
|
|
46
|
+
const form = new FormData();
|
|
47
|
+
form.set('refresh_token', model?.refresh_token);
|
|
48
|
+
form.set('grant_type', 'refresh_token');
|
|
49
|
+
form.set('scope', 'webapp');
|
|
50
|
+
return injector.get(HttpClient).post(`/auth/oauth/getOrCreateToken/webapp`, form);
|
|
51
|
+
}
|
|
52
|
+
function buildAuthRefresh(injector) {
|
|
53
|
+
const tokenSrv = injector.get(YA_SERVICE_TOKEN);
|
|
54
|
+
tokenSrv.refresh
|
|
55
|
+
.pipe(filter(() => !refreshToking), switchMap(res => {
|
|
56
|
+
log(res);
|
|
57
|
+
refreshToking = true;
|
|
58
|
+
return refreshTokenRequest(injector);
|
|
59
|
+
}))
|
|
60
|
+
.subscribe({
|
|
61
|
+
next: res => {
|
|
62
|
+
res.expired = +new Date() + 1000 * 60 * 5;
|
|
63
|
+
refreshToking = false;
|
|
64
|
+
tokenSrv.set(res);
|
|
65
|
+
},
|
|
66
|
+
error: () => toLogin(injector)
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
export function provideYunzaiBindAuthRefresh() {
|
|
70
|
+
return [
|
|
71
|
+
{
|
|
72
|
+
provide: APP_INITIALIZER,
|
|
73
|
+
useFactory: (injector) => () => buildAuthRefresh(injector),
|
|
74
|
+
deps: [Injector],
|
|
75
|
+
multi: true
|
|
76
|
+
}
|
|
77
|
+
];
|
|
78
|
+
}
|
|
79
79
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9zcmMvcmVmcmVzaC10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFnRCxNQUFNLHNCQUFzQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYyxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRW5DLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztBQUMxQixJQUFJLGFBQWEsR0FBK0IsSUFBSSxlQUFlLENBQVksSUFBSSxDQUFDLENBQUM7QUFFckYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQzdCLFFBQWtCLEVBQ2xCLEVBQW9CLEVBQ3BCLEdBQTJCLEVBQzNCLElBQW1CLEVBQ0ksRUFBRTtJQUN6Qix3QkFBd0I7SUFDeEIsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9FLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0QsOEVBQThFO0lBQzlFLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsT0FBTyxhQUFh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QUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDMUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUN0QixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztLQUMvQixDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsTUFBTSxVQUFVLDRCQUE0QjtJQUMxQyxPQUFPO1FBQ0w7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsQ0FBQyxRQUFrQixFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7WUFDcEUsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBQ2hCLEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIYW5kbGVyRm4sIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2VCYXNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBJbmplY3RvciwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY2F0Y2hFcnJvciwgZmlsdGVyLCBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAsIHRha2UsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgWUFfU0VSVklDRV9UT0tFTiB9IGZyb20gJ0B5ZWxvbi9hdXRoJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJ0B5ZWxvbi91dGlsJztcbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbmltcG9ydCB7IHRvTG9naW4gfSBmcm9tICcuL2hlbHBlcic7XG5cbmxldCByZWZyZXNoVG9raW5nID0gZmFsc2U7XG5sZXQgcmVmcmVzaFRva2VuJDogQmVoYXZpb3JTdWJqZWN0PE56U2FmZUFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE56U2FmZUFueT4obnVsbCk7XG5cbmV4cG9ydCBjb25zdCB0cnlSZWZyZXNoVG9rZW4gPSAoXG4gIGluamVjdG9yOiBJbmplY3RvcixcbiAgZXY6IEh0dHBSZXNwb25zZUJhc2UsXG4gIHJlcTogSHR0cFJlcXVlc3Q8TnpTYWZlQW55PixcbiAgbmV4dDogSHR0cEhhbmRsZXJGblxuKTogT2JzZXJ2YWJsZTxOelNhZmVBbnk+ID0+IHtcbiAgLy8g6L+e5Yi35pawVG9rZW7nmoTor7fmsYLpg73plJnkuobvvIzpgqPlsLHmmK/nnJ/plJnkuoZcbiAgaWYgKFsnL2F1dGgvb2F1dGgvZ2V0T3JDcmVhdGVUb2tlbi93ZWJhcHAnXS5zb21lKHVybCA9PiByZXEudXJsLmluY2x1ZGVzKHVybCkpKSB7XG4gICAgdG9Mb2dpbihpbmplY3Rvcik7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXYpO1xuICB9XG4gIC8vIDLjgIHlpoLmnpwgYHJlZnJlc2hUb2tpbmdgIOS4uiBgdHJ1ZWAg6KGo56S65bey57uP5Zyo6K+35rGC5Yi35pawIFRva2VuIOS4re+8jOWQjue7reaJgOacieivt+axgui9rOWFpeetieW+heeKtuaAge+8jOebtOiHs+e7k+aenOi/lOWbnuWQjuWGjemHjeaWsOWPkei1t+ivt+axglxuICBpZiAocmVmcmVzaFRva2luZykge1xuICAgIHJldHVybiByZWZyZXNoVG9rZW4kLnBpcGUoXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiBuZXh0KHJlQXR0YWNoVG9rZW4oaW5qZWN0b3IsIHJlcSkpKVxuICAgICk7XG4gIH1cbiAgLy8gM+OAgeWwneivleiwg+eUqOWIt+aWsCBUb2tlblxuICByZWZyZXNoVG9raW5nID0gdHJ1ZTtcbiAgcmVmcmVzaFRva2VuJC5uZXh0KG51bGwpO1xuXG4gIHJldHVybiByZWZyZXNoVG9rZW5SZXF1ZXN0KGluamVjdG9yKS5waXBlKFxuICAgIHN3aXRjaE1hcChyZXMgPT4ge1xuICAgICAgLy8g6YCa55+l5ZCO57ut6K+35rGC57un57ut5omn6KGMXG4gICAgICByZWZyZXNoVG9raW5nID0gZmFsc2U7XG4gICAgICByZWZyZXNoVG9rZW4kLm5leHQocmVzKTtcbiAgICAgIC8vIOmHjeaWsOS/neWtmOaWsCB0b2tlblxuICAgICAgaW5qZWN0b3IuZ2V0KFlBX1NFUlZJQ0VfVE9LRU4pLnNldChyZXMpO1xuICAgICAgLy8g6YeN5paw5Y+R6LW36K+35rGCXG4gICAgICByZXR1cm4gbmV4dChyZUF0dGFjaFRva2VuKGluamVjdG9yLCByZXEpKTtcbiAgICB9KSxcbiAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICByZWZyZXNoVG9raW5nID0gZmFsc2U7XG4gICAgICB0b0xvZ2luKGluamVjdG9yKTtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XG4gICAgfSlcbiAgKTtcbn07XG5cbmZ1bmN0aW9uIHJlQXR0YWNoVG9rZW4oaW5qZWN0b3I6IEluamVjdG9yLCByZXE6IEh0dHBSZXF1ZXN0PE56U2FmZUFueT4pOiBIdHRwUmVxdWVzdDxOelNhZmVBbnk+IHtcbiAgY29uc3QgdG9rZW4gPSBpbmplY3Rvci5nZXQoWUFfU0VSVklDRV9UT0tFTikuZ2V0KCk/LmFjY2Vzc190b2tlbjtcbiAgcmV0dXJuIHJlcS5jbG9uZSh7XG4gICAgc2V0SGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWBcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWZyZXNoVG9rZW5SZXF1ZXN0KGluamVjdG9yOiBJbmplY3Rvcik6IE9ic2VydmFibGU8TnpTYWZlQW55PiB7XG4gIGNvbnN0IG1vZGVsID0gaW5qZWN0b3IuZ2V0KFlBX1NFUlZJQ0VfVE9LRU4pLmdldCgpO1xuICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gIGZvcm0uc2V0KCdyZWZyZXNoX3Rva2VuJywgbW9kZWw/LnJlZnJlc2hfdG9rZW4hKTtcbiAgZm9ybS5zZXQoJ2dyYW50X3R5cGUnLCAncmVmcmVzaF90b2tlbicpO1xuICBmb3JtLnNldCgnc2NvcGUnLCAnd2ViYXBwJyk7XG4gIHJldHVybiBpbmplY3Rvci5nZXQoSHR0cENsaWVudCkucG9zdChgL2F1dGgvb2F1dGgvZ2V0T3JDcmVhdGVUb2tlbi93ZWJhcHBgLCBmb3JtKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBdXRoUmVmcmVzaChpbmplY3RvcjogSW5qZWN0b3IpOiB2b2lkIHtcbiAgY29uc3QgdG9rZW5TcnYgPSBpbmplY3Rvci5nZXQoWUFfU0VSVklDRV9UT0tFTik7XG4gIHRva2VuU3J2LnJlZnJlc2hcbiAgICAucGlwZShcbiAgICAgIGZpbHRlcigoKSA9PiAhcmVmcmVzaFRva2luZyksXG4gICAgICBzd2l0Y2hNYXAocmVzID0+IHtcbiAgICAgICAgbG9nKHJlcyk7XG4gICAgICAgIHJlZnJlc2hUb2tpbmcgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmVmcmVzaFRva2VuUmVxdWVzdChpbmplY3Rvcik7XG4gICAgICB9KVxuICAgIClcbiAgICAuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgIHJlcy5leHBpcmVkID0gK25ldyBEYXRlKCkgKyAxMDAwICogNjAgKiA1O1xuICAgICAgICByZWZyZXNoVG9raW5nID0gZmFsc2U7XG4gICAgICAgIHRva2VuU3J2LnNldChyZXMpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB0b0xvZ2luKGluamVjdG9yKVxuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVl1bnphaUJpbmRBdXRoUmVmcmVzaCgpOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICB1c2VGYWN0b3J5OiAoaW5qZWN0b3I6IEluamVjdG9yKSA9PiAoKSA9PiBidWlsZEF1dGhSZWZyZXNoKGluamVjdG9yKSxcbiAgICAgIGRlcHM6IFtJbmplY3Rvcl0sXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXTtcbn1cbiJdfQ==
|