bx-rest 1.5.0 → 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.
Files changed (181) hide show
  1. package/CHANGELOG.md +177 -0
  2. package/README.en.md +116 -5
  3. package/README.md +117 -5
  4. package/esm2022/functions/errors.mjs +17 -5
  5. package/esm2022/functions/mapResult.mjs +4 -2
  6. package/esm2022/functions/uniqueElementCode.mjs +24 -0
  7. package/esm2022/map/disk.mjs +13 -0
  8. package/esm2022/map/im/recent.mjs +1 -9
  9. package/esm2022/map/task.mjs +11 -5
  10. package/esm2022/map/tasks/task.mjs +3 -3
  11. package/esm2022/map/tasks.mjs +4 -3
  12. package/esm2022/map/user.mjs +5 -4
  13. package/esm2022/public-api.mjs +2 -2
  14. package/esm2022/request-navvy/bizproc.mjs +19 -10
  15. package/esm2022/request-navvy/calendar/event.mjs +1 -9
  16. package/esm2022/request-navvy/disk/operation.mjs +3 -10
  17. package/esm2022/request-navvy/pull/config.mjs +1 -3
  18. package/esm2022/request-navvy/socialnetwork/api/livefeed.mjs +1 -5
  19. package/esm2022/request-navvy/task/operation/elapseditem.mjs +14 -71
  20. package/esm2022/request-navvy/tasks/task.mjs +1 -119
  21. package/esm2022/rest/map.mjs +3 -3
  22. package/esm2022/rest/navvy.mjs +66 -64
  23. package/esm2022/services/base.mjs +7 -7
  24. package/esm2022/services/context.mjs +59 -0
  25. package/esm2022/services/http/HttpBX.mjs +55 -20
  26. package/esm2022/services/http/authRefresh.mjs +25 -23
  27. package/esm2022/services/http/http.mjs +14 -69
  28. package/esm2022/services/http/middleware.mjs +149 -0
  29. package/esm2022/services/http/sessionKey.mjs +16 -5
  30. package/esm2022/services/http/transport.mjs +5 -0
  31. package/esm2022/services/navvy/extends/navvy-pag-base.mjs +63 -9
  32. package/esm2022/services/navvy/navvy-alternative-pagination-navigation.mjs +21 -71
  33. package/esm2022/services/navvy/navvy-pag-nav-result-key-object.mjs +10 -49
  34. package/esm2022/services/navvy/navvy-pag-nav-result-key.mjs +14 -73
  35. package/esm2022/services/navvy/navvy-pag-nav-tasks.mjs +4 -76
  36. package/esm2022/services/navvy/navvy-pag-nav-with-useless-key.mjs +10 -76
  37. package/esm2022/services/navvy/navvy-pag.mjs +7 -65
  38. package/esm2022/services/navvy/navvy-support.mjs +2 -15
  39. package/esm2022/services/navvy.mjs +18 -31
  40. package/esm2022/typification/rest/calendar/event/get.mjs +1 -1
  41. package/esm2022/typification/rest/settings.mjs +1 -1
  42. package/esm2022/typification/rest/tasks/task/get.mjs +1 -1
  43. package/esm2022/typification/rest/user/user.mjs +1 -1
  44. package/esm2022/typification/settings.mjs +1 -1
  45. package/fesm2022/bx-rest.mjs +860 -2038
  46. package/fesm2022/bx-rest.mjs.map +1 -1
  47. package/functions/errors.d.ts +9 -0
  48. package/functions/uniqueElementCode.d.ts +12 -0
  49. package/map/disk.d.ts +10 -0
  50. package/map/task.d.ts +3 -3
  51. package/map/tasks/task.d.ts +1 -1
  52. package/map/tasks.d.ts +1 -1
  53. package/package.json +5 -2
  54. package/public-api.d.ts +7 -3
  55. package/request-navvy/pull/config.d.ts +0 -2
  56. package/rest/map.d.ts +2 -2
  57. package/rest/navvy.d.ts +9 -0
  58. package/services/context.d.ts +43 -0
  59. package/services/http/HttpBX.d.ts +10 -0
  60. package/services/http/authRefresh.d.ts +5 -1
  61. package/services/http/http.d.ts +12 -9
  62. package/services/http/middleware.d.ts +31 -0
  63. package/services/http/sessionKey.d.ts +10 -0
  64. package/services/http/transport.d.ts +28 -0
  65. package/services/navvy/extends/navvy-pag-base.d.ts +16 -2
  66. package/services/navvy/navvy-alternative-pagination-navigation.d.ts +5 -2
  67. package/services/navvy/navvy-pag-nav-result-key-object.d.ts +0 -2
  68. package/services/navvy/navvy-pag-nav-result-key.d.ts +1 -4
  69. package/services/navvy/navvy-pag-nav-tasks.d.ts +2 -9
  70. package/services/navvy/navvy-pag-nav-with-useless-key.d.ts +0 -2
  71. package/services/navvy/navvy-pag.d.ts +0 -2
  72. package/services/navvy/navvy-support.d.ts +0 -10
  73. package/services/navvy.d.ts +1 -0
  74. package/typification/rest/calendar/event/get.d.ts +1 -1
  75. package/typification/rest/settings.d.ts +1 -0
  76. package/typification/rest/user/user.d.ts +3 -3
  77. package/typification/settings.d.ts +34 -0
  78. package/esm2022/functions/errorHandler.mjs +0 -34
  79. package/esm2022/request/app.mjs +0 -13
  80. package/esm2022/request/bizproc/activity.mjs +0 -3
  81. package/esm2022/request/bizproc/event.mjs +0 -3
  82. package/esm2022/request/bizproc/robot.mjs +0 -3
  83. package/esm2022/request/bizproc/task.mjs +0 -3
  84. package/esm2022/request/bizproc/workflow/instance.mjs +0 -3
  85. package/esm2022/request/bizproc/workflow/template.mjs +0 -3
  86. package/esm2022/request/bizproc/workflow.mjs +0 -18
  87. package/esm2022/request/bizproc.mjs +0 -15
  88. package/esm2022/request/department.mjs +0 -26
  89. package/esm2022/request/disk/attachedObject.mjs +0 -14
  90. package/esm2022/request/disk/file.mjs +0 -18
  91. package/esm2022/request/disk/folder.mjs +0 -117
  92. package/esm2022/request/disk.mjs +0 -11
  93. package/esm2022/request/lists/element.mjs +0 -18
  94. package/esm2022/request/lists/field.mjs +0 -35
  95. package/esm2022/request/lists.mjs +0 -86
  96. package/esm2022/request/log/blogcomment.mjs +0 -3
  97. package/esm2022/request/log/blogpost.mjs +0 -18
  98. package/esm2022/request/log.mjs +0 -9
  99. package/esm2022/request/pull/application/config.mjs +0 -11
  100. package/esm2022/request/pull/channel/public.mjs +0 -18
  101. package/esm2022/request/pull/config.mjs +0 -13
  102. package/esm2022/request/pull.mjs +0 -11
  103. package/esm2022/request/server.mjs +0 -14
  104. package/esm2022/request/socialnetwork/api/contentview.mjs +0 -14
  105. package/esm2022/request/socialnetwork/api/livefeed/blogpost/important.mjs +0 -14
  106. package/esm2022/request/socialnetwork/api/livefeed/blogpost.mjs +0 -7
  107. package/esm2022/request/socialnetwork/api/livefeed.mjs +0 -7
  108. package/esm2022/request/socialnetwork/api.mjs +0 -9
  109. package/esm2022/request/socialnetwork.mjs +0 -8
  110. package/esm2022/request/sonet_group.mjs +0 -24
  111. package/esm2022/request/task/commentitem.mjs +0 -32
  112. package/esm2022/request/task/elapseditem.mjs +0 -40
  113. package/esm2022/request/task/item/userfield.mjs +0 -14
  114. package/esm2022/request/task/item.mjs +0 -7
  115. package/esm2022/request/task/planner.mjs +0 -11
  116. package/esm2022/request/task.mjs +0 -13
  117. package/esm2022/request/tasks/task/result.mjs +0 -22
  118. package/esm2022/request/tasks/task.mjs +0 -110
  119. package/esm2022/request/tasks.mjs +0 -7
  120. package/esm2022/request/user/userfield.mjs +0 -14
  121. package/esm2022/request/user.mjs +0 -40
  122. package/esm2022/rest/base.mjs +0 -39
  123. package/esm2022/services/http/HttpData.mjs +0 -77
  124. package/esm2022/services/http/base/base.mjs +0 -4
  125. package/esm2022/services/http/httpNavvy.mjs +0 -14
  126. package/esm2022/typification/base/answers.mjs +0 -438
  127. package/esm2022/typification/base/params.mjs +0 -525
  128. package/esm2022/typification/base/workpiece/methods-list.mjs +0 -2
  129. package/esm2022/typification/base/workpiece/methods.mjs +0 -2
  130. package/functions/errorHandler.d.ts +0 -10
  131. package/request/app.d.ts +0 -8
  132. package/request/bizproc/activity.d.ts +0 -2
  133. package/request/bizproc/event.d.ts +0 -2
  134. package/request/bizproc/robot.d.ts +0 -2
  135. package/request/bizproc/task.d.ts +0 -2
  136. package/request/bizproc/workflow/instance.d.ts +0 -2
  137. package/request/bizproc/workflow/template.d.ts +0 -2
  138. package/request/bizproc/workflow.d.ts +0 -13
  139. package/request/bizproc.d.ts +0 -12
  140. package/request/department.d.ts +0 -18
  141. package/request/disk/attachedObject.d.ts +0 -8
  142. package/request/disk/file.d.ts +0 -10
  143. package/request/disk/folder.d.ts +0 -96
  144. package/request/disk.d.ts +0 -8
  145. package/request/lists/element.d.ts +0 -11
  146. package/request/lists/field.d.ts +0 -11
  147. package/request/lists.d.ts +0 -31
  148. package/request/log/blogcomment.d.ts +0 -2
  149. package/request/log/blogpost.d.ts +0 -11
  150. package/request/log.d.ts +0 -6
  151. package/request/pull/application/config.d.ts +0 -5
  152. package/request/pull/channel/public.d.ts +0 -5
  153. package/request/pull/config.d.ts +0 -7
  154. package/request/pull.d.ts +0 -8
  155. package/request/server.d.ts +0 -7
  156. package/request/socialnetwork/api/contentview.d.ts +0 -6
  157. package/request/socialnetwork/api/livefeed/blogpost/important.d.ts +0 -6
  158. package/request/socialnetwork/api/livefeed/blogpost.d.ts +0 -4
  159. package/request/socialnetwork/api/livefeed.d.ts +0 -4
  160. package/request/socialnetwork/api.d.ts +0 -6
  161. package/request/socialnetwork.d.ts +0 -4
  162. package/request/sonet_group.d.ts +0 -8
  163. package/request/task/commentitem.d.ts +0 -23
  164. package/request/task/elapseditem.d.ts +0 -26
  165. package/request/task/item/userfield.d.ts +0 -6
  166. package/request/task/item.d.ts +0 -4
  167. package/request/task/planner.d.ts +0 -4
  168. package/request/task.d.ts +0 -10
  169. package/request/tasks/task/result.d.ts +0 -13
  170. package/request/tasks/task.d.ts +0 -37
  171. package/request/tasks.d.ts +0 -4
  172. package/request/user/userfield.d.ts +0 -8
  173. package/request/user.d.ts +0 -24
  174. package/rest/base.d.ts +0 -33
  175. package/services/http/HttpData.d.ts +0 -7
  176. package/services/http/base/base.d.ts +0 -7
  177. package/services/http/httpNavvy.d.ts +0 -10
  178. package/typification/base/answers.d.ts +0 -12
  179. package/typification/base/params.d.ts +0 -16
  180. package/typification/base/workpiece/methods-list.d.ts +0 -247
  181. 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 axios from 'axios';
4
- import { BXRestSettings } from '../../settings';
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
- if (!axios.isAxiosError(error) || !error.response) {
26
+ const response = httpErrorResponse(error);
27
+ if (!response) {
28
28
  return false;
29
29
  }
30
- const parsed = parseBXRestErrorBody(error.response.data);
30
+ const parsed = parseBXRestErrorBody(response.data);
31
31
  if (parsed) {
32
32
  return AUTH_ERROR_CODES.includes(parsed.error);
33
33
  }
34
- return error.response.status === 401;
34
+ return response.status === 401;
35
35
  }
36
- // Общее на всю библиотеку состояние продления — как и сами BXRestSettings.
37
- // pendingRefresh — идущее сейчас продление, его ждут все упавшие запросы;
38
- // refreshCount — сколько продлений уже завершилось успешно.
39
- let pendingRefresh;
40
- let refreshCount = 0;
41
- function sharedRefresh(refresh) {
42
- if (!pendingRefresh) {
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 } = BXRestSettings.value.auth;
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 '../../services/http/sessionKey';
5
- import clone from 'just-clone';
6
- import { BaseHttp } from './base/base';
7
- import { prepareBaseAddress } from '../base';
8
- export class HttpServices extends BaseHttp {
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
- httpPost(url, params = {}, settings = this.defSettings) {
15
- const auth = this.session.getAuthParams();
16
- const checkIsOn = this.session.getCheckAuthParamsIsOn();
17
- const paramsClone = clone(params);
18
- if (checkIsOn) {
19
- if (!auth) {
20
- return throwError(() => this.session.getAuthError('post'));
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2h0dHAvaHR0cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDMUMsT0FBTyxLQUF3QixNQUFNLE9BQU8sQ0FBQTtBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUNuRSxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUE7QUFFOUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFFNUMsTUFBTSxPQUFPLFlBQWEsU0FBUSxRQUFRO0lBS3hDO1FBQ0UsS0FBSyxFQUFFLENBQUE7UUFITyxZQUFPLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFBO1FBSWhELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ3JDLENBQUM7SUFFUSxRQUFRLENBQ2YsR0FBVyxFQUNYLFNBQWMsRUFBRSxFQUNoQixXQUErQixJQUFJLENBQUMsV0FBVztRQUUvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtRQUN2RCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFakMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJ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QUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBQzNELENBQUM7WUFFRCxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQTtRQUMvQyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FDbkMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7WUFDOUQsQ0FBQztZQUVELE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQTtZQUNqRCxNQUFNLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtZQUMvRCxNQUFNLFFBQVEsR0FBRyxHQUFHLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQTtZQUU1QyxPQUFPLElBQUksQ0FDVCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBSSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDdEUsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zSW5zdGFuY2UgfSBmcm9tICdheGlvcydcbmltcG9ydCB7IFNlc3Npb25LZXlTZXJ2aWNlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvc2Vzc2lvbktleSdcbmltcG9ydCBjbG9uZSBmcm9tICdqdXN0LWNsb25lJ1xuaW1wb3J0IHsgaUh0dHBQYXJhbVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3Qvc2V0dGluZ3MnXG5pbXBvcnQgeyBCYXNlSHR0cCB9IGZyb20gJy4vYmFzZS9iYXNlJ1xuaW1wb3J0IHsgcHJlcGFyZUJhc2VBZGRyZXNzIH0gZnJvbSAnLi4vYmFzZSdcblxuZXhwb3J0IGNsYXNzIEh0dHBTZXJ2aWNlcyBleHRlbmRzIEJhc2VIdHRwIHtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXhpb3NJbnN0YW5jZTogQXhpb3NJbnN0YW5jZVxuICBwdWJsaWMgcmVhZG9ubHkgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uS2V5U2VydmljZXMoKVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLmF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKVxuICB9XG5cbiAgb3ZlcnJpZGUgaHR0cFBvc3Q8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBhbnkgPSB7fSxcbiAgICBzZXR0aW5nczogaUh0dHBQYXJhbVNldHRpbmdzID0gdGhpcy5kZWZTZXR0aW5nc1xuICApOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBhdXRoID0gdGhpcy5zZXNzaW9uLmdldEF1dGhQYXJhbXMoKVxuICAgIGNvbnN0IGNoZWNrSXNPbiA9IHRoaXMuc2Vzc2lvbi5nZXRDaGVja0F1dGhQYXJhbXNJc09uKClcbiAgICBjb25zdCBwYXJhbXNDbG9uZSA9IGNsb25lKHBhcmFtcylcblxuICAgIGlmIChjaGVja0lzT24pIHtcbiAgICAgIGlmICghYXV0aCkge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiB0aGlzLnNlc3Npb24uZ2V0QXV0aEVycm9yKCdwb3N0JykpXG4gICAgICB9XG5cbiAgICAgIHBhcmFtc0Nsb25lW3RoaXMuc2Vzc2lvbi5nZXRLZXlBdXRoKCldID0gYXV0aFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0QmFzZVVybCgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGJhc2VVcmwpID0+IHtcbiAgICAgICAgaWYgKCFiYXNlVXJsKSB7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gdGhpcy5zZXNzaW9uLmdldEJhc2VVcmxFcnJvcigncG9zdCcpKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZnVsbFVybCA9IHByZXBhcmVCYXNlQWRkcmVzcyhiYXNlVXJsKSArIHVybFxuICAgICAgICBpZiAodGhpcy5zZXNzaW9uLmdldEtleUF1dGgoKSA9PT0gJ3Nlc3NpZCcpIHtcbiAgICAgICAgICBjb25zdCB1cmxFbmNvZGVkQm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuXG4gICAgICAgICAgT2JqZWN0LmtleXMocGFyYW1zQ2xvbmUpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbXNDbG9uZVtrZXldXG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViS2V5IGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ViS2V5KSkge1xuICAgICAgICAgICAgICAgICAgdXJsRW5jb2RlZEJvZHkuYXBwZW5kKGAke2tleX1bJHtzdWJLZXl9XWAsIHZhbHVlW3N1YktleV0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1cmxFbmNvZGVkQm9keS5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgICAgICB0aGlzLmF4aW9zSW5zdGFuY2UucG9zdDxUPihmdWxsVXJsLCB1cmxFbmNvZGVkQm9keS50b1N0cmluZygpLCB7XG4gICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KS50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5nZXRIdHRwUGFyYW1zUG9zdChwYXJhbXNDbG9uZSwgbmV3IEZvcm1EYXRhKCksIFtdLCBzZXR0aW5ncylcbiAgICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgICAgdGhpcy5heGlvc0luc3RhbmNlLnBvc3Q8VD4oZnVsbFVybCwgYm9keSkudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgb3ZlcnJpZGUgaHR0cEdldDxUPih1cmw6IHN0cmluZywgcGFyYW1zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGF1dGggPSB0aGlzLnNlc3Npb24uZ2V0QXV0aFBhcmFtcygpXG4gICAgY29uc3QgY2hlY2tJc09uID0gdGhpcy5zZXNzaW9uLmdldENoZWNrQXV0aFBhcmFtc0lzT24oKVxuICAgIGNvbnN0IHBhcmFtc0Nsb25lID0gY2xvbmUocGFyYW1zKVxuXG4gICAgaWYgKGNoZWNrSXNPbikge1xuICAgICAgaWYgKCFhdXRoKSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IHRoaXMuc2Vzc2lvbi5nZXRBdXRoRXJyb3IoJ2dldCcpKVxuICAgICAgfVxuXG4gICAgICBwYXJhbXNDbG9uZVt0aGlzLnNlc3Npb24uZ2V0S2V5QXV0aCgpXSA9IGF1dGhcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldEJhc2VVcmwoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChiYXNlVXJsKSA9PiB7XG4gICAgICAgIGlmICghYmFzZVVybCkge1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IHRoaXMuc2Vzc2lvbi5nZXRCYXNlVXJsRXJyb3IoJ2dldCcpKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZnVsbFVybCA9IHByZXBhcmVCYXNlQWRkcmVzcyhiYXNlVXJsKSArIHVybFxuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGFyYW1zQ2xvbmUpLnRvU3RyaW5nKClcbiAgICAgICAgY29uc3QgZmluYWxVcmwgPSBgJHtmdWxsVXJsfT8ke3F1ZXJ5U3RyaW5nfWBcblxuICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0PFQ+KGZpbmFsVXJsKS50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICApXG4gIH1cbn1cbiJdfQ==
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 { BXRestSettings, DEFAULT_BX_REST_SETTINGS } from '../../settings';
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
- // Геттер вместо этого читает актуальный BXRestSettings.value при каждом
19
- // обращении.
19
+ // Геттер вместо этого читает актуальные настройки при каждом обращении:
20
+ // свои настройки клиента или глобальные BXRestSettings.value.
20
21
  get BX_REST_SETTINGS() {
21
- return BXRestSettings.value;
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==