ng-easycommerce 0.0.613 → 0.0.615

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 (595) hide show
  1. package/README.md +973 -969
  2. package/assets/bamboo.html +145 -145
  3. package/assets/bancardCatastro.html +49 -49
  4. package/assets/bancardFrameBase.html +104 -104
  5. package/assets/cecaFrameRedirectBase.html +172 -172
  6. package/assets/decidirFormEc.html +519 -519
  7. package/assets/docs/COOKIES.md +158 -158
  8. package/assets/docs/Parametros-Frontend.md +56 -56
  9. package/assets/ec-i18n/ct.json +295 -295
  10. package/assets/ec-i18n/en.json +0 -0
  11. package/assets/ec-i18n/es.json +411 -411
  12. package/assets/ec-i18n/fr.json +0 -0
  13. package/assets/ec-i18n/gl.json +295 -295
  14. package/assets/ec-i18n/pr.json +295 -295
  15. package/assets/images/whatsapp.png +0 -0
  16. package/assets/mpFrameRedirectBase.html +114 -114
  17. package/assets/recaptcha/recaptcha-site-keys.json +3 -3
  18. package/assets/recaptcha/recaptcha-sites-prod.json +38 -38
  19. package/assets/recaptcha/recaptcha-sites.json +52 -52
  20. package/assets/redirect.html +62 -62
  21. package/assets/redsysAuthVdosBase.html +78 -78
  22. package/assets/redsysAuthVunoBase.html +84 -84
  23. package/assets/redsysFrameRedirectBase.html +102 -102
  24. package/assets/redsysFrameRedirectOutBase.html +102 -102
  25. package/assets/redsysFrameSendBase.html +71 -71
  26. package/assets/redsysProBase.html +399 -399
  27. package/assets/redsysStateBase.html +63 -63
  28. package/assets/scss/_colors.scss +17 -17
  29. package/assets/scss/_styles.scss +22 -22
  30. package/assets/svg/chevron-left-black.svg +61 -61
  31. package/assets/svg/chevron-right-black.svg +61 -61
  32. package/bundles/ng-easycommerce.umd.js +19681 -19681
  33. package/bundles/ng-easycommerce.umd.js.map +1 -1
  34. package/bundles/ng-easycommerce.umd.min.js +1 -1
  35. package/bundles/ng-easycommerce.umd.min.js.map +1 -1
  36. package/esm2015/lib/api/connection.service.js +77 -77
  37. package/esm2015/lib/classes/checkout/step-service.js +39 -39
  38. package/esm2015/lib/classes/checkout/step.js +22 -22
  39. package/esm2015/lib/classes/checkout-process-state.js +2 -2
  40. package/esm2015/lib/classes/component-helper.js +16 -16
  41. package/esm2015/lib/classes/filters/AttributesFilter.js +61 -61
  42. package/esm2015/lib/classes/filters/CategoryFilter.js +54 -54
  43. package/esm2015/lib/classes/filters/DinamycsFilter.js +58 -58
  44. package/esm2015/lib/classes/filters/Filter.js +75 -75
  45. package/esm2015/lib/classes/filters/PriceRangeFilter.js +51 -51
  46. package/esm2015/lib/classes/filters/SortFilter.js +79 -79
  47. package/esm2015/lib/classes/user-role-type.js +1 -1
  48. package/esm2015/lib/classes/user.js +108 -108
  49. package/esm2015/lib/core.consts.js +414 -414
  50. package/esm2015/lib/ec-component/account-ec/account-ec.component.js +45 -45
  51. package/esm2015/lib/ec-component/account-ec/order-ec/order-ec.component.js +115 -115
  52. package/esm2015/lib/ec-component/account-ec/orders-list-ec/orders-list-ec.component.js +192 -192
  53. package/esm2015/lib/ec-component/auth-ec/auth-ec.component.js +115 -115
  54. package/esm2015/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.js +44 -44
  55. package/esm2015/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.js +58 -58
  56. package/esm2015/lib/ec-component/auth-ec/login-form-ec/login-form-ec.component.js +108 -108
  57. package/esm2015/lib/ec-component/auth-ec/register-form-ec/register-form-ec.component.js +168 -168
  58. package/esm2015/lib/ec-component/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.js +165 -165
  59. package/esm2015/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.js +78 -78
  60. package/esm2015/lib/ec-component/blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component.js +140 -140
  61. package/esm2015/lib/ec-component/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.js +110 -110
  62. package/esm2015/lib/ec-component/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.js +138 -138
  63. package/esm2015/lib/ec-component/blocks-ec/block-html-ec/block-html-ec.component.js +38 -38
  64. package/esm2015/lib/ec-component/blocks-ec/block-newsletter-ec/contact-form-news-ec.component.js +152 -152
  65. package/esm2015/lib/ec-component/blocks-ec/block-products-ec/block-products-ec.component.js +119 -119
  66. package/esm2015/lib/ec-component/blocks-ec/blocks-ec.component.js +70 -70
  67. package/esm2015/lib/ec-component/build-your-ec/build-your-ec.component.js +305 -305
  68. package/esm2015/lib/ec-component/build-your-ec/product-found-ec/product-found-ec.component.js +85 -85
  69. package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +404 -404
  70. package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +152 -152
  71. package/esm2015/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +424 -424
  72. package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +103 -103
  73. package/esm2015/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +146 -146
  74. package/esm2015/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +112 -112
  75. package/esm2015/lib/ec-component/checkout-ec/step-ec/step-ec.component.js +53 -53
  76. package/esm2015/lib/ec-component/checkout-ec/success-ec/success-ec.component.js +66 -66
  77. package/esm2015/lib/ec-component/checkout-error-ec/checkout-error-ec.component.js +80 -80
  78. package/esm2015/lib/ec-component/collection-ec/collection-ec.component.js +220 -220
  79. package/esm2015/lib/ec-component/compared-products-ec/compared-products-ec.component.js +186 -186
  80. package/esm2015/lib/ec-component/cookies-ec/cookies-ec.component.js +109 -109
  81. package/esm2015/lib/ec-component/cookies-ec/modal-config-ec/modal-config-ec.component.js +32 -32
  82. package/esm2015/lib/ec-component/cookies-ec/modal-cookies-ec/modal-cookies-ec.component.js +34 -34
  83. package/esm2015/lib/ec-component/cookies-ec/sidebar-cookies-ec/sidebar-cookies-ec.component.js +34 -34
  84. package/esm2015/lib/ec-component/cookies-ec/toast-cookies-ec/toast-cookies-ec.component.js +35 -35
  85. package/esm2015/lib/ec-component/coupon-ec/coupon-ec.component.js +53 -53
  86. package/esm2015/lib/ec-component/faqs-content-ec/faqs-content-ec.component.js +49 -49
  87. package/esm2015/lib/ec-component/filters-ec/filters-ec.component.js +152 -152
  88. package/esm2015/lib/ec-component/filters-top-ec/filters-top-ec.component.js +102 -102
  89. package/esm2015/lib/ec-component/footer-ec/footer-ec.component.js +82 -82
  90. package/esm2015/lib/ec-component/header-ec/header-ec.component.js +199 -199
  91. package/esm2015/lib/ec-component/home-ec/home-ec.component.js +37 -37
  92. package/esm2015/lib/ec-component/index.js +244 -244
  93. package/esm2015/lib/ec-component/login-ec/login-ec.component.js +102 -102
  94. package/esm2015/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.js +90 -90
  95. package/esm2015/lib/ec-component/password-reset-ec/password-reset-ec.component.js +103 -103
  96. package/esm2015/lib/ec-component/product-detail-ec/product-detail-ec.component.js +172 -172
  97. package/esm2015/lib/ec-component/product-ec/product-ec.component.js +140 -140
  98. package/esm2015/lib/ec-component/related-products-ec/related-products-ec.component.js +94 -94
  99. package/esm2015/lib/ec-component/reviews-ec/reviews-ec.component.js +69 -69
  100. package/esm2015/lib/ec-component/reviews-form-ec/reviews-form-ec.component.js +138 -138
  101. package/esm2015/lib/ec-component/section-container-ec/section-container-ec.component.js +86 -86
  102. package/esm2015/lib/ec-component/seller-dashboard-container-ec/seller-dashboard-container-ec.component.js +130 -130
  103. package/esm2015/lib/ec-component/share-block-ec/share-block-ec.component.js +149 -149
  104. package/esm2015/lib/ec-component/sidebar-ec/sidebar-ec.component.js +133 -133
  105. package/esm2015/lib/ec-component/stores-ec/stores-ec.component.js +192 -192
  106. package/esm2015/lib/ec-component/variants-ec/variants-ec.component.js +56 -56
  107. package/esm2015/lib/ec-component/widgets-ec/bamboo-ec/bamboo-ec.component.js +205 -205
  108. package/esm2015/lib/ec-component/widgets-ec/bancard-catastro-ec/bancard-catastro-ec.component.js +296 -296
  109. package/esm2015/lib/ec-component/widgets-ec/bancard-ec/bancard-ec.component.js +154 -154
  110. package/esm2015/lib/ec-component/widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component.js +144 -144
  111. package/esm2015/lib/ec-component/widgets-ec/cart-load-ec/cart-load-ec.component.js +49 -49
  112. package/esm2015/lib/ec-component/widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component.js +133 -133
  113. package/esm2015/lib/ec-component/widgets-ec/culqi-ec/culqi-ec.component.js +152 -152
  114. package/esm2015/lib/ec-component/widgets-ec/decidir-ec/decidir-ec.component.js +175 -175
  115. package/esm2015/lib/ec-component/widgets-ec/loading-full-ec/loading-full-ec.component.js +30 -30
  116. package/esm2015/lib/ec-component/widgets-ec/loading-inline-ec/loading-inline-ec.component.js +26 -26
  117. package/esm2015/lib/ec-component/widgets-ec/loading-section-ec/loading-section-ec.component.js +21 -21
  118. package/esm2015/lib/ec-component/widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component.js +156 -156
  119. package/esm2015/lib/ec-component/widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component.js +368 -368
  120. package/esm2015/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.js +151 -151
  121. package/esm2015/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +178 -178
  122. package/esm2015/lib/ec-component/widgets-ec/place-to-pay-ec/place-to-pay-ec.component.js +126 -125
  123. package/esm2015/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +98 -99
  124. package/esm2015/lib/ec-component/widgets-ec/rating-ec/rating-ec.component.js +83 -83
  125. package/esm2015/lib/ec-component/widgets-ec/re-captcha-ec/re-captcha-ec.component.js +50 -50
  126. package/esm2015/lib/ec-component/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.js +90 -90
  127. package/esm2015/lib/ec-component/widgets-ec/redsys-pro-ec/redsys-pro-ec.component.js +143 -143
  128. package/esm2015/lib/ec-component/widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component.js +128 -128
  129. package/esm2015/lib/ec-component/widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component.js +145 -145
  130. package/esm2015/lib/ec-component/widgets-ec/zoom-ec/magnizoom.component.js +167 -167
  131. package/esm2015/lib/ec-directive/add-action-redirect.directive.js +85 -85
  132. package/esm2015/lib/ec-directive/auth-wholesaler.directive.js +54 -54
  133. package/esm2015/lib/ec-directive/index.js +36 -36
  134. package/esm2015/lib/ec-directive/product-mini-standard.directive.js +65 -65
  135. package/esm2015/lib/ec-directive/product-off.directive.js +144 -144
  136. package/esm2015/lib/ec-directive/product-stock.directive.js +75 -75
  137. package/esm2015/lib/ec-directive/reload-view.directive.js +34 -34
  138. package/esm2015/lib/ec-pipe/ec-currency-symbol.pipe.js +72 -72
  139. package/esm2015/lib/ec-pipe/ec-sanitizer-html.pipe.js +26 -26
  140. package/esm2015/lib/ec-pipe/ec-sanitizer-url.pipe.js +26 -26
  141. package/esm2015/lib/ec-pipe/index.js +13 -13
  142. package/esm2015/lib/guards/able-buyer-guard.service.js +36 -36
  143. package/esm2015/lib/guards/auth-guard.service.js +36 -36
  144. package/esm2015/lib/guards/checkout-ready.service.js +36 -36
  145. package/esm2015/lib/guards/loggedin-guard.service.js +36 -36
  146. package/esm2015/lib/guards/user-role-guard.service.js +38 -38
  147. package/esm2015/lib/interceptors/auth.interceptor.js +55 -55
  148. package/esm2015/lib/interceptors/customer.interceptor.js +48 -48
  149. package/esm2015/lib/interfaces/Script.js +1 -1
  150. package/esm2015/lib/interfaces/analytics/event-key.model.js +1 -1
  151. package/esm2015/lib/interfaces/analytics/facebook-pixel/facebook-pixel-model.js +1 -1
  152. package/esm2015/lib/interfaces/analytics/gtm-config.js +1 -1
  153. package/esm2015/lib/interfaces/analytics/metricool-pixel.js +1 -1
  154. package/esm2015/lib/interfaces/block.js +1 -1
  155. package/esm2015/lib/interfaces/cart/cart-affordable.js +1 -1
  156. package/esm2015/lib/interfaces/checkout/checkout-error.js +1 -1
  157. package/esm2015/lib/interfaces/checkout-data.js +1 -1
  158. package/esm2015/lib/interfaces/choose-options/filter-option.js +6 -6
  159. package/esm2015/lib/interfaces/choose-options/options-of-product-list.js +1 -1
  160. package/esm2015/lib/interfaces/cookies.js +1 -1
  161. package/esm2015/lib/interfaces/core.interfaces.js +1 -1
  162. package/esm2015/lib/interfaces/coupon.js +1 -1
  163. package/esm2015/lib/interfaces/deserializable.js +1 -1
  164. package/esm2015/lib/interfaces/faqs.js +1 -1
  165. package/esm2015/lib/interfaces/filter.js +1 -1
  166. package/esm2015/lib/interfaces/filterStep.js +1 -1
  167. package/esm2015/lib/interfaces/observable-error.interface.js +1 -1
  168. package/esm2015/lib/interfaces/paginate.js +1 -1
  169. package/esm2015/lib/interfaces/parameters.js +1 -1
  170. package/esm2015/lib/interfaces/selection.js +4 -4
  171. package/esm2015/lib/interfaces/step.js +1 -1
  172. package/esm2015/lib/interfaces/store.js +1 -1
  173. package/esm2015/lib/ng-easycommerce.module.js +181 -181
  174. package/esm2015/lib/pipes/order-by.pipe.js +101 -101
  175. package/esm2015/lib/services/account/orders.service.js +102 -102
  176. package/esm2015/lib/services/analytics.service.js +57 -57
  177. package/esm2015/lib/services/auth.service.js +352 -352
  178. package/esm2015/lib/services/banner.service.js +72 -72
  179. package/esm2015/lib/services/blocks/blocks-repository.service.js +62 -62
  180. package/esm2015/lib/services/blocks/blocks.service.js +71 -71
  181. package/esm2015/lib/services/captcha.service.js +130 -130
  182. package/esm2015/lib/services/cart.service.js +574 -574
  183. package/esm2015/lib/services/channel-config.service.js +105 -105
  184. package/esm2015/lib/services/checkout/addressing.service.js +222 -222
  185. package/esm2015/lib/services/checkout/checkout.service.js +233 -233
  186. package/esm2015/lib/services/checkout/error-handler.service.js +81 -81
  187. package/esm2015/lib/services/checkout/payment.service.js +79 -79
  188. package/esm2015/lib/services/checkout/shipment.service.js +183 -183
  189. package/esm2015/lib/services/concatenated-associations.service.js +120 -120
  190. package/esm2015/lib/services/cookies.service.js +208 -208
  191. package/esm2015/lib/services/currency.service.js +161 -161
  192. package/esm2015/lib/services/dataform.service.js +46 -46
  193. package/esm2015/lib/services/filters.service.js +122 -122
  194. package/esm2015/lib/services/gift-card.service.js +61 -61
  195. package/esm2015/lib/services/ip-address.service.js +34 -34
  196. package/esm2015/lib/services/options.service.js +275 -275
  197. package/esm2015/lib/services/pagination.service.js +73 -73
  198. package/esm2015/lib/services/parameters.service.js +72 -72
  199. package/esm2015/lib/services/products/product-detail.service.js +432 -432
  200. package/esm2015/lib/services/products/products.service.js +287 -287
  201. package/esm2015/lib/services/reviews.service.js +107 -107
  202. package/esm2015/lib/services/stores.service.js +37 -37
  203. package/esm2015/lib/services/windows.service.js +52 -52
  204. package/esm2015/lib/services/wishlist.service.js +70 -70
  205. package/esm2015/lib/strategies/standard.strategy.js +43 -43
  206. package/esm2015/lib/utils/analytics/doppler.service.js +37 -37
  207. package/esm2015/lib/utils/analytics/facebook-pixel.service.js +141 -141
  208. package/esm2015/lib/utils/analytics/google-analytics.service.js +265 -265
  209. package/esm2015/lib/utils/analytics/gtm.service.js +341 -341
  210. package/esm2015/lib/utils/analytics/metricool-pixel.service.js +48 -48
  211. package/esm2015/lib/utils/options-of-product-list-data.service.js +96 -96
  212. package/esm2015/lib/utils/order-util.service.js +72 -72
  213. package/esm2015/lib/utils/payment-utils.service.js +35 -35
  214. package/esm2015/lib/utils/shipment-transformer.service.js +66 -66
  215. package/esm2015/lib/utils/toast.service.js +42 -42
  216. package/esm2015/lib/utils/utils.service.js +20 -20
  217. package/esm2015/ng-easycommerce.js +34 -34
  218. package/esm2015/public-api.js +146 -146
  219. package/esm5/lib/api/connection.service.js +90 -90
  220. package/esm5/lib/classes/checkout/step-service.js +74 -74
  221. package/esm5/lib/classes/checkout/step.js +25 -25
  222. package/esm5/lib/classes/checkout-process-state.js +2 -2
  223. package/esm5/lib/classes/component-helper.js +22 -22
  224. package/esm5/lib/classes/filters/AttributesFilter.js +79 -79
  225. package/esm5/lib/classes/filters/CategoryFilter.js +72 -72
  226. package/esm5/lib/classes/filters/DinamycsFilter.js +76 -76
  227. package/esm5/lib/classes/filters/Filter.js +78 -78
  228. package/esm5/lib/classes/filters/PriceRangeFilter.js +68 -68
  229. package/esm5/lib/classes/filters/SortFilter.js +97 -97
  230. package/esm5/lib/classes/user-role-type.js +1 -1
  231. package/esm5/lib/classes/user.js +120 -120
  232. package/esm5/lib/core.consts.js +434 -434
  233. package/esm5/lib/ec-component/account-ec/account-ec.component.js +62 -62
  234. package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +169 -169
  235. package/esm5/lib/ec-component/account-ec/orders-list-ec/orders-list-ec.component.js +209 -209
  236. package/esm5/lib/ec-component/auth-ec/auth-ec.component.js +132 -132
  237. package/esm5/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.js +60 -60
  238. package/esm5/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.js +74 -74
  239. package/esm5/lib/ec-component/auth-ec/login-form-ec/login-form-ec.component.js +125 -125
  240. package/esm5/lib/ec-component/auth-ec/register-form-ec/register-form-ec.component.js +185 -185
  241. package/esm5/lib/ec-component/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.js +182 -182
  242. package/esm5/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.js +106 -106
  243. package/esm5/lib/ec-component/blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component.js +170 -170
  244. package/esm5/lib/ec-component/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.js +138 -138
  245. package/esm5/lib/ec-component/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.js +165 -165
  246. package/esm5/lib/ec-component/blocks-ec/block-html-ec/block-html-ec.component.js +54 -54
  247. package/esm5/lib/ec-component/blocks-ec/block-newsletter-ec/contact-form-news-ec.component.js +180 -180
  248. package/esm5/lib/ec-component/blocks-ec/block-products-ec/block-products-ec.component.js +146 -146
  249. package/esm5/lib/ec-component/blocks-ec/blocks-ec.component.js +90 -90
  250. package/esm5/lib/ec-component/build-your-ec/build-your-ec.component.js +327 -327
  251. package/esm5/lib/ec-component/build-your-ec/product-found-ec/product-found-ec.component.js +112 -112
  252. package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +488 -488
  253. package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +169 -169
  254. package/esm5/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +509 -509
  255. package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +120 -120
  256. package/esm5/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +236 -236
  257. package/esm5/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +162 -162
  258. package/esm5/lib/ec-component/checkout-ec/step-ec/step-ec.component.js +69 -69
  259. package/esm5/lib/ec-component/checkout-ec/success-ec/success-ec.component.js +83 -83
  260. package/esm5/lib/ec-component/checkout-error-ec/checkout-error-ec.component.js +97 -97
  261. package/esm5/lib/ec-component/collection-ec/collection-ec.component.js +261 -261
  262. package/esm5/lib/ec-component/compared-products-ec/compared-products-ec.component.js +209 -209
  263. package/esm5/lib/ec-component/cookies-ec/cookies-ec.component.js +126 -126
  264. package/esm5/lib/ec-component/cookies-ec/modal-config-ec/modal-config-ec.component.js +34 -34
  265. package/esm5/lib/ec-component/cookies-ec/modal-cookies-ec/modal-cookies-ec.component.js +36 -36
  266. package/esm5/lib/ec-component/cookies-ec/sidebar-cookies-ec/sidebar-cookies-ec.component.js +36 -36
  267. package/esm5/lib/ec-component/cookies-ec/toast-cookies-ec/toast-cookies-ec.component.js +37 -37
  268. package/esm5/lib/ec-component/coupon-ec/coupon-ec.component.js +71 -71
  269. package/esm5/lib/ec-component/faqs-content-ec/faqs-content-ec.component.js +66 -66
  270. package/esm5/lib/ec-component/filters-ec/filters-ec.component.js +168 -168
  271. package/esm5/lib/ec-component/filters-top-ec/filters-top-ec.component.js +118 -118
  272. package/esm5/lib/ec-component/footer-ec/footer-ec.component.js +113 -113
  273. package/esm5/lib/ec-component/header-ec/header-ec.component.js +260 -260
  274. package/esm5/lib/ec-component/home-ec/home-ec.component.js +53 -53
  275. package/esm5/lib/ec-component/index.js +244 -244
  276. package/esm5/lib/ec-component/login-ec/login-ec.component.js +118 -118
  277. package/esm5/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.js +106 -106
  278. package/esm5/lib/ec-component/password-reset-ec/password-reset-ec.component.js +119 -119
  279. package/esm5/lib/ec-component/product-detail-ec/product-detail-ec.component.js +199 -199
  280. package/esm5/lib/ec-component/product-ec/product-ec.component.js +158 -158
  281. package/esm5/lib/ec-component/related-products-ec/related-products-ec.component.js +111 -111
  282. package/esm5/lib/ec-component/reviews-ec/reviews-ec.component.js +85 -85
  283. package/esm5/lib/ec-component/reviews-form-ec/reviews-form-ec.component.js +155 -155
  284. package/esm5/lib/ec-component/section-container-ec/section-container-ec.component.js +103 -103
  285. package/esm5/lib/ec-component/seller-dashboard-container-ec/seller-dashboard-container-ec.component.js +149 -149
  286. package/esm5/lib/ec-component/share-block-ec/share-block-ec.component.js +166 -166
  287. package/esm5/lib/ec-component/sidebar-ec/sidebar-ec.component.js +136 -136
  288. package/esm5/lib/ec-component/stores-ec/stores-ec.component.js +214 -214
  289. package/esm5/lib/ec-component/variants-ec/variants-ec.component.js +72 -72
  290. package/esm5/lib/ec-component/widgets-ec/bamboo-ec/bamboo-ec.component.js +221 -221
  291. package/esm5/lib/ec-component/widgets-ec/bancard-catastro-ec/bancard-catastro-ec.component.js +313 -313
  292. package/esm5/lib/ec-component/widgets-ec/bancard-ec/bancard-ec.component.js +170 -170
  293. package/esm5/lib/ec-component/widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component.js +160 -160
  294. package/esm5/lib/ec-component/widgets-ec/cart-load-ec/cart-load-ec.component.js +83 -83
  295. package/esm5/lib/ec-component/widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component.js +149 -149
  296. package/esm5/lib/ec-component/widgets-ec/culqi-ec/culqi-ec.component.js +156 -156
  297. package/esm5/lib/ec-component/widgets-ec/decidir-ec/decidir-ec.component.js +192 -192
  298. package/esm5/lib/ec-component/widgets-ec/loading-full-ec/loading-full-ec.component.js +46 -46
  299. package/esm5/lib/ec-component/widgets-ec/loading-inline-ec/loading-inline-ec.component.js +42 -42
  300. package/esm5/lib/ec-component/widgets-ec/loading-section-ec/loading-section-ec.component.js +23 -23
  301. package/esm5/lib/ec-component/widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component.js +174 -174
  302. package/esm5/lib/ec-component/widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component.js +396 -396
  303. package/esm5/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.js +167 -167
  304. package/esm5/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +231 -231
  305. package/esm5/lib/ec-component/widgets-ec/place-to-pay-ec/place-to-pay-ec.component.js +144 -143
  306. package/esm5/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +119 -120
  307. package/esm5/lib/ec-component/widgets-ec/rating-ec/rating-ec.component.js +100 -100
  308. package/esm5/lib/ec-component/widgets-ec/re-captcha-ec/re-captcha-ec.component.js +53 -53
  309. package/esm5/lib/ec-component/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.js +124 -124
  310. package/esm5/lib/ec-component/widgets-ec/redsys-pro-ec/redsys-pro-ec.component.js +159 -159
  311. package/esm5/lib/ec-component/widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component.js +144 -144
  312. package/esm5/lib/ec-component/widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component.js +162 -162
  313. package/esm5/lib/ec-component/widgets-ec/zoom-ec/magnizoom.component.js +181 -181
  314. package/esm5/lib/ec-directive/add-action-redirect.directive.js +104 -104
  315. package/esm5/lib/ec-directive/auth-wholesaler.directive.js +60 -60
  316. package/esm5/lib/ec-directive/index.js +36 -36
  317. package/esm5/lib/ec-directive/product-mini-standard.directive.js +72 -72
  318. package/esm5/lib/ec-directive/product-off.directive.js +163 -163
  319. package/esm5/lib/ec-directive/product-stock.directive.js +81 -81
  320. package/esm5/lib/ec-directive/reload-view.directive.js +35 -35
  321. package/esm5/lib/ec-pipe/ec-currency-symbol.pipe.js +74 -74
  322. package/esm5/lib/ec-pipe/ec-sanitizer-html.pipe.js +27 -27
  323. package/esm5/lib/ec-pipe/ec-sanitizer-url.pipe.js +27 -27
  324. package/esm5/lib/ec-pipe/index.js +13 -13
  325. package/esm5/lib/guards/able-buyer-guard.service.js +37 -37
  326. package/esm5/lib/guards/auth-guard.service.js +37 -37
  327. package/esm5/lib/guards/checkout-ready.service.js +37 -37
  328. package/esm5/lib/guards/loggedin-guard.service.js +37 -37
  329. package/esm5/lib/guards/user-role-guard.service.js +39 -39
  330. package/esm5/lib/interceptors/auth.interceptor.js +57 -57
  331. package/esm5/lib/interceptors/customer.interceptor.js +50 -50
  332. package/esm5/lib/interfaces/Script.js +1 -1
  333. package/esm5/lib/interfaces/analytics/event-key.model.js +1 -1
  334. package/esm5/lib/interfaces/analytics/facebook-pixel/facebook-pixel-model.js +1 -1
  335. package/esm5/lib/interfaces/analytics/gtm-config.js +1 -1
  336. package/esm5/lib/interfaces/analytics/metricool-pixel.js +1 -1
  337. package/esm5/lib/interfaces/block.js +1 -1
  338. package/esm5/lib/interfaces/cart/cart-affordable.js +1 -1
  339. package/esm5/lib/interfaces/checkout/checkout-error.js +1 -1
  340. package/esm5/lib/interfaces/checkout-data.js +1 -1
  341. package/esm5/lib/interfaces/choose-options/filter-option.js +6 -6
  342. package/esm5/lib/interfaces/choose-options/options-of-product-list.js +1 -1
  343. package/esm5/lib/interfaces/cookies.js +1 -1
  344. package/esm5/lib/interfaces/core.interfaces.js +1 -1
  345. package/esm5/lib/interfaces/coupon.js +1 -1
  346. package/esm5/lib/interfaces/deserializable.js +1 -1
  347. package/esm5/lib/interfaces/faqs.js +1 -1
  348. package/esm5/lib/interfaces/filter.js +1 -1
  349. package/esm5/lib/interfaces/filterStep.js +1 -1
  350. package/esm5/lib/interfaces/observable-error.interface.js +1 -1
  351. package/esm5/lib/interfaces/paginate.js +1 -1
  352. package/esm5/lib/interfaces/parameters.js +1 -1
  353. package/esm5/lib/interfaces/selection.js +4 -4
  354. package/esm5/lib/interfaces/step.js +1 -1
  355. package/esm5/lib/interfaces/store.js +1 -1
  356. package/esm5/lib/ng-easycommerce.module.js +185 -185
  357. package/esm5/lib/pipes/order-by.pipe.js +106 -106
  358. package/esm5/lib/services/account/orders.service.js +120 -120
  359. package/esm5/lib/services/analytics.service.js +60 -60
  360. package/esm5/lib/services/auth.service.js +426 -426
  361. package/esm5/lib/services/banner.service.js +81 -81
  362. package/esm5/lib/services/blocks/blocks-repository.service.js +94 -94
  363. package/esm5/lib/services/blocks/blocks.service.js +79 -79
  364. package/esm5/lib/services/captcha.service.js +132 -132
  365. package/esm5/lib/services/cart.service.js +705 -705
  366. package/esm5/lib/services/channel-config.service.js +107 -107
  367. package/esm5/lib/services/checkout/addressing.service.js +280 -280
  368. package/esm5/lib/services/checkout/checkout.service.js +316 -316
  369. package/esm5/lib/services/checkout/error-handler.service.js +83 -83
  370. package/esm5/lib/services/checkout/payment.service.js +129 -129
  371. package/esm5/lib/services/checkout/shipment.service.js +265 -265
  372. package/esm5/lib/services/concatenated-associations.service.js +162 -162
  373. package/esm5/lib/services/cookies.service.js +222 -222
  374. package/esm5/lib/services/currency.service.js +205 -205
  375. package/esm5/lib/services/dataform.service.js +48 -48
  376. package/esm5/lib/services/filters.service.js +125 -125
  377. package/esm5/lib/services/gift-card.service.js +63 -63
  378. package/esm5/lib/services/ip-address.service.js +35 -35
  379. package/esm5/lib/services/options.service.js +376 -376
  380. package/esm5/lib/services/pagination.service.js +79 -79
  381. package/esm5/lib/services/parameters.service.js +74 -74
  382. package/esm5/lib/services/products/product-detail.service.js +497 -497
  383. package/esm5/lib/services/products/products.service.js +345 -345
  384. package/esm5/lib/services/reviews.service.js +116 -116
  385. package/esm5/lib/services/stores.service.js +39 -39
  386. package/esm5/lib/services/windows.service.js +79 -79
  387. package/esm5/lib/services/wishlist.service.js +71 -71
  388. package/esm5/lib/strategies/standard.strategy.js +44 -44
  389. package/esm5/lib/utils/analytics/doppler.service.js +39 -39
  390. package/esm5/lib/utils/analytics/facebook-pixel.service.js +145 -145
  391. package/esm5/lib/utils/analytics/google-analytics.service.js +280 -280
  392. package/esm5/lib/utils/analytics/gtm.service.js +358 -358
  393. package/esm5/lib/utils/analytics/metricool-pixel.service.js +40 -40
  394. package/esm5/lib/utils/options-of-product-list-data.service.js +98 -98
  395. package/esm5/lib/utils/order-util.service.js +75 -75
  396. package/esm5/lib/utils/payment-utils.service.js +37 -37
  397. package/esm5/lib/utils/shipment-transformer.service.js +78 -78
  398. package/esm5/lib/utils/toast.service.js +61 -61
  399. package/esm5/lib/utils/utils.service.js +22 -22
  400. package/esm5/ng-easycommerce.js +34 -34
  401. package/esm5/public-api.js +146 -146
  402. package/fesm2015/ng-easycommerce.js +16657 -16657
  403. package/fesm2015/ng-easycommerce.js.map +1 -1
  404. package/fesm5/ng-easycommerce.js +19685 -19685
  405. package/fesm5/ng-easycommerce.js.map +1 -1
  406. package/lib/api/connection.service.d.ts +28 -28
  407. package/lib/classes/checkout/step-service.d.ts +28 -28
  408. package/lib/classes/checkout/step.d.ts +14 -14
  409. package/lib/classes/checkout-process-state.d.ts +12 -12
  410. package/lib/classes/component-helper.d.ts +8 -8
  411. package/lib/classes/filters/AttributesFilter.d.ts +18 -18
  412. package/lib/classes/filters/CategoryFilter.d.ts +17 -17
  413. package/lib/classes/filters/DinamycsFilter.d.ts +15 -15
  414. package/lib/classes/filters/Filter.d.ts +19 -19
  415. package/lib/classes/filters/PriceRangeFilter.d.ts +18 -18
  416. package/lib/classes/filters/SortFilter.d.ts +15 -15
  417. package/lib/classes/user-role-type.d.ts +5 -5
  418. package/lib/classes/user.d.ts +68 -68
  419. package/lib/core.consts.d.ts +216 -216
  420. package/lib/ec-component/account-ec/account-ec.component.d.ts +13 -13
  421. package/lib/ec-component/account-ec/order-ec/order-ec.component.d.ts +33 -33
  422. package/lib/ec-component/account-ec/orders-list-ec/orders-list-ec.component.d.ts +84 -84
  423. package/lib/ec-component/auth-ec/auth-ec.component.d.ts +35 -35
  424. package/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.d.ts +13 -13
  425. package/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.d.ts +16 -16
  426. package/lib/ec-component/auth-ec/login-form-ec/login-form-ec.component.d.ts +26 -26
  427. package/lib/ec-component/auth-ec/register-form-ec/register-form-ec.component.d.ts +34 -34
  428. package/lib/ec-component/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.d.ts +42 -42
  429. package/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.d.ts +23 -23
  430. package/lib/ec-component/blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component.d.ts +34 -34
  431. package/lib/ec-component/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.d.ts +27 -27
  432. package/lib/ec-component/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.d.ts +34 -34
  433. package/lib/ec-component/blocks-ec/block-html-ec/block-html-ec.component.d.ts +10 -10
  434. package/lib/ec-component/blocks-ec/block-newsletter-ec/contact-form-news-ec.component.d.ts +40 -40
  435. package/lib/ec-component/blocks-ec/block-products-ec/block-products-ec.component.d.ts +25 -25
  436. package/lib/ec-component/blocks-ec/blocks-ec.component.d.ts +24 -24
  437. package/lib/ec-component/build-your-ec/build-your-ec.component.d.ts +122 -122
  438. package/lib/ec-component/build-your-ec/product-found-ec/product-found-ec.component.d.ts +41 -41
  439. package/lib/ec-component/cart-ec/cart-ec.component.d.ts +59 -59
  440. package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +43 -43
  441. package/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.d.ts +100 -100
  442. package/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +27 -27
  443. package/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.d.ts +57 -57
  444. package/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.d.ts +34 -34
  445. package/lib/ec-component/checkout-ec/step-ec/step-ec.component.d.ts +18 -18
  446. package/lib/ec-component/checkout-ec/success-ec/success-ec.component.d.ts +33 -33
  447. package/lib/ec-component/checkout-error-ec/checkout-error-ec.component.d.ts +25 -25
  448. package/lib/ec-component/collection-ec/collection-ec.component.d.ts +67 -67
  449. package/lib/ec-component/compared-products-ec/compared-products-ec.component.d.ts +70 -70
  450. package/lib/ec-component/cookies-ec/cookies-ec.component.d.ts +44 -44
  451. package/lib/ec-component/cookies-ec/modal-config-ec/modal-config-ec.component.d.ts +10 -10
  452. package/lib/ec-component/cookies-ec/modal-cookies-ec/modal-cookies-ec.component.d.ts +8 -8
  453. package/lib/ec-component/cookies-ec/sidebar-cookies-ec/sidebar-cookies-ec.component.d.ts +9 -9
  454. package/lib/ec-component/cookies-ec/toast-cookies-ec/toast-cookies-ec.component.d.ts +9 -9
  455. package/lib/ec-component/coupon-ec/coupon-ec.component.d.ts +17 -17
  456. package/lib/ec-component/faqs-content-ec/faqs-content-ec.component.d.ts +15 -15
  457. package/lib/ec-component/filters-ec/filters-ec.component.d.ts +33 -33
  458. package/lib/ec-component/filters-top-ec/filters-top-ec.component.d.ts +23 -23
  459. package/lib/ec-component/footer-ec/footer-ec.component.d.ts +30 -30
  460. package/lib/ec-component/header-ec/header-ec.component.d.ts +66 -66
  461. package/lib/ec-component/home-ec/home-ec.component.d.ts +13 -13
  462. package/lib/ec-component/index.d.ts +81 -81
  463. package/lib/ec-component/login-ec/login-ec.component.d.ts +26 -26
  464. package/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.d.ts +28 -28
  465. package/lib/ec-component/password-reset-ec/password-reset-ec.component.d.ts +27 -27
  466. package/lib/ec-component/product-detail-ec/product-detail-ec.component.d.ts +60 -60
  467. package/lib/ec-component/product-ec/product-ec.component.d.ts +52 -52
  468. package/lib/ec-component/related-products-ec/related-products-ec.component.d.ts +22 -22
  469. package/lib/ec-component/reviews-ec/reviews-ec.component.d.ts +29 -29
  470. package/lib/ec-component/reviews-form-ec/reviews-form-ec.component.d.ts +61 -61
  471. package/lib/ec-component/section-container-ec/section-container-ec.component.d.ts +22 -22
  472. package/lib/ec-component/seller-dashboard-container-ec/seller-dashboard-container-ec.component.d.ts +37 -37
  473. package/lib/ec-component/share-block-ec/share-block-ec.component.d.ts +26 -26
  474. package/lib/ec-component/sidebar-ec/sidebar-ec.component.d.ts +29 -29
  475. package/lib/ec-component/stores-ec/stores-ec.component.d.ts +54 -54
  476. package/lib/ec-component/variants-ec/variants-ec.component.d.ts +14 -14
  477. package/lib/ec-component/widgets-ec/bamboo-ec/bamboo-ec.component.d.ts +60 -60
  478. package/lib/ec-component/widgets-ec/bancard-catastro-ec/bancard-catastro-ec.component.d.ts +105 -105
  479. package/lib/ec-component/widgets-ec/bancard-ec/bancard-ec.component.d.ts +46 -46
  480. package/lib/ec-component/widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component.d.ts +44 -44
  481. package/lib/ec-component/widgets-ec/cart-load-ec/cart-load-ec.component.d.ts +14 -14
  482. package/lib/ec-component/widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component.d.ts +38 -38
  483. package/lib/ec-component/widgets-ec/culqi-ec/culqi-ec.component.d.ts +38 -38
  484. package/lib/ec-component/widgets-ec/decidir-ec/decidir-ec.component.d.ts +53 -53
  485. package/lib/ec-component/widgets-ec/loading-full-ec/loading-full-ec.component.d.ts +6 -6
  486. package/lib/ec-component/widgets-ec/loading-inline-ec/loading-inline-ec.component.d.ts +5 -5
  487. package/lib/ec-component/widgets-ec/loading-section-ec/loading-section-ec.component.d.ts +5 -5
  488. package/lib/ec-component/widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component.d.ts +43 -43
  489. package/lib/ec-component/widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component.d.ts +64 -64
  490. package/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.d.ts +46 -46
  491. package/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.d.ts +41 -41
  492. package/lib/ec-component/widgets-ec/place-to-pay-ec/place-to-pay-ec.component.d.ts +34 -34
  493. package/lib/ec-component/widgets-ec/price-ec/price-ec.component.d.ts +31 -31
  494. package/lib/ec-component/widgets-ec/rating-ec/rating-ec.component.d.ts +28 -28
  495. package/lib/ec-component/widgets-ec/re-captcha-ec/re-captcha-ec.component.d.ts +24 -24
  496. package/lib/ec-component/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.d.ts +14 -14
  497. package/lib/ec-component/widgets-ec/redsys-pro-ec/redsys-pro-ec.component.d.ts +44 -44
  498. package/lib/ec-component/widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component.d.ts +38 -38
  499. package/lib/ec-component/widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component.d.ts +42 -42
  500. package/lib/ec-component/widgets-ec/zoom-ec/magnizoom.component.d.ts +66 -66
  501. package/lib/ec-directive/add-action-redirect.directive.d.ts +26 -26
  502. package/lib/ec-directive/auth-wholesaler.directive.d.ts +17 -17
  503. package/lib/ec-directive/index.d.ts +6 -6
  504. package/lib/ec-directive/product-mini-standard.directive.d.ts +19 -19
  505. package/lib/ec-directive/product-off.directive.d.ts +22 -22
  506. package/lib/ec-directive/product-stock.directive.d.ts +15 -15
  507. package/lib/ec-directive/reload-view.directive.d.ts +8 -8
  508. package/lib/ec-pipe/ec-currency-symbol.pipe.d.ts +19 -19
  509. package/lib/ec-pipe/ec-sanitizer-html.pipe.d.ts +7 -7
  510. package/lib/ec-pipe/ec-sanitizer-url.pipe.d.ts +7 -7
  511. package/lib/ec-pipe/index.d.ts +4 -4
  512. package/lib/guards/able-buyer-guard.service.d.ts +8 -8
  513. package/lib/guards/auth-guard.service.d.ts +8 -8
  514. package/lib/guards/checkout-ready.service.d.ts +8 -8
  515. package/lib/guards/loggedin-guard.service.d.ts +8 -8
  516. package/lib/guards/user-role-guard.service.d.ts +8 -8
  517. package/lib/interceptors/auth.interceptor.d.ts +9 -9
  518. package/lib/interceptors/customer.interceptor.d.ts +9 -9
  519. package/lib/interfaces/Script.d.ts +5 -5
  520. package/lib/interfaces/analytics/event-key.model.d.ts +1 -1
  521. package/lib/interfaces/analytics/facebook-pixel/facebook-pixel-model.d.ts +5 -5
  522. package/lib/interfaces/analytics/gtm-config.d.ts +6 -6
  523. package/lib/interfaces/analytics/metricool-pixel.d.ts +3 -3
  524. package/lib/interfaces/block.d.ts +33 -33
  525. package/lib/interfaces/cart/cart-affordable.d.ts +8 -8
  526. package/lib/interfaces/cart-item.d.ts +8 -8
  527. package/lib/interfaces/checkout/checkout-error.d.ts +7 -7
  528. package/lib/interfaces/checkout-data.d.ts +6 -6
  529. package/lib/interfaces/choose-options/filter-option.d.ts +16 -16
  530. package/lib/interfaces/choose-options/options-of-product-list.d.ts +5 -5
  531. package/lib/interfaces/cookies.d.ts +49 -49
  532. package/lib/interfaces/core.interfaces.d.ts +4 -4
  533. package/lib/interfaces/coupon.d.ts +5 -5
  534. package/lib/interfaces/currencyConfig.d.ts +10 -10
  535. package/lib/interfaces/deserializable.d.ts +3 -3
  536. package/lib/interfaces/faqs.d.ts +12 -12
  537. package/lib/interfaces/filter.d.ts +51 -51
  538. package/lib/interfaces/filterStep.d.ts +29 -29
  539. package/lib/interfaces/navbar-items.d.ts +9 -9
  540. package/lib/interfaces/observable-error.interface.d.ts +5 -5
  541. package/lib/interfaces/paginate.d.ts +1 -1
  542. package/lib/interfaces/parameters.d.ts +10 -10
  543. package/lib/interfaces/paramsInterfaces/paramsProductsWithUniqueVariant.d.ts +6 -6
  544. package/lib/interfaces/product.d.ts +46 -46
  545. package/lib/interfaces/selection.d.ts +10 -10
  546. package/lib/interfaces/step.d.ts +8 -8
  547. package/lib/interfaces/store.d.ts +17 -17
  548. package/lib/ng-easycommerce.module.d.ts +5 -5
  549. package/lib/pipes/order-by.pipe.d.ts +5 -5
  550. package/lib/services/account/orders.service.d.ts +29 -29
  551. package/lib/services/analytics.service.d.ts +21 -21
  552. package/lib/services/auth.service.d.ts +116 -116
  553. package/lib/services/banner.service.d.ts +26 -26
  554. package/lib/services/blocks/blocks-repository.service.d.ts +19 -19
  555. package/lib/services/blocks/blocks.service.d.ts +25 -25
  556. package/lib/services/captcha.service.d.ts +76 -76
  557. package/lib/services/cart.service.d.ts +140 -140
  558. package/lib/services/channel-config.service.d.ts +35 -35
  559. package/lib/services/checkout/addressing.service.d.ts +239 -239
  560. package/lib/services/checkout/checkout.service.d.ts +71 -71
  561. package/lib/services/checkout/error-handler.service.d.ts +19 -19
  562. package/lib/services/checkout/payment.service.d.ts +34 -34
  563. package/lib/services/checkout/shipment.service.d.ts +58 -58
  564. package/lib/services/concatenated-associations.service.d.ts +57 -57
  565. package/lib/services/cookies.service.d.ts +66 -66
  566. package/lib/services/currency.service.d.ts +65 -65
  567. package/lib/services/dataform.service.d.ts +13 -13
  568. package/lib/services/filters.service.d.ts +48 -48
  569. package/lib/services/gift-card.service.d.ts +19 -19
  570. package/lib/services/ip-address.service.d.ts +10 -10
  571. package/lib/services/options.service.d.ts +61 -61
  572. package/lib/services/pagination.service.d.ts +30 -30
  573. package/lib/services/parameters.service.d.ts +18 -18
  574. package/lib/services/products/product-detail.service.d.ts +115 -115
  575. package/lib/services/products/products.service.d.ts +101 -101
  576. package/lib/services/reviews.service.d.ts +71 -71
  577. package/lib/services/stores.service.d.ts +11 -11
  578. package/lib/services/windows.service.d.ts +13 -13
  579. package/lib/services/wishlist.service.d.ts +13 -13
  580. package/lib/strategies/standard.strategy.d.ts +12 -12
  581. package/lib/utils/analytics/doppler.service.d.ts +9 -9
  582. package/lib/utils/analytics/facebook-pixel.service.d.ts +23 -23
  583. package/lib/utils/analytics/google-analytics.service.d.ts +30 -30
  584. package/lib/utils/analytics/gtm.service.d.ts +34 -34
  585. package/lib/utils/analytics/metricool-pixel.service.d.ts +9 -9
  586. package/lib/utils/options-of-product-list-data.service.d.ts +5 -5
  587. package/lib/utils/order-util.service.d.ts +12 -12
  588. package/lib/utils/payment-utils.service.d.ts +5 -5
  589. package/lib/utils/shipment-transformer.service.d.ts +8 -8
  590. package/lib/utils/toast.service.d.ts +15 -15
  591. package/lib/utils/utils.service.d.ts +4 -4
  592. package/ng-easycommerce.d.ts +34 -34
  593. package/ng-easycommerce.metadata.json +1 -1
  594. package/package.json +1 -1
  595. package/public-api.d.ts +144 -144
@@ -1,426 +1,426 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
13
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
15
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
16
- return c > 3 && r && Object.defineProperty(target, key, r), r;
17
- };
18
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
19
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20
- return new (P || (P = Promise))(function (resolve, reject) {
21
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
22
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
23
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
24
- step((generator = generator.apply(thisArg, _arguments || [])).next());
25
- });
26
- };
27
- var __generator = (this && this.__generator) || function (thisArg, body) {
28
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
29
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
30
- function verb(n) { return function (v) { return step([n, v]); }; }
31
- function step(op) {
32
- if (f) throw new TypeError("Generator is already executing.");
33
- while (_) try {
34
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
35
- if (y = 0, t) op = [op[0] & 2, t.value];
36
- switch (op[0]) {
37
- case 0: case 1: t = op; break;
38
- case 4: _.label++; return { value: op[1], done: false };
39
- case 5: _.label++; y = op[1]; op = [0]; continue;
40
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
41
- default:
42
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
43
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
44
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
45
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
46
- if (t[2]) _.ops.pop();
47
- _.trys.pop(); continue;
48
- }
49
- op = body.call(thisArg, _);
50
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
51
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
52
- }
53
- };
54
- var __read = (this && this.__read) || function (o, n) {
55
- var m = typeof Symbol === "function" && o[Symbol.iterator];
56
- if (!m) return o;
57
- var i = m.call(o), r, ar = [], e;
58
- try {
59
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
60
- }
61
- catch (error) { e = { error: error }; }
62
- finally {
63
- try {
64
- if (r && !r.done && (m = i["return"])) m.call(i);
65
- }
66
- finally { if (e) throw e.error; }
67
- }
68
- return ar;
69
- };
70
- var __spread = (this && this.__spread) || function () {
71
- for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
72
- return ar;
73
- };
74
- import { Injectable, Injector } from '@angular/core';
75
- import { ConnectionService } from '../api/connection.service';
76
- import { Observable, BehaviorSubject, of } from 'rxjs';
77
- import { User } from '../classes/user';
78
- import 'rxjs/add/observable/of';
79
- import { ToastrService } from 'ngx-toastr';
80
- import { Constants } from '../core.consts';
81
- import { map, mapTo, catchError } from 'rxjs/operators';
82
- import * as moment from "moment";
83
- import { ChannelConfigService } from './channel-config.service';
84
- import { CartService } from './cart.service';
85
- import * as i0 from "@angular/core";
86
- import * as i1 from "../../public-api";
87
- import * as i2 from "ngx-toastr";
88
- var AuthService = /** @class */ (function () {
89
- function AuthService(connection, toastrService, constants, injector) {
90
- var _this = this;
91
- this.connection = connection;
92
- this.toastrService = toastrService;
93
- this.constants = constants;
94
- this.injector = injector;
95
- this.JWT_TOKEN = 'JWT_TOKEN';
96
- this.REFRESH_TOKEN = 'REFRESH_TOKEN';
97
- this.EXPIRATES_IN = 'EXPIRATES_IN';
98
- this.USER = 'USER';
99
- this.MAIL = 'mail';
100
- this.LOCALE = 'LOCALE';
101
- this.CHANNEL = 'CHANNEL';
102
- this.CUSTOMER = 'CUSTOMER';
103
- this.CHANNELSELLER = 'CHANNELSELLER';
104
- /* activeChannelSwitch? */
105
- this.activeChannelChange = false;
106
- this.loggedInSubject = new BehaviorSubject(false);
107
- this.loggingInSubject = new BehaviorSubject(false);
108
- this.userInSubject = new BehaviorSubject(null);
109
- this.channelsUserSubject = new BehaviorSubject([]);
110
- /* private customerSubject = new BehaviorSubject<any>(null) */
111
- this.user = null;
112
- // APIS
113
- this.tokenApi = function () { return 'shop-api/login_check'; };
114
- this.registerApi = function () { return 'shop-api/' + _this.constants.getChannel() + '/register'; };
115
- this.registerWholesalerApi = function () { return 'shop-api/' + _this.constants.getChannel() + '/register-wholesaler'; };
116
- this.confirmAccountApi = function (token) { return 'shop-api/' + _this.constants.getChannel() + '/verify-account?token=' + token; };
117
- this.resetPasswordApi = function (token) { return 'shop-api/' + _this.constants.getChannel() + '/password-reset/' + token; };
118
- this.recoverPasswordApi = function () { return 'shop-api/' + _this.constants.getChannel() + '/request-password-reset'; };
119
- this.countriesApi = function () { return 'shop-api/' + _this.constants.getChannel() + '/countries'; };
120
- // Atributos utiles
121
- this.waiting = false;
122
- this.loggedIn = this.loggedInSubject.asObservable();
123
- this.loggingIn = this.loggingInSubject.asObservable();
124
- this.userAuth = this.userInSubject.asObservable();
125
- this.channelsUser = this.channelsUserSubject.asObservable();
126
- /* private customer = this.channelsUserSubject.asObservable() */
127
- this.customer = null;
128
- this.channel = null;
129
- this.channels = [];
130
- this.homeResolver = null;
131
- this.channelAccessPermission = function (res) {
132
- var _a, _b, _c;
133
- _this.channelsUserSubject.next([]);
134
- /* Please remove this ASAP - Needs *channels* array in user object ALWAYS */
135
- /* if (UserRoleType.SELLER == res.type as UserRoleType) return true */
136
- /* No authorized channels */
137
- if (((_a = res.channels) === null || _a === void 0 ? void 0 : _a.length) == 0) {
138
- return false;
139
- }
140
- /* Some authorized channel(s) including current channel */
141
- if (res.channels.find(function (userchannel) { return userchannel.code === _this.channel.code; })) {
142
- /* Multiple authorized channels including current channel */
143
- if (((_b = res.channels) === null || _b === void 0 ? void 0 : _b.length) > 1 && _this.activeChannelChange)
144
- _this.channelsUserSubject.next(res.channels);
145
- return true;
146
- }
147
- /* One authorized channel not including current channel */
148
- if (((_c = res.channels) === null || _c === void 0 ? void 0 : _c.length) == 1 && _this.activeChannelChange) {
149
- delete res.password;
150
- _this.channelAccess(res.channels[0], res);
151
- return true;
152
- }
153
- /* Multiple authorized channels not including current channel */
154
- if (_this.activeChannelChange) {
155
- _this.channelsUserSubject.next(res.channels);
156
- return true;
157
- }
158
- return false;
159
- };
160
- this.channelAccess = function (channel, user) {
161
- if (user === void 0) { user = null; }
162
- if (window.location.hostname != channel.hostname) {
163
- var encoded = btoa(JSON.stringify(user != null ? user : _this.user));
164
- window.location.replace(window.location.protocol + "//" + channel.hostname + "/auth/redirect/" + encoded);
165
- }
166
- else {
167
- _this.constants.modifyChannelConfig(channel);
168
- window.location.reload();
169
- }
170
- };
171
- /**
172
- * @desc Devuelve una promesa
173
- * @param user Objeto que contiene username y password
174
- */
175
- this.doLogin = function (user) {
176
- _this.loggingInSubject.next(true);
177
- user = __assign(__assign({}, user), _this.constants.loginExtraData());
178
- return _this.connection.post(_this.tokenApi(), user).pipe(map(function (res) { return _this.doLoginUser(res); }), mapTo('ok'), catchError(function (err) {
179
- _this.loggingInSubject.next(false);
180
- return of(err.toString());
181
- })).toPromise();
182
- };
183
- this.signUp = function (data) {
184
- // Convertir el email a minúsculas si existe
185
- if (data.email) {
186
- data = __assign(__assign({}, data), { email: data.email.toLowerCase() });
187
- }
188
- return _this.connection.post(_this.registerApi(), data);
189
- };
190
- this.confirmAccount = function (token) {
191
- return _this.connection.get(_this.confirmAccountApi(token));
192
- };
193
- this.passwordReset = function (new_password, token) {
194
- var data = { password: { first: new_password, second: new_password } };
195
- return _this.connection.put(_this.resetPasswordApi(token), data);
196
- };
197
- this.recoverPassword = function (email) {
198
- return _this.connection.put(_this.recoverPasswordApi(), { email: email });
199
- };
200
- this.isTokenExpired = function () {
201
- var fecha_expiracion = _this.getExpiratesAt();
202
- var result = moment() >= moment(fecha_expiracion);
203
- return result;
204
- };
205
- this.getExpiratesAt = function () { return localStorage.getItem(_this.EXPIRATES_IN); };
206
- this.hasToRefresh = function () { return _this.getRefreshToken(); };
207
- this.signUpWholesaler = function (data) {
208
- // Convertir el email a minúsculas si existe
209
- if (data.email) {
210
- data = __assign(__assign({}, data), { email: data.email.toLowerCase() });
211
- }
212
- return _this.connection.post(_this.registerWholesalerApi(), data);
213
- };
214
- this.getCountriesData = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
215
- return [2 /*return*/, this.connection.get(this.countriesApi()).pipe(map(function (res) { return res._embedded.items; })).toPromise()];
216
- }); }); };
217
- this.setActiveChannelChange = function (activelyChangeChannelsOnLogin) { return _this.activeChannelChange = activelyChangeChannelsOnLogin; };
218
- this.isAllowedRole = function (allowedRoles, role) {
219
- return allowedRoles.length
220
- ? allowedRoles.includes(role)
221
- : true;
222
- };
223
- /* Please remove this ASAP - Needs *channels* array in user object ALWAYS */
224
- this.forceChannelsForSeller = function (tokens) {
225
- var _a;
226
- var _b;
227
- if ("seller" /* SELLER */ == tokens.type)
228
- ((_b = _this.channels) === null || _b === void 0 ? void 0 : _b.length) ? (_a = _this.user).setChannels.apply(_a, __spread(_this.channels)) : _this.user.setChannels(_this.channel);
229
- };
230
- /**
231
- * @description Cambia de canal
232
- * @param channelConfig debe ser un objeto que contenga al menos las keys channel y locale.
233
- */
234
- this.changeChannel = function (channelConfig) {
235
- _this.constants.modifyChannelConfig({
236
- channel: channelConfig.channel,
237
- locale: channelConfig.locale
238
- });
239
- };
240
- /**
241
- * @description Carga el cliente con el que se realizaran pedidos. Si recibe el valor null
242
- * se vuelve a cargar el vendedor para su uso.
243
- * @param customer
244
- */
245
- this.setCustomer = function (customer) {
246
- var refreshPage = false;
247
- _this.customer = customer;
248
- localStorage.setItem(_this.CUSTOMER, JSON.stringify(customer));
249
- var sameChannel = customer ? _this.sameChannel(customer.channels[0].code, customer.channels[0].locales.code) : null;
250
- if (customer) {
251
- if (!sameChannel) {
252
- !localStorage.getItem(_this.CHANNELSELLER) ?
253
- localStorage.setItem(_this.CHANNELSELLER, JSON.stringify({
254
- channel: _this.constants.getChannel(),
255
- locale: _this.constants.getLocale()
256
- })) : null;
257
- _this.changeChannel({
258
- channel: customer.channels[0].code,
259
- locale: customer.channels[0].locales.code
260
- });
261
- refreshPage = true;
262
- }
263
- }
264
- else {
265
- var res = JSON.parse(localStorage.getItem(_this.CHANNELSELLER));
266
- if (res) {
267
- if (!_this.sameChannel(res.channel, res.locale)) {
268
- _this.changeChannel(res);
269
- refreshPage = true;
270
- }
271
- localStorage.removeItem(_this.CHANNELSELLER);
272
- }
273
- }
274
- _this.injector.get(CartService).clearAndResetCustomerCart();
275
- refreshPage ? location.href = location.href : null;
276
- };
277
- /**
278
- * @description Comprueba si los valores del canal actual son iguales a los ingresado por parametros.
279
- * @param {string} channel Nombre del canal
280
- * @param {string} locale Locale del canal
281
- * @returns {boolean} True si es el mismo canal, False caso contrario.
282
- */
283
- this.sameChannel = function (channel, locale) { return (channel == _this.constants.getChannel()) && (locale == _this.constants.getLocale()); };
284
- /* public getCustomer = () => Observable.of(JSON.parse(localStorage.getItem(this.CUSTOMER))) */
285
- this.getCustomer = function () {
286
- /* this.customerSubject.next(JSON.parse(localStorage.getItem(this.CUSTOMER)))
287
- return this.customer */
288
- return _this.customer || JSON.parse(localStorage.getItem(_this.CUSTOMER));
289
- };
290
- this.setHomeResolver = function (resolverFunction) { return _this.homeResolver = resolverFunction; };
291
- this.getHomeResolver = function () { return _this.homeResolver; };
292
- this.isAbleToBuy = function () { var _a; return !((_a = _this.getUserProfileAsUser()) === null || _a === void 0 ? void 0 : _a.isSeller()) || !!_this.getCustomer(); };
293
- /**
294
- * @description Evalua si el valor que ingresa por parámetro es mayor o igual al mínimo de compra
295
- * que el usuario tiene asignado a ese canal, diferenciando si es mayorista o minorista.
296
- * @param {number} value
297
- * @returns {boolean} true si excede el monto, false caso contrario
298
- */
299
- this.exceedsMinimumAmount = function (value) {
300
- if (value === void 0) { value = 0; }
301
- return _this.user.isWholesaler() ? _this.user.channels.find(function (channel) { return _this.constants.getChannel() == channel.code; }).wholesalerMinimumPurchaseAmount <= value
302
- : _this.user.channels.find(function (channel) { return _this.constants.getChannel() == channel.code; }).retailerMinimumPurchaseAmount <= value;
303
- };
304
- this.isAuthenticated() && this.loggedInSubject.next(true);
305
- }
306
- /**
307
- * @desc Devuelve un observable
308
- * @param user Objeto que contiene username y password
309
- */
310
- AuthService.prototype.login = function (user, withRoles) {
311
- var _this = this;
312
- if (withRoles === void 0) { withRoles = []; }
313
- this.injector.get(ChannelConfigService).channelConfig$.subscribe(function (ch) { return _this.channel = ch; });
314
- this.injector.get(ChannelConfigService).channels.subscribe(function (ch) { return _this.channels = ch; });
315
- this.loggingInSubject.next(true);
316
- // Convertir el username a minúsculas
317
- user = __assign(__assign(__assign({}, user), { username: user.username.toLowerCase() }), this.constants.loginExtraData());
318
- var result = this.connection.post(this.tokenApi(), user).pipe(map(function (res) {
319
- if (_this.channelAccessPermission(__assign(__assign({}, user), res)) && _this.isAllowedRole(withRoles, res.type)) {
320
- _this.doLoginUser(__assign(__assign({}, user), res));
321
- return 'ok';
322
- }
323
- return 'error';
324
- }), catchError(function (err) {
325
- _this.loggingInSubject.next(false);
326
- return of(err.toString());
327
- }));
328
- return result;
329
- };
330
- AuthService.prototype.getUserProfile = function () {
331
- return (this.user && Observable.of(this.user)) || this.getCurrentUser();
332
- };
333
- AuthService.prototype.getUserProfileAsUser = function () {
334
- return this.user || this.getCurrentUserAsUser();
335
- };
336
- AuthService.prototype.getCurrentUserAsUser = function () {
337
- var _this = this;
338
- var _a;
339
- this.user = new User();
340
- if (!this.user.loadFromStorage()) {
341
- this.user = null;
342
- }
343
- else if ((_a = this.user) === null || _a === void 0 ? void 0 : _a.channels.find(function (userchannel) { var _a; return ((_a = userchannel) === null || _a === void 0 ? void 0 : _a.code) === _this.constants.getChannel(); })) {
344
- return this.user;
345
- }
346
- else {
347
- this.logout();
348
- }
349
- return this.user;
350
- };
351
- AuthService.prototype.getCurrentUser = function () {
352
- this.user = new User();
353
- if (!this.user.loadFromStorage()) {
354
- this.user = null;
355
- }
356
- return Observable.of(this.user);
357
- };
358
- AuthService.prototype.isAuthenticated = function () {
359
- if (this.isTokenExpired()) {
360
- this.doLogoutUser();
361
- }
362
- this.getCurrentUserAsUser();
363
- this.userInSubject.next(this.user);
364
- return this.getToken() && !this.isTokenExpired() && this.user != null;
365
- };
366
- /* TOKEN */
367
- AuthService.prototype.logout = function () {
368
- this.doLogoutUser();
369
- };
370
- AuthService.prototype.refreshToken = function () {
371
- var _this = this;
372
- var data = __assign(__assign({}, this.constants.loginExtraData()), { refresh_token: this.getRefreshToken() });
373
- return this.connection.post(this.tokenApi(), data).pipe(map(function (res) { return _this.doLoginUser(res); }));
374
- };
375
- AuthService.prototype.getToken = function () {
376
- return localStorage.getItem(this.JWT_TOKEN);
377
- };
378
- AuthService.prototype.doLoginUser = function (tokens) {
379
- this.user = new User();
380
- this.user.initilized(tokens);
381
- this.forceChannelsForSeller(tokens);
382
- this.user.persistInStorage();
383
- localStorage.setItem(this.EXPIRATES_IN, moment(tokens.expires_in).add(1, 'h').format());
384
- localStorage.setItem(this.REFRESH_TOKEN, moment(tokens.expires_in).add(1, 'h').format());
385
- localStorage.setItem(this.JWT_TOKEN, tokens.token);
386
- localStorage.setItem(this.MAIL, tokens.username);
387
- this.userInSubject.next(this.user);
388
- this.loggedInSubject.next(true);
389
- this.loggingInSubject.next(false);
390
- };
391
- AuthService.prototype.doLogoutUser = function () {
392
- this.user = null;
393
- localStorage.removeItem(this.USER);
394
- localStorage.removeItem(this.EXPIRATES_IN);
395
- localStorage.removeItem(this.JWT_TOKEN);
396
- localStorage.removeItem(this.REFRESH_TOKEN);
397
- localStorage.removeItem('cart_token');
398
- localStorage.removeItem(this.MAIL);
399
- localStorage.removeItem(this.CHANNEL);
400
- localStorage.removeItem(this.CHANNELSELLER);
401
- localStorage.removeItem(this.LOCALE);
402
- localStorage.removeItem(this.CUSTOMER);
403
- localStorage.removeItem('MASTER_CHANNEL');
404
- this.loggedInSubject.next(false);
405
- this.userInSubject.next(this.user);
406
- this.channelsUserSubject.next([]);
407
- };
408
- AuthService.prototype.getRefreshToken = function () {
409
- return localStorage.getItem(this.REFRESH_TOKEN);
410
- };
411
- AuthService.ctorParameters = function () { return [
412
- { type: ConnectionService },
413
- { type: ToastrService },
414
- { type: Constants },
415
- { type: Injector }
416
- ]; };
417
- AuthService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AuthService_Factory() { return new i1.AuthService(i0.ɵɵinject(i1.ConnectionService), i0.ɵɵinject(i2.ToastrService), i0.ɵɵinject(i1.Constants), i0.ɵɵinject(i0.INJECTOR)); }, token: i1.AuthService, providedIn: "root" });
418
- AuthService = __decorate([
419
- Injectable({
420
- providedIn: 'root'
421
- })
422
- ], AuthService);
423
- return AuthService;
424
- }());
425
- export { AuthService };
426
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQU83QztJQTBDSSxxQkFBb0IsVUFBNkIsRUFDckMsYUFBNEIsRUFDNUIsU0FBb0IsRUFDcEIsUUFBa0I7UUFIOUIsaUJBTUM7UUFObUIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDckMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBM0NiLGNBQVMs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QWlCO2dCQUN0QixhQUFhO2dCQUNqQixTQUFTO2dCQUNWLFFBQVE7OztJQTdDckIsV0FBVztRQUh2QixVQUFVLENBQUM7WUFDUixVQUFVLEVBQUUsTUFBTTtTQUNyQixDQUFDO09BQ1csV0FBVyxDQTRXdkI7c0JBOVhEO0NBOFhDLEFBNVdELElBNFdDO1NBNVdZLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaS9jb25uZWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jbGFzc2VzL3VzZXInO1xyXG5pbXBvcnQgJ3J4anMvYWRkL29ic2VydmFibGUvb2YnO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL2NvcmUuY29uc3RzJztcclxuaW1wb3J0IHsgbWFwLCBtYXBUbywgY2F0Y2hFcnJvciwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzLWNvbXBhdC9vcGVyYXRvci90YWtlJztcclxuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFVzZXJSb2xlVHlwZSB9IGZyb20gJy4uL2NsYXNzZXMvdXNlci1yb2xlLXR5cGUnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBKV1RfVE9LRU4gPSAnSldUX1RPS0VOJ1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBSRUZSRVNIX1RPS0VOID0gJ1JFRlJFU0hfVE9LRU4nXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IEVYUElSQVRFU19JTiA9ICdFWFBJUkFURVNfSU4nXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IFVTRVIgPSAnVVNFUidcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgTUFJTCA9ICdtYWlsJ1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBMT0NBTEUgPSAnTE9DQUxFJ1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBDSEFOTkVMID0gJ0NIQU5ORUwnXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IENVU1RPTUVSID0gJ0NVU1RPTUVSJ1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBDSEFOTkVMU0VMTEVSID0gJ0NIQU5ORUxTRUxMRVInXHJcblxyXG4gICAgLyogYWN0aXZlQ2hhbm5lbFN3aXRjaD8gKi9cclxuICAgIHByaXZhdGUgYWN0aXZlQ2hhbm5lbENoYW5nZTogYm9vbGVhbiA9IGZhbHNlXHJcbiAgICBwcml2YXRlIGxvZ2dlZEluU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihmYWxzZSlcclxuICAgIHByaXZhdGUgbG9nZ2luZ0luU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihmYWxzZSlcclxuICAgIHByaXZhdGUgdXNlckluU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXNlcj4obnVsbClcclxuICAgIHByaXZhdGUgY2hhbm5lbHNVc2VyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKVxyXG4gICAgLyogcHJpdmF0ZSBjdXN0b21lclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCkgKi9cclxuICAgIHByaXZhdGUgdXNlcjogVXNlciA9IG51bGxcclxuXHJcbiAgICAvLyBBUElTXHJcbiAgICBwdWJsaWMgdG9rZW5BcGkgPSAoKSA9PiAnc2hvcC1hcGkvbG9naW5fY2hlY2snO1xyXG4gICAgcHVibGljIHJlZ2lzdGVyQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0YW50cy5nZXRDaGFubmVsKCkgKyAnL3JlZ2lzdGVyJztcclxuICAgIHB1YmxpYyByZWdpc3Rlcldob2xlc2FsZXJBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSArICcvcmVnaXN0ZXItd2hvbGVzYWxlcic7XHJcbiAgICBwdWJsaWMgY29uZmlybUFjY291bnRBcGkgPSAodG9rZW4pID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdGFudHMuZ2V0Q2hhbm5lbCgpICsgJy92ZXJpZnktYWNjb3VudD90b2tlbj0nICsgdG9rZW47XHJcbiAgICBwdWJsaWMgcmVzZXRQYXNzd29yZEFwaSA9ICh0b2tlbikgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0YW50cy5nZXRDaGFubmVsKCkgKyAnL3Bhc3N3b3JkLXJlc2V0LycgKyB0b2tlbjtcclxuICAgIHB1YmxpYyByZWNvdmVyUGFzc3dvcmRBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSArICcvcmVxdWVzdC1wYXNzd29yZC1yZXNldCc7XHJcbiAgICBwdWJsaWMgY291bnRyaWVzQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0YW50cy5nZXRDaGFubmVsKCkgKyAnL2NvdW50cmllcyc7XHJcblxyXG4gICAgLy8gQXRyaWJ1dG9zIHV0aWxlc1xyXG4gICAgcHVibGljIHdhaXRpbmcgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBsb2dnZWRJbiA9IHRoaXMubG9nZ2VkSW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXHJcbiAgICBwdWJsaWMgbG9nZ2luZ0luID0gdGhpcy5sb2dnaW5nSW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXHJcbiAgICBwdWJsaWMgdXNlckF1dGggPSB0aGlzLnVzZXJJblN1YmplY3QuYXNPYnNlcnZhYmxlKClcclxuICAgIHB1YmxpYyBjaGFubmVsc1VzZXIgPSB0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QuYXNPYnNlcnZhYmxlKClcclxuICAgIC8qIHByaXZhdGUgY3VzdG9tZXIgPSB0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QuYXNPYnNlcnZhYmxlKCkgKi9cclxuICAgIHByaXZhdGUgY3VzdG9tZXIgPSBudWxsXHJcbiAgICBwdWJsaWMgY2hhbm5lbCA9IG51bGxcclxuICAgIHB1YmxpYyBjaGFubmVscyA9IFtdXHJcbiAgICBwcml2YXRlIGhvbWVSZXNvbHZlciA9IG51bGxcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbm5lY3Rpb246IENvbm5lY3Rpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdG9hc3RyU2VydmljZTogVG9hc3RyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNvbnN0YW50czogQ29uc3RhbnRzLFxyXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIHRoaXMubG9nZ2VkSW5TdWJqZWN0Lm5leHQodHJ1ZSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjIERldnVlbHZlIHVuIG9ic2VydmFibGVcclxuICAgICAqIEBwYXJhbSB1c2VyIE9iamV0byBxdWUgY29udGllbmUgdXNlcm5hbWUgeSBwYXNzd29yZCBcclxuICAgICAqL1xyXG4gICAgbG9naW4odXNlcjogeyB1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nIH0sIHdpdGhSb2xlczogVXNlclJvbGVUeXBlW10gPSBbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoQ2hhbm5lbENvbmZpZ1NlcnZpY2UpLmNoYW5uZWxDb25maWckLnN1YnNjcmliZShjaCA9PiB0aGlzLmNoYW5uZWwgPSBjaCk7XHJcbiAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoQ2hhbm5lbENvbmZpZ1NlcnZpY2UpLmNoYW5uZWxzLnN1YnNjcmliZShjaCA9PiB0aGlzLmNoYW5uZWxzID0gY2gpO1xyXG4gICAgICAgIHRoaXMubG9nZ2luZ0luU3ViamVjdC5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0aXIgZWwgdXNlcm5hbWUgYSBtaW7DunNjdWxhc1xyXG4gICAgICAgIHVzZXIgPSB7IC4uLnVzZXIsIHVzZXJuYW1lOiB1c2VyLnVzZXJuYW1lLnRvTG93ZXJDYXNlKCksIC4uLnRoaXMuY29uc3RhbnRzLmxvZ2luRXh0cmFEYXRhKCkgfTtcclxuXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMudG9rZW5BcGkoKSwgdXNlcikucGlwZShcclxuICAgICAgICAgICAgbWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGFubmVsQWNjZXNzUGVybWlzc2lvbih7IC4uLnVzZXIsIC4uLnJlcyB9KSAmJiB0aGlzLmlzQWxsb3dlZFJvbGUod2l0aFJvbGVzLCByZXMudHlwZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvTG9naW5Vc2VyKHsgLi4udXNlciwgLi4ucmVzIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdlcnJvcic7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dpbmdJblN1YmplY3QubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoZXJyLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBjaGFubmVsQWNjZXNzUGVybWlzc2lvbiA9IChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QubmV4dChbXSlcclxuXHJcbiAgICAgICAgLyogUGxlYXNlIHJlbW92ZSB0aGlzIEFTQVAgLSBOZWVkcyAqY2hhbm5lbHMqIGFycmF5IGluIHVzZXIgb2JqZWN0IEFMV0FZUyAqL1xyXG4gICAgICAgIC8qIGlmIChVc2VyUm9sZVR5cGUuU0VMTEVSID09IHJlcy50eXBlIGFzIFVzZXJSb2xlVHlwZSkgcmV0dXJuIHRydWUgKi9cclxuXHJcbiAgICAgICAgLyogTm8gYXV0aG9yaXplZCBjaGFubmVscyAqL1xyXG4gICAgICAgIGlmIChyZXMuY2hhbm5lbHM/Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICAvKiBTb21lIGF1dGhvcml6ZWQgY2hhbm5lbChzKSBpbmNsdWRpbmcgY3VycmVudCBjaGFubmVsICovXHJcbiAgICAgICAgaWYgKHJlcy5jaGFubmVscy5maW5kKHVzZXJjaGFubmVsID0+IHVzZXJjaGFubmVsLmNvZGUgPT09IHRoaXMuY2hhbm5lbC5jb2RlKSkge1xyXG4gICAgICAgICAgICAvKiBNdWx0aXBsZSBhdXRob3JpemVkIGNoYW5uZWxzIGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cclxuICAgICAgICAgICAgaWYgKHJlcy5jaGFubmVscz8ubGVuZ3RoID4gMSAmJiB0aGlzLmFjdGl2ZUNoYW5uZWxDaGFuZ2UpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QubmV4dChyZXMuY2hhbm5lbHMpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qIE9uZSBhdXRob3JpemVkIGNoYW5uZWwgbm90IGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cclxuICAgICAgICBpZiAocmVzLmNoYW5uZWxzPy5sZW5ndGggPT0gMSAmJiB0aGlzLmFjdGl2ZUNoYW5uZWxDaGFuZ2UpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHJlcy5wYXNzd29yZFxyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxBY2Nlc3MocmVzLmNoYW5uZWxzWzBdLCByZXMpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qIE11bHRpcGxlIGF1dGhvcml6ZWQgY2hhbm5lbHMgbm90IGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cclxuICAgICAgICBpZiAodGhpcy5hY3RpdmVDaGFubmVsQ2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHNVc2VyU3ViamVjdC5uZXh0KHJlcy5jaGFubmVscylcclxuICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgY2hhbm5lbEFjY2VzcyA9IChjaGFubmVsLCB1c2VyID0gbnVsbCkgPT4ge1xyXG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgIT0gY2hhbm5lbC5ob3N0bmFtZSkge1xyXG4gICAgICAgICAgICBsZXQgZW5jb2RlZCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkodXNlciAhPSBudWxsID8gdXNlciA6IHRoaXMudXNlcikpXHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGAke3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbH0vLyR7Y2hhbm5lbC5ob3N0bmFtZX0vYXV0aC9yZWRpcmVjdC8ke2VuY29kZWR9YClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnN0YW50cy5tb2RpZnlDaGFubmVsQ29uZmlnKGNoYW5uZWwpXHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjIERldnVlbHZlIHVuYSBwcm9tZXNhXHJcbiAgICAgKiBAcGFyYW0gdXNlciBPYmpldG8gcXVlIGNvbnRpZW5lIHVzZXJuYW1lIHkgcGFzc3dvcmQgXHJcbiAgICAgKi9cclxuICAgIGRvTG9naW4gPSAodXNlcjogeyB1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICB0aGlzLmxvZ2dpbmdJblN1YmplY3QubmV4dCh0cnVlKTtcclxuICAgICAgICB1c2VyID0geyAuLi51c2VyLCAuLi50aGlzLmNvbnN0YW50cy5sb2dpbkV4dHJhRGF0YSgpIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMudG9rZW5BcGkoKSwgdXNlcikucGlwZShcclxuICAgICAgICAgICAgbWFwKHJlcyA9PiB0aGlzLmRvTG9naW5Vc2VyKHJlcykpLFxyXG4gICAgICAgICAgICBtYXBUbygnb2snKSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnaW5nSW5TdWJqZWN0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKGVyci50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXJQcm9maWxlKCk6IE9ic2VydmFibGU8VXNlcj4ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy51c2VyICYmIE9ic2VydmFibGUub2YodGhpcy51c2VyKSkgfHwgdGhpcy5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXJQcm9maWxlQXNVc2VyKCk6IFVzZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXIgfHwgdGhpcy5nZXRDdXJyZW50VXNlckFzVXNlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q3VycmVudFVzZXJBc1VzZXIoKTogVXNlciB7XHJcbiAgICAgICAgdGhpcy51c2VyID0gbmV3IFVzZXIoKTtcclxuICAgICAgICBpZiAoIXRoaXMudXNlci5sb2FkRnJvbVN0b3JhZ2UoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXIgPSBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMudXNlcj8uY2hhbm5lbHMuZmluZCh1c2VyY2hhbm5lbCA9PiB1c2VyY2hhbm5lbD8uY29kZSA9PT0gdGhpcy5jb25zdGFudHMuZ2V0Q2hhbm5lbCgpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nb3V0KClcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlcjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEN1cnJlbnRVc2VyKCk6IE9ic2VydmFibGU8VXNlcj4ge1xyXG4gICAgICAgIHRoaXMudXNlciA9IG5ldyBVc2VyKCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVzZXIubG9hZEZyb21TdG9yYWdlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy51c2VyID0gbnVsbFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZih0aGlzLnVzZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25VcCA9IChkYXRhKSA9PiB7XHJcbiAgICAgICAgLy8gQ29udmVydGlyIGVsIGVtYWlsIGEgbWluw7pzY3VsYXMgc2kgZXhpc3RlXHJcbiAgICAgICAgaWYgKGRhdGEuZW1haWwpIHtcclxuICAgICAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSwgZW1haWw6IGRhdGEuZW1haWwudG9Mb3dlckNhc2UoKSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5yZWdpc3RlckFwaSgpLCBkYXRhKTtcclxuICAgIH07XHJcblxyXG4gICAgaXNBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5kb0xvZ291dFVzZXIoKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldEN1cnJlbnRVc2VyQXNVc2VyKClcclxuICAgICAgICB0aGlzLnVzZXJJblN1YmplY3QubmV4dCh0aGlzLnVzZXIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKCkgJiYgIXRoaXMuaXNUb2tlbkV4cGlyZWQoKSAmJiB0aGlzLnVzZXIgIT0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25maXJtQWNjb3VudCA9ICh0b2tlbjogc3RyaW5nKSA9PlxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5jb25maXJtQWNjb3VudEFwaSh0b2tlbikpO1xyXG5cclxuICAgIHBhc3N3b3JkUmVzZXQgPSAobmV3X3Bhc3N3b3JkLCB0b2tlbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IHBhc3N3b3JkOiB7IGZpcnN0OiBuZXdfcGFzc3dvcmQsIHNlY29uZDogbmV3X3Bhc3N3b3JkIH0gfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uLnB1dCh0aGlzLnJlc2V0UGFzc3dvcmRBcGkodG9rZW4pLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICByZWNvdmVyUGFzc3dvcmQgPSAoZW1haWw6IHN0cmluZykgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucHV0KHRoaXMucmVjb3ZlclBhc3N3b3JkQXBpKCksIHsgZW1haWwgfSk7XHJcblxyXG4gICAgLyogVE9LRU4gKi9cclxuXHJcbiAgICBsb2dvdXQoKSB7XHJcbiAgICAgICAgdGhpcy5kb0xvZ291dFVzZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICByZWZyZXNoVG9rZW4oKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7IC4uLnRoaXMuY29uc3RhbnRzLmxvZ2luRXh0cmFEYXRhKCksIHJlZnJlc2hfdG9rZW46IHRoaXMuZ2V0UmVmcmVzaFRva2VuKCkgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLnRva2VuQXBpKCksIGRhdGEpLnBpcGUobWFwKFxyXG4gICAgICAgICAgICByZXMgPT4gdGhpcy5kb0xvZ2luVXNlcihyZXMpXHJcbiAgICAgICAgKSlcclxuICAgIH1cclxuXHJcbiAgICBnZXRUb2tlbigpIHtcclxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5KV1RfVE9LRU4pO1xyXG4gICAgfVxyXG5cclxuICAgIGlzVG9rZW5FeHBpcmVkID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZlY2hhX2V4cGlyYWNpb24gPSB0aGlzLmdldEV4cGlyYXRlc0F0KCk7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbW9tZW50KCkgPj0gbW9tZW50KGZlY2hhX2V4cGlyYWNpb24pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RXhwaXJhdGVzQXQgPSAoKSA9PiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkVYUElSQVRFU19JTik7XHJcblxyXG4gICAgcHVibGljIGRvTG9naW5Vc2VyKHRva2Vucykge1xyXG4gICAgICAgIHRoaXMudXNlciA9IG5ldyBVc2VyKClcclxuICAgICAgICB0aGlzLnVzZXIuaW5pdGlsaXplZCh0b2tlbnMpXHJcbiAgICAgICAgdGhpcy5mb3JjZUNoYW5uZWxzRm9yU2VsbGVyKHRva2VucylcclxuICAgICAgICB0aGlzLnVzZXIucGVyc2lzdEluU3RvcmFnZSgpXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5FWFBJUkFURVNfSU4sIG1vbWVudCh0b2tlbnMuZXhwaXJlc19pbikuYWRkKDEsICdoJykuZm9ybWF0KCkpO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuUkVGUkVTSF9UT0tFTiwgbW9tZW50KHRva2Vucy5leHBpcmVzX2luKS5hZGQoMSwgJ2gnKS5mb3JtYXQoKSk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5KV1RfVE9LRU4sIHRva2Vucy50b2tlbik7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5NQUlMLCB0b2tlbnMudXNlcm5hbWUpO1xyXG4gICAgICAgIHRoaXMudXNlckluU3ViamVjdC5uZXh0KHRoaXMudXNlcik7XHJcbiAgICAgICAgdGhpcy5sb2dnZWRJblN1YmplY3QubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLmxvZ2dpbmdJblN1YmplY3QubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRvTG9nb3V0VXNlcigpIHtcclxuICAgICAgICB0aGlzLnVzZXIgPSBudWxsXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5VU0VSKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkVYUElSQVRFU19JTik7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5KV1RfVE9LRU4pO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuUkVGUkVTSF9UT0tFTik7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2NhcnRfdG9rZW4nKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLk1BSUwpO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ0hBTk5FTCk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkxPQ0FMRSk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DVVNUT01FUik7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ01BU1RFUl9DSEFOTkVMJyk7XHJcbiAgICAgICAgdGhpcy5sb2dnZWRJblN1YmplY3QubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy51c2VySW5TdWJqZWN0Lm5leHQodGhpcy51c2VyKTtcclxuICAgICAgICB0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QubmV4dChbXSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFJlZnJlc2hUb2tlbigpIHtcclxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5SRUZSRVNIX1RPS0VOKTtcclxuICAgIH1cclxuXHJcbiAgICBoYXNUb1JlZnJlc2ggPSAoKSA9PiB0aGlzLmdldFJlZnJlc2hUb2tlbigpO1xyXG5cclxuICAgIHNpZ25VcFdob2xlc2FsZXIgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgIC8vIENvbnZlcnRpciBlbCBlbWFpbCBhIG1pbsO6c2N1bGFzIHNpIGV4aXN0ZVxyXG4gICAgICAgIGlmIChkYXRhLmVtYWlsKSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIGVtYWlsOiBkYXRhLmVtYWlsLnRvTG93ZXJDYXNlKCkgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMucmVnaXN0ZXJXaG9sZXNhbGVyQXBpKCksIGRhdGEpO1xyXG4gICAgfTtcclxuXHJcbiAgICBnZXRDb3VudHJpZXNEYXRhID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuY291bnRyaWVzQXBpKCkpLnBpcGUobWFwKHJlcyA9PiByZXMuX2VtYmVkZGVkLml0ZW1zKSkudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgcHVibGljIHNldEFjdGl2ZUNoYW5uZWxDaGFuZ2UgPSAoYWN0aXZlbHlDaGFuZ2VDaGFubmVsc09uTG9naW46IGJvb2xlYW4pID0+IHRoaXMuYWN0aXZlQ2hhbm5lbENoYW5nZSA9IGFjdGl2ZWx5Q2hhbmdlQ2hhbm5lbHNPbkxvZ2luXHJcblxyXG4gICAgcHJpdmF0ZSBpc0FsbG93ZWRSb2xlID0gKGFsbG93ZWRSb2xlczogVXNlclJvbGVUeXBlW10sIHJvbGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHJldHVybiBhbGxvd2VkUm9sZXMubGVuZ3RoXHJcbiAgICAgICAgICAgID8gYWxsb3dlZFJvbGVzLmluY2x1ZGVzKHJvbGUgYXMgVXNlclJvbGVUeXBlKVxyXG4gICAgICAgICAgICA6IHRydWVcclxuICAgIH1cclxuXHJcbiAgICAvKiBQbGVhc2UgcmVtb3ZlIHRoaXMgQVNBUCAtIE5lZWRzICpjaGFubmVscyogYXJyYXkgaW4gdXNlciBvYmplY3QgQUxXQVlTICovXHJcbiAgICBwcml2YXRlIGZvcmNlQ2hhbm5lbHNGb3JTZWxsZXIgPSB0b2tlbnMgPT4ge1xyXG4gICAgICAgIGlmIChVc2VyUm9sZVR5cGUuU0VMTEVSID09IHRva2Vucy50eXBlIGFzIFVzZXJSb2xlVHlwZSlcclxuICAgICAgICAgICAgdGhpcy5jaGFubmVscz8ubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMudXNlci5zZXRDaGFubmVscyguLi50aGlzLmNoYW5uZWxzKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnVzZXIuc2V0Q2hhbm5lbHModGhpcy5jaGFubmVsKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENhbWJpYSBkZSBjYW5hbFxyXG4gICAgICogQHBhcmFtIGNoYW5uZWxDb25maWcgZGViZSBzZXIgdW4gb2JqZXRvIHF1ZSBjb250ZW5nYSBhbCBtZW5vcyBsYXMga2V5cyBjaGFubmVsIHkgbG9jYWxlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNoYW5nZUNoYW5uZWwgPSAoY2hhbm5lbENvbmZpZzphbnkpID0+IHtcclxuICAgICAgICB0aGlzLmNvbnN0YW50cy5tb2RpZnlDaGFubmVsQ29uZmlnKHtcclxuICAgICAgICAgICAgY2hhbm5lbDogY2hhbm5lbENvbmZpZy5jaGFubmVsLFxyXG4gICAgICAgICAgICBsb2NhbGU6IGNoYW5uZWxDb25maWcubG9jYWxlXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDYXJnYSBlbCBjbGllbnRlIGNvbiBlbCBxdWUgc2UgcmVhbGl6YXJhbiBwZWRpZG9zLiBTaSByZWNpYmUgZWwgdmFsb3IgbnVsbFxyXG4gICAgICogc2UgdnVlbHZlIGEgY2FyZ2FyIGVsIHZlbmRlZG9yIHBhcmEgc3UgdXNvLiAgXHJcbiAgICAgKiBAcGFyYW0gY3VzdG9tZXIgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRDdXN0b21lciA9IGN1c3RvbWVyID0+IHtcclxuICAgICAgICBsZXQgcmVmcmVzaFBhZ2UgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMuY3VzdG9tZXIgPSBjdXN0b21lclxyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ1VTVE9NRVIsIEpTT04uc3RyaW5naWZ5KGN1c3RvbWVyKSlcclxuICAgICAgICBcclxuICAgICAgICBsZXQgc2FtZUNoYW5uZWwgPSBjdXN0b21lciA/IHRoaXMuc2FtZUNoYW5uZWwoY3VzdG9tZXIuY2hhbm5lbHNbMF0uY29kZSwgY3VzdG9tZXIuY2hhbm5lbHNbMF0ubG9jYWxlcy5jb2RlKSA6IG51bGxcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY3VzdG9tZXIpIHtcclxuICAgICAgICAgICAgaWYoIXNhbWVDaGFubmVsKXtcclxuICAgICAgICAgICAgICAgICFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNIQU5ORUxTRUxMRVIpID9cclxuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNIQU5ORUxTRUxMRVIsIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbDogdGhpcy5jb25zdGFudHMuZ2V0Q2hhbm5lbCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IHRoaXMuY29uc3RhbnRzLmdldExvY2FsZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQ2hhbm5lbCh7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbDogY3VzdG9tZXIuY2hhbm5lbHNbMF0uY29kZSxcclxuICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IGN1c3RvbWVyLmNoYW5uZWxzWzBdLmxvY2FsZXMuY29kZVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKSlcclxuICAgICAgICAgICAgaWYocmVzKXtcclxuICAgICAgICAgICAgICAgIGlmKCF0aGlzLnNhbWVDaGFubmVsKHJlcy5jaGFubmVsLCByZXMubG9jYWxlKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VDaGFubmVsKHJlcylcclxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSA9IHRydWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ0hBTk5FTFNFTExFUik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoQ2FydFNlcnZpY2UpLmNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKVxyXG4gICAgICAgIHJlZnJlc2hQYWdlID8gbG9jYXRpb24uaHJlZiA9IGxvY2F0aW9uLmhyZWYgOiBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHJ1ZWJhIHNpIGxvcyB2YWxvcmVzIGRlbCBjYW5hbCBhY3R1YWwgc29uIGlndWFsZXMgYSBsb3MgaW5ncmVzYWRvIHBvciBwYXJhbWV0cm9zLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWwgTm9tYnJlIGRlbCBjYW5hbFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2FsZSAgTG9jYWxlIGRlbCBjYW5hbFxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgc2kgZXMgZWwgbWlzbW8gY2FuYWwsIEZhbHNlIGNhc28gY29udHJhcmlvLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNhbWVDaGFubmVsID0gKGNoYW5uZWw6c3RyaW5nLCBsb2NhbGU6c3RyaW5nKTpib29sZWFuID0+IChjaGFubmVsID09IHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSkgJiYgKGxvY2FsZSA9PSB0aGlzLmNvbnN0YW50cy5nZXRMb2NhbGUoKSlcclxuXHJcbiAgICAvKiBwdWJsaWMgZ2V0Q3VzdG9tZXIgPSAoKSA9PiBPYnNlcnZhYmxlLm9mKEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DVVNUT01FUikpKSAqL1xyXG5cclxuICAgIHB1YmxpYyBnZXRDdXN0b21lciA9ICgpID0+IHtcclxuICAgICAgICAvKiB0aGlzLmN1c3RvbWVyU3ViamVjdC5uZXh0KEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DVVNUT01FUikpKVxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbWVyICovXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tZXIgfHwgSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNVU1RPTUVSKSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0SG9tZVJlc29sdmVyID0gcmVzb2x2ZXJGdW5jdGlvbiA9PiB0aGlzLmhvbWVSZXNvbHZlciA9IHJlc29sdmVyRnVuY3Rpb25cclxuXHJcbiAgICBwdWJsaWMgZ2V0SG9tZVJlc29sdmVyID0gKCkgPT4gdGhpcy5ob21lUmVzb2x2ZXJcclxuXHJcbiAgICBwdWJsaWMgaXNBYmxlVG9CdXkgPSAoKTogYm9vbGVhbiA9PiAhdGhpcy5nZXRVc2VyUHJvZmlsZUFzVXNlcigpPy5pc1NlbGxlcigpIHx8ICEhdGhpcy5nZXRDdXN0b21lcigpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRXZhbHVhIHNpIGVsIHZhbG9yIHF1ZSBpbmdyZXNhIHBvciBwYXLDoW1ldHJvIGVzIG1heW9yIG8gaWd1YWwgYWwgbcOtbmltbyBkZSBjb21wcmFcclxuICAgICAqIHF1ZSBlbCB1c3VhcmlvIHRpZW5lIGFzaWduYWRvIGEgZXNlIGNhbmFsLCBkaWZlcmVuY2lhbmRvIHNpIGVzIG1heW9yaXN0YSBvIG1pbm9yaXN0YS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIHNpIGV4Y2VkZSBlbCBtb250bywgZmFsc2UgY2FzbyBjb250cmFyaW9cclxuICAgICAqL1xyXG4gICAgcHVibGljIGV4Y2VlZHNNaW5pbXVtQW1vdW50ID0gKHZhbHVlOm51bWJlcj0wKTpib29sZWFuID0+ICBcclxuICAgICAgICB0aGlzLnVzZXIuaXNXaG9sZXNhbGVyKCkgPyB0aGlzLnVzZXIuY2hhbm5lbHMuZmluZCggY2hhbm5lbCA9PiB0aGlzLmNvbnN0YW50cy5nZXRDaGFubmVsKCkgPT0gY2hhbm5lbC5jb2RlKS53aG9sZXNhbGVyTWluaW11bVB1cmNoYXNlQW1vdW50IDw9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy51c2VyLmNoYW5uZWxzLmZpbmQoIGNoYW5uZWwgPT4gdGhpcy5jb25zdGFudHMuZ2V0Q2hhbm5lbCgpID09IGNoYW5uZWwuY29kZSkucmV0YWlsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnQgPD0gdmFsdWVcclxufSJdfQ==
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
13
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
15
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
16
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
17
+ };
18
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
19
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20
+ return new (P || (P = Promise))(function (resolve, reject) {
21
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
22
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
23
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
24
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
25
+ });
26
+ };
27
+ var __generator = (this && this.__generator) || function (thisArg, body) {
28
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
29
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
30
+ function verb(n) { return function (v) { return step([n, v]); }; }
31
+ function step(op) {
32
+ if (f) throw new TypeError("Generator is already executing.");
33
+ while (_) try {
34
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
35
+ if (y = 0, t) op = [op[0] & 2, t.value];
36
+ switch (op[0]) {
37
+ case 0: case 1: t = op; break;
38
+ case 4: _.label++; return { value: op[1], done: false };
39
+ case 5: _.label++; y = op[1]; op = [0]; continue;
40
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
41
+ default:
42
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
43
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
44
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
45
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
46
+ if (t[2]) _.ops.pop();
47
+ _.trys.pop(); continue;
48
+ }
49
+ op = body.call(thisArg, _);
50
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
51
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
52
+ }
53
+ };
54
+ var __read = (this && this.__read) || function (o, n) {
55
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
56
+ if (!m) return o;
57
+ var i = m.call(o), r, ar = [], e;
58
+ try {
59
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
60
+ }
61
+ catch (error) { e = { error: error }; }
62
+ finally {
63
+ try {
64
+ if (r && !r.done && (m = i["return"])) m.call(i);
65
+ }
66
+ finally { if (e) throw e.error; }
67
+ }
68
+ return ar;
69
+ };
70
+ var __spread = (this && this.__spread) || function () {
71
+ for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
72
+ return ar;
73
+ };
74
+ import { Injectable, Injector } from '@angular/core';
75
+ import { ConnectionService } from '../api/connection.service';
76
+ import { Observable, BehaviorSubject, of } from 'rxjs';
77
+ import { User } from '../classes/user';
78
+ import 'rxjs/add/observable/of';
79
+ import { ToastrService } from 'ngx-toastr';
80
+ import { Constants } from '../core.consts';
81
+ import { map, mapTo, catchError } from 'rxjs/operators';
82
+ import * as moment from "moment";
83
+ import { ChannelConfigService } from './channel-config.service';
84
+ import { CartService } from './cart.service';
85
+ import * as i0 from "@angular/core";
86
+ import * as i1 from "../../public-api";
87
+ import * as i2 from "ngx-toastr";
88
+ var AuthService = /** @class */ (function () {
89
+ function AuthService(connection, toastrService, constants, injector) {
90
+ var _this = this;
91
+ this.connection = connection;
92
+ this.toastrService = toastrService;
93
+ this.constants = constants;
94
+ this.injector = injector;
95
+ this.JWT_TOKEN = 'JWT_TOKEN';
96
+ this.REFRESH_TOKEN = 'REFRESH_TOKEN';
97
+ this.EXPIRATES_IN = 'EXPIRATES_IN';
98
+ this.USER = 'USER';
99
+ this.MAIL = 'mail';
100
+ this.LOCALE = 'LOCALE';
101
+ this.CHANNEL = 'CHANNEL';
102
+ this.CUSTOMER = 'CUSTOMER';
103
+ this.CHANNELSELLER = 'CHANNELSELLER';
104
+ /* activeChannelSwitch? */
105
+ this.activeChannelChange = false;
106
+ this.loggedInSubject = new BehaviorSubject(false);
107
+ this.loggingInSubject = new BehaviorSubject(false);
108
+ this.userInSubject = new BehaviorSubject(null);
109
+ this.channelsUserSubject = new BehaviorSubject([]);
110
+ /* private customerSubject = new BehaviorSubject<any>(null) */
111
+ this.user = null;
112
+ // APIS
113
+ this.tokenApi = function () { return 'shop-api/login_check'; };
114
+ this.registerApi = function () { return 'shop-api/' + _this.constants.getChannel() + '/register'; };
115
+ this.registerWholesalerApi = function () { return 'shop-api/' + _this.constants.getChannel() + '/register-wholesaler'; };
116
+ this.confirmAccountApi = function (token) { return 'shop-api/' + _this.constants.getChannel() + '/verify-account?token=' + token; };
117
+ this.resetPasswordApi = function (token) { return 'shop-api/' + _this.constants.getChannel() + '/password-reset/' + token; };
118
+ this.recoverPasswordApi = function () { return 'shop-api/' + _this.constants.getChannel() + '/request-password-reset'; };
119
+ this.countriesApi = function () { return 'shop-api/' + _this.constants.getChannel() + '/countries'; };
120
+ // Atributos utiles
121
+ this.waiting = false;
122
+ this.loggedIn = this.loggedInSubject.asObservable();
123
+ this.loggingIn = this.loggingInSubject.asObservable();
124
+ this.userAuth = this.userInSubject.asObservable();
125
+ this.channelsUser = this.channelsUserSubject.asObservable();
126
+ /* private customer = this.channelsUserSubject.asObservable() */
127
+ this.customer = null;
128
+ this.channel = null;
129
+ this.channels = [];
130
+ this.homeResolver = null;
131
+ this.channelAccessPermission = function (res) {
132
+ var _a, _b, _c;
133
+ _this.channelsUserSubject.next([]);
134
+ /* Please remove this ASAP - Needs *channels* array in user object ALWAYS */
135
+ /* if (UserRoleType.SELLER == res.type as UserRoleType) return true */
136
+ /* No authorized channels */
137
+ if (((_a = res.channels) === null || _a === void 0 ? void 0 : _a.length) == 0) {
138
+ return false;
139
+ }
140
+ /* Some authorized channel(s) including current channel */
141
+ if (res.channels.find(function (userchannel) { return userchannel.code === _this.channel.code; })) {
142
+ /* Multiple authorized channels including current channel */
143
+ if (((_b = res.channels) === null || _b === void 0 ? void 0 : _b.length) > 1 && _this.activeChannelChange)
144
+ _this.channelsUserSubject.next(res.channels);
145
+ return true;
146
+ }
147
+ /* One authorized channel not including current channel */
148
+ if (((_c = res.channels) === null || _c === void 0 ? void 0 : _c.length) == 1 && _this.activeChannelChange) {
149
+ delete res.password;
150
+ _this.channelAccess(res.channels[0], res);
151
+ return true;
152
+ }
153
+ /* Multiple authorized channels not including current channel */
154
+ if (_this.activeChannelChange) {
155
+ _this.channelsUserSubject.next(res.channels);
156
+ return true;
157
+ }
158
+ return false;
159
+ };
160
+ this.channelAccess = function (channel, user) {
161
+ if (user === void 0) { user = null; }
162
+ if (window.location.hostname != channel.hostname) {
163
+ var encoded = btoa(JSON.stringify(user != null ? user : _this.user));
164
+ window.location.replace(window.location.protocol + "//" + channel.hostname + "/auth/redirect/" + encoded);
165
+ }
166
+ else {
167
+ _this.constants.modifyChannelConfig(channel);
168
+ window.location.reload();
169
+ }
170
+ };
171
+ /**
172
+ * @desc Devuelve una promesa
173
+ * @param user Objeto que contiene username y password
174
+ */
175
+ this.doLogin = function (user) {
176
+ _this.loggingInSubject.next(true);
177
+ user = __assign(__assign({}, user), _this.constants.loginExtraData());
178
+ return _this.connection.post(_this.tokenApi(), user).pipe(map(function (res) { return _this.doLoginUser(res); }), mapTo('ok'), catchError(function (err) {
179
+ _this.loggingInSubject.next(false);
180
+ return of(err.toString());
181
+ })).toPromise();
182
+ };
183
+ this.signUp = function (data) {
184
+ // Convertir el email a minúsculas si existe
185
+ if (data.email) {
186
+ data = __assign(__assign({}, data), { email: data.email.toLowerCase() });
187
+ }
188
+ return _this.connection.post(_this.registerApi(), data);
189
+ };
190
+ this.confirmAccount = function (token) {
191
+ return _this.connection.get(_this.confirmAccountApi(token));
192
+ };
193
+ this.passwordReset = function (new_password, token) {
194
+ var data = { password: { first: new_password, second: new_password } };
195
+ return _this.connection.put(_this.resetPasswordApi(token), data);
196
+ };
197
+ this.recoverPassword = function (email) {
198
+ return _this.connection.put(_this.recoverPasswordApi(), { email: email });
199
+ };
200
+ this.isTokenExpired = function () {
201
+ var fecha_expiracion = _this.getExpiratesAt();
202
+ var result = moment() >= moment(fecha_expiracion);
203
+ return result;
204
+ };
205
+ this.getExpiratesAt = function () { return localStorage.getItem(_this.EXPIRATES_IN); };
206
+ this.hasToRefresh = function () { return _this.getRefreshToken(); };
207
+ this.signUpWholesaler = function (data) {
208
+ // Convertir el email a minúsculas si existe
209
+ if (data.email) {
210
+ data = __assign(__assign({}, data), { email: data.email.toLowerCase() });
211
+ }
212
+ return _this.connection.post(_this.registerWholesalerApi(), data);
213
+ };
214
+ this.getCountriesData = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
215
+ return [2 /*return*/, this.connection.get(this.countriesApi()).pipe(map(function (res) { return res._embedded.items; })).toPromise()];
216
+ }); }); };
217
+ this.setActiveChannelChange = function (activelyChangeChannelsOnLogin) { return _this.activeChannelChange = activelyChangeChannelsOnLogin; };
218
+ this.isAllowedRole = function (allowedRoles, role) {
219
+ return allowedRoles.length
220
+ ? allowedRoles.includes(role)
221
+ : true;
222
+ };
223
+ /* Please remove this ASAP - Needs *channels* array in user object ALWAYS */
224
+ this.forceChannelsForSeller = function (tokens) {
225
+ var _a;
226
+ var _b;
227
+ if ("seller" /* SELLER */ == tokens.type)
228
+ ((_b = _this.channels) === null || _b === void 0 ? void 0 : _b.length) ? (_a = _this.user).setChannels.apply(_a, __spread(_this.channels)) : _this.user.setChannels(_this.channel);
229
+ };
230
+ /**
231
+ * @description Cambia de canal
232
+ * @param channelConfig debe ser un objeto que contenga al menos las keys channel y locale.
233
+ */
234
+ this.changeChannel = function (channelConfig) {
235
+ _this.constants.modifyChannelConfig({
236
+ channel: channelConfig.channel,
237
+ locale: channelConfig.locale
238
+ });
239
+ };
240
+ /**
241
+ * @description Carga el cliente con el que se realizaran pedidos. Si recibe el valor null
242
+ * se vuelve a cargar el vendedor para su uso.
243
+ * @param customer
244
+ */
245
+ this.setCustomer = function (customer) {
246
+ var refreshPage = false;
247
+ _this.customer = customer;
248
+ localStorage.setItem(_this.CUSTOMER, JSON.stringify(customer));
249
+ var sameChannel = customer ? _this.sameChannel(customer.channels[0].code, customer.channels[0].locales.code) : null;
250
+ if (customer) {
251
+ if (!sameChannel) {
252
+ !localStorage.getItem(_this.CHANNELSELLER) ?
253
+ localStorage.setItem(_this.CHANNELSELLER, JSON.stringify({
254
+ channel: _this.constants.getChannel(),
255
+ locale: _this.constants.getLocale()
256
+ })) : null;
257
+ _this.changeChannel({
258
+ channel: customer.channels[0].code,
259
+ locale: customer.channels[0].locales.code
260
+ });
261
+ refreshPage = true;
262
+ }
263
+ }
264
+ else {
265
+ var res = JSON.parse(localStorage.getItem(_this.CHANNELSELLER));
266
+ if (res) {
267
+ if (!_this.sameChannel(res.channel, res.locale)) {
268
+ _this.changeChannel(res);
269
+ refreshPage = true;
270
+ }
271
+ localStorage.removeItem(_this.CHANNELSELLER);
272
+ }
273
+ }
274
+ _this.injector.get(CartService).clearAndResetCustomerCart();
275
+ refreshPage ? location.href = location.href : null;
276
+ };
277
+ /**
278
+ * @description Comprueba si los valores del canal actual son iguales a los ingresado por parametros.
279
+ * @param {string} channel Nombre del canal
280
+ * @param {string} locale Locale del canal
281
+ * @returns {boolean} True si es el mismo canal, False caso contrario.
282
+ */
283
+ this.sameChannel = function (channel, locale) { return (channel == _this.constants.getChannel()) && (locale == _this.constants.getLocale()); };
284
+ /* public getCustomer = () => Observable.of(JSON.parse(localStorage.getItem(this.CUSTOMER))) */
285
+ this.getCustomer = function () {
286
+ /* this.customerSubject.next(JSON.parse(localStorage.getItem(this.CUSTOMER)))
287
+ return this.customer */
288
+ return _this.customer || JSON.parse(localStorage.getItem(_this.CUSTOMER));
289
+ };
290
+ this.setHomeResolver = function (resolverFunction) { return _this.homeResolver = resolverFunction; };
291
+ this.getHomeResolver = function () { return _this.homeResolver; };
292
+ this.isAbleToBuy = function () { var _a; return !((_a = _this.getUserProfileAsUser()) === null || _a === void 0 ? void 0 : _a.isSeller()) || !!_this.getCustomer(); };
293
+ /**
294
+ * @description Evalua si el valor que ingresa por parámetro es mayor o igual al mínimo de compra
295
+ * que el usuario tiene asignado a ese canal, diferenciando si es mayorista o minorista.
296
+ * @param {number} value
297
+ * @returns {boolean} true si excede el monto, false caso contrario
298
+ */
299
+ this.exceedsMinimumAmount = function (value) {
300
+ if (value === void 0) { value = 0; }
301
+ return _this.user.isWholesaler() ? _this.user.channels.find(function (channel) { return _this.constants.getChannel() == channel.code; }).wholesalerMinimumPurchaseAmount <= value
302
+ : _this.user.channels.find(function (channel) { return _this.constants.getChannel() == channel.code; }).retailerMinimumPurchaseAmount <= value;
303
+ };
304
+ this.isAuthenticated() && this.loggedInSubject.next(true);
305
+ }
306
+ /**
307
+ * @desc Devuelve un observable
308
+ * @param user Objeto que contiene username y password
309
+ */
310
+ AuthService.prototype.login = function (user, withRoles) {
311
+ var _this = this;
312
+ if (withRoles === void 0) { withRoles = []; }
313
+ this.injector.get(ChannelConfigService).channelConfig$.subscribe(function (ch) { return _this.channel = ch; });
314
+ this.injector.get(ChannelConfigService).channels.subscribe(function (ch) { return _this.channels = ch; });
315
+ this.loggingInSubject.next(true);
316
+ // Convertir el username a minúsculas
317
+ user = __assign(__assign(__assign({}, user), { username: user.username.toLowerCase() }), this.constants.loginExtraData());
318
+ var result = this.connection.post(this.tokenApi(), user).pipe(map(function (res) {
319
+ if (_this.channelAccessPermission(__assign(__assign({}, user), res)) && _this.isAllowedRole(withRoles, res.type)) {
320
+ _this.doLoginUser(__assign(__assign({}, user), res));
321
+ return 'ok';
322
+ }
323
+ return 'error';
324
+ }), catchError(function (err) {
325
+ _this.loggingInSubject.next(false);
326
+ return of(err.toString());
327
+ }));
328
+ return result;
329
+ };
330
+ AuthService.prototype.getUserProfile = function () {
331
+ return (this.user && Observable.of(this.user)) || this.getCurrentUser();
332
+ };
333
+ AuthService.prototype.getUserProfileAsUser = function () {
334
+ return this.user || this.getCurrentUserAsUser();
335
+ };
336
+ AuthService.prototype.getCurrentUserAsUser = function () {
337
+ var _this = this;
338
+ var _a;
339
+ this.user = new User();
340
+ if (!this.user.loadFromStorage()) {
341
+ this.user = null;
342
+ }
343
+ else if ((_a = this.user) === null || _a === void 0 ? void 0 : _a.channels.find(function (userchannel) { var _a; return ((_a = userchannel) === null || _a === void 0 ? void 0 : _a.code) === _this.constants.getChannel(); })) {
344
+ return this.user;
345
+ }
346
+ else {
347
+ this.logout();
348
+ }
349
+ return this.user;
350
+ };
351
+ AuthService.prototype.getCurrentUser = function () {
352
+ this.user = new User();
353
+ if (!this.user.loadFromStorage()) {
354
+ this.user = null;
355
+ }
356
+ return Observable.of(this.user);
357
+ };
358
+ AuthService.prototype.isAuthenticated = function () {
359
+ if (this.isTokenExpired()) {
360
+ this.doLogoutUser();
361
+ }
362
+ this.getCurrentUserAsUser();
363
+ this.userInSubject.next(this.user);
364
+ return this.getToken() && !this.isTokenExpired() && this.user != null;
365
+ };
366
+ /* TOKEN */
367
+ AuthService.prototype.logout = function () {
368
+ this.doLogoutUser();
369
+ };
370
+ AuthService.prototype.refreshToken = function () {
371
+ var _this = this;
372
+ var data = __assign(__assign({}, this.constants.loginExtraData()), { refresh_token: this.getRefreshToken() });
373
+ return this.connection.post(this.tokenApi(), data).pipe(map(function (res) { return _this.doLoginUser(res); }));
374
+ };
375
+ AuthService.prototype.getToken = function () {
376
+ return localStorage.getItem(this.JWT_TOKEN);
377
+ };
378
+ AuthService.prototype.doLoginUser = function (tokens) {
379
+ this.user = new User();
380
+ this.user.initilized(tokens);
381
+ this.forceChannelsForSeller(tokens);
382
+ this.user.persistInStorage();
383
+ localStorage.setItem(this.EXPIRATES_IN, moment(tokens.expires_in).add(1, 'h').format());
384
+ localStorage.setItem(this.REFRESH_TOKEN, moment(tokens.expires_in).add(1, 'h').format());
385
+ localStorage.setItem(this.JWT_TOKEN, tokens.token);
386
+ localStorage.setItem(this.MAIL, tokens.username);
387
+ this.userInSubject.next(this.user);
388
+ this.loggedInSubject.next(true);
389
+ this.loggingInSubject.next(false);
390
+ };
391
+ AuthService.prototype.doLogoutUser = function () {
392
+ this.user = null;
393
+ localStorage.removeItem(this.USER);
394
+ localStorage.removeItem(this.EXPIRATES_IN);
395
+ localStorage.removeItem(this.JWT_TOKEN);
396
+ localStorage.removeItem(this.REFRESH_TOKEN);
397
+ localStorage.removeItem('cart_token');
398
+ localStorage.removeItem(this.MAIL);
399
+ localStorage.removeItem(this.CHANNEL);
400
+ localStorage.removeItem(this.CHANNELSELLER);
401
+ localStorage.removeItem(this.LOCALE);
402
+ localStorage.removeItem(this.CUSTOMER);
403
+ localStorage.removeItem('MASTER_CHANNEL');
404
+ this.loggedInSubject.next(false);
405
+ this.userInSubject.next(this.user);
406
+ this.channelsUserSubject.next([]);
407
+ };
408
+ AuthService.prototype.getRefreshToken = function () {
409
+ return localStorage.getItem(this.REFRESH_TOKEN);
410
+ };
411
+ AuthService.ctorParameters = function () { return [
412
+ { type: ConnectionService },
413
+ { type: ToastrService },
414
+ { type: Constants },
415
+ { type: Injector }
416
+ ]; };
417
+ AuthService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AuthService_Factory() { return new i1.AuthService(i0.ɵɵinject(i1.ConnectionService), i0.ɵɵinject(i2.ToastrService), i0.ɵɵinject(i1.Constants), i0.ɵɵinject(i0.INJECTOR)); }, token: i1.AuthService, providedIn: "root" });
418
+ AuthService = __decorate([
419
+ Injectable({
420
+ providedIn: 'root'
421
+ })
422
+ ], AuthService);
423
+ return AuthService;
424
+ }());
425
+ export { AuthService };
426
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQU83QztJQTBDSSxxQkFBb0IsVUFBNkIsRUFDckMsYUFBNEIsRUFDNUIsU0FBb0IsRUFDcEIsUUFBa0I7UUFIOUIsaUJBTUM7UUFObUIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDckMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBM0NiLGNBQVMs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QWlCO2dCQUN0QixhQUFhO2dCQUNqQixTQUFTO2dCQUNWLFFBQVE7OztJQTdDckIsV0FBVztRQUh2QixVQUFVLENBQUM7WUFDUixVQUFVLEVBQUUsTUFBTTtTQUNyQixDQUFDO09BQ1csV0FBVyxDQTRXdkI7c0JBOVhEO0NBOFhDLEFBNVdELElBNFdDO1NBNVdZLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hcGkvY29ubmVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jbGFzc2VzL3VzZXInO1xuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL29mJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL2NvcmUuY29uc3RzJztcbmltcG9ydCB7IG1hcCwgbWFwVG8sIGNhdGNoRXJyb3IsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy1jb21wYXQvb3BlcmF0b3IvdGFrZSc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4vY2FydC5zZXJ2aWNlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBVc2VyUm9sZVR5cGUgfSBmcm9tICcuLi9jbGFzc2VzL3VzZXItcm9sZS10eXBlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IEpXVF9UT0tFTiA9ICdKV1RfVE9LRU4nXG4gICAgcHJpdmF0ZSByZWFkb25seSBSRUZSRVNIX1RPS0VOID0gJ1JFRlJFU0hfVE9LRU4nXG4gICAgcHJpdmF0ZSByZWFkb25seSBFWFBJUkFURVNfSU4gPSAnRVhQSVJBVEVTX0lOJ1xuICAgIHByaXZhdGUgcmVhZG9ubHkgVVNFUiA9ICdVU0VSJ1xuICAgIHByaXZhdGUgcmVhZG9ubHkgTUFJTCA9ICdtYWlsJ1xuICAgIHByaXZhdGUgcmVhZG9ubHkgTE9DQUxFID0gJ0xPQ0FMRSdcbiAgICBwcml2YXRlIHJlYWRvbmx5IENIQU5ORUwgPSAnQ0hBTk5FTCdcbiAgICBwcml2YXRlIHJlYWRvbmx5IENVU1RPTUVSID0gJ0NVU1RPTUVSJ1xuICAgIHByaXZhdGUgcmVhZG9ubHkgQ0hBTk5FTFNFTExFUiA9ICdDSEFOTkVMU0VMTEVSJ1xuXG4gICAgLyogYWN0aXZlQ2hhbm5lbFN3aXRjaD8gKi9cbiAgICBwcml2YXRlIGFjdGl2ZUNoYW5uZWxDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZVxuICAgIHByaXZhdGUgbG9nZ2VkSW5TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KGZhbHNlKVxuICAgIHByaXZhdGUgbG9nZ2luZ0luU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihmYWxzZSlcbiAgICBwcml2YXRlIHVzZXJJblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVzZXI+KG51bGwpXG4gICAgcHJpdmF0ZSBjaGFubmVsc1VzZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pXG4gICAgLyogcHJpdmF0ZSBjdXN0b21lclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCkgKi9cbiAgICBwcml2YXRlIHVzZXI6IFVzZXIgPSBudWxsXG5cbiAgICAvLyBBUElTXG4gICAgcHVibGljIHRva2VuQXBpID0gKCkgPT4gJ3Nob3AtYXBpL2xvZ2luX2NoZWNrJztcbiAgICBwdWJsaWMgcmVnaXN0ZXJBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSArICcvcmVnaXN0ZXInO1xuICAgIHB1YmxpYyByZWdpc3Rlcldob2xlc2FsZXJBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSArICcvcmVnaXN0ZXItd2hvbGVzYWxlcic7XG4gICAgcHVibGljIGNvbmZpcm1BY2NvdW50QXBpID0gKHRva2VuKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSArICcvdmVyaWZ5LWFjY291bnQ/dG9rZW49JyArIHRva2VuO1xuICAgIHB1YmxpYyByZXNldFBhc3N3b3JkQXBpID0gKHRva2VuKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSArICcvcGFzc3dvcmQtcmVzZXQvJyArIHRva2VuO1xuICAgIHB1YmxpYyByZWNvdmVyUGFzc3dvcmRBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSArICcvcmVxdWVzdC1wYXNzd29yZC1yZXNldCc7XG4gICAgcHVibGljIGNvdW50cmllc0FwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdGFudHMuZ2V0Q2hhbm5lbCgpICsgJy9jb3VudHJpZXMnO1xuXG4gICAgLy8gQXRyaWJ1dG9zIHV0aWxlc1xuICAgIHB1YmxpYyB3YWl0aW5nID0gZmFsc2U7XG4gICAgcHVibGljIGxvZ2dlZEluID0gdGhpcy5sb2dnZWRJblN1YmplY3QuYXNPYnNlcnZhYmxlKClcbiAgICBwdWJsaWMgbG9nZ2luZ0luID0gdGhpcy5sb2dnaW5nSW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXG4gICAgcHVibGljIHVzZXJBdXRoID0gdGhpcy51c2VySW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXG4gICAgcHVibGljIGNoYW5uZWxzVXNlciA9IHRoaXMuY2hhbm5lbHNVc2VyU3ViamVjdC5hc09ic2VydmFibGUoKVxuICAgIC8qIHByaXZhdGUgY3VzdG9tZXIgPSB0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QuYXNPYnNlcnZhYmxlKCkgKi9cbiAgICBwcml2YXRlIGN1c3RvbWVyID0gbnVsbFxuICAgIHB1YmxpYyBjaGFubmVsID0gbnVsbFxuICAgIHB1YmxpYyBjaGFubmVscyA9IFtdXG4gICAgcHJpdmF0ZSBob21lUmVzb2x2ZXIgPSBudWxsXG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbm5lY3Rpb246IENvbm5lY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRvYXN0clNlcnZpY2U6IFRvYXN0clNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29uc3RhbnRzOiBDb25zdGFudHMsXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5sb2dnZWRJblN1YmplY3QubmV4dCh0cnVlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjIERldnVlbHZlIHVuIG9ic2VydmFibGVcbiAgICAgKiBAcGFyYW0gdXNlciBPYmpldG8gcXVlIGNvbnRpZW5lIHVzZXJuYW1lIHkgcGFzc3dvcmQgXG4gICAgICovXG4gICAgbG9naW4odXNlcjogeyB1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nIH0sIHdpdGhSb2xlczogVXNlclJvbGVUeXBlW10gPSBbXSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KENoYW5uZWxDb25maWdTZXJ2aWNlKS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoY2ggPT4gdGhpcy5jaGFubmVsID0gY2gpO1xuICAgICAgICB0aGlzLmluamVjdG9yLmdldChDaGFubmVsQ29uZmlnU2VydmljZSkuY2hhbm5lbHMuc3Vic2NyaWJlKGNoID0+IHRoaXMuY2hhbm5lbHMgPSBjaCk7XG4gICAgICAgIHRoaXMubG9nZ2luZ0luU3ViamVjdC5uZXh0KHRydWUpO1xuXG4gICAgICAgIC8vIENvbnZlcnRpciBlbCB1c2VybmFtZSBhIG1pbsO6c2N1bGFzXG4gICAgICAgIHVzZXIgPSB7IC4uLnVzZXIsIHVzZXJuYW1lOiB1c2VyLnVzZXJuYW1lLnRvTG93ZXJDYXNlKCksIC4uLnRoaXMuY29uc3RhbnRzLmxvZ2luRXh0cmFEYXRhKCkgfTtcblxuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy50b2tlbkFwaSgpLCB1c2VyKS5waXBlKFxuICAgICAgICAgICAgbWFwKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhbm5lbEFjY2Vzc1Blcm1pc3Npb24oeyAuLi51c2VyLCAuLi5yZXMgfSkgJiYgdGhpcy5pc0FsbG93ZWRSb2xlKHdpdGhSb2xlcywgcmVzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9Mb2dpblVzZXIoeyAuLi51c2VyLCAuLi5yZXMgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJ2Vycm9yJztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2luZ0luU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoZXJyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjaGFubmVsQWNjZXNzUGVybWlzc2lvbiA9IChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0Lm5leHQoW10pXG5cbiAgICAgICAgLyogUGxlYXNlIHJlbW92ZSB0aGlzIEFTQVAgLSBOZWVkcyAqY2hhbm5lbHMqIGFycmF5IGluIHVzZXIgb2JqZWN0IEFMV0FZUyAqL1xuICAgICAgICAvKiBpZiAoVXNlclJvbGVUeXBlLlNFTExFUiA9PSByZXMudHlwZSBhcyBVc2VyUm9sZVR5cGUpIHJldHVybiB0cnVlICovXG5cbiAgICAgICAgLyogTm8gYXV0aG9yaXplZCBjaGFubmVscyAqL1xuICAgICAgICBpZiAocmVzLmNoYW5uZWxzPy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgLyogU29tZSBhdXRob3JpemVkIGNoYW5uZWwocykgaW5jbHVkaW5nIGN1cnJlbnQgY2hhbm5lbCAqL1xuICAgICAgICBpZiAocmVzLmNoYW5uZWxzLmZpbmQodXNlcmNoYW5uZWwgPT4gdXNlcmNoYW5uZWwuY29kZSA9PT0gdGhpcy5jaGFubmVsLmNvZGUpKSB7XG4gICAgICAgICAgICAvKiBNdWx0aXBsZSBhdXRob3JpemVkIGNoYW5uZWxzIGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cbiAgICAgICAgICAgIGlmIChyZXMuY2hhbm5lbHM/Lmxlbmd0aCA+IDEgJiYgdGhpcy5hY3RpdmVDaGFubmVsQ2hhbmdlKVxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbm5lbHNVc2VyU3ViamVjdC5uZXh0KHJlcy5jaGFubmVscylcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgLyogT25lIGF1dGhvcml6ZWQgY2hhbm5lbCBub3QgaW5jbHVkaW5nIGN1cnJlbnQgY2hhbm5lbCAqL1xuICAgICAgICBpZiAocmVzLmNoYW5uZWxzPy5sZW5ndGggPT0gMSAmJiB0aGlzLmFjdGl2ZUNoYW5uZWxDaGFuZ2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSByZXMucGFzc3dvcmRcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbEFjY2VzcyhyZXMuY2hhbm5lbHNbMF0sIHJlcylcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgLyogTXVsdGlwbGUgYXV0aG9yaXplZCBjaGFubmVscyBub3QgaW5jbHVkaW5nIGN1cnJlbnQgY2hhbm5lbCAqL1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVDaGFubmVsQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QubmV4dChyZXMuY2hhbm5lbHMpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNoYW5uZWxBY2Nlc3MgPSAoY2hhbm5lbCwgdXNlciA9IG51bGwpID0+IHtcbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSAhPSBjaGFubmVsLmhvc3RuYW1lKSB7XG4gICAgICAgICAgICBsZXQgZW5jb2RlZCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkodXNlciAhPSBudWxsID8gdXNlciA6IHRoaXMudXNlcikpXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShgJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke2NoYW5uZWwuaG9zdG5hbWV9L2F1dGgvcmVkaXJlY3QvJHtlbmNvZGVkfWApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnN0YW50cy5tb2RpZnlDaGFubmVsQ29uZmlnKGNoYW5uZWwpXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjIERldnVlbHZlIHVuYSBwcm9tZXNhXG4gICAgICogQHBhcmFtIHVzZXIgT2JqZXRvIHF1ZSBjb250aWVuZSB1c2VybmFtZSB5IHBhc3N3b3JkIFxuICAgICAqL1xuICAgIGRvTG9naW4gPSAodXNlcjogeyB1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgdGhpcy5sb2dnaW5nSW5TdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgIHVzZXIgPSB7IC4uLnVzZXIsIC4uLnRoaXMuY29uc3RhbnRzLmxvZ2luRXh0cmFEYXRhKCkgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMudG9rZW5BcGkoKSwgdXNlcikucGlwZShcbiAgICAgICAgICAgIG1hcChyZXMgPT4gdGhpcy5kb0xvZ2luVXNlcihyZXMpKSxcbiAgICAgICAgICAgIG1hcFRvKCdvaycpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2luZ0luU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoZXJyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBnZXRVc2VyUHJvZmlsZSgpOiBPYnNlcnZhYmxlPFVzZXI+IHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnVzZXIgJiYgT2JzZXJ2YWJsZS5vZih0aGlzLnVzZXIpKSB8fCB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgfVxuXG4gICAgZ2V0VXNlclByb2ZpbGVBc1VzZXIoKTogVXNlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXIgfHwgdGhpcy5nZXRDdXJyZW50VXNlckFzVXNlcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3VycmVudFVzZXJBc1VzZXIoKTogVXNlciB7XG4gICAgICAgIHRoaXMudXNlciA9IG5ldyBVc2VyKCk7XG4gICAgICAgIGlmICghdGhpcy51c2VyLmxvYWRGcm9tU3RvcmFnZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXIgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy51c2VyPy5jaGFubmVscy5maW5kKHVzZXJjaGFubmVsID0+IHVzZXJjaGFubmVsPy5jb2RlID09PSB0aGlzLmNvbnN0YW50cy5nZXRDaGFubmVsKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2dvdXQoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50VXNlcigpOiBPYnNlcnZhYmxlPFVzZXI+IHtcbiAgICAgICAgdGhpcy51c2VyID0gbmV3IFVzZXIoKTtcbiAgICAgICAgaWYgKCF0aGlzLnVzZXIubG9hZEZyb21TdG9yYWdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMudXNlciA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZih0aGlzLnVzZXIpO1xuICAgIH1cblxuICAgIHNpZ25VcCA9IChkYXRhKSA9PiB7XG4gICAgICAgIC8vIENvbnZlcnRpciBlbCBlbWFpbCBhIG1pbsO6c2N1bGFzIHNpIGV4aXN0ZVxuICAgICAgICBpZiAoZGF0YS5lbWFpbCkge1xuICAgICAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSwgZW1haWw6IGRhdGEuZW1haWwudG9Mb3dlckNhc2UoKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLnJlZ2lzdGVyQXBpKCksIGRhdGEpO1xuICAgIH07XG5cbiAgICBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZG9Mb2dvdXRVc2VyKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldEN1cnJlbnRVc2VyQXNVc2VyKClcbiAgICAgICAgdGhpcy51c2VySW5TdWJqZWN0Lm5leHQodGhpcy51c2VyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oKSAmJiAhdGhpcy5pc1Rva2VuRXhwaXJlZCgpICYmIHRoaXMudXNlciAhPSBudWxsO1xuICAgIH1cblxuICAgIGNvbmZpcm1BY2NvdW50ID0gKHRva2VuOiBzdHJpbmcpID0+XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5jb25maXJtQWNjb3VudEFwaSh0b2tlbikpO1xuXG4gICAgcGFzc3dvcmRSZXNldCA9IChuZXdfcGFzc3dvcmQsIHRva2VuKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IHBhc3N3b3JkOiB7IGZpcnN0OiBuZXdfcGFzc3dvcmQsIHNlY29uZDogbmV3X3Bhc3N3b3JkIH0gfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi5wdXQodGhpcy5yZXNldFBhc3N3b3JkQXBpKHRva2VuKSwgZGF0YSk7XG4gICAgfVxuXG4gICAgcmVjb3ZlclBhc3N3b3JkID0gKGVtYWlsOiBzdHJpbmcpID0+XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wdXQodGhpcy5yZWNvdmVyUGFzc3dvcmRBcGkoKSwgeyBlbWFpbCB9KTtcblxuICAgIC8qIFRPS0VOICovXG5cbiAgICBsb2dvdXQoKSB7XG4gICAgICAgIHRoaXMuZG9Mb2dvdXRVc2VyKCk7XG4gICAgfVxuXG4gICAgcmVmcmVzaFRva2VuKCkge1xuICAgICAgICBsZXQgZGF0YSA9IHsgLi4udGhpcy5jb25zdGFudHMubG9naW5FeHRyYURhdGEoKSwgcmVmcmVzaF90b2tlbjogdGhpcy5nZXRSZWZyZXNoVG9rZW4oKSB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLnRva2VuQXBpKCksIGRhdGEpLnBpcGUobWFwKFxuICAgICAgICAgICAgcmVzID0+IHRoaXMuZG9Mb2dpblVzZXIocmVzKVxuICAgICAgICApKVxuICAgIH1cblxuICAgIGdldFRva2VuKCkge1xuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5KV1RfVE9LRU4pO1xuICAgIH1cblxuICAgIGlzVG9rZW5FeHBpcmVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBmZWNoYV9leHBpcmFjaW9uID0gdGhpcy5nZXRFeHBpcmF0ZXNBdCgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBtb21lbnQoKSA+PSBtb21lbnQoZmVjaGFfZXhwaXJhY2lvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0RXhwaXJhdGVzQXQgPSAoKSA9PiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkVYUElSQVRFU19JTik7XG5cbiAgICBwdWJsaWMgZG9Mb2dpblVzZXIodG9rZW5zKSB7XG4gICAgICAgIHRoaXMudXNlciA9IG5ldyBVc2VyKClcbiAgICAgICAgdGhpcy51c2VyLmluaXRpbGl6ZWQodG9rZW5zKVxuICAgICAgICB0aGlzLmZvcmNlQ2hhbm5lbHNGb3JTZWxsZXIodG9rZW5zKVxuICAgICAgICB0aGlzLnVzZXIucGVyc2lzdEluU3RvcmFnZSgpXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuRVhQSVJBVEVTX0lOLCBtb21lbnQodG9rZW5zLmV4cGlyZXNfaW4pLmFkZCgxLCAnaCcpLmZvcm1hdCgpKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5SRUZSRVNIX1RPS0VOLCBtb21lbnQodG9rZW5zLmV4cGlyZXNfaW4pLmFkZCgxLCAnaCcpLmZvcm1hdCgpKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5KV1RfVE9LRU4sIHRva2Vucy50b2tlbik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTUFJTCwgdG9rZW5zLnVzZXJuYW1lKTtcbiAgICAgICAgdGhpcy51c2VySW5TdWJqZWN0Lm5leHQodGhpcy51c2VyKTtcbiAgICAgICAgdGhpcy5sb2dnZWRJblN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5sb2dnaW5nSW5TdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkb0xvZ291dFVzZXIoKSB7XG4gICAgICAgIHRoaXMudXNlciA9IG51bGxcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5VU0VSKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5FWFBJUkFURVNfSU4pO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkpXVF9UT0tFTik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuUkVGUkVTSF9UT0tFTik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdjYXJ0X3Rva2VuJyk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTUFJTCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ0hBTk5FTCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ0hBTk5FTFNFTExFUik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTE9DQUxFKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DVVNUT01FUik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdNQVNURVJfQ0hBTk5FTCcpO1xuICAgICAgICB0aGlzLmxvZ2dlZEluU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy51c2VySW5TdWJqZWN0Lm5leHQodGhpcy51c2VyKTtcbiAgICAgICAgdGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0Lm5leHQoW10pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSZWZyZXNoVG9rZW4oKSB7XG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlJFRlJFU0hfVE9LRU4pO1xuICAgIH1cblxuICAgIGhhc1RvUmVmcmVzaCA9ICgpID0+IHRoaXMuZ2V0UmVmcmVzaFRva2VuKCk7XG5cbiAgICBzaWduVXBXaG9sZXNhbGVyID0gKGRhdGEpID0+IHtcbiAgICAgICAgLy8gQ29udmVydGlyIGVsIGVtYWlsIGEgbWluw7pzY3VsYXMgc2kgZXhpc3RlXG4gICAgICAgIGlmIChkYXRhLmVtYWlsKSB7XG4gICAgICAgICAgICBkYXRhID0geyAuLi5kYXRhLCBlbWFpbDogZGF0YS5lbWFpbC50b0xvd2VyQ2FzZSgpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMucmVnaXN0ZXJXaG9sZXNhbGVyQXBpKCksIGRhdGEpO1xuICAgIH07XG5cbiAgICBnZXRDb3VudHJpZXNEYXRhID0gYXN5bmMgKCkgPT5cbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLmNvdW50cmllc0FwaSgpKS5waXBlKG1hcChyZXMgPT4gcmVzLl9lbWJlZGRlZC5pdGVtcykpLnRvUHJvbWlzZSgpO1xuXG4gICAgcHVibGljIHNldEFjdGl2ZUNoYW5uZWxDaGFuZ2UgPSAoYWN0aXZlbHlDaGFuZ2VDaGFubmVsc09uTG9naW46IGJvb2xlYW4pID0+IHRoaXMuYWN0aXZlQ2hhbm5lbENoYW5nZSA9IGFjdGl2ZWx5Q2hhbmdlQ2hhbm5lbHNPbkxvZ2luXG5cbiAgICBwcml2YXRlIGlzQWxsb3dlZFJvbGUgPSAoYWxsb3dlZFJvbGVzOiBVc2VyUm9sZVR5cGVbXSwgcm9sZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBhbGxvd2VkUm9sZXMubGVuZ3RoXG4gICAgICAgICAgICA/IGFsbG93ZWRSb2xlcy5pbmNsdWRlcyhyb2xlIGFzIFVzZXJSb2xlVHlwZSlcbiAgICAgICAgICAgIDogdHJ1ZVxuICAgIH1cblxuICAgIC8qIFBsZWFzZSByZW1vdmUgdGhpcyBBU0FQIC0gTmVlZHMgKmNoYW5uZWxzKiBhcnJheSBpbiB1c2VyIG9iamVjdCBBTFdBWVMgKi9cbiAgICBwcml2YXRlIGZvcmNlQ2hhbm5lbHNGb3JTZWxsZXIgPSB0b2tlbnMgPT4ge1xuICAgICAgICBpZiAoVXNlclJvbGVUeXBlLlNFTExFUiA9PSB0b2tlbnMudHlwZSBhcyBVc2VyUm9sZVR5cGUpXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxzPy5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IHRoaXMudXNlci5zZXRDaGFubmVscyguLi50aGlzLmNoYW5uZWxzKVxuICAgICAgICAgICAgICAgIDogdGhpcy51c2VyLnNldENoYW5uZWxzKHRoaXMuY2hhbm5lbClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2FtYmlhIGRlIGNhbmFsXG4gICAgICogQHBhcmFtIGNoYW5uZWxDb25maWcgZGViZSBzZXIgdW4gb2JqZXRvIHF1ZSBjb250ZW5nYSBhbCBtZW5vcyBsYXMga2V5cyBjaGFubmVsIHkgbG9jYWxlLlxuICAgICAqL1xuICAgIHByaXZhdGUgY2hhbmdlQ2hhbm5lbCA9IChjaGFubmVsQ29uZmlnOmFueSkgPT4ge1xuICAgICAgICB0aGlzLmNvbnN0YW50cy5tb2RpZnlDaGFubmVsQ29uZmlnKHtcbiAgICAgICAgICAgIGNoYW5uZWw6IGNoYW5uZWxDb25maWcuY2hhbm5lbCxcbiAgICAgICAgICAgIGxvY2FsZTogY2hhbm5lbENvbmZpZy5sb2NhbGVcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2FyZ2EgZWwgY2xpZW50ZSBjb24gZWwgcXVlIHNlIHJlYWxpemFyYW4gcGVkaWRvcy4gU2kgcmVjaWJlIGVsIHZhbG9yIG51bGxcbiAgICAgKiBzZSB2dWVsdmUgYSBjYXJnYXIgZWwgdmVuZGVkb3IgcGFyYSBzdSB1c28uICBcbiAgICAgKiBAcGFyYW0gY3VzdG9tZXIgXG4gICAgICovXG4gICAgcHVibGljIHNldEN1c3RvbWVyID0gY3VzdG9tZXIgPT4ge1xuICAgICAgICBsZXQgcmVmcmVzaFBhZ2UgPSBmYWxzZVxuICAgICAgICB0aGlzLmN1c3RvbWVyID0gY3VzdG9tZXJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5DVVNUT01FUiwgSlNPTi5zdHJpbmdpZnkoY3VzdG9tZXIpKVxuICAgICAgICBcbiAgICAgICAgbGV0IHNhbWVDaGFubmVsID0gY3VzdG9tZXIgPyB0aGlzLnNhbWVDaGFubmVsKGN1c3RvbWVyLmNoYW5uZWxzWzBdLmNvZGUsIGN1c3RvbWVyLmNoYW5uZWxzWzBdLmxvY2FsZXMuY29kZSkgOiBudWxsXG4gICAgICAgIFxuICAgICAgICBpZiAoY3VzdG9tZXIpIHtcbiAgICAgICAgICAgIGlmKCFzYW1lQ2hhbm5lbCl7XG4gICAgICAgICAgICAgICAgIWxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ0hBTk5FTFNFTExFUikgP1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNIQU5ORUxTRUxMRVIsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWw6IHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5jb25zdGFudHMuZ2V0TG9jYWxlKClcbiAgICAgICAgICAgICAgICAgICAgfSkpIDogbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUNoYW5uZWwoe1xuICAgICAgICAgICAgICAgICAgICBjaGFubmVsOiBjdXN0b21lci5jaGFubmVsc1swXS5jb2RlLFxuICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IGN1c3RvbWVyLmNoYW5uZWxzWzBdLmxvY2FsZXMuY29kZVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UgPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNIQU5ORUxTRUxMRVIpKVxuICAgICAgICAgICAgaWYocmVzKXtcbiAgICAgICAgICAgICAgICBpZighdGhpcy5zYW1lQ2hhbm5lbChyZXMuY2hhbm5lbCwgcmVzLmxvY2FsZSkpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUNoYW5uZWwocmVzKVxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSA9IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluamVjdG9yLmdldChDYXJ0U2VydmljZSkuY2xlYXJBbmRSZXNldEN1c3RvbWVyQ2FydCgpXG4gICAgICAgIHJlZnJlc2hQYWdlID8gbG9jYXRpb24uaHJlZiA9IGxvY2F0aW9uLmhyZWYgOiBudWxsXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXBydWViYSBzaSBsb3MgdmFsb3JlcyBkZWwgY2FuYWwgYWN0dWFsIHNvbiBpZ3VhbGVzIGEgbG9zIGluZ3Jlc2FkbyBwb3IgcGFyYW1ldHJvcy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbCBOb21icmUgZGVsIGNhbmFsXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2FsZSAgTG9jYWxlIGRlbCBjYW5hbFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIHNpIGVzIGVsIG1pc21vIGNhbmFsLCBGYWxzZSBjYXNvIGNvbnRyYXJpby5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNhbWVDaGFubmVsID0gKGNoYW5uZWw6c3RyaW5nLCBsb2NhbGU6c3RyaW5nKTpib29sZWFuID0+IChjaGFubmVsID09IHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSkgJiYgKGxvY2FsZSA9PSB0aGlzLmNvbnN0YW50cy5nZXRMb2NhbGUoKSlcblxuICAgIC8qIHB1YmxpYyBnZXRDdXN0b21lciA9ICgpID0+IE9ic2VydmFibGUub2YoSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNVU1RPTUVSKSkpICovXG5cbiAgICBwdWJsaWMgZ2V0Q3VzdG9tZXIgPSAoKSA9PiB7XG4gICAgICAgIC8qIHRoaXMuY3VzdG9tZXJTdWJqZWN0Lm5leHQoSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNVU1RPTUVSKSkpXG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbWVyICovXG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbWVyIHx8IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DVVNUT01FUikpXG4gICAgfVxuXG4gICAgcHVibGljIHNldEhvbWVSZXNvbHZlciA9IHJlc29sdmVyRnVuY3Rpb24gPT4gdGhpcy5ob21lUmVzb2x2ZXIgPSByZXNvbHZlckZ1bmN0aW9uXG5cbiAgICBwdWJsaWMgZ2V0SG9tZVJlc29sdmVyID0gKCkgPT4gdGhpcy5ob21lUmVzb2x2ZXJcblxuICAgIHB1YmxpYyBpc0FibGVUb0J1eSA9ICgpOiBib29sZWFuID0+ICF0aGlzLmdldFVzZXJQcm9maWxlQXNVc2VyKCk/LmlzU2VsbGVyKCkgfHwgISF0aGlzLmdldEN1c3RvbWVyKClcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFdmFsdWEgc2kgZWwgdmFsb3IgcXVlIGluZ3Jlc2EgcG9yIHBhcsOhbWV0cm8gZXMgbWF5b3IgbyBpZ3VhbCBhbCBtw61uaW1vIGRlIGNvbXByYVxuICAgICAqIHF1ZSBlbCB1c3VhcmlvIHRpZW5lIGFzaWduYWRvIGEgZXNlIGNhbmFsLCBkaWZlcmVuY2lhbmRvIHNpIGVzIG1heW9yaXN0YSBvIG1pbm9yaXN0YS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgc2kgZXhjZWRlIGVsIG1vbnRvLCBmYWxzZSBjYXNvIGNvbnRyYXJpb1xuICAgICAqL1xuICAgIHB1YmxpYyBleGNlZWRzTWluaW11bUFtb3VudCA9ICh2YWx1ZTpudW1iZXI9MCk6Ym9vbGVhbiA9PiAgXG4gICAgICAgIHRoaXMudXNlci5pc1dob2xlc2FsZXIoKSA/IHRoaXMudXNlci5jaGFubmVscy5maW5kKCBjaGFubmVsID0+IHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSA9PSBjaGFubmVsLmNvZGUpLndob2xlc2FsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnQgPD0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy51c2VyLmNoYW5uZWxzLmZpbmQoIGNoYW5uZWwgPT4gdGhpcy5jb25zdGFudHMuZ2V0Q2hhbm5lbCgpID09IGNoYW5uZWwuY29kZSkucmV0YWlsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnQgPD0gdmFsdWVcbn0iXX0=