bx-rest 1.5.1 → 1.7.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 (301) hide show
  1. package/CHANGELOG.md +163 -0
  2. package/README.en.md +206 -3
  3. package/README.md +207 -3
  4. package/consts/part-name-methods.d.ts +1 -0
  5. package/esm2022/consts/part-name-methods.mjs +2 -1
  6. package/esm2022/functions/errors.mjs +17 -5
  7. package/esm2022/functions/uniqueElementCode.mjs +24 -0
  8. package/esm2022/map/pull/application/config.mjs +25 -29
  9. package/esm2022/map/pull.mjs +8 -13
  10. package/esm2022/public-api.mjs +3 -2
  11. package/esm2022/request-navvy/bizproc.mjs +18 -9
  12. package/esm2022/request-navvy/booking/v1/resource.mjs +2 -2
  13. package/esm2022/request-navvy/booking/v1/resourcetype.mjs +2 -2
  14. package/esm2022/request-navvy/calendar/event.mjs +1 -9
  15. package/esm2022/request-navvy/catalog/catalog.mjs +2 -2
  16. package/esm2022/request-navvy/catalog/document/element.mjs +2 -2
  17. package/esm2022/request-navvy/catalog/document.mjs +2 -2
  18. package/esm2022/request-navvy/catalog/documentcontractor.mjs +2 -2
  19. package/esm2022/request-navvy/catalog/extra.mjs +2 -2
  20. package/esm2022/request-navvy/catalog/measure.mjs +2 -2
  21. package/esm2022/request-navvy/catalog/price.mjs +2 -2
  22. package/esm2022/request-navvy/catalog/pricetype.mjs +2 -2
  23. package/esm2022/request-navvy/catalog/pricetypegroup.mjs +2 -2
  24. package/esm2022/request-navvy/catalog/pricetypelang.mjs +2 -2
  25. package/esm2022/request-navvy/catalog/product/offer.mjs +2 -2
  26. package/esm2022/request-navvy/catalog/product/service.mjs +2 -2
  27. package/esm2022/request-navvy/catalog/product/sku.mjs +2 -2
  28. package/esm2022/request-navvy/catalog/product.mjs +2 -2
  29. package/esm2022/request-navvy/catalog/productproperty.mjs +2 -2
  30. package/esm2022/request-navvy/catalog/productpropertyenum.mjs +2 -2
  31. package/esm2022/request-navvy/catalog/productpropertyfeature.mjs +2 -2
  32. package/esm2022/request-navvy/catalog/productpropertysection.mjs +2 -2
  33. package/esm2022/request-navvy/catalog/ratio.mjs +2 -2
  34. package/esm2022/request-navvy/catalog/roundingrule.mjs +2 -2
  35. package/esm2022/request-navvy/catalog/section.mjs +2 -2
  36. package/esm2022/request-navvy/catalog/store.mjs +2 -2
  37. package/esm2022/request-navvy/catalog/storeproduct.mjs +2 -2
  38. package/esm2022/request-navvy/catalog/userfield/document.mjs +2 -2
  39. package/esm2022/request-navvy/catalog/vat.mjs +2 -2
  40. package/esm2022/request-navvy/crm/activity.mjs +2 -2
  41. package/esm2022/request-navvy/crm/deal/recurring.mjs +2 -2
  42. package/esm2022/request-navvy/crm/item/product/row.mjs +2 -2
  43. package/esm2022/request-navvy/crm/orderentity.mjs +2 -2
  44. package/esm2022/request-navvy/crm/requisite/link.mjs +2 -2
  45. package/esm2022/request-navvy/crm/stagehistory.mjs +2 -2
  46. package/esm2022/request-navvy/crm/timeline/bindings.mjs +2 -2
  47. package/esm2022/request-navvy/disk/operation.mjs +3 -10
  48. package/esm2022/request-navvy/documentgenerator/document.mjs +2 -2
  49. package/esm2022/request-navvy/documentgenerator/numerator.mjs +2 -2
  50. package/esm2022/request-navvy/documentgenerator/role.mjs +2 -2
  51. package/esm2022/request-navvy/documentgenerator/template.mjs +2 -2
  52. package/esm2022/request-navvy/pull/application/config.mjs +10 -4
  53. package/esm2022/request-navvy/pull/application/event.mjs +23 -0
  54. package/esm2022/request-navvy/pull/application/push.mjs +23 -0
  55. package/esm2022/request-navvy/pull/channel/public.mjs +4 -4
  56. package/esm2022/request-navvy/pull/config.mjs +8 -4
  57. package/esm2022/request-navvy/pull.mjs +12 -1
  58. package/esm2022/request-navvy/sale/basketitem.mjs +2 -2
  59. package/esm2022/request-navvy/sale/basketproperties.mjs +2 -2
  60. package/esm2022/request-navvy/sale/businessvaluepersondomain.mjs +2 -2
  61. package/esm2022/request-navvy/sale/order.mjs +2 -2
  62. package/esm2022/request-navvy/sale/payment.mjs +2 -2
  63. package/esm2022/request-navvy/sale/paymentitembasket.mjs +2 -2
  64. package/esm2022/request-navvy/sale/paymentitemshipment.mjs +2 -2
  65. package/esm2022/request-navvy/sale/persontype.mjs +2 -2
  66. package/esm2022/request-navvy/sale/property.mjs +2 -2
  67. package/esm2022/request-navvy/sale/propertyrelation.mjs +2 -2
  68. package/esm2022/request-navvy/sale/propertyvalue.mjs +2 -2
  69. package/esm2022/request-navvy/sale/propertyvariant.mjs +2 -2
  70. package/esm2022/request-navvy/sale/shipment.mjs +2 -2
  71. package/esm2022/request-navvy/sale/shipmentitem.mjs +2 -2
  72. package/esm2022/request-navvy/sale/shipmentproperty.mjs +2 -2
  73. package/esm2022/request-navvy/sale/shipmentpropertyvalue.mjs +2 -2
  74. package/esm2022/request-navvy/sale/status.mjs +2 -2
  75. package/esm2022/request-navvy/sale/statuslang.mjs +2 -2
  76. package/esm2022/request-navvy/sale/tradebinding.mjs +2 -2
  77. package/esm2022/request-navvy/sale/tradeplatform.mjs +2 -2
  78. package/esm2022/request-navvy/socialnetwork/api/livefeed.mjs +1 -5
  79. package/esm2022/request-navvy/task/operation/elapseditem.mjs +51 -28
  80. package/esm2022/request-navvy/tasks/task.mjs +1 -119
  81. package/esm2022/request-navvy/userfieldtype.mjs +2 -2
  82. package/esm2022/rest/navvy.mjs +66 -64
  83. package/esm2022/services/base.mjs +1 -4
  84. package/esm2022/services/context.mjs +59 -0
  85. package/esm2022/services/http/HttpBX.mjs +52 -19
  86. package/esm2022/services/http/authRefresh.mjs +25 -23
  87. package/esm2022/services/http/fetch.mjs +45 -0
  88. package/esm2022/services/http/http.mjs +25 -71
  89. package/esm2022/services/http/middleware.mjs +203 -0
  90. package/esm2022/services/http/sessionKey.mjs +16 -5
  91. package/esm2022/services/http/transport.mjs +5 -0
  92. package/esm2022/services/navvy/navvy-pag-nav-keyed.mjs +31 -0
  93. package/esm2022/services/navvy/navvy-support.mjs +2 -15
  94. package/esm2022/services/navvy.mjs +32 -31
  95. package/esm2022/typification/rest/calendar/event/get.mjs +1 -1
  96. package/esm2022/typification/rest/crm/requisite.mjs +1 -1
  97. package/esm2022/typification/rest/crm/timeline/bindings.mjs +1 -1
  98. package/esm2022/typification/rest/pull/application/config/get.mjs +1 -1
  99. package/esm2022/typification/rest/pull/application/event/add.mjs +2 -0
  100. package/esm2022/typification/rest/pull/application/push/add.mjs +2 -0
  101. package/esm2022/typification/rest/pull/config/get.mjs +1 -1
  102. package/esm2022/typification/rest/pull.mjs +3 -1
  103. package/esm2022/typification/rest/tasks/task/get.mjs +1 -1
  104. package/esm2022/typification/settings.mjs +1 -1
  105. package/fesm2022/bx-rest.mjs +800 -588
  106. package/fesm2022/bx-rest.mjs.map +1 -1
  107. package/functions/errors.d.ts +9 -0
  108. package/functions/uniqueElementCode.d.ts +12 -0
  109. package/map/pull/application/config.d.ts +3 -0
  110. package/package.json +1 -1
  111. package/public-api.d.ts +4 -2
  112. package/request-navvy/booking/v1/resource.d.ts +1 -1
  113. package/request-navvy/booking/v1/resourcetype.d.ts +1 -1
  114. package/request-navvy/catalog/catalog.d.ts +1 -1
  115. package/request-navvy/catalog/document/element.d.ts +1 -1
  116. package/request-navvy/catalog/document.d.ts +1 -1
  117. package/request-navvy/catalog/documentcontractor.d.ts +1 -1
  118. package/request-navvy/catalog/extra.d.ts +1 -1
  119. package/request-navvy/catalog/measure.d.ts +1 -1
  120. package/request-navvy/catalog/price.d.ts +1 -1
  121. package/request-navvy/catalog/pricetype.d.ts +1 -1
  122. package/request-navvy/catalog/pricetypegroup.d.ts +1 -1
  123. package/request-navvy/catalog/pricetypelang.d.ts +1 -1
  124. package/request-navvy/catalog/product/offer.d.ts +1 -1
  125. package/request-navvy/catalog/product/service.d.ts +1 -1
  126. package/request-navvy/catalog/product/sku.d.ts +1 -1
  127. package/request-navvy/catalog/product.d.ts +1 -1
  128. package/request-navvy/catalog/productproperty.d.ts +1 -1
  129. package/request-navvy/catalog/productpropertyenum.d.ts +1 -1
  130. package/request-navvy/catalog/productpropertyfeature.d.ts +1 -1
  131. package/request-navvy/catalog/productpropertysection.d.ts +1 -1
  132. package/request-navvy/catalog/ratio.d.ts +1 -1
  133. package/request-navvy/catalog/roundingrule.d.ts +1 -1
  134. package/request-navvy/catalog/section.d.ts +1 -1
  135. package/request-navvy/catalog/store.d.ts +1 -1
  136. package/request-navvy/catalog/storeproduct.d.ts +1 -1
  137. package/request-navvy/catalog/userfield/document.d.ts +1 -1
  138. package/request-navvy/catalog/vat.d.ts +1 -1
  139. package/request-navvy/crm/activity.d.ts +1 -1
  140. package/request-navvy/crm/deal/recurring.d.ts +1 -1
  141. package/request-navvy/crm/item/product/row.d.ts +5 -1
  142. package/request-navvy/crm/orderentity.d.ts +5 -1
  143. package/request-navvy/crm/requisite/link.d.ts +1 -1
  144. package/request-navvy/crm/stagehistory.d.ts +5 -1
  145. package/request-navvy/crm/timeline/bindings.d.ts +1 -1
  146. package/request-navvy/documentgenerator/document.d.ts +1 -1
  147. package/request-navvy/documentgenerator/numerator.d.ts +1 -1
  148. package/request-navvy/documentgenerator/role.d.ts +1 -1
  149. package/request-navvy/documentgenerator/template.d.ts +1 -1
  150. package/request-navvy/pull/application/config.d.ts +9 -3
  151. package/request-navvy/pull/application/event.d.ts +17 -0
  152. package/request-navvy/pull/application/push.d.ts +17 -0
  153. package/request-navvy/pull/config.d.ts +7 -3
  154. package/request-navvy/pull.d.ts +11 -0
  155. package/request-navvy/sale/basketitem.d.ts +1 -1
  156. package/request-navvy/sale/basketproperties.d.ts +1 -1
  157. package/request-navvy/sale/businessvaluepersondomain.d.ts +1 -1
  158. package/request-navvy/sale/order.d.ts +1 -1
  159. package/request-navvy/sale/payment.d.ts +1 -1
  160. package/request-navvy/sale/paymentitembasket.d.ts +1 -1
  161. package/request-navvy/sale/paymentitemshipment.d.ts +1 -1
  162. package/request-navvy/sale/persontype.d.ts +1 -1
  163. package/request-navvy/sale/property.d.ts +1 -1
  164. package/request-navvy/sale/propertyrelation.d.ts +1 -1
  165. package/request-navvy/sale/propertyvalue.d.ts +1 -1
  166. package/request-navvy/sale/propertyvariant.d.ts +1 -1
  167. package/request-navvy/sale/shipment.d.ts +1 -1
  168. package/request-navvy/sale/shipmentitem.d.ts +1 -1
  169. package/request-navvy/sale/shipmentproperty.d.ts +1 -1
  170. package/request-navvy/sale/shipmentpropertyvalue.d.ts +1 -1
  171. package/request-navvy/sale/status.d.ts +1 -1
  172. package/request-navvy/sale/statuslang.d.ts +1 -1
  173. package/request-navvy/sale/tradebinding.d.ts +1 -1
  174. package/request-navvy/sale/tradeplatform.d.ts +1 -1
  175. package/request-navvy/task/operation/elapseditem.d.ts +15 -10
  176. package/request-navvy/userfieldtype.d.ts +1 -1
  177. package/rest/navvy.d.ts +9 -0
  178. package/services/context.d.ts +43 -0
  179. package/services/http/HttpBX.d.ts +11 -0
  180. package/services/http/authRefresh.d.ts +5 -1
  181. package/services/http/fetch.d.ts +22 -0
  182. package/services/http/http.d.ts +20 -9
  183. package/services/http/middleware.d.ts +32 -0
  184. package/services/http/sessionKey.d.ts +10 -0
  185. package/services/http/transport.d.ts +28 -0
  186. package/services/navvy/navvy-pag-nav-keyed.d.ts +18 -0
  187. package/services/navvy/navvy-support.d.ts +0 -10
  188. package/services/navvy.d.ts +17 -0
  189. package/typification/rest/calendar/event/get.d.ts +1 -1
  190. package/typification/rest/crm/requisite.d.ts +1 -1
  191. package/typification/rest/crm/timeline/bindings.d.ts +2 -1
  192. package/typification/rest/pull/application/config/get.d.ts +1 -1
  193. package/typification/rest/pull/application/event/add.d.ts +24 -0
  194. package/typification/rest/pull/application/push/add.d.ts +16 -0
  195. package/typification/rest/pull/config/get.d.ts +28 -3
  196. package/typification/rest/pull.d.ts +2 -0
  197. package/typification/settings.d.ts +68 -0
  198. package/esm2022/functions/errorHandler.mjs +0 -34
  199. package/esm2022/request/app.mjs +0 -13
  200. package/esm2022/request/bizproc/activity.mjs +0 -3
  201. package/esm2022/request/bizproc/event.mjs +0 -3
  202. package/esm2022/request/bizproc/robot.mjs +0 -3
  203. package/esm2022/request/bizproc/task.mjs +0 -3
  204. package/esm2022/request/bizproc/workflow/instance.mjs +0 -3
  205. package/esm2022/request/bizproc/workflow/template.mjs +0 -3
  206. package/esm2022/request/bizproc/workflow.mjs +0 -18
  207. package/esm2022/request/bizproc.mjs +0 -15
  208. package/esm2022/request/department.mjs +0 -26
  209. package/esm2022/request/disk/attachedObject.mjs +0 -14
  210. package/esm2022/request/disk/file.mjs +0 -18
  211. package/esm2022/request/disk/folder.mjs +0 -117
  212. package/esm2022/request/disk.mjs +0 -11
  213. package/esm2022/request/lists/element.mjs +0 -18
  214. package/esm2022/request/lists/field.mjs +0 -35
  215. package/esm2022/request/lists.mjs +0 -86
  216. package/esm2022/request/log/blogcomment.mjs +0 -3
  217. package/esm2022/request/log/blogpost.mjs +0 -18
  218. package/esm2022/request/log.mjs +0 -9
  219. package/esm2022/request/pull/application/config.mjs +0 -11
  220. package/esm2022/request/pull/channel/public.mjs +0 -18
  221. package/esm2022/request/pull/config.mjs +0 -13
  222. package/esm2022/request/pull.mjs +0 -11
  223. package/esm2022/request/server.mjs +0 -14
  224. package/esm2022/request/socialnetwork/api/contentview.mjs +0 -14
  225. package/esm2022/request/socialnetwork/api/livefeed/blogpost/important.mjs +0 -14
  226. package/esm2022/request/socialnetwork/api/livefeed/blogpost.mjs +0 -7
  227. package/esm2022/request/socialnetwork/api/livefeed.mjs +0 -7
  228. package/esm2022/request/socialnetwork/api.mjs +0 -9
  229. package/esm2022/request/socialnetwork.mjs +0 -8
  230. package/esm2022/request/sonet_group.mjs +0 -24
  231. package/esm2022/request/task/commentitem.mjs +0 -32
  232. package/esm2022/request/task/elapseditem.mjs +0 -40
  233. package/esm2022/request/task/item/userfield.mjs +0 -14
  234. package/esm2022/request/task/item.mjs +0 -7
  235. package/esm2022/request/task/planner.mjs +0 -11
  236. package/esm2022/request/task.mjs +0 -13
  237. package/esm2022/request/tasks/task/result.mjs +0 -22
  238. package/esm2022/request/tasks/task.mjs +0 -110
  239. package/esm2022/request/tasks.mjs +0 -7
  240. package/esm2022/request/user/userfield.mjs +0 -14
  241. package/esm2022/request/user.mjs +0 -40
  242. package/esm2022/rest/base.mjs +0 -39
  243. package/esm2022/services/http/HttpData.mjs +0 -77
  244. package/esm2022/services/http/base/base.mjs +0 -4
  245. package/esm2022/services/http/httpNavvy.mjs +0 -14
  246. package/esm2022/typification/base/answers.mjs +0 -438
  247. package/esm2022/typification/base/params.mjs +0 -525
  248. package/esm2022/typification/base/workpiece/methods-list.mjs +0 -2
  249. package/esm2022/typification/base/workpiece/methods.mjs +0 -2
  250. package/functions/errorHandler.d.ts +0 -10
  251. package/request/app.d.ts +0 -8
  252. package/request/bizproc/activity.d.ts +0 -2
  253. package/request/bizproc/event.d.ts +0 -2
  254. package/request/bizproc/robot.d.ts +0 -2
  255. package/request/bizproc/task.d.ts +0 -2
  256. package/request/bizproc/workflow/instance.d.ts +0 -2
  257. package/request/bizproc/workflow/template.d.ts +0 -2
  258. package/request/bizproc/workflow.d.ts +0 -13
  259. package/request/bizproc.d.ts +0 -12
  260. package/request/department.d.ts +0 -18
  261. package/request/disk/attachedObject.d.ts +0 -8
  262. package/request/disk/file.d.ts +0 -10
  263. package/request/disk/folder.d.ts +0 -96
  264. package/request/disk.d.ts +0 -8
  265. package/request/lists/element.d.ts +0 -11
  266. package/request/lists/field.d.ts +0 -11
  267. package/request/lists.d.ts +0 -31
  268. package/request/log/blogcomment.d.ts +0 -2
  269. package/request/log/blogpost.d.ts +0 -11
  270. package/request/log.d.ts +0 -6
  271. package/request/pull/application/config.d.ts +0 -5
  272. package/request/pull/channel/public.d.ts +0 -5
  273. package/request/pull/config.d.ts +0 -7
  274. package/request/pull.d.ts +0 -8
  275. package/request/server.d.ts +0 -7
  276. package/request/socialnetwork/api/contentview.d.ts +0 -6
  277. package/request/socialnetwork/api/livefeed/blogpost/important.d.ts +0 -6
  278. package/request/socialnetwork/api/livefeed/blogpost.d.ts +0 -4
  279. package/request/socialnetwork/api/livefeed.d.ts +0 -4
  280. package/request/socialnetwork/api.d.ts +0 -6
  281. package/request/socialnetwork.d.ts +0 -4
  282. package/request/sonet_group.d.ts +0 -8
  283. package/request/task/commentitem.d.ts +0 -23
  284. package/request/task/elapseditem.d.ts +0 -26
  285. package/request/task/item/userfield.d.ts +0 -6
  286. package/request/task/item.d.ts +0 -4
  287. package/request/task/planner.d.ts +0 -4
  288. package/request/task.d.ts +0 -10
  289. package/request/tasks/task/result.d.ts +0 -13
  290. package/request/tasks/task.d.ts +0 -37
  291. package/request/tasks.d.ts +0 -4
  292. package/request/user/userfield.d.ts +0 -8
  293. package/request/user.d.ts +0 -24
  294. package/rest/base.d.ts +0 -33
  295. package/services/http/HttpData.d.ts +0 -7
  296. package/services/http/base/base.d.ts +0 -7
  297. package/services/http/httpNavvy.d.ts +0 -10
  298. package/typification/base/answers.d.ts +0 -12
  299. package/typification/base/params.d.ts +0 -16
  300. package/typification/base/workpiece/methods-list.d.ts +0 -247
  301. package/typification/base/workpiece/methods.d.ts +0 -20
@@ -0,0 +1,203 @@
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
+ */
25
+ export function builtInMiddleware(settings, state) {
26
+ const steps = [];
27
+ if (settings.retryOnQueryLimit) {
28
+ const own = (settings.retryOnQueryLimit === true) ? {} : settings.retryOnQueryLimit;
29
+ const attempts = own.attempts ?? DEFAULT_RETRY_ON_QUERY_LIMIT.attempts;
30
+ const delay = own.delay ?? DEFAULT_RETRY_ON_QUERY_LIMIT.delay;
31
+ if (!Number.isInteger(attempts) || attempts < 1) {
32
+ throw invalid('retryOnQueryLimit.attempts', attempts, 'a whole number from 1');
33
+ }
34
+ if (!Number.isFinite(delay) || delay < 0) {
35
+ throw invalid('retryOnQueryLimit.delay', delay, 'a number of milliseconds from 0');
36
+ }
37
+ steps.push(retryOnQueryLimit(attempts, delay));
38
+ }
39
+ if (settings.throttle) {
40
+ const own = (settings.throttle === true) ? {} : settings.throttle;
41
+ const perSecond = own.perSecond ?? DEFAULT_THROTTLE.perSecond;
42
+ if (!Number.isFinite(perSecond) || perSecond <= 0) {
43
+ throw invalid('throttle.perSecond', perSecond, 'a number above 0');
44
+ }
45
+ steps.push(throttle(perSecond, state));
46
+ }
47
+ if (settings.timeout) {
48
+ const ms = (settings.timeout === true) ? DEFAULT_TIMEOUT : settings.timeout;
49
+ // setTimeout считает больше 2^31 − 1 мс за 0 и сработал бы сразу
50
+ if (!Number.isFinite(ms) || ms <= 0 || ms > 2_147_483_647) {
51
+ throw invalid('timeout', ms, 'a number of milliseconds from 1 to 2147483647');
52
+ }
53
+ steps.push(timeout(ms));
54
+ }
55
+ if (settings.logRequests !== undefined) {
56
+ if (typeof settings.logRequests !== 'function') {
57
+ throw invalid('logRequests', settings.logRequests, 'a function');
58
+ }
59
+ steps.push(logRequests(settings.logRequests));
60
+ }
61
+ if (settings.transport !== undefined && settings.transport !== 'axios' && settings.transport !== 'fetch') {
62
+ throw invalid('transport', settings.transport, "'axios' or 'fetch'");
63
+ }
64
+ return steps;
65
+ }
66
+ function invalid(name, value, expected) {
67
+ return new TypeError(`bx-rest settings: ${name} must be ${expected}, got ${String(value)}`);
68
+ }
69
+ function abortReason(signal) {
70
+ return signal.reason ?? new Error('The request was aborted');
71
+ }
72
+ /** Пауза, которую прерывает отмена запроса. */
73
+ function wait(ms, signal) {
74
+ return new Promise((resolve, reject) => {
75
+ if (signal?.aborted) {
76
+ reject(abortReason(signal));
77
+ return;
78
+ }
79
+ const onAbort = () => {
80
+ clearTimeout(timer);
81
+ reject(abortReason(signal));
82
+ };
83
+ const timer = setTimeout(() => {
84
+ signal?.removeEventListener('abort', onAbort);
85
+ resolve();
86
+ }, ms);
87
+ signal?.addEventListener('abort', onAbort, { once: true });
88
+ });
89
+ }
90
+ /**
91
+ * Повтор при `QUERY_LIMIT_EXCEEDED`: портал отвечает так (HTTP 503), когда
92
+ * превышен лимит частоты запросов. Пауза растёт вдвое: `delay`, `2 × delay`, ...
93
+ * `attempts` — сколько всего попыток, вместе с первой.
94
+ */
95
+ function retryOnQueryLimit(attempts, delay) {
96
+ return async (config, next) => {
97
+ for (let attempt = 1;; attempt++) {
98
+ try {
99
+ return await next(config);
100
+ }
101
+ catch (error) {
102
+ const code = parseBXRestErrorBody(httpErrorResponse(error)?.data)?.error;
103
+ if (attempt >= attempts || code !== 'QUERY_LIMIT_EXCEEDED') {
104
+ throw error;
105
+ }
106
+ await wait(delay * 2 ** (attempt - 1), config.signal);
107
+ }
108
+ }
109
+ };
110
+ }
111
+ /**
112
+ * Не больше `perSecond` запросов в секунду: лишние ждут своей очереди.
113
+ * Очередь общая для всех запросов клиента (`state` — его контекст).
114
+ */
115
+ function throttle(perSecond, state) {
116
+ const interval = 1000 / perSecond;
117
+ return (config, next) => {
118
+ const now = Date.now();
119
+ const start = Math.max(now, state.throttleNextSlot);
120
+ const reserved = start + interval;
121
+ state.throttleNextSlot = reserved;
122
+ if (start <= now) {
123
+ return next(config);
124
+ }
125
+ return wait(start - now, config.signal).then(() => next(config), (error) => {
126
+ // Отменённый запрос освобождает своё место, если за ним никто не встал
127
+ if (state.throttleNextSlot === reserved) {
128
+ state.throttleNextSlot = start;
129
+ }
130
+ throw error;
131
+ });
132
+ };
133
+ }
134
+ /** Код ошибки Bitrix из тела ответа или, если его нет, текст ошибки запроса. */
135
+ function errorText(body, error) {
136
+ const code = parseBXRestErrorBody(body)?.error;
137
+ if (code) {
138
+ return code;
139
+ }
140
+ return (error instanceof Error) ? error.message : undefined;
141
+ }
142
+ /**
143
+ * Пишет в журнал запись о каждом HTTP-запросе. Исключение из `log` проглатывается:
144
+ * журнал не должен ломать запрос.
145
+ */
146
+ function logRequests(log) {
147
+ const write = (entry) => {
148
+ try {
149
+ log(entry);
150
+ }
151
+ catch {
152
+ // Сбой журнала — не ошибка запроса
153
+ }
154
+ };
155
+ return async (config, next) => {
156
+ const started = Date.now();
157
+ try {
158
+ const data = await next(config);
159
+ const error = errorText(data);
160
+ write({ method: config.method, url: config.url, duration: Date.now() - started, failed: false, ...(error ? { error } : {}) });
161
+ return data;
162
+ }
163
+ catch (cause) {
164
+ const response = httpErrorResponse(cause);
165
+ const error = errorText(response?.data, cause);
166
+ write({
167
+ method: config.method,
168
+ url: config.url,
169
+ duration: Date.now() - started,
170
+ failed: true,
171
+ ...(response ? { status: response.status } : {}),
172
+ ...(error ? { error } : {}),
173
+ });
174
+ throw cause;
175
+ }
176
+ };
177
+ }
178
+ /** Отменяет запрос, если он не завершился за `ms` миллисекунд. */
179
+ function timeout(ms) {
180
+ return (config, next) => {
181
+ const controller = new AbortController();
182
+ const onAbort = () => controller.abort(abortReason(config.signal));
183
+ if (config.signal?.aborted) {
184
+ onAbort();
185
+ }
186
+ else {
187
+ config.signal?.addEventListener('abort', onAbort, { once: true });
188
+ }
189
+ let timer;
190
+ const timedOut = new Promise((_, reject) => {
191
+ timer = setTimeout(() => {
192
+ const error = new BXRestTimeoutError(ms);
193
+ controller.abort(error);
194
+ reject(error);
195
+ }, ms);
196
+ });
197
+ return Promise.race([next({ ...config, signal: controller.signal }), timedOut]).finally(() => {
198
+ clearTimeout(timer);
199
+ config.signal?.removeEventListener('abort', onAbort);
200
+ });
201
+ };
202
+ }
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2h0dHAvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUdoRixxR0FBcUc7QUFDckcsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQTtBQUN4RSxzREFBc0Q7QUFDdEQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQTtBQUNyQyxpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUE7QUFFaEQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUs7SUFDM0MsWUFBcUIsT0FBZTtRQUNsQyxLQUFLLENBQUMsaUNBQWlDLE9BQU8sS0FBSyxDQUFDLENBQUE7UUFEakMsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUVsQyxJQUFJLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFBO0lBQ2xDLENBQUM7Q0FDRjtBQU9EOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFFBQXlCLEVBQUUsS0FBb0I7SUFDL0UsTUFBTSxLQUFLLEdBQXVCLEVBQUUsQ0FBQTtJQUNwQyxJQUFJLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQy9CLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLGlCQUFpQixLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQTtRQUNuRixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxJ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QUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQlhSZXN0TWlkZGxld2FyZSB9IGZyb20gJy4vdHJhbnNwb3J0J1xuaW1wb3J0IHsgaHR0cEVycm9yUmVzcG9uc2UsIHBhcnNlQlhSZXN0RXJyb3JCb2R5IH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL2Vycm9ycydcbmltcG9ydCB7IEJYUmVzdFJlcXVlc3RMb2dFbnRyeSwgaUJYUmVzdFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vdHlwaWZpY2F0aW9uL3NldHRpbmdzJ1xuXG4vKiogYHJldHJ5T25RdWVyeUxpbWl0OiB0cnVlYDog0LLRgdC10LPQviAzINC/0L7Qv9GL0YLQutC4LCDQv9Cw0YPQt9CwINC/0LXRgNC10LQg0LLRgtC+0YDQvtC5IOKAlCAxMDAwINC80YEsINC00LDQu9GM0YjQtSDQstC00LLQvtC1INCx0L7Qu9GM0YjQtS4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFVFJZX09OX1FVRVJZX0xJTUlUID0geyBhdHRlbXB0czogMywgZGVsYXk6IDEwMDAgfVxuLyoqIGB0aW1lb3V0OiB0cnVlYDogNjAgMDAwINC80YEg0L3QsCDQvtC00LjQvSBIVFRQLdC30LDQv9GA0L7RgS4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJTUVPVVQgPSA2MF8wMDBcbi8qKiBgdGhyb3R0bGU6IHRydWVgOiAyINC30LDQv9GA0L7RgdCwINCyINGB0LXQutGD0L3QtNGDIOKAlCDQu9C40LzQuNGCIEJpdHJpeDI0INC90LAg0L7QsdGL0YfQvdGL0YUg0YLQsNGA0LjRhNCw0YUuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9USFJPVFRMRSA9IHsgcGVyU2Vjb25kOiAyIH1cblxuLyoqXG4gKiDQl9Cw0L/RgNC+0YEg0L3QtSDQt9Cw0LLQtdGA0YjQuNC70YHRjyDQt9CwINCy0YDQtdC80Y8g0LjQtyBgdGltZW91dGAg0LIg0L3QsNGB0YLRgNC+0LnQutCw0YUuINCSIGAucmVzVmFuaWxsYSgpYFxuICog0L/RgNC40YXQvtC00LjRgiDRgdCw0LzQsCDRjdGC0LAg0L7RiNC40LHQutCwLCDQsiBgLnJlcygpYCDigJQg0LIgYGNhdXNlYC5cbiAqL1xuZXhwb3J0IGNsYXNzIEJYUmVzdFRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgdGltZW91dDogbnVtYmVyKSB7XG4gICAgc3VwZXIoYFRoZSByZXF1ZXN0IGRpZCBub3QgZmluaXNoIGluICR7dGltZW91dH0gbXNgKVxuICAgIHRoaXMubmFtZSA9ICdCWFJlc3RUaW1lb3V0RXJyb3InXG4gIH1cbn1cblxuLyoqINCT0LTQtSDQutC70LjQtdC90YIg0YXRgNCw0L3QuNGCINC+0YfQtdGA0LXQtNGMIGB0aHJvdHRsZWAg4oCUINCyINGB0LLQvtGR0Lwg0LrQvtC90YLQtdC60YHRgtC1LiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaHJvdHRsZVN0YXRlIHtcbiAgdGhyb3R0bGVOZXh0U2xvdDogbnVtYmVyXG59XG5cbi8qKlxuICog0JLRgdGC0YDQvtC10L3QvdGL0LUg0YjQsNCz0Lgg0LjQtyDQvdCw0YHRgtGA0L7QtdC6LCDQsiDRjdGC0L7QvCDQv9C+0YDRj9C00LrQtTog0L/QvtCy0YLQvtGALCDQvtGH0LXRgNC10LTRjCwg0YLQsNC50LzQsNGD0YIsINC20YPRgNC90LDQuy5cbiAqINCf0L7QstGC0L7RgCDigJQg0YHQvdCw0YDRg9C20Lg6INC60LDQttC00LDRjyDQv9C+0L/Ri9GC0LrQsCDQt9Cw0L3QvtCy0L4g0LLRgdGC0LDRkdGCINCyINC+0YfQtdGA0LXQtNGMINC4INC/0L7Qu9GD0YfQsNC10YIg0YHQstC+0LlcbiAqINGC0LDQudC80LDRg9GCLiDQotCw0LnQvNCw0YPRgiDigJQg0LLQvdGD0YLRgNC4INC+0YfQtdGA0LXQtNC4OiDQvtC20LjQtNCw0L3QuNC1INGB0LLQvtC10Lkg0L7Rh9C10YDQtdC00Lgg0LXQs9C+INC90LUg0YLRgNCw0YLQuNGCLlxuICog0JbRg9GA0L3QsNC7IOKAlCDQstC90YPRgtGA0Lgg0LLRgdC10YU6INC60LDQttC00LDRjyDQv9C+0L/Ri9GC0LrQsCDigJQg0YHQstC+0Y8g0LfQsNC/0LjRgdGMLCDQsdC10Lcg0LLRgNC10LzQtdC90Lgg0LIg0L7Rh9C10YDQtdC00LguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsdEluTWlkZGxld2FyZShzZXR0aW5nczogaUJYUmVzdFNldHRpbmdzLCBzdGF0ZTogVGhyb3R0bGVTdGF0ZSk6IEJYUmVzdE1pZGRsZXdhcmVbXSB7XG4gIGNvbnN0IHN0ZXBzOiBCWFJlc3RNaWRkbGV3YXJlW10gPSBbXVxuICBpZiAoc2V0dGluZ3MucmV0cnlPblF1ZXJ5TGltaXQpIHtcbiAgICBjb25zdCBvd24gPSAoc2V0dGluZ3MucmV0cnlPblF1ZXJ5TGltaXQgPT09IHRydWUpID8ge30gOiBzZXR0aW5ncy5yZXRyeU9uUXVlcnlMaW1pdFxuICAgIGNvbnN0IGF0dGVtcHRzID0gb3duLmF0dGVtcHRzID8/IERFRkFVTFRfUkVUUllfT05fUVVFUllfTElNSVQuYXR0ZW1wdHNcbiAgICBjb25zdCBkZWxheSA9IG93bi5kZWxheSA/PyBERUZBVUxUX1JFVFJZX09OX1FVRVJZX0xJTUlULmRlbGF5XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGF0dGVtcHRzKSB8fCBhdHRlbXB0cyA8IDEpIHtcbiAgICAgIHRocm93IGludmFsaWQoJ3JldHJ5T25RdWVyeUxpbWl0LmF0dGVtcHRzJywgYXR0ZW1wdHMsICdhIHdob2xlIG51bWJlciBmcm9tIDEnKVxuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShkZWxheSkgfHwgZGVsYXkgPCAwKSB7XG4gICAgICB0aHJvdyBpbnZhbGlkKCdyZXRyeU9uUXVlcnlMaW1pdC5kZWxheScsIGRlbGF5LCAnYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gMCcpXG4gICAgfVxuICAgIHN0ZXBzLnB1c2gocmV0cnlPblF1ZXJ5TGltaXQoYXR0ZW1wdHMsIGRlbGF5KSlcbiAgfVxuICBpZiAoc2V0dGluZ3MudGhyb3R0bGUpIHtcbiAgICBjb25zdCBvd24gPSAoc2V0dGluZ3MudGhyb3R0bGUgPT09IHRydWUpID8ge30gOiBzZXR0aW5ncy50aHJvdHRsZVxuICAgIGNvbnN0IHBlclNlY29uZCA9IG93bi5wZXJTZWNvbmQgPz8gREVGQVVMVF9USFJPVFRMRS5wZXJTZWNvbmRcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShwZXJTZWNvbmQpIHx8IHBlclNlY29uZCA8PSAwKSB7XG4gICAgICB0aHJvdyBpbnZhbGlkKCd0aHJvdHRsZS5wZXJTZWNvbmQnLCBwZXJTZWNvbmQsICdhIG51bWJlciBhYm92ZSAwJylcbiAgICB9XG4gICAgc3RlcHMucHVzaCh0aHJvdHRsZShwZXJTZWNvbmQsIHN0YXRlKSlcbiAgfVxuICBpZiAoc2V0dGluZ3MudGltZW91dCkge1xuICAgIGNvbnN0IG1zID0gKHNldHRpbmdzLnRpbWVvdXQgPT09IHRydWUpID8gREVGQVVMVF9USU1FT1VUIDogc2V0dGluZ3MudGltZW91dFxuICAgIC8vIHNldFRpbWVvdXQg0YHRh9C40YLQsNC10YIg0LHQvtC70YzRiNC1IDJeMzEg4oiSIDEg0LzRgSDQt9CwIDAg0Lgg0YHRgNCw0LHQvtGC0LDQuyDQsdGLINGB0YDQsNC30YNcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtcykgfHwgbXMgPD0gMCB8fCBtcyA+IDJfMTQ3XzQ4M182NDcpIHtcbiAgICAgIHRocm93IGludmFsaWQoJ3RpbWVvdXQnLCBtcywgJ2EgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIDEgdG8gMjE0NzQ4MzY0NycpXG4gICAgfVxuICAgIHN0ZXBzLnB1c2godGltZW91dChtcykpXG4gIH1cbiAgaWYgKHNldHRpbmdzLmxvZ1JlcXVlc3RzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIHNldHRpbmdzLmxvZ1JlcXVlc3RzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBpbnZhbGlkKCdsb2dSZXF1ZXN0cycsIHNldHRpbmdzLmxvZ1JlcXVlc3RzLCAnYSBmdW5jdGlvbicpXG4gICAgfVxuICAgIHN0ZXBzLnB1c2gobG9nUmVxdWVzdHMoc2V0dGluZ3MubG9nUmVxdWVzdHMpKVxuICB9XG4gIGlmIChzZXR0aW5ncy50cmFuc3BvcnQgIT09IHVuZGVmaW5lZCAmJiBzZXR0aW5ncy50cmFuc3BvcnQgIT09ICdheGlvcycgJiYgc2V0dGluZ3MudHJhbnNwb3J0ICE9PSAnZmV0Y2gnKSB7XG4gICAgdGhyb3cgaW52YWxpZCgndHJhbnNwb3J0Jywgc2V0dGluZ3MudHJhbnNwb3J0LCBcIidheGlvcycgb3IgJ2ZldGNoJ1wiKVxuICB9XG4gIHJldHVybiBzdGVwc1xufVxuXG5mdW5jdGlvbiBpbnZhbGlkKG5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBUeXBlRXJyb3Ige1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihgYngtcmVzdCBzZXR0aW5nczogJHtuYW1lfSBtdXN0IGJlICR7ZXhwZWN0ZWR9LCBnb3QgJHtTdHJpbmcodmFsdWUpfWApXG59XG5cbmZ1bmN0aW9uIGFib3J0UmVhc29uKHNpZ25hbDogQWJvcnRTaWduYWwpOiB1bmtub3duIHtcbiAgcmV0dXJuIHNpZ25hbC5yZWFzb24gPz8gbmV3IEVycm9yKCdUaGUgcmVxdWVzdCB3YXMgYWJvcnRlZCcpXG59XG5cbi8qKiDQn9Cw0YPQt9CwLCDQutC+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+INC90LUg0LLRgdGC0LDQu1xuICAgICAgICBpZiAoc3RhdGUudGhyb3R0bGVOZXh0U2xvdCA9PT0gcmVzZXJ2ZWQpIHtcbiAgICAgICAgICBzdGF0ZS50aHJvdHRsZU5leHRTbG90ID0gc3RhcnRcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIClcbiAgfVxufVxuXG4vKiog0JrQvtC0INC+0YjQuNCx0LrQuCBCaXRyaXgg0LjQtyDRgtC10LvQsCDQvtGC0LLQtdGC0LAg0LjQu9C4LCDQtdGB0LvQuCDQtdCz0L4g0L3QtdGCLCDRgtC10LrRgdGCINC+0YjQuNCx0LrQuCDQt9Cw0L/RgNC+0YHQsC4gKi9cbmZ1bmN0aW9uIGVycm9yVGV4dChib2R5OiB1bmtub3duLCBlcnJvcj86IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBjb2RlID0gcGFyc2VCWFJlc3RFcnJvckJvZHkoYm9keSk/LmVycm9yXG4gIGlmIChjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGVcbiAgfVxuICByZXR1cm4gKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpID8gZXJyb3IubWVzc2FnZSA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqINCf0LjRiNC10YIg0LIg0LbRg9GA0L3QsNC7INC30LDQv9C40YHRjCDQviDQutCw0LbQtNC+0LwgSFRUUC3Qt9Cw0L/RgNC+0YHQtS4g0JjRgdC60LvRjtGH0LXQvdC40LUg0LjQtyBgbG9nYCDQv9GA0L7Qs9C70LDRgtGL0LLQsNC10YLRgdGPOlxuICog0LbRg9GA0L3QsNC7INC90LUg0LTQvtC70LbQtdC9INC70L7QvNCw0YLRjCDQt9Cw0L/RgNC+0YEuXG4gKi9cbmZ1bmN0aW9uIGxvZ1JlcXVlc3RzKGxvZzogKGVudHJ5OiBCWFJlc3RSZXF1ZXN0TG9nRW50cnkpID0+IHZvaWQpOiBCWFJlc3RNaWRkbGV3YXJlIHtcbiAgY29uc3Qgd3JpdGUgPSAoZW50cnk6IEJYUmVzdFJlcXVlc3RMb2dFbnRyeSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBsb2coZW50cnkpXG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyDQodCx0L7QuSDQttGD0YDQvdCw0LvQsCDigJQg0L3QtSDQvtGI0LjQsdC60LAg0LfQsNC/0YDQvtGB0LBcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFzeW5jIChjb25maWcsIG5leHQpID0+IHtcbiAgICBjb25zdCBzdGFydGVkID0gRGF0ZS5ub3coKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgbmV4dChjb25maWcpXG4gICAgICBjb25zdCBlcnJvciA9IGVycm9yVGV4dChkYXRhKVxuICAgICAgd3JpdGUoeyBtZXRob2Q6IGNvbmZpZy5tZXRob2QsIHVybDogY29uZmlnLnVybCwgZHVyYXRpb246IERhdGUubm93KCkgLSBzdGFydGVkLCBmYWlsZWQ6IGZhbHNlLCAuLi4oZXJyb3IgPyB7IGVycm9yIH0gOiB7fSkgfSlcbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gaHR0cEVycm9yUmVzcG9uc2UoY2F1c2UpXG4gICAgICBjb25zdCBlcnJvciA9IGVycm9yVGV4dChyZXNwb25zZT8uZGF0YSwgY2F1c2UpXG4gICAgICB3cml0ZSh7XG4gICAgICAgIG1ldGhvZDogY29uZmlnLm1ldGhvZCxcbiAgICAgICAgdXJsOiBjb25maWcudXJsLFxuICAgICAgICBkdXJhdGlvbjogRGF0ZS5ub3coKSAtIHN0YXJ0ZWQsXG4gICAgICAgIGZhaWxlZDogdHJ1ZSxcbiAgICAgICAgLi4uKHJlc3BvbnNlID8geyBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyB9IDoge30pLFxuICAgICAgICAuLi4oZXJyb3IgPyB7IGVycm9yIH0gOiB7fSksXG4gICAgICB9KVxuICAgICAgdGhyb3cgY2F1c2VcbiAgICB9XG4gIH1cbn1cblxuLyoqINCe0YLQvNC10L3Rj9C10YIg0LfQsNC/0YDQvtGBLCDQtdGB0LvQuCDQvtC9INC90LUg0LfQsNCy0LXRgNGI0LjQu9GB0Y8g0LfQsCBgbXNgINC80LjQu9C70LjRgdC10LrRg9C90LQuICovXG5mdW5jdGlvbiB0aW1lb3V0KG1zOiBudW1iZXIpOiBCWFJlc3RNaWRkbGV3YXJlIHtcbiAgcmV0dXJuIChjb25maWcsIG5leHQpID0+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoYWJvcnRSZWFzb24oY29uZmlnLnNpZ25hbCBhcyBBYm9ydFNpZ25hbCkpXG4gICAgaWYgKGNvbmZpZy5zaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgIG9uQWJvcnQoKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcuc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KVxuICAgIH1cbiAgICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkXG4gICAgY29uc3QgdGltZWRPdXQgPSBuZXcgUHJvbWlzZTxuZXZlcj4oKF8sIHJlamVjdCkgPT4ge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgQlhSZXN0VGltZW91dEVycm9yKG1zKVxuICAgICAgICBjb250cm9sbGVyLmFib3J0KGVycm9yKVxuICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICB9LCBtcylcbiAgICB9KVxuICAgIHJldHVybiBQcm9taXNlLnJhY2UoW25leHQoeyAuLi5jb25maWcsIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSksIHRpbWVkT3V0XSkuZmluYWxseSgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgICBjb25maWcuc2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQWJvcnQpXG4gICAgfSlcbiAgfVxufVxuIl19
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbktleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2h0dHAvc2Vzc2lvbktleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE9BQU8sTUFBTSxnQ0FBZ0MsQ0FBQTtBQUNwRCxPQUFPLEVBQWMsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDNUMsT0FBTyxFQUFFLG9CQUFvQixJQUFJLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQzFGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRXpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRCxPQUFPLEVBQWlCLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQU0xRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxLQUFLO0lBQ3hDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFBO0lBQy9CLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxrQkFBa0I7SUFlN0IsMkVBQTJFO0lBQzNFLDJFQUEyRTtJQUMzRSxpRUFBaUU7SUFDakUscUVBQXFFO0lBQ3JFLHdFQUF3RTtJQUN4RSw4REFBOEQ7SUFDOUQsSUFBWSxnQkFBZ0I7UUFDMUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQTtJQUMxQixDQUFDO0lBRUQ7UUF2QkE7Ozs7V0FJRztRQUNNLFFBQUcsR0FBa0IsY0FBYyxFQUFFLENBQUE7UUFFOUMsYUFBUSxHQUFHLEtBQUssQ0FBQTtRQUVoQixjQUFTLEdBQUc7WUFDVixRQUFRLEVBQUUsSUFBSSxZQUFZLEVBQUU7U0FDN0IsQ0FBQTtRQWNDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQWMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4RSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7UUFDdEIsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO0lBRTFCLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDdkMsQ0FBQztJQUVELE9BQU87UUFDTCxRQUFRLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkMsS0FBSyxNQUFNO2dCQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUMvQixPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNSLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtnQkFDbkMsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDYixPQUFPLFFBQVEsQ0FBQTtnQkFDakIsQ0FBQztxQkFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtvQkFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtnQkFDekIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDL0IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUE7UUFDdkMsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLE1BQU0sQ0FBQTtRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGtCQUFrQjtRQUNoQixJQUFJLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUE7UUFDOUMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLFFBQVEsQ0FBQTtJQUN2QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVTtRQUNSLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUM3QyxDQUFDO0lBRUQsMkdBQTJHO0lBQzNHLGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFBO0lBQy9DLENBQUM7SUFFRCxTQUFTO1FBQ1AsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMzQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDckMsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDMUMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUM3QyxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFBO1FBRWhELElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDO2dCQUNILE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO1lBQ3RDLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsT0FBTyxTQUFTLENBQUE7WUFDbEIsQ0FBQztRQUNILENBQUM7UUFFRCxRQUFRLE1BQU0sRUFBRSxDQUFDO1lBQ2YsS0FBSyxTQUFTO2dCQUNaLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtZQUM1QyxLQUFLLGNBQWM7Z0JBQ2pCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUNsRixLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxTQUFTLENBQUE7WUFDbEI7Z0JBQ0UsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDeEYsQ0FBQztJQUNILENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUE7SUFDcEQsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFTLEdBQUcsU0FBUztRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQTtRQUNoRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7UUFFN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLENBQUM7WUFDbkMsT0FBTyxJQUFJLGVBQWUsQ0FDeEIsaUNBQWlDLFNBQVMsd0NBQXdDLENBQ25GLENBQUE7UUFDSCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxPQUFPLE1BQU0sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtRQUM5RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtRQUUzQyxPQUFPLElBQUksZUFBZSxDQUFDO1lBQ3pCLHlDQUF5QyxTQUFTLEdBQUc7WUFDckQsZ0JBQWdCLFVBQVUsR0FBRztZQUM3QixhQUFhLEdBQUcsR0FBRztZQUNuQixZQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUc7WUFDakMsK0ZBQStGO1NBQ2hHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDZCxDQUFDO0lBRUQsVUFBVTtRQUNSLE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssRUFBRSxDQUFDO1lBQ3pILENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWU7WUFDMUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUE7UUFFakQsSUFBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUMsQ0FBQztZQUNqRCxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFBO1FBQ2hGLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFaEUsT0FBTyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQTtJQUNsRSxDQUFDO0lBRUQsZUFBZSxDQUFDLFNBQVMsR0FBRyxTQUFTO1FBQ25DLE9BQU8sSUFBSSxlQUFlLENBQUM7WUFDekIsaUNBQWlDLFNBQVMsR0FBRztZQUM3QyxnQkFBZ0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDcEQsYUFBYSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxTQUFTLEdBQUc7WUFDM0QsMEZBQTBGO1NBQzNGLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDZCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFBO1FBRWhELElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDakMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUE7UUFDekMsQ0FBQztRQUVELFFBQVEsTUFBTSxFQUFFLENBQUM7WUFDZixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxNQUFNO29CQUM5QyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7b0JBQ25CLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLGVBQWUsQ0FBQyxDQUFBO1lBQ25HLEtBQUssY0FBYztnQkFDakIsT0FBTyxDQUFDLGlCQUFpQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUE7WUFDN0QsS0FBSyxLQUFLO2dCQUNSLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1lBQ3pDO2dCQUNFLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLENBQUE7UUFDckUsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sRUFBRSxHQUFHLENBQUMsT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFFLE1BQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUUzRSxJQUFJLENBQUMsRUFBRSxJQUFJLE9BQU8sRUFBRSxDQUFDLGFBQWEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNsRCxPQUFPLEVBQUUsQ0FBQTtRQUNYLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ3RELENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEVBQUUsQ0FBQTtRQUNYLENBQUM7SUFDSCxDQUFDO0lBRU8sY0FBYyxDQUFDLElBQVk7UUFDakMsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNwQyxPQUFPLFNBQVMsQ0FBQTtRQUNsQixDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUE7UUFDN0UsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sU0FBUyxDQUFBO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRU8sU0FBUyxDQUFDLElBQVk7UUFDNUIsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNwQyxPQUFPLEVBQUUsQ0FBQTtRQUNYLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDMUIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sRUFBRSxDQUFBO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsSUFBWTtRQUNsQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFFTyxlQUFlLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDakQsSUFBSSxPQUFPLFlBQVksS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUN4QyxPQUFNO1FBQ1IsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQy9CLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFNO1FBQ1IsQ0FBQztJQUNILENBQUM7SUFFTyxjQUFjLENBQUksSUFBWTtRQUNwQyxJQUFJLE9BQU8sY0FBYyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQzFDLE9BQU8sU0FBUyxDQUFBO1FBQ2xCLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxPQUFPLGNBQWMsQ0FBQyxPQUFPLENBQUksSUFBSSxDQUFDLENBQUE7UUFDeEMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sU0FBUyxDQUFBO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRU8sY0FBYyxDQUFDLElBQWlCLEVBQUUsSUFBWTtRQUNwRCxNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssY0FBYztZQUNyQyxDQUFDLENBQUMsQ0FBQyxPQUFPLFlBQVksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2xFLENBQUMsQ0FBQyxDQUFDLE9BQU8sY0FBYyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUV4RSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztJQUNILENBQUM7SUFFTyxjQUFjLENBQUMsS0FBZ0M7UUFDckQsT0FBTyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUN4RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29va2llcyBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YW5pbGxhL2Nvb2tpZXMnXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IHByZXBhcmVCYXNlQWRkcmVzcyB9IGZyb20gJy4uL2Jhc2UnXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlcyBhcyBMb2NhbFN0b3JhZ2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YW5pbGxhL2xvY2FsU3RvcmFnZSdcbmltcG9ydCB7IERFRkFVTFRfQlhfUkVTVF9TRVRUSU5HUyB9IGZyb20gJy4uLy4uL3NldHRpbmdzJ1xuaW1wb3J0IHsgaUJYUmVzdEF1dGggfSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vYXV0aC9zYXZlJ1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tICcuLi92YW5pbGxhL3Nlc3Npb25TdG9yYWdlJ1xuaW1wb3J0IHsgQlhSZXN0Q29udGV4dCwgY3VycmVudENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBCWFJlc3RNaWRkbGV3YXJlIH0gZnJvbSAnLi90cmFuc3BvcnQnXG5cbnR5cGUgSUtleUF1dGggPSAnc2Vzc2lkJyB8ICdhdXRoJyB8IHN0cmluZ1xudHlwZSBTdG9yYWdlS2luZCA9ICdsb2NhbFN0b3JhZ2UnIHwgJ3Nlc3Npb25TdG9yYWdlJ1xuXG5leHBvcnQgY2xhc3MgU2Vzc2lvbktleUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdTZXNzaW9uS2V5RXJyb3InXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlc3Npb25LZXlTZXJ2aWNlcyB7XG5cbiAgLyoqXG4gICAqINCa0L7QvdGC0LXQutGB0YIg0LrQu9C40LXQvdGC0LAsINCyINC60L7RgtC+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==
@@ -0,0 +1,31 @@
1
+ import { mergeMap, shareReplay } from 'rxjs';
2
+ import { map } from 'rxjs/operators';
3
+ import { NavvyPagBase, offsetPageParams } from './extends/navvy-pag-base';
4
+ /**
5
+ * Пагинация для методов, у которых `result` — объект, а список лежит в нём под ключом:
6
+ * `{ products: [...] }`, `{ orders: [...] }`.
7
+ *
8
+ * В отличие от {@link NavvyPagNavResultKey}, `.res()` отдаёт объект как есть, а `.resAll()` —
9
+ * такой же объект, где под ключом собраны записи всех страниц. Так `.resAll()` можно добавить
10
+ * методу, который раньше создавался через `simple`, не меняя результат его `.res()`.
11
+ */
12
+ export class NavvyPagNavKeyed extends NavvyPagBase {
13
+ constructor(url, param, key, map, restApi) {
14
+ super(url, param, map, restApi);
15
+ this.key = key;
16
+ }
17
+ resAll() {
18
+ return this.resFirstPage().pipe(mergeMap(first => this.resPages(offsetPageParams(this.param, first.total, this.pageSize)).pipe(map(pages => {
19
+ const items = [first.result, ...pages].flatMap(page => this.listIn(page));
20
+ const joined = { ...first.result, [this.key]: items };
21
+ return (this.map ? this.map(joined) : joined);
22
+ }))),
23
+ // refCount: без подписчиков оставшиеся страницы запрашивать незачем
24
+ shareReplay({ bufferSize: 1, refCount: true }));
25
+ }
26
+ listIn(page) {
27
+ const list = page?.[this.key];
28
+ return Array.isArray(list) ? list : [];
29
+ }
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnktcGFnLW5hdi1rZXllZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL25hdnZ5L25hdnZ5LXBhZy1uYXYta2V5ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBYyxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDeEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBR3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUV6RTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLGdCQUFtRSxTQUFRLFlBQXFCO0lBRTNHLFlBQ0UsR0FBYSxFQUNiLEtBQVEsRUFDUyxHQUFXLEVBQzVCLEdBQTZDLEVBQzdDLE9BQWlCO1FBRWpCLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUpkLFFBQUcsR0FBSCxHQUFHLENBQVE7SUFLOUIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQzdCLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDL0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBQ3pFLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBTyxDQUFBO1lBQzFELE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQTBCLENBQUE7UUFDeEUsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNGLG9FQUFvRTtRQUNwRSxXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUMvQyxDQUFBO0lBQ0gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxJQUFtQjtRQUNoQyxNQUFNLElBQUksR0FBSSxJQUE0QyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3RFLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDeEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWVyZ2VNYXAsIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgaUJYUmVzdFBhZ2luYXRpb24gfSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vcmVzdC9iYXNlL2FwaS1wYWdpbmF0aW9uLWJ4J1xuaW1wb3J0IHsgUmV0dXJuVHlwZU5hdnZ5IH0gZnJvbSAnLi9uYXZ2eS1zdXBwb3J0J1xuaW1wb3J0IHsgTmF2dnlQYWdCYXNlLCBvZmZzZXRQYWdlUGFyYW1zIH0gZnJvbSAnLi9leHRlbmRzL25hdnZ5LXBhZy1iYXNlJ1xuXG4vKipcbiAqINCf0LDQs9C40L3QsNGG0LjRjyDQtNC70Y8g0LzQtdGC0L7QtNC+0LIsINGDINC60L7RgtC+0YDRi9GFIGByZXN1bHRgIOKAlCDQvtCx0YrQtdC60YIsINCwINGB0L/QuNGB0L7QuiDQu9C10LbQuNGCINCyINC90ZHQvCDQv9C+0LQg0LrQu9GO0YfQvtC8OlxuICogYHsgcHJvZHVjdHM6IFsuLi5dIH1gLCBgeyBvcmRlcnM6IFsuLi5dIH1gLlxuICpcbiAqINCSINC+0YLQu9C40YfQuNC1INC+0YIge0BsaW5rIE5hdnZ5UGFnTmF2UmVzdWx0S2V5fSwgYC5yZXMoKWAg0L7RgtC00LDRkdGCINC+0LHRitC10LrRgiDQutCw0Log0LXRgdGC0YwsINCwIGAucmVzQWxsKClgIOKAlFxuICog0YLQsNC60L7QuSDQttC1INC+0LHRitC10LrRgiwg0LPQtNC1INC/0L7QtCDQutC70Y7Rh9C+0Lwg0YHQvtCx0YDQsNC90Ysg0LfQsNC/0LjRgdC4INCy0YHQtdGFINGB0YLRgNCw0L3QuNGGLiDQotCw0LogYC5yZXNBbGwoKWAg0LzQvtC20L3QviDQtNC+0LHQsNCy0LjRgtGMXG4gKiDQvNC10YLQvtC00YMsINC60L7RgtC+0YDRi9C5INGA0LDQvdGM0YjQtSDRgdC+0LfQtNCw0LLQsNC70YHRjyDRh9C10YDQtdC3IGBzaW1wbGVgLCDQvdC1INC80LXQvdGP0Y8g0YDQtdC30YPQu9GM0YLQsNGCINC10LPQviBgLnJlcygpYC5cbiAqL1xuZXhwb3J0IGNsYXNzIE5hdnZ5UGFnTmF2S2V5ZWQ8VCBleHRlbmRzIG9iamVjdCwgUiwgUCBleHRlbmRzIGlCWFJlc3RQYWdpbmF0aW9uPiBleHRlbmRzIE5hdnZ5UGFnQmFzZTxULCBSLCBQPiB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdXJsOiBzdHJpbmdbXSxcbiAgICBwYXJhbTogUCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGtleTogc3RyaW5nLFxuICAgIG1hcD86IChwYXJhbTogVCB8IHVuZGVmaW5lZCkgPT4gUiB8IHVuZGVmaW5lZCxcbiAgICByZXN0QXBpPzogYm9vbGVhblxuICApIHtcbiAgICBzdXBlcih1cmwsIHBhcmFtLCBtYXAsIHJlc3RBcGkpXG4gIH1cblxuICByZXNBbGwoKTogT2JzZXJ2YWJsZTxSZXR1cm5UeXBlTmF2dnk8VCwgUj4+IHtcbiAgICByZXR1cm4gdGhpcy5yZXNGaXJzdFBhZ2UoKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoZmlyc3QgPT4gdGhpcy5yZXNQYWdlczxUPihvZmZzZXRQYWdlUGFyYW1zKHRoaXMucGFyYW0sIGZpcnN0LnRvdGFsLCB0aGlzLnBhZ2VTaXplKSkucGlwZShcbiAgICAgICAgbWFwKHBhZ2VzID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IFtmaXJzdC5yZXN1bHQsIC4uLnBhZ2VzXS5mbGF0TWFwKHBhZ2UgPT4gdGhpcy5saXN0SW4ocGFnZSkpXG4gICAgICAgICAgY29uc3Qgam9pbmVkID0geyAuLi5maXJzdC5yZXN1bHQsIFt0aGlzLmtleV06IGl0ZW1zIH0gYXMgVFxuICAgICAgICAgIHJldHVybiAodGhpcy5tYXAgPyB0aGlzLm1hcChqb2luZWQpIDogam9pbmVkKSBhcyBSZXR1cm5UeXBlTmF2dnk8VCwgUj5cbiAgICAgICAgfSlcbiAgICAgICkpLFxuICAgICAgLy8gcmVmQ291bnQ6INCx0LXQtyDQv9C+0LTQv9C40YHRh9C40LrQvtCyINC+0YHRgtCw0LLRiNC40LXRgdGPINGB0YLRgNCw0L3QuNGG0Ysg0LfQsNC/0YDQsNGI0LjQstCw0YLRjCDQvdC10LfQsNGH0LXQvFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgbGlzdEluKHBhZ2U6IFQgfCB1bmRlZmluZWQpOiB1bmtub3duW10ge1xuICAgIGNvbnN0IGxpc3QgPSAocGFnZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCk/Llt0aGlzLmtleV1cbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShsaXN0KSA/IGxpc3QgOiBbXVxuICB9XG59XG4iXX0=
@@ -1,15 +1,2 @@
1
- import { catchError, map } from 'rxjs/operators';
2
- import { BXRestMapResult } from '../../functions/mapResult';
3
- export class NavvySupport {
4
- constructor(requestClass) {
5
- this.requestClass = requestClass;
6
- this.pageSize = 50; // стандартный размер страницы
7
- }
8
- mapAndError(request) {
9
- return request.pipe(map(v => BXRestMapResult(v)), catchError((err) => {
10
- console.error(err);
11
- throw new Error((err.error) ? err.error : err);
12
- }));
13
- }
14
- }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnktc3VwcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL25hdnZ5L25hdnZ5LXN1cHBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFJM0QsTUFBTSxPQUFnQixZQUFZO0lBSWhDLFlBQ1MsWUFBZTtRQUFmLGlCQUFZLEdBQVosWUFBWSxDQUFHO1FBSHhCLGFBQVEsR0FBRyxFQUFFLENBQUEsQ0FBQyw4QkFBOEI7SUFLNUMsQ0FBQztJQUVELFdBQVcsQ0FDVCxPQUFpRDtRQUVqRCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUM1QixVQUFVLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2hELENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0NBS0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgaUJYUmVzdEFuc3dlciB9IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2Jhc2UvYW5zd2VyJ1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuaW1wb3J0IHsgQlhSZXN0TWFwUmVzdWx0IH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL21hcFJlc3VsdCdcclxuXHJcbmV4cG9ydCB0eXBlIFJldHVyblR5cGVOYXZ2eTxULCBSPiA9IFQgZXh0ZW5kcyBSID8gVCA6IFJcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOYXZ2eVN1cHBvcnQ8QywgVCwgUj4ge1xyXG5cclxuICBwYWdlU2l6ZSA9IDUwIC8vINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0YDQsNC30LzQtdGAINGB0YLRgNCw0L3QuNGG0YtcclxuXHJcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlcXVlc3RDbGFzczogQyxcclxuICApIHtcclxuICB9XHJcblxyXG4gIG1hcEFuZEVycm9yPFQ+KFxyXG4gICAgcmVxdWVzdDogT2JzZXJ2YWJsZTxpQlhSZXN0QW5zd2VyPFQ+IHwgdW5kZWZpbmVkPlxyXG4gICkge1xyXG4gICAgcmV0dXJuIHJlcXVlc3QucGlwZShcclxuICAgICAgbWFwKHYgPT4gQlhSZXN0TWFwUmVzdWx0KHYpKSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKGVyci5lcnJvcikgPyBlcnIuZXJyb3IgOiBlcnIpXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCByZXNWYW5pbGxhKCk6IE9ic2VydmFibGU8aUJYUmVzdEFuc3dlcjxUPiB8IHVuZGVmaW5lZD5cclxuXHJcbiAgYWJzdHJhY3QgcmVzKCk6IFJldHVyblR5cGVOYXZ2eTxPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+LCBPYnNlcnZhYmxlPFIgfCB1bmRlZmluZWQ+PlxyXG59XHJcbiJdfQ==
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnktc3VwcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL25hdnZ5L25hdnZ5LXN1cHBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFJldHVyblR5cGVOYXZ2eTxULCBSPiA9IFQgZXh0ZW5kcyBSID8gVCA6IFJcbiJdfQ==
@@ -5,6 +5,8 @@ import { NavvyPagNavTasks } from './navvy/navvy-pag-nav-tasks';
5
5
  import { NavvyPag } from './navvy/navvy-pag';
6
6
  import { NavvyPagNavResultKey } from './navvy/navvy-pag-nav-result-key';
7
7
  import { NavvyPagNavResultKeyObject } from './navvy/navvy-pag-nav-result-key-object';
8
+ import { NavvyPagNavKeyed } from './navvy/navvy-pag-nav-keyed';
9
+ import { BXRestContext, currentContext, runInContext } from './context';
8
10
  export * from './navvy/navvy-simple';
9
11
  export * from './navvy/navvy-alternative-pagination-navigation';
10
12
  export * from './navvy/navvy-pag-nav-with-useless-key';
@@ -12,13 +14,23 @@ export * from './navvy/navvy-pag-nav-tasks';
12
14
  export * from './navvy/navvy-pag-nav-result-key';
13
15
  export * from './navvy/navvy-pag';
14
16
  export * from './navvy/navvy-pag-nav-result-key-object';
17
+ export * from './navvy/navvy-pag-nav-keyed';
15
18
  export * from './navvy/navvy-support';
16
19
  export class Navvy {
20
+ /**
21
+ * @param settings свои настройки, как у `new BXRestNavvy(settings)`: запросы
22
+ * идут на этот портал с этим токеном, а `BXRestSettings` на них не влияют.
23
+ * Без них — настройки клиента, внутри которого создан объект, или
24
+ * глобальные `BXRestSettings`.
25
+ */
26
+ constructor(settings) {
27
+ this.ctx = settings ? new BXRestContext(settings) : currentContext();
28
+ }
17
29
  simple(url, arg, map) {
18
- return new NavvySimple(url, arg !== undefined ? arg : undefined, map);
30
+ return runInContext(this.ctx, () => new NavvySimple(url, arg !== undefined ? arg : undefined, map));
19
31
  }
20
32
  simpleV3(url, arg, map) {
21
- return new NavvySimple(url, arg !== undefined ? arg : undefined, map, true);
33
+ return runInContext(this.ctx, () => new NavvySimple(url, arg !== undefined ? arg : undefined, map, true));
22
34
  }
23
35
  /**
24
36
  * Новый, пока тестируемый метод для api методов с пагинацией
@@ -29,41 +41,30 @@ export class Navvy {
29
41
  * @constructor
30
42
  */
31
43
  pagNav(url, arg, map) {
32
- return new NavvyPag(url, arg, map);
44
+ return runInContext(this.ctx, () => new NavvyPag(url, arg, map));
33
45
  }
34
- // old PagNav
35
- // PagNav<T, R, A extends iBXRestPagination>(
36
- // func: (param: A) => Observable<iBXRestAnswer<T[]> | undefined>,
37
- // arg: A,
38
- // map: ((param: T[] | undefined) => R[] | undefined) | undefined) {
39
- // return new NavvyPagNav(this.requestClass, this.mapClass, func, arg, map)
40
- // }
41
- // Batch<T, R, A extends iBXRestPagination>(
42
- // func: (param: A) => Observable<iBXRestAnswer<T[]> | undefined>,
43
- // arg: A,
44
- // map: ((param: T[] | undefined) => R[] | undefined) | undefined) {
45
- // return new NavvyBatch(this.requestClass, this.mapClass, func, arg, map)
46
- // }
47
- pagNavTasks(url,
48
- // func: (param: A) => Observable<iBXRestAnswer<{tasks: T[] | undefined}> | undefined>,
49
- arg, map) {
50
- return new NavvyPagNavTasks(url, arg, map);
46
+ pagNavTasks(url, arg, map) {
47
+ return runInContext(this.ctx, () => new NavvyPagNavTasks(url, arg, map));
51
48
  }
52
49
  pagNavResultKey(url, arg, key, map) {
53
- return new NavvyPagNavResultKey(url, arg, key, map);
50
+ return runInContext(this.ctx, () => new NavvyPagNavResultKey(url, arg, key, map));
54
51
  }
55
52
  pagNavResultKeyObject(url, arg, key, map) {
56
- return new NavvyPagNavResultKeyObject(url, arg, key, map);
53
+ return runInContext(this.ctx, () => new NavvyPagNavResultKeyObject(url, arg, key, map));
54
+ }
55
+ /**
56
+ * Для методов, у которых `result` — объект со списком под ключом `key`, например
57
+ * `{ products: [...] }`. `.res()` отдаёт объект как есть, `.resAll()` — такой же объект
58
+ * с записями всех страниц под ключом.
59
+ */
60
+ pagNavKeyed(url, arg, key, map) {
61
+ return runInContext(this.ctx, () => new NavvyPagNavKeyed(url, arg, key, map));
57
62
  }
58
- pagNavWithUselessKey(url,
59
- // func: (param: A) => Observable<iBXRestAnswer<{ [key: string]: T }> | undefined>,
60
- arg, map) {
61
- return new NavvyPagNavWithUselessKey(url, arg, map);
63
+ pagNavWithUselessKey(url, arg, map) {
64
+ return runInContext(this.ctx, () => new NavvyPagNavWithUselessKey(url, arg, map));
62
65
  }
63
- alterPagNav(url,
64
- // func: (param: A) => Observable<iBXRestAnswer<T[]> | undefined>,
65
- arg, map) {
66
- return new NavvyAlterPagNav(url, arg, map);
66
+ alterPagNav(url, arg, map) {
67
+ return runInContext(this.ctx, () => new NavvyAlterPagNav(url, arg, map));
67
68
  }
68
69
  }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9zZXJ2aWNlcy9uYXZ2eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saURBQWlELENBQUE7QUFFbEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFDbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzVDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQ3ZFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBRXBGLGNBQWMsc0JBQXNCLENBQUE7QUFDcEMsY0FBYyxpREFBaUQsQ0FBQTtBQUMvRCxjQUFjLHdDQUF3QyxDQUFBO0FBQ3RELGNBQWMsNkJBQTZCLENBQUE7QUFDM0MsY0FBYyxrQ0FBa0MsQ0FBQTtBQUNoRCxjQUFjLG1CQUFtQixDQUFBO0FBQ2pDLGNBQWMseUNBQXlDLENBQUE7QUFDdkQsY0FBYyx1QkFBdUIsQ0FBQTtBQUVyQyxNQUFNLE9BQU8sS0FBSztJQUVoQixNQUFNLENBQ0osR0FBYSxFQUNiLEdBQU8sRUFDUCxHQUE2QztRQUU3QyxPQUFPLElBQUksV0FBVyxDQUNwQixHQUFHLEVBQ0gsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQ25DLEdBQUcsQ0FDSixDQUFBO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FDTixHQUFhLEVBQ2IsR0FBTyxFQUNQLEdBQTZDO1FBRTdDLE9BQU8sSUFBSSxXQUFXLENBQ3BCLEdBQUcsRUFDSCxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFDbkMsR0FBRyxFQUNILElBQUksQ0FDTCxDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQ0osR0FBYSxFQUNiLEdBQU0sRUFDTixHQUFpRDtRQUVqRCxPQUFPLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDcEMsQ0FBQztJQUVELGFBQWE7SUFDYiw2Q0FBNkM7SUFDN0Msb0VBQW9FO0lBQ3BFLFlBQVk7SUFDWixzRUFBc0U7SUFDdEUsNkVBQTZFO0lBQzdFLElBQUk7SUFFSiw0Q0FBNEM7SUFDNUMsb0VBQW9FO0lBQ3BFLFlBQVk7SUFDWixzRUFBc0U7SUFDdEUsNEVBQTRFO0lBQzVFLElBQUk7SUFFSixXQUFXLENBQ1QsR0FBYTtJQUNiLHVGQUF1RjtJQUN2RixHQUFNLEVBQ04sR0FBd0U7UUFFeEUsT0FBTyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDNUMsQ0FBQztJQUVELGVBQWUsQ0FDYixHQUFhLEVBQ2IsR0FBTSxFQUNOLEdBQU0sRUFDTixHQUF3RTtRQUV4RSxPQUFPLElBQUksb0JBQW9CLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDckQsQ0FBQztJQUVELHFCQUFxQixDQUNuQixHQUFhLEVBQ2IsR0FBTSxFQUNOLEdBQU0sRUFDTixHQUFzRjtRQUV0RixPQUFPLElBQUksMEJBQTBCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVELG9CQUFvQixDQUNsQixHQUFhO0lBQ2IsbUZBQW1GO0lBQ25GLEdBQU0sRUFDTixHQUErRDtRQUUvRCxPQUFPLElBQUkseUJBQXlCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNyRCxDQUFDO0lBRUQsV0FBVyxDQUNULEdBQWE7SUFDYixrRUFBa0U7SUFDbEUsR0FBTSxFQUNOLEdBQWlEO1FBRWpELE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQzVDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5hdnZ5U2ltcGxlIH0gZnJvbSAnLi9uYXZ2eS9uYXZ2eS1zaW1wbGUnXHJcbmltcG9ydCB7IE5hdnZ5QWx0ZXJQYWdOYXYgfSBmcm9tICcuL25hdnZ5L25hdnZ5LWFsdGVybmF0aXZlLXBhZ2luYXRpb24tbmF2aWdhdGlvbidcclxuaW1wb3J0IHsgaUJYUmVzdEFsdGVybmF0aXZlUGFnaW5hdGlvbiwgaUJYUmVzdFBhZ2luYXRpb24gfSBmcm9tICcuLi90eXBpZmljYXRpb24vcmVzdC9iYXNlL2FwaS1wYWdpbmF0aW9uLWJ4J1xyXG5pbXBvcnQgeyBOYXZ2eVBhZ05hdldpdGhVc2VsZXNzS2V5IH0gZnJvbSAnLi9uYXZ2eS9uYXZ2eS1wYWctbmF2LXdpdGgtdXNlbGVzcy1rZXknXG5pbXBvcnQgeyBOYXZ2eVBhZ05hdlRhc2tzIH0gZnJvbSAnLi9uYXZ2eS9uYXZ2eS1wYWctbmF2LXRhc2tzJ1xuaW1wb3J0IHsgTmF2dnlQYWcgfSBmcm9tICcuL25hdnZ5L25hdnZ5LXBhZydcbmltcG9ydCB7IE5hdnZ5UGFnTmF2UmVzdWx0S2V5IH0gZnJvbSAnLi9uYXZ2eS9uYXZ2eS1wYWctbmF2LXJlc3VsdC1rZXknXG5pbXBvcnQgeyBOYXZ2eVBhZ05hdlJlc3VsdEtleU9iamVjdCB9IGZyb20gJy4vbmF2dnkvbmF2dnktcGFnLW5hdi1yZXN1bHQta2V5LW9iamVjdCdcblxyXG5leHBvcnQgKiBmcm9tICcuL25hdnZ5L25hdnZ5LXNpbXBsZSdcclxuZXhwb3J0ICogZnJvbSAnLi9uYXZ2eS9uYXZ2eS1hbHRlcm5hdGl2ZS1wYWdpbmF0aW9uLW5hdmlnYXRpb24nXHJcbmV4cG9ydCAqIGZyb20gJy4vbmF2dnkvbmF2dnktcGFnLW5hdi13aXRoLXVzZWxlc3Mta2V5J1xyXG5leHBvcnQgKiBmcm9tICcuL25hdnZ5L25hdnZ5LXBhZy1uYXYtdGFza3MnXG5leHBvcnQgKiBmcm9tICcuL25hdnZ5L25hdnZ5LXBhZy1uYXYtcmVzdWx0LWtleSdcbmV4cG9ydCAqIGZyb20gJy4vbmF2dnkvbmF2dnktcGFnJ1xuZXhwb3J0ICogZnJvbSAnLi9uYXZ2eS9uYXZ2eS1wYWctbmF2LXJlc3VsdC1rZXktb2JqZWN0J1xuZXhwb3J0ICogZnJvbSAnLi9uYXZ2eS9uYXZ2eS1zdXBwb3J0J1xuXHJcbmV4cG9ydCBjbGFzcyBOYXZ2eSB7XHJcblxyXG4gIHNpbXBsZTxULCBSID0gVCwgQSA9IHVuZGVmaW5lZD4oXG4gICAgdXJsOiBzdHJpbmdbXSxcclxuICAgIGFyZz86IEEsXHJcbiAgICBtYXA/OiAocGFyYW06IFQgfCB1bmRlZmluZWQpID0+IFIgfCB1bmRlZmluZWRcclxuICApIHtcclxuICAgIHJldHVybiBuZXcgTmF2dnlTaW1wbGUoXHJcbiAgICAgIHVybCxcclxuICAgICAgYXJnICE9PSB1bmRlZmluZWQgPyBhcmcgOiB1bmRlZmluZWQsXHJcbiAgICAgIG1hcFxyXG4gICAgKVxuICB9XG5cbiAgc2ltcGxlVjM8VCwgUiA9IFQsIEEgPSB1bmRlZmluZWQ+KFxuICAgIHVybDogc3RyaW5nW10sXG4gICAgYXJnPzogQSxcbiAgICBtYXA/OiAocGFyYW06IFQgfCB1bmRlZmluZWQpID0+IFIgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBOYXZ2eVNpbXBsZShcbiAgICAgIHVybCxcbiAgICAgIGFyZyAhPT0gdW5kZWZpbmVkID8gYXJnIDogdW5kZWZpbmVkLFxuICAgICAgbWFwLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgfVxuXHJcbiAgLyoqXHJcbiAgICog0J3QvtCy0YvQuSwg0L/QvtC60LAg0YLQtdGB0YLQuNGA0YPQtdC80YvQuSDQvNC10YLQvtC0INC00LvRjyBhcGkg0LzQtdGC0L7QtNC+0LIg0YEg0L/QsNCz0LjQvdCw0YbQuNC10LlcclxuICAgKlxyXG4gICAqIEBwYXJhbSB1cmxcclxuICAgKiBAcGFyYW0gYXJnXHJcbiAgICogQHBhcmFtIG1hcFxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqL1xyXG4gIHBhZ05hdjxULCBSLCBBIGV4dGVuZHMgaUJYUmVzdFBhZ2luYXRpb24+KFxyXG4gICAgdXJsOiBzdHJpbmdbXSxcclxuICAgIGFyZzogQSxcclxuICAgIG1hcD86IChwYXJhbTogVFtdIHwgdW5kZWZpbmVkKSA9PiBSW10gfCB1bmRlZmluZWRcclxuICApIHtcclxuICAgIHJldHVybiBuZXcgTmF2dnlQYWcodXJsLCBhcmcsIG1hcClcclxuICB9XHJcblxyXG4gIC8vIG9sZCBQYWdOYXZcclxuICAvLyBQYWdOYXY8VCwgUiwgQSBleHRlbmRzIGlCWFJlc3RQYWdpbmF0aW9uPihcclxuICAvLyAgIGZ1bmM6IChwYXJhbTogQSkgPT4gT2JzZXJ2YWJsZTxpQlhSZXN0QW5zd2VyPFRbXT4gfCB1bmRlZmluZWQ+LFxyXG4gIC8vICAgYXJnOiBBLFxyXG4gIC8vICAgbWFwOiAoKHBhcmFtOiBUW10gfCB1bmRlZmluZWQpID0+IFJbXSB8IHVuZGVmaW5lZCkgfCB1bmRlZmluZWQpIHtcclxuICAvLyAgIHJldHVybiBuZXcgTmF2dnlQYWdOYXYodGhpcy5yZXF1ZXN0Q2xhc3MsIHRoaXMubWFwQ2xhc3MsIGZ1bmMsIGFyZywgbWFwKVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gQmF0Y2g8VCwgUiwgQSBleHRlbmRzIGlCWFJlc3RQYWdpbmF0aW9uPihcclxuICAvLyAgIGZ1bmM6IChwYXJhbTogQSkgPT4gT2JzZXJ2YWJsZTxpQlhSZXN0QW5zd2VyPFRbXT4gfCB1bmRlZmluZWQ+LFxyXG4gIC8vICAgYXJnOiBBLFxyXG4gIC8vICAgbWFwOiAoKHBhcmFtOiBUW10gfCB1bmRlZmluZWQpID0+IFJbXSB8IHVuZGVmaW5lZCkgfCB1bmRlZmluZWQpIHtcclxuICAvLyAgIHJldHVybiBuZXcgTmF2dnlCYXRjaCh0aGlzLnJlcXVlc3RDbGFzcywgdGhpcy5tYXBDbGFzcywgZnVuYywgYXJnLCBtYXApXHJcbiAgLy8gfVxyXG5cclxuICBwYWdOYXZUYXNrczxULCBSLCBBIGV4dGVuZHMgaUJYUmVzdFBhZ2luYXRpb24+KFxuICAgIHVybDogc3RyaW5nW10sXG4gICAgLy8gZnVuYzogKHBhcmFtOiBBKSA9PiBPYnNlcnZhYmxlPGlCWFJlc3RBbnN3ZXI8e3Rhc2tzOiBUW10gfCB1bmRlZmluZWR9PiB8IHVuZGVmaW5lZD4sXHJcbiAgICBhcmc6IEEsXHJcbiAgICBtYXA/OiAocGFyYW06IHsgdGFza3M6IFRbXSB8IHVuZGVmaW5lZCB9IHwgdW5kZWZpbmVkKSA9PiBSW10gfCB1bmRlZmluZWRcclxuICApIHtcclxuICAgIHJldHVybiBuZXcgTmF2dnlQYWdOYXZUYXNrcyh1cmwsIGFyZywgbWFwKVxuICB9XG5cbiAgcGFnTmF2UmVzdWx0S2V5PFQsIFIsIEEgZXh0ZW5kcyBpQlhSZXN0UGFnaW5hdGlvbiwgSyBleHRlbmRzIHN0cmluZz4oXG4gICAgdXJsOiBzdHJpbmdbXSxcbiAgICBhcmc6IEEsXG4gICAga2V5OiBLLFxuICAgIG1hcD86IChwYXJhbTogUmVjb3JkPEssIFRbXSB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQpID0+IFJbXSB8IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gbmV3IE5hdnZ5UGFnTmF2UmVzdWx0S2V5KHVybCwgYXJnLCBrZXksIG1hcClcbiAgfVxuXG4gIHBhZ05hdlJlc3VsdEtleU9iamVjdDxULCBSLCBBIGV4dGVuZHMgaUJYUmVzdFBhZ2luYXRpb24sIEsgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIHVybDogc3RyaW5nW10sXG4gICAgYXJnOiBBLFxuICAgIGtleTogSyxcbiAgICBtYXA/OiAocGFyYW06IFJlY29yZDxLLCBSZWNvcmQ8c3RyaW5nLCBUPiB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQpID0+IFJbXSB8IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gbmV3IE5hdnZ5UGFnTmF2UmVzdWx0S2V5T2JqZWN0KHVybCwgYXJnLCBrZXksIG1hcClcbiAgfVxuXG4gIHBhZ05hdldpdGhVc2VsZXNzS2V5PFQsIFIsIEEgZXh0ZW5kcyBpQlhSZXN0UGFnaW5hdGlvbj4oXG4gICAgdXJsOiBzdHJpbmdbXSxcclxuICAgIC8vIGZ1bmM6IChwYXJhbTogQSkgPT4gT2JzZXJ2YWJsZTxpQlhSZXN0QW5zd2VyPHsgW2tleTogc3RyaW5nXTogVCB9PiB8IHVuZGVmaW5lZD4sXHJcbiAgICBhcmc6IEEsXHJcbiAgICBtYXA/OiAocGFyYW06IFJlY29yZDxzdHJpbmcsIFQ+IHwgdW5kZWZpbmVkKSA9PiBSW10gfCB1bmRlZmluZWRcclxuICApIHtcclxuICAgIHJldHVybiBuZXcgTmF2dnlQYWdOYXZXaXRoVXNlbGVzc0tleSh1cmwsIGFyZywgbWFwKVxyXG4gIH1cclxuXHJcbiAgYWx0ZXJQYWdOYXY8VCwgUiwgQSBleHRlbmRzIGlCWFJlc3RBbHRlcm5hdGl2ZVBhZ2luYXRpb24+KFxyXG4gICAgdXJsOiBzdHJpbmdbXSxcclxuICAgIC8vIGZ1bmM6IChwYXJhbTogQSkgPT4gT2JzZXJ2YWJsZTxpQlhSZXN0QW5zd2VyPFRbXT4gfCB1bmRlZmluZWQ+LFxyXG4gICAgYXJnOiBBLFxyXG4gICAgbWFwPzogKHBhcmFtOiBUW10gfCB1bmRlZmluZWQpID0+IFJbXSB8IHVuZGVmaW5lZFxyXG4gICkge1xyXG4gICAgcmV0dXJuIG5ldyBOYXZ2eUFsdGVyUGFnTmF2KHVybCwgYXJnLCBtYXApXHJcbiAgfVxyXG59XHJcbiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9zZXJ2aWNlcy9uYXZ2eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saURBQWlELENBQUE7QUFFbEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFDbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzVDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQ3ZFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUd2RSxjQUFjLHNCQUFzQixDQUFBO0FBQ3BDLGNBQWMsaURBQWlELENBQUE7QUFDL0QsY0FBYyx3Q0FBd0MsQ0FBQTtBQUN0RCxjQUFjLDZCQUE2QixDQUFBO0FBQzNDLGNBQWMsa0NBQWtDLENBQUE7QUFDaEQsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxjQUFjLHlDQUF5QyxDQUFBO0FBQ3ZELGNBQWMsNkJBQTZCLENBQUE7QUFDM0MsY0FBYyx1QkFBdUIsQ0FBQTtBQUVyQyxNQUFNLE9BQU8sS0FBSztJQU1oQjs7Ozs7T0FLRztJQUNILFlBQVksUUFBMEI7UUFDcEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtJQUN0RSxDQUFDO0lBRUQsTUFBTSxDQUNKLEdBQWEsRUFDYixHQUFPLEVBQ1AsR0FBNkM7UUFFN0MsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLFdBQVcsQ0FDakQsR0FBRyxFQUNILEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUNuQyxHQUFHLENBQ0osQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFFBQVEsQ0FDTixHQUFhLEVBQ2IsR0FBTyxFQUNQLEdBQTZDO1FBRTdDLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxXQUFXLENBQ2pELEdBQUcsRUFDSCxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFDbkMsR0FBRyxFQUNILElBQUksQ0FDTCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FDSixHQUFhLEVBQ2IsR0FBTSxFQUNOLEdBQWlEO1FBRWpELE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQ2xFLENBQUM7SUFFRCxXQUFXLENBQ1QsR0FBYSxFQUNiLEdBQU0sRUFDTixHQUF3RTtRQUV4RSxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzFFLENBQUM7SUFFRCxlQUFlLENBQ2IsR0FBYSxFQUNiLEdBQU0sRUFDTixHQUFNLEVBQ04sR0FBd0U7UUFFeEUsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDbkYsQ0FBQztJQUVELHFCQUFxQixDQUNuQixHQUFhLEVBQ2IsR0FBTSxFQUNOLEdBQU0sRUFDTixHQUFzRjtRQUV0RixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksMEJBQTBCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUN6RixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FDVCxHQUFhLEVBQ2IsR0FBTSxFQUNOLEdBQVcsRUFDWCxHQUE2QztRQUU3QyxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQVUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUN4RixDQUFDO0lBRUQsb0JBQW9CLENBQ2xCLEdBQWEsRUFDYixHQUFNLEVBQ04sR0FBK0Q7UUFFL0QsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNuRixDQUFDO0lBRUQsV0FBVyxDQUNULEdBQWEsRUFDYixHQUFNLEVBQ04sR0FBaUQ7UUFFakQsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUMxRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOYXZ2eVNpbXBsZSB9IGZyb20gJy4vbmF2dnkvbmF2dnktc2ltcGxlJ1xuaW1wb3J0IHsgTmF2dnlBbHRlclBhZ05hdiB9IGZyb20gJy4vbmF2dnkvbmF2dnktYWx0ZXJuYXRpdmUtcGFnaW5hdGlvbi1uYXZpZ2F0aW9uJ1xuaW1wb3J0IHsgaUJYUmVzdEFsdGVybmF0aXZlUGFnaW5hdGlvbiwgaUJYUmVzdFBhZ2luYXRpb24gfSBmcm9tICcuLi90eXBpZmljYXRpb24vcmVzdC9iYXNlL2FwaS1wYWdpbmF0aW9uLWJ4J1xuaW1wb3J0IHsgTmF2dnlQYWdOYXZXaXRoVXNlbGVzc0tleSB9IGZyb20gJy4vbmF2dnkvbmF2dnktcGFnLW5hdi13aXRoLXVzZWxlc3Mta2V5J1xuaW1wb3J0IHsgTmF2dnlQYWdOYXZUYXNrcyB9IGZyb20gJy4vbmF2dnkvbmF2dnktcGFnLW5hdi10YXNrcydcbmltcG9ydCB7IE5hdnZ5UGFnIH0gZnJvbSAnLi9uYXZ2eS9uYXZ2eS1wYWcnXG5pbXBvcnQgeyBOYXZ2eVBhZ05hdlJlc3VsdEtleSB9IGZyb20gJy4vbmF2dnkvbmF2dnktcGFnLW5hdi1yZXN1bHQta2V5J1xuaW1wb3J0IHsgTmF2dnlQYWdOYXZSZXN1bHRLZXlPYmplY3QgfSBmcm9tICcuL25hdnZ5L25hdnZ5LXBhZy1uYXYtcmVzdWx0LWtleS1vYmplY3QnXG5pbXBvcnQgeyBOYXZ2eVBhZ05hdktleWVkIH0gZnJvbSAnLi9uYXZ2eS9uYXZ2eS1wYWctbmF2LWtleWVkJ1xuaW1wb3J0IHsgQlhSZXN0Q29udGV4dCwgY3VycmVudENvbnRleHQsIHJ1bkluQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcbmltcG9ydCB7IGlCWFJlc3RTZXR0aW5ncyB9IGZyb20gJy4uL3R5cGlmaWNhdGlvbi9zZXR0aW5ncydcblxuZXhwb3J0ICogZnJvbSAnLi9uYXZ2eS9uYXZ2eS1zaW1wbGUnXG5leHBvcnQgKiBmcm9tICcuL25hdnZ5L25hdnZ5LWFsdGVybmF0aXZlLXBhZ2luYXRpb24tbmF2aWdhdGlvbidcbmV4cG9ydCAqIGZyb20gJy4vbmF2dnkvbmF2dnktcGFnLW5hdi13aXRoLXVzZWxlc3Mta2V5J1xuZXhwb3J0ICogZnJvbSAnLi9uYXZ2eS9uYXZ2eS1wYWctbmF2LXRhc2tzJ1xuZXhwb3J0ICogZnJvbSAnLi9uYXZ2eS9uYXZ2eS1wYWctbmF2LXJlc3VsdC1rZXknXG5leHBvcnQgKiBmcm9tICcuL25hdnZ5L25hdnZ5LXBhZydcbmV4cG9ydCAqIGZyb20gJy4vbmF2dnkvbmF2dnktcGFnLW5hdi1yZXN1bHQta2V5LW9iamVjdCdcbmV4cG9ydCAqIGZyb20gJy4vbmF2dnkvbmF2dnktcGFnLW5hdi1rZXllZCdcbmV4cG9ydCAqIGZyb20gJy4vbmF2dnkvbmF2dnktc3VwcG9ydCdcblxuZXhwb3J0IGNsYXNzIE5hdnZ5IHtcblxuICAvLyDQmtC+0L3RgtC10LrRgdGCLCDQsiDQutC+0YLQvtGA0L7QvCDRgdC+0LfQtNCw0L0gTmF2dnkuINCX0LDQv9GA0L7RgdGLINGB0L7Qt9C00LDRjtGC0YHRjyDQv9C+0LfQttC1LCDQv9GA0Lgg0LLRi9C30L7QstC1XG4gIC8vINC80LXRgtC+0LTQsCwg0L/QvtGN0YLQvtC80YMg0LjRhSBIVFRQLdC+0LHRitC10LrRgtGLINC/0L7Qu9GD0YfQsNGO0YIg0Y3RgtC+0YIg0LrQvtC90YLQtdC60YHRgiDRj9Cy0L3Qviwg0LAg0L3QtSDRgtC10LrRg9GJ0LjQuS5cbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IEJYUmVzdENvbnRleHRcblxuICAvKipcbiAgICogQHBhcmFtIHNldHRpbmdzINGB0LLQvtC4INC90LDRgdGC0YDQvtC50LrQuCwg0LrQsNC6INGDIGBuZXcgQlhSZXN0TmF2dnkoc2V0dGluZ3MpYDog0LfQsNC/0YDQvtGB0YtcbiAgICogICDQuNC00YPRgiDQvdCwINGN0YLQvtGCINC/0L7RgNGC0LDQuyDRgSDRjdGC0LjQvCDRgtC+0LrQtdC90L7QvCwg0LAgYEJYUmVzdFNldHRpbmdzYCDQvdCwINC90LjRhSDQvdC1INCy0LvQuNGP0Y7Rgi5cbiAgICogICDQkdC10Lcg0L3QuNGFIOKAlCDQvdCw0YHRgtGA0L7QudC60Lgg0LrQu9C40LXQvdGC0LAsINCy0L3Rg9GC0YDQuCDQutC+0YLQvtGA0L7Qs9C+INGB0L7Qt9C00LDQvSDQvtCx0YrQtdC60YIsINC40LvQuFxuICAgKiAgINCz0LvQvtCx0LDQu9GM0L3Ri9C1IGBCWFJlc3RTZXR0aW5nc2AuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzZXR0aW5ncz86IGlCWFJlc3RTZXR0aW5ncykge1xuICAgIHRoaXMuY3R4ID0gc2V0dGluZ3MgPyBuZXcgQlhSZXN0Q29udGV4dChzZXR0aW5ncykgOiBjdXJyZW50Q29udGV4dCgpXG4gIH1cblxuICBzaW1wbGU8VCwgUiA9IFQsIEEgPSB1bmRlZmluZWQ+KFxuICAgIHVybDogc3RyaW5nW10sXG4gICAgYXJnPzogQSxcbiAgICBtYXA/OiAocGFyYW06IFQgfCB1bmRlZmluZWQpID0+IFIgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgcmV0dXJuIHJ1bkluQ29udGV4dCh0aGlzLmN0eCwgKCkgPT4gbmV3IE5hdnZ5U2ltcGxlKFxuICAgICAgdXJsLFxuICAgICAgYXJnICE9PSB1bmRlZmluZWQgPyBhcmcgOiB1bmRlZmluZWQsXG4gICAgICBtYXBcbiAgICApKVxuICB9XG5cbiAgc2ltcGxlVjM8VCwgUiA9IFQsIEEgPSB1bmRlZmluZWQ+KFxuICAgIHVybDogc3RyaW5nW10sXG4gICAgYXJnPzogQSxcbiAgICBtYXA/OiAocGFyYW06IFQgfCB1bmRlZmluZWQpID0+IFIgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgcmV0dXJuIHJ1bkluQ29udGV4dCh0aGlzLmN0eCwgKCkgPT4gbmV3IE5hdnZ5U2ltcGxlKFxuICAgICAgdXJsLFxuICAgICAgYXJnICE9PSB1bmRlZmluZWQgPyBhcmcgOiB1bmRlZmluZWQsXG4gICAgICBtYXAsXG4gICAgICB0cnVlXG4gICAgKSlcbiAgfVxuXG4gIC8qKlxuICAgKiDQndC+0LLRi9C5LCDQv9C+0LrQsCDRgtC10YHRgtC40YDRg9C10LzRi9C5INC80LXRgtC+0LQg0LTQu9GPIGFwaSDQvNC10YLQvtC00L7QsiDRgSDQv9Cw0LPQuNC90LDRhtC40LXQuVxuICAgKlxuICAgKiBAcGFyYW0gdXJsXG4gICAqIEBwYXJhbSBhcmdcbiAgICogQHBhcmFtIG1hcFxuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIHBhZ05hdjxULCBSLCBBIGV4dGVuZHMgaUJYUmVzdFBhZ2luYXRpb24+KFxuICAgIHVybDogc3RyaW5nW10sXG4gICAgYXJnOiBBLFxuICAgIG1hcD86IChwYXJhbTogVFtdIHwgdW5kZWZpbmVkKSA9PiBSW10gfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgcmV0dXJuIHJ1bkluQ29udGV4dCh0aGlzLmN0eCwgKCkgPT4gbmV3IE5hdnZ5UGFnKHVybCwgYXJnLCBtYXApKVxuICB9XG5cbiAgcGFnTmF2VGFza3M8VCwgUiwgQSBleHRlbmRzIGlCWFJlc3RQYWdpbmF0aW9uPihcbiAgICB1cmw6IHN0cmluZ1tdLFxuICAgIGFyZzogQSxcbiAgICBtYXA/OiAocGFyYW06IHsgdGFza3M6IFRbXSB8IHVuZGVmaW5lZCB9IHwgdW5kZWZpbmVkKSA9PiBSW10gfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgcmV0dXJuIHJ1bkluQ29udGV4dCh0aGlzLmN0eCwgKCkgPT4gbmV3IE5hdnZ5UGFnTmF2VGFza3ModXJsLCBhcmcsIG1hcCkpXG4gIH1cblxuICBwYWdOYXZSZXN1bHRLZXk8VCwgUiwgQSBleHRlbmRzIGlCWFJlc3RQYWdpbmF0aW9uLCBLIGV4dGVuZHMgc3RyaW5nPihcbiAgICB1cmw6IHN0cmluZ1tdLFxuICAgIGFyZzogQSxcbiAgICBrZXk6IEssXG4gICAgbWFwPzogKHBhcmFtOiBSZWNvcmQ8SywgVFtdIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCkgPT4gUltdIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiBydW5JbkNvbnRleHQodGhpcy5jdHgsICgpID0+IG5ldyBOYXZ2eVBhZ05hdlJlc3VsdEtleSh1cmwsIGFyZywga2V5LCBtYXApKVxuICB9XG5cbiAgcGFnTmF2UmVzdWx0S2V5T2JqZWN0PFQsIFIsIEEgZXh0ZW5kcyBpQlhSZXN0UGFnaW5hdGlvbiwgSyBleHRlbmRzIHN0cmluZz4oXG4gICAgdXJsOiBzdHJpbmdbXSxcbiAgICBhcmc6IEEsXG4gICAga2V5OiBLLFxuICAgIG1hcD86IChwYXJhbTogUmVjb3JkPEssIFJlY29yZDxzdHJpbmcsIFQ+IHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCkgPT4gUltdIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiBydW5JbkNvbnRleHQodGhpcy5jdHgsICgpID0+IG5ldyBOYXZ2eVBhZ05hdlJlc3VsdEtleU9iamVjdCh1cmwsIGFyZywga2V5LCBtYXApKVxuICB9XG5cbiAgLyoqXG4gICAqINCU0LvRjyDQvNC10YLQvtC00L7Qsiwg0YMg0LrQvtGC0L7RgNGL0YUgYHJlc3VsdGAg4oCUINC+0LHRitC10LrRgiDRgdC+INGB0L/QuNGB0LrQvtC8INC/0L7QtCDQutC70Y7Rh9C+0LwgYGtleWAsINC90LDQv9GA0LjQvNC10YBcbiAgICogYHsgcHJvZHVjdHM6IFsuLi5dIH1gLiBgLnJlcygpYCDQvtGC0LTQsNGR0YIg0L7QsdGK0LXQutGCINC60LDQuiDQtdGB0YLRjCwgYC5yZXNBbGwoKWAg4oCUINGC0LDQutC+0Lkg0LbQtSDQvtCx0YrQtdC60YJcbiAgICog0YEg0LfQsNC/0LjRgdGP0LzQuCDQstGB0LXRhSDRgdGC0YDQsNC90LjRhiDQv9C+0LQg0LrQu9GO0YfQvtC8LlxuICAgKi9cbiAgcGFnTmF2S2V5ZWQ8VCBleHRlbmRzIG9iamVjdCwgUiwgQSBleHRlbmRzIGlCWFJlc3RQYWdpbmF0aW9uPihcbiAgICB1cmw6IHN0cmluZ1tdLFxuICAgIGFyZzogQSxcbiAgICBrZXk6IHN0cmluZyxcbiAgICBtYXA/OiAocGFyYW06IFQgfCB1bmRlZmluZWQpID0+IFIgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgcmV0dXJuIHJ1bkluQ29udGV4dCh0aGlzLmN0eCwgKCkgPT4gbmV3IE5hdnZ5UGFnTmF2S2V5ZWQ8VCwgUiwgQT4odXJsLCBhcmcsIGtleSwgbWFwKSlcbiAgfVxuXG4gIHBhZ05hdldpdGhVc2VsZXNzS2V5PFQsIFIsIEEgZXh0ZW5kcyBpQlhSZXN0UGFnaW5hdGlvbj4oXG4gICAgdXJsOiBzdHJpbmdbXSxcbiAgICBhcmc6IEEsXG4gICAgbWFwPzogKHBhcmFtOiBSZWNvcmQ8c3RyaW5nLCBUPiB8IHVuZGVmaW5lZCkgPT4gUltdIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiBydW5JbkNvbnRleHQodGhpcy5jdHgsICgpID0+IG5ldyBOYXZ2eVBhZ05hdldpdGhVc2VsZXNzS2V5KHVybCwgYXJnLCBtYXApKVxuICB9XG5cbiAgYWx0ZXJQYWdOYXY8VCwgUiwgQSBleHRlbmRzIGlCWFJlc3RBbHRlcm5hdGl2ZVBhZ2luYXRpb24+KFxuICAgIHVybDogc3RyaW5nW10sXG4gICAgYXJnOiBBLFxuICAgIG1hcD86IChwYXJhbTogVFtdIHwgdW5kZWZpbmVkKSA9PiBSW10gfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgcmV0dXJuIHJ1bkluQ29udGV4dCh0aGlzLmN0eCwgKCkgPT4gbmV3IE5hdnZ5QWx0ZXJQYWdOYXYodXJsLCBhcmcsIG1hcCkpXG4gIH1cbn1cbiJdfQ==