bx-rest 1.5.1 → 1.6.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/CHANGELOG.md +94 -0
- package/README.en.md +113 -2
- package/README.md +114 -2
- package/esm2022/functions/errors.mjs +17 -5
- package/esm2022/functions/uniqueElementCode.mjs +24 -0
- package/esm2022/public-api.mjs +2 -2
- package/esm2022/request-navvy/bizproc.mjs +18 -9
- package/esm2022/request-navvy/calendar/event.mjs +1 -9
- package/esm2022/request-navvy/disk/operation.mjs +3 -10
- package/esm2022/request-navvy/socialnetwork/api/livefeed.mjs +1 -5
- package/esm2022/request-navvy/task/operation/elapseditem.mjs +8 -8
- package/esm2022/request-navvy/tasks/task.mjs +1 -119
- package/esm2022/rest/navvy.mjs +66 -64
- package/esm2022/services/base.mjs +1 -4
- package/esm2022/services/context.mjs +59 -0
- package/esm2022/services/http/HttpBX.mjs +49 -19
- package/esm2022/services/http/authRefresh.mjs +25 -23
- package/esm2022/services/http/http.mjs +14 -69
- package/esm2022/services/http/middleware.mjs +149 -0
- package/esm2022/services/http/sessionKey.mjs +16 -5
- package/esm2022/services/http/transport.mjs +5 -0
- package/esm2022/services/navvy/navvy-support.mjs +2 -15
- package/esm2022/services/navvy.mjs +18 -31
- package/esm2022/typification/rest/calendar/event/get.mjs +1 -1
- package/esm2022/typification/rest/tasks/task/get.mjs +1 -1
- package/esm2022/typification/settings.mjs +1 -1
- package/fesm2022/bx-rest.mjs +450 -463
- package/fesm2022/bx-rest.mjs.map +1 -1
- package/functions/errors.d.ts +9 -0
- package/functions/uniqueElementCode.d.ts +12 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -1
- package/rest/navvy.d.ts +9 -0
- package/services/context.d.ts +43 -0
- package/services/http/HttpBX.d.ts +10 -0
- package/services/http/authRefresh.d.ts +5 -1
- package/services/http/http.d.ts +12 -9
- package/services/http/middleware.d.ts +31 -0
- package/services/http/sessionKey.d.ts +10 -0
- package/services/http/transport.d.ts +28 -0
- package/services/navvy/navvy-support.d.ts +0 -10
- package/services/navvy.d.ts +1 -0
- package/typification/rest/calendar/event/get.d.ts +1 -1
- package/typification/settings.d.ts +34 -0
- package/esm2022/functions/errorHandler.mjs +0 -34
- package/esm2022/request/app.mjs +0 -13
- package/esm2022/request/bizproc/activity.mjs +0 -3
- package/esm2022/request/bizproc/event.mjs +0 -3
- package/esm2022/request/bizproc/robot.mjs +0 -3
- package/esm2022/request/bizproc/task.mjs +0 -3
- package/esm2022/request/bizproc/workflow/instance.mjs +0 -3
- package/esm2022/request/bizproc/workflow/template.mjs +0 -3
- package/esm2022/request/bizproc/workflow.mjs +0 -18
- package/esm2022/request/bizproc.mjs +0 -15
- package/esm2022/request/department.mjs +0 -26
- package/esm2022/request/disk/attachedObject.mjs +0 -14
- package/esm2022/request/disk/file.mjs +0 -18
- package/esm2022/request/disk/folder.mjs +0 -117
- package/esm2022/request/disk.mjs +0 -11
- package/esm2022/request/lists/element.mjs +0 -18
- package/esm2022/request/lists/field.mjs +0 -35
- package/esm2022/request/lists.mjs +0 -86
- package/esm2022/request/log/blogcomment.mjs +0 -3
- package/esm2022/request/log/blogpost.mjs +0 -18
- package/esm2022/request/log.mjs +0 -9
- package/esm2022/request/pull/application/config.mjs +0 -11
- package/esm2022/request/pull/channel/public.mjs +0 -18
- package/esm2022/request/pull/config.mjs +0 -13
- package/esm2022/request/pull.mjs +0 -11
- package/esm2022/request/server.mjs +0 -14
- package/esm2022/request/socialnetwork/api/contentview.mjs +0 -14
- package/esm2022/request/socialnetwork/api/livefeed/blogpost/important.mjs +0 -14
- package/esm2022/request/socialnetwork/api/livefeed/blogpost.mjs +0 -7
- package/esm2022/request/socialnetwork/api/livefeed.mjs +0 -7
- package/esm2022/request/socialnetwork/api.mjs +0 -9
- package/esm2022/request/socialnetwork.mjs +0 -8
- package/esm2022/request/sonet_group.mjs +0 -24
- package/esm2022/request/task/commentitem.mjs +0 -32
- package/esm2022/request/task/elapseditem.mjs +0 -40
- package/esm2022/request/task/item/userfield.mjs +0 -14
- package/esm2022/request/task/item.mjs +0 -7
- package/esm2022/request/task/planner.mjs +0 -11
- package/esm2022/request/task.mjs +0 -13
- package/esm2022/request/tasks/task/result.mjs +0 -22
- package/esm2022/request/tasks/task.mjs +0 -110
- package/esm2022/request/tasks.mjs +0 -7
- package/esm2022/request/user/userfield.mjs +0 -14
- package/esm2022/request/user.mjs +0 -40
- package/esm2022/rest/base.mjs +0 -39
- package/esm2022/services/http/HttpData.mjs +0 -77
- package/esm2022/services/http/base/base.mjs +0 -4
- package/esm2022/services/http/httpNavvy.mjs +0 -14
- package/esm2022/typification/base/answers.mjs +0 -438
- package/esm2022/typification/base/params.mjs +0 -525
- package/esm2022/typification/base/workpiece/methods-list.mjs +0 -2
- package/esm2022/typification/base/workpiece/methods.mjs +0 -2
- package/functions/errorHandler.d.ts +0 -10
- package/request/app.d.ts +0 -8
- package/request/bizproc/activity.d.ts +0 -2
- package/request/bizproc/event.d.ts +0 -2
- package/request/bizproc/robot.d.ts +0 -2
- package/request/bizproc/task.d.ts +0 -2
- package/request/bizproc/workflow/instance.d.ts +0 -2
- package/request/bizproc/workflow/template.d.ts +0 -2
- package/request/bizproc/workflow.d.ts +0 -13
- package/request/bizproc.d.ts +0 -12
- package/request/department.d.ts +0 -18
- package/request/disk/attachedObject.d.ts +0 -8
- package/request/disk/file.d.ts +0 -10
- package/request/disk/folder.d.ts +0 -96
- package/request/disk.d.ts +0 -8
- package/request/lists/element.d.ts +0 -11
- package/request/lists/field.d.ts +0 -11
- package/request/lists.d.ts +0 -31
- package/request/log/blogcomment.d.ts +0 -2
- package/request/log/blogpost.d.ts +0 -11
- package/request/log.d.ts +0 -6
- package/request/pull/application/config.d.ts +0 -5
- package/request/pull/channel/public.d.ts +0 -5
- package/request/pull/config.d.ts +0 -7
- package/request/pull.d.ts +0 -8
- package/request/server.d.ts +0 -7
- package/request/socialnetwork/api/contentview.d.ts +0 -6
- package/request/socialnetwork/api/livefeed/blogpost/important.d.ts +0 -6
- package/request/socialnetwork/api/livefeed/blogpost.d.ts +0 -4
- package/request/socialnetwork/api/livefeed.d.ts +0 -4
- package/request/socialnetwork/api.d.ts +0 -6
- package/request/socialnetwork.d.ts +0 -4
- package/request/sonet_group.d.ts +0 -8
- package/request/task/commentitem.d.ts +0 -23
- package/request/task/elapseditem.d.ts +0 -26
- package/request/task/item/userfield.d.ts +0 -6
- package/request/task/item.d.ts +0 -4
- package/request/task/planner.d.ts +0 -4
- package/request/task.d.ts +0 -10
- package/request/tasks/task/result.d.ts +0 -13
- package/request/tasks/task.d.ts +0 -37
- package/request/tasks.d.ts +0 -4
- package/request/user/userfield.d.ts +0 -8
- package/request/user.d.ts +0 -24
- package/rest/base.d.ts +0 -33
- package/services/http/HttpData.d.ts +0 -7
- package/services/http/base/base.d.ts +0 -7
- package/services/http/httpNavvy.d.ts +0 -10
- package/typification/base/answers.d.ts +0 -12
- package/typification/base/params.d.ts +0 -16
- package/typification/base/workpiece/methods-list.d.ts +0 -247
- package/typification/base/workpiece/methods.d.ts +0 -20
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { defer, from, throwError } from 'rxjs';
|
|
2
2
|
import { catchError, switchMap } from 'rxjs/operators';
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import { parseBXRestErrorBody } from '../../functions/errors';
|
|
3
|
+
import { httpErrorResponse, parseBXRestErrorBody } from '../../functions/errors';
|
|
4
|
+
import { globalContext } from '../context';
|
|
6
5
|
/**
|
|
7
6
|
* Коды ошибок Bitrix, которые лечатся продлением токена. `expired_token` —
|
|
8
7
|
* единственный системный код, для которого документация Bitrix24 советует
|
|
@@ -24,34 +23,34 @@ const AUTH_ERROR_CODES = ['expired_token', 'invalid_token'];
|
|
|
24
23
|
* Ответ 401 с другим кодом Bitrix ошибкой авторизации не считается.
|
|
25
24
|
*/
|
|
26
25
|
export function isBXRestAuthError(error) {
|
|
27
|
-
|
|
26
|
+
const response = httpErrorResponse(error);
|
|
27
|
+
if (!response) {
|
|
28
28
|
return false;
|
|
29
29
|
}
|
|
30
|
-
const parsed = parseBXRestErrorBody(
|
|
30
|
+
const parsed = parseBXRestErrorBody(response.data);
|
|
31
31
|
if (parsed) {
|
|
32
32
|
return AUTH_ERROR_CODES.includes(parsed.error);
|
|
33
33
|
}
|
|
34
|
-
return
|
|
34
|
+
return response.status === 401;
|
|
35
35
|
}
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
pendingRefresh = Promise.resolve()
|
|
36
|
+
// Состояние продления живёт в контексте клиента (BXRestContext): у глобальных
|
|
37
|
+
// настроек оно одно на всю библиотеку, у каждого new BXRestNavvy(settings) —
|
|
38
|
+
// своё. pendingRefresh — идущее сейчас продление, его ждут все упавшие
|
|
39
|
+
// запросы клиента; refreshCount — сколько продлений уже завершилось успешно.
|
|
40
|
+
function sharedRefresh(refresh, ctx) {
|
|
41
|
+
if (!ctx.pendingRefresh) {
|
|
42
|
+
ctx.pendingRefresh = Promise.resolve()
|
|
44
43
|
// Через then, чтобы синхронное исключение в refresh() тоже стало
|
|
45
44
|
// отклонённым промисом, а не вылетело из catchError
|
|
46
45
|
.then(() => refresh())
|
|
47
46
|
.then(() => {
|
|
48
|
-
refreshCount++;
|
|
47
|
+
ctx.refreshCount++;
|
|
49
48
|
})
|
|
50
49
|
.finally(() => {
|
|
51
|
-
pendingRefresh = undefined;
|
|
50
|
+
ctx.pendingRefresh = undefined;
|
|
52
51
|
});
|
|
53
52
|
}
|
|
54
|
-
return pendingRefresh;
|
|
53
|
+
return ctx.pendingRefresh;
|
|
55
54
|
}
|
|
56
55
|
/**
|
|
57
56
|
* Повтор запроса после продления авторизации (`BXRestSettings.auth.refresh`).
|
|
@@ -60,23 +59,26 @@ function sharedRefresh(refresh) {
|
|
|
60
59
|
* `defer()` в HttpBXServices): повтор — это повторная подписка, поэтому
|
|
61
60
|
* токен, адрес и заголовки берутся уже новые. На второй попытке ошибка не
|
|
62
61
|
* перехватывается — запрос повторяется не больше одного раза.
|
|
62
|
+
*
|
|
63
|
+
* `ctx` — контекст клиента, из которого берутся `refresh`, `isAuthError` и
|
|
64
|
+
* общее состояние продления.
|
|
63
65
|
*/
|
|
64
|
-
export function withAuthRefresh(request
|
|
66
|
+
export function withAuthRefresh(request$, ctx = globalContext) {
|
|
65
67
|
return defer(() => {
|
|
66
|
-
const { refresh, isAuthError = isBXRestAuthError } =
|
|
68
|
+
const { refresh, isAuthError = isBXRestAuthError } = ctx.settings.auth;
|
|
67
69
|
if (!refresh) {
|
|
68
70
|
return request$;
|
|
69
71
|
}
|
|
70
|
-
const refreshCountAtStart = refreshCount;
|
|
72
|
+
const refreshCountAtStart = ctx.refreshCount;
|
|
71
73
|
return request$.pipe(catchError((error) => {
|
|
72
74
|
if (!isAuthError(error)) {
|
|
73
75
|
return throwError(() => error);
|
|
74
76
|
}
|
|
75
77
|
// Пока этот запрос был в пути, токен уже продлили по ошибке другого
|
|
76
78
|
// запроса — повторяем без нового продления
|
|
77
|
-
const refreshed = (refreshCount !== refreshCountAtStart)
|
|
79
|
+
const refreshed = (ctx.refreshCount !== refreshCountAtStart)
|
|
78
80
|
? Promise.resolve()
|
|
79
|
-
: sharedRefresh(refresh);
|
|
81
|
+
: sharedRefresh(refresh, ctx);
|
|
80
82
|
return from(refreshed).pipe(catchError((refreshError) => {
|
|
81
83
|
if (error && typeof error === 'object') {
|
|
82
84
|
error.authRefreshError = refreshError;
|
|
@@ -86,4 +88,4 @@ export function withAuthRefresh(request$) {
|
|
|
86
88
|
}));
|
|
87
89
|
});
|
|
88
90
|
}
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aFJlZnJlc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9zZXJ2aWNlcy9odHRwL2F1dGhSZWZyZXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3RELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQUN6QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFFN0Q7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUE7QUFFM0Q7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFjO0lBQzlDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDeEQsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLE9BQU8sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoRCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUE7QUFDdEMsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSwwRUFBMEU7QUFDMUUsNERBQTREO0FBQzVELElBQUksY0FBeUMsQ0FBQTtBQUM3QyxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUE7QUFFcEIsU0FBUyxhQUFhLENBQUMsT0FBK0I7SUFDcEQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ2hDLGlFQUFpRTtZQUNqRSxvREFBb0Q7YUFDbkQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ3JCLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxZQUFZLEVBQUUsQ0FBQTtRQUNoQixDQUFDLENBQUM7YUFDRCxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ1osY0FBYyxHQUFHLFNBQVMsQ0FBQTtRQUM1QixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFDRCxPQUFPLGNBQWMsQ0FBQTtBQUN2QixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUksUUFBdUI7SUFDeEQsT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ2hCLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxHQUFHLGlCQUFpQixFQUFFLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUE7UUFDOUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxRQUFRLENBQUE7UUFDakIsQ0FBQztRQUVELE1BQU0sbUJBQW1CLEdBQUcsWUFBWSxDQUFBO1FBQ3hDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FDbEIsVUFBVSxDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN4QixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNoQyxDQUFDO1lBQ0Qsb0VBQW9FO1lBQ3BFLDJDQUEyQztZQUMzQyxNQUFNLFNBQVMsR0FBRyxDQUFDLFlBQVksS0FBSyxtQkFBbUIsQ0FBQztnQkFDdEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7Z0JBQ25CLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUE7WUFFMUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUN6QixVQUFVLENBQUMsQ0FBQyxZQUFxQixFQUFFLEVBQUU7Z0JBQ25DLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUN0QyxLQUF3QyxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQTtnQkFDM0UsQ0FBQztnQkFDRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNoQyxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQzFCLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmZXIsIGZyb20sIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXG5pbXBvcnQgeyBCWFJlc3RTZXR0aW5ncyB9IGZyb20gJy4uLy4uL3NldHRpbmdzJ1xuaW1wb3J0IHsgcGFyc2VCWFJlc3RFcnJvckJvZHkgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvZXJyb3JzJ1xuXG4vKipcbiAqINCa0L7QtNGLINC+0YjQuNCx0L7QuiBCaXRyaXgsINC60L7RgtC+0YDRi9C1INC70LXRh9Cw0YLRgdGPINC/0YDQvtC00LvQtdC90LjQtdC8INGC0L7QutC10L3QsC4gYGV4cGlyZWRfdG9rZW5gIOKAlFxuICog0LXQtNC40L3RgdGC0LLQtdC90L3Ri9C5INGB0LjRgdGC0LXQvNC90YvQuSDQutC+0LQsINC00LvRjyDQutC+0YLQvtGA0L7Qs9C+INC00L7QutGD0LzQtdC90YLQsNGG0LjRjyBCaXRyaXgyNCDRgdC+0LLQtdGC0YPQtdGCXG4gKiBcItC+0LHQvdC+0LLQuNGC0Ywg0YLQvtC60LXQvdGLINC4INC/0L7QstGC0L7RgNC40YLRjCDQstGL0LfQvtCyXCIuIGBpbnZhbGlkX3Rva2VuYCDQsiDRgdC/0LjRgdC60LUg0YHQuNGB0YLQtdC80L3Ri9GFXG4gKiDQvtGI0LjQsdC+0Log0LTQvtC60YPQvNC10L3RgtCw0YbQuNC4INC90LXRgiwg0L3QviDRgtCw0Log0LbQtSDRgdGH0LjRgtCw0LXRgiDQvtGE0LjRhtC40LDQu9GM0L3Ri9C5IGBAYml0cml4MjQvYjI0anNzZGtgLlxuICpcbiAqINCe0YHRgtCw0LvRjNC90YvQtSDRgdC40YHRgtC10LzQvdGL0LUg0L7RiNC40LHQutC4INGC0L7QttC1INC/0YDQuNGF0L7QtNGP0YIg0YHQviDRgdGC0LDRgtGD0YHQvtC8IDQwMVxuICogKGBpbnN1ZmZpY2llbnRfc2NvcGVgLCBgTk9fQVVUSF9GT1VORGAsIGBBQ0NFU1NfREVOSUVEYCxcbiAqIGBJTlZBTElEX0NSRURFTlRJQUxTYCwgYHVzZXJfYWNjZXNzX2Vycm9yYCwgLi4uKSwg0L3QviDQvdC+0LLRi9C5INGC0L7QutC10L0g0LjRhVxuICog0L3QtSDQuNGB0L/RgNCw0LLQuNGCIOKAlCDQv9C+0Y3RgtC+0LzRgyDRgdC80L7RgtGA0LjQvCDQvdCwINC60L7QtCwg0LAg0L3QtSDRgtC+0LvRjNC60L4g0L3QsCDRgdGC0LDRgtGD0YEuXG4gKi9cbmNvbnN0IEFVVEhfRVJST1JfQ09ERVMgPSBbJ2V4cGlyZWRfdG9rZW4nLCAnaW52YWxpZF90b2tlbiddXG5cbi8qKlxuICog0KPRgdC70L7QstC40LUg0L/RgNC+0LTQu9C10L3QuNGPINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIChgQlhSZXN0U2V0dGluZ3MuYXV0aC5pc0F1dGhFcnJvcmApOlxuICogLSDQvtGC0LLQtdGCINGBINC+0YjQuNCx0LrQvtC5IEJpdHJpeCBgZXhwaXJlZF90b2tlbmAg0LjQu9C4IGBpbnZhbGlkX3Rva2VuYCDigJQg0L/RgNC4INC70Y7QsdC+0Lwg0YHRgtCw0YLRg9GB0LU7XG4gKiAtINC+0YLQstC10YIgNDAxINCx0LXQtyDRgtC10LvQsCDQvtGI0LjQsdC60LggQml0cml4IOKAlCDQvdCw0L/RgNC40LzQtdGALCDQv9GD0YHRgtC+0Lkg0L7RgtCy0LXRgiDRgdCy0L7QtdCz0L5cbiAqICAg0LHRjdC60LXQvdC0LdC/0YDQvtC60YHQuCwg0YMg0LrQvtGC0L7RgNC+0LPQviDQvdC10YIg0LTQtdC50YHRgtCy0YPRjtGJ0LXQs9C+INGC0L7QutC10L3QsC5cbiAqXG4gKiDQntGC0LLQtdGCIDQwMSDRgSDQtNGA0YPQs9C40Lwg0LrQvtC00L7QvCBCaXRyaXgg0L7RiNC40LHQutC+0Lkg0LDQstGC0L7RgNC40LfQsNGG0LjQuCDQvdC1INGB0YfQuNGC0LDQtdGC0YHRjy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQlhSZXN0QXV0aEVycm9yKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICghYXhpb3MuaXNBeGlvc0Vycm9yKGVycm9yKSB8fCAhZXJyb3IucmVzcG9uc2UpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBwYXJzZUJYUmVzdEVycm9yQm9keShlcnJvci5yZXNwb25zZS5kYXRhKVxuICBpZiAocGFyc2VkKSB7XG4gICAgcmV0dXJuIEFVVEhfRVJST1JfQ09ERVMuaW5jbHVkZXMocGFyc2VkLmVycm9yKVxuICB9XG4gIHJldHVybiBlcnJvci5yZXNwb25zZS5zdGF0dXMgPT09IDQwMVxufVxuXG4vLyDQntCx0YnQtdC1INC90LAg0LLRgdGOINCx0LjQsdC70LjQvtGC0LXQutGDINGB0L7RgdGC0L7Rj9C90LjQtSDQv9GA0L7QtNC70LXQvdC40Y8g4oCUINC60LDQuiDQuCDRgdCw0LzQuCBCWFJlc3RTZXR0aW5ncy5cbi8vIHBlbmRpbmdSZWZyZXNoIOKAlCDQuNC00YPRidC10LUg0YHQtdC50YfQsNGBINC/0YDQvtC00LvQtdC90LjQtSwg0LXQs9C+INC20LTRg9GCINCy0YHQtSDRg9C/0LDQstGI0LjQtSDQt9Cw0L/RgNC+0YHRiztcbi8vIHJlZnJlc2hDb3VudCDigJQg0YHQutC+0LvRjNC60L4g0L/RgNC+0LTQu9C10L3QuNC5INGD0LbQtSDQt9Cw0LLQtdGA0YjQuNC70L7RgdGMINGD0YHQv9C10YjQvdC+LlxubGV0IHBlbmRpbmdSZWZyZXNoOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkXG5sZXQgcmVmcmVzaENvdW50ID0gMFxuXG5mdW5jdGlvbiBzaGFyZWRSZWZyZXNoKHJlZnJlc2g6ICgpID0+IFByb21pc2U8dW5rbm93bj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFwZW5kaW5nUmVmcmVzaCkge1xuICAgIHBlbmRpbmdSZWZyZXNoID0gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgIC8vINCn0LXRgNC10LcgdGhlbiwg0YfRgtC+0LHRiyDRgdC40L3RhdGA0L7QvdC90L7QtSDQuNGB0LrQu9GO0YfQtdC90LjQtSDQsiByZWZyZXNoKCkg0YLQvtC20LUg0YHRgtCw0LvQvlxuICAgICAgLy8g0L7RgtC60LvQvtC90ZHQvdC90YvQvCDQv9GA0L7QvNC40YHQvtC8LCDQsCDQvdC1INCy0YvQu9C10YLQtdC70L4g0LjQtyBjYXRjaEVycm9yXG4gICAgICAudGhlbigoKSA9PiByZWZyZXNoKCkpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJlZnJlc2hDb3VudCsrXG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBwZW5kaW5nUmVmcmVzaCA9IHVuZGVmaW5lZFxuICAgICAgfSlcbiAgfVxuICByZXR1cm4gcGVuZGluZ1JlZnJlc2hcbn1cblxuLyoqXG4gKiDQn9C+0LLRgtC+0YAg0LfQsNC/0YDQvtGB0LAg0L/QvtGB0LvQtSDQv9GA0L7QtNC70LXQvdC40Y8g0LDQstGC0L7RgNC40LfQsNGG0LjQuCAoYEJYUmVzdFNldHRpbmdzLmF1dGgucmVmcmVzaGApLlxuICpcbiAqIGByZXF1ZXN0JGAg0LTQvtC70LbQtdC9INCx0YvRgtGMIFwi0YXQvtC70L7QtNC90YvQvFwiINC4INGH0LjRgtCw0YLRjCDQvdCw0YHRgtGA0L7QudC60Lgg0L/RgNC4INC/0L7QtNC/0LjRgdC60LUgKNC60LDQulxuICogYGRlZmVyKClgINCyIEh0dHBCWFNlcnZpY2VzKTog0L/QvtCy0YLQvtGAIOKAlCDRjdGC0L4g0L/QvtCy0YLQvtGA0L3QsNGPINC/0L7QtNC/0LjRgdC60LAsINC/0L7RjdGC0L7QvNGDXG4gKiDRgtC+0LrQtdC9LCDQsNC00YDQtdGBINC4INC30LDQs9C+0LvQvtCy0LrQuCDQsdC10YDRg9GC0YHRjyDRg9C20LUg0L3QvtCy0YvQtS4g0J3QsCDQstGC0L7RgNC+0Lkg0L/QvtC/0YvRgtC60LUg0L7RiNC40LHQutCwINC90LVcbiAqINC/0LXRgNC10YXQstCw0YLRi9Cy0LDQtdGC0YHRjyDigJQg0LfQsNC/0YDQvtGBINC/0L7QstGC0L7RgNGP0LXRgtGB0Y8g0L3QtSDQsdC+0LvRjNGI0LUg0L7QtNC90L7Qs9C+INGA0LDQt9CwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEF1dGhSZWZyZXNoPFQ+KHJlcXVlc3QkOiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gIHJldHVybiBkZWZlcigoKSA9PiB7XG4gICAgY29uc3QgeyByZWZyZXNoLCBpc0F1dGhFcnJvciA9IGlzQlhSZXN0QXV0aEVycm9yIH0gPSBCWFJlc3RTZXR0aW5ncy52YWx1ZS5hdXRoXG4gICAgaWYgKCFyZWZyZXNoKSB7XG4gICAgICByZXR1cm4gcmVxdWVzdCRcbiAgICB9XG5cbiAgICBjb25zdCByZWZyZXNoQ291bnRBdFN0YXJ0ID0gcmVmcmVzaENvdW50XG4gICAgcmV0dXJuIHJlcXVlc3QkLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICBpZiAoIWlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKVxuICAgICAgICB9XG4gICAgICAgIC8vINCf0L7QutCwINGN0YLQvtGCINC30LDQv9GA0L7RgSDQsdGL0Lsg0LIg0L/Rg9GC0LgsINGC0L7QutC10L0g0YPQttC1INC/0YDQvtC00LvQuNC70Lgg0L/QviDQvtGI0LjQsdC60LUg0LTRgNGD0LPQvtCz0L5cbiAgICAgICAgLy8g0LfQsNC/0YDQvtGB0LAg4oCUINC/0L7QstGC0L7RgNGP0LXQvCDQsdC10Lcg0L3QvtCy0L7Qs9C+INC/0YDQvtC00LvQtdC90LjRj1xuICAgICAgICBjb25zdCByZWZyZXNoZWQgPSAocmVmcmVzaENvdW50ICE9PSByZWZyZXNoQ291bnRBdFN0YXJ0KVxuICAgICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgICA6IHNoYXJlZFJlZnJlc2gocmVmcmVzaClcblxuICAgICAgICByZXR1cm4gZnJvbShyZWZyZXNoZWQpLnBpcGUoXG4gICAgICAgICAgY2F0Y2hFcnJvcigocmVmcmVzaEVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAoZXJyb3IgYXMgeyBhdXRoUmVmcmVzaEVycm9yPzogdW5rbm93biB9KS5hdXRoUmVmcmVzaEVycm9yID0gcmVmcmVzaEVycm9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcilcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gcmVxdWVzdCQpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgKVxuICB9KVxufVxuIl19
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aFJlZnJlc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9zZXJ2aWNlcy9odHRwL2F1dGhSZWZyZXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ2hGLE9BQU8sRUFBaUIsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRXpEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLGdCQUFnQixHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFBO0FBRTNEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBYztJQUM5QyxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbEQsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLE9BQU8sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoRCxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQTtBQUNoQyxDQUFDO0FBRUQsOEVBQThFO0FBQzlFLDZFQUE2RTtBQUM3RSx1RUFBdUU7QUFDdkUsNkVBQTZFO0FBQzdFLFNBQVMsYUFBYSxDQUFDLE9BQStCLEVBQUUsR0FBa0I7SUFDeEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixHQUFHLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDcEMsaUVBQWlFO1lBQ2pFLG9EQUFvRDthQUNuRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDckIsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNULEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUNwQixDQUFDLENBQUM7YUFDRCxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ1osR0FBRyxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsY0FBYyxDQUFBO0FBQzNCLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBSSxRQUF1QixFQUFFLE1BQXFCLGFBQWE7SUFDNUYsT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ2hCLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxHQUFHLGlCQUFpQixFQUFFLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUE7UUFDdEUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxRQUFRLENBQUE7UUFDakIsQ0FBQztRQUVELE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQTtRQUM1QyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQ2xCLFVBQVUsQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDaEMsQ0FBQztZQUNELG9FQUFvRTtZQUNwRSwyQ0FBMkM7WUFDM0MsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxLQUFLLG1CQUFtQixDQUFDO2dCQUMxRCxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFDbkIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFFL0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUN6QixVQUFVLENBQUMsQ0FBQyxZQUFxQixFQUFFLEVBQUU7Z0JBQ25DLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUN0QyxLQUF3QyxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQTtnQkFDM0UsQ0FBQztnQkFDRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNoQyxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQzFCLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmZXIsIGZyb20sIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJ1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuaW1wb3J0IHsgaHR0cEVycm9yUmVzcG9uc2UsIHBhcnNlQlhSZXN0RXJyb3JCb2R5IH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL2Vycm9ycydcclxuaW1wb3J0IHsgQlhSZXN0Q29udGV4dCwgZ2xvYmFsQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQnXHJcblxyXG4vKipcclxuICog0JrQvtC00Ysg0L7RiNC40LHQvtC6IEJpdHJpeCwg0LrQvtGC0L7RgNGL0LUg0LvQtdGH0LDRgtGB0Y8g0L/RgNC+0LTQu9C10L3QuNC10Lwg0YLQvtC60LXQvdCwLiBgZXhwaXJlZF90b2tlbmAg4oCUXHJcbiAqINC10LTQuNC90YHRgtCy0LXQvdC90YvQuSDRgdC40YHRgtC10LzQvdGL0Lkg0LrQvtC0LCDQtNC70Y8g0LrQvtGC0L7RgNC+0LPQviDQtNC+0LrRg9C80LXQvdGC0LDRhtC40Y8gQml0cml4MjQg0YHQvtCy0LXRgtGD0LXRglxyXG4gKiBcItC+0LHQvdC+0LLQuNGC0Ywg0YLQvtC60LXQvdGLINC4INC/0L7QstGC0L7RgNC40YLRjCDQstGL0LfQvtCyXCIuIGBpbnZhbGlkX3Rva2VuYCDQsiDRgdC/0LjRgdC60LUg0YHQuNGB0YLQtdC80L3Ri9GFXHJcbiAqINC+0YjQuNCx0L7QuiDQtNC+0LrRg9C80LXQvdGC0LDRhtC40Lgg0L3QtdGCLCDQvdC+INGC0LDQuiDQttC1INGB0YfQuNGC0LDQtdGCINC+0YTQuNGG0LjQsNC70YzQvdGL0LkgYEBiaXRyaXgyNC9iMjRqc3Nka2AuXHJcbiAqXHJcbiAqINCe0YHRgtCw0LvRjNC90YvQtSDRgdC40YHRgtC10LzQvdGL0LUg0L7RiNC40LHQutC4INGC0L7QttC1INC/0YDQuNGF0L7QtNGP0YIg0YHQviDRgdGC0LDRgtGD0YHQvtC8IDQwMVxyXG4gKiAoYGluc3VmZmljaWVudF9zY29wZWAsIGBOT19BVVRIX0ZPVU5EYCwgYEFDQ0VTU19ERU5JRURgLFxyXG4gKiBgSU5WQUxJRF9DUkVERU5USUFMU2AsIGB1c2VyX2FjY2Vzc19lcnJvcmAsIC4uLiksINC90L4g0L3QvtCy0YvQuSDRgtC+0LrQtdC9INC40YVcclxuICog0L3QtSDQuNGB0L/RgNCw0LLQuNGCIOKAlCDQv9C+0Y3RgtC+0LzRgyDRgdC80L7RgtGA0LjQvCDQvdCwINC60L7QtCwg0LAg0L3QtSDRgtC+0LvRjNC60L4g0L3QsCDRgdGC0LDRgtGD0YEuXHJcbiAqL1xyXG5jb25zdCBBVVRIX0VSUk9SX0NPREVTID0gWydleHBpcmVkX3Rva2VuJywgJ2ludmFsaWRfdG9rZW4nXVxyXG5cclxuLyoqXHJcbiAqINCj0YHQu9C+0LLQuNC1INC/0YDQvtC00LvQtdC90LjRjyDQv9C+INGD0LzQvtC70YfQsNC90LjRjiAoYEJYUmVzdFNldHRpbmdzLmF1dGguaXNBdXRoRXJyb3JgKTpcclxuICogLSDQvtGC0LLQtdGCINGBINC+0YjQuNCx0LrQvtC5IEJpdHJpeCBgZXhwaXJlZF90b2tlbmAg0LjQu9C4IGBpbnZhbGlkX3Rva2VuYCDigJQg0L/RgNC4INC70Y7QsdC+0Lwg0YHRgtCw0YLRg9GB0LU7XHJcbiAqIC0g0L7RgtCy0LXRgiA0MDEg0LHQtdC3INGC0LXQu9CwINC+0YjQuNCx0LrQuCBCaXRyaXgg4oCUINC90LDQv9GA0LjQvNC10YAsINC/0YPRgdGC0L7QuSDQvtGC0LLQtdGCINGB0LLQvtC10LPQvlxyXG4gKiAgINCx0Y3QutC10L3QtC3Qv9GA0L7QutGB0LgsINGDINC60L7RgtC+0YDQvtCz0L4g0L3QtdGCINC00LXQudGB0YLQstGD0Y7RidC10LPQviDRgtC+0LrQtdC90LAuXHJcbiAqXHJcbiAqINCe0YLQstC10YIgNDAxINGBINC00YDRg9Cz0LjQvCDQutC+0LTQvtC8IEJpdHJpeCDQvtGI0LjQsdC60L7QuSDQsNCy0YLQvtGA0LjQt9Cw0YbQuNC4INC90LUg0YHRh9C40YLQsNC10YLRgdGPLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQlhSZXN0QXV0aEVycm9yKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgcmVzcG9uc2UgPSBodHRwRXJyb3JSZXNwb25zZShlcnJvcilcbiAgaWYgKCFyZXNwb25zZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlQlhSZXN0RXJyb3JCb2R5KHJlc3BvbnNlLmRhdGEpXG4gIGlmIChwYXJzZWQpIHtcbiAgICByZXR1cm4gQVVUSF9FUlJPUl9DT0RFUy5pbmNsdWRlcyhwYXJzZWQuZXJyb3IpXG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxXHJcbn1cclxuXHJcbi8vINCh0L7RgdGC0L7Rj9C90LjQtSDQv9GA0L7QtNC70LXQvdC40Y8g0LbQuNCy0ZHRgiDQsiDQutC+0L3RgtC10LrRgdGC0LUg0LrQu9C40LXQvdGC0LAgKEJYUmVzdENvbnRleHQpOiDRgyDQs9C70L7QsdCw0LvRjNC90YvRhVxyXG4vLyDQvdCw0YHRgtGA0L7QtdC6INC+0L3QviDQvtC00L3QviDQvdCwINCy0YHRjiDQsdC40LHQu9C40L7RgtC10LrRgywg0YMg0LrQsNC20LTQvtCz0L4gbmV3IEJYUmVzdE5hdnZ5KHNldHRpbmdzKSDigJRcclxuLy8g0YHQstC+0ZEuIHBlbmRpbmdSZWZyZXNoIOKAlCDQuNC00YPRidC10LUg0YHQtdC50YfQsNGBINC/0YDQvtC00LvQtdC90LjQtSwg0LXQs9C+INC20LTRg9GCINCy0YHQtSDRg9C/0LDQstGI0LjQtVxyXG4vLyDQt9Cw0L/RgNC+0YHRiyDQutC70LjQtdC90YLQsDsgcmVmcmVzaENvdW50IOKAlCDRgdC60L7Qu9GM0LrQviDQv9GA0L7QtNC70LXQvdC40Lkg0YPQttC1INC30LDQstC10YDRiNC40LvQvtGB0Ywg0YPRgdC/0LXRiNC90L4uXHJcbmZ1bmN0aW9uIHNoYXJlZFJlZnJlc2gocmVmcmVzaDogKCkgPT4gUHJvbWlzZTx1bmtub3duPiwgY3R4OiBCWFJlc3RDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgaWYgKCFjdHgucGVuZGluZ1JlZnJlc2gpIHtcclxuICAgIGN0eC5wZW5kaW5nUmVmcmVzaCA9IFByb21pc2UucmVzb2x2ZSgpXHJcbiAgICAgIC8vINCn0LXRgNC10LcgdGhlbiwg0YfRgtC+0LHRiyDRgdC40L3RhdGA0L7QvdC90L7QtSDQuNGB0LrQu9GO0YfQtdC90LjQtSDQsiByZWZyZXNoKCkg0YLQvtC20LUg0YHRgtCw0LvQvlxyXG4gICAgICAvLyDQvtGC0LrQu9C+0L3RkdC90L3Ri9C8INC/0YDQvtC80LjRgdC+0LwsINCwINC90LUg0LLRi9C70LXRgtC10LvQviDQuNC3IGNhdGNoRXJyb3JcclxuICAgICAgLnRoZW4oKCkgPT4gcmVmcmVzaCgpKVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgY3R4LnJlZnJlc2hDb3VudCsrXHJcbiAgICAgIH0pXHJcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICBjdHgucGVuZGluZ1JlZnJlc2ggPSB1bmRlZmluZWRcclxuICAgICAgfSlcclxuICB9XHJcbiAgcmV0dXJuIGN0eC5wZW5kaW5nUmVmcmVzaFxyXG59XHJcblxyXG4vKipcclxuICog0J/QvtCy0YLQvtGAINC30LDQv9GA0L7RgdCwINC/0L7RgdC70LUg0L/RgNC+0LTQu9C10L3QuNGPINCw0LLRgtC+0YDQuNC30LDRhtC40LggKGBCWFJlc3RTZXR0aW5ncy5hdXRoLnJlZnJlc2hgKS5cclxuICpcclxuICogYHJlcXVlc3QkYCDQtNC+0LvQttC10L0g0LHRi9GC0YwgXCLRhdC+0LvQvtC00L3Ri9C8XCIg0Lgg0YfQuNGC0LDRgtGMINC90LDRgdGC0YDQvtC50LrQuCDQv9GA0Lgg0L/QvtC00L/QuNGB0LrQtSAo0LrQsNC6XHJcbiAqIGBkZWZlcigpYCDQsiBIdHRwQlhTZXJ2aWNlcyk6INC/0L7QstGC0L7RgCDigJQg0Y3RgtC+INC/0L7QstGC0L7RgNC90LDRjyDQv9C+0LTQv9C40YHQutCwLCDQv9C+0Y3RgtC+0LzRg1xyXG4gKiDRgtC+0LrQtdC9LCDQsNC00YDQtdGBINC4INC30LDQs9C+0LvQvtCy0LrQuCDQsdC10YDRg9GC0YHRjyDRg9C20LUg0L3QvtCy0YvQtS4g0J3QsCDQstGC0L7RgNC+0Lkg0L/QvtC/0YvRgtC60LUg0L7RiNC40LHQutCwINC90LVcclxuICog0L/QtdGA0LXRhdCy0LDRgtGL0LLQsNC10YLRgdGPIOKAlCDQt9Cw0L/RgNC+0YEg0L/QvtCy0YLQvtGA0Y/QtdGC0YHRjyDQvdC1INCx0L7Qu9GM0YjQtSDQvtC00L3QvtCz0L4g0YDQsNC30LAuXHJcbiAqXHJcbiAqIGBjdHhgIOKAlCDQutC+0L3RgtC10LrRgdGCINC60LvQuNC10L3RgtCwLCDQuNC3INC60L7RgtC+0YDQvtCz0L4g0LHQtdGA0YPRgtGB0Y8gYHJlZnJlc2hgLCBgaXNBdXRoRXJyb3JgINC4XHJcbiAqINC+0LHRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1INC/0YDQvtC00LvQtdC90LjRjy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB3aXRoQXV0aFJlZnJlc2g8VD4ocmVxdWVzdCQ6IE9ic2VydmFibGU8VD4sIGN0eDogQlhSZXN0Q29udGV4dCA9IGdsb2JhbENvbnRleHQpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICByZXR1cm4gZGVmZXIoKCkgPT4ge1xyXG4gICAgY29uc3QgeyByZWZyZXNoLCBpc0F1dGhFcnJvciA9IGlzQlhSZXN0QXV0aEVycm9yIH0gPSBjdHguc2V0dGluZ3MuYXV0aFxyXG4gICAgaWYgKCFyZWZyZXNoKSB7XHJcbiAgICAgIHJldHVybiByZXF1ZXN0JFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlZnJlc2hDb3VudEF0U3RhcnQgPSBjdHgucmVmcmVzaENvdW50XHJcbiAgICByZXR1cm4gcmVxdWVzdCQucGlwZShcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+IHtcclxuICAgICAgICBpZiAoIWlzQXV0aEVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vINCf0L7QutCwINGN0YLQvtGCINC30LDQv9GA0L7RgSDQsdGL0Lsg0LIg0L/Rg9GC0LgsINGC0L7QutC10L0g0YPQttC1INC/0YDQvtC00LvQuNC70Lgg0L/QviDQvtGI0LjQsdC60LUg0LTRgNGD0LPQvtCz0L5cclxuICAgICAgICAvLyDQt9Cw0L/RgNC+0YHQsCDigJQg0L/QvtCy0YLQvtGA0Y/QtdC8INCx0LXQtyDQvdC+0LLQvtCz0L4g0L/RgNC+0LTQu9C10L3QuNGPXHJcbiAgICAgICAgY29uc3QgcmVmcmVzaGVkID0gKGN0eC5yZWZyZXNoQ291bnQgIT09IHJlZnJlc2hDb3VudEF0U3RhcnQpXHJcbiAgICAgICAgICA/IFByb21pc2UucmVzb2x2ZSgpXHJcbiAgICAgICAgICA6IHNoYXJlZFJlZnJlc2gocmVmcmVzaCwgY3R4KVxyXG5cclxuICAgICAgICByZXR1cm4gZnJvbShyZWZyZXNoZWQpLnBpcGUoXHJcbiAgICAgICAgICBjYXRjaEVycm9yKChyZWZyZXNoRXJyb3I6IHVua25vd24pID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yICYmIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAoZXJyb3IgYXMgeyBhdXRoUmVmcmVzaEVycm9yPzogdW5rbm93biB9KS5hdXRoUmVmcmVzaEVycm9yID0gcmVmcmVzaEVycm9yXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiByZXF1ZXN0JClcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfSlcclxufVxyXG4iXX0=
|
|
@@ -1,75 +1,20 @@
|
|
|
1
|
-
import { from, throwError } from 'rxjs';
|
|
2
|
-
import { switchMap } from 'rxjs/operators';
|
|
3
1
|
import axios from 'axios';
|
|
4
|
-
import { SessionKeyServices } from '
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
import { SessionKeyServices } from './sessionKey';
|
|
3
|
+
/**
|
|
4
|
+
* Общая часть HTTP-клиента: экземпляр axios и источник токена и адреса.
|
|
5
|
+
* Сами запросы отправляет `HttpBXServices` (`BXRestRequest`).
|
|
6
|
+
*/
|
|
7
|
+
export class HttpServices {
|
|
9
8
|
constructor() {
|
|
10
|
-
super();
|
|
11
9
|
this.session = new SessionKeyServices();
|
|
12
|
-
this.axiosInstance = axios.create();
|
|
13
10
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
paramsClone[this.session.getKeyAuth()] = auth;
|
|
23
|
-
}
|
|
24
|
-
return this.session.getBaseUrl().pipe(switchMap((baseUrl) => {
|
|
25
|
-
if (!baseUrl) {
|
|
26
|
-
return throwError(() => this.session.getBaseUrlError('post'));
|
|
27
|
-
}
|
|
28
|
-
const fullUrl = prepareBaseAddress(baseUrl) + url;
|
|
29
|
-
if (this.session.getKeyAuth() === 'sessid') {
|
|
30
|
-
const urlEncodedBody = new URLSearchParams();
|
|
31
|
-
Object.keys(paramsClone).forEach((key) => {
|
|
32
|
-
const value = paramsClone[key];
|
|
33
|
-
if (typeof value === 'object' && value !== null) {
|
|
34
|
-
for (const subKey in value) {
|
|
35
|
-
if (Object.prototype.hasOwnProperty.call(value, subKey)) {
|
|
36
|
-
urlEncodedBody.append(`${key}[${subKey}]`, value[subKey]);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
urlEncodedBody.append(key, value);
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
return from(this.axiosInstance.post(fullUrl, urlEncodedBody.toString(), {
|
|
45
|
-
headers: {
|
|
46
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
47
|
-
},
|
|
48
|
-
}).then((response) => response.data));
|
|
49
|
-
}
|
|
50
|
-
const body = this.getHttpParamsPost(paramsClone, new FormData(), [], settings);
|
|
51
|
-
return from(this.axiosInstance.post(fullUrl, body).then((response) => response.data));
|
|
52
|
-
}));
|
|
53
|
-
}
|
|
54
|
-
httpGet(url, params = {}) {
|
|
55
|
-
const auth = this.session.getAuthParams();
|
|
56
|
-
const checkIsOn = this.session.getCheckAuthParamsIsOn();
|
|
57
|
-
const paramsClone = clone(params);
|
|
58
|
-
if (checkIsOn) {
|
|
59
|
-
if (!auth) {
|
|
60
|
-
return throwError(() => this.session.getAuthError('get'));
|
|
61
|
-
}
|
|
62
|
-
paramsClone[this.session.getKeyAuth()] = auth;
|
|
63
|
-
}
|
|
64
|
-
return this.session.getBaseUrl().pipe(switchMap((baseUrl) => {
|
|
65
|
-
if (!baseUrl) {
|
|
66
|
-
return throwError(() => this.session.getBaseUrlError('get'));
|
|
67
|
-
}
|
|
68
|
-
const fullUrl = prepareBaseAddress(baseUrl) + url;
|
|
69
|
-
const queryString = new URLSearchParams(paramsClone).toString();
|
|
70
|
-
const finalUrl = `${fullUrl}?${queryString}`;
|
|
71
|
-
return from(this.axiosInstance.get(finalUrl).then((response) => response.data));
|
|
72
|
-
}));
|
|
11
|
+
/**
|
|
12
|
+
* Экземпляр axios клиента. Один на контекст (клиента со своими настройками
|
|
13
|
+
* или глобальные настройки) и создаётся при первом запросе — раньше каждый
|
|
14
|
+
* объект запроса создавал свой.
|
|
15
|
+
*/
|
|
16
|
+
get axiosInstance() {
|
|
17
|
+
return this.session.ctx.axios ??= axios.create();
|
|
73
18
|
}
|
|
74
19
|
}
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2h0dHAvaHR0cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQXdCLE1BQU0sT0FBTyxDQUFBO0FBQzVDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUVqRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUF6QjtRQUVrQixZQUFPLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFBO0lBVXBELENBQUM7SUFSQzs7OztPQUlHO0lBQ0gsSUFBYyxhQUFhO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUNsRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MsIHsgQXhpb3NJbnN0YW5jZSB9IGZyb20gJ2F4aW9zJ1xuaW1wb3J0IHsgU2Vzc2lvbktleVNlcnZpY2VzIH0gZnJvbSAnLi9zZXNzaW9uS2V5J1xuXG4vKipcbiAqINCe0LHRidCw0Y8g0YfQsNGB0YLRjCBIVFRQLdC60LvQuNC10L3RgtCwOiDRjdC60LfQtdC80L/Qu9GP0YAgYXhpb3Mg0Lgg0LjRgdGC0L7Rh9C90LjQuiDRgtC+0LrQtdC90LAg0Lgg0LDQtNGA0LXRgdCwLlxuICog0KHQsNC80Lgg0LfQsNC/0YDQvtGB0Ysg0L7RgtC/0YDQsNCy0LvRj9C10YIgYEh0dHBCWFNlcnZpY2VzYCAoYEJYUmVzdFJlcXVlc3RgKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEh0dHBTZXJ2aWNlcyB7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNlc3Npb24gPSBuZXcgU2Vzc2lvbktleVNlcnZpY2VzKClcblxuICAvKipcbiAgICog0K3QutC30LXQvNC/0LvRj9GAIGF4aW9zINC60LvQuNC10L3RgtCwLiDQntC00LjQvSDQvdCwINC60L7QvdGC0LXQutGB0YIgKNC60LvQuNC10L3RgtCwINGB0L4g0YHQstC+0LjQvNC4INC90LDRgdGC0YDQvtC50LrQsNC80LhcbiAgICog0LjQu9C4INCz0LvQvtCx0LDQu9GM0L3Ri9C1INC90LDRgdGC0YDQvtC50LrQuCkg0Lgg0YHQvtC30LTQsNGR0YLRgdGPINC/0YDQuCDQv9C10YDQstC+0Lwg0LfQsNC/0YDQvtGB0LUg4oCUINGA0LDQvdGM0YjQtSDQutCw0LbQtNGL0LlcbiAgICog0L7QsdGK0LXQutGCINC30LDQv9GA0L7RgdCwINGB0L7Qt9C00LDQstCw0Lsg0YHQstC+0LkuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGF4aW9zSW5zdGFuY2UoKTogQXhpb3NJbnN0YW5jZSB7XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5jdHguYXhpb3MgPz89IGF4aW9zLmNyZWF0ZSgpXG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { httpErrorResponse, parseBXRestErrorBody } from '../../functions/errors';
|
|
2
|
+
/** `retryOnQueryLimit: true`: всего 3 попытки, пауза перед второй — 1000 мс, дальше вдвое больше. */
|
|
3
|
+
export const DEFAULT_RETRY_ON_QUERY_LIMIT = { attempts: 3, delay: 1000 };
|
|
4
|
+
/** `timeout: true`: 60 000 мс на один HTTP-запрос. */
|
|
5
|
+
export const DEFAULT_TIMEOUT = 60_000;
|
|
6
|
+
/** `throttle: true`: 2 запроса в секунду — лимит Bitrix24 на обычных тарифах. */
|
|
7
|
+
export const DEFAULT_THROTTLE = { perSecond: 2 };
|
|
8
|
+
/**
|
|
9
|
+
* Запрос не завершился за время из `timeout` в настройках. В `.resVanilla()`
|
|
10
|
+
* приходит сама эта ошибка, в `.res()` — в `cause`.
|
|
11
|
+
*/
|
|
12
|
+
export class BXRestTimeoutError extends Error {
|
|
13
|
+
constructor(timeout) {
|
|
14
|
+
super(`The request did not finish in ${timeout} ms`);
|
|
15
|
+
this.timeout = timeout;
|
|
16
|
+
this.name = 'BXRestTimeoutError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Встроенные шаги из настроек, в этом порядке: повтор, очередь, таймаут.
|
|
21
|
+
* Повтор — снаружи: каждая попытка заново встаёт в очередь и получает свой
|
|
22
|
+
* таймаут. Таймаут — внутри очереди: ожидание своей очереди его не тратит.
|
|
23
|
+
*/
|
|
24
|
+
export function builtInMiddleware(settings, state) {
|
|
25
|
+
const steps = [];
|
|
26
|
+
if (settings.retryOnQueryLimit) {
|
|
27
|
+
const own = (settings.retryOnQueryLimit === true) ? {} : settings.retryOnQueryLimit;
|
|
28
|
+
const attempts = own.attempts ?? DEFAULT_RETRY_ON_QUERY_LIMIT.attempts;
|
|
29
|
+
const delay = own.delay ?? DEFAULT_RETRY_ON_QUERY_LIMIT.delay;
|
|
30
|
+
if (!Number.isInteger(attempts) || attempts < 1) {
|
|
31
|
+
throw invalid('retryOnQueryLimit.attempts', attempts, 'a whole number from 1');
|
|
32
|
+
}
|
|
33
|
+
if (!Number.isFinite(delay) || delay < 0) {
|
|
34
|
+
throw invalid('retryOnQueryLimit.delay', delay, 'a number of milliseconds from 0');
|
|
35
|
+
}
|
|
36
|
+
steps.push(retryOnQueryLimit(attempts, delay));
|
|
37
|
+
}
|
|
38
|
+
if (settings.throttle) {
|
|
39
|
+
const own = (settings.throttle === true) ? {} : settings.throttle;
|
|
40
|
+
const perSecond = own.perSecond ?? DEFAULT_THROTTLE.perSecond;
|
|
41
|
+
if (!Number.isFinite(perSecond) || perSecond <= 0) {
|
|
42
|
+
throw invalid('throttle.perSecond', perSecond, 'a number above 0');
|
|
43
|
+
}
|
|
44
|
+
steps.push(throttle(perSecond, state));
|
|
45
|
+
}
|
|
46
|
+
if (settings.timeout) {
|
|
47
|
+
const ms = (settings.timeout === true) ? DEFAULT_TIMEOUT : settings.timeout;
|
|
48
|
+
// setTimeout считает больше 2^31 − 1 мс за 0 и сработал бы сразу
|
|
49
|
+
if (!Number.isFinite(ms) || ms <= 0 || ms > 2_147_483_647) {
|
|
50
|
+
throw invalid('timeout', ms, 'a number of milliseconds from 1 to 2147483647');
|
|
51
|
+
}
|
|
52
|
+
steps.push(timeout(ms));
|
|
53
|
+
}
|
|
54
|
+
return steps;
|
|
55
|
+
}
|
|
56
|
+
function invalid(name, value, expected) {
|
|
57
|
+
return new TypeError(`bx-rest settings: ${name} must be ${expected}, got ${String(value)}`);
|
|
58
|
+
}
|
|
59
|
+
function abortReason(signal) {
|
|
60
|
+
return signal.reason ?? new Error('The request was aborted');
|
|
61
|
+
}
|
|
62
|
+
/** Пауза, которую прерывает отмена запроса. */
|
|
63
|
+
function wait(ms, signal) {
|
|
64
|
+
return new Promise((resolve, reject) => {
|
|
65
|
+
if (signal?.aborted) {
|
|
66
|
+
reject(abortReason(signal));
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const onAbort = () => {
|
|
70
|
+
clearTimeout(timer);
|
|
71
|
+
reject(abortReason(signal));
|
|
72
|
+
};
|
|
73
|
+
const timer = setTimeout(() => {
|
|
74
|
+
signal?.removeEventListener('abort', onAbort);
|
|
75
|
+
resolve();
|
|
76
|
+
}, ms);
|
|
77
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Повтор при `QUERY_LIMIT_EXCEEDED`: портал отвечает так (HTTP 503), когда
|
|
82
|
+
* превышен лимит частоты запросов. Пауза растёт вдвое: `delay`, `2 × delay`, ...
|
|
83
|
+
* `attempts` — сколько всего попыток, вместе с первой.
|
|
84
|
+
*/
|
|
85
|
+
function retryOnQueryLimit(attempts, delay) {
|
|
86
|
+
return async (config, next) => {
|
|
87
|
+
for (let attempt = 1;; attempt++) {
|
|
88
|
+
try {
|
|
89
|
+
return await next(config);
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
const code = parseBXRestErrorBody(httpErrorResponse(error)?.data)?.error;
|
|
93
|
+
if (attempt >= attempts || code !== 'QUERY_LIMIT_EXCEEDED') {
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
await wait(delay * 2 ** (attempt - 1), config.signal);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Не больше `perSecond` запросов в секунду: лишние ждут своей очереди.
|
|
103
|
+
* Очередь общая для всех запросов клиента (`state` — его контекст).
|
|
104
|
+
*/
|
|
105
|
+
function throttle(perSecond, state) {
|
|
106
|
+
const interval = 1000 / perSecond;
|
|
107
|
+
return (config, next) => {
|
|
108
|
+
const now = Date.now();
|
|
109
|
+
const start = Math.max(now, state.throttleNextSlot);
|
|
110
|
+
const reserved = start + interval;
|
|
111
|
+
state.throttleNextSlot = reserved;
|
|
112
|
+
if (start <= now) {
|
|
113
|
+
return next(config);
|
|
114
|
+
}
|
|
115
|
+
return wait(start - now, config.signal).then(() => next(config), (error) => {
|
|
116
|
+
// Отменённый запрос освобождает своё место, если за ним никто не встал
|
|
117
|
+
if (state.throttleNextSlot === reserved) {
|
|
118
|
+
state.throttleNextSlot = start;
|
|
119
|
+
}
|
|
120
|
+
throw error;
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/** Отменяет запрос, если он не завершился за `ms` миллисекунд. */
|
|
125
|
+
function timeout(ms) {
|
|
126
|
+
return (config, next) => {
|
|
127
|
+
const controller = new AbortController();
|
|
128
|
+
const onAbort = () => controller.abort(abortReason(config.signal));
|
|
129
|
+
if (config.signal?.aborted) {
|
|
130
|
+
onAbort();
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
config.signal?.addEventListener('abort', onAbort, { once: true });
|
|
134
|
+
}
|
|
135
|
+
let timer;
|
|
136
|
+
const timedOut = new Promise((_, reject) => {
|
|
137
|
+
timer = setTimeout(() => {
|
|
138
|
+
const error = new BXRestTimeoutError(ms);
|
|
139
|
+
controller.abort(error);
|
|
140
|
+
reject(error);
|
|
141
|
+
}, ms);
|
|
142
|
+
});
|
|
143
|
+
return Promise.race([next({ ...config, signal: controller.signal }), timedOut]).finally(() => {
|
|
144
|
+
clearTimeout(timer);
|
|
145
|
+
config.signal?.removeEventListener('abort', onAbort);
|
|
146
|
+
});
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2h0dHAvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUdoRixxR0FBcUc7QUFDckcsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQTtBQUN4RSxzREFBc0Q7QUFDdEQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQTtBQUNyQyxpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUE7QUFFaEQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUs7SUFDM0MsWUFBcUIsT0FBZTtRQUNsQyxLQUFLLENBQUMsaUNBQWlDLE9BQU8sS0FBSyxDQUFDLENBQUE7UUFEakMsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUVsQyxJQUFJLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFBO0lBQ2xDLENBQUM7Q0FDRjtBQU9EOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBeUIsRUFBRSxLQUFvQjtJQUMvRSxNQUFNLEtBQUssR0FBdUIsRUFBRSxDQUFBO0lBQ3BDLElBQUksUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFBO1FBQ25GLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLElB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bmltcG9ydCB7IGh0dHBFcnJvclJlc3BvbnNlLCBwYXJzZUJYUmVzdEVycm9yQm9keSB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9lcnJvcnMnXG5pbXBvcnQgeyBpQlhSZXN0U2V0dGluZ3MgfSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vc2V0dGluZ3MnXG5cbi8qKiBgcmV0cnlPblF1ZXJ5TGltaXQ6IHRydWVgOiDQstGB0LXQs9C+IDMg0L/QvtC/0YvRgtC60LgsINC/0LDRg9C30LAg0L/QtdGA0LXQtCDQstGC0L7RgNC+0Lkg4oCUIDEwMDAg0LzRgSwg0LTQsNC70YzRiNC1INCy0LTQstC+0LUg0LHQvtC70YzRiNC1LiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVUUllfT05fUVVFUllfTElNSVQgPSB7IGF0dGVtcHRzOiAzLCBkZWxheTogMTAwMCB9XG4vKiogYHRpbWVvdXQ6IHRydWVgOiA2MCAwMDAg0LzRgSDQvdCwINC+0LTQuNC9IEhUVFAt0LfQsNC/0YDQvtGBLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVElNRU9VVCA9IDYwXzAwMFxuLyoqIGB0aHJvdHRsZTogdHJ1ZWA6IDIg0LfQsNC/0YDQvtGB0LAg0LIg0YHQtdC60YPQvdC00YMg4oCUINC70LjQvNC40YIgQml0cml4MjQg0L3QsCDQvtCx0YvRh9C90YvRhSDRgtCw0YDQuNGE0LDRhS4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RIUk9UVExFID0geyBwZXJTZWNvbmQ6IDIgfVxuXG4vKipcbiAqINCX0LDQv9GA0L7RgSDQvdC1INC30LDQstC10YDRiNC40LvRgdGPINC30LAg0LLRgNC10LzRjyDQuNC3IGB0aW1lb3V0YCDQsiDQvdCw0YHRgtGA0L7QudC60LDRhS4g0JIgYC5yZXNWYW5pbGxhKClgXG4gKiDQv9GA0LjRhdC+0LTQuNGCINGB0LDQvNCwINGN0YLQsCDQvtGI0LjQsdC60LAsINCyIGAucmVzKClgIOKAlCDQsiBgY2F1c2VgLlxuICovXG5leHBvcnQgY2xhc3MgQlhSZXN0VGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSB0aW1lb3V0OiBudW1iZXIpIHtcbiAgICBzdXBlcihgVGhlIHJlcXVlc3QgZGlkIG5vdCBmaW5pc2ggaW4gJHt0aW1lb3V0fSBtc2ApXG4gICAgdGhpcy5uYW1lID0gJ0JYUmVzdFRpbWVvdXRFcnJvcidcbiAgfVxufVxuXG4vKiog0JPQtNC1INC60LvQuNC10L3RgiDRhdGA0LDQvdC40YIg0L7Rh9C10YDQtdC00YwgYHRocm90dGxlYCDigJQg0LIg0YHQstC+0ZHQvCDQutC+0L3RgtC10LrRgdGC0LUuICovXG5leHBvcnQgaW50ZXJmYWNlIFRocm90dGxlU3RhdGUge1xuICB0aHJvdHRsZU5leHRTbG90OiBudW1iZXJcbn1cblxuLyoqXG4gKiDQktGB0YLRgNC+0LXQvdC90YvQtSDRiNCw0LPQuCDQuNC3INC90LDRgdGC0YDQvtC10LosINCyINGN0YLQvtC8INC/0L7RgNGP0LTQutC1OiDQv9C+0LLRgtC+0YAsINC+0YfQtdGA0LXQtNGMLCDRgtCw0LnQvNCw0YPRgi5cbiAqINCf0L7QstGC0L7RgCDigJQg0YHQvdCw0YDRg9C20Lg6INC60LDQttC00LDRjyDQv9C+0L/Ri9GC0LrQsCDQt9Cw0L3QvtCy0L4g0LLRgdGC0LDRkdGCINCyINC+0YfQtdGA0LXQtNGMINC4INC/0L7Qu9GD0YfQsNC10YIg0YHQstC+0LlcbiAqINGC0LDQudC80LDRg9GCLiDQotCw0LnQvNCw0YPRgiDigJQg0LLQvdGD0YLRgNC4INC+0YfQtdGA0LXQtNC4OiDQvtC20LjQtNCw0L3QuNC1INGB0LLQvtC10Lkg0L7Rh9C10YDQtdC00Lgg0LXQs9C+INC90LUg0YLRgNCw0YLQuNGCLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbHRJbk1pZGRsZXdhcmUoc2V0dGluZ3M6IGlCWFJlc3RTZXR0aW5ncywgc3RhdGU6IFRocm90dGxlU3RhdGUpOiBCWFJlc3RNaWRkbGV3YXJlW10ge1xuICBjb25zdCBzdGVwczogQlhSZXN0TWlkZGxld2FyZVtdID0gW11cbiAgaWYgKHNldHRpbmdzLnJldHJ5T25RdWVyeUxpbWl0KSB7XG4gICAgY29uc3Qgb3duID0gKHNldHRpbmdzLnJldHJ5T25RdWVyeUxpbWl0ID09PSB0cnVlKSA/IHt9IDogc2V0dGluZ3MucmV0cnlPblF1ZXJ5TGltaXRcbiAgICBjb25zdCBhdHRlbXB0cyA9IG93bi5hdHRlbXB0cyA/PyBERUZBVUxUX1JFVFJZX09OX1FVRVJZX0xJTUlULmF0dGVtcHRzXG4gICAgY29uc3QgZGVsYXkgPSBvd24uZGVsYXkgPz8gREVGQVVMVF9SRVRSWV9PTl9RVUVSWV9MSU1JVC5kZWxheVxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhdHRlbXB0cykgfHwgYXR0ZW1wdHMgPCAxKSB7XG4gICAgICB0aHJvdyBpbnZhbGlkKCdyZXRyeU9uUXVlcnlMaW1pdC5hdHRlbXB0cycsIGF0dGVtcHRzLCAnYSB3aG9sZSBudW1iZXIgZnJvbSAxJylcbiAgICB9XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoZGVsYXkpIHx8IGRlbGF5IDwgMCkge1xuICAgICAgdGhyb3cgaW52YWxpZCgncmV0cnlPblF1ZXJ5TGltaXQuZGVsYXknLCBkZWxheSwgJ2EgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIDAnKVxuICAgIH1cbiAgICBzdGVwcy5wdXNoKHJldHJ5T25RdWVyeUxpbWl0KGF0dGVtcHRzLCBkZWxheSkpXG4gIH1cbiAgaWYgKHNldHRpbmdzLnRocm90dGxlKSB7XG4gICAgY29uc3Qgb3duID0gKHNldHRpbmdzLnRocm90dGxlID09PSB0cnVlKSA/IHt9IDogc2V0dGluZ3MudGhyb3R0bGVcbiAgICBjb25zdCBwZXJTZWNvbmQgPSBvd24ucGVyU2Vjb25kID8/IERFRkFVTFRfVEhST1RUTEUucGVyU2Vjb25kXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocGVyU2Vjb25kKSB8fCBwZXJTZWNvbmQgPD0gMCkge1xuICAgICAgdGhyb3cgaW52YWxpZCgndGhyb3R0bGUucGVyU2Vjb25kJywgcGVyU2Vjb25kLCAnYSBudW1iZXIgYWJvdmUgMCcpXG4gICAgfVxuICAgIHN0ZXBzLnB1c2godGhyb3R0bGUocGVyU2Vjb25kLCBzdGF0ZSkpXG4gIH1cbiAgaWYgKHNldHRpbmdzLnRpbWVvdXQpIHtcbiAgICBjb25zdCBtcyA9IChzZXR0aW5ncy50aW1lb3V0ID09PSB0cnVlKSA/IERFRkFVTFRfVElNRU9VVCA6IHNldHRpbmdzLnRpbWVvdXRcbiAgICAvLyBzZXRUaW1lb3V0INGB0YfQuNGC0LDQtdGCINCx0L7Qu9GM0YjQtSAyXjMxIOKIkiAxINC80YEg0LfQsCAwINC4INGB0YDQsNCx0L7RgtCw0Lsg0LHRiyDRgdGA0LDQt9GDXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobXMpIHx8IG1zIDw9IDAgfHwgbXMgPiAyXzE0N180ODNfNjQ3KSB7XG4gICAgICB0aHJvdyBpbnZhbGlkKCd0aW1lb3V0JywgbXMsICdhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSAxIHRvIDIxNDc0ODM2NDcnKVxuICAgIH1cbiAgICBzdGVwcy5wdXNoKHRpbWVvdXQobXMpKVxuICB9XG4gIHJldHVybiBzdGVwc1xufVxuXG5mdW5jdGlvbiBpbnZhbGlkKG5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBUeXBlRXJyb3Ige1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihgYngtcmVzdCBzZXR0aW5nczogJHtuYW1lfSBtdXN0IGJlICR7ZXhwZWN0ZWR9LCBnb3QgJHtTdHJpbmcodmFsdWUpfWApXG59XG5cbmZ1bmN0aW9uIGFib3J0UmVhc29uKHNpZ25hbDogQWJvcnRTaWduYWwpOiB1bmtub3duIHtcbiAgcmV0dXJuIHNpZ25hbC5yZWFzb24gPz8gbmV3IEVycm9yKCdUaGUgcmVxdWVzdCB3YXMgYWJvcnRlZCcpXG59XG5cbi8qKiDQn9Cw0YPQt9CwLCDQutC+0YLQvtGA0YPRjiDQv9GA0LXRgNGL0LLQsNC10YIg0L7RgtC80LXQvdCwINC30LDQv9GA0L7RgdCwLiAqL1xuZnVuY3Rpb24gd2FpdChtczogbnVtYmVyLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgIHJlamVjdChhYm9ydFJlYXNvbihzaWduYWwpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgICByZWplY3QoYWJvcnRSZWFzb24oc2lnbmFsIGFzIEFib3J0U2lnbmFsKSlcbiAgICB9XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KVxuICAgICAgcmVzb2x2ZSgpXG4gICAgfSwgbXMpXG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KVxuICB9KVxufVxuXG4vKipcbiAqINCf0L7QstGC0L7RgCDQv9GA0LggYFFVRVJZX0xJTUlUX0VYQ0VFREVEYDog0L/QvtGA0YLQsNC7INC+0YLQstC10YfQsNC10YIg0YLQsNC6IChIVFRQIDUwMyksINC60L7Qs9C00LBcbiAqINC/0YDQtdCy0YvRiNC10L0g0LvQuNC80LjRgiDRh9Cw0YHRgtC+0YLRiyDQt9Cw0L/RgNC+0YHQvtCyLiDQn9Cw0YPQt9CwINGA0LDRgdGC0ZHRgiDQstC00LLQvtC1OiBgZGVsYXlgLCBgMiDDlyBkZWxheWAsIC4uLlxuICogYGF0dGVtcHRzYCDigJQg0YHQutC+0LvRjNC60L4g0LLRgdC10LPQviDQv9C+0L/Ri9GC0L7Quiwg0LLQvNC10YHRgtC1INGBINC/0LXRgNCy0L7QuS5cbiAqL1xuZnVuY3Rpb24gcmV0cnlPblF1ZXJ5TGltaXQoYXR0ZW1wdHM6IG51bWJlciwgZGVsYXk6IG51bWJlcik6IEJYUmVzdE1pZGRsZXdhcmUge1xuICByZXR1cm4gYXN5bmMgKGNvbmZpZywgbmV4dCkgPT4ge1xuICAgIGZvciAobGV0IGF0dGVtcHQgPSAxOyA7IGF0dGVtcHQrKykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG5leHQoY29uZmlnKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgY29kZSA9IHBhcnNlQlhSZXN0RXJyb3JCb2R5KGh0dHBFcnJvclJlc3BvbnNlKGVycm9yKT8uZGF0YSk/LmVycm9yXG4gICAgICAgIGlmIChhdHRlbXB0ID49IGF0dGVtcHRzIHx8IGNvZGUgIT09ICdRVUVSWV9MSU1JVF9FWENFRURFRCcpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHdhaXQoZGVsYXkgKiAyICoqIChhdHRlbXB0IC0gMSksIGNvbmZpZy5zaWduYWwpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICog0J3QtSDQsdC+0LvRjNGI0LUgYHBlclNlY29uZGAg0LfQsNC/0YDQvtGB0L7QsiDQsiDRgdC10LrRg9C90LTRgzog0LvQuNGI0L3QuNC1INC20LTRg9GCINGB0LLQvtC10Lkg0L7Rh9C10YDQtdC00LguXG4gKiDQntGH0LXRgNC10LTRjCDQvtCx0YnQsNGPINC00LvRjyDQstGB0LXRhSDQt9Cw0L/RgNC+0YHQvtCyINC60LvQuNC10L3RgtCwIChgc3RhdGVgIOKAlCDQtdCz0L4g0LrQvtC90YLQtdC60YHRgikuXG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKHBlclNlY29uZDogbnVtYmVyLCBzdGF0ZTogVGhyb3R0bGVTdGF0ZSk6IEJYUmVzdE1pZGRsZXdhcmUge1xuICBjb25zdCBpbnRlcnZhbCA9IDEwMDAgLyBwZXJTZWNvbmRcbiAgcmV0dXJuIChjb25maWcsIG5leHQpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG4gICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heChub3csIHN0YXRlLnRocm90dGxlTmV4dFNsb3QpXG4gICAgY29uc3QgcmVzZXJ2ZWQgPSBzdGFydCArIGludGVydmFsXG4gICAgc3RhdGUudGhyb3R0bGVOZXh0U2xvdCA9IHJlc2VydmVkXG4gICAgaWYgKHN0YXJ0IDw9IG5vdykge1xuICAgICAgcmV0dXJuIG5leHQoY29uZmlnKVxuICAgIH1cbiAgICByZXR1cm4gd2FpdChzdGFydCAtIG5vdywgY29uZmlnLnNpZ25hbCkudGhlbihcbiAgICAgICgpID0+IG5leHQoY29uZmlnKSxcbiAgICAgIChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAvLyDQntGC0LzQtdC90ZHQvdC90YvQuSDQt9Cw0L/RgNC+0YEg0L7RgdCy0L7QsdC+0LbQtNCw0LXRgiDRgdCy0L7RkSDQvNC10YHRgtC+LCDQtdGB0LvQuCDQt9CwINC90LjQvCDQvdC40LrRgtC+INC90LUg0LLRgdGC0LDQu1xuICAgICAgICBpZiAoc3RhdGUudGhyb3R0bGVOZXh0U2xvdCA9PT0gcmVzZXJ2ZWQpIHtcbiAgICAgICAgICBzdGF0ZS50aHJvdHRsZU5leHRTbG90ID0gc3RhcnRcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIClcbiAgfVxufVxuXG4vKiog0J7RgtC80LXQvdGP0LXRgiDQt9Cw0L/RgNC+0YEsINC10YHQu9C4INC+0L0g0L3QtSDQt9Cw0LLQtdGA0YjQuNC70YHRjyDQt9CwIGBtc2Ag0LzQuNC70LvQuNGB0LXQutGD0L3QtC4gKi9cbmZ1bmN0aW9uIHRpbWVvdXQobXM6IG51bWJlcik6IEJYUmVzdE1pZGRsZXdhcmUge1xuICByZXR1cm4gKGNvbmZpZywgbmV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4gY29udHJvbGxlci5hYm9ydChhYm9ydFJlYXNvbihjb25maWcuc2lnbmFsIGFzIEFib3J0U2lnbmFsKSlcbiAgICBpZiAoY29uZmlnLnNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgb25BYm9ydCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZy5zaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pXG4gICAgfVxuICAgIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWRcbiAgICBjb25zdCB0aW1lZE91dCA9IG5ldyBQcm9taXNlPG5ldmVyPigoXywgcmVqZWN0KSA9PiB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBCWFJlc3RUaW1lb3V0RXJyb3IobXMpXG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyb3IpXG4gICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgIH0sIG1zKVxuICAgIH0pXG4gICAgcmV0dXJuIFByb21pc2UucmFjZShbbmV4dCh7IC4uLmNvbmZpZywgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KSwgdGltZWRPdXRdKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICAgIGNvbmZpZy5zaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydClcbiAgICB9KVxuICB9XG59XG4iXX0=
|
|
@@ -2,8 +2,9 @@ import Cookies from '../../services/vanilla/cookies';
|
|
|
2
2
|
import { of, Subscription } from 'rxjs';
|
|
3
3
|
import { prepareBaseAddress } from '../base';
|
|
4
4
|
import { LocalStorageServices as LocalStorage } from '../../services/vanilla/localStorage';
|
|
5
|
-
import {
|
|
5
|
+
import { DEFAULT_BX_REST_SETTINGS } from '../../settings';
|
|
6
6
|
import { SessionStorage } from '../vanilla/sessionStorage';
|
|
7
|
+
import { currentContext } from '../context';
|
|
7
8
|
export class SessionKeyError extends Error {
|
|
8
9
|
constructor(message) {
|
|
9
10
|
super(message);
|
|
@@ -15,12 +16,18 @@ export class SessionKeyServices {
|
|
|
15
16
|
// НОВЫЙ объект (this.value = {...this.value, ...}), а не мутирует старый —
|
|
16
17
|
// поэтому `= BXRestSettings.value` в виде обычного поля навсегда
|
|
17
18
|
// "заморозил" бы то, что было на момент создания SessionKeyServices.
|
|
18
|
-
// Геттер вместо этого читает
|
|
19
|
-
//
|
|
19
|
+
// Геттер вместо этого читает актуальные настройки при каждом обращении:
|
|
20
|
+
// свои настройки клиента или глобальные BXRestSettings.value.
|
|
20
21
|
get BX_REST_SETTINGS() {
|
|
21
|
-
return
|
|
22
|
+
return this.ctx.settings;
|
|
22
23
|
}
|
|
23
24
|
constructor() {
|
|
25
|
+
/**
|
|
26
|
+
* Контекст клиента, в котором создан объект: внутри `new BXRestNavvy(settings)`
|
|
27
|
+
* — контекст этого клиента, в остальных случаях — глобальные настройки.
|
|
28
|
+
* Объявлен первым: конструктор ниже уже читает настройки.
|
|
29
|
+
*/
|
|
30
|
+
this.ctx = currentContext();
|
|
24
31
|
this.authHave = false;
|
|
25
32
|
this.subscribe = {
|
|
26
33
|
authData: new Subscription()
|
|
@@ -79,6 +86,10 @@ export class SessionKeyServices {
|
|
|
79
86
|
getHeaders() {
|
|
80
87
|
return { ...this.BX_REST_SETTINGS.headers };
|
|
81
88
|
}
|
|
89
|
+
/** Свои middleware из настроек (`middleware`), читаются при каждом запросе — как и остальные настройки. */
|
|
90
|
+
getMiddleware() {
|
|
91
|
+
return this.BX_REST_SETTINGS.middleware ?? [];
|
|
92
|
+
}
|
|
82
93
|
getSessid() {
|
|
83
94
|
const check = this.getSearchParam('sessid');
|
|
84
95
|
if (check) {
|
|
@@ -243,4 +254,4 @@ export class SessionKeyServices {
|
|
|
243
254
|
return (value && value.length > 0) ? value : undefined;
|
|
244
255
|
}
|
|
245
256
|
}
|
|
246
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbktleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2h0dHAvc2Vzc2lvbktleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE9BQU8sTUFBTSxnQ0FBZ0MsQ0FBQTtBQUNwRCxPQUFPLEVBQWMsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDNUMsT0FBTyxFQUFFLG9CQUFvQixJQUFJLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQzFGLE9BQU8sRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFLMUQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsS0FBSztJQUN4QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQTtJQUMvQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sa0JBQWtCO0lBUTdCLDJFQUEyRTtJQUMzRSwyRUFBMkU7SUFDM0UsaUVBQWlFO0lBQ2pFLHFFQUFxRTtJQUNyRSx3RUFBd0U7SUFDeEUsYUFBYTtJQUNiLElBQVksZ0JBQWdCO1FBQzFCLE9BQU8sY0FBYyxDQUFDLEtBQUssQ0FBQTtJQUM3QixDQUFDO0lBRUQ7UUFoQkEsYUFBUSxHQUFHLEtBQUssQ0FBQTtRQUVoQixjQUFTLEdBQUc7WUFDVixRQUFRLEVBQUUsSUFBSSxZQUFZLEVBQUU7U0FDN0IsQ0FBQTtRQWNDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQWMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4RSxJQUFJLElBQUks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QUE7SUFDeEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvb2tpZXMgZnJvbSAnLi4vLi4vc2VydmljZXMvdmFuaWxsYS9jb29raWVzJ1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgcHJlcGFyZUJhc2VBZGRyZXNzIH0gZnJvbSAnLi4vYmFzZSdcclxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZXMgYXMgTG9jYWxTdG9yYWdlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmFuaWxsYS9sb2NhbFN0b3JhZ2UnXHJcbmltcG9ydCB7IEJYUmVzdFNldHRpbmdzLCBERUZBVUxUX0JYX1JFU1RfU0VUVElOR1MgfSBmcm9tICcuLi8uLi9zZXR0aW5ncydcclxuaW1wb3J0IHsgaUJYUmVzdEF1dGggfSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vYXV0aC9zYXZlJ1xyXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gJy4uL3ZhbmlsbGEvc2Vzc2lvblN0b3JhZ2UnXHJcblxyXG50eXBlIElLZXlBdXRoID0gJ3Nlc3NpZCcgfCAnYXV0aCcgfCBzdHJpbmdcclxudHlwZSBTdG9yYWdlS2luZCA9ICdsb2NhbFN0b3JhZ2UnIHwgJ3Nlc3Npb25TdG9yYWdlJ1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlc3Npb25LZXlFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIHN1cGVyKG1lc3NhZ2UpXHJcbiAgICB0aGlzLm5hbWUgPSAnU2Vzc2lvbktleUVycm9yJ1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNlc3Npb25LZXlTZXJ2aWNlcyB7XHJcblxyXG4gIGF1dGhIYXZlID0gZmFsc2VcclxuICBhdXRoRGF0YTogaUJYUmVzdEF1dGggfCB1bmRlZmluZWRcclxuICBzdWJzY3JpYmUgPSB7XHJcbiAgICBhdXRoRGF0YTogbmV3IFN1YnNjcmlwdGlvbigpXHJcbiAgfVxyXG5cclxuICAvLyDQk9C10YLRgtC10YAsINCwINC90LUg0L/QvtC70LUg0YEg0L7QtNC90L7RgNCw0LfQvtCy0YvQvCDRgdC90LjQvNC60L7QvDogQlhSZXN0U2V0dGluZ3MudXBkYXRlKCkg0YHQvtC30LTQsNGR0YJcclxuICAvLyDQndCe0JLQq9CZINC+0LHRitC10LrRgiAodGhpcy52YWx1ZSA9IHsuLi50aGlzLnZhbHVlLCAuLi59KSwg0LAg0L3QtSDQvNGD0YLQuNGA0YPQtdGCINGB0YLQsNGA0YvQuSDigJRcclxuICAvLyDQv9C+0Y3RgtC+0LzRgyBgPSBCWFJlc3RTZXR0aW5ncy52YWx1ZWAg0LIg0LLQuNC00LUg0L7QsdGL0YfQvdC+0LPQviDQv9C+0LvRjyDQvdCw0LLRgdC10LPQtNCwXHJcbiAgLy8gXCLQt9Cw0LzQvtGA0L7Qt9C40LtcIiDQsdGLINGC0L4sINGH0YLQviDQsdGL0LvQviDQvdCwINC80L7QvNC10L3RgiDRgdC+0LfQtNCw0L3QuNGPIFNlc3Npb25LZXlTZXJ2aWNlcy5cclxuICAvLyDQk9C10YLRgtC10YAg0LLQvNC10YHRgtC+INGN0YLQvtCz0L4g0YfQuNGC0LDQtdGCINCw0LrRgtGD0LDQu9GM0L3Ri9C5IEJYUmVzdFNldHRpbmdzLnZhbHVlINC/0YDQuCDQutCw0LbQtNC+0LxcclxuICAvLyDQvtCx0YDQsNGJ0LXQvdC40LguXHJcbiAgcHJpdmF0ZSBnZXQgQlhfUkVTVF9TRVRUSU5HUygpIHtcclxuICAgIHJldHVybiBCWFJlc3RTZXR0aW5ncy52YWx1ZVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgKSB7XHJcbiAgICBjb25zdCBhdXRoRGF0YSA9IHRoaXMuZ2V0U2Vzc2lvbkl0ZW08aUJYUmVzdEF1dGg+KHRoaXMuY29uc3RydWN0b3IubmFtZSlcclxuICAgIGlmICh0aGlzLmdldEF1dGgoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYXV0aEhhdmUgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hdXRoRGF0YSA9IGF1dGhEYXRhXHJcblxyXG4gIH1cclxuXHJcbiAgc3Vic2NyaWJlQWxsKCkge1xyXG4gICAgdGhpcy5zdWJzY3JpYmUuYXV0aERhdGEudW5zdWJzY3JpYmUoKVxyXG4gIH1cclxuXHJcbiAgZ2V0QXV0aCgpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLkJYX1JFU1RfU0VUVElOR1MuYXV0aC5rZXkpIHtcclxuICAgICAgY2FzZSAnYXV0aCc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29va2llKCdhdXRoJylcclxuICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgIGNvbnN0IGJ4U2Vzc2lkID0gdGhpcy5nZXRCeFNlc3NpZCgpXHJcbiAgICAgICAgaWYgKGJ4U2Vzc2lkKSB7XHJcbiAgICAgICAgICByZXR1cm4gYnhTZXNzaWRcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0U2Vzc2lkKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3Qgc3RyID0gdGhpcy5nZXRTZXNzaWQoKVxyXG4gICAgICAgICAgcmV0dXJuIChzdHIpID8gc3RyIDogJydcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29va2llKCdhdXRoJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEtleUF1dGgoKTogSUtleUF1dGgge1xyXG4gICAgaWYgKHRoaXMuQlhfUkVTVF9TRVRUSU5HUy5hdXRoLmtleS5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuQlhfUkVTVF9TRVRUSU5HUy5hdXRoLmtleVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICdhdXRoJ1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog0KHRgtC+0LjRgiDQu9C4INC/0YDQuNC60LvQsNC00YvQstCw0YLRjCDQsdGA0LDRg9C30LXRgNC90YvQtSBjb29raWUg0Log0LfQsNC/0YDQvtGB0YMgKGF4aW9zIGB3aXRoQ3JlZGVudGlhbHNgKS5cclxuICAgKiDQr9Cy0L3Ri9C5IGBCWFJlc3RTZXR0aW5ncy53aXRoQ3JlZGVudGlhbHNgINC40LzQtdC10YIg0L/RgNC40L7RgNC40YLQtdGCOyDQtdGB0LvQuCDQvdC1INC30LDQtNCw0L0g4oCUXHJcbiAgICog0YHQvtGF0YDQsNC90Y/QtdGC0YHRjyDQuNGB0YLQvtGA0LjRh9C10YHQutC+0LUg0L/QvtCy0LXQtNC10L3QuNC1OiDQstC60LvRjtGH0LDQtdC8INGC0L7Qu9GM0LrQviDQtNC70Y8gYGF1dGgua2V5ID09PSAnT0F1dGgyJ2AuXHJcbiAgICovXHJcbiAgZ2V0V2l0aENyZWRlbnRpYWxzKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHR5cGVvZiB0aGlzLkJYX1JFU1RfU0VUVElOR1Mud2l0aENyZWRlbnRpYWxzID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuQlhfUkVTVF9TRVRUSU5HUy53aXRoQ3JlZGVudGlhbHNcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmdldEtleUF1dGgoKSA9PT0gJ09BdXRoMidcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqINCh0YLQsNGC0LjRh9C90YvQtSDQt9Cw0LPQvtC70L7QstC60Lgg0LjQtyBgQlhSZXN0U2V0dGluZ3MuaGVhZGVyc2Ag4oCUINC60L7Qv9C40Y8sINGH0YLQvtCx0Ysg0L/RgNCw0LLQutCwXHJcbiAgICog0YDQtdC30YPQu9GM0YLQsNGC0LAg0L3QtSDQvNC10L3Rj9C70LAg0YHQsNC80Lgg0L3QsNGB0YLRgNC+0LnQutC4LlxyXG4gICAqL1xyXG4gIGdldEhlYWRlcnMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICByZXR1cm4geyAuLi50aGlzLkJYX1JFU1RfU0VUVElOR1MuaGVhZGVycyB9XHJcbiAgfVxyXG5cclxuICBnZXRTZXNzaWQoKSB7XHJcbiAgICBjb25zdCBjaGVjayA9IHRoaXMuZ2V0U2VhcmNoUGFyYW0oJ3Nlc3NpZCcpXHJcbiAgICBpZiAoY2hlY2spIHtcclxuICAgICAgdGhpcy5zZXRMb2NhbFN0b3JhZ2UoJ3Nlc3NpZCcsIGNoZWNrKVxyXG4gICAgICByZXR1cm4gY2hlY2tcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nZXRMb2NhbFN0b3JhZ2UoJ3Nlc3NpZCcpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldExvY2FsU3RvcmFnZSgnc2Vzc2lkJykgfHwgJydcclxuICAgIH1cclxuICAgIHJldHVybiAnJ1xyXG4gIH1cclxuXHJcbiAgZ2V0QXV0aFBhcmFtcygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5CWF9SRVNUX1NFVFRJTkdTLmF1dGguc291cmNlXHJcblxyXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVWYWx1ZShzb3VyY2UoKSlcclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoIChzb3VyY2UpIHtcclxuICAgICAgY2FzZSAnY29va2llcyc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplVmFsdWUodGhpcy5nZXRBdXRoKCkpXHJcbiAgICAgIGNhc2UgJ2xvY2FsU3RvcmFnZSc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplVmFsdWUodGhpcy5nZXRMb2NhbFN0b3JhZ2UodGhpcy5CWF9SRVNUX1NFVFRJTkdTLmF1dGgua2V5KSlcclxuICAgICAgY2FzZSAnb2ZmJzpcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplVmFsdWUoKHRoaXMuYXV0aERhdGEpID8gdGhpcy5hdXRoRGF0YS5hY2Nlc3NfdG9rZW4gOiB1bmRlZmluZWQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDaGVja0F1dGhQYXJhbXNJc09uKCl7XHJcbiAgICByZXR1cm4gdGhpcy5CWF9SRVNUX1NFVFRJTkdTLmF1dGguc291cmNlICE9PSAnb2ZmJ1xyXG4gIH1cclxuXHJcbiAgZ2V0QXV0aEVycm9yKG9wZXJhdGlvbiA9ICdyZXF1ZXN0Jyk6IFNlc3Npb25LZXlFcnJvciB7XHJcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLkJYX1JFU1RfU0VUVElOR1MuYXV0aC5zb3VyY2VcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5QXV0aCgpXHJcblxyXG4gICAgaWYgKCF0aGlzLmdldENoZWNrQXV0aFBhcmFtc0lzT24oKSkge1xyXG4gICAgICByZXR1cm4gbmV3IFNlc3Npb25LZXlFcnJvcihcclxuICAgICAgICBgQXV0aG9yaXphdGlvbiBpcyBkaXNhYmxlZCBmb3IgJHtvcGVyYXRpb259OiBCWFJlc3RTZXR0aW5ncy5hdXRoLnNvdXJjZSBpcyBcIm9mZlwiLmBcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNvdXJjZU5hbWUgPSAodHlwZW9mIHNvdXJjZSA9PT0gJ2Z1bmN0aW9uJykgPyAnY3VzdG9tIGZ1bmN0aW9uJyA6IHNvdXJjZVxyXG4gICAgY29uc3QgY2hlY2tlZCA9IHRoaXMuZ2V0QXV0aENoZWNrZWRQbGFjZXMoKVxyXG5cclxuICAgIHJldHVybiBuZXcgU2Vzc2lvbktleUVycm9yKFtcclxuICAgICAgYEF1dGhvcml6YXRpb24gdG9rZW4gd2FzIG5vdCBmb3VuZCBmb3IgJHtvcGVyYXRpb259LmAsXHJcbiAgICAgIGBhdXRoLnNvdXJjZTogJHtzb3VyY2VOYW1lfS5gLFxyXG4gICAgICBgYXV0aC5rZXk6ICR7a2V5fS5gLFxyXG4gICAgICBgQ2hlY2tlZDogJHtjaGVja2VkLmpvaW4oJywgJyl9LmAsXHJcbiAgICAgICdTZXQgQlhSZXN0U2V0dGluZ3MuYXV0aC5zb3VyY2Uva2V5IGNvcnJlY3RseSBvciBzYXZlIGEgdmFsaWQgdG9rZW4gYmVmb3JlIG1ha2luZyB0aGUgcmVxdWVzdC4nXHJcbiAgICBdLmpvaW4oJyAnKSlcclxuICB9XHJcblxyXG4gIGdldEJhc2VVcmwoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcclxuICAgIGNvbnN0IGFkZGl0aW9uYWxfcGFydCA9ICh0aGlzLkJYX1JFU1RfU0VUVElOR1MudXJscy5hZGRpdGlvbmFsX3BhcnQgfHwgdGhpcy5CWF9SRVNUX1NFVFRJTkdTLnVybHMuYWRkaXRpb25hbF9wYXJ0ID09PSAnJylcclxuICAgID8gdGhpcy5CWF9SRVNUX1NFVFRJTkdTLnVybHMuYWRkaXRpb25hbF9wYXJ0XHJcbiAgICAgIDogREVGQVVMVF9CWF9SRVNUX1NFVFRJTkdTLnVybHMuYWRkaXRpb25hbF9wYXJ0XHJcblxyXG4gICAgaWYodGhpcy5CWF9SRVNUX1NFVFRJTkdTLnVybHMuc291cmNlID09PSAnc3RyaW5nJyl7XHJcbiAgICAgIHJldHVybiBvZihwcmVwYXJlQmFzZUFkZHJlc3ModGhpcy5CWF9SRVNUX1NFVFRJTkdTLnVybHMua2V5LCBhZGRpdGlvbmFsX3BhcnQpKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0ciA9IHRoaXMuZ2V0TG9jYWxTdG9yYWdlKHRoaXMuQlhfUkVTVF9TRVRUSU5HUy51cmxzLmtleSlcclxuXHJcbiAgICByZXR1cm4gb2YocHJlcGFyZUJhc2VBZGRyZXNzKChzdHIpID8gc3RyIDogJycsIGFkZGl0aW9uYWxfcGFydCkpXHJcbiAgfVxyXG5cclxuICBnZXRCYXNlVXJsRXJyb3Iob3BlcmF0aW9uID0gJ3JlcXVlc3QnKTogU2Vzc2lvbktleUVycm9yIHtcclxuICAgIHJldHVybiBuZXcgU2Vzc2lvbktleUVycm9yKFtcclxuICAgICAgYEJhc2UgVVJMIHdhcyBub3QgcmVzb2x2ZWQgZm9yICR7b3BlcmF0aW9ufS5gLFxyXG4gICAgICBgdXJscy5zb3VyY2U6ICR7dGhpcy5CWF9SRVNUX1NFVFRJTkdTLnVybHMuc291cmNlfS5gLFxyXG4gICAgICBgdXJscy5rZXk6ICR7dGhpcy5CWF9SRVNUX1NFVFRJTkdTLnVybHMua2V5IHx8ICcoZW1wdHkpJ30uYCxcclxuICAgICAgJ1NldCBCWFJlc3RTZXR0aW5ncy51cmxzLmtleSB0byBhIFVSTCBvciB0byBhIGxvY2FsU3RvcmFnZSBrZXkgY29udGFpbmluZyB0aGUgcG9ydGFsIFVSTC4nXHJcbiAgICBdLmpvaW4oJyAnKSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QXV0aENoZWNrZWRQbGFjZXMoKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5CWF9SRVNUX1NFVFRJTkdTLmF1dGguc291cmNlXHJcblxyXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgcmV0dXJuIFsnQlhSZXN0U2V0dGluZ3MuYXV0aC5zb3VyY2UoKSddXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoIChzb3VyY2UpIHtcclxuICAgICAgY2FzZSAnY29va2llcyc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQlhfUkVTVF9TRVRUSU5HUy5hdXRoLmtleSA9PT0gJ2F1dGgnXHJcbiAgICAgICAgICA/IFsnY29va2llIFwiYXV0aFwiJ11cclxuICAgICAgICAgIDogWyd3aW5kb3cuQlguYml0cml4X3Nlc3NpZCgpJywgJ1VSTCBxdWVyeSBcInNlc3NpZFwiJywgJ2xvY2FsU3RvcmFnZSBcInNlc3NpZFwiJywgJ2Nvb2tpZSBcImF1dGhcIiddXHJcbiAgICAgIGNhc2UgJ2xvY2FsU3RvcmFnZSc6XHJcbiAgICAgICAgcmV0dXJuIFtgbG9jYWxTdG9yYWdlIFwiJHt0aGlzLkJYX1JFU1RfU0VUVElOR1MuYXV0aC5rZXl9XCJgXVxyXG4gICAgICBjYXNlICdvZmYnOlxyXG4gICAgICAgIHJldHVybiBbJ2F1dGhvcml6YXRpb24gbG9va3VwIHNraXBwZWQnXVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBbYHNlc3Npb25TdG9yYWdlIFwiJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9XCIgYWNjZXNzX3Rva2VuYF1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QnhTZXNzaWQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGJ4ID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSA/ICh3aW5kb3cgYXMgYW55KS5CWCA6IHVuZGVmaW5lZFxyXG5cclxuICAgIGlmICghYnggfHwgdHlwZW9mIGJ4LmJpdHJpeF9zZXNzaWQgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgcmV0dXJuICcnXHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplVmFsdWUoYnguYml0cml4X3Nlc3NpZCgpKSB8fCAnJ1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHJldHVybiAnJ1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWFyY2hQYXJhbShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKGRvY3VtZW50LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KG5hbWUpIHx8IHVuZGVmaW5lZFxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29va2llKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXR1cm4gJydcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gQ29va2llcy5nZXQobmFtZSlcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICByZXR1cm4gJydcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TG9jYWxTdG9yYWdlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmFnZUl0ZW0oJ2xvY2FsU3RvcmFnZScsIG5hbWUpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldExvY2FsU3RvcmFnZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0eXBlb2YgbG9jYWxTdG9yYWdlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBMb2NhbFN0b3JhZ2Uuc2V0KG5hbWUsIHZhbHVlKVxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZXNzaW9uSXRlbTxUPihuYW1lOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh0eXBlb2Ygc2Vzc2lvblN0b3JhZ2UgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gU2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbTxUPihuYW1lKVxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U3RvcmFnZUl0ZW0oa2luZDogU3RvcmFnZUtpbmQsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgY29uc3Qgc3RvcmFnZSA9IGtpbmQgPT09ICdsb2NhbFN0b3JhZ2UnXHJcbiAgICAgID8gKHR5cGVvZiBsb2NhbFN0b3JhZ2UgIT09ICd1bmRlZmluZWQnID8gbG9jYWxTdG9yYWdlIDogdW5kZWZpbmVkKVxyXG4gICAgICA6ICh0eXBlb2Ygc2Vzc2lvblN0b3JhZ2UgIT09ICd1bmRlZmluZWQnID8gc2Vzc2lvblN0b3JhZ2UgOiB1bmRlZmluZWQpXHJcblxyXG4gICAgaWYgKCFzdG9yYWdlKSB7XHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIHN0b3JhZ2UuZ2V0SXRlbShuYW1lKVxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5vcm1hbGl6ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCkgPyB2YWx1ZSA6IHVuZGVmaW5lZFxyXG4gIH1cclxufVxyXG4iXX0=
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbktleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2h0dHAvc2Vzc2lvbktleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE9BQU8sTUFBTSxnQ0FBZ0MsQ0FBQTtBQUNwRCxPQUFPLEVBQWMsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDNUMsT0FBTyxFQUFFLG9CQUFvQixJQUFJLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQzFGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRXpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRCxPQUFPLEVBQWlCLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQU0xRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxLQUFLO0lBQ3hDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFBO0lBQy9CLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxrQkFBa0I7SUFlN0IsMkVBQTJFO0lBQzNFLDJFQUEyRTtJQUMzRSxpRUFBaUU7SUFDakUscUVBQXFFO0lBQ3JFLHdFQUF3RTtJQUN4RSw4REFBOEQ7SUFDOUQsSUFBWSxnQkFBZ0I7UUFDMUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQTtJQUMxQixDQUFDO0lBRUQ7UUF2QkE7Ozs7V0FJRztRQUNNLFFBQUcsR0FBa0IsY0FBYyxFQUFFLENBQUE7UUFFOUMsYUFBUSxHQUFHLEtBQUssQ0FBQTtRQUVoQixjQUFTLEdBQUc7WUFDVixRQUFRLEVBQUUsSUFBSSxZQUFZLEVBQUU7U0FDN0IsQ0FBQTtR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QztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztJQUNILENBQUM7SUFFTyxjQUFjLENBQUMsS0FBZ0M7UUFDckQsT0FBTyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUN4RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29va2llcyBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YW5pbGxhL2Nvb2tpZXMnXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IHByZXBhcmVCYXNlQWRkcmVzcyB9IGZyb20gJy4uL2Jhc2UnXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlcyBhcyBMb2NhbFN0b3JhZ2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YW5pbGxhL2xvY2FsU3RvcmFnZSdcbmltcG9ydCB7IERFRkFVTFRfQlhfUkVTVF9TRVRUSU5HUyB9IGZyb20gJy4uLy4uL3NldHRpbmdzJ1xuaW1wb3J0IHsgaUJYUmVzdEF1dGggfSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vYXV0aC9zYXZlJ1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tICcuLi92YW5pbGxhL3Nlc3Npb25TdG9yYWdlJ1xuaW1wb3J0IHsgQlhSZXN0Q29udGV4dCwgY3VycmVudENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBCWFJlc3RNaWRkbGV3YXJlIH0gZnJvbSAnLi90cmFuc3BvcnQnXG5cbnR5cGUgSUtleUF1dGggPSAnc2Vzc2lkJyB8ICdhdXRoJyB8IHN0cmluZ1xudHlwZSBTdG9yYWdlS2luZCA9ICdsb2NhbFN0b3JhZ2UnIHwgJ3Nlc3Npb25TdG9yYWdlJ1xuXG5leHBvcnQgY2xhc3MgU2Vzc2lvbktleUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdTZXNzaW9uS2V5RXJyb3InXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlc3Npb25LZXlTZXJ2aWNlcyB7XG5cbiAgLyoqXG4gICAqINCa0L7QvdGC0LXQutGB0YIg0LrQu9C40LXQvdGC0LAsINCyINC60L7RgtC+0YDQvtC8INGB0L7Qt9C00LDQvSDQvtCx0YrQtdC60YI6INCy0L3Rg9GC0YDQuCBgbmV3IEJYUmVzdE5hdnZ5KHNldHRpbmdzKWBcbiAgICog4oCUINC60L7QvdGC0LXQutGB0YIg0Y3RgtC+0LPQviDQutC70LjQtdC90YLQsCwg0LIg0L7RgdGC0LDQu9GM0L3Ri9GFINGB0LvRg9GH0LDRj9GFIOKAlCDQs9C70L7QsdCw0LvRjNC90YvQtSDQvdCw0YHRgtGA0L7QudC60LguXG4gICAqINCe0LHRitGP0LLQu9C10L0g0L/QtdGA0LLRi9C8OiDQutC+0L3RgdGC0YDRg9C60YLQvtGAINC90LjQttC1INGD0LbQtSDRh9C40YLQsNC10YIg0L3QsNGB0YLRgNC+0LnQutC4LlxuICAgKi9cbiAgcmVhZG9ubHkgY3R4OiBCWFJlc3RDb250ZXh0ID0gY3VycmVudENvbnRleHQoKVxuXG4gIGF1dGhIYXZlID0gZmFsc2VcbiAgYXV0aERhdGE6IGlCWFJlc3RBdXRoIHwgdW5kZWZpbmVkXG4gIHN1YnNjcmliZSA9IHtcbiAgICBhdXRoRGF0YTogbmV3IFN1YnNjcmlwdGlvbigpXG4gIH1cblxuICAvLyDQk9C10YLRgtC10YAsINCwINC90LUg0L/QvtC70LUg0YEg0L7QtNC90L7RgNCw0LfQvtCy0YvQvCDRgdC90LjQvNC60L7QvDogQlhSZXN0U2V0dGluZ3MudXBkYXRlKCkg0YHQvtC30LTQsNGR0YJcbiAgLy8g0J3QntCS0KvQmSDQvtCx0YrQtdC60YIgKHRoaXMudmFsdWUgPSB7Li4udGhpcy52YWx1ZSwgLi4ufSksINCwINC90LUg0LzRg9GC0LjRgNGD0LXRgiDRgdGC0LDRgNGL0Lkg4oCUXG4gIC8vINC/0L7RjdGC0L7QvNGDIGA9IEJYUmVzdFNldHRpbmdzLnZhbHVlYCDQsiDQstC40LTQtSDQvtCx0YvRh9C90L7Qs9C+INC/0L7Qu9GPINC90LDQstGB0LXQs9C00LBcbiAgLy8gXCLQt9Cw0LzQvtGA0L7Qt9C40LtcIiDQsdGLINGC0L4sINGH0YLQviDQsdGL0LvQviDQvdCwINC80L7QvNC10L3RgiDRgdC+0LfQtNCw0L3QuNGPIFNlc3Npb25LZXlTZXJ2aWNlcy5cbiAgLy8g0JPQtdGC0YLQtdGAINCy0LzQtdGB0YLQviDRjdGC0L7Qs9C+INGH0LjRgtCw0LXRgiDQsNC60YLRg9Cw0LvRjNC90YvQtSDQvdCw0YHRgtGA0L7QudC60Lgg0L/RgNC4INC60LDQttC00L7QvCDQvtCx0YDQsNGJ0LXQvdC40Lg6XG4gIC8vINGB0LLQvtC4INC90LDRgdGC0YDQvtC50LrQuCDQutC70LjQtdC90YLQsCDQuNC70Lgg0LPQu9C+0LHQsNC70YzQvdGL0LUgQlhSZXN0U2V0dGluZ3MudmFsdWUuXG4gIHByaXZhdGUgZ2V0IEJYX1JFU1RfU0VUVElOR1MoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3R4LnNldHRpbmdzXG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgKSB7XG4gICAgY29uc3QgYXV0aERhdGEgPSB0aGlzLmdldFNlc3Npb25JdGVtPGlCWFJlc3RBdXRoPih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpXG4gICAgaWYgKHRoaXMuZ2V0QXV0aCgpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYXV0aEhhdmUgPSB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5hdXRoRGF0YSA9IGF1dGhEYXRhXG5cbiAgfVxuXG4gIHN1YnNjcmliZUFsbCgpIHtcbiAgICB0aGlzLnN1YnNjcmliZS5hdXRoRGF0YS51bnN1YnNjcmliZSgpXG4gIH1cblxuICBnZXRBdXRoKCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLkJYX1JFU1RfU0VUVElOR1MuYXV0aC5rZXkpIHtcbiAgICAgIGNhc2UgJ2F1dGgnOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb29raWUoJ2F1dGgnKVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBieFNlc3NpZCA9IHRoaXMuZ2V0QnhTZXNzaWQoKVxuICAgICAgICBpZiAoYnhTZXNzaWQpIHtcbiAgICAgICAgICByZXR1cm4gYnhTZXNzaWRcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldFNlc3NpZCgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBzdHIgPSB0aGlzLmdldFNlc3NpZCgpXG4gICAgICAgICAgcmV0dXJuIChzdHIpID8gc3RyIDogJydcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb29raWUoJ2F1dGgnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0S2V5QXV0aCgpOiBJS2V5QXV0aCB7XG4gICAgaWYgKHRoaXMuQlhfUkVTVF9TRVRUSU5HUy5hdXRoLmtleS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLkJYX1JFU1RfU0VUVElOR1MuYXV0aC5rZXlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdhdXRoJ1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDQodGC0L7QuNGCINC70Lgg0L/RgNC40LrQu9Cw0LTRi9Cy0LDRgtGMINCx0YDQsNGD0LfQtdGA0L3Ri9C1IGNvb2tpZSDQuiDQt9Cw0L/RgNC+0YHRgyAoYXhpb3MgYHdpdGhDcmVkZW50aWFsc2ApLlxuICAgKiDQr9Cy0L3Ri9C5IGBCWFJlc3RTZXR0aW5ncy53aXRoQ3JlZGVudGlhbHNgINC40LzQtdC10YIg0L/RgNC40L7RgNC40YLQtdGCOyDQtdGB0LvQuCDQvdC1INC30LDQtNCw0L0g4oCUXG4gICAqINGB0L7RhdGA0LDQvdGP0LXRgtGB0Y8g0LjRgdGC0L7RgNC40YfQtdGB0LrQvtC1INC/0L7QstC10LTQtdC90LjQtTog0LLQutC70Y7Rh9Cw0LXQvCDRgtC+0LvRjNC60L4g0LTQu9GPIGBhdXRoLmtleSA9PT0gJ09BdXRoMidgLlxuICAgKi9cbiAgZ2V0V2l0aENyZWRlbnRpYWxzKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdGhpcy5CWF9SRVNUX1NFVFRJTkdTLndpdGhDcmVkZW50aWFscyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gdGhpcy5CWF9SRVNUX1NFVFRJTkdTLndpdGhDcmVkZW50aWFsc1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRLZXlBdXRoKCkgPT09ICdPQXV0aDInXG4gIH1cblxuICAvKipcbiAgICog0KHRgtCw0YLQuNGH0L3Ri9C1INC30LDQs9C+0LvQvtCy0LrQuCDQuNC3IGBCWFJlc3RTZXR0aW5ncy5oZWFkZXJzYCDigJQg0LrQvtC/0LjRjywg0YfRgtC+0LHRiyDQv9GA0LDQstC60LBcbiAgICog0YDQtdC30YPQu9GM0YLQsNGC0LAg0L3QtSDQvNC10L3Rj9C70LAg0YHQsNC80Lgg0L3QsNGB0YLRgNC+0LnQutC4LlxuICAgKi9cbiAgZ2V0SGVhZGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4geyAuLi50aGlzLkJYX1JFU1RfU0VUVElOR1MuaGVhZGVycyB9XG4gIH1cblxuICAvKiog0KHQstC+0LggbWlkZGxld2FyZSDQuNC3INC90LDRgdGC0YDQvtC10LogKGBtaWRkbGV3YXJlYCksINGH0LjRgtCw0Y7RgtGB0Y8g0L/RgNC4INC60LDQttC00L7QvCDQt9Cw0L/RgNC+0YHQtSDigJQg0LrQsNC6INC4INC+0YHRgtCw0LvRjNC90YvQtSDQvdCw0YHRgtGA0L7QudC60LguICovXG4gIGdldE1pZGRsZXdhcmUoKTogcmVhZG9ubHkgQlhSZXN0TWlkZGxld2FyZVtdIHtcbiAgICByZXR1cm4gdGhpcy5CWF9SRVNUX1NFVFRJTkdTLm1pZGRsZXdhcmUgPz8gW11cbiAgfVxuXG4gIGdldFNlc3NpZCgpIHtcbiAgICBjb25zdCBjaGVjayA9IHRoaXMuZ2V0U2VhcmNoUGFyYW0oJ3Nlc3NpZCcpXG4gICAgaWYgKGNoZWNrKSB7XG4gICAgICB0aGlzLnNldExvY2FsU3RvcmFnZSgnc2Vzc2lkJywgY2hlY2spXG4gICAgICByZXR1cm4gY2hlY2tcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0TG9jYWxTdG9yYWdlKCdzZXNzaWQnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxTdG9yYWdlKCdzZXNzaWQnKSB8fCAnJ1xuICAgIH1cbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGdldEF1dGhQYXJhbXMoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLkJYX1JFU1RfU0VUVElOR1MuYXV0aC5zb3VyY2VcblxuICAgIGlmICh0eXBlb2Ygc291cmNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVWYWx1ZShzb3VyY2UoKSlcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChzb3VyY2UpIHtcbiAgICAgIGNhc2UgJ2Nvb2tpZXMnOlxuICAgICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVWYWx1ZSh0aGlzLmdldEF1dGgoKSlcbiAgICAgIGNhc2UgJ2xvY2FsU3RvcmFnZSc6XG4gICAgICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZVZhbHVlKHRoaXMuZ2V0TG9jYWxTdG9yYWdlKHRoaXMuQlhfUkVTVF9TRVRUSU5HUy5hdXRoLmtleSkpXG4gICAgICBjYXNlICdvZmYnOlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVWYWx1ZSgodGhpcy5hdXRoRGF0YSkgPyB0aGlzLmF1dGhEYXRhLmFjY2Vzc190b2tlbiA6IHVuZGVmaW5lZClcbiAgICB9XG4gIH1cblxuICBnZXRDaGVja0F1dGhQYXJhbXNJc09uKCl7XG4gICAgcmV0dXJuIHRoaXMuQlhfUkVTVF9TRVRUSU5HUy5hdXRoLnNvdXJjZSAhPT0gJ29mZidcbiAgfVxuXG4gIGdldEF1dGhFcnJvcihvcGVyYXRpb24gPSAncmVxdWVzdCcpOiBTZXNzaW9uS2V5RXJyb3Ige1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuQlhfUkVTVF9TRVRUSU5HUy5hdXRoLnNvdXJjZVxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5QXV0aCgpXG5cbiAgICBpZiAoIXRoaXMuZ2V0Q2hlY2tBdXRoUGFyYW1zSXNPbigpKSB7XG4gICAgICByZXR1cm4gbmV3IFNlc3Npb25LZXlFcnJvcihcbiAgICAgICAgYEF1dGhvcml6YXRpb24gaXMgZGlzYWJsZWQgZm9yICR7b3BlcmF0aW9ufTogQlhSZXN0U2V0dGluZ3MuYXV0aC5zb3VyY2UgaXMgXCJvZmZcIi5gXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlTmFtZSA9ICh0eXBlb2Ygc291cmNlID09PSAnZnVuY3Rpb24nKSA/ICdjdXN0b20gZnVuY3Rpb24nIDogc291cmNlXG4gICAgY29uc3QgY2hlY2tlZCA9IHRoaXMuZ2V0QXV0aENoZWNrZWRQbGFjZXMoKVxuXG4gICAgcmV0dXJuIG5ldyBTZXNzaW9uS2V5RXJyb3IoW1xuICAgICAgYEF1dGhvcml6YXRpb24gdG9rZW4gd2FzIG5vdCBmb3VuZCBmb3IgJHtvcGVyYXRpb259LmAsXG4gICAgICBgYXV0aC5zb3VyY2U6ICR7c291cmNlTmFtZX0uYCxcbiAgICAgIGBhdXRoLmtleTogJHtrZXl9LmAsXG4gICAgICBgQ2hlY2tlZDogJHtjaGVja2VkLmpvaW4oJywgJyl9LmAsXG4gICAgICAnU2V0IEJYUmVzdFNldHRpbmdzLmF1dGguc291cmNlL2tleSBjb3JyZWN0bHkgb3Igc2F2ZSBhIHZhbGlkIHRva2VuIGJlZm9yZSBtYWtpbmcgdGhlIHJlcXVlc3QuJ1xuICAgIF0uam9pbignICcpKVxuICB9XG5cbiAgZ2V0QmFzZVVybCgpOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGFkZGl0aW9uYWxfcGFydCA9ICh0aGlzLkJYX1JFU1RfU0VUVElOR1MudXJscy5hZGRpdGlvbmFsX3BhcnQgfHwgdGhpcy5CWF9SRVNUX1NFVFRJTkdTLnVybHMuYWRkaXRpb25hbF9wYXJ0ID09PSAnJylcbiAgICA/IHRoaXMuQlhfUkVTVF9TRVRUSU5HUy51cmxzLmFkZGl0aW9uYWxfcGFydFxuICAgICAgOiBERUZBVUxUX0JYX1JFU1RfU0VUVElOR1MudXJscy5hZGRpdGlvbmFsX3BhcnRcblxuICAgIGlmKHRoaXMuQlhfUkVTVF9TRVRUSU5HUy51cmxzLnNvdXJjZSA9PT0gJ3N0cmluZycpe1xuICAgICAgcmV0dXJuIG9mKHByZXBhcmVCYXNlQWRkcmVzcyh0aGlzLkJYX1JFU1RfU0VUVElOR1MudXJscy5rZXksIGFkZGl0aW9uYWxfcGFydCkpXG4gICAgfVxuXG4gICAgY29uc3Qgc3RyID0gdGhpcy5nZXRMb2NhbFN0b3JhZ2UodGhpcy5CWF9SRVNUX1NFVFRJTkdTLnVybHMua2V5KVxuXG4gICAgcmV0dXJuIG9mKHByZXBhcmVCYXNlQWRkcmVzcygoc3RyKSA/IHN0ciA6ICcnLCBhZGRpdGlvbmFsX3BhcnQpKVxuICB9XG5cbiAgZ2V0QmFzZVVybEVycm9yKG9wZXJhdGlvbiA9ICdyZXF1ZXN0Jyk6IFNlc3Npb25LZXlFcnJvciB7XG4gICAgcmV0dXJuIG5ldyBTZXNzaW9uS2V5RXJyb3IoW1xuICAgICAgYEJhc2UgVVJMIHdhcyBub3QgcmVzb2x2ZWQgZm9yICR7b3BlcmF0aW9ufS5gLFxuICAgICAgYHVybHMuc291cmNlOiAke3RoaXMuQlhfUkVTVF9TRVRUSU5HUy51cmxzLnNvdXJjZX0uYCxcbiAgICAgIGB1cmxzLmtleTogJHt0aGlzLkJYX1JFU1RfU0VUVElOR1MudXJscy5rZXkgfHwgJyhlbXB0eSknfS5gLFxuICAgICAgJ1NldCBCWFJlc3RTZXR0aW5ncy51cmxzLmtleSB0byBhIFVSTCBvciB0byBhIGxvY2FsU3RvcmFnZSBrZXkgY29udGFpbmluZyB0aGUgcG9ydGFsIFVSTC4nXG4gICAgXS5qb2luKCcgJykpXG4gIH1cblxuICBwcml2YXRlIGdldEF1dGhDaGVja2VkUGxhY2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLkJYX1JFU1RfU0VUVElOR1MuYXV0aC5zb3VyY2VcblxuICAgIGlmICh0eXBlb2Ygc291cmNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gWydCWFJlc3RTZXR0aW5ncy5hdXRoLnNvdXJjZSgpJ11cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHNvdXJjZSkge1xuICAgICAgY2FzZSAnY29va2llcyc6XG4gICAgICAgIHJldHVybiB0aGlzLkJYX1JFU1RfU0VUVElOR1MuYXV0aC5rZXkgPT09ICdhdXRoJ1xuICAgICAgICAgID8gWydjb29raWUgXCJhdXRoXCInXVxuICAgICAgICAgIDogWyd3aW5kb3cuQlguYml0cml4X3Nlc3NpZCgpJywgJ1VSTCBxdWVyeSBcInNlc3NpZFwiJywgJ2xvY2FsU3RvcmFnZSBcInNlc3NpZFwiJywgJ2Nvb2tpZSBcImF1dGhcIiddXG4gICAgICBjYXNlICdsb2NhbFN0b3JhZ2UnOlxuICAgICAgICByZXR1cm4gW2Bsb2NhbFN0b3JhZ2UgXCIke3RoaXMuQlhfUkVTVF9TRVRUSU5HUy5hdXRoLmtleX1cImBdXG4gICAgICBjYXNlICdvZmYnOlxuICAgICAgICByZXR1cm4gWydhdXRob3JpemF0aW9uIGxvb2t1cCBza2lwcGVkJ11cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbYHNlc3Npb25TdG9yYWdlIFwiJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9XCIgYWNjZXNzX3Rva2VuYF1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEJ4U2Vzc2lkKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYnggPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpID8gKHdpbmRvdyBhcyBhbnkpLkJYIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoIWJ4IHx8IHR5cGVvZiBieC5iaXRyaXhfc2Vzc2lkICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplVmFsdWUoYnguYml0cml4X3Nlc3NpZCgpKSB8fCAnJ1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWFyY2hQYXJhbShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKGRvY3VtZW50LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KG5hbWUpIHx8IHVuZGVmaW5lZFxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29va2llKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gQ29va2llcy5nZXQobmFtZSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxTdG9yYWdlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmdldFN0b3JhZ2VJdGVtKCdsb2NhbFN0b3JhZ2UnLCBuYW1lKVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMb2NhbFN0b3JhZ2UobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBsb2NhbFN0b3JhZ2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgTG9jYWxTdG9yYWdlLnNldChuYW1lLCB2YWx1ZSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2Vzc2lvbkl0ZW08VD4obmFtZTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiBzZXNzaW9uU3RvcmFnZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIFNlc3Npb25TdG9yYWdlLmdldEl0ZW08VD4obmFtZSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFN0b3JhZ2VJdGVtKGtpbmQ6IFN0b3JhZ2VLaW5kLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBzdG9yYWdlID0ga2luZCA9PT0gJ2xvY2FsU3RvcmFnZSdcbiAgICAgID8gKHR5cGVvZiBsb2NhbFN0b3JhZ2UgIT09ICd1bmRlZmluZWQnID8gbG9jYWxTdG9yYWdlIDogdW5kZWZpbmVkKVxuICAgICAgOiAodHlwZW9mIHNlc3Npb25TdG9yYWdlICE9PSAndW5kZWZpbmVkJyA/IHNlc3Npb25TdG9yYWdlIDogdW5kZWZpbmVkKVxuXG4gICAgaWYgKCFzdG9yYWdlKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gc3RvcmFnZS5nZXRJdGVtKG5hbWUpXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplVmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCkgPyB2YWx1ZSA6IHVuZGVmaW5lZFxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Первый middleware в списке — внешний: он первым видит запрос и последним — ответ. */
|
|
2
|
+
export function composeMiddleware(middleware, terminal) {
|
|
3
|
+
return middleware.reduceRight((next, step) => config => step(config, next), terminal);
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYngtcmVzdC9zcmMvc2VydmljZXMvaHR0cC90cmFuc3BvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNkJBLHdGQUF3RjtBQUN4RixNQUFNLFVBQVUsaUJBQWlCLENBQUMsVUFBdUMsRUFBRSxRQUFvQjtJQUM3RixPQUFPLFVBQVUsQ0FBQyxXQUFXLENBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDbkcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog0JfQsNC/0YDQvtGBLCDQutC+0YLQvtGA0YvQuSBIVFRQLdGB0LvQvtC5IGJ4LXJlc3Qg0L/QtdGA0LXQtNCw0ZHRgiBtaWRkbGV3YXJlINC4INGC0YDQsNC90YHQv9C+0YDRgtGDLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJYUmVzdFJlcXVlc3RDb25maWcge1xuICBtZXRob2Q6ICdHRVQnIHwgJ1BPU1QnXG4gIC8qKiDQn9C+0LvQvdGL0Lkg0LDQtNGA0LXRgTsg0YMgR0VUIOKAlCDQstC80LXRgdGC0LUg0YHQviDRgdGC0YDQvtC60L7QuSDQv9Cw0YDQsNC80LXRgtGA0L7Qsi4gKi9cbiAgdXJsOiBzdHJpbmdcbiAgLyoqINCi0LXQu9C+IFBPU1Q6INC+0LHRitC10LrRgiAo0YPRhdC+0LTQuNGCIEpTT04pINC40LvQuCDRgdGC0YDQvtC60LAgeC13d3ctZm9ybS11cmxlbmNvZGVkLiAqL1xuICBkYXRhPzogdW5rbm93blxuICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIC8qKiDQn9GA0LjQutC70LDQtNGL0LLQsNGC0Ywg0LvQuCBjb29raWUg0LHRgNCw0YPQt9C10YDQsCAoYGNyZWRlbnRpYWxzOiAnaW5jbHVkZSdgINGDIGZldGNoKS4gKi9cbiAgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuXG4gIC8qKiDQntGC0LzQtdC90LAg0LfQsNC/0YDQvtGB0LAuICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsXG59XG5cbi8qKlxuICog0J7RgtC/0YDQsNCy0LvRj9C10YIg0LfQsNC/0YDQvtGBINC4INCy0L7Qt9Cy0YDQsNGJ0LDQtdGCINGC0LXQu9C+INC+0YLQstC10YLQsC4g0J3QsCDQvtGC0LLQtdGCINC90LUgMnh4INC+0YLQutC70L7QvdGP0LXRgtGB0Y9cbiAqINC+0YjQuNCx0LrQvtC5INGBINC/0L7Qu9C10LwgYHJlc3BvbnNlOiB7IHN0YXR1cywgZGF0YSB9YCDigJQg0LrQsNC6IGBBeGlvc0Vycm9yYDog0L/QviDQvdC10LzRg1xuICog0LHQuNCx0LvQuNC+0YLQtdC60LAg0YPQt9C90LDRkdGCINC+0YjQuNCx0LrQuCBCaXRyaXgg0Lgg0L7RiNC40LHQutC4INCw0LLRgtC+0YDQuNC30LDRhtC40LguXG4gKi9cbmV4cG9ydCB0eXBlIEJYUmVzdFNlbmQgPSAoY29uZmlnOiBCWFJlc3RSZXF1ZXN0Q29uZmlnKSA9PiBQcm9taXNlPHVua25vd24+XG5cbi8qKlxuICog0KjQsNCzINC/0LXRgNC10LQg0L7RgtC/0YDQsNCy0LrQvtC5LiDQnNC+0LbQtdGCINC/0L7QvNC10L3Rj9GC0Ywg0LfQsNC/0YDQvtGBLCDQv9C+0LLRgtC+0YDQuNGC0Ywg0LXQs9C+LCDQv9C+0LTQvtC20LTQsNGC0Ywg0LjQu9C4XG4gKiDQstC+0LLRgdC1INC90LUg0LfQstCw0YLRjCBgbmV4dGAg4oCUINGC0L7Qs9C00LAgbWlkZGxld2FyZSDRgdCw0Lwg0YHRgtCw0L3QvtCy0LjRgtGB0Y8g0YLRgNCw0L3RgdC/0L7RgNGC0L7QvC5cbiAqL1xuZXhwb3J0IHR5cGUgQlhSZXN0TWlkZGxld2FyZSA9IChjb25maWc6IEJYUmVzdFJlcXVlc3RDb25maWcsIG5leHQ6IEJYUmVzdFNlbmQpID0+IFByb21pc2U8dW5rbm93bj5cblxuLyoqINCf0LXRgNCy0YvQuSBtaWRkbGV3YXJlINCyINGB0L/QuNGB0LrQtSDigJQg0LLQvdC10YjQvdC40Lk6INC+0L0g0L/QtdGA0LLRi9C8INCy0LjQtNC40YIg0LfQsNC/0YDQvtGBINC4INC/0L7RgdC70LXQtNC90LjQvCDigJQg0L7RgtCy0LXRgi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlTWlkZGxld2FyZShtaWRkbGV3YXJlOiByZWFkb25seSBCWFJlc3RNaWRkbGV3YXJlW10sIHRlcm1pbmFsOiBCWFJlc3RTZW5kKTogQlhSZXN0U2VuZCB7XG4gIHJldHVybiBtaWRkbGV3YXJlLnJlZHVjZVJpZ2h0PEJYUmVzdFNlbmQ+KChuZXh0LCBzdGVwKSA9PiBjb25maWcgPT4gc3RlcChjb25maWcsIG5leHQpLCB0ZXJtaW5hbClcbn1cbiJdfQ==
|