ng-easycommerce-v18 0.0.1 → 0.0.3

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 (508) hide show
  1. package/README.md +9 -12
  2. package/esm2022/lib/api/connection.service.mjs +75 -0
  3. package/esm2022/lib/api/index.mjs +2 -0
  4. package/esm2022/lib/classes/checkout/index.mjs +2 -0
  5. package/esm2022/lib/classes/checkout/steps.mjs +29 -0
  6. package/esm2022/lib/classes/filters/attributes-filter.mjs +73 -0
  7. package/esm2022/lib/classes/filters/category-filter.mjs +59 -0
  8. package/esm2022/lib/classes/filters/dynamics-filter.mjs +58 -0
  9. package/esm2022/lib/classes/filters/filter-factory.mjs +21 -0
  10. package/esm2022/lib/classes/filters/filter.mjs +83 -0
  11. package/esm2022/lib/classes/filters/index.mjs +7 -0
  12. package/esm2022/lib/classes/filters/sort-filter.mjs +88 -0
  13. package/esm2022/lib/classes/index.mjs +4 -0
  14. package/esm2022/lib/classes/user.mjs +59 -0
  15. package/esm2022/lib/constants/api.constants.service.mjs +71 -0
  16. package/esm2022/lib/constants/core.constants.service.mjs +205 -0
  17. package/esm2022/lib/constants/index.mjs +3 -0
  18. package/esm2022/lib/ec-components/abstractions-components/block-ec.component.mjs +110 -0
  19. package/esm2022/lib/ec-components/abstractions-components/index.mjs +3 -0
  20. package/esm2022/lib/ec-components/abstractions-components/menu-ec.component.mjs +97 -0
  21. package/esm2022/lib/ec-components/account-ec/account-ec.component.mjs +22 -0
  22. package/esm2022/lib/ec-components/account-ec/index.mjs +4 -0
  23. package/esm2022/lib/ec-components/account-ec/order-ec/order-ec.component.mjs +16 -0
  24. package/esm2022/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.mjs +150 -0
  25. package/esm2022/lib/ec-components/auth-ec/auth-ec.component.mjs +12 -0
  26. package/esm2022/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.mjs +30 -0
  27. package/esm2022/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.mjs +54 -0
  28. package/esm2022/lib/ec-components/auth-ec/index.mjs +7 -0
  29. package/esm2022/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.mjs +91 -0
  30. package/esm2022/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.mjs +105 -0
  31. package/esm2022/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.mjs +153 -0
  32. package/esm2022/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.mjs +109 -0
  33. package/esm2022/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.mjs +87 -0
  34. package/esm2022/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.mjs +87 -0
  35. package/esm2022/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.mjs +37 -0
  36. package/esm2022/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.mjs +86 -0
  37. package/esm2022/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.mjs +109 -0
  38. package/esm2022/lib/ec-components/blocks-ec/blocks-ec.component.mjs +99 -0
  39. package/esm2022/lib/ec-components/blocks-ec/index.mjs +5 -0
  40. package/esm2022/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.mjs +27 -0
  41. package/esm2022/lib/ec-components/cart-ec/cart-ec.component.mjs +21 -0
  42. package/esm2022/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.mjs +47 -0
  43. package/esm2022/lib/ec-components/cart-ec/index.mjs +3 -0
  44. package/esm2022/lib/ec-components/checkout-ec/checkout-ec.component.mjs +60 -0
  45. package/esm2022/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.mjs +271 -0
  46. package/esm2022/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.mjs +51 -0
  47. package/esm2022/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.mjs +45 -0
  48. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.mjs +92 -0
  49. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.mjs +30 -0
  50. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/index.mjs +4 -0
  51. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.mjs +119 -0
  52. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.mjs +32 -0
  53. package/esm2022/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.mjs +96 -0
  54. package/esm2022/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.mjs +35 -0
  55. package/esm2022/lib/ec-components/checkout-ec/success-ec/success-ec.component.mjs +55 -0
  56. package/esm2022/lib/ec-components/collection-ec/collection-ec.component.mjs +72 -0
  57. package/esm2022/lib/ec-components/coupon-ec/coupon-ec.component.mjs +29 -0
  58. package/esm2022/lib/ec-components/filters-ec/filters-ec.component.mjs +38 -0
  59. package/esm2022/lib/ec-components/filters-sort-ec/filters-sort-ec.component.mjs +36 -0
  60. package/esm2022/lib/ec-components/footer-ec/footer-ec.component.mjs +17 -0
  61. package/esm2022/lib/ec-components/header-ec/header-ec.component.mjs +20 -0
  62. package/esm2022/lib/ec-components/home-ec/home-ec.component.mjs +14 -0
  63. package/esm2022/lib/ec-components/index.mjs +25 -0
  64. package/esm2022/lib/ec-components/product-detail-ec/product-detail-ec.component.mjs +86 -0
  65. package/esm2022/lib/ec-components/product-ec/product-ec.component.mjs +51 -0
  66. package/esm2022/lib/ec-components/variants-ec/variants-ec.component.mjs +18 -0
  67. package/esm2022/lib/ec-components/widgets-ec/index.mjs +5 -0
  68. package/esm2022/lib/ec-components/widgets-ec/loading/index.mjs +4 -0
  69. package/esm2022/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.mjs +11 -0
  70. package/esm2022/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.mjs +16 -0
  71. package/esm2022/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.mjs +12 -0
  72. package/esm2022/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.mjs +178 -0
  73. package/esm2022/lib/ec-components/widgets-ec/price-ec/price-ec.component.mjs +27 -0
  74. package/esm2022/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.mjs +71 -0
  75. package/esm2022/lib/ec-guards/auth.guard.mjs +18 -0
  76. package/esm2022/lib/ec-guards/index.mjs +2 -0
  77. package/esm2022/lib/ec-pipe/ec-currency-symbol.pipe.mjs +104 -0
  78. package/esm2022/lib/ec-pipe/index.mjs +2 -0
  79. package/esm2022/lib/ec-services/addressing.service.mjs +185 -0
  80. package/esm2022/lib/ec-services/analytics/analytics.service.mjs +80 -0
  81. package/esm2022/lib/ec-services/analytics/doppler.service.mjs +47 -0
  82. package/esm2022/lib/ec-services/analytics/facebook-pixel.service.mjs +212 -0
  83. package/esm2022/lib/ec-services/analytics/google-analytics.service.mjs +283 -0
  84. package/esm2022/lib/ec-services/analytics/gtm.service.mjs +414 -0
  85. package/esm2022/lib/ec-services/analytics/index.mjs +7 -0
  86. package/esm2022/lib/ec-services/analytics/metricool-pixel.service.mjs +55 -0
  87. package/esm2022/lib/ec-services/auth.service.mjs +440 -0
  88. package/esm2022/lib/ec-services/auth.storage.service.mjs +54 -0
  89. package/esm2022/lib/ec-services/blocks-repository.service.mjs +64 -0
  90. package/esm2022/lib/ec-services/blocks.service.mjs +52 -0
  91. package/esm2022/lib/ec-services/cart.service.mjs +465 -0
  92. package/esm2022/lib/ec-services/channel.service.mjs +83 -0
  93. package/esm2022/lib/ec-services/checkout.service.mjs +180 -0
  94. package/esm2022/lib/ec-services/currency.service.mjs +177 -0
  95. package/esm2022/lib/ec-services/filters.service.mjs +134 -0
  96. package/esm2022/lib/ec-services/form.service.mjs +81 -0
  97. package/esm2022/lib/ec-services/index.mjs +27 -0
  98. package/esm2022/lib/ec-services/local-storage.service.mjs +58 -0
  99. package/esm2022/lib/ec-services/ngx-local-storage.service.mjs +66 -0
  100. package/esm2022/lib/ec-services/options.service.mjs +273 -0
  101. package/esm2022/lib/ec-services/order-utility.service.mjs +61 -0
  102. package/esm2022/lib/ec-services/orders.service.mjs +48 -0
  103. package/esm2022/lib/ec-services/pagination.service.mjs +163 -0
  104. package/esm2022/lib/ec-services/parameters.service.mjs +65 -0
  105. package/esm2022/lib/ec-services/payment.service.mjs +54 -0
  106. package/esm2022/lib/ec-services/product-detail.service.mjs +285 -0
  107. package/esm2022/lib/ec-services/products.service.mjs +148 -0
  108. package/esm2022/lib/ec-services/re-captcha.service.mjs +114 -0
  109. package/esm2022/lib/ec-services/shipment.service.mjs +158 -0
  110. package/esm2022/lib/ec-services/stores.service.mjs +27 -0
  111. package/esm2022/lib/ec-services/test.service.mjs +16 -0
  112. package/esm2022/lib/ec-services/toast.service.mjs +81 -0
  113. package/esm2022/lib/interceptors/auth.interceptor.mjs +35 -0
  114. package/esm2022/lib/interceptors/index.mjs +2 -0
  115. package/esm2022/lib/interfaces/analytics/event-key.mjs +2 -0
  116. package/esm2022/lib/interfaces/analytics/facebook-pixel-data.mjs +2 -0
  117. package/esm2022/lib/interfaces/analytics/gtm-config.mjs +2 -0
  118. package/esm2022/lib/interfaces/analytics/index.mjs +4 -0
  119. package/esm2022/lib/interfaces/blocks.mjs +2 -0
  120. package/esm2022/lib/interfaces/checkout.mjs +2 -0
  121. package/esm2022/lib/interfaces/connection.mjs +2 -0
  122. package/esm2022/lib/interfaces/coupon.mjs +2 -0
  123. package/esm2022/lib/interfaces/currency.mjs +2 -0
  124. package/esm2022/lib/interfaces/deserializable.mjs +2 -0
  125. package/esm2022/lib/interfaces/environment.mjs +2 -0
  126. package/esm2022/lib/interfaces/filter.mjs +2 -0
  127. package/esm2022/lib/interfaces/index.mjs +19 -0
  128. package/esm2022/lib/interfaces/options.mjs +2 -0
  129. package/esm2022/lib/interfaces/pagination.mjs +2 -0
  130. package/esm2022/lib/interfaces/parameter.mjs +2 -0
  131. package/esm2022/lib/interfaces/product.mjs +2 -0
  132. package/esm2022/lib/interfaces/step.mjs +2 -0
  133. package/esm2022/lib/interfaces/storage.mjs +2 -0
  134. package/esm2022/lib/interfaces/store.mjs +2 -0
  135. package/esm2022/lib/interfaces/types/index.mjs +2 -0
  136. package/esm2022/lib/interfaces/types/user.type.mjs +2 -0
  137. package/esm2022/lib/providers/index.mjs +2 -0
  138. package/esm2022/lib/providers/provideEnvironment.mjs +20 -0
  139. package/esm2022/lib/stores/currency.store.mjs +10 -0
  140. package/esm2022/lib/stores/index.mjs +2 -0
  141. package/esm2022/ng-easycommerce-v18.mjs +5 -0
  142. package/esm2022/public-api.mjs +20 -0
  143. package/fesm2022/ng-easycommerce-v18.mjs +8228 -0
  144. package/fesm2022/ng-easycommerce-v18.mjs.map +1 -0
  145. package/index.d.ts +5 -0
  146. package/lib/api/connection.service.d.ts +52 -0
  147. package/lib/api/index.d.ts +1 -0
  148. package/lib/classes/checkout/index.d.ts +1 -0
  149. package/lib/classes/checkout/steps.d.ts +15 -0
  150. package/lib/classes/filters/attributes-filter.d.ts +14 -0
  151. package/lib/classes/filters/category-filter.d.ts +14 -0
  152. package/lib/classes/filters/dynamics-filter.d.ts +13 -0
  153. package/lib/classes/filters/filter-factory.d.ts +5 -0
  154. package/lib/classes/filters/filter.d.ts +19 -0
  155. package/lib/classes/filters/index.d.ts +6 -0
  156. package/lib/classes/filters/sort-filter.d.ts +14 -0
  157. package/{projects/ng-easycommerce/src/lib/classes/index.ts → lib/classes/index.d.ts} +3 -3
  158. package/lib/classes/user.d.ts +50 -0
  159. package/lib/constants/api.constants.service.d.ts +54 -0
  160. package/lib/constants/core.constants.service.d.ts +116 -0
  161. package/lib/constants/index.d.ts +2 -0
  162. package/lib/ec-components/abstractions-components/block-ec.component.d.ts +62 -0
  163. package/lib/ec-components/abstractions-components/index.d.ts +2 -0
  164. package/lib/ec-components/abstractions-components/menu-ec.component.d.ts +67 -0
  165. package/lib/ec-components/account-ec/account-ec.component.d.ts +10 -0
  166. package/lib/ec-components/account-ec/index.d.ts +3 -0
  167. package/lib/ec-components/account-ec/order-ec/order-ec.component.d.ts +8 -0
  168. package/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.d.ts +55 -0
  169. package/lib/ec-components/auth-ec/auth-ec.component.d.ts +5 -0
  170. package/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.d.ts +11 -0
  171. package/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.d.ts +27 -0
  172. package/{projects/ng-easycommerce/src/lib/ec-components/auth-ec/index.ts → lib/ec-components/auth-ec/index.d.ts} +6 -6
  173. package/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.d.ts +42 -0
  174. package/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.d.ts +39 -0
  175. package/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.d.ts +62 -0
  176. package/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.d.ts +47 -0
  177. package/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.d.ts +54 -0
  178. package/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.d.ts +21 -0
  179. package/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.d.ts +25 -0
  180. package/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.d.ts +19 -0
  181. package/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.d.ts +51 -0
  182. package/lib/ec-components/blocks-ec/blocks-ec.component.d.ts +59 -0
  183. package/{projects/ng-easycommerce/src/lib/ec-components/blocks-ec/index.ts → lib/ec-components/blocks-ec/index.d.ts} +4 -4
  184. package/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.d.ts +11 -0
  185. package/lib/ec-components/cart-ec/cart-ec.component.d.ts +12 -0
  186. package/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.d.ts +17 -0
  187. package/lib/ec-components/cart-ec/index.d.ts +2 -0
  188. package/lib/ec-components/checkout-ec/checkout-ec.component.d.ts +20 -0
  189. package/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.d.ts +83 -0
  190. package/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.d.ts +14 -0
  191. package/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +11 -0
  192. package/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.d.ts +37 -0
  193. package/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.d.ts +11 -0
  194. package/{projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/index.ts → lib/ec-components/checkout-ec/payment-ec/payment-methods/index.d.ts} +3 -3
  195. package/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.d.ts +30 -0
  196. package/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.d.ts +11 -0
  197. package/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.d.ts +30 -0
  198. package/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.d.ts +11 -0
  199. package/lib/ec-components/checkout-ec/success-ec/success-ec.component.d.ts +30 -0
  200. package/lib/ec-components/collection-ec/collection-ec.component.d.ts +37 -0
  201. package/lib/ec-components/coupon-ec/coupon-ec.component.d.ts +12 -0
  202. package/lib/ec-components/filters-ec/filters-ec.component.d.ts +14 -0
  203. package/lib/ec-components/filters-sort-ec/filters-sort-ec.component.d.ts +14 -0
  204. package/lib/ec-components/footer-ec/footer-ec.component.d.ts +10 -0
  205. package/lib/ec-components/header-ec/header-ec.component.d.ts +15 -0
  206. package/lib/ec-components/home-ec/home-ec.component.d.ts +8 -0
  207. package/{projects/ng-easycommerce/src/lib/ec-components/index.ts → lib/ec-components/index.d.ts} +24 -17
  208. package/lib/ec-components/product-detail-ec/product-detail-ec.component.d.ts +31 -0
  209. package/lib/ec-components/product-ec/product-ec.component.d.ts +31 -0
  210. package/lib/ec-components/variants-ec/variants-ec.component.d.ts +8 -0
  211. package/{projects/ng-easycommerce/src/lib/ec-components/widgets-ec/index.ts → lib/ec-components/widgets-ec/index.d.ts} +4 -4
  212. package/{projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/index.ts → lib/ec-components/widgets-ec/loading/index.d.ts} +3 -3
  213. package/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.d.ts +5 -0
  214. package/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.d.ts +6 -0
  215. package/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.d.ts +5 -0
  216. package/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.d.ts +70 -0
  217. package/lib/ec-components/widgets-ec/price-ec/price-ec.component.d.ts +16 -0
  218. package/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.d.ts +26 -0
  219. package/lib/ec-guards/auth.guard.d.ts +8 -0
  220. package/lib/ec-guards/index.d.ts +1 -0
  221. package/lib/ec-pipe/ec-currency-symbol.pipe.d.ts +56 -0
  222. package/lib/ec-pipe/index.d.ts +1 -0
  223. package/lib/ec-services/addressing.service.d.ts +233 -0
  224. package/lib/ec-services/analytics/analytics.service.d.ts +50 -0
  225. package/lib/ec-services/analytics/doppler.service.d.ts +26 -0
  226. package/lib/ec-services/analytics/facebook-pixel.service.d.ts +102 -0
  227. package/lib/ec-services/analytics/google-analytics.service.d.ts +118 -0
  228. package/lib/ec-services/analytics/gtm.service.d.ts +153 -0
  229. package/{projects/ng-easycommerce/src/lib/ec-services/analytics/index.ts → lib/ec-services/analytics/index.d.ts} +6 -6
  230. package/lib/ec-services/analytics/metricool-pixel.service.d.ts +26 -0
  231. package/lib/ec-services/auth.service.d.ts +229 -0
  232. package/lib/ec-services/auth.storage.service.d.ts +24 -0
  233. package/lib/ec-services/blocks-repository.service.d.ts +40 -0
  234. package/lib/ec-services/blocks.service.d.ts +38 -0
  235. package/lib/ec-services/cart.service.d.ts +211 -0
  236. package/lib/ec-services/channel.service.d.ts +59 -0
  237. package/lib/ec-services/checkout.service.d.ts +49 -0
  238. package/lib/ec-services/currency.service.d.ts +108 -0
  239. package/lib/ec-services/filters.service.d.ts +56 -0
  240. package/lib/ec-services/form.service.d.ts +50 -0
  241. package/{projects/ng-easycommerce/src/lib/ec-services/index.ts → lib/ec-services/index.d.ts} +26 -24
  242. package/lib/ec-services/local-storage.service.d.ts +40 -0
  243. package/lib/ec-services/ngx-local-storage.service.d.ts +42 -0
  244. package/lib/ec-services/options.service.d.ts +121 -0
  245. package/lib/ec-services/order-utility.service.d.ts +15 -0
  246. package/lib/ec-services/orders.service.d.ts +14 -0
  247. package/lib/ec-services/pagination.service.d.ts +89 -0
  248. package/lib/ec-services/parameters.service.d.ts +41 -0
  249. package/lib/ec-services/payment.service.d.ts +22 -0
  250. package/lib/ec-services/product-detail.service.d.ts +97 -0
  251. package/lib/ec-services/products.service.d.ts +48 -0
  252. package/lib/ec-services/re-captcha.service.d.ts +65 -0
  253. package/lib/ec-services/shipment.service.d.ts +49 -0
  254. package/lib/ec-services/stores.service.d.ts +12 -0
  255. package/lib/ec-services/test.service.d.ts +6 -0
  256. package/lib/ec-services/toast.service.d.ts +59 -0
  257. package/lib/interceptors/auth.interceptor.d.ts +2 -0
  258. package/lib/interceptors/index.d.ts +1 -0
  259. package/lib/interfaces/analytics/event-key.d.ts +1 -0
  260. package/lib/interfaces/analytics/facebook-pixel-data.d.ts +5 -0
  261. package/{projects/ng-easycommerce/src/lib/interfaces/analytics/gtm-config.ts → lib/interfaces/analytics/gtm-config.d.ts} +6 -6
  262. package/{projects/ng-easycommerce/src/lib/interfaces/analytics/index.ts → lib/interfaces/analytics/index.d.ts} +3 -3
  263. package/lib/interfaces/blocks.d.ts +41 -0
  264. package/{projects/ng-easycommerce/src/lib/interfaces/checkout.ts → lib/interfaces/checkout.d.ts} +12 -14
  265. package/{projects/ng-easycommerce/src/lib/interfaces/connection.ts → lib/interfaces/connection.d.ts} +7 -8
  266. package/lib/interfaces/coupon.d.ts +5 -0
  267. package/lib/interfaces/currency.d.ts +9 -0
  268. package/{projects/ng-easycommerce/src/lib/interfaces/deserializable.ts → lib/interfaces/deserializable.d.ts} +3 -3
  269. package/{projects/ng-easycommerce/src/lib/interfaces/environment.ts → lib/interfaces/environment.d.ts} +6 -6
  270. package/{projects/ng-easycommerce/src/lib/interfaces/filter.ts → lib/interfaces/filter.d.ts} +38 -59
  271. package/{projects/ng-easycommerce/src/lib/interfaces/index.ts → lib/interfaces/index.d.ts} +16 -18
  272. package/lib/interfaces/options.d.ts +26 -0
  273. package/lib/interfaces/pagination.d.ts +24 -0
  274. package/lib/interfaces/parameter.d.ts +14 -0
  275. package/{projects/ng-easycommerce/src/lib/interfaces/product.ts → lib/interfaces/product.d.ts} +73 -81
  276. package/lib/interfaces/step.d.ts +15 -0
  277. package/lib/interfaces/storage.d.ts +7 -0
  278. package/{projects/ng-easycommerce/src/lib/interfaces/store.ts → lib/interfaces/store.d.ts} +17 -17
  279. package/lib/interfaces/types/index.d.ts +1 -0
  280. package/lib/interfaces/types/user.type.d.ts +5 -0
  281. package/lib/providers/index.d.ts +1 -0
  282. package/lib/providers/provideEnvironment.d.ts +13 -0
  283. package/lib/stores/currency.store.d.ts +7 -0
  284. package/lib/stores/index.d.ts +1 -0
  285. package/package.json +29 -58
  286. package/{projects/ng-easycommerce/src/public-api.ts → public-api.d.ts} +8 -24
  287. package/.editorconfig +0 -16
  288. package/angular.json +0 -48
  289. package/projects/ng-easycommerce/README.md +0 -24
  290. package/projects/ng-easycommerce/ng-package.json +0 -7
  291. package/projects/ng-easycommerce/package.json +0 -12
  292. package/projects/ng-easycommerce/src/lib/api/connection.service.ts +0 -79
  293. package/projects/ng-easycommerce/src/lib/api/index.ts +0 -1
  294. package/projects/ng-easycommerce/src/lib/classes/checkout/index.ts +0 -1
  295. package/projects/ng-easycommerce/src/lib/classes/checkout/steps.ts +0 -37
  296. package/projects/ng-easycommerce/src/lib/classes/filters/attributes-filter.ts +0 -74
  297. package/projects/ng-easycommerce/src/lib/classes/filters/category-filter.ts +0 -57
  298. package/projects/ng-easycommerce/src/lib/classes/filters/dynamics-filter.ts +0 -57
  299. package/projects/ng-easycommerce/src/lib/classes/filters/filter-factory.ts +0 -23
  300. package/projects/ng-easycommerce/src/lib/classes/filters/filter.ts +0 -89
  301. package/projects/ng-easycommerce/src/lib/classes/filters/index.ts +0 -6
  302. package/projects/ng-easycommerce/src/lib/classes/filters/sort-filter.ts +0 -93
  303. package/projects/ng-easycommerce/src/lib/classes/user.ts +0 -68
  304. package/projects/ng-easycommerce/src/lib/constants/api.constants.service.ts +0 -69
  305. package/projects/ng-easycommerce/src/lib/constants/core.constants.service.ts +0 -210
  306. package/projects/ng-easycommerce/src/lib/constants/index.ts +0 -2
  307. package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/block-ec.component.ts +0 -107
  308. package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/index.ts +0 -2
  309. package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/menu-ec.component.ts +0 -102
  310. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.html +0 -10
  311. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.scss +0 -0
  312. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.ts +0 -13
  313. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.html +0 -19
  314. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.scss +0 -0
  315. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.ts +0 -34
  316. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.html +0 -31
  317. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.scss +0 -0
  318. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.ts +0 -55
  319. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.html +0 -30
  320. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.scss +0 -0
  321. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.ts +0 -92
  322. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.html +0 -55
  323. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.scss +0 -0
  324. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.ts +0 -102
  325. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.html +0 -233
  326. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.scss +0 -0
  327. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.ts +0 -149
  328. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.html +0 -113
  329. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.scss +0 -12
  330. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.ts +0 -100
  331. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.html +0 -111
  332. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.scss +0 -0
  333. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.ts +0 -77
  334. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.html +0 -62
  335. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.scss +0 -0
  336. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.ts +0 -89
  337. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.html +0 -1
  338. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.scss +0 -0
  339. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.ts +0 -33
  340. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.html +0 -1
  341. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.scss +0 -0
  342. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.ts +0 -81
  343. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.html +0 -40
  344. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.scss +0 -0
  345. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.ts +0 -97
  346. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.html +0 -41
  347. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.scss +0 -0
  348. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.ts +0 -86
  349. package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.html +0 -20
  350. package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.scss +0 -0
  351. package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.ts +0 -30
  352. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.html +0 -1
  353. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.scss +0 -0
  354. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.ts +0 -24
  355. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.html +0 -1
  356. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.scss +0 -0
  357. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.ts +0 -51
  358. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/index.ts +0 -2
  359. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.html +0 -56
  360. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.scss +0 -38
  361. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.ts +0 -67
  362. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.html +0 -836
  363. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.scss +0 -0
  364. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.ts +0 -302
  365. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.html +0 -32
  366. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.scss +0 -0
  367. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.ts +0 -52
  368. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.html +0 -12
  369. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.scss +0 -0
  370. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.ts +0 -48
  371. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.html +0 -195
  372. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.scss +0 -0
  373. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.ts +0 -103
  374. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.html +0 -28
  375. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.scss +0 -0
  376. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.ts +0 -26
  377. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.html +0 -33
  378. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.scss +0 -0
  379. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.ts +0 -116
  380. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.html +0 -13
  381. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.scss +0 -0
  382. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.ts +0 -26
  383. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.html +0 -111
  384. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.scss +0 -0
  385. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.ts +0 -111
  386. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.html +0 -33
  387. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.scss +0 -0
  388. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.ts +0 -39
  389. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.html +0 -59
  390. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.scss +0 -0
  391. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.ts +0 -65
  392. package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.html +0 -16
  393. package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.scss +0 -0
  394. package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.ts +0 -83
  395. package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.html +0 -1
  396. package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.scss +0 -0
  397. package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.ts +0 -32
  398. package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.html +0 -1
  399. package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.scss +0 -0
  400. package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.ts +0 -45
  401. package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.html +0 -1
  402. package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.scss +0 -0
  403. package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.ts +0 -49
  404. package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.html +0 -1
  405. package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.scss +0 -0
  406. package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.spec.ts +0 -23
  407. package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.ts +0 -18
  408. package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.html +0 -1
  409. package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.scss +0 -0
  410. package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.spec.ts +0 -23
  411. package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.ts +0 -22
  412. package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.html +0 -1
  413. package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.scss +0 -0
  414. package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.spec.ts +0 -23
  415. package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.ts +0 -16
  416. package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.html +0 -0
  417. package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.scss +0 -0
  418. package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.ts +0 -82
  419. package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.html +0 -31
  420. package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.scss +0 -0
  421. package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.ts +0 -46
  422. package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.html +0 -65
  423. package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.scss +0 -8
  424. package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.ts +0 -20
  425. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.html +0 -7
  426. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.scss +0 -0
  427. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.ts +0 -13
  428. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.html +0 -5
  429. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.scss +0 -0
  430. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.ts +0 -13
  431. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.html +0 -3
  432. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.scss +0 -0
  433. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.ts +0 -13
  434. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.html +0 -11
  435. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.scss +0 -0
  436. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.ts +0 -177
  437. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.html +0 -47
  438. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.scss +0 -0
  439. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.ts +0 -22
  440. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.html +0 -6
  441. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.scss +0 -0
  442. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.ts +0 -70
  443. package/projects/ng-easycommerce/src/lib/ec-guards/auth.guard.ts +0 -19
  444. package/projects/ng-easycommerce/src/lib/ec-guards/index.ts +0 -1
  445. package/projects/ng-easycommerce/src/lib/ec-pipe/ec-currency-symbol.pipe.ts +0 -99
  446. package/projects/ng-easycommerce/src/lib/ec-pipe/index.ts +0 -1
  447. package/projects/ng-easycommerce/src/lib/ec-services/addressing.service.ts +0 -199
  448. package/projects/ng-easycommerce/src/lib/ec-services/analytics/analytics.service.ts +0 -76
  449. package/projects/ng-easycommerce/src/lib/ec-services/analytics/doppler.service.ts +0 -38
  450. package/projects/ng-easycommerce/src/lib/ec-services/analytics/facebook-pixel.service.ts +0 -214
  451. package/projects/ng-easycommerce/src/lib/ec-services/analytics/google-analytics.service.ts +0 -284
  452. package/projects/ng-easycommerce/src/lib/ec-services/analytics/gtm.service.ts +0 -413
  453. package/projects/ng-easycommerce/src/lib/ec-services/analytics/metricool-pixel.service.ts +0 -46
  454. package/projects/ng-easycommerce/src/lib/ec-services/auth.service.ts +0 -438
  455. package/projects/ng-easycommerce/src/lib/ec-services/auth.storage.service.ts +0 -54
  456. package/projects/ng-easycommerce/src/lib/ec-services/blocks-repository.service.ts +0 -67
  457. package/projects/ng-easycommerce/src/lib/ec-services/blocks.service.ts +0 -48
  458. package/projects/ng-easycommerce/src/lib/ec-services/cart.service.ts +0 -492
  459. package/projects/ng-easycommerce/src/lib/ec-services/channel.service.ts +0 -81
  460. package/projects/ng-easycommerce/src/lib/ec-services/checkout.service.ts +0 -196
  461. package/projects/ng-easycommerce/src/lib/ec-services/currency.service.ts +0 -179
  462. package/projects/ng-easycommerce/src/lib/ec-services/filters.service.ts +0 -133
  463. package/projects/ng-easycommerce/src/lib/ec-services/form.service.ts +0 -82
  464. package/projects/ng-easycommerce/src/lib/ec-services/local-storage.service.ts +0 -54
  465. package/projects/ng-easycommerce/src/lib/ec-services/ngx-local-storage.service.ts +0 -66
  466. package/projects/ng-easycommerce/src/lib/ec-services/options.service.ts +0 -274
  467. package/projects/ng-easycommerce/src/lib/ec-services/order-utility.service.ts +0 -52
  468. package/projects/ng-easycommerce/src/lib/ec-services/pagination.service.ts +0 -172
  469. package/projects/ng-easycommerce/src/lib/ec-services/parameters.service.ts +0 -67
  470. package/projects/ng-easycommerce/src/lib/ec-services/payment.service.ts +0 -63
  471. package/projects/ng-easycommerce/src/lib/ec-services/product-detail.service.ts +0 -288
  472. package/projects/ng-easycommerce/src/lib/ec-services/products.service.ts +0 -162
  473. package/projects/ng-easycommerce/src/lib/ec-services/re-captcha.service.ts +0 -126
  474. package/projects/ng-easycommerce/src/lib/ec-services/shipment.service.ts +0 -174
  475. package/projects/ng-easycommerce/src/lib/ec-services/stores.service.ts +0 -27
  476. package/projects/ng-easycommerce/src/lib/ec-services/toast.service.ts +0 -84
  477. package/projects/ng-easycommerce/src/lib/interceptors/auth.interceptor.ts +0 -43
  478. package/projects/ng-easycommerce/src/lib/interceptors/index.ts +0 -1
  479. package/projects/ng-easycommerce/src/lib/interfaces/analytics/event-key.ts +0 -14
  480. package/projects/ng-easycommerce/src/lib/interfaces/analytics/facebook-pixel-data.ts +0 -5
  481. package/projects/ng-easycommerce/src/lib/interfaces/blocks.ts +0 -56
  482. package/projects/ng-easycommerce/src/lib/interfaces/coupon.ts +0 -5
  483. package/projects/ng-easycommerce/src/lib/interfaces/currency.ts +0 -10
  484. package/projects/ng-easycommerce/src/lib/interfaces/options.ts +0 -28
  485. package/projects/ng-easycommerce/src/lib/interfaces/pagination.ts +0 -27
  486. package/projects/ng-easycommerce/src/lib/interfaces/parameter.ts +0 -15
  487. package/projects/ng-easycommerce/src/lib/interfaces/step.ts +0 -19
  488. package/projects/ng-easycommerce/src/lib/interfaces/storage.ts +0 -7
  489. package/projects/ng-easycommerce/src/lib/interfaces/types/index.ts +0 -1
  490. package/projects/ng-easycommerce/src/lib/interfaces/types/user.type.ts +0 -5
  491. package/projects/ng-easycommerce/src/lib/providers/index.ts +0 -1
  492. package/projects/ng-easycommerce/src/lib/providers/provideEnvironment.ts +0 -24
  493. package/projects/ng-easycommerce/src/lib/stores/currency.store.ts +0 -20
  494. package/projects/ng-easycommerce/src/lib/stores/index.ts +0 -1
  495. package/projects/ng-easycommerce/tsconfig.lib.json +0 -15
  496. package/projects/ng-easycommerce/tsconfig.lib.prod.json +0 -11
  497. package/projects/ng-easycommerce/tsconfig.spec.json +0 -15
  498. package/tsconfig.doc.json +0 -4
  499. package/tsconfig.json +0 -37
  500. /package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/ct.json +0 -0
  501. /package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/en.json +0 -0
  502. /package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/es.json +0 -0
  503. /package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/fr.json +0 -0
  504. /package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/gl.json +0 -0
  505. /package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/pr.json +0 -0
  506. /package/{projects/ng-easycommerce/src/lib/assets → assets}/recaptcha/recaptcha-site-keys.json +0 -0
  507. /package/{projects/ng-easycommerce/src/lib/assets → assets}/recaptcha/recaptcha-sites-prod.json +0 -0
  508. /package/{projects/ng-easycommerce/src/lib/assets → assets}/recaptcha/recaptcha-sites.json +0 -0
@@ -0,0 +1,52 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { ApiConstantsService } from '../constants';
4
+ import { BlocksRepositoryService } from './blocks-repository.service';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Servicio de tipo adapter para manejar los bloques.
8
+ * @class BlocksService
9
+ */
10
+ export class BlocksService {
11
+ /**
12
+ * Constantes de la API
13
+ */
14
+ apiConstants = inject(ApiConstantsService);
15
+ /**
16
+ * Servicio de BlocksRepository.
17
+ */
18
+ blocksRepositoryService = inject(BlocksRepositoryService);
19
+ /**
20
+ * Subject para manejar los bloques recibidos.
21
+ */
22
+ blocksSubject = new BehaviorSubject([]);
23
+ /**
24
+ * Observable de bloques.
25
+ */
26
+ blocks$ = this.blocksSubject.asObservable();
27
+ //API URLS
28
+ /**
29
+ * Devuelve la url para interactuar con el bloque de contacto.
30
+ * @returns
31
+ */
32
+ contactFormResponseAPI() { return `${this.apiConstants.CMS_URL}${this.apiConstants.LOCALE}/contact-form/response`; }
33
+ //METHODS
34
+ /**
35
+ * Obtiene los bloques de una sección en especifico.
36
+ * @param section
37
+ * @returns Observable de los bloques.
38
+ */
39
+ getBlocks(section) {
40
+ return this.blocksRepositoryService.getBlocks(section);
41
+ }
42
+ constructor() { }
43
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BlocksService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
44
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BlocksService, providedIn: 'root' });
45
+ }
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BlocksService, decorators: [{
47
+ type: Injectable,
48
+ args: [{
49
+ providedIn: 'root'
50
+ }]
51
+ }], ctorParameters: () => [] });
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtc2VydmljZXMvYmxvY2tzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBRXRFOzs7R0FHRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBQ3pCOztPQUVHO0lBQ0ssWUFBWSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25EOztPQUVHO0lBQ0ssdUJBQXVCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDbEU7O09BRUc7SUFDSyxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQVEsRUFBRSxDQUFDLENBQUM7SUFDdkQ7O09BRUc7SUFDSSxPQUFPLEdBQXNCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFdEUsVUFBVTtJQUNWOzs7T0FHRztJQUNILHNCQUFzQixLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sd0JBQXdCLENBQUEsQ0FBQyxDQUFDO0lBRW5ILFNBQVM7SUFDVDs7OztPQUlHO0lBQ0ksU0FBUyxDQUFDLE9BQWU7UUFDL0IsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3ZELENBQUM7SUFDRCxnQkFBZ0IsQ0FBQzt1R0FsQ0wsYUFBYTsyR0FBYixhQUFhLGNBRmIsTUFBTTs7MkZBRU4sYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFwaUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBCbG9ja3NSZXBvc2l0b3J5U2VydmljZSB9IGZyb20gJy4vYmxvY2tzLXJlcG9zaXRvcnkuc2VydmljZSc7XHJcbmltcG9ydCB7IElCbG9jayB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG4vKipcclxuICogU2VydmljaW8gZGUgdGlwbyBhZGFwdGVyIHBhcmEgbWFuZWphciBsb3MgYmxvcXVlcy5cclxuICogQGNsYXNzIEJsb2Nrc1NlcnZpY2VcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuXHRwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEJsb2Nrc1NlcnZpY2Uge1xyXG5cdC8qKlxyXG5cdCAqIENvbnN0YW50ZXMgZGUgbGEgQVBJXHJcblx0ICovXHJcblx0cHJpdmF0ZSBhcGlDb25zdGFudHMgPSBpbmplY3QoQXBpQ29uc3RhbnRzU2VydmljZSk7XHJcblx0LyoqXHJcblx0ICogU2VydmljaW8gZGUgQmxvY2tzUmVwb3NpdG9yeS5cclxuXHQgKi9cclxuXHRwcml2YXRlIGJsb2Nrc1JlcG9zaXRvcnlTZXJ2aWNlID0gaW5qZWN0KEJsb2Nrc1JlcG9zaXRvcnlTZXJ2aWNlKTtcclxuXHQvKipcclxuXHQgKiBTdWJqZWN0IHBhcmEgbWFuZWphciBsb3MgYmxvcXVlcyByZWNpYmlkb3MuXHJcblx0ICovXHJcblx0cHJpdmF0ZSBibG9ja3NTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xyXG5cdC8qKlxyXG5cdCAqIE9ic2VydmFibGUgZGUgYmxvcXVlcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgYmxvY2tzJDogT2JzZXJ2YWJsZTxhbnlbXT4gPSB0aGlzLmJsb2Nrc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG5cdC8vQVBJIFVSTFNcclxuXHQvKipcclxuXHQgKiBEZXZ1ZWx2ZSBsYSB1cmwgcGFyYSBpbnRlcmFjdHVhciBjb24gZWwgYmxvcXVlIGRlIGNvbnRhY3RvLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGNvbnRhY3RGb3JtUmVzcG9uc2VBUEkoKSB7IHJldHVybiBgJHt0aGlzLmFwaUNvbnN0YW50cy5DTVNfVVJMfSR7dGhpcy5hcGlDb25zdGFudHMuTE9DQUxFfS9jb250YWN0LWZvcm0vcmVzcG9uc2VgIH1cclxuXHJcblx0Ly9NRVRIT0RTXHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSBsb3MgYmxvcXVlcyBkZSB1bmEgc2VjY2nDs24gZW4gZXNwZWNpZmljby5cclxuXHQgKiBAcGFyYW0gc2VjdGlvbiBcclxuXHQgKiBAcmV0dXJucyBPYnNlcnZhYmxlIGRlIGxvcyBibG9xdWVzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBnZXRCbG9ja3Moc2VjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLmJsb2Nrc1JlcG9zaXRvcnlTZXJ2aWNlLmdldEJsb2NrcyhzZWN0aW9uKVxyXG5cdH1cclxuXHRjb25zdHJ1Y3RvcigpIHsgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,465 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { AuthService } from './auth.service';
3
+ import { ToastService } from './toast.service';
4
+ import { ConnectionService } from '../api';
5
+ import { ApiConstantsService, CoreConstantsService } from '../constants';
6
+ import { BehaviorSubject, combineLatest, firstValueFrom, map } from 'rxjs';
7
+ import { AnalyticsService } from './analytics';
8
+ import { LocalStorageService } from './local-storage.service';
9
+ import { ChannelService } from './channel.service';
10
+ import { NgxLocalStorageService } from './ngx-local-storage.service';
11
+ import * as i0 from "@angular/core";
12
+ export class CartService {
13
+ _authService = inject(AuthService);
14
+ _toastService = inject(ToastService);
15
+ _connection = inject(ConnectionService);
16
+ _apiConsts = inject(ApiConstantsService);
17
+ _analyticsService = inject(AnalyticsService);
18
+ _localStorage = inject(LocalStorageService);
19
+ _channelService = inject(ChannelService);
20
+ _consts = inject(CoreConstantsService);
21
+ _storage = inject(NgxLocalStorageService);
22
+ _cartSubject = new BehaviorSubject(null);
23
+ _promotionsSubject = new BehaviorSubject([]);
24
+ _couponSubject = new BehaviorSubject(null);
25
+ _cartItemsSubject = new BehaviorSubject([]);
26
+ _requestInProcess = new BehaviorSubject(false);
27
+ _balanceCustomerSubject = new BehaviorSubject({
28
+ allowAnyPaymentMethod: false,
29
+ allowExceedBalance: false,
30
+ creditAmount: 0,
31
+ showMax: false,
32
+ showPrice: false,
33
+ remainingCredits: 0,
34
+ });
35
+ CART_KEY = 'cart';
36
+ CART_TOKEN_KEY = 'cart_token';
37
+ _items = [];
38
+ _count = 0;
39
+ cartToken = '';
40
+ channelConfig = {};
41
+ _locale = "";
42
+ cartItems$ = this._cartItemsSubject.asObservable().pipe(map(items => this.switchPriceInCartItem(items)));
43
+ coupon$ = this._couponSubject.asObservable();
44
+ cart$ = this._cartSubject.asObservable();
45
+ loading$ = this._requestInProcess.asObservable();
46
+ _haveToUpdate = true;
47
+ //API URL
48
+ _cartBaseUrl = `${this._apiConsts.SHOP_API_URL}${this._apiConsts.CHANNEL}/carts`;
49
+ updateItemQuantityApi(item_id) { return this._cartBaseUrl + '/' + this.cartToken + '/items/' + item_id + '?locale=' + this._apiConsts.LOCALE; }
50
+ addItemApi() { return this._cartBaseUrl + '/' + this.cartToken + '/items?locale=' + this._apiConsts.LOCALE; }
51
+ cartItemsApi() { return this._cartBaseUrl + '?locale=' + this._apiConsts.LOCALE; }
52
+ deleteItemApi(item_id) { return this._cartBaseUrl + '/' + this.cartToken + '/items/' + item_id + '?locale=' + this._apiConsts.LOCALE; }
53
+ couponApi() { return this._cartBaseUrl + '/' + this.cartToken + '/coupon'; }
54
+ ;
55
+ constructor() {
56
+ this._requestInProcess.next(true);
57
+ this.cartToken = this._localStorage.getItem(this.CART_TOKEN_KEY) || null;
58
+ this.initializeDataCart();
59
+ this._channelService.channel$.subscribe(res => this.channelConfig = res);
60
+ }
61
+ /**
62
+ * Inicializa el carrito con los datos del local storage en caso de que existan o no.
63
+ */
64
+ initializeDataCart() {
65
+ combineLatest([this._authService.loggedIn$, this._storage.getItem(this.CART_KEY)]).subscribe({
66
+ next: ([loggedIn, token]) => {
67
+ //console.log(loggedIn, token);
68
+ this._items = token || [];
69
+ this.getCart();
70
+ }
71
+ });
72
+ }
73
+ /**
74
+ * Obtiene el carrito desde el backend y lo inicializa.
75
+ * Si existe el cartToken y hay items en el carrito, envía el token como parámetro.
76
+ */
77
+ getCart() {
78
+ //console.warn(this._items, this._items.length, this.cartToken)
79
+ firstValueFrom(this._connection.post(this.cartItemsApi(), ((this.cartToken && this._items.length >= 1) && { token: this.cartToken }))).then((res) => {
80
+ //console.log(res)
81
+ this.initializeCart(res);
82
+ });
83
+ }
84
+ /**
85
+ * Configura el carrito con los parametros iniciales.
86
+ * @param response
87
+ * @returns
88
+ */
89
+ initializeCart(response) {
90
+ this.cartToken = response.tokenValue;
91
+ this._localStorage.setItem(this.CART_TOKEN_KEY, this.cartToken);
92
+ this._locale = response.locale;
93
+ this.updateCartObj(response, false);
94
+ this.updateCartItems(this.transformItems(response.items));
95
+ this._requestInProcess.next(false);
96
+ return true;
97
+ }
98
+ /**
99
+ * Actualiza los items del carrito.
100
+ * @param items
101
+ */
102
+ updateCartItems(items) {
103
+ this._items = items;
104
+ this._count = items.length;
105
+ this._cartItemsSubject.next(this._items);
106
+ this.updateLocalCart();
107
+ this._requestInProcess.next(false);
108
+ }
109
+ /**
110
+ * Agrega un producto al carrito con la cantidad deseada.
111
+ * @param product Producto a agregar
112
+ * @param quantity Cantidad
113
+ * @param variantId Id de la variante
114
+ * @returns
115
+ */
116
+ addToCart(product, quantity, variantId) {
117
+ //console.log(product);
118
+ if (!this._authService.isAbleToBuy()) {
119
+ this._toastService.show('must-select-customer');
120
+ return;
121
+ }
122
+ this._requestInProcess.next(true);
123
+ let added = this.addIfAllreadyExists(product, variantId, quantity);
124
+ if (!added) {
125
+ firstValueFrom(this._connection.post(this.addItemApi(), { productCode: product.id, quantity: quantity, variantCode: variantId }))
126
+ .then(res => {
127
+ // Manejar la respuesta HTTP exitosa (código 200)
128
+ this.appendToCart(res);
129
+ this._toastService.show('product-added');
130
+ }, err => {
131
+ // Manejar el error de la llamada HTTP (código 500 u otro error)
132
+ if (err.status === 500) {
133
+ // Código de error 500 (timeout)
134
+ this.handleError(err);
135
+ this._toastService.show('cart-error');
136
+ }
137
+ else {
138
+ // Otro código de error
139
+ this.handleError(err);
140
+ this._toastService.show('error-server');
141
+ }
142
+ });
143
+ }
144
+ }
145
+ /**
146
+ * Actualiza el carrito agregando los nuevos items.
147
+ * @param cart
148
+ */
149
+ appendToCart(cart) {
150
+ this.updateCartObj(cart);
151
+ this._items = this.transformItems(cart.items);
152
+ this._count = this._items.length;
153
+ this._requestInProcess.next(false);
154
+ this.updateLocalCart();
155
+ this._cartItemsSubject.next(this._items);
156
+ }
157
+ /**
158
+ * Mapea los items del carrito para darle un mejor formato similar a la interfaz `CartItem`.
159
+ * @param items
160
+ * @returns
161
+ */
162
+ transformItems(items) {
163
+ return items.map((item) => {
164
+ return {
165
+ product: item.product,
166
+ variant_id: item.product.variants[0].code,
167
+ lot: item.orderItemLot,
168
+ quantity: item.quantity,
169
+ item_id: item.id,
170
+ total: item.total
171
+ };
172
+ });
173
+ }
174
+ /**
175
+ * Chequea si el producto ya existe en el carrito de compras.
176
+ * @param product
177
+ * @param variantId
178
+ * @param quantityAdd Cantidad a agregar. Por defecto es 1.
179
+ */
180
+ addIfAllreadyExists(product, variantId, quantityAdd = 1) {
181
+ return this._items.find((item, index) => {
182
+ if (item.product.id == product.id && item.variant_id == variantId) {
183
+ this.updateItemQuantity(item, this.findItem(product.id).quantity + quantityAdd);
184
+ return true;
185
+ }
186
+ return false;
187
+ });
188
+ }
189
+ /**
190
+ * Obtiene la cantidad de un producto del item del carrito
191
+ * @param codeVariant codigo de la variante.
192
+ * @returns la cantidad o `0` en su defecto.
193
+ */
194
+ getCountFromItemInCart(codeVariant) {
195
+ return this._items.find(item => item.variant_id == codeVariant)?.quantity || 0;
196
+ }
197
+ /**
198
+ * Obtiene un observable con la cantidad de items en el carrito.
199
+ */
200
+ getCountCartItems() {
201
+ return this.cartItems$.pipe(map((cartItems) => cartItems?.length));
202
+ }
203
+ /**
204
+ * Mapea los productos en el carrito para cambiar el precio obteniendo de la variante y seleccionando si es
205
+ * precio de oferta o el precio normal.
206
+ * @param items
207
+ * @returns
208
+ */
209
+ switchPriceInCartItem = (items) => {
210
+ return items.map(item => {
211
+ if (item.product) {
212
+ item.product.price = item.product.variants[0].saleprice ? item.product.variants[0].saleprice : item.product.variants[0].price;
213
+ }
214
+ return item;
215
+ });
216
+ };
217
+ /**
218
+ * Actualiza la cantidad de un producto existente en el carrito.
219
+ * @param item el item a actualizar.
220
+ * @param quantity la cantidad nueva.
221
+ */
222
+ updateItemQuantity(item, quantity) {
223
+ if (this.validateQuantity(item, quantity)) {
224
+ firstValueFrom(this._connection.put(this.updateItemQuantityApi(this.findItemByIdVariant(item.variant_id)), { 'quantity': Number(quantity) })).then(res => this.updateCartObj(res) && this.updateCartItemQuantity(item.variant_id, Number(quantity)), err => this.handleError(err));
225
+ }
226
+ }
227
+ /**
228
+ * Maneja el error en caso de que no se pueda agregar al carrito el producto.
229
+ * @param err
230
+ */
231
+ handleError(err) {
232
+ this._toastService.show('operation-error-param');
233
+ this._requestInProcess.next(false);
234
+ }
235
+ /**
236
+ * Actualiza la cantidad del item del producto del carrito.
237
+ * @param variantId ID de la variante para buscar el item.
238
+ * @param quantity Nueva cantidad.
239
+ */
240
+ updateCartItemQuantity(variantId, quantity) {
241
+ //console.log("updateCartItemQuantity", this._items, variantId)
242
+ let newQuantity = this._items.find(item => item.variant_id == variantId).quantity = quantity;
243
+ this._cartItemsSubject.next(this._items);
244
+ this._requestInProcess.next(false);
245
+ this.updateLocalCart();
246
+ this._toastService.show('product-updated', { quantity: newQuantity });
247
+ }
248
+ /**
249
+ * Actualiza los datos del carrito en el localStorage.
250
+ */
251
+ updateLocalCart() {
252
+ this._storage.setItem(this.CART_KEY, this._items);
253
+ }
254
+ /**
255
+ * Actualiza el carrito. Emite evento de analitics.
256
+ * Actualiza todo lo relacionado al cupón.
257
+ * @param cart Respuesta producida por el enpoint con información del carrito.
258
+ * @param emitEvent
259
+ * @returns
260
+ */
261
+ updateCartObj(cart, emitEvent = true) {
262
+ this._cartSubject.next(cart);
263
+ emitEvent && this._analyticsService.callEvent('add_to_cart', cart);
264
+ //this._promotionsSubject.next(this.orderUtils.getPromotions(cart, true));
265
+ cart.couponCode
266
+ ? this.formatCoupon(cart)
267
+ : this._couponSubject.next(null);
268
+ return true;
269
+ }
270
+ /**
271
+ * Aplicar un mejor formato a los datos de los cupones aplicados.
272
+ * @param cart
273
+ */
274
+ formatCoupon(cart) {
275
+ let current_coupon = this._couponSubject.value;
276
+ let coupon = { code: cart.couponCode };
277
+ try {
278
+ const key = Object.keys(cart.cartDiscounts)[0];
279
+ coupon = {
280
+ ...coupon,
281
+ amount: (cart.cartDiscounts && cart.cartDiscounts[key].amount.current) || 0,
282
+ name: (cart.cartDiscounts && cart.cartDiscounts[key].name) || 'no-name'
283
+ };
284
+ }
285
+ catch (e) { }
286
+ (coupon != current_coupon) && this._couponSubject.next(coupon);
287
+ //console.log(coupon);
288
+ }
289
+ /**
290
+ * Retorna el ID del item del carrito.
291
+ * @param variant_id Id de la variante utilizada para buscar el item.
292
+ * @returns
293
+ */
294
+ findItemByIdVariant(variant_id) {
295
+ return this._items.find(item => item.variant_id == variant_id).item_id;
296
+ }
297
+ /**
298
+ * Valida la cantidad para saber si se puede actualizar o no.
299
+ * @param item item del carrito
300
+ * @param quantity cantidad a agregar
301
+ * @returns
302
+ */
303
+ validateQuantity(item, quantity) {
304
+ if ((this.getCountFromItemInCart(item.productCode) + quantity) > item.product.variants[0].maximumItemsQuantity) {
305
+ this._toastService.show('maximum-items-quantity', { quantity: item.product.variants[0].maximumItemsQuantity });
306
+ return false;
307
+ }
308
+ if ((this.getCountFromItemInCart(item.productCode) + quantity) < item.product.variants[0].minimumItemsQuantity) {
309
+ this._toastService.show('minimum-items-quantity', { quantity: item.product.variants[0].minimumItemsQuantity });
310
+ return false;
311
+ }
312
+ return true;
313
+ }
314
+ /**
315
+ * Busca un producto a través de su ID en los items del carrito.
316
+ * @param product_id
317
+ * @returns
318
+ */
319
+ findItem(product_id) { return this._items.find((item) => item.product.id == product_id); }
320
+ /**
321
+ * Elimina un item del carrito en el backend.
322
+ * @param item item a eliminar
323
+ * @param toast indica si se dispara un toast o no. Por defecto en `true`.
324
+ */
325
+ deleteCartItem(item, toast = true) {
326
+ let idItemSearched = this.findItemByIdVariant(item.variant_id);
327
+ //console.log(idItemSearched)
328
+ this._requestInProcess.next(true);
329
+ firstValueFrom(this._connection.delete(this.deleteItemApi(idItemSearched))).then(res => {
330
+ this.removeCartItem(res, item, toast);
331
+ this._requestInProcess.next(false);
332
+ }, err => {
333
+ this.handleError(err);
334
+ this._requestInProcess.next(false);
335
+ });
336
+ }
337
+ /**
338
+ * Elimina un item en carrito de forma local.
339
+ * @param cart Carrito, es decir, respuesta del backend.
340
+ * @param product producto a eliminar
341
+ * @param toast {boolean} para indicar si se dispara un toast o no.
342
+ */
343
+ removeCartItem(cart, product, toast) {
344
+ this.updateCartObj(cart, false);
345
+ this._items.splice(this._items.findIndex(value => value.item_id === product.item_id), 1);
346
+ this._cartItemsSubject.next(this._items);
347
+ toast && this._requestInProcess.next(false);
348
+ toast && this._toastService.show('product-removed');
349
+ this.updateLocalCart();
350
+ this._analyticsService.callEvent('remove_from_cart', { ...product, currency: this._consts.currency.code });
351
+ }
352
+ /**
353
+ * Agrega un cupon al carrito.
354
+ * @param value Codigo del cupón.
355
+ */
356
+ addCoupon(value) {
357
+ firstValueFrom(this._connection.put(this.couponApi(), { coupon: value })).then(res => {
358
+ //console.log(res)
359
+ this.updateCartObj(res);
360
+ this._toastService.show('Cupon aplicado');
361
+ }, err => {
362
+ //console.error(err)
363
+ this._toastService.show('invalid-coupon');
364
+ });
365
+ }
366
+ /**
367
+ * Elimina un cupón del carrito.
368
+ */
369
+ removeCoupon() {
370
+ firstValueFrom(this._connection.delete(this.couponApi())).then(res => {
371
+ //console.log(res)
372
+ this.updateCartObj(res);
373
+ });
374
+ }
375
+ /**
376
+ * Retorna un observable con el subtotal del carrito.
377
+ * @returns
378
+ */
379
+ getSubTotalAmount() {
380
+ return this.cart$.pipe(map((cart) => cart?.totals?.items));
381
+ }
382
+ /**
383
+ * Retorna un observable con el total del monto de las promociones aplicadas.
384
+ * @returns
385
+ */
386
+ getTotalPromotionAmount() {
387
+ return this.cart$.pipe(map((cart) => cart?.totals?.promotion));
388
+ }
389
+ /**
390
+ * Retorna un observable con el monto de los impuestos aplicados.
391
+ * @returns
392
+ */
393
+ getTaxesAmount() {
394
+ return this.cart$.pipe(map((cart) => cart?.totals?.taxes > 0 ? cart?.totals?.taxes : 0));
395
+ }
396
+ /**
397
+ * Retorna un observable con el monto total del carrito.
398
+ * @returns
399
+ */
400
+ getTotalAmount() {
401
+ return this.cart$.pipe(map((cart) => cart?.totals?.total));
402
+ }
403
+ /**
404
+ * Retorna el token del carrito.
405
+ * @returns
406
+ */
407
+ getCartToken() {
408
+ return this.cartToken;
409
+ }
410
+ changeHaveToUpdate = (value) => this._haveToUpdate = value;
411
+ clearAndResetCustomerCart() {
412
+ console.log("Clearing and reseting...");
413
+ this.resetCart(this.getCartByCustomer);
414
+ }
415
+ getCartByCustomer = async () => this._connection.post(this.cartItemsApi()).subscribe(res => this.initializeCart(res));
416
+ resetCart = (fn) => {
417
+ this._items = [];
418
+ this._cartSubject.next(null);
419
+ this.updateBalanceAttributes(null);
420
+ this.cartToken = null;
421
+ this._cartItemsSubject.next([]);
422
+ this._count = 0;
423
+ this._localStorage.setItem(this.CART_KEY, "[]");
424
+ this._localStorage.removeItem(this.CART_TOKEN_KEY);
425
+ fn && fn();
426
+ };
427
+ clearAndResetCart() {
428
+ this.resetCart(() => this.getCart);
429
+ }
430
+ updateBalanceAttributes(cartData) {
431
+ const balanceData = {
432
+ allowAnyPaymentMethod: cartData?.allowAnyPaymentMethod ?? false,
433
+ allowExceedBalance: cartData?.allowExceedBalance ?? false,
434
+ creditAmount: cartData?.creditAmount ?? null,
435
+ showMax: cartData?.showMax ?? false,
436
+ showPrice: cartData?.showPrice ?? false,
437
+ remainingCredits: cartData?.creditAmount && cartData?.creditAmount >= cartData?.totals.total
438
+ ? cartData?.creditAmount - cartData?.totals.total
439
+ : 0,
440
+ };
441
+ this._balanceCustomerSubject.next(balanceData);
442
+ console.log(balanceData);
443
+ }
444
+ addToLot(product, quantity, variant_id, id, order_item_id, lot_quantity, unit_price, unit_total, ajustement_total, total_lot, lot_status, date_request, notes, shipping_address_id, shipping_address_name, action) {
445
+ if (!this._authService.isAbleToBuy()) {
446
+ this._toastService.show('must-select-customer');
447
+ return;
448
+ }
449
+ let added = '';
450
+ !added && this._connection.post(this.addItemApi(), { productCode: product.id, quantity: quantity, variantCode: variant_id, id: id || '', order_item_id: order_item_id || '', lot_quantity: lot_quantity || '', unit_price: unit_price || '', unit_total: unit_total || '', ajustement_total: ajustement_total || '', total_lot: total_lot || '', lot_status: lot_status || '', date_request: date_request || '', notes: notes || '', shipping_address_id: shipping_address_id || '', shipping_address_name: shipping_address_name || '', action: action || 'newlot' })
451
+ .subscribe({
452
+ next: (res) => this.appendToCart(res),
453
+ error: (err) => this.handleError(err)
454
+ });
455
+ }
456
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CartService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
457
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CartService, providedIn: 'root' });
458
+ }
459
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CartService, decorators: [{
460
+ type: Injectable,
461
+ args: [{
462
+ providedIn: 'root'
463
+ }]
464
+ }], ctorParameters: () => [] });
465
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUlyRSxNQUFNLE9BQU8sV0FBVztJQUNmLFlBQVksR0FBZ0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELGFBQWEsR0FBaUIsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ25ELFdBQVcsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0QsVUFBVSxHQUF3QixNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM5RCxpQkFBaUIsR0FBcUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDL0QsYUFB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LFFBQVEsRUFBRSxDQUFDO2FBQ2ppQixTQUFTLENBQUM7WUFDbkIsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztZQUNyQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1NBQ3JDLENBQUMsQ0FBQztJQUNGLENBQUM7dUdBNWRRLFdBQVc7MkdBQVgsV0FBVyxjQUZYLE1BQU07OzJGQUVOLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJhbGFuY2VDdXN0b21lciwgQ2FydEl0ZW0sIElDb3Vwb24sIFByb2R1Y3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4vdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXBpJztcclxuaW1wb3J0IHsgQXBpQ29uc3RhbnRzU2VydmljZSwgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZpcnN0VmFsdWVGcm9tLCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4vYW5hbHl0aWNzJztcclxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuL2NoYW5uZWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE5neExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL25neC1sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xyXG5ASW5qZWN0YWJsZSh7XHJcblx0cHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXJ0U2VydmljZSB7XHJcblx0cHJpdmF0ZSBfYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF90b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2Nvbm5lY3Rpb246IENvbm5lY3Rpb25TZXJ2aWNlID0gaW5qZWN0KENvbm5lY3Rpb25TZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9hcGlDb25zdHM6IEFwaUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQXBpQ29uc3RhbnRzU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSA9IGluamVjdChBbmFseXRpY3NTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9sb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoTG9jYWxTdG9yYWdlU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlID0gaW5qZWN0KENoYW5uZWxTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9jb25zdHM6IENvcmVDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9zdG9yYWdlOiBOZ3hMb2NhbFN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KE5neExvY2FsU3RvcmFnZVNlcnZpY2UpO1xyXG5cclxuXHRwcml2YXRlIF9jYXJ0U3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG5cdHByaXZhdGUgX3Byb21vdGlvbnNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xyXG5cdHByaXZhdGUgX2NvdXBvblN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuXHRwcml2YXRlIF9jYXJ0SXRlbXNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Q2FydEl0ZW1bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhcnRJdGVtW10+KFtdKVxyXG5cdHByaXZhdGUgX3JlcXVlc3RJblByb2Nlc3M6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG5cdHByaXZhdGUgX2JhbGFuY2VDdXN0b21lclN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxCYWxhbmNlQ3VzdG9tZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxCYWxhbmNlQ3VzdG9tZXI+KHtcclxuICAgICAgICBhbGxvd0FueVBheW1lbnRNZXRob2Q6IGZhbHNlLFxyXG4gICAgICAgIGFsbG93RXhjZWVkQmFsYW5jZTogZmFsc2UsXHJcbiAgICAgICAgY3JlZGl0QW1vdW50OiAwLFxyXG4gICAgICAgIHNob3dNYXg6IGZhbHNlLFxyXG4gICAgICAgIHNob3dQcmljZTogZmFsc2UsXHJcbiAgICAgICAgcmVtYWluaW5nQ3JlZGl0czogMCxcclxuICAgIH0pO1xyXG5cclxuXHRwcml2YXRlIHJlYWRvbmx5IENBUlRfS0VZOiBzdHJpbmcgPSAnY2FydCc7XHJcblx0cHJpdmF0ZSByZWFkb25seSBDQVJUX1RPS0VOX0tFWTogc3RyaW5nID0gJ2NhcnRfdG9rZW4nO1xyXG5cclxuXHRwcml2YXRlIF9pdGVtczogYW55W10gPSBbXTtcclxuXHRwcml2YXRlIF9jb3VudDogbnVtYmVyID0gMDtcclxuXHRwdWJsaWMgY2FydFRva2VuOiBzdHJpbmcgfCBudWxsID0gJyc7XHJcblx0cHVibGljIGNoYW5uZWxDb25maWc6IGFueSA9IHt9O1xyXG5cdHByaXZhdGUgX2xvY2FsZSA9IFwiXCI7XHJcblx0cHVibGljIGNhcnRJdGVtcyQgPSB0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKGl0ZW1zID0+IHRoaXMuc3dpdGNoUHJpY2VJbkNhcnRJdGVtKGl0ZW1zKSkpXHJcblx0cHVibGljIGNvdXBvbiQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX2NvdXBvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblx0cHVibGljIGNhcnQkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9jYXJ0U3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHRwdWJsaWMgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cdHByaXZhdGUgX2hhdmVUb1VwZGF0ZSA9IHRydWU7XHJcblxyXG5cdC8vQVBJIFVSTFxyXG5cdHByaXZhdGUgX2NhcnRCYXNlVXJsOiBzdHJpbmcgPSBgJHt0aGlzLl9hcGlDb25zdHMuU0hPUF9BUElfVVJMfSR7dGhpcy5fYXBpQ29uc3RzLkNIQU5ORUx9L2NhcnRzYDtcclxuXHJcblx0cHVibGljIHVwZGF0ZUl0ZW1RdWFudGl0eUFwaShpdGVtX2lkOiBhbnkpIHsgcmV0dXJuIHRoaXMuX2NhcnRCYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0VG9rZW4gKyAnL2l0ZW1zLycgKyBpdGVtX2lkICsgJz9sb2NhbGU9JyArIHRoaXMuX2FwaUNvbnN0cy5MT0NBTEU7IH1cclxuXHRwdWJsaWMgYWRkSXRlbUFwaSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvaXRlbXM/bG9jYWxlPScgKyB0aGlzLl9hcGlDb25zdHMuTE9DQUxFIH1cclxuXHRwdWJsaWMgY2FydEl0ZW1zQXBpKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9jYXJ0QmFzZVVybCArICc/bG9jYWxlPScgKyB0aGlzLl9hcGlDb25zdHMuTE9DQUxFIH1cclxuXHRwdWJsaWMgZGVsZXRlSXRlbUFwaShpdGVtX2lkOiBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuX2NhcnRCYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0VG9rZW4gKyAnL2l0ZW1zLycgKyBpdGVtX2lkICsgJz9sb2NhbGU9JyArIHRoaXMuX2FwaUNvbnN0cy5MT0NBTEU7IH1cclxuXHRwdWJsaWMgY291cG9uQXBpKCkgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvY291cG9uJyB9O1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuXHRcdHRoaXMuY2FydFRva2VuID0gdGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DQVJUX1RPS0VOX0tFWSkgfHwgbnVsbDtcclxuXHRcdHRoaXMuaW5pdGlhbGl6ZURhdGFDYXJ0KCk7XHJcblx0XHR0aGlzLl9jaGFubmVsU2VydmljZS5jaGFubmVsJC5zdWJzY3JpYmUocmVzID0+IHRoaXMuY2hhbm5lbENvbmZpZyA9IHJlcylcclxuXHR9XHJcblx0LyoqXHJcblx0ICogSW5pY2lhbGl6YSBlbCBjYXJyaXRvIGNvbiBsb3MgZGF0b3MgZGVsIGxvY2FsIHN0b3JhZ2UgZW4gY2FzbyBkZSBxdWUgZXhpc3RhbiBvIG5vLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgaW5pdGlhbGl6ZURhdGFDYXJ0KCkge1xyXG5cdFx0Y29tYmluZUxhdGVzdChbdGhpcy5fYXV0aFNlcnZpY2UubG9nZ2VkSW4kLCB0aGlzLl9zdG9yYWdlLmdldEl0ZW0odGhpcy5DQVJUX0tFWSldKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRuZXh0OiAoW2xvZ2dlZEluLCB0b2tlbl0pID0+IHtcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGxvZ2dlZEluLCB0b2tlbik7XHJcblx0XHRcdFx0dGhpcy5faXRlbXMgPSB0b2tlbiB8fCBbXTtcclxuXHRcdFx0XHR0aGlzLmdldENhcnQoKVxyXG5cdFx0XHR9XHJcblx0XHR9KVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBPYnRpZW5lIGVsIGNhcnJpdG8gZGVzZGUgZWwgYmFja2VuZCB5IGxvIGluaWNpYWxpemEuIFxyXG5cdCAqIFNpIGV4aXN0ZSBlbCBjYXJ0VG9rZW4geSBoYXkgaXRlbXMgZW4gZWwgY2Fycml0bywgZW52w61hIGVsIHRva2VuIGNvbW8gcGFyw6FtZXRyby5cclxuXHQgKi9cclxuXHRwcml2YXRlIGdldENhcnQoKSB7XHJcblx0XHQvL2NvbnNvbGUud2Fybih0aGlzLl9pdGVtcywgdGhpcy5faXRlbXMubGVuZ3RoLCB0aGlzLmNhcnRUb2tlbilcclxuXHRcdGZpcnN0VmFsdWVGcm9tKFxyXG5cdFx0XHR0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5jYXJ0SXRlbXNBcGkoKSwgKCh0aGlzLmNhcnRUb2tlbiAmJiB0aGlzLl9pdGVtcy5sZW5ndGggPj0gMSkgJiYgeyB0b2tlbjogdGhpcy5jYXJ0VG9rZW4gfSkpXHJcblx0XHQpLnRoZW4oKHJlczogYW55KSA9PiB7XHJcblx0XHRcdC8vY29uc29sZS5sb2cocmVzKVx0XHJcblx0XHRcdHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKVxyXG5cdFx0fSlcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ29uZmlndXJhIGVsIGNhcnJpdG8gY29uIGxvcyBwYXJhbWV0cm9zIGluaWNpYWxlcy5cclxuXHQgKiBAcGFyYW0gcmVzcG9uc2UgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0aW5pdGlhbGl6ZUNhcnQocmVzcG9uc2U6IGFueSk6IGFueSB7XHJcblx0XHR0aGlzLmNhcnRUb2tlbiA9IHJlc3BvbnNlLnRva2VuVmFsdWU7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNBUlRfVE9LRU5fS0VZLCB0aGlzLmNhcnRUb2tlbik7XHJcblx0XHR0aGlzLl9sb2NhbGUgPSByZXNwb25zZS5sb2NhbGU7XHJcblxyXG5cdFx0dGhpcy51cGRhdGVDYXJ0T2JqKHJlc3BvbnNlLCBmYWxzZSk7XHJcblx0XHR0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKHJlc3BvbnNlLml0ZW1zKSk7XHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFjdHVhbGl6YSBsb3MgaXRlbXMgZGVsIGNhcnJpdG8uXHJcblx0ICogQHBhcmFtIGl0ZW1zIFxyXG5cdCAqL1xyXG5cdHVwZGF0ZUNhcnRJdGVtcyhpdGVtczogYW55W10pIHtcclxuXHRcdHRoaXMuX2l0ZW1zID0gaXRlbXM7XHJcblx0XHR0aGlzLl9jb3VudCA9IGl0ZW1zLmxlbmd0aDtcclxuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLl9pdGVtcyk7XHJcblx0XHR0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWdyZWdhIHVuIHByb2R1Y3RvIGFsIGNhcnJpdG8gY29uIGxhIGNhbnRpZGFkIGRlc2VhZGEuIFxyXG5cdCAqIEBwYXJhbSBwcm9kdWN0IFByb2R1Y3RvIGEgYWdyZWdhclxyXG5cdCAqIEBwYXJhbSBxdWFudGl0eSBDYW50aWRhZCBcclxuXHQgKiBAcGFyYW0gdmFyaWFudElkIElkIGRlIGxhIHZhcmlhbnRlXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0YWRkVG9DYXJ0KHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRJZDogc3RyaW5nKSB7XHJcblx0XHQvL2NvbnNvbGUubG9nKHByb2R1Y3QpO1xyXG5cdFx0aWYgKCF0aGlzLl9hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XHJcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXHJcblx0XHRcdHJldHVyblxyXG5cdFx0fVxyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG5cdFx0bGV0IGFkZGVkID0gdGhpcy5hZGRJZkFsbHJlYWR5RXhpc3RzKHByb2R1Y3QsIHZhcmlhbnRJZCwgcXVhbnRpdHkpO1xyXG5cclxuXHRcdGlmICghYWRkZWQpIHtcclxuXHRcdFx0Zmlyc3RWYWx1ZUZyb20oXHJcblx0XHRcdFx0dGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50SWQgfSkpXHJcblx0XHRcdFx0LnRoZW4oXHJcblx0XHRcdFx0XHRyZXMgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBNYW5lamFyIGxhIHJlc3B1ZXN0YSBIVFRQIGV4aXRvc2EgKGPDs2RpZ28gMjAwKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmFwcGVuZFRvQ2FydChyZXMpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygncHJvZHVjdC1hZGRlZCcpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGVyciA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIE1hbmVqYXIgZWwgZXJyb3IgZGUgbGEgbGxhbWFkYSBIVFRQIChjw7NkaWdvIDUwMCB1IG90cm8gZXJyb3IpXHJcblx0XHRcdFx0XHRcdGlmIChlcnIuc3RhdHVzID09PSA1MDApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBDw7NkaWdvIGRlIGVycm9yIDUwMCAodGltZW91dClcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2NhcnQtZXJyb3InKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBPdHJvIGPDs2RpZ28gZGUgZXJyb3JcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2Vycm9yLXNlcnZlcicpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWN0dWFsaXphIGVsIGNhcnJpdG8gYWdyZWdhbmRvIGxvcyBudWV2b3MgaXRlbXMuXHJcblx0ICogQHBhcmFtIGNhcnQgXHJcblx0ICovXHJcblx0YXBwZW5kVG9DYXJ0KGNhcnQ6IGFueSkge1xyXG5cdFx0dGhpcy51cGRhdGVDYXJ0T2JqKGNhcnQpO1xyXG5cdFx0dGhpcy5faXRlbXMgPSB0aGlzLnRyYW5zZm9ybUl0ZW1zKGNhcnQuaXRlbXMpO1xyXG5cdFx0dGhpcy5fY291bnQgPSB0aGlzLl9pdGVtcy5sZW5ndGg7XHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdFx0dGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLl9pdGVtcyk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIE1hcGVhIGxvcyBpdGVtcyBkZWwgY2Fycml0byBwYXJhIGRhcmxlIHVuIG1lam9yIGZvcm1hdG8gc2ltaWxhciBhIGxhIGludGVyZmF6IGBDYXJ0SXRlbWAuXHJcblx0ICogQHBhcmFtIGl0ZW1zIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHRyYW5zZm9ybUl0ZW1zKGl0ZW1zOiBhbnkpOiBhbnlbXSB7XHJcblx0XHRyZXR1cm4gaXRlbXMubWFwKChpdGVtOiBhbnkpID0+IHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRwcm9kdWN0OiBpdGVtLnByb2R1Y3QsXHJcblx0XHRcdFx0dmFyaWFudF9pZDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLmNvZGUsXHJcblx0XHRcdFx0bG90OiBpdGVtLm9yZGVySXRlbUxvdCxcclxuXHRcdFx0XHRxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcclxuXHRcdFx0XHRpdGVtX2lkOiBpdGVtLmlkLFxyXG5cdFx0XHRcdHRvdGFsOiBpdGVtLnRvdGFsXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBDaGVxdWVhIHNpIGVsIHByb2R1Y3RvIHlhIGV4aXN0ZSBlbiBlbCBjYXJyaXRvIGRlIGNvbXByYXMuXHJcblx0ICogQHBhcmFtIHByb2R1Y3QgXHJcblx0ICogQHBhcmFtIHZhcmlhbnRJZCBcclxuXHQgKiBAcGFyYW0gcXVhbnRpdHlBZGQgQ2FudGlkYWQgYSBhZ3JlZ2FyLiBQb3IgZGVmZWN0byBlcyAxLlxyXG5cdCAqL1xyXG5cdGFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdDogUHJvZHVjdCwgdmFyaWFudElkOiBzdHJpbmcsIHF1YW50aXR5QWRkOiBudW1iZXIgPSAxKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5faXRlbXMuZmluZCgoaXRlbTogYW55LCBpbmRleCkgPT4ge1xyXG5cdFx0XHRpZiAoaXRlbS5wcm9kdWN0LmlkID09IHByb2R1Y3QuaWQgJiYgaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRJZCkge1xyXG5cdFx0XHRcdHRoaXMudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIHRoaXMuZmluZEl0ZW0ocHJvZHVjdC5pZCkucXVhbnRpdHkgKyBxdWFudGl0eUFkZCk7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fSlcclxuXHR9XHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSBsYSBjYW50aWRhZCBkZSB1biBwcm9kdWN0byBkZWwgaXRlbSBkZWwgY2Fycml0byBcclxuXHQgKiBAcGFyYW0gY29kZVZhcmlhbnQgY29kaWdvIGRlIGxhIHZhcmlhbnRlLlxyXG5cdCAqIEByZXR1cm5zIGxhIGNhbnRpZGFkIG8gYDBgIGVuIHN1IGRlZmVjdG8uXHJcblx0ICovXHJcblx0Z2V0Q291bnRGcm9tSXRlbUluQ2FydChjb2RlVmFyaWFudDogYW55KTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzLl9pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IGNvZGVWYXJpYW50KT8ucXVhbnRpdHkgfHwgMDtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSB1biBvYnNlcnZhYmxlIGNvbiBsYSBjYW50aWRhZCBkZSBpdGVtcyBlbiBlbCBjYXJyaXRvLlxyXG5cdCAqL1xyXG5cdGdldENvdW50Q2FydEl0ZW1zKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYXJ0SXRlbXMkLnBpcGUobWFwKChjYXJ0SXRlbXMpID0+IGNhcnRJdGVtcz8ubGVuZ3RoKSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIE1hcGVhIGxvcyBwcm9kdWN0b3MgZW4gZWwgY2Fycml0byBwYXJhIGNhbWJpYXIgZWwgcHJlY2lvIG9idGVuaWVuZG8gZGUgbGEgdmFyaWFudGUgeSBzZWxlY2Npb25hbmRvIHNpIGVzXHJcblx0ICogcHJlY2lvIGRlIG9mZXJ0YSBvIGVsIHByZWNpbyBub3JtYWwuXHJcblx0ICogQHBhcmFtIGl0ZW1zIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgc3dpdGNoUHJpY2VJbkNhcnRJdGVtID0gKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG5cdFx0cmV0dXJuIGl0ZW1zLm1hcChcclxuXHRcdFx0aXRlbSA9PiB7XHJcblx0XHRcdFx0aWYgKGl0ZW0ucHJvZHVjdCkge1xyXG5cdFx0XHRcdFx0aXRlbS5wcm9kdWN0LnByaWNlID0gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNhbGVwcmljZSA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBpdGVtXHJcblx0XHRcdH1cclxuXHRcdClcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWN0dWFsaXphIGxhIGNhbnRpZGFkIGRlIHVuIHByb2R1Y3RvIGV4aXN0ZW50ZSBlbiBlbCBjYXJyaXRvLlxyXG5cdCAqIEBwYXJhbSBpdGVtIGVsIGl0ZW0gYSBhY3R1YWxpemFyLlxyXG5cdCAqIEBwYXJhbSBxdWFudGl0eSBsYSBjYW50aWRhZCBudWV2YS5cclxuXHQgKi9cclxuXHR1cGRhdGVJdGVtUXVhbnRpdHkoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5OiBudW1iZXIpIHtcclxuXHRcdGlmICh0aGlzLnZhbGlkYXRlUXVhbnRpdHkoaXRlbSwgcXVhbnRpdHkpKSB7XHJcblx0XHRcdGZpcnN0VmFsdWVGcm9tKFxyXG5cdFx0XHRcdHRoaXMuX2Nvbm5lY3Rpb24ucHV0KHRoaXMudXBkYXRlSXRlbVF1YW50aXR5QXBpKHRoaXMuZmluZEl0ZW1CeUlkVmFyaWFudChpdGVtLnZhcmlhbnRfaWQpKSwgeyAncXVhbnRpdHknOiBOdW1iZXIocXVhbnRpdHkpIH0pKS50aGVuKFxyXG5cdFx0XHRcdFx0cmVzID0+IHRoaXMudXBkYXRlQ2FydE9iaihyZXMpICYmIHRoaXMudXBkYXRlQ2FydEl0ZW1RdWFudGl0eShpdGVtLnZhcmlhbnRfaWQsIE51bWJlcihxdWFudGl0eSkpLFxyXG5cdFx0XHRcdFx0ZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKVxyXG5cdFx0XHRcdClcclxuXHRcdH1cclxuXHR9XHJcblx0LyoqXHJcblx0ICogTWFuZWphIGVsIGVycm9yIGVuIGNhc28gZGUgcXVlIG5vIHNlIHB1ZWRhIGFncmVnYXIgYWwgY2Fycml0byBlbCBwcm9kdWN0by5cclxuXHQgKiBAcGFyYW0gZXJyIFxyXG5cdCAqL1xyXG5cdGhhbmRsZUVycm9yKGVycjogYW55KTogdm9pZCB7XHJcblx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnb3BlcmF0aW9uLWVycm9yLXBhcmFtJyk7XHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBY3R1YWxpemEgbGEgY2FudGlkYWQgZGVsIGl0ZW0gZGVsIHByb2R1Y3RvIGRlbCBjYXJyaXRvLlxyXG5cdCAqIEBwYXJhbSB2YXJpYW50SWQgSUQgZGUgbGEgdmFyaWFudGUgcGFyYSBidXNjYXIgZWwgaXRlbS5cclxuXHQgKiBAcGFyYW0gcXVhbnRpdHkgTnVldmEgY2FudGlkYWQuIFxyXG5cdCAqL1xyXG5cdHVwZGF0ZUNhcnRJdGVtUXVhbnRpdHkodmFyaWFudElkOiBhbnksIHF1YW50aXR5OiBudW1iZXIpOiB2b2lkIHtcclxuXHRcdC8vY29uc29sZS5sb2coXCJ1cGRhdGVDYXJ0SXRlbVF1YW50aXR5XCIsIHRoaXMuX2l0ZW1zLCB2YXJpYW50SWQpXHJcblx0XHRsZXQgbmV3UXVhbnRpdHkgPSB0aGlzLl9pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRJZCkucXVhbnRpdHkgPSBxdWFudGl0eTtcclxuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLl9pdGVtcyk7XHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdFx0dGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuXHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdwcm9kdWN0LXVwZGF0ZWQnLCB7IHF1YW50aXR5OiBuZXdRdWFudGl0eSB9KTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWN0dWFsaXphIGxvcyBkYXRvcyBkZWwgY2Fycml0byBlbiBlbCBsb2NhbFN0b3JhZ2UuIFxyXG5cdCAqL1xyXG5cdHVwZGF0ZUxvY2FsQ2FydCgpIHtcclxuXHRcdHRoaXMuX3N0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNBUlRfS0VZLCB0aGlzLl9pdGVtcylcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWN0dWFsaXphIGVsIGNhcnJpdG8uIEVtaXRlIGV2ZW50byBkZSBhbmFsaXRpY3MuIFxyXG5cdCAqIEFjdHVhbGl6YSB0b2RvIGxvIHJlbGFjaW9uYWRvIGFsIGN1cMOzbi5cclxuXHQgKiBAcGFyYW0gY2FydCBSZXNwdWVzdGEgcHJvZHVjaWRhIHBvciBlbCBlbnBvaW50IGNvbiBpbmZvcm1hY2nDs24gZGVsIGNhcnJpdG8uXHJcblx0ICogQHBhcmFtIGVtaXRFdmVudCBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHR1cGRhdGVDYXJ0T2JqKGNhcnQ6IGFueSwgZW1pdEV2ZW50ID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG5cdFx0dGhpcy5fY2FydFN1YmplY3QubmV4dChjYXJ0KTtcclxuXHRcdGVtaXRFdmVudCAmJiB0aGlzLl9hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnYWRkX3RvX2NhcnQnLCBjYXJ0KTtcclxuXHRcdC8vdGhpcy5fcHJvbW90aW9uc1N1YmplY3QubmV4dCh0aGlzLm9yZGVyVXRpbHMuZ2V0UHJvbW90aW9ucyhjYXJ0LCB0cnVlKSk7XHJcblxyXG5cdFx0Y2FydC5jb3Vwb25Db2RlXHJcblx0XHRcdD8gdGhpcy5mb3JtYXRDb3Vwb24oY2FydClcclxuXHRcdFx0OiB0aGlzLl9jb3Vwb25TdWJqZWN0Lm5leHQobnVsbCk7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQXBsaWNhciB1biBtZWpvciBmb3JtYXRvIGEgbG9zIGRhdG9zIGRlIGxvcyBjdXBvbmVzIGFwbGljYWRvcy5cclxuXHQgKiBAcGFyYW0gY2FydCBcclxuXHQgKi9cclxuXHRmb3JtYXRDb3Vwb24oY2FydDogYW55KSB7XHJcblx0XHRsZXQgY3VycmVudF9jb3Vwb24gPSB0aGlzLl9jb3Vwb25TdWJqZWN0LnZhbHVlO1xyXG5cdFx0bGV0IGNvdXBvbjogSUNvdXBvbiA9IHsgY29kZTogY2FydC5jb3Vwb25Db2RlIH07XHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhjYXJ0LmNhcnREaXNjb3VudHMpWzBdO1xyXG5cdFx0XHRjb3Vwb24gPSB7XHJcblx0XHRcdFx0Li4uY291cG9uLFxyXG5cdFx0XHRcdGFtb3VudDogKGNhcnQuY2FydERpc2NvdW50cyAmJiBjYXJ0LmNhcnREaXNjb3VudHNba2V5XS5hbW91bnQuY3VycmVudCkgfHwgMCxcclxuXHRcdFx0XHRuYW1lOiAoY2FydC5jYXJ0RGlzY291bnRzICYmIGNhcnQuY2FydERpc2NvdW50c1trZXldLm5hbWUpIHx8ICduby1uYW1lJ1xyXG5cdFx0XHR9O1xyXG5cdFx0fSBjYXRjaCAoZSkgeyB9XHJcblx0XHQoY291cG9uICE9IGN1cnJlbnRfY291cG9uKSAmJiB0aGlzLl9jb3Vwb25TdWJqZWN0Lm5leHQoY291cG9uKTtcclxuXHRcdC8vY29uc29sZS5sb2coY291cG9uKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogUmV0b3JuYSBlbCBJRCBkZWwgaXRlbSBkZWwgY2Fycml0by5cclxuXHQgKiBAcGFyYW0gdmFyaWFudF9pZCBJZCBkZSBsYSB2YXJpYW50ZSB1dGlsaXphZGEgcGFyYSBidXNjYXIgZWwgaXRlbS5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRmaW5kSXRlbUJ5SWRWYXJpYW50KHZhcmlhbnRfaWQ6IGFueSk6IGFueSB7XHJcblx0XHRyZXR1cm4gdGhpcy5faXRlbXMuZmluZChpdGVtID0+IGl0ZW0udmFyaWFudF9pZCA9PSB2YXJpYW50X2lkKSEuaXRlbV9pZFxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBWYWxpZGEgbGEgY2FudGlkYWQgcGFyYSBzYWJlciBzaSBzZSBwdWVkZSBhY3R1YWxpemFyIG8gbm8uXHJcblx0ICogQHBhcmFtIGl0ZW0gaXRlbSBkZWwgY2Fycml0b1xyXG5cdCAqIEBwYXJhbSBxdWFudGl0eSBjYW50aWRhZCBhIGFncmVnYXJcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHR2YWxpZGF0ZVF1YW50aXR5KGl0ZW06IGFueSwgcXVhbnRpdHk6IGFueSkge1xyXG5cdFx0aWYgKCh0aGlzLmdldENvdW50RnJvbUl0ZW1JbkNhcnQoaXRlbS5wcm9kdWN0Q29kZSkgKyBxdWFudGl0eSkgPiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWF4aW11bUl0ZW1zUXVhbnRpdHkpIHtcclxuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ21heGltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWF4aW11bUl0ZW1zUXVhbnRpdHkgfSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHR9XHJcblx0XHRpZiAoKHRoaXMuZ2V0Q291bnRGcm9tSXRlbUluQ2FydChpdGVtLnByb2R1Y3RDb2RlKSArIHF1YW50aXR5KSA8IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSkge1xyXG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbWluaW11bS1pdGVtcy1xdWFudGl0eScsIHsgcXVhbnRpdHk6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSB9KVxyXG5cdFx0XHRyZXR1cm4gZmFsc2VcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEJ1c2NhIHVuIHByb2R1Y3RvIGEgdHJhdsOpcyBkZSBzdSBJRCBlbiBsb3MgaXRlbXMgZGVsIGNhcnJpdG8uXHJcblx0ICogQHBhcmFtIHByb2R1Y3RfaWQgXHJcblx0ICogQHJldHVybnNcclxuXHQgKi9cclxuXHRmaW5kSXRlbShwcm9kdWN0X2lkOiBhbnkpOiBhbnkgeyByZXR1cm4gdGhpcy5faXRlbXMuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnByb2R1Y3QuaWQgPT0gcHJvZHVjdF9pZCkgfVxyXG5cdC8qKlxyXG5cdCAqIEVsaW1pbmEgdW4gaXRlbSBkZWwgY2Fycml0byBlbiBlbCBiYWNrZW5kLlxyXG5cdCAqIEBwYXJhbSBpdGVtIGl0ZW0gYSBlbGltaW5hclxyXG5cdCAqIEBwYXJhbSB0b2FzdCBpbmRpY2Egc2kgc2UgZGlzcGFyYSB1biB0b2FzdCAgbyBuby4gUG9yIGRlZmVjdG8gZW4gYHRydWVgLlxyXG5cdCAqL1xyXG5cdGRlbGV0ZUNhcnRJdGVtKGl0ZW06IGFueSwgdG9hc3Q6IGJvb2xlYW4gPSB0cnVlKSB7XHJcblx0XHRsZXQgaWRJdGVtU2VhcmNoZWQgPSB0aGlzLmZpbmRJdGVtQnlJZFZhcmlhbnQoaXRlbS52YXJpYW50X2lkKVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhpZEl0ZW1TZWFyY2hlZClcclxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuXHRcdGZpcnN0VmFsdWVGcm9tKHRoaXMuX2Nvbm5lY3Rpb24uZGVsZXRlKHRoaXMuZGVsZXRlSXRlbUFwaShpZEl0ZW1TZWFyY2hlZCkpKS50aGVuKFxyXG5cdFx0XHRyZXMgPT4ge1xyXG5cdFx0XHRcdHRoaXMucmVtb3ZlQ2FydEl0ZW0ocmVzLCBpdGVtLCB0b2FzdCk7XHJcblx0XHRcdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyID0+IHtcclxuXHRcdFx0XHR0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcblx0XHRcdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHRcdFx0fVxyXG5cdFx0KVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBFbGltaW5hIHVuIGl0ZW0gZW4gY2Fycml0byBkZSBmb3JtYSBsb2NhbC4gXHJcblx0ICogQHBhcmFtIGNhcnQgQ2Fycml0bywgZXMgZGVjaXIsIHJlc3B1ZXN0YSBkZWwgYmFja2VuZC5cclxuXHQgKiBAcGFyYW0gcHJvZHVjdCBwcm9kdWN0byBhIGVsaW1pbmFyXHJcblx0ICogQHBhcmFtIHRvYXN0IHtib29sZWFufSBwYXJhIGluZGljYXIgc2kgc2UgZGlzcGFyYSB1biB0b2FzdCBvIG5vLiBcclxuXHQgKi9cclxuXHRyZW1vdmVDYXJ0SXRlbShjYXJ0OiBhbnksIHByb2R1Y3Q6IGFueSwgdG9hc3Q6IGJvb2xlYW4pIHtcclxuXHRcdHRoaXMudXBkYXRlQ2FydE9iaihjYXJ0LCBmYWxzZSk7XHJcblx0XHR0aGlzLl9pdGVtcy5zcGxpY2UodGhpcy5faXRlbXMuZmluZEluZGV4KHZhbHVlID0+IHZhbHVlLml0ZW1faWQgPT09IHByb2R1Y3QuaXRlbV9pZCksIDEpO1xyXG5cdFx0dGhpcy5fY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuX2l0ZW1zKTtcclxuXHRcdHRvYXN0ICYmIHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcblx0XHR0b2FzdCAmJiB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygncHJvZHVjdC1yZW1vdmVkJyk7XHJcblx0XHR0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xyXG5cdFx0dGhpcy5fYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3JlbW92ZV9mcm9tX2NhcnQnLCB7IC4uLnByb2R1Y3QsIGN1cnJlbmN5OiB0aGlzLl9jb25zdHMuY3VycmVuY3kuY29kZSB9KVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBZ3JlZ2EgdW4gY3Vwb24gYWwgY2Fycml0by5cclxuXHQgKiBAcGFyYW0gdmFsdWUgQ29kaWdvIGRlbCBjdXDDs24uXHJcblx0ICovXHJcblx0YWRkQ291cG9uKHZhbHVlOiBzdHJpbmcpIHtcclxuXHRcdGZpcnN0VmFsdWVGcm9tKHRoaXMuX2Nvbm5lY3Rpb24ucHV0KHRoaXMuY291cG9uQXBpKCksIHsgY291cG9uOiB2YWx1ZSB9KSkudGhlbihcclxuXHRcdFx0cmVzID0+IHtcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKHJlcylcclxuXHRcdFx0XHR0aGlzLnVwZGF0ZUNhcnRPYmoocmVzKVxyXG5cdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdDdXBvbiBhcGxpY2FkbycpXHJcblx0XHRcdH0sXHJcblx0XHRcdGVyciA9PiB7XHJcblx0XHRcdFx0Ly9jb25zb2xlLmVycm9yKGVycikgXHJcblx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2ludmFsaWQtY291cG9uJylcclxuXHRcdFx0fVxyXG5cdFx0KVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBFbGltaW5hIHVuIGN1cMOzbiBkZWwgY2Fycml0by4gXHJcblx0ICovXHJcblx0cmVtb3ZlQ291cG9uKCkge1xyXG5cdFx0Zmlyc3RWYWx1ZUZyb20odGhpcy5fY29ubmVjdGlvbi5kZWxldGUodGhpcy5jb3Vwb25BcGkoKSkpLnRoZW4oXHJcblx0XHRcdHJlcyA9PiB7XHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhyZXMpXHJcblx0XHRcdFx0dGhpcy51cGRhdGVDYXJ0T2JqKHJlcylcclxuXHRcdFx0fVxyXG5cdFx0KVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIHVuIG9ic2VydmFibGUgY29uIGVsIHN1YnRvdGFsIGRlbCBjYXJyaXRvLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGdldFN1YlRvdGFsQW1vdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYXJ0JC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy5pdGVtcykpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIHVuIG9ic2VydmFibGUgY29uIGVsIHRvdGFsIGRlbCBtb250byBkZSBsYXMgcHJvbW9jaW9uZXMgYXBsaWNhZGFzLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGdldFRvdGFsUHJvbW90aW9uQW1vdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYXJ0JC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy5wcm9tb3Rpb24pKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogUmV0b3JuYSB1biBvYnNlcnZhYmxlIGNvbiBlbCBtb250byBkZSBsb3MgaW1wdWVzdG9zIGFwbGljYWRvcy5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRnZXRUYXhlc0Ftb3VudCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FydCQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8udGF4ZXMgPiAwID8gY2FydD8udG90YWxzPy50YXhlcyA6IDApKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogUmV0b3JuYSB1biBvYnNlcnZhYmxlIGNvbiBlbCBtb250byB0b3RhbCBkZWwgY2Fycml0by5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRnZXRUb3RhbEFtb3VudCgpIHtcclxuXHRcdHJldHVybiB0aGlzLmNhcnQkLnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRvdGFsKSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFJldG9ybmEgZWwgdG9rZW4gZGVsIGNhcnJpdG8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Z2V0Q2FydFRva2VuKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FydFRva2VuO1xyXG5cdH1cclxuXHRjaGFuZ2VIYXZlVG9VcGRhdGUgPSAodmFsdWU6IGFueSkgPT4gdGhpcy5faGF2ZVRvVXBkYXRlID0gdmFsdWU7XHJcblx0Y2xlYXJBbmRSZXNldEN1c3RvbWVyQ2FydCgpIHtcclxuXHRcdGNvbnNvbGUubG9nKFwiQ2xlYXJpbmcgYW5kIHJlc2V0aW5nLi4uXCIpXHJcblx0XHR0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnRCeUN1c3RvbWVyKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDYXJ0QnlDdXN0b21lciA9IGFzeW5jICgpID0+XHJcblx0XHR0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5jYXJ0SXRlbXNBcGkoKSkuc3Vic2NyaWJlKFxyXG5cdFx0XHRyZXMgPT4gdGhpcy5pbml0aWFsaXplQ2FydChyZXMpXHJcblx0XHQpXHJcblx0cHJpdmF0ZSByZXNldENhcnQgPSAoZm4/OiBhbnkpID0+IHtcclxuXHRcdHRoaXMuX2l0ZW1zID0gW107XHJcblx0XHR0aGlzLl9jYXJ0U3ViamVjdC5uZXh0KG51bGwpO1xyXG5cdFx0dGhpcy51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhudWxsKTtcclxuXHRcdHRoaXMuY2FydFRva2VuID0gbnVsbDtcclxuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dChbXSk7XHJcblx0XHR0aGlzLl9jb3VudCA9IDA7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNBUlRfS0VZLCBcIltdXCIpO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DQVJUX1RPS0VOX0tFWSk7XHJcblx0XHRmbiAmJiBmbigpO1xyXG5cdH1cclxuXHRjbGVhckFuZFJlc2V0Q2FydCgpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Q2FydCgoKSA9PiB0aGlzLmdldENhcnQpO1xyXG4gICAgfVxyXG5cclxuXHRwdWJsaWMgdXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMoY2FydERhdGE6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGJhbGFuY2VEYXRhID0ge1xyXG4gICAgICAgICAgICBhbGxvd0FueVBheW1lbnRNZXRob2Q6IGNhcnREYXRhPy5hbGxvd0FueVBheW1lbnRNZXRob2QgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgIGFsbG93RXhjZWVkQmFsYW5jZTogY2FydERhdGE/LmFsbG93RXhjZWVkQmFsYW5jZSA/PyBmYWxzZSxcclxuICAgICAgICAgICAgY3JlZGl0QW1vdW50OiBjYXJ0RGF0YT8uY3JlZGl0QW1vdW50ID8/IG51bGwsXHJcbiAgICAgICAgICAgIHNob3dNYXg6IGNhcnREYXRhPy5zaG93TWF4ID8/IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93UHJpY2U6IGNhcnREYXRhPy5zaG93UHJpY2UgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgIHJlbWFpbmluZ0NyZWRpdHM6IGNhcnREYXRhPy5jcmVkaXRBbW91bnQgJiYgY2FydERhdGE/LmNyZWRpdEFtb3VudCA+PSBjYXJ0RGF0YT8udG90YWxzLnRvdGFsXHJcbiAgICAgICAgICAgICAgICA/IGNhcnREYXRhPy5jcmVkaXRBbW91bnQgLSBjYXJ0RGF0YT8udG90YWxzLnRvdGFsXHJcbiAgICAgICAgICAgICAgICA6IDAsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5uZXh0KGJhbGFuY2VEYXRhKTtcclxuXHRcdGNvbnNvbGUubG9nKGJhbGFuY2VEYXRhKVxyXG4gICAgfVxyXG5cdGFkZFRvTG90KHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRfaWQ6IGFueSwgaWQ/OiBudW1iZXIsIG9yZGVyX2l0ZW1faWQ/OiBhbnksIGxvdF9xdWFudGl0eT86IGFueSwgdW5pdF9wcmljZT86IGFueSwgdW5pdF90b3RhbD86IGFueSwgYWp1c3RlbWVudF90b3RhbD86IGFueSwgdG90YWxfbG90PzogbnVtYmVyLCBsb3Rfc3RhdHVzPzogc3RyaW5nLCBkYXRlX3JlcXVlc3Q/OiBzdHJpbmcsIG5vdGVzPzogc3RyaW5nLCBzaGlwcGluZ19hZGRyZXNzX2lkPzogbnVtYmVyLCBzaGlwcGluZ19hZGRyZXNzX25hbWU/OiBzdHJpbmcsIGFjdGlvbj86IHN0cmluZyl7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGFkZGVkID0gJyc7XHJcbiAgICAgICAgIWFkZGVkICYmIHRoaXMuX2Nvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogcHJvZHVjdC5pZCwgcXVhbnRpdHk6IHF1YW50aXR5LCB2YXJpYW50Q29kZTogdmFyaWFudF9pZCwgaWQ6IGlkIHx8ICcnLCBvcmRlcl9pdGVtX2lkOiBvcmRlcl9pdGVtX2lkIHx8ICcnLCBsb3RfcXVhbnRpdHk6IGxvdF9xdWFudGl0eSB8fCAnJywgdW5pdF9wcmljZTogdW5pdF9wcmljZSB8fCAnJywgdW5pdF90b3RhbDogdW5pdF90b3RhbCB8fCAnJywgYWp1c3RlbWVudF90b3RhbDogYWp1c3RlbWVudF90b3RhbCB8fCAnJywgdG90YWxfbG90OiB0b3RhbF9sb3QgfHwgJycsIGxvdF9zdGF0dXM6IGxvdF9zdGF0dXMgfHwgJycsIGRhdGVfcmVxdWVzdDogZGF0ZV9yZXF1ZXN0IHx8ICcnLCBub3Rlczogbm90ZXMgfHwgJycsIHNoaXBwaW5nX2FkZHJlc3NfaWQ6IHNoaXBwaW5nX2FkZHJlc3NfaWQgfHwgJycsIHNoaXBwaW5nX2FkZHJlc3NfbmFtZTogc2hpcHBpbmdfYWRkcmVzc19uYW1lIHx8ICcnLCBhY3Rpb246IGFjdGlvbiB8fCAnbmV3bG90JyB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuXHRcdFx0XHRuZXh0OiAocmVzKSA9PiB0aGlzLmFwcGVuZFRvQ2FydChyZXMpLFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycilcclxuXHRcdFx0fSk7XHJcbiAgICB9XHJcbn1cclxuIl19