@xsolla/payment-client-core 0.2.21 → 0.2.22

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 (446) hide show
  1. package/{esm2020 → esm2022}/lib/core/combined-payment-methods/combined-payment-methods.service.mjs +5 -5
  2. package/{esm2020 → esm2022}/lib/core/countries-api/countries-api.service.mjs +5 -5
  3. package/{esm2020 → esm2022}/lib/core/country/country.service.mjs +5 -5
  4. package/{esm2020 → esm2022}/lib/core/credit-card/credit-card.service.mjs +4 -4
  5. package/esm2022/lib/core/device-finger-print/device-finger-print.service.mjs +67 -0
  6. package/{esm2020 → esm2022}/lib/core/edit-saved-methods/edit-saved-methods.service.mjs +5 -5
  7. package/esm2022/lib/core/encrypt-credit-card/encrypt-credit-card.service.mjs +73 -0
  8. package/esm2022/lib/core/errors-mapping/xps-response-errors-mapping.service.mjs +52 -0
  9. package/esm2022/lib/core/exceptions-handling/elk/elk-logger.service.mjs +120 -0
  10. package/esm2022/lib/core/exceptions-handling/errors/http-error.class.mjs +40 -0
  11. package/esm2022/lib/core/exceptions-handling/errors/tagged-error.class.mjs +16 -0
  12. package/{esm2020 → esm2022}/lib/core/exceptions-handling/http-interceptor/http-exceptions.interceptor.mjs +5 -5
  13. package/esm2022/lib/core/http/secure-api/secure-api.service.mjs +55 -0
  14. package/{esm2020 → esm2022}/lib/core/legal/disclaimer.service.mjs +4 -4
  15. package/{esm2020 → esm2022}/lib/core/legal/legal.service.mjs +5 -5
  16. package/esm2022/lib/core/legal/refund-policy.service.mjs +30 -0
  17. package/esm2022/lib/core/legal/secure-connection.service.mjs +31 -0
  18. package/{esm2020 → esm2022}/lib/core/payment/actions/check-status/check-status.action.class.mjs +4 -4
  19. package/esm2022/lib/core/payment/actions/next-action.service.mjs +61 -0
  20. package/esm2022/lib/core/payment/actions/redirect/redirect.action.class.mjs +60 -0
  21. package/{esm2020 → esm2022}/lib/core/payment/actions/show-errors/show-errors.action.class.mjs +4 -4
  22. package/{esm2020 → esm2022}/lib/core/payment/actions/show-fields/show-fields.action.class.mjs +4 -4
  23. package/{esm2020 → esm2022}/lib/core/payment/actions/show-mobile-payment-screen/show-mobile-payment-screen.action.class.mjs +4 -4
  24. package/{esm2020 → esm2022}/lib/core/payment/actions/show-qr-code/show-qr-code.action.class.mjs +4 -4
  25. package/{esm2020 → esm2022}/lib/core/payment/actions/special-button/special-button.action.class.mjs +4 -4
  26. package/esm2022/lib/core/payment/actions/status-updated/status-updated.action.class.mjs +38 -0
  27. package/{esm2020 → esm2022}/lib/core/payment/actions/three-ds/three-ds.action.class.mjs +4 -4
  28. package/esm2022/lib/core/payment/config/config.service.mjs +37 -0
  29. package/{esm2020 → esm2022}/lib/core/payment/credit-card-state/credit-card-state.service.mjs +4 -4
  30. package/esm2022/lib/core/payment/finance-details/finance-details.service.mjs +38 -0
  31. package/{esm2020 → esm2022}/lib/core/payment/finance-details/status/status-finance-details-adapter.service.mjs +5 -5
  32. package/esm2022/lib/core/payment/finance-details/summary/summary-finance-details-adapter.service.mjs +264 -0
  33. package/esm2022/lib/core/payment/form/controls/control-config.service.mjs +46 -0
  34. package/{esm2020 → esm2022}/lib/core/payment/form/converters/birth-date/birth-date.converter.mjs +5 -5
  35. package/{esm2020 → esm2022}/lib/core/payment/form/converters/card-month/card-month.converter.mjs +5 -5
  36. package/{esm2020 → esm2022}/lib/core/payment/form/converters/card-number/card-number.converter.mjs +5 -5
  37. package/{esm2020 → esm2022}/lib/core/payment/form/converters/card-year/card-year.converter.mjs +5 -5
  38. package/{esm2020 → esm2022}/lib/core/payment/form/converters/cardholder-name/cardholder-name.converter.mjs +5 -5
  39. package/esm2022/lib/core/payment/form/converters/checkbox/checkbox.converter.mjs +33 -0
  40. package/esm2022/lib/core/payment/form/converters/converter.abstract.mjs +76 -0
  41. package/{esm2020 → esm2022}/lib/core/payment/form/converters/coupon/coupon.converter.mjs +5 -5
  42. package/{esm2020 → esm2022}/lib/core/payment/form/converters/cpf-name/cpf-name.converter.mjs +5 -5
  43. package/{esm2020 → esm2022}/lib/core/payment/form/converters/cpf-number/cpf-number.converter.mjs +5 -5
  44. package/esm2022/lib/core/payment/form/converters/cvv/cvv.converter.mjs +72 -0
  45. package/{esm2020 → esm2022}/lib/core/payment/form/converters/email/email.converter.mjs +5 -5
  46. package/{esm2020 → esm2022}/lib/core/payment/form/converters/phone.converter.mjs +5 -5
  47. package/{esm2020 → esm2022}/lib/core/payment/form/converters/pin/pin.converter.mjs +5 -5
  48. package/{esm2020 → esm2022}/lib/core/payment/form/converters/pricepoint/pricepoint.converter.mjs +5 -5
  49. package/{esm2020 → esm2022}/lib/core/payment/form/converters/radio-group/radio-group.converter.mjs +5 -5
  50. package/{esm2020 → esm2022}/lib/core/payment/form/converters/select/select.converter.mjs +5 -5
  51. package/esm2022/lib/core/payment/form/converters/street-number/street-number.converter.mjs +28 -0
  52. package/{esm2020 → esm2022}/lib/core/payment/form/converters/text/text.converter.mjs +5 -5
  53. package/esm2022/lib/core/payment/form/converters/zip/zip.converter.mjs +64 -0
  54. package/{esm2020 → esm2022}/lib/core/payment/form/form.module.mjs +33 -33
  55. package/esm2022/lib/core/payment/form/form.service.mjs +49 -0
  56. package/esm2022/lib/core/payment/form/validators/birth-date/birth-date.validator.mjs +37 -0
  57. package/esm2022/lib/core/payment/form/validators/card-month/card-month.validator.mjs +37 -0
  58. package/esm2022/lib/core/payment/form/validators/card-year/card-year.validator.mjs +34 -0
  59. package/esm2022/lib/core/payment/form/validators/convert.function.mjs +15 -0
  60. package/esm2022/lib/core/payment/form/validators/credit-card-length/credit-card-min-length.validator.mjs +32 -0
  61. package/esm2022/lib/core/payment/form/validators/luhn-formula-validator/luhn-formula.validator.mjs +40 -0
  62. package/{esm2020 → esm2022}/lib/core/payment/form/validators/validators.module.mjs +5 -5
  63. package/{esm2020 → esm2022}/lib/core/payment/form-messages/form-messages.service.mjs +5 -5
  64. package/esm2022/lib/core/payment/initialize/initialize.service.mjs +85 -0
  65. package/esm2022/lib/core/payment/initialize/response/initialize-response.class.mjs +43 -0
  66. package/esm2022/lib/core/payment/payment.service.mjs +369 -0
  67. package/{esm2020 → esm2022}/lib/core/payment/status/check-status/check-status.service.mjs +6 -6
  68. package/{esm2020 → esm2022}/lib/core/payment/status/check-status/request/check-status-request.class.mjs +1 -1
  69. package/esm2022/lib/core/payment/status/listen-status/listen-status.service.mjs +124 -0
  70. package/{esm2020 → esm2022}/lib/core/payment/status/save-payment-method-status/api/saved-payment-account-changes.service.mjs +5 -5
  71. package/esm2022/lib/core/payment/status/save-payment-method-status/save-payment-method-status.service.mjs +121 -0
  72. package/esm2022/lib/core/payment/status/status-request/request/status-request.class.mjs +22 -0
  73. package/esm2022/lib/core/payment/status/status-request/response/status-response.class.mjs +98 -0
  74. package/{esm2020 → esm2022}/lib/core/payment/status/status-request/status-request.service.mjs +6 -6
  75. package/esm2022/lib/core/payment/status/status.service.mjs +75 -0
  76. package/esm2022/lib/core/payment/status/websocket-status/websocket-status.service.mjs +76 -0
  77. package/esm2022/lib/core/payment/submit/request/submit-request.class.mjs +24 -0
  78. package/esm2022/lib/core/payment/submit/response/submit-response.class.mjs +31 -0
  79. package/esm2022/lib/core/payment/submit/submit.service.mjs +78 -0
  80. package/esm2022/lib/core/payment/sync/request/sync-request.class.mjs +31 -0
  81. package/esm2022/lib/core/payment/sync/response/sync-response.class.mjs +17 -0
  82. package/esm2022/lib/core/payment/sync/sync.service.mjs +157 -0
  83. package/esm2022/lib/core/payment/three-ds/api/notify-dfp-status/notify-dfp-status.service.mjs +49 -0
  84. package/esm2022/lib/core/payment/three-ds/api/status-three-ds/status-three-ds.service.mjs +60 -0
  85. package/esm2022/lib/core/payment/three-ds/dfp-collect/dfp-collect.service.mjs +105 -0
  86. package/esm2022/lib/core/payment/three-ds/reinsurance-check/reinsurance-check.service.mjs +41 -0
  87. package/esm2022/lib/core/payment/three-ds/three-ds-20/three-ds20.service.mjs +109 -0
  88. package/esm2022/lib/core/payment/three-ds/three-ds.service.mjs +42 -0
  89. package/esm2022/lib/core/payment/xps-api/xps-api.service.mjs +85 -0
  90. package/esm2022/lib/core/payment/xps-api-part-request.abstract.mjs +8 -0
  91. package/esm2022/lib/core/payment-methods/payment-methods.service.mjs +75 -0
  92. package/esm2022/lib/core/performance/performance.service.mjs +111 -0
  93. package/esm2022/lib/core/performance/xhr-action.service.mjs +114 -0
  94. package/esm2022/lib/core/saved-methods/saved-methods.service.mjs +54 -0
  95. package/esm2022/lib/core/sdk-payment-systems/apple-pay/apple-pay.service.mjs +268 -0
  96. package/esm2022/lib/core/sdk-payment-systems/google-pay/google-pay.service.mjs +177 -0
  97. package/esm2022/lib/core/sdk-payment-systems/payment-systems/payment-system-processing.service.mjs +84 -0
  98. package/esm2022/lib/core/session/session.service.mjs +57 -0
  99. package/esm2022/lib/core/settings/settings.service.mjs +92 -0
  100. package/esm2022/lib/core/url/url.service.mjs +34 -0
  101. package/esm2022/lib/core/user-agent/user-agent.service.mjs +211 -0
  102. package/esm2022/lib/core/user-balance/user-balance.service.mjs +53 -0
  103. package/esm2022/lib/core/user-behaviour-analytics/event-builder/event-builder.service.mjs +144 -0
  104. package/esm2022/lib/core/user-behaviour-analytics/user-behaviour-analytics.service.mjs +158 -0
  105. package/esm2022/lib/core/web-socket/centrifugo-web-socket.service.mjs +200 -0
  106. package/esm2022/lib/core/web-socket/nchan-web-socket.service.mjs +116 -0
  107. package/esm2022/lib/core/web-socket/web-socket.factory.mjs +28 -0
  108. package/esm2022/lib/core-library.module.mjs +92 -0
  109. package/{esm2020 → esm2022}/lib/core-library.service.mjs +5 -5
  110. package/{esm2020 → esm2022}/lib/shared/pipes/pipes.module.mjs +5 -5
  111. package/esm2022/lib/shared/pipes/unescape-html/unescape-html.pipe.mjs +23 -0
  112. package/{fesm2020 → fesm2022}/xsolla-payment-client-core.mjs +456 -455
  113. package/fesm2022/xsolla-payment-client-core.mjs.map +1 -0
  114. package/package.json +10 -16
  115. package/xsolla-payment-client-core-0.2.22.tgz +0 -0
  116. package/esm2020/lib/core/device-finger-print/device-finger-print.service.mjs +0 -67
  117. package/esm2020/lib/core/encrypt-credit-card/encrypt-credit-card.service.mjs +0 -72
  118. package/esm2020/lib/core/errors-mapping/xps-response-errors-mapping.service.mjs +0 -52
  119. package/esm2020/lib/core/exceptions-handling/elk/elk-logger.service.mjs +0 -120
  120. package/esm2020/lib/core/exceptions-handling/errors/http-error.class.mjs +0 -40
  121. package/esm2020/lib/core/exceptions-handling/errors/tagged-error.class.mjs +0 -16
  122. package/esm2020/lib/core/http/secure-api/secure-api.service.mjs +0 -55
  123. package/esm2020/lib/core/legal/refund-policy.service.mjs +0 -30
  124. package/esm2020/lib/core/legal/secure-connection.service.mjs +0 -31
  125. package/esm2020/lib/core/payment/actions/next-action.service.mjs +0 -61
  126. package/esm2020/lib/core/payment/actions/redirect/redirect.action.class.mjs +0 -60
  127. package/esm2020/lib/core/payment/actions/status-updated/status-updated.action.class.mjs +0 -38
  128. package/esm2020/lib/core/payment/config/config.service.mjs +0 -37
  129. package/esm2020/lib/core/payment/finance-details/finance-details.service.mjs +0 -38
  130. package/esm2020/lib/core/payment/finance-details/summary/summary-finance-details-adapter.service.mjs +0 -264
  131. package/esm2020/lib/core/payment/form/controls/control-config.service.mjs +0 -46
  132. package/esm2020/lib/core/payment/form/converters/checkbox/checkbox.converter.mjs +0 -33
  133. package/esm2020/lib/core/payment/form/converters/converter.abstract.mjs +0 -76
  134. package/esm2020/lib/core/payment/form/converters/cvv/cvv.converter.mjs +0 -72
  135. package/esm2020/lib/core/payment/form/converters/street-number/street-number.converter.mjs +0 -28
  136. package/esm2020/lib/core/payment/form/converters/zip/zip.converter.mjs +0 -64
  137. package/esm2020/lib/core/payment/form/form.service.mjs +0 -49
  138. package/esm2020/lib/core/payment/form/validators/birth-date/birth-date.validator.mjs +0 -37
  139. package/esm2020/lib/core/payment/form/validators/card-month/card-month.validator.mjs +0 -37
  140. package/esm2020/lib/core/payment/form/validators/card-year/card-year.validator.mjs +0 -34
  141. package/esm2020/lib/core/payment/form/validators/convert.function.mjs +0 -15
  142. package/esm2020/lib/core/payment/form/validators/credit-card-length/credit-card-min-length.validator.mjs +0 -32
  143. package/esm2020/lib/core/payment/form/validators/luhn-formula-validator/luhn-formula.validator.mjs +0 -40
  144. package/esm2020/lib/core/payment/initialize/initialize.service.mjs +0 -85
  145. package/esm2020/lib/core/payment/initialize/response/initialize-response.class.mjs +0 -43
  146. package/esm2020/lib/core/payment/payment.service.mjs +0 -369
  147. package/esm2020/lib/core/payment/status/listen-status/listen-status.service.mjs +0 -124
  148. package/esm2020/lib/core/payment/status/save-payment-method-status/save-payment-method-status.service.mjs +0 -121
  149. package/esm2020/lib/core/payment/status/status-request/request/status-request.class.mjs +0 -22
  150. package/esm2020/lib/core/payment/status/status-request/response/status-response.class.mjs +0 -98
  151. package/esm2020/lib/core/payment/status/status.service.mjs +0 -75
  152. package/esm2020/lib/core/payment/status/websocket-status/websocket-status.service.mjs +0 -76
  153. package/esm2020/lib/core/payment/submit/request/submit-request.class.mjs +0 -24
  154. package/esm2020/lib/core/payment/submit/response/submit-response.class.mjs +0 -31
  155. package/esm2020/lib/core/payment/submit/submit.service.mjs +0 -78
  156. package/esm2020/lib/core/payment/sync/request/sync-request.class.mjs +0 -31
  157. package/esm2020/lib/core/payment/sync/response/sync-response.class.mjs +0 -17
  158. package/esm2020/lib/core/payment/sync/sync.service.mjs +0 -157
  159. package/esm2020/lib/core/payment/three-ds/api/notify-dfp-status/notify-dfp-status.service.mjs +0 -49
  160. package/esm2020/lib/core/payment/three-ds/api/status-three-ds/status-three-ds.service.mjs +0 -60
  161. package/esm2020/lib/core/payment/three-ds/dfp-collect/dfp-collect.service.mjs +0 -105
  162. package/esm2020/lib/core/payment/three-ds/reinsurance-check/reinsurance-check.service.mjs +0 -41
  163. package/esm2020/lib/core/payment/three-ds/three-ds-20/three-ds20.service.mjs +0 -109
  164. package/esm2020/lib/core/payment/three-ds/three-ds.service.mjs +0 -42
  165. package/esm2020/lib/core/payment/xps-api/xps-api.service.mjs +0 -85
  166. package/esm2020/lib/core/payment/xps-api-part-request.abstract.mjs +0 -8
  167. package/esm2020/lib/core/payment-methods/payment-methods.service.mjs +0 -75
  168. package/esm2020/lib/core/performance/performance.service.mjs +0 -111
  169. package/esm2020/lib/core/performance/xhr-action.service.mjs +0 -114
  170. package/esm2020/lib/core/saved-methods/saved-methods.service.mjs +0 -54
  171. package/esm2020/lib/core/sdk-payment-systems/apple-pay/apple-pay.service.mjs +0 -268
  172. package/esm2020/lib/core/sdk-payment-systems/google-pay/google-pay.service.mjs +0 -177
  173. package/esm2020/lib/core/sdk-payment-systems/payment-systems/payment-system-processing.service.mjs +0 -84
  174. package/esm2020/lib/core/session/session.service.mjs +0 -57
  175. package/esm2020/lib/core/settings/settings.service.mjs +0 -92
  176. package/esm2020/lib/core/url/url.service.mjs +0 -34
  177. package/esm2020/lib/core/user-agent/user-agent.service.mjs +0 -211
  178. package/esm2020/lib/core/user-balance/user-balance.service.mjs +0 -53
  179. package/esm2020/lib/core/user-behaviour-analytics/event-builder/event-builder.service.mjs +0 -144
  180. package/esm2020/lib/core/user-behaviour-analytics/user-behaviour-analytics.service.mjs +0 -158
  181. package/esm2020/lib/core/web-socket/centrifugo-web-socket.service.mjs +0 -200
  182. package/esm2020/lib/core/web-socket/nchan-web-socket.service.mjs +0 -116
  183. package/esm2020/lib/core/web-socket/web-socket.factory.mjs +0 -28
  184. package/esm2020/lib/core-library.module.mjs +0 -92
  185. package/esm2020/lib/shared/pipes/unescape-html/unescape-html.pipe.mjs +0 -23
  186. package/fesm2015/xsolla-payment-client-core.mjs +0 -8138
  187. package/fesm2015/xsolla-payment-client-core.mjs.map +0 -1
  188. package/fesm2020/xsolla-payment-client-core.mjs.map +0 -1
  189. package/xsolla-payment-client-core-0.2.21.tgz +0 -0
  190. /package/{esm2020 → esm2022}/lib/core/agreementsGroup.const.mjs +0 -0
  191. /package/{esm2020 → esm2022}/lib/core/boolean-number.enum.mjs +0 -0
  192. /package/{esm2020 → esm2022}/lib/core/combined-payment-methods/combined-payment-methods.interface.mjs +0 -0
  193. /package/{esm2020 → esm2022}/lib/core/countries-api/country-response.interface.mjs +0 -0
  194. /package/{esm2020 → esm2022}/lib/core/countries-api/country.interface.mjs +0 -0
  195. /package/{esm2020 → esm2022}/lib/core/country/country-iso-code.enum.mjs +0 -0
  196. /package/{esm2020 → esm2022}/lib/core/credit-card/credit-card-settings.interface.mjs +0 -0
  197. /package/{esm2020 → esm2022}/lib/core/credit-card/credit-card-types.enum.mjs +0 -0
  198. /package/{esm2020 → esm2022}/lib/core/credit-card/credit-card.interface.mjs +0 -0
  199. /package/{esm2020 → esm2022}/lib/core/credit-card/credit-cards-map.const.mjs +0 -0
  200. /package/{esm2020 → esm2022}/lib/core/credit-card/default-mask.const.mjs +0 -0
  201. /package/{esm2020 → esm2022}/lib/core/credit-card/four-block-mask.const.mjs +0 -0
  202. /package/{esm2020 → esm2022}/lib/core/credit-card/ordered-cards-settings.const.mjs +0 -0
  203. /package/{esm2020 → esm2022}/lib/core/credit-card/types/american-express.mjs +0 -0
  204. /package/{esm2020 → esm2022}/lib/core/credit-card/types/aura.mjs +0 -0
  205. /package/{esm2020 → esm2022}/lib/core/credit-card/types/china-union-pay.mjs +0 -0
  206. /package/{esm2020 → esm2022}/lib/core/credit-card/types/dankort.mjs +0 -0
  207. /package/{esm2020 → esm2022}/lib/core/credit-card/types/default-card.mjs +0 -0
  208. /package/{esm2020 → esm2022}/lib/core/credit-card/types/diners-clubs.mjs +0 -0
  209. /package/{esm2020 → esm2022}/lib/core/credit-card/types/discover.mjs +0 -0
  210. /package/{esm2020 → esm2022}/lib/core/credit-card/types/elo.mjs +0 -0
  211. /package/{esm2020 → esm2022}/lib/core/credit-card/types/hipercard.mjs +0 -0
  212. /package/{esm2020 → esm2022}/lib/core/credit-card/types/jcb.mjs +0 -0
  213. /package/{esm2020 → esm2022}/lib/core/credit-card/types/maestro.mjs +0 -0
  214. /package/{esm2020 → esm2022}/lib/core/credit-card/types/mastercard.mjs +0 -0
  215. /package/{esm2020 → esm2022}/lib/core/credit-card/types/mir.mjs +0 -0
  216. /package/{esm2020 → esm2022}/lib/core/credit-card/types/naranja.mjs +0 -0
  217. /package/{esm2020 → esm2022}/lib/core/credit-card/types/postepay.mjs +0 -0
  218. /package/{esm2020 → esm2022}/lib/core/credit-card/types/visa.mjs +0 -0
  219. /package/{esm2020 → esm2022}/lib/core/deep-readonly.type.mjs +0 -0
  220. /package/{esm2020 → esm2022}/lib/core/device-finger-print/hash.type.mjs +0 -0
  221. /package/{esm2020 → esm2022}/lib/core/edit-saved-methods/delete-method-response.interface.mjs +0 -0
  222. /package/{esm2020 → esm2022}/lib/core/encrypt-credit-card/encrypted-card.interface.mjs +0 -0
  223. /package/{esm2020 → esm2022}/lib/core/encrypt-credit-card/open-card.interface.mjs +0 -0
  224. /package/{esm2020 → esm2022}/lib/core/errors-mapping/card-number-sanction-error-codes.const.mjs +0 -0
  225. /package/{esm2020 → esm2022}/lib/core/errors-mapping/field-special-errors-map.const.mjs +0 -0
  226. /package/{esm2020 → esm2022}/lib/core/exceptions-handling/elk/additional-info.interface.mjs +0 -0
  227. /package/{esm2020 → esm2022}/lib/core/exceptions-handling/elk/error-without-meta-fields.interface.mjs +0 -0
  228. /package/{esm2020 → esm2022}/lib/core/exceptions-handling/elk/log-message.interface.mjs +0 -0
  229. /package/{esm2020 → esm2022}/lib/core/exceptions-handling/errors/api-error.interface.mjs +0 -0
  230. /package/{esm2020 → esm2022}/lib/core/exceptions-handling/errors/app-error.class.mjs +0 -0
  231. /package/{esm2020 → esm2022}/lib/core/exceptions-handling/errors/elk-error-types.enum.mjs +0 -0
  232. /package/{esm2020 → esm2022}/lib/core/exceptions-handling/errors/encrypt-card-error.mjs +0 -0
  233. /package/{esm2020 → esm2022}/lib/core/exceptions-handling/errors/response-error.class.mjs +0 -0
  234. /package/{esm2020 → esm2022}/lib/core/exceptions-handling/errors/terminal-error.class.mjs +0 -0
  235. /package/{esm2020 → esm2022}/lib/core/exceptions-handling/errors/token-error.class.mjs +0 -0
  236. /package/{esm2020 → esm2022}/lib/core/exceptions-handling/errors/ws-error.class.mjs +0 -0
  237. /package/{esm2020 → esm2022}/lib/core/exceptions-handling/http-interceptor/http-error-data.interface.mjs +0 -0
  238. /package/{esm2020 → esm2022}/lib/core/exceptions-handling/http-interceptor/http-error-response-data.interface.mjs +0 -0
  239. /package/{esm2020 → esm2022}/lib/core/extended-window.interface.mjs +0 -0
  240. /package/{esm2020 → esm2022}/lib/core/http/secure-api/api-url.const.mjs +0 -0
  241. /package/{esm2020 → esm2022}/lib/core/http/secure-api/options.interface.mjs +0 -0
  242. /package/{esm2020 → esm2022}/lib/core/legal/legal.component.config.mjs +0 -0
  243. /package/{esm2020 → esm2022}/lib/core/payment/actions/action.interface.mjs +0 -0
  244. /package/{esm2020 → esm2022}/lib/core/payment/actions/check-status/check-status.action.type.mjs +0 -0
  245. /package/{esm2020 → esm2022}/lib/core/payment/actions/next-action.interface.mjs +0 -0
  246. /package/{esm2020 → esm2022}/lib/core/payment/actions/next-actions.mjs +0 -0
  247. /package/{esm2020 → esm2022}/lib/core/payment/actions/redirect/pay-station4-url.const.mjs +0 -0
  248. /package/{esm2020 → esm2022}/lib/core/payment/actions/redirect/ps4-pages/pages-payment-methods-id.const.mjs +0 -0
  249. /package/{esm2020 → esm2022}/lib/core/payment/actions/redirect/ps4-pages/pages-routes.const.mjs +0 -0
  250. /package/{esm2020 → esm2022}/lib/core/payment/actions/redirect/redirect.action.type.mjs +0 -0
  251. /package/{esm2020 → esm2022}/lib/core/payment/actions/show-errors/show-errors.action.type.mjs +0 -0
  252. /package/{esm2020 → esm2022}/lib/core/payment/actions/show-fields/show-fields.action.type.mjs +0 -0
  253. /package/{esm2020 → esm2022}/lib/core/payment/actions/show-mobile-payment-screen/show-mobile-payment-screen.action.type.mjs +0 -0
  254. /package/{esm2020 → esm2022}/lib/core/payment/actions/show-qr-code/show-qr-code.action.type.mjs +0 -0
  255. /package/{esm2020 → esm2022}/lib/core/payment/actions/special-button/special-button.action.type.mjs +0 -0
  256. /package/{esm2020 → esm2022}/lib/core/payment/actions/status-updated/status-updated.action.type.mjs +0 -0
  257. /package/{esm2020 → esm2022}/lib/core/payment/actions/three-ds/three-ds.action.type.mjs +0 -0
  258. /package/{esm2020 → esm2022}/lib/core/payment/checkout-item.interface.mjs +0 -0
  259. /package/{esm2020 → esm2022}/lib/core/payment/credit-card-payment-methods-id.variable.mjs +0 -0
  260. /package/{esm2020 → esm2022}/lib/core/payment/credit-card-state/credit-card-state.interface.mjs +0 -0
  261. /package/{esm2020 → esm2022}/lib/core/payment/emit-data.service.abstract.mjs +0 -0
  262. /package/{esm2020 → esm2022}/lib/core/payment/field-names.enum.mjs +0 -0
  263. /package/{esm2020 → esm2022}/lib/core/payment/field.interface.mjs +0 -0
  264. /package/{esm2020 → esm2022}/lib/core/payment/finance-details/cart-item.interface.mjs +0 -0
  265. /package/{esm2020 → esm2022}/lib/core/payment/finance-details/cart-line.interface.mjs +0 -0
  266. /package/{esm2020 → esm2022}/lib/core/payment/finance-details/cart-summary.interface.mjs +0 -0
  267. /package/{esm2020 → esm2022}/lib/core/payment/finance-details/finance-details.interface.mjs +0 -0
  268. /package/{esm2020 → esm2022}/lib/core/payment/finance-details/price.helpers.mjs +0 -0
  269. /package/{esm2020 → esm2022}/lib/core/payment/finance-details/price.interface.mjs +0 -0
  270. /package/{esm2020 → esm2022}/lib/core/payment/finance-details/status/field-with-amount-and-currency.interface.mjs +0 -0
  271. /package/{esm2020 → esm2022}/lib/core/payment/finance-details/status/fields-with-currency.mjs +0 -0
  272. /package/{esm2020 → esm2022}/lib/core/payment/finance-details/status/finance-info.interface.mjs +0 -0
  273. /package/{esm2020 → esm2022}/lib/core/payment/finance-details/summary/default-image-patterns.const.mjs +0 -0
  274. /package/{esm2020 → esm2022}/lib/core/payment/finance-details/summary/sales-tax-details-key.enum.mjs +0 -0
  275. /package/{esm2020 → esm2022}/lib/core/payment/finance-details/vat-details-key.enum.mjs +0 -0
  276. /package/{esm2020 → esm2022}/lib/core/payment/form/common-control-config.interface.mjs +0 -0
  277. /package/{esm2020 → esm2022}/lib/core/payment/form/control-status.interface.mjs +0 -0
  278. /package/{esm2020 → esm2022}/lib/core/payment/form/controls/card-number/card-number-control.config.mjs +0 -0
  279. /package/{esm2020 → esm2022}/lib/core/payment/form/controls/checkbox/checkbox-control.config.mjs +0 -0
  280. /package/{esm2020 → esm2022}/lib/core/payment/form/controls/control-config.mjs +0 -0
  281. /package/{esm2020 → esm2022}/lib/core/payment/form/controls/control-type.type.mjs +0 -0
  282. /package/{esm2020 → esm2022}/lib/core/payment/form/controls/coupon/coupon-control.config.mjs +0 -0
  283. /package/{esm2020 → esm2022}/lib/core/payment/form/controls/phone-control.config.mjs +0 -0
  284. /package/{esm2020 → esm2022}/lib/core/payment/form/controls/radio-control/radio-control.config.mjs +0 -0
  285. /package/{esm2020 → esm2022}/lib/core/payment/form/controls/radio-control/radio-option.interface.mjs +0 -0
  286. /package/{esm2020 → esm2022}/lib/core/payment/form/controls/search-select/search-select-option.interface.mjs +0 -0
  287. /package/{esm2020 → esm2022}/lib/core/payment/form/controls/search-select/select-control.config.mjs +0 -0
  288. /package/{esm2020 → esm2022}/lib/core/payment/form/controls/search-select/select-option.interface.mjs +0 -0
  289. /package/{esm2020 → esm2022}/lib/core/payment/form/controls/text-control.config.mjs +0 -0
  290. /package/{esm2020 → esm2022}/lib/core/payment/form/converters/converters-map.interface.mjs +0 -0
  291. /package/{esm2020 → esm2022}/lib/core/payment/form/converters/converters-map.mjs +0 -0
  292. /package/{esm2020 → esm2022}/lib/core/payment/form/converters/cpf-name/cpf-name-regex.variable.mjs +0 -0
  293. /package/{esm2020 → esm2022}/lib/core/payment/form/converters/cvv/cvv-form-state.interface.mjs +0 -0
  294. /package/{esm2020 → esm2022}/lib/core/payment/form/converters/street-number/street-number-from-state.interface.mjs +0 -0
  295. /package/{esm2020 → esm2022}/lib/core/payment/form/field-form-states.interface.mjs +0 -0
  296. /package/{esm2020 → esm2022}/lib/core/payment/form/field-status.interface.mjs +0 -0
  297. /package/{esm2020 → esm2022}/lib/core/payment/form/form-fields-status.interface.mjs +0 -0
  298. /package/{esm2020 → esm2022}/lib/core/payment/form/form-state.interface.mjs +0 -0
  299. /package/{esm2020 → esm2022}/lib/core/payment/form/input-event.enum.mjs +0 -0
  300. /package/{esm2020 → esm2022}/lib/core/payment/form/validators/async-validator-fn.type.mjs +0 -0
  301. /package/{esm2020 → esm2022}/lib/core/payment/form/validators/coupon/coupon-validator.mjs +0 -0
  302. /package/{esm2020 → esm2022}/lib/core/payment/form/validators/email/email-validator.mjs +0 -0
  303. /package/{esm2020 → esm2022}/lib/core/payment/form/validators/is-empty-input-value.function.mjs +0 -0
  304. /package/{esm2020 → esm2022}/lib/core/payment/form/validators/max-length-validator.mjs +0 -0
  305. /package/{esm2020 → esm2022}/lib/core/payment/form/validators/min-length-validator.mjs +0 -0
  306. /package/{esm2020 → esm2022}/lib/core/payment/form/validators/phone-validator.mjs +0 -0
  307. /package/{esm2020 → esm2022}/lib/core/payment/form/validators/required/required.validator.mjs +0 -0
  308. /package/{esm2020 → esm2022}/lib/core/payment/form/validators/restricted-value/restricted-value.validator.mjs +0 -0
  309. /package/{esm2020 → esm2022}/lib/core/payment/form/validators/validation-error.interface.mjs +0 -0
  310. /package/{esm2020 → esm2022}/lib/core/payment/form/validators/validation-errors.interface.mjs +0 -0
  311. /package/{esm2020 → esm2022}/lib/core/payment/form/validators/validator-fn.type.mjs +0 -0
  312. /package/{esm2020 → esm2022}/lib/core/payment/form-response.interface.mjs +0 -0
  313. /package/{esm2020 → esm2022}/lib/core/payment/initialize/initialize-request-params.interface.mjs +0 -0
  314. /package/{esm2020 → esm2022}/lib/core/payment/initialize/response/initialize-response.token.mjs +0 -0
  315. /package/{esm2020 → esm2022}/lib/core/payment/invoice.interface.mjs +0 -0
  316. /package/{esm2020 → esm2022}/lib/core/payment/payment-config.interface.mjs +0 -0
  317. /package/{esm2020 → esm2022}/lib/core/payment/payment-form.interface.mjs +0 -0
  318. /package/{esm2020 → esm2022}/lib/core/payment/payment.interface.mjs +0 -0
  319. /package/{esm2020 → esm2022}/lib/core/payment/status/check-status/request/check-status-request.token.mjs +0 -0
  320. /package/{esm2020 → esm2022}/lib/core/payment/status/check-status/response/check-status-response.class.mjs +0 -0
  321. /package/{esm2020 → esm2022}/lib/core/payment/status/check-status/response/check-status-response.token.mjs +0 -0
  322. /package/{esm2020 → esm2022}/lib/core/payment/status/finance-info-field.interface.mjs +0 -0
  323. /package/{esm2020 → esm2022}/lib/core/payment/status/line-item.interface.mjs +0 -0
  324. /package/{esm2020 → esm2022}/lib/core/payment/status/save-payment-method-status/api/saved-payment-account-changes.interface.mjs +0 -0
  325. /package/{esm2020 → esm2022}/lib/core/payment/status/save-payment-method-status/api/saved-payment-account.interface.mjs +0 -0
  326. /package/{esm2020 → esm2022}/lib/core/payment/status/save-payment-method-status/save-payment-method-status.enum.mjs +0 -0
  327. /package/{esm2020 → esm2022}/lib/core/payment/status/status-finance-info.interface.mjs +0 -0
  328. /package/{esm2020 → esm2022}/lib/core/payment/status/status-groups.mjs +0 -0
  329. /package/{esm2020 → esm2022}/lib/core/payment/status/status-order.interface.mjs +0 -0
  330. /package/{esm2020 → esm2022}/lib/core/payment/status/status-request/request/status-request.token.mjs +0 -0
  331. /package/{esm2020 → esm2022}/lib/core/payment/status/status-request/required-status-search-params.const.mjs +0 -0
  332. /package/{esm2020 → esm2022}/lib/core/payment/status/status-request/response/status-response.token.mjs +0 -0
  333. /package/{esm2020 → esm2022}/lib/core/payment/status/status-request/status-request-params.interface.mjs +0 -0
  334. /package/{esm2020 → esm2022}/lib/core/payment/status/status-request/status-search-param.enum.mjs +0 -0
  335. /package/{esm2020 → esm2022}/lib/core/payment/status/status-request/status-search-params.map.mjs +0 -0
  336. /package/{esm2020 → esm2022}/lib/core/payment/status/status-settings.interface.mjs +0 -0
  337. /package/{esm2020 → esm2022}/lib/core/payment/status/status-updated.interface.mjs +0 -0
  338. /package/{esm2020 → esm2022}/lib/core/payment/status/status.enum.mjs +0 -0
  339. /package/{esm2020 → esm2022}/lib/core/payment/status/status.interface.mjs +0 -0
  340. /package/{esm2020 → esm2022}/lib/core/payment/status/title-class.enum.mjs +0 -0
  341. /package/{esm2020 → esm2022}/lib/core/payment/status/web-socket-client-type.enum.mjs +0 -0
  342. /package/{esm2020 → esm2022}/lib/core/payment/status/websocket-status/websocket-status.enum.mjs +0 -0
  343. /package/{esm2020 → esm2022}/lib/core/payment/submit/request/submit-request.token.mjs +0 -0
  344. /package/{esm2020 → esm2022}/lib/core/payment/submit/response/is-submit-response.function.mjs +0 -0
  345. /package/{esm2020 → esm2022}/lib/core/payment/submit/response/submit-response.token.mjs +0 -0
  346. /package/{esm2020 → esm2022}/lib/core/payment/sync/field-async-validation.interface.mjs +0 -0
  347. /package/{esm2020 → esm2022}/lib/core/payment/sync/field-sync-state.interface.mjs +0 -0
  348. /package/{esm2020 → esm2022}/lib/core/payment/sync/request/sync-request.token.mjs +0 -0
  349. /package/{esm2020 → esm2022}/lib/core/payment/sync/response/sync-response.token.mjs +0 -0
  350. /package/{esm2020 → esm2022}/lib/core/payment/three-ds/api/notify-dfp-status/request/notify-dfp-status-request.class.mjs +0 -0
  351. /package/{esm2020 → esm2022}/lib/core/payment/three-ds/api/notify-dfp-status/request/notify-dfp-status-request.token.mjs +0 -0
  352. /package/{esm2020 → esm2022}/lib/core/payment/three-ds/api/status-three-ds/request/status-three-ds-request.class.mjs +0 -0
  353. /package/{esm2020 → esm2022}/lib/core/payment/three-ds/api/status-three-ds/request/status-three-ds-request.token.mjs +0 -0
  354. /package/{esm2020 → esm2022}/lib/core/payment/three-ds/api/status-three-ds/response/status-three-ds-response.class.mjs +0 -0
  355. /package/{esm2020 → esm2022}/lib/core/payment/three-ds/api/status-three-ds/response/status-three-ds-response.token.mjs +0 -0
  356. /package/{esm2020 → esm2022}/lib/core/payment/three-ds/api/status-three-ds/status-three-ds-response.interface.mjs +0 -0
  357. /package/{esm2020 → esm2022}/lib/core/payment/three-ds/api/status-three-ds/status-types.enum.mjs +0 -0
  358. /package/{esm2020 → esm2022}/lib/core/payment/three-ds/api/status-three-ds/three-ds-checkout-form.interface.mjs +0 -0
  359. /package/{esm2020 → esm2022}/lib/core/payment/three-ds/reinsurance-check/timer.interface.mjs +0 -0
  360. /package/{esm2020 → esm2022}/lib/core/payment/three-ds/three-ds-20/status-update.interface.mjs +0 -0
  361. /package/{esm2020 → esm2022}/lib/core/payment/three-ds/three-ds-form.interface.mjs +0 -0
  362. /package/{esm2020 → esm2022}/lib/core/payment/three-ds/three-ds-status-websocket-types.enum.mjs +0 -0
  363. /package/{esm2020 → esm2022}/lib/core/payment/virtual-currency.interface.mjs +0 -0
  364. /package/{esm2020 → esm2022}/lib/core/payment/xps-api-part.abstract.mjs +0 -0
  365. /package/{esm2020 → esm2022}/lib/core/payment/xps-checkout.mjs +0 -0
  366. /package/{esm2020 → esm2022}/lib/core/payment/xps-comand.enum.mjs +0 -0
  367. /package/{esm2020 → esm2022}/lib/core/payment/xps-error.interface.mjs +0 -0
  368. /package/{esm2020 → esm2022}/lib/core/payment/xps-finance.interface.mjs +0 -0
  369. /package/{esm2020 → esm2022}/lib/core/payment/xps-message.interface.mjs +0 -0
  370. /package/{esm2020 → esm2022}/lib/core/payment/xps-purchase.interface.mjs +0 -0
  371. /package/{esm2020 → esm2022}/lib/core/payment/xps-request-params.interface.mjs +0 -0
  372. /package/{esm2020 → esm2022}/lib/core/payment/xps-request.interface.mjs +0 -0
  373. /package/{esm2020 → esm2022}/lib/core/payment/xps-response.error.mjs +0 -0
  374. /package/{esm2020 → esm2022}/lib/core/payment/xps-response.interface.mjs +0 -0
  375. /package/{esm2020 → esm2022}/lib/core/payment/xps-summary.interface.mjs +0 -0
  376. /package/{esm2020 → esm2022}/lib/core/payment-methods/payment-method-api.interface.mjs +0 -0
  377. /package/{esm2020 → esm2022}/lib/core/payment-methods/payment-method.interface.mjs +0 -0
  378. /package/{esm2020 → esm2022}/lib/core/payment-methods/payment-methods-api.interface.mjs +0 -0
  379. /package/{esm2020 → esm2022}/lib/core/payment-methods/payment-methods-request-params.interface.mjs +0 -0
  380. /package/{esm2020 → esm2022}/lib/core/payment-methods/payment-methods-response.class.mjs +0 -0
  381. /package/{esm2020 → esm2022}/lib/core/payment-methods/payment-methods-response.interface.mjs +0 -0
  382. /package/{esm2020 → esm2022}/lib/core/payment-methods/payment-methods-response.token.mjs +0 -0
  383. /package/{esm2020 → esm2022}/lib/core/performance/xhr-action.interface.mjs +0 -0
  384. /package/{esm2020 → esm2022}/lib/core/properties.type.mjs +0 -0
  385. /package/{esm2020 → esm2022}/lib/core/saved-methods/saved-method-api.interface.mjs +0 -0
  386. /package/{esm2020 → esm2022}/lib/core/saved-methods/saved-method.interface.mjs +0 -0
  387. /package/{esm2020 → esm2022}/lib/core/saved-methods/saved-methods-request-params.interface.mjs +0 -0
  388. /package/{esm2020 → esm2022}/lib/core/saved-methods/saved-methods-response.class.mjs +0 -0
  389. /package/{esm2020 → esm2022}/lib/core/saved-methods/saved-methods-response.interface.mjs +0 -0
  390. /package/{esm2020 → esm2022}/lib/core/saved-methods/saved-methods-response.token.mjs +0 -0
  391. /package/{esm2020 → esm2022}/lib/core/sdk-payment-systems/apple-pay/apple-pay-integration.type.mjs +0 -0
  392. /package/{esm2020 → esm2022}/lib/core/sdk-payment-systems/apple-pay/apple-pay-params.interface.mjs +0 -0
  393. /package/{esm2020 → esm2022}/lib/core/sdk-payment-systems/apple-pay/apple-pay.const.mjs +0 -0
  394. /package/{esm2020 → esm2022}/lib/core/sdk-payment-systems/apple-pay/apple-pay.errors.enum.mjs +0 -0
  395. /package/{esm2020 → esm2022}/lib/core/sdk-payment-systems/apple-pay/checkout-params.interface.mjs +0 -0
  396. /package/{esm2020 → esm2022}/lib/core/sdk-payment-systems/google-pay/google-pay-button-color.type.mjs +0 -0
  397. /package/{esm2020 → esm2022}/lib/core/sdk-payment-systems/google-pay/google-pay-checkout.interface.mjs +0 -0
  398. /package/{esm2020 → esm2022}/lib/core/sdk-payment-systems/google-pay/google-pay-init-params.interface.mjs +0 -0
  399. /package/{esm2020 → esm2022}/lib/core/sdk-payment-systems/google-pay/google-pay-library.interface.mjs +0 -0
  400. /package/{esm2020 → esm2022}/lib/core/sdk-payment-systems/sdk-payment-methods.const.mjs +0 -0
  401. /package/{esm2020 → esm2022}/lib/core/sdk-payment-systems/sdk-payment-systems-initial-data.interface.mjs +0 -0
  402. /package/{esm2020 → esm2022}/lib/core/sdk-payment-systems/sdk-payment-systems.interface.mjs +0 -0
  403. /package/{esm2020 → esm2022}/lib/core/settings/auto-redirect-on-status.mjs +0 -0
  404. /package/{esm2020 → esm2022}/lib/core/settings/balance.interface.mjs +0 -0
  405. /package/{esm2020 → esm2022}/lib/core/settings/bonus.interface.mjs +0 -0
  406. /package/{esm2020 → esm2022}/lib/core/settings/configuration.interface.mjs +0 -0
  407. /package/{esm2020 → esm2022}/lib/core/settings/empty-utils-response.error.mjs +0 -0
  408. /package/{esm2020 → esm2022}/lib/core/settings/header-type.enum.mjs +0 -0
  409. /package/{esm2020 → esm2022}/lib/core/settings/offer.interface.mjs +0 -0
  410. /package/{esm2020 → esm2022}/lib/core/settings/project.interface.mjs +0 -0
  411. /package/{esm2020 → esm2022}/lib/core/settings/purchase.interface.mjs +0 -0
  412. /package/{esm2020 → esm2022}/lib/core/settings/settings-mode.enum.mjs +0 -0
  413. /package/{esm2020 → esm2022}/lib/core/settings/settings.interface.mjs +0 -0
  414. /package/{esm2020 → esm2022}/lib/core/settings/status-back-show.mjs +0 -0
  415. /package/{esm2020 → esm2022}/lib/core/settings/tracking-info.interface.mjs +0 -0
  416. /package/{esm2020 → esm2022}/lib/core/settings/user.interface.mjs +0 -0
  417. /package/{esm2020 → esm2022}/lib/core/settings/utils-response.interface.mjs +0 -0
  418. /package/{esm2020 → esm2022}/lib/core/type-guards/is-null.function.mjs +0 -0
  419. /package/{esm2020 → esm2022}/lib/core/type-guards/is-string.function.mjs +0 -0
  420. /package/{esm2020 → esm2022}/lib/core/type-guards/is-undefined.function.mjs +0 -0
  421. /package/{esm2020 → esm2022}/lib/core/url/search-params.interface.mjs +0 -0
  422. /package/{esm2020 → esm2022}/lib/core/user-agent/browserInfo.interface.mjs +0 -0
  423. /package/{esm2020 → esm2022}/lib/core/user-agent/browsers.mjs +0 -0
  424. /package/{esm2020 → esm2022}/lib/core/user-agent/device.enum.mjs +0 -0
  425. /package/{esm2020 → esm2022}/lib/core/user-agent/os.mjs +0 -0
  426. /package/{esm2020 → esm2022}/lib/core/user-agent/user-agent-data.interface.mjs +0 -0
  427. /package/{esm2020 → esm2022}/lib/core/user-balance/user-balance-api.interface.mjs +0 -0
  428. /package/{esm2020 → esm2022}/lib/core/user-balance/user-balance-request-params.interface.mjs +0 -0
  429. /package/{esm2020 → esm2022}/lib/core/user-balance/user-balance-response.class.mjs +0 -0
  430. /package/{esm2020 → esm2022}/lib/core/user-balance/user-balance-response.token.mjs +0 -0
  431. /package/{esm2020 → esm2022}/lib/core/user-behaviour-analytics/event-builder/event-parameter-types.mjs +0 -0
  432. /package/{esm2020 → esm2022}/lib/core/user-behaviour-analytics/event-builder/invoice.interface.mjs +0 -0
  433. /package/{esm2020 → esm2022}/lib/core/user-behaviour-analytics/event-builder/purchase.type.mjs +0 -0
  434. /package/{esm2020 → esm2022}/lib/core/user-behaviour-analytics/event-builder/user-behaviour-event.interface.mjs +0 -0
  435. /package/{esm2020 → esm2022}/lib/core/user-behaviour-analytics/one-time-analytics-events.const.mjs +0 -0
  436. /package/{esm2020 → esm2022}/lib/core/user-behaviour-analytics/user-behaviour-analytics.interface.mjs +0 -0
  437. /package/{esm2020 → esm2022}/lib/core/user-behaviour-analytics/user-behaviour-event/user-behaviour-event-categories.mjs +0 -0
  438. /package/{esm2020 → esm2022}/lib/core/user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types.mjs +0 -0
  439. /package/{esm2020 → esm2022}/lib/core/user-behaviour-analytics/user-behaviour-event-name.enum.mjs +0 -0
  440. /package/{esm2020 → esm2022}/lib/core/user-behaviour-analytics/user-session-options.mjs +0 -0
  441. /package/{esm2020 → esm2022}/lib/core/web-socket/web-socket-client-type.enum.mjs +0 -0
  442. /package/{esm2020 → esm2022}/lib/core/web-socket/web-socket.interface.mjs +0 -0
  443. /package/{esm2020 → esm2022}/lib/core/window.token.mjs +0 -0
  444. /package/{esm2020 → esm2022}/lib/core/xps-boolean.enum.mjs +0 -0
  445. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  446. /package/{esm2020 → esm2022}/xsolla-payment-client-core.mjs +0 -0
@@ -0,0 +1,144 @@
1
+ import { Inject, Injectable, isDevMode } from '@angular/core';
2
+ import { EventParameterType } from './event-parameter-types';
3
+ import { Device } from '../../user-agent/device.enum';
4
+ import { windowToken } from '../../window.token';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../settings/settings.service";
7
+ import * as i2 from "../../user-agent/user-agent.service";
8
+ export class EventBuilderService {
9
+ constructor(settingsService, userAgentService, window) {
10
+ this.settingsService = settingsService;
11
+ this.userAgentService = userAgentService;
12
+ this.window = window;
13
+ }
14
+ createEvent(options, userSessionOptions) {
15
+ return {
16
+ action: options.action,
17
+ type: options.type,
18
+ value: this.convertToEventParameterType(options.value, options.valueType ?? EventParameterType.string),
19
+ state: options.state,
20
+ date: this.getDate(options.date),
21
+ milliseconds: options.date.getTime(),
22
+ timezone: this.getTimezone(options.date),
23
+ session_id: this.settingsService.unsafeUtilsResponse?.user?.session_id ?? null,
24
+ referrer_url: this.window?.document?.referrer,
25
+ project_id: this.convertToEventParameterType(this.settingsService.unsafeUtilsResponse?.project?.id, EventParameterType.int),
26
+ payment_country: this.convertToEventParameterType(options.invoice?.payment_country ??
27
+ this.settingsService.unsafeUtilsResponse?.user?.country?.value, EventParameterType.string),
28
+ geotype_id: this.convertToEventParameterType(options.invoice?.geotype_id, EventParameterType.int),
29
+ instance_id: this.convertToEventParameterType(options.instanceId ??
30
+ this.getPaymentMethodId(userSessionOptions.instanceId), EventParameterType.int),
31
+ payment_method_contr_id: this.convertToEventParameterType(options.invoice?.payment_method_contr_id, EventParameterType.int),
32
+ ps_type: this.convertToEventParameterType(options.invoice?.ps_type, EventParameterType.int),
33
+ is_pay_with_saved_method: this.convertToEventParameterType(userSessionOptions.isPayWithSavedMethod, EventParameterType.bool),
34
+ purchase_invoice_id: this.convertToEventParameterType(options.invoice?.purchase_invoice_id, EventParameterType.int),
35
+ purchase_external_id: this.convertToEventParameterType(this.settingsService.unsafeUtilsResponse?.purchase_external_id, EventParameterType.string),
36
+ purchase_type: this.settingsService.unsafeUtilsResponse?.purchase
37
+ ?.purchase_type,
38
+ purchase_sum: this.convertToEventParameterType(options.invoice?.purchase_sum, EventParameterType.float),
39
+ purchase_currency: this.convertToEventParameterType(options.invoice?.purchase_currency, EventParameterType.string),
40
+ purchase_sku: this.convertToEventParameterType(options.invoice?.purchase_sku, EventParameterType.string),
41
+ purchase_digital_content_sku: null,
42
+ purchase_description: this.convertToEventParameterType(options.invoice?.purchase_description, EventParameterType.string),
43
+ virtual_currency_amount: null, // TODO: add value
44
+ digital_content_cart_id: this.convertToEventParameterType(options.invoice?.digital_content_cart_id, EventParameterType.int),
45
+ digital_good_cart_id: this.convertToEventParameterType(options.invoice?.digital_good_cart_id, EventParameterType.int),
46
+ coupon_code: this.convertToEventParameterType(userSessionOptions.couponCode, EventParameterType.string),
47
+ theme_version: this.userAgentService.isMobileDevice
48
+ ? Device.mobile
49
+ : Device.desktop,
50
+ subscription_package_id: this.convertToEventParameterType(userSessionOptions.subscriptionPackageId, EventParameterType.int),
51
+ subscription_product_id: this.convertToEventParameterType(userSessionOptions.subscriptionProductId, EventParameterType.int),
52
+ subscription_recurrent_id: this.convertToEventParameterType(userSessionOptions.subscriptionRecurrentId, EventParameterType.int),
53
+ user_id: this.convertToEventParameterType(this.settingsService.unsafeUtilsResponse?.user?.requisites?.id, EventParameterType.string),
54
+ user_access_token: this.settingsService.token,
55
+ user_name: this.convertToEventParameterType(this.settingsService.unsafeUtilsResponse?.user?.requisites?.v2, EventParameterType.string),
56
+ user_email: this.convertToEventParameterType(this.settingsService.unsafeUtilsResponse?.user?.email?.value, EventParameterType.string),
57
+ user_country: this.convertToEventParameterType(this.settingsService.unsafeUtilsResponse?.user?.country?.value, EventParameterType.string),
58
+ user_ip: this.convertToEventParameterType(this.settingsService.unsafeUtilsResponse?.user?.ip, EventParameterType.string),
59
+ user_mobile_operator_name: this.convertToEventParameterType(userSessionOptions.userMobileOperatorName, EventParameterType.string),
60
+ user_operation_system: this.userAgentService.platform,
61
+ user_browser: this.userAgentService.browserDescription,
62
+ user_browser_version: this.userAgentService.browserVersion,
63
+ user_locale: this.convertToEventParameterType(this.settingsService.unsafeUtilsResponse?.user?.local, EventParameterType.string),
64
+ user_utm: this.convertToEventParameterType(this.settingsService.unsafeUtilsResponse?.user?.utm_parameters, EventParameterType.string),
65
+ xsolla_product_tag: this.convertToEventParameterType(this.settingsService.unsafeUtilsResponse?.xsolla_product_tag, EventParameterType.string),
66
+ experiment_id: null,
67
+ is_test_session: +isDevMode(),
68
+ babka_value: null,
69
+ extra_value: this.convertToEventParameterType(options?.extraValue, EventParameterType.string),
70
+ is_subscription: this.convertToEventParameterType(this.isSubscription(), EventParameterType.bool),
71
+ is_iframe: this.convertToEventParameterType(this.window.parent !== this.window, EventParameterType.bool),
72
+ web3wallet: null, // TODO: add value
73
+ dimension_1: this.convertToEventParameterType(options?.dimension1, EventParameterType.string),
74
+ dimension_2: this.convertToEventParameterType(options?.dimension2, EventParameterType.string),
75
+ dimension_3: this.convertToEventParameterType(options?.dimension3, EventParameterType.string),
76
+ dimension_4: this.convertToEventParameterType(options?.dimension4, EventParameterType.string),
77
+ dimension_5: this.convertToEventParameterType(options?.dimension5, EventParameterType.string),
78
+ client_version: 'Headless Checkout',
79
+ };
80
+ }
81
+ getDate(date) {
82
+ const nullIndex = 0;
83
+ return date.toISOString().replace('T', ' ').replace('Z', '').split('.')[nullIndex];
84
+ }
85
+ getTimezone(date) {
86
+ const hour = 60;
87
+ const nullHour = 0;
88
+ const hourOffset = -date.getTimezoneOffset() / hour;
89
+ if (hourOffset === nullHour) {
90
+ return '0';
91
+ }
92
+ return hourOffset > nullHour ? `+${hourOffset}` : hourOffset.toString();
93
+ }
94
+ convertToEventParameterType(value, type
95
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
96
+ ) {
97
+ if (value === null || value === undefined) {
98
+ return null;
99
+ }
100
+ if (typeof value === 'boolean') {
101
+ value = value ? 1 : 0;
102
+ }
103
+ switch (type) {
104
+ case EventParameterType.string:
105
+ return String(value);
106
+ case EventParameterType.int:
107
+ value = parseInt(String(value), 10);
108
+ return isNaN(value) ? 0 : value;
109
+ case EventParameterType.intArray:
110
+ return Array.isArray(value) ? value : [];
111
+ case EventParameterType.float:
112
+ value = parseFloat(String(value));
113
+ return isNaN(value) ? 0 : value;
114
+ case EventParameterType.bool:
115
+ return value ? 1 : 0;
116
+ }
117
+ }
118
+ convertValueForPostMessage(value) {
119
+ if (value === null || value === undefined) {
120
+ return null;
121
+ }
122
+ return String(value);
123
+ }
124
+ isSubscription() {
125
+ return (this.settingsService.unsafeUtilsResponse?.purchase?.purchase_type ===
126
+ 'subscription');
127
+ }
128
+ getPaymentMethodId(instanceId) {
129
+ return (this.settingsService.unsafeUtilsResponse?.settings?.payment_system ??
130
+ instanceId);
131
+ }
132
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: EventBuilderService, deps: [{ token: i1.SettingsService }, { token: i2.UserAgentService }, { token: windowToken }], target: i0.ɵɵFactoryTarget.Injectable }); }
133
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: EventBuilderService, providedIn: 'root' }); }
134
+ }
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: EventBuilderService, decorators: [{
136
+ type: Injectable,
137
+ args: [{
138
+ providedIn: 'root',
139
+ }]
140
+ }], ctorParameters: () => [{ type: i1.SettingsService }, { type: i2.UserAgentService }, { type: undefined, decorators: [{
141
+ type: Inject,
142
+ args: [windowToken]
143
+ }] }] });
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtYnVpbGRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGF5bWVudC1jbGllbnQtY29yZS9zcmMvbGliL2NvcmUvdXNlci1iZWhhdmlvdXItYW5hbHl0aWNzL2V2ZW50LWJ1aWxkZXIvZXZlbnQtYnVpbGRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQU83RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7O0FBTWpELE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsWUFDbUIsZUFBZ0MsRUFDaEMsZ0JBQWtDLEVBRWxDLE1BQXNCO1FBSHRCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBRWxDLFdBQU0sR0FBTixNQUFNLENBQWdCO0lBQ3RDLENBQUM7SUFFRyxXQUFXLENBQ2hCLE9BQTBDLEVBQzFDLGtCQUFzQztRQUV0QyxPQUFPO1lBQ0wsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixLQUFLLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixDQUNyQyxPQUFPLENBQUMsS0FBSyxFQUNiLE9BQU8sQ0FBQyxTQUFTLElBQUksa0JBQWtCLENBQUMsTUFBTSxDQUMvQztZQUNELEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztZQUNwQixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hDLFlBQVksRUFBRSxPQUFP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Qjs7MEJBS0ksTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV2ZW50UGFyYW1ldGVyVHlwZSB9IGZyb20gJy4vZXZlbnQtcGFyYW1ldGVyLXR5cGVzJztcbmltcG9ydCB7IFVzZXJCZWhhdmlvdXJFdmVudCB9IGZyb20gJy4vdXNlci1iZWhhdmlvdXItZXZlbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFB1cmNoYXNlIH0gZnJvbSAnLi9wdXJjaGFzZS50eXBlJztcbmltcG9ydCB7IENyZWF0ZUV2ZW50TWV0aG9kT3B0aW9uc0ludGVyZmFjZSB9IGZyb20gJy4uL3VzZXItYmVoYXZpb3VyLWFuYWx5dGljcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2V0dGluZ3Mvc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyQWdlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXNlci1hZ2VudC91c2VyLWFnZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRXh0ZW5kZWRXaW5kb3cgfSBmcm9tICcuLi8uLi9leHRlbmRlZC13aW5kb3cuaW50ZXJmYWNlJztcbmltcG9ydCB7IERldmljZSB9IGZyb20gJy4uLy4uL3VzZXItYWdlbnQvZGV2aWNlLmVudW0nO1xuaW1wb3J0IHsgd2luZG93VG9rZW4gfSBmcm9tICcuLi8uLi93aW5kb3cudG9rZW4nO1xuaW1wb3J0IHsgVXNlclNlc3Npb25PcHRpb25zIH0gZnJvbSAnLi4vdXNlci1zZXNzaW9uLW9wdGlvbnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRXZlbnRCdWlsZGVyU2VydmljZSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlckFnZW50U2VydmljZTogVXNlckFnZW50U2VydmljZSxcbiAgICBASW5qZWN0KHdpbmRvd1Rva2VuKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2luZG93OiBFeHRlbmRlZFdpbmRvd1xuICApIHt9XG5cbiAgcHVibGljIGNyZWF0ZUV2ZW50KFxuICAgIG9wdGlvbnM6IENyZWF0ZUV2ZW50TWV0aG9kT3B0aW9uc0ludGVyZmFjZSxcbiAgICB1c2VyU2Vzc2lvbk9wdGlvbnM6IFVzZXJTZXNzaW9uT3B0aW9uc1xuICApOiBVc2VyQmVoYXZpb3VyRXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb246IG9wdGlvbnMuYWN0aW9uLFxuICAgICAgdHlwZTogb3B0aW9ucy50eXBlLFxuICAgICAgdmFsdWU6IHRoaXMuY29udmVydFRvRXZlbnRQYXJhbWV0ZXJUeXBlKFxuICAgICAgICBvcHRpb25zLnZhbHVlLFxuICAgICAgICBvcHRpb25zLnZhbHVlVHlwZSA/PyBFdmVudFBhcmFtZXRlclR5cGUuc3RyaW5nXG4gICAgICApLFxuICAgICAgc3RhdGU6IG9wdGlvbnMuc3RhdGUsXG4gICAgICBkYXRlOiB0aGlzLmdldERhdGUob3B0aW9ucy5kYXRlKSxcbiAgICAgIG1pbGxpc2Vjb25kczogb3B0aW9ucy5kYXRlLmdldFRpbWUoKSxcbiAgICAgIHRpbWV6b25lOiB0aGlzLmdldFRpbWV6b25lKG9wdGlvbnMuZGF0ZSksXG4gICAgICBzZXNzaW9uX2lkOlxuICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS51bnNhZmVVdGlsc1Jlc3BvbnNlPy51c2VyPy5zZXNzaW9uX2lkID8/IG51bGwsXG4gICAgICByZWZlcnJlcl91cmw6IHRoaXMud2luZG93Py5kb2N1bWVudD8ucmVmZXJyZXIsXG4gICAgICBwcm9qZWN0X2lkOiB0aGlzLmNvbnZlcnRUb0V2ZW50UGFyYW1ldGVyVHlwZShcbiAgICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UudW5zYWZlVXRpbHNSZXNwb25zZT8ucHJvamVjdD8uaWQsXG4gICAgICAgIEV2ZW50UGFyYW1ldGVyVHlwZS5pbnRcbiAgICAgICksXG4gICAgICBwYXltZW50X2NvdW50cnk6IHRoaXMuY29udmVydFRvRXZlbnRQYXJhbWV0ZXJUeXBlKFxuICAgICAgICBvcHRpb25zLmludm9pY2U/LnBheW1lbnRfY291bnRyeSA/P1xuICAgICAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnVuc2FmZVV0aWxzUmVzcG9uc2U/LnVzZXI/LmNvdW50cnk/LnZhbHVlLFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuc3RyaW5nXG4gICAgICApLFxuICAgICAgZ2VvdHlwZV9pZDogdGhpcy5jb252ZXJ0VG9FdmVudFBhcmFtZXRlclR5cGUoXG4gICAgICAgIG9wdGlvbnMuaW52b2ljZT8uZ2VvdHlwZV9pZCxcbiAgICAgICAgRXZlbnRQYXJhbWV0ZXJUeXBlLmludFxuICAgICAgKSxcbiAgICAgIGluc3RhbmNlX2lkOiB0aGlzLmNvbnZlcnRUb0V2ZW50UGFyYW1ldGVyVHlwZShcbiAgICAgICAgb3B0aW9ucy5pbnN0YW5jZUlkID8/XG4gICAgICAgICAgdGhpcy5nZXRQYXltZW50TWV0aG9kSWQodXNlclNlc3Npb25PcHRpb25zLmluc3RhbmNlSWQpLFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuaW50XG4gICAgICApLFxuICAgICAgcGF5bWVudF9tZXRob2RfY29udHJfaWQ6IHRoaXMuY29udmVydFRvRXZlbnRQYXJhbWV0ZXJUeXBlKFxuICAgICAgICBvcHRpb25zLmludm9pY2U/LnBheW1lbnRfbWV0aG9kX2NvbnRyX2lkLFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuaW50XG4gICAgICApLFxuICAgICAgcHNfdHlwZTogdGhpcy5jb252ZXJ0VG9FdmVudFBhcmFtZXRlclR5cGUoXG4gICAgICAgIG9wdGlvbnMuaW52b2ljZT8ucHNfdHlwZSxcbiAgICAgICAgRXZlbnRQYXJhbWV0ZXJUeXBlLmludFxuICAgICAgKSxcbiAgICAgIGlzX3BheV93aXRoX3NhdmVkX21ldGhvZDogdGhpcy5jb252ZXJ0VG9FdmVudFBhcmFtZXRlclR5cGUoXG4gICAgICAgIHVzZXJTZXNzaW9uT3B0aW9ucy5pc1BheVdpdGhTYXZlZE1ldGhvZCxcbiAgICAgICAgRXZlbnRQYXJhbWV0ZXJUeXBlLmJvb2xcbiAgICAgICksXG4gICAgICBwdXJjaGFzZV9pbnZvaWNlX2lkOiB0aGlzLmNvbnZlcnRUb0V2ZW50UGFyYW1ldGVyVHlwZShcbiAgICAgICAgb3B0aW9ucy5pbnZvaWNlPy5wdXJjaGFzZV9pbnZvaWNlX2lkLFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuaW50XG4gICAgICApLFxuICAgICAgcHVyY2hhc2VfZXh0ZXJuYWxfaWQ6IHRoaXMuY29udmVydFRvRXZlbnRQYXJhbWV0ZXJUeXBlKFxuICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS51bnNhZmVVdGlsc1Jlc3BvbnNlPy5wdXJjaGFzZV9leHRlcm5hbF9pZCxcbiAgICAgICAgRXZlbnRQYXJhbWV0ZXJUeXBlLnN0cmluZ1xuICAgICAgKSxcbiAgICAgIHB1cmNoYXNlX3R5cGU6IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnVuc2FmZVV0aWxzUmVzcG9uc2U/LnB1cmNoYXNlXG4gICAgICAgID8ucHVyY2hhc2VfdHlwZSBhcyBQdXJjaGFzZSxcbiAgICAgIHB1cmNoYXNlX3N1bTogdGhpcy5jb252ZXJ0VG9FdmVudFBhcmFtZXRlclR5cGUoXG4gICAgICAgIG9wdGlvbnMuaW52b2ljZT8ucHVyY2hhc2Vfc3VtLFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuZmxvYXRcbiAgICAgICksXG4gICAgICBwdXJjaGFzZV9jdXJyZW5jeTogdGhpcy5jb252ZXJ0VG9FdmVudFBhcmFtZXRlclR5cGUoXG4gICAgICAgIG9wdGlvbnMuaW52b2ljZT8ucHVyY2hhc2VfY3VycmVuY3ksXG4gICAgICAgIEV2ZW50UGFyYW1ldGVyVHlwZS5zdHJpbmdcbiAgICAgICksXG4gICAgICBwdXJjaGFzZV9za3U6IHRoaXMuY29udmVydFRvRXZlbnRQYXJhbWV0ZXJUeXBlKFxuICAgICAgICBvcHRpb25zLmludm9pY2U/LnB1cmNoYXNlX3NrdSxcbiAgICAgICAgRXZlbnRQYXJhbWV0ZXJUeXBlLnN0cmluZ1xuICAgICAgKSxcbiAgICAgIHB1cmNoYXNlX2RpZ2l0YWxfY29udGVudF9za3U6IG51bGwsXG4gICAgICBwdXJjaGFzZV9kZXNjcmlwdGlvbjogdGhpcy5jb252ZXJ0VG9FdmVudFBhcmFtZXRlclR5cGUoXG4gICAgICAgIG9wdGlvbnMuaW52b2ljZT8ucHVyY2hhc2VfZGVzY3JpcHRpb24sXG4gICAgICAgIEV2ZW50UGFyYW1ldGVyVHlwZS5zdHJpbmdcbiAgICAgICksXG4gICAgICB2aXJ0dWFsX2N1cnJlbmN5X2Ftb3VudDogbnVsbCwgLy8gVE9ETzogYWRkIHZhbHVlXG4gICAgICBkaWdpdGFsX2NvbnRlbnRfY2FydF9pZDogdGhpcy5jb252ZXJ0VG9FdmVudFBhcmFtZXRlclR5cGUoXG4gICAgICAgIG9wdGlvbnMuaW52b2ljZT8uZGlnaXRhbF9jb250ZW50X2NhcnRfaWQsXG4gICAgICAgIEV2ZW50UGFyYW1ldGVyVHlwZS5pbnRcbiAgICAgICksXG4gICAgICBkaWdpdGFsX2dvb2RfY2FydF9pZDogdGhpcy5jb252ZXJ0VG9FdmVudFBhcmFtZXRlclR5cGUoXG4gICAgICAgIG9wdGlvbnMuaW52b2ljZT8uZGlnaXRhbF9nb29kX2NhcnRfaWQsXG4gICAgICAgIEV2ZW50UGFyYW1ldGVyVHlwZS5pbnRcbiAgICAgICksXG4gICAgICBjb3Vwb25fY29kZTogdGhpcy5jb252ZXJ0VG9FdmVudFBhcmFtZXRlclR5cGUoXG4gICAgICAgIHVzZXJTZXNzaW9uT3B0aW9ucy5jb3Vwb25Db2RlLFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuc3RyaW5nXG4gICAgICApLFxuICAgICAgdGhlbWVfdmVyc2lvbjogdGhpcy51c2VyQWdlbnRTZXJ2aWNlLmlzTW9iaWxlRGV2aWNlXG4gICAgICAgID8gRGV2aWNlLm1vYmlsZVxuICAgICAgICA6IERldmljZS5kZXNrdG9wLFxuICAgICAgc3Vic2NyaXB0aW9uX3BhY2thZ2VfaWQ6IHRoaXMuY29udmVydFRvRXZlbnRQYXJhbWV0ZXJUeXBlKFxuICAgICAgICB1c2VyU2Vzc2lvbk9wdGlvbnMuc3Vic2NyaXB0aW9uUGFja2FnZUlkLFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuaW50XG4gICAgICApLFxuICAgICAgc3Vic2NyaXB0aW9uX3Byb2R1Y3RfaWQ6IHRoaXMuY29udmVydFRvRXZlbnRQYXJhbWV0ZXJUeXBlKFxuICAgICAgICB1c2VyU2Vzc2lvbk9wdGlvbnMuc3Vic2NyaXB0aW9uUHJvZHVjdElkLFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuaW50XG4gICAgICApLFxuICAgICAgc3Vic2NyaXB0aW9uX3JlY3VycmVudF9pZDogdGhpcy5jb252ZXJ0VG9FdmVudFBhcmFtZXRlclR5cGUoXG4gICAgICAgIHVzZXJTZXNzaW9uT3B0aW9ucy5zdWJzY3JpcHRpb25SZWN1cnJlbnRJZCxcbiAgICAgICAgRXZlbnRQYXJhbWV0ZXJUeXBlLmludFxuICAgICAgKSxcbiAgICAgIHVzZXJfaWQ6IHRoaXMuY29udmVydFRvRXZlbnRQYXJhbWV0ZXJUeXBlKFxuICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS51bnNhZmVVdGlsc1Jlc3BvbnNlPy51c2VyPy5yZXF1aXNpdGVzPy5pZCxcbiAgICAgICAgRXZlbnRQYXJhbWV0ZXJUeXBlLnN0cmluZ1xuICAgICAgKSxcbiAgICAgIHVzZXJfYWNjZXNzX3Rva2VuOiB0aGlzLnNldHRpbmdzU2VydmljZS50b2tlbixcbiAgICAgIHVzZXJfbmFtZTogdGhpcy5jb252ZXJ0VG9FdmVudFBhcmFtZXRlclR5cGUoXG4gICAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnVuc2FmZVV0aWxzUmVzcG9uc2U/LnVzZXI/LnJlcXVpc2l0ZXM/LnYyLFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuc3RyaW5nXG4gICAgICApLFxuICAgICAgdXNlcl9lbWFpbDogdGhpcy5jb252ZXJ0VG9FdmVudFBhcmFtZXRlclR5cGUoXG4gICAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnVuc2FmZVV0aWxzUmVzcG9uc2U/LnVzZXI/LmVtYWlsPy52YWx1ZSxcbiAgICAgICAgRXZlbnRQYXJhbWV0ZXJUeXBlLnN0cmluZ1xuICAgICAgKSxcbiAgICAgIHVzZXJfY291bnRyeTogdGhpcy5jb252ZXJ0VG9FdmVudFBhcmFtZXRlclR5cGUoXG4gICAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnVuc2FmZVV0aWxzUmVzcG9uc2U/LnVzZXI/LmNvdW50cnk/LnZhbHVlLFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuc3RyaW5nXG4gICAgICApLFxuICAgICAgdXNlcl9pcDogdGhpcy5jb252ZXJ0VG9FdmVudFBhcmFtZXRlclR5cGUoXG4gICAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnVuc2FmZVV0aWxzUmVzcG9uc2U/LnVzZXI/LmlwLFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuc3RyaW5nXG4gICAgICApLFxuICAgICAgdXNlcl9tb2JpbGVfb3BlcmF0b3JfbmFtZTogdGhpcy5jb252ZXJ0VG9FdmVudFBhcmFtZXRlclR5cGUoXG4gICAgICAgIHVzZXJTZXNzaW9uT3B0aW9ucy51c2VyTW9iaWxlT3BlcmF0b3JOYW1lLFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuc3RyaW5nXG4gICAgICApLFxuICAgICAgdXNlcl9vcGVyYXRpb25fc3lzdGVtOiB0aGlzLnVzZXJBZ2VudFNlcnZpY2UucGxhdGZvcm0sXG4gICAgICB1c2VyX2Jyb3dzZXI6IHRoaXMudXNlckFnZW50U2VydmljZS5icm93c2VyRGVzY3JpcHRpb24sXG4gICAgICB1c2VyX2Jyb3dzZXJfdmVyc2lvbjogdGhpcy51c2VyQWdlbnRTZXJ2aWNlLmJyb3dzZXJWZXJzaW9uLFxuICAgICAgdXNlcl9sb2NhbGU6IHRoaXMuY29udmVydFRvRXZlbnRQYXJhbWV0ZXJUeXBlKFxuICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS51bnNhZmVVdGlsc1Jlc3BvbnNlPy51c2VyPy5sb2NhbCxcbiAgICAgICAgRXZlbnRQYXJhbWV0ZXJUeXBlLnN0cmluZ1xuICAgICAgKSxcbiAgICAgIHVzZXJfdXRtOiB0aGlzLmNvbnZlcnRUb0V2ZW50UGFyYW1ldGVyVHlwZShcbiAgICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UudW5zYWZlVXRpbHNSZXNwb25zZT8udXNlcj8udXRtX3BhcmFtZXRlcnMsXG4gICAgICAgIEV2ZW50UGFyYW1ldGVyVHlwZS5zdHJpbmdcbiAgICAgICksXG4gICAgICB4c29sbGFfcHJvZHVjdF90YWc6IHRoaXMuY29udmVydFRvRXZlbnRQYXJhbWV0ZXJUeXBlKFxuICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS51bnNhZmVVdGlsc1Jlc3BvbnNlPy54c29sbGFfcHJvZHVjdF90YWcsXG4gICAgICAgIEV2ZW50UGFyYW1ldGVyVHlwZS5zdHJpbmdcbiAgICAgICksXG4gICAgICBleHBlcmltZW50X2lkOiBudWxsLFxuICAgICAgaXNfdGVzdF9zZXNzaW9uOiAraXNEZXZNb2RlKCksXG4gICAgICBiYWJrYV92YWx1ZTogbnVsbCxcbiAgICAgIGV4dHJhX3ZhbHVlOiB0aGlzLmNvbnZlcnRUb0V2ZW50UGFyYW1ldGVyVHlwZShcbiAgICAgICAgb3B0aW9ucz8uZXh0cmFWYWx1ZSxcbiAgICAgICAgRXZlbnRQYXJhbWV0ZXJUeXBlLnN0cmluZ1xuICAgICAgKSxcbiAgICAgIGlzX3N1YnNjcmlwdGlvbjogdGhpcy5jb252ZXJ0VG9FdmVudFBhcmFtZXRlclR5cGUoXG4gICAgICAgIHRoaXMuaXNTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgRXZlbnRQYXJhbWV0ZXJUeXBlLmJvb2xcbiAgICAgICksXG4gICAgICBpc19pZnJhbWU6IHRoaXMuY29udmVydFRvRXZlbnRQYXJhbWV0ZXJUeXBlKFxuICAgICAgICB0aGlzLndpbmRvdy5wYXJlbnQgIT09IHRoaXMud2luZG93LFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuYm9vbFxuICAgICAgKSxcbiAgICAgIHdlYjN3YWxsZXQ6IG51bGwsIC8vIFRPRE86IGFkZCB2YWx1ZVxuICAgICAgZGltZW5zaW9uXzE6IHRoaXMuY29udmVydFRvRXZlbnRQYXJhbWV0ZXJUeXBlKFxuICAgICAgICBvcHRpb25zPy5kaW1lbnNpb24xLFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuc3RyaW5nXG4gICAgICApLFxuICAgICAgZGltZW5zaW9uXzI6IHRoaXMuY29udmVydFRvRXZlbnRQYXJhbWV0ZXJUeXBlKFxuICAgICAgICBvcHRpb25zPy5kaW1lbnNpb24yLFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuc3RyaW5nXG4gICAgICApLFxuICAgICAgZGltZW5zaW9uXzM6IHRoaXMuY29udmVydFRvRXZlbnRQYXJhbWV0ZXJUeXBlKFxuICAgICAgICBvcHRpb25zPy5kaW1lbnNpb24zLFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuc3RyaW5nXG4gICAgICApLFxuICAgICAgZGltZW5zaW9uXzQ6IHRoaXMuY29udmVydFRvRXZlbnRQYXJhbWV0ZXJUeXBlKFxuICAgICAgICBvcHRpb25zPy5kaW1lbnNpb240LFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuc3RyaW5nXG4gICAgICApLFxuICAgICAgZGltZW5zaW9uXzU6IHRoaXMuY29udmVydFRvRXZlbnRQYXJhbWV0ZXJUeXBlKFxuICAgICAgICBvcHRpb25zPy5kaW1lbnNpb241LFxuICAgICAgICBFdmVudFBhcmFtZXRlclR5cGUuc3RyaW5nXG4gICAgICApLFxuICAgICAgY2xpZW50X3ZlcnNpb246ICdIZWFkbGVzcyBDaGVja291dCcsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBudWxsSW5kZXggPSAwO1xuICAgIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgnVCcsICcgJykucmVwbGFjZSgnWicsICcnKS5zcGxpdCgnLicpW1xuICAgICAgbnVsbEluZGV4XG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGltZXpvbmUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgaG91ciA9IDYwO1xuICAgIGNvbnN0IG51bGxIb3VyID0gMDtcbiAgICBjb25zdCBob3VyT2Zmc2V0ID0gLWRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIGhvdXI7XG5cbiAgICBpZiAoaG91ck9mZnNldCA9PT0gbnVsbEhvdXIpIHtcbiAgICAgIHJldHVybiAnMCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdXJPZmZzZXQgPiBudWxsSG91ciA/IGArJHtob3VyT2Zmc2V0fWAgOiBob3VyT2Zmc2V0LnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb0V2ZW50UGFyYW1ldGVyVHlwZShcbiAgICB2YWx1ZTogYm9vbGVhbiB8IG51bWJlciB8IG51bWJlcltdIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICB0eXBlOiBFdmVudFBhcmFtZXRlclR5cGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICApOiBhbnkgfCBudWxsIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlID8gMSA6IDA7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIEV2ZW50UGFyYW1ldGVyVHlwZS5zdHJpbmc6XG4gICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgY2FzZSBFdmVudFBhcmFtZXRlclR5cGUuaW50OlxuICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KFN0cmluZyh2YWx1ZSksIDEwKTtcbiAgICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKSA/IDAgOiB2YWx1ZTtcbiAgICAgIGNhc2UgRXZlbnRQYXJhbWV0ZXJUeXBlLmludEFycmF5OlxuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdO1xuICAgICAgY2FzZSBFdmVudFBhcmFtZXRlclR5cGUuZmxvYXQ6XG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKSA/IDAgOiB2YWx1ZTtcbiAgICAgIGNhc2UgRXZlbnRQYXJhbWV0ZXJUeXBlLmJvb2w6XG4gICAgICAgIHJldHVybiB2YWx1ZSA/IDEgOiAwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFZhbHVlRm9yUG9zdE1lc3NhZ2UoXG4gICAgdmFsdWU6IHN0cmluZyB8IG51bWJlcltdIHwgbnVsbFxuICApOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1N1YnNjcmlwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UudW5zYWZlVXRpbHNSZXNwb25zZT8ucHVyY2hhc2U/LnB1cmNoYXNlX3R5cGUgPT09XG4gICAgICAnc3Vic2NyaXB0aW9uJ1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFBheW1lbnRNZXRob2RJZChpbnN0YW5jZUlkOiBudW1iZXIgfCBudWxsKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnVuc2FmZVV0aWxzUmVzcG9uc2U/LnNldHRpbmdzPy5wYXltZW50X3N5c3RlbSA/P1xuICAgICAgaW5zdGFuY2VJZFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,158 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { userBehaviourEventTypes } from './user-behaviour-event/user-behaviour-event-types';
3
+ import { eventCategories } from './user-behaviour-event/user-behaviour-event-categories';
4
+ import { Subject } from 'rxjs';
5
+ import { UserBehaviourEventName } from './user-behaviour-event-name.enum';
6
+ import { oneTimeAnalyticsEvents } from './one-time-analytics-events.const';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common/http";
9
+ import * as i2 from "./event-builder/event-builder.service";
10
+ import * as i3 from "../settings/settings.service";
11
+ export class UserBehaviourAnalyticsService {
12
+ set isPayWithSavedMethod(value) {
13
+ this.userSessionOptions.isPayWithSavedMethod = value;
14
+ }
15
+ set subscriptionPackageId(value) {
16
+ this.userSessionOptions.subscriptionPackageId = value;
17
+ }
18
+ set couponCode(value) {
19
+ this.userSessionOptions.couponCode = value;
20
+ }
21
+ set paymentStatus(value) {
22
+ this.userSessionOptions.paymentStatus = value;
23
+ }
24
+ get sessionOptions() {
25
+ return this.userSessionOptions;
26
+ }
27
+ get purchaseType() {
28
+ return this.settingsService.unsafeUtilsResponse?.purchase?.purchase_type
29
+ ? 'subscription'
30
+ : null;
31
+ }
32
+ constructor(http, eventBuilderService, settingsService) {
33
+ this.http = http;
34
+ this.eventBuilderService = eventBuilderService;
35
+ this.settingsService = settingsService;
36
+ this.apiUrl = 'https://datagather.xsolla.com/paystation-user-sessions';
37
+ this._events$ = new Subject();
38
+ this.userSessionOptions = {
39
+ invoice: null,
40
+ instanceId: null,
41
+ subscriptionRecurrentId: null,
42
+ userMobileOperatorName: null,
43
+ isPayWithSavedMethod: false,
44
+ subscriptionPackageId: null,
45
+ subscriptionProductId: null,
46
+ couponCode: null,
47
+ totalSum: null,
48
+ totalCurrency: null,
49
+ paymentInstanceName: null,
50
+ paymentStatus: null,
51
+ };
52
+ this.sentEvents = new Set();
53
+ }
54
+ init() {
55
+ this.setPid(this.settingsService.unsafeUtilsResponse?.purchase?.payment_system?.id);
56
+ this.onOpenPayStation();
57
+ }
58
+ setPid(pid) {
59
+ if (pid) {
60
+ this.userSessionOptions.instanceId = pid;
61
+ }
62
+ }
63
+ fillUserSession(paymentForm) {
64
+ if (paymentForm.subscriptionRecurrentId) {
65
+ this.userSessionOptions.subscriptionRecurrentId =
66
+ paymentForm.subscriptionRecurrentId;
67
+ }
68
+ const operator = paymentForm.fields.find((field) => field.name === 'operator');
69
+ if (operator) {
70
+ this.userSessionOptions.userMobileOperatorName = operator.value;
71
+ }
72
+ if (paymentForm.pid) {
73
+ this.setPid(paymentForm.pid);
74
+ }
75
+ if (paymentForm.userSession) {
76
+ this.userSessionOptions.invoice = paymentForm.userSession;
77
+ const createInvoiceOptions = {
78
+ eventCategory: eventCategories.withInvoice,
79
+ };
80
+ this.send('create-invoice', userBehaviourEventTypes.manual, createInvoiceOptions);
81
+ if (paymentForm.errors?.length) {
82
+ this.resetInvoice();
83
+ }
84
+ }
85
+ const total = paymentForm?.summary?.finance?.total;
86
+ if (total) {
87
+ this.userSessionOptions.totalSum = total.amount;
88
+ this.userSessionOptions.totalCurrency = total.currency;
89
+ }
90
+ if (paymentForm.title) {
91
+ this.userSessionOptions.paymentInstanceName = paymentForm.title;
92
+ }
93
+ }
94
+ send(action, type, options) {
95
+ if (oneTimeAnalyticsEvents.has(action) && this.sentEvents.has(action)) {
96
+ return;
97
+ }
98
+ const date = new Date();
99
+ const invoice = options?.eventCategory === eventCategories.withInvoice
100
+ ? this.userSessionOptions.invoice
101
+ : null;
102
+ const eventOptions = {
103
+ action,
104
+ type,
105
+ value: options?.value ?? null,
106
+ valueType: options?.valueType ?? null,
107
+ date,
108
+ invoice,
109
+ state: '',
110
+ extraValue: options?.extraValue ?? null,
111
+ purchase_type: options?.purchaseType ?? null,
112
+ instanceId: options?.instanceId ?? null,
113
+ dimension1: options?.dimension1 ?? null,
114
+ dimension2: options?.dimension2 ?? null,
115
+ dimension3: options?.dimension3 ?? null,
116
+ dimension4: options?.dimension4 ?? null,
117
+ dimension5: options?.dimension5 ?? null,
118
+ };
119
+ const sendEvent = () => {
120
+ this.sentEvents.add(action);
121
+ const event = this.eventBuilderService.createEvent(eventOptions, this.userSessionOptions);
122
+ this._events$.next(event);
123
+ const requestBody = JSON.stringify(event);
124
+ if (navigator.sendBeacon) {
125
+ navigator.sendBeacon(this.apiUrl, requestBody);
126
+ }
127
+ else {
128
+ void this.http.post(this.apiUrl, requestBody).toPromise();
129
+ }
130
+ };
131
+ if (options?.syncRequest) {
132
+ sendEvent();
133
+ return;
134
+ }
135
+ setTimeout(() => sendEvent());
136
+ }
137
+ onOpenPayStation() {
138
+ this.send(UserBehaviourEventName.openPaystation, userBehaviourEventTypes.open, {
139
+ value: null,
140
+ purchaseType: this.purchaseType,
141
+ });
142
+ }
143
+ resetInvoice() {
144
+ this.userSessionOptions.invoice = null;
145
+ }
146
+ resetPid() {
147
+ this.userSessionOptions.instanceId = null;
148
+ }
149
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: UserBehaviourAnalyticsService, deps: [{ token: i1.HttpClient }, { token: i2.EventBuilderService }, { token: i3.SettingsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
150
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: UserBehaviourAnalyticsService, providedIn: 'root' }); }
151
+ }
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: UserBehaviourAnalyticsService, decorators: [{
153
+ type: Injectable,
154
+ args: [{
155
+ providedIn: 'root',
156
+ }]
157
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.EventBuilderService }, { type: i3.SettingsService }] });
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1iZWhhdmlvdXItYW5hbHl0aWNzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wYXltZW50LWNsaWVudC1jb3JlL3NyYy9saWIvY29yZS91c2VyLWJlaGF2aW91ci1hbmFseXRpY3MvdXNlci1iZWhhdmlvdXItYW5hbHl0aWNzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFPekYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7QUFTM0UsTUFBTSxPQUFPLDZCQUE2QjtJQUN4QyxJQUFXLG9CQUFvQixDQUFDLEtBQWM7UUFDNUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBVyxxQkFBcUIsQ0FBQyxLQUFhO1FBQzVDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7SUFDeEQsQ0FBQztJQUVELElBQVcsVUFBVSxDQUFDLEtBQWE7UUFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQVcsYUFBYSxDQUFDLEtBQWE7UUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxr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Q0FBQyxJQUFJLEVBQzVCO1lBQ0UsS0FBSyxFQUFFLElBQUk7WUFDWCxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDaEMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDekMsQ0FBQztJQUVPLFFBQVE7UUFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUM1QyxDQUFDOzhHQWhNVSw2QkFBNkI7a0hBQTdCLDZCQUE2QixjQUY1QixNQUFNOzsyRkFFUCw2QkFBNkI7a0JBSHpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHVzZXJCZWhhdmlvdXJFdmVudFR5cGVzIH0gZnJvbSAnLi91c2VyLWJlaGF2aW91ci1ldmVudC91c2VyLWJlaGF2aW91ci1ldmVudC10eXBlcyc7XG5pbXBvcnQgeyBldmVudENhdGVnb3JpZXMgfSBmcm9tICcuL3VzZXItYmVoYXZpb3VyLWV2ZW50L3VzZXItYmVoYXZpb3VyLWV2ZW50LWNhdGVnb3JpZXMnO1xuaW1wb3J0IHtcbiAgU2VuZEV2ZW50TWV0aG9kT3B0aW9uc0ludGVyZmFjZSxcbiAgQ3JlYXRlRXZlbnRNZXRob2RPcHRpb25zSW50ZXJmYWNlLFxufSBmcm9tICcuL3VzZXItYmVoYXZpb3VyLWFuYWx5dGljcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRXZlbnRCdWlsZGVyU2VydmljZSB9IGZyb20gJy4vZXZlbnQtYnVpbGRlci9ldmVudC1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlckJlaGF2aW91ckV2ZW50IH0gZnJvbSAnLi9ldmVudC1idWlsZGVyL3VzZXItYmVoYXZpb3VyLWV2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbnZvaWNlIH0gZnJvbSAnLi9ldmVudC1idWlsZGVyL2ludm9pY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IFVzZXJCZWhhdmlvdXJFdmVudE5hbWUgfSBmcm9tICcuL3VzZXItYmVoYXZpb3VyLWV2ZW50LW5hbWUuZW51bSc7XG5pbXBvcnQgeyBvbmVUaW1lQW5hbHl0aWNzRXZlbnRzIH0gZnJvbSAnLi9vbmUtdGltZS1hbmFseXRpY3MtZXZlbnRzLmNvbnN0JztcbmltcG9ydCB7IFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL3NldHRpbmdzL3NldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmllbGQgfSBmcm9tICcuLi9wYXltZW50L2ZpZWxkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBYcHNSZXNwb25zZSB9IGZyb20gJy4uL3BheW1lbnQveHBzLXJlc3BvbnNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBVc2VyU2Vzc2lvbk9wdGlvbnMgfSBmcm9tICcuL3VzZXItc2Vzc2lvbi1vcHRpb25zJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJCZWhhdmlvdXJBbmFseXRpY3NTZXJ2aWNlIHtcbiAgcHVibGljIHNldCBpc1BheVdpdGhTYXZlZE1ldGhvZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMudXNlclNlc3Npb25PcHRpb25zLmlzUGF5V2l0aFNhdmVkTWV0aG9kID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2V0IHN1YnNjcmlwdGlvblBhY2thZ2VJZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy51c2VyU2Vzc2lvbk9wdGlvbnMuc3Vic2NyaXB0aW9uUGFja2FnZUlkID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGNvdXBvbkNvZGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudXNlclNlc3Npb25PcHRpb25zLmNvdXBvbkNvZGUgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcGF5bWVudFN0YXR1cyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy51c2VyU2Vzc2lvbk9wdGlvbnMucGF5bWVudFN0YXR1cyA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBzZXNzaW9uT3B0aW9ucygpOiBVc2VyU2Vzc2lvbk9wdGlvbnMge1xuICAgIHJldHVybiB0aGlzLnVzZXJTZXNzaW9uT3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHB1cmNoYXNlVHlwZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5nc1NlcnZpY2UudW5zYWZlVXRpbHNSZXNwb25zZT8ucHVyY2hhc2U/LnB1cmNoYXNlX3R5cGVcbiAgICAgID8gJ3N1YnNjcmlwdGlvbidcbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpVXJsOiBzdHJpbmcgPVxuICAgICdodHRwczovL2RhdGFnYXRoZXIueHNvbGxhLmNvbS9wYXlzdGF0aW9uLXVzZXItc2Vzc2lvbnMnO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50cyQgPSBuZXcgU3ViamVjdDxVc2VyQmVoYXZpb3VyRXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB1c2VyU2Vzc2lvbk9wdGlvbnM6IFVzZXJTZXNzaW9uT3B0aW9ucyA9IHtcbiAgICBpbnZvaWNlOiBudWxsLFxuICAgIGluc3RhbmNlSWQ6IG51bGwsXG4gICAgc3Vic2NyaXB0aW9uUmVjdXJyZW50SWQ6IG51bGwsXG4gICAgdXNlck1vYmlsZU9wZXJhdG9yTmFtZTogbnVsbCxcbiAgICBpc1BheVdpdGhTYXZlZE1ldGhvZDogZmFsc2UsXG4gICAgc3Vic2NyaXB0aW9uUGFja2FnZUlkOiBudWxsLFxuICAgIHN1YnNjcmlwdGlvblByb2R1Y3RJZDogbnVsbCxcbiAgICBjb3Vwb25Db2RlOiBudWxsLFxuICAgIHRvdGFsU3VtOiBudWxsLFxuICAgIHRvdGFsQ3VycmVuY3k6IG51bGwsXG4gICAgcGF5bWVudEluc3RhbmNlTmFtZTogbnVsbCxcbiAgICBwYXltZW50U3RhdHVzOiBudWxsLFxuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VudEV2ZW50cyA9IG5ldyBTZXQoKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRCdWlsZGVyU2VydmljZTogRXZlbnRCdWlsZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgaW5pdCgpOiB1bmRlZmluZWQgfCB2b2lkIHtcbiAgICB0aGlzLnNldFBpZChcbiAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnVuc2FmZVV0aWxzUmVzcG9uc2U/LnB1cmNoYXNlPy5wYXltZW50X3N5c3RlbT8uaWRcbiAgICApO1xuICAgIHRoaXMub25PcGVuUGF5U3RhdGlvbigpO1xuICB9XG5cbiAgcHVibGljIHNldFBpZChwaWQ/OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHBpZCkge1xuICAgICAgdGhpcy51c2VyU2Vzc2lvbk9wdGlvbnMuaW5zdGFuY2VJZCA9IHBpZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlsbFVzZXJTZXNzaW9uKHBheW1lbnRGb3JtOiB7XG4gICAgZmllbGRzOiBGaWVsZFtdO1xuICAgIHN1YnNjcmlwdGlvblJlY3VycmVudElkPzogbnVtYmVyO1xuICAgIHVzZXJTZXNzaW9uPzogSW52b2ljZTtcbiAgICBwaWQ6IFhwc1Jlc3BvbnNlWydwaWQnXTtcbiAgICBlcnJvcnM6IFhwc1Jlc3BvbnNlWydlcnJvcnMnXTtcbiAgICBzdW1tYXJ5OiBYcHNSZXNwb25zZVsnc3VtbWFyeSddO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gIH0pOiB2b2lkIHtcbiAgICBpZiAocGF5bWVudEZvcm0uc3Vic2NyaXB0aW9uUmVjdXJyZW50SWQpIHtcbiAgICAgIHRoaXMudXNlclNlc3Npb25PcHRpb25zLnN1YnNjcmlwdGlvblJlY3VycmVudElkID1cbiAgICAgICAgcGF5bWVudEZvcm0uc3Vic2NyaXB0aW9uUmVjdXJyZW50SWQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlcmF0b3I6IEZpZWxkIHwgdW5kZWZpbmVkID0gcGF5bWVudEZvcm0uZmllbGRzLmZpbmQoXG4gICAgICAoZmllbGQ6IEZpZWxkKSA9PiBmaWVsZC5uYW1lID09PSAnb3BlcmF0b3InXG4gICAgKTtcbiAgICBpZiAob3BlcmF0b3IpIHtcbiAgICAgIHRoaXMudXNlclNlc3Npb25PcHRpb25zLnVzZXJNb2JpbGVPcGVyYXRvck5hbWUgPSBvcGVyYXRvci52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAocGF5bWVudEZvcm0ucGlkKSB7XG4gICAgICB0aGlzLnNldFBpZChwYXltZW50Rm9ybS5waWQpO1xuICAgIH1cblxuICAgIGlmIChwYXltZW50Rm9ybS51c2VyU2Vzc2lvbikge1xuICAgICAgdGhpcy51c2VyU2Vzc2lvbk9wdGlvbnMuaW52b2ljZSA9IHBheW1lbnRGb3JtLnVzZXJTZXNzaW9uO1xuICAgICAgY29uc3QgY3JlYXRlSW52b2ljZU9wdGlvbnMgPSB7XG4gICAgICAgIGV2ZW50Q2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcmllcy53aXRoSW52b2ljZSxcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbmQoXG4gICAgICAgICdjcmVhdGUtaW52b2ljZScsXG4gICAgICAgIHVzZXJCZWhhdmlvdXJFdmVudFR5cGVzLm1hbnVhbCxcbiAgICAgICAgY3JlYXRlSW52b2ljZU9wdGlvbnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChwYXltZW50Rm9ybS5lcnJvcnM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLnJlc2V0SW52b2ljZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRvdGFsID0gcGF5bWVudEZvcm0/LnN1bW1hcnk/LmZpbmFuY2U/LnRvdGFsO1xuICAgIGlmICh0b3RhbCkge1xuICAgICAgdGhpcy51c2VyU2Vzc2lvbk9wdGlvbnMudG90YWxTdW0gPSB0b3RhbC5hbW91bnQ7XG4gICAgICB0aGlzLnVzZXJTZXNzaW9uT3B0aW9ucy50b3RhbEN1cnJlbmN5ID0gdG90YWwuY3VycmVuY3k7XG4gICAgfVxuXG4gICAgaWYgKHBheW1lbnRGb3JtLnRpdGxlKSB7XG4gICAgICB0aGlzLnVzZXJTZXNzaW9uT3B0aW9ucy5wYXltZW50SW5zdGFuY2VOYW1lID0gcGF5bWVudEZvcm0udGl0bGU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlbmQoXG4gICAgYWN0aW9uOiBzdHJpbmcsXG4gICAgdHlwZToga2V5b2YgdHlwZW9mIHVzZXJCZWhhdmlvdXJFdmVudFR5cGVzLFxuICAgIG9wdGlvbnM/OiBTZW5kRXZlbnRNZXRob2RPcHRpb25zSW50ZXJmYWNlXG4gICk6IHZvaWQge1xuICAgIGlmIChvbmVUaW1lQW5hbHl0aWNzRXZlbnRzLmhhcyhhY3Rpb24pICYmIHRoaXMuc2VudEV2ZW50cy5oYXMoYWN0aW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGludm9pY2UgPVxuICAgICAgb3B0aW9ucz8uZXZlbnRDYXRlZ29yeSA9PT0gZXZlbnRDYXRlZ29yaWVzLndpdGhJbnZvaWNlXG4gICAgICAgID8gdGhpcy51c2VyU2Vzc2lvbk9wdGlvbnMuaW52b2ljZVxuICAgICAgICA6IG51bGw7XG4gICAgY29uc3QgZXZlbnRPcHRpb25zOiBDcmVhdGVFdmVudE1ldGhvZE9wdGlvbnNJbnRlcmZhY2UgPSB7XG4gICAgICBhY3Rpb24sXG4gICAgICB0eXBlLFxuICAgICAgdmFsdWU6IG9wdGlvbnM/LnZhbHVlID8/IG51bGwsXG4gICAgICB2YWx1ZVR5cGU6IG9wdGlvbnM/LnZhbHVlVHlwZSA/PyBudWxsLFxuICAgICAgZGF0ZSxcbiAgICAgIGludm9pY2UsXG4gICAgICBzdGF0ZTogJycsXG4gICAgICBleHRyYVZhbHVlOiBvcHRpb25zPy5leHRyYVZhbHVlID8/IG51bGwsXG4gICAgICBwdXJjaGFzZV90eXBlOiBvcHRpb25zPy5wdXJjaGFzZVR5cGUgPz8gbnVsbCxcbiAgICAgIGluc3RhbmNlSWQ6IG9wdGlvbnM/Lmluc3RhbmNlSWQgPz8gbnVsbCxcbiAgICAgIGRpbWVuc2lvbjE6IG9wdGlvbnM/LmRpbWVuc2lvbjEgPz8gbnVsbCxcbiAgICAgIGRpbWVuc2lvbjI6IG9wdGlvbnM/LmRpbWVuc2lvbjIgPz8gbnVsbCxcbiAgICAgIGRpbWVuc2lvbjM6IG9wdGlvbnM/LmRpbWVuc2lvbjMgPz8gbnVsbCxcbiAgICAgIGRpbWVuc2lvbjQ6IG9wdGlvbnM/LmRpbWVuc2lvbjQgPz8gbnVsbCxcbiAgICAgIGRpbWVuc2lvbjU6IG9wdGlvbnM/LmRpbWVuc2lvbjUgPz8gbnVsbCxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VuZEV2ZW50ID0gKCk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy5zZW50RXZlbnRzLmFkZChhY3Rpb24pO1xuICAgICAgY29uc3QgZXZlbnQ6IFVzZXJCZWhhdmlvdXJFdmVudCA9IHRoaXMuZXZlbnRCdWlsZGVyU2VydmljZS5jcmVhdGVFdmVudChcbiAgICAgICAgZXZlbnRPcHRpb25zLFxuICAgICAgICB0aGlzLnVzZXJTZXNzaW9uT3B0aW9uc1xuICAgICAgKTtcbiAgICAgIHRoaXMuX2V2ZW50cyQubmV4dChldmVudCk7XG4gICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IEpTT04uc3RyaW5naWZ5KGV2ZW50KTtcbiAgICAgIGlmIChuYXZpZ2F0b3Iuc2VuZEJlYWNvbikge1xuICAgICAgICBuYXZpZ2F0b3Iuc2VuZEJlYWNvbih0aGlzLmFwaVVybCwgcmVxdWVzdEJvZHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm9pZCB0aGlzLmh0dHAucG9zdCh0aGlzLmFwaVVybCwgcmVxdWVzdEJvZHkpLnRvUHJvbWlzZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucz8uc3luY1JlcXVlc3QpIHtcbiAgICAgIHNlbmRFdmVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2VuZEV2ZW50KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk9wZW5QYXlTdGF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc2VuZChcbiAgICAgIFVzZXJCZWhhdmlvdXJFdmVudE5hbWUub3BlblBheXN0YXRpb24sXG4gICAgICB1c2VyQmVoYXZpb3VyRXZlbnRUeXBlcy5vcGVuLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgcHVyY2hhc2VUeXBlOiB0aGlzLnB1cmNoYXNlVHlwZSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEludm9pY2UoKTogdm9pZCB7XG4gICAgdGhpcy51c2VyU2Vzc2lvbk9wdGlvbnMuaW52b2ljZSA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0UGlkKCk6IHZvaWQge1xuICAgIHRoaXMudXNlclNlc3Npb25PcHRpb25zLmluc3RhbmNlSWQgPSBudWxsO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,200 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { map } from 'rxjs/operators';
4
+ import { WsError } from '../exceptions-handling/errors/ws-error.class';
5
+ import { ErrorTags } from '../exceptions-handling/errors/elk-error-types.enum';
6
+ import { WebSocketClientType } from './web-socket-client-type.enum';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../exceptions-handling/elk/elk-logger.service";
9
+ export class CentrifugoWebSocketService {
10
+ static { this.reconnectionTimeoutIncrementFactor = 2; }
11
+ static { this.timeoutsMs = {
12
+ reconnection: 1000,
13
+ reconnectionMaxDeviation: 1000,
14
+ }; }
15
+ constructor(elkLoggerService) {
16
+ this.elkLoggerService = elkLoggerService;
17
+ this.type = WebSocketClientType.centrifugo;
18
+ this.reconnectionTimerId = null;
19
+ this.isConnectionOpen = false;
20
+ this.isConnecting = false;
21
+ this.incomingMessages$ = new Subject();
22
+ this.successfulReconnectionEventsProxy$ = new Subject();
23
+ }
24
+ async open(url, channel) {
25
+ if (url === this.url && channel === this.channel) {
26
+ return;
27
+ }
28
+ try {
29
+ this.url = url;
30
+ this.channel = channel;
31
+ await this.createConnection(url, channel);
32
+ }
33
+ catch (error) {
34
+ // @ts-expect-error error is unknown
35
+ const message = (error?.message || error);
36
+ const unknownError = new WsError(`unknown websocket error: ${message}`, channel);
37
+ this.elkLoggerService.handleError(unknownError);
38
+ }
39
+ }
40
+ close() {
41
+ this.clearReconnectionTimer();
42
+ if (!this.isConnectionOpen) {
43
+ return;
44
+ }
45
+ this.connection.disconnect();
46
+ }
47
+ get messages$() {
48
+ return (this.incomingMessages$
49
+ .asObservable()
50
+ // event don't respect type from argument, it's weird
51
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
52
+ .pipe(map((event) => event.data)));
53
+ }
54
+ subscribeOnSuccessfulReconnection(next) {
55
+ return this.successfulReconnectionEventsProxy$
56
+ .asObservable()
57
+ .subscribe(next);
58
+ }
59
+ clearReconnectionTimer() {
60
+ if (this.reconnectionTimerId) {
61
+ clearTimeout(this.reconnectionTimerId);
62
+ this.reconnectionTimerId = null;
63
+ }
64
+ }
65
+ setFirstReconnectionTimeout() {
66
+ const min = CentrifugoWebSocketService.timeoutsMs.reconnection -
67
+ CentrifugoWebSocketService.timeoutsMs.reconnectionMaxDeviation;
68
+ const max = CentrifugoWebSocketService.timeoutsMs.reconnection +
69
+ CentrifugoWebSocketService.timeoutsMs.reconnectionMaxDeviation;
70
+ this.reconnectionTimeoutMs =
71
+ Math.floor(Math.random() * (max - min + 1)) + min;
72
+ }
73
+ incrementReconnectionTimeout() {
74
+ this.reconnectionTimeoutMs =
75
+ this.reconnectionTimeoutMs *
76
+ CentrifugoWebSocketService.reconnectionTimeoutIncrementFactor;
77
+ }
78
+ async getCentrifugoClient() {
79
+ return import('centrifuge').then((module) => module.Centrifuge);
80
+ }
81
+ async createConnection(url, channel) {
82
+ if (this.isConnectionOpen || this.isConnecting) {
83
+ return;
84
+ }
85
+ // eslint-disable-next-line @typescript-eslint/naming-convention
86
+ const CentrifugeClient = await this.getCentrifugoClient();
87
+ const websocketUrl = url ?? this.url;
88
+ const websocketChannel = channel ?? this.channel;
89
+ this.connection = new CentrifugeClient(websocketUrl, {
90
+ debug: true,
91
+ maxReconnectDelay: 1500,
92
+ maxServerPingDelay: 1000,
93
+ });
94
+ return new Promise((resolve, reject) => {
95
+ this.connection
96
+ .on('connecting', () => {
97
+ this.isConnecting = true;
98
+ })
99
+ .on('connected', () => {
100
+ this.onConnect();
101
+ resolve();
102
+ })
103
+ .on('disconnected', (ctx) => {
104
+ this.onDisconnect(ctx, websocketChannel);
105
+ reject();
106
+ })
107
+ .on('error', (ctx) => {
108
+ const message = `code ${ctx.error.code} - ${ctx.error.message}`;
109
+ this.elkLoggerService.log(`connection error: ${message}`, [ErrorTags.WS], {
110
+ channel: websocketChannel,
111
+ });
112
+ })
113
+ .connect();
114
+ this.subscription = this.connection.newSubscription(websocketChannel, this.getSubscriptionOptions(websocketChannel));
115
+ this.subscription
116
+ .on('subscribed', (ctx) => {
117
+ this.subscriptionPosition = ctx.streamPosition;
118
+ this.prevSubscribedChannel = websocketChannel;
119
+ })
120
+ .on('publication', (ctx) => {
121
+ const message = ctx.data;
122
+ this.elkLoggerService.log(`websocket message received: ${message}`, [ErrorTags.WS], {
123
+ channel: websocketChannel,
124
+ });
125
+ this.incomingMessages$.next(ctx);
126
+ })
127
+ .on('error', (ctx) => {
128
+ const message = `code ${ctx.error.code} - ${ctx.error.message}`;
129
+ this.elkLoggerService.log(`subscription error: ${message}`, [ErrorTags.WS], {
130
+ channel: websocketChannel,
131
+ });
132
+ })
133
+ .subscribe();
134
+ });
135
+ }
136
+ onConnect() {
137
+ clearTimeout(this.openConnectionTimerId);
138
+ this.isConnecting = false;
139
+ this.isConnectionOpen = true;
140
+ }
141
+ onDisconnect(ctx, websocketChannel) {
142
+ this.isConnecting = false;
143
+ this.isConnectionOpen = false;
144
+ /* If connection error, cause any connection error isn't 0 */
145
+ if (ctx.code !== 0) {
146
+ const message = `code ${ctx.code} - ${ctx.reason}`;
147
+ this.elkLoggerService.log(`disconnected error: ${message}`, [ErrorTags.WS], {
148
+ channel: websocketChannel,
149
+ });
150
+ (async () => {
151
+ await this.waitWhileNotReconnect();
152
+ })();
153
+ }
154
+ }
155
+ async reconnect() {
156
+ this.clearReconnectionTimer();
157
+ return new Promise((resolve) => {
158
+ this.reconnectionTimerId = setTimeout(() => {
159
+ this.createConnection()
160
+ .then(() => resolve(true))
161
+ .catch(() => resolve(false));
162
+ this.incrementReconnectionTimeout();
163
+ }, this.reconnectionTimeoutMs);
164
+ });
165
+ }
166
+ async waitWhileNotReconnect() {
167
+ this.clearReconnectionTimer();
168
+ this.setFirstReconnectionTimeout();
169
+ let isConnected = false;
170
+ const beforeTimer = performance.now();
171
+ while (!isConnected) {
172
+ isConnected = await this.reconnect();
173
+ }
174
+ const afterTimer = performance.now();
175
+ const timerDuration = afterTimer - beforeTimer;
176
+ this.elkLoggerService.log(`fallback to reconnection timer: duration ${timerDuration}ms`, [ErrorTags.WS], {
177
+ channel: this.channel,
178
+ });
179
+ this.successfulReconnectionEventsProxy$.next();
180
+ }
181
+ getSubscriptionOptions(websocketChannel) {
182
+ const options = {
183
+ recoverable: true,
184
+ };
185
+ if (websocketChannel === this.prevSubscribedChannel &&
186
+ this.subscriptionPosition) {
187
+ options.since = this.subscriptionPosition;
188
+ }
189
+ return options;
190
+ }
191
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CentrifugoWebSocketService, deps: [{ token: i1.ElkLoggerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
192
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CentrifugoWebSocketService, providedIn: 'root' }); }
193
+ }
194
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CentrifugoWebSocketService, decorators: [{
195
+ type: Injectable,
196
+ args: [{
197
+ providedIn: 'root',
198
+ }]
199
+ }], ctorParameters: () => [{ type: i1.ElkLoggerService }] });
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VudHJpZnVnby13ZWItc29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wYXltZW50LWNsaWVudC1jb3JlL3NyYy9saWIvY29yZS93ZWItc29ja2V0L2NlbnRyaWZ1Z28td2ViLXNvY2tldC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBU3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7OztBQUtwRSxNQUFNLE9BQU8sMEJBQTBCO2FBQ2QsdUNBQWtDLEdBQUcsQ0FBQyxBQUFKLENBQUs7YUFJdEMsZUFBVSxHQUFHO1FBQ25DLFlBQVksRUFBRSxJQUFJO1FBQ2xCLHdCQUF3QixFQUFFLElBQUk7S0FDL0IsQUFIaUMsQ0FHaEM7SUFzQkYsWUFBb0MsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUEzQi9ELFNBQUksR0FBRyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7UUFRckMsd0JBQW1CLEdBQXlDLElBQUksQ0FBQztRQU9qRSxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFLWixzQkFBaUIsR0FDaEMsSUFBSSxPQUFPLEVBQXNCLENBQUM7UUFFbkIsdUNBQWtDLEdBQ2pELElBQUksT0FBTyxFQUFRLENBQUM7SUFFbUQsQ0FBQztJQUVuRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQVcsRUFB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Q0FBQyxvQkFBb0IsRUFDekIsQ0FBQztZQUNELE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1FBQzVDLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOzhHQXJSVSwwQkFBMEI7a0hBQTFCLDBCQUEwQixjQUZ6QixNQUFNOzsyRkFFUCwwQkFBMEI7a0JBSHRDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgdHlwZSB7XG4gIENlbnRyaWZ1Z2UsXG4gIERpc2Nvbm5lY3RlZENvbnRleHQsXG4gIFB1YmxpY2F0aW9uQ29udGV4dCxcbiAgU3Vic2NyaXB0aW9uIGFzIENlbnRyaWZ1Z2VTdWJzY3JpcHRpb24sXG59IGZyb20gJ2NlbnRyaWZ1Z2UnO1xuaW1wb3J0IHsgU3RyZWFtUG9zaXRpb24sIFN1YnNjcmlwdGlvbk9wdGlvbnMgfSBmcm9tICdjZW50cmlmdWdlL2J1aWxkL3R5cGVzJztcbmltcG9ydCB7IEVsa0xvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi9leGNlcHRpb25zLWhhbmRsaW5nL2Vsay9lbGstbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgV3NFcnJvciB9IGZyb20gJy4uL2V4Y2VwdGlvbnMtaGFuZGxpbmcvZXJyb3JzL3dzLWVycm9yLmNsYXNzJztcbmltcG9ydCB7IEVycm9yVGFncyB9IGZyb20gJy4uL2V4Y2VwdGlvbnMtaGFuZGxpbmcvZXJyb3JzL2Vsay1lcnJvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IFdlYlNvY2tldENsaWVudCB9IGZyb20gJy4vd2ViLXNvY2tldC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgV2ViU29ja2V0Q2xpZW50VHlwZSB9IGZyb20gJy4vd2ViLXNvY2tldC1jbGllbnQtdHlwZS5lbnVtJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENlbnRyaWZ1Z29XZWJTb2NrZXRTZXJ2aWNlIGltcGxlbWVudHMgV2ViU29ja2V0Q2xpZW50IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSByZWNvbm5lY3Rpb25UaW1lb3V0SW5jcmVtZW50RmFjdG9yID0gMjtcblxuICBwdWJsaWMgdHlwZSA9IFdlYlNvY2tldENsaWVudFR5cGUuY2VudHJpZnVnbztcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSB0aW1lb3V0c01zID0ge1xuICAgIHJlY29ubmVjdGlvbjogMTAwMCxcbiAgICByZWNvbm5lY3Rpb25NYXhEZXZpYXRpb246IDEwMDAsXG4gIH07XG5cbiAgcHJpdmF0ZSByZWNvbm5lY3Rpb25UaW1lb3V0TXMhOiBudW1iZXI7XG4gIHByaXZhdGUgcmVjb25uZWN0aW9uVGltZXJJZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHJlYWRvbmx5IG9wZW5Db25uZWN0aW9uVGltZXJJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgY29ubmVjdGlvbiE6IENlbnRyaWZ1Z2U7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uITogQ2VudHJpZnVnZVN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25Qb3NpdGlvbj86IFN0cmVhbVBvc2l0aW9uO1xuICBwcml2YXRlIGlzQ29ubmVjdGlvbk9wZW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc0Nvbm5lY3RpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSB1cmwhOiBzdHJpbmc7XG4gIHByaXZhdGUgY2hhbm5lbCE6IHN0cmluZztcbiAgcHJpdmF0ZSBwcmV2U3Vic2NyaWJlZENoYW5uZWw/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpbmNvbWluZ01lc3NhZ2VzJDogU3ViamVjdDxQdWJsaWNhdGlvbkNvbnRleHQ+ID1cbiAgICBuZXcgU3ViamVjdDxQdWJsaWNhdGlvbkNvbnRleHQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdWNjZXNzZnVsUmVjb25uZWN0aW9uRXZlbnRzUHJveHkkOiBTdWJqZWN0PHZvaWQ+ID1cbiAgICBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGVsa0xvZ2dlclNlcnZpY2U6IEVsa0xvZ2dlclNlcnZpY2UpIHt9XG5cbiAgcHVibGljIGFzeW5jIG9wZW4odXJsOiBzdHJpbmcsIGNoYW5uZWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh1cmwgPT09IHRoaXMudXJsICYmIGNoYW5uZWwgPT09IHRoaXMuY2hhbm5lbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnVybCA9IHVybDtcbiAgICAgIHRoaXMuY2hhbm5lbCA9IGNoYW5uZWw7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZUNvbm5lY3Rpb24odXJsLCBjaGFubmVsKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBlcnJvciBpcyB1bmtub3duXG4gICAgICBjb25zdCBtZXNzYWdlID0gKGVycm9yPy5tZXNzYWdlIHx8IGVycm9yKSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCB1bmtub3duRXJyb3IgPSBuZXcgV3NFcnJvcihcbiAgICAgICAgYHVua25vd24gd2Vic29ja2V0IGVycm9yOiAke21lc3NhZ2V9YCxcbiAgICAgICAgY2hhbm5lbFxuICAgICAgKTtcblxuICAgICAgdGhpcy5lbGtMb2dnZXJTZXJ2aWNlLmhhbmRsZUVycm9yKHVua25vd25FcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJSZWNvbm5lY3Rpb25UaW1lcigpO1xuXG4gICAgaWYgKCF0aGlzLmlzQ29ubmVjdGlvbk9wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24uZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBtZXNzYWdlcyQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pbmNvbWluZ01lc3NhZ2VzJFxuICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgLy8gZXZlbnQgZG9uJ3QgcmVzcGVjdCB0eXBlIGZyb20gYXJndW1lbnQsIGl0J3Mgd2VpcmRcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIC5waXBlKG1hcCgoZXZlbnQpID0+IGV2ZW50LmRhdGEpKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlT25TdWNjZXNzZnVsUmVjb25uZWN0aW9uKG5leHQ/OiAoKSA9PiB2b2lkKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5zdWNjZXNzZnVsUmVjb25uZWN0aW9uRXZlbnRzUHJveHkkXG4gICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgIC5zdWJzY3JpYmUobmV4dCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyUmVjb25uZWN0aW9uVGltZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb25uZWN0aW9uVGltZXJJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVjb25uZWN0aW9uVGltZXJJZCk7XG4gICAgICB0aGlzLnJlY29ubmVjdGlvblRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Rmlyc3RSZWNvbm5lY3Rpb25UaW1lb3V0KCk6IHZvaWQge1xuICAgIGNvbnN0IG1pbiA9XG4gICAgICBDZW50cmlmdWdvV2ViU29ja2V0U2VydmljZS50aW1lb3V0c01zLnJlY29ubmVjdGlvbiAtXG4gICAgICBDZW50cmlmdWdvV2ViU29ja2V0U2VydmljZS50aW1lb3V0c01zLnJlY29ubmVjdGlvbk1heERldmlhdGlvbjtcbiAgICBjb25zdCBtYXggPVxuICAgICAgQ2VudHJpZnVnb1dlYlNvY2tldFNlcnZpY2UudGltZW91dHNNcy5yZWNvbm5lY3Rpb24gK1xuICAgICAgQ2VudHJpZnVnb1dlYlNvY2tldFNlcnZpY2UudGltZW91dHNNcy5yZWNvbm5lY3Rpb25NYXhEZXZpYXRpb247XG4gICAgdGhpcy5yZWNvbm5lY3Rpb25UaW1lb3V0TXMgPVxuICAgICAgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbjtcbiAgfVxuXG4gIHByaXZhdGUgaW5jcmVtZW50UmVjb25uZWN0aW9uVGltZW91dCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29ubmVjdGlvblRpbWVvdXRNcyA9XG4gICAgICB0aGlzLnJlY29ubmVjdGlvblRpbWVvdXRNcyAqXG4gICAgICBDZW50cmlmdWdvV2ViU29ja2V0U2VydmljZS5yZWNvbm5lY3Rpb25UaW1lb3V0SW5jcmVtZW50RmFjdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRDZW50cmlmdWdvQ2xpZW50KCk6IFByb21pc2U8dHlwZW9mIENlbnRyaWZ1Z2U+IHtcbiAgICByZXR1cm4gaW1wb3J0KCdjZW50cmlmdWdlJykudGhlbigobW9kdWxlKSA9PiBtb2R1bGUuQ2VudHJpZnVnZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUNvbm5lY3Rpb24oXG4gICAgdXJsPzogc3RyaW5nLFxuICAgIGNoYW5uZWw/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNDb25uZWN0aW9uT3BlbiB8fCB0aGlzLmlzQ29ubmVjdGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICBjb25zdCBDZW50cmlmdWdlQ2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDZW50cmlmdWdvQ2xpZW50KCk7XG5cbiAgICBjb25zdCB3ZWJzb2NrZXRVcmwgPSB1cmwgPz8gdGhpcy51cmw7XG4gICAgY29uc3Qgd2Vic29ja2V0Q2hhbm5lbCA9IGNoYW5uZWwgPz8gdGhpcy5jaGFubmVsO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uID0gbmV3IENlbnRyaWZ1Z2VDbGllbnQod2Vic29ja2V0VXJsLCB7XG4gICAgICBkZWJ1ZzogdHJ1ZSxcbiAgICAgIG1heFJlY29ubmVjdERlbGF5OiAxNTAwLFxuICAgICAgbWF4U2VydmVyUGluZ0RlbGF5OiAxMDAwLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdGlvblxuICAgICAgICAub24oJ2Nvbm5lY3RpbmcnLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0Nvbm5lY3RpbmcgPSB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAub24oJ2Nvbm5lY3RlZCcsICgpID0+IHtcbiAgICAgICAgICB0aGlzLm9uQ29ubmVjdCgpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKCdkaXNjb25uZWN0ZWQnLCAoY3R4KSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkRpc2Nvbm5lY3QoY3R4LCB3ZWJzb2NrZXRDaGFubmVsKTtcbiAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKCdlcnJvcicsIChjdHgpID0+IHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYGNvZGUgJHtjdHguZXJyb3IuY29kZX0gLSAke2N0eC5lcnJvci5tZXNzYWdlfWA7XG5cbiAgICAgICAgICB0aGlzLmVsa0xvZ2dlclNlcnZpY2UubG9nKFxuICAgICAgICAgICAgYGNvbm5lY3Rpb24gZXJyb3I6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgW0Vycm9yVGFncy5XU10sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNoYW5uZWw6IHdlYnNvY2tldENoYW5uZWwsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNvbm5lY3QoKTtcblxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNvbm5lY3Rpb24ubmV3U3Vic2NyaXB0aW9uKFxuICAgICAgICB3ZWJzb2NrZXRDaGFubmVsLFxuICAgICAgICB0aGlzLmdldFN1YnNjcmlwdGlvbk9wdGlvbnMod2Vic29ja2V0Q2hhbm5lbClcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uXG4gICAgICAgIC5vbignc3Vic2NyaWJlZCcsIChjdHgpID0+IHtcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvblBvc2l0aW9uID0gY3R4LnN0cmVhbVBvc2l0aW9uO1xuICAgICAgICAgIHRoaXMucHJldlN1YnNjcmliZWRDaGFubmVsID0gd2Vic29ja2V0Q2hhbm5lbDtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKCdwdWJsaWNhdGlvbicsIChjdHgpID0+IHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gY3R4LmRhdGEgYXMgc3RyaW5nO1xuXG4gICAgICAgICAgdGhpcy5lbGtMb2dnZXJTZXJ2aWNlLmxvZyhcbiAgICAgICAgICAgIGB3ZWJzb2NrZXQgbWVzc2FnZSByZWNlaXZlZDogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBbRXJyb3JUYWdzLldTXSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2hhbm5lbDogd2Vic29ja2V0Q2hhbm5lbCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5pbmNvbWluZ01lc3NhZ2VzJC5uZXh0KGN0eCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbignZXJyb3InLCAoY3R4KSA9PiB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBjb2RlICR7Y3R4LmVycm9yLmNvZGV9IC0gJHtjdHguZXJyb3IubWVzc2FnZX1gO1xuXG4gICAgICAgICAgdGhpcy5lbGtMb2dnZXJTZXJ2aWNlLmxvZyhcbiAgICAgICAgICAgIGBzdWJzY3JpcHRpb24gZXJyb3I6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgW0Vycm9yVGFncy5XU10sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNoYW5uZWw6IHdlYnNvY2tldENoYW5uZWwsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNvbm5lY3QoKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMub3BlbkNvbm5lY3Rpb25UaW1lcklkKTtcbiAgICB0aGlzLmlzQ29ubmVjdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuaXNDb25uZWN0aW9uT3BlbiA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIG9uRGlzY29ubmVjdChcbiAgICBjdHg6IERpc2Nvbm5lY3RlZENvbnRleHQsXG4gICAgd2Vic29ja2V0Q2hhbm5lbDogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIHRoaXMuaXNDb25uZWN0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5pc0Nvbm5lY3Rpb25PcGVuID0gZmFsc2U7XG5cbiAgICAvKiBJZiBjb25uZWN0aW9uIGVycm9yLCBjYXVzZSBhbnkgY29ubmVjdGlvbiBlcnJvciBpc24ndCAwICovXG4gICAgaWYgKGN0eC5jb2RlICE9PSAwKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYGNvZGUgJHtjdHguY29kZX0gLSAke2N0eC5yZWFzb259YDtcblxuICAgICAgdGhpcy5lbGtMb2dnZXJTZXJ2aWNlLmxvZyhcbiAgICAgICAgYGRpc2Nvbm5lY3RlZCBlcnJvcjogJHttZXNzYWdlfWAsXG4gICAgICAgIFtFcnJvclRhZ3MuV1NdLFxuICAgICAgICB7XG4gICAgICAgICAgY2hhbm5lbDogd2Vic29ja2V0Q2hhbm5lbCxcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0V2hpbGVOb3RSZWNvbm5lY3QoKTtcbiAgICAgIH0pKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWNvbm5lY3QoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5jbGVhclJlY29ubmVjdGlvblRpbWVyKCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMucmVjb25uZWN0aW9uVGltZXJJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNyZWF0ZUNvbm5lY3Rpb24oKVxuICAgICAgICAgIC50aGVuKCgpID0+IHJlc29sdmUodHJ1ZSkpXG4gICAgICAgICAgLmNhdGNoKCgpID0+IHJlc29sdmUoZmFsc2UpKTtcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRSZWNvbm5lY3Rpb25UaW1lb3V0KCk7XG4gICAgICB9LCB0aGlzLnJlY29ubmVjdGlvblRpbWVvdXRNcyk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdhaXRXaGlsZU5vdFJlY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNsZWFyUmVjb25uZWN0aW9uVGltZXIoKTtcbiAgICB0aGlzLnNldEZpcnN0UmVjb25uZWN0aW9uVGltZW91dCgpO1xuXG4gICAgbGV0IGlzQ29ubmVjdGVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBiZWZvcmVUaW1lciA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gICAgd2hpbGUgKCFpc0Nvbm5lY3RlZCkge1xuICAgICAgaXNDb25uZWN0ZWQgPSBhd2FpdCB0aGlzLnJlY29ubmVjdCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGFmdGVyVGltZXIgPSBwZXJmb3JtYW5jZS5ub3coKTtcblxuICAgIGNvbnN0IHRpbWVyRHVyYXRpb24gPSBhZnRlclRpbWVyIC0gYmVmb3JlVGltZXI7XG5cbiAgICB0aGlzLmVsa0xvZ2dlclNlcnZpY2UubG9nKFxuICAgICAgYGZhbGxiYWNrIHRvIHJlY29ubmVjdGlvbiB0aW1lcjogZHVyYXRpb24gJHt0aW1lckR1cmF0aW9ufW1zYCxcbiAgICAgIFtFcnJvclRhZ3MuV1NdLFxuICAgICAge1xuICAgICAgICBjaGFubmVsOiB0aGlzLmNoYW5uZWwsXG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuc3VjY2Vzc2Z1bFJlY29ubmVjdGlvbkV2ZW50c1Byb3h5JC5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGdldFN1YnNjcmlwdGlvbk9wdGlvbnMoXG4gICAgd2Vic29ja2V0Q2hhbm5lbDogc3RyaW5nXG4gICk6IFBhcnRpYWw8U3Vic2NyaXB0aW9uT3B0aW9ucz4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IFBhcnRpYWw8U3Vic2NyaXB0aW9uT3B0aW9ucz4gPSB7XG4gICAgICByZWNvdmVyYWJsZTogdHJ1ZSxcbiAgICB9O1xuXG4gICAgaWYgKFxuICAgICAgd2Vic29ja2V0Q2hhbm5lbCA9PT0gdGhpcy5wcmV2U3Vic2NyaWJlZENoYW5uZWwgJiZcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uUG9zaXRpb25cbiAgICApIHtcbiAgICAgIG9wdGlvbnMuc2luY2UgPSB0aGlzLnN1YnNjcmlwdGlvblBvc2l0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG59XG4iXX0=