@veloceapps/sdk 8.0.0-12 → 8.0.0-121

Sign up to get free protection for your applications and to get access to all the features.
Files changed (332) hide show
  1. package/README.md +0 -1
  2. package/cms/README.md +0 -20
  3. package/cms/cms.actions.d.ts +7 -1
  4. package/cms/components/preview/preview.component.d.ts +1 -2
  5. package/cms/components/preview/preview.types.d.ts +4 -0
  6. package/cms/index.d.ts +1 -0
  7. package/cms/modules/runtime/services/runtime.service.d.ts +1 -1
  8. package/cms/services/index.d.ts +0 -1
  9. package/cms/types/index.d.ts +0 -1
  10. package/cms/utils/element-metadata-worker.d.ts +11 -0
  11. package/cms/utils/element.utils.d.ts +1 -0
  12. package/cms/utils/elements-resolver.d.ts +0 -2
  13. package/cms/utils/index.d.ts +3 -0
  14. package/cms/utils/transpilation-worker.d.ts +13 -0
  15. package/cms/vendor-map.d.ts +26 -13
  16. package/core/README.md +20 -0
  17. package/core/modules/configuration/helpers.d.ts +4 -3
  18. package/core/modules/configuration/services/configuration-runtime.service.d.ts +1 -1
  19. package/core/modules/configuration/services/configuration.service.d.ts +6 -1
  20. package/core/modules/configuration/types/configuration.types.d.ts +4 -0
  21. package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +5 -0
  22. package/core/pipes/action-code.pipe.d.ts +8 -0
  23. package/core/pipes/date.pipe.d.ts +2 -1
  24. package/core/pipes/index.d.ts +1 -0
  25. package/core/pipes/pipes.module.d.ts +2 -1
  26. package/core/services/context.service.d.ts +3 -0
  27. package/core/services/flow-info.service.d.ts +27 -0
  28. package/core/services/flow-state-configuration.service.d.ts +20 -0
  29. package/core/services/flow-state.service.d.ts +70 -0
  30. package/core/services/index.d.ts +4 -0
  31. package/core/services/quote-draft.service.d.ts +8 -1
  32. package/core/services/runtime-settings.service.d.ts +4 -1
  33. package/core/types/flow-customization.types.d.ts +22 -0
  34. package/core/types/flow-state.types.d.ts +6 -0
  35. package/core/types/formatting-settings.types.d.ts +2 -0
  36. package/core/types/index.d.ts +3 -0
  37. package/{cms → core}/types/integration.types.d.ts +1 -0
  38. package/core/types/pipe.types.d.ts +1 -0
  39. package/esm2020/cms/cms.actions.mjs +15 -1
  40. package/esm2020/cms/components/element-children/element-children.component.mjs +3 -3
  41. package/esm2020/cms/components/element-children/element-children.module.mjs +4 -4
  42. package/esm2020/cms/components/element-drop-handle/element-drop-handle.component.mjs +3 -3
  43. package/esm2020/cms/components/element-drop-handle/element-drop-handle.module.mjs +4 -4
  44. package/esm2020/cms/components/element-renderer/element-renderer.component.mjs +3 -3
  45. package/esm2020/cms/components/element-renderer/element-renderer.module.mjs +4 -4
  46. package/esm2020/cms/components/element-tools-panel/element-tools-panel.component.mjs +5 -5
  47. package/esm2020/cms/components/plugin.component.mjs +3 -3
  48. package/esm2020/cms/components/preview/preview.component.mjs +11 -11
  49. package/esm2020/cms/components/preview/preview.module.mjs +6 -6
  50. package/esm2020/cms/components/preview/preview.types.mjs +1 -1
  51. package/esm2020/cms/directives/custom-template.directive.mjs +7 -7
  52. package/esm2020/cms/index.mjs +2 -1
  53. package/esm2020/cms/launcher.module.mjs +7 -7
  54. package/esm2020/cms/modules/federated/federated-host.directive.mjs +3 -3
  55. package/esm2020/cms/modules/federated/federated.component.mjs +3 -3
  56. package/esm2020/cms/modules/federated/federated.module.mjs +4 -4
  57. package/esm2020/cms/modules/migrations/migrations.module.mjs +4 -4
  58. package/esm2020/cms/modules/migrations/services/migrations.service.mjs +3 -3
  59. package/esm2020/cms/modules/runtime/runtime.module.mjs +4 -4
  60. package/esm2020/cms/modules/runtime/services/compilation.service.mjs +12 -8
  61. package/esm2020/cms/modules/runtime/services/runtime-editor.service.mjs +3 -3
  62. package/esm2020/cms/modules/runtime/services/runtime.service.mjs +7 -7
  63. package/esm2020/cms/plugins/configuration.plugin.mjs +3 -3
  64. package/esm2020/cms/plugins/element-hover.plugin.mjs +3 -3
  65. package/esm2020/cms/plugins/io.plugin.mjs +8 -7
  66. package/esm2020/cms/plugins/page.plugin.mjs +3 -3
  67. package/esm2020/cms/plugins/region.plugin.mjs +3 -3
  68. package/esm2020/cms/plugins/script.plugin.mjs +3 -3
  69. package/esm2020/cms/services/element-context.service.mjs +3 -3
  70. package/esm2020/cms/services/index.mjs +1 -2
  71. package/esm2020/cms/services/io-provider.service.mjs +3 -3
  72. package/esm2020/cms/services/resources.service.mjs +3 -3
  73. package/esm2020/cms/services/templates.service.mjs +3 -3
  74. package/esm2020/cms/types/index.mjs +1 -2
  75. package/esm2020/cms/utils/element-metadata-worker.mjs +31 -0
  76. package/esm2020/cms/utils/element.utils.mjs +10 -3
  77. package/esm2020/cms/utils/elements-resolver.mjs +14 -28
  78. package/esm2020/cms/utils/index.mjs +4 -1
  79. package/esm2020/cms/utils/transpilation-worker.mjs +52 -0
  80. package/esm2020/cms/vendor-map.mjs +18 -5
  81. package/esm2020/core/core.module.mjs +12 -17
  82. package/esm2020/core/directives/directives.module.mjs +4 -4
  83. package/esm2020/core/directives/primeng-calendar.directive.mjs +3 -3
  84. package/esm2020/core/modules/configuration/configuration.module.mjs +4 -4
  85. package/esm2020/core/modules/configuration/helpers.mjs +28 -3
  86. package/esm2020/core/modules/configuration/services/configuration-runtime.service.mjs +11 -14
  87. package/esm2020/core/modules/configuration/services/configuration.service.mjs +29 -10
  88. package/esm2020/core/modules/configuration/services/configuration.state.mjs +5 -5
  89. package/esm2020/core/modules/configuration/services/runtime-context.service.mjs +9 -9
  90. package/esm2020/core/modules/configuration/types/configuration.types.mjs +1 -1
  91. package/esm2020/core/modules/flow-configuration/flow-configuration.module.mjs +4 -4
  92. package/esm2020/core/modules/flow-configuration/services/flow-configuration.service.mjs +15 -11
  93. package/esm2020/core/modules/flow-configuration/services/flow-update.service.mjs +3 -3
  94. package/esm2020/core/pipes/action-code.pipe.mjs +20 -0
  95. package/esm2020/core/pipes/date.pipe.mjs +13 -7
  96. package/esm2020/core/pipes/index.mjs +2 -1
  97. package/esm2020/core/pipes/number.pipe.mjs +3 -3
  98. package/esm2020/core/pipes/pipes.module.mjs +8 -7
  99. package/esm2020/core/pipes/price.pipe.mjs +3 -3
  100. package/esm2020/core/services/context.service.mjs +32 -5
  101. package/esm2020/core/services/flow-info.service.mjs +94 -0
  102. package/esm2020/core/services/flow-state-configuration.service.mjs +52 -0
  103. package/esm2020/core/services/flow-state.service.mjs +441 -0
  104. package/esm2020/core/services/index.mjs +5 -1
  105. package/esm2020/core/services/integration.state.mjs +37 -0
  106. package/esm2020/core/services/metric-calculation/metric-calculation.service.mjs +3 -3
  107. package/esm2020/core/services/product-images.service.mjs +3 -3
  108. package/esm2020/core/services/quote-draft.service.mjs +31 -6
  109. package/esm2020/core/services/runtime-settings.service.mjs +20 -5
  110. package/esm2020/core/types/flow-customization.types.mjs +3 -0
  111. package/esm2020/core/types/flow-state.types.mjs +2 -0
  112. package/esm2020/core/types/formatting-settings.types.mjs +1 -1
  113. package/esm2020/core/types/index.mjs +4 -1
  114. package/esm2020/core/types/integration.types.mjs +2 -0
  115. package/esm2020/core/types/pipe.types.mjs +2 -0
  116. package/esm2020/src/components/dialog/dialog.component.mjs +3 -3
  117. package/esm2020/src/components/dialog/dialog.module.mjs +4 -4
  118. package/esm2020/src/components/doc-gen/doc-gen.component.mjs +45 -54
  119. package/esm2020/src/components/doc-gen/doc-gen.module.mjs +4 -4
  120. package/esm2020/src/components/flow-header/flow-header.component.mjs +108 -0
  121. package/esm2020/src/components/flow-header/flow-header.module.mjs +19 -0
  122. package/esm2020/src/components/flow-header/index.mjs +2 -0
  123. package/esm2020/src/components/guided-selling/guided-selling.component.mjs +42 -51
  124. package/esm2020/src/components/guided-selling/guided-selling.module.mjs +4 -4
  125. package/esm2020/src/configure-primeng.mjs +33 -0
  126. package/esm2020/src/flow-routing.module.mjs +66 -75
  127. package/esm2020/src/flow.component.mjs +24 -33
  128. package/esm2020/src/flow.module.mjs +11 -9
  129. package/esm2020/src/guards/context.guard.mjs +7 -12
  130. package/esm2020/src/guards/flow.guard.mjs +31 -0
  131. package/esm2020/src/guards/product-unload.guard.mjs +7 -4
  132. package/esm2020/src/guards/root.guard.mjs +17 -13
  133. package/esm2020/src/pages/assets/assets.component.mjs +34 -38
  134. package/esm2020/src/pages/assets/assets.module.mjs +4 -4
  135. package/esm2020/src/pages/catalog/catalog.component.mjs +34 -38
  136. package/esm2020/src/pages/catalog/catalog.module.mjs +4 -4
  137. package/esm2020/src/pages/debug/debug.component.mjs +12 -16
  138. package/esm2020/src/pages/debug/debug.module.mjs +4 -4
  139. package/esm2020/src/pages/empty-account/empty-account.component.mjs +3 -3
  140. package/esm2020/src/pages/empty-account/empty-account.module.mjs +4 -4
  141. package/esm2020/src/pages/product/product.component.mjs +7 -10
  142. package/esm2020/src/pages/product/product.module.mjs +4 -4
  143. package/esm2020/src/pages/record-not-found/record-not-found.component.mjs +3 -3
  144. package/esm2020/src/pages/record-not-found/record-not-found.module.mjs +4 -4
  145. package/esm2020/src/pages/remote/remote.component.mjs +13 -14
  146. package/esm2020/src/pages/remote/remote.module.mjs +4 -4
  147. package/esm2020/src/pages/shopping-cart/shopping-cart.component.mjs +35 -39
  148. package/esm2020/src/pages/shopping-cart/shopping-cart.module.mjs +4 -4
  149. package/esm2020/src/resolvers/flow.resolver.mjs +37 -51
  150. package/esm2020/src/resolvers/quote.resolver.mjs +40 -65
  151. package/esm2020/src/services/doc-gen.service.mjs +7 -6
  152. package/esm2020/src/services/flow-dialog.service.mjs +22 -7
  153. package/esm2020/src/services/flow-router.service.mjs +31 -10
  154. package/esm2020/src/services/flow.service.mjs +36 -11
  155. package/esm2020/src/services/guided-selling.service.mjs +8 -7
  156. package/esm2020/src/services/index.mjs +3 -1
  157. package/esm2020/src/types/index.mjs +1 -2
  158. package/esm2020/src/utils/flow.utils.mjs +6 -2
  159. package/fesm2015/veloceapps-sdk-cms.mjs +329 -248
  160. package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
  161. package/fesm2015/veloceapps-sdk-core.mjs +1551 -826
  162. package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
  163. package/fesm2015/veloceapps-sdk.mjs +744 -1544
  164. package/fesm2015/veloceapps-sdk.mjs.map +1 -1
  165. package/fesm2020/veloceapps-sdk-cms.mjs +343 -270
  166. package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
  167. package/fesm2020/veloceapps-sdk-core.mjs +1866 -1158
  168. package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
  169. package/fesm2020/veloceapps-sdk.mjs +856 -1655
  170. package/fesm2020/veloceapps-sdk.mjs.map +1 -1
  171. package/package.json +7 -13
  172. package/src/components/doc-gen/doc-gen.component.d.ts +8 -12
  173. package/src/components/flow-header/flow-header.component.d.ts +25 -0
  174. package/src/components/flow-header/flow-header.module.d.ts +9 -0
  175. package/src/components/flow-header/index.d.ts +1 -0
  176. package/src/components/guided-selling/guided-selling.component.d.ts +7 -11
  177. package/src/configure-primeng.d.ts +1 -0
  178. package/src/flow-routing.module.d.ts +6 -7
  179. package/src/flow.component.d.ts +7 -11
  180. package/src/flow.module.d.ts +2 -2
  181. package/src/guards/context.guard.d.ts +4 -5
  182. package/src/guards/flow.guard.d.ts +2 -0
  183. package/src/guards/product-unload.guard.d.ts +2 -2
  184. package/src/guards/root.guard.d.ts +0 -1
  185. package/src/pages/assets/assets.component.d.ts +5 -7
  186. package/src/pages/catalog/catalog.component.d.ts +5 -7
  187. package/src/pages/debug/debug.component.d.ts +5 -8
  188. package/src/pages/product/product.component.d.ts +2 -3
  189. package/src/pages/remote/remote.component.d.ts +1 -2
  190. package/src/pages/shopping-cart/shopping-cart.component.d.ts +5 -7
  191. package/src/resolvers/flow.resolver.d.ts +6 -7
  192. package/src/resolvers/quote.resolver.d.ts +6 -12
  193. package/src/services/doc-gen.service.d.ts +1 -1
  194. package/src/services/flow-dialog.service.d.ts +5 -2
  195. package/src/services/flow-router.service.d.ts +4 -2
  196. package/src/services/flow.service.d.ts +4 -2
  197. package/src/services/guided-selling.service.d.ts +1 -1
  198. package/src/services/index.d.ts +2 -0
  199. package/src/types/index.d.ts +0 -1
  200. package/esm2020/cms/services/integration.state.mjs +0 -37
  201. package/esm2020/cms/types/integration.types.mjs +0 -2
  202. package/esm2020/runtime/components/component-preview/component-preview.component.mjs +0 -125
  203. package/esm2020/runtime/components/index.mjs +0 -5
  204. package/esm2020/runtime/components/section-renderer/section-renderer.component.mjs +0 -67
  205. package/esm2020/runtime/components/ui-runtime/runtime.component.mjs +0 -440
  206. package/esm2020/runtime/components/ui-runtime-preview/runtime-preview.component.mjs +0 -108
  207. package/esm2020/runtime/execution/components/children-placeholder/children-placeholder.component.mjs +0 -60
  208. package/esm2020/runtime/execution/components/context-provider/context-provider.component.mjs +0 -39
  209. package/esm2020/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.mjs +0 -67
  210. package/esm2020/runtime/execution/components/federated/federated.component.mjs +0 -74
  211. package/esm2020/runtime/execution/components/velo-attribute/velo-attribute.component.mjs +0 -60
  212. package/esm2020/runtime/execution/components/velo-multiselect/velo-multiselect.component.mjs +0 -130
  213. package/esm2020/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.mjs +0 -72
  214. package/esm2020/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.mjs +0 -97
  215. package/esm2020/runtime/execution/components/velo-port-radio/velo-port-radio.component.mjs +0 -142
  216. package/esm2020/runtime/execution/components/velo-type/velo-type.component.mjs +0 -119
  217. package/esm2020/runtime/execution/directives/section-script.directive.mjs +0 -247
  218. package/esm2020/runtime/execution/directives/sf-query.directive.mjs +0 -35
  219. package/esm2020/runtime/execution/directives/velo-attribute.directive.mjs +0 -88
  220. package/esm2020/runtime/execution/directives/velo-port.directive.mjs +0 -376
  221. package/esm2020/runtime/execution/directives/vl-approval.directive.mjs +0 -23
  222. package/esm2020/runtime/execution/directives/vl-document-attachments.directive.mjs +0 -36
  223. package/esm2020/runtime/execution/directives/vl-document-templates.directive.mjs +0 -60
  224. package/esm2020/runtime/execution/directives/vl-quote.directive.mjs +0 -42
  225. package/esm2020/runtime/execution/directives/vl-ramp.directive.mjs +0 -55
  226. package/esm2020/runtime/execution/runtime-execution.module.mjs +0 -133
  227. package/esm2020/runtime/execution/utils/federated.util.mjs +0 -32
  228. package/esm2020/runtime/index.mjs +0 -5
  229. package/esm2020/runtime/runtime.module.mjs +0 -74
  230. package/esm2020/runtime/services/cart.service.mjs +0 -29
  231. package/esm2020/runtime/services/collapsible-state.service.mjs +0 -34
  232. package/esm2020/runtime/services/configuration.service.mjs +0 -119
  233. package/esm2020/runtime/services/current-state.service.mjs +0 -17
  234. package/esm2020/runtime/services/form-scope.service.mjs +0 -30
  235. package/esm2020/runtime/services/index.mjs +0 -4
  236. package/esm2020/runtime/services/product-model-cache.service.mjs +0 -31
  237. package/esm2020/runtime/services/runtime-context.service.mjs +0 -60
  238. package/esm2020/runtime/services/runtime-form.service.mjs +0 -219
  239. package/esm2020/runtime/services/runtime.service.mjs +0 -115
  240. package/esm2020/runtime/services/section-helper.service.mjs +0 -27
  241. package/esm2020/runtime/services/section-scope.service.mjs +0 -36
  242. package/esm2020/runtime/services/section-store.service.mjs +0 -22
  243. package/esm2020/runtime/services/section.service.mjs +0 -117
  244. package/esm2020/runtime/types/bound-data.types.mjs +0 -7
  245. package/esm2020/runtime/types/index.mjs +0 -3
  246. package/esm2020/runtime/types/quote-states.types.mjs +0 -2
  247. package/esm2020/runtime/types/runtime.types.mjs +0 -2
  248. package/esm2020/runtime/types/script-registry.types.mjs +0 -51
  249. package/esm2020/runtime/utils/line-item.util.mjs +0 -270
  250. package/esm2020/runtime/utils/section.utils.mjs +0 -26
  251. package/esm2020/runtime/utils/sections-binder.helper.mjs +0 -105
  252. package/esm2020/runtime/veloceapps-sdk-runtime.mjs +0 -5
  253. package/esm2020/src/components/header/cart-overlay/cart-preview.component.mjs +0 -119
  254. package/esm2020/src/components/header/cart-overlay/cart-preview.module.mjs +0 -47
  255. package/esm2020/src/components/header/header.component.mjs +0 -355
  256. package/esm2020/src/components/header/header.module.mjs +0 -52
  257. package/esm2020/src/components/header/header.types.mjs +0 -2
  258. package/esm2020/src/components/header/metrics/index.mjs +0 -2
  259. package/esm2020/src/components/header/metrics/metrics.component.mjs +0 -255
  260. package/esm2020/src/components/header/metrics/metrics.definitions.mjs +0 -2
  261. package/esm2020/src/components/header/metrics/metrics.module.mjs +0 -69
  262. package/esm2020/src/pages/legacy-product/legacy-product.component.mjs +0 -137
  263. package/esm2020/src/pages/legacy-product/legacy-product.module.mjs +0 -19
  264. package/esm2020/src/types/flow-customization.types.mjs +0 -3
  265. package/fesm2015/veloceapps-sdk-runtime.mjs +0 -3770
  266. package/fesm2015/veloceapps-sdk-runtime.mjs.map +0 -1
  267. package/fesm2020/veloceapps-sdk-runtime.mjs +0 -3767
  268. package/fesm2020/veloceapps-sdk-runtime.mjs.map +0 -1
  269. package/runtime/README.md +0 -5
  270. package/runtime/components/component-preview/component-preview.component.d.ts +0 -27
  271. package/runtime/components/index.d.ts +0 -4
  272. package/runtime/components/section-renderer/section-renderer.component.d.ts +0 -25
  273. package/runtime/components/ui-runtime/runtime.component.d.ts +0 -53
  274. package/runtime/components/ui-runtime-preview/runtime-preview.component.d.ts +0 -27
  275. package/runtime/execution/components/children-placeholder/children-placeholder.component.d.ts +0 -30
  276. package/runtime/execution/components/context-provider/context-provider.component.d.ts +0 -14
  277. package/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.d.ts +0 -25
  278. package/runtime/execution/components/federated/federated.component.d.ts +0 -36
  279. package/runtime/execution/components/velo-attribute/velo-attribute.component.d.ts +0 -19
  280. package/runtime/execution/components/velo-multiselect/velo-multiselect.component.d.ts +0 -35
  281. package/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.d.ts +0 -22
  282. package/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.d.ts +0 -22
  283. package/runtime/execution/components/velo-port-radio/velo-port-radio.component.d.ts +0 -28
  284. package/runtime/execution/components/velo-type/velo-type.component.d.ts +0 -31
  285. package/runtime/execution/directives/section-script.directive.d.ts +0 -59
  286. package/runtime/execution/directives/sf-query.directive.d.ts +0 -15
  287. package/runtime/execution/directives/velo-attribute.directive.d.ts +0 -26
  288. package/runtime/execution/directives/velo-port.directive.d.ts +0 -74
  289. package/runtime/execution/directives/vl-approval.directive.d.ts +0 -10
  290. package/runtime/execution/directives/vl-document-attachments.directive.d.ts +0 -15
  291. package/runtime/execution/directives/vl-document-templates.directive.d.ts +0 -33
  292. package/runtime/execution/directives/vl-quote.directive.d.ts +0 -14
  293. package/runtime/execution/directives/vl-ramp.directive.d.ts +0 -15
  294. package/runtime/execution/runtime-execution.module.d.ts +0 -25
  295. package/runtime/execution/utils/federated.util.d.ts +0 -6
  296. package/runtime/index.d.ts +0 -4
  297. package/runtime/runtime.module.d.ts +0 -16
  298. package/runtime/services/cart.service.d.ts +0 -15
  299. package/runtime/services/collapsible-state.service.d.ts +0 -15
  300. package/runtime/services/configuration.service.d.ts +0 -20
  301. package/runtime/services/current-state.service.d.ts +0 -8
  302. package/runtime/services/form-scope.service.d.ts +0 -20
  303. package/runtime/services/index.d.ts +0 -3
  304. package/runtime/services/product-model-cache.service.d.ts +0 -14
  305. package/runtime/services/runtime-context.service.d.ts +0 -16
  306. package/runtime/services/runtime-form.service.d.ts +0 -24
  307. package/runtime/services/runtime.service.d.ts +0 -44
  308. package/runtime/services/section-helper.service.d.ts +0 -8
  309. package/runtime/services/section-scope.service.d.ts +0 -14
  310. package/runtime/services/section-store.service.d.ts +0 -11
  311. package/runtime/services/section.service.d.ts +0 -30
  312. package/runtime/types/bound-data.types.d.ts +0 -13
  313. package/runtime/types/index.d.ts +0 -2
  314. package/runtime/types/quote-states.types.d.ts +0 -6
  315. package/runtime/types/runtime.types.d.ts +0 -19
  316. package/runtime/types/script-registry.types.d.ts +0 -13
  317. package/runtime/utils/line-item.util.d.ts +0 -34
  318. package/runtime/utils/section.utils.d.ts +0 -2
  319. package/runtime/utils/sections-binder.helper.d.ts +0 -16
  320. package/src/components/header/cart-overlay/cart-preview.component.d.ts +0 -36
  321. package/src/components/header/cart-overlay/cart-preview.module.d.ts +0 -14
  322. package/src/components/header/header.component.d.ts +0 -70
  323. package/src/components/header/header.module.d.ts +0 -16
  324. package/src/components/header/header.types.d.ts +0 -20
  325. package/src/components/header/metrics/index.d.ts +0 -1
  326. package/src/components/header/metrics/metrics.component.d.ts +0 -67
  327. package/src/components/header/metrics/metrics.definitions.d.ts +0 -1
  328. package/src/components/header/metrics/metrics.module.d.ts +0 -18
  329. package/src/pages/legacy-product/legacy-product.component.d.ts +0 -37
  330. package/src/pages/legacy-product/legacy-product.module.d.ts +0 -9
  331. package/src/types/flow-customization.types.d.ts +0 -12
  332. /package/{cms → core}/services/integration.state.d.ts +0 -0
@@ -0,0 +1,52 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { FlowStateApiService } from '@veloceapps/api';
3
+ import { BehaviorSubject, map, noop, of, switchMap, tap } from 'rxjs';
4
+ import { FlowStateService } from './flow-state.service';
5
+ import { FlowInfoService } from './flow-info.service';
6
+ import { ConfigurationService, generateConfigurationLineItem } from '../modules/configuration';
7
+ import { FlowConfigurationService } from '../modules/flow-configuration';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "./flow-state.service";
10
+ import * as i2 from "./flow-info.service";
11
+ import * as i3 from "../modules/configuration";
12
+ import * as i4 from "../modules/flow-configuration";
13
+ import * as i5 from "@veloceapps/api";
14
+ export class FlowStateConfigurationService {
15
+ constructor(flowStateService, flowInfoService, configurationService, flowConfigurationService, flowStateApiService) {
16
+ this.flowStateService = flowStateService;
17
+ this.flowInfoService = flowInfoService;
18
+ this.configurationService = configurationService;
19
+ this.flowConfigurationService = flowConfigurationService;
20
+ this.flowStateApiService = flowStateApiService;
21
+ this.configurationStateId$ = new BehaviorSubject(null);
22
+ }
23
+ get configurationStateId() {
24
+ return this.configurationStateId$.value;
25
+ }
26
+ addToCart$(props) {
27
+ const stateful = this.flowInfoService.flow?.properties.stateful;
28
+ if (stateful) {
29
+ const stateId = this.flowStateService.stateId;
30
+ if (!stateId) {
31
+ return of();
32
+ }
33
+ const lineItem = generateConfigurationLineItem(props, props.qty);
34
+ return this.flowStateApiService.newConfiguration(stateId, { lineItem }).pipe(tap(r => this.configurationStateId$.next(r.stateId)), switchMap(() => {
35
+ if (!this.configurationStateId) {
36
+ return of();
37
+ }
38
+ return this.flowStateApiService.saveConfiguration(stateId, this.configurationStateId).pipe(switchMap(() => this.flowStateService.executeRequest$({}, true)), tap(() => this.configurationStateId$.next(null)), map(noop));
39
+ }));
40
+ }
41
+ else {
42
+ return this.flowConfigurationService.addToCart$(props).pipe(map(noop));
43
+ }
44
+ }
45
+ }
46
+ FlowStateConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService, deps: [{ token: i1.FlowStateService }, { token: i2.FlowInfoService }, { token: i3.ConfigurationService }, { token: i4.FlowConfigurationService }, { token: i5.FlowStateApiService }], target: i0.ɵɵFactoryTarget.Injectable });
47
+ FlowStateConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService, providedIn: 'root' });
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService, decorators: [{
49
+ type: Injectable,
50
+ args: [{ providedIn: 'root' }]
51
+ }], ctorParameters: function () { return [{ type: i1.FlowStateService }, { type: i2.FlowInfoService }, { type: i3.ConfigurationService }, { type: i4.FlowConfigurationService }, { type: i5.FlowStateApiService }]; } });
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1zdGF0ZS1jb25maWd1cmF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9jb3JlL3NlcnZpY2VzL2Zsb3ctc3RhdGUtY29uZmlndXJhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsNkJBQTZCLEVBQXlCLE1BQU0sMEJBQTBCLENBQUM7QUFDdEgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7QUFHekUsTUFBTSxPQUFPLDZCQUE2QjtJQUd4QyxZQUNVLGdCQUFrQyxFQUNsQyxlQUFnQyxFQUNoQyxvQkFBMEMsRUFDMUMsd0JBQWtELEVBQ2xELG1CQUF3QztRQUp4QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQVAxQywwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFRdEUsQ0FBQztJQUVKLElBQVcsb0JBQW9CO1FBQzdCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQztJQUMxQyxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQTRCO1FBQzVDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDaEUsSUFBSSxRQUFRLEVBQUU7WUFDWixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1lBQzlDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ1osT0FBTyxFQUFFLEVBQUUsQ0FBQzthQUNiO1lBQ0QsTUFBTSxRQUFRLEdBQUcsNkJBQTZCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRSxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDMUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDcEQsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO29CQUM5QixPQUFPLEVBQUUsRUFBRSxDQUFDO2lCQUNiO2dCQUNELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQ3hGLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUNoRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNoRCxHQUFHLENBQUMsSUFBSSxDQUFDLENBQ1YsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7U0FDSDthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN4RTtJQUNILENBQUM7OzBIQXZDVSw2QkFBNkI7OEhBQTdCLDZCQUE2QixjQURoQixNQUFNOzJGQUNuQiw2QkFBNkI7a0JBRHpDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmxvd1N0YXRlQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1hcCwgbm9vcCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGbG93U3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9mbG93LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmxvd0luZm9TZXJ2aWNlIH0gZnJvbSAnLi9mbG93LWluZm8uc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uU2VydmljZSwgZ2VuZXJhdGVDb25maWd1cmF0aW9uTGluZUl0ZW0sIE5ld0NvbmZpZ3VyYXRpb25Qcm9wcyB9IGZyb20gJy4uL21vZHVsZXMvY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBGbG93Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9tb2R1bGVzL2Zsb3ctY29uZmlndXJhdGlvbic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRmxvd1N0YXRlQ29uZmlndXJhdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIGNvbmZpZ3VyYXRpb25TdGF0ZUlkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmbG93U3RhdGVTZXJ2aWNlOiBGbG93U3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd0luZm9TZXJ2aWNlOiBGbG93SW5mb1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93Q29uZmlndXJhdGlvblNlcnZpY2U6IEZsb3dDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dTdGF0ZUFwaVNlcnZpY2U6IEZsb3dTdGF0ZUFwaVNlcnZpY2UsXG4gICkge31cblxuICBwdWJsaWMgZ2V0IGNvbmZpZ3VyYXRpb25TdGF0ZUlkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25TdGF0ZUlkJC52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUb0NhcnQkKHByb3BzOiBOZXdDb25maWd1cmF0aW9uUHJvcHMpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBzdGF0ZWZ1bCA9IHRoaXMuZmxvd0luZm9TZXJ2aWNlLmZsb3c/LnByb3BlcnRpZXMuc3RhdGVmdWw7XG4gICAgaWYgKHN0YXRlZnVsKSB7XG4gICAgICBjb25zdCBzdGF0ZUlkID0gdGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQ7XG4gICAgICBpZiAoIXN0YXRlSWQpIHtcbiAgICAgICAgcmV0dXJuIG9mKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsaW5lSXRlbSA9IGdlbmVyYXRlQ29uZmlndXJhdGlvbkxpbmVJdGVtKHByb3BzLCBwcm9wcy5xdHkpO1xuICAgICAgcmV0dXJuIHRoaXMuZmxvd1N0YXRlQXBpU2VydmljZS5uZXdDb25maWd1cmF0aW9uKHN0YXRlSWQsIHsgbGluZUl0ZW0gfSkucGlwZShcbiAgICAgICAgdGFwKHIgPT4gdGhpcy5jb25maWd1cmF0aW9uU3RhdGVJZCQubmV4dChyLnN0YXRlSWQpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvblN0YXRlSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLnNhdmVDb25maWd1cmF0aW9uKHN0YXRlSWQsIHRoaXMuY29uZmlndXJhdGlvblN0YXRlSWQpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5mbG93U3RhdGVTZXJ2aWNlLmV4ZWN1dGVSZXF1ZXN0JCh7fSwgdHJ1ZSkpLFxuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuY29uZmlndXJhdGlvblN0YXRlSWQkLm5leHQobnVsbCkpLFxuICAgICAgICAgICAgbWFwKG5vb3ApLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmFkZFRvQ2FydCQocHJvcHMpLnBpcGUobWFwKG5vb3ApKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,441 @@
1
+ import { Inject, Injectable, Optional } from '@angular/core';
2
+ import { ConfigurationProcessorsApiService, FlowStateApiService, QuoteApiService } from '@veloceapps/api';
3
+ import { ToastService, ToastType } from '@veloceapps/components';
4
+ import { ConfigurationContextMode, ConfigurationProcessorTypes, EntityUtil, isDefined, UITemplateType, UUID, } from '@veloceapps/core';
5
+ import { assign, cloneDeep, flatten } from 'lodash';
6
+ import { BehaviorSubject, combineLatest, filter, finalize, forkJoin, map, noop, of, shareReplay, Subject, switchMap, takeUntil, tap, } from 'rxjs';
7
+ import { FlowConfigurationService } from '../modules';
8
+ import { FLOW_CUSTOMIZATION } from '../types/flow-customization.types';
9
+ import { ContextService } from './context.service';
10
+ import { FlowInfoService } from './flow-info.service';
11
+ import { QuoteDraftService } from './quote-draft.service';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "./context.service";
14
+ import * as i2 from "./quote-draft.service";
15
+ import * as i3 from "./flow-info.service";
16
+ import * as i4 from "../modules";
17
+ import * as i5 from "@veloceapps/api";
18
+ import * as i6 from "@veloceapps/components";
19
+ export class FlowStateService {
20
+ constructor(contextService, quoteDraftService, flowInfoService, flowConfiguration, processorsApiService, flowStateApiService, quoteApiService, toastService, customizationService) {
21
+ this.contextService = contextService;
22
+ this.quoteDraftService = quoteDraftService;
23
+ this.flowInfoService = flowInfoService;
24
+ this.flowConfiguration = flowConfiguration;
25
+ this.processorsApiService = processorsApiService;
26
+ this.flowStateApiService = flowStateApiService;
27
+ this.quoteApiService = quoteApiService;
28
+ this.toastService = toastService;
29
+ this.customizationService = customizationService;
30
+ this.NOT_INITIALIZED = Symbol();
31
+ this._hasStatefulUnsavedChanges = false;
32
+ this.stateId$ = new BehaviorSubject(null);
33
+ this.processors = {};
34
+ this.subscriptions = {};
35
+ this.cleanup$ = new Subject();
36
+ /*
37
+ In stateless mode watch QuoteDraft changes and call executeRequest so that
38
+ all subscriptions get their updates according to updated QuoteDraft
39
+ */
40
+ this.isInitialized$()
41
+ .pipe(filter(Boolean), filter(() => !this.getFlowSafe().properties.stateful), switchMap(() => this.flowConfiguration.updated$), switchMap(() => this.executeRequest$({}, true)))
42
+ .subscribe();
43
+ this.charges$ = this.flowInfoService.flow$.pipe(filter(isDefined), switchMap(flow => {
44
+ if (!flow.properties.stateful) {
45
+ return this.quoteDraftService.quoteDraft$.pipe(map(quoteDraft => quoteDraft.charges));
46
+ }
47
+ else {
48
+ return this.subscribe$(UITemplateType.FLOW_ENGINE, 'CHARGES', null, {
49
+ cold: true,
50
+ }).pipe(map(response => (response.success ? response.result : {})));
51
+ }
52
+ }), filter(isDefined), shareReplay());
53
+ this.charges$.subscribe();
54
+ this.pricePlans$ = this.flowInfoService.flow$.pipe(filter(isDefined), switchMap(flow => {
55
+ if (!flow.properties.stateful) {
56
+ return this.quoteDraftService.quoteDraft$.pipe(map(quoteDraft => quoteDraft.pricePlans));
57
+ }
58
+ else {
59
+ return this.subscribe$(UITemplateType.FLOW_ENGINE, 'PRICE_PLANS', null, {
60
+ cold: true,
61
+ }).pipe(map(response => (response.success ? response.result : {})));
62
+ }
63
+ }), filter(isDefined), shareReplay());
64
+ this.pricePlans$.subscribe();
65
+ this.activeMetrics$ = this.flowInfoService.flow$.pipe(filter(isDefined), switchMap(flow => {
66
+ if (!flow.properties.stateful) {
67
+ return this.quoteDraftService.quoteDraft$.pipe(map(quoteDraft => quoteDraft.activeMetrics));
68
+ }
69
+ else {
70
+ return this.subscribe$(UITemplateType.FLOW_ENGINE, 'ACTIVE_METRICS', null, {
71
+ cold: true,
72
+ }).pipe(map(response => (response.success ? response.result : [])));
73
+ }
74
+ }), filter(isDefined), shareReplay());
75
+ this.activeMetrics$.subscribe();
76
+ }
77
+ init$() {
78
+ return this.initProcessors$().pipe(switchMap(() => {
79
+ if (this.getFlowSafe().properties.stateful) {
80
+ return this.initStateful$();
81
+ }
82
+ else {
83
+ return this.initStateless$();
84
+ }
85
+ }));
86
+ }
87
+ cleanup() {
88
+ Object.values(this.subscriptions).forEach(({ data$ }) => data$.complete());
89
+ this.subscriptions = {};
90
+ if (this.stateId$.value) {
91
+ this.flowStateApiService.cancel(this.stateId$.value).subscribe();
92
+ this.stateId$.next(null);
93
+ }
94
+ this.processors = {};
95
+ this.cleanup$.next();
96
+ }
97
+ get hasUnsavedChanges() {
98
+ return this.getFlowSafe().properties.stateful
99
+ ? this._hasStatefulUnsavedChanges
100
+ : this.quoteDraftService.hasUnsavedChanges;
101
+ }
102
+ get stateId() {
103
+ return this.stateId$.value;
104
+ }
105
+ isInitialized$() {
106
+ return combineLatest([this.stateId$, this.quoteDraftService.isInitialized$]).pipe(map(values => values.some(Boolean)));
107
+ }
108
+ isInitialized() {
109
+ return Boolean(this.stateId$.value) || this.quoteDraftService.isInitialized;
110
+ }
111
+ execute$(scope, exec) {
112
+ const request = this.execToRequest(scope, exec);
113
+ return this.executeRequest$(request).pipe(map(result => {
114
+ // Keep only requested results
115
+ const actualSelectors = Object.entries(result.selectors).reduce((trunk, [requestId, result]) => {
116
+ if (exec.selectors?.[requestId]) {
117
+ trunk[requestId] = result;
118
+ }
119
+ return trunk;
120
+ }, {});
121
+ return actualSelectors;
122
+ }));
123
+ }
124
+ dispatch$(scope, action, inputData) {
125
+ const exec = {
126
+ actions: [{ name: action, inputData }],
127
+ };
128
+ const request = this.execToRequest(scope, exec);
129
+ return this.executeRequest$(request).pipe(map(noop));
130
+ }
131
+ select$(scope, selectorName, inputData) {
132
+ const requestId = this.generateRequestId(scope, selectorName, inputData);
133
+ const request = this.execToRequest(scope, {
134
+ selectors: {
135
+ [requestId]: {
136
+ name: selectorName,
137
+ inputData,
138
+ },
139
+ },
140
+ });
141
+ return this.executeRequest$(request).pipe(map(response => response.selectors[requestId]));
142
+ }
143
+ subscribe$(scope, selectorName, inputData, options) {
144
+ const requestId = this.generateRequestId(scope, selectorName, inputData);
145
+ if (!this.subscriptions[requestId]) {
146
+ const request = this.execToRequest(scope, {
147
+ selectors: {
148
+ [requestId]: {
149
+ name: selectorName,
150
+ inputData,
151
+ },
152
+ },
153
+ });
154
+ this.subscriptions[requestId] = {
155
+ request,
156
+ data$: new BehaviorSubject(this.NOT_INITIALIZED),
157
+ };
158
+ if (!options?.cold) {
159
+ this.executeRequest$(request).subscribe();
160
+ }
161
+ }
162
+ return this.subscriptions[requestId].data$.pipe(filter(data => data != this.NOT_INITIALIZED), map(data => data), finalize(() => {
163
+ if (!this.subscriptions[requestId].data$.observed) {
164
+ delete this.subscriptions[requestId];
165
+ }
166
+ }));
167
+ }
168
+ save$() {
169
+ if (this.getFlowSafe().properties.stateful) {
170
+ if (this.stateId$.value) {
171
+ return this.flowStateApiService.save(this.stateId$.value);
172
+ }
173
+ }
174
+ else {
175
+ const quoteDraft = this.quoteDraftService.quoteDraftForActivePriceList;
176
+ if (quoteDraft) {
177
+ return this.quoteApiService.upsertQuote(quoteDraft);
178
+ }
179
+ }
180
+ return of({ quoteId: '' });
181
+ }
182
+ submit$() {
183
+ if (this.getFlowSafe().properties.stateful) {
184
+ if (this.stateId$.value) {
185
+ return this.flowStateApiService.submit(this.stateId$.value);
186
+ }
187
+ }
188
+ else {
189
+ const quoteDraft = this.quoteDraftService.quoteDraftForActivePriceList;
190
+ if (quoteDraft) {
191
+ return this.quoteApiService.submitQuote(quoteDraft);
192
+ }
193
+ }
194
+ return of({ quoteId: '' });
195
+ }
196
+ getOwnerIdByScope(scope) {
197
+ const ownerId = this.flowInfoService.templates[scope]?.id;
198
+ if (!ownerId) {
199
+ throw `OwnerId is not found for scope ${scope}`;
200
+ }
201
+ return ownerId;
202
+ }
203
+ getScopeByOwnerId(id) {
204
+ for (const template of Object.values(this.flowInfoService.templates)) {
205
+ if (template.id === id) {
206
+ return template.type;
207
+ }
208
+ }
209
+ return;
210
+ }
211
+ execToRequest(scope, exec) {
212
+ const ownerId = this.getOwnerIdByScope(scope);
213
+ return {
214
+ actions: exec.actions?.map(action => ({ apiName: action.name, ownerId, inputData: action.inputData ?? {} })),
215
+ selectors: exec.selectors &&
216
+ Object.entries(exec.selectors).reduce((trunk, [key, selector]) => ({
217
+ ...trunk,
218
+ [key]: { apiName: selector.name, ownerId, inputData: selector.inputData ?? {} },
219
+ }), {}),
220
+ };
221
+ }
222
+ executeRequest$(request, forceSubscriptions = false) {
223
+ const fullRequest = cloneDeep(request);
224
+ if (fullRequest.actions?.length || forceSubscriptions) {
225
+ for (const subscription of Object.values(this.subscriptions)) {
226
+ fullRequest.selectors = assign(fullRequest.selectors, subscription.request.selectors);
227
+ }
228
+ }
229
+ const execution$ = this.getFlowSafe().properties.stateful
230
+ ? this.executeStateful$(fullRequest)
231
+ : this.executeStateless$(fullRequest);
232
+ return execution$.pipe(tap(result => this.handleSelectorsResponse(result.selectors)));
233
+ }
234
+ handleSelectorsResponse(selectors) {
235
+ Object.entries(selectors).forEach(([requestId, selectorResult]) => {
236
+ if (!selectorResult.success) {
237
+ this.toastService.add({ severity: ToastType.error, summary: selectorResult.errorMessage });
238
+ }
239
+ const subscription$ = this.subscriptions[requestId]?.data$;
240
+ if (subscription$) {
241
+ subscription$.next(selectorResult);
242
+ }
243
+ });
244
+ }
245
+ initStateful$() {
246
+ // Subscriptions
247
+ this.subscribe$(UITemplateType.FLOW_ENGINE, 'CONTEXT', null, { cold: true })
248
+ .pipe(tap(response => {
249
+ if (response.success) {
250
+ this.contextService.update(response.result);
251
+ }
252
+ }), takeUntil(this.cleanup$))
253
+ .subscribe();
254
+ const processorsList = flatten(Object.values(this.processors).map(ownerMap => Object.values(ownerMap ?? {})));
255
+ const processors = processorsList.length ? processorsList : undefined;
256
+ const selectors = Object.values(this.subscriptions)
257
+ .map(({ request }) => request.selectors)
258
+ .filter(isDefined)
259
+ .reduce((trunk, selectors) => ({ ...trunk, ...selectors }), {});
260
+ const request = this.getDefaultExecutionRequestDTO();
261
+ return this.flowStateApiService
262
+ .init({
263
+ quoteId: this.contextService.resolve().headerId,
264
+ params: this.flowInfoService.params ?? {},
265
+ actionsOverride: processors?.filter(processor => processor.type === ConfigurationProcessorTypes.ACTION),
266
+ selectorsOverride: processors?.filter(processor => processor.type === ConfigurationProcessorTypes.SELECTOR),
267
+ selectors: { ...selectors, ...request.selectors },
268
+ actions: request.actions,
269
+ })
270
+ .pipe(map(({ stateId, selectors }) => {
271
+ this.handleSelectorsResponse(selectors);
272
+ this.stateId$.next(stateId);
273
+ }));
274
+ }
275
+ executeStateful$(request) {
276
+ if (!this.stateId$.value) {
277
+ throw 'Stateful session is not initialized';
278
+ }
279
+ return this.flowStateApiService.execute(this.stateId$.value, request).pipe(tap(() => {
280
+ if (request.actions?.length) {
281
+ this._hasStatefulUnsavedChanges = true;
282
+ }
283
+ }), tap(response => this.stateId$.next(response.stateId)));
284
+ }
285
+ initStateless$() {
286
+ const { headerId } = this.contextService.resolve();
287
+ const stateInit$ = this.quoteDraftService.init(headerId, this.flowInfoService.params ?? {}).pipe(switchMap(() => this.executeRequest$(this.getDefaultExecutionRequestDTO())), switchMap(() => this.calculate$()));
288
+ return stateInit$.pipe(tap(() => this.quoteDraftService.finalizeInit()), map(noop));
289
+ }
290
+ calculate$() {
291
+ const flowState = this.quoteDraftService.quoteDraft;
292
+ if (!flowState) {
293
+ return of(undefined);
294
+ }
295
+ /*
296
+ Don't execute procedures when:
297
+ * Initializing a standalone product configuration UI, as procedure is execute in /price call
298
+ * Initializing an empty account (account with no assets)
299
+ */
300
+ const isEmptyAccountMode = this.contextService.mode === ConfigurationContextMode.ACCOUNT && !this.quoteDraftService.hasProducts;
301
+ if (this.quoteDraftService.isStandalone || isEmptyAccountMode) {
302
+ return of(undefined);
303
+ }
304
+ return this.flowConfiguration.calculate$(flowState);
305
+ }
306
+ executeStateless$(request) {
307
+ return of(undefined).pipe(tap(() => this.executeStatelessActions(request)), switchMap(() => {
308
+ /*
309
+ Skip price calculation in case
310
+ 1. No actions in the request
311
+ 2. Initialization process execution (state not initialized yet)
312
+ */
313
+ if (!request.actions?.length || !this.isInitialized()) {
314
+ return of(undefined);
315
+ }
316
+ else {
317
+ return this.calculate$();
318
+ }
319
+ }), map(() => this.executeStatelessSelectors(request)));
320
+ }
321
+ executeStatelessActions(request) {
322
+ if (!this.quoteDraftService.quoteDraft || !request.actions?.length) {
323
+ return;
324
+ }
325
+ let flowState = this.quoteDraftService.quoteDraft;
326
+ request.actions.forEach(action => {
327
+ flowState = this.executeActionScript(flowState, action) ?? flowState;
328
+ });
329
+ this.quoteDraftService.updateQuoteDraft(flowState);
330
+ }
331
+ executeStatelessSelectors(request) {
332
+ if (!this.quoteDraftService.quoteDraft) {
333
+ throw 'QuoteDraft is not initialized';
334
+ }
335
+ const flowState = this.quoteDraftService.quoteDraft;
336
+ return EntityUtil.entries(request.selectors ?? {}).reduce((result, [key, selector]) => {
337
+ try {
338
+ result.selectors[key] = {
339
+ success: true,
340
+ result: this.executeSelectorScript(flowState, selector),
341
+ };
342
+ }
343
+ catch (e) {
344
+ result.selectors[key] = {
345
+ success: false,
346
+ errorMessage: String(e),
347
+ };
348
+ }
349
+ return result;
350
+ }, { stateId: '', selectors: {} });
351
+ }
352
+ getFlowSafe() {
353
+ if (!this.flowInfoService.flow) {
354
+ throw 'Flow is not defined';
355
+ }
356
+ return this.flowInfoService.flow;
357
+ }
358
+ initProcessors$() {
359
+ const hasOverrides = Boolean(this.customizationService?.getTemplateConfigurationProcessors);
360
+ const flow = this.getFlowSafe();
361
+ if (flow.properties.stateful && !hasOverrides) {
362
+ // Skip initialization as backend will take processors from SF
363
+ return of(undefined);
364
+ }
365
+ const owners$ = Object.values(this.flowInfoService.templates)
366
+ .map(template => {
367
+ if (!template) {
368
+ return;
369
+ }
370
+ const localProcessors$ = this.customizationService?.getTemplateConfigurationProcessors?.(template.name) ?? of(null);
371
+ return localProcessors$.pipe(switchMap(processors => processors ? of(processors) : this.processorsApiService.fetchConfigurationProcessors$(template.id)), tap(processors => {
372
+ const processorsMap = processors.reduce((acc, p) => {
373
+ acc[p.apiName] = p;
374
+ return acc;
375
+ }, {});
376
+ this.processors[template.id] = processorsMap;
377
+ }));
378
+ })
379
+ .filter(isDefined);
380
+ if (!owners$.length) {
381
+ return of(undefined);
382
+ }
383
+ return forkJoin(owners$).pipe(map(noop));
384
+ }
385
+ executeActionScript(request, executable) {
386
+ const script = this.processors[executable.ownerId]?.[executable.apiName]?.script;
387
+ if (!script) {
388
+ const scope = this.getScopeByOwnerId(executable.ownerId);
389
+ const scopeText = scope ? ` in ${scope}` : '';
390
+ throw `ConfigurationProcessor ${executable.apiName}${scopeText} not found`;
391
+ }
392
+ return this.executeProcessorScript(request, script, executable.inputData);
393
+ }
394
+ executeSelectorScript(request, executable) {
395
+ const script = this.processors[executable.ownerId]?.[executable.apiName]?.script;
396
+ if (!script) {
397
+ const scope = this.getScopeByOwnerId(executable.ownerId);
398
+ const scopeText = scope ? ` in ${scope}` : '';
399
+ throw `ConfigurationProcessor ${executable.apiName}${scopeText} not found`;
400
+ }
401
+ return this.executeProcessorScript(request, script, executable.inputData);
402
+ }
403
+ executeProcessorScript(request, script, inputData) {
404
+ return new Function(`${script}\nreturn transform;`)()({
405
+ request,
406
+ inputData: inputData,
407
+ });
408
+ }
409
+ generateRequestId(scope, selectorName, inputData) {
410
+ const inputDataHash = UUID.hex(JSON.stringify(inputData) || '').slice(0, 8);
411
+ return `${scope}/${selectorName}/${inputDataHash}`;
412
+ }
413
+ getDefaultExecutionRequestDTO() {
414
+ const request = {
415
+ actions: [],
416
+ selectors: {},
417
+ };
418
+ if (this.getFlowSafe().properties.standalone) {
419
+ return request;
420
+ }
421
+ const ownerId = this.getOwnerIdByScope(UITemplateType.FLOW_ENGINE);
422
+ request.actions?.push({
423
+ apiName: 'INITIALIZE_STATE',
424
+ ownerId,
425
+ inputData: {},
426
+ });
427
+ return request;
428
+ }
429
+ }
430
+ FlowStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService, deps: [{ token: i1.ContextService }, { token: i2.QuoteDraftService }, { token: i3.FlowInfoService }, { token: i4.FlowConfigurationService }, { token: i5.ConfigurationProcessorsApiService }, { token: i5.FlowStateApiService }, { token: i5.QuoteApiService }, { token: i6.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
431
+ FlowStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService, providedIn: 'root' });
432
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService, decorators: [{
433
+ type: Injectable,
434
+ args: [{ providedIn: 'root' }]
435
+ }], ctorParameters: function () { return [{ type: i1.ContextService }, { type: i2.QuoteDraftService }, { type: i3.FlowInfoService }, { type: i4.FlowConfigurationService }, { type: i5.ConfigurationProcessorsApiService }, { type: i5.FlowStateApiService }, { type: i5.QuoteApiService }, { type: i6.ToastService }, { type: undefined, decorators: [{
436
+ type: Optional
437
+ }, {
438
+ type: Inject,
439
+ args: [FLOW_CUSTOMIZATION]
440
+ }] }]; } });
441
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS9zZXJ2aWNlcy9mbG93LXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFJTCx3QkFBd0IsRUFFeEIsMkJBQTJCLEVBQzNCLFVBQVUsRUFRVixTQUFTLEVBRVQsY0FBYyxFQUNkLElBQUksR0FDTCxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFjLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixNQUFNLEVBQ04sUUFBUSxFQUNSLFFBQVEsRUFDUixHQUFHLEVBQ0gsSUFBSSxFQUVKLEVBQUUsRUFDRixXQUFXLEVBQ1gsT0FBTyxFQUNQLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RELE9BQU8sRUFBcUIsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUxRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7OztBQWMxRCxNQUFNLE9B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Q0FBQyxVQUFVLEVBQUU7WUFDNUMsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5FLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxrQkFBa0I7WUFDM0IsT0FBTztZQUNQLFNBQVMsRUFBRSxFQUFFO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7NkdBMWpCVSxnQkFBZ0IsdVNBc0JMLGtCQUFrQjtpSEF0QjdCLGdCQUFnQixjQURILE1BQU07MkZBQ25CLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQXVCN0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uUHJvY2Vzc29yc0FwaVNlcnZpY2UsIEZsb3dTdGF0ZUFwaVNlcnZpY2UsIFF1b3RlQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UsIFRvYXN0VHlwZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQ2hhcmdlLFxuICBDb21waWxlZFByaWNlUGxhbixcbiAgQ29uZmlndXJhdGlvbkNvbnRleHQsXG4gIENvbmZpZ3VyYXRpb25Db250ZXh0TW9kZSxcbiAgQ29uZmlndXJhdGlvblByb2Nlc3NvcixcbiAgQ29uZmlndXJhdGlvblByb2Nlc3NvclR5cGVzLFxuICBFbnRpdHlVdGlsLFxuICBGbG93LFxuICBGbG93U3RhdGUsXG4gIEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8sXG4gIEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3QsXG4gIEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8sXG4gIEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdCxcbiAgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZSxcbiAgaXNEZWZpbmVkLFxuICBNZXRyaWNSdWxlLFxuICBVSVRlbXBsYXRlVHlwZSxcbiAgVVVJRCxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBhc3NpZ24sIGNsb25lRGVlcCwgRGljdGlvbmFyeSwgZmxhdHRlbiB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZpbHRlcixcbiAgZmluYWxpemUsXG4gIGZvcmtKb2luLFxuICBtYXAsXG4gIG5vb3AsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBzaGFyZVJlcGxheSxcbiAgU3ViamVjdCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGbG93Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9tb2R1bGVzJztcbmltcG9ydCB7IEZsb3dDdXN0b21pemF0aW9uLCBGTE9XX0NVU1RPTUlaQVRJT04gfSBmcm9tICcuLi90eXBlcy9mbG93LWN1c3RvbWl6YXRpb24udHlwZXMnO1xuaW1wb3J0IHsgRmxvd1N0YXRlU3Vic2NyaXB0aW9uT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzL2Zsb3ctc3RhdGUudHlwZXMnO1xuaW1wb3J0IHsgQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL2NvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBGbG93SW5mb1NlcnZpY2UgfSBmcm9tICcuL2Zsb3ctaW5mby5zZXJ2aWNlJztcbmltcG9ydCB7IFF1b3RlRHJhZnRTZXJ2aWNlIH0gZnJvbSAnLi9xdW90ZS1kcmFmdC5zZXJ2aWNlJztcblxudHlwZSBQcm9jZXNzb3JzTWFwID0gUGFydGlhbDx7XG4gIFtvd25lcklkOiBzdHJpbmddOiB7XG4gICAgW2FwaU5hbWU6IHN0cmluZ106IENvbmZpZ3VyYXRpb25Qcm9jZXNzb3I7XG4gIH07XG59PjtcblxudHlwZSBTdWJzY3JpcHRpb24gPSB7XG4gIHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE87XG4gIGRhdGEkOiBCZWhhdmlvclN1YmplY3Q8dW5rbm93bj47XG59O1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEZsb3dTdGF0ZVNlcnZpY2Uge1xuICBwdWJsaWMgY2hhcmdlcyQ6IE9ic2VydmFibGU8RGljdGlvbmFyeTxDaGFyZ2U+PjtcbiAgcHVibGljIHByaWNlUGxhbnMkOiBPYnNlcnZhYmxlPERpY3Rpb25hcnk8Q29tcGlsZWRQcmljZVBsYW4+PjtcbiAgcHVibGljIGFjdGl2ZU1ldHJpY3MkOiBPYnNlcnZhYmxlPE1ldHJpY1J1bGVbXT47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBOT1RfSU5JVElBTElaRUQgPSBTeW1ib2woKTtcblxuICBwcml2YXRlIF9oYXNTdGF0ZWZ1bFVuc2F2ZWRDaGFuZ2VzID0gZmFsc2U7XG4gIHByaXZhdGUgc3RhdGVJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHByb2Nlc3NvcnM6IFByb2Nlc3NvcnNNYXAgPSB7fTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBTdWJzY3JpcHRpb24+ID0ge307XG4gIHByaXZhdGUgY2xlYW51cCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVvdGVEcmFmdFNlcnZpY2U6IFF1b3RlRHJhZnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd0luZm9TZXJ2aWNlOiBGbG93SW5mb1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93Q29uZmlndXJhdGlvbjogRmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJvY2Vzc29yc0FwaVNlcnZpY2U6IENvbmZpZ3VyYXRpb25Qcm9jZXNzb3JzQXBpU2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dTdGF0ZUFwaVNlcnZpY2U6IEZsb3dTdGF0ZUFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBxdW90ZUFwaVNlcnZpY2U6IFF1b3RlQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRkxPV19DVVNUT01JWkFUSU9OKSBwcml2YXRlIGN1c3RvbWl6YXRpb25TZXJ2aWNlPzogRmxvd0N1c3RvbWl6YXRpb24sXG4gICkge1xuICAgIC8qXG4gICAgICBJbiBzdGF0ZWxlc3MgbW9kZSB3YXRjaCBRdW90ZURyYWZ0IGNoYW5nZXMgYW5kIGNhbGwgZXhlY3V0ZVJlcXVlc3Qgc28gdGhhdFxuICAgICAgYWxsIHN1YnNjcmlwdGlvbnMgZ2V0IHRoZWlyIHVwZGF0ZXMgYWNjb3JkaW5nIHRvIHVwZGF0ZWQgUXVvdGVEcmFmdFxuICAgICovXG4gICAgdGhpcy5pc0luaXRpYWxpemVkJCgpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuZ2V0Rmxvd1NhZmUoKS5wcm9wZXJ0aWVzLnN0YXRlZnVsKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZmxvd0NvbmZpZ3VyYXRpb24udXBkYXRlZCQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5leGVjdXRlUmVxdWVzdCQoe30sIHRydWUpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuY2hhcmdlcyQgPSB0aGlzLmZsb3dJbmZvU2VydmljZS5mbG93JC5waXBlKFxuICAgICAgZmlsdGVyKGlzRGVmaW5lZCksXG4gICAgICBzd2l0Y2hNYXAoZmxvdyA9PiB7XG4gICAgICAgIGlmICghZmxvdy5wcm9wZXJ0aWVzLnN0YXRlZnVsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdCQucGlwZShtYXAocXVvdGVEcmFmdCA9PiBxdW90ZURyYWZ0LmNoYXJnZXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdWJzY3JpYmUkPERpY3Rpb25hcnk8Q2hhcmdlPj4oVUlUZW1wbGF0ZVR5cGUuRkxPV19FTkdJTkUsICdDSEFSR0VTJywgbnVsbCwge1xuICAgICAgICAgICAgY29sZDogdHJ1ZSxcbiAgICAgICAgICB9KS5waXBlKG1hcChyZXNwb25zZSA9PiAocmVzcG9uc2Uuc3VjY2VzcyA/IHJlc3BvbnNlLnJlc3VsdCA6IHt9KSkpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGZpbHRlcihpc0RlZmluZWQpLFxuICAgICAgc2hhcmVSZXBsYXkoKSxcbiAgICApO1xuICAgIHRoaXMuY2hhcmdlcyQuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnByaWNlUGxhbnMkID0gdGhpcy5mbG93SW5mb1NlcnZpY2UuZmxvdyQucGlwZShcbiAgICAgIGZpbHRlcihpc0RlZmluZWQpLFxuICAgICAgc3dpdGNoTWFwKGZsb3cgPT4ge1xuICAgICAgICBpZiAoIWZsb3cucHJvcGVydGllcy5zdGF0ZWZ1bCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQkLnBpcGUobWFwKHF1b3RlRHJhZnQgPT4gcXVvdGVEcmFmdC5wcmljZVBsYW5zKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3Vic2NyaWJlJDxEaWN0aW9uYXJ5PENvbXBpbGVkUHJpY2VQbGFuPj4oVUlUZW1wbGF0ZVR5cGUuRkxPV19FTkdJTkUsICdQUklDRV9QTEFOUycsIG51bGwsIHtcbiAgICAgICAgICAgIGNvbGQ6IHRydWUsXG4gICAgICAgICAgfSkucGlwZShtYXAocmVzcG9uc2UgPT4gKHJlc3BvbnNlLnN1Y2Nlc3MgPyByZXNwb25zZS5yZXN1bHQgOiB7fSkpKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBmaWx0ZXIoaXNEZWZpbmVkKSxcbiAgICAgIHNoYXJlUmVwbGF5KCksXG4gICAgKTtcbiAgICB0aGlzLnByaWNlUGxhbnMkLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5hY3RpdmVNZXRyaWNzJCA9IHRoaXMuZmxvd0luZm9TZXJ2aWNlLmZsb3ckLnBpcGUoXG4gICAgICBmaWx0ZXIoaXNEZWZpbmVkKSxcbiAgICAgIHN3aXRjaE1hcChmbG93ID0+IHtcbiAgICAgICAgaWYgKCFmbG93LnByb3BlcnRpZXMuc3RhdGVmdWwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0JC5waXBlKG1hcChxdW90ZURyYWZ0ID0+IHF1b3RlRHJhZnQuYWN0aXZlTWV0cmljcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnN1YnNjcmliZSQ8TWV0cmljUnVsZVtdPihVSVRlbXBsYXRlVHlwZS5GTE9XX0VOR0lORSwgJ0FDVElWRV9NRVRSSUNTJywgbnVsbCwge1xuICAgICAgICAgICAgY29sZDogdHJ1ZSxcbiAgICAgICAgICB9KS5waXBlKG1hcChyZXNwb25zZSA9PiAocmVzcG9uc2Uuc3VjY2VzcyA/IHJlc3BvbnNlLnJlc3VsdCA6IFtdKSkpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGZpbHRlcihpc0RlZmluZWQpLFxuICAgICAgc2hhcmVSZXBsYXkoKSxcbiAgICApO1xuICAgIHRoaXMuYWN0aXZlTWV0cmljcyQuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgaW5pdCQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdFByb2Nlc3NvcnMkKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmdldEZsb3dTYWZlKCkucHJvcGVydGllcy5zdGF0ZWZ1bCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmluaXRTdGF0ZWZ1bCQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0U3RhdGVsZXNzJCgpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNsZWFudXAoKTogdm9pZCB7XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnN1YnNjcmlwdGlvbnMpLmZvckVhY2goKHsgZGF0YSQgfSkgPT4gZGF0YSQuY29tcGxldGUoKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0ge307XG5cbiAgICBpZiAodGhpcy5zdGF0ZUlkJC52YWx1ZSkge1xuICAgICAgdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLmNhbmNlbCh0aGlzLnN0YXRlSWQkLnZhbHVlKS5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuc3RhdGVJZCQubmV4dChudWxsKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NvcnMgPSB7fTtcbiAgICB0aGlzLmNsZWFudXAkLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzVW5zYXZlZENoYW5nZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rmxvd1NhZmUoKS5wcm9wZXJ0aWVzLnN0YXRlZnVsXG4gICAgICA/IHRoaXMuX2hhc1N0YXRlZnVsVW5zYXZlZENoYW5nZXNcbiAgICAgIDogdGhpcy5xdW90ZURyYWZ0U2VydmljZS5oYXNVbnNhdmVkQ2hhbmdlcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhdGVJZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZUlkJC52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBpc0luaXRpYWxpemVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5zdGF0ZUlkJCwgdGhpcy5xdW90ZURyYWZ0U2VydmljZS5pc0luaXRpYWxpemVkJF0pLnBpcGUoXG4gICAgICBtYXAodmFsdWVzID0+IHZhbHVlcy5zb21lKEJvb2xlYW4pKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5zdGF0ZUlkJC52YWx1ZSkgfHwgdGhpcy5xdW90ZURyYWZ0U2VydmljZS5pc0luaXRpYWxpemVkO1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGUkKFxuICAgIHNjb3BlOiBVSVRlbXBsYXRlVHlwZSxcbiAgICBleGVjOiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0LFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdFsnc2VsZWN0b3JzJ10+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5leGVjVG9SZXF1ZXN0KHNjb3BlLCBleGVjKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVSZXF1ZXN0JChyZXF1ZXN0KS5waXBlKFxuICAgICAgbWFwKHJlc3VsdCA9PiB7XG4gICAgICAgIC8vIEtlZXAgb25seSByZXF1ZXN0ZWQgcmVzdWx0c1xuICAgICAgICBjb25zdCBhY3R1YWxTZWxlY3RvcnMgPSBPYmplY3QuZW50cmllcyhyZXN1bHQuc2VsZWN0b3JzKS5yZWR1Y2UoXG4gICAgICAgICAgKHRydW5rOiBSZWNvcmQ8c3RyaW5nLCBGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPiwgW3JlcXVlc3RJZCwgcmVzdWx0XSkgPT4ge1xuICAgICAgICAgICAgaWYgKGV4ZWMuc2VsZWN0b3JzPy5bcmVxdWVzdElkXSkge1xuICAgICAgICAgICAgICB0cnVua1tyZXF1ZXN0SWRdID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydW5rO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30sXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGFjdHVhbFNlbGVjdG9ycztcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZGlzcGF0Y2gkKHNjb3BlOiBVSVRlbXBsYXRlVHlwZSwgYWN0aW9uOiBzdHJpbmcsIGlucHV0RGF0YT86IHVua25vd24pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBleGVjOiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0ID0ge1xuICAgICAgYWN0aW9uczogW3sgbmFtZTogYWN0aW9uLCBpbnB1dERhdGEgfV0sXG4gICAgfTtcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5leGVjVG9SZXF1ZXN0KHNjb3BlLCBleGVjKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVSZXF1ZXN0JChyZXF1ZXN0KS5waXBlKG1hcChub29wKSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0JDxSZXNwb25zZSA9IHVua25vd24+KFxuICAgIHNjb3BlOiBVSVRlbXBsYXRlVHlwZSxcbiAgICBzZWxlY3Rvck5hbWU6IHN0cmluZyxcbiAgICBpbnB1dERhdGE/OiB1bmtub3duLFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+PiB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5nZW5lcmF0ZVJlcXVlc3RJZChzY29wZSwgc2VsZWN0b3JOYW1lLCBpbnB1dERhdGEpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmV4ZWNUb1JlcXVlc3Qoc2NvcGUsIHtcbiAgICAgIHNlbGVjdG9yczoge1xuICAgICAgICBbcmVxdWVzdElkXToge1xuICAgICAgICAgIG5hbWU6IHNlbGVjdG9yTmFtZSxcbiAgICAgICAgICBpbnB1dERhdGEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVJlcXVlc3QkKHJlcXVlc3QpLnBpcGUoXG4gICAgICBtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2Uuc2VsZWN0b3JzW3JlcXVlc3RJZF0gYXMgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTxSZXNwb25zZT4pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlJDxSZXNwb25zZSA9IHVua25vd24+KFxuICAgIHNjb3BlOiBVSVRlbXBsYXRlVHlwZSxcbiAgICBzZWxlY3Rvck5hbWU6IHN0cmluZyxcbiAgICBpbnB1dERhdGE/OiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBGbG93U3RhdGVTdWJzY3JpcHRpb25PcHRpb25zLFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+PiB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5nZW5lcmF0ZVJlcXVlc3RJZChzY29wZSwgc2VsZWN0b3JOYW1lLCBpbnB1dERhdGEpO1xuXG4gICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbnNbcmVxdWVzdElkXSkge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZXhlY1RvUmVxdWVzdChzY29wZSwge1xuICAgICAgICBzZWxlY3RvcnM6IHtcbiAgICAgICAgICBbcmVxdWVzdElkXToge1xuICAgICAgICAgICAgbmFtZTogc2VsZWN0b3JOYW1lLFxuICAgICAgICAgICAgaW5wdXREYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0gPSB7XG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGRhdGEkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PHVua25vd24+KHRoaXMuTk9UX0lOSVRJQUxJWkVEKSxcbiAgICAgIH07XG5cbiAgICAgIGlmICghb3B0aW9ucz8uY29sZCkge1xuICAgICAgICB0aGlzLmV4ZWN1dGVSZXF1ZXN0JChyZXF1ZXN0KS5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0uZGF0YSQucGlwZShcbiAgICAgIGZpbHRlcihkYXRhID0+IGRhdGEgIT0gdGhpcy5OT1RfSU5JVElBTElaRUQpLFxuICAgICAgbWFwKGRhdGEgPT4gZGF0YSBhcyBGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPFJlc3BvbnNlPiksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0uZGF0YSQub2JzZXJ2ZWQpIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF07XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZSQoKTogT2JzZXJ2YWJsZTx7IHF1b3RlSWQ6IHN0cmluZyB9PiB7XG4gICAgaWYgKHRoaXMuZ2V0Rmxvd1NhZmUoKS5wcm9wZXJ0aWVzLnN0YXRlZnVsKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZUlkJC52YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLnNhdmUodGhpcy5zdGF0ZUlkJC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHF1b3RlRHJhZnQgPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnRGb3JBY3RpdmVQcmljZUxpc3Q7XG4gICAgICBpZiAocXVvdGVEcmFmdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdW90ZUFwaVNlcnZpY2UudXBzZXJ0UXVvdGUocXVvdGVEcmFmdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHsgcXVvdGVJZDogJycgfSk7XG4gIH1cblxuICBwdWJsaWMgc3VibWl0JCgpOiBPYnNlcnZhYmxlPHsgcXVvdGVJZDogc3RyaW5nIH0+IHtcbiAgICBpZiAodGhpcy5nZXRGbG93U2FmZSgpLnByb3BlcnRpZXMuc3RhdGVmdWwpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlSWQkLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2Uuc3VibWl0KHRoaXMuc3RhdGVJZCQudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBxdW90ZURyYWZ0ID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0Rm9yQWN0aXZlUHJpY2VMaXN0O1xuICAgICAgaWYgKHF1b3RlRHJhZnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVvdGVBcGlTZXJ2aWNlLnN1Ym1pdFF1b3RlKHF1b3RlRHJhZnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvZih7IHF1b3RlSWQ6ICcnIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPd25lcklkQnlTY29wZShzY29wZTogVUlUZW1wbGF0ZVR5cGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IG93bmVySWQgPSB0aGlzLmZsb3dJbmZvU2VydmljZS50ZW1wbGF0ZXNbc2NvcGVdPy5pZDtcbiAgICBpZiAoIW93bmVySWQpIHtcbiAgICAgIHRocm93IGBPd25lcklkIGlzIG5vdCBmb3VuZCBmb3Igc2NvcGUgJHtzY29wZX1gO1xuICAgIH1cblxuICAgIHJldHVybiBvd25lcklkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTY29wZUJ5T3duZXJJZChpZDogc3RyaW5nKTogVUlUZW1wbGF0ZVR5cGUgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3QgdGVtcGxhdGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmZsb3dJbmZvU2VydmljZS50ZW1wbGF0ZXMpKSB7XG4gICAgICBpZiAodGVtcGxhdGUuaWQgPT09IGlkKSB7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZS50eXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY1RvUmVxdWVzdChzY29wZTogVUlUZW1wbGF0ZVR5cGUsIGV4ZWM6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3QpOiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPIHtcbiAgICBjb25zdCBvd25lcklkID0gdGhpcy5nZXRPd25lcklkQnlTY29wZShzY29wZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aW9uczogZXhlYy5hY3Rpb25zPy5tYXAoYWN0aW9uID0+ICh7IGFwaU5hbWU6IGFjdGlvbi5uYW1lLCBvd25lcklkLCBpbnB1dERhdGE6IGFjdGlvbi5pbnB1dERhdGEgPz8ge30gfSkpLFxuICAgICAgc2VsZWN0b3JzOlxuICAgICAgICBleGVjLnNlbGVjdG9ycyAmJlxuICAgICAgICBPYmplY3QuZW50cmllcyhleGVjLnNlbGVjdG9ycykucmVkdWNlKFxuICAgICAgICAgICh0cnVuazogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlRXhlY3V0YWJsZURUTz4sIFtrZXksIHNlbGVjdG9yXSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnRydW5rLFxuICAgICAgICAgICAgW2tleV06IHsgYXBpTmFtZTogc2VsZWN0b3IubmFtZSwgb3duZXJJZCwgaW5wdXREYXRhOiBzZWxlY3Rvci5pbnB1dERhdGEgPz8ge30gfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fSxcbiAgICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGVSZXF1ZXN0JChcbiAgICByZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPLFxuICAgIGZvcmNlU3Vic2NyaXB0aW9uczogYm9vbGVhbiA9IGZhbHNlLFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IGZ1bGxSZXF1ZXN0ID0gY2xvbmVEZWVwKHJlcXVlc3QpO1xuICAgIGlmIChmdWxsUmVxdWVzdC5hY3Rpb25zPy5sZW5ndGggfHwgZm9yY2VTdWJzY3JpcHRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuc3Vic2NyaXB0aW9ucykpIHtcbiAgICAgICAgZnVsbFJlcXVlc3Quc2VsZWN0b3JzID0gYXNzaWduKGZ1bGxSZXF1ZXN0LnNlbGVjdG9ycywgc3Vic2NyaXB0aW9uLnJlcXVlc3Quc2VsZWN0b3JzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBleGVjdXRpb24kID0gdGhpcy5nZXRGbG93U2FmZSgpLnByb3BlcnRpZXMuc3RhdGVmdWxcbiAgICAgID8gdGhpcy5leGVjdXRlU3RhdGVmdWwkKGZ1bGxSZXF1ZXN0KVxuICAgICAgOiB0aGlzLmV4ZWN1dGVTdGF0ZWxlc3MkKGZ1bGxSZXF1ZXN0KTtcblxuICAgIHJldHVybiBleGVjdXRpb24kLnBpcGUodGFwKHJlc3VsdCA9PiB0aGlzLmhhbmRsZVNlbGVjdG9yc1Jlc3BvbnNlKHJlc3VsdC5zZWxlY3RvcnMpKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdG9yc1Jlc3BvbnNlKHNlbGVjdG9yczogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTx1bmtub3duPj4pOiB2b2lkIHtcbiAgICBPYmplY3QuZW50cmllcyhzZWxlY3RvcnMpLmZvckVhY2goKFtyZXF1ZXN0SWQsIHNlbGVjdG9yUmVzdWx0XSkgPT4ge1xuICAgICAgaWYgKCFzZWxlY3RvclJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiBUb2FzdFR5cGUuZXJyb3IsIHN1bW1hcnk6IHNlbGVjdG9yUmVzdWx0LmVycm9yTWVzc2FnZSB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uJCA9IHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdPy5kYXRhJDtcbiAgICAgIGlmIChzdWJzY3JpcHRpb24kKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiQubmV4dChzZWxlY3RvclJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRTdGF0ZWZ1bCQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgLy8gU3Vic2NyaXB0aW9uc1xuICAgIHRoaXMuc3Vic2NyaWJlJDxDb25maWd1cmF0aW9uQ29udGV4dD4oVUlUZW1wbGF0ZVR5cGUuRkxPV19FTkdJTkUsICdDT05URVhUJywgbnVsbCwgeyBjb2xkOiB0cnVlIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUocmVzcG9uc2UucmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5jbGVhbnVwJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBjb25zdCBwcm9jZXNzb3JzTGlzdCA9IGZsYXR0ZW4oT2JqZWN0LnZhbHVlcyh0aGlzLnByb2Nlc3NvcnMpLm1hcChvd25lck1hcCA9PiBPYmplY3QudmFsdWVzKG93bmVyTWFwID8/IHt9KSkpO1xuICAgIGNvbnN0IHByb2Nlc3NvcnMgPSBwcm9jZXNzb3JzTGlzdC5sZW5ndGggPyBwcm9jZXNzb3JzTGlzdCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzZWxlY3RvcnMgPSBPYmplY3QudmFsdWVzKHRoaXMuc3Vic2NyaXB0aW9ucylcbiAgICAgIC5tYXAoKHsgcmVxdWVzdCB9KSA9PiByZXF1ZXN0LnNlbGVjdG9ycylcbiAgICAgIC5maWx0ZXIoaXNEZWZpbmVkKVxuICAgICAgLnJlZHVjZSgodHJ1bmssIHNlbGVjdG9ycykgPT4gKHsgLi4udHJ1bmssIC4uLnNlbGVjdG9ycyB9KSwge30pO1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmdldERlZmF1bHRFeGVjdXRpb25SZXF1ZXN0RFRPKCk7XG5cbiAgICByZXR1cm4gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlXG4gICAgICAuaW5pdCh7XG4gICAgICAgIHF1b3RlSWQ6IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSgpLmhlYWRlcklkLFxuICAgICAgICBwYXJhbXM6IHRoaXMuZmxvd0luZm9TZXJ2aWNlLnBhcmFtcyA/PyB7fSxcbiAgICAgICAgYWN0aW9uc092ZXJyaWRlOiBwcm9jZXNzb3JzPy5maWx0ZXIocHJvY2Vzc29yID0+IHByb2Nlc3Nvci50eXBlID09PSBDb25maWd1cmF0aW9uUHJvY2Vzc29yVHlwZXMuQUNUSU9OKSxcbiAgICAgICAgc2VsZWN0b3JzT3ZlcnJpZGU6IHByb2Nlc3NvcnM/LmZpbHRlcihwcm9jZXNzb3IgPT4gcHJvY2Vzc29yLnR5cGUgPT09IENvbmZpZ3VyYXRpb25Qcm9jZXNzb3JUeXBlcy5TRUxFQ1RPUiksXG4gICAgICAgIHNlbGVjdG9yczogeyAuLi5zZWxlY3RvcnMsIC4uLnJlcXVlc3Quc2VsZWN0b3JzIH0sXG4gICAgICAgIGFjdGlvbnM6IHJlcXVlc3QuYWN0aW9ucyxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh7IHN0YXRlSWQsIHNlbGVjdG9ycyB9KSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RvcnNSZXNwb25zZShzZWxlY3RvcnMpO1xuICAgICAgICAgIHRoaXMuc3RhdGVJZCQubmV4dChzdGF0ZUlkKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlU3RhdGVmdWwkKHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8pOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIGlmICghdGhpcy5zdGF0ZUlkJC52YWx1ZSkge1xuICAgICAgdGhyb3cgJ1N0YXRlZnVsIHNlc3Npb24gaXMgbm90IGluaXRpYWxpemVkJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLmV4ZWN1dGUodGhpcy5zdGF0ZUlkJC52YWx1ZSwgcmVxdWVzdCkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGlmIChyZXF1ZXN0LmFjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuX2hhc1N0YXRlZnVsVW5zYXZlZENoYW5nZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRhcChyZXNwb25zZSA9PiB0aGlzLnN0YXRlSWQkLm5leHQocmVzcG9uc2Uuc3RhdGVJZCkpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluaXRTdGF0ZWxlc3MkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IHsgaGVhZGVySWQgfSA9IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSgpO1xuXG4gICAgY29uc3Qgc3RhdGVJbml0JCA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UuaW5pdChoZWFkZXJJZCwgdGhpcy5mbG93SW5mb1NlcnZpY2UucGFyYW1zID8/IHt9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZXhlY3V0ZVJlcXVlc3QkKHRoaXMuZ2V0RGVmYXVsdEV4ZWN1dGlvblJlcXVlc3REVE8oKSkpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY2FsY3VsYXRlJCgpKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHN0YXRlSW5pdCQucGlwZShcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmZpbmFsaXplSW5pdCgpKSxcbiAgICAgIG1hcChub29wKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGUkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGZsb3dTdGF0ZSA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdDtcbiAgICBpZiAoIWZsb3dTdGF0ZSkge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgIERvbid0IGV4ZWN1dGUgcHJvY2VkdXJlcyB3aGVuOlxuICAgICAgICAqIEluaXRpYWxpemluZyBhIHN0YW5kYWxvbmUgcHJvZHVjdCBjb25maWd1cmF0aW9uIFVJLCBhcyBwcm9jZWR1cmUgaXMgZXhlY3V0ZSBpbiAvcHJpY2UgY2FsbFxuICAgICAgICAqIEluaXRpYWxpemluZyBhbiBlbXB0eSBhY2NvdW50IChhY2NvdW50IHdpdGggbm8gYXNzZXRzKVxuICAgICovXG4gICAgY29uc3QgaXNFbXB0eUFjY291bnRNb2RlID1cbiAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UubW9kZSA9PT0gQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLkFDQ09VTlQgJiYgIXRoaXMucXVvdGVEcmFmdFNlcnZpY2UuaGFzUHJvZHVjdHM7XG5cbiAgICBpZiAodGhpcy5xdW90ZURyYWZ0U2VydmljZS5pc1N0YW5kYWxvbmUgfHwgaXNFbXB0eUFjY291bnRNb2RlKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mbG93Q29uZmlndXJhdGlvbi5jYWxjdWxhdGUkKGZsb3dTdGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTdGF0ZWxlc3MkKHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8pOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIHJldHVybiBvZih1bmRlZmluZWQpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5leGVjdXRlU3RhdGVsZXNzQWN0aW9ucyhyZXF1ZXN0KSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAvKlxuICAgICAgICAgIFNraXAgcHJpY2UgY2FsY3VsYXRpb24gaW4gY2FzZVxuICAgICAgICAgIDEuIE5vIGFjdGlvbnMgaW4gdGhlIHJlcXVlc3RcbiAgICAgICAgICAyLiBJbml0aWFsaXphdGlvbiBwcm9jZXNzIGV4ZWN1dGlvbiAoc3RhdGUgbm90IGluaXRpYWxpemVkIHlldClcbiAgICAgICAgKi9cbiAgICAgICAgaWYgKCFyZXF1ZXN0LmFjdGlvbnM/Lmxlbmd0aCB8fCAhdGhpcy5pc0luaXRpYWxpemVkKCkpIHtcbiAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGUkKCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbWFwKCgpID0+IHRoaXMuZXhlY3V0ZVN0YXRlbGVzc1NlbGVjdG9ycyhyZXF1ZXN0KSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVN0YXRlbGVzc0FjdGlvbnMocmVxdWVzdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0IHx8ICFyZXF1ZXN0LmFjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBmbG93U3RhdGUgPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQ7XG4gICAgcmVxdWVzdC5hY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgIGZsb3dTdGF0ZSA9IHRoaXMuZXhlY3V0ZUFjdGlvblNjcmlwdChmbG93U3RhdGUsIGFjdGlvbikgPz8gZmxvd1N0YXRlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5xdW90ZURyYWZ0U2VydmljZS51cGRhdGVRdW90ZURyYWZ0KGZsb3dTdGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTdGF0ZWxlc3NTZWxlY3RvcnMocmVxdWVzdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTyk6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdCB7XG4gICAgaWYgKCF0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQpIHtcbiAgICAgIHRocm93ICdRdW90ZURyYWZ0IGlzIG5vdCBpbml0aWFsaXplZCc7XG4gICAgfVxuXG4gICAgY29uc3QgZmxvd1N0YXRlID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0O1xuICAgIHJldHVybiBFbnRpdHlVdGlsLmVudHJpZXMocmVxdWVzdC5zZWxlY3RvcnMgPz8ge30pLnJlZHVjZShcbiAgICAgIChyZXN1bHQ6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdCwgW2tleSwgc2VsZWN0b3JdKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzdWx0LnNlbGVjdG9yc1trZXldID0ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIHJlc3VsdDogdGhpcy5leGVjdXRlU2VsZWN0b3JTY3JpcHQoZmxvd1N0YXRlLCBzZWxlY3RvciksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJlc3VsdC5zZWxlY3RvcnNba2V5XSA9IHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlOiBTdHJpbmcoZSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LFxuICAgICAgeyBzdGF0ZUlkOiAnJywgc2VsZWN0b3JzOiB7fSB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEZsb3dTYWZlKCk6IEZsb3cge1xuICAgIGlmICghdGhpcy5mbG93SW5mb1NlcnZpY2UuZmxvdykge1xuICAgICAgdGhyb3cgJ0Zsb3cgaXMgbm90IGRlZmluZWQnO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZsb3dJbmZvU2VydmljZS5mbG93O1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0UHJvY2Vzc29ycyQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgaGFzT3ZlcnJpZGVzID0gQm9vbGVhbih0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlPy5nZXRUZW1wbGF0ZUNvbmZpZ3VyYXRpb25Qcm9jZXNzb3JzKTtcbiAgICBjb25zdCBmbG93ID0gdGhpcy5nZXRGbG93U2FmZSgpO1xuXG4gICAgaWYgKGZsb3cucHJvcGVydGllcy5zdGF0ZWZ1bCAmJiAhaGFzT3ZlcnJpZGVzKSB7XG4gICAgICAvLyBTa2lwIGluaXRpYWxpemF0aW9uIGFzIGJhY2tlbmQgd2lsbCB0YWtlIHByb2Nlc3NvcnMgZnJvbSBTRlxuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3duZXJzJCA9IE9iamVjdC52YWx1ZXModGhpcy5mbG93SW5mb1NlcnZpY2UudGVtcGxhdGVzKVxuICAgICAgLm1hcCh0ZW1wbGF0ZSA9PiB7XG4gICAgICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NhbFByb2Nlc3NvcnMkID1cbiAgICAgICAgICB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlPy5nZXRUZW1wbGF0ZUNvbmZpZ3VyYXRpb25Qcm9jZXNzb3JzPy4odGVtcGxhdGUubmFtZSkgPz8gb2YobnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsUHJvY2Vzc29ycyQucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAocHJvY2Vzc29ycyA9PlxuICAgICAgICAgICAgcHJvY2Vzc29ycyA/IG9mKHByb2Nlc3NvcnMpIDogdGhpcy5wcm9jZXNzb3JzQXBpU2VydmljZS5mZXRjaENvbmZpZ3VyYXRpb25Qcm9jZXNzb3JzJCh0ZW1wbGF0ZS5pZCksXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0YXAocHJvY2Vzc29ycyA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzb3JzTWFwID0gcHJvY2Vzc29ycy5yZWR1Y2UoKGFjYzogUmVjb3JkPHN0cmluZywgQ29uZmlndXJhdGlvblByb2Nlc3Nvcj4sIHApID0+IHtcbiAgICAgICAgICAgICAgYWNjW3AuYXBpTmFtZV0gPSBwO1xuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NvcnNbdGVtcGxhdGUuaWRdID0gcHJvY2Vzc29yc01hcDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGlzRGVmaW5lZCk7XG5cbiAgICBpZiAoIW93bmVycyQubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ya0pvaW4ob3duZXJzJCkucGlwZShtYXAobm9vcCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlQWN0aW9uU2NyaXB0KHJlcXVlc3Q6IEZsb3dTdGF0ZSwgZXhlY3V0YWJsZTogRmxvd1N0YXRlRXhlY3V0YWJsZURUTyk6IEZsb3dTdGF0ZSB8IG51bGwge1xuICAgIGNvbnN0IHNjcmlwdCA9IHRoaXMucHJvY2Vzc29yc1tleGVjdXRhYmxlLm93bmVySWRdPy5bZXhlY3V0YWJsZS5hcGlOYW1lXT8uc2NyaXB0O1xuXG4gICAgaWYgKCFzY3JpcHQpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5nZXRTY29wZUJ5T3duZXJJZChleGVjdXRhYmxlLm93bmVySWQpO1xuICAgICAgY29uc3Qgc2NvcGVUZXh0ID0gc2NvcGUgPyBgIGluICR7c2NvcGV9YCA6ICcnO1xuICAgICAgdGhyb3cgYENvbmZpZ3VyYXRpb25Qcm9jZXNzb3IgJHtleGVjdXRhYmxlLmFwaU5hbWV9JHtzY29wZVRleHR9IG5vdCBmb3VuZGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVByb2Nlc3NvclNjcmlwdChyZXF1ZXN0LCBzY3JpcHQsIGV4ZWN1dGFibGUuaW5wdXREYXRhKSBhcyBGbG93U3RhdGU7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTZWxlY3RvclNjcmlwdChyZXF1ZXN0OiBGbG93U3RhdGUsIGV4ZWN1dGFibGU6IEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8pOiB1bmtub3duIHtcbiAgICBjb25zdCBzY3JpcHQgPSB0aGlzLnByb2Nlc3NvcnNbZXhlY3V0YWJsZS5vd25lcklkXT8uW2V4ZWN1dGFibGUuYXBpTmFtZV0/LnNjcmlwdDtcblxuICAgIGlmICghc2NyaXB0KSB7XG4gICAgICBjb25zdCBzY29wZSA9IHRoaXMuZ2V0U2NvcGVCeU93bmVySWQoZXhlY3V0YWJsZS5vd25lcklkKTtcbiAgICAgIGNvbnN0IHNjb3BlVGV4dCA9IHNjb3BlID8gYCBpbiAke3Njb3BlfWAgOiAnJztcbiAgICAgIHRocm93IGBDb25maWd1cmF0aW9uUHJvY2Vzc29yICR7ZXhlY3V0YWJsZS5hcGlOYW1lfSR7c2NvcGVUZXh0fSBub3QgZm91bmRgO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVQcm9jZXNzb3JTY3JpcHQocmVxdWVzdCwgc2NyaXB0LCBleGVjdXRhYmxlLmlucHV0RGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVQcm9jZXNzb3JTY3JpcHQocmVxdWVzdDogRmxvd1N0YXRlLCBzY3JpcHQ6IHN0cmluZywgaW5wdXREYXRhOiB1bmtub3duKTogdW5rbm93biB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbihgJHtzY3JpcHR9XFxucmV0dXJuIHRyYW5zZm9ybTtgKSgpKHtcbiAgICAgIHJlcXVlc3QsXG4gICAgICBpbnB1dERhdGE6IGlucHV0RGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVSZXF1ZXN0SWQoc2NvcGU6IFVJVGVtcGxhdGVUeXBlLCBzZWxlY3Rvck5hbWU6IHN0cmluZywgaW5wdXREYXRhPzogdW5rbm93bik6IHN0cmluZyB7XG4gICAgY29uc3QgaW5wdXREYXRhSGFzaCA9IFVVSUQuaGV4KEpTT04uc3RyaW5naWZ5KGlucHV0RGF0YSkgfHwgJycpLnNsaWNlKDAsIDgpO1xuICAgIHJldHVybiBgJHtzY29wZX0vJHtzZWxlY3Rvck5hbWV9LyR7aW5wdXREYXRhSGFzaH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0RXhlY3V0aW9uUmVxdWVzdERUTygpOiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPIHtcbiAgICBjb25zdCByZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPID0ge1xuICAgICAgYWN0aW9uczogW10sXG4gICAgICBzZWxlY3RvcnM6IHt9LFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5nZXRGbG93U2FmZSgpLnByb3BlcnRpZXMuc3RhbmRhbG9uZSkge1xuICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfVxuXG4gICAgY29uc3Qgb3duZXJJZCA9IHRoaXMuZ2V0T3duZXJJZEJ5U2NvcGUoVUlUZW1wbGF0ZVR5cGUuRkxPV19FTkdJTkUpO1xuXG4gICAgcmVxdWVzdC5hY3Rpb25zPy5wdXNoKHtcbiAgICAgIGFwaU5hbWU6ICdJTklUSUFMSVpFX1NUQVRFJyxcbiAgICAgIG93bmVySWQsXG4gICAgICBpbnB1dERhdGE6IHt9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,10 @@
1
1
  export * from './context.service';
2
+ export * from './flow-info.service';
3
+ export * from './flow-state.service';
4
+ export * from './flow-state-configuration.service';
5
+ export * from './integration.state';
2
6
  export * from './metric-calculation/metric-calculation.service';
3
7
  export * from './product-images.service';
4
8
  export * from './quote-draft.service';
5
9
  export * from './runtime-settings.service';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9jb3JlL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29udGV4dC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbWV0cmljLWNhbGN1bGF0aW9uL21ldHJpYy1jYWxjdWxhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvZHVjdC1pbWFnZXMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3F1b3RlLWRyYWZ0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ydW50aW1lLXNldHRpbmdzLnNlcnZpY2UnO1xuIl19
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9jb3JlL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb250ZXh0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9mbG93LWluZm8uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zsb3ctc3RhdGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zsb3ctc3RhdGUtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZWdyYXRpb24uc3RhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXRyaWMtY2FsY3VsYXRpb24vbWV0cmljLWNhbGN1bGF0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9kdWN0LWltYWdlcy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcXVvdGUtZHJhZnQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3J1bnRpbWUtc2V0dGluZ3Muc2VydmljZSc7XG4iXX0=