@mapvx/web-js 1.0.0

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 (397) hide show
  1. package/LICENSE.md +19 -0
  2. package/README.md +257 -0
  3. package/dist/cjs/assets/icons.js +87 -0
  4. package/dist/cjs/assets/icons.js.map +1 -0
  5. package/dist/cjs/assets/route_animation_icon.svg +15 -0
  6. package/dist/cjs/assets/user-dot-icon.svg +3 -0
  7. package/dist/cjs/config/sdkConfig.js +3 -0
  8. package/dist/cjs/config/sdkConfig.js.map +1 -0
  9. package/dist/cjs/controllers/routeController.js +1054 -0
  10. package/dist/cjs/controllers/routeController.js.map +1 -0
  11. package/dist/cjs/domain/models/_internal.js +15 -0
  12. package/dist/cjs/domain/models/_internal.js.map +1 -0
  13. package/dist/cjs/domain/models/_rtl.js +10 -0
  14. package/dist/cjs/domain/models/_rtl.js.map +1 -0
  15. package/dist/cjs/domain/models/animation.js +63 -0
  16. package/dist/cjs/domain/models/animation.js.map +1 -0
  17. package/dist/cjs/domain/models/banner.js +24 -0
  18. package/dist/cjs/domain/models/banner.js.map +1 -0
  19. package/dist/cjs/domain/models/categories.js +25 -0
  20. package/dist/cjs/domain/models/categories.js.map +1 -0
  21. package/dist/cjs/domain/models/cityFilterOption.js +3 -0
  22. package/dist/cjs/domain/models/cityFilterOption.js.map +1 -0
  23. package/dist/cjs/domain/models/configuration.js +3 -0
  24. package/dist/cjs/domain/models/configuration.js.map +1 -0
  25. package/dist/cjs/domain/models/cssCustomization.js +3 -0
  26. package/dist/cjs/domain/models/cssCustomization.js.map +1 -0
  27. package/dist/cjs/domain/models/fitOptions.js +3 -0
  28. package/dist/cjs/domain/models/fitOptions.js.map +1 -0
  29. package/dist/cjs/domain/models/innerFloors.js +3 -0
  30. package/dist/cjs/domain/models/innerFloors.js.map +1 -0
  31. package/dist/cjs/domain/models/institution.js +44 -0
  32. package/dist/cjs/domain/models/institution.js.map +1 -0
  33. package/dist/cjs/domain/models/latLng.js +3 -0
  34. package/dist/cjs/domain/models/latLng.js.map +1 -0
  35. package/dist/cjs/domain/models/location.js +3 -0
  36. package/dist/cjs/domain/models/location.js.map +1 -0
  37. package/dist/cjs/domain/models/loggeable.js +52 -0
  38. package/dist/cjs/domain/models/loggeable.js.map +1 -0
  39. package/dist/cjs/domain/models/mapCamera.js +3 -0
  40. package/dist/cjs/domain/models/mapCamera.js.map +1 -0
  41. package/dist/cjs/domain/models/mapConfig.js +15 -0
  42. package/dist/cjs/domain/models/mapConfig.js.map +1 -0
  43. package/dist/cjs/domain/models/marker.js +400 -0
  44. package/dist/cjs/domain/models/marker.js.map +1 -0
  45. package/dist/cjs/domain/models/multilanguage.js +18 -0
  46. package/dist/cjs/domain/models/multilanguage.js.map +1 -0
  47. package/dist/cjs/domain/models/openingHours.js +3 -0
  48. package/dist/cjs/domain/models/openingHours.js.map +1 -0
  49. package/dist/cjs/domain/models/place.js +101 -0
  50. package/dist/cjs/domain/models/place.js.map +1 -0
  51. package/dist/cjs/domain/models/platform.js +3 -0
  52. package/dist/cjs/domain/models/platform.js.map +1 -0
  53. package/dist/cjs/domain/models/popover.js +3 -0
  54. package/dist/cjs/domain/models/popover.js.map +1 -0
  55. package/dist/cjs/domain/models/product.js +3 -0
  56. package/dist/cjs/domain/models/product.js.map +1 -0
  57. package/dist/cjs/domain/models/property.js +104 -0
  58. package/dist/cjs/domain/models/property.js.map +1 -0
  59. package/dist/cjs/domain/models/route.js +166 -0
  60. package/dist/cjs/domain/models/route.js.map +1 -0
  61. package/dist/cjs/domain/models/routeConfiguration.js +80 -0
  62. package/dist/cjs/domain/models/routeConfiguration.js.map +1 -0
  63. package/dist/cjs/domain/models/routeInstance.js +30 -0
  64. package/dist/cjs/domain/models/routeInstance.js.map +1 -0
  65. package/dist/cjs/domain/models/routeStyle.js +3 -0
  66. package/dist/cjs/domain/models/routeStyle.js.map +1 -0
  67. package/dist/cjs/domain/models/transport.js +22 -0
  68. package/dist/cjs/domain/models/transport.js.map +1 -0
  69. package/dist/cjs/domain/ports/ICache.js +3 -0
  70. package/dist/cjs/domain/ports/ICache.js.map +1 -0
  71. package/dist/cjs/domain/ports/IHttpClient.js +3 -0
  72. package/dist/cjs/domain/ports/IHttpClient.js.map +1 -0
  73. package/dist/cjs/domain/ports/ILogger.js +23 -0
  74. package/dist/cjs/domain/ports/ILogger.js.map +1 -0
  75. package/dist/cjs/domain/ports/index.js +10 -0
  76. package/dist/cjs/domain/ports/index.js.map +1 -0
  77. package/dist/cjs/index.js +76 -0
  78. package/dist/cjs/index.js.map +1 -0
  79. package/dist/cjs/infrastructure/cache/CacheManager.js +236 -0
  80. package/dist/cjs/infrastructure/cache/CacheManager.js.map +1 -0
  81. package/dist/cjs/infrastructure/cache/LRUCache.js +153 -0
  82. package/dist/cjs/infrastructure/cache/LRUCache.js.map +1 -0
  83. package/dist/cjs/infrastructure/cache/PersistentCache.js +160 -0
  84. package/dist/cjs/infrastructure/cache/PersistentCache.js.map +1 -0
  85. package/dist/cjs/infrastructure/cache/cacheConfig.js +70 -0
  86. package/dist/cjs/infrastructure/cache/cacheConfig.js.map +1 -0
  87. package/dist/cjs/infrastructure/http/FetchHttpClient.js +75 -0
  88. package/dist/cjs/infrastructure/http/FetchHttpClient.js.map +1 -0
  89. package/dist/cjs/infrastructure/logging/CountlyLogger.js +78 -0
  90. package/dist/cjs/infrastructure/logging/CountlyLogger.js.map +1 -0
  91. package/dist/cjs/interfaces/cache.js +3 -0
  92. package/dist/cjs/interfaces/cache.js.map +1 -0
  93. package/dist/cjs/interfaces/healthResponse.js +3 -0
  94. package/dist/cjs/interfaces/healthResponse.js.map +1 -0
  95. package/dist/cjs/interfaces/institutionResponse.js +3 -0
  96. package/dist/cjs/interfaces/institutionResponse.js.map +1 -0
  97. package/dist/cjs/interfaces/metadata.js +3 -0
  98. package/dist/cjs/interfaces/metadata.js.map +1 -0
  99. package/dist/cjs/interfaces/placeResponse.js +3 -0
  100. package/dist/cjs/interfaces/placeResponse.js.map +1 -0
  101. package/dist/cjs/interfaces/routeCacheResponse.js +3 -0
  102. package/dist/cjs/interfaces/routeCacheResponse.js.map +1 -0
  103. package/dist/cjs/interfaces/routeResponse.js +3 -0
  104. package/dist/cjs/interfaces/routeResponse.js.map +1 -0
  105. package/dist/cjs/interfaces/styleResponse.js +3 -0
  106. package/dist/cjs/interfaces/styleResponse.js.map +1 -0
  107. package/dist/cjs/logger/logger.js +91 -0
  108. package/dist/cjs/logger/logger.js.map +1 -0
  109. package/dist/cjs/logger/rollbar.js +24 -0
  110. package/dist/cjs/logger/rollbar.js.map +1 -0
  111. package/dist/cjs/map/map.js +1457 -0
  112. package/dist/cjs/map/map.js.map +1 -0
  113. package/dist/cjs/repository/repository.js +574 -0
  114. package/dist/cjs/repository/repository.js.map +1 -0
  115. package/dist/cjs/repository/requester.js +590 -0
  116. package/dist/cjs/repository/requester.js.map +1 -0
  117. package/dist/cjs/sdk.js +351 -0
  118. package/dist/cjs/sdk.js.map +1 -0
  119. package/dist/cjs/utils/error.js +20 -0
  120. package/dist/cjs/utils/error.js.map +1 -0
  121. package/dist/cjs/utils/images.js +26 -0
  122. package/dist/cjs/utils/images.js.map +1 -0
  123. package/dist/cjs/utils/nav-functions.js +150 -0
  124. package/dist/cjs/utils/nav-functions.js.map +1 -0
  125. package/dist/cjs/utils/opening-hours-helper.js +911 -0
  126. package/dist/cjs/utils/opening-hours-helper.js.map +1 -0
  127. package/dist/cjs/utils/route-utils.js +58 -0
  128. package/dist/cjs/utils/route-utils.js.map +1 -0
  129. package/dist/cjs/utils/update-css.js +77 -0
  130. package/dist/cjs/utils/update-css.js.map +1 -0
  131. package/dist/cjs/utils/utils.js +105 -0
  132. package/dist/cjs/utils/utils.js.map +1 -0
  133. package/dist/es/assets/icons.d.ts +86 -0
  134. package/dist/es/assets/icons.d.ts.map +1 -0
  135. package/dist/es/assets/icons.js +83 -0
  136. package/dist/es/assets/icons.js.map +1 -0
  137. package/dist/es/assets/route_animation_icon.svg +15 -0
  138. package/dist/es/assets/user-dot-icon.svg +3 -0
  139. package/dist/es/config/sdkConfig.d.ts +105 -0
  140. package/dist/es/config/sdkConfig.d.ts.map +1 -0
  141. package/dist/es/config/sdkConfig.js +2 -0
  142. package/dist/es/config/sdkConfig.js.map +1 -0
  143. package/dist/es/controllers/routeController.d.ts +161 -0
  144. package/dist/es/controllers/routeController.d.ts.map +1 -0
  145. package/dist/es/controllers/routeController.js +1050 -0
  146. package/dist/es/controllers/routeController.js.map +1 -0
  147. package/dist/es/domain/models/_internal.d.ts +21 -0
  148. package/dist/es/domain/models/_internal.d.ts.map +1 -0
  149. package/dist/es/domain/models/_internal.js +11 -0
  150. package/dist/es/domain/models/_internal.js.map +1 -0
  151. package/dist/es/domain/models/_rtl.d.ts +7 -0
  152. package/dist/es/domain/models/_rtl.d.ts.map +1 -0
  153. package/dist/es/domain/models/_rtl.js +7 -0
  154. package/dist/es/domain/models/_rtl.js.map +1 -0
  155. package/dist/es/domain/models/animation.d.ts +161 -0
  156. package/dist/es/domain/models/animation.d.ts.map +1 -0
  157. package/dist/es/domain/models/animation.js +58 -0
  158. package/dist/es/domain/models/animation.js.map +1 -0
  159. package/dist/es/domain/models/banner.d.ts +64 -0
  160. package/dist/es/domain/models/banner.d.ts.map +1 -0
  161. package/dist/es/domain/models/banner.js +20 -0
  162. package/dist/es/domain/models/banner.js.map +1 -0
  163. package/dist/es/domain/models/categories.d.ts +157 -0
  164. package/dist/es/domain/models/categories.d.ts.map +1 -0
  165. package/dist/es/domain/models/categories.js +20 -0
  166. package/dist/es/domain/models/categories.js.map +1 -0
  167. package/dist/es/domain/models/cityFilterOption.d.ts +15 -0
  168. package/dist/es/domain/models/cityFilterOption.d.ts.map +1 -0
  169. package/dist/es/domain/models/cityFilterOption.js +2 -0
  170. package/dist/es/domain/models/cityFilterOption.js.map +1 -0
  171. package/dist/es/domain/models/configuration.d.ts +523 -0
  172. package/dist/es/domain/models/configuration.d.ts.map +1 -0
  173. package/dist/es/domain/models/configuration.js +2 -0
  174. package/dist/es/domain/models/configuration.js.map +1 -0
  175. package/dist/es/domain/models/cssCustomization.d.ts +63 -0
  176. package/dist/es/domain/models/cssCustomization.d.ts.map +1 -0
  177. package/dist/es/domain/models/cssCustomization.js +2 -0
  178. package/dist/es/domain/models/cssCustomization.js.map +1 -0
  179. package/dist/es/domain/models/fitOptions.d.ts +175 -0
  180. package/dist/es/domain/models/fitOptions.d.ts.map +1 -0
  181. package/dist/es/domain/models/fitOptions.js +2 -0
  182. package/dist/es/domain/models/fitOptions.js.map +1 -0
  183. package/dist/es/domain/models/innerFloors.d.ts +42 -0
  184. package/dist/es/domain/models/innerFloors.d.ts.map +1 -0
  185. package/dist/es/domain/models/innerFloors.js +2 -0
  186. package/dist/es/domain/models/innerFloors.js.map +1 -0
  187. package/dist/es/domain/models/institution.d.ts +64 -0
  188. package/dist/es/domain/models/institution.d.ts.map +1 -0
  189. package/dist/es/domain/models/institution.js +40 -0
  190. package/dist/es/domain/models/institution.js.map +1 -0
  191. package/dist/es/domain/models/latLng.d.ts +14 -0
  192. package/dist/es/domain/models/latLng.d.ts.map +1 -0
  193. package/dist/es/domain/models/latLng.js +2 -0
  194. package/dist/es/domain/models/latLng.js.map +1 -0
  195. package/dist/es/domain/models/location.d.ts +10 -0
  196. package/dist/es/domain/models/location.d.ts.map +1 -0
  197. package/dist/es/domain/models/location.js +2 -0
  198. package/dist/es/domain/models/location.js.map +1 -0
  199. package/dist/es/domain/models/loggeable.d.ts +43 -0
  200. package/dist/es/domain/models/loggeable.d.ts.map +1 -0
  201. package/dist/es/domain/models/loggeable.js +48 -0
  202. package/dist/es/domain/models/loggeable.js.map +1 -0
  203. package/dist/es/domain/models/mapCamera.d.ts +109 -0
  204. package/dist/es/domain/models/mapCamera.d.ts.map +1 -0
  205. package/dist/es/domain/models/mapCamera.js +2 -0
  206. package/dist/es/domain/models/mapCamera.js.map +1 -0
  207. package/dist/es/domain/models/mapConfig.d.ts +238 -0
  208. package/dist/es/domain/models/mapConfig.d.ts.map +1 -0
  209. package/dist/es/domain/models/mapConfig.js +12 -0
  210. package/dist/es/domain/models/mapConfig.js.map +1 -0
  211. package/dist/es/domain/models/marker.d.ts +301 -0
  212. package/dist/es/domain/models/marker.d.ts.map +1 -0
  213. package/dist/es/domain/models/marker.js +396 -0
  214. package/dist/es/domain/models/marker.js.map +1 -0
  215. package/dist/es/domain/models/multilanguage.d.ts +27 -0
  216. package/dist/es/domain/models/multilanguage.d.ts.map +1 -0
  217. package/dist/es/domain/models/multilanguage.js +14 -0
  218. package/dist/es/domain/models/multilanguage.js.map +1 -0
  219. package/dist/es/domain/models/openingHours.d.ts +30 -0
  220. package/dist/es/domain/models/openingHours.d.ts.map +1 -0
  221. package/dist/es/domain/models/openingHours.js +2 -0
  222. package/dist/es/domain/models/openingHours.js.map +1 -0
  223. package/dist/es/domain/models/place.d.ts +167 -0
  224. package/dist/es/domain/models/place.d.ts.map +1 -0
  225. package/dist/es/domain/models/place.js +97 -0
  226. package/dist/es/domain/models/place.js.map +1 -0
  227. package/dist/es/domain/models/platform.d.ts +6 -0
  228. package/dist/es/domain/models/platform.d.ts.map +1 -0
  229. package/dist/es/domain/models/platform.js +2 -0
  230. package/dist/es/domain/models/platform.js.map +1 -0
  231. package/dist/es/domain/models/popover.d.ts +14 -0
  232. package/dist/es/domain/models/popover.d.ts.map +1 -0
  233. package/dist/es/domain/models/popover.js +2 -0
  234. package/dist/es/domain/models/popover.js.map +1 -0
  235. package/dist/es/domain/models/product.d.ts +36 -0
  236. package/dist/es/domain/models/product.d.ts.map +1 -0
  237. package/dist/es/domain/models/product.js +2 -0
  238. package/dist/es/domain/models/product.js.map +1 -0
  239. package/dist/es/domain/models/property.d.ts +172 -0
  240. package/dist/es/domain/models/property.d.ts.map +1 -0
  241. package/dist/es/domain/models/property.js +100 -0
  242. package/dist/es/domain/models/property.js.map +1 -0
  243. package/dist/es/domain/models/route.d.ts +199 -0
  244. package/dist/es/domain/models/route.d.ts.map +1 -0
  245. package/dist/es/domain/models/route.js +160 -0
  246. package/dist/es/domain/models/route.js.map +1 -0
  247. package/dist/es/domain/models/routeConfiguration.d.ts +140 -0
  248. package/dist/es/domain/models/routeConfiguration.d.ts.map +1 -0
  249. package/dist/es/domain/models/routeConfiguration.js +75 -0
  250. package/dist/es/domain/models/routeConfiguration.js.map +1 -0
  251. package/dist/es/domain/models/routeInstance.d.ts +52 -0
  252. package/dist/es/domain/models/routeInstance.d.ts.map +1 -0
  253. package/dist/es/domain/models/routeInstance.js +26 -0
  254. package/dist/es/domain/models/routeInstance.js.map +1 -0
  255. package/dist/es/domain/models/routeStyle.d.ts +47 -0
  256. package/dist/es/domain/models/routeStyle.d.ts.map +1 -0
  257. package/dist/es/domain/models/routeStyle.js +2 -0
  258. package/dist/es/domain/models/routeStyle.js.map +1 -0
  259. package/dist/es/domain/models/transport.d.ts +176 -0
  260. package/dist/es/domain/models/transport.d.ts.map +1 -0
  261. package/dist/es/domain/models/transport.js +18 -0
  262. package/dist/es/domain/models/transport.js.map +1 -0
  263. package/dist/es/domain/ports/ICache.d.ts +70 -0
  264. package/dist/es/domain/ports/ICache.d.ts.map +1 -0
  265. package/dist/es/domain/ports/ICache.js +2 -0
  266. package/dist/es/domain/ports/ICache.js.map +1 -0
  267. package/dist/es/domain/ports/IHttpClient.d.ts +77 -0
  268. package/dist/es/domain/ports/IHttpClient.d.ts.map +1 -0
  269. package/dist/es/domain/ports/IHttpClient.js +2 -0
  270. package/dist/es/domain/ports/IHttpClient.js.map +1 -0
  271. package/dist/es/domain/ports/ILogger.d.ts +61 -0
  272. package/dist/es/domain/ports/ILogger.d.ts.map +1 -0
  273. package/dist/es/domain/ports/ILogger.js +19 -0
  274. package/dist/es/domain/ports/ILogger.js.map +1 -0
  275. package/dist/es/domain/ports/index.d.ts +9 -0
  276. package/dist/es/domain/ports/index.d.ts.map +1 -0
  277. package/dist/es/domain/ports/index.js +6 -0
  278. package/dist/es/domain/ports/index.js.map +1 -0
  279. package/dist/es/index.d.ts +58 -0
  280. package/dist/es/index.d.ts.map +1 -0
  281. package/dist/es/index.js +48 -0
  282. package/dist/es/index.js.map +1 -0
  283. package/dist/es/infrastructure/cache/CacheManager.d.ts +106 -0
  284. package/dist/es/infrastructure/cache/CacheManager.d.ts.map +1 -0
  285. package/dist/es/infrastructure/cache/CacheManager.js +232 -0
  286. package/dist/es/infrastructure/cache/CacheManager.js.map +1 -0
  287. package/dist/es/infrastructure/cache/LRUCache.d.ts +70 -0
  288. package/dist/es/infrastructure/cache/LRUCache.d.ts.map +1 -0
  289. package/dist/es/infrastructure/cache/LRUCache.js +149 -0
  290. package/dist/es/infrastructure/cache/LRUCache.js.map +1 -0
  291. package/dist/es/infrastructure/cache/PersistentCache.d.ts +58 -0
  292. package/dist/es/infrastructure/cache/PersistentCache.d.ts.map +1 -0
  293. package/dist/es/infrastructure/cache/PersistentCache.js +156 -0
  294. package/dist/es/infrastructure/cache/PersistentCache.js.map +1 -0
  295. package/dist/es/infrastructure/cache/cacheConfig.d.ts +51 -0
  296. package/dist/es/infrastructure/cache/cacheConfig.d.ts.map +1 -0
  297. package/dist/es/infrastructure/cache/cacheConfig.js +66 -0
  298. package/dist/es/infrastructure/cache/cacheConfig.js.map +1 -0
  299. package/dist/es/infrastructure/http/FetchHttpClient.d.ts +41 -0
  300. package/dist/es/infrastructure/http/FetchHttpClient.d.ts.map +1 -0
  301. package/dist/es/infrastructure/http/FetchHttpClient.js +71 -0
  302. package/dist/es/infrastructure/http/FetchHttpClient.js.map +1 -0
  303. package/dist/es/infrastructure/logging/CountlyLogger.d.ts +47 -0
  304. package/dist/es/infrastructure/logging/CountlyLogger.d.ts.map +1 -0
  305. package/dist/es/infrastructure/logging/CountlyLogger.js +74 -0
  306. package/dist/es/infrastructure/logging/CountlyLogger.js.map +1 -0
  307. package/dist/es/interfaces/cache.d.ts +5 -0
  308. package/dist/es/interfaces/cache.d.ts.map +1 -0
  309. package/dist/es/interfaces/cache.js +2 -0
  310. package/dist/es/interfaces/cache.js.map +1 -0
  311. package/dist/es/interfaces/healthResponse.d.ts +17 -0
  312. package/dist/es/interfaces/healthResponse.d.ts.map +1 -0
  313. package/dist/es/interfaces/healthResponse.js +2 -0
  314. package/dist/es/interfaces/healthResponse.js.map +1 -0
  315. package/dist/es/interfaces/institutionResponse.d.ts +12 -0
  316. package/dist/es/interfaces/institutionResponse.d.ts.map +1 -0
  317. package/dist/es/interfaces/institutionResponse.js +2 -0
  318. package/dist/es/interfaces/institutionResponse.js.map +1 -0
  319. package/dist/es/interfaces/metadata.d.ts +7 -0
  320. package/dist/es/interfaces/metadata.d.ts.map +1 -0
  321. package/dist/es/interfaces/metadata.js +2 -0
  322. package/dist/es/interfaces/metadata.js.map +1 -0
  323. package/dist/es/interfaces/placeResponse.d.ts +50 -0
  324. package/dist/es/interfaces/placeResponse.d.ts.map +1 -0
  325. package/dist/es/interfaces/placeResponse.js +2 -0
  326. package/dist/es/interfaces/placeResponse.js.map +1 -0
  327. package/dist/es/interfaces/routeCacheResponse.d.ts +13 -0
  328. package/dist/es/interfaces/routeCacheResponse.d.ts.map +1 -0
  329. package/dist/es/interfaces/routeCacheResponse.js +2 -0
  330. package/dist/es/interfaces/routeCacheResponse.js.map +1 -0
  331. package/dist/es/interfaces/routeResponse.d.ts +42 -0
  332. package/dist/es/interfaces/routeResponse.d.ts.map +1 -0
  333. package/dist/es/interfaces/routeResponse.js +2 -0
  334. package/dist/es/interfaces/routeResponse.js.map +1 -0
  335. package/dist/es/interfaces/styleResponse.d.ts +5 -0
  336. package/dist/es/interfaces/styleResponse.d.ts.map +1 -0
  337. package/dist/es/interfaces/styleResponse.js +2 -0
  338. package/dist/es/interfaces/styleResponse.js.map +1 -0
  339. package/dist/es/logger/logger.d.ts +14 -0
  340. package/dist/es/logger/logger.d.ts.map +1 -0
  341. package/dist/es/logger/logger.js +84 -0
  342. package/dist/es/logger/logger.js.map +1 -0
  343. package/dist/es/logger/rollbar.d.ts +4 -0
  344. package/dist/es/logger/rollbar.d.ts.map +1 -0
  345. package/dist/es/logger/rollbar.js +20 -0
  346. package/dist/es/logger/rollbar.js.map +1 -0
  347. package/dist/es/map/map.d.ts +598 -0
  348. package/dist/es/map/map.d.ts.map +1 -0
  349. package/dist/es/map/map.js +1430 -0
  350. package/dist/es/map/map.js.map +1 -0
  351. package/dist/es/repository/repository.d.ts +65 -0
  352. package/dist/es/repository/repository.d.ts.map +1 -0
  353. package/dist/es/repository/repository.js +570 -0
  354. package/dist/es/repository/repository.js.map +1 -0
  355. package/dist/es/repository/requester.d.ts +169 -0
  356. package/dist/es/repository/requester.d.ts.map +1 -0
  357. package/dist/es/repository/requester.js +586 -0
  358. package/dist/es/repository/requester.js.map +1 -0
  359. package/dist/es/sdk.d.ts +279 -0
  360. package/dist/es/sdk.d.ts.map +1 -0
  361. package/dist/es/sdk.js +346 -0
  362. package/dist/es/sdk.js.map +1 -0
  363. package/dist/es/utils/error.d.ts +8 -0
  364. package/dist/es/utils/error.d.ts.map +1 -0
  365. package/dist/es/utils/error.js +16 -0
  366. package/dist/es/utils/error.js.map +1 -0
  367. package/dist/es/utils/images.d.ts +8 -0
  368. package/dist/es/utils/images.d.ts.map +1 -0
  369. package/dist/es/utils/images.js +22 -0
  370. package/dist/es/utils/images.js.map +1 -0
  371. package/dist/es/utils/nav-functions.d.ts +85 -0
  372. package/dist/es/utils/nav-functions.d.ts.map +1 -0
  373. package/dist/es/utils/nav-functions.js +143 -0
  374. package/dist/es/utils/nav-functions.js.map +1 -0
  375. package/dist/es/utils/opening-hours-helper.d.ts +395 -0
  376. package/dist/es/utils/opening-hours-helper.d.ts.map +1 -0
  377. package/dist/es/utils/opening-hours-helper.js +906 -0
  378. package/dist/es/utils/opening-hours-helper.js.map +1 -0
  379. package/dist/es/utils/route-utils.d.ts +28 -0
  380. package/dist/es/utils/route-utils.d.ts.map +1 -0
  381. package/dist/es/utils/route-utils.js +54 -0
  382. package/dist/es/utils/route-utils.js.map +1 -0
  383. package/dist/es/utils/update-css.d.ts +12 -0
  384. package/dist/es/utils/update-css.d.ts.map +1 -0
  385. package/dist/es/utils/update-css.js +73 -0
  386. package/dist/es/utils/update-css.js.map +1 -0
  387. package/dist/es/utils/utils.d.ts +39 -0
  388. package/dist/es/utils/utils.d.ts.map +1 -0
  389. package/dist/es/utils/utils.js +97 -0
  390. package/dist/es/utils/utils.js.map +1 -0
  391. package/dist/umd/index.js +16874 -0
  392. package/dist/umd/index.js.map +1 -0
  393. package/dist/umd/styles.css +107 -0
  394. package/dist/umd/styles.css.map +1 -0
  395. package/dist/umd/styles.js +37 -0
  396. package/dist/umd/styles.js.map +1 -0
  397. package/package.json +198 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA,yGAAyG;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA,4BAA4B;AAC5B,wDAAwD;AACxD,IAAI;AACJ;AACA;AACA;AACA,IAAI,KAA4D;AAChE,QAAQ,CAC8H;AACtI,CAAC;AACD;;AAEA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB,aAAa;AAC7B,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,QAAQ;AACxB,gBAAgB,QAAQ;AACxB,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,OAAO;AACvB,gBAAgB,SAAS;AACzB,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,OAAO;AACvB,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA,4CAA4C,SAAS;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,QAAQ;AACxB,gBAAgB,OAAO;AACvB,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,SAAS;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,UAAU;AACzB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,eAAe;AAC9B,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,UAAU;AACzB,iBAAiB,eAAe;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,aAAa;AAC7B,gBAAgB,QAAQ;AACxB,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B,gBAAgB,QAAQ;AACxB,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,QAAQ;AACxB,gBAAgB,QAAQ;AACxB,gBAAgB,QAAQ;AACxB,gBAAgB,QAAQ;AACxB,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,aAAa,aAAa,oBAAoB,gBAAgB,kBAAkB,wBAAwB,SAAS,UAAU,wBAAwB,gBAAgB,oBAAoB,aAAa,cAAc,cAAc,aAAa,2BAA2B,2CAA2C,8BAA8B,MAAM,cAAc,aAAa,KAAK,aAAa,KAAK,aAAa,MAAM,YAAY,KAAK,aAAa,IAAI,aAAa;AAC/e;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,8BAA8B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,0EAA0E;;AAE1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kBAAkB;AAClD;AACA;AACA;AACA,sBAAsB;AACtB;AACA,sBAAsB;AACtB;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B,6BAA6B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA,kCAAkC,6FAA6F;AAC/H;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ,mKAAmK;AAC7L,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc,wKAAwK;AACxM;AACA;AACA;AACA;AACA,gCAAgC,oBAAoB;AACpD;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc,wKAAwK;AACxM,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,oBAAoB;AACpD;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6BAA6B;AAC7D;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yBAAyB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B,kBAAkB,MAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB,kBAAkB,MAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ,iBAAiB,aAAa;AACxD,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,eAAe,gEAAgE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,kBAAkB;AAClB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ,gBAAgB,mBAAmB;AAC7D,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA,gCAAgC,kBAAkB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,WAAW;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B,kBAAkB,WAAW;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B,kBAAkB,QAAQ;AAC1B,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oIAAoI;AACpI;;AAEA;AACA;AACA;AACA,uDAAuD;AACvD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,cAAc;AACd;AACA;AACA;;AAEA;AACA,kDAAkD,sBAAsB;AACxE,kBAAkB,SAAS;AAC3B,kBAAkB,QAAQ;AAC1B,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B,kBAAkB,UAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC,0BAA0B,QAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,0BAA0B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA,kCAAkC;AAClC;AACA;AACA,8BAA8B;AAC9B;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4HAA4H,KAAK;AACjI,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD;AACA;AACA;AACA;AACA,gCAAgC,0BAA0B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA,sCAAsC;AACtC;AACA;AACA,kCAAkC;AAClC;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,gDAAgD,oBAAoB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,sBAAsB;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,SAAS,qKAAqK,iBAAiB,wNAAwN,4BAA4B,mCAAmC,YAAY,sBAAsB;AAC1gB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,kBAAkB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,UAAU;AAC5B,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B,kBAAkB,QAAQ;AAC1B,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,UAAU;AAC5B,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B,kBAAkB,QAAQ;AAC1B,kBAAkB,SAAS;AAC3B,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,kBAAkB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,UAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,UAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,GAAG;AAC1B,uBAAuB,GAAG;AAC1B,uBAAuB,GAAG;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,oBAAoB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B,oBAAoB,SAAS;AAC7B,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,SAAS;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,QAAQ;AAC5B,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,kBAAkB;AAClB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wBAAwB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,MAAM;AAC5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,kBAAkB;AAClB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,cAAc;AAC1C;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,QAAQ;AAC3B,sBAAsB,SAAS;AAC/B;AACA;AACA,gCAAgC,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,GAAG;AACpG;;AAEA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA,sEAAsE;;AAEtE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,QAAQ;AAC3B,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,yDAAyD;AACzD;AACA;AACA,kBAAkB;AAClB;AACA,kBAAkB;AAClB;AACA,kBAAkB;AAClB;AACA;AACA,wCAAwC,4BAA4B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,QAAQ;AAC3B,mBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B,oBAAoB,QAAQ;AAC5B,oBAAoB,QAAQ;AAC5B,oBAAoB,UAAU;AAC9B,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B,oBAAoB,QAAQ;AAC5B,oBAAoB,QAAQ;AAC5B,oBAAoB,UAAU;AAC9B,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B,oBAAoB,QAAQ;AAC5B,oBAAoB,QAAQ;AAC5B,oBAAoB,UAAU;AAC9B,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,QAAQ;AAC3B,mBAAmB,QAAQ,8CAA8C,oBAAoB;AAC7F,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,QAAQ;AAC3B,mBAAmB,QAAQ,8CAA8C,oBAAoB;AAC7F,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA,sDAAsD;AACtD,sDAAsD,SAAS;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,QAAQ;AAC5B,oBAAoB,QAAQ;AAC5B,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yEAAyE;AACzE;;AAEA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B,oBAAoB,SAAS;AAC7B,oBAAoB,SAAS;AAC7B,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B,oBAAoB,QAAQ;AAC5B,oBAAoB,SAAS;AAC7B,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B,oBAAoB,SAAS;AAC7B,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,QAAQ;AAC5B,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,sBAAsB;AAClC,YAAY,sBAAsB;AAClC,YAAY,qBAAqB;AACjC,YAAY,uBAAuB;AACnC,YAAY,eAAe;AAC3B,YAAY,qBAAqB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,QAAQ;AAC3B,mBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA,KAAK;;AAEL,sCAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA,cAAc,KAAK;AACnB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,QAAQ;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;;AAEA,mDAAmD,aAAa;;AAEhE,CAAC,G;;;;;;;;ACp6KD,kD;;;;;;;ACAA,eAAe,KAAiD,oBAAoB,CAA6G,CAAC,YAAY,UAAU,eAAe,aAAa,aAAa,wBAAwB,EAAE,sCAAsC,mOAAmO,UAAU,eAAe,EAAE,KAAK,UAAU,gBAAgB,yCAAyC,qBAAqB,UAAU,eAAe,aAAa,wDAAwD,wFAAwF,OAAO,kBAAkB,kFAAkF,wDAAwD,0CAA0C,mDAAmD,6BAA6B,iCAAiC,iEAAiE,uCAAuC,yBAAyB,+CAA+C,mBAAmB,yBAAyB,sGAAsG,mQAAmQ,cAAc,qEAAqE,EAAE,QAAQ,6BAA6B,+CAA+C,kBAAkB,yBAAyB,2JAA2J,eAAe,EAAE,8GA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AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,mBAAmB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA,kEAAkE;AAClE,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAE8C;AAC9C;;;AC3JA;AACA,yDAAe;AACf;AACA,CAAC,E;;ACHD;AACA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,C;;ACjBqC;AACrC;AACA;AACA;AACA;;AAEA;;AAEA,gBAAgB,SAAS;AACzB;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,4DAAe,yDAAS,I;;AChCS;AACN;AACsB;;AAEjD;AACA,MAAM,kBAAM;AACZ,WAAW,kBAAM;AACjB;;AAEA;AACA,iDAAiD,GAAG,KAAK;;AAEzD;AACA,mCAAmC;;AAEnC;AACA;;AAEA,oBAAoB,QAAQ;AAC5B;AACA;;AAEA;AACA;;AAEA,SAAS,eAAe;AACxB;;AAEA,qD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","sources":["webpack://MapVX/webpack/universalModuleDefinition","webpack://MapVX/./node_modules/.pnpm/countly-sdk-web@23.12.6/node_modules/countly-sdk-web/lib/countly.js","webpack://MapVX/external umd {\"commonjs\":\"maplibre-gl\",\"commonjs2\":\"maplibre-gl\",\"amd\":\"maplibre-gl\",\"root\":\"maplibregl\"}","webpack://MapVX/./node_modules/.pnpm/rollbar@2.26.4/node_modules/rollbar/dist/rollbar.umd.min.js","webpack://MapVX/webpack/bootstrap","webpack://MapVX/webpack/runtime/compat get default export","webpack://MapVX/webpack/runtime/define property getters","webpack://MapVX/webpack/runtime/hasOwnProperty shorthand","webpack://MapVX/webpack/runtime/make namespace object","webpack://MapVX/./src/infrastructure/cache/LRUCache.ts","webpack://MapVX/./src/infrastructure/cache/cacheConfig.ts","webpack://MapVX/./src/infrastructure/cache/PersistentCache.ts","webpack://MapVX/./src/infrastructure/cache/CacheManager.ts","webpack://MapVX/./src/infrastructure/http/FetchHttpClient.ts","webpack://MapVX/./src/logger/rollbar.ts","webpack://MapVX/./src/logger/logger.ts","webpack://MapVX/./src/infrastructure/logging/CountlyLogger.ts","webpack://MapVX/./src/assets/icons.ts","webpack://MapVX/./src/utils/utils.ts","webpack://MapVX/./src/domain/models/marker.ts","webpack://MapVX/./src/utils/nav-functions.ts","webpack://MapVX/./src/domain/models/routeInstance.ts","webpack://MapVX/./src/controllers/routeController.ts","webpack://MapVX/./src/domain/models/_rtl.ts","webpack://MapVX/./src/domain/models/routeConfiguration.ts","webpack://MapVX/./src/domain/models/animation.ts","webpack://MapVX/./src/utils/error.ts","webpack://MapVX/./src/domain/models/loggeable.ts","webpack://MapVX/./src/domain/models/mapConfig.ts","webpack://MapVX/./node_modules/.pnpm/@googlemaps+polyline-codec@1.0.28/node_modules/@googlemaps/polyline-codec/dist/index.esm.js","webpack://MapVX/./node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/native.js","webpack://MapVX/./node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/rng.js","webpack://MapVX/./node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/stringify.js","webpack://MapVX/./node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/v4.js","webpack://MapVX/./src/domain/models/route.ts","webpack://MapVX/./src/domain/models/banner.ts","webpack://MapVX/./src/domain/models/place.ts","webpack://MapVX/./src/domain/models/property.ts","webpack://MapVX/./src/domain/models/institution.ts","webpack://MapVX/./src/domain/models/transport.ts","webpack://MapVX/./src/repository/requester.ts","webpack://MapVX/./src/repository/repository.ts","webpack://MapVX/./src/utils/route-utils.ts","webpack://MapVX/./src/map/map.ts","webpack://MapVX/./src/domain/models/_internal.ts","webpack://MapVX/./src/sdk.ts","webpack://MapVX/./src/domain/models/categories.ts","webpack://MapVX/./src/utils/update-css.ts","webpack://MapVX/./src/utils/opening-hours-helper.ts","webpack://MapVX/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"maplibre-gl\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"maplibre-gl\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"MapVX\"] = factory(require(\"maplibre-gl\"));\n\telse\n\t\troot[\"MapVX\"] = factory(root[\"maplibregl\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE__565__) => {\nreturn ","/** **********\n* Countly Web SDK\n* https://github.com/Countly/countly-sdk-web\n*********** */\n/**\n * Countly object to manage the internal queue and send requests to Countly server. More information on {@link https://resources.count.ly/docs/countly-sdk-for-web}\n * @name Countly\n * @global\n * @namespace Countly\n * @example <caption>SDK integration</caption>\n * <script type=\"text/javascript\">\n *\n * //some default pre init\n * var Countly = Countly || {};\n * Countly.q = Countly.q || [];\n *\n * //provide your app key that you retrieved from Countly dashboard\n * Countly.app_key = \"YOUR_APP_KEY\";\n *\n * //provide your server IP or name. Use try.count.ly for EE trial server.\n * //if you use your own server, make sure you have https enabled if you use\n * //https below.\n * Countly.url = \"https://yourdomain.com\";\n *\n * //start pushing function calls to queue\n * //track sessions automatically\n * Countly.q.push([\"track_sessions\"]);\n *\n * //track sessions automatically\n * Countly.q.push([\"track_pageview\"]);\n *\n * //load countly script asynchronously\n * (function() {\n * var cly = document.createElement(\"script\"); cly.type = \"text/javascript\";\n * cly.async = true;\n * //enter url of script here\n * cly.src = \"https://cdn.jsdelivr.net/countly-sdk-web/latest/countly.min.js\";\n * cly.onload = function(){Countly.init()};\n * var s = document.getElementsByTagName(\"script\")[0]; s.parentNode.insertBefore(cly, s);\n * })();\n * </script>\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Countly = global.Countly || {}));\n})(this, (function (exports) {\n 'use strict';\n\n function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n }\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n }\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n function _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n }\n function _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n }\n\n // Feature ENUMS\n var featureEnums = {\n SESSIONS: \"sessions\",\n EVENTS: \"events\",\n VIEWS: \"views\",\n SCROLLS: \"scrolls\",\n CLICKS: \"clicks\",\n FORMS: \"forms\",\n CRASHES: \"crashes\",\n ATTRIBUTION: \"attribution\",\n USERS: \"users\",\n STAR_RATING: \"star-rating\",\n LOCATION: \"location\",\n APM: \"apm\",\n FEEDBACK: \"feedback\",\n REMOTE_CONFIG: \"remote-config\"\n };\n\n /**\n * At the current moment there are following internal events and their respective required consent:\n [CLY]_nps - \"feedback\" consent\n [CLY]_survey - \"feedback\" consent\n [CLY]_star_rating - \"star_rating\" consent\n [CLY]_view - \"views\" consent\n [CLY]_orientation - \"users\" consent\n [CLY]_push_action - \"push\" consent\n [CLY]_action - \"clicks\" or \"scroll\" consent\n */\n var internalEventKeyEnums = {\n NPS: \"[CLY]_nps\",\n SURVEY: \"[CLY]_survey\",\n STAR_RATING: \"[CLY]_star_rating\",\n VIEW: \"[CLY]_view\",\n ORIENTATION: \"[CLY]_orientation\",\n ACTION: \"[CLY]_action\"\n };\n var internalEventKeyEnumsArray = Object.values(internalEventKeyEnums);\n /**\n * \n *log level Enums:\n *Error - this is a issues that needs attention right now.\n *Warning - this is something that is potentially a issue. Maybe a deprecated usage of something, maybe consent is enabled but consent is not given.\n *Info - All publicly exposed functions should log a call at this level to indicate that they were called. These calls should include the function name.\n *Debug - this should contain logs from the internal workings of the SDK and it's important calls. This should include things like the SDK configuration options, success or fail of the current network request, \"request queue is full\" and the oldest request get's dropped, etc.\n *Verbose - this should give a even deeper look into the SDK's inner working and should contain things that are more noisy and happen often.\n */\n var logLevelEnums = {\n ERROR: \"[ERROR] \",\n WARNING: \"[WARNING] \",\n INFO: \"[INFO] \",\n DEBUG: \"[DEBUG] \",\n VERBOSE: \"[VERBOSE] \"\n };\n /**\n * \n *device ID type:\n *0 - device ID was set by the developer during init\n *1 - device ID was auto generated by Countly\n *2 - device ID was temporarily given by Countly\n *3 - device ID was provided from location.search\n */\n var DeviceIdTypeInternalEnums = {\n DEVELOPER_SUPPLIED: 0,\n SDK_GENERATED: 1,\n TEMPORARY_ID: 2,\n URL_PROVIDED: 3\n };\n /**\n * to be used as a default value for certain configuration key values\n */\n var configurationDefaultValues = {\n BEAT_INTERVAL: 500,\n QUEUE_SIZE: 1000,\n FAIL_TIMEOUT_AMOUNT: 60,\n INACTIVITY_TIME: 20,\n SESSION_UPDATE: 60,\n MAX_EVENT_BATCH: 100,\n SESSION_COOKIE_TIMEOUT: 30,\n MAX_KEY_LENGTH: 128,\n MAX_VALUE_SIZE: 256,\n MAX_SEGMENTATION_VALUES: 100,\n MAX_BREADCRUMB_COUNT: 100,\n MAX_STACKTRACE_LINES_PER_THREAD: 30,\n MAX_STACKTRACE_LINE_LENGTH: 200\n };\n\n /**\n * BoomerangJS and countly\n */\n var CDN = {\n BOOMERANG_SRC: \"https://cdn.jsdelivr.net/npm/countly-sdk-web@latest/plugin/boomerang/boomerang.min.js\",\n CLY_BOOMERANG_SRC: \"https://cdn.jsdelivr.net/npm/countly-sdk-web@latest/plugin/boomerang/countly_boomerang.js\"\n };\n\n /**\n * Health check counters' local storage keys\n */\n var healthCheckCounterEnum = Object.freeze({\n errorCount: \"cly_hc_error_count\",\n warningCount: \"cly_hc_warning_count\",\n statusCode: \"cly_hc_status_code\",\n errorMessage: \"cly_hc_error_message\"\n });\n var SDK_VERSION = \"23.12.6\";\n var SDK_NAME = \"javascript_native_web\";\n\n // Using this on document.referrer would return an array with 17 elements in it. The 12th element (array[11]) would be the path we are looking for. Others would be things like password and such (use https://regex101.com/ to check more)\n // an example URL:\n // http://user:pass@host:8080/path/to/resource?query=value#fragment\n // this url would yield the following result for matches = urlParseRE.exec(document.referrer);\n //\n // 0: \"http://user:pass@host:8080/path/to/resource?query=value#fragment\"\n // 1: \"http://user:pass@host:8080/path/to/resource?query=value\"\n // 2: \"http://user:pass@host:8080/path/to/resource\"\n // 3: \"http://user:pass@host:8080\"\n // 4: \"http:\"\n // 5: \"//\"\n // 6: \"user:pass@host:8080\"\n // 7: \"user:pass\"\n // 8: \"user\"\n // 9: \"pass\"\n // 10: \"host:8080\"\n // 11: \"host\"\n // 12: \"8080\"\n // 13: \"/path/to/resource\"\n // 14: \"/path/to/\"\n // 15: \"resource\"\n // 16: \"?query=value\"\n // 17: \"#fragment\"\n var urlParseRE = /^(((([^:\\/#\\?]+:)?(?:(\\/\\/)((?:(([^:@\\/#\\?]+)(?:\\:([^:@\\/#\\?]+))?)@)?(([^:\\/#\\?\\]\\[]+|\\[[^\\/\\]@#?]+\\])(?:\\:([0-9]+))?))?)?)?((\\/?(?:[^\\/\\?#]+\\/+)*)([^\\?#]*)))?(\\?[^#]+)?)(#.*)?/;\n\n var isBrowser = typeof window !== \"undefined\";\n var Countly = globalThis.Countly || {};\n\n /**\n * Get selected values from multi select input\n * @param {HTMLElement} input - select with multi true option\n * @returns {String} coma concatenated values\n */\n function getMultiSelectValues(input) {\n var values = [];\n if (typeof input.options !== \"undefined\") {\n for (var j = 0; j < input.options.length; j++) {\n if (input.options[j].selected) {\n values.push(input.options[j].value);\n }\n }\n }\n return values.join(\", \");\n }\n\n /**\n * Return a crypto-safe random string\n * @memberof Countly._internals\n * @returns {string} - random string\n */\n function secureRandom() {\n var id = \"xxxxxxxx\";\n id = replacePatternWithRandomValues(id, \"[x]\");\n\n // timestamp in milliseconds\n var timestamp = Date.now().toString();\n return id + timestamp;\n }\n\n /**\n * Generate random UUID value\n * @memberof Countly._internals\n * @returns {String} random UUID value\n */\n function generateUUID() {\n var uuid = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\";\n uuid = replacePatternWithRandomValues(uuid, \"[xy]\");\n return uuid;\n }\n\n /**\n * Generate random value based on pattern\n * \n * @param {string} str - string to replace\n * @param {string} pattern - pattern to replace\n * @returns {string} - replaced string\n */\n function replacePatternWithRandomValues(str, pattern) {\n var d = new Date().getTime();\n var regex = new RegExp(pattern, \"g\");\n return str.replace(regex, function (c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n return (c === \"x\" ? r : r & 0x3 | 0x8).toString(16);\n });\n }\n\n /**\n * Get unix timestamp\n * @memberof Countly._internals\n * @returns {Number} unix timestamp\n */\n function getTimestamp() {\n return Math.floor(new Date().getTime() / 1000);\n }\n var lastMsTs = 0;\n /**\n * Get unique timestamp in milliseconds\n * @memberof Countly._internals\n * @returns {Number} milliseconds timestamp\n */\n function getMsTimestamp() {\n var ts = new Date().getTime();\n if (lastMsTs >= ts) {\n lastMsTs++;\n } else {\n lastMsTs = ts;\n }\n return lastMsTs;\n }\n\n /**\n * Get config value from multiple sources\n * like config object, global object or fallback value\n * @param {String} key - config key\n * @param {Object} ob - config object\n * @param {Varies} override - fallback value\n * @returns {Varies} value to be used as config\n */\n function getConfig(key, ob, override) {\n if (ob && Object.keys(ob).length) {\n if (typeof ob[key] !== \"undefined\") {\n return ob[key];\n }\n } else if (typeof Countly[key] !== \"undefined\") {\n return Countly[key];\n }\n return override;\n }\n\n /**\n * Dispatch errors to instances that lister to errors\n * @param {Error} error - Error object\n * @param {Boolean} fatality - fatal if false and nonfatal if true\n * @param {Object} segments - custom crash segments\n */\n function dispatchErrors(error, fatality, segments) {\n // Check each instance like Countly.i[app_key_1], Countly.i[app_key_2] ...\n for (var app_key in Countly.i) {\n // If track_errors is enabled for that instance\n if (Countly.i[app_key].tracking_crashes) {\n // Trigger recordError function for that instance\n Countly.i[app_key].recordError(error, fatality, segments);\n }\n }\n }\n\n /**\n * Convert JSON object to URL encoded query parameter string\n * @memberof Countly._internals\n * @param {Object} params - object with query parameters\n * @returns {String} URL encode query string\n */\n function prepareParams(params) {\n var str = [];\n for (var i in params) {\n str.push(i + \"=\" + encodeURIComponent(params[i]));\n }\n return str.join(\"&\");\n }\n\n /**\n * Removing trailing slashes\n * @memberof Countly._internals\n * @param {String} str - string from which to remove trailing slash\n * @returns {String} modified string\n */\n function stripTrailingSlash(str) {\n if (typeof str === \"string\") {\n if (str.substring(str.length - 1) === \"/\") {\n return str.substring(0, str.length - 1);\n }\n }\n return str;\n }\n\n /**\n * Retrieve only specific properties from object\n * @memberof Countly._internals\n * @param {Object} orig - original object\n * @param {Array} props - array with properties to get from object\n * @returns {Object} new object with requested properties\n */\n function createNewObjectFromProperties(orig, props) {\n var ob = {};\n var prop;\n for (var i = 0, len = props.length; i < len; i++) {\n prop = props[i];\n if (typeof orig[prop] !== \"undefined\") {\n ob[prop] = orig[prop];\n }\n }\n return ob;\n }\n\n /**\n * Add specified properties to an object from another object\n * @memberof Countly._internals\n * @param {Object} orig - original object\n * @param {Object} transferOb - object to copy values from\n * @param {Array} props - array with properties to get from object\n * @returns {Object} original object with additional requested properties\n */\n function addNewProperties(orig, transferOb, props) {\n if (!props) {\n return;\n }\n var prop;\n for (var i = 0, len = props.length; i < len; i++) {\n prop = props[i];\n if (typeof transferOb[prop] !== \"undefined\") {\n orig[prop] = transferOb[prop];\n }\n }\n return orig;\n }\n\n /**\n * Truncates an object's key/value pairs to a certain length\n * @param {Object} obj - original object to be truncated\n * @param {Number} keyLimit - limit for key length\n * @param {Number} valueLimit - limit for value length\n * @param {Number} segmentLimit - limit for segments pairs\n * @param {string} errorLog - prefix for error log\n * @param {function} logCall - internal logging function\n * @returns {Object} - the new truncated object\n */\n function truncateObject(obj, keyLimit, valueLimit, segmentLimit, errorLog, logCall) {\n var ob = {};\n if (obj) {\n if (Object.keys(obj).length > segmentLimit) {\n var resizedObj = {};\n var i = 0;\n for (var e in obj) {\n if (i < segmentLimit) {\n resizedObj[e] = obj[e];\n i++;\n }\n }\n obj = resizedObj;\n }\n for (var key in obj) {\n var newKey = truncateSingleValue(key, keyLimit, errorLog, logCall);\n var newValue = truncateSingleValue(obj[key], valueLimit, errorLog, logCall);\n ob[newKey] = newValue;\n }\n }\n return ob;\n }\n\n /**\n * Truncates a single value to a certain length\n * @param {string|number} str - original value to be truncated\n * @param {Number} limit - limit length\n * @param {string} errorLog - prefix for error log\n * @param {function} logCall - internal logging function\n * @returns {string|number} - the new truncated value\n */\n function truncateSingleValue(str, limit, errorLog, logCall) {\n var newStr = str;\n if (typeof str === \"number\") {\n str = str.toString();\n }\n if (typeof str === \"string\") {\n if (str.length > limit) {\n newStr = str.substring(0, limit);\n logCall(logLevelEnums.DEBUG, errorLog + \", Key: [ \" + str + \" ] is longer than accepted length. It will be truncated.\");\n }\n }\n return newStr;\n }\n\n /**\n * Polyfill to get closest parent matching nodeName\n * @param {HTMLElement} el - element from which to search\n * @param {String} nodeName - tag/node name\n * @returns {HTMLElement} closest parent element\n */\n function get_closest_element(el, nodeName) {\n nodeName = nodeName.toUpperCase();\n while (el) {\n if (el.nodeName.toUpperCase() === nodeName) {\n return el;\n }\n el = el.parentElement;\n }\n }\n\n /**\n * Listen to specific browser event\n * @memberof Countly._internals\n * @param {HTMLElement} element - HTML element that should listen to event\n * @param {String} type - event name or action\n * @param {Function} listener - callback when event is fired\n */\n function add_event_listener(element, type, listener) {\n if (!isBrowser) {\n return;\n }\n if (element === null || typeof element === \"undefined\") {\n // element can be null so lets check it first\n if (checkIfLoggingIsOn()) {\n // eslint-disable-next-line no-console\n console.warn(\"[WARNING] [Countly] add_event_listener, Can't bind [\" + type + \"] event to nonexisting element\");\n }\n return;\n }\n if (typeof element.addEventListener !== \"undefined\") {\n element.addEventListener(type, listener, false);\n }\n // for old browser use attachEvent instead\n else {\n element.attachEvent(\"on\" + type, listener);\n }\n }\n\n /**\n * Get element that fired event\n * @memberof Countly._internals\n * @param {Event} event - event that was filed\n * @returns {HTMLElement} HTML element that caused event to fire\n */\n function get_event_target(event) {\n if (!event) {\n return window.event.srcElement;\n }\n if (typeof event.target !== \"undefined\") {\n return event.target;\n }\n return event.srcElement;\n }\n\n /**\n * Returns raw user agent string\n * @memberof Countly._internals\n * @param {string} uaOverride - a string value to pass instead of ua value\n * @returns {string} currentUserAgentString - raw user agent string\n */\n function currentUserAgentString(uaOverride) {\n if (uaOverride) {\n return uaOverride;\n }\n var ua_raw = navigator.userAgent;\n // check if userAgentData is supported and userAgent is not available, then use it\n if (!ua_raw) {\n ua_raw = currentUserAgentDataString();\n }\n // RAW USER AGENT STRING\n return ua_raw;\n }\n\n /**\n * Forms user agent string from userAgentData by concatenating brand, version, mobile and platform\n * @memberof Countly._internals\n * @param {string} uaOverride - a string value to pass instead of ua value\n * @returns {string} currentUserAgentString - user agent string from userAgentData\n */\n function currentUserAgentDataString(uaOverride) {\n if (uaOverride) {\n return uaOverride;\n }\n var ua = \"\";\n if (navigator.userAgentData) {\n // turn brands array into string\n ua = navigator.userAgentData.brands.map(function (e) {\n return e.brand + \":\" + e.version;\n }).join();\n // add mobile info\n ua += navigator.userAgentData.mobile ? \" mobi \" : \" \";\n // add platform info\n ua += navigator.userAgentData.platform;\n }\n return ua;\n }\n\n /**\n * Returns device type information according to user agent string\n * @memberof Countly._internals\n * @param {string} uaOverride - a string value to pass instead of ua value\n * @returns {string} userAgentDeviceDetection - current device type (desktop, tablet, phone)\n */\n function userAgentDeviceDetection(uaOverride) {\n var userAgent;\n // TODO: refactor here\n if (uaOverride) {\n userAgent = uaOverride;\n } else if (navigator.userAgentData && navigator.userAgentData.mobile) {\n return \"phone\";\n } else {\n userAgent = currentUserAgentString();\n }\n // make it lowercase for regex to work properly\n userAgent = userAgent.toLowerCase();\n\n // assign the default device\n var device = \"desktop\";\n\n // regexps corresponding to tablets or phones that can be found in userAgent string\n var tabletCheck = /(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk|(puffin(?!.*(IP|AP|WP))))/;\n var phoneCheck = /(mobi|ipod|phone|blackberry|opera mini|fennec|minimo|symbian|psp|nintendo ds|archos|skyfire|puffin|blazer|bolt|gobrowser|iris|maemo|semc|teashark|uzard)/;\n\n // check whether the regexp values corresponds to something in the user agent string\n if (tabletCheck.test(userAgent)) {\n device = \"tablet\";\n } else if (phoneCheck.test(userAgent)) {\n device = \"phone\";\n }\n\n // set the device type\n return device;\n }\n\n /**\n * Returns information regarding if the current user is a search bot or not\n * @memberof Countly._internals\n * @param {string} uaOverride - a string value to pass instead of ua value\n * @returns {boolean} userAgentSearchBotDetection - if a search bot is reaching the site or not\n */\n function userAgentSearchBotDetection(uaOverride) {\n // search bot regexp\n var searchBotRE = /(CountlySiteBot|nuhk|Googlebot|GoogleSecurityScanner|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\\/Teoma|ia_archiver|bingbot|Google Web Preview|Mediapartners-Google|AdsBot-Google|Baiduspider|Ezooms|YahooSeeker|AltaVista|AVSearch|Mercator|Scooter|InfoSeek|Ultraseek|Lycos|Wget|YandexBot|Yandex|YaDirectFetcher|SiteBot|Exabot|AhrefsBot|MJ12bot|TurnitinBot|magpie-crawler|Nutch Crawler|CMS Crawler|rogerbot|Domnutch|ssearch_bot|XoviBot|netseer|digincore|fr-crawler|wesee|AliasIO|contxbot|PingdomBot|BingPreview|HeadlessChrome|Lighthouse)/;\n\n // check override first\n if (uaOverride) {\n return searchBotRE.test(uaOverride);\n }\n\n // check both userAgent and userAgentData, as one of them might be containing the information we are looking for\n var ua_bot = searchBotRE.test(currentUserAgentString());\n var uaData_bot = searchBotRE.test(currentUserAgentDataString());\n return ua_bot || uaData_bot;\n }\n\n /**\n * Modify event to set standard coordinate properties if they are not available\n * @memberof Countly._internals\n * @param {Event} e - event object\n * @returns {Event} modified event object\n */\n function get_page_coord(e) {\n // checking if pageY and pageX is already available\n if (typeof e.pageY === \"undefined\" && typeof e.clientX === \"number\" && document.documentElement) {\n // if not, then add scrolling positions\n e.pageX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n e.pageY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n }\n // return e which now contains pageX and pageY attributes\n return e;\n }\n\n /**\n * Get height of whole document\n * @memberof Countly._internals\n * @returns {Number} height in pixels\n */\n function getDocHeight() {\n var D = document;\n return Math.max(Math.max(D.body.scrollHeight, D.documentElement.scrollHeight), Math.max(D.body.offsetHeight, D.documentElement.offsetHeight), Math.max(D.body.clientHeight, D.documentElement.clientHeight));\n }\n\n /**\n * Get width of whole document\n * @memberof Countly._internals\n * @returns {Number} width in pixels\n */\n function getDocWidth() {\n var D = document;\n return Math.max(Math.max(D.body.scrollWidth, D.documentElement.scrollWidth), Math.max(D.body.offsetWidth, D.documentElement.offsetWidth), Math.max(D.body.clientWidth, D.documentElement.clientWidth));\n }\n\n /**\n * Get height of viewable area\n * @memberof Countly._internals\n * @returns {Number} height in pixels\n */\n function getViewportHeight() {\n var D = document;\n return Math.min(Math.min(D.body.clientHeight, D.documentElement.clientHeight), Math.min(D.body.offsetHeight, D.documentElement.offsetHeight), window.innerHeight);\n }\n\n /**\n * Get device's orientation\n * @returns {String} device orientation\n */\n function getOrientation() {\n return window.innerWidth > window.innerHeight ? \"landscape\" : \"portrait\";\n }\n\n /**\n * Load external js files\n * @param {String} tag - Tag/node name to load file in\n * @param {String} attr - Attribute name for type\n * @param {String} type - Type value\n * @param {String} src - Attribute name for file path\n * @param {String} data - File path\n * @param {Function} callback - callback when done\n */\n function loadFile(tag, attr, type, src, data, callback) {\n var fileRef = document.createElement(tag);\n var loaded;\n fileRef.setAttribute(attr, type);\n fileRef.setAttribute(src, data);\n var callbackFunction = function callbackFunction() {\n if (!loaded) {\n callback();\n }\n loaded = true;\n };\n if (callback) {\n fileRef.onreadystatechange = callbackFunction;\n fileRef.onload = callbackFunction;\n }\n document.getElementsByTagName(\"head\")[0].appendChild(fileRef);\n }\n\n /**\n * Load external js files\n * @memberof Countly._internals\n * @param {String} js - path to JS file\n * @param {Function} callback - callback when done\n */\n function loadJS(js, callback) {\n loadFile(\"script\", \"type\", \"text/javascript\", \"src\", js, callback);\n }\n\n /**\n * Load external css files\n * @memberof Countly._internals\n * @param {String} css - path to CSS file\n * @param {Function} callback - callback when done\n */\n function loadCSS(css, callback) {\n loadFile(\"link\", \"rel\", \"stylesheet\", \"href\", css, callback);\n }\n\n /**\n * Show loader UI when loading external data\n * @memberof Countly._internals\n */\n function showLoader() {\n if (!isBrowser) {\n return;\n }\n var loader = document.getElementById(\"cly-loader\");\n if (!loader) {\n var css = \"#cly-loader {height: 4px; width: 100%; position: absolute; z-index: 99999; overflow: hidden; background-color: #fff; top:0px; left:0px;}\" + \"#cly-loader:before{display: block; position: absolute; content: ''; left: -200px; width: 200px; height: 4px; background-color: #2EB52B; animation: cly-loading 2s linear infinite;}\" + \"@keyframes cly-loading { from {left: -200px; width: 30%;} 50% {width: 30%;} 70% {width: 70%;} 80% { left: 50%;} 95% {left: 120%;} to {left: 100%;}}\";\n var head = document.head || document.getElementsByTagName(\"head\")[0];\n var style = document.createElement(\"style\");\n style.type = \"text/css\";\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n head.appendChild(style);\n loader = document.createElement(\"div\");\n loader.setAttribute(\"id\", \"cly-loader\");\n document.body.onload = function () {\n // check if hideLoader is on and if so return\n if (Countly.showLoaderProtection) {\n if (checkIfLoggingIsOn()) {\n // eslint-disable-next-line no-console\n console.warn(\"[WARNING] [Countly] showloader, Loader is already on\");\n }\n return;\n }\n try {\n document.body.appendChild(loader);\n } catch (e) {\n if (checkIfLoggingIsOn()) {\n // eslint-disable-next-line no-console\n console.error(\"[ERROR] [Countly] showLoader, Body is not loaded for loader to append: \" + e);\n }\n }\n };\n }\n loader.style.display = \"block\";\n }\n\n /**\n * Checks if debug is true and console is available in Countly object\n * @memberof Countly._internals \n * @returns {Boolean} true if debug is true and console is available in Countly object\n */\n function checkIfLoggingIsOn() {\n // check if logging is enabled\n if (Countly && Countly.debug && typeof console !== \"undefined\") {\n return true;\n }\n return false;\n }\n\n /**\n * Hide loader UI\n * @memberof Countly._internals\n */\n function hideLoader() {\n if (!isBrowser) {\n return;\n }\n // Inform showLoader that it should not append the loader\n Countly.showLoaderProtection = true;\n var loader = document.getElementById(\"cly-loader\");\n if (loader) {\n loader.style.display = \"none\";\n }\n }\n\n var CountlyClass = /*#__PURE__*/_createClass(function CountlyClass(ob) {\n _classCallCheck(this, CountlyClass);\n var self = this;\n var global = !Countly.i;\n var sessionStarted = false;\n var apiPath = \"/i\";\n var readPath = \"/o/sdk\";\n var beatInterval = getConfig(\"interval\", ob, configurationDefaultValues.BEAT_INTERVAL);\n var queueSize = getConfig(\"queue_size\", ob, configurationDefaultValues.QUEUE_SIZE);\n var requestQueue = [];\n var eventQueue = [];\n var remoteConfigs = {};\n var crashLogs = [];\n var timedEvents = {};\n var ignoreReferrers = getConfig(\"ignore_referrers\", ob, []);\n var crashSegments = null;\n var autoExtend = true;\n var lastBeat;\n var storedDuration = 0;\n var lastView = null;\n var lastViewTime = 0;\n var lastViewStoredDuration = 0;\n var failTimeout = 0;\n var failTimeoutAmount = getConfig(\"fail_timeout\", ob, configurationDefaultValues.FAIL_TIMEOUT_AMOUNT);\n var inactivityTime = getConfig(\"inactivity_time\", ob, configurationDefaultValues.INACTIVITY_TIME);\n var inactivityCounter = 0;\n var sessionUpdate = getConfig(\"session_update\", ob, configurationDefaultValues.SESSION_UPDATE);\n var maxEventBatch = getConfig(\"max_events\", ob, configurationDefaultValues.MAX_EVENT_BATCH);\n var maxCrashLogs = getConfig(\"max_logs\", ob, null);\n var useSessionCookie = getConfig(\"use_session_cookie\", ob, true);\n var sessionCookieTimeout = getConfig(\"session_cookie_timeout\", ob, configurationDefaultValues.SESSION_COOKIE_TIMEOUT);\n var readyToProcess = true;\n var hasPulse = false;\n var offlineMode = getConfig(\"offline_mode\", ob, false);\n var lastParams = {};\n var trackTime = true;\n var startTime = getTimestamp();\n var lsSupport = true;\n var firstView = null;\n var deviceIdType = DeviceIdTypeInternalEnums.SDK_GENERATED;\n var isScrollRegistryOpen = false;\n var scrollRegistryTopPosition = 0;\n var trackingScrolls = false;\n var currentViewId = null; // this is the global variable for tracking the current view's ID. Used in view tracking. Becomes previous view ID at the end.\n var previousViewId = null; // this is the global variable for tracking the previous view's ID. Used in view tracking. First view has no previous view ID.\n var freshUTMTags = null;\n var sdkName = getConfig(\"sdk_name\", ob, SDK_NAME);\n var sdkVersion = getConfig(\"sdk_version\", ob, SDK_VERSION);\n try {\n localStorage.setItem(\"cly_testLocal\", true);\n // clean up test\n localStorage.removeItem(\"cly_testLocal\");\n } catch (e) {\n log(logLevelEnums.ERROR, \"Local storage test failed, Halting local storage support: \" + e);\n lsSupport = false;\n }\n\n // create object to store consents\n var consents = {};\n for (var it = 0; it < Countly.features.length; it++) {\n consents[Countly.features[it]] = {};\n }\n this.initialize = function () {\n this.serialize = getConfig(\"serialize\", ob, Countly.serialize);\n this.deserialize = getConfig(\"deserialize\", ob, Countly.deserialize);\n this.getViewName = getConfig(\"getViewName\", ob, Countly.getViewName);\n this.getViewUrl = getConfig(\"getViewUrl\", ob, Countly.getViewUrl);\n this.getSearchQuery = getConfig(\"getSearchQuery\", ob, Countly.getSearchQuery);\n this.DeviceIdType = Countly.DeviceIdType; // it is Countly device Id type Enums for clients to use\n this.namespace = getConfig(\"namespace\", ob, \"\");\n this.clearStoredId = getConfig(\"clear_stored_id\", ob, false);\n this.app_key = getConfig(\"app_key\", ob, null);\n this.onload = getConfig(\"onload\", ob, []);\n this.utm = getConfig(\"utm\", ob, {\n source: true,\n medium: true,\n campaign: true,\n term: true,\n content: true\n });\n this.ignore_prefetch = getConfig(\"ignore_prefetch\", ob, true);\n this.rcAutoOptinAb = getConfig(\"rc_automatic_optin_for_ab\", ob, true);\n this.useExplicitRcApi = getConfig(\"use_explicit_rc_api\", ob, false);\n this.debug = getConfig(\"debug\", ob, false);\n this.test_mode = getConfig(\"test_mode\", ob, false);\n this.test_mode_eq = getConfig(\"test_mode_eq\", ob, false);\n this.metrics = getConfig(\"metrics\", ob, {});\n this.headers = getConfig(\"headers\", ob, {});\n this.url = stripTrailingSlash(getConfig(\"url\", ob, \"\"));\n this.app_version = getConfig(\"app_version\", ob, \"0.0\");\n this.country_code = getConfig(\"country_code\", ob, null);\n this.city = getConfig(\"city\", ob, null);\n this.ip_address = getConfig(\"ip_address\", ob, null);\n this.ignore_bots = getConfig(\"ignore_bots\", ob, true);\n this.force_post = getConfig(\"force_post\", ob, false);\n this.remote_config = getConfig(\"remote_config\", ob, false);\n this.ignore_visitor = getConfig(\"ignore_visitor\", ob, false);\n this.require_consent = getConfig(\"require_consent\", ob, false);\n this.track_domains = !isBrowser ? undefined : getConfig(\"track_domains\", ob, true);\n this.storage = getConfig(\"storage\", ob, \"default\");\n this.enableOrientationTracking = !isBrowser ? undefined : getConfig(\"enable_orientation_tracking\", ob, true);\n this.maxKeyLength = getConfig(\"max_key_length\", ob, configurationDefaultValues.MAX_KEY_LENGTH);\n this.maxValueSize = getConfig(\"max_value_size\", ob, configurationDefaultValues.MAX_VALUE_SIZE);\n this.maxSegmentationValues = getConfig(\"max_segmentation_values\", ob, configurationDefaultValues.MAX_SEGMENTATION_VALUES);\n this.maxBreadcrumbCount = getConfig(\"max_breadcrumb_count\", ob, null);\n this.maxStackTraceLinesPerThread = getConfig(\"max_stack_trace_lines_per_thread\", ob, configurationDefaultValues.MAX_STACKTRACE_LINES_PER_THREAD);\n this.maxStackTraceLineLength = getConfig(\"max_stack_trace_line_length\", ob, configurationDefaultValues.MAX_STACKTRACE_LINE_LENGTH);\n this.heatmapWhitelist = getConfig(\"heatmap_whitelist\", ob, []);\n self.hcErrorCount = getValueFromStorage(healthCheckCounterEnum.errorCount) || 0;\n self.hcWarningCount = getValueFromStorage(healthCheckCounterEnum.warningCount) || 0;\n self.hcStatusCode = getValueFromStorage(healthCheckCounterEnum.statusCode) || -1;\n self.hcErrorMessage = getValueFromStorage(healthCheckCounterEnum.errorMessage) || \"\";\n if (maxCrashLogs && !this.maxBreadcrumbCount) {\n this.maxBreadcrumbCount = maxCrashLogs;\n log(logLevelEnums.WARNING, \"initialize, 'maxCrashLogs' is deprecated. Use 'maxBreadcrumbCount' instead!\");\n } else if (!maxCrashLogs && !this.maxBreadcrumbCount) {\n this.maxBreadcrumbCount = 100;\n }\n if (this.storage === \"cookie\") {\n lsSupport = false;\n }\n if (!this.rcAutoOptinAb && !this.useExplicitRcApi) {\n log(logLevelEnums.WARNING, \"initialize, Auto opting is disabled, switching to explicit RC API\");\n this.useExplicitRcApi = true;\n }\n if (!Array.isArray(ignoreReferrers)) {\n ignoreReferrers = [];\n }\n if (this.url === \"\") {\n log(logLevelEnums.ERROR, \"initialize, Please provide server URL\");\n this.ignore_visitor = true;\n }\n if (getValueFromStorage(\"cly_ignore\")) {\n // opted out user\n this.ignore_visitor = true;\n }\n migrate();\n requestQueue = getValueFromStorage(\"cly_queue\") || [];\n eventQueue = getValueFromStorage(\"cly_event\") || [];\n remoteConfigs = getValueFromStorage(\"cly_remote_configs\") || {};\n if (this.clearStoredId) {\n // retrieve stored device ID and type from local storage and use it to flush existing events\n if (getValueFromStorage(\"cly_id\") && !tempIdModeWasEnabled) {\n this.device_id = getValueFromStorage(\"cly_id\");\n log(logLevelEnums.DEBUG, \"initialize, temporarily using the previous device ID to flush existing events\");\n deviceIdType = getValueFromStorage(\"cly_id_type\");\n if (!deviceIdType) {\n log(logLevelEnums.DEBUG, \"initialize, No device ID type info from the previous session, falling back to DEVELOPER_SUPPLIED, for event flushing\");\n deviceIdType = DeviceIdTypeInternalEnums.DEVELOPER_SUPPLIED;\n }\n // don't process async queue here, just send the events (most likely async data is for the new user)\n sendEventsForced();\n // set them back to their initial values\n this.device_id = undefined;\n deviceIdType = DeviceIdTypeInternalEnums.SDK_GENERATED;\n }\n // then clear the storage so that a new device ID is set again later\n log(logLevelEnums.INFO, \"initialize, Clearing the device ID storage\");\n removeValueFromStorage(\"cly_id\");\n removeValueFromStorage(\"cly_id_type\");\n removeValueFromStorage(\"cly_session\");\n }\n checkIgnore();\n if (isBrowser) {\n if (window.name && window.name.indexOf(\"cly:\") === 0) {\n try {\n this.passed_data = JSON.parse(window.name.replace(\"cly:\", \"\"));\n } catch (ex) {\n log(logLevelEnums.ERROR, \"initialize, Could not parse name: \" + window.name + \", error: \" + ex);\n }\n } else if (location.hash && location.hash.indexOf(\"#cly:\") === 0) {\n try {\n this.passed_data = JSON.parse(location.hash.replace(\"#cly:\", \"\"));\n } catch (ex) {\n log(logLevelEnums.ERROR, \"initialize, Could not parse hash: \" + location.hash + \", error: \" + ex);\n }\n }\n }\n if (this.passed_data && this.passed_data.app_key && this.passed_data.app_key === this.app_key || this.passed_data && !this.passed_data.app_key && global) {\n if (this.passed_data.token && this.passed_data.purpose) {\n if (this.passed_data.token !== getValueFromStorage(\"cly_old_token\")) {\n setToken(this.passed_data.token);\n setValueInStorage(\"cly_old_token\", this.passed_data.token);\n }\n var strippedList = [];\n // if whitelist is provided is an array\n if (Array.isArray(this.heatmapWhitelist)) {\n this.heatmapWhitelist.push(this.url);\n strippedList = this.heatmapWhitelist.map(function (e) {\n // remove trailing slashes from the entries\n return stripTrailingSlash(e);\n });\n } else {\n strippedList = [this.url];\n }\n // if the passed url is in the whitelist proceed\n if (strippedList.includes(this.passed_data.url)) {\n if (this.passed_data.purpose === \"heatmap\") {\n this.ignore_visitor = true;\n showLoader();\n loadJS(this.passed_data.url + \"/views/heatmap.js\", hideLoader);\n }\n }\n }\n }\n if (this.ignore_visitor) {\n log(logLevelEnums.WARNING, \"initialize, ignore_visitor:[\" + this.ignore_visitor + \"], this user will not be tracked\");\n return;\n }\n\n // init configuration is printed out here:\n // key values should be printed out as is\n if (sdkName === SDK_NAME && sdkVersion === SDK_VERSION) {\n log(logLevelEnums.DEBUG, \"initialize, SDK name:[\" + sdkName + \"], version:[\" + sdkVersion + \"]\");\n } else {\n log(logLevelEnums.DEBUG, \"initialize, SDK name:[\" + sdkName + \"], version:[\" + sdkVersion + \"], default name:[\" + SDK_NAME + \"] and default version:[\" + SDK_VERSION + \"]\");\n }\n log(logLevelEnums.DEBUG, \"initialize, app_key:[\" + this.app_key + \"], url:[\" + this.url + \"]\");\n log(logLevelEnums.DEBUG, \"initialize, device_id:[\" + getConfig(\"device_id\", ob, undefined) + \"]\");\n log(logLevelEnums.DEBUG, \"initialize, require_consent is enabled:[\" + this.require_consent + \"]\");\n try {\n log(logLevelEnums.DEBUG, \"initialize, metric override:[\" + JSON.stringify(this.metrics) + \"]\");\n log(logLevelEnums.DEBUG, \"initialize, header override:[\" + JSON.stringify(this.headers) + \"]\");\n // empty array is truthy and so would be printed if provided\n log(logLevelEnums.DEBUG, \"initialize, number of onload callbacks provided:[\" + this.onload.length + \"]\");\n // if the utm object is different to default utm object print it here\n log(logLevelEnums.DEBUG, \"initialize, utm tags:[\" + JSON.stringify(this.utm) + \"]\");\n // empty array printed if non provided\n if (ignoreReferrers) {\n log(logLevelEnums.DEBUG, \"initialize, referrers to ignore :[\" + JSON.stringify(ignoreReferrers) + \"]\");\n }\n } catch (e) {\n log(logLevelEnums.ERROR, \"initialize, Could not stringify some config object values\");\n }\n log(logLevelEnums.DEBUG, \"initialize, app_version:[\" + this.app_version + \"]\");\n\n // location info printed here\n log(logLevelEnums.DEBUG, \"initialize, provided location info; country_code:[\" + this.country_code + \"], city:[\" + this.city + \"], ip_address:[\" + this.ip_address + \"]\");\n\n // print non vital values only if provided by the developer or differs from the default value\n if (this.namespace !== \"\") {\n log(logLevelEnums.DEBUG, \"initialize, namespace given:[\" + this.namespace + \"]\");\n }\n if (this.clearStoredId) {\n log(logLevelEnums.DEBUG, \"initialize, clearStoredId flag set to:[\" + this.clearStoredId + \"]\");\n }\n if (this.ignore_prefetch) {\n log(logLevelEnums.DEBUG, \"initialize, ignoring pre-fetching and pre-rendering from counting as real website visits :[\" + this.ignore_prefetch + \"]\");\n }\n // if test mode is enabled warn the user\n if (this.test_mode) {\n log(logLevelEnums.WARNING, \"initialize, test_mode:[\" + this.test_mode + \"], request queue won't be processed\");\n }\n if (this.test_mode_eq) {\n log(logLevelEnums.WARNING, \"initialize, test_mode_eq:[\" + this.test_mode_eq + \"], event queue won't be processed\");\n }\n // if test mode is enabled warn the user\n if (this.heatmapWhitelist) {\n log(logLevelEnums.DEBUG, \"initialize, heatmap whitelist:[\" + JSON.stringify(this.heatmapWhitelist) + \"], these domains will be whitelisted\");\n }\n // if storage is se to something other than local storage\n if (this.storage !== \"default\") {\n log(logLevelEnums.DEBUG, \"initialize, storage is set to:[\" + this.storage + \"]\");\n }\n if (this.ignore_bots) {\n log(logLevelEnums.DEBUG, \"initialize, ignore traffic from bots :[\" + this.ignore_bots + \"]\");\n }\n if (this.force_post) {\n log(logLevelEnums.DEBUG, \"initialize, forced post method for all requests:[\" + this.force_post + \"]\");\n }\n if (this.remote_config) {\n log(logLevelEnums.DEBUG, \"initialize, remote_config callback provided:[\" + !!this.remote_config + \"]\");\n }\n if (typeof this.rcAutoOptinAb === \"boolean\") {\n log(logLevelEnums.DEBUG, \"initialize, automatic RC optin is enabled:[\" + this.rcAutoOptinAb + \"]\");\n }\n if (!this.useExplicitRcApi) {\n log(logLevelEnums.WARNING, \"initialize, will use legacy RC API. Consider enabling new API during init with use_explicit_rc_api flag\");\n }\n if (this.track_domains) {\n log(logLevelEnums.DEBUG, \"initialize, tracking domain info:[\" + this.track_domains + \"]\");\n }\n if (this.enableOrientationTracking) {\n log(logLevelEnums.DEBUG, \"initialize, enableOrientationTracking:[\" + this.enableOrientationTracking + \"]\");\n }\n if (!useSessionCookie) {\n log(logLevelEnums.WARNING, \"initialize, use_session_cookie is enabled:[\" + useSessionCookie + \"]\");\n }\n if (offlineMode) {\n log(logLevelEnums.DEBUG, \"initialize, offline_mode:[\" + offlineMode + \"], user info won't be send to the servers\");\n }\n if (offlineMode) {\n log(logLevelEnums.DEBUG, \"initialize, stored remote configs:[\" + JSON.stringify(remoteConfigs) + \"]\");\n }\n // functions, if provided, would be printed as true without revealing their content\n log(logLevelEnums.DEBUG, \"initialize, 'getViewName' callback override provided:[\" + (this.getViewName !== Countly.getViewName) + \"]\");\n log(logLevelEnums.DEBUG, \"initialize, 'getSearchQuery' callback override provided:[\" + (this.getSearchQuery !== Countly.getSearchQuery) + \"]\");\n\n // limits are printed here if they were modified \n if (this.maxKeyLength !== configurationDefaultValues.MAX_KEY_LENGTH) {\n log(logLevelEnums.DEBUG, \"initialize, maxKeyLength set to:[\" + this.maxKeyLength + \"] characters\");\n }\n if (this.maxValueSize !== configurationDefaultValues.MAX_VALUE_SIZE) {\n log(logLevelEnums.DEBUG, \"initialize, maxValueSize set to:[\" + this.maxValueSize + \"] characters\");\n }\n if (this.maxSegmentationValues !== configurationDefaultValues.MAX_SEGMENTATION_VALUES) {\n log(logLevelEnums.DEBUG, \"initialize, maxSegmentationValues set to:[\" + this.maxSegmentationValues + \"] key/value pairs\");\n }\n if (this.maxBreadcrumbCount !== configurationDefaultValues.MAX_BREADCRUMB_COUNT) {\n log(logLevelEnums.DEBUG, \"initialize, maxBreadcrumbCount for custom logs set to:[\" + this.maxBreadcrumbCount + \"] entries\");\n }\n if (this.maxStackTraceLinesPerThread !== configurationDefaultValues.MAX_STACKTRACE_LINES_PER_THREAD) {\n log(logLevelEnums.DEBUG, \"initialize, maxStackTraceLinesPerThread set to:[\" + this.maxStackTraceLinesPerThread + \"] lines\");\n }\n if (this.maxStackTraceLineLength !== configurationDefaultValues.MAX_STACKTRACE_LINE_LENGTH) {\n log(logLevelEnums.DEBUG, \"initialize, maxStackTraceLineLength set to:[\" + this.maxStackTraceLineLength + \"] characters\");\n }\n if (beatInterval !== configurationDefaultValues.BEAT_INTERVAL) {\n log(logLevelEnums.DEBUG, \"initialize, interval for heartbeats set to:[\" + beatInterval + \"] milliseconds\");\n }\n if (queueSize !== configurationDefaultValues.QUEUE_SIZE) {\n log(logLevelEnums.DEBUG, \"initialize, queue_size set to:[\" + queueSize + \"] items max\");\n }\n if (failTimeoutAmount !== configurationDefaultValues.FAIL_TIMEOUT_AMOUNT) {\n log(logLevelEnums.DEBUG, \"initialize, fail_timeout set to:[\" + failTimeoutAmount + \"] seconds of wait time after a failed connection to server\");\n }\n if (inactivityTime !== configurationDefaultValues.INACTIVITY_TIME) {\n log(logLevelEnums.DEBUG, \"initialize, inactivity_time set to:[\" + inactivityTime + \"] minutes to consider a user as inactive after no observable action\");\n }\n if (sessionUpdate !== configurationDefaultValues.SESSION_UPDATE) {\n log(logLevelEnums.DEBUG, \"initialize, session_update set to:[\" + sessionUpdate + \"] seconds to check if extending a session is needed while the user is active\");\n }\n if (maxEventBatch !== configurationDefaultValues.MAX_EVENT_BATCH) {\n log(logLevelEnums.DEBUG, \"initialize, max_events set to:[\" + maxEventBatch + \"] events to send in one batch\");\n }\n if (maxCrashLogs) {\n log(logLevelEnums.WARNING, \"initialize, max_logs set to:[\" + maxCrashLogs + \"] breadcrumbs to store for crash logs max, deprecated \");\n }\n if (sessionCookieTimeout !== configurationDefaultValues.SESSION_COOKIE_TIMEOUT) {\n log(logLevelEnums.DEBUG, \"initialize, session_cookie_timeout set to:[\" + sessionCookieTimeout + \"] minutes to expire a cookies session\");\n }\n var deviceIdParamValue = null;\n var searchQuery = self.getSearchQuery();\n var hasUTM = false;\n var utms = {};\n if (searchQuery) {\n // remove the '?' character from the beginning if it exists\n if (searchQuery.indexOf('?') === 0) {\n searchQuery = searchQuery.substring(1);\n }\n var parts = searchQuery.split(\"&\");\n for (var i = 0; i < parts.length; i++) {\n var nv = parts[i].split(\"=\");\n if (nv[0] === \"cly_id\") {\n setValueInStorage(\"cly_cmp_id\", nv[1]);\n } else if (nv[0] === \"cly_uid\") {\n setValueInStorage(\"cly_cmp_uid\", nv[1]);\n } else if (nv[0] === \"cly_device_id\") {\n deviceIdParamValue = nv[1];\n } else if ((nv[0] + \"\").indexOf(\"utm_\") === 0 && this.utm[nv[0].replace(\"utm_\", \"\")]) {\n utms[nv[0].replace(\"utm_\", \"\")] = nv[1];\n hasUTM = true;\n }\n }\n }\n\n // flag that indicates that the offline mode was enabled at the end of the previous app session \n var tempIdModeWasEnabled = getValueFromStorage(\"cly_id\") === \"[CLY]_temp_id\";\n var developerSetDeviceId = getConfig(\"device_id\", ob, undefined);\n if (typeof developerSetDeviceId === \"number\") {\n // device ID should always be string\n developerSetDeviceId = developerSetDeviceId.toString();\n }\n\n // check if there wqs stored ID\n if (getValueFromStorage(\"cly_id\") && !tempIdModeWasEnabled) {\n this.device_id = getValueFromStorage(\"cly_id\");\n log(logLevelEnums.INFO, \"initialize, Set the stored device ID\");\n deviceIdType = getValueFromStorage(\"cly_id_type\");\n if (!deviceIdType) {\n log(logLevelEnums.INFO, \"initialize, No device ID type info from the previous session, falling back to DEVELOPER_SUPPLIED\");\n // there is a device ID saved but there is no device ID information saved \n deviceIdType = DeviceIdTypeInternalEnums.DEVELOPER_SUPPLIED;\n }\n }\n // if not check if device ID was provided with URL\n else if (deviceIdParamValue !== null) {\n log(logLevelEnums.INFO, \"initialize, Device ID set by URL\");\n this.device_id = deviceIdParamValue;\n deviceIdType = DeviceIdTypeInternalEnums.URL_PROVIDED;\n }\n // if not check if developer provided any ID\n else if (developerSetDeviceId) {\n log(logLevelEnums.INFO, \"initialize, Device ID set by developer\");\n this.device_id = developerSetDeviceId;\n if (ob && Object.keys(ob).length) {\n if (ob.device_id !== undefined) {\n deviceIdType = DeviceIdTypeInternalEnums.DEVELOPER_SUPPLIED;\n }\n } else if (Countly.device_id !== undefined) {\n deviceIdType = DeviceIdTypeInternalEnums.DEVELOPER_SUPPLIED;\n }\n }\n // if not check if offline mode is on\n else if (offlineMode || tempIdModeWasEnabled) {\n this.device_id = \"[CLY]_temp_id\";\n deviceIdType = DeviceIdTypeInternalEnums.TEMPORARY_ID;\n if (offlineMode && tempIdModeWasEnabled) {\n log(logLevelEnums.INFO, \"initialize, Temp ID set, continuing offline mode from previous app session\");\n } else if (offlineMode && !tempIdModeWasEnabled) {\n // this if we get here then it means either first init we enter offline mode or we cleared the device ID during the init and still user entered the offline mode\n log(logLevelEnums.INFO, \"initialize, Temp ID set, entering offline mode\");\n } else {\n // no device ID was provided, no offline mode flag was provided, in the previous app session we entered offline mode and now we carry on\n offlineMode = true;\n log(logLevelEnums.INFO, \"initialize, Temp ID set, enabling offline mode\");\n }\n }\n // if all fails generate an ID\n else {\n log(logLevelEnums.INFO, \"initialize, Generating the device ID\");\n this.device_id = getConfig(\"device_id\", ob, getStoredIdOrGenerateId());\n if (ob && Object.keys(ob).length) {\n if (ob.device_id !== undefined) {\n deviceIdType = DeviceIdTypeInternalEnums.DEVELOPER_SUPPLIED;\n }\n } else if (Countly.device_id !== undefined) {\n deviceIdType = DeviceIdTypeInternalEnums.DEVELOPER_SUPPLIED;\n }\n }\n\n // Store the device ID and device ID type\n setValueInStorage(\"cly_id\", this.device_id);\n setValueInStorage(\"cly_id_type\", deviceIdType);\n\n // as we have assigned the device ID now we can save the tags\n if (hasUTM) {\n freshUTMTags = {};\n for (var tag in this.utm) {\n // this.utm is a filter for allowed tags\n if (utms[tag]) {\n // utms is the tags that were passed in the URL\n this.userData.set(\"utm_\" + tag, utms[tag]);\n freshUTMTags[tag] = utms[tag];\n } else {\n this.userData.unset(\"utm_\" + tag);\n }\n }\n this.userData.save();\n }\n notifyLoaders();\n setTimeout(function () {\n if (!Countly.noHeartBeat) {\n heartBeat();\n } else {\n log(logLevelEnums.WARNING, \"initialize, Heartbeat disabled. This is for testing purposes only!\");\n }\n if (self.remote_config) {\n self.fetch_remote_config(self.remote_config);\n }\n }, 1);\n if (isBrowser) {\n document.documentElement.setAttribute(\"data-countly-useragent\", currentUserAgentString());\n }\n // send instant health check request\n HealthCheck.sendInstantHCRequest();\n log(logLevelEnums.INFO, \"initialize, Countly initialized\");\n };\n\n /**\n * WARNING!!!\n * Should be used only for testing purposes!!!\n * \n * Resets Countly to its initial state (used mainly to wipe the queues in memory).\n * Calling this will result in a loss of data\n */\n this.halt = function () {\n log(logLevelEnums.WARNING, \"halt, Resetting Countly\");\n Countly.i = undefined;\n Countly.q = [];\n Countly.noHeartBeat = undefined;\n global = !Countly.i;\n sessionStarted = false;\n apiPath = \"/i\";\n readPath = \"/o/sdk\";\n beatInterval = 500;\n queueSize = 1000;\n requestQueue = [];\n eventQueue = [];\n remoteConfigs = {};\n crashLogs = [];\n timedEvents = {};\n ignoreReferrers = [];\n crashSegments = null;\n autoExtend = true;\n storedDuration = 0;\n lastView = null;\n lastViewTime = 0;\n lastViewStoredDuration = 0;\n failTimeout = 0;\n failTimeoutAmount = 60;\n inactivityTime = 20;\n inactivityCounter = 0;\n sessionUpdate = 60;\n maxEventBatch = 100;\n maxCrashLogs = null;\n useSessionCookie = true;\n sessionCookieTimeout = 30;\n readyToProcess = true;\n hasPulse = false;\n offlineMode = false;\n lastParams = {};\n trackTime = true;\n startTime = getTimestamp();\n lsSupport = true;\n firstView = null;\n deviceIdType = DeviceIdTypeInternalEnums.SDK_GENERATED;\n isScrollRegistryOpen = false;\n scrollRegistryTopPosition = 0;\n trackingScrolls = false;\n currentViewId = null;\n previousViewId = null;\n freshUTMTags = null;\n try {\n localStorage.setItem(\"cly_testLocal\", true);\n // clean up test\n localStorage.removeItem(\"cly_testLocal\");\n } catch (e) {\n log(logLevelEnums.ERROR, \"halt, Local storage test failed, will fallback to cookies\");\n lsSupport = false;\n }\n Countly.features = [featureEnums.SESSIONS, featureEnums.EVENTS, featureEnums.VIEWS, featureEnums.SCROLLS, featureEnums.CLICKS, featureEnums.FORMS, featureEnums.CRASHES, featureEnums.ATTRIBUTION, featureEnums.USERS, featureEnums.STAR_RATING, featureEnums.LOCATION, featureEnums.APM, featureEnums.FEEDBACK, featureEnums.REMOTE_CONFIG];\n\n // CONSENTS\n consents = {};\n for (var a = 0; a < Countly.features.length; a++) {\n consents[Countly.features[a]] = {};\n }\n self.app_key = undefined;\n self.device_id = undefined;\n self.onload = undefined;\n self.utm = undefined;\n self.ignore_prefetch = undefined;\n self.debug = undefined;\n self.test_mode = undefined;\n self.test_mode_eq = undefined;\n self.metrics = undefined;\n self.headers = undefined;\n self.url = undefined;\n self.app_version = undefined;\n self.country_code = undefined;\n self.city = undefined;\n self.ip_address = undefined;\n self.ignore_bots = undefined;\n self.force_post = undefined;\n self.rcAutoOptinAb = undefined;\n self.useExplicitRcApi = undefined;\n self.remote_config = undefined;\n self.ignore_visitor = undefined;\n self.require_consent = undefined;\n self.track_domains = undefined;\n self.storage = undefined;\n self.enableOrientationTracking = undefined;\n self.maxKeyLength = undefined;\n self.maxValueSize = undefined;\n self.maxSegmentationValues = undefined;\n self.maxBreadcrumbCount = undefined;\n self.maxStackTraceLinesPerThread = undefined;\n self.maxStackTraceLineLength = undefined;\n };\n\n /**\n * Modify feature groups for consent management. Allows you to group multiple features under one feature group\n * @param {object} features - object to define feature name as key and core features as value\n * @example <caption>Adding all features under one group</caption>\n * Countly.group_features({all:[\"sessions\",\"events\",\"views\",\"scrolls\",\"clicks\",\"forms\",\"crashes\",\"attribution\",\"users\"]});\n * //After this call Countly.add_consent(\"all\") to allow all features\n @example <caption>Grouping features</caption>\n * Countly.group_features({\n * activity:[\"sessions\",\"events\",\"views\"],\n * interaction:[\"scrolls\",\"clicks\",\"forms\"]\n * });\n * //After this call Countly.add_consent(\"activity\") to allow \"sessions\",\"events\",\"views\"\n * //or call Countly.add_consent(\"interaction\") to allow \"scrolls\",\"clicks\",\"forms\"\n * //or call Countly.add_consent(\"crashes\") to allow some separate feature\n */\n this.group_features = function (features) {\n log(logLevelEnums.INFO, \"group_features, Grouping features\");\n if (features) {\n for (var i in features) {\n if (!consents[i]) {\n if (typeof features[i] === \"string\") {\n consents[i] = {\n features: [features[i]]\n };\n } else if (features[i] && Array.isArray(features[i]) && features[i].length) {\n consents[i] = {\n features: features[i]\n };\n } else {\n log(logLevelEnums.ERROR, \"group_features, Incorrect feature list for [\" + i + \"] value: [\" + features[i] + \"]\");\n }\n } else {\n log(logLevelEnums.WARNING, \"group_features, Feature name [\" + i + \"] is already reserved\");\n }\n }\n } else {\n log(logLevelEnums.ERROR, \"group_features, Incorrect features:[\" + features + \"]\");\n }\n };\n\n /**\n * Check if consent is given for specific feature (either core feature of from custom feature group)\n * @param {string} feature - name of the feature, possible values, \"sessions\",\"events\",\"views\",\"scrolls\",\"clicks\",\"forms\",\"crashes\",\"attribution\",\"users\" or custom provided through {@link Countly.group_features}\n * @returns {Boolean} true if consent was given for the feature or false if it was not\n */\n this.check_consent = function (feature) {\n log(logLevelEnums.INFO, \"check_consent, Checking if consent is given for specific feature:[\" + feature + \"]\");\n if (!this.require_consent) {\n // we don't need to have specific consents\n log(logLevelEnums.INFO, \"check_consent, require_consent is off, no consent is necessary\");\n return true;\n }\n if (consents[feature]) {\n return !!(consents[feature] && consents[feature].optin);\n }\n log(logLevelEnums.ERROR, \"check_consent, No feature available for [\" + feature + \"]\");\n return false;\n };\n\n /**\n * Check and return the current device id type\n * @returns {number} a number that indicates the device id type\n */\n this.get_device_id_type = function () {\n log(logLevelEnums.INFO, \"check_device_id_type, Retrieving the current device id type.[\" + deviceIdType + \"]\");\n var type;\n switch (deviceIdType) {\n case DeviceIdTypeInternalEnums.SDK_GENERATED:\n type = self.DeviceIdType.SDK_GENERATED;\n break;\n case DeviceIdTypeInternalEnums.URL_PROVIDED:\n case DeviceIdTypeInternalEnums.DEVELOPER_SUPPLIED:\n type = self.DeviceIdType.DEVELOPER_SUPPLIED;\n break;\n case DeviceIdTypeInternalEnums.TEMPORARY_ID:\n type = self.DeviceIdType.TEMPORARY_ID;\n break;\n default:\n type = -1;\n break;\n }\n return type;\n };\n\n /**\n * Gets the current device id (of the CountlyClass instance)\n * @returns {string} device id\n */\n this.get_device_id = function () {\n log(logLevelEnums.INFO, \"get_device_id, Retrieving the device id: [\" + self.device_id + \"]\");\n return self.device_id;\n };\n\n /**\n * Check if any consent is given, for some cases, when crucial parts are like device_id are needed for any request\n * @returns {Boolean} true is has any consent given, false if no consents given\n */\n this.check_any_consent = function () {\n log(logLevelEnums.INFO, \"check_any_consent, Checking if any consent is given\");\n if (!this.require_consent) {\n // we don't need to have consents\n log(logLevelEnums.INFO, \"check_any_consent, require_consent is off, no consent is necessary\");\n return true;\n }\n for (var i in consents) {\n if (consents[i] && consents[i].optin) {\n return true;\n }\n }\n log(logLevelEnums.INFO, \"check_any_consent, No consents given\");\n return false;\n };\n\n /**\n * Add consent for specific feature, meaning, user allowed to track that data (either core feature of from custom feature group)\n * @param {string|array} feature - name of the feature, possible values, \"sessions\",\"events\",\"views\",\"scrolls\",\"clicks\",\"forms\",\"crashes\",\"attribution\",\"users\", etc or custom provided through {@link Countly.group_features}\n */\n this.add_consent = function (feature) {\n log(logLevelEnums.INFO, \"add_consent, Adding consent for [\" + feature + \"]\");\n if (Array.isArray(feature)) {\n for (var i = 0; i < feature.length; i++) {\n this.add_consent(feature[i]);\n }\n } else if (consents[feature]) {\n if (consents[feature].features) {\n consents[feature].optin = true;\n // this is added group, let's iterate through sub features\n this.add_consent(consents[feature].features);\n } else {\n // this is core feature\n if (consents[feature].optin !== true) {\n consents[feature].optin = true;\n updateConsent();\n setTimeout(function () {\n if (feature === featureEnums.SESSIONS && lastParams.begin_session) {\n self.begin_session.apply(self, lastParams.begin_session);\n lastParams.begin_session = null;\n } else if (feature === featureEnums.VIEWS && lastParams.track_pageview) {\n lastView = null;\n self.track_pageview.apply(self, lastParams.track_pageview);\n lastParams.track_pageview = null;\n }\n }, 1);\n }\n }\n } else {\n log(logLevelEnums.ERROR, \"add_consent, No feature available for [\" + feature + \"]\");\n }\n };\n\n /**\n * Remove consent for specific feature, meaning, user opted out to track that data (either core feature of from custom feature group)\n * @param {string|array} feature - name of the feature, possible values, \"sessions\",\"events\",\"views\",\"scrolls\",\"clicks\",\"forms\",\"crashes\",\"attribution\",\"users\", etc or custom provided through {@link Countly.group_features}\n * @param {Boolean} enforceConsentUpdate - regulates if a request will be sent to the server or not. If true, removing consents will send a request to the server and if false, consents will be removed without a request \n */\n this.remove_consent = function (feature) {\n log(logLevelEnums.INFO, \"remove_consent, Removing consent for [\" + feature + \"]\");\n this.remove_consent_internal(feature, true);\n };\n // removes consent without updating\n this.remove_consent_internal = function (feature, enforceConsentUpdate) {\n // if true updateConsent will execute when possible\n enforceConsentUpdate = enforceConsentUpdate || false;\n if (Array.isArray(feature)) {\n for (var i = 0; i < feature.length; i++) {\n this.remove_consent_internal(feature[i], enforceConsentUpdate);\n }\n } else if (consents[feature]) {\n if (consents[feature].features) {\n // this is added group, let's iterate through sub features\n this.remove_consent_internal(consents[feature].features, enforceConsentUpdate);\n } else {\n consents[feature].optin = false;\n // this is core feature\n if (enforceConsentUpdate && consents[feature].optin !== false) {\n updateConsent();\n }\n }\n } else {\n log(logLevelEnums.WARNING, \"remove_consent, No feature available for [\" + feature + \"]\");\n }\n };\n var consentTimer;\n var updateConsent = function updateConsent() {\n if (consentTimer) {\n // delay syncing consents\n clearTimeout(consentTimer);\n consentTimer = null;\n }\n consentTimer = setTimeout(function () {\n var consentMessage = {};\n for (var i = 0; i < Countly.features.length; i++) {\n if (consents[Countly.features[i]].optin === true) {\n consentMessage[Countly.features[i]] = true;\n } else {\n consentMessage[Countly.features[i]] = false;\n }\n }\n toRequestQueue({\n consent: JSON.stringify(consentMessage)\n });\n log(logLevelEnums.DEBUG, \"Consent update request has been sent to the queue.\");\n }, 1000);\n };\n this.enable_offline_mode = function () {\n log(logLevelEnums.INFO, \"enable_offline_mode, Enabling offline mode\");\n // clear consents\n this.remove_consent_internal(Countly.features, false);\n offlineMode = true;\n this.device_id = \"[CLY]_temp_id\";\n self.device_id = this.device_id;\n deviceIdType = DeviceIdTypeInternalEnums.TEMPORARY_ID;\n };\n this.disable_offline_mode = function (device_id) {\n if (!offlineMode) {\n log(logLevelEnums.WARNING, \"disable_offline_mode, Countly was not in offline mode.\");\n return;\n }\n log(logLevelEnums.INFO, \"disable_offline_mode, Disabling offline mode\");\n offlineMode = false;\n if (device_id && this.device_id !== device_id) {\n this.device_id = device_id;\n self.device_id = this.device_id;\n deviceIdType = DeviceIdTypeInternalEnums.DEVELOPER_SUPPLIED;\n setValueInStorage(\"cly_id\", this.device_id);\n setValueInStorage(\"cly_id_type\", DeviceIdTypeInternalEnums.DEVELOPER_SUPPLIED);\n log(logLevelEnums.INFO, \"disable_offline_mode, Changing id to: \" + this.device_id);\n } else {\n this.device_id = getStoredIdOrGenerateId();\n if (this.device_id === \"[CLY]_temp_id\") {\n this.device_id = generateUUID();\n }\n self.device_id = this.device_id;\n if (this.device_id !== getValueFromStorage(\"cly_id\")) {\n setValueInStorage(\"cly_id\", this.device_id);\n setValueInStorage(\"cly_id_type\", DeviceIdTypeInternalEnums.SDK_GENERATED);\n }\n }\n var needResync = false;\n if (requestQueue.length > 0) {\n for (var i = 0; i < requestQueue.length; i++) {\n if (requestQueue[i].device_id === \"[CLY]_temp_id\") {\n requestQueue[i].device_id = this.device_id;\n needResync = true;\n }\n }\n }\n if (needResync) {\n setValueInStorage(\"cly_queue\", requestQueue, true);\n }\n };\n\n /**\n * Start session\n * @param {boolean} noHeartBeat - true if you don't want to use internal heartbeat to manage session\n * @param {bool} force - force begin session request even if session cookie is enabled\n */\n this.begin_session = function (noHeartBeat, force) {\n log(logLevelEnums.INFO, \"begin_session, Starting the session. There was an ongoing session: [\" + sessionStarted + \"]\");\n if (noHeartBeat) {\n log(logLevelEnums.INFO, \"begin_session, Heartbeats are disabled\");\n }\n if (force) {\n log(logLevelEnums.INFO, \"begin_session, Session starts irrespective of session cookie\");\n }\n if (this.check_consent(featureEnums.SESSIONS)) {\n if (!sessionStarted) {\n if (this.enableOrientationTracking) {\n // report orientation\n this.report_orientation();\n add_event_listener(window, \"resize\", function () {\n self.report_orientation();\n });\n }\n lastBeat = getTimestamp();\n sessionStarted = true;\n autoExtend = !noHeartBeat;\n var expire = getValueFromStorage(\"cly_session\");\n log(logLevelEnums.VERBOSE, \"begin_session, Session state, forced: [\" + force + \"], useSessionCookie: [\" + useSessionCookie + \"], seconds to expire: [\" + (expire - lastBeat) + \"], expired: [\" + (parseInt(expire) <= getTimestamp()) + \"] \");\n if (force || !useSessionCookie || !expire || parseInt(expire) <= getTimestamp()) {\n log(logLevelEnums.INFO, \"begin_session, Session started\");\n if (firstView === null) {\n firstView = true;\n }\n var req = {};\n req.begin_session = 1;\n req.metrics = JSON.stringify(getMetrics());\n toRequestQueue(req);\n }\n setValueInStorage(\"cly_session\", getTimestamp() + sessionCookieTimeout * 60);\n }\n } else {\n lastParams.begin_session = arguments;\n }\n };\n\n /**\n * Report session duration\n * @param {int} sec - amount of seconds to report for current session\n */\n this.session_duration = function (sec) {\n log(logLevelEnums.INFO, \"session_duration, Reporting session duration\");\n if (this.check_consent(featureEnums.SESSIONS)) {\n if (sessionStarted) {\n log(logLevelEnums.INFO, \"session_duration, Session extended: \", sec);\n toRequestQueue({\n session_duration: sec\n });\n extendSession();\n }\n }\n };\n\n /**\n * End current session\n * @param {int} sec - amount of seconds to report for current session, before ending it\n * @param {bool} force - force end session request even if session cookie is enabled\n */\n this.end_session = function (sec, force) {\n log(logLevelEnums.INFO, \"end_session, Ending the current session. There was an on going session:[\" + sessionStarted + \"]\");\n if (this.check_consent(featureEnums.SESSIONS)) {\n if (sessionStarted) {\n sec = sec || getTimestamp() - lastBeat;\n reportViewDuration();\n if (!useSessionCookie || force) {\n log(logLevelEnums.INFO, \"end_session, Session ended\");\n toRequestQueue({\n end_session: 1,\n session_duration: sec\n });\n } else {\n this.session_duration(sec);\n }\n sessionStarted = false;\n }\n }\n };\n\n /**\n * Change current user/device id\n * @param {string} newId - new user/device ID to use. Must be a non-empty string value. Invalid values (like null, empty string or undefined) will be rejected\n * @param {boolean} merge - move data from old ID to new ID on server\n * */\n this.change_id = function (newId, merge) {\n log(logLevelEnums.INFO, \"change_id, Changing the ID\");\n if (merge) {\n log(logLevelEnums.INFO, \"change_id, Will merge the IDs\");\n }\n if (!newId || typeof newId !== \"string\" || newId.length === 0) {\n log(logLevelEnums.ERROR, \"change_id, The provided ID: [\" + newId + \"] is not a valid ID\");\n return;\n }\n if (offlineMode) {\n log(logLevelEnums.WARNING, \"change_id, Offline mode was on, initiating disabling sequence instead.\");\n this.disable_offline_mode(newId);\n return;\n }\n // eqeq is used here since we want to catch number to string checks too. type conversion might happen at a new init\n // eslint-disable-next-line eqeqeq\n if (this.device_id != newId) {\n if (!merge) {\n // process async queue before sending events\n processAsyncQueue();\n // empty event queue\n sendEventsForced();\n // end current session\n this.end_session(null, true);\n // clear timed events\n timedEvents = {};\n // clear all consents\n this.remove_consent_internal(Countly.features, false);\n }\n var oldId = this.device_id;\n this.device_id = newId;\n self.device_id = this.device_id;\n deviceIdType = DeviceIdTypeInternalEnums.DEVELOPER_SUPPLIED;\n setValueInStorage(\"cly_id\", this.device_id);\n setValueInStorage(\"cly_id_type\", DeviceIdTypeInternalEnums.DEVELOPER_SUPPLIED);\n log(logLevelEnums.INFO, \"change_id, Changing ID from:[\" + oldId + \"] to [\" + newId + \"]\");\n if (merge) {\n // no consent check here since 21.11.0\n toRequestQueue({\n old_device_id: oldId\n });\n } else {\n // start new session for new ID \n this.begin_session(!autoExtend, true);\n }\n // if init time remote config was enabled with a callback function, remove currently stored remote configs and fetch remote config again\n if (this.remote_config) {\n remoteConfigs = {};\n setValueInStorage(\"cly_remote_configs\", remoteConfigs);\n this.fetch_remote_config(this.remote_config);\n }\n }\n };\n\n /**\n * Report custom event\n * @param {Object} event - Countly {@link Event} object\n * @param {string} event.key - name or id of the event\n * @param {number} [event.count=1] - how many times did event occur\n * @param {number=} event.sum - sum to report with event (if any)\n * @param {number=} event.dur - duration to report with event (if any)\n * @param {Object=} event.segmentation - object with segments key /values\n * */\n this.add_event = function (event) {\n log(logLevelEnums.INFO, \"add_event, Adding event: \", event);\n // initially no consent is given\n var respectiveConsent = false;\n switch (event.key) {\n case internalEventKeyEnums.NPS:\n respectiveConsent = this.check_consent(featureEnums.FEEDBACK);\n break;\n case internalEventKeyEnums.SURVEY:\n respectiveConsent = this.check_consent(featureEnums.FEEDBACK);\n break;\n case internalEventKeyEnums.STAR_RATING:\n respectiveConsent = this.check_consent(featureEnums.STAR_RATING);\n break;\n case internalEventKeyEnums.VIEW:\n respectiveConsent = this.check_consent(featureEnums.VIEWS);\n break;\n case internalEventKeyEnums.ORIENTATION:\n respectiveConsent = this.check_consent(featureEnums.USERS);\n break;\n case internalEventKeyEnums.ACTION:\n respectiveConsent = this.check_consent(featureEnums.CLICKS) || this.check_consent(featureEnums.SCROLLS);\n break;\n default:\n respectiveConsent = this.check_consent(featureEnums.EVENTS);\n }\n // if consent is given adds event to the queue\n if (respectiveConsent) {\n add_cly_events(event);\n }\n };\n\n /**\n * Add events to event queue\n * @memberof Countly._internals\n * @param {Event} event - countly event\n * @param {String} eventIdOverride - countly event ID\n */\n function add_cly_events(event, eventIdOverride) {\n // ignore bots\n if (self.ignore_visitor) {\n log(logLevelEnums.ERROR, \"Adding event failed. Possible bot or user opt out\");\n return;\n }\n if (!event.key) {\n log(logLevelEnums.ERROR, \"Adding event failed. Event must have a key property\");\n return;\n }\n if (!event.count) {\n event.count = 1;\n }\n // we omit the internal event keys from truncation. TODO: This is not perfect as it would omit a key that includes an internal event key and more too. But that possibility seems negligible. \n if (!internalEventKeyEnumsArray.includes(event.key)) {\n // truncate event name and segmentation to internal limits\n event.key = truncateSingleValue(event.key, self.maxKeyLength, \"add_cly_event\", log);\n }\n event.segmentation = truncateObject(event.segmentation, self.maxKeyLength, self.maxValueSize, self.maxSegmentationValues, \"add_cly_event\", log);\n var props = [\"key\", \"count\", \"sum\", \"dur\", \"segmentation\"];\n var e = createNewObjectFromProperties(event, props);\n e.timestamp = getMsTimestamp();\n var date = new Date();\n e.hour = date.getHours();\n e.dow = date.getDay();\n e.id = eventIdOverride || secureRandom();\n if (e.key === internalEventKeyEnums.VIEW) {\n e.pvid = previousViewId || \"\";\n } else {\n e.cvid = currentViewId || \"\";\n }\n eventQueue.push(e);\n setValueInStorage(\"cly_event\", eventQueue);\n log(logLevelEnums.INFO, \"With event ID: [\" + e.id + \"], successfully adding the last event:\", e);\n }\n\n /**\n * Start timed event, which will fill in duration property upon ending automatically\n * This works basically as a timer and does not create an event till end_event is called\n * @param {string} key - event name that will be used as key property\n * */\n this.start_event = function (key) {\n if (!key || typeof key !== \"string\") {\n log(logLevelEnums.WARNING, \"start_event, you have to provide a valid string key instead of: [\" + key + \"]\");\n return;\n }\n log(logLevelEnums.INFO, \"start_event, Starting timed event with key: [\" + key + \"]\");\n // truncate event name to internal limits\n key = truncateSingleValue(key, self.maxKeyLength, \"start_event\", log);\n if (timedEvents[key]) {\n log(logLevelEnums.WARNING, \"start_event, Timed event with key: [\" + key + \"] already started\");\n return;\n }\n timedEvents[key] = getTimestamp();\n };\n\n /**\n * Cancel timed event, cancels a timed event if it exists\n * @param {string} key - event name that will canceled\n * @returns {boolean} - returns true if the event was canceled and false if no event with that key was found\n * */\n this.cancel_event = function (key) {\n if (!key || typeof key !== \"string\") {\n log(logLevelEnums.WARNING, \"cancel_event, you have to provide a valid string key instead of: [\" + key + \"]\");\n return false;\n }\n log(logLevelEnums.INFO, \"cancel_event, Canceling timed event with key: [\" + key + \"]\");\n // truncate event name to internal limits. This is done incase start_event key was truncated.\n key = truncateSingleValue(key, self.maxKeyLength, \"cancel_event\", log);\n if (timedEvents[key]) {\n delete timedEvents[key];\n log(logLevelEnums.INFO, \"cancel_event, Timed event with key: [\" + key + \"] is canceled\");\n return true;\n }\n log(logLevelEnums.WARNING, \"cancel_event, Timed event with key: [\" + key + \"] was not found\");\n return false;\n };\n\n /**\n * End timed event\n * @param {string|object} event - event key if string or Countly event same as passed to {@link Countly.add_event}\n * */\n this.end_event = function (event) {\n if (!event) {\n log(logLevelEnums.WARNING, \"end_event, you have to provide a valid string key or event object instead of: [\" + event + \"]\");\n return;\n }\n log(logLevelEnums.INFO, \"end_event, Ending timed event\");\n if (typeof event === \"string\") {\n // truncate event name to internal limits. This is done incase start_event key was truncated.\n event = truncateSingleValue(event, self.maxKeyLength, \"end_event\", log);\n event = {\n key: event\n };\n }\n if (!event.key) {\n log(logLevelEnums.ERROR, \"end_event, Timed event must have a key property\");\n return;\n }\n if (!timedEvents[event.key]) {\n log(logLevelEnums.ERROR, \"end_event, Timed event with key: [\" + event.key + \"] was not started\");\n return;\n }\n event.dur = getTimestamp() - timedEvents[event.key];\n this.add_event(event);\n delete timedEvents[event.key];\n };\n\n /**\n * Report device orientation\n * @param {string=} orientation - orientation as landscape or portrait\n * */\n this.report_orientation = function (orientation) {\n log(logLevelEnums.INFO, \"report_orientation, Reporting orientation\");\n if (this.check_consent(featureEnums.USERS)) {\n add_cly_events({\n key: internalEventKeyEnums.ORIENTATION,\n segmentation: {\n mode: orientation || getOrientation()\n }\n });\n }\n };\n\n /**\n * Report user conversion to the server (when user signup or made a purchase, or whatever your conversion is), if there is no campaign data, user will be reported as organic\n * @param {string=} campaign_id - id of campaign, or will use the one that is stored after campaign link click\n * @param {string=} campaign_user_id - id of user's click on campaign, or will use the one that is stored after campaign link click\n * \n * @deprecated use 'recordDirectAttribution' in place of this call\n * */\n this.report_conversion = function (campaign_id, campaign_user_id) {\n log(logLevelEnums.WARNING, \"report_conversion, Deprecated function call! Use 'recordDirectAttribution' in place of this call. Call will be redirected now!\");\n this.recordDirectAttribution(campaign_id, campaign_user_id);\n };\n /**\n * Report user conversion to the server (when user signup or made a purchase, or whatever your conversion is), if there is no campaign data, user will be reported as organic\n * @param {string=} campaign_id - id of campaign, or will use the one that is stored after campaign link click\n * @param {string=} campaign_user_id - id of user's click on campaign, or will use the one that is stored after campaign link click\n * */\n this.recordDirectAttribution = function (campaign_id, campaign_user_id) {\n log(logLevelEnums.INFO, \"recordDirectAttribution, Recording the attribution for campaign ID: [\" + campaign_id + \"] and the user ID: [\" + campaign_user_id + \"]\");\n if (this.check_consent(featureEnums.ATTRIBUTION)) {\n campaign_id = campaign_id || getValueFromStorage(\"cly_cmp_id\") || \"cly_organic\";\n campaign_user_id = campaign_user_id || getValueFromStorage(\"cly_cmp_uid\");\n if (campaign_user_id) {\n toRequestQueue({\n campaign_id: campaign_id,\n campaign_user: campaign_user_id\n });\n } else {\n toRequestQueue({\n campaign_id: campaign_id\n });\n }\n }\n };\n\n /**\n * Provide information about user\n * @param {Object} user - Countly {@link UserDetails} object\n * @param {string=} user.name - user's full name\n * @param {string=} user.username - user's username or nickname\n * @param {string=} user.email - user's email address\n * @param {string=} user.organization - user's organization or company\n * @param {string=} user.phone - user's phone number\n * @param {string=} user.picture - url to user's picture\n * @param {string=} user.gender - M value for male and F value for female\n * @param {number=} user.byear - user's birth year used to calculate current age\n * @param {Object=} user.custom - object with custom key value properties you want to save with user\n * */\n this.user_details = function (user) {\n log(logLevelEnums.INFO, \"user_details, Trying to add user details: \", user);\n if (this.check_consent(featureEnums.USERS)) {\n // process async queue before sending events\n processAsyncQueue();\n // flush events to event queue to prevent a drill issue\n sendEventsForced();\n log(logLevelEnums.INFO, \"user_details, flushed the event queue\");\n // truncating user values and custom object key value pairs\n user.name = truncateSingleValue(user.name, self.maxValueSize, \"user_details\", log);\n user.username = truncateSingleValue(user.username, self.maxValueSize, \"user_details\", log);\n user.email = truncateSingleValue(user.email, self.maxValueSize, \"user_details\", log);\n user.organization = truncateSingleValue(user.organization, self.maxValueSize, \"user_details\", log);\n user.phone = truncateSingleValue(user.phone, self.maxValueSize, \"user_details\", log);\n user.picture = truncateSingleValue(user.picture, 4096, \"user_details\", log);\n user.gender = truncateSingleValue(user.gender, self.maxValueSize, \"user_details\", log);\n user.byear = truncateSingleValue(user.byear, self.maxValueSize, \"user_details\", log);\n user.custom = truncateObject(user.custom, self.maxKeyLength, self.maxValueSize, self.maxSegmentationValues, \"user_details\", log);\n var props = [\"name\", \"username\", \"email\", \"organization\", \"phone\", \"picture\", \"gender\", \"byear\", \"custom\"];\n toRequestQueue({\n user_details: JSON.stringify(createNewObjectFromProperties(user, props))\n });\n }\n };\n\n /** ************************\n * Modifying custom property values of user details\n * Possible modification commands\n * - inc, to increment existing value by provided value\n * - mul, to multiply existing value by provided value\n * - max, to select maximum value between existing and provided value\n * - min, to select minimum value between existing and provided value\n * - setOnce, to set value only if it was not set before\n * - push, creates an array property, if property does not exist, and adds value to array\n * - pull, to remove value from array property\n * - addToSet, creates an array property, if property does not exist, and adds unique value to array, only if it does not yet exist in array\n ************************* */\n var customData = {};\n var change_custom_property = function change_custom_property(key, value, mod) {\n if (self.check_consent(featureEnums.USERS)) {\n if (!customData[key]) {\n customData[key] = {};\n }\n if (mod === \"$push\" || mod === \"$pull\" || mod === \"$addToSet\") {\n if (!customData[key][mod]) {\n customData[key][mod] = [];\n }\n customData[key][mod].push(value);\n } else {\n customData[key][mod] = value;\n }\n }\n };\n\n /**\n * Control user related custom properties. Don't forget to call save after finishing manipulation of custom data\n * @namespace Countly.userData\n * @name Countly.userData\n * @example\n * //set custom key value property\n * Countly.userData.set(\"twitter\", \"hulk@rowboat\");\n * //create or increase specific number property\n * Countly.userData.increment(\"login_count\");\n * //add new value to array property if it is not already there\n * Countly.userData.push_unique(\"selected_category\", \"IT\");\n * //send all custom property modified data to server\n * Countly.userData.save();\n */\n this.userData = {\n /**\n * Sets user's custom property value\n * @memberof Countly.userData\n * @param {string} key - name of the property to attach to user\n * @param {string|number} value - value to store under provided property\n * */\n set: function set(key, value) {\n log(logLevelEnums.INFO, \"[userData] set, Setting user's custom property value: [\" + value + \"] under the key: [\" + key + \"]\");\n // truncate user's custom property value to internal limits\n key = truncateSingleValue(key, self.maxKeyLength, \"userData set\", log);\n value = truncateSingleValue(value, self.maxValueSize, \"userData set\", log);\n customData[key] = value;\n },\n /**\n * Unset/deletes user's custom property\n * @memberof Countly.userData\n * @param {string} key - name of the property to delete\n * */\n unset: function unset(key) {\n log(logLevelEnums.INFO, \"[userData] unset, Resetting user's custom property with key: [\" + key + \"] \");\n customData[key] = \"\";\n },\n /**\n * Sets user's custom property value only if it was not set before\n * @memberof Countly.userData\n * @param {string} key - name of the property to attach to user\n * @param {string|number} value - value to store under provided property\n * */\n set_once: function set_once(key, value) {\n log(logLevelEnums.INFO, \"[userData] set_once, Setting user's unique custom property value: [\" + value + \"] under the key: [\" + key + \"] \");\n // truncate user's custom property value to internal limits\n key = truncateSingleValue(key, self.maxKeyLength, \"userData set_once\", log);\n value = truncateSingleValue(value, self.maxValueSize, \"userData set_once\", log);\n change_custom_property(key, value, \"$setOnce\");\n },\n /**\n * Increment value under the key of this user's custom properties by one\n * @memberof Countly.userData\n * @param {string} key - name of the property to attach to user\n * */\n increment: function increment(key) {\n log(logLevelEnums.INFO, \"[userData] increment, Increasing user's custom property value under the key: [\" + key + \"] by one\");\n // truncate property name wrt internal limits\n key = truncateSingleValue(key, self.maxKeyLength, \"userData increment\", log);\n change_custom_property(key, 1, \"$inc\");\n },\n /**\n * Increment value under the key of this user's custom properties by provided value\n * @memberof Countly.userData\n * @param {string} key - name of the property to attach to user\n * @param {number} value - value by which to increment server value\n * */\n increment_by: function increment_by(key, value) {\n log(logLevelEnums.INFO, \"[userData] increment_by, Increasing user's custom property value under the key: [\" + key + \"] by: [\" + value + \"]\");\n // truncate property name and value wrt internal limits \n key = truncateSingleValue(key, self.maxKeyLength, \"userData increment_by\", log);\n value = truncateSingleValue(value, self.maxValueSize, \"userData increment_by\", log);\n change_custom_property(key, value, \"$inc\");\n },\n /**\n * Multiply value under the key of this user's custom properties by provided value\n * @memberof Countly.userData\n * @param {string} key - name of the property to attach to user\n * @param {number} value - value by which to multiply server value\n * */\n multiply: function multiply(key, value) {\n log(logLevelEnums.INFO, \"[userData] multiply, Multiplying user's custom property value under the key: [\" + key + \"] by: [\" + value + \"]\");\n // truncate key value pair wrt internal limits\n key = truncateSingleValue(key, self.maxKeyLength, \"userData multiply\", log);\n value = truncateSingleValue(value, self.maxValueSize, \"userData multiply\", log);\n change_custom_property(key, value, \"$mul\");\n },\n /**\n * Save maximal value under the key of this user's custom properties\n * @memberof Countly.userData\n * @param {string} key - name of the property to attach to user\n * @param {number} value - value which to compare to server's value and store maximal value of both provided\n * */\n max: function max(key, value) {\n log(logLevelEnums.INFO, \"[userData] max, Saving user's maximum custom property value compared to the value: [\" + value + \"] under the key: [\" + key + \"]\");\n // truncate key value pair wrt internal limits\n key = truncateSingleValue(key, self.maxKeyLength, \"userData max\", log);\n value = truncateSingleValue(value, self.maxValueSize, \"userData max\", log);\n change_custom_property(key, value, \"$max\");\n },\n /**\n * Save minimal value under the key of this user's custom properties\n * @memberof Countly.userData\n * @param {string} key - name of the property to attach to user\n * @param {number} value - value which to compare to server's value and store minimal value of both provided\n * */\n min: function min(key, value) {\n log(logLevelEnums.INFO, \"[userData] min, Saving user's minimum custom property value compared to the value: [\" + value + \"] under the key: [\" + key + \"]\");\n // truncate key value pair wrt internal limits\n key = truncateSingleValue(key, self.maxKeyLength, \"userData min\", log);\n value = truncateSingleValue(value, self.maxValueSize, \"userData min\", log);\n change_custom_property(key, value, \"$min\");\n },\n /**\n * Add value to array under the key of this user's custom properties. If property is not an array, it will be converted to array\n * @memberof Countly.userData\n * @param {string} key - name of the property to attach to user\n * @param {string|number} value - value which to add to array\n * */\n push: function push(key, value) {\n log(logLevelEnums.INFO, \"[userData] push, Pushing a value: [\" + value + \"] under the key: [\" + key + \"] to user's custom property array\");\n // truncate key value pair wrt internal limits\n key = truncateSingleValue(key, self.maxKeyLength, \"userData push\", log);\n value = truncateSingleValue(value, self.maxValueSize, \"userData push\", log);\n change_custom_property(key, value, \"$push\");\n },\n /**\n * Add value to array under the key of this user's custom properties, storing only unique values. If property is not an array, it will be converted to array\n * @memberof Countly.userData\n * @param {string} key - name of the property to attach to user\n * @param {string|number} value - value which to add to array\n * */\n push_unique: function push_unique(key, value) {\n log(logLevelEnums.INFO, \"[userData] push_unique, Pushing a unique value: [\" + value + \"] under the key: [\" + key + \"] to user's custom property array\");\n // truncate key value pair wrt internal limits\n key = truncateSingleValue(key, self.maxKeyLength, \"userData push_unique\", log);\n value = truncateSingleValue(value, self.maxValueSize, \"userData push_unique\", log);\n change_custom_property(key, value, \"$addToSet\");\n },\n /**\n * Remove value from array under the key of this user's custom properties\n * @memberof Countly.userData\n * @param {string} key - name of the property\n * @param {string|number} value - value which to remove from array\n * */\n pull: function pull(key, value) {\n log(logLevelEnums.INFO, \"[userData] pull, Removing the value: [\" + value + \"] under the key: [\" + key + \"] from user's custom property array\");\n change_custom_property(key, value, \"$pull\");\n },\n /**\n * Save changes made to user's custom properties object and send them to server\n * @memberof Countly.userData\n * */\n save: function save() {\n log(logLevelEnums.INFO, \"[userData] save, Saving changes to user's custom property\");\n if (self.check_consent(featureEnums.USERS)) {\n // process async queue before sending events\n processAsyncQueue();\n // flush events to event queue to prevent a drill issue\n sendEventsForced();\n log(logLevelEnums.INFO, \"user_details, flushed the event queue\");\n toRequestQueue({\n user_details: JSON.stringify({\n custom: customData\n })\n });\n }\n customData = {};\n }\n };\n\n /**\n * Report performance trace\n * @param {Object} trace - apm trace object\n * @param {string} trace.type - device or network\n * @param {string} trace.name - url or view of the trace\n * @param {number} trace.stz - start timestamp\n * @param {number} trace.etz - end timestamp\n * @param {Object} trace.app_metrics - key/value metrics like duration, to report with trace where value is number\n * @param {Object=} trace.apm_attr - object profiling attributes (not yet supported)\n */\n this.report_trace = function (trace) {\n log(logLevelEnums.INFO, \"report_trace, Reporting performance trace\");\n if (this.check_consent(featureEnums.APM)) {\n var props = [\"type\", \"name\", \"stz\", \"etz\", \"apm_metrics\", \"apm_attr\"];\n for (var i = 0; i < props.length; i++) {\n if (props[i] !== \"apm_attr\" && typeof trace[props[i]] === \"undefined\") {\n log(logLevelEnums.WARNING, \"report_trace, APM trace don't have the property: \" + props[i]);\n return;\n }\n }\n // truncate trace name and metrics wrt internal limits\n trace.name = truncateSingleValue(trace.name, self.maxKeyLength, \"report_trace\", log);\n trace.app_metrics = truncateObject(trace.app_metrics, self.maxKeyLength, self.maxValueSize, self.maxSegmentationValues, \"report_trace\", log);\n var e = createNewObjectFromProperties(trace, props);\n e.timestamp = trace.stz;\n var date = new Date();\n e.hour = date.getHours();\n e.dow = date.getDay();\n toRequestQueue({\n apm: JSON.stringify(e)\n });\n log(logLevelEnums.INFO, \"report_trace, Successfully adding APM trace: \", e);\n }\n };\n\n /**\n * Automatically track javascript errors that happen on the website and report them to the server\n * @param {string=} segments - additional key value pairs you want to provide with error report, like versions of libraries used, etc.\n * */\n this.track_errors = function (segments) {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"track_errors, window object is not available. Not tracking errors.\");\n return;\n }\n log(logLevelEnums.INFO, \"track_errors, Started tracking errors\");\n // Indicated that for this instance of the countly error tracking is enabled\n Countly.i[this.app_key].tracking_crashes = true;\n if (!window.cly_crashes) {\n window.cly_crashes = true;\n crashSegments = segments;\n // override global 'uncaught error' handler\n window.onerror = function errorBundler(msg, url, line, col, err) {\n // old browsers like IE 10 and Safari 9 won't give this value 'err' to us, but if it is provided we can trigger error recording immediately\n if (err !== undefined && err !== null) {\n // false indicates fatal error (as in non_fatal:false)\n dispatchErrors(err, false);\n }\n // fallback if no error object is present for older browsers, we create it instead\n else {\n col = col || window.event && window.event.errorCharacter;\n var error = \"\";\n if (typeof msg !== \"undefined\") {\n error += msg + \"\\n\";\n }\n if (typeof url !== \"undefined\") {\n error += \"at \" + url;\n }\n if (typeof line !== \"undefined\") {\n error += \":\" + line;\n }\n if (typeof col !== \"undefined\") {\n error += \":\" + col;\n }\n error += \"\\n\";\n try {\n var stack = [];\n // deprecated, must be changed \n // eslint-disable-next-line no-caller\n var f = errorBundler.caller;\n while (f) {\n stack.push(f.name);\n f = f.caller;\n }\n error += stack.join(\"\\n\");\n } catch (ex) {\n log(logLevelEnums.ERROR, \"track_errors, Call stack generation experienced a problem: \" + ex);\n }\n // false indicates fatal error (as in non_fatal:false)\n dispatchErrors(error, false);\n }\n };\n\n // error handling for 'uncaught rejections'\n window.addEventListener(\"unhandledrejection\", function (event) {\n // true indicates non fatal error (as in non_fatal: true)\n dispatchErrors(new Error(\"Unhandled rejection (reason: \" + (event.reason && event.reason.stack ? event.reason.stack : event.reason) + \").\"), true);\n });\n }\n };\n\n /**\n * Log an exception that you caught through try and catch block and handled yourself and just want to report it to server\n * @param {Object} err - error exception object provided in catch block\n * @param {string=} segments - additional key value pairs you want to provide with error report, like versions of libraries used, etc.\n * */\n this.log_error = function (err, segments) {\n log(logLevelEnums.INFO, \"log_error, Logging errors\");\n // true indicates non fatal error (as in non_fatal:true)\n this.recordError(err, true, segments);\n };\n\n /**\n * Add new line in the log of breadcrumbs of what user did, will be included together with error report\n * @param {string} record - any text describing what user did\n * */\n this.add_log = function (record) {\n log(logLevelEnums.INFO, \"add_log, Adding a new log of breadcrumbs: [ \" + record + \" ]\");\n if (this.check_consent(featureEnums.CRASHES)) {\n // truncate description wrt internal limits\n record = truncateSingleValue(record, self.maxValueSize, \"add_log\", log);\n while (crashLogs.length >= self.maxBreadcrumbCount) {\n crashLogs.shift();\n log(logLevelEnums.WARNING, \"add_log, Reached maximum crashLogs size. Will erase the oldest one.\");\n }\n crashLogs.push(record);\n }\n };\n /**\n * Fetch remote config from the server (old one for method=fetch_remote_config API)\n * @param {array=} keys - Array of keys to fetch, if not provided will fetch all keys\n * @param {array=} omit_keys - Array of keys to omit, if provided will fetch all keys except provided ones\n * @param {function=} callback - Callback to notify with first param error and second param remote config object\n * */\n this.fetch_remote_config = function (keys, omit_keys, callback) {\n var keysFiltered = null;\n var omitKeysFiltered = null;\n var callbackFiltered = null;\n\n // check first param is truthy\n if (keys) {\n // if third parameter is falsy and first param is a function assign it as the callback function\n if (!callback && typeof keys === \"function\") {\n callbackFiltered = keys;\n }\n // else if first param is an array assign it as 'keys'\n else if (Array.isArray(keys)) {\n keysFiltered = keys;\n }\n }\n // check second param is truthy\n if (omit_keys) {\n // if third parameter is falsy and second param is a function assign it as the callback function\n if (!callback && typeof omit_keys === \"function\") {\n callbackFiltered = omit_keys;\n }\n // else if second param is an array assign it as 'omit_keys'\n else if (Array.isArray(omit_keys)) {\n omitKeysFiltered = omit_keys;\n }\n }\n // assign third param as a callback function if it was not assigned yet in first two params\n if (!callbackFiltered && typeof callback === \"function\") {\n callbackFiltered = callback;\n }\n\n // use new RC API\n if (this.useExplicitRcApi) {\n log(logLevelEnums.INFO, \"fetch_remote_config, Fetching remote config\");\n // opt in is true(1) or false(0)\n var opt = this.rcAutoOptinAb ? 1 : 0;\n fetch_remote_config_explicit(keysFiltered, omitKeysFiltered, opt, null, callbackFiltered);\n return;\n }\n log(logLevelEnums.WARNING, \"fetch_remote_config, Fetching remote config, with legacy API\");\n fetch_remote_config_explicit(keysFiltered, omitKeysFiltered, null, \"legacy\", callbackFiltered);\n };\n\n /**\n * Fetch remote config from the server (new one with method=rc API)\n * @param {array=} keys - Array of keys to fetch, if not provided will fetch all keys\n * @param {array=} omit_keys - Array of keys to omit, if provided will fetch all keys except provided ones\n * @param {number=} optIn - an inter to indicate if the user is opted in for the AB testing or not (1 is opted in, 0 is opted out)\n * @param {string=} api - which API to use, if not provided would use default (\"legacy\" is for method=\"fetch_remote_config\", default is method=\"rc\")\n * @param {function=} callback - Callback to notify with first param error and second param remote config object\n * */\n function fetch_remote_config_explicit(keys, omit_keys, optIn, api, callback) {\n log(logLevelEnums.INFO, \"fetch_remote_config_explicit, Fetching sequence initiated\");\n var request = {\n method: \"rc\",\n av: self.app_version\n };\n // check if keys were provided\n if (keys) {\n request.keys = JSON.stringify(keys);\n }\n // check if omit_keys were provided\n if (omit_keys) {\n request.omit_keys = JSON.stringify(omit_keys);\n }\n var providedCall;\n // legacy api prompt check\n if (api === \"legacy\") {\n request.method = \"fetch_remote_config\";\n }\n // opted out/in check\n if (optIn === 0) {\n request.oi = 0;\n }\n if (optIn === 1) {\n request.oi = 1;\n }\n // callback check\n if (typeof callback === \"function\") {\n providedCall = callback;\n }\n if (self.check_consent(featureEnums.SESSIONS)) {\n request.metrics = JSON.stringify(getMetrics());\n }\n if (self.check_consent(featureEnums.REMOTE_CONFIG)) {\n prepareRequest(request);\n makeNetworkRequest(\"fetch_remote_config_explicit\", self.url + readPath, request, function (err, params, responseText) {\n if (err) {\n // error has been logged by the request function\n return;\n }\n try {\n var configs = JSON.parse(responseText);\n if (request.keys || request.omit_keys) {\n // we merge config\n for (var i in configs) {\n remoteConfigs[i] = configs[i];\n }\n } else {\n // we replace config\n remoteConfigs = configs;\n }\n setValueInStorage(\"cly_remote_configs\", remoteConfigs);\n } catch (ex) {\n log(logLevelEnums.ERROR, \"fetch_remote_config_explicit, Had an issue while parsing the response: \" + ex);\n }\n if (providedCall) {\n log(logLevelEnums.INFO, \"fetch_remote_config_explicit, Callback function is provided\");\n providedCall(err, remoteConfigs);\n }\n // JSON array can pass \n }, true);\n } else {\n log(logLevelEnums.ERROR, \"fetch_remote_config_explicit, Remote config requires explicit consent\");\n if (providedCall) {\n providedCall(new Error(\"Remote config requires explicit consent\"), remoteConfigs);\n }\n }\n }\n\n /**\n * AB testing key provider, opts the user in for the selected keys\n * @param {array=} keys - Array of keys opt in FOR\n * */\n this.enrollUserToAb = function (keys) {\n log(logLevelEnums.INFO, \"enrollUserToAb, Providing AB test keys to opt in for\");\n if (!keys || !Array.isArray(keys) || keys.length === 0) {\n log(logLevelEnums.ERROR, \"enrollUserToAb, No keys provided\");\n return;\n }\n var request = {\n method: \"ab\",\n keys: JSON.stringify(keys),\n av: self.app_version\n };\n prepareRequest(request);\n makeNetworkRequest(\"enrollUserToAb\", this.url + readPath, request, function (err, params, responseText) {\n if (err) {\n // error has been logged by the request function\n return;\n }\n try {\n var resp = JSON.parse(responseText);\n log(logLevelEnums.DEBUG, \"enrollUserToAb, Parsed the response's result: [\" + resp.result + \"]\");\n } catch (ex) {\n log(logLevelEnums.ERROR, \"enrollUserToAb, Had an issue while parsing the response: \" + ex);\n }\n // JSON array can pass \n }, true);\n };\n\n /**\n * Gets remote config object (all key/value pairs) or specific value for provided key from the storage\n * @param {string=} key - if provided, will return value for key, or return whole object\n * @returns {object} remote configs\n * */\n this.get_remote_config = function (key) {\n log(logLevelEnums.INFO, \"get_remote_config, Getting remote config from storage\");\n if (typeof key !== \"undefined\") {\n return remoteConfigs[key];\n }\n return remoteConfigs;\n };\n\n /**\n * Stop tracking duration time for this user\n * */\n this.stop_time = function () {\n log(logLevelEnums.INFO, \"stop_time, Stopping tracking duration\");\n if (trackTime) {\n trackTime = false;\n storedDuration = getTimestamp() - lastBeat;\n lastViewStoredDuration = getTimestamp() - lastViewTime;\n }\n };\n\n /** \n * Start tracking duration time for this user, by default it is automatically tracked if you are using internal session handling\n * */\n this.start_time = function () {\n log(logLevelEnums.INFO, \"start_time, Starting tracking duration\");\n if (!trackTime) {\n trackTime = true;\n lastBeat = getTimestamp() - storedDuration;\n lastViewTime = getTimestamp() - lastViewStoredDuration;\n lastViewStoredDuration = 0;\n extendSession();\n }\n };\n\n /**\n * Track user sessions automatically, including time user spent on your website\n * */\n this.track_sessions = function () {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"track_sessions, window object is not available. Not tracking sessions.\");\n return;\n }\n log(logLevelEnums.INFO, \"track_session, Starting tracking user session\");\n // start session\n this.begin_session();\n this.start_time();\n // end session on unload\n add_event_listener(window, \"beforeunload\", function () {\n // process async queue before sending events\n processAsyncQueue();\n // empty the event queue\n sendEventsForced();\n self.end_session();\n });\n\n // manage sessions on window visibility events\n var hidden = \"hidden\";\n\n /**\n * Handle visibility change events\n */\n function onchange() {\n if (document[hidden] || !document.hasFocus()) {\n self.stop_time();\n } else {\n self.start_time();\n }\n }\n\n // add focus handling eventListeners\n add_event_listener(window, \"focus\", onchange);\n add_event_listener(window, \"blur\", onchange);\n\n // newer mobile compatible way\n add_event_listener(window, \"pageshow\", onchange);\n add_event_listener(window, \"pagehide\", onchange);\n\n // IE 9 and lower:\n if (\"onfocusin\" in document) {\n add_event_listener(window, \"focusin\", onchange);\n add_event_listener(window, \"focusout\", onchange);\n }\n\n // Page Visibility API for changing tabs and minimizing browser\n if (hidden in document) {\n document.addEventListener(\"visibilitychange\", onchange);\n } else if (\"mozHidden\" in document) {\n hidden = \"mozHidden\";\n document.addEventListener(\"mozvisibilitychange\", onchange);\n } else if (\"webkitHidden\" in document) {\n hidden = \"webkitHidden\";\n document.addEventListener(\"webkitvisibilitychange\", onchange);\n } else if (\"msHidden\" in document) {\n hidden = \"msHidden\";\n document.addEventListener(\"msvisibilitychange\", onchange);\n }\n\n /**\n * Reset inactivity counter and time\n */\n function resetInactivity() {\n if (inactivityCounter >= inactivityTime) {\n self.start_time();\n }\n inactivityCounter = 0;\n }\n add_event_listener(window, \"mousemove\", resetInactivity);\n add_event_listener(window, \"click\", resetInactivity);\n add_event_listener(window, \"keydown\", resetInactivity);\n add_event_listener(window, \"scroll\", resetInactivity);\n\n // track user inactivity\n setInterval(function () {\n inactivityCounter++;\n if (inactivityCounter >= inactivityTime) {\n self.stop_time();\n }\n }, 60000);\n };\n\n /**\n * Track page views user visits\n * @param {string=} page - optional name of the page, by default uses current url path\n * @param {array=} ignoreList - optional array of strings or regexps to test for the url/view name to ignore and not report\n * @param {object=} viewSegments - optional key value object with segments to report with the view\n * */\n this.track_pageview = function (page, ignoreList, viewSegments) {\n if (!isBrowser && !page) {\n log(logLevelEnums.WARNING, \"track_pageview, window object is not available. Not tracking page views is page is not provided.\");\n return;\n }\n log(logLevelEnums.INFO, \"track_pageview, Tracking page views\");\n log(logLevelEnums.VERBOSE, \"track_pageview, last view is:[\" + lastView + \"], current view ID is:[\" + currentViewId + \"], previous view ID is:[\" + previousViewId + \"]\");\n if (lastView && trackingScrolls) {\n log(logLevelEnums.DEBUG, \"track_pageview, Scroll registry triggered\");\n processScrollView(); // for single page site's view change\n isScrollRegistryOpen = true;\n scrollRegistryTopPosition = 0;\n }\n reportViewDuration();\n previousViewId = currentViewId;\n currentViewId = secureRandom();\n // truncate page name and segmentation wrt internal limits\n page = truncateSingleValue(page, self.maxKeyLength, \"track_pageview\", log);\n // if the first parameter we got is an array we got the ignoreList first, assign it here\n if (page && Array.isArray(page)) {\n ignoreList = page;\n page = null;\n }\n // no page or ignore list provided, get the current view name/url\n if (!page) {\n page = this.getViewName();\n }\n if (page === undefined || page === \"\") {\n log(logLevelEnums.ERROR, \"track_pageview, No page name to track (it is either undefined or empty string). No page view can be tracked.\");\n return;\n }\n if (page === null) {\n log(logLevelEnums.ERROR, \"track_pageview, View name returned as null. Page view will be ignored.\");\n return;\n }\n if (ignoreList && ignoreList.length) {\n for (var i = 0; i < ignoreList.length; i++) {\n try {\n var reg = new RegExp(ignoreList[i]);\n if (reg.test(page)) {\n log(logLevelEnums.INFO, \"track_pageview, Ignoring the page: \" + page);\n return;\n }\n } catch (ex) {\n log(logLevelEnums.ERROR, \"track_pageview, Problem with finding ignore list item: \" + ignoreList[i] + \", error: \" + ex);\n }\n }\n }\n lastView = page;\n lastViewTime = getTimestamp();\n log(logLevelEnums.VERBOSE, \"track_pageview, last view is assigned:[\" + lastView + \"], current view ID is:[\" + currentViewId + \"], previous view ID is:[\" + previousViewId + \"]\");\n var segments = {\n name: page,\n visit: 1,\n view: self.getViewUrl()\n };\n // truncate new segment\n segments = truncateObject(segments, self.maxKeyLength, self.maxValueSize, self.maxSegmentationValues, \"track_pageview\", log);\n if (this.track_domains) {\n segments.domain = window.location.hostname;\n }\n if (useSessionCookie) {\n if (!sessionStarted) {\n // tracking view was called before tracking session, so we check expiration ourselves\n var expire = getValueFromStorage(\"cly_session\");\n if (!expire || parseInt(expire) <= getTimestamp()) {\n firstView = false;\n segments.start = 1;\n }\n }\n // tracking views called after tracking session, so we can rely on tracking session decision\n else if (firstView) {\n firstView = false;\n segments.start = 1;\n }\n }\n // if we are not using session cookie, there is no session state between refreshes\n // so we fallback to old logic of landing\n else if (isBrowser && typeof document.referrer !== \"undefined\" && document.referrer.length) {\n var matches = urlParseRE.exec(document.referrer);\n // do not report referrers of current website\n if (matches && matches[11] && matches[11] !== window.location.hostname) {\n segments.start = 1;\n }\n }\n\n // add utm tags\n if (freshUTMTags && Object.keys(freshUTMTags).length) {\n log(logLevelEnums.INFO, \"track_pageview, Adding fresh utm tags to segmentation:[\" + JSON.stringify(freshUTMTags) + \"]\");\n for (var utm in freshUTMTags) {\n if (typeof segments[\"utm_\" + utm] === \"undefined\") {\n segments[\"utm_\" + utm] = freshUTMTags[utm];\n }\n }\n // TODO: Current logic adds utm tags to each view if the user landed with utm tags for that session(in non literal sense)\n // we might want to change this logic to add utm tags only to the first view's segmentation by freshUTMTags = null; here\n }\n\n // add referrer if it is usable\n if (isBrowser && isReferrerUsable()) {\n log(logLevelEnums.INFO, \"track_pageview, Adding referrer to segmentation:[\" + document.referrer + \"]\");\n segments.referrer = document.referrer; // add referrer\n }\n\n if (viewSegments) {\n viewSegments = truncateObject(viewSegments, self.maxKeyLength, self.maxValueSize, self.maxSegmentationValues, \"track_pageview\", log);\n for (var key in viewSegments) {\n if (typeof segments[key] === \"undefined\") {\n segments[key] = viewSegments[key];\n }\n }\n }\n\n // track pageview\n if (this.check_consent(featureEnums.VIEWS)) {\n add_cly_events({\n key: internalEventKeyEnums.VIEW,\n segmentation: segments\n }, currentViewId);\n } else {\n lastParams.track_pageview = arguments;\n }\n };\n\n /**\n * Track page views user visits. Alias of {@link track_pageview} method for compatibility with NodeJS SDK\n * @param {string=} page - optional name of the page, by default uses current url path\n * @param {array=} ignoreList - optional array of strings or regexps to test for the url/view name to ignore and not report\n * @param {object=} segments - optional view segments to track with the view\n * */\n this.track_view = function (page, ignoreList, segments) {\n log(logLevelEnums.INFO, \"track_view, Initiating tracking page views\");\n this.track_pageview(page, ignoreList, segments);\n };\n\n /**\n * Track all clicks on this page\n * @param {Object=} parent - DOM object which children to track, by default it is document body\n * */\n this.track_clicks = function (parent) {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"track_clicks, window object is not available. Not tracking clicks.\");\n return;\n }\n log(logLevelEnums.INFO, \"track_clicks, Starting to track clicks\");\n if (parent) {\n log(logLevelEnums.INFO, \"track_clicks, Tracking the specified children:[\" + parent + \"]\");\n }\n parent = parent || document;\n var shouldProcess = true;\n /**\n * Process click information\n * @param {Event} event - click event\n */\n function processClick(event) {\n if (shouldProcess) {\n shouldProcess = false;\n\n // cross browser click coordinates\n get_page_coord(event);\n if (typeof event.pageX !== \"undefined\" && typeof event.pageY !== \"undefined\") {\n var height = getDocHeight();\n var width = getDocWidth();\n\n // record click event\n if (self.check_consent(featureEnums.CLICKS)) {\n var segments = {\n type: \"click\",\n x: event.pageX,\n y: event.pageY,\n width: width,\n height: height,\n view: self.getViewUrl()\n };\n // truncate new segment\n segments = truncateObject(segments, self.maxKeyLength, self.maxValueSize, self.maxSegmentationValues, \"processClick\", log);\n if (self.track_domains) {\n segments.domain = window.location.hostname;\n }\n add_cly_events({\n key: internalEventKeyEnums.ACTION,\n segmentation: segments\n });\n }\n }\n setTimeout(function () {\n shouldProcess = true;\n }, 1000);\n }\n }\n // add any events you want\n add_event_listener(parent, \"click\", processClick);\n };\n\n /**\n * Track all scrolls on this page\n * @param {Object=} parent - DOM object which children to track, by default it is document body\n * */\n this.track_scrolls = function (parent) {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"track_scrolls, window object is not available. Not tracking scrolls.\");\n return;\n }\n log(logLevelEnums.INFO, \"track_scrolls, Starting to track scrolls\");\n if (parent) {\n log(logLevelEnums.INFO, \"track_scrolls, Tracking the specified children\");\n }\n parent = parent || window;\n isScrollRegistryOpen = true;\n trackingScrolls = true;\n add_event_listener(parent, \"scroll\", processScroll);\n add_event_listener(parent, \"beforeunload\", processScrollView);\n };\n\n /**\n * Generate custom event for all links that were clicked on this page\n * @param {Object=} parent - DOM object which children to track, by default it is document body\n * */\n this.track_links = function (parent) {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"track_links, window object is not available. Not tracking links.\");\n return;\n }\n log(logLevelEnums.INFO, \"track_links, Starting to track clicks to links\");\n if (parent) {\n log(logLevelEnums.INFO, \"track_links, Tracking the specified children\");\n }\n parent = parent || document;\n /**\n * Process click information\n * @param {Event} event - click event\n */\n function processClick(event) {\n // get element which was clicked\n var elem = get_closest_element(get_event_target(event), \"a\");\n if (elem) {\n // cross browser click coordinates\n get_page_coord(event);\n\n // record click event\n if (self.check_consent(featureEnums.CLICKS)) {\n add_cly_events({\n key: \"linkClick\",\n segmentation: {\n href: elem.href,\n text: elem.innerText,\n id: elem.id,\n view: self.getViewUrl()\n }\n });\n }\n }\n }\n\n // add any events you want\n add_event_listener(parent, \"click\", processClick);\n };\n\n /**\n * Generate custom event for all forms that were submitted on this page\n * @param {Object=} parent - DOM object which children to track, by default it is document body\n * @param {boolean=} trackHidden - provide true to also track hidden inputs, default false\n * */\n this.track_forms = function (parent, trackHidden) {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"track_forms, window object is not available. Not tracking forms.\");\n return;\n }\n log(logLevelEnums.INFO, \"track_forms, Starting to track form submissions. DOM object provided:[\" + !!parent + \"] Tracking hidden inputs :[\" + !!trackHidden + \"]\");\n parent = parent || document;\n /**\n * Get name of the input\n * @param {HTMLElement} input - HTML input from which to get name\n * @returns {String} name of the input\n */\n function getInputName(input) {\n return input.name || input.id || input.type || input.nodeName;\n }\n /**\n * Process form data\n * @param {Event} event - form submission event\n */\n function processForm(event) {\n var form = get_event_target(event);\n var segmentation = {\n id: form.attributes.id && form.attributes.id.nodeValue,\n name: form.attributes.name && form.attributes.name.nodeValue,\n action: form.attributes.action && form.attributes.action.nodeValue,\n method: form.attributes.method && form.attributes.method.nodeValue,\n view: self.getViewUrl()\n };\n\n // get input values\n var input;\n if (typeof form.elements !== \"undefined\") {\n for (var i = 0; i < form.elements.length; i++) {\n input = form.elements[i];\n if (input && input.type !== \"password\" && input.className.indexOf(\"cly_user_ignore\") === -1) {\n if (typeof segmentation[\"input:\" + getInputName(input)] === \"undefined\") {\n segmentation[\"input:\" + getInputName(input)] = [];\n }\n if (input.nodeName.toLowerCase() === \"select\") {\n if (typeof input.multiple !== \"undefined\") {\n segmentation[\"input:\" + getInputName(input)].push(getMultiSelectValues(input));\n } else {\n segmentation[\"input:\" + getInputName(input)].push(input.options[input.selectedIndex].value);\n }\n } else if (input.nodeName.toLowerCase() === \"input\") {\n if (typeof input.type !== \"undefined\") {\n if (input.type.toLowerCase() === \"checkbox\" || input.type.toLowerCase() === \"radio\") {\n if (input.checked) {\n segmentation[\"input:\" + getInputName(input)].push(input.value);\n }\n } else if (input.type.toLowerCase() !== \"hidden\" || trackHidden) {\n segmentation[\"input:\" + getInputName(input)].push(input.value);\n }\n } else {\n segmentation[\"input:\" + getInputName(input)].push(input.value);\n }\n } else if (input.nodeName.toLowerCase() === \"textarea\") {\n segmentation[\"input:\" + getInputName(input)].push(input.value);\n } else if (typeof input.value !== \"undefined\") {\n segmentation[\"input:\" + getInputName(input)].push(input.value);\n }\n }\n }\n for (var key in segmentation) {\n if (segmentation[key] && typeof segmentation[key].join === \"function\") {\n segmentation[key] = segmentation[key].join(\", \");\n }\n }\n }\n\n // record submit event\n if (self.check_consent(featureEnums.FORMS)) {\n add_cly_events({\n key: \"formSubmit\",\n segmentation: segmentation\n });\n }\n }\n\n // add any events you want\n add_event_listener(parent, \"submit\", processForm);\n };\n\n /**\n * Collect possible user data from submitted forms. Add cly_user_ignore class to ignore inputs in forms or cly_user_{key} to collect data from this input as specified key, as cly_user_username to save collected value from this input as username property. If not class is provided, Countly SDK will try to determine type of information automatically.\n * @param {Object=} parent - DOM object which children to track, by default it is document body\n * @param {boolean} [useCustom=false] - submit collected data as custom user properties, by default collects as main user properties\n * */\n this.collect_from_forms = function (parent, useCustom) {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"collect_from_forms, window object is not available. Not collecting from forms.\");\n return;\n }\n log(logLevelEnums.INFO, \"collect_from_forms, Starting to collect possible user data. DOM object provided:[\" + !!parent + \"] Submitting custom user property:[\" + !!useCustom + \"]\");\n parent = parent || document;\n /**\n * Process form data\n * @param {Event} event - form submission event\n */\n function processForm(event) {\n var form = get_event_target(event);\n var userdata = {};\n var hasUserInfo = false;\n\n // get input values\n var input;\n if (typeof form.elements !== \"undefined\") {\n // load labels for inputs\n var labelData = {};\n var labels = parent.getElementsByTagName(\"LABEL\");\n var i;\n var j;\n for (i = 0; i < labels.length; i++) {\n if (labels[i].htmlFor && labels[i].htmlFor !== \"\") {\n labelData[labels[i].htmlFor] = labels[i].innerText || labels[i].textContent || labels[i].innerHTML;\n }\n }\n for (i = 0; i < form.elements.length; i++) {\n input = form.elements[i];\n if (input && input.type !== \"password\") {\n // check if element should be ignored\n if (input.className.indexOf(\"cly_user_ignore\") === -1) {\n var value = \"\";\n // get value from input\n if (input.nodeName.toLowerCase() === \"select\") {\n if (typeof input.multiple !== \"undefined\") {\n value = getMultiSelectValues(input);\n } else {\n value = input.options[input.selectedIndex].value;\n }\n } else if (input.nodeName.toLowerCase() === \"input\") {\n if (typeof input.type !== \"undefined\") {\n if (input.type.toLowerCase() === \"checkbox\" || input.type.toLowerCase() === \"radio\") {\n if (input.checked) {\n value = input.value;\n }\n } else {\n value = input.value;\n }\n } else {\n value = input.value;\n }\n } else if (input.nodeName.toLowerCase() === \"textarea\") {\n value = input.value;\n } else if (typeof input.value !== \"undefined\") {\n value = input.value;\n }\n // check if input was marked to be collected\n if (input.className && input.className.indexOf(\"cly_user_\") !== -1) {\n var classes = input.className.split(\" \");\n for (j = 0; j < classes.length; j++) {\n if (classes[j].indexOf(\"cly_user_\") === 0) {\n userdata[classes[j].replace(\"cly_user_\", \"\")] = value;\n hasUserInfo = true;\n break;\n }\n }\n }\n // check for email\n else if (input.type && input.type.toLowerCase() === \"email\" || input.name && input.name.toLowerCase().indexOf(\"email\") !== -1 || input.id && input.id.toLowerCase().indexOf(\"email\") !== -1 || input.id && labelData[input.id] && labelData[input.id].toLowerCase().indexOf(\"email\") !== -1 || /[^@\\s]+@[^@\\s]+\\.[^@\\s]+/.test(value)) {\n if (!userdata.email) {\n userdata.email = value;\n }\n hasUserInfo = true;\n } else if (input.name && input.name.toLowerCase().indexOf(\"username\") !== -1 || input.id && input.id.toLowerCase().indexOf(\"username\") !== -1 || input.id && labelData[input.id] && labelData[input.id].toLowerCase().indexOf(\"username\") !== -1) {\n if (!userdata.username) {\n userdata.username = value;\n }\n hasUserInfo = true;\n } else if (input.name && (input.name.toLowerCase().indexOf(\"tel\") !== -1 || input.name.toLowerCase().indexOf(\"phone\") !== -1 || input.name.toLowerCase().indexOf(\"number\") !== -1) || input.id && (input.id.toLowerCase().indexOf(\"tel\") !== -1 || input.id.toLowerCase().indexOf(\"phone\") !== -1 || input.id.toLowerCase().indexOf(\"number\") !== -1) || input.id && labelData[input.id] && (labelData[input.id].toLowerCase().indexOf(\"tel\") !== -1 || labelData[input.id].toLowerCase().indexOf(\"phone\") !== -1 || labelData[input.id].toLowerCase().indexOf(\"number\") !== -1)) {\n if (!userdata.phone) {\n userdata.phone = value;\n }\n hasUserInfo = true;\n } else if (input.name && (input.name.toLowerCase().indexOf(\"org\") !== -1 || input.name.toLowerCase().indexOf(\"company\") !== -1) || input.id && (input.id.toLowerCase().indexOf(\"org\") !== -1 || input.id.toLowerCase().indexOf(\"company\") !== -1) || input.id && labelData[input.id] && (labelData[input.id].toLowerCase().indexOf(\"org\") !== -1 || labelData[input.id].toLowerCase().indexOf(\"company\") !== -1)) {\n if (!userdata.organization) {\n userdata.organization = value;\n }\n hasUserInfo = true;\n } else if (input.name && input.name.toLowerCase().indexOf(\"name\") !== -1 || input.id && input.id.toLowerCase().indexOf(\"name\") !== -1 || input.id && labelData[input.id] && labelData[input.id].toLowerCase().indexOf(\"name\") !== -1) {\n if (!userdata.name) {\n userdata.name = \"\";\n }\n userdata.name += value + \" \";\n hasUserInfo = true;\n }\n }\n }\n }\n }\n\n // record user info, if any\n if (hasUserInfo) {\n log(logLevelEnums.INFO, \"collect_from_forms, Gathered user data\", userdata);\n if (useCustom) {\n self.user_details({\n custom: userdata\n });\n } else {\n self.user_details(userdata);\n }\n }\n }\n\n // add any events you want\n add_event_listener(parent, \"submit\", processForm);\n };\n\n /**\n * Collect information about user from Facebook, if your website integrates Facebook SDK. Call this method after Facebook SDK is loaded and user is authenticated.\n * @param {Object=} custom - Custom keys to collected from Facebook, key will be used to store as key in custom user properties and value as key in Facebook graph object. For example, {\"tz\":\"timezone\"} will collect Facebook's timezone property, if it is available and store it in custom user's property under \"tz\" key. If you want to get value from some sub object properties, then use dot as delimiter, for example, {\"location\":\"location.name\"} will collect data from Facebook's {\"location\":{\"name\":\"MyLocation\"}} object and store it in user's custom property \"location\" key\n * */\n this.collect_from_facebook = function (custom) {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"collect_from_facebook, window object is not available. Not collecting from Facebook.\");\n return;\n }\n if (typeof FB === \"undefined\" || !FB || !FB.api) {\n log(logLevelEnums.ERROR, \"collect_from_facebook, Facebook SDK is not available\");\n return;\n }\n log(logLevelEnums.INFO, \"collect_from_facebook, Starting to collect possible user data\");\n /* globals FB */\n FB.api(\"/me\", function (resp) {\n var data = {};\n if (resp.name) {\n data.name = resp.name;\n }\n if (resp.email) {\n data.email = resp.email;\n }\n if (resp.gender === \"male\") {\n data.gender = \"M\";\n } else if (resp.gender === \"female\") {\n data.gender = \"F\";\n }\n if (resp.birthday) {\n var byear = resp.birthday.split(\"/\").pop();\n if (byear && byear.length === 4) {\n data.byear = byear;\n }\n }\n if (resp.work && resp.work[0] && resp.work[0].employer && resp.work[0].employer.name) {\n data.organization = resp.work[0].employer.name;\n }\n // check if any custom keys to collect\n if (custom) {\n data.custom = {};\n for (var i in custom) {\n var parts = custom[i].split(\".\");\n var get = resp;\n for (var j = 0; j < parts.length; j++) {\n get = get[parts[j]];\n if (typeof get === \"undefined\") {\n break;\n }\n }\n if (typeof get !== \"undefined\") {\n data.custom[i] = get;\n }\n }\n }\n self.user_details(data);\n });\n };\n /**\n * Opts out user of any metric tracking\n * */\n this.opt_out = function () {\n log(logLevelEnums.INFO, \"opt_out, Opting out the user\");\n this.ignore_visitor = true;\n setValueInStorage(\"cly_ignore\", true);\n };\n\n /**\n * Opts in user for tracking, if complies with other user ignore rules like bot useragent and prefetch settings\n * */\n this.opt_in = function () {\n log(logLevelEnums.INFO, \"opt_in, Opting in the user\");\n setValueInStorage(\"cly_ignore\", false);\n this.ignore_visitor = false;\n checkIgnore();\n if (!this.ignore_visitor && !hasPulse) {\n heartBeat();\n }\n };\n /**\n * Provide information about user\n * @param {Object} ratingWidget - object with rating widget properties\n * @param {string} ratingWidget.widget_id - id of the widget in the dashboard\n * @param {boolean=} ratingWidget.contactMe - did user give consent to contact him\n * @param {string=} ratingWidget.platform - user's platform (will be filled if not provided)\n * @param {string=} ratingWidget.app_version - app's app version (will be filled if not provided)\n * @param {number} ratingWidget.rating - user's rating from 1 to 5\n * @param {string=} ratingWidget.email - user's email\n * @param {string=} ratingWidget.comment - user's comment\n * \n * @deprecated use 'recordRatingWidgetWithID' in place of this call\n * */\n this.report_feedback = function (ratingWidget) {\n log(logLevelEnums.WARNING, \"report_feedback, Deprecated function call! Use 'recordRatingWidgetWithID' or 'reportFeedbackWidgetManually' in place of this call. Call will be redirected to 'recordRatingWidgetWithID' now!\");\n this.recordRatingWidgetWithID(ratingWidget);\n };\n /**\n * Provide information about user\n * @param {Object} ratingWidget - object with rating widget properties\n * @param {string} ratingWidget.widget_id - id of the widget in the dashboard\n * @param {boolean=} ratingWidget.contactMe - did user give consent to contact him\n * @param {string=} ratingWidget.platform - user's platform (will be filled if not provided)\n * @param {string=} ratingWidget.app_version - app's app version (will be filled if not provided)\n * @param {number} ratingWidget.rating - user's rating from 1 to 5\n * @param {string=} ratingWidget.email - user's email\n * @param {string=} ratingWidget.comment - user's comment\n * */\n this.recordRatingWidgetWithID = function (ratingWidget) {\n log(logLevelEnums.INFO, \"recordRatingWidgetWithID, Providing information about user with ID: [ \" + ratingWidget.widget_id + \" ]\");\n if (!this.check_consent(featureEnums.STAR_RATING)) {\n return;\n }\n if (!ratingWidget.widget_id) {\n log(logLevelEnums.ERROR, \"recordRatingWidgetWithID, Rating Widget must contain widget_id property\");\n return;\n }\n if (!ratingWidget.rating) {\n log(logLevelEnums.ERROR, \"recordRatingWidgetWithID, Rating Widget must contain rating property\");\n return;\n }\n var props = [\"widget_id\", \"contactMe\", \"platform\", \"app_version\", \"rating\", \"email\", \"comment\"];\n var event = {\n key: internalEventKeyEnums.STAR_RATING,\n count: 1,\n segmentation: {}\n };\n event.segmentation = createNewObjectFromProperties(ratingWidget, props);\n if (!event.segmentation.app_version) {\n event.segmentation.app_version = this.metrics._app_version || this.app_version;\n }\n if (event.segmentation.rating > 5) {\n log(logLevelEnums.WARNING, \"recordRatingWidgetWithID, You have entered a rating higher than 5. Changing it back to 5 now.\");\n event.segmentation.rating = 5;\n } else if (event.segmentation.rating < 1) {\n log(logLevelEnums.WARNING, \"recordRatingWidgetWithID, You have entered a rating lower than 1. Changing it back to 1 now.\");\n event.segmentation.rating = 1;\n }\n log(logLevelEnums.INFO, \"recordRatingWidgetWithID, Reporting Rating Widget: \", event);\n add_cly_events(event);\n };\n /**\n * Report information about survey, nps or rating widget answers/results\n * @param {Object} CountlyFeedbackWidget - it is the widget object retrieved from get_available_feedback_widgets\n * @param {Object} CountlyWidgetData - it is the widget data object retrieved from getFeedbackWidgetData\n * @param {Object} widgetResult - it is the widget results that need to be reported, different for all widgets, if provided as null it means the widget was closed\n * widgetResult For NPS\n * Should include rating and comment from the nps. Example:\n * widgetResult = {rating: 3, comment: \"comment\"}\n * \n * widgetResult For Survey\n * Should include questions ids and their answers as key/value pairs. Keys should be formed as “answ-”+[question.id]. Example:\n * widgetResult = {\n * \"answ-1602694029-0\": \"Some text field long answer\", //for text fields\n * \"answ-1602694029-1\": 7, //for rating\n * \"answ-1602694029-2\": \"ch1602694029-0\", //There is a question with choices like multi or radio. It is a choice key.\n * \"answ-1602694029-3\": \"ch1602694030-0,ch1602694030-1\" //In case 2 selected\n * }\n * \n * widgetResult For Rating Widget\n * Should include rating, email, comment and contact consent information. Example:\n * widgetResult = {\n * rating: 2, \n * email: \"email@mail.com\", \n * contactMe: true, \n * comment: \"comment\"\n * }\n * */\n this.reportFeedbackWidgetManually = function (CountlyFeedbackWidget, CountlyWidgetData, widgetResult) {\n if (!this.check_consent(featureEnums.FEEDBACK)) {\n return;\n }\n if (!(CountlyFeedbackWidget && CountlyWidgetData)) {\n log(logLevelEnums.ERROR, \"reportFeedbackWidgetManually, Widget data and/or Widget object not provided. Aborting.\");\n return;\n }\n if (!CountlyFeedbackWidget._id) {\n log(logLevelEnums.ERROR, \"reportFeedbackWidgetManually, Feedback Widgets must contain _id property\");\n return;\n }\n if (offlineMode) {\n log(logLevelEnums.ERROR, \"reportFeedbackWidgetManually, Feedback Widgets can not be reported in offline mode\");\n return;\n }\n log(logLevelEnums.INFO, \"reportFeedbackWidgetManually, Providing information about user with, provided result of the widget with ID: [ \" + CountlyFeedbackWidget._id + \" ] and type: [\" + CountlyFeedbackWidget.type + \"]\");\n\n // type specific checks to see if everything was provided\n var props = [];\n var type = CountlyFeedbackWidget.type;\n var eventKey;\n if (type === \"nps\") {\n if (widgetResult) {\n if (!widgetResult.rating) {\n log(logLevelEnums.ERROR, \"reportFeedbackWidgetManually, Widget must contain rating property\");\n return;\n }\n widgetResult.rating = Math.round(widgetResult.rating);\n if (widgetResult.rating > 10) {\n log(logLevelEnums.WARNING, \"reportFeedbackWidgetManually, You have entered a rating higher than 10. Changing it back to 10 now.\");\n widgetResult.rating = 10;\n } else if (widgetResult.rating < 0) {\n log(logLevelEnums.WARNING, \"reportFeedbackWidgetManually, You have entered a rating lower than 0. Changing it back to 0 now.\");\n widgetResult.rating = 0;\n }\n props = [\"rating\", \"comment\"];\n }\n eventKey = internalEventKeyEnums.NPS;\n } else if (type === \"survey\") {\n if (widgetResult) {\n if (Object.keys(widgetResult).length < 1) {\n log(logLevelEnums.ERROR, \"reportFeedbackWidgetManually, Widget should have answers to be reported\");\n return;\n }\n props = Object.keys(widgetResult);\n }\n eventKey = internalEventKeyEnums.SURVEY;\n } else if (type === \"rating\") {\n if (widgetResult) {\n if (!widgetResult.rating) {\n log(logLevelEnums.ERROR, \"reportFeedbackWidgetManually, Widget must contain rating property\");\n return;\n }\n widgetResult.rating = Math.round(widgetResult.rating);\n if (widgetResult.rating > 5) {\n log(logLevelEnums.WARNING, \"reportFeedbackWidgetManually, You have entered a rating higher than 5. Changing it back to 5 now.\");\n widgetResult.rating = 5;\n } else if (widgetResult.rating < 1) {\n log(logLevelEnums.WARNING, \"reportFeedbackWidgetManually, You have entered a rating lower than 1. Changing it back to 1 now.\");\n widgetResult.rating = 1;\n }\n props = [\"rating\", \"comment\", \"email\", \"contactMe\"];\n }\n eventKey = internalEventKeyEnums.STAR_RATING;\n } else {\n log(logLevelEnums.ERROR, \"reportFeedbackWidgetManually, Widget has an unacceptable type\");\n return;\n }\n\n // event template\n var event = {\n key: eventKey,\n count: 1,\n segmentation: {\n widget_id: CountlyFeedbackWidget._id,\n platform: this.platform,\n app_version: this.metrics._app_version || this.app_version\n }\n };\n if (widgetResult === null) {\n event.segmentation.closed = 1;\n } else {\n // add response to the segmentation\n event.segmentation = addNewProperties(event.segmentation, widgetResult, props);\n }\n\n // add event\n log(logLevelEnums.INFO, \"reportFeedbackWidgetManually, Reporting \" + type + \": \", event);\n add_cly_events(event);\n };\n /**\n * Show specific widget popup by the widget id\n * @param {string} id - id value of related rating widget, you can get this value by click \"Copy ID\" button in row menu at \"Feedback widgets\" screen\n * \n * @deprecated use 'presentRatingWidgetWithID' in place of this call\n */\n this.show_feedback_popup = function (id) {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"show_feedback_popup, window object is not available. Not showing feedback popup.\");\n return;\n }\n log(logLevelEnums.WARNING, \"show_feedback_popup, Deprecated function call! Use 'presentRatingWidgetWithID' in place of this call. Call will be redirected now!\");\n this.presentRatingWidgetWithID(id);\n };\n /**\n * Show specific widget popup by the widget id\n * @param {string} id - id value of related rating widget, you can get this value by click \"Copy ID\" button in row menu at \"Feedback widgets\" screen\n */\n this.presentRatingWidgetWithID = function (id) {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"presentRatingWidgetWithID, window object is not available. Not showing rating widget popup.\");\n return;\n }\n log(logLevelEnums.INFO, \"presentRatingWidgetWithID, Showing rating widget popup for the widget with ID: [ \" + id + \" ]\");\n if (!this.check_consent(featureEnums.STAR_RATING)) {\n return;\n }\n if (offlineMode) {\n log(logLevelEnums.ERROR, \"presentRatingWidgetWithID, Cannot show ratingWidget popup in offline mode\");\n } else {\n makeNetworkRequest(\"presentRatingWidgetWithID,\", this.url + \"/o/feedback/widget\", {\n widget_id: id,\n av: self.app_version\n }, function (err, params, responseText) {\n if (err) {\n // error has been logged by the request function\n return;\n }\n try {\n // widget object\n var currentWidget = JSON.parse(responseText);\n processWidget(currentWidget, false);\n } catch (JSONParseError) {\n log(logLevelEnums.ERROR, \"presentRatingWidgetWithID, JSON parse failed: \" + JSONParseError);\n }\n // JSON array can pass \n }, true);\n }\n };\n\n /**\n * Prepare rating widgets according to the current options\n * @param {array=} enableWidgets - widget ids array\n * \n * @deprecated use 'initializeRatingWidgets' in place of this call\n */\n this.initialize_feedback_popups = function (enableWidgets) {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"initialize_feedback_popups, window object is not available. Not initializing feedback popups.\");\n return;\n }\n log(logLevelEnums.WARNING, \"initialize_feedback_popups, Deprecated function call! Use 'initializeRatingWidgets' in place of this call. Call will be redirected now!\");\n this.initializeRatingWidgets(enableWidgets);\n };\n /**\n * Prepare rating widgets according to the current options\n * @param {array=} enableWidgets - widget ids array\n */\n this.initializeRatingWidgets = function (enableWidgets) {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"initializeRatingWidgets, window object is not available. Not initializing rating widgets.\");\n return;\n }\n log(logLevelEnums.INFO, \"initializeRatingWidgets, Initializing rating widget with provided widget IDs:[ \" + enableWidgets + \"]\");\n if (!this.check_consent(featureEnums.STAR_RATING)) {\n return;\n }\n if (!enableWidgets) {\n enableWidgets = getValueFromStorage(\"cly_fb_widgets\");\n }\n\n // remove all old stickers before add new one\n var stickers = document.getElementsByClassName(\"countly-feedback-sticker\");\n while (stickers.length > 0) {\n stickers[0].remove();\n }\n makeNetworkRequest(\"initializeRatingWidgets,\", this.url + \"/o/feedback/multiple-widgets-by-id\", {\n widgets: JSON.stringify(enableWidgets),\n av: self.app_version\n }, function (err, params, responseText) {\n if (err) {\n // error has been logged by the request function\n return;\n }\n try {\n // widgets array\n var widgets = JSON.parse(responseText);\n for (var i = 0; i < widgets.length; i++) {\n if (widgets[i].is_active === \"true\") {\n var target_devices = widgets[i].target_devices;\n var currentDevice = userAgentDeviceDetection();\n // device match check\n if (target_devices[currentDevice]) {\n // is hide sticker option selected?\n if (typeof widgets[i].hide_sticker === \"string\") {\n widgets[i].hide_sticker = widgets[i].hide_sticker === \"true\";\n }\n // is target_page option provided as \"All\"?\n if (widgets[i].target_page === \"all\" && !widgets[i].hide_sticker) {\n processWidget(widgets[i], true);\n }\n // is target_page option provided as \"selected\"?\n else {\n var pages = widgets[i].target_pages;\n for (var k = 0; k < pages.length; k++) {\n var isWildcardMatched = pages[k].substr(0, pages[k].length - 1) === window.location.pathname.substr(0, pages[k].length - 1);\n var isFullPathMatched = pages[k] === window.location.pathname;\n var isContainAsterisk = pages[k].includes(\"*\");\n if ((isContainAsterisk && isWildcardMatched || isFullPathMatched) && !widgets[i].hide_sticker) {\n processWidget(widgets[i], true);\n }\n }\n }\n }\n }\n }\n } catch (JSONParseError) {\n log(logLevelEnums.ERROR, \"initializeRatingWidgets, JSON parse error: \" + JSONParseError);\n }\n // JSON array can pass\n }, true);\n };\n\n /**\n * Show rating widget popup by passed widget ids array\n * @param {object=} params - required - includes \"popups\" property as string array of widgets (\"widgets\" for old versions)\n * example params: {\"popups\":[\"5b21581b967c4850a7818617\"]}\n * \n * @deprecated use 'enableRatingWidgets' in place of this call\n * */\n this.enable_feedback = function (params) {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"enable_feedback, window object is not available. Not enabling feedback.\");\n return;\n }\n log(logLevelEnums.WARNING, \"enable_feedback, Deprecated function call! Use 'enableRatingWidgets' in place of this call. Call will be redirected now!\");\n this.enableRatingWidgets(params);\n };\n /**\n * Show rating widget popup by passed widget ids array\n * @param {object=} params - required - includes \"popups\" property as string array of widgets (\"widgets\" for old versions)\n * example params: {\"popups\":[\"5b21581b967c4850a7818617\"]}\n * */\n this.enableRatingWidgets = function (params) {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"enableRatingWidgets, window object is not available. Not enabling rating widgets.\");\n return;\n }\n log(logLevelEnums.INFO, \"enableRatingWidgets, Enabling rating widget with params:\", params);\n if (!this.check_consent(featureEnums.STAR_RATING)) {\n return;\n }\n if (offlineMode) {\n log(logLevelEnums.ERROR, \"enableRatingWidgets, Cannot enable rating widgets in offline mode\");\n } else {\n setValueInStorage(\"cly_fb_widgets\", params.popups || params.widgets);\n // inject feedback styles\n loadCSS(this.url + \"/star-rating/stylesheets/countly-feedback-web.css\");\n // get enable widgets by app_key\n // define xhr object\n var enableWidgets = params.popups || params.widgets;\n if (enableWidgets.length > 0) {\n document.body.insertAdjacentHTML(\"beforeend\", \"<div id=\\\"cfbg\\\"></div>\");\n this.initializeRatingWidgets(enableWidgets);\n } else {\n log(logLevelEnums.ERROR, \"enableRatingWidgets, You should provide at least one widget id as param. Read documentation for more detail. https://resources.count.ly/plugins/feedback\");\n }\n }\n };\n\n /**\n * This function retrieves all associated widget information (IDs, type, name etc in an array/list of objects) of your app\n * @param {Function} callback - Callback function with two parameters, 1st for returned list, 2nd for error\n * */\n this.get_available_feedback_widgets = function (callback) {\n log(logLevelEnums.INFO, \"get_available_feedback_widgets, Getting the feedback list, callback function is provided:[\" + !!callback + \"]\");\n if (!this.check_consent(featureEnums.FEEDBACK)) {\n if (callback) {\n callback(null, new Error(\"Consent for feedback not provided.\"));\n }\n return;\n }\n if (offlineMode) {\n log(logLevelEnums.ERROR, \"get_available_feedback_widgets, Cannot enable feedback widgets in offline mode.\");\n return;\n }\n var url = this.url + readPath;\n var data = {\n method: featureEnums.FEEDBACK,\n device_id: this.device_id,\n app_key: this.app_key,\n av: self.app_version\n };\n makeNetworkRequest(\"get_available_feedback_widgets,\", url, data, function (err, params, responseText) {\n if (err) {\n // error has been logged by the request function\n if (callback) {\n callback(null, err);\n }\n return;\n }\n try {\n var response = JSON.parse(responseText);\n var feedbacks = response.result || [];\n if (callback) {\n callback(feedbacks, null);\n }\n } catch (error) {\n log(logLevelEnums.ERROR, \"get_available_feedback_widgets, Error while parsing feedback widgets list: \" + error);\n if (callback) {\n callback(null, error);\n }\n }\n // expected response is JSON object\n }, false);\n };\n\n /**\n * Get feedback (nps, survey or rating) widget data, like questions, message etc.\n * @param {Object} CountlyFeedbackWidget - Widget object, retrieved from 'get_available_feedback_widgets'\n * @param {Function} callback - Callback function with two parameters, 1st for returned widget data, 2nd for error\n * */\n this.getFeedbackWidgetData = function (CountlyFeedbackWidget, callback) {\n if (!CountlyFeedbackWidget.type) {\n log(logLevelEnums.ERROR, \"getFeedbackWidgetData, Expected the provided widget object to have a type but got: [\" + JSON.stringify(CountlyFeedbackWidget) + \"], aborting.\");\n return;\n }\n log(logLevelEnums.INFO, \"getFeedbackWidgetData, Retrieving data for: [\" + JSON.stringify(CountlyFeedbackWidget) + \"], callback function is provided:[\" + !!callback + \"]\");\n if (!this.check_consent(featureEnums.FEEDBACK)) {\n if (callback) {\n callback(null, new Error(\"Consent for feedback not provided.\"));\n }\n return;\n }\n if (offlineMode) {\n log(logLevelEnums.ERROR, \"getFeedbackWidgetData, Cannot enable feedback widgets in offline mode.\");\n return;\n }\n var url = this.url;\n var data = {\n widget_id: CountlyFeedbackWidget._id,\n shown: 1,\n sdk_version: sdkVersion,\n sdk_name: sdkName,\n platform: this.platform,\n app_version: this.app_version\n };\n if (CountlyFeedbackWidget.type === \"nps\") {\n url += \"/o/surveys/nps/widget\";\n } else if (CountlyFeedbackWidget.type === \"survey\") {\n url += \"/o/surveys/survey/widget\";\n } else if (CountlyFeedbackWidget.type === \"rating\") {\n url += \"/o/surveys/rating/widget\";\n } else {\n log(logLevelEnums.ERROR, \"getFeedbackWidgetData, Unknown type info: [\" + CountlyFeedbackWidget.type + \"]\");\n return;\n }\n makeNetworkRequest(\"getFeedbackWidgetData,\", url, data, responseCallback, true);\n\n /**\n * Server response would be evaluated here\n * @param {*} err - error object\n * @param {*} params - parameters\n * @param {*} responseText - server reponse text\n */\n function responseCallback(err, params, responseText) {\n if (err) {\n // error has been logged by the request function\n if (callback) {\n callback(null, err);\n }\n return;\n }\n try {\n var response = JSON.parse(responseText);\n // return parsed response\n if (callback) {\n callback(response, null);\n }\n } catch (error) {\n log(logLevelEnums.ERROR, \"getFeedbackWidgetData, Error while parsing feedback widgets list: \" + error);\n if (callback) {\n callback(null, error);\n }\n }\n }\n };\n\n /**\n * Present the feedback widget in webview\n * @param {Object} presentableFeedback - Current presentable feedback\n * @param {String} [id] - DOM id to append the feedback widget (optional, in case not used pass undefined)\n * @param {String} [className] - Class name to append the feedback widget (optional, in case not used pass undefined)\n * @param {Object} [feedbackWidgetSegmentation] - Segmentation object to be passed to the feedback widget (optional)\n * */\n this.present_feedback_widget = function (presentableFeedback, id, className, feedbackWidgetSegmentation) {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"present_feedback_widget, window object is not available. Not presenting feedback widget.\");\n return;\n }\n // TODO: feedbackWidgetSegmentation implementation only assumes we want to send segmentation data. Change it if we add more data to the custom object.\n log(logLevelEnums.INFO, \"present_feedback_widget, Presenting the feedback widget by appending to the element with ID: [ \" + id + \" ] and className: [ \" + className + \" ]\");\n if (!this.check_consent(featureEnums.FEEDBACK)) {\n return;\n }\n if (!presentableFeedback || _typeof(presentableFeedback) !== \"object\" || Array.isArray(presentableFeedback)) {\n log(logLevelEnums.ERROR, \"present_feedback_widget, Please provide at least one feedback widget object.\");\n return;\n }\n log(logLevelEnums.INFO, \"present_feedback_widget, Adding segmentation to feedback widgets:[\" + JSON.stringify(feedbackWidgetSegmentation) + \"]\");\n if (!feedbackWidgetSegmentation || _typeof(feedbackWidgetSegmentation) !== \"object\" || Object.keys(feedbackWidgetSegmentation).length === 0) {\n log(logLevelEnums.DEBUG, \"present_feedback_widget, Segmentation is not an object or empty\");\n feedbackWidgetSegmentation = null;\n }\n try {\n var url = this.url;\n if (presentableFeedback.type === \"nps\") {\n log(logLevelEnums.DEBUG, \"present_feedback_widget, Widget type: nps.\");\n url += \"/feedback/nps\";\n } else if (presentableFeedback.type === \"survey\") {\n log(logLevelEnums.DEBUG, \"present_feedback_widget, Widget type: survey.\");\n url += \"/feedback/survey\";\n } else if (presentableFeedback.type === \"rating\") {\n log(logLevelEnums.DEBUG, \"present_feedback_widget, Widget type: rating.\");\n url += \"/feedback/rating\";\n } else {\n log(logLevelEnums.ERROR, \"present_feedback_widget, Feedback widget only accepts nps, rating and survey types.\");\n return;\n }\n var passedOrigin = window.origin || window.location.origin;\n var feedbackWidgetFamily;\n\n // set feedback widget family as ratings and load related style file when type is ratings\n if (presentableFeedback.type === \"rating\") {\n log(logLevelEnums.DEBUG, \"present_feedback_widget, Loading css for rating widget.\");\n feedbackWidgetFamily = \"ratings\";\n loadCSS(this.url + \"/star-rating/stylesheets/countly-feedback-web.css\");\n }\n // if it's not ratings, it means we need to name it as surveys and load related style file\n // (at least until we add new type in future)\n else {\n log(logLevelEnums.DEBUG, \"present_feedback_widget, Loading css for survey or nps.\");\n loadCSS(this.url + \"/surveys/stylesheets/countly-surveys.css\");\n feedbackWidgetFamily = \"surveys\";\n }\n url += \"?widget_id=\" + presentableFeedback._id;\n url += \"&app_key=\" + this.app_key;\n url += \"&device_id=\" + this.device_id;\n url += \"&sdk_name=\" + sdkName;\n url += \"&platform=\" + this.platform;\n url += \"&app_version=\" + this.app_version;\n url += \"&sdk_version=\" + sdkVersion;\n if (feedbackWidgetSegmentation) {\n var customObjectToSendWithTheWidget = {};\n customObjectToSendWithTheWidget.sg = feedbackWidgetSegmentation;\n url += \"&custom=\" + JSON.stringify(customObjectToSendWithTheWidget);\n }\n // Origin is passed to the popup so that it passes it back in the postMessage event\n // Only web SDK passes origin and web\n url += \"&origin=\" + passedOrigin;\n url += \"&widget_v=web\";\n var iframe = document.createElement(\"iframe\");\n iframe.src = url;\n iframe.name = \"countly-\" + feedbackWidgetFamily + \"-iframe\";\n iframe.id = \"countly-\" + feedbackWidgetFamily + \"-iframe\";\n var initiated = false;\n iframe.onload = function () {\n // This is used as a fallback for browsers where postMessage API doesn't work.\n\n if (initiated) {\n // On iframe reset remove the iframe and the overlay.\n document.getElementById(\"countly-\" + feedbackWidgetFamily + \"-wrapper-\" + presentableFeedback._id).style.display = \"none\";\n document.getElementById(\"csbg\").style.display = \"none\";\n }\n\n // Setting initiated marks the first time initiation of the iframe.\n // When initiated for the first time, do not hide the survey because you want\n // the survey to be shown for the first time.\n // Any subsequent onload means that the survey is being refreshed or reset.\n // This time hide it as being done in the above check.\n initiated = true;\n log(logLevelEnums.DEBUG, \"present_feedback_widget, Loaded iframe.\");\n };\n var overlay = document.getElementById(\"csbg\");\n while (overlay) {\n // Remove any existing overlays\n overlay.remove();\n overlay = document.getElementById(\"csbg\");\n log(logLevelEnums.DEBUG, \"present_feedback_widget, Removing past overlay.\");\n }\n var wrapper = document.getElementsByClassName(\"countly-\" + feedbackWidgetFamily + \"-wrapper\");\n for (var i = 0; i < wrapper.length; i++) {\n // Remove any existing feedback wrappers\n wrapper[i].remove();\n log(logLevelEnums.DEBUG, \"present_feedback_widget, Removed a wrapper.\");\n }\n wrapper = document.createElement(\"div\");\n wrapper.className = \"countly-\" + feedbackWidgetFamily + \"-wrapper\";\n wrapper.id = \"countly-\" + feedbackWidgetFamily + \"-wrapper-\" + presentableFeedback._id;\n if (presentableFeedback.type === \"survey\") {\n // Set popup position\n wrapper.className = wrapper.className + \" \" + presentableFeedback.appearance.position;\n }\n var element = document.body;\n var found = false;\n if (id) {\n if (document.getElementById(id)) {\n element = document.getElementById(id);\n found = true;\n } else {\n log(logLevelEnums.ERROR, \"present_feedback_widget, Provided ID not found.\");\n }\n }\n if (!found) {\n // If the id element is not found check if a class was provided\n if (className) {\n if (document.getElementsByClassName(className)[0]) {\n element = document.getElementsByClassName(className)[0];\n } else {\n log(logLevelEnums.ERROR, \"present_feedback_widget, Provided class not found.\");\n }\n }\n }\n element.insertAdjacentHTML(\"beforeend\", \"<div id=\\\"csbg\\\"></div>\");\n element.appendChild(wrapper);\n if (presentableFeedback.type === \"rating\") {\n // create a overlay div and inject it to wrapper\n var ratingsOverlay = document.createElement(\"div\");\n ratingsOverlay.className = \"countly-ratings-overlay\";\n ratingsOverlay.id = \"countly-ratings-overlay-\" + presentableFeedback._id;\n wrapper.appendChild(ratingsOverlay);\n log(logLevelEnums.DEBUG, \"present_feedback_widget, appended the rating overlay to wrapper\");\n\n // add an event listener for the overlay\n // so if someone clicked on the overlay, we can close popup\n add_event_listener(document.getElementById(\"countly-ratings-overlay-\" + presentableFeedback._id), \"click\", function () {\n document.getElementById(\"countly-ratings-wrapper-\" + presentableFeedback._id).style.display = \"none\";\n });\n }\n wrapper.appendChild(iframe);\n log(logLevelEnums.DEBUG, \"present_feedback_widget, Appended the iframe\");\n add_event_listener(window, \"message\", function (e) {\n var data = {};\n try {\n data = JSON.parse(e.data);\n log(logLevelEnums.DEBUG, \"present_feedback_widget, Parsed response message \" + data);\n } catch (ex) {\n log(logLevelEnums.ERROR, \"present_feedback_widget, Error while parsing message body \" + ex);\n }\n if (!data.close) {\n log(logLevelEnums.DEBUG, \"present_feedback_widget, Closing signal not sent yet\");\n return;\n }\n document.getElementById(\"countly-\" + feedbackWidgetFamily + \"-wrapper-\" + presentableFeedback._id).style.display = \"none\";\n document.getElementById(\"csbg\").style.display = \"none\";\n });\n if (presentableFeedback.type === \"survey\") {\n var surveyShown = false;\n\n // Set popup show policy\n switch (presentableFeedback.showPolicy) {\n case \"afterPageLoad\":\n if (document.readyState === \"complete\") {\n if (!surveyShown) {\n surveyShown = true;\n showSurvey(presentableFeedback);\n }\n } else {\n add_event_listener(document, \"readystatechange\", function (e) {\n if (e.target.readyState === \"complete\") {\n if (!surveyShown) {\n surveyShown = true;\n showSurvey(presentableFeedback);\n }\n }\n });\n }\n break;\n case \"afterConstantDelay\":\n setTimeout(function () {\n if (!surveyShown) {\n surveyShown = true;\n showSurvey(presentableFeedback);\n }\n }, 10000);\n break;\n case \"onAbandon\":\n if (document.readyState === \"complete\") {\n add_event_listener(document, \"mouseleave\", function () {\n if (!surveyShown) {\n surveyShown = true;\n showSurvey(presentableFeedback);\n }\n });\n } else {\n add_event_listener(document, \"readystatechange\", function (e) {\n if (e.target.readyState === \"complete\") {\n add_event_listener(document, \"mouseleave\", function () {\n if (!surveyShown) {\n surveyShown = true;\n showSurvey(presentableFeedback);\n }\n });\n }\n });\n }\n break;\n case \"onScrollHalfwayDown\":\n add_event_listener(window, \"scroll\", function () {\n if (!surveyShown) {\n var scrollY = Math.max(window.scrollY, document.body.scrollTop, document.documentElement.scrollTop);\n var documentHeight = getDocHeight();\n if (scrollY >= documentHeight / 2) {\n surveyShown = true;\n showSurvey(presentableFeedback);\n }\n }\n });\n break;\n default:\n if (!surveyShown) {\n surveyShown = true;\n showSurvey(presentableFeedback);\n }\n }\n } else if (presentableFeedback.type === \"nps\") {\n document.getElementById(\"countly-\" + feedbackWidgetFamily + \"-wrapper-\" + presentableFeedback._id).style.display = \"block\";\n document.getElementById(\"csbg\").style.display = \"block\";\n } else if (presentableFeedback.type === \"rating\") {\n var ratingShown = false;\n if (document.readyState === \"complete\") {\n if (!ratingShown) {\n ratingShown = true;\n showRatingForFeedbackWidget(presentableFeedback);\n }\n } else {\n add_event_listener(document, \"readystatechange\", function (e) {\n if (e.target.readyState === \"complete\") {\n if (!ratingShown) {\n ratingShown = true;\n showRatingForFeedbackWidget(presentableFeedback);\n }\n }\n });\n }\n }\n } catch (e) {\n log(logLevelEnums.ERROR, \"present_feedback_widget, Something went wrong while presenting the widget: \" + e);\n }\n\n /**\n * Function to show survey popup\n * @param {Object} feedback - feedback object\n */\n function showSurvey(feedback) {\n document.getElementById(\"countly-surveys-wrapper-\" + feedback._id).style.display = \"block\";\n document.getElementById(\"csbg\").style.display = \"block\";\n }\n\n /**\n * Function to prepare rating sticker and feedback widget\n * @param {Object} feedback - feedback object\n */\n function showRatingForFeedbackWidget(feedback) {\n // render sticker if hide sticker property isn't set\n if (!feedback.appearance.hideS) {\n log(logLevelEnums.DEBUG, \"present_feedback_widget, handling the sticker as it was not set to hidden\");\n // create sticker wrapper element\n var sticker = document.createElement(\"div\");\n sticker.innerText = feedback.appearance.text;\n sticker.style.color = feedback.appearance.text_color.length < 7 ? \"#\" + feedback.appearance.text_color : feedback.appearance.text_color;\n sticker.style.backgroundColor = feedback.appearance.bg_color.length < 7 ? \"#\" + feedback.appearance.bg_color : feedback.appearance.bg_color;\n sticker.className = \"countly-feedback-sticker \" + feedback.appearance.position + \"-\" + feedback.appearance.size;\n sticker.id = \"countly-feedback-sticker-\" + feedback._id;\n document.body.appendChild(sticker);\n\n // sticker event handler\n add_event_listener(document.getElementById(\"countly-feedback-sticker-\" + feedback._id), \"click\", function () {\n document.getElementById(\"countly-ratings-wrapper-\" + feedback._id).style.display = \"flex\";\n document.getElementById(\"csbg\").style.display = \"block\";\n });\n }\n\n // feedback widget close event handler\n // TODO: Check if this is still valid\n add_event_listener(document.getElementById(\"countly-feedback-close-icon-\" + feedback._id), \"click\", function () {\n document.getElementById(\"countly-ratings-wrapper-\" + feedback._id).style.display = \"none\";\n document.getElementById(\"csbg\").style.display = \"none\";\n });\n }\n };\n\n /**\n * Record and report error, this is were tracked errors are modified and send to the request queue\n * @param {Error} err - Error object\n * @param {Boolean} nonfatal - nonfatal if true and false if fatal\n * @param {Object} segments - custom crash segments\n */\n this.recordError = function (err, nonfatal, segments) {\n log(logLevelEnums.INFO, \"recordError, Recording error\");\n if (this.check_consent(featureEnums.CRASHES) && err) {\n // crashSegments, if not null, was set while enabling error tracking\n segments = segments || crashSegments;\n var error = \"\";\n if (_typeof(err) === \"object\") {\n if (typeof err.stack !== \"undefined\") {\n error = err.stack;\n } else {\n if (typeof err.name !== \"undefined\") {\n error += err.name + \":\";\n }\n if (typeof err.message !== \"undefined\") {\n error += err.message + \"\\n\";\n }\n if (typeof err.fileName !== \"undefined\") {\n error += \"in \" + err.fileName + \"\\n\";\n }\n if (typeof err.lineNumber !== \"undefined\") {\n error += \"on \" + err.lineNumber;\n }\n if (typeof err.columnNumber !== \"undefined\") {\n error += \":\" + err.columnNumber;\n }\n }\n } else {\n error = err + \"\";\n }\n // character limit check\n if (error.length > self.maxStackTraceLineLength * self.maxStackTraceLinesPerThread) {\n log(logLevelEnums.DEBUG, \"record_error, Error stack is too long will be truncated\");\n // convert error into an array split from each newline \n var splittedError = error.split(\"\\n\");\n // trim the array if it is too long\n if (splittedError.length > self.maxStackTraceLinesPerThread) {\n splittedError = splittedError.splice(0, self.maxStackTraceLinesPerThread);\n }\n // trim each line to a given limit\n for (var i = 0, len = splittedError.length; i < len; i++) {\n if (splittedError[i].length > self.maxStackTraceLineLength) {\n splittedError[i] = splittedError[i].substring(0, self.maxStackTraceLineLength);\n }\n }\n // turn modified array back into error string\n error = splittedError.join(\"\\n\");\n }\n nonfatal = !!nonfatal;\n var metrics = getMetrics();\n var obj = {\n _resolution: metrics._resolution,\n _error: error,\n _app_version: metrics._app_version,\n _run: getTimestamp() - startTime\n };\n obj._not_os_specific = true;\n obj._javascript = true;\n var battery = navigator.battery || navigator.webkitBattery || navigator.mozBattery || navigator.msBattery;\n if (battery) {\n obj._bat = Math.floor(battery.level * 100);\n }\n if (typeof navigator.onLine !== \"undefined\") {\n obj._online = !!navigator.onLine;\n }\n if (isBrowser) {\n obj._background = !document.hasFocus();\n }\n if (crashLogs.length > 0) {\n obj._logs = crashLogs.join(\"\\n\");\n }\n crashLogs = [];\n obj._nonfatal = nonfatal;\n obj._view = this.getViewName();\n if (typeof segments !== \"undefined\") {\n // truncate custom crash segment's key value pairs\n segments = truncateObject(segments, self.maxKeyLength, self.maxValueSize, self.maxSegmentationValues, \"record_error\", log);\n obj._custom = segments;\n }\n try {\n var canvas = document.createElement(\"canvas\");\n var gl = canvas.getContext(\"experimental-webgl\");\n obj._opengl = gl.getParameter(gl.VERSION);\n } catch (ex) {\n log(logLevelEnums.ERROR, \"Could not get the experimental-webgl context: \" + ex);\n }\n\n // send userAgent string with the crash object incase it gets removed by a gateway\n var req = {};\n req.crash = JSON.stringify(obj);\n req.metrics = JSON.stringify({\n _ua: metrics._ua\n });\n toRequestQueue(req);\n }\n };\n\n /**\n * Check if user or visit should be ignored\n */\n function checkIgnore() {\n log(logLevelEnums.INFO, \"checkIgnore, Checking if user or visit should be ignored\");\n if (self.ignore_prefetch && isBrowser && typeof document.visibilityState !== \"undefined\" && document.visibilityState === \"prerender\") {\n self.ignore_visitor = true;\n log(logLevelEnums.DEBUG, \"checkIgnore, Ignoring visit due to prerendering\");\n }\n if (self.ignore_bots && userAgentSearchBotDetection()) {\n self.ignore_visitor = true;\n log(logLevelEnums.DEBUG, \"checkIgnore, Ignoring visit due to bot\");\n }\n }\n\n /**\n * Check and send the events to request queue if there are any, empty the event queue\n */\n function sendEventsForced() {\n if (eventQueue.length > 0) {\n log(logLevelEnums.DEBUG, \"Flushing events\");\n toRequestQueue({\n events: JSON.stringify(eventQueue)\n });\n eventQueue = [];\n setValueInStorage(\"cly_event\", eventQueue);\n }\n }\n\n /**\n * Prepare widget data for displaying\n * @param {Object} currentWidget - widget object\n * @param {Boolean} hasSticker - if widget has sticker\n */\n function processWidget(currentWidget, hasSticker) {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"processWidget, window object is not available. Not processing widget.\");\n return;\n }\n // prevent widget create process if widget exist with same id\n var isDuplicate = !!document.getElementById(\"countly-feedback-sticker-\" + currentWidget._id);\n if (isDuplicate) {\n log(logLevelEnums.ERROR, \"Widget with same ID exists\");\n return;\n }\n try {\n // create wrapper div\n var wrapper = document.createElement(\"div\");\n wrapper.className = \"countly-iframe-wrapper\";\n wrapper.id = \"countly-iframe-wrapper-\" + currentWidget._id;\n // create close icon for iframe popup\n var closeIcon = document.createElement(\"span\");\n closeIcon.className = \"countly-feedback-close-icon\";\n closeIcon.id = \"countly-feedback-close-icon-\" + currentWidget._id;\n closeIcon.innerText = \"x\";\n\n // create iframe\n var iframe = document.createElement(\"iframe\");\n iframe.name = \"countly-feedback-iframe\";\n iframe.id = \"countly-feedback-iframe\";\n iframe.src = self.url + \"/feedback?widget_id=\" + currentWidget._id + \"&app_key=\" + self.app_key + \"&device_id=\" + self.device_id + \"&sdk_version=\" + sdkVersion;\n // inject them to dom\n document.body.appendChild(wrapper);\n wrapper.appendChild(closeIcon);\n wrapper.appendChild(iframe);\n add_event_listener(document.getElementById(\"countly-feedback-close-icon-\" + currentWidget._id), \"click\", function () {\n document.getElementById(\"countly-iframe-wrapper-\" + currentWidget._id).style.display = \"none\";\n document.getElementById(\"cfbg\").style.display = \"none\";\n });\n if (hasSticker) {\n // create svg element\n var svgIcon = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svgIcon.id = \"feedback-sticker-svg\";\n svgIcon.setAttribute(\"aria-hidden\", \"true\");\n svgIcon.setAttribute(\"data-prefix\", \"far\");\n svgIcon.setAttribute(\"data-icon\", \"grin\");\n svgIcon.setAttribute(\"class\", \"svg-inline--fa fa-grin fa-w-16\");\n svgIcon.setAttribute(\"role\", \"img\");\n svgIcon.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n svgIcon.setAttribute(\"viewBox\", \"0 0 496 512\");\n // create path for svg\n var svgPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n svgPath.id = \"smileyPathInStickerSvg\";\n svgPath.setAttribute(\"fill\", \"white\");\n svgPath.setAttribute(\"d\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z\");\n // create sticker text wrapper\n var stickerText = document.createElement(\"span\");\n stickerText.innerText = currentWidget.trigger_button_text;\n // create sticker wrapper element\n var sticker = document.createElement(\"div\");\n sticker.style.color = currentWidget.trigger_font_color.length < 7 ? \"#\" + currentWidget.trigger_font_color : currentWidget.trigger_font_color;\n sticker.style.backgroundColor = currentWidget.trigger_bg_color.length < 7 ? \"#\" + currentWidget.trigger_bg_color : currentWidget.trigger_bg_color;\n sticker.className = \"countly-feedback-sticker \" + currentWidget.trigger_position + \"-\" + currentWidget.trigger_size;\n sticker.id = \"countly-feedback-sticker-\" + currentWidget._id;\n svgIcon.appendChild(svgPath);\n sticker.appendChild(svgIcon);\n sticker.appendChild(stickerText);\n document.body.appendChild(sticker);\n var smileySvg = document.getElementById(\"smileyPathInStickerSvg\");\n if (smileySvg) {\n smileySvg.style.fill = currentWidget.trigger_font_color.length < 7 ? \"#\" + currentWidget.trigger_font_color : currentWidget.trigger_font_color;\n }\n add_event_listener(document.getElementById(\"countly-feedback-sticker-\" + currentWidget._id), \"click\", function () {\n document.getElementById(\"countly-iframe-wrapper-\" + currentWidget._id).style.display = \"block\";\n document.getElementById(\"cfbg\").style.display = \"block\";\n });\n } else {\n document.getElementById(\"countly-iframe-wrapper-\" + currentWidget._id).style.display = \"block\";\n document.getElementById(\"cfbg\").style.display = \"block\";\n }\n } catch (e) {\n log(logLevelEnums.ERROR, \"Somethings went wrong while element injecting process: \" + e);\n }\n }\n\n /**\n * Notify all waiting callbacks that script was loaded and instance created\n */\n function notifyLoaders() {\n // notify load waiters\n var i;\n if (typeof self.onload !== \"undefined\" && self.onload.length > 0) {\n for (i = 0; i < self.onload.length; i++) {\n if (typeof self.onload[i] === \"function\") {\n self.onload[i](self);\n }\n }\n self.onload = [];\n }\n }\n\n /**\n * Report duration of how long user was on this view\n * @memberof Countly._internals\n */\n function reportViewDuration() {\n if (lastView) {\n var segments = {\n name: lastView\n };\n\n // track pageview\n if (self.check_consent(featureEnums.VIEWS)) {\n add_cly_events({\n key: internalEventKeyEnums.VIEW,\n dur: trackTime ? getTimestamp() - lastViewTime : lastViewStoredDuration,\n segmentation: segments\n }, currentViewId);\n lastView = null;\n }\n }\n }\n\n /**\n * Get last view that user visited\n * @memberof Countly._internals\n * @returns {String} view name\n */\n function getLastView() {\n return lastView;\n }\n\n /**\n * Extend session's cookie's time\n */\n function extendSession() {\n if (useSessionCookie) {\n // if session expired, we should start a new one\n var expire = getValueFromStorage(\"cly_session\");\n if (!expire || parseInt(expire) <= getTimestamp()) {\n sessionStarted = false;\n self.begin_session(!autoExtend);\n }\n setValueInStorage(\"cly_session\", getTimestamp() + sessionCookieTimeout * 60);\n }\n }\n\n /**\n * Prepare request params by adding common properties to it\n * @param {Object} request - request object\n */\n function prepareRequest(request) {\n request.app_key = self.app_key;\n request.device_id = self.device_id;\n request.sdk_name = sdkName;\n request.sdk_version = sdkVersion;\n request.t = deviceIdType;\n request.av = self.app_version;\n var ua = getUA();\n if (!request.metrics) {\n // if metrics not provided pass useragent with this event\n request.metrics = JSON.stringify({\n _ua: ua\n });\n } else {\n // if metrics provided\n var currentMetrics = JSON.parse(request.metrics);\n if (!currentMetrics._ua) {\n // check if ua is present and if not add that\n currentMetrics._ua = ua;\n request.metrics = JSON.stringify(currentMetrics);\n }\n }\n if (self.check_consent(featureEnums.LOCATION)) {\n if (self.country_code) {\n request.country_code = self.country_code;\n }\n if (self.city) {\n request.city = self.city;\n }\n if (self.ip_address !== null) {\n request.ip_address = self.ip_address;\n }\n } else {\n request.location = \"\";\n }\n request.timestamp = getMsTimestamp();\n var date = new Date();\n request.hour = date.getHours();\n request.dow = date.getDay();\n }\n\n /**\n * Add request to request queue\n * @memberof Countly._internals\n * @param {Object} request - object with request parameters\n */\n function toRequestQueue(request) {\n if (self.ignore_visitor) {\n log(logLevelEnums.WARNING, \"User is opt_out will ignore the request: \" + request);\n return;\n }\n if (!self.app_key || !self.device_id) {\n log(logLevelEnums.ERROR, \"app_key or device_id is missing \", self.app_key, self.device_id);\n return;\n }\n prepareRequest(request);\n if (requestQueue.length > queueSize) {\n requestQueue.shift();\n }\n requestQueue.push(request);\n setValueInStorage(\"cly_queue\", requestQueue, true);\n }\n\n /**\n * Making request making and data processing loop\n * @memberof Countly._internals\n * @returns {void} void\n */\n function heartBeat() {\n notifyLoaders();\n\n // ignore bots\n if (self.ignore_visitor) {\n hasPulse = false;\n log(logLevelEnums.WARNING, \"User opt_out, no heartbeat\");\n return;\n }\n hasPulse = true;\n // process queue\n if (global && typeof Countly.q !== \"undefined\" && Countly.q.length > 0) {\n processAsyncQueue();\n }\n\n // extend session if needed\n if (sessionStarted && autoExtend && trackTime) {\n var last = getTimestamp();\n if (last - lastBeat > sessionUpdate) {\n self.session_duration(last - lastBeat);\n lastBeat = last;\n // save health check logging counters if there are any\n if (self.hcErrorCount > 0) {\n setValueInStorage(healthCheckCounterEnum.errorCount, self.hcErrorCount);\n }\n if (self.hcWarningCount > 0) {\n setValueInStorage(healthCheckCounterEnum.warningCount, self.hcWarningCount);\n }\n }\n }\n\n // process event queue\n if (eventQueue.length > 0 && !self.test_mode_eq) {\n if (eventQueue.length <= maxEventBatch) {\n toRequestQueue({\n events: JSON.stringify(eventQueue)\n });\n eventQueue = [];\n } else {\n var events = eventQueue.splice(0, maxEventBatch);\n toRequestQueue({\n events: JSON.stringify(events)\n });\n }\n setValueInStorage(\"cly_event\", eventQueue);\n }\n\n // process request queue with event queue\n if (!offlineMode && requestQueue.length > 0 && readyToProcess && getTimestamp() > failTimeout) {\n readyToProcess = false;\n var params = requestQueue[0];\n params.rr = requestQueue.length; // added at 23.2.3. It would give the current length of the queue. That includes the current request.\n log(logLevelEnums.DEBUG, \"Processing request\", params);\n setValueInStorage(\"cly_queue\", requestQueue, true);\n if (!self.test_mode) {\n makeNetworkRequest(\"send_request_queue\", self.url + apiPath, params, function (err, parameters) {\n if (err) {\n // error has been logged by the request function\n failTimeout = getTimestamp() + failTimeoutAmount;\n } else {\n // remove first item from queue\n requestQueue.shift();\n }\n setValueInStorage(\"cly_queue\", requestQueue, true);\n readyToProcess = true;\n // expected response is only JSON object\n }, false);\n }\n }\n setTimeout(heartBeat, beatInterval);\n }\n\n /**\n * Process queued calls\n * @memberof Countly._internals\n */\n function processAsyncQueue() {\n if (typeof Countly === \"undefined\" || typeof Countly.i === \"undefined\") {\n log(logLevelEnums.DEBUG, \"Countly is not finished initialization yet, will process the queue after initialization is done\");\n return;\n }\n var q = Countly.q;\n Countly.q = [];\n for (var i = 0; i < q.length; i++) {\n var req = q[i];\n log(logLevelEnums.DEBUG, \"Processing queued calls:\" + req);\n if (typeof req === \"function\") {\n req();\n } else if (Array.isArray(req) && req.length > 0) {\n var inst = self;\n var arg = 0;\n // check if it is meant for other tracker\n try {\n if (Countly.i[req[arg]]) {\n inst = Countly.i[req[arg]];\n arg++;\n }\n } catch (error) {\n // possibly first init and no other instance\n log(logLevelEnums.DEBUG, \"No instance found for the provided key while processing async queue\");\n Countly.q.push(req); // return it back to queue and continue to the next one\n continue;\n }\n if (typeof inst[req[arg]] === \"function\") {\n inst[req[arg]].apply(inst, req.slice(arg + 1));\n } else if (req[arg].indexOf(\"userData.\") === 0) {\n var userdata = req[arg].replace(\"userData.\", \"\");\n if (typeof inst.userData[userdata] === \"function\") {\n inst.userData[userdata].apply(inst, req.slice(arg + 1));\n }\n } else if (typeof Countly[req[arg]] === \"function\") {\n Countly[req[arg]].apply(Countly, req.slice(arg + 1));\n }\n }\n }\n }\n\n /**\n * Get device ID, stored one, or generate new one\n * @memberof Countly._internals\n * @returns {String} device id\n */\n function getStoredIdOrGenerateId() {\n var storedDeviceId = getValueFromStorage(\"cly_id\");\n if (storedDeviceId) {\n deviceIdType = getValueFromStorage(\"cly_id_type\");\n return storedDeviceId;\n }\n return generateUUID();\n }\n\n /**\n * Check if value is in UUID format\n * @memberof Countly._internals\n * @param {string} providedId - Id to check\n * @returns {Boolean} true if it is in UUID format\n */\n function isUUID(providedId) {\n return /[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-4[0-9a-fA-F]{3}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}/.test(providedId);\n }\n\n /**\n * Get and return user agentAgent\n * @memberof Countly._internals\n * @returns {string} returns userAgent string\n */\n function getUA() {\n return self.metrics._ua || currentUserAgentString();\n }\n\n /**\n * Get metrics of the browser or config object\n * @memberof Countly._internals\n * @returns {Object} Metrics object\n */\n function getMetrics() {\n var metrics = JSON.parse(JSON.stringify(self.metrics || {}));\n\n // getting app version\n metrics._app_version = metrics._app_version || self.app_version;\n metrics._ua = metrics._ua || currentUserAgentString();\n\n // getting resolution\n if (isBrowser && screen.width) {\n var width = screen.width ? parseInt(screen.width) : 0;\n var height = screen.height ? parseInt(screen.height) : 0;\n if (width !== 0 && height !== 0) {\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n if (iOS && window.devicePixelRatio) {\n // ios provides dips, need to multiply\n width = Math.round(width * window.devicePixelRatio);\n height = Math.round(height * window.devicePixelRatio);\n } else {\n if (Math.abs(window.orientation) === 90) {\n // we have landscape orientation\n // switch values for all except ios\n var temp = width;\n width = height;\n height = temp;\n }\n }\n metrics._resolution = metrics._resolution || \"\" + width + \"x\" + height;\n }\n }\n\n // getting density ratio\n if (isBrowser && window.devicePixelRatio) {\n metrics._density = metrics._density || window.devicePixelRatio;\n }\n\n // getting locale\n var locale = navigator.language || navigator.browserLanguage || navigator.systemLanguage || navigator.userLanguage;\n if (typeof locale !== \"undefined\") {\n metrics._locale = metrics._locale || locale;\n }\n if (isReferrerUsable()) {\n metrics._store = metrics._store || document.referrer;\n }\n log(logLevelEnums.DEBUG, \"Got metrics\", metrics);\n return metrics;\n }\n\n /**\n * @memberof Countly._internals\n * document.referrer returns the full URL of the page the user was on before they came to your site.\n * If the user open your site from bookmarks or by typing the URL in the address bar, then document.referrer is an empty string.\n * Inside an iframe, document.referrer will initially be set to the same value as the href of the parent window's Window.location. \n * \n * @param {string} customReferrer - custom referrer for testing\n * @returns {boolean} true if document.referrer is not empty string, undefined, current host or in the ignore list.\n */\n function isReferrerUsable(customReferrer) {\n if (!isBrowser) {\n return false;\n }\n var referrer = customReferrer || document.referrer;\n var isReferrerLegit = false;\n\n // do not report referrer if it is empty string or undefined\n if (typeof referrer === \"undefined\" || referrer.length === 0) {\n log(logLevelEnums.DEBUG, \"Invalid referrer:[\" + referrer + \"], ignoring.\");\n } else {\n // dissect the referrer (check urlParseRE's comments for more info on this process)\n var matches = urlParseRE.exec(referrer); // this can return null\n if (!matches) {\n log(logLevelEnums.DEBUG, \"Referrer is corrupt:[\" + referrer + \"], ignoring.\");\n } else if (!matches[11]) {\n log(logLevelEnums.DEBUG, \"No path found in referrer:[\" + referrer + \"], ignoring.\");\n } else if (matches[11] === window.location.hostname) {\n log(logLevelEnums.DEBUG, \"Referrer is current host:[\" + referrer + \"], ignoring.\");\n } else {\n if (ignoreReferrers && ignoreReferrers.length) {\n isReferrerLegit = true;\n for (var k = 0; k < ignoreReferrers.length; k++) {\n if (referrer.indexOf(ignoreReferrers[k]) >= 0) {\n log(logLevelEnums.DEBUG, \"Referrer in ignore list:[\" + referrer + \"], ignoring.\");\n isReferrerLegit = false;\n break;\n }\n }\n } else {\n log(logLevelEnums.DEBUG, \"Valid referrer:[\" + referrer + \"]\");\n isReferrerLegit = true;\n }\n }\n }\n return isReferrerLegit;\n }\n\n /**\n * Logging stuff, works only when debug mode is true\n * @param {string} level - log level (error, warning, info, debug, verbose)\n * @param {string} message - any string message\n * @memberof Countly._internals\n */\n function log(level, message) {\n if (self.debug && typeof console !== \"undefined\") {\n // parse the arguments into a string if it is an object\n if (arguments[2] && _typeof(arguments[2]) === \"object\") {\n arguments[2] = JSON.stringify(arguments[2]);\n }\n // append app_key to the start of the message if it is not the first instance (for multi instancing)\n if (!global) {\n message = \"[\" + self.app_key + \"] \" + message;\n }\n // if the provided level is not a proper log level re-assign it as [DEBUG]\n if (!level) {\n level = logLevelEnums.DEBUG;\n }\n // append level, message and args\n var extraArguments = \"\";\n for (var i = 2; i < arguments.length; i++) {\n extraArguments += arguments[i];\n }\n // eslint-disable-next-line no-shadow\n var log = level + \"[Countly] \" + message + extraArguments;\n // decide on the console\n if (level === logLevelEnums.ERROR) {\n // eslint-disable-next-line no-console\n console.error(log);\n HealthCheck.incrementErrorCount();\n } else if (level === logLevelEnums.WARNING) {\n // eslint-disable-next-line no-console\n console.warn(log);\n HealthCheck.incrementWarningCount();\n } else if (level === logLevelEnums.INFO) {\n // eslint-disable-next-line no-console\n console.info(log);\n } else if (level === logLevelEnums.VERBOSE) {\n // eslint-disable-next-line no-console\n console.log(log);\n }\n // if none of the above must be [DEBUG]\n else {\n // eslint-disable-next-line no-console\n console.debug(log);\n }\n }\n }\n\n /**\n * Decides to use which type of request method\n * @memberof Countly._internals\n * @param {String} functionName - Name of the function making the request for more detailed logging\n * @param {String} url - URL where to make request\n * @param {Object} params - key value object with URL params\n * @param {Function} callback - callback when request finished or failed\n * @param {Boolean} useBroadResponseValidator - if true that means the expected response is either a JSON object or a JSON array, if false only JSON \n */\n function makeNetworkRequest(functionName, url, params, callback, useBroadResponseValidator) {\n if (!isBrowser) {\n sendFetchRequest(functionName, url, params, callback, useBroadResponseValidator);\n } else {\n sendXmlHttpRequest(functionName, url, params, callback, useBroadResponseValidator);\n }\n }\n\n /**\n * Making xml HTTP request\n * @memberof Countly._internals\n * @param {String} functionName - Name of the function making the request for more detailed logging\n * @param {String} url - URL where to make request\n * @param {Object} params - key value object with URL params\n * @param {Function} callback - callback when request finished or failed\n * @param {Boolean} useBroadResponseValidator - if true that means the expected response is either a JSON object or a JSON array, if false only JSON \n */\n function sendXmlHttpRequest(functionName, url, params, callback, useBroadResponseValidator) {\n useBroadResponseValidator = useBroadResponseValidator || false;\n try {\n log(logLevelEnums.DEBUG, \"Sending XML HTTP request\");\n var xhr = new XMLHttpRequest();\n params = params || {};\n var data = prepareParams(params);\n var method = \"GET\";\n if (self.force_post || data.length >= 2000) {\n method = \"POST\";\n }\n if (method === \"GET\") {\n xhr.open(\"GET\", url + \"?\" + data, true);\n } else {\n xhr.open(\"POST\", url, true);\n xhr.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\");\n }\n for (var header in self.headers) {\n xhr.setRequestHeader(header, self.headers[header]);\n }\n // fallback on error\n xhr.onreadystatechange = function () {\n if (this.readyState === 4) {\n log(logLevelEnums.DEBUG, functionName + \" HTTP request completed with status code: [\" + this.status + \"] and response: [\" + this.responseText + \"]\");\n // response validation function will be selected to also accept JSON arrays if useBroadResponseValidator is true\n var isResponseValidated;\n if (useBroadResponseValidator) {\n // JSON array/object both can pass\n isResponseValidated = isResponseValidBroad(this.status, this.responseText);\n } else {\n // only JSON object can pass\n isResponseValidated = isResponseValid(this.status, this.responseText);\n }\n if (isResponseValidated) {\n if (typeof callback === \"function\") {\n callback(false, params, this.responseText);\n }\n } else {\n log(logLevelEnums.ERROR, functionName + \" Invalid response from server\");\n if (functionName === \"send_request_queue\") {\n HealthCheck.saveRequestCounters(this.status, this.responseText);\n }\n if (typeof callback === \"function\") {\n callback(true, params, this.status, this.responseText);\n }\n }\n }\n };\n if (method === \"GET\") {\n xhr.send();\n } else {\n xhr.send(data);\n }\n } catch (e) {\n // fallback\n log(logLevelEnums.ERROR, functionName + \" Something went wrong while making an XML HTTP request: \" + e);\n if (typeof callback === \"function\") {\n callback(true, params);\n }\n }\n }\n\n /**\n * Make a fetch request\n * @memberof Countly._internals\n * @param {String} functionName - Name of the function making the request for more detailed logging\n * @param {String} url - URL where to make request\n * @param {Object} params - key value object with URL params\n * @param {Function} callback - callback when request finished or failed\n * @param {Boolean} useBroadResponseValidator - if true that means the expected response is either a JSON object or a JSON array, if false only JSON \n */\n function sendFetchRequest(functionName, url, params, callback, useBroadResponseValidator) {\n useBroadResponseValidator = useBroadResponseValidator || false;\n var response;\n try {\n log(logLevelEnums.DEBUG, \"Sending Fetch request\");\n\n // Prepare request options\n var method = \"GET\";\n var headers = {\n \"Content-type\": \"application/x-www-form-urlencoded\"\n };\n var body = null;\n params = params || {};\n if (self.force_post || prepareParams(params).length >= 2000) {\n method = \"POST\";\n body = prepareParams(params);\n } else {\n url += \"?\" + prepareParams(params);\n }\n\n // Add custom headers\n for (var header in self.headers) {\n headers[header] = self.headers[header];\n }\n\n // Make the fetch request\n fetch(url, {\n method: method,\n headers: headers,\n body: body\n }).then(function (res) {\n response = res;\n return response.text();\n }).then(function (data) {\n log(logLevelEnums.DEBUG, functionName + \" Fetch request completed wit status code: [\" + response.status + \"] and response: [\" + data + \"]\");\n var isResponseValidated;\n if (useBroadResponseValidator) {\n isResponseValidated = isResponseValidBroad(response.status, data);\n } else {\n isResponseValidated = isResponseValid(response.status, data);\n }\n if (isResponseValidated) {\n if (typeof callback === \"function\") {\n callback(false, params, data);\n }\n } else {\n log(logLevelEnums.ERROR, functionName + \" Invalid response from server\");\n if (functionName === \"send_request_queue\") {\n HealthCheck.saveRequestCounters(response.status, data);\n }\n if (typeof callback === \"function\") {\n callback(true, params, response.status, data);\n }\n }\n })[\"catch\"](function (error) {\n log(logLevelEnums.ERROR, functionName + \" Failed Fetch request: \" + error);\n if (typeof callback === \"function\") {\n callback(true, params);\n }\n });\n } catch (e) {\n // fallback\n log(logLevelEnums.ERROR, functionName + \" Something went wrong with the Fetch request attempt: \" + e);\n if (typeof callback === \"function\") {\n callback(true, params);\n }\n }\n }\n\n /**\n * Check if the http response fits the bill of:\n * 1. The HTTP response code was successful (which is any 2xx code or code between 200 <= x < 300)\n * 2. The returned request is a JSON object\n * @memberof Countly._internals\n * @param {Number} statusCode - http incoming statusCode.\n * @param {String} str - response from server, ideally must be: {\"result\":\"Success\"} or should contain at least result field\n * @returns {Boolean} - returns true if response passes the tests \n */\n function isResponseValid(statusCode, str) {\n // status code and response format check\n if (!(statusCode >= 200 && statusCode < 300)) {\n log(logLevelEnums.ERROR, \"Http response status code:[\" + statusCode + \"] is not within the expected range\");\n return false;\n }\n\n // Try to parse JSON\n try {\n var parsedResponse = JSON.parse(str);\n\n // check if parsed response is a JSON object, if not the response is not valid\n if (Object.prototype.toString.call(parsedResponse) !== \"[object Object]\") {\n log(logLevelEnums.ERROR, \"Http response is not JSON Object\");\n return false;\n }\n return !!parsedResponse.result;\n } catch (e) {\n log(logLevelEnums.ERROR, \"Http response is not JSON: \" + e);\n return false;\n }\n }\n\n /**\n * Check if the http response fits the bill of:\n * 1. The HTTP response code was successful (which is any 2xx code or code between 200 <= x < 300)\n * 2. The returned request is a JSON object or JSON Array\n * @memberof Countly._internals\n * @param {Number} statusCode - http incoming statusCode.\n * @param {String} str - response from server, ideally must be: {\"result\":\"Success\"} or should contain at least result field\n * @returns {Boolean} - returns true if response passes the tests \n */\n function isResponseValidBroad(statusCode, str) {\n // status code and response format check\n if (!(statusCode >= 200 && statusCode < 300)) {\n log(logLevelEnums.ERROR, \"Http response status code:[\" + statusCode + \"] is not within the expected range\");\n return false;\n }\n\n // Try to parse JSON\n try {\n var parsedResponse = JSON.parse(str);\n // check if parsed response is a JSON object or JSON array, if not it is not valid \n if (Object.prototype.toString.call(parsedResponse) !== \"[object Object]\" && !Array.isArray(parsedResponse)) {\n log(logLevelEnums.ERROR, \"Http response is not JSON Object nor JSON Array\");\n return false;\n }\n\n // request should be accepted even if does not have result field\n return true;\n } catch (e) {\n log(logLevelEnums.ERROR, \"Http response is not JSON: \" + e);\n return false;\n }\n }\n\n /**\n * Get max scroll position\n * @memberof Countly._internals\n * \n */\n function processScroll() {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"processScroll, window object is not available. Not processing scroll.\");\n return;\n }\n scrollRegistryTopPosition = Math.max(scrollRegistryTopPosition, window.scrollY, document.body.scrollTop, document.documentElement.scrollTop);\n }\n\n /**\n * Process scroll data\n * @memberof Countly._internals\n */\n function processScrollView() {\n if (!isBrowser) {\n log(logLevelEnums.WARNING, \"processScrollView, window object is not available. Not processing scroll view.\");\n return;\n }\n if (isScrollRegistryOpen) {\n isScrollRegistryOpen = false;\n var height = getDocHeight();\n var width = getDocWidth();\n var viewportHeight = getViewportHeight();\n if (self.check_consent(featureEnums.SCROLLS)) {\n var segments = {\n type: \"scroll\",\n y: scrollRegistryTopPosition + viewportHeight,\n width: width,\n height: height,\n view: self.getViewUrl()\n };\n // truncate new segment\n segments = truncateObject(segments, self.maxKeyLength, self.maxValueSize, self.maxSegmentationValues, \"processScrollView\", log);\n if (self.track_domains) {\n segments.domain = window.location.hostname;\n }\n add_cly_events({\n key: internalEventKeyEnums.ACTION,\n segmentation: segments\n });\n }\n }\n }\n\n /**\n * Fetches the current device Id type\n * @memberof Countly._internals\n * @returns {String} token - auth token\n */\n function getInternalDeviceIdType() {\n return deviceIdType;\n }\n\n /**\n * Set auth token\n * @memberof Countly._internals\n * @param {String} token - auth token\n */\n function setToken(token) {\n setValueInStorage(\"cly_token\", token);\n }\n\n /**\n * Get auth token\n * @memberof Countly._internals\n * @returns {String} auth token\n */\n function getToken() {\n var token = getValueFromStorage(\"cly_token\");\n removeValueFromStorage(\"cly_token\");\n return token;\n }\n\n /**\n * Get event queue\n * @memberof Countly._internals\n * @returns {Array} event queue\n */\n function getEventQueue() {\n return eventQueue;\n }\n\n /**\n * Get request queue\n * @memberof Countly._internals\n * @returns {Array} request queue\n */\n function getRequestQueue() {\n return requestQueue;\n }\n\n /**\n * Returns contents of a cookie\n * @param {String} cookieKey - The key, name or identifier for the cookie\n * @returns {Varies} stored value\n */\n function readCookie(cookieKey) {\n var cookieID = cookieKey + \"=\";\n // array of all cookies available\n var cookieArray = document.cookie.split(\";\");\n for (var i = 0, max = cookieArray.length; i < max; i++) {\n // cookie from the cookie array to be checked\n var cookie = cookieArray[i];\n // get rid of empty spaces at the beginning\n while (cookie.charAt(0) === \" \") {\n cookie = cookie.substring(1, cookie.length);\n }\n // return the cookie if it is the one we are looking for\n if (cookie.indexOf(cookieID) === 0) {\n // just return the value part after '='\n return cookie.substring(cookieID.length, cookie.length);\n }\n }\n return null;\n }\n\n /**\n * Creates new cookie or removes cookie with negative expiration\n * @param {String} cookieKey - The key or identifier for the storage\n * @param {String} cookieVal - Contents to store\n * @param {Number} exp - Expiration in days\n */\n function createCookie(cookieKey, cookieVal, exp) {\n var date = new Date();\n date.setTime(date.getTime() + exp * 24 * 60 * 60 * 1000);\n // TODO: If we offer the developer the ability to manipulate the expiration date in the future, this part must be reworked\n var expires = \"; expires=\" + date.toGMTString();\n document.cookie = cookieKey + \"=\" + cookieVal + expires + \"; path=/\";\n }\n\n /**\n * Storage function that acts as getter, can be used for fetching data from local storage or cookies\n * @memberof Countly._internals\n * @param {String} key - storage key\n * @param {Boolean} useLocalStorage - if false, will fallback to cookie storage\n * @param {Boolean} useRawKey - if true, raw key will be used without any prefix\n * @returns {Varies} values stored for key\n */\n function getValueFromStorage(key, useLocalStorage, useRawKey) {\n // check if we should use storage at all. If in worker context but no storage is available, return early\n if (self.storage === \"none\" || _typeof(self.storage) !== \"object\" && !isBrowser) {\n log(logLevelEnums.DEBUG, \"Storage is disabled. Value with key: [\" + key + \"] won't be retrieved\");\n return;\n }\n\n // apply namespace or app_key\n if (!useRawKey) {\n key = self.app_key + \"/\" + key;\n if (self.namespace) {\n key = stripTrailingSlash(self.namespace) + \"/\" + key;\n }\n }\n var data;\n // use dev provided storage if available\n if (_typeof(self.storage) === \"object\" && typeof self.storage.getItem === \"function\") {\n data = self.storage.getItem(key);\n return key.endsWith(\"cly_id\") ? data : self.deserialize(data);\n }\n\n // developer set values takes priority\n if (useLocalStorage === undefined) {\n useLocalStorage = lsSupport;\n }\n\n // Get value\n if (useLocalStorage) {\n // Native support\n data = localStorage.getItem(key);\n } else if (self.storage !== \"localstorage\") {\n // Use cookie\n data = readCookie(key);\n }\n\n // we return early without parsing if we are trying to get the device ID. This way we are keeping it as a string incase it was numerical.\n if (key.endsWith(\"cly_id\")) {\n return data;\n }\n return self.deserialize(data);\n }\n\n /**\n * Storage function that acts as setter, can be used for setting data into local storage or as cookies\n * @memberof Countly._internals\n * @param {String} key - storage key\n * @param {Varies} value - value to set for key\n * @param {Boolean} useLocalStorage - if false, will fallback to storing as cookies\n * @param {Boolean} useRawKey - if true, raw key will be used without any prefix\n */\n function setValueInStorage(key, value, useLocalStorage, useRawKey) {\n // check if we should use storage options at all\n if (self.storage === \"none\" || _typeof(self.storage) !== \"object\" && !isBrowser) {\n log(logLevelEnums.DEBUG, \"Storage is disabled. Value with key: \" + key + \" won't be stored\");\n return;\n }\n\n // apply namespace\n if (!useRawKey) {\n key = self.app_key + \"/\" + key;\n if (self.namespace) {\n key = stripTrailingSlash(self.namespace) + \"/\" + key;\n }\n }\n if (typeof value !== \"undefined\" && value !== null) {\n // use dev provided storage if available\n if (_typeof(self.storage) === \"object\" && typeof self.storage.setItem === \"function\") {\n self.storage.setItem(key, value);\n return;\n }\n\n // developer set values takes priority\n if (useLocalStorage === undefined) {\n useLocalStorage = lsSupport;\n }\n value = self.serialize(value);\n // Set the store\n if (useLocalStorage) {\n // Native support\n localStorage.setItem(key, value);\n } else if (self.storage !== \"localstorage\") {\n // Use Cookie\n createCookie(key, value, 30);\n }\n }\n }\n\n /**\n * A function that can be used for removing data from local storage or cookies\n * @memberof Countly._internals\n * @param {String} key - storage key\n * @param {Boolean} useLocalStorage - if false, will fallback to removing cookies\n * @param {Boolean} useRawKey - if true, raw key will be used without any prefix\n */\n function removeValueFromStorage(key, useLocalStorage, useRawKey) {\n // check if we should use storage options at all\n if (self.storage === \"none\" || _typeof(self.storage) !== \"object\" && !isBrowser) {\n log(logLevelEnums.DEBUG, \"Storage is disabled. Value with key: \" + key + \" won't be removed\");\n return;\n }\n\n // apply namespace\n if (!useRawKey) {\n key = self.app_key + \"/\" + key;\n if (self.namespace) {\n key = stripTrailingSlash(self.namespace) + \"/\" + key;\n }\n }\n\n // use dev provided storage if available\n if (_typeof(self.storage) === \"object\" && typeof self.storage.removeItem === \"function\") {\n self.storage.removeItem(key);\n return;\n }\n\n // developer set values takes priority\n if (useLocalStorage === undefined) {\n useLocalStorage = lsSupport;\n }\n if (useLocalStorage) {\n // Native support\n localStorage.removeItem(key);\n } else if (self.storage !== \"localstorage\") {\n // Use cookie\n createCookie(key, \"\", -1);\n }\n }\n\n /**\n * Migrate from old storage to new app_key prefixed storage\n */\n function migrate() {\n if (getValueFromStorage(self.namespace + \"cly_id\", false, true)) {\n // old data exists, we should migrate it\n setValueInStorage(\"cly_id\", getValueFromStorage(self.namespace + \"cly_id\", false, true));\n setValueInStorage(\"cly_id_type\", getValueFromStorage(self.namespace + \"cly_id_type\", false, true));\n setValueInStorage(\"cly_event\", getValueFromStorage(self.namespace + \"cly_event\", false, true));\n setValueInStorage(\"cly_session\", getValueFromStorage(self.namespace + \"cly_session\", false, true));\n\n // filter out requests with correct app_key\n var requests = getValueFromStorage(self.namespace + \"cly_queue\", false, true);\n if (Array.isArray(requests)) {\n requests = requests.filter(function (req) {\n return req.app_key === self.app_key;\n });\n setValueInStorage(\"cly_queue\", requests);\n }\n if (getValueFromStorage(self.namespace + \"cly_cmp_id\", false, true)) {\n setValueInStorage(\"cly_cmp_id\", getValueFromStorage(self.namespace + \"cly_cmp_id\", false, true));\n setValueInStorage(\"cly_cmp_uid\", getValueFromStorage(self.namespace + \"cly_cmp_uid\", false, true));\n }\n if (getValueFromStorage(self.namespace + \"cly_ignore\", false, true)) {\n setValueInStorage(\"cly_ignore\", getValueFromStorage(self.namespace + \"cly_ignore\", false, true));\n }\n\n // now deleting old data, so we won't migrate again\n removeValueFromStorage(\"cly_id\", false, true);\n removeValueFromStorage(\"cly_id_type\", false, true);\n removeValueFromStorage(\"cly_event\", false, true);\n removeValueFromStorage(\"cly_session\", false, true);\n removeValueFromStorage(\"cly_queue\", false, true);\n removeValueFromStorage(\"cly_cmp_id\", false, true);\n removeValueFromStorage(\"cly_cmp_uid\", false, true);\n removeValueFromStorage(\"cly_ignore\", false, true);\n }\n }\n\n /**\n * Apply modified storage changes\n * @param {String} key - key of storage modified\n * @param {Varies} newValue - new value for storage\n */\n this.onStorageChange = function (key, newValue) {\n log(logLevelEnums.DEBUG, \"onStorageChange, Applying storage changes for key:\", key);\n log(logLevelEnums.DEBUG, \"onStorageChange, Applying storage changes for value:\", newValue);\n switch (key) {\n // queue of requests\n case \"cly_queue\":\n requestQueue = self.deserialize(newValue || \"[]\");\n break;\n // queue of events\n case \"cly_event\":\n eventQueue = self.deserialize(newValue || \"[]\");\n break;\n case \"cly_remote_configs\":\n remoteConfigs = self.deserialize(newValue || \"{}\");\n break;\n case \"cly_ignore\":\n self.ignore_visitor = self.deserialize(newValue);\n break;\n case \"cly_id\":\n self.device_id = newValue;\n break;\n case \"cly_id_type\":\n deviceIdType = self.deserialize(newValue);\n break;\n // do nothing\n }\n };\n\n /**\n * Expose internal methods to end user for usability\n * @namespace Countly._internals\n * @name Countly._internals\n */\n this._internals = {\n // TODO: looks like we do not use this function. Either use it for something or eliminate.\n store: setValueInStorage,\n getDocWidth: getDocWidth,\n getDocHeight: getDocHeight,\n getViewportHeight: getViewportHeight,\n get_page_coord: get_page_coord,\n get_event_target: get_event_target,\n add_event_listener: add_event_listener,\n createNewObjectFromProperties: createNewObjectFromProperties,\n truncateObject: truncateObject,\n truncateSingleValue: truncateSingleValue,\n stripTrailingSlash: stripTrailingSlash,\n prepareParams: prepareParams,\n sendXmlHttpRequest: sendXmlHttpRequest,\n isResponseValid: isResponseValid,\n getInternalDeviceIdType: getInternalDeviceIdType,\n getMsTimestamp: getMsTimestamp,\n getTimestamp: getTimestamp,\n isResponseValidBroad: isResponseValidBroad,\n secureRandom: secureRandom,\n log: log,\n checkIfLoggingIsOn: checkIfLoggingIsOn,\n getMetrics: getMetrics,\n getUA: getUA,\n prepareRequest: prepareRequest,\n generateUUID: generateUUID,\n sendEventsForced: sendEventsForced,\n isUUID: isUUID,\n isReferrerUsable: isReferrerUsable,\n getId: getStoredIdOrGenerateId,\n heartBeat: heartBeat,\n toRequestQueue: toRequestQueue,\n reportViewDuration: reportViewDuration,\n loadJS: loadJS,\n loadCSS: loadCSS,\n getLastView: getLastView,\n setToken: setToken,\n getToken: getToken,\n showLoader: showLoader,\n hideLoader: hideLoader,\n setValueInStorage: setValueInStorage,\n getValueFromStorage: getValueFromStorage,\n removeValueFromStorage: removeValueFromStorage,\n add_cly_events: add_cly_events,\n processScrollView: processScrollView,\n processScroll: processScroll,\n currentUserAgentString: currentUserAgentString,\n currentUserAgentDataString: currentUserAgentDataString,\n userAgentDeviceDetection: userAgentDeviceDetection,\n userAgentSearchBotDetection: userAgentSearchBotDetection,\n getRequestQueue: getRequestQueue,\n getEventQueue: getEventQueue,\n sendFetchRequest: sendFetchRequest,\n processAsyncQueue: processAsyncQueue,\n makeNetworkRequest: makeNetworkRequest,\n /**\n * Clear queued data\n * @memberof Countly._internals\n */\n clearQueue: function clearQueue() {\n requestQueue = [];\n setValueInStorage(\"cly_queue\", []);\n eventQueue = [];\n setValueInStorage(\"cly_event\", []);\n },\n /**\n * For testing pusposes only\n * @returns {Object} - returns the local queues\n */\n getLocalQueues: function getLocalQueues() {\n return {\n eventQ: eventQueue,\n requestQ: requestQueue\n };\n }\n };\n\n /**\n * Health Check Interface:\n * {sendInstantHCRequest} Sends instant health check request\n * {resetAndSaveCounters} Resets and saves health check counters\n * {incrementErrorCount} Increments health check error count\n * {incrementWarningCount} Increments health check warning count\n * {resetCounters} Resets health check counters\n * {saveRequestCounters} Saves health check request counters\n */\n var HealthCheck = {};\n HealthCheck.sendInstantHCRequest = sendInstantHCRequest;\n HealthCheck.resetAndSaveCounters = resetAndSaveCounters;\n HealthCheck.incrementErrorCount = incrementErrorCount;\n HealthCheck.incrementWarningCount = incrementWarningCount;\n HealthCheck.resetCounters = resetCounters;\n HealthCheck.saveRequestCounters = saveRequestCounters;\n /**\n * Increments health check error count\n */\n function incrementErrorCount() {\n self.hcErrorCount++;\n }\n /**\n * Increments health check warning count\n */\n function incrementWarningCount() {\n self.hcWarningCount++;\n }\n /**\n * Resets health check counters\n */\n function resetCounters() {\n self.hcErrorCount = 0;\n self.hcWarningCount = 0;\n self.hcStatusCode = -1;\n self.hcErrorMessage = \"\";\n }\n /**\n * Sets and saves the status code and error message counters \n * @param {number} status - response status code of the request\n * @param {string} responseText - response text of the request\n */\n function saveRequestCounters(status, responseText) {\n self.hcStatusCode = status;\n self.hcErrorMessage = responseText;\n setValueInStorage(healthCheckCounterEnum.statusCode, self.hcStatusCode);\n setValueInStorage(healthCheckCounterEnum.errorMessage, self.hcErrorMessage);\n }\n /**\n * Resets and saves health check counters\n */\n function resetAndSaveCounters() {\n HealthCheck.resetCounters();\n setValueInStorage(healthCheckCounterEnum.errorCount, self.hcErrorCount);\n setValueInStorage(healthCheckCounterEnum.warningCount, self.hcWarningCount);\n setValueInStorage(healthCheckCounterEnum.statusCode, self.hcStatusCode);\n setValueInStorage(healthCheckCounterEnum.errorMessage, self.hcErrorMessage);\n }\n /**\n * Countly health check request sender\n */\n function sendInstantHCRequest() {\n // truncate error message to 1000 characters\n var curbedMessage = truncateSingleValue(self.hcErrorMessage, 1000, \"healthCheck\", log);\n // prepare hc object\n var hc = {\n el: self.hcErrorCount,\n wl: self.hcWarningCount,\n sc: self.hcStatusCode,\n em: JSON.stringify(curbedMessage)\n };\n // prepare request\n var request = {\n hc: JSON.stringify(hc),\n metrics: JSON.stringify({\n _app_version: self.app_version\n })\n };\n // add common request params\n prepareRequest(request);\n // send request\n makeNetworkRequest(\"[healthCheck]\", self.url + apiPath, request, function (err) {\n // request maker already logs the error. No need to log it again here\n if (!err) {\n // reset and save health check counters if request was successful\n HealthCheck.resetAndSaveCounters();\n }\n }, true);\n }\n\n // initialize Countly Class\n this.initialize();\n });\n\n var apmLibrariesNotLoaded = true; // used to prevent loading apm scripts multiple times.\n\n Countly.features = [featureEnums.APM, featureEnums.ATTRIBUTION, featureEnums.CLICKS, featureEnums.CRASHES, featureEnums.EVENTS, featureEnums.FEEDBACK, featureEnums.FORMS, featureEnums.LOCATION, featureEnums.REMOTE_CONFIG, featureEnums.SCROLLS, featureEnums.SESSIONS, featureEnums.STAR_RATING, featureEnums.USERS, featureEnums.VIEWS];\n Countly.q = Countly.q || [];\n Countly.onload = Countly.onload || [];\n Countly.CountlyClass = CountlyClass;\n Countly.init = function (conf) {\n conf = conf || {};\n if (Countly.loadAPMScriptsAsync && apmLibrariesNotLoaded) {\n apmLibrariesNotLoaded = false;\n initAfterLoadingAPM(conf);\n return;\n }\n var appKey = conf.app_key || Countly.app_key;\n if (!Countly.i || !Countly.i[appKey]) {\n var inst = new CountlyClass(conf);\n if (!Countly.i) {\n Countly.i = {};\n for (var key in inst) {\n Countly[key] = inst[key];\n }\n }\n Countly.i[appKey] = inst;\n }\n return Countly.i[appKey];\n };\n function initAfterLoadingAPM(conf) {\n // TODO: We assume we are in browser context. If browser context checks at top are removed this code should have its own check.\n // TODO: We already have a loadFile and loadJS functions but they are not used here. If readability would improve that way, they can also be considered here.\n\n // Create boomerang script\n var boomerangScript = document.createElement(\"script\");\n var countlyBoomerangScript = document.createElement(\"script\");\n\n // Set boomerang script attributes\n boomerangScript.async = true;\n countlyBoomerangScript.async = true;\n\n // Set boomerang script source\n boomerangScript.src = Countly.customSourceBoomerang || CDN.BOOMERANG_SRC;\n countlyBoomerangScript.src = Countly.customSourceCountlyBoomerang || CDN.CLY_BOOMERANG_SRC;\n\n // Append boomerang script to the head\n document.getElementsByTagName(\"head\")[0].appendChild(boomerangScript);\n document.getElementsByTagName(\"head\")[0].appendChild(countlyBoomerangScript);\n var boomLoaded = false;\n var countlyBoomLoaded = false;\n boomerangScript.onload = function () {\n boomLoaded = true;\n };\n countlyBoomerangScript.onload = function () {\n countlyBoomLoaded = true;\n };\n var timeoutCounter = 0;\n var intervalDuration = 50;\n var timeoutLimit = 1500; // TODO: Configurable? Mb with Countly.apmScriptLoadTimeout?\n // init Countly only after boomerang is loaded\n var intervalID = setInterval(function () {\n timeoutCounter += intervalDuration;\n if (boomLoaded && countlyBoomLoaded || timeoutCounter >= timeoutLimit) {\n if (Countly.debug) {\n var message = \"BoomerangJS loaded:[\" + boomLoaded + \"], countly_boomerang loaded:[\" + countlyBoomLoaded + \"].\";\n if (boomLoaded && countlyBoomLoaded) {\n message = \"[DEBUG] \" + message;\n // eslint-disable-next-line no-console\n console.log(message);\n } else {\n message = \"[WARNING] \" + message + \" Initializing without APM.\";\n // eslint-disable-next-line no-console\n console.warn(message);\n }\n }\n Countly.init(conf);\n clearInterval(intervalID);\n }\n }, intervalDuration);\n }\n\n /**\n * Overwrite serialization function for extending SDK with encryption, etc\n * @param {any} value - value to serialize\n * @return {string} serialized value\n * */\n Countly.serialize = function (value) {\n // Convert object values to JSON\n if (_typeof(value) === \"object\") {\n value = JSON.stringify(value);\n }\n return value;\n };\n\n /**\n * Overwrite deserialization function for extending SDK with encryption, etc\n * @param {string} data - value to deserialize\n * @return {varies} deserialized value\n * */\n Countly.deserialize = function (data) {\n if (data === \"\") {\n // we expect string or null only. Empty sting would throw an error.\n return data;\n }\n // Try to parse JSON...\n try {\n data = JSON.parse(data);\n } catch (e) {\n if (checkIfLoggingIsOn()) {\n // eslint-disable-next-line no-console\n console.warn(\"[WARNING] [Countly] deserialize, Could not parse the file:[\" + data + \"], error: \" + e);\n }\n }\n return data;\n };\n\n /**\n * Overwrite a way to retrieve view name\n * @return {string} view name\n * */\n Countly.getViewName = function () {\n if (!isBrowser) {\n return \"web_worker\";\n }\n return window.location.pathname;\n };\n\n /**\n * Overwrite a way to retrieve view url\n * @return {string} view url\n * */\n Countly.getViewUrl = function () {\n if (!isBrowser) {\n return \"web_worker\";\n }\n return window.location.pathname;\n };\n\n /**\n * Overwrite a way to get search query\n * @return {string} view url\n * */\n Countly.getSearchQuery = function () {\n if (!isBrowser) {\n return;\n }\n return window.location.search;\n };\n\n /**\n * Possible device Id types are: DEVELOPER_SUPPLIED, SDK_GENERATED, TEMPORARY_ID\n * @enum DeviceIdType\n * */\n Countly.DeviceIdType = {\n DEVELOPER_SUPPLIED: DeviceIdTypeInternalEnums.DEVELOPER_SUPPLIED,\n SDK_GENERATED: DeviceIdTypeInternalEnums.SDK_GENERATED,\n TEMPORARY_ID: DeviceIdTypeInternalEnums.TEMPORARY_ID\n };\n\n /**\n * Monitor parallel storage changes like other opened tabs\n */\n if (isBrowser) {\n window.addEventListener(\"storage\", function (e) {\n var parts = (e.key + \"\").split(\"/\");\n var key = parts.pop();\n var appKey = parts.pop();\n if (Countly.i && Countly.i[appKey]) {\n Countly.i[appKey].onStorageChange(key, e.newValue);\n }\n });\n }\n\n exports.default = Countly;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));","module.exports = __WEBPACK_EXTERNAL_MODULE__565__;","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.rollbar=e():t.rollbar=e()}(this,(()=>{return t={276:function(){!function(t){\"use strict\";t.console||(t.console={});for(var e,r,n=t.console,o=function(){},i=[\"memory\"],s=\"assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn\".split(\",\");e=i.pop();)n[e]||(n[e]={});for(;r=s.pop();)n[r]||(n[r]=o)}(\"undefined\"==typeof window?this:window)},180:function(t,e,r){var n,o,i;!function(s,a){\"use strict\";o=[r(124)],void 0===(i=\"function\"==typeof(n=function(t){var e=/(^|@)\\S+:\\d+/,r=/^\\s*at .*(\\S+:\\d+|\\(native\\))/m,n=/^(eval@)?(\\[native code])?$/;return{parse:function(t){if(void 0!==t.stacktrace||void 0!==t[\"opera#sourceloc\"])return this.parseOpera(t);if(t.stack&&t.stack.match(r))return this.parseV8OrIE(t);if(t.stack)return this.parseFFOrSafari(t);throw new Error(\"Cannot parse given Error object\")},extractLocation:function(t){if(-1===t.indexOf(\":\"))return[t];var e=/(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(t.replace(/[()]/g,\"\"));return[e[1],e[2]||void 0,e[3]||void 0]},parseV8OrIE:function(e){return e.stack.split(\"\\n\").filter((function(t){return!!t.match(r)}),this).map((function(e){e.indexOf(\"(eval \")>-1&&(e=e.replace(/eval code/g,\"eval\").replace(/(\\(eval at [^()]*)|(\\),.*$)/g,\"\"));var r=e.replace(/^\\s+/,\"\").replace(/\\(eval code/g,\"(\"),n=r.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/),o=(r=n?r.replace(n[0],\"\"):r).split(/\\s+/).slice(1),i=this.extractLocation(n?n[1]:o.pop()),s=o.join(\" \")||void 0,a=[\"eval\",\"<anonymous>\"].indexOf(i[0])>-1?void 0:i[0];return new t({functionName:s,fileName:a,lineNumber:i[1],columnNumber:i[2],source:e})}),this)},parseFFOrSafari:function(e){return e.stack.split(\"\\n\").filter((function(t){return!t.match(n)}),this).map((function(e){if(e.indexOf(\" > eval\")>-1&&(e=e.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g,\":$1\")),-1===e.indexOf(\"@\")&&-1===e.indexOf(\":\"))return new t({functionName:e});var r=/((.*\".+\"[^@]*)?[^@]*)(?:@)/,n=e.match(r),o=n&&n[1]?n[1]:void 0,i=this.extractLocation(e.replace(r,\"\"));return new t({functionName:o,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:e})}),this)},parseOpera:function(t){return!t.stacktrace||t.message.indexOf(\"\\n\")>-1&&t.message.split(\"\\n\").length>t.stacktrace.split(\"\\n\").length?this.parseOpera9(t):t.stack?this.parseOpera11(t):this.parseOpera10(t)},parseOpera9:function(e){for(var r=/Line (\\d+).*script (?:in )?(\\S+)/i,n=e.message.split(\"\\n\"),o=[],i=2,s=n.length;i<s;i+=2){var a=r.exec(n[i]);a&&o.push(new t({fileName:a[2],lineNumber:a[1],source:n[i]}))}return o},parseOpera10:function(e){for(var r=/Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i,n=e.stacktrace.split(\"\\n\"),o=[],i=0,s=n.length;i<s;i+=2){var a=r.exec(n[i]);a&&o.push(new t({functionName:a[3]||void 0,fileName:a[2],lineNumber:a[1],source:n[i]}))}return o},parseOpera11:function(r){return r.stack.split(\"\\n\").filter((function(t){return!!t.match(e)&&!t.match(/^Error created at/)}),this).map((function(e){var r,n=e.split(\"@\"),o=this.extractLocation(n.pop()),i=n.shift()||\"\",s=i.replace(/<anonymous function(: (\\w+))?>/,\"$2\").replace(/\\([^)]*\\)/g,\"\")||void 0;i.match(/\\(([^)]*)\\)/)&&(r=i.replace(/^[^(]+\\(([^)]*)\\)$/,\"$1\"));var a=void 0===r||\"[arguments not available]\"===r?void 0:r.split(\",\");return new t({functionName:s,args:a,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:e})}),this)}}})?n.apply(e,o):n)||(t.exports=i)}()},124:function(t,e){var r,n,o;!function(i,s){\"use strict\";n=[],void 0===(o=\"function\"==typeof(r=function(){function t(t){return!isNaN(parseFloat(t))&&isFinite(t)}function e(t){return t.charAt(0).toUpperCase()+t.substring(1)}function r(t){return function(){return this[t]}}var n=[\"isConstructor\",\"isEval\",\"isNative\",\"isToplevel\"],o=[\"columnNumber\",\"lineNumber\"],i=[\"fileName\",\"functionName\",\"source\"],s=[\"args\"],a=[\"evalOrigin\"],u=n.concat(o,i,s,a);function c(t){if(t)for(var r=0;r<u.length;r++)void 0!==t[u[r]]&&this[\"set\"+e(u[r])](t[u[r]])}c.prototype={getArgs:function(){return this.args},setArgs:function(t){if(\"[object Array]\"!==Object.prototype.toString.call(t))throw new TypeError(\"Args must be an Array\");this.args=t},getEvalOrigin:function(){return this.evalOrigin},setEvalOrigin:function(t){if(t instanceof c)this.evalOrigin=t;else{if(!(t instanceof Object))throw new TypeError(\"Eval Origin must be an Object or StackFrame\");this.evalOrigin=new c(t)}},toString:function(){var t=this.getFileName()||\"\",e=this.getLineNumber()||\"\",r=this.getColumnNumber()||\"\",n=this.getFunctionName()||\"\";return this.getIsEval()?t?\"[eval] (\"+t+\":\"+e+\":\"+r+\")\":\"[eval]:\"+e+\":\"+r:n?n+\" (\"+t+\":\"+e+\":\"+r+\")\":t+\":\"+e+\":\"+r}},c.fromString=function(t){var e=t.indexOf(\"(\"),r=t.lastIndexOf(\")\"),n=t.substring(0,e),o=t.substring(e+1,r).split(\",\"),i=t.substring(r+1);if(0===i.indexOf(\"@\"))var s=/@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(i,\"\"),a=s[1],u=s[2],l=s[3];return new c({functionName:n,args:o||void 0,fileName:a,lineNumber:u||void 0,columnNumber:l||void 0})};for(var l=0;l<n.length;l++)c.prototype[\"get\"+e(n[l])]=r(n[l]),c.prototype[\"set\"+e(n[l])]=function(t){return function(e){this[t]=Boolean(e)}}(n[l]);for(var p=0;p<o.length;p++)c.prototype[\"get\"+e(o[p])]=r(o[p]),c.prototype[\"set\"+e(o[p])]=function(e){return function(r){if(!t(r))throw new TypeError(e+\" must be a Number\");this[e]=Number(r)}}(o[p]);for(var h=0;h<i.length;h++)c.prototype[\"get\"+e(i[h])]=r(i[h]),c.prototype[\"set\"+e(i[h])]=function(t){return function(e){this[t]=String(e)}}(i[h]);return c})?r.apply(e,n):r)||(t.exports=o)}()},815:(t,e,r)=>{\"use strict\";var n=r(702),o=r(817),i={hostname:\"api.rollbar.com\",path:\"/api/1/item/\",search:null,version:\"1\",protocol:\"https:\",port:443};function s(t,e,r,n,o){this.options=t,this.transport=e,this.url=r,this.truncation=n,this.jsonBackup=o,this.accessToken=t.accessToken,this.transportOptions=a(t,r)}function a(t,e){return o.getTransportFromOptions(t,i,e)}s.prototype.postItem=function(t,e){var r=o.transportOptions(this.transportOptions,\"POST\"),n=o.buildPayload(this.accessToken,t,this.jsonBackup),i=this;setTimeout((function(){i.transport.post(i.accessToken,r,n,e)}),0)},s.prototype.buildJsonPayload=function(t,e){var r,i=o.buildPayload(this.accessToken,t,this.jsonBackup);return(r=this.truncation?this.truncation.truncate(i):n.stringify(i)).error?(e&&e(r.error),null):r.value},s.prototype.postJsonPayload=function(t,e){var r=o.transportOptions(this.transportOptions,\"POST\");this.transport.postJsonPayload(this.accessToken,r,t,e)},s.prototype.configure=function(t){var e=this.oldOptions;return this.options=n.merge(e,t),this.transportOptions=a(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=s},817:(t,e,r)=>{\"use strict\";var n=r(702);t.exports={buildPayload:function(t,e,r){if(!n.isType(e.context,\"string\")){var o=n.stringify(e.context,r);o.error?e.context=\"Error: could not serialize 'context'\":e.context=o.value||\"\",e.context.length>255&&(e.context=e.context.substr(0,255))}return{access_token:t,data:e}},getTransportFromOptions:function(t,e,r){var n=e.hostname,o=e.protocol,i=e.port,s=e.path,a=e.search,u=t.timeout,c=function(t){var e=\"undefined\"!=typeof window&&window||\"undefined\"!=typeof self&&self,r=t.defaultTransport||\"xhr\";return void 0===e.fetch&&(r=\"xhr\"),void 0===e.XMLHttpRequest&&(r=\"fetch\"),r}(t),l=t.proxy;if(t.endpoint){var p=r.parse(t.endpoint);n=p.hostname,o=p.protocol,i=p.port,s=p.pathname,a=p.search}return{timeout:u,hostname:n,protocol:o,port:i,path:s,search:a,proxy:l,transport:c}},transportOptions:function(t,e){var r=t.protocol||\"https:\",n=t.port||(\"http:\"===r?80:\"https:\"===r?443:void 0),o=t.hostname,i=t.path,s=t.timeout,a=t.transport;return t.search&&(i+=t.search),t.proxy&&(i=r+\"//\"+o+i,o=t.proxy.host||t.proxy.hostname,n=t.proxy.port,r=t.proxy.protocol||r),{timeout:s,protocol:r,hostname:o,path:i,port:n,method:e,transport:a}},appendPathToPath:function(t,e){var r=/\\/$/.test(t),n=/^\\//.test(e);return r&&n?e=e.substring(1):r||n||(e=\"/\"+e),t+e}}},409:(t,e,r)=>{\"use strict\";var n=r(343),o=\"undefined\"!=typeof window&&window._rollbarConfig,i=o&&o.globalAlias||\"Rollbar\",s=\"undefined\"!=typeof window&&window[i]&&\"function\"==typeof window[i].shimId&&void 0!==window[i].shimId();if(\"undefined\"==typeof window||window._rollbarStartTime||(window._rollbarStartTime=(new Date).getTime()),!s&&o){var a=new n(o);window[i]=a}else\"undefined\"!=typeof window?(window.rollbar=n,window._rollbarDidLoad=!0):\"undefined\"!=typeof self&&(self.rollbar=n,self._rollbarDidLoad=!0);t.exports=n},403:(t,e,r)=>{\"use strict\";var n=r(562),o=r(702),i=r(815),s=r(802),a=r(349),u=r(477),c=r(509),l=r(860),p=r(417),h=r(172),f=r(61),d=r(303);function m(t,e){this.options=o.handleOptions(x,t,null,s),this.options._configuredOptions=t;var r=this.components.telemeter,a=this.components.instrumenter,d=this.components.polyfillJSON;this.wrapGlobals=this.components.wrapGlobals,this.scrub=this.components.scrub;var m=this.components.truncation,g=new u(m),v=new i(this.options,g,c,m);r&&(this.telemeter=new r(this.options)),this.client=e||new n(this.options,v,s,this.telemeter,\"browser\");var y=b(),w=\"undefined\"!=typeof document&&document;this.isChrome=y.chrome&&y.chrome.runtime,this.anonymousErrorsPending=0,function(t,e,r){t.addTransform(l.handleDomException).addTransform(l.handleItemWithError).addTransform(l.ensureItemHasSomethingToSay).addTransform(l.addBaseInfo).addTransform(l.addRequestInfo(r)).addTransform(l.addClientInfo(r)).addTransform(l.addPluginInfo(r)).addTransform(l.addBody).addTransform(p.addMessageWithError).addTransform(p.addTelemetryData).addTransform(p.addConfigToPayload).addTransform(l.addScrubber(e.scrub)).addTransform(p.addPayloadOptions).addTransform(p.userTransform(s)).addTransform(p.addConfiguredOptions).addTransform(p.addDiagnosticKeys).addTransform(p.itemToPayload)}(this.client.notifier,this,y),this.client.queue.addPredicate(f.checkLevel).addPredicate(h.checkIgnore).addPredicate(f.userCheckIgnore(s)).addPredicate(f.urlIsNotBlockListed(s)).addPredicate(f.urlIsSafeListed(s)).addPredicate(f.messageIsIgnored(s)),this.setupUnhandledCapture(),a&&(this.instrumenter=new a(this.options,this.client.telemeter,this,y,w),this.instrumenter.instrument()),o.setupJSON(d),this.rollbar=this}var g=null;function v(t){var e=\"Rollbar is not initialized\";s.error(e),t&&t(new Error(e))}function y(t){for(var e=0,r=t.length;e<r;++e)if(o.isFunction(t[e]))return t[e]}function b(){return\"undefined\"!=typeof window&&window||\"undefined\"!=typeof self&&self}m.init=function(t,e){return g?g.global(t).configure(t):g=new m(t,e)},m.prototype.components={},m.setComponents=function(t){m.prototype.components=t},m.prototype.global=function(t){return this.client.global(t),this},m.global=function(t){if(g)return g.global(t);v()},m.prototype.configure=function(t,e){var r=this.options,n={};return e&&(n={payload:e}),this.options=o.handleOptions(r,t,n,s),this.options._configuredOptions=o.handleOptions(r._configuredOptions,t,n),this.client.configure(this.options,e),this.instrumenter&&this.instrumenter.configure(this.options),this.setupUnhandledCapture(),this},m.configure=function(t,e){if(g)return g.configure(t,e);v()},m.prototype.lastError=function(){return this.client.lastError},m.lastError=function(){if(g)return g.lastError();v()},m.prototype.log=function(){var t=this._createItem(arguments),e=t.uuid;return this.client.log(t),{uuid:e}},m.log=function(){if(g)return g.log.apply(g,arguments);v(y(arguments))},m.prototype.debug=function(){var t=this._createItem(arguments),e=t.uuid;return this.client.debug(t),{uuid:e}},m.debug=function(){if(g)return g.debug.apply(g,arguments);v(y(arguments))},m.prototype.info=function(){var t=this._createItem(arguments),e=t.uuid;return this.client.info(t),{uuid:e}},m.info=function(){if(g)return g.info.apply(g,arguments);v(y(arguments))},m.prototype.warn=function(){var t=this._createItem(arguments),e=t.uuid;return this.client.warn(t),{uuid:e}},m.warn=function(){if(g)return g.warn.apply(g,arguments);v(y(arguments))},m.prototype.warning=function(){var t=this._createItem(arguments),e=t.uuid;return this.client.warning(t),{uuid:e}},m.warning=function(){if(g)return g.warning.apply(g,arguments);v(y(arguments))},m.prototype.error=function(){var t=this._createItem(arguments),e=t.uuid;return this.client.error(t),{uuid:e}},m.error=function(){if(g)return g.error.apply(g,arguments);v(y(arguments))},m.prototype.critical=function(){var t=this._createItem(arguments),e=t.uuid;return this.client.critical(t),{uuid:e}},m.critical=function(){if(g)return g.critical.apply(g,arguments);v(y(arguments))},m.prototype.buildJsonPayload=function(t){return this.client.buildJsonPayload(t)},m.buildJsonPayload=function(){if(g)return g.buildJsonPayload.apply(g,arguments);v()},m.prototype.sendJsonPayload=function(t){return this.client.sendJsonPayload(t)},m.sendJsonPayload=function(){if(g)return g.sendJsonPayload.apply(g,arguments);v()},m.prototype.setupUnhandledCapture=function(){var t=b();this.unhandledExceptionsInitialized||(this.options.captureUncaught||this.options.handleUncaughtExceptions)&&(a.captureUncaughtExceptions(t,this),this.wrapGlobals&&this.options.wrapGlobalEventHandlers&&this.wrapGlobals(t,this),this.unhandledExceptionsInitialized=!0),this.unhandledRejectionsInitialized||(this.options.captureUnhandledRejections||this.options.handleUnhandledRejections)&&(a.captureUnhandledRejections(t,this),this.unhandledRejectionsInitialized=!0)},m.prototype.handleUncaughtException=function(t,e,r,n,i,s){if(this.options.captureUncaught||this.options.handleUncaughtExceptions){if(this.options.inspectAnonymousErrors&&this.isChrome&&null===i&&\"\"===e)return\"anonymous\";var a,u=o.makeUnhandledStackInfo(t,e,r,n,i,\"onerror\",\"uncaught exception\",d);o.isError(i)?(a=this._createItem([t,i,s]))._unhandledStackInfo=u:o.isError(e)?(a=this._createItem([t,e,s]))._unhandledStackInfo=u:(a=this._createItem([t,s])).stackInfo=u,a.level=this.options.uncaughtErrorLevel,a._isUncaught=!0,this.client.log(a)}},m.prototype.handleAnonymousErrors=function(){if(this.options.inspectAnonymousErrors&&this.isChrome){var t=this;try{Error.prepareStackTrace=function(e,r){if(t.options.inspectAnonymousErrors&&t.anonymousErrorsPending){if(t.anonymousErrorsPending-=1,!e)return;e._isAnonymous=!0,t.handleUncaughtException(e.message,null,null,null,e)}return e.stack}}catch(t){this.options.inspectAnonymousErrors=!1,this.error(\"anonymous error handler failed\",t)}}},m.prototype.handleUnhandledRejection=function(t,e){if(this.options.captureUnhandledRejections||this.options.handleUnhandledRejections){var r=\"unhandled rejection was null or undefined!\";if(t)if(t.message)r=t.message;else{var n=o.stringify(t);n.value&&(r=n.value)}var i,s=t&&t._rollbarContext||e&&e._rollbarContext;o.isError(t)?i=this._createItem([r,t,s]):(i=this._createItem([r,t,s])).stackInfo=o.makeUnhandledStackInfo(r,\"\",0,0,null,\"unhandledrejection\",\"\",d),i.level=this.options.uncaughtErrorLevel,i._isUncaught=!0,i._originalArgs=i._originalArgs||[],i._originalArgs.push(e),this.client.log(i)}},m.prototype.wrap=function(t,e,r){try{var n;if(n=o.isFunction(e)?e:function(){return e||{}},!o.isFunction(t))return t;if(t._isWrap)return t;if(!t._rollbar_wrapped&&(t._rollbar_wrapped=function(){r&&o.isFunction(r)&&r.apply(this,arguments);try{return t.apply(this,arguments)}catch(r){var e=r;throw e&&window._rollbarWrappedError!==e&&(o.isType(e,\"string\")&&(e=new String(e)),e._rollbarContext=n()||{},e._rollbarContext._wrappedSource=t.toString(),window._rollbarWrappedError=e),e}},t._rollbar_wrapped._isWrap=!0,t.hasOwnProperty))for(var i in t)t.hasOwnProperty(i)&&\"_rollbar_wrapped\"!==i&&(t._rollbar_wrapped[i]=t[i]);return t._rollbar_wrapped}catch(e){return t}},m.wrap=function(t,e){if(g)return g.wrap(t,e);v()},m.prototype.captureEvent=function(){var t=o.createTelemetryEvent(arguments);return this.client.captureEvent(t.type,t.metadata,t.level)},m.captureEvent=function(){if(g)return g.captureEvent.apply(g,arguments);v()},m.prototype.captureDomContentLoaded=function(t,e){return e||(e=new Date),this.client.captureDomContentLoaded(e)},m.prototype.captureLoad=function(t,e){return e||(e=new Date),this.client.captureLoad(e)},m.prototype.loadFull=function(){s.info(\"Unexpected Rollbar.loadFull() called on a Notifier instance. This can happen when Rollbar is loaded multiple times.\")},m.prototype._createItem=function(t){return o.createItem(t,s,this)};var w=r(948),_=r(677),x={version:w.version,scrubFields:_.scrubFields,logLevel:w.logLevel,reportLevel:w.reportLevel,uncaughtErrorLevel:w.uncaughtErrorLevel,endpoint:w.endpoint,verbose:!1,enabled:!0,transmit:!0,sendConfig:!1,includeItemsInTelemetry:!0,captureIp:!0,inspectAnonymousErrors:!0,ignoreDuplicateErrors:!0,wrapGlobalEventHandlers:!1};t.exports=m},677:t=>{\"use strict\";t.exports={scrubFields:[\"pw\",\"pass\",\"passwd\",\"password\",\"secret\",\"confirm_password\",\"confirmPassword\",\"password_confirmation\",\"passwordConfirmation\",\"access_token\",\"accessToken\",\"X-Rollbar-Access-Token\",\"secret_key\",\"secretKey\",\"secretToken\",\"cc-number\",\"card number\",\"cardnumber\",\"cardnum\",\"ccnum\",\"ccnumber\",\"cc num\",\"creditcardnumber\",\"credit card number\",\"newcreditcardnumber\",\"new credit card\",\"creditcardno\",\"credit card no\",\"card#\",\"card #\",\"cc-csc\",\"cvc\",\"cvc2\",\"cvv2\",\"ccv2\",\"security code\",\"card verification\",\"name on credit card\",\"name on card\",\"nameoncard\",\"cardholder\",\"card holder\",\"name des karteninhabers\",\"ccname\",\"card type\",\"cardtype\",\"cc type\",\"cctype\",\"payment type\",\"expiration date\",\"expirationdate\",\"expdate\",\"cc-exp\",\"ccmonth\",\"ccyear\"]}},616:t=>{\"use strict\";var e={ieVersion:function(){var t;if(\"undefined\"==typeof document)return t;for(var e=3,r=document.createElement(\"div\"),n=r.getElementsByTagName(\"i\");r.innerHTML=\"\\x3c!--[if gt IE \"+ ++e+\"]><i></i><![endif]--\\x3e\",n[0];);return e>4?e:t}};t.exports=e},300:t=>{\"use strict\";function e(t){return(t.getAttribute(\"type\")||\"\").toLowerCase()}function r(t){if(!t||!t.tagName)return\"\";var e=[t.tagName];t.id&&e.push(\"#\"+t.id),t.classes&&e.push(\".\"+t.classes.join(\".\"));for(var r=0;r<t.attributes.length;r++)e.push(\"[\"+t.attributes[r].key+'=\"'+t.attributes[r].value+'\"]');return e.join(\"\")}function n(t){if(!t||!t.tagName)return null;var e,r,n,o,i={};i.tagName=t.tagName.toLowerCase(),t.id&&(i.id=t.id),(e=t.className)&&\"string\"==typeof e&&(i.classes=e.split(/\\s+/));var s=[\"type\",\"name\",\"title\",\"alt\"];for(i.attributes=[],o=0;o<s.length;o++)r=s[o],(n=t.getAttribute(r))&&i.attributes.push({key:r,value:n});return i}t.exports={describeElement:n,descriptionToString:r,elementArrayToString:function(t){for(var e,n,o=[],i=0,s=t.length-1;s>=0;s--){if(e=r(t[s]),n=i+3*o.length+e.length,s<t.length-1&&n>=83){o.unshift(\"...\");break}o.unshift(e),i+=e.length}return o.join(\" > \")},treeToArray:function(t){for(var e,r=[],o=0;t&&o<5&&\"html\"!==(e=n(t)).tagName;o++)r.unshift(e),t=t.parentNode;return r},getElementFromEvent:function(t,e){return t.target?t.target:e&&e.elementFromPoint?e.elementFromPoint(t.clientX,t.clientY):void 0},isDescribedElement:function(t,r,n){if(t.tagName.toLowerCase()!==r.toLowerCase())return!1;if(!n)return!0;t=e(t);for(var o=0;o<n.length;o++)if(n[o]===t)return!0;return!1},getElementType:e}},349:t=>{\"use strict\";t.exports={captureUncaughtExceptions:function(t,e,r){if(t){var n;if(\"function\"==typeof e._rollbarOldOnError)n=e._rollbarOldOnError;else if(t.onerror){for(n=t.onerror;n._rollbarOldOnError;)n=n._rollbarOldOnError;e._rollbarOldOnError=n}e.handleAnonymousErrors();var o=function(){var r=Array.prototype.slice.call(arguments,0);!function(t,e,r,n){t._rollbarWrappedError&&(n[4]||(n[4]=t._rollbarWrappedError),n[5]||(n[5]=t._rollbarWrappedError._rollbarContext),t._rollbarWrappedError=null);var o=e.handleUncaughtException.apply(e,n);r&&r.apply(t,n),\"anonymous\"===o&&(e.anonymousErrorsPending+=1)}(t,e,n,r)};r&&(o._rollbarOldOnError=n),t.onerror=o}},captureUnhandledRejections:function(t,e,r){if(t){\"function\"==typeof t._rollbarURH&&t._rollbarURH.belongsToShim&&t.removeEventListener(\"unhandledrejection\",t._rollbarURH);var n=function(t){var r,n,o;try{r=t.reason}catch(t){r=void 0}try{n=t.promise}catch(t){n=\"[unhandledrejection] error getting `promise` from event\"}try{o=t.detail,!r&&o&&(r=o.reason,n=o.promise)}catch(t){}r||(r=\"[unhandledrejection] error getting `reason` from event\"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(r,n)};n.belongsToShim=r,t._rollbarURH=n,t.addEventListener(\"unhandledrejection\",n)}}}},802:(t,e,r)=>{\"use strict\";r(276);var n=r(616),o=r(702);t.exports={error:function(){var t=Array.prototype.slice.call(arguments,0);t.unshift(\"Rollbar:\"),n.ieVersion()<=8?console.error(o.formatArgsAsString(t)):console.error.apply(console,t)},info:function(){var t=Array.prototype.slice.call(arguments,0);t.unshift(\"Rollbar:\"),n.ieVersion()<=8?console.info(o.formatArgsAsString(t)):console.info.apply(console,t)},log:function(){var t=Array.prototype.slice.call(arguments,0);t.unshift(\"Rollbar:\"),n.ieVersion()<=8?console.log(o.formatArgsAsString(t)):console.log.apply(console,t)}}},172:(t,e,r)=>{\"use strict\";var n=r(702);t.exports={checkIgnore:function(t,e){return!n.get(e,\"plugins.jquery.ignoreAjaxErrors\")||!n.get(t,\"body.message.extra.isAjax\")}}},343:(t,e,r)=>{\"use strict\";var n=r(403),o=r(773),i=r(568),s=r(876),a=r(965),u=r(369),c=r(473);n.setComponents({telemeter:o,instrumenter:i,polyfillJSON:s,wrapGlobals:a,scrub:u,truncation:c}),t.exports=n},568:(t,e,r)=>{\"use strict\";var n=r(702),o=r(650),i=r(297),s=r(369),a=r(509),u=r(300),c={network:!0,networkResponseHeaders:!1,networkResponseBody:!1,networkRequestHeaders:!1,networkRequestBody:!1,networkErrorOnHttp5xx:!1,networkErrorOnHttp4xx:!1,networkErrorOnHttp0:!1,log:!0,dom:!0,navigation:!0,connectivity:!0,contentSecurityPolicy:!0,errorOnContentSecurityPolicy:!1};function l(t,e){for(var r;t[e].length;)(r=t[e].shift())[0][r[1]]=r[2]}function p(t,e,r,o,i){this.options=t;var s=t.autoInstrument;!1===t.enabled||!1===s?this.autoInstrument={}:(n.isType(s,\"object\")||(s=c),this.autoInstrument=n.merge(c,s)),this.scrubTelemetryInputs=!!t.scrubTelemetryInputs,this.telemetryScrubber=t.telemetryScrubber,this.defaultValueScrubber=function(t){for(var e=[],r=0;r<t.length;++r)e.push(new RegExp(t[r],\"i\"));return function(t){var r=function(t){if(!t||!t.attributes)return null;for(var e=t.attributes,r=0;r<e.length;++r)if(\"name\"===e[r].key)return e[r].value;return null}(t);if(!r)return!1;for(var n=0;n<e.length;++n)if(e[n].test(r))return!0;return!1}}(t.scrubFields),this.telemeter=e,this.rollbar=r,this.diagnostic=r.client.notifier.diagnostic,this._window=o||{},this._document=i||{},this.replacements={network:[],log:[],navigation:[],connectivity:[]},this.eventRemovers={dom:[],connectivity:[],contentsecuritypolicy:[]},this._location=this._window.location,this._lastHref=this._location&&this._location.href}function h(t){return\"undefined\"!=typeof URL&&t instanceof URL}p.prototype.configure=function(t){this.options=n.merge(this.options,t);var e=t.autoInstrument,r=n.merge(this.autoInstrument);!1===t.enabled||!1===e?this.autoInstrument={}:(n.isType(e,\"object\")||(e=c),this.autoInstrument=n.merge(c,e)),this.instrument(r),void 0!==t.scrubTelemetryInputs&&(this.scrubTelemetryInputs=!!t.scrubTelemetryInputs),void 0!==t.telemetryScrubber&&(this.telemetryScrubber=t.telemetryScrubber)},p.prototype.instrument=function(t){!this.autoInstrument.network||t&&t.network?!this.autoInstrument.network&&t&&t.network&&this.deinstrumentNetwork():this.instrumentNetwork(),!this.autoInstrument.log||t&&t.log?!this.autoInstrument.log&&t&&t.log&&this.deinstrumentConsole():this.instrumentConsole(),!this.autoInstrument.dom||t&&t.dom?!this.autoInstrument.dom&&t&&t.dom&&this.deinstrumentDom():this.instrumentDom(),!this.autoInstrument.navigation||t&&t.navigation?!this.autoInstrument.navigation&&t&&t.navigation&&this.deinstrumentNavigation():this.instrumentNavigation(),!this.autoInstrument.connectivity||t&&t.connectivity?!this.autoInstrument.connectivity&&t&&t.connectivity&&this.deinstrumentConnectivity():this.instrumentConnectivity(),!this.autoInstrument.contentSecurityPolicy||t&&t.contentSecurityPolicy?!this.autoInstrument.contentSecurityPolicy&&t&&t.contentSecurityPolicy&&this.deinstrumentContentSecurityPolicy():this.instrumentContentSecurityPolicy()},p.prototype.deinstrumentNetwork=function(){l(this.replacements,\"network\")},p.prototype.instrumentNetwork=function(){var t=this;function e(e,r){e in r&&n.isFunction(r[e])&&i(r,e,(function(e){return t.rollbar.wrap(e)}))}if(\"XMLHttpRequest\"in this._window){var r=this._window.XMLHttpRequest.prototype;i(r,\"open\",(function(t){return function(e,r){var o=h(r);return(n.isType(r,\"string\")||o)&&(r=o?r.toString():r,this.__rollbar_xhr?(this.__rollbar_xhr.method=e,this.__rollbar_xhr.url=r,this.__rollbar_xhr.status_code=null,this.__rollbar_xhr.start_time_ms=n.now(),this.__rollbar_xhr.end_time_ms=null):this.__rollbar_xhr={method:e,url:r,status_code:null,start_time_ms:n.now(),end_time_ms:null}),t.apply(this,arguments)}}),this.replacements,\"network\"),i(r,\"setRequestHeader\",(function(e){return function(r,o){return this.__rollbar_xhr||(this.__rollbar_xhr={}),n.isType(r,\"string\")&&n.isType(o,\"string\")&&(t.autoInstrument.networkRequestHeaders&&(this.__rollbar_xhr.request_headers||(this.__rollbar_xhr.request_headers={}),this.__rollbar_xhr.request_headers[r]=o),\"content-type\"===r.toLowerCase()&&(this.__rollbar_xhr.request_content_type=o)),e.apply(this,arguments)}}),this.replacements,\"network\"),i(r,\"send\",(function(r){return function(o){var s=this;function a(){if(s.__rollbar_xhr&&(null===s.__rollbar_xhr.status_code&&(s.__rollbar_xhr.status_code=0,t.autoInstrument.networkRequestBody&&(s.__rollbar_xhr.request=o),s.__rollbar_event=t.captureNetwork(s.__rollbar_xhr,\"xhr\",void 0)),s.readyState<2&&(s.__rollbar_xhr.start_time_ms=n.now()),s.readyState>3)){s.__rollbar_xhr.end_time_ms=n.now();var e=null;if(s.__rollbar_xhr.response_content_type=s.getResponseHeader(\"Content-Type\"),t.autoInstrument.networkResponseHeaders){var r=t.autoInstrument.networkResponseHeaders;e={};try{var i,a;if(!0===r){var u=s.getAllResponseHeaders();if(u){var c,l,p=u.trim().split(/[\\r\\n]+/);for(a=0;a<p.length;a++)i=(c=p[a].split(\": \")).shift(),l=c.join(\": \"),e[i]=l}}else for(a=0;a<r.length;a++)e[i=r[a]]=s.getResponseHeader(i)}catch(t){}}var h=null;if(t.autoInstrument.networkResponseBody)try{h=s.responseText}catch(t){}var f=null;(h||e)&&(f={},h&&(t.isJsonContentType(s.__rollbar_xhr.response_content_type)?f.body=t.scrubJson(h):f.body=h),e&&(f.headers=e)),f&&(s.__rollbar_xhr.response=f);try{var d=s.status;d=1223===d?204:d,s.__rollbar_xhr.status_code=d,s.__rollbar_event.level=t.telemeter.levelFromStatus(d),t.errorOnHttpStatus(s.__rollbar_xhr)}catch(t){}}}return e(\"onload\",s),e(\"onerror\",s),e(\"onprogress\",s),\"onreadystatechange\"in s&&n.isFunction(s.onreadystatechange)?i(s,\"onreadystatechange\",(function(e){return t.rollbar.wrap(e,void 0,a)})):s.onreadystatechange=a,s.__rollbar_xhr&&t.trackHttpErrors()&&(s.__rollbar_xhr.stack=(new Error).stack),r.apply(this,arguments)}}),this.replacements,\"network\")}\"fetch\"in this._window&&i(this._window,\"fetch\",(function(e){return function(r,i){for(var s=new Array(arguments.length),a=0,u=s.length;a<u;a++)s[a]=arguments[a];var c,l=s[0],p=\"GET\",f=h(l);n.isType(l,\"string\")||f?c=f?l.toString():l:l&&(c=l.url,l.method&&(p=l.method)),s[1]&&s[1].method&&(p=s[1].method);var d={method:p,url:c,status_code:null,start_time_ms:n.now(),end_time_ms:null};if(s[1]&&s[1].headers){var m=o(s[1].headers);d.request_content_type=m.get(\"Content-Type\"),t.autoInstrument.networkRequestHeaders&&(d.request_headers=t.fetchHeaders(m,t.autoInstrument.networkRequestHeaders))}return t.autoInstrument.networkRequestBody&&(s[1]&&s[1].body?d.request=s[1].body:s[0]&&!n.isType(s[0],\"string\")&&s[0].body&&(d.request=s[0].body)),t.captureNetwork(d,\"fetch\",void 0),t.trackHttpErrors()&&(d.stack=(new Error).stack),e.apply(this,s).then((function(e){d.end_time_ms=n.now(),d.status_code=e.status,d.response_content_type=e.headers.get(\"Content-Type\");var r=null;t.autoInstrument.networkResponseHeaders&&(r=t.fetchHeaders(e.headers,t.autoInstrument.networkResponseHeaders));var o=null;return t.autoInstrument.networkResponseBody&&\"function\"==typeof e.text&&(o=e.clone().text()),(r||o)&&(d.response={},o&&(\"function\"==typeof o.then?o.then((function(e){e&&t.isJsonContentType(d.response_content_type)?d.response.body=t.scrubJson(e):d.response.body=e})):d.response.body=o),r&&(d.response.headers=r)),t.errorOnHttpStatus(d),e}))}}),this.replacements,\"network\")},p.prototype.captureNetwork=function(t,e,r){return t.request&&this.isJsonContentType(t.request_content_type)&&(t.request=this.scrubJson(t.request)),this.telemeter.captureNetwork(t,e,r)},p.prototype.isJsonContentType=function(t){return!!(t&&n.isType(t,\"string\")&&t.toLowerCase().includes(\"json\"))},p.prototype.scrubJson=function(t){return JSON.stringify(s(JSON.parse(t),this.options.scrubFields))},p.prototype.fetchHeaders=function(t,e){var r={};try{var n;if(!0===e){if(\"function\"==typeof t.entries)for(var o=t.entries(),i=o.next();!i.done;)r[i.value[0]]=i.value[1],i=o.next()}else for(n=0;n<e.length;n++){var s=e[n];r[s]=t.get(s)}}catch(t){}return r},p.prototype.trackHttpErrors=function(){return this.autoInstrument.networkErrorOnHttp5xx||this.autoInstrument.networkErrorOnHttp4xx||this.autoInstrument.networkErrorOnHttp0},p.prototype.errorOnHttpStatus=function(t){var e=t.status_code;if(e>=500&&this.autoInstrument.networkErrorOnHttp5xx||e>=400&&this.autoInstrument.networkErrorOnHttp4xx||0===e&&this.autoInstrument.networkErrorOnHttp0){var r=new Error(\"HTTP request failed with Status \"+e);r.stack=t.stack,this.rollbar.error(r,{skipFrames:1})}},p.prototype.deinstrumentConsole=function(){if(\"console\"in this._window&&this._window.console.log)for(var t;this.replacements.log.length;)t=this.replacements.log.shift(),this._window.console[t[0]]=t[1]},p.prototype.instrumentConsole=function(){if(\"console\"in this._window&&this._window.console.log){var t=this,e=this._window.console,r=[\"debug\",\"info\",\"warn\",\"error\",\"log\"];try{for(var o=0,i=r.length;o<i;o++)s(r[o])}catch(t){this.diagnostic.instrumentConsole={error:t.message}}}function s(r){var o=e[r],i=e,s=\"warn\"===r?\"warning\":r;e[r]=function(){var e=Array.prototype.slice.call(arguments),r=n.formatArgsAsString(e);t.telemeter.captureLog(r,s),o&&Function.prototype.apply.call(o,i,e)},t.replacements.log.push([r,o])}},p.prototype.deinstrumentDom=function(){(\"addEventListener\"in this._window||\"attachEvent\"in this._window)&&this.removeListeners(\"dom\")},p.prototype.instrumentDom=function(){if(\"addEventListener\"in this._window||\"attachEvent\"in this._window){var t=this.handleClick.bind(this),e=this.handleBlur.bind(this);this.addListener(\"dom\",this._window,\"click\",\"onclick\",t,!0),this.addListener(\"dom\",this._window,\"blur\",\"onfocusout\",e,!0)}},p.prototype.handleClick=function(t){try{var e=u.getElementFromEvent(t,this._document),r=e&&e.tagName,n=u.isDescribedElement(e,\"a\")||u.isDescribedElement(e,\"button\");r&&(n||u.isDescribedElement(e,\"input\",[\"button\",\"submit\"]))?this.captureDomEvent(\"click\",e):u.isDescribedElement(e,\"input\",[\"checkbox\",\"radio\"])&&this.captureDomEvent(\"input\",e,e.value,e.checked)}catch(t){}},p.prototype.handleBlur=function(t){try{var e=u.getElementFromEvent(t,this._document);e&&e.tagName&&(u.isDescribedElement(e,\"textarea\")?this.captureDomEvent(\"input\",e,e.value):u.isDescribedElement(e,\"select\")&&e.options&&e.options.length?this.handleSelectInputChanged(e):u.isDescribedElement(e,\"input\")&&!u.isDescribedElement(e,\"input\",[\"button\",\"submit\",\"hidden\",\"checkbox\",\"radio\"])&&this.captureDomEvent(\"input\",e,e.value))}catch(t){}},p.prototype.handleSelectInputChanged=function(t){if(t.multiple)for(var e=0;e<t.options.length;e++)t.options[e].selected&&this.captureDomEvent(\"input\",t,t.options[e].value);else t.selectedIndex>=0&&t.options[t.selectedIndex]&&this.captureDomEvent(\"input\",t,t.options[t.selectedIndex].value)},p.prototype.captureDomEvent=function(t,e,r,n){if(void 0!==r)if(this.scrubTelemetryInputs||\"password\"===u.getElementType(e))r=\"[scrubbed]\";else{var o=u.describeElement(e);this.telemetryScrubber?this.telemetryScrubber(o)&&(r=\"[scrubbed]\"):this.defaultValueScrubber(o)&&(r=\"[scrubbed]\")}var i=u.elementArrayToString(u.treeToArray(e));this.telemeter.captureDom(t,i,r,n)},p.prototype.deinstrumentNavigation=function(){var t=this._window.chrome;!(t&&t.app&&t.app.runtime)&&this._window.history&&this._window.history.pushState&&l(this.replacements,\"navigation\")},p.prototype.instrumentNavigation=function(){var t=this._window.chrome;if(!(t&&t.app&&t.app.runtime)&&this._window.history&&this._window.history.pushState){var e=this;i(this._window,\"onpopstate\",(function(t){return function(){var r=e._location.href;e.handleUrlChange(e._lastHref,r),t&&t.apply(this,arguments)}}),this.replacements,\"navigation\"),i(this._window.history,\"pushState\",(function(t){return function(){var r=arguments.length>2?arguments[2]:void 0;return r&&e.handleUrlChange(e._lastHref,r+\"\"),t.apply(this,arguments)}}),this.replacements,\"navigation\")}},p.prototype.handleUrlChange=function(t,e){var r=a.parse(this._location.href),n=a.parse(e),o=a.parse(t);this._lastHref=e,r.protocol===n.protocol&&r.host===n.host&&(e=n.path+(n.hash||\"\")),r.protocol===o.protocol&&r.host===o.host&&(t=o.path+(o.hash||\"\")),this.telemeter.captureNavigation(t,e)},p.prototype.deinstrumentConnectivity=function(){(\"addEventListener\"in this._window||\"body\"in this._document)&&(this._window.addEventListener?this.removeListeners(\"connectivity\"):l(this.replacements,\"connectivity\"))},p.prototype.instrumentConnectivity=function(){if(\"addEventListener\"in this._window||\"body\"in this._document)if(this._window.addEventListener)this.addListener(\"connectivity\",this._window,\"online\",void 0,function(){this.telemeter.captureConnectivityChange(\"online\")}.bind(this),!0),this.addListener(\"connectivity\",this._window,\"offline\",void 0,function(){this.telemeter.captureConnectivityChange(\"offline\")}.bind(this),!0);else{var t=this;i(this._document.body,\"ononline\",(function(e){return function(){t.telemeter.captureConnectivityChange(\"online\"),e&&e.apply(this,arguments)}}),this.replacements,\"connectivity\"),i(this._document.body,\"onoffline\",(function(e){return function(){t.telemeter.captureConnectivityChange(\"offline\"),e&&e.apply(this,arguments)}}),this.replacements,\"connectivity\")}},p.prototype.handleCspEvent=function(t){var e=\"Security Policy Violation: blockedURI: \"+t.blockedURI+\", violatedDirective: \"+t.violatedDirective+\", effectiveDirective: \"+t.effectiveDirective+\", \";t.sourceFile&&(e+=\"location: \"+t.sourceFile+\", line: \"+t.lineNumber+\", col: \"+t.columnNumber+\", \"),e+=\"originalPolicy: \"+t.originalPolicy,this.telemeter.captureLog(e,\"error\"),this.handleCspError(e)},p.prototype.handleCspError=function(t){this.autoInstrument.errorOnContentSecurityPolicy&&this.rollbar.error(t)},p.prototype.deinstrumentContentSecurityPolicy=function(){\"addEventListener\"in this._document&&this.removeListeners(\"contentsecuritypolicy\")},p.prototype.instrumentContentSecurityPolicy=function(){if(\"addEventListener\"in this._document){var t=this.handleCspEvent.bind(this);this.addListener(\"contentsecuritypolicy\",this._document,\"securitypolicyviolation\",null,t,!1)}},p.prototype.addListener=function(t,e,r,n,o,i){e.addEventListener?(e.addEventListener(r,o,i),this.eventRemovers[t].push((function(){e.removeEventListener(r,o,i)}))):n&&(e.attachEvent(n,o),this.eventRemovers[t].push((function(){e.detachEvent(n,o)})))},p.prototype.removeListeners=function(t){for(;this.eventRemovers[t].length;)this.eventRemovers[t].shift()()},t.exports=p},860:(t,e,r)=>{\"use strict\";var n=r(702),o=r(303),i=r(802);function s(t,e,r){var o=t.message,i=t.custom;o||(o=\"Item sent with null or missing arguments.\");var s={body:o};i&&(s.extra=n.merge(i)),n.set(t,\"data.body\",{message:s}),r(null,t)}function a(t){var e=t.stackInfo.stack;return e&&0===e.length&&t._unhandledStackInfo&&t._unhandledStackInfo.stack&&(e=t._unhandledStackInfo.stack),e}function u(t,e,r){var i=t&&t.data.description,s=t&&t.custom,u=a(t),l=o.guessErrorClass(e.message),p={exception:{class:c(e,l[0],r),message:l[1]}};if(i&&(p.exception.description=i),u){var h,f,d,m,g,v,y,b;for(0===u.length&&(p.exception.stack=e.rawStack,p.exception.raw=String(e.rawException)),p.frames=[],y=0;y<u.length;++y)f={filename:(h=u[y]).url?n.sanitizeUrl(h.url):\"(unknown)\",lineno:h.line||null,method:h.func&&\"?\"!==h.func?h.func:\"[anonymous]\",colno:h.column},r.sendFrameUrl&&(f.url=h.url),f.method&&f.method.endsWith&&f.method.endsWith(\"_rollbar_wrapped\")||(d=m=g=null,(v=h.context?h.context.length:0)&&(b=Math.floor(v/2),m=h.context.slice(0,b),d=h.context[b],g=h.context.slice(b)),d&&(f.code=d),(m||g)&&(f.context={},m&&m.length&&(f.context.pre=m),g&&g.length&&(f.context.post=g)),h.args&&(f.args=h.args),p.frames.push(f));p.frames.reverse(),s&&(p.extra=n.merge(s))}return p}function c(t,e,r){return t.name?t.name:r.guessErrorClass?e:\"(unknown)\"}t.exports={handleDomException:function(t,e,r){if(t.err&&\"DOMException\"===o.Stack(t.err).name){var n=new Error;n.name=t.err.name,n.message=t.err.message,n.stack=t.err.stack,n.nested=t.err,t.err=n}r(null,t)},handleItemWithError:function(t,e,r){if(t.data=t.data||{},t.err)try{t.stackInfo=t.err._savedStackTrace||o.parse(t.err,t.skipFrames),e.addErrorContext&&function(t){var e=[],r=t.err;for(e.push(r);r.nested||r.cause;)r=r.nested||r.cause,e.push(r);n.addErrorContext(t,e)}(t)}catch(e){i.error(\"Error while parsing the error object.\",e);try{t.message=t.err.message||t.err.description||t.message||String(t.err)}catch(e){t.message=String(t.err)||String(e)}delete t.err}r(null,t)},ensureItemHasSomethingToSay:function(t,e,r){t.message||t.stackInfo||t.custom||r(new Error(\"No message, stack info, or custom data\"),null),r(null,t)},addBaseInfo:function(t,e,r){var o=e.payload&&e.payload.environment||e.environment;t.data=n.merge(t.data,{environment:o,level:t.level,endpoint:e.endpoint,platform:\"browser\",framework:\"browser-js\",language:\"javascript\",server:{},uuid:t.uuid,notifier:{name:\"rollbar-browser-js\",version:e.version},custom:t.custom}),r(null,t)},addRequestInfo:function(t){return function(e,r,o){var i={};t&&t.location&&(i.url=t.location.href,i.query_string=t.location.search);var s=\"$remote_ip\";r.captureIp?!0!==r.captureIp&&(s+=\"_anonymize\"):s=null,s&&(i.user_ip=s),Object.keys(i).length>0&&n.set(e,\"data.request\",i),o(null,e)}},addClientInfo:function(t){return function(e,r,o){if(!t)return o(null,e);var i=t.navigator||{},s=t.screen||{};n.set(e,\"data.client\",{runtime_ms:e.timestamp-t._rollbarStartTime,timestamp:Math.round(e.timestamp/1e3),javascript:{browser:i.userAgent,language:i.language,cookie_enabled:i.cookieEnabled,screen:{width:s.width,height:s.height}}}),o(null,e)}},addPluginInfo:function(t){return function(e,r,o){if(!t||!t.navigator)return o(null,e);for(var i,s=[],a=t.navigator.plugins||[],u=0,c=a.length;u<c;++u)i=a[u],s.push({name:i.name,description:i.description});n.set(e,\"data.client.javascript.plugins\",s),o(null,e)}},addBody:function(t,e,r){t.stackInfo?t.stackInfo.traceChain?function(t,e,r){for(var o=t.stackInfo.traceChain,i=[],s=o.length,a=0;a<s;a++){var c=u(t,o[a],e);i.push(c)}n.set(t,\"data.body\",{trace_chain:i}),r(null,t)}(t,e,r):function(t,e,r){var i=a(t);if(i){var l=u(t,t.stackInfo,e);n.set(t,\"data.body\",{trace:l}),r(null,t)}else{var p=t.stackInfo,h=o.guessErrorClass(p.message),f=c(p,h[0],e),d=h[1];t.message=f+\": \"+d,s(t,0,r)}}(t,e,r):s(t,0,r)},addScrubber:function(t){return function(e,r,n){if(t){var o=r.scrubFields||[],i=r.scrubPaths||[];e.data=t(e.data,o,i)}n(null,e)}}}},477:(t,e,r)=>{\"use strict\";var n=r(702),o=r(656),i=r(86);function s(t){this.truncation=t}s.prototype.get=function(t,e,r,o,i){o&&n.isFunction(o)||(o=function(){}),n.addParamsAndAccessTokenToPath(t,e,r);var s=n.formatUrl(e);this._makeZoneRequest(t,s,\"GET\",null,o,i,e.timeout,e.transport)},s.prototype.post=function(t,e,r,o,i){if(o&&n.isFunction(o)||(o=function(){}),!r)return o(new Error(\"Cannot send empty request\"));var s;if((s=this.truncation?this.truncation.truncate(r):n.stringify(r)).error)return o(s.error);var a=s.value,u=n.formatUrl(e);this._makeZoneRequest(t,u,\"POST\",a,o,i,e.timeout,e.transport)},s.prototype.postJsonPayload=function(t,e,r,o,i){o&&n.isFunction(o)||(o=function(){});var s=n.formatUrl(e);this._makeZoneRequest(t,s,\"POST\",r,o,i,e.timeout,e.transport)},s.prototype._makeZoneRequest=function(){var t=\"undefined\"!=typeof window&&window||void 0!==o&&o,e=t&&t.Zone&&t.Zone.current,r=Array.prototype.slice.call(arguments);if(e&&\"angular\"===e._name){var n=e._parent,o=this;n.run((function(){o._makeRequest.apply(void 0,r)}))}else this._makeRequest.apply(void 0,r)},s.prototype._makeRequest=function(t,e,r,n,s,a,u,c){if(\"undefined\"!=typeof RollbarProxy)return function(t,e){(new RollbarProxy).sendJsonPayload(t,(function(t){}),(function(t){e(new Error(t))}))}(n,s);\"fetch\"===c?o(t,e,r,n,s,u):i(t,e,r,n,s,a,u)},t.exports=s},656:(t,e,r)=>{\"use strict\";var n=r(802),o=r(702);t.exports=function(t,e,r,i,s,a){var u,c;o.isFiniteNumber(a)&&(u=new AbortController,c=setTimeout((function(){u.abort()}),a)),fetch(e,{method:r,headers:{\"Content-Type\":\"application/json\",\"X-Rollbar-Access-Token\":t,signal:u&&u.signal},body:i}).then((function(t){return c&&clearTimeout(c),t.json()})).then((function(t){s(null,t)})).catch((function(t){n.error(t.message),s(t)}))}},86:(t,e,r)=>{\"use strict\";var n=r(702),o=r(802);function i(t,e){var r=new Error(t);return r.code=e||\"ENOTFOUND\",r}t.exports=function(t,e,r,s,a,u,c){var l;if(!(l=u?u():function(){var t,e,r=[function(){return new XMLHttpRequest},function(){return new ActiveXObject(\"Msxml2.XMLHTTP\")},function(){return new ActiveXObject(\"Msxml3.XMLHTTP\")},function(){return new ActiveXObject(\"Microsoft.XMLHTTP\")}],n=r.length;for(e=0;e<n;e++)try{t=r[e]();break}catch(t){}return t}()))return a(new Error(\"No way to send a request\"));try{try{var p=function(){try{if(p&&4===l.readyState){p=void 0;var t=n.jsonParse(l.responseText);if((s=l)&&s.status&&200===s.status)return void a(t.error,t.value);if(function(t){return t&&n.isType(t.status,\"number\")&&t.status>=400&&t.status<600}(l)){if(403===l.status){var e=t.value&&t.value.message;o.error(e)}a(new Error(String(l.status)))}else a(i(\"XHR response had no status code (likely connection failure)\"))}}catch(t){var r;r=t&&t.stack?t:new Error(t),a(r)}var s};l.open(r,e,!0),l.setRequestHeader&&(l.setRequestHeader(\"Content-Type\",\"application/json\"),l.setRequestHeader(\"X-Rollbar-Access-Token\",t)),n.isFiniteNumber(c)&&(l.timeout=c),l.onreadystatechange=p,l.send(s)}catch(t){if(\"undefined\"!=typeof XDomainRequest){if(!window||!window.location)return a(new Error(\"No window available during request, unknown environment\"));\"http:\"===window.location.href.substring(0,5)&&\"https\"===e.substring(0,5)&&(e=\"http\"+e.substring(5));var h=new XDomainRequest;h.onprogress=function(){},h.ontimeout=function(){a(i(\"Request timed out\",\"ETIMEDOUT\"))},h.onerror=function(){a(new Error(\"Error during request\"))},h.onload=function(){var t=n.jsonParse(h.responseText);a(t.error,t.value)},h.open(r,e,!0),h.send(s)}else a(new Error(\"Cannot find a method to transport a request\"))}}catch(t){a(t)}}},509:t=>{\"use strict\";t.exports={parse:function(t){var e,r,n={protocol:null,auth:null,host:null,path:null,hash:null,href:t,hostname:null,port:null,pathname:null,search:null,query:null};if(-1!==(e=t.indexOf(\"//\"))?(n.protocol=t.substring(0,e),r=e+2):r=0,-1!==(e=t.indexOf(\"@\",r))&&(n.auth=t.substring(r,e),r=e+1),-1===(e=t.indexOf(\"/\",r))){if(-1===(e=t.indexOf(\"?\",r)))return-1===(e=t.indexOf(\"#\",r))?n.host=t.substring(r):(n.host=t.substring(r,e),n.hash=t.substring(e)),n.hostname=n.host.split(\":\")[0],n.port=n.host.split(\":\")[1],n.port&&(n.port=parseInt(n.port,10)),n;n.host=t.substring(r,e),n.hostname=n.host.split(\":\")[0],n.port=n.host.split(\":\")[1],n.port&&(n.port=parseInt(n.port,10)),r=e}else n.host=t.substring(r,e),n.hostname=n.host.split(\":\")[0],n.port=n.host.split(\":\")[1],n.port&&(n.port=parseInt(n.port,10)),r=e;if(-1===(e=t.indexOf(\"#\",r))?n.path=t.substring(r):(n.path=t.substring(r,e),n.hash=t.substring(e)),n.path){var o=n.path.split(\"?\");n.pathname=o[0],n.query=o[1],n.search=n.query?\"?\"+n.query:null}return n}}},965:t=>{\"use strict\";function e(t,e,r){if(e.hasOwnProperty&&e.hasOwnProperty(\"addEventListener\")){for(var n=e.addEventListener;n._rollbarOldAdd&&n.belongsToShim;)n=n._rollbarOldAdd;var o=function(e,r,o){n.call(this,e,t.wrap(r),o)};o._rollbarOldAdd=n,o.belongsToShim=r,e.addEventListener=o;for(var i=e.removeEventListener;i._rollbarOldRemove&&i.belongsToShim;)i=i._rollbarOldRemove;var s=function(t,e,r){i.call(this,t,e&&e._rollbar_wrapped||e,r)};s._rollbarOldRemove=i,s.belongsToShim=r,e.removeEventListener=s}}t.exports=function(t,r,n){if(t){var o,i,s=\"EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload\".split(\",\");for(o=0;o<s.length;++o)t[i=s[o]]&&t[i].prototype&&e(r,t[i].prototype,n)}}},948:t=>{\"use strict\";t.exports={version:\"2.26.4\",endpoint:\"api.rollbar.com/api/1/item/\",logLevel:\"debug\",reportLevel:\"debug\",uncaughtErrorLevel:\"error\",maxItems:0,itemsPerMin:60}},303:(t,e,r)=>{\"use strict\";var n=r(180),o=new RegExp(\"^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): \");function i(){return null}function s(t){var e={};return e._stackFrame=t,e.url=t.fileName,e.line=t.lineNumber,e.func=t.functionName,e.column=t.columnNumber,e.args=t.args,e.context=null,e}function a(t,e){return{stack:function(){var r=[];e=e||0;try{r=n.parse(t)}catch(t){r=[]}for(var o=[],i=e;i<r.length;i++)o.push(new s(r[i]));return o}(),message:t.message,name:(r=t,o=r.name&&r.name.length&&r.name,i=r.constructor.name&&r.constructor.name.length&&r.constructor.name,o&&i?\"Error\"===o?i:o:o||i),rawStack:t.stack,rawException:t};var r,o,i}t.exports={guessFunctionName:function(){return\"?\"},guessErrorClass:function(t){if(!t||!t.match)return[\"Unknown error. There was no error message to display.\",\"\"];var e=t.match(o),r=\"(unknown)\";return e&&(r=e[e.length-1],t=(t=t.replace((e[e.length-2]||\"\")+r+\":\",\"\")).replace(/(^[\\s]+|[\\s]+$)/g,\"\")),[r,t]},gatherContext:i,parse:function(t,e){var r=t;if(r.nested||r.cause){for(var n=[];r;)n.push(new a(r,e)),r=r.nested||r.cause,e=0;return n[0].traceChain=n,n[0]}return new a(r,e)},Stack:a,Frame:s}},420:t=>{\"use strict\";var e=Object.prototype.hasOwnProperty,r=Object.prototype.toString,n=function(t){if(!t||\"[object Object]\"!==r.call(t))return!1;var n,o=e.call(t,\"constructor\"),i=t.constructor&&t.constructor.prototype&&e.call(t.constructor.prototype,\"isPrototypeOf\");if(t.constructor&&!o&&!i)return!1;for(n in t);return void 0===n||e.call(t,n)};t.exports=function t(){var e,r,o,i,s,a={},u=null,c=arguments.length;for(e=0;e<c;e++)if(null!=(u=arguments[e]))for(s in u)r=a[s],a!==(o=u[s])&&(o&&n(o)?(i=r&&n(r)?r:{},a[s]=t(i,o)):void 0!==o&&(a[s]=o));return a}},314:(t,e,r)=>{\"use strict\";var n=r(702);function o(t,e){this.queue=t,this.options=e,this.transforms=[],this.diagnostic={}}o.prototype.configure=function(t){this.queue&&this.queue.configure(t);var e=this.options;return this.options=n.merge(e,t),this},o.prototype.addTransform=function(t){return n.isFunction(t)&&this.transforms.push(t),this},o.prototype.log=function(t,e){if(e&&n.isFunction(e)||(e=function(){}),!this.options.enabled)return e(new Error(\"Rollbar is not enabled\"));this.queue.addPendingItem(t);var r=t.err;this._applyTransforms(t,function(n,o){if(n)return this.queue.removePendingItem(t),e(n,null);this.queue.addItem(o,e,r,t)}.bind(this))},o.prototype._applyTransforms=function(t,e){var r=-1,n=this.transforms.length,o=this.transforms,i=this.options,s=function(t,a){t?e(t,null):++r!==n?o[r](a,i,s):e(null,a)};s(null,t)},t.exports=o},61:(t,e,r)=>{\"use strict\";var n=r(702);function o(t,e,r){if(!t)return!r;var o,i,s=t.frames;if(!s||0===s.length)return!r;for(var a=e.length,u=s.length,c=0;c<u;c++){if(o=s[c].filename,!n.isType(o,\"string\"))return!r;for(var l=0;l<a;l++)if(i=e[l],new RegExp(i).test(o))return!0}return!1}function i(t,e,r,i){var s,a,u=!1;\"blocklist\"===r&&(u=!0);try{if(s=u?e.hostBlockList:e.hostSafeList,a=n.get(t,\"body.trace_chain\")||[n.get(t,\"body.trace\")],!s||0===s.length)return!u;if(0===a.length||!a[0])return!u;for(var c=a.length,l=0;l<c;l++)if(o(a[l],s,u))return!0}catch(t){u?e.hostBlockList=null:e.hostSafeList=null;var p=u?\"hostBlockList\":\"hostSafeList\";return i.error(\"Error while reading your configuration's \"+p+\" option. Removing custom \"+p+\".\",t),!u}return!1}t.exports={checkLevel:function(t,e){var r=t.level,o=n.LEVELS[r]||0,i=e.reportLevel;return!(o<(n.LEVELS[i]||0))},userCheckIgnore:function(t){return function(e,r){var o=!!e._isUncaught;delete e._isUncaught;var i=e._originalArgs;delete e._originalArgs;try{n.isFunction(r.onSendCallback)&&r.onSendCallback(o,i,e)}catch(e){r.onSendCallback=null,t.error(\"Error while calling onSendCallback, removing\",e)}try{if(n.isFunction(r.checkIgnore)&&r.checkIgnore(o,i,e))return!1}catch(e){r.checkIgnore=null,t.error(\"Error while calling custom checkIgnore(), removing\",e)}return!0}},urlIsNotBlockListed:function(t){return function(e,r){return!i(e,r,\"blocklist\",t)}},urlIsSafeListed:function(t){return function(e,r){return i(e,r,\"safelist\",t)}},messageIsIgnored:function(t){return function(e,r){var o,i,s,a,u,c;try{if(!(s=r.ignoredMessages)||0===s.length)return!0;if(c=function(t){var e=t.body,r=[];if(e.trace_chain)for(var o=e.trace_chain,i=0;i<o.length;i++){var s=o[i];r.push(n.get(s,\"exception.message\"))}return e.trace&&r.push(n.get(e,\"trace.exception.message\")),e.message&&r.push(n.get(e,\"message.body\")),r}(e),0===c.length)return!0;for(a=s.length,o=0;o<a;o++)for(u=new RegExp(s[o],\"gi\"),i=0;i<c.length;i++)if(u.test(c[i]))return!1}catch(e){r.ignoredMessages=null,t.error(\"Error while reading your configuration's ignoredMessages option. Removing custom ignoredMessages.\")}return!0}}}},358:(t,e,r)=>{\"use strict\";var n=r(702);function o(t,e,r,n){this.rateLimiter=t,this.api=e,this.logger=r,this.options=n,this.predicates=[],this.pendingItems=[],this.pendingRequests=[],this.retryQueue=[],this.retryHandle=null,this.waitCallback=null,this.waitIntervalID=null}o.prototype.configure=function(t){this.api&&this.api.configure(t);var e=this.options;return this.options=n.merge(e,t),this},o.prototype.addPredicate=function(t){return n.isFunction(t)&&this.predicates.push(t),this},o.prototype.addPendingItem=function(t){this.pendingItems.push(t)},o.prototype.removePendingItem=function(t){var e=this.pendingItems.indexOf(t);-1!==e&&this.pendingItems.splice(e,1)},o.prototype.addItem=function(t,e,r,o){e&&n.isFunction(e)||(e=function(){});var i=this._applyPredicates(t);if(i.stop)return this.removePendingItem(o),void e(i.err);if(this._maybeLog(t,r),this.removePendingItem(o),this.options.transmit){this.pendingRequests.push(t);try{this._makeApiRequest(t,function(r,n){this._dequeuePendingRequest(t),e(r,n)}.bind(this))}catch(r){this._dequeuePendingRequest(t),e(r)}}else e(new Error(\"Transmit disabled\"))},o.prototype.wait=function(t){n.isFunction(t)&&(this.waitCallback=t,this._maybeCallWait()||(this.waitIntervalID&&(this.waitIntervalID=clearInterval(this.waitIntervalID)),this.waitIntervalID=setInterval(function(){this._maybeCallWait()}.bind(this),500)))},o.prototype._applyPredicates=function(t){for(var e=null,r=0,n=this.predicates.length;r<n;r++)if(!(e=this.predicates[r](t,this.options))||void 0!==e.err)return{stop:!0,err:e.err};return{stop:!1,err:null}},o.prototype._makeApiRequest=function(t,e){var r=this.rateLimiter.shouldSend(t);r.shouldSend?this.api.postItem(t,function(r,n){r?this._maybeRetry(r,t,e):e(r,n)}.bind(this)):r.error?e(r.error):this.api.postItem(r.payload,e)};var i=[\"ECONNRESET\",\"ENOTFOUND\",\"ESOCKETTIMEDOUT\",\"ETIMEDOUT\",\"ECONNREFUSED\",\"EHOSTUNREACH\",\"EPIPE\",\"EAI_AGAIN\"];o.prototype._maybeRetry=function(t,e,r){var o=!1;if(this.options.retryInterval){for(var s=0,a=i.length;s<a;s++)if(t.code===i[s]){o=!0;break}o&&n.isFiniteNumber(this.options.maxRetries)&&(e.retries=e.retries?e.retries+1:1,e.retries>this.options.maxRetries&&(o=!1))}o?this._retryApiRequest(e,r):r(t)},o.prototype._retryApiRequest=function(t,e){this.retryQueue.push({item:t,callback:e}),this.retryHandle||(this.retryHandle=setInterval(function(){for(;this.retryQueue.length;){var t=this.retryQueue.shift();this._makeApiRequest(t.item,t.callback)}}.bind(this),this.options.retryInterval))},o.prototype._dequeuePendingRequest=function(t){var e=this.pendingRequests.indexOf(t);-1!==e&&(this.pendingRequests.splice(e,1),this._maybeCallWait())},o.prototype._maybeLog=function(t,e){if(this.logger&&this.options.verbose){var r=e;if(r=(r=r||n.get(t,\"body.trace.exception.message\"))||n.get(t,\"body.trace_chain.0.exception.message\"))return void this.logger.error(r);(r=n.get(t,\"body.message.body\"))&&this.logger.log(r)}},o.prototype._maybeCallWait=function(){return!(!n.isFunction(this.waitCallback)||0!==this.pendingItems.length||0!==this.pendingRequests.length||(this.waitIntervalID&&(this.waitIntervalID=clearInterval(this.waitIntervalID)),this.waitCallback(),0))},t.exports=o},790:(t,e,r)=>{\"use strict\";var n=r(702);function o(t){this.startTime=n.now(),this.counter=0,this.perMinCounter=0,this.platform=null,this.platformOptions={},this.configureGlobal(t)}function i(t,e,r){return!t.ignoreRateLimit&&e>=1&&r>e}function s(t,e,r,n,o,i,s){var a=null;return r&&(r=new Error(r)),r||n||(a=function(t,e,r,n,o){var i=e.environment||e.payload&&e.payload.environment,s={body:{message:{body:o?\"item per minute limit reached, ignoring errors until timeout\":\"maxItems has been hit, ignoring errors until reset.\",extra:{maxItems:r,itemsPerMinute:n}}},language:\"javascript\",environment:i,notifier:{version:e.notifier&&e.notifier.version||e.version}};return\"browser\"===t?(s.platform=\"browser\",s.framework=\"browser-js\",s.notifier.name=\"rollbar-browser-js\"):\"server\"===t?(s.framework=e.framework||\"node-js\",s.notifier.name=e.notifier.name):\"react-native\"===t&&(s.framework=e.framework||\"react-native\",s.notifier.name=e.notifier.name),s}(t,e,o,i,s)),{error:r,shouldSend:n,payload:a}}o.globalSettings={startTime:n.now(),maxItems:void 0,itemsPerMinute:void 0},o.prototype.configureGlobal=function(t){void 0!==t.startTime&&(o.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(o.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(o.globalSettings.itemsPerMinute=t.itemsPerMinute)},o.prototype.shouldSend=function(t,e){var r=(e=e||n.now())-this.startTime;(r<0||r>=6e4)&&(this.startTime=e,this.perMinCounter=0);var a=o.globalSettings.maxItems,u=o.globalSettings.itemsPerMinute;if(i(t,a,this.counter))return s(this.platform,this.platformOptions,a+\" max items reached\",!1);if(i(t,u,this.perMinCounter))return s(this.platform,this.platformOptions,u+\" items per minute reached\",!1);this.counter++,this.perMinCounter++;var c=!i(t,a,this.counter),l=c;return c=c&&!i(t,u,this.perMinCounter),s(this.platform,this.platformOptions,null,c,a,u,l)},o.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=o},562:(t,e,r)=>{\"use strict\";var n=r(790),o=r(358),i=r(314),s=r(702);function a(t,e,r,n,l){this.options=s.merge(t),this.logger=r,a.rateLimiter.configureGlobal(this.options),a.rateLimiter.setPlatformOptions(l,this.options),this.api=e,this.queue=new o(a.rateLimiter,e,r,this.options);var p=this.options.tracer||null;c(p)?(this.tracer=p,this.options.tracer=\"opentracing-tracer-enabled\",this.options._configuredOptions.tracer=\"opentracing-tracer-enabled\"):this.tracer=null,this.notifier=new i(this.queue,this.options),this.telemeter=n,u(t),this.lastError=null,this.lastErrorHash=\"none\"}function u(t){t.stackTraceLimit&&(Error.stackTraceLimit=t.stackTraceLimit)}function c(t){if(!t)return!1;if(!t.scope||\"function\"!=typeof t.scope)return!1;var e=t.scope();return!(!e||!e.active||\"function\"!=typeof e.active)}a.rateLimiter=new n({maxItems:0,itemsPerMinute:60}),a.prototype.global=function(t){return a.rateLimiter.configureGlobal(t),this},a.prototype.configure=function(t,e){var r=this.options,n={};e&&(n={payload:e}),this.options=s.merge(r,t,n);var o=this.options.tracer||null;return c(o)?(this.tracer=o,this.options.tracer=\"opentracing-tracer-enabled\",this.options._configuredOptions.tracer=\"opentracing-tracer-enabled\"):this.tracer=null,this.notifier&&this.notifier.configure(this.options),this.telemeter&&this.telemeter.configure(this.options),u(t),this.global(this.options),c(t.tracer)&&(this.tracer=t.tracer),this},a.prototype.log=function(t){var e=this._defaultLogLevel();return this._log(e,t)},a.prototype.debug=function(t){this._log(\"debug\",t)},a.prototype.info=function(t){this._log(\"info\",t)},a.prototype.warn=function(t){this._log(\"warning\",t)},a.prototype.warning=function(t){this._log(\"warning\",t)},a.prototype.error=function(t){this._log(\"error\",t)},a.prototype.critical=function(t){this._log(\"critical\",t)},a.prototype.wait=function(t){this.queue.wait(t)},a.prototype.captureEvent=function(t,e,r){return this.telemeter&&this.telemeter.captureEvent(t,e,r)},a.prototype.captureDomContentLoaded=function(t){return this.telemeter&&this.telemeter.captureDomContentLoaded(t)},a.prototype.captureLoad=function(t){return this.telemeter&&this.telemeter.captureLoad(t)},a.prototype.buildJsonPayload=function(t){return this.api.buildJsonPayload(t)},a.prototype.sendJsonPayload=function(t){this.api.postJsonPayload(t)},a.prototype._log=function(t,e){var r;if(e.callback&&(r=e.callback,delete e.callback),this.options.ignoreDuplicateErrors&&this._sameAsLastError(e)){if(r){var n=new Error(\"ignored identical item\");n.item=e,r(n)}}else try{this._addTracingInfo(e),e.level=e.level||t,this.telemeter&&this.telemeter._captureRollbarItem(e),e.telemetryEvents=this.telemeter&&this.telemeter.copyEvents()||[],this.notifier.log(e,r)}catch(t){r&&r(t),this.logger.error(t)}},a.prototype._defaultLogLevel=function(){return this.options.logLevel||\"debug\"},a.prototype._sameAsLastError=function(t){if(!t._isUncaught)return!1;var e=function(t){var e=t.message||\"\",r=(t.err||{}).stack||String(t.err);return e+\"::\"+r}(t);return this.lastErrorHash===e||(this.lastError=t.err,this.lastErrorHash=e,!1)},a.prototype._addTracingInfo=function(t){if(this.tracer){var e=this.tracer.scope().active();if(function(t){if(!t||!t.context||\"function\"!=typeof t.context)return!1;var e=t.context();return!!(e&&e.toSpanId&&e.toTraceId&&\"function\"==typeof e.toSpanId&&\"function\"==typeof e.toTraceId)}(e)){e.setTag(\"rollbar.error_uuid\",t.uuid),e.setTag(\"rollbar.has_error\",!0),e.setTag(\"error\",!0),e.setTag(\"rollbar.item_url\",`https://rollbar.com/item/uuid/?uuid=${t.uuid}`),e.setTag(\"rollbar.occurrence_url\",`https://rollbar.com/occurrence/uuid/?uuid=${t.uuid}`);var r=e.context().toSpanId(),n=e.context().toTraceId();t.custom?(t.custom.opentracing_span_id=r,t.custom.opentracing_trace_id=n):t.custom={opentracing_span_id:r,opentracing_trace_id:n}}}},t.exports=a},369:(t,e,r)=>{\"use strict\";var n=r(702),o=r(267);function i(t,e){var r=e.split(\".\"),o=r.length-1;try{for(var i=0;i<=o;++i)i<o?t=t[r[i]]:t[r[i]]=n.redact()}catch(t){}}t.exports=function(t,e,r){if(e=e||[],r)for(var s=0;s<r.length;++s)i(t,r[s]);var a=function(t){for(var e,r=[],n=0;n<t.length;++n)e=\"^\\\\[?(%5[bB])?\"+t[n]+\"\\\\[?(%5[bB])?\\\\]?(%5[dD])?$\",r.push(new RegExp(e,\"i\"));return r}(e),u=function(t){for(var e,r=[],n=0;n<t.length;++n)e=\"\\\\[?(%5[bB])?\"+t[n]+\"\\\\[?(%5[bB])?\\\\]?(%5[dD])?\",r.push(new RegExp(\"(\"+e+\"=)([^&\\\\n]+)\",\"igm\"));return r}(e);function c(t,e){return e+n.redact()}return o(t,(function t(e,r,i){var s=function(t,e){var r;for(r=0;r<a.length;++r)if(a[r].test(t)){e=n.redact();break}return e}(e,r);return s===r?n.isType(r,\"object\")||n.isType(r,\"array\")?o(r,t,i):function(t){var e;if(n.isType(t,\"string\"))for(e=0;e<u.length;++e)t=t.replace(u[e],c);return t}(s):s}))}},773:(t,e,r)=>{\"use strict\";var n=r(702),o=100;function i(t){this.queue=[],this.options=n.merge(t);var e=this.options.maxTelemetryEvents||o;this.maxQueueSize=Math.max(0,Math.min(e,o))}function s(t,e){return e||({error:\"error\",manual:\"info\"}[t]||\"info\")}i.prototype.configure=function(t){var e=this.options;this.options=n.merge(e,t);var r=this.options.maxTelemetryEvents||o,i=Math.max(0,Math.min(r,o)),s=0;this.queue.length>i&&(s=this.queue.length-i),this.maxQueueSize=i,this.queue.splice(0,s)},i.prototype.copyEvents=function(){var t=Array.prototype.slice.call(this.queue,0);if(n.isFunction(this.options.filterTelemetry))try{for(var e=t.length;e--;)this.options.filterTelemetry(t[e])&&t.splice(e,1)}catch(t){this.options.filterTelemetry=null}return t},i.prototype.capture=function(t,e,r,o,i){var a={level:s(t,r),type:t,timestamp_ms:i||n.now(),body:e,source:\"client\"};o&&(a.uuid=o);try{if(n.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(a))return!1}catch(t){this.options.filterTelemetry=null}return this.push(a),a},i.prototype.captureEvent=function(t,e,r,n){return this.capture(t,e,r,n)},i.prototype.captureError=function(t,e,r,n){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture(\"error\",o,e,r,n)},i.prototype.captureLog=function(t,e,r,n){return this.capture(\"log\",{message:t},e,r,n)},i.prototype.captureNetwork=function(t,e,r,n){e=e||\"xhr\",t.subtype=t.subtype||e,n&&(t.request=n);var o=this.levelFromStatus(t.status_code);return this.capture(\"network\",t,o,r)},i.prototype.levelFromStatus=function(t){return t>=200&&t<400?\"info\":0===t||t>=400?\"error\":\"info\"},i.prototype.captureDom=function(t,e,r,n,o){var i={subtype:t,element:e};return void 0!==r&&(i.value=r),void 0!==n&&(i.checked=n),this.capture(\"dom\",i,\"info\",o)},i.prototype.captureNavigation=function(t,e,r){return this.capture(\"navigation\",{from:t,to:e},\"info\",r)},i.prototype.captureDomContentLoaded=function(t){return this.capture(\"navigation\",{subtype:\"DOMContentLoaded\"},\"info\",void 0,t&&t.getTime())},i.prototype.captureLoad=function(t){return this.capture(\"navigation\",{subtype:\"load\"},\"info\",void 0,t&&t.getTime())},i.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},\"connectivity\",e)},i.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture(\"log\",t.custom,t.level,t.uuid,t.timestamp):void 0},i.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=i},417:(t,e,r)=>{\"use strict\";var n=r(702);function o(t,e){n.isFunction(t[e])&&(t[e]=t[e].toString())}t.exports={itemToPayload:function(t,e,r){var n=t.data;t._isUncaught&&(n._isUncaught=!0),t._originalArgs&&(n._originalArgs=t._originalArgs),r(null,n)},addPayloadOptions:function(t,e,r){var o=e.payload||{};o.body&&delete o.body,t.data=n.merge(t.data,o),r(null,t)},addTelemetryData:function(t,e,r){t.telemetryEvents&&n.set(t,\"data.body.telemetry\",t.telemetryEvents),r(null,t)},addMessageWithError:function(t,e,r){if(t.message){var o=\"data.body.trace_chain.0\",i=n.get(t,o);if(i||(o=\"data.body.trace\",i=n.get(t,o)),i){if(!i.exception||!i.exception.description)return n.set(t,o+\".exception.description\",t.message),void r(null,t);var s=n.get(t,o+\".extra\")||{},a=n.merge(s,{message:t.message});n.set(t,o+\".extra\",a)}r(null,t)}else r(null,t)},userTransform:function(t){return function(e,r,o){var i=n.merge(e),s=null;try{n.isFunction(r.transform)&&(s=r.transform(i.data,e))}catch(n){return r.transform=null,t.error(\"Error while calling custom transform() function. Removing custom transform().\",n),void o(null,e)}n.isPromise(s)?s.then((function(t){t&&(i.data=t),o(null,i)}),(function(t){o(t,e)})):o(null,i)}},addConfigToPayload:function(t,e,r){if(!e.sendConfig)return r(null,t);var o=n.get(t,\"data.custom\")||{};o._rollbarConfig=e,t.data.custom=o,r(null,t)},addConfiguredOptions:function(t,e,r){var n=e._configuredOptions;o(n,\"transform\"),o(n,\"checkIgnore\"),o(n,\"onSendCallback\"),delete n.accessToken,t.data.notifier.configured_options=n,r(null,t)},addDiagnosticKeys:function(t,e,r){var o=n.merge(t.notifier.client.notifier.diagnostic,t.diagnostic);if(n.get(t,\"err._isAnonymous\")&&(o.is_anonymous=!0),t._isUncaught&&(o.is_uncaught=t._isUncaught),t.err)try{o.raw_error={message:t.err.message,name:t.err.name,constructor_name:t.err.constructor&&t.err.constructor.name,filename:t.err.fileName,line:t.err.lineNumber,column:t.err.columnNumber,stack:t.err.stack}}catch(t){o.raw_error={failed:String(t)}}t.data.notifier.diagnostic=n.merge(t.data.notifier.diagnostic,o),r(null,t)}}},473:(t,e,r)=>{\"use strict\";var n=r(702),o=r(267);function i(t,e){return[t,n.stringify(t,e)]}function s(t,e){var r=t.length;return r>2*e?t.slice(0,e).concat(t.slice(r-e)):t}function a(t,e,r){r=void 0===r?30:r;var o,i=t.data.body;if(i.trace_chain)for(var a=i.trace_chain,u=0;u<a.length;u++)o=s(o=a[u].frames,r),a[u].frames=o;else i.trace&&(o=s(o=i.trace.frames,r),i.trace.frames=o);return[t,n.stringify(t,e)]}function u(t,e){return e&&e.length>t?e.slice(0,t-3).concat(\"...\"):e}function c(t,e,r){return e=o(e,(function e(r,i,s){switch(n.typeName(i)){case\"string\":return u(t,i);case\"object\":case\"array\":return o(i,e,s);default:return i}})),[e,n.stringify(e,r)]}function l(t){return t.exception&&(delete t.exception.description,t.exception.message=u(255,t.exception.message)),t.frames=s(t.frames,1),t}function p(t,e){var r=t.data.body;if(r.trace_chain)for(var o=r.trace_chain,i=0;i<o.length;i++)o[i]=l(o[i]);else r.trace&&(r.trace=l(r.trace));return[t,n.stringify(t,e)]}function h(t,e){return n.maxByteSize(t)>e}t.exports={truncate:function(t,e,r){r=void 0===r?524288:r;for(var n,o,s,u=[i,a,c.bind(null,1024),c.bind(null,512),c.bind(null,256),p];n=u.shift();)if(t=(o=n(t,e))[0],(s=o[1]).error||!h(s.value,r))return s;return s},raw:i,truncateFrames:a,truncateStrings:c,maybeTruncateValue:u}},702:(t,e,r)=>{\"use strict\";var n=r(420),o={};function i(t,e){return e===s(t)}function s(t){var e=typeof t;return\"object\"!==e?e:t?t instanceof Error?\"error\":{}.toString.call(t).match(/\\s([a-zA-Z]+)/)[1].toLowerCase():\"null\"}function a(t){return i(t,\"function\")}function u(t){var e=Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\"),r=RegExp(\"^\"+e+\"$\");return c(t)&&r.test(t)}function c(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function l(){var t=y();return\"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g,(function(e){var r=(t+16*Math.random())%16|0;return t=Math.floor(t/16),(\"x\"===e?r:7&r|8).toString(16)}))}var p={strictMode:!1,key:[\"source\",\"protocol\",\"authority\",\"userInfo\",\"user\",\"password\",\"host\",\"port\",\"relative\",\"path\",\"directory\",\"file\",\"query\",\"anchor\"],q:{name:\"queryKey\",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/}};function h(t,e){var r,n;try{r=o.stringify(t)}catch(o){if(e&&a(e))try{r=e(t)}catch(t){n=t}else n=o}return{error:n,value:r}}function f(t,e){return function(r,n){try{e(r,n)}catch(e){t.error(e)}}}function d(t){return function t(e,r){var n,o,a,u={};try{for(o in e)(n=e[o])&&(i(n,\"object\")||i(n,\"array\"))?r.includes(n)?u[o]=\"Removed circular reference: \"+s(n):((a=r.slice()).push(n),u[o]=t(n,a)):u[o]=n}catch(t){u=\"Failed cloning custom data: \"+t.message}return u}(t,[t])}var m=[\"log\",\"network\",\"dom\",\"navigation\",\"error\",\"manual\"],g=[\"critical\",\"error\",\"warning\",\"info\",\"debug\"];function v(t,e){for(var r=0;r<t.length;++r)if(t[r]===e)return!0;return!1}function y(){return Date.now?+Date.now():+new Date}t.exports={addParamsAndAccessTokenToPath:function(t,e,r){(r=r||{}).access_token=t;var n,o=[];for(n in r)Object.prototype.hasOwnProperty.call(r,n)&&o.push([n,r[n]].join(\"=\"));var i=\"?\"+o.sort().join(\"&\");(e=e||{}).path=e.path||\"\";var s,a=e.path.indexOf(\"?\"),u=e.path.indexOf(\"#\");-1!==a&&(-1===u||u>a)?(s=e.path,e.path=s.substring(0,a)+i+\"&\"+s.substring(a+1)):-1!==u?(s=e.path,e.path=s.substring(0,u)+i+s.substring(u)):e.path=e.path+i},createItem:function(t,e,r,n,o){for(var i,a,u,c,p,h,m=[],g=[],v=0,b=t.length;v<b;++v){var w=s(h=t[v]);switch(g.push(w),w){case\"undefined\":break;case\"string\":i?m.push(h):i=h;break;case\"function\":c=f(e,h);break;case\"date\":m.push(h);break;case\"error\":case\"domexception\":case\"exception\":a?m.push(h):a=h;break;case\"object\":case\"array\":if(h instanceof Error||\"undefined\"!=typeof DOMException&&h instanceof DOMException){a?m.push(h):a=h;break}if(n&&\"object\"===w&&!p){for(var _=0,x=n.length;_<x;++_)if(void 0!==h[n[_]]){p=h;break}if(p)break}u?m.push(h):u=h;break;default:if(h instanceof Error||\"undefined\"!=typeof DOMException&&h instanceof DOMException){a?m.push(h):a=h;break}m.push(h)}}u&&(u=d(u)),m.length>0&&(u||(u=d({})),u.extraArgs=d(m));var k={message:i,err:a,custom:u,timestamp:y(),callback:c,notifier:r,diagnostic:{},uuid:l()};return function(t,e){e&&void 0!==e.level&&(t.level=e.level,delete e.level),e&&void 0!==e.skipFrames&&(t.skipFrames=e.skipFrames,delete e.skipFrames)}(k,u),n&&p&&(k.request=p),o&&(k.lambdaContext=o),k._originalArgs=t,k.diagnostic.original_arg_types=g,k},addErrorContext:function(t,e){var r=t.data.custom||{},o=!1;try{for(var i=0;i<e.length;++i)e[i].hasOwnProperty(\"rollbarContext\")&&(r=n(r,d(e[i].rollbarContext)),o=!0);o&&(t.data.custom=r)}catch(e){t.diagnostic.error_context=\"Failed: \"+e.message}},createTelemetryEvent:function(t){for(var e,r,n,o,i=0,a=t.length;i<a;++i)switch(s(o=t[i])){case\"string\":!e&&v(m,o)?e=o:!n&&v(g,o)&&(n=o);break;case\"object\":r=o}return{type:e||\"manual\",metadata:r||{},level:n}},filterIp:function(t,e){if(t&&t.user_ip&&!0!==e){var r=t.user_ip;if(e)try{var n;if(-1!==r.indexOf(\".\"))(n=r.split(\".\")).pop(),n.push(\"0\"),r=n.join(\".\");else if(-1!==r.indexOf(\":\")){if((n=r.split(\":\")).length>2){var o=n.slice(0,3),i=o[2].indexOf(\"/\");-1!==i&&(o[2]=o[2].substring(0,i)),r=o.concat(\"0000:0000:0000:0000:0000\").join(\":\")}}else r=null}catch(t){r=null}else r=null;t.user_ip=r}},formatArgsAsString:function(t){var e,r,n,o=[];for(e=0,r=t.length;e<r;++e){switch(s(n=t[e])){case\"object\":(n=(n=h(n)).error||n.value).length>500&&(n=n.substr(0,497)+\"...\");break;case\"null\":n=\"null\";break;case\"undefined\":n=\"undefined\";break;case\"symbol\":n=n.toString()}o.push(n)}return o.join(\" \")},formatUrl:function(t,e){if(!(e=e||t.protocol)&&t.port&&(80===t.port?e=\"http:\":443===t.port&&(e=\"https:\")),e=e||\"https:\",!t.hostname)return null;var r=e+\"//\"+t.hostname;return t.port&&(r=r+\":\"+t.port),t.path&&(r+=t.path),r},get:function(t,e){if(t){var r=e.split(\".\"),n=t;try{for(var o=0,i=r.length;o<i;++o)n=n[r[o]]}catch(t){n=void 0}return n}},handleOptions:function(t,e,r,o){var i=n(t,e,r);return i=function(t,e){return t.hostWhiteList&&!t.hostSafeList&&(t.hostSafeList=t.hostWhiteList,t.hostWhiteList=void 0,e&&e.log(\"hostWhiteList is deprecated. Use hostSafeList.\")),t.hostBlackList&&!t.hostBlockList&&(t.hostBlockList=t.hostBlackList,t.hostBlackList=void 0,e&&e.log(\"hostBlackList is deprecated. Use hostBlockList.\")),t}(i,o),!e||e.overwriteScrubFields||e.scrubFields&&(i.scrubFields=(t.scrubFields||[]).concat(e.scrubFields)),i},isError:function(t){return i(t,\"error\")||i(t,\"exception\")},isFiniteNumber:function(t){return Number.isFinite(t)},isFunction:a,isIterable:function(t){var e=s(t);return\"object\"===e||\"array\"===e},isNativeFunction:u,isObject:c,isString:function(t){return\"string\"==typeof t||t instanceof String},isType:i,isPromise:function(t){return c(t)&&i(t.then,\"function\")},jsonParse:function(t){var e,r;try{e=o.parse(t)}catch(t){r=t}return{error:r,value:e}},LEVELS:{debug:0,info:1,warning:2,error:3,critical:4},makeUnhandledStackInfo:function(t,e,r,n,o,i,s,a){var u={url:e||\"\",line:r,column:n};u.func=a.guessFunctionName(u.url,u.line),u.context=a.gatherContext(u.url,u.line);var c=\"undefined\"!=typeof document&&document&&document.location&&document.location.href,l=\"undefined\"!=typeof window&&window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||s,url:c,stack:[u],useragent:l}},merge:n,now:y,redact:function(){return\"********\"},RollbarJSON:o,sanitizeUrl:function(t){var e=function(t){if(i(t,\"string\")){for(var e=p,r=e.parser[e.strictMode?\"strict\":\"loose\"].exec(t),n={},o=0,s=e.key.length;o<s;++o)n[e.key[o]]=r[o]||\"\";return n[e.q.name]={},n[e.key[12]].replace(e.q.parser,(function(t,r,o){r&&(n[e.q.name][r]=o)})),n}}(t);return e?(\"\"===e.anchor&&(e.source=e.source.replace(\"#\",\"\")),t=e.source.replace(\"?\"+e.query,\"\")):\"(unknown)\"},set:function(t,e,r){if(t){var n=e.split(\".\"),o=n.length;if(!(o<1))if(1!==o)try{for(var i=t[n[0]]||{},s=i,a=1;a<o-1;++a)i[n[a]]=i[n[a]]||{},i=i[n[a]];i[n[o-1]]=r,t[n[0]]=s}catch(t){return}else t[n[0]]=r}},setupJSON:function(t){a(o.stringify)&&a(o.parse)||(i(JSON,\"undefined\")||(t?(u(JSON.stringify)&&(o.stringify=JSON.stringify),u(JSON.parse)&&(o.parse=JSON.parse)):(a(JSON.stringify)&&(o.stringify=JSON.stringify),a(JSON.parse)&&(o.parse=JSON.parse))),a(o.stringify)&&a(o.parse)||t&&t(o))},stringify:h,maxByteSize:function(t){for(var e=0,r=t.length,n=0;n<r;n++){var o=t.charCodeAt(n);o<128?e+=1:o<2048?e+=2:o<65536&&(e+=3)}return e},typeName:s,uuid4:l}},650:t=>{\"use strict\";function e(t){return\"string\"!=typeof t&&(t=String(t)),t.toLowerCase()}function r(t){this.map={},t instanceof r?t.forEach((function(t,e){this.append(e,t)}),this):Array.isArray(t)?t.forEach((function(t){this.append(t[0],t[1])}),this):t&&Object.getOwnPropertyNames(t).forEach((function(e){this.append(e,t[e])}),this)}r.prototype.append=function(t,r){t=e(t),r=function(t){return\"string\"!=typeof t&&(t=String(t)),t}(r);var n=this.map[t];this.map[t]=n?n+\", \"+r:r},r.prototype.get=function(t){return t=e(t),this.has(t)?this.map[t]:null},r.prototype.has=function(t){return this.map.hasOwnProperty(e(t))},r.prototype.forEach=function(t,e){for(var r in this.map)this.map.hasOwnProperty(r)&&t.call(e,this.map[r],r,this)},r.prototype.entries=function(){var t=[];return this.forEach((function(e,r){t.push([r,e])})),function(t){return{next:function(){var e=t.shift();return{done:void 0===e,value:e}}}}(t)},t.exports=function(t){return\"undefined\"==typeof Headers?new r(t):new Headers(t)}},876:(t,e,r)=>{\"use strict\";var n=r(708);t.exports=n},297:t=>{\"use strict\";t.exports=function(t,e,r,n,o){var i=t[e];t[e]=r(i),n&&n[o].push([t,e,i])}},267:(t,e,r)=>{\"use strict\";var n=r(702);t.exports=function(t,e,r){var o,i,s,a,u=n.isType(t,\"object\"),c=n.isType(t,\"array\"),l=[];if(r=r||{obj:[],mapped:[]},u){if(a=r.obj.indexOf(t),u&&-1!==a)return r.mapped[a]||r.obj[a];r.obj.push(t),a=r.obj.length-1}if(u)for(o in t)Object.prototype.hasOwnProperty.call(t,o)&&l.push(o);else if(c)for(s=0;s<t.length;++s)l.push(s);var p=u?{}:[],h=!0;for(s=0;s<l.length;++s)i=t[o=l[s]],p[o]=e(o,i,r),h=h&&p[o]===t[o];return u&&!h&&(r.mapped[a]=p),h?t:p}},708:t=>{t.exports=function(t){var e,r,n,o,i,s,a,u,c,l,p,h,f,d=/[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;function m(t){return t<10?\"0\"+t:t}function g(){return this.valueOf()}function v(t){return d.lastIndex=0,d.test(t)?'\"'+t.replace(d,(function(t){var e=n[t];return\"string\"==typeof e?e:\"\\\\u\"+(\"0000\"+t.charCodeAt(0).toString(16)).slice(-4)}))+'\"':'\"'+t+'\"'}function y(t,n){var i,s,a,u,c,l=e,p=n[t];switch(p&&\"object\"==typeof p&&\"function\"==typeof p.toJSON&&(p=p.toJSON(t)),\"function\"==typeof o&&(p=o.call(n,t,p)),typeof p){case\"string\":return v(p);case\"number\":return isFinite(p)?String(p):\"null\";case\"boolean\":case\"null\":return String(p);case\"object\":if(!p)return\"null\";if(e+=r,c=[],\"[object Array]\"===Object.prototype.toString.apply(p)){for(u=p.length,i=0;i<u;i+=1)c[i]=y(i,p)||\"null\";return a=0===c.length?\"[]\":e?\"[\\n\"+e+c.join(\",\\n\"+e)+\"\\n\"+l+\"]\":\"[\"+c.join(\",\")+\"]\",e=l,a}if(o&&\"object\"==typeof o)for(u=o.length,i=0;i<u;i+=1)\"string\"==typeof o[i]&&(a=y(s=o[i],p))&&c.push(v(s)+(e?\": \":\":\")+a);else for(s in p)Object.prototype.hasOwnProperty.call(p,s)&&(a=y(s,p))&&c.push(v(s)+(e?\": \":\":\")+a);return a=0===c.length?\"{}\":e?\"{\\n\"+e+c.join(\",\\n\"+e)+\"\\n\"+l+\"}\":\"{\"+c.join(\",\")+\"}\",e=l,a}}\"function\"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+\"-\"+m(this.getUTCMonth()+1)+\"-\"+m(this.getUTCDate())+\"T\"+m(this.getUTCHours())+\":\"+m(this.getUTCMinutes())+\":\"+m(this.getUTCSeconds())+\"Z\":null},Boolean.prototype.toJSON=g,Number.prototype.toJSON=g,String.prototype.toJSON=g),\"function\"!=typeof t.stringify&&(n={\"\\b\":\"\\\\b\",\"\\t\":\"\\\\t\",\"\\n\":\"\\\\n\",\"\\f\":\"\\\\f\",\"\\r\":\"\\\\r\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"},t.stringify=function(t,n,i){var s;if(e=\"\",r=\"\",\"number\"==typeof i)for(s=0;s<i;s+=1)r+=\" \";else\"string\"==typeof i&&(r=i);if(o=n,n&&\"function\"!=typeof n&&(\"object\"!=typeof n||\"number\"!=typeof n.length))throw new Error(\"JSON.stringify\");return y(\"\",{\"\":t})}),\"function\"!=typeof t.parse&&(t.parse=(l={\"\\\\\":\"\\\\\",'\"':'\"',\"/\":\"/\",t:\"\\t\",n:\"\\n\",r:\"\\r\",f:\"\\f\",b:\"\\b\"},p={go:function(){i=\"ok\"},firstokey:function(){u=c,i=\"colon\"},okey:function(){u=c,i=\"colon\"},ovalue:function(){i=\"ocomma\"},firstavalue:function(){i=\"acomma\"},avalue:function(){i=\"acomma\"}},h={go:function(){i=\"ok\"},ovalue:function(){i=\"ocomma\"},firstavalue:function(){i=\"acomma\"},avalue:function(){i=\"acomma\"}},f={\"{\":{go:function(){s.push({state:\"ok\"}),a={},i=\"firstokey\"},ovalue:function(){s.push({container:a,state:\"ocomma\",key:u}),a={},i=\"firstokey\"},firstavalue:function(){s.push({container:a,state:\"acomma\"}),a={},i=\"firstokey\"},avalue:function(){s.push({container:a,state:\"acomma\"}),a={},i=\"firstokey\"}},\"}\":{firstokey:function(){var t=s.pop();c=a,a=t.container,u=t.key,i=t.state},ocomma:function(){var t=s.pop();a[u]=c,c=a,a=t.container,u=t.key,i=t.state}},\"[\":{go:function(){s.push({state:\"ok\"}),a=[],i=\"firstavalue\"},ovalue:function(){s.push({container:a,state:\"ocomma\",key:u}),a=[],i=\"firstavalue\"},firstavalue:function(){s.push({container:a,state:\"acomma\"}),a=[],i=\"firstavalue\"},avalue:function(){s.push({container:a,state:\"acomma\"}),a=[],i=\"firstavalue\"}},\"]\":{firstavalue:function(){var t=s.pop();c=a,a=t.container,u=t.key,i=t.state},acomma:function(){var t=s.pop();a.push(c),c=a,a=t.container,u=t.key,i=t.state}},\":\":{colon:function(){if(Object.hasOwnProperty.call(a,u))throw new SyntaxError(\"Duplicate key '\"+u+'\"');i=\"ovalue\"}},\",\":{ocomma:function(){a[u]=c,i=\"okey\"},acomma:function(){a.push(c),i=\"avalue\"}},true:{go:function(){c=!0,i=\"ok\"},ovalue:function(){c=!0,i=\"ocomma\"},firstavalue:function(){c=!0,i=\"acomma\"},avalue:function(){c=!0,i=\"acomma\"}},false:{go:function(){c=!1,i=\"ok\"},ovalue:function(){c=!1,i=\"ocomma\"},firstavalue:function(){c=!1,i=\"acomma\"},avalue:function(){c=!1,i=\"acomma\"}},null:{go:function(){c=null,i=\"ok\"},ovalue:function(){c=null,i=\"ocomma\"},firstavalue:function(){c=null,i=\"acomma\"},avalue:function(){c=null,i=\"acomma\"}}},function(t,e){var r,n,o=/^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;i=\"go\",s=[];try{for(;r=o.exec(t);)r[1]?f[r[1]][i]():r[2]?(c=+r[2],h[i]()):(n=r[3],c=n.replace(/\\\\(?:u(.{4})|([^u]))/g,(function(t,e,r){return e?String.fromCharCode(parseInt(e,16)):l[r]})),p[i]()),t=t.slice(r[0].length)}catch(t){i=t}if(\"ok\"!==i||/[^\\u0020\\t\\n\\r]/.test(t))throw i instanceof SyntaxError?i:new SyntaxError(\"JSON\");return\"function\"==typeof e?function t(r,n){var o,i,s=r[n];if(s&&\"object\"==typeof s)for(o in c)Object.prototype.hasOwnProperty.call(s,o)&&(void 0!==(i=t(s,o))?s[o]=i:delete s[o]);return e.call(r,n,s)}({\"\":c},\"\"):c}))}}},e={},function r(n){var o=e[n];if(void 0!==o)return o.exports;var i=e[n]={exports:{}};return t[n].call(i.exports,i,i.exports,r),i.exports}(409);var t,e}));\n//# sourceMappingURL=rollbar.umd.min.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { ICache, CacheStats } from \"../../domain/ports/ICache\"\nimport type { CacheConfig } from \"./cacheConfig\"\n\n/**\n * Internal cache entry structure\n */\ninterface CacheEntry<T> {\n value: T\n timestamp: number\n accessTime: number\n}\n\n/**\n * LRU (Least Recently Used) Cache implementation\n * Implements the ICache interface with:\n * - Configurable capacity limits\n * - TTL-based expiration\n * - LRU eviction policy\n * - Hit rate tracking\n *\n * @typeParam T - The type of values stored in the cache\n * @group Configuration\n *\n * @example\n * ```typescript\n * const cache = new LRUCache<string>({ maxItems: 100, ttlMs: 60000 })\n * cache.set(\"key1\", \"value1\")\n * const value = cache.get(\"key1\") // \"value1\"\n * ```\n */\nexport class LRUCache<T> implements ICache<T> {\n private readonly cache: Map<string, CacheEntry<T>>\n private readonly maxItems: number\n private readonly ttlMs: number\n\n // Hit rate tracking\n private hits = 0\n private misses = 0\n\n // Monotonic counter for LRU ordering (avoids issues with same-millisecond operations)\n private accessCounter = 0\n\n constructor(config: CacheConfig) {\n this.cache = new Map()\n this.maxItems = config.maxItems\n this.ttlMs = config.ttlMs\n }\n\n /**\n * Retrieves a value from the cache\n * Updates access time for LRU tracking\n * Returns undefined if key doesn't exist or is expired\n */\n get(key: string): T | undefined {\n const entry = this.cache.get(key)\n\n if (!entry) {\n this.misses++\n return undefined\n }\n\n // Check TTL expiration (skip if ttlMs is 0)\n if (this.ttlMs > 0 && this.isExpired(entry)) {\n this.cache.delete(key)\n this.misses++\n return undefined\n }\n\n // Update access time for LRU (using monotonic counter)\n entry.accessTime = ++this.accessCounter\n this.hits++\n\n return entry.value\n }\n\n /**\n * Stores a value in the cache\n * Evicts LRU item if at capacity\n * Refreshes TTL for existing keys\n */\n set(key: string, value: T): void {\n const now = Date.now()\n const accessTime = ++this.accessCounter\n\n // If key already exists, update it (no eviction needed)\n if (this.cache.has(key)) {\n this.cache.set(key, {\n value,\n timestamp: now,\n accessTime,\n })\n return\n }\n\n // Evict if at capacity\n if (this.cache.size >= this.maxItems) {\n this.evictLRU()\n }\n\n this.cache.set(key, {\n value,\n timestamp: now,\n accessTime,\n })\n }\n\n /**\n * Checks if a key exists and is not expired\n */\n has(key: string): boolean {\n const entry = this.cache.get(key)\n\n if (!entry) {\n return false\n }\n\n // Check TTL expiration\n if (this.ttlMs > 0 && this.isExpired(entry)) {\n this.cache.delete(key)\n return false\n }\n\n return true\n }\n\n /**\n * Removes a specific key from the cache\n */\n delete(key: string): boolean {\n return this.cache.delete(key)\n }\n\n /**\n * Removes all entries from the cache\n */\n clear(): void {\n this.cache.clear()\n this.hits = 0\n this.misses = 0\n }\n\n /**\n * Returns all keys in the cache\n */\n keys(): string[] {\n return Array.from(this.cache.keys())\n }\n\n /**\n * Returns cache statistics\n */\n getStats(): CacheStats {\n const totalRequests = this.hits + this.misses\n const hitRate = totalRequests > 0 ? (this.hits / totalRequests) * 100 : undefined\n\n return {\n size: this.cache.size,\n maxItems: this.maxItems,\n hitRate,\n }\n }\n\n /**\n * Checks if an entry has expired based on TTL\n */\n private isExpired(entry: CacheEntry<T>): boolean {\n return Date.now() - entry.timestamp > this.ttlMs\n }\n\n /**\n * Evicts the least recently used item from the cache\n */\n private evictLRU(): void {\n let oldestKey: string | null = null\n let oldestAccessTime = Infinity\n\n for (const [key, entry] of this.cache) {\n if (entry.accessTime < oldestAccessTime) {\n oldestAccessTime = entry.accessTime\n oldestKey = key\n }\n }\n\n if (oldestKey !== null) {\n this.cache.delete(oldestKey)\n }\n }\n}\n","/**\n * Cache configuration types and defaults\n * Defines the configuration options for the caching system\n * @module cacheConfig\n */\n\n/**\n * Cache types available in the SDK\n * @group Configuration\n */\nexport type CacheType =\n | \"places\"\n | \"routes\"\n | \"accessibleRoutes\"\n | \"configurations\"\n | \"categories\"\n | \"vehicles\"\n | \"stops\"\n | \"subPlaces\"\n\n/**\n * Configuration for a single cache instance\n * @group Configuration\n */\nexport interface CacheConfig {\n /** Maximum number of items to store */\n maxItems: number\n /** Time-to-live in milliseconds (0 = no expiration) */\n ttlMs: number\n /** Optional key for localStorage persistence */\n persistenceKey?: string\n}\n\n/**\n * Configuration for the CacheManager\n * @group Configuration\n */\nexport interface CacheManagerConfig {\n /** Enable localStorage persistence */\n persistent?: boolean\n /** Maximum storage size in bytes for localStorage (default: 5MB) */\n maxStorageBytes?: number\n /** Custom configurations per cache type */\n configs?: Partial<Record<CacheType, Partial<CacheConfig>>>\n}\n\n/**\n * Default maximum storage size: 5MB\n */\nexport const DEFAULT_MAX_STORAGE_BYTES = 5 * 1024 * 1024\n\n/**\n * Default cache configurations per type\n * These values balance memory usage with performance\n */\nexport const DEFAULT_CACHE_CONFIGS: Record<CacheType, CacheConfig> = {\n places: {\n maxItems: 500,\n ttlMs: 30 * 60 * 1000, // 30 minutes\n persistenceKey: \"mvx_places\",\n },\n routes: {\n maxItems: 100,\n ttlMs: 5 * 60 * 1000, // 5 minutes\n persistenceKey: \"mvx_routes\",\n },\n accessibleRoutes: {\n maxItems: 100,\n ttlMs: 5 * 60 * 1000, // 5 minutes\n persistenceKey: \"mvx_accessible_routes\",\n },\n configurations: {\n maxItems: 10,\n ttlMs: 60 * 60 * 1000, // 1 hour\n persistenceKey: \"mvx_configurations\",\n },\n categories: {\n maxItems: 20,\n ttlMs: 60 * 60 * 1000, // 1 hour\n persistenceKey: \"mvx_categories\",\n },\n vehicles: {\n maxItems: 50,\n ttlMs: 60 * 1000, // 1 minute\n persistenceKey: \"mvx_vehicles\",\n },\n stops: {\n maxItems: 100,\n ttlMs: 60 * 1000, // 1 minute\n persistenceKey: \"mvx_stops\",\n },\n subPlaces: {\n maxItems: 200,\n ttlMs: 15 * 60 * 1000, // 15 minutes\n persistenceKey: \"mvx_subplaces\",\n },\n}\n\n/**\n * Merges user config with defaults for a specific cache type\n * @param cacheType - The type of cache\n * @param userConfig - Optional user-provided configuration\n * @returns Complete cache configuration\n */\nexport function getCacheConfig(\n cacheType: CacheType,\n userConfig?: Partial<CacheConfig>\n): CacheConfig {\n const defaultConfig = DEFAULT_CACHE_CONFIGS[cacheType]\n return {\n ...defaultConfig,\n ...userConfig,\n }\n}\n","import type { ICache, CacheStats } from \"../../domain/ports/ICache\"\nimport type { CacheConfig } from \"./cacheConfig\"\nimport { DEFAULT_MAX_STORAGE_BYTES } from \"./cacheConfig\"\nimport { LRUCache } from \"./LRUCache\"\n\n/**\n * Structure for serializing cache entries to localStorage\n */\ninterface SerializedEntry<T> {\n key: string\n value: T\n timestamp: number\n accessTime: number\n}\n\n/**\n * Structure for localStorage data\n */\ninterface PersistedData<T> {\n entries: SerializedEntry<T>[]\n}\n\n/**\n * Persistent Cache implementation (Decorator pattern)\n * Wraps LRUCache with localStorage persistence.\n *\n * Features:\n * - Automatic save to localStorage on modifications\n * - Hydration from localStorage on initialization\n * - Graceful degradation when localStorage unavailable\n * - Storage quota management\n * - Expired items filtered during hydration\n *\n * @typeParam T - The type of values stored in the cache\n * @group Configuration\n *\n * @example\n * ```typescript\n * const cache = new PersistentCache<string>({\n * maxItems: 100,\n * ttlMs: 60000,\n * persistenceKey: \"my_cache\"\n * })\n * cache.set(\"key1\", \"value1\") // Saved to memory and localStorage\n * ```\n */\nexport class PersistentCache<T> implements ICache<T> {\n private readonly lruCache: LRUCache<T>\n private readonly persistenceKey: string\n private readonly maxStorageBytes: number\n private readonly ttlMs: number\n private storageAvailable: boolean = true\n\n constructor(config: CacheConfig, maxStorageBytes?: number) {\n this.lruCache = new LRUCache<T>(config)\n this.persistenceKey = config.persistenceKey || \"mvx_cache\"\n this.maxStorageBytes = maxStorageBytes ?? DEFAULT_MAX_STORAGE_BYTES\n this.ttlMs = config.ttlMs\n\n this.hydrate()\n }\n\n get(key: string): T | undefined {\n return this.lruCache.get(key)\n }\n\n set(key: string, value: T): void {\n this.lruCache.set(key, value)\n this.persist()\n }\n\n has(key: string): boolean {\n return this.lruCache.has(key)\n }\n\n delete(key: string): boolean {\n const result = this.lruCache.delete(key)\n if (result) {\n this.persist()\n }\n return result\n }\n\n clear(): void {\n this.lruCache.clear()\n this.removeFromStorage()\n }\n\n keys(): string[] {\n return this.lruCache.keys()\n }\n\n getStats(): CacheStats {\n return this.lruCache.getStats()\n }\n\n /**\n * Loads cache data from localStorage on initialization\n */\n private hydrate(): void {\n if (!this.isStorageAvailable()) {\n this.storageAvailable = false\n return\n }\n\n try {\n const stored = localStorage.getItem(this.persistenceKey)\n if (!stored) return\n\n const data: PersistedData<T> = JSON.parse(stored)\n\n if (!data.entries || !Array.isArray(data.entries)) {\n return\n }\n\n const now = Date.now()\n\n for (const entry of data.entries) {\n // Skip expired entries (if TTL is configured)\n if (this.ttlMs > 0 && now - entry.timestamp > this.ttlMs) {\n continue\n }\n\n // Restore to LRU cache\n this.lruCache.set(entry.key, entry.value)\n }\n } catch {\n // Corrupted data or storage error - start with empty cache\n this.storageAvailable = this.isStorageAvailable()\n }\n }\n\n /**\n * Saves current cache state to localStorage\n */\n private persist(): void {\n if (!this.storageAvailable) return\n\n try {\n const entries: SerializedEntry<T>[] = []\n const keys = this.lruCache.keys()\n\n for (const key of keys) {\n const value = this.lruCache.get(key)\n if (value !== undefined) {\n entries.push({\n key,\n value,\n timestamp: Date.now(),\n accessTime: Date.now(),\n })\n }\n }\n\n const data: PersistedData<T> = { entries }\n const serialized = JSON.stringify(data)\n\n // Check storage quota\n if (serialized.length > this.maxStorageBytes) {\n // Skip persistence if too large\n return\n }\n\n localStorage.setItem(this.persistenceKey, serialized)\n } catch {\n // Storage quota exceeded or other error\n this.storageAvailable = false\n }\n }\n\n /**\n * Removes cache data from localStorage\n */\n private removeFromStorage(): void {\n if (!this.storageAvailable) return\n\n try {\n localStorage.removeItem(this.persistenceKey)\n } catch {\n // Ignore errors\n }\n }\n\n /**\n * Checks if localStorage is available\n */\n private isStorageAvailable(): boolean {\n try {\n const testKey = \"__storage_test__\"\n localStorage.setItem(testKey, testKey)\n localStorage.removeItem(testKey)\n return true\n } catch {\n return false\n }\n }\n}\n","import type { ICache, CacheStats } from \"../../domain/ports/ICache\"\nimport {\n type CacheConfig,\n type CacheManagerConfig,\n type CacheType,\n DEFAULT_CACHE_CONFIGS,\n DEFAULT_MAX_STORAGE_BYTES,\n getCacheConfig,\n} from \"./cacheConfig\"\nimport { LRUCache } from \"./LRUCache\"\nimport { PersistentCache } from \"./PersistentCache\"\n\n/**\n * CacheManager - Facade for managing multiple typed caches\n *\n * Replaces the old Cache singleton with a more flexible, configurable system.\n * Supports:\n * - Multiple cache types (places, routes, configurations, etc.)\n * - Language-aware caching\n * - Optional localStorage persistence\n * - Configurable limits and TTL per cache type\n *\n * @group Configuration\n *\n * @example\n * ```typescript\n * const cacheManager = new CacheManager({\n * persistent: true,\n * maxStorageBytes: 5 * 1024 * 1024,\n * configs: {\n * places: { maxItems: 1000, ttlMs: 60000 }\n * }\n * })\n *\n * cacheManager.setPlace(\"place-1\", \"en\", placeData)\n * const place = cacheManager.getPlace(\"place-1\", \"en\")\n * ```\n */\nexport class CacheManager {\n private readonly caches: Map<CacheType, ICache<unknown>>\n private readonly persistent: boolean\n private readonly maxStorageBytes: number\n\n constructor(config?: CacheManagerConfig) {\n this.caches = new Map()\n this.persistent = config?.persistent ?? false\n this.maxStorageBytes = config?.maxStorageBytes ?? DEFAULT_MAX_STORAGE_BYTES\n\n // Initialize all cache types\n const cacheTypes: CacheType[] = [\n \"places\",\n \"routes\",\n \"accessibleRoutes\",\n \"configurations\",\n \"categories\",\n \"vehicles\",\n \"stops\",\n \"subPlaces\",\n ]\n\n for (const cacheType of cacheTypes) {\n const cacheConfig = getCacheConfig(cacheType, config?.configs?.[cacheType])\n this.caches.set(cacheType, this.createCache(cacheConfig))\n }\n }\n\n /**\n * Creates a cache instance based on persistence configuration\n */\n private createCache<T>(config: CacheConfig): ICache<T> {\n if (this.persistent && config.persistenceKey) {\n return new PersistentCache<T>(config, this.maxStorageBytes)\n }\n return new LRUCache<T>(config)\n }\n\n /**\n * Generates a language-aware cache key\n */\n private makeKey(id: string, lang: string): string {\n return `${id}_${lang}`\n }\n\n /**\n * Generates a composite key for configurations\n */\n private makeConfigKey(placeId: string, product: string, lang: string): string {\n return `${placeId || \"default\"}_${product || \"default\"}_${lang}`\n }\n\n // ==================== Places ====================\n\n getPlace<T>(id: string, lang: string): T | undefined {\n const cache = this.caches.get(\"places\") as ICache<T>\n return cache.get(this.makeKey(id, lang))\n }\n\n /**\n * Stores a place in cache\n * @param id - Place ID\n * @param value - Place data\n * @param lang - Language code\n */\n setPlace<T>(id: string, value: T, lang: string): void {\n const cache = this.caches.get(\"places\") as ICache<T>\n cache.set(this.makeKey(id, lang), value)\n }\n\n hasPlace(id: string, lang: string): boolean {\n const cache = this.caches.get(\"places\")!\n return cache.has(this.makeKey(id, lang))\n }\n\n // ==================== Routes ====================\n\n getRoute<T>(destinationId: string): T | undefined {\n const cache = this.caches.get(\"routes\") as ICache<T>\n return cache.get(destinationId)\n }\n\n setRoute<T>(destinationId: string, value: T): void {\n const cache = this.caches.get(\"routes\") as ICache<T>\n cache.set(destinationId, value)\n }\n\n cleanRoutesCache(): void {\n this.caches.get(\"routes\")!.clear()\n }\n\n // ==================== Accessible Routes ====================\n\n getAccessibleRoute<T>(destinationId: string): T | undefined {\n const cache = this.caches.get(\"accessibleRoutes\") as ICache<T>\n return cache.get(destinationId)\n }\n\n setAccessibleRoute<T>(destinationId: string, value: T): void {\n const cache = this.caches.get(\"accessibleRoutes\") as ICache<T>\n cache.set(destinationId, value)\n }\n\n cleanAccessibleRoutesCache(): void {\n this.caches.get(\"accessibleRoutes\")!.clear()\n }\n\n // ==================== Configurations ====================\n\n getConfiguration<T>(placeId: string, product: string, lang: string): T | undefined {\n const cache = this.caches.get(\"configurations\") as ICache<T>\n return cache.get(this.makeConfigKey(placeId, product, lang))\n }\n\n setConfiguration<T>(placeId: string, product: string, lang: string, value: T): void {\n const cache = this.caches.get(\"configurations\") as ICache<T>\n cache.set(this.makeConfigKey(placeId, product, lang), value)\n }\n\n // ==================== Categories ====================\n\n getCategories<T>(placeId: string, lang: string): T | undefined {\n const cache = this.caches.get(\"categories\") as ICache<T>\n return cache.get(this.makeKey(placeId || \"default\", lang))\n }\n\n setCategories<T>(placeId: string, lang: string, value: T): void {\n const cache = this.caches.get(\"categories\") as ICache<T>\n cache.set(this.makeKey(placeId || \"default\", lang), value)\n }\n\n // ==================== Vehicles ====================\n\n getVehicle<T>(id: string, lang: string): T | undefined {\n const cache = this.caches.get(\"vehicles\") as ICache<T>\n return cache.get(this.makeKey(id, lang))\n }\n\n /**\n * Stores a vehicle in cache\n * @param id - Stop ID\n * @param value - Vehicle data (can be DataSnapshot for backward compatibility)\n * @param lang - Language code\n */\n setVehicle<T>(id: string, value: T, lang: string): void {\n const cache = this.caches.get(\"vehicles\") as ICache<T>\n cache.set(this.makeKey(id, lang), value)\n }\n\n // ==================== Stops ====================\n\n getStops<T>(id: string, lang: string): T | undefined {\n const cache = this.caches.get(\"stops\") as ICache<T>\n return cache.get(this.makeKey(id, lang))\n }\n\n /**\n * Stores stops in cache\n * @param id - Combined stop+vehicle ID\n * @param value - Stops data (can be DataSnapshot for backward compatibility)\n * @param lang - Language code\n */\n setStops<T>(id: string, value: T, lang: string): void {\n const cache = this.caches.get(\"stops\") as ICache<T>\n cache.set(this.makeKey(id, lang), value)\n }\n\n // ==================== SubPlaces ====================\n\n getSubPlaces<T>(parentPlaceId: string, lang: string): T | undefined {\n const cache = this.caches.get(\"subPlaces\") as ICache<T>\n return cache.get(this.makeKey(parentPlaceId, lang))\n }\n\n /**\n * Stores subplaces in cache\n * @param parentPlaceId - Parent place ID\n * @param lang - Language code\n * @param value - SubPlaces data (can be DataSnapshot for backward compatibility)\n */\n setSubPlaces<T>(parentPlaceId: string, lang: string, value: T): void {\n const cache = this.caches.get(\"subPlaces\") as ICache<T>\n cache.set(this.makeKey(parentPlaceId, lang), value)\n }\n\n // ==================== Global Operations ====================\n\n /**\n * Clears all caches\n */\n cleanAllCache(): void {\n for (const cache of this.caches.values()) {\n cache.clear()\n }\n }\n\n /**\n * Clears all entries for a specific language across all language-aware caches\n */\n cleanLanguageCache(lang: string): void {\n const languageAwareCaches: CacheType[] = [\n \"places\",\n \"configurations\",\n \"categories\",\n \"vehicles\",\n \"stops\",\n \"subPlaces\",\n ]\n\n const suffix = `_${lang}`\n\n for (const cacheType of languageAwareCaches) {\n const cache = this.caches.get(cacheType)!\n const keys = cache.keys()\n\n for (const key of keys) {\n if (key.endsWith(suffix)) {\n cache.delete(key)\n }\n }\n }\n }\n\n /**\n * Gets statistics for a specific cache type\n */\n getCacheStats(cacheType: CacheType): CacheStats {\n const cache = this.caches.get(cacheType)\n if (!cache) {\n return { size: 0, maxItems: 0 }\n }\n return cache.getStats()\n }\n\n /**\n * Gets statistics for all caches\n */\n getAllCacheStats(): Record<CacheType, CacheStats> {\n const stats: Partial<Record<CacheType, CacheStats>> = {}\n\n for (const [cacheType, cache] of this.caches) {\n stats[cacheType] = cache.getStats()\n }\n\n return stats as Record<CacheType, CacheStats>\n }\n}\n","import type { IHttpClient, HttpResponse, HttpRequestOptions } from \"../../domain/ports/IHttpClient\"\n\n/**\n * HTTP Client implementation using the Fetch API\n *\n * Implements the IHttpClient interface providing HTTP operations\n * with consistent response handling and JSON serialization.\n *\n * @group Utils\n *\n * @example\n * ```typescript\n * const client = new FetchHttpClient()\n * const response = await client.get<User>('https://api.example.com/users/1')\n * if (response.ok) {\n * console.log(response.data.name)\n * }\n * ```\n */\nexport class FetchHttpClient implements IHttpClient {\n /**\n * Performs a GET request\n */\n async get<T = unknown>(url: string, options?: HttpRequestOptions): Promise<HttpResponse<T>> {\n return this.request<T>(url, \"GET\", undefined, options)\n }\n\n /**\n * Performs a POST request\n */\n async post<T = unknown>(\n url: string,\n body: unknown,\n options?: HttpRequestOptions\n ): Promise<HttpResponse<T>> {\n return this.request<T>(url, \"POST\", body, options)\n }\n\n /**\n * Performs a PUT request\n */\n async put<T = unknown>(\n url: string,\n body: unknown,\n options?: HttpRequestOptions\n ): Promise<HttpResponse<T>> {\n return this.request<T>(url, \"PUT\", body, options)\n }\n\n /**\n * Performs a DELETE request\n */\n async delete<T = unknown>(url: string, options?: HttpRequestOptions): Promise<HttpResponse<T>> {\n return this.request<T>(url, \"DELETE\", undefined, options)\n }\n\n /**\n * Internal request method that handles all HTTP methods\n */\n private async request<T>(\n url: string,\n method: string,\n body?: unknown,\n options?: HttpRequestOptions\n ): Promise<HttpResponse<T>> {\n const headers: Record<string, string> = {\n ...options?.headers,\n }\n\n // Add Content-Type for requests with body\n if (body !== undefined && !headers[\"Content-Type\"]) {\n headers[\"Content-Type\"] = \"application/json\"\n }\n\n const fetchOptions: RequestInit = {\n method,\n headers,\n }\n\n // Add body for POST/PUT requests\n if (body !== undefined) {\n fetchOptions.body = JSON.stringify(body)\n }\n\n const response = await fetch(url, fetchOptions)\n\n // Parse JSON response\n const data = await response.json()\n\n return {\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n data: data as T,\n }\n }\n}\n","import type { Configuration, LogArgument } from \"rollbar\"\n\nexport const _rollbarConfig: Configuration = {\n accessToken: \"1e7e62a3edc14868b4098d653d0f33b9\",\n captureUncaught: true,\n captureUnhandledRejections: true,\n payload: {\n environment: \"testenv\",\n // context: 'rollbar/test'\n client: {\n javascript: {\n code_version: \"1.0\",\n // source_map_enabled: true,\n // guess_uncaught_frames: true\n },\n },\n },\n}\n\nexport function argsToDict(\n ...args: LogArgument[]\n): Record<string, LogArgument> {\n return Object.fromEntries(args.map((val, idx) => [idx, val]))\n}\n","import Countly from \"countly-sdk-web\"\nimport Rollbar, { type LogArgument } from \"rollbar\"\nimport { _rollbarConfig } from \"./rollbar\"\n\nconst countly = {\n apiKey: \"f0c8d3b96d336e857a8628f49dd1baf7d7add0e9\",\n url: \"https://countly.lazarillo.app\",\n}\n\ninterface CountlyLike {\n q: unknown[]\n}\n\ndeclare const DEBUG: boolean\ndeclare const VERSION: string\n\nexport class Logger {\n private readonly countly: CountlyLike\n\n private readonly rollbar: Rollbar | undefined\n\n private static instance?: Logger\n\n private constructor() {\n if (DEBUG) {\n console.log(\"Initializing Countly\")\n this.countly = { q: [] }\n } else {\n this.rollbar = new Rollbar(_rollbarConfig)\n Countly.init({\n app_key: countly.apiKey,\n url: countly.url,\n app_version: VERSION,\n session_update: 10,\n debug: DEBUG,\n require_consent: false,\n namespace: \"SDK JS\",\n })\n this.countly = Countly ?? {}\n this.countly.q = Countly.q ?? []\n this.countly.q.push([\n \"track_sessions\",\n \"track_pageview\",\n \"track_clicks\",\n \"track_scrolls\",\n \"track_errors\",\n \"track_links\",\n \"track_forms\",\n \"collect_from_forms\",\n ])\n }\n }\n\n public static getInstance(): Logger {\n if (Logger.instance == null) {\n Logger.instance = new Logger()\n }\n return Logger.instance\n }\n\n logEvent(eventName: string, eventSegmentation: Record<string, string>): void {\n if (DEBUG) {\n console.log(eventName, eventSegmentation)\n } else {\n this.countly.q.push([\n \"add_event\",\n {\n key: eventName,\n segmentation: eventSegmentation,\n },\n ])\n }\n }\n\n logDebug(...args: LogArgument[]): void {\n if (DEBUG) {\n console.log(...args)\n }\n }\n\n logWarning(...args: LogArgument[]): void {\n if (DEBUG) {\n console.warn(...args)\n }\n }\n\n logError(...args: LogArgument[]): void {\n if (DEBUG) {\n console.error(...args)\n } else {\n this.rollbar?.error(...args)\n }\n }\n\n debugLog(...args: unknown[]) {\n if (DEBUG) console.log(...args)\n }\n}\n","import type { ILogger } from \"../../domain/ports/ILogger\"\nimport { Logger } from \"../../logger/logger\"\n\n/**\n * Countly Logger Adapter\n *\n * Implements ILogger interface by wrapping the existing Logger singleton.\n * This adapter bridges the new hexagonal architecture with the existing\n * Countly/Rollbar logging implementation.\n *\n * @group Utils\n *\n * @example\n * ```typescript\n * const logger: ILogger = new CountlyLogger()\n * logger.logEvent(\"user_action\", { action: \"click\" })\n * logger.logError(new Error(\"Something failed\"))\n * ```\n */\nexport class CountlyLogger implements ILogger {\n private readonly logger: Logger\n private token?: string\n\n constructor() {\n this.logger = Logger.getInstance()\n }\n\n /**\n * Logs an analytics event to Countly\n */\n logEvent(eventName: string, segmentation?: Record<string, string>): void {\n const enrichedSegmentation = this.enrichSegmentation(segmentation)\n this.logger.logEvent(eventName, enrichedSegmentation)\n }\n\n /**\n * Logs an error to Rollbar\n */\n logError(error: unknown, context?: Record<string, string>): void {\n if (error instanceof Error) {\n this.logger.logError(error, context)\n } else {\n this.logger.logError(String(error), context)\n }\n }\n\n /**\n * Logs a warning\n */\n logWarning(error: unknown, context?: Record<string, string>): void {\n if (error instanceof Error) {\n this.logger.logWarning(error, context)\n } else {\n this.logger.logWarning(String(error), context)\n }\n }\n\n /**\n * Logs debug information (only in debug mode)\n */\n logDebug(...args: unknown[]): void {\n this.logger.debugLog(...args)\n }\n\n /**\n * Sets the API token for enriching event segmentation\n */\n setToken(token: string): void {\n this.token = token\n }\n\n /**\n * Enriches segmentation with token if available\n */\n private enrichSegmentation(segmentation?: Record<string, string>): Record<string, string> {\n const base = segmentation ?? {}\n\n if (this.token) {\n return {\n ...base,\n token: this.token,\n }\n }\n\n return base\n }\n}\n","export const userLocationDataUrl =\n \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20aria-hidden%3D%22false%22%20role%3D%22img%22%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%226%22%20fill%3D%22var(--icon-fill%2C%20%23007aff)%22%20stroke%3D%22var(--icon-stroke%2C%20%23ffffff)%22%20stroke-width%3D%222%22/%3E%3C/svg%3E\"\n\n/**\n * Configuration options for the route animation icon.\n * @group Assets\n */\nexport interface RouteAnimationIconConfig {\n /**\n * The background color of the circle (default: \"#0076B6\").\n * @defaultValue \"#0076B6\"\n */\n backgroundColor?: string\n /**\n * The color of the arrow (default: \"#FFFFFF\").\n * @defaultValue \"#FFFFFF\"\n */\n arrowColor?: string\n /**\n * The stroke width of the arrow path in pixels (default: 0, meaning no stroke).\n * @defaultValue 0\n */\n arrowWidth?: number\n /**\n * The border width of the circle in pixels (default: 0, meaning no border).\n * @defaultValue 0\n */\n borderWidth?: number\n /**\n * The border color of the circle (default: \"#000000\").\n * Only used if borderWidth is greater than 0.\n * @defaultValue \"#000000\"\n */\n borderColor?: string\n /**\n * The blur radius in pixels to apply to the icon (default: 0, meaning no blur).\n * @defaultValue 0\n */\n blur?: number\n}\n\n/**\n * Generates a data URL for the route animation icon SVG with customizable appearance.\n *\n * @param config - Optional configuration for the icon appearance.\n * @param config.backgroundColor - The background color of the circle (default: \"#0076B6\").\n * @param config.arrowColor - The color of the arrow (default: \"#FFFFFF\").\n * @param config.arrowWidth - The stroke width of the arrow path in pixels (default: 0).\n * @param config.borderWidth - The border width of the circle in pixels (default: 0).\n * @param config.borderColor - The border color of the circle (default: \"#000000\").\n * @param config.blur - The blur radius in pixels to apply to the icon (default: 0).\n * @returns A data URL string that can be used as the `src` attribute of an `<img>` element.\n *\n * @example\n * ```typescript\n * // Use default appearance (blue background, white arrow)\n * const defaultIcon = createRouteAnimationIconDataUrl()\n *\n * // Customize colors\n * const customIcon = createRouteAnimationIconDataUrl({\n * backgroundColor: \"#FF5733\",\n * arrowColor: \"#000000\"\n * })\n *\n * // Add border and blur\n * const styledIcon = createRouteAnimationIconDataUrl({\n * backgroundColor: \"#0076B6\",\n * arrowColor: \"#FFFFFF\",\n * borderWidth: 2,\n * borderColor: \"#000000\",\n * blur: 1\n * })\n * ```\n * @group Assets\n */\nexport function createRouteAnimationIconDataUrl(config?: RouteAnimationIconConfig): string {\n const backgroundColor = config?.backgroundColor ?? \"#0076B6\"\n const arrowColor = config?.arrowColor ?? \"#FFFFFF\"\n const arrowWidth = config?.arrowWidth ?? 0\n const borderWidth = config?.borderWidth ?? 0\n const borderColor = config?.borderColor ?? \"#000000\"\n const blur = config?.blur ?? 0\n\n // Build circle style with optional border\n const circleStyle = `fill:${backgroundColor};`\n const circleStroke = borderWidth > 0 ? `stroke:${borderColor};stroke-width:${borderWidth};` : \"\"\n\n // Build arrow style with optional stroke\n const arrowStyle = `fill:${arrowColor};`\n const arrowStroke = arrowWidth > 0 ? `stroke:${arrowColor};stroke-width:${arrowWidth};` : \"\"\n\n // Build filter for blur if needed\n const filterId = blur > 0 ? \"blurFilter\" : \"\"\n const filterDef =\n blur > 0\n ? `<defs><filter id=\"${filterId}\"><feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"${blur}\"/></filter></defs>`\n : \"\"\n const filterAttr = blur > 0 ? `filter=\"url(#${filterId})\"` : \"\"\n\n const svg = `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t viewBox=\"0 0 40 40\" style=\"enable-background:new 0 0 40 40;\" xml:space=\"preserve\">\n${filterDef}\n<g ${filterAttr}>\n\t<circle cx=\"20\" cy=\"20\" r=\"20\" style=\"${circleStyle}${circleStroke}\"/>\n\t<path style=\"${arrowStyle}${arrowStroke}\" d=\"M12.4,29.7c-0.2,0.1-0.4,0.1-0.6,0.1c-0.2,0-0.4-0.1-0.5-0.3c-0.2-0.1-0.2-0.3-0.3-0.5c0-0.2,0-0.4,0.1-0.6\n\t\tl8.2-17.8c0.2-0.4,0.5-0.6,0.9-0.6c0.4,0,0.7,0.2,0.9,0.6l7.9,17.9c0.1,0.2,0.1,0.4,0.1,0.6c0,0.2-0.1,0.4-0.3,0.5\n\t\tc-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0-0.4,0-0.6-0.1L20,26.5L12.4,29.7z M13.9,27l6.1-2.6l6.1,2.7l-6-13.8L13.9,27z\"/>\n</g>\n</svg>`\n\n // Encode the SVG as a data URL\n const encodedSvg = encodeURIComponent(svg)\n return `data:image/svg+xml,${encodedSvg}`\n}\n\n/**\n * Default route animation icon data URL with blue background (#0076B6) and white arrow (#FFFFFF).\n * This constant is maintained for backward compatibility.\n *\n * @example\n * ```typescript\n * const image = new Image(40, 40)\n * image.src = routeAnimationDataUrl\n * ```\n * @group Assets\n */\nexport const routeAnimationDataUrl = createRouteAnimationIconDataUrl()\n","import { type PlaceResponse } from \"../interfaces/placeResponse\"\nimport { type LatLng } from \"../domain/models/latLng\"\nimport { MVXPlace } from \"../domain/models/place\"\n\n/**\n * this function generates a hexadecimal identifier\n * @group Utils\n * @returns {string} returns a hexadecimal identifier\n */\nexport function generateHexadecimalKey(): string {\n let result = \"\"\n const chars = \"0123456789ABCDEF\"\n for (let i = 0; i < 10; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length))\n }\n return result\n}\n\n/**\n * Format data into a usable type inside sdk\n * @group Utils\n * @param places array of raw MapVX places data\n * @returns formatted data\n */\nexport function formatArrayPlaceData(places: PlaceResponse[]): MVXPlace[] {\n const formattedData: MVXPlace[] = []\n places.forEach((place: PlaceResponse) => {\n formattedData.push(new MVXPlace(place))\n })\n return formattedData\n}\n\n/**\n * Create positions for stops\n * For example, if you have 3 stops, the positions will be [0, 0.5, 1]\n * If you have 4 stops, the positions will be [0, 1/3, 2/3, 1]\n * If you have 5 stops, the positions will be [0, 0.25, 0.5, 0.75, 1]\n * If you have 1 stop, the positions will be [0]\n * If you have 0 stops, the positions will be []\n *\n * @group Utils\n * @param totalStops - The total number of stops\n * @returns An array of numbers representing the positions for the stops\n */\nexport function createPositionsForStops(totalStops: number): number[] {\n // Handle edge cases\n if (totalStops === 0) {\n return []\n }\n if (totalStops === 1) {\n return [0]\n }\n\n const step = 1 / (totalStops - 1)\n return Array.from({ length: totalStops }, (_, i) => i * step)\n}\n\n/**\n * Create stops\n * @group Utils\n * @param a - The first array\n * @param b - The second array\n * @returns An array of numbers and strings\n */\nexport function createStops(a: number[], b: string[]): Array<number | string> {\n return a.flatMap((item, index) => [item, b[index]])\n}\n\n/* Calculates the bounding box for a set of points.\n *\n * This function takes an array of points represented as `LatLng` objects, each having `lat` and `lng` properties for\n * latitude and longitude coordinates, respectively. It returns the bounding box that encompasses all the points in the array,\n * extending one kilometer southwest and northeast to add a small margin around the area covered by the points.\n *\n * @group Utils\n * @param points - An array of `LatLng` objects, each representing a geographic coordinate with latitude and longitude values.\n * @returns An array of two elements containing the southwest and northeast coordinates, in that order, that defines the resulting bounding box.\n *\n * @example\n * ```typescript\n * const points: LatLng[] = [\n * { lat: 10, lng: 20 },\n * { lat: 15, lng: 25 },\n * { lat: 12, lng: 22 },\n * ];\n * const boundingBox = getBoundingBox(points);\n * // boundingBox is now [{ lat: 9.991, lng: 19.991 }, { lat: 15.009, lng: 25.009 }]\n * ```\n */\nexport function getBoundingBox(points: LatLng[]): [LatLng, LatLng] {\n const northeast: LatLng = { lat: -Infinity, lng: -Infinity }\n const southwest: LatLng = { lat: Infinity, lng: Infinity }\n\n points.forEach((point) => {\n if (point.lat > northeast.lat) northeast.lat = point.lat\n if (point.lng > northeast.lng) northeast.lng = point.lng\n\n if (point.lat < southwest.lat) southwest.lat = point.lat\n if (point.lng < southwest.lng) southwest.lng = point.lng\n })\n\n return [southwest, northeast]\n}\n","import { Marker, type Map, type PositionAnchor } from \"maplibre-gl\"\nimport { generateHexadecimalKey } from \"../../utils/utils\"\nimport { type LatLng } from \"./latLng\"\n\n/**\n * Represents the possible placements of text elements in a marker container.\n * Defines the relative positioning of text labels around marker icons.\n *\n * @example\n * ```typescript\n * const markerConfig: MarkerConfig = {\n * text: \"Coffee Shop\",\n * textPosition: TextPosition.right,\n * coordinate: { lat: 40.7128, lng: -74.0060 }\n * };\n * ```\n *\n * @group Markers\n */\nexport enum TextPosition {\n /** Text positioned to the left of the icon */\n left,\n /** Text positioned to the right of the icon */\n right,\n /** Text positioned above the icon */\n top,\n /** Text positioned below the icon */\n bottom,\n}\n\n/**\n * Alignment options for marker rotation and pitch behavior.\n * Controls how the marker responds to map rotation and pitch changes.\n */\nexport type Alignment = \"map\" | \"viewport\" | \"auto\"\n\n/**\n * Represents the configuration for the creation of a marker in a map.\n * Provides all necessary properties to create and customize a map marker.\n *\n * @example\n * ```typescript\n * const markerConfig: MarkerConfig = {\n * id: \"coffee-shop-1\",\n * coordinate: { lat: 40.7128, lng: -74.0060 },\n * icon: \"https://example.com/coffee-icon.png\",\n * text: \"Coffee Shop\",\n * onClick: () => console.log(\"Marker clicked!\")\n * };\n * ```\n *\n * @group Markers\n */\nexport interface MarkerConfig {\n /**\n * Unique identifier for the marker.\n * If not provided, a hexadecimal key will be generated automatically.\n */\n id?: string\n\n /**\n * Reference identifier of the marker related place.\n * Used to associate the marker with a specific place in the system.\n */\n refId?: string\n\n /**\n * The geographic coordinates of the pointed position.\n * @see {@link LatLng} for coordinate structure\n */\n coordinate: LatLng\n\n /**\n * Identifier for the floor on which the marker is located.\n * Used for indoor navigation and floor-specific marker management.\n */\n floorId?: string\n\n /**\n * The position of the marker's text relative to its container.\n * @see {@link TextPosition} for available positioning options\n */\n textPosition?: TextPosition\n\n /**\n * The icon element to be displayed within the marker.\n * Can be either a URL string or an HTML element.\n */\n icon?: HTMLElement | string\n\n /**\n * Additional properties for customizing the marker icon.\n * @see {@link IconProperties} for available customization options\n */\n iconProperties?: IconProperties\n\n /**\n * The text content to be displayed with the marker.\n * Can be either a string or an HTML element.\n */\n text?: HTMLElement | string\n\n /**\n * Additional properties for customizing the marker text.\n * If text content is an instance of HTMLElement, this value will not be considered.\n * @see {@link TextProperties} for available customization options\n */\n textProperties?: TextProperties\n\n /**\n * The HTML element associated with the marker.\n * If provided, this element will be used instead of the icon and text properties.\n */\n element?: HTMLElement\n\n /**\n * The function to be executed when the marker is clicked.\n * @param event - The click event object\n */\n onClick?: () => void\n\n /**\n * Sets the `rotationAlignment` property of the marker.\n * Controls how the marker rotates with the map.\n * @see {@link Alignment} for available alignment options\n */\n rotationAlignment?: Alignment\n\n /**\n * A string indicating the part of the Marker that should be positioned closest to the coordinate set via {@link coordinate}.\n * Options are `'center'`, `'top'`, `'bottom'`, `'left'`, `'right'`, `'top-left'`, `'top-right'`, `'bottom-left'`, and `'bottom-right'`.\n * @defaultValue 'center'\n */\n anchor?: PositionAnchor\n}\n\n/**\n * Represents the properties for customizing the icon of a marker.\n * @group Markers\n */\ninterface IconProperties {\n /**\n * Width of the icon in pixels\n */\n width: number\n\n /**\n * Height of the icon in pixels\n */\n height: number\n}\n\n/**\n * Represents the properties for customizing the text of a marker.\n * Provides comprehensive styling options for marker text labels.\n *\n * @example\n * ```typescript\n * const textProperties: TextProperties = {\n * fontSize: \"14px\",\n * color: \"#333333\",\n * fontWeight: \"bold\",\n * textShadow: \"1px 1px 2px rgba(0,0,0,0.5)\"\n * };\n * ```\n *\n * @group Markers\n */\nexport interface TextProperties {\n /**\n * Font size for the text (e.g., \"14px\", \"1.2em\")\n */\n fontSize?: string\n\n /**\n * Padding around the text (e.g., \"5px\", \"10px 5px\")\n */\n padding?: string\n\n /**\n * Margin around the text (e.g., \"5px\", \"10px 5px\")\n */\n margin?: string\n\n /**\n * Font weight for the text (e.g., \"normal\", \"bold\", \"600\")\n */\n fontWeight?: string\n\n /**\n * Font family for the text (e.g., \"Arial\", \"Helvetica, sans-serif\")\n */\n fontFamily?: string\n\n /**\n * Text color in any valid CSS color format\n */\n color?: string\n\n /**\n * Text shadow effect (e.g., \"1px 1px 2px rgba(0,0,0,0.5)\")\n */\n textShadow?: string\n}\n\n/**\n * Utility class for creating and manipulating marker elements on a map.\n * Provides static methods for marker element creation and styling.\n */\nclass MarkerUtils {\n /**\n * Creates a container element for the marker and adds the icon and text\n * according to the properties specified in the `MarkerConfig` object.\n *\n * @param marker - `MarkerConfig` object containing the marker configuration\n * @returns Marker container element ready to be added to the map\n *\n * @example\n * ```typescript\n * const markerElement = MarkerUtils.createMarkerElement(markerConfig);\n * map.addLayer(markerElement);\n * ```\n */\n static createMarkerElement(marker: MarkerConfig): HTMLElement {\n const markerContainer = document.createElement(\"div\")\n\n // Configure specific marker dimensions\n const iconWidth = marker.iconProperties?.width ?? 40\n const iconHeight = marker.iconProperties?.height ?? 40\n\n // Apply base class\n markerContainer.className = \"mapvx-marker\"\n\n // Configure classes and dimensions based on text presence\n if (marker.text) {\n // If text exists, adjust layout according to position\n switch (marker.textPosition) {\n case TextPosition.top:\n case TextPosition.bottom:\n markerContainer.classList.add(\"text-column\")\n markerContainer.style.width = `${Math.max(iconWidth, 200)}px`\n markerContainer.style.height = \"auto\"\n break\n case TextPosition.left:\n case TextPosition.right:\n default:\n markerContainer.classList.add(\"text-row\")\n markerContainer.style.width = \"auto\"\n markerContainer.style.height = `${iconHeight}px`\n break\n }\n } else {\n // No text, use fixed icon dimensions as in official example\n markerContainer.classList.add(\"no-text\")\n markerContainer.style.width = `${iconWidth}px`\n markerContainer.style.height = `${iconHeight}px`\n }\n\n markerContainer.addEventListener(\"click\", () => {\n marker.onClick?.()\n })\n\n if (marker.element) {\n markerContainer.appendChild(marker.element)\n return this.setAndCreateText(marker, markerContainer, `${iconHeight}px`, `${iconWidth}px`)\n }\n\n // Create elements in correct order according to textPosition\n const iconElement = this.createIconElement(marker, iconWidth, iconHeight)\n const textElement = marker.text\n ? this.createTextContainer(\n typeof marker.text === \"string\"\n ? this.createTextElement(marker.text, marker.textProperties)\n : marker.text,\n marker.textPosition\n )\n : null\n\n // Add elements in correct order\n if (marker.textPosition === TextPosition.top || marker.textPosition === TextPosition.left) {\n if (textElement) markerContainer.appendChild(textElement)\n markerContainer.appendChild(iconElement)\n } else {\n markerContainer.appendChild(iconElement)\n if (textElement) markerContainer.appendChild(textElement)\n }\n\n return markerContainer\n }\n\n /**\n * Sets up text positioning and styling for the marker.\n *\n * @param markerConfig - Configuration object containing text properties\n * @param container - Container element where text will be added\n * @param iconHeight - Height of the icon for positioning calculations\n * @param iconWidth - Width of the icon for positioning calculations\n * @returns Container element with properly positioned text\n */\n private static setAndCreateText(\n markerConfig: MarkerConfig,\n container: HTMLElement,\n iconHeight: string,\n iconWidth: string\n ): HTMLElement {\n if (markerConfig.text) {\n const textElement =\n typeof markerConfig.text === \"string\"\n ? this.createTextElement(markerConfig.text, markerConfig.textProperties)\n : markerConfig.text\n\n const textContainer = this.createTextContainer(textElement, markerConfig.textPosition)\n container.appendChild(textContainer)\n }\n\n return container\n }\n\n /**\n * Creates an icon element with proper styling.\n *\n * @param marker - Marker configuration\n * @param iconWidth - Width of the icon\n * @param iconHeight - Height of the icon\n * @returns Icon element ready to be added to the container\n */\n private static createIconElement(\n marker: MarkerConfig,\n iconWidth: number,\n iconHeight: number\n ): HTMLElement {\n if (typeof marker.icon === \"string\") {\n return this.createIcon(marker)\n } else if (marker.icon instanceof HTMLImageElement) {\n marker.icon.style.width = `${iconWidth}px`\n marker.icon.style.height = `${iconHeight}px`\n return marker.icon\n } else if (marker.icon) {\n return marker.icon\n } else {\n // Create default element if no icon is provided\n const defaultIcon = document.createElement(\"div\")\n defaultIcon.className = \"icon-default\"\n defaultIcon.style.width = `${iconWidth}px`\n defaultIcon.style.height = `${iconHeight}px`\n return defaultIcon\n }\n }\n\n /**\n * Creates a text container with proper positioning using CSS classes.\n * Uses natural block/flex layout without absolute positioning.\n *\n * @param textElement - The text element to contain\n * @param textPosition - Desired position relative to the icon\n * @returns Container with text positioned using CSS classes\n */\n private static createTextContainer(\n textElement: HTMLElement,\n textPosition?: TextPosition\n ): HTMLElement {\n const textContainer = document.createElement(\"div\")\n\n // Apply base class\n textContainer.className = \"text-container\"\n\n // Apply position class\n switch (textPosition) {\n case TextPosition.top:\n textContainer.classList.add(\"top\")\n break\n case TextPosition.bottom:\n textContainer.classList.add(\"bottom\")\n break\n case TextPosition.left:\n textContainer.classList.add(\"left\")\n break\n default: // right\n textContainer.classList.add(\"right\")\n break\n }\n\n textElement.style.display = \"block\"\n textElement.style.margin = \"0\"\n textContainer.appendChild(textElement)\n\n return textContainer\n }\n\n /**\n * Creates and returns an icon element for the marker, using the image URL\n * specified in the `MarkerConfig` object.\n *\n * @param marker - `MarkerConfig` object containing the marker configuration\n * @returns Marker icon element with proper styling and dimensions\n *\n * @example\n * ```typescript\n * const iconElement = MarkerUtils.createIcon(markerConfig);\n * container.appendChild(iconElement);\n * ```\n */\n static createIcon(marker: MarkerConfig): HTMLElement {\n const image = document.createElement(\"img\")\n\n image.src = typeof marker.icon == \"string\" ? marker.icon : \"\"\n image.width = marker.iconProperties?.width ?? 40\n image.height = marker.iconProperties?.height ?? 40\n image.style.objectFit = \"contain\"\n image.style.filter = \"drop-shadow(0px 4px 4px rgba(0, 0, 0, 0.25))\"\n\n return image\n }\n\n /**\n * Creates and returns a text element for the marker container, applying\n * custom text styles if provided in the marker properties.\n *\n * @param text - Text content to display\n * @param properties - Optional text styling properties\n * @returns Text element with applied styles\n *\n * @example\n * ```typescript\n * const textElement = MarkerUtils.createTextElement(\"Coffee Shop\", {\n * fontSize: \"14px\",\n * color: \"#333333\"\n * });\n * ```\n */\n private static createTextElement(\n text: string,\n properties: TextProperties | undefined\n ): HTMLElement {\n const textElement = document.createElement(\"p\")\n\n textElement.textContent = text\n\n textElement.style.fontSize = properties?.fontSize ?? \"14px\"\n textElement.style.padding = properties?.padding ?? \"0px\"\n textElement.style.margin = properties?.margin ?? \"0px\"\n textElement.style.fontWeight = properties?.fontWeight ?? \"600\"\n textElement.style.fontFamily = properties?.fontFamily ?? \"'Open Sans', sans-serif\"\n\n textElement.style.color = properties?.color ?? \"#000000\"\n textElement.style.textShadow =\n properties?.textShadow ??\n \"-1px -1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff, 1px 1px 0 #fff\"\n return textElement\n }\n}\n\n/**\n * Custom implementation of a MapLibre Marker with additional functionality.\n * Extends the base MapLibre Marker class with MapVX-specific features.\n *\n * @example\n * ```typescript\n * const marker = new MarkerAttribute({\n * id: \"place-1\",\n * coordinate: { lat: 40.7128, lng: -74.0060 },\n * icon: \"https://example.com/icon.png\"\n * });\n * marker.addToMap(map);\n * ```\n */\nexport class MarkerAttribute extends Marker {\n /**\n * Unique identifier for the marker attribute.\n * Used for marker management and identification.\n */\n id: string\n\n /**\n * Geographic coordinates of the marker attribute.\n * @see {@link LatLng} for coordinate structure\n */\n coordinate: LatLng\n\n /**\n * Identifier of the floor where the marker attribute is located.\n * Used for indoor navigation and floor-specific marker management.\n */\n floorId?: string\n\n /**\n * Constructs a new `MarkerAttribute` object with the specified properties.\n *\n * @param markerConfig - `MarkerConfig` object containing the configuration properties\n *\n * @example\n * ```typescript\n * const marker = new MarkerAttribute({\n * id: \"coffee-shop\",\n * coordinate: { lat: 40.7128, lng: -74.0060 },\n * floorId: \"ground-floor\",\n * icon: \"coffee-icon.png\"\n * });\n * ```\n */\n constructor(markerConfig: MarkerConfig) {\n super({\n element: MarkerUtils.createMarkerElement(markerConfig),\n draggable: false,\n anchor: markerConfig.anchor ?? \"center\",\n offset: [0, 0],\n })\n\n this.setLngLat([markerConfig.coordinate.lng, markerConfig.coordinate.lat])\n this.setRotationAlignment(markerConfig.rotationAlignment ?? \"viewport\")\n this.setPitchAlignment(\"viewport\")\n this.id = markerConfig.id ?? generateHexadecimalKey()\n this.coordinate = markerConfig.coordinate\n this.floorId = markerConfig.floorId ?? \"\"\n }\n\n /**\n * Adds the marker attribute to the specified map.\n *\n * @param map - The map instance where the marker attribute will be added\n *\n * @example\n * ```typescript\n * const marker = new MarkerAttribute(markerConfig);\n * marker.addToMap(mapInstance);\n * ```\n */\n addToMap(map: Map): void {\n if (!map) return\n this.addTo(map)\n }\n\n /**\n * Updates the icon of the marker attribute based on the specified marker configuration.\n *\n * @param marker - `MarkerConfig` object containing the new marker configuration\n *\n * @example\n * ```typescript\n * marker.updateIcon({\n * icon: \"new-icon.png\",\n * text: \"Updated Text\"\n * });\n * ```\n */\n updateIcon(marker: MarkerConfig) {\n if (marker.element) {\n this._element.innerHTML = \"\"\n this._element.appendChild(marker.element)\n } else {\n const markerElement = MarkerUtils.createMarkerElement(marker)\n const oldMarkerContent = this._element.querySelector(\"div\")\n const newMarkerContent = markerElement.querySelector(\"div\")\n if (newMarkerContent) {\n oldMarkerContent?.parentElement?.replaceChild(newMarkerContent, oldMarkerContent)\n }\n }\n this.setRotationAlignment(marker.rotationAlignment ?? \"viewport\")\n this.setPitchAlignment(\"viewport\")\n }\n\n /**\n * Sets the current floor ID for the marker.\n * Marker will be shown if and only if such floor is displayed.\n *\n * @param floorId - The ID of the floor to set for the marker.\n * This parameter is optional and defaults to `undefined` if not provided.\n *\n * @example\n * ```typescript\n * marker.setFloor(\"ground-floor\");\n * ```\n */\n setFloor(floorId?: string) {\n this.floorId = floorId\n }\n\n /**\n * Hides the marker element from the map without deleting it.\n * The marker can be shown again using the {@link show} method.\n *\n * @example\n * ```typescript\n * marker.hide();\n * ```\n */\n hide(): void {\n this.remove()\n }\n\n /**\n * Makes the marker visible again after it has been hidden.\n *\n * @param map - The map instance where the marker should be shown\n *\n * @example\n * ```typescript\n * marker.show(mapInstance);\n * ```\n */\n show(map: Map): void {\n if (!map) return\n this.addTo(map)\n }\n\n /**\n * Hides marker if currentFloor is different from the marker floor.\n * Used for floor-based marker visibility management.\n *\n * @param floorId - The current floor ID to compare against\n * @param map - The map instance for showing/hiding the marker\n *\n * @example\n * ```typescript\n * marker.changeFloor(\"first-floor\", mapInstance);\n * ```\n */\n changeFloor(floorId: string | null | undefined, map: Map, isOutdoor: boolean = false) {\n if (floorId == this.floorId || (isOutdoor && !this.floorId)) {\n this.show(map)\n } else {\n this.hide()\n }\n }\n}\n","import { type LatLng } from \"../domain/models/latLng\"\n\nconst { asin, atan2, cos, sin, pow, sqrt, PI } = Math\n\n/**\n * Return the haversine of a number.\n * Haversine formula is a formula that calculates the distance\n * between two points on a sphere given their longitudes and latitudes.\n * @group Utils\n * @see [Haversine Formula](https://en.wikipedia.org/wiki/Haversine_formula)\n * @param angle A numeric expression that contains an angle measured in radians.\n * @returns\n */\nfunction hav(angle: number) {\n return sin(angle / 2) * sin(angle / 2)\n}\n\n/**\n * Converts an angle from degrees to radians.\n * @group Utils\n * @param degrees - The angle in degrees.\n * @returns The angle converted to radians.\n */\nexport function toRadians(degrees: number) {\n return degrees * (PI / 180)\n}\n\n/**\n * Converts an angle from radians to degrees.\n * @group Utils\n * @param radians - The angle in radians.\n * @returns The angle converted to degrees.\n */\nexport function toDegrees(radians: number) {\n return radians * (180 / PI)\n}\n\n/**\n * Compare two geographic points.\n * @group Utils\n * @param location - The first point.\n * @param otherLocation - The second point.\n * @returns True if the points are the same, false otherwise.\n */\nexport function compareLatLng(location: LatLng, otherLocation: LatLng): boolean {\n return location.lat === otherLocation.lat && location.lng === otherLocation.lng\n}\n\n/**\n * NavFunctions is a class that contains static methods to calculate distances and angles between geographic points.\n * @group Utils\n */\nexport abstract class NavFunctions {\n /**\n * The radius of the Earth in meters.\n */\n static readonly EARTH_RADIUS: number = 6378000\n\n /**\n * Calculate the distance between two geographic points using the haversine formula.\n *\n * @see [Haversine Formula](https://en.wikipedia.org/wiki/Haversine_formula)\n *\n * @param pointA A geographic point.\n * @param pointB Another geographic point.\n * @returns The distance between the two points.\n */\n static distance(pointA: LatLng, pointB: LatLng): number {\n const radLatA = toRadians(pointA.lat)\n const radLatB = toRadians(pointB.lat)\n const radLongA = toRadians(pointA.lng)\n const radLongB = toRadians(pointB.lng)\n const deltaLat = radLatB - radLatA\n const deltaLng = radLongB - radLongA\n\n const haversine = hav(deltaLat) + cos(radLatA) * cos(radLatB) * hav(deltaLng)\n\n return 2 * NavFunctions.EARTH_RADIUS * asin(sqrt(haversine))\n }\n\n /**\n *\n * @param pointA\n * @param pointB\n * @param fraction A number between 0 to 1, 0 and 1 inclusive.\n * @returns\n */\n static intermediatePointBetween(pointA: LatLng, pointB: LatLng, fraction: number): LatLng {\n const radLatA = toRadians(pointA.lat)\n const radLatB = toRadians(pointB.lat)\n const radLongA = toRadians(pointA.lng)\n const radLongB = toRadians(pointB.lng)\n\n const angDistance = NavFunctions.distance(pointA, pointB) / NavFunctions.EARTH_RADIUS\n\n const a = sin((1 - fraction) * angDistance) / sin(angDistance)\n const b = sin(fraction * angDistance) / sin(angDistance)\n\n const x = a * cos(radLatA) * cos(radLongA) + b * cos(radLatB) * cos(radLongB)\n const y = a * cos(radLatA) * sin(radLongA) + b * cos(radLatB) * sin(radLongB)\n const z = a * sin(radLatA) + b * sin(radLatB)\n\n const radLat = atan2(z, sqrt(pow(x, 2) + pow(y, 2)))\n const radLong = atan2(y, x)\n\n const lat = toDegrees(radLat)\n const lng = toDegrees(radLong)\n\n return {\n lat: lat,\n lng: lng,\n }\n }\n\n /**\n * Calculate the angle of a line between two points.\n * Relative to NORTH in positive degrees: 0 N, 90 E, 180 S, 270 O\n * @param source The initial point\n * @param destination The final\n * @returns\n */\n static bearingInDegBetween(source: LatLng, destination: LatLng): number {\n const inRad = NavFunctions.bearingInRadBetween(source, destination)\n return toDegrees(inRad)\n }\n\n /**\n * Calculate the bearing between two points in radians.\n * @param source The initial point.\n * @param destination The final point.\n * @returns The bearing in radians.\n */\n static bearingInRadBetween(source: LatLng, destination: LatLng): number {\n const x = destination.lng - source.lng\n const y = destination.lat - source.lat\n\n return (PI / 2 - atan2(y, x) + 2 * PI) % (2 * PI)\n }\n\n /**\n * Calculate an intermediate angle between two given angles based on a specific fraction.\n * The function returns an angle that is a certain fraction of the shortest arc between the initial and final angles.\n *\n * @remarks\n *\n * If the fraction is 0, the function returns the initial angle.\n *\n * If the fraction is 1, it returns the final angle.\n *\n * For fractions in between, it returns an angle that is a proportional distance between the two angles along the shortest arc.\n *\n * @param initialAngle The starting angle specified in degrees.\n * @param finalAngle The ending angle specified in degrees.\n * @param fraction A decimal value ranging from 0 to 1 indicating the fraction of the distance between the initial and final angles.\n * @returns The calculated intermediate angle in degrees, within the range `[0, 360[`.\n */\n static intermediateAngleBetween(\n initialAngle: number,\n finalAngle: number,\n fraction: number\n ): number {\n let delta = ((finalAngle - initialAngle + 180) % 360) - 180\n if (delta < -180) delta += 360\n return (initialAngle + 360 + delta * fraction) % 360\n }\n}\n","import { type Feature, type FeatureCollection, type LineString } from \"geojson\"\nimport { type InternalAnimationConfig } from \"./animation\"\nimport { type MarkerAttribute } from \"./marker\"\nimport { type MVXRoute } from \"./route\"\n\n/**\n * Represents the conditions for the step animation.\n * @group Routes\n */\nexport interface StepAnimationConditions {\n index: number\n coordinatesIndex: number\n iconRotation: number\n rotatingIcon: boolean\n startTime: number | undefined\n progress: number\n resetTime: boolean\n waitStartTime: number | undefined\n animationId: number\n onFinish?: (timestamp: number) => void\n isStepByStep?: boolean\n nextFloorFirstStepIndex?: number\n}\n\n/**\n * Represents a single route instance on the map with its own\n * MapLibre sources/layers, GeoJSON data, animation state, and marker.\n * @group Routes\n */\nexport interface RouteInstance {\n readonly id: string\n route: MVXRoute\n readonly aheadId: string\n readonly behindId: string\n readonly currentId: string\n aheadSourceData: FeatureCollection\n behindSourceData: FeatureCollection\n currentSourceData: Feature<LineString>\n animationStatus: \"STARTED\" | \"PAUSED\" | \"FINISHED\" | \"NO_ROUTE\"\n stepAnimationStatus: \"NO_ROUTE\" | \"ANIMATING\" | \"WAITING\"\n conditions?: StepAnimationConditions\n animationConfig?: InternalAnimationConfig\n routeMarker?: MarkerAttribute\n currentPlaceId?: string\n}\n\n/**\n * Creates a new RouteInstance from a route.\n * Each instance gets unique MapLibre source/layer IDs based on the route's UUID.\n * @param route The route to create an instance for.\n * @returns A new RouteInstance with initialized GeoJSON data structures.\n * @group Routes\n */\nexport function createRouteInstance(route: MVXRoute): RouteInstance {\n return {\n id: route.id,\n route,\n aheadId: `AHEAD_${route.id}`,\n behindId: `BEHIND_${route.id}`,\n currentId: `CURRENT_${route.id}`,\n aheadSourceData: { type: \"FeatureCollection\", features: [] },\n behindSourceData: { type: \"FeatureCollection\", features: [] },\n currentSourceData: {\n type: \"Feature\",\n properties: {},\n geometry: { type: \"LineString\", coordinates: [] },\n },\n animationStatus: \"NO_ROUTE\",\n stepAnimationStatus: \"NO_ROUTE\",\n }\n}\n","import { type Feature } from \"geojson\"\nimport {\n type ExpressionSpecification,\n type GeoJSONSource,\n type Map as MapLibreMap,\n type Marker,\n} from \"maplibre-gl\"\nimport { type InternalMapVXMap } from \"../map/map\"\nimport {\n type InternalAnimationConfig,\n type InternalAnimationDrawingConfig,\n} from \"../domain/models/animation\"\nimport { type LatLng } from \"../domain/models/latLng\"\nimport { MarkerAttribute } from \"../domain/models/marker\"\nimport { type MVXRoute, type MVXRouteStep } from \"../domain/models/route\"\nimport { type InternalDrawRouteConfiguration } from \"../domain/models/routeConfiguration\"\nimport { type PaddingOptions } from \"../domain/models/fitOptions\"\nimport { NavFunctions, compareLatLng } from \"../utils/nav-functions\"\nimport { createPositionsForStops, createStops } from \"../utils/utils\"\nimport { type RouteInstance, createRouteInstance } from \"../domain/models/routeInstance\"\n\n/**\n * Default padding values for auto-fit by place feature.\n * Used when padding is not explicitly provided in the animation configuration.\n */\nconst DEFAULT_AUTO_FIT_PADDING: PaddingOptions = {\n top: 150,\n right: 150,\n bottom: 150,\n left: 150,\n}\n\n/**\n * Represents the controller for routes on the map.\n * Supports multiple simultaneous routes with independent customizations,\n * animations, and lifecycle management.\n * @group Routes\n */\nexport class RouteController {\n private readonly mapvxMap: InternalMapVXMap\n private readonly routes: Map<string, RouteInstance> = new Map()\n private lastAddedRouteId?: string\n\n constructor(map: InternalMapVXMap) {\n this.mapvxMap = map\n }\n\n private get map(): MapLibreMap {\n return this.mapvxMap.map\n }\n\n /**\n * Resolve a route instance by ID, or fall back to the last added route.\n */\n private resolveInstance(routeId?: string): RouteInstance | undefined {\n const id = routeId ?? this.lastAddedRouteId\n return id ? this.routes.get(id) : undefined\n }\n\n /**\n * Add MapLibre sources and layers for a single route instance.\n */\n private addSourcesAndLayersForRoute(instance: RouteInstance): void {\n this.map.addSource(instance.aheadId, {\n type: \"geojson\",\n data: instance.aheadSourceData,\n })\n this.map.addLayer({\n id: instance.aheadId,\n type: \"line\",\n source: instance.aheadId,\n layout: {\n \"line-join\": \"round\",\n \"line-cap\": \"round\",\n },\n })\n this.map.addSource(instance.behindId, {\n type: \"geojson\",\n data: instance.behindSourceData,\n })\n this.map.addLayer({\n id: instance.behindId,\n type: \"line\",\n source: instance.behindId,\n layout: {\n \"line-join\": \"round\",\n \"line-cap\": \"round\",\n },\n })\n this.map.addSource(instance.currentId, {\n type: \"geojson\",\n data: instance.currentSourceData,\n })\n this.map.addLayer({\n id: instance.currentId,\n type: \"line\",\n source: instance.currentId,\n layout: {\n \"line-join\": \"round\",\n \"line-cap\": \"round\",\n },\n })\n }\n\n /**\n * Remove MapLibre sources and layers for a single route instance.\n */\n private removeSourcesAndLayersForRoute(instance: RouteInstance): void {\n const ids = [instance.aheadId, instance.behindId, instance.currentId]\n for (const id of ids) {\n try {\n this.map.removeLayer(id)\n } catch {\n // Layer may not exist\n }\n try {\n this.map.removeSource(id)\n } catch {\n // Source may not exist\n }\n }\n }\n\n /**\n * Re-add sources and layers for all active routes.\n * Should be called when the map style is reloaded.\n */\n addSourcesAndLayers(): void {\n for (const instance of this.routes.values()) {\n this.addSourcesAndLayersForRoute(instance)\n }\n }\n\n /**\n * Add a route to the map.\n * @param route The route to add.\n * @param drawConfig The draw configuration for the route.\n */\n addRoute(route: MVXRoute, drawConfig: InternalDrawRouteConfiguration): void {\n const instance = createRouteInstance(route)\n this.routes.set(instance.id, instance)\n this.lastAddedRouteId = instance.id\n this.addSourcesAndLayersForRoute(instance)\n this.setSourceData(instance, instance.aheadId, route.steps)\n this.setLayerPaint(instance.aheadId, drawConfig)\n this.updateLayerFilter(instance.aheadId)\n }\n\n /**\n * Update the visual progress of a route based on an external user position.\n * Splits the route into behind (already traveled) and ahead (remaining) sections\n * at the point on the route closest to the given position.\n *\n * @param routeId The ID of the route to update.\n * @param position The current user position (will be projected onto the route).\n * @param behindDrawConfig The draw configuration for the behind (traveled) portion.\n */\n updateRouteProgress(\n routeId: string,\n position: LatLng,\n behindDrawConfig: InternalDrawRouteConfiguration\n ): void {\n const instance = this.routes.get(routeId)\n if (!instance) return\n\n const route = instance.route\n const steps = route.steps\n\n // Find the closest point on the route to the position\n let bestDist = Infinity\n let bestStepIndex = 0\n let bestCoordIndex = 0\n let bestFraction = 0\n\n for (let s = 0; s < steps.length; s++) {\n const coords = steps[s].coordinates\n for (let c = 0; c < coords.length - 1; c++) {\n const a = coords[c]\n const b = coords[c + 1]\n const { fraction, dist } = this.projectPointToSegment(position, a, b)\n if (dist < bestDist) {\n bestDist = dist\n bestStepIndex = s\n bestCoordIndex = c\n bestFraction = fraction\n }\n }\n }\n\n // Build behind features: all complete steps before the best step,\n // plus the partial segment of the current step up to the projected point\n const behindFeatures: Feature[] = []\n for (let s = 0; s < bestStepIndex; s++) {\n behindFeatures.push({\n type: \"Feature\",\n properties: { floor_key: this.getFloorKeyForStep(steps[s]) },\n geometry: {\n type: \"LineString\",\n coordinates: steps[s].geoJsonCoordinates,\n },\n })\n }\n\n // Partial behind feature for the current step (up to projected point)\n const currentStep = steps[bestStepIndex]\n const currentCoords = currentStep.coordinates\n const partialBehindCoords: [number, number][] = []\n for (let c = 0; c <= bestCoordIndex; c++) {\n partialBehindCoords.push([currentCoords[c].lng, currentCoords[c].lat])\n }\n // Add the projected point\n const a = currentCoords[bestCoordIndex]\n const b = currentCoords[Math.min(bestCoordIndex + 1, currentCoords.length - 1)]\n const projLat = a.lat + bestFraction * (b.lat - a.lat)\n const projLng = a.lng + bestFraction * (b.lng - a.lng)\n partialBehindCoords.push([projLng, projLat])\n\n if (partialBehindCoords.length >= 2) {\n behindFeatures.push({\n type: \"Feature\",\n properties: { floor_key: this.getFloorKeyForStep(currentStep) },\n geometry: { type: \"LineString\", coordinates: partialBehindCoords },\n })\n }\n\n // Build ahead features: partial remainder of current step + all remaining steps\n const aheadFeatures: Feature[] = []\n const partialAheadCoords: [number, number][] = [[projLng, projLat]]\n for (let c = bestCoordIndex + 1; c < currentCoords.length; c++) {\n partialAheadCoords.push([currentCoords[c].lng, currentCoords[c].lat])\n }\n if (partialAheadCoords.length >= 2) {\n aheadFeatures.push({\n type: \"Feature\",\n properties: { floor_key: this.getFloorKeyForStep(currentStep) },\n geometry: { type: \"LineString\", coordinates: partialAheadCoords },\n })\n }\n for (let s = bestStepIndex + 1; s < steps.length; s++) {\n aheadFeatures.push({\n type: \"Feature\",\n properties: { floor_key: this.getFloorKeyForStep(steps[s]) },\n geometry: {\n type: \"LineString\",\n coordinates: steps[s].geoJsonCoordinates,\n },\n })\n }\n\n // Update sources\n instance.behindSourceData.features = behindFeatures\n const behindSource = this.map.getSource<GeoJSONSource>(instance.behindId)\n behindSource?.setData(instance.behindSourceData)\n\n instance.aheadSourceData.features = aheadFeatures\n const aheadSource = this.map.getSource<GeoJSONSource>(instance.aheadId)\n aheadSource?.setData(instance.aheadSourceData)\n\n // Ensure paint is set on the behind layer\n this.setLayerPaint(instance.behindId, behindDrawConfig)\n this.updateLayerFilter(instance.behindId)\n this.updateLayerFilter(instance.aheadId)\n }\n\n /**\n * Project a point onto a line segment and return the clamped fraction and squared distance.\n */\n private projectPointToSegment(\n p: LatLng,\n a: LatLng,\n b: LatLng\n ): { fraction: number; dist: number } {\n const dx = b.lng - a.lng\n const dy = b.lat - a.lat\n const lenSq = dx * dx + dy * dy\n if (lenSq === 0) {\n const ddx = p.lng - a.lng\n const ddy = p.lat - a.lat\n return { fraction: 0, dist: ddx * ddx + ddy * ddy }\n }\n let t = ((p.lng - a.lng) * dx + (p.lat - a.lat) * dy) / lenSq\n t = Math.max(0, Math.min(1, t))\n const projLng = a.lng + t * dx\n const projLat = a.lat + t * dy\n const ddx = p.lng - projLng\n const ddy = p.lat - projLat\n return { fraction: t, dist: ddx * ddx + ddy * ddy }\n }\n\n private setSourceData(instance: RouteInstance, id: string, steps: MVXRouteStep[]): void {\n const features = this.createFeaturesFrom(steps)\n const source = this.map.getSource<GeoJSONSource>(id)\n if (id === instance.aheadId) {\n instance.aheadSourceData.features = features\n source?.setData(instance.aheadSourceData)\n } else if (id === instance.behindId) {\n instance.behindSourceData.features = features\n source?.setData(instance.behindSourceData)\n }\n }\n\n private setCurrentSourceData(instance: RouteInstance, step: MVXRouteStep | undefined): void {\n instance.currentSourceData.properties = {\n floor_key: this.getFloorKeyForStep(step),\n }\n const coordinate = step?.coordinates[0]\n if (coordinate != null) {\n instance.currentSourceData.geometry.coordinates = [[coordinate.lng, coordinate.lat]]\n } else {\n instance.currentSourceData.geometry.coordinates = []\n }\n const source = this.map.getSource<GeoJSONSource>(instance.currentId)\n source?.setData(instance.currentSourceData)\n }\n\n private setLayerPaint(layerId: string, drawConfig: InternalDrawRouteConfiguration): void {\n const paintConfig = this.preparePaintForLayer(drawConfig)\n\n for (const property in paintConfig) {\n this.map.setPaintProperty(layerId, property, paintConfig[property])\n }\n }\n\n private preparePaintForLayer(\n drawConfig: InternalDrawRouteConfiguration\n ): Record<string, unknown> {\n if (\"color\" in drawConfig.routeStyle) {\n // Check for propriety unique to SolidStyle\n return {\n \"line-color\": drawConfig.routeStyle.color,\n \"line-gradient\": null, // null to unset the existing value\n \"line-width\": drawConfig.polylineWidth,\n }\n } else {\n // Is GradienteStyle\n const { colors, positions } = drawConfig.routeStyle\n\n let positionsToUse = positions\n if (positionsToUse == null) {\n positionsToUse = createPositionsForStops(colors.length)\n }\n\n if (positionsToUse.length !== colors.length) {\n throw new Error(\"Error: position array has different length than colors array\")\n }\n\n const stops = createStops(positionsToUse, colors)\n const gradient: ExpressionSpecification = [\n \"interpolate\",\n [\"linear\"],\n [\"line-progress\"],\n ...stops,\n ]\n return {\n \"line-color\": null,\n \"line-gradient\": gradient,\n \"line-width\": drawConfig.polylineWidth,\n }\n }\n }\n\n /**\n * Update the filter of the layer referenced with a ID.\n *\n * @see {@link https://maplibre.org/maplibre-gl-js/docs/API/classes/Map/#setfilter}\n * @param layerId The ID for the layer.\n */\n private updateLayerFilter(layerId: string, floorId?: string): void {\n const newFloorId = floorId ?? this.mapvxMap.getCurrentFloor()\n if (newFloorId === undefined) return\n if (this.map.getStyle().layers.some((layer) => layer.id === layerId)) {\n this.map.setFilter(layerId, [\"==\", [\"get\", \"floor_key\"], newFloorId])\n }\n }\n\n /**\n * Determines the correct floor_key for a route step.\n * Outdoor steps (without startInsideFloor) should use the outdoor floor key,\n * not the current floor which might be indoor.\n * Elevator steps are always drawn on startInsideFloor; floor is updated to endInsideFloor\n * only when the step completes (see prepareForNextStep / animateStep).\n * @param step The route step to determine the floor_key for\n * @returns The floor_key string to use for the step\n */\n private getFloorKeyForStep(step: MVXRouteStep | undefined): string {\n if (!step) {\n return this.mapvxMap.getCurrentFloor()\n }\n\n // If step has startInsideFloor, use it (unless it's a non-elevator floor change step)\n if ((step.startInsideFloor?.length ?? 0) > 0) {\n // If step changes floors (different start and end) and is not an elevator step,\n // use endInsideFloor so the step is drawn on the destination floor.\n // Elevator steps are drawn on startInsideFloor; floor updates on step completion.\n if (\n (step.endInsideFloor?.length ?? 0) > 0 &&\n step.startInsideFloor !== step.endInsideFloor &&\n !step.elevatorStep\n ) {\n return step.endInsideFloor!\n }\n return step.startInsideFloor!\n }\n\n // If step has endInsideFloor but no startInsideFloor (entering building), use endInsideFloor\n if ((step.endInsideFloor?.length ?? 0) > 0) {\n return step.endInsideFloor!\n }\n\n // If step is outdoor (no startInsideFloor and no endInsideFloor), use outdoor floor key\n const innerFloors = this.mapvxMap.getInnerFloors()\n const outdoorFloor = innerFloors.find((floor) => floor.reachableFromGPS === true)\n return outdoorFloor?.key ?? \"\"\n }\n\n private createFeaturesFrom(steps: MVXRouteStep[]): Feature[] {\n const features: Feature[] = steps.map((step) => {\n return {\n type: \"Feature\",\n properties: { floor_key: this.getFloorKeyForStep(step) },\n geometry: {\n type: \"LineString\",\n coordinates: step.geoJsonCoordinates,\n },\n }\n })\n return features\n }\n\n /**\n * Update the layers for all active routes.\n * @param floorId The floor ID to update the layers for.\n */\n updateRouteLayers(floorId: string): void {\n for (const instance of this.routes.values()) {\n this.updateLayerFilter(instance.aheadId, floorId)\n this.updateLayerFilter(instance.behindId, floorId)\n this.updateLayerFilter(instance.currentId, floorId)\n }\n }\n\n /**\n * Update the visibility of route markers for all active routes.\n * @param floorId The floor ID to update the visibility for.\n */\n updateRouteMarkerVisibility(floorId: string): void {\n for (const instance of this.routes.values()) {\n instance.routeMarker?.floorId === floorId\n ? instance.routeMarker?.show(this.map)\n : instance.routeMarker?.hide()\n }\n }\n\n private updatePlaceFloorForRouting(instance: RouteInstance, placeId?: string, floorKey?: string) {\n if (placeId && floorKey) {\n this.mapvxMap.updatePlaceAndFloorForRouting(placeId, floorKey)\n this.updateRouteLayers(floorKey)\n instance.routeMarker?.setFloor(floorKey)\n this.updateRouteMarkerVisibility(floorKey)\n }\n }\n\n /**\n * Start the animation of a route.\n * @param route The route to animate.\n * @param drawConfig The draw configuration for the route.\n * @param animationConfig The animation configuration for the route.\n */\n startAnimating(\n route: MVXRoute,\n drawConfig: InternalAnimationDrawingConfig,\n animationConfig: InternalAnimationConfig\n ): void {\n const instance = createRouteInstance(route)\n this.routes.set(instance.id, instance)\n this.lastAddedRouteId = instance.id\n\n instance.animationStatus = \"STARTED\"\n instance.route = route\n const firstStep = route.steps[0]\n\n this.addSourcesAndLayersForRoute(instance)\n this.updatePlaceFloorForRouting(\n instance,\n firstStep.startInsidePlace,\n firstStep.startInsideFloor\n )\n\n this.setSourceData(instance, instance.aheadId, route.steps)\n this.setSourceData(instance, instance.behindId, [])\n instance.currentSourceData.properties = {\n floor_key: this.getFloorKeyForStep(firstStep),\n }\n instance.currentSourceData.geometry.coordinates = [\n [firstStep.coordinates[0].lng, firstStep.coordinates[0].lat],\n ]\n\n this.setLayerPaint(instance.aheadId, drawConfig.aheadConfig)\n this.setLayerPaint(instance.behindId, drawConfig.behindConfig)\n this.setLayerPaint(instance.currentId, drawConfig.behindConfig)\n instance.animationConfig = animationConfig\n\n instance.routeMarker = new MarkerAttribute({\n coordinate: firstStep.startLocation,\n floorId: firstStep.startInsideFloor,\n icon: drawConfig.routeIcon,\n rotationAlignment: \"map\",\n })\n instance.routeMarker.addToMap(this.map)\n\n // Auto-fit by place if enabled\n if (animationConfig.autoFitByPlace?.enabled && route.steps.length > 0) {\n if (firstStep.startInsidePlace) {\n instance.currentPlaceId = firstStep.startInsidePlace\n const fitOptions = {\n padding: animationConfig.autoFitByPlace.padding ?? DEFAULT_AUTO_FIT_PADDING,\n }\n this.mapvxMap.fitRouteByPlace(route, firstStep.startInsidePlace, fitOptions)\n }\n }\n\n animationConfig.callBack?.({ isFinished: false, step: firstStep })\n\n instance.conditions = {\n index: 0,\n coordinatesIndex: 0,\n iconRotation: 0,\n rotatingIcon: true,\n startTime: undefined,\n progress: 0,\n resetTime: false,\n waitStartTime: undefined,\n animationId: requestAnimationFrame((time: number) => this.animateStep(time, instance)),\n onFinish: (time: number) => this.prepareForNextStep(time, instance),\n }\n }\n\n private clearRouteInstance(instance: RouteInstance): void {\n instance.routeMarker?.remove()\n instance.routeMarker = undefined\n this.setSourceData(instance, instance.aheadId, [])\n this.setSourceData(instance, instance.behindId, [])\n instance.currentSourceData.geometry.coordinates = []\n const source = this.map.getSource<GeoJSONSource>(instance.currentId)\n source?.setData(instance.currentSourceData)\n if (\n (instance.animationStatus === \"STARTED\" || instance.stepAnimationStatus === \"ANIMATING\") &&\n instance.conditions != null\n ) {\n cancelAnimationFrame(instance.conditions.animationId)\n }\n instance.animationStatus = \"NO_ROUTE\"\n instance.stepAnimationStatus = \"NO_ROUTE\"\n instance.conditions = undefined\n instance.animationConfig = undefined\n instance.currentPlaceId = undefined\n }\n\n /**\n * Remove a route from the map.\n * @param routeId The ID of the route to remove. If not provided, removes the last added route.\n */\n removeRoute(routeId?: string): void {\n const instance = this.resolveInstance(routeId)\n if (!instance) return\n this.clearRouteInstance(instance)\n this.removeSourcesAndLayersForRoute(instance)\n this.routes.delete(instance.id)\n if (this.lastAddedRouteId === instance.id) {\n const remaining = [...this.routes.keys()]\n this.lastAddedRouteId = remaining.length > 0 ? remaining[remaining.length - 1] : undefined\n }\n }\n\n /**\n * Remove all routes from the map.\n */\n removeAllRoutes(): void {\n for (const instance of this.routes.values()) {\n this.clearRouteInstance(instance)\n this.removeSourcesAndLayersForRoute(instance)\n }\n this.routes.clear()\n this.lastAddedRouteId = undefined\n }\n\n /**\n * Get the IDs of all active routes on the map.\n * @returns Array of route IDs.\n */\n getRouteIds(): string[] {\n return [...this.routes.keys()]\n }\n\n private internalPause(instance: RouteInstance): void {\n if (instance.animationStatus != \"STARTED\") return\n if (instance.conditions == null) return\n cancelAnimationFrame(instance.conditions.animationId)\n instance.animationStatus = \"PAUSED\"\n }\n\n /**\n * Pause the animation of a route.\n * @param routeId The ID of the route. If not provided, pauses the last added route.\n */\n pauseAnimation(routeId?: string): void {\n const instance = this.resolveInstance(routeId)\n if (!instance) return\n this.internalPause(instance)\n }\n\n private internalResume(instance: RouteInstance): void {\n if (instance.animationStatus != \"PAUSED\") return\n if (instance.conditions == null) return\n instance.conditions.resetTime = true\n instance.conditions.animationId = requestAnimationFrame((time: number) =>\n this.animateStep(time, instance)\n )\n instance.animationStatus = \"STARTED\"\n }\n\n /**\n * Resume the animation of a route.\n * @param routeId The ID of the route. If not provided, resumes the last added route.\n */\n resumeAnimation(routeId?: string): void {\n const instance = this.resolveInstance(routeId)\n if (!instance) return\n this.internalResume(instance)\n }\n\n /**\n * Restart the animation of a route.\n * @param routeId The ID of the route. If not provided, restarts the last added route.\n */\n restartAnimation(routeId?: string): void {\n const instance = this.resolveInstance(routeId)\n if (!instance) {\n throw new Error(\"Does not exist animated route to restart\")\n }\n if (instance.animationStatus === \"NO_ROUTE\") {\n throw new Error(\"Does not exist animated route to restart\")\n }\n if (\n instance.conditions == null ||\n instance.animationConfig == null ||\n instance.route == null ||\n instance.routeMarker == null\n ) {\n throw new Error(\"Error: conditions and animationConfig should not be null at this point\")\n }\n\n if (instance.animationStatus === \"STARTED\") {\n cancelAnimationFrame(instance.conditions.animationId)\n }\n\n instance.animationStatus = \"STARTED\"\n\n const firstStep = instance.route.steps[0]\n\n this.updatePlaceFloorForRouting(\n instance,\n firstStep.startInsidePlace,\n firstStep.startInsideFloor\n )\n\n this.setSourceData(instance, instance.aheadId, instance.route.steps)\n this.setSourceData(instance, instance.behindId, [])\n instance.currentSourceData.properties = {\n floor_key: this.getFloorKeyForStep(firstStep),\n }\n instance.currentSourceData.geometry.coordinates = [\n [firstStep.coordinates[0].lng, firstStep.coordinates[0].lat],\n ]\n const source = this.map.getSource<GeoJSONSource>(instance.currentId)\n source?.setData(instance.currentSourceData)\n\n this.setMarkerRotation(instance, 0)?.setLngLat(firstStep.startLocation).addTo(this.map)\n\n // Auto-fit by place if enabled\n if (instance.animationConfig.autoFitByPlace?.enabled && instance.route.steps.length > 0) {\n if (firstStep.startInsidePlace) {\n instance.currentPlaceId = firstStep.startInsidePlace\n const fitOptions = {\n padding: instance.animationConfig.autoFitByPlace.padding ?? DEFAULT_AUTO_FIT_PADDING,\n }\n this.mapvxMap.fitRouteByPlace(instance.route, firstStep.startInsidePlace, fitOptions)\n }\n }\n\n instance.animationConfig.callBack?.({ isFinished: false, step: firstStep })\n\n instance.conditions = {\n index: 0,\n coordinatesIndex: 0,\n iconRotation: 0,\n rotatingIcon: true,\n startTime: undefined,\n progress: 0,\n resetTime: false,\n waitStartTime: undefined,\n animationId: requestAnimationFrame((time: number) => this.animateStep(time, instance)),\n onFinish: (time: number) => this.prepareForNextStep(time, instance),\n }\n }\n\n /**\n * Stop the animation of a route.\n * @param routeId The ID of the route. If not provided, stops the last added route.\n */\n stopAnimation(routeId?: string): void {\n const instance = this.resolveInstance(routeId)\n if (!instance) return\n if (instance.animationStatus == \"FINISHED\") {\n return\n }\n // todo hacer cosas para detener animación\n instance.animationStatus = \"FINISHED\"\n }\n\n /**\n * Add a step animation to a route.\n * @param route The route to animate.\n * @param drawConfig The draw configuration for the route.\n * @param animationConfig The animation configuration for the route.\n */\n addStepAnimation(\n route: MVXRoute,\n drawConfig: InternalAnimationDrawingConfig,\n animationConfig: InternalAnimationConfig\n ) {\n const instance = createRouteInstance(route)\n this.routes.set(instance.id, instance)\n this.lastAddedRouteId = instance.id\n\n instance.stepAnimationStatus = \"WAITING\"\n instance.route = route\n const firstStep = route.steps[0]\n\n this.addSourcesAndLayersForRoute(instance)\n this.updatePlaceFloorForRouting(\n instance,\n firstStep.startInsidePlace,\n firstStep.startInsideFloor\n )\n\n this.setSourceData(instance, instance.aheadId, route.steps)\n this.setSourceData(instance, instance.behindId, [])\n this.setCurrentSourceData(instance, firstStep)\n\n this.setLayerPaint(instance.aheadId, drawConfig.aheadConfig)\n this.setLayerPaint(instance.behindId, drawConfig.behindConfig)\n this.setLayerPaint(instance.currentId, drawConfig.behindConfig)\n instance.animationConfig = animationConfig\n\n instance.routeMarker = new MarkerAttribute({\n coordinate: firstStep.startLocation,\n floorId: firstStep.startInsideFloor,\n icon: drawConfig.routeIcon,\n rotationAlignment: \"map\",\n })\n instance.routeMarker.addToMap(this.map)\n\n this.cameraFollow(instance, firstStep.startLocation)\n\n // Auto-fit by place if enabled\n if (animationConfig.autoFitByPlace?.enabled && route.steps.length > 0) {\n if (firstStep.startInsidePlace) {\n instance.currentPlaceId = firstStep.startInsidePlace\n const fitOptions = {\n padding: animationConfig.autoFitByPlace.padding ?? DEFAULT_AUTO_FIT_PADDING,\n }\n this.mapvxMap.fitRouteByPlace(route, firstStep.startInsidePlace, fitOptions)\n }\n }\n\n animationConfig.callBack?.({ isFinished: false, step: firstStep })\n\n instance.conditions = {\n index: 0,\n coordinatesIndex: 0,\n iconRotation: 0,\n rotatingIcon: true,\n startTime: undefined,\n progress: 0,\n resetTime: false,\n waitStartTime: undefined,\n animationId: 0,\n isStepByStep: true,\n onFinish: () => {\n if (\n instance.conditions == null ||\n instance.animationConfig == null ||\n instance.route == null\n ) {\n throw new Error(\n \"Error: conditions, animationConfig or route should not be null at this point\"\n )\n }\n let { index } = instance.conditions\n index++\n\n const behindSteps = instance.route.steps.slice(0, index)\n const aheadSteps = instance.route.steps.slice(index)\n const step = instance.route.steps[index]\n\n this.setSourceData(instance, instance.behindId, behindSteps)\n this.setSourceData(instance, instance.aheadId, aheadSteps)\n this.setCurrentSourceData(instance, step)\n\n instance.conditions.index = index\n if (index < route.steps.length) {\n const nextStep = route.steps[index]\n\n // Auto-fit by place if enabled and place changed\n if (animationConfig.autoFitByPlace?.enabled && nextStep && instance.route != null) {\n const stepPlaceId = nextStep.startInsidePlace || nextStep.endInsidePlace\n if (stepPlaceId && stepPlaceId !== instance.currentPlaceId) {\n instance.currentPlaceId = stepPlaceId\n const fitOptions = {\n padding: animationConfig.autoFitByPlace.padding ?? DEFAULT_AUTO_FIT_PADDING,\n }\n this.mapvxMap.fitRouteByPlace(instance.route, stepPlaceId, fitOptions)\n }\n }\n\n animationConfig.callBack?.({ isFinished: false, step: nextStep })\n } else {\n animationConfig.callBack?.({ isFinished: true, step: null })\n }\n instance.stepAnimationStatus = \"WAITING\"\n },\n }\n }\n\n /**\n * Animate the next step of a route.\n * @param routeId The ID of the route. If not provided, uses the last added route.\n */\n nextStepAnimation(routeId?: string): void {\n const instance = this.resolveInstance(routeId)\n if (!instance) {\n throw new Error(\"Error: Does not exist step animation\")\n }\n if (instance.stepAnimationStatus === \"NO_ROUTE\") {\n throw new Error(\"Error: Does not exist step animation\")\n }\n if (instance.conditions == null || instance.animationConfig == null || instance.route == null) {\n throw new Error(\n \"Error: conditions, animationConfig or route should not be null at this point\"\n )\n }\n if (instance.stepAnimationStatus === \"ANIMATING\") {\n cancelAnimationFrame(instance.conditions.animationId)\n }\n instance.stepAnimationStatus = \"ANIMATING\"\n\n const { index } = instance.conditions\n if (index < instance.route.steps.length) {\n instance.conditions.coordinatesIndex = 0\n instance.conditions.startTime = undefined\n instance.conditions.progress = 0\n instance.conditions.rotatingIcon = true\n instance.conditions.waitStartTime = undefined\n instance.conditions.animationId = requestAnimationFrame((time: number) =>\n this.animateStep(time, instance)\n )\n } else {\n throw new Error(\"Error: Does not exist next step to animate\")\n }\n }\n\n /**\n * Go to the previous step of a route.\n * @param routeId The ID of the route. If not provided, uses the last added route.\n */\n previousStepAnimation(routeId?: string): void {\n const instance = this.resolveInstance(routeId)\n if (!instance) {\n throw new Error(\"Error: Does not exist step animation\")\n }\n if (instance.stepAnimationStatus === \"NO_ROUTE\") {\n throw new Error(\"Error: Does not exist step animation\")\n }\n if (instance.conditions == null || instance.animationConfig == null || instance.route == null) {\n throw new Error(\n \"Error: conditions, animationConfig or route should not be null at this point\"\n )\n }\n if (instance.stepAnimationStatus === \"ANIMATING\") {\n cancelAnimationFrame(instance.conditions.animationId)\n }\n instance.stepAnimationStatus = \"WAITING\"\n let { index } = instance.conditions\n\n if (index > 0) {\n index--\n const behindSteps = instance.route.steps.slice(0, index)\n const aheadSteps = instance.route.steps.slice(index)\n const step = instance.route.steps[index]\n\n this.setSourceData(instance, instance.behindId, behindSteps)\n this.setSourceData(instance, instance.aheadId, aheadSteps)\n this.setCurrentSourceData(instance, step)\n\n if (step.startInsideFloor != step.endInsideFloor && step.startInsideFloor) {\n this.updatePlaceFloorForRouting(instance, step.startInsidePlace, step.startInsideFloor)\n }\n\n instance.conditions.index = index\n instance.conditions.coordinatesIndex = 0\n instance.conditions.startTime = undefined\n instance.conditions.progress = 0\n instance.conditions.rotatingIcon = true\n instance.conditions.waitStartTime = undefined\n\n this.setMarkerLngLat(instance, step.startLocation)\n\n const previous = behindSteps.at(-1)\n if (previous != null) {\n const coordinates = previous.coordinates.slice(-2)\n const angle = NavFunctions.bearingInDegBetween(coordinates[0], coordinates[1])\n this.setMarkerRotation(instance, angle)\n } else {\n this.setMarkerRotation(instance, 0)\n }\n\n // Auto-fit by place if enabled and place changed\n if (instance.animationConfig.autoFitByPlace?.enabled && step && instance.route != null) {\n const stepPlaceId = step.startInsidePlace || step.endInsidePlace\n if (stepPlaceId && stepPlaceId !== instance.currentPlaceId) {\n instance.currentPlaceId = stepPlaceId\n const fitOptions = {\n padding: instance.animationConfig.autoFitByPlace.padding ?? DEFAULT_AUTO_FIT_PADDING,\n }\n this.mapvxMap.fitRouteByPlace(instance.route, stepPlaceId, fitOptions)\n }\n }\n\n instance.animationConfig.callBack?.({\n isFinished: false,\n step,\n })\n } else {\n throw new Error(\"previous step doesn't exists to animate\")\n }\n }\n\n /**\n * Center on the current step of a route.\n * @param routeId The ID of the route. If not provided, uses the last added route.\n */\n centerOnCurrentStep(routeId?: string): void {\n const instance = this.resolveInstance(routeId)\n if (!instance) {\n throw new Error(\"Error: Does not exist step animation\")\n }\n if (instance.stepAnimationStatus === \"NO_ROUTE\") {\n throw new Error(\"Error: Does not exist step animation\")\n }\n if (instance.conditions == null || instance.animationConfig == null || instance.route == null) {\n throw new Error(\n \"Error: conditions, animationConfig or route should not be null at this point\"\n )\n }\n\n const currentMarkerPosition = instance.routeMarker?.getLngLat()\n\n if (currentMarkerPosition) {\n this.map.panTo(currentMarkerPosition)\n } else {\n throw new Error(\"Error: marker has no position set\")\n }\n }\n\n private prepareForNextStep(timestamp: number, instance: RouteInstance): void {\n if (instance.conditions == null || instance.animationConfig == null || instance.route == null) {\n throw new Error(\n \"Error: conditions, animationConfig or route should not be null at this point\"\n )\n }\n\n const { index } = instance.conditions\n\n const behindSteps = instance.route.steps.slice(0, index + 1)\n const aheadSteps = instance.route.steps.slice(index + 1)\n\n this.setSourceData(instance, instance.behindId, behindSteps)\n this.setSourceData(instance, instance.aheadId, aheadSteps)\n\n instance.currentSourceData.geometry.coordinates = []\n\n if (index + 1 < instance.route.steps.length) {\n const step = instance.route.steps[index + 1]\n instance.currentSourceData.geometry.coordinates.push([\n step.startLocation.lng,\n step.startLocation.lat,\n ])\n instance.currentSourceData.properties = {\n floor_key: this.getFloorKeyForStep(step),\n }\n instance.conditions.startTime = timestamp\n instance.conditions.index++\n instance.conditions.coordinatesIndex = 0\n instance.conditions.progress = 0\n instance.conditions.rotatingIcon = true\n if (!compareLatLng(instance.route.steps[index].endLocation, step.startLocation))\n instance.conditions.nextFloorFirstStepIndex = index + 2\n instance.conditions.animationId = requestAnimationFrame((time: number) =>\n this.animateStep(time, instance)\n )\n\n // Auto-fit by place if enabled and place changed\n if (instance.animationConfig.autoFitByPlace?.enabled && step && instance.route != null) {\n const stepPlaceId = step.startInsidePlace || step.endInsidePlace\n if (stepPlaceId && stepPlaceId !== instance.currentPlaceId) {\n instance.currentPlaceId = stepPlaceId\n const fitOptions = {\n padding: instance.animationConfig.autoFitByPlace.padding ?? DEFAULT_AUTO_FIT_PADDING,\n }\n this.mapvxMap.fitRouteByPlace(instance.route, stepPlaceId, fitOptions)\n }\n }\n\n instance.animationConfig.callBack?.({\n isFinished: false,\n step: instance.route.steps[index + 1],\n })\n } else {\n // finishes animation\n instance.animationConfig.callBack?.({ isFinished: true, step: null })\n instance.animationStatus = \"FINISHED\"\n }\n }\n\n private animateStep(timestamp: number, instance: RouteInstance): void {\n if (instance.conditions == null || instance.animationConfig == null || instance.route == null) {\n throw new Error(\"Error: conditions and animationConfig should not be null at this point\")\n }\n let { startTime, resetTime, progress } = instance.conditions\n const { coordinatesIndex, iconRotation, index, onFinish, rotatingIcon, waitStartTime } =\n instance.conditions\n const { stepTime, minimumSpeed, iconRotationTime, changeFloorTime } = instance.animationConfig\n\n if (startTime == null) {\n instance.conditions.startTime = timestamp\n instance.conditions.animationId = requestAnimationFrame((time: number) =>\n this.animateStep(time, instance)\n )\n return\n }\n if (resetTime) {\n startTime = timestamp - progress\n instance.conditions.startTime = startTime\n resetTime = false\n instance.conditions.resetTime = resetTime\n } else {\n progress = timestamp - startTime\n instance.conditions.progress = progress\n }\n\n const progressInSeconds = progress / 1000\n\n const step = instance.route.steps[index]\n if (step.coordinates.length <= 0) {\n onFinish?.(timestamp)\n return\n }\n\n const start = step.coordinates[coordinatesIndex]\n const end = step.coordinates[coordinatesIndex + 1]\n\n if (start != null && end != null) {\n if (rotatingIcon) {\n const angle = NavFunctions.bearingInDegBetween(start, end)\n if (\n iconRotationTime === 0 ||\n instance.conditions.nextFloorFirstStepIndex === index ||\n Math.abs(angle - instance.conditions.iconRotation) < 15\n ) {\n instance.conditions.nextFloorFirstStepIndex = undefined\n this.setMarkerRotation(instance, angle)\n instance.conditions.startTime = timestamp\n instance.conditions.rotatingIcon = false\n instance.conditions.iconRotation = angle\n instance.conditions.animationId = requestAnimationFrame((time: number) =>\n this.animateStep(time, instance)\n )\n return\n } else if (progressInSeconds < iconRotationTime) {\n const intermediateAngle = NavFunctions.intermediateAngleBetween(\n iconRotation,\n angle,\n progressInSeconds / iconRotationTime\n )\n this.setMarkerRotation(instance, intermediateAngle)\n instance.conditions.animationId = requestAnimationFrame((time: number) =>\n this.animateStep(time, instance)\n )\n return\n } else {\n this.setMarkerRotation(instance, angle)\n instance.conditions.startTime = timestamp\n instance.conditions.rotatingIcon = false\n instance.conditions.iconRotation = angle\n instance.conditions.animationId = requestAnimationFrame((time: number) =>\n this.animateStep(time, instance)\n )\n return\n }\n }\n\n const distance = NavFunctions.distance(start, end)\n const speed = Math.max(step.distance / stepTime, minimumSpeed ?? 0)\n\n if (speed * progressInSeconds > distance) {\n instance.currentSourceData.geometry.coordinates.push([end.lng, end.lat])\n const source = this.map.getSource<GeoJSONSource>(instance.currentId)\n source?.setData(instance.currentSourceData)\n if (coordinatesIndex + 2 < step.coordinates.length) {\n const next = step.coordinates[coordinatesIndex + 2]\n if (!compareLatLng(end, next)) {\n if (instance.conditions.isStepByStep) {\n instance.conditions.rotatingIcon = true\n } else {\n const nextAngle = NavFunctions.bearingInDegBetween(end, next)\n instance.conditions.iconRotation = nextAngle\n instance.routeMarker?.setRotation(nextAngle)\n }\n }\n instance.conditions.startTime = timestamp\n instance.conditions.progress = 0\n instance.conditions.coordinatesIndex++\n instance.conditions.animationId = requestAnimationFrame((time: number) =>\n this.animateStep(time, instance)\n )\n return\n } else if (step.startInsideFloor !== step.endInsideFloor) {\n if (waitStartTime == null) {\n instance.conditions.waitStartTime = timestamp\n instance.conditions.animationId = requestAnimationFrame((time: number) =>\n this.animateStep(time, instance)\n )\n return\n }\n if (timestamp - waitStartTime < changeFloorTime * 1000) {\n instance.conditions.animationId = requestAnimationFrame((time: number) =>\n this.animateStep(time, instance)\n )\n return\n } else {\n this.updatePlaceFloorForRouting(instance, step.endInsidePlace, step.endInsideFloor)\n this.setMarkerLngLat(instance, step.endLocation)\n instance.conditions.waitStartTime = undefined\n onFinish?.(timestamp)\n return\n }\n } else {\n onFinish?.(timestamp)\n return\n }\n }\n\n const fraction = (speed * progressInSeconds) / distance\n const point =\n distance === 0\n ? end\n : NavFunctions.intermediatePointBetween(start, end, Math.min(fraction, 1))\n instance.currentSourceData.geometry.coordinates.push([point.lng, point.lat])\n const source = this.map.getSource<GeoJSONSource>(instance.currentId)\n source?.setData(instance.currentSourceData)\n this.setMarkerLngLat(instance, point)\n instance.routeMarker?.addTo(this.map)\n instance.conditions.animationId = requestAnimationFrame((time: number) =>\n this.animateStep(time, instance)\n )\n return\n } else {\n onFinish?.(timestamp)\n return\n }\n }\n\n private setMarkerLngLat(instance: RouteInstance, point: LatLng): void {\n if (instance.conditions?.isStepByStep) {\n this.cameraFollow(instance, point)\n }\n instance.routeMarker?.setLngLat(point)\n }\n\n private setMarkerRotation(instance: RouteInstance, angle: number): Marker | undefined {\n if (instance.conditions?.isStepByStep) {\n this.mapvxMap.updateCamera({\n duration: instance.animationConfig?.iconRotationTime,\n animate: true,\n bearing: angle,\n center: instance.routeMarker?.getLngLat(),\n })\n }\n return instance.routeMarker?.setRotation(angle)\n }\n\n setMarkerFloor(floorId?: string, routeId?: string): void {\n const instance = this.resolveInstance(routeId)\n instance?.routeMarker?.setFloor(floorId)\n }\n\n private cameraFollow(instance: RouteInstance, point: LatLng): void {\n this.mapvxMap.updateCamera({\n center: point,\n animate: true,\n bearing: instance.routeMarker?.getRotation(),\n duration: instance.animationConfig?.iconRotationTime,\n })\n }\n}\n","/**\n * Array of language codes that use right-to-left (RTL) text direction\n * These languages require special handling for text layout and UI direction\n * @group Utils\n */\nexport const rtlLanguages = [\"ar\"]\n","import type { MVXLocation } from \"./location\"\nimport type { RouteStyle } from \"./routeStyle\"\n\n/**\n * Represents the announce format for the route.\n * @group Routes\n */\nexport enum AnnounceFormat {\n cardinal = \"CARDINAL\",\n clock = \"CLOCK\",\n relative = \"RELATIVE\",\n}\n\n/**\n * Represents the unit system for the route.\n * @group Routes\n */\nexport enum UnitSystem {\n metric = \"METRIC\",\n imperial = \"IMPERIAL\",\n steps = \"STEPS\",\n}\n\n/**\n * Represents the transportation mode for the route.\n * @group Routes\n */\nexport enum TransportationMode {\n walking = \"WALKING\",\n driving = \"DRIVING\",\n bicycling = \"BICYCLING\",\n transit = \"TRANSIT\",\n}\n\n/**\n * The parameters to get a route.\n * @group Routes\n */\nexport interface GetRouteConfiguration {\n /**\n * The initial location for the route.\n */\n initialLocation: RouteLocation\n\n /**\n * The final location for the route.\n */\n finalLocation: RouteLocation\n\n /**\n * The option to generate a route (if available) for people with mobility disabilities.\n * @defaultValue `false`.\n */\n preferAccessibleRoute?: boolean\n\n /**\n * The language for the instructions.\n * Default to `en`.\n */\n language?: string\n\n /**\n * The unit system used for the distance.\n * Default to `METRIC`.\n */\n unitSystem?: UnitSystem\n\n /**\n * The format used to announce directions in the instructions.\n * Default to `RELATIVE`.\n */\n announceFormat?: AnnounceFormat\n}\n/**\n * Class representing the configuration of a route.\n * @hidden\n */\nexport class InternalGetRouteConfiguration implements GetRouteConfiguration {\n initialLocation: RouteLocation\n finalLocation: RouteLocation\n preferAccessibleRoute: boolean\n language: string\n unitSystem: UnitSystem\n announceFormat: AnnounceFormat\n\n /**\n * Create a new route configuration.\n * @param initialLocation The initial location for the route.\n * @param finalLocation The final location for the route.\n * @param preferAccessibleRoute The option to generate a route (if available) for people with mobility disabilities.\n * @param language The language for the instructions.\n * @param unitSystem The unit system used for the distance.\n * @param announceFormat The format used to announce directions in the instructions.\n */\n constructor(config: GetRouteConfiguration) {\n this.initialLocation = config.initialLocation\n this.finalLocation = config.finalLocation\n this.preferAccessibleRoute = config.preferAccessibleRoute ?? false\n this.language = config.language ?? \"en\"\n this.unitSystem = config.unitSystem ?? UnitSystem.metric\n this.announceFormat = config.announceFormat ?? AnnounceFormat.relative\n }\n}\n\n/**\n * Parameters to configure how to draw the route on the map.\n * @group Routes\n */\nexport interface DrawRouteConfiguration {\n /**\n * The width in pixels of the route line on the map.\n * @defaultValue `10`\n */\n polylineWidth?: number\n\n /**\n * The style for the steps ahead of the user.\n * If omitted, default to `{ type: \"Solid\", color: \"#1257ED\", }`.\n * @defaultValue `{ type: \"Solid\", color: \"#1257ED\" }`\n */\n routeStyle?: RouteStyle\n}\n\n/**\n * Internal class for the configuration to draw the route on a map.\n * @hidden\n */\nexport class InternalDrawRouteConfiguration implements DrawRouteConfiguration {\n polylineWidth: number\n routeStyle: RouteStyle\n /**\n * Create a new configuration to draw a route in the map.\n * @param polylineWidth The width of the route line in the map. If omitted, default to `10`.\n * @param routeStyle The style for the steps on the route. If omitted, default to `{ color: \"#33B5E5\" }`.\n */\n constructor(config: DrawRouteConfiguration) {\n this.polylineWidth = config.polylineWidth ?? 10\n this.routeStyle = config.routeStyle ?? {\n type: \"Solid\",\n color: \"#1257ED\",\n }\n }\n}\n\n/**\n * Interface that represent a place with their id.\n * @group Routes\n */\nexport interface IdLocation {\n /**\n * The ID of the place.\n */\n id: string\n\n /**\n * The level of the floor in the parent place where the place is found.\n * This is only necessary if the place represented by the ID exists on multiple floors.\n * If omitted and the place ID represents a place found on multiple floors,\n * the first floor where this place is present will be used.\n */\n level?: number\n}\n\n/**\n * Type that represent a location to be used in the generation of a route.\n * @group Routes\n */\nexport type RouteLocation = IdLocation | MVXLocation\n","import {\n routeAnimationDataUrl,\n createRouteAnimationIconDataUrl,\n type RouteAnimationIconConfig,\n} from \"../../assets/icons\"\nimport { type MVXRouteStep } from \"./route\"\nimport { InternalDrawRouteConfiguration } from \"./routeConfiguration\"\nimport { type RouteStyle } from \"./routeStyle\"\nimport { type PaddingOptions } from \"./fitOptions\"\n\n/**\n * Represents the status of the animation.\n * @group Routes\n */\nexport type AnimationStatus =\n | { isFinished: false; step: MVXRouteStep }\n | { isFinished: true; step: null }\n\n/**\n * Parameters to configure the route animation.\n * @group Routes\n */\nexport interface AnimationConfig {\n /**\n * (Optional) The time in seconds to use for each step animation.\n * If omitted, default to `3`.\n * @defaultValue `3`\n */\n stepTime?: number\n\n /**\n * (Optional) The minimum speed in m/s to use in the animation.\n * If the calculated speed for the animation of a step is less than this, this will be used for its animation.\n * @defaultValue `40`\n */\n minimumSpeed?: number\n\n /**\n * (Optional) The time in seconds to wait before changing the floor when the step is a changing floor step.\n * @defaultValue `0`\n */\n changeFloorTime?: number\n\n /**\n * (Optional) The time in seconds to use in the rotation of the icon.\n * @defaultValue `0`\n */\n iconRotationTime?: number\n\n /**\n * (Optional) A function that receive the status of the animation.\n *\n * In a route animation:\n * - While the animation is running, this is called at the start of the animation of each step.\n * - When the animation es finished, this is called again a single time with `{ isFinished: true; step: null }`.\n *\n * In a step by step animation:\n * - Initially will be called with the first step to animate.\n * - At the end of each step animation:\n * - If there exist more step to animate, it will be called with the next step to animate.\n * - Else, it will be called with `{ isFinished: true; step: null }`.\n * @param status The status of the animation.\n */\n callBack?: (status: AnimationStatus) => void\n\n /**\n * (Optional) Configuration for automatic map fitting when the route crosses different places/buildings.\n * When enabled, the map will automatically adjust its view to show only the steps within the current place\n * when the route animation enters a new place. This is particularly useful for indoor navigation where\n * routes may cross multiple buildings or floors.\n *\n * @example\n * ```typescript\n * // Enable auto-fit with custom padding\n * const animationConfig: AnimationConfig = {\n * callBack: ({ isFinished, step }) => {\n * console.log('Step:', step);\n * },\n * autoFitByPlace: {\n * enabled: true,\n * padding: { top: 200, right: 200, bottom: 200, left: 200 }\n * }\n * };\n *\n * // Enable auto-fit with default padding (150px on all sides)\n * const animationConfig2: AnimationConfig = {\n * callBack: ({ isFinished, step }) => {},\n * autoFitByPlace: {\n * enabled: true\n * }\n * };\n * ```\n *\n * @defaultValue `undefined` (disabled by default for backward compatibility)\n */\n autoFitByPlace?: {\n /**\n * Whether automatic fitting by place is enabled.\n * When `true`, the map will automatically adjust its bounds when the route enters a new place.\n * Must be explicitly set to `true` to enable this feature.\n */\n enabled: boolean\n\n /**\n * (Optional) Padding in pixels to be added around the fitted bounds.\n * If not provided, defaults to `{ top: 150, right: 150, bottom: 150, left: 150 }`.\n * Each value represents the padding for the respective edge of the viewport.\n * @defaultValue `{ top: 150, right: 150, bottom: 150, left: 150 }`\n */\n padding?: PaddingOptions\n }\n}\n\nexport class InternalAnimationConfig implements AnimationConfig {\n stepTime: number\n minimumSpeed: number\n changeFloorTime: number\n iconRotationTime: number\n callBack?: (status: AnimationStatus) => void\n autoFitByPlace?: AnimationConfig[\"autoFitByPlace\"]\n\n constructor(config: AnimationConfig) {\n this.stepTime = config.stepTime ?? 3\n this.minimumSpeed = config.minimumSpeed ?? 40\n this.changeFloorTime = config.changeFloorTime ?? 0\n this.iconRotationTime = config.iconRotationTime ?? 0\n this.callBack = config.callBack\n this.autoFitByPlace = config.autoFitByPlace\n }\n}\n\n/**\n * Parameters to configure the drawing of a animated route.\n * @group Routes\n */\nexport interface AnimationDrawingConfig {\n /**\n * The style for the route ahead of the icon representing the user.\n * @defaultValue `{ type: \"Solid\", color: \"#757575\"}`\n */\n aheadPathStyle?: RouteStyle\n\n /**\n * The style for the route behind of the icon representing the user.\n * @defaultValue `{ type: \"Solid\", color: \"#0076B6\"}`\n */\n behindPathStyle?: RouteStyle\n\n /**\n * The width in pixels of the route line on the map.\n * @defaultValue `10`\n */\n polylineWidth?: number\n\n /**\n * A HTML element that contain the icon used to represent the moving user.\n * By default, the image should represent a user pointing north.\n */\n routeIcon?: HTMLElement\n\n /**\n * Configuration for the route animation icon appearance.\n * If provided, this will be used to generate the icon instead of the default one.\n * This option is ignored if `routeIcon` is also provided.\n * @defaultValue Uses default icon with blue background (#0076B6) and white arrow (#FFFFFF).\n */\n routeIconConfig?: RouteAnimationIconConfig\n}\n\n/**\n * Represents the drawing configuration for the animation.\n * @group Routes\n * @hidden\n */\nexport class InternalAnimationDrawingConfig implements AnimationDrawingConfig {\n aheadPathStyle: RouteStyle\n behindPathStyle: RouteStyle\n polylineWidth: number\n routeIcon: HTMLElement\n\n constructor(data: AnimationDrawingConfig) {\n this.aheadPathStyle = data.aheadPathStyle ?? {\n type: \"Solid\",\n color: \"#757575\",\n }\n this.behindPathStyle = data.behindPathStyle ?? {\n type: \"Solid\",\n color: \"#0076B6\",\n }\n this.polylineWidth = data.polylineWidth ?? 10\n if (data.routeIcon != null) {\n this.routeIcon = data.routeIcon\n } else {\n const image = new Image(40, 40)\n if (data.routeIconConfig != null) {\n image.src = createRouteAnimationIconDataUrl(data.routeIconConfig)\n } else {\n image.src = routeAnimationDataUrl\n }\n this.routeIcon = image\n }\n }\n\n get aheadConfig(): InternalDrawRouteConfiguration {\n return new InternalDrawRouteConfiguration({\n polylineWidth: this.polylineWidth,\n routeStyle: this.aheadPathStyle,\n })\n }\n\n get behindConfig(): InternalDrawRouteConfiguration {\n return new InternalDrawRouteConfiguration({\n polylineWidth: this.polylineWidth,\n routeStyle: this.behindPathStyle,\n })\n }\n}\n","/**\n * Convert an unknown error to an Error object.\n * @group Utils\n * @param error - The unknown error.\n * @returns An Error object.\n */\nexport function convertToError(error: unknown): Error {\n if (error instanceof Error) {\n return error\n } else {\n const text = String(error)\n return new Error(text)\n }\n}\n","import { type LogArgument } from \"rollbar\"\nimport { Logger } from \"../../logger/logger\"\nimport { convertToError } from \"../../utils/error\"\n\n/**\n * Represents the abstract class for the loggeable.\n * @hidden\n */\nexport abstract class Loggeable {\n /**\n * The object to log the events and errors.\n */\n private readonly logger: Logger\n\n constructor() {\n this.logger = Logger.getInstance()\n }\n\n /**\n * Add values to identify the client.\n * @param segmentation The pair values to use as segmentation.\n * @returns The segmentation with the added values.\n */\n protected abstract prepareSegmentation(\n segmentation: Record<string, string>\n ): Record<string, string>\n\n /**\n * To log a event in this class.\n * @param eventName The event name.\n * @param eventSegmentation The pair key, value to segment this event count.\n */\n protected logEvent(eventName: string, eventSegmentation: Record<string, string> = {}): void {\n this.logger.logEvent(eventName, this.prepareSegmentation(eventSegmentation))\n }\n\n /**\n * To log a captured error in this class.\n * @param error The captured error\n * @param args The rest of the arguments.\n */\n protected logError(error: unknown, ...args: LogArgument[]): void {\n const errorTyped = convertToError(error)\n this.logger.logError(errorTyped, ...args)\n }\n\n /**\n * To log a captured error as a warning.\n * @param error The captured error\n * @param args The rest of the arguments.\n */\n protected logWarning(error: unknown, ...args: LogArgument[]): void {\n const errorTyped = convertToError(error)\n this.logger.logWarning(errorTyped, ...args)\n }\n\n protected logDebug(...args: LogArgument[]): void {\n this.logger.logDebug(...args)\n }\n\n /**\n * Prints in console any number of given arguments, if and only if, app is running in debug mode.\n * @param args An array of arguments to log\n */\n protected debugLog(...args: unknown[]) {\n this.logger.debugLog(args)\n }\n}\n","import type { MapVxRequestContext } from \"../../config/sdkConfig\"\nimport type { LatLng } from \"./latLng\"\n\n/**\n * Configuration options for map tile caching.\n * Allows controlling how map tiles are cached in memory and persisted via service worker.\n *\n * @example\n * ```typescript\n * const tileCacheConfig: MapTileCacheConfig = {\n * enabled: true,\n * maxTiles: 500,\n * ttlMs: 60 * 60 * 1000, // 1 hour\n * persistToServiceWorker: true,\n * preloadAdjacentZooms: false\n * };\n * ```\n *\n * @group Configuration\n */\nexport interface MapTileCacheConfig {\n /**\n * Enable tile caching\n * When false, tiles are fetched directly without caching\n * @default true\n */\n enabled?: boolean\n\n /**\n * Maximum number of tiles to keep in MapLibre's memory cache\n * Higher values use more memory but improve performance for panning/zooming\n * @default 400\n */\n maxTiles?: number\n\n /**\n * Time-to-live in milliseconds for cached tiles\n * After this time, tiles will be re-fetched on next request\n * @default 1800000 (30 minutes)\n */\n ttlMs?: number\n\n /**\n * Enable service worker persistence for offline tile access\n * When true, tiles are cached via the cached-tile:// protocol\n * @default true\n */\n persistToServiceWorker?: boolean\n\n /**\n * Preload tiles for adjacent zoom levels\n * Improves zoom transitions but increases initial load time and bandwidth\n * @default false\n */\n preloadAdjacentZooms?: boolean\n}\n\n/**\n * Default values for tile cache configuration\n * @internal\n */\nexport const DEFAULT_TILE_CACHE_CONFIG: Required<MapTileCacheConfig> = {\n enabled: true,\n maxTiles: 400,\n ttlMs: 30 * 60 * 1000, // 30 minutes\n persistToServiceWorker: true,\n preloadAdjacentZooms: false,\n}\n\n/**\n * Basic configuration for the map.\n * Provides essential settings for initializing and customizing map behavior.\n *\n * @example\n * ```typescript\n * const mapConfig: MapConfig = {\n * zoom: 15,\n * center: { lat: 40.7128, lng: -74.0060 },\n * parentPlaceId: \"building-1\",\n * onMapReady: () => console.log(\"Map is ready!\"),\n * enableHover: true,\n * showCompass: true\n * };\n * ```\n *\n * @group Map\n *\n * @property zoom - The initial zoom level of the map.\n * @property center - The initial center coordinates of the map.\n * @property parentPlaceId - (Optional) The ID of the parent place to display.\n * @property otherPotentialParentPlacesIds - (Optional) List of alternative parent place IDs.\n * @property onMapReady - (Optional) Callback invoked when the map is ready.\n * @property onZoomEnd - (Optional) Callback invoked when the zoom operation ends. Receives the new zoom level.\n * @property onRotate - (Optional) Callback invoked when the map is rotated. Receives the rotation in degrees.\n * @property onFloorChange - (Optional) Callback invoked when the floor changes. Receives the new floor ID.\n * @property onParentPlaceChange - (Optional) Callback invoked when the parent place changes. Receives the new parent place ID.\n * @property lang - (Optional) Language code for map labels and UI.\n * @property minZoom - (Optional) Minimum allowed zoom level.\n * @property maxZoom - (Optional) Maximum allowed zoom level.\n * @property pitch - (Optional) The pitch (tilt) of the map in degrees.\n * @property maxBounds - (Optional) Array of coordinates defining the maximum bounds of the map.\n * @property enableHover - (Optional) Whether to enable hover interactions on the map.\n * @property showCompass - (Optional) Whether to display the compass control.\n * @property showZoom - (Optional) Whether to display the zoom control.\n * @property navigationPosition - (Optional) Position of the navigation controls on the map.\n * @property bearingSnap - (Optional) The bearing snap threshold in degrees.\n * @property institutionId - (Optional) The institution identifier for map context. Required for loading map related data from Portal.\n * @property authToken - (Optional) Authentication token for accessing protected map resources. Required for loading map related data from Portal.\n * @property apiUrl - (Optional) Injected by SDK when creating map; base API URL for map requests.\n * @property mapvxRequestContext - (Optional) Injected by SDK when creating map; context sent as headers to public-api.mapvx.com.\n */\nexport interface MapConfig {\n /**\n * Initial zoom level for the map\n * Higher values indicate more zoomed in view\n */\n zoom: number\n\n /**\n * Initial center coordinates for the map\n * @see {@link LatLng} for coordinate structure\n */\n center: LatLng\n\n /**\n * Identifier of the parent place for the map\n * Used for context and navigation within a specific building or area\n */\n parentPlaceId?: string\n\n /**\n * List of other potential parent place identifiers\n * Used for multi-building navigation scenarios\n */\n otherPotentialParentPlacesIds?: string[]\n\n /**\n * Callback function executed when the map is ready\n * @param event - Map ready event\n */\n onMapReady?: () => void\n\n /**\n * Callback function executed when zoom level changes\n * @param zoomLvl - New zoom level (optional)\n */\n onZoomEnd?: (zoomLvl?: number) => void\n\n /**\n * Callback function executed when map rotation changes\n * @param degrees - Rotation angle in degrees\n */\n onRotate?: (degrees: number) => void\n\n /**\n * Callback function executed when floor changes\n * @param newFloorId - New floor identifier\n */\n onFloorChange?: (newFloorId: string) => void\n\n /**\n * Callback function executed when parent place changes\n * @param newParentPlaceId - New parent place identifier\n */\n onParentPlaceChange?: (newParentPlaceId: string) => void\n\n /**\n * Language code for map localization\n * @example\n * ```typescript\n * lang: \"en\" // English\n * lang: \"es\" // Spanish\n * ```\n */\n lang?: string\n\n /**\n * Minimum zoom level allowed on the map\n * Prevents users from zooming out too far\n */\n minZoom?: number\n\n /**\n * Maximum zoom level allowed on the map\n * Prevents users from zooming in too close\n */\n maxZoom?: number\n\n /**\n * Map pitch angle in degrees\n * Controls the 3D tilt of the map view\n */\n pitch?: number\n\n /**\n * Maximum bounds for the map view\n * Restricts the map to a specific geographic area\n * @see {@link LatLng} for coordinate structure\n *\n * @example\n * ```typescript\n * maxBounds: [\n * { lat: 40.7589, lng: -73.9851 }, // Southwest corner\n * { lat: 40.7128, lng: -74.0060 } // Northeast corner\n * ]\n * ```\n */\n maxBounds?: LatLng[]\n\n /**\n * Flag to enable hover effects on map elements\n * Enables interactive hover states for markers and other map features\n */\n enableHover?: boolean\n\n /**\n * Flag to show the compass control on the map\n * Provides a visual indicator of map orientation\n */\n showCompass?: boolean\n\n /**\n * Flag to show zoom controls on the map\n * Provides buttons for zooming in and out\n */\n showZoom?: boolean\n\n /**\n * Position of navigation controls on the map\n * Controls the placement of zoom, compass, and other navigation elements\n *\n * @example\n * ```typescript\n * navigationPosition: \"top-right\" // Top right corner\n * navigationPosition: \"bottom-left\" // Bottom left corner\n * ```\n */\n navigationPosition?: \"top-right\" | \"bottom-right\" | \"bottom-left\" | \"top-left\"\n\n /**\n * Bearing snap angle in degrees\n * Controls the snapping behavior when rotating the map\n *\n * @example\n * ```typescript\n * bearingSnap: 15 // Snap to 15-degree increments\n * ```\n */\n bearingSnap?: number\n institutionId?: string\n authToken?: string\n\n /**\n * Base API URL for map requests. Set by SDK when creating map from createMap().\n * @internal\n */\n apiUrl?: string\n\n /**\n * Context sent with requests to public-api.mapvx.com. Set by SDK when creating map from createMap().\n * @internal\n */\n mapvxRequestContext?: MapVxRequestContext\n\n /**\n * Tile cache configuration options\n * Controls how map tiles are cached in memory and persisted\n * @see {@link MapTileCacheConfig} for available options\n */\n tileCache?: MapTileCacheConfig\n}\n","/**\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Decodes an encoded path string into a sequence of LatLngs.\n *\n * See {@link https://developers.google.com/maps/documentation/utilities/polylinealgorithm}\n *\n * #### Example\n *\n * ```js\n * import { decode } from \"@googlemaps/polyline-codec\";\n *\n * const encoded = \"_p~iF~ps|U_ulLnnqC_mqNvxq`@\";\n * console.log(decode(encoded, 5));\n * // [\n * // [38.5, -120.2],\n * // [40.7, -120.95],\n * // [43.252, -126.453],\n * // ]\n * ```\n */\nvar decode = function (encodedPath, precision) {\n if (precision === void 0) { precision = 5; }\n var factor = Math.pow(10, precision);\n var len = encodedPath.length;\n // For speed we preallocate to an upper bound on the final length, then\n // truncate the array before returning.\n var path = new Array(Math.floor(encodedPath.length / 2));\n var index = 0;\n var lat = 0;\n var lng = 0;\n var pointIndex = 0;\n // This code has been profiled and optimized, so don't modify it without\n // measuring its performance.\n for (; index < len; ++pointIndex) {\n // Fully unrolling the following loops speeds things up about 5%.\n var result = 1;\n var shift = 0;\n var b = void 0;\n do {\n // Invariant: \"result\" is current partial result plus (1 << shift).\n // The following line effectively clears this bit by decrementing \"b\".\n b = encodedPath.charCodeAt(index++) - 63 - 1;\n result += b << shift;\n shift += 5;\n } while (b >= 0x1f); // See note above.\n lat += result & 1 ? ~(result >> 1) : result >> 1;\n result = 1;\n shift = 0;\n do {\n b = encodedPath.charCodeAt(index++) - 63 - 1;\n result += b << shift;\n shift += 5;\n } while (b >= 0x1f);\n lng += result & 1 ? ~(result >> 1) : result >> 1;\n path[pointIndex] = [lat / factor, lng / factor];\n }\n // truncate array\n path.length = pointIndex;\n return path;\n};\n/**\n * Polyline encodes an array of objects having lat and lng properties.\n *\n * See {@link https://developers.google.com/maps/documentation/utilities/polylinealgorithm}\n *\n * #### Example\n *\n * ```js\n * import { encode } from \"@googlemaps/polyline-codec\";\n *\n * const path = [\n * [38.5, -120.2],\n * [40.7, -120.95],\n * [43.252, -126.453],\n * ];\n * console.log(encode(path, 5));\n * // \"_p~iF~ps|U_ulLnnqC_mqNvxq`@\"\n * ```\n */\nvar encode = function (path, precision) {\n if (precision === void 0) { precision = 5; }\n var factor = Math.pow(10, precision);\n var transform = function latLngToFixed(latLng) {\n if (!Array.isArray(latLng)) {\n latLng = [latLng.lat, latLng.lng];\n }\n return [round(latLng[0] * factor), round(latLng[1] * factor)];\n };\n return polylineEncodeLine(path, transform);\n};\n/**\n * Encodes a generic polyline; optionally performing a transform on each point\n * before encoding it.\n *\n * @ignore\n */\nvar polylineEncodeLine = function (array, transform) {\n var v = [];\n var start = [0, 0];\n var end;\n for (var i = 0, I = array.length; i < I; ++i) {\n // In order to prevent drift (from quantizing deltas), we explicitly convert\n // coordinates to fixed-precision to obtain integer deltas.\n end = transform(array[i]);\n // Push the next edge\n polylineEncodeSigned(round(end[0]) - round(start[0]), v); // lat\n polylineEncodeSigned(round(end[1]) - round(start[1]), v); // lng\n start = end;\n }\n return v.join(\"\");\n};\n/**\n * Encodes the given value in our compact polyline format, appending the\n * encoded value to the given array of strings.\n *\n * @ignore\n */\nvar polylineEncodeSigned = function (value, array) {\n return polylineEncodeUnsigned(value < 0 ? ~(value << 1) : value << 1, array);\n};\n/**\n * Helper function for encodeSigned.\n *\n * @ignore\n */\nvar polylineEncodeUnsigned = function (value, array) {\n while (value >= 0x20) {\n array.push(String.fromCharCode((0x20 | (value & 0x1f)) + 63));\n value >>= 5;\n }\n array.push(String.fromCharCode(value + 63));\n return array;\n};\n/**\n * @ignore\n */\nvar round = function (v) {\n return Math.floor(Math.abs(v) + 0.5) * (v >= 0 ? 1 : -1);\n};\n\nexport { decode, encode, polylineEncodeLine };\n//# sourceMappingURL=index.esm.js.map\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","import { decode } from \"@googlemaps/polyline-codec\"\nimport { type Position } from \"geojson\"\nimport { v4 as uuid } from \"uuid\"\nimport {\n type RouteLegResponse,\n type RoutePolylineResponse,\n type RouteResponse,\n type RouteStepResponse,\n} from \"../../interfaces/routeResponse\"\nimport { type LatLng } from \"./latLng\"\n\n/**\n * Represents a complete route in MapVX that can contain multiple legs.\n * Each route is composed of a series of legs that connect different points.\n * @group Routes\n */\nexport class MVXRoute {\n /**\n * Unique identifier for the route generated automatically\n */\n id: string\n\n /**\n * List of legs that compose the complete route\n */\n legs: MVXRouteLeg[]\n\n /**\n * Creates a new route instance from API response data\n * @hidden\n * @param data API response data containing route information\n */\n constructor(data: RouteResponse) {\n this.id = uuid()\n this.legs = []\n data.legs.forEach((legData) => {\n const leg = new MVXRouteLeg(legData)\n this.legs.push(leg)\n })\n }\n\n /**\n * Gets all steps of the route by combining steps from all legs\n * @returns Array with all route steps\n */\n get steps(): MVXRouteStep[] {\n return this.legs.flatMap((leg) => leg.steps)\n }\n\n /**\n * Gets the total duration of the route.\n * This property calculates the sum of the duration of all legs in the route.\n *\n * @returns {number} The total duration of the route, in seconds.\n */\n get duration(): number {\n return this.legs\n .map((leg) => leg.duration)\n .reduce((accumulator, currentValue) => accumulator + currentValue, 0)\n }\n\n /**\n * Gets the total length of the route.\n * This property calculates the sum of the length of all legs in the route.\n *\n * @returns {number} The total length of the route, in meters.\n */\n get length(): number {\n return this.legs\n .map((leg) => leg.distance)\n .reduce((accumulator, currentValue) => accumulator + currentValue, 0)\n }\n}\n\n/**\n * Represents a route leg that connects two specific points.\n * Each leg contains information about distance, duration, and detailed steps.\n * @group Routes\n */\nexport class MVXRouteLeg {\n /**\n * Total distance of the leg in meters\n */\n distance: number\n\n /**\n * Estimated duration of the leg in seconds\n */\n duration: number\n\n /**\n * Starting location of the leg\n */\n startLocation: LatLng\n\n /**\n * Ending location of the leg\n */\n endLocation: LatLng\n\n /**\n * List of detailed steps that compose this leg\n */\n steps: MVXRouteStep[]\n\n /**\n * Creates a new route leg instance from response data\n * @hidden\n * @param data API response data containing leg information\n */\n constructor(data: RouteLegResponse) {\n this.distance = data.distance.value\n this.duration = data.duration.value\n this.startLocation = data.start_location\n this.endLocation = data.end_location\n this.steps = []\n data.steps.forEach((stepData) => {\n const step = new MVXRouteStep(stepData)\n this.steps.push(step)\n })\n }\n}\n\n/**\n * Represents an individual step within a route leg.\n * Each step contains specific instructions and coordinates for navigation.\n * @group Routes\n */\nexport class MVXRouteStep {\n /**\n * Distance of the step in meters\n */\n distance: number\n\n /**\n * Estimated duration of the step in seconds\n */\n duration: number\n\n /**\n * Starting location of the step\n */\n startLocation: LatLng\n\n /**\n * Identifier of the floor where the step begins (if applicable)\n */\n startInsideFloor?: string\n\n /**\n * Identifier of the place where the step begins (if applicable)\n */\n startInsidePlace?: string\n\n /**\n * Ending location of the step\n */\n endLocation: LatLng\n\n /**\n * Identifier of the floor where the step ends (if applicable)\n */\n endInsideFloor?: string\n\n /**\n * Identifier of the place where the step ends (if applicable)\n */\n endInsidePlace?: string\n\n /**\n * HTML formatted instructions to display to the user\n */\n htmlInstruction: string\n\n /**\n * Plain text instructions to display to the user\n */\n plainInstruction: string\n\n /**\n * Type of maneuver the user should perform (e.g., \"turn-left\", \"straight\")\n */\n maneuver: string\n\n /**\n * Indicates if a popup with additional information should be shown\n */\n showPopup?: boolean\n\n /**\n * Icon prefix to display for this step\n */\n iconPrefix?: string\n\n /**\n * Indicates if this step involves using an elevator\n */\n elevatorStep: boolean\n\n /**\n * Object containing the polyline information for the step\n * @hidden\n */\n polyline: Polyline\n\n /**\n * Creates a new route step instance from response data\n * @hidden\n * @param data API response data containing step information\n */\n constructor(data: RouteStepResponse) {\n this.distance = data.distance.value\n this.duration = data.duration.value\n this.startLocation = data.start_location\n this.startInsideFloor = data.start_inside_floor\n this.startInsidePlace = data.start_inside_place\n this.endLocation = data.end_location\n this.endInsideFloor = data.end_inside_floor\n this.endInsidePlace = data.end_inside_place\n this.htmlInstruction = data.html_instructions\n this.plainInstruction = data.plain_instructions\n this.maneuver = data.maneuver\n this.elevatorStep = data.elevator_step\n this.showPopup = data.show_popup\n this.iconPrefix = data.icon_prefix\n this.polyline = new Polyline(data.polyline)\n }\n\n /**\n * Gets the polyline coordinates in GeoJSON format\n * @returns Array of coordinates in [longitude, latitude] format\n */\n get geoJsonCoordinates(): Position[] {\n return this.polyline.geoJsonCoordinates\n }\n\n /**\n * Gets the polyline coordinates in LatLng format\n * @returns Array of LatLng coordinates\n */\n get coordinates(): LatLng[] {\n return this.polyline.coordinates\n }\n}\n\n/**\n * Internal class that handles polyline decoding and management.\n * A polyline is an encoded representation of a series of coordinates.\n */\nclass Polyline {\n /**\n * Encoded string of polyline points\n */\n points: string\n\n /**\n * Polyline points in LatLng format (optional)\n */\n pointsLatLng?: LatLng[]\n\n /**\n * Overview points of the polyline (optional)\n */\n overviewPoints?: LatLng[]\n\n /**\n * Decoded points of the polyline\n */\n private decodedPoints: LatLng[]\n\n /**\n * Creates a new polyline instance from response data\n * @param data Response data containing polyline information\n */\n constructor(data: RoutePolylineResponse) {\n this.points = data.points\n this.pointsLatLng = data.points_lat_lng\n this.overviewPoints = data.overview_points\n this.decodedPoints = decode(data.points).map((point) => {\n return { lat: point[0], lng: point[1] }\n })\n }\n\n /**\n * Gets coordinates in GeoJSON format\n * @returns Array of coordinates in [longitude, latitude] format\n */\n get geoJsonCoordinates(): Position[] {\n if (this.overviewPoints != null) {\n return this.overviewPoints.map((point) => [point.lng, point.lat])\n } else {\n return this.decodedPoints.map((point) => [point.lng, point.lat])\n }\n }\n\n /**\n * Gets coordinates in LatLng format\n * @returns Array of LatLng coordinates\n */\n get coordinates(): LatLng[] {\n if (this.overviewPoints != null) {\n return this.overviewPoints\n } else {\n return this.decodedPoints\n }\n }\n}\n","/**\n * Interface that represents the API response for banners.\n * Contains the data structure as it comes from the server.\n * @group Places & Locations\n */\nexport interface BannerResponse {\n /**\n * URL of the banner image\n */\n url: string\n\n /**\n * List of tags associated with the banner for filtering\n */\n tags?: string[]\n\n /**\n * Action URL to redirect to when clicking on the banner\n */\n url_action: string\n\n /**\n * Indicates if the banner should open in the same window or a new one\n */\n sameLink: boolean\n\n /**\n * A description of the banner.\n *\n * Can contain html tags.\n */\n description?: string\n}\n\n/**\n * Class that represents a banner in MapVX.\n * Contains information about the image, tags, and banner behavior.\n * @group Places & Locations\n */\nexport class Banner {\n /**\n * URL of the banner image\n */\n public url: string\n\n /**\n * List of tags associated with the banner for filtering\n */\n public tags: string[]\n\n /**\n * Action URL to redirect to when clicking on the banner\n */\n public urlAction: string\n\n /**\n * Indicates if the banner should open in the same window or a new one\n */\n public sameLink: boolean\n\n /**\n * A description of the banner.\n *\n * Can contain html tags.\n */\n description?: string\n\n /**\n * Creates a new banner instance from API response data\n * @param rawBanner API response data containing banner information\n */\n constructor(rawBanner: BannerResponse) {\n this.url = rawBanner.url\n this.tags = rawBanner.tags ?? []\n this.urlAction = rawBanner.url_action\n this.sameLink = rawBanner.sameLink\n this.description = rawBanner.description\n }\n}\n","import { type Metadata } from \"../../interfaces/metadata\"\nimport { type PlaceResponse } from \"../../interfaces/placeResponse\"\nimport { Banner } from \"./banner\"\nimport { type InnerFloor } from \"./innerFloors\"\nimport { type LatLng } from \"./latLng\"\nimport { type OpeningHours } from \"./openingHours\"\nimport { PropertyUtils, type Property, type TransportLine } from \"./property\"\n\n/**\n * MapVX place object, is a custom object containing data of a specific real place.\n * Represents a physical location with all its associated metadata and properties.\n *\n * @example\n * ```typescript\n * const place = new MVXPlace(placeResponse);\n * console.log(place.title); // \"Coffee Shop\"\n * console.log(place.position); // { lat: 40.7128, lng: -74.0060 }\n * ```\n *\n * @group Places & Locations\n */\nexport class MVXPlace {\n /**\n * Unique identifier to reference the place in MapVX system\n */\n public mapvxId: string\n\n /**\n * Client-side identifier for the place (optional)\n * Used for custom identification in client applications\n */\n public clientId?: string\n\n /**\n * Title text for the place (localized based on client language)\n */\n public title: string\n\n /**\n * Detailed description text for the place (localized based on client language)\n */\n public description?: string\n\n /**\n * Short description text for the place (localized based on client language)\n */\n public shortDescription?: string\n\n /**\n * Central position coordinates for the place\n * @see {@link LatLng} for coordinate structure\n */\n public position: LatLng\n\n /**\n * Flag to control visibility of the place in search results\n */\n public hidePlace: boolean\n\n /**\n * Category identifier for the place\n */\n public category: string\n\n /**\n * Localized category name for the place (based on client language)\n */\n public localizedCategory?: string\n\n /**\n * General purpose category string for the place (localized)\n */\n public generalCategory: string\n\n /**\n * Floors available in the parent place. If this exists, the place is indoor.\n * Otherwise, the place is considered outdoor.\n * @see {@link InnerFloor} for floor structure\n */\n public innerFloors: InnerFloor[]\n\n /**\n * Specific floor identifiers where this place exists (for indoor locations)\n */\n public inFloors?: string[]\n\n /**\n * Unique identifier of the institution to which this place belongs\n */\n public parentInstitutionId: string\n\n /**\n * Business hours when the place is open\n * @see {@link OpeningHours} for schedule structure\n */\n public openingHours?: OpeningHours\n\n /**\n * Physical address of the place in plain text (if provided)\n */\n public address?: string\n\n /**\n * Transport services associated with this place\n * @see {@link TransportLine} for transport service structure\n */\n public transportLine?: TransportLine[]\n\n /**\n * URL of the place's logo image\n */\n public logo?: string\n\n /**\n * List of available image URLs for the place\n */\n public images: string[]\n\n /**\n * List of available banner images for the place\n * @see {@link Banner} for banner structure\n */\n public banners: Banner[]\n\n /**\n * List of properties connected to the place\n * @see {@link Property} for property structure\n */\n public properties?: Property[]\n\n /**\n * Unique identifier of the parent place or object\n */\n public parentId: string\n\n /**\n * Type of the object being referenced by {@link parentId}\n */\n public parentType: string\n\n /**\n * Tags associated with the place for categorization and filtering\n */\n public tags: string[]\n\n /**\n * Metadata of the place.\n */\n metadata?: Metadata\n\n /**\n * Visibility of the place\n */\n public visibility: \"public\" | \"protected\" | \"hidden\"\n\n /**\n * Creates a new place instance with the parameters specified in the data.\n *\n * @param rawPlace - JSON configuration parameters for the place from API response\n * @returns A new instance of MVXPlace\n *\n * @example\n * ```typescript\n * const placeResponse = await fetchPlaceData(placeId);\n * const place = new MVXPlace(placeResponse);\n * ```\n */\n constructor(rawPlace: PlaceResponse) {\n const tagsAndKeywords = (rawPlace.tags ?? []).concat(rawPlace.keywords ?? [])\n\n this.mapvxId = rawPlace.id\n this.clientId = rawPlace.alias ?? rawPlace.externalId\n this.title = rawPlace.title\n this.hidePlace = tagsAndKeywords.includes(\"hide_search\")\n this.description = rawPlace.description\n this.shortDescription = rawPlace.shortDescription\n // @ts-expect-error - lon is not in the type but search results have it\n this.position = { lat: rawPlace.lat, lng: rawPlace.lng || rawPlace.lon }\n this.category = rawPlace.category\n this.tags = rawPlace.tags ?? []\n this.generalCategory = rawPlace.general_category\n this.localizedCategory = rawPlace.localizedCategory ?? \"\"\n this.parentInstitutionId = rawPlace.parent_institution\n this.inFloors = rawPlace.inFloor\n this.innerFloors = []\n for (const key in rawPlace.innerFloors) {\n this.innerFloors.push({\n ...rawPlace.innerFloors[key],\n key,\n })\n }\n this.innerFloors.sort((a, b) => a.index - b.index)\n this.openingHours = rawPlace.opening_hours\n this.address = rawPlace.address\n this.transportLine = rawPlace.properties?.filter((p) => p.type === \"transport_line\") as\n | TransportLine[]\n | undefined\n if (rawPlace.logo) {\n this.logo = typeof rawPlace.logo === \"string\" ? rawPlace.logo : rawPlace.logo.light\n }\n this.images = rawPlace.images ?? []\n this.banners = (rawPlace.banners ?? []).map((bannerResponse) => new Banner(bannerResponse))\n this.properties = PropertyUtils.parseProperties(rawPlace.properties ?? [])\n this.parentId = rawPlace.parent_id\n this.parentType = rawPlace.parent_type\n this.metadata = rawPlace.metadata\n this.visibility = rawPlace.visibility ?? \"public\"\n }\n\n /**\n * Returns the floor in which the place exists as an InnerFloor object.\n * If no matching available floor is found or if the place is not indoor,\n * an undefined value will be returned.\n *\n * @param parentPlaceFloors - Array of existing parent place floors to search in\n * @returns The matching InnerFloor object or undefined if not found\n *\n * @example\n * ```typescript\n * const buildingFloors = getBuildingFloors();\n * const placeFloor = place.inFloor(buildingFloors);\n * if (placeFloor) {\n * console.log(`Place is on floor: ${placeFloor.name}`);\n * }\n * ```\n */\n inFloor(parentPlaceFloors: InnerFloor[]): InnerFloor | undefined {\n if (!this.inFloors || this.inFloors.length === 0) {\n // outdoor place\n return parentPlaceFloors.find((floor) => floor.reachableFromGPS)\n }\n return parentPlaceFloors.find((floor) => floor.key === this.inFloors?.[0])\n }\n\n /**\n * Returns a string representation of the place\n * @returns String in format \"MVXPlace {mapvxId}\"\n */\n toString(): string {\n return `MVXPlace ${this.mapvxId}`\n }\n}\n","import { type PlaceResponse } from \"../../interfaces/placeResponse\"\nimport { MVXPlace } from \"./place\"\n\n/**\n * Base interface for all property types that a place can have.\n * Defines the common fields that all properties must have.\n * @group Places & Locations\n */\nexport interface Property {\n /**\n * Title of the property\n */\n title: string\n\n /**\n * Subtitle or description of the property\n */\n subtitle: string\n\n /**\n * URL of the icon associated with the property (optional)\n */\n icon?: string\n\n /**\n * Image URL for the property icon (optional)\n */\n imageUrl?: string\n\n /**\n * Type of property to identify its category\n */\n type?: string\n\n /**\n * Identifier of the parent place of the property (optional)\n */\n childParentPlace?: string\n\n /**\n * URL associated with the property (optional)\n */\n url?: string\n\n /**\n * Icon prefix (defaults to \"fas\" for Font Awesome)\n */\n iconPrefix?: string\n\n /**\n * Order of the property (optional)\n */\n sortChildrenBy?: string\n}\n\n/**\n * Interface that represents the API response for properties.\n * Contains the data structure as it comes from the server.\n * @group Places & Locations\n */\nexport interface PropertyResponse {\n /**\n * Identifying key of the property\n */\n key: string\n\n /**\n * Descriptive text of the property\n */\n text: string\n\n /**\n * URL of the associated icon (optional)\n */\n icon?: string\n\n /**\n * Image URL for the property icon (optional)\n */\n imageUrl?: string\n\n /**\n * Type of property\n */\n type?: string\n\n /**\n * URL associated with the property (optional)\n */\n url?: string\n\n /**\n * List of child places associated with this property\n */\n child_places?: PlaceResponse[] | string[]\n\n /**\n * List of nested child properties\n */\n child_properties: PropertyResponse[]\n\n /**\n * Identifier of the parent place of the children\n */\n child_parent_place?: string\n\n /**\n * Icon prefix\n */\n iconPrefix?: string\n\n /**\n * Order of properties should be sorted by\n */\n sortChildrenBy?: string\n}\n\n/**\n * Interface that represents a transport service associated with a place.\n * Extends the Property interface with transport-specific fields.\n * @group Places & Locations\n */\nexport interface TransportLine extends Property {\n /**\n * Fixed type that identifies this property as a transport line\n */\n type: \"transport_line\"\n\n /**\n * List of available transport lines\n */\n lines: string[]\n\n /**\n * Source or provider of the transport service\n */\n source: string[] | string\n}\n\n/**\n * Interface for properties that only contain text.\n * Extends Property without adding additional fields.\n * @group Places & Locations\n */\nexport interface TextProperty extends Property {}\n\n/**\n * Interface for properties that have associated child places.\n * Allows referencing other places from a property.\n * @group Places & Locations\n */\nexport interface ChildPlacesProperty extends Property {\n /**\n * List of child places associated with this property.\n * Can contain both IDs and complete MVXPlace objects.\n */\n childPlaces: (MVXPlace | string)[]\n}\n\n/**\n * Interface for properties that have nested sub-properties.\n * Allows creating hierarchical property structures.\n * @group Places & Locations\n */\nexport interface ChildPropertiesProperty extends Property {\n /**\n * List of nested child properties\n */\n childProperties: Property[]\n}\n\n/**\n * Interface for properties that have an associated URL.\n * Allows redirecting to external websites from a property.\n * @group Places & Locations\n */\nexport interface UrlProperty extends Property {\n /**\n * URL to redirect to when this property is selected\n */\n url: string\n}\n\n/**\n * Utility class for processing and converting properties from API responses.\n * Provides methods to parse different property structures.\n * @group Places & Locations\n */\nexport class PropertyUtils {\n /**\n * Converts an array of PropertyResponse to a typed Property array.\n * Handles nested properties recursively and different property types.\n *\n * @param response Array of PropertyResponse from the API\n * @returns Processed and typed Property array\n */\n static parseProperties(response: PropertyResponse[]): Property[] {\n try {\n const properties: Property[] = []\n if (response) {\n response.forEach((item) => {\n if (item.child_places) {\n const childPlaces = item.child_places\n const childPlacesProperty: ChildPlacesProperty = {\n childPlaces: [],\n title: item.key,\n subtitle: item.text,\n childParentPlace: item.child_parent_place,\n icon: item.icon,\n imageUrl: item.imageUrl,\n iconPrefix: item.iconPrefix ?? \"fas\",\n sortChildrenBy: item.sortChildrenBy,\n }\n childPlaces.forEach((element) => {\n if (typeof element === \"string\") {\n // Add id to the array of childPlaces\n childPlacesProperty.childPlaces.push(element)\n } else {\n // Transform object to MVXPlace and add to childPlaces array\n const mvxPlace = new MVXPlace(element)\n childPlacesProperty.childPlaces.push(mvxPlace)\n }\n })\n properties.push(childPlacesProperty)\n } else if (item.child_properties) {\n // Parsing child properties with recursive call\n const childProperties = item.child_properties\n const childPropertiesProperty: ChildPropertiesProperty = {\n childProperties: [],\n title: item.key,\n subtitle: item.text,\n childParentPlace: item.child_parent_place,\n icon: item.icon,\n imageUrl: item.imageUrl,\n iconPrefix: item.iconPrefix ?? \"fas\",\n sortChildrenBy: item.sortChildrenBy,\n }\n const childPropertiesResult = this.parseProperties(childProperties)\n childPropertiesProperty.childProperties = childPropertiesResult\n properties.push(childPropertiesProperty)\n } else if (item.url) {\n const property: UrlProperty = {\n title: item.key,\n subtitle: item.text,\n icon: item.icon,\n imageUrl: item.imageUrl,\n iconPrefix: item.iconPrefix,\n url: item.url,\n type: item.type,\n sortChildrenBy: item.sortChildrenBy,\n }\n properties.push(property)\n } else {\n const property: Property = {\n title: item.key,\n subtitle: item.text,\n childParentPlace: item.child_parent_place,\n icon: item.icon,\n imageUrl: item.imageUrl,\n type: item.type,\n iconPrefix: item.iconPrefix ?? \"fas\",\n sortChildrenBy: item.sortChildrenBy,\n }\n properties.push(property)\n }\n })\n }\n return properties\n } catch (err) {\n console.log(err)\n console.log(response)\n return []\n }\n }\n}\n","import { type InstitutionResponse } from \"../../interfaces/institutionResponse\"\nimport { PropertyUtils, type Property } from \"./property\"\n\n/**\n * MapVX Institution object, is a custom object containing data of conglomerate of places (enterprise or subdivision).\n * Represents a collection of related places that form a larger organizational unit.\n *\n * @example\n * ```typescript\n * const institution = new Institution(institutionResponse);\n * console.log(institution.title); // \"Shopping Mall\"\n * console.log(institution.hasPlaces); // true\n * ```\n *\n * @group Places & Locations\n */\nexport class Institution {\n /**\n * Unique identifier for the institution in MapVX system\n */\n public mapvxId: string\n\n /**\n * Title or name of the institution\n */\n public title: string\n\n /**\n * Detailed description of the institution (optional)\n */\n public description?: string\n\n /**\n * Country where the institution is located\n */\n public country: string\n\n /**\n * Category or type of the institution\n */\n public category: string\n\n /**\n * Flag indicating if the institution contains places\n */\n public hasPlaces: boolean\n\n /**\n * List of properties associated with the institution\n * @see {@link Property} for property structure\n */\n public properties?: Property[]\n\n /**\n * URL of the institution's icon or logo\n */\n icon?: string\n\n /**\n * Creates a new instance of an Institution object with the rawInstitution arguments.\n *\n * @param rawInstitution - JSON configuration parameters for the institution from API response\n * @returns A new instance of Institution\n *\n * @example\n * ```typescript\n * const institutionResponse = await fetchInstitutionData(institutionId);\n * const institution = new Institution(institutionResponse);\n * ```\n */\n constructor(rawInstitution: InstitutionResponse) {\n this.mapvxId = rawInstitution.id\n this.country = rawInstitution.country\n this.title = rawInstitution.title\n this.category = rawInstitution.category\n this.icon = rawInstitution.icon\n this.description = rawInstitution.description\n this.hasPlaces = rawInstitution.hasPlaces\n this.properties = PropertyUtils.parseProperties(rawInstitution.properties ?? [])\n }\n}\n","import { type MultiLanguage } from \"./multilanguage\"\nimport { type MVXPlace } from \"./place\"\n\n/**\n * Interface that represents the API response for transport services.\n * Contains both real-time schedules and regular schedules.\n */\nexport interface TransportResponse {\n /**\n * List of real-time schedules for transport services\n */\n realtimeSchedules: RealtimeSchedule[]\n\n /**\n * List of regular schedules for transport services\n */\n schedules: Schedule[]\n}\n\n/**\n * Interface that represents a real-time schedule of a transport service.\n * Contains detailed information about a specific route in real-time.\n * @group Places & Locations\n */\nexport interface RealtimeSchedule {\n /**\n * Name of the transport route\n */\n routeName: string\n\n /**\n * Informative message about the service status\n */\n message: string\n\n /**\n * Opening hours of the service (optional)\n */\n opening_hours?: []\n\n /**\n * Additional properties of the service (optional)\n */\n properties?: []\n\n /**\n * Name of the current stop\n */\n stopName: string\n\n /**\n * Final destination of the route\n */\n finalDestination: string\n\n /**\n * Origin or source of the service\n */\n source: string\n\n /**\n * URL of the icon associated with the service (optional)\n */\n icon?: string\n\n /**\n * Unique identifier of the vehicle\n */\n vehicleId: string\n\n /**\n * Distance from the current stop in meters\n */\n distance: number\n\n /**\n * Estimated arrival time in text format\n */\n estimatedTime: string\n\n /**\n * Remaining time until arrival in text format\n */\n remainingTime: string\n\n /**\n * Service title in multiple languages\n */\n title: MultiLanguage\n\n /**\n * Indicates if the service is delayed\n */\n delayed: boolean\n\n /**\n * Route direction (outbound or inbound)\n */\n routeDirection: string\n\n /**\n * Route identifier\n */\n route: string\n\n /**\n * Latitude of the vehicle's current location\n */\n latitude: number\n\n /**\n * Longitude of the vehicle's current location\n */\n longitude: number\n\n /**\n * Stop identifier\n */\n stopId: string\n\n /**\n * List of stops associated with this route (optional)\n */\n stops?: MVXPlace[]\n}\n\n/**\n * Interface that represents a regular schedule of a transport service.\n * Contains information about fixed schedules of a transport line.\n * @group Places & Locations\n */\nexport interface Schedule {\n /**\n * Identifier of the transport line\n */\n line: string\n\n /**\n * Route direction (outbound or inbound)\n */\n routeDirection: string\n\n /**\n * Schedules organized by days of the week\n */\n schedule: DaysAndTimes[]\n\n /**\n * Origin or source of the service\n */\n source: string\n\n /**\n * Service title in multiple languages\n */\n title: MultiLanguage\n\n /**\n * Today's schedule in text format\n */\n today_schedule: string\n\n /**\n * Next schedule in text format\n */\n next_schedule: string\n}\n\n/**\n * Interface that represents schedules for specific days of the week.\n * Defines which days and at what times the service operates.\n * @group Places & Locations\n */\nexport interface DaysAndTimes {\n /**\n * List of days of the week in abbreviated format (e.g., [\"mo\", \"tu\", \"we\"])\n */\n days: string[]\n\n /**\n * List of schedules in text format (e.g., [\"08:00\", \"12:00\", \"18:00\"])\n */\n times: string[]\n}\n\n/**\n * Class that represents a transport object in MapVX.\n * Contains both regular schedules and real-time information.\n * @group Others\n */\nexport class MVXTransport {\n /**\n * List of regular schedules for transport services\n */\n schedule: Schedule[]\n\n /**\n * List of real-time routes for transport services\n */\n routes: RealtimeSchedule[]\n\n /**\n * Creates a new transport instance with the parameters specified in the response of the endpoint.\n * @hidden\n * @param data json parameters for the transport object.\n * @returns A new instance of MVXTransport is returned.\n */\n constructor(data: TransportResponse) {\n this.schedule = data.schedules\n this.routes = data.realtimeSchedules\n }\n}\n","import type { MapVxRequestContext } from \"../config/sdkConfig\"\nimport { type MapVxProduct } from \"../domain/models/platform\"\nimport {\n TransportationMode,\n type InternalGetRouteConfiguration,\n} from \"../domain/models/routeConfiguration\"\n\n/** Host used to decide when to attach MapVx request context headers. */\nconst MAPVX_PUBLIC_API_HOST = \"api.mapvx.com\"\n\n/**\n * Represents the requester for the repository.\n * @hidden\n */\nexport class Requester {\n private lang: string\n private readonly baseUrl: string\n private readonly baseUrlApi: string\n private readonly baseUrlPortal: string\n private readonly mapvxRequestContext?: MapVxRequestContext\n private readonly baseUrlHealth: string\n private readonly oldBaseUrl: string\n private readonly routeBaseUrl: string\n\n constructor(\n lang: string,\n apiUrl: string = \"https://public-api.mapvx.com\",\n mapvxRequestContext?: MapVxRequestContext\n ) {\n this.lang = lang\n this.mapvxRequestContext = mapvxRequestContext\n // Ensure we have an absolute URL (required for new URL() in fetchFromUrl)\n const withProtocol =\n apiUrl.startsWith(\"http://\") || apiUrl.startsWith(\"https://\") ? apiUrl : `https://${apiUrl}`\n const cleanApiUrl = withProtocol.endsWith(\"/\") ? withProtocol.slice(0, -1) : withProtocol\n this.baseUrl = `${cleanApiUrl}/api/sdk/`\n this.baseUrlApi = `${cleanApiUrl}/api/`\n this.baseUrlPortal = `${cleanApiUrl}/api/portal/`\n this.baseUrlHealth = `https://api.mapvx.com/api/health/`\n this.oldBaseUrl = `https://api.mapvx.com/api/sdk/`\n this.routeBaseUrl = \"https://api.mapvx.com/sdk/\"\n }\n\n /**\n * function to change the lang of requests\n * @param lang request response language\n */\n setLang(lang: string) {\n this.lang = lang\n }\n\n /**\n * Build headers for MapVx request context when target is public-api.mapvx.com.\n * Only non-empty context values are added as X-MapVx-* headers.\n */\n private getMapVxContextHeaders(requestHost: string): Record<string, string> {\n if (requestHost !== MAPVX_PUBLIC_API_HOST || !this.mapvxRequestContext) {\n return {}\n }\n const ctx = this.mapvxRequestContext\n const headers: Record<string, string> = {}\n if (ctx.baseUrl?.trim()) headers[\"X-MapVx-Base-Url\"] = ctx.baseUrl.trim()\n if (ctx.totemId?.trim()) headers[\"X-MapVx-Totem-Id\"] = ctx.totemId.trim()\n if (ctx.originId?.trim()) headers[\"X-MapVx-Origin-Id\"] = ctx.originId.trim()\n if (ctx.institutionId?.trim()) headers[\"X-MapVx-Institution-Id\"] = ctx.institutionId.trim()\n if (ctx.parentPlace?.trim()) headers[\"X-MapVx-Parent-Place\"] = ctx.parentPlace.trim()\n if (ctx.institutionName?.trim())\n headers[\"X-MapVx-Institution-Name\"] = ctx.institutionName.trim()\n if (ctx.fullUrl?.trim()) headers[\"X-MapVx-Full-Url\"] = ctx.fullUrl.trim()\n return headers\n }\n\n /**\n * Make a request using {@link fetch}.\n * When the request target is public-api.mapvx.com and mapvxRequestContext is set,\n * adds X-MapVx-* headers (baseUrl, totemId, originId, institutionId, parentPlace, institutionName, fullUrl).\n *\n * @param resourceUrl Path to endpoint\n * @param params should have the token included plus any extra parameter that the url needs\n * @param options option for fetch method\n * @returns Response promise\n */\n private async fetchFromUrl(\n resourceUrl: string,\n params: Record<string, any>,\n options: RequestInit\n ): Promise<Response> {\n const finalUrl = new URL(resourceUrl)\n finalUrl.search = new URLSearchParams(params).toString()\n const requestHost = finalUrl.hostname\n const contextHeaders = this.getMapVxContextHeaders(requestHost)\n const mergedOptions: RequestInit = { ...options }\n if (Object.keys(contextHeaders).length > 0) {\n mergedOptions.headers = {\n ...(options.headers &&\n typeof options.headers === \"object\" &&\n !Array.isArray(options.headers)\n ? (options.headers as Record<string, string>)\n : {}),\n ...contextHeaders,\n }\n }\n return fetch(finalUrl.toString(), mergedOptions)\n }\n\n /**\n *\n * @param token\n * @param stopId\n * @returns\n */\n async fetchTransport(token: string, stopId: string) {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n\n const params: Record<string, string> = {\n token,\n stopId,\n lang: this.lang,\n }\n\n return this.fetchFromUrl(this.oldBaseUrl + \"vehiclesWithSchedules\", params, options)\n }\n\n /**\n *\n * @param token\n * @param stopId\n * @param vehicleId\n * @returns\n */\n async fetchStops(token: string, stopId: string, vehicleId: string) {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n\n const params: Record<string, string> = {\n token,\n stopId,\n vehicleId,\n lang: this.lang,\n }\n\n return this.fetchFromUrl(this.oldBaseUrl + \"stops\", params, options)\n }\n\n /**\n *\n * @param token Client identification\n * @param placeId\n * @returns Response promise\n */\n async fetchMapStyle(token: string, placeId?: string): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n\n const params: Record<string, any> = {\n token,\n lang: this.lang,\n }\n\n if (placeId != null) {\n params.place_id = placeId\n }\n\n return this.fetchFromUrl(this.baseUrl + \"mapStyleJson\", params, options)\n }\n\n /**\n * Fetches the map style configuration for a specified institution.\n * Can be used to obtain any map style from an Institution, without the limitation of the ApiKey.\n * Therefore, does not make use of an ApiKey but rather an authentication token.\n *\n * Sends a GET request to the \"mapStyle\" endpoint using the provided authentication token\n * and institution ID. The request includes language and institution ID as query parameters.\n *\n * @param token - The Bearer authentication token to authorize the request.\n * @param institutionId - The unique identifier of the institution whose map style is being requested.\n * @returns A promise that resolves to the HTTP response containing the map style data.\n */\n async fetchAnyMapStyle(authToken: string, institutionId: string): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n Authorization: `Bearer ${authToken}`,\n },\n }\n\n const params: Record<string, any> = {\n lang: this.lang,\n institution_id: institutionId,\n }\n\n return this.fetchFromUrl(this.baseUrlPortal + \"mapStyle\", params, options)\n }\n\n /**\n * Obtain allowed Places associated with the key\n * @param token\n * @returns Response promise\n */\n async fetchAllowedPlaces(token: string): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n\n const params = {\n token,\n lang: this.lang,\n }\n\n return this.fetchFromUrl(this.baseUrl + \"availablePlaces\", params, options)\n }\n\n /**\n * Fetches the available places for a given institution using the provided authentication token.\n * Does not make use of an ApiKey but rather an authentication token, therefore it is not limited by the allowed ApiKey places.\n *\n * Sends a GET request to the `availablePlaces` endpoint with the institution ID and language as parameters.\n *\n * @param authToken - The authentication token used for authorization in the request header.\n * @param institutionId - The unique identifier of the institution whose places are to be fetched.\n * @returns A promise that resolves to the response from the API.\n */\n async fetchPlacesFromAnyInstitution(institutionId: string, authToken: string): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n Authorization: `Bearer ${authToken}`,\n },\n }\n\n const params = {\n institution_id: institutionId,\n lang: this.lang,\n }\n\n return this.fetchFromUrl(this.baseUrlPortal + \"availablePlaces\", params, options)\n }\n\n /**\n * Obtain info about specific place. Use mainly to obtain innerFloors\n * @param placeId\n * @param token\n * @returns\n */\n async fetchPlaceDetail(token: string, placeId: string): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n\n const params = {\n token,\n place_id: placeId,\n lang: this.lang,\n }\n\n return this.fetchFromUrl(this.baseUrl + \"place\", params, options)\n }\n\n /**\n * Fetches detailed information for a specific place using its unique identifier.\n * Can be used to obtain any place detail, without the limitation of the ApiKey.\n * Therefore, does not make use of an ApiKey but rather an authentication token.\n *\n * @param token - The authentication token used for authorization in the request header.\n * @param placeId - The unique identifier of the place to retrieve details for.\n * @returns A promise that resolves to the HTTP response containing the place details.\n *\n */\n async fetchAnyPlaceDetail(authToken: string, placeId: string): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n Authorization: `Bearer ${authToken}`,\n },\n }\n const params = {\n place_id: placeId,\n lang: this.lang,\n }\n\n return this.fetchFromUrl(this.baseUrlPortal + \"place\", params, options)\n }\n\n /**\n * To obtain all places associated with targetPlace\n * @param targetPlaceId\n * @param token\n * @returns\n */\n async fetchSubPlaces(targetPlaceId: string, token: string): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n\n const params = {\n token,\n targetPlace: targetPlaceId,\n lang: this.lang,\n }\n\n return this.fetchFromUrl(this.baseUrl + \"subPlaces\", params, options)\n }\n\n /**\n * Fetches sub-places for any specified target place using the Portal API.\n * Can be used to obtain the sub-places for any target place, without the limitation of the ApiKey.\n * Therefore, does not make use of an ApiKey but rather an authentication token.\n *\n * Sends a GET request to the \"subPlaces\" endpoint with the provided Bearer authentication token\n * and target place ID. The request includes language and target place ID as query parameters.\n *\n * @param targetPlaceId - The unique identifier of the target place whose sub-places are being requested.\n * @param authToken - The Bearer authentication token to authorize the request.\n * @returns A promise that resolves to the HTTP response containing the sub-places data.\n */\n async fetchAnySubPlaces(targetPlaceId: string, authToken: string): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n Authorization: `Bearer ${authToken}`,\n },\n }\n\n const params = {\n place_id: targetPlaceId,\n lang: this.lang,\n }\n\n return this.fetchFromUrl(this.baseUrlPortal + \"subPlaces\", params, options)\n }\n\n /**\n * To obtain the route\n * @param routeConfig\n * @returns\n */\n async fetchRoute(routeConfig: InternalGetRouteConfiguration, token: string): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n\n const params: Record<string, string | number | undefined> = {\n fromLatLng: undefined,\n fromBuilding: undefined,\n fromFloor: undefined,\n toLatLng: undefined,\n toBuilding: undefined,\n toFloor: undefined,\n fromPlaceId: undefined,\n toPlaceId: undefined,\n travelMode: TransportationMode.walking,\n reducedMobility: routeConfig.preferAccessibleRoute ? 1 : 0,\n announceFormat: routeConfig.announceFormat,\n userBearing: 0,\n lang: this.lang,\n unitSystem: routeConfig.unitSystem,\n token,\n }\n\n if (\"id\" in routeConfig.initialLocation) {\n params.fromPlaceId = routeConfig.initialLocation.id\n if (routeConfig.initialLocation.level !== undefined) {\n params.fromFloor = routeConfig.initialLocation.level\n }\n } else {\n const { lat, lng, floorId, placeId } = routeConfig.initialLocation\n params.fromLatLng = `${lat},${lng}`\n params.fromFloor = floorId\n params.fromBuilding = placeId\n }\n\n if (\"id\" in routeConfig.finalLocation) {\n params.toPlaceId = routeConfig.finalLocation.id\n if (routeConfig.finalLocation.level !== undefined) {\n params.toFloor = routeConfig.finalLocation.level\n }\n } else {\n const { lat, lng, floorId, placeId } = routeConfig.finalLocation\n params.toLatLng = `${lat},${lng}`\n params.toFloor = floorId\n params.toBuilding = placeId\n }\n\n const cleanParams: Record<string, string | number> = {}\n for (const key in params) {\n const value = params[key]\n if (value != null) {\n cleanParams[key] = value\n }\n }\n\n return this.fetchFromUrl(this.routeBaseUrl + \"route\", cleanParams, options)\n }\n\n /**\n * To obtain the route\n * @param routeConfig\n * @returns\n */\n async fetchRouteV2(routeConfig: InternalGetRouteConfiguration, token: string): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n\n const params: Record<string, string | number | undefined> = {\n fromLatLng: undefined,\n fromBuilding: undefined,\n fromFloor: undefined,\n toLatLng: undefined,\n toBuilding: undefined,\n toFloor: undefined,\n fromPlaceId: undefined,\n toPlaceId: undefined,\n travelMode: TransportationMode.walking,\n reducedMobility: routeConfig.preferAccessibleRoute ? 1 : 0,\n announceFormat: routeConfig.announceFormat,\n userBearing: 0,\n lang: this.lang,\n unitSystem: routeConfig.unitSystem,\n token,\n }\n\n if (\"id\" in routeConfig.initialLocation) {\n params.fromPlaceId = routeConfig.initialLocation.id\n if (routeConfig.initialLocation.level !== undefined) {\n params.fromFloor = routeConfig.initialLocation.level\n }\n } else {\n const { lat, lng, floorId, placeId } = routeConfig.initialLocation\n params.fromLatLng = `${lat},${lng}`\n params.fromFloor = floorId\n params.fromBuilding = placeId\n }\n\n if (\"id\" in routeConfig.finalLocation) {\n params.toPlaceId = routeConfig.finalLocation.id\n if (routeConfig.finalLocation.level !== undefined) {\n params.toFloor = routeConfig.finalLocation.level\n }\n } else {\n const { lat, lng, floorId, placeId } = routeConfig.finalLocation\n params.toLatLng = `${lat},${lng}`\n params.toFloor = floorId\n params.toBuilding = placeId\n }\n\n const cleanParams: Record<string, string | number> = {}\n for (const key in params) {\n const value = params[key]\n if (value != null) {\n cleanParams[key] = value\n }\n }\n\n return this.fetchFromUrl(this.routeBaseUrl + \"v2/route\", cleanParams, options)\n }\n\n /**\n * To obtain info associated to an Institution based on id provided\n * It return 403 if the institution id\n * @param targetPlaceId\n * @param token\n * @returns\n */\n async fetchInstitutions(token: string): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n\n const params = {\n token: token,\n lang: this.lang,\n }\n\n return this.fetchFromUrl(this.baseUrl + \"institution\", params, options)\n }\n\n /**\n * To obtain places from an institution whose name is similar to provided input\n * @param institutionId\n * @param input Provided value to look for\n * @param token Client identification\n * @param parentIds Identifier of the parent place\n * @param origin The ID of a totem or a place origin from directories. Used to return search results based on distance from the origin.\n * @param lat Latitude as a string for location-based search.\n * @param lng Longitude as a string for location-based search.\n * @param floor Floor ID as a string for location-based search.\n * @returns Response promise\n */\n async fetchSearchResults(\n institutionId: string,\n input: string,\n token: string,\n parentIds?: string[],\n origin?: string,\n lat?: string,\n lng?: string,\n floor?: string\n ): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n\n const params: Record<string, string | string[] | undefined> = {\n institution_id: institutionId,\n input,\n lang: this.lang,\n token,\n }\n\n if (parentIds) {\n params.parentPlaces = [...parentIds]\n }\n\n if (origin) {\n params.origin = origin\n }\n\n if (lat) {\n params.lat = lat\n }\n\n if (lng) {\n params.lng = lng\n }\n\n if (floor) {\n params.floor = floor\n }\n\n return this.fetchFromUrl(this.baseUrl + \"searchPlacesWithFilters\", params, options)\n }\n\n async fetchConfiguration(\n token: string,\n place_id?: string,\n product?: MapVxProduct\n ): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n\n const params: Record<string, string | string[] | undefined> = {\n token: token,\n lang: this.lang,\n }\n\n if (place_id) params.place_id = place_id\n if (product) params.product = product\n\n return this.fetchFromUrl(this.baseUrlApi + \"configuration\", params, options)\n }\n\n async fetchCategories(token: string, place_id?: string): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n\n const params: Record<string, string | string[] | undefined> = {\n token: token,\n lang: this.lang,\n }\n\n if (place_id) params.id = place_id\n\n return this.fetchFromUrl(this.baseUrlApi + \"category\", params, options)\n }\n\n async fetchRoutesForOrigin(\n token: string,\n parentPlaceId: string,\n fromPlaceId: string,\n announceFormat: string,\n unitSystem: string,\n mode: string\n ): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n\n const params: Record<string, string | undefined> = {\n token,\n placeId: parentPlaceId,\n fromPlace: fromPlaceId,\n announceFormat,\n unitSystem,\n mode,\n lang: this.lang,\n }\n\n return this.fetchFromUrl(this.routeBaseUrl + \"routes_for_origin\", params, options)\n }\n\n async fetchCacheTimestamp(token: string, placeId: string): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n\n const params: Record<string, string | undefined> = {\n token,\n placeId,\n }\n\n return this.fetchFromUrl(this.routeBaseUrl + \"cache_timestamp\", params, options)\n }\n\n async fetchCssCustomization(token: string, type: string): Promise<Response> {\n const options = {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n\n const params: Record<string, string | undefined> = {\n token,\n type,\n }\n\n return this.fetchFromUrl(this.baseUrlApi + \"styles/customStyles\", params, options)\n }\n\n async postHealth(\n token: string,\n healthPingId: string,\n placeId: string,\n totemId: string,\n status: boolean\n ): Promise<Response> {\n const requestData = JSON.stringify({\n healthPingId: healthPingId,\n placeId: placeId,\n totemId: totemId,\n status: status,\n })\n const params: Record<string, string> = {\n token: token,\n }\n\n const options = {\n method: \"POST\",\n headers: {\n accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: requestData,\n }\n\n return this.fetchFromUrl(this.baseUrlHealth, params, options)\n }\n}\n","import type { StyleSpecification } from \"maplibre-gl\"\nimport { type HealthResponse } from \"../interfaces/healthResponse\"\nimport { type InstitutionResponse } from \"../interfaces/institutionResponse\"\nimport { type PlaceResponse } from \"../interfaces/placeResponse\"\nimport {\n type CacheTimestampResponse,\n type RouteCacheResponse,\n} from \"../interfaces/routeCacheResponse\"\nimport { type RouteResponse } from \"../interfaces/routeResponse\"\nimport { type StyleResponse } from \"../interfaces/styleResponse\"\nimport { type Category } from \"../domain/models/categories\"\nimport { type Configuration } from \"../domain/models/configuration\"\nimport { type CssCustomization } from \"../domain/models/cssCustomization\"\nimport { Institution } from \"../domain/models/institution\"\nimport { Loggeable } from \"../domain/models/loggeable\"\nimport { MVXPlace } from \"../domain/models/place\"\nimport { MVXRoute } from \"../domain/models/route\"\nimport { type InternalGetRouteConfiguration } from \"../domain/models/routeConfiguration\"\nimport { MVXTransport, type TransportResponse } from \"../domain/models/transport\"\nimport type { MapVxRequestContext } from \"../config/sdkConfig\"\nimport { CacheManager } from \"../infrastructure/cache/CacheManager\"\nimport { Requester } from \"./requester\"\nimport { type MapVxProduct } from \"../domain/models/platform\"\nimport type { DataSnapshot } from \"../interfaces/cache\"\n\n/**\n * Extracts a human-readable error message from an API error response body.\n * Handles various response formats: string, object with message/error field, or falls back to JSON.\n * @param errorBody - The parsed JSON body from an error response\n * @returns A string representation of the error\n * @hidden\n */\nfunction extractErrorMessage(errorBody: unknown): string {\n if (typeof errorBody === \"string\") return errorBody\n if (errorBody && typeof errorBody === \"object\") {\n const obj = errorBody as Record<string, unknown>\n if (typeof obj.message === \"string\") return obj.message\n if (typeof obj.error === \"string\") return obj.error\n }\n return JSON.stringify(errorBody)\n}\n\n/**\n * Represents the repository for the SDK.\n * @hidden\n */\nexport class Repository extends Loggeable {\n private readonly token: string\n private readonly requester: Requester\n private baseStyle?: StyleSpecification\n private readonly cache: CacheManager\n private currentLang: string = \"en\"\n private readonly lang: string\n\n constructor(\n token: string,\n lang: string,\n apiUrl?: string,\n cache?: CacheManager,\n mapvxRequestContext?: MapVxRequestContext\n ) {\n super()\n this.token = token\n this.currentLang = lang\n this.requester = new Requester(lang, apiUrl, mapvxRequestContext)\n this.lang = lang\n this.cache = cache ?? new CacheManager()\n }\n\n /**\n * function to change the lang of requests\n * @param lang request response language\n */\n setLang(lang: string) {\n this.currentLang = lang\n this.requester.setLang(lang)\n }\n\n protected prepareSegmentation(segmentation: Record<string, string>): Record<string, string> {\n return {\n ...segmentation,\n token: this.token,\n }\n }\n\n async fetchAndParseMapStyle(placeId?: string): Promise<StyleSpecification> {\n if (placeId === undefined && this.baseStyle) {\n return this.baseStyle\n }\n try {\n const response = await this.requester.fetchMapStyle(this.token, placeId)\n\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n const responseData = (await response.json()) as StyleResponse\n const style = responseData.style as StyleSpecification\n if (placeId === undefined) {\n this.baseStyle = style\n }\n this.logEvent(\"fetchAndParseMapStyle\")\n return style\n } catch (error) {\n this.logError(error, { functionName: \"fetchAndParseMapStyle\" })\n throw new Error(\"Failed to fetch and parse map style\")\n }\n }\n\n async fetchAndParseAnyMapStyle(\n institutionId: string,\n authToken: string\n ): Promise<StyleSpecification> {\n try {\n const response = await this.requester.fetchAnyMapStyle(authToken, institutionId)\n\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n const responseData = (await response.json()) as StyleResponse\n const style = responseData.style as StyleSpecification\n this.logEvent(\"fetchAndParseAnyMapStyle\")\n return style\n } catch (error) {\n this.logError(error, { functionName: \"fetchAndParseAnyMapStyle\" })\n throw new Error(\"Failed to fetch and parse map style with bearer token\")\n }\n }\n\n async fetchAndParseInstitutions(): Promise<Institution[]> {\n try {\n const response = await this.requester.fetchInstitutions(this.token)\n\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n\n const responseData = (await response.json()) as InstitutionResponse[]\n const institutions: Institution[] = []\n for (const institutionData of responseData) {\n const institution = new Institution(institutionData)\n institutions.push(institution)\n }\n institutions.sort((a, b) => a.title.localeCompare(b.title))\n const resultInstitution = institutions\n if (resultInstitution) {\n this.logEvent(\"fetchAndParseInstitutionsV2\")\n return resultInstitution\n } else {\n throw new Error(\"No institutions associated to this apiKey\")\n }\n } catch (error) {\n this.logError(error, { functionName: \"fetchAndParseInstitutionsV2\" })\n throw new Error(\"Failed to fetch and parse institution\")\n }\n }\n\n async fetchAndParsePlaceDetail(placeId: string): Promise<MVXPlace> {\n try {\n const cachedPlace = this.cache.getPlace<MVXPlace>(placeId, this.lang)\n if (cachedPlace != null) {\n this.logEvent(\"fetchAndParsePlaceDetail\", { cached: \"true\" })\n return cachedPlace\n }\n const response = await this.requester.fetchPlaceDetail(this.token, placeId)\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n const responseData = (await response.json()) as PlaceResponse\n const place = new MVXPlace(responseData)\n this.cache.setPlace(place.mapvxId, place, this.lang)\n if (place.clientId != null) {\n this.cache.setPlace(place.clientId, place, this.lang)\n }\n this.logEvent(\"fetchAndParsePlaceDetail\", { cached: \"false\" })\n return place\n } catch (error) {\n throw new Error(\"Failed to fetch and parse place detail\")\n }\n }\n\n async fetchAndParseAnyPlaceDetail(placeId: string, authToken: string): Promise<MVXPlace> {\n try {\n const cachedPlace = this.cache.getPlace<MVXPlace>(placeId, this.lang)\n if (cachedPlace != null) {\n this.logEvent(\"fetchAndParseAnyPlaceDetail\", { cached: \"true\" })\n return cachedPlace\n }\n const response = await this.requester.fetchAnyPlaceDetail(authToken, placeId)\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n const responseData = (await response.json()) as PlaceResponse\n const place = new MVXPlace(responseData)\n this.cache.setPlace(place.mapvxId, place, this.lang)\n if (place.clientId != null) {\n this.cache.setPlace(place.clientId, place, this.lang)\n }\n this.logEvent(\"fetchAndParseAnyPlaceDetail\", { cached: \"false\" })\n return place\n } catch (error) {\n throw new Error(\"Failed to fetch and parse place detail with bearer token\")\n }\n }\n\n async fetchAndParseSubPlaces(parentPlaceId: string): Promise<MVXPlace[]> {\n try {\n // Check cache first\n const cachedSubPlaces = this.cache.getSubPlaces<DataSnapshot<MVXPlace[]>>(\n parentPlaceId,\n this.currentLang\n )\n\n if (cachedSubPlaces != null) {\n this.logEvent(\"fetchAndParseSubPlaces\", { cached: \"true\" })\n return cachedSubPlaces.data\n }\n\n const response = await this.requester.fetchSubPlaces(parentPlaceId, this.token)\n\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n const responseData = (await response.json()) as PlaceResponse[]\n const subPlaces = responseData.map((place) => new MVXPlace(place))\n\n // Cache the result\n this.cache.setSubPlaces(parentPlaceId, this.currentLang, {\n timestamp: Date.now(),\n data: subPlaces,\n })\n\n this.logEvent(\"fetchAndParseSubPlaces\", { cached: \"false\" })\n\n subPlaces.forEach((place) => {\n if (!this.cache.hasPlace(place.mapvxId, this.currentLang)) {\n this.cache.setPlace(place.mapvxId, place, this.currentLang)\n }\n if (place.clientId != null && !this.cache.hasPlace(place.clientId, this.currentLang)) {\n this.cache.setPlace(place.clientId, place, this.currentLang)\n }\n })\n\n return subPlaces\n } catch (error) {\n throw new Error(\"Failed to fetch and parse subplaces\")\n }\n }\n\n async fetchAndParseAnySubPlaces(parentPlaceId: string, authToken: string): Promise<MVXPlace[]> {\n try {\n const response = await this.requester.fetchAnySubPlaces(parentPlaceId, authToken)\n\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n const responseData = (await response.json()) as PlaceResponse[]\n const subPlaces = responseData.map((place) => new MVXPlace(place))\n\n this.logEvent(\"fetchAndParseAnySubPlaces\")\n\n subPlaces.forEach((place) => {\n if (!this.cache.hasPlace(place.mapvxId, this.lang)) {\n this.cache.setPlace(place.mapvxId, place, this.lang)\n }\n if (place.clientId != null && !this.cache.hasPlace(place.clientId, this.lang)) {\n this.cache.setPlace(place.clientId, place, this.lang)\n }\n })\n\n return subPlaces\n } catch (error) {\n throw new Error(\"Failed to fetch and parse any subplaces\")\n }\n }\n\n async fetchAndParseAvailablePlaces(): Promise<MVXPlace[]> {\n try {\n const response = await this.requester.fetchAllowedPlaces(this.token)\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n const typedResponseData = (await response.json()) as PlaceResponse[]\n const data = typedResponseData.map((data) => {\n return new MVXPlace(data)\n })\n this.logEvent(\"fetchAndParseAvailablePlaces\")\n data.forEach((place) => {\n if (!this.cache.hasPlace(place.mapvxId, this.lang)) {\n this.cache.setPlace(place.mapvxId, place, this.lang)\n }\n if (place.clientId != null && !this.cache.hasPlace(place.clientId, this.lang)) {\n this.cache.setPlace(place.clientId, place, this.lang)\n }\n })\n\n return data\n } catch (error) {\n this.logError(error, { functionName: \"fetchAndParseAvailablePlaces\" })\n throw new Error(\"Failed to fetch and parse parent places\")\n }\n }\n\n async fetchAndParsePlacesFromInstitution(\n institutionId: string,\n authToken: string\n ): Promise<MVXPlace[]> {\n try {\n const response = await this.requester.fetchPlacesFromAnyInstitution(institutionId, authToken)\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n const typedResponseData = (await response.json()) as PlaceResponse[]\n const data = typedResponseData.map((data) => {\n return new MVXPlace(data)\n })\n this.logEvent(\"fetchAndParsePlacesFromInstitution\")\n data.forEach((place) => {\n if (!this.cache.hasPlace(place.mapvxId, this.lang)) {\n this.cache.setPlace(place.mapvxId, place, this.lang)\n }\n if (place.clientId != null && !this.cache.hasPlace(place.clientId, this.lang)) {\n this.cache.setPlace(place.clientId, place, this.lang)\n }\n })\n\n return data\n } catch (error) {\n this.logError(error, {\n functionName: \"fetchAndParsePlacesFromInstitution\",\n })\n throw new Error(\"Failed to fetch and parse parent places from institution\")\n }\n }\n\n getCachedPlaces(ids: string[]): MVXPlace[] {\n const places: MVXPlace[] = []\n\n ids.forEach((id) => {\n const place = this.cache.getPlace<MVXPlace>(id, this.lang)\n if (place != null) {\n places.push(place)\n }\n })\n\n return places\n }\n\n /**\n * Get cached subplaces for a parent place without making additional requests.\n * @param parentPlaceId The parent place identifier\n * @returns Array of cached subplaces or undefined if not cached\n */\n getCachedSubPlaces(parentPlaceId: string): MVXPlace[] | undefined {\n const cachedSubPlaces = this.cache.getSubPlaces<DataSnapshot<MVXPlace[]>>(\n parentPlaceId,\n this.currentLang\n )\n return cachedSubPlaces?.data\n }\n\n async fetchAndParseRoute(config: InternalGetRouteConfiguration): Promise<MVXRoute> {\n try {\n let destinationId = \"\"\n if (\"id\" in config.finalLocation) {\n destinationId = config.finalLocation.id\n }\n const cachedResponse = this.cache.getRoute<DataSnapshot<MVXRoute>>(destinationId)\n\n if (cachedResponse != null) {\n this.logEvent(\"fetchAndParseRoute\", { cached: \"true\" })\n this.debugLog(\"Route cache testing. Found in caché.\")\n return cachedResponse.data\n }\n\n const response = await this.requester.fetchRoute(config, this.token)\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n const responseData = (await response.json()) as RouteResponse[]\n const route = new MVXRoute(responseData[0])\n this.logEvent(\"fetchAndParseRoute\")\n this.debugLog(\"Route cache testing. Fetched.\")\n return route\n } catch (error) {\n throw new Error(\"Failed to fetch and parse route\")\n }\n }\n\n async fetchAndParseRouteV2(config: InternalGetRouteConfiguration): Promise<MVXRoute> {\n try {\n let destinationId = \"\"\n if (\"id\" in config.finalLocation) {\n destinationId = config.finalLocation.id\n }\n const cachedResponse = this.cache.getRoute<DataSnapshot<MVXRoute>>(destinationId)\n\n if (cachedResponse != null) {\n this.logEvent(\"fetchAndParseRouteV2\", { cached: \"true\" })\n this.debugLog(\"Route cache testing. Found in caché.\")\n return cachedResponse.data\n }\n\n const response = await this.requester.fetchRouteV2(config, this.token)\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n const responseData = (await response.json()) as RouteResponse[]\n const route = new MVXRoute(responseData[0])\n this.logEvent(\"fetchAndParseRouteV2\")\n this.debugLog(\"Route cache testing. Fetched.\")\n return route\n } catch (error) {\n throw new Error(\"Failed to fetch and parse route\")\n }\n }\n\n async fetchAndParseTransport(stopId: string): Promise<MVXTransport> {\n try {\n const cachedResponse = this.cache.getVehicle<DataSnapshot<MVXTransport>>(stopId, this.lang)\n if (\n cachedResponse != null &&\n (Date.now() - cachedResponse.timestamp < 60 * 100 ||\n cachedResponse.data.routes.length === 0)\n ) {\n this.logEvent(\"fetchAndParseTransport\", { cached: \"true\" })\n return cachedResponse.data\n }\n\n const response = await this.requester.fetchTransport(this.token, stopId)\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n const typedResponseData = (await response.json()) as TransportResponse\n\n if (typedResponseData.realtimeSchedules.length > 0) {\n const stopsPromises = typedResponseData.realtimeSchedules.map((e) =>\n this.fetchAndParseStops(stopId, e.vehicleId)\n )\n\n const stops = await Promise.all(stopsPromises)\n\n if (stops.length > 0) {\n typedResponseData.realtimeSchedules.forEach((vehicle) => {\n vehicle.stops = stops.find((e) => e.id == vehicle.vehicleId)?.places ?? []\n })\n }\n }\n\n const transport = new MVXTransport(typedResponseData)\n\n this.cache.setVehicle(\n stopId,\n {\n timestamp: Date.now(),\n data: transport,\n },\n this.lang\n )\n\n this.logEvent(\"fetchAndParseTransport\", { cached: \"false\" })\n return transport\n } catch (error) {\n const cachedResponse = this.cache.getVehicle<DataSnapshot<MVXTransport>>(stopId, this.lang)\n if (cachedResponse != null) {\n const transport = new MVXTransport({\n realtimeSchedules: [],\n schedules: cachedResponse.data.schedule,\n })\n this.logEvent(\"fetchAndParseTransport\", { cached: \"true\" })\n return transport\n } else {\n throw new Error(\"Failed to fetch and parse transport\")\n }\n }\n }\n\n async fetchAndParseStops(\n stopId: string,\n vehicleId: string\n ): Promise<{ id: string; places: MVXPlace[] }> {\n try {\n const cachedResponse = this.cache.getStops<DataSnapshot<MVXPlace[]>>(\n stopId + vehicleId,\n this.lang\n )\n if (cachedResponse != null && Date.now() - cachedResponse.timestamp < 60 * 1000) {\n this.logEvent(\"fetchAndParseStops\", { cached: \"true\" })\n return { id: vehicleId, places: cachedResponse.data }\n }\n const response = await this.requester.fetchStops(this.token, stopId, vehicleId)\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n\n const typedResponseData = (await response.json()) as PlaceResponse[]\n const data = typedResponseData.map((e) => {\n return new MVXPlace(e)\n })\n\n this.cache.setStops(stopId + vehicleId, { timestamp: Date.now(), data }, this.lang)\n\n this.logEvent(\"fetchAndParseStops\", { cached: \"false\" })\n\n return { id: vehicleId, places: data }\n } catch (error) {\n throw new Error(\"Failed to fetch and parse stops\")\n }\n }\n\n async fetchAndParseSearchResults(\n institutionId: string,\n input: string,\n parentPlaces?: string[],\n origin?: string,\n lat?: string,\n lng?: string,\n floor?: string\n ): Promise<MVXPlace[]> {\n try {\n const response = await this.requester.fetchSearchResults(\n institutionId,\n input,\n this.token,\n parentPlaces,\n origin,\n lat,\n lng,\n floor\n )\n\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n const responseData = (await response.json()) as PlaceResponse[]\n const searchResults = responseData.map((result) => {\n return new MVXPlace(result)\n })\n\n return searchResults\n } catch (error) {\n throw new Error(\"Failed to fetch and parse search results\")\n }\n }\n\n async fetchAndParseRoutesFromOrigin(\n parentPlaceId: string,\n fromPlaceId: string,\n announceFormat: string,\n unitSystem: string,\n mode: string\n ): Promise<void> {\n try {\n const response = await this.requester.fetchRoutesForOrigin(\n this.token,\n parentPlaceId,\n fromPlaceId,\n announceFormat,\n unitSystem,\n mode\n )\n\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n const { routes, accessibleRoutes } = (await response.json()) as RouteCacheResponse\n\n Object.entries(routes).forEach(([destinationId, routeResponse]) => {\n const route = new MVXRoute(routeResponse[0])\n this.cache.setRoute(destinationId, {\n timestamp: Date.now(),\n data: route,\n })\n })\n Object.entries(accessibleRoutes).forEach(([destinationId, routeResponse]) => {\n const route = new MVXRoute(routeResponse[0])\n this.cache.setAccessibleRoute(destinationId, {\n timestamp: Date.now(),\n data: route,\n })\n })\n this.debugLog(\"Route cache testing. Cache populated!\")\n } catch (error) {\n throw new Error(\"Failed to fetch and parse routes from origin results\")\n }\n }\n\n async fetchAndParseCacheTimestamp(parentPlaceId: string): Promise<number> {\n try {\n const response = await this.requester.fetchCacheTimestamp(this.token, parentPlaceId)\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n const { lastUpdate } = (await response.json()) as CacheTimestampResponse\n return lastUpdate\n } catch (error) {\n throw new Error(\"Failed to fetch and parse cache timestamp\")\n }\n }\n\n cleanRoutesCache() {\n this.cache.cleanRoutesCache()\n this.cache.cleanAccessibleRoutesCache()\n }\n\n async fetchAndParseConfiguration(\n placeId?: string,\n product?: MapVxProduct\n ): Promise<Configuration> {\n try {\n // Check cache first\n const cachedConfig = this.cache.getConfiguration<DataSnapshot<Configuration>>(\n placeId || \"default\",\n product || \"default\",\n this.currentLang\n )\n\n if (cachedConfig != null) {\n this.logEvent(\"fetchAndParseConfiguration\", { cached: \"true\" })\n return cachedConfig.data\n }\n\n const response = await this.requester.fetchConfiguration(this.token, placeId, product)\n\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n\n const config = (await response.json()) as Configuration\n\n // Cache the result\n this.cache.setConfiguration(placeId || \"default\", product || \"default\", this.currentLang, {\n timestamp: Date.now(),\n data: config,\n })\n\n this.logEvent(\"fetchAndParseConfiguration\", { cached: \"false\" })\n return config\n } catch (error) {\n this.logError(error, { functionName: \"fetchAndParseConfiguration\" })\n throw new Error(\"Failed to fetch and parse configuration\")\n }\n }\n\n async fetchAndParseCategories(placeId?: string): Promise<Category[]> {\n try {\n // Check cache first\n const cachedCategories = this.cache.getCategories<DataSnapshot<Category[]>>(\n placeId || \"default\",\n this.currentLang\n )\n\n if (cachedCategories != null) {\n this.logEvent(\"fetchAndParseCategories\", { cached: \"true\" })\n return cachedCategories.data\n }\n\n const response = await this.requester.fetchCategories(this.token, placeId)\n\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n\n const categories = (await response.json()) as Category[]\n\n // Cache the result\n this.cache.setCategories(placeId || \"default\", this.currentLang, {\n timestamp: Date.now(),\n data: categories,\n })\n\n this.logEvent(\"fetchAndParseCategories\", { cached: \"false\" })\n return categories\n } catch (error) {\n throw new Error(\"Failed to fetch and parse categories\")\n }\n }\n\n async fetchAndParseCssCustomization(type: string): Promise<CssCustomization> {\n try {\n const response = await this.requester.fetchCssCustomization(this.token, type)\n\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Fetch failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n\n const cssCustomization = (await response.json()) as CssCustomization\n\n return cssCustomization\n } catch (error) {\n throw new Error(\"Failed to fetch and parse css customization\")\n }\n }\n\n async postAndParseHealthPing(\n healthPingId: string,\n placeId: string,\n totemId: string,\n status: boolean\n ): Promise<HealthResponse> {\n const response = await this.requester.postHealth(\n this.token,\n healthPingId,\n placeId,\n totemId,\n status\n )\n\n if (!response.ok) {\n const errorBody = await response.json()\n throw new Error(\n `Post failed with status ${response.status}: ${extractErrorMessage(errorBody)}`\n )\n }\n\n const data = (await response.json()) as HealthResponse\n\n return data\n }\n}\n","import { type LatLng } from \"@googlemaps/polyline-codec\"\nimport { type MVXRouteStep } from \"../domain/models/route\"\n\n/**\n * Extracts coordinate points from a route step, attempting multiple data sources\n * in order of preference to ensure the most complete coordinate set is returned.\n *\n * This function implements a fallback strategy to extract coordinates from different\n * properties of the route step. It first tries to use the start and end locations,\n * then attempts to use polyline overview points or detailed points, and finally falls\n * back to the step's direct coordinates property if no other data is available.\n * This approach ensures compatibility with different API response formats and data\n * availability scenarios.\n *\n * @example\n * ```typescript\n * const step = new MVXRouteStep(stepData);\n * const coordinates = extractStepCoordinates(step);\n * // Returns: [{ lat: 40.7128, lng: -74.0060 }, { lat: 40.7580, lng: -74.0431 }, ...]\n * ```\n *\n * @param {MVXRouteStep} step - The route step from which to extract coordinates\n * @returns {LatLng[]} Array of coordinate points. Returns step.coordinates if no other\n * coordinate data is found in the step's properties\n *\n * @group Utils\n */\nexport function extractStepCoordinates(step: MVXRouteStep): LatLng[] {\n const coords: LatLng[] = []\n\n if (step.startLocation?.lat && step.startLocation?.lng) {\n coords.push({ lat: step.startLocation.lat, lng: step.startLocation.lng })\n }\n\n if (step.endLocation?.lat && step.endLocation?.lng) {\n coords.push({ lat: step.endLocation.lat, lng: step.endLocation.lng })\n }\n\n const overviewPoints = step.polyline?.overviewPoints\n if (Array.isArray(overviewPoints) && overviewPoints.length > 0) {\n overviewPoints.forEach((point) => {\n if (point?.lat && point?.lng) {\n coords.push({ lat: point.lat, lng: point.lng })\n }\n })\n } else if (Array.isArray(step.polyline?.pointsLatLng) && step.polyline.pointsLatLng.length > 0) {\n step.polyline.pointsLatLng.forEach((point) => {\n if (point?.lat && point?.lng) {\n coords.push({ lat: point.lat, lng: point.lng })\n }\n })\n }\n\n if (coords.length === 0 && step.coordinates) {\n return step.coordinates\n }\n\n return coords\n}\n","import maplibregl, {\n LngLatBounds,\n Map,\n NavigationControl,\n setRTLTextPlugin,\n type ExpressionFilterSpecification,\n type FillExtrusionLayerSpecification,\n type FillLayerSpecification,\n type LayerSpecification,\n type LineLayerSpecification,\n type MapOptions,\n type MapSourceDataEvent,\n type StyleSpecification,\n} from \"maplibre-gl\"\n\n// Flag to track if cached-tile protocol has been registered\nlet cachedTileProtocolRegistered = false\n\n/**\n * Deep clone helper that works in all environments.\n * Uses structuredClone if available, otherwise falls back to JSON serialization.\n * @param obj The object to clone\n * @returns A deep clone of the object\n */\nfunction deepClone<T>(obj: T): T {\n if (obj === undefined || obj === null) {\n return obj\n }\n if (typeof structuredClone === \"function\") {\n return structuredClone(obj)\n }\n return JSON.parse(JSON.stringify(obj))\n}\n\n/**\n * Register a custom protocol for cached tiles that routes requests through the main thread.\n * This allows the service worker to intercept and cache tile requests.\n */\nfunction registerCachedTileProtocol(): void {\n if (cachedTileProtocolRegistered) return\n\n maplibregl.addProtocol(\"cached-tile\", (params, abortController) => {\n // Convert cached-tile:// URL back to https://\n const url = params.url.replace(\"cached-tile://\", \"https://\")\n\n return fetch(url, { signal: abortController.signal })\n .then((response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`)\n }\n return response.arrayBuffer()\n })\n .then((data) => ({ data }))\n })\n\n cachedTileProtocolRegistered = true\n}\n\n/**\n * Converts a PaddingValue to pixels based on the container and viewport dimensions.\n * @param value The padding value (number or string with unit)\n * @param dimension The reference dimension in pixels (container width/height)\n * @returns The padding value in pixels\n */\nfunction parsePaddingValue(value: PaddingValue | undefined, dimension: number): number {\n if (value === undefined) {\n return 0\n }\n\n if (typeof value === \"number\") {\n return value\n }\n\n const match = value.match(/^(-?\\d*\\.?\\d+)(px|%|vh|vw)?$/)\n if (!match) {\n return 0\n }\n\n const numericValue = parseFloat(match[1])\n const unit = match[2] || \"px\"\n\n switch (unit) {\n case \"px\":\n return numericValue\n case \"%\":\n return (numericValue / 100) * dimension\n case \"vh\":\n return (numericValue / 100) * window.innerHeight\n case \"vw\":\n return (numericValue / 100) * window.innerWidth\n default:\n return numericValue\n }\n}\n\n/**\n * Converts PaddingOptions with mixed units to MapLibre's pixel-based padding format.\n * @param padding The padding options with optional fields and mixed units\n * @param containerWidth The map container width in pixels\n * @param containerHeight The map container height in pixels\n * @returns Padding object with all values in pixels\n */\nfunction convertPaddingToPixels(\n padding: PaddingOptions | undefined,\n containerWidth: number,\n containerHeight: number\n): { top: number; bottom: number; left: number; right: number } {\n if (!padding) {\n return { top: 0, bottom: 0, left: 0, right: 0 }\n }\n\n return {\n top: parsePaddingValue(padding.top, containerHeight),\n bottom: parsePaddingValue(padding.bottom, containerHeight),\n left: parsePaddingValue(padding.left, containerWidth),\n right: parsePaddingValue(padding.right, containerWidth),\n }\n}\n\nimport { userLocationDataUrl } from \"../assets/icons\"\nimport { RouteController } from \"../controllers/routeController\"\nimport { rtlLanguages } from \"../domain/models/_rtl\"\nimport {\n InternalAnimationConfig,\n InternalAnimationDrawingConfig,\n type AnimationConfig,\n type AnimationDrawingConfig,\n} from \"../domain/models/animation\"\nimport {\n type BoundsOptions,\n type FitOptions,\n type FloorUpdateOptions,\n type PaddingOptions,\n type PaddingValue,\n type ZoomOptions,\n} from \"../domain/models/fitOptions\"\nimport { type InnerFloor } from \"../domain/models/innerFloors\"\nimport { type LatLng } from \"../domain/models/latLng\"\nimport { Loggeable } from \"../domain/models/loggeable\"\nimport { type CameraAnimation, type MapCamera } from \"../domain/models/mapCamera\"\nimport {\n DEFAULT_TILE_CACHE_CONFIG,\n type MapConfig,\n type MapTileCacheConfig,\n} from \"../domain/models/mapConfig\"\nimport { MarkerAttribute, type MarkerConfig } from \"../domain/models/marker\"\nimport { type MVXPlace } from \"../domain/models/place\"\nimport { type PopOverConfig } from \"../domain/models/popover\"\nimport { MVXRoute } from \"../domain/models/route\"\nimport {\n InternalDrawRouteConfiguration,\n InternalGetRouteConfiguration,\n type DrawRouteConfiguration,\n type GetRouteConfiguration,\n} from \"../domain/models/routeConfiguration\"\nimport { type RouteStyle } from \"../domain/models/routeStyle\"\nimport { Repository } from \"../repository/repository\"\nimport { getBoundingBox } from \"../utils/utils\"\nimport { extractStepCoordinates } from \"../utils/route-utils\"\n\n/**\n * @group Map\n */\nexport interface MapVXMap {\n /**\n * Destroy the current map\n */\n destroyMap(): void\n\n /**\n * Adding a marker to the map and to the list of current marker references.\n * @param marker specifications for marker creation.\n * @returns returns the added marker id.\n */\n addMarker(marker: MarkerConfig): string\n\n /**\n * update a marker to the map and to the list of current marker references.\n * @param marker specifications for marker creation.\n * @returns returns the added marker id.\n */\n updateMarker(marker: MarkerConfig): string\n\n /**\n * Update the position of a marker on the map.\n *\n * @param markerId The id of the marker.\n * @param newPosition The new position of the marker.\n */\n updateMarkerPosition(markerId: string, newPosition: LatLng): void\n\n /**\n * Removes from the current map the marker that corresponds to the id provided\n * @param markerId specifications for marker creation.\n */\n removeMarker(markerId: string): void\n /**\n * Removes all markers from the map.\n * This function will clear all markers currently displayed on the map.\n */\n removeAllMarkers(): void\n\n /**\n * Shows the marker with the specified ID.\n * This function will make the marker visible on the map.\n *\n * @param markerId - The ID of the marker to show.\n */\n showMarker(markerId: string): void\n\n /**\n * Hides the marker with the specified ID.\n * This function will make the marker invisible on the map.\n *\n * @param markerId - The ID of the marker to hide.\n */\n hideMarker(markerId: string): void\n\n /**\n * Update the camera position on the map\n * @param newCamera Options for camera update.\n * @param callback Function to execute after the camera updates\n */\n updateCamera(newCamera: MapCamera & CameraAnimation, callback?: () => void): void\n\n /**\n * Adjusts the lower zoom limit\n * @param zoomLvl The minimum zoom level\n * @param options Optional settings including onComplete callback\n *\n * @example\n * ```typescript\n * map.setMinZoom(5, {\n * onComplete: () => console.log('Min zoom set')\n * });\n * ```\n */\n setMinZoom(zoomLvl: number, options?: ZoomOptions): void\n\n /**\n * Adjusts the upper zoom limit\n * @param zoomLvl The maximum zoom level\n * @param options Optional settings including onComplete callback\n *\n * @example\n * ```typescript\n * map.setMaxZoom(18, {\n * onComplete: () => console.log('Max zoom set')\n * });\n * ```\n */\n setMaxZoom(zoomLvl: number, options?: ZoomOptions): void\n\n /**\n * Limits the movement of the map to a bounding box calculated with the coordinate array\n * If the coordinates are less than 2, then the function does nothing.\n * @param coordinates List of LatLng coordinates in which the map will be limited, to these coordinates is added one kilometer of padding.\n * @param options Optional settings including onComplete callback\n *\n * @example\n * ```typescript\n * map.setMaxBounds(coordinates, {\n * onComplete: () => console.log('Bounds set')\n * });\n * ```\n */\n setMaxBounds(coordinates: LatLng[], options?: BoundsOptions): void\n\n /**\n * Change the camera of the map to contain the visible area within an specific list of LatLng.\n * If coordinates is empty, it doesn't do anything. If it's only one coordinate, the map center will be at that point.\n *\n * The fit operation preserves the current bearing and pitch unless explicitly overridden in options.\n *\n * @param coordinates List of LatLng coordinates in where the map will fit\n * @param options Support for various options for the fit, including:\n * - `bearing`: Camera bearing (rotation) in degrees. Defaults to current bearing.\n * - `pitch`: Camera pitch (tilt) in degrees. Defaults to current pitch.\n * - `onComplete`: Callback executed when the fit animation completes.\n *\n * @example\n * ```typescript\n * // Fit with callback and custom bearing\n * map.fitCoordinates(coordinates, {\n * bearing: 45,\n * pitch: 30,\n * duration: 1000,\n * onComplete: () => console.log('Fit completed')\n * });\n * ```\n */\n fitCoordinates(coordinates: LatLng[], options?: FitOptions): void\n\n /**\n * Adjusts the map view to show only the steps within a specific place/building.\n * This method filters route steps that belong to the specified place (either starting or ending inside it)\n * and fits the map bounds to display those steps. This is particularly useful for indoor navigation\n * where routes may cross multiple buildings or floors, allowing the map to focus on the current location.\n *\n * @example\n * ```typescript\n * const route = await map.addRoute(config);\n * map.fitRouteByPlace(route, \"building-123\", {\n * padding: { top: 150, right: 150, bottom: 150, left: 150 }\n * });\n * ```\n *\n * @param route The complete route containing all steps\n * @param placeId The ID of the place/building to filter steps by\n * @param options Optional fit options including padding, maxZoom, etc.\n * If not provided, uses default padding values.\n *\n * @group Routes\n */\n fitRouteByPlace(route: MVXRoute, placeId: string, options?: FitOptions): void\n\n /**\n * Returns the map's current bearing. The bearing is the compass direction that is \"up\"; for example, a bearing\n * of 90° orients the map so that east is up.\n *\n * @returns The map's current bearing.\n */\n getBearing(): number\n\n /**\n * Obtain the current zoom level of the map.\n */\n getZoomLevel(): number\n\n /**\n * Obtain the id of the current floor.\n * If not set the parent place, return a empty string.\n */\n getCurrentFloor(): string\n\n /**\n * Updates the floor shown on the map and the reference to the current floor.\n * @param floorId floor identifier.\n * @param options Optional settings including onComplete callback\n *\n * @example\n * ```typescript\n * map.updateFloor('floor-1', {\n * onComplete: () => console.log('Floor updated')\n * });\n * ```\n */\n updateFloor(floorId: string, options?: FloorUpdateOptions): void\n\n /**\n * Update the current parent place and floor displayed on the map.\n * @param parentPlaceId The id of the parent place to show.\n * @param floorId The id of the floor to show.\n * @param options Optional settings including onComplete callback\n *\n * @example\n * ```typescript\n * map.updateParentPlaceAndFloor('parent-1', 'floor-1', {\n * onComplete: () => console.log('Parent place and floor updated')\n * });\n * ```\n */\n updateParentPlaceAndFloor(\n parentPlaceId: string,\n floorId?: string,\n options?: FloorUpdateOptions\n ): void\n\n /**\n * Returns the map's containing HTML element.\n *\n * @returns The map's container.\n */\n getContainer(): HTMLElement\n /**\n * Adds a new route to the map or replaces the old one.\n * @param routeConfig The parameters to get and draw a route.\n * @returns The route added to the map.\n */\n addRoute(config: GetRouteConfiguration, drawConfig?: DrawRouteConfiguration): Promise<MVXRoute>\n\n /**\n * Update the visual progress of a route based on an external user position.\n * Splits the route into behind (already traveled) and ahead (remaining) portions\n * at the point on the route closest to the given position.\n *\n * @param routeId The ID of the route to update.\n * @param position The current user position (will be projected onto the route).\n * @param behindStyle Optional style for the behind (traveled) portion. Defaults to gray solid.\n */\n updateRouteProgress(routeId: string, position: LatLng, behindStyle?: RouteStyle): void\n\n /**\n * Removes a route from the map.\n * When called without arguments, removes the most recently added route (backward compatible).\n *\n * @remarks\n * Remove the routes added with {@link addRoute} or {@link startAnimateRoute}.\n * @param routeId Optional ID of the specific route to remove.\n */\n removeRoute(routeId?: string): void\n\n /**\n * Remove a specific route from the map by its ID.\n * @param routeId The ID of the route to remove.\n */\n removeRouteById(routeId: string): void\n\n /**\n * Remove all routes from the map.\n */\n removeAllRoutes(): void\n\n /**\n * Get the IDs of all active routes on the map.\n * @returns Array of route IDs.\n */\n getActiveRouteIds(): string[]\n\n /**\n * Add a new PopOver to the map\n * @deprecated Not yet implemented.\n * @hidden\n * @param {PopOverConfig} popOverConfig, parameters for the specified PopOver\n */\n addPopOver(popOverConfig: PopOverConfig): string\n\n /**\n * Removes the PopOver to which the provided id corresponds\n * @deprecated Not yet implemented.\n * @hidden\n * @param {string} id, PopOver identifier\n */\n removePopOver(id: string): void\n\n /**\n * Colors specific places on the map based on provided place IDs.\n *\n * It only function with the internal ids from MapVX and not the clients ids.\n *\n * The function sets map filters to highlight given places on the displayed floor.\n * Places previously marked as selected will lose such effect unless their id is provided in the latest call of the function.\n * Therefore, if input array is empty, no place will be marked as selected in the map after function call.\n *\n * You should use the `color `with caution because all future call will have that as the base color.\n *\n * If you only have a client id and need to use this function, you can obtain the corresponding\n * mapvx id from the place data using the SDK function `getPlaceDetail` for example.\n *\n * @param placeIds - An array of strings representing the MapVX IDs of the places that need to be colored on the map.\n * @param color - The color to use for the polygons instead of the current color defined in the style.\n */\n setPlacesAsSelected(placeIds: string[], color?: string): void\n\n /**\n * Clear the colored places on the map.\n * This clear the places colored with {@link setPlacesAsSelected}.\n */\n clearColoredPlaces(): void\n\n /**\n * Add a border to the specific places on the map.\n *\n * It only function with the internal ids from MapVX and not the clients ids.\n *\n * If you only have a client id and need to use this function, you can obtain the corresponding\n * mapvx id from the place data using the SDK function `getPlaceDetail` for example.\n *\n * The `color` and `width` optional arguments only function when both are sent.\n * You should use them with caution, because all future call will have that as the base style.\n *\n * @param placeIds An array of strings representing the MapVX IDs of the places that need to have a border on the map.\n * @param color The color to use for the border instead of the current color defined in the style.\n * @param width The width for the borders instead of the current color defined in the style.\n */\n addBorderToPlaces(placeIds: string[], color?: string, width?: number): void\n\n /**\n * Clear the borders added with {@link addBorderToPlaces}.\n */\n clearBorderedPlaces(): void\n\n /**\n * Function to activate the listening to the clicks of places on the map\n * @param callback The function that receive the id of the clicked place.\n */\n startClickListener(callback: (arg: string) => void): void\n /**\n * Function to deactivate the listening to the clicks of places on the map\n */\n stopClickListener(): void\n\n /**\n * Start of the route animation on the map\n * @param routeConfig Parameters to get a route or the route object.\n * @param drawConfig The configuration of how to draw the route on the map.\n * @param animationConfig Parameters for the specified animation.\n * @returns The route that will be animated.\n */\n startAnimateRoute(\n routeConfig: GetRouteConfiguration | MVXRoute,\n drawConfig?: AnimationDrawingConfig,\n animationConfig?: AnimationConfig\n ): Promise<MVXRoute>\n\n /**\n * Start of the route animation on the map.\n * Use a new endpoint for the route data.\n * @param routeConfig Parameters to get a route or the route object.\n * @param drawConfig The configuration of how to draw the route on the map.\n * @param animationConfig Parameters for the specified animation.\n * @returns The route that will be animated.\n */\n startAnimateRouteV2(\n routeConfig: GetRouteConfiguration | MVXRoute,\n drawConfig?: AnimationDrawingConfig,\n animationConfig?: AnimationConfig\n ): Promise<MVXRoute>\n\n /**\n * Pause of the route animation on the map.\n * @param routeId Optional ID of the specific route to pause. If not provided, pauses the last added route.\n *\n * @throws A error if not exist on the map a route added by {@link startAnimateRoute}.\n */\n pauseAnimateRoute(routeId?: string): void\n\n /**\n * Resume of the route animation on the map.\n * @param routeId Optional ID of the specific route to resume. If not provided, resumes the last added route.\n *\n * @throws A error if not exist on the map a route added by {@link startAnimateRoute}.\n */\n resumeAnimateRoute(routeId?: string): void\n\n /**\n * Restart the animation of the route.\n * @param routeId Optional ID of the specific route to restart. If not provided, restarts the last added route.\n *\n * @throws A error if not exist on the map a route added by {@link startAnimateRoute}.\n */\n restartAnimateRoute(routeId?: string): void\n\n /**\n * Complete stop of the route animation on the map\n * @deprecated Not yet implemented.\n */\n stopAnimateRoute(): void\n\n /**\n * Add a step animation to the map.\n * @param routeConfig Parameters to get a route or the route object\n * @param drawConfig\n * @param animationConfig\n * @returns\n */\n addStepAnimation(\n routeConfig: GetRouteConfiguration | MVXRoute,\n drawConfig?: AnimationDrawingConfig,\n animationConfig?: AnimationConfig\n ): Promise<MVXRoute>\n\n /**\n * Add a step animation to the map.\n * Use a new endpoint for the route data.\n * @param routeConfig Parameters to get a route or the route object\n * @param drawConfig\n * @param animationConfig\n * @returns\n */\n addStepAnimationV2(\n routeConfig: GetRouteConfiguration | MVXRoute,\n drawConfig?: AnimationDrawingConfig,\n animationConfig?: AnimationConfig\n ): Promise<MVXRoute>\n\n /**\n * Animate the current step and leave the map ready for the next step animation.\n * @param routeId Optional ID of the specific route. If not provided, uses the last added route.\n */\n nextStepAnimation(routeId?: string): void\n\n /**\n * Leave the map ready to animate the previous step.\n * @param routeId Optional ID of the specific route. If not provided, uses the last added route.\n */\n previousStepAnimation(routeId?: string): void\n\n /**\n * Center the map on the current marker position for animation based on steps\n * @param routeId Optional ID of the specific route. If not provided, uses the last added route.\n */\n centerOnCurrentStepAnimation(routeId?: string): void\n\n /**\n * Geolocate the user and track their current location on the current map\n * @param enableHighAccuracy if `true`, it'll get try to receive the best possible location results\n * @param geoLocation the geolocation object to use for tracking the user's location. If not provided, it'll use the default navigator.geolocation object.\n * @param icon optional custom HTML element to use as the user location marker icon\n */\n addUserLocationTracking(\n enableHighAccuracy?: boolean,\n geoLocation?: Geolocation,\n icon?: HTMLElement\n ): void\n\n /**\n * Remove user location tracking from the map\n */\n removeUserLocationTracking(): void\n\n /**\n * function to change the lang of requests\n * @param lang request response language\n */\n setLang(lang: string): void\n\n /**\n * Sets selected place as new parent place for loaded map and, if desired, loads new style\n * @param place The new parent place\n * @param updateStyle Defines whether the new parent place's style must be set\n * @param onStyleReady A callback function to be executed when the style loading is completed\n */\n setParentPlace(place: MVXPlace, updateStyle: boolean, onStyleReady?: () => void): void\n\n /**\n * Removes parent place property for current map\n */\n removeParentPlace(): void\n\n /**\n * Check if given position is inside map bounds or not\n * @param point position to check\n * @returns True if inside bounds or if the map doesn't have max bounds set, False otherwise\n */\n isInsideBounds(point: LatLng): boolean\n\n /**\n * Clears the tile cache, forcing tiles to be re-fetched on next request.\n * This clears both the in-memory MapLibre cache and triggers a repaint.\n *\n * @remarks\n * Useful when:\n * - Style has been updated on the server\n * - You want to free up memory\n * - Tiles appear corrupted or outdated\n */\n clearTileCache(): void\n}\n\n/**\n * Class to interact with the map.\n * @category Map\n * @hidden\n */\nexport class InternalMapVXMap extends Loggeable implements MapVXMap {\n private readonly token: string\n private readonly repository: Repository\n private parentPlaceId?: string\n private parentPlace?: MVXPlace\n private potentialParentPlaces: MVXPlace[] = []\n private innerFloors: InnerFloor[] = []\n private subPlaces: MVXPlace[] = []\n private currentFloor: string | null | undefined = \"\"\n private baseFilters: Record<string, ExpressionFilterSpecification> = {}\n map!: Map\n private markers: MarkerAttribute[] = []\n private userLocationMarker: MarkerAttribute | undefined\n private watchPositionID: number | undefined\n private readonly routeController: RouteController\n private clickCallback?: (arg: string) => void\n private onFloorChange?: (newFloorId: string) => void\n private onParentPlaceChange?: (newParentPlaceId: string) => void\n private enableHover: boolean = false\n private hoveredId: string = \"unselected\"\n private failedTiles = new Set<any>()\n private retryTimer: NodeJS.Timeout | undefined\n private geoLocation: Geolocation = navigator.geolocation\n private boundOnSourceData?: (e: MapSourceDataEvent) => void\n private boundOnSourceDataAbort?: (e: MapSourceDataEvent) => void\n private boundOnWebGLContextLost?: (e: any) => void\n private boundOnWebGLContextRestored?: () => void\n private readonly tileCacheConfig: Required<MapTileCacheConfig>\n\n /**\n * Creates a new map instance with the parameters specified in mapConfig and assigns it to the provided HTML container.\n * @param mapConfig Configuration parameters for the map.\n * @param container Container where the assignment of the created map is required.\n * @param parentPlace Parent place required for map floor mapping, along with the display of subplaces.\n * @param token The token provided for the creation and fetching of map information.\n * @returns A new instance of MapVXMap.\n */\n constructor(mapConfig: MapConfig, container: HTMLElement, token: string) {\n super()\n if (rtlLanguages.includes(mapConfig.lang ?? \"\")) {\n this.setRTLSupport()\n }\n this.repository = new Repository(\n token,\n mapConfig.lang ?? \"en\",\n mapConfig.apiUrl,\n undefined,\n mapConfig.mapvxRequestContext\n )\n this.token = token\n this.parentPlaceId = mapConfig.parentPlaceId\n this.routeController = new RouteController(this)\n this.userLocationMarker = undefined\n this.watchPositionID = undefined\n this.onFloorChange = mapConfig.onFloorChange\n this.onParentPlaceChange = mapConfig.onParentPlaceChange\n // Merge tile cache config with defaults\n this.tileCacheConfig = {\n ...DEFAULT_TILE_CACHE_CONFIG,\n ...mapConfig.tileCache,\n }\n\n if (mapConfig.parentPlaceId != null) {\n this.initialPlaceDetailSetUp(mapConfig.parentPlaceId, mapConfig.authToken)\n }\n if (\n mapConfig.otherPotentialParentPlacesIds &&\n mapConfig.otherPotentialParentPlacesIds.length > 0\n ) {\n this.loadOtherPotentialParentPlaces(mapConfig.otherPotentialParentPlacesIds)\n }\n this.enableHover = mapConfig.enableHover || false\n this.initialMapStyleSetUp(mapConfig, container)\n }\n\n private setRTLSupport(): void {\n setRTLTextPlugin(\n \"https://unpkg.com/@mapbox/mapbox-gl-rtl-text@0.3.0/dist/mapbox-gl-rtl-text.js\",\n false\n ).catch(() => {\n // RTL support may fail in some browsers - this is expected\n })\n }\n\n /**\n * Transform style sources to use cached-tile:// protocol for tile URLs.\n * This enables the service worker to intercept and cache tile requests.\n * @param style The original style specification\n * @returns A new style with transformed tile URLs\n */\n private transformStyleForCaching(style: StyleSpecification): StyleSpecification {\n if (!style) {\n return style\n }\n const transformedStyle = deepClone(style)\n\n if (transformedStyle?.sources) {\n for (const sourceKey of Object.keys(transformedStyle.sources)) {\n const source = transformedStyle.sources[sourceKey] as any\n // Transform vector and raster tile sources\n // Only transform source.tiles (actual tile URLs), NOT source.url (TileJSON metadata URL)\n // source.url points to a TileJSON file that returns JSON, not binary tile data\n if (source.tiles && Array.isArray(source.tiles)) {\n source.tiles = source.tiles.map((tileUrl: string) => {\n if (tileUrl.startsWith(\"https://\")) {\n return tileUrl.replace(\"https://\", \"cached-tile://\")\n }\n return tileUrl\n })\n }\n }\n }\n\n return transformedStyle\n }\n\n private initialPlaceDetailSetUp(parentPlaceId: string, withBearerToken?: string): void {\n if (withBearerToken) {\n this.repository\n .fetchAndParseAnyPlaceDetail(parentPlaceId, withBearerToken)\n .then((place) => {\n this.changeParentPlaceTo(place)\n this.potentialParentPlaces.push(place)\n })\n .catch(console.error)\n return\n }\n this.repository\n .fetchAndParsePlaceDetail(parentPlaceId)\n .then((place) => {\n this.changeParentPlaceTo(place)\n this.potentialParentPlaces.push(place)\n })\n .catch(console.error)\n }\n\n private loadOtherPotentialParentPlaces(ids: string[]): void {\n Promise.all(ids.map((id) => this.repository.fetchAndParsePlaceDetail(id)))\n .then((places) => {\n this.potentialParentPlaces.push(...places)\n })\n .catch(console.error)\n }\n\n private subPlacesLoad(parentPlaceId: string): void {\n this.repository\n .fetchAndParseSubPlaces(parentPlaceId)\n .then((subPlaces) => {\n this.subPlaces = subPlaces\n })\n .catch(console.error)\n }\n\n private initialMapStyleSetUp(mapConfig: MapConfig, container: HTMLElement): void {\n if (mapConfig.institutionId && mapConfig.authToken) {\n this.repository\n .fetchAndParseAnyMapStyle(mapConfig.institutionId, mapConfig.authToken)\n .then((style) => {\n return this.onMapStyleLoaded(mapConfig, container, style)\n })\n .catch(console.error)\n return\n }\n this.repository\n .fetchAndParseMapStyle(mapConfig.parentPlaceId)\n .then((style) => {\n return this.onMapStyleLoaded(mapConfig, container, style)\n })\n .catch(console.error)\n }\n\n private onMapStyleLoaded(\n mapConfig: MapConfig,\n container: HTMLElement,\n style: StyleSpecification\n ): maplibregl.Map {\n // Determine if service worker caching should be enabled\n const useServiceWorkerCaching =\n this.tileCacheConfig.enabled && this.tileCacheConfig.persistToServiceWorker\n\n // Register cached-tile protocol only if service worker caching is enabled\n if (useServiceWorkerCaching) {\n registerCachedTileProtocol()\n }\n\n // Transform tile URLs only if service worker caching is enabled\n const finalStyle = useServiceWorkerCaching ? this.transformStyleForCaching(style) : style\n\n const mapOptions: MapOptions = {\n container,\n style: finalStyle,\n center: mapConfig.center,\n zoom: mapConfig.zoom,\n pitch: mapConfig.pitch ?? 0,\n attributionControl: false,\n maplibreLogo: false,\n bearingSnap: mapConfig.bearingSnap ?? 0,\n cancelPendingTileRequestsWhileZooming: false,\n // Use configured maxTiles for MapLibre's memory cache\n maxTileCacheSize: this.tileCacheConfig.maxTiles,\n }\n\n if (mapConfig.maxZoom) mapOptions.maxZoom = mapConfig.maxZoom\n if (mapConfig.minZoom) mapOptions.minZoom = mapConfig.minZoom\n\n if (mapConfig.maxBounds && mapConfig.maxBounds.length > 1) {\n const boundingBox = getBoundingBox(mapConfig.maxBounds)\n mapOptions.maxBounds = new LngLatBounds(\n [boundingBox[0].lng, boundingBox[0].lat],\n [boundingBox[1].lng, boundingBox[1].lat]\n )\n }\n\n this.map = new Map(mapOptions)\n this.map.addControl(\n new NavigationControl({\n showCompass: mapConfig.showCompass !== undefined ? mapConfig.showCompass : true,\n showZoom: mapConfig.showZoom !== undefined ? mapConfig.showZoom : true,\n }),\n mapConfig.navigationPosition ?? \"top-right\"\n )\n this.map.on(\"load\", () => {\n this.whenStyleUpdates(style)\n if (mapConfig.lang) this.setLayersForLanguage(mapConfig.lang)\n mapConfig.onMapReady?.()\n this.onHover()\n this.subscribeToFailedTiles()\n })\n this.map.on(\"zoomend\", () => {\n mapConfig.onZoomEnd?.(this.getZoomLevel())\n })\n this.map.on(\"rotate\", () => {\n mapConfig.onRotate?.(this.map.getBearing())\n })\n this.defaultClickListener()\n return this.map\n }\n\n private setBaseFilters(style: StyleSpecification | undefined): void {\n if (!style) return\n const publicPlaceFilter: ExpressionFilterSpecification = [\"==\", [\"get\", \"public_place\"], true]\n style.layers\n .filter((layer) => layer.id.startsWith(\"indoor-\"))\n .forEach((layer) => {\n const baseFilter = this.baseFilters[layer.id]\n if (baseFilter != null) {\n const finalFilter: ExpressionFilterSpecification = [\"all\", baseFilter, publicPlaceFilter]\n this.map.setFilter(layer.id, finalFilter)\n } else {\n this.map.setFilter(layer.id, publicPlaceFilter)\n }\n\n switch (layer.type) {\n case \"line\":\n case \"symbol\":\n case \"fill-extrusion\":\n case \"fill\":\n if (layer.filter != null) {\n this.baseFilters[layer.id] = layer.filter as ExpressionFilterSpecification\n }\n break\n default:\n break\n }\n })\n }\n\n private setLayersForLanguage(lang: string): void {\n // outdoor layers\n const layersName = [\n \"aerodrome_label\",\n \"mountain_peak\",\n \"park\",\n \"place\",\n \"poi\",\n \"transportation_name\",\n \"water_name\",\n \"waterway\",\n ]\n const layers = this.map.getStyle()?.layers ?? []\n const layersIds = layers\n .filter(\n (layer) =>\n layer.type === \"symbol\" &&\n layer.source === \"openmaptiles\" &&\n layersName.includes(layer[\"source-layer\"] ?? \"\")\n )\n .map((layer) => {\n return layer.id\n })\n layersIds.forEach((id) => {\n try {\n const property = this.map.getLayoutProperty(id, \"symbol-placement\") as string\n\n this.map.setLayoutProperty(id, \"text-field\", [\n \"case\",\n [\"has\", `name:${lang}`],\n [\"get\", `name:${lang}`],\n [\n \"format\",\n [\"get\", \"name:latin\"],\n property === \"line\" ? \" \" : \"\\n\",\n [\"get\", \"name:nonlatin\"],\n ],\n ])\n } catch (error) {\n // Layer language update may fail if layer doesn't exist\n }\n })\n // indoor layers\n const indoorLayerIds = layers\n .filter(\n (layer) =>\n layer.type === \"symbol\" &&\n layer.source === \"indoorequal\" &&\n layer.layout?.[\"text-field\"] !== undefined\n )\n .map((layer) => {\n return layer.id\n })\n indoorLayerIds.forEach((id) => {\n try {\n this.map.setLayoutProperty(id, \"text-field\", [\n \"case\",\n [\"has\", `name:${lang}`],\n [\"get\", `name:${lang}`],\n [\"get\", \"name\"],\n ])\n } catch (error) {\n // Layer language update may fail if layer doesn't exist\n }\n })\n }\n\n /**\n * Add values to identify the client.\n * @param segmentation The pair values to use as segmentation.\n * @returns The segmentation with the added values.\n */\n protected prepareSegmentation(segmentation: Record<string, string>): Record<string, string> {\n return {\n ...segmentation,\n token: this.token,\n parentPlaceId: this.parentPlaceId ?? \"None\",\n }\n }\n\n destroyMap(): void {\n this.map.remove()\n this.unsubscribeFromFailedTiles()\n }\n\n clearTileCache(): void {\n try {\n // Clear the failed tiles tracking set\n this.failedTiles.clear()\n\n // Force MapLibre to reload all visible tiles by triggering a repaint\n // Note: MapLibre doesn't expose a direct cache clear method, so we\n // trigger a style refresh which causes tiles to be re-requested\n if (this.map) {\n this.map.triggerRepaint()\n }\n\n this.logEvent(\"clearTileCache\")\n } catch (error) {\n // Tile cache clear may fail if cache doesn't exist\n }\n }\n\n getCurrentFloor(): string {\n return this.currentFloor ?? \"\"\n }\n\n /**\n * Performs changes when parent place is updated\n * @param place new parent place\n * @param updateStyle defines if new parent place style must be set\n */\n\n private changeParentPlaceTo(\n place?: MVXPlace,\n updateStyle: boolean = false,\n onStyleReady?: () => void\n ): void {\n this.parentPlace = place\n this.parentPlaceId = place?.mapvxId\n this.innerFloors = place?.innerFloors?.sort((a, b) => a.index - b.index) ?? []\n this.currentFloor =\n this.innerFloors.find((floor) => floor.defaultFloor)?.key ?? this.innerFloors[0]?.key ?? \"\"\n\n if (place) {\n this.subPlacesLoad(place.mapvxId)\n }\n\n if (updateStyle) {\n this.repository\n .fetchAndParseMapStyle(place?.mapvxId)\n .then((style) => {\n const useServiceWorkerCaching =\n this.tileCacheConfig.enabled && this.tileCacheConfig.persistToServiceWorker\n const finalStyle = useServiceWorkerCaching ? this.transformStyleForCaching(style) : style\n this.map.setStyle(finalStyle)\n this.whenStyleUpdates(finalStyle)\n onStyleReady?.()\n })\n .catch(console.error)\n }\n }\n\n /**\n * Update the parent place and the current floor.\n * Does not update layers, markers, etc.\n * @param parentPlaceId\n * @param floorId\n * @throws A error if the parent place is not one of the allowed places to show.\n */\n private updatePlaceAndFloor(parentPlaceId: string, floorId?: string): void {\n const place = this.potentialParentPlaces.find((place) => place.mapvxId === parentPlaceId)\n this.parentPlace = place\n this.parentPlaceId = place?.mapvxId\n this.innerFloors = place?.innerFloors.sort((a, b) => a.index - b.index) ?? []\n this.currentFloor =\n floorId ??\n this.innerFloors.find((floor) => floor.defaultFloor)?.key ??\n this.innerFloors[0]?.key ??\n \"\"\n }\n\n updateParentPlaceAndFloor(\n parentPlaceId: string,\n floorId?: string,\n options?: FloorUpdateOptions\n ): void {\n try {\n this.updatePlaceAndFloor(parentPlaceId, floorId)\n this.filterByFloorKey(this.currentFloor)\n this.onParentPlaceChange?.(parentPlaceId)\n this.onFloorChange?.(this.currentFloor ?? \"\")\n this.logEvent(\"updateParentPlaceAndFloor\")\n options?.onComplete?.()\n } catch (error) {\n // Parent place/floor update may fail\n }\n }\n\n setLang(lang: string) {\n this.repository.setLang(lang)\n }\n\n setParentPlace(place: MVXPlace, updateStyle: boolean, onStyleReady?: () => void): void {\n this.changeParentPlaceTo(place, updateStyle, onStyleReady)\n }\n\n /**\n * Removes current parent place and updates style to default\n */\n removeParentPlace(): void {\n this.changeParentPlaceTo(undefined, true)\n }\n\n /**\n * Applies filters and changes to layers according to given style.\n * Expected to be called every time a new style is loaded\n * @param newStyle\n */\n private whenStyleUpdates(newStyle: StyleSpecification | undefined): void {\n if (newStyle) {\n this.setBaseFilters(newStyle)\n }\n this.routeController.addSourcesAndLayers()\n this.filterByFloorKey(this.currentFloor)\n }\n\n addMarker(marker: MarkerConfig): string {\n try {\n // Check if a marker with the same ID already exists and remove it\n if (marker.id) {\n const existingMarkerIndex = this.markers.findIndex((m) => m.id === marker.id)\n if (existingMarkerIndex !== -1) {\n const existingMarker = this.markers[existingMarkerIndex]\n existingMarker.remove()\n this.markers.splice(existingMarkerIndex, 1)\n this.logEvent(\"removeMarker\", {\n markerId: marker.id,\n reason: \"duplicate\",\n })\n }\n }\n\n const markerCreated = new MarkerAttribute(marker)\n const isOutdoor =\n !this.parentPlace ||\n (this.innerFloors.find((floor) => floor.key === this.currentFloor)?.reachableFromGPS ??\n false)\n markerCreated.changeFloor(this.currentFloor, this.map, isOutdoor)\n this.markers.push(markerCreated)\n this.logEvent(\"addMarker\")\n return markerCreated.id\n } catch (error) {\n throw new Error(\"Failed to add marker\")\n }\n }\n\n updateMarker(markerConfig: MarkerConfig): string {\n try {\n const marker: MarkerAttribute | undefined = this.markers.find((e) => e.id === markerConfig.id)\n\n if (marker !== undefined) {\n marker.updateIcon(markerConfig)\n }\n\n this.logEvent(\"updateMarker\")\n return marker?.id ?? \"\"\n } catch (error) {\n throw new Error(\"Failed to update marker\")\n }\n }\n\n updateMarkerPosition(markerId: string, newPosition: LatLng): void {\n try {\n const marker = this.markers.find((e) => e.id === markerId)\n\n if (marker !== undefined) {\n marker.setLngLat(newPosition)\n }\n\n this.logEvent(\"updateMarkerPosition\")\n } catch (error) {\n throw new Error(\"Failed to update marker position\")\n }\n }\n\n showMarker(markerId: string): void {\n try {\n const marker = this.markers.find((e) => e.id === markerId)\n\n if (marker !== null && this.map) {\n marker?.show(this.map)\n }\n this.logEvent(\"showMarker\")\n } catch (error) {\n // Show marker may fail if marker doesn't exist\n }\n }\n\n hideMarker(markerId: string): void {\n try {\n const marker = this.markers.find((e) => e.id === markerId)\n\n if (marker !== null) {\n marker?.hide()\n }\n this.logEvent(\"hideMarker\")\n } catch (error) {\n // Hide marker may fail if marker doesn't exist\n }\n }\n\n removeMarker(markerId: string): void {\n try {\n const marker = this.markers.find((e) => e.id === markerId)\n\n if (marker !== null) {\n marker?.remove()\n this.markers = this.markers.filter((e) => e.id !== markerId)\n }\n this.logEvent(\"removeMarker\")\n } catch (error) {\n throw new Error(\"Failed to remove marker\")\n }\n }\n\n removeAllMarkers(): void {\n try {\n this.markers.forEach((marker) => {\n marker.remove()\n })\n this.markers = []\n\n this.logEvent(\"removeAllMarkers\")\n } catch (error) {\n throw new Error(\"Failed to remove all markers\")\n }\n }\n\n /**\n * Use it to change the current layer\n * @param floorKey floor id\n */\n private filterByFloorKey(floorKey: string | null | undefined): void {\n this.currentFloor = floorKey\n const floorKeyString = floorKey ?? \"\"\n if (this.innerFloors.every((floor) => floor.key !== floorKey) && floorKey !== \"\") {\n this.logEvent(\"invalidFloorKey\", { floorKey: floorKeyString })\n }\n this.updateFiltersTo(floorKeyString)\n this.updateMarkersTo(floorKeyString)\n this.routeController.updateRouteLayers(floorKeyString)\n this.routeController.updateRouteMarkerVisibility(floorKeyString)\n }\n\n getContainer(): HTMLElement {\n return this.map.getContainer()\n }\n\n private updateMarkersTo(floorId: string | null | undefined): void {\n const isOutdoor =\n !this.parentPlace ||\n (this.innerFloors.find((floor) => floor.key === floorId)?.reachableFromGPS ?? false)\n this.markers.forEach((e) => {\n e.changeFloor(floorId, this.map, isOutdoor)\n })\n }\n\n private updateFiltersTo(floorId: string | null | undefined): void {\n if (!this.map) return\n const layers = this.map.getStyle()?.layers ?? []\n layers\n .filter((l) => l.id.startsWith(\"base-indoor-\"))\n .forEach((l) => {\n this.map.removeLayer(l.id)\n })\n\n const baseFloorId = this.innerFloors.find((floor) => floor.key === floorId)?.baseFloor\n const indoorLayers = layers.filter((layer) => layer.id.startsWith(\"indoor-\"))\n if (baseFloorId != undefined) {\n const firstLayerId = indoorLayers[0]?.id\n indoorLayers\n .filter((layer) => layer.type !== \"fill-extrusion\")\n .forEach((layer) => {\n const baseLayer = deepClone(layer)\n baseLayer.id = \"base-\" + layer.id\n this.baseFilters[baseLayer.id] = this.baseFilters[layer.id]\n this.map.addLayer(baseLayer, firstLayerId)\n this.applyLayerFilters(baseLayer, baseFloorId)\n })\n }\n\n indoorLayers.forEach((layer) => {\n this.applyLayerFilters(layer, floorId)\n })\n }\n\n applyLayerFilters(layer: LayerSpecification, floorId: string | null | undefined): void {\n let baseFilter = this.baseFilters[layer.id]\n const floorIdString = floorId ?? \"\"\n const floorFilter: ExpressionFilterSpecification = [\n \"any\",\n [\"in\", floorIdString, [\"get\", \"floor_key\"]],\n ]\n const publicPlaceFilter: ExpressionFilterSpecification = [\"==\", [\"get\", \"public_place\"], true]\n\n const subPlaceFilter: ExpressionFilterSpecification = [\n \"!\",\n [\"in\", this.parentPlaceId ?? \"noRef\", [\"get\", \"is_subplace\"]],\n ]\n\n const showInFloorFilter: ExpressionFilterSpecification = [\n \"in\",\n floorIdString,\n [\"get\", \"show_in_floor\"],\n ]\n\n let basicFilters: ExpressionFilterSpecification = publicPlaceFilter\n if (this.parentPlaceId != null) {\n basicFilters = [\"any\", floorFilter, publicPlaceFilter]\n }\n const customFilters: ExpressionFilterSpecification = [\n \"all\",\n basicFilters,\n [\"any\", subPlaceFilter, showInFloorFilter],\n ]\n\n if (layer.id.includes(\"hover\")) {\n baseFilter = [\"in\", this.hoveredId, [\"get\", \"ref\"]]\n } else if (\n !layer.id.includes(\"colored\") &&\n (layer.type == \"fill\" || layer.type === \"fill-extrusion\")\n ) {\n customFilters.push([\"!\", [\"in\", this.hoveredId, [\"get\", \"ref\"]]])\n }\n\n if (baseFilter != null) {\n const finalFilter: ExpressionFilterSpecification = [\"all\", baseFilter, customFilters]\n this.map.setFilter(layer.id, finalFilter)\n } else {\n this.map.setFilter(layer.id, customFilters)\n }\n }\n\n /**\n * Floors of the parent place\n * @returns Inner floors of the parent place\n */\n getInnerFloors(): InnerFloor[] {\n return this.innerFloors\n }\n\n updateCamera(newCamera: MapCamera & CameraAnimation, callback?: () => void): void {\n void this.map.once(\"moveend\", callback)\n\n this.map.easeTo({\n ...newCamera,\n })\n }\n\n setMaxZoom(zoomLvl: number, options?: ZoomOptions): void {\n this.map.setMaxZoom(zoomLvl)\n options?.onComplete?.()\n }\n\n setMinZoom(zoomLvl: number, options?: ZoomOptions): void {\n this.map.setMinZoom(zoomLvl)\n options?.onComplete?.()\n }\n\n isInsideBounds(point: LatLng): boolean {\n const mapBounds = this.map.getMaxBounds()\n if (mapBounds != null) {\n return mapBounds.contains(point)\n }\n return true\n }\n\n setMaxBounds(coordinates: LatLng[], options?: BoundsOptions): void {\n if (coordinates.length > 1) {\n const boundingBox = getBoundingBox(coordinates)\n this.map.setMaxBounds(\n new LngLatBounds(\n [boundingBox[0].lng, boundingBox[0].lat],\n [boundingBox[1].lng, boundingBox[1].lat]\n )\n )\n }\n options?.onComplete?.()\n }\n\n fitCoordinates(coordinates: LatLng[], options?: FitOptions): void {\n if (coordinates.length === 0) {\n return\n }\n\n const onComplete = options?.onComplete\n\n if (coordinates.length === 1) {\n const [coord] = coordinates\n if (onComplete) {\n void this.map.once(\"moveend\", onComplete)\n }\n this.map.setCenter({\n lat: coord.lat,\n lng: coord.lng,\n })\n } else {\n let minLat: number | undefined\n let minLng: number | undefined\n let maxLat: number | undefined\n let maxLng: number | undefined\n\n for (const coord of coordinates) {\n const { lat, lng } = coord\n minLat = minLat === undefined ? lat : Math.min(minLat, lat)\n minLng = minLng === undefined ? lng : Math.min(minLng, lng)\n maxLat = maxLat === undefined ? lat : Math.max(maxLat, lat)\n maxLng = maxLng === undefined ? lng : Math.max(maxLng, lng)\n }\n\n const bounds: [number, number, number, number] = [\n minLng ?? 0,\n minLat ?? 0,\n maxLng ?? 0,\n maxLat ?? 0,\n ]\n\n // Get container dimensions for percentage-based padding calculations\n const container = this.map.getContainer()\n const containerWidth = container.clientWidth\n const containerHeight = container.clientHeight\n\n // Convert padding values with units to pixels\n const padding = convertPaddingToPixels(options?.padding, containerWidth, containerHeight)\n\n const fitOptions = {\n ...options,\n padding,\n }\n const bearing = this.map.getBearing()\n const pitch = this.map.getPitch()\n fitOptions.bearing = fitOptions.bearing !== undefined ? fitOptions.bearing : bearing\n fitOptions.pitch = fitOptions.pitch !== undefined ? fitOptions.pitch : pitch\n\n if (onComplete) {\n void this.map.once(\"moveend\", onComplete)\n }\n this.map.fitBounds(bounds, fitOptions)\n }\n }\n\n fitRouteByPlace(route: MVXRoute, placeId: string, options?: FitOptions): void {\n // Filter steps that belong to the specified place\n const stepsInPlace = route.steps.filter(\n (step) => step.startInsidePlace === placeId || step.endInsidePlace === placeId\n )\n\n if (stepsInPlace.length === 0) {\n return\n }\n\n // Extract all coordinates from the filtered steps\n const coords: LatLng[] = stepsInPlace.flatMap((step) => extractStepCoordinates(step))\n\n if (coords.length > 0) {\n this.fitCoordinates(coords, options)\n }\n }\n\n getZoomLevel(): number {\n return this.map.getZoom()\n }\n\n updateFloor(floorId: string, options?: FloorUpdateOptions): void {\n try {\n this.filterByFloorKey(floorId)\n this.onFloorChange?.(floorId)\n this.logEvent(\"updateFloor\", { floorId })\n options?.onComplete?.()\n } catch (error) {\n // Floor update may fail\n }\n }\n\n updatePlaceAndFloorForRouting(placeId: string, floorId: string): void {\n try {\n this.updatePlaceAndFloor(placeId, floorId)\n this.updateFiltersTo(floorId)\n this.updateMarkersTo(floorId)\n this.onFloorChange?.(floorId)\n this.logEvent(\"updatePlaceAndFloorForRouting\", { floorId })\n } catch (error) {\n // Place/floor update for routing may fail\n }\n }\n\n async addRoute(\n config: GetRouteConfiguration,\n drawConfig: DrawRouteConfiguration = {}\n ): Promise<MVXRoute> {\n try {\n this.logEvent(\"addRoute\")\n const fetchRouteConfig = new InternalGetRouteConfiguration(config)\n const drawRouteConfig = new InternalDrawRouteConfiguration(drawConfig)\n\n const route = await this.repository.fetchAndParseRoute(fetchRouteConfig)\n this.routeController.addRoute(route, drawRouteConfig)\n return route\n } catch (error) {\n throw new Error(\"Error: Failed to add route\")\n }\n }\n\n updateRouteProgress(\n routeId: string,\n position: LatLng,\n behindStyle: RouteStyle = { type: \"Solid\", color: \"#757575\" }\n ): void {\n try {\n const behindConfig = new InternalDrawRouteConfiguration({\n routeStyle: behindStyle,\n })\n this.routeController.updateRouteProgress(routeId, position, behindConfig)\n } catch (error) {\n // Update may fail if route doesn't exist\n }\n }\n\n removeRoute(routeId?: string): void {\n try {\n this.logEvent(\"removeRoute\")\n this.routeController.removeRoute(routeId)\n } catch (error) {\n // Remove route may fail if no route exists\n }\n }\n\n removeRouteById(routeId: string): void {\n try {\n this.logEvent(\"removeRouteById\")\n this.routeController.removeRoute(routeId)\n } catch (error) {\n // Remove route may fail if route doesn't exist\n }\n }\n\n removeAllRoutes(): void {\n try {\n this.logEvent(\"removeAllRoutes\")\n this.routeController.removeAllRoutes()\n } catch (error) {\n // Remove all routes may fail\n }\n }\n\n getActiveRouteIds(): string[] {\n return this.routeController.getRouteIds()\n }\n\n addPopOver(popOverConfig: PopOverConfig): string {\n const placeId = popOverConfig.placeId\n if (placeId !== undefined) {\n const pointedPlace = this.subPlaces.find((subplace) => {\n return subplace.clientId === placeId || subplace.mapvxId === placeId\n })\n if (pointedPlace !== undefined) {\n new maplibregl.Popup()\n .setLngLat(pointedPlace.position)\n .setHTML(pointedPlace.title)\n .addTo(this.map)\n }\n }\n return \"\"\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n removePopOver(id: string): void {\n throw Error(\"Not implemented\")\n }\n\n startClickListener(callback: (arg: string) => void): void {\n this.clickCallback = callback\n }\n\n stopClickListener(): void {\n this.clickCallback = undefined\n }\n\n private defaultClickListener(): void {\n this.map.on(\"click\", async (e) => {\n const features = this.map.queryRenderedFeatures(e.point)\n // Filter room features by current floor\n const roomFeatures = features.filter(\n (feature) =>\n feature.properties.class === \"room\" && feature.properties?.floor_key === this.currentFloor\n )\n const touchedFeature = roomFeatures[0]\n const ref = touchedFeature?.properties.ref\n if (ref != null && typeof ref === \"string\" && ref.length > 0) {\n console.log(\"touchedFeature\", ref)\n\n // First, search in current subPlaces\n let clickedPlace = this.subPlaces.find((subPlace) => subPlace.mapvxId === ref)\n\n // If not found, search in subplaces of potential parent places\n if (clickedPlace === undefined) {\n for (const potentialParentPlace of this.potentialParentPlaces) {\n const cachedSubPlaces = this.repository.getCachedSubPlaces(\n potentialParentPlace.mapvxId\n )\n if (cachedSubPlaces) {\n clickedPlace = cachedSubPlaces.find((subPlace) => subPlace.mapvxId === ref)\n if (clickedPlace !== undefined) {\n break\n }\n }\n }\n }\n\n // As last resort, search in general cache\n if (clickedPlace === undefined) {\n const cachedPlaces = this.repository.getCachedPlaces([ref])\n if (cachedPlaces.length === 0) {\n console.log(\"fetching place detail from server\", ref)\n clickedPlace = await this.repository.fetchAndParsePlaceDetail(ref)\n } else {\n console.log(\"using cached place detail\", ref)\n clickedPlace = cachedPlaces?.[0]\n }\n }\n\n console.log(\"clickedPlace\", clickedPlace?.title)\n const clickedPlaceId: string = clickedPlace?.mapvxId ?? clickedPlace?.clientId ?? \"\"\n\n if (clickedPlace !== undefined && this.clickCallback) {\n this.clickCallback(clickedPlaceId)\n }\n }\n })\n }\n\n private onHover() {\n if (!this.enableHover) return\n\n this.map.on(\"mousemove\", \"hoverable\", (e) => {\n const feature = e.features?.find(\n (feature) =>\n feature.properties.ref?.length > 0 && feature.properties?.floor_key === this.currentFloor\n )\n\n const ref: string = feature?.properties.ref\n if (ref != null && typeof ref === \"string\" && ref.length > 0) {\n this.hoveredId = ref\n this.updateFiltersTo(this.currentFloor)\n } else if (ref === undefined && this.hoveredId !== \"unselected\") {\n this.hoveredId = \"unselected\"\n this.updateFiltersTo(this.currentFloor)\n }\n })\n\n // When the mouse leaves the state-fill layer, update the feature state of the\n // previously hovered feature.\n this.map.on(\"mouseleave\", \"hoverable\", () => {\n this.hoveredId = \"unselected\"\n this.updateFiltersTo(this.currentFloor)\n })\n }\n\n setPlacesAsSelected(placeIds: string[], color?: string): void {\n try {\n if (!this.hasLayer(\"indoor-colored-places\")) {\n this.createColoredPlacesLayer()\n }\n const basicFilter = this.createBasicFilters()\n\n const coloredPlacesFilters = placeIds.map((id) => {\n const filter: ExpressionFilterSpecification = [\"==\", [\"get\", \"ref\"], id]\n return filter\n })\n\n const placeFilter: ExpressionFilterSpecification = [\"any\", ...coloredPlacesFilters]\n const condition: ExpressionFilterSpecification = [\"all\", placeFilter, basicFilter]\n this.map.setFilter(\"indoor-colored-places\", condition)\n this.baseFilters[\"indoor-colored-places\"] = placeFilter\n\n if (color !== undefined) {\n const layer = this.map.getLayer(\"indoor-colored-places\")\n switch (layer?.type) {\n case \"fill\":\n this.map.setPaintProperty(\"indoor-colored-places\", \"fill-color\", color)\n break\n case \"fill-extrusion\":\n this.map.setPaintProperty(\"indoor-colored-places\", \"fill-extrusion-color\", color)\n break\n default:\n break\n }\n }\n } catch (error) {\n // Place selection may fail if layer doesn't exist\n }\n }\n\n private is3DStyle(): boolean {\n const layers = this.map.getStyle().layers\n return layers.some((layer) => layer.type === \"fill-extrusion\")\n }\n\n private createColoredPlacesLayer(): void {\n if (this.is3DStyle()) {\n const layer: FillExtrusionLayerSpecification = {\n id: \"indoor-colored-places\",\n type: \"fill-extrusion\",\n source: \"indoorequal\",\n \"source-layer\": \"area\",\n filter: [\"all\", [\"has\", \"ref\"], [\"==\", [\"get\", \"ref\"], \"unselected\"]],\n paint: {\n \"fill-extrusion-height\": 2.5,\n \"fill-extrusion-color\": \"#276EF1\",\n \"fill-extrusion-opacity\": 0.8,\n },\n }\n this.map.addLayer(layer)\n } else {\n const layer: FillLayerSpecification = {\n id: \"indoor-colored-places\",\n type: \"fill\",\n source: \"indoorequal\",\n \"source-layer\": \"area\",\n filter: [\"all\", [\"has\", \"ref\"], [\"==\", [\"get\", \"ref\"], \"unselected\"]],\n paint: {\n \"fill-color\": \"#276EF1\",\n },\n }\n this.map.addLayer(layer)\n }\n }\n\n private createBasicFilters(): ExpressionFilterSpecification {\n const publicPlaceFilter: ExpressionFilterSpecification = [\"==\", [\"get\", \"public_place\"], true]\n\n const subPlaceFilter: ExpressionFilterSpecification = [\n \"!\",\n [\"in\", this.parentPlaceId ?? \"noRef\", [\"get\", \"is_subplace\"]],\n ]\n const floorId = this.currentFloor ?? \"noRef\"\n const floorFilter: ExpressionFilterSpecification = [\"in\", floorId, [\"get\", \"floor_key\"]]\n\n const showInFloorFilter: ExpressionFilterSpecification = [\n \"in\",\n floorId,\n [\"get\", \"show_in_floor\"],\n ]\n\n let basicFilters: ExpressionFilterSpecification = publicPlaceFilter\n if (this.parentPlaceId != null) {\n basicFilters = [\"any\", floorFilter, publicPlaceFilter]\n }\n const customFilters: ExpressionFilterSpecification = [\n \"all\",\n basicFilters,\n [\"any\", subPlaceFilter, showInFloorFilter],\n ]\n return customFilters\n }\n\n private hasLayer(layerId: string): boolean {\n const layer = this.map.getLayer(layerId)\n return layer !== undefined\n }\n\n clearColoredPlaces(): void {\n if (this.hasLayer(\"indoor-colored-places\")) {\n const condition: ExpressionFilterSpecification = [\"==\", [\"get\", \"ref\"], \"unselected\"]\n this.baseFilters[\"indoor-colored-places\"] = condition\n this.map.setFilter(\"indoor-colored-places\", condition)\n }\n }\n\n async startAnimateRoute(\n routeConfig: GetRouteConfiguration | MVXRoute,\n drawConfig: AnimationDrawingConfig = {},\n animationConfig: AnimationConfig = {}\n ): Promise<MVXRoute> {\n try {\n let route: MVXRoute\n if (routeConfig instanceof MVXRoute) {\n route = routeConfig\n } else {\n const fetchRouteConfig = new InternalGetRouteConfiguration(routeConfig)\n route = await this.repository.fetchAndParseRoute(fetchRouteConfig)\n }\n const drawRouteConfig = new InternalAnimationDrawingConfig(drawConfig)\n const animationRouteConfig = new InternalAnimationConfig(animationConfig)\n\n this.routeController.startAnimating(route, drawRouteConfig, animationRouteConfig)\n return route\n } catch (error) {\n throw new Error(\"Error: Failed to start animating route\")\n }\n }\n\n async startAnimateRouteV2(\n routeConfig: GetRouteConfiguration | MVXRoute,\n drawConfig: AnimationDrawingConfig = {},\n animationConfig: AnimationConfig = {}\n ): Promise<MVXRoute> {\n try {\n let route: MVXRoute\n if (routeConfig instanceof MVXRoute) {\n route = routeConfig\n } else {\n const fetchRouteConfig = new InternalGetRouteConfiguration(routeConfig)\n route = await this.repository.fetchAndParseRouteV2(fetchRouteConfig)\n }\n const drawRouteConfig = new InternalAnimationDrawingConfig(drawConfig)\n const animationRouteConfig = new InternalAnimationConfig(animationConfig)\n\n this.routeController.startAnimating(route, drawRouteConfig, animationRouteConfig)\n return route\n } catch (error) {\n throw new Error(\"Error: Failed to start animating route\")\n }\n }\n\n pauseAnimateRoute(routeId?: string): void {\n try {\n this.routeController.pauseAnimation(routeId)\n this.logEvent(\"pauseAnimateRoute\")\n } catch (error) {\n // Pause animation may fail if no animation is running\n }\n }\n\n resumeAnimateRoute(routeId?: string): void {\n try {\n this.routeController.resumeAnimation(routeId)\n this.logEvent(\"resumeAnimateRoute\")\n } catch (error) {\n // Resume animation may fail if no animation is paused\n }\n }\n\n restartAnimateRoute(routeId?: string): void {\n try {\n this.routeController.restartAnimation(routeId)\n this.logEvent(\"restartAnimateRoute\")\n } catch (error) {\n // Restart animation may fail if no animation exists\n }\n }\n\n stopAnimateRoute(): void {\n this.logWarning(new Error(\"Not implemented\"), {\n functionName: \"stopAnimateRoute\",\n })\n }\n\n async addStepAnimation(\n routeConfig: GetRouteConfiguration | MVXRoute,\n drawConfig: AnimationDrawingConfig = {},\n animationConfig: AnimationConfig = {}\n ): Promise<MVXRoute> {\n try {\n let route: MVXRoute\n if (routeConfig instanceof MVXRoute) {\n route = routeConfig\n } else {\n const fetchRouteConfig = new InternalGetRouteConfiguration(routeConfig)\n route = await this.repository.fetchAndParseRoute(fetchRouteConfig)\n }\n\n const drawRouteConfig = new InternalAnimationDrawingConfig(drawConfig)\n const animationRouteConfig = new InternalAnimationConfig(animationConfig)\n\n this.routeController.addStepAnimation(route, drawRouteConfig, animationRouteConfig)\n this.logEvent(\"addStepAnimation\")\n\n return route\n } catch (error) {\n throw new Error(\"Error: Failed to add step animation\")\n }\n }\n\n async addStepAnimationV2(\n routeConfig: GetRouteConfiguration | MVXRoute,\n drawConfig: AnimationDrawingConfig = {},\n animationConfig: AnimationConfig = {}\n ): Promise<MVXRoute> {\n try {\n let route: MVXRoute\n if (routeConfig instanceof MVXRoute) {\n route = routeConfig\n } else {\n const fetchRouteConfig = new InternalGetRouteConfiguration(routeConfig)\n route = await this.repository.fetchAndParseRouteV2(fetchRouteConfig)\n }\n\n const drawRouteConfig = new InternalAnimationDrawingConfig(drawConfig)\n const animationRouteConfig = new InternalAnimationConfig(animationConfig)\n\n this.routeController.addStepAnimation(route, drawRouteConfig, animationRouteConfig)\n this.logEvent(\"addStepAnimationV2\")\n\n return route\n } catch (error) {\n throw new Error(\"Error: Failed to add step animation\")\n }\n }\n\n nextStepAnimation(routeId?: string): void {\n try {\n this.routeController.nextStepAnimation(routeId)\n this.logEvent(\"nextStepAnimation\")\n } catch (error) {\n throw new Error(\"Error: Failed to animate step\")\n }\n }\n\n previousStepAnimation(routeId?: string): void {\n try {\n this.routeController.previousStepAnimation(routeId)\n this.logEvent(\"previousStepAnimation\")\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n throw new Error(\"Error: Failed to prepare to animate previous step, \" + errorMessage)\n }\n }\n\n centerOnCurrentStepAnimation(routeId?: string): void {\n try {\n this.routeController.centerOnCurrentStep(routeId)\n this.logEvent(\"centerOnCurrentStepAnimation\")\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n throw new Error(\"Error: Failed to center on current step animation, \" + errorMessage)\n }\n }\n\n addUserLocationTracking(\n enableHighAccuracy?: boolean,\n geoLocation?: Geolocation,\n icon?: HTMLElement\n ): void {\n const initialCoordinate: LatLng = {\n lat: 0.0,\n lng: 0.0,\n }\n let markerIcon: HTMLElement\n if (icon != null) {\n markerIcon = icon\n } else {\n const image = new Image(40, 40)\n image.src = userLocationDataUrl\n markerIcon = image\n }\n const markerConfig: MarkerConfig = {\n coordinate: initialCoordinate,\n icon: markerIcon,\n text: \"\",\n }\n\n const marker = new MarkerAttribute(markerConfig)\n marker.addToMap(this.map)\n this.userLocationMarker = marker\n\n const updateMarker = (position: { coords: { latitude: number; longitude: number } }) => {\n marker.setLngLat([position.coords.longitude, position.coords.latitude])\n }\n this.geoLocation = geoLocation ?? navigator.geolocation\n this.watchPositionID = this.geoLocation.watchPosition(\n updateMarker,\n (error) => {\n console.error(\"Error getting user location:\", error)\n },\n {\n enableHighAccuracy: enableHighAccuracy,\n }\n )\n }\n\n removeUserLocationTracking(): void {\n if (this.userLocationMarker !== undefined) {\n this.userLocationMarker.remove()\n this.userLocationMarker = undefined\n\n // Check if watchPosition ID is valid and stop tracking\n if (this.watchPositionID) {\n this.geoLocation.clearWatch(this.watchPositionID)\n this.watchPositionID = undefined\n }\n }\n }\n\n getBearing(): number {\n return this.map.getBearing()\n }\n\n addBorderToPlaces(placeIds: string[], color?: string, width?: number): void {\n try {\n if (!this.hasLayer(\"indoor-bordered-places\")) {\n this.createBorderedPlacesLayer()\n }\n const basicFilter = this.createBasicFilters()\n\n const coloredPlacesFilters = placeIds.map((id) => {\n const filter: ExpressionFilterSpecification = [\"==\", [\"get\", \"ref\"], id]\n return filter\n })\n\n const placeFilter: ExpressionFilterSpecification = [\"any\", ...coloredPlacesFilters]\n const condition: ExpressionFilterSpecification = [\"all\", placeFilter, basicFilter]\n this.map.setFilter(\"indoor-bordered-places\", condition)\n this.baseFilters[\"indoor-bordered-places\"] = placeFilter\n\n if (color !== undefined && width !== undefined) {\n this.map.setPaintProperty(\"indoor-bordered-places\", \"line-color\", color)\n this.map.setPaintProperty(\"indoor-bordered-places\", \"line-width\", width)\n }\n } catch (error) {\n throw new Error(\"Failed to add border to places\")\n }\n }\n\n private createBorderedPlacesLayer(): void {\n const layer: LineLayerSpecification = {\n id: \"indoor-bordered-places\",\n type: \"line\",\n source: \"indoorequal\",\n \"source-layer\": \"area\",\n filter: [\"all\", [\"has\", \"ref\"], [\"==\", [\"get\", \"ref\"], \"unselected\"]],\n paint: {\n \"line-color\": \"#276EF1\",\n \"line-width\": 4,\n },\n }\n this.map.addLayer(layer)\n }\n\n clearBorderedPlaces(): void {\n if (this.hasLayer(\"indoor-bordered-places\")) {\n const condition: ExpressionFilterSpecification = [\"==\", [\"get\", \"ref\"], \"unselected\"]\n this.baseFilters[\"indoor-bordered-places\"] = condition\n this.map.setFilter(\"indoor-bordered-places\", condition)\n }\n }\n private onWebGLContextLost(e: any): void {\n e.originalEvent.preventDefault()\n console.warn(\"Contexto WebGL perdido 😢\")\n\n // Intentar restaurar el contexto automáticamente\n const canvas = this?.map?.getCanvas()\n const gl = canvas?.getContext(\"webgl\") || canvas?.getContext(\"webgl2\")\n if (gl && gl.isContextLost()) {\n canvas.addEventListener(\n \"webglcontextrestored\",\n () => {\n console.debug(\"Contexto WebGL restaurado, forzando re-render\")\n this.map.triggerRepaint() // forzar repaint\n this.failedTiles.clear()\n },\n { once: true }\n )\n\n const ext = gl.getExtension(\"WEBGL_lose_context\")\n ext?.restoreContext?.() // si aplica\n }\n }\n private onWebGLContextRestored(): void {\n console.debug(\"Evento webglcontextrestored recibido, haciendo map.redraw()\")\n this.map.redraw() // fuerza un redraw síncrono [oai_citation:0‡maplibre.org](https://www.maplibre.org/maplibre-gl-js/docs/API/classes/Map/?utm_source=chatgpt.com)\n this.failedTiles.clear()\n }\n private onSourceData(e: MapSourceDataEvent): void {\n // Only track tiles that actually failed to load (not aborted or never loaded)\n if (e.source.type === \"vector\" && e.sourceId === \"indoorequal\" && e.tile && !e.isSourceLoaded) {\n // Check if tile has an error state before adding to retry queue\n // Access state property safely as it may not always be available\n const tileState = (e.tile as any)?.state\n if (tileState === \"errored\" || tileState === \"expired\") {\n this.failedTiles.add(e.tile)\n }\n }\n }\n\n private onSourceDataAbort(e: MapSourceDataEvent): void {\n // Remove aborted tiles from retry queue as they shouldn't be retried\n if (e.source.type === \"vector\" && e.sourceId === \"indoorequal\" && e.tile) {\n this.failedTiles.delete(e.tile)\n }\n }\n\n private subscribeToFailedTiles(): void {\n if (this.retryTimer) return\n\n // Store bound functions for proper cleanup\n this.boundOnSourceData = this.onSourceData.bind(this)\n this.boundOnSourceDataAbort = this.onSourceDataAbort.bind(this)\n this.boundOnWebGLContextLost = this.onWebGLContextLost.bind(this)\n this.boundOnWebGLContextRestored = this.onWebGLContextRestored.bind(this)\n\n this.retryTimer = setInterval(() => {\n if (!this.map.getSource(\"indoorequal\")) {\n this.failedTiles.clear()\n return\n }\n\n const source = this.map.getSource(\"indoorequal\")\n if (!source || source.type !== \"vector\") {\n this.failedTiles.clear()\n return\n }\n\n // Process tiles and remove invalid ones\n const tilesToRetry: any[] = []\n const tilesToRemove: any[] = []\n\n this.failedTiles.forEach((tile) => {\n // Check if tile is still valid before attempting reload\n if (!tile || tile.state === \"unloaded\" || tile.state === \"loading\") {\n tilesToRemove.push(tile)\n return\n }\n\n // Only retry tiles that are in an error state\n if (tile.state === \"errored\" || tile.state === \"expired\") {\n tilesToRetry.push(tile)\n } else {\n // Tile is in a valid state, remove from retry queue\n tilesToRemove.push(tile)\n }\n })\n\n // Remove invalid tiles from the set\n tilesToRemove.forEach((tile) => this.failedTiles.delete(tile))\n\n // Attempt to reload valid failed tiles\n tilesToRetry.forEach((tile) => {\n try {\n // Verify tile still exists and is in a retryable state\n if (tile && (tile.state === \"errored\" || tile.state === \"expired\")) {\n source.loadTile(tile)\n }\n } catch (error) {\n // If reload fails, remove tile from retry queue - this is expected\n this.failedTiles.delete(tile)\n }\n })\n }, 1000)\n\n this.map.on(\"sourcedata\", this.boundOnSourceData)\n this.map.on(\"sourcedataabort\", this.boundOnSourceDataAbort)\n\n // Escucha el evento de contexto perdido\n this.map.on(\"webglcontextlost\", this.boundOnWebGLContextLost)\n\n // Adicional: escucha evento restauración\n this.map.on(\"webglcontextrestored\", this.boundOnWebGLContextRestored)\n }\n\n private unsubscribeFromFailedTiles(): void {\n if (this.retryTimer) {\n clearInterval(this.retryTimer)\n this.retryTimer = undefined\n }\n\n if (this.boundOnSourceData) {\n this.map.off(\"sourcedata\", this.boundOnSourceData)\n this.boundOnSourceData = undefined\n }\n if (this.boundOnSourceDataAbort) {\n this.map.off(\"sourcedataabort\", this.boundOnSourceDataAbort)\n this.boundOnSourceDataAbort = undefined\n }\n if (this.boundOnWebGLContextLost) {\n this.map.off(\"webglcontextlost\", this.boundOnWebGLContextLost)\n this.boundOnWebGLContextLost = undefined\n }\n if (this.boundOnWebGLContextRestored) {\n this.map.off(\"webglcontextrestored\", this.boundOnWebGLContextRestored)\n this.boundOnWebGLContextRestored = undefined\n }\n\n this.failedTiles.clear()\n }\n}\n","/**\n * Extended interface for device orientation events\n * Adds webkit-specific compass heading property for iOS Safari compatibility\n * @group Utils\n */\nexport interface DeviceOrientationEventExtended extends DeviceOrientationEvent {\n /**\n * WebKit-specific compass heading property\n * Provides compass heading in degrees (0-360) for iOS Safari\n */\n webkitCompassHeading?: number\n}\n\n/**\n * Type guard function to check if an event is a DeviceOrientationEventExtended\n *\n * @param event The event to check\n * @returns True if the event is a DeviceOrientationEventExtended, false otherwise\n * @group Utils\n */\nexport function isDeviceOrientationEventExtended(\n event: Event\n): event is DeviceOrientationEventExtended {\n return event instanceof DeviceOrientationEvent\n}\n","import { type SDKConfig } from \"./config/sdkConfig\"\nimport { type HealthResponse } from \"./interfaces/healthResponse\"\nimport { InternalMapVXMap, type MapVXMap } from \"./map/map\"\nimport { isDeviceOrientationEventExtended } from \"./domain/models/_internal\"\nimport { type Category } from \"./domain/models/categories\"\nimport { type Configuration } from \"./domain/models/configuration\"\nimport { type CssCustomization } from \"./domain/models/cssCustomization\"\nimport { type Institution } from \"./domain/models/institution\"\nimport { type PositionCallback } from \"./domain/models/latLng\"\nimport { Loggeable } from \"./domain/models/loggeable\"\nimport { type MapConfig } from \"./domain/models/mapConfig\"\nimport { type MVXPlace } from \"./domain/models/place\"\nimport { type MapVxProduct } from \"./domain/models/platform\"\nimport { type MVXRoute } from \"./domain/models/route\"\nimport {\n type AnnounceFormat,\n type GetRouteConfiguration,\n InternalGetRouteConfiguration,\n type TransportationMode,\n type UnitSystem,\n} from \"./domain/models/routeConfiguration\"\nimport { type MVXTransport } from \"./domain/models/transport\"\nimport { CacheManager } from \"./infrastructure/cache/CacheManager\"\nimport { Repository } from \"./repository/repository\"\n\n/**\n * @group Main\n */\nexport interface MapVXSDK {\n /**\n * Creates a map within a specified HTML element container using the provided map configuration.\n * @param container The html element where the map will be in your page.\n * @param mapConfig The configuration for the map.\n * @returns The created MapVXMap object.\n * @throws Will throw an error if the map creation fails.\n */\n createMap(container: HTMLElement, mapConfig: MapConfig): MapVXMap\n\n /**\n * Obtain initial configuration of a parent place map\n * @param placeId parent place identifier\n * @param product product type caller of the configuration, currently supports \"directory\", \"totems\", and \"demo\"\n */\n getConfiguration(placeId?: string, product?: MapVxProduct): Promise<Configuration>\n\n /**\n * Obtain categories of a place\n * @param placeId parent place identifier\n */\n getCategories(placeId?: string): Promise<Category[]>\n\n /**\n * Obtains the data of a particular transport according to the identifier\n * @returns A object MVXTransport with the information of the stop\n * @throws Will throw an error if fail to get the transport information\n */\n getTransport(stopId: string): Promise<MVXTransport>\n\n /**\n * Get the places associated to the token added on the class constructor.\n *\n * This method also returns all places associated with the allowed institutions.\n *\n * Also this return `child_places` as a list of string.\n * @returns A list of the places associated to the token.\n * @throws Will throw an error if fail to get the parent places.\n */\n getAvailablePlaces(): Promise<MVXPlace[]>\n\n /**\n * Get the sub-places from a parent place.\n * @param parentPlaceId The place identifier from which will be obtained is sub-places.\n * @returns A promise with a list of sub-places.\n */\n getSubPlaces(parentPlaceId: string): Promise<MVXPlace[]>\n\n /**\n * Get information from all institutions of the apiKey.\n *\n * The type of the property `child_places` of the returned values is a list of string.\n *\n * @returns The information from all institutions of the apiKey.\n */\n getInstitutions(): Promise<Institution[]>\n\n /**\n * Get a route.\n * @param routeConfig The configuration to describe the requested route.\n * @returns The information of the route.\n */\n getRoute(routeConfig: GetRouteConfiguration): Promise<MVXRoute>\n\n /**\n * Get a route.\n * Use a new endpoint for the route data.\n * @param routeConfig The configuration to describe the requested route.\n * @returns The information of the route.\n */\n getRouteV2(routeConfig: GetRouteConfiguration): Promise<MVXRoute>\n\n /**\n * Get a list of places that match a input.\n * The orden on the list is from high to low match.\n *\n * Note: The parameters `parentPlaceId` and `otherParentPlacesIds` will be unified on the next major version.\n * @param input The user input\n * @param institutionId The identifier of the institution to search within\n * @param parentPlaceId (Optional) A parent place identifier to filter the results.\n * @param otherParentPlacesIds (Optional) An array of parent place ids to filter the results.\n * @param origin (Optional) The ID of a totem or a place origin from directories. Used to return search results based on distance from the origin.\n * @param lat (Optional) Latitude as a string for location-based search.\n * @param lng (Optional) Longitude as a string for location-based search.\n * @param floor (Optional) Floor ID as a string for location-based search.\n * @returns A list with the places that match the input.\n */\n getPlacesByInput(\n input: string,\n institutionId: string,\n parentPlaceId?: string,\n otherParentPlacesIds?: string[],\n origin?: string,\n lat?: string,\n lng?: string,\n floor?: string\n ): Promise<MVXPlace[]>\n\n /**\n * Get a list of places from a determined category.\n * @deprecated Not yet implemented.\n * @param category The category for which you want to obtain its places.\n * @returns A list with the places from that category.\n */\n getPlacesByCategory(category: string): Promise<MVXPlace[]>\n\n /**\n * Set the geolocation object to use for tracking the user's location.\n * @param geoLocation the geolocation object to use for tracking the user's location.\n * @default navigator.geolocation if not provided.\n */\n setGeoLocation(geoLocation: Geolocation): void\n\n /**\n * Get location of current user with latitude and longitude info\n * @returns Single location object with LatLng of current user\n */\n getUserLocation(): Promise<GeolocationPosition>\n\n /**\n * Watches the user's position and calls the provided callback with a custom LatLng object.\n * @param onSuccess The callback function to call with the user's position.\n * @returns A watchId for the position watcher.\n */\n watchUserPosition(onSuccess: PositionCallback, onError: PositionErrorCallback): number\n\n /**\n * Unregister user location monitoring\n * @param watchId A watchId given by the watchUserPosition method\n */\n unWatchUserPosition(watchId: number): void\n\n /**\n * Get the information from a place.\n * @param id The id of the place.\n * @throws Will throw an error if fail to get the detail of the place.\n */\n getPlaceDetail(id: string): Promise<MVXPlace>\n\n /**\n * Get the cached information of the places.\n *\n * If a id is not cached, it will be ignored.\n *\n * @param ids The identification of the places\n */\n getCachedPlaces(ids: string[]): MVXPlace[]\n\n /**\n * Get the information from a place. Might be a place that is not necessarily allowed by the ApiKey.\n * @param id The id of the place.\n * @param authToken The auth token of the user.\n * @throws Will throw an error if fail to get the detail of the place.\n */\n getAnyPlaceDetail(id: string, authToken: string): Promise<MVXPlace>\n\n /**\n * Get the list of places from a specific institution. Might include places not necessarily allowed by the ApiKey.\n * @param institutionId The id of the institution.\n * @param authToken The auth token of the user.\n * @returns A promise with the list of places from the institution.\n * @throws Will throw an error if fail to get the places from the institution.\n */\n\n getPlacesFromInstitution(institutionId: string, authToken: string): Promise<MVXPlace[]>\n\n /**\n * Get the sub-places from a parent place. Might include sub-places not necessarily allowed by the ApiKey.\n * @param parentPlaceId The id of the parent place.\n * @param authToken The auth token of the user.\n * @returns A promise with the list of sub-places.\n * @throws Will throw an error if fail to get the sub-places.\n */\n getAnySubPlaces(parentPlaceId: string, authToken: string): Promise<MVXPlace[]>\n\n /**\n * Retrieves information of routes from an specific place to every other subplace of it's own parent place.\n * Then populates a cache which will be consulted -and accessed if possible- each time a route is requested from the selected origin place.\n * @param parentPlaceId Parent place of origin and destination places.\n * @param fromPlaceId Origin place of requested routes.\n * @param announceFormat The desired format for the route instructions announcement.\n * @param unitSystem The unit system used for the route distance measurements.\n * @param mode The transportation mode to be used in the routes.\n */\n loadRoutesForOriginCache(\n parentPlaceId: string,\n fromPlaceId: string,\n announceFormat: AnnounceFormat,\n unitSystem: UnitSystem,\n mode: TransportationMode\n ): void\n\n /**\n * Returns the timestamp of the last cache update for the specified parent place.\n * @param parentPlaceId Id of parent place whose cache timestamp is requested\n */\n getCacheTimestamp(parentPlaceId: string): Promise<number>\n\n /**\n * Delete cache for normal and accessible routes if exist\n */\n cleanRoutesCache(): void\n\n /**\n * Get the CSS customization associated with the api key for the different products.\n * For now is available only for the type 'totems'.\n * @param type The type of product for which customization is required (ex. 'totems').\n * @returns A json with the css customization.\n */\n getCssCustomization(type: string): Promise<CssCustomization>\n\n /**\n * Watches the user's heading and calls the provided callback with the heading value.\n * Note: This method requires HTTPS to work properly.\n * @param onSuccess The callback function to call with the user's heading.\n * @param onError The callback function to call if an error occurs.\n */\n watchUserHeading(onSuccess: (heading: number) => void, onError: (error: string) => void): void\n\n /**\n * Unregister user heading monitoring\n */\n unwatchUserHeading(): void\n\n /**\n * Notify to the server the current status of the totem,\n *\n * @param healthPingId The id for the health ping.\n * @param placeId The id of the place.\n * @param totemId The id of the totem\n * @param status The status of the totem.\n */\n notifyHealth(\n healthPingId: string,\n placeId: string,\n totemId: string,\n status: boolean\n ): Promise<HealthResponse>\n\n /**\n * Set the language of the SDK.\n * @param lang The language to set.\n */\n setSdkLang(lang: string): void\n}\n\n/**\n * Initialize the SDK.\n * @group Main\n * @param token The secret API token that you obtained from MapVX.\n * @param config Optional configuration object for SDK customization. Can include language and API URL.\n * @returns A MapVXSDK object to access the SDK functionalities\n */\n/** Internal config type: required fields plus optional mapvxRequestContext. */\ntype InternalSDKConfig = Required<Omit<SDKConfig, \"mapvxRequestContext\">> &\n Pick<SDKConfig, \"mapvxRequestContext\">\n\nexport function initializeSDK(token: string, config?: SDKConfig): MapVXSDK {\n const defaultConfig: InternalSDKConfig = {\n lang: \"en\",\n apiUrl: \"https://public-api.mapvx.com\",\n cache: {\n persistent: false,\n },\n }\n const sdkConfig: InternalSDKConfig = { ...defaultConfig, ...config }\n const sdk = new InternalMapVXSDK(token, sdkConfig)\n return sdk\n}\n\n/**\n * Main class to access the SDK functionalities.\n * @category Main\n */\nexport class InternalMapVXSDK extends Loggeable implements MapVXSDK {\n private readonly token: string\n private readonly repository: Repository\n private readonly config: InternalSDKConfig\n static readonly config: InternalSDKConfig\n private geoLocation: Geolocation = navigator.geolocation\n private headingListeners: EventListener[] = []\n\n /**\n * Create a new MapVXSDK object.\n * @param token The secret API token that you obtained from MapVX.\n * @param config Configuration object for SDK customization\n */\n constructor(token: string, config: InternalSDKConfig) {\n super()\n this.token = token\n this.config = config\n\n // Create cache manager with user configuration\n const cacheManager = new CacheManager({\n persistent: config.cache?.persistent,\n maxStorageBytes: config.cache?.maxStorageBytes,\n configs: config.cache?.configs,\n })\n\n this.repository = new Repository(\n token,\n this.config.lang,\n this.config.apiUrl,\n cacheManager,\n this.config.mapvxRequestContext\n )\n this.cachePlaces()\n this.logEvent(\"initSDK\")\n }\n\n /**\n * Fetch and save on cache the data from the available places.\n */\n private cachePlaces(): void {\n this.repository.fetchAndParseAvailablePlaces().catch(() => {\n // Error already logged in repository\n })\n }\n\n setSdkLang(lang: string) {\n this.config.lang = lang\n this.repository.setLang(lang)\n }\n\n async getPlaceDetail(id: string): Promise<MVXPlace> {\n try {\n const place = await this.repository.fetchAndParsePlaceDetail(id)\n this.logEvent(\"getPlaceDetail\", { id })\n return place\n } catch (error) {\n throw Error(\"Error getPlaceDetail\")\n }\n }\n\n async getAnyPlaceDetail(id: string, authToken: string): Promise<MVXPlace> {\n try {\n const place = await this.repository.fetchAndParseAnyPlaceDetail(id, authToken)\n this.logEvent(\"getAnyPlaceDetail\", { id })\n return place\n } catch (error) {\n throw Error(\"Error getAnyPlaceDetail\")\n }\n }\n\n protected prepareSegmentation(segmentation: Record<string, string>): Record<string, string> {\n return {\n ...segmentation,\n token: this.token,\n }\n }\n\n createMap(container: HTMLElement, mapConfig: MapConfig): MapVXMap {\n try {\n mapConfig.lang = this.config.lang\n mapConfig.apiUrl = this.config.apiUrl\n mapConfig.mapvxRequestContext = this.config.mapvxRequestContext\n const map = new InternalMapVXMap(mapConfig, container, this.token)\n this.logEvent(\"createMap\")\n return map\n } catch (error) {\n throw new Error(\"Failed to create map\")\n }\n }\n\n async getConfiguration(placeId?: string, product?: MapVxProduct): Promise<Configuration> {\n try {\n const config = await this.repository.fetchAndParseConfiguration(placeId, product)\n this.logEvent(\"configuration\")\n return config\n } catch (error) {\n throw new Error(\"Failed to get configuration\")\n }\n }\n\n async getCategories(placeId?: string): Promise<Category[]> {\n try {\n const categories = await this.repository.fetchAndParseCategories(placeId)\n this.logEvent(\"categories\")\n return categories\n } catch (error) {\n throw new Error(\"Failed to get categories\")\n }\n }\n\n async getTransport(stopId: string): Promise<MVXTransport> {\n try {\n const allowedTransport = await this.repository.fetchAndParseTransport(stopId)\n return allowedTransport\n } catch (error) {\n throw Error(\"Failed to get transport\")\n }\n }\n\n getCachedPlaces(ids: string[]): MVXPlace[] {\n try {\n const places = this.repository.getCachedPlaces(ids)\n this.logEvent(\"getCachedPlaces\")\n return places\n } catch (error) {\n throw Error(\"Failed to get cached places\")\n }\n }\n\n async getAvailablePlaces(): Promise<MVXPlace[]> {\n try {\n const allowedPlaces = await this.repository.fetchAndParseAvailablePlaces()\n this.logEvent(\"getAvailablePlaces\")\n return allowedPlaces\n } catch (error) {\n throw Error(\"Failed to get available places\")\n }\n }\n\n async getSubPlaces(parentPlaceId: string): Promise<MVXPlace[]> {\n try {\n const subPlaces = await this.repository.fetchAndParseSubPlaces(parentPlaceId)\n this.logEvent(\"getSubPlaces\")\n return subPlaces\n } catch (error) {\n throw Error(\"Failed to get subplaces\")\n }\n }\n\n async getPlacesFromInstitution(institutionId: string, authToken: string): Promise<MVXPlace[]> {\n try {\n const allowedPlaces = await this.repository.fetchAndParsePlacesFromInstitution(\n institutionId,\n authToken\n )\n this.logEvent(\"getPlacesFromInstitution\")\n return allowedPlaces\n } catch (error) {\n throw Error(\"Failed to get places from institution\")\n }\n }\n\n async getAnySubPlaces(parentPlaceId: string, authToken: string): Promise<MVXPlace[]> {\n try {\n const subPlaces = await this.repository.fetchAndParseAnySubPlaces(parentPlaceId, authToken)\n this.logEvent(\"getAnySubPlaces\")\n return subPlaces\n } catch (error) {\n throw Error(\"Failed to get any sub-places\")\n }\n }\n\n async getInstitutions(): Promise<Institution[]> {\n try {\n const institutions = await this.repository.fetchAndParseInstitutions()\n this.logEvent(\"getInstitutions\")\n return institutions\n } catch (error) {\n throw Error(\"Error getInstitution\")\n }\n }\n\n async getRoute(routeConfig: GetRouteConfiguration): Promise<MVXRoute> {\n try {\n const config = new InternalGetRouteConfiguration(routeConfig)\n const route = await this.repository.fetchAndParseRoute(config)\n this.logEvent(\"getRoute\")\n return route\n } catch (error) {\n throw new Error(\"Failed to get route\")\n }\n }\n\n async getRouteV2(routeConfig: GetRouteConfiguration): Promise<MVXRoute> {\n try {\n const config = new InternalGetRouteConfiguration(routeConfig)\n const route = await this.repository.fetchAndParseRouteV2(config)\n this.logEvent(\"getRouteV2\")\n return route\n } catch (error) {\n throw new Error(\"Failed to get route\")\n }\n }\n\n async getPlacesByInput(\n input: string,\n institutionId: string,\n parentPlaceId?: string,\n otherParentPlacesIds?: string[],\n origin?: string,\n lat?: string,\n lng?: string,\n floor?: string\n ): Promise<MVXPlace[]> {\n try {\n // TODO: se debe cambiar a usar un solo parámetro en la siguiente version major.\n const parentPlaces = parentPlaceId\n ? otherParentPlacesIds\n ? [parentPlaceId, ...otherParentPlacesIds]\n : [parentPlaceId]\n : otherParentPlacesIds\n const places = await this.repository.fetchAndParseSearchResults(\n institutionId,\n input,\n parentPlaces,\n origin,\n lat,\n lng,\n floor\n )\n this.logEvent(\"getPlacesByInput\")\n return places\n } catch (error) {\n throw new Error(\"Failed to get places by input\")\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async getPlacesByCategory(category: string): Promise<MVXPlace[]> {\n try {\n // TODO: Implement proper category-based search when API endpoint is available\n // For now, return an empty array as a placeholder implementation\n this.logEvent(\"getPlacesByCategory\")\n return []\n } catch (error) {\n throw new Error(\"Failed to get places by category\")\n }\n }\n setGeoLocation(geoLocation: Geolocation): void {\n this.geoLocation = geoLocation\n }\n\n getUserLocation(\n options: PositionOptions = {\n enableHighAccuracy: true,\n timeout: 60 * 1000,\n maximumAge: 10 * 1000,\n }\n ): Promise<GeolocationPosition> {\n return new Promise((resolve, reject) => {\n this.geoLocation.getCurrentPosition(\n (position) => {\n resolve(position)\n },\n (error) => {\n reject(error)\n },\n options\n )\n })\n }\n\n watchUserPosition(\n onSuccess: PositionCallback,\n onError: PositionErrorCallback,\n options: PositionOptions = {\n enableHighAccuracy: true,\n timeout: 60 * 1000,\n maximumAge: 1000,\n }\n ): number {\n return this.geoLocation.watchPosition(\n (position) => {\n onSuccess(position)\n },\n (error) => {\n onError(error)\n },\n options\n )\n }\n\n unWatchUserPosition(watchId: number) {\n this.geoLocation.clearWatch(watchId)\n }\n\n watchUserHeading(onSuccess: (heading: number) => void, onError: (error: string) => void): void {\n const listener: EventListener = (event: Event) => {\n if (!isDeviceOrientationEventExtended(event)) {\n return\n }\n let heading: number | null = null\n\n if (event.webkitCompassHeading !== undefined) {\n // Para iOS\n heading = event.webkitCompassHeading || null\n } else if (event.absolute && event.alpha !== null) {\n // Para Android y otros navegadores\n heading = 360 - event.alpha\n }\n\n if (heading !== null) {\n onSuccess(heading)\n } else {\n onError(\"Could not retrieve heading information.\")\n }\n }\n this.headingListeners.push(listener)\n\n if (\"ondeviceorientationabsolute\" in window) {\n // We can listen for the new deviceorientationabsolute event.\n\n window.addEventListener(\"deviceorientationabsolute\", listener)\n } else if (\"ondeviceorientation\" in window) {\n // We can still listen for deviceorientation events.\n // The `absolute` property of the event tells us whether\n // or not the degrees are absolute.\n const w = window as Window\n w.addEventListener(\"deviceorientation\", listener)\n }\n }\n\n unwatchUserHeading(): void {\n this.headingListeners.forEach((listener) => {\n // It is safe to call with both events\n // since the call with the event that has no listener\n // will simply do nothing.\n window.removeEventListener(\"deviceorientationabsolute\", listener)\n window.removeEventListener(\"deviceorientation\", listener)\n })\n this.headingListeners = []\n }\n\n static getLang(): string {\n return this.config.lang\n }\n\n async loadRoutesForOriginCache(\n parentPlaceId: string,\n fromPlaceId: string,\n announceFormat: AnnounceFormat,\n unitSystem: UnitSystem,\n mode: TransportationMode\n ): Promise<void> {\n await this.repository.fetchAndParseRoutesFromOrigin(\n parentPlaceId,\n fromPlaceId,\n announceFormat,\n unitSystem,\n mode\n )\n }\n\n async getCacheTimestamp(parentPlaceId: string): Promise<number> {\n try {\n const cacheTimestamp = await this.repository.fetchAndParseCacheTimestamp(parentPlaceId)\n this.logEvent(\"getCacheTimestamp\")\n return cacheTimestamp\n } catch (error) {\n throw new Error(\"Failed to get cache timestamp\")\n }\n }\n cleanRoutesCache(): void {\n this.repository.cleanRoutesCache()\n }\n\n async getCssCustomization(type: string): Promise<CssCustomization> {\n try {\n const cssCustomization = await this.repository.fetchAndParseCssCustomization(type)\n this.logEvent(\"cssCustomization\")\n return cssCustomization\n } catch (error) {\n throw new Error(\"Failed to get css customization\")\n }\n }\n\n async notifyHealth(\n healthPingId: string,\n placeId: string,\n totemId: string,\n status: boolean\n ): Promise<HealthResponse> {\n try {\n const health = await this.repository.postAndParseHealthPing(\n healthPingId,\n placeId,\n totemId,\n status\n )\n return health\n } catch (error) {\n throw new Error(\"Failed to notify health\")\n }\n }\n}\n","// Category.ts\n\n/**\n * Common properties that every category must have\n * All interfaces extending this one must have a 'type' property.\n * with a unique string that identifies that interface.\n * @group Utils\n */\ninterface Basic {\n id: string\n name: string\n description?: string\n}\n\n/**\n * Represents a category containing a logo.\n * @group Utils\n */\nexport interface BasicWithLogo extends Basic {\n logo: string // URL a la imagen\n\n /***\n * Image Url for the category icon.\n * Optional\n */\n imageUrl?: string\n}\n\n/**\n * Represents a category containing an icon.\n * @group Utils\n */\nexport interface BasicWithIcon extends Basic {\n /**\n * Icon name on Font Awesome kit.\n */\n icon: string\n\n /**\n * Icon style for the icon.\n * Default to `fas` (classic solid).\n */\n iconPrefix?: string\n}\n\n/**\n * Represents a basic category containing a logo or an icon.\n * @group Utils\n */\nexport type BasicCategory = BasicWithLogo | BasicWithIcon\n\n/**\n * Union of all category types\n *\n * You should have a new endpoint to obtain a list of objects of this type.\n * This endpoint must receive at least the id of a place and a string representing a language.\n * @group Utils\n */\nexport type Category =\n | PlaceCategory\n | NestedCategory\n | ProductCategory\n | TextCategory\n | UrlCategory\n | PhoneCategory\n | InternalLinkCategory\n\n/**\n * Represents a category containing a list of sub categories.\n * It would be stored as a property of the place from which the id is sent to the endpoint.\n * @group Utils\n */\nexport type NestedCategory = BasicCategory & {\n type: \"Nested\"\n\n /**\n * Category list.\n */\n categories: Category[]\n\n /**\n * Defines how children of this category should be sorted.\n */\n sortChildrenBy?: string\n}\n\n/**\n * Represents a category containing a list of places.\n * It would be saved as a property of the place from which it is sent to the endpoint.\n * @group Utils\n */\nexport type PlaceCategory = BasicCategory & {\n type: \"Place\"\n /**\n * Child parent place identifier\n */\n childParentId: string\n /**\n * List of place ids.\n */\n places: string[]\n\n /**\n * Defines how children of this category should be sorted.\n */\n sortChildrenBy?: string\n}\n\n/**\n * Represents a category containing a list of products.\n *\n * What we had named in the beginning Area or Zone.\n *\n * The list of products would be saved as a property.\n * @group Utils\n */\nexport type ProductCategory = BasicCategory & {\n type: \"Product\"\n\n /**\n * List of product ids\n */\n products: string[]\n\n /**\n * Reference to the corresponding place\n */\n placeId: string\n\n /**\n * Defines how children of this category should be sorted.\n */\n sortChildrenBy?: string\n}\n\n/**\n * Represents a category containing a text.\n * @group Utils\n */\nexport type TextCategory = BasicCategory & {\n type: \"Text\"\n}\n\n/**\n * Represents a category containing a url.\n * @group Utils\n */\nexport type UrlCategory = BasicCategory & {\n type: \"Url\"\n url: string\n}\n\n/**\n * Represents a category containing a phone.\n * @group Utils\n */\nexport type PhoneCategory = BasicCategory & {\n type: \"Phone\"\n phone: string\n}\n\n/**\n * Represents a category containing a internal link.\n * @group Utils\n */\nexport type InternalLinkCategory = BasicCategory & {\n type: \"InternalLink\"\n ref: string\n}\n/**\n * Checks if the category is a basic with logo.\n * @group Utils\n * @param category\n * @returns\n */\nexport function isBasicWithLogo(category: BasicCategory): category is BasicWithLogo {\n return (category as BasicWithLogo).logo !== undefined\n}\n\n/**\n * Checks if the category is a basic with icon.\n * @group Utils\n * @param category\n * @returns\n */\nexport function isBasicWithIcon(category: BasicCategory): category is BasicWithIcon {\n return (category as BasicWithIcon).icon !== undefined\n}\n","import type { CssCustomization, CssDefinitions, CssTheme } from \"../domain/models/cssCustomization\"\n\n/**\n * Load a CSS customization of a project.\n *\n * This function create a new HTML Style Element and add it to the current document.\n * Also activate the customization adding the first theme name to the body of the document.\n *\n * @group Utils\n * @param data The CSS customization data.\n */\nexport function loadCustomization(data: CssCustomization): void {\n const style = document.createElement(\"style\")\n style.textContent = \"\"\n for (const [themeName, themeData] of Object.entries(data)) {\n const cssClass = loadTheme(themeName, themeData)\n style.textContent += cssClass\n }\n document.head.appendChild(style)\n const firstThemeName = Object.keys(data).at(0)\n if (firstThemeName != null) {\n document.body.classList.add(firstThemeName)\n }\n}\n\n/**\n * Process a theme.\n *\n * @group Utils\n * @param themeName The name of the Theme.\n * @param themeData The data of the Theme.\n * @returns A string with the processed theme to use on a CSS file.\n */\nfunction loadTheme(themeName: string, themeData: CssTheme): string {\n let cssClass = `.${themeName} {\\n`\n const definitions = themeData.definitions\n if (definitions != null) {\n cssClass = loadDefinitions(definitions, cssClass)\n }\n for (const [screenName, screenData] of Object.entries(themeData.screens ?? {})) {\n for (const [componentName, componentData] of Object.entries(screenData)) {\n for (const [elementName, elementData] of Object.entries(componentData)) {\n for (const [propertyName, propertyValue] of Object.entries(elementData)) {\n cssClass += ` --${screenName}-${componentName}-${elementName}-${propertyName}: ${propertyValue};\\n`\n }\n }\n }\n }\n cssClass += \"}\\n\"\n return cssClass\n}\n/**\n * Process the definitions of a theme.\n *\n * @group Utils\n * @param definitions The definitions of the theme.\n * @param cssClass The string object that will contain the processed theme\n * @returns The cssClass string mutated with the processed definitions.\n */\nfunction loadDefinitions(definitions: CssDefinitions, cssClass: string): string {\n for (const [colorName, colorData] of Object.entries(definitions.colors ?? {})) {\n for (const [colorIntensity, colorValue] of Object.entries(colorData)) {\n cssClass += ` --definitions-colors-${colorName}-${colorIntensity}: ${colorValue};\\n`\n }\n }\n for (const [shadowName, shadowValue] of Object.entries(definitions.shadows ?? {})) {\n cssClass += ` --definitions-shadows-${shadowName}: ${shadowValue};\\n`\n }\n for (const [fontName, fontValue] of Object.entries(definitions.textFonts ?? {})) {\n cssClass += ` --definitions-textFonts-${fontName}: ${fontValue};\\n`\n }\n return cssClass\n}\n","import {\n type OpeningHours,\n type OpeningTime,\n type DaysOfTheWeek,\n} from \"../domain/models/openingHours\"\nimport { InternalMapVXSDK } from \"../sdk\"\n\n/**\n * Helper class for opening hours.\n */\nexport class OpeningHoursHelper {\n /**\n * Gets the day of the week as a two-character string indicator.\n *\n * @param date The Date object to extract the day from.\n * @returns A `DaysOfTheWeek` string representing the day of the week.\n * @example\n * ```typescript\n * const date = new Date(2024, 0, 1); // Monday\n * const day = OpeningHoursHelper.getDay(date);\n * console.log(day); // \"mo\"\n * ```\n * @default Returns null if an error occurs or invalid date is provided.\n */\n public static getDay(date: Date): DaysOfTheWeek | null {\n try {\n const dayNumber = date.getDay() // JavaScript getDay() returns 0-6 (Sun-Sat)\n switch (dayNumber) {\n case 0:\n return \"su\"\n case 1:\n return \"mo\"\n case 2:\n return \"tu\"\n case 3:\n return \"we\"\n case 4:\n return \"th\"\n case 5:\n return \"fr\"\n case 6:\n return \"sa\"\n default:\n // This default shouldn't happen. I'll add it just for completeness.\n return null\n }\n } catch {\n return null\n }\n }\n\n /**\n * Converts a 24-hour time format to 12-hour format with AM/PM.\n *\n * @param time24h The time string in 24-hour format (HH:mm).\n * @returns Time formatted in 12-hour format with AM/PM.\n * @example\n * ```typescript\n * const time12h = OpeningHoursHelper.convertSingleTimeTo12Hour(\"14:30\");\n * console.log(time12h); // \"2:30 p.m.\"\n *\n * const morningTime = OpeningHoursHelper.convertSingleTimeTo12Hour(\"09:00\");\n * console.log(morningTime); // \"9:00 a.m.\"\n * ```\n * @default Returns empty string \"\" if an error occurs or invalid time is provided.\n */\n public static convertSingleTimeTo12Hour(time24h: string): string {\n try {\n if (!time24h || typeof time24h !== \"string\") {\n return \"\"\n }\n\n const [hourStr, minuteStr] = time24h.split(\":\") ?? []\n\n if (!hourStr || !minuteStr) {\n return \"\"\n }\n\n const hour = parseInt(hourStr, 10)\n const minute = parseInt(minuteStr, 10)\n\n if (isNaN(hour) || isNaN(minute) || hour < 0 || hour > 23 || minute < 0 || minute > 59) {\n return \"\"\n }\n\n let displayHour = hour % 24\n let period: string\n\n if (displayHour < 12) {\n period = \"a.m.\"\n if (displayHour === 0) {\n displayHour = 12\n }\n } else {\n period = \"p.m.\"\n if (displayHour !== 12) {\n displayHour -= 12\n }\n }\n\n return `${displayHour}:${minute < 10 ? \"0\" : \"\"}${minute} ${period}`\n } catch {\n return \"\"\n }\n }\n\n /**\n * Formats an opening time schedule into a readable string.\n *\n * @param openingTime The opening time object containing open and close times.\n * @returns Formatted time schedule string.\n * @example\n * ```typescript\n * const schedule = { open: \"09:00\", close: \"17:00\" };\n * const formatted = OpeningHoursHelper.formatTimeSchedule(schedule);\n * console.log(formatted); // \"9:00 a.m. - 5:00 p.m.\"\n * ```\n * @default Returns empty string \"\" if an error occurs or invalid opening time is provided.\n */\n public static formatTimeSchedule(openingTime: OpeningTime) {\n try {\n if (!openingTime || !openingTime.open || !openingTime.close) {\n return \"\"\n }\n\n // Check if it's a 24-hour schedule\n if (is24Hours(openingTime)) {\n return \"24 hrs\"\n }\n\n const openTime = OpeningHoursHelper.convertSingleTimeTo12Hour(openingTime.open)\n const closeTime = OpeningHoursHelper.convertSingleTimeTo12Hour(openingTime.close)\n\n // Check if conversion failed (returned empty string)\n if (openTime === \"\" || closeTime === \"\") {\n return \"\"\n }\n\n return `${openTime} - ${closeTime}`\n } catch {\n return \"\"\n }\n }\n\n /**\n * Gets the day number (1-7) for a given day string.\n *\n * @param day The two-character day string (e.g., \"mo\", \"tu\").\n * @returns The day number (1-7), or -1 if the day is invalid.\n * @example\n * ```typescript\n * const dayNumber = OpeningHoursHelper.getDayNumber(\"mo\");\n * console.log(dayNumber); // 1\n *\n * const invalidDay = OpeningHoursHelper.getDayNumber(\"invalid\");\n * console.log(invalidDay); // -1\n * ```\n * @default Returns -1 if an error occurs or invalid day string is provided.\n */\n public static getDayNumber(day: string): number {\n try {\n switch (day) {\n case \"mo\":\n return 1\n case \"tu\":\n return 2\n case \"we\":\n return 3\n case \"th\":\n return 4\n case \"fr\":\n return 5\n case \"sa\":\n return 6\n case \"su\":\n return 7\n default:\n return -1\n }\n } catch {\n return -1\n }\n }\n\n /**\n * Gets the full day name (localized) for a given day string.\n *\n * @param day The two-character day string (e.g., \"mo\", \"tu\").\n * @returns The localized day name, or an empty string if the day is invalid.\n * @example\n * ```typescript\n * const dayName = OpeningHoursHelper.getDayName(\"mo\");\n * console.log(dayName); // \"Monday\" (or localized equivalent)\n *\n * const invalidDay = OpeningHoursHelper.getDayName(\"invalid\");\n * console.log(invalidDay); // \"\"\n * ```\n * @default Returns empty string \"\" if an error occurs or invalid day string is provided.\n */\n public static getDayName(day: string): string {\n try {\n const dayNumber = OpeningHoursHelper.getDayNumber(day)\n if (dayNumber === -1) {\n return \"\"\n }\n\n const date = new Date(2024, 0, dayNumber)\n\n try {\n const currentLang = InternalMapVXSDK.getLang()\n return date.toLocaleDateString(currentLang, { weekday: \"long\" })\n } catch (error) {\n // Fallback to English if the language is not valid\n return date.toLocaleDateString(\"en\", { weekday: \"long\" })\n }\n } catch {\n return \"\"\n }\n }\n\n /**\n * Sorts the opening hours object by day of the week.\n *\n * @param openingHours The opening hours object to sort.\n * @returns A new object with the opening hours sorted by day of the week.\n * @example\n * ```typescript\n * const unsortedHours = { fr: [...], mo: [...], we: [...] };\n * const sortedHours = OpeningHoursHelper.sortDays(unsortedHours);\n * console.log(Object.keys(sortedHours)); // [\"mo\", \"we\", \"fr\"]\n * ```\n * @default Returns the original openingHours object if an error occurs.\n */\n public static sortDays(openingHours: OpeningHours): Record<string, OpeningTime[]> {\n try {\n return Object.fromEntries(\n Object.entries(openingHours).sort(([keyA], [keyB]) => {\n const dayNumberA = OpeningHoursHelper.getDayNumber(keyA)\n const dayNumberB = OpeningHoursHelper.getDayNumber(keyB)\n return dayNumberA - dayNumberB\n })\n )\n } catch {\n return openingHours\n }\n }\n\n /**\n * Checks if a store is open from the previous day (for overnight hours).\n *\n * @param openingHours The opening hours of the store.\n * @param currentDate Optional date to check against. If not provided, uses the current date.\n * @returns `true` if the store is open from the previous day, `false` otherwise.\n * @example\n * ```typescript\n * const overnightHours = { mo: [{ open: \"22:00\", close: \"06:00\" }] };\n * const isOpen = OpeningHoursHelper.isOpenFromPreviousDay(overnightHours);\n * console.log(isOpen); // true if current time is between 22:00 and 06:00\n * ```\n * @default Returns `false` if an error occurs or invalid opening hours are provided.\n */\n public static isOpenFromPreviousDay(openingHours: OpeningHours, currentDate?: Date): boolean {\n try {\n if (!openingHours || typeof openingHours !== \"object\") {\n return false\n }\n\n const now = currentDate || new Date() // Gets the current date\n const yesterday = new Date(now) // Creates a copy of the current date\n OpeningHoursHelper.previousDate(yesterday)\n\n const yesterdayString = OpeningHoursHelper.getDay(yesterday)\n if (yesterdayString == null) {\n return false\n }\n const intervals = openingHours[yesterdayString]\n\n if (!intervals || !Array.isArray(intervals) || intervals.length === 0) {\n return false\n }\n\n for (const interval of intervals) {\n // Check if it's a 24-hour schedule\n if (is24Hours(interval)) {\n return true\n }\n if (\n interval &&\n interval.open &&\n interval.close &&\n OpeningHoursHelper.isValidTime(interval.open) &&\n OpeningHoursHelper.isValidTime(interval.close)\n ) {\n // Create the date object based on yesterday\n const openTime = OpeningHoursHelper.parseTimeAsDate(interval.open, yesterday)\n const closeTime = OpeningHoursHelper.parseTimeAsDate(interval.close, yesterday)\n\n if (openTime > closeTime) {\n OpeningHoursHelper.nextDate(closeTime)\n }\n\n if (now >= openTime && now <= closeTime) {\n return true // The current time is within this interval\n }\n }\n }\n\n return false\n } catch {\n return false\n }\n }\n\n /**\n * Modifies the given Date object to represent the previous day.\n *\n * @param date The Date object to modify. This object will be mutated.\n * @returns This function modifies the Date object in place and does not return a value.\n * @example\n * ```typescript\n * const date = new Date(2024, 0, 15); // January 15, 2024\n * OpeningHoursHelper.previousDate(date);\n * console.log(date.getDate()); // 14\n * ```\n */\n public static previousDate(date: Date): void {\n try {\n const day = date.getDate()\n date.setDate(day - 1)\n } catch {}\n }\n\n /**\n * Modifies the given Date object to represent the next day.\n *\n * @param date The Date object to modify. This object will be mutated.\n * @returns This function modifies the Date object in place and does not return a value.\n * @example\n * ```typescript\n * const date = new Date(2024, 0, 15); // January 15, 2024\n * OpeningHoursHelper.nextDate(date);\n * console.log(date.getDate()); // 16\n * ```\n */\n public static nextDate(date: Date): void {\n try {\n const day = date.getDate()\n date.setDate(day + 1)\n } catch {}\n }\n\n /**\n * Checks if the current time is within the opening hours defined for the current day.\n *\n * @param openingHours An object containing the opening hours for each day of the week.\n * @param currentDate Optional date to check against. If not provided, uses the current date.\n * @returns `true` if the current time is within the opening hours, `false` otherwise.\n * @example\n * ```typescript\n * const hours = { mo: [{ open: \"09:00\", close: \"17:00\" }] };\n * const isOpen = OpeningHoursHelper.isWithinOpeningHours(hours);\n * console.log(isOpen); // true if current time is between 09:00 and 17:00 on Monday\n * ```\n * @default Returns `false` if an error occurs or invalid opening hours are provided.\n */\n public static isWithinOpeningHours(openingHours: OpeningHours, currentDate?: Date): boolean {\n try {\n if (!openingHours || typeof openingHours !== \"object\") {\n return false\n }\n\n const now = currentDate || new Date()\n const dayOfWeek = OpeningHoursHelper.getDay(now)\n if (dayOfWeek == null) {\n return false\n }\n\n if (OpeningHoursHelper.isOpenFromPreviousDay(openingHours, now)) {\n return true\n }\n\n const intervals = openingHours[dayOfWeek]\n\n if (!intervals || !Array.isArray(intervals) || intervals.length === 0) {\n return false\n }\n\n for (const interval of intervals) {\n // Check if it's a 24-hour schedule\n if (is24Hours(interval)) {\n return true\n }\n if (\n interval &&\n interval.open &&\n interval.close &&\n OpeningHoursHelper.isValidTime(interval.open) &&\n OpeningHoursHelper.isValidTime(interval.close)\n ) {\n // Create Date objects based on today\n const openTime = OpeningHoursHelper.parseTimeAsDate(interval.open, now)\n const closeTime = OpeningHoursHelper.parseTimeAsDate(interval.close, now)\n\n if (openTime >= closeTime) {\n OpeningHoursHelper.nextDate(closeTime)\n }\n\n if (now >= openTime && now <= closeTime) {\n return true\n }\n }\n }\n\n return false // The current time is not within any interval\n } catch {\n return false\n }\n }\n\n /**\n * Checks if there are opening times defined for today.\n *\n * @param openingHours The opening hours of a store.\n * @returns `true` if there are opening times for today, `false` otherwise.\n * @example\n * ```typescript\n * const hours = { mo: [{ open: \"09:00\", close: \"17:00\" }] };\n * const hasHours = OpeningHoursHelper.hasOpeningHoursToday(hours);\n * console.log(hasHours); // true if today is Monday\n * ```\n * @default Returns `false` if an error occurs or invalid opening hours are provided.\n */\n public static hasOpeningHoursToday(openingHours: OpeningHours): boolean {\n try {\n if (!openingHours || typeof openingHours !== \"object\") {\n return false\n }\n\n const now = new Date()\n const day = OpeningHoursHelper.getDay(now)\n if (day == null) {\n return false\n }\n const intervals = openingHours[day]\n\n return !!(intervals && intervals.length > 0)\n } catch {\n return false\n }\n }\n\n /**\n * Checks if a given string is a valid time in HH:mm format.\n *\n * @param time The string to validate.\n * @returns `true` if the string is a valid time, `false` otherwise.\n * @example\n * ```typescript\n * const isValid = OpeningHoursHelper.isValidTime(\"14:30\");\n * console.log(isValid); // true\n *\n * const isInvalid = OpeningHoursHelper.isValidTime(\"25:00\");\n * console.log(isInvalid); // false\n * ```\n * @default Returns `false` if an error occurs or invalid time format is provided.\n */\n public static isValidTime(time: string): boolean {\n try {\n if (!time || typeof time !== \"string\") {\n return false\n }\n\n const timeRegex = /^([01][0-9]|2[0-3]):[0-5][0-9]$/ // HH:mm format (requires leading zero)\n return timeRegex.test(time)\n } catch {\n return false\n }\n }\n\n /**\n * Parses a time string (HH:mm) and combines it with a date to create a new Date object.\n *\n * @param time The time string in HH:mm format (e.g., \"14:30\").\n * @param date An optional Date object to combine with the time. If not provided, the current date is used.\n * @returns A new Date object representing the combined date and time.\n * @example\n * ```typescript\n * const date = new Date(2024, 0, 15);\n * const timeDate = OpeningHoursHelper.parseTimeAsDate(\"14:30\", date);\n * console.log(timeDate); // Date object for January 15, 2024 at 2:30 PM\n * ```\n * @default Returns current date if an error occurs or invalid time is provided.\n */\n public static parseTimeAsDate(time: string, date?: Date): Date {\n try {\n const [hours, minutes] = time.split(\":\").map(Number)\n\n const baseDate = date ? new Date(date) : new Date()\n\n const newDate = new Date(\n baseDate.getFullYear(),\n baseDate.getMonth(),\n baseDate.getDate(),\n hours,\n minutes,\n 0,\n 0\n )\n\n return newDate\n } catch {\n return new Date()\n }\n }\n\n /**\n * Flattens an array of OpeningTime objects into a single OpeningTime object,\n * taking the earliest open time and the latest close time.\n *\n * @param openingTimes The array of OpeningTime objects to flatten.\n * @returns A single OpeningTime object representing the flattened time range.\n * @example\n * ```typescript\n * const times = [\n * { open: \"09:00\", close: \"12:00\" },\n * { open: \"14:00\", close: \"18:00\" }\n * ];\n * const flattened = OpeningHoursHelper.flattenOpeningTimes(times);\n * console.log(flattened); // { open: \"09:00\", close: \"18:00\" }\n * ```\n * @default Returns `{ open: \"00:00\", close: \"00:00\" }` if an error occurs or invalid array is provided.\n */\n public static flattenOpeningTimes(openingTimes: OpeningTime[]): OpeningTime {\n try {\n if (!openingTimes || !Array.isArray(openingTimes) || openingTimes.length === 0) {\n return { open: \"00:00\", close: \"00:00\" }\n }\n\n OpeningHoursHelper.sortOpeningTimesByOpen(openingTimes)\n const first = openingTimes[0]\n const last = openingTimes[openingTimes.length - 1]\n\n if (!first || !last || !first.open || !last.close) {\n return { open: \"00:00\", close: \"00:00\" }\n }\n\n return {\n open: first.open,\n close: last.close,\n }\n } catch {\n return { open: \"00:00\", close: \"00:00\" }\n }\n }\n\n /**\n * Sorts a list of OpeningTime objects in place, based on the 'open' property.\n *\n * This method mutates the array and returns a reference to the same array.\n *\n * @param openingTimes The array of OpeningTime objects to sort. This array will be mutated.\n * @returns The sorted array of OpeningTime objects (mutated in place).\n * @example\n * ```typescript\n * const times = [\n * { open: \"14:00\", close: \"18:00\" },\n * { open: \"09:00\", close: \"12:00\" }\n * ];\n * const sorted = OpeningHoursHelper.sortOpeningTimesByOpen(times);\n * console.log(sorted[0].open); // \"09:00\"\n * ```\n * @default Returns the original array if an error occurs.\n */\n public static sortOpeningTimesByOpen(openingTimes: OpeningTime[]): OpeningTime[] {\n try {\n return openingTimes.sort((a, b) => {\n // Compare the 'open' times as strings\n return a.open.localeCompare(b.open)\n })\n } catch {\n return openingTimes\n }\n }\n\n /**\n * Formats the opening hours for the current day into a string representation.\n *\n * @param openingHours The opening hours for the store.\n * @returns A string representing the opening hours for the current day, or an empty string if there are no opening hours for today.\n * @example\n * ```typescript\n * const hours = { mo: [{ open: \"09:00\", close: \"17:00\" }] };\n * const schedule = OpeningHoursHelper.formatCurrentDaySchedule(hours);\n * console.log(schedule); // \"9:00 a.m. - 5:00 p.m.\" (if today is Monday)\n * ```\n * @default Returns empty string \"\" if an error occurs or no opening hours for today.\n */\n public static formatCurrentDaySchedule(openingHours: OpeningHours): string {\n try {\n const now = new Date()\n const day = OpeningHoursHelper.getDay(now)\n if (day == null) {\n return \"\"\n }\n const intervals = openingHours[day]\n\n if (intervals && intervals.length > 0) {\n const flattenedTime = OpeningHoursHelper.flattenOpeningTimes(intervals)\n\n return OpeningHoursHelper.formatTimeSchedule(flattenedTime)\n } else {\n return \"\"\n }\n } catch {\n return \"\"\n }\n }\n\n /**\n * Formats the opening hours for the previous day into a string representation.\n *\n * @param openingHours The opening hours for the store.\n * @returns A string representing the opening hours for the previous day, or an empty string if there are no opening hours for yesterday.\n * @example\n * ```typescript\n * const hours = { su: [{ open: \"10:00\", close: \"15:00\" }] };\n * const schedule = OpeningHoursHelper.formatPreviousDaySchedule(hours);\n * console.log(schedule); // \"10:00 a.m. - 3:00 p.m.\" (if yesterday was Sunday)\n * ```\n * @default Returns empty string \"\" if an error occurs or no opening hours for yesterday.\n */\n public static formatPreviousDaySchedule(openingHours: OpeningHours): string {\n try {\n const yesterday = new Date()\n\n OpeningHoursHelper.previousDate(yesterday)\n\n const day = OpeningHoursHelper.getDay(yesterday)\n if (day == null) {\n return \"\"\n }\n const intervals = openingHours[day]\n\n if (intervals && intervals.length > 0) {\n const flattenedTime = OpeningHoursHelper.flattenOpeningTimes(intervals)\n\n return OpeningHoursHelper.formatTimeSchedule(flattenedTime)\n } else {\n return \"\"\n }\n } catch {\n return \"\"\n }\n }\n\n /**\n * Checks if the current time is within the specified opening hours.\n *\n * @param openHour The opening time in HH:mm format (e.g., \"09:00\").\n * @param closeHour The closing time in HH:mm format (e.g., \"18:00\").\n * @param currentHour The current time in HH:mm format (e.g., \"14:30\").\n * @returns `true` if the current time is within the opening hours, `false` otherwise.\n * @example\n * ```typescript\n * const isWithinHours = OpeningHoursHelper.isValidSchedule(\"09:00\", \"17:00\", \"14:30\");\n * console.log(isWithinHours); // true\n *\n * const isOutsideHours = OpeningHoursHelper.isValidSchedule(\"09:00\", \"17:00\", \"20:00\");\n * console.log(isOutsideHours); // false\n * ```\n * @default Returns `false` if an error occurs or invalid time format is provided.\n */\n public static isValidSchedule(openHour: string, closeHour: string, currentHour: string): boolean {\n try {\n if (\n !OpeningHoursHelper.isValidTime(openHour) ||\n !OpeningHoursHelper.isValidTime(closeHour) ||\n !OpeningHoursHelper.isValidTime(currentHour)\n ) {\n return false\n }\n\n const minutesOpen = OpeningHoursHelper.toMinutes(openHour)\n const minutesClose = OpeningHoursHelper.toMinutes(closeHour)\n const minutesCurrent = OpeningHoursHelper.toMinutes(currentHour)\n\n return minutesCurrent >= minutesOpen && minutesCurrent <= minutesClose\n } catch {\n return false\n }\n }\n\n /**\n * Parses a time string (HH:mm) and creates a Date object for today with that time.\n *\n * @param time The time string in HH:mm format (e.g., \"14:30\").\n * @param baseDate Optional base date to use. If not provided, uses the current date.\n * @returns A Date object representing the date with the specified time.\n * @example\n * ```typescript\n * const timeDate = OpeningHoursHelper.parseTimeToDate(\"14:30\");\n * console.log(timeDate); // Date object for today at 2:30 PM\n * ```\n * @default Returns current date if an error occurs or invalid time is provided.\n */\n public static parseTimeToDate(time: string, baseDate?: Date): Date {\n try {\n if (!time || typeof time !== \"string\") {\n return new Date()\n }\n\n const [hoursStr, minutesStr] = time.split(\":\")\n\n if (!hoursStr || !minutesStr) {\n return new Date()\n }\n\n const hours = parseInt(hoursStr, 10)\n const minutes = parseInt(minutesStr, 10)\n\n if (isNaN(hours) || isNaN(minutes)) {\n return new Date()\n }\n\n const date = baseDate ? new Date(baseDate) : new Date()\n date.setHours(hours, minutes, 0, 0)\n return date\n } catch {\n return new Date()\n }\n }\n\n /**\n * Converts an array of day abbreviations to a readable day range string.\n *\n * @param days An array of day abbreviations (e.g., [\"Mo\", \"Tu\", \"We\"]).\n * @returns A string representing the day range (e.g., \"Monday - Wednesday\" for consecutive days, or just \"Monday\" for a single day).\n * @example\n * ```typescript\n * const range = OpeningHoursHelper.getDaysRange([\"Mo\", \"Tu\", \"We\"]);\n * console.log(range); // \"Monday - Wednesday\"\n *\n * const singleDay = OpeningHoursHelper.getDaysRange([\"Mo\"]);\n * console.log(singleDay); // \"Monday\"\n * ```\n * @default Returns empty string \"\" if an error occurs or empty array is provided.\n */\n public static getDaysRange(days: string[]): string {\n try {\n const dayMap: { [key: string]: string } = {\n Mo: \"Monday\",\n Tu: \"Tuesday\",\n We: \"Wednesday\",\n Th: \"Thursday\",\n Fr: \"Friday\",\n Sa: \"Saturday\",\n Su: \"Sunday\",\n }\n\n if (days.length === 0) {\n return \"\"\n }\n\n const firstDay = dayMap[days[0]] || \"Invalid day\"\n const lastDay = dayMap[days[days.length - 1]] || \"Invalid day\"\n\n if (days.length === 1) {\n return firstDay\n }\n\n return `${firstDay} - ${lastDay}`\n } catch {\n return \"\"\n }\n }\n\n /**\n * Finds the next closest time from an array of time strings relative to the current date.\n *\n * @param times An array of time strings in HH:mm format (e.g., [\"09:00\", \"14:30\", \"18:00\"]).\n * @param currentDate The current date and time to compare against.\n * @returns The closest upcoming time string, or empty string if no times are provided.\n * @example\n * ```typescript\n * const times = [\"09:00\", \"12:00\", \"18:00\"];\n * const currentTime = new Date(); // Assume it's 10:30 AM\n * const nextTime = OpeningHoursHelper.getNextClosestTime(times, currentTime);\n * console.log(nextTime); // \"12:00\"\n * ```\n * @default Returns empty string \"\" if an error occurs or no times are provided.\n */\n public static getNextClosestTime(times: string[], currentDate: Date): string {\n try {\n const nowMinutes = currentDate.getHours() * 60 + currentDate.getMinutes()\n\n const timesWithDiffs = times.map((time) => {\n const timeMinutes = OpeningHoursHelper.toMinutes(time)\n const diff = timeMinutes - nowMinutes + (timeMinutes < nowMinutes ? 24 * 60 : 0)\n return { time, diff }\n })\n\n timesWithDiffs.sort((a, b) => a.diff - b.diff)\n\n return timesWithDiffs.length > 0 ? timesWithDiffs[0].time : \"\"\n } catch {\n return \"\"\n }\n }\n\n /**\n * Checks if a place is currently open based on its opening hours.\n *\n * @param openingHours An object containing the opening hours for each day of the week.\n * @param currentDate Optional date to check against. If not provided, uses the current date.\n * @returns `true` if the place is currently open, `false` otherwise.\n * @example\n * ```typescript\n * const hours = { mo: [{ open: \"09:00\", close: \"17:00\" }] };\n * const isOpen = OpeningHoursHelper.isPlaceOpen(hours);\n * console.log(isOpen); // true if current time is between 09:00 and 17:00 on Monday\n * ```\n * @default Returns `false` if an error occurs or invalid opening hours are provided.\n */\n public static isPlaceOpen(openingHours: OpeningHours, currentDate?: Date): boolean {\n try {\n if (!openingHours || typeof openingHours !== \"object\") {\n return false\n }\n\n const date = currentDate || new Date()\n const dayName = OpeningHoursHelper.getDay(date)\n\n if (\n dayName == null ||\n !openingHours[dayName] ||\n !Array.isArray(openingHours[dayName]) ||\n openingHours[dayName].length === 0\n ) {\n return false\n }\n\n const daySchedule = openingHours[dayName][0]\n if (!daySchedule || !daySchedule.open || !daySchedule.close) {\n return false\n }\n\n const startTime = daySchedule.open\n const endTime = daySchedule.close\n\n if (!OpeningHoursHelper.isValidTime(startTime) || !OpeningHoursHelper.isValidTime(endTime)) {\n return false\n }\n\n const startDate = OpeningHoursHelper.parseTimeToDate(startTime, date)\n const endDate = OpeningHoursHelper.parseTimeToDate(endTime, date)\n\n if (endDate < startDate) {\n endDate.setDate(endDate.getDate() + 1)\n }\n\n const time = new Date(date)\n time.setSeconds(0, 0)\n\n return time >= startDate && time <= endDate\n } catch {\n return false\n }\n }\n\n /**\n * Gets the next schedule time (opening or closing) for a place in 12-hour format.\n *\n * @param openingHours An object containing the opening hours for each day of the week.\n * @param currentDate Optional date to check against. If not provided, uses the current date.\n * @returns The next schedule time in 12-hour format (e.g., \"9:00 a.m.\" or \"6:00 p.m.\").\n * @example\n * ```typescript\n * const hours = { mo: [{ open: \"09:00\", close: \"17:00\" }] };\n * const nextSchedule = OpeningHoursHelper.getNextSchedule(hours);\n * console.log(nextSchedule); // \"9:00 a.m.\" if closed, \"5:00 p.m.\" if open\n * ```\n * @default Returns \"\" if an error occurs or invalid opening hours are provided.\n */\n public static getNextSchedule(openingHours: OpeningHours, currentDate?: Date): string {\n try {\n if (!openingHours || typeof openingHours !== \"object\") {\n return \"\"\n }\n\n const date = currentDate || new Date()\n const dayName = OpeningHoursHelper.getDay(date)\n\n if (\n dayName == null ||\n !openingHours[dayName] ||\n !Array.isArray(openingHours[dayName]) ||\n openingHours[dayName].length === 0\n ) {\n return \"\"\n }\n\n const daySchedule = openingHours[dayName][0]\n if (!daySchedule || !daySchedule.open || !daySchedule.close) {\n return \"\"\n }\n\n const isOpen = OpeningHoursHelper.isPlaceOpen(openingHours, date)\n const time = isOpen ? daySchedule.close : daySchedule.open\n\n if (!time) {\n return \"\"\n }\n\n return OpeningHoursHelper.convertSingleTimeTo12Hour(time)\n } catch {\n return \"\"\n }\n }\n\n /**\n * Checks if a specific day has a schedule defined in the opening hours.\n *\n * @param openingHours An object containing the opening hours for each day of the week.\n * @param currentDate Optional date to check against. If not provided, uses the current date.\n * @returns `true` if the day has a schedule defined, `false` otherwise.\n * @example\n * ```typescript\n * const hours = { mo: [{ open: \"09:00\", close: \"17:00\" }] };\n * const hasSchedule = OpeningHoursHelper.checkDayHasSchedule(hours);\n * console.log(hasSchedule); // true if today is Monday\n * ```\n * @default Returns `false` if an error occurs or invalid opening hours are provided.\n */\n public static checkDayHasSchedule(openingHours: OpeningHours, currentDate?: Date): boolean {\n try {\n const date = currentDate || new Date()\n const dayName = OpeningHoursHelper.getDay(date)\n if (dayName == null) {\n return false\n }\n return !!(openingHours && openingHours[dayName])\n } catch {\n return false\n }\n }\n\n /**\n * Converts a time string (HH:mm) to total minutes since midnight.\n *\n * @param time The time string in HH:mm format (e.g., \"14:30\").\n * @returns The total number of minutes since midnight (e.g., 870 for \"14:30\").\n * @example\n * ```typescript\n * const minutes = OpeningHoursHelper.toMinutes(\"14:30\");\n * console.log(minutes); // 870\n *\n * const morningMinutes = OpeningHoursHelper.toMinutes(\"09:00\");\n * console.log(morningMinutes); // 540\n * ```\n * @default Returns 0 if an error occurs or invalid time format is provided.\n */\n public static toMinutes(time: string): number {\n try {\n if (!time || typeof time !== \"string\") {\n return 0\n }\n\n const [hoursStr, minutesStr] = time.split(\":\")\n\n if (!hoursStr || !minutesStr) {\n return 0\n }\n\n const hours = parseInt(hoursStr, 10)\n const minutes = parseInt(minutesStr, 10)\n\n if (isNaN(hours) || isNaN(minutes)) {\n return 0\n }\n\n return hours * 60 + minutes\n } catch {\n return 0\n }\n }\n}\n\n/**\n * Checks if an OpeningTime represents a 24-hour schedule (open all day).\n *\n * @param openingTime The OpeningTime to check.\n * @returns `true` if the schedule represents 24 hours, `false` otherwise.\n */\nexport function is24Hours(openingTime: OpeningTime): boolean {\n if (!openingTime?.open || !openingTime?.close) {\n return false\n }\n const open = openingTime?.open?.trim() ?? \"\"\n const close = openingTime?.close?.trim() ?? \"\"\n\n // Check if open is \"00:00\" and close is \"24:00\" or \"00:00\"\n return (open === \"00:00\" && close === \"24:00\") || (open === \"00:00\" && close === \"00:00\")\n}\n","// ─── Domain Ports (interfaces) ───────────────────────────────────────────────\nexport type { ICache, CacheStats } from \"./domain/ports/ICache\"\nexport type { IHttpClient, HttpResponse, HttpRequestOptions } from \"./domain/ports/IHttpClient\"\nexport type { ILogger } from \"./domain/ports/ILogger\"\n\n// ─── Infrastructure: Cache ───────────────────────────────────────────────────\nexport { LRUCache } from \"./infrastructure/cache/LRUCache\"\nexport { PersistentCache } from \"./infrastructure/cache/PersistentCache\"\nexport { CacheManager } from \"./infrastructure/cache/CacheManager\"\nexport type { CacheConfig, CacheManagerConfig, CacheType } from \"./infrastructure/cache/cacheConfig\"\nexport {\n DEFAULT_CACHE_CONFIGS,\n DEFAULT_MAX_STORAGE_BYTES,\n} from \"./infrastructure/cache/cacheConfig\"\n\n// ─── Infrastructure: HTTP ────────────────────────────────────────────────────\nexport { FetchHttpClient } from \"./infrastructure/http/FetchHttpClient\"\n\n// ─── Infrastructure: Logging ─────────────────────────────────────────────────\nexport { CountlyLogger } from \"./infrastructure/logging/CountlyLogger\"\n\n// ─── Map ─────────────────────────────────────────────────────────────────────\nexport type { MapVXMap } from \"./map/map\"\n\n// ─── SDK ─────────────────────────────────────────────────────────────────────\nexport { initializeSDK } from \"./sdk\"\nexport type { MapVXSDK } from \"./sdk\"\n\n// ─── Config ──────────────────────────────────────────────────────────────────\nexport type { MapVxRequestContext, SDKConfig } from \"./config/sdkConfig\"\n\n// ─── Domain Models: Animation ────────────────────────────────────────────────\nexport type { AnimationConfig, AnimationDrawingConfig, AnimationStatus } from \"./domain/models/animation\"\n\n// ─── Domain Models: Assets / Icons ───────────────────────────────────────────\nexport { createRouteAnimationIconDataUrl } from \"./assets/icons\"\nexport type { RouteAnimationIconConfig } from \"./assets/icons\"\n\n// ─── Domain Models: Banner ───────────────────────────────────────────────────\nexport { Banner } from \"./domain/models/banner\"\n\n// ─── Domain Models: Categories ───────────────────────────────────────────────\nexport { isBasicWithIcon, isBasicWithLogo } from \"./domain/models/categories\"\nexport type {\n BasicCategory,\n BasicWithIcon,\n BasicWithLogo,\n Category,\n InternalLinkCategory,\n NestedCategory,\n PhoneCategory,\n PlaceCategory,\n ProductCategory,\n TextCategory,\n UrlCategory,\n} from \"./domain/models/categories\"\n\n// ─── Domain Models: City Filter ──────────────────────────────────────────────\nexport type {\n CityFilterOption,\n InstitutionCityFilterOption,\n ParentPlaceCityFilterOption,\n} from \"./domain/models/cityFilterOption\"\n\n// ─── Domain Models: Configuration ────────────────────────────────────────────\nexport type { Configuration } from \"./domain/models/configuration\"\n\n// ─── Domain Models: CSS Customization ────────────────────────────────────────\nexport type {\n CssComponent,\n CssCustomization,\n CssDefinitions,\n CssElement,\n CssScreen,\n CssTheme,\n} from \"./domain/models/cssCustomization\"\n\n// ─── Domain Models: Fit Options ──────────────────────────────────────────────\nexport type {\n FitOptions,\n FloorUpdateOptions,\n ZoomOptions,\n BoundsOptions,\n PaddingOptions,\n PaddingValue,\n} from \"./domain/models/fitOptions\"\n\n// ─── Domain Models: Inner Floors ─────────────────────────────────────────────\nexport type { InnerFloor } from \"./domain/models/innerFloors\"\n\n// ─── Domain Models: Institution ──────────────────────────────────────────────\nexport { Institution } from \"./domain/models/institution\"\n\n// ─── Domain Models: LatLng / Location ────────────────────────────────────────\nexport type { LatLng, PositionCallback } from \"./domain/models/latLng\"\nexport type { MVXLocation } from \"./domain/models/location\"\n\n// ─── Domain Models: Map Camera ───────────────────────────────────────────────\nexport type { CameraAnimation, MapCamera } from \"./domain/models/mapCamera\"\n\n// ─── Domain Models: Map Config ───────────────────────────────────────────────\nexport type { MapConfig, MapTileCacheConfig } from \"./domain/models/mapConfig\"\n\n// ─── Domain Models: Marker ───────────────────────────────────────────────────\nexport { TextPosition } from \"./domain/models/marker\"\nexport type { MarkerConfig, TextProperties } from \"./domain/models/marker\"\n\n// ─── Domain Models: Multi Language ───────────────────────────────────────────\nexport type { MultiLanguage } from \"./domain/models/multilanguage\"\n\n// ─── Domain Models: Opening Hours ────────────────────────────────────────────\nexport type { DaysOfTheWeek, OpeningHours, OpeningTime } from \"./domain/models/openingHours\"\n\n// ─── Domain Models: Place ────────────────────────────────────────────────────\nexport { MVXPlace } from \"./domain/models/place\"\n\n// ─── Domain Models: Property ─────────────────────────────────────────────────\nexport type { Property } from \"./domain/models/property\"\n\n// ─── Domain Models: Route ────────────────────────────────────────────────────\nexport { MVXRoute, MVXRouteLeg, MVXRouteStep } from \"./domain/models/route\"\n\n// ─── Domain Models: Route Configuration ──────────────────────────────────────\nexport { AnnounceFormat, TransportationMode, UnitSystem } from \"./domain/models/routeConfiguration\"\nexport type {\n DrawRouteConfiguration,\n GetRouteConfiguration,\n IdLocation,\n RouteLocation,\n} from \"./domain/models/routeConfiguration\"\n\n// ─── Domain Models: Route Style ──────────────────────────────────────────────\nexport type { GradientStyle, RouteStyle, SolidStyle } from \"./domain/models/routeStyle\"\n\n// ─── Domain Models: Transport ────────────────────────────────────────────────\nexport { MVXTransport } from \"./domain/models/transport\"\nexport type { RealtimeSchedule, Schedule } from \"./domain/models/transport\"\n\n// ─── Interfaces (API responses) ──────────────────────────────────────────────\nexport type { HealthResponse } from \"./interfaces/healthResponse\"\nexport type { InstitutionResponse } from \"./interfaces/institutionResponse\"\nexport type { PlaceResponse } from \"./interfaces/placeResponse\"\n\n// ─── Utils ───────────────────────────────────────────────────────────────────\nexport { loadCustomization } from \"./utils/update-css\"\nexport { OpeningHoursHelper } from \"./utils/opening-hours-helper\"\n\n/**\n * Function to load default styles\n * @group Utils\n */\nexport const loadStyles = (): void => {\n // Check if styles are already loaded\n if (document.querySelector(\"link[data-mapvx-styles]\")) {\n return\n }\n\n const link = document.createElement(\"link\")\n link.rel = \"stylesheet\"\n link.href = \"./styles.css\" // Adjust path as needed\n link.setAttribute(\"data-mapvx-styles\", \"true\")\n document.head.appendChild(link)\n}\n\n/**\n * Re-export MapLibre GL JS types for convenience\n * @group Utils\n */\nexport type {\n Map as MapLibreMap,\n Marker as MapLibreMarker,\n PositionAnchor,\n PointLike,\n StyleSpecification,\n LngLatLike,\n LngLatBoundsLike,\n MapOptions,\n MapEventType,\n MapLayerEventType,\n} from \"maplibre-gl\"\n"],"names":["LRUCache","config","_classCallCheck","_defineProperty","cache","Map","maxItems","ttlMs","_createClass","key","value","get","entry","misses","undefined","isExpired","accessTime","accessCounter","hits","set","now","Date","has","timestamp","size","evictLRU","delete","clear","keys","Array","from","getStats","totalRequests","hitRate","oldestKey","oldestAccessTime","Infinity","_iterator","_createForOfIteratorHelper","_step","s","n","done","_step$value","_slicedToArray","err","e","f","DEFAULT_MAX_STORAGE_BYTES","DEFAULT_CACHE_CONFIGS","places","persistenceKey","routes","accessibleRoutes","configurations","categories","vehicles","stops","subPlaces","getCacheConfig","cacheType","userConfig","defaultConfig","_objectSpread","PersistentCache","maxStorageBytes","lruCache","hydrate","persist","result","removeFromStorage","isStorageAvailable","storageAvailable","stored","localStorage","getItem","data","JSON","parse","entries","isArray","_unused","_iterator2","_step2","push","serialized","stringify","length","setItem","_unused2","removeItem","_unused3","testKey","_unused4","CacheManager","_config$persistent","_config$maxStorageByt","caches","persistent","cacheTypes","_i","_cacheTypes","_config$configs","cacheConfig","configs","createCache","makeKey","id","lang","concat","makeConfigKey","placeId","product","getPlace","setPlace","hasPlace","getRoute","destinationId","setRoute","cleanRoutesCache","getAccessibleRoute","setAccessibleRoute","cleanAccessibleRoutesCache","getConfiguration","setConfiguration","getCategories","setCategories","getVehicle","setVehicle","getStops","setStops","getSubPlaces","parentPlaceId","setSubPlaces","cleanAllCache","values","cleanLanguageCache","languageAwareCaches","suffix","_i2","_languageAwareCaches","endsWith","getCacheStats","getAllCacheStats","stats","_iterator3","_step3","_step3$value","t","r","Symbol","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","p","y","G","v","a","d","bind","l","TypeError","call","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_defineProperties","_toPropertyKey","_toPrimitive","_typeof","toPrimitive","String","Number","FetchHttpClient","_get","_callee","url","options","_context","request","_x","_x2","_post","_callee2","body","_context2","post","_x3","_x4","_x5","_put","_callee3","_context3","put","_x6","_x7","_x8","_delete2","_callee4","_context4","_x9","_x0","_request","_callee5","method","headers","fetchOptions","response","_context5","fetch","json","ok","status","statusText","_x1","_x10","_x11","_x12","_rollbarConfig","accessToken","captureUncaught","captureUnhandledRejections","payload","environment","client","javascript","code_version","argsToDict","_len","args","_key","fromEntries","map","val","idx","Countly","Rollbar","countly","apiKey","Logger","DEBUG","console","log","q","_Countly$q","rollbar","init","app_key","app_version","VERSION","session_update","debug","require_consent","namespace","logEvent","eventName","eventSegmentation","segmentation","logDebug","_console","logWarning","_console2","warn","logError","_console3","error","_this$rollbar","debugLog","_console4","getInstance","instance","CountlyLogger","logger","enrichedSegmentation","enrichSegmentation","context","Error","_this$logger","setToken","token","base","userLocationDataUrl","createRouteAnimationIconDataUrl","_config$backgroundCol","_config$arrowColor","_config$arrowWidth","_config$borderWidth","_config$borderColor","_config$blur","backgroundColor","arrowColor","arrowWidth","borderWidth","borderColor","blur","circleStyle","circleStroke","arrowStyle","arrowStroke","filterId","filterDef","filterAttr","svg","encodedSvg","encodeURIComponent","routeAnimationDataUrl","MVXPlace","generateHexadecimalKey","chars","charAt","Math","floor","random","formatArrayPlaceData","formattedData","forEach","place","createPositionsForStops","totalStops","step","_","createStops","b","flatMap","item","index","getBoundingBox","points","northeast","lat","lng","southwest","point","Marker","TextPosition","MarkerUtils","createMarkerElement","marker","_marker$iconPropertie","_marker$iconPropertie2","_marker$iconPropertie3","_marker$iconPropertie4","markerContainer","document","createElement","iconWidth","iconProperties","width","iconHeight","height","className","text","textPosition","top","bottom","classList","add","style","max","left","right","addEventListener","_marker$onClick","onClick","element","appendChild","setAndCreateText","iconElement","createIconElement","textElement","createTextContainer","createTextElement","textProperties","markerConfig","container","textContainer","icon","createIcon","HTMLImageElement","defaultIcon","display","margin","_marker$iconPropertie5","_marker$iconPropertie6","_marker$iconPropertie7","_marker$iconPropertie8","image","src","objectFit","filter","properties","_properties$fontSize","_properties$padding","_properties$margin","_properties$fontWeigh","_properties$fontFamil","_properties$color","_properties$textShado","textContent","fontSize","padding","fontWeight","fontFamily","color","textShadow","MarkerAttribute","_Marker","_markerConfig$anchor","_markerConfig$rotatio","_markerConfig$id","_markerConfig$floorId","_this","_callSuper","draggable","anchor","offset","setLngLat","coordinate","setRotationAlignment","rotationAlignment","setPitchAlignment","floorId","_inherits","addToMap","addTo","updateIcon","_marker$rotationAlign","_element","innerHTML","markerElement","oldMarkerContent","querySelector","newMarkerContent","_oldMarkerContent$par","parentElement","replaceChild","setFloor","hide","remove","show","changeFloor","isOutdoor","asin","atan2","cos","sin","pow","sqrt","PI","hav","angle","toRadians","degrees","toDegrees","radians","compareLatLng","location","otherLocation","NavFunctions","distance","pointA","pointB","radLatA","radLatB","radLongA","radLongB","deltaLat","deltaLng","haversine","EARTH_RADIUS","intermediatePointBetween","fraction","angDistance","x","z","radLat","radLong","bearingInDegBetween","source","destination","inRad","bearingInRadBetween","intermediateAngleBetween","initialAngle","finalAngle","delta","createRouteInstance","route","aheadId","behindId","currentId","aheadSourceData","type","features","behindSourceData","currentSourceData","geometry","coordinates","animationStatus","stepAnimationStatus","DEFAULT_AUTO_FIT_PADDING","RouteController","mapvxMap","resolveInstance","routeId","lastAddedRouteId","addSourcesAndLayersForRoute","addSource","addLayer","layout","removeSourcesAndLayersForRoute","ids","_ids","removeLayer","removeSource","addSourcesAndLayers","addRoute","drawConfig","setSourceData","steps","setLayerPaint","updateLayerFilter","updateRouteProgress","position","behindDrawConfig","bestDist","bestStepIndex","bestCoordIndex","bestFraction","coords","_this$projectPointToS","projectPointToSegment","dist","behindFeatures","floor_key","getFloorKeyForStep","geoJsonCoordinates","currentStep","currentCoords","partialBehindCoords","min","projLat","projLng","aheadFeatures","partialAheadCoords","behindSource","getSource","setData","aheadSource","dx","dy","lenSq","ddx","ddy","createFeaturesFrom","setCurrentSourceData","layerId","paintConfig","preparePaintForLayer","property","setPaintProperty","routeStyle","polylineWidth","_drawConfig$routeStyl","colors","positions","positionsToUse","gradient","_toConsumableArray","newFloorId","getCurrentFloor","getStyle","layers","some","layer","setFilter","_step$startInsideFloo","_step$startInsideFloo2","_step$endInsideFloor$2","_step$endInsideFloor2","_outdoorFloor$key","startInsideFloor","_step$endInsideFloor$","_step$endInsideFloor","endInsideFloor","elevatorStep","innerFloors","getInnerFloors","outdoorFloor","find","reachableFromGPS","updateRouteLayers","updateRouteMarkerVisibility","_instance$routeMarker","_instance$routeMarker2","_instance$routeMarker3","routeMarker","updatePlaceFloorForRouting","floorKey","_instance$routeMarker4","updatePlaceAndFloorForRouting","startAnimating","animationConfig","_animationConfig$auto","_animationConfig$call","_this2","firstStep","startInsidePlace","aheadConfig","behindConfig","startLocation","routeIcon","autoFitByPlace","enabled","_animationConfig$auto2","currentPlaceId","fitOptions","fitRouteByPlace","callBack","isFinished","conditions","coordinatesIndex","iconRotation","rotatingIcon","startTime","progress","resetTime","waitStartTime","animationId","requestAnimationFrame","time","animateStep","onFinish","prepareForNextStep","clearRouteInstance","_instance$routeMarker5","cancelAnimationFrame","removeRoute","remaining","removeAllRoutes","_iterator4","_step4","getRouteIds","internalPause","pauseAnimation","internalResume","_this3","resumeAnimation","restartAnimation","_this$setMarkerRotati","_instance$animationCo","_instance$animationCo3","_instance$animationCo4","_this4","setMarkerRotation","_instance$animationCo2","stopAnimation","addStepAnimation","_animationConfig$auto3","_animationConfig$call2","_this5","cameraFollow","_animationConfig$auto4","isStepByStep","behindSteps","slice","aheadSteps","_animationConfig$auto5","_animationConfig$call3","nextStep","stepPlaceId","endInsidePlace","_animationConfig$auto6","_animationConfig$call4","nextStepAnimation","_this6","previousStepAnimation","_instance$animationCo5","_instance$animationCo7","_instance$animationCo8","setMarkerLngLat","previous","at","_instance$animationCo6","centerOnCurrentStep","_instance$routeMarker6","currentMarkerPosition","getLngLat","panTo","_this7","_instance$animationCo9","_instance$animationCo1","_instance$animationCo10","endLocation","nextFloorFirstStepIndex","_instance$animationCo0","_instance$animationCo11","_instance$animationCo12","_this8","_instance$conditions","_instance$conditions2","_instance$animationCo13","stepTime","minimumSpeed","iconRotationTime","changeFloorTime","progressInSeconds","start","end","_instance$routeMarker8","abs","intermediateAngle","speed","next","_instance$routeMarker7","nextAngle","setRotation","_instance$conditions3","_instance$routeMarker9","_instance$conditions4","_instance$routeMarker1","_instance$animationCo14","_instance$routeMarker0","updateCamera","duration","animate","bearing","center","setMarkerFloor","_instance$routeMarker10","_instance$routeMarker11","_instance$animationCo15","getRotation","rtlLanguages","AnnounceFormat","UnitSystem","TransportationMode","InternalGetRouteConfiguration","_config$preferAccessi","_config$language","_config$unitSystem","_config$announceForma","initialLocation","finalLocation","preferAccessibleRoute","language","unitSystem","metric","announceFormat","relative","InternalDrawRouteConfiguration","_config$polylineWidth","_config$routeStyle","InternalAnimationConfig","_config$stepTime","_config$minimumSpeed","_config$changeFloorTi","_config$iconRotationT","InternalAnimationDrawingConfig","_data$aheadPathStyle","_data$behindPathStyle","_data$polylineWidth","aheadPathStyle","behindPathStyle","Image","routeIconConfig","convertToError","Loggeable","prepareSegmentation","errorTyped","_this$logger2","_len2","_key2","_this$logger3","_len3","_key3","DEFAULT_TILE_CACHE_CONFIG","maxTiles","persistToServiceWorker","preloadAdjacentZooms","decode","v4","uuid","MVXRoute","legs","legData","leg","MVXRouteLeg","reduce","accumulator","currentValue","start_location","end_location","stepData","MVXRouteStep","start_inside_floor","start_inside_place","end_inside_floor","end_inside_place","htmlInstruction","html_instructions","plainInstruction","plain_instructions","maneuver","elevator_step","showPopup","show_popup","iconPrefix","icon_prefix","polyline","Polyline","pointsLatLng","points_lat_lng","overviewPoints","overview_points","decodedPoints","Banner","rawBanner","_rawBanner$tags","tags","urlAction","url_action","sameLink","description","PropertyUtils","rawPlace","_rawPlace$tags","_rawPlace$keywords","_rawPlace$alias","_rawPlace$tags2","_rawPlace$localizedCa","_rawPlace$properties","_rawPlace$images","_rawPlace$banners","_rawPlace$properties2","_rawPlace$visibility","tagsAndKeywords","keywords","mapvxId","clientId","alias","externalId","title","hidePlace","includes","shortDescription","lon","category","generalCategory","general_category","localizedCategory","parentInstitutionId","parent_institution","inFloors","inFloor","sort","openingHours","opening_hours","address","transportLine","logo","light","images","banners","bannerResponse","parseProperties","parentId","parent_id","parentType","parent_type","metadata","visibility","parentPlaceFloors","_this$inFloors","toString","child_places","_item$iconPrefix","childPlaces","childPlacesProperty","subtitle","childParentPlace","child_parent_place","imageUrl","sortChildrenBy","mvxPlace","child_properties","_item$iconPrefix2","childProperties","childPropertiesProperty","childPropertiesResult","_item$iconPrefix3","Institution","rawInstitution","_rawInstitution$prope","country","hasPlaces","MVXTransport","schedule","schedules","realtimeSchedules","constructor","ownKeys","getOwnPropertySymbols","getOwnPropertyDescriptor","getOwnPropertyDescriptors","defineProperties","MAPVX_PUBLIC_API_HOST","Requester","apiUrl","mapvxRequestContext","withProtocol","startsWith","cleanApiUrl","baseUrl","baseUrlApi","baseUrlPortal","baseUrlHealth","oldBaseUrl","routeBaseUrl","setLang","getMapVxContextHeaders","requestHost","_ctx$baseUrl","_ctx$totemId","_ctx$originId","_ctx$institutionId","_ctx$parentPlace","_ctx$institutionName","_ctx$fullUrl","ctx","trim","totemId","originId","institutionId","parentPlace","institutionName","fullUrl","_fetchFromUrl","resourceUrl","params","finalUrl","contextHeaders","mergedOptions","URL","search","URLSearchParams","hostname","fetchFromUrl","_fetchTransport","stopId","fetchTransport","_fetchStops","vehicleId","fetchStops","_fetchMapStyle","place_id","fetchMapStyle","_fetchAnyMapStyle","authToken","Authorization","institution_id","fetchAnyMapStyle","_fetchAllowedPlaces","_callee6","_context6","fetchAllowedPlaces","_fetchPlacesFromAnyInstitution","_callee7","_context7","fetchPlacesFromAnyInstitution","_x13","_fetchPlaceDetail","_callee8","_context8","fetchPlaceDetail","_x14","_x15","_fetchAnyPlaceDetail","_callee9","_context9","fetchAnyPlaceDetail","_x16","_x17","_fetchSubPlaces","_callee0","targetPlaceId","_context0","targetPlace","fetchSubPlaces","_x18","_x19","_fetchAnySubPlaces","_callee1","_context1","fetchAnySubPlaces","_x20","_x21","_fetchRoute","_callee10","routeConfig","_routeConfig$initialL","_routeConfig$finalLoc","_lat","_lng","_floorId","_placeId","cleanParams","_context10","fromLatLng","fromBuilding","fromFloor","toLatLng","toBuilding","toFloor","fromPlaceId","toPlaceId","travelMode","walking","reducedMobility","userBearing","level","fetchRoute","_x22","_x23","_fetchRouteV","_callee11","_routeConfig$initialL2","_routeConfig$finalLoc2","_lat2","_lng2","_floorId2","_placeId2","_context11","fetchRouteV2","_x24","_x25","_fetchInstitutions","_callee12","_context12","fetchInstitutions","_x26","_fetchSearchResults","_callee13","input","parentIds","origin","_context13","parentPlaces","fetchSearchResults","_x27","_x28","_x29","_x30","_x31","_x32","_x33","_x34","_fetchConfiguration","_callee14","_context14","fetchConfiguration","_x35","_x36","_x37","_fetchCategories","_callee15","_context15","fetchCategories","_x38","_x39","_fetchRoutesForOrigin","_callee16","mode","_context16","fromPlace","fetchRoutesForOrigin","_x40","_x41","_x42","_x43","_x44","_x45","_fetchCacheTimestamp","_callee17","_context17","fetchCacheTimestamp","_x46","_x47","_fetchCssCustomization","_callee18","_context18","fetchCssCustomization","_x48","_x49","_postHealth","_callee19","healthPingId","requestData","_context19","accept","postHealth","_x50","_x51","_x52","_x53","_x54","_getPrototypeOf","_possibleConstructorReturn","_isNativeReflectConstruct","Reflect","construct","_assertThisInitialized","ReferenceError","Boolean","valueOf","_setPrototypeOf","extractErrorMessage","errorBody","obj","message","Repository","_Loggeable","currentLang","requester","_fetchAndParseMapStyle","responseData","_t","baseStyle","functionName","fetchAndParseMapStyle","_fetchAndParseAnyMapStyle","_t2","fetchAndParseAnyMapStyle","_fetchAndParseInstitutions","institutions","institutionData","institution","resultInstitution","_t3","localeCompare","fetchAndParseInstitutions","_fetchAndParsePlaceDetail","cachedPlace","_t4","cached","fetchAndParsePlaceDetail","_fetchAndParseAnyPlaceDetail","_t5","fetchAndParseAnyPlaceDetail","_fetchAndParseSubPlaces","cachedSubPlaces","_t6","fetchAndParseSubPlaces","_fetchAndParseAnySubPlaces","_t7","fetchAndParseAnySubPlaces","_fetchAndParseAvailablePlaces","typedResponseData","_t8","fetchAndParseAvailablePlaces","_fetchAndParsePlacesFromInstitution","_t9","fetchAndParsePlacesFromInstitution","getCachedPlaces","getCachedSubPlaces","_fetchAndParseRoute","cachedResponse","_t0","fetchAndParseRoute","_fetchAndParseRouteV","_t1","fetchAndParseRouteV2","_fetchAndParseTransport","stopsPromises","transport","_cachedResponse","_transport","_t10","fetchAndParseStops","all","vehicle","_stops$find$places","_stops$find","fetchAndParseTransport","_fetchAndParseStops","_t11","_fetchAndParseSearchResults","searchResults","_t12","fetchAndParseSearchResults","_fetchAndParseRoutesFromOrigin","_ref","_t13","_ref2","_ref3","routeResponse","_ref4","_ref5","fetchAndParseRoutesFromOrigin","_fetchAndParseCacheTimestamp","_ref6","lastUpdate","_t14","fetchAndParseCacheTimestamp","_fetchAndParseConfiguration","cachedConfig","_t15","fetchAndParseConfiguration","_fetchAndParseCategories","cachedCategories","_t16","fetchAndParseCategories","_fetchAndParseCssCustomization","cssCustomization","_t17","fetchAndParseCssCustomization","_postAndParseHealthPing","postAndParseHealthPing","extractStepCoordinates","_step$startLocation","_step$startLocation2","_step$endLocation","_step$endLocation2","_step$polyline","_step$polyline2","_unsupportedIterableToArray","_n","F","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","_arrayLikeToArray","name","test","maplibregl","LngLatBounds","NavigationControl","setRTLTextPlugin","cachedTileProtocolRegistered","deepClone","structuredClone","registerCachedTileProtocol","addProtocol","abortController","replace","signal","arrayBuffer","parsePaddingValue","dimension","match","numericValue","parseFloat","unit","window","innerHeight","innerWidth","convertPaddingToPixels","containerWidth","containerHeight","InternalMapVXMap","mapConfig","_mapConfig$lang","_mapConfig$lang2","Set","navigator","geolocation","setRTLSupport","repository","routeController","userLocationMarker","watchPositionID","onFloorChange","onParentPlaceChange","tileCacheConfig","tileCache","initialPlaceDetailSetUp","otherPotentialParentPlacesIds","loadOtherPotentialParentPlaces","enableHover","initialMapStyleSetUp","transformStyleForCaching","transformedStyle","sources","_Object$keys","sourceKey","tiles","tileUrl","withBearerToken","changeParentPlaceTo","potentialParentPlaces","_this3$potentialParen","subPlacesLoad","onMapStyleLoaded","_mapConfig$pitch","_mapConfig$bearingSna","_mapConfig$navigation","useServiceWorkerCaching","finalStyle","mapOptions","zoom","pitch","attributionControl","maplibreLogo","bearingSnap","cancelPendingTileRequestsWhileZooming","maxTileCacheSize","maxZoom","minZoom","maxBounds","boundingBox","addControl","showCompass","showZoom","navigationPosition","on","_mapConfig$onMapReady","whenStyleUpdates","setLayersForLanguage","onMapReady","onHover","subscribeToFailedTiles","_mapConfig$onZoomEnd","onZoomEnd","getZoomLevel","_mapConfig$onRotate","onRotate","getBearing","defaultClickListener","setBaseFilters","publicPlaceFilter","baseFilter","baseFilters","finalFilter","_this$map$getStyle$la","_this$map$getStyle","layersName","layersIds","_layer$sourceLayer","getLayoutProperty","setLayoutProperty","indoorLayerIds","_layer$layout","_this$parentPlaceId","destroyMap","unsubscribeFromFailedTiles","clearTileCache","failedTiles","triggerRepaint","_this$currentFloor","currentFloor","_place$innerFloors$so","_place$innerFloors","_this$innerFloors$fin","_this$innerFloors$fin2","_this$innerFloors$","_this9","updateStyle","onStyleReady","defaultFloor","setStyle","updatePlaceAndFloor","_place$innerFloors$so2","_this$innerFloors$fin3","_this$innerFloors$2","updateParentPlaceAndFloor","_this$onParentPlaceCh","_this$onFloorChange","_this$currentFloor2","_options$onComplete","filterByFloorKey","onComplete","setParentPlace","removeParentPlace","newStyle","addMarker","_this0","_this$innerFloors$fin4","_this$innerFloors$fin5","existingMarkerIndex","markers","findIndex","existingMarker","splice","markerId","reason","markerCreated","updateMarker","_marker$id","updateMarkerPosition","newPosition","showMarker","hideMarker","removeMarker","removeAllMarkers","floorKeyString","every","updateFiltersTo","updateMarkersTo","getContainer","_this$innerFloors$fin6","_this$innerFloors$fin7","_this1","_this$map$getStyle$la2","_this$map$getStyle2","_this10","_this$innerFloors$fin8","baseFloorId","baseFloor","indoorLayers","_indoorLayers$","firstLayerId","baseLayer","applyLayerFilters","_this$parentPlaceId2","floorIdString","floorFilter","subPlaceFilter","showInFloorFilter","basicFilters","customFilters","hoveredId","newCamera","callback","once","easeTo","setMaxZoom","zoomLvl","_options$onComplete2","setMinZoom","_options$onComplete3","isInsideBounds","mapBounds","getMaxBounds","contains","setMaxBounds","_options$onComplete4","fitCoordinates","_coordinates","coord","setCenter","minLat","minLng","maxLat","maxLng","bounds","clientWidth","clientHeight","getPitch","fitBounds","stepsInPlace","getZoom","updateFloor","_this$onFloorChange2","_options$onComplete5","_this$onFloorChange3","_addRoute","fetchRouteConfig","drawRouteConfig","_route","_args","behindStyle","removeRouteById","getActiveRouteIds","addPopOver","popOverConfig","pointedPlace","subplace","Popup","setHTML","removePopOver","startClickListener","clickCallback","stopClickListener","_this11","roomFeatures","touchedFeature","ref","_clickedPlace","_clickedPlace$mapvxId","_clickedPlace2","_clickedPlace3","clickedPlace","potentialParentPlace","cachedPlaces","clickedPlaceId","queryRenderedFeatures","feature","_feature$properties","subPlace","_this12","_e$features","_feature$properties$r","_feature$properties2","setPlacesAsSelected","placeIds","hasLayer","createColoredPlacesLayer","basicFilter","createBasicFilters","coloredPlacesFilters","placeFilter","condition","getLayer","is3DStyle","paint","_this$parentPlaceId3","_this$currentFloor3","clearColoredPlaces","_startAnimateRoute","_route2","animationRouteConfig","_args3","startAnimateRoute","_startAnimateRouteV","_route3","_args4","startAnimateRouteV2","pauseAnimateRoute","resumeAnimateRoute","restartAnimateRoute","stopAnimateRoute","_addStepAnimation","_route4","_args5","_addStepAnimationV","_route5","_args6","addStepAnimationV2","errorMessage","centerOnCurrentStepAnimation","addUserLocationTracking","enableHighAccuracy","geoLocation","initialCoordinate","markerIcon","longitude","latitude","watchPosition","removeUserLocationTracking","clearWatch","addBorderToPlaces","createBorderedPlacesLayer","clearBorderedPlaces","onWebGLContextLost","_this$map","_this13","originalEvent","preventDefault","canvas","getCanvas","gl","getContext","isContextLost","_ext$restoreContext","ext","getExtension","restoreContext","onWebGLContextRestored","redraw","onSourceData","sourceId","tile","isSourceLoaded","_e$tile","tileState","state","onSourceDataAbort","_this14","retryTimer","boundOnSourceData","boundOnSourceDataAbort","boundOnWebGLContextLost","boundOnWebGLContextRestored","setInterval","tilesToRetry","tilesToRemove","loadTile","clearInterval","off","isDeviceOrientationEventExtended","event","DeviceOrientationEvent","initializeSDK","sdkConfig","sdk","InternalMapVXSDK","_config$cache","_config$cache2","_config$cache3","cacheManager","cachePlaces","setSdkLang","_getPlaceDetail","getPlaceDetail","_getAnyPlaceDetail","getAnyPlaceDetail","createMap","_getConfiguration","_getCategories","_getTransport","allowedTransport","getTransport","_getAvailablePlaces","allowedPlaces","getAvailablePlaces","_getSubPlaces","_getPlacesFromInstitution","getPlacesFromInstitution","_getAnySubPlaces","getAnySubPlaces","_getInstitutions","getInstitutions","_getRoute","_getRouteV","getRouteV2","_getPlacesByInput","otherParentPlacesIds","getPlacesByInput","_getPlacesByCategory","getPlacesByCategory","setGeoLocation","getUserLocation","timeout","maximumAge","reject","getCurrentPosition","watchUserPosition","onSuccess","onError","unWatchUserPosition","watchId","watchUserHeading","listener","heading","webkitCompassHeading","absolute","alpha","headingListeners","unwatchUserHeading","removeEventListener","_loadRoutesForOriginCache","loadRoutesForOriginCache","_getCacheTimestamp","cacheTimestamp","getCacheTimestamp","_getCssCustomization","getCssCustomization","_notifyHealth","health","notifyHealth","getLang","isBasicWithLogo","isBasicWithIcon","loadCustomization","_Object$entries","_Object$entries$_i","themeName","themeData","cssClass","loadTheme","head","firstThemeName","definitions","loadDefinitions","_Object$entries2","_themeData$screens","screens","_Object$entries2$_i","screenName","screenData","_i3","_Object$entries3","_Object$entries3$_i","componentName","componentData","_i4","_Object$entries4","_Object$entries4$_i","elementName","elementData","_i5","_Object$entries5","_Object$entries5$_i","propertyName","propertyValue","_i6","_Object$entries6","_definitions$colors","_Object$entries6$_i","colorName","colorData","_i7","_Object$entries7","_Object$entries7$_i","colorIntensity","colorValue","_i8","_Object$entries8","_definitions$shadows","shadows","_Object$entries8$_i","shadowName","shadowValue","_i9","_Object$entries9","_definitions$textFont","textFonts","_Object$entries9$_i","fontName","fontValue","OpeningHoursHelper","getDay","date","dayNumber","convertSingleTimeTo12Hour","time24h","_time24h$split","split","hourStr","minuteStr","hour","parseInt","minute","isNaN","displayHour","period","formatTimeSchedule","openingTime","open","close","is24Hours","openTime","closeTime","getDayNumber","day","getDayName","toLocaleDateString","weekday","_unused5","sortDays","keyA","keyB","dayNumberA","dayNumberB","_unused6","isOpenFromPreviousDay","currentDate","yesterday","previousDate","yesterdayString","intervals","interval","isValidTime","parseTimeAsDate","nextDate","_unused7","getDate","setDate","_unused8","_unused9","isWithinOpeningHours","dayOfWeek","_unused0","hasOpeningHoursToday","_unused1","timeRegex","_unused10","_time$split$map","_time$split$map2","hours","minutes","baseDate","newDate","getFullYear","getMonth","_unused11","flattenOpeningTimes","openingTimes","sortOpeningTimesByOpen","first","last","_unused12","_unused13","formatCurrentDaySchedule","flattenedTime","_unused14","formatPreviousDaySchedule","_unused15","isValidSchedule","openHour","closeHour","currentHour","minutesOpen","toMinutes","minutesClose","minutesCurrent","_unused16","parseTimeToDate","_time$split","_time$split2","hoursStr","minutesStr","setHours","_unused17","getDaysRange","days","dayMap","Mo","Tu","We","Th","Fr","Sa","Su","firstDay","lastDay","_unused18","getNextClosestTime","times","nowMinutes","getHours","getMinutes","timesWithDiffs","timeMinutes","diff","_unused19","isPlaceOpen","dayName","daySchedule","endTime","startDate","endDate","setSeconds","_unused20","getNextSchedule","isOpen","_unused21","checkDayHasSchedule","_unused22","_time$split3","_time$split4","_unused23","_openingTime$open$tri","_openingTime$open","_openingTime$close$tr","_openingTime$close","loadStyles","link","rel","href","setAttribute"],"sourceRoot":""}