monkey-front-core 0.0.606 → 21.0.1

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 (399) hide show
  1. package/README.md +3 -4
  2. package/fesm2022/monkey-front-core.mjs +5726 -0
  3. package/fesm2022/monkey-front-core.mjs.map +1 -0
  4. package/monkey-front-core-21.0.1.tgz +0 -0
  5. package/package.json +26 -39
  6. package/types/monkey-front-core.d.ts +1763 -0
  7. package/esm2020/lib/components/alerts/alerts.component.mjs +0 -45
  8. package/esm2020/lib/components/alerts/alerts.module.mjs +0 -21
  9. package/esm2020/lib/components/alerts/index.mjs +0 -3
  10. package/esm2020/lib/components/closed-to-maintenance/closed-to-maintenance.component.mjs +0 -29
  11. package/esm2020/lib/components/closed-to-maintenance/closed-to-maintenance.module.mjs +0 -43
  12. package/esm2020/lib/components/closed-to-maintenance/index.mjs +0 -3
  13. package/esm2020/lib/components/currency-config/currency-config.component.mjs +0 -39
  14. package/esm2020/lib/components/currency-config/currency-config.module.mjs +0 -39
  15. package/esm2020/lib/components/currency-config/index.mjs +0 -3
  16. package/esm2020/lib/components/index.mjs +0 -6
  17. package/esm2020/lib/components/progress-bar/index.mjs +0 -4
  18. package/esm2020/lib/components/progress-bar/progress-bar.component.mjs +0 -23
  19. package/esm2020/lib/components/progress-bar/progress-bar.module.mjs +0 -18
  20. package/esm2020/lib/components/progress-bar/progress-bar.service.mjs +0 -50
  21. package/esm2020/lib/components/version-changed/index.mjs +0 -3
  22. package/esm2020/lib/components/version-changed/version-changed.component.mjs +0 -24
  23. package/esm2020/lib/components/version-changed/version-changed.module.mjs +0 -39
  24. package/esm2020/lib/core/decorators/index.mjs +0 -5
  25. package/esm2020/lib/core/decorators/monkeyecx-charts-decorators.mjs +0 -40
  26. package/esm2020/lib/core/decorators/monkeyecx-decorators.mjs +0 -111
  27. package/esm2020/lib/core/decorators/monkeyecx-download-decorators.mjs +0 -26
  28. package/esm2020/lib/core/decorators/monkeyecx-upload-decorators.mjs +0 -26
  29. package/esm2020/lib/core/directives/index.mjs +0 -14
  30. package/esm2020/lib/core/directives/monkeyecx-directives-module.mjs +0 -78
  31. package/esm2020/lib/core/directives/monkeyecx-drag-drop.mjs +0 -57
  32. package/esm2020/lib/core/directives/monkeyecx-feature-by-program-directive.mjs +0 -54
  33. package/esm2020/lib/core/directives/monkeyecx-feature-directive.mjs +0 -68
  34. package/esm2020/lib/core/directives/monkeyecx-format-currency.mjs +0 -44
  35. package/esm2020/lib/core/directives/monkeyecx-format-upper.mjs +0 -67
  36. package/esm2020/lib/core/directives/monkeyecx-loading.mjs +0 -48
  37. package/esm2020/lib/core/directives/monkeyecx-only-alpha-numeric-directive.mjs +0 -28
  38. package/esm2020/lib/core/directives/monkeyecx-only-number-directive.mjs +0 -28
  39. package/esm2020/lib/core/directives/monkeyecx-popover-options.directive.mjs +0 -39
  40. package/esm2020/lib/core/directives/monkeyecx-popover.directive.mjs +0 -212
  41. package/esm2020/lib/core/directives/monkeyecx-security-directive.mjs +0 -75
  42. package/esm2020/lib/core/directives/monkeyecx-tooltip-directive.mjs +0 -123
  43. package/esm2020/lib/core/index.mjs +0 -11
  44. package/esm2020/lib/core/injectors/index.mjs +0 -8
  45. package/esm2020/lib/core/interceptors/index.mjs +0 -6
  46. package/esm2020/lib/core/interceptors/monkeyecx-http-config-error.interceptor.mjs +0 -49
  47. package/esm2020/lib/core/interceptors/monkeyecx-http-config-header.interceptor.mjs +0 -59
  48. package/esm2020/lib/core/interceptors/monkeyecx-http-config-interceptor.module.mjs +0 -47
  49. package/esm2020/lib/core/interceptors/monkeyecx-http-config-loading-in-progress.interceptor.mjs +0 -43
  50. package/esm2020/lib/core/interceptors/monkeyecx-http-config-queue.interceptor.mjs +0 -37
  51. package/esm2020/lib/core/interfaces/index.mjs +0 -37
  52. package/esm2020/lib/core/interfaces/monkeyecx-auth-credentials.mjs +0 -2
  53. package/esm2020/lib/core/interfaces/monkeyecx-company-pendencies.mjs +0 -2
  54. package/esm2020/lib/core/interfaces/monkeyecx-company.mjs +0 -2
  55. package/esm2020/lib/core/interfaces/monkeyecx-config-bootstrap.mjs +0 -2
  56. package/esm2020/lib/core/interfaces/monkeyecx-config.mjs +0 -2
  57. package/esm2020/lib/core/interfaces/monkeyecx-country-security.mjs +0 -2
  58. package/esm2020/lib/core/interfaces/monkeyecx-embedded.mjs +0 -2
  59. package/esm2020/lib/core/interfaces/monkeyecx-error-response.mjs +0 -2
  60. package/esm2020/lib/core/interfaces/monkeyecx-filter.mjs +0 -2
  61. package/esm2020/lib/core/interfaces/monkeyecx-group.mjs +0 -2
  62. package/esm2020/lib/core/interfaces/monkeyecx-handled-error-response.mjs +0 -2
  63. package/esm2020/lib/core/interfaces/monkeyecx-header-credentials.mjs +0 -2
  64. package/esm2020/lib/core/interfaces/monkeyecx-intercom-options.mjs +0 -2
  65. package/esm2020/lib/core/interfaces/monkeyecx-interface.mjs +0 -2
  66. package/esm2020/lib/core/interfaces/monkeyecx-me-credentials.mjs +0 -2
  67. package/esm2020/lib/core/interfaces/monkeyecx-navigation.mjs +0 -2
  68. package/esm2020/lib/core/interfaces/monkeyecx-pagination.mjs +0 -2
  69. package/esm2020/lib/core/interfaces/monkeyecx-program.mjs +0 -2
  70. package/esm2020/lib/core/interfaces/monkeyecx-releases.mjs +0 -2
  71. package/esm2020/lib/core/interfaces/monkeyecx-request-in-progress.mjs +0 -2
  72. package/esm2020/lib/core/interfaces/monkeyecx-request-paged.mjs +0 -2
  73. package/esm2020/lib/core/interfaces/monkeyecx-resolver.mjs +0 -2
  74. package/esm2020/lib/core/interfaces/monkeyecx-response-links.mjs +0 -2
  75. package/esm2020/lib/core/interfaces/monkeyecx-response-paged.mjs +0 -2
  76. package/esm2020/lib/core/interfaces/monkeyecx-saved-state.mjs +0 -2
  77. package/esm2020/lib/core/interfaces/monkeyecx-scroll-options.mjs +0 -2
  78. package/esm2020/lib/core/interfaces/monkeyecx-service-credentials.mjs +0 -2
  79. package/esm2020/lib/core/interfaces/monkeyecx-storage.mjs +0 -2
  80. package/esm2020/lib/core/interfaces/monkeyecx-store.mjs +0 -2
  81. package/esm2020/lib/core/interfaces/monkeyecx-support-options.mjs +0 -2
  82. package/esm2020/lib/core/interfaces/monkeyecx-token-credentials.mjs +0 -2
  83. package/esm2020/lib/core/interfaces/monkeyecx-translate-options.mjs +0 -2
  84. package/esm2020/lib/core/interfaces/request-download/index.mjs +0 -4
  85. package/esm2020/lib/core/interfaces/request-download/monkeyecx-request-download.mjs +0 -2
  86. package/esm2020/lib/core/interfaces/request-download/monkeyecx-request-downloaded.mjs +0 -2
  87. package/esm2020/lib/core/interfaces/request-download/monkeyecx-request-item-download.mjs +0 -2
  88. package/esm2020/lib/core/interfaces/request-queue/index.mjs +0 -4
  89. package/esm2020/lib/core/interfaces/request-queue/monkeyecx-request-item-queue.mjs +0 -2
  90. package/esm2020/lib/core/interfaces/request-queue/monkeyecx-request-progress-queue.mjs +0 -2
  91. package/esm2020/lib/core/interfaces/request-queue/monkeyecx-request-queue.mjs +0 -2
  92. package/esm2020/lib/core/interfaces/request-upload/index.mjs +0 -3
  93. package/esm2020/lib/core/interfaces/request-upload/monkeyecx-request-item-upload.mjs +0 -2
  94. package/esm2020/lib/core/interfaces/request-upload/monkeyecx-request-upload.mjs +0 -2
  95. package/esm2020/lib/core/interfaces/schedules/index.mjs +0 -2
  96. package/esm2020/lib/core/interfaces/schedules/monkeyecx-request-schedule.mjs +0 -2
  97. package/esm2020/lib/core/model/index.mjs +0 -3
  98. package/esm2020/lib/core/model/monkeyecx-links.model.mjs +0 -8
  99. package/esm2020/lib/core/model/monkeyecx-model.mjs +0 -26
  100. package/esm2020/lib/core/pipes/index.mjs +0 -24
  101. package/esm2020/lib/core/pipes/monkeyecx-blob-secure.mjs +0 -26
  102. package/esm2020/lib/core/pipes/monkeyecx-currency-code.mjs +0 -30
  103. package/esm2020/lib/core/pipes/monkeyecx-display-first-name.mjs +0 -19
  104. package/esm2020/lib/core/pipes/monkeyecx-display-initials.mjs +0 -21
  105. package/esm2020/lib/core/pipes/monkeyecx-display-support-phone.mjs +0 -33
  106. package/esm2020/lib/core/pipes/monkeyecx-format-address.mjs +0 -20
  107. package/esm2020/lib/core/pipes/monkeyecx-format-beautify-json.mjs +0 -38
  108. package/esm2020/lib/core/pipes/monkeyecx-format-currency.mjs +0 -48
  109. package/esm2020/lib/core/pipes/monkeyecx-format-date-group.mjs +0 -45
  110. package/esm2020/lib/core/pipes/monkeyecx-format-date-timelapse.mjs +0 -32
  111. package/esm2020/lib/core/pipes/monkeyecx-format-date-unix-timelapse.mjs +0 -36
  112. package/esm2020/lib/core/pipes/monkeyecx-format-date.mjs +0 -30
  113. package/esm2020/lib/core/pipes/monkeyecx-format-document.mjs +0 -20
  114. package/esm2020/lib/core/pipes/monkeyecx-format-number.mjs +0 -20
  115. package/esm2020/lib/core/pipes/monkeyecx-format-phone.mjs +0 -42
  116. package/esm2020/lib/core/pipes/monkeyecx-format-size.mjs +0 -20
  117. package/esm2020/lib/core/pipes/monkeyecx-format-tax.mjs +0 -23
  118. package/esm2020/lib/core/pipes/monkeyecx-format-type-document.mjs +0 -19
  119. package/esm2020/lib/core/pipes/monkeyecx-format-value.mjs +0 -19
  120. package/esm2020/lib/core/pipes/monkeyecx-format-zipcode.mjs +0 -19
  121. package/esm2020/lib/core/pipes/monkeyecx-pipes.module.mjs +0 -127
  122. package/esm2020/lib/core/pipes/monkeyecx-text-truncate.mjs +0 -23
  123. package/esm2020/lib/core/pipes/monkeyecx-truncate-qtd.mjs +0 -16
  124. package/esm2020/lib/core/services/alerts/index.mjs +0 -2
  125. package/esm2020/lib/core/services/alerts/monkeyecx-alerts.service.mjs +0 -88
  126. package/esm2020/lib/core/services/auth/index.mjs +0 -6
  127. package/esm2020/lib/core/services/auth/monkeyecx-auth-guard-company.service.mjs +0 -28
  128. package/esm2020/lib/core/services/auth/monkeyecx-auth-guard-login.service.mjs +0 -27
  129. package/esm2020/lib/core/services/auth/monkeyecx-auth-guard-role.service.mjs +0 -77
  130. package/esm2020/lib/core/services/auth/monkeyecx-auth-guard.service.mjs +0 -26
  131. package/esm2020/lib/core/services/auth/monkeyecx-authentication.service.mjs +0 -79
  132. package/esm2020/lib/core/services/commons/index.mjs +0 -4
  133. package/esm2020/lib/core/services/commons/monkeyecx-commons-resolve-base.service.mjs +0 -109
  134. package/esm2020/lib/core/services/commons/monkeyecx-commons-resolve.service.mjs +0 -127
  135. package/esm2020/lib/core/services/commons/monkeyecx-commons.service.mjs +0 -362
  136. package/esm2020/lib/core/services/config/monkeyecx-alerts-config.service.mjs +0 -43
  137. package/esm2020/lib/core/services/config/monkeyecx-config.module.mjs +0 -28
  138. package/esm2020/lib/core/services/config/monkeyecx-config.service.mjs +0 -107
  139. package/esm2020/lib/core/services/config/monkeyecx-currency-config.service.mjs +0 -84
  140. package/esm2020/lib/core/services/config/monkeyecx-error-config.service.mjs +0 -85
  141. package/esm2020/lib/core/services/config/monkeyecx-feature-toggle.service.mjs +0 -77
  142. package/esm2020/lib/core/services/config/monkeyecx-gtm-config.service.mjs +0 -47
  143. package/esm2020/lib/core/services/config/monkeyecx-i18n-config.service.mjs +0 -162
  144. package/esm2020/lib/core/services/config/monkeyecx-logs-config.service.mjs +0 -83
  145. package/esm2020/lib/core/services/config/monkeyecx-maintenance-config.service.mjs +0 -37
  146. package/esm2020/lib/core/services/config/monkeyecx-security-console-config.service.mjs +0 -48
  147. package/esm2020/lib/core/services/config/monkeyecx-service-worker-config.service.mjs +0 -55
  148. package/esm2020/lib/core/services/error/index.mjs +0 -5
  149. package/esm2020/lib/core/services/error/monkeyecx-error-handling.module.mjs +0 -27
  150. package/esm2020/lib/core/services/error/monkeyecx-error-handling.service.mjs +0 -37
  151. package/esm2020/lib/core/services/error/monkeyecx-http-error-handling.service.mjs +0 -149
  152. package/esm2020/lib/core/services/error/monkeyecx-others-errors-handling.service.mjs +0 -49
  153. package/esm2020/lib/core/services/index.mjs +0 -27
  154. package/esm2020/lib/core/services/l/index.mjs +0 -2
  155. package/esm2020/lib/core/services/l/l.service.mjs +0 -45
  156. package/esm2020/lib/core/services/logged/index.mjs +0 -2
  157. package/esm2020/lib/core/services/logged/monkeyecx-logged-handling.service.mjs +0 -40
  158. package/esm2020/lib/core/services/monkeyecx-handling.service.mjs +0 -50
  159. package/esm2020/lib/core/services/monkeyecx-service.service.mjs +0 -109
  160. package/esm2020/lib/core/services/pagination/index.mjs +0 -2
  161. package/esm2020/lib/core/services/pagination/monkeyecx-pagination.service.mjs +0 -29
  162. package/esm2020/lib/core/services/request-download/index.mjs +0 -3
  163. package/esm2020/lib/core/services/request-download/monkeyecx-request-download-handling.service.mjs +0 -93
  164. package/esm2020/lib/core/services/request-download/monkeyecx-request-downloaded-handling.service.mjs +0 -61
  165. package/esm2020/lib/core/services/request-paged/index.mjs +0 -2
  166. package/esm2020/lib/core/services/request-paged/monkeyecx-request-request-paged-handling.mjs +0 -42
  167. package/esm2020/lib/core/services/request-queue/index.mjs +0 -3
  168. package/esm2020/lib/core/services/request-queue/monkeyecx-request-queue-handling.service.mjs +0 -114
  169. package/esm2020/lib/core/services/request-queue/monkeyecx-request-queue-modal-handling.service.mjs +0 -119
  170. package/esm2020/lib/core/services/routes/index.mjs +0 -2
  171. package/esm2020/lib/core/services/routes/monkeyecx-dicovery-params.service.mjs +0 -54
  172. package/esm2020/lib/core/services/schedules/index.mjs +0 -2
  173. package/esm2020/lib/core/services/schedules/monkeyecx-request-schedule.service.mjs +0 -188
  174. package/esm2020/lib/core/services/storage/index.mjs +0 -3
  175. package/esm2020/lib/core/services/storage/monkeyecx-cookie-storage.service.mjs +0 -32
  176. package/esm2020/lib/core/services/storage/monkeyecx-token-storage.service.mjs +0 -237
  177. package/esm2020/lib/core/services/store/index.mjs +0 -5
  178. package/esm2020/lib/core/services/store/monkeyecx-store-base.service.mjs +0 -174
  179. package/esm2020/lib/core/services/store/monkeyecx-store.actions.mjs +0 -26
  180. package/esm2020/lib/core/services/store/monkeyecx-store.selector.mjs +0 -87
  181. package/esm2020/lib/core/services/store/monkeyecx-store.service.mjs +0 -195
  182. package/esm2020/lib/core/specification-search/index.mjs +0 -2
  183. package/esm2020/lib/core/specification-search/monkeyecx-specification-search.mjs +0 -108
  184. package/esm2020/lib/core/utils/decorators-utils.mjs +0 -40
  185. package/esm2020/lib/core/utils/index.mjs +0 -8
  186. package/esm2020/lib/core/utils/statics.mjs +0 -47
  187. package/esm2020/lib/core/utils/utils.mjs +0 -469
  188. package/esm2020/lib/core/utils/validate-utils.mjs +0 -219
  189. package/esm2020/lib/core/utils/validators.mjs +0 -327
  190. package/esm2020/lib/monkey-front-core.module.mjs +0 -71
  191. package/esm2020/lib/store/actions/index.mjs +0 -2
  192. package/esm2020/lib/store/actions/monkeyecx-storage.actions.mjs +0 -8
  193. package/esm2020/lib/store/index.mjs +0 -4
  194. package/esm2020/lib/store/reducers/index.mjs +0 -3
  195. package/esm2020/lib/store/reducers/monkeyecx-seeder.reducer.mjs +0 -53
  196. package/esm2020/lib/store/reducers/monkeyecx-storage.reducer.mjs +0 -40
  197. package/esm2020/lib/store/selectors/index.mjs +0 -2
  198. package/esm2020/lib/store/selectors/monkeyecx-storage.selector.mjs +0 -17
  199. package/esm2020/monkey-front-core.mjs +0 -5
  200. package/esm2020/public-api.mjs +0 -8
  201. package/fesm2015/monkey-front-core.mjs +0 -7238
  202. package/fesm2015/monkey-front-core.mjs.map +0 -1
  203. package/fesm2020/monkey-front-core.mjs +0 -7248
  204. package/fesm2020/monkey-front-core.mjs.map +0 -1
  205. package/lib/components/alerts/alerts.component.d.ts +0 -22
  206. package/lib/components/alerts/alerts.module.d.ts +0 -10
  207. package/lib/components/alerts/index.d.ts +0 -2
  208. package/lib/components/closed-to-maintenance/closed-to-maintenance.component.d.ts +0 -13
  209. package/lib/components/closed-to-maintenance/closed-to-maintenance.module.d.ts +0 -11
  210. package/lib/components/closed-to-maintenance/index.d.ts +0 -2
  211. package/lib/components/currency-config/currency-config.component.d.ts +0 -17
  212. package/lib/components/currency-config/currency-config.module.d.ts +0 -10
  213. package/lib/components/currency-config/index.d.ts +0 -2
  214. package/lib/components/index.d.ts +0 -5
  215. package/lib/components/progress-bar/index.d.ts +0 -3
  216. package/lib/components/progress-bar/progress-bar.component.d.ts +0 -11
  217. package/lib/components/progress-bar/progress-bar.module.d.ts +0 -8
  218. package/lib/components/progress-bar/progress-bar.service.d.ts +0 -14
  219. package/lib/components/version-changed/index.d.ts +0 -2
  220. package/lib/components/version-changed/version-changed.component.d.ts +0 -9
  221. package/lib/components/version-changed/version-changed.module.d.ts +0 -10
  222. package/lib/core/decorators/index.d.ts +0 -4
  223. package/lib/core/decorators/monkeyecx-charts-decorators.d.ts +0 -1
  224. package/lib/core/decorators/monkeyecx-decorators.d.ts +0 -7
  225. package/lib/core/decorators/monkeyecx-download-decorators.d.ts +0 -2
  226. package/lib/core/decorators/monkeyecx-upload-decorators.d.ts +0 -2
  227. package/lib/core/directives/index.d.ts +0 -13
  228. package/lib/core/directives/monkeyecx-directives-module.d.ts +0 -20
  229. package/lib/core/directives/monkeyecx-drag-drop.d.ts +0 -12
  230. package/lib/core/directives/monkeyecx-feature-by-program-directive.d.ts +0 -16
  231. package/lib/core/directives/monkeyecx-feature-directive.d.ts +0 -17
  232. package/lib/core/directives/monkeyecx-format-currency.d.ts +0 -16
  233. package/lib/core/directives/monkeyecx-format-upper.d.ts +0 -18
  234. package/lib/core/directives/monkeyecx-loading.d.ts +0 -16
  235. package/lib/core/directives/monkeyecx-only-alpha-numeric-directive.d.ts +0 -9
  236. package/lib/core/directives/monkeyecx-only-number-directive.d.ts +0 -9
  237. package/lib/core/directives/monkeyecx-popover-options.directive.d.ts +0 -19
  238. package/lib/core/directives/monkeyecx-popover.directive.d.ts +0 -43
  239. package/lib/core/directives/monkeyecx-security-directive.d.ts +0 -18
  240. package/lib/core/directives/monkeyecx-tooltip-directive.d.ts +0 -23
  241. package/lib/core/index.d.ts +0 -10
  242. package/lib/core/injectors/index.d.ts +0 -7
  243. package/lib/core/interceptors/index.d.ts +0 -5
  244. package/lib/core/interceptors/monkeyecx-http-config-error.interceptor.d.ts +0 -18
  245. package/lib/core/interceptors/monkeyecx-http-config-header.interceptor.d.ts +0 -16
  246. package/lib/core/interceptors/monkeyecx-http-config-interceptor.module.d.ts +0 -9
  247. package/lib/core/interceptors/monkeyecx-http-config-loading-in-progress.interceptor.d.ts +0 -12
  248. package/lib/core/interceptors/monkeyecx-http-config-queue.interceptor.d.ts +0 -14
  249. package/lib/core/interfaces/index.d.ts +0 -36
  250. package/lib/core/interfaces/monkeyecx-auth-credentials.d.ts +0 -15
  251. package/lib/core/interfaces/monkeyecx-company-pendencies.d.ts +0 -14
  252. package/lib/core/interfaces/monkeyecx-company.d.ts +0 -10
  253. package/lib/core/interfaces/monkeyecx-config-bootstrap.d.ts +0 -14
  254. package/lib/core/interfaces/monkeyecx-config.d.ts +0 -132
  255. package/lib/core/interfaces/monkeyecx-country-security.d.ts +0 -4
  256. package/lib/core/interfaces/monkeyecx-embedded.d.ts +0 -7
  257. package/lib/core/interfaces/monkeyecx-error-response.d.ts +0 -5
  258. package/lib/core/interfaces/monkeyecx-filter.d.ts +0 -52
  259. package/lib/core/interfaces/monkeyecx-group.d.ts +0 -13
  260. package/lib/core/interfaces/monkeyecx-handled-error-response.d.ts +0 -10
  261. package/lib/core/interfaces/monkeyecx-header-credentials.d.ts +0 -4
  262. package/lib/core/interfaces/monkeyecx-intercom-options.d.ts +0 -4
  263. package/lib/core/interfaces/monkeyecx-interface.d.ts +0 -11
  264. package/lib/core/interfaces/monkeyecx-me-credentials.d.ts +0 -20
  265. package/lib/core/interfaces/monkeyecx-navigation.d.ts +0 -30
  266. package/lib/core/interfaces/monkeyecx-pagination.d.ts +0 -26
  267. package/lib/core/interfaces/monkeyecx-program.d.ts +0 -10
  268. package/lib/core/interfaces/monkeyecx-releases.d.ts +0 -9
  269. package/lib/core/interfaces/monkeyecx-request-in-progress.d.ts +0 -3
  270. package/lib/core/interfaces/monkeyecx-request-paged.d.ts +0 -23
  271. package/lib/core/interfaces/monkeyecx-resolver.d.ts +0 -39
  272. package/lib/core/interfaces/monkeyecx-response-links.d.ts +0 -11
  273. package/lib/core/interfaces/monkeyecx-response-paged.d.ts +0 -6
  274. package/lib/core/interfaces/monkeyecx-saved-state.d.ts +0 -5
  275. package/lib/core/interfaces/monkeyecx-scroll-options.d.ts +0 -5
  276. package/lib/core/interfaces/monkeyecx-service-credentials.d.ts +0 -12
  277. package/lib/core/interfaces/monkeyecx-storage.d.ts +0 -35
  278. package/lib/core/interfaces/monkeyecx-store.d.ts +0 -45
  279. package/lib/core/interfaces/monkeyecx-support-options.d.ts +0 -4
  280. package/lib/core/interfaces/monkeyecx-token-credentials.d.ts +0 -30
  281. package/lib/core/interfaces/monkeyecx-translate-options.d.ts +0 -4
  282. package/lib/core/interfaces/request-download/index.d.ts +0 -3
  283. package/lib/core/interfaces/request-download/monkeyecx-request-download.d.ts +0 -10
  284. package/lib/core/interfaces/request-download/monkeyecx-request-downloaded.d.ts +0 -7
  285. package/lib/core/interfaces/request-download/monkeyecx-request-item-download.d.ts +0 -7
  286. package/lib/core/interfaces/request-queue/index.d.ts +0 -3
  287. package/lib/core/interfaces/request-queue/monkeyecx-request-item-queue.d.ts +0 -7
  288. package/lib/core/interfaces/request-queue/monkeyecx-request-progress-queue.d.ts +0 -6
  289. package/lib/core/interfaces/request-queue/monkeyecx-request-queue.d.ts +0 -8
  290. package/lib/core/interfaces/request-upload/index.d.ts +0 -2
  291. package/lib/core/interfaces/request-upload/monkeyecx-request-item-upload.d.ts +0 -5
  292. package/lib/core/interfaces/request-upload/monkeyecx-request-upload.d.ts +0 -10
  293. package/lib/core/interfaces/schedules/index.d.ts +0 -1
  294. package/lib/core/interfaces/schedules/monkeyecx-request-schedule.d.ts +0 -13
  295. package/lib/core/model/index.d.ts +0 -2
  296. package/lib/core/model/monkeyecx-links.model.d.ts +0 -4
  297. package/lib/core/model/monkeyecx-model.d.ts +0 -14
  298. package/lib/core/pipes/index.d.ts +0 -23
  299. package/lib/core/pipes/monkeyecx-blob-secure.d.ts +0 -13
  300. package/lib/core/pipes/monkeyecx-currency-code.d.ts +0 -9
  301. package/lib/core/pipes/monkeyecx-display-first-name.d.ts +0 -7
  302. package/lib/core/pipes/monkeyecx-display-initials.d.ts +0 -7
  303. package/lib/core/pipes/monkeyecx-display-support-phone.d.ts +0 -18
  304. package/lib/core/pipes/monkeyecx-format-address.d.ts +0 -14
  305. package/lib/core/pipes/monkeyecx-format-beautify-json.d.ts +0 -8
  306. package/lib/core/pipes/monkeyecx-format-currency.d.ts +0 -12
  307. package/lib/core/pipes/monkeyecx-format-date-group.d.ts +0 -11
  308. package/lib/core/pipes/monkeyecx-format-date-timelapse.d.ts +0 -7
  309. package/lib/core/pipes/monkeyecx-format-date-unix-timelapse.d.ts +0 -7
  310. package/lib/core/pipes/monkeyecx-format-date.d.ts +0 -12
  311. package/lib/core/pipes/monkeyecx-format-document.d.ts +0 -7
  312. package/lib/core/pipes/monkeyecx-format-number.d.ts +0 -7
  313. package/lib/core/pipes/monkeyecx-format-phone.d.ts +0 -7
  314. package/lib/core/pipes/monkeyecx-format-size.d.ts +0 -7
  315. package/lib/core/pipes/monkeyecx-format-tax.d.ts +0 -7
  316. package/lib/core/pipes/monkeyecx-format-type-document.d.ts +0 -7
  317. package/lib/core/pipes/monkeyecx-format-value.d.ts +0 -7
  318. package/lib/core/pipes/monkeyecx-format-zipcode.d.ts +0 -7
  319. package/lib/core/pipes/monkeyecx-pipes.module.d.ts +0 -28
  320. package/lib/core/pipes/monkeyecx-text-truncate.d.ts +0 -7
  321. package/lib/core/pipes/monkeyecx-truncate-qtd.d.ts +0 -7
  322. package/lib/core/services/alerts/index.d.ts +0 -1
  323. package/lib/core/services/alerts/monkeyecx-alerts.service.d.ts +0 -49
  324. package/lib/core/services/auth/index.d.ts +0 -5
  325. package/lib/core/services/auth/monkeyecx-auth-guard-company.service.d.ts +0 -10
  326. package/lib/core/services/auth/monkeyecx-auth-guard-login.service.d.ts +0 -10
  327. package/lib/core/services/auth/monkeyecx-auth-guard-role.service.d.ts +0 -16
  328. package/lib/core/services/auth/monkeyecx-auth-guard.service.d.ts +0 -10
  329. package/lib/core/services/auth/monkeyecx-authentication.service.d.ts +0 -35
  330. package/lib/core/services/commons/index.d.ts +0 -3
  331. package/lib/core/services/commons/monkeyecx-commons-resolve-base.service.d.ts +0 -46
  332. package/lib/core/services/commons/monkeyecx-commons-resolve.service.d.ts +0 -60
  333. package/lib/core/services/commons/monkeyecx-commons.service.d.ts +0 -120
  334. package/lib/core/services/config/monkeyecx-alerts-config.service.d.ts +0 -11
  335. package/lib/core/services/config/monkeyecx-config.module.d.ts +0 -9
  336. package/lib/core/services/config/monkeyecx-config.service.d.ts +0 -36
  337. package/lib/core/services/config/monkeyecx-currency-config.service.d.ts +0 -15
  338. package/lib/core/services/config/monkeyecx-error-config.service.d.ts +0 -8
  339. package/lib/core/services/config/monkeyecx-feature-toggle.service.d.ts +0 -17
  340. package/lib/core/services/config/monkeyecx-gtm-config.service.d.ts +0 -8
  341. package/lib/core/services/config/monkeyecx-i18n-config.service.d.ts +0 -24
  342. package/lib/core/services/config/monkeyecx-logs-config.service.d.ts +0 -14
  343. package/lib/core/services/config/monkeyecx-maintenance-config.service.d.ts +0 -13
  344. package/lib/core/services/config/monkeyecx-security-console-config.service.d.ts +0 -12
  345. package/lib/core/services/config/monkeyecx-service-worker-config.service.d.ts +0 -16
  346. package/lib/core/services/error/index.d.ts +0 -4
  347. package/lib/core/services/error/monkeyecx-error-handling.module.d.ts +0 -9
  348. package/lib/core/services/error/monkeyecx-error-handling.service.d.ts +0 -9
  349. package/lib/core/services/error/monkeyecx-http-error-handling.service.d.ts +0 -26
  350. package/lib/core/services/error/monkeyecx-others-errors-handling.service.d.ts +0 -11
  351. package/lib/core/services/index.d.ts +0 -26
  352. package/lib/core/services/l/index.d.ts +0 -1
  353. package/lib/core/services/l/l.service.d.ts +0 -11
  354. package/lib/core/services/logged/index.d.ts +0 -1
  355. package/lib/core/services/logged/monkeyecx-logged-handling.service.d.ts +0 -14
  356. package/lib/core/services/monkeyecx-handling.service.d.ts +0 -22
  357. package/lib/core/services/monkeyecx-service.service.d.ts +0 -19
  358. package/lib/core/services/pagination/index.d.ts +0 -1
  359. package/lib/core/services/pagination/monkeyecx-pagination.service.d.ts +0 -9
  360. package/lib/core/services/request-download/index.d.ts +0 -2
  361. package/lib/core/services/request-download/monkeyecx-request-download-handling.service.d.ts +0 -18
  362. package/lib/core/services/request-download/monkeyecx-request-downloaded-handling.service.d.ts +0 -16
  363. package/lib/core/services/request-paged/index.d.ts +0 -1
  364. package/lib/core/services/request-paged/monkeyecx-request-request-paged-handling.d.ts +0 -11
  365. package/lib/core/services/request-queue/index.d.ts +0 -2
  366. package/lib/core/services/request-queue/monkeyecx-request-queue-handling.service.d.ts +0 -21
  367. package/lib/core/services/request-queue/monkeyecx-request-queue-modal-handling.service.d.ts +0 -23
  368. package/lib/core/services/routes/index.d.ts +0 -1
  369. package/lib/core/services/routes/monkeyecx-dicovery-params.service.d.ts +0 -13
  370. package/lib/core/services/schedules/index.d.ts +0 -1
  371. package/lib/core/services/schedules/monkeyecx-request-schedule.service.d.ts +0 -47
  372. package/lib/core/services/storage/index.d.ts +0 -2
  373. package/lib/core/services/storage/monkeyecx-cookie-storage.service.d.ts +0 -11
  374. package/lib/core/services/storage/monkeyecx-token-storage.service.d.ts +0 -30
  375. package/lib/core/services/store/index.d.ts +0 -4
  376. package/lib/core/services/store/monkeyecx-store-base.service.d.ts +0 -47
  377. package/lib/core/services/store/monkeyecx-store.actions.d.ts +0 -42
  378. package/lib/core/services/store/monkeyecx-store.selector.d.ts +0 -32
  379. package/lib/core/services/store/monkeyecx-store.service.d.ts +0 -50
  380. package/lib/core/specification-search/index.d.ts +0 -1
  381. package/lib/core/specification-search/monkeyecx-specification-search.d.ts +0 -20
  382. package/lib/core/utils/decorators-utils.d.ts +0 -5
  383. package/lib/core/utils/index.d.ts +0 -6
  384. package/lib/core/utils/statics.d.ts +0 -36
  385. package/lib/core/utils/utils.d.ts +0 -39
  386. package/lib/core/utils/validate-utils.d.ts +0 -71
  387. package/lib/core/utils/validators.d.ts +0 -43
  388. package/lib/monkey-front-core.module.d.ts +0 -19
  389. package/lib/store/actions/index.d.ts +0 -1
  390. package/lib/store/actions/monkeyecx-storage.actions.d.ts +0 -23
  391. package/lib/store/index.d.ts +0 -3
  392. package/lib/store/reducers/index.d.ts +0 -2
  393. package/lib/store/reducers/monkeyecx-seeder.reducer.d.ts +0 -2
  394. package/lib/store/reducers/monkeyecx-storage.reducer.d.ts +0 -13
  395. package/lib/store/selectors/index.d.ts +0 -1
  396. package/lib/store/selectors/monkeyecx-storage.selector.d.ts +0 -8
  397. package/monkey-front-core-0.0.606.tgz +0 -0
  398. package/monkey-front-core.d.ts +0 -5
  399. package/public-api.d.ts +0 -4
@@ -1,469 +0,0 @@
1
- /* eslint-disable comma-dangle */
2
- /* eslint-disable max-len */
3
- /* eslint-disable no-useless-escape */
4
- /* eslint-disable no-plusplus */
5
- /* eslint-disable no-cond-assign */
6
- /* eslint-disable eqeqeq */
7
- /* eslint-disable no-redeclare */
8
- /* eslint-disable vars-on-top */
9
- /* eslint-disable no-var */
10
- import { datadogLogs } from '@datadog/browser-logs';
11
- import { CountryMasks } from './statics';
12
- /* eslint-disable block-scoped-var */
13
- export class MonkeyEcxUtils {
14
- static persistNullEmptyUndefined(tp) {
15
- return tp !== null && tp !== undefined && tp !== '';
16
- }
17
- static getDocumentType(doc, country) {
18
- if (!doc)
19
- return '';
20
- if (country === 'cl')
21
- return 'RUT';
22
- if (country === 'mx')
23
- return 'RFC';
24
- if (country === 'us')
25
- return 'EIN';
26
- return doc.length <= 11 ? 'CPF' : 'CNPJ';
27
- }
28
- static getDocumentMask(type, country = '') {
29
- return {
30
- BR: {
31
- CPF: CountryMasks.CPF,
32
- CNPJ: CountryMasks.CNPJ,
33
- '': `${CountryMasks.CPF}||${CountryMasks.CNPJ}`
34
- },
35
- CL: {
36
- CPF: CountryMasks.RUT1,
37
- CNPJ: CountryMasks.RUT2,
38
- '': `${CountryMasks.RUT1}||${CountryMasks.RUT2}`
39
- },
40
- MX: {
41
- CPF: CountryMasks.RFC1,
42
- CNPJ: CountryMasks.RFC2,
43
- '': `${CountryMasks.RFC1}||${CountryMasks.RFC2}`
44
- }
45
- }[country.toUpperCase()]?.[type];
46
- }
47
- static getDocumentPlaceholder(type, country = '') {
48
- return {
49
- BR: {
50
- CPF: '000.000.000-XX',
51
- CNPJ: '00.000.000/0000-00'
52
- },
53
- CL: {
54
- CPF: '0000000-A',
55
- CNPJ: '0000000-A'
56
- },
57
- MX: {
58
- CPF: CountryMasks.RFC1,
59
- CNPJ: CountryMasks.RFC2
60
- }
61
- }[country.toUpperCase()]?.[type];
62
- }
63
- static formatDocumentWithMask(doc, withType, country) {
64
- if (!doc)
65
- return doc;
66
- let formated = '';
67
- if (country === 'cl') {
68
- formated = doc.replace(/^(\d{1,2})(\d{3})(\d{3})(\w{1})$/, '$1.$2.$3-$4');
69
- return `${formated}`;
70
- }
71
- if (country === 'us') {
72
- return doc;
73
- }
74
- if (doc.length === 14) {
75
- formated = doc
76
- .replace(/^(\d{2})(\d)/, '$1.$2')
77
- .replace(/^(\d{2})\.(\d{3})(\d)/, '$1.$2.$3')
78
- .replace(/\.(\d{3})(\d)/, '.$1/$2')
79
- .replace(/(\d{4})(\d)/, '$1-$2');
80
- }
81
- else {
82
- formated = doc
83
- .replace(/^(\d{3})(\d)/, '$1.$2')
84
- .replace(/^(\d{3})\.(\d{3})(\d)/, '$1.$2.$3')
85
- .replace(/\.(\d{3})(\d)/, '.$1-$2');
86
- }
87
- return `${withType ? `${this.getDocumentType(doc)}:` : ''} ${formated}`;
88
- }
89
- static cutFirstLastName(value, tp = 'first') {
90
- const split = value?.trim()?.split(' ');
91
- if (tp === 'first')
92
- return split[0];
93
- return split?.splice(1, split.length)?.join(' ');
94
- }
95
- static isCPFCNPJValid(document) {
96
- document = document.replace(/[^\d]/g, '');
97
- const handled = document.replace(new RegExp(document.charAt(0), 'g'), '');
98
- if (!handled)
99
- return false;
100
- if (document.length === 11) {
101
- let base = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
102
- for (var i = 0, n = 0; i < 9; n += document[i] * base[i++])
103
- ;
104
- if (document[9] != ((n %= 11) <= 1 ? 0 : 11 - n)) {
105
- return false;
106
- }
107
- base = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
108
- for (var i = 0, n = 0; i <= 9; n += document[i] * base[i++])
109
- ;
110
- if (document[10] != ((n %= 11) <= 1 ? 0 : 11 - n)) {
111
- return false;
112
- }
113
- return true;
114
- }
115
- if (document.length === 14 || /0{14}/.test(document)) {
116
- const base = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
117
- for (var i = 0, n = 0; i < 12; n += document[i] * base[++i])
118
- ;
119
- if (document[12] != ((n %= 11) < 2 ? 0 : 11 - n)) {
120
- return false;
121
- }
122
- for (var i = 0, n = 0; i <= 12; n += document[i] * base[i++])
123
- ;
124
- if (document[13] != ((n %= 11) < 2 ? 0 : 11 - n)) {
125
- return false;
126
- }
127
- return true;
128
- }
129
- return false;
130
- }
131
- static isValidRUT(document) {
132
- if (!document || document.trim().length < 3)
133
- return false;
134
- const documentHandled = document.replace(/[^0-9kK]/g, '');
135
- if (documentHandled.length < 3)
136
- return false;
137
- const calcDv = (rut) => {
138
- const value = `${rut}`;
139
- let sum = 0;
140
- let mult = 2;
141
- for (let i = 1; i <= value.length; i++) {
142
- const index = mult * Number(value.charAt(value.length - i));
143
- sum += index;
144
- if (mult < 7) {
145
- mult += 1;
146
- }
147
- else {
148
- mult = 2;
149
- }
150
- }
151
- const dvEsperado = 11 - (sum % 11);
152
- if (dvEsperado === 10)
153
- return 'K';
154
- if (dvEsperado === 11)
155
- return '0';
156
- return `${dvEsperado}`;
157
- };
158
- const num = documentHandled.slice(0, -1);
159
- const dgv = documentHandled.slice(-1).toUpperCase();
160
- const dvCalc = calcDv(num);
161
- return dvCalc === dgv;
162
- }
163
- static isValidRFC(document) {
164
- const RFC_REGEXP = /^([A-ZÑ\x26]{3,4})([0-9]{6})([A-Z0-9]{3})$/;
165
- const SPECIAL_CASES = {
166
- XEXX010101000: 'foreign',
167
- XAXX010101000: 'generic'
168
- };
169
- const FORBIDDEN_WORDS = [
170
- 'BUEI',
171
- 'BUEY',
172
- 'CACA',
173
- 'CACO',
174
- 'CAGA',
175
- 'CAGO',
176
- 'CAKA',
177
- 'CAKO',
178
- 'COGE',
179
- 'COJA',
180
- 'COJE',
181
- 'COJI',
182
- 'COJO',
183
- 'CULO',
184
- 'FETO',
185
- 'GUEY',
186
- 'JOTO',
187
- 'KACA',
188
- 'KACO',
189
- 'KAGA',
190
- 'KAGO',
191
- 'KOGE',
192
- 'KOJO',
193
- 'KAKA',
194
- 'KULO',
195
- 'MAME',
196
- 'MAMO',
197
- 'MEAR',
198
- 'MEAS',
199
- 'MEON',
200
- 'MION',
201
- 'MOCO',
202
- 'MULA',
203
- 'PEDA',
204
- 'PEDO',
205
- 'PENE',
206
- 'PUTA',
207
- 'PUTO',
208
- 'QULO',
209
- 'RATA',
210
- 'RUIN'
211
- ];
212
- const VALUES_MAP = {
213
- 0: 0,
214
- 1: 1,
215
- 2: 2,
216
- 3: 3,
217
- 4: 4,
218
- 5: 5,
219
- 6: 6,
220
- 7: 7,
221
- 8: 8,
222
- 9: 9,
223
- A: 10,
224
- B: 11,
225
- C: 12,
226
- D: 13,
227
- E: 14,
228
- F: 15,
229
- G: 16,
230
- H: 17,
231
- I: 18,
232
- J: 19,
233
- K: 20,
234
- L: 21,
235
- M: 22,
236
- N: 23,
237
- '&': 24,
238
- O: 25,
239
- P: 26,
240
- Q: 27,
241
- R: 28,
242
- S: 29,
243
- T: 30,
244
- U: 31,
245
- V: 32,
246
- W: 33,
247
- X: 34,
248
- Y: 35,
249
- Z: 36,
250
- ' ': 37,
251
- Ñ: 38
252
- };
253
- const getScore = (doc) => {
254
- return doc.split('').reverse().reduce((sum, char, i) => {
255
- const index = i + 2;
256
- const value = VALUES_MAP[char] || 0;
257
- return sum + value * index;
258
- }, 0);
259
- };
260
- const parseInput = (doc) => {
261
- return String(doc)
262
- .trim()
263
- .toUpperCase()
264
- .replace(/[^0-9A-ZÑ\x26]/g, '');
265
- };
266
- const validateDate = (doc) => {
267
- const dateStr = doc.slice(0, -3).slice(-6);
268
- const year = dateStr.slice(0, 2);
269
- const month = dateStr.slice(2, 4);
270
- const day = dateStr.slice(4, 6);
271
- const date = new Date(`20${year}-${month}-${day}`);
272
- // eslint-disable-next-line no-restricted-globals
273
- return !isNaN(date.getTime());
274
- };
275
- const validateVerificationDigit = (doc) => {
276
- const digit = doc.slice(-1);
277
- const rfc = doc.length === 12 ? ` ${doc}` : doc;
278
- const base = rfc.slice(0, -1);
279
- const score = getScore(base);
280
- const mod = (11000 - score) % 11;
281
- if (mod === 11)
282
- return digit === '0';
283
- if (mod === 10)
284
- return digit === 'A';
285
- return String(mod) === digit;
286
- };
287
- const isSpecialCase = (doc) => { return doc in SPECIAL_CASES; };
288
- const hasForbiddenWords = (doc) => {
289
- const prefix = (doc || '').slice(0, 4);
290
- return FORBIDDEN_WORDS.includes(prefix);
291
- };
292
- try {
293
- const input = parseInput(document);
294
- if (isSpecialCase(input))
295
- return false;
296
- const hasValidFormat = RFC_REGEXP.test(input);
297
- if (!hasValidFormat)
298
- return false;
299
- const hasValidDate = validateDate(input);
300
- if (!hasValidDate)
301
- return false;
302
- const hasValidDigit = validateVerificationDigit(input);
303
- if (!hasValidDigit)
304
- return false;
305
- if (hasForbiddenWords(input))
306
- return false;
307
- return true;
308
- }
309
- catch (e) {
310
- // not to do
311
- }
312
- return false;
313
- }
314
- static isValidUrl(txt) {
315
- const regex = /(https?:\/\/(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9])(:?\d*)\/?([a-z_\\/0-9\-#.]*)\??([a-z_\\/0-9\-#=&]*)/g;
316
- return regex.test(txt);
317
- }
318
- static isValidZipCode(zipCode, country) {
319
- const length = {
320
- br: 8,
321
- cl: 7,
322
- mx: 5
323
- }[country || 'br'];
324
- return `${this.handleOnlyNumbers(zipCode)}`.length === length;
325
- }
326
- static isValidEmail(email) {
327
- return /^[\w-.]+@([\w-]+\.)+[\w-]{1,64}$/.test(email || '');
328
- }
329
- static getRandomString(len, charSet) {
330
- charSet = charSet || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
331
- const randomString = new Array(len)
332
- .fill('1')
333
- .map(() => {
334
- return charSet?.charAt(Math.floor(Math.random() * charSet?.length));
335
- })
336
- .join('');
337
- return randomString;
338
- }
339
- static handleOnlyNumbers(value) {
340
- if (!value)
341
- return null;
342
- return value.replace(new RegExp(/[^0-9]/g), '');
343
- }
344
- static handleOnlyAlphaNumeric(value) {
345
- if (!value)
346
- return '';
347
- return value.replace(new RegExp(/[^0-9A-Za-z]/, 'g'), '');
348
- }
349
- static capitalize(value) {
350
- return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;
351
- }
352
- static formatZipCode(zipCode) {
353
- if (!zipCode)
354
- return zipCode;
355
- const formated = zipCode
356
- .replace(/^(\d{5})(\d)/, '$1-$2')
357
- .replace(/\.(\d{3})(\d)/, '.$1-$2');
358
- return `${formated}`;
359
- }
360
- static formatFileSize(size) {
361
- const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
362
- let l = 0;
363
- while (size >= 1024 && ++l) {
364
- size /= 1024;
365
- }
366
- return `${size.toFixed(size < 10 && l > 0 ? 1 : 0)} ${units[l]}`;
367
- }
368
- static sufflue(data) {
369
- for (let i = data.length - 1; i > 0; i--) {
370
- const j = Math.floor(Math.random() * i);
371
- const temp = data[i];
372
- data[i] = data[j];
373
- data[j] = temp;
374
- }
375
- return data;
376
- }
377
- static handleBlobFile(theBlob, fileName, fileType) {
378
- function blobToFile(theBlob, fileName) {
379
- const b = theBlob;
380
- b.lastModifiedDate = new Date();
381
- b.name = fileName;
382
- return b;
383
- }
384
- let file;
385
- if (!navigator.msSaveBlob) {
386
- file = new File([theBlob], fileName, {
387
- type: fileType,
388
- });
389
- }
390
- else {
391
- file = new Blob([theBlob], {
392
- type: fileType,
393
- });
394
- file = blobToFile(file, fileName);
395
- }
396
- return file;
397
- }
398
- static truncate(text, maxLength = 25) {
399
- const midChar = '...';
400
- if (!text)
401
- return midChar;
402
- if (text && text.length <= maxLength)
403
- return text;
404
- const left = Math.ceil(maxLength / 2);
405
- const right = text.length - left + 1;
406
- return `${text.substr(0, left)} ${midChar} ${text.substring(right)}`;
407
- }
408
- static isLocalhost() {
409
- const { href } = window?.location;
410
- if (!href)
411
- return false;
412
- return href?.search('localhost') >= 0;
413
- }
414
- static isSameOrigin(frontend) {
415
- const initialPath = window.location.origin;
416
- return (initialPath || '') === frontend;
417
- }
418
- static replaceVariables(data, obj) {
419
- let handled = data;
420
- Object.entries(obj).forEach(([key, value]) => {
421
- handled = handled.replace(new RegExp(`{${key}}`, 'g'), `${value}`);
422
- });
423
- return handled;
424
- }
425
- static trimValuesToSave(obj, fields) {
426
- let ret = obj;
427
- const grouped = fields.join('#');
428
- Object.entries(obj).map(([key, value]) => {
429
- if (grouped.includes(key)) {
430
- ret = {
431
- ...ret,
432
- [key]: `${value}`.trim()
433
- };
434
- }
435
- return null;
436
- });
437
- return ret;
438
- }
439
- }
440
- export class MonkeyEcxLogs {
441
- static log(params) {
442
- try {
443
- const { type, message, context, error } = params;
444
- datadogLogs.logger[type || 'error'](message, context, error);
445
- }
446
- catch (e) {
447
- // not to do
448
- }
449
- }
450
- }
451
- export function bufferToBase64(buffer) {
452
- let binary = '';
453
- const bytes = new Uint8Array(buffer);
454
- const len = bytes.byteLength;
455
- for (let i = 0; i < len; i++) {
456
- binary += String.fromCharCode(bytes[i]);
457
- }
458
- return window.btoa(binary);
459
- }
460
- export function base64ToBuffer(base64) {
461
- const binaryString = window.atob(base64);
462
- const len = binaryString.length;
463
- const bytes = new Uint8Array(len);
464
- for (let i = 0; i < len; i++) {
465
- bytes[i] = binaryString.charCodeAt(i);
466
- }
467
- return bytes.buffer;
468
- }
469
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb25rZXktZnJvbnQtY29yZS9zcmMvbGliL2NvcmUvdXRpbHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUNBQWlDO0FBQ2pDLDRCQUE0QjtBQUM1QixzQ0FBc0M7QUFDdEMsZ0NBQWdDO0FBQ2hDLG1DQUFtQztBQUNuQywyQkFBMkI7QUFDM0IsaUNBQWlDO0FBQ2pDLGdDQUFnQztBQUNoQywyQkFBMkI7QUFFM0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFekMscUNBQXFDO0FBQ3JDLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxFQUFPO1FBQ3RDLE9BQU8sRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssU0FBUyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBVyxFQUFFLE9BQWdCO1FBQ2xELElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDcEIsSUFBSSxPQUFPLEtBQUssSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ25DLElBQUksT0FBTyxLQUFLLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNuQyxJQUFJLE9BQU8sS0FBSyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDbkMsT0FBTyxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBWSxFQUFFLE9BQU8sR0FBRyxFQUFFO1FBQy9DLE9BQU87WUFDTCxFQUFFLEVBQUU7Z0JBQ0Ys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QU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07U0FDUCxDQUFDO1FBRUYsTUFBTSxVQUFVLEdBQUc7WUFDakIsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsRUFBRTtZQUNMLENBQUMsRUFBRSxFQUFFO1lBQ0wsQ0FBQyxFQUFFLEVBQUU7WUFDTCxDQUFDLEVBQUUsRUFBRTtZQUNMLENBQUMsRUFBRSxFQUFFO1lBQ0wsQ0FBQyxFQUFFLEVBQUU7WUFDTCxDQUFDLEVBQUUsRUFBRTtZQUNMLENBQUMsRUFBRSxFQUFFO1lBQ0wsQ0FBQyxFQUFFLEVBQUU7WUFDTCxDQUFDLEVBQUUsRUFBRTtZQUNMLENBQUMsRUFBRSxFQUFFO1lBQ0wsQ0FBQyxFQUFFLEVBQUU7WUFDTCxDQUFDLEVBQUUsRUFBRTtZQUNMLENBQUMsRUFBRSxFQUFFO1lBQ0wsR0FBRyxFQUFFLEVBQUU7WUFDUCxD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bW1hLWRhbmdsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlbGVzcy1lc2NhcGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXBsdXNwbHVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuLyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZWRlY2xhcmUgKi9cbi8qIGVzbGludC1kaXNhYmxlIHZhcnMtb24tdG9wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cblxuaW1wb3J0IHsgZGF0YWRvZ0xvZ3MgfSBmcm9tICdAZGF0YWRvZy9icm93c2VyLWxvZ3MnO1xuaW1wb3J0IHsgQ291bnRyeU1hc2tzIH0gZnJvbSAnLi9zdGF0aWNzJztcblxuLyogZXNsaW50LWRpc2FibGUgYmxvY2stc2NvcGVkLXZhciAqL1xuZXhwb3J0IGNsYXNzIE1vbmtleUVjeFV0aWxzIHtcbiAgc3RhdGljIHBlcnNpc3ROdWxsRW1wdHlVbmRlZmluZWQodHA6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cCAhPT0gbnVsbCAmJiB0cCAhPT0gdW5kZWZpbmVkICYmIHRwICE9PSAnJztcbiAgfVxuXG4gIHN0YXRpYyBnZXREb2N1bWVudFR5cGUoZG9jOiBzdHJpbmcsIGNvdW50cnk/OiBzdHJpbmcpIHtcbiAgICBpZiAoIWRvYykgcmV0dXJuICcnO1xuICAgIGlmIChjb3VudHJ5ID09PSAnY2wnKSByZXR1cm4gJ1JVVCc7XG4gICAgaWYgKGNvdW50cnkgPT09ICdteCcpIHJldHVybiAnUkZDJztcbiAgICBpZiAoY291bnRyeSA9PT0gJ3VzJykgcmV0dXJuICdFSU4nO1xuICAgIHJldHVybiBkb2MubGVuZ3RoIDw9IDExID8gJ0NQRicgOiAnQ05QSic7XG4gIH1cblxuICBzdGF0aWMgZ2V0RG9jdW1lbnRNYXNrKHR5cGU6IHN0cmluZywgY291bnRyeSA9ICcnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIEJSOiB7XG4gICAgICAgIENQRjogQ291bnRyeU1hc2tzLkNQRixcbiAgICAgICAgQ05QSjogQ291bnRyeU1hc2tzLkNOUEosXG4gICAgICAgICcnOiBgJHtDb3VudHJ5TWFza3MuQ1BGfXx8JHtDb3VudHJ5TWFza3MuQ05QSn1gXG4gICAgICB9LFxuICAgICAgQ0w6IHtcbiAgICAgICAgQ1BGOiBDb3VudHJ5TWFza3MuUlVUMSxcbiAgICAgICAgQ05QSjogQ291bnRyeU1hc2tzLlJVVDIsXG4gICAgICAgICcnOiBgJHtDb3VudHJ5TWFza3MuUlVUMX18fCR7Q291bnRyeU1hc2tzLlJVVDJ9YFxuICAgICAgfSxcbiAgICAgIE1YOiB7XG4gICAgICAgIENQRjogQ291bnRyeU1hc2tzLlJGQzEsXG4gICAgICAgIENOUEo6IENvdW50cnlNYXNrcy5SRkMyLFxuICAgICAgICAnJzogYCR7Q291bnRyeU1hc2tzLlJGQzF9fHwke0NvdW50cnlNYXNrcy5SRkMyfWBcbiAgICAgIH1cbiAgICB9W2NvdW50cnkudG9VcHBlckNhc2UoKV0/Llt0eXBlXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXREb2N1bWVudFBsYWNlaG9sZGVyKHR5cGU6IHN0cmluZywgY291bnRyeSA9ICcnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIEJSOiB7XG4gICAgICAgIENQRjogJzAwMC4wMDAuMDAwLVhYJyxcbiAgICAgICAgQ05QSjogJzAwLjAwMC4wMDAvMDAwMC0wMCdcbiAgICAgIH0sXG4gICAgICBDTDoge1xuICAgICAgICBDUEY6ICcwMDAwMDAwLUEnLFxuICAgICAgICBDTlBKOiAnMDAwMDAwMC1BJ1xuICAgICAgfSxcbiAgICAgIE1YOiB7XG4gICAgICAgIENQRjogQ291bnRyeU1hc2tzLlJGQzEsXG4gICAgICAgIENOUEo6IENvdW50cnlNYXNrcy5SRkMyXG4gICAgICB9XG4gICAgfVtjb3VudHJ5LnRvVXBwZXJDYXNlKCldPy5bdHlwZV07XG4gIH1cblxuICBzdGF0aWMgZm9ybWF0RG9jdW1lbnRXaXRoTWFzayhkb2M6IHN0cmluZywgd2l0aFR5cGU/OiBib29sZWFuLCBjb3VudHJ5Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWRvYykgcmV0dXJuIGRvYztcbiAgICBsZXQgZm9ybWF0ZWQ6IHN0cmluZyA9ICcnO1xuICAgIGlmIChjb3VudHJ5ID09PSAnY2wnKSB7XG4gICAgICBmb3JtYXRlZCA9IGRvYy5yZXBsYWNlKC9eKFxcZHsxLDJ9KShcXGR7M30pKFxcZHszfSkoXFx3ezF9KSQvLCAnJDEuJDIuJDMtJDQnKTtcbiAgICAgIHJldHVybiBgJHtmb3JtYXRlZH1gO1xuICAgIH1cbiAgICBpZiAoY291bnRyeSA9PT0gJ3VzJykge1xuICAgICAgcmV0dXJuIGRvYztcbiAgICB9XG4gICAgaWYgKGRvYy5sZW5ndGggPT09IDE0KSB7XG4gICAgICBmb3JtYXRlZCA9IGRvY1xuICAgICAgICAucmVwbGFjZSgvXihcXGR7Mn0pKFxcZCkvLCAnJDEuJDInKVxuICAgICAgICAucmVwbGFjZSgvXihcXGR7Mn0pXFwuKFxcZHszfSkoXFxkKS8sICckMS4kMi4kMycpXG4gICAgICAgIC5yZXBsYWNlKC9cXC4oXFxkezN9KShcXGQpLywgJy4kMS8kMicpXG4gICAgICAgIC5yZXBsYWNlKC8oXFxkezR9KShcXGQpLywgJyQxLSQyJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1hdGVkID0gZG9jXG4gICAgICAgIC5yZXBsYWNlKC9eKFxcZHszfSkoXFxkKS8sICckMS4kMicpXG4gICAgICAgIC5yZXBsYWNlKC9eKFxcZHszfSlcXC4oXFxkezN9KShcXGQpLywgJyQxLiQyLiQzJylcbiAgICAgICAgLnJlcGxhY2UoL1xcLihcXGR7M30pKFxcZCkvLCAnLiQxLSQyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke3dpdGhUeXBlID8gYCR7dGhpcy5nZXREb2N1bWVudFR5cGUoZG9jKX06YCA6ICcnfSAke2Zvcm1hdGVkfWA7XG4gIH1cblxuICBzdGF0aWMgY3V0Rmlyc3RMYXN0TmFtZSh2YWx1ZTogc3RyaW5nLCB0cDogc3RyaW5nID0gJ2ZpcnN0Jykge1xuICAgIGNvbnN0IHNwbGl0ID0gdmFsdWU/LnRyaW0oKT8uc3BsaXQoJyAnKTtcblxuICAgIGlmICh0cCA9PT0gJ2ZpcnN0JykgcmV0dXJuIHNwbGl0WzBdO1xuICAgIHJldHVybiBzcGxpdD8uc3BsaWNlKDEsIHNwbGl0Lmxlbmd0aCk/LmpvaW4oJyAnKTtcbiAgfVxuXG4gIHN0YXRpYyBpc0NQRkNOUEpWYWxpZChkb2N1bWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgZG9jdW1lbnQgPSBkb2N1bWVudC5yZXBsYWNlKC9bXlxcZF0vZywgJycpO1xuXG4gICAgY29uc3QgaGFuZGxlZCA9IGRvY3VtZW50LnJlcGxhY2UobmV3IFJlZ0V4cChkb2N1bWVudC5jaGFyQXQoMCksICdnJyksICcnKTtcbiAgICBpZiAoIWhhbmRsZWQpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChkb2N1bWVudC5sZW5ndGggPT09IDExKSB7XG4gICAgICBsZXQgYmFzZSA9IFsxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMF07XG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IDA7IGkgPCA5OyBuICs9IGRvY3VtZW50W2ldICogYmFzZVtpKytdKSA7XG4gICAgICBpZiAoZG9jdW1lbnRbOV0gIT0gKChuICU9IDExKSA8PSAxID8gMCA6IDExIC0gbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgYmFzZSA9IFsxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDBdO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSAwOyBpIDw9IDk7IG4gKz0gZG9jdW1lbnRbaV0gKiBiYXNlW2krK10pIDtcbiAgICAgIGlmIChkb2N1bWVudFsxMF0gIT0gKChuICU9IDExKSA8PSAxID8gMCA6IDExIC0gbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChkb2N1bWVudC5sZW5ndGggPT09IDE0IHx8IC8wezE0fS8udGVzdChkb2N1bWVudCkpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSBbNiwgNSwgNCwgMywgMiwgOSwgOCwgNywgNiwgNSwgNCwgMywgMl07XG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IDA7IGkgPCAxMjsgbiArPSBkb2N1bWVudFtpXSAqIGJhc2VbKytpXSkgO1xuICAgICAgaWYgKGRvY3VtZW50WzEyXSAhPSAoKG4gJT0gMTEpIDwgMiA/IDAgOiAxMSAtIG4pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSAwOyBpIDw9IDEyOyBuICs9IGRvY3VtZW50W2ldICogYmFzZVtpKytdKSA7XG4gICAgICBpZiAoZG9jdW1lbnRbMTNdICE9ICgobiAlPSAxMSkgPCAyID8gMCA6IDExIC0gbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc1ZhbGlkUlVUKGRvY3VtZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIWRvY3VtZW50IHx8IGRvY3VtZW50LnRyaW0oKS5sZW5ndGggPCAzKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZG9jdW1lbnRIYW5kbGVkID0gZG9jdW1lbnQucmVwbGFjZSgvW14wLTlrS10vZywgJycpO1xuXG4gICAgaWYgKGRvY3VtZW50SGFuZGxlZC5sZW5ndGggPCAzKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBjYWxjRHYgPSAocnV0OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlOiBzdHJpbmcgPSBgJHtydXR9YDtcbiAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgbGV0IG11bHQgPSAyO1xuXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpbmRleCA9IG11bHQgKiBOdW1iZXIodmFsdWUuY2hhckF0KHZhbHVlLmxlbmd0aCAtIGkpKTtcblxuICAgICAgICBzdW0gKz0gaW5kZXg7XG5cbiAgICAgICAgaWYgKG11bHQgPCA3KSB7XG4gICAgICAgICAgbXVsdCArPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG11bHQgPSAyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGR2RXNwZXJhZG8gPSAxMSAtIChzdW0gJSAxMSk7XG4gICAgICBpZiAoZHZFc3BlcmFkbyA9PT0gMTApIHJldHVybiAnSyc7XG4gICAgICBpZiAoZHZFc3BlcmFkbyA9PT0gMTEpIHJldHVybiAnMCc7XG4gICAgICByZXR1cm4gYCR7ZHZFc3BlcmFkb31gO1xuICAgIH07XG5cbiAgICBjb25zdCBudW0gPSBkb2N1bWVudEhhbmRsZWQuc2xpY2UoMCwgLTEpO1xuICAgIGNvbnN0IGRndiA9IGRvY3VtZW50SGFuZGxlZC5zbGljZSgtMSkudG9VcHBlckNhc2UoKTtcblxuICAgIGNvbnN0IGR2Q2FsYyA9IGNhbGNEdihudW0pO1xuICAgIHJldHVybiBkdkNhbGMgPT09IGRndjtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWxpZFJGQyhkb2N1bWVudDogc3RyaW5nKSB7XG4gICAgY29uc3QgUkZDX1JFR0VYUCA9IC9eKFtBLVrDkVxceDI2XXszLDR9KShbMC05XXs2fSkoW0EtWjAtOV17M30pJC87XG4gICAgY29uc3QgU1BFQ0lBTF9DQVNFUyA9IHtcbiAgICAgIFhFWFgwMTAxMDEwMDA6ICdmb3JlaWduJyxcbiAgICAgIFhBWFgwMTAxMDEwMDA6ICdnZW5lcmljJ1xuICAgIH07XG4gICAgY29uc3QgRk9SQklEREVOX1dPUkRTID0gW1xuICAgICAgJ0JVRUknLFxuICAgICAgJ0JVRVknLFxuICAgICAgJ0NBQ0EnLFxuICAgICAgJ0NBQ08nLFxuICAgICAgJ0NBR0EnLFxuICAgICAgJ0NBR08nLFxuICAgICAgJ0NBS0EnLFxuICAgICAgJ0NBS08nLFxuICAgICAgJ0NPR0UnLFxuICAgICAgJ0NPSkEnLFxuICAgICAgJ0NPSkUnLFxuICAgICAgJ0NPSkknLFxuICAgICAgJ0NPSk8nLFxuICAgICAgJ0NVTE8nLFxuICAgICAgJ0ZFVE8nLFxuICAgICAgJ0dVRVknLFxuICAgICAgJ0pPVE8nLFxuICAgICAgJ0tBQ0EnLFxuICAgICAgJ0tBQ08nLFxuICAgICAgJ0tBR0EnLFxuICAgICAgJ0tBR08nLFxuICAgICAgJ0tPR0UnLFxuICAgICAgJ0tPSk8nLFxuICAgICAgJ0tBS0EnLFxuICAgICAgJ0tVTE8nLFxuICAgICAgJ01BTUUnLFxuICAgICAgJ01BTU8nLFxuICAgICAgJ01FQVInLFxuICAgICAgJ01FQVMnLFxuICAgICAgJ01FT04nLFxuICAgICAgJ01JT04nLFxuICAgICAgJ01PQ08nLFxuICAgICAgJ01VTEEnLFxuICAgICAgJ1BFREEnLFxuICAgICAgJ1BFRE8nLFxuICAgICAgJ1BFTkUnLFxuICAgICAgJ1BVVEEnLFxuICAgICAgJ1BVVE8nLFxuICAgICAgJ1FVTE8nLFxuICAgICAgJ1JBVEEnLFxuICAgICAgJ1JVSU4nXG4gICAgXTtcblxuICAgIGNvbnN0IFZBTFVFU19NQVAgPSB7XG4gICAgICAwOiAwLFxuICAgICAgMTogMSxcbiAgICAgIDI6IDIsXG4gICAgICAzOiAzLFxuICAgICAgNDogNCxcbiAgICAgIDU6IDUsXG4gICAgICA2OiA2LFxuICAgICAgNzogNyxcbiAgICAgIDg6IDgsXG4gICAgICA5OiA5LFxuICAgICAgQTogMTAsXG4gICAgICBCOiAxMSxcbiAgICAgIEM6IDEyLFxuICAgICAgRDogMTMsXG4gICAgICBFOiAxNCxcbiAgICAgIEY6IDE1LFxuICAgICAgRzogMTYsXG4gICAgICBIOiAxNyxcbiAgICAgIEk6IDE4LFxuICAgICAgSjogMTksXG4gICAgICBLOiAyMCxcbiAgICAgIEw6IDIxLFxuICAgICAgTTogMjIsXG4gICAgICBOOiAyMyxcbiAgICAgICcmJzogMjQsXG4gICAgICBPOiAyNSxcbiAgICAgIFA6IDI2LFxuICAgICAgUTogMjcsXG4gICAgICBSOiAyOCxcbiAgICAgIFM6IDI5LFxuICAgICAgVDogMzAsXG4gICAgICBVOiAzMSxcbiAgICAgIFY6IDMyLFxuICAgICAgVzogMzMsXG4gICAgICBYOiAzNCxcbiAgICAgIFk6IDM1LFxuICAgICAgWjogMzYsXG4gICAgICAnICc6IDM3LFxuICAgICAgw5E6IDM4XG4gICAgfTtcblxuICAgIGNvbnN0IGdldFNjb3JlID0gKGRvYzogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gZG9jLnNwbGl0KCcnKS5yZXZlcnNlKCkucmVkdWNlKChzdW0sIGNoYXIsIGkpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpICsgMjtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBWQUxVRVNfTUFQW2NoYXJdIHx8IDA7XG4gICAgICAgIHJldHVybiBzdW0gKyB2YWx1ZSAqIGluZGV4O1xuICAgICAgfSwgMCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBhcnNlSW5wdXQgPSAoZG9jOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBTdHJpbmcoZG9jKVxuICAgICAgICAudHJpbSgpXG4gICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgIC5yZXBsYWNlKC9bXjAtOUEtWsORXFx4MjZdL2csICcnKTtcbiAgICB9O1xuXG4gICAgY29uc3QgdmFsaWRhdGVEYXRlID0gKGRvYzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBkYXRlU3RyID0gZG9jLnNsaWNlKDAsIC0zKS5zbGljZSgtNik7XG4gICAgICBjb25zdCB5ZWFyID0gZGF0ZVN0ci5zbGljZSgwLCAyKTtcbiAgICAgIGNvbnN0IG1vbnRoID0gZGF0ZVN0ci5zbGljZSgyLCA0KTtcbiAgICAgIGNvbnN0IGRheSA9IGRhdGVTdHIuc2xpY2UoNCwgNik7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoYDIwJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbiAgICAgIHJldHVybiAhaXNOYU4oZGF0ZS5nZXRUaW1lKCkpO1xuICAgIH07XG5cbiAgICBjb25zdCB2YWxpZGF0ZVZlcmlmaWNhdGlvbkRpZ2l0ID0gKGRvYzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBkaWdpdCA9IGRvYy5zbGljZSgtMSk7XG4gICAgICBjb25zdCByZmMgPSBkb2MubGVuZ3RoID09PSAxMiA/IGAgJHtkb2N9YCA6IGRvYztcbiAgICAgIGNvbnN0IGJhc2UgPSByZmMuc2xpY2UoMCwgLTEpO1xuICAgICAgY29uc3Qgc2NvcmUgPSBnZXRTY29yZShiYXNlKTtcbiAgICAgIGNvbnN0IG1vZCA9ICgxMTAwMCAtIHNjb3JlKSAlIDExO1xuICAgICAgaWYgKG1vZCA9PT0gMTEpIHJldHVybiBkaWdpdCA9PT0gJzAnO1xuICAgICAgaWYgKG1vZCA9PT0gMTApIHJldHVybiBkaWdpdCA9PT0gJ0EnO1xuICAgICAgcmV0dXJuIFN0cmluZyhtb2QpID09PSBkaWdpdDtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNTcGVjaWFsQ2FzZSA9IChkb2M6IHN0cmluZykgPT4geyByZXR1cm4gZG9jIGluIFNQRUNJQUxfQ0FTRVM7IH07XG5cbiAgICBjb25zdCBoYXNGb3JiaWRkZW5Xb3JkcyA9IChkb2M6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgcHJlZml4ID0gKGRvYyB8fCAnJykuc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gRk9SQklEREVOX1dPUkRTLmluY2x1ZGVzKHByZWZpeCk7XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbnB1dCA9IHBhcnNlSW5wdXQoZG9jdW1lbnQpO1xuXG4gICAgICBpZiAoaXNTcGVjaWFsQ2FzZShpbnB1dCkpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGhhc1ZhbGlkRm9ybWF0ID0gUkZDX1JFR0VYUC50ZXN0KGlucHV0KTtcbiAgICAgIGlmICghaGFzVmFsaWRGb3JtYXQpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGhhc1ZhbGlkRGF0ZSA9IHZhbGlkYXRlRGF0ZShpbnB1dCk7XG4gICAgICBpZiAoIWhhc1ZhbGlkRGF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgaGFzVmFsaWREaWdpdCA9IHZhbGlkYXRlVmVyaWZpY2F0aW9uRGlnaXQoaW5wdXQpO1xuICAgICAgaWYgKCFoYXNWYWxpZERpZ2l0KSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoaGFzRm9yYmlkZGVuV29yZHMoaW5wdXQpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG5vdCB0byBkb1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBpc1ZhbGlkVXJsKHR4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVnZXggPSAvKGh0dHBzPzpcXC9cXC8oPzpbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT9cXC4pK1thLXowLTldW2EtejAtOS1dezAsNjF9W2EtejAtOV0pKDo/XFxkKilcXC8/KFthLXpfXFxcXC8wLTlcXC0jLl0qKVxcPz8oW2Etel9cXFxcLzAtOVxcLSM9Jl0qKS9nO1xuICAgIHJldHVybiByZWdleC50ZXN0KHR4dCk7XG4gIH1cblxuICBzdGF0aWMgaXNWYWxpZFppcENvZGUoemlwQ29kZTogc3RyaW5nLCBjb3VudHJ5Pzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGVuZ3RoID0ge1xuICAgICAgYnI6IDgsXG4gICAgICBjbDogNyxcbiAgICAgIG14OiA1XG4gICAgfVtjb3VudHJ5IHx8ICdiciddO1xuXG4gICAgcmV0dXJuIGAke3RoaXMuaGFuZGxlT25seU51bWJlcnMoemlwQ29kZSl9YC5sZW5ndGggPT09IGxlbmd0aDtcbiAgfVxuXG4gIHN0YXRpYyBpc1ZhbGlkRW1haWwoZW1haWw6IHN0cmluZykge1xuICAgIHJldHVybiAvXltcXHctLl0rQChbXFx3LV0rXFwuKStbXFx3LV17MSw2NH0kLy50ZXN0KGVtYWlsIHx8ICcnKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRSYW5kb21TdHJpbmcobGVuOiBudW1iZXIsIGNoYXJTZXQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNoYXJTZXQgPSBjaGFyU2V0IHx8ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSc7XG5cbiAgICBjb25zdCByYW5kb21TdHJpbmc6IHN0cmluZyA9IG5ldyBBcnJheShsZW4pXG4gICAgICAuZmlsbCgnMScpXG4gICAgICAubWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGNoYXJTZXQ/LmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyU2V0Py5sZW5ndGgpKTtcbiAgICAgIH0pXG4gICAgICAuam9pbignJyk7XG4gICAgcmV0dXJuIHJhbmRvbVN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBoYW5kbGVPbmx5TnVtYmVycyh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCgvW14wLTldL2cpLCAnJyk7XG4gIH1cblxuICBzdGF0aWMgaGFuZGxlT25seUFscGhhTnVtZXJpYyh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoL1teMC05QS1aYS16XS8sICdnJyksICcnKTtcbiAgfVxuXG4gIHN0YXRpYyBjYXBpdGFsaXplKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCR7dmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHt2YWx1ZS5zbGljZSgxKX1gO1xuICB9XG5cbiAgc3RhdGljIGZvcm1hdFppcENvZGUoemlwQ29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXppcENvZGUpIHJldHVybiB6aXBDb2RlO1xuICAgIGNvbnN0IGZvcm1hdGVkOiBzdHJpbmcgPSB6aXBDb2RlXG4gICAgICAucmVwbGFjZSgvXihcXGR7NX0pKFxcZCkvLCAnJDEtJDInKVxuICAgICAgLnJlcGxhY2UoL1xcLihcXGR7M30pKFxcZCkvLCAnLiQxLSQyJyk7XG5cbiAgICByZXR1cm4gYCR7Zm9ybWF0ZWR9YDtcbiAgfVxuXG4gIHN0YXRpYyBmb3JtYXRGaWxlU2l6ZShzaXplOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XG4gICAgbGV0IGwgPSAwO1xuICAgIHdoaWxlIChzaXplID49IDEwMjQgJiYgKytsKSB7XG4gICAgICBzaXplIC89IDEwMjQ7XG4gICAgfVxuICAgIHJldHVybiBgJHtzaXplLnRvRml4ZWQoc2l6ZSA8IDEwICYmIGwgPiAwID8gMSA6IDApfSAke3VuaXRzW2xdfWA7XG4gIH1cblxuICBzdGF0aWMgc3VmZmx1ZShkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICBmb3IgKGxldCBpID0gZGF0YS5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgICBjb25zdCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogaSk7XG4gICAgICBjb25zdCB0ZW1wID0gZGF0YVtpXTtcbiAgICAgIGRhdGFbaV0gPSBkYXRhW2pdO1xuICAgICAgZGF0YVtqXSA9IHRlbXA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc3RhdGljIGhhbmRsZUJsb2JGaWxlKHRoZUJsb2I6IGFueSwgZmlsZU5hbWU6IHN0cmluZywgZmlsZVR5cGU6IHN0cmluZykge1xuICAgIGZ1bmN0aW9uIGJsb2JUb0ZpbGUodGhlQmxvYjogYW55LCBmaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgICBjb25zdCBiID0gdGhlQmxvYjtcbiAgICAgIGIubGFzdE1vZGlmaWVkRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICBiLm5hbWUgPSBmaWxlTmFtZTtcbiAgICAgIHJldHVybiBiO1xuICAgIH1cblxuICAgIGxldCBmaWxlOiBhbnk7XG4gICAgaWYgKCEobmF2aWdhdG9yIGFzIGFueSkubXNTYXZlQmxvYikge1xuICAgICAgZmlsZSA9IG5ldyBGaWxlKFt0aGVCbG9iXSwgZmlsZU5hbWUsIHtcbiAgICAgICAgdHlwZTogZmlsZVR5cGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZSA9IG5ldyBCbG9iKFt0aGVCbG9iXSwge1xuICAgICAgICB0eXBlOiBmaWxlVHlwZSxcbiAgICAgIH0pO1xuICAgICAgZmlsZSA9IGJsb2JUb0ZpbGUoZmlsZSwgZmlsZU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIHN0YXRpYyB0cnVuY2F0ZSh0ZXh0OiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyID0gMjUpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1pZENoYXIgPSAnLi4uJztcbiAgICBpZiAoIXRleHQpIHJldHVybiBtaWRDaGFyO1xuICAgIGlmICh0ZXh0ICYmIHRleHQubGVuZ3RoIDw9IG1heExlbmd0aCkgcmV0dXJuIHRleHQ7XG5cbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5jZWlsKG1heExlbmd0aCAvIDIpO1xuICAgIGNvbnN0IHJpZ2h0ID0gdGV4dC5sZW5ndGggLSBsZWZ0ICsgMTtcblxuICAgIHJldHVybiBgJHt0ZXh0LnN1YnN0cigwLCBsZWZ0KX0gJHttaWRDaGFyfSAke3RleHQuc3Vic3RyaW5nKHJpZ2h0KX1gO1xuICB9XG5cbiAgc3RhdGljIGlzTG9jYWxob3N0KCkge1xuICAgIGNvbnN0IHsgaHJlZiB9ID0gd2luZG93Py5sb2NhdGlvbjtcbiAgICBpZiAoIWhyZWYpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gaHJlZj8uc2VhcmNoKCdsb2NhbGhvc3QnKSA+PSAwO1xuICB9XG5cbiAgc3RhdGljIGlzU2FtZU9yaWdpbihmcm9udGVuZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW5pdGlhbFBhdGg6IHN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgcmV0dXJuIChpbml0aWFsUGF0aCB8fCAnJykgPT09IGZyb250ZW5kO1xuICB9XG5cbiAgc3RhdGljIHJlcGxhY2VWYXJpYWJsZXMoZGF0YTogc3RyaW5nLCBvYmo6IGFueSkge1xuICAgIGxldCBoYW5kbGVkID0gZGF0YTtcbiAgICBPYmplY3QuZW50cmllcyhvYmopLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaGFuZGxlZCA9IGhhbmRsZWQucmVwbGFjZShuZXcgUmVnRXhwKGB7JHtrZXl9fWAsICdnJyksIGAke3ZhbHVlfWApO1xuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVkO1xuICB9XG5cbiAgc3RhdGljIHRyaW1WYWx1ZXNUb1NhdmUob2JqOiBhbnksIGZpZWxkczogc3RyaW5nW10pIHtcbiAgICBsZXQgcmV0ID0gb2JqO1xuICAgIGNvbnN0IGdyb3VwZWQgPSBmaWVsZHMuam9pbignIycpO1xuICAgIE9iamVjdC5lbnRyaWVzKG9iaikubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmIChncm91cGVkLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgcmV0ID0ge1xuICAgICAgICAgIC4uLnJldCxcbiAgICAgICAgICBba2V5XTogYCR7dmFsdWV9YC50cmltKClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBNb25rZXlFY3hMb2dzRXJyb3JUeXBlcyA9ICdvaycgfFxuICAnZGVidWcnIHxcbiAgJ2luZm8nIHxcbiAgJ25vdGljZScgfFxuICAnd2FybicgfFxuICAnZXJyb3InIHxcbiAgJ2NyaXRpY2FsJyB8XG4gICdhbGVydCcgfFxuICAnZW1lcmcnO1xuXG5leHBvcnQgdHlwZSBNb25rZXlFY3hMb2dQYXJhbXMgPSB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgY29udGV4dD86IGFueTtcbiAgZXJyb3I/OiBFcnJvcjtcbiAgdHlwZT86IE1vbmtleUVjeExvZ3NFcnJvclR5cGVzO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ua2V5RWN4TG9ncyB7XG4gIHN0YXRpYyBsb2cocGFyYW1zOiBNb25rZXlFY3hMb2dQYXJhbXMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyB0eXBlLCBtZXNzYWdlLCBjb250ZXh0LCBlcnJvciB9ID0gcGFyYW1zO1xuICAgICAgZGF0YWRvZ0xvZ3MubG9nZ2VyW3R5cGUgfHwgJ2Vycm9yJ10obWVzc2FnZSwgY29udGV4dCwgZXJyb3IpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG5vdCB0byBkb1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyVG9CYXNlNjQoYnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XG4gIGxldCBiaW5hcnkgPSAnJztcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICBjb25zdCBsZW4gPSBieXRlcy5ieXRlTGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xuICB9XG4gIHJldHVybiB3aW5kb3cuYnRvYShiaW5hcnkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0VG9CdWZmZXIoYmFzZTY0OiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB7XG4gIGNvbnN0IGJpbmFyeVN0cmluZyA9IHdpbmRvdy5hdG9iKGJhc2U2NCk7XG4gIGNvbnN0IGxlbiA9IGJpbmFyeVN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGJ5dGVzW2ldID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gIH1cbiAgcmV0dXJuIGJ5dGVzLmJ1ZmZlcjtcbn1cbiJdfQ==