@kalisio/kdk 2.6.4 → 2.7.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 (398) hide show
  1. package/core/api/application.js +2 -4
  2. package/core/api/authentication.js +2 -3
  3. package/core/api/db.js +10 -2
  4. package/core/api/hooks/hooks.authorisations.js +4 -2
  5. package/core/api/hooks/hooks.push.js +6 -2
  6. package/core/api/hooks/hooks.query.js +29 -12
  7. package/core/api/hooks/hooks.users.js +30 -17
  8. package/core/api/models/configurations.model.mongodb.js +4 -0
  9. package/core/api/services/authorisations/authorisations.service.js +1 -1
  10. package/core/api/services/configurations/configurations.hooks.js +33 -0
  11. package/core/api/services/index.js +41 -7
  12. package/core/api/services/messages/messages.hooks.js +9 -3
  13. package/core/client/api.js +14 -1
  14. package/core/client/capabilities.js +1 -6
  15. package/core/client/components/KAvatar.vue +24 -20
  16. package/core/client/components/account/KProfile.vue +10 -71
  17. package/core/client/components/account/index.js +0 -2
  18. package/core/client/components/app/KSettings.vue +1 -0
  19. package/core/client/components/collection/KBoard.vue +4 -3
  20. package/core/client/components/collection/KCardSection.vue +1 -0
  21. package/core/client/components/collection/KGrid.vue +2 -0
  22. package/core/client/components/collection/KTable.vue +5 -1
  23. package/core/client/components/collection/KTimeLine.vue +9 -1
  24. package/core/client/components/collection/index.js +0 -2
  25. package/core/client/components/form/KChipsField.vue +2 -1
  26. package/core/client/components/form/KEmailField.vue +1 -0
  27. package/core/client/components/form/KFileField.vue +22 -1
  28. package/core/client/components/form/KForm.vue +2 -0
  29. package/core/client/components/form/KItemField.vue +1 -0
  30. package/core/client/components/form/KNumberField.vue +1 -0
  31. package/core/client/components/form/KPasswordField.vue +1 -0
  32. package/core/client/components/form/KPhoneField.vue +1 -0
  33. package/core/client/components/form/KPropertyItemField.vue +1 -0
  34. package/core/client/components/form/KResolutionField.vue +1 -0
  35. package/core/client/components/form/KSelectField.vue +31 -0
  36. package/core/client/components/form/KTagField.vue +1 -0
  37. package/core/client/components/form/KTextField.vue +1 -0
  38. package/core/client/components/form/KTokenField.vue +1 -0
  39. package/core/client/components/form/KUnitField.vue +1 -0
  40. package/core/client/components/form/KUrlField.vue +1 -0
  41. package/core/client/components/graphics/KIcon.vue +3 -4
  42. package/core/client/components/layout/KPage.vue +1 -0
  43. package/core/client/components/layout/KWindow.vue +6 -3
  44. package/core/client/components/messages/KMessageComposer.vue +2 -1
  45. package/core/client/components/messages/KMessagesTimeLine.vue +1 -1
  46. package/core/client/components/time/KDate.vue +1 -2
  47. package/core/client/components/time/KDateTime.vue +11 -11
  48. package/core/client/components/time/KTime.vue +1 -1
  49. package/core/client/composables/collection.js +33 -8
  50. package/core/client/composables/errors.js +1 -1
  51. package/core/client/composables/layout.js +9 -9
  52. package/core/client/configurations.js +50 -0
  53. package/core/client/exporter.js +1 -1
  54. package/core/client/i18n/core_en.json +6 -39
  55. package/core/client/i18n/core_fr.json +6 -39
  56. package/core/client/index.js +2 -0
  57. package/core/client/layout.js +8 -8
  58. package/core/client/mixins/mixin.base-activity.js +5 -2
  59. package/core/client/mixins/mixin.base-field.js +3 -3
  60. package/core/client/search.js +2 -1
  61. package/core/client/utils/utils.collection.js +8 -8
  62. package/core/client/utils/utils.items.js +4 -0
  63. package/core/client/utils/utils.push.js +3 -3
  64. package/core/client/utils/utils.session.js +7 -5
  65. package/core/client/utils/utils.shapes.js +38 -7
  66. package/core/client/utils/utils.time.js +21 -22
  67. package/core/common/schemas/users.update-profile.json +3 -2
  68. package/coverage/core/api/application.js.html +392 -398
  69. package/coverage/core/api/authentication.js.html +352 -187
  70. package/coverage/core/api/db.js.html +165 -126
  71. package/coverage/core/api/hooks/hooks.authentication.js.html +22 -196
  72. package/coverage/core/api/hooks/hooks.authorisations.js.html +383 -662
  73. package/coverage/core/api/hooks/hooks.logger.js.html +41 -41
  74. package/coverage/core/api/hooks/hooks.model.js.html +113 -101
  75. package/coverage/core/api/hooks/hooks.push.js.html +124 -97
  76. package/coverage/core/api/hooks/hooks.query.js.html +292 -217
  77. package/coverage/core/api/hooks/hooks.schemas.js.html +123 -123
  78. package/coverage/core/api/hooks/hooks.service.js.html +1 -1
  79. package/coverage/core/api/hooks/hooks.storage.js.html +1 -1
  80. package/coverage/core/api/hooks/{hooks.groups.js.html → hooks.tags.js.html} +100 -76
  81. package/coverage/core/api/hooks/hooks.users.js.html +255 -447
  82. package/coverage/core/api/hooks/index.html +107 -122
  83. package/coverage/core/api/hooks/index.js.html +4 -10
  84. package/coverage/core/api/index.html +46 -61
  85. package/coverage/core/api/index.js.html +9 -9
  86. package/coverage/core/api/marshall.js.html +9 -9
  87. package/coverage/core/api/models/{organisations.model.mongodb.js.html → configurations.model.mongodb.js.html} +10 -7
  88. package/coverage/core/api/models/index.html +35 -50
  89. package/coverage/core/api/models/messages.model.mongodb.js.html +39 -27
  90. package/coverage/core/api/models/tags.model.mongodb.js.html +26 -32
  91. package/coverage/core/api/models/users.model.mongodb.js.html +10 -10
  92. package/coverage/core/api/services/account/account.hooks.js.html +5 -5
  93. package/coverage/core/api/services/account/account.service.js.html +127 -127
  94. package/coverage/core/api/services/account/index.html +22 -22
  95. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
  96. package/coverage/core/api/services/authorisations/authorisations.service.js.html +213 -222
  97. package/coverage/core/api/services/authorisations/index.html +21 -21
  98. package/coverage/core/api/services/{organisations/organisations.hooks.js.html → configurations/configurations.hooks.js.html} +16 -10
  99. package/coverage/core/api/services/{groups → configurations}/index.html +8 -8
  100. package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
  101. package/coverage/core/api/services/databases/databases.service.js.html +1 -1
  102. package/coverage/core/api/services/databases/index.html +1 -1
  103. package/coverage/core/api/services/import-export/import-export.hooks.js.html +76 -76
  104. package/coverage/core/api/services/import-export/import-export.service.js.html +32 -32
  105. package/coverage/core/api/services/import-export/index.html +32 -32
  106. package/coverage/core/api/services/index.html +21 -21
  107. package/coverage/core/api/services/index.js.html +313 -142
  108. package/coverage/core/api/services/mailer/index.html +32 -32
  109. package/coverage/core/api/services/mailer/mailer.hooks.js.html +80 -80
  110. package/coverage/core/api/services/mailer/mailer.service.js.html +32 -32
  111. package/coverage/core/api/services/messages/index.html +21 -21
  112. package/coverage/core/api/services/messages/messages.hooks.js.html +112 -76
  113. package/coverage/core/api/services/push/index.html +32 -32
  114. package/coverage/core/api/services/push/push.hooks.js.html +80 -80
  115. package/coverage/core/api/services/push/push.service.js.html +34 -34
  116. package/coverage/core/api/services/storage/index.html +29 -29
  117. package/coverage/core/api/services/storage/storage.hooks.js.html +80 -80
  118. package/coverage/core/api/services/storage/storage.service.js.html +29 -29
  119. package/coverage/core/api/services/tags/index.html +21 -21
  120. package/coverage/core/api/services/tags/tags.hooks.js.html +119 -71
  121. package/coverage/core/api/services/users/index.html +27 -12
  122. package/coverage/core/api/services/users/users.hooks.js.html +14 -11
  123. package/coverage/core/api/services/users/users.service.js.html +100 -0
  124. package/coverage/core/common/errors.js.html +1 -1
  125. package/coverage/core/common/index.html +42 -27
  126. package/coverage/core/common/index.js.html +1 -1
  127. package/coverage/core/common/permissions.js.html +166 -472
  128. package/coverage/core/common/schema.js.html +4 -4
  129. package/coverage/core/common/utils.js.html +31 -25
  130. package/coverage/core/common/utils.offline.js.html +199 -0
  131. package/coverage/index.html +192 -192
  132. package/coverage/lcov-report/core/api/application.js.html +392 -398
  133. package/coverage/lcov-report/core/api/authentication.js.html +352 -187
  134. package/coverage/lcov-report/core/api/db.js.html +165 -126
  135. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +22 -196
  136. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +383 -662
  137. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +41 -41
  138. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +113 -101
  139. package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +124 -97
  140. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +292 -217
  141. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +123 -123
  142. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +1 -1
  143. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +1 -1
  144. package/coverage/lcov-report/core/api/hooks/{hooks.groups.js.html → hooks.tags.js.html} +100 -76
  145. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +255 -447
  146. package/coverage/lcov-report/core/api/hooks/index.html +107 -122
  147. package/coverage/lcov-report/core/api/hooks/index.js.html +4 -10
  148. package/coverage/lcov-report/core/api/index.html +46 -61
  149. package/coverage/lcov-report/core/api/index.js.html +9 -9
  150. package/coverage/lcov-report/core/api/marshall.js.html +9 -9
  151. package/coverage/lcov-report/core/api/models/{organisations.model.mongodb.js.html → configurations.model.mongodb.js.html} +10 -7
  152. package/coverage/lcov-report/core/api/models/index.html +35 -50
  153. package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +39 -27
  154. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +26 -32
  155. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +10 -10
  156. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +5 -5
  157. package/coverage/lcov-report/core/api/services/account/account.service.js.html +127 -127
  158. package/coverage/lcov-report/core/api/services/account/index.html +22 -22
  159. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
  160. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +213 -222
  161. package/coverage/lcov-report/core/api/services/authorisations/index.html +21 -21
  162. package/coverage/lcov-report/core/api/services/{groups/groups.hooks.js.html → configurations/configurations.hooks.js.html} +16 -10
  163. package/coverage/lcov-report/core/api/services/{groups → configurations}/index.html +8 -8
  164. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
  165. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
  166. package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
  167. package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +76 -76
  168. package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +32 -32
  169. package/coverage/lcov-report/core/api/services/import-export/index.html +32 -32
  170. package/coverage/lcov-report/core/api/services/index.html +21 -21
  171. package/coverage/lcov-report/core/api/services/index.js.html +313 -142
  172. package/coverage/lcov-report/core/api/services/mailer/index.html +32 -32
  173. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +80 -80
  174. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +32 -32
  175. package/coverage/lcov-report/core/api/services/messages/index.html +21 -21
  176. package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +112 -76
  177. package/coverage/lcov-report/core/api/services/push/index.html +32 -32
  178. package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +80 -80
  179. package/coverage/lcov-report/core/api/services/push/push.service.js.html +34 -34
  180. package/coverage/lcov-report/core/api/services/storage/index.html +29 -29
  181. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +80 -80
  182. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +29 -29
  183. package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
  184. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +119 -71
  185. package/coverage/lcov-report/core/api/services/users/index.html +27 -12
  186. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +14 -11
  187. package/coverage/lcov-report/core/api/services/users/users.service.js.html +100 -0
  188. package/coverage/lcov-report/core/common/errors.js.html +1 -1
  189. package/coverage/lcov-report/core/common/index.html +42 -27
  190. package/coverage/lcov-report/core/common/index.js.html +1 -1
  191. package/coverage/lcov-report/core/common/permissions.js.html +166 -472
  192. package/coverage/lcov-report/core/common/schema.js.html +4 -4
  193. package/coverage/lcov-report/core/common/utils.js.html +31 -25
  194. package/coverage/lcov-report/core/common/utils.offline.js.html +199 -0
  195. package/coverage/lcov-report/index.html +192 -192
  196. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +169 -31
  197. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +1 -1
  198. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +215 -35
  199. package/coverage/lcov-report/map/api/hooks/index.html +7 -7
  200. package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
  201. package/coverage/lcov-report/map/api/index.html +1 -1
  202. package/coverage/lcov-report/map/api/index.js.html +1 -1
  203. package/coverage/lcov-report/map/api/marshall.js.html +1 -1
  204. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
  205. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +82 -7
  206. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +1 -1
  207. package/coverage/lcov-report/map/api/models/index.html +22 -7
  208. package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +1 -1
  209. package/coverage/lcov-report/{core/api/models/groups.model.mongodb.js.html → map/api/models/styles.model.mongodb.js.html} +10 -7
  210. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
  211. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
  212. package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
  213. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +39 -12
  214. package/coverage/lcov-report/map/api/services/catalog/index.html +5 -5
  215. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  216. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  217. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +86 -11
  218. package/coverage/lcov-report/map/api/services/features/features.service.js.html +307 -4
  219. package/coverage/lcov-report/map/api/services/features/index.html +7 -7
  220. package/coverage/lcov-report/map/api/services/index.html +5 -5
  221. package/coverage/lcov-report/map/api/services/index.js.html +326 -50
  222. package/coverage/lcov-report/map/api/services/projects/index.html +1 -1
  223. package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +1 -1
  224. package/coverage/{core/api/services/organisations → lcov-report/map/api/services/styles}/index.html +10 -25
  225. package/coverage/lcov-report/{core/api/services/organisations/organisations.hooks.js.html → map/api/services/styles/styles.hooks.js.html} +45 -12
  226. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
  227. package/coverage/lcov-report/map/common/errors.js.html +1 -1
  228. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +7 -10
  229. package/coverage/lcov-report/map/common/grid.js.html +1 -1
  230. package/coverage/lcov-report/map/common/index.html +19 -19
  231. package/coverage/lcov-report/map/common/index.js.html +1 -1
  232. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
  233. package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
  234. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
  235. package/coverage/lcov-report/map/common/opendap-utils.js.html +4 -7
  236. package/coverage/lcov-report/map/common/permissions.js.html +10 -4
  237. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
  238. package/coverage/lcov-report/map/common/tms-utils.js.html +9 -12
  239. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +3 -3
  240. package/coverage/lcov-report/map/common/wcs-utils.js.html +12 -15
  241. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +2 -2
  242. package/coverage/lcov-report/map/common/wfs-utils.js.html +14 -17
  243. package/coverage/lcov-report/map/common/wms-utils.js.html +30 -12
  244. package/coverage/lcov-report/map/common/wmts-utils.js.html +10 -13
  245. package/coverage/lcov.info +4157 -3816
  246. package/coverage/map/api/hooks/hooks.catalog.js.html +169 -31
  247. package/coverage/map/api/hooks/hooks.features.js.html +1 -1
  248. package/coverage/map/api/hooks/hooks.query.js.html +215 -35
  249. package/coverage/map/api/hooks/index.html +7 -7
  250. package/coverage/map/api/hooks/index.js.html +1 -1
  251. package/coverage/map/api/index.html +1 -1
  252. package/coverage/map/api/index.js.html +1 -1
  253. package/coverage/map/api/marshall.js.html +1 -1
  254. package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
  255. package/coverage/map/api/models/catalog.model.mongodb.js.html +82 -7
  256. package/coverage/map/api/models/features.model.mongodb.js.html +1 -1
  257. package/coverage/map/api/models/index.html +22 -7
  258. package/coverage/map/api/models/projects.model.mongodb.js.html +1 -1
  259. package/coverage/{core/api/models/groups.model.mongodb.js.html → map/api/models/styles.model.mongodb.js.html} +10 -7
  260. package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
  261. package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
  262. package/coverage/map/api/services/alerts/index.html +1 -1
  263. package/coverage/map/api/services/catalog/catalog.hooks.js.html +39 -12
  264. package/coverage/map/api/services/catalog/index.html +5 -5
  265. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  266. package/coverage/map/api/services/daptiles/index.html +1 -1
  267. package/coverage/map/api/services/features/features.hooks.js.html +86 -11
  268. package/coverage/map/api/services/features/features.service.js.html +307 -4
  269. package/coverage/map/api/services/features/index.html +7 -7
  270. package/coverage/map/api/services/index.html +5 -5
  271. package/coverage/map/api/services/index.js.html +326 -50
  272. package/coverage/map/api/services/projects/index.html +1 -1
  273. package/coverage/map/api/services/projects/projects.hooks.js.html +1 -1
  274. package/coverage/{lcov-report/core/api/services/organisations → map/api/services/styles}/index.html +10 -25
  275. package/coverage/{core/api/services/groups/groups.hooks.js.html → map/api/services/styles/styles.hooks.js.html} +45 -12
  276. package/coverage/map/common/dynamic-grid-source.js.html +1 -1
  277. package/coverage/map/common/errors.js.html +1 -1
  278. package/coverage/map/common/geotiff-grid-source.js.html +7 -10
  279. package/coverage/map/common/grid.js.html +1 -1
  280. package/coverage/map/common/index.html +19 -19
  281. package/coverage/map/common/index.js.html +1 -1
  282. package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
  283. package/coverage/map/common/moment-utils.js.html +1 -1
  284. package/coverage/map/common/opendap-grid-source.js.html +1 -1
  285. package/coverage/map/common/opendap-utils.js.html +4 -7
  286. package/coverage/map/common/permissions.js.html +10 -4
  287. package/coverage/map/common/time-based-grid-source.js.html +1 -1
  288. package/coverage/map/common/tms-utils.js.html +9 -12
  289. package/coverage/map/common/wcs-grid-source.js.html +3 -3
  290. package/coverage/map/common/wcs-utils.js.html +12 -15
  291. package/coverage/map/common/weacast-grid-source.js.html +2 -2
  292. package/coverage/map/common/wfs-utils.js.html +14 -17
  293. package/coverage/map/common/wms-utils.js.html +30 -12
  294. package/coverage/map/common/wmts-utils.js.html +10 -13
  295. package/coverage/tmp/coverage-1028514-1773134124472-0.json +1 -0
  296. package/coverage/tmp/coverage-1028526-1773134124448-0.json +1 -0
  297. package/coverage/tmp/coverage-1028537-1773134124431-0.json +1 -0
  298. package/coverage/tmp/coverage-1028549-1773134124401-0.json +1 -0
  299. package/coverage/tmp/coverage-1028556-1773134124353-0.json +1 -0
  300. package/extras/configs/widgets.top.js +3 -3
  301. package/extras/tests/core/collection.mjs +2 -9
  302. package/extras/tours/pane.top.js +0 -9
  303. package/map/api/hooks/hooks.catalog.js +18 -4
  304. package/map/api/services/catalog/catalog.hooks.js +3 -0
  305. package/map/api/services/features/features.hooks.js +3 -1
  306. package/map/api/services/index.js +2 -6
  307. package/map/api/services/styles/styles.hooks.js +6 -1
  308. package/map/client/components/KFeatureActionButton.vue +9 -3
  309. package/map/client/components/KFeaturesFilterManager.vue +5 -5
  310. package/map/client/components/KFilterCondition.vue +17 -10
  311. package/map/client/components/KLayerEditor.vue +49 -39
  312. package/map/client/components/KMeasureTool.vue +7 -1
  313. package/map/client/components/KTimezoneMap.vue +29 -9
  314. package/map/client/components/catalog/KLayersPanel.vue +26 -16
  315. package/map/client/components/catalog/KLayersSelector.vue +13 -2
  316. package/map/client/components/catalog/KViewsPanel.vue +5 -4
  317. package/map/client/components/form/KSelectLayersField.vue +28 -17
  318. package/map/client/components/form/KSelectViewsField.vue +18 -9
  319. package/map/client/components/form/KTimezoneField.vue +1 -2
  320. package/map/client/components/legend/KVariablesLegend.vue +10 -1
  321. package/map/client/components/location/KLocationCardSection.vue +7 -2
  322. package/map/client/components/location/KLocationMap.vue +31 -7
  323. package/map/client/components/selection/KSelectedLayerFeatures.vue +2 -2
  324. package/map/client/components/stickies/KZoomControl.vue +1 -1
  325. package/map/client/components/styles/KStyleManager.vue +4 -1
  326. package/map/client/components/widget/KTimeSeries.vue +174 -497
  327. package/map/client/components/widget/KTimeSeriesSelector.vue +72 -0
  328. package/map/client/components/widget/KTimeSeriesToolbar.vue +83 -0
  329. package/map/client/composables/catalog.js +6 -10
  330. package/map/client/composables/highlight.js +12 -9
  331. package/map/client/composables/project.js +1 -1
  332. package/map/client/composables/selection.js +8 -7
  333. package/map/client/composables/weather.js +9 -2
  334. package/map/client/geolocation.js +8 -5
  335. package/map/client/i18n/map_en.json +11 -10
  336. package/map/client/i18n/map_fr.json +10 -9
  337. package/map/client/leaflet/TiledFeatureLayer.js +85 -82
  338. package/map/client/leaflet/utils/utils.geojson.js +3 -3
  339. package/map/client/mixins/globe/mixin.base-globe.js +15 -6
  340. package/map/client/mixins/globe/mixin.geojson-layers.js +27 -18
  341. package/map/client/mixins/map/mixin.edit-layers.js +9 -1
  342. package/map/client/mixins/map/mixin.pmtiles-layers.js +118 -29
  343. package/map/client/mixins/map/mixin.tiled-mesh-layers.js +12 -5
  344. package/map/client/mixins/map/mixin.tiled-wind-layers.js +19 -10
  345. package/map/client/mixins/mixin.activity.js +23 -30
  346. package/map/client/mixins/mixin.feature-selection.js +41 -5
  347. package/map/client/planets.js +1 -1
  348. package/map/client/readers/reader.kml.js +2 -3
  349. package/map/client/utils/utils.catalog.js +36 -10
  350. package/map/client/utils/utils.layers.js +39 -8
  351. package/map/client/utils/utils.project.js +4 -0
  352. package/map/client/utils/utils.style.js +37 -7
  353. package/map/client/utils/utils.time-series.js +215 -6
  354. package/map/common/schemas/catalog.update.json +1 -1
  355. package/map/common/weacast-grid-source.js +1 -1
  356. package/package.json +3 -3
  357. package/scripts/kash/CHANGELOG.md +0 -4
  358. package/scripts/kash/README.md +0 -9
  359. package/scripts/kash/kash.sh +45 -40
  360. package/scripts/kash/scripts/run_tests.sh +1 -4
  361. package/test/api/core/authentication.test.js +9 -4
  362. package/test/api/core/config/default.cjs +1 -0
  363. package/test/api/core/hooks.test.js +6 -0
  364. package/test/api/core/index.test.js +43 -18
  365. package/test/api/core/push.test.js +8 -8
  366. package/test/api/core/test-log-2026-03-10.log +60 -0
  367. package/test/api/core/users.test.js +384 -0
  368. package/test/api/map/grid-sources.test.js +1 -1
  369. package/test/api/map/test-log-2026-03-10.log +56 -0
  370. package/vite/package.json +11 -2
  371. package/vite/test/core/composables.test.js +77 -0
  372. package/vite/vitest.config.js +13 -0
  373. package/vite/yarn.lock +1096 -18
  374. package/.vscode/settings.json +0 -5
  375. package/core/client/components/account/KAccount.vue +0 -68
  376. package/core/client/components/account/KDeleteAccountManager.vue +0 -62
  377. package/core/client/components/account/KEmailManager.vue +0 -128
  378. package/core/client/components/account/KPasswordManager.vue +0 -90
  379. package/core/client/components/account/KVerifyEmailManager.vue +0 -105
  380. package/core/client/components/collection/KColumn.vue +0 -227
  381. package/core/client/components/collection/KHistory.vue +0 -113
  382. package/core/client/components/collection/KHistoryEntry.vue +0 -109
  383. package/coverage/core/api/hooks/hooks.organisations.js.html +0 -541
  384. package/coverage/core/api/services/organisations/organisations.service.js.html +0 -343
  385. package/coverage/core/api/utils.js.html +0 -118
  386. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +0 -541
  387. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +0 -343
  388. package/coverage/lcov-report/core/api/utils.js.html +0 -118
  389. package/coverage/tmp/coverage-151166-1723543324307-0.json +0 -1
  390. package/coverage/tmp/coverage-151178-1723543324283-0.json +0 -1
  391. package/coverage/tmp/coverage-151189-1723543324271-0.json +0 -1
  392. package/coverage/tmp/coverage-151201-1723543324248-0.json +0 -1
  393. package/coverage/tmp/coverage-151208-1723543324227-0.json +0 -1
  394. package/scripts/kash/LICENSE +0 -21
  395. package/test/api/core/test-log-2024-04-22.log +0 -84
  396. package/test/api/core/test-log-2024-04-23.log +0 -23
  397. package/test/api/core/test-log-2024-08-13.log +0 -3
  398. package/test/api/map/test-log-2025-03-08.log +0 -0
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/63</span>
28
+ <span class='fraction'>0/62</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/63</span>
49
+ <span class='fraction'>0/62</span>
50
50
  </div>
51
51
 
52
52
 
@@ -125,9 +125,7 @@
125
125
  <a name='L60'></a><a href='#L60'>60</a>
126
126
  <a name='L61'></a><a href='#L61'>61</a>
127
127
  <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
130
- <span class="cline-any cline-no">&nbsp;</span>
128
+ <a name='L63'></a><a href='#L63'>63</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
131
129
  <span class="cline-any cline-no">&nbsp;</span>
132
130
  <span class="cline-any cline-no">&nbsp;</span>
133
131
  <span class="cline-any cline-no">&nbsp;</span>
@@ -190,20 +188,19 @@
190
188
  <span class="cline-any cline-no">&nbsp;</span>
191
189
  <span class="cline-any cline-no">&nbsp;</span>
192
190
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import _ from 'lodash'</span></span></span>
193
- <span class="cstat-no" title="statement not covered" >import fetch from 'node-fetch'</span>
194
191
  <span class="cstat-no" title="statement not covered" >import xml2js from 'xml2js'</span>
195
192
  <span class="cstat-no" title="statement not covered" >import { buildUrl } from '../../core/common/index.js'</span>
196
193
  <span class="cstat-no" title="statement not covered" ></span>
197
- <span class="cstat-no" title="statement not covered" >function fetchAsJson (query) {</span>
198
- <span class="cstat-no" title="statement not covered" > return fetch(query, { redirect: 'follow' })</span>
194
+ <span class="cstat-no" title="statement not covered" >function fetchAsJson (query, headers = {}) {</span>
195
+ <span class="cstat-no" title="statement not covered" > return fetch(query, { redirect: 'follow', headers })</span>
199
196
  <span class="cstat-no" title="statement not covered" > .then(response =&gt; response.text())</span>
200
197
  <span class="cstat-no" title="statement not covered" > .then(txt =&gt; xml2js.parseStringPromise(txt, { tagNameProcessors: [xml2js.processors.stripPrefix] }))</span>
201
198
  <span class="cstat-no" title="statement not covered" >}</span>
202
199
  <span class="cstat-no" title="statement not covered" ></span>
203
- <span class="cstat-no" title="statement not covered" >export async function discover (tmsUrl, searchParams = {}, caps = null) {</span>
200
+ <span class="cstat-no" title="statement not covered" >export async function discover (tmsUrl, searchParams = {}, headers = {}, caps = null) {</span>
204
201
  <span class="cstat-no" title="statement not covered" > // fetch root caps if not provided</span>
205
202
  <span class="cstat-no" title="statement not covered" > if (!caps) {</span>
206
- <span class="cstat-no" title="statement not covered" > caps = await fetchAsJson(buildUrl(tmsUrl, searchParams))</span>
203
+ <span class="cstat-no" title="statement not covered" > caps = await fetchAsJson(buildUrl(tmsUrl, searchParams), headers)</span>
207
204
  <span class="cstat-no" title="statement not covered" > }</span>
208
205
  <span class="cstat-no" title="statement not covered" ></span>
209
206
  <span class="cstat-no" title="statement not covered" > // decode from caps</span>
@@ -216,7 +213,7 @@
216
213
  <span class="cstat-no" title="statement not covered" > const allPromises = []</span>
217
214
  <span class="cstat-no" title="statement not covered" > for (const layer of layerRoot) {</span>
218
215
  <span class="cstat-no" title="statement not covered" > // fetch detailed layer informations</span>
219
- <span class="cstat-no" title="statement not covered" > const p = fetchAsJson(buildUrl(layer.$.href, searchParams)).then(json =&gt; {</span>
216
+ <span class="cstat-no" title="statement not covered" > const p = fetchAsJson(buildUrl(layer.$.href, searchParams), headers).then(json =&gt; {</span>
220
217
  <span class="cstat-no" title="statement not covered" > const obj = {</span>
221
218
  <span class="cstat-no" title="statement not covered" > id: _.get(json, 'TileMap.Title[0]'),</span>
222
219
  <span class="cstat-no" title="statement not covered" > display: _.get(json, 'TileMap.Title[0]'),</span>
@@ -259,7 +256,7 @@
259
256
  <div class='footer quiet pad2 space-top1 center small'>
260
257
  Code coverage generated by
261
258
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
262
- at 2024-08-13T10:02:04.872Z
259
+ at 2026-03-10T09:15:24.774Z
263
260
  </div>
264
261
  <script src="../../prettify.js"></script>
265
262
  <script>
@@ -294,7 +294,7 @@
294
294
  <span class="cstat-no" title="statement not covered" ></span>
295
295
  <span class="cstat-no" title="statement not covered" > // use DescribeCoverage to find out bbox</span>
296
296
  <span class="cstat-no" title="statement not covered" > try {</span>
297
- <span class="cstat-no" title="statement not covered" > const coverage = await wcs.DescribeCoverage(this.config.url, this.config.version, this.config.coverage)</span>
297
+ <span class="cstat-no" title="statement not covered" > const coverage = await wcs.DescribeCoverage(this.config.url, this.config.version, this.config.coverage, this.config.searchParams, this.config.headers)</span>
298
298
  <span class="cstat-no" title="statement not covered" > const bounds = wcs.GetCoverageSpatialBounds(coverage)</span>
299
299
  <span class="cstat-no" title="statement not covered" > const formats = wcs.GetSupportedFormats(coverage)</span>
300
300
  <span class="cstat-no" title="statement not covered" ></span>
@@ -325,7 +325,7 @@
325
325
  <span class="cstat-no" title="statement not covered" ></span>
326
326
  <span class="cstat-no" title="statement not covered" > const wcsbbox = [reqMinLon, reqMinLat, reqMaxLon, reqMaxLat]</span>
327
327
  <span class="cstat-no" title="statement not covered" ></span>
328
- <span class="cstat-no" title="statement not covered" > const image = await wcs.GetCoverage(abort, this.config.url, this.config.version, this.config.coverage, this.queryFormat, wcsbbox, width, height)</span>
328
+ <span class="cstat-no" title="statement not covered" > const image = await wcs.GetCoverage(abort, this.config.url, this.config.version, this.config.coverage, this.queryFormat, wcsbbox, width, height, this.config.searchParams, this.config.headers)</span>
329
329
  <span class="cstat-no" title="statement not covered" > // geotiff.js will try to use a FileReader to read from the blob</span>
330
330
  <span class="cstat-no" title="statement not covered" > // this class doesn't exist in node.js so we use fromArrayBuffer</span>
331
331
  <span class="cstat-no" title="statement not covered" > // .then(blob =&gt; GeoTIFF.fromBlob(blob))</span>
@@ -349,7 +349,7 @@
349
349
  <div class='footer quiet pad2 space-top1 center small'>
350
350
  Code coverage generated by
351
351
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
352
- at 2024-08-13T10:02:04.872Z
352
+ at 2026-03-10T09:15:24.774Z
353
353
  </div>
354
354
  <script src="../../prettify.js"></script>
355
355
  <script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/167</span>
28
+ <span class='fraction'>0/166</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/167</span>
49
+ <span class='fraction'>0/166</span>
50
50
  </div>
51
51
 
52
52
 
@@ -229,9 +229,7 @@
229
229
  <a name='L164'></a><a href='#L164'>164</a>
230
230
  <a name='L165'></a><a href='#L165'>165</a>
231
231
  <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
234
- <span class="cline-any cline-no">&nbsp;</span>
232
+ <a name='L167'></a><a href='#L167'>167</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
235
233
  <span class="cline-any cline-no">&nbsp;</span>
236
234
  <span class="cline-any cline-no">&nbsp;</span>
237
235
  <span class="cline-any cline-no">&nbsp;</span>
@@ -398,37 +396,36 @@
398
396
  <span class="cline-any cline-no">&nbsp;</span>
399
397
  <span class="cline-any cline-no">&nbsp;</span>
400
398
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import _ from 'lodash'</span></span></span>
401
- <span class="cstat-no" title="statement not covered" >import fetch from 'node-fetch'</span>
402
399
  <span class="cstat-no" title="statement not covered" >import xml2js from 'xml2js'</span>
403
400
  <span class="cstat-no" title="statement not covered" >import { buildUrl } from '../../core/common/index.js'</span>
404
401
  <span class="cstat-no" title="statement not covered" ></span>
405
402
  <span class="cstat-no" title="statement not covered" >// https://www.opengeospatial.org/standards/wcs</span>
406
403
  <span class="cstat-no" title="statement not covered" ></span>
407
- <span class="cstat-no" title="statement not covered" >export function fetchAsJson (query) {</span>
408
- <span class="cstat-no" title="statement not covered" > return fetch(query, { redirect: 'follow' })</span>
404
+ <span class="cstat-no" title="statement not covered" >export function fetchAsJson (query, headers = {}) {</span>
405
+ <span class="cstat-no" title="statement not covered" > return fetch(query, { redirect: 'follow', headers })</span>
409
406
  <span class="cstat-no" title="statement not covered" > .then(response =&gt; response.text())</span>
410
407
  <span class="cstat-no" title="statement not covered" > .then(txt =&gt; xml2js.parseStringPromise(txt, { tagNameProcessors: [xml2js.processors.stripPrefix] }))</span>
411
408
  <span class="cstat-no" title="statement not covered" >}</span>
412
409
  <span class="cstat-no" title="statement not covered" ></span>
413
- <span class="cstat-no" title="statement not covered" >export async function GetCapabilities (url, searchParams = {}) {</span>
410
+ <span class="cstat-no" title="statement not covered" >export async function GetCapabilities (url, searchParams = {}, headers = {}) {</span>
414
411
  <span class="cstat-no" title="statement not covered" > const query = buildUrl(url, Object.assign({</span>
415
412
  <span class="cstat-no" title="statement not covered" > SERVICE: 'WCS',</span>
416
413
  <span class="cstat-no" title="statement not covered" > REQUEST: 'GetCapabilities'</span>
417
414
  <span class="cstat-no" title="statement not covered" > }, searchParams))</span>
418
- <span class="cstat-no" title="statement not covered" > return fetchAsJson(query)</span>
415
+ <span class="cstat-no" title="statement not covered" > return fetchAsJson(query, headers)</span>
419
416
  <span class="cstat-no" title="statement not covered" >}</span>
420
417
  <span class="cstat-no" title="statement not covered" ></span>
421
- <span class="cstat-no" title="statement not covered" >export async function DescribeCoverage (url, version, coverage, searchParams = {}) {</span>
418
+ <span class="cstat-no" title="statement not covered" >export async function DescribeCoverage (url, version, coverage, searchParams = {}, headers = {}) {</span>
422
419
  <span class="cstat-no" title="statement not covered" > const query = buildUrl(url, Object.assign({</span>
423
420
  <span class="cstat-no" title="statement not covered" > SERVICE: 'WCS',</span>
424
421
  <span class="cstat-no" title="statement not covered" > VERSION: version,</span>
425
422
  <span class="cstat-no" title="statement not covered" > REQUEST: 'DescribeCoverage',</span>
426
423
  <span class="cstat-no" title="statement not covered" > COVERAGE: coverage</span>
427
424
  <span class="cstat-no" title="statement not covered" > }, searchParams))</span>
428
- <span class="cstat-no" title="statement not covered" > return fetchAsJson(query)</span>
425
+ <span class="cstat-no" title="statement not covered" > return fetchAsJson(query, headers)</span>
429
426
  <span class="cstat-no" title="statement not covered" >}</span>
430
427
  <span class="cstat-no" title="statement not covered" ></span>
431
- <span class="cstat-no" title="statement not covered" >export async function GetCoverage (abort, url, version, coverage, format, bbox, width, height, searchParams = {}) {</span>
428
+ <span class="cstat-no" title="statement not covered" >export async function GetCoverage (abort, url, version, coverage, format, bbox, width, height, searchParams = {}, headers = {}) {</span>
432
429
  <span class="cstat-no" title="statement not covered" > const query = buildUrl(url, Object.assign({</span>
433
430
  <span class="cstat-no" title="statement not covered" > SERVICE: 'WCS',</span>
434
431
  <span class="cstat-no" title="statement not covered" > VERSION: version,</span>
@@ -440,7 +437,7 @@
440
437
  <span class="cstat-no" title="statement not covered" > HEIGHT: height,</span>
441
438
  <span class="cstat-no" title="statement not covered" > FORMAT: format</span>
442
439
  <span class="cstat-no" title="statement not covered" > }, searchParams))</span>
443
- <span class="cstat-no" title="statement not covered" > return fetch(query, { method: 'get', signal: abort })</span>
440
+ <span class="cstat-no" title="statement not covered" > return fetch(query, { method: 'get', signal: abort, headers })</span>
444
441
  <span class="cstat-no" title="statement not covered" > // using a Blob is problematic with node.js since there's no support for it</span>
445
442
  <span class="cstat-no" title="statement not covered" > // instead use an ArrayBuffer</span>
446
443
  <span class="cstat-no" title="statement not covered" > // .then(response =&gt; response.blob())</span>
@@ -571,7 +568,7 @@
571
568
  <div class='footer quiet pad2 space-top1 center small'>
572
569
  Code coverage generated by
573
570
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
574
- at 2024-08-13T10:02:04.872Z
571
+ at 2026-03-10T09:15:24.774Z
575
572
  </div>
576
573
  <script src="../../prettify.js"></script>
577
574
  <script>
@@ -755,7 +755,7 @@
755
755
  <span class="cstat-no" title="statement not covered" > constructor (options) {</span>
756
756
  <span class="cstat-no" title="statement not covered" > super(options)</span>
757
757
  <span class="cstat-no" title="statement not covered" ></span>
758
- <span class="cstat-no" title="statement not covered" > this.api = options.weacastApi</span>
758
+ <span class="cstat-no" title="statement not covered" > this.api = options.planetApi</span>
759
759
  <span class="cstat-no" title="statement not covered" > this.usable = false</span>
760
760
  <span class="cstat-no" title="statement not covered" > }</span>
761
761
  <span class="cstat-no" title="statement not covered" ></span>
@@ -1018,7 +1018,7 @@
1018
1018
  <div class='footer quiet pad2 space-top1 center small'>
1019
1019
  Code coverage generated by
1020
1020
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1021
- at 2024-08-13T10:02:04.872Z
1021
+ at 2026-03-10T09:15:24.774Z
1022
1022
  </div>
1023
1023
  <script src="../../prettify.js"></script>
1024
1024
  <script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/163</span>
28
+ <span class='fraction'>0/162</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/163</span>
49
+ <span class='fraction'>0/162</span>
50
50
  </div>
51
51
 
52
52
 
@@ -225,9 +225,7 @@
225
225
  <a name='L160'></a><a href='#L160'>160</a>
226
226
  <a name='L161'></a><a href='#L161'>161</a>
227
227
  <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
230
- <span class="cline-any cline-no">&nbsp;</span>
228
+ <a name='L163'></a><a href='#L163'>163</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
231
229
  <span class="cline-any cline-no">&nbsp;</span>
232
230
  <span class="cline-any cline-no">&nbsp;</span>
233
231
  <span class="cline-any cline-no">&nbsp;</span>
@@ -390,49 +388,48 @@
390
388
  <span class="cline-any cline-no">&nbsp;</span>
391
389
  <span class="cline-any cline-no">&nbsp;</span>
392
390
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import _ from 'lodash'</span></span></span>
393
- <span class="cstat-no" title="statement not covered" >import fetch from 'node-fetch'</span>
394
391
  <span class="cstat-no" title="statement not covered" >import xml2js from 'xml2js'</span>
395
392
  <span class="cstat-no" title="statement not covered" >import { buildUrl } from '../../core/common/index.js'</span>
396
393
  <span class="cstat-no" title="statement not covered" ></span>
397
394
  <span class="cstat-no" title="statement not covered" >// https://www.opengeospatial.org/standards/wfs</span>
398
395
  <span class="cstat-no" title="statement not covered" ></span>
399
- <span class="cstat-no" title="statement not covered" >function fetchAsJson (query) {</span>
400
- <span class="cstat-no" title="statement not covered" > return fetch(query, { redirect: 'follow' })</span>
396
+ <span class="cstat-no" title="statement not covered" >function fetchAsJson (query, headers = {}) {</span>
397
+ <span class="cstat-no" title="statement not covered" > return fetch(query, { redirect: 'follow', headers })</span>
401
398
  <span class="cstat-no" title="statement not covered" > .then(response =&gt; response.text())</span>
402
399
  <span class="cstat-no" title="statement not covered" > .then(txt =&gt; xml2js.parseStringPromise(txt, { tagNameProcessors: [xml2js.processors.stripPrefix] }))</span>
403
400
  <span class="cstat-no" title="statement not covered" >}</span>
404
401
  <span class="cstat-no" title="statement not covered" ></span>
405
- <span class="cstat-no" title="statement not covered" >export function GetCapabilities (url, searchParams = {}) {</span>
402
+ <span class="cstat-no" title="statement not covered" >export function GetCapabilities (url, searchParams = {}, headers = {}) {</span>
406
403
  <span class="cstat-no" title="statement not covered" > const query = buildUrl(url, Object.assign({</span>
407
404
  <span class="cstat-no" title="statement not covered" > SERVICE: 'WFS',</span>
408
405
  <span class="cstat-no" title="statement not covered" > REQUEST: 'GetCapabilities'</span>
409
406
  <span class="cstat-no" title="statement not covered" > }, searchParams))</span>
410
- <span class="cstat-no" title="statement not covered" > return fetchAsJson(query)</span>
407
+ <span class="cstat-no" title="statement not covered" > return fetchAsJson(query, headers)</span>
411
408
  <span class="cstat-no" title="statement not covered" >}</span>
412
409
  <span class="cstat-no" title="statement not covered" ></span>
413
- <span class="cstat-no" title="statement not covered" >export function DescribeFeatureType (url, version, typeNames, searchParams = {}) {</span>
410
+ <span class="cstat-no" title="statement not covered" >export function DescribeFeatureType (url, version, typeNames, searchParams = {}, headers = {}) {</span>
414
411
  <span class="cstat-no" title="statement not covered" > const query = buildUrl(url, Object.assign({</span>
415
412
  <span class="cstat-no" title="statement not covered" > SERVICE: 'WFS',</span>
416
413
  <span class="cstat-no" title="statement not covered" > VERSION: version,</span>
417
414
  <span class="cstat-no" title="statement not covered" > REQUEST: 'DescribeFeatureType',</span>
418
415
  <span class="cstat-no" title="statement not covered" > TYPENAMES: typeof typeNames === 'string' ? typeNames : typeNames.join(' ')</span>
419
416
  <span class="cstat-no" title="statement not covered" > }, searchParams))</span>
420
- <span class="cstat-no" title="statement not covered" > return fetchAsJson(query)</span>
417
+ <span class="cstat-no" title="statement not covered" > return fetchAsJson(query, headers)</span>
421
418
  <span class="cstat-no" title="statement not covered" >}</span>
422
419
  <span class="cstat-no" title="statement not covered" ></span>
423
- <span class="cstat-no" title="statement not covered" >export function GetFeature (url, version, typeNames, searchParams = {}, { xml2json = true } = {}) {</span>
420
+ <span class="cstat-no" title="statement not covered" >export function GetFeature (url, version, typeNames, searchParams = {}, headers = {}, { xml2json = true } = {}) {</span>
424
421
  <span class="cstat-no" title="statement not covered" > const query = buildUrl(url, Object.assign({</span>
425
422
  <span class="cstat-no" title="statement not covered" > SERVICE: 'WFS',</span>
426
423
  <span class="cstat-no" title="statement not covered" > VERSION: version,</span>
427
424
  <span class="cstat-no" title="statement not covered" > REQUEST: 'GetFeature',</span>
428
425
  <span class="cstat-no" title="statement not covered" > TYPENAMES: typeof typeNames === 'string' ? typeNames : typeNames.join(' ')</span>
429
426
  <span class="cstat-no" title="statement not covered" > }, searchParams))</span>
430
- <span class="cstat-no" title="statement not covered" > return xml2json ? fetchAsJson(query) : fetch(query, { redirect: 'follow' }).then(response =&gt; response.json())</span>
427
+ <span class="cstat-no" title="statement not covered" > return xml2json ? fetchAsJson(query, headers) : fetch(query, { redirect: 'follow', headers }).then(response =&gt; response.json())</span>
431
428
  <span class="cstat-no" title="statement not covered" >}</span>
432
429
  <span class="cstat-no" title="statement not covered" ></span>
433
- <span class="cstat-no" title="statement not covered" >export async function discover (url, searchParams = {}, caps = null) {</span>
430
+ <span class="cstat-no" title="statement not covered" >export async function discover (url, searchParams = {}, headers = {}, caps = null) {</span>
434
431
  <span class="cstat-no" title="statement not covered" > if (!caps) {</span>
435
- <span class="cstat-no" title="statement not covered" > caps = await GetCapabilities(url, searchParams)</span>
432
+ <span class="cstat-no" title="statement not covered" > caps = await GetCapabilities(url, searchParams, headers)</span>
436
433
  <span class="cstat-no" title="statement not covered" > }</span>
437
434
  <span class="cstat-no" title="statement not covered" ></span>
438
435
  <span class="cstat-no" title="statement not covered" > const out = {</span>
@@ -559,7 +556,7 @@
559
556
  <div class='footer quiet pad2 space-top1 center small'>
560
557
  Code coverage generated by
561
558
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
562
- at 2024-08-13T10:02:04.872Z
559
+ at 2026-03-10T09:15:24.774Z
563
560
  </div>
564
561
  <script src="../../prettify.js"></script>
565
562
  <script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/122</span>
28
+ <span class='fraction'>0/128</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/122</span>
49
+ <span class='fraction'>0/128</span>
50
50
  </div>
51
51
 
52
52
 
@@ -185,7 +185,19 @@
185
185
  <a name='L120'></a><a href='#L120'>120</a>
186
186
  <a name='L121'></a><a href='#L121'>121</a>
187
187
  <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
195
+ <span class="cline-any cline-no">&nbsp;</span>
196
+ <span class="cline-any cline-no">&nbsp;</span>
197
+ <span class="cline-any cline-no">&nbsp;</span>
198
+ <span class="cline-any cline-no">&nbsp;</span>
199
+ <span class="cline-any cline-no">&nbsp;</span>
200
+ <span class="cline-any cline-no">&nbsp;</span>
189
201
  <span class="cline-any cline-no">&nbsp;</span>
190
202
  <span class="cline-any cline-no">&nbsp;</span>
191
203
  <span class="cline-any cline-no">&nbsp;</span>
@@ -308,14 +320,13 @@
308
320
  <span class="cline-any cline-no">&nbsp;</span>
309
321
  <span class="cline-any cline-no">&nbsp;</span>
310
322
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import _ from 'lodash'</span></span></span>
311
- <span class="cstat-no" title="statement not covered" >import fetch from 'node-fetch'</span>
312
323
  <span class="cstat-no" title="statement not covered" >import xml2js from 'xml2js'</span>
313
324
  <span class="cstat-no" title="statement not covered" >import { buildUrl } from '../../core/common/index.js'</span>
314
325
  <span class="cstat-no" title="statement not covered" ></span>
315
326
  <span class="cstat-no" title="statement not covered" >// https://www.opengeospatial.org/standards/wms</span>
316
327
  <span class="cstat-no" title="statement not covered" ></span>
317
- <span class="cstat-no" title="statement not covered" >function fetchAsJson (query) {</span>
318
- <span class="cstat-no" title="statement not covered" > return fetch(query, { redirect: 'follow' })</span>
328
+ <span class="cstat-no" title="statement not covered" >function fetchAsJson (query, headers = {}) {</span>
329
+ <span class="cstat-no" title="statement not covered" > return fetch(query, { redirect: 'follow', headers })</span>
319
330
  <span class="cstat-no" title="statement not covered" > .then(response =&gt; response.text())</span>
320
331
  <span class="cstat-no" title="statement not covered" > .then(txt =&gt; xml2js.parseStringPromise(txt, { tagNameProcessors: [xml2js.processors.stripPrefix] }))</span>
321
332
  <span class="cstat-no" title="statement not covered" >}</span>
@@ -325,15 +336,15 @@
325
336
  <span class="cstat-no" title="statement not covered" > return parseInt(parts[0]) * 1000000 + parseInt(parts[1]) * 1000 + (parts.length &gt; 2 ? parseInt(parts[2]) : 0)</span>
326
337
  <span class="cstat-no" title="statement not covered" >}</span>
327
338
  <span class="cstat-no" title="statement not covered" ></span>
328
- <span class="cstat-no" title="statement not covered" >export function GetCapabilities (url, searchParams = {}) {</span>
339
+ <span class="cstat-no" title="statement not covered" >export function GetCapabilities (url, searchParams = {}, headers = {}) {</span>
329
340
  <span class="cstat-no" title="statement not covered" > const query = buildUrl(url, Object.assign({</span>
330
341
  <span class="cstat-no" title="statement not covered" > SERVICE: 'WMS',</span>
331
342
  <span class="cstat-no" title="statement not covered" > REQUEST: 'GetCapabilities'</span>
332
343
  <span class="cstat-no" title="statement not covered" > }, searchParams))</span>
333
- <span class="cstat-no" title="statement not covered" > return fetchAsJson(query)</span>
344
+ <span class="cstat-no" title="statement not covered" > return fetchAsJson(query, headers)</span>
334
345
  <span class="cstat-no" title="statement not covered" >}</span>
335
346
  <span class="cstat-no" title="statement not covered" ></span>
336
- <span class="cstat-no" title="statement not covered" >export function makeGetLegendGraphic (url, version, layer, style, searchParams = {}) {</span>
347
+ <span class="cstat-no" title="statement not covered" >export function makeGetLegendGraphic (url, version, layer, style, searchParams = {}, headers = {}) {</span>
337
348
  <span class="cstat-no" title="statement not covered" > const additionalParams = {}</span>
338
349
  <span class="cstat-no" title="statement not covered" > if (style) additionalParams.STYLE = style</span>
339
350
  <span class="cstat-no" title="statement not covered" > if (!version) version = '1.0.0'</span>
@@ -347,9 +358,9 @@
347
358
  <span class="cstat-no" title="statement not covered" > }, additionalParams, searchParams))</span>
348
359
  <span class="cstat-no" title="statement not covered" >}</span>
349
360
  <span class="cstat-no" title="statement not covered" ></span>
350
- <span class="cstat-no" title="statement not covered" >export async function discover (url, searchParams = {}, caps = null) {</span>
361
+ <span class="cstat-no" title="statement not covered" >export async function discover (url, searchParams = {}, headers = {}, caps = null) {</span>
351
362
  <span class="cstat-no" title="statement not covered" > if (!caps) {</span>
352
- <span class="cstat-no" title="statement not covered" > caps = await GetCapabilities(url, searchParams)</span>
363
+ <span class="cstat-no" title="statement not covered" > caps = await GetCapabilities(url, searchParams, headers)</span>
353
364
  <span class="cstat-no" title="statement not covered" > }</span>
354
365
  <span class="cstat-no" title="statement not covered" ></span>
355
366
  <span class="cstat-no" title="statement not covered" > const root = caps.WMS_Capabilities ? caps.WMS_Capabilities : caps.WMT_MS_Capabilities</span>
@@ -359,6 +370,13 @@
359
370
  <span class="cstat-no" title="statement not covered" > availableLayers: {}</span>
360
371
  <span class="cstat-no" title="statement not covered" > }</span>
361
372
  <span class="cstat-no" title="statement not covered" ></span>
373
+ <span class="cstat-no" title="statement not covered" > // check if server uses different url for GetMap request</span>
374
+ <span class="cstat-no" title="statement not covered" > const requestRoot = _.get(root, 'Capability[0].Request[0]')</span>
375
+ <span class="cstat-no" title="statement not covered" > if (requestRoot) {</span>
376
+ <span class="cstat-no" title="statement not covered" > const getMap = _.get(requestRoot, 'GetMap[0].DCPType[0].HTTP[0].Get[0].OnlineResource[0].$.xlink:href')</span>
377
+ <span class="cstat-no" title="statement not covered" > if (getMap) { out.getMapUrl = getMap }</span>
378
+ <span class="cstat-no" title="statement not covered" > }</span>
379
+ <span class="cstat-no" title="statement not covered" ></span>
362
380
  <span class="cstat-no" title="statement not covered" > const layerRoot = _.get(root, 'Capability[0].Layer')</span>
363
381
  <span class="cstat-no" title="statement not covered" > if (layerRoot) {</span>
364
382
  <span class="cstat-no" title="statement not covered" > const flat = layerRoot.slice()</span>
@@ -436,7 +454,7 @@
436
454
  <div class='footer quiet pad2 space-top1 center small'>
437
455
  Code coverage generated by
438
456
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
439
- at 2024-08-13T10:02:04.872Z
457
+ at 2026-03-10T09:15:24.774Z
440
458
  </div>
441
459
  <script src="../../prettify.js"></script>
442
460
  <script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/154</span>
28
+ <span class='fraction'>0/153</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/154</span>
49
+ <span class='fraction'>0/153</span>
50
50
  </div>
51
51
 
52
52
 
@@ -216,9 +216,7 @@
216
216
  <a name='L151'></a><a href='#L151'>151</a>
217
217
  <a name='L152'></a><a href='#L152'>152</a>
218
218
  <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
221
- <span class="cline-any cline-no">&nbsp;</span>
219
+ <a name='L154'></a><a href='#L154'>154</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
222
220
  <span class="cline-any cline-no">&nbsp;</span>
223
221
  <span class="cline-any cline-no">&nbsp;</span>
224
222
  <span class="cline-any cline-no">&nbsp;</span>
@@ -372,29 +370,28 @@
372
370
  <span class="cline-any cline-no">&nbsp;</span>
373
371
  <span class="cline-any cline-no">&nbsp;</span>
374
372
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import _ from 'lodash'</span></span></span>
375
- <span class="cstat-no" title="statement not covered" >import fetch from 'node-fetch'</span>
376
373
  <span class="cstat-no" title="statement not covered" >import xml2js from 'xml2js'</span>
377
374
  <span class="cstat-no" title="statement not covered" >import { buildUrl } from '../../core/common/index.js'</span>
378
375
  <span class="cstat-no" title="statement not covered" ></span>
379
376
  <span class="cstat-no" title="statement not covered" >// https://www.opengeospatial.org/standards/wmts</span>
380
377
  <span class="cstat-no" title="statement not covered" ></span>
381
- <span class="cstat-no" title="statement not covered" >function fetchAsJson (query) {</span>
382
- <span class="cstat-no" title="statement not covered" > return fetch(query, { redirect: 'follow' })</span>
378
+ <span class="cstat-no" title="statement not covered" >function fetchAsJson (query, headers = {}) {</span>
379
+ <span class="cstat-no" title="statement not covered" > return fetch(query, { redirect: 'follow' }, headers)</span>
383
380
  <span class="cstat-no" title="statement not covered" > .then(response =&gt; response.text())</span>
384
381
  <span class="cstat-no" title="statement not covered" > .then(txt =&gt; xml2js.parseStringPromise(txt, { tagNameProcessors: [xml2js.processors.stripPrefix] }))</span>
385
382
  <span class="cstat-no" title="statement not covered" >}</span>
386
383
  <span class="cstat-no" title="statement not covered" ></span>
387
- <span class="cstat-no" title="statement not covered" >export function GetCapabilities (url, searchParams = {}) {</span>
384
+ <span class="cstat-no" title="statement not covered" >export function GetCapabilities (url, headers = {}, searchParams = {}) {</span>
388
385
  <span class="cstat-no" title="statement not covered" > const query = buildUrl(url, Object.assign({</span>
389
386
  <span class="cstat-no" title="statement not covered" > SERVICE: 'WMTS',</span>
390
387
  <span class="cstat-no" title="statement not covered" > REQUEST: 'GetCapabilities'</span>
391
388
  <span class="cstat-no" title="statement not covered" > }, searchParams))</span>
392
- <span class="cstat-no" title="statement not covered" > return fetchAsJson(query)</span>
389
+ <span class="cstat-no" title="statement not covered" > return fetchAsJson(query, headers)</span>
393
390
  <span class="cstat-no" title="statement not covered" >}</span>
394
391
  <span class="cstat-no" title="statement not covered" ></span>
395
- <span class="cstat-no" title="statement not covered" >export async function discover (url, searchParams = {}, caps = null) {</span>
392
+ <span class="cstat-no" title="statement not covered" >export async function discover (url, headers = {}, searchParams = {}, caps = null) {</span>
396
393
  <span class="cstat-no" title="statement not covered" > if (!caps) {</span>
397
- <span class="cstat-no" title="statement not covered" > caps = await GetCapabilities(url, searchParams)</span>
394
+ <span class="cstat-no" title="statement not covered" > caps = await GetCapabilities(url, headers, searchParams)</span>
398
395
  <span class="cstat-no" title="statement not covered" > }</span>
399
396
  <span class="cstat-no" title="statement not covered" ></span>
400
397
  <span class="cstat-no" title="statement not covered" > const out = {</span>
@@ -532,7 +529,7 @@
532
529
  <div class='footer quiet pad2 space-top1 center small'>
533
530
  Code coverage generated by
534
531
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
535
- at 2024-08-13T10:02:04.872Z
532
+ at 2026-03-10T09:15:24.774Z
536
533
  </div>
537
534
  <script src="../../prettify.js"></script>
538
535
  <script>