@kalisio/kdk 2.1.7 → 2.1.8

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 (792) hide show
  1. package/.codeclimate.yml +34 -34
  2. package/.nycrc +5 -5
  3. package/.travis.doc.sh +8 -8
  4. package/.travis.test.sh +40 -40
  5. package/CHANGELOG.md +727 -727
  6. package/LICENSE +21 -21
  7. package/README.md +32 -32
  8. package/core/api/application.js +591 -591
  9. package/core/api/authentication.js +203 -203
  10. package/core/api/db.js +226 -226
  11. package/core/api/hooks/hooks.authentication.js +73 -73
  12. package/core/api/hooks/hooks.authorisations.js +376 -376
  13. package/core/api/hooks/hooks.groups.js +48 -48
  14. package/core/api/hooks/hooks.logger.js +26 -26
  15. package/core/api/hooks/hooks.model.js +290 -290
  16. package/core/api/hooks/hooks.organisations.js +156 -156
  17. package/core/api/hooks/hooks.push.js +56 -56
  18. package/core/api/hooks/hooks.query.js +246 -246
  19. package/core/api/hooks/hooks.schemas.js +73 -73
  20. package/core/api/hooks/hooks.service.js +78 -78
  21. package/core/api/hooks/hooks.storage.js +36 -36
  22. package/core/api/hooks/hooks.users.js +261 -261
  23. package/core/api/hooks/index.js +12 -12
  24. package/core/api/index.js +21 -21
  25. package/core/api/marshall.js +90 -90
  26. package/core/api/models/groups.model.mongodb.js +8 -8
  27. package/core/api/models/organisations.model.mongodb.js +3 -3
  28. package/core/api/models/tags.model.mongodb.js +10 -10
  29. package/core/api/models/users.model.mongodb.js +10 -10
  30. package/core/api/services/account/account.hooks.js +37 -37
  31. package/core/api/services/account/account.service.js +117 -117
  32. package/core/api/services/authorisations/authorisations.hooks.js +33 -33
  33. package/core/api/services/authorisations/authorisations.service.js +139 -139
  34. package/core/api/services/databases/databases.hooks.js +36 -36
  35. package/core/api/services/databases/databases.service.js +5 -5
  36. package/core/api/services/groups/groups.hooks.js +31 -31
  37. package/core/api/services/index.js +126 -126
  38. package/core/api/services/mailer/mailer.hooks.js +35 -35
  39. package/core/api/services/mailer/mailer.service.js +11 -11
  40. package/core/api/services/organisations/organisations.hooks.js +31 -31
  41. package/core/api/services/organisations/organisations.service.js +86 -86
  42. package/core/api/services/push/push.hooks.js +35 -35
  43. package/core/api/services/push/push.service.js +12 -12
  44. package/core/api/services/storage/storage.hooks.js +35 -35
  45. package/core/api/services/storage/storage.service.js +29 -29
  46. package/core/api/services/tags/tags.hooks.js +31 -31
  47. package/core/api/services/users/users.hooks.js +75 -75
  48. package/core/api/utils.js +11 -11
  49. package/core/client/api.js +293 -293
  50. package/core/client/capabilities.js +22 -22
  51. package/core/client/components/KAction.vue +393 -393
  52. package/core/client/components/KAvatar.vue +129 -129
  53. package/core/client/components/KBlock.vue +67 -67
  54. package/core/client/components/KChip.vue +68 -68
  55. package/core/client/components/KChipsPane.vue +103 -103
  56. package/core/client/components/KContent.vue +105 -105
  57. package/core/client/components/KDialog.vue +160 -160
  58. package/core/client/components/KExpandable.vue +49 -49
  59. package/core/client/components/KLogo.vue +32 -32
  60. package/core/client/components/KModal.vue +173 -173
  61. package/core/client/components/KPanel.vue +64 -64
  62. package/core/client/components/KScrollArea.vue +88 -88
  63. package/core/client/components/KSponsor.vue +40 -40
  64. package/core/client/components/KStamp.vue +65 -65
  65. package/core/client/components/KStore.vue +102 -102
  66. package/core/client/components/KTextArea.vue +143 -143
  67. package/core/client/components/KTree.vue +31 -31
  68. package/core/client/components/KVersion.vue +19 -19
  69. package/core/client/components/account/KAccount.vue +68 -68
  70. package/core/client/components/account/KDeleteAccountManager.vue +62 -62
  71. package/core/client/components/account/KEmailManager.vue +128 -128
  72. package/core/client/components/account/KPasswordManager.vue +90 -90
  73. package/core/client/components/account/KProfile.vue +109 -109
  74. package/core/client/components/account/KResetPassword.vue +126 -120
  75. package/core/client/components/account/KSendResetPassword.vue +97 -97
  76. package/core/client/components/account/KSubscription.vue +71 -71
  77. package/core/client/components/account/KSubscriptionsManager.vue +46 -46
  78. package/core/client/components/account/KVerifyEmailManager.vue +105 -105
  79. package/core/client/components/account/index.js +7 -7
  80. package/core/client/components/app/KAbout.vue +98 -98
  81. package/core/client/components/app/KHome.vue +12 -12
  82. package/core/client/components/app/KPlatform.vue +55 -55
  83. package/core/client/components/app/KSettings.vue +42 -42
  84. package/core/client/components/app/KTerms.vue +41 -41
  85. package/core/client/components/app/KTour.vue +448 -448
  86. package/core/client/components/app/KWelcome.vue +133 -133
  87. package/core/client/components/app/index.js +11 -11
  88. package/core/client/components/chart/KChart.vue +197 -197
  89. package/core/client/components/chart/KDataTable.vue +183 -183
  90. package/core/client/components/chart/KStatisticsChart.vue +94 -94
  91. package/core/client/components/chart/KTimeSeriesChart.vue +431 -431
  92. package/core/client/components/chart/index.js +9 -9
  93. package/core/client/components/collection/KBoard.vue +65 -65
  94. package/core/client/components/collection/KCard.vue +196 -196
  95. package/core/client/components/collection/KCardSection.vue +52 -52
  96. package/core/client/components/collection/KColumn.vue +229 -229
  97. package/core/client/components/collection/KFilter.vue +158 -158
  98. package/core/client/components/collection/KGrid.vue +121 -121
  99. package/core/client/components/collection/KHistory.vue +118 -118
  100. package/core/client/components/collection/KHistoryEntry.vue +111 -111
  101. package/core/client/components/collection/KItem.vue +128 -128
  102. package/core/client/components/collection/KList.vue +135 -135
  103. package/core/client/components/collection/KSorter.vue +46 -46
  104. package/core/client/components/collection/KTable.vue +238 -238
  105. package/core/client/components/collection/index.js +19 -19
  106. package/core/client/components/editor/KEditor.vue +52 -52
  107. package/core/client/components/editor/KModalEditor.vue +96 -96
  108. package/core/client/components/editor/index.js +7 -7
  109. package/core/client/components/form/KChipsField.vue +162 -162
  110. package/core/client/components/form/KColorField.vue +69 -69
  111. package/core/client/components/form/KColorScaleField.vue +86 -86
  112. package/core/client/components/form/KDateTimeRangeField.vue +65 -65
  113. package/core/client/components/form/KDatetimeField.vue +70 -70
  114. package/core/client/components/form/KEmailField.vue +33 -33
  115. package/core/client/components/form/KFileField.vue +161 -161
  116. package/core/client/components/form/KForm.vue +247 -247
  117. package/core/client/components/form/KIconField.vue +101 -101
  118. package/core/client/components/form/KItemField.vue +123 -123
  119. package/core/client/components/form/KNumberField.vue +33 -33
  120. package/core/client/components/form/KOptionsField.vue +63 -63
  121. package/core/client/components/form/KPasswordField.vue +57 -57
  122. package/core/client/components/form/KPhoneField.vue +32 -32
  123. package/core/client/components/form/KPropertyItemField.vue +119 -119
  124. package/core/client/components/form/KRoleField.vue +60 -60
  125. package/core/client/components/form/KSelectField.vue +143 -143
  126. package/core/client/components/form/KTextField.vue +48 -48
  127. package/core/client/components/form/KTextareaField.vue +88 -88
  128. package/core/client/components/form/KToggleField.vue +46 -46
  129. package/core/client/components/form/KTokenField.vue +80 -80
  130. package/core/client/components/form/KUnitField.vue +57 -57
  131. package/core/client/components/form/KUrlField.vue +32 -32
  132. package/core/client/components/form/KView.vue +118 -118
  133. package/core/client/components/form/index.js +7 -7
  134. package/core/client/components/index.js +48 -48
  135. package/core/client/components/input/KColorChooser.vue +63 -63
  136. package/core/client/components/input/KIconChooser.vue +308 -308
  137. package/core/client/components/input/KOptionsChooser.vue +122 -122
  138. package/core/client/components/input/KPalette.vue +40 -40
  139. package/core/client/components/input/index.js +11 -11
  140. package/core/client/components/layout/KFab.vue +113 -113
  141. package/core/client/components/layout/KLayout.vue +64 -64
  142. package/core/client/components/layout/KOpener.vue +140 -140
  143. package/core/client/components/layout/KPage.vue +320 -320
  144. package/core/client/components/layout/KPageSticky.vue +53 -53
  145. package/core/client/components/layout/KWindow.vue +443 -443
  146. package/core/client/components/layout/index.js +13 -13
  147. package/core/client/components/media/KColorScale.vue +254 -254
  148. package/core/client/components/media/KImageViewer.vue +44 -44
  149. package/core/client/components/media/KMarkdownViewer.vue +55 -55
  150. package/core/client/components/media/KMediaBrowser.vue +301 -340
  151. package/core/client/components/media/KShape.vue +120 -120
  152. package/core/client/components/media/index.js +13 -13
  153. package/core/client/components/menu/KMenu.vue +147 -147
  154. package/core/client/components/menu/KRadialFab.vue +122 -122
  155. package/core/client/components/menu/KRadialFabItem.vue +73 -73
  156. package/core/client/components/menu/index.js +9 -9
  157. package/core/client/components/screen/KEndpointScreen.vue +80 -80
  158. package/core/client/components/screen/KErrorScreen.vue +24 -24
  159. package/core/client/components/screen/KLoginScreen.vue +84 -84
  160. package/core/client/components/screen/KLogoutScreen.vue +20 -20
  161. package/core/client/components/screen/KRegisterScreen.vue +114 -114
  162. package/core/client/components/screen/KScreen.vue +106 -106
  163. package/core/client/components/screen/KScreenFooter.vue +32 -32
  164. package/core/client/components/screen/KScreenHeader.vue +17 -17
  165. package/core/client/components/screen/index.js +5 -5
  166. package/core/client/components/team/KAddMember.vue +375 -375
  167. package/core/client/components/team/KAddTag.vue +121 -121
  168. package/core/client/components/team/KChangeRole.vue +118 -118
  169. package/core/client/components/team/KGroupCard.vue +110 -110
  170. package/core/client/components/team/KGroupsActivity.vue +66 -66
  171. package/core/client/components/team/KJoinGroup.vue +132 -132
  172. package/core/client/components/team/KMemberCard.vue +328 -328
  173. package/core/client/components/team/KMemberFilter.vue +49 -49
  174. package/core/client/components/team/KMembersActivity.vue +126 -126
  175. package/core/client/components/team/KOrganisationsActivity.vue +53 -53
  176. package/core/client/components/team/KTagCard.vue +72 -72
  177. package/core/client/components/team/KTagsActivity.vue +61 -61
  178. package/core/client/components/team/index.js +9 -9
  179. package/core/client/components/time/KAbsoluteTimeRange.vue +183 -183
  180. package/core/client/components/time/KDate.vue +75 -75
  181. package/core/client/components/time/KDateTime.vue +172 -172
  182. package/core/client/components/time/KDateTimeRange.vue +118 -118
  183. package/core/client/components/time/KRelativeTimeRanges.vue +193 -193
  184. package/core/client/components/time/KTime.vue +74 -74
  185. package/core/client/components/time/index.js +7 -7
  186. package/core/client/components/viewer/KModalViewer.vue +47 -47
  187. package/core/client/components/viewer/KViewer.vue +30 -30
  188. package/core/client/composables/activity.js +67 -67
  189. package/core/client/composables/collection.js +181 -181
  190. package/core/client/composables/index.js +8 -8
  191. package/core/client/composables/pwa.js +71 -71
  192. package/core/client/composables/schema.js +64 -64
  193. package/core/client/composables/selection.js +88 -88
  194. package/core/client/composables/session.js +172 -172
  195. package/core/client/composables/store.js +49 -49
  196. package/core/client/composables/version.js +47 -47
  197. package/core/client/events.js +3 -3
  198. package/core/client/filter.js +60 -60
  199. package/core/client/guards.js +101 -101
  200. package/core/client/hooks/hooks.events.js +7 -7
  201. package/core/client/hooks/hooks.logger.js +24 -24
  202. package/core/client/hooks/hooks.users.js +22 -22
  203. package/core/client/hooks/index.js +3 -3
  204. package/core/client/i18n/core_en.json +845 -845
  205. package/core/client/i18n/core_fr.json +843 -843
  206. package/core/client/i18n.js +88 -88
  207. package/core/client/index.js +84 -84
  208. package/core/client/layout.js +323 -323
  209. package/core/client/local-storage.js +28 -28
  210. package/core/client/mixins/index.js +12 -12
  211. package/core/client/mixins/mixin.account.js +61 -61
  212. package/core/client/mixins/mixin.base-activity.js +232 -232
  213. package/core/client/mixins/mixin.base-collection.js +162 -162
  214. package/core/client/mixins/mixin.base-context.js +54 -54
  215. package/core/client/mixins/mixin.base-editor.js +194 -194
  216. package/core/client/mixins/mixin.base-field.js +105 -105
  217. package/core/client/mixins/mixin.base-item.js +166 -166
  218. package/core/client/mixins/mixin.base-modal.js +36 -36
  219. package/core/client/mixins/mixin.base-viewer.js +43 -43
  220. package/core/client/mixins/mixin.object-proxy.js +46 -46
  221. package/core/client/mixins/mixin.schema-proxy.js +97 -97
  222. package/core/client/mixins/mixin.service.js +22 -22
  223. package/core/client/reader.js +65 -65
  224. package/core/client/readers/index.js +3 -3
  225. package/core/client/readers/reader.blob.js +39 -39
  226. package/core/client/readers/reader.csv.js +36 -36
  227. package/core/client/readers/reader.json.js +34 -34
  228. package/core/client/search.js +47 -47
  229. package/core/client/services/index.js +49 -49
  230. package/core/client/services/local-settings.service.js +67 -67
  231. package/core/client/sorter.js +31 -31
  232. package/core/client/storage.js +110 -102
  233. package/core/client/store.js +39 -39
  234. package/core/client/theme.js +40 -40
  235. package/core/client/time.js +167 -167
  236. package/core/client/units.js +218 -218
  237. package/core/client/utils/index.js +203 -203
  238. package/core/client/utils/utils.account.js +52 -52
  239. package/core/client/utils/utils.colors.js +36 -36
  240. package/core/client/utils/utils.content.js +185 -185
  241. package/core/client/utils/utils.locale.js +28 -28
  242. package/core/client/utils/utils.platform.js +11 -11
  243. package/core/client/utils/utils.push.js +53 -53
  244. package/core/client/utils/utils.pwa.js +62 -62
  245. package/core/client/utils/utils.session.js +89 -89
  246. package/core/common/errors.js +1 -1
  247. package/core/common/index.js +10 -10
  248. package/core/common/permissions.js +318 -318
  249. package/core/common/schema.js +35 -35
  250. package/core/common/schemas/groups.create.json +28 -28
  251. package/core/common/schemas/groups.update.json +28 -28
  252. package/core/common/schemas/organisations.create.json +28 -28
  253. package/core/common/schemas/organisations.update.json +49 -49
  254. package/core/common/schemas/settings.update.json +234 -234
  255. package/core/common/schemas/tags.create.json +35 -35
  256. package/core/common/schemas/tags.update.json +35 -35
  257. package/core/common/schemas/users.update-profile.json +33 -33
  258. package/core/common/utils.js +45 -45
  259. package/core.api.js +5 -5
  260. package/core.client.js +5 -5
  261. package/core.common.js +1 -1
  262. package/extras/css/core.variables.scss +38 -38
  263. package/extras/icons/center-on-feature.svg +315 -315
  264. package/extras/icons/json.svg +83 -83
  265. package/extras/icons/map-legend.svg +251 -251
  266. package/extras/icons/target.svg +37 -37
  267. package/extras/tours/core/account-profile.js +32 -32
  268. package/extras/tours/core/account.js +143 -143
  269. package/extras/tours/core/add-member.js +74 -74
  270. package/extras/tours/core/add-tag.js +12 -12
  271. package/extras/tours/core/create-group.js +19 -19
  272. package/extras/tours/core/create-organisation.js +19 -19
  273. package/extras/tours/core/create-tag.js +26 -26
  274. package/extras/tours/core/edit-member-role.js +13 -13
  275. package/extras/tours/core/groups.js +65 -65
  276. package/extras/tours/core/join-group.js +13 -13
  277. package/extras/tours/core/login.js +41 -41
  278. package/extras/tours/core/members.js +108 -108
  279. package/extras/tours/core/register.js +61 -61
  280. package/extras/tours/core/send-reset-password.js +14 -14
  281. package/extras/tours/core/tags.js +65 -65
  282. package/extras/tours/map/add-layer.js +28 -28
  283. package/extras/tours/map/catalog-categories.js +59 -59
  284. package/extras/tours/map/catalog-panel.js +112 -112
  285. package/extras/tours/map/connect-layer.js +39 -39
  286. package/extras/tours/map/create-layer.js +33 -33
  287. package/extras/tours/map/create-view.js +25 -25
  288. package/extras/tours/map/fab.js +26 -26
  289. package/extras/tours/map/import-layer.js +33 -33
  290. package/extras/tours/map/navigation-bar.js +185 -185
  291. package/extras/tours/map/side-nav.js +35 -35
  292. package/extras/tours/map/timeline.js +77 -77
  293. package/map/api/config/categories.cjs +42 -42
  294. package/map/api/config/layers.cjs +43 -43
  295. package/map/api/config/sublegends.cjs +42 -42
  296. package/map/api/hooks/hooks.catalog.js +85 -85
  297. package/map/api/hooks/hooks.features.js +84 -84
  298. package/map/api/hooks/hooks.query.js +361 -361
  299. package/map/api/hooks/index.js +3 -3
  300. package/map/api/index.js +18 -18
  301. package/map/api/marshall.js +31 -31
  302. package/map/api/models/alerts.model.mongodb.js +7 -7
  303. package/map/api/models/catalog.model.mongodb.js +14 -14
  304. package/map/api/models/features.model.mongodb.js +37 -37
  305. package/map/api/services/alerts/alerts.hooks.js +63 -63
  306. package/map/api/services/alerts/alerts.service.js +175 -175
  307. package/map/api/services/catalog/catalog.hooks.js +76 -76
  308. package/map/api/services/daptiles/daptiles.service.js +475 -475
  309. package/map/api/services/features/features.hooks.js +40 -40
  310. package/map/api/services/features/features.service.js +52 -52
  311. package/map/api/services/geocoder/geocoder.hooks.js +31 -31
  312. package/map/api/services/geocoder/geocoder.service.js +79 -79
  313. package/map/api/services/index.js +228 -228
  314. package/map/client/canvas-draw-context.js +16 -16
  315. package/map/client/cesium/utils.js +133 -133
  316. package/map/client/components/KCaptureToolbar.vue +155 -155
  317. package/map/client/components/KColorLegend.vue +349 -349
  318. package/map/client/components/KCompass.vue +143 -143
  319. package/map/client/components/KEditLayerData.vue +85 -85
  320. package/map/client/components/KFeatureActionButton.vue +119 -119
  321. package/map/client/components/KFeatureEditor.vue +92 -92
  322. package/map/client/components/KFeaturesChart.vue +285 -285
  323. package/map/client/components/KFeaturesFilter.vue +259 -259
  324. package/map/client/components/KFeaturesTable.vue +99 -99
  325. package/map/client/components/KLayerEditionToolbar.vue +54 -54
  326. package/map/client/components/KLayerEditor.vue +48 -48
  327. package/map/client/components/KLayerStyleEditor.vue +118 -118
  328. package/map/client/components/KLayerStyleForm.vue +906 -906
  329. package/map/client/components/KLevelSlider.vue +100 -100
  330. package/map/client/components/KMeasureTool.vue +568 -568
  331. package/map/client/components/KPositionIndicator.vue +90 -90
  332. package/map/client/components/KTimeline.vue +293 -293
  333. package/map/client/components/KTimezoneMap.vue +158 -158
  334. package/map/client/components/KUrlLegend.vue +122 -122
  335. package/map/client/components/catalog/KAddLayer.vue +66 -66
  336. package/map/client/components/catalog/KBaseLayersSelector.vue +114 -114
  337. package/map/client/components/catalog/KConnectLayer.vue +323 -323
  338. package/map/client/components/catalog/KCreateLayer.vue +184 -184
  339. package/map/client/components/catalog/KCreateView.vue +108 -108
  340. package/map/client/components/catalog/KFilteredLayerItem.vue +53 -53
  341. package/map/client/components/catalog/KImportLayer.vue +168 -168
  342. package/map/client/components/catalog/KLayerCategories.vue +274 -274
  343. package/map/client/components/catalog/KLayerItem.vue +70 -70
  344. package/map/client/components/catalog/KLayersPanel.vue +137 -137
  345. package/map/client/components/catalog/KLayersSelector.vue +78 -78
  346. package/map/client/components/catalog/KViewSelector.vue +46 -46
  347. package/map/client/components/catalog/KViewsPanel.vue +123 -123
  348. package/map/client/components/catalog/KWeatherLayersSelector.vue +129 -129
  349. package/map/client/components/form/KDirectionField.vue +113 -113
  350. package/map/client/components/form/KLayerCategoryField.vue +46 -46
  351. package/map/client/components/form/KLocationField.vue +189 -189
  352. package/map/client/components/form/KOwsLayerField.vue +130 -130
  353. package/map/client/components/form/KOwsServiceField.vue +238 -238
  354. package/map/client/components/form/KTimezoneField.vue +142 -142
  355. package/map/client/components/index.js +1 -1
  356. package/map/client/components/legend/KColorScaleLegend.vue +31 -31
  357. package/map/client/components/legend/KImageLegend.vue +52 -52
  358. package/map/client/components/legend/KLegend.vue +191 -191
  359. package/map/client/components/legend/KLegendRenderer.vue +20 -20
  360. package/map/client/components/legend/KSymbolsLegend.vue +101 -101
  361. package/map/client/components/location/KGeocodersFilter.vue +44 -44
  362. package/map/client/components/location/KLocationCardSection.vue +61 -61
  363. package/map/client/components/location/KLocationMap.vue +280 -280
  364. package/map/client/components/location/KLocationSearch.vue +144 -144
  365. package/map/client/components/location/KLocationTip.vue +29 -29
  366. package/map/client/components/tools/KGeolocateTool.vue +46 -46
  367. package/map/client/components/tools/KSearchTool.vue +93 -93
  368. package/map/client/components/widget/KElevationProfile.vue +454 -454
  369. package/map/client/components/widget/KInformationBox.vue +145 -145
  370. package/map/client/components/widget/KMapillaryViewer.vue +178 -178
  371. package/map/client/components/widget/KStackableTimeSeries.vue +214 -214
  372. package/map/client/components/widget/KTimeSeries.vue +500 -500
  373. package/map/client/composables/activity.js +88 -88
  374. package/map/client/composables/highlight.js +214 -214
  375. package/map/client/composables/index.js +7 -7
  376. package/map/client/composables/location.js +53 -53
  377. package/map/client/composables/measure.js +42 -42
  378. package/map/client/composables/probe.js +133 -133
  379. package/map/client/composables/selection.js +300 -300
  380. package/map/client/composables/weather.js +213 -213
  381. package/map/client/elevation-utils.js +258 -258
  382. package/map/client/geolocation.js +119 -119
  383. package/map/client/globe.js +13 -13
  384. package/map/client/i18n/map_en.json +645 -645
  385. package/map/client/i18n/map_fr.json +646 -646
  386. package/map/client/index.js +18 -18
  387. package/map/client/init.js +80 -80
  388. package/map/client/leaflet/GSMaPLayer.js +55 -55
  389. package/map/client/leaflet/GradientPath.js +180 -180
  390. package/map/client/leaflet/MaskLayer.js +57 -57
  391. package/map/client/leaflet/TiledFeatureLayer.js +572 -572
  392. package/map/client/leaflet/TiledMeshLayer.js +486 -486
  393. package/map/client/leaflet/TiledWindLayer.js +384 -384
  394. package/map/client/leaflet/utils.js +246 -246
  395. package/map/client/map.js +15 -15
  396. package/map/client/mixins/globe/index.js +8 -8
  397. package/map/client/mixins/globe/mixin.base-globe.js +462 -462
  398. package/map/client/mixins/globe/mixin.file-layers.js +40 -40
  399. package/map/client/mixins/globe/mixin.geojson-layers.js +314 -314
  400. package/map/client/mixins/globe/mixin.globe-activity.js +52 -52
  401. package/map/client/mixins/globe/mixin.opendap-layers.js +51 -51
  402. package/map/client/mixins/globe/mixin.popup.js +82 -82
  403. package/map/client/mixins/globe/mixin.style.js +110 -110
  404. package/map/client/mixins/globe/mixin.tooltip.js +101 -101
  405. package/map/client/mixins/index.js +9 -9
  406. package/map/client/mixins/map/index.js +16 -16
  407. package/map/client/mixins/map/mixin.base-map.js +592 -592
  408. package/map/client/mixins/map/mixin.canvas-layers.js +529 -529
  409. package/map/client/mixins/map/mixin.edit-layers.js +493 -474
  410. package/map/client/mixins/map/mixin.file-layers.js +49 -49
  411. package/map/client/mixins/map/mixin.forecast-layers.js +79 -79
  412. package/map/client/mixins/map/mixin.geojson-layers.js +557 -557
  413. package/map/client/mixins/map/mixin.georaster-layers.js +114 -114
  414. package/map/client/mixins/map/mixin.gsmap-layers.js +27 -27
  415. package/map/client/mixins/map/mixin.heatmap-layers.js +116 -116
  416. package/map/client/mixins/map/mixin.map-activity.js +38 -38
  417. package/map/client/mixins/map/mixin.mapillary-layers.js +45 -45
  418. package/map/client/mixins/map/mixin.popup.js +53 -53
  419. package/map/client/mixins/map/mixin.style.js +73 -73
  420. package/map/client/mixins/map/mixin.tiled-mesh-layers.js +120 -120
  421. package/map/client/mixins/map/mixin.tiled-wind-layers.js +126 -126
  422. package/map/client/mixins/map/mixin.tooltip.js +47 -47
  423. package/map/client/mixins/mixin.activity.js +477 -477
  424. package/map/client/mixins/mixin.catalog-panel.js +26 -26
  425. package/map/client/mixins/mixin.context.js +262 -262
  426. package/map/client/mixins/mixin.feature-selection.js +28 -28
  427. package/map/client/mixins/mixin.feature-service.js +403 -403
  428. package/map/client/mixins/mixin.infobox.js +29 -29
  429. package/map/client/mixins/mixin.levels.js +66 -66
  430. package/map/client/mixins/mixin.style.js +29 -29
  431. package/map/client/mixins/mixin.weacast.js +212 -212
  432. package/map/client/pixi-utils.js +256 -256
  433. package/map/client/readers/index.js +4 -4
  434. package/map/client/readers/reader.geojson.js +64 -64
  435. package/map/client/readers/reader.gpx.js +36 -36
  436. package/map/client/readers/reader.kml.js +36 -36
  437. package/map/client/readers/reader.shp.js +82 -82
  438. package/map/client/utils/index.js +3 -3
  439. package/map/client/utils/utils.js +228 -228
  440. package/map/client/utils/utils.location.js +45 -45
  441. package/map/client/utils/utils.schema.js +75 -75
  442. package/map/client/utils.all.js +3 -3
  443. package/map/client/utils.globe.js +2 -2
  444. package/map/client/utils.js +4 -4
  445. package/map/client/utils.map.js +2 -2
  446. package/map/common/dynamic-grid-source.js +127 -127
  447. package/map/common/errors.js +3 -3
  448. package/map/common/geotiff-grid-source.js +150 -150
  449. package/map/common/grid.js +509 -509
  450. package/map/common/index.js +29 -29
  451. package/map/common/meteo-model-grid-source.js +157 -157
  452. package/map/common/moment-utils.js +24 -24
  453. package/map/common/opendap-grid-source.js +261 -261
  454. package/map/common/opendap-utils.js +247 -247
  455. package/map/common/permissions.js +11 -11
  456. package/map/common/schemas/catalog.update.json +28 -28
  457. package/map/common/time-based-grid-source.js +111 -111
  458. package/map/common/tms-utils.js +63 -63
  459. package/map/common/wcs-grid-source.js +93 -93
  460. package/map/common/wcs-utils.js +167 -167
  461. package/map/common/weacast-grid-source.js +316 -316
  462. package/map/common/wfs-utils.js +163 -163
  463. package/map/common/wms-utils.js +117 -117
  464. package/map/common/wmts-utils.js +154 -154
  465. package/map.api.js +5 -5
  466. package/map.client.globe.js +5 -5
  467. package/map.client.js +5 -5
  468. package/map.client.map.js +5 -5
  469. package/map.common.js +1 -1
  470. package/map.config.cjs +9 -9
  471. package/package.json +161 -161
  472. package/test/api/core/account.test.js +485 -485
  473. package/test/api/core/client.test.js.skip +37 -37
  474. package/test/api/core/config/default.cjs +118 -118
  475. package/test/api/core/config/email-templates/confirmInvitation/html.ejs +18 -18
  476. package/test/api/core/config/email-templates/identityChange/html.ejs +14 -14
  477. package/test/api/core/config/email-templates/newDevice/html.ejs +7 -7
  478. package/test/api/core/config/email-templates/newSubscription/html.ejs +7 -7
  479. package/test/api/core/config/email-templates/passwordChange/html.ejs +5 -5
  480. package/test/api/core/config/email-templates/resendVerifySignup/html.ejs +12 -12
  481. package/test/api/core/config/email-templates/resetPwd/html.ejs +5 -5
  482. package/test/api/core/config/email-templates/sendResetPwd/html.ejs +12 -12
  483. package/test/api/core/config/email-templates/verifySignup/html.ejs +3 -3
  484. package/test/api/core/data/invalid-objects.json +59 -59
  485. package/test/api/core/data/schema.json +57 -57
  486. package/test/api/core/data/valid-objects.json +37 -37
  487. package/test/api/core/hooks.test.js +330 -330
  488. package/test/api/core/index.js +1 -1
  489. package/test/api/core/index.test.js +478 -478
  490. package/test/api/core/push.test.js +197 -197
  491. package/test/api/core/schemas.test.js +82 -82
  492. package/test/api/core/storage.test.js +153 -153
  493. package/test/api/core/team.test.js +670 -670
  494. package/test/api/core/utils.js +92 -92
  495. package/test/api/index.js +3 -3
  496. package/test/api/map/alerts.test.js +560 -560
  497. package/test/api/map/config/default.cjs +125 -125
  498. package/test/api/map/config/layers.json +38 -38
  499. package/test/api/map/data/DescribeCoverage.xml +54 -54
  500. package/test/api/map/data/adsb.observations.json +131 -131
  501. package/test/api/map/data/dataset.grb.das +55 -55
  502. package/test/api/map/data/dataset.grb.dds +17 -17
  503. package/test/api/map/data/vigicrues.observations.json +47041 -47041
  504. package/test/api/map/data/vigicrues.stations.json +15421 -15421
  505. package/test/api/map/data/zones.json +1227 -1227
  506. package/test/api/map/grid-sources.test.js +313 -313
  507. package/test/api/map/hooks.test.js +98 -98
  508. package/test/api/map/index.test.js +563 -563
  509. package/test/client/core/account.js +36 -36
  510. package/test/client/core/api.js +361 -361
  511. package/test/client/core/collection.js +64 -64
  512. package/test/client/core/index.js +8 -8
  513. package/test/client/core/layout.js +116 -116
  514. package/test/client/core/runner.js +224 -224
  515. package/test/client/core/screens.js +35 -35
  516. package/test/client/core/time.js +10 -10
  517. package/test/client/core/utils.js +260 -260
  518. package/test/client/index.js +3 -3
  519. package/test/client/map/catalog.js +193 -193
  520. package/test/client/map/controls.js +41 -41
  521. package/test/client/map/index.js +4 -4
  522. package/test/client/map/time.js +24 -24
  523. package/test/client/map/utils.js +27 -27
  524. package/coverage/base.css +0 -224
  525. package/coverage/block-navigation.js +0 -87
  526. package/coverage/core/api/application.js.html +0 -1789
  527. package/coverage/core/api/authentication.js.html +0 -694
  528. package/coverage/core/api/db.js.html +0 -751
  529. package/coverage/core/api/hooks/hooks.account.js.html +0 -169
  530. package/coverage/core/api/hooks/hooks.authentication.js.html +0 -274
  531. package/coverage/core/api/hooks/hooks.authorisations.js.html +0 -1201
  532. package/coverage/core/api/hooks/hooks.devices.js.html +0 -211
  533. package/coverage/core/api/hooks/hooks.groups.js.html +0 -229
  534. package/coverage/core/api/hooks/hooks.logger.js.html +0 -163
  535. package/coverage/core/api/hooks/hooks.model.js.html +0 -988
  536. package/coverage/core/api/hooks/hooks.organisations.js.html +0 -823
  537. package/coverage/core/api/hooks/hooks.pusher.js.html +0 -730
  538. package/coverage/core/api/hooks/hooks.query.js.html +0 -838
  539. package/coverage/core/api/hooks/hooks.schemas.js.html +0 -244
  540. package/coverage/core/api/hooks/hooks.service.js.html +0 -319
  541. package/coverage/core/api/hooks/hooks.storage.js.html +0 -193
  542. package/coverage/core/api/hooks/hooks.tags.js.html +0 -850
  543. package/coverage/core/api/hooks/hooks.users.js.html +0 -889
  544. package/coverage/core/api/hooks/index.html +0 -341
  545. package/coverage/core/api/hooks/index.js.html +0 -130
  546. package/coverage/core/api/index.html +0 -176
  547. package/coverage/core/api/index.js.html +0 -148
  548. package/coverage/core/api/marshall.js.html +0 -355
  549. package/coverage/core/api/models/groups.model.mongodb.js.html +0 -109
  550. package/coverage/core/api/models/index.html +0 -161
  551. package/coverage/core/api/models/organisations.model.mongodb.js.html +0 -94
  552. package/coverage/core/api/models/tags.model.mongodb.js.html +0 -115
  553. package/coverage/core/api/models/users.model.mongodb.js.html +0 -115
  554. package/coverage/core/api/oauth2-handler.js.html +0 -202
  555. package/coverage/core/api/oauth2-verifier.js.html +0 -355
  556. package/coverage/core/api/services/account/account.hooks.js.html +0 -196
  557. package/coverage/core/api/services/account/account.service.js.html +0 -448
  558. package/coverage/core/api/services/account/index.html +0 -131
  559. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +0 -184
  560. package/coverage/core/api/services/authorisations/authorisations.service.js.html +0 -502
  561. package/coverage/core/api/services/authorisations/index.html +0 -131
  562. package/coverage/core/api/services/databases/databases.hooks.js.html +0 -193
  563. package/coverage/core/api/services/databases/databases.service.js.html +0 -100
  564. package/coverage/core/api/services/databases/index.html +0 -131
  565. package/coverage/core/api/services/devices/devices.hooks.js.html +0 -190
  566. package/coverage/core/api/services/devices/devices.service.js.html +0 -382
  567. package/coverage/core/api/services/devices/index.html +0 -131
  568. package/coverage/core/api/services/groups/groups.hooks.js.html +0 -184
  569. package/coverage/core/api/services/groups/index.html +0 -116
  570. package/coverage/core/api/services/index.html +0 -116
  571. package/coverage/core/api/services/index.js.html +0 -472
  572. package/coverage/core/api/services/mailer/index.html +0 -131
  573. package/coverage/core/api/services/mailer/mailer.hooks.js.html +0 -190
  574. package/coverage/core/api/services/mailer/mailer.service.js.html +0 -118
  575. package/coverage/core/api/services/organisations/index.html +0 -131
  576. package/coverage/core/api/services/organisations/organisations.hooks.js.html +0 -178
  577. package/coverage/core/api/services/organisations/organisations.service.js.html +0 -319
  578. package/coverage/core/api/services/pusher/index.html +0 -146
  579. package/coverage/core/api/services/pusher/pusher.channels.js.html +0 -94
  580. package/coverage/core/api/services/pusher/pusher.hooks.js.html +0 -193
  581. package/coverage/core/api/services/pusher/pusher.service.js.html +0 -1420
  582. package/coverage/core/api/services/storage/index.html +0 -131
  583. package/coverage/core/api/services/storage/storage.hooks.js.html +0 -190
  584. package/coverage/core/api/services/storage/storage.service.js.html +0 -172
  585. package/coverage/core/api/services/tags/index.html +0 -116
  586. package/coverage/core/api/services/tags/tags.hooks.js.html +0 -220
  587. package/coverage/core/api/services/users/index.html +0 -116
  588. package/coverage/core/api/services/users/users.hooks.js.html +0 -313
  589. package/coverage/core/common/errors.js.html +0 -88
  590. package/coverage/core/common/index.html +0 -176
  591. package/coverage/core/common/index.js.html +0 -115
  592. package/coverage/core/common/permissions.js.html +0 -1015
  593. package/coverage/core/common/schema.js.html +0 -190
  594. package/coverage/core/common/utils.js.html +0 -220
  595. package/coverage/favicon.png +0 -0
  596. package/coverage/index.html +0 -491
  597. package/coverage/lcov-report/base.css +0 -224
  598. package/coverage/lcov-report/block-navigation.js +0 -87
  599. package/coverage/lcov-report/core/api/application.js.html +0 -1789
  600. package/coverage/lcov-report/core/api/authentication.js.html +0 -694
  601. package/coverage/lcov-report/core/api/db.js.html +0 -751
  602. package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +0 -169
  603. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +0 -274
  604. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +0 -1201
  605. package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +0 -211
  606. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +0 -229
  607. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +0 -163
  608. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +0 -988
  609. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +0 -823
  610. package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +0 -730
  611. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +0 -838
  612. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +0 -244
  613. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +0 -319
  614. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +0 -193
  615. package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +0 -850
  616. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +0 -889
  617. package/coverage/lcov-report/core/api/hooks/index.html +0 -341
  618. package/coverage/lcov-report/core/api/hooks/index.js.html +0 -130
  619. package/coverage/lcov-report/core/api/index.html +0 -176
  620. package/coverage/lcov-report/core/api/index.js.html +0 -148
  621. package/coverage/lcov-report/core/api/marshall.js.html +0 -355
  622. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +0 -109
  623. package/coverage/lcov-report/core/api/models/index.html +0 -161
  624. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +0 -94
  625. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +0 -115
  626. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +0 -115
  627. package/coverage/lcov-report/core/api/oauth2-handler.js.html +0 -202
  628. package/coverage/lcov-report/core/api/oauth2-verifier.js.html +0 -355
  629. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +0 -196
  630. package/coverage/lcov-report/core/api/services/account/account.service.js.html +0 -448
  631. package/coverage/lcov-report/core/api/services/account/index.html +0 -131
  632. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +0 -184
  633. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +0 -502
  634. package/coverage/lcov-report/core/api/services/authorisations/index.html +0 -131
  635. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +0 -193
  636. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +0 -100
  637. package/coverage/lcov-report/core/api/services/databases/index.html +0 -131
  638. package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +0 -190
  639. package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +0 -382
  640. package/coverage/lcov-report/core/api/services/devices/index.html +0 -131
  641. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +0 -184
  642. package/coverage/lcov-report/core/api/services/groups/index.html +0 -116
  643. package/coverage/lcov-report/core/api/services/index.html +0 -116
  644. package/coverage/lcov-report/core/api/services/index.js.html +0 -472
  645. package/coverage/lcov-report/core/api/services/mailer/index.html +0 -131
  646. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +0 -190
  647. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +0 -118
  648. package/coverage/lcov-report/core/api/services/organisations/index.html +0 -131
  649. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +0 -178
  650. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +0 -319
  651. package/coverage/lcov-report/core/api/services/pusher/index.html +0 -146
  652. package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +0 -94
  653. package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +0 -193
  654. package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +0 -1420
  655. package/coverage/lcov-report/core/api/services/storage/index.html +0 -131
  656. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +0 -190
  657. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +0 -172
  658. package/coverage/lcov-report/core/api/services/tags/index.html +0 -116
  659. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +0 -220
  660. package/coverage/lcov-report/core/api/services/users/index.html +0 -116
  661. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +0 -313
  662. package/coverage/lcov-report/core/common/errors.js.html +0 -88
  663. package/coverage/lcov-report/core/common/index.html +0 -176
  664. package/coverage/lcov-report/core/common/index.js.html +0 -115
  665. package/coverage/lcov-report/core/common/permissions.js.html +0 -1015
  666. package/coverage/lcov-report/core/common/schema.js.html +0 -190
  667. package/coverage/lcov-report/core/common/utils.js.html +0 -220
  668. package/coverage/lcov-report/favicon.png +0 -0
  669. package/coverage/lcov-report/index.html +0 -491
  670. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +0 -340
  671. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +0 -337
  672. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +0 -1162
  673. package/coverage/lcov-report/map/api/hooks/index.html +0 -161
  674. package/coverage/lcov-report/map/api/hooks/index.js.html +0 -94
  675. package/coverage/lcov-report/map/api/index.html +0 -131
  676. package/coverage/lcov-report/map/api/index.js.html +0 -139
  677. package/coverage/lcov-report/map/api/marshall.js.html +0 -178
  678. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +0 -106
  679. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +0 -127
  680. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +0 -202
  681. package/coverage/lcov-report/map/api/models/index.html +0 -146
  682. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +0 -274
  683. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +0 -610
  684. package/coverage/lcov-report/map/api/services/alerts/index.html +0 -131
  685. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +0 -313
  686. package/coverage/lcov-report/map/api/services/catalog/index.html +0 -116
  687. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +0 -1510
  688. package/coverage/lcov-report/map/api/services/daptiles/index.html +0 -116
  689. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +0 -205
  690. package/coverage/lcov-report/map/api/services/features/features.service.js.html +0 -241
  691. package/coverage/lcov-report/map/api/services/features/index.html +0 -131
  692. package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +0 -178
  693. package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +0 -322
  694. package/coverage/lcov-report/map/api/services/geocoder/index.html +0 -131
  695. package/coverage/lcov-report/map/api/services/index.html +0 -116
  696. package/coverage/lcov-report/map/api/services/index.js.html +0 -760
  697. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +0 -466
  698. package/coverage/lcov-report/map/common/errors.js.html +0 -94
  699. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +0 -535
  700. package/coverage/lcov-report/map/common/grid.js.html +0 -1612
  701. package/coverage/lcov-report/map/common/index.html +0 -371
  702. package/coverage/lcov-report/map/common/index.js.html +0 -172
  703. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +0 -556
  704. package/coverage/lcov-report/map/common/moment-utils.js.html +0 -157
  705. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +0 -868
  706. package/coverage/lcov-report/map/common/opendap-utils.js.html +0 -826
  707. package/coverage/lcov-report/map/common/permissions.js.html +0 -118
  708. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +0 -418
  709. package/coverage/lcov-report/map/common/tms-utils.js.html +0 -274
  710. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +0 -364
  711. package/coverage/lcov-report/map/common/wcs-utils.js.html +0 -586
  712. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +0 -1033
  713. package/coverage/lcov-report/map/common/wfs-utils.js.html +0 -574
  714. package/coverage/lcov-report/map/common/wms-utils.js.html +0 -436
  715. package/coverage/lcov-report/map/common/wmts-utils.js.html +0 -547
  716. package/coverage/lcov-report/prettify.css +0 -1
  717. package/coverage/lcov-report/prettify.js +0 -2
  718. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  719. package/coverage/lcov-report/sorter.js +0 -196
  720. package/coverage/lcov.info +0 -12501
  721. package/coverage/map/api/hooks/hooks.catalog.js.html +0 -340
  722. package/coverage/map/api/hooks/hooks.features.js.html +0 -337
  723. package/coverage/map/api/hooks/hooks.query.js.html +0 -1162
  724. package/coverage/map/api/hooks/index.html +0 -161
  725. package/coverage/map/api/hooks/index.js.html +0 -94
  726. package/coverage/map/api/index.html +0 -131
  727. package/coverage/map/api/index.js.html +0 -139
  728. package/coverage/map/api/marshall.js.html +0 -178
  729. package/coverage/map/api/models/alerts.model.mongodb.js.html +0 -106
  730. package/coverage/map/api/models/catalog.model.mongodb.js.html +0 -127
  731. package/coverage/map/api/models/features.model.mongodb.js.html +0 -202
  732. package/coverage/map/api/models/index.html +0 -146
  733. package/coverage/map/api/services/alerts/alerts.hooks.js.html +0 -274
  734. package/coverage/map/api/services/alerts/alerts.service.js.html +0 -610
  735. package/coverage/map/api/services/alerts/index.html +0 -131
  736. package/coverage/map/api/services/catalog/catalog.hooks.js.html +0 -313
  737. package/coverage/map/api/services/catalog/index.html +0 -116
  738. package/coverage/map/api/services/daptiles/daptiles.service.js.html +0 -1510
  739. package/coverage/map/api/services/daptiles/index.html +0 -116
  740. package/coverage/map/api/services/features/features.hooks.js.html +0 -205
  741. package/coverage/map/api/services/features/features.service.js.html +0 -241
  742. package/coverage/map/api/services/features/index.html +0 -131
  743. package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +0 -178
  744. package/coverage/map/api/services/geocoder/geocoder.service.js.html +0 -322
  745. package/coverage/map/api/services/geocoder/index.html +0 -131
  746. package/coverage/map/api/services/index.html +0 -116
  747. package/coverage/map/api/services/index.js.html +0 -760
  748. package/coverage/map/common/dynamic-grid-source.js.html +0 -466
  749. package/coverage/map/common/errors.js.html +0 -94
  750. package/coverage/map/common/geotiff-grid-source.js.html +0 -535
  751. package/coverage/map/common/grid.js.html +0 -1612
  752. package/coverage/map/common/index.html +0 -371
  753. package/coverage/map/common/index.js.html +0 -172
  754. package/coverage/map/common/meteo-model-grid-source.js.html +0 -556
  755. package/coverage/map/common/moment-utils.js.html +0 -157
  756. package/coverage/map/common/opendap-grid-source.js.html +0 -868
  757. package/coverage/map/common/opendap-utils.js.html +0 -826
  758. package/coverage/map/common/permissions.js.html +0 -118
  759. package/coverage/map/common/time-based-grid-source.js.html +0 -418
  760. package/coverage/map/common/tms-utils.js.html +0 -274
  761. package/coverage/map/common/wcs-grid-source.js.html +0 -364
  762. package/coverage/map/common/wcs-utils.js.html +0 -586
  763. package/coverage/map/common/weacast-grid-source.js.html +0 -1033
  764. package/coverage/map/common/wfs-utils.js.html +0 -574
  765. package/coverage/map/common/wms-utils.js.html +0 -436
  766. package/coverage/map/common/wmts-utils.js.html +0 -547
  767. package/coverage/prettify.css +0 -1
  768. package/coverage/prettify.js +0 -2
  769. package/coverage/sort-arrow-sprite.png +0 -0
  770. package/coverage/sorter.js +0 -196
  771. package/coverage/tmp/coverage-19264-1684834146599-0.json +0 -1
  772. package/coverage/tmp/coverage-2508-1684834182408-0.json +0 -1
  773. package/coverage/tmp/coverage-25908-1684834189369-0.json +0 -1
  774. package/coverage/tmp/coverage-32364-1684834189420-0.json +0 -1
  775. package/coverage/tmp/coverage-36604-1684834189485-0.json +0 -1
  776. package/coverage/tmp/coverage-40652-1684834182272-0.json +0 -1
  777. package/coverage/tmp/coverage-48484-1684834182342-0.json +0 -1
  778. package/coverage/tmp/coverage-51652-1684834189584-0.json +0 -1
  779. package/coverage/tmp/coverage-9776-1684834189519-0.json +0 -1
  780. package/test/api/core/test-log-2023-06-05.log +0 -0
  781. package/test/api/map/test-log-2022-12-01.log +0 -19
  782. package/test/api/map/test-log-2023-01-05.log +0 -4
  783. package/test/api/map/test-log-2023-01-09.log +0 -3
  784. package/test/api/map/test-log-2023-02-05.log +0 -11
  785. package/test/api/map/test-log-2023-02-14.log +0 -82
  786. package/test/api/map/test-log-2023-02-28.log +0 -28
  787. package/test/api/map/test-log-2023-03-02.log +0 -11
  788. package/test/api/map/test-log-2023-03-06.log +0 -11
  789. package/test/api/map/test-log-2023-03-07.log +0 -61
  790. package/test/api/map/test-log-2023-03-31.log +0 -11
  791. package/test/api/map/test-log-2023-05-23.log +0 -11
  792. package/test/api/map/test-log-2023-05-24.log +0 -11
@@ -1,293 +1,293 @@
1
- import logger from 'loglevel'
2
- import _ from 'lodash'
3
- import sift from 'sift'
4
- import moment from 'moment'
5
- import jwtdecode from 'jwt-decode'
6
- import feathers from '@feathersjs/client'
7
- import { io } from 'socket.io-client'
8
- import reactive from 'feathers-reactive/dist/feathers-reactive.js'
9
- import configuration from 'config'
10
- import { Platform } from 'quasar'
11
- import { permissions } from '../common/index.js'
12
- import { Store } from './store.js'
13
- import { Events } from './events.js'
14
-
15
- // Setup log level
16
- if (_.get(configuration, 'logs.level')) {
17
- logger.setLevel(_.get(configuration, 'logs.level'), false)
18
- } else {
19
- logger.setLevel('info')
20
- }
21
-
22
- export function createClient (config) {
23
- // Initiate the client
24
- const api = feathers()
25
-
26
- function getBaseUrlStorageKey () {
27
- return config.appName.toLowerCase() + '-baseUrl'
28
- }
29
-
30
- // Matchers that can be added to customize route guards
31
- let matchers = []
32
-
33
- function siftMatcher (originalQuery) {
34
- // Filter out Feathers specific operators like $limit, $skip, etc.
35
- // (copied from https://github.com/feathersjs-ecosystem/feathers-reactive)
36
- const keysToOmit = Object.keys(originalQuery).filter(key => key.charCodeAt(0) === 36)
37
- let query = _.omit(originalQuery, ...keysToOmit)
38
- // Compatibility with fuzzy search that use $search query syntax
39
- _.forOwn(query, (value, key) => {
40
- if ((typeof value === 'object') && _.has(value, '$search')) {
41
- query[key] = { $regex: new RegExp(_.get(value, '$search'), 'i') }
42
- }
43
- })
44
- // Run registered matchers
45
- for (const matcher of matchers) {
46
- query = matcher(query)
47
- }
48
- return sift(query)
49
- }
50
-
51
- // Setup the api
52
- api.registerMatcher = function (matcher) {
53
- if (!matchers.includes(matcher)) {
54
- matchers.push(matcher)
55
- }
56
- }
57
- api.unregisterMatcher = function (matcher) {
58
- matchers = matchers.filter(registeredMatcher => registeredMatcher !== matcher)
59
- }
60
- api.matcher = siftMatcher
61
-
62
- // This avoid managing the API path before each service name
63
- // If a context is not given it will be retrieved from the store if any and used for contextual services
64
- api.getServicePath = function (name, context, withApiPrefix = true) {
65
- const options = _.get(api.serviceOptions, name, {})
66
- let path
67
- // For non-contextual services path is always the name
68
- if (!options.context) {
69
- path = name
70
- } else {
71
- // Context is given as string ID or object ?
72
- if (typeof context === 'string') {
73
- if (context) path = context + '/' + name
74
- // Force global context on empty string
75
- else path = name
76
- } else if (typeof context === 'object') {
77
- if (context && context._id) path = context._id + '/' + name
78
- // Force global context on empty object
79
- else path = name
80
- } else {
81
- // Otherwise test for current context as service is registered as contextual
82
- const context = Store.get('context')
83
- if (context) {
84
- path = api.getServicePath(name, context, false)
85
- } else {
86
- // Because it could also be registered as global with the same name fallback
87
- path = name
88
- }
89
- }
90
- }
91
-
92
- if (withApiPrefix) {
93
- path = config.apiPath + '/' + path
94
- }
95
- return path
96
- }
97
- api.getService = function (name, context) {
98
- const path = api.getServicePath(name, context)
99
- const service = api.service(path)
100
- if (!service) {
101
- throw new Error('Cannot retrieve service ' + name + ' for context ' + (typeof context === 'object' ? context._id : context))
102
- }
103
- // Store the path on first call
104
- if (!service.path) service.path = path
105
- return service
106
- }
107
- // Used to register an existing backend service with its options
108
- api.declareService = function (name, options = {}) {
109
- if (!_.has(api.serviceOptions, name)) _.set(api.serviceOptions, name, options)
110
- }
111
- api.getServiceOptions = function (name) {
112
- return _.get(api.serviceOptions, name)
113
- }
114
- // Used to create a frontend only service with its options
115
- api.createService = function (name, options = {}) {
116
- let servicePath = options.path || name
117
- let contextId
118
- if (options.context) {
119
- contextId = (typeof options.context === 'object' ? options.context._id : options.context)
120
- servicePath = contextId + '/' + servicePath
121
- }
122
- servicePath = config.apiPath + '/' + servicePath
123
- if (servicePath.startsWith('/')) servicePath = servicePath.substr(1)
124
- api.declareService(name, options)
125
- let service = options.service
126
- // If we get a function try to call it assuming it will return the service object
127
- if (typeof service === 'function') {
128
- service = service(name, api, options)
129
- }
130
- // Need to register services with custom methods
131
- if (options.methods) {
132
- api.use(servicePath, service || api.transporter.service(servicePath), {
133
- methods: options.methods
134
- })
135
- } else {
136
- api.use(servicePath, service)
137
- }
138
- service = api.service(servicePath)
139
- if (options.hooks) service.hooks(options.hooks)
140
- if (options.context) service.context = options.context
141
- return service
142
- }
143
- // Change the base URL/domain to be used (useful for mobile apps)
144
- api.setBaseUrl = function (baseUrl) {
145
- window.localStorage.setItem(getBaseUrlStorageKey(), baseUrl)
146
- // Updating this setting live does not seem to work well in Feathers
147
- // For now the caller should simply "reload" the app
148
- /*
149
- if (config.transport === 'http') {
150
- Object.keys(this.services).forEach(path => {
151
- const service = this.service(path)
152
- if (service.base) {
153
- service.base = `${baseUrl}/${path}`
154
- }
155
- })
156
- } else {
157
- let socket = io(baseUrl, {
158
- transports: ['websocket'],
159
- path: (config.apiPath || '/') + 'ws'
160
- })
161
- this.configure(feathers.socketio(socket))
162
- }
163
- */
164
- }
165
-
166
- api.getBaseUrl = function () {
167
- // In case we are not in a mobile platform we can override the default app origin anyway
168
- let origin = (Platform.is.cordova ? config.domain : config.origin || window.location.origin)
169
- // Check for registered custom base Url if any
170
- if (window.localStorage.getItem(getBaseUrlStorageKey())) {
171
- origin = window.localStorage.getItem(getBaseUrlStorageKey())
172
- }
173
- return origin
174
- }
175
-
176
- api.can = function () {
177
- let service, context, resource
178
- // We can call this with different signatures
179
- // Last argument can always be an additional user,
180
- // if not defined the user is retrieved from the store
181
- const user = arguments[arguments.length - 1]
182
- const hasUser = _.has(user, 'abilities')
183
- const nbArguments = (hasUser ? arguments.length - 1 : arguments.length)
184
- // (operation, service, resource) or (operation, service, context, resource)
185
- const operation = arguments[0]
186
- service = arguments[1]
187
- // (operation, service, context, resource)
188
- if (nbArguments === 4) {
189
- context = arguments[2]
190
- resource = arguments[3]
191
- } else { // Either (operation, service, resource) or (operation, service, context)
192
- if (typeof arguments[2] === 'string') context = arguments[2]
193
- else resource = arguments[2]
194
- }
195
- // Service/Constext/Resource can be omitted, in this case it could be replaced by the user argument
196
- if (_.has(service, 'abilities')) service = undefined
197
- if (_.has(context, 'abilities')) context = undefined
198
- if (_.has(resource, 'abilities')) resource = undefined
199
-
200
- const abilities = (hasUser ? _.get(user, 'abilities') : Store.get('user.abilities'))
201
- logger.debug('Check for abilities ', operation, service, context, resource, abilities)
202
- if (!abilities) {
203
- logger.debug('Access denied without abilities')
204
- return false
205
- }
206
- let result
207
- // If no service we have a single generic operation
208
- if (service) {
209
- // Check for access to service fisrt
210
- const path = api.getServicePath(service, context, false)
211
- result = permissions.hasServiceAbilities(abilities, path)
212
- if (!result) {
213
- logger.debug('Access to service path ' + path + ' denied')
214
- return false
215
- } else if (operation === 'service') {
216
- // When we only check for service-level access return
217
- return true
218
- }
219
- // Then for access to resource
220
- result = permissions.hasResourceAbilities(abilities, operation, service, context, resource)
221
- } else {
222
- result = abilities.can(operation)
223
- }
224
- if (!result) {
225
- logger.debug('Access to resource denied')
226
- } else {
227
- logger.debug('Access to resource granted')
228
- }
229
- return result
230
- }
231
-
232
- const origin = api.getBaseUrl()
233
- if (config.transport === 'http') {
234
- api.transporter = feathers.rest(origin).fetch(window.fetch.bind(window))
235
- api.configure(api.transporter)
236
- } else {
237
- api.socket = io(origin, {
238
- transports: ['websocket'],
239
- path: (config.apiPath || '/') + 'ws'
240
- })
241
- api.transporter = feathers.socketio(api.socket, { timeout: config.apiTimeout || 10000 })
242
- api.configure(api.transporter)
243
- // Retrieve our specific errors on rate-limiting
244
- api.socket.on('rate-limit', (error) => Events.emit('error', error))
245
- }
246
- api.configure(feathers.authentication({
247
- storage: window.localStorage,
248
- storageKey: config.apiJwt || 'feathers-jwt',
249
- path: config.apiPath + '/authentication'
250
- }))
251
- api.configure(reactive({
252
- idField: '_id',
253
- matcher: siftMatcher // Our custom matcher to handle fuzzy search
254
- }))
255
- // By default we automatically renew JWT token before it expires
256
- api.renewJwtOnExpiration = function (authResult) {
257
- const { accessToken } = authResult
258
- const jwt = jwtdecode(accessToken)
259
- // Not expiring token (eg API)
260
- if (!jwt.exp) return
261
- const now = moment()
262
- const expiration = moment.unix(jwt.exp)
263
- // Setup a timeout to renew the token just before it expires if the user is still connected
264
- // Add a small delay to handle reauthentication time
265
- const delay = expiration.diff(now) - 2000
266
- setTimeout(() => {
267
- api.reAuthenticate(true)
268
- }, delay)
269
- }
270
- if (_.get(config, 'renewJwt', true)) {
271
- api.on('login', api.renewJwtOnExpiration)
272
- }
273
- // Object used to store configuration options for services
274
- api.serviceOptions = {}
275
- // Override Feathers configure that do not manage async operations,
276
- // here we also simply call the function given as parameter but await for it
277
- api.configure = async function (fn) {
278
- await fn.call(this, this)
279
- return this
280
- }
281
-
282
- return api
283
- }
284
-
285
- // We don't create a default client based on app configuration here
286
- // as we don't know when the file will be imported first,
287
- // eg it might be imported before another one updating the config.
288
- // It is up to the application to instanciate the client when required.
289
- export let api
290
- export function initializeApi () {
291
- api = createClient(configuration)
292
- return api
293
- }
1
+ import logger from 'loglevel'
2
+ import _ from 'lodash'
3
+ import sift from 'sift'
4
+ import moment from 'moment'
5
+ import jwtdecode from 'jwt-decode'
6
+ import feathers from '@feathersjs/client'
7
+ import { io } from 'socket.io-client'
8
+ import reactive from 'feathers-reactive/dist/feathers-reactive.js'
9
+ import configuration from 'config'
10
+ import { Platform } from 'quasar'
11
+ import { permissions } from '../common/index.js'
12
+ import { Store } from './store.js'
13
+ import { Events } from './events.js'
14
+
15
+ // Setup log level
16
+ if (_.get(configuration, 'logs.level')) {
17
+ logger.setLevel(_.get(configuration, 'logs.level'), false)
18
+ } else {
19
+ logger.setLevel('info')
20
+ }
21
+
22
+ export function createClient (config) {
23
+ // Initiate the client
24
+ const api = feathers()
25
+
26
+ function getBaseUrlStorageKey () {
27
+ return config.appName.toLowerCase() + '-baseUrl'
28
+ }
29
+
30
+ // Matchers that can be added to customize route guards
31
+ let matchers = []
32
+
33
+ function siftMatcher (originalQuery) {
34
+ // Filter out Feathers specific operators like $limit, $skip, etc.
35
+ // (copied from https://github.com/feathersjs-ecosystem/feathers-reactive)
36
+ const keysToOmit = Object.keys(originalQuery).filter(key => key.charCodeAt(0) === 36)
37
+ let query = _.omit(originalQuery, ...keysToOmit)
38
+ // Compatibility with fuzzy search that use $search query syntax
39
+ _.forOwn(query, (value, key) => {
40
+ if ((typeof value === 'object') && _.has(value, '$search')) {
41
+ query[key] = { $regex: new RegExp(_.get(value, '$search'), 'i') }
42
+ }
43
+ })
44
+ // Run registered matchers
45
+ for (const matcher of matchers) {
46
+ query = matcher(query)
47
+ }
48
+ return sift(query)
49
+ }
50
+
51
+ // Setup the api
52
+ api.registerMatcher = function (matcher) {
53
+ if (!matchers.includes(matcher)) {
54
+ matchers.push(matcher)
55
+ }
56
+ }
57
+ api.unregisterMatcher = function (matcher) {
58
+ matchers = matchers.filter(registeredMatcher => registeredMatcher !== matcher)
59
+ }
60
+ api.matcher = siftMatcher
61
+
62
+ // This avoid managing the API path before each service name
63
+ // If a context is not given it will be retrieved from the store if any and used for contextual services
64
+ api.getServicePath = function (name, context, withApiPrefix = true) {
65
+ const options = _.get(api.serviceOptions, name, {})
66
+ let path
67
+ // For non-contextual services path is always the name
68
+ if (!options.context) {
69
+ path = name
70
+ } else {
71
+ // Context is given as string ID or object ?
72
+ if (typeof context === 'string') {
73
+ if (context) path = context + '/' + name
74
+ // Force global context on empty string
75
+ else path = name
76
+ } else if (typeof context === 'object') {
77
+ if (context && context._id) path = context._id + '/' + name
78
+ // Force global context on empty object
79
+ else path = name
80
+ } else {
81
+ // Otherwise test for current context as service is registered as contextual
82
+ const context = Store.get('context')
83
+ if (context) {
84
+ path = api.getServicePath(name, context, false)
85
+ } else {
86
+ // Because it could also be registered as global with the same name fallback
87
+ path = name
88
+ }
89
+ }
90
+ }
91
+
92
+ if (withApiPrefix) {
93
+ path = config.apiPath + '/' + path
94
+ }
95
+ return path
96
+ }
97
+ api.getService = function (name, context) {
98
+ const path = api.getServicePath(name, context)
99
+ const service = api.service(path)
100
+ if (!service) {
101
+ throw new Error('Cannot retrieve service ' + name + ' for context ' + (typeof context === 'object' ? context._id : context))
102
+ }
103
+ // Store the path on first call
104
+ if (!service.path) service.path = path
105
+ return service
106
+ }
107
+ // Used to register an existing backend service with its options
108
+ api.declareService = function (name, options = {}) {
109
+ if (!_.has(api.serviceOptions, name)) _.set(api.serviceOptions, name, options)
110
+ }
111
+ api.getServiceOptions = function (name) {
112
+ return _.get(api.serviceOptions, name)
113
+ }
114
+ // Used to create a frontend only service with its options
115
+ api.createService = function (name, options = {}) {
116
+ let servicePath = options.path || name
117
+ let contextId
118
+ if (options.context) {
119
+ contextId = (typeof options.context === 'object' ? options.context._id : options.context)
120
+ servicePath = contextId + '/' + servicePath
121
+ }
122
+ servicePath = config.apiPath + '/' + servicePath
123
+ if (servicePath.startsWith('/')) servicePath = servicePath.substr(1)
124
+ api.declareService(name, options)
125
+ let service = options.service
126
+ // If we get a function try to call it assuming it will return the service object
127
+ if (typeof service === 'function') {
128
+ service = service(name, api, options)
129
+ }
130
+ // Need to register services with custom methods
131
+ if (options.methods) {
132
+ api.use(servicePath, service || api.transporter.service(servicePath), {
133
+ methods: options.methods
134
+ })
135
+ } else {
136
+ api.use(servicePath, service)
137
+ }
138
+ service = api.service(servicePath)
139
+ if (options.hooks) service.hooks(options.hooks)
140
+ if (options.context) service.context = options.context
141
+ return service
142
+ }
143
+ // Change the base URL/domain to be used (useful for mobile apps)
144
+ api.setBaseUrl = function (baseUrl) {
145
+ window.localStorage.setItem(getBaseUrlStorageKey(), baseUrl)
146
+ // Updating this setting live does not seem to work well in Feathers
147
+ // For now the caller should simply "reload" the app
148
+ /*
149
+ if (config.transport === 'http') {
150
+ Object.keys(this.services).forEach(path => {
151
+ const service = this.service(path)
152
+ if (service.base) {
153
+ service.base = `${baseUrl}/${path}`
154
+ }
155
+ })
156
+ } else {
157
+ let socket = io(baseUrl, {
158
+ transports: ['websocket'],
159
+ path: (config.apiPath || '/') + 'ws'
160
+ })
161
+ this.configure(feathers.socketio(socket))
162
+ }
163
+ */
164
+ }
165
+
166
+ api.getBaseUrl = function () {
167
+ // In case we are not in a mobile platform we can override the default app origin anyway
168
+ let origin = (Platform.is.cordova ? config.domain : config.origin || window.location.origin)
169
+ // Check for registered custom base Url if any
170
+ if (window.localStorage.getItem(getBaseUrlStorageKey())) {
171
+ origin = window.localStorage.getItem(getBaseUrlStorageKey())
172
+ }
173
+ return origin
174
+ }
175
+
176
+ api.can = function () {
177
+ let service, context, resource
178
+ // We can call this with different signatures
179
+ // Last argument can always be an additional user,
180
+ // if not defined the user is retrieved from the store
181
+ const user = arguments[arguments.length - 1]
182
+ const hasUser = _.has(user, 'abilities')
183
+ const nbArguments = (hasUser ? arguments.length - 1 : arguments.length)
184
+ // (operation, service, resource) or (operation, service, context, resource)
185
+ const operation = arguments[0]
186
+ service = arguments[1]
187
+ // (operation, service, context, resource)
188
+ if (nbArguments === 4) {
189
+ context = arguments[2]
190
+ resource = arguments[3]
191
+ } else { // Either (operation, service, resource) or (operation, service, context)
192
+ if (typeof arguments[2] === 'string') context = arguments[2]
193
+ else resource = arguments[2]
194
+ }
195
+ // Service/Constext/Resource can be omitted, in this case it could be replaced by the user argument
196
+ if (_.has(service, 'abilities')) service = undefined
197
+ if (_.has(context, 'abilities')) context = undefined
198
+ if (_.has(resource, 'abilities')) resource = undefined
199
+
200
+ const abilities = (hasUser ? _.get(user, 'abilities') : Store.get('user.abilities'))
201
+ logger.debug('Check for abilities ', operation, service, context, resource, abilities)
202
+ if (!abilities) {
203
+ logger.debug('Access denied without abilities')
204
+ return false
205
+ }
206
+ let result
207
+ // If no service we have a single generic operation
208
+ if (service) {
209
+ // Check for access to service fisrt
210
+ const path = api.getServicePath(service, context, false)
211
+ result = permissions.hasServiceAbilities(abilities, path)
212
+ if (!result) {
213
+ logger.debug('Access to service path ' + path + ' denied')
214
+ return false
215
+ } else if (operation === 'service') {
216
+ // When we only check for service-level access return
217
+ return true
218
+ }
219
+ // Then for access to resource
220
+ result = permissions.hasResourceAbilities(abilities, operation, service, context, resource)
221
+ } else {
222
+ result = abilities.can(operation)
223
+ }
224
+ if (!result) {
225
+ logger.debug('Access to resource denied')
226
+ } else {
227
+ logger.debug('Access to resource granted')
228
+ }
229
+ return result
230
+ }
231
+
232
+ const origin = api.getBaseUrl()
233
+ if (config.transport === 'http') {
234
+ api.transporter = feathers.rest(origin).fetch(window.fetch.bind(window))
235
+ api.configure(api.transporter)
236
+ } else {
237
+ api.socket = io(origin, {
238
+ transports: ['websocket'],
239
+ path: (config.apiPath || '/') + 'ws'
240
+ })
241
+ api.transporter = feathers.socketio(api.socket, { timeout: config.apiTimeout || 10000 })
242
+ api.configure(api.transporter)
243
+ // Retrieve our specific errors on rate-limiting
244
+ api.socket.on('rate-limit', (error) => Events.emit('error', error))
245
+ }
246
+ api.configure(feathers.authentication({
247
+ storage: window.localStorage,
248
+ storageKey: config.apiJwt || 'feathers-jwt',
249
+ path: config.apiPath + '/authentication'
250
+ }))
251
+ api.configure(reactive({
252
+ idField: '_id',
253
+ matcher: siftMatcher // Our custom matcher to handle fuzzy search
254
+ }))
255
+ // By default we automatically renew JWT token before it expires
256
+ api.renewJwtOnExpiration = function (authResult) {
257
+ const { accessToken } = authResult
258
+ const jwt = jwtdecode(accessToken)
259
+ // Not expiring token (eg API)
260
+ if (!jwt.exp) return
261
+ const now = moment()
262
+ const expiration = moment.unix(jwt.exp)
263
+ // Setup a timeout to renew the token just before it expires if the user is still connected
264
+ // Add a small delay to handle reauthentication time
265
+ const delay = expiration.diff(now) - 2000
266
+ setTimeout(() => {
267
+ api.reAuthenticate(true)
268
+ }, delay)
269
+ }
270
+ if (_.get(config, 'renewJwt', true)) {
271
+ api.on('login', api.renewJwtOnExpiration)
272
+ }
273
+ // Object used to store configuration options for services
274
+ api.serviceOptions = {}
275
+ // Override Feathers configure that do not manage async operations,
276
+ // here we also simply call the function given as parameter but await for it
277
+ api.configure = async function (fn) {
278
+ await fn.call(this, this)
279
+ return this
280
+ }
281
+
282
+ return api
283
+ }
284
+
285
+ // We don't create a default client based on app configuration here
286
+ // as we don't know when the file will be imported first,
287
+ // eg it might be imported before another one updating the config.
288
+ // It is up to the application to instanciate the client when required.
289
+ export let api
290
+ export function initializeApi () {
291
+ api = createClient(configuration)
292
+ return api
293
+ }
@@ -1,22 +1,22 @@
1
- import _ from 'lodash'
2
- import logger from 'loglevel'
3
- import config from 'config'
4
- import { api } from './api.js'
5
- import { Store } from './store.js'
6
-
7
- // Export singleton
8
- export const Capabilities = {
9
- async initialize () {
10
- const capabilities = await window.fetch(api.getBaseUrl() + _.get(config, 'apiPath') + '/capabilities')
11
- const content = await capabilities.json()
12
- logger.debug('[KDK] fetched capabilities:', JSON.stringify(content, null, 4))
13
- this.content = content
14
- // Used to ensure backward compatibility
15
- Store.set('capabilities.api', content)
16
- Store.set('capabilities.client', _.pick(config, ['version', 'buildNumber']))
17
- },
18
- get (key) {
19
- if (!this.content) logger.error(new Error('Capabilities must be initialized first'))
20
- else return _.get(this.content, key)
21
- }
22
- }
1
+ import _ from 'lodash'
2
+ import logger from 'loglevel'
3
+ import config from 'config'
4
+ import { api } from './api.js'
5
+ import { Store } from './store.js'
6
+
7
+ // Export singleton
8
+ export const Capabilities = {
9
+ async initialize () {
10
+ const capabilities = await window.fetch(api.getBaseUrl() + _.get(config, 'apiPath') + '/capabilities')
11
+ const content = await capabilities.json()
12
+ logger.debug('[KDK] fetched capabilities:', JSON.stringify(content, null, 4))
13
+ this.content = content
14
+ // Used to ensure backward compatibility
15
+ Store.set('capabilities.api', content)
16
+ Store.set('capabilities.client', _.pick(config, ['version', 'buildNumber']))
17
+ },
18
+ get (key) {
19
+ if (!this.content) logger.error(new Error('Capabilities must be initialized first'))
20
+ else return _.get(this.content, key)
21
+ }
22
+ }